Profilgesteuerte Optimierung
Profilgesteuerte Optimierung (Pgo, manchmal ausgesprochen als Pogo[1]), auch bekannt als Profilgesteuerte Feedback (PDF),[2] und Feedback-gerichtete Optimierung (FDO)[3] ist ein Compiler -Optimierung Technik in Computerprogrammierung das verwendet Profilerstellung Programm zu verbessern Laufzeitleistung.
Methode
Optimierungstechniken basierend auf Statische Programmanalyse des Quellcode Betrachten Sie die Verbesserung der Codeleistung, ohne das Programm tatsächlich auszuführen. Nein Dynamische Programmanalyse ist durchgeführt. Die Analyse kann sogar Code innerhalb in Betracht ziehen Schleifen einschließlich der Häufigkeit, mit der die Schleife ausgeführt wird, zum Beispiel in Schlaufe abrollen. In Ermangelung aller Laufzeitinformationen kann die statische Programmanalyse nicht berücksichtigen, wie häufig dieser Codeabschnitt tatsächlich ausgeführt wird.
Der erste High-Level-Compiler, der als der eingeführt wurde FORTRAN Automatisches Codierungssystem 1957 brach den Code in Blöcke ein und entwickelte eine Tabelle der Frequenz, die jeder Block über eine simulierte Ausführung des Code in a ausgeführt wird Monte Carlo Mode, in der das Ergebnis bedingter Übertragungen (wie über via " WENN
-Typ -Aussagen) wird durch a bestimmt Zufallszahlengenerator angemessen gewichtet von was auch immer FREQUENZ
Aussagen wurden vom Programmierer abgegeben.[4]
Anstelle von Programmierer-unterstützt Frequenzinformationen verwendet die profilgesteuerte Optimierung die Ergebnisse von Profilerstellungstestläufen der instrumentiertes Programm Um das Finale zu optimieren generierter Code.[5] [6][7] Der Compiler greift auf Profildaten aus einem Beispiellauf des Programms über einen repräsentativen Eingangssatz auf. Die Ergebnisse zeigen, welche Bereiche des Programms häufiger ausgeführt werden und welche Bereiche seltener ausgeführt werden. Alle Optimierungen profitieren von einem profilgesteuerten Feedback, da sie weniger angewiesen sind Heuristik Bei Zusammenstellungsentscheidungen. Die Einschränkung ist jedoch, dass die Stichprobe der Daten, die während der Profilierungsstufe dem Programm gespeist werden, statistisch repräsentativ für die typischen Nutzungsszenarien sein muss. Andernfalls hat das profilgeführte Feedback das Potenzial, die Gesamtleistung des endgültigen Builds zu schädigen, anstatt es zu verbessern.
Just-in-Time-Zusammenstellung kann benutzen Laufzeit Informationen zur dynamischen Zusammenarbeit von Teilen des ausgeführten Codes, um einen effizienteren nativen Code zu generieren. Wenn sich das dynamische Profil während der Ausführung ändert, kann es den vorherigen nativen Code deoptimieren und einen neuen Code generieren, der mit den Informationen aus dem neuen Profil optimiert ist.
Annahme
Es gibt Unterstützung für den Bau Feuerfuchs mit PGO.[8] Obwohl PGO wirksam ist, wurde es aufgrund seines mühsamen Dual-Compilation-Modells von Softwareprojekten nicht weit verbreitet.[9] Es ist auch möglich, PGO ohne Instrumente durchzuführen, indem ein Profil verwendet wird Hardware -Performance -Zähler.[9] Dieser auf Stichprobenbasis basierende Ansatz hat einen viel niedrigeren Overhead und erfordert keine spezielle Zusammenstellung.
Das Hotspot Java virtuelle Maschine (JVM) verwendet eine profilgesteuerte Optimierung, um nativen Code dynamisch zu generieren. Infolgedessen ist eine Software -Binärin für das tatsächliche optimiert Belastung es erhält. Wenn sich die Last ändert, Adaptive Optimierung kann dynamisch neu kompilieren Die laufende Software, um sie für die neue Last zu optimieren. Dies bedeutet, dass alle auf dem Hotspot JVM ausgeführten Software die profilgesteuerte Optimierung effektiv nutzen.[10]
PGO wurde in der verabschiedet Microsoft Windows Version von Google Chrome. PGO wurde in der aktiviert 64-Bit Ausgabe von Chrome ab Version 53 und Version 54 für die 32-Bit Auflage.[11]
Google veröffentlichte ein Papier [12] Beschreibung eines Systems (autofdo[13]) zur Verwendung von Produktionsprofilen zum Leitfaden von Builds, was zu einer Leistungsverbesserung von 10% führt.
Implementierungen
Beispiele für Compiler, die PGO implementieren, sind:
- Intel C ++ - Compiler und Forran Compiler[6]
- GNU Compiler -Sammlung Compiler
- Oracle Solaris Studio (früher Sun Studio genannt)
- Microsoft Visual C ++ Compiler[1][14]
- Klang[15]
- IBM XL C/C ++[16]
Siehe auch
- Adaptive Optimierung
- Dynamic Dead Code Elimination
- Globale Optimierung
- Hot Spot (Computerprogrammierung)
- Interprocedurale Optimierung
- Link-Zeit-Optimierung (LTO)
- Verfolgung der Just-in-Time-Zusammenstellung
Verweise
- ^ a b "Microsoft Visual C ++ Team Blog". 12. November 2008.
- ^ "Profilgesteuerte Feedback (PDF)". XL C/C ++ für AIX. Abgerufen 23. November 2013.
{{}}
: CS1 Wartung: URL-Status (Link) - ^ Baptiste Wicht, Roberto A. Vitillo, Dehao Chen, David Levinthal (24. November 2014). "Hardware zählte profilgeführte Optimierung". Arxiv:1411.6361. Bibcode:2014ArXIV1411.6361W.
{{}}
: Journal zitieren erfordert|journal=
(Hilfe)CS1 Wartung: Verwendet Autorenparameter (Link) - ^ J. W. Backus, R. J. Beeber et al.,, Das automatische Codierungssystem von FORTRAN, Proceedings der Western Joint Computer Conference, Februar 1957, p. 195
- ^ "K. Pettis, R. Hansen, Profil geführte Codepositionierung, ACM Sigplan Programmiersprache Design und Implementierungskonferenz 1990 " (PDF).
- ^ a b "Intel Forran Compiler 10.1, professionelle und Standardausgaben, für Mac OS X". Archiviert von das Original am 28. September 2013.
- ^ "Profilgesteuerte Optimierung (PGO) Schnellreferenz".
- ^ Aufbau mit profilgesteuerter Optimierung, Mozilla.org, 13. August 2013
- ^ a b Dehao Chen (2010), "Taming Hardware -Ereignis -Beispiele für die FDO -Zusammenstellung",", Verfahren des 8. jährlichen IEEE/ACM Internationales Symposium zur Erzeugung und Optimierung von Code und Optimierung, S. 42–52.
- ^ Ivanov, Vladimir (25. Juli 2013). "JVM JIT -Kompilierungsübersicht". Abgerufen 10. September 2016.
- ^ Marchand, Sébastien (31. Oktober 2016). "Verchrome an Windows schneller mit PGO". Archiviert Aus dem Original am 1. November 2016. Abgerufen 1. November 2016.
- ^ Chen, Dehao; Li, David Xinliang; Moseley, Tipp (2016). "AutoFDO: Automatische Feedback-gerichtete Optimierung für Anwendungen im Lagermaßstab". CGO 2016 Proceedings des Internationalen Symposiums 2016 zur Erzeugung und Optimierung von Code. New York, NY, USA: 12–23. doi:10.1145/2854038.2854044. ISBN 9781450337786. S2CID 17473127.
- ^ 1. Voraussetzung installieren, Google, 14. Juni 2022, abgerufen 21. Juni 2022
- ^ "Profilgesteuerte Optimierungen [vs 2019]".
{{}}
: CS1 Wartung: URL-Status (Link) - ^ "Profilgesteuerte Optimierung [Handbuch des Clang-Compiler-Benutzers]".
{{}}
: CS1 Wartung: URL-Status (Link) - ^ Quintero, Dino; Chabrolles, Sebastien; Chen, Chi Hui; Dhandapani, Murali; Holloway, Talor; Jadhav, Chandrakant; Kim, Sae Kee; Kurian, Sijo; Raj, Bharath; Wiederherstellung, Ronan; Roden, Bjorn; Srinivasan, Niranjan; Wale, Richard; Zanatta, William; Zhang, Zhi; Redbooks, I. B. M. (1. Mai 2013). IBM Power Systems Performance Guide: Implementierung und Optimierung. IBM Redbooks. ISBN 9780738437668 - über Google Books.