Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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
.pgdfájlt a rendszerállapotú alkalmazás futtatásakor. Miután hozzáadta a tesztfuttatási adatokat a.pgdfá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.pgdmegadá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.pgcfájl. A.pgcfá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öbbiappname!N.pgcfá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
.pgcfájl bezárását és egy új.pgcfá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
.pgcrögzítse a hívás helyén lévő profiladatokat. Így részletesebben szabályozhatja a fájlokban.pgcrö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
.pgdtö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 aelse...ifparancsot, hogy a blokk vagyelseaifblokk legyen az első, attól függően, hogy melyik blokk a gyakoribbelseigaz.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.