Para aqueles que compilam seus programas usando o nível de otimização comum”-O2″, como é usado para compilações de produção por muitas distribuições Linux e outros fornecedores de software, o desenrolamento de loop pequeno está sendo ativado neste nível para GCC 13. Habilitando o desenrolamento de loop pequeno com-O2 deve ajudar o desempenho em algumas áreas das modernas CPUs Intel e AMD.

O engenheiro da Intel, Hongyu Wang, liderou a mudança que se fundiu hoje ao GCC 13. O desenrolamento de pequenos loops está sendo ativado para o nível de otimização-O2 devido ao seu benefício com as modernas CPUs AMD e Intel. Em um caso de teste SPEC específico, o desenrolar de um pequeno loop em-O2 melhorou o desempenho do servidor Ice Lake em 9%, ajudando também um sistema Zen 3 em 7,4%. Como consequência, isso levou a um aumento de 0,9% no tamanho do código. Mas para os outros casos de referência executados, houve menos ou nenhum impacto mensurável. Claro, será interessante testar o GCC 13 com uma gama mais diversificada de benchmarks para ver como tudo corre.

Hongyu Wang explicou no commit:

“Os processadores modernos têm decodificadores de instrução de várias vias Para x86, icelake/zen3 tem 5 uops, portanto, para loop pequeno com=4 instruções (geralmente tem 3 uops com um par cmp/jmp que pode ser macro-fundido), o decodificador teria 2 bolhas de uops para cada iteração e o pipeline não poderia ser totalmente utilizado.

Portanto, este patch permite o desenrolamento de loop para loop de tamanho pequeno em O2 para preencher o decodificador o máximo possível. Ele ativa o desenrolamento do loop rtl quando targetm.loop_unroll_adjust existe e somente O2 plus speed. No backend x86, o comportamento padrão é desenrolar pequenos loops com menos de 4 insns por 1 vez.

Isso melhora 548.exchange2 em 9% no icelake e 7,4% no zen3 com incremento de 0,9% no tamanho do código. outros benchmarks as variantes são menores e o tamanho geral do código aumentou 0,2%.

O tamanho da imagem do kernel aumentou em 0,06% e nenhum impacto no eembc.”

Esta alteração foi mesclada para GCC 13 com-O2. A versão estável do GCC 13.1 deve ser lançado em seu período normal de março a abril. À medida que esse lançamento se aproxima, estarei executando meus benchmarks de comparação de compiladores GCC habituais.

Categories: IT Info