Profilová optimalizace - Profile-guided optimization

Profilová optimalizace (PGO, někdy vyslovováno jako pogo[1]), také známý jako zpětná vazba zaměřená na profil (PDF),[2] a optimalizace zaměřená na zpětnou vazbu (FDO)[3] je optimalizace kompilátoru technika v programování který používá profilování zlepšit program běhový výkon.

Metoda

Optimalizační techniky založené na statická analýza programu z zdrojový kód zvažte vylepšení výkonu kódu, aniž byste program skutečně provedli. Ne dynamická analýza programu se provádí. Analýza může dokonce uvažovat o kódu uvnitř smyčky včetně počtu opakování smyčky, například v odvíjení smyčky. Při absenci všech informací o době běhu nemůže statická analýza programu vzít v úvahu, jak často se tato část kódu skutečně provádí.

První kompilátor na vysoké úrovni, představený jako Automatický kódovací systém Fortran v roce 1957 rozbil kód na bloky a vymyslel tabulku frekvencí, kdy je každý blok prováděn prostřednictvím simulovaného provedení kódu v Monte Carlo způsob, jakým jsou výsledky podmíněných převodů (prostřednictvím via) LI-type) je určen a generátor náhodných čísel vhodně vážený čímkoli FREKVENCE prohlášení poskytl programátor.[4]

Spíše než informace o frekvenci poskytované programátorem používá optimalizace s profilem výsledky testovacích běhů profilování instrumentovaný program optimalizovat finále generovaný kód.[5][6][7] Kompilátor přistupuje k profilovým datům z ukázkového běhu programu napříč reprezentativní vstupní sadou. Výsledky ukazují, které oblasti programu se provádějí častěji a které oblasti se provádějí méně často. Všechny optimalizace těží ze zpětné vazby od profilu, protože jsou méně závislé na heuristika při rozhodování o kompilaci. Výhradou však je, že vzorek dat přiváděných do programu během fáze profilování musí být statisticky reprezentativní pro typické scénáře použití; jinak má zpětná vazba podle profilu potenciál poškodit celkový výkon finální verze, místo aby ji vylepšila.

Just-in-time kompilace může využít runtime informace k dynamické překompilování částí spuštěného kódu pro vygenerování efektivnějšího nativního kódu. Pokud se dynamický profil během provádění změní, může deoptimovat předchozí nativní kód a vygenerovat nový kód optimalizovaný s informacemi z nového profilu.

Přijetí

Existuje podpora pro stavbu Firefox pomocí PGO.[8] Přestože je PGO efektivní, nebyl softwarovými projekty široce osvojen kvůli zdlouhavému modelu duální kompilace.[9] Je také možné provést PGO bez instrumentace pomocí sběru profilu pomocí čítače výkonu hardwaru.[9] Tento přístup založený na vzorkování má mnohem nižší režii a nevyžaduje speciální kompilaci.

The HotSpot Virtuální stroj Java (JVM) používá profilovou optimalizaci k dynamickému generování nativního kódu. V důsledku toho je softwarová binárka optimalizována pro skutečné zatížení přijímá. Pokud se zatížení změní, adaptivní optimalizace umět dynamicky překompilovat spuštěný software a optimalizovat jej pro nové zatížení. To znamená, že veškerý software prováděný na HotSpot JVM efektivně využívá optimalizaci s profilem.[10]

PGO byl přijat v EU Microsoft Windows verze Google Chrome. PGO bylo povoleno v 64-bit vydání Chrome počínaje verzí 53 a verzí 54 pro Windows 32-bit edice.[11]

Implementace

Příklady překladačů, které implementují PGO, jsou:

Viz také

Reference

  1. ^ A b „Microsoft Visual C ++ Team Blog“.
  2. ^ „Zpětná vazba zaměřená na profil (PDF)“. Citováno 23. listopadu 2013.
  3. ^ Baptiste Wicht, Roberto A. Vitillo, Dehao Chen, David Levinthal (24. listopadu 2014). "Hardware spočítaná profilová optimalizace". arXiv:1411.6361. Bibcode:2014arXiv1411,6361W. Citovat deník vyžaduje | deník = (Pomoc)CS1 maint: používá parametr autoři (odkaz)
  4. ^ J. W. Backus, R. J. Beeber a kol., Automatický kódovací systém Fortran, Proceedings of the Western Joint Computer Conference, February 1957, str. 195
  5. ^ „K. Pettis, R. Hansen, Profilované umístění kódu, ACM SIGPLAN Programming Language Design and Implementation Conference 1990 " (PDF).
  6. ^ A b „Intel Fortran Compiler 10.1, Professional a Standard Edition, pro Mac OS X“. Archivovány od originál dne 28. září 2013.
  7. ^ „Rychlá reference s optimalizací podle profilu (PGO)“.
  8. ^ Budování s optimalizací podle profilu, mozilla.org, 13. srpna 2013
  9. ^ A b Dehao Chen (2010), "Zkrocení ukázek hardwarových událostí pro kompilaci fdo ", Sborník příspěvků z 8. ročníku mezinárodního sympozia IEEE / ACM o generování a optimalizaci kódu, str. 42–52.
  10. ^ Ivanov, Vladimir (25. července 2013). "Přehled kompilace JVM JIT". Citováno 10. září 2016.
  11. ^ Marchand, Sébastien (31. října 2016). „Zrychlení prohlížeče Chrome ve Windows pomocí PGO“. Archivováno z původního dne 1. listopadu 2016. Citováno 1. listopadu 2016.
  12. ^ Quintero, Dino; Chabrolles, Sebastien; Chen, Chi Hui; Dhandapani, Murali; Holloway, Talor; Jadhav, Chandrakant; Kim, Sae Kee; Kurian, Sijo; Raj, Bharath; Resende, Ronan; Roden, Bjorn; Srinivasan, Niranjan; Wale, Richard; Zanatta, William; Zhang, Zhi; Redbooks, I. B. M. (1. května 2013). „Průvodce výkonem systémů IBM Power Systems: Implementace a optimalizace“. Redbooky IBM - prostřednictvím Knih Google.