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 time
    

    p.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).


Anmelden zum Antworten