Vergangene Zeit ermitteln



  • Hey,

    wie kann ich am besten ermitteln, wie viele Zeit von Funktion A nach Funktion B vergangen sind?

    Kann man das mit time und difftime lösen?



  • Ja.
    Aber clock() ist auch recht hübsch.



  • Stimmt, du hast recht. Ich wusste nicht, dass es das Makro CLOCKS_PER_SEC gibt. Damit kann ich mir was zurecht biegen, danke 🙂



  • Ich schaffe es doch nicht. Die Zeitspanne scheint zu klein für die Auflösung von Clock() zu sein. Ich erhallte immer eine glatte Zahl beim Aufruf dieser Funktion. Durch die Subtraktionen der Differenzen kommt dann meistens 0 oder selten mal 1 raus. Das ist leider sehr unbefriedigend.

    Gibt es eine andere Möglichkeit? Ich experimentiere momentan mit gettimeofday herrum, aber da gibt es öfters negative Zahlen (Überlauf?).

    Wie soll ich vorgehen, ich bin am Verzweifeln...

    Letzendlich reicht es mir, wenn ich die Sekunden als double bekomme, z.B. 0.92 Sekunden.



  • Du führst den zu messenden Block mehrmals aus (z.B. 100mal) und teilst die gemessene Zeit durch 100.



  • wenn es betriebssystemabhängig sein darf, würde es noch höher auflösende möglichkeiten geben.

    unter windows beispielsweise queryperformancecounter.

    bb



  • C++0x bietet <chrono> an.



  • Du darfst nicht (end-start)/CLOCKS_PER_SEC machen, denn int/int=int. Und der Tick Genauigkeit fällt auf 1/sec runter.

    Mach (end-start)/double(CLOCKS_PER_SEC) und du hast die natürlichen 18.2/sec oder 1000/sec.



  • wenn es nur um performance-messung oder vergleiche geht, braucht man die umwandlung in sekunden auch oftmals gar nicht und kann direkt mit den ticks rechnen/vergleichen/...

    bb



  • unskilled schrieb:

    wenn es nur um performance-messung oder vergleiche geht, braucht man die umwandlung in sekunden auch oftmals gar nicht und kann direkt mit den ticks rechnen/vergleichen/...

    bb

    In diesem Fall geht es aber nicht um Performance-Messung 🙂

    volkard schrieb:

    Du darfst nicht (end-start)/CLOCKS_PER_SEC machen, denn int/int=int. Und der Tick Genauigkeit fällt auf 1/sec runter.

    Mach (end-start)/double(CLOCKS_PER_SEC) und du hast die natürlichen 18.2/sec oder 1000/sec.

    Das klingt erschreckend plausibel. Ich werde das mal ausprobieren. Danke 🙂



  • Also clock() bezieht sich ja nur auf die Prozessorzeit. Das könnte eventuell ein Problem sein, da ich ein select-Aufruf in meiner Anwendung habe. Das zählt ja dann vermutlich nicht als Prozessorzeit, da select ja wartet, wenn nichts passiert. Entsprechend könnte das Ergebnis sehr stark schwanken (abhängig davon, wie lange select blockiert hat).



  • Dann mußt Du langsam plattformabhängig schreiben.


Log in to reply