[C++] Zeitmessung

[Moepi]1

Lt. Commander
Registriert
Jan. 2002
Beiträge
1.233
Ich muss die Laufzeit eines Algorithmus so genau wie möglich messen. Dazu gehe ich iterativ mit verschiedenen Eingabegrößen durch und messe es dann pro Größe 20mal. Problem dabei ist, dass es sehr viele Messwerte werden und diese sich nur wenig voneinander unterscheiden. Ich muss also so genau wie irgends möglich messen.

Bisher verwende ich die time.h und deren clock() Methode, allerdings lässt die Genauigkeit hier zu wünschen übrig. Offenbar ist diese Funktion sogar vom Prozessor abhängig. Bei Intel hab ich ne Genauigkeit von 10ms, bei AMD ne Genauigkeit von etwa 16ms. Das reicht einfach nicht. 1ms is das Mindeste was ich bräuchte.
Die simple Vergrößerung der Schleifenzahl ist keine Option, da der Algorithmus voraussichtlich mehr oder weniger exponentiell ausbrechen wird und bei größeren Eingaben das Benchmark sonst tage dauern würde.

Kennt jemand von Euch alternative Zeitmessfunktionen außer time.h? Optimeraler Weise sollte es natürlich noch ANSI sein, da der Mist auch unter Linux laufen soll...
 
Was einheitliches und genaueres als clock gibt es nicht.

Unter Windows könntest du QueryPerformanceCounter / QueryPerformanceFrequency benutzen. Unter Linux weiß ich nichts vergleichbares (heißt nicht, dass es nix gibt).

ABER: Windows und Linux in Normalkonfiguration sind keine Echtzeit-Betriebssysteme. Von daher wirst du wohl kaum Messung mit der Genauigkeit von 1ms machen können.

Benutze lieber einen Profiler, z.B. gprof unter Linux. Damit kannst du gucken wo die Zeit im Algorithmus bleibt und ob/wo es etwas zu verbessern gibt.
 
Zurück
Oben