首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是高分辨率性能计数器?

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

Stack Overflow用户
提问于 2011-12-07 19:42:49
回答 2查看 1.7K关注 0票数 5

在Win32应用编程接口中,有一个函数QueryPerformanceCounter,用于查询一个非常高精度的性能计时器的值。

什么是“高精度性能定时器”?它受硬件支持吗?哪些系统不支持它?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-07 19:45:27

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

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

在当前和上一代cpu上,RDTSC通常是可靠和独立于时钟的(即,它现在真正测量时间),在上一代cpu上,特别是在移动或一些多cpu平台上,RDTSC并非如此。“计时器”可能会加速和减速,甚至在不同的CPU上会有所不同,从而导致“时间旅行”。

RDTSC: cpuid(0x80000007)中的constant tsc标志可以用来判断是否可靠(尽管这并不能真正解决问题,因为如果它不可靠,如果没有替代方案,该怎么办...)。

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

票数 5
EN

Stack Overflow用户

发布于 2011-12-07 19:44:58

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

与此相比,GetTickCount()的精度约为16ms。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8414734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档