程序执行时间计数器
Programme execution time counter
在C++中计算运行时间的最准确方法是什么?我用clock()来计算这个,但我觉得这是错误的,因为我90%的时间是0毫秒,其余的时间是15毫秒,这对我来说没有什么意义
即使它真的很小,非常接近0毫秒,有没有更准确的方法可以给我确切的值,而不是向下舍入0毫秒?
clock_t tic = clock();
/*
main programme body
*/
clock_t toc = clock();
double time = (double)(toc-tic);
cout << "nTime taken: " << (1000*(time/CLOCKS_PER_SEC)) << " (ms)";
感谢
对于C++11,我会使用
#include <chrono>
auto t0 = std::chrono::high_resolution_clock::now();
...
auto t1 = std::chrono::high_resolution_clock::now();
auto dt = 1.e-9*std::chrono::duration_cast<std::chrono::nanoseconds>(t1-t0).count();
以秒为单位的经过时间。
对于2011年以前的C++,您可以在windows上使用QueryPerformanceCounter()
,也可以在linux/OSX上使用gettimeofday()
。例如(这实际上是C,而不是C++):
timeval oldCount,newCount;
gettimeofday(&oldCount, NULL);
...
gettimeofday(&newCount, NULL);
double t = double(newCount.tv_sec -oldCount.tv_sec )
+ double(newCount.tv_usec-oldCount.tv_usec) * 1.e-6;
以秒为单位的经过时间。
std::chrono::high_resolution_clock
是一个尽可能便携的解决方案,但它实际上可能不会比您已经看到的分辨率更高。
每当计时器中断处理程序更新系统时间时,几乎任何返回系统时间的函数都会向前跳,10ms是现代操作系统的典型间隔。
为了获得更好的精确计时,您需要访问CPU周期计数器或高精度事件计时器(HPET)编译器库供应商应该将它们用于high_resolution_clock
,但并非所有供应商都这样做。因此,您可能需要特定于操作系统的API。
(注意:特别是Visual C++high_resolution_clock
使用低分辨率系统时钟。但可能还有其他时钟。)
例如,在Win32上,QueryPerformanceFrequency()
和QueryPerformanceCounter()
函数是一个不错的选择。有关符合C++11定时器接口并使用这些函数的包装器,请参阅
- Mateusz回答"std::system_clock和std::steady_lock之间的区别?"
如果您有C++11可用,请使用chrono库。
此外,不同的平台提供了对高精度时钟的访问。
例如,在linux中,使用clock_gettime。在Windows中,使用高性能计数器api。
示例:
C++11:
auto start=high_resolution_clock::now();
... // do stuff
auto diff=duration_cast<milliseconds>(high_resolution_clock::now()-start);
clog << diff.count() << "ms elapsed" << endl;
- 简单C++"Hello World"程序的执行时间长
- 我使用 OpenMP 的线程越多,执行时间就越长,这是怎么回事?
- 为什么切换 for 循环的顺序会显著改变执行时间?
- cmd.exe与Powershell中C++程序的不同执行时间
- pthread执行时间比顺序执行时间差
- OpenCV 函数 cv::remap() 的执行时间更长,当程序在两者之间进入睡眠状态时
- 为什么 std::chrono 在测量循环和编译器优化的并行 OpenMP 的执行时间时不起作用?
- 我需要帮助来缩短检索 SSL 证书的执行时间
- 如何测量cudaMalloc执行时间
- c++中的执行时间和检查流状态
- 为什么for循环中的异步不能提高执行时间
- 为什么 C++ openMP 程序执行时间更长
- 测量任何 Windows 可执行文件的内存使用情况和执行时间
- 需要减少我的C++代码的执行时间
- 如何在 ubuntu 上的 php 脚本中获取程序(c,c++,java,python,php)的执行时间和内存使用量?
- 在Qt中设置pixmap时的执行时间很奇怪
- 异步控制线程执行时间
- 如何对 g++ 设置执行时间限制?
- 测量 std::系统的实际执行时间(以 C++ 为单位)
- 程序执行时间计数器