2012-04-04 7 views
2

時間をナノ秒単位で測定する方法はありますか?Windows C++のナノ秒タイミングですか?

私はLinuxソリューションを見つけることができます。

+1

[Boost.Chrono](http://www.boost.org/libs/chrono/)を参照してください。 – ildjarn

+0

[QueryPerformanceCounter](http://msdn.microsoft.com/en-us/library/windows/desktop/ms644904(v = vs.85).aspx)はWindowsですが、Boostは優れており、移植性もあります。 –

+0

ほとんどのシステムで実行時間を秒単位で正確に測定することはできません。 – AJG85

答えて

5

QueryPerformanceCounterのはで動作するものスピード見るためにQueryPerformanceFrequency機能を使用。私はそれがナノ秒の範囲にあるかもしれないと思う。

+2

非常に古いAPI呼び出しで、タスクスイッチを調整しません。 – Lothar

+0

@Lothar:実行時間をナノ秒単位で測定すると、タスクスイッチが発生したときにその測定サンプルをスキップすることができます。 –

1

独自のアセンブリを実行できる場合は、CPUのサイクルカウンタを読んで、CPUのクロックレートでサイクル差、それを分割することができます:

static inline uint64_t get_cycles() 
{ 
    uint64_t t; 
    __asm__ __volatile__ ("rdtsc" : "=A"(t)); 
    return t; 
} 
+0

IIRC、ですが、これに落とし穴があるかもしれない...それが可能なだけのどちらかですより新しいCPU上で、あるいはそれはカーネルモードでしか利用できない、またはそのようなものである... – Mehrdad

+0

@Mehrdad: 'rdtsc'は、P6ファミリのCPU、おそらくは元のPentiumからも利用可能です。それはカーネルモードに制限することができますが、Windowsがそうしているかどうかはわかりません。 – cHao

+0

@Mehrdad:いいえ、Windowsではカーネルモードに限定されていません。 VCを使用する場合、構文は 'long long ticks()です。 { __asm {rdtsc}; } '新しいCPUであれば、Pentiumを意味するのですが、それは「新しい」CPUでのみ利用可能です。個人的には、486とそれ以前のコードを書いてからしばらくしています。 –

4

WindowsのQueryPerformanceCounterをご覧ください。

パフォーマンスのボトルネックを特定するタイミングコードでは、 のシステムで提供される最高の解像度のタイマーを使用します。この記事 はRDTSCとQueryPerformanceCounterの/ QueryPerformanceFrequencyの両方が十分に正確ではありません時間 アプリケーションコード

http://support.microsoft.com/kb/172338

+4

これはコメントであり、良い答えではありません。 –

+3

@MooingDuck:どうしてですか? – Mehrdad

+1

@Mehrdad:これを読んだとき、私は質問に対する答えを理解することに進展しなかったので。これはリンクです。少なくとも_サマリーが必要です。 –

1

利用のWindows7とハードウェアカウンタプロファイリングAPI http://msdn.microsoft.com/en-us/library/windows/desktop/dd796395(v=vs.85).aspx

にQueryPerformanceCounter関数を使用する方法について説明しますオーバーヘッド、割り込み、およびタスクスイッチが大きいためです。

[編集]:残念ながらPerformanceCounterとハードウェアカウンタのリンクが混在しています。申し訳ありませんが、これは一度しか使用されていませんでした。

+0

これはどのように使用しますか?私はそれを理解することはできません。 –

+0

ここに何かあります:http://msdn.microsoft.com/en-us/magazine/cc163996.aspx –

+0

そして、異なるコード実装のランタイムを比較したい場合、実行サイクルは絶対時間ではなく計算してください。 – Lothar

関連する問題