Compartilhar via


Otimizações orientadas a perfil

a otimização Perfil- orientada permite otimizar um arquivo de saída, onde o otimizador a usar dados de execuções de teste do .exe ou de arquivo .dll. Os dados representam como o programa provavelmente execução em um ambiente de produção.

As otimizações Perfil- guiadas só estão disponíveis para destinos de nativo de x86 ou de x64 . As otimizações Perfil- guiadas não estão disponíveis para os arquivos de saída que serão executadas em Common Language Runtime. Mesmo se você gerencia um assembly com nativo misto e código gerenciado (compile com /clr), você não pode usar a otimização perfil- orientada apenas em código nativo. Se você tentar criar um projeto com essas opções definidas no IDE, ocorrerá um erro de compilação.

Dica

As informações coletadas de analisar execuções de teste substituirá as otimizações que seriam de outra forma aplicado se você especificar /Ob, /Os, ou /Ot.Para obter mais informações, consulte /Ob (expansão de função embutida) e /Os, /Ot (favorecer código pequeno, favorecer código rápido).

O seguinte é uma visão geral do processo de usar otimizações perfil- guiadas:

  • Criar um ou mais arquivos do código-fonte com /GL.

    Cada módulo compilado com /GL pode ser verificado durante execuções de teste perfil- rápidas de otimização o comportamento do tempo de execução de captura. Cada módulo em uma construção perfil- orientada de otimização não tem que ser compilado com /GL. Entretanto, somente esses módulos compilados com /GL será providos e posteriormente disponível para otimizações perfil- guiadas.

  • Link com /LTCG: PGINSTRUMENT.

    /LTCG:PGINSTRUMENT cria um arquivo vazio de .pgd. Depois que os dados de teste são adicionados ao arquivo de .pgd, podem ser usados como entrada para a próxima etapa de link (que cria a imagem otimizada). Ao especificar /LTCG:PGINSTRUMENT, você pode especificar opcionalmente /PGD com um nome ou local não padrão para o arquivo de .pgd.

  • Analisar o aplicativo.

    Cada vez que as extremidades de perfil de uma sessão de EXE ou uma DLL analisado são descarregados, um appname! o arquivo de #.pgc é criado. Um arquivo de .pgc contém informações sobre um execução do teste de aplicativo específico. # é um número que começa com 1 que é incrementado com base no número de outro appname! arquivos de #.pgc no diretório. Você pode excluir um arquivo de .pgc se o execução do teste não representará um cenário que você deseja otimizar.

    Durante a execução do teste, você pode forçar o fechamento do arquivo atualmente aberto de .pgc e a criação de um novo arquivo de .pgc com o utilitário de pgosweep (por exemplo, quando o final de um cenário de teste não coincide com o desligamento de aplicativo).

    Você pode usar a opção de PogoSafeMode quando você a analisar seu aplicativo. Essa opção permite especificar se você deseja analisar o aplicativo no modo de segurança do ou no modo rápido. Para obter mais informações sobre esses modos, consulte PogoSafeMode.

  • Vincular a /LTCG:PGOPTIMIZE.

    /LTCG:PGOPTIMIZE cria a imagem otimizada. Esta etapa usa como o arquivo de entrada .pgd. Para obter mais informações, consulte /LTCG: PGOPTIMIZE.

O mesmo é possível criar o arquivo de saída otimizado e determinar posteriormente que analisar adicional será útil criar uma imagem mais otimizada. Se a imagem instrumentada e seu arquivo de .pgd estão disponíveis, você pode fazer execuções de teste adicionais e reconstruiu a imagem otimizada com o arquivo mais recente de .pgd.

O seguinte é uma lista das otimizações perfil- guiadas:

  • Inlining – por exemplo, se existir uma função à qual frequentemente a função B de chamadas, e a função B são relativamente pequenas, as otimizações perfil- guiadas querem a função embutida B na função Para.

  • Virtual Call Speculation – se uma chamada virtual, ou outro chamada por meio de um ponteiro de função, eles geralmente uma determinada função, uma otimização perfil- orientada poderá inserir uma chamada a condicional- executado para a função frequentemente- destinada, e a chamada direta pode ser será embutida.

  • Register Allocation – otimizando de dados com resultados de perfil na melhor alocação de registro.

  • Basic Block Optimization – a otimização básica do bloco reserva os blocos básicos executadas comumente que executam temporal em um quadro específico a ser colocado no mesmo conjunto de páginas (localidade). Isso minimiza o número de páginas usadas, para minimizar a sobrecarga de memória.

  • Size/Speed Optimization – as funções em que o programa gasta tempo podem ser otimizadas para a velocidade.

  • Function Layout se baseia no gráfico de chamada e no comportamento analisado do chamador/destinatário, as funções que tendem a ser do mesmo caminho de execução é colocado na seção.

  • Conditional Branch Optimization – com as investigações de valor, as otimizações perfil- guiadas podem descobrir se um determinado valor em uma instrução switch é usado com mais frequência do que outros valores. Esse valor pode ser retirado da instrução switch. O mesmo pode ser feito com instruções de if/else onde o otimizador pode ordenar o if/else de modo que qualquer um ou se o pacote for colocado primeiro segundo bloco com mais frequência que é true.

  • Dead Code Separation – código que não é chamado durante a criação de perfil é movido para uma seção especial que é acrescentada ao final do conjunto de seções a seguir. Isso mantém efetivamente esta seção fora das páginas usadas frequentemente.

  • EH Code Separation – o código de EH exclusivamente, sendo executado, pode frequentemente ser movido para uma seção separadamente quando otimizações perfil- guiadas podem determinar quais as exceções ocorrem apenas em condições excepcionais.

  • Memory Intrinsics – a expansão de intrinsics pode ser decidida melhor se é possível determinar se um intrínseco é chamado com frequência. Um intrínseco também pode ser otimizado com base no tamanho do bloco de move ou copia.

Para obter mais informações, consulte Walkthrough: Using Profile-Guided Optimizations.

Nesta seção

Ferramentas para otimização orientada a perfil

Como mesclar vários perfis PGO em um único perfil

Consulte também

Referência

Ferramentas de compilação do C/C++