Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A profilalapú optimalizálás (PGO) lehetővé teszi egy teljes végrehajtható fájl optimalizálását. 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 mutatják.
Megjegyzés:
Az SPGO (mintaprofil-vezérelt optimalizálás) egy olyan alternatív megközelítés, amely az instrumentálás helyett a Windows hardveres CPU-teljesítményszámlálóit használja. Az SPGO nem igényel instrumentált buildet – egy meglévő kiadási binárist a xperf használatával profilozhat. További információkért lásd: A mintaprofil-vezérelt optimalizálás bemutatása az MSVC-ben és A mintaprofil-vezérelt optimalizálás (SPGO) oktatóanyag.
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 akkor is, ha vegyes natív és felügyelt kódot tartalmazó szerelvényt készít (a /clr fordítóval), akkor sem használhat profilalapú optimalizálást csak a natív kódra vonatkozóan. 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épnek érvénybe. További információ: /Ob (Beágyazott függvénybővítés) és /Os, /Ot (Kis kód előnyben részesítése, Gyors kód előnyben részesítése).
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 fordító megvizsgálja a /GL-vel készült modulokat a profilvezérelt optimalizálási tesztfuttatások során a futásidejű viselkedés rögzítéséhez. Nem kell minden modult lefordítania egy profilvezérelt optimalizálási buildben a /GL használatával. Azonban csak a /GL kapcsolóval lefordított modulok lesznek instrumentálva, és csak ezek lesznek később elérhetők profilvezérelt optimalizálásokhoz.
Használja a /LTCG és a /GENPROFILE vagy /FASTGENPROFILE kapcsolót a hivatkozáshoz.
Ha a /LTCG és a /GENPROFILE vagy a /FASTGENPROFILE beállításokat együtt használja, az instrumentált alkalmazás futásakor létrehoz egy
.pgdfájlt. Miután hozzáadta a tesztalapú adatokat a.pgdfájlhoz, használhatja azt a következő hivatkozási lépés bemeneteként (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 megadásához.pgd. 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.
A folyamat minden alkalommal, amikor egy profilozott EXE-munkamenet véget ér, vagy egy profilozott DLL-fájl ki van ürítve, a folyamat létrehoz egy
appname!N.pgcfájlt. 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 1-től kezdődő szám. A könyvtá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. Jobban ellenőrizheti a.pgcfájlokban 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ó.Amikor létrehozod az instrumentált buildet, alapértelmezés szerint az adatgyűjtés szálbiztosítás nélküli módban történik, ami gyorsabb, de kevésbé pontos 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 bemenetként veszi fel a
.pgdfájlt. A /USEPROFILE 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. Ezt a nevet az elavult /PGD linker beállítással is megadhatja. Az /LTCG és a /USEPROFILE linker beállításainak kombinációja felváltja 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 profilkészítés hasznosabb lenne egy optimalizáltabb rendszerkép létrehozásához. Ha a műszerezett lemezkép és a hozzá tartozó .pgd fájl elérhető, további tesztfuttatásokat végezhet, és az optimalizált lemezképet újraépítheti az újabb .pgd fájl használatával, ugyanazokkal a /LTCG és /USEPROFILE linkelőbeállításokkal.
Megjegyzés:
Mindkettő .pgc és .pgd a fájlok bináris fájltípusok. Ha egy forrásvezérlő rendszerben tárolja őket, 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 foglalja magában:
Inlining – Ha például az A függvény gyakran hívja a B függvényt, és a B függvény viszonylag kicsi, akkor a profilvezérelt optimalizálások beágyazzák a B függvényt az A függvénybe.
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.
Regiszter allokáció – A profiladatokon alapuló optimalizálás jobb regiszter-kiosztá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 az optimalizálás elvégezhető
if...elseutasításokkal is, ahol az optimalizáló úgy rendezheti el aif...elseszerkezetet, hogy aifvagy aelseblokk kerüljön előre, attól függően, hogy melyik blokk feltétele teljesül gyakrabban.Holtkód elkülönítése – A profilvezérelt optimalizálás a profilozás során nem hívott kódot a szakaszkészlet végén található speciális szakaszba helyezi át. 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 profilalapú optimalizálások akkor helyezik át, amikor megállapítják, hogy a kivételek csak kivételes körülmények között fordulnak elő.
Memóriaintrinsic függvények – Az, hogy kibővítik-e az intrinsic függvényt, attól függ, hogy gyakran hívják-e. Az intrinzikus függvény az áthelyezések vagy másolatok blokkmérete alapján is optimalizálható.
Következő lépések
A profilalapú optimalizálásban használható környezeti változókkal, függvényekkel és eszközökkel kapcsolatos további információkért tekintse meg a következő erőforrásokat:
Környezeti változók profilvezérelt optimalizáláshoz
Ezek a változók határozzák meg a tesztelési forgatókönyvek futásidejű viselkedését. 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ásához hozzáadható egy olyan függvény, amely finomhangolt fájladat rögzítési vezérlést 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.
Példa a profilvezérelt optimalizálás (SPGO) útmutatójához
Az instrumentáció helyett használja a CPU hardveres teljesítményszámlálóit. Nincs szükség instrumentált buildre – profilozza a meglévő kiadási binárist a(z) xperf használatával.