問題タブ [mesi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cpu-architecture - MESI キャッシュ コヒーレンス プロトコルでは、データをメモリからフェッチする必要がある場合、キャッシュ ラインの状態が変わるのはいつですか?
CPU の場合の MESI プロトコル:
- 読み取り操作を実行します
- キャッシュ ラインが無効な状態であることを検出します
- 他のキャッシュに無効でないコピーはありません
メモリからデータをフェッチする必要があります。これを行うには、一定のサイクル数が必要です。では、キャッシュ ラインの状態は (I) から (E) に即座に変化するのでしょうか、それともデータがメモリからフェッチされた後にのみ変化するのでしょうか?
cpu-architecture - キャッシュ MOSI プロトコル: 書き込みミスが発生したときにブロックがデータを提供する必要がある理由
私はComputer Architecture: A Quantitative Approachを読んでいましたが、次の段落 (バージョン 5 - ページ 415) に混乱しました。
" 一般的なプロトコルの最適化は、Owned 状態 (通常は O で示される) を導入することです。Owned 状態は、ノードが Owned ブロックのみを読み取ることができるという点で、Shared 状態のように動作します。他のノードの所有ブロックに対する読み取りおよび書き込みミス Modified または Owned 状態のいずれかのブロックに対する読み取りミスは、データを要求側ノードに提供し、Owned 状態に遷移しますModified または Owned 状態のいずれかのブロックに対する書き込みミスは、データを供給しますこの最適化された MOSI プロトコルは、ノードが Modified または Owned 状態のブロックを置き換えるときにのみメモリを更新します。」
私の質問は: 書き込みミスが発生したときに、要求元のノードに古いデータを提供する必要があるのはなぜですか?
私が行った努力: 関連する質問を 1 つ読みました。その質問に対する答えがよくわかりません。特に、「古いデータを利用できるようにしておくと、正確性の問題なしに、書き込みミス要求を投機的に (順不同の実行や書き込みのプリフェッチなどで) 送信できます。」 しかし、古いデータはメモリに書き戻されるのではなく、要求元のノードに書き戻されるため、私の質問はまだ異なると思います (キャッシュである必要がありますか?)。