Как измерить время процессора и время настенных часов?
Я видел много тем об этом, даже на 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