我见过很多关于使用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()函数的输出是否以某种方式缩放,以便该divison产生正确的挂钟时间?
答案 0 :(得分:2)
你的问题的答案是肯定的。
在这种情况下, clock()
指的是一个挂钟而不是一个CPU时钟,因此乍一看它可能会产生误导。对于我见过的所有机器和编译器,它返回的时间以毫秒为单位,因为我从未见过CLOCKS_PER_SEC
不是1000的情况。所以clock()
的精度限制为毫秒,精度通常略低。
如果您对实际周期感兴趣,可能很难获得。
rdtsc
指令将允许您从CPU启动时访问数字“伪”循环。在旧系统(如Intel Core 2)上,此数字通常与实际CPU频率相同。但在较新的系统上,它不是。
要获得比clock()
更准确的计时器,您需要使用特定于操作系统的硬件性能计数器。这些是使用上一段中的'rdtsc'指令在内部实现的。