实时与CPU时间性能指标

时间:2019-06-04 13:41:09

标签: c++ chrono measure ctime cpu-time

我正在尝试通过以毫秒为单位测量实际经过时间与以毫秒为单位的cpu时间来在c ++中执行一些性能度量。 这是我的代码的样子:

auto start = std::chrono::high_resolution_clock::now();
unsigned begin = clock();

// some computationally expensive task

auto finish = std::chrono::high_resolution_clock::now();
unsigned end = clock();

(finish - start).count();

int duration = std::chrono::duration_cast<std::chrono::milliseconds>(finish - start).count();
int cpu_duration = 1000*(end - begin)/(CLOCKS_PER_SEC);

现在,我希望CPU时间值小于系统时间,因为线程可能会中断。但是,CPU时间是实时时间的2-3倍。 我做错了什么还是我误解了CPU时间的概念?

1 个答案:

答案 0 :(得分:4)

简而言之:

  • 实时:用墙上的正常时钟测量的时间
  • cpu-time:CPU繁忙的总时间

如果您有一个以上的CPU,则它们的时间加起来,例如,以1秒的实时时间,您可以使用4秒的CPU时间。

cppreference在std::clock上的文档明确区分了挂钟和cpu时间:

  

[...]如果CPU由其他进程共享,则std :: clock时间可能比挂钟慢。另一方面,如果当前进程是多线程的,并且有多个执行核心可用,则std :: clock时间可能比挂钟快。

有关更多详细信息,请参见here