Uma alteração de uma linha no GCC resultou em um aumento de 12% em um teste e uma diminuição de 14% em outro.

Um engenheiro da Intel fez uma alteração de uma linha no conjunto de compiladores GCC, aumentando o custo da previsão incorreta de ramificação em processadores x86. Essa mudança permitiu melhorar o desempenho do código gerado em 12,7% no teste 544.nab_r com as otimizações "-O2 -mtune=graniterapids" para CPUs Intel Granite Rapids/Xeon e em 12,1% com as otimizações "-O2 -mtune=znver5" em CPUs AMD Zen5.

A alteração do peso de "COSTS_N_INSNS (2)" para "COSTS_N_INSNS (2) + 3" aumenta o impacto do erro de previsão de 2 para 5 instruções condicionais, refletindo melhor as características dos pipelines de comando em CPUs modernas, onde os erros de previsão de ramificação são mais custosos. Essa alteração força o compilador a transformar expressões "if" em instruções condicionais sem saltos, como CMOV, eliminando as pausas causadas por previsões de ramificação incorretas que exigem um reset do estado do pipeline. Anteriormente, o peso "COSTS_N_INSNS (2) + 3" era atribuído no GCC apenas para processadores Intel Ice Lake e Alder Lake, e agora é definido para o perfil genérico de processadores x86.

Notavelmente, após a adoção do patch, um regresso surgiu, fazendo com que o teste "Hint" fosse executado 30% mais devagar para um dos desenvolvedores do GCC ao compilar com as opções "-march=generic -mtune=znver5" e "-march=generic -mtune=graniterapids". O desempenho nos testes SPEC2017 e SPEC2026 permaneceu no mesmo nível após a mudança. A existência do regresso foi confirmada pelo autor do commit original, que indicou que a desaceleração do teste Hint é de 14% ao compilar com as opções "-O2 -mtune=generic -march=x86-64-v3".

A desaceleração é explicada pelo fato de que o código do teste Hint possui apenas uma construção condicional, que é convertida pelo GCC em uma representação baseada em CMOV. Essa construção é executada com bastante raridade (em 3%) e sua otimização não afeta o desempenho. Ao mesmo tempo, a mudança no modo de geração de código resultou em um efeito colateral que desacelerou a execução de um código que é executado com mais frequência.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster