X86中的RDTSC指令
Intel的X86中的RDTSC即Read 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上运行。
作者:麒麟子
出处:http://www.cnblogs.com/qilinzi/
蛮牛专栏:麒麟子
简介:麒麟子,编程15年,科技创始人,技术作家。
09年进入游戏行业,16年创立成都幼麟科技有限公司。十年从业经验练就了游戏全栈技能,目前专注于手机游戏领域。
版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。