In der Computerprogrammierung ist die profilgesteuerte Optimierung ( PGO , manchmal auch pogo [ 1 ] ausgesprochen ), auch bekannt als profilgesteuertes Feedback ( PDF ) [ 2 ] oder feedbackgesteuerte Optimierung ( FDO ) [ 3 ] , die Compiler-Optimierungstechnik , bei der vorherige Analysen von Softwareartefakten oder -verhalten („ Profiling “) verwendet werden, um die erwartete Laufzeitleistung des Programms zu verbessern.

Verfahren

Optimierungstechniken, die auf statischer Programmanalyse des Quellcodes basieren , berücksichtigen Leistungsverbesserungen, ohne das Programm tatsächlich auszuführen. Es findet keine dynamische Programmanalyse statt. Beispielsweise ist es grundsätzlich hilfreich, die Anzahl der Iterationen einer Schleife abzuleiten oder formale Beschränkungen dafür festzulegen, ob diese abgewickelt werden soll oder nicht. Solche Erkenntnisse hängen jedoch typischerweise von komplexen Laufzeitfaktoren ab, die schwer eindeutig zu ermitteln sind. Die statische Analyse verfügt daher meist über unvollständige Informationen und kann die tatsächlichen Laufzeitbedingungen nur annähernd abschätzen.

Der erste höhere Compiler, der 1957 als Fortran Automatic Coding System (FACS) eingeführt wurde, zerlegte den Code in Blöcke und erstellte eine Tabelle, die die Ausführungshäufigkeit jedes Blocks durch eine simulierte Codeausführung im Monte-Carlo- Verfahren ermittelte. Dabei IFwurde das Ergebnis bedingter Überträge (wie z. B. durch -Anweisungen) durch einen Zufallszahlengenerator bestimmt , der entsprechend den FREQUENCYvom Programmierer bereitgestellten Anweisungen gewichtet war. [ 4 ]

Anstatt auf vom Programmierer bereitgestellte Frequenzinformationen zurückzugreifen, nutzt die profilbasierte Optimierung die Ergebnisse von Profilierungstests des instrumentierten Programms , um den generierten Code zu optimieren . [ 5 ] [ 6 ] [ 7 ] Der Compiler greift auf Profildaten eines Testlaufs des Programms mit einem repräsentativen Eingabedatensatz zu. Die Ergebnisse zeigen, welche Programmbereiche häufiger und welche seltener ausgeführt werden. Alle Optimierungen profitieren von profilbasiertem Feedback, da sie bei Kompilierungsentscheidungen weniger auf Heuristiken angewiesen sind . Allerdings muss die während der Profilierungsphase verwendete Stichprobe statistisch repräsentativ für die typischen Nutzungsszenarien sein; andernfalls kann profilbasiertes Feedback die Gesamtleistung des finalen Builds beeinträchtigen, anstatt sie zu verbessern.

Die Just-in-Time-Kompilierung nutzt Laufzeitinformationen , um Teile des ausgeführten Codes dynamisch neu zu kompilieren und so effizienteren nativen Code zu erzeugen. Ändert sich das dynamische Profil während der Ausführung, kann der vorherige native Code deoptimiert und neuer, mit den Informationen des neuen Profils optimierter Code generiert werden.

Annahme

Es gibt Unterstützung für die Erstellung von Firefox mit PGO. [ 8 ] Obwohl PGO effektiv ist, hat es sich aufgrund seines aufwendigen Dual-Kompilierungsmodells in Softwareprojekten nicht weit verbreitet. [ 9 ] PGO kann auch ohne Instrumentierung durch die Erfassung eines Profils mithilfe von Hardware-Leistungszählern durchgeführt werden . [ 9 ] Dieser stichprobenbasierte Ansatz hat einen deutlich geringeren Overhead und erfordert keine spezielle Kompilierung.

Die HotSpot Java Virtual Machine (JVM) nutzt profilgesteuerte Optimierung zur dynamischen Generierung von nativem Code. Dadurch wird eine Software-Binärdatei für die jeweilige Last optimiert . Ändert sich die Last, kann die adaptive Optimierung die laufende Software dynamisch neu kompilieren und an die neue Last anpassen. Somit profitiert jede auf der HotSpot JVM ausgeführte Software effektiv von der profilgesteuerten Optimierung. [ 10 ]

PGO wurde mit der Veröffentlichung von Visual Studio 2005 in den Microsoft Visual C++ (MSVC) Compiler eingeführt.

PGO wurde in der Microsoft Windows- Version von Google Chrome übernommen . PGO wurde in der 64-Bit- Version von Chrome ab Version 53 und in der 32-Bit -Version ab Version 54 aktiviert. [ 11 ]

Google veröffentlichte eine Arbeit [ 12 ], in der ein Werkzeug zur Verwendung von Produktionsprofilen zur Steuerung von Builds beschrieben wird, was zu einer Leistungssteigerung von bis zu 10 % führt.

Implementierungen

Beispiele für Compiler, die PGO implementieren, sind:

Siehe auch

Referenzen

  1. ^ a b "Microsoft Visual C++ Team Blog" . 12. November 2008.
  2. ^ „Profilgesteuertes Feedback (PDF)“ . XL C/C++ für AIX . Abgerufen am 23. November 2013 .
  3. ^ Baptiste Wicht; Roberto A. Vitillo; Dehao Chen; David Levinthal (24. November 2014). „Hardware Counted Profile-Guided Optimization“. arXiv : 1411.6361 . Bibcode : 2014arXiv1411.6361W .{{cite journal}}: Zeitschrift zitieren erfordert |journal=( Hilfe )
  4. ^ JW Backus, RJ Beeber, et al., The Fortran Automatic Coding System , Proceedings of the Western Joint Computer Conference, Februar 1957, S. 195
  5. ^ "K. Pettis, R. Hansen, Profile Guided Code Positioning , ACM SIGPLAN Programming Language Design and Implementation Conference 1990" (PDF) .
  6. ^ a b „Intel Fortran Compiler 10.1, Professional und Standard Edition, für Mac OS X“ . Archiviert vom Original am 28. September 2013.
  7. ^ „Profilgesteuerte Optimierung (PGO) – Kurzübersicht“ .
  8. ^ Erstellen mit profilgesteuerter Optimierung , mozilla.org, 13. August 2013
  9. ^ a b Dehao Chen (2010), " Taming hardware event samples for fdo compilation ", Proceedings of the 8th annual IEEE/ACM international symposium on Code generation and optimization , pp. 42–52.
  10. ^ Ivanov, Vladimir (25. Juli 2013). „JVM JIT-Kompilierungsübersicht“ . Abgerufen am 10. September 2016 .
  11. ^ Marchand, Sébastien (31. Oktober 2016). „Chrome unter Windows mit PGO beschleunigen“ . Archiviert vom Original am 1. November 2016. Abgerufen am 1. November 2016 .
  12. ^ Chen, Dehao; Li, David Xinliang; Moseley, Tipp (2016). „AutoFDO: Automatische rückkopplungsgesteuerte Optimierung für Anwendungen im Lagermaßstab“. Proceedings of the 2016 International Symposium on Code Generation and Optimization . New York, NY, USA. S.  12–23 . doi : 10.1145/2854038.2854044 . ISBN 978-1-4503-3778-6. S2CID  17473127 .{{cite book}}CS1 Wartung: Standort des fehlenden Herausgebers ( Link )
  13. ^ "Profilgesteuerte Optimierungen[VS 2019]" . 18. Oktober 2022.
  14. ^ "Profilgesteuerte Optimierung [Clang Compiler Benutzerhandbuch]" .
  15. ^ Quintero, Dino; Chabrolles, Sébastien; Chen, Chi Hui; Dhandapani, Murali; Holloway, Talor; Jadhav, Chandrakant; Kim, Sae Kee; Kurian, Sijo; Raj, Bharath; Resende, Ronan; Roden, Björn; Srinivasan, Niranjan; Wale, Richard; Zanatta, William; Zhang, Zhi; Redbooks, IBM (1. Mai 2013). IBM Power Systems Performance Guide: Implementieren und Optimieren . IBM Redbooks. ISBN 978-0-7384-3766-8– via Google Books.
  16. ^ „Optimieren einer nativen ausführbaren Datei mit profilgesteuerten Optimierungen [GraalVM-Anleitungen]“ .
  17. ^ „Neues in .NET 6: Profilgesteuerte Optimierung“ . 26. Mai 2023.
  18. ^ „Profilgesteuerte Optimierung“ .
  19. ^ „Profilgesteuerte Optimierung – Das rustc-Buch“ . doc.rust-lang.org . Abgerufen am 26. Februar 2026 .