Categorias
Utilitário

GCC retoma patch para -mtune=generic com ganhos de até 30% em CPUs Intel e AMD

A equipe de desenvolvimento do compilador GCC (GNU Compiler Collection) retomou um patch originalmente proposto em 2021 que visa otimizar o comportamento de inlining das funções memcpy e memset ao compilar com a opção -mtune=generic. Essa opção é amplamente utilizada por distribuições Linux e provedores de software para gerar código genérico, mas eficiente, para diversas arquiteturas x86_64.

Apesar de ter perdido o prazo para o lançamento do GCC 15, que está prestes a ser finalizado, o patch está novamente em discussão ativa — agora com ajustes e novos dados de desempenho que reforçam sua relevância.

O que o patch propõe?

A proposta simplifica a estratégia de inlining para memcpy e memset no modo -mtune=generic, com o objetivo de evitar ramificações de código (branches) desnecessárias. O comportamento atualizado aplica técnicas como:

  • Utilização de instruções rep movsb/stosb para tamanhos de dados fixos e conhecidos (até 256 bytes).
  • Uso de laços de repetição apenas quando o tamanho não é constante.
  • Chamada para a biblioteca padrão (libc) quando o tamanho é desconhecido ou maior que 256 bytes.

Essas mudanças refletem melhorias na eficiência de execução e no tamanho do código gerado, especialmente em sistemas modernos que se beneficiam do uso das instruções otimizadas rep.

Benefícios em benchmarks

Os testes realizados com essa nova abordagem mostraram ganhos expressivos nos benchmarks EEMBC — especialmente relevantes para aplicações embarcadas e sensíveis ao desempenho de memória. A seguir, alguns destaques:

Intel Ice Lake:

  • EEMBC: até +14%
  • SPEC CPU 2017: impacto neutro (~0,37%)

Intel Cascade Lake:

  • EEMBC: até +16%
  • SPEC CPU 2017: impacto praticamente nulo

AMD Zen 3:

  • EEMBC: até +30% em casos específicos
  • SPEC CPU 2017: variações leves, com ganho médio de ~0,15%

Esses números são particularmente relevantes porque a flag -mtune=generic é usada por padrão na maioria dos pacotes de software de distribuições Linux. Otimizar para ela significa melhorar o desempenho de milhões de instalações mundo afora.

Impacto no tamanho do código

Os testes também avaliaram o tamanho dos binários gerados com e sem o patch. A diferença foi mínima, com variações de até 1% em alguns casos — resultado considerado aceitável, já que o ganho de desempenho compensa amplamente esse impacto.

Situação atual e próximos passos

O patch ainda está em fase de revisão pública. H.J. Lu, engenheiro da Intel, está liderando a retomada do código e solicitando feedback da comunidade. A expectativa é que, se não for incluído no GCC 15, possa integrar o GCC 16, dada sua importância estratégica.

Dado o uso massivo do -mtune=generic em compilações do kernel Linux, navegadores, bibliotecas de sistema e softwares embarcados, a adoção deste patch representa um ganho coletivo significativo para o ecossistema de código aberto. Veja o patch e discussões na lista do GCC.

Por Emanuel Negromonte

Fundador do SempreUPdate. Acredita no poder do trabalho colaborativo, no GNU/Linux, Software livre e código aberto. É possível tornar tudo mais simples quando trabalhamos juntos, e tudo mais difícil quando nos separamos.

Sair da versão mobile