Cod*_*der 1 c c++ linux timing
我有以下代码片段,我正在尝试评估CPU占用的时间
但是我得到了一些奇怪的结果
struct timeval begin, end;
double cpu_time=0.0;
gettimeofday(&begin, NULL);
long cpu_sum = 0;
for (i = 0; i < size; i++) {
cpu_sum += array[i] * array[i];
}
gettimeofday(&end, NULL);
cpu_time = end.tv_sec - begin.tv_sec * 1000;
cpu_time += (end.tv_usec - begin.tv_usec) / 1000;
printf("calculated sum: %d using CPU in %lf ms \n", cpu_sum, cpu_time);
Run Code Online (Sandbox Code Playgroud)
样本结果= 1296217442.000000毫秒
我不认为这是ms的正确时间值.任何人都可以帮忙解决这个问题吗?
任何帮助,将不胜感激.
谢谢
Aln*_*tak 13
您需要修复运算符优先级:
cpu_time = (end.tv_sec - begin.tv_sec) * 1000;
cpu_time += (end.tv_usec - begin.tv_usec) / 1000;
Run Code Online (Sandbox Code Playgroud)
在原来你乘以begin.tv_sec1000,然后从中减去end.tv_sec;
此外,不是gettimeofday()衡量"挂钟时间",而不是严格的CPU时间,后者是衡量该过程"CPU工作量"的更好指标.如果另一个进程与您同时使用CPU,则结果将不准确.
对于"正确"的CPU时间,您应该使用(POSIX标准)getrusage()系统调用.