什么是高分辨率性能计数器?

时间:2011-12-07 11:42:49

标签: winapi hardware

在Win32 API中有一个函数QueryPerformanceCounter,用于查询高分辨率性能计时器的值。

什么是“高分辨率演奏计时器”?它是否受硬件支持?什么系统不支持它?

2 个答案:

答案 0 :(得分:5)

在Windows 7的现代处理器上,这是CPU(HPET)内部可靠的高精度(纳秒)计时器。

在以前的版本和前几代处理器中,它是“某种东西”,几乎可以意味着任何。最常见的是,它是RDTSC指令返回的值(或非x86上的等效值),它可能是也可能不是可靠的,与时钟无关。请注意,RDTSC(最初,根据定义,但现在不再是)不测量时间,它测量周期

在当前和上一代CPU上,RDTSC通常可靠且与时钟无关(即现在真正测量时间), pre - 上一代特别是在移动设备或某些多CPU设备上,它不是。 “定时器”可以加速和减速,甚至在不同的CPU上也不同,导致“时间旅行”。

编辑: cpuid(0x80000007)中的constant tsc标志可用于判断RDTSC是否可靠(虽然这并不能解决问题,因为如果这样做怎么办?如果没有替代方案,那就不是了。)。

在较旧的系统(例如,8-10岁)上,其他一些计时器可用于QueryPerformanceCounter。那些可能根本没有高分辨率,也不是非常准确。

答案 1 :(得分:1)

高分辨率性能计数器通常从rdtsc指令中提取,这是一种x86特定的方式来获取自引导以来发生的CPU节拍数。它的值非常精确,通常精度低至100ns。

将此与GetTickCount()进行比较,其准确度约为16毫秒。

在其他体系结构(超出Win32 API范围,因为它们仅在基于x86的指令集上运行)上,可能有不同的方法。例如,在ARM上,您可以使用系统控制协处理器(CP15)执行类似的操作。