如何计算和打印大致时间clock_t表示(How to calculate and print cl

2019-10-17 17:06发布

我时间需要多长时间做了三种不同类型的搜索,顺序,递归二进制和迭代二元的。 我有那些不到位,它遍历并完成搜索。 我的问题是,当我计时他们,我得到0所有的人每一次的,即使我做10万的数组,我有搜索阵列没有的东西。 如果我设置在搜索一个破发点这显然使得时间更长,它给了我一个合理的时间,我可以工作。 但除此之外,它始终是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

难道我做错了什么吗? 或者是在我的搜索对象?

Answer 1:

clock()是不准确的计时器,并且它只是不进行定时短的间隔工作。

Ç说时钟返回实现最好的近似,因为仅涉及程序调用实现定义的时代的开始程序使用的处理器时间。

如果两者之间连续的时钟叫你计划花费较少的时间比时钟功能,一个团结,你可以得到0.1 POSIX clock定义与团结CLOCKS_PER_SEC1000000 (单位为1微秒)。

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

为了测量在x86 / x64时钟周期就可以使用装配中检索的CPU时间戳计数器寄存器的时钟数rdtsc 。 (可通过内联组装实现?)请注意,它返回的时间戳,而不是经过的秒数。 所以,你需要获取CPU频率为好。

但是,要获得准确的时间,以秒为最佳方法取决于你的平台上。


综上所述,这是几乎不可能实现的计算以及打印clock_t 准确时间(秒)。 你可能想看看这个 #2找到一个更好的方法(如果精度是首要任务)。



Answer 2:

clock()根本就没有足够的分辨率-这里是该主题的一个很好的讨论/博客http://www.guyrutenberg.com/2007/09/10/resolution-problems-in-clock/

我觉得两个选择要么使用clock_gettime甚至更好的你有没有考虑使用OProfile的或CodeAnalyst ?

我个人更喜欢使用工具 - OProfile的好。 我没有用之前CodeAnalyst - 再有就是Valgrind的和gprof。

如果你坚持使用clock_gettime -请看看这个http://www.guyrutenberg.com/2007/09/22/profiling-code-using-clock_gettime/



文章来源: How to calculate and print clock_t time roughly