+ -
当前位置:首页 → 问答吧 → rdtsc问题求教

rdtsc问题求教

时间:2010-11-28

来源:互联网

在Intel/Windows平台下,使用rdtsc返回的周期数和使用API QueryFormanceCounter返回的周期数是差不多相同的(执行顺序的关系才有差异),因此可以使用rdtsc配合QueryFormanceFrequency得到系统运行的时间(要求不能使用API QueryFormanceCounter).
  然而同样的代码,在AMD/Window平台下(Athlon X4),使用rdtsc返回的值和QueryFormanceCounter的值差异却非常大,差了1000多倍,看起来没有明显的规律,同时在AMD平台下,使用QueryFormanceFrequency得到的值似乎不是CPU的频率,而是一个很小的值,和频率差很大,2个平台下都是多核的,都使用了SetThreadAffinityMask到第一个核心,总之在AMD平台下,QueryFormanceFrequency配合QueryFormanceCounter能得到系统运行的时间,然而使用rdtsc时间就会乱掉,不知道API针对AMD的cpu做了什么特殊处理 现在真心请教下AMD平台下如何使用rdtsc配合QueryFormanceFrequency得到系统运行时间 感激不尽

作者: jnnpsubm   发布时间: 2010-11-28

有些cpu会自动降频节能,所以rdtsc测得可能不准。

一种解决办法是,将主线程优先级提至最高,然后使cpu满载,比如

for(;;) 

然后新开测试线程测试。

作者: mydo   发布时间: 2010-11-29

谢谢回复 但是应该不是降频造成的 降频QueryFormanceCounter也会下降了 主要是Intel下QueryFormanceCounter和rdtsc符合 为何在AMD平台下差异却那么大 不管怎么样我试了你提供的方法 还是一样的

作者: jnnpsubm   发布时间: 2010-11-29