Performance von CPP-Dateien



  • Hey Leute 🙂
    Weil mich die Compile-Zeiten genervt haben, habe ich nun alle Header-Dateien schön in hpp und cpp Dateien aufgeteilt, wie es sich gehört. Aber mein Benchmark hat ergeben, dass das Program nun ~3% mehr Zeit braucht für die selben Berechnungen. Hat das vielleicht mit Inlining zu tun?? Ist es normal, dass man Performance verliert, wenn man diese cpp/hpp Aufteilung in Anspruch nimmt?
    LG 🙂



  • Ja, das hat wahrscheinlich mit Inlining zu tun. Funktionen, bei denen Vorteile durch Inlining zu erwarten sind, sollte man möglichst in den Header packen.
    Allerdings unterstützen mittlerweise so ziemlich alle wichtigen Compiler LTO/WPO (link-time optimization/whole program optimization), wodurch Inlining über Modulgrenzen wieder möglich wird.



  • 1. Was berechnest du?
    2. Wie hast du kompiliert?



  • Ich berechne numerische Ableitungen, dazu werden gewisse Funktionen sehr oft aufgerufen. Kompiliert in beiden Fällen mit -O3!

    Zum Thema LTO: in CMake habe ich nun das Flag -flto gesetzt aber dann kommt immer beim Kompilieren: plugin needed to handle lto object
    Was soll das heißen? 😞



  • s. gcc: Options That Control Optimization (such einfach nach "-flto"): du mußt sowohl beim Kompilieren als auch Linken diese Option angeben und desweiteren entweder "-fuse-linker-plugin" oder aber "-fwhole-program".

    PS: Hast du denn einen Profiler zur Verfügung? Dann könntest du ermitteln welche Funktionen häufig aufgerufen werden und diese dann wieder "inline" direkt in den Header packen.


  • Mod

    Th69 schrieb:

    PS: Hast du denn einen Profiler zur Verfügung? Dann könntest du ermitteln welche Funktionen häufig aufgerufen werden und diese dann wieder "inline" direkt in den Header packen.

    Wenn man schon einen Profiler benutzt, um diese Dinge festzustellen, sollte man danach anhand dieser Daten besser den Compiler entscheiden lassen, bei welchen Funktionen das Inlining wirklich Sinn macht. Der GCC (und andere Compiler) haben dafür die Option der sogenannten profile-guided optimization. Das ist meiner Erfahrung nach die am besten wirkende Optimierung; ist aber leider etwas schwierig zu benutzen.


Anmelden zum Antworten