基本的なイベント カウンターとして perf を使用しています。私は、データ キャッシュ ストア ミスに悩まされているプログラムに取り組んでいます。%80の比率と同じくらい高いです。
原則としてキャッシュがどのように機能するかを知っています。さまざまなミスケースでメモリからロードし、必要に応じてキャッシュからデータを削除します。私が理解していないのは、ストアとロードのミスの違いです。読み込みと保存はどのように異なりますか。どのようにミスを保存できますか?
基本的なイベント カウンターとして perf を使用しています。私は、データ キャッシュ ストア ミスに悩まされているプログラムに取り組んでいます。%80の比率と同じくらい高いです。
原則としてキャッシュがどのように機能するかを知っています。さまざまなミスケースでメモリからロードし、必要に応じてキャッシュからデータを削除します。私が理解していないのは、ストアとロードのミスの違いです。読み込みと保存はどのように異なりますか。どのようにミスを保存できますか?
perf がこれらのイベントをどのように定義するかについてはよくわかりませんが、一般的な定義を考えると、ロード/ストア ミスは全体的なミス レート カウントを分類するための単なる方法であり、どのアクセスがより頻繁にミスするかを知ることができると思います。通常、ロードは投機的に (少なくとも最近の x86 CPU では) 実行されますが、ストアはコミット ポイントの後、パイプラインに沿ってずっと後で実行されるため、同じリージョンへのロードとストアの両方を含むコードでも、異なるミスが発生する可能性があることに注意してください。レート。
MESI ベースのキャッシュ プロトコルでは、ロードがキャッシュにヒットするか、メモリまたは次のキャッシュ レベルからラインをミスしてフェッチします。所有者が他にいない場合は排他的であり、所有している場合は共有状態になります。プロセスの途中でデータをキャッシュに書き込みます。ストアは同じ方法で行を取得しますが、排他的な所有権と行を変更する権利を付与する RFO (所有権の読み取り) 要求を使用します。ラインは引き続きキャッシュされますが、新しいデータがローカル (通常は L1 キャッシュ) に書き込まれると、変更されます。ただし、ヒット/ミスのプロセスは同じように見えます。
サマンが回答で言及したのは、読み取りと書き込みの内訳です。ロードとストア (およびコード読み取りなどの他の形式のアクセス) はすべて「読み取り」部分を形成し、ライトバック (または特別なコマンドや uncacheable のような mem タイプを使用した意図的なライトスルー) は「書き込み部分」を形成します。