(57)【要約】  複数の情報処理部に対して制御情報を送信する際に通信路の伝送負荷を軽減する。  情報処理部（１０ａ）の制御情報送信部（１１ａ）は、制御情報（２１）と、その送信先とする１つ以上の情報処理部を指定する宛先情報とを含む制御パケット（２０）を送信する。情報処理部（１０ｂ）の制御情報受信部（１２ｂ）は、受信した制御パケット（２０）において制御情報（２１）の送信先として情報処理部（１０ｂ）が指定されている場合、制御パケット（２０）から制御情報を取り込むとともに、情報処理部（１０ｂ）を制御情報（２１）の送信先として指定しないように宛先情報を書き替えた制御パケット（２０）を送信する一方、制御情報（２１）の送信先として情報処理部（１０ｂ）が指定されていない場合、受信した制御パケット（２０）をそのまま転送する。
2012077169.tif 000002
【特許請求の範囲】
【請求項１】
複数の情報処理部がリング状通信路によって接続された情報処理システムにおいて、
前記複数の情報処理部のそれぞれは、
制御情報と、当該制御情報の送信先とする１つ以上の情報処理部をそれぞれ指定する宛先情報とを含む制御パケットを、前記リング状通信路に送信する制御情報送信部と、
前記リング状通信路を介して受信した制御パケットに、制御情報の送信先として自身が属する情報処理部が指定されている場合には、前記受信した制御パケットから制御情報を取り込むとともに、自身が属する情報処理部を制御情報の送信先として指定しないように宛先情報を書き替えた制御パケットを前記リング状通信路に送信し、前記受信した制御パケットに制御情報の送信先として自身が属する情報処理部が指定されていない場合には、前記受信した制御パケットを前記リング状通信路に送信する制御情報受信部と、
を有することを特徴とする情報処理システム。
【請求項２】
前記制御情報受信部は、前記受信した制御パケット内の宛先情報に、制御情報の送信先として自身が属する情報処理部のみが指定されていた場合には、前記受信した制御パケットを前記リング状通信路に送信しないことを特徴とする請求の範囲第１項記載の情報処理システム。
【請求項３】
前記複数の情報処理部のそれぞれは、自身が属する情報処理部の制御情報受信部が受信した制御パケットの送信元を宛先とする応答パケットを前記リング状通信路に送信する応答処理部をさらに有し、
前記制御情報送信部が送信する制御パケットには、制御情報の送信先に指定された情報処理部のうち少なくとも１つにおいて制御情報が受信済みかを示す受信判定情報が含まれ、
前記制御情報受信部は、前記受信した制御パケットに制御情報の送信先として自身が属する情報処理部が指定されていた場合、前記受信した制御パケット内の受信判定情報が未受信を示すときには、自身が属する情報処理部を制御情報の送信先として指定しないように前記受信した制御パケットを書き替えるとともに、当該制御パケットの受信判定情報が受信済みを示すように書き替えた制御パケットを前記リング状通信路に送信し、
前記応答処理部は、自身が属する情報処理部の制御情報受信部が受信した制御パケット内の受信判定情報が未受信を示していた場合に、当該制御パケット内の制御情報に対応する応答情報を格納した応答パケットを生成して前記リング状通信路に送信する、
ことを特徴とする請求の範囲第１項または第２項記載の情報処理システム。
【請求項４】
前記応答処理部は、自身が属する情報処理部の制御情報受信部によって制御パケットから制御情報が取り込まれた後、前記リング状通信路を介して当該制御パケットに対応する応答パケットを受信したとき、前記取り込まれた制御情報に対応する応答情報を付加した応答パケットを、前記リング状通信路に送信することを特徴とする請求の範囲第３項記載の情報処理システム。
【請求項５】
前記応答処理部は、自身が属する情報処理部の制御情報受信部が受信した制御パケット内の受信判定情報が受信済みを示していた場合に、前記リング状通信路を介して他の情報処理部の応答処理部から受信した応答パケットに、前記受信した応答パケットに対応する制御パケットから取り込まれた制御情報に対応する応答情報を付加して前記リング状通信路に送信することを特徴とする請求の範囲第３項または第４項記載の情報処理システム。
【請求項６】
前記複数の情報処理部のそれぞれは、キャッシュ部を備える演算処理部と、前記複数の情報処理部によって共有されるアドレス空間の一部が割り当てられた記憶部とを備え、
前記制御情報送信部は、自身が属する情報処理部内の記憶部に対するアクセス要求対象のデータが他の情報処理部内のキャッシュ部にキャッシュされている場合に、前記アクセス要求対象のデータをキャッシュするキャッシュ部が属する１つ以上の情報処理部を制御情報の送信先として指定した制御パケットを、前記リング状通信路に送信する、
ことを特徴とする請求の範囲第１項または第２項記載の情報処理システム。
【請求項７】
前記複数の情報処理部のそれぞれは、演算処理部と記憶部とをそれぞれ備える情報処理ノードを複数有し、
前記制御情報受信部は、前記リング状通信路を介して受信した制御パケットから取り込んだ制御情報を、自身が属する情報処理部内の各情報処理ノードに対してブロードキャストすることを特徴とする請求の範囲第６項記載の情報処理システム。
【請求項８】
前記複数の情報処理部のそれぞれは、自身が属する情報処理部の制御情報受信部によってブロードキャストされた制御情報に対する応答情報を、当該情報処理部内のすべての情報処理ノードから受信すると、当該情報処理部の制御情報受信部が受信した制御パケットの送信元を宛先とする応答パケットを、前記リング状通信路に送信する応答処理部をさらに有することを特徴とする請求の範囲第７項記載の情報処理システム。
【請求項９】
前記制御情報送信部が送信する制御パケットには、送信先に指定された情報処理部のうち少なくとも１つにおいて制御情報が受信済みかを示す受信判定情報が含まれ、
前記制御情報受信部は、前記受信した制御パケットにおいて制御情報の送信先として自身が属する情報処理部が指定されていた場合、前記受信した制御パケット内の受信判定情報が未受信を示すときには、前記受信した制御パケットを自身が属する情報処理部を制御情報の送信先として指定しないように書き替えるとともに、前記受信した制御パケット内の受信判定情報を受信済みを示すように書き替えた制御パケットを前記リング状通信路に送信し、
前記応答処理部は、自身が属する情報処理部の制御情報受信部が受信した制御パケット内の受信判定情報が未受信を示していた場合に、応答パケットを生成し、当該情報処理部内のすべての情報処理ノードから応答情報を受信すると、受信した応答情報を生成した応答パケットに付加した応答パケットを前記リング状通信路に送信する、
ことを特徴とする請求の範囲第８項記載の情報処理システム。
【請求項１０】
前記応答処理部は、自身が属する情報処理部の制御情報受信部が受信した制御パケット内の受信判定情報が受信済みを示していた場合、当該情報処理部内のすべての情報処理ノードから応答情報を受信し、かつ、他の情報処理部の応答処理部から前記リング状通信路を介して送信された応答パケットを受信したときに、受信した応答パケットに、前記受信した応答パケットに対応する制御パケットから取り込まれた制御情報に対応する応答情報を付加して前記リング状通信路に送信することを特徴とする請求の範囲第９項記載の情報処理システム。
【請求項１１】
前記制御情報送信部は、前記アクセス要求対象のデータが、他の情報処理部におけるただ１つのキャッシュ部にキャッシュされている場合、前記アクセス要求対象のデータをキャッシュするキャッシュ部を含む情報処理ノードを宛先とした制御情報を含む個別制御パケットを、前記リング状通信路に送信することを特徴とする請求の範囲第６項〜第１０項のいずれか１項に記載の情報処理システム。
【請求項１２】
前記制御情報送信部から送信される制御パケットは、前記複数の情報処理部のそれぞれに対応して制御情報の送信先として指定されたか否かを示すビットを有する送信先判定情報を含み、
前記制御情報受信部は、前記受信した制御パケット内の送信先判定情報を基に、制御情報の送信先として自身が属する情報処理部が指定されているか否かを判定し、自身が属する情報処理部が指定されている場合には、前記受信した制御パケット内の送信先判定情報のビットのうち自身が属する情報処理部に対応するビットを、制御情報の送信先として指定しないように書き替える、
ことを特徴とする請求の範囲第１項記載の情報処理システム。
【請求項１３】
前記複数の情報処理部のそれぞれは、演算処理部と記憶部とをそれぞれ備える情報処理ノードを複数有し、
前記制御情報送信部は、自身が属する情報処理部内の記憶部に対して他の情報処理部からアクセスが要求された場合、または、自身が属する情報処理部における一の情報処理ノードから当該情報処理部の他の情報処理ノード内の記憶部に対してアクセスが要求された場合に、アクセス要求対象のデータが他の情報処理部内のキャッシュ部にキャッシュされているとき、制御パケットを送信する、
ことを特徴とする請求の範囲第１項記載の情報処理システム。
【請求項１４】
前記制御情報送信部が送信する制御パケットに含まれる制御情報は、前記アクセス要求対象のデータをキャッシュするキャッシュ部に対して、前記アクセス要求対象のデータに対応するキャッシュデータの状態が整合性を保つように制御する情報であることを特徴とする請求の範囲第６項記載の情報処理システム。
【請求項１５】
複数の情報処理部がリング状通信路によって接続された情報処理システムにおける情報送信方法であって、
前記複数の情報処理部のうちの第１の情報処理部が、制御情報と、当該制御情報の送信先とする１つ以上の情報処理部をそれぞれ指定する情報とを含む制御パケットを、前記リング状通信路に送信し、
前記複数の情報処理部のうちの第２の情報処理部が、前記リング状通信路を介して受信した制御パケットに、制御情報の送信先として自身が属する情報処理部が指定されている場合には、前記受信した制御パケットから制御情報を取り込むとともに、自身が属する情報処理部を制御情報の送信先として指定しないように宛先情報を書き替えた制御パケットを前記リング状通信路に送信し、制御情報の送信先として自身が属する情報処理部が指定されていない場合には、前記受信した制御パケットを前記リング状通信路に送信する、
ことを特徴とする情報送信方法。
【請求項１６】
前記第２の情報処理部は、前記受信した制御パケットに、制御情報の送信先として前記第２の情報処理部のみが指定されていた場合には、前記受信した制御パケットを前記リング状通信路に送信しないことを特徴とする請求の範囲第１５項記載の情報送信方法。
【請求項１７】
前記第１の情報処理部が送信する制御パケットには、制御情報の送信先に指定された情報処理部のうち少なくとも１つにおいて制御情報が受信済みかを示す受信判定情報が含まれ、
前記第２の情報処理部は、
前記受信した制御パケットに制御情報の送信先として当該第２の情報処理部が指定されていた場合、前記受信した制御パケット内の受信判定情報が未受信を示すときには、前記受信した制御パケットを当該第２の情報処理部を制御情報の送信先として指定しないように書き替えるとともに、前記受信した制御パケット内の受信判定情報が受信済みを示すように書き替えた制御パケットを前記リング状通信路に送信し、
前記受信した制御パケットを受信判定情報が受信済みを示すように書き替えた後、前記受信した制御パケットの制御情報に対応する応答情報を格納した、前記第１の情報処理部を宛先とする応答パケットを生成して前記リング状通信路に送信する、
ことを特徴とする請求の範囲第１５項または第１６項記載の情報送信方法。
【請求項１８】
前記複数の情報処理部のうち第３の情報処理部が、
前記リング状通信路を介して制御パケットを受信した場合、当該制御パケットの制御情報の送信先として前記第３の情報処理部が指定されているときには、当該制御パケットから制御情報を取り込み、
当該制御パケットから制御情報を取り込んだ後、当該制御パケットに対応する応答パケットを、前記リング状通信路を介して受信した場合、前記受信した応答パケットに前記取り込んだ制御情報に対応する応答情報を付加して前記リング状通信路に送信する、
ことを特徴とする請求の範囲第１７項記載の情報送信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システムおよび情報送信方法に関する。
【背景技術】
【０００２】
複数のＣＰＵ（Central Processing Unit）を備えた情報処理システムのアーキテクチャの１つとして、ｃｃ−ＮＵＭＡ（Cache Coherent Non-Uniform Memory Access Model）がある。ｃｃ−ＮＵＭＡ方式の情報処理システムでは、共有メモリ空間の一部を構成する分散共有メモリとＣＰＵとを含む情報処理部が、複数接続される。また、複数のＣＰＵを備えた情報処理システムでは、各ＣＰＵが備えるキャッシュ部間のコヒーレンシ（データの整合性）を保つ機構が必要とされる。ｃｃ−ＮＵＭＡ方式の情報処理システムでは、ディレクトリと呼ばれる管理表を用いた機構が採用されることが多い。【０００３】
ディレクトリは、分散共有メモリ内のデータが他の情報処理部内のキャッシュ部にキャッシュされた場合に、キャッシュ先の情報処理部を示す情報を保持する。情報処理部は、自身に属する分散共有メモリ内のデータへのアクセス要求が送信されたとき、ディレクトリを参照する。情報処理部は、ディレクトリに基づき、アクセス要求の対象データが他の情報処理部にキャッシュされていると判定した場合に、「スヌープ（Snoop）」と呼ばれるリクエストを他の情報処理部に送信して、キャッシュコヒーレンシを保つような制御を行う。【０００４】
スヌープ要求は、少なくとも、アクセス要求の対象データをキャッシュするすべての情報処理部に対して送信される。また、それぞれキャッシュ部を備える複数のＣＰＵが１つの情報処理部内に設けられた情報処理システムでは、スヌープ要求がＣＰＵごとでなく情報処理部ごとに送信されるものがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−２３４８５４号公報
【特許文献２】特開２００９−２４５３２３号公報
【特許文献３】特開平１０−１８７６４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記のように、スヌープ要求は、少なくとも、アクセス要求の対象データを自身のキャッシュ部にキャッシュするすべての情報処理部に対して送信される。このため、対象データをキャッシュする情報処理部の数が増えるほど送信されるスヌープの数も多くなり、情報処理部間を接続する通信路の伝送負荷が大きくなるという問題があった。特に、情報処理部がリング状に接続されている場合には、複数の情報処理部のそれぞれを宛先とするスヌープが同一の通信路に伝送されることから、伝送負荷はより大きくなる。また、スヌープに限らず、他の種類の制御情報を複数の情報処理部に送信する際にも、送信先の情報処理部が多くなるほど通信路の伝送負荷は大きくなる。【０００７】
本発明はこのような課題に鑑みてなされたものであり、複数の情報処理部に対して制御情報を送信する際に通信路の伝送負荷を軽減できるようにした情報処理システムおよび情報送信方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、複数の情報処理部がリング状通信路によって接続された情報処理システムが提供される。この情報処理システムに含まれる複数の情報処理部のそれぞれは、制御情報と、当該制御情報の送信先とする１つ以上の情報処理部をそれぞれ指定する宛先情報とを含む制御パケットを、リング状通信路に送信する制御情報送信部と、リング状通信路を介して受信した制御パケットに、制御情報の送信先として自身が属する情報処理部が指定されている場合には、受信した制御パケットから制御情報を取り込むとともに、自身が属する情報処理部を制御情報の送信先として指定しないように宛先情報を書き替えた制御パケットをリング状通信路に送信し、受信した制御パケットに制御情報の送信先として自身が属する情報処理部が指定されていない場合には、受信した制御パケットをリング状通信路に送信する制御情報受信部と、を有する。【０００９】
また、上記目的を達成するために、上記の情報処理システムと同様の処理を行う情報送信方法が提供される。
【発明の効果】
【００１０】
上記の情報処理システムおよび情報送信方法によれば、複数の情報処理部に対して制御情報を送信する際にリング状通信路の伝送負荷を軽減できる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係る情報処理システムの構成例を示す図である。
【図２】第２の実施の形態に係る情報処理システムの全体構成例を示す図である。
【図３】情報処理システムの内部において送受信されるパケットのフォーマットを示す図である。
【図４】ホーム判定テーブルに保持される情報の例を示す図である。
【図５】持ち出し管理テーブルに保持される情報の例を示す図である。
【図６】送信元のＳＢからのリクエストパケットの送信に応じて、送信先のＳＢからＮＣレスポンスパケットが送信される処理を示す図である。
【図７】ＮＣスヌープパケットを受信したＳＢ内の処理を示す図である。
【図８】ＮＣレスポンスパケットが送信される際のＳＢ内の処理を示す図である。
【図９】ＮＣスヌープパケットおよびＮＣレスポンスパケットが伝送される様子を示す図である。
【図１０】ＮＣスヌープパケットが送信される別の処理例を示す図である。
【図１１】ノードの構成例およびその動作を示す図である。
【図１２】ＮＣの構成例およびその動作を示す図である。
【図１３】レスポンス受信判定テーブルに保持される情報の例を示す図である。
【図１４】ＩＤ変換テーブルに保持される情報の例を示す図である。
【図１５】レスポンス送信判定テーブルに保持される情報の例を示す図である。
【図１６】ＮＣスヌープ処理部によるＮＣスヌープパケット受信時の処理を示すフローチャートである。
【図１７】ＮＣスヌープ処理部によるレスポンスカウント処理を示すフローチャートである。
【図１８】ＮＣスヌープ処理部によるＮＣレスポンス受信処理を示すフローチャートである。
【図１９】ＮＣスヌープ処理部によるＮＣレスポンス送信処理を示すフローチャートである。
【図２０】ＮＣレスポンス処理部の構成例およびその動作を示す図である。
【図２１】ＮＣスヌープパケットを他のＮＣに送信した後のＮＣの処理例を示すフローチャートである。
【図２２】送信するスヌープパケットを判定する処理を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る情報処理システムの構成例を示す図である。
【００１３】
図１に示す情報処理システム１は、複数の情報処理部を備え、これらの複数の情報処理部はリング状に接続されている。図１の情報処理システム１は、例として４つの情報処理部１０ａ〜１０ｄを備え、情報処理部１０ａ〜１０ｄの間では、情報処理部１０ａ，１０ｂ，１０ｃ，１０ｄ，１０ａ，・・・の順にデータが伝送されるものとする。
【００１４】
情報処理部１０ａは、制御情報送信部１１ａと制御情報受信部１２ａとを備える。同様に、情報処理部１０ｂは、制御情報送信部１１ｂと制御情報受信部１２ｂとを備え、情報処理部１０ｃは、制御情報送信部１１ｃと制御情報受信部１２ｃとを備え、情報処理部１０ｄは、制御情報送信部１１ｄと制御情報受信部１２ｄとを備える。ここで、制御情報送信部１１ａ〜１１ｄはそれぞれ同様の処理を実行し、制御情報受信部１２ａ〜１２ｄはそれぞれ同様の処理を実行する。そこで、ここでは代表して、情報処理部１０ａが備える制御情報送信部１１ａおよび制御情報受信部１２ａの各処理について説明する。
【００１５】
制御情報送信部１１ａは、制御情報と、この制御情報の送信先とする情報処理部を指定する送信先情報とを含む制御パケットを、他の情報処理部に対して送信する。ここで、送信先情報には、制御情報の送信先とする情報処理部を複数指定することができる。なお、制御情報は、例えば、送信先の情報処理部に対して何らかの処理の実行を要求することを示す情報である。
【００１６】
制御情報受信部１２ａは、他の情報処理部から送信された制御パケットを受信したとき、受信した制御パケットに格納された送信先情報を基に、次のような処理を行う。制御情報受信部１２ａは、受信した制御パケット内の送信先情報において自身が属する情報処理部（すなわち情報処理部１０ａ）が指定されていない場合には、受信した制御パケットをそのまま他の情報処理部に転送する。一方、制御情報受信部１２ａは、受信した制御パケット内の送信先情報において自身が属する情報処理部が指定されている場合には、受信した制御パケットから制御情報を取り込む。制御情報の取り込み処理の例としては、受信した制御パケットに設定された制御情報を、情報処理部１０ａ内の所定の回路に受け渡す処理がある。これとともに、制御情報受信部１２ａは、受信した制御パケット内の送信先情報を、自身が属する情報処理部を制御情報の送信先として指定しないように書き替え、送信先情報を書き替えた制御パケットを、他の情報処理部に転送する。
【００１７】
ここで、例として、情報処理部１０ａの制御情報送信部１１ａから制御パケットが送信される場合の動作について説明する。情報処理部１０ａの制御情報送信部１１ａは、制御情報２１と送信先情報２２とを含む制御パケット２０を、情報処理部１０ｂに対して送信する。このとき、送信先情報２２には、制御情報２１の送信先として情報処理部１０ｂ，１０ｄが指定されているものとする。図１において、送信先情報２２内の「Ｂ」「Ｄ」は、送信先として情報処理部１０ｂ，１０ｄをそれぞれ指定したことを示す。なお、送信先情報２２において、制御情報２１の送信先を指定する情報が格納される形態は、図１に示すような形態に限らない。
【００１８】
情報処理部１０ｂの制御情報受信部１２ｂは、情報処理部１０ａから送信された制御パケット２０を受信すると、受信した制御パケット２０内の送信先情報２２を参照する。送信先情報２２には、送信先として情報処理部１０ｂが指定されているので、制御情報受信部１２ｂは、受信した制御パケット２０から制御情報２１を取り込む。なお、情報処理部１０ｂは、取り込んだ制御情報２１に応じた処理を実行する。
【００１９】
また、制御情報受信部１２ｂは、受信した制御パケット２０内の送信先情報２２を、情報処理部１０ｂを送信先として指定しないように書き替える。図１の例では、制御情報受信部１２ｂは、送信先情報２２に格納されていた「Ｂ」を消去することにより送信先情報２２を書き替える。制御情報受信部１２ｂは、送信先情報２２を書き替えた制御パケット２０を、情報処理部１０ｃに送信する。
【００２０】
次に、情報処理部１０ｃの制御情報受信部１２ｃは、情報処理部１０ｂから送信された制御パケット２０を受信すると、受信した制御パケット２０内の送信先情報２２を参照する。送信先情報２２には、送信先として情報処理部１０ｃが指定されていないので、制御情報受信部１２ｃは、受信した制御パケット２０をそのまま情報処理部１０ｄに送信する。
【００２１】
次に、情報処理部１０ｄの制御情報受信部１２ｄは、情報処理部１０ｃから送信された制御パケット２０を受信すると、受信した制御パケット２０内の送信先情報２２を参照する。送信先情報２２には、送信先として情報処理部１０ｄが指定されているので、制御情報受信部１２ｄは、受信した制御パケット２０から制御情報２１を取り込む。なお、情報処理部１０ｄは、取り込んだ制御情報２１に応じた処理を実行する。
【００２２】
以上の処理によれば、１つの制御パケットを使用して、複数の情報処理部に対して制御情報が送信される。このため、複数の情報処理部のそれぞれに対して個別の制御パケットを用いて制御情報を送信する場合と比較して、通信路における伝送負荷を軽減できる。特に、制御情報の送信先とする情報処理部の数が多くなるほど、伝送負荷を軽減する効果が大きくなる。
【００２３】
また、制御情報受信部１２ａ〜１２ｄは、受信した制御パケットにおいて、制御情報の送信先として自身が属する情報処理部のみが指定されていた場合には、制御パケットを他の情報処理部に送信しないようにしてもよい。図１の例では、情報処理部１０ｄの制御情報受信部１２ｄが制御パケット２０を受信したとき、制御パケット２０内の送信先情報２２には、送信先として情報処理部１０ｄのみが指定された状態となる。この場合、制御情報受信部１２ｄは、受信した制御パケット２０から制御情報２１を取り込んだ後、制御パケット２０を情報処理部１０ａに送信しない。このように、制御情報受信部が制御パケットを受信したとき、受信した制御パケット内の送信先情報において自身が属する情報処理部のみが指定されていた場合には、それ以上制御パケットが転送されなくなるので、通信路の伝送負荷が軽減される。
【００２４】
次に、各情報処理部が、キャッシュ部を備えるプロセッサコアと分散共有メモリとを有するように構成された情報処理システムの実施の形態について説明する。
〔第２の実施の形態〕
図２は、第２の実施の形態に係る情報処理システムの全体構成例を示す図である。
【００２５】
図２に示す情報処理システム１００は、複数のＳＢ（System Board）１１０ａ〜１１０ｄを備える。ＳＢ１１０ａ〜１１０ｄは、例えば、ラック内のスロットにそれぞれ挿入され、ラックのバックボードを介してリング状に接続される。ＳＢ１１０ａ〜１１０ｄは、それぞれ１つ以上のプロセッサコアを備えた情報処理部の一例であり、ＳＢ１１０ａ〜１１０ｄのそれぞれが備えるプロセッサコアが並列に処理を実行することで、情報処理システム１００は並列コンピュータとして動作する。なお、本実施の形態では４つのＳＢ１１０ａ〜１１０ｄを備えるが、ＳＢの数はこれに限ったものではない。
【００２６】
ＳＢ１１０ａは、複数のノード１２１ａ〜１２３ａ、ノードコントローラ（ＮＣ）１３１ａおよびメモリ１４１ａ〜１４４ａを備える。ノード１２１ａ〜１２３ａはそれぞれＣＰＵであり、ノード１２１ａ〜１２３ａのそれぞれには、プロセッサコアとキャッシュ部とを備えるコア部が１つ以上設けられている。
【００２７】
ノード１２１ａ〜１２３ａのそれぞれの間と、ノード１２１ａ〜１２３ａとＮＣ１３１ａとの間は、例えばＱＰＩ（Quick Path Interconnect）規格のバスによって接続されている。ＮＣ１３１ａは、自身が属するＳＢ１１０ａ内の各ノード１２１ａ〜１２３ａと、他のＳＢ内のＮＣとを接続する。メモリ１４１ａ，１４２ａ，１４３ａは、ノード１２１ａ，１２２ａ，１２３ａにそれぞれ接続され、メモリ１４４ａはＮＣ１３１ａに接続されている。
【００２８】
ＳＢ１１０ｂ〜１１０ｄも、ＳＢ１１０ａと同様の構成を有する。すなわち、ＳＢ１１０ｂ内のノード１２１ｂ，１２２ｂ，１２３ｂ、ＮＣ１３１ｂおよびメモリ１４１ｂ，１４２ｂ，１４３ｂ，１４４ｂは、ＳＢ１１０ａ内のノード１２１ａ，１２２ａ，１２３ａ、ＮＣ１３１ａおよびメモリ１４１ａ，１４２ａ，１４３ａ，１４４ａにそれぞれ対応する。また、ＳＢ１１０ｃ内のノード１２１ｃ，１２２ｃ，１２３ｃ、ＮＣ１３１ｃおよびメモリ１４１ｃ，１４２ｃ，１４３ｃ，１４４ｃは、ＳＢ１１０ａ内ノード１２１ａ，１２２ａ，１２３ａ、ＮＣ１３１ａおよびメモリ１４１ａ，１４２ａ，１４３ａ，１４４ａにそれぞれ対応する。さらに、ＳＢ１１０ｄ内のノード１２１ｄ，１２２ｄ，１２３ｄ、ＮＣ１３１ｄおよびメモリ１４１ｄ，１４２ｄ，１４３ｄ，１４４ｄは、ＳＢ１１０ａ内のノード１２１ａ，１２２ａ，１２３ａ、ＮＣ１３１ａおよびメモリ１４１ａ，１４２ａ，１４３ａ，１４４ａにそれぞれ対応する。
【００２９】
なお、各ＳＢに含まれるノードの数は、３つに限定されるものではない。
ＮＣ１３１ａ〜１３１ｄは、例えばファイバチャネルなどのインタフェースを通じて、リング状に接続されている。本実施の形態では、ＮＣ１３１ａ，１３１ｂ，１３１ｃ，１３１ｄ，１３１ａ，・・・の順にデータが転送されるものとする。
【００３０】
本実施の形態の情報処理システム１００は、ｃｃ−ＮＵＭＡ方式のアーキテクチャを採用したものである。メモリ１４１ａ〜１４４ａ，１４１ｂ〜１４４ｂ、１４１ｃ〜１４４ｃ、１４１ｄ〜１４４ｄは、情報処理システム１００内の各ノードによって共有されるアドレス空間の一部が割り当てられた分散共有メモリである。メモリ１４１ａ〜１４４ａ，１４１ｂ〜１４４ｂ、１４１ｃ〜１４４ｃ、１４１ｄ〜１４４ｄのそれぞれに対する制御および管理は、直結されたノードまたはＮＣが担う。メモリに対する制御および管理を行うノードを、そのメモリに対するホームノードと呼ぶ。例えば図２において、ノード１２１ａはメモリ１４１ａに対するホームノードである。
【００３１】
ノード内のコア部は、他のノード（ホームノード）の管理下にあるメモリのアドレスにアクセスすることができる。ここで、アクセス元のコア部が属するノードは、後述するリクエストパケットの発行元となることから、「リクエスタ（Requester）」と呼ばれる。アクセス先のメモリアドレスを管理するホームノードが、リクエスタが属するＳＢとは別のＳＢにある場合には、リクエスタはＮＣを介して他のＳＢ内のホームノードにアクセスする。また、リクエスタ内のコア部は、アクセスしたメモリのアドレスから読み出したデータをキャッシュすることができる。
【００３２】
図３は、情報処理システムの内部において送受信されるパケットのフォーマットを示す図である。
図３に示すリクエスト（Request）パケットは、ノード内のコア部が、他のノードに対して、他のノードの管理下にあるメモリのアドレスに対するアクセスを要求する際に、ノードから他のノードに送信されるパケットである。リクエストパケットは、パケット送信先のノードを示す「宛先ＩＤ」、アクセス元のノード（リクエスタ）を示す「リクエスタＩＤ」、リクエストパケットの発生ごとにユニークな番号が付与される「トランザクションＩＤ」、アクセス先のメモリアドレスを示す「アドレス」、および、アクセスの種類を示す「コマンド」の各フィールドを含む。また、リクエストパケットは、「コマンド」フィールドに設定される情報によっては「データ」フィールドを含む場合もある。
【００３３】
次に、「コマンド」フィールドに設定される情報の例を説明する。「Ｒｅａｄ＿Ｓ」は、アクセス先からデータを読み出し、読み出したアクセス先とリクエスタ側との共有型データを、リクエスタ側においてＳ（Shared）ステートでキャッシュすることを示す。「Ｒｅａｄ＿Ｅ」は、アクセス先からデータを読み出し、読み出し後にリクエスタ側において変更した排他型データを、リクエスタ側においてＥ（Exclusive）ステートでキャッシュすることを示す。「Ｗｒｉｔｅｂａｃｋ」は、リクエスタ側でキャッシュしているデータをアクセス先のメモリに書き戻すことを示す。「コマンド」フィールドに「Ｗｒｉｔｅｂａｃｋ」が設定された場合、リクエストパケットには、書き込みデータが格納された「データ」も設定される。
【００３４】
データレスポンス（DATA-Response）パケットは、リクエストパケットに応答して送信されるパケットである。データレスポンスパケットは、「宛先ＩＤ」、「リクエスタＩＤ」、「トランザクションＩＤ」、「アドレス」および「コマンド」の各フィールドを含む。また、対応するリクエストパケットの「コマンド」フィールドに、「Ｒｅａｄ＿Ｓ」または「Ｒｅａｄ＿Ｅ」が設定されていた場合、データレスポンスパケットは、アクセス先のアドレスから読み出されたデータが設定される「データ」フィールドをさらに含む。
【００３５】
データレスポンスパケットにおける「リクエスタＩＤ」、「トランザクションＩＤ」および「アドレス」の各フィールドには、対応するリクエストパケット内の「リクエスタＩＤ」、「トランザクションＩＤ」および「アドレス」の各フィールドとそれぞれ同じ値が設定される。データレスポンスパケットの「コマンド」フィールドには、例えば、対応するリクエストパケットの「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定されていた場合、読み出したデータをＳステートでキャッシュ部に登録することを指示する「Ｄ−Ｒｅｓｐｏｎｓｅ＿Ｓ」が設定される。また、対応するリクエストパケットの「コマンド」フィールドに「Ｒｅａｄ＿Ｅ」が設定されていた場合、読み出したデータをＥステートでキャッシュ部に登録することを指示する「Ｄ−Ｒｅｓｐｏｎｓｅ＿Ｅ」が設定される。また、対応するリクエストパケットの「コマンド」フィールドに「Ｗｒｉｔｅｂａｃｋ」が設定されていた場合、データの書き戻しが完了したことを通知する「Ｃｏｍｐｌｅｔｅ」が設定される。
【００３６】
スヌープパケットは、リクエストパケットによるアクセス先のアドレスのデータが、ホームノード以外の他のノードに持ち出されてキャッシュされていた場合に、その持ち出し先のノードに対して送信される。スヌープパケットは、データの持ち出し先のキャッシュ部に対してキャッシュコヒーレンスを保つスヌープ処理を実行させる場合に、スヌープ処理の制御情報を送信するために使用される。本実施の形態では、スヌープパケットとして、同一ＳＢ内のノード間またはノードとＮＣとの間で送信されるローカルスヌープ（Local-Snoop）パケットと、ホームノードが属するＮＣから他のＳＢのＮＣへ送信されるＮＣスヌープ（NC-Snoop）パケットとが使用される。
【００３７】
ローカルスヌープパケットは、「宛先ＩＤ」、「リクエスタＩＤ」、「トランザクションＩＤ」、「アドレス」および「コマンド」の各フィールドを含む。ローカルスヌープパケットにおける「アドレス」フィールドには、対応するリクエストパケット内の「アドレス」フィールドと同じ値が設定される。ローカルスヌープパケットの「コマンド」フィールドには、例えば、対応するリクエストパケットの「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定されていた場合、持ち出し先のキャッシュデータをＳステートにすることを指示する「Ｓｎｏｏｐ＿Ｓ」が設定される。また、対応するリクエストパケットの「コマンド」フィールドに「Ｒｅａｄ＿Ｅ」が設定されていた場合、持ち出し先のキャッシュデータを無効であることを示すＩ（Invalid）ステートにすることを指示する「Ｓｎｏｏｐ＿Ｉ」が設定される。
【００３８】
ＬＳレスポンス（LS-Response）パケットは、スヌープリクエストを行うローカルスヌープパケットに応答して、ローカルスヌープパケットによって指定されたスヌープ処理の結果が格納されるパケットである。ＬＳレスポンスパケットは、「宛先ＩＤ」、「リクエスタＩＤ」、「トランザクションＩＤ」、「アドレス」および「コマンド」の各フィールドを含む。ＬＳレスポンスパケットにおける「リクエスタＩＤ」、「トランザクションＩＤ」および「アドレス」の各フィールドには、対応するローカルスヌープパケット内の「リクエスタＩＤ」、「トランザクションＩＤ」および「アドレス」の各フィールドとそれぞれ同じ値が設定される。
【００３９】
ＬＳレスポンスパケットの「コマンド」には、例えば、対応するローカルスヌープパケットの「コマンド」フィールドに「Ｓｎｏｏｐ＿Ｓ」が設定されていた場合、「アドレス」フィールドに設定されたアドレスに対応するキャッシュデータを、ローカルスヌープパケットを送信したノードとＬＳレスポンスパケットを応答したノードとの共有型データにした旨のＳステートにしたことを通知する「Ｒｅｓｐｏｎｓｅ＿Ｓ」が設定される。また、対応するローカルスヌープパケットの「コマンド」において「Ｓｎｏｏｐ＿Ｉ」が設定されていた場合、「アドレス」に対応するキャッシュデータを、無効化した旨のＩステートにしたことを通知する「Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定される。
【００４０】
ＮＣスヌープパケットは、リクエストパケットによるアクセス先のアドレスのデータをキャッシュする１つ以上のノードに対して、キャッシュコヒーレンスを保つような処理を実行させる制御情報を、１つのパケットによって送信するものである。このＮＣスヌープパケットは、「宛先ＩＤ」、「リクエスタＩＤ」、「トランザクションＩＤ」、「アドレス」、「コマンド」に加え、「ブロードキャストフラグ」および「レスポンスフラグ」の各フィールドを含む。
【００４１】
ＮＣスヌープパケットの「アドレス」フィールドには、対応するリクエストパケット内の「アドレス」フィールドと同じ値が設定される。ＮＣスヌープパケットでは、「宛先ＩＤ」フィールドを使用しないため、特定のノードを指定しないような値（例えば、ブロードキャストを示す値）が設定される。なお、後述する「ブロードキャストフラグ」フィールドを用いて宛先を設定するため、ＮＣスヌープパケットには「宛先ＩＤ」フィールドが含まれなくてもよい。
【００４２】
ＮＣスヌープパケットの「コマンド」フィールドには、データの持ち出し先のノードのキャッシュ部に対して実行させる処理の種別が設定される。例えば、対応するリクエストパケットの「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定されていた場合、ＮＣスヌープパケットの「コマンド」フィールドには、持ち出し先のキャッシュデータを、ＮＣスヌープパケットを送信したノードとデータの持ち出し先のノードとの共有型データにする旨のＳステートにすることを指示する「ＮＣ−Ｓｎｏｏｐ＿Ｓ」が設定される。また、対応するリクエストパケットの「コマンド」フィールドにおいて「Ｒｅａｄ＿Ｅ」が設定されていた場合、持ち出し先のキャッシュデータを無効化した旨のＩステートにすることを指示する「ＮＣ−Ｓｎｏｏｐ＿Ｉ」が設定される。
【００４３】
「ブロードキャストフラグ」フィールドには、「宛先ＩＤ」フィールドの代わりに、パケットの宛先とする１つ以上のＮＣが設定される。「ブロードキャストフラグ」フィールドには、情報処理システム１００が備えるＮＣ１３１ａ〜１３１ｄのそれぞれに対応する複数のビットが設けられている。「ブロードキャストフラグ」フィールドのいずれかのビットに「１」が設定された場合、そのビットに対応するＮＣに対して、当該ＮＣが属するＳＢ内のノードにローカルスヌープパケットをブロードキャストすることが指示される。
【００４４】
「レスポンスフラグ」フィールドは、ＮＣスヌープパケットを受信したノードのうちの１つに、受信したＮＣスヌープパケットに対応するＮＣレスポンスパケットを送信するように指示することを目的として設けられる。「レスポンスフラグ」フィールドは、１ビットの領域を備え、ＮＣスヌープパケットが最初のＮＣから送信された初期状態では「１」とされる。その後、ＮＣスヌープパケットが「ブロードキャストフラグ」フィールドに指定されたノードに最初に受信されると、「レスポンスフラグ」フィールドは「０」に変更される。従って、「レスポンスフラグ」フィールドが「０」であれば、「ブロードキャストフラグ」フィールドによって宛先として指定されたＮＣの少なくとも１つにおいてＮＣスヌープパケットが受信済みであることを示す。
【００４５】
ＮＣレスポンス（NC-Response）パケットは、ＮＣスヌープパケットに応答して、ＮＣスヌープパケットの「コマンド」フィールドに指定された処理の結果が格納されるパケットである。ＮＣレスポンスパケットは、対応するＮＣスヌープパケットのブロードキャストフラグで指定された１つ以上のＮＣからの処理結果を、１つの応答パケットによってＮＣスヌープパケットの送信元のＮＣに通知するものである。このＮＣレスポンスパケットは、「宛先ＩＤ」、「リクエスタＩＤ」、「トランザクションＩＤ」、「アドレス」、「コマンド」に加え、「レスポンスフィールド」の各フィールドを含む。
【００４６】
ＮＣレスポンスパケットの「宛先ＩＤ」フィールドには、対応するＮＣスヌープパケットに設定されたアドレスについてのホームノードを示すＩＤが格納される。ＮＣレスポンスパケットの「リクエスタＩＤ」、「トランザクションＩＤ」および「アドレス」の各フィールドには、対応するＮＣスヌープパケット内の「リクエスタＩＤ」、「トランザクションＩＤ」および「アドレス」の各フィールドとそれぞれ同じ値が設定される。
【００４７】
ＮＣレスポンスパケットの「コマンド」フィールドには、例えば、対応するＮＣスヌープパケットの「コマンド」フィールドに「ＮＣ−Ｓｎｏｏｐ＿Ｓ」が設定されていた場合、「アドレス」に対応するキャッシュデータを、ＮＣスヌープパケットを送信したノードとデータの持ち出し先のノードとの共有型データにする旨のＳステートにしたことを通知する「ＮＣ−Ｒｅｓｐｏｎｓｅ＿Ｓ」が設定される。また、対応するＮＣスヌープパケットの「コマンド」フィールドに「ＮＣ−Ｓｎｏｏｐ＿Ｉ」が設定されていた場合、「アドレス」に対応するキャッシュデータを、無効化した旨のＩステートにしたことを通知する「ＮＣ−Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定される。
【００４８】
ＮＣレスポンスパケットの「レスポンスフィールド」には、情報処理システム１００が備えるＮＣ１３１ａ〜１３１ｄのそれぞれに対応するビットが設けられている。「ブロードキャストフラグ」のビットに「１」が設定された場合、そのビットに対応するＮＣが属するＳＢ内のキャッシュ部が、「コマンド」で指定された処理を完了したことを示す。例えば、「コマンド」で「ＮＣ−Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定され、「レスポンスフィールド」の第３ビットが「１」とされていた場合、第３ビットに対応するＮＣ１３１ｄが属するＳＢ１１０ｄにおいて、「アドレス」に対応するキャッシュデータが、無効化された旨のＩステートとされたことを示す。
【００４９】
図４は、ホーム判定テーブルに保持される情報の例を示す図である。
ＳＢ内のノードはそれぞれ、ホーム判定テーブル２０１を備える。各ノードが備えるホーム判定テーブル２０１は、共有メモリ空間のアドレスとホームノードのＩＤとを対応付けたものである。各ノードが備えるホーム判定テーブル２０１に登録されるノードのＩＤは、各ＳＢ内でローカルに使用されるＩＤである。そして、各ノードが備えるホーム判定テーブル２０１において、各ノードが属するＳＢ内のメモリ以外のアドレスに、各ノードが属するＳＢ内のＮＣのＩＤが対応付けられる。
【００５０】
図４（Ａ）では、ノード１２１ａ，１２２ａ，１２３ａがそれぞれ備えるホーム判定テーブル２０１の例を示している。図４（Ａ）のホーム判定テーブル２０１では、例えば、アドレス「０」からアドレス「ａａａａ−１」に対してノード１２１ａが対応付けられている。この場合、アドレス「０」からアドレス「ａａａａ−１」は、ノード１２１ａに接続されたメモリ１４１ａに割り当てられていることを意味する。また、ノード１２１ａが備えるホーム判定テーブル２０１では、アドレス「ｃｃｃｃ」からアドレス「ｚｚｚｚ−１」に対してＮＣ１３１ａが対応付けられている。この場合、アドレス「ｃｃｃｃ」からアドレス「ｚｚｚｚ−１」は、他のＳＢに接続されたメモリに割り当てられていることを意味する。
【００５１】
また、情報処理システム１００内のＮＣ１３１ａ〜１３１ｄは、それぞれホーム判定テーブル３０１を備える。ＮＣが備えるホーム判定テーブル３０１は、他のＳＢ内のメモリに割り当てられたアドレスと、他のＳＢ内のホームノードのＩＤとを対応付けたものである。ＮＣが備えるホーム判定テーブル３０１に登録されるノードのＩＤは、情報処理システム１００の全ＳＢでグローバルに使用されるＩＤである。すなわち、ホーム判定テーブル３０１に登録されるノードのＩＤは、情報処理システム１００の全ＳＢでユニークなものとなる。
【００５２】
図４（Ｂ）では、ＮＣ１３１ａが備えるホーム判定テーブル３０１の例を示している。ＮＣ１３１ａが備えるホーム判定テーブル３０１では、例えば、アドレス「ｃｃｃｃ」からアドレス「ｄｄｄｄ−１」に対してノード１２１ｂが対応付けられている。この場合、アドレス「ｃｃｃｃ」からアドレス「ｄｄｄｄ−１」には、ＳＢ１１０ｂ内のノード１２１ｂに割り当てられていることを意味する。
【００５３】
図５は、持ち出し管理テーブルに保持される情報の例を示す図である。
ＳＢ内のノードはそれぞれ、持ち出し管理テーブル２０２を備える。各ノードが備える持ち出し管理テーブル２０２には、各ノードの管理下にあるメモリに格納されたデータが他のノードに持ち出されてキャッシュされている場合に、そのデータが格納されたメモリのアドレスと、データのキャッシュステートと、持ち出し先のノードＩＤとが対応付けられて登録される。ノードが備える持ち出し管理テーブル２０２に登録されるノードのＩＤは、各ＳＢ内でローカルに使用されるＩＤである。そして、持ち出し先のノードが他のＳＢ内のノードである場合には、持ち出し先のノードＩＤとして、同じＳＢ内のＮＣを示すＩＤが登録される。
【００５４】
図５（Ａ）では、ノード１２３ｂが備える持ち出し管理テーブル２０２の例を示している。ノード１２３ｂが備える持ち出し管理テーブル２０２では、例えば、ノード１２３ｂの管理下にあるメモリ１４３ｂに割り当てられたアドレス「ｅｅｅｅ」に対して、当該アドレス「ｅｅｅｅ」に対するデータが排他型データである旨を表すＥステートとノード１２１ｂのＩＤとが対応付けられている。この場合、アドレス「ｅｅｅｅ」の位置のデータが、Ｅステートでノード１２１ｂに持ち出されていることを意味する。
【００５５】
また、情報処理システム１００内のＮＣ１３１ａ〜１３１ｄは、それぞれ持ち出し管理テーブル３０２を備えている。ＮＣが備える持ち出し管理テーブル３０２には、ＮＣが属するＳＢ内のメモリに格納されたデータが他のＳＢ内のノードに持ち出されてキャッシュされている場合に、そのデータが格納されたメモリのアドレスと、データのキャッシュステートと、持ち出し先のノードＩＤとがそれぞれ対応付けられて登録される。ＮＣが備える持ち出し管理テーブル３０２に登録されるノードのＩＤは、情報処理システム１００の全ＳＢでグローバルに使用されるＩＤである。
【００５６】
図５（Ｂ）では、ＮＣ１３１ｂが備える持ち出し管理テーブル３０２の例を示している。ＮＣ１３１ｂが備える持ち出し管理テーブル３０２では、例えば、ＳＢ１１０ｂ内のメモリ１４１ｂ〜１４３ｂのいずれかに割り当てられたアドレス「ｃｃｃｃ」に対して、Ｅステートとノード１２１ｃのＩＤとが対応付けられている。この場合、アドレス「ｃｃｃｃ」の位置のデータが、Ｅステートでノード１２１ｃに持ち出されていることを意味する。
【００５７】
次に、情報処理システム１００におけるメモリへのデータアクセス処理の一例を示し、図３に示したパケットの送受信処理について説明する。次の図６〜図９では一例として、ＳＢ１１０ａ内のノード１２１ａから、ＳＢ１１０ｂ内のノード１２１ｂに接続されたメモリ１４３ｂに対してアクセスした場合の処理について説明する。
【００５８】
図６は、送信元のＳＢからのリクエストパケットの送信に応じて、送信先のＳＢからＮＣレスポンスパケットが送信される処理を示す図である。
図６の例では、ノード１２１ａ内のコア部が、ＳＢ１１０ｂ内のノード１２３ｂに接続されたメモリ１４３ｂに割り当てられた、読み出し要求先のアドレスから、Ｅステートでのデータ読み出しを要求したものとする。以下、読み出し要求先のアドレスの位置に記憶されたデータを、「データ＃１」と呼ぶ。
【００５９】
ノード１２１ａは、ノード１２１ａが備えるホーム判定テーブル２０１を参照し、読み出し要求先のアドレスにＮＣ１３１ａが対応付けられていることを認識する。この場合、読み出し要求先のアドレスは他のＳＢに接続されたメモリに割り当てられていることから、ノード１２１ａは、ＮＣ１３１ａに対してリクエストパケットを送信する。リクエストパケットにおける「宛先ＩＤ」および「リクエスタＩＤ」の各フィールドには、それぞれＮＣ１３１ａ、ノード１２１ａを示すように設定され、「コマンド」フィールドには「Ｒｅａｄ＿Ｅ」が設定される。
【００６０】
リクエストパケットを受信したＮＣ１３１ａは、受信したリクエストパケットに設定されたデータ＃１のアドレスで、ＮＣ１３１ａが備えるホーム判定テーブル３０１を検索する。ＮＣ１３１ａは、ホーム判定テーブル３０１から、データ＃１のアドレスに対応付けられたノード１２３ｂのＩＤを抽出し、「宛先ＩＤ」フィールドをホーム判定テーブル３０１から抽出したホームノード（ノード１２３ｂ）のＩＤに書き替えたリクエストパケットを、隣接する転送先であるＳＢ１１０ｂのＮＣ１３１ｂに対して送信する。
【００６１】
ＳＢ１１０ａのＮＣ１３１ａから送信されたリクエストパケットを受信したＮＣ１３１ｂは、「宛先ＩＤ」フィールドから、受信したリクエストパケットが自身に接続されたノード宛であると判定する。ＮＣ１３１ｂは、受信したリクエストパケットに設定されたデータ＃１のアドレスで、ＮＣ１３１ｂが備える持ち出し管理テーブル３０２を検索する。
【００６２】
ここで、リクエストパケットに設定されたアドレスに対応する持ち出し先ノードのＩＤが持ち出し管理テーブル３０２から抽出されなかった場合には、ＮＣ１３１ｂは、リクエストパケットを「宛先ＩＤ」が示すノード１２３ｂに送信する。この場合、データ＃１がノード１２１ｂ，１２２ｂにも持ち出されていなければ、ノード１２３ｂは、要求されたデータ＃１をメモリ１４３ｂからＥステートで読み出し、読み出したデータ＃１を格納したデータレスポンスパケットをＮＣ１３１ｂに送信する。データレスポンスパケットは、ＮＣ１３１ｂからＮＣ１３１ｃ，１３１ｄを経由してＮＣ１３１ａに受信され、リクエスタであるＮＣ１３１ａ内のノード１２１ａに転送されて、一連の処理が終了する。
【００６３】
一方、ＮＣ１３１ａからのリクエストパケットに設定されたアドレスに対応する持ち出し先ノードのＩＤが持ち出し管理テーブル３０２から抽出された場合、ＮＣ１３１ｂは、データ＃１のキャッシュコヒーレンシを保つように制御するコマンドを、すべての持ち出し先に対して送信する。ここで、本実施の形態では、データ＃１の持ち出し先のノードが属するすべてのＮＣに対してそれぞれ個別にスヌープパケットを送信する代わりに、１つのＮＣスヌープパケットを送信することで、ＮＣ間を接続する通信路の伝送負荷を軽減する。
【００６４】
前述のように、ＮＣスヌープパケットには、ＮＣ１３１ａ〜１３１ｄがそれぞれ割り当てられたビットを備えるブロードキャストフラグが設定されている。ここで、ＮＣ１３１ｂが備える持ち出し管理テーブル３０２に登録されたデータ＃１の持ち出し先が、ＳＢ１１０ｃ内のノード１２１ｃ，１２２ｃおよびＳＢ１１０ｄ内のノード１２１ｄ，１２２ｄであったものとする。ブロードキャストフラグの各ビットが先頭からＮＣ１３１ａ，１３１ｂ，１３１ｃ，１３１ｄを示すものとすると、ＮＣ１３１ｂは、ブロードキャストフラグにおいてＮＣ１３１ｃ，１３１ｄにそれぞれ対応する第３ビットおよび第４ビットを「１」とし、他のビットを「０」としたＮＣスヌープパケットを、隣接する転送先であるＮＣ１３１ｃに対して送信する。
【００６５】
また、元のリクエストパケットの「コマンド」フィールドでは「Ｒｅａｄ＿Ｅ」が設定されていたことから、送信されるＮＣスヌープパケットの「コマンド」フィールドには、データ＃１のキャッシュデータをＩステートにするように指示する「ＮＣ−Ｓｎｏｏｐ＿Ｉ」が設定される。
【００６６】
なお、ＮＣ１３１ａからのリクエストパケットに設定されたアドレスに対応する持ち出し先ノードのＩＤが、持ち出し管理テーブル３０２から抽出された場合であっても、リクエストパケット内の「コマンド」フィールドの設定値と、持ち出されたデータのキャッシュステートとの組み合わせによっては、ＮＣスヌープパケットが送信されずに、リクエストパケットがホームノードに送信される場合がある。
【００６７】
図７は、ＮＣスヌープパケットを受信したＳＢ内の処理を示す図である。
ＮＣ１３１ｂからのＮＣスヌープパケットを受信したＮＣ１３１ｃは、受信したＮＣスヌープパケット内のブロードキャストフラグを参照する。ブロードキャストフラグにおいては、ＮＣ１３１ｃに対応するビットが「１」とされていることから、ＮＣ１３１ｃは、受信したＮＣスヌープパケットの内容に基づくローカルスヌープパケットを生成し、ＳＢ１１０ｃ内のノード１２１ｃ〜１２３ｃの全てにブロードキャストする。ブロードキャストされるローカルスヌープパケットの「コマンド」フィールドには、ＮＣスヌープパケットの「コマンド」フィールドに基づき、「Ｓｎｏｏｐ＿Ｉ」が設定される。
【００６８】
また、ＮＣ１３１ｃは、ブロードキャストフラグにおけるＮＣ１３１ｃに対応するビットを「０」に書き替えたＮＣスヌープパケットを、隣接する転送先であるＮＣ１３１ｄに送信する。ＮＣスヌープパケットを受信したＮＣ１３１ｄは、受信したＮＣスヌープパケット内のブロードキャストフラグを参照する。ブロードキャストフラグにおいては、ＮＣ１３１ｄに対応するビットが「１」とされていることから、ＮＣ１３１ｄは、受信したＮＣスヌープパケットの内容に基づくローカルスヌープパケットを生成し、ＳＢ１１０ｄ内のノード１２１ｄ〜１２３ｄの全てにブロードキャストする。ブロードキャストされるローカルスヌープパケットの「コマンド」フィールドには、ＮＣスヌープパケットの「コマンド」フィールドに基づき、「Ｓｎｏｏｐ＿Ｉ」が設定される。
【００６９】
また、ＮＣ１３１ｄは、受信したＮＣスヌープパケットのうち、ブロードキャストフラグにおけるＮＣ１３１ｄに対応するビットを「０」に書き替える。このとき、ブロードキャストフラグの全ビットが「０」となることから、ＮＣ１３１ｄは、ＮＣスヌープパケットが必要なすべてのＮＣに受信されたと判定して、ＮＣスヌープパケットを隣接する転送先であるＮＣ１３１ａに送信しない。
【００７０】
図８は、ＮＣレスポンスパケットが送信される際のＳＢ内の処理を示す図である。
ＳＢ１１０ｃにおいて、ＮＣ１３１ｃからノード１２１ｃ〜１２３ｃに対してローカルスヌープパケットがブロードキャストされると、ローカルスヌープパケットを受信したノード１２１ｃ〜１２３ｃは、それぞれ要求された処理に対する応答を行う。図８の例では、ノード１２１ｃ，１２２ｃのそれぞれにデータ＃１がキャッシュされている。ノード１２１ｃ，１２２ｃの各キャッシュ部は、受信したローカルスヌープパケットの「アドレス」フィールドに対応するキャッシュデータをＩステートとし、「コマンド」フィールドに処理結果として「Ｒｅｓｐｏｎｓｅ＿Ｉ」を設定したＬＳ−レスポンスパケットをＮＣ１３１ｃに送信する。また、ノード１２３ｃは、ローカルスヌープパケットの「アドレス」フィールドに対応するキャッシュデータを元々保持していないことから、キャッシュ部を特に制御することなく、「コマンド」フィールドに「ＮＣ−Ｒｅｓｐｏｎｓｅ＿Ｉ」を設定したＬＳレスポンスパケットをＮＣ１３１ｃに送信する。
【００７１】
ＮＣスヌープパケットに対する応答であるＮＣレスポンスパケットは、ブロードキャストフラグにおいて指定されたＮＣのうち、最初にＮＣスヌープパケットを受信したＮＣ（図８ではＮＣ１３１ｃ）によって生成され、送信される。ＮＣ１３１ｃは、ＳＢ１１０ｃ内のすべてのノード１２１ｃ〜１２３ｃからＬＳレスポンスパケットを受信すると、レスポンスフィールドにおけるＮＣ１３１ｃに対応するビットに「１」を設定したＮＣレスポンスパケットを、隣接する転送先であるＮＣ１３１ｄに送信する。
【００７２】
なお、ＮＣレスポンスパケットの「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドには、ＮＣスヌープパケットの「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドと同じ値がそれぞれ設定される。また、ＮＣレスポンスパケットの「コマンド」フィールドには「ＮＣ−Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定される。
【００７３】
一方、ＳＢ１１０ｄにおいても、ＮＣ１３１ｄからノード１２１ｄ〜１２３ｄに対してローカルスヌープパケットがブロードキャストされると、ローカルスヌープパケットを受信したノード１２１ｄ〜１２３ｄは、要求された処理に対する応答を行う。ＮＣ１３１ｄは、ＳＢ１１０ｄ内のすべてのノード１２１ｄ〜１２３ｄからＬＳレスポンスパケットを受信し、かつ、ＮＣスヌープパケットと同じ「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールド値が設定されたＮＣレスポンスパケットを受信すると、次の処理を行う。ＮＣ１３１ｄは、受信したＮＣレスポンスパケットのうち、レスポンスフィールドにおけるＮＣ１３１ｄに対応するビットを「１」に書き替え、書き替え後のＮＣレスポンスパケットを、隣接する転送先であるＮＣ１３１ａに送信する。
【００７４】
ＮＣ１３１ａは、同じ「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールド値が設定されたＮＣスヌープパケットに基づく処理を過去に行っていないことから、受信したＮＣレスポンスパケットをそのままＮＣ１３１ｂに転送する。これにより、ＮＣ１３１ｂは、データ＃１のすべての持ち出し先のノードから、ＮＣスヌープパケットによって要求した処理についての完了通知を受信する。
【００７５】
なお、図示しないが、ＮＣレスポンスパケットを受信したＮＣ１３１ｂは、データ＃１のホームノードであるノード１２３ｂに対して、持ち出されたデータに対するリクエストパケットを送信する。ノード１２３ｂは、データ＃１が他のＳＢに持ち出されていると判定して、ＮＣ１３１ｂに対してローカルスヌープパケットを送信する。ＮＣ１３１ｂは、ローカルスヌープパケットの応答として、ＮＣスヌープパケットに格納された処理結果（ここでは、キャッシュデータをＩステートとしたことを通知するコマンドである「Ｒｅｓｐｏｎｓｅ＿Ｉ」）を設定したＬＳレスポンスパケットを、ノード１２３ｂに送信する。
【００７６】
ＬＳレスポンスパケットを受信したノード１２３ｂは、キャッシュコヒーレンシが保たれた状態であると判定し、データ＃１をＥステートでメモリ１４３ｂから読み出し、読み出したデータ＃１を格納したデータレスポンスパケットをＮＣ１３１ｂに送信する。データレスポンスパケットは、ＮＣ１３１ｂからＮＣ１３１ｃ，１３１ｄを経由してＮＣ１３１ａに受信され、リクエスタであるＮＣ１３１ａ内のノード１２１ａに転送されて、一連の処理が終了する。
【００７７】
ここで、図９は、ＮＣスヌープパケットおよびＮＣレスポンスパケットが伝送される様子を示す図である。
まず、ＮＣスヌープパケットの伝送について説明する。図７で説明したように、ＮＣ１３１ｂは、ＮＣスヌープパケットを送信する際に、ＮＣ１３１ｃ，１３１ｄにそれぞれ対応するブロードキャストフラグの第３ビットおよび第４ビットを「１」とし、他のビットを「０」とする。また、ＮＣ１３１ｂは、ＮＣスヌープパケット内のレスポンスフラグを初期値「１」とする。
【００７８】
ＮＣ１３１ｂからのＮＣスヌープパケットを受信したＮＣ１３１ｃは、ブロードキャストフラグにおける自身を指示するビットが「０」である場合、ＮＣスヌープパケットをそのまま隣接する転送先に送信する。しかしながら、図９の例では、ブロードキャストフラグにおけるＮＣ１３１ｃを指示するビットが「１」であることから、ＮＣ１３１ｃは、ＮＣスヌープパケットの内容に基づき、自身が属するＳＢ１１０ｃ内のノードにローカルスヌープパケットをブロードキャストする。
【００７９】
また、ＮＣ１３１ｃは、ブロードキャストフラグにおける自身を指示するビットを「０」に書き替える。さらに、ＮＣ１３１ｃは、初期値「１」とされたレスポンスフラグを「０」に書き替える。ここで、書き替え後のブロードキャストフラグに「１」が存在することから、ＮＣ１３１ｃは、ブロードキャストフラグおよびレスポンスフラグを書き替えたＮＣスヌープパケットを、隣接するＮＣ１３１ｄに送信する。
【００８０】
ＮＣ１３１ｃからのＮＣスヌープパケットを受信したＮＣ１３１ｄは、ブロードキャストフラグにおける自身を指示するビットが「１」であることから、ＮＣスヌープパケットの内容に基づき、自身が属するＳＢ１１０ｄ内のノードにローカルスヌープパケットをブロードキャストする。また、ＮＣ１３１ｃは、ブロードキャストフラグにおける自身を指示するビットを「０」に書き替える。ここで、書き替え後のブロードキャストフラグの全ビットが「０」になることから、ＮＣ１３１ｄは、ＮＣスヌープパケットをそれ以上送信しない。
【００８１】
以上のＮＣスヌープパケットを用いることにより、データの持ち出し先のノードが属するすべてのＮＣに対して、「コマンド」フィールドで指定される処理を１つのパケットによって要求することができるようになる。このため、データが複数のノードに持ち出されたときに、ホームノードに接続したＮＣがデータの持ち出し先のすべてのノードに対して個別にスヌープパケットを送信する場合と比較して、ＮＣ間を接続する通信路の伝送負荷を軽減することができる。
【００８２】
次に、ＮＣレスポンスパケットの伝送について説明する。ＮＣスヌープパケットのブロードキャストフラグによって指定されたＮＣは、ＮＣスヌープパケットのレスポンスフラグを参照する。レスポンスフラグが「１」である場合、ＮＣは、受信したＮＣスヌープパケットに対応するＮＣレスポンスパケットを生成して送信する。
【００８３】
図９の例では、ＮＣ１３１ｃがＮＣスヌープパケットを受信したとき、受信したＮＣスヌープパケットのレスポンスフラグは「１」となっている。このため、ＮＣ１３１ｃは、受信したＮＣスヌープパケットに対応するＮＣレスポンスパケットを生成する。ＮＣ１３１ｃは、ＳＢ１１０ｂ内のすべてのノードからローカルスヌープパケットを受信し、ＳＢ１１０ｂ内でキャッシュされたデータ＃１がすべて無効化されたことを確認すると、ＮＣレスポンスパケットをＮＣ１３１ｄに送信する。このとき、送信されるＮＣレスポンスパケットにおいては、「コマンド」フィールドに対してキャッシュデータの無効化が完了したことを示す「ＮＣ−Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定され、「レスポンスフィールド」におけるＮＣ１３１ｂを指示するビットが「１」とされる。
【００８４】
ＮＣ１３１ｄは、ＮＣ１３１ｃからのＮＣレスポンスパケットを受信し、かつ、ＳＢ１１０ｃ内のすべてのノードからローカルスヌープパケットを受信して、ＳＢ１１０ｃ内でキャッシュされたデータ＃１がすべて無効化されたことを確認すると、ＮＣレスポンスパケットをＮＣ１３１ａに転送する。このとき、転送されるＮＣレスポンスパケットにおいては、「レスポンスフィールド」におけるＮＣ１３１ｃを指示するビットが「１」とされる。
【００８５】
ＮＣ１３１ａは、ＮＣ１３１ｄからのＮＣレスポンスパケットを受信する。しかし、ＮＣ１３１ａは、受信したＮＣレスポンスパケットに設定されたものと同じ「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールド値が設定されたＮＣスヌープパケットを過去に受信していない。この場合、ＮＣ１３１ａは、受信したＮＣレスポンスパケットをそのままＮＣ１３１ｂに転送する。
【００８６】
ＮＣ１３１ｂは、ＮＣ１３１ａからのＮＣレスポンスパケットを受信する。ＮＣ１３１ｂは、受信したＮＣレスポンスパケットの「コマンド」フィールドに「Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定され、レスポンスフィールドにおけるＮＣ１３１ｂ，１３１ｃに対応するビットが「１」とされていることを確認する。ＮＣ１３１ｂは、確認したこれらの情報から、ＳＢ１１０ｂおよびＳＢ１１０ｃの内部にそれぞれキャッシュされたデータが無効化されたことを認識する。
【００８７】
以上のＮＣレスポンスパケットを用いることにより、ＮＣスヌープパケットの送信元のＮＣは、データの持ち出し先とされたすべてのノードにおいてＮＣスヌープパケットにより指示した処理が完了したことを、１つのパケットによって認識できるようになる。このため、データが複数のノードに持ち出された場合に、各ノードに対して処理を要求するスヌープパケットだけでなく、スヌープパケットに対するレスポンスパケットのデータ量も抑制することができる。従って、ＮＣ間を接続する通信路の伝送負荷を一層軽減することができる。
【００８８】
図１０は、ＮＣスヌープパケットが送信される別の処理例を示す図である。
ＮＣは、図６の例のように他のＮＣからのリクエストパケットを受信した場合の他、図１０に示すように、同じＳＢ内のノードからローカルスヌープパケットを受信した場合にも、ＮＣスヌープパケットを送信する。
【００８９】
図１０では、ノード１２２ｂ内のコア部が、ノード１２３ｂに接続されたメモリ１４３ｂに割り当てられたアドレスからのＥステートでのデータ読み出しを要求したものとする。ノード１２３ｂは、自身が備えるホーム判定テーブル（図示せず）に基づいて、読み出し要求先のアドレスに対応するホームノードがノード１２３ｂであることを認識する。ノード１２３ｂは、ホームノードであるノード１２３ｂに対してリクエストパケットを送信する。リクエストパケットの「コマンド」フィールドには「Ｒｅａｄ＿Ｅ」が設定される。
【００９０】
リクエストパケットを受信したノード１２３ｂは、受信したリクエストパケットに設定されたアドレスで、ノード１２３ｂが備える持ち出し管理テーブル２０２を検索する。ここで、リクエストパケットに設定されたアドレスに対応する持ち出し先ノードのＩＤが持ち出し管理テーブル２０２から抽出されなかった場合には、ノード１２３ｂは、要求されたデータ＃１をメモリ１４３ｂからＥステートで読み出し、読み出したデータ＃１を格納したデータレスポンスパケットをノード１２２ｂに送信する。
【００９１】
一方、リクエストパケットに設定されたアドレスに対応する持ち出し先ノードのＩＤが持ち出し管理テーブル２０２から抽出された場合、ノード１２３ｂは、「コマンド」フィールドに「Ｓｎｏｏｐ＿Ｉ」を設定したローカルスヌープパケットをＮＣ１３１ｂに送信する。ここで、持ち出し先ノードがＳＢ１１０ｃ，１１０ｄにそれぞれ存在するものとすると、ＮＣ１３１ｂは、ブロードキャストフラグにおけるＳＢ１１０ｃ、１１０ｄにそれぞれ対応するビットを「１」としたＮＣスヌープパケットを送信する。以後、ＮＣ１３１ｂがＮＣレスポンスパケットを受信するまでの処理は、図７，図８で説明した処理と同様である。ＮＣスヌープパケットが送信されることで、データ＃１のキャッシュコヒーレンシを保つように制御するコマンドがすべての持ち出し先ノードに対して送信される。
【００９２】
なお、ノード１２２ｂからのリクエストパケットの設定されたアドレスに対応する持ち出し先ノードのＩＤが持ち出し管理テーブル２０２から抽出された場合であっても、リクエストパケット内の「コマンド」フィールドの設定値と、持ち出されたデータのキャッシュステートとの組み合わせによっては、ノード１２３ｂからローカルスヌープパケットが送信されない場合がある。
【００９３】
図示しないが、ＮＣレスポンスパケットを受信したＮＣ１３１ｂは、ノード１２３ｂに対してローカルレスポンスパケットを送信することで、データ＃１の持ち出し先とされたすべてのノードにおいて「Ｓｎｏｏｐ＿Ｉ」が示す処理が完了したことをノード１２３ｂに通知する。「Ｓｎｏｏｐ＿Ｉ」が示す処理が完了したことを認識したノード１２３ｂは、要求されたデータ＃１をメモリ１４３ｂからＥステートで読み出し、読み出したデータ＃１を格納したデータレスポンスパケットをノード１２２ｂに送信する。
【００９４】
次に、ノードおよびＮＣの構成例と、ノードおよびＮＣの詳細な動作について説明する。まず、図１１は、ノードの構成例およびその動作を示す図である。この図１１では例として、ＳＢ１１０ａ内のノード１２１ａの構成例を示すが、他のノードも図１１と同様の構成を有する。なお、この図１１以降、ノードの内部に備えられる構成については、すべてのノードについて共通の符号を付して説明する。
【００９５】
ノード１２１ａは、コア部２１０，２２０、メモリ制御部２３１，２３２、リクエスト生成部２４１、ローカルスヌープ生成部２４２、ＬＳレスポンス生成部２４３、データレスポンス生成部２４４、アービタ２５１，２５２、ホーム判定テーブル２０１および持ち出し管理テーブル２０２を備えている。
【００９６】
コア部２１０は、図示しないプロセッサコアと、キャッシュ部２１１とを備える。コア部２２０も同様に、図示しないプロセッサコアと、キャッシュ部２２１とを備える。キャッシュ部２１１，２２１は、それぞれ、キャッシュメモリと、キャッシュメモリを制御するキャッシュ制御部とを備える。コア部２１０，２２０は、それぞれ同様の処理を実行可能であるので、ここではコア部２１０の動作についてのみ説明する。
【００９７】
コア部２１０は、他のノードの管理下にあるメモリ内のデータ（ただし、キャッシュ部２１１にキャッシュされていないデータ）にアクセスする場合、アクセス先のアドレスとコマンドとを含むリクエストを、アービタ２５１を介してリクエスト生成部２４１に送信する。コマンドが「Ｗｒｉｔｅｂａｃｋ」である場合、リクエストには書き戻し対象のデータが含まれる。
【００９８】
コア部２１０からのリクエストを受信したリクエスト生成部２４１は、ホーム判定テーブル２０１を参照する。前述のように、ホーム判定テーブル２０１には、共有メモリ空間のアドレスとホームノードのＩＤとが対応づけられている。リクエスト生成部２４１は、ホーム判定テーブル２０１から、コア部２１０からのリクエストに含まれるアドレスに対応付けられたノードＩＤを抽出し、抽出したノードＩＤを「宛先ＩＤ」フィールドに設定したリクエストパケットを送信する。ここで、アクセス先のアドレスに対応するホームノードがＳＢ１１０ａ内のノードである場合、リクエストパケットはＳＢ１１０ａ内のホームノードに送信される。一方、アクセス先のアドレスに対応するホームノードがＳＢ１１０ａの外部にある場合、リクエストパケットはＳＢ１１０ａ内のＮＣ１３１ａに送信される。
【００９９】
また、コア部２１０のキャッシュ部２１１は、ＳＢ１１０ａ内の他のノードまたはＮＣ１３１ａからデータレスポンスパケットを受信すると、データレスポンスパケットの「コマンド」フィールドに応じた処理を行う。受信したデータレスポンスパケットの「コマンド」フィールドがデータ読み出しの完了を示すものである場合、キャッシュ部２１１は、データレスポンスパケットの「データ」フィールドから抽出した読み出しデータを、「コマンド」フィールドで示されるステータスでキャッシュメモリに書き込む。一方、受信したデータレスポンスパケットの「コマンド」フィールドがデータ書き込みの完了を示すものである場合、キャッシュ部２１１は、書き込みの完了を認識する。
【０１００】
さらに、コア部２１０のキャッシュ部２１１は、ＳＢ１１０ａ内の他のノードまたはＮＣ１３１ａからローカルスヌープパケットを受信すると、ローカルスヌープパケットの「コマンド」フィールドで示される処理を行う。例えば、キャッシュ部２１１は、受信したローカルスヌープパケットの「アドレス」フィールドに対応するキャッシュデータがキャッシュメモリに存在する場合、キャッシュデータのステータスを「コマンド」フィールドで指定されるステータスに変更する。
【０１０１】
キャッシュ部２１１は、ローカルスヌープパケットの「コマンド」フィールドで指示された処理を完了すると、指示された処理が完了されたことを、アービタ２５２を介してＬＳレスポンス生成部２４３に通知する。ＬＳレスポンス生成部２４３は、キャッシュ部２１１において処理が完了したことを通知する情報を「コマンド」フィールドに設定したＬＳレスポンスパケットを生成し、ローカルスヌープパケットの送信元に対して送信する。
【０１０２】
メモリ制御部２３１は、ＳＢ１１０ａ内の他のノードまたはＮＣ１３１ａからリクエストパケットを受信すると、持ち出し管理テーブル２０２を参照する。前述のように、持ち出し管理テーブル２０２には、ノード１２１ａの管理下にあるメモリ１４１ａに格納されたデータが他のノードに持ち出されてキャッシュされている場合に、そのデータが格納されたメモリ１４１ａのアドレスと、データのキャッシュステートと、持ち出し先のノードＩＤとが対応付けられて登録されている。
【０１０３】
メモリ制御部２３１は、持ち出し管理テーブル２０２から得られる情報と、受信したリクエストパケット内の「コマンド」フィールドの設定値とに応じて、ローカルスヌープパケットとデータレスポンスパケットのどちらを送信すべきかを判定する。受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル２０２のレコードに持ち出し先のノードＩＤが登録されていない場合、メモリ制御部２３１は、データレスポンスパケットを送信すべきと判定する。また、受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル２０２のレコードに持ち出し先のノードＩＤが登録されている場合でも、リクエストパケット内の「コマンド」フィールドに「Ｗｒｉｔｅｂａｃｋ」が設定されている場合、および、「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定され、かつデータのキャッシュステートがステートＳである場合には、メモリ制御部２３１は、データレスポンスパケットを送信すべきと判定する。一方、受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル２０２のレコードに持ち出し先のノードＩＤが登録されているときには、リクエストパケット内の「コマンド」フィールドに「Ｒｅａｄ＿Ｅ」が設定されている場合、および、「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定され、かつデータのキャッシュステートがステートＥである場合には、メモリ制御部２３１は、ローカルスヌープパケットを送信すべきと判定する。
【０１０４】
ローカルスヌープパケットを送信すべきと判定した場合、メモリ制御部２３１は、持ち出し先のノードＩＤをローカルスヌープ生成部２４２に通知する。ローカルスヌープ生成部２４２は、メモリ制御部２３１から通知されたノードＩＤを「宛先ＩＤ」フィールドに設定したローカルスヌープパケットを送信する。持ち出し先のノードがＳＢ１１０ａ内のノードである場合、ローカルスヌープパケットはＳＢ１１０ａ内のノードに送信される。一方、持ち出し先のノードがＳＢ１１０ａの外部にある場合、ローカルスヌープパケットはＳＢ１１０ａ内のＮＣ１３１ａに送信される。
【０１０５】
一方、データレスポンスパケットを送信すべきと判定した場合、メモリ制御部２３１は、メモリ１４１ａにアクセスする。リクエストパケットの「コマンド」フィールドにより読み出しが要求されていた場合、メモリ制御部２３１は、リクエストパケットに設定されたアドレスの位置からデータを読み出す。また、リクエストパケットの「コマンド」フィールドに「Ｗｒｉｔｅｂａｃｋ」が設定されていた場合、メモリ制御部２３１は、リクエストパケットの「データ」フィールドから抽出したデータを、リクエストパケットに設定されたアドレスの位置に書き込む。
【０１０６】
メモリ制御部２３１は、メモリ１４１ａへのアクセス処理が完了すると、データレスポンス生成部２４４に対して処理の完了を通知する。この場合、データレスポンス生成部２４４は、メモリ制御部２３１が受信したリクエストパケットの送信元に対して、データレスポンスパケットを送信する。リクエストパケットの「コマンド」フィールドによりデータの読み出しが要求されていた場合、送信されるデータレスポンスパケットの「データ」フィールドに、メモリ制御部２３１によってメモリ１４１ａから読み出されたデータが格納される。
【０１０７】
また、データレスポンス生成部２４４は、メモリ制御部２３１が受信したリクエストパケットの「コマンド」フィールドに「Ｒｅａｄ＿Ｅ」が設定されていた場合、持ち出し管理テーブル２０２を更新する。データレスポンス生成部２４４は、持ち出し管理テーブル２０２における、リクエストパケットに設定されたアドレスに対応するレコードに対して、ステートをＥにするとともに、持ち出し先として「リクエスタＩＤ」フィールドの値を登録する。
【０１０８】
メモリ制御部２３２は、ＳＢ１１０ａ内の他のノードまたはＮＣ１３１ａからＬＳレスポンスパケットを受信すると、受信したＬＳレスポンスパケットをデータレスポンス生成部２４４に転送する。このとき、メモリ制御部２３２は、受信したＬＳレスポンスパケットに対応するリクエストパケットの「コマンド」フィールドによりデータの読み出しが要求されていた場合には、メモリ１４１ａにアクセスし、ＬＳレスポンスパケットに設定されたアドレスからデータを読み出す。なお、ここで言う「受信したＬＳレスポンスパケットに対応するリクエストパケット」とは、受信したＬＳレスポンスパケットと「トランザクションＩＤ」フィールドの値が同じであるリクエストパケットを指す。メモリ制御部２３２は、メモリ１４１ａからデータを読み出した場合、読み出したデータをデータレスポンス生成部２４４に送信する。
【０１０９】
メモリ制御部２３２を通じてＬＳレスポンスパケットを受信したデータレスポンス生成部２４４は、「リクエスタＩＤ」フィールドが示すノードまたはＮＣ１３１ａを「宛先ＩＤ」フィールドに設定したデータレスポンスパケットを送信する。メモリ制御部２３２によってメモリ１４１ａからデータが読み出された場合には、読み出されたデータがデータレスポンスパケットの「データ」フィールドに格納される。
【０１１０】
また、データレスポンス生成部２４４は、メモリ制御部２３２を通じたＬＳレスポンスパケットの受信に応じてデータリクエストパケットを送信した場合には、持ち出し管理テーブル２０２における、受信したＬＳレスポンスパケットに設定されたアドレスに対応するレコードを更新する。データレスポンス生成部２４４は、持ち出し管理テーブル２０２における更新前のレコード内の「コマンド」および「ステート」の各フィールドの値と、受信したＬＳレスポンスパケット内の「コマンド」フィールドの値との組み合わせに応じて、レコード内の「ステート」および「持ち出し先ＩＤ」の各フィールドを更新する。
【０１１１】
次に、図１２は、ＮＣの構成例およびその動作を示す図である。この図１２では例として、ＳＢ１１０ａ内のＮＣ１３１ａの構成例を示すが、他のＮＣ１３１ｂ〜１３１ｄも図１２と同様の構成を有する。なお、この図１２以降、ＮＣの内部に備えられる構成については、すべてのＮＣについて共通の符号を付して説明する。
【０１１２】
ＮＣ１３１ａは、リクエスト送信部３１１、ＮＣスヌープ生成部３１２、リクエスト受信処理部３１３、ＮＣスヌープ処理部３１４、ＮＣレスポンス処理部３１５、データレスポンス送信部３１６、リクエスタ判定部３２１、宛先判定部３２２、ＢＣ（Broadcast）判定部３２３、ＮＣレスポンス判定部３２４、宛先判定部３２５およびアービタ３３１〜３３５を備えている。また、ＮＣ１３１ａは、処理の際に利用される情報として、前述したホーム判定テーブル３０１および持ち出し管理テーブル３０２の他、ＩＤ変換テーブル３０３、レスポンス受信判定テーブル３０４およびレスポンス送信判定テーブル３０５を備える。
【０１１３】
リクエスト送信部３１１は、ＮＣ１３１ａが属するＳＢ１１０ａ内のノードからリクエストパケットを受信すると、ホーム判定テーブル３０１から、リクエストパケットに設定されたアドレスに対応するホームノードのＩＤを抽出する。リクエスト送信部３１１は、受信したリクエストパケットの「宛先ＩＤ」フィールドを、ホーム判定テーブル３０１から抽出したホームノードのＩＤに書き替える。これとともに、リクエスト送信部３１１は、受信したリクエストパケットの「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値を、ＮＣ１３１ａの内部でローカルに使用されるＩＤから、情報処理システム１００に含まれる複数の各ＮＣでグローバルに使用されるＩＤに書き替える。リクエスト送信部３１１は、「宛先ＩＤ」「リクエスタＩＤ」「トランザクションＩＤ」の各フィールドの値を書き替えたリクエストパケットを、アービタ３３１を介して、隣接する送信先であるＮＣ１３１ｂに送信する。
【０１１４】
なお、以下の説明では、ＳＢ内でローカルに使用されるＩＤを「ローカルＩＤ」と呼び、情報処理システム１００に含まれる各ＳＢでグローバルに使用されるＩＤを「グローバルＩＤ」と呼ぶ。
【０１１５】
リクエスタ判定部３２１は、ＮＣ１３１ａが属するＳＢ１１０ａ内のノードからローカルスヌープパケットを受信すると、受信したローカルスヌープパケットにおける「宛先ＩＤ」および「リクエスタＩＤ」の各フィールドの値を比較する。「宛先ＩＤ」および「リクエスタＩＤ」の各フィールド値が同じである場合（例えば、ＮＣ１３１ａが送信したリクエストパケットに応答してノードからローカルスヌープパケットが送信された場合）、リクエスタ判定部３２１は、受信したローカルスヌープパケットをＮＣレスポンス処理部３１５に送信する。一方、「宛先ＩＤ」および「リクエスタＩＤ」の各フィールドの値が異なる場合（例えば、リクエスタがホームノード以外のＳＢ１１０ａ内のノードである場合）、リクエスタ判定部３２１は、受信したローカルスヌープパケットをＮＣスヌープ生成部３１２に送信する。
【０１１６】
ＮＣスヌープ生成部３１２は、リクエスタ判定部３２１を通じてローカルスヌープパケットを受信すると、持ち出し管理テーブル３０２から、ローカルスヌープパケットに設定されたアドレスに対応付けられたノードＩＤを取得して、データの持ち出し先のノードを判別する。ＮＣスヌープ生成部３１２は、ＮＣスヌープパケットを生成し、データの持ち出し先のノードに接続されたＮＣにそれぞれ対応する、ブロードキャストフラグ内のビットを「１」とするとともに、レスポンスフラグを「１」とする。また、ＮＣスヌープ生成部３１２は、受信したローカルスヌープパケット内の「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドをそれぞれローカルＩＤからグローバルＩＤに変換し、変換後の各ＩＤをＮＣスヌープパケットの「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値に設定する。ＮＣスヌープ生成部３１２は、設定を完了したＮＣスヌープパケットを、アービタ３３２を介して、隣接する送信先であるＮＣ１３１ｂに送信する。
【０１１７】
さらに、ＮＣスヌープパケットを送信したＮＣスヌープ生成部３１２は、レスポンス受信判定テーブル３０４に対して新規のレコードを登録する。登録されたレコードは、送信したＮＣスヌープパケットに対応するＮＣレスポンスパケットをＮＣ１３１ａが受信した際に参照される。
【０１１８】
ここで、図１３は、レスポンス受信判定テーブルに保持される情報の例を示す図である。
レスポンス受信判定テーブル３０４は、送信したＮＣスヌープパケットに対応するＮＣレスポンスパケットを受信するまでの間、ＮＣスヌープパケットを送信する際のトリガとなったパケットの内容を保持するものである。レスポンス受信判定テーブル３０４のレコードには、送信されたＮＣスヌープパケットに設定されたトランザクションＩＤ、ＮＣスヌープパケットを送信する際のトリガとなった元のパケット、ＮＣスヌープパケットに対応するＮＣレスポンスパケットを受信したか否かを示す受信フラグが登録される。
【０１１９】
例えば、ＮＣスヌープパケットを送信したＮＣスヌープ生成部３１２は、リクエスタ判定部３２１を通じて受信したローカルスヌープパケットを、レスポンス受信判定テーブル３０４のレコードにおける「元のパケット」の欄に登録する。また、受信フラグの値は、レコードに対応するＮＣスヌープパケットが送信された段階では初期値「０」とされる。
【０１２０】
以下、図１２に戻って説明する。
宛先判定部３２２は、他のＳＢ内のＮＣからリクエストパケットを受信すると、「宛先ＩＤ」フィールドに設定されたノードＩＤに応じて次のような処理を行う。「宛先ＩＤ」フィールドの設定値が示すノードが他のＳＢ内のノードである場合、宛先判定部３２２は、受信したリクエストパケットをそのまま、アービタ３３２を介してＮＣ１３１ｂに送信する。一方、「宛先ＩＤ」フィールドの設定値が示すノードがＳＢ１１０ａ内のノードである場合、宛先判定部３２２は、受信したリクエストパケットをリクエスト受信処理部３１３に送信する。
【０１２１】
リクエスト受信処理部３１３は、宛先判定部３２２を通じてリクエストパケットを受信すると、持ち出し管理テーブル３０２を参照する。リクエスト受信処理部３１３は、持ち出し管理テーブル３０２から得られた情報と、受信したリクエストパケットにおける「コマンド」フィールドの設定値とから、ＳＢ１１０ａ内のノードへのリクエストパケットの送信と、他のＳＢへのＮＣスヌープパケットの送信のどちらを実行するべきかを判定する。
【０１２２】
受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル３０２のレコードに持ち出し先のノードＩＤが登録されていない場合、リクエスト受信処理部３１３は、リクエストパケットを送信すべきと判定する。また、受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル３０２のレコードに持ち出し先のノードＩＤが登録されている場合でも、受信したリクエストパケット内の「コマンド」フィールドに「Ｗｒｉｔｅｂａｃｋ」が設定されている場合、および、「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定され、かつデータのキャッシュステートがＳである場合には、リクエスト受信処理部３１３は、リクエストパケットを送信すべきと判定する。
【０１２３】
一方、受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル３０２のレコードに持ち出し先のノードＩＤが登録されているときには、受信したリクエストパケット内の「コマンド」フィールドに「Ｒｅａｄ＿Ｅ」が設定されている場合、および、「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定され、かつデータのキャッシュステートがＥである場合には、リクエスト受信処理部３１３は、ＮＣスヌープパケットを送信すべきと判定する。
【０１２４】
リクエストパケットを送信すべきと判定した場合、リクエスト受信処理部３１３は、他のＮＣから受信したリクエストパケットを、「宛先ＩＤ」フィールドが示すＳＢ１１０ａ内のホームノードに対して、アービタ３３５を介して送信する。このとき、リクエスト受信処理部３１３は、リクエストパケット内の「宛先ＩＤ」および「トランザクションＩＤ」の各フィールドをそれぞれグローバルＩＤからローカルＩＤに変換するとともに、「リクエスタＩＤ」フィールドを、グローバルＩＤからＮＣ１３１ａ自身を指すローカルＩＤに変換する。さらに、リクエスト受信処理部３１３は、ＩＤ変換テーブル３０３に対して新規のレコードを生成し、変換前後のＩＤをレコードに保存する。
【０１２５】
ここで、図１４は、ＩＤ変換テーブルに保持される情報の例を示す図である。
ＩＤ変換テーブル３０３には、他のＳＢからのパケットに応じて自身のＳＢ内のノードにパケットを送信する際に、受信パケット内に設定された変換前のＩＤと、送信パケット内の設定した変換後のＩＤとを含むレコードが登録される。図１４に示すように、ＩＤ変換テーブル３０３のレコードには、送信パケットに設定した変換後のトランザクションＩＤと、受信パケットにそれぞれ設定された変換前のリクエスタＩＤおよび変換前のトランザクションＩＤとが登録される。ＩＤ変換テーブル３０３のレコードは、ＳＢ内に送信したパケットに対するレスポンスパケットが受信された際に、削除される。
【０１２６】
例えば、リクエスト受信処理部３１３は、ＳＢ１１０ａ内のホームノードに送信したリクエストパケット内の「トランザクションＩＤ」フィールドの値と、宛先判定部３２２を通じて受信したリクエストパケット内の「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値を、ＩＤ変換テーブル３０３のレコードに登録する。また、リクエスト受信処理部３１３によって登録されたレコードは、その後、ＳＢ１１０ａ内のホームノードからのデータレスポンスパケットを受信したデータレスポンス送信部３１６によって削除される。
【０１２７】
ＩＤ変換テーブル３０３を用いてＩＤの変換が行われることで、例えば、各ＳＢで使用可能なＩＤの数などの各ＳＢが個別に持つＩＤの制約に関係なく、ノードＩＤやトランザクションＩＤをＳＢ間で伝送できるようになる。
【０１２８】
以下、図１２に戻って説明する。
ＮＣスヌープパケットを送信すべきと判定した場合、リクエスト受信処理部３１３は、ＮＣスヌープパケットを生成する。リクエスト受信処理部３１３は、宛先判定部３２２を通じて受信したリクエストパケット内の「リクエスタＩＤ」フィールドの値および「トランザクションＩＤ」フィールドの値を、ＮＣスヌープパケットの「リクエスタＩＤ」フィールドおよび「トランザクションＩＤ」フィールドにそれぞれ設定する。また、リクエスト受信処理部３１３は、データの持ち出し先のノードに接続されたＮＣにそれぞれ対応する、ブロードキャストフラグ内のビットを「１」とするとともに、レスポンスフラグを「１」とする。リクエスト受信処理部３１３は、設定を完了したＮＣスヌープパケットを、アービタ３３２を介してＮＣ１３１ｂに送信する。
【０１２９】
また、ＮＣスヌープパケットを送信したリクエスト受信処理部３１３は、レスポンス受信判定テーブル３０４に新規のレコードを登録する。リクエスト受信処理部３１３は、宛先判定部３２２を通じて受信したリクエストパケットを、レスポンス受信判定テーブル３０４のレコードにおける「元のパケット」の欄に登録する。また、受信フラグの値は、レコードに対応するＮＣスヌープパケットが送信された段階では初期値「０」とされる。
【０１３０】
ＢＣ判定部３２３は、他のＳＢ内のＮＣからＮＣスヌープパケットを受信すると、受信したＮＣスヌープパケットの「ブロードキャストフラグ」を参照する。「ブロードキャストフラグ」におけるＮＣ１３１ａに対応するビットが「０」である場合、ＢＣ判定部３２３は、受信したＮＣスヌープパケットを、アービタ３３２を介してＮＣ１３１ｂに転送する。一方、「ブロードキャストフラグ」におけるＮＣ１３１ａに対応するビットが「１」である場合、ＢＣ判定部３２３は、受信したＮＣスヌープパケットをＮＣスヌープ処理部３１４に送信する。
【０１３１】
ＮＣレスポンス判定部３２４は、他のＳＢ内のＮＣからＮＣレスポンスパケットを受信すると、受信したＮＣレスポンスパケット内の「宛先ＩＤ」フィールドの値から、ＮＣレスポンスパケットの宛先がＳＢ１１０ａ内のノードであるかを判定する。ＮＣレスポンスパケットの宛先がＳＢ１１０ａ内のノードでない場合、ＮＣレスポンス判定部３２４は、受信したＮＣレスポンスパケットをＮＣスヌープ処理部３１４に送信する。一方、ＮＣレスポンスパケットの宛先がＳＢ１１０ａ内のノードである場合、ＮＣレスポンス判定部３２４は、受信したＮＣレスポンスパケットをＮＣレスポンス処理部３１５に送信する。
【０１３２】
ＮＣスヌープ処理部３１４は、ＢＣ判定部３２３を通じてＮＣスヌープパケットを受信すると、ＮＣスヌープパケットで指示された処理をＳＢ１１０ａ内の各ノードに実行させるとともに、各ノードでの処理の実行結果を設定したＮＣレスポンスパケットを送信する。ＮＣスヌープ処理部３１４は、処理の際にＩＤ変換テーブル３０３およびレスポンス送信判定テーブル３０５を参照する。
【０１３３】
ここで、図１５は、レスポンス送信判定テーブルに保持される情報の例を示す図である。
ＮＣスヌープ処理部３１４は、ＮＣスヌープパケットの受信に応じてＳＢ１１０ａ内のノードにローカルスヌープパケットをブロードキャストした際に、レスポンス送信判定テーブル３０５に対してレコードを登録する。レスポンス送信判定テーブル３０５のレコードには、送信されたローカルスヌープパケットに設定された、ローカルＩＤであるトランザクションＩＤ、元のＮＣスヌープパケットに設定された、ともにグローバルＩＤであるリクエスタＩＤおよびトランザクションＩＤ、送信されたローカルスヌープパケットに設定されたアドレス、レスポンス数、受信フラグおよびＮＣレスポンスパケットが登録される。
【０１３４】
レコード内のレスポンス数は、ＳＢ１１０ａ内にブロードキャストされたローカルスヌープパケットに対応するＬＳレスポンスパケットを受信した数であり、レコード登録時は初期値「０」とされ、最大値はＳＢ１１０ａ内のノードの数である「３」である。レコード内の受信フラグは、ＮＣレスポンスパケットに対応するＮＣレスポンスパケットを他のＮＣから受信したか否かを示すものであり、ＮＣレスポンスパケットを受信した場合に「０」から「１」に更新される。レコード内のＮＣレスポンスパケットは、他のＮＣから受信したＮＣレスポンスパケットがそのまま格納される。レコード内にＮＣレスポンスパケットが格納されているとき、受信フラグも「１」となる。
【０１３５】
レスポンス送信判定テーブル３０５に登録されたレコードは、ＮＣレスポンスパケットが他のＮＣに送信されると、レスポンス送信判定テーブル３０５から削除される。
以下、ＮＣスヌープ処理部３１４の処理についてフローチャートを用いて説明する。まず、図１６は、ＮＣスヌープ処理部によるＮＣスヌープパケット受信時の処理を示すフローチャートである。
【０１３６】
［ステップＳ１１］ＮＣスヌープ処理部３１４は、ＢＣ判定部３２３を通じてＮＣスヌープパケットを受信する。
［ステップＳ１２］ＮＣスヌープ処理部３１４は、ＳＢ１１０ａ内のノード１２１ａ，１２２ａ，１２３ａに対して、ローカルスヌープパケットをブロードキャストする。このとき、ＮＣスヌープ処理部３１４は、ローカルスヌープパケットにおける「リクエスタＩＤ」フィールドに自身を指すローカルＩＤを設定するとともに、「トランザクションＩＤ」フィールドにローカルＩＤを設定する。ローカルスヌープパケットにおける「アドレス」フィールドおよび「コマンド」フィールドには、受信したＮＣスヌープパケットの「アドレス」フィールドの値および「コマンド」フィールドの値がそれぞれ設定される。
【０１３７】
［ステップＳ１３］ＮＣスヌープ処理部３１４は、ＩＤ変換テーブル３０３およびレスポンス送信判定テーブル３０５のそれぞれに対して新規のレコードを登録する。ＮＣスヌープ処理部３１４は、ステップＳ１２で送信したローカルスヌープパケットに設定したローカルＩＤであるトランザクションＩＤと、ステップＳ１１で受信したＮＣスヌープパケットに設定されたグローバルＩＤであるリクエスタＩＤおよびトランザクションＩＤとを、ＩＤ変換テーブル３０３における新規のレコードと、レスポンス送信判定テーブル３０５における新規のレコードのそれぞれに登録する。また、ＮＣスヌープ処理部３１４は、レスポンス送信判定テーブル３０５におけるレスポンス数および受信フラグの値をともに「０」とする。
【０１３８】
［ステップＳ１４］ステップＳ１１で受信されたＮＣスヌープパケットにおける「レスポンスフラグ」が「１」である場合、ステップＳ１５の処理が実行され、「レスポンスフラグ」が「０」である場合、ステップＳ１７の処理が実行される。
【０１３９】
［ステップＳ１５］「レスポンスフラグ」が「１」である場合、ＮＣスヌープ処理部３１４は、次の手順により、ＮＣレスポンスパケットを新規に生成する。ＮＣスヌープ処理部３１４は、ステップＳ１１で受信したＮＣスヌープパケットの「リクエストＩＤ」「トランザクションＩＤ」「アドレス」の各フィールド値を、ＮＣレスポンスパケットの同じフィールドの欄に設定する。また、ＮＣスヌープ処理部３１４は、ホーム判定テーブル３０１に基づき、ステップＳ１１で受信したＮＣスヌープパケットの「アドレス」フィールドに設定された値に対応するホームノードのＩＤを、ＮＣレスポンスパケットの「宛先ＩＤ」フィールドに設定する。さらに、ＮＣスヌープ処理部３１４は、ステップＳ１１で受信したＮＣスヌープパケットの「コマンド」フィールドで指定される処理が完了したことを示す値を、ＮＣスヌープパケットの「コマンド」フィールドに設定する。また、ＮＣスヌープ処理部３１４は、この時点では、ＮＣスヌープパケットにおける「レスポンスフィールド」の全ビットを「０」としておく。
【０１４０】
ＮＣスヌープ処理部３１４は、以上に手順で生成したＮＣレスポンスパケットを、ステップＳ１３でレスポンス送信判定テーブル３０５に生成したレコードに登録するとともに、このレコード内の受信フラグを「１」に書き替える。
【０１４１】
［ステップＳ１６］ＮＣスヌープ処理部３１４は、ステップＳ１１で受信したＮＣスヌープパケット内の「レスポンスフラグ」を「０」に書き替える。
［ステップＳ１７］ＮＣスヌープ処理部３１４は、ステップＳ１１で受信したＮＣスヌープパケット内の「ブロードキャストフラグ」のビットのうち、ＮＣ１３１ａに対応するビットを「０」に書き替える。
【０１４２】
［ステップＳ１８］ＮＣスヌープ処理部３１４は、ステップＳ１７での書き替え処理後の「ブロードキャストフラグ」を参照する。ＮＣスヌープ処理部３１４は、「ブロードキャストフラグ」内の全ビットが「０」である場合には、処理を終了する。この場合、ステップＳ１１で受信されたＮＣスヌープパケットは、これ以上他のＮＣに転送されない。一方、ＮＣスヌープ処理部３１４は、「ブロードキャストフラグ」内のビットの中に１つでも「１」がある場合には、ステップＳ１９の処理を実行する。
【０１４３】
［ステップＳ１９］ＮＣスヌープ処理部３１４は、ステップＳ１６，Ｓ１７、またはステップＳ１７のみで書き替えられたＮＣスヌープパケットを、アービタ３３２を介して、隣接する送信先であるＮＣ１３１ｂに対して送信する。
【０１４４】
図１７は、ＮＣスヌープ処理部によるレスポンスカウント処理を示すフローチャートである。
図１６のステップＳ１２においてローカルスヌープパケットがブロードキャストされると、ローカルスヌープパケットを受信したノードは、「コマンド」フィールドで指定される処理を実行する。ノードは、指定された処理を完了すると、「コマンド」フィールドに処理が完了したことを示す値を設定したＬＳレスポンスパケットを、ＮＣ１３１ａに対して返信する。このとき、ノードは、受信したローカルスヌープパケットの「リクエスタＩＤ」「トランザクションＩＤ」「アドレス」の各フィールドに設定された値を、ＬＳレスポンスパケットの同じフィールドに設定する。
【０１４５】
［ステップＳ３１］ＮＣスヌープ処理部３１４は、ＳＢ１１０ａ内のノードからＬＳレスポンスパケットを受信する。
［ステップＳ３２］ＮＣスヌープ処理部３１４は、レスポンス送信判定テーブル３０５内のレコードのうち、ローカルなトランザクションＩＤに設定された値が、受信したＬＳレスポンスパケット内の「トランザクションＩＤ」フィールドに設定された値と同じレコードを選択する。ＮＣスヌープ処理部３１４は、選択したレコード内のレスポンス数を「１」だけカウントアップする。
【０１４６】
以上の図１７の処理により、ローカルスヌープパケットのブロードキャスト先のノードから、「コマンド」フィールドで指定した処理の完了通知を受信するたびに、レスポンス送信判定テーブル３０５のレコードにおけるレスポンス数がカウントアップされる。レコード内のレスポンス数が最大値である「３」となったとき、ＮＣスヌープ処理部３１４は、ＳＢ１１０ａ内のすべてのノードからＮＣ１３１ａが処理の完了通知を受信したことを判定できる。
【０１４７】
図１８は、ＮＣスヌープ処理部によるＮＣレスポンス受信処理を示すフローチャートである。
図１６のステップＳ１４において、受信したＮＣスヌープパケット内の「レスポンスフラグ」が「０」であった場合、その後、受信したＮＣスヌープパケットに対応するＮＣレスポンスデータが、他のＮＣから送信される。この場合、ＮＣ１３１ａは、図１８の処理により、受信したＮＣスヌープパケットに対応するＮＣレスポンスデータを受信して、レスポンス受信判定テーブル３０４内の対応するレコードを更新する。
【０１４８】
［ステップＳ４１］ＮＣスヌープ処理部３１４は、ＮＣレスポンス判定部３２４を通じて、他のＮＣから送信されたＮＣレスポンスパケットを受信する。
［ステップＳ４２］ＮＣスヌープ処理部３１４は、レスポンス送信判定テーブル３０５内のレコードのうち、グローバルなトランザクションＩＤとして設定された値（すなわち、レコードに対応するＮＣスヌープパケットに設定されたトランザクションＩＤ）が、受信したＮＣレスポンスパケット内の「トランザクションＩＤ」フィールドに設定された値と同じであるレコードを選択する。ＮＣスヌープ処理部３１４は、選択したレコードに対して、ステップＳ４１で受信したＮＣレスポンスパケットを登録する。
【０１４９】
［ステップＳ４３］ＮＣスヌープ処理部３１４は、ステップＳ４２で選択したレコード内の受信フラグを「１」に書き替える。
図１９は、ＮＣスヌープ処理部によるＮＣレスポンス送信処理を示すフローチャートである。
【０１５０】
［ステップＳ５１］ＮＣスヌープ処理部３１４は、レスポンス送信判定テーブル３０５に登録されたレスポンスのうち、レスポンス数が最大値である「３」に達し、かつ、受信フラグが「１」であるレコードを検知する。
【０１５１】
［ステップＳ５２］ＮＣスヌープ処理部３１４は、ステップＳ５１で検知したレコードに登録されたＮＣレスポンスパケット内の「レスポンスフィールド」を参照する。ＮＣスヌープ処理部３１４は、参照した「レスポンスフィールド」のビットのうち、ＮＣ１３１ａに対応するビットを「１」に書き替える。
【０１５２】
［ステップＳ５３］ＮＣスヌープ処理部３１４は、ステップＳ５２で書き替えを行ったＮＣレスポンスパケットを、アービタ３３３を介して、ＮＣ１３１ａに隣接する送信先であるＮＣ１３１ｂに送信する。
【０１５３】
［ステップＳ５４］ＮＣスヌープ処理部３１４は、ステップＳ５１で検知した、レスポンス送信判定テーブル３０５内のレコードから、ローカルなトランザクションＩＤを抽出する。ＮＣスヌープ処理部３１４は、変換後のトランザクションＩＤとして、レスポンス受信判定テーブル３０４から抽出したトランザクションＩＤと同じ値が登録されたＩＤ変換テーブル３０３内のレコードを削除する。また、ＮＣスヌープ処理部３１４は、ステップＳ５１で検知した、レスポンス送信判定テーブル３０５内のレコードを削除する。
【０１５４】
以上の図１６〜図１９で説明した処理によれば、ＮＣスヌープ処理部３１４は、レスポンス送信判定テーブルを利用して、ＮＣスヌープパケットを受信してから対応するＮＣレスポンスパケットを送信するまでの処理を管理する。ＮＣスヌープ処理部３１４は、レスポンス送信判定テーブル３０５内のレスポンス数および受信フラグを用いることで、ＮＣスヌープパケットによって指示された処理の完了通知をＳＢ１１０ａ内の全ノードから受信し、かつ、対応するＮＣレスポンスパケットを受信したことを確実に認識できる。従って、データの持ち出し先である全ノードにおける処理結果をＮＣレスポンスパケットに格納し、ホームノードに対して確実に伝達できるようになる。
【０１５５】
以下、図１２に戻って説明する。
ＮＣレスポンス処理部３１５は、ＮＣスヌープ生成部３１２またはリクエスト受信処理部３１３がＮＣスヌープパケットを送信した後、送信されたＮＣスヌープパケットに応じた処理結果をホームノードに伝達する。これとともに、ＮＣレスポンス処理部３１５は、ＮＣスヌープ生成部３１２またはリクエスト受信処理部３１３がレスポンス受信判定テーブル３０４に登録したパケットに関連する処理が完了するまでの間、ＮＣスヌープパケットに応じた処理結果を、レスポンス受信判定テーブル３０４に保持させる。
【０１５６】
ここで、図２０は、ＮＣレスポンス処理部の構成例およびその動作を示す図である。
ＮＣレスポンス処理部３１５は、ＮＣレスポンス受信部３５１、パケット判定部３５２、レスポンス送信部３５３、リクエスト送信部３５４およびスヌープ受信部３５５を備える。
【０１５７】
また、前述のように、レスポンス受信判定テーブル３０４には、ＮＣスヌープ生成部３１２またはリクエスト受信処理部３１３によってＮＣスヌープパケットが送信された場合に、レコードが登録される。ＮＣスヌープ生成部３１２は、レスポンス受信判定テーブル３０４のレコードに、ＮＣスヌープパケットを送信するトリガとされたローカルスヌープパケットを登録する。また、リクエスト受信処理部３１３は、レスポンス受信判定テーブル３０４のレコードに、ＮＣスヌープパケットを送信するトリガとされたリクエストパケットを登録する。
【０１５８】
ＮＣレスポンス受信部３５１は、他のＳＢ内のＮＣからＮＣレスポンスパケットを受信すると、受信したＮＣレスポンスパケットの「トランザクションＩＤ」フィールドに設定された値と同じトランザクションＩＤが登録されたレコードを、レスポンス受信判定テーブル３０４から選択する。ＮＣレスポンス受信部３５１は、選択したレコード内のレスポンスフラグを「１」に書き替え、ＮＣスヌープパケットにより要求された処理が完了したことをレコードに記録する。また、ＮＣレスポンス受信部３５１は、レスポンスフラグを書き替えたレコードを示すレコードＩＤを、パケット判定部３５２に通知する。
【０１５９】
パケット判定部３５２は、ＮＣレスポンス受信部３５１からレコードＩＤの通知を受けると、通知されたレコードＩＤに対応する、レスポンス受信判定テーブル３０４内のレコードから、「元のパケット」の欄に登録されたパケットを受信する。パケット判定部３５２は、受信したパケットがローカルスヌープパケットである場合、そのパケットをレスポンス送信部３５３に送信する。受信したパケットがローカルスヌープパケットである場合とは、図１０に示した例のように、同じＳＢに属するホームノードから送信されたローカルスヌープパケットをトリガとしてＮＣスヌープパケットが送信された後、送信されたＮＣスヌープパケットに対応するＮＣレスポンスパケットが受信された場合である。
【０１６０】
一方、パケット判定部３５２は、レコードから受信したパケットがリクエストパケットである場合、そのパケットをリクエスト送信部３５４に送信する。受信したパケットがリクエストパケットである場合とは、図６に示した例のように、他のＳＢのノードから送信されたリクエストパケットをトリガとしてＮＣスヌープパケットが送信された後、送信されたＮＣスヌープパケットに対応するＮＣレスポンスパケットが受信された場合である。
【０１６１】
レスポンス送信部３５３は、パケット判定部３５２からローカルスヌープパケットを受信すると、受信したローカルスヌープパケットに対応するＬＳレスポンスパケットを、ＳＢ１１０ａ内のホームノードに送信する。レスポンス送信部３５３は、パケット判定部３５２から受信したローカルスヌープパケット内のアドレスを管理するホームノードのＩＤを、ＬＳレスポンスパケットの「宛先ＩＤ」フィールドに設定する。また、レスポンス送信部３５３は、パケット判定部３５２から受信したローカルスヌープパケット内の「リクエスタＩＤ」「トランザクションＩＤ」「アドレス」の各フィールドの値を、ＬＳレスポンスパケット内の同じフィールドに設定する。さらに、レスポンス送信部３５３は、パケット判定部３５２から受信したローカルスヌープパケットの「コマンド」フィールドで指定された処理の完了を通知する値を、ＬＳレスポンスパケット内の「コマンド」フィールドに設定する。
【０１６２】
また、ＬＳレスポンスパケットを送信したレスポンス送信部３５３は、持ち出し管理テーブル３０２のレコードのうち、送信したＬＳレスポンスパケットに設定されたアドレスに対応するレコードを更新する。例えば、送信したＬＳレスポンスパケットの「コマンド」フィールドに「Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定される場合、レスポンス送信部３５３は、レコード内のキャッシュステートをＩステートにし、レコードに登録されていた持ち出し先のノードＩＤを削除する。また、送信したＬＳレスポンスパケットの「コマンド」フィールドに「Ｒｅｓｐｏｎｓｅ＿Ｓ」が設定される場合、レスポンス送信部３５３は、レコード内のキャッシュステートをＳステートにする。これとともに、レスポンス送信部３５３は、レコードに対し、持ち出し先のノードＩＤとして、ＬＳレスポンスパケットの「リクエスタＩＤ」フィールドの値をローカルＩＤからグローバルＩＤに変換した値を書き加える。
【０１６３】
さらに、ＬＳレスポンスパケットを送信したレスポンス送信部３５３は、パケット判定部３５２から受信したローカルスヌープパケットが登録されたレコードを、レスポンス受信判定テーブル３０４から削除する。レスポンス送信部３５３は、例えば、ローカルスヌープパケット内の「トランザクションＩＤ」フィールドと、各レコードに登録された元パケット内の「トランザクションＩＤ」フィールドとを比較することで、削除するレコードを検索する。
【０１６４】
レスポンス送信部３５３がＬＳレスポンスパケットを送信することで、ＮＣスヌープ生成部３１２がレスポンス受信判定テーブル３０４に登録したローカルスヌープパケットに関するＮＣ１３１ａでの処理は完了する。ＮＣレスポンス受信部３５１、パケット判定部３５２およびレスポンス送信部３５３の処理により、ＮＣスヌープ生成部３１２がレスポンス受信判定テーブル３０４に登録したＮＣスヌープパケットに関するＮＣ１３１ａでの処理が完了するまでの間、ＮＣ１３１ａでの処理に必要な情報がレスポンス受信判定テーブル３０４に確実に保持されるようになる。
【０１６５】
リクエスト送信部３５４は、パケット判定部３５２からリクエストパケットを受信すると、ＳＢ１１０ａ内のホームノードに対してリクエストパケットを送信する。ここで、パケット判定部３５２から受信したリクエストパケット内の「宛先ＩＤ」「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドのＩＤはそれぞれグローバルＩＤになっているため、リクエスト送信部３５４は、これらのＩＤをローカルＩＤに変換する。リクエスト送信部３５４は、パケット判定部３５２から受信したリクエストパケット内の「リクエスタＩＤ」フィールドを、ＮＣ１３１ａを示すＩＤに変換するとともに、リクエストパケット内の「宛先ＩＤ」および「トランザクションＩＤ」の各フィールドの値を、ともにローカルＩＤに変換する。
【０１６６】
リクエスト送信部３５４は、ＩＤを変換したリクエストパケットをＳＢ１１０ａ内のホームノードに送信する。また、リクエスト送信部３５４は、持ち出し管理テーブル３０２に新規のレコードを生成し、生成したレコードに、変換後の「トランザクションＩＤ」フィールドの値と、変換後の「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値を登録する。
【０１６７】
リクエスト送信部３５４からのリクエストパケットを受信したホームノードは、ＮＣ１３１ａに対してローカルスヌープパケットを送信する。スヌープ受信部３５５は、ホームノードからのローカルスヌープパケットを受信する。スヌープ受信部３５５は、ＩＤ変換テーブル３０３のレコードのうち、変換後のＩＤとして、受信したローカルスヌープパケット内の「トランザクションＩＤ」フィールドの値が登録されたレコードを選択する。スヌープ受信部３５５は、ＩＤ変換テーブル３０３から選択したレコードから、変換前のグローバルなトランザクションＩＤを抽出する。さらに、スヌープ受信部３５５は、レスポンス受信判定テーブル３０４のレコードのうち、ＩＤ変換テーブル３０３から抽出したトランザクションＩＤが登録されたレコードを選択する。
【０１６８】
スヌープ受信部３５５は、レスポンス受信判定テーブル３０４から選択したレコードにおいて、レスポンスフラグが「１」であることを確認すると、ホームノードに対してＬＳレスポンスパケットを送信するとともに、選択したレコードを削除する。スヌープ受信部３５５は、受信したローカルスヌープパケットの「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドに設定された値を、送信するＬＳレスポンスパケット内の同じフィールドに設定する。
【０１６９】
リクエスト受信処理部３１３がレスポンス受信判定テーブル３０４に登録したリクエストパケットに関するＮＣ１３１ａでの処理は完了する。ＮＣレスポンス受信部３５１、パケット判定部３５２およびレスポンス送信部３５３の処理により、リクエスト受信処理部３１３がレスポンス受信判定テーブル３０４に登録したリクエストパケットに関するＮＣ１３１ａでの処理が完了するまでの間、ＮＣ１３１ａでの処理に必要な情報がレスポンス受信判定テーブル３０４に確実に保持されるようになる。
【０１７０】
以下、図１２に戻って説明する。
データレスポンス送信部３１６は、ＳＢ１１０ａ内のホームノードからデータレスポンスパケットを受信すると、ＩＤ変換テーブル３０３から、変換後のトランザクションＩＤとして、受信したデータレスポンスパケットの「トランザクションＩＤ」フィールドの値が登録されたレコードを選択する。このときデータレスポンス送信部３１６が選択するレコードは、ＮＣレスポンス処理部のリクエスト送信部３５４によって登録されたものである。
【０１７１】
データレスポンス送信部３１６は、受信したデータレスポンスパケットの「宛先ＩＤ」および「リクエスタＩＤ」の各フィールドを、ＩＤ変換テーブル３０３から選択したレコードに登録された、変換前のリクエスタＩＤに書き替える。また、データレスポンス送信部３１６は、受信したデータレスポンスパケットの「トランザクションＩＤ」フィールドを、ＩＤ変換テーブル３０３から選択したレコードに登録された、変換前のトランザクションＩＤに書き替える。データレスポンス送信部３１６は、書き替え後のデータレスポンスパケットを、アービタ３３４を通じてＮＣ１３１ｂに送信するとともに、ＩＤ変換テーブル３０３から選択したレコードを削除する。
【０１７２】
さらに、データレスポンス送信部３１６は、持ち出し管理テーブル３０２のレコードのうち、送信したデータレスポンスパケットに設定されたアドレスに対応するレコードを更新する。例えば、送信したデータレスポンスパケットの「コマンド」フィールドに「Ｄ−Ｒｅｓｐｏｎｓｅ＿Ｅ」が設定された場合、データレスポンス送信部３１６は、レコード内のキャッシュステートをステートＥにする。これとともに、データレスポンス送信部３１６は、レコードに登録された持ち出し先のノードＩＤを、送信したデータレスポンスパケットの「リクエスタＩＤ」フィールドの値に書き替える。また、送信したデータレスポンスパケットの「コマンド」フィールドに「Ｄ−Ｒｅｓｐｏｎｓｅ＿Ｅ」が設定された場合、データレスポンス送信部３１６は、レコード内のキャッシュステートをステートＳにする。これとともに、データレスポンス送信部３１６は、レコードに対し、持ち出し先のノードＩＤとして、送信したデータレスポンスパケットの「リクエスタＩＤ」フィールドの値を書き加える。また、送信したデータレスポンスパケットの「コマンド」フィールドに「Ｃｏｍｐｌｅｔｅ」が設定された場合、データレスポンス送信部３１６は、レコード内のキャッシュステートをＩステートにする。
【０１７３】
宛先判定部３２５は、他のＳＢ内のＮＣからデータレスポンスパケットを受信すると、受信したデータレスポンスパケットの「宛先ＩＤ」フィールドを参照する。「宛先ＩＤ」フィールドにおいてＳＢ１１０ａ内のノードが設定されていた場合、宛先判定部３２５は、受信したデータレスポンスパケット内の「宛先ＩＤ」「リクエスタＩＤ」「トランザクションＩＤ」の各フィールドの値をグローバルＩＤからローカルＩＤに書き替える。宛先判定部３２５は、書き替え後のデータレスポンスパケットを、ＳＢ１１０ａ内のリクエスタであるノードに送信する。一方、「宛先ＩＤ」フィールドにおいてＳＢ１１０ａ以外の他のＳＢ内のノードが設定されていた場合、宛先判定部３２５は、受信したデータレスポンスパケットを、アービタ３３４を通じてＮＣ１３１ｂに転送する。
【０１７４】
図２１は、ＮＣスヌープパケットを他のＮＣに送信した後のＮＣの処理例を示すフローチャートである。この図２１では、図６の例のように、ＳＢ１１０ｂのＮＣ１３１ｂが、他のＮＣからリクエストパケットを受信したことをトリガとしてＮＣスヌープパケットを送信した場合の処理を示す。
【０１７５】
［ステップＳ７１］ＮＣ１３１ｂのＮＣレスポンス判定部３２４は、他のＮＣからＮＣレスポンスパケットを受信する。ＮＣレスポンス判定部３２４は、受信したＮＣレスポンスパケットの「宛先ＩＤ」フィールドがＳＢ１１０ｂ内のノードを指すことを判定して、受信したレスポンスパケットをＮＣレスポンス処理部３１５に送信する。
【０１７６】
［ステップＳ７２］ＮＣ１３１ｂのＮＣレスポンス処理部３１５は、受信したＮＣレスポンスパケットによって通知された、ＮＣスヌープパケットに応じた処理の結果を、レスポンス受信判定テーブル３０４に登録する。具体的には、ＮＣレスポンス処理部３１５のＮＣレスポンス受信部３５１は、受信したＮＣレスポンスパケットの「トランザクションＩＤ」フィールドに設定された値と同じトランザクションＩＤが登録されたレコードを、レスポンス受信判定テーブル３０４から選択する。ＮＣレスポンス受信部３５１は、選択したレコード内のレスポンスフラグを「１」に書き替えることで、ＮＣスヌープパケットにより要求された処理が完了したことをレコードに記録する。
【０１７７】
［ステップＳ７３］ＮＣ１３１ｂのＮＣレスポンス処理部３１５は、ＳＢ１１０ｂ内のホームノードにリクエストパケットを送信する。具体的には、ＮＣレスポンス処理部３１５のパケット判定部３５２は、ステップＳ７２でレスポンスフラグが書き替えられた、レスポンス受信判定テーブル３０４のレコードから、「元のパケット」の欄に登録されたパケットを受信する。パケット判定部３５２は、レコードから受信したパケットがレスポンスパケットであることを認識して、受信したレスポンスパケットをリクエスト送信部３５４に送信する。リクエスト送信部３５４は、パケット判定部３５２からリクエストパケットを受信すると、受信したリクエストパケット内の「宛先ＩＤ」「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値をグローバルＩＤからローカルＩＤに変換し、ローカルＩＤに変換されたリクエストパケットをＳＢ１１０ａ内のホームノードに送信する。
【０１７８】
［ステップＳ７４］リクエスト送信部３５４は、変換前後のＩＤを、ＩＤ変換テーブル３０３のレコードに登録する。
ＮＣ１３１ｂからのリクエストパケットを受信したホームノードは、自身が備える持ち出し管理テーブル２０２に基づき、受信したリクエストパケットに設定されたアドレスに記憶されたデータが他のＳＢのノードに持ち出されていると判断して、ＮＣ１３１ｂに対してローカルスヌープパケットを送信する。
【０１７９】
［ステップＳ７５］ＮＣ１３１ｂのＮＣレスポンス処理部３１５は、ホームノードからのローカルスヌープパケットを受信する。
［ステップＳ７６］ＮＣ１３１ｂのＮＣレスポンス処理部３１５は、データの持ち出し先ノードでの処理結果を格納したＬＳレスポンスパケットを、ＮＣ１３１ｂ内のホームノードに返信する。具体的には、ＮＣレスポンス処理部３１５のスヌープ受信部３５５は、受信したＬＳレスポンスパケットの「トランザクションＩＤ」フィールドの値を、ＩＤ変換テーブル３０３を基にローカルＩＤからグローバルＩＤに変換した後、変換後のトランザクションＩＤに対応するレコードを、レスポンス受信判定テーブル３０４から選択する。スヌープ受信部３５５は、レスポンス受信判定テーブル３０４から選択したレコードにおいて、レスポンスフラグが「１」であることを確認すると、ホームノードに対してＬＳレスポンスパケットを送信する。
【０１８０】
［ステップＳ７７］ＮＣ１３１ｂのＮＣレスポンス処理部３１５におけるスヌープ受信部３５５は、レスポンス受信判定テーブル３０４から、ステップＳ７６で選択したレコードを削除する。
【０１８１】
ＮＣ１３１ｂからのＬＳレスポンスパケットを受信したホームノードは、キャッシュコヒーレンシを保たれたと判断して、ＮＣ１３１ｂに対して、ステップＳ７３で発行されたリクエストパケットに対する応答としてのデータレスポンスパケットを送信する。
【０１８２】
［ステップＳ７８］ＮＣ１３１ｂのデータレスポンス送信部３１６は、ホームノードから送信されたデータレスポンスパケットを受信する。
［ステップＳ７９］データレスポンス送信部３１６は、受信したデータレスポンスパケットの「宛先ＩＤ」「リクエスタＩＤ」「トランザクションＩＤ」の各フィールドの値を、ＩＤ変換テーブル３０３に基づいて変換した後、変換後のデータレスポンスパケットをＮＣ１３１ｂに送信する。
【０１８３】
［ステップＳ８０］データレスポンス送信部３１６は、ステップＳ７９で参照した、ＩＤ変換テーブル３０３のレコードを削除する。
以上説明した第２の実施の形態では、ホームノードに接続したＮＣは、データの持ち出し先のノードが属するすべてのＮＣに対して、１つのＮＣスヌープパケットによって処理の実行を要求することができる。このため、データが複数のノードに持ち出されたときに、ホームノードに接続したＮＣがデータの持ち出し先のすべてのノードに対して個別にスヌープパケットを送信する場合と比較して、ＮＣ間を接続する通信路の伝送負荷を軽減することができる。
【０１８４】
また、ＮＣスヌープパケットにより要求された処理の完了通知も、データの持ち出し先のすべてのノードから、ホームノードが接続されたＮＣに対して、１つのＮＣレスポンスパケットによって送信される。このため、データが複数のノードに持ち出された場合に、処理の完了通知が、持ち出し先のすべてのノードから個別のレスポンスパケットを用いて返信される場合と比較して、ＮＣ間を接続する通信路に伝送される完了通知のデータ量を軽減することができる。
【０１８５】
なお、上記の第２の実施の形態では、キャッシュ部に対する状態の制御を要求する制御情報をＳＢ間で伝送する場合の例を示したが、他の種類の制御情報をＮＣスヌープパケットと同様の形式の制御パケットを使用して伝送することもできる。例えば、情報処理システム１００内のすべてのノードに対して割り込みを要求するような制御情報を、ＮＣスヌープパケットと同様の形式の制御パケットを使用して伝送することができる。この場合、送信元のＮＣは、制御パケット内の「ブロードキャストフラグ」において全ビットを「１」とすればよい。制御パケットを受信した、送信元を含むすべてのＮＣは、ＮＣに接続された全ノードに割り込みの要求をブロードキャストする。これにより、送信元のＮＣに接続されたノードを含むすべてのノードに対して、割り込みを要求することができる。また、割り込み要求に対するレスポンスパケットは送信されないことから、制御パケット内の「レスポンスフラグ」は初期状態で「０」とされればよい。このような制御パケットを使用することで、ＮＣ間の伝送路の負荷を抑制しながら、すべてのノードに対して割り込みを確実に要求できるようになる。
【０１８６】
また、上記の第２の実施の形態では、外部のＳＢにあるデータの持ち出し先ノードに対してコマンドを送信する際にＮＣスヌープパケットを使用したが、データの持ち出し先ノードが１つのみである場合には、ＮＣスヌープパケットの代わりに、ローカルスヌープパケットと同じ構成のスヌープパケットが使用されてもよい。ここでは、ローカルスヌープパケットと同じ構成の、ＮＣ間で伝送されるスヌープパケットを、「個別スヌープパケット」と呼ぶ。
【０１８７】
図２２は、送信するスヌープパケットを判定する処理を示すフローチャートである。ここでは例として、ＮＣスヌープ処理部３１４がスヌープパケットを送信する際の処理について説明する。
【０１８８】
［ステップＳ９１］ＮＣスヌープ処理部３１４は、他のＳＢ内のＮＣに対してＮＣスヌープパケットを送信すべきであると判定する。ＮＣスヌープパケットを送信すべきと判定する条件は、図１２において説明した通りである。
【０１８９】
［ステップＳ９２］ＮＣスヌープ処理部３１４は、持ち出し管理テーブル３０２に基づき、他のＳＢにおけるデータの持ち出し先ノードが１つであるかを判定する。データの持ち出し先ノードが複数ある場合には、ステップＳ９３の処理が実行され、データの持ち出し先ノードが１つの場合には、ステップＳ９４の処理が実行される。
【０１９０】
［ステップＳ９３］ＮＣスヌープ処理部３１４は、ＮＣスヌープパケットを送信する。
［ステップＳ９４］ＮＣスヌープ処理部３１４は、データの持ち出し先ノードのＩＤを「宛先ノード」フィールドに設定した個別スヌープパケットを送信する。
【０１９１】
なお、ステップＳ９２〜Ｓ９４の処理は、ＮＣスヌープ生成部３１２がＮＣスヌープパケットを送信する際に、ＮＣスヌープ生成部３１２によって実行されてもよい。
個別スヌープパケットの「宛先ＩＤ」フィールドに対応するノードに接続されたＮＣは、個別スヌープパケットを受信すると、「宛先ＩＤ」フィールドが示すノードに対して、ローカルスヌープパケットを送信する。このとき、ＮＣは、受信した個別スヌープパケットにおける「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値をそれぞれグローバルＩＤからローカルＩＤに変換するとともに、「宛先ＩＤ」フィールドをＮＣを示すように変換し、変換後の個別スヌープパケットをローカルスヌープパケットとして送信する。ＮＣは、変換後のローカルＩＤと変換前のグローバルＩＤを、持ち出し管理テーブル３０２に登録する。
【０１９２】
ローカルスヌープパケットを受信したノードは、「コマンド」フィールドで指示された処理を実行した後、処理が完了したことを示す値を「コマンド」フィールドに設定したＬＳレスポンスパケットを、自身に接続されたＮＣに送信する。ＬＳレスポンスパケットを受信したＮＣは、持ち出し管理テーブル３０２に基づいて、ＬＳレスポンスパケットの「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値をローカルＩＤからグローバルＩＤに変換するとともに、「宛先ＩＤ」フィールドの値を、ホームノードを示すＩＤに変換する。ＮＣは、ＩＤが変換されたＬＳレスポンスパケットを、個別レスポンスパケットとして他のＮＣに送信する。個別スヌープパケットを送信した、ホームノードに接続されたＮＣは、個別レスポンスパケットを受信することで、処理の完了通知を受ける。
【０１９３】
上記の個別スヌープパケットは、「ブロードキャストフラグ」および「レスポンスフラグ」を含まない分だけ、ＮＣスヌープパケットよりデータ量が小さい。このため、他のＳＢにおけるデータの持ち出し先ノードが１つの場合には、ＮＣスヌープパケットの代わりに個別スヌープパケットを送信することで、ＳＢ間に伝送されるデータ量をさらに抑制することができる。
【０１９４】
また、個別レスポンスパケットも、「レスポンスフィールド」を含まない分だけ、ＮＣレスポンスパケットよりデータ量が小さい。このため、個別スヌープパケットに対する応答として個別レスポンスパケットを送信することで、ＳＢ間に伝送されるデータ量をさらに抑制することができる。
【０１９５】
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１９６】
１  情報処理システム
１０ａ〜１０ｄ  情報処理部
１１ａ〜１１ｄ  制御情報送信部
１２ａ〜１２ｄ  制御情報受信部
２０  制御パケット
２１  制御情報
２２  送信先情報
【図１】
2012077169.tif 000003
【図２】
2012077169.tif 000004
【図３】
2012077169.tif 000005
【図４】
2012077169.tif 000006
【図５】
2012077169.tif 000007
【図６】
2012077169.tif 000008
【図７】
2012077169.tif 000009
【図８】
2012077169.tif 000010
【図９】
2012077169.tif 000011
【図１０】
2012077169.tif 000012
【図１１】
2012077169.tif 000013
【図１２】
2012077169.tif 000014
【図１３】
2012077169.tif 000015
【図１４】
2012077169.tif 000016
【図１５】
2012077169.tif 000017
【図１６】
2012077169.tif 000018
【図１７】
2012077169.tif 000019
【図１８】
2012077169.tif 000020
【図１９】
2012077169.tif 000021
【図２０】
2012077169.tif 000022
【図２１】
2012077169.tif 000023
【図２２】
2012077169.tif 000024
【手続補正書】
【提出日】平成25年6月5日(2013.6.5)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システムおよび情報送信方法に関する。
【背景技術】
【０００２】
複数のＣＰＵ（Central Processing Unit）を備えた情報処理システムのアーキテクチャの１つとして、ｃｃ−ＮＵＭＡ（Cache Coherent Non-Uniform Memory Access）がある。ｃｃ−ＮＵＭＡ方式の情報処理システムでは、共有メモリ空間の一部を構成する分散共有メモリとＣＰＵとを含む情報処理部が、複数接続される。また、複数のＣＰＵを備えた情報処理システムでは、各ＣＰＵが備えるキャッシュ部間のコヒーレンシ（データの整合性）を保つ機構が必要とされる。ｃｃ−ＮＵＭＡ方式の情報処理システムでは、ディレクトリと呼ばれる管理表を用いた機構が採用されることが多い。
【０００３】
ディレクトリは、分散共有メモリ内のデータが他の情報処理部内のキャッシュ部にキャッシュされた場合に、キャッシュ先の情報処理部を示す情報を保持する。情報処理部は、自身に属する分散共有メモリ内のデータへのアクセス要求が送信されたとき、ディレクトリを参照する。情報処理部は、ディレクトリに基づき、アクセス要求の対象データが他の情報処理部にキャッシュされていると判定した場合に、「スヌープ（Snoop）」と呼ばれるリクエストを他の情報処理部に送信して、キャッシュコヒーレンシを保つような制御を行う。
【０００４】
スヌープ要求は、少なくとも、アクセス要求の対象データをキャッシュするすべての情報処理部に対して送信される。また、それぞれキャッシュ部を備える複数のＣＰＵが１つの情報処理部内に設けられた情報処理システムでは、スヌープ要求がＣＰＵごとでなく情報処理部ごとに送信されるものがある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−２３４８５４号公報
【特許文献２】特開２００９−２４５３２３号公報
【特許文献３】特開平１０−１８７６４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記のように、スヌープ要求は、少なくとも、アクセス要求の対象データを自身のキャッシュ部にキャッシュするすべての情報処理部に対して送信される。このため、対象データをキャッシュする情報処理部の数が増えるほど送信されるスヌープの数も多くなり、情報処理部間を接続する通信路の伝送負荷が大きくなるという問題があった。特に、情報処理部がリング状に接続されている場合には、複数の情報処理部のそれぞれを宛先とするスヌープが同一の通信路に伝送されることから、伝送負荷はより大きくなる。また、スヌープに限らず、他の種類の制御情報を複数の情報処理部に送信する際にも、送信先の情報処理部が多くなるほど通信路の伝送負荷は大きくなる。
【０００７】
本発明はこのような課題に鑑みてなされたものであり、複数の情報処理部に対して制御情報を送信する際に通信路の伝送負荷を軽減できるようにした情報処理システムおよび情報送信方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、複数の情報処理部がリング状通信路によって接続された情報処理システムが提供される。この情報処理システムに含まれる複数の情報処理部のそれぞれは、制御情報と、当該制御情報の送信先とする１つ以上の情報処理部をそれぞれ指定する宛先情報とを含む制御パケットを、リング状通信路に送信する制御情報送信部と、リング状通信路を介して受信した制御パケットに、制御情報の送信先として自身が属する情報処理部が指定されている場合には、受信した制御パケットから制御情報を取り込むとともに、自身が属する情報処理部を制御情報の送信先として指定しないように宛先情報を書き替えた制御パケットをリング状通信路に送信し、受信した制御パケットに制御情報の送信先として自身が属する情報処理部が指定されていない場合には、受信した制御パケットをリング状通信路に送信する制御情報受信部と、を有する。
【０００９】
また、上記目的を達成するために、上記の情報処理システムと同様の処理を行う情報送信方法が提供される。
【発明の効果】
【００１０】
上記の情報処理システムおよび情報送信方法によれば、複数の情報処理部に対して制御情報を送信する際にリング状通信路の伝送負荷を軽減できる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになる。
【図面の簡単な説明】
【００１１】
【図１】第１の実施の形態に係る情報処理システムの構成例を示す図である。
【図２】第２の実施の形態に係る情報処理システムの全体構成例を示す図である。
【図３】情報処理システムの内部において送受信されるパケットのフォーマットを示す図である。
【図４】ホーム判定テーブルに保持される情報の例を示す図である。
【図５】持ち出し管理テーブルに保持される情報の例を示す図である。
【図６】送信元のＳＢからのリクエストパケットの送信に応じて、送信先のＳＢからＮＣスヌープパケットが送信される処理を示す図である。
【図７】ＮＣスヌープパケットを受信したＳＢ内の処理を示す図である。
【図８】ＮＣレスポンスパケットが送信される際のＳＢ内の処理を示す図である。
【図９】ＮＣスヌープパケットおよびＮＣレスポンスパケットが伝送される様子を示す図である。
【図１０】ＮＣスヌープパケットが送信される別の処理例を示す図である。
【図１１】ノードの構成例およびその動作を示す図である。
【図１２】ＮＣの構成例およびその動作を示す図である。
【図１３】レスポンス受信判定テーブルに保持される情報の例を示す図である。
【図１４】ＩＤ変換テーブルに保持される情報の例を示す図である。
【図１５】レスポンス送信判定テーブルに保持される情報の例を示す図である。
【図１６】ＮＣスヌープ処理部によるＮＣスヌープパケット受信時の処理を示すフローチャートである。
【図１７】ＮＣスヌープ処理部によるレスポンスカウント処理を示すフローチャートである。
【図１８】ＮＣスヌープ処理部によるＮＣレスポンス受信処理を示すフローチャートである。
【図１９】ＮＣスヌープ処理部によるＮＣレスポンス送信処理を示すフローチャートである。
【図２０】ＮＣレスポンス処理部の構成例およびその動作を示す図である。
【図２１】ＮＣスヌープパケットを他のＮＣに送信した後のＮＣの処理例を示すフローチャートである。
【図２２】送信するスヌープパケットを判定する処理を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る情報処理システムの構成例を示す図である。
【００１３】
図１に示す情報処理システム１は、複数の情報処理部を備え、これらの複数の情報処理部はリング状に接続されている。図１の情報処理システム１は、例として４つの情報処理部１０ａ〜１０ｄを備え、情報処理部１０ａ〜１０ｄの間では、情報処理部１０ａ，１０ｂ，１０ｃ，１０ｄ，１０ａ，・・・の順にデータが伝送されるものとする。
【００１４】
情報処理部１０ａは、制御情報送信部１１ａと制御情報受信部１２ａとを備える。同様に、情報処理部１０ｂは、制御情報送信部１１ｂと制御情報受信部１２ｂとを備え、情報処理部１０ｃは、制御情報送信部１１ｃと制御情報受信部１２ｃとを備え、情報処理部１０ｄは、制御情報送信部１１ｄと制御情報受信部１２ｄとを備える。ここで、制御情報送信部１１ａ〜１１ｄはそれぞれ同様の処理を実行し、制御情報受信部１２ａ〜１２ｄはそれぞれ同様の処理を実行する。そこで、ここでは代表して、情報処理部１０ａが備える制御情報送信部１１ａおよび制御情報受信部１２ａの各処理について説明する。
【００１５】
制御情報送信部１１ａは、制御情報と、この制御情報の送信先とする情報処理部を指定する送信先情報とを含む制御パケットを、他の情報処理部に対して送信する。ここで、送信先情報には、制御情報の送信先とする情報処理部を複数指定することができる。なお、制御情報は、例えば、送信先の情報処理部に対して何らかの処理の実行を要求することを示す情報である。
【００１６】
制御情報受信部１２ａは、他の情報処理部から送信された制御パケットを受信したとき、受信した制御パケットに格納された送信先情報を基に、次のような処理を行う。制御情報受信部１２ａは、受信した制御パケット内の送信先情報において自身が属する情報処理部（すなわち情報処理部１０ａ）が指定されていない場合には、受信した制御パケットをそのまま他の情報処理部に転送する。一方、制御情報受信部１２ａは、受信した制御パケット内の送信先情報において自身が属する情報処理部が指定されている場合には、受信した制御パケットから制御情報を取り込む。制御情報の取り込み処理の例としては、受信した制御パケットに設定された制御情報を、情報処理部１０ａ内の所定の回路に受け渡す処理がある。これとともに、制御情報受信部１２ａは、受信した制御パケット内の送信先情報を、自身が属する情報処理部を制御情報の送信先として指定しないように書き替え、送信先情報を書き替えた制御パケットを、他の情報処理部に転送する。
【００１７】
ここで、例として、情報処理部１０ａの制御情報送信部１１ａから制御パケットが送信される場合の動作について説明する。情報処理部１０ａの制御情報送信部１１ａは、制御情報２１と送信先情報２２とを含む制御パケット２０を、情報処理部１０ｂに対して送信する。このとき、送信先情報２２には、制御情報２１の送信先として情報処理部１０ｂ，１０ｄが指定されているものとする。図１において、送信先情報２２内の「Ｂ」「Ｄ」は、送信先として情報処理部１０ｂ，１０ｄをそれぞれ指定したことを示す。なお、送信先情報２２において、制御情報２１の送信先を指定する情報が格納される形態は、図１に示すような形態に限らない。
【００１８】
情報処理部１０ｂの制御情報受信部１２ｂは、情報処理部１０ａから送信された制御パケット２０を受信すると、受信した制御パケット２０内の送信先情報２２を参照する。送信先情報２２には、送信先として情報処理部１０ｂが指定されているので、制御情報受信部１２ｂは、受信した制御パケット２０から制御情報２１を取り込む。なお、情報処理部１０ｂは、取り込んだ制御情報２１に応じた処理を実行する。
【００１９】
また、制御情報受信部１２ｂは、受信した制御パケット２０内の送信先情報２２を、情報処理部１０ｂを送信先として指定しないように書き替える。図１の例では、制御情報受信部１２ｂは、送信先情報２２に格納されていた「Ｂ」を消去することにより送信先情報２２を書き替える。制御情報受信部１２ｂは、送信先情報２２を書き替えた制御パケット２０を、情報処理部１０ｃに送信する。
【００２０】
次に、情報処理部１０ｃの制御情報受信部１２ｃは、情報処理部１０ｂから送信された制御パケット２０を受信すると、受信した制御パケット２０内の送信先情報２２を参照する。送信先情報２２には、送信先として情報処理部１０ｃが指定されていないので、制御情報受信部１２ｃは、受信した制御パケット２０をそのまま情報処理部１０ｄに送信する。
【００２１】
次に、情報処理部１０ｄの制御情報受信部１２ｄは、情報処理部１０ｃから送信された制御パケット２０を受信すると、受信した制御パケット２０内の送信先情報２２を参照する。送信先情報２２には、送信先として情報処理部１０ｄが指定されているので、制御情報受信部１２ｄは、受信した制御パケット２０から制御情報２１を取り込む。なお、情報処理部１０ｄは、取り込んだ制御情報２１に応じた処理を実行する。
【００２２】
以上の処理によれば、１つの制御パケットを使用して、複数の情報処理部に対して制御情報が送信される。このため、複数の情報処理部のそれぞれに対して個別の制御パケットを用いて制御情報を送信する場合と比較して、通信路における伝送負荷を軽減できる。特に、制御情報の送信先とする情報処理部の数が多くなるほど、伝送負荷を軽減する効果が大きくなる。
【００２３】
また、制御情報受信部１２ａ〜１２ｄは、受信した制御パケットにおいて、制御情報の送信先として自身が属する情報処理部のみが指定されていた場合には、制御パケットを他の情報処理部に送信しないようにしてもよい。図１の例では、情報処理部１０ｄの制御情報受信部１２ｄが制御パケット２０を受信したとき、制御パケット２０内の送信先情報２２には、送信先として情報処理部１０ｄのみが指定された状態となる。この場合、制御情報受信部１２ｄは、受信した制御パケット２０から制御情報２１を取り込んだ後、制御パケット２０を情報処理部１０ａに送信しない。このように、制御情報受信部が制御パケットを受信したとき、受信した制御パケット内の送信先情報において自身が属する情報処理部のみが指定されていた場合には、それ以上制御パケットが転送されなくなるので、通信路の伝送負荷が軽減される。
【００２４】
次に、各情報処理部が、キャッシュ部を備えるプロセッサコアと分散共有メモリとを有するように構成された情報処理システムの実施の形態について説明する。
〔第２の実施の形態〕
図２は、第２の実施の形態に係る情報処理システムの全体構成例を示す図である。
【００２５】
図２に示す情報処理システム１００は、複数のＳＢ（System Board）１１０ａ〜１１０ｄを備える。ＳＢ１１０ａ〜１１０ｄは、例えば、ラック内のスロットにそれぞれ挿入され、ラックのバックボードを介してリング状に接続される。ＳＢ１１０ａ〜１１０ｄは、それぞれ１つ以上のプロセッサコアを備えた情報処理部の一例であり、ＳＢ１１０ａ〜１１０ｄのそれぞれが備えるプロセッサコアが並列に処理を実行することで、情報処理システム１００は並列コンピュータとして動作する。なお、本実施の形態では４つのＳＢ１１０ａ〜１１０ｄを備えるが、ＳＢの数はこれに限ったものではない。
【００２６】
ＳＢ１１０ａは、複数のノード１２１ａ〜１２３ａ、ノードコントローラ（ＮＣ）１３１ａおよびメモリ１４１ａ〜１４４ａを備える。ノード１２１ａ〜１２３ａはそれぞれＣＰＵであり、ノード１２１ａ〜１２３ａのそれぞれには、プロセッサコアとキャッシュ部とを備えるコア部が１つ以上設けられている。
【００２７】
ノード１２１ａ〜１２３ａのそれぞれの間と、ノード１２１ａ〜１２３ａとＮＣ１３１ａとの間は、例えばＱＰＩ（Quick Path Interconnect）規格のバスによって接続されている。ＮＣ１３１ａは、自身が属するＳＢ１１０ａ内の各ノード１２１ａ〜１２３ａと、他のＳＢ内のＮＣとを接続する。メモリ１４１ａ，１４２ａ，１４３ａは、ノード１２１ａ，１２２ａ，１２３ａにそれぞれ接続され、メモリ１４４ａはＮＣ１３１ａに接続されている。
【００２８】
ＳＢ１１０ｂ〜１１０ｄも、ＳＢ１１０ａと同様の構成を有する。すなわち、ＳＢ１１０ｂ内のノード１２１ｂ，１２２ｂ，１２３ｂ、ＮＣ１３１ｂおよびメモリ１４１ｂ，１４２ｂ，１４３ｂ，１４４ｂは、ＳＢ１１０ａ内のノード１２１ａ，１２２ａ，１２３ａ、ＮＣ１３１ａおよびメモリ１４１ａ，１４２ａ，１４３ａ，１４４ａにそれぞれ対応する。また、ＳＢ１１０ｃ内のノード１２１ｃ，１２２ｃ，１２３ｃ、ＮＣ１３１ｃおよびメモリ１４１ｃ，１４２ｃ，１４３ｃ，１４４ｃは、ＳＢ１１０ａ内ノード１２１ａ，１２２ａ，１２３ａ、ＮＣ１３１ａおよびメモリ１４１ａ，１４２ａ，１４３ａ，１４４ａにそれぞれ対応する。さらに、ＳＢ１１０ｄ内のノード１２１ｄ，１２２ｄ，１２３ｄ、ＮＣ１３１ｄおよびメモリ１４１ｄ，１４２ｄ，１４３ｄ，１４４ｄは、ＳＢ１１０ａ内のノード１２１ａ，１２２ａ，１２３ａ、ＮＣ１３１ａおよびメモリ１４１ａ，１４２ａ，１４３ａ，１４４ａにそれぞれ対応する。
【００２９】
なお、各ＳＢに含まれるノードの数は、３つに限定されるものではない。
ＮＣ１３１ａ〜１３１ｄは、例えばファイバチャネルなどのインタフェースを通じて、リング状に接続されている。本実施の形態では、ＮＣ１３１ａ，１３１ｂ，１３１ｃ，１３１ｄ，１３１ａ，・・・の順にデータが転送されるものとする。
【００３０】
本実施の形態の情報処理システム１００は、ｃｃ−ＮＵＭＡ方式のアーキテクチャを採用したものである。メモリ１４１ａ〜１４４ａ，１４１ｂ〜１４４ｂ、１４１ｃ〜１４４ｃ、１４１ｄ〜１４４ｄは、情報処理システム１００内の各ノードによって共有されるアドレス空間の一部が割り当てられた分散共有メモリである。メモリ１４１ａ〜１４４ａ，１４１ｂ〜１４４ｂ、１４１ｃ〜１４４ｃ、１４１ｄ〜１４４ｄのそれぞれに対する制御および管理は、直結されたノードまたはＮＣが担う。メモリに対する制御および管理を行うノードを、そのメモリに対するホームノードと呼ぶ。例えば図２において、ノード１２１ａはメモリ１４１ａに対するホームノードである。
【００３１】
ノード内のコア部は、他のノード（ホームノード）の管理下にあるメモリのアドレスにアクセスすることができる。ここで、アクセス元のコア部が属するノードは、後述するリクエストパケットの発行元となることから、「リクエスタ（Requester）」と呼ばれる。アクセス先のメモリアドレスを管理するホームノードが、リクエスタが属するＳＢとは別のＳＢにある場合には、リクエスタはＮＣを介して他のＳＢ内のホームノードにアクセスする。また、リクエスタ内のコア部は、アクセスしたメモリのアドレスから読み出したデータをキャッシュすることができる。
【００３２】
図３は、情報処理システムの内部において送受信されるパケットのフォーマットを示す図である。
図３に示すリクエスト（Request）パケットは、ノード内のコア部が、他のノードに対して、他のノードの管理下にあるメモリのアドレスに対するアクセスを要求する際に、ノードから他のノードに送信されるパケットである。リクエストパケットは、パケット送信先のノードを示す「宛先ＩＤ」、アクセス元のノード（リクエスタ）を示す「リクエスタＩＤ」、リクエストパケットの発生ごとにユニークな番号が付与される「トランザクションＩＤ」、アクセス先のメモリアドレスを示す「アドレス」、および、アクセスの種類を示す「コマンド」の各フィールドを含む。また、リクエストパケットは、「コマンド」フィールドに設定される情報によっては「データ」フィールドを含む場合もある。
【００３３】
次に、「コマンド」フィールドに設定される情報の例を説明する。「Ｒｅａｄ＿Ｓ」は、アクセス先からデータを読み出し、読み出したアクセス先とリクエスタ側との共有型データを、リクエスタ側においてＳ（Shared）ステートでキャッシュすることを示す。「Ｒｅａｄ＿Ｅ」は、アクセス先からデータを読み出し、読み出し後にリクエスタ側において変更した排他型データを、リクエスタ側においてＥ（Exclusive）ステートでキャッシュすることを示す。「Ｗｒｉｔｅｂａｃｋ」は、リクエスタ側でキャッシュしているデータをアクセス先のメモリに書き戻すことを示す。「コマンド」フィールドに「Ｗｒｉｔｅｂａｃｋ」が設定された場合、リクエストパケットには、書き込みデータが格納された「データ」も設定される。
【００３４】
データレスポンス（DATA-Response）パケットは、リクエストパケットに応答して送信されるパケットである。データレスポンスパケットは、「宛先ＩＤ」、「リクエスタＩＤ」、「トランザクションＩＤ」、「アドレス」および「コマンド」の各フィールドを含む。また、対応するリクエストパケットの「コマンド」フィールドに、「Ｒｅａｄ＿Ｓ」または「Ｒｅａｄ＿Ｅ」が設定されていた場合、データレスポンスパケットは、アクセス先のアドレスから読み出されたデータが設定される「データ」フィールドをさらに含む。
【００３５】
データレスポンスパケットにおける「リクエスタＩＤ」、「トランザクションＩＤ」および「アドレス」の各フィールドには、対応するリクエストパケット内の「リクエスタＩＤ」、「トランザクションＩＤ」および「アドレス」の各フィールドとそれぞれ同じ値が設定される。データレスポンスパケットの「コマンド」フィールドには、例えば、対応するリクエストパケットの「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定されていた場合、読み出したデータをＳステートでキャッシュ部に登録することを指示する「Ｄ−Ｒｅｓｐｏｎｓｅ＿Ｓ」が設定される。また、対応するリクエストパケットの「コマンド」フィールドに「Ｒｅａｄ＿Ｅ」が設定されていた場合、読み出したデータをＥステートでキャッシュ部に登録することを指示する「Ｄ−Ｒｅｓｐｏｎｓｅ＿Ｅ」が設定される。また、対応するリクエストパケットの「コマンド」フィールドに「Ｗｒｉｔｅｂａｃｋ」が設定されていた場合、データの書き戻しが完了したことを通知する「Ｃｏｍｐｌｅｔｅ」が設定される。
【００３６】
スヌープパケットは、リクエストパケットによるアクセス先のアドレスのデータが、ホームノード以外の他のノードに持ち出されてキャッシュされていた場合に、その持ち出し先のノードに対して送信される。スヌープパケットは、データの持ち出し先のキャッシュ部に対してキャッシュコヒーレンスを保つスヌープ処理を実行させる場合に、スヌープ処理の制御情報を送信するために使用される。本実施の形態では、スヌープパケットとして、同一ＳＢ内のノード間またはノードとＮＣとの間で送信されるローカルスヌープ（Local-Snoop）パケットと、ホームノードが属するＮＣから他のＳＢのＮＣへ送信されるＮＣスヌープ（NC-Snoop）パケットとが使用される。
【００３７】
ローカルスヌープパケットは、「宛先ＩＤ」、「リクエスタＩＤ」、「トランザクションＩＤ」、「アドレス」および「コマンド」の各フィールドを含む。ローカルスヌープパケットにおける「アドレス」フィールドには、対応するリクエストパケット内の「アドレス」フィールドと同じ値が設定される。ローカルスヌープパケットの「コマンド」フィールドには、例えば、対応するリクエストパケットの「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定されていた場合、持ち出し先のキャッシュデータをＳステートにすることを指示する「Ｓｎｏｏｐ＿Ｓ」が設定される。また、対応するリクエストパケットの「コマンド」フィールドに「Ｒｅａｄ＿Ｅ」が設定されていた場合、持ち出し先のキャッシュデータを無効であることを示すＩ（Invalid）ステートにすることを指示する「Ｓｎｏｏｐ＿Ｉ」が設定される。
【００３８】
ＬＳレスポンス（LS-Response）パケットは、スヌープリクエストを行うローカルスヌープパケットに応答して、ローカルスヌープパケットによって指定されたスヌープ処理の結果が格納されるパケットである。ＬＳレスポンスパケットは、「宛先ＩＤ」、「リクエスタＩＤ」、「トランザクションＩＤ」、「アドレス」および「コマンド」の各フィールドを含む。ＬＳレスポンスパケットにおける「リクエスタＩＤ」、「トランザクションＩＤ」および「アドレス」の各フィールドには、対応するローカルスヌープパケット内の「リクエスタＩＤ」、「トランザクションＩＤ」および「アドレス」の各フィールドとそれぞれ同じ値が設定される。
【００３９】
ＬＳレスポンスパケットの「コマンド」には、例えば、対応するローカルスヌープパケットの「コマンド」フィールドに「Ｓｎｏｏｐ＿Ｓ」が設定されていた場合、「アドレス」フィールドに設定されたアドレスに対応するキャッシュデータを、ローカルスヌープパケットを送信したノードとＬＳレスポンスパケットを応答したノードとの共有型データにした旨のＳステートにしたことを通知する「Ｒｅｓｐｏｎｓｅ＿Ｓ」が設定される。また、対応するローカルスヌープパケットの「コマンド」において「Ｓｎｏｏｐ＿Ｉ」が設定されていた場合、「アドレス」に対応するキャッシュデータを、無効化した旨のＩステートにしたことを通知する「Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定される。
【００４０】
ＮＣスヌープパケットは、リクエストパケットによるアクセス先のアドレスのデータをキャッシュする１つ以上のノードに対して、キャッシュコヒーレンスを保つような処理を実行させる制御情報を、１つのパケットによって送信するものである。このＮＣスヌープパケットは、「宛先ＩＤ」、「リクエスタＩＤ」、「トランザクションＩＤ」、「アドレス」、「コマンド」に加え、「ブロードキャストフラグ」および「レスポンスフラグ」の各フィールドを含む。
【００４１】
ＮＣスヌープパケットの「アドレス」フィールドには、対応するリクエストパケット内の「アドレス」フィールドと同じ値が設定される。ＮＣスヌープパケットでは、「宛先ＩＤ」フィールドを使用しないため、特定のノードを指定しないような値（例えば、ブロードキャストを示す値）が設定される。なお、後述する「ブロードキャストフラグ」フィールドを用いて宛先を設定するため、ＮＣスヌープパケットには「宛先ＩＤ」フィールドが含まれなくてもよい。
【００４２】
ＮＣスヌープパケットの「コマンド」フィールドには、データの持ち出し先のノードのキャッシュ部に対して実行させる処理の種別が設定される。例えば、対応するリクエストパケットの「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定されていた場合、ＮＣスヌープパケットの「コマンド」フィールドには、持ち出し先のキャッシュデータを、ＮＣスヌープパケットを送信したノードとデータの持ち出し先のノードとの共有型データにする旨のＳステートにすることを指示する「ＮＣ−Ｓｎｏｏｐ＿Ｓ」が設定される。また、対応するリクエストパケットの「コマンド」フィールドにおいて「Ｒｅａｄ＿Ｅ」が設定されていた場合、持ち出し先のキャッシュデータを無効化した旨のＩステートにすることを指示する「ＮＣ−Ｓｎｏｏｐ＿Ｉ」が設定される。
【００４３】
「ブロードキャストフラグ」フィールドには、「宛先ＩＤ」フィールドの代わりに、パケットの宛先とする１つ以上のＮＣが設定される。「ブロードキャストフラグ」フィールドには、情報処理システム１００が備えるＮＣ１３１ａ〜１３１ｄのそれぞれに対応する複数のビットが設けられている。「ブロードキャストフラグ」フィールドのいずれかのビットに「１」が設定された場合、そのビットに対応するＮＣに対して、当該ＮＣが属するＳＢ内のノードにローカルスヌープパケットをブロードキャストすることが指示される。
【００４４】
「レスポンスフラグ」フィールドは、ＮＣスヌープパケットを受信したＮＣのうちの１つに、受信したＮＣスヌープパケットに対応するＮＣレスポンスパケットを送信するように指示することを目的として設けられる。「レスポンスフラグ」フィールドは、１ビットの領域を備え、ＮＣスヌープパケットが最初のＮＣから送信された初期状態では「１」とされる。その後、ＮＣスヌープパケットが「ブロードキャストフラグ」フィールドに指定されたＮＣに最初に受信されると、「レスポンスフラグ」フィールドは「０」に変更される。従って、「レスポンスフラグ」フィールドが「０」であれば、「ブロードキャストフラグ」フィールドによって宛先として指定されたＮＣの少なくとも１つにおいてＮＣスヌープパケットが受信済みであることを示す。
【００４５】
ＮＣレスポンス（NC-Response）パケットは、ＮＣスヌープパケットに応答して、ＮＣスヌープパケットの「コマンド」フィールドに指定された処理の結果が格納されるパケットである。ＮＣレスポンスパケットは、対応するＮＣスヌープパケットのブロードキャストフラグで指定された１つ以上のＮＣからの処理結果を、１つの応答パケットによってＮＣスヌープパケットの送信元のＮＣに通知するものである。このＮＣレスポンスパケットは、「宛先ＩＤ」、「リクエスタＩＤ」、「トランザクションＩＤ」、「アドレス」、「コマンド」に加え、「レスポンスフィールド」の各フィールドを含む。
【００４６】
ＮＣレスポンスパケットの「宛先ＩＤ」フィールドには、対応するＮＣスヌープパケットに設定されたアドレスについてのホームノードを示すＩＤが格納される。ＮＣレスポンスパケットの「リクエスタＩＤ」、「トランザクションＩＤ」および「アドレス」の各フィールドには、対応するＮＣスヌープパケット内の「リクエスタＩＤ」、「トランザクションＩＤ」および「アドレス」の各フィールドとそれぞれ同じ値が設定される。
【００４７】
ＮＣレスポンスパケットの「コマンド」フィールドには、例えば、対応するＮＣスヌープパケットの「コマンド」フィールドに「ＮＣ−Ｓｎｏｏｐ＿Ｓ」が設定されていた場合、「アドレス」に対応するキャッシュデータを、ＮＣスヌープパケットを送信したノードとデータの持ち出し先のノードとの共有型データにする旨のＳステートにしたことを通知する「ＮＣ−Ｒｅｓｐｏｎｓｅ＿Ｓ」が設定される。また、対応するＮＣスヌープパケットの「コマンド」フィールドに「ＮＣ−Ｓｎｏｏｐ＿Ｉ」が設定されていた場合、「アドレス」に対応するキャッシュデータを、無効化した旨のＩステートにしたことを通知する「ＮＣ−Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定される。
【００４８】
ＮＣレスポンスパケットの「レスポンスフィールド」には、情報処理システム１００が備えるＮＣ１３１ａ〜１３１ｄのそれぞれに対応するビットが設けられている。「レスポンスフィールド」のビットに「１」が設定された場合、そのビットに対応するＮＣが属するＳＢ内のキャッシュ部が、「コマンド」で指定された処理を完了したことを示す。例えば、「コマンド」で「ＮＣ−Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定され、「レスポンスフィールド」の第３ビットが「１」とされていた場合、第３ビットに対応するＮＣ１３１ｃが属するＳＢ１１０ｃにおいて、「アドレス」に対応するキャッシュデータが、無効化された旨のＩステートとされたことを示す。
【００４９】
図４は、ホーム判定テーブルに保持される情報の例を示す図である。
ＳＢ内のノードはそれぞれ、ホーム判定テーブル２０１を備える。各ノードが備えるホーム判定テーブル２０１は、共有メモリ空間のアドレスとホームノードのＩＤとを対応付けたものである。各ノードが備えるホーム判定テーブル２０１に登録されるノードのＩＤは、各ＳＢ内でローカルに使用されるＩＤである。そして、各ノードが備えるホーム判定テーブル２０１において、各ノードが属するＳＢ内のメモリ以外のアドレスに、各ノードが属するＳＢ内のＮＣのＩＤが対応付けられる。
【００５０】
図４（Ａ）では、ノード１２１ａ，１２２ａ，１２３ａがそれぞれ備えるホーム判定テーブル２０１の例を示している。図４（Ａ）のホーム判定テーブル２０１では、例えば、アドレス「０」からアドレス「ａａａａ−１」に対してノード１２１ａが対応付けられている。この場合、アドレス「０」からアドレス「ａａａａ−１」は、ノード１２１ａに接続されたメモリ１４１ａに割り当てられていることを意味する。また、ノード１２１ａ，１２２ａ，１２３ａがそれぞれ備えるホーム判定テーブル２０１では、アドレス「ｃｃｃｃ」からアドレス「ｚｚｚｚ−１」に対してＮＣ１３１ａが対応付けられている。この場合、アドレス「ｃｃｃｃ」からアドレス「ｚｚｚｚ−１」は、他のＳＢに接続されたメモリに割り当てられていることを意味する。
【００５１】
また、情報処理システム１００内のＮＣ１３１ａ〜１３１ｄは、それぞれホーム判定テーブル３０１を備える。ＮＣが備えるホーム判定テーブル３０１は、他のＳＢ内のメモリに割り当てられたアドレスと、他のＳＢ内のホームノードのＩＤとを対応付けたものである。ＮＣが備えるホーム判定テーブル３０１に登録されるノードのＩＤは、情報処理システム１００の全ＳＢでグローバルに使用されるＩＤである。すなわち、ホーム判定テーブル３０１に登録されるノードのＩＤは、情報処理システム１００の全ＳＢでユニークなものとなる。
【００５２】
図４（Ｂ）では、ＮＣ１３１ａが備えるホーム判定テーブル３０１の例を示している。ＮＣ１３１ａが備えるホーム判定テーブル３０１では、例えば、アドレス「ｃｃｃｃ」からアドレス「ｄｄｄｄ−１」に対してノード１２１ｂが対応付けられている。この場合、アドレス「ｃｃｃｃ」からアドレス「ｄｄｄｄ−１」には、ＳＢ１１０ｂ内のノード１２１ｂに割り当てられていることを意味する。
【００５３】
図５は、持ち出し管理テーブルに保持される情報の例を示す図である。
ＳＢ内のノードはそれぞれ、持ち出し管理テーブル２０２を備える。各ノードが備える持ち出し管理テーブル２０２には、各ノードの管理下にあるメモリに格納されたデータが他のノードに持ち出されてキャッシュされている場合に、そのデータが格納されたメモリのアドレスと、データのキャッシュステートと、持ち出し先のノードＩＤとが対応付けられて登録される。ノードが備える持ち出し管理テーブル２０２に登録されるノードのＩＤは、各ＳＢ内でローカルに使用されるＩＤである。そして、持ち出し先のノードが他のＳＢ内のノードである場合には、持ち出し先のノードＩＤとして、同じＳＢ内のＮＣを示すＩＤが登録される。
【００５４】
図５（Ａ）では、ノード１２３ｂが備える持ち出し管理テーブル２０２の例を示している。ノード１２３ｂが備える持ち出し管理テーブル２０２では、例えば、ノード１２３ｂの管理下にあるメモリ１４３ｂに割り当てられたアドレス「ｅｅｅｅ」に対して、当該アドレス「ｅｅｅｅ」に対するデータが排他型データである旨を表すＥステートとノード１２１ｂのＩＤとが対応付けられている。この場合、アドレス「ｅｅｅｅ」の位置のデータが、Ｅステートでノード１２１ｂに持ち出されていることを意味する。
【００５５】
また、情報処理システム１００内のＮＣ１３１ａ〜１３１ｄは、それぞれ持ち出し管理テーブル３０２を備えている。ＮＣが備える持ち出し管理テーブル３０２には、ＮＣが属するＳＢ内のメモリに格納されたデータが他のＳＢ内のノードに持ち出されてキャッシュされている場合に、そのデータが格納されたメモリのアドレスと、データのキャッシュステートと、持ち出し先のノードＩＤとがそれぞれ対応付けられて登録される。ＮＣが備える持ち出し管理テーブル３０２に登録されるノードのＩＤは、情報処理システム１００の全ＳＢでグローバルに使用されるＩＤである。
【００５６】
図５（Ｂ）では、ＮＣ１３１ｂが備える持ち出し管理テーブル３０２の例を示している。ＮＣ１３１ｂが備える持ち出し管理テーブル３０２では、例えば、ＳＢ１１０ｂ内のメモリ１４１ｂ〜１４３ｂのいずれかに割り当てられたアドレス「ｃｃｃｃ」に対して、Ｅステートとノード１２１ｃのＩＤとが対応付けられている。この場合、アドレス「ｃｃｃｃ」の位置のデータが、Ｅステートでノード１２１ｃに持ち出されていることを意味する。
【００５７】
次に、情報処理システム１００におけるメモリへのデータアクセス処理の一例を示し、図３に示したパケットの送受信処理について説明する。次の図６〜図９では一例として、ＳＢ１１０ａ内のノード１２１ａから、ＳＢ１１０ｂ内のノード１２３ｂに接続されたメモリ１４３ｂに対してアクセスした場合の処理について説明する。
【００５８】
図６は、送信元のＳＢからのリクエストパケットの送信に応じて、送信先のＳＢからＮＣスヌープパケットが送信される処理を示す図である。
図６の例では、ノード１２１ａ内のコア部が、ＳＢ１１０ｂ内のノード１２３ｂに接続されたメモリ１４３ｂに割り当てられた、読み出し要求先のアドレスから、Ｅステートでのデータ読み出しを要求したものとする。以下、読み出し要求先のアドレスの位置に記憶されたデータを、「データ＃１」と呼ぶ。
【００５９】
ノード１２１ａは、ノード１２１ａが備えるホーム判定テーブル２０１を参照し、読み出し要求先のアドレスにＮＣ１３１ａが対応付けられていることを認識する。この場合、読み出し要求先のアドレスは他のＳＢに接続されたメモリに割り当てられていることから、ノード１２１ａは、ＮＣ１３１ａに対してリクエストパケットを送信する。リクエストパケットにおける「宛先ＩＤ」および「リクエスタＩＤ」の各フィールドには、それぞれＮＣ１３１ａ、ノード１２１ａを示すように設定され、「コマンド」フィールドには「Ｒｅａｄ＿Ｅ」が設定される。
【００６０】
リクエストパケットを受信したＮＣ１３１ａは、受信したリクエストパケットに設定されたデータ＃１のアドレスで、ＮＣ１３１ａが備えるホーム判定テーブル３０１を検索する。ＮＣ１３１ａは、ホーム判定テーブル３０１から、データ＃１のアドレスに対応付けられたノード１２３ｂのＩＤを抽出し、「宛先ＩＤ」フィールドをホーム判定テーブル３０１から抽出したホームノード（ノード１２３ｂ）のＩＤに書き替えたリクエストパケットを、隣接する転送先であるＳＢ１１０ｂのＮＣ１３１ｂに対して送信する。
【００６１】
ＳＢ１１０ａのＮＣ１３１ａから送信されたリクエストパケットを受信したＮＣ１３１ｂは、「宛先ＩＤ」フィールドから、受信したリクエストパケットが自身に接続されたノード宛であると判定する。ＮＣ１３１ｂは、受信したリクエストパケットに設定されたデータ＃１のアドレスで、ＮＣ１３１ｂが備える持ち出し管理テーブル３０２を検索する。
【００６２】
ここで、リクエストパケットに設定されたアドレスに対応する持ち出し先ノードのＩＤが持ち出し管理テーブル３０２から抽出されなかった場合には、ＮＣ１３１ｂは、リクエストパケットを「宛先ＩＤ」が示すノード１２３ｂに送信する。この場合、データ＃１がノード１２１ｂ，１２２ｂにも持ち出されていなければ、ノード１２３ｂは、要求されたデータ＃１をメモリ１４３ｂからＥステートで読み出し、読み出したデータ＃１を格納したデータレスポンスパケットをＮＣ１３１ｂに送信する。データレスポンスパケットは、ＮＣ１３１ｂからＮＣ１３１ｃ，１３１ｄを経由してＮＣ１３１ａに受信され、リクエスタであるＮＣ１３１ａ内のノード１２１ａに転送されて、一連の処理が終了する。
【００６３】
一方、ＮＣ１３１ａからのリクエストパケットに設定されたアドレスに対応する持ち出し先ノードのＩＤが持ち出し管理テーブル３０２から抽出された場合、ＮＣ１３１ｂは、データ＃１のキャッシュコヒーレンシを保つように制御するコマンドを、すべての持ち出し先に対して送信する。ここで、本実施の形態では、データ＃１の持ち出し先のノードが属するすべてのＮＣに対してそれぞれ個別にスヌープパケットを送信する代わりに、１つのＮＣスヌープパケットを送信することで、ＮＣ間を接続する通信路の伝送負荷を軽減する。
【００６４】
前述のように、ＮＣスヌープパケットには、ＮＣ１３１ａ〜１３１ｄがそれぞれ割り当てられたビットを備えるブロードキャストフラグが設定されている。ここで、ＮＣ１３１ｂが備える持ち出し管理テーブル３０２に登録されたデータ＃１の持ち出し先が、ＳＢ１１０ｃ内のノード１２１ｃ，１２２ｃおよびＳＢ１１０ｄ内のノード１２１ｄ，１２２ｄであったものとする。ブロードキャストフラグの各ビットが先頭からＮＣ１３１ａ，１３１ｂ，１３１ｃ，１３１ｄを示すものとすると、ＮＣ１３１ｂは、ブロードキャストフラグにおいてＮＣ１３１ｃ，１３１ｄにそれぞれ対応する第３ビットおよび第４ビットを「１」とし、他のビットを「０」としたＮＣスヌープパケットを、隣接する転送先であるＮＣ１３１ｃに対して送信する。
【００６５】
また、元のリクエストパケットの「コマンド」フィールドでは「Ｒｅａｄ＿Ｅ」が設定されていたことから、送信されるＮＣスヌープパケットの「コマンド」フィールドには、データ＃１のキャッシュデータをＩステートにするように指示する「ＮＣ−Ｓｎｏｏｐ＿Ｉ」が設定される。
【００６６】
なお、ＮＣ１３１ａからのリクエストパケットに設定されたアドレスに対応する持ち出し先ノードのＩＤが、持ち出し管理テーブル３０２から抽出された場合であっても、リクエストパケット内の「コマンド」フィールドの設定値と、持ち出されたデータのキャッシュステートとの組み合わせによっては、ＮＣスヌープパケットが送信されずに、リクエストパケットがホームノードに送信される場合がある。
【００６７】
図７は、ＮＣスヌープパケットを受信したＳＢ内の処理を示す図である。
ＮＣ１３１ｂからのＮＣスヌープパケットを受信したＮＣ１３１ｃは、受信したＮＣスヌープパケット内のブロードキャストフラグを参照する。ブロードキャストフラグにおいては、ＮＣ１３１ｃに対応するビットが「１」とされていることから、ＮＣ１３１ｃは、受信したＮＣスヌープパケットの内容に基づくローカルスヌープパケットを生成し、ＳＢ１１０ｃ内のノード１２１ｃ〜１２３ｃの全てにブロードキャストする。ブロードキャストされるローカルスヌープパケットの「コマンド」フィールドには、ＮＣスヌープパケットの「コマンド」フィールドに基づき、「Ｓｎｏｏｐ＿Ｉ」が設定される。
【００６８】
また、ＮＣ１３１ｃは、ブロードキャストフラグにおけるＮＣ１３１ｃに対応するビットを「０」に書き替えたＮＣスヌープパケットを、隣接する転送先であるＮＣ１３１ｄに送信する。ＮＣスヌープパケットを受信したＮＣ１３１ｄは、受信したＮＣスヌープパケット内のブロードキャストフラグを参照する。ブロードキャストフラグにおいては、ＮＣ１３１ｄに対応するビットが「１」とされていることから、ＮＣ１３１ｄは、受信したＮＣスヌープパケットの内容に基づくローカルスヌープパケットを生成し、ＳＢ１１０ｄ内のノード１２１ｄ〜１２３ｄの全てにブロードキャストする。ブロードキャストされるローカルスヌープパケットの「コマンド」フィールドには、ＮＣスヌープパケットの「コマンド」フィールドに基づき、「Ｓｎｏｏｐ＿Ｉ」が設定される。
【００６９】
また、ＮＣ１３１ｄは、受信したＮＣスヌープパケットのうち、ブロードキャストフラグにおけるＮＣ１３１ｄに対応するビットを「０」に書き替える。このとき、ブロードキャストフラグの全ビットが「０」となることから、ＮＣ１３１ｄは、ＮＣスヌープパケットが必要なすべてのＮＣに受信されたと判定して、ＮＣスヌープパケットを隣接する転送先であるＮＣ１３１ａに送信しない。
【００７０】
図８は、ＮＣレスポンスパケットが送信される際のＳＢ内の処理を示す図である。
ＳＢ１１０ｃにおいて、ＮＣ１３１ｃからノード１２１ｃ〜１２３ｃに対してローカルスヌープパケットがブロードキャストされると、ローカルスヌープパケットを受信したノード１２１ｃ〜１２３ｃは、それぞれ要求された処理に対する応答を行う。図８の例では、ノード１２１ｃ，１２２ｃのそれぞれにデータ＃１がキャッシュされている。ノード１２１ｃ，１２２ｃの各キャッシュ部は、受信したローカルスヌープパケットの「アドレス」フィールドに対応するキャッシュデータをＩステートとし、「コマンド」フィールドに処理結果として「Ｒｅｓｐｏｎｓｅ＿Ｉ」を設定したＬＳ−レスポンスパケットをＮＣ１３１ｃに送信する。また、ノード１２３ｃは、ローカルスヌープパケットの「アドレス」フィールドに対応するキャッシュデータを元々保持していないことから、キャッシュ部を特に制御することなく、「コマンド」フィールドに「Ｒｅｓｐｏｎｓｅ＿Ｉ」を設定したＬＳレスポンスパケットをＮＣ１３１ｃに送信する。
【００７１】
ＮＣスヌープパケットに対する応答であるＮＣレスポンスパケットは、ブロードキャストフラグにおいて指定されたＮＣのうち、最初にＮＣスヌープパケットを受信したＮＣ（図８ではＮＣ１３１ｃ）によって生成され、送信される。ＮＣ１３１ｃは、ＳＢ１１０ｃ内のすべてのノード１２１ｃ〜１２３ｃからＬＳレスポンスパケットを受信すると、レスポンスフィールドにおけるＮＣ１３１ｃに対応するビットに「１」を設定したＮＣレスポンスパケットを、隣接する転送先であるＮＣ１３１ｄに送信する。
【００７２】
なお、ＮＣレスポンスパケットの「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドには、ＮＣスヌープパケットの「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドと同じ値がそれぞれ設定される。また、ＮＣレスポンスパケットの「コマンド」フィールドには「ＮＣ−Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定される。
【００７３】
一方、ＳＢ１１０ｄにおいても、ＮＣ１３１ｄからノード１２１ｄ〜１２３ｄに対してローカルスヌープパケットがブロードキャストされると、ローカルスヌープパケットを受信したノード１２１ｄ〜１２３ｄは、要求された処理に対する応答を行う。ＮＣ１３１ｄは、ＳＢ１１０ｄ内のすべてのノード１２１ｄ〜１２３ｄからＬＳレスポンスパケットを受信し、かつ、ＮＣスヌープパケットと同じ「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールド値が設定されたＮＣレスポンスパケットを受信すると、次の処理を行う。ＮＣ１３１ｄは、受信したＮＣレスポンスパケットのうち、レスポンスフィールドにおけるＮＣ１３１ｄに対応するビットを「１」に書き替え、書き替え後のＮＣレスポンスパケットを、隣接する転送先であるＮＣ１３１ａに送信する。
【００７４】
ＮＣ１３１ａは、同じ「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールド値が設定されたＮＣスヌープパケットに基づく処理を過去に行っていないことから、受信したＮＣレスポンスパケットをそのままＮＣ１３１ｂに転送する。これにより、ＮＣ１３１ｂは、データ＃１のすべての持ち出し先のノードから、ＮＣスヌープパケットによって要求した処理についての完了通知を受信する。
【００７５】
なお、図示しないが、ＮＣレスポンスパケットを受信したＮＣ１３１ｂは、データ＃１のホームノードであるノード１２３ｂに対して、持ち出されたデータに対するリクエストパケットを送信する。ノード１２３ｂは、データ＃１が他のＳＢに持ち出されていると判定して、ＮＣ１３１ｂに対してローカルスヌープパケットを送信する。ＮＣ１３１ｂは、ローカルスヌープパケットの応答として、ＮＣレスポンスパケットに格納された処理結果（ここでは、キャッシュデータをＩステートとしたことを通知するコマンドである「Ｒｅｓｐｏｎｓｅ＿Ｉ」）を設定したＬＳレスポンスパケットを、ノード１２３ｂに送信する。
【００７６】
ＬＳレスポンスパケットを受信したノード１２３ｂは、キャッシュコヒーレンシが保たれた状態であると判定し、データ＃１をＥステートでメモリ１４３ｂから読み出し、読み出したデータ＃１を格納したデータレスポンスパケットをＮＣ１３１ｂに送信する。データレスポンスパケットは、ＮＣ１３１ｂからＮＣ１３１ｃ，１３１ｄを経由してＮＣ１３１ａに受信され、リクエスタであるＮＣ１３１ａ内のノード１２１ａに転送されて、一連の処理が終了する。
【００７７】
ここで、図９は、ＮＣスヌープパケットおよびＮＣレスポンスパケットが伝送される様子を示す図である。
まず、ＮＣスヌープパケットの伝送について説明する。図７で説明したように、ＮＣ１３１ｂは、ＮＣスヌープパケットを送信する際に、ＮＣ１３１ｃ，１３１ｄにそれぞれ対応するブロードキャストフラグの第３ビットおよび第４ビットを「１」とし、他のビットを「０」とする。また、ＮＣ１３１ｂは、ＮＣスヌープパケット内のレスポンスフラグを初期値「１」とする。
【００７８】
ＮＣ１３１ｂからのＮＣスヌープパケットを受信したＮＣ１３１ｃは、ブロードキャストフラグにおける自身を指示するビットが「０」である場合、ＮＣスヌープパケットをそのまま隣接する転送先に送信する。しかしながら、図９の例では、ブロードキャストフラグにおけるＮＣ１３１ｃを指示するビットが「１」であることから、ＮＣ１３１ｃは、ＮＣスヌープパケットの内容に基づき、自身が属するＳＢ１１０ｃ内のノードにローカルスヌープパケットをブロードキャストする。
【００７９】
また、ＮＣ１３１ｃは、ブロードキャストフラグにおける自身を指示するビットを「０」に書き替える。さらに、ＮＣ１３１ｃは、初期値「１」とされたレスポンスフラグを「０」に書き替える。ここで、書き替え後のブロードキャストフラグに「１」が存在することから、ＮＣ１３１ｃは、ブロードキャストフラグおよびレスポンスフラグを書き替えたＮＣスヌープパケットを、隣接するＮＣ１３１ｄに送信する。
【００８０】
ＮＣ１３１ｃからのＮＣスヌープパケットを受信したＮＣ１３１ｄは、ブロードキャストフラグにおける自身を指示するビットが「１」であることから、ＮＣスヌープパケットの内容に基づき、自身が属するＳＢ１１０ｄ内のノードにローカルスヌープパケットをブロードキャストする。また、ＮＣ１３１ｄは、ブロードキャストフラグにおける自身を指示するビットを「０」に書き替える。ここで、書き替え後のブロードキャストフラグの全ビットが「０」になることから、ＮＣ１３１ｄは、ＮＣスヌープパケットをそれ以上送信しない。
【００８１】
以上のＮＣスヌープパケットを用いることにより、データの持ち出し先のノードが属するすべてのＮＣに対して、「コマンド」フィールドで指定される処理を１つのパケットによって要求することができるようになる。このため、データが複数のノードに持ち出されたときに、ホームノードに接続したＮＣがデータの持ち出し先のすべてのノードに対して個別にスヌープパケットを送信する場合と比較して、ＮＣ間を接続する通信路の伝送負荷を軽減することができる。
【００８２】
次に、ＮＣレスポンスパケットの伝送について説明する。ＮＣスヌープパケットのブロードキャストフラグによって指定されたＮＣは、ＮＣスヌープパケットのレスポンスフラグを参照する。レスポンスフラグが「１」である場合、ＮＣは、受信したＮＣスヌープパケットに対応するＮＣレスポンスパケットを生成して送信する。
【００８３】
図９の例では、ＮＣ１３１ｃがＮＣスヌープパケットを受信したとき、受信したＮＣスヌープパケットのレスポンスフラグは「１」となっている。このため、ＮＣ１３１ｃは、受信したＮＣスヌープパケットに対応するＮＣレスポンスパケットを生成する。ＮＣ１３１ｃは、ＳＢ１１０ｃ内のすべてのノードからＬＳレスポンスパケットを受信し、ＳＢ１１０ｃ内でキャッシュされたデータ＃１がすべて無効化されたことを確認すると、ＮＣレスポンスパケットをＮＣ１３１ｄに送信する。このとき、送信されるＮＣレスポンスパケットにおいては、「コマンド」フィールドに対してキャッシュデータの無効化が完了したことを示す「ＮＣ−Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定され、「レスポンスフィールド」におけるＮＣ１３１ｃを指示するビットが「１」とされる。
【００８４】
ＮＣ１３１ｄは、ＮＣ１３１ｃからのＮＣレスポンスパケットを受信し、かつ、ＳＢ１１０ｄ内のすべてのノードからＬＳレスポンスパケットを受信して、ＳＢ１１０ｄ内でキャッシュされたデータ＃１がすべて無効化されたことを確認すると、ＮＣレスポンスパケットをＮＣ１３１ａに転送する。このとき、転送されるＮＣレスポンスパケットにおいては、「レスポンスフィールド」におけるＮＣ１３１ｄを指示するビットが「１」とされる。
【００８５】
ＮＣ１３１ａは、ＮＣ１３１ｄからのＮＣレスポンスパケットを受信する。しかし、ＮＣ１３１ａは、受信したＮＣレスポンスパケットに設定されたものと同じ「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールド値が設定されたＮＣスヌープパケットを過去に受信していない。この場合、ＮＣ１３１ａは、受信したＮＣレスポンスパケットをそのままＮＣ１３１ｂに転送する。
【００８６】
ＮＣ１３１ｂは、ＮＣ１３１ａからのＮＣレスポンスパケットを受信する。ＮＣ１３１ｂは、受信したＮＣレスポンスパケットの「コマンド」フィールドに「ＮＣ−Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定され、レスポンスフィールドにおけるＮＣ１３１ｃ，１３１ｄに対応するビットが「１」とされていることを確認する。ＮＣ１３１ｂは、確認したこれらの情報から、ＳＢ１１０ｃおよびＳＢ１１０ｄの内部にそれぞれキャッシュされたデータが無効化されたことを認識する。
【００８７】
以上のＮＣレスポンスパケットを用いることにより、ＮＣスヌープパケットの送信元のＮＣは、データの持ち出し先とされたすべてのノードにおいてＮＣスヌープパケットにより指示した処理が完了したことを、１つのパケットによって認識できるようになる。このため、データが複数のノードに持ち出された場合に、各ノードに対して処理を要求するスヌープパケットだけでなく、スヌープパケットに対するレスポンスパケットのデータ量も抑制することができる。従って、ＮＣ間を接続する通信路の伝送負荷を一層軽減することができる。
【００８８】
図１０は、ＮＣスヌープパケットが送信される別の処理例を示す図である。
ＮＣは、図６の例のように他のＮＣからのリクエストパケットを受信した場合の他、図１０に示すように、同じＳＢ内のノードからローカルスヌープパケットを受信した場合にも、ＮＣスヌープパケットを送信する。
【００８９】
図１０では、ノード１２２ｂ内のコア部が、ノード１２３ｂに接続されたメモリ１４３ｂに割り当てられたアドレスからのＥステートでのデータ読み出しを要求したものとする。ノード１２２ｂは、自身が備えるホーム判定テーブル（図示せず）に基づいて、読み出し要求先のアドレスに対応するホームノードがノード１２３ｂであることを認識する。ノード１２２ｂは、ホームノードであるノード１２３ｂに対してリクエストパケットを送信する。リクエストパケットの「コマンド」フィールドには「Ｒｅａｄ＿Ｅ」が設定される。
【００９０】
リクエストパケットを受信したノード１２３ｂは、受信したリクエストパケットに設定されたアドレスで、ノード１２３ｂが備える持ち出し管理テーブル２０２を検索する。ここで、リクエストパケットに設定されたアドレスに対応する持ち出し先ノードのＩＤが持ち出し管理テーブル２０２から抽出されなかった場合には、ノード１２３ｂは、要求されたデータ＃１をメモリ１４３ｂからＥステートで読み出し、読み出したデータ＃１を格納したデータレスポンスパケットをノード１２２ｂに送信する。
【００９１】
一方、リクエストパケットに設定されたアドレスに対応する持ち出し先ノードのＩＤが持ち出し管理テーブル２０２から抽出された場合、ノード１２３ｂは、「コマンド」フィールドに「Ｓｎｏｏｐ＿Ｉ」を設定したローカルスヌープパケットをＮＣ１３１ｂに送信する。ここで、持ち出し先ノードがＳＢ１１０ｃ，１１０ｄにそれぞれ存在するものとすると、ＮＣ１３１ｂは、ブロードキャストフラグにおけるＳＢ１１０ｃ、１１０ｄにそれぞれ対応するビットを「１」としたＮＣスヌープパケットを送信する。以後、ＮＣ１３１ｂがＮＣレスポンスパケットを受信するまでの処理は、図７，図８で説明した処理と同様である。ＮＣスヌープパケットが送信されることで、データ＃１のキャッシュコヒーレンシを保つように制御するコマンドがすべての持ち出し先ノードに対して送信される。
【００９２】
なお、ノード１２２ｂからのリクエストパケットの設定されたアドレスに対応する持ち出し先ノードのＩＤが持ち出し管理テーブル２０２から抽出された場合であっても、リクエストパケット内の「コマンド」フィールドの設定値と、持ち出されたデータのキャッシュステートとの組み合わせによっては、ノード１２３ｂからローカルスヌープパケットが送信されない場合がある。
【００９３】
図示しないが、ＮＣレスポンスパケットを受信したＮＣ１３１ｂは、ノード１２３ｂに対してＬＳレスポンスパケットを送信することで、データ＃１の持ち出し先とされたすべてのノードにおいて「Ｓｎｏｏｐ＿Ｉ」が示す処理が完了したことをノード１２３ｂに通知する。「Ｓｎｏｏｐ＿Ｉ」が示す処理が完了したことを認識したノード１２３ｂは、要求されたデータ＃１をメモリ１４３ｂからＥステートで読み出し、読み出したデータ＃１を格納したデータレスポンスパケットをノード１２２ｂに送信する。
【００９４】
次に、ノードおよびＮＣの構成例と、ノードおよびＮＣの詳細な動作について説明する。まず、図１１は、ノードの構成例およびその動作を示す図である。この図１１では例として、ＳＢ１１０ａ内のノード１２１ａの構成例を示すが、他のノードも図１１と同様の構成を有する。なお、この図１１以降、ノードの内部に備えられる構成については、すべてのノードについて共通の符号を付して説明する。
【００９５】
ノード１２１ａは、コア部２１０，２２０、メモリ制御部２３１，２３２、リクエスト生成部２４１、ローカルスヌープ生成部２４２、ＬＳレスポンス生成部２４３、データレスポンス生成部２４４、アービタ２５１，２５２、ホーム判定テーブル２０１および持ち出し管理テーブル２０２を備えている。
【００９６】
コア部２１０は、図示しないプロセッサコアと、キャッシュ部２１１とを備える。コア部２２０も同様に、図示しないプロセッサコアと、キャッシュ部２２１とを備える。キャッシュ部２１１，２２１は、それぞれ、キャッシュメモリと、キャッシュメモリを制御するキャッシュ制御部とを備える。コア部２１０，２２０は、それぞれ同様の処理を実行可能であるので、ここではコア部２１０の動作についてのみ説明する。
【００９７】
コア部２１０は、他のノードの管理下にあるメモリ内のデータ（ただし、キャッシュ部２１１にキャッシュされていないデータ）にアクセスする場合、アクセス先のアドレスとコマンドとを含むリクエストを、アービタ２５１を介してリクエスト生成部２４１に送信する。コマンドが「Ｗｒｉｔｅｂａｃｋ」である場合、リクエストには書き戻し対象のデータが含まれる。
【００９８】
コア部２１０からのリクエストを受信したリクエスト生成部２４１は、ホーム判定テーブル２０１を参照する。前述のように、ホーム判定テーブル２０１には、共有メモリ空間のアドレスとホームノードのＩＤとが対応づけられている。リクエスト生成部２４１は、ホーム判定テーブル２０１から、コア部２１０からのリクエストに含まれるアドレスに対応付けられたノードＩＤを抽出し、抽出したノードＩＤを「宛先ＩＤ」フィールドに設定したリクエストパケットを送信する。ここで、アクセス先のアドレスに対応するホームノードがＳＢ１１０ａ内のノードである場合、リクエストパケットはＳＢ１１０ａ内のホームノードに送信される。一方、アクセス先のアドレスに対応するホームノードがＳＢ１１０ａの外部にある場合、リクエストパケットはＳＢ１１０ａ内のＮＣ１３１ａに送信される。
【００９９】
また、コア部２１０のキャッシュ部２１１は、ＳＢ１１０ａ内の他のノードまたはＮＣ１３１ａからデータレスポンスパケットを受信すると、データレスポンスパケットの「コマンド」フィールドに応じた処理を行う。受信したデータレスポンスパケットの「コマンド」フィールドがデータ読み出しの完了を示すものである場合、キャッシュ部２１１は、データレスポンスパケットの「データ」フィールドから抽出した読み出しデータを、「コマンド」フィールドで示されるステートでキャッシュメモリに書き込む。一方、受信したデータレスポンスパケットの「コマンド」フィールドがデータ書き込みの完了を示すものである場合、キャッシュ部２１１は、書き込みの完了を認識する。
【０１００】
さらに、コア部２１０のキャッシュ部２１１は、ＳＢ１１０ａ内の他のノードまたはＮＣ１３１ａからローカルスヌープパケットを受信すると、ローカルスヌープパケットの「コマンド」フィールドで示される処理を行う。例えば、キャッシュ部２１１は、受信したローカルスヌープパケットの「アドレス」フィールドに対応するキャッシュデータがキャッシュメモリに存在する場合、キャッシュデータのステートを「コマンド」フィールドで指定されるステートに変更する。
【０１０１】
キャッシュ部２１１は、ローカルスヌープパケットの「コマンド」フィールドで指示された処理を完了すると、指示された処理が完了されたことを、アービタ２５２を介してＬＳレスポンス生成部２４３に通知する。ＬＳレスポンス生成部２４３は、キャッシュ部２１１において処理が完了したことを通知する情報を「コマンド」フィールドに設定したＬＳレスポンスパケットを生成し、ローカルスヌープパケットの送信元に対して送信する。
【０１０２】
メモリ制御部２３１は、ＳＢ１１０ａ内の他のノードまたはＮＣ１３１ａからリクエストパケットを受信すると、持ち出し管理テーブル２０２を参照する。前述のように、持ち出し管理テーブル２０２には、ノード１２１ａの管理下にあるメモリ１４１ａに格納されたデータが他のノードに持ち出されてキャッシュされている場合に、そのデータが格納されたメモリ１４１ａのアドレスと、データのキャッシュステートと、持ち出し先のノードＩＤとが対応付けられて登録されている。
【０１０３】
メモリ制御部２３１は、持ち出し管理テーブル２０２から得られる情報と、受信したリクエストパケット内の「コマンド」フィールドの設定値とに応じて、ローカルスヌープパケットとデータレスポンスパケットのどちらを送信すべきかを判定する。受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル２０２のレコードに持ち出し先のノードＩＤが登録されていない場合、メモリ制御部２３１は、データレスポンスパケットを送信すべきと判定する。また、受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル２０２のレコードに持ち出し先のノードＩＤが登録されている場合でも、リクエストパケット内の「コマンド」フィールドに「Ｗｒｉｔｅｂａｃｋ」が設定されている場合、および、「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定され、かつデータのキャッシュステートがステートＳである場合には、メモリ制御部２３１は、データレスポンスパケットを送信すべきと判定する。一方、受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル２０２のレコードに持ち出し先のノードＩＤが登録されているときには、リクエストパケット内の「コマンド」フィールドに「Ｒｅａｄ＿Ｅ」が設定されている場合、および、「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定され、かつデータのキャッシュステートがステートＥである場合には、メモリ制御部２３１は、ローカルスヌープパケットを送信すべきと判定する。
【０１０４】
ローカルスヌープパケットを送信すべきと判定した場合、メモリ制御部２３１は、持ち出し先のノードＩＤをローカルスヌープ生成部２４２に通知する。ローカルスヌープ生成部２４２は、メモリ制御部２３１から通知されたノードＩＤを「宛先ＩＤ」フィールドに設定したローカルスヌープパケットを送信する。持ち出し先のノードがＳＢ１１０ａ内のノードである場合、ローカルスヌープパケットはＳＢ１１０ａ内のノードに送信される。一方、持ち出し先のノードがＳＢ１１０ａの外部にある場合、ローカルスヌープパケットはＳＢ１１０ａ内のＮＣ１３１ａに送信される。
【０１０５】
一方、データレスポンスパケットを送信すべきと判定した場合、メモリ制御部２３１は、メモリ１４１ａにアクセスする。リクエストパケットの「コマンド」フィールドにより読み出しが要求されていた場合、メモリ制御部２３１は、リクエストパケットに設定されたアドレスの位置からデータを読み出す。また、リクエストパケットの「コマンド」フィールドに「Ｗｒｉｔｅｂａｃｋ」が設定されていた場合、メモリ制御部２３１は、リクエストパケットの「データ」フィールドから抽出したデータを、リクエストパケットに設定されたアドレスの位置に書き込む。
【０１０６】
メモリ制御部２３１は、メモリ１４１ａへのアクセス処理が完了すると、データレスポンス生成部２４４に対して処理の完了を通知する。この場合、データレスポンス生成部２４４は、メモリ制御部２３１が受信したリクエストパケットの送信元に対して、データレスポンスパケットを送信する。リクエストパケットの「コマンド」フィールドによりデータの読み出しが要求されていた場合、送信されるデータレスポンスパケットの「データ」フィールドに、メモリ制御部２３１によってメモリ１４１ａから読み出されたデータが格納される。
【０１０７】
また、データレスポンス生成部２４４は、メモリ制御部２３１が受信したリクエストパケットの「コマンド」フィールドに「Ｒｅａｄ＿Ｅ」が設定されていた場合、持ち出し管理テーブル２０２を更新する。データレスポンス生成部２４４は、持ち出し管理テーブル２０２における、リクエストパケットに設定されたアドレスに対応するレコードに対して、ステートをＥにするとともに、持ち出し先として「リクエスタＩＤ」フィールドの値を登録する。
【０１０８】
メモリ制御部２３２は、ＳＢ１１０ａ内の他のノードまたはＮＣ１３１ａからＬＳレスポンスパケットを受信すると、受信したＬＳレスポンスパケットをデータレスポンス生成部２４４に転送する。このとき、メモリ制御部２３２は、受信したＬＳレスポンスパケットに対応するリクエストパケットの「コマンド」フィールドによりデータの読み出しが要求されていた場合には、メモリ１４１ａにアクセスし、ＬＳレスポンスパケットに設定されたアドレスからデータを読み出す。なお、ここで言う「受信したＬＳレスポンスパケットに対応するリクエストパケット」とは、受信したＬＳレスポンスパケットと「トランザクションＩＤ」フィールドの値が同じであるリクエストパケットを指す。メモリ制御部２３２は、メモリ１４１ａからデータを読み出した場合、読み出したデータをデータレスポンス生成部２４４に送信する。
【０１０９】
メモリ制御部２３２を通じてＬＳレスポンスパケットを受信したデータレスポンス生成部２４４は、「リクエスタＩＤ」フィールドが示すノードまたはＮＣ１３１ａを「宛先ＩＤ」フィールドに設定したデータレスポンスパケットを送信する。メモリ制御部２３２によってメモリ１４１ａからデータが読み出された場合には、読み出されたデータがデータレスポンスパケットの「データ」フィールドに格納される。
【０１１０】
また、データレスポンス生成部２４４は、メモリ制御部２３２を通じたＬＳレスポンスパケットの受信に応じてデータレスポンスパケットを送信した場合には、持ち出し管理テーブル２０２における、受信したＬＳレスポンスパケットに設定されたアドレスに対応するレコードを更新する。データレスポンス生成部２４４は、持ち出し管理テーブル２０２における更新前のレコード内の「アドレス」および「ステート」の各フィールドの値と、受信したＬＳレスポンスパケット内の「アドレス」フィールドの値との組み合わせに応じて、レコード内の「ステート」および「持ち出し先ＩＤ」の各フィールドを更新する。
【０１１１】
次に、図１２は、ＮＣの構成例およびその動作を示す図である。この図１２では例として、ＳＢ１１０ａ内のＮＣ１３１ａの構成例を示すが、他のＮＣ１３１ｂ〜１３１ｄも図１２と同様の構成を有する。なお、この図１２以降、ＮＣの内部に備えられる構成については、すべてのＮＣについて共通の符号を付して説明する。
【０１１２】
ＮＣ１３１ａは、リクエスト送信部３１１、ＮＣスヌープ生成部３１２、リクエスト受信処理部３１３、ＮＣスヌープ処理部３１４、ＮＣレスポンス処理部３１５、データレスポンス送信部３１６、リクエスタ判定部３２１、宛先判定部３２２、ＢＣ（Broadcast）判定部３２３、ＮＣレスポンス判定部３２４、宛先判定部３２５およびアービタ３３１〜３３５を備えている。また、ＮＣ１３１ａは、処理の際に利用される情報として、前述したホーム判定テーブル３０１および持ち出し管理テーブル３０２の他、ＩＤ変換テーブル３０３、レスポンス受信判定テーブル３０４およびレスポンス送信判定テーブル３０５を備える。
【０１１３】
リクエスト送信部３１１は、ＮＣ１３１ａが属するＳＢ１１０ａ内のノードからリクエストパケットを受信すると、ホーム判定テーブル３０１から、リクエストパケットに設定されたアドレスに対応するホームノードのＩＤを抽出する。リクエスト送信部３１１は、受信したリクエストパケットの「宛先ＩＤ」フィールドを、ホーム判定テーブル３０１から抽出したホームノードのＩＤに書き替える。これとともに、リクエスト送信部３１１は、受信したリクエストパケットの「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値を、ＮＣ１３１ａの内部でローカルに使用されるＩＤから、情報処理システム１００に含まれる複数の各ＮＣでグローバルに使用されるＩＤに書き替える。リクエスト送信部３１１は、「宛先ＩＤ」「リクエスタＩＤ」「トランザクションＩＤ」の各フィールドの値を書き替えたリクエストパケットを、アービタ３３１を介して、隣接する送信先であるＮＣ１３１ｂに送信する。
【０１１４】
なお、以下の説明では、ＳＢ内でローカルに使用されるＩＤを「ローカルＩＤ」と呼び、情報処理システム１００に含まれる各ＳＢでグローバルに使用されるＩＤを「グローバルＩＤ」と呼ぶ。
【０１１５】
リクエスタ判定部３２１は、ＮＣ１３１ａが属するＳＢ１１０ａ内のノードからローカルスヌープパケットを受信すると、受信したローカルスヌープパケットにおける「宛先ＩＤ」および「リクエスタＩＤ」の各フィールドの値を比較する。「宛先ＩＤ」および「リクエスタＩＤ」の各フィールド値が同じである場合（例えば、ＮＣ１３１ａが送信したリクエストパケットに応答してノードからローカルスヌープパケットが送信された場合）、リクエスタ判定部３２１は、受信したローカルスヌープパケットをＮＣレスポンス処理部３１５に送信する。一方、「宛先ＩＤ」および「リクエスタＩＤ」の各フィールドの値が異なる場合（例えば、リクエスタがホームノード以外のＳＢ１１０ａ内のノードである場合）、リクエスタ判定部３２１は、受信したローカルスヌープパケットをＮＣスヌープ生成部３１２に送信する。
【０１１６】
ＮＣスヌープ生成部３１２は、リクエスタ判定部３２１を通じてローカルスヌープパケットを受信すると、持ち出し管理テーブル３０２から、ローカルスヌープパケットに設定されたアドレスに対応付けられたノードＩＤを取得して、データの持ち出し先のノードを判別する。ＮＣスヌープ生成部３１２は、ＮＣスヌープパケットを生成し、データの持ち出し先のノードに接続されたＮＣにそれぞれ対応する、ブロードキャストフラグ内のビットを「１」とするとともに、レスポンスフラグを「１」とする。また、ＮＣスヌープ生成部３１２は、受信したローカルスヌープパケット内の「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドをそれぞれローカルＩＤからグローバルＩＤに変換し、変換後の各ＩＤをＮＣスヌープパケットの「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値に設定する。ＮＣスヌープ生成部３１２は、設定を完了したＮＣスヌープパケットを、アービタ３３２を介して、隣接する送信先であるＮＣ１３１ｂに送信する。
【０１１７】
さらに、ＮＣスヌープパケットを送信したＮＣスヌープ生成部３１２は、レスポンス受信判定テーブル３０４に対して新規のレコードを登録する。登録されたレコードは、送信したＮＣスヌープパケットに対応するＮＣレスポンスパケットをＮＣ１３１ａが受信した際に参照される。
【０１１８】
ここで、図１３は、レスポンス受信判定テーブルに保持される情報の例を示す図である。
レスポンス受信判定テーブル３０４は、送信したＮＣスヌープパケットに対応するＮＣレスポンスパケットを受信するまでの間、ＮＣスヌープパケットを送信する際のトリガとなったパケットの内容を保持するものである。レスポンス受信判定テーブル３０４のレコードには、送信されたＮＣスヌープパケットに設定されたトランザクションＩＤ、ＮＣスヌープパケットを送信する際のトリガとなった元のパケット、ＮＣスヌープパケットに対応するＮＣレスポンスパケットを受信したか否かを示す受信フラグが登録される。
【０１１９】
例えば、ＮＣスヌープパケットを送信したＮＣスヌープ生成部３１２は、リクエスタ判定部３２１を通じて受信したローカルスヌープパケットを、レスポンス受信判定テーブル３０４のレコードにおける「元のパケット」の欄に登録する。また、受信フラグの値は、レコードに対応するＮＣスヌープパケットが送信された段階では初期値「０」とされる。
【０１２０】
以下、図１２に戻って説明する。
宛先判定部３２２は、他のＳＢ内のＮＣからリクエストパケットを受信すると、「宛先ＩＤ」フィールドに設定されたノードＩＤに応じて次のような処理を行う。「宛先ＩＤ」フィールドの設定値が示すノードが他のＳＢ内のノードである場合、宛先判定部３２２は、受信したリクエストパケットをそのまま、アービタ３３１を介してＮＣ１３１ｂに送信する。一方、「宛先ＩＤ」フィールドの設定値が示すノードがＳＢ１１０ａ内のノードである場合、宛先判定部３２２は、受信したリクエストパケットをリクエスト受信処理部３１３に送信する。
【０１２１】
リクエスト受信処理部３１３は、宛先判定部３２２を通じてリクエストパケットを受信すると、持ち出し管理テーブル３０２を参照する。リクエスト受信処理部３１３は、持ち出し管理テーブル３０２から得られた情報と、受信したリクエストパケットにおける「コマンド」フィールドの設定値とから、ＳＢ１１０ａ内のノードへのリクエストパケットの送信と、他のＳＢへのＮＣスヌープパケットの送信のどちらを実行するべきかを判定する。
【０１２２】
受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル３０２のレコードに持ち出し先のノードＩＤが登録されていない場合、リクエスト受信処理部３１３は、リクエストパケットを送信すべきと判定する。また、受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル３０２のレコードに持ち出し先のノードＩＤが登録されている場合でも、受信したリクエストパケット内の「コマンド」フィールドに「Ｗｒｉｔｅｂａｃｋ」が設定されている場合、および、「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定され、かつデータのキャッシュステートがＳである場合には、リクエスト受信処理部３１３は、リクエストパケットを送信すべきと判定する。
【０１２３】
一方、受信したリクエストパケットに設定されたアドレスに対応する持ち出し管理テーブル３０２のレコードに持ち出し先のノードＩＤが登録されているときには、受信したリクエストパケット内の「コマンド」フィールドに「Ｒｅａｄ＿Ｅ」が設定されている場合、および、「コマンド」フィールドに「Ｒｅａｄ＿Ｓ」が設定され、かつデータのキャッシュステートがＥである場合には、リクエスト受信処理部３１３は、ＮＣスヌープパケットを送信すべきと判定する。
【０１２４】
リクエストパケットを送信すべきと判定した場合、リクエスト受信処理部３１３は、他のＮＣから受信したリクエストパケットを、「宛先ＩＤ」フィールドが示すＳＢ１１０ａ内のホームノードに対して、アービタ３３５を介して送信する。このとき、リクエスト受信処理部３１３は、リクエストパケット内の「宛先ＩＤ」および「トランザクションＩＤ」の各フィールドをそれぞれグローバルＩＤからローカルＩＤに変換するとともに、「リクエスタＩＤ」フィールドを、グローバルＩＤからＮＣ１３１ａ自身を指すローカルＩＤに変換する。さらに、リクエスト受信処理部３１３は、ＩＤ変換テーブル３０３に対して新規のレコードを生成し、変換前後のＩＤをレコードに保存する。
【０１２５】
ここで、図１４は、ＩＤ変換テーブルに保持される情報の例を示す図である。
ＩＤ変換テーブル３０３には、他のＳＢからのパケットに応じて自身のＳＢ内のノードにパケットを送信する際に、受信パケット内に設定された変換前のＩＤと、送信パケット内の設定した変換後のＩＤとを含むレコードが登録される。図１４に示すように、ＩＤ変換テーブル３０３のレコードには、送信パケットに設定した変換後のトランザクションＩＤと、受信パケットにそれぞれ設定された変換前のリクエスタＩＤおよび変換前のトランザクションＩＤとが登録される。ＩＤ変換テーブル３０３のレコードは、ＳＢ内に送信したパケットに対するレスポンスパケットが受信された際に、削除される。
【０１２６】
例えば、リクエスト受信処理部３１３は、ＳＢ１１０ａ内のホームノードに送信したリクエストパケット内の「トランザクションＩＤ」フィールドの値と、宛先判定部３２２を通じて受信したリクエストパケット内の「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値を、ＩＤ変換テーブル３０３のレコードに登録する。また、リクエスト受信処理部３１３によって登録されたレコードは、その後、ＳＢ１１０ａ内のホームノードからのデータレスポンスパケットを受信したデータレスポンス送信部３１６によって削除される。
【０１２７】
ＩＤ変換テーブル３０３を用いてＩＤの変換が行われることで、例えば、各ＳＢで使用可能なＩＤの数などの各ＳＢが個別に持つＩＤの制約に関係なく、ノードＩＤやトランザクションＩＤをＳＢ間で伝送できるようになる。
【０１２８】
以下、図１２に戻って説明する。
ＮＣスヌープパケットを送信すべきと判定した場合、リクエスト受信処理部３１３は、ＮＣスヌープパケットを生成する。リクエスト受信処理部３１３は、宛先判定部３２２を通じて受信したリクエストパケット内の「リクエスタＩＤ」フィールドの値および「トランザクションＩＤ」フィールドの値を、ＮＣスヌープパケットの「リクエスタＩＤ」フィールドおよび「トランザクションＩＤ」フィールドにそれぞれ設定する。また、リクエスト受信処理部３１３は、データの持ち出し先のノードに接続されたＮＣにそれぞれ対応する、ブロードキャストフラグ内のビットを「１」とするとともに、レスポンスフラグを「１」とする。リクエスト受信処理部３１３は、設定を完了したＮＣスヌープパケットを、アービタ３３２を介してＮＣ１３１ｂに送信する。
【０１２９】
また、ＮＣスヌープパケットを送信したリクエスト受信処理部３１３は、レスポンス受信判定テーブル３０４に新規のレコードを登録する。リクエスト受信処理部３１３は、宛先判定部３２２を通じて受信したリクエストパケットを、レスポンス受信判定テーブル３０４のレコードにおける「元のパケット」の欄に登録する。また、受信フラグの値は、レコードに対応するＮＣスヌープパケットが送信された段階では初期値「０」とされる。
【０１３０】
ＢＣ判定部３２３は、他のＳＢ内のＮＣからＮＣスヌープパケットを受信すると、受信したＮＣスヌープパケットの「ブロードキャストフラグ」を参照する。「ブロードキャストフラグ」におけるＮＣ１３１ａに対応するビットが「０」である場合、ＢＣ判定部３２３は、受信したＮＣスヌープパケットを、アービタ３３２を介してＮＣ１３１ｂに転送する。一方、「ブロードキャストフラグ」におけるＮＣ１３１ａに対応するビットが「１」である場合、ＢＣ判定部３２３は、受信したＮＣスヌープパケットをＮＣスヌープ処理部３１４に送信する。
【０１３１】
ＮＣレスポンス判定部３２４は、他のＳＢ内のＮＣからＮＣレスポンスパケットを受信すると、受信したＮＣレスポンスパケット内の「宛先ＩＤ」フィールドの値から、ＮＣレスポンスパケットの宛先がＳＢ１１０ａ内のノードであるかを判定する。ＮＣレスポンスパケットの宛先がＳＢ１１０ａ内のノードでない場合、ＮＣレスポンス判定部３２４は、受信したＮＣレスポンスパケットをＮＣスヌープ処理部３１４に送信する。一方、ＮＣレスポンスパケットの宛先がＳＢ１１０ａ内のノードである場合、ＮＣレスポンス判定部３２４は、受信したＮＣレスポンスパケットをＮＣレスポンス処理部３１５に送信する。
【０１３２】
ＮＣスヌープ処理部３１４は、ＢＣ判定部３２３を通じてＮＣスヌープパケットを受信すると、ＮＣスヌープパケットで指示された処理をＳＢ１１０ａ内の各ノードに実行させるとともに、各ノードでの処理の実行結果を設定したＮＣレスポンスパケットを送信する。ＮＣスヌープ処理部３１４は、処理の際にＩＤ変換テーブル３０３およびレスポンス送信判定テーブル３０５を参照する。
【０１３３】
ここで、図１５は、レスポンス送信判定テーブルに保持される情報の例を示す図である。
ＮＣスヌープ処理部３１４は、ＮＣスヌープパケットの受信に応じてＳＢ１１０ａ内のノードにローカルスヌープパケットをブロードキャストした際に、レスポンス送信判定テーブル３０５に対してレコードを登録する。レスポンス送信判定テーブル３０５のレコードには、送信されたローカルスヌープパケットに設定された、ローカルＩＤであるトランザクションＩＤ、元のＮＣスヌープパケットに設定された、ともにグローバルＩＤであるリクエスタＩＤおよびトランザクションＩＤ、送信されたローカルスヌープパケットに設定されたアドレス、レスポンス数、受信フラグおよびＮＣレスポンスパケットが登録される。
【０１３４】
レコード内のレスポンス数は、ＳＢ１１０ａ内にブロードキャストされたローカルスヌープパケットに対応するＬＳレスポンスパケットを受信した数であり、レコード登録時は初期値「０」とされ、最大値はＳＢ１１０ａ内のノードの数である「３」である。レコード内の受信フラグは、ＮＣスヌープパケットに対応するＮＣレスポンスパケットを他のＮＣから受信したか否かを示すものであり、ＮＣレスポンスパケットを受信した場合に「０」から「１」に更新される。レコード内のＮＣレスポンスパケットは、他のＮＣから受信したＮＣレスポンスパケットがそのまま格納される。レコード内にＮＣレスポンスパケットが格納されているとき、受信フラグも「１」となる。
【０１３５】
レスポンス送信判定テーブル３０５に登録されたレコードは、ＮＣレスポンスパケットが他のＮＣに送信されると、レスポンス送信判定テーブル３０５から削除される。
以下、ＮＣスヌープ処理部３１４の処理についてフローチャートを用いて説明する。まず、図１６は、ＮＣスヌープ処理部によるＮＣスヌープパケット受信時の処理を示すフローチャートである。
【０１３６】
［ステップＳ１１］ＮＣスヌープ処理部３１４は、ＢＣ判定部３２３を通じてＮＣスヌープパケットを受信する。
［ステップＳ１２］ＮＣスヌープ処理部３１４は、ＳＢ１１０ａ内のノード１２１ａ，１２２ａ，１２３ａに対して、ローカルスヌープパケットをブロードキャストする。このとき、ＮＣスヌープ処理部３１４は、ローカルスヌープパケットにおける「リクエスタＩＤ」フィールドに自身を指すローカルＩＤを設定するとともに、「トランザクションＩＤ」フィールドにローカルＩＤを設定する。ローカルスヌープパケットにおける「アドレス」フィールドおよび「コマンド」フィールドには、受信したＮＣスヌープパケットの「アドレス」フィールドの値および「コマンド」フィールドの値がそれぞれ設定される。
【０１３７】
［ステップＳ１３］ＮＣスヌープ処理部３１４は、ＩＤ変換テーブル３０３およびレスポンス送信判定テーブル３０５のそれぞれに対して新規のレコードを登録する。ＮＣスヌープ処理部３１４は、ステップＳ１２で送信したローカルスヌープパケットに設定したローカルＩＤであるトランザクションＩＤと、ステップＳ１１で受信したＮＣスヌープパケットに設定されたグローバルＩＤであるリクエスタＩＤおよびトランザクションＩＤとを、ＩＤ変換テーブル３０３における新規のレコードと、レスポンス送信判定テーブル３０５における新規のレコードのそれぞれに登録する。また、ＮＣスヌープ処理部３１４は、レスポンス送信判定テーブル３０５におけるレスポンス数および受信フラグの値をともに「０」とする。
【０１３８】
［ステップＳ１４］ステップＳ１１で受信されたＮＣスヌープパケットにおける「レスポンスフラグ」が「１」である場合、ステップＳ１５の処理が実行され、「レスポンスフラグ」が「０」である場合、ステップＳ１７の処理が実行される。
【０１３９】
［ステップＳ１５］「レスポンスフラグ」が「１」である場合、ＮＣスヌープ処理部３１４は、次の手順により、ＮＣレスポンスパケットを新規に生成する。ＮＣスヌープ処理部３１４は、ステップＳ１１で受信したＮＣスヌープパケットの「リクエスタＩＤ」「トランザクションＩＤ」「アドレス」の各フィールド値を、ＮＣレスポンスパケットの同じフィールドの欄に設定する。また、ＮＣスヌープ処理部３１４は、ホーム判定テーブル３０１に基づき、ステップＳ１１で受信したＮＣスヌープパケットの「アドレス」フィールドに設定された値に対応するホームノードのＩＤを、ＮＣレスポンスパケットの「宛先ＩＤ」フィールドに設定する。さらに、ＮＣスヌープ処理部３１４は、ステップＳ１１で受信したＮＣスヌープパケットの「コマンド」フィールドで指定される処理が完了したことを示す値を、ＮＣレスポンスパケットの「コマンド」フィールドに設定する。また、ＮＣスヌープ処理部３１４は、この時点では、ＮＣスヌープパケットにおける「レスポンスフィールド」の全ビットを「０」としておく。
【０１４０】
ＮＣスヌープ処理部３１４は、以上に手順で生成したＮＣレスポンスパケットを、ステップＳ１３でレスポンス送信判定テーブル３０５に生成したレコードに登録するとともに、このレコード内の受信フラグを「１」に書き替える。
【０１４１】
［ステップＳ１６］ＮＣスヌープ処理部３１４は、ステップＳ１１で受信したＮＣスヌープパケット内の「レスポンスフラグ」を「０」に書き替える。
［ステップＳ１７］ＮＣスヌープ処理部３１４は、ステップＳ１１で受信したＮＣスヌープパケット内の「ブロードキャストフラグ」のビットのうち、ＮＣ１３１ａに対応するビットを「０」に書き替える。
【０１４２】
［ステップＳ１８］ＮＣスヌープ処理部３１４は、ステップＳ１７での書き替え処理後の「ブロードキャストフラグ」を参照する。ＮＣスヌープ処理部３１４は、「ブロードキャストフラグ」内の全ビットが「０」である場合には、処理を終了する。この場合、ステップＳ１１で受信されたＮＣスヌープパケットは、これ以上他のＮＣに転送されない。一方、ＮＣスヌープ処理部３１４は、「ブロードキャストフラグ」内のビットの中に１つでも「１」がある場合には、ステップＳ１９の処理を実行する。
【０１４３】
［ステップＳ１９］ＮＣスヌープ処理部３１４は、ステップＳ１６，Ｓ１７、またはステップＳ１７のみで書き替えられたＮＣスヌープパケットを、アービタ３３２を介して、隣接する送信先であるＮＣ１３１ｂに対して送信する。
【０１４４】
図１７は、ＮＣスヌープ処理部によるレスポンスカウント処理を示すフローチャートである。
図１６のステップＳ１２においてローカルスヌープパケットがブロードキャストされると、ローカルスヌープパケットを受信したノードは、「コマンド」フィールドで指定される処理を実行する。ノードは、指定された処理を完了すると、「コマンド」フィールドに処理が完了したことを示す値を設定したＬＳレスポンスパケットを、ＮＣ１３１ａに対して返信する。このとき、ノードは、受信したローカルスヌープパケットの「リクエスタＩＤ」「トランザクションＩＤ」「アドレス」の各フィールドに設定された値を、ＬＳレスポンスパケットの同じフィールドに設定する。
【０１４５】
［ステップＳ３１］ＮＣスヌープ処理部３１４は、ＳＢ１１０ａ内のノードからＬＳレスポンスパケットを受信する。
［ステップＳ３２］ＮＣスヌープ処理部３１４は、レスポンス送信判定テーブル３０５内のレコードのうち、ローカルなトランザクションＩＤに設定された値が、受信したＬＳレスポンスパケット内の「トランザクションＩＤ」フィールドに設定された値と同じレコードを選択する。ＮＣスヌープ処理部３１４は、選択したレコード内のレスポンス数を「１」だけカウントアップする。
【０１４６】
以上の図１７の処理により、ローカルスヌープパケットのブロードキャスト先のノードから、「コマンド」フィールドで指定した処理の完了通知を受信するたびに、レスポンス送信判定テーブル３０５のレコードにおけるレスポンス数がカウントアップされる。レコード内のレスポンス数が最大値である「３」となったとき、ＮＣスヌープ処理部３１４は、ＳＢ１１０ａ内のすべてのノードからＮＣ１３１ａが処理の完了通知を受信したことを判定できる。
【０１４７】
図１８は、ＮＣスヌープ処理部によるＮＣレスポンス受信処理を示すフローチャートである。
図１６のステップＳ１４において、受信したＮＣスヌープパケット内の「レスポンスフラグ」が「０」であった場合、その後、受信したＮＣスヌープパケットに対応するＮＣレスポンスデータが、他のＮＣから送信される。この場合、ＮＣ１３１ａは、図１８の処理により、受信したＮＣスヌープパケットに対応するＮＣレスポンスデータを受信して、レスポンス受信判定テーブル３０４内の対応するレコードを更新する。
【０１４８】
［ステップＳ４１］ＮＣスヌープ処理部３１４は、ＮＣレスポンス判定部３２４を通じて、他のＮＣから送信されたＮＣレスポンスパケットを受信する。
［ステップＳ４２］ＮＣスヌープ処理部３１４は、レスポンス送信判定テーブル３０５内のレコードのうち、グローバルなトランザクションＩＤとして設定された値（すなわち、レコードに対応するＮＣスヌープパケットに設定されたトランザクションＩＤ）が、受信したＮＣレスポンスパケット内の「トランザクションＩＤ」フィールドに設定された値と同じであるレコードを選択する。ＮＣスヌープ処理部３１４は、選択したレコードに対して、ステップＳ４１で受信したＮＣレスポンスパケットを登録する。
【０１４９】
［ステップＳ４３］ＮＣスヌープ処理部３１４は、ステップＳ４２で選択したレコード内の受信フラグを「１」に書き替える。
図１９は、ＮＣスヌープ処理部によるＮＣレスポンス送信処理を示すフローチャートである。
【０１５０】
［ステップＳ５１］ＮＣスヌープ処理部３１４は、レスポンス送信判定テーブル３０５に登録されたレスポンスのうち、レスポンス数が最大値である「３」に達し、かつ、受信フラグが「１」であるレコードを検知する。
【０１５１】
［ステップＳ５２］ＮＣスヌープ処理部３１４は、ステップＳ５１で検知したレコードに登録されたＮＣレスポンスパケット内の「レスポンスフィールド」を参照する。ＮＣスヌープ処理部３１４は、参照した「レスポンスフィールド」のビットのうち、ＮＣ１３１ａに対応するビットを「１」に書き替える。
【０１５２】
［ステップＳ５３］ＮＣスヌープ処理部３１４は、ステップＳ５２で書き替えを行ったＮＣレスポンスパケットを、アービタ３３３を介して、ＮＣ１３１ａに隣接する送信先であるＮＣ１３１ｂに送信する。
【０１５３】
［ステップＳ５４］ＮＣスヌープ処理部３１４は、ステップＳ５１で検知した、レスポンス送信判定テーブル３０５内のレコードから、ローカルなトランザクションＩＤを抽出する。ＮＣスヌープ処理部３１４は、変換後のトランザクションＩＤとして、レスポンス送信判定テーブル３０５から抽出したトランザクションＩＤと同じ値が登録されたＩＤ変換テーブル３０３内のレコードを削除する。また、ＮＣスヌープ処理部３１４は、ステップＳ５１で検知した、レスポンス送信判定テーブル３０５内のレコードを削除する。
【０１５４】
以上の図１６〜図１９で説明した処理によれば、ＮＣスヌープ処理部３１４は、レスポンス送信判定テーブル３０５を利用して、ＮＣスヌープパケットを受信してから対応するＮＣレスポンスパケットを送信するまでの処理を管理する。ＮＣスヌープ処理部３１４は、レスポンス送信判定テーブル３０５内のレスポンス数および受信フラグを用いることで、ＮＣスヌープパケットによって指示された処理の完了通知をＳＢ１１０ａ内の全ノードから受信し、かつ、対応するＮＣレスポンスパケットを受信したことを確実に認識できる。従って、データの持ち出し先である全ノードにおける処理結果をＮＣレスポンスパケットに格納し、ホームノードに対して確実に伝達できるようになる。
【０１５５】
以下、図１２に戻って説明する。
ＮＣレスポンス処理部３１５は、ＮＣスヌープ生成部３１２またはリクエスト受信処理部３１３がＮＣスヌープパケットを送信した後、送信されたＮＣスヌープパケットに応じた処理結果をホームノードに伝達する。これとともに、ＮＣレスポンス処理部３１５は、ＮＣスヌープ生成部３１２またはリクエスト受信処理部３１３がレスポンス受信判定テーブル３０４に登録したパケットに関連する処理が完了するまでの間、ＮＣスヌープパケットに応じた処理結果を、レスポンス受信判定テーブル３０４に保持させる。
【０１５６】
ここで、図２０は、ＮＣレスポンス処理部の構成例およびその動作を示す図である。
ＮＣレスポンス処理部３１５は、ＮＣレスポンス受信部３５１、パケット判定部３５２、レスポンス送信部３５３、リクエスト送信部３５４およびスヌープ受信部３５５を備える。
【０１５７】
また、前述のように、レスポンス受信判定テーブル３０４には、ＮＣスヌープ生成部３１２またはリクエスト受信処理部３１３によってＮＣスヌープパケットが送信された場合に、レコードが登録される。ＮＣスヌープ生成部３１２は、レスポンス受信判定テーブル３０４のレコードに、ＮＣスヌープパケットを送信するトリガとされたローカルスヌープパケットを登録する。また、リクエスト受信処理部３１３は、レスポンス受信判定テーブル３０４のレコードに、ＮＣスヌープパケットを送信するトリガとされたリクエストパケットを登録する。
【０１５８】
ＮＣレスポンス受信部３５１は、他のＳＢ内のＮＣからＮＣレスポンスパケットを受信すると、受信したＮＣレスポンスパケットの「トランザクションＩＤ」フィールドに設定された値と同じトランザクションＩＤが登録されたレコードを、レスポンス受信判定テーブル３０４から選択する。ＮＣレスポンス受信部３５１は、選択したレコード内の受信フラグを「１」に書き替え、ＮＣスヌープパケットにより要求された処理が完了したことをレコードに記録する。また、ＮＣレスポンス受信部３５１は、受信フラグを書き替えたレコードを示すトランザクションＩＤを、パケット判定部３５２に通知する。
【０１５９】
パケット判定部３５２は、ＮＣレスポンス受信部３５１からトランザクションＩＤの通知を受けると、通知されたトランザクションＩＤに対応する、レスポンス受信判定テーブル３０４内のレコードから、「元のパケット」の欄に登録されたパケットを受信する。パケット判定部３５２は、受信したパケットがローカルスヌープパケットである場合、そのパケットをレスポンス送信部３５３に送信する。受信したパケットがローカルスヌープパケットである場合とは、図１０に示した例のように、同じＳＢに属するホームノードから送信されたローカルスヌープパケットをトリガとしてＮＣスヌープパケットが送信された後、送信されたＮＣスヌープパケットに対応するＮＣレスポンスパケットが受信された場合である。
【０１６０】
一方、パケット判定部３５２は、レコードから受信したパケットがリクエストパケットである場合、そのパケットをリクエスト送信部３５４に送信する。受信したパケットがリクエストパケットである場合とは、図６に示した例のように、他のＳＢのノードから送信されたリクエストパケットをトリガとしてＮＣスヌープパケットが送信された後、送信されたＮＣスヌープパケットに対応するＮＣレスポンスパケットが受信された場合である。
【０１６１】
レスポンス送信部３５３は、パケット判定部３５２からローカルスヌープパケットを受信すると、受信したローカルスヌープパケットに対応するＬＳレスポンスパケットを、ＳＢ１１０ａ内のホームノードに送信する。レスポンス送信部３５３は、パケット判定部３５２から受信したローカルスヌープパケット内のアドレスを管理するホームノードのＩＤを、ＬＳレスポンスパケットの「宛先ＩＤ」フィールドに設定する。また、レスポンス送信部３５３は、パケット判定部３５２から受信したローカルスヌープパケット内の「リクエスタＩＤ」「トランザクションＩＤ」「アドレス」の各フィールドの値を、ＬＳレスポンスパケット内の同じフィールドに設定する。さらに、レスポンス送信部３５３は、パケット判定部３５２から受信したローカルスヌープパケットの「コマンド」フィールドで指定された処理の完了を通知する値を、ＬＳレスポンスパケット内の「コマンド」フィールドに設定する。
【０１６２】
また、ＬＳレスポンスパケットを送信したレスポンス送信部３５３は、持ち出し管理テーブル３０２のレコードのうち、送信したＬＳレスポンスパケットに設定されたアドレスに対応するレコードを更新する。例えば、送信したＬＳレスポンスパケットの「コマンド」フィールドに「Ｒｅｓｐｏｎｓｅ＿Ｉ」が設定される場合、レスポンス送信部３５３は、レコード内のキャッシュステートをＩステートにし、レコードに登録されていた持ち出し先のノードＩＤを削除する。また、送信したＬＳレスポンスパケットの「コマンド」フィールドに「Ｒｅｓｐｏｎｓｅ＿Ｓ」が設定される場合、レスポンス送信部３５３は、レコード内のキャッシュステートをＳステートにする。これとともに、レスポンス送信部３５３は、レコードに対し、持ち出し先のノードＩＤとして、ＬＳレスポンスパケットの「リクエスタＩＤ」フィールドの値をローカルＩＤからグローバルＩＤに変換した値を書き加える。
【０１６３】
さらに、ＬＳレスポンスパケットを送信したレスポンス送信部３５３は、パケット判定部３５２から受信したローカルスヌープパケットが登録されたレコードを、レスポンス受信判定テーブル３０４から削除する。レスポンス送信部３５３は、例えば、ローカルスヌープパケット内の「トランザクションＩＤ」フィールドと、各レコードに登録された元パケット内の「トランザクションＩＤ」フィールドとを比較することで、削除するレコードを検索する。
【０１６４】
レスポンス送信部３５３がＬＳレスポンスパケットを送信することで、ＮＣスヌープ生成部３１２がレスポンス受信判定テーブル３０４に登録したローカルスヌープパケットに関するＮＣ１３１ａでの処理は完了する。ＮＣレスポンス受信部３５１、パケット判定部３５２およびレスポンス送信部３５３の処理により、ＮＣスヌープ生成部３１２がレスポンス受信判定テーブル３０４に登録したローカルスヌープパケットに関するＮＣ１３１ａでの処理が完了するまでの間、ＮＣ１３１ａでの処理に必要な情報がレスポンス受信判定テーブル３０４に確実に保持されるようになる。
【０１６５】
リクエスト送信部３５４は、パケット判定部３５２からリクエストパケットを受信すると、ＳＢ１１０ａ内のホームノードに対してリクエストパケットを送信する。ここで、パケット判定部３５２から受信したリクエストパケット内の「宛先ＩＤ」「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドのＩＤはそれぞれグローバルＩＤになっているため、リクエスト送信部３５４は、これらのＩＤをローカルＩＤに変換する。リクエスト送信部３５４は、パケット判定部３５２から受信したリクエストパケット内の「リクエスタＩＤ」フィールドを、ＮＣ１３１ａを示すＩＤに変換するとともに、リクエストパケット内の「宛先ＩＤ」および「トランザクションＩＤ」の各フィールドの値を、ともにローカルＩＤに変換する。
【０１６６】
リクエスト送信部３５４は、ＩＤを変換したリクエストパケットをＳＢ１１０ａ内のホームノードに送信する。また、リクエスト送信部３５４は、ＩＤ変換テーブル３０３に新規のレコードを生成し、生成したレコードに、変換前の「トランザクションＩＤ」フィールドの値と、変換前の「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値を登録する。
【０１６７】
リクエスト送信部３５４からのリクエストパケットを受信したホームノードは、ＮＣ１３１ａに対してローカルスヌープパケットを送信する。スヌープ受信部３５５は、ホームノードからのローカルスヌープパケットを受信する。スヌープ受信部３５５は、ＩＤ変換テーブル３０３のレコードのうち、変換後のＩＤとして、受信したローカルスヌープパケット内の「トランザクションＩＤ」フィールドの値が登録されたレコードを選択する。スヌープ受信部３５５は、ＩＤ変換テーブル３０３から選択したレコードから、変換前のグローバルなトランザクションＩＤを抽出する。さらに、スヌープ受信部３５５は、レスポンス受信判定テーブル３０４のレコードのうち、ＩＤ変換テーブル３０３から抽出したトランザクションＩＤが登録されたレコードを選択する。
【０１６８】
スヌープ受信部３５５は、レスポンス受信判定テーブル３０４から選択したレコードにおいて、受信フラグが「１」であることを確認すると、ホームノードに対してＬＳレスポンスパケットを送信するとともに、選択したレコードを削除する。スヌープ受信部３５５は、受信したローカルスヌープパケットの「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドに設定された値を、送信するＬＳレスポンスパケット内の同じフィールドに設定する。
【０１６９】
リクエスト受信処理部３１３がレスポンス受信判定テーブル３０４に登録したリクエストパケットに関するＮＣ１３１ａでの処理は完了する。ＮＣレスポンス受信部３５１、パケット判定部３５２およびレスポンス送信部３５３の処理により、リクエスト受信処理部３１３がレスポンス受信判定テーブル３０４に登録したリクエストパケットに関するＮＣ１３１ａでの処理が完了するまでの間、ＮＣ１３１ａでの処理に必要な情報がレスポンス受信判定テーブル３０４に確実に保持されるようになる。
【０１７０】
以下、図１２に戻って説明する。
データレスポンス送信部３１６は、ＳＢ１１０ａ内のホームノードからデータレスポンスパケットを受信すると、ＩＤ変換テーブル３０３から、変換後のトランザクションＩＤとして、受信したデータレスポンスパケットの「トランザクションＩＤ」フィールドの値が登録されたレコードを選択する。このときデータレスポンス送信部３１６が選択するレコードは、ＮＣレスポンス処理部３１５のリクエスト送信部３５４によって登録されたものである。
【０１７１】
データレスポンス送信部３１６は、受信したデータレスポンスパケットの「宛先ＩＤ」および「リクエスタＩＤ」の各フィールドを、ＩＤ変換テーブル３０３から選択したレコードに登録された、変換前のリクエスタＩＤに書き替える。また、データレスポンス送信部３１６は、受信したデータレスポンスパケットの「トランザクションＩＤ」フィールドを、ＩＤ変換テーブル３０３から選択したレコードに登録された、変換前のトランザクションＩＤに書き替える。データレスポンス送信部３１６は、書き替え後のデータレスポンスパケットを、アービタ３３４を通じてＮＣ１３１ｂに送信するとともに、ＩＤ変換テーブル３０３から選択したレコードを削除する。
【０１７２】
さらに、データレスポンス送信部３１６は、持ち出し管理テーブル３０２のレコードのうち、送信したデータレスポンスパケットに設定されたアドレスに対応するレコードを更新する。例えば、送信したデータレスポンスパケットの「コマンド」フィールドに「Ｄ−Ｒｅｓｐｏｎｓｅ＿Ｅ」が設定された場合、データレスポンス送信部３１６は、レコード内のキャッシュステートをステートＥにする。これとともに、データレスポンス送信部３１６は、レコードに登録された持ち出し先のノードＩＤを、送信したデータレスポンスパケットの「リクエスタＩＤ」フィールドの値に書き替える。また、送信したデータレスポンスパケットの「コマンド」フィールドに「Ｄ−Ｒｅｓｐｏｎｓｅ＿Ｓ」が設定された場合、データレスポンス送信部３１６は、レコード内のキャッシュステートをステートＳにする。これとともに、データレスポンス送信部３１６は、レコードに対し、持ち出し先のノードＩＤとして、送信したデータレスポンスパケットの「リクエスタＩＤ」フィールドの値を書き加える。また、送信したデータレスポンスパケットの「コマンド」フィールドに「Ｃｏｍｐｌｅｔｅ」が設定された場合、データレスポンス送信部３１６は、レコード内のキャッシュステートをＩステートにする。
【０１７３】
宛先判定部３２５は、他のＳＢ内のＮＣからデータレスポンスパケットを受信すると、受信したデータレスポンスパケットの「宛先ＩＤ」フィールドを参照する。「宛先ＩＤ」フィールドにおいてＳＢ１１０ａ内のノードが設定されていた場合、宛先判定部３２５は、受信したデータレスポンスパケット内の「宛先ＩＤ」「リクエスタＩＤ」「トランザクションＩＤ」の各フィールドの値をグローバルＩＤからローカルＩＤに書き替える。宛先判定部３２５は、書き替え後のデータレスポンスパケットを、ＳＢ１１０ａ内のリクエスタであるノードに送信する。一方、「宛先ＩＤ」フィールドにおいてＳＢ１１０ａ以外の他のＳＢ内のノードが設定されていた場合、宛先判定部３２５は、受信したデータレスポンスパケットを、アービタ３３４を通じてＮＣ１３１ｂに転送する。
【０１７４】
図２１は、ＮＣスヌープパケットを他のＮＣに送信した後のＮＣの処理例を示すフローチャートである。この図２１では、図６の例のように、ＳＢ１１０ｂのＮＣ１３１ｂが、他のＮＣからリクエストパケットを受信したことをトリガとしてＮＣスヌープパケットを送信した場合の処理を示す。
【０１７５】
［ステップＳ７１］ＮＣ１３１ｂのＮＣレスポンス判定部３２４は、他のＮＣからＮＣレスポンスパケットを受信する。ＮＣレスポンス判定部３２４は、受信したＮＣレスポンスパケットの「宛先ＩＤ」フィールドがＳＢ１１０ｂ内のノードを指すことを判定して、受信したレスポンスパケットをＮＣレスポンス処理部３１５に送信する。
【０１７６】
［ステップＳ７２］ＮＣ１３１ｂのＮＣレスポンス処理部３１５は、受信したＮＣレスポンスパケットによって通知された、ＮＣスヌープパケットに応じた処理の結果を、レスポンス受信判定テーブル３０４に登録する。具体的には、ＮＣレスポンス処理部３１５のＮＣレスポンス受信部３５１は、受信したＮＣレスポンスパケットの「トランザクションＩＤ」フィールドに設定された値と同じトランザクションＩＤが登録されたレコードを、レスポンス受信判定テーブル３０４から選択する。ＮＣレスポンス受信部３５１は、選択したレコード内の受信フラグを「１」に書き替えることで、ＮＣスヌープパケットにより要求された処理が完了したことをレコードに記録する。
【０１７７】
［ステップＳ７３］ＮＣ１３１ｂのＮＣレスポンス処理部３１５は、ＳＢ１１０ｂ内のホームノードにリクエストパケットを送信する。具体的には、ＮＣレスポンス処理部３１５のパケット判定部３５２は、ステップＳ７２で受信フラグが書き替えられた、レスポンス受信判定テーブル３０４のレコードから、「元のパケット」の欄に登録されたパケットを受信する。パケット判定部３５２は、レコードから受信したパケットがリクエストパケットであることを認識して、受信したリクエストパケットをリクエスト送信部３５４に送信する。リクエスト送信部３５４は、パケット判定部３５２からリクエストパケットを受信すると、受信したリクエストパケット内の「宛先ＩＤ」「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値をグローバルＩＤからローカルＩＤに変換し、ローカルＩＤに変換されたリクエストパケットをＳＢ１１０ｂ内のホームノードに送信する。
【０１７８】
［ステップＳ７４］リクエスト送信部３５４は、変換前後のＩＤを、ＩＤ変換テーブル３０３のレコードに登録する。
ＮＣ１３１ｂからのリクエストパケットを受信したホームノードは、自身が備える持ち出し管理テーブル２０２に基づき、受信したリクエストパケットに設定されたアドレスに記憶されたデータが他のＳＢのノードに持ち出されていると判断して、ＮＣ１３１ｂに対してローカルスヌープパケットを送信する。
【０１７９】
［ステップＳ７５］ＮＣ１３１ｂのＮＣレスポンス処理部３１５は、ホームノードからのローカルスヌープパケットを受信する。
［ステップＳ７６］ＮＣ１３１ｂのＮＣレスポンス処理部３１５は、データの持ち出し先ノードでの処理結果を格納したＬＳレスポンスパケットを、ＮＣ１３１ｂ内のホームノードに返信する。具体的には、ＮＣレスポンス処理部３１５のスヌープ受信部３５５は、受信したＬＳレスポンスパケットの「トランザクションＩＤ」フィールドの値を、ＩＤ変換テーブル３０３を基にグローバルＩＤからローカルＩＤに変換した後、変換後のトランザクションＩＤに対応するレコードを、レスポンス受信判定テーブル３０４から選択する。スヌープ受信部３５５は、レスポンス受信判定テーブル３０４から選択したレコードにおいて、受信フラグが「１」であることを確認すると、ホームノードに対してＬＳレスポンスパケットを送信する。
【０１８０】
［ステップＳ７７］ＮＣ１３１ｂのＮＣレスポンス処理部３１５におけるスヌープ受信部３５５は、レスポンス受信判定テーブル３０４から、ステップＳ７６で選択したレコードを削除する。
【０１８１】
ＮＣ１３１ｂからのＬＳレスポンスパケットを受信したホームノードは、キャッシュコヒーレンシを保たれたと判断して、ＮＣ１３１ｂに対して、ステップＳ７３で発行されたリクエストパケットに対する応答としてのデータレスポンスパケットを送信する。
【０１８２】
［ステップＳ７８］ＮＣ１３１ｂのデータレスポンス送信部３１６は、ホームノードから送信されたデータレスポンスパケットを受信する。
［ステップＳ７９］データレスポンス送信部３１６は、受信したデータレスポンスパケットの「宛先ＩＤ」「リクエスタＩＤ」「トランザクションＩＤ」の各フィールドの値を、ＩＤ変換テーブル３０３に基づいて変換した後、変換後のデータレスポンスパケットをＮＣ１３１ｂに送信する。
【０１８３】
［ステップＳ８０］データレスポンス送信部３１６は、ステップＳ７９で参照した、ＩＤ変換テーブル３０３のレコードを削除する。
以上説明した第２の実施の形態では、ホームノードに接続したＮＣは、データの持ち出し先のノードが属するすべてのＮＣに対して、１つのＮＣスヌープパケットによって処理の実行を要求することができる。このため、データが複数のノードに持ち出されたときに、ホームノードに接続したＮＣがデータの持ち出し先のすべてのノードに対して個別にスヌープパケットを送信する場合と比較して、ＮＣ間を接続する通信路の伝送負荷を軽減することができる。
【０１８４】
また、ＮＣスヌープパケットにより要求された処理の完了通知も、データの持ち出し先のすべてのノードから、ホームノードが接続されたＮＣに対して、１つのＮＣレスポンスパケットによって送信される。このため、データが複数のノードに持ち出された場合に、処理の完了通知が、持ち出し先のすべてのノードから個別のレスポンスパケットを用いて返信される場合と比較して、ＮＣ間を接続する通信路に伝送される完了通知のデータ量を軽減することができる。
【０１８５】
なお、上記の第２の実施の形態では、キャッシュ部に対する状態の制御を要求する制御情報をＳＢ間で伝送する場合の例を示したが、他の種類の制御情報をＮＣスヌープパケットと同様の形式の制御パケットを使用して伝送することもできる。例えば、情報処理システム１００内のすべてのノードに対して割り込みを要求するような制御情報を、ＮＣスヌープパケットと同様の形式の制御パケットを使用して伝送することができる。この場合、送信元のＮＣは、制御パケット内の「ブロードキャストフラグ」において全ビットを「１」とすればよい。制御パケットを受信した、送信元を含むすべてのＮＣは、ＮＣに接続された全ノードに割り込みの要求をブロードキャストする。これにより、送信元のＮＣに接続されたノードを含むすべてのノードに対して、割り込みを要求することができる。また、割り込み要求に対するレスポンスパケットは送信されないことから、制御パケット内の「レスポンスフラグ」は初期状態で「０」とされればよい。このような制御パケットを使用することで、ＮＣ間の伝送路の負荷を抑制しながら、すべてのノードに対して割り込みを確実に要求できるようになる。
【０１８６】
また、上記の第２の実施の形態では、外部のＳＢにあるデータの持ち出し先ノードに対してコマンドを送信する際にＮＣスヌープパケットを使用したが、データの持ち出し先ノードが１つのみである場合には、ＮＣスヌープパケットの代わりに、ローカルスヌープパケットと同じ構成のスヌープパケットが使用されてもよい。ここでは、ローカルスヌープパケットと同じ構成の、ＮＣ間で伝送されるスヌープパケットを、「個別スヌープパケット」と呼ぶ。
【０１８７】
図２２は、送信するスヌープパケットを判定する処理を示すフローチャートである。ここでは例として、ＮＣスヌープ処理部３１４がスヌープパケットを送信する際の処理について説明する。
【０１８８】
［ステップＳ９１］ＮＣスヌープ処理部３１４は、他のＳＢ内のＮＣに対してＮＣスヌープパケットを送信すべきであると判定する。ＮＣスヌープパケットを送信すべきと判定する条件は、図１２において説明した通りである。
【０１８９】
［ステップＳ９２］ＮＣスヌープ処理部３１４は、持ち出し管理テーブル３０２に基づき、他のＳＢにおけるデータの持ち出し先ノードが１つであるかを判定する。データの持ち出し先ノードが複数ある場合には、ステップＳ９３の処理が実行され、データの持ち出し先ノードが１つの場合には、ステップＳ９４の処理が実行される。
【０１９０】
［ステップＳ９３］ＮＣスヌープ処理部３１４は、ＮＣスヌープパケットを送信する。
［ステップＳ９４］ＮＣスヌープ処理部３１４は、データの持ち出し先ノードのＩＤを「宛先ＩＤ」フィールドに設定した個別スヌープパケットを送信する。
【０１９１】
なお、ステップＳ９２〜Ｓ９４の処理は、ＮＣスヌープ生成部３１２がＮＣスヌープパケットを送信する際に、ＮＣスヌープ生成部３１２によって実行されてもよい。
個別スヌープパケットの「宛先ＩＤ」フィールドに対応するノードに接続されたＮＣは、個別スヌープパケットを受信すると、「宛先ＩＤ」フィールドが示すノードに対して、ローカルスヌープパケットを送信する。このとき、ＮＣは、受信した個別スヌープパケットにおける「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値をそれぞれグローバルＩＤからローカルＩＤに変換するとともに、「宛先ＩＤ」フィールドをＮＣを示すように変換し、変換後の個別スヌープパケットをローカルスヌープパケットとして送信する。ＮＣは、変換後のローカルＩＤと変換前のグローバルＩＤを、ＩＤ変換テーブル３０３に登録する。
【０１９２】
ローカルスヌープパケットを受信したノードは、「コマンド」フィールドで指示された処理を実行した後、処理が完了したことを示す値を「コマンド」フィールドに設定したＬＳレスポンスパケットを、自身に接続されたＮＣに送信する。ＬＳレスポンスパケットを受信したＮＣは、持ち出し管理テーブル３０２に基づいて、ＬＳレスポンスパケットの「リクエスタＩＤ」および「トランザクションＩＤ」の各フィールドの値をローカルＩＤからグローバルＩＤに変換するとともに、「宛先ＩＤ」フィールドの値を、ホームノードを示すＩＤに変換する。ＮＣは、ＩＤが変換されたＬＳレスポンスパケットを、個別レスポンスパケットとして他のＮＣに送信する。個別スヌープパケットを送信した、ホームノードに接続されたＮＣは、個別レスポンスパケットを受信することで、処理の完了通知を受ける。
【０１９３】
上記の個別スヌープパケットは、「ブロードキャストフラグ」および「レスポンスフラグ」を含まない分だけ、ＮＣスヌープパケットよりデータ量が小さい。このため、他のＳＢにおけるデータの持ち出し先ノードが１つの場合には、ＮＣスヌープパケットの代わりに個別スヌープパケットを送信することで、ＳＢ間に伝送されるデータ量をさらに抑制することができる。
【０１９４】
また、個別レスポンスパケットも、「レスポンスフィールド」を含まない分だけ、ＮＣレスポンスパケットよりデータ量が小さい。このため、個別スヌープパケットに対する応答として個別レスポンスパケットを送信することで、ＳＢ間に伝送されるデータ量をさらに抑制することができる。
【０１９５】
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１９６】
１  情報処理システム
１０ａ〜１０ｄ  情報処理部
１１ａ〜１１ｄ  制御情報送信部
１２ａ〜１２ｄ  制御情報受信部
２０  制御パケット
２１  制御情報
２２  送信先情報
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の情報処理部がリング状通信路によって接続された情報処理システムにおいて、
前記複数の情報処理部のそれぞれは、
キャッシュ部を備える演算処理部と、
前記複数の情報処理部によって共有されるアドレス空間の一部が割り当てられた記憶部と、
制御情報と、当該制御情報の送信先とする１つ以上の情報処理部をそれぞれ指定する宛先情報とを含む制御パケットを、前記リング状通信路に送信する制御情報送信部であって、自身が属する情報処理部内の記憶部に対するアクセス要求対象のデータが他の情報処理部内のキャッシュ部にキャッシュされている場合に、前記アクセス要求対象のデータをキャッシュするキャッシュ部が属する１つ以上の情報処理部を制御情報の送信先として指定した制御パケットを、前記リング状通信路に送信する制御情報送信部と、
前記リング状通信路を介して受信した制御パケットに、制御情報の送信先として自身が属する情報処理部が指定されている場合には、前記受信した制御パケットから制御情報を取り込むとともに、自身が属する情報処理部を制御情報の送信先として指定しないように宛先情報を書き替えた制御パケットを前記リング状通信路に送信し、前記受信した制御パケットに制御情報の送信先として自身が属する情報処理部が指定されていない場合には、前記受信した制御パケットを前記リング状通信路に送信する制御情報受信部と、
を有することを特徴とする情報処理システム。
【請求項２】
前記制御情報受信部は、前記受信した制御パケット内の宛先情報に、制御情報の送信先として自身が属する情報処理部のみが指定されていた場合には、前記受信した制御パケットを前記リング状通信路に送信しないことを特徴とする請求項１記載の情報処理システム。
【請求項３】
前記複数の情報処理部のそれぞれは、自身が属する情報処理部の制御情報受信部が受信した制御パケットの送信元を宛先とする応答パケットを前記リング状通信路に送信する応答処理部をさらに有し、
前記制御情報送信部が送信する制御パケットには、制御情報の送信先に指定された情報処理部のうち少なくとも１つにおいて制御情報が受信済みかを示す受信判定情報が含まれ、
前記制御情報受信部は、前記受信した制御パケットに制御情報の送信先として自身が属する情報処理部が指定されていた場合、前記受信した制御パケット内の受信判定情報が未受信を示すときには、自身が属する情報処理部を制御情報の送信先として指定しないように前記受信した制御パケットを書き替えるとともに、当該制御パケットの受信判定情報が受信済みを示すように書き替えた制御パケットを前記リング状通信路に送信し、
前記応答処理部は、自身が属する情報処理部の制御情報受信部が受信した制御パケット内の受信判定情報が未受信を示していた場合に、当該制御パケット内の制御情報に対応する応答情報を格納した応答パケットを生成して前記リング状通信路に送信する、
ことを特徴とする請求項１または２記載の情報処理システム。
【請求項４】
前記応答処理部は、自身が属する情報処理部の制御情報受信部によって制御パケットから制御情報が取り込まれた後、前記リング状通信路を介して当該制御パケットに対応する応答パケットを受信したとき、前記取り込まれた制御情報に対応する応答情報を付加した応答パケットを、前記リング状通信路に送信することを特徴とする請求項３記載の情報処理システム。
【請求項５】
前記応答処理部は、自身が属する情報処理部の制御情報受信部が受信した制御パケット内の受信判定情報が受信済みを示していた場合に、前記リング状通信路を介して他の情報処理部の応答処理部から受信した応答パケットに、前記受信した応答パケットに対応する制御パケットから取り込まれた制御情報に対応する応答情報を付加して前記リング状通信路に送信することを特徴とする請求項３または４記載の情報処理システム。
【請求項６】
前記複数の情報処理部のそれぞれは、演算処理部と記憶部とをそれぞれ備える情報処理ノードを複数有し、
前記制御情報受信部は、前記リング状通信路を介して受信した制御パケットから取り込んだ制御情報を、自身が属する情報処理部内の各情報処理ノードに対してブロードキャストすることを特徴とする請求項１記載の情報処理システム。
【請求項７】
前記複数の情報処理部のそれぞれは、自身が属する情報処理部の制御情報受信部によってブロードキャストされた制御情報に対する応答情報を、当該情報処理部内のすべての情報処理ノードから受信すると、当該情報処理部の制御情報受信部が受信した制御パケットの送信元を宛先とする応答パケットを、前記リング状通信路に送信する応答処理部をさらに有することを特徴とする請求項６記載の情報処理システム。
【請求項８】
前記制御情報送信部が送信する制御パケットには、送信先に指定された情報処理部のうち少なくとも１つにおいて制御情報が受信済みかを示す受信判定情報が含まれ、
前記制御情報受信部は、前記受信した制御パケットにおいて制御情報の送信先として自身が属する情報処理部が指定されていた場合、前記受信した制御パケット内の受信判定情報が未受信を示すときには、前記受信した制御パケットを自身が属する情報処理部を制御情報の送信先として指定しないように書き替えるとともに、前記受信した制御パケット内の受信判定情報を受信済みを示すように書き替えた制御パケットを前記リング状通信路に送信し、
前記応答処理部は、自身が属する情報処理部の制御情報受信部が受信した制御パケット内の受信判定情報が未受信を示していた場合に、応答パケットを生成し、当該情報処理部内のすべての情報処理ノードから応答情報を受信すると、受信した応答情報を生成した応答パケットに付加した応答パケットを前記リング状通信路に送信する、
ことを特徴とする請求項７記載の情報処理システム。
【請求項９】
前記応答処理部は、自身が属する情報処理部の制御情報受信部が受信した制御パケット内の受信判定情報が受信済みを示していた場合、当該情報処理部内のすべての情報処理ノードから応答情報を受信し、かつ、他の情報処理部の応答処理部から前記リング状通信路を介して送信された応答パケットを受信したときに、受信した応答パケットに、前記受信した応答パケットに対応する制御パケットから取り込まれた制御情報に対応する応答情報を付加して前記リング状通信路に送信することを特徴とする請求項８記載の情報処理システム。
【請求項１０】
前記制御情報送信部は、前記アクセス要求対象のデータが、他の情報処理部におけるただ１つのキャッシュ部にキャッシュされている場合、前記アクセス要求対象のデータをキャッシュするキャッシュ部を含む情報処理ノードを宛先とした制御情報を含む個別制御パケットを、前記リング状通信路に送信することを特徴とする請求項１〜９のいずれか１項に記載の情報処理システム。
【請求項１１】
複数の情報処理部がリング状通信路によって接続された情報処理システムにおける情報送信方法であって、
前記複数の情報処理部のそれぞれは、キャッシュ部を備える演算処理部と、前記複数の情報処理部によって共有されるアドレス空間の一部が割り当てられた記憶部とを備え、
前記複数の情報処理部のうちの第１の情報処理部が、制御情報と、当該制御情報の送信先とする１つ以上の情報処理部をそれぞれ指定する宛先情報とを含む制御パケットを、前記リング状通信路に送信し、
前記複数の情報処理部のうちの第２の情報処理部が、前記リング状通信路を介して受信した制御パケットに、制御情報の送信先として自身が指定されている場合には、前記受信した制御パケットから制御情報を取り込むとともに、自身を制御情報の送信先として指定しないように宛先情報を書き替えた制御パケットを前記リング状通信路に送信し、制御情報の送信先として自身が指定されていない場合には、前記受信した制御パケットを前記リング状通信路に送信する、
処理を含み、
前記第１の情報処理部は、当該第１の情報処理部内の記憶部に対するアクセス要求対象のデータが他の情報処理部内のキャッシュ部にキャッシュされている場合に、前記アクセス要求対象のデータをキャッシュするキャッシュ部が属する１つ以上の情報処理部を制御情報の送信先として指定した制御パケットを、前記リング状通信路に送信する、
ことを特徴とする情報送信方法。
【国際調査報告】
2012077169.tif 000025
2012077169.tif 000026
2012077169.tif 000027
2012077169.tif 000028