Wie Messen die cpu-Zeit und die wall-clock-Zeit?

Sah ich viele Themen über diese, auch auf stackoverflow, zum Beispiel:

Wie kann ich Messen, CPU-Zeit und die wall-clock-Zeit auf Linux/Windows?

Will ich Messen die cpu-und Mauer-Zeit. Obwohl die person, die beantwortet eine Frage im Thema geschrieben ich empfehlen gettimeofday zu Messen, eine Wand mal, ich habe gelesen, dass es besser verwenden, anstatt clock_gettime. Also schrieb ich den folgenden code (ist es ok, ist es wirklich Messen in eine Wand ein Zeit, nicht die cpu-Zeit? Im Fragen, weil ich fand eine Webseite: http://nadeausoftware.com/articles/2012/03/c_c_tip_how_measure_cpu_time_benchmarking#clockgettme, wo es heißt, dass clock_gettime misst eine cpu-Zeit...), Was die Wahrheit und was sollte ich verwenden, um zu Messen, in eine Wand ein Zeit?

Andere Frage ist, über die cpu-Zeit. Ich fand die Antwort, dass clock ist groß über Sie, so schrieb ich ein Beispiel-code für Sie zu. Aber es ist nicht, was ich wirklich will, meinen code zeigt er mir eine 0 secods der cpu-Zeit. Ist es möglich zu Messen, cpu-Zeit mehr genau (in Sekunden)? Vielen Dank für jede Hilfe (für jetzt auf, Im interessiert nur in Linux-Lösungen).

Heres mein code:

#include <time.h>
#include <stdio.h>      /* printf */
#include <math.h>       /* sqrt */
#include <stdlib.h>

int main()
{
    int i;
    double sum;

    //measure elapsed wall time
    struct timespec now, tmstart;
    clock_gettime(CLOCK_REALTIME, &tmstart);
    for(i=0; i<1024; i++){
        sum += log((double)i);
    }
    clock_gettime(CLOCK_REALTIME, &now);
    double seconds = (double)((now.tv_sec+now.tv_nsec*1e-9) - (double)(tmstart.tv_sec+tmstart.tv_nsec*1e-9));
    printf("wall time %fs\n", seconds);

    //measure cpu time
    double start = (double)clock() /(double) CLOCKS_PER_SEC;
    for(i=0; i<1024; i++){
        sum += log((double)i);
    }
    double end = (double)clock() / (double) CLOCKS_PER_SEC;
    printf("cpu time %fs\n", end - start);

    return 0;
}

Kompilieren Sie es wie folgt:

gcc test.c -o test -lrt -lm

und es zeigt mir:

wall time 0.000424s
cpu time 0.000000s

Ich weiß, ich kann mehr Wiederholungen, aber das ist nicht der Punkt hier 😉

WICHTIG:

printf("CLOCKS_PER_SEC is %ld\n", CLOCKS_PER_SEC);

zeigt

CLOCKS_PER_SEC is 1000000
Verwenden profiler...
Ich wünschte, ich könnte, aber ich brauche es selbst zu tun 🙂
Vielleicht, wenn man nicht dividieren des Ergebnisses der clock() Funktion von CLOCKS_PER_SEC Ihre Auflösung wäre besser als eine zweite, hrm?
was passiert, wenn man eine Zahl und dividieren Sie durch andere, wird es genauer oder weniger? Einfachere Frage: ist es größer oder kleiner? Ja, die website, die Sie Links ist die Aufteilung in Ihrem Beispiel, aber es fällt auf Sie zu verstehen, die Argumentation, und ohne Zweifel, warum auch immer hat es nicht für eine verbesserte Auflösung. Wie um die "richtige cpu-Zeit für wissen" - wenn clock() zurückgegeben richtigen cpu-Zeit, dann durch nicht ändern, natürlich. NIE geben Sie im code finden Sie in einem zufälligen Ort, ohne sich Gedanken darüber machen was es tatsächlich erste.
"Was ist die Wahrheit und was sollte ich verwenden, um zu Messen, in eine Wand ein Zeit?" - Tatsache ist, dass es viele verschiedene Methoden zum Messen der Wand die Zeit. Einige genauer sind als andere. Einige mehr tragbar als andere. Sie nehmen Sie nehmen und verwenden, was zu Ihrer Stimmung passt. Meine Antwort auf die Frage, die Sie im Zusammenhang verwendet gettimeofday() weil das das erste war, das funktionierte gut genug für mich.

InformationsquelleAutor Brian Brown | 2013-07-06

Schreibe einen Kommentar