(57)【特許請求の範囲】
【請求項１】
中継装置が２階層以上にまたがるマルチパスネットワークに接続された複数のコンピュータのうち並列プロセスが起動されるコンピュータである選択コンピュータの識別子と前記並列プロセスの識別子との組み合わせを複数含む対応付けデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記マルチパスネットワークにおける通信経路毎のネットワーク識別子から、前記対応付けデータにおいて識別子が含まれる選択コンピュータ毎に、当該選択コンピュータ間で前記通信経路が分散するように使用すべきネットワーク識別子を特定する特定ステップと、
を、前記コンピュータ又は前記マルチパスネットワークに接続されている管理コンピュータに実行させるプログラム。
【請求項２】
特定された前記ネットワーク識別子を用いて前記並列プロセス間のコネクションを構築するステップ
をさらに実行させる請求項１記載のプログラム。
【請求項３】
前記通信経路が、前記マルチパスネットワークにおいて経由する最上位スイッチで特定される
請求項１又は２記載のプログラム。
【請求項４】
前記並列プロセスの識別子の各々に、前記並列プロセスの起動個数の連続する整数値のいずれかが割り当てられており、
前記ネットワーク識別子が、前記複数のコンピュータに含まれるコンピュータ毎に、対応する通信経路の所定の順番に並べられており、
前記特定ステップが、
前記並列プロセスの識別子である整数値の、前記通信経路の数についての剰余の順番におけるネットワーク識別子を特定するステップ
を含む請求項１乃至３のいずれか１つ記載のプログラム。
【請求項５】
中継装置が２階層以上にまたがるマルチパスネットワークに接続された複数のコンピュータのうち並列プロセスが起動されるコンピュータである選択コンピュータの識別子と前記並列プロセスの識別子との組み合わせを複数含む対応付けデータを取得する取得部と、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記マルチパスネットワークにおける通信経路毎のネットワーク識別子から、前記対応付けデータにおいて識別子が含まれる選択コンピュータ毎に、当該選択コンピュータ間で前記通信経路が分散するように使用すべきネットワーク識別子を特定する特定処理部と、
を有する情報処理装置。
【請求項６】
中継装置が２階層以上にまたがるマルチパスネットワークに接続された複数のコンピュータのうち並列プロセスが起動されるコンピュータである選択コンピュータの識別子と前記並列プロセスの識別子との組み合わせを複数含む対応付けデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記マルチパスネットワークにおける通信経路毎のネットワーク識別子から、前記対応付けデータにおいて識別子が含まれる選択コンピュータ毎に、当該選択コンピュータ間で前記通信経路が分散するように使用すべきネットワーク識別子を特定する特定ステップと、
を含み、前記コンピュータ又は前記マルチパスネットワークに接続される管理コンピュータにより実行される情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、中継装置が２階層以上にまたがるマルチパスネットワークに関する。
【背景技術】
【０００２】
近年、ＨＰＣ（High Performance Computing）システムとして、多数のコンピュータを高速ネットワークで接続することで構築されるクラスタシステムが広く用いられている。このクラスタシステムで並列処理プログラムを実行する場合には、並列処理プログラムのための並列プロセスを複数のコンピュータに分散して起動させる。そのため、並列プロセス間でデータ交換を行う場合には、コンピュータ間で通信を行うことになる。従って、コンピュータ間通信の性能が、クラスタシステムに影響を及ぼす。
【０００３】
コンピュータ間通信の性能を向上させるためには、例えばInfiniBandやMyrinet等の高性能ネットワークや、この高性能ネットワークを使いこなす通信ライブラリの影響を考慮する。クラスタシステム上では、ＭＰＩ（Message Passing Interface）と呼ばれる通信ＡＰＩ（Application Program Interface）で記述された並列処理プログラムが実行されることが多い。そのため、ＭＰＩ仕様に基づく様々な通信ライブラリが提供されている。
【０００４】
例えば図１に示すように、プロセス０乃至Ｎ−１が、Ｎ個のコンピュータ上に分散して起動された場合、並列処理プログラムで規定されている計算処理の合間に、データ交換のためのプロセス間通信が行われることが多い。図１では起動された全てのプロセス間で通信を行う例を示しているが、特定のプロセス間で一対一通信を行う場合もある。プロセス間通信ではＭＰＩライブラリの該当モジュールを呼び出して通信を行うことになる。
【０００５】
並列処理プログラムにおけるプロセス間通信のパターンはプログラム次第であり多種多様である。その中でも、図１に示したように起動された全ての並列プロセス間でデータ交換を行う通信パターンである全対全（All−to−All）は、着目される通信パターンの１つとされている。そこで、ＭＰＩ仕様でも、MPI_Alltoall()という関数で全対全通信を実現することが求められている。全対全通信を実現するアルゴリズムは様々存在するが、比較的データサイズが大きく且つネットワークの帯域幅で性能が律速されるケースでは、リング（Ring）アルゴリズムが使われることが多い。 
【０００６】
リングアルゴリズムについて図２Ａ乃至図２Ｈを用いて説明する。図２Ａに示すように、プロセス０からプロセス７までの８つのプロセスが起動された場合を考える。このような場合、まず、図２Ｂに示すように、各プロセスは、プロセス番号が１つ前のプロセスからデータを受信し、プロセス番号が１つ後のプロセスへデータを送信する。なお、プロセス番号「７」の後のプロセスはプロセス番号「０」のプロセスであり、プロセス番号「０」の前のプロセスはプロセス番号「７」のプロセスとする。
【０００７】
そして、図２Ｃに示すように、各プロセスは、プロセス番号が２つ前のプロセスからデータを受信し、プロセス番号が２つ後のプロセスへデータを送信する。さらに、図２Ｄに示すように、各プロセスは、プロセス番号が３つ前のプロセスからデータを受信し、プロセス番号が３つ後のプロセスへデータを送信する。また、図２Ｅに示すように、各プロセスは、プロセス番号が４つ前のプロセスからデータを受信し、プロセス番号が４つ後のプロセスへデータを送信する。さらに、図２Ｆに示すように、各プロセスは、プロセス番号が５つ前のプロセスからデータを受信し、プロセス番号が５つ後のプロセスへデータを送信する。また、図２Ｇに示すように、各プロセスは、プロセス番号が６つ前のプロセスからデータを受信し、プロセス番号が６つ後のプロセスへデータを送信する。さらに、図２Ｈに示すように、各プロセスは、プロセス番号が７つ前のプロセスからデータを受信し、プロセス番号が７つ後のプロセスへデータを送信する。
【０００８】
リングアルゴリズムを採用する場合には、以下で述べるような問題のあるネットワーク構成でなければ、効率よく全対全通信を行うことができる。
【０００９】
次に、ネットワーク構成について考察する。図３に示すように、使用されるコンピュータの数が少ない場合には、１つのネットワークスイッチＳＷ（以下、スイッチと略する）によってそれらのコンピュータを接続することができる。すなわち、８つのコンピュータが１つのスイッチに接続されており、各コンピュータに１つのプロセスが起動されている。このような場合にはクロスバー接続と等価であり、起動されているプロセス間で全対全通信を行っても、ネットワークリンクの競合が発生することはない。
【００１０】
一方、使用されるコンピュータの数が１つのスイッチで接続可能な数を超えると、スイッチを多段にして用いることになる。シンプルな多段スイッチ構成のネットワークは図４に示すようなツリー（Ｔｒｅｅ）ネットワークである。図４では、説明の都合上、コンピュータの数及び起動されるプロセスの数は図３の例と同じであるが、スイッチＳＷのポート数が８未満であるものとしている。また、図２Ｅにおいてプロセス０乃至３がデータを送信している場面における通信状態を示している。スイッチを２段にして上位スイッチの数を最小である「１」に抑えているため、上位スイッチと下位スイッチとの間のリンクの帯域が不足している。よって、８つのプロセスで全対全通信を行おうとすると、図４で丸で示したように、上位スイッチと下位スイッチとの間のリンクで競合が発生して、スループットが低下する。
【００１１】
そのため、ネットワーク性能を重視する場合には、ファットツリー（FatTree）ネットワークを採用する場合が多い。図５の例では、上位スイッチを４つに増加させ、下位スイッチから上位スイッチへのリンク（アップリンクとも呼ぶ）の数を、下位スイッチからコンピュータへのリンク（ダウンリンクとも呼ぶ）の数に一致させている。そして、プロセス「０」及び「４」が起動されているコンピュータへのデータ送信は上位スイッチ「Ａ」を経由するように設定する。また、プロセス「１」及び「５」が起動されているコンピュータへのデータ送信は上位スイッチ「Ｂ」を経由するように設定する。さらに、プロセス「２」及び「６」が起動されているコンピュータへのデータ送信は上位スイッチ「Ｃ」を経由するように設定する。また、プロセス「３」及び「７」が起動されているコンピュータへのデータ送信は上位スイッチ「Ｄ」を経由するように設定する。このようにして、図２Ｅにおいてプロセス０乃至３が起動されているコンピュータがデータを送信している場面における通信状態は図５に示すように、リンク競合なしで通信が行われている。
【００１２】
しかし、上で述べたInfiniBandのようなパケット転送経路を動的に変更できないネットワーク（すなわち静的ルーティングネットワーク）では、上位スイッチと下位スイッチ間の特定のリンクに通信が集中することがある。図６は、その一例を示したものである。図６の例では１６台のコンピュータが、上位スイッチ４台と下位スイッチ４台のファットツリーネットワークに接続されている。このようなシステムにおいては、各コンピュータの稼働状況などに応じてコンピュータが選択されて、この選択コンピュータにおいてプロセスが起動される。しかしながら、選択コンピュータが送信するパケットが経由する上位スイッチには偏りが生じてしまう可能性がある。
【００１３】
図６の例では、プロセス「０」「４」「６」「７」が起動されたコンピュータへのデータ送信は上位スイッチ「Ａ」を経由するように設定されている。プロセス「１」「５」が起動されたコンピュータへのデータ送信は上位スイッチ「Ｂ」を経由するように設定されている。プロセス「２」が起動されたコンピュータへのデータ送信は上位スイッチ「Ｃ」を経由するように設定されている。プロセス「３」が起動されたコンピュータへのデータ送信は上位スイッチ「Ｄ」を経由するように設定されている。そうすると、図２Ｅにおいてプロセス０乃至３が起動されているコンピュータがデータを送信している場面における通信状態は図６に示すように、プロセス「１」が起動されたコンピュータからプロセス「５」が起動されたコンピュータへのデータ通信以外は、上位スイッチ「Ａ」へのアップリングが用いられるので、丸で示したようにリンク競合が発生してしまっている。
【００１４】
このように、ファットツリーネットワークを採用した場合においても、特定のリンクに通信負荷が集中して、通信性能が低下するという状況が生じ得る。これは、InfiniBandのような静的ルーティングネットワークを採用する場合に生じ得る。すなわち、図７に示すように、ネットワークにおいてルーティングに用いられるネットワーク識別子（InifiniBandではＬＩＤと呼ぶ）が１つだけコンピュータに割り当てられ、各スイッチではこのネットワーク識別子とパケット転送先ポートとの対応付けが固定的である場合に問題となる。具体的には、最も左のコンピュータのＬＩＤは「１」となっており、このコンピュータ宛のパケットは、上位スイッチ「Ａ」を経由することが固定的である。同様に、最も右のコンピュータのＬＩＤは「１６」となっており、このコンピュータ宛のパケットは、上位スイッチ「Ｄ」を経由することが固定的である。
【００１５】
さらに、上でも述べたように、並列プロセスを起動するコンピュータの選択は、コンピュータに割り当てられているＬＩＤとの関係を考慮せずに行われているため、データ送信時の通信経路（具体的には、データ送信時に経由する上位スイッチ）に偏りが生じてしまう場合がある。
【００１６】
なお、リンク競合が発生しやすい例として上では全対全通信を一例として説明したが、図６に示したようなコンピュータが選択されてプロセスが起動されてしまうと、そのほかの場面（例えば一対一通信を複数のプロセス組み合わせで同時に行う場合など）でも上位スイッチ「Ａ」を経由するようなデータ通信が発生しやすくなり、結果としてリンク競合が発生する可能性も増加している。
【００１７】
通信経路を動的に変更するような技術は存在しているが、静的ルーティングネットワークにおける上で述べたような問題に着目している従来技術は存在していない。
【先行技術文献】
【特許文献】
【００１８】
【特許文献１】特開２００９−２０７９７号公報
【特許文献２】特開２００６−１４６３９１号公報
【特許文献３】特開平１１−６６０２４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１９】
本技術の目的は、一側面においては、中継装置が２階層以上にまたがるマルチパスネットワークにおけるリンク競合を回避するための技術を提供することである。
【課題を解決するための手段】
【００２０】
本方法は、（Ａ）中継装置が２階層以上にまたがるマルチパスネットワークに接続された複数のコンピュータのうち並列プロセスが起動されるコンピュータである選択コンピュータの識別子と並列プロセスの識別子との組み合わせを複数含む対応付けデータを取得するステップと、（Ｂ）複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、上記マルチパスネットワークにおける通信経路毎のネットワーク識別子から、対応付けデータにおいて識別子が含まれる選択コンピュータ毎に、当該選択コンピュータ間で通信経路が分散するように使用すべきネットワーク識別子を特定する特定ステップとを含む。
【発明の効果】
【００２１】
中継装置が２階層以上にまたがるマルチパスネットワークにおけるリンク競合を回避できるようになる。
【図面の簡単な説明】
【００２２】
【図１】図１は、プロセス間通信を説明するための図である。
【図２Ａ】図２Ａは、リングアルゴリズムを説明するための図である。
【図２Ｂ】図２Ｂは、リングアルゴリズムを説明するための図である。
【図２Ｃ】図２Ｃは、リングアルゴリズムを説明するための図である。
【図２Ｄ】図２Ｄは、リングアルゴリズムを説明するための図である。
【図２Ｅ】図２Ｅは、リングアルゴリズムを説明するための図である。
【図２Ｆ】図２Ｆは、リングアルゴリズムを説明するための図である。
【図２Ｇ】図２Ｇは、リングアルゴリズムを説明するための図である。
【図２Ｈ】図２Ｈは、リングアルゴリズムを説明するための図である。
【図３】図３は、ネットワーク構成の一例を示す図である。
【図４】図４は、ネットワーク構成の一例を示す図である。
【図５】図５は、ファットツリーネットワークにおける全対全通信を説明するための図である。
【図６】図６は、ファットツリーネットワークにおいてリンク競合が発生する場合の例を示す図である。
【図７】図７は、InfiniBandによる多段マルチパスネットワークの一例を示す図である。
【図８】図８は、実施の形態における多段マルチパスネットワークの一例を示す図である。
【図９】図９は、ＬＩＤファイルの一例を示す図である。
【図１０】図１０は、実施の形態におけるシステムの一例を示す図である。
【図１１】図１１は、システムの動作を説明するための図である。
【図１２】図１２は、ホストファイルの一例を示す図である。
【図１３】図１３は、システムの動作を説明するための図である。
【図１４】図１４は、対応表の一例を示す図である。
【図１５】図１５は、並列プロセスが起動されたコンピュータの構成を説明するための図である。
【図１６】図１６は、並列プロセスが起動されたコンピュータの動作を説明するための図である。
【図１７】図１７は、初期処理部の動作を説明するための図である。
【図１８】図１８は、ＬＩＤとプロセス識別子との対応付けデータの一例を示す図である。
【図１９】図１９は、リンク競合が発生しないことを示すケースを示す図である。
【図２０】図２０は、リンク競合が発生しないことを示すケースを示す図である。
【図２１】図２１は、他の実施の形態におけるシステムの一例を示す図である。
【図２２】図２２は、他の実施の形態におけるシステムの動作を説明するための図である。
【図２３】図２３は、コンピュータの機能ブロック図である。
【図２４】図２４は、情報処理装置の機能ブロック図である。
【発明を実施するための形態】
【００２３】
本技術の一実施の形態に係る多段マルチパスネットワーク（すなわち、中継装置が２階層以上にまたがるマルチパスネットワーク）の例を図８に示す。図８では、４つの上位スイッチと、４つの下位スイッチとで、１６台のコンピュータcomp00乃至comp15を接続する例を示している。下位スイッチＥ乃至Ｈのそれぞれは、上位スイッチＡ乃至Ｄに接続されている。すなわち、ある下位スイッチから他の下位スイッチへの通信経路は４重化されている。具体的には、上位スイッチＡを経由する通信経路、上位スイッチＢを経由する通信経路、上位スイッチＣを経由する通信経路、及び上位スイッチＤを経由する通信経路が存在する。本実施の形態では、各コンピュータには、このような４つの通信経路に対応して４つのネットワーク識別子（以下では、InfiniBandについて説明するものとしてＬＩＤと呼ぶことにする）が予め割り当てられている。
【００２４】
具体的には図８において各コンピュータcomp00乃至comp15の下に、割り当てられたＬＩＤ及び通信経路（ここでは上位スイッチの識別子）とが示されている。例えば、コンピュータcomp00には、上位スイッチＡを経由する通信経路についてのＬＩＤ「１」と、上位スイッチＢを経由する通信経路についてのＬＩＤ「２」と、上位スイッチＣを経由する通信経路についてのＬＩＤ「３」と、上位スイッチＤを経由する通信経路についてのＬＩＤ「４」とが割り当てられている。また、コンピュータcomp15には、上位スイッチＡを経由する通信経路についてのＬＩＤ「６１」と、上位スイッチＢを経由する通信経路についてのＬＩＤ「６２」と、上位スイッチＣを経由する通信経路についてのＬＩＤ「６３」と、上位スイッチＤを経由する通信経路についてのＬＩＤ「６４」とが割り当てられている。
【００２５】
各コンピュータは、以下で述べるように、いずれかのＬＩＤを用いて並列プロセス間の通信を行う。
【００２６】
上位スイッチ及び下位スイッチの各々は、これらの各ＬＩＤについて対応する出力ポート番号を特定できるようになっている。このような多段マルチパスネットワークにおいて送信されるパケットのヘッダには、宛先コンピュータのＬＩＤが設定されており、各スイッチでは、このＬＩＤから、受信パケットをいずれの出力ポートに転送すべきかを特定できるようになっている。
【００２７】
例えば、下位スイッチＥが、宛先コンピュータのＬＩＤが「１７」となっているパケットを受信した場合には、当該パケットを上位スイッチＡに転送する。同じように、下位スイッチＥが、宛先コンピュータのＬＩＤが「１８」となっているパケットを受信した場合には、当該パケットを上位スイッチＢに転送する。また、下位スイッチＥが、宛先コンピュータのＬＩＤが「１９」となっているパケットを受信した場合には、当該パケットを上位スイッチＣに転送する。さらに、下位スイッチＥが、宛先コンピュータのＬＩＤが「２０」となっているパケットを受信した場合には、当該パケットを上位スイッチＤに転送する。このようなパケットは、全てコンピュータcomp04宛のパケットであるが、上で述べたように経由する上位スイッチは異なっている。
【００２８】
本実施の形態では、このような設定を表すＬＩＤファイルを、各コンピュータ又は後に述べる共有ストレージに保持するものとする。図８に示した設定に対応するＬＩＤファイルの一例を図９に示す。図９の例では、ＬＩＤファイルには、第１行にＬＩＤファイルである旨のデータが含まれ、第２行に上位スイッチの数Ｎｕ＝「４」（すなわち、通信経路の数）が含まれている。この上位スイッチの数Ｎｕについては、後に述べる処理で用いられる。第３行目以降に、各コンピュータの識別子と、割り当てられている４つのＬＩＤとの対応付けが含まれている。本実施の形態では、左から、上位スイッチＡを経由する通信経路についてのＬＩＤ、上位スイッチＢを経由する通信経路についてのＬＩＤ、上位スイッチＣを経由する通信経路についてのＬＩＤ、上位スイッチＤを経由する通信経路についてのＬＩＤが並べられている。このような並べ方に限定されるものではないが、各コンピュータについて、同じ並べ方を採用する。
【００２９】
次に、図１０を用いて、図８に示した多段マルチパスネットワークを含むシステムの構成例を説明する。図１０においては、図８に示した上位スイッチＡ乃至Ｄ及び下位スイッチＥ乃至Ｈは明示していないが、コンピュータcomp00乃至comp15が接続されているネットワーク１０に含まれているものとする。このネットワーク１０には、スケジューリングサーバ１１と、起動サーバ１２と、ネットワーク１０に接続されているコンピュータにより用いられる共有ストレージ１３とが接続されている。
【００３０】
スケジューリングサーバ１１は、コンピュータcomp00乃至comp15の稼働状況を把握し、次に起動すべき並列プロセス及び当該並列プロセスの起動先のコンピュータを決定し、当該並列プロセスを起動するように起動サーバ１２に指示する。起動サーバ１２は、スケジューリングサーバ１１からの指示に応じて、並列プロセスを、指定されたコンピュータ上に起動する。
【００３１】
図１０では、起動サーバ１２は、スケジューリングサーバ１１とは別のコンピュータとして示されているが、スケジューリングサーバ１１と物理的に同じサーバである場合もある。さらに、以下で述べるホストファイル（Hostfile）に記載されている先頭のコンピュータが起動サーバとして動作する場合もある。
【００３２】
以下では、図１０に示したようなシステムにおいて、４台のコンピュータに、４つの並列プロセスを起動する場合について説明する。本実施の形態では、並列プロセスはそれぞれ別のコンピュータ上に起動されるものとする。
【００３３】
このような具体例について図１１乃至図２０を用いて図１０に示したシステムの動作を説明する。まず、スケジューリングサーバ１１は、コンピュータcomp00乃至comp15の稼働状況から、使用するコンピュータを選択する（ステップ（１））。例えば、コンピュータcomp00、comp05、comp10及びcomp12を選択する。そして、スケジューリングサーバ１１は、選択されたコンピュータの識別子（例えばコンピュータ名）を列挙したホストファイル（Hostfile）を生成し、共有ストレージ１３に格納する（ステップ（２））。ホストファイルは、例えば図１２に示すようなファイルである。図１２で示すように、ステップ（１）で選択された４つのコンピュータの識別子が含まれる。
【００３４】
そして、スケジューリングサーバ１１は、起動サーバ１２に対して、ホストファイルに列挙されているコンピュータ上に並列プロセスを起動するように指示する（ステップ（３））。ホストファイルについて、共有ストレージ１３の格納場所を指定するようにしても良いし、実際にホストファイルを送信するようにしても良い。
【００３５】
その後、図１３の処理に移行して、起動サーバ１２は、例えば共有ストレージ１３に格納されているホストファイルを取得し（ステップ（４））、ホストファイルに定義されている起動先のコンピュータcomp00、comp05、comp10及びcomp12を特定する（ステップ（５））。そして、起動サーバ１２は、起動先のコンピュータcomp00、comp05、comp10及びcomp12上に、並列プロセスを起動する（ステップ（６））。この際、起動サーバ１２は、同一のジョブについて起動されたプロセスの識別子と当該プロセスが起動された起動先コンピュータの識別子とを対応付ける対応表を生成し、共有ストレージ１３に格納して格納場所を通知するか、対応表を起動先コンピュータに送信する。起動先コンピュータには、さらにそのコンピュータ上で起動されるプロセスの識別子も通知する。
【００３６】
図１４に、対応表の一例を示す。図１４の例では、プロセス識別子（Proc0，Proc1，Proc2，Proc3。但し、「Ｐｒｏｃ」部分は分かりやすくするための添え字であり、０乃至３が識別子であるとする。）に対応付けて起動先コンピュータの識別子（comp00，comp05，comp10，comp12）が対応付けられている。プロセス識別子については、本実施の形態では、０乃至３といった連続する整数値であるものとする。
【００３７】
次に、図１５乃至図２０を用いて、起動先コンピュータについて説明する。図１５は、起動先コンピュータ１００の機能構成を模式的に示した図であり、起動サーバ１２によって、起動先コンピュータ１００では、動的に並列プロセス１１０が起動される。この並列プロセス１１０の処理に関連するデータについてはデータ格納領域１３０に格納される。また、起動先コンピュータ１００には通信ライブラリ１２０も用意されている。通信ライブラリ１２０は、例えばＭＰＩ仕様に従ったライブラリであり、MPI_Initモジュールに相当する初期処理部１２１と、MPI_AlltoAllモジュールに相当する全対全通信部１２３とを含む。並列プロセス１１０は、初期処理部１２１を呼び出してプロセス間通信を行うための初期処理を実施させ、全対全通信を行う場合には全対全通信部１２３を呼び出して同じジョブについて起動された全ての並列プロセス間で全対全通信を行わせる。通信ライブラリ１２０の初期処理部１２１及び全対全通信部１２３は、場合によってはデータ格納領域１３０に格納されているデータを用いて処理を行う。なお、通信ライブラリ１２０には、他のモジュールも含まれるが、ここでは本実施の形態に関係するもののみを示している。
【００３８】
起動サーバ１２は、上で述べたように、同一のジョブについて起動されたプロセスの識別子と当該プロセスが起動された起動先コンピュータの識別子とを対応付ける対応表と、その起動先コンピュータに起動したプロセスの識別子とを通知するが、これらのデータについては例えばデータ格納領域１３０に格納される。なお、上で述べたように、対応表については共有ストレージ１３に格納される場合もあり、その場合にはデータ格納領域１３０には格納場所のデータが格納される場合もある。
【００３９】
図１６及び図１７を用いて、具体的な処理について説明する。まず、起動された並列プロセス１１０は、通信ライブラリ１２０の初期処理部１２１を呼び出す（図１６：ステップＳ１）。初期処理部１２１は、呼び出されると、図１７に示すような処理を実施する。
【００４０】
初期処理部１２１は、対応表を取得する（図１７：ステップＳ１１）。データ格納領域１３０に対応表が格納されている場合には、当該データ格納領域１３０から読み込み、共有ストレージ１３に対応表が格納されている場合には、共有ストレージ１３から取得する。
【００４１】
また、初期処理部１２１は、ＬＩＤファイル（図９）に定義されている、上位スイッチの個数Ｎuを取得する（ステップＳ１３）。ＬＩＤファイルは、各コンピュータが保持している場合もあれば、共有ストレージ１３に格納されている場合もある。従って、初期処理部１２１は、例えばデータ格納領域１３０又は自コンピュータの何らかの記憶装置に保持されているＬＩＤファイルから、上位スイッチの個数Ｎuを読み出す。または、ネットワーク１０を介して共有ストレージ１３に格納されているＬＩＤファイルにアクセスして、当該ＬＩＤファイルから最上位スイッチの個数Ｎuを読み出す。ステップＳ１３で、共有ストレージ１３からＬＩＤファイル全てを読み込むようにしても良い。
【００４２】
次に、初期処理部１２１は、プロセスの識別子のカウンタｉを０に初期化する（ステップＳ１５）。そして、初期処理部１２１は、ステップＳ１１で取得した対応表からｉ番目のコンピュータの識別子を読み出す（ステップＳ１７）。図１４の例では、ｉ＝０であればcomp00が得られる。また、初期処理部１２１は、読み出したコンピュータの識別子に対応付けられているＬＩＤを、ＬＩＤファイルから取得する（ステップＳ１９）。ステップＳ１３と同じで、ＬＩＤファイルの保持場所から取得する。上でも述べたように各コンピュータには４つのＬＩＤが対応付けられているので、４つのＬＩＤを読み出す。当然通信経路（すなわち上位スイッチ）の数分ＬＩＤがＬＩＤファイルに登録されているので、全て読み出す。例えば、comp00に対応付けられているＬＩＤは、「１」「２」「３」「４」である。
【００４３】
その後、初期処理部１２１は、ｉの、上位スイッチの個数Ｎuについての剰余（＝ｉ  ｍｏｄ  Ｎu）の順番におけるＬＩＤを、ｉ番目のプロセスのＬＩＤとして特定する（ステップＳ２１）。ｉ＝０でＮu＝４とすると、剰余は０であるから、最初のＬＩＤ＝「１」が特定される。
【００４４】
そして、初期処理部１２１は、ｉが、対応表から特定される（プロセス数−１）以上となったか判断する（ステップＳ２３）。この条件を満たしていない場合には、初期処理部１２１は、ｉを１インクリメントする（ステップＳ２５）。そしてステップＳ１７に戻る。
【００４５】
プロセスの識別子ｉ＝１となると、対応するコンピュータの識別子comp05が特定される。そして、コンピュータの識別子comp05に対応付けられているＬＩＤ「２１」「２２」「２３」「２４」が得られる。「１」の、Ｎu＝４の剰余は「１」であるから、２番目のＬＩＤ「２２」が特定される。以下、同様に処理すれば、プロセスの識別子ｉ＝２については、ＬＩＤが「４３」と特定される。さらに、プロセスの識別子ｉ＝３については、ＬＩＤが「５２」と特定される。例えば、このようなプロセス識別子とＬＩＤとの対応付けデータ（図１８）については、例えばデータ格納領域１３０に格納される。コンピュータの識別子とＬＩＤとの対応付けデータを生成するようにしてもよい。対応表があれば、いずれの場合にも、プロセス識別子と起動先コンピュータの識別子とＬＩＤとの対応関係を特定できる。さらに、対応表に、特定されたＬＩＤを登録するようにしても良い。
【００４６】
以上のような処理は、各起動先コンピュータで並列して実施されることになる。
【００４７】
そうすると、初期処理部１２１は、ステップＳ２１で特定されたＬＩＤで、プロセス間の通信コネクションを構築する（ステップＳ２７）。この処理自体は、従来と同じであるからこれ以上述べない。
【００４８】
このような処理を行うことによって、他の起動先コンピュータの並列プロセスと通信する準備が完了したことになる。
【００４９】
そうすると、図１６の処理の説明に戻って、並列プロセス１１０は、プログラムに従って、ステップＳ２７で構築された通信コネクションを用いてプロセス間通信を行う（ステップＳ３）。このプロセス間通信は、例えば全対全通信部１２３による全対全通信の場合もあるが、一対一通信である場合もある。ステップＳ３は、並列プロセス１１０の処理が完了するまで行われる。
【００５０】
このようにプロセスの識別子又はコンピュータの識別子とＬＩＤとの対応付けを用いることによって、通信経路に偏りが発生しないので、データ通信時に上位スイッチと下位スイッチのリンクにリンク衝突が発生しないようになる。すなわち、ＬＩＤ「１」は上位スイッチＡを経由する通信経路に対応し、ＬＩＤ「２２」は上位スイッチＢを経由する通信経路に対応し、ＬＩＤ「４３」は上位スイッチＣを経由する通信経路に対応し、ＬＩＤ「５２」は上位スイッチＤを経由する通信経路に対応する。このように通信経路が重複していないため、リングアルゴリズムを用いた全対全通信を行う場合にもリンク競合が発生しない。
【００５１】
上で述べた例では、ステップＳ２１で、通信経路に含まれる上位スイッチがサイクリックになるように、各プロセス（又はコンピュータ）にＬＩＤを割り当てたが、他の方法で上位スイッチが分散するようにＬＩＤを割り当てるようにしても良い。
【００５２】
なお、上で述べた具体例ではプロセスの数が４つで少ないため、効果がわかりにくいが、例えば図６と同じような多段マルチパスネットワークを採用して、図６と同じコンピュータに８つのプロセスを起動した場合を図１９を用いて説明する。図１９に示すように、８つのプロセスが起動されたコンピュータには、左から順番に、上位スイッチＡ、Ｂ、Ｃ、Ｄ、Ａ、Ｂ、Ｃ、Ｄといったようにサイクリックに通信経路を変化させて対応するＬＩＤを割り当てている。従って、図６と同じように図２Ｅにおいてプロセス０乃至３が起動されているコンピュータがデータを送信している場面における通信状態において、リンク競合は発生していない。
【００５３】
たとえ、プロセスが起動されるコンピュータが変更されても同様である。例えば図２０に示すように、図１９とは異なるコンピュータでプロセスが起動されたとしても、プロセスが起動されたコンピュータには、図１９と同じようにサイクリックで、通信経路を変化させて対応するＬＩＤが割り当てられる。従って、図６と同じように図２Ｅにおいてプロセス０乃至３が起動されているコンピュータがデータを送信している場面における通信状態において、リンク競合は発生していない。
【００５４】
以上述べたように、通信経路を動的に変更できないような多段マルチパスネットワークにおいても、各コンピュータに対して通信経路毎のＬＩＤを割り当てておき、プロセスの起動先コンピュータに対して通信経路が分散するようにＬＩＤを選択すれば、リンク競合を避けることができるようになる。すなわち、プロセス間通信が高速に行われるようになり、並列処理の処理時間を短縮することができるようになる。
【００５５】
なお、上で述べた例ではMPI_Initに相当する初期処理部１２１が自ら各プロセスが起動されたコンピュータのＬＩＤを特定していたが、例えば図２１に示すようなシステムを採用して、ＬＩＤ管理コンピュータ１４によって集中的にＬＩＤを特定するようにしても良い。ＬＩＤ管理コンピュータ１４は、起動サーバ１２やスケジューリングサーバ１１と一体となっている場合もある。さらに、起動サーバ１２と同じように、プロセス識別子が最小のプロセスが起動されたコンピュータが、ＬＩＤ管理コンピュータ１４のように動作する場合もある。
【００５６】
図２１のシステムでは、共有ストレージ１３の代わりにＬＩＤ管理コンピュータ１４がネットワーク１０に接続されている。ＬＩＤ管理コンピュータ１４は、データ格納部１４１を有している。データ格納部１４１には、ＬＩＤファイル（図９）が格納されている。また、起動サーバ１２が対応表をＬＩＤ管理コンピュータ１４に通知する場合には、対応表もデータ格納部１４１に格納されることもある。
【００５７】
次に、このようなＬＩＤ管理コンピュータ１４を導入した場合の動作例を図２２を用いて説明する。並列プロセス１１０が起動されて初期処理部１２１が呼び出された後、初期処理部１２１は、ＬＩＤ決定要求をＬＩＤ管理コンピュータ１４に送信する（ステップＳ３１）。ＬＩＤ決定要求は、例えば対応表を含む。対応表が、起動サーバ１２からＬＩＤ管理コンピュータ１４に通知済みであれば、例えば対応表の識別情報をＬＩＤ決定要求に含むようにすればよい。
【００５８】
ＬＩＤ管理コンピュータ１４は、起動先コンピュータからＬＩＤ決定要求を受信すると（ステップＳ３３）、ＬＩＤ決定処理を実施する（ステップＳ３５）。ＬＩＤ決定処理は、図１７の処理フローにおけるステップＳ１１乃至Ｓ２５までの処理である。なお、対応表のデータを並列プロセスの起動先コンピュータ（選択コンピュータとも呼ぶ）から受信する場合には、当該受信がステップＳ１１の取得に相当する。
【００５９】
ＬＩＤ管理コンピュータ１４は、ＬＩＤ決定処理で特定された、プロセス識別子又はコンピュータ識別子若しくはその両方とＬＩＤとの組み合わせを、ＬＩＤ決定要求の要求元コンピュータに送信する（ステップＳ３７）。起動先コンピュータの初期処理部１２１は、ＬＩＤ管理コンピュータ１４からプロセス識別子又はコンピュータ識別子若しくはその両方とＬＩＤとの組み合わせのデータを受信し、例えばデータ格納領域１３０に格納する（ステップＳ３９）。そして、初期処理部１２１は、図１７のステップＳ２７と同じように、受信したデータを用いて、起動プロセス間の通信コネクションを構築する（ステップＳ４１）。
【００６０】
このようにすれば、初期処理部１２１の処理負荷が軽減される。
【００６１】
なお、起動サーバ１２の機能を有するコンピュータが、リクエストベースではなく、図１７のステップＳ１１乃至Ｓ２５の処理を、プロセスを起動する前などに実施して、図１８に示すようなデータと対応表などと共に各起動先コンピュータに通知するようにしても良い。この場合、起動サーバ１２による対応表の生成が対応表の取得に相当する。
【００６２】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、図１７の処理フローは一例であって、処理結果が変わらない限り、ステップの順番を入れ替えたり、並列実施するようにしても良い。例えば、ステップＳ１１乃至Ｓ１５については順番を入れ替えたりしても良い。
【００６３】
なお、上で述べたコンピュータ１００、起動サーバ１２及びスケジューリングサーバ１１は、コンピュータ装置であって、図２３に示すように、メモリ２５０１とＣＰＵ２５０３とハードディスク・ドライブ（ＨＤＤ）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００６４】
初期処理部１２１及び全対全通信部１２３を含む通信ライブラリ１２０は、ＣＰＵ２５０３により実行される。
【００６５】
以上述べた本実施の形態をまとめると、以下のようになる。
【００６６】
本実施の形態に係る方法は、（Ａ）中継装置が２階層以上にまたがるマルチパスネットワークに接続された複数のコンピュータのうち並列プロセスが起動される選択コンピュータの識別子と並列プロセスの識別子との組み合わせを複数含む対応付けデータを取得するステップと、（Ｂ）複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、上記マルチパスネットワークにおける通信経路毎のネットワーク識別子から、対応付けデータにおいて識別子が含まれる選択コンピュータ毎に、当該選択コンピュータ間で通信経路が分散するように使用すべきネットワーク識別子を特定する特定ステップとを含む。
【００６７】
このようにすれば、上記のようなマルチパスネットワークにおいて全対全通信を行う場合でもリンク競合を回避することができるようになる。なお、この方法を実行するコンピュータは、上記のようなマルチパスネットワークに接続された複数のコンピュータであってもよいし、他のコンピュータの場合もある。
【００６８】
また、上記方法は、特定されたネットワーク識別子を用いて並列プロセス間のコネクションを構築するステップをさらに含むようにしても良い。例えば、並列プロセスの起動後初期処理として上記方法を実行する場合には、このようにコネクションを予め構築することで、実際のプロセス間通信を早期に開始することができ、全体としての処理時間を短縮することができるようになる。
【００６９】
なお、上で述べた通信経路が、上記マルチパスネットワークにおいて経由する最上位スイッチで特定される場合もある。例えば２段のマルチパスネットワークにおいては、経由する最上位スイッチが通信経路を表すようになる。
【００７０】
さらに、並列プロセスの識別子の各々に、並列プロセスの起動個数の連続する整数値のいずれかが割り当てられ、ネットワーク識別子が、複数のコンピュータに含まれるコンピュータ毎に、対応する通信経路の所定の順番に並べられている場合もある。このような場合、上で述べた特定ステップは、並列プロセスの識別子である整数値の、通信経路の数についての剰余の順番におけるネットワーク識別子を特定するステップを含むようにしてもよい。このようにすれば簡単にネットワーク識別子を特定することができる。
【００７１】
また、本実施の形態に係る情報処理装置（図２４：５００）は、（Ａ）中継装置が２階層以上にまたがるマルチパスネットワークに接続された複数のコンピュータのうち並列プロセスが起動される選択コンピュータの識別子と並列プロセスの識別子との組み合わせを複数含む対応付けデータ（図２４：５３０）を取得する取得部（図２４：５１０）と、（Ｂ）複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、上記マルチパスネットワークにおける通信経路毎のネットワーク識別子から、対応付けデータにおいて識別子が含まれる選択コンピュータ毎に、当該選択コンピュータ間で通信経路が分散するように使用すべきネットワーク識別子を特定する特定処理部（図２４：５２０）とを有する。
【００７２】
なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、ＣＤ−ＲＯＭなどの光ディスク、光磁気ディスク、半導体メモリ（例えばＲＯＭ）、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、ＲＡＭ等の記憶装置に一時保管される。
【００７３】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００７４】
（付記１）
中継装置が２階層以上にまたがるマルチパスネットワークに接続された複数のコンピュータのうち並列プロセスが起動されるコンピュータである選択コンピュータの識別子と前記並列プロセスの識別子との組み合わせを複数含む対応付けデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記マルチパスネットワークにおける通信経路毎のネットワーク識別子から、前記対応付けデータにおいて識別子が含まれる選択コンピュータ毎に、当該選択コンピュータ間で前記通信経路が分散するように使用すべきネットワーク識別子を特定する特定ステップと、
を、前記コンピュータ又は前記マルチパスネットワークに接続されている管理コンピュータに実行させるプログラム。
【００７５】
（付記２）
特定された前記ネットワーク識別子を用いて前記並列プロセス間のコネクションを構築するステップ
をさらに実行させる付記１記載のプログラム。
【００７６】
（付記３）
前記通信経路が、前記マルチパスネットワークにおいて経由する最上位スイッチで特定される
付記１又は２記載のプログラム。
【００７７】
（付記４）
前記並列プロセスの識別子の各々に、前記並列プロセスの起動個数の連続する整数値のいずれかが割り当てられており、
前記ネットワーク識別子が、前記複数のコンピュータに含まれるコンピュータ毎に、対応する通信経路の所定の順番に並べられており、
前記特定ステップが、
前記並列プロセスの識別子である整数値の、前記通信経路の数についての剰余の順番におけるネットワーク識別子を特定するステップ
を含む付記１乃至３のいずれか１つ記載のプログラム。
【００７８】
（付記５）
中継装置が２階層以上にまたがるマルチパスネットワークに接続された複数のコンピュータのうち並列プロセスが起動されるコンピュータである選択コンピュータの識別子と前記並列プロセスの識別子との組み合わせを複数含む対応付けデータを取得する取得部と、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記マルチパスネットワークにおける通信経路毎のネットワーク識別子から、前記対応付けデータにおいて識別子が含まれる選択コンピュータ毎に、当該選択コンピュータ間で前記通信経路が分散するように使用すべきネットワーク識別子を特定する特定処理部と、
を有する情報処理装置。
【００７９】
（付記６）
中継装置が２階層以上にまたがるマルチパスネットワークに接続された複数のコンピュータのうち並列プロセスが起動されるコンピュータである選択コンピュータの識別子と前記並列プロセスの識別子との組み合わせを複数含む対応付けデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記マルチパスネットワークにおける通信経路毎のネットワーク識別子から、前記対応付けデータにおいて識別子が含まれる選択コンピュータ毎に、当該選択コンピュータ間で前記通信経路が分散するように使用すべきネットワーク識別子を特定する特定ステップと、
を含み、前記コンピュータ又は前記多段マルチパスネットワークに接続される管理コンピュータにより実行される情報処理方法。
【符号の説明】
【００８０】
１０  ネットワーク    １１  スケジューリングサーバ
１２  起動サーバ    １３  共有ストレージ
１４  ＬＩＤ管理コンピュータ
【図１】
0005540963.tif 000002
【図２Ａ】
0005540963.tif 000003
【図２Ｂ】
0005540963.tif 000004
【図２Ｃ】
0005540963.tif 000005
【図２Ｄ】
0005540963.tif 000006
【図２Ｅ】
0005540963.tif 000007
【図２Ｆ】
0005540963.tif 000008
【図２Ｇ】
0005540963.tif 000009
【図２Ｈ】
0005540963.tif 000010
【図３】
0005540963.tif 000011
【図４】
0005540963.tif 000012
【図５】
0005540963.tif 000013
【図６】
0005540963.tif 000014
【図７】
0005540963.tif 000015
【図８】
0005540963.tif 000016
【図９】
0005540963.tif 000017
【図１０】
0005540963.tif 000018
【図１１】
0005540963.tif 000019
【図１２】
0005540963.tif 000020
【図１３】
0005540963.tif 000021
【図１４】
0005540963.tif 000022
【図１５】
0005540963.tif 000023
【図１６】
0005540963.tif 000024
【図１７】
0005540963.tif 000025
【図１８】
0005540963.tif 000026
【図１９】
0005540963.tif 000027
【図２０】
0005540963.tif 000028
【図２１】
0005540963.tif 000029
【図２２】
0005540963.tif 000030
【図２３】
0005540963.tif 000031
【図２４】
0005540963.tif 000032