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



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

什么是"高分辨率性能计时器"?它有硬件支持吗?哪些系统不支持它?

在当前一代处理器上的Windows 7下,这是CPU(HPET(内可靠的高精度(纳秒(计时器。

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

在当前和上一代cpu上,RDTSC通常是可靠的且与时钟无关的(即,它现在是真正的测量时间(,在上一代上,尤其是在移动或一些多cpu设备上,它不是。"计时器"可能会加速和减速,甚至在不同的CPU上会有所不同,从而导致"时间旅行"。

编辑:cpuid(0x80000007(中的constant tsc标志可用于判断RDTSC是否可靠(尽管这并不能真正解决问题,因为如果不可靠,如果没有其他选择,该怎么办…(。

在较旧的系统(如8-10年前的系统(上,QueryPerformanceCounter可能会使用一些其他计时器。这些可能既没有高分辨率,也不是非常准确。

高分辨率性能计数器通常从rdtsc指令中提取,这是一种特定于x86的方法,用于获取自启动以来发生的CPU节拍数。它的值非常精确,通常精确到100ns。

将其与GetTickCount()进行比较,后者的精度约为16ms。

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

最新更新