Zeitmessung in VC++
-
Hallo,
Ich habe ein Problem mit der Laufzeitmessung in VC++. Zwar kenne ich Mittel und Wege die Laufzeit zu messen (QueryPerformanceCounter, clock() etc.), diese messen jedoch jeweils die "elapsed" oder "wall clock" time. Ich bin allerdings an der reinen cpu-time für mein Programm interessiert. Hat jemand eine Idee, wie das funktionieren könnte? Unter Linux geht das ja, für VC++ habe ich allerdings noch keine Lösung gefunden.
MfG Andreas
-
GetProcessTimes
-
Danke für den Tip. Kannst du das vielleicht etwas näher erläutern, bzw. ein kleines Beispiel dazu schreiben? Ich werde aus GetProcessTimes() bisher nicht wirklich schlau. Ich bin kein Programmier-Experte, muss jedoch für meine Diplomarbeit in Mathematik meine Algorithmen implementieren und benötige eine adäquate Zeitmessung dazu.
-MfG Andreas
-
FILETIME creationTime; FILETIME exitTime; FILETIME kernelTime; FILETIME userTime; BOOL rc = GetProcessTimes(GetCurrentProcess(), &creationTime, &exitTime, &kernelTime, &userTime); if (!rc) fehler(); __int64 kt = __int64(kernelTime.dwLowDateTime) + (__int64(kernelTime.dwHighDateTime) << 32); // kernelmode time __int64 ut = __int64(userTime.dwLowDateTime) + (__int64(userTime.dwHighDateTime) << 32); // usermode time kt *= 100; ut *= 100; // kt und ut sind jetzt in ns __int64 t = kt + ut; // total cpu timep.S.: die Zeiten die du zurückbekommst sind pro CPU/Core Zeiten, also 1 Sekunde heisst 1 Sekunde auf einem Core. Laufen 2 Threads in deinem Programm für 1 Sekunde gleichzeitig auf 2 Cores gleichzeitig bekommst du 2 (!) Sekunden CPU Zeit zurück -- die CPU Zeit kann also "schneller" laufen als die reale Zeit (weils ja mehr als 1 CPU geben kann).