QueryPerformanceCounter的性能影响

3

在Windows系统中,相比于低分辨率的计时方法,调用QueryPerformanceCounter是否会对性能产生影响?


http://www.gamedev.net/topic/387778-queryperformancecounter-performance/ - 最后一篇帖子很有趣。 - Seb Holzapfel
我建议您进行一些时间测试,比较QueryPerformanceCounter与其他“低分辨率计时方法”,并观察您所观察到的差异。 :-) - C. K. Young
1
像这样吗?http://www.nvidia.com/object/timer_function_performance.html - Seb Holzapfel
1
@Chris - 你建议如何计时这些测试? - Bo Persson
1
@Bo:启动一个计时器(任何类型)。查询一个计时器类型一百万次。停止你的计时器。重复使用其他计时器类型。 - C. K. Young
1个回答

6
虽然有些老旧,但这篇Dr Dobb's文章给出了一个很好的总结,介绍了您的选项及其成本、优缺点(请看末尾的表格),包括QPC。
说实话,要获得您情况下的真正计时,请使用分析器(如AMD的CodeAnalyst)或类似Dr Fog的性能监视器网站,其中还有其他一些有用的东西,取决于您想深入了解“这个调用/指令/操作将花费多少”这个问题)。

有趣的阅读 - 我以为会有一些差异,但我没想到QueryPerformanceCounter和GetTickCount之间会有约88倍的差异。 - Konrad
1
@konrad:GetTickCount仅获取系统当前的计时器并将其乘以当前时间步长,而QPC则查询主板上(如果存在)的高频计时设备,我记得它会进入内核模式执行,这是很耗费资源的。但这是可以预料的,权衡的是精度和粒度与速度之间的关系(由于多核可变速CPU,无法再滥用TSC来获得两者的最佳效果,因此正确使用它变得更加棘手)。请记住,别人的测试结果并不代表你的结果,这就是为什么你总是要测试自己的设置。 - Necrolis
1
@Necrolis,如果您的CPU支持常量TSC(一些新型号支持),那么变量速度不是问题。多核的问题在于,在调用rdtsc之前必须调用序列化操作(例如cpuid),随着核心数量的增加,这个操作的成本也会增加... - Nim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接