我正在尝试通过以毫秒为单位测量实际经过时间与以毫秒为单位的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时间的概念?
答案 0 :(得分:4)
简而言之:
如果您有一个以上的CPU,则它们的时间加起来,例如,以1秒的实时时间,您可以使用4秒的CPU时间。
cppreference在std::clock
上的文档明确区分了挂钟和cpu时间:
[...]如果CPU由其他进程共享,则std :: clock时间可能比挂钟慢。另一方面,如果当前进程是多线程的,并且有多个执行核心可用,则std :: clock时间可能比挂钟快。
有关更多详细信息,请参见here。