(57)【特許請求の範囲】
【請求項１】
１台以上のプロセッサと主記憶装置とキャッシュメモリとを備えたクラスタを複数具備するとともに、該複数のクラスタを接続するネットワークを具備し、各クラスタ内のプロセッサは自クラスタ内または他クラスタ内の主記憶装置上のデータをブロック単位で自クラスタ内のキャッシュメモリにキャッシング可能な並列計算機のプロセッサ間データ一貫性保証装置であって、
前記クラスタ内の主記憶装置は、ブロック毎に当該主記憶ブロックをキャッシングしているクラスタを複数記録するための主記憶ディレクトリを備え、
前記クラスタ内のキャッシュメモリは、キャッシュライン毎に当該キャッシュラインでキャッシングしているのと同一の主記憶ブロックをキャッシングしているクラスタを複数記録するためのキャッシュディレクトリを備え、
前記主記憶ディレクトリおよび前記キャッシュディレクトリは、当該主記憶ブロックをキャッシングしているクラスタを記録する態様として２種類以上の態様の中から１つの態様を主記憶ブロックまたはキャッシュライン毎に選択可能であり、選択された態様で当該主記憶ブロックをキャッシングしているクラスタを記録するとともに、該態様を示すモードフィールドを備え、
前記クラスタは、自クラスタおよび他クラスタからの主記憶装置のアクセス時に、自クラスタ内の主記憶ディレクトリおよび主記憶ディレクトリのモードフィールドを制御し、主記憶ディレクトリに記録されている複数のクラスタに対し、前記ネットワークを介してキャッシュ制御用の通信を発行するための主記憶制御回路を備え、
前記クラスタは、自クラスタおよび他クラスタからのキャッシュ制御用の通信受信時に、自クラスタ内のキャッシュディレクトリおよびキャッシュディレクトリのモードフィールドを制御し、キャッシュディレクトリに記録されている複数のクラスタに対し、前記ネットワークを介してキャッシュ制御用の通信を発行するためのキャッシュ制御回路を備えたことを特徴とする並列計算機のプロセッサ間データ一貫性保証装置。
【請求項２】
前記主記憶ディレクトリは、対応する主記憶ブロックをキャッシングしたクラスタを複数記録し、
前記主記憶ディレクトリに記録された各クラスタ内の、当該キャッシュラインに対応するキャッシュディレクトリは、同一主記憶ブロックをキャッシングした他のクラスタを複数記録し、
前記キャッシュディレクトリに記録された各クラスタ内の、当該キャッシュラインに対応するキャッシュディレクトリは、同一主記憶ブロックをキャッシングした他のクラスタを複数記録していくことにより、
主記憶ディレクトリを根ノードとしキャッシュディレクトリを中間ノードまたは葉ノードとする木構造のディレクトリの連鎖を作成し、同一主記憶ブロックをキャッシングした全てのクラスタを該木構造で表すことにより、主記憶ブロックのキャッシング状態を管理する請求項１に記載の並列計算機のプロセッサ間データ一貫性保証装置。
【請求項３】
前記キャッシングしているクラスタを記録する態様の一つとしてポインタモードを設け、
前記主記憶ディレクトリまたは前記キャッシュディレクトリがポインタモードであるときは、該ディレクトリに、複数のクラスタ番号部と、各クラスタ番号部に対応してそのクラスタ番号部の有効または無効を表わすためのクラスタ番号存在フラグを設けるとともに、該ディレクトリのモードフィールドはポインタモードに設定し、該クラスタ番号存在フラグが有効であるクラスタ番号部により前記キャッシングしているクラスタを指し示すようにする請求項１または２に記載の並列計算機のプロセッサ間データ一貫性保証装置。
【請求項４】
あらかじめ並列計算機の全クラスタを１つ以上のクラスタからなるクラスタグループに分割し、
前記キャッシングしているクラスタを記録する態様の一つとしてビットマップモードを設け、
前記主記憶ディレクトリまたは前記キャッシュディレクトリがビットマップモードであるときは、該ディレクトリに、各ビットがそれぞれ同一クラスタグループ内の各クラスタの有効または無効を示すようなビットマップを設け、該ビットマップ中の有効を示すビットにより前記キャッシングしているクラスタを指し示すようにする請求項１または２に記載の並列計算機のプロセッサ間データ一貫性保証装置。
【請求項５】
自クラスタまたは他クラスタ上の主記憶装置への書き込みの際に、
書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックの主記憶ディレクトリにより指し示される全てのクラスタに対して無効化要求を発行し、
無効化要求を受けたクラスタのキャッシュ制御回路は、当該主記憶ブロックに対応するキャッシュラインを無効化するとともに、対応するキャッシュディレクトリにより指し示される全てのクラスタに対して無効化要求を発行していくことにより、同一主記憶ブロックをキャッシングした全てのクラスタ内の対応するキャッシュラインを無効化する請求項１または請求項２に記載の並列計算機のプロセッサ間データ一貫性保証装置。
【請求項６】
自クラスタまたは他クラスタ上の主記憶装置への書き込みの際に、
書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックの主記憶ディレクトリにより指し示される全てのクラスタに対して当該主記憶ブロックに書き込んだ書き込みデータを送信し、
該書き込みデータを受けたクラスタのキャッシュ制御回路は、当該主記憶ブロックに対応するキャッシュラインに該書き込みデータをコピーするとともに、対応するキャッシュディレクトリにより指し示される全てのクラスタに対して該書き込みデータを送信していくことにより、同一主記憶ブロックをキャッシングした全てのクラスタ内の対応するキャッシュラインを更新する請求項１または請求項２に記載の並列計算機のプロセッサ間データ一貫性保証装置。
【請求項７】
自クラスタまたは他クラスタ上の主記憶装置への書き込みの際に、
書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックの主記憶ディレクトリにより指し示される全てのクラスタに対して無効化要求を発行し、
無効化要求を受けたクラスタのキャッシュ制御回路は、当該主記憶ブロックに対応するキャッシュラインを無効化するとともに、対応するキャッシュディレクトリにより指し示される全てのクラスタに対して無効化要求を発行し、該無効化要求発行の相手先である全てのクラスタから無効化完了通信を受けたら、自クラスタに対して無効化要求を発行したクラスタに無効化完了通信を発行し、
書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックに対応する主記憶ディレクトリにより指し示される全てのクラスタから無効化完了通信を受けたら、書き込みを発行したクラスタに対して無効化完了通信を送信し、
書き込みを発行したクラスタは、無効化完了通信を受けるまで待つことにより、全クラスタに対する書き込みの完了を保証することができる請求項５に記載の並列計算機のプロセッサ間データ一貫性保証装置。
【請求項８】
自クラスタまたは他クラスタ上の主記憶装置への書き込みの際に、
書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックに対応する主記憶ディレクトリにより指し示される全てのクラスタに対して当該主記憶ブロックに書き込んだ書き込みデータを送信し、
該書き込みデータを受けたクラスタのキャッシュ制御回路は、当該主記憶ブロックに対応するキャッシュラインに該書き込みデータをコピーするとともに、対応するキャッシュディレクトリにより指し示される全てのクラスタに対して該書き込みデータを含む更新要求を送信し、該更新要求の相手先である全てのクラスタから更新返答通信を受けたら、自クラスタに対して更新要求を発行したクラスタに更新返答通信を発行し、
書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックに対応する主記憶ディレクトリにより指し示される全てのクラスタから更新返答通信を受けたら、書き込みを発行したクラスタに対して更新返答通信を送信し、書き込みを発行したクラスタは、更新返答通信を受けるまで待つことにより、全クラスタに対する書き込みの完了を保証することができる請求項６記載の並列計算機のプロセッサ間データ一貫性保証装置。
【請求項９】
前記主記憶ブロックまたは前記キャッシュラインに対し、ブロック毎にディレクトリを持つ代わりに、ディレクトリ用メモリ領域を用意し、当該ブロックから指し示すべきクラスタがある場合にのみ該ディレクトリ用メモリ領域に当該ブロックのディレクトリを登録する請求項１から８の何れか１つに記載の並列計算機のプロセッサ間データ一貫性保証装置。
【請求項１０】
自クラスタまたは他クラスタからの主記憶装置のアクセス時に、クラスタ内のいずれかのプロセッサが、前記主記憶制御回路に代わって、主記憶ディレクトリおよび主記憶ディレクトリのモードフィールドを制御し、主記憶ディレクトリに記録されている複数のクラスタに対し、前記ネットワークを介してキャッシュ制御用の通信を発行する処理の一部乃至全部を行う請求項１から９の何れか１つに記載の並列計算機のプロセッサ間データ一貫性保証装置。
【請求項１１】
自クラスタまたは他クラスタからのキャッシュ制御用の通信受信時に、クラスタ内のいずれかのプロセッサが、前記キャッシュ制御回路に代わって、キャッシュディレクトリおよびキャッシュディレクトリのモードフィールドを制御し、キャッシュディレクトリに記録されている複数のクラスタに対し、前記ネットワークを介してキャッシュ制御用の通信を発行する処理の一部乃至全部を行う請求項１から１０の何れか１つに記載の並列計算機のプロセッサ間データ一貫性保証装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、複数計算機で共有するデータの一貫性を保証するプロセッサ間データ一貫性保証装置に関する。
【０００２】
【従来の技術】
複数のプロセッサを結合し並列処理を行う並列計算機は、プロセッサ台数に応じた計算の高速化を図ることが可能であるため、重要な技術となっている。並列計算機において、各プロセッサが相互に並列計算機上の全主記憶をアクセスし、これをキャッシングする場合、プロセッサ間でのキャッシュの一貫性の保証が重要な課題となる。
【０００３】
キャッシュの一貫性の保証とは、各プロセッサが、それぞれ独立に主記憶の内容を自プロセッサのキャッシュメモリ上に保持するときに、全プロセッサに対して主記憶の内容が同一に見えることを保証することである。
【０００４】
例えば、プロセッサＡおよびプロセッサＢが主記憶上のブロックＭをキャッシングしている場合、プロセッサＣがブロックＭに対して書き込みを行うと、プロセッサＡおよびＢのキャッシュメモリの内容は主記憶装置上の当該ブロックＭの内容と異なることとなり一貫性が取れなくなる。この場合、キャッシュの一貫性を保証するためには、プロセッサＡおよびＢの対応するキャッシュラインを更新するか、無効化する必要がある。
【０００５】
バス結合型並列計算機の場合、キャッシュの一貫性を保つ方法としてスヌープ方式が使用される。スヌープ方式では、各プロセッサのキャッシュ制御装置が、バス上に出力される全ての書き込み要求のアドレスを監視する。そして、他プロセッサが、自プロセッサのキャッシュに保持しているメモリブロック（主記憶上のブロックを単にメモリブロックと呼ぶこととする）に対する書き込み要求をバスに出力すると、当該キャッシュラインを無効化する。これにより、次回に当該メモリブロックにアクセスを行うと、当該メモリブロックはすでにキャッシュから無効化されているため、主記憶を直接読み出すこととなり、最新のデータをアクセスすることができる。スヌープ方式では、他プロセッサから自プロセッサの保持するメモリブロックに対して書き込みを行う際、当該キャッシュラインを無効化する代わりに、自プロセッサのキャッシュラインを最新データに更新する方式も提案されている。
【０００６】
バス結合型並列計算機は、プロセッサ台数が増加すると、メモリアクセスがバスに集中するため、十数プロセッサ程度の規模がプロセッサ数の限界となる。
【０００７】
さらにプロセッサ台数を増やす場合、主記憶上のキャッシングの対象となるブロック毎にディレクトリと呼ばれる構造体を付加することにより、各プロセッサのキャッシュの一貫性を保証する方式が用いられる。
【０００８】
ディレクトリは、当該メモリブロック（そのディレクトリに対応するメモリブロック）をキャッシングした全プロセッサのプロセッサ番号を保持する領域である。メモリブロックに対して書き込み要求が到着すると、ディレクトリで示された全プロセッサのキャッシュラインに対して書き込みを反映するか無効化することによりキャッシュの一貫性を保証する。
【０００９】
従来、プロセッサ台数が比較的少ない場合には、ディレクトリ方式として、フルマップディレクトリが主に採用されている。図１４に、フルマップディレクトリ方式を用いた並列計算機の構成の概要およびその動作を示す。
【００１０】
図１４の並列計算機では、主記憶装置３０がネットワーク２０を介して複数のプロセッサ１０ａ〜１０ｄに結合されている。各プロセッサ１０ａ〜１０ｄは、それぞれ、キャッシュメモリ１２ａ〜１２ｄを持つ。また、主記憶装置３０は、複数のメモリブロック３１で構成され、各メモリブロック３１毎にディレクトリ３２が付加されている。
【００１１】
ディレクトリ３２は、プロセッサ台数分のビット列（各ビットは各プロセッサに対応している）からなる。ディレクトリ３２の各ビットは、各プロセッサ１０ａ〜１０ｄに付加されたキャッシュが、対応するメモリブロック３１をキャッシングしたときに１となり、キャッシングしていないときには０となる。図１４では、プロセッサ１０ａおよび１０ｄが、キャッシュメモリ１２ａおよび１２ｄ上にメモリブロックＭをキャッシングしている。したがって、メモリブロックＭに対応するディレクトリ３２においては、プロセッサ１０ａおよび１０ｄに対応するビットが１となり、プロセッサ１０ｂおよび１０ｃに対応するビットが０となっている。
【００１２】
この状態で、例えばプロセッサ１０ｂがメモリブロックＭに対して書き込みを行うと、その書き込みアクセスはネットワーク２０を介して主記憶装置３０に送信される。主記憶装置３０は、書き込みデータをメモリブロックＭに書き込むと共に、ディレクトリ３２を見てメモリブロックＭをキャッシングしているプロセッサはプロセッサ１０ａおよびプロセッサ１０ｄであることを知り、キャッシュ１２ａおよび１２ｄに対して無効化要求を発行する。無効化要求を受けたキャッシュ１２ａおよび１２ｄは、メモリブロックＭのコピーをキャッシュメモリ内から抹消する。これにより、以降にプロセッサ１０ａまたはプロセッサ１０ｂがメモリブロックＭに読み出しアクセスを行うと、キャッシュ１２ａおよび１２ｄ内にはメモリブロックＭのコピーが存在せず、主記憶装置３０に対してアクセスすることとなり、最新データを読み出すことができる。
【００１３】
プロセッサ台数がさらに多くなると、フルマップディレクトリではディレクトリに必要なメモリ量の全メモリ量に対する割合が大きくなる。プロセッサ数をＰとするとメモリブロック当たりＰビットのディレクトリが必要となる。メモリブロックは、通常６４バイトから１０２４バイト程度の大きさであり、フルマップディレクトリで数百プロセッサ以上の並列計算機を構成すると、ディレクトリはメモリブロックあたり十数バイトから百バイト程度となり実用的でない。
【００１４】
このため、数百プロセッサ以上の並列計算機のディレクトリ方式として、例えば「Computer Architecture News Vol.19, No.5, 1991,『Two Economical Directory Schemes for Large-Scale Cache Coherent Multiprocessors』, Yeong-Chang Maaほか」には、ツリーディレクトリ方式および階層型フルマップディレクトリ方式が提案されている。
【００１５】
ツリーディレクトリ方式は、メモリブロックおよびキャッシュライン毎に複数のプロセッサ番号を記憶するディレクトリを設け、これを木構造に連結することにより、当該メモリブロックをキャッシングしている全プロセッサを記録する方式である。例えば、メモリブロックおよびキャッシュライン毎に４つのプロセッサ番号を記憶するディレクトリを設けるとする。あるメモリブロックＭのディレクトリには、当該メモリブロックＭをキャッシングしている４つのプロセッサのプロセッサ番号が記憶されている。さらに、その４つのプロセッサのそれぞれにおいて、当該メモリブロックＭをキャッシングしているキャッシュラインのディレクトリには、やはり当該メモリブロックＭをキャッシングしている４つのプロセッサのプロセッサ番号が記憶されている。以下同様にして、当該メモリブロックＭをキャッシングしている全プロセッサを木構造の形式で記録することができる。
【００１６】
メモリブロックに対して書き込みが行われたときには、当該メモリブロックのディレクトリから木構造をたどって当該メモリブロックＭをキャッシングしている全プロセッサを知ることができる。このツリーディレクトリ方式では、全プロセッサ数をＰ、１ディレクトリ当たりに記憶できるプロセッサ番号の数をＮとすると、ディレクトリ当たりＮｌｏｇ2Ｐビットの記憶領域を使用する。
【００１７】
一方、階層型フルマップディレクトリ方式は、メモリブロックおよびキャッシュライン毎にビットマップを持ち、これを木構造に連結することにより、当該メモリブロックをキャッシングしている全プロセッサを記録する方式である。メモリブロックおよびキャッシュライン毎に設けられたビットマップの各ビットは、下位のプロセッサ（またはディレクトリ管理専用の制御ノード）に対応づけられている。最下位のビットマップは、対応するプロセッサグループ内の全プロセッサのキャッシング状況を示す。上の階層のビットマップは、プロセッサグループ単位でのキャッシング状況を示す。
【００１８】
主記憶上のメモリブロックに対して書き込みが行われたとき、主記憶の制御回路は、当該メモリブロックのディレクトリからビットマップを読み出す。そして、そのビットマップ中で１が立っているビットを探す。１が立っているということは、そのビットに対応するプロセッサグループ内の何れかのプロセッサで当該メモリブロックをキャッシングしているということである。そこで、主記憶の制御回路は、読み出したビットマップ中で１が立っているビットに対応するすべてのプロセッサグループのディレクトリ管理回路に対して無効化の要求を出す。この無効化の要求を受けたプロセッサグループのディレクトリ管理回路では、キャッシュ制御回路により、ディレクトリからビットマップを読み出し、そのビットマップ中で１が立っているビットを探す。１が立っているということは、そのビットに対応するプロセッサで当該メモリブロックをキャッシングしているということである。そこで、キャッシュ制御回路は、読み出したビットマップ中で１が立っているビットに対応するすべてのプロセッサに対して無効化要求を出す。このようにして、書き込みが行われたメモリブロックをキャッシングしているすべてのプロセッサに対して無効化を出すことができる。
【００１９】
【発明が解決しようとする課題】
上記従来技術のうち、ツリーディレクトリ方式では、階層の高さ（深さ）が深くなるため、無効化の処理に時間がかかる。例えば、１０２４台のプロセッサからなる並列計算機で４プロセッサを指すことができるディレクトリを使用した場合、４×４×４×４×４＝１０２４であるため最大６階層となる。したがって、無効化のための通信に最大５ステップの通信が行われるため時間がかかる。
【００２０】
一方、上記従来技術のうち、階層型フルマップディレクトリ方式では、最上位の主記憶の制御回路からはプロセッサグループ単位でのキャッシング状況しか見えないため、プロセッサグループ内のどのプロセッサに対して無効化要求を出せばよいかを選択することができない。よって、階層型フルマップディレクトリ方式では、プロセッサグループごとにディレクトリ管理専用の制御ノードの役割を果たすハードウェアを設けるか、またはプロセッサグループ内の特定プロセッサが該プロセッサグループを代表してディレクトリの管理を行うようにする必要がある。したがって、ディレクトリ管理ノードに対してキャッシュ制御に伴う通信が集中するという問題がある。
【００２１】
本発明の目的は、多数のプロセッサからなる並列計算機において、ツリーディレクトリ方式や階層型フルマップディレクトリ方式と同程度の大きさのディレクトリしか使用せず、ツリーディレクトリ方式より階層が低く、階層型フルマップディレクトリ方式のように特定のディレクトリ管理ノードへのアクセスが集中しないディレクトリ管理方式を用いたプロセッサ間データ一貫性保証装置を提供することにある。
【００２２】
【課題を解決するための手段】
本発明は、並列計算機においてキャッシュの一貫性を保証するために、主記憶ブロックおよびキャッシュラインごとにディレクトリを保持し、これらのディレクトリでは当該主記憶ブロックをキャッシングしているクラスタを記録する態様として２種類以上の態様の中から１つの態様を主記憶ブロックまたはキャッシュライン毎に選択可能であるようにし、選択された態様で当該主記憶ブロックをキャッシングしているクラスタを記録するとともに、該態様を示すモードフィールドを備えるようにしたことを特徴とする。そして、主記憶制御回路およびキャッシュ制御回路で、ディレクトリおよびモードフィールドを制御し、ディレクトリに記録されている複数のクラスタに対し、ネットワークを介してキャッシュ制御用の通信を発行するようにする。
【００２３】
特に、主記憶ブロックのディレクトリを根として、当該主記憶ブロックをキャッシングした全クラスタのキャッシュラインのディレクトリを木構造の連鎖で結合して管理するとよい。また、各主記憶ブロックおよびキャッシュラインのディレクトリは、複数のクラスタへのポインタとして動作するポインタモードと、ビットマップとして動作するビットマップモードを備え、ポインタモードでは、任意のクラスタを指し、ビットマップとして動作するモードでは、クラスタグループ内の全クラスタのキャッシングの状態を示すようにする。
【００２４】
主記憶ブロックへの書き込みの際に、書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックの主記憶ディレクトリにより指し示される全てのクラスタに対して無効化要求を発行し、無効化要求を受けたクラスタのキャッシュ制御回路は、当該主記憶ブロックに対応するキャッシュラインを無効化するとともに、対応するキャッシュディレクトリにより指し示される全てのクラスタに対して無効化要求を発行していくことにより、同一主記憶ブロックをキャッシングした全てのクラスタ内の対応するキャッシュラインを無効化するようにする。書き込みデータを送信して、同一主記憶ブロックをキャッシングしている全てのクラスタ内の対応するキャッシュラインを更新するようにしてもよい。
【００２５】
主記憶ブロックへの書き込みの際に、キャッシュの無効化や更新の要求を発行した場合、無効化完了通信や更新返答通信を受けるのを待つことにより、全クラスタに対する書き込みの完了を保証するようにしてもよい。
【００２６】
ディレクトリはブロックごとに持ってもよいし、別のディレクトリ用メモリ領域を用意し、当該ブロックから指し示すべきクラスタがある場合にのみ該ディレクトリ用メモリ領域に当該ブロックのディレクトリを登録するようにしてもよい。また、主記憶制御回路やキャッシュ制御回路の機能をクラスタ内の特定のプロセッサで代替するようにしてもよい。
【００２７】
【作用】
本発明によれば、各ディレクトリにクラスタを記録する態様として２種類以上の態様の中から１つを選択できる。したがって、階層の高さが低い方式、ディレクトリの大きさが大きくない方式、特定のノードへのアクセスが集中しない方式などを組み合わせることができる。特に、各ディレクトリは、複数クラスタへのポインタとして動作するポインタモードと、クラスタグループ内の全クラスタのビットマップとして動作するビットマップモードを持つ。これにより、ツリーディレクトリで構成する木構造の下位数階層をビットマップ１階層に置き換えることができ、ツリーディレクトリ方式と比較して階層が少なくなる。また、上位階層はポインタによるツリー構造となり、任意のクラスタを指すことができる。このため、階層型フルマップディレクトリ方式のようにディレクトリ管理専用回路を設けることや、特定のクラスタにディレクトリの管理を行わせる必要がなく、特定の回路またはクラスタに対して通信が集中することがない。
【００２８】
【実施例】
以下、図面を用いて本発明の実施例を説明する。
【００２９】
（実施例１）
まず、本発明の第１の実施例について説明する。図１は、第１の実施例に係る並列計算機を示す。本実施例では、複数のクラスタ１００がネットワーク２００により結合されている。図１において、１０１はプロセッサであり、従来技術におけるマイクロプロセッサと同じ構成でよい。クラスタ１００は、１つ以上のプロセッサからなる密結合マルチプロセッサ構成を取る。
【００３０】
各クラスタ１００は、複数のプロセッサ１０１と、１つのキャッシュメモリ１０２、主記憶装置１０３、キャッシュ制御回路１０４、主記憶制御回路１０５、およびネットワークインターフェイス回路１１２からなる。また、ネットワーク２００において、あるクラスタＡから同一クラスタＢに対して複数の通信を行った場合、クラスタＡにおける発行順とクラスタＢにおける到着順とは同じであるものとする。
【００３１】
主記憶装置１０３は、従来技術を用いてアドレス線およびデータ線を使ってアクセスする。主記憶装置１０３は複数のメモリブロック１０６からなり、メモリブロック１０６毎に主記憶ディレクトリ１０７が設けられている。主記憶ディレクトリ１０７内にはモードフィールド１１０が設けられている。主記憶装置１０３は、当該クラスタ１００内のプロセッサ１０１からアクセスされると共に、他のクラスタ１００内のプロセッサ１０１からもアクセスされる。すなわち、各クラスタ１００内の主記憶装置１０３は、全クラスタにより共有される記憶領域である。
【００３２】
キャッシュメモリ１０２は、メモリブロック１０６と同じ大きさのキャッシュライン１０８からなり、キャッシュライン毎にキャッシュディレクトリ１０９が設けられている。キャッシュディレクトリ１０９内にはモードフィールド１１０が設けられている。キャッシュライン１０８に、自クラスタ１００および他クラスタ内の主記憶装置１０３のメモリブロック１０６のコピーを格納することにより、キャッシングを行う。
【００３３】
キャッシュ制御回路１０４は、キャッシュメモリ１０２およびキャッシュディレクトリ１０９を制御する回路である。
【００３４】
主記憶制御回路１０５は、主記憶装置１０３の読み出し、書き込みおよび主記憶ディレクトリ１０７の制御を行う回路である。ネットワークインターフェイス回路１１２は、ネットワーク２００を通じて他クラスタのネットワークインターフェイス回路と接続されており、クラスタ１００内から自クラスタまたは他クラスタの主記憶装置へのメモリアクセス、他クラスタから自クラスタ１００の主記憶装置１０３へのメモリアクセス、およびクラスタ間のディレクトリ制御通信の送受信を行う回路である。
【００３５】
本実施例では、主記憶ディレクトリ１０７およびキャッシュディレクトリ１０９にモードフィールド１１０を設け、ディレクトリに複数の動作モードを設けることに特徴がある。
【００３６】
図３に、主記憶ディレクトリ１０７およびキャッシュディレクトリ１０９の構造を示す。１つのディレクトリは、モードフィールド１１０およびクラスタ記憶フィールド１５０よりなる。本実施例では、並列計算機のクラスタ数は１０２４、クラスタ当たりのプロセッサ数は１としており、ディレクトリのモードフィールド１１０は２ビット、クラスタ記憶フィールド１５０は６４ビットの大きさとしており、全クラスタを６４クラスタからなるクラスタグループ１６個に分割しているが、本発明は、並列計算機のクラスタ数、クラスタ当たりのプロセッサ数およびディレクトリのサイズに関らず用いることができる。
【００３７】
ここで、クラスタ番号について説明しておく。本実施例ではクラスタ数が１０２４であるので、各クラスタには０〜１０２３（２進数で表すと、１０ビットで００…０から１１…１）のクラスタ番号が付けられている。この１０ビットのクラスタ番号の上位４ビットが等しいクラスタが同じクラスタグループに属するようにクラスタグループを形成する。例えば、１０ビットのクラスタ番号が００００＊＊＊＊＊＊である６４個のクラスタが１つのクラスタグループ、１０ビットのクラスタ番号が０００１＊＊＊＊＊＊である６４個のクラスタが１つのクラスタグループ、１０ビットのクラスタ番号が００１０＊＊＊＊＊＊である６４個のクラスタが１つのクラスタグループ、…というような具合である。＊は、０または１の任意の１ビットデータを示すものとする。
【００３８】
図３を参照して、ディレクトリの構造について説明する。ディレクトリは、ポインタモード１６０、ビットマップモード１７０、および終端モード１８０を持つ。モードに応じて、クラスタ記憶フィールド１５０の用い方が異なるようになっている。
【００３９】
ポインタモード１６０は、モードフィールド１１０ａが００（２進）であるモードである。ポインタモード１６０において、クラスタ記憶フィールド１５０には、４つの１０ビットのクラスタ番号１６１−０，１６１−１，１６１−２，１６１−３および各クラスタ番号に対応するクラスタ番号存在フラグ１６２−０，１６２−１，１６２−２，１６２−３が記憶される。クラスタ番号存在フラグ１６２が０の場合は、そのクラスタ番号存在フラグに対応するクラスタ番号が無効であることを示す。クラスタ番号存在フラグが１の場合は、そのクラスタ番号存在フラグに対応するクラスタ番号が有効であり、そのクラスタ番号で指されるクラスタに同一のメモリブロック１０６がキャッシングされていることを示す。
【００４０】
ビットマップモード１７０は、モードフィールド１１０ｂが０１（２進）であるモードである。ビットマップモード１７０において、クラスタ記憶フィールド１５０には、６４ビットのビットマップ１７１が記憶される。ビットマップ１７１の各ビットは、当該ディレクトリを保持するクラスタが含まれるクラスタグループ内のキャッシング状況を示しており、ビットマップ１７１のビットが１ならば、当該ビットに対応するクラスタが同一メモリブロック１０６をキャッシングしていることを示す。
【００４１】
なお、クラスタグループ内におけるビットマップ１７１の各ビットとクラスタとの対応は、クラスタ番号の下位６ビットによってビットマップ１７１内の対応ビットの位置を示すようになっている。すなわち、ビットマップ１７１内の第ｋ番目のビットは、クラスタ番号の下位６ビットがｋ−１であるクラスタに対応する。例えば、ビットマップ１７１の先頭ビットはクラスタ番号の下位６ビットが０（１０進）であるクラスタに対応し、ビットマップ１７１の第２番目のビットはクラスタ番号の下位６ビットが１（１０進）であるクラスタに対応し、ビットマップ１７１の第３番目のビットはクラスタ番号の下位６ビットが２（１０進）であるクラスタに対応し、…、ビットマップ１７１の第６４番目のビットはクラスタ番号の下位６ビットが６３（１０進）であるクラスタに対応する。
【００４２】
終端モード１８０は、モードフィールド１１０ｃが１０（２進）であるモードであり、クラスタ記憶フィールド１５０は使用されない。本モードは、当該メモリブロックまたはキャッシュラインの下に、他クラスタのキャッシュラインが関連付けられていないことを示す。
【００４３】
図３で示したディレクトリ構造を用いて、メモリブロック１０６毎に、メモリブロック１０６を頂点として、全クラスタにまたがって木構造を作成し、メモリブロックをキャッシングした全キャッシュラインを管理する。
【００４４】
図２は、主記憶ディレクトリおよびキャッシュディレクトリを使って構成される木構造によるキャッシュラインの管理の仕方を示す図である。図２において、３０１は主記憶ディレクトリであり、３２１，３２２，３３１，３３２，３３３，３３４，３４１，３４２，３４３，３４４，３４５はキャッシュディレクトリである。この木構造において、頂点の主記憶ディレクトリ３０１を階層１と定義する。階層１の主記憶ディレクトリ３０１により直接指されるキャッシュディレクトリ３２１，３２２を階層２と定義する。階層２内のキャッシュディレクトリ３２１，３２２により直接指されるキャッシュディレクトリ３３１，３３２，３３３，３３４を階層３と定義する。以後同様にして、階層４，５，…を定義する。
【００４５】
図２の木構造は、以下に示す規則に従って構成する。
【００４６】
（規則１）
ポインタモード１６０でクラスタ記憶フィールド１５０に記述するクラスタ数をＰｐ、ビットマップモード１７０でクラスタ記憶フィールド１５０に記述するクラスタ数をＰｂ、全クラスタ数をＰとする。このとき、ｘｌｏｇ2 Ｐｐ＋ｌｏｇ2Ｐｂ＝ｌｏｇ2Ｐを満たすｘについて、階層ｘ＋１に位置するディレクトリはビットマップモードまたは終端モードであり、階層ｘ＋２に位置するディレクトリは終端モードである。
【００４７】
（規則２）
ビットマップモードにより直接指されるキャッシュラインは、終端モードのみである。
【００４８】
（規則３）
図４に、クラスタ番号を２進数で表したビット列を示す。クラスタ番号は、ｌｏｇ2Ｐ＝ｘｌｏｇ2Ｐｐ＋ｌｏｇ2Ｐｂを満たすｘ個のポインタフィールド３５０および１個のビットマップフィールド３５１よりなる。階層ｊのディレクトリがポインタモードであったとき、そのディレクトリのクラスタ番号フィールドのｋ番目で指す部分木内の全クラスタのクラスタ番号は、ポインタフィールド１からポインタフィールドｊ−１までが当該ディレクトリが存在するクラスタのクラスタ番号と等しく、ポインタフィールドｊがｋ−１となる。なお、ｊ＝１のときは、階層１のディレクトリがポインタモードであったとき、そのディレクトリのクラスタ番号フィールドのｋ番目で指す部分木内の全クラスタのクラスタ番号は、ポインタフィールド１（クラスタ番号の第１番目のポインタフィールド）がｋ−１となる、ということである。なお、ポインタフィールド３５０のうち、先頭のポインタフィールドから順にポインタフィールド１，２，…と呼ぶこととする
。
【００４９】
（規則４）
ビットマップモードで指される全クラスタのクラスタ番号は、全ポインタフィールドが当該ディレクトリの存在するクラスタ番号のポインタフィールドと等しい。
【００５０】
規則１〜４について詳しく説明する。規則１は、図２の木構造の高さ（深さ）の限界を規定するものである。全クラスタ数をＰとするとき、ｌｏｇ2Ｐはそれらのクラスタに付けるクラスタ番号を表現するビット数になる。クラスタ番号を表現するｌｏｇ2Ｐビットのうち、ｌｏｇ2Ｐｂビット分はビットマップモードで特定する範囲を表わし、ｘｌｏｇ2Ｐｐビット分はポインタモードで特定する範囲（１階層がｌｏｇ2Ｐｐビット分であり、それがｘ階層分）を表わす。
【００５１】
具体的に本実施例では、全クラスタ数Ｐ＝１０２４であるからｌｏｇ2Ｐ＝１０であり、１０ビットのクラスタ番号で全クラスタを表現できる。すなわち、図４のクラスタ番号は１０ビットで表わされる。また、ビットマップモードで６４クラスタを記述するから、Ｐｂ＝６４でｌｏｇ2Ｐｂ＝６である。言い替えると、クラスタ番号１０ビットのうち６ビット分（ここでは下位の６ビット）は、ビットマップモードで特定できる範囲（すなわち、この６ビットが、クラスタグループ内で１つのクラスタを特定するＩＤ）になっている。クラスタ番号１０ビットのうちこの６ビット分を除いた４ビット分が、ポインタモードで特定する範囲であり、上記数式中のｘｌｏｇ2Ｐｐに相当する。ポインタモードでは１つのディレクトリのクラスタ記憶フィールド１５０に４つのクラスタ番号を記述するから、Ｐｐ＝４でｌｏｇ2Ｐｐ＝２である。したがって、ｘ＝２である。これは、図２の木構造が最大の高さとなる場合は、ｘ＝２までの階層すなわち階層１と階層２がポインタモードになり、その下の階層３はビットマップモードになり、その下の階層４が終端モードになることを示すものである。なお、図４ではポインタフィールド３５０が３つ図示してあるが、本実施例の例では、クラスタ番号全体が１０ビットであり、２ビットのポインタフィールド３５０が２つと、残りの６ビットのビットマップフィールド３５１からなる。
【００５２】
規則２は、ビットマップモードの下の階層は終端モードのみであることを規定したものである。
【００５３】
規則３は、クラスタ番号の構成を規定したものである。規則３の後段は、ポインタモードのディレクトリのクラスタ番号フィールドに設定するクラスタ番号と木構造につながれるクラスタのクラスタ番号の関係を表す。図２を参照して、この関係を説明する。図２において、主記憶ディレクトリ３０１はポインタモードになっており、第２番目のクラスタ番号フィールドにクラスタＰａのクラスタ番号ａが、第３番目のクラスタ番号フィールドにクラスタＰｂのクラスタ番号ｂが、それぞれ記憶され、第１番目と第４番目のクラスタ番号フィールドは無効になっている。これは、この主記憶ディレクトリに対応するメモリブロックがクラスタＰａ，Ｐｂにおいてキャッシングされていることを示している。また、この主記憶ディレクトリ３０１の４つのクラスタ番号フィールドは、順にクラスタ番号の先頭の２ビット（ポインタフィールド１）が００，０１，１０，１１（１０進では０，１，２，３）であるクラスタを記憶するフィールドである。したがって、第２番目のクラスタ番号フィールドによってつながれているクラスタＰａのクラスタ番号ａ（１０ビット）は先頭２ビットが０１であることが分かる。同様に、第３番目のクラスタ番号フィールドによってつながれているクラスタＰｂのクラスタ番号ｂ（１０ビット）は先頭２ビットが１０であることが分かる。
【００５４】
階層２に移って、３２１はクラスタＰａ内で主記憶ディレクトリ３０１に対応するメモリブロックをキャッシングしているキャッシュラインに対応するディレクトリであり、３２２はクラスタＰｂ内で主記憶ディレクトリ３０１に対応するメモリブロックをキャッシングしているキャッシュラインに対応するディレクトリである。キャッシュディレクトリ３２１はポインタモードになっており、第１番目のクラスタ番号フィールドにクラスタＰｃのクラスタ番号ｃが、第３番目のクラスタ番号フィールドにクラスタＰｄのクラスタ番号ｄが、それぞれ記憶され、第２番目と第４番目のクラスタ番号フィールドは無効になっている。これは、このキャッシュディレクトリに対応するキャッシュラインがクラスタＰｃ，Ｐｄでもキャッシングされていること（すなわち、階層１の主記憶ディレクトリ３０１に対応するメモリブロックがキャッシングされているということ）を示している。また、このキャッシュディレクトリ３２１の４つのクラスタ番号フィールドは、順にクラスタ番号の先頭２ビット（２進で０１）の次の２ビット（ポインタフィールド２）が００，０１，１０，１１であるクラスタを記憶するフィールドである。したがって、第１番目のクラスタ番号フィールドによってつながれているクラスタＰｃのクラスタ番号ｃ（１０ビット）は先頭２ビットが０１で次の２ビットが００であることが分かる。同様に、第３番目のクラスタ番号フィールドによってつながれているクラスタＰｄのクラスタ番号ｄ（１０ビット）は先頭２ビットが１０で次の２ビットが１０であることが分かる。
【００５５】
階層２のディレクトリ３２２もポインタモードであり、その第２，３番目のクラスタ番号フィールドにクラスタＰｆ，Ｐｇのクラスタ番号ｆ，ｇが記憶されている。したがって、当該メモリブロック（階層１の主記憶ディレクトリ３０１に対応するメモリブロック）がクラスタＰｆ，Ｐｇでキャッシングされており、クラスタ番号ｆは先頭４ビットが１００１であり、クラスタ番号ｇは先頭４ビットが１０１０であることが分かる。
【００５６】
階層３に移って、３３１，３３２，３３３，３３４は、それぞれクラスタＰｃ，Ｐｄ，Ｐｆ，Ｐｇ内で当該メモリブロックをキャッシングしているキャッシュラインに対応するディレクトリである。ディレクトリ３３１，３３２，３３３は終端モードであり、これ以下の階層にはクラスタがつながれていない。ディレクトリ３３４はビットマップモードであり、１が立っているビットに対応するクラスタＰｈ，Ｐｉ，Ｐｊ，Ｐｋ，Ｐｌに当該メモリブロックがキャッシングされていることが分かる。さらに、クラスタＰｈ，Ｐｉ，Ｐｊ，Ｐｋ，ＰｌはクラスタＰｇと同じクラスタグループに属し、これらのクラスタのクラスタ番号は何れも先頭４ビット（全ポインタフィールド）が１０１０（クラスタ番号ｇの全ポインタフィールドと同じ）であることが分かる。
【００５７】
規則１から規則４により、任意のクラスタが図２のような木構造に含まれるか否かを調査するときには、頂点のメモリブロックのディレクトリから開始して全階層でディレクトリ内のいずれか一つのポインタをたどればよいこととなる。例えば、あるクラスタ番号Ｙが木構造に含まれるか調査するときには、以下の様に検索すればよい。
【００５８】
（１） 調査対象の木構造の階層１のディレクトリを読み出す。ｉの初期値を１とする。
【００５９】
（２）階層ｉのディレクトリのモードに応じて、以下の処理をクラスタ番号Ｙのディレクトリを読み出すか、終了条件を満たすまで繰り返す。
【００６０】
（２−１) 階層ｉのディレクトリがポインタモードのとき：クラスタ番号Ｙ中のポインタフィールドｉを取り出し、そのポインタフィールドｉの値をｊとしたとき、階層ｉのディレクトリの第ｊ＋１番目のクラスタ番号フィールドのクラスタ番号存在フラグが１であればそのクラスタ番号フィールドからクラスタ番号を読み出し、当該クラスタ番号のクラスタのディレクトリを新たなディレクトリとして読み出す。これにより、階層ｉ＋１に移動する（ｉ＋１を新たなｉとする）。読み出したクラスタ番号がクラスタ番号Ｙに一致したら、クラスタ番号Ｙは木構造に含まれていたこととなる。なお、読み出すべきクラスタ番号フィールドのクラスタ番号存在フラグが０であれば、終了する。
【００６１】
（２−２）階層ｉのディレクトリがビットマップモードのとき：クラスタ番号Ｙ中のビットマップフィールドからデータを取り出し、そのビットマップフィールドの値をｊとしたとき、階層ｉのディレクトリのビットマップの第ｊ＋１番目のビットが１なら、当該ビットに対応するクラスタのディレクトリを読み出す。そのクラスタがクラスタ番号Ｙのクラスタである。ビットが０なら終了する。
【００６２】
（２−３）階層ｉのディレクトリが終端モードのとき：処理を終了する。
【００６３】
これらの処理により最後に到達したディレクトリのクラスタ番号がＹであれば、クラスタ番号Ｙは木構造に含まれていたこととなる。
【００６４】
次に、上記構成の並列計算機により書き込み無効化型キャッシュ一致制御を実現する方法を述べる。書き込み無効化型とは、あるメモリブロックに対する書き込み要求を受けたときに、その書き込みを行うと共に該メモリブロックをキャッシングしているすべてのキャッシュメモリに対して無効化を行うことをいう。
【００６５】
クラスタ１００は、ネットワークインターフェイス回路１１２を通してネットワーク２００から主記憶装置１０３に対する読み出し要求通信および書き込み要求通信、並びに、キャッシュメモリ１０２に対する無効化要求通信、追加要求通信、削除要求通信、ビットマップ移動要求通信、およびポインタ移動要求通信を受けることができる。また、プロセッサ１０１に対する読み出し返答通信を受けることができる。
【００６６】
さらにクラスタ１００では、キャッシュ制御回路１０４および主記憶制御回路１０５からネットワークインターフェイス回路１１２を通じて他クラスタのキャッシュメモリに対して無効化要求通信、追加要求通信、削除要求通信、ビットマップ移動要求通信、およびポインタ移動要求通信を送ることができ、主記憶制御回路１０５からネットワークインターフェイス回路１１２を通じて他クラスタに対して読み出し返答通信を送ることができ、プロセッサ１０１からネットワーク２００を通じて他クラスタに対して読み出し要求通信および書き込み要求通信を送ることができる。
【００６７】
これらの要求通信の詳細について説明する。まず各要求通信のパケットの構成について説明する。図５は、各要求通信のパケットの構成である。
【００６８】
各パケットは、パケット送信先クラスタ番号４００ａ〜４００ｈおよびパケット送信元クラスタ番号４０１ａ〜４０１ｈよりなるパケットヘッダを共通に持つ。パケット送信元クラスタ番号４０１ａ〜４０１ｈは、当該要求通信パケットを送信した送信元のクラスタのクラスタ番号である。パケット送信先クラスタ番号４００ａ〜４００ｈは、当該要求通信パケットの送信先のクラスタのクラスタ番号である。
【００６９】
読み出し要求通信パケット４２０は、パケットヘッダ、および送信先クラスタ内アドレス４０３ａからなる。
【００７０】
書き込み要求通信パケット４２１は、パケットヘッダ、および送信先クラスタ内アドレス４０３ｂ、書き込みデータ４０４からなる。
【００７１】
無効化要求通信パケット４２２は、パケットヘッダ、無効化対象クラスタ番号４０２ｃ、および無効化対象クラスタ内アドレス４０３ｃからなる。
【００７２】
追加要求通信パケット４２３は、パケットヘッダ、追加対象クラスタ番号４０２ｄ、追加対象クラスタ内アドレス４０３ｄ、および追加クラスタ番号４０５からなる。
【００７３】
削除要求通信パケット４２４は、パケットヘッダ、削除対象クラスタ番号４０２ｅ、削除対象クラスタ内アドレス４０３ｅ、および置き換え対象クラスタ番号４０９からなる。
【００７４】
ビットマップ移動要求通信パケット４２５は、パケットヘッダ、移動対象クラスタ番号４０２ｆ、移動対象クラスタ内アドレス４０３ｆ、およびビットマップ４０６からなる。
【００７５】
ポインタ移動要求通信パケット４２６は、パケットヘッダ、移動対象クラスタ番号４０２ｇ、移動対象クラスタ内アドレス４０３ｆ、およびポインタ４０７からなる。
【００７６】
読み出し返答通信パケット４２７は、パケットヘッダ、返答対象クラスタ番号４０２ｈ、返答対象クラスタ内アドレス４０３ｈ、および返答データ４０８からなる。
【００７７】
各要求通信の動作は以下の通りである。
【００７８】
（読み出し要求通信）
クラスタ１００に対する読み出し要求通信は、クラスタ１００内または他クラスタ内のプロセッサ１０１がクラスタ１００内の主記憶装置１０３のメモリブロック１０６のデータを欲しい場合であって、かつ当該読み出し要求元クラスタのキャッシュメモリ１０２でミスした（すなわち、当該メモリブロックのデータは当該読み出し要求元クラスタではキャッシングされていなかった）場合に、クラスタ１００のネットワークインターフェイス回路１１２に対して発行される。読み出し要求通信パケット４２０を受信したときのクラスタ１００の動作は以下の通りである。
【００７９】
（１）ネットワークインターフェイス回路１１２は、読み出し要求通信パケット４２０の送信先クラスタ内アドレス４０３ａを用いて主記憶制御回路１０５に対して主記憶読み出し要求を行う。
【００８０】
（２）主記憶制御回路１０５は、送信先クラスタ内アドレス４０３ａを用いて、主記憶装置１０３から当該アドレスに対応するメモリブロック１０６、主記憶ディレクトリ１０７、およびモードフィールド１１０を読み出す。
【００８１】
（３）主記憶制御回路１０５は、ネットワークインターフェイス回路１１２に、読み出したメモリブロック１０６の内容を返送する。具体的には、主記憶制御回路１０５は、受信した読み出し要求通信パケット４２０のパケット送信元クラスタ番号４０１ａで示されるクラスタ（自クラスタでも他クラスタでもよい）のネットワークインターフェイス回路１１２に対してネットワーク２００を通して（自クラスタの場合は直接）読み出し返答通信パケット４２７を送る。ここで、読み出し返答通信パケット４２７の、返答対象クラスタ番号４０２ｈは自クラスタ１００（すなわち、いま説明している処理を行っているクラスタであり、読み出し対象のメモリブロック１０６を保有するクラスタ）のクラスタ番号、返答対象クラスタ内アドレス４０３ｈは受信した読み出し要求通信パケット４２０の送信先クラスタ内アドレス４０３ａ、返答データ４０８は読み出したメモリブロックの内容とする。読み出し返答通信パケット４２７を受けたクラスタの動作については後述する。
【００８２】
（４）アクセスしたメモリブロック１０６の主記憶ディレクトリ１０７の状態により、（４−１）から（４−６）のいずれかを行う。アクセスしたメモリブロック１０６の内容は、上記（３）のようにして読み出し要求の発行元に返送されるが、それを受けたクラスタ（自クラスタも含む）内では当該メモリブロック１０６の内容をキャッシングすることになる（読み出し返答通信参照）。そこで、当該メモリブロック１０６を階層１とする図２のような木構造に、新たに当該メモリブロック１０６の内容をキャッシングしたクラスタを登録する必要がある。その処理を、以下の（４−１）から（４−６）で行う。
【００８３】
（４−１）アクセスしたメモリブロック１０６の主記憶ディレクトリ１０７が終端モード１８０の場合：
主記憶ディレクトリ１０７のモードフィールド１１０をポインタモード１６０に変更し、上述した木構造の構成規則に従って、読み出し要求発行元のクラスタのクラスタ番号をクラスタ記憶フィールド１５０に登録する。このとき、クラスタ番号を登録したクラスタ番号フィールドのクラスタ番号存在フラグを１とする。
【００８４】
（４−２）アクセスしたメモリブロック１０６の主記憶ディレクトリ１０７がポインタモード１６０であり、その主記憶ディレクトリ１０７のクラスタ記憶フィールド１５０のアクセス発行元のクラスタ番号を登録すべきエントリ（クラスタ番号フィールド）が空き（当該クラスタ番号フィールドのクラスタ番号存在フラグが０）の場合：
アクセス発行元のクラスタ番号を主記憶ディレクトリ１０７の当該空きエントリに登録する。このとき、対応するクラスタ番号存在フラグを１とする。
【００８５】
（４−３）アクセスしたメモリブロック１０６の主記憶ディレクトリ１０７がポインタモード１６０であり、その主記憶ディレクトリ１０７のクラスタ記憶フィールド１５０のアクセス発行元のクラスタ番号を登録すべきエントリが空きでなく（当該クラスタ番号フィールドのクラスタ番号存在フラグが１）、他のエントリがすべて空きであり（クラスタ番号存在フラグが０）、かつ、アクセス発行元のクラスタ番号のポインタフィールドと、当該メモリブロック１０６を保有するクラスタのクラスタ番号のポインタフィールドと、上記空きでなかったエントリに記憶されているクラスタ番号のポインタフィールドとが全て等しい場合：
主記憶ディレクトリ１０７のモードフィールド１１０をビットマップモード１７０に変更し、ポインタモード１６０でクラスタ記憶フィールド１５０のエントリに登録されていたクラスタ番号に対応するビットおよびアクセス発行元のクラスタ番号に対応するビットを１とする。
【００８６】
（４−４）アクセスしたメモリブロック１０６の主記憶ディレクトリ１０７がポインタモード１６０であり、その主記憶ディレクトリ１０７のクラスタ記憶フィールド１５０のアクセス発行元のクラスタ番号を登録すべきエントリが空きでない（当該クラスタ番号フィールドのクラスタ番号存在フラグが１）場合であって、他のエントリに空きでないものがあるか、または、アクセス発行元のクラスタ番号のポインタフィールドと、当該メモリブロック１０６を保有するクラスタのクラスタ番号のポインタフィールドと、上記アクセス発行元のクラスタ番号を記憶すべきエントリに登録されていたクラスタ番号のポインタフィールドのうちの少なくとも２つが等しくない場合：
アクセス発行元のクラスタ番号を記憶すべきエントリに登録されているクラスタ番号のクラスタに対して追加要求通信を行う。具体的には、追加要求通信パケット４２３を送信する。このとき、追加要求通信パケット４２３の、追加対象クラスタ番号４０２ｄは自クラスタ１００（すなわち、いま説明している処理を行っているクラスタであり、読み出し対象のメモリブロック１０６を保有するクラスタ）のクラスタ番号、追加対象クラスタ内アドレス４０３ｄは読み出し要求通信パケット４２０の送信先クラスタ内アドレス４０３ａ、追加クラスタ番号４０５は読み出し要求通信パケット４２０のパケット送信元クラスタ番号４０１ａ（木構造に追加すべきクラスタ番号）とする。追加要求通信パケット４２３を受けたクラスタの動作については後述するが、要するに、アクセス発行元のクラスタ番号を記憶すべきエントリに登録されているクラスタ番号につながる部分木構造に、新たにアクセス発行元のクラスタ番号を追加する処理を行うものである。
【００８７】
（４−５）アクセスしたメモリブロック１０６の主記憶ディレクトリ１０７がビットマップモード１７０であり、アクセス発行元のクラスタ番号のポインタフィールドがビットマップ内の全クラスタのクラスタ番号のポインタフィールドと等しい（言い替えると、アクセス発行元のクラスタ番号のポインタフィールドと当該メモリブロックを保有するクラスタのクラスタ番号のポインタフィールドとが等しい）場合：
主記憶ディレクトリ１０７のビットマップ内の、アクセス発行元のクラスタ番号に対応するビットを１とすることにより、アクセス発行元のクラスタ番号を木構造中に組み入れる。
【００８８】
（４−６）アクセスしたメモリブロック１０６の主記憶ディレクトリ１０７がビットマップモード１７０の場合で、アクセス発行元のクラスタ番号のポインタフィールドがビットマップ内の全クラスタのクラスタ番号のポインタフィールドと異なる場合：
主記憶ディレクトリ１０７のビットマップ内から１が立っているビットを１つ選択し、当該ビットに対応するクラスタに対してビットマップ移動要求通信を行う。具体的には、ビットマップ移動要求通信パケット４２５を送信する。このとき、ビットマップ移動要求通信パケット４２５の、移動対象クラスタ番号４０２ｆは自クラスタ１００（すなわち、いま説明している処理を行っているクラスタであり、読み出し対象のメモリブロック１０６を保有するクラスタ）のクラスタ番号、移動対象クラスタ内アドレス４０３ｆは読み出し要求通信パケット４２０の送信先クラスタ内アドレス４０３ａ、ビットマップ４０６は対応する主記憶ディレクトリ１０７のクラスタ記憶フィールド１５０に記憶されているビットマップとする。ビットマップ移動要求通信パケット４２５を受けたクラスタの動作については後述するが、要するに、ビットマップモードである現ディレクトリのビットマップを下位の階層に移動する処理を行うものである。
【００８９】
この後、主記憶ディレクトリ１０７のモードフィールド１１０をポインタモード１６０に変更し、上述した木構造の構成規則に従って、アクセス発行元のクラスタ番号およびビットマップ移動要求通信の送信先のクラスタ番号をクラスタ記憶フィールド１５０に登録し、対応するクラスタ番号存在フラグを１とする。ここで、アクセス発行元のクラスタ番号とビットマップ移動要求通信の送信先のクラスタ番号とが一致する場合、（４−４）を行う。
【００９０】
（書き込み要求通信）
クラスタ１００に対する書き込み要求通信は、クラスタ１００内または他クラスタ内のプロセッサ１０１がクラスタ１００内の主記憶装置１０３に対してメモリ書き込みを行いたい場合、クラスタ１００のネットワークインターフェイス回路１１２に対して発行される。書き込み要求通信パケット４２１を受信したときのクラスタ１００の動作は以下の通りである。
【００９１】
（１）ネットワークインターフェイス回路１１２は、書き込み要求通信パケット４２１の送信先クラスタ内アドレス４０３ｂを用いて主記憶制御回路１０５に対して主記憶書き込み要求を行う。
【００９２】
（２）主記憶制御回路１０５は、送信先クラスタ内アドレス４０３ｂを用いて、主記憶装置１０３中の当該アドレスに対応するメモリブロック１０６に書き込みデータ４０４を書き込むとともに、当該メモリブロック１０６に対応する主記憶ディレクトリ１０７、およびモードフィールド１１０を読み出す。
【００９３】
（３）アクセスしたメモリブロック１０６の主記憶ディレクトリ１０７の状態により、（３−１）または（３−２）のいずれかを行う。
【００９４】
（３−１）アクセスしたメモリブロック１０６の主記憶ディレクトリ１０７がポインタモード１６０またはビットマップモード１７０であった場合：
当該主記憶ディレクトリ１０７のクラスタ記憶フィールド１５０に登録されている全てのクラスタに対して無効化要求通信を送信する。具体的には、無効化要求通信パケット４２２を送信する。このとき、無効化要求通信パケット４２２の、無効化対象クラスタ番号４０２ｃは自クラスタ１００（すなわち、いま説明している処理を行っているクラスタであり、データ書き込みを行ったメモリブロック１０６を保有するクラスタ）のクラスタ番号、無効化対象クラスタ内アドレス４０３ｃは書き込み要求通信パケット４２１の送信先クラスタ内アドレス４０３ｂとする。無効化要求通信パケット４２２を受けたクラスタの動作については後述するが、要するに、書き込みを行ったメモリブロック１０６の内容がキャッシングされているのでそれを無効化する処理を行うものである。この後、主記憶制御回路１０５は、当該主記憶ディレクトリ１０７を終端モード１８０に変更する。
【００９５】
（３−２）アクセスしたメモリブロック１０６の主記憶ディレクトリ１０７が終端モード１８０であった場合：
当該メモリブロックはどこにもキャッシングされていないため、キャッシュの一貫性制御は行わない。
【００９６】
（無効化要求通信）
クラスタ１００に対する無効化要求通信は、クラスタ１００内または他クラスタ内のキャッシュ制御回路１０４または主記憶制御回路１０５が無効化要求通信を発行した場合（書き込み要求通信の（３−１）および本無効化要求通信の（３）参照）、クラスタ１００のネットワークインターフェイス回路１１２に対して発行される。無効化要求通信パケット４２２を受信したときのクラスタ１００の動作は以下の通りである。
【００９７】
（１）ネットワークインターフェイス回路１１２は、無効化要求通信パケット４２２のアドレス（無効化対象クラスタ番号４０２ｃと無効化対象クラスタ内アドレス４０３ｃ）を用いて、キャッシュ制御回路１０４に対して無効化要求を行う。
【００９８】
（２）キャッシュ制御回路１０４は、無効化要求通信パケット４２２のアドレスを用いて、キャッシュメモリ１０２のキャッシュディレクトリを読み出す。具体的には、無効化対象クラスタ番号４０２ｃおよび無効化対象クラスタ内アドレス４０３ｃで示されるメモリブロック１０６がキャッシングされているはずであるから、そのキャッシュライン１０８を探して、対応するキャッシュディレクトリ１０９を読み出す。
【００９９】
（３）読み出したキャッシュディレクトリ１０９がポインタモード１６０またはビットマップモード１７０であった場合：
キャッシュ制御回路１０４は、当該キャッシュディレクトリ１０９のクラスタ記憶フィールド１５０に登録されている全てのクラスタに対して、ネットワークインターフェイス回路１１２を通じて無効化要求通信パケット４２２を送信する。このとき、無効化対象クラスタ番号４０２ｃは受信した無効化要求通信パケット４２２の無効化対象クラスタ番号４０２ｃと同じとし、無効化対象クラスタ内アドレス４０３ｃも受信した無効化要求通信パケット４２２の無効化対象クラスタ内アドレス４０３ｃと同じとする。
【０１００】
（４）無効化要求を受けたキャッシュライン１０８を無効化する。
【０１０１】
（追加要求通信）
クラスタ１００に対する追加要求通信は、クラスタ１００内または他クラスタ内のキャッシュ制御回路１０４または主記憶制御回路１０５が追加要求通信を発行した場合（読み出し要求通信の（４−４）および本追加要求通信の（２−４）参照）、クラスタ１００のネットワークインターフェイス回路１１２に対して発行される。追加要求通信パケット４２３を受信したときのクラスタ１００の動作は以下の通りである。
【０１０２】
（１）追加要求通信パケット４２３のアドレスに対応するキャッシュディレクトリ１０９を読み出す。具体的には、追加要求通信パケット４２３の追加対象クラスタ番号４０２ｄおよび追加対象クラスタ内アドレス４０３ｄで示されるメモリブロック１０６がキャッシングされているはずであるから、そのキャッシュライン１０８を探して、対応するキャッシュディレクトリ１０９を読み出す。
【０１０３】
（２）読み出したキャッシュディレクトリ１０９の状態により、（２−１）から（２−６）のいずれかを行う。
【０１０４】
（２−１）読み出したキャッシュディレクトリ１０９が終端モード１８０の場合：
キャッシュディレクトリ１０９のモードフィールド１１０をポインタモード１６０に変更し、上述した木構造の構成規則に従って、追加クラスタ番号４０５（木構造に追加すべきクラスタ番号）をクラスタ記憶フィールド１５０に登録する。このとき、クラスタ番号を登録したクラスタ番号フィールドのクラスタ番号存在フラグを１とする。
【０１０５】
（２−２）読み出したキャッシュディレクトリ１０９がポインタモード１６０であり、そのキャッシュディレクトリ１０９のクラスタ記憶フィールド１５０の追加クラスタ番号４０５を登録すべきエントリが空き（当該クラスタ番号フィールドのクラスタ番号存在フラグが０）の場合：
追加クラスタ番号４０５を当該キャッシュディレクトリ１０９に登録する。このとき、対応するクラスタ番号存在フラグを１とする。
【０１０６】
（２−３）読み出したキャッシュディレクトリ１０９がポインタモード１６０であり、そのキャッシュディレクトリ１０９のクラスタ記憶フィールド１５０の追加クラスタ番号４０５を登録すべきエントリが空きでなく（当該クラスタ番号フィールドのクラスタ番号存在フラグが１）、他のエントリがすべて空きであり（クラスタ番号存在フラグが０）、かつ、上記空きでなかったエントリに、追加クラスタ番号４０５とポインタフィールドが全て等しいクラスタ番号が登録されている場合：
キャッシュディレクトリ１０９のモードフィールド１１０をビットマップモード１７０に変更し、ポインタモード１６０でクラスタ記憶フィールド１５０に登録されていたクラスタ番号に対応するビットを１とした後、さらに追加対象である追加クラスタ番号４０５に対応するビットを１とする。
【０１０７】
（２−４）読み出したキャッシュディレクトリ１０９がポインタモード１６０であり、そのキャッシュディレクトリ１０９のクラスタ記憶フィールド１５０の追加クラスタ番号４０５を登録すべきエントリが空きでない（当該クラスタ番号フィールドのクラスタ番号存在フラグが１）場合であって、他のエントリに空きでないものがあるか、または、そのキャッシュディレクトリ１０９のクラスタ記憶フィールド１５０の追加クラスタ番号４０５を登録すべきエントリに登録されているクラスタ番号のポインタフィールドと追加クラスタ番号４０５のポインタフィールドとが異なる場合：
追加クラスタ番号４０５を登録すべきエントリに登録されているクラスタ番号のクラスタに対して、受信した追加要求通信パケット４２３を、転送する。
【０１０８】
（２−５）読み出したキャッシュディレクトリ１０９がビットマップモード１７０であり、追加クラスタ番号４０５のポインタフィールドがビットマップ内の全クラスタのクラスタ番号のポインタフィールドと等しい場合：
キャッシュディレクトリ１０９のビットマップ内の、追加クラスタ番号４０５に対応する位置のビットを１とすることにより、追加クラスタ番号４０５を木構造中に組み入れる。
【０１０９】
（２−６）読み出したキャッシュディレクトリ１０９がビットマップモード１７０であり、追加クラスタ番号４０５のポインタフィールドがビットマップ内の全クラスタのクラスタ番号のポインタフィールドと異なる場合：
キャッシュディレクトリ１０９のビットマップ内から１が立っているビットを１つ選択し、当該ビットに対応するクラスタに対してビットマップ移動要求通信を行う。具体的には、ビットマップ移動要求通信パケット４２５を送信する。このとき、ビットマップ移動要求通信パケット４２５の、移動対象クラスタ番号４０２ｆは受信した追加要求通信パケット４２３の追加対象クラスタ番号４０２ｄ、移動対象クラスタ内アドレス４０３ｆは追加対象クラスタ内アドレス４０３ｄ、ビットマップ４０６は当該キャッシュディレクトリ１０９のクラスタ記憶フィールド１５０のビットマップとする。
【０１１０】
この後、当該キャッシュディレクトリ１０９のモードフィールド１１０をポインタモード１６０に変更し、上述した木構造の構成規則に従って、追加クラスタ番号４０５およびビットマップ移動要求通信の送信先のクラスタ番号を、クラスタ記憶フィールド１５０に登録し、対応するクラスタ番号存在フラグを１とする。
【０１１１】
（削除要求通信）
クラスタ１００に対する削除要求通信は、自クラスタ１００内または他クラスタ内のキャッシュ制御回路１０４または主記憶制御回路１０５が削除要求通信を発行した場合（後述するキャッシュのリプレース時の動作の（２−１）および本削除要求通信の（２−２）参照）、クラスタ１００のネットワークインターフェイス回路１１２に対して発行される。削除要求通信パケット４２４を受信したときのクラスタ１００の動作は以下の通りである。
【０１１２】
（１）削除要求通信パケット４２４のアドレスに対応する主記憶ディレクトリ１０７またはキャッシュディレクトリ１０９を読み出す。具体的には、削除要求通信パケット４２４の削除対象クラスタ番号４０２ｅおよび削除対象クラスタ内アドレス４０３ｅで示されるメモリブロック１０６に対応する主記憶ディレクトリ１０７、またはそのメモリブロック１０６がキャッシングされているキャッシュライン１０８に対応するキャッシュディレクトリ１０９を読み出す。
【０１１３】
（２）読み出したディレクトリ１０７または１０９の状態により、（２−１）または（２−２）のいずれかを行う。
【０１１４】
（２−１）読み出したディレクトリ１０７または１０９がポインタモード１６０であり、当該ディレクトリ１０７，１０９のクラスタ記憶フィールド１５０に、受信した削除要求通信パケット４２４のパケット送信元クラスタ番号４０１ｅ（削除すべきクラスタ番号）が登録してある場合：
削除要求通信パケット４２４の置き換えクラスタ番号４０９が有効なら、クラスタ記憶フィールド１５０の当該クラスタ番号を置き換えクラスタ番号４０９に変更する。また、削除要求通信パケット４２４の置き換えクラスタ番号４０９が無効なら、クラスタ記憶フィールド１５０の当該クラスタ番号のクラスタ番号存在フラグを０として、そのクラスタ番号を削除する。このとき、クラスタ記憶フィールド１５０に登録されているクラスタ番号の数が０となったときは、当該ディレクトリのモードを終端モードに変更する。
【０１１５】
（２−２）読み出したディレクトリ１０７または１０９がポインタモード１６０であり、当該ディレクトリ１０７，１０９のクラスタ記憶フィールド１５０に、受信した削除要求通信パケット４２４のパケット送信元クラスタ番号４０１ｅ（削除すべきクラスタ番号）とは異なるクラスタのクラスタ番号が登録してある場合：
キャッシュ制御回路１０４は、ネットワークインターフェイス回路１１２を通じて削除対象のクラスタ番号（受信した削除要求通信パケット４２４のパケット送信元クラスタ番号４０１ｅ）を記憶すべきエントリに登録されているクラスタに対して削除要求通信を転送する。
【０１１６】
（２−３）読み出したディレクトリ１０７または１０９がビットマップモード１７０の場合：
ビットマップの削除対象のクラスタ（受信した削除要求通信パケット４２４のパケット送信元クラスタ番号４０１ｅのクラスタ）に対応する位置のビットを０とし、そのクラスタ番号を削除する。このとき、クラスタ記憶フィールド１５０に保持するビットマップが全て０となれば、当該ディレクトリのモードを終端モードに変更する。
【０１１７】
（ビットマップ移動要求通信）
クラスタ１００に対するビットマップ移動要求通信は、クラスタ１００内または他クラスタ内の主記憶制御回路１０５またはキャッシュ制御回路１０４がビットマップ移動要求通信を発行した場合（読み出し要求通信の（４−６）、追加要求通信の（２−６）、キャッシュリプレース時の動作の（２−３）、およびポインタ移動要求通信の（３−２）参照）、クラスタ１００のネットワークインターフェイス回路１１２に対して発行される。ビットマップ移動要求通信パケット４２５を受信したときのクラスタ１００の動作は以下の通りである。
【０１１８】
（１）ネットワークインターフェイス回路１１２は、ビットマップ移動要求通信パケット４２５のアドレスを用いて、キャッシュ制御回路１０４に対してビットマップ移動要求を行う。
【０１１９】
（２）キャッシュ制御回路１０４は、ビットマップ移動要求のアドレスを用いて、キャッシュメモリ１０２のキャッシュディレクトリ１０９、およびモードフィールド１１０を読み出す。具体的には、ビットマップ移動要求通信パケット４２５の移動対象クラスタ番号４０２ｆおよび移動対象クラスタ内アドレス４０３ｆで示されるメモリブロック１０６がキャッシングされているはずであるから、そのキャッシュライン１０８を探して、対応するキャッシュディレクトリ１０９およびモードフィールド１１０を読み出す。
【０１２０】
（３）読み出したキャッシュディレクトリ１０９のモードフィールド１１０をビットマップモード１７０に変更し、受信したビットマップ移動要求通信パケット４２５のビットマップ４０６を、当該キャッシュディレクトリ１０９のクラスタ記憶フィールド１５０に書き込む。ただし、ビットマップの全ビットが０である場合、モードフィールド１１０を終端モードとする。
【０１２１】
なお、ビットマップ移動要求通信パケット４２５は必ず上位の階層から下位の階層へと送信され、ビットマップモードのディレクトリの下位の階層は終端モードであることから、ビットマップ移動要求通信パケット４２５の送信先ディレクトリは必ず終端モードである。
【０１２２】
（ポインタ移動要求通信）
クラスタ１００に対するポインタ移動要求通信は、クラスタ１００内または他クラスタ内の主記憶制御回路１０５またはキャッシュ制御回路１０４がポインタ移動要求通信を発行したとき（キャッシュのリプレース時の動作の（２−２）、および本ポインタ移動要求通信の（３−１）参照）に、クラスタ１００のネットワークインターフェイス回路１１２に対して発行される。ポインタ移動要求通信パケット４２６を受信したときのクラスタ１００の動作は以下の通りである。
【０１２３】
（１）ネットワークインターフェイス回路１１２は、ポインタ移動要求通信パケット４２６のアドレスを用いて、キャッシュ制御回路１０４に対してポインタ移動要求を行う。
【０１２４】
（２）キャッシュ制御回路１０４は、ポインタ移動要求のアドレスを用いて、キャッシュメモリ１０２のキャッシュディレクトリ１０９、およびモードフィールド１１０を読み出す。具体的には、ポインタ移動要求通信パケット４２６の移動対象クラスタ番号４０２ｇおよび移動対象クラスタ内アドレス４０３ｇで示されるメモリブロック１０６がキャッシングされているはずであるから、そのキャッシュライン１０８を探して、対応するキャッシュディレクトリ１０９およびモードフィールド１１０を読み出す。
【０１２５】
（３）キャッシュディレクトリ１０９のモードにより、（３−１）から（３−３）のいずれかを行う。
【０１２６】
（３−１）読み出したキャッシュディレクトリ１０９がポインタモード１６０であった場合：
当該キャッシュディレクトリ１０９により指されるクラスタを一つ選択し、選択したクラスタ番号をキャッシュディレクトリ１０９から取り除き、その選択したクラスタに対してポインタ移動要求通信を送信し、キャッシュディレクトリ１０９をポインタ４０７にセットして渡す。
【０１２７】
この後、自クラスタ１００に対するポインタ移動要求通信パケット４２６で送られてきたポインタ４０７（ディレクトリ）に、自クラスタ１００からポインタ移動要求通信パケット４２６を送信した相手先クラスタの番号を追加し、自クラスタ１００の当該キャッシュディレクトリ１０９に書き込む。
【０１２８】
（３−２）読み出したキャッシュディレクトリ１０９がビットマップモード１７０であった場合：
当該キャッシュディレクトリ１０９により指されるクラスタを一つ選択し、選択したクラスタに対応するビットを０として、選択したクラスタに対してビットマップ移動要求通信を送信し、キャッシュディレクトリ１０９をビットマップ４０６にセットして渡す。
【０１２９】
この後、自クラスタ１００に対するポインタ移動要求通信パケット４２６で送られてきたポインタ４０７（ディレクトリ）に、自クラスタ１００からビットマップ移動要求通信を送信した相手先クラスタの番号を追加し、自クラスタ１００の当該キャッシュディレクトリ１０９に書き込む。また、モードフィールド１１０は、ポインタモードに変更する。
【０１３０】
（３−３）読み出したキャッシュディレクトリ１０９が終端モード１８０であった場合：
受信したポインタ移動要求通信パケット４２６で送られてきたディレクトリ（ポインタ４０７）を、自クラスタ１００の当該キャッシュディレクトリ１０９に書き込み、モードフィールド１１０をポインタモード１６０に変更する。ただし、全てのポインタフィールド３５０が無効である場合、モードフィールド１１０は終端モード１８０とする。
【０１３１】
（読み出し返答通信）
クラスタ１００に対する読み出し返答通信は、クラスタ１００内または他クラスタ内の主記憶制御回路１０５が読み出し返答通信を発行した場合（読み出し要求通信の（３）参照）、クラスタ１００のネットワークインターフェイス回路１１２に対して発行される。読み出し返答通信パケット４２７を受信したときのクラスタ１００の動作は以下の通りである。
【０１３２】
（１）ネットワークインターフェイス回路１１２は、返答結果をキャッシュ制御回路１０４に転送する。
（２）キャッシュ制御回路１０４は、キャッシュメモリ１０２の対応するキャッシュライン１０８に返答結果を記録し、当該キャッシュディレクトリ１０９を終端モード１８０として登録する。
（３）ネットワークインターフェイス回路１１２は、読み出し返答通信の返答結果をクラスタ１００内のバス１１１に出力してプロセッサ１０１に返答する。
【０１３３】
（キャッシュのリプレース時の動作）
クラスタ１００内のプロセッサ１０１から自クラスタ１００内または他クラスタ内の主記憶装置１０３に対して読み出しを行いたい場合は、まず読み出したいメモリブロック１０６の内容が自クラスタ１００内のキャッシュメモリ１０２でキャッシングされているかどうかを調べることになるが、そこでキャッシュミスした場合は、読み出したいメモリブロック１０６から実際にデータを読み出してくることになる。このとき、当該読み出し結果を格納すべきキャッシュライン１０８にすでに別のメモリブロックの内容が登録されていた場合には、キャッシュラインのリプレースを行う必要がある。キャッシュラインのリプレース時の動作は以下の通りである。
【０１３４】
（１）キャッシュ制御回路１０４は、リプレースしたいキャッシュライン１０８のキャッシュディレクトリ１０９を読み出す。
【０１３５】
（２−１）読み出したキャッシュディレクトリ１０９が終端モード１８０であった場合：
対応するキャッシュライン１０８にキャッシングされているメモリブロック１０６を保有するクラスタに対して、自クラスタ番号の削除要求通信を送信する。具体的には、削除要求通信パケット４２４を送信する。このとき、削除要求通信パケット４２４の、削除対象クラスタ番号４０２ｅは当該キャッシュラインにキャッシングされているメモリブロック１０６を保有するクラスタのクラスタ番号、削除対象クラスタ内アドレス４０３ｅはそのメモリブロック１０６のクラスタ内アドレス、置き換えクラスタ番号４０９は無効とする。
【０１３６】
（２−２）読み出したキャッシュディレクトリ１０９がポインタモード１６０であった場合：
当該ディレクトリ１０９に登録されているクラスタ番号を一つ選択し、そのクラスタ番号を当該ディレクトリ１０９から削除し、そのクラスタ番号のクラスタに対してポインタ移動要求通信を行い、当該ディレクトリ１０９のクラスタ記憶フィールド１５０を転送する。すなわち、移動対象クラスタ番号４０２ｇは当該キャッシュライン１０８にキャッシングされているメモリブロック１０６を保有するクラスタのクラスタ番号、移動対象クラスタ内アドレス４０３ｇはそのメモリブロック１０６のクラスタ内アドレス、ポインタ４０７は移動したいクラスタ記憶フィールド１５０として、ポインタ移動要求通信パケット４２６を送信する。
【０１３７】
この後、対応するキャッシュライン１０８にキャッシングされているメモリブロック１０６を保有するクラスタに対して、自クラスタ番号の削除要求通信を送信する。すなわち、削除対象クラスタ番号４０２ｅは当該キャッシュライン１０８にキャッシングされているメモリブロック１０６を保有するクラスタのクラスタ番号、削除対象クラスタ内アドレス４０３ｅはそのメモリブロック１０６のクラスタ内アドレス、置き換えクラスタ番号４０９はポインタ移動要求通信パケット４２６の送信先のクラスタのクラスタ番号として、削除要求通信パケット４２４を送信し、自クラスタ番号の削除要求を出す。
【０１３８】
（２−３）読み出したキャッシュディレクトリ１０９がビットマップモード１７０であった場合は、当該ディレクトリ１０９に保持されているクラスタ番号を一つ選択し、そのクラスタに対応するビットを０とし、そのクラスタに対してビットマップ移動通信を行い、クラスタ記憶フィールド１５０を転送する。この後、置き換えクラスタ番号４０９をビットマップ移動通信の送信先クラスタ番号とし、対応するメモリブロック１０６を保有するクラスタに対して、自クラスタ番号の削除要求通信を送信する。
【０１３９】
（３）以上のようにして、自クラスタのクラスタ番号を木構造から削除した後は、当該キャッシュライン１０８に新たなメモリブロック１０６のデータをキャッシングすることができる。
【０１４０】
（動作例）
以下に本実施例のキャッシュディレクトリ方式の動作例を示す。本動作例では、クラスタ数は１０２４、クラスタ番号のポインタフィールド１およびポインタフィールド２は各２ビット、ビットマップフィールドは６ビットで表わされるものとする。なお、数字の後ろに付けた（２）は、その数字が２進数であることを示すものとする。また、クラスタ番号がｎであるクラスタは、単にクラスタｎと呼ぶものとする。
【０１４１】
（１）図６に、クラスタ0100000011(2)のメモリブロックMのディレクトリの初期状態を示す。初期状態ではメモリブロックMは終端モードである。
【０１４２】
（２）（１）の状態でクラスタ0100000001(2)がクラスタ0100000011(2)に対してメモリブロックMの読み出し要求通信を行うと、クラスタ0100000011(2)はクラスタ0100000001(2)に対してメモリブロックMの内容を読み出し返答通信で返す。このとき、クラスタ0100000001(2)のキャッシュディレクトリは終端モードとなり、クラスタ0100000011(2)の主記憶ディレクトリは読み出し要求通信（４−１）に従いポインタモードとなる。この状態を図７に示す。
【０１４３】
（３）（２）の状態でクラスタ0100000100(2)がクラスタ0100000011(2)に対してメモリブロックMの読み出し要求通信を行うと、クラスタ0100000011(2)はクラスタ0100000100(2)に対してメモリブロックMの内容を読み出し返答通信で返す。このとき、クラスタ0100000100(2)のキャッシュディレクトリは終端モードとなり、クラスタ0100000011(2)の主記憶ディレクトリは読み出し要求通信（４−３）に従いビットマップモードとなる。この状態を図８に示す。
【０１４４】
（４）（３）の状態で、クラスタ1001000001(2)がクラスタ0100000011(2)に対してメモリブロックMの読み出し要求通信を行うと、クラスタ0100000011(2)はクラスタ1001000001(2)に対してメモリブロックMの内容を読み出し返答通信で返す。このとき、クラスタ1001000001(2)のキャッシュディレクトリは終端モードとなり、クラスタ0100000011(2)の主記憶ディレクトリは読み出し要求通信（４−６）に従いポインタモードとなる。クラスタ0100000011(2)はビットマップ移動通信を行い、クラスタ0100000001(2)にビットマップを移動する。これに従い、クラスタ0100000001(2)はビットマップモードとなる。この状態を図９に示す。
【０１４５】
（５）（４）の状態で、クラスタ1011000010(2)がクラスタ0100000011(2)に対してメモリブロックMの読み出し通信を行うと、クラスタ0100000011(2)はクラスタ1011000010(2)に対してメモリブロックMの内容を読み出し返答通信で返す。このとき、クラスタ1011000010(2)のキャッシュディレクトリは終端モードとなる。クラスタ0100000011(2)は、読み出し要求通信（４−４）に従いクラスタ1001000001(2)に対して追加要求通信を行う。クラスタ1001000001(2)は、追加要求通信を受けて、ポインタモードとなる。この状態を図１０に示す。
【０１４６】
（６）（５）の状態で、クラスタ1001000001(2)でメモリブロックMがキャッシュのリプレースにより無効となると、キャッシュリプレース時の動作（２−２）に従い、クラスタ1001000001(2)は、クラスタ1011000010(2)に対してポインタ移動要求通信を行う。また、クラスタ0100000011(2)に対して置き換えクラスタ番号を1011000010(2)とし、削除要求通信を行う。
【０１４７】
クラスタ1011000010(2)は、ポインタ移動要求通信を受けて、ポインタ移動要求通信（３−３）に従い終端モードの状態を維持する。クラスタ0100000011(2)は削除要求通信を受けて、削除要求通信（２−１）に従い、クラスタ1011000010(2)をポインタフィールドに登録する。この状態を図１１に示す。
【０１４８】
（７）（６）の状態で、クラスタ0100000011(2)に対してメモリブロックMの書き込み要求通信が到着すると、クラスタ0100000011(2)はクラスタ0100000001(2)およびクラスタ1011000010(2)に対して無効化要求通信を送信する。クラスタ0100000001(2)は、無効化要求通信を受けて、クラスタ0100000100(2)に対して無効化要求通信を送信する。無効化要求通信を受けた全クラスタは、メモリブロックMをキャッシングしているキャッシュラインを無効化する。
【０１４９】
上記実施例によれば、主記憶ディレクトリ１０７およびキャッシュディレクトリ１０９にポインタモード１６０、ビットマップモード１７０および終端モード１８０を持たせ、以上に述べた通信を設けることにより、図２に示した木構造でメモリブロックをキャッシングした全クラスタを管理することができる。
【０１５０】
（実施例２）
本発明の実施例２を説明する。本実施例は実施例１の変形であるため、相違点についてのみ説明する。本実施例は、クラスタ１００内の主記憶制御回路１０５およびキャッシュ制御回路１０４の動作を変更することにより、主記憶装置１０３への書き込み時に、書き込む対象のメモリブロック１０６をキャッシングしている全キャッシュライン１０８の無効化の完了を保証する点が異なる。
【０１５１】
本実施例では、実施例１の書き込み要求通信および無効化要求通信の動作を変更し、これらに対して書き込み返答通信および無効化返答通信を設ける。
【０１５２】
（書き込み要求通信の変更点）
本実施例の書き込み要求通信は、実施例１の（１）〜（３）の処理の後に以下を追加する。
（４）クラスタ記憶フィールド１５０に登録されている全てのクラスタからの無効化返答通信を受信するのを待つ。
（５）書き込み要求通信の発行元に対して書き込み返答通信を送信する。
【０１５３】
（無効化要求通信の変更点）
本実施例の無効化要求通信は、実施例１の（３）および（４）を以下の処理に変更する。
【０１５４】
（３）読み出したキャッシュディレクトリ１０９のモードにより、（３−１）または（３−２）のいずれかを行う。
（３−１）読み出したキャッシュディレクトリ１０９がポインタモード１６０またはビットマップモード１７０であった場合、キャッシュ制御回路１０４は、クラスタ記憶フィールド１５０に登録されている全てのクラスタに対して、ネットワークインターフェイス回路１１２を通じて無効化要求通信を送信する。
（３−２）読み出したキャッシュディレクトリ１０９が終端モード１８０であった場合、キャッシュ制御回路１０９は当該キャッシュライン１０８を無効化し、無効化返答通信を無効化要求通信発行元に送信する。（４）以下の処理は行わない。
【０１５５】
（４）クラスタ記憶フィールドに登録されている全てのクラスタからの無効化返答通信を受信するのを待つ。
（５）当該キャッシュラインを無効化し、無効化返答通信を無効化要求通信発行元に送信する。
【０１５６】
本実施例により、全クラスタのキャッシュラインを無効化した後、書き込みを反映することができる。
【０１５７】
（実施例３）
本発明の実施例３を説明する。本実施例は実施例１の変形であるため、相違点のみ説明する。本実施例は、クラスタ１００内の主記憶制御回路１０５およびキャッシュ制御回路１０４の動作を変更することにより、書き込み更新型キャッシュ一致制御を実現する点が異なる。書き込み更新型とは、あるメモリブロックに対する書き込みが行われた場合に、当該メモリブロックをキャッシングしているすべてのキャッシュラインにその書き込みデータを反映させることを言う。
【０１５８】
本実施例では、実施例１の書き込み要求通信の動作を変更し、更新要求通信を設ける。
【０１５９】
（書き込み要求通信の変更点）
本実施例の書き込み要求通信は、実施例１の（３−１）および（３−２）を以下の処理に変更する。
【０１６０】
（３−１）アクセスしたメモリブロック１０６の主記憶ディレクトリ１０７がポインタモード１６０またはビットマップモードであった場合、クラスタ記憶フィールド１５０に登録されている全てのクラスタに対して更新要求通信を送信する。
（３−２）アクセスしたメモリブロック１０６の主記憶ディレクトリ１０７が終端モード１８０であった場合、当該メモリブロック１０６はどこにもキャッシングされていないため、キャッシュの一貫性制御はおこなわない。
【０１６１】
（更新要求通信）
クラスタ１００に対する更新要求通信は、書き込みにより更新するデータとそのアドレスとからなる更新要求通信パケットを送信することにより行われる。更新要求通信パケットを受信したときの処理は以下の通りである。
【０１６２】
（１）ネットワークインターフェイス回路１１２は、更新要求通信パケットのアドレスを用いてキャッシュ制御回路１０４に対してキャッシュ書き込み要求を行う。
（２）キャッシュ制御回路１０４は、キャッシュ書き込み要求のアドレスを用いて、キャッシュメモリ１０２の、当該アドレスに対応するキャッシュライン１０２に書き込みを行うとともに、キャッシュディレクトリ１０９およびモードフィールド１１０を読み出す。
【０１６３】
（３−１）アクセスしたキャッシュディレクトリ１０４がポインタモード１６０またはビットマップモード１７０であった場合、クラスタ記憶フィールド１５０に登録されている全てのクラスタに対して更新要求通信を送信する。
（３−２）アクセスしたキャッシュディレクトリ１０９が終端モード１８０であった場合、メモリブロック１０６は以下の階層にはキャッシングされていないため、キャッシュの一貫性制御はおこなわない。
【０１６４】
本実施例により、本発明のディレクトリ方式で、書き込み更新型キャッシュ一致制御を実現することができる。
【０１６５】
なお、本実施例においても、上記実施例２と同様にして、書き込み要求に対して当該メモリブロックをキャッシングしている全クラスタのキャッシュの更新の完了を保証することができる。具体的には、更新要求通信を発行したクラスタは更新返答通信を受けるまで待ち、更新要求の相手先である全てのクラスタから更新返答通信を受けたら、自クラスタに対して更新要求を発行したクラスタに更新返答通信を発行するようにする。そして、書き込み対象のクラスタでは、書き込み対象のメモリブロックに対応する主記憶ディレクトリにより指し示される全てのクラスタから更新返答通信を受けたら、書き込みを発行したクラスタに対して更新返答通信を送信し、書き込みを発行したクラスタは、更新返答通信を受けるまで待つことにより、全クラスタに対する書き込みの完了を保証する。
【０１６６】
（実施例４）
本発明の実施例４を説明する。図１２は、本実施例に係る並列計算機の構成を示す。本実施例は実施例１の変形であるため、相違点のみ説明する。なお、図１２において、図１と共通の装置・回路には同一の番号に−１を付けて表すものとし、実施例１の説明を流用する部分は番号に−１を付けたものに読み替えるものとする。
【０１６７】
上記実施例１では、クラスタ１００内のキャッシュメモリ１０２および主記憶装置１０３のブロック毎にキャッシュディレクトリ１０９および主記憶ディレクトリ１０７、モードフィールド１１０を設けた。これに対し、実施例４では、キャッシュディレクトリ１０９−１および主記憶ディレクトリ１０７−１を別に設けることにより、これらのメモリ量を減らす点が異なる。
【０１６８】
図１２において、キャッシュディレクトリ１０９−１は、キャッシュライン１０８−１の中で、終端モード以外のキャッシュラインのキャッシュライン番号、キャッシュディレクトリ１０９−１、およびモードフィールド１１０−１を保持する。主記憶ディレクトリ１０７−１は、メモリブロック１０６−１の中で、終端モード以外のメモリブロックのメモリブロック番号、主記憶ディレクトリ１０７−１、およびモードフィールド１１０−１を保持する。
【０１６９】
本実施例では、実施例１の読み出し要求通信、書き込み要求通信、追加要求通信、削除要求通信、ビットマップ移動要求通信、およびポインタ移動要求通信に以下の変更および追加を行う。
【０１７０】
（読み出し要求通信の変更点）
（２）主記憶制御回路１０５−１は、送信先クラスタ内アドレス４０３ａを用いて、主記憶装置１０３−１から当該アドレスに対応するメモリブロック１０６−１を読み出す。さらに、当該メモリブロック１０６−１に対応する主記憶ディレクトリ１０７−１およびモードフィールド１１０−１があれば、それらを読み出す。
【０１７１】
（４−１）アクセスしたメモリブロック１０６−１に対応する主記憶ディレクトリ１０７−１およびモードフィールド１１０−１がないときは、当該メモリブロック１０６−１が終端モードであるということである。この場合、主記憶制御回路１０５−１は、主記憶ディレクトリ１０７−１の空きエントリを当該メモリブロック１０６−１に割り当てる。主記憶ディレクトリ１０７−１に空きのエントリが存在しない場合、主記憶制御回路１０５−１は、主記憶ディレクトリ１０７−１の中から１エントリを選択し、リプレースする。この後、このエントリを、読み出し要求通信で読み出した主記憶メモリブロック１０６−１に対応する主記憶ディレクトリ１０７−１として使用する。以後の処理は、実施例１の（４−１）と同じである。
【０１７２】
（書き込み要求通信の変更点）
（３−１）実施例１の（３−１）と同じ処理を行う。ただし、「当該主記憶ディレクトリ１０７を終端モード１８０に変更する」代わりに、主記憶制御回路１０５−１は、書き込み要求通信を受けた主記憶のメモリブロック１０６−１に対応する主記憶ディレクトリ１０７−１のエントリを空きエントリに変更する。
【０１７３】
（追加要求通信の変更点）
（１）実施例１の（１）と同様にしてキャッシュディレクトリ１０９−１を読み出す。ただし、本実施例４では、キャッシュディレクトリがない場合もある。
【０１７４】
（２−１）キャッシュディレクトリがないときは、当該キャッシュライン１０８−１が終端モードであるということである。この場合、キャッシュ制御回路１０４−１は、キャッシュディレクトリ１０９−１の空きエントリを当該キャッシュライン１０８−１に割り当てる。キャッシュディレクトリ１０９−１に空きのエントリが存在しない場合、キャッシュ制御回路１０４−１は、キャッシュディレクトリ１０９−１の中から１エントリを選択し、リプレースする。この後、このエントリを、追加要求通信に対応する当該キャッシュライン１０８−１のキャッシュディレクトリ１０９−１として使用する。以後の処理は、実施例１の（２−１）と同じである。
【０１７５】
（削除要求通信の変更点）
（２−１）実施例１の（２−１）と同じ処理を行う。ただし、クラスタ記憶フィールド１５０に登録されているクラスタ番号の数が０となったときは、当該ディレクトリのモードを終端モードに変更する代わりに、当該ディレクトリを空きエントリに変更する。
【０１７６】
（２−３）実施例１の（２−３）と同じ処理を行う。ただし、クラスタ記憶フィールド１５０に保持するビットマップが全て０となったときは、当該ディレクトリのモードを終端モードに変更する代わりに、当該ディレクトリを空きエントリに変更する。
【０１７７】
（ビットマップ移動要求通信の変更点）
（２）実施例１の（２）と同様の処理であるが、ビットマップ移動要求通信パケット４２５の移動対象クラスタ番号４０２ｆおよび移動対象クラスタ内アドレス４０３ｆで示されるメモリブロック１０６−１がキャッシングされているキャッシュライン１０８−１は終端モードであるので、当該キャッシュライン１０８−１に対応するキャッシュディレクトリ１０９−１はないことになる。そこで、ビットマップ移動要求通信を受信したキャッシュ制御回路１０４−１は、キャッシュディレクトリ１０９−１の空きエントリを当該キャッシュライン１０８−１に割り当てる。キャッシュディレクトリ１０９−１に空きのエントリが存在しない場合、キャッシュ制御回路１０４−１は、キャッシュディレクトリ１０９−１の中から１エントリを選択し、リプレースする。この後、このエントリを、ビットマップ移動要求通信に対応するキャッシュライン１０８−１のキャッシュディレクトリ１０９−１として使用する。
【０１７８】
（３）実施例１の（３）と同様の処理であるが、ビットマップの全ビットが０である場合は、終端モードに変更する代わりに、当該キャッシュディレクトリ１０９−１を空きエントリに変更する。
【０１７９】
（ポインタ移動要求通信の変更点）
（２）実施例１の（２）と同様の処理であるが、当該キャッシュライン１０８−１に対応するキャッシュディレクトリ１０９−１がない場合があり、それが終端モードの場合である。終端モードの場合は（３−３）へ進む。
【０１８０】
（３−３）ポインタ移動要求通信を受信したキャッシュ制御回路１０４−１は、キャッシュディレクトリ１０９−１の空きエントリを当該キャッシュライン１０８−１に割り当てる。キャッシュディレクトリ１０９−１に空きのエントリが存在しない場合、キャッシュ制御回路１０４−１は、キャッシュディレクトリ１０９−１の中から１エントリを選択し、リプレースする。この後、このエントリを、ポインタ移動要求通信に対応するキャッシュライン１０８−１のキャッシュディレクトリ１０９−１として使用する。
【０１８１】
本実施例により、キャッシュラインより少ない数のキャッシュディレクトリおよび主記憶ブロックより少ない数の主記憶ディレクトリを使って、実施例１と同様のプロセッサ間データ一貫性保証装置を実現することができる。
【０１８２】
（実施例５）
本発明の実施例５を説明する。図１３は、本実施例に係る並列計算機の構成を示す。本実施例は実施例４の変形であるため、相違点のみ説明する。なお、図１３において、図１２と共通の装置・回路は番号の−１を−２に変えて表すものとし、実施例４の説明における番号は読み替えるものとする。
【０１８３】
本実施例は、クラスタ１００−２内のキャッシュディレクトリ１０９−２および主記憶ディレクトリ１０７−２を、キャッシュメモリ１０２−２および主記憶装置１０３−２上に設ける点が異なる。
【０１８４】
本実施例により、キャッシュメモリおよび主記憶装置の他にディレクトリ格納用のメモリを用意することなく、実施例１と同様のプロセッサ間データ一貫性保証装置を実現することができる。
【０１８５】
（実施例６）
次に、本発明の第６の実施例について説明する。本実施例は実施例１の変形であるため、相違点のみ説明する。本実施例は、クラスタ内のプロセッサがキャッシュ一貫性制御の処理の一部を分担する点が異なる。すなわち本実施例は、主記憶ディレクトリ１０７またはキャッシュディレクトリ１０９の動作モードがポインタモードからビットマップモードに変わる場合の変更処理を、クラスタ１００内の特定のプロセッサ１０１で実行する点を特徴とする。ただし、本発明は、主記憶制御回路およびキャッシュ制御回路とプロセッサとの処理の分担の仕方にかかわらず用いることができる。
【０１８６】
本実施例では、実施例１の読み出し要求通信、および追加要求通信を以下の様に変更する。
【０１８７】
（読み出し要求通信の変更点）
（４−３）ネットワークインターフェイス回路１１２は、主記憶制御回路１０５からプロセッサ処理の要求通知を受け、ディレクトリ制御を行うプロセッサ１０１に割り込みをかける。プロセッサ１０１は、アクセス対象のメモリブロック１０６の主記憶ディレクトリ１０７を読み出し、主記憶ディレクトリ１０７のモードフィールド１１０をビットマップモード１７０に変更し、ポインタモード１６０でクラスタ記憶フィールド１５０のエントリに登録されていたクラスタ番号に対応するビットを１とする。
【０１８８】
（追加要求通信の変更点）
（２−３）ネットワークインターフェイス回路１１２は、キャッシュ制御回路１０４からプロセッサ処理の要求通知を受け、ディレクトリ制御を行うプロセッサ１０１に割り込みをかける。プロセッサ１０１は、アクセス対象のキャッシュライン１０８のキャッシュディレクトリ１０９を読み出し、キャッシュディレクトリ１０９のモードフィールド１１０をビットマップモード１７０に変更し、ポインタモード１６０でクラスタ記憶フィールド１５０に登録されていた全てのクラスタ番号に対応するビットを１とした後、追加対象のクラスタ番号に対応するビットを１とする。
【０１８９】
本実施例により、ポインタモードからディレクトリモードへの移行時に必要な変更処理をプロセッサ１０１上のソフトウェアで行うことができ、キャッシュ制御装置および主記憶制御装置のハードウェア量を削減し、実施例１と同様のプロセッサ間データ一貫性保証装置を実現することができる。
【０１９０】
【発明の効果】
本発明によれば、下位の階層の全クラスタのキャッシング状態を管理する特別なディレクトリ管理専用の制御回路を設けたり、特定のクラスタにディレクトリ管理を行わせることなく、ツリーディレクトリ方式と比較して階層の高さが低いキャッシュディレクトリ方式を実現できる。すなわち、多数のプロセッサからなる並列計算機において、ツリーディレクトリ方式や階層型フルマップディレクトリ方式と同程度の大きさのディレクトリしか使用せず、ツリーディレクトリ方式より階層が低く、階層型フルマップディレクトリ方式のように特定のディレクトリ管理ノードへのアクセスが集中しないディレクトリ管理方式を用いたプロセッサ間データ一貫性保証装置が提供される。
【図面の簡単な説明】
【図１】本発明の実施例に係る並列計算機の構成図。
【図２】木構造のディレクトリによるキャッシュラインの管理の仕方を示す図
【図３】本実施例におけるディレクトリの構成図。
【図４】本実施例におけるクラスタ番号の構成図。
【図５】本実施例におけるパケットの構成図。
【図６】本発明の実施例１の動作例（１）に係るディレクトリの連結を示す図。
【図７】本発明の実施例１の動作例（２）に係るディレクトリの連結を示す図。
【図８】本発明の実施例１の動作例（３）に係るディレクトリの連結を示す図。
【図９】本発明の実施例１の動作例（４）に係るディレクトリの連結を示す図。
【図１０】本発明の実施例１の動作例（５）に係るディレクトリの連結を示す図。
【図１１】本発明の実施例１の動作例（６）に係るディレクトリの連結を示す図。
【図１２】本発明の実施例４に係る並列計算機の構成図。
【図１３】本発明の実施例５に係る並列計算機の構成図。
【図１４】従来のフルマップディレクトリ方式の動作を示す図。
【符号の説明】
１０ａ〜１０ｄ…プロセッサ、１２ａ〜１２ｄ…キャッシュ、２０…ネットワーク、３０…主記憶装置、３１…メモリブロック、３２…ディレクトリ、１００，１００−１〜２…クラスタ、１０１，１０１−１〜２…プロセッサ、１０２，１０２−１〜２…キャッシュメモリ、１０３，１０３−１〜２…主記憶装置、１０４，１０４−１〜２…キャッシュ制御回路、１０５，１０５−１〜２…主記憶制御回路、１０６，１０６−１〜２…メモリブロック、１０７，１０７−１〜２…主記憶ディレクトリ、１０８，１０８−１〜２…キャッシュライン、１０９，１０９−１〜２…キャッシュディレクトリ、１１０，１１０−１〜２…モードフィールド、１１１，１１１−１〜２…バス、１１２，１１２−１〜２…ネットワークインターフェイス回路、２００，２００−１〜２…ネットワーク、１１０ａ〜１１０ｃ…モードフィールド、１５０…クラスタ記憶フィールド、１６１−０〜１６１−３…クラスタ番号、１６２−０〜１６２−３…クラスタ番号存在フラグ、１６０…ポインタモードのディレクトリ、１７０…ビットマップモードのディレクトリ、１８０…終端モードのディレクトリ、１７１…ビットマップ、３０１…主記憶ディレクトリ、３２１，３２２，３３１〜３３４，３４１〜３４５…キャッシュディレクトリ、３５０…ポインタフィールド、３５１…ビットマップフィールド、４００ａ〜４００ｈ…パケット送信先クラスタ番号、４０１ａ〜４０１ｈ…パケット送信元クラスタ番号、４０２ｃ〜４０２ｈ…対象クラスタ番号、４０３ａ〜４０３ｈ…クラスタ内アドレス、４０４…書き込みデータ、４０５…追加クラスタ番号、４０６…ビットマップ、４０７…ポインタ、４０８…返答データ、４０９…置き換えクラスタ番号、４２０…読み出し要求通信パケット、４２１…書き込み要求通信パケット、４２２…無効化要求通信パケット、４２３…追加要求通信パケット、４２４…削除要求通信パケット、４２５…ビットマップ移動要求通信パケット、４２６…ポインタ移動要求通信パケット、４２７…読み出し返答通信パケット。
【図１】
0003754112.tif 000002
【図２】
0003754112.tif 000003
【図３】
0003754112.tif 000004
【図４】
0003754112.tif 000005
【図５】
0003754112.tif 000006
【図６】
0003754112.tif 000007
【図７】
0003754112.tif 000008
【図８】
0003754112.tif 000009
【図９】
0003754112.tif 000010
【図１０】
0003754112.tif 000011
【図１１】
0003754112.tif 000012
【図１２】
0003754112.tif 000013
【図１３】
0003754112.tif 000014
【図１４】
0003754112.tif 000015