Performance richtig vergleichen?



  • Ich hab zwei Funktionen, die jeweils das Gleiche machen, und möchte
    herausfinden, welche das bessere Laufzeit-Verhalten hat.
    Habe dazu mit QueryPerformanceCounter() die Zeit in Query-Takten
    (1/25000000 Sek.) vor- sowie nach- dem Funktionsaufruf gemessen
    und dabei folgende Messreihen für verschiedene Eingaben erhalten:

    1. Eingabe:
    f1(): 27,30,27,27,27
    f2(): 25,8,8,8,8

    2. Eingabe:
    f1(): 28,29,30,30,28
    f2(): 21,9,9,32,10

    So, also scheinbar ist f2() oft erheblich 'schneller' als f1().
    Manchmal ist der Unterschied zu f1() aber nur gering, in anderen Fällen
    trotz genau der selben Eingabe ca. 3x so schnell.
    (1) Wie lassen sich derartige Perf.-Schwankungen trotz derselben Eingabe
    bei der selben Funktion eigentlich erklären ?
    (2) Sollte ich für einen aussagekräftigen Vergleich jeweils die schlechteste,
    die durchschnittliche, oder die beste Laufzeit aus den Testreihen verwenden?

    Thx wenn jemand Erfahrung mit dem Vergleichen von Laufzeiten hat!
    Müsste für einen treffenden Vergleich sonst noch etwas berücksichtigt werden?



  • Zu kurze Messzeit. Ruf deine Funktionen millionenmal auf, so das eine Messung mehrere Sekunden braucht.



  • Wenn Du eine multithreaded (multitask) system hast, werden deine funktionen "unterbrochen" um ein anderen task quasiparallel auszuführen. Daher die Schwankungen.

    Wie mein vorredner schon meinte musst Du für einen "ordentlichen" Benchmark mehrere Millionen durchläufe machen und dann die durchschnitliche laufzeit calculieren. (Am besten mit minimaler last auf deinem Host system)

    Greetz


Anmelden zum Antworten