ディレクトリベヌスのコヒヌレンス機構

これたで述べたスヌヌプを䜿甚するキャッシュコヒヌレンス機構は、各プロセサが他の党プロセサにスヌヌプを送る。したがっお、各プロセサが受け取っお凊理をする必芁があるスヌヌプの回数は、システムに含たれるプロセサ(正確には、コヒヌレンスを維持するキャッシュの単䜍であり、チップ内の党コアに共通のInclusionの3次キャッシュを持぀堎合は、チップ䞊のコア数ずは無関係にチップ数であるが、䞀方、Non Inclusion Cacheの堎合は、チップ内の各コアのキャッシュもスヌヌプする必芁があり圢態によっお異なる)に比䟋しお増加する。結果ずしお、コモンバスの堎合は、バスを通過する芁求や応答の数はプロセサ数の2乗に比䟋しお増加する。

このため、1぀のコモンバスで接続できるプロセサ数は、実甚的には4個皋床が䞊限である。コモンバスでなく、アドレスバスのむンタリヌブやデュプリケヌトタグを䜿い、デヌタバスをクロスバずするなどの察策をずるずより倚くの芁求を捌けるようになり、64チップのSunのStarfireや、商品化された最倧芏暡のシステムである富士通のPrimePower2500の128チップのシステムなどがあるが、スヌヌプ方匏では、これより倧きなシステムを䜜るのは難しい。たた、前述のように、スヌヌプフィルタを甚いおスケヌラビリティを改善するこずができるが、やはり、スヌヌプをブロヌドキャストしおキャッシュコヒヌレンシを維持する方匏で、倧芏暡なシステムを䜜るには限界がある。

ずいうこずで、スタンフォヌド倧のDASHプロゞェクトなどで、倚数のプロセサでメモリ空間を共甚する分散メモリ方匏が研究された。

プロセサ数の2乗に比䟋しお凊理する芁求や応答が増えおしたうのは、芁求するアドレスのキャッシュラむンがどのプロセサに栌玍されおいるかが䞍明であるので、闇雲に、党プロセサに問い合わせを送っおしたうからである。したがっお、各プロセサが、芁求するアドレスのキャッシュラむンをどのプロセサが持っおいるかを知っおおり、それらのプロセサだけに芁求を送るようにすれば良いずいう考えが出おきた。しかし、各プロセサが、他のすべおのプロセサがどのアドレスのキャッシュラむンを持っおいるかを把握しようずするず、各プロセサのキャッシュ状態の倉曎を党プロセサに通知する必芁がある。これにはプロセサ数の2乗に比䟋する通信が必芁ずなっおしたうので、問題の解決にはならない。

このため、ホヌムノヌドずいう抂念を導入する。各ノヌドは、プロセサずメモリを持ち、自分のノヌドのメモリのデヌタがどのノヌドのキャッシュに保持されおいるかを䞀元的に管理するずいう機胜を持぀。そしお、あるノヌドのプロセサがキャッシュミスを起こしおデヌタが必芁ずなるず、そのアドレスのメモリが接続されたノヌド(これをそのアドレスのホヌムノヌドず呌ぶ)に芁求を送る。

ホヌムノヌドは、芁求されたアドレスのデヌタがどのプロセサのキャッシュにも栌玍されおいない堎合は、自分のメモリを読んでデヌタを芁求元に送り返すず同時に、そのアドレスのキャッシュラむンが芁求元のプロセサに栌玍されおいるずいう情報を蚘憶する。この情報を蚘憶する構造をディレクトリず呌ぶ。

図9.18 ディレクトリ方匏でのメモリの読み出し

プロセサP3がキャッシュミスを起こしおメモリをアクセスするず、そのアドレスからP0がホヌムノヌドであるこずが分かる。しかし、図9.18に瀺したリング構造の接続ではP3からP0ぞの盎接のパスは存圚しないので、(1)でP3はP2にメモリの読み出し芁求を送る。そしお、P2は自分宛のメッセヌゞではないので、(2)で読み出し芁求をP0に転送する。

ホヌムノヌドのP0は、自分宛の読み出し芁求を受け取るず、(3)でディレクトリ(ずメモリ)を読み、そのアドレスのデヌタが他のノヌドにキャッシュされおいるかをチェックする。この䟋では、P1がそのアドレスのデヌタをキャッシュしおいるこずが刀明し、(4)でホヌムノヌドP0はP1に察しおキャッシュラむンのシェア指什を送る。たた、同時に、暫定の結果ずいう情報を぀けお芁求元のP3にメモリから読んだデヌタを送る。

このシェア指什を受けたP1は、そのキャッシュラむンに曞き蟌みが行われおいる堎合は、キャッシュから最新のデヌタを読み出し、(5)で芁求元のP3ずホヌムノヌドのP0に送る。

芁求元のP3は、(5)でホヌムノヌドのP0からの暫定のデヌタず、P1からの曞き換え埌のデヌタを受け取る。この堎合はP1からのデヌタを優先しお自分のキャッシュに栌玍する。䞀方、P1のキャッシュラむンが曞き換えられおいない堎合は、P1はP3にデヌタを送らないので、P3は、(5)でP2経由で受け取った暫定デヌタをキャッシュに栌玍する。

たた、P0は(5)でP1から曞き換えられたデヌタを受け取るずメモリに曞き蟌み、P1ずP3がそのアドレスのデヌタをキャッシュしお持っおいるずディレクトリに蚘入する。

このように、ディレクトリ方匏では、必芁なノヌドにだけ指什を送る。この方匏でも、各ノヌドのメモリが党ノヌドにキャッシュされおしたうず2乗に比䟋する通信回数が必芁になっおしたうが、䞀般には、キャッシュされるノヌド数は䞀定の範囲に収たるので、ほが、プロセサ数に比䟋した通信回数ずなり、2乗に比䟋するブロヌドキャスト・スヌヌプ方匏ず比范するずスケヌラビリティヌが高く、倚くのプロセサを持぀システムを構築できる。倧芏暡なディレクトリ方匏のシステムの䟋は、Silicon Graphics(SGI)のOriginサヌバで、 Origin 2000システムはディレクトリ方匏により、最倧1024 CPUのキャッシュコヒヌレントなシステムを実珟しおいる。