Jak zmierzyć czas procesora i zegar ścienny?

Widziałem wiele tematów na ten temat, nawet w przypadku stackoverflow, na przykład:

Jak mogę zmierzyć czas procesora i czas zegara ściennego w systemie Linux / Windows?

Chcę zmierzyć czas procesora i ściany. Chociaż osoba, która odpowiedziała na pytanie w temacie, które napisałem, zaleca używaniegettimeofday Aby zmierzyć czas ściany, przeczytałem, że zamiast tego lepiej go użyćclock_gettime. Więc napisałem poniższy kod (czy to jest ok, czy to naprawdę mierzy czas na ścianie, a nie czas procesora? Pytam, bo znalazłem stronę internetową:http://nadeausoftware.com/articles/2012/03/c_c_tip_how_measure_cpu_time_benchmarking#clockgettme gdzie to mówiclock_gettime mierzy czas procesora ...) Co jest prawdą, a której należy użyć do pomiaru czasu ściany?

Kolejne pytanie dotyczy czasu procesora. Znalazłem odpowiedźclock jest w tym świetny, więc napisałem do tego przykładowy kod. Ale to nie to, czego naprawdę chcę, ponieważ mój kod pokazuje mi 0 sek. Czasu procesora. Czy jest możliwe dokładniejsze zmierzenie czasu procesora (w sekundach)? Dziękujemy za pomoc (na razie jestem zainteresowany tylko rozwiązaniami Linux).

Oto mój kod:

#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;
}

Skompiluj to tak:

gcc test.c -o test -lrt -lm

i pokazuje mi to:

wall time 0.000424s
cpu time 0.000000s

Wiem, że mogę zrobić więcej iteracji, ale nie o to tu chodzi;)

WAŻNY:

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

przedstawia

CLOCKS_PER_SEC is 1000000

questionAnswers(1)

yourAnswerToTheQuestion