IT系メモ

興味のあったことや、勉強したことなどをメモしていきます。

マルチコア、メニーコアの勉強

キャッシュコヒーレンシを実現するために、ブロードキャスト方式のスヌープを採用している場合、コアの2乗に比例してスヌープ回数が増える。そのためコモンバスに乗るCPUの数は4コア程度が限度。


現在のスマートフォンで使われているCortex-A9が4コアまでのコンフィグになっているのはココらへんの事情か?

スヌープフィルタを使い、スヌープ回数を減らすことはできる。これによりIntelのItanium2は16CPUまで可能になっているそうだ。
(Cortex-A9にはSCUでスヌープフィルタ機能を持っている) 

これを解決するには、アドレスバスのインタリーブやデュプリケートタグを使えばいいそうだ。SunのStarFireが64チップ、富士通のPrimePower2500が128チップ構成をとっていると。

バスインタリーブとは、1つのCPUから複数のバスに接続してあり、アクセスするアドレスによってバスを選択することで、アクセスを分散することができ、バスが他のCPUに使われていてメモリにアクセスが出来ない確率を減らす。
(ARMではAMBA3からインターコネクトで同じことを行なっている) 

ディレクトリ型という構成もあり、ノードというCPUとメモリを持ち、自分のノードのメモリデータがどのノードのキャッシュに保持されているかを管理するという方式。しかしこの方式ではどこにメモリデータが保持されているかを記録するために、メインメモリとは別のメモリが必要になり、メインメモリの2倍の容量が必要になる。ただし簡略化することでサイズを圧縮することは可能。