我正在尝试使用以下代码来测量CPU时间。
timespec time1, time2, temp_time;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
int i;
int cpu_sum = 0;
for (i = 0; i < nelements; i++) {
cpu_sum += array[i];
}
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
temp_time.tv_sec = time2.tv_sec - time1.tv_sec;
printf( sum: %d using CPU in %lf ms \n",cpu_sum, temp_time.tv_sec);
但是我总是得到0.000ms的时间
知道这里有什么问题。
任何帮助,将不胜感激。
谢谢
最佳答案
printf
(time_t
,可能是long
,而不是double
)来调用未定义的行为。 tv_sec
仅包含部分时间的全部秒数。您还需要使用tv_nsec
来获得纳秒部分。 尝试类似:
temp_time.tv_sec = time2.tv_sec - time1.tv_sec;
temp_time.tv_nsec = time2.tv_nsec - time2.tv_nsec;
if (temp_time.tv_nsec < 0) {
temp_time.tv_nsec += 1000000000;
temp_time.tv_sec--;
}
printf("%lld.%.9ld\n", (long long)temp_time.tv_sec, (long)temp_time.tv_nsec);
关于c++ - CPU时间始终为零:(,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10393093/