JP3754112B2 - プロセッサ間データ一貫性保証装置 - Google Patents
プロセッサ間データ一貫性保証装置 Download PDFInfo
- Publication number
- JP3754112B2 JP3754112B2 JP19435895A JP19435895A JP3754112B2 JP 3754112 B2 JP3754112 B2 JP 3754112B2 JP 19435895 A JP19435895 A JP 19435895A JP 19435895 A JP19435895 A JP 19435895A JP 3754112 B2 JP3754112 B2 JP 3754112B2
- Authority
- JP
- Japan
- Prior art keywords
- cluster
- directory
- cache
- main storage
- clusters
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Description
【0001】
【産業上の利用分野】
本発明は、複数計算機で共有するデータの一貫性を保証するプロセッサ間データ一貫性保証装置に関する。
【0002】
【従来の技術】
複数のプロセッサを結合し並列処理を行う並列計算機は、プロセッサ台数に応じた計算の高速化を図ることが可能であるため、重要な技術となっている。並列計算機において、各プロセッサが相互に並列計算機上の全主記憶をアクセスし、これをキャッシングする場合、プロセッサ間でのキャッシュの一貫性の保証が重要な課題となる。
【0003】
キャッシュの一貫性の保証とは、各プロセッサが、それぞれ独立に主記憶の内容を自プロセッサのキャッシュメモリ上に保持するときに、全プロセッサに対して主記憶の内容が同一に見えることを保証することである。
【0004】
例えば、プロセッサAおよびプロセッサBが主記憶上のブロックMをキャッシングしている場合、プロセッサCがブロックMに対して書き込みを行うと、プロセッサAおよびBのキャッシュメモリの内容は主記憶装置上の当該ブロックMの内容と異なることとなり一貫性が取れなくなる。この場合、キャッシュの一貫性を保証するためには、プロセッサAおよびBの対応するキャッシュラインを更新するか、無効化する必要がある。
【0005】
バス結合型並列計算機の場合、キャッシュの一貫性を保つ方法としてスヌープ方式が使用される。スヌープ方式では、各プロセッサのキャッシュ制御装置が、バス上に出力される全ての書き込み要求のアドレスを監視する。そして、他プロセッサが、自プロセッサのキャッシュに保持しているメモリブロック(主記憶上のブロックを単にメモリブロックと呼ぶこととする)に対する書き込み要求をバスに出力すると、当該キャッシュラインを無効化する。これにより、次回に当該メモリブロックにアクセスを行うと、当該メモリブロックはすでにキャッシュから無効化されているため、主記憶を直接読み出すこととなり、最新のデータをアクセスすることができる。スヌープ方式では、他プロセッサから自プロセッサの保持するメモリブロックに対して書き込みを行う際、当該キャッシュラインを無効化する代わりに、自プロセッサのキャッシュラインを最新データに更新する方式も提案されている。
【0006】
バス結合型並列計算機は、プロセッサ台数が増加すると、メモリアクセスがバスに集中するため、十数プロセッサ程度の規模がプロセッサ数の限界となる。
【0007】
さらにプロセッサ台数を増やす場合、主記憶上のキャッシングの対象となるブロック毎にディレクトリと呼ばれる構造体を付加することにより、各プロセッサのキャッシュの一貫性を保証する方式が用いられる。
【0008】
ディレクトリは、当該メモリブロック(そのディレクトリに対応するメモリブロック)をキャッシングした全プロセッサのプロセッサ番号を保持する領域である。メモリブロックに対して書き込み要求が到着すると、ディレクトリで示された全プロセッサのキャッシュラインに対して書き込みを反映するか無効化することによりキャッシュの一貫性を保証する。
【0009】
従来、プロセッサ台数が比較的少ない場合には、ディレクトリ方式として、フルマップディレクトリが主に採用されている。図14に、フルマップディレクトリ方式を用いた並列計算機の構成の概要およびその動作を示す。
【0010】
図14の並列計算機では、主記憶装置30がネットワーク20を介して複数のプロセッサ10a〜10dに結合されている。各プロセッサ10a〜10dは、それぞれ、キャッシュメモリ12a〜12dを持つ。また、主記憶装置30は、複数のメモリブロック31で構成され、各メモリブロック31毎にディレクトリ32が付加されている。
【0011】
ディレクトリ32は、プロセッサ台数分のビット列(各ビットは各プロセッサに対応している)からなる。ディレクトリ32の各ビットは、各プロセッサ10a〜10dに付加されたキャッシュが、対応するメモリブロック31をキャッシングしたときに1となり、キャッシングしていないときには0となる。図14では、プロセッサ10aおよび10dが、キャッシュメモリ12aおよび12d上にメモリブロックMをキャッシングしている。したがって、メモリブロックMに対応するディレクトリ32においては、プロセッサ10aおよび10dに対応するビットが1となり、プロセッサ10bおよび10cに対応するビットが0となっている。
【0012】
この状態で、例えばプロセッサ10bがメモリブロックMに対して書き込みを行うと、その書き込みアクセスはネットワーク20を介して主記憶装置30に送信される。主記憶装置30は、書き込みデータをメモリブロックMに書き込むと共に、ディレクトリ32を見てメモリブロックMをキャッシングしているプロセッサはプロセッサ10aおよびプロセッサ10dであることを知り、キャッシュ12aおよび12dに対して無効化要求を発行する。無効化要求を受けたキャッシュ12aおよび12dは、メモリブロックMのコピーをキャッシュメモリ内から抹消する。これにより、以降にプロセッサ10aまたはプロセッサ10bがメモリブロックMに読み出しアクセスを行うと、キャッシュ12aおよび12d内にはメモリブロックMのコピーが存在せず、主記憶装置30に対してアクセスすることとなり、最新データを読み出すことができる。
【0013】
プロセッサ台数がさらに多くなると、フルマップディレクトリではディレクトリに必要なメモリ量の全メモリ量に対する割合が大きくなる。プロセッサ数をPとするとメモリブロック当たりPビットのディレクトリが必要となる。メモリブロックは、通常64バイトから1024バイト程度の大きさであり、フルマップディレクトリで数百プロセッサ以上の並列計算機を構成すると、ディレクトリはメモリブロックあたり十数バイトから百バイト程度となり実用的でない。
【0014】
このため、数百プロセッサ以上の並列計算機のディレクトリ方式として、例えば「Computer Architecture News Vol.19, No.5, 1991,『Two Economical Directory Schemes for Large-Scale Cache Coherent Multiprocessors』, Yeong-Chang Maaほか」には、ツリーディレクトリ方式および階層型フルマップディレクトリ方式が提案されている。
【0015】
ツリーディレクトリ方式は、メモリブロックおよびキャッシュライン毎に複数のプロセッサ番号を記憶するディレクトリを設け、これを木構造に連結することにより、当該メモリブロックをキャッシングしている全プロセッサを記録する方式である。例えば、メモリブロックおよびキャッシュライン毎に4つのプロセッサ番号を記憶するディレクトリを設けるとする。あるメモリブロックMのディレクトリには、当該メモリブロックMをキャッシングしている4つのプロセッサのプロセッサ番号が記憶されている。さらに、その4つのプロセッサのそれぞれにおいて、当該メモリブロックMをキャッシングしているキャッシュラインのディレクトリには、やはり当該メモリブロックMをキャッシングしている4つのプロセッサのプロセッサ番号が記憶されている。以下同様にして、当該メモリブロックMをキャッシングしている全プロセッサを木構造の形式で記録することができる。
【0016】
メモリブロックに対して書き込みが行われたときには、当該メモリブロックのディレクトリから木構造をたどって当該メモリブロックMをキャッシングしている全プロセッサを知ることができる。このツリーディレクトリ方式では、全プロセッサ数をP、1ディレクトリ当たりに記憶できるプロセッサ番号の数をNとすると、ディレクトリ当たりNlog2Pビットの記憶領域を使用する。
【0017】
一方、階層型フルマップディレクトリ方式は、メモリブロックおよびキャッシュライン毎にビットマップを持ち、これを木構造に連結することにより、当該メモリブロックをキャッシングしている全プロセッサを記録する方式である。メモリブロックおよびキャッシュライン毎に設けられたビットマップの各ビットは、下位のプロセッサ(またはディレクトリ管理専用の制御ノード)に対応づけられている。最下位のビットマップは、対応するプロセッサグループ内の全プロセッサのキャッシング状況を示す。上の階層のビットマップは、プロセッサグループ単位でのキャッシング状況を示す。
【0018】
主記憶上のメモリブロックに対して書き込みが行われたとき、主記憶の制御回路は、当該メモリブロックのディレクトリからビットマップを読み出す。そして、そのビットマップ中で1が立っているビットを探す。1が立っているということは、そのビットに対応するプロセッサグループ内の何れかのプロセッサで当該メモリブロックをキャッシングしているということである。そこで、主記憶の制御回路は、読み出したビットマップ中で1が立っているビットに対応するすべてのプロセッサグループのディレクトリ管理回路に対して無効化の要求を出す。この無効化の要求を受けたプロセッサグループのディレクトリ管理回路では、キャッシュ制御回路により、ディレクトリからビットマップを読み出し、そのビットマップ中で1が立っているビットを探す。1が立っているということは、そのビットに対応するプロセッサで当該メモリブロックをキャッシングしているということである。そこで、キャッシュ制御回路は、読み出したビットマップ中で1が立っているビットに対応するすべてのプロセッサに対して無効化要求を出す。このようにして、書き込みが行われたメモリブロックをキャッシングしているすべてのプロセッサに対して無効化を出すことができる。
【0019】
【発明が解決しようとする課題】
上記従来技術のうち、ツリーディレクトリ方式では、階層の高さ(深さ)が深くなるため、無効化の処理に時間がかかる。例えば、1024台のプロセッサからなる並列計算機で4プロセッサを指すことができるディレクトリを使用した場合、4×4×4×4×4=1024であるため最大6階層となる。したがって、無効化のための通信に最大5ステップの通信が行われるため時間がかかる。
【0020】
一方、上記従来技術のうち、階層型フルマップディレクトリ方式では、最上位の主記憶の制御回路からはプロセッサグループ単位でのキャッシング状況しか見えないため、プロセッサグループ内のどのプロセッサに対して無効化要求を出せばよいかを選択することができない。よって、階層型フルマップディレクトリ方式では、プロセッサグループごとにディレクトリ管理専用の制御ノードの役割を果たすハードウェアを設けるか、またはプロセッサグループ内の特定プロセッサが該プロセッサグループを代表してディレクトリの管理を行うようにする必要がある。したがって、ディレクトリ管理ノードに対してキャッシュ制御に伴う通信が集中するという問題がある。
【0021】
本発明の目的は、多数のプロセッサからなる並列計算機において、ツリーディレクトリ方式や階層型フルマップディレクトリ方式と同程度の大きさのディレクトリしか使用せず、ツリーディレクトリ方式より階層が低く、階層型フルマップディレクトリ方式のように特定のディレクトリ管理ノードへのアクセスが集中しないディレクトリ管理方式を用いたプロセッサ間データ一貫性保証装置を提供することにある。
【0022】
【課題を解決するための手段】
本発明は、並列計算機においてキャッシュの一貫性を保証するために、主記憶ブロックおよびキャッシュラインごとにディレクトリを保持し、これらのディレクトリでは当該主記憶ブロックをキャッシングしているクラスタを記録する態様として2種類以上の態様の中から1つの態様を主記憶ブロックまたはキャッシュライン毎に選択可能であるようにし、選択された態様で当該主記憶ブロックをキャッシングしているクラスタを記録するとともに、該態様を示すモードフィールドを備えるようにしたことを特徴とする。そして、主記憶制御回路およびキャッシュ制御回路で、ディレクトリおよびモードフィールドを制御し、ディレクトリに記録されている複数のクラスタに対し、ネットワークを介してキャッシュ制御用の通信を発行するようにする。
【0023】
特に、主記憶ブロックのディレクトリを根として、当該主記憶ブロックをキャッシングした全クラスタのキャッシュラインのディレクトリを木構造の連鎖で結合して管理するとよい。また、各主記憶ブロックおよびキャッシュラインのディレクトリは、複数のクラスタへのポインタとして動作するポインタモードと、ビットマップとして動作するビットマップモードを備え、ポインタモードでは、任意のクラスタを指し、ビットマップとして動作するモードでは、クラスタグループ内の全クラスタのキャッシングの状態を示すようにする。
【0024】
主記憶ブロックへの書き込みの際に、書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックの主記憶ディレクトリにより指し示される全てのクラスタに対して無効化要求を発行し、無効化要求を受けたクラスタのキャッシュ制御回路は、当該主記憶ブロックに対応するキャッシュラインを無効化するとともに、対応するキャッシュディレクトリにより指し示される全てのクラスタに対して無効化要求を発行していくことにより、同一主記憶ブロックをキャッシングした全てのクラスタ内の対応するキャッシュラインを無効化するようにする。書き込みデータを送信して、同一主記憶ブロックをキャッシングしている全てのクラスタ内の対応するキャッシュラインを更新するようにしてもよい。
【0025】
主記憶ブロックへの書き込みの際に、キャッシュの無効化や更新の要求を発行した場合、無効化完了通信や更新返答通信を受けるのを待つことにより、全クラスタに対する書き込みの完了を保証するようにしてもよい。
【0026】
ディレクトリはブロックごとに持ってもよいし、別のディレクトリ用メモリ領域を用意し、当該ブロックから指し示すべきクラスタがある場合にのみ該ディレクトリ用メモリ領域に当該ブロックのディレクトリを登録するようにしてもよい。また、主記憶制御回路やキャッシュ制御回路の機能をクラスタ内の特定のプロセッサで代替するようにしてもよい。
【0027】
【作用】
本発明によれば、各ディレクトリにクラスタを記録する態様として2種類以上の態様の中から1つを選択できる。したがって、階層の高さが低い方式、ディレクトリの大きさが大きくない方式、特定のノードへのアクセスが集中しない方式などを組み合わせることができる。特に、各ディレクトリは、複数クラスタへのポインタとして動作するポインタモードと、クラスタグループ内の全クラスタのビットマップとして動作するビットマップモードを持つ。これにより、ツリーディレクトリで構成する木構造の下位数階層をビットマップ1階層に置き換えることができ、ツリーディレクトリ方式と比較して階層が少なくなる。また、上位階層はポインタによるツリー構造となり、任意のクラスタを指すことができる。このため、階層型フルマップディレクトリ方式のようにディレクトリ管理専用回路を設けることや、特定のクラスタにディレクトリの管理を行わせる必要がなく、特定の回路またはクラスタに対して通信が集中することがない。
【0028】
【実施例】
以下、図面を用いて本発明の実施例を説明する。
【0029】
(実施例1)
まず、本発明の第1の実施例について説明する。図1は、第1の実施例に係る並列計算機を示す。本実施例では、複数のクラスタ100がネットワーク200により結合されている。図1において、101はプロセッサであり、従来技術におけるマイクロプロセッサと同じ構成でよい。クラスタ100は、1つ以上のプロセッサからなる密結合マルチプロセッサ構成を取る。
【0030】
各クラスタ100は、複数のプロセッサ101と、1つのキャッシュメモリ102、主記憶装置103、キャッシュ制御回路104、主記憶制御回路105、およびネットワークインターフェイス回路112からなる。また、ネットワーク200において、あるクラスタAから同一クラスタBに対して複数の通信を行った場合、クラスタAにおける発行順とクラスタBにおける到着順とは同じであるものとする。
【0031】
主記憶装置103は、従来技術を用いてアドレス線およびデータ線を使ってアクセスする。主記憶装置103は複数のメモリブロック106からなり、メモリブロック106毎に主記憶ディレクトリ107が設けられている。主記憶ディレクトリ107内にはモードフィールド110が設けられている。主記憶装置103は、当該クラスタ100内のプロセッサ101からアクセスされると共に、他のクラスタ100内のプロセッサ101からもアクセスされる。すなわち、各クラスタ100内の主記憶装置103は、全クラスタにより共有される記憶領域である。
【0032】
キャッシュメモリ102は、メモリブロック106と同じ大きさのキャッシュライン108からなり、キャッシュライン毎にキャッシュディレクトリ109が設けられている。キャッシュディレクトリ109内にはモードフィールド110が設けられている。キャッシュライン108に、自クラスタ100および他クラスタ内の主記憶装置103のメモリブロック106のコピーを格納することにより、キャッシングを行う。
【0033】
キャッシュ制御回路104は、キャッシュメモリ102およびキャッシュディレクトリ109を制御する回路である。
【0034】
主記憶制御回路105は、主記憶装置103の読み出し、書き込みおよび主記憶ディレクトリ107の制御を行う回路である。ネットワークインターフェイス回路112は、ネットワーク200を通じて他クラスタのネットワークインターフェイス回路と接続されており、クラスタ100内から自クラスタまたは他クラスタの主記憶装置へのメモリアクセス、他クラスタから自クラスタ100の主記憶装置103へのメモリアクセス、およびクラスタ間のディレクトリ制御通信の送受信を行う回路である。
【0035】
本実施例では、主記憶ディレクトリ107およびキャッシュディレクトリ109にモードフィールド110を設け、ディレクトリに複数の動作モードを設けることに特徴がある。
【0036】
図3に、主記憶ディレクトリ107およびキャッシュディレクトリ109の構造を示す。1つのディレクトリは、モードフィールド110およびクラスタ記憶フィールド150よりなる。本実施例では、並列計算機のクラスタ数は1024、クラスタ当たりのプロセッサ数は1としており、ディレクトリのモードフィールド110は2ビット、クラスタ記憶フィールド150は64ビットの大きさとしており、全クラスタを64クラスタからなるクラスタグループ16個に分割しているが、本発明は、並列計算機のクラスタ数、クラスタ当たりのプロセッサ数およびディレクトリのサイズに関らず用いることができる。
【0037】
ここで、クラスタ番号について説明しておく。本実施例ではクラスタ数が1024であるので、各クラスタには0〜1023(2進数で表すと、10ビットで00…0から11…1)のクラスタ番号が付けられている。この10ビットのクラスタ番号の上位4ビットが等しいクラスタが同じクラスタグループに属するようにクラスタグループを形成する。例えば、10ビットのクラスタ番号が0000******である64個のクラスタが1つのクラスタグループ、10ビットのクラスタ番号が0001******である64個のクラスタが1つのクラスタグループ、10ビットのクラスタ番号が0010******である64個のクラスタが1つのクラスタグループ、…というような具合である。*は、0または1の任意の1ビットデータを示すものとする。
【0038】
図3を参照して、ディレクトリの構造について説明する。ディレクトリは、ポインタモード160、ビットマップモード170、および終端モード180を持つ。モードに応じて、クラスタ記憶フィールド150の用い方が異なるようになっている。
【0039】
ポインタモード160は、モードフィールド110aが00(2進)であるモードである。ポインタモード160において、クラスタ記憶フィールド150には、4つの10ビットのクラスタ番号161−0,161−1,161−2,161−3および各クラスタ番号に対応するクラスタ番号存在フラグ162−0,162−1,162−2,162−3が記憶される。クラスタ番号存在フラグ162が0の場合は、そのクラスタ番号存在フラグに対応するクラスタ番号が無効であることを示す。クラスタ番号存在フラグが1の場合は、そのクラスタ番号存在フラグに対応するクラスタ番号が有効であり、そのクラスタ番号で指されるクラスタに同一のメモリブロック106がキャッシングされていることを示す。
【0040】
ビットマップモード170は、モードフィールド110bが01(2進)であるモードである。ビットマップモード170において、クラスタ記憶フィールド150には、64ビットのビットマップ171が記憶される。ビットマップ171の各ビットは、当該ディレクトリを保持するクラスタが含まれるクラスタグループ内のキャッシング状況を示しており、ビットマップ171のビットが1ならば、当該ビットに対応するクラスタが同一メモリブロック106をキャッシングしていることを示す。
【0041】
なお、クラスタグループ内におけるビットマップ171の各ビットとクラスタとの対応は、クラスタ番号の下位6ビットによってビットマップ171内の対応ビットの位置を示すようになっている。すなわち、ビットマップ171内の第k番目のビットは、クラスタ番号の下位6ビットがk−1であるクラスタに対応する。例えば、ビットマップ171の先頭ビットはクラスタ番号の下位6ビットが0(10進)であるクラスタに対応し、ビットマップ171の第2番目のビットはクラスタ番号の下位6ビットが1(10進)であるクラスタに対応し、ビットマップ171の第3番目のビットはクラスタ番号の下位6ビットが2(10進)であるクラスタに対応し、…、ビットマップ171の第64番目のビットはクラスタ番号の下位6ビットが63(10進)であるクラスタに対応する。
【0042】
終端モード180は、モードフィールド110cが10(2進)であるモードであり、クラスタ記憶フィールド150は使用されない。本モードは、当該メモリブロックまたはキャッシュラインの下に、他クラスタのキャッシュラインが関連付けられていないことを示す。
【0043】
図3で示したディレクトリ構造を用いて、メモリブロック106毎に、メモリブロック106を頂点として、全クラスタにまたがって木構造を作成し、メモリブロックをキャッシングした全キャッシュラインを管理する。
【0044】
図2は、主記憶ディレクトリおよびキャッシュディレクトリを使って構成される木構造によるキャッシュラインの管理の仕方を示す図である。図2において、301は主記憶ディレクトリであり、321,322,331,332,333,334,341,342,343,344,345はキャッシュディレクトリである。この木構造において、頂点の主記憶ディレクトリ301を階層1と定義する。階層1の主記憶ディレクトリ301により直接指されるキャッシュディレクトリ321,322を階層2と定義する。階層2内のキャッシュディレクトリ321,322により直接指されるキャッシュディレクトリ331,332,333,334を階層3と定義する。以後同様にして、階層4,5,…を定義する。
【0045】
図2の木構造は、以下に示す規則に従って構成する。
【0046】
(規則1)
ポインタモード160でクラスタ記憶フィールド150に記述するクラスタ数をPp、ビットマップモード170でクラスタ記憶フィールド150に記述するクラスタ数をPb、全クラスタ数をPとする。このとき、xlog2 Pp+log2Pb=log2Pを満たすxについて、階層x+1に位置するディレクトリはビットマップモードまたは終端モードであり、階層x+2に位置するディレクトリは終端モードである。
【0047】
(規則2)
ビットマップモードにより直接指されるキャッシュラインは、終端モードのみである。
【0048】
(規則3)
図4に、クラスタ番号を2進数で表したビット列を示す。クラスタ番号は、log2P=xlog2Pp+log2Pbを満たすx個のポインタフィールド350および1個のビットマップフィールド351よりなる。階層jのディレクトリがポインタモードであったとき、そのディレクトリのクラスタ番号フィールドのk番目で指す部分木内の全クラスタのクラスタ番号は、ポインタフィールド1からポインタフィールドj−1までが当該ディレクトリが存在するクラスタのクラスタ番号と等しく、ポインタフィールドjがk−1となる。なお、j=1のときは、階層1のディレクトリがポインタモードであったとき、そのディレクトリのクラスタ番号フィールドのk番目で指す部分木内の全クラスタのクラスタ番号は、ポインタフィールド1(クラスタ番号の第1番目のポインタフィールド)がk−1となる、ということである。なお、ポインタフィールド350のうち、先頭のポインタフィールドから順にポインタフィールド1,2,…と呼ぶこととする
。
【0049】
(規則4)
ビットマップモードで指される全クラスタのクラスタ番号は、全ポインタフィールドが当該ディレクトリの存在するクラスタ番号のポインタフィールドと等しい。
【0050】
規則1〜4について詳しく説明する。規則1は、図2の木構造の高さ(深さ)の限界を規定するものである。全クラスタ数をPとするとき、log2Pはそれらのクラスタに付けるクラスタ番号を表現するビット数になる。クラスタ番号を表現するlog2Pビットのうち、log2Pbビット分はビットマップモードで特定する範囲を表わし、xlog2Ppビット分はポインタモードで特定する範囲(1階層がlog2Ppビット分であり、それがx階層分)を表わす。
【0051】
具体的に本実施例では、全クラスタ数P=1024であるからlog2P=10であり、10ビットのクラスタ番号で全クラスタを表現できる。すなわち、図4のクラスタ番号は10ビットで表わされる。また、ビットマップモードで64クラスタを記述するから、Pb=64でlog2Pb=6である。言い替えると、クラスタ番号10ビットのうち6ビット分(ここでは下位の6ビット)は、ビットマップモードで特定できる範囲(すなわち、この6ビットが、クラスタグループ内で1つのクラスタを特定するID)になっている。クラスタ番号10ビットのうちこの6ビット分を除いた4ビット分が、ポインタモードで特定する範囲であり、上記数式中のxlog2Ppに相当する。ポインタモードでは1つのディレクトリのクラスタ記憶フィールド150に4つのクラスタ番号を記述するから、Pp=4でlog2Pp=2である。したがって、x=2である。これは、図2の木構造が最大の高さとなる場合は、x=2までの階層すなわち階層1と階層2がポインタモードになり、その下の階層3はビットマップモードになり、その下の階層4が終端モードになることを示すものである。なお、図4ではポインタフィールド350が3つ図示してあるが、本実施例の例では、クラスタ番号全体が10ビットであり、2ビットのポインタフィールド350が2つと、残りの6ビットのビットマップフィールド351からなる。
【0052】
規則2は、ビットマップモードの下の階層は終端モードのみであることを規定したものである。
【0053】
規則3は、クラスタ番号の構成を規定したものである。規則3の後段は、ポインタモードのディレクトリのクラスタ番号フィールドに設定するクラスタ番号と木構造につながれるクラスタのクラスタ番号の関係を表す。図2を参照して、この関係を説明する。図2において、主記憶ディレクトリ301はポインタモードになっており、第2番目のクラスタ番号フィールドにクラスタPaのクラスタ番号aが、第3番目のクラスタ番号フィールドにクラスタPbのクラスタ番号bが、それぞれ記憶され、第1番目と第4番目のクラスタ番号フィールドは無効になっている。これは、この主記憶ディレクトリに対応するメモリブロックがクラスタPa,Pbにおいてキャッシングされていることを示している。また、この主記憶ディレクトリ301の4つのクラスタ番号フィールドは、順にクラスタ番号の先頭の2ビット(ポインタフィールド1)が00,01,10,11(10進では0,1,2,3)であるクラスタを記憶するフィールドである。したがって、第2番目のクラスタ番号フィールドによってつながれているクラスタPaのクラスタ番号a(10ビット)は先頭2ビットが01であることが分かる。同様に、第3番目のクラスタ番号フィールドによってつながれているクラスタPbのクラスタ番号b(10ビット)は先頭2ビットが10であることが分かる。
【0054】
階層2に移って、321はクラスタPa内で主記憶ディレクトリ301に対応するメモリブロックをキャッシングしているキャッシュラインに対応するディレクトリであり、322はクラスタPb内で主記憶ディレクトリ301に対応するメモリブロックをキャッシングしているキャッシュラインに対応するディレクトリである。キャッシュディレクトリ321はポインタモードになっており、第1番目のクラスタ番号フィールドにクラスタPcのクラスタ番号cが、第3番目のクラスタ番号フィールドにクラスタPdのクラスタ番号dが、それぞれ記憶され、第2番目と第4番目のクラスタ番号フィールドは無効になっている。これは、このキャッシュディレクトリに対応するキャッシュラインがクラスタPc,Pdでもキャッシングされていること(すなわち、階層1の主記憶ディレクトリ301に対応するメモリブロックがキャッシングされているということ)を示している。また、このキャッシュディレクトリ321の4つのクラスタ番号フィールドは、順にクラスタ番号の先頭2ビット(2進で01)の次の2ビット(ポインタフィールド2)が00,01,10,11であるクラスタを記憶するフィールドである。したがって、第1番目のクラスタ番号フィールドによってつながれているクラスタPcのクラスタ番号c(10ビット)は先頭2ビットが01で次の2ビットが00であることが分かる。同様に、第3番目のクラスタ番号フィールドによってつながれているクラスタPdのクラスタ番号d(10ビット)は先頭2ビットが10で次の2ビットが10であることが分かる。
【0055】
階層2のディレクトリ322もポインタモードであり、その第2,3番目のクラスタ番号フィールドにクラスタPf,Pgのクラスタ番号f,gが記憶されている。したがって、当該メモリブロック(階層1の主記憶ディレクトリ301に対応するメモリブロック)がクラスタPf,Pgでキャッシングされており、クラスタ番号fは先頭4ビットが1001であり、クラスタ番号gは先頭4ビットが1010であることが分かる。
【0056】
階層3に移って、331,332,333,334は、それぞれクラスタPc,Pd,Pf,Pg内で当該メモリブロックをキャッシングしているキャッシュラインに対応するディレクトリである。ディレクトリ331,332,333は終端モードであり、これ以下の階層にはクラスタがつながれていない。ディレクトリ334はビットマップモードであり、1が立っているビットに対応するクラスタPh,Pi,Pj,Pk,Plに当該メモリブロックがキャッシングされていることが分かる。さらに、クラスタPh,Pi,Pj,Pk,PlはクラスタPgと同じクラスタグループに属し、これらのクラスタのクラスタ番号は何れも先頭4ビット(全ポインタフィールド)が1010(クラスタ番号gの全ポインタフィールドと同じ)であることが分かる。
【0057】
規則1から規則4により、任意のクラスタが図2のような木構造に含まれるか否かを調査するときには、頂点のメモリブロックのディレクトリから開始して全階層でディレクトリ内のいずれか一つのポインタをたどればよいこととなる。例えば、あるクラスタ番号Yが木構造に含まれるか調査するときには、以下の様に検索すればよい。
【0058】
(1) 調査対象の木構造の階層1のディレクトリを読み出す。iの初期値を1とする。
【0059】
(2)階層iのディレクトリのモードに応じて、以下の処理をクラスタ番号Yのディレクトリを読み出すか、終了条件を満たすまで繰り返す。
【0060】
(2−1) 階層iのディレクトリがポインタモードのとき:クラスタ番号Y中のポインタフィールドiを取り出し、そのポインタフィールドiの値をjとしたとき、階層iのディレクトリの第j+1番目のクラスタ番号フィールドのクラスタ番号存在フラグが1であればそのクラスタ番号フィールドからクラスタ番号を読み出し、当該クラスタ番号のクラスタのディレクトリを新たなディレクトリとして読み出す。これにより、階層i+1に移動する(i+1を新たなiとする)。読み出したクラスタ番号がクラスタ番号Yに一致したら、クラスタ番号Yは木構造に含まれていたこととなる。なお、読み出すべきクラスタ番号フィールドのクラスタ番号存在フラグが0であれば、終了する。
【0061】
(2−2)階層iのディレクトリがビットマップモードのとき:クラスタ番号Y中のビットマップフィールドからデータを取り出し、そのビットマップフィールドの値をjとしたとき、階層iのディレクトリのビットマップの第j+1番目のビットが1なら、当該ビットに対応するクラスタのディレクトリを読み出す。そのクラスタがクラスタ番号Yのクラスタである。ビットが0なら終了する。
【0062】
(2−3)階層iのディレクトリが終端モードのとき:処理を終了する。
【0063】
これらの処理により最後に到達したディレクトリのクラスタ番号がYであれば、クラスタ番号Yは木構造に含まれていたこととなる。
【0064】
次に、上記構成の並列計算機により書き込み無効化型キャッシュ一致制御を実現する方法を述べる。書き込み無効化型とは、あるメモリブロックに対する書き込み要求を受けたときに、その書き込みを行うと共に該メモリブロックをキャッシングしているすべてのキャッシュメモリに対して無効化を行うことをいう。
【0065】
クラスタ100は、ネットワークインターフェイス回路112を通してネットワーク200から主記憶装置103に対する読み出し要求通信および書き込み要求通信、並びに、キャッシュメモリ102に対する無効化要求通信、追加要求通信、削除要求通信、ビットマップ移動要求通信、およびポインタ移動要求通信を受けることができる。また、プロセッサ101に対する読み出し返答通信を受けることができる。
【0066】
さらにクラスタ100では、キャッシュ制御回路104および主記憶制御回路105からネットワークインターフェイス回路112を通じて他クラスタのキャッシュメモリに対して無効化要求通信、追加要求通信、削除要求通信、ビットマップ移動要求通信、およびポインタ移動要求通信を送ることができ、主記憶制御回路105からネットワークインターフェイス回路112を通じて他クラスタに対して読み出し返答通信を送ることができ、プロセッサ101からネットワーク200を通じて他クラスタに対して読み出し要求通信および書き込み要求通信を送ることができる。
【0067】
これらの要求通信の詳細について説明する。まず各要求通信のパケットの構成について説明する。図5は、各要求通信のパケットの構成である。
【0068】
各パケットは、パケット送信先クラスタ番号400a〜400hおよびパケット送信元クラスタ番号401a〜401hよりなるパケットヘッダを共通に持つ。パケット送信元クラスタ番号401a〜401hは、当該要求通信パケットを送信した送信元のクラスタのクラスタ番号である。パケット送信先クラスタ番号400a〜400hは、当該要求通信パケットの送信先のクラスタのクラスタ番号である。
【0069】
読み出し要求通信パケット420は、パケットヘッダ、および送信先クラスタ内アドレス403aからなる。
【0070】
書き込み要求通信パケット421は、パケットヘッダ、および送信先クラスタ内アドレス403b、書き込みデータ404からなる。
【0071】
無効化要求通信パケット422は、パケットヘッダ、無効化対象クラスタ番号402c、および無効化対象クラスタ内アドレス403cからなる。
【0072】
追加要求通信パケット423は、パケットヘッダ、追加対象クラスタ番号402d、追加対象クラスタ内アドレス403d、および追加クラスタ番号405からなる。
【0073】
削除要求通信パケット424は、パケットヘッダ、削除対象クラスタ番号402e、削除対象クラスタ内アドレス403e、および置き換え対象クラスタ番号409からなる。
【0074】
ビットマップ移動要求通信パケット425は、パケットヘッダ、移動対象クラスタ番号402f、移動対象クラスタ内アドレス403f、およびビットマップ406からなる。
【0075】
ポインタ移動要求通信パケット426は、パケットヘッダ、移動対象クラスタ番号402g、移動対象クラスタ内アドレス403f、およびポインタ407からなる。
【0076】
読み出し返答通信パケット427は、パケットヘッダ、返答対象クラスタ番号402h、返答対象クラスタ内アドレス403h、および返答データ408からなる。
【0077】
各要求通信の動作は以下の通りである。
【0078】
(読み出し要求通信)
クラスタ100に対する読み出し要求通信は、クラスタ100内または他クラスタ内のプロセッサ101がクラスタ100内の主記憶装置103のメモリブロック106のデータを欲しい場合であって、かつ当該読み出し要求元クラスタのキャッシュメモリ102でミスした(すなわち、当該メモリブロックのデータは当該読み出し要求元クラスタではキャッシングされていなかった)場合に、クラスタ100のネットワークインターフェイス回路112に対して発行される。読み出し要求通信パケット420を受信したときのクラスタ100の動作は以下の通りである。
【0079】
(1)ネットワークインターフェイス回路112は、読み出し要求通信パケット420の送信先クラスタ内アドレス403aを用いて主記憶制御回路105に対して主記憶読み出し要求を行う。
【0080】
(2)主記憶制御回路105は、送信先クラスタ内アドレス403aを用いて、主記憶装置103から当該アドレスに対応するメモリブロック106、主記憶ディレクトリ107、およびモードフィールド110を読み出す。
【0081】
(3)主記憶制御回路105は、ネットワークインターフェイス回路112に、読み出したメモリブロック106の内容を返送する。具体的には、主記憶制御回路105は、受信した読み出し要求通信パケット420のパケット送信元クラスタ番号401aで示されるクラスタ(自クラスタでも他クラスタでもよい)のネットワークインターフェイス回路112に対してネットワーク200を通して(自クラスタの場合は直接)読み出し返答通信パケット427を送る。ここで、読み出し返答通信パケット427の、返答対象クラスタ番号402hは自クラスタ100(すなわち、いま説明している処理を行っているクラスタであり、読み出し対象のメモリブロック106を保有するクラスタ)のクラスタ番号、返答対象クラスタ内アドレス403hは受信した読み出し要求通信パケット420の送信先クラスタ内アドレス403a、返答データ408は読み出したメモリブロックの内容とする。読み出し返答通信パケット427を受けたクラスタの動作については後述する。
【0082】
(4)アクセスしたメモリブロック106の主記憶ディレクトリ107の状態により、(4−1)から(4−6)のいずれかを行う。アクセスしたメモリブロック106の内容は、上記(3)のようにして読み出し要求の発行元に返送されるが、それを受けたクラスタ(自クラスタも含む)内では当該メモリブロック106の内容をキャッシングすることになる(読み出し返答通信参照)。そこで、当該メモリブロック106を階層1とする図2のような木構造に、新たに当該メモリブロック106の内容をキャッシングしたクラスタを登録する必要がある。その処理を、以下の(4−1)から(4−6)で行う。
【0083】
(4−1)アクセスしたメモリブロック106の主記憶ディレクトリ107が終端モード180の場合:
主記憶ディレクトリ107のモードフィールド110をポインタモード160に変更し、上述した木構造の構成規則に従って、読み出し要求発行元のクラスタのクラスタ番号をクラスタ記憶フィールド150に登録する。このとき、クラスタ番号を登録したクラスタ番号フィールドのクラスタ番号存在フラグを1とする。
【0084】
(4−2)アクセスしたメモリブロック106の主記憶ディレクトリ107がポインタモード160であり、その主記憶ディレクトリ107のクラスタ記憶フィールド150のアクセス発行元のクラスタ番号を登録すべきエントリ(クラスタ番号フィールド)が空き(当該クラスタ番号フィールドのクラスタ番号存在フラグが0)の場合:
アクセス発行元のクラスタ番号を主記憶ディレクトリ107の当該空きエントリに登録する。このとき、対応するクラスタ番号存在フラグを1とする。
【0085】
(4−3)アクセスしたメモリブロック106の主記憶ディレクトリ107がポインタモード160であり、その主記憶ディレクトリ107のクラスタ記憶フィールド150のアクセス発行元のクラスタ番号を登録すべきエントリが空きでなく(当該クラスタ番号フィールドのクラスタ番号存在フラグが1)、他のエントリがすべて空きであり(クラスタ番号存在フラグが0)、かつ、アクセス発行元のクラスタ番号のポインタフィールドと、当該メモリブロック106を保有するクラスタのクラスタ番号のポインタフィールドと、上記空きでなかったエントリに記憶されているクラスタ番号のポインタフィールドとが全て等しい場合:
主記憶ディレクトリ107のモードフィールド110をビットマップモード170に変更し、ポインタモード160でクラスタ記憶フィールド150のエントリに登録されていたクラスタ番号に対応するビットおよびアクセス発行元のクラスタ番号に対応するビットを1とする。
【0086】
(4−4)アクセスしたメモリブロック106の主記憶ディレクトリ107がポインタモード160であり、その主記憶ディレクトリ107のクラスタ記憶フィールド150のアクセス発行元のクラスタ番号を登録すべきエントリが空きでない(当該クラスタ番号フィールドのクラスタ番号存在フラグが1)場合であって、他のエントリに空きでないものがあるか、または、アクセス発行元のクラスタ番号のポインタフィールドと、当該メモリブロック106を保有するクラスタのクラスタ番号のポインタフィールドと、上記アクセス発行元のクラスタ番号を記憶すべきエントリに登録されていたクラスタ番号のポインタフィールドのうちの少なくとも2つが等しくない場合:
アクセス発行元のクラスタ番号を記憶すべきエントリに登録されているクラスタ番号のクラスタに対して追加要求通信を行う。具体的には、追加要求通信パケット423を送信する。このとき、追加要求通信パケット423の、追加対象クラスタ番号402dは自クラスタ100(すなわち、いま説明している処理を行っているクラスタであり、読み出し対象のメモリブロック106を保有するクラスタ)のクラスタ番号、追加対象クラスタ内アドレス403dは読み出し要求通信パケット420の送信先クラスタ内アドレス403a、追加クラスタ番号405は読み出し要求通信パケット420のパケット送信元クラスタ番号401a(木構造に追加すべきクラスタ番号)とする。追加要求通信パケット423を受けたクラスタの動作については後述するが、要するに、アクセス発行元のクラスタ番号を記憶すべきエントリに登録されているクラスタ番号につながる部分木構造に、新たにアクセス発行元のクラスタ番号を追加する処理を行うものである。
【0087】
(4−5)アクセスしたメモリブロック106の主記憶ディレクトリ107がビットマップモード170であり、アクセス発行元のクラスタ番号のポインタフィールドがビットマップ内の全クラスタのクラスタ番号のポインタフィールドと等しい(言い替えると、アクセス発行元のクラスタ番号のポインタフィールドと当該メモリブロックを保有するクラスタのクラスタ番号のポインタフィールドとが等しい)場合:
主記憶ディレクトリ107のビットマップ内の、アクセス発行元のクラスタ番号に対応するビットを1とすることにより、アクセス発行元のクラスタ番号を木構造中に組み入れる。
【0088】
(4−6)アクセスしたメモリブロック106の主記憶ディレクトリ107がビットマップモード170の場合で、アクセス発行元のクラスタ番号のポインタフィールドがビットマップ内の全クラスタのクラスタ番号のポインタフィールドと異なる場合:
主記憶ディレクトリ107のビットマップ内から1が立っているビットを1つ選択し、当該ビットに対応するクラスタに対してビットマップ移動要求通信を行う。具体的には、ビットマップ移動要求通信パケット425を送信する。このとき、ビットマップ移動要求通信パケット425の、移動対象クラスタ番号402fは自クラスタ100(すなわち、いま説明している処理を行っているクラスタであり、読み出し対象のメモリブロック106を保有するクラスタ)のクラスタ番号、移動対象クラスタ内アドレス403fは読み出し要求通信パケット420の送信先クラスタ内アドレス403a、ビットマップ406は対応する主記憶ディレクトリ107のクラスタ記憶フィールド150に記憶されているビットマップとする。ビットマップ移動要求通信パケット425を受けたクラスタの動作については後述するが、要するに、ビットマップモードである現ディレクトリのビットマップを下位の階層に移動する処理を行うものである。
【0089】
この後、主記憶ディレクトリ107のモードフィールド110をポインタモード160に変更し、上述した木構造の構成規則に従って、アクセス発行元のクラスタ番号およびビットマップ移動要求通信の送信先のクラスタ番号をクラスタ記憶フィールド150に登録し、対応するクラスタ番号存在フラグを1とする。ここで、アクセス発行元のクラスタ番号とビットマップ移動要求通信の送信先のクラスタ番号とが一致する場合、(4−4)を行う。
【0090】
(書き込み要求通信)
クラスタ100に対する書き込み要求通信は、クラスタ100内または他クラスタ内のプロセッサ101がクラスタ100内の主記憶装置103に対してメモリ書き込みを行いたい場合、クラスタ100のネットワークインターフェイス回路112に対して発行される。書き込み要求通信パケット421を受信したときのクラスタ100の動作は以下の通りである。
【0091】
(1)ネットワークインターフェイス回路112は、書き込み要求通信パケット421の送信先クラスタ内アドレス403bを用いて主記憶制御回路105に対して主記憶書き込み要求を行う。
【0092】
(2)主記憶制御回路105は、送信先クラスタ内アドレス403bを用いて、主記憶装置103中の当該アドレスに対応するメモリブロック106に書き込みデータ404を書き込むとともに、当該メモリブロック106に対応する主記憶ディレクトリ107、およびモードフィールド110を読み出す。
【0093】
(3)アクセスしたメモリブロック106の主記憶ディレクトリ107の状態により、(3−1)または(3−2)のいずれかを行う。
【0094】
(3−1)アクセスしたメモリブロック106の主記憶ディレクトリ107がポインタモード160またはビットマップモード170であった場合:
当該主記憶ディレクトリ107のクラスタ記憶フィールド150に登録されている全てのクラスタに対して無効化要求通信を送信する。具体的には、無効化要求通信パケット422を送信する。このとき、無効化要求通信パケット422の、無効化対象クラスタ番号402cは自クラスタ100(すなわち、いま説明している処理を行っているクラスタであり、データ書き込みを行ったメモリブロック106を保有するクラスタ)のクラスタ番号、無効化対象クラスタ内アドレス403cは書き込み要求通信パケット421の送信先クラスタ内アドレス403bとする。無効化要求通信パケット422を受けたクラスタの動作については後述するが、要するに、書き込みを行ったメモリブロック106の内容がキャッシングされているのでそれを無効化する処理を行うものである。この後、主記憶制御回路105は、当該主記憶ディレクトリ107を終端モード180に変更する。
【0095】
(3−2)アクセスしたメモリブロック106の主記憶ディレクトリ107が終端モード180であった場合:
当該メモリブロックはどこにもキャッシングされていないため、キャッシュの一貫性制御は行わない。
【0096】
(無効化要求通信)
クラスタ100に対する無効化要求通信は、クラスタ100内または他クラスタ内のキャッシュ制御回路104または主記憶制御回路105が無効化要求通信を発行した場合(書き込み要求通信の(3−1)および本無効化要求通信の(3)参照)、クラスタ100のネットワークインターフェイス回路112に対して発行される。無効化要求通信パケット422を受信したときのクラスタ100の動作は以下の通りである。
【0097】
(1)ネットワークインターフェイス回路112は、無効化要求通信パケット422のアドレス(無効化対象クラスタ番号402cと無効化対象クラスタ内アドレス403c)を用いて、キャッシュ制御回路104に対して無効化要求を行う。
【0098】
(2)キャッシュ制御回路104は、無効化要求通信パケット422のアドレスを用いて、キャッシュメモリ102のキャッシュディレクトリを読み出す。具体的には、無効化対象クラスタ番号402cおよび無効化対象クラスタ内アドレス403cで示されるメモリブロック106がキャッシングされているはずであるから、そのキャッシュライン108を探して、対応するキャッシュディレクトリ109を読み出す。
【0099】
(3)読み出したキャッシュディレクトリ109がポインタモード160またはビットマップモード170であった場合:
キャッシュ制御回路104は、当該キャッシュディレクトリ109のクラスタ記憶フィールド150に登録されている全てのクラスタに対して、ネットワークインターフェイス回路112を通じて無効化要求通信パケット422を送信する。このとき、無効化対象クラスタ番号402cは受信した無効化要求通信パケット422の無効化対象クラスタ番号402cと同じとし、無効化対象クラスタ内アドレス403cも受信した無効化要求通信パケット422の無効化対象クラスタ内アドレス403cと同じとする。
【0100】
(4)無効化要求を受けたキャッシュライン108を無効化する。
【0101】
(追加要求通信)
クラスタ100に対する追加要求通信は、クラスタ100内または他クラスタ内のキャッシュ制御回路104または主記憶制御回路105が追加要求通信を発行した場合(読み出し要求通信の(4−4)および本追加要求通信の(2−4)参照)、クラスタ100のネットワークインターフェイス回路112に対して発行される。追加要求通信パケット423を受信したときのクラスタ100の動作は以下の通りである。
【0102】
(1)追加要求通信パケット423のアドレスに対応するキャッシュディレクトリ109を読み出す。具体的には、追加要求通信パケット423の追加対象クラスタ番号402dおよび追加対象クラスタ内アドレス403dで示されるメモリブロック106がキャッシングされているはずであるから、そのキャッシュライン108を探して、対応するキャッシュディレクトリ109を読み出す。
【0103】
(2)読み出したキャッシュディレクトリ109の状態により、(2−1)から(2−6)のいずれかを行う。
【0104】
(2−1)読み出したキャッシュディレクトリ109が終端モード180の場合:
キャッシュディレクトリ109のモードフィールド110をポインタモード160に変更し、上述した木構造の構成規則に従って、追加クラスタ番号405(木構造に追加すべきクラスタ番号)をクラスタ記憶フィールド150に登録する。このとき、クラスタ番号を登録したクラスタ番号フィールドのクラスタ番号存在フラグを1とする。
【0105】
(2−2)読み出したキャッシュディレクトリ109がポインタモード160であり、そのキャッシュディレクトリ109のクラスタ記憶フィールド150の追加クラスタ番号405を登録すべきエントリが空き(当該クラスタ番号フィールドのクラスタ番号存在フラグが0)の場合:
追加クラスタ番号405を当該キャッシュディレクトリ109に登録する。このとき、対応するクラスタ番号存在フラグを1とする。
【0106】
(2−3)読み出したキャッシュディレクトリ109がポインタモード160であり、そのキャッシュディレクトリ109のクラスタ記憶フィールド150の追加クラスタ番号405を登録すべきエントリが空きでなく(当該クラスタ番号フィールドのクラスタ番号存在フラグが1)、他のエントリがすべて空きであり(クラスタ番号存在フラグが0)、かつ、上記空きでなかったエントリに、追加クラスタ番号405とポインタフィールドが全て等しいクラスタ番号が登録されている場合:
キャッシュディレクトリ109のモードフィールド110をビットマップモード170に変更し、ポインタモード160でクラスタ記憶フィールド150に登録されていたクラスタ番号に対応するビットを1とした後、さらに追加対象である追加クラスタ番号405に対応するビットを1とする。
【0107】
(2−4)読み出したキャッシュディレクトリ109がポインタモード160であり、そのキャッシュディレクトリ109のクラスタ記憶フィールド150の追加クラスタ番号405を登録すべきエントリが空きでない(当該クラスタ番号フィールドのクラスタ番号存在フラグが1)場合であって、他のエントリに空きでないものがあるか、または、そのキャッシュディレクトリ109のクラスタ記憶フィールド150の追加クラスタ番号405を登録すべきエントリに登録されているクラスタ番号のポインタフィールドと追加クラスタ番号405のポインタフィールドとが異なる場合:
追加クラスタ番号405を登録すべきエントリに登録されているクラスタ番号のクラスタに対して、受信した追加要求通信パケット423を、転送する。
【0108】
(2−5)読み出したキャッシュディレクトリ109がビットマップモード170であり、追加クラスタ番号405のポインタフィールドがビットマップ内の全クラスタのクラスタ番号のポインタフィールドと等しい場合:
キャッシュディレクトリ109のビットマップ内の、追加クラスタ番号405に対応する位置のビットを1とすることにより、追加クラスタ番号405を木構造中に組み入れる。
【0109】
(2−6)読み出したキャッシュディレクトリ109がビットマップモード170であり、追加クラスタ番号405のポインタフィールドがビットマップ内の全クラスタのクラスタ番号のポインタフィールドと異なる場合:
キャッシュディレクトリ109のビットマップ内から1が立っているビットを1つ選択し、当該ビットに対応するクラスタに対してビットマップ移動要求通信を行う。具体的には、ビットマップ移動要求通信パケット425を送信する。このとき、ビットマップ移動要求通信パケット425の、移動対象クラスタ番号402fは受信した追加要求通信パケット423の追加対象クラスタ番号402d、移動対象クラスタ内アドレス403fは追加対象クラスタ内アドレス403d、ビットマップ406は当該キャッシュディレクトリ109のクラスタ記憶フィールド150のビットマップとする。
【0110】
この後、当該キャッシュディレクトリ109のモードフィールド110をポインタモード160に変更し、上述した木構造の構成規則に従って、追加クラスタ番号405およびビットマップ移動要求通信の送信先のクラスタ番号を、クラスタ記憶フィールド150に登録し、対応するクラスタ番号存在フラグを1とする。
【0111】
(削除要求通信)
クラスタ100に対する削除要求通信は、自クラスタ100内または他クラスタ内のキャッシュ制御回路104または主記憶制御回路105が削除要求通信を発行した場合(後述するキャッシュのリプレース時の動作の(2−1)および本削除要求通信の(2−2)参照)、クラスタ100のネットワークインターフェイス回路112に対して発行される。削除要求通信パケット424を受信したときのクラスタ100の動作は以下の通りである。
【0112】
(1)削除要求通信パケット424のアドレスに対応する主記憶ディレクトリ107またはキャッシュディレクトリ109を読み出す。具体的には、削除要求通信パケット424の削除対象クラスタ番号402eおよび削除対象クラスタ内アドレス403eで示されるメモリブロック106に対応する主記憶ディレクトリ107、またはそのメモリブロック106がキャッシングされているキャッシュライン108に対応するキャッシュディレクトリ109を読み出す。
【0113】
(2)読み出したディレクトリ107または109の状態により、(2−1)または(2−2)のいずれかを行う。
【0114】
(2−1)読み出したディレクトリ107または109がポインタモード160であり、当該ディレクトリ107,109のクラスタ記憶フィールド150に、受信した削除要求通信パケット424のパケット送信元クラスタ番号401e(削除すべきクラスタ番号)が登録してある場合:
削除要求通信パケット424の置き換えクラスタ番号409が有効なら、クラスタ記憶フィールド150の当該クラスタ番号を置き換えクラスタ番号409に変更する。また、削除要求通信パケット424の置き換えクラスタ番号409が無効なら、クラスタ記憶フィールド150の当該クラスタ番号のクラスタ番号存在フラグを0として、そのクラスタ番号を削除する。このとき、クラスタ記憶フィールド150に登録されているクラスタ番号の数が0となったときは、当該ディレクトリのモードを終端モードに変更する。
【0115】
(2−2)読み出したディレクトリ107または109がポインタモード160であり、当該ディレクトリ107,109のクラスタ記憶フィールド150に、受信した削除要求通信パケット424のパケット送信元クラスタ番号401e(削除すべきクラスタ番号)とは異なるクラスタのクラスタ番号が登録してある場合:
キャッシュ制御回路104は、ネットワークインターフェイス回路112を通じて削除対象のクラスタ番号(受信した削除要求通信パケット424のパケット送信元クラスタ番号401e)を記憶すべきエントリに登録されているクラスタに対して削除要求通信を転送する。
【0116】
(2−3)読み出したディレクトリ107または109がビットマップモード170の場合:
ビットマップの削除対象のクラスタ(受信した削除要求通信パケット424のパケット送信元クラスタ番号401eのクラスタ)に対応する位置のビットを0とし、そのクラスタ番号を削除する。このとき、クラスタ記憶フィールド150に保持するビットマップが全て0となれば、当該ディレクトリのモードを終端モードに変更する。
【0117】
(ビットマップ移動要求通信)
クラスタ100に対するビットマップ移動要求通信は、クラスタ100内または他クラスタ内の主記憶制御回路105またはキャッシュ制御回路104がビットマップ移動要求通信を発行した場合(読み出し要求通信の(4−6)、追加要求通信の(2−6)、キャッシュリプレース時の動作の(2−3)、およびポインタ移動要求通信の(3−2)参照)、クラスタ100のネットワークインターフェイス回路112に対して発行される。ビットマップ移動要求通信パケット425を受信したときのクラスタ100の動作は以下の通りである。
【0118】
(1)ネットワークインターフェイス回路112は、ビットマップ移動要求通信パケット425のアドレスを用いて、キャッシュ制御回路104に対してビットマップ移動要求を行う。
【0119】
(2)キャッシュ制御回路104は、ビットマップ移動要求のアドレスを用いて、キャッシュメモリ102のキャッシュディレクトリ109、およびモードフィールド110を読み出す。具体的には、ビットマップ移動要求通信パケット425の移動対象クラスタ番号402fおよび移動対象クラスタ内アドレス403fで示されるメモリブロック106がキャッシングされているはずであるから、そのキャッシュライン108を探して、対応するキャッシュディレクトリ109およびモードフィールド110を読み出す。
【0120】
(3)読み出したキャッシュディレクトリ109のモードフィールド110をビットマップモード170に変更し、受信したビットマップ移動要求通信パケット425のビットマップ406を、当該キャッシュディレクトリ109のクラスタ記憶フィールド150に書き込む。ただし、ビットマップの全ビットが0である場合、モードフィールド110を終端モードとする。
【0121】
なお、ビットマップ移動要求通信パケット425は必ず上位の階層から下位の階層へと送信され、ビットマップモードのディレクトリの下位の階層は終端モードであることから、ビットマップ移動要求通信パケット425の送信先ディレクトリは必ず終端モードである。
【0122】
(ポインタ移動要求通信)
クラスタ100に対するポインタ移動要求通信は、クラスタ100内または他クラスタ内の主記憶制御回路105またはキャッシュ制御回路104がポインタ移動要求通信を発行したとき(キャッシュのリプレース時の動作の(2−2)、および本ポインタ移動要求通信の(3−1)参照)に、クラスタ100のネットワークインターフェイス回路112に対して発行される。ポインタ移動要求通信パケット426を受信したときのクラスタ100の動作は以下の通りである。
【0123】
(1)ネットワークインターフェイス回路112は、ポインタ移動要求通信パケット426のアドレスを用いて、キャッシュ制御回路104に対してポインタ移動要求を行う。
【0124】
(2)キャッシュ制御回路104は、ポインタ移動要求のアドレスを用いて、キャッシュメモリ102のキャッシュディレクトリ109、およびモードフィールド110を読み出す。具体的には、ポインタ移動要求通信パケット426の移動対象クラスタ番号402gおよび移動対象クラスタ内アドレス403gで示されるメモリブロック106がキャッシングされているはずであるから、そのキャッシュライン108を探して、対応するキャッシュディレクトリ109およびモードフィールド110を読み出す。
【0125】
(3)キャッシュディレクトリ109のモードにより、(3−1)から(3−3)のいずれかを行う。
【0126】
(3−1)読み出したキャッシュディレクトリ109がポインタモード160であった場合:
当該キャッシュディレクトリ109により指されるクラスタを一つ選択し、選択したクラスタ番号をキャッシュディレクトリ109から取り除き、その選択したクラスタに対してポインタ移動要求通信を送信し、キャッシュディレクトリ109をポインタ407にセットして渡す。
【0127】
この後、自クラスタ100に対するポインタ移動要求通信パケット426で送られてきたポインタ407(ディレクトリ)に、自クラスタ100からポインタ移動要求通信パケット426を送信した相手先クラスタの番号を追加し、自クラスタ100の当該キャッシュディレクトリ109に書き込む。
【0128】
(3−2)読み出したキャッシュディレクトリ109がビットマップモード170であった場合:
当該キャッシュディレクトリ109により指されるクラスタを一つ選択し、選択したクラスタに対応するビットを0として、選択したクラスタに対してビットマップ移動要求通信を送信し、キャッシュディレクトリ109をビットマップ406にセットして渡す。
【0129】
この後、自クラスタ100に対するポインタ移動要求通信パケット426で送られてきたポインタ407(ディレクトリ)に、自クラスタ100からビットマップ移動要求通信を送信した相手先クラスタの番号を追加し、自クラスタ100の当該キャッシュディレクトリ109に書き込む。また、モードフィールド110は、ポインタモードに変更する。
【0130】
(3−3)読み出したキャッシュディレクトリ109が終端モード180であった場合:
受信したポインタ移動要求通信パケット426で送られてきたディレクトリ(ポインタ407)を、自クラスタ100の当該キャッシュディレクトリ109に書き込み、モードフィールド110をポインタモード160に変更する。ただし、全てのポインタフィールド350が無効である場合、モードフィールド110は終端モード180とする。
【0131】
(読み出し返答通信)
クラスタ100に対する読み出し返答通信は、クラスタ100内または他クラスタ内の主記憶制御回路105が読み出し返答通信を発行した場合(読み出し要求通信の(3)参照)、クラスタ100のネットワークインターフェイス回路112に対して発行される。読み出し返答通信パケット427を受信したときのクラスタ100の動作は以下の通りである。
【0132】
(1)ネットワークインターフェイス回路112は、返答結果をキャッシュ制御回路104に転送する。
(2)キャッシュ制御回路104は、キャッシュメモリ102の対応するキャッシュライン108に返答結果を記録し、当該キャッシュディレクトリ109を終端モード180として登録する。
(3)ネットワークインターフェイス回路112は、読み出し返答通信の返答結果をクラスタ100内のバス111に出力してプロセッサ101に返答する。
【0133】
(キャッシュのリプレース時の動作)
クラスタ100内のプロセッサ101から自クラスタ100内または他クラスタ内の主記憶装置103に対して読み出しを行いたい場合は、まず読み出したいメモリブロック106の内容が自クラスタ100内のキャッシュメモリ102でキャッシングされているかどうかを調べることになるが、そこでキャッシュミスした場合は、読み出したいメモリブロック106から実際にデータを読み出してくることになる。このとき、当該読み出し結果を格納すべきキャッシュライン108にすでに別のメモリブロックの内容が登録されていた場合には、キャッシュラインのリプレースを行う必要がある。キャッシュラインのリプレース時の動作は以下の通りである。
【0134】
(1)キャッシュ制御回路104は、リプレースしたいキャッシュライン108のキャッシュディレクトリ109を読み出す。
【0135】
(2−1)読み出したキャッシュディレクトリ109が終端モード180であった場合:
対応するキャッシュライン108にキャッシングされているメモリブロック106を保有するクラスタに対して、自クラスタ番号の削除要求通信を送信する。具体的には、削除要求通信パケット424を送信する。このとき、削除要求通信パケット424の、削除対象クラスタ番号402eは当該キャッシュラインにキャッシングされているメモリブロック106を保有するクラスタのクラスタ番号、削除対象クラスタ内アドレス403eはそのメモリブロック106のクラスタ内アドレス、置き換えクラスタ番号409は無効とする。
【0136】
(2−2)読み出したキャッシュディレクトリ109がポインタモード160であった場合:
当該ディレクトリ109に登録されているクラスタ番号を一つ選択し、そのクラスタ番号を当該ディレクトリ109から削除し、そのクラスタ番号のクラスタに対してポインタ移動要求通信を行い、当該ディレクトリ109のクラスタ記憶フィールド150を転送する。すなわち、移動対象クラスタ番号402gは当該キャッシュライン108にキャッシングされているメモリブロック106を保有するクラスタのクラスタ番号、移動対象クラスタ内アドレス403gはそのメモリブロック106のクラスタ内アドレス、ポインタ407は移動したいクラスタ記憶フィールド150として、ポインタ移動要求通信パケット426を送信する。
【0137】
この後、対応するキャッシュライン108にキャッシングされているメモリブロック106を保有するクラスタに対して、自クラスタ番号の削除要求通信を送信する。すなわち、削除対象クラスタ番号402eは当該キャッシュライン108にキャッシングされているメモリブロック106を保有するクラスタのクラスタ番号、削除対象クラスタ内アドレス403eはそのメモリブロック106のクラスタ内アドレス、置き換えクラスタ番号409はポインタ移動要求通信パケット426の送信先のクラスタのクラスタ番号として、削除要求通信パケット424を送信し、自クラスタ番号の削除要求を出す。
【0138】
(2−3)読み出したキャッシュディレクトリ109がビットマップモード170であった場合は、当該ディレクトリ109に保持されているクラスタ番号を一つ選択し、そのクラスタに対応するビットを0とし、そのクラスタに対してビットマップ移動通信を行い、クラスタ記憶フィールド150を転送する。この後、置き換えクラスタ番号409をビットマップ移動通信の送信先クラスタ番号とし、対応するメモリブロック106を保有するクラスタに対して、自クラスタ番号の削除要求通信を送信する。
【0139】
(3)以上のようにして、自クラスタのクラスタ番号を木構造から削除した後は、当該キャッシュライン108に新たなメモリブロック106のデータをキャッシングすることができる。
【0140】
(動作例)
以下に本実施例のキャッシュディレクトリ方式の動作例を示す。本動作例では、クラスタ数は1024、クラスタ番号のポインタフィールド1およびポインタフィールド2は各2ビット、ビットマップフィールドは6ビットで表わされるものとする。なお、数字の後ろに付けた(2)は、その数字が2進数であることを示すものとする。また、クラスタ番号がnであるクラスタは、単にクラスタnと呼ぶものとする。
【0141】
(1)図6に、クラスタ0100000011(2)のメモリブロックMのディレクトリの初期状態を示す。初期状態ではメモリブロックMは終端モードである。
【0142】
(2)(1)の状態でクラスタ0100000001(2)がクラスタ0100000011(2)に対してメモリブロックMの読み出し要求通信を行うと、クラスタ0100000011(2)はクラスタ0100000001(2)に対してメモリブロックMの内容を読み出し返答通信で返す。このとき、クラスタ0100000001(2)のキャッシュディレクトリは終端モードとなり、クラスタ0100000011(2)の主記憶ディレクトリは読み出し要求通信(4−1)に従いポインタモードとなる。この状態を図7に示す。
【0143】
(3)(2)の状態でクラスタ0100000100(2)がクラスタ0100000011(2)に対してメモリブロックMの読み出し要求通信を行うと、クラスタ0100000011(2)はクラスタ0100000100(2)に対してメモリブロックMの内容を読み出し返答通信で返す。このとき、クラスタ0100000100(2)のキャッシュディレクトリは終端モードとなり、クラスタ0100000011(2)の主記憶ディレクトリは読み出し要求通信(4−3)に従いビットマップモードとなる。この状態を図8に示す。
【0144】
(4)(3)の状態で、クラスタ1001000001(2)がクラスタ0100000011(2)に対してメモリブロックMの読み出し要求通信を行うと、クラスタ0100000011(2)はクラスタ1001000001(2)に対してメモリブロックMの内容を読み出し返答通信で返す。このとき、クラスタ1001000001(2)のキャッシュディレクトリは終端モードとなり、クラスタ0100000011(2)の主記憶ディレクトリは読み出し要求通信(4−6)に従いポインタモードとなる。クラスタ0100000011(2)はビットマップ移動通信を行い、クラスタ0100000001(2)にビットマップを移動する。これに従い、クラスタ0100000001(2)はビットマップモードとなる。この状態を図9に示す。
【0145】
(5)(4)の状態で、クラスタ1011000010(2)がクラスタ0100000011(2)に対してメモリブロックMの読み出し通信を行うと、クラスタ0100000011(2)はクラスタ1011000010(2)に対してメモリブロックMの内容を読み出し返答通信で返す。このとき、クラスタ1011000010(2)のキャッシュディレクトリは終端モードとなる。クラスタ0100000011(2)は、読み出し要求通信(4−4)に従いクラスタ1001000001(2)に対して追加要求通信を行う。クラスタ1001000001(2)は、追加要求通信を受けて、ポインタモードとなる。この状態を図10に示す。
【0146】
(6)(5)の状態で、クラスタ1001000001(2)でメモリブロックMがキャッシュのリプレースにより無効となると、キャッシュリプレース時の動作(2−2)に従い、クラスタ1001000001(2)は、クラスタ1011000010(2)に対してポインタ移動要求通信を行う。また、クラスタ0100000011(2)に対して置き換えクラスタ番号を1011000010(2)とし、削除要求通信を行う。
【0147】
クラスタ1011000010(2)は、ポインタ移動要求通信を受けて、ポインタ移動要求通信(3−3)に従い終端モードの状態を維持する。クラスタ0100000011(2)は削除要求通信を受けて、削除要求通信(2−1)に従い、クラスタ1011000010(2)をポインタフィールドに登録する。この状態を図11に示す。
【0148】
(7)(6)の状態で、クラスタ0100000011(2)に対してメモリブロックMの書き込み要求通信が到着すると、クラスタ0100000011(2)はクラスタ0100000001(2)およびクラスタ1011000010(2)に対して無効化要求通信を送信する。クラスタ0100000001(2)は、無効化要求通信を受けて、クラスタ0100000100(2)に対して無効化要求通信を送信する。無効化要求通信を受けた全クラスタは、メモリブロックMをキャッシングしているキャッシュラインを無効化する。
【0149】
上記実施例によれば、主記憶ディレクトリ107およびキャッシュディレクトリ109にポインタモード160、ビットマップモード170および終端モード180を持たせ、以上に述べた通信を設けることにより、図2に示した木構造でメモリブロックをキャッシングした全クラスタを管理することができる。
【0150】
(実施例2)
本発明の実施例2を説明する。本実施例は実施例1の変形であるため、相違点についてのみ説明する。本実施例は、クラスタ100内の主記憶制御回路105およびキャッシュ制御回路104の動作を変更することにより、主記憶装置103への書き込み時に、書き込む対象のメモリブロック106をキャッシングしている全キャッシュライン108の無効化の完了を保証する点が異なる。
【0151】
本実施例では、実施例1の書き込み要求通信および無効化要求通信の動作を変更し、これらに対して書き込み返答通信および無効化返答通信を設ける。
【0152】
(書き込み要求通信の変更点)
本実施例の書き込み要求通信は、実施例1の(1)〜(3)の処理の後に以下を追加する。
(4)クラスタ記憶フィールド150に登録されている全てのクラスタからの無効化返答通信を受信するのを待つ。
(5)書き込み要求通信の発行元に対して書き込み返答通信を送信する。
【0153】
(無効化要求通信の変更点)
本実施例の無効化要求通信は、実施例1の(3)および(4)を以下の処理に変更する。
【0154】
(3)読み出したキャッシュディレクトリ109のモードにより、(3−1)または(3−2)のいずれかを行う。
(3−1)読み出したキャッシュディレクトリ109がポインタモード160またはビットマップモード170であった場合、キャッシュ制御回路104は、クラスタ記憶フィールド150に登録されている全てのクラスタに対して、ネットワークインターフェイス回路112を通じて無効化要求通信を送信する。
(3−2)読み出したキャッシュディレクトリ109が終端モード180であった場合、キャッシュ制御回路109は当該キャッシュライン108を無効化し、無効化返答通信を無効化要求通信発行元に送信する。(4)以下の処理は行わない。
【0155】
(4)クラスタ記憶フィールドに登録されている全てのクラスタからの無効化返答通信を受信するのを待つ。
(5)当該キャッシュラインを無効化し、無効化返答通信を無効化要求通信発行元に送信する。
【0156】
本実施例により、全クラスタのキャッシュラインを無効化した後、書き込みを反映することができる。
【0157】
(実施例3)
本発明の実施例3を説明する。本実施例は実施例1の変形であるため、相違点のみ説明する。本実施例は、クラスタ100内の主記憶制御回路105およびキャッシュ制御回路104の動作を変更することにより、書き込み更新型キャッシュ一致制御を実現する点が異なる。書き込み更新型とは、あるメモリブロックに対する書き込みが行われた場合に、当該メモリブロックをキャッシングしているすべてのキャッシュラインにその書き込みデータを反映させることを言う。
【0158】
本実施例では、実施例1の書き込み要求通信の動作を変更し、更新要求通信を設ける。
【0159】
(書き込み要求通信の変更点)
本実施例の書き込み要求通信は、実施例1の(3−1)および(3−2)を以下の処理に変更する。
【0160】
(3−1)アクセスしたメモリブロック106の主記憶ディレクトリ107がポインタモード160またはビットマップモードであった場合、クラスタ記憶フィールド150に登録されている全てのクラスタに対して更新要求通信を送信する。
(3−2)アクセスしたメモリブロック106の主記憶ディレクトリ107が終端モード180であった場合、当該メモリブロック106はどこにもキャッシングされていないため、キャッシュの一貫性制御はおこなわない。
【0161】
(更新要求通信)
クラスタ100に対する更新要求通信は、書き込みにより更新するデータとそのアドレスとからなる更新要求通信パケットを送信することにより行われる。更新要求通信パケットを受信したときの処理は以下の通りである。
【0162】
(1)ネットワークインターフェイス回路112は、更新要求通信パケットのアドレスを用いてキャッシュ制御回路104に対してキャッシュ書き込み要求を行う。
(2)キャッシュ制御回路104は、キャッシュ書き込み要求のアドレスを用いて、キャッシュメモリ102の、当該アドレスに対応するキャッシュライン102に書き込みを行うとともに、キャッシュディレクトリ109およびモードフィールド110を読み出す。
【0163】
(3−1)アクセスしたキャッシュディレクトリ104がポインタモード160またはビットマップモード170であった場合、クラスタ記憶フィールド150に登録されている全てのクラスタに対して更新要求通信を送信する。
(3−2)アクセスしたキャッシュディレクトリ109が終端モード180であった場合、メモリブロック106は以下の階層にはキャッシングされていないため、キャッシュの一貫性制御はおこなわない。
【0164】
本実施例により、本発明のディレクトリ方式で、書き込み更新型キャッシュ一致制御を実現することができる。
【0165】
なお、本実施例においても、上記実施例2と同様にして、書き込み要求に対して当該メモリブロックをキャッシングしている全クラスタのキャッシュの更新の完了を保証することができる。具体的には、更新要求通信を発行したクラスタは更新返答通信を受けるまで待ち、更新要求の相手先である全てのクラスタから更新返答通信を受けたら、自クラスタに対して更新要求を発行したクラスタに更新返答通信を発行するようにする。そして、書き込み対象のクラスタでは、書き込み対象のメモリブロックに対応する主記憶ディレクトリにより指し示される全てのクラスタから更新返答通信を受けたら、書き込みを発行したクラスタに対して更新返答通信を送信し、書き込みを発行したクラスタは、更新返答通信を受けるまで待つことにより、全クラスタに対する書き込みの完了を保証する。
【0166】
(実施例4)
本発明の実施例4を説明する。図12は、本実施例に係る並列計算機の構成を示す。本実施例は実施例1の変形であるため、相違点のみ説明する。なお、図12において、図1と共通の装置・回路には同一の番号に−1を付けて表すものとし、実施例1の説明を流用する部分は番号に−1を付けたものに読み替えるものとする。
【0167】
上記実施例1では、クラスタ100内のキャッシュメモリ102および主記憶装置103のブロック毎にキャッシュディレクトリ109および主記憶ディレクトリ107、モードフィールド110を設けた。これに対し、実施例4では、キャッシュディレクトリ109−1および主記憶ディレクトリ107−1を別に設けることにより、これらのメモリ量を減らす点が異なる。
【0168】
図12において、キャッシュディレクトリ109−1は、キャッシュライン108−1の中で、終端モード以外のキャッシュラインのキャッシュライン番号、キャッシュディレクトリ109−1、およびモードフィールド110−1を保持する。主記憶ディレクトリ107−1は、メモリブロック106−1の中で、終端モード以外のメモリブロックのメモリブロック番号、主記憶ディレクトリ107−1、およびモードフィールド110−1を保持する。
【0169】
本実施例では、実施例1の読み出し要求通信、書き込み要求通信、追加要求通信、削除要求通信、ビットマップ移動要求通信、およびポインタ移動要求通信に以下の変更および追加を行う。
【0170】
(読み出し要求通信の変更点)
(2)主記憶制御回路105−1は、送信先クラスタ内アドレス403aを用いて、主記憶装置103−1から当該アドレスに対応するメモリブロック106−1を読み出す。さらに、当該メモリブロック106−1に対応する主記憶ディレクトリ107−1およびモードフィールド110−1があれば、それらを読み出す。
【0171】
(4−1)アクセスしたメモリブロック106−1に対応する主記憶ディレクトリ107−1およびモードフィールド110−1がないときは、当該メモリブロック106−1が終端モードであるということである。この場合、主記憶制御回路105−1は、主記憶ディレクトリ107−1の空きエントリを当該メモリブロック106−1に割り当てる。主記憶ディレクトリ107−1に空きのエントリが存在しない場合、主記憶制御回路105−1は、主記憶ディレクトリ107−1の中から1エントリを選択し、リプレースする。この後、このエントリを、読み出し要求通信で読み出した主記憶メモリブロック106−1に対応する主記憶ディレクトリ107−1として使用する。以後の処理は、実施例1の(4−1)と同じである。
【0172】
(書き込み要求通信の変更点)
(3−1)実施例1の(3−1)と同じ処理を行う。ただし、「当該主記憶ディレクトリ107を終端モード180に変更する」代わりに、主記憶制御回路105−1は、書き込み要求通信を受けた主記憶のメモリブロック106−1に対応する主記憶ディレクトリ107−1のエントリを空きエントリに変更する。
【0173】
(追加要求通信の変更点)
(1)実施例1の(1)と同様にしてキャッシュディレクトリ109−1を読み出す。ただし、本実施例4では、キャッシュディレクトリがない場合もある。
【0174】
(2−1)キャッシュディレクトリがないときは、当該キャッシュライン108−1が終端モードであるということである。この場合、キャッシュ制御回路104−1は、キャッシュディレクトリ109−1の空きエントリを当該キャッシュライン108−1に割り当てる。キャッシュディレクトリ109−1に空きのエントリが存在しない場合、キャッシュ制御回路104−1は、キャッシュディレクトリ109−1の中から1エントリを選択し、リプレースする。この後、このエントリを、追加要求通信に対応する当該キャッシュライン108−1のキャッシュディレクトリ109−1として使用する。以後の処理は、実施例1の(2−1)と同じである。
【0175】
(削除要求通信の変更点)
(2−1)実施例1の(2−1)と同じ処理を行う。ただし、クラスタ記憶フィールド150に登録されているクラスタ番号の数が0となったときは、当該ディレクトリのモードを終端モードに変更する代わりに、当該ディレクトリを空きエントリに変更する。
【0176】
(2−3)実施例1の(2−3)と同じ処理を行う。ただし、クラスタ記憶フィールド150に保持するビットマップが全て0となったときは、当該ディレクトリのモードを終端モードに変更する代わりに、当該ディレクトリを空きエントリに変更する。
【0177】
(ビットマップ移動要求通信の変更点)
(2)実施例1の(2)と同様の処理であるが、ビットマップ移動要求通信パケット425の移動対象クラスタ番号402fおよび移動対象クラスタ内アドレス403fで示されるメモリブロック106−1がキャッシングされているキャッシュライン108−1は終端モードであるので、当該キャッシュライン108−1に対応するキャッシュディレクトリ109−1はないことになる。そこで、ビットマップ移動要求通信を受信したキャッシュ制御回路104−1は、キャッシュディレクトリ109−1の空きエントリを当該キャッシュライン108−1に割り当てる。キャッシュディレクトリ109−1に空きのエントリが存在しない場合、キャッシュ制御回路104−1は、キャッシュディレクトリ109−1の中から1エントリを選択し、リプレースする。この後、このエントリを、ビットマップ移動要求通信に対応するキャッシュライン108−1のキャッシュディレクトリ109−1として使用する。
【0178】
(3)実施例1の(3)と同様の処理であるが、ビットマップの全ビットが0である場合は、終端モードに変更する代わりに、当該キャッシュディレクトリ109−1を空きエントリに変更する。
【0179】
(ポインタ移動要求通信の変更点)
(2)実施例1の(2)と同様の処理であるが、当該キャッシュライン108−1に対応するキャッシュディレクトリ109−1がない場合があり、それが終端モードの場合である。終端モードの場合は(3−3)へ進む。
【0180】
(3−3)ポインタ移動要求通信を受信したキャッシュ制御回路104−1は、キャッシュディレクトリ109−1の空きエントリを当該キャッシュライン108−1に割り当てる。キャッシュディレクトリ109−1に空きのエントリが存在しない場合、キャッシュ制御回路104−1は、キャッシュディレクトリ109−1の中から1エントリを選択し、リプレースする。この後、このエントリを、ポインタ移動要求通信に対応するキャッシュライン108−1のキャッシュディレクトリ109−1として使用する。
【0181】
本実施例により、キャッシュラインより少ない数のキャッシュディレクトリおよび主記憶ブロックより少ない数の主記憶ディレクトリを使って、実施例1と同様のプロセッサ間データ一貫性保証装置を実現することができる。
【0182】
(実施例5)
本発明の実施例5を説明する。図13は、本実施例に係る並列計算機の構成を示す。本実施例は実施例4の変形であるため、相違点のみ説明する。なお、図13において、図12と共通の装置・回路は番号の−1を−2に変えて表すものとし、実施例4の説明における番号は読み替えるものとする。
【0183】
本実施例は、クラスタ100−2内のキャッシュディレクトリ109−2および主記憶ディレクトリ107−2を、キャッシュメモリ102−2および主記憶装置103−2上に設ける点が異なる。
【0184】
本実施例により、キャッシュメモリおよび主記憶装置の他にディレクトリ格納用のメモリを用意することなく、実施例1と同様のプロセッサ間データ一貫性保証装置を実現することができる。
【0185】
(実施例6)
次に、本発明の第6の実施例について説明する。本実施例は実施例1の変形であるため、相違点のみ説明する。本実施例は、クラスタ内のプロセッサがキャッシュ一貫性制御の処理の一部を分担する点が異なる。すなわち本実施例は、主記憶ディレクトリ107またはキャッシュディレクトリ109の動作モードがポインタモードからビットマップモードに変わる場合の変更処理を、クラスタ100内の特定のプロセッサ101で実行する点を特徴とする。ただし、本発明は、主記憶制御回路およびキャッシュ制御回路とプロセッサとの処理の分担の仕方にかかわらず用いることができる。
【0186】
本実施例では、実施例1の読み出し要求通信、および追加要求通信を以下の様に変更する。
【0187】
(読み出し要求通信の変更点)
(4−3)ネットワークインターフェイス回路112は、主記憶制御回路105からプロセッサ処理の要求通知を受け、ディレクトリ制御を行うプロセッサ101に割り込みをかける。プロセッサ101は、アクセス対象のメモリブロック106の主記憶ディレクトリ107を読み出し、主記憶ディレクトリ107のモードフィールド110をビットマップモード170に変更し、ポインタモード160でクラスタ記憶フィールド150のエントリに登録されていたクラスタ番号に対応するビットを1とする。
【0188】
(追加要求通信の変更点)
(2−3)ネットワークインターフェイス回路112は、キャッシュ制御回路104からプロセッサ処理の要求通知を受け、ディレクトリ制御を行うプロセッサ101に割り込みをかける。プロセッサ101は、アクセス対象のキャッシュライン108のキャッシュディレクトリ109を読み出し、キャッシュディレクトリ109のモードフィールド110をビットマップモード170に変更し、ポインタモード160でクラスタ記憶フィールド150に登録されていた全てのクラスタ番号に対応するビットを1とした後、追加対象のクラスタ番号に対応するビットを1とする。
【0189】
本実施例により、ポインタモードからディレクトリモードへの移行時に必要な変更処理をプロセッサ101上のソフトウェアで行うことができ、キャッシュ制御装置および主記憶制御装置のハードウェア量を削減し、実施例1と同様のプロセッサ間データ一貫性保証装置を実現することができる。
【0190】
【発明の効果】
本発明によれば、下位の階層の全クラスタのキャッシング状態を管理する特別なディレクトリ管理専用の制御回路を設けたり、特定のクラスタにディレクトリ管理を行わせることなく、ツリーディレクトリ方式と比較して階層の高さが低いキャッシュディレクトリ方式を実現できる。すなわち、多数のプロセッサからなる並列計算機において、ツリーディレクトリ方式や階層型フルマップディレクトリ方式と同程度の大きさのディレクトリしか使用せず、ツリーディレクトリ方式より階層が低く、階層型フルマップディレクトリ方式のように特定のディレクトリ管理ノードへのアクセスが集中しないディレクトリ管理方式を用いたプロセッサ間データ一貫性保証装置が提供される。
【図面の簡単な説明】
【図1】本発明の実施例に係る並列計算機の構成図。
【図2】木構造のディレクトリによるキャッシュラインの管理の仕方を示す図
【図3】本実施例におけるディレクトリの構成図。
【図4】本実施例におけるクラスタ番号の構成図。
【図5】本実施例におけるパケットの構成図。
【図6】本発明の実施例1の動作例(1)に係るディレクトリの連結を示す図。
【図7】本発明の実施例1の動作例(2)に係るディレクトリの連結を示す図。
【図8】本発明の実施例1の動作例(3)に係るディレクトリの連結を示す図。
【図9】本発明の実施例1の動作例(4)に係るディレクトリの連結を示す図。
【図10】本発明の実施例1の動作例(5)に係るディレクトリの連結を示す図。
【図11】本発明の実施例1の動作例(6)に係るディレクトリの連結を示す図。
【図12】本発明の実施例4に係る並列計算機の構成図。
【図13】本発明の実施例5に係る並列計算機の構成図。
【図14】従来のフルマップディレクトリ方式の動作を示す図。
【符号の説明】
10a〜10d…プロセッサ、12a〜12d…キャッシュ、20…ネットワーク、30…主記憶装置、31…メモリブロック、32…ディレクトリ、100,100−1〜2…クラスタ、101,101−1〜2…プロセッサ、102,102−1〜2…キャッシュメモリ、103,103−1〜2…主記憶装置、104,104−1〜2…キャッシュ制御回路、105,105−1〜2…主記憶制御回路、106,106−1〜2…メモリブロック、107,107−1〜2…主記憶ディレクトリ、108,108−1〜2…キャッシュライン、109,109−1〜2…キャッシュディレクトリ、110,110−1〜2…モードフィールド、111,111−1〜2…バス、112,112−1〜2…ネットワークインターフェイス回路、200,200−1〜2…ネットワーク、110a〜110c…モードフィールド、150…クラスタ記憶フィールド、161−0〜161−3…クラスタ番号、162−0〜162−3…クラスタ番号存在フラグ、160…ポインタモードのディレクトリ、170…ビットマップモードのディレクトリ、180…終端モードのディレクトリ、171…ビットマップ、301…主記憶ディレクトリ、321,322,331〜334,341〜345…キャッシュディレクトリ、350…ポインタフィールド、351…ビットマップフィールド、400a〜400h…パケット送信先クラスタ番号、401a〜401h…パケット送信元クラスタ番号、402c〜402h…対象クラスタ番号、403a〜403h…クラスタ内アドレス、404…書き込みデータ、405…追加クラスタ番号、406…ビットマップ、407…ポインタ、408…返答データ、409…置き換えクラスタ番号、420…読み出し要求通信パケット、421…書き込み要求通信パケット、422…無効化要求通信パケット、423…追加要求通信パケット、424…削除要求通信パケット、425…ビットマップ移動要求通信パケット、426…ポインタ移動要求通信パケット、427…読み出し返答通信パケット。
【産業上の利用分野】
本発明は、複数計算機で共有するデータの一貫性を保証するプロセッサ間データ一貫性保証装置に関する。
【0002】
【従来の技術】
複数のプロセッサを結合し並列処理を行う並列計算機は、プロセッサ台数に応じた計算の高速化を図ることが可能であるため、重要な技術となっている。並列計算機において、各プロセッサが相互に並列計算機上の全主記憶をアクセスし、これをキャッシングする場合、プロセッサ間でのキャッシュの一貫性の保証が重要な課題となる。
【0003】
キャッシュの一貫性の保証とは、各プロセッサが、それぞれ独立に主記憶の内容を自プロセッサのキャッシュメモリ上に保持するときに、全プロセッサに対して主記憶の内容が同一に見えることを保証することである。
【0004】
例えば、プロセッサAおよびプロセッサBが主記憶上のブロックMをキャッシングしている場合、プロセッサCがブロックMに対して書き込みを行うと、プロセッサAおよびBのキャッシュメモリの内容は主記憶装置上の当該ブロックMの内容と異なることとなり一貫性が取れなくなる。この場合、キャッシュの一貫性を保証するためには、プロセッサAおよびBの対応するキャッシュラインを更新するか、無効化する必要がある。
【0005】
バス結合型並列計算機の場合、キャッシュの一貫性を保つ方法としてスヌープ方式が使用される。スヌープ方式では、各プロセッサのキャッシュ制御装置が、バス上に出力される全ての書き込み要求のアドレスを監視する。そして、他プロセッサが、自プロセッサのキャッシュに保持しているメモリブロック(主記憶上のブロックを単にメモリブロックと呼ぶこととする)に対する書き込み要求をバスに出力すると、当該キャッシュラインを無効化する。これにより、次回に当該メモリブロックにアクセスを行うと、当該メモリブロックはすでにキャッシュから無効化されているため、主記憶を直接読み出すこととなり、最新のデータをアクセスすることができる。スヌープ方式では、他プロセッサから自プロセッサの保持するメモリブロックに対して書き込みを行う際、当該キャッシュラインを無効化する代わりに、自プロセッサのキャッシュラインを最新データに更新する方式も提案されている。
【0006】
バス結合型並列計算機は、プロセッサ台数が増加すると、メモリアクセスがバスに集中するため、十数プロセッサ程度の規模がプロセッサ数の限界となる。
【0007】
さらにプロセッサ台数を増やす場合、主記憶上のキャッシングの対象となるブロック毎にディレクトリと呼ばれる構造体を付加することにより、各プロセッサのキャッシュの一貫性を保証する方式が用いられる。
【0008】
ディレクトリは、当該メモリブロック(そのディレクトリに対応するメモリブロック)をキャッシングした全プロセッサのプロセッサ番号を保持する領域である。メモリブロックに対して書き込み要求が到着すると、ディレクトリで示された全プロセッサのキャッシュラインに対して書き込みを反映するか無効化することによりキャッシュの一貫性を保証する。
【0009】
従来、プロセッサ台数が比較的少ない場合には、ディレクトリ方式として、フルマップディレクトリが主に採用されている。図14に、フルマップディレクトリ方式を用いた並列計算機の構成の概要およびその動作を示す。
【0010】
図14の並列計算機では、主記憶装置30がネットワーク20を介して複数のプロセッサ10a〜10dに結合されている。各プロセッサ10a〜10dは、それぞれ、キャッシュメモリ12a〜12dを持つ。また、主記憶装置30は、複数のメモリブロック31で構成され、各メモリブロック31毎にディレクトリ32が付加されている。
【0011】
ディレクトリ32は、プロセッサ台数分のビット列(各ビットは各プロセッサに対応している)からなる。ディレクトリ32の各ビットは、各プロセッサ10a〜10dに付加されたキャッシュが、対応するメモリブロック31をキャッシングしたときに1となり、キャッシングしていないときには0となる。図14では、プロセッサ10aおよび10dが、キャッシュメモリ12aおよび12d上にメモリブロックMをキャッシングしている。したがって、メモリブロックMに対応するディレクトリ32においては、プロセッサ10aおよび10dに対応するビットが1となり、プロセッサ10bおよび10cに対応するビットが0となっている。
【0012】
この状態で、例えばプロセッサ10bがメモリブロックMに対して書き込みを行うと、その書き込みアクセスはネットワーク20を介して主記憶装置30に送信される。主記憶装置30は、書き込みデータをメモリブロックMに書き込むと共に、ディレクトリ32を見てメモリブロックMをキャッシングしているプロセッサはプロセッサ10aおよびプロセッサ10dであることを知り、キャッシュ12aおよび12dに対して無効化要求を発行する。無効化要求を受けたキャッシュ12aおよび12dは、メモリブロックMのコピーをキャッシュメモリ内から抹消する。これにより、以降にプロセッサ10aまたはプロセッサ10bがメモリブロックMに読み出しアクセスを行うと、キャッシュ12aおよび12d内にはメモリブロックMのコピーが存在せず、主記憶装置30に対してアクセスすることとなり、最新データを読み出すことができる。
【0013】
プロセッサ台数がさらに多くなると、フルマップディレクトリではディレクトリに必要なメモリ量の全メモリ量に対する割合が大きくなる。プロセッサ数をPとするとメモリブロック当たりPビットのディレクトリが必要となる。メモリブロックは、通常64バイトから1024バイト程度の大きさであり、フルマップディレクトリで数百プロセッサ以上の並列計算機を構成すると、ディレクトリはメモリブロックあたり十数バイトから百バイト程度となり実用的でない。
【0014】
このため、数百プロセッサ以上の並列計算機のディレクトリ方式として、例えば「Computer Architecture News Vol.19, No.5, 1991,『Two Economical Directory Schemes for Large-Scale Cache Coherent Multiprocessors』, Yeong-Chang Maaほか」には、ツリーディレクトリ方式および階層型フルマップディレクトリ方式が提案されている。
【0015】
ツリーディレクトリ方式は、メモリブロックおよびキャッシュライン毎に複数のプロセッサ番号を記憶するディレクトリを設け、これを木構造に連結することにより、当該メモリブロックをキャッシングしている全プロセッサを記録する方式である。例えば、メモリブロックおよびキャッシュライン毎に4つのプロセッサ番号を記憶するディレクトリを設けるとする。あるメモリブロックMのディレクトリには、当該メモリブロックMをキャッシングしている4つのプロセッサのプロセッサ番号が記憶されている。さらに、その4つのプロセッサのそれぞれにおいて、当該メモリブロックMをキャッシングしているキャッシュラインのディレクトリには、やはり当該メモリブロックMをキャッシングしている4つのプロセッサのプロセッサ番号が記憶されている。以下同様にして、当該メモリブロックMをキャッシングしている全プロセッサを木構造の形式で記録することができる。
【0016】
メモリブロックに対して書き込みが行われたときには、当該メモリブロックのディレクトリから木構造をたどって当該メモリブロックMをキャッシングしている全プロセッサを知ることができる。このツリーディレクトリ方式では、全プロセッサ数をP、1ディレクトリ当たりに記憶できるプロセッサ番号の数をNとすると、ディレクトリ当たりNlog2Pビットの記憶領域を使用する。
【0017】
一方、階層型フルマップディレクトリ方式は、メモリブロックおよびキャッシュライン毎にビットマップを持ち、これを木構造に連結することにより、当該メモリブロックをキャッシングしている全プロセッサを記録する方式である。メモリブロックおよびキャッシュライン毎に設けられたビットマップの各ビットは、下位のプロセッサ(またはディレクトリ管理専用の制御ノード)に対応づけられている。最下位のビットマップは、対応するプロセッサグループ内の全プロセッサのキャッシング状況を示す。上の階層のビットマップは、プロセッサグループ単位でのキャッシング状況を示す。
【0018】
主記憶上のメモリブロックに対して書き込みが行われたとき、主記憶の制御回路は、当該メモリブロックのディレクトリからビットマップを読み出す。そして、そのビットマップ中で1が立っているビットを探す。1が立っているということは、そのビットに対応するプロセッサグループ内の何れかのプロセッサで当該メモリブロックをキャッシングしているということである。そこで、主記憶の制御回路は、読み出したビットマップ中で1が立っているビットに対応するすべてのプロセッサグループのディレクトリ管理回路に対して無効化の要求を出す。この無効化の要求を受けたプロセッサグループのディレクトリ管理回路では、キャッシュ制御回路により、ディレクトリからビットマップを読み出し、そのビットマップ中で1が立っているビットを探す。1が立っているということは、そのビットに対応するプロセッサで当該メモリブロックをキャッシングしているということである。そこで、キャッシュ制御回路は、読み出したビットマップ中で1が立っているビットに対応するすべてのプロセッサに対して無効化要求を出す。このようにして、書き込みが行われたメモリブロックをキャッシングしているすべてのプロセッサに対して無効化を出すことができる。
【0019】
【発明が解決しようとする課題】
上記従来技術のうち、ツリーディレクトリ方式では、階層の高さ(深さ)が深くなるため、無効化の処理に時間がかかる。例えば、1024台のプロセッサからなる並列計算機で4プロセッサを指すことができるディレクトリを使用した場合、4×4×4×4×4=1024であるため最大6階層となる。したがって、無効化のための通信に最大5ステップの通信が行われるため時間がかかる。
【0020】
一方、上記従来技術のうち、階層型フルマップディレクトリ方式では、最上位の主記憶の制御回路からはプロセッサグループ単位でのキャッシング状況しか見えないため、プロセッサグループ内のどのプロセッサに対して無効化要求を出せばよいかを選択することができない。よって、階層型フルマップディレクトリ方式では、プロセッサグループごとにディレクトリ管理専用の制御ノードの役割を果たすハードウェアを設けるか、またはプロセッサグループ内の特定プロセッサが該プロセッサグループを代表してディレクトリの管理を行うようにする必要がある。したがって、ディレクトリ管理ノードに対してキャッシュ制御に伴う通信が集中するという問題がある。
【0021】
本発明の目的は、多数のプロセッサからなる並列計算機において、ツリーディレクトリ方式や階層型フルマップディレクトリ方式と同程度の大きさのディレクトリしか使用せず、ツリーディレクトリ方式より階層が低く、階層型フルマップディレクトリ方式のように特定のディレクトリ管理ノードへのアクセスが集中しないディレクトリ管理方式を用いたプロセッサ間データ一貫性保証装置を提供することにある。
【0022】
【課題を解決するための手段】
本発明は、並列計算機においてキャッシュの一貫性を保証するために、主記憶ブロックおよびキャッシュラインごとにディレクトリを保持し、これらのディレクトリでは当該主記憶ブロックをキャッシングしているクラスタを記録する態様として2種類以上の態様の中から1つの態様を主記憶ブロックまたはキャッシュライン毎に選択可能であるようにし、選択された態様で当該主記憶ブロックをキャッシングしているクラスタを記録するとともに、該態様を示すモードフィールドを備えるようにしたことを特徴とする。そして、主記憶制御回路およびキャッシュ制御回路で、ディレクトリおよびモードフィールドを制御し、ディレクトリに記録されている複数のクラスタに対し、ネットワークを介してキャッシュ制御用の通信を発行するようにする。
【0023】
特に、主記憶ブロックのディレクトリを根として、当該主記憶ブロックをキャッシングした全クラスタのキャッシュラインのディレクトリを木構造の連鎖で結合して管理するとよい。また、各主記憶ブロックおよびキャッシュラインのディレクトリは、複数のクラスタへのポインタとして動作するポインタモードと、ビットマップとして動作するビットマップモードを備え、ポインタモードでは、任意のクラスタを指し、ビットマップとして動作するモードでは、クラスタグループ内の全クラスタのキャッシングの状態を示すようにする。
【0024】
主記憶ブロックへの書き込みの際に、書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックの主記憶ディレクトリにより指し示される全てのクラスタに対して無効化要求を発行し、無効化要求を受けたクラスタのキャッシュ制御回路は、当該主記憶ブロックに対応するキャッシュラインを無効化するとともに、対応するキャッシュディレクトリにより指し示される全てのクラスタに対して無効化要求を発行していくことにより、同一主記憶ブロックをキャッシングした全てのクラスタ内の対応するキャッシュラインを無効化するようにする。書き込みデータを送信して、同一主記憶ブロックをキャッシングしている全てのクラスタ内の対応するキャッシュラインを更新するようにしてもよい。
【0025】
主記憶ブロックへの書き込みの際に、キャッシュの無効化や更新の要求を発行した場合、無効化完了通信や更新返答通信を受けるのを待つことにより、全クラスタに対する書き込みの完了を保証するようにしてもよい。
【0026】
ディレクトリはブロックごとに持ってもよいし、別のディレクトリ用メモリ領域を用意し、当該ブロックから指し示すべきクラスタがある場合にのみ該ディレクトリ用メモリ領域に当該ブロックのディレクトリを登録するようにしてもよい。また、主記憶制御回路やキャッシュ制御回路の機能をクラスタ内の特定のプロセッサで代替するようにしてもよい。
【0027】
【作用】
本発明によれば、各ディレクトリにクラスタを記録する態様として2種類以上の態様の中から1つを選択できる。したがって、階層の高さが低い方式、ディレクトリの大きさが大きくない方式、特定のノードへのアクセスが集中しない方式などを組み合わせることができる。特に、各ディレクトリは、複数クラスタへのポインタとして動作するポインタモードと、クラスタグループ内の全クラスタのビットマップとして動作するビットマップモードを持つ。これにより、ツリーディレクトリで構成する木構造の下位数階層をビットマップ1階層に置き換えることができ、ツリーディレクトリ方式と比較して階層が少なくなる。また、上位階層はポインタによるツリー構造となり、任意のクラスタを指すことができる。このため、階層型フルマップディレクトリ方式のようにディレクトリ管理専用回路を設けることや、特定のクラスタにディレクトリの管理を行わせる必要がなく、特定の回路またはクラスタに対して通信が集中することがない。
【0028】
【実施例】
以下、図面を用いて本発明の実施例を説明する。
【0029】
(実施例1)
まず、本発明の第1の実施例について説明する。図1は、第1の実施例に係る並列計算機を示す。本実施例では、複数のクラスタ100がネットワーク200により結合されている。図1において、101はプロセッサであり、従来技術におけるマイクロプロセッサと同じ構成でよい。クラスタ100は、1つ以上のプロセッサからなる密結合マルチプロセッサ構成を取る。
【0030】
各クラスタ100は、複数のプロセッサ101と、1つのキャッシュメモリ102、主記憶装置103、キャッシュ制御回路104、主記憶制御回路105、およびネットワークインターフェイス回路112からなる。また、ネットワーク200において、あるクラスタAから同一クラスタBに対して複数の通信を行った場合、クラスタAにおける発行順とクラスタBにおける到着順とは同じであるものとする。
【0031】
主記憶装置103は、従来技術を用いてアドレス線およびデータ線を使ってアクセスする。主記憶装置103は複数のメモリブロック106からなり、メモリブロック106毎に主記憶ディレクトリ107が設けられている。主記憶ディレクトリ107内にはモードフィールド110が設けられている。主記憶装置103は、当該クラスタ100内のプロセッサ101からアクセスされると共に、他のクラスタ100内のプロセッサ101からもアクセスされる。すなわち、各クラスタ100内の主記憶装置103は、全クラスタにより共有される記憶領域である。
【0032】
キャッシュメモリ102は、メモリブロック106と同じ大きさのキャッシュライン108からなり、キャッシュライン毎にキャッシュディレクトリ109が設けられている。キャッシュディレクトリ109内にはモードフィールド110が設けられている。キャッシュライン108に、自クラスタ100および他クラスタ内の主記憶装置103のメモリブロック106のコピーを格納することにより、キャッシングを行う。
【0033】
キャッシュ制御回路104は、キャッシュメモリ102およびキャッシュディレクトリ109を制御する回路である。
【0034】
主記憶制御回路105は、主記憶装置103の読み出し、書き込みおよび主記憶ディレクトリ107の制御を行う回路である。ネットワークインターフェイス回路112は、ネットワーク200を通じて他クラスタのネットワークインターフェイス回路と接続されており、クラスタ100内から自クラスタまたは他クラスタの主記憶装置へのメモリアクセス、他クラスタから自クラスタ100の主記憶装置103へのメモリアクセス、およびクラスタ間のディレクトリ制御通信の送受信を行う回路である。
【0035】
本実施例では、主記憶ディレクトリ107およびキャッシュディレクトリ109にモードフィールド110を設け、ディレクトリに複数の動作モードを設けることに特徴がある。
【0036】
図3に、主記憶ディレクトリ107およびキャッシュディレクトリ109の構造を示す。1つのディレクトリは、モードフィールド110およびクラスタ記憶フィールド150よりなる。本実施例では、並列計算機のクラスタ数は1024、クラスタ当たりのプロセッサ数は1としており、ディレクトリのモードフィールド110は2ビット、クラスタ記憶フィールド150は64ビットの大きさとしており、全クラスタを64クラスタからなるクラスタグループ16個に分割しているが、本発明は、並列計算機のクラスタ数、クラスタ当たりのプロセッサ数およびディレクトリのサイズに関らず用いることができる。
【0037】
ここで、クラスタ番号について説明しておく。本実施例ではクラスタ数が1024であるので、各クラスタには0〜1023(2進数で表すと、10ビットで00…0から11…1)のクラスタ番号が付けられている。この10ビットのクラスタ番号の上位4ビットが等しいクラスタが同じクラスタグループに属するようにクラスタグループを形成する。例えば、10ビットのクラスタ番号が0000******である64個のクラスタが1つのクラスタグループ、10ビットのクラスタ番号が0001******である64個のクラスタが1つのクラスタグループ、10ビットのクラスタ番号が0010******である64個のクラスタが1つのクラスタグループ、…というような具合である。*は、0または1の任意の1ビットデータを示すものとする。
【0038】
図3を参照して、ディレクトリの構造について説明する。ディレクトリは、ポインタモード160、ビットマップモード170、および終端モード180を持つ。モードに応じて、クラスタ記憶フィールド150の用い方が異なるようになっている。
【0039】
ポインタモード160は、モードフィールド110aが00(2進)であるモードである。ポインタモード160において、クラスタ記憶フィールド150には、4つの10ビットのクラスタ番号161−0,161−1,161−2,161−3および各クラスタ番号に対応するクラスタ番号存在フラグ162−0,162−1,162−2,162−3が記憶される。クラスタ番号存在フラグ162が0の場合は、そのクラスタ番号存在フラグに対応するクラスタ番号が無効であることを示す。クラスタ番号存在フラグが1の場合は、そのクラスタ番号存在フラグに対応するクラスタ番号が有効であり、そのクラスタ番号で指されるクラスタに同一のメモリブロック106がキャッシングされていることを示す。
【0040】
ビットマップモード170は、モードフィールド110bが01(2進)であるモードである。ビットマップモード170において、クラスタ記憶フィールド150には、64ビットのビットマップ171が記憶される。ビットマップ171の各ビットは、当該ディレクトリを保持するクラスタが含まれるクラスタグループ内のキャッシング状況を示しており、ビットマップ171のビットが1ならば、当該ビットに対応するクラスタが同一メモリブロック106をキャッシングしていることを示す。
【0041】
なお、クラスタグループ内におけるビットマップ171の各ビットとクラスタとの対応は、クラスタ番号の下位6ビットによってビットマップ171内の対応ビットの位置を示すようになっている。すなわち、ビットマップ171内の第k番目のビットは、クラスタ番号の下位6ビットがk−1であるクラスタに対応する。例えば、ビットマップ171の先頭ビットはクラスタ番号の下位6ビットが0(10進)であるクラスタに対応し、ビットマップ171の第2番目のビットはクラスタ番号の下位6ビットが1(10進)であるクラスタに対応し、ビットマップ171の第3番目のビットはクラスタ番号の下位6ビットが2(10進)であるクラスタに対応し、…、ビットマップ171の第64番目のビットはクラスタ番号の下位6ビットが63(10進)であるクラスタに対応する。
【0042】
終端モード180は、モードフィールド110cが10(2進)であるモードであり、クラスタ記憶フィールド150は使用されない。本モードは、当該メモリブロックまたはキャッシュラインの下に、他クラスタのキャッシュラインが関連付けられていないことを示す。
【0043】
図3で示したディレクトリ構造を用いて、メモリブロック106毎に、メモリブロック106を頂点として、全クラスタにまたがって木構造を作成し、メモリブロックをキャッシングした全キャッシュラインを管理する。
【0044】
図2は、主記憶ディレクトリおよびキャッシュディレクトリを使って構成される木構造によるキャッシュラインの管理の仕方を示す図である。図2において、301は主記憶ディレクトリであり、321,322,331,332,333,334,341,342,343,344,345はキャッシュディレクトリである。この木構造において、頂点の主記憶ディレクトリ301を階層1と定義する。階層1の主記憶ディレクトリ301により直接指されるキャッシュディレクトリ321,322を階層2と定義する。階層2内のキャッシュディレクトリ321,322により直接指されるキャッシュディレクトリ331,332,333,334を階層3と定義する。以後同様にして、階層4,5,…を定義する。
【0045】
図2の木構造は、以下に示す規則に従って構成する。
【0046】
(規則1)
ポインタモード160でクラスタ記憶フィールド150に記述するクラスタ数をPp、ビットマップモード170でクラスタ記憶フィールド150に記述するクラスタ数をPb、全クラスタ数をPとする。このとき、xlog2 Pp+log2Pb=log2Pを満たすxについて、階層x+1に位置するディレクトリはビットマップモードまたは終端モードであり、階層x+2に位置するディレクトリは終端モードである。
【0047】
(規則2)
ビットマップモードにより直接指されるキャッシュラインは、終端モードのみである。
【0048】
(規則3)
図4に、クラスタ番号を2進数で表したビット列を示す。クラスタ番号は、log2P=xlog2Pp+log2Pbを満たすx個のポインタフィールド350および1個のビットマップフィールド351よりなる。階層jのディレクトリがポインタモードであったとき、そのディレクトリのクラスタ番号フィールドのk番目で指す部分木内の全クラスタのクラスタ番号は、ポインタフィールド1からポインタフィールドj−1までが当該ディレクトリが存在するクラスタのクラスタ番号と等しく、ポインタフィールドjがk−1となる。なお、j=1のときは、階層1のディレクトリがポインタモードであったとき、そのディレクトリのクラスタ番号フィールドのk番目で指す部分木内の全クラスタのクラスタ番号は、ポインタフィールド1(クラスタ番号の第1番目のポインタフィールド)がk−1となる、ということである。なお、ポインタフィールド350のうち、先頭のポインタフィールドから順にポインタフィールド1,2,…と呼ぶこととする
。
【0049】
(規則4)
ビットマップモードで指される全クラスタのクラスタ番号は、全ポインタフィールドが当該ディレクトリの存在するクラスタ番号のポインタフィールドと等しい。
【0050】
規則1〜4について詳しく説明する。規則1は、図2の木構造の高さ(深さ)の限界を規定するものである。全クラスタ数をPとするとき、log2Pはそれらのクラスタに付けるクラスタ番号を表現するビット数になる。クラスタ番号を表現するlog2Pビットのうち、log2Pbビット分はビットマップモードで特定する範囲を表わし、xlog2Ppビット分はポインタモードで特定する範囲(1階層がlog2Ppビット分であり、それがx階層分)を表わす。
【0051】
具体的に本実施例では、全クラスタ数P=1024であるからlog2P=10であり、10ビットのクラスタ番号で全クラスタを表現できる。すなわち、図4のクラスタ番号は10ビットで表わされる。また、ビットマップモードで64クラスタを記述するから、Pb=64でlog2Pb=6である。言い替えると、クラスタ番号10ビットのうち6ビット分(ここでは下位の6ビット)は、ビットマップモードで特定できる範囲(すなわち、この6ビットが、クラスタグループ内で1つのクラスタを特定するID)になっている。クラスタ番号10ビットのうちこの6ビット分を除いた4ビット分が、ポインタモードで特定する範囲であり、上記数式中のxlog2Ppに相当する。ポインタモードでは1つのディレクトリのクラスタ記憶フィールド150に4つのクラスタ番号を記述するから、Pp=4でlog2Pp=2である。したがって、x=2である。これは、図2の木構造が最大の高さとなる場合は、x=2までの階層すなわち階層1と階層2がポインタモードになり、その下の階層3はビットマップモードになり、その下の階層4が終端モードになることを示すものである。なお、図4ではポインタフィールド350が3つ図示してあるが、本実施例の例では、クラスタ番号全体が10ビットであり、2ビットのポインタフィールド350が2つと、残りの6ビットのビットマップフィールド351からなる。
【0052】
規則2は、ビットマップモードの下の階層は終端モードのみであることを規定したものである。
【0053】
規則3は、クラスタ番号の構成を規定したものである。規則3の後段は、ポインタモードのディレクトリのクラスタ番号フィールドに設定するクラスタ番号と木構造につながれるクラスタのクラスタ番号の関係を表す。図2を参照して、この関係を説明する。図2において、主記憶ディレクトリ301はポインタモードになっており、第2番目のクラスタ番号フィールドにクラスタPaのクラスタ番号aが、第3番目のクラスタ番号フィールドにクラスタPbのクラスタ番号bが、それぞれ記憶され、第1番目と第4番目のクラスタ番号フィールドは無効になっている。これは、この主記憶ディレクトリに対応するメモリブロックがクラスタPa,Pbにおいてキャッシングされていることを示している。また、この主記憶ディレクトリ301の4つのクラスタ番号フィールドは、順にクラスタ番号の先頭の2ビット(ポインタフィールド1)が00,01,10,11(10進では0,1,2,3)であるクラスタを記憶するフィールドである。したがって、第2番目のクラスタ番号フィールドによってつながれているクラスタPaのクラスタ番号a(10ビット)は先頭2ビットが01であることが分かる。同様に、第3番目のクラスタ番号フィールドによってつながれているクラスタPbのクラスタ番号b(10ビット)は先頭2ビットが10であることが分かる。
【0054】
階層2に移って、321はクラスタPa内で主記憶ディレクトリ301に対応するメモリブロックをキャッシングしているキャッシュラインに対応するディレクトリであり、322はクラスタPb内で主記憶ディレクトリ301に対応するメモリブロックをキャッシングしているキャッシュラインに対応するディレクトリである。キャッシュディレクトリ321はポインタモードになっており、第1番目のクラスタ番号フィールドにクラスタPcのクラスタ番号cが、第3番目のクラスタ番号フィールドにクラスタPdのクラスタ番号dが、それぞれ記憶され、第2番目と第4番目のクラスタ番号フィールドは無効になっている。これは、このキャッシュディレクトリに対応するキャッシュラインがクラスタPc,Pdでもキャッシングされていること(すなわち、階層1の主記憶ディレクトリ301に対応するメモリブロックがキャッシングされているということ)を示している。また、このキャッシュディレクトリ321の4つのクラスタ番号フィールドは、順にクラスタ番号の先頭2ビット(2進で01)の次の2ビット(ポインタフィールド2)が00,01,10,11であるクラスタを記憶するフィールドである。したがって、第1番目のクラスタ番号フィールドによってつながれているクラスタPcのクラスタ番号c(10ビット)は先頭2ビットが01で次の2ビットが00であることが分かる。同様に、第3番目のクラスタ番号フィールドによってつながれているクラスタPdのクラスタ番号d(10ビット)は先頭2ビットが10で次の2ビットが10であることが分かる。
【0055】
階層2のディレクトリ322もポインタモードであり、その第2,3番目のクラスタ番号フィールドにクラスタPf,Pgのクラスタ番号f,gが記憶されている。したがって、当該メモリブロック(階層1の主記憶ディレクトリ301に対応するメモリブロック)がクラスタPf,Pgでキャッシングされており、クラスタ番号fは先頭4ビットが1001であり、クラスタ番号gは先頭4ビットが1010であることが分かる。
【0056】
階層3に移って、331,332,333,334は、それぞれクラスタPc,Pd,Pf,Pg内で当該メモリブロックをキャッシングしているキャッシュラインに対応するディレクトリである。ディレクトリ331,332,333は終端モードであり、これ以下の階層にはクラスタがつながれていない。ディレクトリ334はビットマップモードであり、1が立っているビットに対応するクラスタPh,Pi,Pj,Pk,Plに当該メモリブロックがキャッシングされていることが分かる。さらに、クラスタPh,Pi,Pj,Pk,PlはクラスタPgと同じクラスタグループに属し、これらのクラスタのクラスタ番号は何れも先頭4ビット(全ポインタフィールド)が1010(クラスタ番号gの全ポインタフィールドと同じ)であることが分かる。
【0057】
規則1から規則4により、任意のクラスタが図2のような木構造に含まれるか否かを調査するときには、頂点のメモリブロックのディレクトリから開始して全階層でディレクトリ内のいずれか一つのポインタをたどればよいこととなる。例えば、あるクラスタ番号Yが木構造に含まれるか調査するときには、以下の様に検索すればよい。
【0058】
(1) 調査対象の木構造の階層1のディレクトリを読み出す。iの初期値を1とする。
【0059】
(2)階層iのディレクトリのモードに応じて、以下の処理をクラスタ番号Yのディレクトリを読み出すか、終了条件を満たすまで繰り返す。
【0060】
(2−1) 階層iのディレクトリがポインタモードのとき:クラスタ番号Y中のポインタフィールドiを取り出し、そのポインタフィールドiの値をjとしたとき、階層iのディレクトリの第j+1番目のクラスタ番号フィールドのクラスタ番号存在フラグが1であればそのクラスタ番号フィールドからクラスタ番号を読み出し、当該クラスタ番号のクラスタのディレクトリを新たなディレクトリとして読み出す。これにより、階層i+1に移動する(i+1を新たなiとする)。読み出したクラスタ番号がクラスタ番号Yに一致したら、クラスタ番号Yは木構造に含まれていたこととなる。なお、読み出すべきクラスタ番号フィールドのクラスタ番号存在フラグが0であれば、終了する。
【0061】
(2−2)階層iのディレクトリがビットマップモードのとき:クラスタ番号Y中のビットマップフィールドからデータを取り出し、そのビットマップフィールドの値をjとしたとき、階層iのディレクトリのビットマップの第j+1番目のビットが1なら、当該ビットに対応するクラスタのディレクトリを読み出す。そのクラスタがクラスタ番号Yのクラスタである。ビットが0なら終了する。
【0062】
(2−3)階層iのディレクトリが終端モードのとき:処理を終了する。
【0063】
これらの処理により最後に到達したディレクトリのクラスタ番号がYであれば、クラスタ番号Yは木構造に含まれていたこととなる。
【0064】
次に、上記構成の並列計算機により書き込み無効化型キャッシュ一致制御を実現する方法を述べる。書き込み無効化型とは、あるメモリブロックに対する書き込み要求を受けたときに、その書き込みを行うと共に該メモリブロックをキャッシングしているすべてのキャッシュメモリに対して無効化を行うことをいう。
【0065】
クラスタ100は、ネットワークインターフェイス回路112を通してネットワーク200から主記憶装置103に対する読み出し要求通信および書き込み要求通信、並びに、キャッシュメモリ102に対する無効化要求通信、追加要求通信、削除要求通信、ビットマップ移動要求通信、およびポインタ移動要求通信を受けることができる。また、プロセッサ101に対する読み出し返答通信を受けることができる。
【0066】
さらにクラスタ100では、キャッシュ制御回路104および主記憶制御回路105からネットワークインターフェイス回路112を通じて他クラスタのキャッシュメモリに対して無効化要求通信、追加要求通信、削除要求通信、ビットマップ移動要求通信、およびポインタ移動要求通信を送ることができ、主記憶制御回路105からネットワークインターフェイス回路112を通じて他クラスタに対して読み出し返答通信を送ることができ、プロセッサ101からネットワーク200を通じて他クラスタに対して読み出し要求通信および書き込み要求通信を送ることができる。
【0067】
これらの要求通信の詳細について説明する。まず各要求通信のパケットの構成について説明する。図5は、各要求通信のパケットの構成である。
【0068】
各パケットは、パケット送信先クラスタ番号400a〜400hおよびパケット送信元クラスタ番号401a〜401hよりなるパケットヘッダを共通に持つ。パケット送信元クラスタ番号401a〜401hは、当該要求通信パケットを送信した送信元のクラスタのクラスタ番号である。パケット送信先クラスタ番号400a〜400hは、当該要求通信パケットの送信先のクラスタのクラスタ番号である。
【0069】
読み出し要求通信パケット420は、パケットヘッダ、および送信先クラスタ内アドレス403aからなる。
【0070】
書き込み要求通信パケット421は、パケットヘッダ、および送信先クラスタ内アドレス403b、書き込みデータ404からなる。
【0071】
無効化要求通信パケット422は、パケットヘッダ、無効化対象クラスタ番号402c、および無効化対象クラスタ内アドレス403cからなる。
【0072】
追加要求通信パケット423は、パケットヘッダ、追加対象クラスタ番号402d、追加対象クラスタ内アドレス403d、および追加クラスタ番号405からなる。
【0073】
削除要求通信パケット424は、パケットヘッダ、削除対象クラスタ番号402e、削除対象クラスタ内アドレス403e、および置き換え対象クラスタ番号409からなる。
【0074】
ビットマップ移動要求通信パケット425は、パケットヘッダ、移動対象クラスタ番号402f、移動対象クラスタ内アドレス403f、およびビットマップ406からなる。
【0075】
ポインタ移動要求通信パケット426は、パケットヘッダ、移動対象クラスタ番号402g、移動対象クラスタ内アドレス403f、およびポインタ407からなる。
【0076】
読み出し返答通信パケット427は、パケットヘッダ、返答対象クラスタ番号402h、返答対象クラスタ内アドレス403h、および返答データ408からなる。
【0077】
各要求通信の動作は以下の通りである。
【0078】
(読み出し要求通信)
クラスタ100に対する読み出し要求通信は、クラスタ100内または他クラスタ内のプロセッサ101がクラスタ100内の主記憶装置103のメモリブロック106のデータを欲しい場合であって、かつ当該読み出し要求元クラスタのキャッシュメモリ102でミスした(すなわち、当該メモリブロックのデータは当該読み出し要求元クラスタではキャッシングされていなかった)場合に、クラスタ100のネットワークインターフェイス回路112に対して発行される。読み出し要求通信パケット420を受信したときのクラスタ100の動作は以下の通りである。
【0079】
(1)ネットワークインターフェイス回路112は、読み出し要求通信パケット420の送信先クラスタ内アドレス403aを用いて主記憶制御回路105に対して主記憶読み出し要求を行う。
【0080】
(2)主記憶制御回路105は、送信先クラスタ内アドレス403aを用いて、主記憶装置103から当該アドレスに対応するメモリブロック106、主記憶ディレクトリ107、およびモードフィールド110を読み出す。
【0081】
(3)主記憶制御回路105は、ネットワークインターフェイス回路112に、読み出したメモリブロック106の内容を返送する。具体的には、主記憶制御回路105は、受信した読み出し要求通信パケット420のパケット送信元クラスタ番号401aで示されるクラスタ(自クラスタでも他クラスタでもよい)のネットワークインターフェイス回路112に対してネットワーク200を通して(自クラスタの場合は直接)読み出し返答通信パケット427を送る。ここで、読み出し返答通信パケット427の、返答対象クラスタ番号402hは自クラスタ100(すなわち、いま説明している処理を行っているクラスタであり、読み出し対象のメモリブロック106を保有するクラスタ)のクラスタ番号、返答対象クラスタ内アドレス403hは受信した読み出し要求通信パケット420の送信先クラスタ内アドレス403a、返答データ408は読み出したメモリブロックの内容とする。読み出し返答通信パケット427を受けたクラスタの動作については後述する。
【0082】
(4)アクセスしたメモリブロック106の主記憶ディレクトリ107の状態により、(4−1)から(4−6)のいずれかを行う。アクセスしたメモリブロック106の内容は、上記(3)のようにして読み出し要求の発行元に返送されるが、それを受けたクラスタ(自クラスタも含む)内では当該メモリブロック106の内容をキャッシングすることになる(読み出し返答通信参照)。そこで、当該メモリブロック106を階層1とする図2のような木構造に、新たに当該メモリブロック106の内容をキャッシングしたクラスタを登録する必要がある。その処理を、以下の(4−1)から(4−6)で行う。
【0083】
(4−1)アクセスしたメモリブロック106の主記憶ディレクトリ107が終端モード180の場合:
主記憶ディレクトリ107のモードフィールド110をポインタモード160に変更し、上述した木構造の構成規則に従って、読み出し要求発行元のクラスタのクラスタ番号をクラスタ記憶フィールド150に登録する。このとき、クラスタ番号を登録したクラスタ番号フィールドのクラスタ番号存在フラグを1とする。
【0084】
(4−2)アクセスしたメモリブロック106の主記憶ディレクトリ107がポインタモード160であり、その主記憶ディレクトリ107のクラスタ記憶フィールド150のアクセス発行元のクラスタ番号を登録すべきエントリ(クラスタ番号フィールド)が空き(当該クラスタ番号フィールドのクラスタ番号存在フラグが0)の場合:
アクセス発行元のクラスタ番号を主記憶ディレクトリ107の当該空きエントリに登録する。このとき、対応するクラスタ番号存在フラグを1とする。
【0085】
(4−3)アクセスしたメモリブロック106の主記憶ディレクトリ107がポインタモード160であり、その主記憶ディレクトリ107のクラスタ記憶フィールド150のアクセス発行元のクラスタ番号を登録すべきエントリが空きでなく(当該クラスタ番号フィールドのクラスタ番号存在フラグが1)、他のエントリがすべて空きであり(クラスタ番号存在フラグが0)、かつ、アクセス発行元のクラスタ番号のポインタフィールドと、当該メモリブロック106を保有するクラスタのクラスタ番号のポインタフィールドと、上記空きでなかったエントリに記憶されているクラスタ番号のポインタフィールドとが全て等しい場合:
主記憶ディレクトリ107のモードフィールド110をビットマップモード170に変更し、ポインタモード160でクラスタ記憶フィールド150のエントリに登録されていたクラスタ番号に対応するビットおよびアクセス発行元のクラスタ番号に対応するビットを1とする。
【0086】
(4−4)アクセスしたメモリブロック106の主記憶ディレクトリ107がポインタモード160であり、その主記憶ディレクトリ107のクラスタ記憶フィールド150のアクセス発行元のクラスタ番号を登録すべきエントリが空きでない(当該クラスタ番号フィールドのクラスタ番号存在フラグが1)場合であって、他のエントリに空きでないものがあるか、または、アクセス発行元のクラスタ番号のポインタフィールドと、当該メモリブロック106を保有するクラスタのクラスタ番号のポインタフィールドと、上記アクセス発行元のクラスタ番号を記憶すべきエントリに登録されていたクラスタ番号のポインタフィールドのうちの少なくとも2つが等しくない場合:
アクセス発行元のクラスタ番号を記憶すべきエントリに登録されているクラスタ番号のクラスタに対して追加要求通信を行う。具体的には、追加要求通信パケット423を送信する。このとき、追加要求通信パケット423の、追加対象クラスタ番号402dは自クラスタ100(すなわち、いま説明している処理を行っているクラスタであり、読み出し対象のメモリブロック106を保有するクラスタ)のクラスタ番号、追加対象クラスタ内アドレス403dは読み出し要求通信パケット420の送信先クラスタ内アドレス403a、追加クラスタ番号405は読み出し要求通信パケット420のパケット送信元クラスタ番号401a(木構造に追加すべきクラスタ番号)とする。追加要求通信パケット423を受けたクラスタの動作については後述するが、要するに、アクセス発行元のクラスタ番号を記憶すべきエントリに登録されているクラスタ番号につながる部分木構造に、新たにアクセス発行元のクラスタ番号を追加する処理を行うものである。
【0087】
(4−5)アクセスしたメモリブロック106の主記憶ディレクトリ107がビットマップモード170であり、アクセス発行元のクラスタ番号のポインタフィールドがビットマップ内の全クラスタのクラスタ番号のポインタフィールドと等しい(言い替えると、アクセス発行元のクラスタ番号のポインタフィールドと当該メモリブロックを保有するクラスタのクラスタ番号のポインタフィールドとが等しい)場合:
主記憶ディレクトリ107のビットマップ内の、アクセス発行元のクラスタ番号に対応するビットを1とすることにより、アクセス発行元のクラスタ番号を木構造中に組み入れる。
【0088】
(4−6)アクセスしたメモリブロック106の主記憶ディレクトリ107がビットマップモード170の場合で、アクセス発行元のクラスタ番号のポインタフィールドがビットマップ内の全クラスタのクラスタ番号のポインタフィールドと異なる場合:
主記憶ディレクトリ107のビットマップ内から1が立っているビットを1つ選択し、当該ビットに対応するクラスタに対してビットマップ移動要求通信を行う。具体的には、ビットマップ移動要求通信パケット425を送信する。このとき、ビットマップ移動要求通信パケット425の、移動対象クラスタ番号402fは自クラスタ100(すなわち、いま説明している処理を行っているクラスタであり、読み出し対象のメモリブロック106を保有するクラスタ)のクラスタ番号、移動対象クラスタ内アドレス403fは読み出し要求通信パケット420の送信先クラスタ内アドレス403a、ビットマップ406は対応する主記憶ディレクトリ107のクラスタ記憶フィールド150に記憶されているビットマップとする。ビットマップ移動要求通信パケット425を受けたクラスタの動作については後述するが、要するに、ビットマップモードである現ディレクトリのビットマップを下位の階層に移動する処理を行うものである。
【0089】
この後、主記憶ディレクトリ107のモードフィールド110をポインタモード160に変更し、上述した木構造の構成規則に従って、アクセス発行元のクラスタ番号およびビットマップ移動要求通信の送信先のクラスタ番号をクラスタ記憶フィールド150に登録し、対応するクラスタ番号存在フラグを1とする。ここで、アクセス発行元のクラスタ番号とビットマップ移動要求通信の送信先のクラスタ番号とが一致する場合、(4−4)を行う。
【0090】
(書き込み要求通信)
クラスタ100に対する書き込み要求通信は、クラスタ100内または他クラスタ内のプロセッサ101がクラスタ100内の主記憶装置103に対してメモリ書き込みを行いたい場合、クラスタ100のネットワークインターフェイス回路112に対して発行される。書き込み要求通信パケット421を受信したときのクラスタ100の動作は以下の通りである。
【0091】
(1)ネットワークインターフェイス回路112は、書き込み要求通信パケット421の送信先クラスタ内アドレス403bを用いて主記憶制御回路105に対して主記憶書き込み要求を行う。
【0092】
(2)主記憶制御回路105は、送信先クラスタ内アドレス403bを用いて、主記憶装置103中の当該アドレスに対応するメモリブロック106に書き込みデータ404を書き込むとともに、当該メモリブロック106に対応する主記憶ディレクトリ107、およびモードフィールド110を読み出す。
【0093】
(3)アクセスしたメモリブロック106の主記憶ディレクトリ107の状態により、(3−1)または(3−2)のいずれかを行う。
【0094】
(3−1)アクセスしたメモリブロック106の主記憶ディレクトリ107がポインタモード160またはビットマップモード170であった場合:
当該主記憶ディレクトリ107のクラスタ記憶フィールド150に登録されている全てのクラスタに対して無効化要求通信を送信する。具体的には、無効化要求通信パケット422を送信する。このとき、無効化要求通信パケット422の、無効化対象クラスタ番号402cは自クラスタ100(すなわち、いま説明している処理を行っているクラスタであり、データ書き込みを行ったメモリブロック106を保有するクラスタ)のクラスタ番号、無効化対象クラスタ内アドレス403cは書き込み要求通信パケット421の送信先クラスタ内アドレス403bとする。無効化要求通信パケット422を受けたクラスタの動作については後述するが、要するに、書き込みを行ったメモリブロック106の内容がキャッシングされているのでそれを無効化する処理を行うものである。この後、主記憶制御回路105は、当該主記憶ディレクトリ107を終端モード180に変更する。
【0095】
(3−2)アクセスしたメモリブロック106の主記憶ディレクトリ107が終端モード180であった場合:
当該メモリブロックはどこにもキャッシングされていないため、キャッシュの一貫性制御は行わない。
【0096】
(無効化要求通信)
クラスタ100に対する無効化要求通信は、クラスタ100内または他クラスタ内のキャッシュ制御回路104または主記憶制御回路105が無効化要求通信を発行した場合(書き込み要求通信の(3−1)および本無効化要求通信の(3)参照)、クラスタ100のネットワークインターフェイス回路112に対して発行される。無効化要求通信パケット422を受信したときのクラスタ100の動作は以下の通りである。
【0097】
(1)ネットワークインターフェイス回路112は、無効化要求通信パケット422のアドレス(無効化対象クラスタ番号402cと無効化対象クラスタ内アドレス403c)を用いて、キャッシュ制御回路104に対して無効化要求を行う。
【0098】
(2)キャッシュ制御回路104は、無効化要求通信パケット422のアドレスを用いて、キャッシュメモリ102のキャッシュディレクトリを読み出す。具体的には、無効化対象クラスタ番号402cおよび無効化対象クラスタ内アドレス403cで示されるメモリブロック106がキャッシングされているはずであるから、そのキャッシュライン108を探して、対応するキャッシュディレクトリ109を読み出す。
【0099】
(3)読み出したキャッシュディレクトリ109がポインタモード160またはビットマップモード170であった場合:
キャッシュ制御回路104は、当該キャッシュディレクトリ109のクラスタ記憶フィールド150に登録されている全てのクラスタに対して、ネットワークインターフェイス回路112を通じて無効化要求通信パケット422を送信する。このとき、無効化対象クラスタ番号402cは受信した無効化要求通信パケット422の無効化対象クラスタ番号402cと同じとし、無効化対象クラスタ内アドレス403cも受信した無効化要求通信パケット422の無効化対象クラスタ内アドレス403cと同じとする。
【0100】
(4)無効化要求を受けたキャッシュライン108を無効化する。
【0101】
(追加要求通信)
クラスタ100に対する追加要求通信は、クラスタ100内または他クラスタ内のキャッシュ制御回路104または主記憶制御回路105が追加要求通信を発行した場合(読み出し要求通信の(4−4)および本追加要求通信の(2−4)参照)、クラスタ100のネットワークインターフェイス回路112に対して発行される。追加要求通信パケット423を受信したときのクラスタ100の動作は以下の通りである。
【0102】
(1)追加要求通信パケット423のアドレスに対応するキャッシュディレクトリ109を読み出す。具体的には、追加要求通信パケット423の追加対象クラスタ番号402dおよび追加対象クラスタ内アドレス403dで示されるメモリブロック106がキャッシングされているはずであるから、そのキャッシュライン108を探して、対応するキャッシュディレクトリ109を読み出す。
【0103】
(2)読み出したキャッシュディレクトリ109の状態により、(2−1)から(2−6)のいずれかを行う。
【0104】
(2−1)読み出したキャッシュディレクトリ109が終端モード180の場合:
キャッシュディレクトリ109のモードフィールド110をポインタモード160に変更し、上述した木構造の構成規則に従って、追加クラスタ番号405(木構造に追加すべきクラスタ番号)をクラスタ記憶フィールド150に登録する。このとき、クラスタ番号を登録したクラスタ番号フィールドのクラスタ番号存在フラグを1とする。
【0105】
(2−2)読み出したキャッシュディレクトリ109がポインタモード160であり、そのキャッシュディレクトリ109のクラスタ記憶フィールド150の追加クラスタ番号405を登録すべきエントリが空き(当該クラスタ番号フィールドのクラスタ番号存在フラグが0)の場合:
追加クラスタ番号405を当該キャッシュディレクトリ109に登録する。このとき、対応するクラスタ番号存在フラグを1とする。
【0106】
(2−3)読み出したキャッシュディレクトリ109がポインタモード160であり、そのキャッシュディレクトリ109のクラスタ記憶フィールド150の追加クラスタ番号405を登録すべきエントリが空きでなく(当該クラスタ番号フィールドのクラスタ番号存在フラグが1)、他のエントリがすべて空きであり(クラスタ番号存在フラグが0)、かつ、上記空きでなかったエントリに、追加クラスタ番号405とポインタフィールドが全て等しいクラスタ番号が登録されている場合:
キャッシュディレクトリ109のモードフィールド110をビットマップモード170に変更し、ポインタモード160でクラスタ記憶フィールド150に登録されていたクラスタ番号に対応するビットを1とした後、さらに追加対象である追加クラスタ番号405に対応するビットを1とする。
【0107】
(2−4)読み出したキャッシュディレクトリ109がポインタモード160であり、そのキャッシュディレクトリ109のクラスタ記憶フィールド150の追加クラスタ番号405を登録すべきエントリが空きでない(当該クラスタ番号フィールドのクラスタ番号存在フラグが1)場合であって、他のエントリに空きでないものがあるか、または、そのキャッシュディレクトリ109のクラスタ記憶フィールド150の追加クラスタ番号405を登録すべきエントリに登録されているクラスタ番号のポインタフィールドと追加クラスタ番号405のポインタフィールドとが異なる場合:
追加クラスタ番号405を登録すべきエントリに登録されているクラスタ番号のクラスタに対して、受信した追加要求通信パケット423を、転送する。
【0108】
(2−5)読み出したキャッシュディレクトリ109がビットマップモード170であり、追加クラスタ番号405のポインタフィールドがビットマップ内の全クラスタのクラスタ番号のポインタフィールドと等しい場合:
キャッシュディレクトリ109のビットマップ内の、追加クラスタ番号405に対応する位置のビットを1とすることにより、追加クラスタ番号405を木構造中に組み入れる。
【0109】
(2−6)読み出したキャッシュディレクトリ109がビットマップモード170であり、追加クラスタ番号405のポインタフィールドがビットマップ内の全クラスタのクラスタ番号のポインタフィールドと異なる場合:
キャッシュディレクトリ109のビットマップ内から1が立っているビットを1つ選択し、当該ビットに対応するクラスタに対してビットマップ移動要求通信を行う。具体的には、ビットマップ移動要求通信パケット425を送信する。このとき、ビットマップ移動要求通信パケット425の、移動対象クラスタ番号402fは受信した追加要求通信パケット423の追加対象クラスタ番号402d、移動対象クラスタ内アドレス403fは追加対象クラスタ内アドレス403d、ビットマップ406は当該キャッシュディレクトリ109のクラスタ記憶フィールド150のビットマップとする。
【0110】
この後、当該キャッシュディレクトリ109のモードフィールド110をポインタモード160に変更し、上述した木構造の構成規則に従って、追加クラスタ番号405およびビットマップ移動要求通信の送信先のクラスタ番号を、クラスタ記憶フィールド150に登録し、対応するクラスタ番号存在フラグを1とする。
【0111】
(削除要求通信)
クラスタ100に対する削除要求通信は、自クラスタ100内または他クラスタ内のキャッシュ制御回路104または主記憶制御回路105が削除要求通信を発行した場合(後述するキャッシュのリプレース時の動作の(2−1)および本削除要求通信の(2−2)参照)、クラスタ100のネットワークインターフェイス回路112に対して発行される。削除要求通信パケット424を受信したときのクラスタ100の動作は以下の通りである。
【0112】
(1)削除要求通信パケット424のアドレスに対応する主記憶ディレクトリ107またはキャッシュディレクトリ109を読み出す。具体的には、削除要求通信パケット424の削除対象クラスタ番号402eおよび削除対象クラスタ内アドレス403eで示されるメモリブロック106に対応する主記憶ディレクトリ107、またはそのメモリブロック106がキャッシングされているキャッシュライン108に対応するキャッシュディレクトリ109を読み出す。
【0113】
(2)読み出したディレクトリ107または109の状態により、(2−1)または(2−2)のいずれかを行う。
【0114】
(2−1)読み出したディレクトリ107または109がポインタモード160であり、当該ディレクトリ107,109のクラスタ記憶フィールド150に、受信した削除要求通信パケット424のパケット送信元クラスタ番号401e(削除すべきクラスタ番号)が登録してある場合:
削除要求通信パケット424の置き換えクラスタ番号409が有効なら、クラスタ記憶フィールド150の当該クラスタ番号を置き換えクラスタ番号409に変更する。また、削除要求通信パケット424の置き換えクラスタ番号409が無効なら、クラスタ記憶フィールド150の当該クラスタ番号のクラスタ番号存在フラグを0として、そのクラスタ番号を削除する。このとき、クラスタ記憶フィールド150に登録されているクラスタ番号の数が0となったときは、当該ディレクトリのモードを終端モードに変更する。
【0115】
(2−2)読み出したディレクトリ107または109がポインタモード160であり、当該ディレクトリ107,109のクラスタ記憶フィールド150に、受信した削除要求通信パケット424のパケット送信元クラスタ番号401e(削除すべきクラスタ番号)とは異なるクラスタのクラスタ番号が登録してある場合:
キャッシュ制御回路104は、ネットワークインターフェイス回路112を通じて削除対象のクラスタ番号(受信した削除要求通信パケット424のパケット送信元クラスタ番号401e)を記憶すべきエントリに登録されているクラスタに対して削除要求通信を転送する。
【0116】
(2−3)読み出したディレクトリ107または109がビットマップモード170の場合:
ビットマップの削除対象のクラスタ(受信した削除要求通信パケット424のパケット送信元クラスタ番号401eのクラスタ)に対応する位置のビットを0とし、そのクラスタ番号を削除する。このとき、クラスタ記憶フィールド150に保持するビットマップが全て0となれば、当該ディレクトリのモードを終端モードに変更する。
【0117】
(ビットマップ移動要求通信)
クラスタ100に対するビットマップ移動要求通信は、クラスタ100内または他クラスタ内の主記憶制御回路105またはキャッシュ制御回路104がビットマップ移動要求通信を発行した場合(読み出し要求通信の(4−6)、追加要求通信の(2−6)、キャッシュリプレース時の動作の(2−3)、およびポインタ移動要求通信の(3−2)参照)、クラスタ100のネットワークインターフェイス回路112に対して発行される。ビットマップ移動要求通信パケット425を受信したときのクラスタ100の動作は以下の通りである。
【0118】
(1)ネットワークインターフェイス回路112は、ビットマップ移動要求通信パケット425のアドレスを用いて、キャッシュ制御回路104に対してビットマップ移動要求を行う。
【0119】
(2)キャッシュ制御回路104は、ビットマップ移動要求のアドレスを用いて、キャッシュメモリ102のキャッシュディレクトリ109、およびモードフィールド110を読み出す。具体的には、ビットマップ移動要求通信パケット425の移動対象クラスタ番号402fおよび移動対象クラスタ内アドレス403fで示されるメモリブロック106がキャッシングされているはずであるから、そのキャッシュライン108を探して、対応するキャッシュディレクトリ109およびモードフィールド110を読み出す。
【0120】
(3)読み出したキャッシュディレクトリ109のモードフィールド110をビットマップモード170に変更し、受信したビットマップ移動要求通信パケット425のビットマップ406を、当該キャッシュディレクトリ109のクラスタ記憶フィールド150に書き込む。ただし、ビットマップの全ビットが0である場合、モードフィールド110を終端モードとする。
【0121】
なお、ビットマップ移動要求通信パケット425は必ず上位の階層から下位の階層へと送信され、ビットマップモードのディレクトリの下位の階層は終端モードであることから、ビットマップ移動要求通信パケット425の送信先ディレクトリは必ず終端モードである。
【0122】
(ポインタ移動要求通信)
クラスタ100に対するポインタ移動要求通信は、クラスタ100内または他クラスタ内の主記憶制御回路105またはキャッシュ制御回路104がポインタ移動要求通信を発行したとき(キャッシュのリプレース時の動作の(2−2)、および本ポインタ移動要求通信の(3−1)参照)に、クラスタ100のネットワークインターフェイス回路112に対して発行される。ポインタ移動要求通信パケット426を受信したときのクラスタ100の動作は以下の通りである。
【0123】
(1)ネットワークインターフェイス回路112は、ポインタ移動要求通信パケット426のアドレスを用いて、キャッシュ制御回路104に対してポインタ移動要求を行う。
【0124】
(2)キャッシュ制御回路104は、ポインタ移動要求のアドレスを用いて、キャッシュメモリ102のキャッシュディレクトリ109、およびモードフィールド110を読み出す。具体的には、ポインタ移動要求通信パケット426の移動対象クラスタ番号402gおよび移動対象クラスタ内アドレス403gで示されるメモリブロック106がキャッシングされているはずであるから、そのキャッシュライン108を探して、対応するキャッシュディレクトリ109およびモードフィールド110を読み出す。
【0125】
(3)キャッシュディレクトリ109のモードにより、(3−1)から(3−3)のいずれかを行う。
【0126】
(3−1)読み出したキャッシュディレクトリ109がポインタモード160であった場合:
当該キャッシュディレクトリ109により指されるクラスタを一つ選択し、選択したクラスタ番号をキャッシュディレクトリ109から取り除き、その選択したクラスタに対してポインタ移動要求通信を送信し、キャッシュディレクトリ109をポインタ407にセットして渡す。
【0127】
この後、自クラスタ100に対するポインタ移動要求通信パケット426で送られてきたポインタ407(ディレクトリ)に、自クラスタ100からポインタ移動要求通信パケット426を送信した相手先クラスタの番号を追加し、自クラスタ100の当該キャッシュディレクトリ109に書き込む。
【0128】
(3−2)読み出したキャッシュディレクトリ109がビットマップモード170であった場合:
当該キャッシュディレクトリ109により指されるクラスタを一つ選択し、選択したクラスタに対応するビットを0として、選択したクラスタに対してビットマップ移動要求通信を送信し、キャッシュディレクトリ109をビットマップ406にセットして渡す。
【0129】
この後、自クラスタ100に対するポインタ移動要求通信パケット426で送られてきたポインタ407(ディレクトリ)に、自クラスタ100からビットマップ移動要求通信を送信した相手先クラスタの番号を追加し、自クラスタ100の当該キャッシュディレクトリ109に書き込む。また、モードフィールド110は、ポインタモードに変更する。
【0130】
(3−3)読み出したキャッシュディレクトリ109が終端モード180であった場合:
受信したポインタ移動要求通信パケット426で送られてきたディレクトリ(ポインタ407)を、自クラスタ100の当該キャッシュディレクトリ109に書き込み、モードフィールド110をポインタモード160に変更する。ただし、全てのポインタフィールド350が無効である場合、モードフィールド110は終端モード180とする。
【0131】
(読み出し返答通信)
クラスタ100に対する読み出し返答通信は、クラスタ100内または他クラスタ内の主記憶制御回路105が読み出し返答通信を発行した場合(読み出し要求通信の(3)参照)、クラスタ100のネットワークインターフェイス回路112に対して発行される。読み出し返答通信パケット427を受信したときのクラスタ100の動作は以下の通りである。
【0132】
(1)ネットワークインターフェイス回路112は、返答結果をキャッシュ制御回路104に転送する。
(2)キャッシュ制御回路104は、キャッシュメモリ102の対応するキャッシュライン108に返答結果を記録し、当該キャッシュディレクトリ109を終端モード180として登録する。
(3)ネットワークインターフェイス回路112は、読み出し返答通信の返答結果をクラスタ100内のバス111に出力してプロセッサ101に返答する。
【0133】
(キャッシュのリプレース時の動作)
クラスタ100内のプロセッサ101から自クラスタ100内または他クラスタ内の主記憶装置103に対して読み出しを行いたい場合は、まず読み出したいメモリブロック106の内容が自クラスタ100内のキャッシュメモリ102でキャッシングされているかどうかを調べることになるが、そこでキャッシュミスした場合は、読み出したいメモリブロック106から実際にデータを読み出してくることになる。このとき、当該読み出し結果を格納すべきキャッシュライン108にすでに別のメモリブロックの内容が登録されていた場合には、キャッシュラインのリプレースを行う必要がある。キャッシュラインのリプレース時の動作は以下の通りである。
【0134】
(1)キャッシュ制御回路104は、リプレースしたいキャッシュライン108のキャッシュディレクトリ109を読み出す。
【0135】
(2−1)読み出したキャッシュディレクトリ109が終端モード180であった場合:
対応するキャッシュライン108にキャッシングされているメモリブロック106を保有するクラスタに対して、自クラスタ番号の削除要求通信を送信する。具体的には、削除要求通信パケット424を送信する。このとき、削除要求通信パケット424の、削除対象クラスタ番号402eは当該キャッシュラインにキャッシングされているメモリブロック106を保有するクラスタのクラスタ番号、削除対象クラスタ内アドレス403eはそのメモリブロック106のクラスタ内アドレス、置き換えクラスタ番号409は無効とする。
【0136】
(2−2)読み出したキャッシュディレクトリ109がポインタモード160であった場合:
当該ディレクトリ109に登録されているクラスタ番号を一つ選択し、そのクラスタ番号を当該ディレクトリ109から削除し、そのクラスタ番号のクラスタに対してポインタ移動要求通信を行い、当該ディレクトリ109のクラスタ記憶フィールド150を転送する。すなわち、移動対象クラスタ番号402gは当該キャッシュライン108にキャッシングされているメモリブロック106を保有するクラスタのクラスタ番号、移動対象クラスタ内アドレス403gはそのメモリブロック106のクラスタ内アドレス、ポインタ407は移動したいクラスタ記憶フィールド150として、ポインタ移動要求通信パケット426を送信する。
【0137】
この後、対応するキャッシュライン108にキャッシングされているメモリブロック106を保有するクラスタに対して、自クラスタ番号の削除要求通信を送信する。すなわち、削除対象クラスタ番号402eは当該キャッシュライン108にキャッシングされているメモリブロック106を保有するクラスタのクラスタ番号、削除対象クラスタ内アドレス403eはそのメモリブロック106のクラスタ内アドレス、置き換えクラスタ番号409はポインタ移動要求通信パケット426の送信先のクラスタのクラスタ番号として、削除要求通信パケット424を送信し、自クラスタ番号の削除要求を出す。
【0138】
(2−3)読み出したキャッシュディレクトリ109がビットマップモード170であった場合は、当該ディレクトリ109に保持されているクラスタ番号を一つ選択し、そのクラスタに対応するビットを0とし、そのクラスタに対してビットマップ移動通信を行い、クラスタ記憶フィールド150を転送する。この後、置き換えクラスタ番号409をビットマップ移動通信の送信先クラスタ番号とし、対応するメモリブロック106を保有するクラスタに対して、自クラスタ番号の削除要求通信を送信する。
【0139】
(3)以上のようにして、自クラスタのクラスタ番号を木構造から削除した後は、当該キャッシュライン108に新たなメモリブロック106のデータをキャッシングすることができる。
【0140】
(動作例)
以下に本実施例のキャッシュディレクトリ方式の動作例を示す。本動作例では、クラスタ数は1024、クラスタ番号のポインタフィールド1およびポインタフィールド2は各2ビット、ビットマップフィールドは6ビットで表わされるものとする。なお、数字の後ろに付けた(2)は、その数字が2進数であることを示すものとする。また、クラスタ番号がnであるクラスタは、単にクラスタnと呼ぶものとする。
【0141】
(1)図6に、クラスタ0100000011(2)のメモリブロックMのディレクトリの初期状態を示す。初期状態ではメモリブロックMは終端モードである。
【0142】
(2)(1)の状態でクラスタ0100000001(2)がクラスタ0100000011(2)に対してメモリブロックMの読み出し要求通信を行うと、クラスタ0100000011(2)はクラスタ0100000001(2)に対してメモリブロックMの内容を読み出し返答通信で返す。このとき、クラスタ0100000001(2)のキャッシュディレクトリは終端モードとなり、クラスタ0100000011(2)の主記憶ディレクトリは読み出し要求通信(4−1)に従いポインタモードとなる。この状態を図7に示す。
【0143】
(3)(2)の状態でクラスタ0100000100(2)がクラスタ0100000011(2)に対してメモリブロックMの読み出し要求通信を行うと、クラスタ0100000011(2)はクラスタ0100000100(2)に対してメモリブロックMの内容を読み出し返答通信で返す。このとき、クラスタ0100000100(2)のキャッシュディレクトリは終端モードとなり、クラスタ0100000011(2)の主記憶ディレクトリは読み出し要求通信(4−3)に従いビットマップモードとなる。この状態を図8に示す。
【0144】
(4)(3)の状態で、クラスタ1001000001(2)がクラスタ0100000011(2)に対してメモリブロックMの読み出し要求通信を行うと、クラスタ0100000011(2)はクラスタ1001000001(2)に対してメモリブロックMの内容を読み出し返答通信で返す。このとき、クラスタ1001000001(2)のキャッシュディレクトリは終端モードとなり、クラスタ0100000011(2)の主記憶ディレクトリは読み出し要求通信(4−6)に従いポインタモードとなる。クラスタ0100000011(2)はビットマップ移動通信を行い、クラスタ0100000001(2)にビットマップを移動する。これに従い、クラスタ0100000001(2)はビットマップモードとなる。この状態を図9に示す。
【0145】
(5)(4)の状態で、クラスタ1011000010(2)がクラスタ0100000011(2)に対してメモリブロックMの読み出し通信を行うと、クラスタ0100000011(2)はクラスタ1011000010(2)に対してメモリブロックMの内容を読み出し返答通信で返す。このとき、クラスタ1011000010(2)のキャッシュディレクトリは終端モードとなる。クラスタ0100000011(2)は、読み出し要求通信(4−4)に従いクラスタ1001000001(2)に対して追加要求通信を行う。クラスタ1001000001(2)は、追加要求通信を受けて、ポインタモードとなる。この状態を図10に示す。
【0146】
(6)(5)の状態で、クラスタ1001000001(2)でメモリブロックMがキャッシュのリプレースにより無効となると、キャッシュリプレース時の動作(2−2)に従い、クラスタ1001000001(2)は、クラスタ1011000010(2)に対してポインタ移動要求通信を行う。また、クラスタ0100000011(2)に対して置き換えクラスタ番号を1011000010(2)とし、削除要求通信を行う。
【0147】
クラスタ1011000010(2)は、ポインタ移動要求通信を受けて、ポインタ移動要求通信(3−3)に従い終端モードの状態を維持する。クラスタ0100000011(2)は削除要求通信を受けて、削除要求通信(2−1)に従い、クラスタ1011000010(2)をポインタフィールドに登録する。この状態を図11に示す。
【0148】
(7)(6)の状態で、クラスタ0100000011(2)に対してメモリブロックMの書き込み要求通信が到着すると、クラスタ0100000011(2)はクラスタ0100000001(2)およびクラスタ1011000010(2)に対して無効化要求通信を送信する。クラスタ0100000001(2)は、無効化要求通信を受けて、クラスタ0100000100(2)に対して無効化要求通信を送信する。無効化要求通信を受けた全クラスタは、メモリブロックMをキャッシングしているキャッシュラインを無効化する。
【0149】
上記実施例によれば、主記憶ディレクトリ107およびキャッシュディレクトリ109にポインタモード160、ビットマップモード170および終端モード180を持たせ、以上に述べた通信を設けることにより、図2に示した木構造でメモリブロックをキャッシングした全クラスタを管理することができる。
【0150】
(実施例2)
本発明の実施例2を説明する。本実施例は実施例1の変形であるため、相違点についてのみ説明する。本実施例は、クラスタ100内の主記憶制御回路105およびキャッシュ制御回路104の動作を変更することにより、主記憶装置103への書き込み時に、書き込む対象のメモリブロック106をキャッシングしている全キャッシュライン108の無効化の完了を保証する点が異なる。
【0151】
本実施例では、実施例1の書き込み要求通信および無効化要求通信の動作を変更し、これらに対して書き込み返答通信および無効化返答通信を設ける。
【0152】
(書き込み要求通信の変更点)
本実施例の書き込み要求通信は、実施例1の(1)〜(3)の処理の後に以下を追加する。
(4)クラスタ記憶フィールド150に登録されている全てのクラスタからの無効化返答通信を受信するのを待つ。
(5)書き込み要求通信の発行元に対して書き込み返答通信を送信する。
【0153】
(無効化要求通信の変更点)
本実施例の無効化要求通信は、実施例1の(3)および(4)を以下の処理に変更する。
【0154】
(3)読み出したキャッシュディレクトリ109のモードにより、(3−1)または(3−2)のいずれかを行う。
(3−1)読み出したキャッシュディレクトリ109がポインタモード160またはビットマップモード170であった場合、キャッシュ制御回路104は、クラスタ記憶フィールド150に登録されている全てのクラスタに対して、ネットワークインターフェイス回路112を通じて無効化要求通信を送信する。
(3−2)読み出したキャッシュディレクトリ109が終端モード180であった場合、キャッシュ制御回路109は当該キャッシュライン108を無効化し、無効化返答通信を無効化要求通信発行元に送信する。(4)以下の処理は行わない。
【0155】
(4)クラスタ記憶フィールドに登録されている全てのクラスタからの無効化返答通信を受信するのを待つ。
(5)当該キャッシュラインを無効化し、無効化返答通信を無効化要求通信発行元に送信する。
【0156】
本実施例により、全クラスタのキャッシュラインを無効化した後、書き込みを反映することができる。
【0157】
(実施例3)
本発明の実施例3を説明する。本実施例は実施例1の変形であるため、相違点のみ説明する。本実施例は、クラスタ100内の主記憶制御回路105およびキャッシュ制御回路104の動作を変更することにより、書き込み更新型キャッシュ一致制御を実現する点が異なる。書き込み更新型とは、あるメモリブロックに対する書き込みが行われた場合に、当該メモリブロックをキャッシングしているすべてのキャッシュラインにその書き込みデータを反映させることを言う。
【0158】
本実施例では、実施例1の書き込み要求通信の動作を変更し、更新要求通信を設ける。
【0159】
(書き込み要求通信の変更点)
本実施例の書き込み要求通信は、実施例1の(3−1)および(3−2)を以下の処理に変更する。
【0160】
(3−1)アクセスしたメモリブロック106の主記憶ディレクトリ107がポインタモード160またはビットマップモードであった場合、クラスタ記憶フィールド150に登録されている全てのクラスタに対して更新要求通信を送信する。
(3−2)アクセスしたメモリブロック106の主記憶ディレクトリ107が終端モード180であった場合、当該メモリブロック106はどこにもキャッシングされていないため、キャッシュの一貫性制御はおこなわない。
【0161】
(更新要求通信)
クラスタ100に対する更新要求通信は、書き込みにより更新するデータとそのアドレスとからなる更新要求通信パケットを送信することにより行われる。更新要求通信パケットを受信したときの処理は以下の通りである。
【0162】
(1)ネットワークインターフェイス回路112は、更新要求通信パケットのアドレスを用いてキャッシュ制御回路104に対してキャッシュ書き込み要求を行う。
(2)キャッシュ制御回路104は、キャッシュ書き込み要求のアドレスを用いて、キャッシュメモリ102の、当該アドレスに対応するキャッシュライン102に書き込みを行うとともに、キャッシュディレクトリ109およびモードフィールド110を読み出す。
【0163】
(3−1)アクセスしたキャッシュディレクトリ104がポインタモード160またはビットマップモード170であった場合、クラスタ記憶フィールド150に登録されている全てのクラスタに対して更新要求通信を送信する。
(3−2)アクセスしたキャッシュディレクトリ109が終端モード180であった場合、メモリブロック106は以下の階層にはキャッシングされていないため、キャッシュの一貫性制御はおこなわない。
【0164】
本実施例により、本発明のディレクトリ方式で、書き込み更新型キャッシュ一致制御を実現することができる。
【0165】
なお、本実施例においても、上記実施例2と同様にして、書き込み要求に対して当該メモリブロックをキャッシングしている全クラスタのキャッシュの更新の完了を保証することができる。具体的には、更新要求通信を発行したクラスタは更新返答通信を受けるまで待ち、更新要求の相手先である全てのクラスタから更新返答通信を受けたら、自クラスタに対して更新要求を発行したクラスタに更新返答通信を発行するようにする。そして、書き込み対象のクラスタでは、書き込み対象のメモリブロックに対応する主記憶ディレクトリにより指し示される全てのクラスタから更新返答通信を受けたら、書き込みを発行したクラスタに対して更新返答通信を送信し、書き込みを発行したクラスタは、更新返答通信を受けるまで待つことにより、全クラスタに対する書き込みの完了を保証する。
【0166】
(実施例4)
本発明の実施例4を説明する。図12は、本実施例に係る並列計算機の構成を示す。本実施例は実施例1の変形であるため、相違点のみ説明する。なお、図12において、図1と共通の装置・回路には同一の番号に−1を付けて表すものとし、実施例1の説明を流用する部分は番号に−1を付けたものに読み替えるものとする。
【0167】
上記実施例1では、クラスタ100内のキャッシュメモリ102および主記憶装置103のブロック毎にキャッシュディレクトリ109および主記憶ディレクトリ107、モードフィールド110を設けた。これに対し、実施例4では、キャッシュディレクトリ109−1および主記憶ディレクトリ107−1を別に設けることにより、これらのメモリ量を減らす点が異なる。
【0168】
図12において、キャッシュディレクトリ109−1は、キャッシュライン108−1の中で、終端モード以外のキャッシュラインのキャッシュライン番号、キャッシュディレクトリ109−1、およびモードフィールド110−1を保持する。主記憶ディレクトリ107−1は、メモリブロック106−1の中で、終端モード以外のメモリブロックのメモリブロック番号、主記憶ディレクトリ107−1、およびモードフィールド110−1を保持する。
【0169】
本実施例では、実施例1の読み出し要求通信、書き込み要求通信、追加要求通信、削除要求通信、ビットマップ移動要求通信、およびポインタ移動要求通信に以下の変更および追加を行う。
【0170】
(読み出し要求通信の変更点)
(2)主記憶制御回路105−1は、送信先クラスタ内アドレス403aを用いて、主記憶装置103−1から当該アドレスに対応するメモリブロック106−1を読み出す。さらに、当該メモリブロック106−1に対応する主記憶ディレクトリ107−1およびモードフィールド110−1があれば、それらを読み出す。
【0171】
(4−1)アクセスしたメモリブロック106−1に対応する主記憶ディレクトリ107−1およびモードフィールド110−1がないときは、当該メモリブロック106−1が終端モードであるということである。この場合、主記憶制御回路105−1は、主記憶ディレクトリ107−1の空きエントリを当該メモリブロック106−1に割り当てる。主記憶ディレクトリ107−1に空きのエントリが存在しない場合、主記憶制御回路105−1は、主記憶ディレクトリ107−1の中から1エントリを選択し、リプレースする。この後、このエントリを、読み出し要求通信で読み出した主記憶メモリブロック106−1に対応する主記憶ディレクトリ107−1として使用する。以後の処理は、実施例1の(4−1)と同じである。
【0172】
(書き込み要求通信の変更点)
(3−1)実施例1の(3−1)と同じ処理を行う。ただし、「当該主記憶ディレクトリ107を終端モード180に変更する」代わりに、主記憶制御回路105−1は、書き込み要求通信を受けた主記憶のメモリブロック106−1に対応する主記憶ディレクトリ107−1のエントリを空きエントリに変更する。
【0173】
(追加要求通信の変更点)
(1)実施例1の(1)と同様にしてキャッシュディレクトリ109−1を読み出す。ただし、本実施例4では、キャッシュディレクトリがない場合もある。
【0174】
(2−1)キャッシュディレクトリがないときは、当該キャッシュライン108−1が終端モードであるということである。この場合、キャッシュ制御回路104−1は、キャッシュディレクトリ109−1の空きエントリを当該キャッシュライン108−1に割り当てる。キャッシュディレクトリ109−1に空きのエントリが存在しない場合、キャッシュ制御回路104−1は、キャッシュディレクトリ109−1の中から1エントリを選択し、リプレースする。この後、このエントリを、追加要求通信に対応する当該キャッシュライン108−1のキャッシュディレクトリ109−1として使用する。以後の処理は、実施例1の(2−1)と同じである。
【0175】
(削除要求通信の変更点)
(2−1)実施例1の(2−1)と同じ処理を行う。ただし、クラスタ記憶フィールド150に登録されているクラスタ番号の数が0となったときは、当該ディレクトリのモードを終端モードに変更する代わりに、当該ディレクトリを空きエントリに変更する。
【0176】
(2−3)実施例1の(2−3)と同じ処理を行う。ただし、クラスタ記憶フィールド150に保持するビットマップが全て0となったときは、当該ディレクトリのモードを終端モードに変更する代わりに、当該ディレクトリを空きエントリに変更する。
【0177】
(ビットマップ移動要求通信の変更点)
(2)実施例1の(2)と同様の処理であるが、ビットマップ移動要求通信パケット425の移動対象クラスタ番号402fおよび移動対象クラスタ内アドレス403fで示されるメモリブロック106−1がキャッシングされているキャッシュライン108−1は終端モードであるので、当該キャッシュライン108−1に対応するキャッシュディレクトリ109−1はないことになる。そこで、ビットマップ移動要求通信を受信したキャッシュ制御回路104−1は、キャッシュディレクトリ109−1の空きエントリを当該キャッシュライン108−1に割り当てる。キャッシュディレクトリ109−1に空きのエントリが存在しない場合、キャッシュ制御回路104−1は、キャッシュディレクトリ109−1の中から1エントリを選択し、リプレースする。この後、このエントリを、ビットマップ移動要求通信に対応するキャッシュライン108−1のキャッシュディレクトリ109−1として使用する。
【0178】
(3)実施例1の(3)と同様の処理であるが、ビットマップの全ビットが0である場合は、終端モードに変更する代わりに、当該キャッシュディレクトリ109−1を空きエントリに変更する。
【0179】
(ポインタ移動要求通信の変更点)
(2)実施例1の(2)と同様の処理であるが、当該キャッシュライン108−1に対応するキャッシュディレクトリ109−1がない場合があり、それが終端モードの場合である。終端モードの場合は(3−3)へ進む。
【0180】
(3−3)ポインタ移動要求通信を受信したキャッシュ制御回路104−1は、キャッシュディレクトリ109−1の空きエントリを当該キャッシュライン108−1に割り当てる。キャッシュディレクトリ109−1に空きのエントリが存在しない場合、キャッシュ制御回路104−1は、キャッシュディレクトリ109−1の中から1エントリを選択し、リプレースする。この後、このエントリを、ポインタ移動要求通信に対応するキャッシュライン108−1のキャッシュディレクトリ109−1として使用する。
【0181】
本実施例により、キャッシュラインより少ない数のキャッシュディレクトリおよび主記憶ブロックより少ない数の主記憶ディレクトリを使って、実施例1と同様のプロセッサ間データ一貫性保証装置を実現することができる。
【0182】
(実施例5)
本発明の実施例5を説明する。図13は、本実施例に係る並列計算機の構成を示す。本実施例は実施例4の変形であるため、相違点のみ説明する。なお、図13において、図12と共通の装置・回路は番号の−1を−2に変えて表すものとし、実施例4の説明における番号は読み替えるものとする。
【0183】
本実施例は、クラスタ100−2内のキャッシュディレクトリ109−2および主記憶ディレクトリ107−2を、キャッシュメモリ102−2および主記憶装置103−2上に設ける点が異なる。
【0184】
本実施例により、キャッシュメモリおよび主記憶装置の他にディレクトリ格納用のメモリを用意することなく、実施例1と同様のプロセッサ間データ一貫性保証装置を実現することができる。
【0185】
(実施例6)
次に、本発明の第6の実施例について説明する。本実施例は実施例1の変形であるため、相違点のみ説明する。本実施例は、クラスタ内のプロセッサがキャッシュ一貫性制御の処理の一部を分担する点が異なる。すなわち本実施例は、主記憶ディレクトリ107またはキャッシュディレクトリ109の動作モードがポインタモードからビットマップモードに変わる場合の変更処理を、クラスタ100内の特定のプロセッサ101で実行する点を特徴とする。ただし、本発明は、主記憶制御回路およびキャッシュ制御回路とプロセッサとの処理の分担の仕方にかかわらず用いることができる。
【0186】
本実施例では、実施例1の読み出し要求通信、および追加要求通信を以下の様に変更する。
【0187】
(読み出し要求通信の変更点)
(4−3)ネットワークインターフェイス回路112は、主記憶制御回路105からプロセッサ処理の要求通知を受け、ディレクトリ制御を行うプロセッサ101に割り込みをかける。プロセッサ101は、アクセス対象のメモリブロック106の主記憶ディレクトリ107を読み出し、主記憶ディレクトリ107のモードフィールド110をビットマップモード170に変更し、ポインタモード160でクラスタ記憶フィールド150のエントリに登録されていたクラスタ番号に対応するビットを1とする。
【0188】
(追加要求通信の変更点)
(2−3)ネットワークインターフェイス回路112は、キャッシュ制御回路104からプロセッサ処理の要求通知を受け、ディレクトリ制御を行うプロセッサ101に割り込みをかける。プロセッサ101は、アクセス対象のキャッシュライン108のキャッシュディレクトリ109を読み出し、キャッシュディレクトリ109のモードフィールド110をビットマップモード170に変更し、ポインタモード160でクラスタ記憶フィールド150に登録されていた全てのクラスタ番号に対応するビットを1とした後、追加対象のクラスタ番号に対応するビットを1とする。
【0189】
本実施例により、ポインタモードからディレクトリモードへの移行時に必要な変更処理をプロセッサ101上のソフトウェアで行うことができ、キャッシュ制御装置および主記憶制御装置のハードウェア量を削減し、実施例1と同様のプロセッサ間データ一貫性保証装置を実現することができる。
【0190】
【発明の効果】
本発明によれば、下位の階層の全クラスタのキャッシング状態を管理する特別なディレクトリ管理専用の制御回路を設けたり、特定のクラスタにディレクトリ管理を行わせることなく、ツリーディレクトリ方式と比較して階層の高さが低いキャッシュディレクトリ方式を実現できる。すなわち、多数のプロセッサからなる並列計算機において、ツリーディレクトリ方式や階層型フルマップディレクトリ方式と同程度の大きさのディレクトリしか使用せず、ツリーディレクトリ方式より階層が低く、階層型フルマップディレクトリ方式のように特定のディレクトリ管理ノードへのアクセスが集中しないディレクトリ管理方式を用いたプロセッサ間データ一貫性保証装置が提供される。
【図面の簡単な説明】
【図1】本発明の実施例に係る並列計算機の構成図。
【図2】木構造のディレクトリによるキャッシュラインの管理の仕方を示す図
【図3】本実施例におけるディレクトリの構成図。
【図4】本実施例におけるクラスタ番号の構成図。
【図5】本実施例におけるパケットの構成図。
【図6】本発明の実施例1の動作例(1)に係るディレクトリの連結を示す図。
【図7】本発明の実施例1の動作例(2)に係るディレクトリの連結を示す図。
【図8】本発明の実施例1の動作例(3)に係るディレクトリの連結を示す図。
【図9】本発明の実施例1の動作例(4)に係るディレクトリの連結を示す図。
【図10】本発明の実施例1の動作例(5)に係るディレクトリの連結を示す図。
【図11】本発明の実施例1の動作例(6)に係るディレクトリの連結を示す図。
【図12】本発明の実施例4に係る並列計算機の構成図。
【図13】本発明の実施例5に係る並列計算機の構成図。
【図14】従来のフルマップディレクトリ方式の動作を示す図。
【符号の説明】
10a〜10d…プロセッサ、12a〜12d…キャッシュ、20…ネットワーク、30…主記憶装置、31…メモリブロック、32…ディレクトリ、100,100−1〜2…クラスタ、101,101−1〜2…プロセッサ、102,102−1〜2…キャッシュメモリ、103,103−1〜2…主記憶装置、104,104−1〜2…キャッシュ制御回路、105,105−1〜2…主記憶制御回路、106,106−1〜2…メモリブロック、107,107−1〜2…主記憶ディレクトリ、108,108−1〜2…キャッシュライン、109,109−1〜2…キャッシュディレクトリ、110,110−1〜2…モードフィールド、111,111−1〜2…バス、112,112−1〜2…ネットワークインターフェイス回路、200,200−1〜2…ネットワーク、110a〜110c…モードフィールド、150…クラスタ記憶フィールド、161−0〜161−3…クラスタ番号、162−0〜162−3…クラスタ番号存在フラグ、160…ポインタモードのディレクトリ、170…ビットマップモードのディレクトリ、180…終端モードのディレクトリ、171…ビットマップ、301…主記憶ディレクトリ、321,322,331〜334,341〜345…キャッシュディレクトリ、350…ポインタフィールド、351…ビットマップフィールド、400a〜400h…パケット送信先クラスタ番号、401a〜401h…パケット送信元クラスタ番号、402c〜402h…対象クラスタ番号、403a〜403h…クラスタ内アドレス、404…書き込みデータ、405…追加クラスタ番号、406…ビットマップ、407…ポインタ、408…返答データ、409…置き換えクラスタ番号、420…読み出し要求通信パケット、421…書き込み要求通信パケット、422…無効化要求通信パケット、423…追加要求通信パケット、424…削除要求通信パケット、425…ビットマップ移動要求通信パケット、426…ポインタ移動要求通信パケット、427…読み出し返答通信パケット。
Claims (11)
- 1台以上のプロセッサと主記憶装置とキャッシュメモリとを備えたクラスタを複数具備するとともに、該複数のクラスタを接続するネットワークを具備し、各クラスタ内のプロセッサは自クラスタ内または他クラスタ内の主記憶装置上のデータをブロック単位で自クラスタ内のキャッシュメモリにキャッシング可能な並列計算機のプロセッサ間データ一貫性保証装置であって、
前記クラスタ内の主記憶装置は、ブロック毎に当該主記憶ブロックをキャッシングしているクラスタを複数記録するための主記憶ディレクトリを備え、
前記クラスタ内のキャッシュメモリは、キャッシュライン毎に当該キャッシュラインでキャッシングしているのと同一の主記憶ブロックをキャッシングしているクラスタを複数記録するためのキャッシュディレクトリを備え、
前記主記憶ディレクトリおよび前記キャッシュディレクトリは、当該主記憶ブロックをキャッシングしているクラスタを記録する態様として2種類以上の態様の中から1つの態様を主記憶ブロックまたはキャッシュライン毎に選択可能であり、選択された態様で当該主記憶ブロックをキャッシングしているクラスタを記録するとともに、該態様を示すモードフィールドを備え、
前記クラスタは、自クラスタおよび他クラスタからの主記憶装置のアクセス時に、自クラスタ内の主記憶ディレクトリおよび主記憶ディレクトリのモードフィールドを制御し、主記憶ディレクトリに記録されている複数のクラスタに対し、前記ネットワークを介してキャッシュ制御用の通信を発行するための主記憶制御回路を備え、
前記クラスタは、自クラスタおよび他クラスタからのキャッシュ制御用の通信受信時に、自クラスタ内のキャッシュディレクトリおよびキャッシュディレクトリのモードフィールドを制御し、キャッシュディレクトリに記録されている複数のクラスタに対し、前記ネットワークを介してキャッシュ制御用の通信を発行するためのキャッシュ制御回路を備えたことを特徴とする並列計算機のプロセッサ間データ一貫性保証装置。 - 前記主記憶ディレクトリは、対応する主記憶ブロックをキャッシングしたクラスタを複数記録し、
前記主記憶ディレクトリに記録された各クラスタ内の、当該キャッシュラインに対応するキャッシュディレクトリは、同一主記憶ブロックをキャッシングした他のクラスタを複数記録し、
前記キャッシュディレクトリに記録された各クラスタ内の、当該キャッシュラインに対応するキャッシュディレクトリは、同一主記憶ブロックをキャッシングした他のクラスタを複数記録していくことにより、
主記憶ディレクトリを根ノードとしキャッシュディレクトリを中間ノードまたは葉ノードとする木構造のディレクトリの連鎖を作成し、同一主記憶ブロックをキャッシングした全てのクラスタを該木構造で表すことにより、主記憶ブロックのキャッシング状態を管理する請求項1に記載の並列計算機のプロセッサ間データ一貫性保証装置。 - 前記キャッシングしているクラスタを記録する態様の一つとしてポインタモードを設け、
前記主記憶ディレクトリまたは前記キャッシュディレクトリがポインタモードであるときは、該ディレクトリに、複数のクラスタ番号部と、各クラスタ番号部に対応してそのクラスタ番号部の有効または無効を表わすためのクラスタ番号存在フラグを設けるとともに、該ディレクトリのモードフィールドはポインタモードに設定し、該クラスタ番号存在フラグが有効であるクラスタ番号部により前記キャッシングしているクラスタを指し示すようにする請求項1または2に記載の並列計算機のプロセッサ間データ一貫性保証装置。 - あらかじめ並列計算機の全クラスタを1つ以上のクラスタからなるクラスタグループに分割し、
前記キャッシングしているクラスタを記録する態様の一つとしてビットマップモードを設け、
前記主記憶ディレクトリまたは前記キャッシュディレクトリがビットマップモードであるときは、該ディレクトリに、各ビットがそれぞれ同一クラスタグループ内の各クラスタの有効または無効を示すようなビットマップを設け、該ビットマップ中の有効を示すビットにより前記キャッシングしているクラスタを指し示すようにする請求項1または2に記載の並列計算機のプロセッサ間データ一貫性保証装置。 - 自クラスタまたは他クラスタ上の主記憶装置への書き込みの際に、
書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックの主記憶ディレクトリにより指し示される全てのクラスタに対して無効化要求を発行し、
無効化要求を受けたクラスタのキャッシュ制御回路は、当該主記憶ブロックに対応するキャッシュラインを無効化するとともに、対応するキャッシュディレクトリにより指し示される全てのクラスタに対して無効化要求を発行していくことにより、同一主記憶ブロックをキャッシングした全てのクラスタ内の対応するキャッシュラインを無効化する請求項1または請求項2に記載の並列計算機のプロセッサ間データ一貫性保証装置。 - 自クラスタまたは他クラスタ上の主記憶装置への書き込みの際に、
書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックの主記憶ディレクトリにより指し示される全てのクラスタに対して当該主記憶ブロックに書き込んだ書き込みデータを送信し、
該書き込みデータを受けたクラスタのキャッシュ制御回路は、当該主記憶ブロックに対応するキャッシュラインに該書き込みデータをコピーするとともに、対応するキャッシュディレクトリにより指し示される全てのクラスタに対して該書き込みデータを送信していくことにより、同一主記憶ブロックをキャッシングした全てのクラスタ内の対応するキャッシュラインを更新する請求項1または請求項2に記載の並列計算機のプロセッサ間データ一貫性保証装置。 - 自クラスタまたは他クラスタ上の主記憶装置への書き込みの際に、
書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックの主記憶ディレクトリにより指し示される全てのクラスタに対して無効化要求を発行し、
無効化要求を受けたクラスタのキャッシュ制御回路は、当該主記憶ブロックに対応するキャッシュラインを無効化するとともに、対応するキャッシュディレクトリにより指し示される全てのクラスタに対して無効化要求を発行し、該無効化要求発行の相手先である全てのクラスタから無効化完了通信を受けたら、自クラスタに対して無効化要求を発行したクラスタに無効化完了通信を発行し、
書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックに対応する主記憶ディレクトリにより指し示される全てのクラスタから無効化完了通信を受けたら、書き込みを発行したクラスタに対して無効化完了通信を送信し、
書き込みを発行したクラスタは、無効化完了通信を受けるまで待つことにより、全クラスタに対する書き込みの完了を保証することができる請求項5に記載の並列計算機のプロセッサ間データ一貫性保証装置。 - 自クラスタまたは他クラスタ上の主記憶装置への書き込みの際に、
書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックに対応する主記憶ディレクトリにより指し示される全てのクラスタに対して当該主記憶ブロックに書き込んだ書き込みデータを送信し、
該書き込みデータを受けたクラスタのキャッシュ制御回路は、当該主記憶ブロックに対応するキャッシュラインに該書き込みデータをコピーするとともに、対応するキャッシュディレクトリにより指し示される全てのクラスタに対して該書き込みデータを含む更新要求を送信し、該更新要求の相手先である全てのクラスタから更新返答通信を受けたら、自クラスタに対して更新要求を発行したクラスタに更新返答通信を発行し、
書き込み対象のクラスタの主記憶制御回路は、書き込み対象の主記憶ブロックに対応する主記憶ディレクトリにより指し示される全てのクラスタから更新返答通信を受けたら、書き込みを発行したクラスタに対して更新返答通信を送信し、書き込みを発行したクラスタは、更新返答通信を受けるまで待つことにより、全クラスタに対する書き込みの完了を保証することができる請求項6記載の並列計算機のプロセッサ間データ一貫性保証装置。 - 前記主記憶ブロックまたは前記キャッシュラインに対し、ブロック毎にディレクトリを持つ代わりに、ディレクトリ用メモリ領域を用意し、当該ブロックから指し示すべきクラスタがある場合にのみ該ディレクトリ用メモリ領域に当該ブロックのディレクトリを登録する請求項1から8の何れか1つに記載の並列計算機のプロセッサ間データ一貫性保証装置。
- 自クラスタまたは他クラスタからの主記憶装置のアクセス時に、クラスタ内のいずれかのプロセッサが、前記主記憶制御回路に代わって、主記憶ディレクトリおよび主記憶ディレクトリのモードフィールドを制御し、主記憶ディレクトリに記録されている複数のクラスタに対し、前記ネットワークを介してキャッシュ制御用の通信を発行する処理の一部乃至全部を行う請求項1から9の何れか1つに記載の並列計算機のプロセッサ間データ一貫性保証装置。
- 自クラスタまたは他クラスタからのキャッシュ制御用の通信受信時に、クラスタ内のいずれかのプロセッサが、前記キャッシュ制御回路に代わって、キャッシュディレクトリおよびキャッシュディレクトリのモードフィールドを制御し、キャッシュディレクトリに記録されている複数のクラスタに対し、前記ネットワークを介してキャッシュ制御用の通信を発行する処理の一部乃至全部を行う請求項1から10の何れか1つに記載の並列計算機のプロセッサ間データ一貫性保証装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP19435895A JP3754112B2 (ja) | 1995-07-06 | 1995-07-06 | プロセッサ間データ一貫性保証装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP19435895A JP3754112B2 (ja) | 1995-07-06 | 1995-07-06 | プロセッサ間データ一貫性保証装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0922381A JPH0922381A (ja) | 1997-01-21 |
JP3754112B2 true JP3754112B2 (ja) | 2006-03-08 |
Family
ID=16323256
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP19435895A Expired - Fee Related JP3754112B2 (ja) | 1995-07-06 | 1995-07-06 | プロセッサ間データ一貫性保証装置 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3754112B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3849951B2 (ja) * | 1997-02-27 | 2006-11-22 | 株式会社日立製作所 | 主記憶共有型マルチプロセッサ |
CN101933784B (zh) * | 2009-06-30 | 2015-03-25 | 杨刚 | 水过滤式手提吸尘器 |
WO2012008008A1 (ja) * | 2010-07-12 | 2012-01-19 | 富士通株式会社 | 情報処理システム |
-
1995
- 1995-07-06 JP JP19435895A patent/JP3754112B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH0922381A (ja) | 1997-01-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7814279B2 (en) | Low-cost cache coherency for accelerators | |
US7457924B2 (en) | Hierarchical directories for cache coherency in a multiprocessor system | |
US6115804A (en) | Non-uniform memory access (NUMA) data processing system that permits multiple caches to concurrently hold data in a recent state from which data can be sourced by shared intervention | |
US20030005236A1 (en) | Imprecise snooping based invalidation mechanism | |
US5684976A (en) | Method and system for reduced address tags storage within a directory having a tree-like data structure | |
CN110321301A (zh) | 一种数据处理的方法及装置 | |
JP2021515287A (ja) | 上位レベルキャッシュへの要求によるキャッシュへのインフラックスのログ記録 | |
JP3661764B2 (ja) | 不均等メモリ・アクセス・コンピュータ・システムにおいてエヴィクション・プロトコルを提供するための方法およびシステム | |
JP2001297035A (ja) | 情報処理装置 | |
US6625694B2 (en) | System and method for allocating a directory entry for use in multiprocessor-node data processing systems | |
JP2000010860A (ja) | キャッシュメモリ制御回路及びプロセッサ及びプロセッサシステム及び並列プロセッサシステム | |
US8621152B1 (en) | Transparent level 2 cache that uses independent tag and valid random access memory arrays for cache access | |
US6560681B1 (en) | Split sparse directory for a distributed shared memory multiprocessor system | |
TW200805061A (en) | Patrol snooping for higher level cache eviction candidate identification | |
CN109582214A (zh) | 数据访问方法以及计算机系统 | |
US6922755B1 (en) | Directory tree multinode computer system | |
CN110018971A (zh) | 缓存替换技术 | |
CN114844846A (zh) | 一种基于可编程交换机的多级缓存分布式键值存储系统 | |
US6298419B1 (en) | Protocol for software distributed shared memory with memory scaling | |
JP3754112B2 (ja) | プロセッサ間データ一貫性保証装置 | |
CN116303138B (zh) | 一种缓存架构及缓存方法、电子设备 | |
EP0173893B1 (en) | Computing system and method providing working set prefetch for level two caches | |
US20210132801A1 (en) | Optimized access to high-speed storage device | |
JP3769411B2 (ja) | マルチプロセッサシステム | |
JPH0415494B2 (ja) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20051206 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20051213 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20051215 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |