Mikrosekundengenau Zeitmessungen



  • Hätte da eine Frage. Ich weiß dass im C++ Standard keine Möglichkeit existiert, mikrosekundengenau die Zeit zu messen. Derzeit bediene ich mich da get gettimeofday-Funktion, allerdings scheint mir diese ziemlich unpräzise (ich habe mal gelesen, die garantierte Präzesion läge bei 50 µs). Gibt es hier im Posix-Raum eine Möglichkeit, die Zeit auf 1 oder 2 µs genau zu messen?

    Danke im Voraus!



  • Soweit ich weiß bräuchtest du dafür ein echtzeitfähiges Betriebssystem, was Linux nun mal nicht ist.



  • Also es gibt ein paar RTOS'e auf Basis von Linux, aber er will ja wohl gar nicht steuern mit dieser Präzision, sondern nur messen.

    Im Rahmen von POSIX wüsste ich nichts derartiges, aber wenn es jetzt um Linux geht, ist vielleicht kernelsourcen/Documentation/hpet.txt von Interesse.



  • gettimeofday ist so wieso falsch, in dem Fall, da es so etwas wie Zeitzonen einbezieht und die Zeitänderungen des Users.

    Schau dir lieber man: clock_gettime(3) an. Aber wie bereits gesagt, ist die Auflösung und Genauigkeit eben stark durch die Hard- und Software eingeschränkt.



  • Ich hab mal das Programm, wie ich es bereits hier gepostet hab übersetzt und es gibt (bei mir) folgendes aus:

    $ gcc -o testclock -lrt testclock.c
    $ ./testclock
    Resolution: 0s and 1ns
    Elapsed time: 1676ns
    

    Was einer theoretischen Auflösung von 1ns entspricht. Auch wenn praktisch wohl die Auflösung schlechter ist und eine Zeit von etwa 2µs für die eigentliche Messung draufgeht.
    Die Frage ist eher warum man sowas genaues braucht? Und wieso ein Mitteln (was bei so kleinen Werten immer zu besseren Ergebnissen führt) nicht geht.



  • Hallo the[V]oid,

    Zuverlässige Zeitmessungen von Programmabläufen lassen sich am besten unter Betriebssystemen realisieren, die NICHT Multitaskingfahig sind z.B. MS DOS. Über die Funktion clock() aus <time.h> lässt sich die Echtzeituhr des Computers abfragen, die in der Regel eine auflösung im Nanosekundenbereich hat.

    Beim Multitasking Betriebssystem besteht das Problem, dass das Betriebsystem entscheidet welcher Thread oder Prozess momentan die höchste Priorität hat (Auch beim Echtzeitbetriebssystem !!!). Die Messergebnisse sind dann zwar auf eine Naqnosekunde genau, aber unglaubwürdig, weil Du nicht nachvollziehen kannst was gemesse wurde.

    Wenn Du dem Programm die höchste Priorität gibst, könntest Du Glück haben und gute Ergebnisse bekommen.


Anmelden zum Antworten