首页
社区
课程
招聘
[原创]精密计时器的使用
发表于: 2013-6-29 20:49 5928

[原创]精密计时器的使用

2013-6-29 20:49
5928

最近想测试一下自己写的函数效率如何,所以就研究了一下计时器的实现方法,发现,要实现精密计时,主要有两种方法,一种是VC内嵌汇编,另一种是api,下面是我实现的代码,如果有需要的朋友可以直接copy.
但是在程序实际运行的时候两种计时方式得出的数据不一致,如果有哪位大虾看出哪里有bug,请狂喷
此程序运行结果为:汇编测得的两种方法时间相差无几,但奇怪的是使用数组方法居然比vector要慢,更奇怪的是使用api的方法得出的结果vector使用的时间竟然达到了数组的8倍之多
此前我还做过一个实验,单独使用汇编测定时间,vector所用的时间也会达到数组的几倍,而不是此程序里的结果
这些问题让我百思不得其解


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 5
支持
分享
最新回复 (8)
雪    币: 1042
活跃值: (495)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Make, 学习了 感谢楼主。
2013-6-29 20:58
0
雪    币: 758
活跃值: (42)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
漏了一个BIT64的定义,直接把这个写成double就可以了,大小是一样的
2013-6-29 21:03
0
雪    币: 154
活跃值: (91)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
timeBeginPeriod
timeGetTime
timeEndPeriod
2013-6-29 21:30
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
虽然暂时还用不到,但还是觉得很有帮助
2013-6-29 21:34
0
雪    币: 758
活跃值: (42)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
发现Bug的所在了,请用下面代码替换对应行
                          << "汇编测得'Vector'所用时间为:\t" << ((*((u64*)&m2) - *((u64*)&m1)) / (double)CPUFrequency) << std::endl
                      << "汇编测得'Array'所用时间为:\t" << ((*((u64*)&m4) - *((u64*)&m3)) / (double)CPUFrequency) << std::endl
2013-6-29 23:25
0
雪    币: 376
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
现在CPU都是自动调频的,QueryPerformanceFrequency这个是不准的
2013-6-30 08:35
0
雪    币: 758
活跃值: (42)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
楼上能细说一下是怎么回事么,大家一起交流学习一下

另外经过bug修正,此程序在我的2.6GHZ电脑上汇编和api方法得到的数据基本一致,汇编方法能比api精确一些
2013-6-30 12:35
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
http://delphi.cjcsoft.net/viewthread.php?tid=1570
Sleep(1000)唤醒后,不一定就过了1000ms,可能多,Windows不是一个实时系统
多核环境下RDTSC问题有点多
2013-6-30 21:51
0
游客
登录 | 注册 方可回帖
返回
//