X86中的RDTSC指令
2010-07-10 11:29
477 查看
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上运行。
inline unsigned __int64 GetCycleCount() { _asm _emit 0x0f _asm _emit 0x31 }
不难想象,如果我们取两次,再求得两次的差值,则可以统计出时间间隔。若要将这个计数器转换到现实的时间,则只需要除以CPU的时钟频率即可。
上面的内容是《WINDOWS图形编程》上看到的,由于其历史久远,于是我在网上查了一下关于RDTSC指令,想看看他的发展前景,不料找到了一篇关于他的不好消息。
《多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间》 http://blog.csdn.net/Solstice/archive/2010/01/16/5196544.aspx 上面分析了几点原因,个人认为讲得比较好。
不过,出于好奇的心态,你完全可以无视上面的文章,而继续用上面写出的函数写一个“高精度”的Timer,的确,它是高精度的。 如果你想看看多核与单核的影响,最好写一个多线程的测试程序,然后通过控制每个线程的CPU亲缘性------即让它们全部在一个CPU上运行,或者让他们分发到不同的CPU上运行。
相关文章推荐
- 多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间 Options
- X86中的RDTSC指令
- 多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间
- 多核时代不宜再用x86的RDTSC指令测试指令周期和时间
- 多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间
- 多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间
- 多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间 Options
- X86 XCHG指令详解
- x86 arch 指令学习
- x86 汇编 之 指令基础 (AT&T格式 / Linux)
- X86 指令速查
- 深入理解计算机系统(4.1)---X86的孪生兄弟,Y86指令体系结构
- RDTSC指令 用于anti debug
- x86系统执行的第一条指令
- 原子操作与 x86 上的 lock 指令前缀
- 利用Windows异常处理和RDTSC指令反调试学习
- 汇编指令 - RDTSC
- 汇编-x86指令查看
- Ubuntu下查看是pple64位还是x86_64 fcitx的指令安装
- X86的孪生兄弟,Y86指令体系结构