AMD和Intel实施RDTSC的最新CPU似乎是恒定速率计数器,避免了由于TurboBoost或节省设置之类的频率更改而引起的问题。

由于RDTSC比QueryPerformanceCounter更适合性能测量,因为它的开销要低得多,因此我想尽可能使用它。

如何可靠地检测RDTSC是否是恒定速率计数器?

有帮助吗?

解决方案

您可以使用 CPUID 告诉你。从 文档 在CPUID上FN8000_0007_EDX位8:

TSCINVARIANT:TSC不变. 。 TSC速率确保在所有P州,C州和停止赠款过渡(例如STPCLK节流网络)中不变;因此,TSC适合用作时间源。 0 =没有做出这样的保证,软件应避免尝试将TSC用作时间源。

其他提示

我知道自从最初的问题被问到以来已经很长时间了,但是我可以指出,检查处理器的生成/模型绝对是错误的事情。首先,将代码弄错很容易,因此它不适用于未来一代处理器(因为家庭/型号并不总是“线性”),其次,仅仅是因为处理器是后来的”家庭/模型“比您知道的工作,这并不能保证该功能在那里。很可能,但是我已经看到很多代码做得不好,因此“新处理器出来了,并且代码弄错了问题”。

使用CPUID位检查处理器是否具有正确的位。

只是使用 CPUID 检测 CPU的产生, ,看看它是否使用恒定计数器。但是,我建议使用分析API,而是像AMD的Codeanalyst SDK这样的事情会做得很好

我确实在一秒钟内计算了o滴的数字o,然后与 /proc /cpuinfo的知情时钟进行比较。它仅适用于禁用的动态时钟。请参阅来源: https://github.com/petersenna/rdtscbench

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top