1

関数の実行時間をナノ秒単位で測定する必要があります。今、私は自分のコンピューターがそれを実行できるかどうか、そして測定の精度は何であるかを理解したいと思います。QueryPerformanceFrequency()を使用してHPETの周波数を取得するという提案があり、1/hpetFrequencyは測定可能な原子時です。これは正しいですか?つまり、CPU周波数が3.33 GHの場合、1GHzであっても、1クロック持続時間は1ナノ秒です。ナノ秒単位で測定できるということではないですか?

時間の測定にはCPUまたはHPETの周波数が不可欠であり、その理由は何ですか?

4

1 に答える 1

1

1ナノ秒まで測定することはできず、10ナノ秒まで測定することもできません。これは、それぞれがaction of measurementある種の呼び出しが必要です。最速のAPIの1つは、GetSystemTimeAsFileTime()です。通話には10〜15nsかかります。しかし、解像度/粒度はかなり劣っています(msレジームでは)。QueryPerformanceCounter()は、基盤となるハードウェアに応じて、MHz〜GHzの範囲の周波数を提供します。この呼び出しはそれほど高速ではありませんが、1MHzでは1マイクロ秒の分解能が得られます。QueryPerformanceFrequency()で指定されたこのような頻度では、呼び出しは増分レートよりも速いため、連続した呼び出しは等しい値を返す場合があります。もう1つのソースは、CPUタイムスタンプカウンター(rdtsc)です。ただし、これにもいくつかの欠点があります。最新のハードウェアは、付加的なCPU周波数を実装しています。したがって、この周波数は定数とは見なされません。このように、測定は一定のフェーズでのみ可能です。

実際、どの周波数源も一定の周波数を提供していません。これらの周波数はすべて、を持っているいくつかのハードウェアによって生成されますoffset and drift。したがって、OSはQueryPerformanceFrequencyまたはCPU周波数の値を返し、それが定数であると信じ込ませます。ただし、取得できる数はわずかclose estimatesです。

実際の正確なタイミングは、これらの周波数がシステムRTCに対して較正されている場合にのみ実行できます。Windowsでの正確なタイミングの詳細については、この資料を参照してください。

編集: WindowsはTime Stamp CounterCPUのを選択します。このような場合、QPF()の結果は、プロセッサ速度を固定数(この場合は1024)で割った値に等しくなります。Windowsは、一定/不変のTSCが使用可能な場合に、TSCを中心にタイムキーピングを優先的に構築することを選択します。3.33 GHz / 1024 =3.25MHz。

于 2012-10-19T09:54:07.127 に答える