共有メモリと分散メモリ

ここまでは、ハードウェアでシステム全体のメモリに対してキャッシュコヒーレンシを取るシステムについて説明してきたが、プロセサごとのローカルメモリは独立で相互には無関係というシステムもある。

最近の例では、IBM、ソニー、東芝の連合が開発したCellプロセサはこのようなシステムである。CELLプロセサに含まれる8個のSynergistic Processing Element(SPE)と呼ぶプロセサコアに内蔵された256KBのメモリはローカルメモリであり、他のSPEのローカルメモリのデータを直接参照することはできない。また、ローカルメモリの内容と、Cellプロセサに接続されたメインメモリの内容の間にも直接の関係はなく、ソフトウェアで明示的にDMAを起動して、データを転送するという構造になっている。このような構造を分散メモリという。

分散メモリの場合は、明示的にプログラムでデータの転送を行う必要があり、共通メモリで自動的にキャッシュコヒーレンシが維持されるシステムと比較して、プログラムを書くのが難しいと言われる。一方、共通メモリのキャッシュでは、タグとヒットの判定回路やコヒーレンシを維持する回路が必要となり、ハードウェアの負担が大きい。また、他のデータのアクセスで、本来はキャッシュに残っていて欲しいデータが知らない間に追い出されてしまって予期せぬ性能低下が起こるという問題が発生する場合がある。分散メモリは、この逆で、このような追加の回路は不要でハードウェアがコンパクトになり、また、入れたはずのデータが知らないうちに追い出され、上書きで消されるということは無く、ちゃんとプログラムを書けば、性能が高いという利点がある。

また、サーバシステムのレベルでも、前述のSunのStarfireやSGIのOriginのように、ハードウェアでキャッシュコヒーレンシが維持された共通メモリのシステムと、PCクラスタのようにノードごとにメモリが独立した分散メモリのシステムがある。PCクラスタは、2ソケットや4ソケット程度の小規模な共有メモリの薄型サーバやブレードを、EthernetやInfiniBandなどで接続したシステムである。

大容量の共有メモリが使えるサーバは、大きなメモリ空間を必要とする科学技術計算や、巨大なバッファメモリ領域を使って性能を上げるデータベースの処理には最適であるが、キャッシュコヒーレンシ機構(に加えて運用管理、高信頼機構など)を必要とするので、ハードウェアとしては高価になる。

一方、Webのフロントエンドなどでは、相互に無関係でそれぞれは小規模な処理を大量に実行するので共有メモリである必要はなく、安価なPCサーバをEthernetなどで接続した分散メモリ型のクラスタシステムが適している。