8

パフォーマンスを分析するために、CPU キャッシュ (L2、L3、場合によっては L1) とメモリを本質的にプロファイリングできるソフトウェアを作成したいと考えています。

ソフトウェアがキャッシュ コンテンツにアクセスできないため、これは実行不可能だと考えるのは正しいですか?

私の質問の別の言い方: OS/アプリケーション レベルから、どのデータがキャッシュ/メモリにロードされたかを知る方法はありますか?

編集: オペレーティング システム Windows または Linux および CPU Intel Desktop/Xeon

4

3 に答える 3

8

Intel の PMU、つまり Performance Monitoring Unit を参照してください。一部のプロセッサには 1 つがあります。RDMSRこれは、およびWRMSR命令を使用して、キャッシュ ミスなどのイベントをカウントするようにプログラムできる一連の特殊目的レジスター (Intel はモデル固有レジスターまたは MSR と呼んでいます) です。

これは、 i7 および Xeon 5500 でのパフォーマンス分析に関するドキュメントです。

Intel のPerformance Counter Monitorを確認することをお勧めします。これは、基本的に PMU を抽象化するいくつかのルーチンであり、C++ アプリケーションで使用して、キャッシュ ミスを含むいくつかのパフォーマンス メトリックをライブで測定できます。また、スタンドアロンで使用するための GUI/コマンドライン ツールもいくつかあります。

どうやら、Linux カーネルには MSR を操作する機能があります。

PMU を使用する他のユーティリティ/API もあります: perfPAPI

于 2012-04-12T13:03:16.517 に答える
4

キャッシュのパフォーマンスは、通常、ヒット率とミス率で測定されます。

これを行うための多くのツールがあります。Valgrind がキャッシュ プロファイリングを行う方法を確認してください。

また、キャッシュのパフォーマンスは通常、プログラムごとに測定されます。適切に作成されたプログラムは、キャッシュ ミスが少なくなり、キャッシュ パフォーマンスが向上します。不適切に作成されたコードでは、その逆になります。

実際のキャッシュ速度を測定することは、ハードウェア メーカーにとって頭の痛い問題です。この値を知るには、メーカーのマニュアルを参照してください。

Callgrind / Cachegrindの組み合わせは、キャッシュのヒット/ミスを追跡するのに役立ちます

于 2012-04-12T11:47:15.627 に答える
1

これにはいくつかの例があります。PAPI を使用して動作するオープンソースのプロファイラーである TAU も使用できます。

ただし、キャッシュ統計を測定するコードを書きたい場合は、PAPI を使用してプログラムを作成できます。PAPI を使用すると、ユーザーはシステム アーキテクチャを知らなくてもハードウェア カウンタにアクセスできます。PMU はモデル固有のレジスタを使用するため、使用するレジスタの知識が必要です。

Perf は L1 と LLC (L2) の測定を可能にし、一方 Cachegrind はユーザーが L1 と LLC (L2 または L3 のいずれか最高レベルのキャッシュ) を測定できるようにします。Cachegrind はプログラムを約 10 倍遅く実行するため、高速な結果が必要ない場合にのみ Cachegrind を使用してください。

于 2014-03-20T09:58:06.883 に答える