我看到了很多关于这个的话题,甚至在 stackoverflow 上,例如:
如何在 Linux/Windows 上测量 CPU 时间和挂钟时间?
我想同时测量 cpu 和挂墙时间。尽管在我发布的主题中回答问题的人建议使用gettimeofday
来测量墙壁时间,但我读到它更好地使用clock_gettime
。所以,我写了下面的代码(可以吗,它真的是测量墙壁时间,而不是cpu时间吗?我问,因为我找到了一个网页: http: //nadeausoftware.com/articles/2012/03/c_c_tip_how_measure_cpu_time_benchmarking#clockgettme它说clock_gettime
测量cpu时间的地方......)真相是什么,我应该用哪个来测量墙壁时间?
另一个问题是关于 cpu 时间的。我找到了clock
很好的答案,所以我也为它写了一个示例代码。但这不是我真正想要的,因为我的代码显示了 0 秒的 cpu 时间。是否可以更精确地测量 CPU 时间(以秒为单位)?感谢您的帮助(目前,我只对 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 测试 -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