ご利用は計画的に2
普通外部DDRメモリへの書き込みはプロセッサから見るとキャッシュコントローラ以下が遅延書き込みしてくれるはずなので実質遅延0とみなせるはず。このアドバンテージを捨て、置換表エントリ書き込みに外部メモリ書き込みレイテンシ1回分の待ちを許容するなら、エントリ読み込みは昨日述べた方法約そのままでレイテンシ1回分で行える。
問題に思ったのは例えばスレッド0b011が過去に書き込んだエントリに上書きしようとして、最初のQWordに書き込んでから次のQWordを書き込むその間のタイミングで別のスレッドがそのエントリを読みにかかった場合、エントリデータが壊れていることが判定できないという点だが、これは書き込み時に次の手順に従えば回避できるハズ。
- 目的のエントリ 2 QWordを0クリア
- フェンス命令でストアを順序化
- 目的のエントリに目的のデータ 2 QWordを書く(両QWordの最上位3 bitにはスレッド番号0b011を書く)
ただし、スレッド番号として0は使わないことが前提。
■追記
キャッシュ汚染せずにエントリを読み書きする手段の提案なのに「キャッシュコントローラ以下が遅延書き込みしてくれる」という言い方で書き込みの並行動作を説明するのは適切でない気がしてきたorz
これは「Writeバッファに蓄積された書き込み指令がプロセッサの命令実行とは並行して処理される」というのが真意
あとついでなのでここに書くが、Core i7にはWriteバッファはあるがWCバッファは無いらしい、、