我曾经使用clock()
来获取算法的CPU时间,但现在好像不起作用了。我有一个 Windows 10 虚拟机,资源监视器中也可以看到它有8个CPU。
现在,我是这样测量时间的:
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%并行工作。难道“clock()”不可靠,还是我漏掉了什么?
duration
转换为“双精度秒数”:auto durationSeconds = std::chrono::duration<double>{duration}.count();
- Howard Hinnanthigh_resolution_clock
获取的时间(通常是纳秒)转换为基于double的秒数。 - Howard Hinnant