(57)【特許請求の範囲】
【請求項１】
階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第１のデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路を特定するように、前記第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップと、
を、前記コンピュータ又は前記ネットワークに接続されている管理コンピュータに実行させ、
前記選択ステップが、
接続されている最下層の中継装置毎に前記選択コンピュータをグループ化し、当該グループに含まれる前記選択コンピュータの数の大きい順に前記グループをソートし、ソート後の順番で前記グループに含まれる前記選択コンピュータに対してシリアルに識別番号を付与するステップ
を含むプログラム。
【請求項２】
階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第１のデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路を特定するように、前記第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップと、
を、前記コンピュータ又は前記ネットワークに接続されている管理コンピュータに実行させ、
前記ネットワーク識別子が、前記ネットワークに含まれる最上層の中継装置毎に設けられ、
前記選択ステップが、
前記選択コンピュータのうち送信元の選択コンピュータと送信先の選択コンピュータとの組み合わせ毎に、経由する最上層の中継装置の識別子を登録するための第１のテーブルに、前記送信元の選択コンピュータのローカル識別子を前記最上層の中継装置の数で除した値の剰余を前記最上層の中継装置の識別子として設定するステップと、
前記第１のテーブルを、前記送信元の選択コンピュータと前記差との組み合わせの第２のテーブルに変換するステップと、
前記第２のテーブルから、前記差が等しい前記選択コンピュータ間の通信経路で経由する前記最上層の中継装置の重複を検出し、当該重複を検出した場合には当該重複を解消するように前記第２のテーブルを更新するステップと、
前記第２のテーブルを前記第１のテーブルの形式を有する第３のテーブルに変換するステップと、
前記第３のテーブルにおいて前記最上層の中継装置の識別子を前記送信先の選択コンピュータに対応付けられているネットワーク識別子に変換するステップと、
を含むプログラム。
【請求項３】
階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第１のデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路における前記第１の階層に含まれる中継装置と前記第２の階層に含まれる中継装置とのパスの重複を探索し、当該重複を検出した場合には一方の通信経路における前記第２の階層に含まれる中継装置を変更し、前記第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップと、
を、前記コンピュータ又は前記ネットワークに接続されている管理コンピュータに実行させるプログラム。
【請求項４】
階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第１のデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路を特定するように、前記第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップと、
を含み、前記コンピュータ又は前記ネットワークに接続されている管理コンピュータに実行され、
前記選択ステップが、
接続されている最下層の中継装置毎に前記選択コンピュータをグループ化し、当該グループに含まれる前記選択コンピュータの数の大きい順に前記グループをソートし、ソート後の順番で前記グループに含まれる前記選択コンピュータに対してシリアルに識別番号を付与するステップ
を含む情報処理方法。
【請求項５】
階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第１のデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路を特定するように、前記第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップと、
を含み、前記コンピュータ又は前記ネットワークに接続されている管理コンピュータに実行され、
前記ネットワーク識別子が、前記ネットワークに含まれる最上層の中継装置毎に設けられ、
前記選択ステップが、
前記選択コンピュータのうち送信元の選択コンピュータと送信先の選択コンピュータとの組み合わせ毎に、経由する最上層の中継装置の識別子を登録するための第１のテーブルに、前記送信元の選択コンピュータのローカル識別子を前記最上層の中継装置の数で除した値の剰余を前記最上層の中継装置の識別子として設定するステップと、
前記第１のテーブルを、前記送信元の選択コンピュータと前記差との組み合わせの第２のテーブルに変換するステップと、
前記第２のテーブルから、前記差が等しい前記選択コンピュータ間の通信経路で経由する前記最上層の中継装置の重複を検出し、当該重複を検出した場合には当該重複を解消するように前記第２のテーブルを更新するステップと、
前記第２のテーブルを前記第１のテーブルの形式を有する第３のテーブルに変換するステップと、
前記第３のテーブルにおいて前記最上層の中継装置の識別子を前記送信先の選択コンピュータに対応付けられているネットワーク識別子に変換するステップと、
を含む情報処理方法。
【請求項６】
階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第１のデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路における前記第１の階層に含まれる中継装置と前記第２の階層に含まれる中継装置とのパスの重複を探索し、当該重複を検出した場合には一方の通信経路における前記第２の階層に含まれる中継装置を変更し、前記第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップと、
を含み、前記コンピュータ又は前記ネットワークに接続されている管理コンピュータに実行される情報処理方法。
【請求項７】
階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第１のデータを格納するデータ格納部と、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路を特定するように、前記第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する処理部と、
を有し、
前記処理部が、
接続されている最下層の中継装置毎に前記選択コンピュータをグループ化し、当該グループに含まれる前記選択コンピュータの数の大きい順に前記グループをソートし、ソート後の順番で前記グループに含まれる前記選択コンピュータに対してシリアルに識別番号を付与する
情報処理装置。
【請求項８】
階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第１のデータを格納するデータ格納部と、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路を特定するように、前記第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する処理部と、
を有し、
前記ネットワーク識別子が、前記ネットワークに含まれる最上層の中継装置毎に設けられ、
前記処理部が、
前記選択コンピュータのうち送信元の選択コンピュータと送信先の選択コンピュータとの組み合わせ毎に、経由する最上層の中継装置の識別子を登録するための第１のテーブルに、前記送信元の選択コンピュータのローカル識別子を前記最上層の中継装置の数で除した値の剰余を前記最上層の中継装置の識別子として設定し、
前記第１のテーブルを、前記送信元の選択コンピュータと前記差との組み合わせの第２のテーブルに変換し、
前記第２のテーブルから、前記差が等しい前記選択コンピュータ間の通信経路で経由する前記最上層の中継装置の重複を検出し、当該重複を検出した場合には当該重複を解消するように前記第２のテーブルを更新し、
前記第２のテーブルを前記第１のテーブルの形式を有する第３のテーブルに変換し、
前記第３のテーブルにおいて前記最上層の中継装置の識別子を前記送信先の選択コンピュータに対応付けられているネットワーク識別子に変換する
情報処理装置。
【請求項９】
階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第１のデータを格納するデータ格納部と、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路における前記第１の階層に含まれる中継装置と前記第２の階層に含まれる中継装置とのパスの重複を探索し、当該重複を検出した場合には一方の通信経路における前記第２の階層に含まれる中継装置を変更し、前記第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する処理部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、階層化された複数の中継装置を備えたネットワークにおける通信制御技術に関する。
【背景技術】
【０００２】
近年、複数のコンピュータを高速ネットワークなどで接続してクラスタを構築し、ＨＰＣ（High Performance Computing）システムの実現が図られている。このクラスタシステムで並列処理プログラムを実行する場合には、並列プロセスを複数のコンピュータに分散して起動させる。そのため、並列プロセス間でデータ交換を行う場合には、コンピュータ間で通信を行うことになる。従って、コンピュータ間通信の性能が、クラスタシステムに影響を及ぼす。
【０００３】
コンピュータ間通信の性能を向上させるためには、例えばInfiniBandやMyrinet等の高性能ネットワークや、この高性能ネットワークを使いこなす通信ライブラリの影響を考慮する。クラスタシステム上では、ＭＰＩ（Message Passing Interface）と呼ばれる通信ＡＰＩ（Application Program Interface）で記述された並列処理プログラムが実行されることが多い。そのため、ＭＰＩ仕様に基づく様々な通信ライブラリが提供されている。
【０００４】
例えば図１に示すように、プロセス０乃至Ｎ−１が、Ｎ個のコンピュータ上に分散して起動された場合、並列処理プログラムで規定されている計算処理の合間に、データ交換のためのプロセス間通信が行われることが多い。図１では起動された全てのプロセス間で通信を行う例を示しているが、特定のプロセス間で一対一通信を行う場合もある。プロセス間通信ではＭＰＩライブラリの該当サブルーチンを呼び出して通信を行うことになる。
【０００５】
並列処理プログラムにおけるプロセス間通信のパターンはプログラム次第であり多種多様である。その中でも、図１に示したように起動された全ての並列プロセス間でデータ交換を行う通信パターンである全対全（All−to−All）は、着目される通信パターンの１つとされている。そこで、ＭＰＩ仕様でも、MPI_Alltoall()というサブルーチンで全対全通信を実現することが求められている。全対全通信を実現するアルゴリズムは様々存在するが、比較的データサイズが大きく且つネットワークの帯域幅で性能が律速されるケースでは、リング（Ring）アルゴリズムが使われることが多い。 
【０００６】
リングアルゴリズムについて図２Ａ乃至図２Ｈを用いて説明する。図２Ａに示すように、プロセス０からプロセス７までの８つのプロセスが起動された場合を考える。このような場合、まず、図２Ｂに示すように、各プロセスは、プロセス番号が１つ前のプロセスからデータを受信し、プロセス番号が１つ後のプロセスへデータを送信する。なお、プロセス番号「７」の後のプロセスはプロセス番号「０」のプロセスであり、プロセス番号「０」の前のプロセスはプロセス番号「７」のプロセスとする。
【０００７】
そして、図２Ｃに示すように、各プロセスは、プロセス番号が２つ前のプロセスからデータを受信し、プロセス番号が２つ後のプロセスへデータを送信する。さらに、図２Ｄに示すように、各プロセスは、プロセス番号が３つ前のプロセスからデータを受信し、プロセス番号が３つ後のプロセスへデータを送信する。また、図２Ｅに示すように、各プロセスは、プロセス番号が４つ前のプロセスからデータを受信し、プロセス番号が４つ後のプロセスへデータを送信する。さらに、図２Ｆに示すように、各プロセスは、プロセス番号が５つ前のプロセスからデータを受信し、プロセス番号が５つ後のプロセスへデータを送信する。また、図２Ｇに示すように、各プロセスは、プロセス番号が６つ前のプロセスからデータを受信し、プロセス番号が６つ後のプロセスへデータを送信する。さらに、図２Ｈに示すように、各プロセスは、プロセス番号が７つ前のプロセスからデータを受信し、プロセス番号が７つ後のプロセスへデータを送信する。
【０００８】
リングアルゴリズムを採用する場合には、以下で述べるような問題のあるネットワーク構成でなければ、効率よく全対全通信を行うことができる。
【０００９】
次に、ネットワーク構成について考察する。図３に示すように、使用されるコンピュータの数が少ない場合には、１つのネットワークスイッチＳＷ（以下、スイッチと略する）によってそれらのコンピュータを接続することができる。すなわち、８つのコンピュータが１つのスイッチに接続されており、各コンピュータに１つのプロセスが起動されている。このような場合にはクロスバー接続と等価であり、起動されているプロセス間で全対全通信を行っても、ネットワークリンクで競合が発生することはない。
【００１０】
一方、使用されるコンピュータの数が１つのスイッチで接続可能な数を超えると、スイッチを多段にしたネットワーク構成となる。シンプルな多段スイッチ構成のネットワーク構成は図４に示すようなツリー（Ｔｒｅｅ）ネットワークである。図４では、説明の都合上、コンピュータの数及び起動されるプロセスの数は図３の例と同じであるが、スイッチＳＷのポート数が８未満であるものとしている。また、図２Ｅにおいてプロセス０乃至３がデータを送信している場面における通信状態を示している。スイッチを２段にして上位スイッチの数を最小である「１」に抑えているため、上位スイッチと下位スイッチとの間のリンクの帯域が不足している。よって、８つのプロセスで全対全通信を行おうとすると、図４で丸で示したように、上位スイッチと下位スイッチとの間のリンクで競合が発生して、スループットが低下する。
【００１１】
そのため、ネットワーク性能を重視する場合には、ファットツリー（FatTree）ネットワークを採用する場合が多い。図５の例では、上位スイッチ（ＳＷ）を３つに増加させ、下位スイッチから上位スイッチへのリンク（アップリンクとも呼ぶ）の数を、下位スイッチからコンピュータへのリンク（ダウンリンクとも呼ぶ）の数に一致させている。なお、図５において下位スイッチに接続されている単なる四角はコンピュータを示しており、四角の中の括弧付き数字はコンピュータの識別子を表している。また、丸はプロセスを表しており、丸の中の数字はプロセス識別子を表している。図５では、コンピュータ「３」乃至「１１」にプロセス「０」乃至「８」が起動されている状態を表している。さらに、図５の状態では、各コンピュータには四角の下に示されている数字で表される上位スイッチが割り当てられている。例えば、プロセス０が起動されているコンピュータ３には上位スイッチ０が割り当てられており、コンピュータ３へデータを送信する場合には、データは上位スイッチ０を経由してコンピュータ３に到達する。また、コンピュータ１７には上位スイッチ２が割り当てられており、コンピュータ１７へデータを送信する場合には、データは上位スイッチ２を経由してコンピュータ１７に到達する。
【００１２】
そして、３つのプロセス０乃至２が自プロセス番号に３を加算した番号のプロセス３乃至５にデータをそれぞれ送信する場合を考える。この場合、プロセス３に割り当てられている上位スイッチ０を経由してプロセス０からデータ送信が行われ、プロセス４に割り当てられている上位スイッチ１を経由してプロセス１からデータ送信が行われ、プロセス５に割り当てられている上位スイッチ２を経由してプロセス２からデータ送信が行われる。このようにすれば、リンク競合が発生することはない。
【００１３】
しかし、上で述べたInfiniBandのようなパケット転送経路を動的に変更できないネットワーク（すなわち静的ルーティングネットワーク）では、上位スイッチと下位スイッチ間の特定のリンクに通信が集中することがある。図６は、その一例を示したものである。図６の例では１６台のコンピュータが、上位スイッチ４台と下位スイッチ４台のファットツリーネットワークに接続されている。一般に、ＨＰＣシステムにおいては、各コンピュータの稼働状況などに応じて使用するコンピュータが選択されて、この選択コンピュータにおいてプロセスが起動される。しかしながら、選択コンピュータの組合せにより、各コンピュータに送出するパケットが経由する上位スイッチに、偏りが生じる可能性がある。
【００１４】
図６の例では、プロセス「０」「４」「６」「７」が起動されたコンピュータへのデータ送信は上位スイッチ「０」を経由するように設定されている。プロセス「１」「５」が起動されたコンピュータへのデータ送信は上位スイッチ「１」を経由するように設定されている。プロセス「２」が起動されたコンピュータへのデータ送信は上位スイッチ「２」を経由するように設定されている。プロセス「３」が起動されたコンピュータへのデータ送信は上位スイッチ「３」を経由するように設定されている。そうすると、図２Ｅにおいてプロセス０乃至３が起動されているコンピュータがデータを送信している場面では、図６に示すように、プロセス「１」が起動されたコンピュータからプロセス「５」が起動されたコンピュータへのデータ通信以外は、上位スイッチ「０」へのアップリンクが用いられるので、丸で示したリンクで競合が発生してしまう。
【００１５】
このように、ファットツリーネットワークを採用した場合においても、特定のリンクに通信負荷が集中して、通信性能が低下するという状況が生じ得る。これは、InfiniBandのような静的ルーティングネットワークを採用する場合に生じ得る。すなわち、ネットワークにおいてルーティングに用いられるネットワーク識別子（InfiniBandではＬＩＤと呼ぶ）が１つだけコンピュータに割り当てられ、各スイッチではこのネットワーク識別子とパケット転送先ポートとの対応付けが固定的である場合に問題となる。具体的には、図６の最下段に示すように、最も左のコンピュータのＬＩＤは「１」となっており、このコンピュータ宛のパケットは、上位スイッチ「０」を経由することが固定的である。同様に、最も右のコンピュータのＬＩＤは「１６」となっており、このコンピュータ宛のパケットは、上位スイッチ「３」を経由することが固定的である。
【００１６】
さらに、上でも述べたように、並列プロセスを起動するコンピュータの選択は、コンピュータに割り当てられているＬＩＤの経路設定との関係を考慮せずに行われているため、データ送信時の通信経路（ここでは、データ送信時に経由する上位スイッチ）に偏りが生じてしまう場合がある。
【００１７】
なお、リンク競合が発生しやすい例として上では全対全通信を一例として説明したが、図６に示したようなコンピュータが選択されてプロセスが起動されてしまうと、そのほかの場面（例えば一対一通信を複数のプロセス組み合わせで同時に行う場合など）でも上位スイッチ「０」を経由するようなデータ通信が発生しやすくなり、結果としてリンク競合が発生する可能性も増加している。
【００１８】
このような問題を解決するために、各々上位スイッチに対応付けられた複数のＬＩＤを、コンピュータの各々に割り当てておき、並列プロセスを起動するコンピュータで上位スイッチが重ならないように、動的にＬＩＤを選択するような方式も提案されている。図７に例を示す。
【００１９】
図７では、３つの上位スイッチと、６つの下位スイッチとを含むファットツリーネットワークを示しており、下位スイッチ０乃至５には合計１８台のコンピュータが接続されている。ここで、各コンピュータには、上位スイッチＡを経由する通信経路のためのＬＩＤと、上位スイッチＢを経由する通信経路のためのＬＩＤと、上位スイッチＣを経由する通信経路のためのＬＩＤとが割り当てられている。図７の下段には、例えばコンピュータ「０」については、上位スイッチＡ（「Ａ」は括弧内に示されている）を経由する通信経路のためのＬＩＤ「４」と、上位スイッチＢを経由する通信経路のためのＬＩＤ「５」と、上位スイッチＣを経由する通信経路のためのＬＩＤ「６」とが割り当てられている。同様に、コンピュータ「１０」（コンピュータ「１１」の１つ左側のコンピュータ）には、上位スイッチＡを経由する通信経路のためのＬＩＤ「４４」と、上位スイッチＢを経由する通信経路のためのＬＩＤ「４５」と、上位スイッチＣを経由する通信経路のためのＬＩＤ「４６」とが割り当てられている。
【００２０】
このような状態で、図７の下段において点線で囲んでいるように、プロセス「０」が起動されるコンピュータ「３」でＬＩＤ「１６」を使用し、プロセス「１」が起動されるコンピュータ「４」でＬＩＤ「２１」を使用し、プロセス「２」が起動されるコンピュータ「５」でＬＩＤ「２６」を使用し、プロセス「３」が起動するコンピュータ「６」でＬＩＤ「２８」を使用し、プロセス「４」が起動するコンピュータ「７」でＬＩＤ「３３」を使用し、プロセス「５」が起動するコンピュータ「８」でＬＩＤ「３８」を使用し、プロセス「６」が起動するコンピュータ「９」でＬＩＤ「４０」を使用し、プロセス「７」が起動するコンピュータ「１０」でＬＩＤ「４５」を使用するものとする。このようにすれば、対応付けられている上位スイッチに偏りを生じないようにＬＩＤが選択される。このようなＬＩＤの選択方法を採用する場合には、プロセスが起動されるコンピュータの数が、使用する上位スイッチの数の倍数の場合には有効であるが、必ずしもこのような条件が満たされるわけではない。
【００２１】
例えば、図７に具体的に示すように、上位スイッチが３つあるのに対して、起動されるプロセスが８つで上記条件を満たさない場合を考察する。このような場合に、プロセス「３」乃至「５」が、番号で３つ先のプロセス「６」「７」「０」（プロセス「０」はプロセス「８」がないために選択される）にデータを送信しようとする。そうすると、プロセス「３」乃至「５」が起動されているコンピュータ「６」乃至「８」が接続されている下位スイッチ２が同じであり、さらにプロセス「３」の送信先であるプロセス「６」のＬＩＤ「４０」とプロセス「５」の送信先であるプロセス「０」のＬＩＤ「１６」とが共に上位スイッチ「Ａ」に対応付けられているため、リンク衝突が発生してしまう。
【００２２】
このような問題に着目している従来技術は存在していない。
【先行技術文献】
【非特許文献】
【００２３】
【非特許文献１】成瀬彰、中島耕太、住元真司、久門耕一、「多段スイッチInfiniBandネットワークにおける全対全通信性能の評価」、情報処理学会研究報告、２０１０年８月３日発表
【発明の概要】
【発明が解決しようとする課題】
【００２４】
本技術の目的は、一側面においては、リンク競合を回避するための技術を提供することである。
【課題を解決するための手段】
【００２５】
第１の態様に係る方法は、（Ａ）階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第１のデータを取得するステップと、（Ｂ）複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、ネットワークにおける通信経路毎のネットワーク識別子から、選択コンピュータを順序づけるための識別番号間の差が等しい選択コンピュータ間の通信経路の重複を避けるように、第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップとを含む。
【００２６】
第２の態様に係る方法は、第１のスイッチ群と、該第１のスイッチ群に接続された第２のスイッチ群と、第１のスイッチ群に含まれる複数のスイッチに接続された複数のノードとを備え、通信に用いるアドレスに応じて異なる通信経路を辿り得る通信システムにおける通信方法であって、複数のノードは、複数のノードがリング状に所定の順で配置された場合に通信を行うノード間に介在するノード数が第１の数となる通信相手関係で通信を行う第１の状態から、通信を行うノード間に介在するノード数が第２の数となる通信相手関係で通信を行う第２の状態に切り替える制御を行う。複数のノードは、第１の状態では、複数のノードに対して第１のパターンで割り当てられた第１のアドレス群を用いて通信を行う。第２の状態では、複数のノードに対して該第１のパターンとは異なる第２のパターンで割り当てられた第２のアドレス群を用いて通信を行うように、通信に用いるアドレスを切り替える制御を行う。
【発明の効果】
【００２７】
リンク競合の回避を図ることができる。
【図面の簡単な説明】
【００２８】
【図１】図１は、プロセス間通信を説明するための図である。
【図２Ａ】図２Ａは、リングアルゴリズムを説明するための図である。
【図２Ｂ】図２Ｂは、リングアルゴリズムを説明するための図である。
【図２Ｃ】図２Ｃは、リングアルゴリズムを説明するための図である。
【図２Ｄ】図２Ｄは、リングアルゴリズムを説明するための図である。
【図２Ｅ】図２Ｅは、リングアルゴリズムを説明するための図である。
【図２Ｆ】図２Ｆは、リングアルゴリズムを説明するための図である。
【図２Ｇ】図２Ｇは、リングアルゴリズムを説明するための図である。
【図２Ｈ】図２Ｈは、リングアルゴリズムを説明するための図である。
【図３】図３は、ネットワーク構成の一例を示す図である。
【図４】図４は、ネットワーク構成の一例を示す図である。
【図５】図５は、ファットツリーネットワークにおける全対全通信を説明するための図である。
【図６】図６は、ファットツリーネットワークにおいてリンク競合が発生する場合の例を示す図である。
【図７】図７は、従来技術の問題を説明するための図である。
【図８】図８は、第１の実施の形態における多段マルチパスネットワークの一例を示す図である。
【図９】図９は、第１の実施の形態に係るＬＩＤファイルの一例を示す図である。
【図１０】図１０は、第１の実施の形態におけるシステムの一例を示す図である。
【図１１】図１１は、第１の実施の形態に係るシステムの動作を説明するための図である。
【図１２】図１２は、第１の実施の形態に係るホストファイルの一例を示す図である。
【図１３】図１３は、第１の実施の形態におけるシステムの動作を説明するための図である。
【図１４】図１４は、第１の実施の形態に係る対応表の一例を示す図である。
【図１５】図１５は、第１の実施の形態において並列プロセスが起動されたコンピュータの構成を説明するための図である。
【図１６】図１６は、第１の実施の形態において並列プロセスが起動されたコンピュータの動作を説明するための図である。
【図１７Ａ】図１７Ａは、第１の実施の形態に係る初期処理部の動作を説明するための図である。
【図１７Ｂ】図１７Ｂは、第１の実施の形態に係るローカルコンピュータ番号の付与を説明するための図である。
【図１７Ｃ】図１７Ｃは、第１の実施の形態に係るシフト距離テーブルの一例を示す図である。
【図１７Ｄ】図１７Ｄは、第１の実施の形態に係るシフト距離テーブルの一例を示す図である。
【図１７Ｅ】図１７Ｅは、第１の実施の形態に係るシフト距離テーブルの一例を示す図である。
【図１７Ｆ】図１７Ｆは、第１の実施の形態に係るシフト距離テーブルの一例を示す図である。
【図１７Ｇ】図１７Ｇは、第１の実施の形態に係る第２対応表の一例を示す図である。
【図１８】図１８は、第２の実施の形態における多段マルチパスネットワークの一例を示す図である。
【図１９】図１９は、第２の実施の形態に係るＬＩＤファイルの一例を示す図である。
【図２０】図２０は、第２の実施の形態におけるシステムの一例を示す図である。
【図２１】図２１は、第２の実施の形態に係るシステムの動作を説明するための図である。
【図２２】図２２は、第２の実施の形態に係るホストファイルの一例を示す図である。
【図２３】図２３は、第２の実施の形態におけるシステムの動作を説明するための図である。
【図２４】図２４は、第２の実施の形態に係る対応表の一例を示す図である。
【図２５】図２５は、第２の実施の形態において並列プロセスが起動されたコンピュータの構成を説明するための図である。
【図２６】図２６は、第２の実施の形態において並列プロセスが起動されたコンピュータの動作を説明するための図である。
【図２７】図２７は、第２の実施の形態に係る初期処理部の動作を説明するための図である。
【図２８】図２８は、第２の実施の形態に係るローカルコンピュータ番号の付与を説明するための図である。
【図２９】図２９は、第２の実施の形態に係る初期上位スイッチテーブルの一例を示す図である。
【図３０】図３０は、第２の実施の形態に係るシフト距離テーブルの一例を示す図である。
【図３１】図３１は、テーブル処理の処理フローを示す図である。
【図３２】図３２は、シフト距離テーブル更新処理の処理フローを示す図である。
【図３３】図３３は、初期化処理の処理フローを示す図である。
【図３４】図３４は、パス確定処理の処理フローを示す図である。
【図３５】図３５は、パス確定処理の処理フローを示す図である。
【図３６】図３６は、通信経路重複を回避する処理を説明するための図である。
【図３７】図３７は、シフト距離テーブルの一例を示す図である。
【図３８】図３８は、更新後のシフト距離テーブルの一例を示す図である。
【図３９】図３９は、最終上位スイッチテーブルの一例を示す図である。
【図４０】図４０は、第２の実施の形態に係る第２対応表を示す図である。
【図４１】図４１は、第２の実施の形態に係るＬＩＤの割当状態を説明するための図である。
【図４２】図４２は、第２の実施の形態に係るＬＩＤの割当状態を説明するための図である。
【図４３】図４３は、第２の実施の形態の効果を説明するための図である。
【図４４】図４４は、第２の実施の形態の効果を説明するための図である。
【図４５】図４５は、第２の実施の形態の効果を説明するための図である。
【図４６】図４６は、他の実施の形態におけるシステムの一例を示す図である。
【図４７】図４７は、他の実施の形態におけるシステムの動作を説明するための図である。
【図４８】図４８は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００２９】
［実施の形態１］
本技術の一実施の形態に係る多段（２段以上）マルチパスネットワークの例を図８に示す。この例では、２階層以上に階層化された中継装置のうち下層の各中継装置から１つ上層の複数の中継装置にパスが設けられているネットワークを１例として挙げている。図８では、３つの上位スイッチと、６つの下位スイッチとで、１８台のコンピュータcomp00乃至comp17を接続する例を示している。下位スイッチ０乃至５のそれぞれは、上位スイッチＡ乃至Ｃに接続されている。すなわち、ある下位スイッチから他の下位スイッチへの通信経路は３重化されている。具体的には、上位スイッチＡを経由する通信経路、上位スイッチＢを経由する通信経路、及び上位スイッチＣを経由する通信経路が存在する。本実施の形態では、各コンピュータには、このような３つの通信経路に対応して３つのネットワーク識別子（以下では、InfiniBandについて説明するものとしてＬＩＤと呼ぶことにする）が予め割り当てられている。
【００３０】
具体的には図８において各コンピュータcomp00乃至comp17の下に、割り当てられたＬＩＤ及び通信経路（ここでは上位スイッチの識別子）とが示されている。例えば、コンピュータcomp00には、上位スイッチＡを経由する通信経路についてのＬＩＤ「４」と、上位スイッチＢを経由する通信経路についてのＬＩＤ「５」と、上位スイッチＣを経由する通信経路についてのＬＩＤ「６」とが割り当てられている。また、コンピュータcomp１７には、上位スイッチＡを経由する通信経路についてのＬＩＤ「７２」と、上位スイッチＢを経由する通信経路についてのＬＩＤ「７３」と、上位スイッチＣを経由する通信経路についてのＬＩＤ「７４」とが割り当てられている。
【００３１】
各コンピュータは、以下で述べるように、ＬＩＤを用いて並列プロセス間の通信を行う。
【００３２】
上位スイッチ及び下位スイッチの各々は、これらの各ＬＩＤについて対応する出力ポート番号を特定できるようになっている。このような多段マルチパスネットワークにおいて送信されるパケットのヘッダには、宛先コンピュータのＬＩＤが設定されており、各スイッチでは、このＬＩＤから、受信パケットをいずれの出力ポートに転送すべきかを特定できるようになっている。
【００３３】
例えば、下位スイッチ５が、宛先コンピュータのＬＩＤが「４」となっているパケットを受信した場合には、当該パケットを上位スイッチＡに転送する。同じように、下位スイッチ５が、宛先コンピュータのＬＩＤが「５」となっているパケットを受信した場合には、当該パケットを上位スイッチＢに転送する。また、下位スイッチ５が、宛先コンピュータのＬＩＤが「６」となっているパケットを受信した場合には、当該パケットを上位スイッチＣに転送する。このようなパケットは、全てコンピュータcomp00宛のパケットであるが、上で述べたように経由する上位スイッチは異なっている。
【００３４】
本実施の形態では、このような設定を表すＬＩＤファイルを、各コンピュータ又は後に述べる共有ストレージに保持するものとする。図８に示した設定に対応するＬＩＤファイルの一例を図９に示す。図９の例では、ＬＩＤファイルには、第１行にＬＩＤファイルである旨のデータが含まれ、第２行に上位スイッチの数「３」（すなわち、通信経路の数）が含まれている。第３行目以降に、各コンピュータの識別子と、割り当てられている３つのＬＩＤとの対応付けが含まれている。本実施の形態では、左から、上位スイッチＡを経由する通信経路についてのＬＩＤ、上位スイッチＢを経由する通信経路についてのＬＩＤ、上位スイッチＣを経由する通信経路についてのＬＩＤが並べられている。このような並べ方に限定されるものではないが、各コンピュータについて、同じ並べ方を採用する。
【００３５】
次に、図１０を用いて、図８に示した多段マルチパスネットワークを含むシステムの構成例を説明する。図１０においては、図８に示した上位スイッチＡ乃至Ｃ及び下位スイッチ０乃至５は明示していないが、コンピュータcomp00乃至comp17が接続されているネットワーク１０に含まれているものとする。このネットワーク１０には、スケジューリングサーバ１１と、起動サーバ１２と、ネットワーク１０に接続されているコンピュータにより用いられる共有ストレージ１３とが接続されている。
【００３６】
スケジューリングサーバ１１は、コンピュータcomp00乃至comp17の稼働状況を把握し、次に起動すべき並列プロセス及び当該並列プロセスの起動先のコンピュータを決定し、当該並列プロセスを起動するように起動サーバ１２に指示する。起動サーバ１２は、スケジューリングサーバ１１からの指示に応じて、並列プロセスを、指定されたコンピュータ上に起動する。
【００３７】
図１０では、起動サーバ１２は、スケジューリングサーバ１１とは別のコンピュータとして示されているが、スケジューリングサーバ１１と物理的に同じサーバである場合もある。さらに、以下で述べるホストファイル（Hostfile）に記載されている先頭のコンピュータが起動サーバとして動作する場合もある。
【００３８】
以下では、図１０に示したようなシステムにおいて、８台のコンピュータに、８つの並列プロセスを起動する場合について説明する。本実施の形態では、並列プロセスはそれぞれ別のコンピュータ上に起動されるものとする。
【００３９】
このような具体例について図１１乃至図１７Ｇを用いて図１０に示したシステムの動作を説明する。まず、スケジューリングサーバ１１は、コンピュータcomp00乃至comp17の稼働状況から、使用するコンピュータを選択する（ステップ（１））。例えば、コンピュータcomp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14を選択する。そして、スケジューリングサーバ１１は、選択されたコンピュータの識別子（例えばコンピュータ名）を列挙したホストファイル（Hostfile）を生成し、共有ストレージ１３に格納する（ステップ（２））。ホストファイルは、例えば図１２に示すようなファイルである。図１２で示すように、ステップ（１）で選択された８つのコンピュータの識別子が含まれる。
【００４０】
そして、スケジューリングサーバ１１は、起動サーバ１２に対して、ホストファイルに列挙されているコンピュータ上に並列プロセスを起動するように指示する（ステップ（３））。ホストファイルについて、共有ストレージ１３の格納場所を指定するようにしても良いし、実際にホストファイルを送信するようにしても良い。
【００４１】
その後、図１３の処理に移行して、起動サーバ１２は、例えば共有ストレージ１３に格納されているホストファイルを取得し（ステップ（４））、ホストファイルに定義されている起動先のコンピュータcomp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14を特定する（ステップ（５））。そして、起動サーバ１２は、起動先のコンピュータcomp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14上に、並列プロセスを起動する（ステップ（６））。この際、起動サーバ１２は、同一のジョブについて起動されたプロセスの識別子と当該プロセスが起動された起動先コンピュータの識別子とを対応付ける対応表を生成し、共有ストレージ１３に格納して格納場所を通知するか、対応表を起動先コンピュータに送信する。起動先コンピュータには、さらにそのコンピュータ上で起動されるプロセスの識別子も通知する。各起動先コンピュータは、起動サーバ１２又は共有ストレージ１３から、対応表を取得し、自コンピュータで起動されるプロセスの識別子も取得する。
【００４２】
図１４に、対応表の一例を示す。図１４の例では、プロセス識別子（Proc0，Proc1，Proc2，Proc3，Proc4，Proc5，Proc6，Proc7。但し、「Ｐｒｏｃ」部分は分かりやすくするための添え字であり、０乃至７が識別子であるとする。）に対応付けて起動先コンピュータの識別子（comp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14）が登録されている。
【００４３】
次に、図１５乃至図１７Ｇを用いて、起動先コンピュータについて説明する。図１５は、起動先コンピュータ１００の機能構成を模式的に示した図であり、起動サーバ１２によって、起動先コンピュータ１００では、動的に並列プロセス１１０が起動される。この並列プロセス１１０の処理に関連するデータについてはデータ格納領域１３０に格納される。このデータ格納領域１３０には、ネットワーク１００の構造に関するデータも含まれる。すなわち、上位スイッチと下位スイッチの接続関係、下位スイッチに接続されているコンピュータの識別子などがデータ格納領域１３０には格納されているものとする。
【００４４】
また、起動先コンピュータ１００には通信ライブラリ１２０も用意されている。通信ライブラリ１２０は、例えばＭＰＩ仕様に従ったライブラリであり、MPI_Initサブルーチンに相当する初期処理部１２１と、MPI_AlltoAllサブルーチンに相当する全対全通信部１２３とを含む。並列プロセス１１０は、初期処理部１２１を呼び出してプロセス間通信を行うための初期処理を実施させ、全対全通信を行う場合には全対全通信部１２３を呼び出して同じジョブについて起動された全ての並列プロセス間で全対全通信を行わせる。通信ライブラリ１２０の初期処理部１２１及び全対全通信部１２３は、場合によってはデータ格納領域１３０に格納されているデータを用いて処理を行う。なお、通信ライブラリ１２０には、他のサブルーチンも含まれるが、ここでは本実施の形態に関係するもののみを示している。
【００４５】
次に、図１６及び図１７を用いて、具体的な処理について説明する。まず、起動された並列プロセス１１０は、通信ライブラリ１２０の初期処理部１２１を呼び出す（図１６：ステップＳ１）。初期処理部１２１は、呼び出されると、図１７Ａに示すような処理を実施する。
【００４６】
初期処理部１２１は、対応表を取得する（図１７Ａ：ステップＳ１１）。データ格納領域１３０に対応表が格納されている場合には、当該データ格納領域１３０から読み込み、共有ストレージ１３に対応表が格納されている場合には、共有ストレージ１３から取得する。
【００４７】
また、初期処理部１２１は、対応表から、プロセスが起動される起動先コンピュータを特定し（ステップＳ１２）、各起動先コンピュータに対して、データ格納領域１３０に格納されているネットワーク構成のデータに従って、ローカルコンピュータ番号を付与する（ステップＳ１３）。例えば、図１７Ｂに模式的に示すように、起動先コンピュータを下位スイッチ毎にグループ化し、グループに含まれる起動コンピュータの数で降順にソートする。図１７Ｂの例では、下位スイッチ１及び下位スイッチ４は、起動先コンピュータ数が「３」で、さらに下位スイッチ３は、起動先コンピュータ数が「２」である。同数の時にはスイッチの識別子でソートすると、下位スイッチ１、下位スイッチ４、下位スイッチ３の順番にソートされる。各下位スイッチに接続されている起動先コンピュータについては、例えばコンピュータの識別子に従う。そうすると、起動先コンピュータcomp03にはローカルコンピュータ番号「０」が付与され、起動先コンピュータcomp04にはローカルコンピュータ番号「１」が付与され、起動先コンピュータcomp05にはローカルコンピュータ番号「２」が付与され、起動先コンピュータcomp12にはローカルコンピュータ番号「３」が付与され、起動先コンピュータcomp13にはローカルコンピュータ番号「４」が付与され、起動先コンピュータcomp14にはローカルコンピュータ番号「５」が付与され、起動先コンピュータcomp10にはローカルコンピュータ番号「６」が付与され、起動先コンピュータcomp11にはローカルコンピュータ番号「７」が付与される。
【００４８】
次に、初期処理部１２１は、シフト距離が等しい起動先コンピュータ間の通信経路の重複を避けるように、起動先コンピュータ毎に、他の起動先コンピュータとの通信に用いるべきＬＩＤを、ＬＩＤファイル（図９）から選択する（ステップＳ１５）。典型的な全対全通信では、図２Ａ乃至図２Ｈで説明したように、通信相手を１つずつずらしながら全ての起動先コンピュータと通信を行う。本実施の形態では、通信相手をずらす幅をシフト距離と呼び、ローカルコンピュータ番号の差で表される。例えば、ローカルコンピュータ番号「１」からローカルコンピュータ番号「３」への通信であれば、シフト距離は「２」となる。
【００４９】
上でも述べたように、典型的な全対全通信では、シフト距離が異なる起動先コンピュータ間での通信は同じ期間では行われないので、シフト距離が等しい起動先コンピュータ間の通信経路が重複しないようにすれば、リンク衝突を回避できる。従って、シフト距離毎に、シフト距離が等しい起動先コンピュータ間の通信経路が重複しないように、上位スイッチ及びＬＩＤを選択する。
【００５０】
例えば、送信元の起動先コンピュータのローカルコンピュータ番号毎に、各シフト距離について宛先の起動先コンピュータのローカルコンピュータ番号を特定する。但し、同一の下位スイッチ配下における起動先コンピュータ間の通信であれば、上位スイッチを使用しないので、このような起動先コンピュータの組み合わせについては考察しない。例えば図１７Ｃに示すように、ローカルコンピュータ番号「５」の起動先コンピュータであれば、シフト距離「１」であればローカルコンピュータ番号「６」の起動先コンピュータと通信し、シフト距離「２」であればローカルコンピュータ番号「７」の起動先コンピュータと通信し、シフト距離「３」であればローカルコンピュータ番号「０」の起動先コンピュータと通信し、シフト距離「４」であればローカルコンピュータ番号「１」の起動先コンピュータと通信し、シフト距離「５」であればローカルコンピュータ番号「２」の起動先コンピュータと通信する。シフト距離「５」であればローカルコンピュータ番号「３」の起動先コンピュータと通信するが、下位スイッチが同じであるから、検討対象外とする。シフト距離「６」であればローカルコンピュータ番号「４」の起動先コンピュータと通信するが、この場合にも下位スイッチが同じであるから、検討対象外とする。
【００５１】
なお、通信経路の重複という観点からすれば、上で述べたような上位スイッチへの方向である上り方向だけではなく、上位スイッチから下位スイッチへの下り方向の重複も考慮する。そこで、図１７Ｃの表では、下位スイッチ１については「ｘ」、下位スイッチ４については「ｙ」、下位スイッチ３については「ｚ」という記号を用いて、通信相手のローカルコンピュータ番号と共に考慮するものとする。
【００５２】
そして、シフト距離毎に、上り方向の通信経路が重複しないように上位スイッチを設定する。例えば、図１７Ｄの表で示すように、シフト距離毎に、上位スイッチを分散するように設定する。特に、下位スイッチが同じ起動先コンピュータについては同一の上位スイッチを割り当てないようにする。但し、上でも述べたように上位スイッチから下位スイッチへの下り方向の重複も考慮しなければ通信経路の重複を避けることができない。そこで、シフト距離毎に、下位スイッチの記号ｘｙｚと上位スイッチの記号ＡＢＣとの組み合わせが一致している部分が存在するかを確認する。図１７Ｄの例の場合、シフト距離「４」の場合には、ローカルコンピュータ番号「１」の通信相手であるローカルコンピュータ番号「５」について「５ｙＢ」が登録されており、ローカルコンピュータ番号「７」の通信相手であるローカルコンピュータ番号「３」について「３ｙＢ」が登録されている。この場合、上位スイッチＢと下位スイッチ４（「ｙ」に対応）とのパスにリンク衝突が発生する可能性がある。従って、いずれかの上位スイッチを変更する方が良い。同様に、シフト距離「５」の場合には、ローカルコンピュータ番号「０」の通信相手であるローカルコンピュータ番号「５」について「５ｙＡ」が登録されており、ローカルコンピュータ番号「６」の通信相手であるローカルコンピュータ番号「３」について「３ｙＡ」が登録されている。この場合、上位スイッチＡと下位スイッチ４（「ｙ」に相当）とのパスにリンク衝突が発生する可能性がある。従って、いずれかの上位スイッチを変更する方が良い。
【００５３】
例えば図１７Ｅに示すように、ローカルコンピュータ番号「６」及び「７」について問題となったシフト距離の部分の上位スイッチを重複が発生しないように選択し直す。このようにすれば、シフト距離毎に、通信経路が重複しないような上位スイッチの選択が可能となる。
【００５４】
なお、上位スイッチが選択されれば、通信相手の起動先コンピュータとの組み合わせによって、ＬＩＤファイルから、対応するＬＩＤを特定する。具体的には、起動先コンピュータのローカルコンピュータ番号を、ステップＳ１３における対応付けに従ってＬＩＤファイルに含まれるコンピュータの識別子に変換する。そして、ＬＩＤファイルから当該コンピュータの識別子に対応付けられており且つ該当する上位スイッチの順番のＬＩＤを特定する。例えば図１７Ｆに示すような選択結果が得られる。なお、ここで同一下位スイッチ配下の起動先コンピュータが通信相手である場合には、どのＬＩＤを選択しても良いので、ランダムに設定する。
【００５５】
以上述べた方法は簡易的な方法であり、他の手法を採用しても良い。
【００５６】
図１７Ａの処理の説明に戻って、初期処理部１２１は、自起動先コンピュータについてのデータを抽出し、第２対応表を生成して、データ格納領域１３０に格納する（ステップＳ１７）。例えば、自起動先コンピュータのローカルコンピュータ番号が「２」でありコンピュータの識別子が「comp05」である場合には、例えば図１７Ｇに示すような第２対応表が生成される。具体的には、図１７Ｆにおいてローカルコンピュータ番号「２」の行のデータを読み出し、ＬＩＤファイルから、ローカルコンピュータ番号をコンピュータの識別子に変換した後対応表（図１４）のコンピュータの識別子に対応するＬＩＤを特定して登録すればよい。このようにすれば、通信相手のプロセス又は起動先コンピュータ毎に、ＬＩＤを特定できるようになる。
【００５７】
このように、本実施の形態では、各起動先コンピュータに固定のＬＩＤを割り当てるのではなく、起動先コンピュータの組み合わせ毎に適切なＬＩＤを選択するようにして、シフト距離毎に、シフト距離が等しい起動先コンピュータ間の通信経路の重複を回避している。従って、通信時におけるリンク競合が回避され、通信性能を向上させることができる。
【００５８】
以上のような処理は、各起動先コンピュータで並列して実施されることになる。
【００５９】
そうすると、初期処理部１２１は、ステップＳ１７で生成された第２対応表に従って、プロセス間の通信コネクションを構築する（ステップＳ１９）。この処理自体は、従来と同じであるからこれ以上述べない。
【００６０】
このような処理を行うことによって、他の起動先コンピュータの並列プロセスと通信する準備が完了したことになる。
【００６１】
そうすると、図１６の処理の説明に戻って、並列プロセス１１０は、プログラムに従って、ステップＳ１９で構築された通信コネクションを用いてプロセス間通信を行う（ステップＳ３）。このプロセス間通信は、例えば全対全通信部１２３による全対全通信の場合もあるが、一対一通信である場合もある。ステップＳ３は、並列プロセス１１０の処理が完了するまで行われる。
【００６２】
以上のような処理を行うことで、リンク衝突を回避して通信性能の向上を図ることができるようになる。
【００６３】
［実施の形態２］
第２の実施の形態に係る多段マルチパスネットワーク（すなわち、２階層以上に階層化された中継装置のうち下層の各中継装置から１つ上層の複数の中継装置にパスが設けられているネットワーク）の例を図１８に示す。図１８では、３つの上位スイッチ０乃至２と、６つの下位スイッチ０乃至５とで、１８台のコンピュータcomp00乃至comp17を接続する例を示している。下位スイッチ０乃至５のそれぞれは、上位スイッチ０乃至２に接続されている。すなわち、ある下位スイッチから他の下位スイッチへの通信経路は３重化されている。具体的には、上位スイッチ０を経由する通信経路、上位スイッチ１を経由する通信経路、及び上位スイッチ２を経由する通信経路が存在する。本実施の形態では、各コンピュータには、このような３つの通信経路に対応して、ルーティングに用いる３つのネットワーク識別子（以下では、InfiniBandについて説明するものとしてＬＩＤと呼ぶことにする）が予め割り当てられている。
【００６４】
具体的には図１８において各コンピュータcomp00乃至comp17の下に、割り当てられたＬＩＤ及び通信経路（ここでは上位スイッチの識別子）とが示されている。例えば、コンピュータcomp03には、上位スイッチ０を経由する通信経路についてのＬＩＤ「１６」と、上位スイッチ１を経由する通信経路についてのＬＩＤ「１７」と、上位スイッチ２を経由する通信経路についてのＬＩＤ「１８」とが割り当てられている。また、コンピュータcomp12には、上位スイッチ０を経由する通信経路についてのＬＩＤ「５２」と、上位スイッチ１を経由する通信経路についてのＬＩＤ「５３」と、上位スイッチ２を経由する通信経路についてのＬＩＤ「５４」とが割り当てられている。
【００６５】
各コンピュータは、以下で述べるように、ＬＩＤを用いて並列プロセス間の通信を行う。
【００６６】
上位スイッチ及び下位スイッチの各々は、これらの各ＬＩＤについて対応する出力ポート番号を特定できるようになっている。このような多段マルチパスネットワークにおいて送信されるパケットのヘッダには、宛先コンピュータのＬＩＤが設定されており、各スイッチでは、このＬＩＤから、受信パケットをいずれの出力ポートに転送すべきかを特定できるようになっている。
【００６７】
例えば、下位スイッチ４が、宛先コンピュータのＬＩＤが「２０」となっているパケットを受信した場合には、当該パケットを上位スイッチ０に転送する。同じように、下位スイッチ４が、宛先コンピュータのＬＩＤが「２１」となっているパケットを受信した場合には、当該パケットを上位スイッチ１に転送する。また、下位スイッチ４が、宛先コンピュータのＬＩＤが「２２」となっているパケットを受信した場合には、当該パケットを上位スイッチ２に転送する。このようなパケットは、全てコンピュータcomp04宛のパケットであるが、上で述べたように経由する上位スイッチは異なっている。
【００６８】
本実施の形態では、このような設定を表すＬＩＤファイルを、各コンピュータ又は後に述べる共有ストレージに保持するものとする。図１８に示した設定に対応するＬＩＤファイルの一例を図１９に示す。図１９の例では、ＬＩＤファイルには、第１行にＬＩＤファイルである旨のデータが含まれ、第２行に上位スイッチの数「３」（すなわち、通信経路の数）が含まれている。この上位スイッチの数については、後に述べる処理で用いられる。第３行目以降に、各コンピュータの識別子と、割り当てられている３つのＬＩＤとの対応付けが含まれている。本実施の形態では、左から、上位スイッチ０を経由する通信経路についてのＬＩＤ、上位スイッチ１を経由する通信経路についてのＬＩＤ、上位スイッチ２を経由する通信経路についてのＬＩＤが並べられている。このような並べ方に限定されるものではないが、各コンピュータについて、同じ並べ方を採用する。
【００６９】
次に、図２０を用いて、図１８に示した多段マルチパスネットワークを含むシステムの構成例を説明する。図２０においては、図１８に示した上位スイッチ０乃至２及び下位スイッチ０乃至５は明示していないが、コンピュータcomp00乃至comp17が接続されているネットワーク５１０に含まれているものとする。このネットワーク５１０には、スケジューリングサーバ５１１と、起動サーバ５１２と、ネットワーク５１０に接続されているコンピュータにより用いられる共有ストレージ５１３とが接続されている。
【００７０】
スケジューリングサーバ５１１は、コンピュータcomp00乃至comp17の稼働状況を把握し、次に起動すべき並列プロセス及び当該並列プロセスの起動先のコンピュータを決定し、当該並列プロセスを起動するように起動サーバ５１２に指示する。起動サーバ５１２は、スケジューリングサーバ５１１からの指示に応じて、並列プロセスを、指定されたコンピュータ上に起動する。
【００７１】
図２０では、起動サーバ５１２は、スケジューリングサーバ５１１とは別のコンピュータとして示されているが、スケジューリングサーバ５１１と物理的に同じサーバである場合もある。さらに、以下で述べるホストファイル（Hostfile）に記載されている先頭のコンピュータが起動サーバとして動作する場合もある。
【００７２】
以下では、図２０に示したようなシステムにおいて、８台のコンピュータに、８つの並列プロセスを起動する場合について説明する。本実施の形態では、並列プロセスはそれぞれ別のコンピュータ上に起動されるものとする。
【００７３】
このような具体例について図２１乃至図４１を用いて図２０に示したシステムの動作を説明する。まず、スケジューリングサーバ５１１は、コンピュータcomp00乃至comp17の稼働状況から、使用するコンピュータを選択する（ステップ（１１））。例えば、コンピュータcomp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14を選択する。そして、スケジューリングサーバ５１１は、選択されたコンピュータの識別子（例えばコンピュータ名）を列挙したホストファイル（Hostfile）を生成し、共有ストレージ５１３に格納する（ステップ（１２））。ホストファイルは、例えば図２２に示すようなファイルである。図２２で示すように、ステップ（１１）で選択された８つのコンピュータの識別子が含まれる。
【００７４】
そして、スケジューリングサーバ５１１は、起動サーバ５１２に対して、ホストファイルに列挙されているコンピュータ上に並列プロセスを起動するように指示する（ステップ（１３））。ホストファイルについて、共有ストレージ５１３の格納場所を指定するようにしても良いし、実際にホストファイルを送信するようにしても良い。
【００７５】
その後、図２３の処理に移行して、起動サーバ５１２は、例えば共有ストレージ５１３に格納されているホストファイルを取得し（ステップ（１４））、ホストファイルに定義されている起動先のコンピュータcomp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14を特定する（ステップ（１５））。そして、起動サーバ５１２は、起動先のコンピュータcomp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14上に、並列プロセスを起動する（ステップ（１６））。この際、起動サーバ５１２は、同一のジョブについて起動されたプロセスの識別子と当該プロセスが起動された起動先コンピュータの識別子とを対応付ける対応表を生成し、共有ストレージ５１３に格納して格納場所を通知するか、対応表を起動先コンピュータに送信する。起動先コンピュータには、さらにそのコンピュータ上で起動されるプロセスの識別子も通知する。各起動先コンピュータは、起動コンピュータ５１２又は共有ストレージ５１３から、対応表を取得し、自コンピュータで起動されるプロセスの識別子も取得する。
【００７６】
図２４に、対応表の一例を示す。図２４の例では、プロセス識別子（Proc0，Proc1，Proc2，Proc3，Proc4，Proc5，Proc6，Proc7。但し、「Ｐｒｏｃ」部分は分かりやすくするための添え字であり、０乃至７が識別子であるとする。）に対応付けて起動先コンピュータの識別子（comp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14）が対応付けられている。
【００７７】
次に、図２５乃至図４１を用いて、起動先コンピュータについて説明する。図２５は、起動先コンピュータ１０００の機能構成を模式的に示した図であり、起動サーバ５１２によって、起動先コンピュータ１０００では、動的に並列プロセス１１１０が起動される。この並列プロセス１１１０の処理に関連するデータについてはデータ格納領域１１３０に格納される。このデータ格納領域１１３０には、ネットワーク５１０の構造に関するデータも含まれる。すなわち、上位スイッチと下位スイッチの接続関係、下位スイッチに接続されているコンピュータの識別子などがデータ格納領域１１３０には格納されているものとする。
【００７８】
また、起動先コンピュータ１０００には通信ライブラリ１１２０も用意されている。通信ライブラリ１１２０は、例えばＭＰＩ仕様に従ったライブラリであり、MPI_Initサブルーチンに相当する初期処理部１１２１と、MPI_AlltoAllサブルーチンに相当する全対全通信部１１２３とを含む。並列プロセス１１１０は、初期処理部１１２１を呼び出してプロセス間通信を行うための初期処理を実施させ、全対全通信を行う場合には全対全通信部１１２３を呼び出して同じジョブについて起動された全ての並列プロセス間で全対全通信を行わせる。通信ライブラリ１１２０の初期処理部１１２１及び全対全通信部１１２３は、場合によってはデータ格納領域１１３０に格納されているデータを用いて処理を行う。なお、通信ライブラリ１１２０には、他のサブルーチンも含まれるが、ここでは本実施の形態に関係するもののみを示している。
【００７９】
次に、図２６及び図２７を用いて、具体的な処理について説明する。まず、起動された並列プロセス１１１０は、通信ライブラリ１１２０の初期処理部１１２１を呼び出す（図２６：ステップＳ１０１）。初期処理部１１２１は、呼び出されると、図２７に示すような処理を実施する。
【００８０】
初期処理部１１２１は、対応表を取得する（図２７：ステップＳ２０１）。データ格納領域１１３０に対応表が格納されている場合には、当該データ格納領域１１３０から読み込み、共有ストレージ５１３に対応表が格納されている場合には、共有ストレージ５１３から取得する。
【００８１】
また、初期処理部１１２１は、対応表からプロセスが起動される起動先コンピュータを特定し、各起動先コンピュータに対して、データ格納領域１１３０に格納されているネットワーク構成のデータに従って、ローカルコンピュータ番号を付与する（ステップＳ２０３）。例えば、図２８に模式的に示すように、第１段階として、起動先コンピュータを下位スイッチ毎にグループ化し、グループに含まれる起動先コンピュータの数でソートする。起動先コンピュータが同数のグループが存在する場合には下位スイッチの識別子が小さいものを優先する。そして、第２段階として、上位グループから順番に、例えばコンピュータの識別子の順に０から順番にローカルコンピュータ番号を付与する。
【００８２】
図２８の例では、下位スイッチ１のグループ及び下位スイッチ４のグループは、起動先コンピュータ数が「３」で、さらに下位スイッチ３のグループは、起動先コンピュータ数が「２」である。ソートすると、下位スイッチ１のグループ、下位スイッチ４のグループ、下位スイッチ３のグループの順番になる。
【００８３】
各下位スイッチに接続されている起動先コンピュータについては、コンピュータの識別子に従うとすると、図２８にも示すようにローカルコンピュータ番号が付与される。具体的には、起動先コンピュータcomp03にはローカルコンピュータ番号「０」が付与され、起動先コンピュータcomp04にはローカルコンピュータ番号「１」が付与され、起動先コンピュータcomp05にはローカルコンピュータ番号「２」が付与され、起動先コンピュータcomp12にはローカルコンピュータ番号「３」が付与され、起動先コンピュータcomp13にはローカルコンピュータ番号「４」が付与され、起動先コンピュータcomp14にはローカルコンピュータ番号「５」が付与され、起動先コンピュータcomp10にはローカルコンピュータ番号「６」が付与され、起動先コンピュータcomp11にはローカルコンピュータ番号「７」が付与される。
【００８４】
このようなローカルコンピュータ番号の付与方法を採用することで通信経路の重複を避けやすくなる。
【００８５】
そして、初期処理部１１２１は、ＬＩＤファイルに含まれる上位スイッチの数とデータ格納領域１１３０に格納されているネットワーク構成についてのデータとから、初期上位スイッチテーブルを生成し、データ格納領域１１３０に格納する（ステップＳ２０５）。
【００８６】
図２９に初期上位スイッチテーブルの一例を示す。図２９の例では、縦方向に送信元の起動先コンピュータのローカルコンピュータ番号を列挙し、横方向に宛先の起動先コンピュータのローカルコンピュータ番号を列挙している。送信元の起動先コンピュータも宛先の起動先コンピュータも同一下位スイッチに接続されている場合にはリンク衝突は生じないので、同一の下位スイッチに接続されている起動先コンピュータの組み合わせについては「×」印が登録される。それ以外の部分のテーブル値ｒｓ（ｓ，ｄ）は、以下のように設定される。なお、ｓは送信元のローカルコンピュータ番号を表し、ｄは宛先のローカルコンピュータ番号を表す。Ｋは、上位スイッチの数である。「％」は剰余を表す。
ｒｓ（ｓ，ｄ）＝ｓ％Ｋ
【００８７】
このようにすれば、ローカルコンピュータ番号「０」乃至「２」の起動先コンピュータが、他の下位スイッチに接続されている起動先コンピュータにデータを送信する際には、使用すべき上位スイッチが分散されているので、リンク衝突が生じにくくなる。同様に、ローカルコンピュータ番号「３」乃至「５」の起動先コンピュータが、他の下位スイッチに接続されている起動先コンピュータにデータを送信する際には、使用すべき上位スイッチが分散されているので、リンク衝突が生じにくくなる。さらに、ローカルコンピュータ番号「６」及び「７」の起動先コンピュータが、他の下位スイッチに接続されている起動先コンピュータにデータを送信する際には、使用すべき上位スイッチが分散されているので、リンク衝突が生じにくくなる。
【００８８】
典型的な全対全通信では、図２Ａ乃至図２Ｈで説明したように、通信相手を１つずつずらしながら全ての起動先コンピュータと通信を行う。本実施の形態では、通信相手をずらす幅をシフト距離と呼び、ローカルコンピュータ番号の差で表される。例えば、ローカルコンピュータ番号「０」からローカルコンピュータ番号「３」への通信であれば、シフト距離は「３」となる。
【００８９】
上でも述べたように、典型的な全対全通信では、シフト距離が異なる起動先コンピュータ間での通信は同じ期間では行われないので、シフト距離が等しい起動先コンピュータ間の通信経路が重複しないようにすれば、リンク衝突を回避できる。従って、シフト距離毎に、シフト距離が等しい起動先コンピュータ間の通信経路が重複しないように、上位スイッチ及びＬＩＤを選択する。
【００９０】
但し、通信経路の重複という観点からすれば、下位スイッチから上位スイッチへの上り方向だけではなく、上位スイッチから下位スイッチへの下り方向の重複も考慮する。そのために、図２９以降では、宛先の起動先コンピュータを基準に、すなわち縦方向に、宛先の起動先コンピュータが接続されている下位スイッチに応じて、テーブルのセルを色分けする。
【００９１】
具体的には、下位スイッチ１の場合には濃いハッチングが付されており、下位スイッチ２の場合には点のハッチングが付されており、下位スイッチ３の場合には斜め線のハッチングが付されている。
【００９２】
次に、初期処理部１１２１は、初期上位スイッチテーブルを、シフト距離についてのシフト距離テーブルに変換し、データ格納領域１１３０に格納する（ステップＳ２０７）。シフト距離テーブルの一例を図３０に示す。図３０の例では、縦方向には、送信元の起動先コンピュータのローカルコンピュータ番号が列挙されており、横方向にはシフト距離が列挙されている。そして、図２９に示した初期上位スイッチテーブルｒｓ（ｓ，ｄ）から以下のような演算にて生成する。
シフト距離テーブルｃｏｎｖ＿ｒｓ（ｓ，ｓｄ）＝ｒｓ（ｓ，ｄ）
なお、ｓは送信元の起動先コンピュータのローカルコンピュータ番号を表し、ｓｄはシフト距離を表す。また、ｄは、以下のようにして計算される、宛先の起動先コンピュータのローカルコンピュータ番号を表す。
ｄ＝（ｓ＋ｓｄ）％Ｎ
ここでＮは、起動先コンピュータ数を表す。
【００９３】
実際に図２９の初期上位スイッチテーブルを変換すると、図３０に示すようなシフト距離テーブルのようになる。ハッチングも、数字の移動に応じて移動させている。
【００９４】
そして、初期処理部１１２１は、テーブル処理を実施する（ステップＳ２０９）。テーブル処理は、シフト距離毎に、シフト距離が等しい起動先コンピュータ間の通信経路の重複を避けつつ、上位スイッチの番号を決定する処理である。このテーブル処理については、図３１乃至図３６を用いて説明する。
【００９５】
まず、初期処理部１１２１は、シフト距離ｓｄ＝０に設定する（図３１：ステップＳ３０１）。そして、初期処理部１１２１は、シフト距離テーブル更新処理を実施する（ステップＳ３０３）。このシフト距離テーブル更新処理については、以下で詳しく述べる。
【００９６】
その後、初期処理部１１２１は、シフト距離ｓｄを１インクリメントして（ステップＳ３０５）、シフト距離ｓｄが起動先コンピュータの数Ｎより小さいか判断する（ステップＳ３０７）。シフト距離ｓｄが起動先コンピュータの数Ｎよりも小さい場合にはステップＳ３０３に戻る。一方、シフト距離ｓｄが起動先コンピュータの数Ｎ以上となった場合には、元の処理に戻る。
【００９７】
このように、シフト距離毎にシフト距離テーブル更新処理を実施して、上位スイッチを適切に設定する。
【００９８】
次に、シフト距離テーブル更新処理について図３２乃至図３６を用いて説明する。まず、初期処理部１１２１は、初期化処理を実施する（図３２：ステップＳ３１１）。この初期化処理については、図３３を用いて説明する。
【００９９】
図３３の処理の説明に移行して、初期処理部１１２１は、全パスについて上り及び下りの使用予定回数と上り及び下りの使用確定回数とをゼロに設定する（ステップＳ３３１）。ここでは、下位スイッチ「ｉ」から上位スイッチ「ｊ」への上りパスについての使用予定回数をup_path_likely(i,j)と表し、上位スイッチ「ｊ」から下位スイッチ「ｉ」への下りパスについての使用予定回数をdn_path_likely(i,j)と表す。下位スイッチ「ｉ」から上位スイッチ「ｊ」への上りパスについての使用確定回数をup_path_cnt(i,j)と表し、上位スイッチ「ｊ」から下位スイッチ「ｉ」への下りパスについての使用確定回数をdn_path_cnt(i,j)と表す。ステップＳ３３１では、これらの変数の全ての要素値を０に設定する。
【０１００】
例えば以下のような擬似コードを実行する。
for ( i = 0 ; i ＜ N_ls ; i++ ) {
for ( k = 0 ; k ＜ K ; k++ ) {
up_path_likely(i,k) = 0
dn_path_likely(i,k) = 0
up_path_cnt(i,k) = 0
dn_path_cnt(i,k) = 0
}
}
Ｎ＿ｌｓは下位スイッチの数である。
【０１０１】
次に、初期処理部１１２１は、送信元の起動先コンピュータのローカルコンピュータ番号ｓを０に設定する（ステップＳ３３３）。さらに、初期処理部１１２１は、宛先の起動先コンピュータのローカルコンピュータ番号ｄを（ｓ＋ｓｄ）％Ｎに設定する（ステップＳ３３５）。ｓｄは、図３１の処理で設定される。
【０１０２】
そして、初期処理部１１２１は、送信元の起動先コンピュータｓが接続されている下位スイッチの番号ｌｓ（ｓ）が、宛先の起動先コンピュータｄが接続されている下位スイッチの番号ｌｓ（ｄ）と一致するか判断する（ステップＳ３３７）。ｌｓ（ｉ）は、ローカルコンピュータ番号ｉの起動先コンピュータが接続されている下位スイッチの番号を出力する関数であるが、このような下位スイッチの番号はデータ格納領域１１３０に格納されているネットワーク構成についてのデータから特定される。このステップでは、送信先と宛先の起動先コンピュータが同じ下位スイッチに接続されているか判断している。
【０１０３】
ｌｓ（ｓ）とｌｓ（ｄ）が一致している場合には、考慮しなくても良いのでステップＳ３４５に移行する。一方、ｌｓ（ｓ）とｌｓ（ｄ）が一致していない場合には、初期処理部１１２１は、変数ｒｓにシフト距離テーブルの値ｃｏｎｖ＿ｒｓ（ｓ，ｓｄ）を設定する（ステップＳ３３９）。すなわち、送信元の起動先コンピュータｓとシフト距離ｓｄから特定される上位スイッチの識別子を変数ｒｓに設定する。
【０１０４】
そして、初期処理部１１２１は、送信元の起動先コンピュータｓが接続されている下位スイッチの番号ｌｓ（ｓ）が起動先コンピュータ「０」が接続されている下位スイッチの番号ｌｓ（０）と一致するか判断する（ステップＳ３４１）。これは、図３０に示したシフト距離テーブルの例では、上３行に該当するか判断している。
【０１０５】
ｌｓ（ｓ）とｌｓ（０）とが一致している場合には、初期処理部１１２１は、以下のような設定を行う（ステップＳ３４３）。
up_path_cnt(ls(s),rs)＋＝１
dn_path_cnt(ls(d),rs)＋＝１
すなわち、送信元の起動先コンピュータｓが接続されている下位スイッチｌｓ（ｓ）から上位スイッチｒｓへの上りのパスの使用確定回数を１インクリメントする。同様に、上位スイッチｒｓから宛先の起動先コンピュータｄが接続されている下位スイッチｌｓ（ｄ）への下りのパスの使用確定回数を１インクリメントする。そしてステップＳ３４５に移行する。
【０１０６】
このように、図３０に示したシフト距離テーブルの例では、上３行に該当する部分の通信経路については確定させる。本実施の形態では、初期上位スイッチテーブルを生成する際に、上位スイッチを分散させているので、このように確定させても問題はない。また、処理を高速に終了させることができるようになる。
【０１０７】
一方、ｌｓ（ｓ）とｌｓ（０）とが一致しない場合には、初期処理部１１２１は、以下のような設定を行う（ステップＳ３４４）。
up_path_likely(ls(s),rs)＋＝１
dn_path_likely(ls(d),rs)＋＝１
すなわち、送信元の起動先コンピュータｓが接続されている下位スイッチｌｓ（ｓ）から上位スイッチｒｓへの上りのパスの使用予定回数を１インクリメントする。同様に、上位スイッチｒｓから宛先の起動先コンピュータｄが接続されている下位スイッチｌｓ（ｄ）への下りのパスの使用予定回数を１インクリメントする。そしてステップＳ３４５に移行する。
【０１０８】
その後、初期処理部１１２１は、送信元の起動先コンピュータのローカルコンピュータ番号ｓを１インクリメントし（ステップＳ３４５）、ｓが起動先コンピュータの数Ｎより小さいか判断する（ステップＳ３４７）。ｓがＮより小さい場合にはステップＳ３３５に戻る。一方、ｓがＮ以上になると、元の処理に戻る。
【０１０９】
このように初期化処理を実施することで、高速に処理を終了させることができるようになる。
【０１１０】
図３２の処理の説明に戻って、初期処理部１１２１は、送信元の起動先コンピュータのローカルコンピュータ番号ｓにＮ−１を設定する（ステップＳ３１３）。初期化処理においては図３０のシフト距離テーブルにおける上３行を確定させているので、以下の処理では逆にシフト距離テーブルの下の方から処理を進めるものである。
【０１１１】
そして、初期処理部１１２１は、宛先の起動先コンピュータのローカルコンピュータ番号ｄに（ｓ＋ｓｄ）％Ｎを設定する（ステップＳ３１５）。そして、初期処理部１１２１は、送信元の起動先コンピュータｓが接続されている下位スイッチの番号ｌｓ（ｓ）と宛先の起動先コンピュータｄが接続されている下位スイッチの番号ｌｓ（ｄ）とが一致しているか判断する（ステップＳ３１７）。ｌｓ（ｓ）とｌｓ（ｄ）とが一致している場合には、処理しなくても良いので、ステップＳ３２１に移行する。
【０１１２】
一方、ｌｓ（ｓ）とｌｓ（ｄ）とが一致していない場合には、初期処理部１１２１は、パス確定処理を実施する（ステップＳ３１９）。パス確定処理については後に図３４乃至図３６を用いて説明する。
【０１１３】
パス確定処理を実施すると、初期処理部１１２１は、ｓを１デクリメントし（ステップＳ３２１）、送信元の起動先コンピュータｓが接続されている下位スイッチｌｓ（ｓ）が起動先コンピュータ「０」が接続されている下位スイッチｌｓ（０）と一致するか判断する（ステップＳ３２３）。
【０１１４】
ｌｓ（ｓ）がｌｓ（０）と一致している場合には、初期化処理（ステップＳ３１１）でパスは確定させているので、元の処理に戻る。一方、ｌｓ（ｓ）とｌｓ（０）とが一致していない場合にはステップＳ３１９に戻る。
【０１１５】
このような処理を実施することで、通信経路の重複を避けつつパスの確定を実施する。
【０１１６】
次に、パス確定処理について図３４乃至図３６を用いて説明する。
【０１１７】
初期処理部１１２１は、宛先の起動先コンピュータのローカルコンピュータ番号ｄを（ｓ＋ｓｄ）％Ｎで算出すると共に、今回の検討対象である、シフト距離テーブルの値ｃｏｎｖ＿ｒｓ（ｓ，ｓｄ）を変数rs_likelyに設定しておく（ステップＳ３５１）。また、初期処理部１１２１は、今回の検討対象である通信経路について上り及び下りの使用確定回数が０、すなわちこれより前にパスが確定されていないことを確認するため、以下の計算を行う（ステップＳ３５３）。
ｃｎｔ＝up_path_cnt(ls(s), conv_rs(s,sd))＋dn_path_cnt(ls(d), conv_rs(s,sd))
【０１１８】
そして、初期処理部１１２１は、ｃｎｔが０であるか判断する（ステップＳ３５５）。ｃｎｔが０でない場合には、既に、上り又は下り若しくは両方で確定されたパスが存在することを表すので、端子Ａを介して図３５の処理に移行する。
【０１１９】
一方、ｃｎｔが０であれば、初期処理部１１２１は、変数ｒｓ＿ｎｅｗに、現在のシフト距離テーブルの設定ｃｏｎｖ＿ｒｓ（ｓ，ｓｄ）を設定する（ステップＳ３５７）。この処理は、図３５の処理の関係で一旦ｒｓ＿ｎｅｗにｃｏｎｖ＿ｒｓ（ｓ，ｓｄ）を待避させるものである。そして、初期処理部１１２１は、以下のように、使用予定回数を減少させる（ステップＳ３５９）。
up_path_likely(ls(s),conv_rs(s,sd))−＝１
dn_path_likely(ls(d),conv_rs(s,sd))−＝１
【０１２０】
さらに、初期処理部１１２１は、変数ｒｓ＿ｎｅｗの値を、シフト距離テーブルの今回検討部分ｃｏｎｖ＿ｒｓ（ｓ，ｓｄ）に設定する（ステップＳ３６１）。これによって今回検討部分のパスが確定する。なお、このステップも図３５の処理との関係で行う。
【０１２１】
そして、初期処理部１１２１は、以下のようにパスの確定を使用確定回数に反映させる（ステップＳ３６２）。そして元の処理に戻る。
up_path_cnt(ls(s),conv_rs(s,sd))＋＝１
dn_path_cnt(ls(d),conv_rs(s,sd))＋＝１
【０１２２】
次に、図３５の処理の説明を行う。この処理では、可能な限り確定パスを避けるように探索を行う。まず、初期処理部１１２１は、ｉを１にセットする（ステップＳ３６３）。そして、初期処理部１１２１は、変数ｒｓ＿ｉに、（ｃｏｎｖ＿ｒｓ（ｓ，ｓｄ）−ｉ＋Ｋ）％Ｋを代入する（ステップＳ３６５）。ここでは、ｃｏｎｖ＿ｒｓ（ｓ，ｓｄ）とは異なる上位スイッチの識別子をｒｓ＿ｉに設定している。
【０１２３】
その後、初期処理部１１２１は、このｒｓ＿ｉに基づいて、以下の演算を行ってパスの確定状態を確認する（ステップＳ３６７）。
ｃｎｔ＝up_path_cnt(ls(s), rs_i)＋dn_path_cnt(ls(d), rs_i)
likely＝up_path_likely(ls(s), rs_i)＋dn_path_likely(ls(d), rs_i)
【０１２４】
そして、初期処理部１１２１は、ｃｎｔ＋likelyが０であるか確認する（ステップＳ３６９）。そして、ｃｎｔ＋likelyが０、すなわち上位スイッチを変更した上で、使用確定もされておらず使用予定もないパスが存在することが確認できた場合には、初期処理部１１２１は、このときのｒｓ＿ｉの値を、rs_newに設定し（ステップＳ３７１）、端子Ｂを介して図３４のステップＳ３５９に戻る。
【０１２５】
一方、ｃｎｔ＋likelyが０ではない場合には、初期処理部１１２１は、ｃｎｔが０であるか確認する（ステップＳ３７３）。使用予定はあるが確定はないか否かを確認する。ｃｎｔ＝０であれば、初期処理部１１２１は、ｒｓ＿ｉを、候補として変数ｒｓ＿likelyに設定し（ステップＳ３７５）、ステップＳ３７７に移行する。一方、ｃｎｔが０ではない、すなわち使用確定が登録されている場合、初期処理部１１２１は、カウンタｉを１インクリメントし（ステップＳ３７７）、ｉがＫより小さいかを判断する（ステップＳ３７９）。ｉがＫよりも小さい場合には、ステップＳ３６５に戻って、上で述べた処理を繰り返す。一方、ｉがＫ以上となった場合には、初期処理部１１２１は、ｒｓ＿ｎｅｗに、現在のｒｓ＿ｌｉｋｅｌｙを設定する（ステップＳ３８１）。なお、ステップＳ３５１で、初期設定値をｒｓ＿likelyに設定しているので、上で述べた処理で良い上位スイッチが見つからない場合においても、この初期設定値がｒｓ＿ｎｅｗに設定される。この後、端子Ｂを介してステップＳ３５９に戻る。
【０１２６】
このような処理を実施することで、通信経路の重複を避けるようにしている。
【０１２７】
図３６を用いて上で行われた処理を模式的に説明する。上でも述べたように、シフト距離毎に、シフト距離が等しい起動先コンピュータ間の通信経路の重複を避けるようにする。そのため、図３６のシフト距離テーブルにおいて、縦方向に重複の有無を確認する。但し、初期上位スイッチテーブルの生成時に、縦方向に上位スイッチを分散させるようにしているため、上り方向の重複は避けられている。一方、下り方向の重複は、上位スイッチの識別子とハッチングのタイプとの組み合わせで判断できる。図３６の例では、シフト距離「４」の場合、送信元の起動先コンピュータ「１」の下り通信経路と、送信元の起動先コンピュータ「７」の下り通信経路とが一致してしまっている。同様に、シフト距離「５」の場合、送信元の起動先コンピュータ「０」の下り通信経路と、送信元の起動先コンピュータ「６」の下り通信経路とが一致してしまっている。この部分は、変更を行うことになる。上で述べたように、下位スイッチ１に関連する通信経路については優先的に確定させているので、変更するのは他の下位スイッチに接続されている起動先コンピュータのための上位スイッチとなる。図３７に示すように、シフト距離５の場合起動先コンピュータ「６」の上位スイッチを「２」に変更すれば、重複を避けられる。また、シフト距離４の場合起動先コンピュータ「７」の上位スイッチを「２」に変更すれば、重複を避けられる。このような処理を上で述べた処理フローで実現している。
【０１２８】
図２７の処理の説明に戻って、初期処理部１１２１は、ステップＳ２０９で確定されたシフト距離テーブルを最終上位スイッチテーブルに変換する（ステップＳ２１１）。具体的には、以下のような演算を実施する。
ｒｓ（ｓ，ｄ）＝ｃｏｎｖ＿ｒｓ（ｓ，ｓｄ）
ここで、ｄ＝（ｓ＋ｓｄ）％Ｎである。これはステップＳ２０７の逆変換であるから、図３７は、図３８のように変換される。太点線で囲まれた部分が、初期上位スイッチテーブルから変更された部分である。
【０１２９】
その後、初期処理部１１２１は、最終上位スイッチテーブルにおいて、自起動先コンピュータの組み合わせ以外の起動先コンピュータの組み合わせについて、コンピュータの識別子とローカルコンピュータ番号との対応付けとＬＩＤファイルに従ってＬＩＤを設定する（ステップＳ２１３）。本実施の形態では、以下のような演算を行えば、最終上位スイッチテーブルｌｉｄ（ｓ，ｄ）にＬＩＤを設定できる。
ｌｉｄ（ｓ，ｄ）＝first_LID(server_id(d))＋ｒｓ（ｓ，ｄ）
ここで、server_id(d)は、ローカルコンピュータ番号ｄのコンピュータ識別子を表す関数である。また、first_LID(x)は、コンピュータｘの最初のＬＩＤである。図３９に処理結果例を示す。なお、送信元と宛先の起動先コンピュータが同一の下位スイッチに接続されている場合には、このＬＩＤでなくとも問題ない。
【０１３０】
そして、初期処理部１１２１は、自起動先コンピュータについてのデータを最終上位スイッチテーブルから抽出し、第２対応表を生成し、データ格納領域１１３０に格納する（ステップＳ２１５）。
【０１３１】
例えば自プロセスが起動先コンピュータのローカルコンピュータ番号「２」で識別子「comp05」である場合には、図３９のうち３行目を抽出して、図４０に示すような第２対応表を生成する。図４０の例では、プロセスの識別子と、起動先コンピュータの識別子と、ＬＩＤとが対応付けられている。これによって、どのプロセス又はどの起動先コンピュータと通信を行う場合にも、使用すべきＬＩＤを特定することができる。
【０１３２】
以上のような処理は、各起動先コンピュータで並列して実施されることになる。
【０１３３】
そうすると、初期処理部１１２１は、ステップＳ２１５で生成された第２対応表に従って、プロセス間の通信コネクションを構築する（ステップＳ２１７）。この処理自体は、従来と同じであるからこれ以上述べない。
【０１３４】
但し、図４１に示すように、ローカルコンピュータ番号「０」の起動先コンピュータＡとローカルコンピュータ番号「３」の起動先コンピュータＢとの間で通信を行う場合には、起動先コンピュータＡはｌｉｄ（０，３）＝５２宛にデータを送信するが、起動先コンピュータＢはｌｉｄ（３，０）＝１６宛にデータを送信する。一方、ローカルコンピュータ番号「０」の起動先コンピュータＡとローカルコンピュータ番号「５」の起動先コンピュータＢとの間で通信を行う場合には、起動先コンピュータＡはｌｉｄ（０，５）＝６０宛にデータを送信するが、起動先コンピュータＢはｌｉｄ（５，０）＝１８宛にデータを送信する。すなわち、同じ宛先であってもＬＩＤが異なるようになっている。
【０１３５】
図４２に模式的に示すように、例えばローカルコンピュータ番号「０」の起動先コンピュータを中心に考えると、他の起動先コンピュータから見るとＬＩＤ「１６」「１７」「１８」のいずれかを用いるようになっており、複数のＬＩＤから選択されたＬＩＤを固定的に用いる従来技術とは異なっている。
【０１３６】
このような処理を行うことによって、他の起動先コンピュータの並列プロセスと通信する準備が完了したことになる。
【０１３７】
そうすると、図２６の処理の説明に戻って、並列プロセス１１１０は、プログラムに従って、ステップＳ２１７で構築された通信コネクションを用いてプロセス間通信を行う（ステップＳ１０３）。このプロセス間通信は、例えば全対全通信部１１２３による全対全通信の場合もあるが、一対一通信である場合もある。ステップＳ１０３は、並列プロセス１１１０の処理が完了するまで行われる。
【０１３８】
以上のような処理を行うことで、リンク衝突を回避して通信性能の向上を図ることができるようになる。
【０１３９】
例えば、図７と同じ場面を考える。すなわち、プロセス「３」乃至「５」が、番号で３つ先のプロセス「６」「７」「０」（プロセス「０」はプロセス「８」がないために選択される）にデータを送信しようとする。本実施の形態によれば、図４３に示すように、プロセス５（コンピュータcomp08）からプロセス０（コンピュータcomp03）へは、上位スイッチ０ではなく、上位スイッチ２を経由するようになっているため、衝突が回避されている。
【０１４０】
本実施の形態を用いて、並列プログラム起動時に各起動先コンピュータ間で生成される通信コネクション毎に適切なＬＩＤを選択することにより、多段マルチパスネットワークにおける全対全通信時に、本来の通信性能が得られるようになる。すなわち、通信時間が短くなるため、全体の処理時間も短くなる。
【０１４１】
例えば、コンピュータの台数を１６０、ネットワーク構成を、上位スイッチを１６で２階層構成とする環境で、任意の６４コンピュータによる全対全通信を実施させて、本実施の形態の効果を確認した。例えば図４４に、５００回実効帯域幅を測定した場合のランキングを示す。すなわち、縦軸は実効帯域幅を表し、横軸はランキングを表す。このように、本実施の形態の手法では、平均１９１５ＭＢ／ｓとなるが、全ての測定時に安定して高性能が出ている。一方、単一ＬＩＤ割当方式では、最高１９１５ＭＢ／ｓ、最低８７１ＭＢ／ｓ、平均１１４２ＭＢ／ｓとなっており、以下で述べるようにコンピュータの選択の仕方によって性能が変動する。一方、本実施の形態を採用すれば、単一ＬＩＤ割当方式に比して平均で１．６８倍、最大で２．２０倍性能が向上している。
【０１４２】
また、図４５に、ノード数（コンピュータ数。例えば連続する８個のコンピュータから１６０個のコンピュータ。）別の実効帯域幅を示す。本実施の形態では、ノード数に拘わらず安定的に高性能が出ているが、単一ＬＩＤ割当方式では、ノード数に応じて性能が上下してしまう。本実施の形態を採用すれば、単一ＬＩＤ割当方式に比して、最大１．７９倍性能が向上している。
【０１４３】
このように、本実施の形態であれば、起動先コンピュータの数に拘わらず安定的に実効帯域幅を広くすることができるようになる。
【０１４４】
なお、上で述べた例ではMPI_Initに相当する初期処理部１１２１が自ら上で述べたように全ての起動先コンピュータのＬＩＤを特定していたが、例えば図４６に示すようなシステムを採用して、ＬＩＤ管理コンピュータ５１４によって集中的にＬＩＤを特定するようにしても良い。ＬＩＤ管理コンピュータ５１４は、起動サーバ５１２やスケジューリングサーバ５１１と一体となっている場合もある。さらに、起動サーバ５１２と同じように、プロセス識別子が最小のプロセスが起動されたコンピュータが、ＬＩＤ管理コンピュータ５１４のように動作する場合もある。
【０１４５】
図４６のシステムでは、共有ストレージ５１３の代わりにＬＩＤ管理コンピュータ５１４がネットワーク５１０に接続されている。ＬＩＤ管理コンピュータ５１４は、データ格納部５１４１を有している。データ格納部５１４１には、ＬＩＤファイル（図１９）が格納されている。また、起動サーバ５１２が対応表をＬＩＤ管理コンピュータ５１４に通知する場合には、対応表もデータ格納部５１４１に格納されることもある。
【０１４６】
次に、このようなＬＩＤ管理コンピュータ５１４を導入した場合の動作例を図４７を用いて説明する。並列プロセス１１１０が起動されて初期処理部１１２１が呼び出された後、初期処理部１１２１は、ＬＩＤ決定要求をＬＩＤ管理コンピュータ５１４に送信する（ステップＳ４３１）。ＬＩＤ決定要求は、例えば対応表を含む。対応表が、起動サーバ５１２からＬＩＤ管理コンピュータ５１４に通知済みであれば、例えば対応表の識別情報をＬＩＤ決定要求に含むようにすればよい。
【０１４７】
ＬＩＤ管理コンピュータ５１４は、起動先コンピュータからＬＩＤ決定要求を受信すると（ステップＳ４３３）、ＬＩＤ決定処理を実施する（ステップＳ４３５）。ＬＩＤ決定処理は、図２７の処理フローにおけるステップＳ２０１乃至Ｓ２１５までの処理である。なお、対応表のデータを並列プロセスの起動先コンピュータ（選択コンピュータとも呼ぶ）から受信する場合には、当該受信がステップＳ１１の取得に相当する。さらに、ステップＳ２１５では、ＬＩＤ決定要求の送信元をベースに第２対応表を生成する。
【０１４８】
ＬＩＤ管理コンピュータ５１４は、ＬＩＤ決定処理で特定された、プロセス識別子又はコンピュータ識別子若しくはその両方とＬＩＤとの組み合わせ（これが第２対応表又はその一部に相当する）を、ＬＩＤ決定要求の要求元コンピュータに送信する（ステップＳ４３７）。起動先コンピュータの初期処理部１１２１は、ＬＩＤ管理コンピュータ５１４からプロセス識別子又はコンピュータ識別子若しくはその両方とＬＩＤとの組み合わせのデータを受信し、例えばデータ格納領域１１３０に格納する（ステップＳ４３９）。そして、初期処理部１１２１は、図２７のステップＳ２１７と同じように、受信したデータを用いて、起動プロセス間の通信コネクションを構築する（ステップＳ４４１）。
【０１４９】
このようにすれば、初期処理部１１２１の処理負荷が軽減される。
【０１５０】
なお、起動サーバ５１２の機能を有するコンピュータが、リクエストベースではなく、図２７のステップＳ２０１乃至Ｓ２１５の処理を、プロセスを起動する前などに実施して、第２対応表などと共に各起動先コンピュータに通知するようにしても良い。この場合、起動サーバ５１２による対応表の生成が対応表の取得に相当する。
【０１５１】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、図２７の処理フローは一例であって、処理結果が変わらない限り、ステップの順番を入れ替えたり、並列実施するようにしても良い。
【０１５２】
なお、上で述べたコンピュータ１００及び１０００、起動サーバ１２及び５１２及びスケジューリングサーバ１１及び５１１並びにＬＩＤ管理コンピュータ５１４は、コンピュータ装置であって、図４８に示すように、メモリ２５０１とＣＰＵ２５０３とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１５３】
初期処理部１２１及び１１２１、全対全通信部１２３及び１１２３を含む通信ライブラリ１２０及び１１２０は、ＣＰＵ２５０３により実行される。
【０１５４】
以上述べた本実施の形態をまとめると、以下のようになる。
【０１５５】
本実施の形態に係る情報処理方法は、（Ａ）階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスが起動されるコンピュータである選択コンピュータの識別子を含む第１のデータを取得するステップと、（Ｂ）複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、ネットワークにおける通信経路毎のネットワーク識別子から、選択コンピュータを順序づけるためのローカル識別番号間の差であるシフト距離が等しい選択コンピュータ間の通信経路の重複を避けるように、第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップとを含む。
【０１５６】
このようにすれば全対全通信においてもリンク衝突を回避することができる。従って、通信性能を向上させることができるようになる。
【０１５７】
なお、上で述べた第１のデータは、選択コンピュータの識別子と並列プロセスの識別子との対応付けを複数含んでいる場合もある。この場合、本実施の形態に係る情報処理方法は、第１のデータから通信相手のプロセスが起動されている選択コンピュータの識別子を特定すると共に、特定された選択コンピュータとの通信で用いるべきと選択ステップで選択されたネットワーク識別子を特定するステップをさらに含むようにしてもよい。例えば、各選択コンピュータで上で述べた処理を実施した場合には、自選択コンピュータを基準に、通信相手に対して使用すべきネットワーク識別子を特定するものである。なお、本実施の形態では、選択コンピュータの組み合わせ毎に、使用するネットワーク識別子が異なるので、このような処理を行う。
【０１５８】
なお、上で述べたネットワーク識別子が、ネットワークに含まれる最上層の中継装置毎に設けられるようにしてもよい。
【０１５９】
さらに、上で述べた選択ステップにおいて、シフト距離が等しい選択コンピュータ間の通信経路を決定する際に、最下層の中継装置である第１の中継装置と当該最下層より１階層上の中継装置である第２の中継装置との間のパスの上りと下りとの各々について通信経路の設定有無を管理し、上りについての通信経路の設定有無と下りについての通信経路の設定有無とに基づき、シフト距離が等しい選択コンピュータ間の通信経路の重複を判断するようにしてもよい。このようにすれば、正確に通信経路の重複を判断できるようになる。
【０１６０】
また、上で述べた選択ステップが、接続されている最下層の中継装置毎に選択コンピュータをグループ化し、当該グループに含まれる選択コンピュータの数の大きい順にグループをソートし、ソート後の順番に上記グループに含まれる選択コンピュータに対してシリアルにローカル識別番号を付与するステップを含むようにしても良い。発明者の非自明な知見によれば、このようなローカル識別子を付与することによって通信経路の重複を避けやすくなる。
【０１６１】
さらに、上で述べた選択ステップが、（Ｂ１）選択コンピュータのうち送信元の選択コンピュータと送信先の選択コンピュータとの組み合わせ毎に、経由する最上層の中継装置の識別子を登録するための第１のテーブルに、送信元の選択コンピュータのローカル識別子を最上層の中継装置の数で除した値の剰余を最上層の中継装置の識別子として設定するステップと、（Ｂ２）第１のテーブルを、送信元の選択コンピュータとシフト距離との組み合わせの第２のテーブルに変換するステップと、（Ｂ３）第２のテーブルから、シフト距離が等しい選択コンピュータ間の通信経路で経由する最上層の中継装置の重複を検出し、当該重複を検出した場合には当該重複を解消するように第２のテーブルを更新するステップと、（Ｂ４）第２のテーブルを第１のテーブルの形式を有する第３のテーブルに変換するステップと、（Ｂ５）第３のテーブルにおいて最上層の中継装置の識別子を送信先の選択コンピュータに対応付けられているネットワーク識別子に変換するステップとをさらに含むようにしてもよい。このようにすることで、効率的に適切なネットワーク識別子を各選択コンピュータについて選択できるようになる。なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭなどの光ディスク、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、ＲＡＭ等の記憶装置に一時保管される。
【０１６２】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１６３】
（付記１）
階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第１のデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路の重複を避けるように、前記第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップと、
を、前記コンピュータ又は前記ネットワークに接続されている管理コンピュータに実行させるプログラム。
【０１６４】
（付記２）
前記第１のデータは、前記選択コンピュータの識別子と前記並列プロセスの識別子との対応付けを複数含んでおり、
前記第１のデータから通信相手のプロセスが起動されている前記選択コンピュータの識別子を特定すると共に、特定された選択コンピュータとの通信で用いるべきと前記選択ステップで選択されたネットワーク識別子を特定するステップ
をさらに実行させる付記１記載のプログラム。
【０１６５】
（付記３）
前記ネットワーク識別子が、前記ネットワークに含まれる最上層の中継装置毎に設けられる
付記１又は２記載のプログラム。
【０１６６】
（付記４）
前記選択ステップにおいて、
前記差が等しい前記選択コンピュータ間の通信経路を決定する際に、
最下層の中継装置である第１の中継装置と当該最下層より１階層上の中継装置である第２の中継装置との間のパスの上りと下りとの各々について通信経路の設定有無を管理し、前記上りについての前記通信経路の設定有無と前記下りについての前記通信経路の設定有無とに基づき、前記差が等しい前記選択コンピュータ間の通信経路の重複を判断する
付記１乃至３のいずれか１つ記載のプログラム。
【０１６７】
（付記５）
前記選択ステップが、
接続されている最下層の中継装置毎に前記選択コンピュータをグループ化し、当該グループに含まれる前記選択コンピュータの数の大きい順に前記グループをソートし、ソート後の順番に前記グループに含まれる前記選択コンピュータに対してシリアルに識別番号を付与するステップ
を含む付記１乃至４のいずれか１つ記載のプログラム。
【０１６８】
（付記６）
前記選択ステップが、
前記選択コンピュータのうち送信元の選択コンピュータと送信先の選択コンピュータとの組み合わせ毎に、経由する最上層の中継装置の識別子を登録するための第１のテーブルに、前記送信元の選択コンピュータのローカル識別子を前記最上層の中継装置の数で除した値の剰余を前記最上層の中継装置の識別子として設定するステップと、
前記第１のテーブルを、前記送信元の選択コンピュータと前記シフト距離との組み合わせの第２のテーブルに変換するステップと、
前記第２のテーブルから、前記シフト距離が等しい前記選択コンピュータ間の通信経路で経由する前記最上層の中継装置の重複を検出し、当該重複を検出した場合には当該重複を解消するように前記第２のテーブルを更新するステップと、
前記第２のテーブルを前記第１のテーブルの形式を有する第３のテーブルに変換するステップと、
前記第３のテーブルにおいて前記最上層の中継装置の識別子を前記送信先の選択コンピュータに対応付けられているネットワーク識別子に変換するステップと、
をさらに含む、付記３記載のプログラム。
【０１６９】
（付記７）
階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第１のデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路の重複を避けるように、前記第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップと、
を含み、前記コンピュータ又は前記ネットワークに接続されている管理コンピュータに実行される情報処理方法。
【０１７０】
（付記８）
階層化された中継装置のうち第１の階層に含まれる中継装置から当該第１の階層の１つ上の階層である第２の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第１のデータを格納するデータ格納部と、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路の重複を避けるように、前記第１のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する初期処理部と、
を有する情報処理装置。
【０１７１】
（付記９）
第１のスイッチ群と、該第１のスイッチ群に接続された第２のスイッチ群と、前記第１のスイッチ群に含まれる複数のスイッチに接続された複数のノードとを備え、通信に用いるアドレスに応じて異なる通信経路を辿り得る通信システムにおける通信方法において、
前記複数のノードは、前記複数のノードがリング状に所定の順で配置された場合に通信を行うノード間に介在するノード数が第１の数となる通信相手関係で通信を行う第１の状態から、通信を行うノード間に介在するノード数が第２の数となる通信相手関係で通信を行う第２の状態に切り替える制御を行い、
前記複数のノードは、前記第１の状態では、前記複数のノードに対して第１のパターンで割り当てられた第１のアドレス群を用いて通信を行い、前記第２の状態では、前記複数のノードに対して該第１のパターンとは異なる第２のパターンで割り当てられた第２のアドレス群を用いて通信を行うように、通信に用いるアドレスを切り替える制御を行う、
ことを特徴とする通信方法。
【０１７２】
（付記１０）
前記第１の状態において、前記複数のノードが前記第１のアドレス群を用いて通信を行うと、前記複数のノードのうち、前記第１のスイッチ群に含まれるいずれかのスイッチに共通して接続されたノード群の各通信が、前記第２のスイッチ群に含まれる異なるスイッチに分散してルーティングされ、
前記第２の状態において、前記複数のノードが前記第２のアドレス群を用いて通信を行うと、前記複数のノードのうち、前記第１のスイッチ群に含まれるいずれかのスイッチに共通して接続されたノード群の各通信が、前記第２のスイッチ群に含まれる異なるスイッチに分散してルーティングされる、
ことを特徴とする付記９記載の通信方法。
【符号の説明】
【０１７３】
１０  ５１０    ＬＡＮ
１１  ５１１    スケジューリングサーバ
１２  ５１２    起動サーバ
１３  ５１３    共有ストレージ
５１４    ＬＩＤ管理コンピュータ
５１４１    データ格納部
１００  １０００    コンピュータ
１１０  １１１０    並列プロセス
１２０  １１２０    通信ライブラリ
１２３  １１２３    全対全通信部
１２１  １１２１    初期処理部
１３０  １１３０    データ格納領域
【図１】
0005664131.tif 000002
【図２Ａ】
0005664131.tif 000003
【図２Ｂ】
0005664131.tif 000004
【図２Ｃ】
0005664131.tif 000005
【図２Ｄ】
0005664131.tif 000006
【図２Ｅ】
0005664131.tif 000007
【図２Ｆ】
0005664131.tif 000008
【図２Ｇ】
0005664131.tif 000009
【図２Ｈ】
0005664131.tif 000010
【図３】
0005664131.tif 000011
【図４】
0005664131.tif 000012
【図５】
0005664131.tif 000013
【図６】
0005664131.tif 000014
【図７】
0005664131.tif 000015
【図８】
0005664131.tif 000016
【図９】
0005664131.tif 000017
【図１０】
0005664131.tif 000018
【図１１】
0005664131.tif 000019
【図１２】
0005664131.tif 000020
【図１３】
0005664131.tif 000021
【図１４】
0005664131.tif 000022
【図１５】
0005664131.tif 000023
【図１６】
0005664131.tif 000024
【図１７Ａ】
0005664131.tif 000025
【図１７Ｂ】
0005664131.tif 000026
【図１７Ｃ】
0005664131.tif 000027
【図１７Ｄ】
0005664131.tif 000028
【図１７Ｅ】
0005664131.tif 000029
【図１７Ｆ】
0005664131.tif 000030
【図１７Ｇ】
0005664131.tif 000031
【図１８】
0005664131.tif 000032
【図１９】
0005664131.tif 000033
【図２０】
0005664131.tif 000034
【図２１】
0005664131.tif 000035
【図２２】
0005664131.tif 000036
【図２３】
0005664131.tif 000037
【図２４】
0005664131.tif 000038
【図２５】
0005664131.tif 000039
【図２６】
0005664131.tif 000040
【図２７】
0005664131.tif 000041
【図２８】
0005664131.tif 000042
【図２９】
0005664131.tif 000043
【図３０】
0005664131.tif 000044
【図３１】
0005664131.tif 000045
【図３２】
0005664131.tif 000046
【図３３】
0005664131.tif 000047
【図３４】
0005664131.tif 000048
【図３５】
0005664131.tif 000049
【図３６】
0005664131.tif 000050
【図３７】
0005664131.tif 000051
【図３８】
0005664131.tif 000052
【図３９】
0005664131.tif 000053
【図４０】
0005664131.tif 000054
【図４１】
0005664131.tif 000055
【図４２】
0005664131.tif 000056
【図４３】
0005664131.tif 000057
【図４４】
0005664131.tif 000058
【図４５】
0005664131.tif 000059
【図４６】
0005664131.tif 000060
【図４７】
0005664131.tif 000061
【図４８】
0005664131.tif 000062