ich habe eine Anwendung geschrieben die größer ist. (> 10k Code). Es handelt sich um numerische Algorithmen. Nun will ich ein sauberes Performance-Testing machen.
Es geht um Folgendes: Je nach Problemgröße (input) will ich mir genau anschauen können wie aufwändig gewisse Teile des Codes (des Algorithmuses) sind und dann dort gezielt optimieren.
Mir fällt spontan nur folgendes ein: * Profiling: Über Profiler (z.B. kcachegrind o.ä.) mir den prozentualen Anteil an der Obermethode anzeigen lassen. * Zeitmessungen in Sekunden.
Mein Problem/Frage:
Ich brauche ein verlässliches Werkzeug das mir genau zeigt wie teuer eine Methode (ein Teil) ist. Nur weiß ich nicht welches Werkzeug möglichst genau ist und nicht von irgendwelchen Prozessen beeinflusst wird? Wie geht ihr vor? Gibt es spezielle Tools (unter Linux) mit welchen sich genau die Zeit (Prozent oder sonstwie) messen lassen kann? Worauf muss ich achten? (Möglichst wenig Prozesse beim laufen?). Habt ihr spezielle Tricks?
Spontan ist dir da schon das richtige eingefallen - du willst einen Profiler. Unter Linux bedeutet das in aller Regel gprof, valgrind, oder ein Frontend dafür; kcachegrind ist meines Wissens ein Frontend für ein entsprechendes valgrind-Plugin, kprof (ich bleib grad mal unter KDE) für gprof-Ausgaben.
gprof ist hier kurz erklärt. valgrind benutze ich nur zum Entdecken von Speicherlöchern, deswegen kann ich dir damit nicht weiterhelfen. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra
Aber sind die Profiler auch wirklich genau? Wie sind denn so die Einflüsse der Hardware bzw. anderer Prozesse die gerade laufen? Baut der Profiler irgendwie eine Umgebung auf die "nicht gestört" wird? Und welchen Profiler nehmt ihr denn so her?
Ich denke, es bringt wenig, wenn ich dir darüber einen Aufsatz schreibe - wie das ganze im Einzelnen funktioniert, ist zum Beispiel am Anfang des gprof-Handbuchs beschrieben: