PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Performance Optimieren -> Werkzeuge od. Tricks?



Mat
08-12-2008, 11:47
Hallo liebes Forum,

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?

Ich danke euch für eine geduldige Antwort
:)

jeebee
08-12-2008, 12:49
cachegrind + kcachegrind sind sicher nicht schlecht um mal zu schauen, wo der grossteil der zeit verbracht wird. gprof ist imho zu ungenau um viel zu helfen, ausser du hast wirklich eine fkt die >90% der zeit braucht. Was auch ne möglichkeit ist (musst du aber den code verändern), ist die cpu-ticks zu "zählen": ticks vor und nach der methode abfragen und differenz bestimmen. Wobei zweiteres eher zum reinen zeitmessen brauchbar ist und du zum %-Angaben o.ä. erhalten dies für jede fkt machen musst.

edit: Ich würd zum beginnen mal mit cachegrind versuchen rauszufinden, welche methoden am meisten zeit brauchen und dann an _einem_ ort etwas versuchen zu optimieren und wieder messen. wenns nichts gebracht hat: rückgängig machen und etwas anderes versuchen. sonst: noch an _einem_ weiteren ort eine optimierung versuchen zu machen.

panzi
08-12-2008, 13:16
Siehe:
http://www.complang.tuwien.ac.at/anton/lvas/skriptum-effizienz.html

Vorlesungsfolien:
http://www.complang.tuwien.ac.at/anton/lvas/effizienz.ps.gz

Wobei ich mir einige Notizen auf den Folien gemacht hab, weil da net alles drauf steht (z.B.: das macht der Kompiler, das macht der Kompiler nicht, ...). Hab aber keine Zeit alles abzutippen.

Profiler und deren Verwendung werden da auch erwähnt.

Mat
08-12-2008, 13:16
cachegrind + kcachegrind sind sicher nicht schlecht um mal zu schauen, wo der grossteil der zeit verbracht wird. gprof ist imho zu ungenau um viel zu helfen

danke erstmal. Warum ist gprof zu ungenau? Könntest du darauf näher eingehen?

jeebee
08-12-2008, 15:05
Ist meine Erfahrung, ich glaub die Zeitauflösung ist nur 0.1sec, was häufig dazu führt, dass du keine schlauen Infos erhältst.

Mat
09-12-2008, 16:17
Hmm.....ich bekomm mit kcachegrind+valgrind und gprof unterschiedliche performance ergebnisse. Wie kann das sein. Mir fällt auch die Interpretation vom gprof output relativ schwer.

Wie gut ist denn die Auflösung von gprof bzw. kcachegrind. 0.01 sec ? Kann das sein?

Gäbe es noch andere tools?

jeebee
09-12-2008, 18:26
wie gesagt: ich mag gprof nicht besonders und brauchs deshalb auch fast nie (unter anderem auch wegen dem nicht sehr übersichtlichen output). Zur Auflösung find ich gerade nix und kanns dir auch nicht mehr sagen, aber ich glaub bei gprof wars noch grober als 0.01sec.