【发布时间】:2014-10-01 12:34:11
【问题描述】:
我正在使用 C++ 和 OpenMP 编写一个应用程序,我想可靠地(并且正确地)测量它的部分执行时间。我查看了一些选项(Windows、TDM-GCC x64 4.8.1):
-
omp_get_wproc和clock似乎可以完成这项工作,但文档(与实际行为直接矛盾)说它们测量给定进程消耗的总时间资源(即,例如,两个工作线程的一秒计为两秒)。 “正确”的行为是不是我想要的, -
time/difftime分辨率不够, -
GetProcessTime(WinAPI) 做时钟应该做的事情,并且是特定于平台的, -
QueryPerformanceCounter(WinAPI) 似乎是可行的方法,但它是特定于平台的, - C++11
high_resolution_clock工作正常,但它是新标准的一部分。
我的问题主要是:从事科学计算的人是如何做到这一点的,为什么要这样做?而且,clock 的行为是我的标准库实现中的错误还是太流行的误解?
编辑: 小解释:我对使用 C++11 有点犹豫,因为我可能会在带有一些旧软件的集群上运行我的代码。
【问题讨论】:
-
W.r.t 新标准和
high_resolution_clock是与 C++03 兼容所需的代码吗? -
你也可以看看 boost::chrono,它为当前可用的任何东西提供了一个方便的包装器。
-
对,我实际上已经查看了 boost::chrono,发现对于 Windows,它实际上使用了 QueryPerformanceCounter
标签: c++ multithreading performance