如何在英特尔处理器上获得准确的高精度时间戳

时间:2009-09-04 12:47:38

标签: timestamp

可以使用RDTSC(读取时间戳计数器),但在进行动态时钟调整的较新处理器上,返回的时钟周期数不会反映精确的持续时间。我认为可以禁用动态时钟调整,但是在像Nehalem这样的新处理器上,任何加速优势都会丢失。是否有任何高精度固定频率计数器可用于亚微秒时间测量?

2 个答案:

答案 0 :(得分:2)

曾几何时,我看到有人使用原子钟对内核代码进行基准测试。他可以选择时钟响起的线路,时钟会记录时间。这种方法的明显缺点是它需要额外的(相当昂贵的)硬件,但这可能是也可能不是问题。

答案 1 :(得分:1)

好问题。这是一个公认的问题。

“解决方案”应该是HPET(高精度事件计时器),它将/可能包含在您系统的处理器/芯片组中。它的运行频率介于10 MHz和500 MHz之间。

在Windows上,QueryPerformanceCounter()使用可用的最佳源。所以这意味着HPET如果可用,RDTSC或其他来源,如果没有。告诉(我知道)的唯一方法是计算其频率并推断出来源。

More info here...这应该很简单!!

另一个有用的信息是,虽然GetSystemTimeAsFileTime()(以及其他win32方法)会给你分辨率,如果你连续快速调用它(< ~15mS)它将会由于内核更新它的方式返回相同的结果...