小俊的数字人生 https://bbs.21ic.com/?293300 [收藏] [复制] [RSS]

日志

RDTSC在多核处理器上使用的问题

已有 2766 次阅读2009-12-14 16:14 |个人分类:C/C++|系统分类:兴趣爱好| RDTSC, 多核

RDTSC汇编指令用于程序的精确定时。原理是CPU从上电开始,其内部一个64位计数器就会记录下CPU所经过的周期数,RDTSC指令可以读取该计数器到寄存器EDX:EAX中。理论上计数精度可以达到纳秒级别。


不过在多核CPU平台上使用时发现,两个CPU核的内部计数器不同步。如果程序两次读取这个计数器的时候恰好被轮换到不同的核上,那么用来计时就会有比较大的误差。


解决方法可以采用设定线程亲核性的方法。函数SetThreadAffinityMask可以指定某线程只在某些核上运行(由第二个参数设定,每个位代表一个核)。例如,在需要调用RDTSC的那个线程里执行SetThreadAffinityMask(GetCurrentThread(), 0x00000001);就能保证该线程只在第一个核上运行,不会因为两个核的RDTSC计数器不同步而造成计时误差。


 


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (2 个评论)

Stephy 2009-12-22 13:12
你终于update了~~~等到颈都长埋啊·~~[emot]12[/emot]
回复 licheng 2010-1-12 07:00
你好 我想做一个无线USB,具体就是利用无线网络实现USB传输,可是怎么样做一个虚拟的usb与操作系统对话,API没找到相应的函数。