我看过很多关于使用clock()函数来确定程序中运行时间的帖子,代码类似于:
start_time = clock();
//code to be timed
.
.
.
end_time = clock();
elapsed_time = (end_time - start_time) / CLOCKS_PER_SEC;CLOCKS_PER_SEC的值几乎肯定不是每秒的实际时钟节拍数,所以我对结果有点谨慎。不用担心线程和I/O,clock()函数的输出是否以某种方式进行了缩放,以便这个除法生成正确的挂钟时间?
发布于 2011-09-03 01:03:55
你的问题的答案是肯定的。
本例中的clock()指的是挂钟,而不是CPU时钟,因此乍一看可能会产生误导。对于我见过的所有机器和编译器,它返回以毫秒为单位的时间,因为我从未见过CLOCKS_PER_SEC不是1000的情况。因此,clock()的精度被限制在毫秒,并且精度通常略低。
如果您对实际周期感兴趣,这可能很难获得。CPU指令将允许您访问rdtsc启动时的数字“伪”-cycles。在较旧的系统(如Intel Core 2)上,此数字通常与实际CPU频率相同。但在较新的系统上,情况并非如此。
要获得比clock()更精确的计时器,您需要使用硬件性能计数器-这是特定于操作系统的。这些是使用最后一段中的'rdtsc‘指令在内部实现的。
https://stackoverflow.com/questions/7286787
复制相似问题