84 Stimmen

Wie verwendet man profilgeführte Optimierungen in g++?

Kann mir jemand einen guten Leitfaden zu diesem Thema empfehlen? Ich kann keine finden.

67voto

Maister Punkte 4842

-fprofile-generate instrumentiert die Anwendung mit Profiling-Code. Während die Anwendung läuft, werden bestimmte Ereignisse protokolliert, die die Leistung verbessern könnten, wenn dieses Nutzungsmuster zur Kompilierungszeit bekannt wäre. Verzweigungen, die Möglichkeit des Inlinings usw. können alle protokolliert werden, aber ich bin mir nicht sicher, wie GCC dies im Detail implementiert.

Nach Beendigung des Programms werden all diese Daten in *.gcda-Dateien gespeichert, bei denen es sich im Wesentlichen um Protokolldaten für einen Testlauf handelt. Nachdem die Anwendung mit dem Flag -fprofile-use neu erstellt wurde, berücksichtigt der GCC die *.gcda-Protokolldaten bei seinen Optimierungen, wodurch sich die Leistung in der Regel erheblich verbessert. Natürlich hängt dies von vielen Faktoren ab.

25voto

rogerdpack Punkte 55995

Von dieses Beispiel :

g++ -O3 -fprofile-generate [more params here, like -march=native ...] -o executable_name
// run my program's benchmarks, or something to stress its most common path
g++ -O3 -fprofile-use [more params here, like -march=native...] -o executable_name

Im Grunde kompilieren und linken Sie zunächst mit diesem zusätzlichen Flag, sowohl beim Kompilieren als auch beim Linken: -fprofile-generate (aus aquí ).

Wenn Sie es dann ausführen, erstellt es standardmäßig .gcda-Dateien "neben" Ihren .o-Dateien (hart kodiert mit dem vollständigen Pfad, in dem sie erstellt wurden).

Optional können Sie den Ort, an dem die .gcda-Dateien erstellt werden, mit der Option -fprofile-dir=XXX Einstellung .

Dann kompilieren und verlinken Sie erneut mit dem -fprofile-use und kompiliert es unter Verwendung von profilgeführter Güte.

3voto

Zan Lynx Punkte 51045

Der knifflige Teil ist das Einrichten der Makefiles.

Sie benötigen auf jeden Fall separate Ausgabeverzeichnisse für Objektdateien. Ich würde empfehlen, sie "profile" und "release" zu nennen. Möglicherweise müssen Sie die *.gcda-Dateien, die aus dem Profillauf resultieren, kopieren, damit der GCC sie im Release-Build-Schritt findet.

Das Ergebnis wird mit Sicherheit schneller sein. Es wird wahrscheinlich auch größer sein. Die Option -fprofile-use ermöglicht viele andere Optimierungsschritte, die sonst nur durch -O3 aktiviert werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X