Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Laufzeitmessung in Windows

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.10.2007, 13:53 Uhr
~anschnei
Gast


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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.10.2007, 22:56 Uhr
0xdeadbeef
Gott
(Operator)


clock() gibt doch die CPU-Zeit zurück?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.10.2007, 17:37 Uhr
~Anschnei
Gast


Aber nicht die bereinigte. Wenn z.B. gleichzeitig zu meinem Programm weitere zeitraubende Prozesse auf dem Rechner laufen, wird die Laufzeit meines Programms (mit clock()) womöglich höher sein als wenn gerade keine weiteren nennenswerten Prozesse auf dem Rechner laufen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.10.2007, 14:33 Uhr
BuddyLove




C++:

#include <time.h>

  double difftime(time_t t1, time_t t2);

// Rückgabewert:
// Differenz zwischen zwei Zeitwerten in Sekunden.



// oder sowas hier... ?



#include <time.h>

  clock_t clock(void);

// Rückgabewert:
// Verbrauchte CPU-Zeit seit dem Programmstart in Ticks.
//
// Bemerkung:
// Wird die verbrauche Zeit in Sekunden benötigt, so muß der durch
// clock ermittelte Wert durch CLOCK_PER_SEC dividiert werden.

// Beispiel:

#include <stdio.h>
  #include <time.h>

  int main(void)
  {
    char *wday[] = { "Sonntag", "Montag", "Dienstag", "Mittwoch",
         "Donnerstag", "Freitag", "Samstag", "???" };

    struct tm ts;
    int year, month, day;

    printf("Jahr:  ");   scanf("%d", &year);
    printf("Monat: ");   scanf("%d", &month);
    printf("Tag:   ");   scanf("%d", &day);

    ts.tm_year = year - 1900;
    ts.tm_mon  = month - 1;
    ts.tm_mday = day;

    ts.tm_hour = 0;
    ts.tm_min  = 0;
    ts.tm_sec  = 1;
    ts.tm_isdst = -1;

    if ( mktime(&ts) == -1 )
      ts.tm_wday = 7;

    printf("Dieser Tag ist ein %s\n", wday[ts.tm_wday]);

    return 0;
  }





 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
12.11.2007, 20:57 Uhr
~erpel
Gast


Mal ne Frage...was bedeutet denn ein Tick eigentlich?
Ich schreibe grad ein Fraktal Programm und verbessere es der Performace wegen..
Bei dem Rechner in der Schule braucht er beispielsweise 1900ticks für ein und denselben algorithmus und mein rechner braucht nur 90 ticks!?
Habe vor dem algorithmus zeitstart = clock()
und danach zeitende = clock() und dann die differenz...dachte eigentlich die müssten egal welche cpu gleich sein...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.11.2007, 17:10 Uhr
~erpel
Gast


Ich glaube das Problem hat sich gelöst... ich habe es zwar nirgendwo genau gefunden, denn alle reden immer nur von "ticks" als rückgabewert von clock() aber ich denke es sind milisekunden oder so.
Danke.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.11.2007, 01:39 Uhr
Hans
Library Walker
(Operator)



Zitat von ~erpel:
alle reden immer nur von "ticks" als rückgabewert von clock() aber ich denke es sind milisekunden oder so.

Hi,

"oder so" trifft es noch am Besten, denn die "ticks" sind vom jeweiligen System abhängig, und stehen AFAIK mit der Arbeitsgeschwindigkeit des Prozessors im Zusammenhang.
Die in dem Prgrammbeispiel oben in Posting 003 genannte Konstante CLOCK_PER_SEC, die richtig CLOCKS_PER_SEC heisst, muss bei der Zeitmessung noch berücksichtigt werden. Auf Dein Problem bezogen, sähe das so aus:

C++:
zeitstart = clock();
// Fraktal berechnen
zeitende = clock();
zeit = (zeitende - zeitstart) / CLOCKS_PER_SEC; // Zeit in Sekunden.


Das ergibt die Zeit in Sekunden. Der Wert von CLOCKS_PER_SEC ist Systemabhängig. Genauere Informationen hab ich dazu auch nicht auf Lager; - vermutlich findet man die aber hier:


Habe das Werk zwar (noch) nicht in meiner Sammlung, von dem Autor bisher aber nur gute Bücher in der Hand gehabt.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 14.11.2007 um 01:44 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
14.11.2007, 06:55 Uhr
0xdeadbeef
Gott
(Operator)


Typischerweise ist CLOCKS_PER_SEC 1000000l, das schreibt der X/Open-SI-Standard so vor, und inzwischen, glaube ich, auch POSIX. Windows tanzt bei sowas allerdings gern aus der Reihe, also nicht drauf verlassen, dass es sich tatsächlich um Mikrosekunden handelt; der ANSI-C-Standard schreibt lediglich vor, dass clock() / CLOCKS_PER_SEC die verbrauchte CPU-Zeit in Sekunden zurückgibt. Diese ist "bereinigt", will sagen, es geht dabei nur um die CPU-Zeit, die das Programm selbst verbraucht hat (näherungsweise).
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.11.2007, 09:07 Uhr
stephanw
localhorst


Unter Windows kann man auch QueryPerformanceFrequency() und QueryPerformanceTimer() verwenden. Die sollen wohl eine genauere Zeitmessung erlauben als die Funktionen der Standard-C-Bibliothek.

Mehr kann ich dazu leider auch nicht sagen. Ein Code-Besipiel zeigt dieser Google-Treffer:

www.gamedev.net/community/forums/topic.asp?topic_id=67291
--
Reden ist Schweigen und Silber ist Gold.

Dieser Post wurde am 14.11.2007 um 09:07 Uhr von stephanw editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
14.11.2007, 14:10 Uhr
~erpel
Gast


Hey danke erstmal. Wurde wie immer hier in diesem Forum gut beraten.
MfG
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: