Pergunta

Temos estado a olhar para g ++ versões 3.2.3 e 4.2.4. Com 4.2.4, as melhorias de desempenho em algumas das nossa base de código é significativo.

Eu tentei pesquisar na gcc buzilla banco de dados para encontrar dicas sobre o que os erros podem ter teve uma melhora tão dramática, mas eu não encontrou qualquer bug individual que se destacou como sendo um candidato.

As melhorias o resultado de muitas pequenas mudanças que têm lentamente tiveram um efeito? Ou estava lá dizer um conjunto top 5 de melhorias que podem ter feito a diferença?

Para alguns fundo, a nossa base de código faz bom uso de contêineres STL e algoritmos, bem como C ++ recursos, como a 'inline' palavra-chave.

Foi útil?

Solução

Na minha experiência, 3.4 é o lugar onde o desempenho basicamente atingiu o pico; 4.2 é realmente mais lento do que 3,4 no meu projeto, com 4,3 sendo o primeiro a desempenho praticamente igual 3.4 do. 4.4 é ligeiramente mais rápido do que 3.4.

Há alguns casos específicos que eu encontrei onde as versões mais antigas do gcc fez algumas coisas retardadas incrivelmente em código - não era uma função especial, que passou de 128 para 21 relógios de 3,4 para 4,3, mas que era, obviamente, um especial caso (era um ciclo curto, onde a adição de apenas algumas instruções desnecessárias desempenho maciçamente hurt).

Eu pessoalmente uso 3.4 só porque ele compila muito mais rápido, fazendo testar muito mais rápido. Eu também tentar evitar as versões mais recentes, porque eles parecem ter maus hábitos de miscompiling código; core2 --march em versões recentes do gcc provoca segfaults no meu programa, por exemplo, porque emite código autovectorized que tenta executar acessos alinhados em endereços desalinhadas.

Globalmente, porém as diferenças raramente são grandes; 3-5% é o absoluto mais que já vi em termos de mudança de desempenho.

Agora, note que este é C; as coisas podem ser diferentes em C ++.

Outras dicas

Eu acredito que o otimizador foi totalmente reformulado na série gcc4. Veja esta página, por exemplo, cerca de vetorização:

http://gcc.gnu.org/projects/tree-ssa /vectorization.html

Para obter informações, uma vez eu fiz uma referência de c [i] = a [i] + b [i] com matrizes dinâmicas, matrizes estáticos e std :: vector e foi o std :: vector que foi o mais rápido ( w / gcc 4.1). diferença de 30% no desempenho.

Streams foram muito lento em 3,3 e tem muito mais rápido em 3,4. ( mensagem na lista de discussão gcc ) Aposto outras coisas melhoraram muito.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top