Ice*_*ire 3 c++ time multithreading clock c++-chrono
我过去习惯于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;
Run Code Online (Sandbox Code Playgroud)
TBB部分确实有效,正如我在Windows资源监视器中看到的那样,所有CPU都可以100%运行.如果我在没有并行化的情况下启动无限循环,则CPU使用率仅为预期的12.5%.
然而,durationSeconds并且durationCpuSeconds完全一样......
我用手表测量了时间,结果是墙上的时间.因此,clock()显然没有显示CPU时间应该大大高于8个并行工作的CPU.是clock()不可靠的还是我失去了一些东西?
是的,它在Windows上被打破了.
时钟功能表示自进程启动期间CRT初始化以来已经过了多少挂钟时间.请注意,此函数不严格符合ISO C,后者指定净CPU时间作为返回值.要获得CPU时间,请使用Win32 GetProcessTimes函数.
(来自微软的clock文档)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |