3

これは本当に基本的な質問のように思えるかもしれませんが、

QueryPerformanceCounterを使用するQueryPerformanceFrequencyと、結果の値は何秒、ミリ秒、マイクロ秒になりますか?

一部のコードをWindowsからLinuxに移植していて、実験に便利なWindowsマシンがないため、質問しています。いくつかのグーグルは私に具体的な答えを提供しませんでした。

4

5 に答える 5

7

QueryPerformanceCounterのドキュメントを更新しましたが、上記のRDTSCとQueryPerformanceCounterの精度の比較は正しくありません。詳細については、を参照してください。

http://msdn.microsoft.com/en-us/library/windows/desktop/dn553408(v=vs.85).aspx

エドブリッグスマイクロソフトコーポレーション

于 2014-02-20T20:48:25.440 に答える
5

いくつかのグーグルは私に具体的な答えを提供しませんでした。

「QueryPerformanceCounter」の最初のGoogle検索結果:MSDNドキュメントQueryPerformanceCounter()

これがそれが言わなければならないことです:

パラメーター

lpPerformanceCount [out]

タイプ:LARGE_INTEGER *

現在のパフォーマンスカウンター値をcountsで受け取る変数へのポインター。

「QueryPerformanceFrequency」の最初のGoogle検索結果:MSDNドキュメントQueryPerformanceFrequency()

これがそれが言わなければならないことです:

パラメーター

lpFrequency [out]

タイプ:LARGE_INTEGER *

現在のパフォーマンスカウンターの頻度を1秒あたりのカウント数で受け取る変数へのポインター。インストールされているハードウェアが高解像度のパフォーマンスカウンターをサポートしていない場合、このパラメーターはゼロになる可能性があります。

から取得した値QueryPerformanceCounter()はカウントです。から取得される値QueryPerformanceFrequency()は、1秒あたりのカウント数です。少しの次元分析を使用して:

(counts) / (counts/second) = seconds

したがって、2つの値を除算した結果は秒単位になります。

于 2012-07-06T02:02:46.317 に答える
1

少なくとも私が知る限り、QPFは通常2つのソースのいずれかに依存します。少なくとも一度は、ほとんどのシングルプロセッサシステムは、RDTSC命令を介してアクセスされるプロセッサのタイムスタンプカウンタレジスタを使用していました。

マルチプロセッサシステム(およびTSCレジスタを持たない古いシステム)は通常、マザーボードのオンボード1.024MHzクロックを使用します。マルチプロセッサ/マルチコアシステムでは、プロセッサ/コアのタイムスタンプカウンタが同期していない可能性があるため、タイムスタンプカウンタはかなり意味のない結果(負の期間を含む)をもたらす可能性があります。

于 2012-07-06T02:17:44.983 に答える
0

Windows 7では、の結果を生成する新しい方法が導入されましたQueryPerformanceCounter

この関数は可能な限り細かい粒度であると想定されていますが、その精度を確認する必要があります。によって返される値QueryPerformanceFrequencyは、正確に観測されたものでも、定数でもありません。特に古いシステムは、深刻な熱ドリフトに悩まされています。

私はここにもう少し詳細を書きました。

于 2012-07-31T14:27:16.547 に答える
0

インシリコが質問に答えたとしても、より高いタイマー解像度を探している場合は、rdtscアセンブリ命令を使用できます。(マザーボードのクロックとは対照的に)CPUクロックを使用するため、約rdtsc1000倍正確です。メソッドは次のようになります。QueryPerformanceCounterQueryPerformanceFrequency

void QueryRDTSC(__int64* tick) {
 __asm {
  xor eax, eax
  cpuid
  rdtsc
  mov edi, dword ptr tick
  mov dword ptr [edi], eax
  mov dword ptr [edi+4], edx
 }
}

おもしろい事実:遅いマザーボードの時計は、水晶振動子が大きいため、クロックドリフトの影響を受けやすくなっています。もちろん、高解像度のタイミングの深さを掘り下げたいかどうかは、アプリケーションでタイミングがどれほど重要かによって異なります。ハッピーコーディング!

于 2012-07-06T02:19:38.643 に答える