时钟精度()



我看过很多关于使用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()函数的输出,以便这种划分产生正确的壁钟时间?

你的问题的答案是肯定的。

在这种情况下,

clock()指的是一个时钟,而不是一个CPU时钟,所以乍一看可能会产生误导。对于我见过的所有机器和编译器,它都以毫秒为单位返回时间,因为我从未见过CLOCKS_PER_SEC不是1000的情况。因此clock()的精度被限制在毫秒级,通常精度略低。

如果您对实际的周期感兴趣,这可能很难获得。rdtsc指令将允许您访问CPU启动时的"伪"周期数。在较旧的系统(如Intel Core 2)上,这个数字通常与实际的CPU频率相同。但在较新的系统上,它不是。

要获得比clock()更精确的计时器,您将需要使用硬件性能计数器-这是特定于操作系统的。这些是使用上一段中的'rdtsc'指令在内部实现的。

最新更新