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:
- Překladač Intel C ++ a Fortran překladače[6]
- Sbírka překladačů GNU překladače
- Studio Oracle Solaris (dříve Sun Studio)
- Microsoft Visual C ++ překladač[1]
- Zvonit
- IBM XL C / C ++[12]
Viz také
- Adaptivní optimalizace
- Dynamická eliminace mrtvého kódu
- Globální optimalizace
- Hot spot (počítačové programování)
- Meziprocedurální optimalizace
- Optimalizace link-time (LTO)
- Trasování kompilace just-in-time
Reference
- ^ A b „Microsoft Visual C ++ Team Blog“.
- ^ „Zpětná vazba zaměřená na profil (PDF)“. Citováno 23. listopadu 2013.
- ^ 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) - ^ 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
- ^ „K. Pettis, R. Hansen, Profilované umístění kódu, ACM SIGPLAN Programming Language Design and Implementation Conference 1990 " (PDF).
- ^ A b „Intel Fortran Compiler 10.1, Professional a Standard Edition, pro Mac OS X“. Archivovány od originál dne 28. září 2013.
- ^ „Rychlá reference s optimalizací podle profilu (PGO)“.
- ^ Budování s optimalizací podle profilu, mozilla.org, 13. srpna 2013
- ^ 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.
- ^ Ivanov, Vladimir (25. července 2013). "Přehled kompilace JVM JIT". Citováno 10. září 2016.
- ^ 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.
- ^ 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.