Decorrente de meus recentes benchmarks AWS Graviton3 e analisando Graviton3 contra Intel Xeon e AMD EPYC, vários leitores Phoronix manifestaram interesse em ver alguns benchmarks de ajuste de compilador para o Graviton3 em torno de seus núcleos Arm Neoverse-V1 com suporte SVE. Aqui estão alguns benchmarks para os interessados ​​no impacto do ajuste do compilador para este novo processador de nuvem Arm de alto desempenho.

Os testes neste artigo foram com uma instância do Amazon EC2 c7g.8xlarge apresentando 32 núcleos de uma plataforma Graviton3. O Ubuntu 22.04 LTS estava sendo executado nesta instância do EC2 com seu kernel Linux 5.15 padrão, enquanto optava por usar gcc-snapshot no Ubuntu 22.04 para fornecer uma pilha de compilador baseada em GCC12 mais recente.

A partir dessa mesma instância Graviton3, um número de benchmarks C/C++ de código aberto foram realizados durante o teste com os seguintes CFLAGS/CXXFLAGS em teste:

-O3-march=armv8.4-a para ARMv8.4 como Neoverse-V1 é baseado.

-O3 0march=armv8.4-a+sve para especificar o suporte Arm SVE (Scalable Vector Extension) encontrado com Neoverse-V1.

-O3-march-armv8.4-a+sve-mcpu=neoverse-v1 para também aproveitar o ajuste de CPU específico para o Neoverse-V1.

Adicionado no GCC 11 foi o suporte Arm Scalable Vector Extension (SVE), incluindo a capacidade de vetorização automática para muitos recursos SVE. Vamos dar uma olhada para ver a diferença que esses sinalizadores do compilador têm no desempenho resultante dos binários gerados em execução no Graviton3 na nuvem da Amazon.

O teste do compilador no Graviton3 foi limitado apenas a essas três configurações para economizar custos operacionais na nuvem.

As opções do compilador SVE forneceram alguma ajuda para os testes do codificador de imagem JPEG XL para oferecer melhor desempenho em relação ao direcionamento básico do Armv8.4 sem SVE. O OpenJPEG também se beneficiou até certo ponto do SVE.

Em outras cargas de trabalho, a vantagem do SVE variou de ganhos leves a moderados.

O suporte à vetorização automática SVE do GCC 12 ajudou em parte do áudio codificar benchmarks.

Claro, é altamente dependente do software em teste quanto impacto, se houver, ele pode ter do Arm SVE e outros ajustes do Neoverse-V1.

Com Zstd, por exemplo apenas o ajuste ajudou no desempenho da descompactação para o modo longo, enquanto nas outras configurações de compactação Zstd testadas não houve diferença mensurável.

No caso de alguns benchmarks como Crypto++, o ajuste-mcpu=neoverse-v1 na verdade, teve um impacto negativo no desempenho.

A autovetorização do GCC e/ou SVE tiveram um impacto negativo no desempenho da biblioteca de processamento de sinal digital de código aberto Liquid-DSP.

Ou nos benchmarks de criptografia Botan, o ajuste Neoverse-V1 foi uma vantagem notável para alguns dos algoritmos de criptografia.

O desempenho da biblioteca de rede neural TNN Tencent variou com o SVE.

Para encurtar a história, como costuma ser o caso, em grande parte se resume às bases de código específicas e às cargas de trabalho que você se engajar ativamente para saber se o ajuste extra do compilador vale a pena. Em algumas cargas de trabalho, o GCC 12, conforme testado, mostrou algum benefício com seu suporte à vetorização automática SVE, enquanto em outros casos nem tanto e, em alguns casos, regrediu o desempenho. Será interessante ver o impacto do uso de intrínsecos SVE ajustados à mão pelos principais softwares de código aberto, à medida que mais processadores Arm chegam com suporte a SVE/SVE2, bem como como os avanços intermináveis ​​do compilador de código aberto evoluem.

p>

Aqueles que desejam ver todos os benchmarks de comparação de sinalizadores de compilador testados para a instância Graviton3 podem ver esta página de resultados a>.

Categories: IT Info