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.