O engenheiro do Google, Ilya Tocar, introduziu a noção de suporte AVX “leve” na infraestrutura do compilador LLVM para utilizar alguns benefícios do Advanced Vector Extensions (AVX), mas tentando evitar o impacto de energia/frequência que o uso do AVX-512 tem nas gerações mais antigas da Intel processadores.
Fundido com o LLVM 16 Git — pouco antes do término do desenvolvimento de recursos do LLVM 16 — houve esta introdução do conceito AVX “leve” para este compilador de código aberto. Este modo AVX leve permite a geração de carregamento/armazenamento de 256 bits, mesmo se a preferência for definida (por meio da opção do compilador -mprefer-vector-width=128) para preferir uma largura de vetor de 128 bits.
Engenheiro do Google apresenta o suporte “Light AVX” no LLVM
Este modo light do AVX pode ser habilitado para o compilador Clang passando +allow-light-256-bit para a opção -mattr= do compilador. Este modo AVX leve é conectado para ser utilizado em processadores Intel Icelake e mais antigos, onde pode haver impacto no desempenho (potência/frequência) ao encontrar o uso de AVX de 256 bits/512 bits.
As CPUs Intel mais recentes não têm grandes problemas com o uso do AVX-512 – caso você tenha perdido, veja minha comparação de benchmark AVX-512 Sapphire Rapids. Da mesma forma, o suporte AVX-512 da AMD introduzido com os processadores Zen 4 também não apresenta os problemas de frequência/energia do AVX-512 .
Ilya Tocar resumiu este trabalho AVX leve para LLVM com a mensagem de confirmação:
As instruções AVX/AVX512 podem causar queda de frequência, por exemplo, Skylake. A magnitude da queda de frequência/desempenho depende da instrução (multiplicação versus carregamento/armazenamento) e da largura do vetor. Atualmente, os usuários que desejam evitar essa queda podem especificar -mprefer-vector-width=128.
No entanto, isso também evita gerações de instruções de 256 bits, que não possuem queda de frequência associada (principalmente carregamento/armazenamento).Adicione um sinalizador de ajuste que permita gerações de carregamento/armazenamento AVX de 256 bits, mesmo quando -mprefer-vector-width=128 estiver definido, para acelerar o memcpy&co. Verificado que a execução do loop memcpy em todos os núcleos não tem impacto na frequência e zero contadores de perf CORE_POWER:LVL[12]_TURBO_LICENSE.Torna a memória de cópia mais rápida, por exemplo:BM_memcpy_aligned/256 80,7 GB/s ± 3% 96,3 GB/s ± 9% +19,33% (p=0,000 n=9+9)
Essa opção AVX “leve” para gerações anteriores de CPUs Intel será encontrada no LLVM 16.0, que deve ser lançado por volta de 7 de março.