2017-12-02 9 views

答えて

2

これは可能ですが、通常のPMUカウンタのプログラミングほど簡単ではありません。

1つのアプローチは、PCI空間を介してアクセスされるプログラマブルメモリコントローラカウンタを使用することです。まずはpcm-memoryのインテル独自の実装を調べてみましょう。pcm-memory.cppです。このアプリはソケットごとまたはメモリコントローラごとのスループットを示していますが、これはいくつかの用途に適しています。特に帯域幅はすべてのコアで共有されるため、静かなマシンでは、帯域幅のほとんどがテスト中のプロセスに関連付けられていると見なすことができます。あるいは、ソケットレベルで監視したい場合は、

もう1つの方法は、 "offcore repsonse"カウンターの注意深いプログラミングを使用することです。これらは、私が知る限り、L2(最後のコア - プライベートキャッシュ)とシステムの残りの間のトラフィックに関連しています。オフコア応答の結果でフィルタリングすることができるので、さまざまな "L3ミス"イベントの組み合わせを使用して、キャッシュラインサイズを掛けて読み取りおよび書き込み帯域幅を得ることができます。イベントは非常に細かいので、最初にアクセスを引き起こしたもの、つまり命令フェッチ、データ要求要求、プリフェッチなどによってさらに細分化することができます。

オフコア応答カウンタは一般に遅れていますperflikwidのようなツールでサポートされていますが、少なくとも最近のバージョンでは、SKLのようなクライアントの部分であっても、合理的なサポートがあるようです。

-2

Intel PMUについてはわかりませんが、Intel VTune Amplifier(https://software.intel.com/en-us/intel-vtune-amplifier-xe)を使用することは可能でしょうか。これにはパフォーマンス監視用のツール(メモリ、CPUキャッシュ、CPU)がたくさんあります。多分、これはあなたのために働くでしょう。

+2

VTuneは、ハードウェアパフォーマンスカウンタ(PMU =パフォーマンス監視ユニット)を使用するためのツールです。 VTuneにメモリ帯域幅を測定させる方法を説明することができない限り、これは有用な答えではありません。 (VTuneは便利なツールで、キャッシュミスのホットスポットやそのようなものを見つけるのに役立ちます。そして、単にperfカウンタを記録するだけではありませんが、この質問には何の質問もありません)。 –

4

はい(ish)、間接的です。カウンタ間の関係(タイムスタンプを含む)を使用して、他の数値を推測することができます。たとえば、1秒の間隔をサンプリングし、最後のレベル(N)のキャッシュミスがある場合、1秒あたりN * CacheLineSizeバイトを占有していると確信できます。

これらのミスは、CPUのプリフェッチを反映する可能性があるため、プログラムの活動に正確にそれを関連付けるために少し粘着性なり、活動を中断、など

このCPU」の泥沼もありは、(MMXはカウントされません。 SSE、AVX、..)この設定ビットがこの状態にない場合 ';したがって、自分自身を回転させることは面倒です....

関連する問題