'clock()' 给出通常的时钟而不是 CPU 时钟
`clock()` gives usual clocks instead of CPU clocks
我曾经花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()
不可靠还是我在这里错过了什么?
是的,它在Windows上坏了。
时钟函数在进程启动期间显示自 CRT 初始化以来经过了多少挂钟时间。请注意,此函数并不严格符合 ISO C,后者将净 CPU 时间指定为返回值。若要获取 CPU 时间,请使用 Win32 获取进程时间函数。
(摘自Microsoft clock
文档)
相关文章:
- 在C++/Linux中设置单调时钟的一些技巧
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 从文本文件中读取时钟时间和事件时间并进行处理
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 用时钟测量程序的运行时间
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 如何禁用 CPU 的无序执行
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 分别测量每个线程上花费的 CPU 时间(C++)
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- 如何在C++中为高分辨率时钟声明变量?
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 'clock()' 给出通常的时钟而不是 CPU 时钟
- 测量CPU时钟速度
- 如何获得进程在windows内核模式下使用的CPU时钟周期
- 二叉搜索真的是在 0 时钟 CPU 时间内执行的吗?
- 找出CPU时钟频率(每个核心,每个处理器)
- 在现代x86_64 CPU上进行AVX/SSE幂运算需要多少时钟周期?