Sdílet prostřednictvím


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ý PgoAutoSweepparametr 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

Viz také

Optimalizace na základě profilu
pgosweep