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得到系统运行时间 感激不尽
然而同样的代码,在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(;;)
然后新开测试线程测试。
一种解决办法是,将主线程优先级提至最高,然后使cpu满载,比如
for(;;)
然后新开测试线程测试。
作者: mydo 发布时间: 2010-11-29
谢谢回复 但是应该不是降频造成的 降频QueryFormanceCounter也会下降了 主要是Intel下QueryFormanceCounter和rdtsc符合 为何在AMD平台下差异却那么大 不管怎么样我试了你提供的方法 还是一样的
作者: jnnpsubm 发布时间: 2010-11-29
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28