K10アーキテクチャのL3キャッシュ制御

素朴な疑問

やや今更間のある話になりますが、AMDのプロセッサはK10アーキテクチャになってから、コア間で共有のL3キャッシュが搭載されています。また、AMDは代々*1キャッシュの制御方式にExclusive方式*2を採用してます。
マルチスレッド対応計算プログラムを書いてるときにふと思ったことなのですが、K10においてもExclusive方式が踏襲されているなら、L3キャッシュに乗ったデータをコア間で共有した場合、最初にデータを呼び出したコアの L2にデータが移ったあと、別のコアはどうやってそのデータにアクセスするのか?ってのが気になりました。
特殊な機構がなければ、考えられる方法は

  1. 『L3キャッシュに書き戻した後、他方のコアのL2に移す』を別コアが呼び出すたび繰り返す(コストでかすぎ)
  2. メインメモリから呼び出してL2に(やっぱコストでかすぎ)
  3. L2間でコピーを行う(クロスバースイッチ経由になるから速い?けどコア数が増えると??)

ってあたりなのですが、どれもいまいち過ぎるので、どういう制御を行ってるのか気になっていました。

実際の実装

計算プログラムを高速化させる際に

Software Optimization Guide for AMD Family 10h Processors
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/40546.pdf

を読んでいたら、"11.5 Optimizing Inter-Core Data Transfer"に

AMD family 10h cache design is a “mostly exclusive” “victim” cache.

って単語が。『だいたい』Exclusiveって書いやんの。『だいたい』って何だろ、ってことでさらに読み進めると

in AMD Family 10h processors, for purposes of optimizing for multiple readers, multiple cores may generate local copies when they access the shared L3 cache line. For this reason, the cache is termed “mostly” exclusive.

複数コアでデータを共有する場合には、各コアはL3キャッシュにデータを残したままL2キャッシュにローカルコピーを作成するようなってるようで。

このこと書いてる日本語の文献探したらPC Watchの記事があったんのでメモ。

大幅に強化されたAMDクアッドコア「Barcelona」
http://pc.watch.impress.co.jp/docs/2006/1016/kaigai312.htm

へ〜、随分凝った制御やってるなぁと思ったり。他にも、コアごとのL3キャッシュ容量の配分も動的に換えてたりして、随分複雑な制御をやってるようで・・・。もういっそのこと、Inclusiveにして制御を簡素化する分、容量増やせばいいのにとか思ってしまった。

*1:厳密にいつからか知らないけど

*2:かつVictim方式、だけど今回の話には関係ないので省略。