CPU时间测量

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()系统调用.