2009-04-24 65 views
9

我想快速使用高性能事件計時器(HPET)進行性能分析工具,以便進行非常高精度的測量。 timeGetTime在1ms時不能提供足夠的分辨率,QueryPerformanceCounter每次讀取都比我想要的要慢得多。我在研究這個問題時遇到了HPET,但是我看不到有關如何真正瞭解它的任何示例。我是否可以直接使用它(組裝很好),還是必須依賴已經內置到Win32 API中的多媒體/高性能計時工具?HPET是否可以在Windows中直接訪問?

+1

我也想使用它,因爲我猜我在我的分析器中遇到同樣的問題。 – leppie 2009-04-24 15:42:53

+0

這似乎是相關的:http://msdn.microsoft.com/en-us/magazine/cc163996.aspx – 2013-07-22 03:39:06

+0

作爲進一步更新:RDTSC和「QueryPerformanceCounter」是不安全的,當系統有一個非恆定的基頻(在系統內超頻)。在這些導致時序偏斜的情況下,Windows無法調整QPC頻率。在這些情況下,HPET和ACPI仍然是可靠計時器的唯一選擇。 **因此,這個問題仍然沒有解決。** – Mysticial 2017-03-15 22:47:47

回答

-1

我發現this info同時挖洞,它似乎是最具成本效益的方式。當我有膽量深入裝配時,我會嘗試一下。 :)

UPDATE

我與我的探查測試這一點。雖然有點快,看來我還有其他的開銷噸:((我沒有時間理會,因爲我似乎沒有足夠的利益)

+3

不!不要使用RDTSC,它會在多核機器上做出奇怪的事情。每個擁有自己櫃檯的核心都可以提供功能消耗時間等效果。時間戳計數器並不總是同步! 在那裏,做到了。 – 2009-04-24 17:28:39

+0

並說你跟蹤線程?這如何影響差異? – leppie 2009-04-24 19:45:18

+1

跟蹤線程只會告訴你有*可能*是一個問題,而不是如果有*問題或如何解決它。要安全地使用RDTSC,您必須*將線程固定到特定內核。無法從用戶空間安全地計算跨核心的RDTSC差異。 – 2009-04-26 07:46:16

1

我也有興趣在使用HPET,但作爲定時器,我的理解是QueryPerformanceCounter和QueryPerformanceFrequency實際上是訪問HPET的計數器和時鐘,並且這在Windows XP下工作(例如,請參見http://www.geisswerks.com/ryan/FAQS/timing.html

所以就時序代碼而言,我認爲通過使用QueryPerformanceCounter,您實際上可以訪問構成HPET基礎的計數器,並且這些都在芯片組(而不是處理器)中存在。

+2

據我所知,XP不支持HPET,所以QueryPerformanceCounter實際上是使用RDTSC。 – 2012-11-04 21:20:46

+0

有關完整說明,請參閱https://en.wikipedia.org/wiki/High_Precision_Event_Timer#cite_note-7(有關「使用和兼容性」中XP SP3的注意事項)。簡而言之,XP使用帶有軟件和各種硬件的「盡力而爲」HPET_emulation_。 – 2015-06-22 01:38:00

相關問題