X86中的RDTSC指令

IntelX86中的RDTSCRead Time Stamp Counter 读取时间计数器的指令。这个指令读取CPU时间计数器,返回一个无符号的64位整数。它通过EDX EAX寄存器返回CPU被引导后,时钟所走的圈数。这意味着,你可以用它来计算时间间隔了多久。但是,由于这个指令还未被VC++采用,于是如果想要使用它,则必须用_emit伪指令嵌入它的OPCODE  0x0f 0x31。 于是可以写出一个取得时间计数器的代码如下

不难想象,如果我们取两次,再求得两次的差值,则可以统计出时间间隔。若要将这个计数器转换到现实的时间,则只需要除以CPU的时钟频率即可。

 

上面的内容是《WINDOWS图形编程》上看到的,由于其历史久远,于是我在网上查了一下关于RDTSC指令,想看看他的发展前景,不料找到了一篇关于他的不好消息。

 《多核时代不宜再用 x86 RDTSC 指令测试指令周期和时间》 http://blog.csdn.net/Solstice/archive/2010/01/16/5196544.aspx 上面分析了几点原因,个人认为讲得比较好。

 

不过,出于好奇的心态,你完全可以无视上面的文章,而继续用上面写出的函数写一个“高精度”的Timer,的确,它是高精度的。 如果你想看看多核与单核的影响,最好写一个多线程的测试程序,然后通过控制每个线程的CPU亲缘性------即让它们全部在一个CPU上运行,或者让他们分发到不同的CPU上运行。

posted @ 2010-07-10 11:29  麒麟子MrKylin  阅读(1295)  评论(0编辑  收藏  举报