以下、図面を用いて実施形態が説明される。
図1は、一実施形態における並列処理装置の一例を示す。図1に示す並列処理装置100は、複数のノードNDを有するネットワークNWと、各ノードNDを管理する管理ノード50とを有する。各ノードNDは、算出部10、記憶部20および通信部30を有する。なお、図1では、ネットワークNWが2次元メッシュネットワークである例を示すが、ネットワークNWは、他のネットワークでもよく、次元は2次元以外でもよい。
例えば、並列処理装置100は、分散メモリ型の大規模HPCシステムとして動作する。複数のノードNDを使用して並列計算を実行するジョブでは、随所において、複数のノードNDが特定の通信パターンにしたがって一斉に実行する通信が必要になる。このような通信は、集団通信(Collective Communication)と称される。以下では、集団通信の一例として、同報通信を例に説明する。
記憶部20は、ネットワーク座標表22、受信時段数表24および転送先ノード表26を保持する記憶領域を有する。受信時段数表24を保持する記憶領域は、受信条件保持領域の一例であり、転送先ノード表26を保持する記憶領域は、転送条件保持領域の一例である。
ネットワーク座標表22は、ネットワークNWに含まれるノードNDのうち、ジョブを並列に実行する所定数のノードNDの構成情報(ネットワーク座標を示す座標情報等)を含む。換言すれば、ネットワーク座標表22は、同報通信の対象のノードNDの構成情報を含む。
ネットワーク座標表22は、ネットワークNWの構成が決まった時点で、管理ノード50から各ノードNDに予め配布されてもよく、ジョブを実行する前に管理ノード50から各ノードNDに予め配布されてもよい。各ノードNDは、自ノードND内のネットワーク座標表22を参照することで、他のノードNDと通信することなく、自ノードNDおよび同報通信の対象の全てのノードNDの座標情報(すなわち、位置情報)を取得することができる。なお、各ノードNDは、管理ノード50から自ノードNDの座標情報を予め通知されており、ネットワークNW内での自ノードNDの位置を把握している。
例えば、ネットワーク座標表22に含まれる座標情報で示される範囲のサブネットワークに含まれるノードNDが、同じジョブに参加するノードNDのグループになる。ネットワーク座標表22の例は、図3に示される。以下では、ジョブを並列に実行する複数のノードNDを含む部分的なネットワークは、サブネットワークSNW(図2)とも称される。そして、サブネットワークSNWに含まれる全てのノードNDは、同報通信の対象のノードNDである。
受信時段数表24は、複数回の転送により実行される同報通信において、同報通信の対象の複数のノードNDの各々がどの転送回数の同報通信時にデータを受信するかを示す情報を含む。すなわち、各ノードNDの記憶部20の受信時段数表24は、自ノードNDだけでなく、同報通信の対象の全てのノードNDについて、どの転送回数の同報通信でデータを受信するかを示す情報を含む。受信時段数表24の例は、図4に示される。
転送先ノード表26は、複数回の転送により実行される同報通信の転送回数毎に、所定のノードNDが転送するデータの転送先である転送先ノードNDを示す情報を含む。すなわち、各ノードNDの記憶部20の転送先ノード表26は、自ノードNDだけでなく、同報通信の対象の全てのノードNDについて、同報通信の転送回数毎の転送先ノードNDを示す情報を含む。転送先ノード表26の例は、図5に示される。同報通信の転送回数は、ノードND毎の転送ではなく、サブネットワークSNW全体での転送において、どの転送回数による転送かを示している。データの転送は、ノードNDを中継して実行され、各中継は同報通信の状態を示すため、以下では、同報通信の転送回数は、中継段数とも称される。
なお、受信時段数表24は、同報通信において、自ノードNDがデータを受信する中継段数のみを含んでもよい。同様に、転送先ノード表26は、同報通信において、自ノードNDから転送するデータの転送先ノードNDを示す情報のみを含んでもよい。但し、受信時段数表24および転送先ノード表26に格納される情報は、例えば、各ノードNDが実行するデータ転送先決定プログラムにより生成される。したがって、同報通信の対象の全てのノードNDの情報を含む受信時段数表24および転送先ノード表26を生成する場合、共通のデータ転送先決定プログラムを同報通信の対象の全てのノードNDで使用することができる。これにより、管理ノード50は、1つのデータ転送先決定プログラムを各ノードNDに配布して実行させればよく、管理ノード50によるノードNDの管理を簡易にすることができる。
算出部10は、自ノードNDの記憶部20が保持するネットワーク座標表22と同報通信時の起点ノードNDを示す起点ノード情報とに基づいて、同報通信におけるデータの転送先である転送先ノードNDを、転送距離が徐々に小さくなるように算出する。例えば、転送距離は、データが転送されるノードND間の経路上の距離(マンハッタン距離)が使用されてもよい。なお、ネットワーク座標表22は、同報通信の対象のネットワークの構成と、同報通信の対象のネットワークに含まれるノードNDの位置情報とを含む。
そして、算出部10は、算出した転送先ノードNDに基づいて、受信時段数表24と転送先ノード表26とを作成し、作成した受信時段数表24と転送先ノード表26とを記憶部20に格納する。受信時段数表24および転送先ノード表26は、データ等のメッセージを転送する順序を示すメッセージ転送順データベースの一例である。なお、起点ノード情報は、管理ノード50から各ノードNDに予め通知されてもよく、ネットワーク座標表22に含まれてもよい。
このように、算出部10は、”同報通信の早い段階では、できるだけ遠くのノードNDにメッセージ(データ)を転送する”ための転送パターンの情報を含む受信時段数表24および転送先ノード表26を、同報通信が開始される前に予め作成する。この際、算出部10は、サブネットワークSNW(図2)に含まれるノードNDと、同報通信の転送を開始する起点ノードND(開始位置)と、サブネットワークSNWにおいて使用可能なリンクとに基づき、受信時段数表24および転送先ノード表26を作成する。
算出部10の機能は、各ノードNDに含まれる図示しないCPU(Central Processing Unit)等のプロセッサが実行するデータ転送先決定プログラムにより実現されてもよい。すなわち、受信時段数表24および転送先ノード表26は、プロセッサがデータ転送先決定プログラムを実行することにより生成されてもよい。算出部10および各ノードNDに含まれるプロセッサは、コンピュータの一例である。
この場合、記憶部20は、プロセッサによりアクセス可能に設けられ、破線枠で示すように、データ転送先決定プログラム28を格納する記憶領域を有してもよい。そして、各ノードNDのプロセッサがデータ転送先決定プログラム28を実行することで、受信時段数表24と転送先ノード表26とを作成するデータ転送先決定方法が実現される。なお、算出部10の機能は、FPGA(Field Programmable Gate Array)等のハードウェアにより実現されてもよい。
この実施形態では、各ノードNDに設けられる算出部10は、同報通信でのデータの転送先ノードNDを決め、決めた転送先ノードNDを示す情報を、自ノードNDの受信時段数表24および転送先ノード表26に格納する。これにより、決めた転送先ノードNDを他のノードND等に通知しなくてよいため、ネットワークNWの通信負荷の増加を抑止することができる。これに対して、例えば、管理ノード50が、同報通信でのデータの転送先ノードNDを決める場合、決めた転送先ノードNDを各ノードNDに転送するため、ネットワークNWの通信負荷が増加する。
通信部30は、同報通信において、他のノードNDからデータを受信した場合、記憶部20が保持する受信時段数表24および転送先ノード表26に基づいて、データを転送する転送先ノードNDを決定し、決定した転送先ノードNDに受信したデータを転送する。なお、通信部30は、同報通信以外の通信において、受信したデータの宛先が自ノードNDである場合、受信したデータを記憶部20等に格納する機能を有する。また、通信部30は、受信したデータの宛先が他のノードNDである場合、宛先のノードNDに向けてデータを転送する中継機能を有する。
管理ノード50は、ノードNDの管理に使用する管理ネットワークMNWを介して各ノードNDと個別に接続され、各ノードNDを管理する。なお、図1では、管理ノード50は、管理ネットワークMNWを介して一部のノードNDのみに接続されているが、実際には、ネットワークNWに含まれる全てのノードNDに接続される。
例えば、管理ノード50は、各ノードNDのプロセス起動を管理するジョブスケジューラノードでもよい。ジョブスケジューラノードは、並列処理装置100に投入されたジョブを、計算ノードであるノードNDに割り当て、割り当てたノードNDに、ジョブに記載されたプログラムの起動を依頼する。各ノードNDには、同じジョブに参加する全てのノードNDのネットワーク座標等の情報(例えば、ネットワーク座標表22)が、ジョブスケジューラノードから渡される。
図2は、図1のネットワークNWにおいて、ジョブの実行対象のノードNDを含むサブネットワークSNWの一例を示す。図2では、サブネットワークSNWは、サブメッシュネットワークであるが、サブネットワークSNWのトポロジーは、メッシュネットワークに限定されない。例えば、サブネットワークSNWは、ジョブに記載されたプログラムの起動に基づいてデータ処理等を実行するノードNDの全てを含む。サブネットワークSNWに含まれるノードNDおよびノードNDのネットワーク座標を示す情報は、管理ノード50から各ノードNDに転送されるネットワーク座標表22に含まれる。
図2に示す例では、サブネットワークSNWは、X軸方向に並ぶ12個のノードNDと、Y軸方向に並ぶ5個のノードNDとによる60個のノードNDを含む。サブネットワークSNW内の各ノードNDの左上に付した(0、0)等は、ネットワーク座標を示す。なお、サブネットワークSNWにおいても、ネットワークNWと同様に、メッシュネットワークまたはトーラスネットワークになるように、ジョブへのノードNDの割り当てを制御することが好ましい。これにより、異なるジョブの各々のプロセス間通信で使用するリンクを重ならないようにすることができる。
ネットワークNWにおいて、ネットワーク座標表22により定義される同報通信の対象のノードNDが含まれる各次元の座標軸の領域(大きさ)は、形状パラメータと称される。すなわち、サブネットワークSNWは、形状パラメータにより表される。例えば、サブネットワークSNWは、デカルト座標で与えられ、各座標軸X、Yの座標の範囲が予め決められている。なお、ネットワークNWが、サブネットワークSNWとして使用されてもよい。
図3は、図2のサブネットワークSNWのネットワーク座標表22の一例を示す。ネットワーク座標表22は、サブネットワークSNW内の各ノードNDに割り当てられたランク番号RANKとネットワーク座標(X,Y)とが格納される複数のエントリを有する。以下では、ネットワーク座標は、単に座標とも称される。
ランク番号RANKは、サブネットワークSNW内の各ノードNDに割り当てられる通し番号である。図3に示す例では、ランク番号RANKは、座標(0,0)、(0,1)、(0,2)、(0,3)、(0,4)、(0,5)、(1,0)、(1,1)、...、(11,3)、(11,4)のが割り当てられたノードNDのそれぞれに順次割り当てられる。なお、ランク番号RANKの割り当ては、図3に示す例に限定されない。各ノードNDは、自ノードNDの記憶部20に格納されたネットワーク座標表22を参照することで、サブネットワークSNW内のノードNDのネットワーク座標(X,Y)を識別可能である。
各ノードNDに1つのプロセスが割り当てられる場合、ランク番号RANKはノードND毎に割り当てられる。各ノードNDに複数のプロセスが割り当てられる場合、ランク番号RANKは、各ノードNDのプロセス毎に割り当てられる。但し、各ノードNDに複数のランク番号RANKが割り当てられる場合、代表のランク番号RANKをネットワーク座標表22に登録することで、図3に示すネットワーク座標表22をそのまま使用することができる。
なお、ネットワーク座標表22は、図1に示すネットワークNWに含まれる全てのノードNDのネットワーク座標が格納されてもよい。この場合、サブネットワークSNWが生成される毎にネットワーク座標表22を更新しなくてよいため、管理ノード50と各ノードND間での通信量を削減することができる。
図4は、図1の受信時段数表24の一例を示す。受信時段数表24は、同報通信の対象のノードNDの座標(X,Y)と、ノードNDを識別するランク番号RANKと、同報通信においてデータを受信する中継段数とが格納される複数のエントリを有する。中継段数=”0”のノードNDは、同報通信を開始する起点ノードNDを示し、図4では、座標(0,0)が割り当てられたノードNDが起点ノードNDである。以下の説明では、同報通信の起点ノードNDは、”Root”とも称される。
例えば、座標(0,4)、(11,4)が割り当てられたノードNDは、中継段数=”1”でデータを受信することを示す。座標(0,1)、(0,3)、(4,2)、(7,2)、(11,0)、(11,2)が割り当てられたノードNDは、中継段数=”2”でデータを受信することを示す。同報通信では、同じデータが全てのノードNDに転送されるため、各ノードNDはデータを1回受信すればよい。このため、各エントリの中継段数の欄は1つの中継段数のみが格納される。各ノードNDは、データの受信に基づいて受信時段数表24の自ノードNDのエントリを参照することで、データを受信した中継段数を検出することができる。これにより、後述するように、検出した中継段数に基づいて転送先ノード表26を参照することで、データを転送する転送先ノードNDを検出することができる。
図5は、図1の転送先ノード表26の一例を示す。転送先ノード表26は、データを転送するノードNDを識別するランク番号RANKと、同報通信においてデータを転送する中継段数と、データの転送先のノードNDの座標(X,Y)とが格納される複数のエントリを有する。なお、この実施形態では、所定のノードNDは、複数の中継段数でデータを転送する。このため、1つのノードND(例えば、ランク番号RANK=”0”のノードND)に対応する複数のエントリが、転送先ノード表26に割り当てられる。また、この実施形態では、各ノードNDは、同報通信の転送を実行する各中継段数において、2つのノードNDにデータを転送する。このため、各ノードNDは、転送先ノードNDの欄には、2つの座標が格納される。
図6は、図1の並列処理装置100が同報通信を実行する場合の第1フェーズでの各ノードNDの動作の一例を示すフローチャートである。図6に示す動作は、例えば、管理ノード50からの同報通信の開始指示に基づいて、ノードND毎に開始される。図6のフローの開始時の中継段数は”0”であり、図6のフローには示していないが、”Root”のノードNDは、同報通信するデータを、管理ノード50から受信する。なお、”Root”のノードNDは、図6のフローが開始される前に、同報通信するデータを保持していてもよい。
第1フェーズは、同報通信の早い段階で実行される動作であり、できるだけ遠くのノードNDにデータを転送するための動作である。できるだけ遠くのノードNDにデータを転送することで、データを受信するノードNDをサブネットワークSNW内で分散させることができる。また、データを受信するノードNDをサブネットワークSNW内で分散させることで、より多くのノードNDで、リンクを共有することなく、より多くの中継段数を使って、データを他のノードNDに転送することができる。
例えば、第1フェーズでは、各ノードNDが各中継段数においてk個のノードNDにデータを転送し、転送後にデータを保持しているノードNDの数がk+1倍になる状態が続く期間である。データを受信したノードNDが増加し、データの転送先が重複する状況になった場合、転送後にデータを保持しているノードNDの数は、k+1倍以下になる。この実施形態では、ノードNDの数がk+1倍以下になってからの転送は、第1フェーズではなく、第2フェーズに移行して実行される。
まず、ステップS10において、ノードNDは、自ノードNDが”Root”である場合、処理をステップS14に移行し、自ノードNDが”Root”でない場合、処理をステップS12に移行する。ステップS12において、”Root”以外のノードNDは、データを受信するまで待ち、データを受信した場合、処理をステップS14に移行する。
ステップS14において、ノードNDは、受信時段数表24を検索し、自ノードNDに割り当てられたランク番号RANKまたは自ノードNDの座標(X,Y)を含むエントリから中継段数を取得する。例えば、ノードNDが同報通信の起点ノードNDである”Root”の場合、図6のフローの開始時の中継段数は”0”であり、ステップS14の実行時の中継段数は”0”である。
ノードNDが”Root”以外の場合、ステップS14の実行時の中継段数は、ステップS12においてデータを受信した中継段数である。すなわち、受信時段数表24から取得する中継段数は、現在の中継段数である。ノードNDは、取得した中継段数に”1”を加えた値をカウンタ値iとして保持する。
次に、ステップS16において、ノードNDは、転送先ノード表26を検索し、自ノードNDに割り当てられたランク番号RANKとカウンタ値iが示す中継段数とを含むエントリから転送先ノードNDの座標(X,Y)を取得する。受信時段数表24と送信先ノード表26とは、中継段数を介して相互に対応付けすることができる。このため、ノードNDは、受信時段数表24と送信先ノード表26とを検索して転送先ノードNDを取得する場合にも、中継段数を介して1つの表として検索することができる。
次に、ステップS18において、ノードNDは、ステップS16で取得した転送先ノードNDにデータを転送する。次に、ステップS20において、ノードNDは、カウンタ値iに”1”を加える。
次に、ステップS22において、ノードNDは、自ノードNDに割り当てられたランク番号RANKと、ステップS20で更新されたカウンタ値iが示す中継段数とを含むエントリが、転送先ノード表26に存在するか否かを判定する。条件に合致するエントリが存在する場合、データを転送する転送先ノードNDがあるため、処理はステップS16に移行され、同報通信におけるデータの転送動作が継続して実行される。条件に合致するエントリが存在しない場合、第1フェーズでデータを転送するノードNDがなくなったため、第1フェーズの動作が終了する。
各ノードNDは、第1フェーズを他のノードNDに対して独立に実行するが、全てのノードNDに共通の受信時段数表24および転送先ノード表26に基づいて転送動作を実行する。このため、複数のノードNDから転送されるデータが1つのノードNDに重複して転送されることを抑止することができる。
なお、各ノードNDは、図6の動作を開始する前に、受信時段数表24および転送先ノード表26から自ノードNDに対応する情報を取得してもよい。これにより、例えば、ステップS16において、転送先ノード表26から転送先ノードNDを毎回取得する処理を省略することができる。
図7は、図1の並列処理装置100における同報通信の一例を示す。図7に示す同報通信は、各ノードNDが、図4に示す受信時段数表24および図5に示す転送先ノード表26を参照し、図6に示すフローを実行する場合の例である。図7において、黒丸で示すノードNDは、同報通信されるデータを受信したことを示し、白丸で示すノードNDは、同報通信されるデータを受信していないことを示す。
まず、中継段数=”0”では、”Root”である座標(0,0)のノードNDのみが同報通信のデータを受信済みである。中継段数=”0”での転送済みノード数は”1”である。
次に、中継段数=”1”では、”Root”のノードNDは、転送先ノード表26を参照し、座標(0,4)、(11,4)のノードNDにデータを転送する。データを受信した座標(0,4)、(11,4)のノードNDは、受信時段数表24を参照し、現在の中継段数が”1”であることを検出する。中継段数=”1”での転送済みノード数は”3”である。
中継段数=”2”では、”Root”のノードNDは、転送先ノード表26を参照し、中継段数=”2”に対応して転送先ノードND(座標(0,1)、(11,0))が存在することを検出する。このため、”Root”のノードNDは、座標(0,1)、(11,0)にデータを転送する。
座標(0,4)のノードND(RANK=4)は、転送先ノード表26を参照し、中継段数=”2”に対応して転送先ノードND(座標(0,3)、(4,2))が存在することを検出する。このため、ノードND(RANK=4)は、座標(0,3)、(4,2)にデータを転送する。
座標(11,4)のノードND(RANK=59)は、転送先ノード表26を参照し、中継段数=”2”に対応して転送先ノードND(座標(7,2)、(11,2))が存在することを検出する。このため、ノードND(RANK=4)は、座標(7,2)、(11,2)にデータを転送する。中継段数=”2”での転送済みノード数は”9”である。
図7に示すように、各ノードNDは、転送先ノード表26に基づいて、中継段数が小さい場合に転送距離が相対的に大きいノードNDにデータを転送し、中継段数が増えるにしたがい、転送距離が相対的に小さいノードNDにデータを転送する。これにより、データを受信するノードNDをサブネットワークSNW内に分散させることができ、データを受信したノードNDが以後の同報通信の転送に参加し続ける中継段数を増やすことができる。また、データを受信するノードNDを分散させることで、データを送受信する複数のノードND対の通信でリンクの共有が発生する可能性を下げることができる。
第1フェーズでは、例えば、同報通信の各中継段数において、各ノードNDが2つのノードNDにデータを転送する場合、m段目では、”3”のm乗個のノードNDにデータを保持させることができる。同報通信の各中継段数において、各ノードNDがデータを転送できるノードNDの数を”k”とする場合、m段においてデータを受信済みのノードNDの数は、”(k+1)m”で示される。
図8は、図1の並列処理装置100が同報通信を実行する場合の第2フェーズでの各ノードNDの動作の一例を示すフローチャートである。第2フェーズは、図6のステップS22でデータを転送するノードNDがなくなり、第1フェーズを終了したノードNDが開始する。すなわち、図8は、ノードND毎に実行される。
まず、ステップS30において、ノードNDは、自ノードNDの転送先ノード表26の全エントリに格納された転送先ノードNDを検索し、自ノードNDに隣接するノードNDのうち、転送先ノードNDに該当しない隣接ノードNDを検出する。隣接ノードNDか否かは、ネットワーク座標表22に基づいて判定可能である。例えば、自ノードNDの座標(X,Y)に対して、X軸またはY軸が”1”だけずれたノードNDが隣接ノードNDである。転送先ノードNDに含まれない隣接ノードNDは、第1フェーズではデータが転送されていないノードNDであり、第2フェーズでデータを転送する必要がある。
次に、ステップS32において、ノードNDは、データを転送していない隣接ノードNDを検出した場合、処理をステップS34に移行する。一方、ノードNDは、データを転送していない隣接ノードNDを検出しない場合、全ての隣接ノードNDにデータが転送されているため、処理を終了する。
ステップS34において、ノードNDは、データが転送されていない隣接ノードNDのうちk個を上限としてデータを転送する隣接ノードNDを決定する。k個は、同報通信の各中継段数において、各ノードNDがデータを転送できるノードNDの数であり、例えば、2個である。換言すれば、k個は、あるノードNDからのデータ転送バンド幅の合計が最大になる同時転送動作の数である。k個は、メッセージ長、各ノードNDに接続される通信リンクの数、ネットワーク装置のDMA(Direct Memory Access)転送エンジンの数、ネットワーク装置が接続されているシステムバスのバンド幅、ネットワーク装置のコマンドキューの動作並列度等に基づいて決められる。ネットワーク装置は、各ノードNDに含まれ、ノードND間での通信を制御する機能を有する。
次に、ステップS36において、ノードNDは、ステップS34で決定した隣接ノードNDにデータを転送する。次に、ステップS38において、ノードNDは、データの転送を決定した隣接ノードNDのうち、データを転送していない隣接ノードNDがある場合、処理をステップS34に戻し、データの転送処理を実行する。一方、ノードNDは、全ての隣接ノードNDにデータを転送済みの場合、処理を終了する。以上の動作を各ノードNDで実行することで、全てのノードNDにデータが転送され、同報通信が終了する。
なお、任意のノードNDに隣接する4つのノードNDは、任意のノードNDを隣接ノードNDと判断する。このため、隣接ノードNDは、第2フェーズのある中継段数において、周囲の複数のノードNDからデータを受信する可能性がある。この場合、隣接ノードNDは、先に受信したデータを有効とし、後で受信したデータを破棄してもよい。
図9は、図1の各ノードNDが実行するデータの転送先を決定する処理の一例を示す。換言すれば、図9は、上述した第1フェーズで使用する受信時段数表24および転送先ノード表26を作成する処理を示す。図9に示す処理は、図1に示す算出部10により実行される。なお、図9に示す処理は、各ノードNDに含まれるCPU等のプロセッサが実行するデータ転送先決定プログラムにより実現される算出部10により実行されてもよい。すなわち、図9は、データ転送先決定方法の一例およびデータ転送先決定プログラムの一例を示す。
まず、ステップS40において、算出部10は、中継段数mを”1”に設定する。次に、ステップS42において、算出部10は、転送数kと中継段数mとを用いて、第m段でのデータの転送先のノードNDの総数を求める。転送数kは、各中継段数mにおいて各ノードNDからデータが転送されるノードNDの数である。例えば、転送数kが”2”の場合、第2段目では6個のノードNDにデータが転送され、第3段目では18個のノードNDにデータが転送される。
次に、ステップS44において、算出部10は、データの転送先のノードNDがサブネットワークSNW内で分散するように、データの転送元のノードND毎に、データを受信していないノードNDの中からデータの転送先である転送先ノードNDを決定する。例えば、データを受信済みのノードNDのネットワーク座標の分散の最大化を目的関数とする最適化問題を解くことで、データの転送先のノードNDを算出することができる。算出部10は、データを受信していないノードNDを、例えば、後述するステップS50で更新される転送先ノード表26を参照することで判断する。
次に、ステップS46において、算出部10は、ステップS44で決定したデータの転送先ノードNDが重複するか否かを判定する。転送先ノードNDが重複する場合、転送先ノードNDをこれ以上分散させることが困難であると判断され、処理は終了する。なお、処理を終了する場合、直前のステップS44で決定した転送先ノードNDを示す情報は破棄される。
転送先ノードNDとして割り当られていないノードNDは、図8に示す第2フェーズの動作により、隣接ノードNDとしてデータが転送される。転送先ノードNDが重複する場合、第2フェーズにおいて、隣接ノードNDを転送先ノードNDとして割り当てることで、1つの転送先ノードNDにデータが重複して転送される可能性を低くすることができる。この結果、同報通信におけるデータの転送効率が低下することを抑止することができる。
一方、転送先ノードNDが重複しない場合、転送先ノードNDにデータを転送するノードNDを決めるため、処理はステップS48に移行される。ステップS48において、算出部10は、データを受信済みのノードNDを転送元ノードNDとして、ステップS44で決定した転送先ノードNDのうち、どの転送先ノードNDに各転送元ノードNDからデータを転送するかを決める。すなわち、算出部10は、データの転送元ノードNDとデータの転送先ノードNDとの組合せを決定する。なお、データを受信済みのノードNDは、データ転送先決定プログラム上で決められる仮想的なノードNDである。
各ノードNDが各中継段数においてk個のノードNDにデータを転送する場合(転送数=k)、算出部10は、1つの転送元ノードNDとk個の転送先ノードNDとの組合せ(割り当て)を決定する。ここで、算出部10は、データの転送経路が交差しないように組合せを決定する。これにより、複数の転送先ノードNDへのデータの転送に、共通のリンクが使用される可能性を低くすることができる。
なお、決定した組合せでのデータの転送において、共通のリンクが使用される場合(使用するリンクが重複する場合)、算出部10は、転送元ノードNDと転送先ノードNDとの割り当てを変更することで、共通のリンクを使用しない転送経路の設定を試みる。これにより、共通のリンクを使用する可能性を下げることができる。共通のリンクを使用する転送経路を完全になくすことができない場合、算出部10は、共通のリンクを使用する転送経路の比率が最も低くなるように、転送先のノードNDの割り当てを変更してもよい。
次に、ステップS50において、算出部10は、ステップS44で決定した各転送先ノードNDの座標(X,Y)、ランク番号RANKおよび中継段数mを受信時段数表24に格納することで、受信時段数表24を更新する。次に、ステップS52において、算出部10は、ステップS44で決定した各転送先ノードNDの座標(X,Y)を、データの転送元のノードNDを示すランク番号RANKと中継段数mとに対応付けて転送先ノード表26に格納する。これにより、転送先ノード表26が更新される。
次に、ステップS54において、算出部10は、中継段数mを”1”増加し、処理をステップS42に戻し、次の中継段数mでのデータの転送先のノードNDを決定する処理を実行する。データの転送先のノードNDを決定する処理は、上述したように、転送先ノードNDが重複するまで繰り返し実行される。なお、ステップS50、S52、S54の順序は、入れ替えられてもよい。
図10は、他の並列処理装置における同報通信の一例(比較例)を示す。図10に示す同報通信では、”Root”である座標(0,0)が割り当てられたノードNDが、中継段数=”1”において、自ノードNDに隣接する隣接ノードNDにデータを転送する。データを受信したノードNDは、中継段数=”2”において、自ノードNDに隣接する隣接ノードNDにデータを転送する。この後も、各中継段数において、データを受信したノードNDは、自ノードNDに隣接する隣接ノードNDにデータを転送する。
隣接するノードNDにデータを順次転送する同報通信では、データの転送方向は、”Root”から離れる方向に限られる。図10に示す例では、”Root”から離れる方向は、X座標が増加する方向またはY座標が増加する方向である。このため、ある中継段数でデータを転送したノードNDは、その後の中継段数でデータを転送できない場合がある。例えば、”Root”のノードNDは、中継段数=”2”では同報通信に参加できない。厳密には、Root”のノードNDは、他のノードNDとリンクを共有することで、同報通信に参加することができるが、この場合、データ転送の帯域が小さくなってしまう。
したがって、図10に示す同報通信では、図7に示す同報通信に比べて、データの転送効率が低下する。換言すれば、図7に示す同報通信では、受信したデータを他のノードNDに転送したノードNDは、それ以降の中継段数においてもデータを他のノードNDに転送することができる。この結果、図7に示す同報通信では、図10に示す同報通信に比べて、同報通信に掛かる時間(中継段数)を削減することができ、同報通信の効率を向上することができる。
ところで、データサイズ(メッセージサイズ)が大きく、1回でデータを転送できない場合、データを分割してパイプライン転送を行うことで、データの転送効率は向上する。一方、データ量が小さく、1回でデータ転送可能な場合、同報通信の完了までに必要な時間は転送の中継段数に比例する。この場合、”k”を2以上の整数として、k分木による同報通信アルゴリズムにおいて、中継段数がm段(mは正の整数)の転送までにデータを受信済になるノード数は、式(1)に示される。
なお、”木”は、グラフ理論における”閉路を持たないグラフないし部分グラフ”という意味の用語であり、対応する計算機ネットワークの全体ないし一部の接続関係を表現するために使用可能である。
ノード数が”N”のサブネットワークSNWにおいて、同報通信により全ノードNDにデータを転送する場合に必要な中継段数は、式(2)に示される。
例えば、図2に示すサブネットワークSNWの同報通信において、サブネットワークSNWに含まれるN個の全てのノードNDにk分木でデータを転送する場合、転送回数(すなわち、中継段数)は”logk+1N”程度になる。転送データ量をD、中継一回あたりのバンド幅をB、転送一回当たりのオーバヘッド+通信遅延時間をLとすると、同報通信全体での通信時間の概算は、式(3)で示され、通信遅延時間の概算は、式(4)で示される。
一方、データサイズが大きく、データDを3つに分割して2分木でパイプライン転送を行う他の並列処理装置における同報通信全体での通信時間の概算は、式(5)に示される。
式(5)において、転送データ量をD/3、中継一回あたりのバンド幅をB、転送一回当たりの転送オーバヘッドと通信遅延時間の和をLとする。
例えば、N=2000、k=3、B=12.5GiB/sec、D=1.25MiB、L=1μsec(10-6sec)とすると、並列処理装置100での通信時間の概算は、式(3)のLが無視できるとした場合の式(6)より179μsec程度になる。一方、通信時間の概算が式(5)で示される他の並列処理装置での通信時間の概算は、式(5)のLが無視できるとした場合の式(7)より333μsec程度になる。式(6)および式(7)中の符号*は、乗算を示す。式(6)で示される通信時間は、式(7)で示される通信時間の40%程度である。
式(6)は、図7に示すように、同報通信においてデータの転送先ノードNDを分散させる場合の通信時間を示している。式(7)は、同報通信においてデータを隣接ノードNDに転送する場合の通信時間を示している。このため、図7に示した同報通信に掛かる通信時間を、図10に示す同報通信に掛かる通信時間に比べて短縮することができる。
一方、Lが通信時間の主要因子となる場合、3分木を使用すると、並列処理装置100での通信時間の概算は、式(4)に基づき5.5μsec程度となり、他の並列処理装置での通信時間の概算は、式(2)にLを乗じて6.5μsec程度となる。Lが通信時間の主要因子となる場合の通信時間についても、並列処理装置100が有利である。
以下では、受信時段数表24と転送先ノード表26を作成する実施例が示される。すなわち、以下では、同報通信を実行するサブネットワークSNWにおいて、上述した第1フェーズでのデータの転送順の算出方法が説明される。
各ノードNDが各中継段数においてk個のノードNDにデータを転送し、転送後にデータを保持しているノードNDの数がk+1倍になる状態が続く期間である第1フェーズは、中継段数が上限nに達するまで実行される。上限nは、”(k+1)n≦N”が成立する最大の整数である。例えば、実数xに対し”xを越えない最大の整数”をガウスの記号により[x]と表記すると、上限nは、式(8)により示される。
n=[logk+1N] ‥(8)
以下、二次計画法を用いて各中継段数でのデータの転送先のノードNDを決める方法を説明する。説明を簡明にするため、ネットワークトポロジーはメッシュネットワークとする。”同報通信の早い段階では、できるだけ遠くのノードNDにメッセージ(データ)を転送する”という条件を実現するため、”メッシュネットワークの各次元のネットワーク座標の分散”を最大化する目的関数とする。
<実施例1>
以下の手順を実行するデータ転送先決定プログラムにより求めた結果を、受信時段数表24および転送先ノード表26に登録する。なお、実施例1で実行されるデータ転送先決定プログラムは、下記のステップAおよびステップBを含み、図9に示すデータ転送先決定プログラムの処理とは異なる。以下、実施例1で実行されるデータ転送先決定プログラムは、単にプログラムと称される。
ステップAでは、プログラムは、各中継段数においてデータの転送先ノードND(すなわち、データを受信するノードND)の座標を決定する。ステップAは、以下のサブステップA1、A2、A3を含み、例えば、中継段数毎に実行される。なお、ステップAで用いる「整数変数の二次計画法サブルーチン」の出力は厳密解でなくてもよく、例えば「整数である」という制約を外した「緩和問題」の解の整数部分をとった近似解でよい。
サブステップA1では、プログラムは、各中継段数でデータを受信するノードNDおよびその座標を格納する配列を割り当てる。
次に、サブステップA2では、プログラムは、m-1段でデータを受信済みの(k+1)m-1個のノードNDの座標を入力として、「m段までにデータを受信するノードNDの座標の分散」を最大化する目的関数を受け付ける。
次に、サブステップA3では、プログラムは、サブステップA2の目的関数を与えて、整数変数の二次計画法サブルーチンを呼び出し、サブルーチンが出力する受信ノードNDの座標を配列に格納する。サブステップA3では、プログラムは、中継段数毎に、k×(k+1)m-1個のネットワーク座標(すなわち、データを受信するノードND)を導き出す。kは、各ノードNDがデータを転送できるノードNDの数である。
ステップAの完了後、ステップBでは、プログラムは、第m-1段までにデータを受信したノードNDと第m段でデータを受信するノードNDとの対応付け行う。ステップBは、以下のサブステップB1、B2、B3を含み、例えば、中継段数毎に実行される。
サブステップB1では、プログラムは、第m-1段までにデータを受信した(k+1)m-1個のノードND毎に、第m段でデータを受信するべきk×(k+1)m-1個のノードNDの中からk個を割り当てる。すなわち、プログラムは、第m段において、データを転送するノードNDとデータを受信するノードNDとの対応関係を決める。
次に、サブステップB2では、プログラムは、第m段でデータを受信するk(k+1)m-1個のノードNDの各々に対応するエントリを、受信時段数表24に追加する。
サブステップB3では、プログラムは、第m-1段までにデータを受信したノードNDの各々に対し、割り当てたk個のノードNDを転送先ノードNDとするエントリを、転送先ノード表26に追加する。なお、サブステップB2、B3は逆順に実行されてもよい。
ステップA、Bの実行により、それぞれのノードNDが各中継段数でどのノードNDにデータを転送するのかが決定される。二次計画法を解くことにより”同報通信の早い段階では、できるだけ遠くのノードNDにメッセージ(データ)を転送する”という条件が達成される。このため、パケット(データ)の衝突が起こりにくく、上述した第1フェーズの後半においても転送能力が損なわれにくい通信手順が可能となる。
<実施例2>
実施例1では、共通のリンクの使用を考慮せずに、転送先ノードNDが決定される。このため、共通のリンクを使用してデータが転送された場合、転送効率が低下する。実施例2では、共通のリンクを使用する可能性が低くなるように、転送先ノードNDが決定される。
実施例2は、サブステップB1が実施例1と異なることを除き、実施例1と同様の処理を実行する。実施例2のサブステップB1では、プログラムは、転送元のノードND毎にk個の転送先ノードNDを割り当てた後、例えば、次元順ルーティングによるデータの転送経路中に共通のリンクを使用する経路があるかを判定する。プログラムは、共通のリンクを使用する経路がある場合、共通のリンクを使用する経路がなくなるように、転送先のノードNDの割り当てを変更する。
プログラムは、共通のリンクを使用する経路を完全になくすことができない場合、各中継段数において共通のリンクを使用する経路の比率が最も低くなるように、転送先のノードNDの割り当てを変更してもよい。さらに、プログラムは、複数の中継段数において共通のリンクを使用する経路の比率が最も低くなるように、転送先のノードNDの割り当てを変更してもよい。
実施例2では、データの転送時に共通のリンクを使用する確率を下げることができ、データの転送効率の向上により、同報通信時間を短縮することができる。
以上、本実施形態では、データを受信したノードNDが同報通信のデータ転送に参加し続けることができ、かつ、隣接ノードNDにデータを転送する場合に比べて、各ノードNDがデータ転送に参加できる中継段数を多くすることができる。この結果、各中継段数において、データ転送ノードNDを増加させることができ、同報通信が完了するまでに掛かる時間を削減することができる。
また、できるだけ遠くのノードNDにデータを転送することで、データを受信するノードNDをサブネットワークSNW内で分散させることができる。データを受信するノードNDをサブネットワークSNW内で分散させることで、より多くのノードNDで、リンクを共有することなく、より多くの中継段数を使って、データを他のノードNDに転送することができる。
各ノードNDの算出部10が、共通のデータ転送先決定プログラムを実行するため、ノードNDで同一の受信時段数表24および転送先ノード表26を作成することができる。このため、各ノードNDは、算出により決定した転送先ノードNDを他のノードNDに通知しなくてよいため、ネットワークNWの通信負荷の増加を抑止することができる。
受信時段数表24および転送先ノード表26は、同報通信の対象の全てのノードNDの受信情報および転送情報を含む。このため、各ノードNDは、共通のデータ転送先決定プログラムを実行することで、受信時段数表24および転送先ノード表26を生成することができる。これにより、管理ノード50は、1つのデータ転送先決定プログラムを各ノードNDに配布して実行させればよく、管理ノード50によるノードNDの管理を簡易にすることができる。
第1フェーズでの転送先ノードNDを決める際に、転送先ノードNDが重複する場合、第2フェーズにおいて、隣接ノードNDを転送先ノードNDとして割り当てることで、1つの転送先ノードNDにデータが重複して転送される可能性を低くすることができる。この結果、同報通信におけるデータの転送効率が低下することを抑止することができる。
共通のリンクを同時に使用する可能性を低くしてパケットの転送を実行することができ、共通のリンクを同時に使用してパケットを転送する場合に比べて、パケットの転送効率を向上することができる。
サブネットワークSNWに含まれるノードNDのグループ毎に、共通のデータ転送先決定プログラムが実行され、各ノードNDは、共通の受信時段数表24および転送先ノード表26を作成する。すなわち、受信時段数表24および転送先ノード表26は、サブネットワークSNWの形状パラメータおよびサブネットワークSNWに含まれるノードNDの数に応じて生成される。このため、サブネットワークSNWのサイズに合わせて、同報通信によるデータの転送効率を最適に設定することができる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。