Na quinta-feira, ao lançar os processadores AMD EPYC Genoa de 4ª geração, a AMD também publicou o AOCC 4.0 como a versão mais recente do compilador AMD Optimizing C/C++. Eu o testei no último dia e continua mostrando o impacto positivo no desempenho do ajuste adequado do compilador.
A versão 4.0 do AMD Optimizing C/C++ Compiler apresenta principalmente suporte e otimizações iniciais do Zen 4″znver4″. O log de alterações público simplesmente o chama de”Suporte e otimizações para processadores AMD Family 19h (arquitetura de núcleo AMD “Zen4”)”. Não está claro a extensão das otimizações do Zen 4 neste estágio, particularmente com o AOCC sendo um downstream de código fechado do LLVM/Clang.
Além do AOCC 4.0 ter Suporte e otimizações Zen 4, há melhorias de suporte OpenMP 4.5 para Fortran, melhorias de depuração/diagnóstico, ajuste para a AMD Math Library 4.0, suporte para variantes de vetor e lib mais rápidas da AMD Math Library e variantes aprimoradas de vários escalares/vetoriais/transformações de loop. Mais detalhes sobre o AOCC 4.0 via developer.amd.com.
Sem Zen pendente 4 (znver4) patches ainda para upstream LLVM.
AOCC 4.0 é derivado das fontes upstream LLVM/Clang 14.0.6. O LLVM 15 foi lançado no início de setembro, enquanto o AOCC ainda não foi baseado no último lançamento de recurso de meio ano. Para alguns benchmarks preliminares, executei alguns benchmarks de comparação no Zen 4 entre AOCC 4.0 e LLVM Clang 14.0 conforme empacotado no Ubuntu Linux.
Devido ao servidor Titanite ser meu único EPYC 9004 plataforma de testes da série por enquanto e que está ocupado realizando outros benchmarks, para experimentar o AOCC 4.0, tenho executado benchmarks no AMD Ryzen 9 7950X. O AOCC 4.0 suporta todos os produtos Ryzen/Threadripper/EPYC e ainda mantém o suporte para as gerações anteriores de processadores Zen.
Durante o teste, todos os CFLAGS/CXXFLAGS foram mantidos da mesma forma, mas apenas reconstruindo todo o software em teste com AMD AOCC 4.0 ou LLVM Clang 14.0 upstream.
Como upstream LLVM/Clang Git e GCC Git pegam mais otimizações para o Zen 4, é claro que executarei um muito maior e comparação de compilador mais ampla no Zen 4-além de rodar nos processadores da série EPYC 9004 mais relevantes também.
Assim como nas versões anteriores do AOCC para Zen 1/2/3, o AOCC 4.0 com Zen 4 ajuda a espremer desempenho adicional além do que é encontrado atualmente nos compiladores de código aberto upstream:
O LLVM Clang 14 estava construindo o software com o AVX-512 e outras novas extensões habilitadas, então para este benchmarking AOCC vs. o impacto dos ajustes/otimizações da AMD e nenhuma diferença de ISA.
AOCC 4.0 está parecendo um bom start por ajudar a maximizar o desempenho do processador Zen 4 no lado do compilador.
O AOCC 4.0 estava apresentando algumas melhorias interessantes além do já excelente desempenho do AMD Ryzen 9 7950X Linux:
Há ganhos de desempenho pequenos a generosos possíveis no uso do AOCC 4.0 sobre o compilador upstream LLVM Clang 14 para o qual ele é baseado. Esperamos que o GCC veja em breve a tabela de custos ajustada para o Zen 4 para sua ativação inicial do Znver4 e ainda aguarde a ativação do LLVM/Clang znver4 upstream e qualquer ajuste lá.
Longa história resumindo, o AOCC 4.0 parece ótimo pelo menos nos meus testes iniciais realizados no AMD Ryzen 9 7950X. Além da rota AOCC como um compilador otimizado com foco na AMD, continuo esperando-e pressionando-para que a AMD garanta que os compiladores upstream GCC e LLVM/Clang de código aberto recebam suporte oportuno e honroso. A AMD está absolutamente marcando todas as caixas certas com sua execução de hardware agora, enquanto no lado do Linux/software de código aberto eles ainda mostram espaço para melhorias, especialmente se quiserem corresponder às tradições e ao nível de suporte há muito apreciado pelos clientes Intel Linux para a qualidade do suporte de código aberto upstream no lançamento. A AMD, por sua vez, vem melhorando no lado do software e suas contratações contínuas (após a onda inicial de sucessos de EPYC no data center, permitindo um maior investimento) certamente estão trabalhando para apontar o navio nessa direção.
Além disso, eu pessoalmente continuo um pouco perplexo porque a AMD espera até o lançamento posterior do EPYC antes de postar o AOCC 4.0 em vez de atacar inicialmente quando a série Ryzen 7000 estreou. A execução anterior poderia ter levado a uma experiência melhor para qualquer desktop/estação de trabalho de desenvolvedor e aqueles que podem estar usando a série Ryzen 7000 como uma avaliação/degrau para começar a preparar suas próprias bases de código de software para Zen 4 com eventuais servidores EPYC. Foi assim também com o Zen 3 esperando por Milan antes de publicar o AOCC 3.0 com um intervalo de vários meses que Ryzen desenvolve desktops, aqueles que executam distribuições Linux baseadas em código-fonte, desenvolvedores de compiladores de código aberto mais tempo para identificar diferenças no código gerado, e outros poderiam ter ajudado a”chutar os pneus”no novo AOCC antes da disponibilidade do EPYC. Por que não enviá-lo mais cedo como AOCC”beta”para testes de Ryzen? Imagino que isso também se resuma aos recursos de engenharia e à necessidade de todo o tempo que puderem para trabalhar nas otimizações do compilador.
Fique atento para mais benchmarks AOCC 4.0 do EPYC Genoa e uma comparação maior do compilador, incluindo o Clang-15/GCC-13/etc no Zen 4, pois o suporte para todos esses compiladores vê melhorias. Considerando os benchmarks AMD EPYC 9654 e 9554 Genoa de ontem, será muito divertido ver o quão mais rápido em geral esse grande conjunto de benchmarks é ao aproveitar o AOCC 4.0 sobre o GCC 12, conforme usado para o compilador do sistema em todos os processadores testados.