Após as recentes discussões sobre-O3’ing no kernel Linux e outras otimizações do compilador, chegou um pedido para ver alguns novos benchmarks de otimização do compilador GCC com o GCC 12 lançado recentemente. Então, aqui está uma nova visão dos vários níveis de otimização do GCC até-Ofast, bem como com otimizações de tempo de link (LTO) e ajuste”-march=native”no novo GCC 12 com a plataforma AMD Ryzen Threadripper 3990X madura.

Como alguns novos benchmarks de referência com várias otimizações do compilador GCC, várias cargas de trabalho/benchmarks de aplicativos de espaço do usuário foram criados com os seguintes CFLAGS/CXXFLAGS:

-O0
-Og
-O1
-O2
-O3
-Ofast
-O2-mar=nativo
-O3-mar=nativo
-Ofast-march=native
-O2-march=native-flto
-O3-march=native-flto
-Ofast-march=native-flto

Todos dos testes estava fazendo uso do GCC 12.1.1 conforme enviado pela Fedo ra Workstation 36 como uma das primeiras distribuições Linux usando GCC 12 estável junto com o resto da cadeia de ferramentas GNU de código aberto de ponta. Todos os testes ocorreram em uma estação de trabalho AMD Ryzen Threadripper 3990X.

Nenhuma outra alteração foi feita no estado do sistema além de reconstruir todos os testes a cada vez com os diferentes CFLAGS/CXXFLAGS em teste.

Primeiro foram algumas execuções com o jogo derivado de Quake 2 de código aberto yquake2 usando seu renderizador baseado em CPU. Não houve muita oscilação nas taxas de quadros de-O1 a-O3, mas com-Ofast ou usando”-march=native”espremeu alguns FPS extras. O uso de otimizações de tempo de link (LTO) com-flto ajudou a alcançar o desempenho máximo.

Sob o benchmark de criptografia crypto++, não houve muita influência após-O2 nesta estação de trabalho AMD Ryzen Threadripper.

Enquanto isso, o pacote de software de biologia molecular MrBayes é uma das cargas de trabalho que se beneficia significativamente do nível de otimização”-Ofast”, embora com matemática potencialmente insegura.

A biblioteca de análise JSON de alta velocidade simdjson fez se beneficiar do ajuste”-march=native”.

Não houve muita diferença com o desempenho do Zstd além da execução-O0 que é sem nenhuma otimização do compilador. O Zstd falhou ao compilar com a execução-Og.

Os benchmarks do SciMark2 tendem a ser muito sensíveis às alterações do compilador e tendem a se beneficiar muito de otimizações aumentadas, bem como LTO.

Para a maioria usuários,”-O3-march=native-flto”é provavelmente o mais agressivo que você deseja sem arriscar matemática potencialmente insegura ou aumentar a probabilidade de possíveis problemas surgirem.

Esses resultados são, em grande parte, os mesmo comparativamente com o que vimos nas comparações anteriores de otimização do compilador GCC, mas aqui estão os novos resultados para os interessados.

Aqueles que desejam ver ainda mais desses benchmarks de ajuste de otimização do compilador GCC 12 Threadripper podem ver esta página de resultados do OpenBenchmarking.org para todo o lote de dados.

Ao obter a média geométrica de todos os resultados, indo do-O2 comum ao-O3, resultou em um aumento geral de 6%. O ajuste”-march=native”em cima do-O3 foi de cerca de um aumento geral de 2% adicional, mas em grande parte se resume à base de código/software específico para o nível de melhoria do ajuste de instrução de CPU nativa. Os resultados-flto continuam a impressionar e a ser de grande benefício. Com os lançamentos recentes do GCC (e do Clang), as otimizações de tempo de link ficaram relativamente estáveis ​​e tiveram menos problemas de compilação e outras dores de cabeça em comparação com anos anteriores, com versões de compilador antigas que às vezes apresentavam problemas para lidar com LTO. Com isso, mais distribuições Linux felizmente começaram a construir seus pacotes com otimizações de tempo de link quando relevantes.

Categories: IT Info