解决一个问题通常有多种方法, 我们总想找到最高效的,所以需要对比不同算法执行所用的时间。可惜的是,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主频相对应的直接关系。。。 但是由于精度高,得到的数字浮动比较大。。
原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/database/62/11805062.shtml
分享到:
相关推荐
总结了常用的四种方法。包括: 方法一 利用 SYSTEMTIME 方法二 利用 GetTickCount()函数 方法三 使用clock()函数 方法四 获取高精度时间差 个人感觉还是很清晰明了的。希望对大家有用。
总结了常用的四种方法。包括: 方法一 利用 SYSTEMTIME 方法二 利用 GetTickCount()函数 方法三 使用clock()函数 方法四 获取高精度时间差 个人感觉还是很清晰明了的。希望对大家有用。
用于代码测试性能,可以得出代码执行时间,以便优化代码 可以获得纳秒级别的时间差 //时 //分 //秒 //纳秒 //微妙 //毫秒
6 要获取高精度时间,可以使用 BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency) 获取系统的计数器的频率 BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount) 获取计数器的值 然后用两次...
内容索引:VC/C++源码,系统相关,毫秒,计时 vc++ 毫秒计时,高精度时间统计,能算出两点间的毫秒时间差,以前发布过相似的实例,有兴趣的朋友比较一下有何不同。
由于不使用傅里叶变换,减少了运算时间,既可以用于高空间频率条纹,也可以用于稀疏平行条纹,以及任意花样的条纹。在衬比度因子确定后,用这种方法就能够直接在空域内确定两幅条纹图之间的相移量,通过大量采样点进行统计...
的高精度算法》 ## 2002 戴德承 -《退一步海阔天空——"目标转化思想"的若干应用》 方 奇 -《浅谈必要条件的应用》 符文杰 -《排序网络》 何江舟 -《用高斯消元法解线性方程组》 何 林 -《猜想及其应用》...
该系统将输差检漏技术与负压波定位技术 相结合,用 GPS解决分布系统的采样时间同步问题,用小波变换解决被噪声污染信号的特征点提 取问题,并将现场运行工况在屏幕上形象直观地显示出来。该系统应用数据库技术,实现运行...
答:在单片机开发中,主要是汇编和C,没有用C++的。 3. 搞单片机开发,一定要会C吗? 答:汇编语言是一种用文字助记符来表示机器指令的符号语言,是最接近机器码的一种语言。其主要优点是占用资源少、程序...
AD:24位高精度HX711 内码:0.01克/3 精度:0-50克误差0.10 50-500克误差0.50克 预热时间:1min 称重范围0-600g 放大方式:全桥差分 实测参数及误差 砝码标值标准电子秤数值简易电子秤数值误差 109.910.050.15 5049.850....