(57)【要約】【課題】ノード間の通信の競合を抑制する。【解決手段】複数のノードと複数の第１の中継装置と複数の第２の中継装置とを含み、複数の第１の中継装置それぞれが２以上の第２の中継装置と接続されたシステムにおいて、接続された第２の中継装置が同一でない異なる第１の中継装置に接続された異なるノードが、異なるグループに分類されるように、複数のノードを複数のグループに分類する。複数のグループそれぞれから代表ノードを選択する。複数の代表ノードの間で実行される第１のノード間通信の通信順序を、第１のツリーに従ってデータを転送し、これと並列に第２のツリーに従って異なるデータを転送するように決定する。複数のグループそれぞれについて実行される第２のノード間通信の通信順序を、第３のツリーに従ってデータを転送し、これと並列に第４のツリーに従って異なるデータを転送するように決定する。【選択図】図１
2020178181.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
複数のノードと複数の第１の中継装置と複数の第２の中継装置とを含み、前記複数のノードそれぞれが前記複数の第１の中継装置の１つと接続され、前記複数の第１の中継装置それぞれが前記複数の第２の中継装置の一部である２以上の第２の中継装置と接続されたシステムにおいて、接続された前記２以上の第２の中継装置が同一でない異なる第１の中継装置に接続された異なるノードが、異なるグループに分類されるように、前記システムに含まれる前記複数のノードを複数のグループに分類し、
前記複数のグループそれぞれから代表ノードを選択し、
前記複数のグループに対応する複数の代表ノードの間で実行される第１のノード間通信の通信順序を、１つの代表ノードを基点として、前記１つの代表ノード以外の他の代表ノードが第１のツリーに従ってデータを転送する第１の転送処理を行い、前記第１の転送処理と並列に、前記他の代表ノードが第２のツリーに従って前記第１の転送処理と異なるデータを転送する第２の転送処理を行うように決定し、
前記複数のグループそれぞれについて、前記第１のノード間通信の前または後に当該グループに含まれる２以上のノードの間で実行される第２のノード間通信の通信順序を、当該グループの代表ノードを基点として、当該代表ノード以外の他のノードが第３のツリーに従ってデータを転送する第３の転送処理を行い、前記第３の転送処理と並列に、前記他のノードが第４のツリーに従って前記第３の転送処理と異なるデータを転送する第４の転送処理を行うように決定する、
処理を実行させる通信制御プログラム。
【請求項２】
前記複数のノードの分類では、接続された前記２以上の第２の中継装置が同一である異なる第１の中継装置に接続された異なるノードを、同じグループに分類する、
請求項１記載の通信制御プログラム。
【請求項３】
前記複数のグループそれぞれの代表ノードは、当該グループに含まれる前記２以上のノードのうち、配置されたプロセスの識別番号が最小のノードである、
請求項１記載の通信制御プログラム。
【請求項４】
前記第１のノード間通信は、前記第２のノード間通信の後に実行され、
前記第３の転送処理では、前記他のノードに記憶されたデータの一部を当該グループの代表ノードに転送し、前記第４の転送処理では、前記他のノードに記憶されたデータの他の一部を当該グループの代表ノードに転送し、
前記第１の転送処理では、前記他の代表ノードに集約されたデータの一部を前記１つの代表ノードに転送し、前記第２の転送処理では、前記他の代表ノードに集約されたデータの他の一部を前記１つの代表ノードに転送する、
請求項１記載の通信制御プログラム。
【請求項５】
前記第１のノード間通信の通信順序の決定では、前記第１のツリーの中で前記他の代表ノードの位置を巡回シフトすることで前記第２のツリーを生成し、
前記第２のノード間通信の通信順序の決定では、前記第３のツリーの中で前記他のノードの位置を巡回シフトすることで前記第４のツリーを生成する、
請求項１記載の通信制御プログラム。
【請求項６】
コンピュータが、
複数のノードと複数の第１の中継装置と複数の第２の中継装置とを含み、前記複数のノードそれぞれが前記複数の第１の中継装置の１つと接続され、前記複数の第１の中継装置それぞれが前記複数の第２の中継装置の一部である２以上の第２の中継装置と接続されたシステムにおいて、接続された前記２以上の第２の中継装置が同一でない異なる第１の中継装置に接続された異なるノードが、異なるグループに分類されるように、前記システムに含まれる前記複数のノードを複数のグループに分類し、
前記複数のグループそれぞれから代表ノードを選択し、
前記複数のグループに対応する複数の代表ノードの間で実行される第１のノード間通信の通信順序を、１つの代表ノードを基点として、前記１つの代表ノード以外の他の代表ノードが第１のツリーに従ってデータを転送する第１の転送処理を行い、前記第１の転送処理と並列に、前記他の代表ノードが第２のツリーに従って前記第１の転送処理と異なるデータを転送する第２の転送処理を行うように決定し、
前記複数のグループそれぞれについて、前記第１のノード間通信の前または後に当該グループに含まれる２以上のノードの間で実行される第２のノード間通信の通信順序を、当該グループの代表ノードを基点として、当該代表ノード以外の他のノードが第３のツリーに従ってデータを転送する第３の転送処理を行い、前記第３の転送処理と並列に、前記他のノードが第４のツリーに従って前記第３の転送処理と異なるデータを転送する第４の転送処理を行うように決定する、
通信制御方法。
【請求項７】
複数のノードと複数の第１の中継装置と複数の第２の中継装置とを含み、前記複数のノードそれぞれが前記複数の第１の中継装置の１つと接続され、前記複数の第１の中継装置それぞれが前記複数の第２の中継装置の一部である２以上の第２の中継装置と接続されたシステムにおいて、前記複数のノードの間のノード間通信の通信順序を示す通信制御データを記憶する記憶部と、
前記ノード間通信の通信順序を決定する処理部と、
を有し、前記処理部は、
接続された前記２以上の第２の中継装置が同一でない異なる第１の中継装置に接続された異なるノードが、異なるグループに分類されるように、前記システムに含まれる前記複数のノードを複数のグループに分類し、
前記複数のグループそれぞれから代表ノードを選択し、
前記複数のグループに対応する複数の代表ノードの間で実行される第１のノード間通信の通信順序を、１つの代表ノードを基点として、前記１つの代表ノード以外の他の代表ノードが第１のツリーに従ってデータを転送する第１の転送処理を行い、前記第１の転送処理と並列に、前記他の代表ノードが第２のツリーに従って前記第１の転送処理と異なるデータを転送する第２の転送処理を行うように決定し、
前記複数のグループそれぞれについて、前記第１のノード間通信の前または後に当該グループに含まれる２以上のノードの間で実行される第２のノード間通信の通信順序を、当該グループの代表ノードを基点として、当該代表ノード以外の他のノードが第３のツリーに従ってデータを転送する第３の転送処理を行い、前記第３の転送処理と並列に、前記他のノードが第４のツリーに従って前記第３の転送処理と異なるデータを転送する第４の転送処理を行うように決定する、
情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は通信制御プログラム、通信制御方法および情報処理装置に関する。
【背景技術】
【０００２】
複数の情報処理装置をノードとして含む並列処理システムがある。並列処理システムは、同一のジョブに属する複数のプロセスを複数のノードに割り振り、それら複数のプロセスを複数のノードにより並列に実行する。ジョブの中ではノード間で通信を行うことがある。ノード間で通信を行うユーザプログラムは、ＭＰＩ（Message Passing Interface）ライブラリなどの通信ライブラリを利用して実装されることがある。ノード間の通信としては、ジョブに使用される複数のノードが一斉にデータ送信に参加するコレクティブ通信（集合通信または集団通信と言うこともある）がある。コレクティブ通信には、複数の他のノードが分散してもつデータを１つのノードに転送するＲｅｄｕｃｅ通信や、１つのノードから複数の他のノードに同一データをコピーするブロードキャスト通信が含まれる。
【０００３】
ところで、並列処理システムが多数のノードを含む場合、単一のスイッチなど単一の中継装置に全てのノードを直接接続することは難しい。そのため、複数のノードおよび複数の中継装置の接続形態を示すネットワークトポロジ（単にトポロジと言うことがある）が問題となる。１つのノードと別の１つのノードとの間の通信が、２以上の中継装置を経由することがある。並列処理システムのトポロジの選択では、ノード間の通信経路の冗長性や、中継装置の個数などのコストが考慮されることがある。
【０００４】
並列処理システムの１つとして、多層フルメッシュトポロジをもつ多層フルメッシュシステムが提案されている。提案の多層フルメッシュシステムは、複数のノードと複数のＬｅａｆ（葉）スイッチと複数のＳｐｉｎｅ（背骨）スイッチを含み、複数の層（レイヤ）を形成する。各ノードは何れか１つのＬｅａｆスイッチに接続され、各Ｌｅａｆスイッチは何れか１つの層に属し、各Ｓｐｉｎｅスイッチは複数の層を貫通する。
【０００５】
層内では、２以上のＬｅａｆスイッチがフルメッシュトポロジにより接続されている。Ｌｅａｆスイッチのペア毎に、他のＬｅａｆスイッチを経由しない通信経路が存在する。ただし、Ｌｅａｆスイッチのペア毎に、その間に１つのＳｐｉｎｅスイッチが配置されている。よって、層内では、１つのＬｅａｆスイッチは別の１つのＬｅａｆスイッチと、１つのＳｐｉｎｅスイッチを経由して通信することになる。このＳｐｉｎｅスイッチは複数の層を接続している。よって、当該１つのＬｅａｆスイッチは別の層に属する１つのＬｅａｆスイッチとも、１つのＳｐｉｎｅスイッチを経由して通信できる。
【０００６】
なお、ツリー状に接続された複数のノードを含む並列コンピュータが提案されている。提案の並列コンピュータは、ツリーのルートに位置する１つのノードから末端に位置する複数のノードに向かってデータをコピーすることで、ブロードキャスト通信を実現する。また、並列コンピュータは、ツリーの末端に位置する複数のノードからルートに位置する１つのノードに向かってデータを転送することで、Ｒｅｄｕｃｅ通信を実現する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】国際公開第２００２／０６９１６８号
【特許文献２】特開２０１８−１８５６５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
コレクティブ通信のアルゴリズムには、複数のノードの間の通信順序がツリー状になるように各ノードの通信相手を決定するＴｒｅｅアルゴリズムがある。Ｔｒｅｅアルゴリズムによれば、例えば、プロセス１，３がプロセス２にデータを転送し、プロセス５，７がプロセス６にデータを転送し、プロセス２，６がプロセス４にデータを転送するというように、ツリーの末端からルートに向かってＲｅｄｕｃｅ通信を行う。また、例えば、プロセス４がプロセス２，６にデータをコピーし、プロセス２がプロセス１，３にデータをコピーし、プロセス６がプロセス５，７にデータをコピーするというように、ツリーのルートから末端に向かってブロードキャスト通信を行う。
【０００９】
ただし、単一のツリーに従ってコレクティブ通信を行うと、各ノードにおいてデータの送信および受信の少なくとも一方を行っていない空き時間が生じやすく、リンクの通信帯域が十分に活用されないことがある。そこで、コレクティブ通信のアルゴリズムとしてＴｗｏＴｒｅｅアルゴリズムが提案されている。ＴｗｏＴｒｅｅアルゴリズムでは、データ集合を２つに分割すると共に、複数のノードの間の異なる通信順序を示す２つのツリーを生成する。そして、一方のデータ部分集合を一方のツリーに従って集約またはコピーし、他方のデータ部分集合を他方のツリーに従って集約またはコピーする。これにより、コレクティブ通信中のリンク使用率を向上させて通信時間を削減できる。
【００１０】
しかし、並列処理システムのトポロジによっては、複数のツリーに基づく通信を並列に実行すると、通信が競合するリスクが高くなるという問題がある。一方のツリーに従ってプロセス２がプロセス４にデータを転送し、これと並列に他方のツリーに従ってプロセス３がプロセス５にデータを転送する場合、２つの通信経路が同じリンクを使用すると通信が競合し得る。通信が競合すると、パケットの送信待ちが発生する、１つのリンクの通信帯域が分割されるなどにより、通信遅延が発生して通信時間が長くなる。
【００１１】
例えば、前述の多層フルメッシュシステムでは、２つのＬｅａｆスイッチの間に存在する最短経路の個数は、当該２つのＬｅａｆスイッチに共通に接続されているＳｐｉｎｅスイッチの個数に相当する。同じ層に属する２つのＬｅａｆスイッチの間にある最短経路は１つのみである。よって、１つのＬｅａｆスイッチの配下にプロセス２，３が配置され、別の１つのＬｅａｆスイッチの配下にプロセス４，５が配置されている場合、プロセス２からプロセス４への通信とプロセス３からプロセス５への通信が競合することがある。
【００１２】
１つの側面では、本発明は、ノード間の通信の競合を抑制できる通信制御プログラム、通信制御方法および情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１３】
１つの態様では、コンピュータに以下の処理を実行させる通信制御プログラムが提供される。複数のノードと複数の第１の中継装置と複数の第２の中継装置とを含み、複数のノードそれぞれが複数の第１の中継装置の１つと接続され、複数の第１の中継装置それぞれが複数の第２の中継装置の一部である２以上の第２の中継装置と接続されたシステムにおいて、接続された２以上の第２の中継装置が同一でない異なる第１の中継装置に接続された異なるノードが、異なるグループに分類されるように、システムに含まれる複数のノードを複数のグループに分類する。複数のグループそれぞれから代表ノードを選択する。複数のグループに対応する複数の代表ノードの間で実行される第１のノード間通信の通信順序を、１つの代表ノードを基点として、１つの代表ノード以外の他の代表ノードが第１のツリーに従ってデータを転送する第１の転送処理を行い、第１の転送処理と並列に、他の代表ノードが第２のツリーに従って第１の転送処理と異なるデータを転送する第２の転送処理を行うように決定する。複数のグループそれぞれについて、第１のノード間通信の前または後に当該グループに含まれる２以上のノードの間で実行される第２のノード間通信の通信順序を、当該グループの代表ノードを基点として、当該代表ノード以外の他のノードが第３のツリーに従ってデータを転送する第３の転送処理を行い、第３の転送処理と並列に、他のノードが第４のツリーに従って第３の転送処理と異なるデータを転送する第４の転送処理を行うように決定する。
【００１４】
また、１つの態様では、コンピュータが実行する通信制御方法が提供される。また、１つの態様では、記憶部と処理部とを有する情報処理装置が提供される。
【発明の効果】
【００１５】
１つの側面では、ノード間の通信の競合を抑制できる。
【図面の簡単な説明】
【００１６】
【図１】第１の実施の形態の情報処理システムの例を説明する図である。
【図２】第２の実施の形態の多層フルメッシュシステムの例を示す図である。
【図３】多層フルメッシュシステムの配線例を示す図である。
【図４】サーバのハードウェア例を示すブロック図である。
【図５】スイッチのハードウェア例を示すブロック図である。
【図６】Ｔｒｅｅアルゴリズムの例を示す図である。
【図７】ＴｒｅｅによるＲｅｄｕｃｅ通信の送受信関係の例を示す図である。
【図８】ＴｗｏＴｒｅｅアルゴリズムの例を示す図である。
【図９】ＴｗｏＴｒｅｅによるＲｅｄｕｃｅ通信の送受信関係の例を示す図である。
【図１０】プロセスの第１の配置例を示す図である。
【図１１】ＴｗｏＴｒｅｅの生成例を示す図である。
【図１２】Ｒｅｄｕｃｅ通信の競合例を示す図である。
【図１３】プロセスの第２の配置例を示す図である。
【図１４】ローカルＴｗｏＴｒｅｅの生成例を示す図である。
【図１５】グローバルＴｗｏＴｒｅｅの生成例を示す図である。
【図１６】サーバとジョブスケジューラの機能例を示す図である。
【図１７】通信手順テーブルの例を示す図である。
【図１８】通信手順決定の処理例を示すフローチャートである。
【図１９】コレクティブ通信の処理例を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１８】
図１は、第１の実施の形態の情報処理システムの例を説明する図である。
第１の実施の形態の情報処理システムは、並列に情報処理を行う複数のノードの間のノード間通信を制御する。ノード間通信は、コレクティブ通信、集合通信または集団通信と言われるものであってもよい。コレクティブ通信には、複数のノードに分散して記憶されたデータを転送して１つのノードに集約するＲｅｄｕｃｅ通信が含まれる。また、コレクティブ通信には、１つのノードに記憶されたデータをコピーして複数のノードに配布するブロードキャスト通信が含まれる。ノード間通信を行う対象のシステムは、例えば、多層フルメッシュトポロジをもつ多層フルメッシュシステムである。ただし、対象のシステムは、後述する構成を備えていれば多層フルメッシュシステムでなくてもよい。
【００１９】
第１の実施の形態の情報処理システムは、情報処理装置１０を含む。情報処理装置１０は、ノード間通信を行う対象のシステムを制御するジョブスケジューラなどの制御装置でもよいし、対象のシステムに含まれるノードの１つであってもよい。
【００２０】
情報処理装置１０は、記憶部および処理部を有する。記憶部は、ＲＡＭ（Random Access Memory）などの揮発性メモリでもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性ストレージでもよい。処理部は、例えば、ＣＰＵ（Central Processing Unit）、ＧＰＵ（Graphics Processing Unit）、ＤＳＰ（Digital Signal Processor）などのプロセッサである。ただし、処理部は、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの特定用途の電子回路を含んでもよい。プロセッサは、メモリに記憶されたプログラムを実行する。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００２１】
ノード間通信を行う対象のシステムは、ノード１１，１２，１３，１４，１５，１６，１７，１８を含む複数のノードを有する。また、対象のシステムは、中継装置２１，２２，２３，２４，２５，２６，２７，２８を含む複数の中継装置を有する。中継装置２１，２２，２３，２４は、下位の中継装置（第１の中継装置）である。中継装置２５，２６，２７，２８は、上位の中継装置（第２の中継装置）である。中継装置２１，２２，２３，２４，２５，２６，２７，２８は、接続関係に応じてデータを転送する。
【００２２】
複数のノードはそれぞれ、複数の第１の中継装置のうちの１つと接続される。複数の第１の中継装置はそれぞれ、複数の第２の中継装置の一部である２以上の第２の中継装置と接続される。図１の例では、ノード１１，１２が中継装置２１に接続され、ノード１３，１４が中継装置２２に接続され、ノード１５，１６が中継装置２３に接続され、ノード１７，１８が中継装置２４に接続される。中継装置２１が中継装置２５，２６に接続され、中継装置２２が中継装置２５，２６に接続され、中継装置２３が中継装置２６，２７に接続され、中継装置２４が中継装置２６，２７に接続される。
【００２３】
情報処理装置１０は、対象のシステム上で実行されるノード間通信について、複数のノードの間の通信順序を決定する。ノード間通信は、例えば、複数のフェーズに分割して実行される。１つのフェーズの中で、２以上のノードが並列にデータを送信することがある。ノード間通信の通信順序の決定では、例えば、各フェーズにおいて何れのノードが送信元ノードとして動作するかが決定される。
【００２４】
まず、情報処理装置１０は、対象のシステムに含まれる複数ノードを複数のグループに分類する。このとき、情報処理装置１０は、複数の第１の中継装置を、接続された２以上の第２の中継装置の同一性に基づいて複数のグループに分類する。接続された２以上の第２の中継装置が一致しない第１の中継装置を、異なるグループに振り分けるようにする。例えば、接続された２以上の第２の中継装置が同一である第１の中継装置を、同一グループに振り分けるようにする。情報処理装置１０は、あるグループに分類した第１の中継装置に接続されたノードを、当該グループに属するノードと判定する。１つのノードは何れか１つのグループに属する。
【００２５】
図１の例では、中継装置２１と中継装置２２は共に、上位の中継装置として中継装置２５，２６と接続されている。中継装置２３と中継装置２４は共に、上位の中継装置として中継装置２６，２７と接続されている。そこで、中継装置２１と中継装置２２は同一のグループに分類してもよい。また、中継装置２３と中継装置２４は同一のグループに分類してもよい。一方、中継装置２１と中継装置２３，２４は異なるグループに分類する。また、中継装置２２と中継装置２３，２４は異なるグループに分類する。
【００２６】
ここでは、情報処理装置１０は、中継装置２１に接続されたノード１１，１２および中継装置２２に接続されたノード１３，１４を、グループ３１に分類する。また、情報処理装置１０は、中継装置２３に接続されたノード１５，１６および中継装置２４に接続されたノード１７，１８を、グループ３２に分類する。ただし、ノード１１，１２とノード１３，１４を異なるグループに分類することも許容される。また、ノード１５，１６とノード１７，１８を異なるグループに分類することも許容される。
【００２７】
次に、情報処理装置１０は、複数のグループそれぞれから代表ノードを選択する。ここでは、各グループから１つのノードが代表ノードとして選択されればよく、何らかの選択基準を予め定めておけばよい。例えば、情報処理装置１０は、グループ内の２以上のノードのうち、実行するプロセスの識別番号が最小のノードを選択する。図１の例では、情報処理装置１０は、グループ３１からノード１１を代表ノードとして選択する。また、情報処理装置１０は、グループ３２からノード１５を代表ノードとして選択する。
【００２８】
次に、情報処理装置１０は、複数のグループに対応する複数の代表ノードの間で実行されるノード間通信３３（第１のノード間通信）の通信順序を決定する。また、情報処理装置１０は、複数のグループそれぞれについて、当該グループに含まれる２以上のノードの間で実行されるノード間通信３４（第２のノード間通信）の通信順序を決定する。ノード間通信３３とノード間通信３４は、それぞれ全体のノード間通信の一部として実行され、異なる段階として区別されて実行される。ノード間通信３３はグループ間通信であり、ノード間通信３４はグループ内通信である。ノード間通信３３では、グループ毎に１つの代表ノードのみが通信に参加する。ノード間通信３４は、ノード間通信３３の前または後に実行される。例えば、Ｒｅｄｕｃｅ通信の場合、ノード間通信３４はノード間通信３３の前に実行され、ブロードキャスト通信の場合、ノード間通信３４はノード間通信３３の後に実行される。複数のグループのノード間通信３４は並列に実行してもよい。
【００２９】
情報処理装置１０は、ノード間通信３３が以下の条件を満たすように、複数のグループに対応する複数の代表ノードの間の通信順序を決定する。情報処理装置１０は、１つの代表ノードを基点として選択し、基点以外の他の代表ノードの間のデータ転送順序を示すツリー３５（第１のツリー）およびツリー３６（第２のツリー）を生成する。ツリー３５とツリー３６は、代表ノードの間の異なるデータ転送順序を示している。例えば、ツリー３６は、ツリー３５における各代表ノードの位置を巡回シフトしたものである。ツリー３５，３６は、基点に接続されて大きなツリーを形成する。
【００３０】
ノード間通信３３では、基点以外の他の代表ノードがツリー３５に従ってデータを転送する第１の転送処理を行う。また、第１の転送処理と並列に、基点以外の他の代表ノードがツリー３６に従って第１の転送処理と異なるデータを転送する第２の転送処理を行う。
【００３１】
Ｒｅｄｕｃｅ通信の場合、各代表ノードに記憶されたデータの一部がツリー３５の葉からルートに向かって転送され、各代表ノードに記憶されたデータの他の一部（例えば、第１の転送処理で残ったデータ）がツリー３６の葉からルートに向かって転送される。これにより、各代表ノードに記憶されたデータが基点に集約される。ブロードキャスト通信の場合、基点に記憶されたデータの一部がツリー３５のルートから葉に向かって転送され、基点に記憶されたデータの他の一部がツリー３６のルートから葉に向かって転送される。これにより、基点に記憶されたデータが各代表ノードにコピーされる。ここで決定されるノード間通信３３の通信順序は、ＴｗｏＴｒｅｅアルゴリズムに基づいていてもよい。
【００３２】
また、情報処理装置１０は、ノード間通信３４が以下の条件を満たすように、グループ内の２以上のノードの間の通信順序を決定する。情報処理装置１０は、グループ内の２以上のノードのうち代表ノードを基点として選択し、基点以外の他のノードの間のデータ転送順序を示すツリー３７（第３のツリー）およびツリー３８（第４のツリー）を生成する。ツリー３７とツリー３８は、ノード間の異なるデータ転送順序を示している。例えば、ツリー３８は、ツリー３７における各ノードの位置を巡回シフトしたものである。ツリー３７，３８は、基点に接続されて大きなツリーを形成する。
【００３３】
ノード間通信３４では、基点以外の他のノードがツリー３７に従ってデータを転送する第３の転送処理を行う。また、第３の転送処理と並列に、基点以外の他のノードがツリー３８に従って第３の転送処理と異なるデータを転送する第４の転送処理を行う。
【００３４】
Ｒｅｄｕｃｅ通信の場合、各ノードに記憶されたデータの一部がツリー３７の葉からルートに向かって転送され、各ノードに記憶されたデータの他の一部（例えば、第３の転送処理で残ったデータ）がツリー３８の葉からルートに向かって転送される。これにより、各ノードに記憶されたデータが代表ノードに集約される。ブロードキャスト通信の場合、代表ノードに記憶されたデータの一部がツリー３７のルートから葉に向かって転送され、代表ノードに記憶されたデータの他の一部がツリー３８のルートから葉に向かって転送される。これにより、代表ノードから各ノードにデータがコピーされる。ここで決定されるノード間通信３４の通信順序は、ＴｗｏＴｒｅｅアルゴリズムに基づいていてもよい。
【００３５】
情報処理装置１０は、ノード間通信３３の通信順序とノード間通信３４の通信順序とを結合して、全体のノード間通信（例えば、全体のコレクティブ通信）の通信手順を決定する。情報処理装置１０は、決定した通信手順を示す通信制御情報を生成して記憶する。情報処理装置１０がノードの１つである場合、情報処理装置１０は、生成した通信制御情報を参照してノード間通信を実行してもよい。情報処理装置１０が制御装置である場合、情報処理装置１０は、生成した通信制御情報を複数ノードに配布してもよい。
【００３６】
第１の実施の形態の情報処理システムによれば、接続された上位の中継装置が同一でないような異なる下位の中継装置に接続された異なるノードが、異なるグループに分類されるように、ノードがグループ分けされ、グループ毎に代表ノードが選択される。そして、全体のノード間通信が、代表ノード間のノード間通信とグループ内のノード間通信に分けて実行される。代表ノード間のノード間通信およびグループ内のノード間通信それぞれでは、異なる転送順序を示す複数のツリーに基づいて異なるデータが並列に転送されるアルゴリズムに従い、ノード間の通信順序が決定される。
【００３７】
代表ノード間のノード間通信およびグループ内のノード間通信それぞれでは、分割されたデータが異なる転送順序で並列に転送されるため、単一のツリーに基づいて全てのデータを転送する場合よりも、リンクの通信帯域の空き時間を抑制できる。よって、リンクの通信帯域を活用して、Ｒｅｄｕｃｅ通信やブロードキャスト通信などのノード間通信を高速化できる。また、上記のグループ内通信では、下位の中継装置と上位の中継装置との間の通信経路が冗長化されているため、通信競合が抑制される。また、グループ間通信に参加するノードはグループ毎に１つであるため、グループ間の通信経路の冗長度が低い場合であっても通信競合が抑制される。従って、ノード間通信の全体を通じて通信競合を抑制でき、通信遅延を抑制して通信時間を短縮できる。
【００３８】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、第２の実施の形態の多層フルメッシュシステムの例を示す図である。
【００３９】
第２の実施の形態の多層フルメッシュシステムは、複数のサーバおよび複数のスイッチを含み、それら複数のサーバおよび複数のスイッチが多層フルメッシュトポロジで接続された並列処理システムである。サーバは、ユーザプログラムを実行可能なノードであり、コンピュータや情報処理装置と言うこともできる。
【００４０】
スイッチは、サーバ間で送信されるデータを中継する通信装置である。後述するように、スイッチはＬｅａｆスイッチとＳｐｉｎｅスイッチとに分類される。ＬｅａｆスイッチとＳｐｉｎｅスイッチは、同様のハードウェアをもつスイッチであってもよい。第２の実施の形態では、説明を簡単にするため、スイッチのポート数が６であるとする。ただし、スイッチのポート数は、８や１０や３６など６より大きい偶数であってもよい。
【００４１】
多層フルメッシュシステムは、複数の層を形成する。各サーバは、何れか１つのＬｅａｆスイッチに接続される。各Ｌｅａｆスイッチは、何れか１つの層に属する。各Ｓｐｉｎｅスイッチは、複数の層を貫通しており、複数の層のＬｅａｆスイッチに接続される。
【００４２】
層内では、複数のＬｅａｆスイッチがフルメッシュトポロジを形成する。よって、Ｌｅａｆスイッチのペア毎に、他のＬｅａｆスイッチを経由しない最短経路が存在する。２つのＬｅａｆスイッチの間には、複数の層を貫通するＳｐｉｎｅスイッチが配置される。よって、同じ層に属する２つのＬｅａｆスイッチは、１つのＳｐｉｎｅスイッチを経由する通信経路によって通信することができる。異なる層に属する２つのＬｅａｆスイッチも、１つのＳｐｉｎｅスイッチを経由する通信経路によって通信することができる。Ｌｅａｆスイッチは、データをその宛先に応じて最短経路で転送するよう設定される。
【００４３】
ポート数が６である第２の実施の形態では、多層フルメッシュシステムは３つの層を形成する。各層は４つのＬｅａｆスイッチを含む。各Ｌｅａｆスイッチには、３つのサーバと３つのＳｐｉｎｅスイッチが接続される。各Ｓｐｉｎｅスイッチには、層毎に２つのＬｅａｆスイッチが接続され、３つの層の合計で６つのＬｅａｆスイッチが接続される。多層フルメッシュシステムは６つのＳｐｉｎｅスイッチを含む。
【００４４】
一般に、ポート数がｐ（ｐは６以上の偶数）であるスイッチを使用すると、多層フルメッシュシステムはｐ／２個の層を形成する。各層はｐ／２＋１個のＬｅａｆスイッチによってｐ／２＋１角形を形成する。多層フルメッシュシステムは、ｐ２（ｐ＋２）／８個のサーバと３ｐ（ｐ＋２）／８個のスイッチを含む。ｐ＝８の場合、多層フルメッシュシステムは、５角形の４層を形成し、８０個のサーバと３０個のスイッチを含む。ｐ＝１０の場合、多層フルメッシュシステムは、６角形の５層を形成し、１５０個のサーバと４５個のスイッチを含む。ｐ＝３６の場合、多層フルメッシュシステムは、１９角形の１８層を形成し、６１５６個のサーバと５１３個のスイッチを含む。
【００４５】
第２の実施の形態の多層フルメッシュシステムは、層４１，４２，４３を形成する。層４１は、Ｌｅａｆスイッチ２００，２１０，２２０，２３０を含む。Ｌｅａｆスイッチ２００，２１０，２２０，２３０にはそれぞれ３つのサーバが接続される。
【００４６】
Ｌｅａｆスイッチ２００とＬｅａｆスイッチ２１０の間にＳｐｉｎｅスイッチ２４０が配置される。Ｌｅａｆスイッチ２００とＬｅａｆスイッチ２２０の間にＳｐｉｎｅスイッチ２４１が配置される。Ｌｅａｆスイッチ２００とＬｅａｆスイッチ２３０の間にＳｐｉｎｅスイッチ２４２が配置される。Ｌｅａｆスイッチ２１０とＬｅａｆスイッチ２２０の間にＳｐｉｎｅスイッチ２４３が配置される。Ｌｅａｆスイッチ２１０とＬｅａｆスイッチ２３０の間にＳｐｉｎｅスイッチ２４４が配置される。Ｌｅａｆスイッチ２２０とＬｅａｆスイッチ２３０の間にＳｐｉｎｅスイッチ２４５が配置される。
【００４７】
層４２，４３も、Ｌｅａｆスイッチ２００，２１０，２２０，２３０に対応するＬｅａｆスイッチを含む。Ｓｐｉｎｅスイッチ２４０，２４１，２４２，２４３，２４４，２４５は、層４１，４２，４３を貫通しており層４１，４２，４３の間で共通である。
【００４８】
例えば、層４２は、Ｌｅａｆスイッチ２００，２２０，２３０に対応するＬｅａｆスイッチ２０１，２２１，２３１を含む。Ｌｅａｆスイッチ２０１とＬｅａｆスイッチ２３１の間にＳｐｉｎｅスイッチ２４２が配置される。Ｌｅａｆスイッチ２２１とＬｅａｆスイッチ２３１の間にＳｐｉｎｅスイッチ２４５が配置される。層４３は、Ｌｅａｆスイッチ２０２，２２２，２３２を含む。Ｌｅａｆスイッチ２０２とＬｅａｆスイッチ２３２の間にＳｐｉｎｅスイッチ２４２が配置される。Ｌｅａｆスイッチ２２２とＬｅａｆスイッチ２３２の間にＳｐｉｎｅスイッチ２４５が配置される。
【００４９】
また、第２の実施の形態の多層フルメッシュシステムは、ジョブスケジューラ３００を含む。ジョブスケジューラ３００は、ユーザからジョブ要求を受け付け、ジョブに使用するサーバ（ノード）を選択するサーバ装置である。ジョブスケジューラ３００は、コンピュータや情報処理装置と言うこともできる。ジョブは、ユーザプログラムから起動される複数のプロセスを含む。ユーザプログラムは、ＭＰＩライブラリなどの通信ライブラリを用いることがある。複数のプロセスには、ランクと呼ばれる非負整数の識別番号が付与される。１つのサーバには１つのプロセスが配置される。ジョブスケジューラ３００は、プロセスの配置を決定し、サーバに対してプロセス配置に関する情報を通知する。
【００５０】
ジョブスケジューラ３００とサーバとの間の通信には、上記のＬｅａｆスイッチやＳｐｉｎｅスイッチを含むデータ用ネットワークを使用してもよいし、データ用ネットワークとは異なる管理用ネットワークを使用してもよい。
【００５１】
図３は、多層フルメッシュシステムの配線例を示す図である。
図３は、図２の多層フルメッシュシステムに含まれるサーバとＬｅａｆスイッチとＳｐｉｎｅスイッチの間の配線を、図２とは異なる形式で表現したものである。
【００５２】
多層フルメッシュシステムは、Ｓｐｉｎｅスイッチ２４０，２４１，２４２，２４３，２４４，２４５（ＳｐｉｎｅスイッチＡ，Ｂ，Ｃ，Ｄ，Ｅ，Ｆ）を含む。
また、多層フルメッシュシステムは、Ｌｅａｆスイッチ２００，２０１，２０２（Ｌｅａｆスイッチａ１，ａ２，ａ３）を含む。Ｌｅａｆスイッチ２００，２０１，２０２はそれぞれ、Ｓｐｉｎｅスイッチ２４０，２４１，２４２の３つのＳｐｉｎｅスイッチに接続されている。Ｌｅａｆスイッチ２００には、サーバ１００，１０１，１０２が接続されている。Ｌｅａｆスイッチ２０１には、サーバ１０３，１０４，１０５が接続されている。Ｌｅａｆスイッチ２０２には、サーバ１０６，１０７，１０８が接続されている。
【００５３】
また、多層フルメッシュシステムは、Ｌｅａｆスイッチ２１０，２１１，２１２（Ｌｅａｆスイッチｂ１，ｂ２，ｂ３）を含む。Ｌｅａｆスイッチ２１０，２１１，２１２はそれぞれ、Ｓｐｉｎｅスイッチ２４０，２４３，２４４の３つのＳｐｉｎｅスイッチに接続されている。Ｌｅａｆスイッチ２１０には、サーバ１１０，１１１，１１２が接続されている。Ｌｅａｆスイッチ２１１には、サーバ１１３，１１４，１１５が接続されている。Ｌｅａｆスイッチ２１２には、サーバ１１６，１１７，１１８が接続されている。
【００５４】
また、多層フルメッシュシステムは、Ｌｅａｆスイッチ２２０，２２１，２２２（Ｌｅａｆスイッチｃ１，ｃ２，ｃ３）を含む。Ｌｅａｆスイッチ２２０，２２１，２２２はそれぞれ、Ｓｐｉｎｅスイッチ２４１，２４３，２４５の３つのＳｐｉｎｅスイッチに接続されている。Ｌｅａｆスイッチ２２０には、サーバ１２０，１２１，１２２が接続されている。Ｌｅａｆスイッチ２２１には、サーバ１２３，１２４，１２５が接続されている。Ｌｅａｆスイッチ２２２には、サーバ１２６，１２７，１２８が接続されている。
【００５５】
また、多層フルメッシュシステムは、Ｌｅａｆスイッチ２３０，２３１，２３２（Ｌｅａｆスイッチｄ１，ｄ２，ｄ３）を含む。Ｌｅａｆスイッチ２３０，２３１，２３２はそれぞれ、Ｓｐｉｎｅスイッチ２４２，２４４，２４５の３つのＳｐｉｎｅスイッチに接続されている。Ｌｅａｆスイッチ２３０には、サーバ１３０，１３１，１３２が接続されている。Ｌｅａｆスイッチ２３１には、サーバ１３３，１３４，１３５が接続されている。Ｌｅａｆスイッチ２３２には、サーバ１３６，１３７，１３８が接続されている。
【００５６】
このように、各Ｌｅａｆスイッチには、上位スイッチとして３つのＳｐｉｎｅスイッチが接続されている。層４１，４２，４３の間の対応する位置にあるＬｅａｆスイッチは、同一のＳｐｉｎｅスイッチに接続されている。第２の実施の形態では、接続されている３つのＳｐｉｎｅスイッチが全て同一であるＬｅａｆスイッチおよびその配下のサーバを、「層間グループ」または単に「グループ」と言うことがある。
【００５７】
Ｌｅａｆスイッチ２００，２０１，２０２およびその配下のサーバ１００，１０１，１０２，１０３，１０４，１０５，１０６，１０７，１０８は、１つのグループ（グループａ）を形成する。Ｌｅａｆスイッチ２１０，２１１，２１２およびその配下のサーバ１１０，１１１，１１２，１１３，１１４，１１５，１１６，１１７，１１８は、１つのグループ（グループｂ）を形成する。Ｌｅａｆスイッチ２２０，２２１，２２２およびその配下のサーバ１２０，１２１，１２２，１２３，１２４，１２５，１２６，１２７，１２８は、１つのグループ（グループｃ）を形成する。Ｌｅａｆスイッチ２３０，２３１，２３２およびその配下のサーバ１３０，１３１，１３２，１３３，１３４，１３５，１３６，１３７，１３８は、１つのグループ（グループｄ）を形成する。
【００５８】
図４は、サーバのハードウェア例を示すブロック図である。
サーバ１００は、ＣＰＵ１５１、ＲＡＭ１５２、ＨＤＤ１５３、画像インタフェース１５４、入力インタフェース１５５、媒体リーダ１５６およびＨＣＡ（Host Channel Adapter）１５７を有する。上記ユニットはバスに接続されている。他のサーバやジョブスケジューラ３００も、サーバ１００と同様のハードウェアを有する。
【００５９】
ＣＰＵ１５１は、プログラムの命令を実行するプロセッサである。ＣＰＵ１５１は、ＨＤＤ１５３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１５２にロードし、プログラムを実行する。なお、ＣＰＵ１５１は複数のプロセッサコアを備えてもよく、サーバ１００は複数のプロセッサを備えてもよい。複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００６０】
ＲＡＭ１５２は、ＣＰＵ１５１が実行するプログラムやＣＰＵ１５１が演算に使用するデータを一時的に記憶する揮発性の半導体メモリである。なお、サーバ１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数のメモリを備えてもよい。
【００６１】
ＨＤＤ１５３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性ストレージである。なお、サーバ１００は、フラッシュメモリやＳＳＤ（Solid State Drive）など他の種類のストレージを備えてもよく、複数のストレージを備えてもよい。
【００６２】
画像インタフェース１５４は、ＣＰＵ１５１からの命令に従って、サーバ１００に接続された表示装置１６１に画像を出力する。表示装置１６１として、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイ、プロジェクタなど、任意の種類の表示装置を使用することができる。また、サーバ１００に、プリンタなど表示装置１６１以外の出力デバイスが接続されてもよい。
【００６３】
入力インタフェース１５５は、サーバ１００に接続された入力デバイス１６２から入力信号を受け付ける。入力デバイス１６２として、マウス、タッチパネル、タッチパッド、キーボードなど、任意の種類の入力デバイスを使用することができる。また、サーバ１００に複数種類の入力デバイスが接続されてもよい。
【００６４】
媒体リーダ１５６は、記録媒体１６３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１６３として、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、半導体メモリなど、任意の種類の記録媒体を使用することができる。媒体リーダ１５６は、例えば、記録媒体１６３から読み取ったプログラムやデータを、ＲＡＭ１５２やＨＤＤ１５３などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、ＣＰＵ１５１によって実行される。なお、記録媒体１６３は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体１６３やＨＤＤ１５３を、コンピュータ読み取り可能な記録媒体と言うことがある。
【００６５】
ＨＣＡ１５７は、ＩｎｆｉｎｉＢａｎｄの通信インタフェースである。ＨＣＡ１５７は、全二重通信が可能であり、データの送信と受信を並列に行える。ＨＣＡ１５７は、Ｌｅａｆスイッチ２００に接続される。ただし、サーバ１００は、ＨＣＡ１５７に代えてまたはＨＣＡ１５７に加えて、他の通信規格の通信インタフェースを有してもよい。
【００６６】
図５は、スイッチのハードウェア例を示すブロック図である。
Ｌｅａｆスイッチ２００は、ＣＰＵ２５１、ＲＡＭ２５２、ＲＯＭ２５３および通信ポート２５４，２５５，２５６，２５７，２５８，２５９を有する。他のＬｅａｆスイッチやＳｐｉｎｅスイッチも、Ｌｅａｆスイッチ２００と同様のハードウェアを有する。
【００６７】
ＣＰＵ２５１は、通信制御プログラムを実行するプロセッサである。ＣＰＵ２５１は、通信制御プログラムに従い、受信されたパケットをその宛先に応じた通信ポートに出力する。ＣＰＵ２５１は、ＲＯＭ２５３に記憶された通信制御プログラムの少なくとも一部をＲＡＭ２５２にロードし、通信制御プログラムを実行する。ただし、通信制御の少なくとも一部を、専用のハードウェア回路を用いて実装することもできる。
【００６８】
ＲＡＭ２５２は、ＣＰＵ２５１が実行する通信制御プログラムや通信制御に使用するデータを一時的に記憶する揮発性の半導体メモリである。データには、パケットの宛先と出力先の通信ポートとを対応付けたルーティング情報が含まれる。ＲＯＭ２５３は、通信制御プログラムを記憶する不揮発性ストレージである。ただし、Ｌｅａｆスイッチ２００は、フラッシュメモリなど書き換え可能な不揮発性ストレージを備えてもよい。
【００６９】
通信ポート２５４，２５５，２５６，２５７，２５８，２５９は、ＩｎｆｉｎｉＢａｎｄの通信インタフェースである。通信ポート２５４，２５５，２５６，２５７，２５８，２５９は、全二重通信が可能であり、データの送信と受信を並列に行える。通信ポート２５４は、サーバ１００に接続される。通信ポート２５５は、サーバ１０１に接続される。通信ポート２５６は、サーバ１０２に接続される。通信ポート２５７は、Ｓｐｉｎｅスイッチ２４１に接続される。通信ポート２５８は、Ｓｐｉｎｅスイッチ２４２に接続される。通信ポート２５９は、Ｓｐｉｎｅスイッチ２４３に接続される。ただし、Ｌｅａｆスイッチ２００は、通信ポート２５４，２５５，２５６，２５７，２５８，２５９に代えてまたは通信ポート２５４，２５５，２５６，２５７，２５８，２５９に加えて、他の通信規格の通信インタフェースを有してもよい。
【００７０】
次に、多層フルメッシュシステム上のコレクティブ通信について説明する。
同一のジョブに属する複数のプロセスは、それら複数のプロセスが一斉にデータ送信に参加するコレクティブ通信を行うことがある。ユーザプログラムがＭＰＩライブラリのコレクティブ通信の命令を呼び出すことで、一斉のデータ送信を開始できる。
【００７１】
コレクティブ通信の１つの種類として、Ｒｅｄｕｃｅ通信がある。Ｒｅｄｕｃｅ通信では、ランク０のプロセスなど特定のプロセスに、他の全てのプロセスがもつデータを集約する。１ノード１プロセスを仮定すると、Ｒｅｄｕｃｅ通信は、特定のサーバ（ノード）に他のサーバ（ノード）がもつデータを転送するものであると言える。複数のプロセスは異なるデータをもつことが多い。集約するデータは、ジョブの実行結果を示す結果データであることもあるし、ジョブの途中経過を示す中間データであることもある。
【００７２】
また、コレクティブ通信の１つの種類として、ブロードキャスト通信がある。ブロードキャスト通信では、ランク０のプロセスなど特定のプロセスがもつデータを、他の全てのプロセスにコピーする。１ノード１プロセスを仮定すると、ブロードキャスト通信は、あるサーバ（ノード）から他の全てのサーバ（ノード）に同一データを送信するものであると言える。コピーするデータは、プロセスに入力する入力データであることもある。
【００７３】
また、コレクティブ通信の１つとして、Ａｌｌｒｅｄｕｃｅ通信がある。Ａｌｌｒｅｄｕｃｅ通信では、複数のプロセスがもつデータの全体を、それら複数のプロセスの全てにコピーする。Ａｌｌｒｅｄｕｃｅ通信は、複数のプロセスがもつデータを集約する処理と、集約したデータを全てのプロセスにコピーする処理に分割できる。よって、Ａｌｌｒｅｄｕｃｅ通信は、Ｒｅｄｕｃｅ通信とブロードキャスト通信を組み合わせて実現できる。
【００７４】
コレクティブ通信のアルゴリズムの１つにＴｒｅｅアルゴリズムがある。以下では、コレクティブ通信の種類として主にＲｅｄｕｃｅ通信を想定する。
図６は、Ｔｒｅｅアルゴリズムの例を示す図である。
【００７５】
ここでは、サーバ１００がランク０のプロセスを実行し、サーバ１０１がランク１のプロセスを実行し、サーバ１０２がランク２のプロセスを実行し、サーバ１０３がランク３のプロセスを実行するものとする。また、サーバ１０４がランク４のプロセスを実行し、サーバ１０５がランク５のプロセスを実行し、サーバ１０６がランク６のプロセスを実行し、サーバ１０７がランク７のプロセスを実行するものとする。
【００７６】
Ｔｒｅｅアルゴリズムでは、通信相手のトポロジが二分木になるように複数のサーバの間の通信手順が決定される。ツリーのルート以外に位置するサーバは、１つ上（ルートに近付く方向）のレベルに位置する何れか１つのサーバと通信する。ツリーの葉以外に位置するサーバは、１つ下（葉に近付く方向）のレベルに位置する何れか１つまたは２つのサーバと通信する。ツリーを構成するプロセスは、そのランク番号がインオーダの順になるようツリーに配置される。あるサーバに配置されたプロセスのランクは、左下に位置するサーバに配置されたプロセスのランクより大きく、右下に位置するサーバに配置されたプロセスのランクより小さい。ただし、複数のサーバの通信相手が木構造で決定されればよく、ランクがインオーダの順で木構造に配置されなくてもよい。
【００７７】
あるサーバと左下のサーバとの間の通信は、当該サーバと右下のサーバとの間の通信と同一のリンクを使用することになるため、並列には実行されない。よって、ツリー上の分岐があるレベルの通信は、左側の通信のフェーズと右側の通信のフェーズの２つに分割される。ツリー上の分岐がないレベルの通信は、１つのフェーズで実行される。
【００７８】
Ｒｅｄｕｃｅ通信は、ツリーの葉からルートへ向かうデータ転送として表現される。ブロードキャスト通信は、ツリーのルートから葉へ向かうデータ転送として表現される。Ａｌｌｒｅｄｕｃｅ通信は、ツリーの葉からルートへ向かうデータ転送の後に、ツリーのルートから葉へ向かうデータ転送を行うものとして表現される。
【００７９】
ここでは、サーバ１００がツリーのルートに位置する。サーバ１０１，１０３，１０５，１０７がツリーの葉に位置する。サーバ１０１がサーバ１０２と通信し、これと並列にサーバ１０５がサーバ１０６と通信する。サーバ１０３がサーバ１０２と通信し、これと並列にサーバ１０７がサーバ１０６と通信する。サーバ１０２がサーバ１０４と通信する。サーバ１０６がサーバ１０４と通信する。サーバ１０４がサーバ１００と通信する。
【００８０】
Ｒｅｄｕｃｅ通信の場合、サーバ１０１のデータをサーバ１０１がサーバ１０２に送信し、これと並列にサーバ１０５のデータをサーバ１０５がサーバ１０６に送信する。サーバ１０３のデータをサーバ１０３がサーバ１０２に送信し、これと並列にサーバ１０７のデータをサーバ１０７がサーバ１０６に送信する。サーバ１０１，１０２，１０３のデータをサーバ１０２がサーバ１０４に送信する。サーバ１０５，１０６，１０７のデータをサーバ１０６がサーバ１０４に送信する。最後に、サーバ１０１，１０２，１０３，１０４，１０５，１０６，１０７のデータをサーバ１０４がサーバ１００に送信する。
【００８１】
これにより、サーバ１００にサーバ１００，１０１，１０２，１０３，１０４，１０５，１０６，１０７のデータが集約される。このように、ツリーの葉でもルートでもないサーバは、下位の２つのサーバからデータを受信し、受信したデータに自身のデータを加えて上位のサーバに転送する。なお、ツリーの同一レベルの左側通信と右側通信は、何れを先に実行してもよい。また、データを複数のブロックに分割し、分割したブロック単位でパイプライン通信を行うようにすることもできる。この場合、ツリーの葉でもルートでもないサーバは、あるブロックを下位のサーバから受信することと、別のブロックを上位のサーバに送信することを、並列に行うことができる。
【００８２】
ブロードキャスト通信の場合、サーバ１００がデータをコピーしてサーバ１０４に送信する。サーバ１０４がデータをコピーしてサーバ１０６に送信する。また、サーバ１０４がデータをコピーしてサーバ１０２に送信する。サーバ１０６がデータをコピーしてサーバ１０７に送信し、これと並列にサーバ１０２がデータをコピーしてサーバ１０３に送信する。サーバ１０６がデータをコピーしてサーバ１０５に送信し、これと並列にサーバ１０２がデータをコピーしてサーバ１０１に送信する。
【００８３】
これにより、サーバ１００のデータがサーバ１０１，１０２，１０３，１０４，１０５，１０６，１０７にコピーされる。このように、ツリーの葉でもルートでもないサーバは、上位のサーバからデータを受信し、受信したデータを下位の２つのサーバに転送する。なお、上記のようにパイプライン通信を行うこともできる。この場合、ツリーの葉でもルートでもないサーバは、あるブロックを上位のサーバから受信することと、別のブロックを下位のサーバに送信することを、並列に行うことができる。
【００８４】
以下では、データを分割してパイプライン通信を行うことを想定する。
図７は、ＴｒｅｅによるＲｅｄｕｃｅ通信の送受信関係の例を示す図である。
パイプライン通信においても、各サーバは、リンクを共用することになるため、異なる２つのサーバから並列にブロックを受信することはせず、異なる２つのサーバに並列にブロックを送信することはしない。一方で、各サーバは、全二重通信が可能なため、あるサーバからのブロックの受信と、あるサーバへのブロックの送信とを並列に行える。
【００８５】
そこで、図６のＴｒｅｅに従ったサーバ間通信は、図７のように２つのフェーズに分割される。同一フェーズ内の異なるノードペアの通信は並列に行える。２つのフェーズは、分割された複数のブロックの転送が完了するまで交互に実行される。
【００８６】
ここでは、図６のＴｒｅｅの左側のエッジの通信と右側のエッジの通信とを異なるフェーズに割り振る方法を採用する。すると、Ｒｅｄｕｃｅ通信の左側フェーズは、サーバ１０１からサーバ１０２への送信と、サーバ１０５からサーバ１０６への送信と、サーバ１０２からサーバ１０４への送信と、サーバ１０４からサーバ１００への送信とを含む。右側フェーズは、サーバ１０３からサーバ１０２への送信と、サーバ１０７からサーバ１０６への送信と、サーバ１０６からサーバ１０４への送信とを含む。
【００８７】
ただし、パイプライン方式であるため、各フェーズにおいて図７に規定された全ての通信が行われるとは限らない。送信元サーバは、転送すべきブロックがまだ到着していない場合はデータ送信を行わない。また、送信元サーバは、全てのブロックの転送が完了して次に転送すべきブロックが無い場合はデータ送信を行わない。
【００８８】
例えば、１回目の左側フェーズにおいて、サーバ１０１，１０５がそれぞれ１番目のブロックを送信する。このとき、サーバ１０２，１０４はデータ送信を行わない。次に、１回目の右側フェーズにおいて、サーバ１０３，１０７がそれぞれ１番目のブロックを送信する。このとき、サーバ１０６はデータ送信を行わない。
【００８９】
次に、２回目の左側フェーズにおいて、サーバ１０１，１０５がそれぞれ２番目のブロックを送信する。また、サーバ１０２が、サーバ１０１，１０２，１０３の１番目のブロックのＲｅｄｕｃｔｉｏｎ結果をサーバ１０４に送信する。このとき、サーバ１０４はデータ送信を行わない。次に、２回目の右側フェーズにおいて、サーバ１０３，１０７がそれぞれ２番目のブロックを送信する。また、サーバ１０６が、サーバ１０５，１０６，１０７の１番目のブロックのＲｅｄｕｃｔｉｏｎ結果をサーバ１０４に送信する。
【００９０】
次に、３回目の左側フェーズにおいて、サーバ１０１，１０５がそれぞれ３番目のブロックを送信する。また、サーバ１０２が、サーバ１０１，１０２，１０３の２番目のブロックのＲｅｄｕｃｔｉｏｎ結果をサーバ１０４に送信する。また、サーバ１０４が、サーバ１０１，１０２，１０３，１０４，１０５，１０６，１０７の１番目のブロックのＲｅｄｕｃｔｉｏｎ結果をサーバ１００に送信する。次に、３回目の右側フェーズにおいて、サーバ１０３，１０７がそれぞれ３番目のブロックを送信する。また、サーバ１０６が、サーバ１０５，１０６，１０７の２番目のブロックのＲｅｄｕｃｔｉｏｎ結果をサーバ１０４に送信する。このように、複数のブロックがパイプライン方式で転送される。
【００９１】
ただし、各サーバはデータの送信と受信の両方を行う通信帯域をもっている一方、単純なＴｒｅｅアルゴリズムでは、パイプライン通信を採用しても、各サーバにおいてデータの送信と受信の少なくとも一方を行っていない空き時間が多く生じる。そのため、通信帯域が十分に活用されずコレクティブ通信の所要時間が長くなるおそれがある。この問題に対して、Ｔｒｅｅアルゴリズムを改良したＴｗｏＴｒｅｅアルゴリズムがある。
【００９２】
ＴｗｏＴｒｅｅアルゴリズムについては、次の非特許文献にも記載がある。Peter Sanders, Jochen Speck and Jesper Larsson Traff, "Two-tree algorithms for full bandwidth broadcast, reduction and scan", ScienceDirect Parallel Computing, Volume 35, Issue 12, pp.581-594, December 2009。
【００９３】
図８は、ＴｗｏＴｒｅｅアルゴリズムの例を示す図である。
ＴｗｏＴｒｅｅアルゴリズムでは、ルート以外のサーバの間で通信手順が異なる２つの部分木を生成し、２つの部分木とルートとを結合してＴｗｏＴｒｅｅを生成する。一方の部分木は、例えば、他方の部分木のランクを１つだけ巡回シフトすることで生成できる。ただし、巡回シフト以外の方法で他方の部分木を生成してもよい。
【００９４】
２つの部分木に従った通信は並列に実行される。データ集合全体が２つに分割され、一方のデータ部分集合が一方の部分木に従って転送され、他方のデータ部分集合が他方の部分木に従って転送される。ＴｗｏＴｒｅｅアルゴリズムは、Ｔｒｅｅアルゴリズムでは空いていたリンクの通信帯域を活用することでコレクティブ通信の時間を短縮することを目的としている。ここで、ＴｗｏＴｒｅｅの場合、単純にＴｗｏＴｒｅｅのエッジの左側の通信と右側の通信を異なるフェーズに振り分けると、同じフェーズの中で１つのサーバがブロックの送信または受信を複数実行する状況が発生することがある。これを解決するため、カラーリングと呼ばれる通信スケジュールを設定する方法が上記の非特許文献などで提案されている。カラーリングによって、大部分のサーバは各フェーズで高々１つの送信と高々１つの受信を行うことができる。一方、同じフェーズの中で１つのサーバが異なる２つのサーバにデータを送信することはない。また、同じフェーズの中で１つのサーバが異なる２つのサーバからデータを受信することはない。
【００９５】
図８は、カラーリングの設定例を示している。エッジに付された番号がカラーである。同じカラーが付された通信は同じフェーズに分類される。よって、図８のＴｗｏＴｒｅｅからは、カラー０フェーズとカラー１フェーズが形成される。カラー０フェーズに属する複数の通信は並列に実行可能である。また、カラー１フェーズに属する複数の通信は並列に実行可能である。カラー０フェーズとカラー１フェーズとは交互に実行される。
【００９６】
ここでは、サーバ１０１がサーバ１０２と通信し、これと並列にサーバ１０７がサーバ１０６と通信し、これと並列にサーバ１０４がサーバ１０３と通信し、これと並列にサーバ１０６がサーバ１０７と通信する。サーバ１０３がサーバ１０２と通信し、これと並列にサーバ１０５がサーバ１０６と通信し、これと並列にサーバ１０２がサーバ１０３と通信し、これと並列にサーバ１０１がサーバ１０７と通信する。サーバ１０２がサーバ１０４と通信し、これと並列にサーバ１０３がサーバ１０５と通信する。サーバ１０６がサーバ１０４と通信し、これと並列にサーバ１０７がサーバ１０５と通信する。サーバ１０５がサーバ１００と通信する。サーバ１０４がサーバ１００と通信する。
【００９７】
Ｒｅｄｕｃｅ通信の場合、サーバ１０１の半分のデータをサーバ１０１がサーバ１０２に送信し、これと並列にサーバ１０７の半分のデータをサーバ１０７がサーバ１０６に送信する。更に、サーバ１０４の半分のデータをサーバ１０４がサーバ１０３に送信し、これと並列にサーバ１０６の半分のデータをサーバ１０６がサーバ１０７に送信する。
【００９８】
サーバ１０１，１０２，１０３の半分のデータのＲｅｄｕｃｔｉｏｎ結果をサーバ１０２がサーバ１０４に送信し、これと並列にサーバ１０２，１０３，１０４の半分のデータのＲｅｄｕｃｔｉｏｎ結果をサーバ１０３がサーバ１０５に送信する。また、サーバ１０５，１０６，１０７の半分のデータのＲｅｄｕｃｔｉｏｎ結果をサーバ１０６がサーバ１０４に送信し、これと並列にサーバ１０１，１０６，１０７の半分のデータのＲｅｄｕｃｔｉｏｎ結果をサーバ１０７がサーバ１０５に送信する。
【００９９】
サーバ１０１，１０２，１０３，１０４，１０５，１０６，１０７の半分のデータのＲｅｄｕｃｔｉｏｎ結果をサーバ１０５がサーバ１００に送信する。サーバ１０１，１０２，１０３，１０４，１０５，１０６，１０７の半分のデータのＲｅｄｕｃｔｉｏｎ結果をサーバ１０４がサーバ１００に送信する。
【０１００】
ブロードキャスト通信の場合、サーバ１００が半分のデータをコピーしてサーバ１０５に送信する。サーバ１００が半分のデータをコピーしてサーバ１０４に送信する。サーバ１０５が半分のデータをサーバ１０３に送信し、これと並列にサーバ１０４が半分のデータをサーバ１０２に送信する。また、サーバ１０５が半分のデータをサーバ１０７に送信し、これと並列にサーバ１０４が半分のデータをサーバ１０６に送信する。
【０１０１】
サーバ１０７が半分のデータをサーバ１０６に送信し、これと並列にサーバ１０３が半分のデータをサーバ１０４に送信する。更に、サーバ１０６が半分のデータをサーバ１０７に送信し、これと並列にサーバ１０２が半分のデータをサーバ１０１に送信する。また、サーバ１０７が半分のデータをサーバ１０１に送信し、これと並列にサーバ１０３が半分のデータをサーバ１０２に送信する。更に、サーバ１０６が半分のデータをサーバ１０５に送信し、これと並列にサーバ１０２が半分のデータをサーバ１０３に送信する。
【０１０２】
上記のデータ通信はパイプライン化できる。左部分木と右部分木それぞれについて、分割データを更に複数のブロックに分割してパイプライン方式で転送することができる。
図９は、ＴｗｏＴｒｅｅによるＲｅｄｕｃｅ通信の送受信関係の例を示す図である。
【０１０３】
Ｒｅｄｕｃｅ通信のカラー０フェーズは、サーバ１０１からサーバ１０２への送信と、サーバ１０２からサーバ１０４への送信と、サーバ１０７からサーバ１０６への送信と、サーバ１０５からサーバ１００への送信とを含む。また、カラー０フェーズは、サーバ１０３からサーバ１０５への送信と、サーバ１０４からサーバ１０３への送信と、サーバ１０６からサーバ１０７への送信とを含む。
【０１０４】
Ｒｅｄｕｃｅ通信のカラー１フェーズは、サーバ１０３からサーバ１０２への送信と、サーバ１０５からサーバ１０６への送信と、サーバ１０６からサーバ１０４への送信と、サーバ１０４からサーバ１００への送信とを含む。また、カラー１フェーズは、サーバ１０２からサーバ１０３への送信と、サーバ１０１からサーバ１０７への送信と、サーバ１０７からサーバ１０５への送信とを含む。
【０１０５】
例えば、１回目のカラー０フェーズにおいて、サーバ１０１，１０４，１０６，１０７がそれぞれ１番目のブロックを送信する。次に、１回目のカラー１フェーズにおいて、サーバ１０１，１０２，１０３，１０５がそれぞれ１番目のブロックを送信する。
【０１０６】
次に、２回目のカラー０フェーズにおいて、サーバ１０１，１０４，１０６，１０７がそれぞれ２番目のブロックを送信する。また、サーバ１０２，１０３が１番目のブロックのＲｅｄｕｃｔｉｏｎ結果を送信する。次に、２回目のカラー１フェーズにおいて、サーバ１０１，１０２，１０３，１０５がそれぞれ２番目のブロックを送信する。また、サーバ１０６，１０７が１番目のブロックのＲｅｄｕｃｔｉｏｎ結果を送信する。
【０１０７】
次に、３回目のカラー０フェーズにおいて、サーバ１０１，１０４，１０６，１０７がそれぞれ３番目のブロックを送信する。また、サーバ１０２，１０３が２番目のブロックのＲｅｄｕｃｔｉｏｎ結果を送信する。また、サーバ１０５が１番目のブロックのＲｅｄｕｃｔｉｏｎ結果を送信する。次に、３回目のカラー１フェーズにおいて、サーバ１０１，１０２，１０３，１０５がそれぞれ３番目のブロックを送信する。また、サーバ１０６，１０７が２番目のブロックのＲｅｄｕｃｔｉｏｎ結果を送信する。また、サーバ１０４が１番目のブロックのＲｅｄｕｃｔｉｏｎ結果を送信する。
【０１０８】
ただし、ＴｗｏＴｒｅｅアルゴリズムでは、Ｔｒｅｅアルゴリズムよりもデータ通信の並列度が増加する。よって、プロセスの配置状況によっては、データ通信が競合するリスクが高くなる。同じフェーズにおいて２つのデータ通信が同じリンクを同じ方向に使用する場合、データ通信が競合している（衝突している）と言える。データ通信が競合すると、パケットの送信待ちが発生する、１つのリンクの通信帯域が分割されるなどにより、通信遅延が発生して通信時間が長くなるおそれがある。以下、通信競合について説明する。
【０１０９】
図１０は、プロセスの第１の配置例を示す図である。
通信競合の例を説明するにあたり、３６個のサーバのうちの３２個のサーバに、ランク０からランク３１の３２個のプロセスを配置することを考える。
【０１１０】
ここでは、グループａのサーバ１００，１０１，１０２，１０３，１０４，１０５，１０６，１０７，１０８に、ランク０，１，２，３，４，５，６，７，８のプロセスが配置される。グループｂのサーバ１１０，１１１，１１２，１１３，１１４，１１５，１１６，１１７，１１８に、ランク９，１０，１１，１２，１３，１４，１５，１６，１７のプロセスが配置される。グループｃのサーバ１２０，１２１，１２２，１２３，１２４，１２５，１２６，１２７，１２８に、ランク１８，１９，２０，２１，２２，２３，２４，２５，２６のプロセスが配置される。グループｄのサーバ１３０，１３１，１３２，１３３，１３４に、ランク２７，２８，２９，３０，３１のプロセスが配置される。
【０１１１】
図１１は、ＴｗｏＴｒｅｅの生成例を示す図である。
ランク０からランク３１の３２個のプロセスの間でＴｗｏＴｒｅｅが生成される。
左部分木では、サーバ１０３，１０５，１１０，１１６，１１８，１２５，１３０，１３２とサーバ１０２，１０６，１１１，１１５，１２０，１２４，１２８，１３３の間でデータ通信が並列に行われる。サーバ１０１，１０７，１１２，１１４，１２１，１２３，１２７，１３４とサーバ１０２，１０６，１１１，１１５，１２０，１２４，１２８，１３３の間でデータ通信が並列に行われる。
【０１１２】
また、サーバ１０６，１１１，１２０，１３３とサーバ１０４，１１３，１２２，１３１の間でデータ通信が並列に行われる。サーバ１０２，１１５，１２４，１２８とサーバ１０４，１１３，１２２，１３１の間でデータ通信が並列に行われる。サーバ１０４，１３１とサーバ１０８，１２６の間でデータ通信が並列に行われる。サーバ１１３，１２２とサーバ１０８，１２６の間でデータ通信が並列に行われる。サーバ１２６とサーバ１１７の間でデータ通信が行われる。サーバ１０８とサーバ１１７の間でデータ通信が行われる。サーバ１１７とサーバ１００の間でデータ通信が行われる。
【０１１３】
右部分木では、サーバ１０２，１０８，１１３，１１５，１２２，１２４，１２８，１０１とサーバ１０３，１０７，１１２，１１６，１２１，１２５，１３０，１３４の間でデータ通信が並列に行われる。サーバ１０４，１０６，１１１，１１７，１２０，１２６，１３１，１３３とサーバ１０３，１０７，１１２，１１６，１２１，１２５，１３０，１３４の間でデータ通信が並列に行われる。
【０１１４】
また、サーバ１０７，１１２，１２１，１３４とサーバ１０５，１１４，１２３，１３２の間でデータ通信が並列に行われる。サーバ１０３，１１６，１２５，１３０とサーバ１０５，１１４，１２３，１３２の間でデータ通信が並列に行われる。サーバ１１４，１２３とサーバ１１０，１２７の間でデータ通信が並列に行われる。サーバ１０５，１３２とサーバ１１０，１２７の間でデータ通信が並列に行われる。サーバ１２７とサーバ１１８の間でデータ通信が行われる。サーバ１１０とサーバ１１８の間でデータ通信が行われる。サーバ１１８とサーバ１００の間でデータ通信が行われる。
【０１１５】
図１２は、Ｒｅｄｕｃｅ通信の競合例を示す図である。
上記の図１１のＴｗｏＴｒｅｅに従ってＲｅｄｕｃｅ通信を行った場合、第２の実施の形態の多層フルメッシュシステムでは通信競合が生じる。例えば、左部分木には、プロセス２４が配置されたサーバ１２６からプロセス１６が配置されたサーバ１１７へのデータ送信が規定される。一方、右部分木には、同じレベルで、プロセス２５が配置されたサーバ１２７からプロセス１７が配置されたサーバ１１８へのデータ送信が規定される。この２つのデータ通信は、Ｌｅａｆスイッチ２２２とＳｐｉｎｅスイッチ２４３とＬｅａｆスイッチ２１２を順に経由する通信経路を使用しており、通信競合が生じる。
【０１１６】
図１３は、プロセスの第２の配置例を示す図である。
ランク０からランク３１の３２個のプロセスを配置する別の例を考える。
ここでは、グループａのサーバ１００，１０１，１０２，１０３，１０４，１０５，１０６，１０７に、ランク０，１，２，３，４，５，６，７のプロセスが配置される。グループｂのサーバ１１０，１１１，１１２，１１３，１１４，１１５，１１６，１１７に、ランク８，９，１０，１１，１２，１３，１４，１５のプロセスが配置される。グループｃのサーバ１２０，１２１，１２２，１２３，１２４，１２５，１２６，１２７に、ランク１６，１７，１８，１９，２０，２１，２２，２３のプロセスが配置される。グループｄのサーバ１３０，１３１，１３２，１３３，１３４，１３５，１３６，１３７に、ランク２４，２５，２６，２７，２８，２９，３０，３１のプロセスが配置される。
【０１１７】
しかし、図１３のようにグループａ，ｂ，ｃ，ｄに均等にプロセスを配置しても、ＴｗｏＴｒｅｅに従ってＲｅｄｕｃｅ通信を行った場合には通信競合が生じる。例えば、左部分木には、プロセス２４が配置されたサーバ１３０からプロセス１６が配置されたサーバ１２０へのデータ送信が規定される。一方、右部分木には、同じレベルで、プロセス２５が配置されたサーバ１３１からプロセス１７が配置されたサーバ１２１へのデータ送信が規定される。この２つのデータ通信は、Ｌｅａｆスイッチ２３０とＳｐｉｎｅスイッチ２４５とＬｅａｆスイッチ２２０を順に経由する通信経路を使用しており、通信競合が生じる。
【０１１８】
そこで、第２の実施の形態の多層フルメッシュシステムは、通信競合が生じないようにコレクティブ通信の手順を規定する。具体的には、各グループから１つの代表プロセスを選択し、グループ毎に当該グループに属する複数のプロセスの間で代表プロセスをルートとするローカルＴｗｏＴｒｅｅを生成する。グループ内ではローカルＴｗｏＴｒｅｅに従ってデータが転送される。また、複数のグループに対応する複数の代表プロセスの間で、ローカルＴｗｏＴｒｅｅとは別にグローバルＴｗｏＴｒｅｅを生成する。グループ間ではグローバルＴｗｏＴｒｅｅに従ってデータが転送される。各グループの代表プロセスは、例えば、グループ内でランクが最小のプロセスである。ただし、代表プロセスはグループ毎に１つに決まればよく、他の選択基準を採用してもよい。
【０１１９】
Ｒｅｄｕｃｅ通信の場合、グループ内でローカルＴｗｏＴｒｅｅに従ってデータが代表プロセスに集約される。複数のグループのグループ内通信は並列に実行される。グループ内通信の後、グループ間でグローバルＴｗｏＴｒｅｅに従ってデータが１つのプロセスに集約される。ブロードキャスト通信の場合、１つのプロセスのデータがグローバルＴｗｏＴｒｅｅに従って各グループの代表プロセスにコピーされる。グループ間通信の後、グループ内でローカルＴｗｏＴｒｅｅに従って代表プロセスから他のプロセスにデータがコピーされる。複数のグループのグループ内通信は並列に実行される。以下、第２の実施の形態のコレクティブ通信の手順を説明する。
【０１２０】
図１４は、ローカルＴｗｏＴｒｅｅの生成例を示す図である。
ここでは、３２個のプロセスが図１３のように配置されているとする。３２個のプロセスは、グループａ，ｂ，ｃ，ｄに８個ずつ分配されている。そこで、グループａ，ｂ，ｃ，ｄに対応する４つのローカルＴｗｏＴｒｅｅが生成される。
【０１２１】
グループａのローカルＴｗｏＴｒｅｅでは、ランク０のプロセスが代表プロセスである。右部分木は、左部分木のランクを１つだけ巡回シフトしたものである。サーバ１０１，１０７がサーバ１０２，１０６と通信し、これと並列にサーバ１０４，１０６がサーバ１０３，１０７と通信する（カラー０フェーズの第１段）。サーバ１０３，１０５がサーバ１０２，１０６と通信し、これと並列にサーバ１０２，１０１がサーバ１０３，１０７と通信する（カラー１フェーズの第１段）。サーバ１０２がサーバ１０４と通信し、これと並列にサーバ１０３がサーバ１０５と通信する（カラー０フェーズの第２段）。サーバ１０６がサーバ１０４と通信し、これと並列にサーバ１０７がサーバ１０５と通信する（カラー１フェーズの第２段）。サーバ１０５がサーバ１００と通信する（カラー０フェーズの第３段）。サーバ１０４がサーバ１００と通信する（カラー１フェーズの第３段）。
【０１２２】
グループｂのローカルＴｗｏＴｒｅｅでは、ランク８のプロセスが代表プロセスである。右部分木は、左部分木のランクを１つだけ巡回シフトしたものである。サーバ１１１，１１７がサーバ１１２，１１６と通信し、これと並列にサーバ１１４，１１６がサーバ１１３，１１７と通信する（カラー０フェーズの第１段）。サーバ１１３，１１５がサーバ１１２，１１６と通信し、これと並列にサーバ１１２，１１１がサーバ１１３，１１７と通信する（カラー１フェーズの第１段）。サーバ１１２がサーバ１１４と通信し、これと並列にサーバ１１３がサーバ１１５と通信する（カラー０フェーズの第２段）。サーバ１１６がサーバ１１４と通信し、これと並列にサーバ１１７がサーバ１１５と通信する（カラー１フェーズの第２段）。サーバ１１５がサーバ１１０と通信する（カラー０フェーズの第３段）。サーバ１１４がサーバ１１０と通信する（カラー１フェーズの第３段）。
【０１２３】
グループｃのローカルＴｗｏＴｒｅｅでは、ランク１６のプロセスが代表プロセスである。右部分木は、左部分木のランクを１つだけ巡回シフトしたものである。サーバ１２１，１２７がサーバ１２２，１２６と通信し、これと並列にサーバ１２４，１２６がサーバ１２３，１２７と通信する（カラー０フェーズの第１段）。サーバ１２３，１２５がサーバ１２２，１２６と通信し、これと並列にサーバ１２２，１２１がサーバ１２３，１２７と通信する（カラー１フェーズの第１段）。サーバ１２２がサーバ１２４と通信し、これと並列にサーバ１２３がサーバ１２５と通信する（カラー０フェーズの第２段）。サーバ１２６がサーバ１２４と通信し、これと並列にサーバ１２７がサーバ１２５と通信する（カラー１フェーズの第２段）。サーバ１２５がサーバ１２０と通信する（カラー０フェーズの第３段）。サーバ１２４がサーバ１２０と通信する（カラー１フェーズの第３段）。
【０１２４】
グループｄのローカルＴｗｏＴｒｅｅでは、ランク２４のプロセスが代表プロセスである。右部分木は、左部分木のランクを１つだけ巡回シフトしたものである。サーバ１３１，１３７がサーバ１３２，１３６と通信し、これと並列にサーバ１３４，１３６がサーバ１３３，１３７と通信する（カラー０フェーズの第１段）。サーバ１３３，１３５がサーバ１３２，１３６と通信し、これと並列にサーバ１３２，１３１がサーバ１３３，１３７と通信する（カラー１フェーズの第１段）。サーバ１３２がサーバ１３４と通信し、これと並列にサーバ１３３がサーバ１３５と通信する（カラー０フェーズの第２段）。サーバ１３６がサーバ１３４と通信し、これと並列にサーバ１３７がサーバ１３５と通信する（カラー１フェーズの第２段）。サーバ１３５がサーバ１３０と通信する（カラー０フェーズの第３段）。サーバ１３４がサーバ１３０と通信する（カラー１フェーズの第３段）。
【０１２５】
Ｒｅｄｕｃｅ通信の場合、グループａでは、ローカルＴｗｏＴｒｅｅに従ってランク０，１，２，３，４，５，６，７のデータがサーバ１００に集約される。グループｂでは、ローカルＴｗｏＴｒｅｅに従ってランク８，９，１０，１１，１２，１３，１４，１５のデータがサーバ１１０に集約される。グループｃでは、ローカルＴｗｏＴｒｅｅに従ってランク１６，１７，１８，１９，２０，２１，２２，２３のデータがサーバ１２０に集約される。グループｄでは、ローカルＴｗｏＴｒｅｅに従ってランク２４，２５，２６，２７，２８，２９，３０，３１のデータがサーバ１３０に集約される。
【０１２６】
ブロードキャスト通信の場合、グローバルＴｗｏＴｒｅｅに基づくグループ間通信により、サーバ１００，１１０，１２０，１３０が同一データを保持することになる。グループａでは、ローカルＴｗｏＴｒｅｅに従ってサーバ１００から他のサーバにデータがコピーされる。グループｂでは、ローカルＴｗｏＴｒｅｅに従ってサーバ１１０から他のサーバにデータがコピーされる。グループｃでは、ローカルＴｗｏＴｒｅｅに従ってサーバ１２０から他のサーバにデータがコピーされる。グループｄでは、ローカルＴｗｏＴｒｅｅに従ってサーバ１３０から他のサーバにデータがコピーされる。
【０１２７】
Ｒｅｄｕｃｅ通信をパイプライン方式で行う場合、カラー０フェーズの第１段が１番目のブロックを送信している間、カラー０フェーズの第２段および第３段はデータ送信を行わない。カラー１フェーズの第１段が１番目のブロックを送信している間、カラー１フェーズの第２段および第３段はデータ送信を行わない。カラー０フェーズの第１段が２番目のブロックを送信している間、カラー０フェーズの第２段が１番目のブロックを転送し、カラー０フェーズの第３段はデータ送信を行わない。カラー１フェーズの第１段が２番目のブロックを送信している間、カラー１フェーズの第２段が１番目のブロックを転送し、カラー１フェーズの第３段はデータ送信を行わない。カラー０フェーズの第１段が３番目のブロックを送信している間、カラー０フェーズの第２段が２番目のブロックを転送し、カラー０フェーズの第３段が１番目のブロックを転送する。カラー１フェーズの第１段が３番目のブロックを送信している間、カラー１フェーズの第２段が２番目のブロックを転送し、カラー１フェーズの第３段が１番目のブロックを転送する。
【０１２８】
このようなグループ内通信では競合を回避可能である。これは、グループ内ネットワークがＦａｔＴｒｅｅトポロジに相当するためである。ＦａｔＴｒｅｅトポロジは、Ｔｒｅｅトポロジに含まれる上位の通信装置を多重化することで、異なる下位の通信装置の間の通信経路を多重化し、トラフィックの混雑を軽減するネットワークトポロジである。
【０１２９】
第２の実施の形態の多層フルメッシュシステムでは、３つのＬｅａｆスイッチそれぞれがもつＳｐｉｎｅスイッチ側のリンクは３本であり、サーバ側のリンクと同数である。また、１つのＬｅａｆスイッチから別の１つのＬｅａｆスイッチに到達する通信経路は３つある。３つのＬｅａｆスイッチと３つのＳｐｉｎｅスイッチの間には合計で９つの通信経路が存在することになり、３つのＬｅａｆスイッチに接続されたサーバと同数である。よって、１つのサーバに対してＬｅａｆスイッチとＳｐｉｎｅスイッチの間の１つの通信経路を割り当てれば、９つのサーバは競合なしにデータ通信を行うことができる。
【０１３０】
図１５は、グローバルＴｗｏＴｒｅｅの生成例を示す図である。
グループａ，ｂ，ｃ，ｄそれぞれのローカルＴｗｏＴｒｅｅに加えて、グループａ，ｂ，ｃ，ｄの代表プロセスであるランク０，８，１６，２４のプロセスの間でグローバルＴｗｏＴｒｅｅが生成される。ランク０のプロセスがグローバルＴｗｏＴｒｅｅのルートに相当する。右部分木は、左部分木のランクを巡回シフトしたものである。サーバ１３０がサーバ１２０と通信し、これと並列にサーバ１１０がサーバ１３０と通信する（カラー０フェーズの第１段）。サーバ１１０がサーバ１２０と通信し、これと並列にサーバ１２０がサーバ１３０と通信する（カラー１フェーズの第１段）。サーバ１２０がサーバ１００と通信する（カラー０フェーズの第２段）。サーバ１３０がサーバ１００と通信する（カラー１フェーズの第２段）。
【０１３１】
Ｒｅｄｕｃｅ通信の場合、ローカルＴｗｏＴｒｅｅに従ってサーバ１１０に集約されたランク８，９，１０，１１，１２，１３，１４，１５のデータがサーバ１００に転送される。また、ローカルＴｗｏＴｒｅｅに従ってサーバ１２０に集約されたランク１６，１７，１８，１９，２０，２１，２２，２３のデータがサーバ１００に転送される。また、ローカルＴｗｏＴｒｅｅに従ってサーバ１３０に集約されたランク２４，２５，２６，２７，２８，２９，３０，３１のデータがサーバ１００に転送される。ブロードキャスト通信の場合、サーバ１００がもつデータがサーバ１１０，１２０，１３０にコピーされる。
【０１３２】
全体のＲｅｄｕｃｅ通信は、ローカルＴｗｏＴｒｅｅのＲｅｄｕｃｅ通信の後に、グローバルＴｗｏＴｒｅｅのＲｅｄｕｃｅ通信を行うことで実現される。全体のブロードキャスト通信は、グローバルＴｗｏＴｒｅｅのブロードキャスト通信の後に、ローカルＴｗｏＴｒｅｅのブロードキャスト通信を行うことで実現される。全体のＡｌｌｒｅｄｕｃｅ通信は、ローカルＴｗｏＴｒｅｅのＲｅｄｕｃｅ通信、グローバルＴｗｏＴｒｅｅのＲｅｄｕｃｅ通信、グローバルＴｗｏＴｒｅｅのブロードキャスト通信およびローカルＴｗｏＴｒｅｅのブロードキャスト通信を順に行うことで実現される。これは、ローカルＴｗｏＴｒｅｅのＲｅｄｕｃｅ通信、グローバルＴｗｏＴｒｅｅのＡｌｌｒｅｄｕｃｅ通信およびローカルＴｗｏＴｒｅｅのブロードキャスト通信を順に行うものであるとも言える。
【０１３３】
このように、各グループから代表プロセスを選択し、代表プロセスが配置されたサーバのみが通信を行うようにすると、グループ間通信において競合が生じない。これは、異なるグループに属するＬｅａｆスイッチの間にはフルメッシュの通信経路が存在するためである。フルメッシュの通信経路が存在するため、例えば、グループｂからグループｃへのデータ送信経路は、グループｃからグループｄへのデータ送信経路とリンクを共有しない。代表プロセスの配置されたサーバが異なる層に跨がっていても同様である。
【０１３４】
次に、サーバとジョブスケジューラの機能について説明する。
図１６は、サーバとジョブスケジューラの機能例を示す図である。
サーバ１００は、通信手順決定部１７１、通信手順記憶部１７２およびコレクティブ通信実行部１７３を有する。通信手順記憶部１７２は、例えば、ＲＡＭ１５２またはＨＤＤ１５３の記憶領域を用いて実現される。通信手順決定部１７１およびコレクティブ通信実行部１７３は、例えば、ＣＰＵ１５１が実行するプログラムを用いて実現される。他のサーバもサーバ１００と同様のモジュールを有する。
【０１３５】
通信手順決定部１７１は、ジョブスケジューラ３００から、ジョブに属する複数のプロセスの配置に関するプロセス配置情報を受信する。プロセス配置情報は、グループとプロセスの対応関係や、サーバ１００に配置されたプロセスのＴｗｏＴｒｅｅ上の位置を、通信手順決定部１７１が把握するのに十分な情報であればよい。プロセス配置情報に含めるべき情報は、プロセス配置アルゴリズムについて、通信手順決定部１７１とジョブスケジューラ３００とが事前にどの程度合意しているかにも依存する。
【０１３６】
例えば、プロセス配置情報は、プロセスのランクとプロセスが配置されたサーバのノードＩＤとを対応付けた情報を含んでもよい。また、プロセス配置情報は、ジョブに使用するグループの数、グループ毎のプロセス数、全体のプロセス数などを含んでもよい。また、プロセス配置情報は、サーバ１００に配置されたプロセスが属するグループの中におけるランクのオフセットを含んでもよい。
【０１３７】
通信手順決定部１７１は、受信したプロセス配置情報に基づいて、コレクティブ通信における複数のプロセスの間の通信手順を決定する。Ｒｅｄｕｃｅ通信の手順とブロードキャスト通信の手順は逆の関係にあり、Ａｌｌｒｅｄｕｃｅ通信はＲｅｄｕｃｅ通信とブロードキャスト通信の組み合わせであるため、Ｒｅｄｕｃｅ通信とブロードキャスト通信の何れか一方の手順を決定すればよい。第２の実施の形態では、通信手順決定部１７１は、Ｒｅｄｕｃｅ通信の手順を決定する。通信手順決定部１７１は、決定した通信手順を示す通信手順情報を生成し、通信手順記憶部１７２に格納する。
【０１３８】
コレクティブ通信の手順は、ＭＰＩライブラリなどの通信ライブラリの初期化時に決定される。通信ライブラリを使用するユーザプログラムが複数のサーバに配置され、それらサーバでユーザプログラムが起動されると、通信ライブラリが初期化される。初期化時にはサーバ間で通信が行われることがある。プロセス配置情報の少なくとも一部を、ジョブスケジューラ３００から受信する代わりに、サーバ間の通信によって収集してもよい。また、コレクティブ通信の手順を、通信ライブラリの初期化時に行う代わりに、ユーザプログラムからコレクティブ通信を最初に要求されたときに行ってもよい。
【０１３９】
ここで決定される通信手順は、ランク０のプロセスを基点とするものである。ランク０以外の特定のプロセスがＲｅｄｕｃｅ結果を使用する場合、ランク０のプロセスからデータを取得すればよい。また、ランク０以外のプロセスがもつデータをブロードキャストする場合、ランク０のプロセスにデータを渡せばよい。ただし、ランク０以外のプロセスを基点とするコレクティブ通信の手順を決定することも可能である。また、通信手順決定部１７１が生成する通信手順情報は、ジョブに含まれる全てのプロセスの間の通信手順を示す。複数のサーバは、同一のプロセス配置情報と同一のコレクティブ通信アルゴリズムを使用すれば、同一の通信手順情報を生成することになる。ただし、生成する通信手順情報を、サーバ１００の通信手順のみを示すようにしてもよい。
【０１４０】
通信手順記憶部１７２は、通信手順決定部１７１が生成した通信手順情報を記憶する。通信手順情報は、コレクティブ通信の各フェーズにおいて、データを送信する際の送信先プロセスのランクと、データを受信する際の送信元プロセスのランクとを示す。
【０１４１】
コレクティブ通信実行部１７３は、コレクティブ通信を開始する命令をユーザプログラムが呼び出すと、通信手順記憶部１７２に記憶された通信手順情報に基づいてコレクティブ通信を実行する。コレクティブ通信実行部１７３は、通信手順情報が示す複数のフェーズを１つずつ実行する。あるフェーズで送信元プロセスが指定されている場合、コレクティブ通信実行部１７３は、送信元プロセスからデータを受信する。あるフェーズで送信先プロセスが指定されている場合、コレクティブ通信実行部１７３は、保持しているデータをコピーして送信先プロセスに送信する。コレクティブ通信をパイプライン方式で行う場合、コレクティブ通信実行部１７３は、全てのブロックの転送が完了するまで、複数のフェーズ（例えば、カラー０フェーズとカラー１フェーズ）を交互に実行する。
【０１４２】
データ送信では、コレクティブ通信実行部１７３は、送信先プロセスが配置されたサーバのアドレスとデータ本体とを含むパケットを生成し、ＨＣＡ１５７を介してＬｅａｆスイッチ２００にパケットを出力する。各プロセスが配置されたサーバのアドレスは、通信ライブラリの初期化時に把握される。
【０１４３】
第２の実施の形態では、コレクティブ通信はＴｗｏＴｒｅｅアルゴリズムに従って実行される。そこで、コレクティブ通信実行部１７３は、データ集合を２つに分割して管理する。２つのデータ部分集合のサイズは、できる限り均等であることが好ましい。データ集合が複数のレコードを含む場合、それら複数のレコードが２つに分割される。コレクティブ通信をパイプライン方式で行う場合、２つの部分木に対応する２つのデータ部分集合がそれぞれ複数のブロックに更に分割される。コレクティブ通信実行部１７３は、各ブロックにブロック番号を付して複数のブロックを管理するようにしてもよい。
【０１４４】
Ｒｅｄｕｃｅ通信の場合、コレクティブ通信実行部１７３は、グループ内通信およびグループ間通信のフェーズ毎に、高々１つのサーバからデータを受信し、高々１つのサーバにデータを送信する。一方の部分木に従って集約されるデータはデータ集合の前半に対応し、他方の部分木に従って集約されるデータはデータ集合の後半に対応する。ブロードキャスト通信の場合、コレクティブ通信実行部１７３は、グループ内通信およびグループ間通信のフェーズ毎に、高々１つのサーバからデータを受信し、高々１つのサーバにデータを送信する。一方の部分木に従ってコピーされるデータはデータ集合の前半に対応し、他方の部分木に従ってコピーされるデータはデータ集合の後半に対応する。
【０１４５】
ジョブスケジューラ３００は、プロセス配置決定部３７１を有する。プロセス配置決定部３７１は、例えば、ＣＰＵが実行するプログラムを用いて実現される。
プロセス配置決定部３７１は、ユーザからジョブ要求を受け付け、受け付けたジョブ要求に応じてジョブに含まれる複数のプロセスの配置を決定する。起動するプロセスの数は、ユーザからのジョブ要求で指定される。第２の実施の形態では、プロセス配置決定部３７１は、同一のジョブに属する複数のプロセスが、できる限り２以上のグループに均等に配置されるようにプロセス配置を決定する。プロセス配置決定部３７１は、決定したプロセス配置に関するプロセス配置情報を、ジョブで使用するサーバに送信する。
【０１４６】
図１７は、通信手順テーブルの例を示す図である。
送信手順テーブル１７４，１７５および受信手順テーブル１７６，１７７は、通信手順決定部１７１により生成されて通信手順記憶部１７２に格納される。送信手順テーブル１７４および受信手順テーブル１７６は、ローカルＴｗｏＴｒｅｅに基づくＲｅｄｕｃｅ通信の手順を示している。送信手順テーブル１７５および受信手順テーブル１７７は、グローバルＴｗｏＴｒｅｅに基づくＲｅｄｕｃｅ通信の手順を示している。
【０１４７】
送信手順テーブル１７４は、複数のランクそれぞれに対応付けて、カラー０フェーズで当該ランクのプロセスがデータを送信する際の送信先プロセスのランクと、カラー１フェーズで当該ランクのプロセスがデータを送信する際の送信先プロセスのランクとを含む。送信先プロセスが存在しない場合、すなわち、当該ランクのプロセスがデータを送信しない場合、「−１」などランクに使用されない所定の数値が登録される。例えば、カラー０フェーズでランク１のプロセスがランク２のプロセスにデータを送信し、カラー１フェーズでランク１のプロセスがランク７のプロセスにデータを送信することが登録される。ただし、送信すべきデータが存在しない場合は実際にはデータ通信が行われない。
【０１４８】
送信手順テーブル１７５は、複数の代表プロセスのランクそれぞれに対応付けて、カラー０フェーズの送信先プロセスのランクと、カラー１フェーズの送信先プロセスのランクとを含む。例えば、カラー０フェーズでランク８のプロセスがランク２４のプロセスにデータを送信し、カラー１フェーズでランク８のプロセスがランク１６のプロセスにデータを送信することが登録される。送信手順テーブル１７４がグループ内通信を表しているのに対し、送信手順テーブル１７５はグループ間通信を表している。
【０１４９】
受信手順テーブル１７６は、複数のランクそれぞれに対応付けて、カラー０フェーズで当該ランクのプロセスがデータを受信する際の送信元プロセスのランクと、カラー１フェーズで当該ランクのプロセスがデータを受信する際の送信元プロセスのランクとを含む。送信元プロセスが存在しない場合、すなわち、当該ランクのプロセスがデータを受信しない場合、「−１」などランクに使用されない所定の数値が登録される。例えば、カラー０フェーズでランク０のプロセスがランク５のプロセスからデータを受信し、カラー１フェーズでランク０のプロセスがランク４のプロセスからデータを受信することが登録される。ただし、受信すべきデータが存在しない場合は実際にはデータ通信が行われない。
【０１５０】
受信手順テーブル１７７は、複数の代表プロセスのランクそれぞれに対応付けて、カラー０フェーズの送信元プロセスのランクと、カラー１フェーズの送信元プロセスのランクとを含む。例えば、カラー０フェーズでランク０のプロセスがランク１６のプロセスからデータを受信し、カラー１フェーズでランク０のプロセスがランク２４のプロセスからデータを受信することが登録される。受信手順テーブル１７６がグループ内通信を表しているのに対し、受信手順テーブル１７７はグループ間通信を表している。
【０１５１】
Ｒｅｄｕｃｅ通信を行う場合、各サーバは、送信手順テーブル１７４から相手ランクを読み出してデータ送信を制御し、受信手順テーブル１７６から相手ランクを読み出してデータ受信を制御する。その後、配置されたプロセスのランクが送信手順テーブル１７５および受信手順テーブル１７７に登録されているサーバは、送信手順テーブル１７５から相手ランクを読み出してデータ送信を制御し、受信手順テーブル１７７から相手ランクを読み出してデータ受信を制御する。パイプライン方式の場合、各サーバは、カラー０フェーズとカラー１フェーズを交互に実行することになる。例えば、カラー０フェーズから先に実行される。ただし、カラー１フェーズから先に実行してもよい。
【０１５２】
ブロードキャスト通信を行う場合、送信と受信の役割がＲｅｄｕｃｅ通信とは逆になる。よって、送信手順テーブル１７４，１７５の送信先プロセスがブロードキャスト通信における送信元プロセスと解釈され、受信手順テーブル１７６，１７７の送信元プロセスがブロードキャスト通信における送信先プロセスと解釈される。
【０１５３】
そこで、配置されたプロセスのランクが送信手順テーブル１７５および受信手順テーブル１７７に登録されているサーバは、受信手順テーブル１７７から相手ランクを読み出してデータ送信を制御し、送信手順テーブル１７５から相手ランクを読み出してデータ受信を制御する。その後、各サーバは、受信手順テーブル１７６から相手ランクを読み出してデータ送信を制御し、送信手順テーブル１７４から相手ランクを読み出してデータ受信を制御する。パイプライン方式の場合、各サーバは、カラー０フェーズとカラー１フェーズを交互に実行することになる。例えば、カラー０フェーズから先に実行される。ただし、カラー１フェーズから先に実行してもよい。
【０１５４】
次に、サーバ１００の処理手順について説明する。
図１８は、通信手順決定の処理例を示すフローチャートである。
（Ｓ３０）プロセス配置決定部３７１は、ジョブに対して使用するグループの数を決定する。具体的には、プロセス配置決定部３７１は、ジョブに含まれるプロセスの数（全プロセス数）を、グループａ，ｂ，ｃ，ｄそれぞれに含まれるサーバの数（グループノード数）で割ることで、使用するグループの数（グループ数）を算出する。ここでは小数点以下は切り上げる。例えば、第２の実施の形態ではグループノード数が９であるため、全プロセス数が３２である場合、グループ数は３２÷９＝４と算出される。
【０１５５】
（Ｓ３１）プロセス配置決定部３７１は、全プロセス数を、ステップＳ３０で算出したグループ数で割ることで、各グループに配置されるプロセスの数（ローカルプロセス数）を算出する。例えば、全プロセス数が３２である場合、３２÷４＝８と算出される。
【０１５６】
プロセス配置決定部３７１は、ステップＳ３０で算出した個数のグループそれぞれに対して、グループ内ではランクが連続するようにローカルプロセス数だけプロセスを配置する。例えば、グループａにランク０，１，２，３，４，５，６，７が割り当てられる。グループｂにランク８，９，１０，１１，１２，１３，１４，１５が割り当てられる。グループｃにランク１６，１７，１８，１９，２０，２１，２２，２３が割り当てられる。グループｄにランク２４，２５，２６，２７，２８，２９，３０，３１が割り当てられる。
【０１５７】
（Ｓ３２）プロセス配置決定部３７１は、プロセスが配置されるサーバそれぞれに対して、決定したプロセス配置に関するプロセス配置情報を通知する。なお、プロセス配置情報は、グループ数、ローカルプロセス数、全体のプロセス数などを含んでもよい。また、各サーバとジョブスケジューラ３００とがプロセス配置アルゴリズムについて事前に合意している場合、ステップＳ３０，Ｓ３１をサーバ１００で実行してもよい。
【０１５８】
（Ｓ３３）通信手順決定部１７１は、ランク０のプロセスを全体のルートに設定する。
（Ｓ３４）通信手順決定部１７１は、ランク０からランクがローカルプロセス数−１までのプロセスの間で、ローカルＴｗｏＴｒｅｅを生成する。具体的には、通信手順決定部１７１は、ランク１からランクがローカルプロセス数−１までのプロセスの間で、ランク番号順にインオーダで配置した二分木になるように左部分木を生成する。通信手順決定部１７１は、左部分木のランクを１つだけ巡回シフトすることで右部分木を生成する。通信手順決定部１７１は、左部分木と右部分木をランク０のプロセスに連結することでローカルＴｗｏＴｒｅｅとする。これにより、例えば、図１４の１番目のローカルＴｗｏＴｒｅｅが生成される。
【０１５９】
（Ｓ３５）通信手順決定部１７１は、グループ数が１であるか、すなわち、ジョブに含まれる全てのプロセスが単一グループに閉じているか判断する。グループ数が１である場合はステップＳ３９に進み、グループ数が２以上である場合はステップＳ３６に進む。なお、グループ数が１である場合はグローバルＴｗｏＴｒｅｅは生成されない。
【０１６０】
（Ｓ３６）通信手順決定部１７１は、ステップＳ３４で生成したローカルＴｗｏＴｒｅｅのランクに所定のオフセットを加えて、残りのグループのローカルＴｗｏＴｒｅｅを生成する。オフセットは、ローカルプロセス数の整数倍である。例えば、図１４の１番目のローカルＴｗｏＴｒｅｅのランクに８を加えることで、２番目のローカルＴｗｏＴｒｅｅが生成される。また、１番目のローカルＴｗｏＴｒｅｅのランクに１６を加えることで、３番目のローカルＴｗｏＴｒｅｅが生成される。また、１番目のローカルＴｗｏＴｒｅｅのランクに２４を加えることで、４番目のローカルＴｗｏＴｒｅｅが生成される。
【０１６１】
（Ｓ３７）通信手順決定部１７１は、ステップＳ３４，Ｓ３６で生成されたローカルＴｗｏＴｒｅｅそれぞれのルートに位置するプロセスを代表プロセスとして選択する。
（Ｓ３８）通信手順決定部１７１は、ステップＳ３７で選択した複数の代表プロセスの間でグローバルＴｗｏＴｒｅｅを生成する。具体的には、通信手順決定部１７１は、複数の代表プロセスの間で、ランク番号順にインオーダで配置した二分木になるように左部分木を生成する。通信手順決定部１７１は、左部分木のランクを巡回シフトすることで右部分木を生成する。この巡回シフトでは、最大ランク以外のプロセスについては、ランクを代表プロセスの中で１つ大きいランクに変更し、最大ランクのプロセスについては、ランクを代表プロセスの中でランク０の次に小さいランクに変更する。通信手順決定部１７１は、左部分木と右部分木をランク０のプロセスに連結することでグローバルＴｗｏＴｒｅｅとする。これにより、例えば、図１５のグローバルＴｗｏＴｒｅｅが生成される。
【０１６２】
（Ｓ３９）通信手順決定部１７１は、ステップＳ３４，Ｓ３６で生成されたローカルＴｗｏＴｒｅｅに従って、グループ内のＲｅｄｕｃｅ通信の手順を決定する。また、グローバルＴｗｏＴｒｅｅが生成されている場合、通信手順決定部１７１は、ステップＳ３８で生成されたグローバルＴｗｏＴｒｅｅに従って、グループ間のＲｅｄｕｃｅ通信の手順を決定する。通信手順決定部１７１は、決定した通信手順に基づいて、送信手順テーブル１７４，１７５および受信手順テーブル１７６，１７７を生成し、通信手順記憶部１７２に格納する。
【０１６３】
図１９は、コレクティブ通信の処理例を示すフローチャートである。
（Ｓ４０）コレクティブ通信実行部１７３は、ユーザプログラムからコレクティブ通信が指示されると、送信手順テーブル１７４，１７５と受信手順テーブル１７６，１７７を取得する。ユーザプログラムからのコレクティブ通信の指示は、Ｒｅｄｕｃｅ通信の指示、ブロードキャスト通信の指示またはＡｌｌｒｅｄｕｃｅ通信の指示である。
【０１６４】
（Ｓ４１）コレクティブ通信実行部１７３は、次のフェーズを選択する。例えば、コレクティブ通信実行部１７３は、カラー０フェーズとカラー１フェーズを交互に選択する。初回は、例えば、カラー０フェーズが選択される。
【０１６５】
（Ｓ４２）コレクティブ通信実行部１７３は、データ受信に関して、ステップＳ４１で選択したフェーズとサーバ１００に配置されたプロセスのランクとの組に対応する数値を読み出す。Ｒｅｄｕｃｅ通信の場合、コレクティブ通信実行部１７３は、最初は受信手順テーブル１７６から数値を読み出し、グループ内通信が完了した後は受信手順テーブル１７７から数値を読み出す。ブロードキャスト通信の場合、コレクティブ通信実行部１７３は、最初は送信手順テーブル１７５から数値を読み出し、グループ間通信が完了した後は送信手順テーブル１７４から数値を読み出す。コレクティブ通信実行部１７３は、読み出した数値が送信元ランクを表しているか、すなわち、該当する送信元ランクが登録されているか判断する。読み出した数値が「−１」である場合、送信元ランクが登録されていないことになる。送信元ランクが登録されている場合はステップＳ４３に進み、送信元ランクが登録されていない場合はステップＳ４４に進む。
【０１６６】
（Ｓ４３）コレクティブ通信実行部１７３は、送信元ランクが示す相手プロセスからデータを受信できるように待機し、データを受信する。例えば、コレクティブ通信実行部１７３は、相手プロセスに対応する受信バッファを定期的に確認し、受信バッファにデータが到着している場合には到着したデータを取り出す。データ受信は、以下のステップＳ４４，Ｓ４５と並列に実行でき、ステップＳ４６までに実行されればよい。コレクティブ通信実行部１７３は、受信したデータを保持しておく。
【０１６７】
（Ｓ４４）コレクティブ通信実行部１７３は、データ送信に関して、ステップＳ４１で選択したフェーズとサーバ１００に配置されたプロセスのランクとの組に対応する数値を読み出す。Ｒｅｄｕｃｅ通信の場合、コレクティブ通信実行部１７３は、最初は送信手順テーブル１７４から数値を読み出し、グループ内通信が完了した後は送信手順テーブル１７５から数値を読み出す。ブロードキャスト通信の場合、コレクティブ通信実行部１７３は、受信手順テーブル１７７から数値を読み出し、グループ間通信が完了した後は受信手順テーブル１７６から数値を読み出す。コレクティブ通信実行部１７３は、読み出した数値が送信先ランクを表しているか、すなわち、該当する送信先ランクが登録されているか判断する。読み出した数値が「−１」である場合、送信先ランクが登録されていないことになる。送信先ランクが登録されている場合はステップＳ４５に進み、送信先ランクが登録されていない場合はステップＳ４６に進む。
【０１６８】
（Ｓ４５）コレクティブ通信実行部１７３は、送信先ランクが示す相手プロセスにデータを送信する。送信データはパケットに分割され、各パケットには相手プロセスが配置されたサーバのアドレスが付加される。アドレスはノードＩＤを兼ねることがある。データ集合は、左部分木に対応するデータ部分集合と右部分木に対応するデータ部分集合の２つに分割されて管理される。パイプライン方式の場合、２つのデータ部分集合それぞれが複数のブロックに分割されて管理される。送信するデータは、サーバ１００が生成したデータを含むこともあるし、他のサーバから受信したデータを含むこともある。
【０１６９】
（Ｓ４６）コレクティブ通信実行部１７３は、サーバ１００が転送すべきデータの全ての転送が完了したか判断する。全てのデータの転送が完了した場合はコレクティブ通信を終了し、未転送のデータがある場合はステップＳ４１に戻る。
【０１７０】
なお、第２の実施の形態では、接続されているＳｐｉｎｅスイッチが同一である複数のＬｅａｆスイッチおよびそれら複数のＬｅａｆスイッチの配下のサーバから、１つのグループを形成した。これに対して、１つのＬｅａｆスイッチおよび当該Ｌｅａｆスイッチの配下のサーバから、１つのグループを形成することもできる。
【０１７１】
この場合、Ｌｅａｆスイッチ毎に１つの代表プロセスが選択される。グループ間通信については、複数のＬｅａｆスイッチに対応する複数の代表プロセスの間でグローバルＴｗｏＴｒｅｅが形成される。グループ内通信については、各Ｌｅａｆスイッチの配下にある複数のプロセスの間でローカルＴｗｏＴｒｅｅが形成される。例えば、図２，３の多層フルメッシュシステムでは１２個のグループが形成される。このようにサーバをグループ化しても、複数のＬｅａｆスイッチの間のグループ間通信では通信競合が生じない。また、Ｌｅａｆスイッチ配下のグループ内通信でも通信競合が生じない。
【０１７２】
また、第２の実施の形態では二段階でコレクティブ通信を行ったが、グループを階層化して三段階でコレクティブ通信を行ってもよい。接続されているＳｐｉｎｅスイッチが同一である複数のＬｅａｆスイッチおよびそれら複数のＬｅａｆスイッチの配下のサーバから、１つの大グループを形成する。また、１つのＬｅａｆスイッチおよび当該Ｌｅａｆスイッチの配下のサーバから、１つの小グループを形成する。
【０１７３】
この場合、大グループ毎に上位代表プロセスが選択され、更にＬｅａｆスイッチ毎に下位代表プロセスが選択される。第１階層として、複数の大グループに対応する複数の上位代表プロセスの間で上位グローバルＴｗｏＴｒｅｅが形成される。第２階層として、複数のＬｅａｆスイッチに対応する複数の下位代表プロセスの間で下位グローバルＴｗｏＴｒｅｅが形成される。第３階層として、各Ｌｅａｆスイッチの配下にある複数のプロセスの間でローカルＴｗｏＴｒｅｅが形成される。例えば、図２，３の多層フルメッシュシステムでは、４個の大グループと１２個の小グループが形成される。サーバが多い場合、このようにＬｅａｆスイッチ単位でグループを形成することも有用である。
【０１７４】
第２の実施の形態の多層フルメッシュシステムによれば、多層フルメッシュトポロジが採用される。多層フルメッシュトポロジでは、上位の通信装置が冗長化され、下位の通信装置の間の通信経路が冗長化される。よって、トラフィックの混雑を抑制することができる。また、単純なＦａｔＴｒｅｅトポロジと比べて通信装置の個数を削減でき、システム構築コストを削減できる。また、第２の実施の形態の多層フルメッシュシステムによれば、ＴｗｏＴｒｅｅに従い、リンクの空き通信帯域が減少するようにコレクティブ通信が実行される。よって、コレクティブ通信を高速に実行できる。
【０１７５】
また、接続されているＳｐｉｎｅスイッチの集合が同一であるＬｅａｆスイッチおよびその配下のノードがグループ化され、各グループから代表ノードが選択される。そして、コレクティブ通信が、代表ノード間のデータ送信と代表ノードを基点とするグループ内のデータ送信の二段階に分離されて実行される。ここで、複数のグループの間にはフルメッシュの通信経路が存在するため、通信に参加するノードがグループ毎に１つであれば、複数のノードが並列通信を行っても通信競合は生じない。また、グループ内のネットワークトポロジはＦａｔＴｒｅｅに相当するため、グループ内のノード同士の閉じた通信であれば、複数のノードが並列通信を行っても通信競合を回避できる。よって、通信競合を抑制でき、通信遅延を抑制してコレクティブ通信の所要時間を短縮できる。
【符号の説明】
【０１７６】
１０  情報処理装置
１１，１２，１３，１４，１５，１６，１７，１８  ノード
２１，２２，２３，２４，２５，２６，２７，２８  中継装置
３１，３２  グループ
３３，３４  ノード間通信
３５，３６，３７，３８  ツリー
【図１】
2020178181.tif 000003
【図２】
2020178181.tif 000004
【図３】
2020178181.tif 000005
【図４】
2020178181.tif 000006
【図５】
2020178181.tif 000007
【図６】
2020178181.tif 000008
【図７】
2020178181.tif 000009
【図８】
2020178181.tif 000010
【図９】
2020178181.tif 000011
【図１０】
2020178181.tif 000012
【図１１】
2020178181.tif 000013
【図１２】
2020178181.tif 000014
【図１３】
2020178181.tif 000015
【図１４】
2020178181.tif 000016
【図１５】
2020178181.tif 000017
【図１６】
2020178181.tif 000018
【図１７】
2020178181.tif 000019
【図１８】
2020178181.tif 000020
【図１９】
2020178181.tif 000021