Pergunta

Alguém sabe este compilador de recurso?Parece GCC suporte.Como funciona?Qual é o potencial de ganho?Caso em que é bom?Inner loops?

(esta pergunta é específica, não se trata de otimização em geral, obrigado)

Foi útil?

Solução

Ele funciona através da colocação de um código extra para contar o número de vezes que cada caminho para os códigos, é tirada.Quando você compilar um segundo momento em que o compilador usa o conhecimento adquirido sobre a execução do seu programa que ele só poderia adivinhar antes.Há um par de coisas PGO pode funcionar para:

  • Decidir quais funções devem ser embutidos ou não, dependendo de como, muitas vezes, eles são chamados.
  • Decidir como colocar dicas sobre qual ramo de uma instrução "se" deve ser previsto com base no percentual de chamadas indo para um lado ou para o outro.
  • Decidir como otimizar loops com base em quantas iterações são tiradas a cada vez que o loop é chamado.

Você nunca realmente sabe o quanto essas coisas podem ajudar até você testá-lo.

Outras dicas

PGO dá cerca de 5% de aumento de velocidade quando compilar x264, o projeto que eu trabalho, e temos um sistema interno para ele (fazer fprofiled).Seu um bom livre impulso de velocidade, em alguns casos, e provavelmente ajuda a mais em aplicações que, ao contrário x264, são menos composto de manuscritos de montagem.

Jason é o de aconselhar em direito.As melhores speedups você está indo para obter vêm de "descobrir" que você deixe uma O(n2 algoritmo de escorregar em um loop interno em algum lugar, ou que você pode armazenar em cache determinados cálculos fora do caro funções.

Comparado com o micro-otimizações que PGO pode desencadear, estes são os grandes vencedores.Uma vez que você tiver feito isso nível de otimização PGO pode ser capaz de ajudar.Nós nunca teve muita sorte com ele, pois o custo da instrumentação foi tal, que o nosso aplicativo unusably lenta (por várias ordens de magnitude).

Eu gosto de usar Intel VTune como um profiler, principalmente, porque ele é não-invasivo, comparado com a instrumentação de criadores de perfil que a mudança de comportamento muito.

A coisa divertida sobre a otimização é que os ganhos de velocidade são encontrados no mais improvável dos lugares.

É também a razão pela qual você precisa de um profiler, em vez de adivinhar onde a velocidade de problemas.

Eu recomendo começar com um profiler (gperf se você estiver usando GCC) e só começar a fuçar os resultados da execução de seu aplicativo através de algumas operações normais.

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