一个简单的用于性能测算的计时器函数
2012-04-20 08:55
447 查看
我们常常采用GetTickCount函数来测量程序的运行时间,但这个东西一次变化就要15~16ms,精度太低了。后果就是想要测量出个结果你得让代码反复运行很多次。
为此,我再次想到利用rdtsc指令。利用它给出的周期值,可以保证取到非常小的时间间隔。可惜的是该值不是直接的时间表达,还需要使用者按CPU主频去换算。不过很多时候我们仅仅是想比较两种不同方案的效率高低,那就直接看它们消耗的周期多少就可以了,无需换算成时间。
利用这个新函数,我们可以对ns级的变化也非常敏感,足以应付日常测试了。但须注意最好只用于测量单线程程序运行状况,在多线程时容易得到错误结论。另外,该函数自身大约需要消耗44个周期,在测试数据较小时应该从结果中去除这个值。
使用方法:
调用calculagraph(1),设置当前周期计数为基准周期值,同时返回它与上一次的基准周期值之间的差值。
调用calculagraph(0),返回当前周期计数与上一次基准之间的差值,但不改变基准周期值。
为此,我再次想到利用rdtsc指令。利用它给出的周期值,可以保证取到非常小的时间间隔。可惜的是该值不是直接的时间表达,还需要使用者按CPU主频去换算。不过很多时候我们仅仅是想比较两种不同方案的效率高低,那就直接看它们消耗的周期多少就可以了,无需换算成时间。
利用这个新函数,我们可以对ns级的变化也非常敏感,足以应付日常测试了。但须注意最好只用于测量单线程程序运行状况,在多线程时容易得到错误结论。另外,该函数自身大约需要消耗44个周期,在测试数据较小时应该从结果中去除这个值。
使用方法:
调用calculagraph(1),设置当前周期计数为基准周期值,同时返回它与上一次的基准周期值之间的差值。
调用calculagraph(0),返回当前周期计数与上一次基准之间的差值,但不改变基准周期值。
long long calculagraph(int flag) { static long long time; long long curTime,delt; __asm { rdtsc mov dword ptr [curTime],eax mov dword ptr [curTime+4],edx } delt=curTime-time; if (flag) time=curTime; return delt; }
相关文章推荐
- 代码函数从零开始学习OpenCL开发(二)一个最简单的示例与简单性能分析
- C/C++写得一个计时器用于检查程序的处理数据性能
- 一个简单函数的是如何运行的
- 一个简单函数的反汇编
- [VBA]用一个简单例子说明如何在Excel中自定义函数
- 一个简单的Symbian OS异步计时器
- Golang记录、计算函数执行耗时、运行时间的一个简单方法
- 从零开始学习OpenCL开发(二)一个最简单的示例与简单性能分析
- javascript写一个简单的计时器
- 使用linux系统函数和c++03类写的一个简单线程池
- 设计技巧32:信使简化代码 Messenger 简单地将信息打包到一个用于传送的对象中
- 一个简单的性能计数器:CodeTimer
- 强大的C# Expression在一个函数求导问题中的简单运用
- JMeter基础——一个简单的性能测试example
- 关于大小端的简单介绍以及使用C写一个函数判断当前系统是大端存储还是小端存储
- 俺写的一个简单的字符串处理函数(可能会有用)
- 一个用于网络的工具函数库
- 一个简单的计时器
- SqlClr:创建一个简单的表值函数
- 一个简单的js实现倒计时函数