如何粗略计算和打印clock_t时间

时间:2013-02-17 02:31:06

标签: c++ clock ctime cpu-speed

我计算了三种不同类型的搜索,顺序,递归二进制和迭代二进制所需的时间。我有这些,它会迭代并完成搜索。我的问题是,当我为它们计时时,我每次都得到0,即使我制作了一个100,000的数组,我也要搜索不在数组中的东西。如果我在搜索中设置了一个断点,它显然会使时间更长,并且它给了我一个合理的时间,我可以使用。但是否则总是为0.这是我的代码,对于所有三个搜索定时器都是类似的。

 clock_t recStart = clock();
 mySearch.recursiveSearch(SEARCH_INT);
 clock_t recEnd = clock();
 clock_t recDiff = recEnd - recStart;
 double recClockTime = (double)recDiff/(double)CLOCKS_PER_SEC;
 cout << recClockTime << endl;

 cout << CLOCKS_PER_SEC << endl;

 cout << recClockTime << endl;

对于最后两个,我得到10000

我在这里做错了吗?或者它在我的搜索对象中?

2 个答案:

答案 0 :(得分:3)

clock()不是一个准确的计时器,它只是不适合短时间间隔。

C表示,自实时定义的时代开始以来,clock 返回实现对程序使用的处理器时间的最佳近似值。

如果在两个连续的时钟调用之间,程序花费的时间少于时钟函数的一个整数,则可以得到0. POSIX clockCLOCKS_PER_SEC的统一定义为1000000(统一)然后是1微秒。

http://pubs.opengroup.org/onlinepubs/009604499/functions/clock.html

要测量x86 / x64中的时钟周期,可以使用汇编来检索CPU时间戳计数器寄存器rdtsc的时钟计数。 (可以通过内联汇编来实现吗?)请注意,它返回时间戳,而不是经过的秒数。所以你也需要检索cpu频率。

但是,以秒为单位获得准确时间的最佳方法取决于您的平台。


总而言之,几乎不可能以秒为单位计算和打印clock_t时间准确。您可能希望在Stackoverflow上看到this以找到更好的方法(如果准确性是最高优先级)。

答案 1 :(得分:2)

clock()只是没有足够的解决方案 - 这是关于该主题的一个很好的讨论/博客 http://www.guyrutenberg.com/2007/09/10/resolution-problems-in-clock/

我认为两个选项要么使用clock_gettime,要么考虑使用OProfileCodeAnalyst

我个人更喜欢使用工具 - OProfile很好。我之前没有使用CodeAnalyst - 然后是Valgrind和gprof。

如果您坚持使用clock_gettime - 请检查一下 http://www.guyrutenberg.com/2007/09/22/profiling-code-using-clock_gettime/