Análise de Desempenho LLVM-MCA: Armadilhas da Otimização de Vetorização

O autor encontrou um problema de degradação de desempenho ao vetorizar código usando ARM NEON. O código inicial usava cinco instruções de carregamento (5L), enquanto a versão otimizada usava duas instruções de carregamento e três instruções de extensão (2L3E) para reduzir acessos à memória. Surpreendentemente, a versão 2L3E foi mais lenta. Usando LLVM-MCA para análise de desempenho, descobriu-se que 2L3E causou gargalos nas unidades de execução da CPU, utilização de recursos desequilibrada e dependências de instruções mais fortes, levando à regressão de desempenho. A versão 5L teve melhor desempenho devido ao seu uso mais equilibrado de recursos e instruções de carregamento independentes. Este estudo de caso destaca como otimizações aparentemente sólidas podem resultar em degradação de desempenho se a contenção de recursos da CPU e as dependências de instruções não forem consideradas; LLVM-MCA se mostra uma ferramenta valiosa para analisar tais problemas.