Udostępnij za pośrednictwem


PgoAutoSweep

PgoAutoSweep Zapisuje bieżące informacje licznika profilu w pliku, a następnie resetuje liczniki. Użyj funkcji podczas trenowania optymalizacji opartej na profilu, aby zapisać wszystkie dane profilu z uruchomionego programu do .pgc pliku do późniejszego użycia w kompilacji optymalizacji.

Składnia

void PgoAutoSweep(const char* name);    // ANSI/MBCS
void PgoAutoSweep(const wchar_t* name); // UNICODE

Parametry

name
Identyfikujący ciąg zapisanego .pgc pliku.

Uwagi

Możesz wywołać aplikację PgoAutoSweep , aby zapisać i zresetować dane profilu w dowolnym momencie podczas wykonywania aplikacji. W instrumentowanej kompilacji PgoAutoSweep przechwytuje bieżące dane profilowania, zapisuje je w pliku i resetuje liczniki profilów. Jest to odpowiednik wywoływania polecenia pgosweep w określonym punkcie w pliku wykonywalnym. W zoptymalizowanej kompilacji PgoAutoSweep jest operacją no-op.

Zapisane dane licznika profilu są umieszczane w pliku o nazwie base_name-name!value.pgc, gdzie base_name jest podstawową nazwą pliku wykonywalnego, nazwa jest parametrem przekazywanym do PgoAutoSweep, a wartość jest unikatową wartością, zwykle monotonicznie rosnącą liczbą, aby zapobiec kolizjom nazw plików.

Pliki .pgc utworzone przez PgoAutoSweep program muszą zostać scalone z plikiem .pgd , który ma zostać użyty do utworzenia zoptymalizowanego pliku wykonywalnego. Aby wykonać scalanie, możesz użyć polecenia pgomgr .

Nazwę scalonego .pgd pliku można przekazać do konsolidatora podczas kompilacji optymalizacji przy użyciu argumentu PGD=nazwa pliku do opcji konsolidatora /USEPROFILE lub przy użyciu przestarzałej opcji konsolidatora /PGD . Jeśli scalisz .pgc pliki z plikiem o nazwie base_name.pgd, nie musisz określać nazwy pliku w wierszu polecenia, ponieważ konsolidator domyślnie pobiera tę nazwę pliku.

Funkcja PgoAutoSweep obsługuje ustawienie bezpieczeństwa wątków określone podczas tworzenia instrumentowanej kompilacji. Jeśli używasz ustawienia domyślnego lub określ argument NOEXACT do opcji konsolidatora /GENPROFILE lub /FASTGENPROFILE , wywołania nie PgoAutoSweep są bezpieczne wątkowo. Argument EXACT tworzy bezpieczne wątkowo i dokładniejsze, ale wolniejsze, instrumentowane pliki wykonywalne.

Wymagania

Procedura Wymagany nagłówek
PgoAutoSweep <pgobootrun.h>

Plik wykonywalny musi zawierać plik pgobootrun.lib w połączonych bibliotekach. Ten plik znajduje się w instalacji programu Visual Studio w katalogu bibliotek VC dla każdej obsługiwanej architektury.

Przykład

W poniższym przykładzie użyto PgoAutoSweep metody do utworzenia dwóch .pgc plików w różnych punktach podczas wykonywania. Pierwszy zawiera dane opisujące zachowanie count środowiska uruchomieniowego do momentu, gdy jest równe 3, a drugi zawiera dane zebrane po tym punkcie do tuż przed zakończeniem działania aplikacji.

// 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");
}

W wierszu polecenia dewelopera skompiluj kod do pliku obiektu przy użyciu tego polecenia:

cl /c /GL /W4 /EHsc /O2 pgoautosweep.cpp

Następnie wygeneruj instrumentowaną kompilację na potrzeby trenowania przy użyciu tego polecenia:

link /LTCG /genprofile pgobootrun.lib pgoautosweep.obj

Uruchom instrumentowany plik wykonywalny, aby przechwycić dane treningowe. Dane wyjściowe wywołań do PgoAutoSweep są zapisywane w plikach o nazwach pgoautosweep-func1!1.pgc i pgoautosweep-func2!1.pgc. Dane wyjściowe programu powinny wyglądać następująco:

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

Scal zapisane dane z bazą danych trenowania profilu, uruchamiając polecenie pgomgr :

pgoautosweep-func1!1.pgc pgoautosweep-func2!1.pgc

Dane wyjściowe tego polecenia wyglądają mniej więcej tak:

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.

Teraz możesz użyć tych danych treningowych do wygenerowania zoptymalizowanej kompilacji. Użyj tego polecenia, aby skompilować zoptymalizowany plik wykonywalny:

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

Zobacz też

Optymalizacje sterowane profilem
pgosweep