Frage

Die C clock() Funktion gibt mir nur eine Null. Ich habe versucht, verschiedene Arten verwenden, ohne Verbesserung ... Ist das ein guter Weg, um Zeit mit guter Präzision zu messen?

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

int main()
{
    clock_t start, end;
    double cpu_time_used;

    char s[32];

    start = clock();

    printf("\nSleeping 3 seconds...\n\n");
    sleep(3);

    end = clock();

    cpu_time_used = ((double)(end - start)) / ((double)CLOCKS_PER_SEC);

    printf("start = %.20f\nend   = %.20f\n", start, end);
    printf("delta = %.20f\n", ((double) (end - start)));
    printf("cpu_time_used  = %.15f\n", cpu_time_used);
    printf("CLOCKS_PER_SEC = %i\n\n", CLOCKS_PER_SEC);

    return 0;
}
Sleeping 3 seconds...

start = 0.00000000000000000000
end   = 0.00000000000000000000
delta = 0.00000000000000000000
cpu_time_used  = 0.000000000000000
CLOCKS_PER_SEC = 1000000

Plattform: Intel 32-Bit, RedHat Linux, gcc 3.4.6

War es hilfreich?

Lösung

clock() meldet CPU-Zeit verwendet. sleep() keine CPU-Zeit verwenden. So Ihr Ergebnis ist wahrscheinlich genau richtig, nur nicht das, was Sie wollen.

Andere Tipps

man clock. Es ist nicht zurückkehren, was Sie denken, es ist. Auch man gettimeofday -. Es ist wahrscheinlicher, was Sie wollen

clock_t ist ein Integer-Typ. Sie können es nicht mit% f ausdrucken. Siehe Freds Antwort warum der Unterschied ist, 0.

 printf("start = %.20f\nend   = %.20f\n", start, end);

sollte:

 printf("start = %d\nend   = %d\n", start, end);

Beim sleep() wird keine CPU-Zeit aufbrauchen. Sie sollten einen kleinen Unterschied, obwohl sehen. Ich korrigierte Ihre printf Typenkonflikt Fehler in dieser Zeile:

printf("start = %.20f\nend   = %.20f\n", start, end);

Und es gab vernünftige Ergebnisse auf meiner Maschine:

start = 1419
end   = 1485
delta = 66
cpu_time_used  = 0.000066000000000
CLOCKS_PER_SEC = 1000000

Sie könnten gettimeofday() versuchen die Echtzeit-Programms ausgegeben zu bekommen ausgeführt wird.

Sie müssen wahrscheinlich

double get_wall_time(){ struct timeval time; if (gettimeofday(&time,NULL)){ return 0; } return (double)time.tv_sec + (double)time.tv_usec * .000001; } und die Verwendung so etwas wie

double wall0 = get_wall_time(); double cpu0 = get_cpu_time(); for(long int i = 0; i<=10000000;i++){ func1(); } double wall1 = get_wall_time(); double cpu1 = get_cpu_time(); cout << "Wall Time = " << wall1 - wall0 << endl; cout << "CPU Time = " << cpu1 - cpu0 << endl;

statt    clock()

als Uhr nur und nur nur in CPU ausgegeben zählt die Zeit auf Leistungsindikatoren basieren. Sie können jedoch Ergebnis durch die Verwendung obiger Funktion erhalten. nur um zu überprüfen, Ihre Anwendung es mit der Zeit Befehl ausführen

wie time ./a.out

Ausgabe von Zeitbefehl:

real 0m5.987s user 0m0.674s sys 0m0.134s

und Ausgabe von benutzerdefinierter Funktion Wall Time = 5.98505 CPU Time = 0.8

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top