説明

情報処理方法、装置及びプログラム

【課題】マルチパスネットワークにおけるリンク競合を回避する。
【解決手段】多段マルチパスネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第1のデータを取得し、複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、ネットワークにおける通信経路毎のネットワーク識別子から、選択コンピュータを順序づけるための識別番号間の差が等しい選択コンピュータ間の通信経路の重複を避けるように、第1のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する。

【発明の詳細な説明】
【技術分野】
【0001】
本技術は、階層化された複数の中継装置を備えたネットワークにおける通信制御技術に関する。
【背景技術】
【0002】
近年、複数のコンピュータを高速ネットワークなどで接続してクラスタを構築し、HPC(High Performance Computing)システムの実現が図られている。このクラスタシステムで並列処理プログラムを実行する場合には、並列プロセスを複数のコンピュータに分散して起動させる。そのため、並列プロセス間でデータ交換を行う場合には、コンピュータ間で通信を行うことになる。従って、コンピュータ間通信の性能が、クラスタシステムに影響を及ぼす。
【0003】
コンピュータ間通信の性能を向上させるためには、例えばInfiniBandやMyrinet等の高性能ネットワークや、この高性能ネットワークを使いこなす通信ライブラリの影響を考慮する。クラスタシステム上では、MPI(Message Passing Interface)と呼ばれる通信API(Application Program Interface)で記述された並列処理プログラムが実行されることが多い。そのため、MPI仕様に基づく様々な通信ライブラリが提供されている。
【0004】
例えば図1に示すように、プロセス0乃至N−1が、N個のコンピュータ上に分散して起動された場合、並列処理プログラムで規定されている計算処理の合間に、データ交換のためのプロセス間通信が行われることが多い。図1では起動された全てのプロセス間で通信を行う例を示しているが、特定のプロセス間で一対一通信を行う場合もある。プロセス間通信ではMPIライブラリの該当サブルーチンを呼び出して通信を行うことになる。
【0005】
並列処理プログラムにおけるプロセス間通信のパターンはプログラム次第であり多種多様である。その中でも、図1に示したように起動された全ての並列プロセス間でデータ交換を行う通信パターンである全対全(All−to−All)は、着目される通信パターンの1つとされている。そこで、MPI仕様でも、MPI_Alltoall()というサブルーチンで全対全通信を実現することが求められている。全対全通信を実現するアルゴリズムは様々存在するが、比較的データサイズが大きく且つネットワークの帯域幅で性能が律速されるケースでは、リング(Ring)アルゴリズムが使われることが多い。
【0006】
リングアルゴリズムについて図2A乃至図2Hを用いて説明する。図2Aに示すように、プロセス0からプロセス7までの8つのプロセスが起動された場合を考える。このような場合、まず、図2Bに示すように、各プロセスは、プロセス番号が1つ前のプロセスからデータを受信し、プロセス番号が1つ後のプロセスへデータを送信する。なお、プロセス番号「7」の後のプロセスはプロセス番号「0」のプロセスであり、プロセス番号「0」の前のプロセスはプロセス番号「7」のプロセスとする。
【0007】
そして、図2Cに示すように、各プロセスは、プロセス番号が2つ前のプロセスからデータを受信し、プロセス番号が2つ後のプロセスへデータを送信する。さらに、図2Dに示すように、各プロセスは、プロセス番号が3つ前のプロセスからデータを受信し、プロセス番号が3つ後のプロセスへデータを送信する。また、図2Eに示すように、各プロセスは、プロセス番号が4つ前のプロセスからデータを受信し、プロセス番号が4つ後のプロセスへデータを送信する。さらに、図2Fに示すように、各プロセスは、プロセス番号が5つ前のプロセスからデータを受信し、プロセス番号が5つ後のプロセスへデータを送信する。また、図2Gに示すように、各プロセスは、プロセス番号が6つ前のプロセスからデータを受信し、プロセス番号が6つ後のプロセスへデータを送信する。さらに、図2Hに示すように、各プロセスは、プロセス番号が7つ前のプロセスからデータを受信し、プロセス番号が7つ後のプロセスへデータを送信する。
【0008】
リングアルゴリズムを採用する場合には、以下で述べるような問題のあるネットワーク構成でなければ、効率よく全対全通信を行うことができる。
【0009】
次に、ネットワーク構成について考察する。図3に示すように、使用されるコンピュータの数が少ない場合には、1つのネットワークスイッチSW(以下、スイッチと略する)によってそれらのコンピュータを接続することができる。すなわち、8つのコンピュータが1つのスイッチに接続されており、各コンピュータに1つのプロセスが起動されている。このような場合にはクロスバー接続と等価であり、起動されているプロセス間で全対全通信を行っても、ネットワークリンクで競合が発生することはない。
【0010】
一方、使用されるコンピュータの数が1つのスイッチで接続可能な数を超えると、スイッチを多段にしたネットワーク構成となる。シンプルな多段スイッチ構成のネットワーク構成は図4に示すようなツリー(Tree)ネットワークである。図4では、説明の都合上、コンピュータの数及び起動されるプロセスの数は図3の例と同じであるが、スイッチSWのポート数が8未満であるものとしている。また、図2Eにおいてプロセス0乃至3がデータを送信している場面における通信状態を示している。スイッチを2段にして上位スイッチの数を最小である「1」に抑えているため、上位スイッチと下位スイッチとの間のリンクの帯域が不足している。よって、8つのプロセスで全対全通信を行おうとすると、図4で丸で示したように、上位スイッチと下位スイッチとの間のリンクで競合が発生して、スループットが低下する。
【0011】
そのため、ネットワーク性能を重視する場合には、ファットツリー(FatTree)ネットワークを採用する場合が多い。図5の例では、上位スイッチ(SW)を3つに増加させ、下位スイッチから上位スイッチへのリンク(アップリンクとも呼ぶ)の数を、下位スイッチからコンピュータへのリンク(ダウンリンクとも呼ぶ)の数に一致させている。なお、図5において下位スイッチに接続されている単なる四角はコンピュータを示しており、四角の中の括弧付き数字はコンピュータの識別子を表している。また、丸はプロセスを表しており、丸の中の数字はプロセス識別子を表している。図5では、コンピュータ「3」乃至「11」にプロセス「0」乃至「8」が起動されている状態を表している。さらに、図5の状態では、各コンピュータには四角の下に示されている数字で表される上位スイッチが割り当てられている。例えば、プロセス0が起動されているコンピュータ3には上位スイッチ0が割り当てられており、コンピュータ3へデータを送信する場合には、データは上位スイッチ0を経由してコンピュータ3に到達する。また、コンピュータ17には上位スイッチ2が割り当てられており、コンピュータ17へデータを送信する場合には、データは上位スイッチ2を経由してコンピュータ17に到達する。
【0012】
そして、3つのプロセス0乃至2が自プロセス番号に3を加算した番号のプロセス3乃至5にデータをそれぞれ送信する場合を考える。この場合、プロセス3に割り当てられている上位スイッチ0を経由してプロセス0からデータ送信が行われ、プロセス4に割り当てられている上位スイッチ1を経由してプロセス1からデータ送信が行われ、プロセス5に割り当てられている上位スイッチ2を経由してプロセス2からデータ送信が行われる。このようにすれば、リンク競合が発生することはない。
【0013】
しかし、上で述べたInfiniBandのようなパケット転送経路を動的に変更できないネットワーク(すなわち静的ルーティングネットワーク)では、上位スイッチと下位スイッチ間の特定のリンクに通信が集中することがある。図6は、その一例を示したものである。図6の例では16台のコンピュータが、上位スイッチ4台と下位スイッチ4台のファットツリーネットワークに接続されている。一般に、HPCシステムにおいては、各コンピュータの稼働状況などに応じて使用するコンピュータが選択されて、この選択コンピュータにおいてプロセスが起動される。しかしながら、選択コンピュータの組合せにより、各コンピュータに送出するパケットが経由する上位スイッチに、偏りが生じる可能性がある。
【0014】
図6の例では、プロセス「0」「4」「6」「7」が起動されたコンピュータへのデータ送信は上位スイッチ「0」を経由するように設定されている。プロセス「1」「5」が起動されたコンピュータへのデータ送信は上位スイッチ「1」を経由するように設定されている。プロセス「2」が起動されたコンピュータへのデータ送信は上位スイッチ「2」を経由するように設定されている。プロセス「3」が起動されたコンピュータへのデータ送信は上位スイッチ「3」を経由するように設定されている。そうすると、図2Eにおいてプロセス0乃至3が起動されているコンピュータがデータを送信している場面では、図6に示すように、プロセス「1」が起動されたコンピュータからプロセス「5」が起動されたコンピュータへのデータ通信以外は、上位スイッチ「0」へのアップリングが用いられるので、丸で示したリンクで競合が発生してしまう。
【0015】
このように、ファットツリーネットワークを採用した場合においても、特定のリンクに通信負荷が集中して、通信性能が低下するという状況が生じ得る。これは、InfiniBandのような静的ルーティングネットワークを採用する場合に生じ得る。すなわち、ネットワークにおいてルーティングに用いられるネットワーク識別子(InfiniBandではLIDと呼ぶ)が1つだけコンピュータに割り当てられ、各スイッチではこのネットワーク識別子とパケット転送先ポートとの対応付けが固定的である場合に問題となる。具体的には、図6の最下段に示すように、最も左のコンピュータのLIDは「1」となっており、このコンピュータ宛のパケットは、上位スイッチ「0」を経由することが固定的である。同様に、最も右のコンピュータのLIDは「16」となっており、このコンピュータ宛のパケットは、上位スイッチ「3」を経由することが固定的である。
【0016】
さらに、上でも述べたように、並列プロセスを起動するコンピュータの選択は、コンピュータに割り当てられているLIDの経路設定との関係を考慮せずに行われているため、データ送信時の通信経路(ここでは、データ送信時に経由する上位スイッチ)に偏りが生じてしまう場合がある。
【0017】
なお、リンク競合が発生しやすい例として上では全対全通信を一例として説明したが、図6に示したようなコンピュータが選択されてプロセスが起動されてしまうと、そのほかの場面(例えば一対一通信を複数のプロセス組み合わせで同時に行う場合など)でも上位スイッチ「0」を経由するようなデータ通信が発生しやすくなり、結果としてリンク競合が発生する可能性も増加している。
【0018】
このような問題を解決するために、各々上位スイッチに対応付けられた複数のLIDを、コンピュータの各々に割り当てておき、並列プロセスを起動するコンピュータで上位スイッチが重ならないように、動的にLIDを選択するような方式も提案されている。図7に例を示す。
【0019】
図7では、3つの上位スイッチと、6つの下位スイッチとを含むファットツリーネットワークを示しており、下位スイッチ0乃至5には合計18台のコンピュータが接続されている。ここで、各コンピュータには、上位スイッチAを経由する通信経路のためのLIDと、上位スイッチBを経由する通信経路のためのLIDと、上位スイッチCを経由する通信経路のためのLIDとが割り当てられている。図7の下段には、例えばコンピュータ「0」については、上位スイッチA(「A」は括弧内に示されている)を経由する通信経路のためのLID「4」と、上位スイッチBを経由する通信経路のためのLID「5」と、上位スイッチCを経由する通信経路のためのLID「6」とが割り当てられている。同様に、コンピュータ「10」(コンピュータ「11」の1つ左側のコンピュータ)には、上位スイッチAを経由する通信経路のためのLID「44」と、上位スイッチBを経由する通信経路のためのLID「45」と、上位スイッチCを経由する通信経路のためのLID「46」とが割り当てられている。
【0020】
このような状態で、図7の下段において点線で囲んでいるように、プロセス「0」が起動されるコンピュータ「3」でLID「16」を使用し、プロセス「1」が起動されるコンピュータ「4」でLID「21」を使用し、プロセス「2」が起動されるコンピュータ「5」でLID「26」を使用し、プロセス「3」が起動するコンピュータ「6」でLID「28」を使用し、プロセス「4」が起動するコンピュータ「7」でLID「33」を使用し、プロセス「5」が起動するコンピュータ「8」でLID「38」を使用し、プロセス「6」が起動するコンピュータ「9」でLID「40」を使用し、プロセス「7」が起動するコンピュータ「10」でLID「45」を使用するものとする。このようにすれば、対応付けられている上位スイッチに偏りを生じないようにLIDが選択される。このようなLIDの選択方法を採用する場合には、プロセスが起動されるコンピュータの数が、使用する上位スイッチの数の倍数の場合には有効であるが、必ずしもこのような条件が満たされるわけではない。
【0021】
例えば、図7に具体的に示すように、上位スイッチが3つあるのに対して、起動されるプロセスが8つで上記条件を満たさない場合を考察する。このような場合に、プロセス「3」乃至「5」が、番号で3つ先のプロセス「6」「7」「0」(プロセス「0」はプロセス「8」がないために選択される)にデータを送信しようとする。そうすると、プロセス「3」乃至「5」が起動されているコンピュータ「6」乃至「8」が接続されている下位スイッチ2が同じであり、さらにプロセス「3」の送信先であるプロセス「6」のLID「40」とプロセス「5」の送信先であるプロセス「0」のLID「16」とが共に上位スイッチ「A」に対応付けられているため、リンク衝突が発生してしまう。
【0022】
このような問題に着目している従来技術は存在していない。
【先行技術文献】
【非特許文献】
【0023】
【非特許文献1】成瀬彰、中島耕太、住元真司、久門耕一、「多段スイッチInfiniBandネットワークにおける全対全通信性能の評価」、情報処理学会研究報告、2010年8月3日発表
【発明の概要】
【発明が解決しようとする課題】
【0024】
本技術の目的は、一側面においては、リンク競合を回避するための技術を提供することである。
【課題を解決するための手段】
【0025】
第1の態様に係る方法は、(A)階層化された中継装置のうち第1の階層に含まれる中継装置から当該第1の階層の1つ上の階層である第2の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第1のデータを取得するステップと、(B)複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、ネットワークにおける通信経路毎のネットワーク識別子から、選択コンピュータを順序づけるための識別番号間の差が等しい選択コンピュータ間の通信経路の重複を避けるように、第1のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップとを含む。
【0026】
第2の態様に係る方法は、第1のスイッチ群と、該第1のスイッチ群に接続された第2のスイッチ群と、第1のスイッチ群に含まれる複数のスイッチに接続された複数のノードとを備え、通信に用いるアドレスに応じて異なる通信経路を辿り得る通信システムにおける通信方法であって、複数のノードは、複数のノードがリング状に所定の順で配置された場合に通信を行うノード間に介在するノード数が第1の数となる通信相手関係で通信を行う第1の状態から、通信を行うノード間に介在するノード数が第2の数となる通信相手関係で通信を行う第2の状態に切り替える制御を行う。複数のノードは、第1の状態では、複数のノードに対して第1のパターンで割り当てられた第1のアドレス群を用いて通信を行う。第2の状態では、複数のノードに対して該第1のパターンとは異なる第2のパターンで割り当てられた第2のアドレス群を用いて通信を行うように、通信に用いるアドレスを切り替える制御を行う。
【発明の効果】
【0027】
リンク競合の回避を図ることができる。
【図面の簡単な説明】
【0028】
【図1】図1は、プロセス間通信を説明するための図である。
【図2A】図2Aは、リングアルゴリズムを説明するための図である。
【図2B】図2Bは、リングアルゴリズムを説明するための図である。
【図2C】図2Cは、リングアルゴリズムを説明するための図である。
【図2D】図2Dは、リングアルゴリズムを説明するための図である。
【図2E】図2Eは、リングアルゴリズムを説明するための図である。
【図2F】図2Fは、リングアルゴリズムを説明するための図である。
【図2G】図2Gは、リングアルゴリズムを説明するための図である。
【図2H】図2Hは、リングアルゴリズムを説明するための図である。
【図3】図3は、ネットワーク構成の一例を示す図である。
【図4】図4は、ネットワーク構成の一例を示す図である。
【図5】図5は、ファットツリーネットワークにおける全対全通信を説明するための図である。
【図6】図6は、ファットツリーネットワークにおいてリンク競合が発生する場合の例を示す図である。
【図7】図7は、従来技術の問題を説明するための図である。
【図8】図8は、第1の実施の形態における多段マルチパスネットワークの一例を示す図である。
【図9】図9は、第1の実施の形態に係るLIDファイルの一例を示す図である。
【図10】図10は、第1の実施の形態におけるシステムの一例を示す図である。
【図11】図11は、第1の実施の形態に係るシステムの動作を説明するための図である。
【図12】図12は、第1の実施の形態に係るホストファイルの一例を示す図である。
【図13】図13は、第1の実施の形態におけるシステムの動作を説明するための図である。
【図14】図14は、第1の実施の形態に係る対応表の一例を示す図である。
【図15】図15は、第1の実施の形態において並列プロセスが起動されたコンピュータの構成を説明するための図である。
【図16】図16は、第1の実施の形態において並列プロセスが起動されたコンピュータの動作を説明するための図である。
【図17A】図17Aは、第1の実施の形態に係る初期処理部の動作を説明するための図である。
【図17B】図17Bは、第1の実施の形態に係るローカルコンピュータ番号の付与を説明するための図である。
【図17C】図17Cは、第1の実施の形態に係るシフト距離テーブルの一例を示す図である。
【図17D】図17Dは、第1の実施の形態に係るシフト距離テーブルの一例を示す図である。
【図17E】図17Eは、第1の実施の形態に係るシフト距離テーブルの一例を示す図である。
【図17F】図17Fは、第1の実施の形態に係るシフト距離テーブルの一例を示す図である。
【図17G】図17Gは、第1の実施の形態に係る第2対応表の一例を示す図である。
【図18】図18は、第2の実施の形態における多段マルチパスネットワークの一例を示す図である。
【図19】図19は、第2の実施の形態に係るLIDファイルの一例を示す図である。
【図20】図20は、第2の実施の形態におけるシステムの一例を示す図である。
【図21】図21は、第2の実施の形態に係るシステムの動作を説明するための図である。
【図22】図22は、第2の実施の形態に係るホストファイルの一例を示す図である。
【図23】図23は、第2の実施の形態におけるシステムの動作を説明するための図である。
【図24】図24は、第2の実施の形態に係る対応表の一例を示す図である。
【図25】図25は、第2の実施の形態において並列プロセスが起動されたコンピュータの構成を説明するための図である。
【図26】図26は、第2の実施の形態において並列プロセスが起動されたコンピュータの動作を説明するための図である。
【図27】図27は、第2の実施の形態に係る初期処理部の動作を説明するための図である。
【図28】図28は、第2の実施の形態に係るローカルコンピュータ番号の付与を説明するための図である。
【図29】図29は、第2の実施の形態に係る初期上位スイッチテーブルの一例を示す図である。
【図30】図30は、第2の実施の形態に係るシフト距離テーブルの一例を示す図である。
【図31】図31は、テーブル処理の処理フローを示す図である。
【図32】図32は、シフト距離テーブル更新処理の処理フローを示す図である。
【図33】図33は、初期化処理の処理フローを示す図である。
【図34】図34は、パス確定処理の処理フローを示す図である。
【図35】図35は、パス確定処理の処理フローを示す図である。
【図36】図36は、通信経路重複を回避する処理を説明するための図である。
【図37】図37は、シフト距離テーブルの一例を示す図である。
【図38】図38は、更新後のシフト距離テーブルの一例を示す図である。
【図39】図39は、最終上位スイッチテーブルの一例を示す図である。
【図40】図40は、第2の実施の形態に係る第2対応表を示す図である。
【図41】図41は、第2の実施の形態に係るLIDの割当状態を説明するための図である。
【図42】図42は、第2の実施の形態に係るLIDの割当状態を説明するための図である。
【図43】図43は、第2の実施の形態の効果を説明するための図である。
【図44】図44は、第2の実施の形態の効果を説明するための図である。
【図45】図45は、第2の実施の形態の効果を説明するための図である。
【図46】図46は、他の実施の形態におけるシステムの一例を示す図である。
【図47】図47は、他の実施の形態におけるシステムの動作を説明するための図である。
【図48】図48は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【0029】
[実施の形態1]
本技術の一実施の形態に係る多段(2段以上)マルチパスネットワークの例を図8に示す。この例では、2階層以上に階層化された中継装置のうち下層の各中継装置から1つ上層の複数の中継装置にパスが設けられているネットワークを1例として挙げている。図8では、3つの上位スイッチと、6つの下位スイッチとで、18台のコンピュータcomp00乃至comp17を接続する例を示している。下位スイッチ0乃至5のそれぞれは、上位スイッチA乃至Cに接続されている。すなわち、ある下位スイッチから他の下位スイッチへの通信経路は3重化されている。具体的には、上位スイッチAを経由する通信経路、上位スイッチBを経由する通信経路、及び上位スイッチCを経由する通信経路が存在する。本実施の形態では、各コンピュータには、このような3つの通信経路に対応して3つのネットワーク識別子(以下では、InfiniBandについて説明するものとしてLIDと呼ぶことにする)が予め割り当てられている。
【0030】
具体的には図8において各コンピュータcomp00乃至comp17の下に、割り当てられたLID及び通信経路(ここでは上位スイッチの識別子)とが示されている。例えば、コンピュータcomp00には、上位スイッチAを経由する通信経路についてのLID「4」と、上位スイッチBを経由する通信経路についてのLID「5」と、上位スイッチCを経由する通信経路についてのLID「6」とが割り当てられている。また、コンピュータcomp17には、上位スイッチAを経由する通信経路についてのLID「72」と、上位スイッチBを経由する通信経路についてのLID「73」と、上位スイッチCを経由する通信経路についてのLID「74」とが割り当てられている。
【0031】
各コンピュータは、以下で述べるように、LIDを用いて並列プロセス間の通信を行う。
【0032】
上位スイッチ及び下位スイッチの各々は、これらの各LIDについて対応する出力ポート番号を特定できるようになっている。このような多段マルチパスネットワークにおいて送信されるパケットのヘッダには、宛先コンピュータのLIDが設定されており、各スイッチでは、このLIDから、受信パケットをいずれの出力ポートに転送すべきかを特定できるようになっている。
【0033】
例えば、下位スイッチ5が、宛先コンピュータのLIDが「4」となっているパケットを受信した場合には、当該パケットを上位スイッチAに転送する。同じように、下位スイッチ5が、宛先コンピュータのLIDが「5」となっているパケットを受信した場合には、当該パケットを上位スイッチBに転送する。また、下位スイッチ5が、宛先コンピュータのLIDが「6」となっているパケットを受信した場合には、当該パケットを上位スイッチCに転送する。このようなパケットは、全てコンピュータcomp00宛のパケットであるが、上で述べたように経由する上位スイッチは異なっている。
【0034】
本実施の形態では、このような設定を表すLIDファイルを、各コンピュータ又は後に述べる共有ストレージに保持するものとする。図8に示した設定に対応するLIDファイルの一例を図9に示す。図9の例では、LIDファイルには、第1行にLIDファイルである旨のデータが含まれ、第2行に上位スイッチの数「3」(すなわち、通信経路の数)が含まれている。第3行目以降に、各コンピュータの識別子と、割り当てられている3つのLIDとの対応付けが含まれている。本実施の形態では、左から、上位スイッチAを経由する通信経路についてのLID、上位スイッチBを経由する通信経路についてのLID、上位スイッチCを経由する通信経路についてのLIDが並べられている。このような並べ方に限定されるものではないが、各コンピュータについて、同じ並べ方を採用する。
【0035】
次に、図10を用いて、図8に示した多段マルチパスネットワークを含むシステムの構成例を説明する。図10においては、図8に示した上位スイッチA乃至C及び下位スイッチ0乃至5は明示していないが、コンピュータcomp00乃至comp17が接続されているネットワーク10に含まれているものとする。このネットワーク10には、スケジューリングサーバ11と、起動サーバ12と、ネットワーク10に接続されているコンピュータにより用いられる共有ストレージ13とが接続されている。
【0036】
スケジューリングサーバ11は、コンピュータcomp00乃至comp17の稼働状況を把握し、次に起動すべき並列プロセス及び当該並列プロセスの起動先のコンピュータを決定し、当該並列プロセスを起動するように起動サーバ12に指示する。起動サーバ12は、スケジューリングサーバ11からの指示に応じて、並列プロセスを、指定されたコンピュータ上に起動する。
【0037】
図10では、起動サーバ12は、スケジューリングサーバ11とは別のコンピュータとして示されているが、スケジューリングサーバ11と物理的に同じサーバである場合もある。さらに、以下で述べるホストファイル(Hostfile)に記載されている先頭のコンピュータが起動サーバとして動作する場合もある。
【0038】
以下では、図10に示したようなシステムにおいて、8台のコンピュータに、8つの並列プロセスを起動する場合について説明する。本実施の形態では、並列プロセスはそれぞれ別のコンピュータ上に起動されるものとする。
【0039】
このような具体例について図11乃至図17Gを用いて図10に示したシステムの動作を説明する。まず、スケジューリングサーバ11は、コンピュータcomp00乃至comp17の稼働状況から、使用するコンピュータを選択する(ステップ(1))。例えば、コンピュータcomp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14を選択する。そして、スケジューリングサーバ11は、選択されたコンピュータの識別子(例えばコンピュータ名)を列挙したホストファイル(Hostfile)を生成し、共有ストレージ13に格納する(ステップ(2))。ホストファイルは、例えば図12に示すようなファイルである。図12で示すように、ステップ(1)で選択された8つのコンピュータの識別子が含まれる。
【0040】
そして、スケジューリングサーバ11は、起動サーバ12に対して、ホストファイルに列挙されているコンピュータ上に並列プロセスを起動するように指示する(ステップ(3))。ホストファイルについて、共有ストレージ13の格納場所を指定するようにしても良いし、実際にホストファイルを送信するようにしても良い。
【0041】
その後、図13の処理に移行して、起動サーバ12は、例えば共有ストレージ13に格納されているホストファイルを取得し(ステップ(4))、ホストファイルに定義されている起動先のコンピュータcomp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14を特定する(ステップ(5))。そして、起動サーバ12は、起動先のコンピュータcomp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14上に、並列プロセスを起動する(ステップ(6))。この際、起動サーバ12は、同一のジョブについて起動されたプロセスの識別子と当該プロセスが起動された起動先コンピュータの識別子とを対応付ける対応表を生成し、共有ストレージ13に格納して格納場所を通知するか、対応表を起動先コンピュータに送信する。起動先コンピュータには、さらにそのコンピュータ上で起動されるプロセスの識別子も通知する。各起動先コンピュータは、起動サーバ12又は共有ストレージ13から、対応表を取得し、自コンピュータで起動されるプロセスの識別子も取得する。
【0042】
図14に、対応表の一例を示す。図14の例では、プロセス識別子(Proc0,Proc1,Proc2,Proc3,Proc4,Proc5,Proc6,Proc7。但し、「Proc」部分は分かりやすくするための添え字であり、0乃至7が識別子であるとする。)に対応付けて起動先コンピュータの識別子(comp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14)が対応付けられている。
【0043】
次に、図15乃至図17Gを用いて、起動先コンピュータについて説明する。図15は、起動先コンピュータ100の機能構成を模式的に示した図であり、起動サーバ12によって、起動先コンピュータ100では、動的に並列プロセス110が起動される。この並列プロセス110の処理に関連するデータについてはデータ格納領域130に格納される。このデータ格納領域130には、ネットワーク100の構造に関するデータも含まれる。すなわち、上位スイッチと下位スイッチの接続関係、下位スイッチに接続されているコンピュータの識別子などがデータ格納領域130には格納されているものとする。
【0044】
また、起動先コンピュータ100には通信ライブラリ120も用意されている。通信ライブラリ120は、例えばMPI仕様に従ったライブラリであり、MPI_Initサブルーチンに相当する初期処理部121と、MPI_AlltoAllサブルーチンに相当する全対全通信部123とを含む。並列プロセス110は、初期処理部121を呼び出してプロセス間通信を行うための初期処理を実施させ、全対全通信を行う場合には全対全通信部123を呼び出して同じジョブについて起動された全ての並列プロセス間で全対全通信を行わせる。通信ライブラリ120の初期処理部121及び全対全通信部123は、場合によってはデータ格納領域130に格納されているデータを用いて処理を行う。なお、通信ライブラリ120には、他のサブルーチンも含まれるが、ここでは本実施の形態に関係するもののみを示している。
【0045】
次に、図16及び図17を用いて、具体的な処理について説明する。まず、起動された並列プロセス110は、通信ライブラリ120の初期処理部121を呼び出す(図16:ステップS1)。初期処理部121は、呼び出されると、図17Aに示すような処理を実施する。
【0046】
初期処理部121は、対応表を取得する(図17A:ステップS11)。データ格納領域130に対応表が格納されている場合には、当該データ格納領域130から読み込み、共有ストレージ13に対応表が格納されている場合には、共有ストレージ13から取得する。
【0047】
また、初期処理部121は、対応表から、プロセスが起動される起動先コンピュータを特定し(ステップS12)、各起動先コンピュータに対して、データ格納領域130に格納されているネットワーク構成のデータに従って、ローカルコンピュータ番号を付与する(ステップS13)。例えば、図17Bに模式的に示すように、起動先コンピュータを下位スイッチ毎にグループ化し、グループに含まれる起動コンピュータの数で降順にソートする。図17Bの例では、下位スイッチ1及び下位スイッチ4は、起動先コンピュータ数が「3」で、さらに下位スイッチ3は、起動先コンピュータ数が「2」である。同数の時にはスイッチの識別子でソートすると、下位スイッチ1、下位スイッチ4、下位スイッチ3の順番にソートされる。各下位スイッチに接続されている起動先コンピュータについては、例えばコンピュータの識別子に従う。そうすると、起動先コンピュータcomp03にはローカルコンピュータ番号「0」が付与され、起動先コンピュータcomp04にはローカルコンピュータ番号「1」が付与され、起動先コンピュータcomp05にはローカルコンピュータ番号「2」が付与され、起動先コンピュータcomp12にはローカルコンピュータ番号「3」が付与され、起動先コンピュータcomp13にはローカルコンピュータ番号「4」が付与され、起動先コンピュータcomp14にはローカルコンピュータ番号「5」が付与され、起動先コンピュータcomp10にはローカルコンピュータ番号「6」が付与され、起動先コンピュータcomp11にはローカルコンピュータ番号「7」が付与される。
【0048】
次に、初期処理部121は、シフト距離が等しい起動先コンピュータ間の通信経路の重複を避けるように、起動先コンピュータ毎に、他の起動先コンピュータとの通信に用いるべきLIDを、LIDファイル(図9)から選択する(ステップS15)。典型的な全対全通信では、図2A乃至図2Hで説明したように、通信相手を1つずつずらしながら全ての起動先コンピュータと通信を行う。本実施の形態では、通信相手をずらす幅をシフト距離と呼び、ローカルコンピュータ番号の差で表される。例えば、ローカルコンピュータ番号「1」からローカルコンピュータ番号「3」への通信であれば、シフト距離は「2」となる。
【0049】
上でも述べたように、典型的な全対全通信では、シフト距離が異なる起動先コンピュータ間での通信は同じ期間では行われないので、シフト距離が等しい起動先コンピュータ間の通信経路が重複しないようにすれば、リンク衝突を回避できる。従って、シフト距離毎に、シフト距離が等しい起動先コンピュータ間の通信経路が重複しないように、上位スイッチ及びLIDを選択する。
【0050】
例えば、送信元の起動先コンピュータのローカルコンピュータ番号毎に、各シフト距離について宛先の起動コンピュータのローカルコンピュータ番号を特定する。但し、同一の下位スイッチ配下における起動先コンピュータ間の通信であれば、上位スイッチを使用しないので、このような起動先コンピュータの組み合わせについては考察しない。例えば図17Cに示すように、ローカルコンピュータ番号「5」の起動先コンピュータであれば、シフト距離「1」であればローカルコンピュータ番号「6」の起動先コンピュータと通信し、シフト距離「2」であればローカルコンピュータ番号「7」の起動先コンピュータと通信し、シフト距離「3」であればローカルコンピュータ番号「0」の起動先コンピュータと通信し、シフト距離「4」であればローカルコンピュータ番号「1」の起動先コンピュータと通信し、シフト距離「5」であればローカルコンピュータ番号「2」の起動先コンピュータと通信する。シフト距離「5」であればローカルコンピュータ番号「3」の起動先コンピュータと通信するが、下位スイッチが同じであるから、検討対象外とする。シフト距離「6」であればローカルコンピュータ番号「4」の起動先コンピュータと通信するが、この場合にも下位スイッチが同じであるから、検討対象外とする。
【0051】
なお、通信経路の重複という観点からすれば、上で述べたような上位スイッチへの方向である上り方向だけではなく、上位スイッチから下位スイッチへの下り方向の重複も考慮する。そこで、図17Cの表では、下位スイッチ1については「x」、下位スイッチ4については「y」、下位スイッチ3については「z」という記号を用いて、通信相手のローカルコンピュータ番号と共に考慮するものとする。
【0052】
そして、シフト距離毎に、上り方向の通信経路が重複しないように上位スイッチを設定する。例えば、図17Dの表で示すように、シフト距離毎に、上位スイッチを分散するように設定する。特に、下位スイッチが同じ起動先コンピュータについては同一の上位スイッチを割り当てないようにする。但し、上でも述べたように上位スイッチから下位スイッチへの下り方向の重複も考慮しなければ通信経路の重複を避けることができない。そこで、シフト距離毎に、下位スイッチの記号xyzと上位スイッチの記号ABCとの組み合わせが一致している部分が存在するかを確認する。図17Dの例の場合、シフト距離「4」の場合には、ローカルコンピュータ番号「1」の通信相手であるローカルコンピュータ番号「5」について「5yB」が登録されており、ローカルコンピュータ番号「7」の通信相手であるローカルコンピュータ番号「3」について「3yB」が登録されている。この場合、上位スイッチBと下位スイッチ4(「y」に対応)とのパスにリンク衝突が発生する可能性がある。従って、いずれかの上位スイッチを変更する方が良い。同様に、シフト距離「5」の場合には、ローカルコンピュータ番号「0」の通信相手であるローカルコンピュータ番号「5」について「5yA」が登録されており、ローカルコンピュータ番号「6」の通信相手であるローカルコンピュータ番号「3」について「3yA」が登録されている。この場合、上位スイッチAと下位スイッチ4(「y」に相当)とのパスにリンク衝突が発生する可能性がある。従って、いずれかの上位スイッチを変更する方が良い。
【0053】
例えば図17Eに示すように、ローカルコンピュータ番号「6」及び「7」について問題となったシフト距離の部分の上位スイッチを重複が発生しないように選択し直す。このようにすれば、シフト距離毎に、通信経路が重複しないような上位スイッチの選択が可能となる。
【0054】
なお、上位スイッチが選択されれば、通信相手の起動先コンピュータとの組み合わせによって、LIDファイルから、対応するLIDを特定する。具体的には、起動先コンピュータのローカルコンピュータ番号を、ステップS13における対応付けに従ってLIDファイルに含まれるコンピュータの識別子に変換する。そして、LIDファイルから当該コンピュータの識別子に対応付けられており且つ該当する上位スイッチの順番のLIDを特定する。例えば図17Fに示すような選択結果が得られる。なお、ここで同一下位スイッチ配下の起動先コンピュータが通信相手である場合には、どのLIDを選択しても良いので、ランダムに設定する。
【0055】
以上述べた方法は簡易的な方法であり、他の手法を採用しても良い。
【0056】
図17Aの処理の説明に戻って、初期処理部121は、自起動先コンピュータについてのデータを抽出し、第2対応表を生成して、データ格納領域130に格納する(ステップS17)。例えば、自起動先コンピュータのローカルコンピュータ番号が「2」でありコンピュータの識別子が「comp05」である場合には、例えば図17Gに示すような第2対応表が生成される。具体的には、図17Fにおいてローカルコンピュータ番号「2」の行のデータを読み出し、LIDファイルから、ローカルコンピュータ番号をコンピュータの識別子に変換した後対応表(図14)のコンピュータの識別子に対応するLIDを特定して登録すればよい。このようにすれば、通信相手のプロセス又は起動先コンピュータ毎に、LIDを特定できるようになる。
【0057】
このように、本実施の形態では、各起動先コンピュータに固定のLIDを割り当てるのではなく、起動先コンピュータの組み合わせ毎に適切なLIDを選択するようにして、シフト距離毎に、シフト距離が等しい起動先コンピュータ間の通信経路の重複を回避している。従って、通信時におけるリンク競合が回避され、通信性能を向上させることができる。
【0058】
以上のような処理は、各起動先コンピュータで並列して実施されることになる。
【0059】
そうすると、初期処理部121は、ステップS17で生成された第2対応表に従って、プロセス間の通信コネクションを構築する(ステップS19)。この処理自体は、従来と同じであるからこれ以上述べない。
【0060】
このような処理を行うことによって、他の起動先コンピュータの並列プロセスと通信する準備が完了したことになる。
【0061】
そうすると、図16の処理の説明に戻って、並列プロセス110は、プログラムに従って、ステップS19で構築された通信コネクションを用いてプロセス間通信を行う(ステップS3)。このプロセス間通信は、例えば全対全通信部123による全対全通信の場合もあるが、一対一通信である場合もある。ステップS3は、並列プロセス110の処理が完了するまで行われる。
【0062】
以上のような処理を行うことで、リンク衝突を回避して通信性能の向上を図ることができるようになる。
【0063】
[実施の形態2]
第2の実施の形態に係る多段マルチパスネットワーク(すなわち、2階層以上に階層化された中継装置のうち下層の各中継装置から1つ上層の複数の中継装置にパスが設けられているネットワーク)の例を図18に示す。図18では、3つの上位スイッチ0乃至2と、6つの下位スイッチ0乃至5とで、18台のコンピュータcomp00乃至comp17を接続する例を示している。下位スイッチ0乃至5のそれぞれは、上位スイッチ0乃至2に接続されている。すなわち、ある下位スイッチから他の下位スイッチへの通信経路は3重化されている。具体的には、上位スイッチ0を経由する通信経路、上位スイッチ1を経由する通信経路、及び上位スイッチ2を経由する通信経路が存在する。本実施の形態では、各コンピュータには、このような3つの通信経路に対応して、ルーティングに用いる3つのネットワーク識別子(以下では、InfiniBandについて説明するものとしてLIDと呼ぶことにする)が予め割り当てられている。
【0064】
具体的には図18において各コンピュータcomp00乃至comp17の下に、割り当てられたLID及び通信経路(ここでは上位スイッチの識別子)とが示されている。例えば、コンピュータcomp03には、上位スイッチ0を経由する通信経路についてのLID「16」と、上位スイッチ1を経由する通信経路についてのLID「17」と、上位スイッチ2を経由する通信経路についてのLID「18」とが割り当てられている。また、コンピュータcomp12には、上位スイッチ0を経由する通信経路についてのLID「52」と、上位スイッチ1を経由する通信経路についてのLID「53」と、上位スイッチ2を経由する通信経路についてのLID「54」とが割り当てられている。
【0065】
各コンピュータは、以下で述べるように、LIDを用いて並列プロセス間の通信を行う。
【0066】
上位スイッチ及び下位スイッチの各々は、これらの各LIDについて対応する出力ポート番号を特定できるようになっている。このような多段マルチパスネットワークにおいて送信されるパケットのヘッダには、宛先コンピュータのLIDが設定されており、各スイッチでは、このLIDから、受信パケットをいずれの出力ポートに転送すべきかを特定できるようになっている。
【0067】
例えば、下位スイッチ4が、宛先コンピュータのLIDが「20」となっているパケットを受信した場合には、当該パケットを上位スイッチ0に転送する。同じように、下位スイッチ4が、宛先コンピュータのLIDが「21」となっているパケットを受信した場合には、当該パケットを上位スイッチ1に転送する。また、下位スイッチ4が、宛先コンピュータのLIDが「22」となっているパケットを受信した場合には、当該パケットを上位スイッチ2に転送する。このようなパケットは、全てコンピュータcomp04宛のパケットであるが、上で述べたように経由する上位スイッチは異なっている。
【0068】
本実施の形態では、このような設定を表すLIDファイルを、各コンピュータ又は後に述べる共有ストレージに保持するものとする。図18に示した設定に対応するLIDファイルの一例を図19に示す。図19の例では、LIDファイルには、第1行にLIDファイルである旨のデータが含まれ、第2行に上位スイッチの数「3」(すなわち、通信経路の数)が含まれている。この上位スイッチの数については、後に述べる処理で用いられる。第3行目以降に、各コンピュータの識別子と、割り当てられている3つのLIDとの対応付けが含まれている。本実施の形態では、左から、上位スイッチ0を経由する通信経路についてのLID、上位スイッチ1を経由する通信経路についてのLID、上位スイッチ2を経由する通信経路についてのLIDが並べられている。このような並べ方に限定されるものではないが、各コンピュータについて、同じ並べ方を採用する。
【0069】
次に、図20を用いて、図18に示した多段マルチパスネットワークを含むシステムの構成例を説明する。図20においては、図18に示した上位スイッチ0乃至2及び下位スイッチ0乃至5は明示していないが、コンピュータcomp00乃至comp17が接続されているネットワーク510に含まれているものとする。このネットワーク510には、スケジューリングサーバ511と、起動サーバ512と、ネットワーク510に接続されているコンピュータにより用いられる共有ストレージ513とが接続されている。
【0070】
スケジューリングサーバ511は、コンピュータcomp00乃至comp17の稼働状況を把握し、次に起動すべき並列プロセス及び当該並列プロセスの起動先のコンピュータを決定し、当該並列プロセスを起動するように起動サーバ512に指示する。起動サーバ512は、スケジューリングサーバ511からの指示に応じて、並列プロセスを、指定されたコンピュータ上に起動する。
【0071】
図20では、起動サーバ512は、スケジューリングサーバ511とは別のコンピュータとして示されているが、スケジューリングサーバ511と物理的に同じサーバである場合もある。さらに、以下で述べるホストファイル(Hostfile)に記載されている先頭のコンピュータが起動サーバとして動作する場合もある。
【0072】
以下では、図20に示したようなシステムにおいて、8台のコンピュータに、8つの並列プロセスを起動する場合について説明する。本実施の形態では、並列プロセスはそれぞれ別のコンピュータ上に起動されるものとする。
【0073】
このような具体例について図21乃至図41を用いて図20に示したシステムの動作を説明する。まず、スケジューリングサーバ511は、コンピュータcomp00乃至comp17の稼働状況から、使用するコンピュータを選択する(ステップ(11))。例えば、コンピュータcomp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14を選択する。そして、スケジューリングサーバ511は、選択されたコンピュータの識別子(例えばコンピュータ名)を列挙したホストファイル(Hostfile)を生成し、共有ストレージ513に格納する(ステップ(12))。ホストファイルは、例えば図22に示すようなファイルである。図22で示すように、ステップ(11)で選択された8つのコンピュータの識別子が含まれる。
【0074】
そして、スケジューリングサーバ511は、起動サーバ512に対して、ホストファイルに列挙されているコンピュータ上に並列プロセスを起動するように指示する(ステップ(13))。ホストファイルについて、共有ストレージ513の格納場所を指定するようにしても良いし、実際にホストファイルを送信するようにしても良い。
【0075】
その後、図23の処理に移行して、起動サーバ512は、例えば共有ストレージ513に格納されているホストファイルを取得し(ステップ(14))、ホストファイルに定義されている起動先のコンピュータcomp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14を特定する(ステップ(15))。そして、起動サーバ512は、起動先のコンピュータcomp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14上に、並列プロセスを起動する(ステップ(16))。この際、起動サーバ512は、同一のジョブについて起動されたプロセスの識別子と当該プロセスが起動された起動先コンピュータの識別子とを対応付ける対応表を生成し、共有ストレージ513に格納して格納場所を通知するか、対応表を起動先コンピュータに送信する。起動先コンピュータには、さらにそのコンピュータ上で起動されるプロセスの識別子も通知する。各起動先コンピュータは、起動コンピュータ512又は共有ストレージ513から、対応表を取得し、自コンピュータで起動されるプロセスの識別子も取得する。
【0076】
図24に、対応表の一例を示す。図24の例では、プロセス識別子(Proc0,Proc1,Proc2,Proc3,Proc4,Proc5,Proc6,Proc7。但し、「Proc」部分は分かりやすくするための添え字であり、0乃至7が識別子であるとする。)に対応付けて起動先コンピュータの識別子(comp03、comp04、comp05、comp10、comp11、comp12、comp13及びcomp14)が対応付けられている。
【0077】
次に、図25乃至図41を用いて、起動先コンピュータについて説明する。図25は、起動先コンピュータ1000の機能構成を模式的に示した図であり、起動サーバ512によって、起動先コンピュータ1000では、動的に並列プロセス1110が起動される。この並列プロセス1110の処理に関連するデータについてはデータ格納領域1130に格納される。このデータ格納領域1130には、ネットワーク510の構造に関するデータも含まれる。すなわち、上位スイッチと下位スイッチの接続関係、下位スイッチに接続されているコンピュータの識別子などがデータ格納領域1130には格納されているものとする。
【0078】
また、起動先コンピュータ1000には通信ライブラリ1120も用意されている。通信ライブラリ1120は、例えばMPI仕様に従ったライブラリであり、MPI_Initサブルーチンに相当する初期処理部1121と、MPI_AlltoAllサブルーチンに相当する全対全通信部1123とを含む。並列プロセス1110は、初期処理部1121を呼び出してプロセス間通信を行うための初期処理を実施させ、全対全通信を行う場合には全対全通信部1123を呼び出して同じジョブについて起動された全ての並列プロセス間で全対全通信を行わせる。通信ライブラリ1120の初期処理部1121及び全対全通信部1123は、場合によってはデータ格納領域1130に格納されているデータを用いて処理を行う。なお、通信ライブラリ1120には、他のサブルーチンも含まれるが、ここでは本実施の形態に関係するもののみを示している。
【0079】
次に、図26及び図27を用いて、具体的な処理について説明する。まず、起動された並列プロセス1110は、通信ライブラリ1120の初期処理部1121を呼び出す(図26:ステップS101)。初期処理部1121は、呼び出されると、図27に示すような処理を実施する。
【0080】
初期処理部1121は、対応表を取得する(図27:ステップS201)。データ格納領域1130に対応表が格納されている場合には、当該データ格納領域1130から読み込み、共有ストレージ513に対応表が格納されている場合には、共有ストレージ513から取得する。
【0081】
また、初期処理部1121は、対応表からプロセスが起動される起動先コンピュータを特定し、各起動先コンピュータに対して、データ格納領域1130に格納されているネットワーク構成のデータに従って、ローカルコンピュータ番号を付与する(ステップS203)。例えば、図28に模式的に示すように、第1段階として、起動先コンピュータを下位スイッチ毎にグループ化し、グループに含まれる起動先コンピュータの数でソートする。起動先コンピュータが同数のグループが存在する場合には下位スイッチの識別子が小さいものを優先する。そして、第2段階として、上位グループから順番に、例えばコンピュータの識別子の順に0から順番にローカルコンピュータ番号を付与する。
【0082】
図28の例では、下位スイッチ1のグループ及び下位スイッチ4のグループは、起動先コンピュータ数が「3」で、さらに下位スイッチ3のグループは、起動先コンピュータ数が「2」である。ソートすると、下位スイッチ1のグループ、下位スイッチ4のグループ、下位スイッチ3のグループの順番になる。
【0083】
各下位スイッチに接続されている起動先コンピュータについては、コンピュータの識別子に従うとすると、図28にも示すようにローカルコンピュータ番号が付与される。具体的には、起動先コンピュータcomp03にはローカルコンピュータ番号「0」が付与され、起動先コンピュータcomp04にはローカルコンピュータ番号「1」が付与され、起動先コンピュータcomp05にはローカルコンピュータ番号「2」が付与され、起動先コンピュータcomp12にはローカルコンピュータ番号「3」が付与され、起動先コンピュータcomp13にはローカルコンピュータ番号「4」が付与され、起動先コンピュータcomp14にはローカルコンピュータ番号「5」が付与され、起動先コンピュータcomp10にはローカルコンピュータ番号「6」が付与され、起動先コンピュータcomp11にはローカルコンピュータ番号「7」が付与される。
【0084】
このようなローカルコンピュータ番号の付与方法を採用することで通信経路の重複を避けやすくなる。
【0085】
そして、初期処理部1121は、LIDファイルに含まれる上位スイッチの数とデータ格納領域1130に格納されているネットワーク構成についてのデータとから、初期上位スイッチテーブルを生成し、データ格納領域1130に格納する(ステップS205)。
【0086】
図29に初期上位スイッチテーブルの一例を示す。図29の例では、縦方向に送信元の起動先コンピュータのローカルコンピュータ番号を列挙し、横方向に宛先の起動先コンピュータのローカルコンピュータ番号を列挙している。送信元の起動先コンピュータも宛先の起動先コンピュータも同一下位スイッチに接続されている場合にはリンク衝突は生じないので、同一の下位スイッチに接続されている起動先コンピュータの組み合わせについては「×」印が登録される。それ以外の部分のテーブル値rs(s,d)は、以下のように設定される。なお、sは送信元のローカルコンピュータ番号を表し、dは宛先のローカルコンピュータ番号を表す。Kは、上位スイッチの数である。「%」は剰余を表す。
rs(s,d)=s%K
【0087】
このようにすれば、ローカルコンピュータ番号「0」乃至「2」の起動先コンピュータが、他の下位スイッチに接続されている起動先コンピュータにデータを送信する際には、使用すべき上位スイッチが分散されているので、リンク衝突が生じにくくなる。同様に、ローカルコンピュータ番号「3」乃至「5」の起動先コンピュータが、他の下位スイッチに接続されている起動先コンピュータにデータを送信する際には、使用すべき上位スイッチが分散されているので、リンク衝突が生じにくくなる。さらに、ローカルコンピュータ番号「6」及び「7」の起動先コンピュータが、他の下位スイッチに接続されている起動先コンピュータにデータを送信する際には、使用すべき上位スイッチが分散されているので、リンク衝突が生じにくくなる。
【0088】
典型的な全対全通信では、図2A乃至図2Hで説明したように、通信相手を1つずつずらしながら全ての起動先コンピュータと通信を行う。本実施の形態では、通信相手をずらす幅をシフト距離と呼び、ローカルコンピュータ番号の差で表される。例えば、ローカルコンピュータ番号「0」からローカルコンピュータ番号「3」への通信であれば、シフト距離は「3」となる。
【0089】
上でも述べたように、典型的な全対全通信では、シフト距離が異なる起動先コンピュータ間での通信は同じ期間では行われないので、シフト距離が等しい起動先コンピュータ間の通信経路が重複しないようにすれば、リンク衝突を回避できる。従って、シフト距離毎に、シフト距離が等しい起動先コンピュータ間の通信経路が重複しないように、上位スイッチ及びLIDを選択する。
【0090】
但し、通信経路の重複という観点からすれば、下位スイッチから上位スイッチへの上り方向だけではなく、上位スイッチから下位スイッチへの下り方向の重複も考慮する。そのために、図29以降では、宛先の起動先コンピュータを基準に、すなわち縦方向に、宛先の起動先コンピュータが接続されている下位スイッチに応じて、テーブルのセルを色分けする。
【0091】
具体的には、下位スイッチ1の場合には濃いハッチングが付されており、下位スイッチ4の場合には点のハッチングが付されており、下位スイッチ3の場合には斜め線のハッチングが付されている。
【0092】
次に、初期処理部1121は、初期上位スイッチテーブルを、シフト距離についてのシフト距離テーブルに変換し、データ格納領域1130に格納する(ステップS207)。シフト距離テーブルの一例を図30に示す。図30の例では、縦方向には、送信元の起動先コンピュータのローカルコンピュータ番号が列挙されており、横方向にはシフト距離が列挙されている。そして、図29に示した初期上位スイッチテーブルrs(s,d)から以下のような演算にて生成する。
シフト距離テーブルconv_rs(s,sd)=rs(s,d)
なお、sは送信元の起動先コンピュータのローカルコンピュータ番号を表し、sdはシフト距離を表す。また、dは、以下のようにして計算される、宛先の起動先コンピュータのローカルコンピュータ番号を表す。
d=(s+sd)%N
ここでNは、起動先コンピュータ数を表す。
【0093】
実際に図29の初期上位スイッチテーブルを変換すると、図30に示すようなシフト距離テーブルのようになる。ハッチングも、数字の移動に応じて移動させている。
【0094】
そして、初期処理部1121は、テーブル処理を実施する(ステップS209)。テーブル処理は、シフト距離毎に、シフト距離が等しい起動先コンピュータ間の通信経路の重複を避けつつ、上位スイッチの番号を決定する処理である。このテーブル処理については、図31乃至図36を用いて説明する。
【0095】
まず、初期処理部1121は、シフト距離sd=0に設定する(図31:ステップS301)。そして、初期処理部1121は、シフト距離テーブル更新処理を実施する(ステップS303)。このシフト距離テーブル更新処理については、以下で詳しく述べる。
【0096】
その後、初期処理部1121は、シフト距離sdを1インクリメントして(ステップS305)、シフト距離sdが起動先コンピュータの数Nより小さいか判断する(ステップS307)。シフト距離sdが起動先コンピュータの数Nよりも小さい場合にはステップS303に戻る。一方、シフト距離sdが起動先コンピュータの数N以上となった場合には、元の処理に戻る。
【0097】
このように、シフト距離毎にシフト距離テーブル更新処理を実施して、上位スイッチを適切に設定する。
【0098】
次に、シフト距離テーブル更新処理について図32乃至図36を用いて説明する。まず、初期処理部1121は、初期化処理を実施する(図32:ステップS311)。この初期化処理については、図33を用いて説明する。
【0099】
図33の処理の説明に移行して、初期処理部1121は、全パスについて上り及び下りの使用予定回数と上り及び下りの使用確定回数とをゼロに設定する(ステップS331)。ここでは、下位スイッチ「i」から上位スイッチ「j」への上りパスについての使用予定回数をup_path_likely(i,j)と表し、上位スイッチ「j」から下位スイッチ「i」への下りパスについての使用予定回数をdn_path_likely(i,j)と表す。下位スイッチ「i」から上位スイッチ「j」への上りパスについての使用確定回数をup_path_cnt(i,j)と表し、上位スイッチ「j」から下位スイッチ「i」への下りパスについての使用確定回数をdn_path_cnt(i,j)と表す。ステップS331では、これらの変数の全ての要素値を0に設定する。
【0100】
例えば以下のような擬似コードを実行する。
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
}
}
N_lsは下位スイッチの数である。
【0101】
次に、初期処理部1121は、送信元の起動先コンピュータのローカルコンピュータ番号sを0に設定する(ステップS333)。さらに、初期処理部1121は、宛先の起動先コンピュータのローカルコンピュータ番号dを(s+sd)%Nに設定する(ステップS335)。sdは、図31の処理で設定される。
【0102】
そして、初期処理部1121は、送信元の起動先コンピュータsが接続されている下位スイッチの番号ls(s)が、宛先の起動先コンピュータdが接続されている下位スイッチの番号ls(d)と一致するか判断する(ステップS337)。ls(i)は、ローカルコンピュータ番号iの起動先コンピュータが接続されている下位スイッチの番号を出力する関数であるが、このような下位スイッチの番号はデータ格納領域1130に格納されているネットワーク構成についてのデータから特定される。このステップでは、送信先と宛先の起動先コンピュータが同じ下位スイッチに接続されているか判断している。
【0103】
ls(s)とls(d)が一致している場合には、考慮しなくても良いのでステップS345に移行する。一方、ls(s)とls(d)が一致していない場合には、初期処理部1121は、変数rsにシフト距離テーブルの値conv_rs(s,sd)を設定する(ステップS339)。すなわち、送信元の起動先コンピュータsとシフト距離sdから特定される上位スイッチの識別子を変数rsに設定する。
【0104】
そして、初期処理部1121は、送信元の起動先コンピュータsが接続されている下位スイッチの番号ls(s)が起動先コンピュータ「0」が接続されている下位スイッチの番号ls(0)と一致するか判断する(ステップS341)。これは、図30に示したシフト距離テーブルの例では、上3行に該当するか判断している。
【0105】
ls(s)とls(0)とが一致している場合には、初期処理部1121は、以下のような設定を行う(ステップS343)。
up_path_cnt(ls(s),rs)+=1
dn_path_cnt(ls(d),rs)+=1
すなわち、送信元の起動先コンピュータsが接続されている下位スイッチls(s)から上位スイッチrsへの上りのパスの使用確定回数を1インクリメントする。同様に、上位スイッチrsから宛先の起動先コンピュータdが接続されている下位スイッチls(d)への下りのパスの使用確定回数を1インクリメントする。そしてステップS345に移行する。
【0106】
このように、図30に示したシフト距離テーブルの例では、上3行に該当する部分の通信経路については確定させる。本実施の形態では、初期上位スイッチテーブルを生成する際に、上位スイッチを分散させているので、このように確定させても問題はない。また、処理を高速に終了させることができるようになる。
【0107】
一方、ls(s)とls(0)とが一致しない場合には、初期処理部1121は、以下のような設定を行う(ステップS344)。
up_path_likely(ls(s),rs)+=1
dn_path_likely(ls(d),rs)+=1
すなわち、送信元の起動先コンピュータsが接続されている下位スイッチls(s)から上位スイッチrsへの上りのパスの使用予定回数を1インクリメントする。同様に、上位スイッチrsから宛先の起動先コンピュータdが接続されている下位スイッチls(d)への下りのパスの使用予定回数を1インクリメントする。そしてステップS345に移行する。
【0108】
その後、初期処理部1121は、送信元の起動先コンピュータのローカルコンピュータ番号sを1インクリメントし(ステップS345)、sが起動先コンピュータの数Nより小さいか判断する(ステップS347)。sがNより小さい場合にはステップS335に戻る。一方、sがN以上になると、元の処理に戻る。
【0109】
このように初期化処理を実施することで、高速に処理を終了させることができるようになる。
【0110】
図32の処理の説明に戻って、初期処理部1121は、送信元の起動先コンピュータのローカルコンピュータ番号sにN−1を設定する(ステップS313)。初期化処理においては図30のシフト距離テーブルにおける上3行を確定させているので、以下の処理では逆にシフト距離テーブルの下の方から処理を進めるものである。
【0111】
そして、初期処理部1121は、宛先の起動先コンピュータのローカルコンピュータ番号dに(s+sd)%Nを設定する(ステップS315)。そして、初期処理部1121は、送信元の起動先コンピュータsが接続されている下位スイッチの番号ls(s)と宛先の起動先コンピュータdが接続されている下位スイッチの番号ls(d)とが一致しているか判断する(ステップS317)。ls(s)とls(d)とが一致している場合には、処理しなくても良いので、ステップS321に移行する。
【0112】
一方、ls(s)とls(d)とが一致していない場合には、初期処理部1121は、パス確定処理を実施する(ステップS319)。パス確定処理については後に図34乃至図36を用いて説明する。
【0113】
パス確定処理を実施すると、初期処理部1121は、sを1デクリメントし(ステップS321)、送信元の起動先コンピュータsが接続されている下位スイッチls(s)が起動先コンピュータ「0」が接続されている下位スイッチls(0)と一致するか判断する(ステップS323)。
【0114】
ls(s)がls(0)と一致している場合には、初期化処理(ステップS311)でパスは確定させているので、元の処理に戻る。一方、ls(s)とls(0)とが一致していない場合にはステップS319に戻る。
【0115】
このような処理を実施することで、通信経路の重複を避けつつパスの確定を実施する。
【0116】
次に、パス確定処理について図34乃至図36を用いて説明する。
【0117】
初期処理部1121は、宛先の起動先コンピュータのローカルコンピュータ番号dを(s+sd)%Nで算出すると共に、今回の検討対象である、シフト距離テーブルの値conv_rs(s,sd)を変数rs_likelyに設定しておく(ステップS351)。また、初期処理部1121は、今回の検討対象である通信経路について上り及び下りの使用確定回数が0、すなわちこれより前にパスが確定されていないことを確認するため、以下の計算を行う(ステップS353)。
cnt=up_path_cnt(ls(s), conv_rs(s,sd))+dn_path_cnt(ls(d), conv_rs(s,sd))
【0118】
そして、初期処理部1121は、cntが0であるか判断する(ステップS355)。cntが0でない場合には、既に、上り又は下り若しくは両方で確定されたパスが存在することを表すので、端子Aを介して図35の処理に移行する。
【0119】
一方、cntが0であれば、初期処理部1121は、変数rs_newに、現在のシフト距離テーブルの設定conv_rs(s,sd)を設定する(ステップS357)。この処理は、図35の処理の関係で一旦rs_newにconv_rs(s,sd)を待避させるものである。そして、初期処理部1121は、以下のように、使用予定回数を減少させる(ステップS359)。
up_path_likely(ls(s),conv_rs(s,sd))−=1
dn_path_likely(ls(d),conv_rs(s,sd))−=1
【0120】
さらに、初期処理部1121は、変数rs_newの値を、シフト距離テーブルの今回検討部分conv_rs(s,sd)に設定する(ステップS361)。これによって今回検討部分のパスが確定する。なお、このステップも図35の処理との関係で行う。
【0121】
そして、初期処理部1121は、以下のようにパスの確定を使用確定回数に反映させる(ステップS362)。そして元の処理に戻る。
up_path_cnt(ls(s),conv_rs(s,sd))+=1
dn_path_cnt(ls(d),conv_rs(s,sd))+=1
【0122】
次に、図35の処理の説明を行う。この処理では、可能な限り確定パスを避けるように探索を行う。まず、初期処理部1121は、iを1にセットする(ステップS363)。そして、初期処理部1121は、変数rs_iに、(conv_rs(s,sd)−i+K)%Kを代入する(ステップS365)。ここでは、conv_rs(s,sd)とは異なる上位スイッチの識別子をrs_iに設定している。
【0123】
その後、初期処理部1121は、このrs_iに基づいて、以下の演算を行ってパスの確定状態を確認する(ステップS367)。
cnt=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)
【0124】
そして、初期処理部1121は、cnt+likelyが0であるか確認する(ステップS369)。そして、cnt+likelyが0、すなわち上位スイッチを変更した上で、使用確定もされておらず使用予定もないパスが存在することが確認できた場合には、初期処理部1121は、このときのrs_iの値を、rs_newに設定し(ステップS371)、端子Bを介して図34のステップS359に戻る。
【0125】
一方、cnt+likelyが0ではない場合には、初期処理部1121は、cntが0であるか確認する(ステップS373)。使用予定はあるが確定はないか否かを確認する。cnt=0であれば、初期処理部1121は、rs_iを、候補として変数rs_likelyに設定し(ステップS375)、ステップS377に移行する。一方、cntが0ではない、すなわち使用確定が登録されている場合、初期処理部1121は、カウンタiを1インクリメントし(ステップS377)、iがKより小さいかを判断する(ステップS379)。iがKよりも小さい場合には、ステップS365に戻って、上で述べた処理を繰り返す。一方、iがK以上となった場合には、初期処理部1121は、rs_newに、現在のrs_likelyを設定する(ステップS381)。なお、ステップS351で、初期設定値をrs_likelyに設定しているので、上で述べた処理で良い上位スイッチが見つからない場合においても、この初期設定値がrs_newに設定される。この後、端子Bを介してステップS359に戻る。
【0126】
このような処理を実施することで、通信経路の重複を避けるようにしている。
【0127】
図36を用いて上で行われた処理を模式的に説明する。上でも述べたように、シフト距離毎に、シフト距離が等しい起動先コンピュータ間の通信経路の重複を避けるようにする。そのため、図36のシフト距離テーブルにおいて、縦方向に重複の有無を確認する。但し、初期上位スイッチテーブルの生成時に、縦方向に上位スイッチを分散させるようにしているため、上り方向の重複は避けられている。一方、下り方向の重複は、上位スイッチの識別子とハッチングのタイプとの組み合わせで判断できる。図36の例では、シフト距離「4」の場合、送信元の起動先コンピュータ「1」の下り通信経路と、送信元の起動先コンピュータ「7」の下り通信経路とが一致してしまっている。同様に、シフト距離「5」の場合、送信元の起動先コンピュータ「0」の下り通信経路と、送信元の起動先コンピュータ「6」の下り通信経路とが一致してしまっている。この部分は、変更を行うことになる。上で述べたように、下位スイッチ1に関連する通信経路については優先的に確定させているので、変更するのは他の下位スイッチに接続されている起動先コンピュータのための上位スイッチとなる。図37に示すように、シフト距離5の場合起動先コンピュータ「6」の上位スイッチを「2」に変更すれば、重複を避けられる。また、シフト距離4の場合起動先コンピュータ「7」の上位スイッチを「2」に変更すれば、重複を避けられる。このような処理を上で述べた処理フローで実現している。
【0128】
図27の処理の説明に戻って、初期処理部1121は、ステップS209で確定されたシフト距離テーブルを最終上位スイッチテーブルに変換する(ステップS211)。具体的には、以下のような演算を実施する。
rs(s,d)=conv_rs(s,sd)
ここで、d=(s+sd)%Nである。これはステップS207の逆変換であるから、図37は、図38のように変換される。太点線で囲まれた部分が、初期上位スイッチテーブルから変更された部分である。
【0129】
その後、初期処理部1121は、最終上位スイッチテーブルにおいて、自起動先コンピュータの組み合わせ以外の起動先コンピュータの組み合わせについて、コンピュータの識別子とローカルコンピュータ番号との対応付けとLIDファイルに従ってLIDを設定する(ステップS213)。本実施の形態では、以下のような演算を行えば、最終上位スイッチテーブルlid(s,d)にLIDを設定できる。
lid(s,d)=first_LID(server_id(d))+rs(s,d)
ここで、server_id(d)は、ローカルコンピュータ番号dのコンピュータ識別子を表す関数である。また、first_LID(x)は、コンピュータxの最初のLIDである。図39に処理結果例を示す。なお、送信元と宛先の起動先コンピュータが同一の下位スイッチに接続されている場合には、このLIDでなくとも問題ない。
【0130】
そして、初期処理部1121は、自起動先コンピュータについてのデータを最終上位スイッチテーブルから抽出し、第2対応表を生成し、データ格納領域1130に格納する(ステップS215)。
【0131】
例えば自プロセスが起動先コンピュータのローカルコンピュータ番号「2」で識別子「comp05」である場合には、図39のうち3行目を抽出して、図40に示すような第2対応表を生成する。図40の例では、プロセスの識別子と、起動先コンピュータの識別子と、LIDとが対応付けられている。これによって、どのプロセス又はどの起動先コンピュータと通信を行う場合にも、使用すべきLIDを特定することができる。
【0132】
以上のような処理は、各起動先コンピュータで並列して実施されることになる。
【0133】
そうすると、初期処理部1121は、ステップS215で生成された第2対応表に従って、プロセス間の通信コネクションを構築する(ステップS217)。この処理自体は、従来と同じであるからこれ以上述べない。
【0134】
但し、図41に示すように、ローカルコンピュータ番号「0」の起動先コンピュータAとローカルコンピュータ番号「3」の起動先コンピュータBとの間で通信を行う場合には、起動先コンピュータAはlid(0,3)=52宛にデータを送信するが、起動先コンピュータBはlid(3,0)=16宛にデータを送信する。一方、ローカルコンピュータ番号「0」の起動先コンピュータAとローカルコンピュータ番号「5」の起動先コンピュータBとの間で通信を行う場合には、起動先コンピュータAはlid(0,5)=60宛にデータを送信するが、起動先コンピュータBはlid(5,0)=18宛にデータを送信する。すなわち、同じ宛先であってもLIDが異なるようになっている。
【0135】
図42に模式的に示すように、例えばローカルコンピュータ番号「0」の起動先コンピュータを中心に考えると、他の起動先コンピュータから見るとLID「16」「17」「18」のいずれかを用いるようになっており、複数のLIDから選択されたLIDを固定的に用いる従来技術とは異なっている。
【0136】
このような処理を行うことによって、他の起動先コンピュータの並列プロセスと通信する準備が完了したことになる。
【0137】
そうすると、図26の処理の説明に戻って、並列プロセス1110は、プログラムに従って、ステップS217で構築された通信コネクションを用いてプロセス間通信を行う(ステップS103)。このプロセス間通信は、例えば全対全通信部1123による全対全通信の場合もあるが、一対一通信である場合もある。ステップS103は、並列プロセス1110の処理が完了するまで行われる。
【0138】
以上のような処理を行うことで、リンク衝突を回避して通信性能の向上を図ることができるようになる。
【0139】
例えば、図7と同じ場面を考える。すなわち、プロセス「3」乃至「5」が、番号で3つ先のプロセス「6」「7」「0」(プロセス「0」はプロセス「8」がないために選択される)にデータを送信しようとする。本実施の形態によれば、図43に示すように、プロセス5(コンピュータcomp08)からプロセス0(コンピュータcomp03)へは、上位スイッチ0ではなく、上位スイッチ2を経由するようになっているため、衝突が回避されている。
【0140】
本実施の形態を用いて、並列プログラム起動時に各起動先コンピュータ間で生成される通信コネクション毎に適切なLIDを選択することにより、多段マルチパスネットワークにおける全対全通信時に、本来の通信性能が得られるようになる。すなわち、通信時間が短くなるため、全体の処理時間も短くなる。
【0141】
例えば、コンピュータの台数を160、ネットワーク構成を、上位スイッチを16で2階層構成とする環境で、任意の64コンピュータによる全対全通信を実施させて、本実施の形態の効果を確認した。例えば図44に、500回実効帯域幅を測定した場合のランキングを示す。すなわち、縦軸は実効帯域幅を表し、横軸はランキングを表す。このように、本実施の形態の手法では、平均1915MB/sとなるが、全ての測定時に安定して高性能が出ている。一方、単一LID割当方式では、最高1915MB/s、最低871MB/s、平均1142MB/sとなっており、以下で述べるようにコンピュータの選択の仕方によって性能が変動する。一方、本実施の形態を採用すれば、単一LID割当方式に比して平均で1.68倍、最大で2.20倍性能が向上している。
【0142】
また、図45に、ノード数(コンピュータ数。例えば連続する8個のコンピュータから160個のコンピュータ。)別の実効帯域幅を示す。本実施の形態では、ノード数に拘わらず安定的に高性能が出ているが、単一LID割当方式では、ノード数に応じて性能が上下してしまう。本実施の形態を採用すれば、単一LID割当方式に比して、最大1.79倍性能が向上している。
【0143】
このように、本実施の形態であれば、起動先コンピュータの数に拘わらず安定的に実効帯域幅を広くすることができるようになる。
【0144】
なお、上で述べた例ではMPI_Initに相当する初期処理部1121が自ら上で述べたように全ての起動先コンピュータのLIDを特定していたが、例えば図46に示すようなシステムを採用して、LID管理コンピュータ514によって集中的にLIDを特定するようにしても良い。LID管理コンピュータ514は、起動サーバ512やスケジューリングサーバ511と一体となっている場合もある。さらに、起動サーバ512と同じように、プロセス識別子が最小のプロセスが起動されたコンピュータが、LID管理コンピュータ514のように動作する場合もある。
【0145】
図46のシステムでは、共有ストレージ513の代わりにLID管理コンピュータ514がネットワーク510に接続されている。LID管理コンピュータ514は、データ格納部5141を有している。データ格納部5141には、LIDファイル(図19)が格納されている。また、起動サーバ512が対応表をLID管理コンピュータ514に通知する場合には、対応表もデータ格納部5141に格納されることもある。
【0146】
次に、このようなLID管理コンピュータ514を導入した場合の動作例を図47を用いて説明する。並列プロセス1110が起動されて初期処理部1121が呼び出された後、初期処理部1121は、LID決定要求をLID管理コンピュータ514に送信する(ステップS431)。LID決定要求は、例えば対応表を含む。対応表が、起動サーバ512からLID管理コンピュータ514に通知済みであれば、例えば対応表の識別情報をLID決定要求に含むようにすればよい。
【0147】
LID管理コンピュータ514は、起動先コンピュータからLID決定要求を受信すると(ステップS433)、LID決定処理を実施する(ステップS435)。LID決定処理は、図27の処理フローにおけるステップS201乃至S215までの処理である。なお、対応表のデータを並列プロセスの起動先コンピュータ(選択コンピュータとも呼ぶ)から受信する場合には、当該受信がステップS11の取得に相当する。さらに、ステップS215では、LID決定要求の送信元をベースに第2対応表を生成する。
【0148】
LID管理コンピュータ514は、LID決定処理で特定された、プロセス識別子又はコンピュータ識別子若しくはその両方とLIDとの組み合わせ(これが第2対応表又はその一部に相当する)を、LID決定要求の要求元コンピュータに送信する(ステップS437)。起動先コンピュータの初期処理部1121は、LID管理コンピュータ514からプロセス識別子又はコンピュータ識別子若しくはその両方とLIDとの組み合わせのデータを受信し、例えばデータ格納領域1130に格納する(ステップS439)。そして、初期処理部1121は、図27のステップS217と同じように、受信したデータを用いて、起動プロセス間の通信コネクションを構築する(ステップS441)。
【0149】
このようにすれば、初期処理部1121の処理負荷が軽減される。
【0150】
なお、起動サーバ512の機能を有するコンピュータが、リクエストベースではなく、図27のステップS201乃至S215の処理を、プロセスを起動する前などに実施して、第2対応表などと共に各起動先コンピュータに通知するようにしても良い。この場合、起動サーバ512による対応表の生成が対応表の取得に相当する。
【0151】
以上本技術の実施の形態を説明したが、本技術はこれに限定されるものではない。例えば、図27の処理フローは一例であって、処理結果が変わらない限り、ステップの順番を入れ替えたり、並列実施するようにしても良い。
【0152】
なお、上で述べたコンピュータ100及び1000、起動サーバ12及び512及びスケジューリングサーバ11及び511並びにLID管理コンピュータ514は、コンピュータ装置であって、図48に示すように、メモリ2501とCPU2503とハードディスク・ドライブ(HDD)2505と表示装置2509に接続される表示制御部2507とリムーバブル・ディスク2511用のドライブ装置2513と入力装置2515とネットワークに接続するための通信制御部2517とがバス2519で接続されている。オペレーティング・システム(OS:Operating System)及び本実施例における処理を実施するためのアプリケーション・プログラムは、HDD2505に格納されており、CPU2503により実行される際にはHDD2505からメモリ2501に読み出される。CPU2503は、アプリケーション・プログラムの処理内容に応じて表示制御部2507、通信制御部2517、ドライブ装置2513を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ2501に格納されるが、HDD2505に格納されるようにしてもよい。本技術の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク2511に格納されて頒布され、ドライブ装置2513からHDD2505にインストールされる。インターネットなどのネットワーク及び通信制御部2517を経由して、HDD2505にインストールされる場合もある。このようなコンピュータ装置は、上で述べたCPU2503、メモリ2501などのハードウエアとOS及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【0153】
初期処理部121及び1121、全対全通信部123及び1123を含む通信ライブラリ120及び1120は、CPU2503により実行される。
【0154】
以上述べた本実施の形態をまとめると、以下のようになる。
【0155】
本実施の形態に係る情報処理方法は、(A)階層化された中継装置のうち第1の階層に含まれる中継装置から当該第1の階層の1つ上の階層である第2の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスが起動されるコンピュータである選択コンピュータの識別子を含む第1のデータを取得するステップと、(B)複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、ネットワークにおける通信経路毎のネットワーク識別子から、選択コンピュータを順序づけるためのローカル識別番号間の差であるシフト距離が等しい選択コンピュータ間の通信経路の重複を避けるように、第1のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップとを含む。
【0156】
このようにすれば全対全通信においてもリンク衝突を回避することができる。従って、通信性能を向上させることができるようになる。
【0157】
なお、上で述べた第1のデータは、選択コンピュータの識別子と並列プロセスの識別子との対応付けを複数含んでいる場合もある。この場合、本実施の形態に係る情報処理方法は、第1のデータから通信相手のプロセスが起動されている選択コンピュータの識別子を特定すると共に、特定された選択コンピュータとの通信で用いるべきと選択ステップで選択されたネットワーク識別子を特定するステップをさらに含むようにしてもよい。例えば、各選択コンピュータで上で述べた処理を実施した場合には、自選択コンピュータを基準に、通信相手に対して使用すべきネットワーク識別子を特定するものである。なお、本実施の形態では、選択コンピュータの組み合わせ毎に、使用するネットワーク識別子が異なるので、このような処理を行う。
【0158】
なお、上で述べたネットワーク識別子が、ネットワークに含まれる最上層の中継装置毎に設けられるようにしてもよい。
【0159】
さらに、上で述べた選択ステップにおいて、シフト距離が等しい選択コンピュータ間の通信経路を決定する際に、最下層の中継装置である第1の中継装置と当該最下層より1階層上の中継装置である第2の中継装置との間のパスの上りと下りとの各々について通信経路の設定有無を管理し、上りについての通信経路の設定有無と下りについての通信経路の設定有無とに基づき、シフト距離が等しい選択コンピュータ間の通信経路の重複を判断するようにしてもよい。このようにすれば、正確に通信経路の重複を判断できるようになる。
【0160】
また、上で述べた選択ステップが、接続されている最下層の中継装置毎に選択コンピュータをグループ化し、当該グループに含まれる選択コンピュータの数の大きい順にグループをソートし、ソート後の順番に上記グループに含まれる選択コンピュータに対してシリアルにローカル識別番号を付与するステップを含むようにしても良い。発明者の非自明な知見によれば、このようなローカル識別子を付与することによって通信経路の重複を避けやすくなる。
【0161】
さらに、上で述べた選択ステップが、(B1)選択コンピュータのうち送信元の選択コンピュータと送信先の選択コンピュータとの組み合わせ毎に、経由する最上層の中継装置の識別子を登録するための第1のテーブルに、送信元の選択コンピュータのローカル識別子を最上層の中継装置の数で除した値の剰余を最上層の中継装置の識別子として設定するステップと、(B2)第1のテーブルを、送信元の選択コンピュータとシフト距離との組み合わせの第2のテーブルに変換するステップと、(B3)第2のテーブルから、シフト距離が等しい選択コンピュータ間の通信経路で経由する最上層の中継装置の重複を検出し、当該重複を検出した場合には当該重複を解消するように第2のテーブルを更新するステップと、(B4)第2のテーブルを第1のテーブルの形式を有する第3のテーブルに変換するステップと、(B5)第3のテーブルにおいて最上層の中継装置の識別子を送信先の選択コンピュータに対応付けられているネットワーク識別子に変換するステップとをさらに含むようにしてもよい。このようにすることで、効率的に適切なネットワーク識別子を各選択コンピュータについて選択できるようになる。 なお、上で述べたような処理をコンピュータに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROMなどの光ディスク、光磁気ディスク、半導体メモリ(例えばROM)、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、RAM等の記憶装置に一時保管される。
【0162】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【0163】
(付記1)
階層化された中継装置のうち第1の階層に含まれる中継装置から当該第1の階層の1つ上の階層である第2の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第1のデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路の重複を避けるように、前記第1のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップと、
を、前記コンピュータ又は前記ネットワークに接続されている管理コンピュータに実行させるプログラム。
【0164】
(付記2)
前記第1のデータは、前記選択コンピュータの識別子と前記並列プロセスの識別子との対応付けを複数含んでおり、
前記第1のデータから通信相手のプロセスが起動されている前記選択コンピュータの識別子を特定すると共に、特定された選択コンピュータとの通信で用いるべきと前記選択ステップで選択されたネットワーク識別子を特定するステップ
をさらに実行させる付記1記載のプログラム。
【0165】
(付記3)
前記ネットワーク識別子が、前記ネットワークに含まれる最上層の中継装置毎に設けられる
付記1又は2記載のプログラム。
【0166】
(付記4)
前記選択ステップにおいて、
前記差が等しい前記選択コンピュータ間の通信経路を決定する際に、
最下層の中継装置である第1の中継装置と当該最下層より1階層上の中継装置である第2の中継装置との間のパスの上りと下りとの各々について通信経路の設定有無を管理し、前記上りについての前記通信経路の設定有無と前記下りについての前記通信経路の設定有無とに基づき、前記差が等しい前記選択コンピュータ間の通信経路の重複を判断する
付記1乃至3のいずれか1つ記載のプログラム。
【0167】
(付記5)
前記選択ステップが、
接続されている最下層の中継装置毎に前記選択コンピュータをグループ化し、当該グループに含まれる前記選択コンピュータの数の大きい順に前記グループをソートし、ソート後の順番に前記グループに含まれる前記選択コンピュータに対してシリアルに識別番号を付与するステップ
を含む付記1乃至4のいずれか1つ記載のプログラム。
【0168】
(付記6)
前記選択ステップが、
前記選択コンピュータのうち送信元の選択コンピュータと送信先の選択コンピュータとの組み合わせ毎に、経由する最上層の中継装置の識別子を登録するための第1のテーブルに、前記送信元の選択コンピュータのローカル識別子を前記最上層の中継装置の数で除した値の剰余を前記最上層の中継装置の識別子として設定するステップと、
前記第1のテーブルを、前記送信元の選択コンピュータと前記シフト距離との組み合わせの第2のテーブルに変換するステップと、
前記第2のテーブルから、前記シフト距離が等しい前記選択コンピュータ間の通信経路で経由する前記最上層の中継装置の重複を検出し、当該重複を検出した場合には当該重複を解消するように前記第2のテーブルを更新するステップと、
前記第2のテーブルを前記第1のテーブルの形式を有する第3のテーブルに変換するステップと、
前記第3のテーブルにおいて前記最上層の中継装置の識別子を前記送信先の選択コンピュータに対応付けられているネットワーク識別子に変換するステップと、
をさらに含む、付記3記載のプログラム。
【0169】
(付記7)
階層化された中継装置のうち第1の階層に含まれる中継装置から当該第1の階層の1つ上の階層である第2の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第1のデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路の重複を避けるように、前記第1のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップと、
を含み、前記コンピュータ又は前記ネットワークに接続されている管理コンピュータに実行される情報処理方法。
【0170】
(付記8)
階層化された中継装置のうち第1の階層に含まれる中継装置から当該第1の階層の1つ上の階層である第2の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第1のデータを格納するデータ格納部と、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路の重複を避けるように、前記第1のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する初期処理部と、
を有する情報処理装置。
【0171】
(付記9)
第1のスイッチ群と、該第1のスイッチ群に接続された第2のスイッチ群と、前記第1のスイッチ群に含まれる複数のスイッチに接続された複数のノードとを備え、通信に用いるアドレスに応じて異なる通信経路を辿り得る通信システムにおける通信方法において、
前記複数のノードは、前記複数のノードがリング状に所定の順で配置された場合に通信を行うノード間に介在するノード数が第1の数となる通信相手関係で通信を行う第1の状態から、通信を行うノード間に介在するノード数が第2の数となる通信相手関係で通信を行う第2の状態に切り替える制御を行い、
前記複数のノードは、前記第1の状態では、前記複数のノードに対して第1のパターンで割り当てられた第1のアドレス群を用いて通信を行い、前記第2の状態では、前記複数のノードに対して該第1のパターンとは異なる第2のパターンで割り当てられた第2のアドレス群を用いて通信を行うように、通信に用いるアドレスを切り替える制御を行う、
ことを特徴とする通信方法。
【0172】
(付記10)
前記第1の状態において、前記複数のノードが前記第1のアドレス群を用いて通信を行うと、前記複数のノードのうち、前記第1のスイッチ群に含まれるいずれかのスイッチに共通して接続されたノード群の各通信が、前記第2のスイッチ群に含まれる異なるスイッチに分散してルーティングされ、
前記第2の状態において、前記複数のノードが前記第2のアドレス群を用いて通信を行うと、前記複数のノードのうち、前記第1のスイッチ群に含まれるいずれかのスイッチに共通して接続されたノード群の各通信が、前記第2のスイッチ群に含まれる異なるスイッチに分散してルーティングされる、
ことを特徴とする付記9記載の通信方法。
【符号の説明】
【0173】
10 510 LAN
11 511 スケジューリングサーバ
12 512 起動サーバ
13 513 共有ストレージ
514 LID管理コンピュータ
5141 データ格納部
100 1000 コンピュータ
110 1110 並列プロセス
120 1120 通信ライブラリ
123 1123 全対全通信部
121 1121 初期処理部
130 1130 データ格納領域

【特許請求の範囲】
【請求項1】
階層化された中継装置のうち第1の階層に含まれる中継装置から当該第1の階層の1つ上の階層である第2の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第1のデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路の重複を避けるように、前記第1のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップと、
を、前記コンピュータ又は前記ネットワークに接続されている管理コンピュータに実行させるプログラム。
【請求項2】
前記ネットワーク識別子が、前記ネットワークに含まれる最上層の中継装置毎に設けられる
請求項1記載のプログラム。
【請求項3】
前記選択ステップにおいて、
前記差が等しい前記選択コンピュータ間の通信経路を決定する際に、
最下層の中継装置である第1の中継装置と当該最下層より1階層上の中継装置である第2の中継装置との間のパスの上りと下りとの各々について通信経路の設定有無を管理し、前記上りについての前記通信経路の設定有無と前記下りについての前記通信経路の設定有無とに基づき、前記差が等しい前記選択コンピュータ間の通信経路の重複を判断する
請求項1又は2記載のプログラム。
【請求項4】
前記選択ステップが、
接続されている最下層の中継装置毎に前記選択コンピュータをグループ化し、当該グループに含まれる前記選択コンピュータの数の大きい順に前記グループをソートし、ソート後の順番に前記グループに含まれる前記選択コンピュータに対してシリアルに識別番号を付与するステップ
を含む請求項1乃至3のいずれか1つ記載のプログラム。
【請求項5】
前記選択ステップが、
前記選択コンピュータのうち送信元の選択コンピュータと送信先の選択コンピュータとの組み合わせ毎に、経由する最上層の中継装置の識別子を登録するための第1のテーブルに、前記送信元の選択コンピュータのローカル識別子を前記最上層の中継装置の数で除した値の剰余を前記最上層の中継装置の識別子として設定するステップと、
前記第1のテーブルを、前記送信元の選択コンピュータと前記シフト距離との組み合わせの第2のテーブルに変換するステップと、
前記第2のテーブルから、前記シフト距離が等しい前記選択コンピュータ間の通信経路で経由する前記最上層の中継装置の重複を検出し、当該重複を検出した場合には当該重複を解消するように前記第2のテーブルを更新するステップと、
前記第2のテーブルを前記第1のテーブルの形式を有する第3のテーブルに変換するステップと、
前記第3のテーブルにおいて前記最上層の中継装置の識別子を前記送信先の選択コンピュータに対応付けられているネットワーク識別子に変換するステップと、
をさらに含む、請求項2記載のプログラム。
【請求項6】
階層化された中継装置のうち第1の階層に含まれる中継装置から当該第1の階層の1つ上の階層である第2の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第1のデータを取得するステップと、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路の重複を避けるように、前記第1のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する選択ステップと、
を含み、前記コンピュータ又は前記ネットワークに接続されている管理コンピュータに実行される情報処理方法。
【請求項7】
階層化された中継装置のうち第1の階層に含まれる中継装置から当該第1の階層の1つ上の階層である第2の階層に含まれる複数の中継装置にパスが設けられているネットワークにおける最下層の中継装置に接続された複数のコンピュータのうち並列プロセスを起動するように選択されたコンピュータである選択コンピュータの識別子を含む第1のデータを格納するデータ格納部と、
前記複数のコンピュータに含まれる各コンピュータの識別子に予め対応付けられており且つルーティングに用いられる、前記ネットワークにおける通信経路毎のネットワーク識別子から、前記選択コンピュータを順序づけるための識別番号間の差が等しい前記選択コンピュータ間の通信経路の重複を避けるように、前記第1のデータにおいて識別子が含まれる選択コンピュータ毎に、他の選択コンピュータとの通信で用いるべきネットワーク識別子を選択する処理部と、
を有する情報処理装置。
【請求項8】
第1のスイッチ群と、該第1のスイッチ群に接続された第2のスイッチ群と、前記第1のスイッチ群に含まれる複数のスイッチに接続された複数のノードとを備え、通信に用いるアドレスに応じて異なる通信経路を辿り得る通信システムにおける通信方法において、
前記複数のノードは、前記複数のノードがリング状に所定の順で配置された場合に通信を行うノード間に介在するノード数が第1の数となる通信相手関係で通信を行う第1の状態から、通信を行うノード間に介在するノード数が第2の数となる通信相手関係で通信を行う第2の状態に切り替える制御を行い、
前記複数のノードは、前記第1の状態では、前記複数のノードに対して第1のパターンで割り当てられた第1のアドレス群を用いて通信を行い、前記第2の状態では、前記複数のノードに対して該第1のパターンとは異なる第2のパターンで割り当てられた第2のアドレス群を用いて通信を行うように、通信に用いるアドレスを切り替える制御を行う、
ことを特徴とする通信方法。
【請求項9】
前記第1の状態において、前記複数のノードが前記第1のアドレス群を用いて通信を行うと、前記複数のノードのうち、前記第1のスイッチ群に含まれるいずれかのスイッチに共通して接続されたノード群の各通信が、前記第2のスイッチ群に含まれる異なるスイッチに分散してルーティングされ、
前記第2の状態において、前記複数のノードが前記第2のアドレス群を用いて通信を行うと、前記複数のノードのうち、前記第1のスイッチ群に含まれるいずれかのスイッチに共通して接続されたノード群の各通信が、前記第2のスイッチ群に含まれる異なるスイッチに分散してルーティングされる、
ことを特徴とする請求項8記載の通信方法。

【図1】
image rotate

【図2A】
image rotate

【図2B】
image rotate

【図2C】
image rotate

【図2D】
image rotate

【図2E】
image rotate

【図2F】
image rotate

【図2G】
image rotate

【図2H】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17A】
image rotate

【図17B】
image rotate

【図17C】
image rotate

【図17D】
image rotate

【図17E】
image rotate

【図17F】
image rotate

【図17G】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate

【図28】
image rotate

【図29】
image rotate

【図30】
image rotate

【図31】
image rotate

【図32】
image rotate

【図33】
image rotate

【図34】
image rotate

【図35】
image rotate

【図36】
image rotate

【図37】
image rotate

【図38】
image rotate

【図39】
image rotate

【図40】
image rotate

【図41】
image rotate

【図42】
image rotate

【図43】
image rotate

【図44】
image rotate

【図45】
image rotate

【図46】
image rotate

【図47】
image rotate

【図48】
image rotate


【公開番号】特開2012−98881(P2012−98881A)
【公開日】平成24年5月24日(2012.5.24)
【国際特許分類】
【出願番号】特願2010−245469(P2010−245469)
【出願日】平成22年11月1日(2010.11.1)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】