Profilgeführte Optimierung - Profile-guided optimization

Profil-geführte Optimierung ( PGO , manchmal als ausgesprochen pogo ), auch bekannt als Profil-directed - Feedback ( PDF ) und Feedback gerichtete Optimierung ( FDO ) ist eine Compiler - Optimierungstechnik in Computer - Programmierung , dass Anwendungen Profilierungsprogramm zur Verbesserung der Laufzeitleistung .

Methode

Optimierungstechniken, die auf einer statischen Programmanalyse des Quellcodes basieren, berücksichtigen Verbesserungen der Codeleistung, ohne das Programm tatsächlich auszuführen. Es wird keine dynamische Programmanalyse durchgeführt. Die Analyse kann sogar Code innerhalb von Schleifen berücksichtigen, einschließlich der Häufigkeit, mit der die Schleife ausgeführt wird, beispielsweise beim Entrollen von Schleifen . 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 1957 als Fortran Automatic Coding System eingeführt wurde, zerlegte den Code in Blöcke und erstellte eine Tabelle mit der Häufigkeit, mit der jeder Block über eine simulierte Ausführung des Codes in Monte-Carlo- Manier ausgeführt wird, wobei das Ergebnis von outcome bedingte Übertragungen (wie via IF-type-Anweisungen) werden von einem Zufallszahlengenerator bestimmt, der entsprechend gewichtet wird durch die FREQUENCYAnweisungen des Programmierers.

Anstelle von vom Programmierer bereitgestellten Frequenzinformationen verwendet die profilgesteuerte Optimierung die Ergebnisse von Profilierungstestläufen des instrumentierten Programms , um den endgültig generierten Code zu optimieren . Der Compiler greift auf Profildaten aus einem Beispiellauf des Programms über einen repräsentativen Eingabesatz zu. Die Ergebnisse zeigen, welche Bereiche des Programms häufiger und welche Bereiche weniger häufig ausgeführt werden. Alle Optimierungen profitieren von profilgesteuertem Feedback, da sie bei Kompilierungsentscheidungen weniger auf Heuristiken angewiesen sind . Die Einschränkung besteht jedoch darin, dass die Datenstichprobe, die dem Programm während der Profilerstellungsphase zugeführt wird, statistisch repräsentativ für die typischen Nutzungsszenarien sein muss; Andernfalls kann profilgesteuertes Feedback die Gesamtleistung des endgültigen Builds beeinträchtigen, anstatt sie zu verbessern.

Die Just-in-Time-Kompilierung kann Laufzeitinformationen nutzen , um Teile des ausgeführten Codes dynamisch neu zu kompilieren, 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 wurde.

Annahme

Es gibt Unterstützung für die Erstellung von Firefox mit PGO. Obwohl PGO effektiv ist, wurde es aufgrund seines mühsamen dualen Kompilierungsmodells nicht weit verbreitet von Softwareprojekten übernommen. Es ist auch möglich, PGO ohne Instrumentierung durchzuführen, indem ein Profil mithilfe von Hardwareleistungszählern erfasst wird . Dieser auf Sampling basierende Ansatz hat einen viel geringeren Overhead und erfordert keine spezielle Kompilierung.

Die HotSpot Java Virtual Machine (JVM) verwendet profilgesteuerte Optimierung, um nativen Code dynamisch zu generieren. Folglich wird eine Software-Binärdatei für die tatsächliche Last optimiert, die sie empfängt. Wenn die Last ändert, adaptive Optimierung kann dynamisch neu kompiliert die laufende Software , um es für die neue Belastung zu optimieren. Dies bedeutet, dass alle auf der HotSpot-JVM ausgeführte Software effektiv von der profilgesteuerten Optimierung Gebrauch macht.

PGO wurde in die Microsoft Windows- Version von Google Chrome übernommen . PGO wurde in der 64-Bit- Version von Chrome ab Version 53 und Version 54 für die 32-Bit- Version aktiviert .

Implementierungen

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

Siehe auch

Verweise