(57)【特許請求の範囲】
【請求項１】
プロセッサと、共有メモリの一部と、メモリコントローラと、キャッシュとを有するノードを複数有し、
各ノードは、各ノードに対応する相互結合網ルータにより結合された分散共有メモリ型並列計算機であって、
共有メモリは、ブロック毎に、メモリのデータのコピーを保持するキャッシュの属するノードＩＤを示すノード情報と、保持状態を示す状態情報とからなるディレクトリを有し、
メモリコントローラは、相互結合網ルータから転送されるメモリアクセス要求に従って、共有メモリのディレクトリの参照／更新と、キャッシュへの無効化通知とを行う一貫性管理手段を有し、
キャッシュは、共有メモリのブロック毎のデータのコピーとアドレスと保持状態を示す状態情報とを有し、
相互結合網ルータは、共有メモリのブロックのデータのコピーを保持するキャッシュの属するノードＩＤを示すノード情報と、保持状態を示す状態情報と、メモリブロックのアドレスとを保持するディレクトリ記憶部と、
プロセッサからのメモリアクセス要求に対応してディレクトリ記憶部を参照し、メモリブロックのアドレスが保持されている場合は、当該アドレスに付随するノードに、保持されていない場合は共有メモリの属するノードにメモリアクセス要求を転送するメモリアクセス要求転送手段と、
自ノードの共有メモリに対する無効化／更新要求に対応してディレクトリ記憶部を参照し、最初に無効化／更新要求を受け取った要求元ノードに対し更新許諾の応答を返し、自ノードには無効化要求と無効化要求元ノードＩＤを送り、ノード情報に保持された他のノードには無効化要求を送る相互結合網ルータ間同期手段と、
よりなる一貫性処理部を有する
ことを特徴とする、分散共有メモリ型並列計算機。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プロセッサと、共有メモリの一部と、キャッシュとを有するノードを複数有し、
各ノードは、各ノードに対応する相互結合網ルータにより結合される、分散共有メモリ型並列計算機に関する。
【０００２】
【従来の技術】
図９は、分散共有メモリ型並列計算機の全体構成例を示し、図10及び図11は、各々その構成要素である、相互結合網ルータの構成例、及びノードの内部構成例を示す。
【０００３】
相互結合網ルータは、自ノードおよび他の相互結合網ルータと、共有メモリのデータ及びメモリアクセス要求のやり取りをするためのインタフェースである、パケットバッファと、クロスバと、メモリアクセス要求に記載されたノードIDに従って次に送るべき相互結合網ルータを決定するルーティングコントローラとを有する。
【０００４】
ノードは、プロセッサと、共有メモリの一部と、メモリコントローラと、キャッシュとを有し、
キャッシュは、共有メモリのブロック毎のデータのコピーと、アドレスとを有する。
【０００５】
図12は、図11の二つのノードのプロセッサが、互いにメモリを共有する分散共有メモリ型並列計算機におけるデータの一貫性管理の必要性を説明する。この例では、メモリアクセス要求を送るべきノードは他方のノードであり、一意に決まるため、相互結合網ルータは省略されている。
【０００６】
プロセッサＢが、プロセッサＡのノードの共有メモリのブロックのデータをキャッシュにコピーしている状況において、共有メモリを有するノードのプロセッサＡ、すなわちホームノードのプロセッサが当該データを更新しようとした場合、プロセッサＢのノードのキャッシュにある、当該ブロックのデータを同時に無更新しなければ、プロセッサＢが間違ったデータを読み出してしまうということが起こる。
【０００７】
これを避ける手段として、図12の分散共有メモリ型並列計算機にディレクトリ方式を適用した例を図13に示す。
この例では、共有メモリのブロック毎に、
ブロックのデータのコピーを保持するキャッシュの属するノードIDを示すノード情報と、
ＭＳＩプロトコル( Ｍ: Modified、Ｓ: Shared、Ｉ: Invalid ) の３状態を示す状態情報と、
を有するディレクトリを設け、
メモリコントローラに一貫性管理機能を持たせ、メモリコントローラとする。
【０００８】
状態情報がＭ状態であれば、あるノードがオーナーノードとしてキャッシュの当該ブロックのデータを更新した状態、すなわち、共有メモリのデータと、オーナーノードのキャッシュのデータとが一致していないことを表し、
Ｓ状態であれば、１つ以上のノードが共有ノードとして当該ブロックのデータを保持し、各々のキャッシュのデータと、共有メモリのデータが一致していることを表し、
Ｉ状態であれば、他に、共有メモリの当該ブロックのデータを保持するノードはないことを表す。
【０００９】
ノードとして、オーナーノードは１個であり、ノードIDとしてコードで表現されるが、共有ノードは最大、全ノードがあり得るため、共有ノードはビットマップで表しても良い。
【００１０】
また、共有メモリのあるブロックのデータが、更新された状態と共有された状態は、同時には発生しないため、オーナーノードの情報は、共有ノードの情報と同じフィールドに登録されても良い。以下オーナーノードの情報と、共有ノードの情報はノード情報として説明する。
【００１１】
メモリコントローラは、以下の機能により共有メモリ及び各キャッシュのデータの一貫性を保つ。
【００１２】
１．メモリコントローラが受け取ったメモリアクセス要求が自ノードの共有メモリに対する読み出し要求の場合、当該ブロックのディレクトリに保持された状態情報とノード情報を参照し、
状態情報がＳ状態の場合は、データを読み出し、要求元ノードにデータを送ると共に、ノード情報に、要求元ノードIDを追加し、
状態情報がＭ状態の場合は、読み出し要求をオーナーノードに転送し、状態情報をＳ状態とし、ノード情報として、元のオーナーノードIDと、要求元ノードIDを登録する。
【００１３】
２．メモリコントローラが受け取ったメモリアクセス要求が、自ノードの共有メモリに対する無効化／更新要求の場合、当該ブロックのディレクトリに保持された状態情報とノード情報を参照し、
共有ノードがある場合には、共有ノードに無効化要求を送り、状態情報をＭ状態とし、ノード情報として要求元ノードIDを登録する。
共有ノードがない場合には、状態情報をＭ状態とし、ノード情報として要求元ノードIDを登録する。
【００１４】
３．メモリコントローラが受け取ったメモリアクセス要求が、他ノードの共有メモリに対するメモリアクセス要求である場合、その共有メモリを有するノードにメモリアクセス要求を転送する。
【００１５】
このように、ディレクトリ方式を用いる分散共有メモリ型並列計算機では、各ノードは、メモリコントローラの機能により、共有メモリと各キャッシュのデータの一貫性を保つ。
【００１６】
図14は、図13の、ディレクトリ方式によるデータの一貫性管理の動作について説明する。
図14(1) において、プロセッサＡで、ノードＡの共有メモリのアドレスadr に対するデータの読み出し要求が発生すると、メモリコントローラはアドレスadr のディレクトリを参照する。この場合、ディレクトリの状態情報は無効状態(Invalid：Ｉ) であるため、データを読み出し、プロセッサＡに送る。
【００１７】
これで、共有メモリのアドレスadr のデータをノードＡのキャッシュがコピーした状態となり、図14(2) に示す如く、ディレクトリの状態情報に共有(Shared:Ｓ）状態が書き込まれ、ノード情報としてＡが登録される。このＳ状態は、データと同時にプロセッサＡのキャッシュに送られ、キャッシュの状態情報としても使われる。
【００１８】
次に図14(3) において、プロセッサＢで同じアドレスadr のデータの読み出し要求が発生すると、メモリコントローラはアドレスadr のディレクトリを参照する。このとき、ディレクトリの状態情報はＳ状態であり、図14(4) に示す如く、メモリのデータと状態情報、Ｓ状態がノードＢのキャッシュに送られ、ノード情報としてＢが追加される( この時、ディレクトリの状態情報はＳ状態のまま変わらない) 。
【００１９】
次に図14(5) において、プロセッサＡでアドレスadr に対して更新要求が発生すると、メモリコントローラは、キャッシュのアドレスadr の状態情報がＳ状態であることを確認し、共有メモリのアドレスadr のディレクトリを参照し、ディレクトリの状態情報がＳ状態で、ノード情報としてＡ以外にＢが保持されていることを確認し、ノードＢに無効化要求を送る。
【００２０】
しかる後に、図14(6) に示す如く、ディレクトリの状態情報を更新(Modified:Ｍ) 状態に変更し、ノード情報としてＡを登録する。これらの処理が完了すると、プロセッサＡは自分のキャッシュを書き換え、プロセッサＢは、キャッシュのアドレスadr のデータを消去する。
【００２１】
以下、図９の従来のディレクトリ方式の分散共有メモリ型並列計算機における具体的な各動作モードの全体の流れを説明する。
【００２２】
図15は従来のＭ状態のデータに対する読み出し動作例を示し、図中の数字は、以下の各説明項目における動作に対応する。
初期状態では、ディレクトリの状態情報はすべて無効状態（Ｉ状態）になっている。
【００２３】
１．ノードＡからの、自ノードの共有メモリのアドレスadr に対するデータ読み出し要求により、メモリコントローラは、アドレスadr のディレクトリを参照しディレクトリの状態情報がＩ状態であることを確認し、データを読み出し、ディレクトリの状態情報をＳ状態に変更しノード情報としてＡを登録し、ノードＡのキャッシュにデータと、状態情報Ｓ状態を送る。
ノードＡのキャッシュでは、アドレスadr のデータをＳ状態として登録する。
【００２４】
２．次にノードＢから、アドレスadr に対して無効化／更新要求が発生した場合、この無効化／更新要求はノードＢの相互結合網ルータを経由し、ホームノードであるノードＡの相互結合網ルータを経由し、ノードＡに送られる。
ノードＡでは共有メモリのディレクトリを参照し、ディレクトリの状態情報がＳ状態、ノード情報がＡであることを確認し、ディレクトリの状態情報をＭ状態に変更し、ノード情報としてＢを登録し、キャッシュのアドレスadr のデータを消去する。その後にノードＢへ更新許諾を返す。
ノードＢでは、キャッシュのアドレスadr をＭ状態とし、更新したデータを登録する。
【００２５】
３．さらにノードＣからアドレスadr に対する読み出し要求が発生した場合、読み出し要求はホームノードである、ノードＡの相互結合網ルータを経由し、ノードＡに送られる。
ノードＡでは、ディレクトリの状態情報がＭ状態であり、ノード情報がＢであることを確認し、読み出し要求をノードＢへ転送する。
ノードＢでは、キャッシュのアドレスadr をＳ状態とし、データを読み出し、データと状態情報ＳをノードＡとノードＣに送る。
ノードＣでは、キャッシュにアドレスadr のデータを、状態情報をＳ状態として登録し、
ノードＡでは、共有メモリのアドレスadr のデータを登録し、ディレクトリとして、ノード情報Ｂ、Ｃ、状態情報Ｓを登録する。
【００２６】
図16は、従来のＳ状態のデータに対する無効化／更新動作例を示す。
１は、Ｍ状態のデータに対する読み出しの例と同様である。
【００２７】
２．次にノードＢから、アドレスadr に対して読み出し要求が発生した場合、この読み出し要求はホームノードであるノードＡの相互結合網ルータを経由し、ノードＡに送られる。
ノードＡでは、ディレクトリの状態情報がＳ状態であることを確認し、ノード情報としてＢを追加し、アドレスadr のデータを読み出し、データと状態情報ＳをノードＢに送る。
ノードＢでは、キャッシュにアドレスadr のデータをＳ状態として登録する。
【００２８】
３．さらにノードＣからアドレスadr に対して無効化／更新要求が発生した場合、この無効化／更新要求は、ホームノードであるノードＡの相互結合網ルータを経由し、ノードＡに送られる。
【００２９】
ノードＡでは、ディレクトリの状態情報がＳ状態で、ノード情報が、Ａ及びＢであることをを確認し、ディレクトリの状態情報をＭ状態に更新し、ノード情報としてＣを登録する。その後に、キャッシュのアドレスadr のデータを消去し、無効化要求をノードＢに送り、更新許諾をノードＣに返す。
ノードＢでは、キャッシュのアドレスadr のデータを消去する。
ノードＣでは、キャッシュにアドレスadr のデータをＭ状態として登録する。
【００３０】
図17は、従来のＳ状態のデータに対する読み出し動作例を示す。
１〜２は、Ｓ状態のデータに対する無効化／更新の例と同様である。
【００３１】
３．さらにノードＣからアドレスadr に対する読み出し要求が発生した場合、読み出し要求はホームノードであるノードＡの相互結合網ルータを経由し、ノードＡに送られる。
ノードＡでは、ディレクトリの状態情報がＳ状態であることを確認し、ノード情報としてＣを追加する。その後に、アドレスadr のデータを読み出し、データと状態情報ＳをノードＣに送る。
ノードＣでは、キャッシュにアドレスadr のデータをＳ状態として登録する。
【００３２】
【発明が解決しようとする課題】
しかし、従来のディレクトリ方式では、
１．自ノードのキャッシュに持っていないデータに対する読み出し要求は、図17に示すごとく、自ノードの近傍のノードにデータがキャッシュされている場合でも、必ずホームノードの共有メモリに送られるため、キャッシュされているデータが有効活用できず、処理が遅い。
【００３３】
２．従って、特定のデータに関する処理を複数のノードで分散して処理する場合、処理を分散したにもかかわらずこのデータのホームノードにメモリアクセス要求が集中し、ホームノードでの処理がボトルネックになって全体の速度を低下させる、
という問題がある。
【００３４】
分散共有メモリ型並列計算機においては、共有メモリとキャッシュのデータの一貫性を保ちつつ、高速のメモリの無効化／更新要求、読み出し処理を実現することが要求されている。
【００３５】
本発明は、処理を高速化し、且つ全体の速度をあげることを目的としている。
【００３６】
【課題を解決するための手段】
本発明では、相互結合網ルータに、ディレクトリ記憶部、及び一貫性処理部を持たせ、
ノード間のメモリアクセス要求は、相互結合網ルータの一貫性処理部がディレクトリ記憶部を参照し、この内容に従ってメモリアクセス要求転送処理、相互結合網ルータ間同期処理を行い、共有メモリとキャッシュのデータの一貫性を保つことを特徴とする。
【００３７】
1.ディレクトリ記憶部
ディレクトリ記憶部の保持内容
キャッシュが共有メモリのコピーを持っている、
1.1 ブロックアドレス（adr)
1.2 ブロックの状態情報（更新Ｍ、あるいは共有Ｓ)
1.3 ノード情報（ノードID)
2.一貫性処理部
2.1 メモリアクセス要求転送手段:
あるプロセッサからのメモリアクセス要求に対応して、ディレクトリ記憶部を参照し、メモリブロックのアドレスが保持されている場合は、当該アドレスに付随するノードに、保持されていない場合はホームノードに、メモリアクセス要求を転送するメモリアクセス要求転送する。
【００３８】
ホームノード以外に読み出し要求を転送した場合、ホームノードには要求元ノードIDをノード情報としてホームノードに転送し、ホームノードでは、要求元ノードIDをノード情報として追加登録する。
【００３９】
例えばＳ状態のデータに対する読み出し要求は、
従来では、
要求元ノード→相互結合網ルータ→・・・ホームノードの相互結合網ルータ→ホームノード→相互結合網ルータ→・・・相互結合網ルータ→共有ノードという経路で送られていた。
【００４０】
しかし、本発明によれば、Ｓ状態のデータに対する読み出し要求は、
要求元ノード→相互結合網ルータ→共有ノードID参照→保持されている最寄りの共有ノードの相互結合網ルータ→共有ノードという経路になる。
すなわち、相互結合網ルータにノード情報が保持されている場合は、保持されている最寄りの共有ノードからデータを読み出し、ホームノードを経由しないため、速度が向上する。
【００４１】
2.2 相互結合網ルータ間同期手段:
一貫性処理を複数箇所、即ちメモリコントローラと、
同じブロックのディレクトリ情報を有する相互結合網ルータの一貫性処理部と、で実行しても、以下の同期処理を行うことで、一つのブロックのデータに対する更新が複数の場所で同時に実行されることを防止し、データの一貫性を保つ。
【００４２】
同期処理：複数のノードで、あるブロックに対する無効化／更新要求が発生した場合、
各ノードの相互結合網ルータは、ホームノードの相互結合網ルータに無効化／更新要求を送る。
ホームノードの相互結合網ルータでは、最初に無効化／更新要求を受け取ったノードに対し更新許諾の応答を返し、ホームノードには無効化要求と無効化要求元のノードIDを、他の共有ノードには無効化要求を送る。
【００４３】
ホームノードでは、当該ブロックのディレクトリを状態情報をＭ状態、ノード情報を要求元ノードIDとして登録し、キャッシュのアドレスadr のデータを消去し、他の共有ノードではキャッシュのアドレスadr のデータを消去する。
【００４４】
無効化／更新要求を送ったにもかかわらず、更新許諾ではなく、無効化要求を受け取ったノードでは、改めてアドレスadr のデータを読み出し、この値に基づいた処理を行う。
【００４５】
他の構成／機能として、ディレクトリ記憶部に第二のノード情報の記憶部として、読み出し要求元のノードIDを登録する、転送ノード情報記憶を追加し、一貫性処理部に読み出しデータ転送処理手段を追加し、以下の読み出しデータ転送処理を行うことにより、共有メモリとキャッシュのデータの一貫性を保ちつつ、相互結合網ルータ間の同期処理を一部省略し、さらに速度が向上する。
【００４６】
3.読み出しデータ転送処理
読み出しデータ転送手段は、ディレクトリ記憶部に保持されたアドレスadr に対する読み出し要求を受け、ホームノード以外の共有ノードに読み出し要求を転送した場合、読み出し要求元ノードIDを転送ノード情報に登録する。
【００４７】
読み出し要求を転送されたノードは、アドレスadr のデータを読み出し、要求元ノードに、データと状態情報Ｓを送る。
この場合、ホームノードへのノード情報の転送は省略され、処理が高速化される。
【００４８】
なお、この時点では、転送ノード情報に保持されたノードは共有メモリのディレクトリに保持されていないが、あるノードで当該アドレスadr に対する無効化／更新要求が発生した時点で、一貫性処理が以下の如く行われる。
【００４９】
発生した無効化／更新要求は、ホームノードの相互結合網ルータに送られ、
ホームノードの相互結合網ルータは、ディレクトリ記憶部のアドレスadr に保持されている全共有ノードに無効化要求を送る。
【００５０】
アドレスadr の転送ノード情報を持つ相互結合網ルータが、ホームノードからアドレスadr に対する無効化要求を受け取ると、保持された転送ノード情報に従って、無効化要求を全転送ノードに転送し、全ての共有ノードに対する無効化が完了する。
【００５１】
保持しているデータには、無効化／更新処理する必要のないデータも含まれるため、一部の無駄な処理を省き、さらに速度が向上する。
【００５２】
【発明の実施の形態】
図１は、本発明による相互結合網ルータの構成例を示す。
本発明による相互結合網ルータは、
通常のルーティング機能部分としての、パケットバッファと、クロスバと、ルーティングコントローラと、
本発明の特徴である、ディレクトリ記憶部と、一貫性処理部とを有する。
【００５３】
本実施例では簡単のため、
１．相互結合網の構成として、図９、図13に示す、ひとつのノードにひとつのプロセッサ・キャッシュの組を接続した構成。
２．各ノードの相互結合網ルータのディレクトリ記憶部に登録するディレクトリは、自ノードからメモリアクセス要求を出したアドレスのディレクトリ、
とするが、
１．相互結合網の構成として、ひとつのノードに複数のプロセッサ・キャッシュの組が接続された構成。
２．各ノードの相互結合網ルータのディレクトリ記憶部に登録するディレクトリは、メモリアクセス要求が経由する、全相互結合網ルータ、あるいは、
ホームノードの相互結合網ルータ、あるいは、
現在、データを保持しているノードの相互結合網ルータ、及び現在、データを更新しているノードの相互結合網ルータ、あるいは、
過去にディレクトリを登録した履歴を持つ相互結合網ルータ、
及び前記各相互結合網ルータの組み合わせ、
であってもよい。
【００５４】
以下、図15、図16、図17の従来例と対比し、図９の分散共有メモリ型並列計算機に本発明を適用した実施例について説明する。
【００５５】
図２は、図１の相互結合網ルータを用い、図15の従来例に対応した、Ｍ状態のデータに対する読み出し動作例を示し、図３は、この場合の相互結合網ルータの動作のフローを示す。
初期状態では、ディレクトリの状態情報はすべて無効状態になっている。
【００５６】
1 ．ノードＡから、自ノードの共有メモリのアドレスadr に対するデータ読み出し要求により、メモリコントローラはアドレスadr のディレクトリを参照し、状態情報がＩ状態であることを確認し、データを読み出し、ノードＡのキャッシュに送ると共に、ディレクトリの状態情報をＳ状態に変更し、ノード情報としてＡを登録する。
【００５７】
ノードＡのキャッシュでは、アドレスadr のデータをＳ状態として登録し、
ノードＡの相互結合網ルータでは、ディレクトリ記憶部に、アドレスadr の状態をＳ状態として登録する。
【００５８】
2 ．次にノードＢから、アドレスadr に対して、無効化／更新要求が発生した場合、この無効化／更新要求は、途中経由する各相互結合網ルータのディレクトリ記憶部を参照しつつ、ノードＢの相互結合網ルータから、ノードＡの相互結合網ルータに送られる。
【００５９】
ノードＡの相互結合網ルータでは、ディレクトリ記憶部を参照し、アドレスadr の状態情報がＳ状態、ノード情報Ａを確認し、状態情報をＭ状態に変更し、ノード情報としてＢを登録し、ノードＢの相互結合網ルータを経由し、ノードＢに更新許諾の応答を返し、ノードＡにアドレスadr の無効化要求を送る。
【００６０】
ノードＢの相互結合網ルータでは、ディレクトリ記憶部にアドレスadr を状態情報をＭ状態、ノード情報としてＢを登録し、ノードＢに応答を返す。
ノードＢでは、キャッシュにadr をＭ状態で登録し、データを更新する。
【００６１】
ノードＡでは、キャッシュのアドレスadr を消去し、共有メモリの、アドレスadr のディレクトリの状態情報をＭ状態に変更し、ノード情報としてＢを登録する。
【００６２】
3 ．さらにノードＣからアドレスadr に対する読み出し要求が発生した場合、読み出し要求は、途中経由する各相互結合網ルータのディレクトリ記憶部を参照しつつ、ノードＣの相互結合網ルータから、ノードＡの相互結合網ルータに送られる。
【００６３】
ノードＡの相互結合網ルータは、ディレクトリ記憶部を参照し、アドレスadr の状態情報がＭ状態、ノード情報Ｂを確認し、状態情報をＳ状態に更新し、ノード情報として、Ｂ，Ｃを登録する。その後に、読み出し要求をノードＢの相互結合網ルータへ転送し、ノードＡに対し、読み出し要求が転送された旨を伝える。
【００６４】
ノードＢの相互結合網ルータは、読み出し要求を受け取ると、ディレクトリ記憶部を参照し、アドレスadr の状態情報がＭ状態、ノード情報Ｂを確認し、ノードＢに読み出し要求を送る。
【００６５】
ノードＢでは、キャッシュのアドレスadr の状態情報をＳ状態とし、データを読み出し、データをノードＢの相互結合網ルータを経由しノードＣに送る。
【００６６】
ノードＢの相互結合網ルータでは、ディレクトリ記憶部のアドレスadr の状態情報をＳ状態、ノード情報としてＢ，Ｃを登録し、データをノードＣの相互結合網ルータを経由し、ノードＣに送る。
【００６７】
ノードＣの相互結合網ルータでは、ディレクトリ記憶部のアドレスadr の状態情報をＳ状態、ノード情報としてＢ，Ｃを登録し、データをノードＣに送る。
ノードＣでは、キャッシュにアドレスadr のデータをＳ状態として登録する。
【００６８】
ノードＡでは、共有メモリの、アドレスadr のディレクトリ状態情報をＳ状態に変更しノード情報としてＢ，Ｃを登録する。
【００６９】
この動作により、読み出し要求がノードＡを経由せず、ノードＡの相互結合網ルータからノードＢに送られるため、処理速度が向上する。
【００７０】
なお、ノードＣからの読み出し要求が、ノードＢの相互結合網ルータを経由する場合、読み出し要求はノードＡの相互結合網ルータも経由せず、ノードＢの相互結合網ルータから、直接ノードＢに送られるため、さらに速度が向上する。
【００７１】
図４は、図１の相互結合網ルータを用い、図16の従来例に対応した、Ｓ状態のデータに対する無効化／更新動作例を示し、図５は、相互結合網ルータの動作のフローを示す。
１は、Ｍ状態のデータに対する読み出しの例と同様である。
【００７２】
２．次にノードＢから、アドレスadr に対して読み出し要求が発生した場合、この読み出し要求は、途中経由する各相互結合網ルータのディレクトリ記憶部を参照しつつ、ノードＢの相互結合網ルータから、ノードＡの相互結合網ルータに送られる。
【００７３】
ノードＡの相互結合網ルータでは、ディレクトリ記憶部を参照し、アドレスadr の状態情報がＳ状態、ノード情報Ａを確認し、ノードＡに読み出し要求を送る。
【００７４】
ノードＡでは、共有メモリのアドレスadr のディレクトリ状態がＳ状態であることを確認し、ノード情報としてＢを追加するとともに、キャッシュのアドレスadr からデータを読み出し、ノードＡの相互結合網ルータを経由し、ノードＢに送る。
【００７５】
ノードＡの相互結合網ルータでは、ディレクトリ記憶部のアドレスadr のノード情報としてＢを追加し、データをノードＢの相互結合網ルータを経由し、ノードＢに送る。
【００７６】
ノードＢの相互結合網ルータでは、ディレクトリ記憶部のアドレスadr の状態情報をＳ状態、ノード情報としてＡ，Ｂを登録し、データをノードＢに送る。
ノードＢでは、キャッシュにアドレスadr のデータをＳ状態として登録する。
【００７７】
３．さらにノードＣからアドレスadr に対する無効化／更新要求が発生した場合、この無効化／更新要求は、途中経由する各相互結合網ルータのディレクトリ記憶部を参照しつつ、ノードＣの相互結合網ルータから、ノードＡの相互結合網ルータに送られる。
【００７８】
ノードＡの相互結合網ルータでは、ディレクトリ記憶部を参照し、アドレスadr の状態情報がＳ状態、ノード情報Ａ，Ｂを確認し、状態情報をＭ状態に変更し、ノード情報としてＣを登録し、ノードＣに更新許諾の応答を返し、ノードＡ，Ｂに無効化要求を送る。
【００７９】
ノードＣの相互結合網ルータでは、ディレクトリ記憶部のアドレスadr をＭ状態、ノード情報としてＣを登録し、ノードＣに更新許諾の応答を返す。
ノードＣでは、キャッシュのアドレスadr の状態をＭとしデータを更新する。
【００８０】
ノードＡでは、キャッシュのアドレスadr を消去し、共有メモリのアドレスadr のディレクトリの状態情報をＭ状態に変更し、ノード情報としてＣを登録する。
【００８１】
ノードＢの相互結合網ルータでは、ディレクトリ記憶部のアドレスadr をＭ状態に更新し、ノード情報としてＣを登録する。その後に、ノードＢにアドレスadr の無効化要求を送る。
ノードＢではキャッシュのadr のデータを消去する。
【００８２】
この動作により、更新許諾がノードＡを経由せず、ノードＡの相互結合網ルータからノードＣに返されるため、処理の高速化が実現できる。
【００８３】
図６は、ディレクトリ記憶部に、転送ノード情報記憶を追加した相互結合網ルータの他の構成例を示す。
図６の相互結合網ルータは、受け取った読み出し要求が、ディレクトリ記憶部に保持されているブロックに対する読み出し要求であった場合は、保持されている共有ノードのうちの、最寄りの共有ノードに読み出し要求を転送し、最寄りのノードがホームノード以外の場合は、読み出し要求元ノードのIDを転送ノード情報に登録する。
【００８４】
図７は、ノードＡとノードＣの中間にノードＢがある構成例によるＳ状態のデータに対する読み出し動作例を示し、図8 は、相互結合網ルータの動作のフローを示す。
１〜2 は、Ｓ状態のデータに対する無効化／更新の例と同様である。
【００８５】
3.さらにノードＣからアドレスadr に対する読み出し要求が発生した場合、この読み出し要求は、途中経由する各相互結合網ルータのディレクトリ記憶部を参照しつつ、ノードＣの相互結合網ルータからノードＢの相互結合網ルータに送られる。
【００８６】
ノードＢの相互結合網ルータでは、ディレクトリ記憶部を参照し、状態情報がＳ状態、ノード情報Ａ，Ｂを確認し、最寄りの共有ノードＢに読み出し要求を転送するが、ノードＢがホームノードでない為、転送ノード情報として要求元ノードＣを登録する。
【００８７】
ノードＢは、キャッシュからデータを読み出し、ノードＢの相互結合網ルータを経由しノードＣの相互結合網ルータにデータを送る。
【００８８】
ノードＣの相互結合網ルータでは、ディレクトリ記憶部のアドレスadr を、状態情報をＳ状態、ノード情報としてＡ，Ｂ，Ｃを登録し、データをノードＣに送る。
ノードＣではキャッシュにアドレスadr のデータをＳ状態として登録する。
以上で、読み出し動作は完了する。
【００８９】
この動作により、読み出し要求がノードＡの相互結合網ルータを経由せず、データがノードＢの相互結合網ルータから直接ノードＣに送られるため、処理の高速化が実現できる。
【００９０】
この場合、ホームノード（ノードＡ）の相互結合網ルータのディレクトリ記憶部、及び共有メモリのディレクトリでは、アドレスadr のノード情報は、Ａ，Ｂとして保持されたままであり、一貫性処理動作は完了していない。
【００９１】
アドレスadr の一貫性処理の動作は、ノードＡの相互結合網ルータが、次にアドレスadr に対する無効化／更新要求を受け取った時点での後処理として、以下の如く実行される。
【００９２】
ノードＡの相互結合網ルータは、アドレスadr に対する無効化／更新要求を、例えば、ノードＤから受け取ると、ディレクトリを参照し、状態情報がＳ状態、ノード情報Ａ，Ｂを確認し、状態情報をＭ状態に変更し、ノード情報としてＤを登録し、ノードＡ，Ｂに無効化要求を送る。
【００９３】
ノードＢの相互結合網ルータでは、ディレクトリ記憶部のアドレスadr を参照し、Ｓ状態、転送ノード情報Ｃを確認し、状態情報をＭ状態、ノード情報としてＤを登録し、キャッシュのアドレスadr を消去するとともに、無効化要求をノードＢ及びノードＣの相互結合網ルータに送る。
【００９４】
ノードＣの相互結合網ルータでは、ディレクトリ記憶部のアドレスadr を参照し、状態情報がＳ状態を確認し、状態情報をＭ状態として登録し、ノード情報としてＤを登録する。
【００９５】
【発明の効果】
以上説明したように、本発明によれば、ディレクトリ方式の、共有メモリとキャッシュのデータの一貫性処理方法を用いながら、データを保持するキャッシュがある場合には、メモリアクセス要求がホームノードを経由する必要がなく、相互結合網ルータ間で転送することで、高速処理が可能になる。また、ホームノードを経由しないことにより、ホームノードにアクセスが集中してシステム全体の速度を低下させることがなくなるという効果がある。
【図面の簡単な説明】
【図１】  本発明による相互結合網ルータの構成例
【図２】  本発明によるＭ状態のデータに対する読み出し動作例
【図３】  Ｍ状態のデータに対する読み出し動作フロー
【図４】  本発明によるＳ状態のデータに対する無効化／更新動作例
【図５】  Ｓ状態のデータに対する無効化／更新動作フロー
【図６】  本発明による転送ノード情報記憶を備えた相互結合網ルータ
【図７】  本発明によるＳ状態のデータに対する読み出し動作例
【図８】  Ｓ状態のデータに対する読み出し動作フロー
【図９】  分散共有メモリ型並列計算機の全体構成例
【図１０】  相互結合網ルータの構成例
【図１１】  ノード内部の構成
【図１２】  ディレクトリ方式によるデータの一貫性管理
【図１３】  ディレクトリ方式を用いる分散共有メモリ型並列計算機
【図１４】  分散共有メモリ型並列計算機におけるデータの一貫性管理
【図１５】  従来のＭ状態のデータに対する読み出し動作例
【図１６】  従来のＳ状態のデータに対する無効化／更新動作例
【図１７】  従来のＳ状態のデータに対する読み出し動作例
【符号の説明】
１  ディレクトリ記憶部
２  一貫性処理部
３  ルーティングコントローラ
【図１】
0004689783.tif 000002
【図２】
0004689783.tif 000003
【図３】
0004689783.tif 000004
【図４】
0004689783.tif 000005
【図５】
0004689783.tif 000006
【図６】
0004689783.tif 000007
【図７】
0004689783.tif 000008
【図８】
0004689783.tif 000009
【図９】
0004689783.tif 000010
【図１０】
0004689783.tif 000011
【図１１】
0004689783.tif 000012
【図１２】
0004689783.tif 000013
【図１３】
0004689783.tif 000014
【図１４】
0004689783.tif 000015
【図１５】
0004689783.tif 000016
【図１６】
0004689783.tif 000017
【図１７】
0004689783.tif 000018