首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当调用QueryPerformanceCounter时会发生什么?

当调用QueryPerformanceCounter时会发生什么?
EN

Stack Overflow用户
提问于 2009-11-13 00:45:00
回答 4查看 7.8K关注 0票数 19

我正在研究在我们的系统中使用QueryPerformanceCounter的确切含义,并试图了解它对应用程序的影响。我可以看到,在我的4核单cpu机器上运行它大约需要230 to。当我在24核4 cpu xeon上运行它时,大约需要1.4ms。更有趣的是,在我的机器上,当它在多个线程中运行时,它们不会相互影响。但是在多cpu机器上,线程会引起某种类型的交互,从而导致它们彼此阻塞。我想知道在总线上是否有他们都查询的共享资源?当我调用QueryPerformanceCounter时到底发生了什么,它实际测量的是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-13 01:04:28

Windows QueryPerformanceCounter()具有确定处理器数量的逻辑,并在必要时调用同步逻辑。

MSDN说,在哪个处理器上调用它并不重要,因此您可能会看到针对这种情况的额外同步代码导致开销。还要记住,它可以调用总线传输,因此您可能会看到总线争用延迟。

如果可能,请尝试使用SetThreadAffinityMask()将其绑定到特定的处理器。否则,您可能只能忍受延迟,或者您可以尝试不同的计时器(例如,查看http://en.wikipedia.org/wiki/High_Precision_Event_Timer)。

票数 10
EN

Stack Overflow用户

发布于 2010-09-04 04:11:17

我知道这个帖子有点老了,但我想补充更多的信息。首先,我确实同意QueryPerformanceCounter可以在某些机器上花费更多时间,但我不确定Ron的答案是否一直是原因。当我在这个问题上做一些研究时,我发现了一个各种各样的网页,上面谈到了QueryPerformanceCounter是如何实现的。例如,Precision is not the same as accuracy告诉我,Windows,HAL更具体地说,会使用不同的计时装置来获取数值。这意味着如果windows使用较慢的计时设备,例如PIT,则获取时间值将需要更多时间。显然,使用PIT可能需要PCI事务,因此这将是一个原因。

我还找到了另一篇文章:“它是如何工作的: SQL Server2008TSC中的定时器输出-- R2 -不变性TSC”给出了类似的描述。实际上,本文讲述了SQLServer如何以最佳方式对事务进行计时。

然后,我在VMware网站上找到了更多信息,因为我必须与使用虚拟机的客户打交道,而且我发现使用虚拟机进行时间测量还有其他问题。对于感兴趣的人,请参考本文中的VMware文件- VMware虚拟机中的计时,它还讨论了一些版本的windows如何同步每个TSC。因此,在某些情况下使用QueryPerformanceCounter()是安全的,我认为我们应该尝试一下它的工作原理: SQL Server2008 R2中的计时器输出建议我们在调用QueryPerformanceCounter()时查看可能发生的情况。

票数 4
EN

Stack Overflow用户

发布于 2009-11-13 00:49:15

我的印象是,在x86上,QueryPerformanceCounter()只是在幕后调用rdtsc。我很惊讶它在多核机器上有任何减慢(我从来没有注意到它在我的4核cpu上)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1723629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档