2016-05-02 7 views
0

現在実行中のCコードのサイクル数を測定中です。このコードは、Windows APIから_beginthreadex()で10msごとに生成された余分なスレッドで実行されます。サイクル測定は、QueryThreadCycleTimes()を使用して行われ、割り込みの目盛りなどを数えないようにします。Intel SpeedStepが実行サイクル数に影響するのはなぜですか?

マシン上でこのコードだけを実行すると、サイクル数は550〜1,800,000の間で、それぞれ数回(5〜10回)コールされます。

Intel SpeedStepをオフにして調査したところ、サイクル数は中央値580 000で、約10 000ティックの偏差があります。容認できる! 私の質問は、SpeedStepが実行に必要なサイクル数にどのように影響するかということです。私が思ったように、サイクルカウントには影響しないはずの電力消費量を減らすことによってプロセッサの周波数を下げるだけですが、このサイクルカウントに達するのに必要な時間はかかりますか?他の重要なハードウェア部品やCPUキャッシュに影響があるかどうかは誰かが知っているかもしれませんか?

ありがとうございます。挨拶 サシャ

システムプロパティ:

のIntel Xeon E5 - 1620プロセッサ

のVisual Studio 2013

+0

QueryThreadCycleTimesはサイクルを測定しません。時間を測定します。速度、消費電力、ファンノイズはトレードオフです。たぶんあなたは掃除機を取り出して、コンピュータのケースを開き、ダストバニーを吸い取る必要があります。プログラマーは、これを十分に頻繁にはしません。 –

+0

@ハンスそれでは、MSDNページのスレッドカーネルとユーザーサイクルで間違っています。今度は、低い周波数から高い時間までの関係が明確です。ここで[リンク](https://blogs.msdn.microsoft.com/oldnewthing/20160429-00/?p=93385)には、通常は測定されたサイクルがありますが、公称CPUレートが記載されています。したがって、サイクルカウンタが低すぎると、「あまりにも速く」なります。質問は解決されました、ありがとうございました。 – Sascha

答えて

2

QueryThreadCycleTime機能manual page状態:

この関数は、により提供されるタイマーサービスを使用していますCPU、実装が異なる可能性があります。たとえば、CPUが動作する周波数を変更するとタイマーの周波数が変化し、固定レートで動作させるものがあります。各CPUの動作は、CPUベンダーが提供するドキュメントに記載されています。

Intel Xeonプロセッサのしくみについての情報を見つけようとしましたが、私の検索カルマは私と一緒ではありませんでした。

+0

しばらくの間、すべてのx86 CPUは、クロック速度に応じて変化しない一定レートのTSCを持っていました。これは、高精度低オーバヘッド時間ソース(例えば、POSIX 'gettimeofday(2)')として有用ですが、可変周波数を無効にしない限り、あるいは最大周波数までのCPU時間を最初に与えない限り、マイクロベンチマーキングには有効ではありません。 perfカウンタは実際のコアクロックサイクルをカウントできますが、サンプリングする必要があります。 –

関連する問題