Kann mir jemand einen guten Leitfaden zu diesem Thema empfehlen? Ich kann keine finden.
Antworten
Zu viele Anzeigen?-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.
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.
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.