2017-12-19 5 views
7

Dies mag scheinen oder auch nur eine dumme Frage sein: Wenn ich etwas selbst-Tuning wie Python mit PGO (oder ATLAS oder ich glaube, FFTW macht es auch), muss der Computer sonst im Leerlauf sein (um die Messungen nicht zu stören) oder kann ich die Zeit damit verbringen, Doom zu spielen?Beim Erstellen von Python mit profilgesteuerter Optimierung muss ich den Computer in Ruhe lassen?

Die verknüpfte README aus der Python-Source-Distribution scheint dies zu trivial zu erwähnen, aber ich bin wirklich unsicher darüber.

+2

Doom ist in Ordnung, wird nicht viel CPU essen :) –

+0

Im Zweifel, besser sicher als Nachsicht: Spielen Sie auf Ihrem anderen Computer –

+0

Haben Sie es und finden Sie es heraus. ;-) –

Antwort

3

Was Sie auf Ihrem Computer tun, während die PGO-Messungen durchgeführt werden, sollte keinerlei Auswirkungen auf das Ergebnis der Optimierung haben. Was PGO tun ist, Messungen zu verwenden, um die heißen Pfade in dem Code für einen gegebenen Datensatz zu finden und diese Information zu verwenden, um das Programm so schnell wie möglich für diesen Datensatz zu machen und welcher Pfad heiß ist und welcher nicht unabhängig von anderen Programmen ist auf dem Computer laufen.

Um die Dinge ein wenig zu erklären, gibt es bei der Code-Optimierung Kompromisse. Die Verbesserung wird in einigen Teilen des Codes höher und in anderen niedriger sein, abhängig davon, welche Code-Transformationen verwendet werden und wo sie angewendet werden. Um ein besseres Endergebnis zu erzielen, benötigen Sie hohe Verbesserungen im Code, der häufig ausgeführt wird (Hot-Code im Compiler-Jargon), während Sie mit kleineren Verbesserungen im Code leben können, der seltener ausgeführt wird (Cold-Code). Normalerweise wird eine Reihe von Heuristiken verwendet, um diese heißen Teile des Programms zu identifizieren und Optimierungen so anzuwenden, dass diese Teile so schnell wie möglich gemacht werden. Das Problem bei diesem Ansatz besteht darin, dass die Heuristiken nichts darüber wissen, wie das Programm in der Praxis verwendet wird, und heißen Code möglicherweise als kalt identifizieren.

Die profilgeführte Optimierung (PGO) ist eine Methode, die dem Compiler hilft, die heißen Teile des Codes mithilfe von Daten aus realen Ausführungen zu lokalisieren. Als ersten Schritt weisen Sie den Compiler an, eine instrumentierte Version des Programms zu erstellen, um zu messen, wie der Code in der Praxis ausgeführt wird. Dazu werden normalerweise Zähler hinzugefügt, um die Anzahl der Iterationen in Schleifen zu zählen und welcher Zweig in if-Anweisungen ausgewählt wird. Der zweite Schritt besteht darin, das instrumentierte Programm mit realen Daten auszuführen. Am Ende der Ausführung gibt das Programm die Werte aller hinzugefügten Zähler aus, und durch das Vergleichen der Zähler mit dem Code kann man sehen, welche Teile des Programms heiß (hohe Zahlen) und welche kalt (niedrige Zahlen) sind. Abschließend wird das Programm kompiliert, diesmal jedoch mit dem Programmprofil versehen. Dies bedeutet, dass der Compiler nicht mehr raten muss, welche Teile schneller sein sollten und welche langsamer sein könnten, um im Profil nachzuschlagen.

+0

Danke, @Johan für deine Antwort. Ich respektiere Ihre Expertise. Aber könntest du es an diesem Punkt ein bisschen runterkochen und uns Nicht-Compiler-Experten eine Chance geben, weiter zu machen? Vielleicht eine oder zwei Zeilen darüber, was "heiß" eigentlich bedeutet, und "Pfad" für diese Angelegenheit? Ich weiß, dass ich technisch nicht nach dem Warum und Wie gefragt habe, aber jemanden, der klar kenntnisreich ist, würde es nachlässig machen, nicht um ein bisschen Erleuchtung zu bitten. –

+0

@PaulPanzer Ich habe eine Erklärung über PGO hinzugefügt. Wenn es noch unklar ist, lass es mich wissen. – Johan

+0

Jetzt bin ich ziemlich glücklich mit der Antwort. Interessant und informativ. Vielen Dank! –

Verwandte Themen