(57)【特許請求の範囲】
【請求項１】
複数のプロセッサにより共有される分散共有メモリに対する前記プロセッサによるアクセスを制御するノードコントローラにおいて、
前記プロセッサが作動するシステムの負荷状況を監視し、負荷状況が低負荷状態であるか否かを判定する負荷監視判定部と、
前記プロセッサと前記分散共有メモリの間のキャッシュメモリに格納されたデータのステータスを記憶するディレクトリメモリと、
前記負荷監視判定部が低負荷状態であると判定した時に、前記ディレクトリメモリを索引し、複数のキャッシュメモリにキャッシングされている可能性があることを示すステータスとなっているキャッシュデータを無効化する特殊スヌープ命令を発行するディレクトリ制御部を備えたことを特徴としたノードコントローラ。
【請求項２】
前記負荷監視判定部は、ＡＣＰＩを利用して前記判定を行うことを特徴とした請求項１に記載のノードコントローラ。
【請求項３】
前記負荷管理判定部は、命令管理バッファの利用率に基づいて前記判定を行うことを特徴とした請求項１に記載のノードコントローラ。
【請求項４】
前記分散共有メモリのメモリパトロールを行うメモリパトロール部を備え、
前記ディレクトリ制御部は、メモリパトロール部の動作に伴うメモリアクセスを利用して前記索引を行うことを特徴とした請求項１ないし請求項３のいずれかひとつに記載のノードコントローラ。
【請求項５】
複数のプロセッサとこれらのプロセッサにより共有される分散共有メモリと前記プロセッサと前記分散共有メモリの間のキャッシュメモリと請求項１ないし請求項４のいずれかひとつに記載のノードコントローラを備えた分散共有メモリ型情報処理システム。
【請求項６】
複数のプロセッサとこれらのプロセッサにより共有される分散共有メモリと前記プロセッサと前記分散共有メモリの間のキャッシュメモリと請求項１ないし請求項４のいずれかひとつに記載のノードコントローラを備えたノードを複数備え、各ノードの分散共有メモリは他のノードのプロセッサによっても共有される分散共有メモリ型情報処理システム。
【請求項７】
複数のプロセッサとこれらのプロセッサにより共有される分散共有メモリとの間のキャッシュメモリにキャッシュされたデータのコヒーレンシを制御する方法において、
前記プロセッサが作動するシステムの負荷状況を監視し、負荷状況が低負荷状態であると判定した時に、前記キャッシュメモリに格納されたデータのステータスを記憶するディレクトリメモリを索引し、複数のキャッシュメモリにキャッシングされている可能性があることを示すステータスとなっているキャッシュデータを無効化する特殊スヌープ命令を発行することを特徴としたキャッシュコヒーレンシの制御方法。
【請求項８】
前記システムの負荷判定をＡＣＰＩを利用して行うことを特徴とした請求項７に記載のキャッシュコヒーレンシの制御方法。
【請求項９】
前記システムの負荷判定を命令管理バッファの利用率に基づいて行うことを特徴とした請求項７に記載のキャッシュコヒーレンシの制御方法。
【請求項１０】
前記索引を前記分散共有メモリに対するメモリパトロール動作に伴うメモリアクセスを利用して行うことを特徴とした請求項７ないし請求項９のいずれかひとつに記載のキャッシュコヒーレンシの制御方法。
【請求項１１】
複数のプロセッサとこれらのプロセッサにより共有される分散共有メモリとの間のキャッシュメモリにキャッシュされたデータのコヒーレンシを制御するプログラムにおいて、
前記プロセッサが作動するシステムの負荷状況を監視し、負荷状況が低負荷状態であるか否かを判定する負荷監視判定処理と、
前記負荷監視判定部が低負荷状態であると判定した時に、前記プロセッサと前記分散共有メモリの間のキャッシュメモリに格納されたデータのステータスを記憶するディレクトリメモリを索引し、複数のキャッシュメモリにキャッシングされている可能性があることを示すステータスとなっているキャッシュデータを無効化する特殊スヌープ命令を発行するディレクトリ制御処理とをコンピュータに実行させることを特徴としたキャッシュコヒーレンシ制御プログラム。
【請求項１２】
前記負荷監視判定処理では、ＡＣＰＩを利用して前記判定を行うことを特徴とした請求項１１に記載のキャッシュコヒーレンシ制御プログラム。
【請求項１３】
前記負荷管理判定部は、前記ＣＰＵの命令管理バッファの利用率に基づいて前記判定を行うことを特徴とした請求項１１に記載のキャッシュコヒーレンシ制御プログラム。
【請求項１４】
前記分散共有メモリのメモリパトロールを行うメモリパトロール処理を前記コンピュータに実行させ、
前記ディレクトリ制御処理では、前記メモリパトロール処理に伴うメモリアクセスを利用して前記索引を行うことを特徴とした請求項１１ないし請求項１３のいずれかひとつに記載のキャッシュコヒーレンシ制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散共有メモリ型情報処理システムに関し、特にキャッシュコヒーレンシの制御方法に関する。
【背景技術】
【０００２】
特許文献１に共有バスで接続された複数のプロセッサによりメインメモリを共有する分散共有メモリ型マルチプロセッサシステムが記載されている。このシステムでは、キャッシュメモリのデータエントリの状態（ダーティまたはクリーン）を記憶するキャッシュ状態タグを用いてエントリキャッシュのコヒーレンシ（一貫性）を保証している。
【０００３】
複数のノードを持つ分散共有メモリ型情報処理システムにおけるキャッシュコヒーレンシの保証方法としてＭＥＳＩプロトコルが知られている。
ＭＥＳＩプロトコルは、キャッシュのステートをＭ“更新”、Ｅ“排他”、Ｓ“共有”、Ｉ“無効”の４つのステートで管理し、スヌープ処理によりプロセッサにデータ処理結果を反映させる。
【０００４】
【特許文献１】特開平６−１１０８４４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記の方法では、例えばプロセッサからのリード要求に対してキャッシングエージェントはＳあるいはＩで登録することがある。しかし、ディレクトリはシステムコヒーレンシを維持するために共有(share)ステートをディレクトリに登録する。また、一度、Ｓ（共有）登録後、キャシュのヒット率を上げるためにキャッシュラインの掃き出しあるいはリプレイス処理等により、ＳからＩ状態に遷移する場合があるが、その遷移自体は上記ディレクトリに直接反映されないまま処理される。
キャッシングエージェントがＩ、ディレクトリがＳの状態の場合、同一ラインに対する更新処理が実施される場合、既にＩ状態になっているキャシングエージェント対するスヌープや無効化処理を行うこととなる。これにより、システム全体の性能が低下するという問題があった。
【０００６】
そこで、本発明は、不要な特殊スヌープ命令の発行を抑制することができる分散共有メモリ型情報処理システム等を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明のノードコントローラは、プロセッサが作動するシステムの負荷状況を監視し、負荷状況が低負荷加状態であるか否かを判定する負荷監視判定部と、プロセッサと分散共有メモリの間のキャッシュメモリに格納されたデータのステータスを記憶するディレクトリメモリと、負荷監視判定部が低負荷状態であると判定した時に、ディレクトリメモリを索引し、複数のキャッシュメモリにキャッシングされている可能性があることを示すステータスとなっているキャッシュデータを無効化する特殊スヌープ命令を発行するディレクトリ制御部を備えている。
【発明の効果】
【０００８】
本発明によれば、不要な無効化処理のための命令のトラフィックを抑えることができる。
【発明を実施するための最良の形態】
【０００９】
図を参照しながら本発明の一実施形態である分散共有型情報処理システム１の構成と動作について説明する。
図１は、分散共有メモリ型情報処理システム１の構成図である。
分散共有メモリ型情報処理装置システム１は、４台のノード（ノード＃０ないし＃３）により構成されている。
ノード＃０は、それぞれキャッシュ２００、２０１、２０２、２０３を具備する複数のＣＰＵ１００、１０１、１０２、１０３と、各ＣＰＵがメインメモリとして共有する分散共有メモリ５００と、ＣＰＵとバス３００により接続されＣＰＵからの処理要求を処理するノードコントローラ４００と、クロスバー９００を備えている。
ノード＃１（＃２、＃３）もノード＃０と同様にＣＰＵ１１０ないし１１３（１１０ないし１１３、１２０ないし１２３）、キャッシュ２１０ないし２１３（２２０ないし２２３、２３０ないし２３３）、バス３１０（３２０、３３０）、ノードコントローラ４１０（４２０、４３０）、分散共有メモリ５１０（５２０、５３０）、クロスバー９１０（９２０、９３０）を備えている。
各ノードは、各クロスバーをメッシュ状に接続するデータ線９０ないし９５を介して相互に通信することができ、ＣＰＵは、他ノードの分散共有メモリにもアクセスする。また、クロスバー９００には、Ｉ／Ｏ装置９５０も接続され、ノードコントローラ４００は、Ｉ／Ｏ装置９５０から受信した要求も処理する。
【００１０】
次に、キャッシュとディレクトリメモリ（以下、「ＤＩＲメモリ」という）のステータスについて説明する。
キャッシュ２００等のデータのステータスを図４に示す。
ステータス”Ｍ”（Ｍｏｄｉｆｉｅｄ）は、キャッシュメモリがデータをシステム内で唯一キャッシングしていることを示す。この場合、データは共有メモリのコピーではない。メモリに実際に記憶するコードは、”１１”である。
ステータス”Ｅ”（Ｅｘｃｌｕｓｉｖｅ）は、キャッシュメモリがデータをシステム内で唯一キャッシングしており、共有メモリのコピーを有していることを示している。メモリに実際に記憶するコードは、”１０”である。
ステータス”Ｓ”（Ｓｈａｒｅｄ）は、データをシステム内で複数キャッシングしている可能性があり、共有メモリのコピーを有していることを示している。メモリに実際に記憶するコードは、”０１”である。
ステータス”Ｉ”（Ｉｎｖａｉｌｄ）は、データをキャッシングしていないことを示している。メモリに実際に記憶するコードは、”００”である。
【００１１】
ＤＩＲメモリに登録、更新、無効化するデータのステータスを図５に示す。
ステータス”Ｐ”（Ｃａｓｈｅｄ）は、ＣＰＵキャッシュのステータスが、Ｍ、Ｅ、Ｓ、Ｉのいずれかであることを示している。メモリに実際に記憶するコードは、”１１”である。
ステータス”Ｓ”（Ｓｈａｒｅ）は、ＣＰＵキャッシュのステータスが、ＳまたはＩであることを示している。メモリに実際に記憶するコードは、”１０”である。
ステータス”Ｉ”（Ｕｎｃａｓｈｅｄ）は、ＣＰＵキャッシュのステータスが、Ｉ（すなわち、キャッシングされていない）であることを示している。メモリに実際に記憶するコードは、”００”である。
【００１２】
図２は、ノードコントローラの構成図である。以下、ノード＃０について説明するが他のノードについても同様である。
ノードコントローラ４００は、ＤＩＲメモリ１０と、負荷判定部２０と、メモリパトロール部３０と、ステート判定回路４０と、特殊スヌープ生成回路５０と、ディレクトリ制御回路（以下、「ＤＩＲ制御回路」という）７０と、リプライ制御回路８０とを備えている。
【００１３】
ＤＩＲメモリ１０は、ノード内のＣＰＵ１０１ないし１０３に搭載されるキャシュ２００ないし２０３の情報を保持する。この情報は、キャッシュに登録されたデータのアドレス、ステータス情報およびノード情報を含んでいる。
【００１４】
負荷監視判定部２０は、システムの負荷状態を監視し、システムが低負荷状態にあるか否かを判定する。この判定は、例えば、ＡＣＰＩを利用して行ったり、命令バッファの利用率に基づいて行ったりすることができる。
【００１５】
メモリパトロール部３０は、分散共有メモリ５００に格納されている全データの正確性を検証してソフトエラーを検出し、可能である場合にはエラーを訂正する。
【００１６】
ステート判定回路４０は、キャッシュ２００等に格納されているデータのステートを判定する。
【００１７】
特殊スヌープ生成回路５０は、ＤＩＲ制御回路の指示によって特殊スヌープ命令を生成する。
【００１８】
ＤＩＲ制御回路６０は、ＤＩＲメモリ１０を索引する機能と、ＤＩＲメモリ１０にステータスを登録する機能と、ＤＩＲメモリのデータを無効化する機能と、コヒーレンシリクエストを発行する機能を備えている。ＤＩＲ制御回路６０は、バス３００とクロスバー９００にスヌープチャネル６００により接続されている。ＤＩＲ制御回路６０がディレクトリ索引リクエストを受信した場合、ＤＩＲメモリ１０を索引し、ＤＩＲメモリ１０に保持されているアドレスが一致し、かつステータス情報が有効（”Ｍ“、”Ｅ”あるいは”Ｓ”）の場合、それぞれ索引結果に応じて登録、更新、無効化を行い、必要に応じて各ノードセルにリクエスト発行を行う。
【００１９】
図３はＤＩＲメモリ１０の制御機構を示す。ここでは、ＤＩＲメモリは一般的に用いられているｎＷＡＹ・セット・アソシアティブのメモリで構成する。ＤＩＲメモリ１０は、スヌープチャネル６００を介してＤＩＲ制御回路６０から転送されるスヌープ要求を処理し、索引結果における各フィールドの一致条件に応じてアドレス、ステータス、オーナーノードＩＤ、ダイレクタＩＤのフィールドが更新され、システム全体のデータ一貫性を保つ。
【００２０】
次に特殊スヌープ要求の発行制御を説明する。
負荷監視判定部２０が、システム内の負荷状況が低負荷状態であることを検知した場合、例えば一定時間内に処理する命令が観測されない、あるいは規定した命令数以下の場合、ノードコントローラ４００は、自ノードコントローラ内のＤＩＲメモリ１０をアドレスの先頭から最終エントリまで順次索引する。索引したステータスが“Ｓ”の場合、アドレス情報およびノード情報、ダイレクタ情報をもとに”S”対象の全キャッシングエージェントに特殊スヌープ命令を発行する。ノードコントローラ４００は、索引する毎に本操作を繰り返す。尚、システム内の負荷状況が低負荷でないことを検知した時点で本操作を中断する。
【００２１】
上記、特殊スヌープ命令のリプライにより、ＤＩＲ制御回路６０は、最新状況のキャッシングエージェントのステートをＤＩＲメモリに反映する。これにより、例えば、リード要求を発行したプロセッサは本来Ｅ、Ｓ、Ｉの何れかのステートになることが推測され、ディレクトには“Ｅ”もしくは”Ｓ”登録されることによりシステム内のコヒーレンシが保たれる。しかし、上記リード要求で必ずしも“Ｅ”あるいは“Ｓ”に登録されるわけではなく、また、“Ｅ”あるは“Ｓ”に登録された後にローカル・キャッシュの掃き出しやリプレイスにより“Ｉ”に（無効化）されることが有り得る。
【００２２】
上記特殊スヌープ命令は、上記無効化された情報をシステム内の負荷状態が低い時を利用して、ＤＩＲメモリ１０に最新のキャッシングエージェントのステートを反映することを目的としている。ここで、キャッシングエージェントのステートが、ディレクトメモリに反映されることにより、”Ｓ“から”Ｉ“に変更されたラインに対して、その後同一ラインへのライト要求が発行された場合でもメモリの一貫性を保つためのスヌープ命令あるいは無効化命令の発行が不要となる。
【００２３】
上述した構成図における、リード・ライト要求における動作説明をする。
1.自ノードの分散共有メモリ５００に対するリード
2.他ノードの分散共有メモリ５３０に対するリード
3.自ノードの分散共有メモリ５００に対するライト
4.他ノードの分散共有メモリ５３０に対するライト
【００２４】
1. 自ノード（ノード＃０）の分散共有メモリ５００に対するリード
この動作のフローチャートを図１０と図１１に示す。リクエスト発行元をＣＰＵ１００とする。尚、自ノード内のＣＰＵ１０１、１０２、１０３から発行した場合も各ＣＰＵ内のキャッシュ制御およびそれらに関連するリクエストの動作は同様とする。
【００２５】
まず、アクセス対象のデータのキャッシュ２００でのステータスを調べる（図１０のＳ１０１）。
1-1.ＣＰＵ１００においてキャッシュ２００にアクセス対象のデータが”Ｍ”で登録されている場合、キャッシュにヒットしキャッシュ２００内のデータがＣＰＵに返信される（Ｓ１０２）。リードリクエストは完了する。
【００２６】
1-2.  ＣＰＵ１００においてキャッシュ１００にアクセス対象のデータが”Ｅ”で登録されている場合、キャッシュにヒットしキャッシュ内のデータがＣＰＵに返信される（Ｓ１０２）。リードリクエストは完了する。
【００２７】
1-3.  ＣＰＵ１００においてキャッシュ１００にアクセス対象のデータが”Ｓ”で登録されている場合、キャッシュにヒットしキャッシュ内のデータがＣＰＵに返信される（Ｓ１０２）。リードリクエストは完了する。
【００２８】
1-4.  ＣＰＵ１００においてキャッシュ１００にアクセス対象のデータが登録されていない場合、キャッシュ１００はバス３００にバス獲得要求を発行し、バス３００が獲得できたらラインリードリクエストを発行する（Ｓ１０３）。
【００２９】
1-4-1.上記1-4.において、バス３００に接続しているＣＰＵ１０１，１０２、１０３のキャッシュ２０１，２０２，２０３の何れかでアクセス対象のデータが”Ｍ”で登録されている場合、そのキャッシュがバス３００に”Ｍ”データをライトバック（データリプライ)する。ライトバックを発行したキャッシュは無効化され”Ｉ”とする。上記ライトバックはリクエスト制御回路７０を介して分散共有メモリ５００に送信する。既に同一ノード内のキャッシュが”Ｍ”の状態であるのでＤＩＲメモリ１０に登録されているＤＩＲステータは”Ｐ”のままとする。
【００３０】
キャッシュ２００はバス３００を介して上記ライトバックデータをリプライデータとして受信し”Ｅ”で登録し、ＣＰＵにデータを返信する。また、自ノードの分散共有メモリ５００にも上記ライトバックデータが送信され内容が更新される（Ｓ１０６）。リード処理は完了する。
【００３１】
1-4-2.上記1-4.において、バス３００に接続しているＣＰＵ１０１，１０２、１０３のキャッシュ２０１，２０２，２０３の何れかでアクセス対象のデータが”Ｅ”で登録されている場合、そのキャッシュは”Ｓ”に更新する。ラインリードリクエストはリクエスト制御回路７０を介してＤＩＲ制御回路６０および分散共有メモリ５００に転送する。ＤＩＲ制御回路６０はＤＩＲメモリ１０を索引し、アクセス対象のステータスを”Ｓ”に更新し、ダイレクタＩＤフィールドの値（ここでは、ノード＃０の各プロセッサに割り当てられたビット）を”１“とする（Ｓ１０７）。
【００３２】
また、ラインリードリクエストにより分散共有メモリ５００から読み出したデータリプライはリプライ制御回路８０、バス３００を介してリクエスト発行元のキャッシュ２００に送信され”Ｓ”で登録し、ＣＰＵにデータを返信する（Ｓ１０８）。リード処理は完了する。
【００３３】
1-4-3.上記1-4．において、バス３００に接続しているＣＰＵ１０１，１０２、１０３のキャッシュ２０１，２０２，２０３の何れかでアクセス対象のデータが”Ｓ”で登録されている場合、そのキャッシュは”Ｓ”に更新する。ラインリードリクエストはリクエスト制御回路７０を介してＤＩＲ制御回路６０および分散共有メモリ５００に転送する。ＤＩＲ制御回路６０はＤＩＲメモリ１０のステータスは更新しないが、ダイレクタＩＤは“Ｓ”対象となるプロセッサの割り当てビットを“１”とする（Ｓ１０９）。
また、ラインリードリクエストにより分散共有メモリ５００から読み出したデータリプライはリプライ制御回路８０、バス３００を介してリクエスト発行元のキャッシュ２００に送信され”Ｓ”で登録し、ＣＰＵにデータを返却する（Ｓ１１０）。リード処理は完了する。
【００３４】
1-5.  上記1-4.において、バス３００に接続しているＣＰＵ１０１，１０２、１０３のキャッシュ２０１，２０２，２０３の全てがアクセス対象のデータを登録していない場合、ラインリードリクエストはリクエスト制御回路７０を介してＤＩＲ制御回路６０および分散共有メモリ５００に転送する。ＤＩＲ制御回路６０は、スヌープチャネル６００を介してクロスバー９００にスヌープ要求を発行し、他ノード（ノード＃１、＃２，＃３）のノードコントローラに左記スヌープ要求を転送する（図１１のＳ１１１）。各々のノードコントローラのＤＩＲ制御回路６０はＤＩＲメモリ１０を索引する（Ｓ１１２）。以下に各索引結果の処理を示す。尚、以下はノード＃３を対象として説明するがノード＃１，２でも同様の動作をするものとする。
【００３５】
1-5-1. 上記1-5.においてノード＃３のＤＩＲメモリ１０の索引結果がアドレス一致でかつ”Ｐ”の場合、ＤＩＲ制御回路６０はバス３３０にラインリードとインバリデイトリクエストを発行する（Ｓ１１３）。ノード＃３のＤＩＲメモリ１０のアクセス対象は無効化する。
【００３６】
1-5-1-1. ＣＰＵ１３０〜１３３の各々キャシュ２３０から２３３を索引し（Ｓ１１４）、索引結果が”Ｍ”の場合、”Ｍ”を登録しているキャッシュはデータをバス３３０にライトバックし、リクエスト制御回路７０に転送する。”Ｍ”で登録していたキャッシは無効化する（Ｓ１１５）。
【００３７】
左記ライトバックはデータリプライとしてリプライチャネル８００を介してクロスバー９３０に転送し、データ線９２を介してノード＃０のノードコントローラ４００に転送される。ノードコントローラ４００のクロスバー９００は上記リプライデータをリクエスト制御回路７０とリプライ制御回路８０に転送する。リプライ制御回路８０はデータリプライをバス３００上のＣＰＵ１００に送信しキャッシュ２００は”Ｅ”を登録する。データリプライはＣＰＵに返却されリード処理は完了する。一方、ノードコントローラ４００のリクエスト制御回路７０はＤＩＲ制御回路６０にデータリプライを転送し、ＤＩＲメモリ１０を索引する。ここで、ＤＩＲメモリ１０の索引結果に応じて対象エリアを”Ｅ“あるいは”Ｓ“に登録する（Ｓ１１６）。
【００３８】
1-5-1-2. ＣＰＵ１３０〜１３３の各々のキャシュ２３０〜２３３を索引し（Ｓ１１４）、索引結果が”Ｅ”の場合、”Ｅ”を登録しているキャッシュは無効化する（Ｓ１１７）。
この場合、ノードコントローラ４００においてデータリプライは分散共有メモリ５００より読み出し、リプライ制御回路８０を介してバス３００に送出し、キャッシュ２００は“Ｅ”で登録する。ＣＰＵにデータを返信する（Ｓ１１８）。リード処理を完了する。
【００３９】
1-5-1-3.  ＣＰＵ１３０〜１３３の各々キャシュ２３０から２３３を索引し（Ｓ１１４）、索引結果が”Ｓ“の場合、”Ｓ”を登録しているキャッシュは無効化する（Ｓ１１９）。
この場合、ノードコントローラ４００においてデータリプライは分散共有メモリ５００より読み出し、リプライ制御回路８０を介してバス３００に出し、キャッシュ２００は“Ｅ”で登録する。ＣＰＵにデータを返信する（Ｓ１２０）。リード処理を完了する。
【００４０】
1-5-1-4. ＣＰＵ１３０〜１３３の各々キャシュ２３０から２３３を索引し（Ｓ１１２）、何れのキャッシュにヒットしない場合、ノード＃３では何もしない。
この場合、データリプライは分散共有メモリ５００より読み出し、データリプライはリプライ制御回路８０を介してバス３００に出し、キャッシュ２００は“Ｅ”で登録する。ＣＰＵにデータを返信する。リード処理を完了する。
【００４１】
1-5-1-5. 上記1-5.においてノード＃３のＤＩＲメモリ１０の索引結果がアドレス一致でかつ”Ｓ”の場合、ＤＩＲ制御回路６０はバス３３０にラインリードとインバリデイトリクエストを発行する（Ｓ１１３）。ノード＃３のＤＩＲメモリ１０のアクセス対象は無効化”Ｉ”する。
【００４２】
ノード＃３のＤＩＲメモリ１０の索引結果が“Ｓ”であり、バス３３０上のキャッシュ２３０〜２３３は“Ｓ”あるいは“Ｉ”であることから、“Ｓ”の場合は上記1-5-1-3.、“Ｉ”の場合は上記1-5-1-4.と同様の動作をする。尚、ノード＃０のＤＩＲメモリ１０の登録、更新制御は1-5-1-1.と同様の動作をする。
【００４３】
1-5-1-6. 上記１-5．においてノード＃３のＤＩＲメモリ１０の索引結果でアドレス一致しない、あるいはアドレス一致したが“Ｉ”の場合（有効データと一致条件が成立しなかった）ノード＃３は何もしない。
尚、ノード＃０のＤＩＲメモリ１０の登録、更新制御は1-5-1-1.と同様の動作をする。
【００４４】
2. 他ノード（ノード＃３）の分散共有メモリ５３０に対するリード
ＤＩＲメモリ１０、およびＣＰＵのキャッシュに対する制御は上記１．と同様である。アクセス対象の分散共有メモリがリクエスト発行ノード以外のノードであり、ノード間のデータ転送経路のみが異なる。分散共有メモリ５３０からの読み出しは、ノードコントローラ４３０よりリプライチャネル８００、クロスバー９３０、データ線９２を介してノードコントローラ４００に転送する。受信したリプライデータはリプライ制御回路８０を介してバス３００に送信し、リクエスト発行元のキャッシュに登録する。
また、キャッシュの“Ｍ”から“Ｉ”の無効化がノード＃０あるいは他ノードで発生したかによりデータリプライの経路が変わるのみであることから、各動作に関しては割愛する。
【００４５】
3. 自ノード（ノード＃０）の分散共有メモリ５００に対するライト
この動作のフローチャートを図１２と図１３に示す。リクエスト発行元をＣＰＵ１００とする。尚、自ノード内のＣＰＵ１０１、１０２、１０３から発行した場合も各ＣＰＵ内のキャッシュ制御およびそれらに関連するリクエストの動作は同様とする。
【００４６】
まず、アクセス対象のデータのキャッシュ２００でのステータスを調べる（図１２のＳ３０１）。
3-1.ＣＰＵ１００においてキャッシュ１００にアクセス対象のデータが”Ｍ”で登録されている場合、キャッシュにヒットしキャッシュ内のデータを更新する。キャッシュのステータスは“Ｍ”のままとする（Ｓ３０２）。ライトを完了する。
【００４７】
3-2. ＣＰＵ１００においてキャッシュ１００にアクセス対象のデータが”Ｅ”で登録されている場合、キャッシュにヒットしキャッシュ内のデータを更新する。キャッシュのステータスも“Ｍ”に更新する（Ｓ３０２）。ライトを完了する。
【００４８】
3-3. ＣＰＵ１００においてキャッシュ１００にアクセス対象のデータが”Ｓ”で登録されている場合、キャッシュ１００はバス３００にバス獲得要求を発行し、バス３００が獲得できたらラインリードとインバリデイトリクエストを発行する（Ｓ３０３）。
【００４９】
3-3-1. 上記3-3.において、キャッシュ２００がライト対象を”Ｓ”でキャッシングしている場合、バス３００にメモリラインリード＆インバリデイトリクエストを発行する。バス３００上の何れかのストアインキャシュに”Ｓ”でキャッシングしているものがあればインバリデイトしキャッシュの登録を無効化”Ｉ”する。並行してキャッシュ２００から発行されたラインリード＆インバリデイトリクエストはリクエスト制御回路７０を介してＤＩＲ制御回路６０に転送する。ＤＩＲメモリ１０の索引結果より、ステータス“Ｓ”に対するダイレクタＩＤより、対象となる全プロセッサにメモリリード＆インバリデイト要求を、リクエストチャネル８００、クロスバー９００を介して送信する。
転送されたメモリリード＆インバリデイトリクエストは他のノードのＤＩＲメモリ１０を索引しアドレス一致でかつ、”Ｐ”あるいは”Ｓ”を検出した場合は無効化”Ｉ”し、同一ノード内のバスにインバリデイトリクエストを発行し”Ｓ”でキャッシングしているキャッシュの登録を無効化”Ｉ”する（Ｓ３０４）。ＤＩＲメモリ１０の索引結果が”Ｉ”の場合は何もしない。
【００５０】
ＤＩＲ制御回路６０は他のノードに発行したメモリリード＆インバリデイトリクエストの完了通知（スヌープ結果）を受信しＤＩＲメモリ１０のエリアを”Ｐ”で登録する。メモリラインリード＆インバリデイトリクエストのアドレスがマッピングされている分散共有メモリ５００よりリードリプライデータが読み出され、リプライ制御回路８０を介してキャッシュ３００に返信する。キャッシュ２００はリードリプライデータを受信しライトデータとマージして”Ｍ”で登録する（Ｓ３０５）。ライト処理は完了する。
【００５１】
3-4. ＣＰＵ１００においてキャッシュ１００にアクセス対象のデータが”アドレス一致しない、あるいはアドレス一致したが無効化“Ｉ”されている場合、キャッシュ１００はバス３００にバス獲得要求を発行し、バス３００が獲得できたらラインリードとインバリデイトリクエストを発行する（Ｓ３０６）。そして、ノード＃０のキャッシュ２０１、２０２、２０３のステータスを調べる（Ｓ３０７）。
【００５２】
3-4-1. 上記3-4.において、バス３００に接続しているＣＰＵ１０１，１０２、１０３のキャッシュ２０１，２０２，２０３の何れかでアクセス対象のデータが”Ｍ”で登録されている場合、そのキャッシュがバス３００に”Ｍ”データをライトバック（データリプライ)する。ライトバックを発行したキャッシュは無効化され”Ｉ”とする（Ｓ３０８）。
【００５３】
上記ライトバックはリクエスト制御回路７０を介して分散共有メモリ５００に送信する。既に同一ノード内のキャッシュが”Ｍ”の状態であるのでＤＩＲメモリ１０に登録されているディレクトリステータは”Ｐ”のままとする。
キャッシュ２００はバス３００を介して上記ライトバックデータをリプライデータとして受信し”Ｍ”で登録し（Ｓ３０９）、データを更新する。ライト処理は完了する。
【００５４】
3-4-2. 上記3-4において、バス３００に接続しているＣＰＵ１０１，１０２、１０３のキャッシュ２０１，２０２，２０３の何れかでアクセス対象のデータが”Ｅ”で登録されている場合、そのキャッシュは無効化”Ｉ”する（Ｓ３０９）。
【００５５】
ラインリードとインバリデイトリクエストはリクエスト制御回路７０を介してＤＩＲ制御回路６０および分散共有メモリ５００に転送する。ＤＩＲ制御回路６０はＤＩＲメモリ１０を索引し、索引結果よりアクセス対象のステータスを”Ｐ”に更新する。また、ラインリードリクエストにより分散共有メモリ５００から読み出したデータリプライはリプライ制御回路８０、バス３００を介してリクエスト発行元のキャッシュ２００に送信され、キャッシュ２００はライトデータとマージして”Ｍ”で登録する（Ｓ３１０）。ライト処理は完了する。
【００５６】
3-4-3. 上記３-4.において、バス３００に接続しているＣＰＵ１０１，１０２、１０３のキャッシュ２０１，２０２，２０３の何れかでアクセス対象のデータが”Ｓ”で登録されている場合、そのキャッシュは無効化”Ｉ”する（Ｓ３１１）。
また、他ノードのキャッシュが”Ｓ”である可能性があるため、ＤＩＲ制御回路６０はリクエストチャネル７００、クロスバー９００にインバリデイトリクエストを発行する。インバリデイトリクエストを受信した各々のノードのノードコントローラは、ノード内のバスへインバリデイトリクエストを発行する。”Ｓ”で登録されているキャッシュは全て無効化”Ｉ”される。キャッシングされていない場合は何もしない。他ノードのＤＩＲメモリ１０のアクセス対象エリアは無効化”Ｉ”される。
ラインリード＆インバリデイトリクエストはリクエスト制御回路７０を介してＤＩＲ制御回路６０および分散共有メモリ５００に転送する。ＤＩＲ制御回路６０はＤＩＲメモリ１０を索引し、索引結果よりアクセス対象のステータスを”Ｐ”に更新する。また、ラインリードリクエストにより分散共有メモリ５００から読み出したデータリプライはリプライ制御回路８０、バス３００を介してリクエスト発行元のキャッシュ２００に送信され、キャッシュ２００はライトデータとマージして”Ｍ”で登録する（Ｓ３１２）。ライト処理は完了する。
【００５７】
3-5. 自ノード内のノードコントローラ４００のＤＩＲ制御回路６０はＤＩＲメモリ１０、キャッシュ２０１，２０２，２０３の全てがアクセス対象のデータを登録していない場合、ラインリードとインバリデイトリクエストはリクエスト制御回路７０を介してＤＩＲ制御回路６０および分散共有メモリ５００に転送する。ＤＩＲ制御回路６０は、ノード間アドレスバス６００にラインリード＆インバリデイトリクエストを発行し、他ノード（ノード１、２，３）のノードコントローラに上記ラインリードリクエストを転送する（図１３のＳ３２１）。各々のノードコントローラのＤＩＲ制御回路６０はＤＩＲメモリ１０を索引する（Ｓ３２２）。以下に各索引結果の動作を示す。尚、以下はノード＃３を対象として説明するがノード＃１，２でも同様の動作をするものとする。
【００５８】
3-5-1. 上記3-5.においてノード＃３のＤＩＲメモリ１０の索引結果がアドレス一致でかつ”Ｐ”の場合、ＤＩＲ制御回路６０はバス３３０にインバリデイトリクエストを発行する。ノード＃３のＤＩＲメモリ１０のアクセス対象は無効化”Ｉ”する。以下に上記インバリデイトリクエストに対する動作を示す。
【００５９】
3-5-1-1. ＣＰＵ１３０〜１３３の各々キャシュ２３０から２３３を索引し（Ｓ３２４）、索引結果が”Ｍ”の場合、”Ｍ”を登録しているキャッシュはデータをバス３３０にライトバックし、リクエスト制御回路７０に転送する。”Ｍ”で登録していたキャッシは無効化”Ｉ”する（Ｓ３２５）。
【００６０】
上記ライトバックはデータリプライとしてリプライチャネル８００を介して、クロスバー９３０に転送し、データ線９２を介してノード＃０のノードコントローラ４００に転送される。ノードコントローラ４００はデータリプライをリプライ制御回路８０とリクエスト制御回路７０に転送する。リプライ制御回路８０はデータリプライをバス３００上のＣＰＵ１００に送信し、キャッシュ２００はデータリプライとライトデータをマージして”Ｍ”で登録する。ライト処理を完了する（Ｓ３２６）。
【００６１】
尚、上記においてリード動作時のＤＩＲメモリ１０の制御と同様に、リクエスト発行元のＤＩＲ制御回路６０はデータリプライを受信し、ＤＩＲメモリ１０を索引する。ここで、ＤＩＲメモリ１０の索引結果が判定回路３の結果を判別する判定回路の出力により以下の様になる。
ＤＩＲメモリ１０のアクセス対象エリアに空きエリアが存在した場合、空きエリアにキーアドレスおよびステータス”Ｐ”を登録する。
ＤＩＲメモリ１０のアクセス対象エリアが全て”Ｓ”で登録されていた場合、何れかのエリアを掃き出し、替わりにデータリプライのキーアドレスとステータス”Ｐ”を登録する。
【００６２】
インバリデイトリクエストのアドレスに対して、バス３００上のキャッシュ２００〜２０３の何れかで“Ｍ”が登録されている場合は、バス３００にライトバックし無効化“Ｉ”する。ライトバックはリクエスト制御回路７０を介してアクセス対象の分散共有メモリにルーティングされメモリの内容を更新する。
インバリデイトリクエストのアドレスに対して、バス３００上のキャッシュ２００から２０３の何れかで“Ｅ”が登録されている場合、無効化“Ｉ”する。
インバリデイトリクエストのアドレスに対して、バス３００上のキャッシュ２００から２０３の何れかで“Ｓ”が登録されている場合、無効化“Ｉ”する。
インバリデイトリクエストのアドレスに対して、バス３００上のキャッシュ２００から２０３の何れにも登録されていない場合は何もしない。
【００６３】
3-5-1-2. ＣＰＵ１３０〜１３３の各々キャシュ２３０から２３３を索引し（Ｓ３２４）、索引結果が”Ｅ”の場合、”Ｅ”を登録しているキャッシュは無効化”Ｉ”する（Ｓ３２７）。
この場合、ノードコントローラ４００においてデータリプライは分散共有メモリ５００より読み出し、リプライ制御回路８０を介してバス３００に出し、キャッシュ２００はデータリプライとライトデータをマージして“Ｍ”で登録する（Ｓ３２８）。ライト処理を完了する。
ＤＩＲメモリ１０の制御は上記3-5-1-1.と同様である。
【００６４】
3-5-1-3. ＣＰＵ１３０〜１３３の各々キャシュ２３０から２３３を索引し（Ｓ３２４）、索引結果が”Ｓ“の場合、”Ｓ”を登録しているキャッシュは無効化”Ｉ”する（Ｓ３２９）。
この場合、ノードコントローラ４００においてデータリプライは分散共有メモリ５００より読み出し、リプライ制御回路８０を介してバス３００に出し、キャッシュ２００はデータリプライとライトデータをマージして“Ｍ”で登録する（Ｓ３３０）。ライト処理を完了する。
ＤＩＲメモリ１０の制御は上記3-5-1-1.と同様である。
【００６５】
3-5-1-4. ＣＰＵ１３０〜１３３の各々キャシュ２３０から２３３を索引し、何れのキャッシュにヒットしない場合、ノード＃３は何もしない。
この場合、データリプライは分散共有メモリ５００より読み出し、データリプライはリプライ制御回路８０を介してバス３００に出し、キャッシュ２００はデータリプライとライトデータをマージし“Ｍ”で登録する（Ｓ３３０）。ライト処理を完了する。
ＤＩＲメモリ１０の制御は上記3-5-1-1.と同様である。
【００６６】
3-6. 上記３-5.においてノード＃３のＤＩＲメモリ１０の索引結果がアドレス一致でかつ”Ｓ”の場合、ＤＩＲ制御回路６０はバス３３０にインバリデイトリクエストを発行する（Ｓ３２３）。ノード＃３のＤＩＲメモリ１０のアクセス対象は無効化”Ｉ”する。
ノード＃３のＤＩＲメモリ１０の索引結果が“Ｓ”であることから、バス３３０上のキャッシュ２３０〜２３３は“Ｓ”あるいは“Ｉ”であることから、“Ｓ”の場合は上記3-5-1-3.  “Ｉ”の場合は上記3-5-1-4.と同様の動作をする。尚、ノード＃０のＤＩＲメモリ１０の登録、更新制御は3-5-1-1.と同様の動作をする。
【００６７】
3-6-1. 上記３-5．においてノード＃３のＤＩＲメモリ１０の索引結果が“Ｉ”の場合（有効データと一致条件が成立しなかった）はノード＃３は何もしない。
尚、ノード＃０のＤＩＲメモリ１０の登録、更新制御は3-5-1-1.と同様の動作をする。
【００６８】
4. 他ノード（ノード＃３）の分散共有メモリ５３０に対するライト
ＤＩＲメモリ１０、および各々のキャッシュに対する制御は上記3．と同様である。アクセス対象の分散共有メモリがリクエスト発行ノード以外のノードであり、ノード間のデータ転送経路のみが異なる。分散共有メモリ５３０からの読み出しは、ノードコントローラ４３０よりリプライチャネル８００、クロスバー９３０に送信し、データ線９２を介してノードコントローラ４００に転送する。受信したデータはリプライ制御回路８０を介してバス３００に送信し、リクエスト発行元のキャッシュに登録する。
また、キャッシュの“Ｍ”から“Ｉ”の無効化がノード＃０あるいは他ノードで発生したかによりデータリプライの経路が変わるのみである。
【００６９】
次に従来構成でのキャッシュコヒーレンシの制御処理の例を図６を参照して説明する。この例では、複数プロセッサＰ０〜Ｐ３のサブセットをＣ０〜Ｃ３とし、Ｃ０〜Ｃ３にメインメモリＭＭが接続したイメージであり、ＩＯ装置は省いている。ＮＣ０〜ＮＣ１はノードコントローラおよびクロスバーを含むノードコントローラ処理部とする。
【００７０】
ここでは、サブセットC0のプロセッサP0（以下、「C0 P0」と書く。他のプロセッサについても同様）がライト要求を発行した場合について説明する。また「Home Agent」は、接続する先のネットワークにあるルータを意味する。
ステップ１． C0  P0がライト要求。  C0 DIR キャッシュミス
ステップ２． Home AgentがNC1にリード要求（図６のＳ１）
ステップ３．  NC1がディレクトリを索引。 NC2 P0およびNC3 P0で”S”ステート検出。
※但し、C2 P0およびC3 P1の最新ステートは”I”で登録。
C1 MMよりメモリリード（Ｓ２）
ステップ４． NC2,NC3に対して無効化命令発行（Ｓ３）
NC1は、NC2,ＮＣ３の無効化処理のリプライ待ち
ステップ５．   NC1がＮＣ２、ＮＣ３のリプライ受信（Ｓ４）
C1 MMよりリードデータリプライ（Ｓ５）
ステップ６． ＮＣ１は、ＤＩＲメモリにおけるC0 P1のステートを”M”に更新。
NC0へメモリリードデータ返却（Ｓ６）
【００７１】
次に本発明構成でのキャッシュコヒーレンシの制御処理の例を図７を参照して説明する。この例では、複数プロセッサＰ０〜Ｐ３のサブセットをＣ０〜Ｃ３とし、Ｃ０〜Ｃ３にメインメモリＭＭが接続したイメージであり、ＩＯ装置は省いている。ＮＣ０〜ＮＣ１はノードコントローラ４００、４１０、４２０、４３０およびクロスバー９００、９００、９１０、９２０、９３０を含むノードコントローラ処理部とする。
ステップ１． NC1 は、他ＮＣの負荷状況監視
ステップ２． NC1は、各ＮＣが低負荷状況であることを検出
ステップ３． メモリパトロール機構を活用し、ＭＭの全ラインを読み出しデータのステートをチェック
ステップ４． NC2,NC3 で“S(共有）”ステート検出
※  但し、C2 P0およびC3 P1の最新ステートは”I”で登録
ステップ５．  NC2,NC3に対して特殊スヌープ命令発行 （図７のＳ１３）
NC1は、NC2,ＮＣ３の無効化処理のリプライ待ち
ステップ６．  NC2,ＮＣ３のリプライ受信  （Ｓ１４）
NC1 DIR “Ｉ”に更新。
ステップ７．  C0 P1 ライト要求
C0 DIR キャッシュミス
ステップ８．  Home Agent NC1にリード要求（Ｓ１１）
ステップ９．   NC1 DIR索引
ここで、上記ステップ１．から６．の処理によりDIR”Ｉ”で更新されている。
C1 MMよりメモリリード（Ｓ１２）
ステップ１０．  ＮＣ１は、DIRにおけるC0 P1のステートを”M”に更新
NC0へメモリリードデータ返却（Ｓ１６）
【００７２】
上述の従来例と本発明の動作の比較表を図８に示す。
単に、従来例と本発明のステップ数を比較すると予め低負荷状況での特殊スヌープ処理を実行するため、本発明の方がステップ数が大きくなる。但し、システム稼働状態において負荷が低い期間を活用して、特殊スヌープ命令の処理によりキャッシングエージェントのステートをDIR(Home)に反映させることにより、不要なスヌープ要求や無効化処理によるオーバーヘッドを削減し、システム全体の性能があがる効果がある。
【００７３】
次に、メモリパトロールシーケンスを活用した場合の特殊スヌープ命令生成のための手順を説明する。
例えば、大容量の情報を格納するＤＩＲメモリは、ＲＡＭ等で構成される。ＲＡＭはα線等の影響により記憶内容が反転してデータ誤りをすることがあり、これを一般的にはソフトエラーと称している。このソフトエラーを訂正する方法として、メモリパトロール方式が使用されている。
【００７４】
例えば、８バイトデータ毎にＳＥＣ−ＤＥＤ（１ビットエラー訂正・２ビットエラー検出）のＥＣＣコードで保証する。メモリパトロールが起動された場合、ＲＡＭからのデータのリード→リードしたデータのＥＣＣコードの検査と訂正→チェックビット（データ保証ビット）の生成→ＲＡＭへの書き戻しの一連の動作を繰り返す。
【００７５】
即ち、上述したメモリパトロール一連の動作の繰り返しの中で、ＲＡＭからのデータ読み出しをし、データの保証が確認された際にＲＡＭ情報内の各ノードにおけるキャッシュステータス情報を同時に参照する。ここで、キャッシュステータス情報がＳ（共有）あるいはＥ（排他）と判定された場合で、かつ、負荷監視判定部２０において低負荷と判断された場合、上記Ｓ（共有）あるいはＥ（排他）と判定された情報に伴うアドレス情報とノード情報を取得する。取得したアドレスとノード情報から特殊スヌープ生成回路５０が特殊スヌープ命令を生成し、ノード情報よりキャッシングエージェントに生成した特殊スヌープ命令を発行する。ここで、例えばＳ（共有）の場合は複数のキャシングエージャントが、対象アドレスのラインデータを共有していることが推測されるため、全ての対象に前記特殊スヌープをブロードキャストする。
【００７６】
以下は、各ノードコントローラにおける特殊スヌープ生成回路５０と負荷監視判定部２０の動作の一例である。図９は特殊スヌープ命令の発行条件を表したものである。
(1) あるホームノードのノードコントローラより、メモリパトロールを起因として、各ノードのキャッシュスステートを管理しているＤＩＲメモリより情報を読み出す。
(2) 読み出されたステートで“Ｓ(共有）”が検出された場合は、対象のセルに特殊スヌープ命令を発行する。
(3) 受信したセルは、命令管理バッファの命令が仕掛かり中を示すＶビットの総和が“０”ならば明らかに負荷がない状態と判断して、特殊スヌープ命令を処理する。尚、数ビットのＶビットが“１”の場合でも、低負荷状況であることが判断可能であることから、ある一定の閾値を設定可能なレジスタを具備し、その設定された値より上記Ｖビットの総和が小なる場合も低負荷状態と判定して特殊スヌープ処理を実行するようにしてもよい。
(4) 特殊スヌープのリプライとして、命令管理バッファのバッファ使用率を返却し、特殊スヌープ命令発行元は、返却されたバッファ使用率をもとに負荷状況を判定し、その後の特殊スヌープ命令の発行を判定する。
(5) 仮に１回目の特殊スヌープ命令の発行先のセルがＶビットの総和数が大きく、高負荷状態であると判断された場合、特殊スヌープ命令の処理は行わず、処理を行わなかったことを示すリプライを返却して特殊スヌープ命令の発行を抑止する。
(6) 一時的に高負荷状態となり、その後低負荷状態に移行したままの状態が続くこともありうることから、周期（周期は可変に設定可能とする。）的に上記の特殊スヌープ命令の発行が可能な仕組みを具備するものとする。
(7) 上記はメモリパトロールをトリガとしているが、特にメモリパトロールを実行していないケースにおいてもホームノード自体の命令管理バッファのＶビットの状態を検知し、低負荷状態ならば特殊スヌープ命令を発行可能な仕組みを具備する。
尚、上記はハードウェアで実現しているがソフトウェアによる監視やＡＣＰＩの機構を活用して負荷状態を判定することでもよい。
【００７７】
以上説明した様に、分散共有メモリ型情報処理システム１は、以下に記載する様な効果を奏する。
負荷監視判定部２０は、システムの負荷状態を監視し、ＤＩＲ制御回路６０は、システム負荷状態が小さい時、予め特殊スヌープ命令を発行し、最新のキャッシングエージェントのステートをＤＩＲメモリに反映する。
そのため、システム負荷状態が大きくなった場合でも不要な無効化処理のための命令のトラフィックを抑えることができる。
【００７８】
また、メモリパトロール部２０がメモリパトロールを行う際のディレクトリ読み出し動作を利用し、ステート判定をするようにすれば、従来のノードコントローラに大きな変更を加えることなく、特殊スヌープ命令の発行を制御することができる。
【００７９】
また、ノード間で負荷状況が大／小混在する場合は、負荷が小さいノードのみを対象として処理することが可能なことからシステム稼働状況に応じた最適な処理が実現可能となる。
【図面の簡単な説明】
【００８０】
【図１】本発明の一実施形態である分散共有メモリ型情報処理システムのブロック図である。
【図２】ノードコントローラのブロック図である。
【図３】ＤＩＲ制御回路のブロック図である。
【図４】ＣＰＵキャッシュのステータスを説明する図である。
【図５】ディレクトリのステータスを説明する図である。
【図６】従来の構成によるライト処理を説明する図である。
【図７】本発明によるライト処理を説明する図である。
【図８】従来構成による処理と本発明による処理を対比する表である。
【図９】特殊スヌープ命令の発行条件の一例を示す図である。
【図１０】自ノードの分散共有メモリに対するリード動作を示すフローチャートである。
【図１１】自ノードの分散共有メモリに対するリード動作を示すフローチャートである。
【図１２】自ノードの分散共有メモリに対するライト動作を示すフローチャートである。
【図１３】自ノードの分散共有メモリに対するライト動作を示すフローチャートである。
【符号の説明】
【００８１】
１０  ＤＩＲメモリ
２０  負荷監視判定部
３０  メモリパトロール部
４０  ステート判定回路
５０  特殊スヌープ生成回路
６０  ＤＩＲ制御回路
７０  リクエスト制御部
８０  リプライ制御回路
１００、１０１、１０２、１０３、１３０、１３１、１３２、１３３  ＣＰＵ
２００、２０１、２０２、２０３、２３０、２３１、２３２、２３３  キャッシュ
３００、３３０  バス
４００、４３０  ノードコントローラ
５００、５３０  分散共有メモリ
６００  スヌープチャネル
７００  リクエストチャネル
８００  リプライチャネル
９００、９３０  クロスバー
【図１】
0004967087.tif 000002
【図２】
0004967087.tif 000003
【図３】
0004967087.tif 000004
【図４】
0004967087.tif 000005
【図５】
0004967087.tif 000006
【図６】
0004967087.tif 000007
【図７】
0004967087.tif 000008
【図８】
0004967087.tif 000009
【図９】
0004967087.tif 000010
【図１０】
0004967087.tif 000011
【図１１】
0004967087.tif 000012
【図１２】
0004967087.tif 000013
【図１３】
0004967087.tif 000014