思うだけで学ばない日記 2.0

思うだけで学ばない日記から移転しました☆!よろしくお願いします。

Oh, my dias!

北森2.8 GHzではマルチコアの実験とかできないんだった!orz
とわいえ、昨日の方法はコア固有キャッシュ間のキャッシュコヒーレンシをまともに保つCPUでは全く上手く行くきそうにないから実験するまでもないとも言える 。n_
コア間で共有される置換表があるとして、それを読む側の動作として次を意図しているのだが、

  1. コア1が1ワード読み込む→L2キャッシュHIT(もしくはミスヒットしてrefill)
  2. コア1が引き続くワードを全部読み終える--この間アクセス中のキャッシュラインの内容がそのままであってほしい

2.が行われている最中に別のコア2が同じアドレス範囲内に書き込みを行ったとき、即座にコア1側の当該キャッシュラインがdirty判定されて改めてL3キャッシュ経由等でrefillされる危険性があるなら昨日の方法は破綻する
ただしキャッシュコヒーレンシをまともに保つCPUならフェンス命令がそれなりに効率の良い実装であることが期待できるから(フェンス命令を実行しても通常はコア-L2キャッシュ間で順序化されるだけで、L3キャッシュ以下へのアクセスはフェンス命令で順序化されるアドレス範囲に別のコアがアクセス中だった場合に限られるとか)、やっぱり常識的にフェンス命令でロード/ストアを順序化しつつオプティミスティックロックすればいいのか、、
しかし一方、上記のようなワード単位のコヒーレンシ保証は回路規模に支払うコストが大きいはずである割に、いざコヒーレンシ保証する際、結局コアを待たることは変わらないからパフォーマンス改善にならないはず。しかも複数コアが同一の局所領域に同時アクセスするなどというのは通常のPCの利用形態からすればまれな事象と考えられ、その対策をわざわざハードウェアでやる意味がわからない(そのようなケースのためにフェンス命令があるようなものなのに)、というのがあって昨日の方法は全く芽が潰えたわけではない、、と思いたい
さてインテルがそこらへんをどう考えて作ってるのやら、ようわからん(←資料読めよ