(57)【要約】【課題】並列処理装置においてデータの同報通信が完了するまでに掛かる時間を削減する。【解決手段】ネットワークを介して相互に接続される複数のノードを含む並列処理装置において、前記複数のノードの各々は、前記ネットワークの構成情報と、前記ネットワーク上での各ノードの位置情報と、同報通信時の起点ノードを示す起点ノード情報とに基づいて、転送回数の増加にしたがって転送距離が徐々に小さくなるような同報通信におけるデータの転送先である転送先ノードを求める算出部と、前記算出部が算出した転送回数毎の転送先ノードの位置情報が格納される記憶部と、同報通信時に他のノードからデータを受信した場合、前記記憶部に記憶された情報に基づいて転送先ノードを決定し、決定した転送先ノードに、受信したデータを転送する通信部と、を有する。【選択図】図１
2020126487.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを介して相互に接続される複数のノードを含む並列処理装置において、
前記複数のノードの各々は、
前記ネットワークの構成情報と、前記ネットワーク上での各ノードの位置情報と、同報通信時の起点ノードを示す起点ノード情報とに基づいて、転送回数の増加にしたがって転送距離が徐々に小さくなるような同報通信におけるデータの転送先である転送先ノードを求める算出部と、
前記算出部が算出した転送回数毎の転送先ノードの位置情報が格納される記憶部と、
同報通信時に他のノードからデータを受信した場合、前記記憶部に記憶された情報に基づいて転送先ノードを決定し、決定した転送先ノードに、受信したデータを転送する通信部と、を有することを特徴とする並列処理装置。
【請求項２】
前記算出部は、転送回数の増加にしたがって転送先ノードまでの転送距離を徐々に小さくする転送先ノードの算出を、前記複数のノード毎に実行し、
前記記憶部は、前記算出部が前記複数のノード毎に算出した転送先ノードを転送回数に対応付けて記憶し、
前記通信部は、他のノードからデータを受信した場合、自ノードに対応して転送回数毎に前記記憶部に記憶された転送先ノードにデータを転送することを特徴とする請求項１に記載の並列処理装置。
【請求項３】
前記算出部は、データの転送元である転送元ノードからデータを受信する転送先ノードが重複する場合、転送先ノードが重複した転送回数の１つ前の転送回数までの転送先ノードを前記記憶部に格納し、
前記通信部は、前記記憶部に記憶された転送先ノードへのデータの転送を完了した場合、自ノードに隣接する隣接ノードのうち、データを受信していないノードにデータを転送することを特徴とする請求項１または請求項２に記載の並列処理装置。
【請求項４】
前記記憶部は、データを受信する転送回数を前記複数のノード毎に保持する受信条件保持領域と、転送回数と転送先ノードとの対応関係を前記複数のノード毎に保持する転送条件保持領域とを有し、
前記複数のノードの各々の前記通信部は、データの受信に基づいて前記受信条件保持領域を参照してデータを受信した転送回数を検出し、検出した転送回数に基づいて前記転送条件保持領域を参照し、データを転送する転送先ノードを決定することを特徴とする請求項１ないし請求項３のいずれか１項に記載の並列処理装置。
【請求項５】
前記算出部は、
転送回数毎に、データを受信していないノードの中から、所定数のノードを転送先ノードに割り当て、割り当てた転送先ノードと転送回数との対応関係を前記受信条件保持領域に格納し、
転送回数毎に、データの転送元である転送元ノードと転送先ノードとを対応付けし、転送元ノードと転送先ノードとの対応付けを転送回数とともに前記転送条件保持領域に格納することを特徴とする請求項４に記載の並列処理装置。
【請求項６】
前記算出部は、複数の転送先ノードそれぞれへのデータの転送がリンクを共有する場合、リンクを共有しない転送元ノードと転送先ノードとの組合せに変更することを特徴とする請求項５に記載の並列処理装置。
【請求項７】
前記算出部は、転送回数毎に、データを受信していないノードの中から、分散している所定数のノードを転送先ノードに割り当てることを特徴とする請求項１ないし請求項６のいずれか１項に記載の並列処理装置。
【請求項８】
同報通信の対象の前記ネットワークは、全体のネットワークのうちの一部であるサブネットワークであることを特徴とする請求項１ないし請求項７のいずれか１項に記載の並列処理装置。
【請求項９】
ネットワークを介して相互に接続される複数のノードを含む並列処理装置の同報通信時のデータの転送先を決定するデータ転送先決定方法において、
前記複数のノードの各々が、
前記ネットワークの構成情報と、前記ネットワーク上での各ノードの位置情報と、同報通信時の起点ノードを示す起点ノード情報とに基づいて、転送回数の増加にしたがって転送距離が徐々に小さくなるような同報通信におけるデータの転送先である転送先ノードを求め、
算出した転送回数毎の転送先ノードの位置情報をノード内の記憶部に格納すること、を特徴とするデータ転送先決定方法。
【請求項１０】
ネットワークを介して相互に接続される複数のノードを含む並列処理装置の同報通信時のデータの転送先を決定するデータ転送先決定プログラムにおいて、
前記複数のノードの各々が有するコンピュータに、
前記ネットワークの構成情報と、前記ネットワーク上での各ノードの位置情報と、同報通信時の起点ノードを示す起点ノード情報とに基づいて、転送回数の増加にしたがって転送距離が徐々に小さくなるような同報通信におけるデータの転送先である転送先ノードを求め、
算出した転送回数毎の転送先ノードの位置情報をノード内の記憶部に格納させること、を特徴とするデータ転送先決定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列処理装置、データ転送先決定方法およびデータ転送先決定プログラムに関する。
【背景技術】
【０００２】
複数のノードを含むネットワークにおいて、複数のデータを同報通信する場合、あるノードから別のノードに所定回数のデータ転送を実行した後、２つのノード間でデータ転送を相互に実行することで、転送時間が削減される（例えば、特許文献１参照）。また、あるノードから別のノードのそれぞれに個別のデータを送信する場合、ネットワークを複数の均等な領域に分割し、領域それぞれに対するデータの送信回数を等しくすることで、効率のよい通信が実現される（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平１１−３４５２２０号公報
【特許文献２】国際公開第２００８／１１４４４０号
【発明の概要】
【発明が解決しようとする課題】
【０００４】
分散メモリ型のＨＰＣ（High  Performance  Computing）システム等の並列処理装置では、並列計算を行うジョブの実行時に、複数のノードがデータを一斉に転送する動作が随所で必要となる。例えば、データの一斉転送として同報通信（broadcast）がある。
【０００５】
同報通信では、なるべく多くのノードが、なるべく早く、なるべく長い時間、送信ノードとして動作することが望ましく、さらに、転送レートを低下させるリンクの共有が発生しないことが望ましい。しかしながら、例えば、データを隣接ノードに順次転送する同報通信では、データを送信した送信済みノードが同報通信に参加し続ける場合、２回目以降のデータ転送は、他の送信済みノードを介して送信されることになる。この結果、２回目以降のデータ転送時に他のノードとリンクを共有する可能性が高くなり、同報通信時のデータの転送効率は低下し、リンクの共有が発生しない場合に比べて、同報通信を完了するまでの時間が掛かってしまう。
【０００６】
１つの側面では、本発明は、並列処理装置においてデータの同報通信が完了するまでに掛かる時間を削減することを目的とする。
【課題を解決するための手段】
【０００７】
一つの観点によれば、ネットワークを介して相互に接続される複数のノードを含む並列処理装置において、前記複数のノードの各々は、前記ネットワークの構成情報と、前記ネットワーク上での各ノードの位置情報と、同報通信時の起点ノードを示す起点ノード情報とに基づいて、転送回数の増加にしたがって転送距離が徐々に小さくなるような同報通信におけるデータの転送先である転送先ノードを求める算出部と、前記算出部が算出した転送回数毎の転送先ノードの位置情報が格納される記憶部と、同報通信時に他のノードからデータを受信した場合、前記記憶部に記憶された情報に基づいて転送先ノードを決定し、決定した転送先ノードに、受信したデータを転送する通信部と、を有する。
【発明の効果】
【０００８】
１つの側面では、本発明は、並列計算機においてデータの同報通信が完了するまでに掛かる時間を削減することができる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態における並列処理装置の一例を示す図である。
【図２】図１のネットワークにおいて、ジョブの実行対象のノードを含むサブネットワークの一例を示す図である。
【図３】図２のサブネットワークのネットワーク座標表の一例を示す図である。
【図４】図１の受信時段数表の一例を示す図である。
【図５】図１の転送先ノード表の一例を示す図である。
【図６】図１の並列処理装置が同報通信を実行する場合の第１フェーズでの各ノードの動作の一例を示すフローチャートである。
【図７】図１の並列処理装置における同報通信の一例を示す図である。
【図８】図１の並列処理装置が同報通信を実行する場合の第２フェーズでの各ノードの動作の一例を示すフローチャートである。
【図９】図１の各ノードが実行するデータの転送先を決定する処理の一例を示すフローチャートである。
【図１０】他の並列処理装置における同報通信の一例（比較例）を示す図である。
【発明を実施するための形態】
【００１０】
以下、図面を用いて実施形態が説明される。
【００１１】
図１は、一実施形態における並列処理装置の一例を示す。図１に示す並列処理装置１００は、複数のノードＮＤを有するネットワークＮＷと、各ノードＮＤを管理する管理ノード５０とを有する。各ノードＮＤは、算出部１０、記憶部２０および通信部３０を有する。なお、図１では、ネットワークＮＷが２次元メッシュネットワークである例を示すが、ネットワークＮＷは、他のネットワークでもよく、次元は２次元以外でもよい。
【００１２】
例えば、並列処理装置１００は、分散メモリ型の大規模ＨＰＣシステムとして動作する。複数のノードＮＤを使用して並列計算を実行するジョブでは、随所において、複数のノードＮＤが特定の通信パターンにしたがって一斉に実行する通信が必要になる。このような通信は、集団通信(Collective  Communication)と称される。以下では、集団通信の一例として、同報通信を例に説明する。
【００１３】
記憶部２０は、ネットワーク座標表２２、受信時段数表２４および転送先ノード表２６を保持する記憶領域を有する。受信時段数表２４を保持する記憶領域は、受信条件保持領域の一例であり、転送先ノード表２６を保持する記憶領域は、転送条件保持領域の一例である。
【００１４】
ネットワーク座標表２２は、ネットワークＮＷに含まれるノードＮＤのうち、ジョブを並列に実行する所定数のノードＮＤの構成情報（ネットワーク座標を示す座標情報等）を含む。換言すれば、ネットワーク座標表２２は、同報通信の対象のノードＮＤの構成情報を含む。
【００１５】
ネットワーク座標表２２は、ネットワークＮＷの構成が決まった時点で、管理ノード５０から各ノードＮＤに予め配布されてもよく、ジョブを実行する前に管理ノード５０から各ノードＮＤに予め配布されてもよい。各ノードＮＤは、自ノードＮＤ内のネットワーク座標表２２を参照することで、他のノードＮＤと通信することなく、自ノードＮＤおよび同報通信の対象の全てのノードＮＤの座標情報（すなわち、位置情報）を取得することができる。なお、各ノードＮＤは、管理ノード５０から自ノードＮＤの座標情報を予め通知されており、ネットワークＮＷ内での自ノードＮＤの位置を把握している。
【００１６】
例えば、ネットワーク座標表２２に含まれる座標情報で示される範囲のサブネットワークに含まれるノードＮＤが、同じジョブに参加するノードＮＤのグループになる。ネットワーク座標表２２の例は、図３に示される。以下では、ジョブを並列に実行する複数のノードＮＤを含む部分的なネットワークは、サブネットワークＳＮＷ（図２）とも称される。そして、サブネットワークＳＮＷに含まれる全てのノードＮＤは、同報通信の対象のノードＮＤである。
【００１７】
受信時段数表２４は、複数回の転送により実行される同報通信において、同報通信の対象の複数のノードＮＤの各々がどの転送回数の同報通信時にデータを受信するかを示す情報を含む。すなわち、各ノードＮＤの記憶部２０の受信時段数表２４は、自ノードＮＤだけでなく、同報通信の対象の全てのノードＮＤについて、どの転送回数の同報通信でデータを受信するかを示す情報を含む。受信時段数表２４の例は、図４に示される。
【００１８】
転送先ノード表２６は、複数回の転送により実行される同報通信の転送回数毎に、所定のノードＮＤが転送するデータの転送先である転送先ノードＮＤを示す情報を含む。すなわち、各ノードＮＤの記憶部２０の転送先ノード表２６は、自ノードＮＤだけでなく、同報通信の対象の全てのノードＮＤについて、同報通信の転送回数毎の転送先ノードＮＤを示す情報を含む。転送先ノード表２６の例は、図５に示される。同報通信の転送回数は、ノードＮＤ毎の転送ではなく、サブネットワークＳＮＷ全体での転送において、どの転送回数による転送かを示している。データの転送は、ノードＮＤを中継して実行され、各中継は同報通信の状態を示すため、以下では、同報通信の転送回数は、中継段数とも称される。
【００１９】
なお、受信時段数表２４は、同報通信において、自ノードＮＤがデータを受信する中継段数のみを含んでもよい。同様に、転送先ノード表２６は、同報通信において、自ノードＮＤから転送するデータの転送先ノードＮＤを示す情報のみを含んでもよい。但し、受信時段数表２４および転送先ノード表２６に格納される情報は、例えば、各ノードＮＤが実行するデータ転送先決定プログラムにより生成される。したがって、同報通信の対象の全てのノードＮＤの情報を含む受信時段数表２４および転送先ノード表２６を生成する場合、共通のデータ転送先決定プログラムを同報通信の対象の全てのノードＮＤで使用することができる。これにより、管理ノード５０は、１つのデータ転送先決定プログラムを各ノードＮＤに配布して実行させればよく、管理ノード５０によるノードＮＤの管理を簡易にすることができる。
【００２０】
算出部１０は、自ノードＮＤの記憶部２０が保持するネットワーク座標表２２と同報通信時の起点ノードＮＤを示す起点ノード情報とに基づいて、同報通信におけるデータの転送先である転送先ノードＮＤを、転送距離が徐々に小さくなるように算出する。例えば、転送距離は、データが転送されるノードＮＤ間の経路上の距離（マンハッタン距離）が使用されてもよい。なお、ネットワーク座標表２２は、同報通信の対象のネットワークの構成と、同報通信の対象のネットワークに含まれるノードＮＤの位置情報とを含む。
【００２１】
そして、算出部１０は、算出した転送先ノードＮＤに基づいて、受信時段数表２４と転送先ノード表２６とを作成し、作成した受信時段数表２４と転送先ノード表２６とを記憶部２０に格納する。受信時段数表２４および転送先ノード表２６は、データ等のメッセージを転送する順序を示すメッセージ転送順データベースの一例である。なお、起点ノード情報は、管理ノード５０から各ノードＮＤに予め通知されてもよく、ネットワーク座標表２２に含まれてもよい。
【００２２】
このように、算出部１０は、”同報通信の早い段階では、できるだけ遠くのノードＮＤにメッセージ（データ）を転送する”ための転送パターンの情報を含む受信時段数表２４および転送先ノード表２６を、同報通信が開始される前に予め作成する。この際、算出部１０は、サブネットワークＳＮＷ（図２）に含まれるノードＮＤと、同報通信の転送を開始する起点ノードＮＤ（開始位置）と、サブネットワークＳＮＷにおいて使用可能なリンクとに基づき、受信時段数表２４および転送先ノード表２６を作成する。
【００２３】
算出部１０の機能は、各ノードＮＤに含まれる図示しないＣＰＵ（Central  Processing  Unit）等のプロセッサが実行するデータ転送先決定プログラムにより実現されてもよい。すなわち、受信時段数表２４および転送先ノード表２６は、プロセッサがデータ転送先決定プログラムを実行することにより生成されてもよい。算出部１０および各ノードＮＤに含まれるプロセッサは、コンピュータの一例である。
【００２４】
この場合、記憶部２０は、プロセッサによりアクセス可能に設けられ、破線枠で示すように、データ転送先決定プログラム２８を格納する記憶領域を有してもよい。そして、各ノードＮＤのプロセッサがデータ転送先決定プログラム２８を実行することで、受信時段数表２４と転送先ノード表２６とを作成するデータ転送先決定方法が実現される。なお、算出部１０の機能は、ＦＰＧＡ（Field  Programmable  Gate  Array）等のハードウェアにより実現されてもよい。
【００２５】
この実施形態では、各ノードＮＤに設けられる算出部１０は、同報通信でのデータの転送先ノードＮＤを決め、決めた転送先ノードＮＤを示す情報を、自ノードＮＤの受信時段数表２４および転送先ノード表２６に格納する。これにより、決めた転送先ノードＮＤを他のノードＮＤ等に通知しなくてよいため、ネットワークＮＷの通信負荷の増加を抑止することができる。これに対して、例えば、管理ノード５０が、同報通信でのデータの転送先ノードＮＤを決める場合、決めた転送先ノードＮＤを各ノードＮＤに転送するため、ネットワークＮＷの通信負荷が増加する。
【００２６】
通信部３０は、同報通信において、他のノードＮＤからデータを受信した場合、記憶部２０が保持する受信時段数表２４および転送先ノード表２６に基づいて、データを転送する転送先ノードＮＤを決定し、決定した転送先ノードＮＤに受信したデータを転送する。なお、通信部３０は、同報通信以外の通信において、受信したデータの宛先が自ノードＮＤである場合、受信したデータを記憶部２０等に格納する機能を有する。また、通信部３０は、受信したデータの宛先が他のノードＮＤである場合、宛先のノードＮＤに向けてデータを転送する中継機能を有する。
【００２７】
管理ノード５０は、ノードＮＤの管理に使用する管理ネットワークＭＮＷを介して各ノードＮＤと個別に接続され、各ノードＮＤを管理する。なお、図１では、管理ノード５０は、管理ネットワークＭＮＷを介して一部のノードＮＤのみに接続されているが、実際には、ネットワークＮＷに含まれる全てのノードＮＤに接続される。
【００２８】
例えば、管理ノード５０は、各ノードＮＤのプロセス起動を管理するジョブスケジューラノードでもよい。ジョブスケジューラノードは、並列処理装置１００に投入されたジョブを、計算ノードであるノードＮＤに割り当て、割り当てたノードＮＤに、ジョブに記載されたプログラムの起動を依頼する。各ノードＮＤには、同じジョブに参加する全てのノードＮＤのネットワーク座標等の情報（例えば、ネットワーク座標表２２）が、ジョブスケジューラノードから渡される。
【００２９】
図２は、図１のネットワークＮＷにおいて、ジョブの実行対象のノードＮＤを含むサブネットワークＳＮＷの一例を示す。図２では、サブネットワークＳＮＷは、サブメッシュネットワークであるが、サブネットワークＳＮＷのトポロジーは、メッシュネットワークに限定されない。例えば、サブネットワークＳＮＷは、ジョブに記載されたプログラムの起動に基づいてデータ処理等を実行するノードＮＤの全てを含む。サブネットワークＳＮＷに含まれるノードＮＤおよびノードＮＤのネットワーク座標を示す情報は、管理ノード５０から各ノードＮＤに転送されるネットワーク座標表２２に含まれる。
【００３０】
図２に示す例では、サブネットワークＳＮＷは、Ｘ軸方向に並ぶ１２個のノードＮＤと、Ｙ軸方向に並ぶ５個のノードＮＤとによる６０個のノードＮＤを含む。サブネットワークＳＮＷ内の各ノードＮＤの左上に付した（０、０）等は、ネットワーク座標を示す。なお、サブネットワークＳＮＷにおいても、ネットワークＮＷと同様に、メッシュネットワークまたはトーラスネットワークになるように、ジョブへのノードＮＤの割り当てを制御することが好ましい。これにより、異なるジョブの各々のプロセス間通信で使用するリンクを重ならないようにすることができる。
【００３１】
ネットワークＮＷにおいて、ネットワーク座標表２２により定義される同報通信の対象のノードＮＤが含まれる各次元の座標軸の領域（大きさ）は、形状パラメータと称される。すなわち、サブネットワークＳＮＷは、形状パラメータにより表される。例えば、サブネットワークＳＮＷは、デカルト座標で与えられ、各座標軸Ｘ、Ｙの座標の範囲が予め決められている。なお、ネットワークＮＷが、サブネットワークＳＮＷとして使用されてもよい。
【００３２】
図３は、図２のサブネットワークＳＮＷのネットワーク座標表２２の一例を示す。ネットワーク座標表２２は、サブネットワークＳＮＷ内の各ノードＮＤに割り当てられたランク番号ＲＡＮＫとネットワーク座標（Ｘ，Ｙ）とが格納される複数のエントリを有する。以下では、ネットワーク座標は、単に座標とも称される。
【００３３】
ランク番号ＲＡＮＫは、サブネットワークＳＮＷ内の各ノードＮＤに割り当てられる通し番号である。図３に示す例では、ランク番号ＲＡＮＫは、座標（０，０）、（０，１）、（０，２）、（０，３）、（０，４）、（０，５）、（１，０）、（１，１）、．．．、（１１，３）、（１１，４）のが割り当てられたノードＮＤのそれぞれに順次割り当てられる。なお、ランク番号ＲＡＮＫの割り当ては、図３に示す例に限定されない。各ノードＮＤは、自ノードＮＤの記憶部２０に格納されたネットワーク座標表２２を参照することで、サブネットワークＳＮＷ内のノードＮＤのネットワーク座標（Ｘ，Ｙ）を識別可能である。
【００３４】
各ノードＮＤに１つのプロセスが割り当てられる場合、ランク番号ＲＡＮＫはノードＮＤ毎に割り当てられる。各ノードＮＤに複数のプロセスが割り当てられる場合、ランク番号ＲＡＮＫは、各ノードＮＤのプロセス毎に割り当てられる。但し、各ノードＮＤに複数のランク番号ＲＡＮＫが割り当てられる場合、代表のランク番号ＲＡＮＫをネットワーク座標表２２に登録することで、図３に示すネットワーク座標表２２をそのまま使用することができる。
【００３５】
なお、ネットワーク座標表２２は、図１に示すネットワークＮＷに含まれる全てのノードＮＤのネットワーク座標が格納されてもよい。この場合、サブネットワークＳＮＷが生成される毎にネットワーク座標表２２を更新しなくてよいため、管理ノード５０と各ノードＮＤ間での通信量を削減することができる。
【００３６】
図４は、図１の受信時段数表２４の一例を示す。受信時段数表２４は、同報通信の対象のノードＮＤの座標（Ｘ，Ｙ）と、ノードＮＤを識別するランク番号ＲＡＮＫと、同報通信においてデータを受信する中継段数とが格納される複数のエントリを有する。中継段数＝”０”のノードＮＤは、同報通信を開始する起点ノードＮＤを示し、図４では、座標（０，０）が割り当てられたノードＮＤが起点ノードＮＤである。以下の説明では、同報通信の起点ノードＮＤは、”Ｒｏｏｔ”とも称される。
【００３７】
例えば、座標（０，４）、（１１，４）が割り当てられたノードＮＤは、中継段数＝”１”でデータを受信することを示す。座標（０，１）、（０，３）、（４，２）、（７，２）、（１１，０）、（１１，２）が割り当てられたノードＮＤは、中継段数＝”２”でデータを受信することを示す。同報通信では、同じデータが全てのノードＮＤに転送されるため、各ノードＮＤはデータを１回受信すればよい。このため、各エントリの中継段数の欄は１つの中継段数のみが格納される。各ノードＮＤは、データの受信に基づいて受信時段数表２４の自ノードＮＤのエントリを参照することで、データを受信した中継段数を検出することができる。これにより、後述するように、検出した中継段数に基づいて転送先ノード表２６を参照することで、データを転送する転送先ノードＮＤを検出することができる。
【００３８】
図５は、図１の転送先ノード表２６の一例を示す。転送先ノード表２６は、データを転送するノードＮＤを識別するランク番号ＲＡＮＫと、同報通信においてデータを転送する中継段数と、データの転送先のノードＮＤの座標（Ｘ，Ｙ）とが格納される複数のエントリを有する。なお、この実施形態では、所定のノードＮＤは、複数の中継段数でデータを転送する。このため、１つのノードＮＤ（例えば、ランク番号ＲＡＮＫ＝”０”のノードＮＤ）に対応する複数のエントリが、転送先ノード表２６に割り当てられる。また、この実施形態では、各ノードＮＤは、同報通信の転送を実行する各中継段数において、２つのノードＮＤにデータを転送する。このため、各ノードＮＤは、転送先ノードＮＤの欄には、２つの座標が格納される。
【００３９】
図６は、図１の並列処理装置１００が同報通信を実行する場合の第１フェーズでの各ノードＮＤの動作の一例を示すフローチャートである。図６に示す動作は、例えば、管理ノード５０からの同報通信の開始指示に基づいて、ノードＮＤ毎に開始される。図６のフローの開始時の中継段数は”０”であり、図６のフローには示していないが、”Ｒｏｏｔ”のノードＮＤは、同報通信するデータを、管理ノード５０から受信する。なお、”Ｒｏｏｔ”のノードＮＤは、図６のフローが開始される前に、同報通信するデータを保持していてもよい。
【００４０】
第１フェーズは、同報通信の早い段階で実行される動作であり、できるだけ遠くのノードＮＤにデータを転送するための動作である。できるだけ遠くのノードＮＤにデータを転送することで、データを受信するノードＮＤをサブネットワークＳＮＷ内で分散させることができる。また、データを受信するノードＮＤをサブネットワークＳＮＷ内で分散させることで、より多くのノードＮＤで、リンクを共有することなく、より多くの中継段数を使って、データを他のノードＮＤに転送することができる。
【００４１】
例えば、第１フェーズでは、各ノードＮＤが各中継段数においてｋ個のノードＮＤにデータを転送し、転送後にデータを保持しているノードＮＤの数がｋ＋１倍になる状態が続く期間である。データを受信したノードＮＤが増加し、データの転送先が重複する状況になった場合、転送後にデータを保持しているノードＮＤの数は、ｋ＋１倍以下になる。この実施形態では、ノードＮＤの数がｋ＋１倍以下になってからの転送は、第１フェーズではなく、第２フェーズに移行して実行される。
【００４２】
まず、ステップＳ１０において、ノードＮＤは、自ノードＮＤが”Ｒｏｏｔ”である場合、処理をステップＳ１４に移行し、自ノードＮＤが”Ｒｏｏｔ”でない場合、処理をステップＳ１２に移行する。ステップＳ１２において、”Ｒｏｏｔ”以外のノードＮＤは、データを受信するまで待ち、データを受信した場合、処理をステップＳ１４に移行する。
【００４３】
ステップＳ１４において、ノードＮＤは、受信時段数表２４を検索し、自ノードＮＤに割り当てられたランク番号ＲＡＮＫまたは自ノードＮＤの座標（Ｘ，Ｙ）を含むエントリから中継段数を取得する。例えば、ノードＮＤが同報通信の起点ノードＮＤである”Ｒｏｏｔ”の場合、図６のフローの開始時の中継段数は”０”であり、ステップＳ１４の実行時の中継段数は”０”である。
【００４４】
ノードＮＤが”Ｒｏｏｔ”以外の場合、ステップＳ１４の実行時の中継段数は、ステップＳ１２においてデータを受信した中継段数である。すなわち、受信時段数表２４から取得する中継段数は、現在の中継段数である。ノードＮＤは、取得した中継段数に”１”を加えた値をカウンタ値ｉとして保持する。
【００４５】
次に、ステップＳ１６において、ノードＮＤは、転送先ノード表２６を検索し、自ノードＮＤに割り当てられたランク番号ＲＡＮＫとカウンタ値ｉが示す中継段数とを含むエントリから転送先ノードＮＤの座標（Ｘ，Ｙ）を取得する。受信時段数表２４と送信先ノード表２６とは、中継段数を介して相互に対応付けすることができる。このため、ノードＮＤは、受信時段数表２４と送信先ノード表２６とを検索して転送先ノードＮＤを取得する場合にも、中継段数を介して１つの表として検索することができる。
【００４６】
次に、ステップＳ１８において、ノードＮＤは、ステップＳ１６で取得した転送先ノードＮＤにデータを転送する。次に、ステップＳ２０において、ノードＮＤは、カウンタ値ｉに”１”を加える。
【００４７】
次に、ステップＳ２２において、ノードＮＤは、自ノードＮＤに割り当てられたランク番号ＲＡＮＫと、ステップＳ２０で更新されたカウンタ値ｉが示す中継段数とを含むエントリが、転送先ノード表２６に存在するか否かを判定する。条件に合致するエントリが存在する場合、データを転送する転送先ノードＮＤがあるため、処理はステップＳ１６に移行され、同報通信におけるデータの転送動作が継続して実行される。条件に合致するエントリが存在しない場合、第１フェーズでデータを転送するノードＮＤがなくなったため、第１フェーズの動作が終了する。
【００４８】
各ノードＮＤは、第１フェーズを他のノードＮＤに対して独立に実行するが、全てのノードＮＤに共通の受信時段数表２４および転送先ノード表２６に基づいて転送動作を実行する。このため、複数のノードＮＤから転送されるデータが１つのノードＮＤに重複して転送されることを抑止することができる。
【００４９】
なお、各ノードＮＤは、図６の動作を開始する前に、受信時段数表２４および転送先ノード表２６から自ノードＮＤに対応する情報を取得してもよい。これにより、例えば、ステップＳ１６において、転送先ノード表２６から転送先ノードＮＤを毎回取得する処理を省略することができる。
【００５０】
図７は、図１の並列処理装置１００における同報通信の一例を示す。図７に示す同報通信は、各ノードＮＤが、図４に示す受信時段数表２４および図５に示す転送先ノード表２６を参照し、図６に示すフローを実行する場合の例である。図７において、黒丸で示すノードＮＤは、同報通信されるデータを受信したことを示し、白丸で示すノードＮＤは、同報通信されるデータを受信していないことを示す。
【００５１】
まず、中継段数＝”０”では、”Ｒｏｏｔ”である座標（０，０）のノードＮＤのみが同報通信のデータを受信済みである。中継段数＝”０”での転送済みノード数は”１”である。
【００５２】
次に、中継段数＝”１”では、”Ｒｏｏｔ”のノードＮＤは、転送先ノード表２６を参照し、座標（０，４）、（１１，４）のノードＮＤにデータを転送する。データを受信した座標（０，４）、（１１，４）のノードＮＤは、受信時段数表２４を参照し、現在の中継段数が”１”であることを検出する。中継段数＝”１”での転送済みノード数は”３”である。
【００５３】
中継段数＝”２”では、”Ｒｏｏｔ”のノードＮＤは、転送先ノード表２６を参照し、中継段数＝”２”に対応して転送先ノードＮＤ（座標（０，１）、（１１，０））が存在することを検出する。このため、”Ｒｏｏｔ”のノードＮＤは、座標（０，１）、（１１，０）にデータを転送する。
【００５４】
座標（０，４）のノードＮＤ（ＲＡＮＫ＝４）は、転送先ノード表２６を参照し、中継段数＝”２”に対応して転送先ノードＮＤ（座標（０，３）、（４，２））が存在することを検出する。このため、ノードＮＤ（ＲＡＮＫ＝４）は、座標（０，３）、（４，２）にデータを転送する。
【００５５】
座標（１１，４）のノードＮＤ（ＲＡＮＫ＝５９）は、転送先ノード表２６を参照し、中継段数＝”２”に対応して転送先ノードＮＤ（座標（７，２）、（１１，２））が存在することを検出する。このため、ノードＮＤ（ＲＡＮＫ＝４）は、座標（７，２）、（１１，２）にデータを転送する。中継段数＝”２”での転送済みノード数は”９”である。
【００５６】
図７に示すように、各ノードＮＤは、転送先ノード表２６に基づいて、中継段数が小さい場合に転送距離が相対的に大きいノードＮＤにデータを転送し、中継段数が増えるにしたがい、転送距離が相対的に小さいノードＮＤにデータを転送する。これにより、データを受信するノードＮＤをサブネットワークＳＮＷ内に分散させることができ、データを受信したノードＮＤが以後の同報通信の転送に参加し続ける中継段数を増やすことができる。また、データを受信するノードＮＤを分散させることで、データを送受信する複数のノードＮＤ対の通信でリンクの共有が発生する可能性を下げることができる。
【００５７】
第１フェーズでは、例えば、同報通信の各中継段数において、各ノードＮＤが２つのノードＮＤにデータを転送する場合、ｍ段目では、”３”のｍ乗個のノードＮＤにデータを保持させることができる。同報通信の各中継段数において、各ノードＮＤがデータを転送できるノードＮＤの数を”ｋ”とする場合、ｍ段においてデータを受信済みのノードＮＤの数は、”（ｋ＋１）ｍ”で示される。
【００５８】
図８は、図１の並列処理装置１００が同報通信を実行する場合の第２フェーズでの各ノードＮＤの動作の一例を示すフローチャートである。第２フェーズは、図６のステップＳ２２でデータを転送するノードＮＤがなくなり、第１フェーズを終了したノードＮＤが開始する。すなわち、図８は、ノードＮＤ毎に実行される。
【００５９】
まず、ステップＳ３０において、ノードＮＤは、自ノードＮＤの転送先ノード表２６の全エントリに格納された転送先ノードＮＤを検索し、自ノードＮＤに隣接するノードＮＤのうち、転送先ノードＮＤに該当しない隣接ノードＮＤを検出する。隣接ノードＮＤか否かは、ネットワーク座標表２２に基づいて判定可能である。例えば、自ノードＮＤの座標（Ｘ，Ｙ）に対して、Ｘ軸またはＹ軸が”１”だけずれたノードＮＤが隣接ノードＮＤである。転送先ノードＮＤに含まれない隣接ノードＮＤは、第１フェーズではデータが転送されていないノードＮＤであり、第２フェーズでデータを転送する必要がある。
【００６０】
次に、ステップＳ３２において、ノードＮＤは、データを転送していない隣接ノードＮＤを検出した場合、処理をステップＳ３４に移行する。一方、ノードＮＤは、データを転送していない隣接ノードＮＤを検出しない場合、全ての隣接ノードＮＤにデータが転送されているため、処理を終了する。
【００６１】
ステップＳ３４において、ノードＮＤは、データが転送されていない隣接ノードＮＤのうちｋ個を上限としてデータを転送する隣接ノードＮＤを決定する。ｋ個は、同報通信の各中継段数において、各ノードＮＤがデータを転送できるノードＮＤの数であり、例えば、２個である。換言すれば、ｋ個は、あるノードＮＤからのデータ転送バンド幅の合計が最大になる同時転送動作の数である。ｋ個は、メッセージ長、各ノードＮＤに接続される通信リンクの数、ネットワーク装置のＤＭＡ（Direct  Memory  Access）転送エンジンの数、ネットワーク装置が接続されているシステムバスのバンド幅、ネットワーク装置のコマンドキューの動作並列度等に基づいて決められる。ネットワーク装置は、各ノードＮＤに含まれ、ノードＮＤ間での通信を制御する機能を有する。
【００６２】
次に、ステップＳ３６において、ノードＮＤは、ステップＳ３４で決定した隣接ノードＮＤにデータを転送する。次に、ステップＳ３８において、ノードＮＤは、データの転送を決定した隣接ノードＮＤのうち、データを転送していない隣接ノードＮＤがある場合、処理をステップＳ３４に戻し、データの転送処理を実行する。一方、ノードＮＤは、全ての隣接ノードＮＤにデータを転送済みの場合、処理を終了する。以上の動作を各ノードＮＤで実行することで、全てのノードＮＤにデータが転送され、同報通信が終了する。
【００６３】
なお、任意のノードＮＤに隣接する４つのノードＮＤは、任意のノードＮＤを隣接ノードＮＤと判断する。このため、隣接ノードＮＤは、第２フェーズのある中継段数において、周囲の複数のノードＮＤからデータを受信する可能性がある。この場合、隣接ノードＮＤは、先に受信したデータを有効とし、後で受信したデータを破棄してもよい。
【００６４】
図９は、図１の各ノードＮＤが実行するデータの転送先を決定する処理の一例を示す。換言すれば、図９は、上述した第１フェーズで使用する受信時段数表２４および転送先ノード表２６を作成する処理を示す。図９に示す処理は、図１に示す算出部１０により実行される。なお、図９に示す処理は、各ノードＮＤに含まれるＣＰＵ等のプロセッサが実行するデータ転送先決定プログラムにより実現される算出部１０により実行されてもよい。すなわち、図９は、データ転送先決定方法の一例およびデータ転送先決定プログラムの一例を示す。
【００６５】
まず、ステップＳ４０において、算出部１０は、中継段数ｍを”１”に設定する。次に、ステップＳ４２において、算出部１０は、転送数ｋと中継段数ｍとを用いて、第ｍ段でのデータの転送先のノードＮＤの総数を求める。転送数ｋは、各中継段数ｍにおいて各ノードＮＤからデータが転送されるノードＮＤの数である。例えば、転送数ｋが”２”の場合、第２段目では６個のノードＮＤにデータが転送され、第３段目では１８個のノードＮＤにデータが転送される。
【００６６】
次に、ステップＳ４４において、算出部１０は、データの転送先のノードＮＤがサブネットワークＳＮＷ内で分散するように、データの転送元のノードＮＤ毎に、データを受信していないノードＮＤの中からデータの転送先である転送先ノードＮＤを決定する。例えば、データを受信済みのノードＮＤのネットワーク座標の分散の最大化を目的関数とする最適化問題を解くことで、データの転送先のノードＮＤを算出することができる。算出部１０は、データを受信していないノードＮＤを、例えば、後述するステップＳ５０で更新される転送先ノード表２６を参照することで判断する。
【００６７】
次に、ステップＳ４６において、算出部１０は、ステップＳ４４で決定したデータの転送先ノードＮＤが重複するか否かを判定する。転送先ノードＮＤが重複する場合、転送先ノードＮＤをこれ以上分散させることが困難であると判断され、処理は終了する。なお、処理を終了する場合、直前のステップＳ４４で決定した転送先ノードＮＤを示す情報は破棄される。
【００６８】
転送先ノードＮＤとして割り当られていないノードＮＤは、図８に示す第２フェーズの動作により、隣接ノードＮＤとしてデータが転送される。転送先ノードＮＤが重複する場合、第２フェーズにおいて、隣接ノードＮＤを転送先ノードＮＤとして割り当てることで、１つの転送先ノードＮＤにデータが重複して転送される可能性を低くすることができる。この結果、同報通信におけるデータの転送効率が低下することを抑止することができる。
【００６９】
一方、転送先ノードＮＤが重複しない場合、転送先ノードＮＤにデータを転送するノードＮＤを決めるため、処理はステップＳ４８に移行される。ステップＳ４８において、算出部１０は、データを受信済みのノードＮＤを転送元ノードＮＤとして、ステップＳ４４で決定した転送先ノードＮＤのうち、どの転送先ノードＮＤに各転送元ノードＮＤからデータを転送するかを決める。すなわち、算出部１０は、データの転送元ノードＮＤとデータの転送先ノードＮＤとの組合せを決定する。なお、データを受信済みのノードＮＤは、データ転送先決定プログラム上で決められる仮想的なノードＮＤである。
【００７０】
各ノードＮＤが各中継段数においてｋ個のノードＮＤにデータを転送する場合（転送数＝ｋ）、算出部１０は、１つの転送元ノードＮＤとｋ個の転送先ノードＮＤとの組合せ（割り当て）を決定する。ここで、算出部１０は、データの転送経路が交差しないように組合せを決定する。これにより、複数の転送先ノードＮＤへのデータの転送に、共通のリンクが使用される可能性を低くすることができる。
【００７１】
なお、決定した組合せでのデータの転送において、共通のリンクが使用される場合（使用するリンクが重複する場合）、算出部１０は、転送元ノードＮＤと転送先ノードＮＤとの割り当てを変更することで、共通のリンクを使用しない転送経路の設定を試みる。これにより、共通のリンクを使用する可能性を下げることができる。共通のリンクを使用する転送経路を完全になくすことができない場合、算出部１０は、共通のリンクを使用する転送経路の比率が最も低くなるように、転送先のノードＮＤの割り当てを変更してもよい。
【００７２】
次に、ステップＳ５０において、算出部１０は、ステップＳ４４で決定した各転送先ノードＮＤの座標（Ｘ，Ｙ）、ランク番号ＲＡＮＫおよび中継段数ｍを受信時段数表２４に格納することで、受信時段数表２４を更新する。次に、ステップＳ５２において、算出部１０は、ステップＳ４４で決定した各転送先ノードＮＤの座標（Ｘ，Ｙ）を、データの転送元のノードＮＤを示すランク番号ＲＡＮＫと中継段数ｍとに対応付けて転送先ノード表２６に格納する。これにより、転送先ノード表２６が更新される。
【００７３】
次に、ステップＳ５４において、算出部１０は、中継段数ｍを”１”増加し、処理をステップＳ４２に戻し、次の中継段数ｍでのデータの転送先のノードＮＤを決定する処理を実行する。データの転送先のノードＮＤを決定する処理は、上述したように、転送先ノードＮＤが重複するまで繰り返し実行される。なお、ステップＳ５０、Ｓ５２、Ｓ５４の順序は、入れ替えられてもよい。
【００７４】
図１０は、他の並列処理装置における同報通信の一例（比較例）を示す。図１０に示す同報通信では、”Ｒｏｏｔ”である座標（０，０）が割り当てられたノードＮＤが、中継段数＝”１”において、自ノードＮＤに隣接する隣接ノードＮＤにデータを転送する。データを受信したノードＮＤは、中継段数＝”２”において、自ノードＮＤに隣接する隣接ノードＮＤにデータを転送する。この後も、各中継段数において、データを受信したノードＮＤは、自ノードＮＤに隣接する隣接ノードＮＤにデータを転送する。
【００７５】
隣接するノードＮＤにデータを順次転送する同報通信では、データの転送方向は、”Ｒｏｏｔ”から離れる方向に限られる。図１０に示す例では、”Ｒｏｏｔ”から離れる方向は、Ｘ座標が増加する方向またはＹ座標が増加する方向である。このため、ある中継段数でデータを転送したノードＮＤは、その後の中継段数でデータを転送できない場合がある。例えば、”Ｒｏｏｔ”のノードＮＤは、中継段数＝”２”では同報通信に参加できない。厳密には、Ｒｏｏｔ”のノードＮＤは、他のノードＮＤとリンクを共有することで、同報通信に参加することができるが、この場合、データ転送の帯域が小さくなってしまう。
【００７６】
したがって、図１０に示す同報通信では、図７に示す同報通信に比べて、データの転送効率が低下する。換言すれば、図７に示す同報通信では、受信したデータを他のノードＮＤに転送したノードＮＤは、それ以降の中継段数においてもデータを他のノードＮＤに転送することができる。この結果、図７に示す同報通信では、図１０に示す同報通信に比べて、同報通信に掛かる時間（中継段数）を削減することができ、同報通信の効率を向上することができる。
【００７７】
ところで、データサイズ（メッセージサイズ）が大きく、１回でデータを転送できない場合、データを分割してパイプライン転送を行うことで、データの転送効率は向上する。一方、データ量が小さく、１回でデータ転送可能な場合、同報通信の完了までに必要な時間は転送の中継段数に比例する。この場合、”ｋ”を２以上の整数として、ｋ分木による同報通信アルゴリズムにおいて、中継段数がｍ段（ｍは正の整数）の転送までにデータを受信済になるノード数は、式（１）に示される。
【００７８】
なお、”木”は、グラフ理論における”閉路を持たないグラフないし部分グラフ”という意味の用語であり、対応する計算機ネットワークの全体ないし一部の接続関係を表現するために使用可能である。
【００７９】
【数１】
2020126487.tif 000003
【００８０】
ノード数が”Ｎ”のサブネットワークＳＮＷにおいて、同報通信により全ノードＮＤにデータを転送する場合に必要な中継段数は、式（２）に示される。
【００８１】
【数２】
2020126487.tif 000004
【００８２】
例えば、図２に示すサブネットワークＳＮＷの同報通信において、サブネットワークＳＮＷに含まれるＮ個の全てのノードＮＤにｋ分木でデータを転送する場合、転送回数（すなわち、中継段数）は”ｌｏｇｋ＋１Ｎ”程度になる。転送データ量をＤ、中継一回あたりのバンド幅をＢ、転送一回当たりのオーバヘッド＋通信遅延時間をＬとすると、同報通信全体での通信時間の概算は、式（３）で示され、通信遅延時間の概算は、式（４）で示される。
【００８３】
【数３】
2020126487.tif 000005
【００８４】
【数４】
2020126487.tif 000006
【００８５】
一方、データサイズが大きく、データＤを３つに分割して２分木でパイプライン転送を行う他の並列処理装置における同報通信全体での通信時間の概算は、式（５）に示される。
【００８６】
【数５】
2020126487.tif 000007
【００８７】
式（５）において、転送データ量をＤ／３、中継一回あたりのバンド幅をＢ、転送一回当たりの転送オーバヘッドと通信遅延時間の和をＬとする。
【００８８】
例えば、Ｎ＝２０００、ｋ＝３、Ｂ＝１２．５ＧｉＢ／ｓｅｃ、Ｄ＝１．２５ＭｉＢ、Ｌ＝１μｓｅｃ（１０−６ｓｅｃ）とすると、並列処理装置１００での通信時間の概算は、式（３）のＬが無視できるとした場合の式（６）より１７９μｓｅｃ程度になる。一方、通信時間の概算が式（５）で示される他の並列処理装置での通信時間の概算は、式（５）のＬが無視できるとした場合の式（７）より３３３μｓｅｃ程度になる。式（６）および式（７）中の符号＊は、乗算を示す。式（６）で示される通信時間は、式（７）で示される通信時間の４０％程度である。
【００８９】
【数６】
2020126487.tif 000008
【００９０】
【数７】
2020126487.tif 000009
【００９１】
式（６）は、図７に示すように、同報通信においてデータの転送先ノードＮＤを分散させる場合の通信時間を示している。式（７）は、同報通信においてデータを隣接ノードＮＤに転送する場合の通信時間を示している。このため、図７に示した同報通信に掛かる通信時間を、図１０に示す同報通信に掛かる通信時間に比べて短縮することができる。
【００９２】
一方、Ｌが通信時間の主要因子となる場合、３分木を使用すると、並列処理装置１００での通信時間の概算は、式（４）に基づき５．５μｓｅｃ程度となり、他の並列処理装置での通信時間の概算は、式（２）にＬを乗じて６．５μｓｅｃ程度となる。Ｌが通信時間の主要因子となる場合の通信時間についても、並列処理装置１００が有利である。
【００９３】
以下では、受信時段数表２４と転送先ノード表２６を作成する実施例が示される。すなわち、以下では、同報通信を実行するサブネットワークＳＮＷにおいて、上述した第１フェーズでのデータの転送順の算出方法が説明される。
【００９４】
各ノードＮＤが各中継段数においてｋ個のノードＮＤにデータを転送し、転送後にデータを保持しているノードＮＤの数がｋ＋１倍になる状態が続く期間である第１フェーズは、中継段数が上限ｎに達するまで実行される。上限ｎは、”（ｋ＋１）ｎ≦Ｎ”が成立する最大の整数である。例えば、実数ｘに対し”ｘを越えない最大の整数”をガウスの記号により［ｘ］と表記すると、上限ｎは、式（８）により示される。
ｎ＝［ｌｏｇｋ＋１Ｎ］  ‥（８）
以下、二次計画法を用いて各中継段数でのデータの転送先のノードＮＤを決める方法を説明する。説明を簡明にするため、ネットワークトポロジーはメッシュネットワークとする。”同報通信の早い段階では、できるだけ遠くのノードＮＤにメッセージ（データ）を転送する”という条件を実現するため、”メッシュネットワークの各次元のネットワーク座標の分散”を最大化する目的関数とする。
＜実施例１＞
以下の手順を実行するデータ転送先決定プログラムにより求めた結果を、受信時段数表２４および転送先ノード表２６に登録する。なお、実施例１で実行されるデータ転送先決定プログラムは、下記のステップＡおよびステップＢを含み、図９に示すデータ転送先決定プログラムの処理とは異なる。以下、実施例１で実行されるデータ転送先決定プログラムは、単にプログラムと称される。
【００９５】
ステップＡでは、プログラムは、各中継段数においてデータの転送先ノードＮＤ（すなわち、データを受信するノードＮＤ）の座標を決定する。ステップＡは、以下のサブステップＡ１、Ａ２、Ａ３を含み、例えば、中継段数毎に実行される。なお、ステップＡで用いる「整数変数の二次計画法サブルーチン」の出力は厳密解でなくてもよく、例えば「整数である」という制約を外した「緩和問題」の解の整数部分をとった近似解でよい。
【００９６】
サブステップＡ１では、プログラムは、各中継段数でデータを受信するノードＮＤおよびその座標を格納する配列を割り当てる。
【００９７】
次に、サブステップＡ２では、プログラムは、ｍ−１段でデータを受信済みの（ｋ＋１）ｍ−１個のノードＮＤの座標を入力として、「ｍ段までにデータを受信するノードＮＤの座標の分散」を最大化する目的関数を受け付ける。
【００９８】
次に、サブステップＡ３では、プログラムは、サブステップＡ２の目的関数を与えて、整数変数の二次計画法サブルーチンを呼び出し、サブルーチンが出力する受信ノードＮＤの座標を配列に格納する。サブステップＡ３では、プログラムは、中継段数毎に、ｋ×（ｋ＋１）ｍ−１個のネットワーク座標（すなわち、データを受信するノードＮＤ）を導き出す。ｋは、各ノードＮＤがデータを転送できるノードＮＤの数である。
【００９９】
ステップＡの完了後、ステップＢでは、プログラムは、第ｍ−１段までにデータを受信したノードＮＤと第ｍ段でデータを受信するノードＮＤとの対応付け行う。ステップＢは、以下のサブステップＢ１、Ｂ２、Ｂ３を含み、例えば、中継段数毎に実行される。
【０１００】
サブステップＢ１では、プログラムは、第ｍ−１段までにデータを受信した（ｋ＋１）ｍ−１個のノードＮＤ毎に、第ｍ段でデータを受信するべきｋ×（ｋ＋１）ｍ−１個のノードＮＤの中からｋ個を割り当てる。すなわち、プログラムは、第ｍ段において、データを転送するノードＮＤとデータを受信するノードＮＤとの対応関係を決める。
【０１０１】
次に、サブステップＢ２では、プログラムは、第ｍ段でデータを受信するｋ（ｋ＋１）ｍ−１個のノードＮＤの各々に対応するエントリを、受信時段数表２４に追加する。
【０１０２】
サブステップＢ３では、プログラムは、第ｍ−１段までにデータを受信したノードＮＤの各々に対し、割り当てたｋ個のノードＮＤを転送先ノードＮＤとするエントリを、転送先ノード表２６に追加する。なお、サブステップＢ２、Ｂ３は逆順に実行されてもよい。
【０１０３】
ステップＡ、Ｂの実行により、それぞれのノードＮＤが各中継段数でどのノードＮＤにデータを転送するのかが決定される。二次計画法を解くことにより”同報通信の早い段階では、できるだけ遠くのノードＮＤにメッセージ（データ）を転送する”という条件が達成される。このため、パケット（データ）の衝突が起こりにくく、上述した第１フェーズの後半においても転送能力が損なわれにくい通信手順が可能となる。
＜実施例２＞
実施例１では、共通のリンクの使用を考慮せずに、転送先ノードＮＤが決定される。このため、共通のリンクを使用してデータが転送された場合、転送効率が低下する。実施例２では、共通のリンクを使用する可能性が低くなるように、転送先ノードＮＤが決定される。
【０１０４】
実施例２は、サブステップＢ１が実施例１と異なることを除き、実施例１と同様の処理を実行する。実施例２のサブステップＢ１では、プログラムは、転送元のノードＮＤ毎にｋ個の転送先ノードＮＤを割り当てた後、例えば、次元順ルーティングによるデータの転送経路中に共通のリンクを使用する経路があるかを判定する。プログラムは、共通のリンクを使用する経路がある場合、共通のリンクを使用する経路がなくなるように、転送先のノードＮＤの割り当てを変更する。
【０１０５】
プログラムは、共通のリンクを使用する経路を完全になくすことができない場合、各中継段数において共通のリンクを使用する経路の比率が最も低くなるように、転送先のノードＮＤの割り当てを変更してもよい。さらに、プログラムは、複数の中継段数において共通のリンクを使用する経路の比率が最も低くなるように、転送先のノードＮＤの割り当てを変更してもよい。
【０１０６】
実施例２では、データの転送時に共通のリンクを使用する確率を下げることができ、データの転送効率の向上により、同報通信時間を短縮することができる。
【０１０７】
以上、本実施形態では、データを受信したノードＮＤが同報通信のデータ転送に参加し続けることができ、かつ、隣接ノードＮＤにデータを転送する場合に比べて、各ノードＮＤがデータ転送に参加できる中継段数を多くすることができる。この結果、各中継段数において、データ転送ノードＮＤを増加させることができ、同報通信が完了するまでに掛かる時間を削減することができる。
【０１０８】
また、できるだけ遠くのノードＮＤにデータを転送することで、データを受信するノードＮＤをサブネットワークＳＮＷ内で分散させることができる。データを受信するノードＮＤをサブネットワークＳＮＷ内で分散させることで、より多くのノードＮＤで、リンクを共有することなく、より多くの中継段数を使って、データを他のノードＮＤに転送することができる。
【０１０９】
各ノードＮＤの算出部１０が、共通のデータ転送先決定プログラムを実行するため、ノードＮＤで同一の受信時段数表２４および転送先ノード表２６を作成することができる。このため、各ノードＮＤは、算出により決定した転送先ノードＮＤを他のノードＮＤに通知しなくてよいため、ネットワークＮＷの通信負荷の増加を抑止することができる。
【０１１０】
受信時段数表２４および転送先ノード表２６は、同報通信の対象の全てのノードＮＤの受信情報および転送情報を含む。このため、各ノードＮＤは、共通のデータ転送先決定プログラムを実行することで、受信時段数表２４および転送先ノード表２６を生成することができる。これにより、管理ノード５０は、１つのデータ転送先決定プログラムを各ノードＮＤに配布して実行させればよく、管理ノード５０によるノードＮＤの管理を簡易にすることができる。
【０１１１】
第１フェーズでの転送先ノードＮＤを決める際に、転送先ノードＮＤが重複する場合、第２フェーズにおいて、隣接ノードＮＤを転送先ノードＮＤとして割り当てることで、１つの転送先ノードＮＤにデータが重複して転送される可能性を低くすることができる。この結果、同報通信におけるデータの転送効率が低下することを抑止することができる。
【０１１２】
共通のリンクを同時に使用する可能性を低くしてパケットの転送を実行することができ、共通のリンクを同時に使用してパケットを転送する場合に比べて、パケットの転送効率を向上することができる。
【０１１３】
サブネットワークＳＮＷに含まれるノードＮＤのグループ毎に、共通のデータ転送先決定プログラムが実行され、各ノードＮＤは、共通の受信時段数表２４および転送先ノード表２６を作成する。すなわち、受信時段数表２４および転送先ノード表２６は、サブネットワークＳＮＷの形状パラメータおよびサブネットワークＳＮＷに含まれるノードＮＤの数に応じて生成される。このため、サブネットワークＳＮＷのサイズに合わせて、同報通信によるデータの転送効率を最適に設定することができる。
【０１１４】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１１５】
１０      算出部
２０      記憶部
２２      ネットワーク座標表
２４      受信時段数表
２６      転送先ノード表
２８      データ転送先決定プログラム
３０      通信部
５０      管理ノード
１００    並列処理装置
ＭＮＷ    管理ネットワーク
ＮＤ      ノード
ＮＷ      ネットワーク
ＲＡＮＫ  ランク番号
ＳＮＷ    サブネットワーク
【図１】
2020126487.tif 000010
【図２】
2020126487.tif 000011
【図３】
2020126487.tif 000012
【図４】
2020126487.tif 000013
【図５】
2020126487.tif 000014
【図６】
2020126487.tif 000015
【図７】
2020126487.tif 000016
【図８】
2020126487.tif 000017
【図９】
2020126487.tif 000018
【図１０】
2020126487.tif 000019