Zeitmessung mit: Real Time-Stamp Counter / “QueryPerformanceCounter“ Funktion ??
-
Hallo!
Bisher habe ich zwei Möglichkeiten gefunden die eine Zeitmessung präzise durchzuführen.
a) mit der QueryPerformanceCounter Funktion
b) mit Hilfe des Real Time-Stamp CounterIn der MSDN habe ich nur gefunden das die QueryPerformanceCounter auf den „high-resolution performance counter“ zugreift. Dieser ist bei mir mit 3579545 Hz getaktet.
Da ich einen P4 2.4 GHz habe, ist der Real Time Counter mit 2405.45 Mhz getaktet.
In einigen Newsgroups habe ich gelesen das der Real Time Counter genauer sein soll.
Ich verstehe jedoch nicht warum. ???
Die Messung müsste doch mit einem höher getaktetem Counter wie z.B. dem „high-resolution performance counter“ genauer sein.Da in Windows die Zeit sowieso nicht genau gemessen werden kann, würde ich sagen dass es egal ist welche Methode man zum Zeit messen benutzt. Jedoch würde mich interessieren was die genauen Unterschiede sind.
Was meint Ihr dazu?
-
Den Time-Stamp-Counter liest du i.d.R. so aus:
__int64 rdtsc() { __asm rdtsc; }
-
Vergiss was ich oben geschrieben habe. Was du anscheinend brauchst ist ein High-Resolution-Timer. Guck mal auf codeguru.com nach. Meine dort eine Klasse dafür gesehen zu haben.
-
a) QueryPerformanceCounter ist nicht höher getaktet als dein Rechner, dein Rechner ist einfach um 0.227% übertaktet
RDTSC hat weniger overhead (kein Funktionsaufruf). Ist aber auch nicht ganz fair -
Agner Fogs "How to optimize for the Pentium family of microprocessors" (http://www.agner.org/assem/) bietet ein Assembler-Listing (plus Hinweise wie man da Prozessorabhängig "fair" macht).QueryPerformanceCounter ist etwas portabler - aber auch hier behält sich MS vor das Ding nicht zu implementieren wenn der prozessor es nicht erlaubt.
-
peterchen schrieb:
a) QueryPerformanceCounter ist nicht höher getaktet als dein Rechner, dein Rechner ist einfach um 0.227% übertaktet
Das meine ich nicht! Der "high-resolution performance counter" wird gerundet mit 3.6 GHz getaktet und der "Real Time Counter" gerundet mit 2.4GHz.
Also ist die max. Auflösung beim Messen von Zeiten theoretisch beim RTC 1/2.4Ghz= 0.417 ns und beim "high-resolution performance counter" 1/3.6GHz=0.277 ns.