我以前用clock()
来获取算法的CPU时间。但是,它似乎不再起作用。我有一个带有8个CPU的Windows 10 VM,如资源监视器中所示。
现在,我这样测量时间:
auto startTime = std::chrono::high_resolution_clock::now();
auto startClocks = std::clock();
// some code with TBB that uses multiple threads
auto endTime = std::chrono::high_resolution_clock::now();
auto endClocks = std::clock();
auto duration = endTime - startTime;
auto clockDuration = endClocks - startClocks;
auto durationSeconds = static_cast<double>(std::chrono::duration_cast<std::chrono::milliseconds>(duration).count()) / 1000.;
auto durationCpuSeconds = 1. * clockDuration / CLOCKS_PER_SEC;
TBB部分肯定可以正常工作,正如我在Windows的资源监视器中看到的那样,所有CPU都可以100%工作。如果我开始不进行并行化的无限循环,则CPU使用率仅达到预期的12.5%。
但是,durationSeconds
和durationCpuSeconds
完全相同...
我已经用手表测量了时间,结果就是墙上的时间。因此,clock()
显然没有显示CPU时间,在8个CPU 100%并行工作的情况下,CPU时间应该明显更长。 clock()
不可靠还是我在这里遗漏了一些东西?
答案 0 :(得分:6)
是的,在Windows上已损坏。
时钟功能可以告诉您自进程启动以来CRT初始化以来已经过去了多少个挂钟时间。请注意,此函数不严格符合ISO C,后者将净CPU时间指定为返回值。要获取CPU时间,请使用Win32 GetProcessTimes函数。