我时间需要多长时间做了三种不同类型的搜索,顺序,递归二进制和迭代二元的。 我有那些不到位,它遍历并完成搜索。 我的问题是,当我计时他们,我得到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;
在过去的两年我得到1000
和0
。
难道我做错了什么吗? 或者是在我的搜索对象?
clock()
是不准确的计时器,并且它只是不进行定时短的间隔工作。
Ç说时钟返回实现最好的近似,因为仅涉及程序调用实现定义的时代的开始程序使用的处理器时间。
如果两者之间连续的时钟叫你计划花费较少的时间比时钟功能,一个团结,你可以得到0.1 POSIX clock
定义与团结CLOCKS_PER_SEC
为1000000
(单位为1微秒)。
( http://pubs.opengroup.org/onlinepubs/009604499/functions/clock.html )
为了测量在x86 / x64时钟周期就可以使用装配中检索的CPU时间戳计数器寄存器的时钟数rdtsc
。 (可通过内联组装实现?)请注意,它返回的时间戳,而不是经过的秒数。 所以,你需要获取CPU频率为好。
但是,要获得准确的时间,以秒为最佳方法取决于你的平台上。
综上所述,这是几乎不可能实现的计算以及打印clock_t
准确时间(秒)。 你可能想看看这个 #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/