• 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上运行。

  • 相关阅读:
    Git常用命令
    Shell脚本学习
    Shell脚本学习
    Shell脚本学习
    Git ignore文件的用法
    RSA非对称加密算法
    C++ 标准库中的堆(heap)
    EM(Entity FrameWork)- code first , using in Visual stdio 2017
    C# 图片文字识别
    C# 调 C++ DLL 托管代码中释放非托管函数分配的内存
  • 原文地址:https://www.cnblogs.com/qilinzi/p/1940479.html
Copyright © 2020-2023  润新知