Profile-Guided optimalizálás asztali alkalmazásokhoz

A profilvezérelt optimalizálás (PGO) egy fordítóoptimalizálási technika, amely futásidejű profilozási adatokat használ hatékonyabb natív kód előállítására. A PGO használatakor a fordító az alkalmazás tényleges működése alapján átrendezi a kódot, ami jobb utasításgyorsítótár-kihasználtságot, kisebb kódméretet és gyorsabb végrehajtást eredményez.

Important

Az asztali Windows App SDK alkalmazások a szabványos MSVC PGO-munkafolyamatot használják. Az UWP-alkalmazásokkal ellentétben az asztali alkalmazásokhoz nincs szükség manuálisan az pgort140.dll alkalmazáscsomagba való másolásra – a PGO futtatókörnyezeti kódtára a standard C/C++ futtatókörnyezeten keresztül érhető el.

A PGO működése

A PGO egy háromlépéses folyamat:

  1. Instrumentálás – Az alkalmazást engedélyezett instrumentálással állíthatja össze. A fordító olyan mintavételeket szúr be, amelyek rögzítik a kód végrehajtását.
  2. Profilozás — Futtassa a műszerezett alkalmazást, és futtassa végig a legfontosabb használati forgatókönyveket. A rendszer fájlba menti a .pgc profilkészítési adatokat.
  3. Optimalizálás – Az alkalmazás újraépítése a profilkészítési adatok használatával. A fordító a tényleges futásidejű viselkedés alapján optimalizálja a kódelrendezést, a függvénybeágyazást és az elágazásokat.

Részletes útmutató

1. Konfigurálás kiadáshoz

Állítsa a megoldáskonfigurációt kiadásra (vagy egy másik, optimalizált kódot előállító konfigurációra). A PGO-nek nincs előnye, ha hibakeresési buildekre van alkalmazva.

2. Teljes programoptimalizálás engedélyezése

A projekttulajdonságokban lépjen a C/C++>Optimalizálás elemre, és ellenőrizze, hogy a teljes programoptimalizálás (/GL) engedélyezve van-e.

3. A build instrumentálása

Nyissa meg aLinker-optimalizálást>, és állítsa be a link időkódjának létrehozásátprofilalapú optimalizálás – eszköz (/LTCG:PGInstrument) értékre.

Állítsa össze a megoldást. A rendszer a build kimenete mellett létrehoz egy .pgd fájlt.

4. Az alkalmazás futtatása és profiladatok gyűjtése

Futtassa az alkalmazást, és gyakorolja az optimalizálni kívánt forgatókönyveket – indítást, navigációt, adatfeldolgozást vagy bármilyen teljesítménykritikus munkafolyamatot. Az alkalmazás futtatása közben használja az pgosweep.exe eszközt (az MSVC-eszközkészletben található) a profilkészítési adatok gyűjtéséhez:

pgosweep.exe MyApp.exe MyApp!Scenario1.pgc

A különböző forgatókönyvekhez több .pgc fájlt is gyűjthet.

5. Profiladatok egyesítése (nem kötelező)

Alapértelmezés szerint a .pgc fájl mellett elhelyezett összes .pgd fájl automatikusan egyesül az optimalizálási lépés során. Bizonyos forgatókönyvek eltérő súlyozásához használja az pgomgr.exe eszközt:

pgomgr.exe -merge:3 MyApp!CoreScenario.pgc MyApp.pgd

Ez a CoreScenario futtatásnak háromszoros prioritást ad a többi futtatáshoz képest.

6. A build optimalizálása

Térjen vissza aLinker-optimalizáláshoz>, és állítsa be a link időkódjának létrehozásátprofilalapú optimalizálás – optimalizálás (/LTCG:PGOptimize) értékre.

A megoldás újraépítése. A linker automatikusan egyesíti az összes .pgc fájlt, és optimalizált bináris fájlt hoz létre a profilkészítési adatok alapján.

Tippek a hatékony PGO-hoz

  • Elemezzen életszerű forgatókönyveket. A PGO-optimalizálás minősége attól függ, hogy mennyire reprezentatívak a profilkészítési futtatások. Tesztelje azokat a kódelágazásokat, amelyekkel a felhasználói ténylegesen találkozni fognak.
  • Több futtatás egyesítése. Profilkészítési adatok gyűjtése számos különböző használati forgatókönyvből a kódútvonalak széles körének lefedése érdekében.
  • Profilozd újra, ha a kód jelentősen megváltozik. A profiladatok elavulttá válnak, amikor jelentős módosításokat hajt végre a kódbázison. Időszakonként végezze el újra a műszerezést és a profilozást.
  • Mérje meg a hatást. Hasonlítsa össze az indítási időt, az átviteli sebességet és a memóriahasználatot a PGO előtt és után annak ellenőrzéséhez, hogy érdemes-e optimalizálni.