Как измерить время процессора и время настенных часов?

Я видел много тем об этом, даже на stackoverflow, например:

Как я могу измерить время процессора и время настенных часов в Linux / Windows?

Я хочу измерить время процессора и стены. Хотя человек, который ответил на вопрос в теме, которую я отправил, рекомендует использоватьgettimeofday чтобы измерить время стены, я прочитал, что лучше использовать вместоclock_gettime, Итак, я написал код ниже (это нормально, это действительно измеряет время стены, а не время процессора? Я спрашиваю, потому что я нашел веб-страницу:http://nadeausoftware.com/articles/2012/03/c_c_tip_how_measure_cpu_time_benchmarking#clockgettme где говорится чтоclock_gettime измеряет время процессора ...) Что это за истина и какую мне использовать для измерения времени стены?

Другой вопрос о времени процессора. Я нашел ответ, которыйclock это здорово, поэтому я написал пример кода для него тоже. Но это не то, что я действительно хочу, для моего кода он показывает мне 0 секунд времени процессора. Можно ли измерить время процессора более точно (в секундах)? Спасибо за любую помощь (сейчас я интересуюсь только решениями для Linux).

Вот мой код:

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

Скомпилируйте это так:

gcc test.c -o test -lrt -lm

и это показывает мне:

wall time 0.000424s
cpu time 0.000000s

Я знаю, что могу сделать больше итераций, но здесь дело не в этом;)

ВАЖНЫЙ:

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

шоу

CLOCKS_PER_SEC is 1000000

Ответы на вопрос(1)

Ваш ответ на вопрос