我正在尝试使用以下代码来测量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/

    10-09 15:45