2

C++ コードのキャッシュ効率を調べたいと考えています。UBUNTUで実行しています。キャッシュ ヒット数またはキャッシュ ミス数を調べるにはどうすればよいですか?

別の質問は次のとおりです: time コマンドを使用して見つけました: コードの一部で 2133 (マイナー) ページ フォールトが発生し、別の部分で 2361 (マイナー) ページ フォールトが発生しています。(マイナーな) ページ フォールトはキャッシュ ミスに関連していますか? もしそうなら、それはどのように関連していますか。(マイナーな) ページ フォールトを引き起こす可能性のある I/O を実行する必要がありますか?

4

2 に答える 2

1

クリス・ドッドの回答に対する単一のコメントよりも長くなったため、自分の回答を書いています...

oprofile または perftool (基本的には oprofile と同じカーネル機能を使用) を使用すると、キャッシュ ヒットとミスを比較できます。アプリケーションが「持つべき」「キャッシュミス」または「キャッシュヒット」の数を言うのは難しいことに注意してください。実際には、同じアプリケーションの別の実行と数を比較することしかできません(微調整後ですが、どれだけかを見ることもできます)実行ごとに異なるため、非常に便利です)。

ページフォールトの正確な数はそれほど重要ではないと思います.「運」によって少し変わる傾向があります.

ページ フォールトはあらゆる原因で発生します。たとえば、メモリの大きなチャンクを割り当てると、ページが初めて使用されるときにそのメモリは「存在しません」になり、その時点で存在とマークされます (おそらくその時点でゼロで埋められます)。また、共有ライブラリが初期化されたときに関数が「存在しない」ため、共有ライブラリから関数をロードしてもページ フォールトが発生します。場合によっては、mmapファイルの読み取り/書き込み操作を使用する代わりに、アプリケーションの一部がファイルにマップするために使用することもあります (これはおそらく、ファイル I/O に関して考えていることです)。

于 2013-08-11T17:19:01.273 に答える