zoukankan      html  css  js  c++  java
  • [转]C++中获取高精度时间差

    From: http://www.cppblog.com/guodongshan/archive/2010/10/06/128818.aspx

    解决一个问题通常有多种方法, 我们总想找到最高效的,所以需要对比不同算法执行所用的时间。可惜的是,C++中提供的方法一般只能精确到毫秒级。

    提供一种更加精确的方法。编写一个函数,可以在C++中这样写:

    __declspec (naked) unsigned __int64 GetCpuCycle( void )
    {
        _asm
        {
            rdtsc
            ret
        }
    }

    RDTSC的返回值存放在EDX EAX中, EDX为高32位,EAX为低32位。这里的 RDTSC 指令( Read Time Stamp Counter ), 获得CPU的高精度时间戳。

    这样以来我们就可以在随处获得当前的CPU自上电以来的时间周期数了:

    unsigned __int64 iCpuCycle = GetCpuCycle();

    根据这个数字我们可以计算出上电以来所经历的时间( 秒s ):

    second = iCpuCycle / CPU主频率( HZ );

    1GHZ = 1,000 MHZ = 1,000,000 KHZ = 1,000,000,000 HZ;

    获取两次作差就可以得到运行的时间了。其实没必要换算成时间,关注差值就行了。

     

    PS:

    可以放心一个unsigned __int64 不会溢出 - - 可以计算一下你的CPU能保存多少年的时间。。

    根据这一方法有几个好处: 一是精度高,二是函数调用开销最小,三是平台限制小,四是具有和CPU主频相对应的直接关系。。。 但是由于精度高,得到的数字浮动比较大。。

  • 相关阅读:
    jquery 实现点击图片居住放大缩小
    pycharm git工具与coding.net结合
    Python 小知识点(10)--异常结构记录
    Python 小知识点(9)--反射
    Python 小知识点(8)-- __new__
    @noi.ac
    @noi.ac
    @noi.ac
    @noi.ac
    @游记@ CQOI2019(十二省联考)
  • 原文地址:https://www.cnblogs.com/joeblackzqq/p/1872206.html
Copyright © 2011-2022 走看看