Graças ao trabalho realizado pelos engenheiros da Sony e, posteriormente, oferecido para integração à base de código LLVM, nas últimas semanas, o suporte para um front-end de código de bits LTO unificado tornou-se realidade.
Até então, ao lidar com as otimizações de tempo de link (LTO) do LLVM, a escolha entre bitcode LTO "thin" ou "full" tinha que ser feita na fase pré-link, pois o bitcode LTO gerado era incompatível entre si. No entanto, com o front-end de código de bits LTO unificado desenvolvido pela Sony, agora é possível usar o mesmo código de bits para ambas as opções (LTO fina ou completa), deixando a decisão para o estágio de vinculação. O ThinLTO do LLVM oferece melhor escalabilidade em relação ao LTO "completo" convencional. Se você não está familiarizado com o ThinLTO, pode consultar a documentação do LLVM para obter mais informações.
Matthew Voss, da Sony, explicou no LLVM Discourse sobre o trabalho realizado para unificar o bitcode LTO:
"Atualmente, o modo LTO é escolhido durante a fase pré-link e não pode ser alterado posteriormente. Os bitcodes LTO 'thin' e 'full' podem compartilhar um formato binário (LLVM bitcode), mas são explicitamente incompatíveis. Quando os resumos foram adicionados ao Full LTO, eles receberam um nome diferente para garantir que nunca fossem confundidos com os resumos ThinLTO.
Nosso pipeline LTO cria uma única estrutura de bitcode LTO que pode ser usada por Thin ou Full LTO. Isso significa que o modo LTO pode ser escolhido no momento do link. Além disso, isso significa que todo bitcode LTO é compatível, do ponto de vista de otimização. Atualmente, se uma compilação tiver arquivos de bitcode Thin e Full LTO, eles serão otimizados separadamente, sem nenhuma informação compartilhada entre os back-ends Full e Thin. Como a estrutura interna de um arquivo bitcode não é visível para a maioria dos usuários, esse pode não ser o comportamento esperado. Essa compatibilidade também significa que a implantação de bibliotecas de código de bits pode ser um processo mais simples. Um conjunto normalizado de recursos em todos os arquivos bitcode ajuda a garantir que os usuários obtenham as otimizações esperadas quando essas bibliotecas são incluídas.
Implementamos esse recurso tornando cada módulo LTO idêntico em estrutura a um módulo de bitcode ThinLTO dividido. Em seguida, usamos o pipeline Full LTO para otimização pré-link. Isso permite otimização e compatibilidade máximas. Também, como você verá abaixo, leva a tamanhos de arquivo maiores. Isso se deve ao fato de que as informações de tipo estão sempre disponíveis ao usar esse esquema, o que significa que mais módulos divididos são criados."
No início deste mês, o código LLVM foi confirmado para adicionar este Unified LTO Bitcode Frontend, seguido pelo suporte no clang com a opção "-funified-lto". Na semana passada, o suporte ao LLD para este bitcode LTO unificado também foi adicionado.
Até a próxima !!
Nenhum comentário:
Postar um comentário