Megosztás:


Profilalapú optimalizálás

A profilalapú optimalizálás (PGO) lehetővé teszi egy teljes végrehajtható fájl optimalizálását, ahol az optimalizáló a .exe vagy .dll fájl tesztfuttatásaiból származó adatokat használja. Az adatok a program éles környezetben való valószínű teljesítményét jelölik.

Profilvezérelt optimalizálás csak x86, x64 vagy ARM64 natív célokhoz érhető el. A profilalapú optimalizálások nem érhetők el a közös nyelvi futtatókörnyezetben futó végrehajtható fájlokhoz. Még ha vegyes natív és felügyelt kódot tartalmazó szerelvényt is készít (a /clr fordítóval), akkor sem használhat profilalapú optimalizálást csak a natív kódra. Ha az IDE-ben megadott beállításokkal próbál projektet létrehozni, buildelési hiba fog létrejönni.

Megjegyzés:

A profilkészítési tesztből összegyűjtött információk felülbírálják azokat az optimalizálásokat, amelyek egyébként az /Ob, /Os vagy /Ot megadásakor lépnének érvénybe. További információ: /Ob (Beágyazott függvénybővítés) és /Os, /Ot (Kis kód favor, Favor Fast Code).

Az alkalmazás optimalizálásának lépései

A profilalapú optimalizálás használatához kövesse az alábbi lépéseket az alkalmazás optimalizálásához:

  • Állítson össze egy vagy több forráskódfájlt a /GL használatával.

    A /GL-vel készült minden modul megvizsgálható a profilvezérelt optimalizálási tesztfuttatások során a futásidejű viselkedés rögzítéséhez. A profilalapú optimalizálási buildek minden modulját nem kell a /GL használatával lefordítani. A profilalapú optimalizáláshoz azonban csak a /GL-vel lefordított modulok vannak kialakítva, és később érhetők el.

  • Hivatkozás az /LTCG és a /GENPROFILE vagy a /FASTGENPROFILE használatával.

    Az /LTCG és a /GENPROFILE vagy a /FASTGENPROFILE használatával is létrehoz egy .pgd fájlt a rendszerállapotú alkalmazás futtatásakor. Miután hozzáadta a tesztfuttatási adatokat a .pgd fájlhoz, a következő hivatkozási lépés bemeneteként használható (az optimalizált rendszerkép létrehozása). A /GENPROFILE megadásakor opcionálisan hozzáadhat egy PGD=fájlnév argumentumot a fájl nem hibás nevének vagy helyének .pgd megadásához. Az /LTCG és a /GENPROFILE vagy a /FASTGENPROFILE linker kapcsoló kombinációja lecseréli az elavult /LTCG:PGINSTRUMENT linker kapcsolót.

  • Profilozza az alkalmazást.

    Minden alkalommal, amikor egy profilozott EXE-munkamenet véget ér, vagy egy profilozott DLL-t töröl, létrejön egy appname!N.pgc fájl. A .pgc fájlok egy adott alkalmazásteszt futtatásával kapcsolatos információkat tartalmaznak. az alkalmazásnév az alkalmazás neve, az N pedig egy szám, amely 1-zel kezdődik, amely a címtárban lévő többi appname!N.pgc fájl száma alapján növekszik. Törölheti a fájlokat .pgc , ha a tesztfuttatás nem az optimalizálni kívánt forgatókönyvet jelöli.

    A tesztfuttatás során kényszerítheti az aktuálisan megnyitott .pgc fájl bezárását és egy új .pgc fájl létrehozását a pgosweep segédprogrammal (például ha egy tesztforgatókönyv vége nem esik egybe az alkalmazás leállításával).

    Az alkalmazás közvetlenül meghívhat egy PGO-függvényt, a PgoAutoSweep-et is, hogy fájlként .pgc rögzítse a hívás helyén lévő profiladatokat. Így részletesebben szabályozhatja a fájlokban .pgc rögzített adatok által lefedett kódot. A függvény használatára vonatkozó példa a PgoAutoSweep dokumentációjában található.

    A rendszerezett build létrehozásakor alapértelmezés szerint az adatgyűjtés nem szálmentes módban történik, ami gyorsabb, de pontatlan lehet. Az EXACTargumentumot a /GENPROFILE vagy a /FASTGENPROFILE értékre használva megadhatja az adatgyűjtést szálmentes módban, ami pontosabb, de lassabb. Ez a lehetőség akkor is elérhető, ha beállítja az elavult PogoSafeMode környezeti változót vagy az elavult /POGOSAFEMODE linker kapcsolót a rendszerezett build létrehozásakor.

  • Hivatkozás az /LTCG és a /USEPROFILE használatával.

    Az optimalizált rendszerkép létrehozásához használja az /LTCG és a /USEPROFILE linker beállításait is. Ez a lépés a fájl bemeneteként .pgd történik. A /USEPROFILE megadásakor opcionálisan hozzáadhat egy PGD=fájlnév argumentumot a fájl nem alapértelmezett nevének vagy helyének megadásához .pgd . Ezt a nevet az elavult /PGD linker beállítással is megadhatja. Az /LTCG és a /USEPROFILE kombinációja lecseréli az elavult /LTCG:PGOPTIMIZE és /LTCG:PGUPDATE linker beállításokat.

Még az optimalizált végrehajtható fájlt is létrehozhatja, és később megállapíthatja, hogy a további profilkészítés hasznos lenne egy optimalizáltabb rendszerkép létrehozásához. Ha a rendszerkép és a .pgd fájl elérhető, további tesztfuttatásokat hajthat végre, és újraépítheti az optimalizált rendszerképet az újabb .pgd fájllal ugyanazokkal az /LTCG és /USEPROFILE linker beállításokkal.

Megjegyzés:

Mindkettő .pgc és .pgd a fájlok bináris fájltípusok. Ha forrásvezérlő rendszerben tárolja, kerülje a szövegfájlok automatikus átalakítását.

A PGO által végzett optimalizálás

A profilalapú optimalizálás az alábbi ellenőrzéseket és fejlesztéseket tartalmazza:

  • Inlining – Ha például egy függvény gyakran hívja meg a B függvényt, és a B függvény viszonylag kicsi, akkor a profil által irányított optimalizálás a B függvényben az A függvényben.

  • Virtuális hívás spekulációja – Ha egy virtuális hívás vagy egy függvénymutatón keresztüli egyéb hívás gyakran egy adott függvényt céloz meg, a profilalapú optimalizálás feltételesen végrehajtott közvetlen hívást szúrhat be a gyakran megcélzott függvényhez, és a közvetlen hívás beágyazott lehet.

  • Foglalás regisztrálása – A profiladatokon alapuló optimalizálás jobb regisztrációfoglalást eredményez.

  • Alapszintű blokkoptimalizálás – Az alapszintű blokkoptimalizálás lehetővé teszi, hogy az adott kereten belül időlegesen végrehajtott, gyakran végrehajtott alapblokkok ugyanabban a lapkészletben (helységben) legyenek elhelyezve. Csökkenti a használt lapok számát, ami minimálisra csökkenti a memóriaterhelést.

  • Méret-/sebességoptimalizálás – Azokat a függvényeket, amelyekben a program a legtöbb végrehajtási időt tölti, a sebességre optimalizálható.

  • Függvényelrendezés – A hívási gráf és a profilozott hívó/hívó viselkedése alapján az azonos végrehajtási útvonalon lévő függvények ugyanabba a szakaszba kerülnek.

  • Feltételes elágaztatás optimalizálása – Az értékminták segítségével a profilalapú optimalizálások megállapíthatják, hogy egy kapcsolóutasítás adott értékét gyakrabban használják-e, mint más értékeket. Ez az érték ezután kihúzható a kapcsolóutasításból. Ugyanez elvégezhető ... utasításokkal ifis, ahol az optimalizáló meg tudja rendelni a else...if parancsot, hogy a blokk vagy else a if blokk legyen az első, attól függően, hogy melyik blokk a gyakoribbelse igaz.

  • Holt kód elkülönítése – A profilkészítés során nem hívott kód egy speciális szakaszba kerül, amely a szakaszok halmazának végéhez van hozzáfűzve. Hatékonyan távol tartja ezt a szakaszt a gyakran használt lapoktól.

  • EH-kód elkülönítése – Mivel az EH-kód csak kivételesen van végrehajtva, gyakran áthelyezhető egy külön szakaszba. A rendszer akkor helyezi át, amikor a profilalapú optimalizálások megállapítják, hogy a kivételek csak kivételes körülmények között fordulnak elő.

  • Memóriaintetika – A belső elemek kibontása attól függ, hogy gyakran hívják-e. Az intrinsic az áthelyezések vagy másolatok blokkmérete alapján is optimalizálható.

Következő lépések

További információ a profilalapú optimalizálásban használható környezeti változókról, függvényekről és eszközökről:

Környezeti változók profilvezérelt optimalizáláshoz
Ezek a változók a tesztelési forgatókönyvek futásidejű viselkedésének megadására szolgáltak. Most már elavultak, és új hivatkozási lehetőségek váltják fel őket. Ez a dokumentum bemutatja, hogyan válthat a környezeti változókról a hivatkozási beállításokra.

PgoAutoSweep
Az alkalmazáshoz hozzáadható függvény részletes adatrögzítési .pgc vezérlőt biztosít.

pgosweep
Egy parancssori segédprogram, amely az összes profiladatot a .pgc fájlba írja, bezárja a .pgc fájlt, és megnyitja az új .pgc fájlt.

pgomgr
Egy parancssori segédprogram, amely profiladatokat ad hozzá egy vagy több .pgc fájlból a .pgd fájlhoz.

Útmutató: Több PGO-profil egyesítése egyetlen profilba
Példák a pgomgr használatára.

Lásd még

További MSVC buildelési eszközök