Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
PgoAutoSweep guarda as informações atuais do contador de perfil num ficheiro e reinicializa os contadores. Use a função durante o treinamento de otimização guiado por perfil para gravar todos os dados de perfil do programa em execução em um .pgc arquivo para uso posterior na compilação de otimização.
Sintaxe
void PgoAutoSweep(const char* name); // ANSI/MBCS
void PgoAutoSweep(const wchar_t* name); // UNICODE
Parâmetros
Nome
Uma cadeia de caracteres de identificação para o arquivo salvo .pgc .
Observações
Você pode ligar PgoAutoSweep do seu aplicativo para salvar e redefinir os dados do perfil a qualquer momento durante a execução do aplicativo. Em uma compilação instrumentada, PgoAutoSweep captura os dados de criação de perfil atuais, salva-os em um arquivo e redefine os contadores de perfil. É o equivalente a chamar o comando pgosweep em um ponto específico do seu executável. Em uma compilação otimizada, PgoAutoSweep é um no-op.
Os dados do contador de perfil salvos são colocados em um arquivo chamado base_name-nome!value.pgc, onde base_name é o nome base do executável, name é o parâmetro passado para PgoAutoSweep, e value é um valor exclusivo, geralmente um número monotonicamente crescente, para evitar colisões de nome de arquivo.
Os .pgc arquivos criados por PgoAutoSweep devem ser mesclados em um .pgd arquivo para ser usado para criar um executável otimizado. Você pode usar o comando pgomgr para executar a mesclagem.
Você pode passar o nome do arquivo mesclado .pgd para o vinculador durante a compilação de otimização usando o argumento PGD=filename para a opção de vinculador /USEPROFILE ou usando a opção de vinculador /PGD preterida. Se você mesclar os .pgc arquivos em um arquivo chamado base_name.pgd, não será necessário especificar o nome do arquivo na linha de comando, porque o vinculador seleciona esse nome de arquivo por padrão.
A PgoAutoSweep função mantém a configuração de segurança de threads especificada ao criar a compilação instrumentada. Se você usar a configuração padrão ou especificar o argumento NOEXACT para a opção de vinculador /GENPROFILE ou /FASTGENPROFILE , as chamadas para PgoAutoSweep não serão thread-safe. O argumento EXACT cria um executável instrumentado mais preciso e seguro para threads, mas mais lento.
Requerimentos
| Rotina | Cabeçalho obrigatório |
|---|---|
PgoAutoSweep |
<pgobootrun.h> |
O executável deve incluir o arquivo pgobootrun.lib nas bibliotecas vinculadas. Este ficheiro está incluído na instalação do Visual Studio, no diretório de bibliotecas VC para cada arquitetura suportada.
Exemplo
O exemplo abaixo usa PgoAutoSweep para criar dois .pgc arquivos em pontos diferentes durante a execução. O primeiro contém dados que descrevem o comportamento do tempo de execução até count ser igual a 3 e o segundo contém os dados coletados após este ponto até pouco antes do encerramento do aplicativo.
// pgoautosweep.cpp
// Compile by using: cl /c /GL /W4 /EHsc /O2 pgoautosweep.cpp
// Link to instrument: link /LTCG /genprofile pgobootrun.lib pgoautosweep.obj
// Run to generate data: pgoautosweep
// Merge data by using command line pgomgr tool:
// pgomgr /merge pgoautosweep-func1!1.pgc pgoautosweep-func2!1.pgc pgoautosweep.pgd
// Link to optimize: link /LTCG /useprofile pgobootrun.lib pgoautosweep.obj
#include <iostream>
#include <windows.h>
#include <pgobootrun.h>
void func2(int count)
{
std::cout << "hello from func2 " << count << std::endl;
Sleep(2000);
}
void func1(int count)
{
std::cout << "hello from func1 " << count << std::endl;
Sleep(2000);
}
int main()
{
int count = 10;
while (count--)
{
if (count < 3)
func2(count);
else
{
func1(count);
if (count == 3)
{
PgoAutoSweep("func1");
}
}
}
PgoAutoSweep("func2");
}
Em um prompt de comando do desenvolvedor, compile o código em um arquivo de objeto usando este comando:
cl /c /GL /W4 /EHsc /O2 pgoautosweep.cpp
Em seguida, gere uma compilação instrumentada para treinamento usando este comando:
link /LTCG /genprofile pgobootrun.lib pgoautosweep.obj
Execute o executável instrumentado para capturar os dados de treinamento. A saída de dados pelas chamadas para PgoAutoSweep é guardada em ficheiros chamados pgoautosweep-func1!1.pgc e pgoautosweep-func2!1.pgc. A saída do programa deve ter esta aparência à medida que é executado:
hello from func1 9
hello from func1 8
hello from func1 7
hello from func1 6
hello from func1 5
hello from func1 4
hello from func1 3
hello from func2 2
hello from func2 1
hello from func2 0
Mescle os dados salvos em um banco de dados de treinamento de perfil executando o comando pgomgr :
pgoautosweep-func1!1.pgc pgoautosweep-func2!1.pgc
A saída deste comando tem a seguinte aparência:
Microsoft (R) Profile Guided Optimization Manager 14.13.26128.0
Copyright (C) Microsoft Corporation. All rights reserved.
Merging pgoautosweep-func1!1.pgc
pgoautosweep-func1!1.pgc: Used 3.8% (22304 / 589824) of total space reserved. 0.0% of the counts were dropped due to overflow.
Merging pgoautosweep-func2!1.pgc
pgoautosweep-func2!1.pgc: Used 3.8% (22424 / 589824) of total space reserved. 0.0% of the counts were dropped due to overflow.
Agora você pode usar esses dados de treinamento para gerar uma compilação otimizada. Use este comando para criar o executável otimizado:
link /LTCG /useprofile pgobootrun.lib pgoautosweep.obj
Microsoft (R) Incremental Linker Version 14.13.26128.0
Copyright (C) Microsoft Corporation. All rights reserved.
Merging pgoautosweep!1.pgc
pgoautosweep!1.pgc: Used 3.9% (22904 / 589824) of total space reserved. 0.0% of the counts were dropped due to overflow.
Reading PGD file 1: pgoautosweep.pgd
Generating code
0 of 0 ( 0.0%) original invalid call sites were matched.
0 new call sites were added.
294 of 294 (100.00%) profiled functions will be compiled for speed
348 of 1239 inline instances were from dead/cold paths
294 of 294 functions (100.0%) were optimized using profile data
16870 of 16870 instructions (100.0%) were optimized using profile data
Finished generating code