PgoAutoSweep
PgoAutoSweep
uloží informace o čítači aktuálního profilu do souboru a potom obnoví čítače. Pomocí funkce během trénování optimalizace s asistencí profilu můžete napsat všechna data profilu ze spuštěného programu do .pgc
souboru pro pozdější použití v sestavení optimalizace.
Syntaxe
void PgoAutoSweep(const char* name); // ANSI/MBCS
void PgoAutoSweep(const wchar_t* name); // UNICODE
Parametry
Jméno
Identifikační řetězec pro uložený .pgc
soubor.
Poznámky
Voláním z aplikace můžete PgoAutoSweep
data profilu kdykoli během provádění aplikace uložit a resetovat. V instrumentované sestavení PgoAutoSweep
zachytí aktuální data profilace, uloží je do souboru a resetuje čítače profilu. Je to ekvivalent volání příkazu pgosweep v určitém bodě ve vašem spustitelném souboru. V optimalizovaném buildu PgoAutoSweep
je no-op.
Uložená data čítače profilu se umístí do souboru s názvem base_name -název!value.pgc, kde base_name je základní název spustitelného souboru, název je předaný PgoAutoSweep
parametr a hodnota je jedinečná hodnota, obvykle monotonicky rostoucí číslo, aby se zabránilo kolizím názvů souborů.
Soubory .pgc
vytvořené pomocí PgoAutoSweep
sloučení se musí sloučit do .pgd
souboru, který se použije k vytvoření optimalizovaného spustitelného souboru. Sloučení můžete provést pomocí příkazu pgomgr .
Název sloučeného .pgd
souboru můžete předat linkeru během sestavení optimalizace pomocí argumentu PGD=název souboru do možnosti /USEPROFILE linker nebo pomocí zastaralé možnosti /PGD linker. Pokud soubory sloučíte .pgc
do souboru s názvem base_name.pgd, nemusíte na příkazovém řádku zadávat název souboru, protože linker ve výchozím nastavení vybere tento název souboru.
Funkce PgoAutoSweep
udržuje nastavení zabezpečení vlákna zadané při vytvoření instrumentovaného sestavení. Pokud použijete výchozí nastavení nebo zadáte argument NOEXACT pro možnost linkeru /GENPROFILE nebo /FASTGENPROFILE , volání PgoAutoSweep
nejsou bezpečná pro vlákna. Argument EXACT vytvoří bezpečné vlákno a přesnější, ale pomalejší instrumentovaný spustitelný soubor.
Požadavky
Rutina | Požadovaný hlavičkový soubor |
---|---|
PgoAutoSweep |
<pgobootrun.h> |
Spustitelný soubor musí obsahovat soubor pgobootrun.lib v propojených knihovnách. Tento soubor je součástí instalace sady Visual Studio v adresáři knihoven VC pro každou podporovanou architekturu.
Příklad
Následující příklad používá PgoAutoSweep
k vytvoření dvou .pgc
souborů v různých bodech během provádění. První obsahuje data, která popisují chování modulu runtime, dokud count
se nerovná 3, a druhá obsahuje data shromážděná po tomto bodu až těsně před ukončením aplikace.
// 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");
}
V příkazovém řádku vývojáře zkompilujte kód do souboru objektu pomocí tohoto příkazu:
cl /c /GL /W4 /EHsc /O2 pgoautosweep.cpp
Potom pomocí tohoto příkazu vygenerujte instrumentovaný build pro trénování:
link /LTCG /genprofile pgobootrun.lib pgoautosweep.obj
Spuštěním instrumentovaného spustitelného souboru zachyťte trénovací data. Výstup dat volání PgoAutoSweep
se uloží do souborů s názvem pgoautosweep-func1!1.pgc a pgoautosweep-func2!1.pgc. Výstup programu by měl vypadat takto:
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
Spuštěním příkazu pgomgr sloučit uložená data do trénovací databáze profilu:
pgoautosweep-func1!1.pgc pgoautosweep-func2!1.pgc
Výstup tohoto příkazu vypadá přibližně takto:
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.
Teď můžete tato trénovací data použít k vygenerování optimalizovaného sestavení. Pomocí tohoto příkazu sestavte optimalizovaný spustitelný soubor:
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