(57)【要約】【課題】計算機ノード間で処理要求データとその応答データとが確実に送受信されるようにする。【解決手段】計算機ノードＮ１〜Ｎ１６は、第１の仮想チャネルと第２の仮想チャネルとによって多次元メッシュ状に接続される。各計算機ノードＮ１〜Ｎ１６は、第１の仮想チャネルを通じて送受信されるデータを第１の次元オーダに従ってルーティングするとともに、第２の仮想チャネルを通じて送受信されるデータを、第１の次元オーダとは逆順の第２の次元オーダに従ってルーティングする。また、各計算機ノードＮ１〜Ｎ１６では、自ノード宛ての処理要求データが第１の仮想チャネルを通じて受信されたとき、それに対する応答データが第２の仮想チャネルを通じて送信される。これにより、処理要求データと応答データの伝送経路が一致し、耐故障性が向上する。【選択図】図１
2010218364.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも第１の仮想チャネルと第２の仮想チャネルとによって多次元メッシュ状または多次元トーラス状に接続された複数の計算機ノードを有し、
前記各計算機ノードは、前記第１の仮想チャネルを通じて送受信されるデータを第１の次元オーダに従ってルーティングするとともに、前記第２の仮想チャネルを通じて送受信されるデータを前記第１の次元オーダとは逆順の第２の次元オーダに従ってルーティングするルーティング制御部を有することを特徴とする情報処理システム。
【請求項２】
前記各計算機ノードは、
自ノード宛てのデータが前記第１の仮想チャネルを通じて受信されたとき、当該データが、要求元の計算機ノードに対する応答が必要な処理要求データであるか否かを判別する受信データ判別部と、
前記受信データ判別部により受信データが前記処理要求データであると判別された場合、当該処理要求データに対する応答データを前記第２の仮想チャネルを通じて送信するように制御する応答制御部と、
をさらに有することを特徴とする請求項１記載の情報処理システム。
【請求項３】
前記応答制御部は、自ノードに接続された他の計算機ノードである隣接計算機ノードのうち、一の隣接計算機ノードから前記第１の仮想チャネルを通じて前記処理要求データが受信されたとき、当該処理要求データに対する前記応答データを、前記一の隣接計算機ノードに対して前記第２の仮想チャネルを通じて送信するように制御することを特徴とする請求項２記載の情報処理システム。
【請求項４】
前記処理要求データは、要求先の計算機ノードが備える記憶部からデータを読み出して要求元の計算機ノードに送信させるためのデータであることを特徴とする請求項２または３記載の情報処理システム。
【請求項５】
前記各計算機ノードは、前記記憶部との間のデータ転送制御を含む各種の演算処理を実行する演算部をさらに有し、
前記応答制御部は、前記処理要求データが受信されたとき、前記記憶部から前記演算部を介さずにデータを読み出し、前記応答データとして送信させることを特徴とする請求項４記載の情報処理システム。
【請求項６】
前記各計算機ノードは、他の計算機ノードに対して送信する送信データを生成する送信データ生成部をさらに有し、
前記計算機ノードのうち、データの入出力を担う入出力ノードが備える前記送信データ生成部は、前記入出力ノード以外の計算機ノードからの、少なくとも前記応答データを除く受信データが、前記第１の仮想チャネルおよび前記第２の仮想チャネルのうち一方の仮想チャネルを通じて受信される場合に、前記入出力ノード以外の計算機ノードに対する前記送信パケットを生成したとき、当該送信パケットの送信に利用する仮想チャネルとして、前記第１の仮想チャネルおよび前記第２の仮想チャネルのうち他方の仮想チャネルを指定することを特徴とする請求項１〜５のいずれか１項に記載の情報処理システム。
【請求項７】
前記各計算機ノードが多次元トーラス状に接続されている場合、前記計算機ノード同士は、前記第１の次元オーダに従ってルーティングされる複数の前記第１の仮想チャネルと、前記第２の次元オーダに従ってルーティングされる複数の前記第２の仮想チャネルとによって接続されることを特徴とする請求項１〜６のいずれか１項に記載の情報処理システム。
【請求項８】
少なくとも第１の仮想チャネルと第２の仮想チャネルとによって多次元メッシュ状または多次元トーラス状に接続された複数の計算機ノードのそれぞれに設けられ、他の計算機ノードとの間のデータ送受信動作を制御する通信制御装置において、
当該通信制御装置が設けられた計算機ノード宛てのデータが前記第１の仮想チャネルを通じて受信されたとき、当該データが、要求元の計算機ノードに対する応答が必要な処理要求データであるか否かを判別する受信データ判別部と、
前記受信データ判別部により受信データが前記処理要求データであると判別された場合、当該処理要求データに対する応答データを、前記第１の仮想チャネルとは逆順の次元オーダに従ってルーティングされる前記第２の仮想チャネルを通じて送信するように制御する応答制御部と、
を有することを特徴とする通信制御装置。
【請求項９】
少なくとも第１の仮想チャネルと第２の仮想チャネルとによって多次元メッシュ状または多次元トーラス状に接続された複数の計算機ノードを備えた情報処理システムにおける通信制御方法であって、
前記各計算機ノードは、
前記第１の仮想チャネルを通じて送受信されるデータを第１の次元オーダに従ってルーティングし、
前記第２の仮想チャネルを通じて送受信されるデータを前記第１の次元オーダとは逆順の第２の次元オーダに従ってルーティングする、
ことを特徴とする通信制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の計算機ノードを備えた情報処理システム、この情報処理システムの各計算機ノードに設けられる通信制御装置、および、通信制御方法に関する。
【背景技術】
【０００２】
近年、ＨＰＣ（High-Performance Computing）分野において、プロセッサを数万ノード分だけ接続した超並列計算機が注目されている。数万ノード規模の超並列計算機は、一般的に、ノード当たりのハードウェアコストがシステム規模に関係なく一定になる設計が採用される。ノード同士がインタコネクト接続されたノード間接続ネットワークでは、一般的に、ノードとノードとを相互接続する直接網が利用される。直接網のハードウェアコストは、各ノードの接続ポート数で決まり、システム規模に関係なく一定である。超並列計算機において数万ノードを接続する直接網の接続トポロジとしては、多次元メッシュまたは多次元トーラスが一般的に利用される。
【０００３】
このようなシステムでは、複数のパケットが循環的に転送要求されることで通信不能となるデッドロックを回避するための手段が必要になる。デッドロックを回避するための一般的な技術としては、例えば、通信経路の次元順を固定する次元オーダルーティングが知られている。また、チャネル番号としてそれぞれ高い値、低い値を有する二重の仮想チャネルをノードに割り当て、転送先のチャネル番号が昇順または降順になるようにルーティングする技術も知られている（例えば、非特許文献１参照）。
【０００４】
ところで、数万ノード規模のシステムでは、ノードの故障のたびにシステム全体を停止して保守を行うようにすると、稼動時間が低下してしまう。このため、一部のノードが故障していても、他のノードを使用して通信可能となるような耐故障性が要求される。しかし、次元オーダルーティングでは、通信経路があらかじめ固定されるため、ノードに故障が発生するとそのノードを経路とする通信ができなくなるという問題がある。
【０００５】
図１１は、メッシュネットワークにおいてノードに故障が発生した場合の様子を示す図である。
図１１に示す並列コンピュータでは、計算機ノード（以下、“ノード”と略称する）Ｎ１０１〜Ｎ１１６が、４×４の２次元メッシュネットワークにより接続されている。また、このメッシュネットワークでは、次元オーダルーティングが行われる。ここでは例として、最初にｘ方向（図中横方向）のルーティングが行われ、次にｙ方向（図中縦方向）のルーティングが行われるものとする。例えば、ノードＮ１０９からノードＮ１０４に対してパケットが送信される場合には、パケットはまず、ノードＮ１０９からノードＮ１１０，Ｎ１１１，Ｎ１１２の順に転送された後、ノードＮ１０８，Ｎ１０４の順に転送される。
【０００６】
このように、次元オーダルーティングでは、送信ノードと受信モードの組み合わせによりパケットの伝送経路は１つに決まる。ところが、このようなメッシュネットワークでは、１つのノードが故障すると、そのノードを経路とするすべての通信が不可能になってしまう。
【０００７】
特に、各ノードで並列計算を行うためには、同じジョブを実行するノード間では通信可能である必要がある。このため、故障によって通信不可能なノードの組み合わせが発生すると、ジョブを実行可能なノードグループが小さくなるという問題がある。例えば、図１１においてノードＮ１１１に故障が発生した場合、通信可能なノードグループの分割方法は、次の３通り考えられる。
【０００８】
第１の分割方法は、故障したノードＮ１１１を含む列に対して、図中上側に４×２ノードのグループ、図中下側に４×１ノードのグループを設定する方法である。すなわち、上側のノードグループはノードＮ１０１〜Ｎ１０８を含み、下側のノードグループはノードＮ１１３〜Ｎ１１６を含む。
【０００９】
第２の分割方法は、故障したノードＮ１１１を含む行に対して、図中左側に２×４ノードのグループ、図中右側に１×４ノードのグループを設定する方法である。すなわち、左側のノードグループはノードＮ１０１，Ｎ１０２，Ｎ１０５，Ｎ１０６，Ｎ１０９，Ｎ１１０，Ｎ１１３，Ｎ１１４を含み、右側のノードグループはノードＮ１０４，Ｎ１０８，Ｎ１１２，Ｎ１１６を含む。
【００１０】
第３の分割方法は、故障したノードＮ１１１をそれぞれ含む列および行を除いた３×３ノードを含む１つのグループを設定する方法である。すなわち、このノードグループは、ノードＮ１０１，Ｎ１０２，Ｎ１０４〜Ｎ１０６，Ｎ１０８〜Ｎ１１０，Ｎ１１２〜Ｎ１１４，Ｎ１１６を含む。
【００１１】
このように、ノードの故障によりノードグループが分断される問題への対策として、多次元メッシュネットワークまたは多次元トーラスネットワークを多重化する方法が考えられる。ここで、図１２は、多重化されたメッシュネットワークの一例を示す図である。
【００１２】
図１２には、４×４の２次元メッシュネットワークを２つの通信プレーン分だけ多重化した場合の例を示している。このメッシュネットワークでは、一方の通信プレーンのノードＮ１０１〜Ｎ１１３に対して、他方の通信プレーンのノードＮ１２１〜Ｎ１３６がそれぞれ組み合わされ、各組のノード同士がプレーン間接続されている。
【００１３】
このようなメッシュネットワークでは、通信プレーン間で接続されたノードのうちの一方を用いて４×４の２次元メッシュネットワークを構成することができる。このため、一方の通信プレーンのノードで故障が発生した場合には、そのノードに接続された他方の通信プレーンのノードを経路とすることで、通信が可能になる。
【００１４】
例えば、図１２において、ノードＮ１０９からノードＮ１０４に対するパケットの送信時に、その経路上のノードＮ１１１が故障した場合を考える。この場合、パケットの経路に対応する他方の通信プレーンのノードを経路とすることで、通信が可能になる。例えば、パケットがノードＮ１０９，Ｎ１２９，Ｎ１３０，Ｎ１３１，Ｎ１３２，Ｎ１２８，Ｎ１２４，Ｎ１０４の順に転送されることで、ノードＮ１０９からノードＮ１０４へのパケット転送が可能になる。このように、一方の通信プレーンのノードが故障した場合でも、他方の通信プレーンでは全ノードが相互に通信可能であるので、ノードグループは分断されない。
【００１５】
なお、メッシュネットワークにおける他の障害回復方法としては、動的に現用系と予備系からなるリングネットを構成し、現用系の障害時に予備系にトラフィックを迂回させるようにしたものがあった（例えば、特許文献１参照）。
【００１６】
ところで、ＨＰＣ分野では、ネットワーク処理のためにプロセッサを使用する時間を短縮するために、ＲＤＭＡ（Remote Direct Memory Access）通信が利用されている。リモートノードのメモリに対する書き込み要求のための通信はＰｕｔ通信と呼ばれ、そのメモリからの読み出し要求のための通信はＧｅｔ通信と呼ばれる。
【００１７】
ＲＤＭＡ通信では、リモートノードのネットワークインタフェースに対して、そのリモートノードのメモリに対する読み書きを要求することができる。要求を受けたリモートノードでは、メモリの読み書きの際に、ネットワークインタフェースとメモリとの間でＤＭＡ（Direct Memory Access）転送が行われる。これにより、各ノードが備えるプロセッサに処理負荷をかけることなく、メモリの読み書きを実行できるようになり、その結果、並列コンピュータ内の各プロセッサでの並列処理の効率が向上する。
【００１８】
ここで、図１３は、Ｇｅｔ通信が行われる場合のパケットの経路について説明するための図である。
Ｇｅｔ通信では、メモリから読み出したデータを読み出し要求側に返信するために、応答通信が必要となる。次元オーダルーティングが行われる場合、Ｇｅｔ要求パケットとその応答パケットとは、それぞれ異なる経路で転送される。例えば、図１３において、ノードＮ１０９からノードＮ１０４に対してＧｅｔ要求が行われる場合、Ｇｅｔ要求パケットは、例えば、ノードＮ１０９，Ｎ１１０，Ｎ１１１，Ｎ１１２，Ｎ１０８，Ｎ１０４の順に転送される。一方、ノードＮ１０４からのＧｅｔ応答パケットは、ノードＮ１０４，Ｎ１０３，Ｎ１０２，Ｎ１０１，Ｎ１０５，Ｎ１０９の順に転送される。
【００１９】
しかしながら、このようにＧｅｔ要求パケットとＧｅｔ応答パケットの各経路が異なる場合には、それらの一方の経路上のノードに故障が発生する場合がある。ここで、Ｇｅｔ応答の経路上のノードが故障した場合には、Ｇｅｔ要求の送信元ノードは、要求したデータを受信できない。
【００２０】
このような問題は、前述のように、メッシュネットワークを多重化することで回避できる。図１４は、多重化されたメッシュネットワークにおいて応答経路に故障が発生した状態を示す図である。この図１４に示すように、要求経路のノードと同じ通信プレーンにおいて、応答経路上のノードに故障が発生した場合には、応答経路のみ通信プレーンを切り替えることで、読み出しを要求したデータが要求元ノードに転送される。
【００２１】
しかし、このような方法では、Ｇｅｔ要求を受けたノードにおいて、応答パケットの経路が故障したノードを回避するように、適切な通信プレーンを選択できるようにする必要がある。次元オーダルーティングでは、各ノードにおいて送信経路を簡単に決定できることが大きな利点であるが、上記のように最適な応答経路を選択するためには、Ｇｅｔ要求を受けたノードに複雑な処理を実行させる必要が生じる。特に、このような最適経路選択機能をハードウェア回路によって実現する場合、その回路は複雑で大規模なものになってしまう。
【先行技術文献】
【特許文献】
【００２２】
【特許文献１】特開２００２−２４７０３８号公報
【非特許文献】
【００２３】
【非特許文献１】William J. Dally，Charles L. Seitz，"Deadlock-Free Message Routing in Multiprocessor Interconnection Networks"，IEEE TRANSACTIONS ON COMPUTERS Vol. C-36，１９８７年５月
【発明の概要】
【発明が解決しようとする課題】
【００２４】
上記のように、次元オーダルーティングが行われる多次元メッシュネットワークまたは多次元トーラスネットワークでは、ノードに故障が発生した場合でも通信を継続できることが望まれている。特に、Ｇｅｔ要求パケットなど、応答が必要なパケットが送信された場合に、その応答パケットの経路上のノードに故障が発生しても、要求側ノードが応答パケットを確実に受信できることが望まれている。
【００２５】
しかしながら、応答が必要なパケットに対して確実に応答できるような耐故障性を実現するためには、前述の通り、通信プレーンを多重化して、故障したノードが回避されるように応答パケットの経路を適切に選択する必要があった。このような経路選択のためには複雑な処理が必要であり、その処理の実現のためには回路規模や製造コストが増大する。
【００２６】
本発明はこのような点に鑑みてなされたものであり、計算機ノード間で処理要求データとその応答データとが確実に送受信されるようにした情報処理システム、通信制御装置および方法を提供することを目的とする。
【課題を解決するための手段】
【００２７】
上記目的を達成するために、情報処理システムが提供される。この情報処理システムは、少なくとも第１の仮想チャネルと第２の仮想チャネルとによって多次元メッシュ状または多次元トーラス状に接続された複数の計算機ノードを有する。また、前記各計算機ノードは、前記第１の仮想チャネルを通じて送受信されるデータを第１の次元オーダに従ってルーティングするとともに、前記第２の仮想チャネルを通じて送受信されるデータを前記第１の次元オーダとは逆順の第２の次元オーダに従ってルーティングするルーティング制御部を有する。
【００２８】
このような情報処理システムでは、各計算機ノードのルーティング制御部の制御により、第１の仮想チャネルでは、第１の次元オーダに従ってルーティングされ、第２の仮想チャネルでは、第１の次元オーダとは逆順の第２の次元オーダに従ってルーティングされる。ここで、例えば、２つの計算機ノード間で通信する際に、データの送信方向に応じて異なる仮想チャネルが使用された場合には、いずれの方向でも、データが伝送される計算機ノードの経路が一致する。
【００２９】
また、上記目的を達成するために、少なくとも第１の仮想チャネルと第２の仮想チャネルとによって多次元メッシュ状または多次元トーラス状に接続された複数の計算機ノードのそれぞれに設けられ、他の計算機ノードとの間のデータ送受信動作を制御する通信制御装置が提供される。この通信制御装置は、当該通信制御装置が設けられた計算機ノード宛てのデータが前記第１の仮想チャネルを通じて受信されたとき、当該データが、要求元の計算機ノードに対する応答が必要な処理要求データであるか否かを判別する受信データ判別部と、前記受信データ判別部により受信データが前記処理要求データであると判別された場合、当該処理要求データに対する応答データを、前記第１の仮想チャネルとは逆順の次元オーダに従ってルーティングされる前記第２の仮想チャネルを通じて送信するように制御する応答制御部と、を有する。
【００３０】
このような通信制御装置において、受信データ判別部は、この通信制御装置が設けられた計算機ノード宛てのデータが第１の仮想チャネルを通じて受信されたとき、このデータが、要求元の計算機ノードに対する応答が必要な処理要求データであるか否かを判別する。応答制御部は、受信データ判別部により受信データが処理要求データであると判別された場合、この処理要求データに対する応答データを第２の仮想チャネルを通じて送信するように制御する。ここで、第２の仮想チャネルでは、第１の仮想チャネルとは逆順の次元オーダに従ってルーティングされる。
【発明の効果】
【００３１】
上記の情報処理システムによれば、要求元の計算機ノードに対する応答が必要な処理要求データと、その応答データとが、計算機ノード間で確実に送受信されるようになる。
また、上記の通信制御装置によれば、要求元の計算機ノードに対する応答が必要な処理要求データに対する応答データを、簡易な処理により確実に送信できる。
【図面の簡単な説明】
【００３２】
【図１】第１の実施の形態に係る並列コンピュータの全体構成を示す図である。
【図２】処理要求パケットおよび応答パケットの伝送経路の例を示す図である。
【図３】ノードの内部構成例を示す図である。
【図４】ルータの内部構成例を示す図である。
【図５】ネットワークＩ／Ｆの内部構成例を示す図である。
【図６】ルータにおけるルーティング処理手順を示すフローチャートである。
【図７】ルータから受信パケットが供給されたときのネットワークＩ／Ｆの処理手順を示すフローチャートである。
【図８】出力回路による送信可否の管理手順を示すフローチャートである。
【図９】第２の実施の形態に係る並列コンピュータの構成例を示す図である。
【図１０】第３の実施の形態に係る並列コンピュータの構成例を示す図である。
【図１１】メッシュネットワークにおいてノードに故障が発生した場合の様子を示す図である。
【図１２】多重化されたメッシュネットワークの一例を示す図である。
【図１３】Ｇｅｔ通信が行われる場合のパケットの経路について説明するための図である。
【図１４】多重化されたメッシュネットワークにおいて応答経路に故障が発生した状態を示す図である。
【発明を実施するための形態】
【００３３】
以下、実施の形態を図面を参照して詳細に説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る並列コンピュータの全体構成を示す図である。
【００３４】
図１に示す並列コンピュータ１は、複数の計算機ノード（以下、“ノード”と略称する）がネットワークにより接続された情報処理システムを含んでおり、各ノードが備えるプロセッサにより所望の処理を並列に処理することが可能になっている。本実施の形態の並列コンピュータ１では、例として１６のノードＮ１〜Ｎ１６が設けられている。そして、これらのノードＮ１〜Ｎ１６は、例えば光ファイバなどにより４×４の２次元メッシュ状に接続され、これによりメッシュネットワークが構成されている。
【００３５】
また、このネットワークにおいて、各ノードは、ｘ方向（図１中の横方向）およびｙ方向（図１中の縦方向）に隣接するノードとの間で、それぞれ少なくとも２つの仮想チャネルによって接続されている。ここでは、一方の仮想チャネルを“要求チャネル”、他方の仮想チャネルを“応答チャネル”と呼ぶ。
【００３６】
このネットワークにおいて、あるノードから一方の仮想チャネルを通じて送信されたパケットは、基本的に、同じ仮想チャネルを通じて宛先まで伝送される。また、要求チャネルおよび応答チャネルでは、互いに逆順の次元オーダルーティングが行われる。ここでは例として、最初にｘ方向のルーティングが行われ、次にｙ方向のルーティングが行われるものとする。
【００３７】
例えば、ノードＮ９からノードＮ４に対してパケットが要求チャネルを通じて送信される場合には、パケットはまず、ノードＮ９からノードＮ１０，Ｎ１１，Ｎ１２の順に転送された後、ノードＮ８，Ｎ４の順に転送される。一方、ノードＮ９からノードＮ４に対してパケットが応答チャネルを通じて送信される場合には、パケットはまず、ノードＮ９からノードＮ５，Ｎ１の順に転送された後、ノードＮ２，Ｎ３，Ｎ４の順に転送される。
【００３８】
このようなネットワークでは、２つのノード間で通信する際に、データの送信方向に応じてそれぞれ別の仮想チャネルを使用することができる。例えば、一方のノードから他方のノードへのデータ送信に要求チャネルを使用し、他方のノードから一方のノードへのデータ送信に応答チャネルを使用する。このような動作を行った場合、データの送信方向がどちらの場合にも、データの伝送経路が一致する。
【００３９】
このような性質を利用することで、次の図２で説明するように、要求元ノードに対する応答が必要な処理要求パケットが送信された場合に、それに対する応答パケットがより確実に送信されるようになる。
【００４０】
図２は、処理要求パケットおよび応答パケットの伝送経路の例を示す図である。
本実施の形態では、要求元ノードに対する応答が必要な通信として、Ｇｅｔ通信を適用する。Ｇｅｔ通信は、ＲＤＭＡ技術を用いて、要求先ノードのメモリからデータを読み出すための通信である。
【００４１】
なお、Ｇｅｔ通信では、要求先ノードでは、並列処理の実行主体であるＣＰＵに負荷がかかることなく、メモリからデータがＤＭＡによって読み出され、そのデータが要求元ノードに返信される。このＧｅｔ通信のように、要求元ノードに対する応答が必要な通信としては、要求先ノードでの処理負荷が軽く、短時間で応答が返信されるようなものが適用されることが望ましい。
【００４２】
図２には、ノードＮ９からノードＮ４に対してＧｅｔ要求パケットが送信された場合の例を示している。この場合、ノードＮ９は、要求チャネルを通じてＧｅｔ要求パケットを送信する。これにより、Ｇｅｔ要求パケットは、ノードＮ１０，Ｎ１１，Ｎ１２，Ｎ８，Ｎ４の順に転送される。
【００４３】
一方、Ｇｅｔ要求パケットを受信したノードＮ４は、このノードＮ４に接続されたメモリから要求されたデータをＤＭＡにより読み出す。そして、そのデータを格納したＧｅｔ応答パケットを、応答チャネルを通じてノードＮ９に対して送信する。これにより、Ｇｅｔ応答パケットは、ノードＮ８，Ｎ１２，Ｎ１１，Ｎ１０，Ｎ９の順に転送される。すなわち、Ｇｅｔ応答パケットは、Ｇｅｔ要求パケットと同じ経路上を逆方向に転送される。
【００４４】
ここで、例えばノードＮ２が故障したものとする。仮に、Ｇｅｔ要求パケットをＧｅｔ応答パケットと同じ仮想チャネルを通じて送信するものとした場合、ノードＮ４からノードＮ９へのＧｅｔ応答パケットは、ノードＮ３，Ｎ２，Ｎ１，Ｎ５，Ｎ９の順に転送される。このため、ノードＮ２が故障していると、ノードＮ４での応答処理が正常に実行されたにもかかわらず、Ｇｅｔ応答パケットはノードＮ９まで到達しない。
【００４５】
このような事態を避けるためには、図１４で説明したように、通信プレーンを多重化する方法が考えられる。しかし、この方法では、Ｇｅｔ要求パケットを受信したノードは、通信プレーンも含めた最適な応答経路を決定するために、複雑な処理が実行されることになる。
【００４６】
これに対して、図２のようにＧｅｔ応答パケットを応答チャネルを通じて送信するものとした場合、Ｇｅｔ要求パケットの伝送経路とＧｅｔ応答パケットの伝送経路とは同じになる。このため、Ｇｅｔ要求パケットが要求先ノードまで転送されれば、それに対するＧｅｔ応答パケットも必ず要求元ノードまで転送される。従って、Ｇｅｔ通信における耐故障性が高められる。
【００４７】
また、要求先ノードでは、Ｇｅｔ応答パケットをＧｅｔ要求パケットと同じ通信プレーン上に送信すればよくなる。例えば、要求先ノードは、Ｇｅｔ要求パケットを自ノードに接続された他のノードから受信したとき、同じノードをＧｅｔ応答パケットの送信先として決定するとともに、送信する仮想チャネルのみを変更する。従って、応答経路を決定するための処理が簡易になり、その処理回路の規模や製造コストが抑制される。
【００４８】
次に、各ノードの構成およびその処理手順について、より具体的に説明する。
図３は、ノードの内部構成例を示す図である。
図３では、例として、ノードＮ１０の内部構成を示している。なお、ノードＮ６，Ｎ７，Ｎ１１も、このノードＮ１０と同じ構成を有している。また、ノードＮ１〜Ｎ５，Ｎ８，Ｎ９，Ｎ１２〜Ｎ１６については、接続される他のノードに対応する通信ポート数が異なる以外、基本的な構成はノードＮ１０と同じである。
【００４９】
図３に示すように、ノードＮ１０は、ルータ１００、ネットワークＩ／Ｆ（インタフェース）２００、ＣＰＵ３１０およびメモリ３２０を備えている。また、ネットワークＩ／Ｆ２００、ＣＰＵ３１０およびメモリ３２０は、バス３３０を介して互いに接続されている。ネットワークＩ／Ｆ２００、ＣＰＵ３１０およびメモリ３２０は、例えば、ＰＥ（Processor Element）を構成するものである。
【００５０】
ルータ１００は、メッシュネットワークを伝送されるパケットのルーティングを行う。例えば、ルータ１００は、このノードＮ１０に接続された他のノード（以下、“隣接ノード”と呼ぶ）から、パケットを受信すると、そのパケットの宛先を判別する。宛先が他のノードである場合には、受信した仮想チャネルに応じた次元オーダに従って、送信先の隣接ノードを判定し、その隣接ノードに対してパケットを送信する。一方、宛先がこのノードＮ１０であった場合には、受信したパケットをネットワークＩ／Ｆ２００に出力する。なお、実際のノード間通信では、例えば、パケットはより小さいデータ単位であるフリットに分割されて送信される。
【００５１】
また、ルータ１００は、ＣＰＵ３１０あるいはネットワークＩ／Ｆ２００によって生成されたメッセージを含むパケットを、ネットワークＩ／Ｆから受信することも可能である。この場合、ルータ１００は、指定された仮想チャネルに応じた次元オーダに従い、宛先を基にパケットの送信先の隣接ノードを判定し、その隣接ノードに対して、指定された仮想チャネルを通じてパケットを送信する。
【００５２】
ネットワークＩ／Ｆ２００は、ＣＰＵ３１０とメッシュネットワークとの間のデータ送受信を制御するためのＩ／Ｆ部である。また、ネットワークＩ／Ｆ２００は、ＲＤＭＡ通信の制御機能や、メモリ３２０との間のＤＭＡ転送制御機能を備えている。
【００５３】
なお、以上のルータ１００およびネットワークＩ／Ｆ２００は、例えば、同一基板上に搭載される場合もある。
ＣＰＵ３１０は、ネットワークＩ／Ｆ２００を通じて入力されたメッセージやデータに従って、演算処理を実行する。また、他のノードに送信すべきメッセージやデータを生成し、それらをその宛先とともにネットワークＩ／Ｆ２００に出力する。このような処理は、メモリ３２０に記憶されたプログラムがＣＰＵ３１０で実行されることにより実現される。
【００５４】
メモリ３２０には、ＣＰＵ３１０に実行されるプログラムや、各種のデータが記憶される。メモリ３２０は、ＣＰＵ３１０からの要求に応じてデータの読み書きを行うが、ネットワークＩ／Ｆ２００からの要求に応じてＤＭＡ転送によりデータの読み書きを行うことも可能になっている。
【００５５】
図４は、ルータの内部構成例を示す図である。
ルータ１００は、入力回路１１０および出力回路１２０と、スイッチ回路１３０と、ルーティング制御部１４０とを備えている。
【００５６】
入力回路１１０および出力回路１２０は、ともに隣接ノードの数だけ設けられている。ノードＮ１０では、図４に示すように、入力回路１１０および出力回路１２０はそれぞれ４つずつ設けられている。そして、１つの入力回路１１０および出力回路１２０の組が、１つの隣接ノードに接続されている。
【００５７】
また、各入力回路１１０には、対応する隣接ノードから入力されたパケットを格納するバッファが設けられており、これらのバッファは、論理バッファ１１１，１１２の２つの領域に論理的に区分けされている。論理バッファ１１１は、要求チャネルに対応する受信キューを実現し、論理バッファ１１２は、応答チャネルに対応する受信キューを実現する。
【００５８】
各出力回路１２０にも同様に、対応する隣接ノードに対して出力するパケットを格納するバッファが設けられている。そして、各バッファは、論理バッファ１２１，１２２の２つの領域に論理的に区分けされている。論理バッファ１２１は、要求チャネルに対応する送信キューを実現し、論理バッファ１２２は、応答チャネルに対応する受信キューを実現する。
【００５９】
スイッチ回路１３０は、ルーティング制御部１４０による制御の下で、入力回路１１０のいずれかから、またはネットワークＩ／Ｆ２００から入力されたパケットを、出力回路１２０のいずれか、またはネットワークＩ／Ｆ２００に対して出力する。
【００６０】
ルーティング制御部１４０は、スイッチ回路１３０での入出力切り替え処理を制御する。ルーティング制御部１４０は、要求チャネルを利用したパケットの送受信処理と、応答チャネルを利用したパケットの送受信処理とでは、逆順の次元オーダに従ってルーティングを行う。
【００６１】
図５は、ネットワークＩ／Ｆの内部構成例を示す図である。
ネットワークＩ／Ｆ２００は、ルータ１００からのパケットの入力を受け付ける入力回路２１０と、他のノード宛てのパケットをルータ１００に対して出力する出力回路２２０とを備えている。
【００６２】
入力回路２１０には、ルータ１００から入力されたパケットのうち、ＲＤＭＡ通信用のパケット、すなわち、Ｇｅｔ要求パケットおよびＰｕｔパケットに対する処理を実行するための機能が設けられている。入力回路２１０は、このような機能として、受信データ判別部２１１、ＤＭＡ制御部２１２および送信制御部２１３を備えている。
【００６３】
受信データ判別部２１１は、ルータ１００から入力されたパケットに格納されたメッセージを判別する。そして、受信パケットがＧｅｔ要求パケットまたはＰｕｔパケットのいずれかであった場合、ＤＭＡ制御部２１２に対して、メモリ３２０との間のＤＭＡ転送動作を要求する。また、受信パケットがＧｅｔ要求パケットであった場合には、送信制御部２１３に対してＧｅｔ応答パケットの送信を要求する。また、受信パケットがＲＤＭＡ通信用以外のパケットであった場合、そのパケットをＣＰＵ３１０に出力する。
【００６４】
ＤＭＡ制御部２１２は、受信データ判別部２１１からの要求に応じてメモリ３２０との間でＤＭＡ転送を行い、メモリ３２０へのデータの書き込み、またはメモリ３２０からのデータの読み出しを行う。また、メモリ３２０からデータを読み出した場合、そのデータを送信制御部２１３に出力する。
【００６５】
送信制御部２１３は、ＤＭＡ制御部２１２からのデータを格納したＧｅｔ応答パケットを生成し、そのパケットを出力回路２２０を介してルータ１００に出力する。このとき、ルータ１００に対して、出力先の隣接ノードや使用する仮想チャネルを指定する。
【００６６】
出力回路２２０は、ＣＰＵ３１０または送信制御部２１３から出力されたパケットの入力を受け付け、そのパケットをルータ１００に出力する。このとき、出力回路２２０は、パケットの送信先とする隣接ノードと、送信に利用する仮想チャネルとを、ルータ１００に指定できるようになっている。
【００６７】
図６は、ルータにおけるルーティング処理手順を示すフローチャートである。なお、この図６の処理は、ルータ１００内のいずれかの入力回路１１０に入力されたパケットが、スイッチ回路１３０に供給されるたびに実行されるものである。
【００６８】
［ステップＳ１１］ルーティング制御部１４０は、パケットの受信チャネルを判定する。そのパケットが要求チャネルを通じて受信された場合には、ステップＳ１２の処理が実行され、応答チャネルを通じて受信された場合には、ステップＳ１６の処理が実行される。
【００６９】
［ステップＳ１２］ルーティング制御部１４０は、受信パケットの宛先アドレスを参照し、ｘ方向の宛先アドレスが、自ノードについてのｘ方向のアドレスと一致するか否かを判定する。アドレスが一致した場合、ステップＳ１４の処理が実行され、一致しなかった場合、ステップＳ１３の処理が実行される。
【００７０】
［ステップＳ１３］ルーティング制御部１４０は、受信パケットを、要求チャネルを通じてｘ方向にルーティングする。具体的には、ルーティング制御部１４０は、ｘ方向に接続した隣接ノードのうち、自ノードよりｘ方向の宛先アドレスに近い側の隣接ノードを、パケットの送信先として決定する。そして、その隣接ノードに対応する出力回路１２０内の論理バッファ１２１に対してパケットを転送するように、スイッチ回路１３０を制御する。
【００７１】
［ステップＳ１４］ルーティング制御部１４０は、受信パケットの宛先アドレスを参照し、ｙ方向の宛先アドレスが、自ノードについてのｙ方向のアドレスと一致するか否かを判定する。アドレスが一致した場合、ステップＳ２０の処理が実行され、一致しなかった場合、ステップＳ１５の処理が実行される。
【００７２】
［ステップＳ１５］ルーティング制御部１４０は、受信パケットを、要求チャネルを通じてｙ方向にルーティングする。具体的には、ルーティング制御部１４０は、ｙ方向に接続した隣接ノードのうち、自ノードよりｙ方向の宛先アドレスに近い側の隣接ノードを、パケットの送信先として決定する。そして、その隣接ノードに対応する出力回路１２０内の論理バッファ１２１に対してパケットを転送するように、スイッチ回路１３０を制御する。
【００７３】
［ステップＳ１６］ルーティング制御部１４０は、受信パケットの宛先アドレスを参照し、ｙ方向の宛先アドレスが、自ノードについてのｙ方向のアドレスと一致するか否かを判定する。アドレスが一致した場合、ステップＳ１８の処理が実行され、一致しなかった場合、ステップＳ１７の処理が実行される。
【００７４】
［ステップＳ１７］ルーティング制御部１４０は、受信パケットを、応答チャネルを通じてｙ方向にルーティングする。具体的には、ルーティング制御部１４０は、ｙ方向に接続した隣接ノードのうち、自ノードよりｙ方向の宛先アドレスに近い側の隣接ノードを、パケットの送信先として決定する。そして、その隣接ノードに対応する出力回路１２０内の論理バッファ１２２に対してパケットを転送するように、スイッチ回路１３０を制御する。
【００７５】
［ステップＳ１８］ルーティング制御部１４０は、受信パケットの宛先アドレスを参照し、ｘ方向の宛先アドレスが、自ノードについてのｘ方向のアドレスと一致するか否かを判定する。アドレスが一致した場合、ステップＳ２０の処理が実行され、一致しなかった場合、ステップＳ１９の処理が実行される。
【００７６】
［ステップＳ１９］ルーティング制御部１４０は、受信パケットを、応答チャネルを通じてｘ方向にルーティングする。具体的には、ルーティング制御部１４０は、ｘ方向に接続した隣接ノードのうち、自ノードよりｘ方向の宛先アドレスに近い側の隣接ノードを、パケットの送信先として決定する。そして、その隣接ノードに対応する出力回路１２０内の論理バッファ１２２に対してパケットを転送するように、スイッチ回路１３０を制御する。
【００７７】
［ステップＳ２０］ルーティング制御部１４０は、受信パケットをネットワークＩ／Ｆ２００に出力するように、スイッチ回路１３０を制御する。これにより、受信パケットは、ネットワークＩ／Ｆ２００の入力回路２１０に入力される。このとき、受信パケットの送信元の隣接ノードを示す情報と、利用された仮想チャネルを示す情報とが、ネットワークＩ／Ｆ２００に対して通知される。
【００７８】
以上の処理によれば、要求チャネルを通じて受信されたパケットについては、ｘ方向への転送が優先され、応答チャネルを通じて受信されたパケットについては、ｙ方向への転送が優先される。すなわち、応答チャネルでのルーティングでは、要求チャネルとは逆順の次元オーダが適用される。また、自ノード宛てのパケットが受信された場合には、そのパケットはネットワークＩ／Ｆ２００に供給される。
【００７９】
次に、図７は、ルータから受信パケットが供給されたときのネットワークＩ／Ｆの処理手順を示すフローチャートである。
［ステップＳ３１］ネットワークＩ／Ｆ２００の入力回路２１０に、ルータ１００から受信パケットが入力されると、受信データ判別部２１１は、ルータ１００から通知された情報に基づき、受信パケットが要求チャネルから受信されたものか否かを判定する。要求チャネルから受信されたものである場合には、ステップＳ３２の処理が実行され、応答チャネルから受信されたものである場合には、ステップＳ３８の処理が実行される。
【００８０】
［ステップＳ３２］受信データ判別部２１１は、受信パケットがＧｅｔ要求パケットであるか否かを判定する。受信パケットがＧｅｔ要求パケットである場合、受信データ判別部２１１は、受信パケットに格納されていた読み出しアドレスをＤＭＡ制御部２１２に対して通知し、メモリ３２０からのデータ読み出しを要求する。これとともに、受信データ判別部２１１は、受信パケットから送信元ノードのアドレスを抽出して、送信制御部２１３に通知する。さらに、受信データ判別部２１１は、受信データの送信元の隣接ノードを示す情報を、送信制御部２１３に通知する。そして、送信制御部２１３に対して、Ｇｅｔ応答パケットの送信を要求する。この後、ステップＳ３３の処理が実行される。一方、受信パケットがＧｅｔ要求パケットでなかった場合には、ステップＳ３６の処理が実行される。
【００８１】
［ステップＳ３３］ＤＭＡ制御部２１２は、メモリ３２０にアクセスして、受信データ判別部２１１から通知された読み出しアドレスに格納されたデータをＤＭＡ転送により読み出し、送信制御部２１３に出力する。
【００８２】
［ステップＳ３４］送信制御部２１３は、ＤＭＡ制御部２１２により読み出されたデータを格納したＧｅｔ応答パケットを生成する。このとき、受信データ判別部２１１から通知された、Ｇｅｔ要求パケットの送信元ノードのアドレスを、Ｇｅｔ応答パケットの宛先アドレスに設定する。
【００８３】
［ステップＳ３５］送信制御部２１３は、生成したＧｅｔ応答パケットを出力回路２２０に供給して、ルータ１００に出力させる。このとき、送信制御部２１３は、Ｇｅｔ応答パケットの送信先の仮想チャネルを、受信パケットの送信元の隣接ノードに接続された応答チャネルとするように、出力回路２２０を通じてルータ１００に要求する。これにより、ルータ１００は、ネットワークＩ／Ｆ２００から受信したＧｅｔ応答パケットを、Ｇｅｔ要求パケットの送信元の隣接ノードに対応する出力回路１２０の論理バッファ１２２に転送する。
【００８４】
［ステップＳ３６］受信データ判別部２１１は、受信パケットがＰｕｔパケットであるか否かを判定する。受信パケットがＰｕｔパケットである場合、受信データ判別部２１１は、受信パケットに格納されていた書き込みアドレスおよび書き込みデータをＤＭＡ制御部２１２に対して通知し、メモリ３２０への書き込みを要求する。この後、ステップＳ３７の処理が実行される。一方、受信パケットがＰｕｔパケットでない場合、ステップＳ３８の処理が実行される。
【００８５】
［ステップＳ３７］ＤＭＡ制御部２１２は、メモリ３２０にアクセスして、受信データ判別部２１１から通知された書き込みアドレスに対して、書き込みデータをＤＭＡ転送により書き込む。なお、書き込み完了後には、その旨が入力回路２１０からＣＰＵ３１０に対して通知されてもよい。
【００８６】
［ステップＳ３８］受信データ判別部２１１は、受信パケットをＣＰＵ３１０に出力する。
以上の処理によれば、応答チャネルを通じてＧｅｔ要求パケットが受信されると、ネットワークＩ／Ｆ２００の処理により、メモリ３２０から指定されたデータが読み出され、Ｇｅｔ応答パケットが返信される。従って、ＣＰＵ３１０での他の演算処理に影響を与えることなく、Ｇｅｔ要求に対する応答処理を自動的に実行することができる。また、Ｇｅｔ応答パケットは応答チャネルを通じて送信されるので、前述したように、Ｇｅｔ要求パケットの伝送経路とＧｅｔ応答パケットの伝送経路とが一致する。このため、Ｇｅｔ応答パケットをより確実に要求元ノードに返信できるようになる。
【００８７】
さらに、Ｇｅｔ応答パケットの送信の際には、送信チャネルとして応答チャネルが指定されるとともに、その送信先とする隣接ノードとして送信元と同じノードが指定されればよい。このため、例えば、最適な通信プレーンを決定するなどの複雑な処理が必要とならない。従って、ネットワークＩ／Ｆ２００の回路規模や製造コストを抑制できる。
【００８８】
そして、このようなネットワークＩ／Ｆ２００をすべてのノードＮ１〜Ｎ１６に搭載することにより、ＲＤＭＡ通信時における耐故障性が向上した並列コンピュータを、回路規模や製造コストを増大させることなく実現することができる。
【００８９】
ところで、ネットワークＩ／Ｆ２００の出力回路２２０は、送信制御部２１３またはＣＰＵ３１０から入力されたパケットをルータ１００を介して送信できるか否かを管理する機能を備えている。そして、パケットの送信が不可能な場合には、ルータ１００に対して、ネットワークＩ／Ｆ２００の入力回路２１０へのパケットの入力を停止させることができる。
【００９０】
ここで、図８は、出力回路による送信可否の管理手順を示すフローチャートである。
［ステップＳ４１］出力回路２２０は、現在パケットの送信が可能であるか否かを判定する。送信が可能である場合には、ステップＳ４２の処理が実行され、送信が不可能である場合には、ステップＳ４３の処理が実行される。
【００９１】
［ステップＳ４２］出力回路２２０は、ルータ１００に対して、ネットワークＩ／Ｆ２００の入力回路２１０に対する新たなパケットの入力が可能であることを通知する。この状態では、隣接ノードから自ノード宛てのパケットが受信されたとき、そのパケットはルータ１００によってネットワークＩ／Ｆ２００の入力回路２１０に入力される。この後、ステップＳ４１の処理が再度実行される。
【００９２】
［ステップＳ４３］出力回路２２０は、ルータ１００に対して、ネットワークＩ／Ｆ２００の入力回路２１０に対する新たなパケットの入力が不可能であることを通知する。この状態では、隣接ノードから自ノード宛てのパケットが受信されたとき、ルータ１００はそのパケットをネットワークＩ／Ｆ２００の入力回路２１０に供給できなくなり、そのパケットが受信された仮想チャネルでの新たなパケットの受信動作が停止される。
【００９３】
なお、ステップＳ４１の処理は、例えば、出力回路２２０に入力されたパケットを、送信先として指定された仮想チャネルに出力するようにルータ１００に要求する際に実行される。この場合、送信先の仮想チャネルに対応する論理バッファに空きがないときに、パケットの送信が不可能であると判定される。
【００９４】
あるいは、ステップＳ４１の処理は、出力回路２２０に搭載された送信用パケットの出力キューにおいて、空きがあるか否かによって判定されてもよい。この場合、出力キューに空きがないときに、パケットの送信が不可能であると判定される。そして、出力キューの先頭データが、その送信先の仮想チャネルに対応する論理バッファに出力されると、出力キューに空きが生じ、パケットの送信が可能な状態に移行する。
【００９５】
ところで、図８に示した処理は、Ｇｅｔ要求パケットに対する応答時にも適用可能である。すなわち、Ｇｅｔ応答パケット送信が不可能な場合には、新たなＧｅｔ要求パケットを含む後続パケットの受信を停止させることができる。そして、このように後続パケットの受信を停止させても、デッドロックは発生しない。
【００９６】
例えば、Ｇｅｔ要求パケットとＧｅｔ応答パケットとが同じ仮想チャネルで送信されるネットワークでは、あるノードでＧｅｔ応答パケットの送信が不可能になったとき、そのノードで新たなＧｅｔ要求パケットの受信が停止されると、デッドロックが発生する。これは、同一の仮想チャネルにおいて、Ｇｅｔ応答パケットと後続のＧｅｔ要求パケットとを含むループが形成されてしまうからである。
【００９７】
このような事態を回避するためには、例えば、送信不可能になったＧｅｔ応答パケットを削除してしまう方法や、送信不可能になったＧｅｔ応答パケットもしくは後続のＧｅｔ要求パケットをメモリに蓄積する方法が考えられる。前者の方法では、Ｇｅｔ要求パケットの送信元ノードではその応答を受信できないので、送信元ノードでＧｅｔ要求パケットを再送信するための機能が必要になる。後者の方法では、ネットワークＩ／Ｆ２００にパケット蓄積のための大容量のメモリを搭載するか、あるいは、割り込みによりＧｅｔ応答パケットをＣＰＵ３１０に引き渡して、その後の送信処理を依頼する必要がある。
【００９８】
これに対して、本実施の形態では、Ｇｅｔ応答パケットはＧｅｔ要求パケットとは別の仮想チャネルを通じて送信されるので、後続パケットの受信停止に起因するデッドロックは発生しない。例えば、Ｇｅｔ応答パケットの送信先の応答チャネルにおいて送信が可能になれば、ネットワークＩ／Ｆ２００に対する後続パケットの受信が再開され、以後、Ｇｅｔ通信が正常に実行されることになる。従って、本実施の形態では、送信可否の管理処理が単純化され、ネットワークＩ／Ｆ２００の回路規模や製造コストを抑制することができる。
【００９９】
〔第２の実施の形態〕
図９は、第２の実施の形態に係る並列コンピュータの構成例を示す図である。
図９に示した並列コンピュータ１ａは、図１に示した並列コンピュータ１において、ノードＮ１３〜Ｎ１６を、データの入出力を担うＩ／Ｏ（In/Out）専用ノードとした構成を有している。図９において、ノードＮ１３ａ〜Ｎ１６ａには、例として、それぞれＨＤＤ（Hard Disk Drive）３４０が接続されている。なお、ノードＮ１３ａ〜Ｎ１６ａは、例えば、図３に示したノードＮ１０の構成において、バス３３０に対してさらにＨＤＤ３４０が接続された構成を有している。一方、図９において、ノードＮ１〜Ｎ１２は、計算ノードとなっている。そして、この並列コンピュータ１ａの各ノードＮ１〜Ｎ１２，Ｎ１３ａ〜Ｎ１６ａは、図１に示した並列コンピュータ１の各ノードＮ１〜Ｎ１６が備えるルーティング機能およびＲＤＭＡ通信の処理機能を備えている。
【０１００】
ところで、並列コンピュータ１ａの各ノードＮ１〜Ｎ１２，Ｎ１３ａ〜Ｎ１６ａでは、ＣＰＵ３１０により生成されたパケットを他のノードに送信する際には、その送信に用いる仮想チャネルを任意に選択できるようになっている。なお、この点は、上記の第１の実施の形態でも同様である。
【０１０１】
そこで、本実施の形態では、Ｉ／Ｏ専用ノードと計算ノードとの間のパケット送受信（ただし、ＲＤＭＡ通信用パケットを除く）では、送信と受信とで、次元オーダが異なる別の仮想チャネルを用いるようにする。例えば、計算ノードからＩ／Ｏ専用ノード宛てのパケット送信を要求チャネルを通じて行い、Ｉ／Ｏ専用ノードから計算ノード宛てのパケット送信を応答チャネルを通じて行うようにする。このような送信チャネルの選択は、各ノードのＣＰＵ３１０が、そのノードのメモリ３２０またはＨＤＤ３４０に記憶された個々のプログラムを実行することにより実現される。
【０１０２】
このような送信チャネルの選択処理により、パケットが通過する計算ノードの数を減らすことができる。例えば、図９において、ノードＮ５とノードＮ１５ａとの間の通信を考える。なお、ここでは例として、要求チャネルではｙ方向（図９中の縦方向）のルーティングが、応答チャネルではｘ方向（図９中の横方向）のルーティングが、それぞれ優先されるものとする。
【０１０３】
ノードＮ５からノードＮ１５ａに対してパケットを送信する場合には、例えば、要求チャネルを通じて、ノードＮ９，Ｎ１３ａ，Ｎ１４ａ，Ｎ１５ａの順にパケットが転送される。ここで、ノードＮ１５ａからノードＮ５に対するパケットの送信も、要求チャネルを通じて行われるものとすると、パケットはノードＮ１１，Ｎ７，Ｎ６，Ｎ５の順に転送される。この場合、パケットは３つの計算ノードを通過することになる。
【０１０４】
これに対して、Ｉ／Ｏ専用ノードから計算ノードへのパケット送信には応答チャネルを利用するものとすると、ノードＮ１５ａからのノードＮ５宛てのパケットは、ノードＮ１４ａ，Ｎ１３ａ，Ｎ９，Ｎ５の順に転送される。この場合、パケットが通過する計算ノードは、ノードＮ９の１つのみとなる。
【０１０５】
このように、パケットが通過する計算ノードの数を少なくすることで、計算ノードでの転送処理負荷が小さくなる。このため、計算ノードを起点としたパケット送信や、計算ノード宛てのパケットの受信、計算ノード間の通信などの処理負荷が軽減し、その結果、パケットの転送処理が計算ノードでの演算処理自体に与える影響も小さくなる。従って、並列コンピュータ１ａ全体での処理効率が高められる。
【０１０６】
〔第３の実施の形態〕
図１０は、第３の実施の形態に係る並列コンピュータの構成例を示す図である。
図１０に示す並列コンピュータ１ｂでは、例として１６のノードＮ２１〜Ｎ３６が、４×４の２次元トーラス状に接続され、これによりトーラスネットワークが構成されている。また、各ノードＮ２１〜Ｎ３６は、ｘ方向（図１３中の横方向）およびｙ方向（図１３中の縦方向）に隣接するノードとの間で、それぞれ少なくとも２種類の仮想チャネルによって接続されている。これらの仮想チャネルのうち、一方は要求チャネル、他方は応答チャネルである。各ノードＮ２１〜Ｎ３６では、前述の第１の実施の形態と同様、要求チャネルと応答チャネルとでは互いに逆順の次元オーダに従ってルーティングが行われる。
【０１０７】
ここで、トーラスネットワークでは、デッドロックを防止するために、同じ次元オーダに従ってルーティングされる仮想チャネルが少なくとも２つ設けられていることが望ましい。そこで、図１０に示す並列コンピュータ１ｂでは、隣接ノード間が２つの要求チャネルと２つの応答チャネルとによって接続されている。
【０１０８】
同じ種類の仮想チャネル間では、公知の処理手順によりパケットの送信チャネルが適宜切り替えられ、これによりデッドロックが回避される。すなわち、要求チャネルでは、パケットが一方の要求チャネルにおけるノード接続ループを超えてさらに転送される際に、パケットの送信先が他方の要求チャネルに切り替えらえる。応答チャネルでも同様に、パケットが一方の応答チャネルにおけるノード接続ループを超えてさらに転送される際に、パケットの送信先が他方の応答チャネルに切り替えられる。
【０１０９】
このような同一種類の仮想チャネル間の切り替えが行われること以外、各ノードＮ２１〜Ｎ３６でのルーティング機能は、前述の第１の実施の形態のノードＮ１〜Ｎ１６が備える機能と同じである。そして、各ノードＮ２１〜Ｎ３６は、第１の実施の形態のノードＮ１〜Ｎ１６と同様のＲＤＭＡ通信処理機能を備え、要求チャネルを通じて受信したＧｅｔ要求パケットに対して、応答チャネルを通じて自動的に応答できるようになっている。従って、各ノードＮ２１〜Ｎ３６の回路規模や製造コストを増大させることなく、Ｇｅｔ通信の際の耐故障性が向上する。
【０１１０】
さらに、各ノードＮ２１〜Ｎ３６では、図８に示したような処理手順により、パケット送信可否を管理することが可能である。また、図９の例のように、ノードの一部をＩ／Ｏ専用ノードとし、計算ノードからＩ／Ｏ専用ノードへのパケット送信と、Ｉ／Ｏ専用ノードから計算ノードへのパケット送信とを、別の種類の仮想チャネルを通じて行うようにすることも可能である。
【０１１１】
なお、以上の各実施の形態では、例として、２次元メッシュネットワークおよび２次元トーラスネットワークでの各ノードの処理について説明した。しかし、これに限らず、３次元以上のメッシュネットワークおよびトーラスネットワークでの各ノードにおいても、上記と同様なルーティング機能およびＲＤＭＡ通信の処理機能を搭載させることができる。
【０１１２】
また、上記の各ノードが有する機能の少なくとも一部は、コンピュータによって実現することができる。その場合には、その機能の処理内容を記述したプログラムが提供される。そして、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。
【０１１３】
プログラムを流通させる場合には、例えば、そのプログラムが記録された光ディスクなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、そのプログラムを、サーバコンピュータからネットワークを介して他のコンピュータに転送することもできる。
【０１１４】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、そのプログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【符号の説明】
【０１１５】
１  並列コンピュータ
１００  ルータ
１１０  入力回路
１１１，１１２，１２１，１２２  論理バッファ
１２０  出力回路
１３０  スイッチ回路
１４０  ルーティング制御部
２００  ネットワークＩ／Ｆ
２１０  入力回路
２１１  受信データ判別部
２１２  ＤＭＡ制御部
２１３  送信制御部
２２０  出力回路
３１０  ＣＰＵ
３２０  メモリ
３３０  バス
Ｎ１〜Ｎ１６  計算機ノード
【図１】
2010218364.tif 000003
【図２】
2010218364.tif 000004
【図３】
2010218364.tif 000005
【図４】
2010218364.tif 000006
【図５】
2010218364.tif 000007
【図６】
2010218364.tif 000008
【図７】
2010218364.tif 000009
【図８】
2010218364.tif 000010
【図９】
2010218364.tif 000011
【図１０】
2010218364.tif 000012
【図１１】
2010218364.tif 000013
【図１２】
2010218364.tif 000014
【図１３】
2010218364.tif 000015
【図１４】
2010218364.tif 000016