(57)【特許請求の範囲】
【請求項１】
複数の計算機と、前記複数の計算機を相互に接続する相互結合網と、を含み、前記複数の計算機が前記相互結合網を介して全対全通信を行う並列計算機であって、
前記複数の計算機は、前記計算機の数よりも小さい数のグループにグルーピングされており、
前記相互結合網は、マルチキャストパケットを受信すると、当該マルチキャストパケットを、当該マルチキャストパケットにて指定された送信先に送信し、
前記計算機は、
全対全通信時に前記グループ単位で当該グループに属する計算機に送信される特定データと、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す情報と、を記憶する記憶手段と、
全対全通信時に、前記グループ単位で当該グループに属する計算機に送信される特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが搭載され当該グループが送信先として指定されたマルチキャストパケットを生成し、当該マルチキャストパケットを前記相互結合網に送信する送信手段と、
前記相互結合網からマルチキャストパケットを受信すると、前記情報を参照して、当該マルチキャストパケットから自計算機宛のデータを抽出する抽出手段と、を含む、並列計算機。
【請求項２】
請求項１に記載の並列計算機において、
前記記憶手段は、さらに、前記特定データのうちの、送信先のグループに属するそれぞれの計算機宛のデータ毎の、自計算機のメモリにおけるアドレスからなるリストであり、当該リスト内でのアドレスの記憶順序により、前記アドレスから読み出したデータのマルチキャストパケット内における搭載順序が定まるものである、前記グループ単位毎の搭載順序情報を記憶し、
前記送信手段は、全対全通信時に、前記特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが前記搭載順序情報にて示された搭載順序に従って搭載され当該グループが送信先として指定されたマルチキャストパケットを生成する、並列計算機。
【請求項３】
請求項１または２に記載の並列計算機において、
前記グループ単位で当該グループに属する計算機にて計算機クラスタが構成される、並列計算機。
【請求項４】
請求項１から３のいずれか１項に記載の並列計算機において、
前記計算機は、前記グループに属する計算機の数が、全対全通信にて通信されるデータの量が多くなるほど少なくなるように、前記複数の計算機を前記グループにグルーピングするグルーピング手段を、さらに含む、並列計算機。
【請求項５】
マルチキャストパケットを受信すると当該マルチキャストパケットを当該マルチキャストパケットにて指定された送信先に送信する相互結合網を介して全対全通信を行う複数の計算機の１つとして使用され、前記複数の計算機が前記計算機の数よりも小さい数のグループにグルーピングされている、計算機であって、
全対全通信時に前記グループ単位で当該グループに属する計算機に送信される特定データと、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す情報と、を記憶する記憶手段と、
全対全通信時に、前記グループ単位で当該グループに属する計算機に送信される特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが搭載され当該グループが送信先として指定されたマルチキャストパケットを生成し、当該マルチキャストパケットを前記相互結合網に送信する送信手段と、
前記相互結合網からマルチキャストパケットを受信すると、前記情報を参照して、当該マルチキャストパケットから自計算機宛のデータを抽出する抽出手段と、を含む計算機。
【請求項６】
請求項５に記載の計算機において、
前記記憶手段は、さらに、前記特定データのうちの、送信先のグループに属するそれぞれの計算機宛のデータ毎の、自計算機のメモリにおけるアドレスからなるリストであり、当該リスト内でのアドレスの記憶順序により、前記アドレスから読み出したデータのマルチキャストパケット内における搭載順序が定まるものである、前記グループ単位毎の搭載順序情報を記憶し、
前記送信手段は、全対全通信時に、前記特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが前記搭載順序情報にて示された搭載順序に従って搭載され当該グループが送信先として指定されたマルチキャストパケットを生成する、計算機。
【請求項７】
請求項５または６に記載の計算機において、
前記グループ単位で当該グループに属する計算機にて計算機クラスタが構成される、計算機。
【請求項８】
請求項５から７のいずれか１項に記載の計算機において、
前記計算機は、前記グループに属する計算機の数が、全対全通信にて通信されるデータの量が多くなるほど少なくなるように、前記複数の計算機を前記グループにグルーピングするグルーピング手段を、さらに含む計算機。
【請求項９】
複数の計算機と、前記複数の計算機を相互に接続する相互結合網と、を含み、前記複数の計算機が前記相互結合網を介して全対全通信を行い、前記複数の計算機が前記計算機の数よりも小さい数のグループにグルーピングされた並列計算機での通信方法であって、
前記計算機が、全対全通信時に前記グループ単位で当該グループに属する計算機に送信される特定データと、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す情報と、を記憶手段に記憶する記憶ステップと、
前記計算機が、全対全通信時に、前記グループ単位で当該グループに属する計算機に送信される特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが搭載され当該グループが送信先として指定されたマルチキャストパケットを生成し、当該マルチキャストパケットを前記相互結合網に送信する送信ステップと、
前記相互結合網が、マルチキャストパケットを受信すると、当該マルチキャストパケットを、当該マルチキャストパケットにて指定された送信先に送信する転送ステップと、
前記計算機が、前記相互結合網からマルチキャストパケットを受信すると、前記情報を参照して、当該マルチキャストパケットから自計算機宛のデータを抽出する抽出ステップと、を含む通信方法。
【請求項１０】
マルチキャストパケットを受信すると当該マルチキャストパケットを当該マルチキャストパケットにて指定された送信先に送信する相互結合網を介して全対全通信を行う複数の計算機の１つとして使用され、前記複数の計算機が前記計算機の数よりも小さい数のグループにグルーピングされている、計算機での通信方法であって、
全対全通信時に前記グループ単位で当該グループに属する計算機に送信される特定データと、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す情報と、を記憶手段に記憶する記憶ステップと、
全対全通信時に、前記グループ単位で当該グループに属する計算機に送信される特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが搭載され当該グループが送信先として指定されたマルチキャストパケットを生成し、当該マルチキャストパケットを前記相互結合網に送信する送信ステップと、
前記相互結合網からマルチキャストパケットを受信すると、前記情報を参照して、当該マルチキャストパケットから自計算機宛のデータを抽出する抽出ステップと、を含む通信方法。
【請求項１１】
マルチキャストパケットを受信すると当該マルチキャストパケットを当該マルチキャストパケットにて指定された送信先に送信する相互結合網を介して全対全通信を行う複数の計算機の１つとして使用され、前記複数の計算機が前記計算機の数よりも小さい数のグループにグルーピングされている、コンピュータに、
全対全通信時に前記グループ単位で当該グループに属する計算機に送信される特定データと、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す情報と、を記憶手段に記憶する記憶手順と、
全対全通信時に、前記グループ単位で当該グループに属する計算機に送信される特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが搭載され当該グループが送信先として指定されたマルチキャストパケットを生成し、当該マルチキャストパケットを前記相互結合網に送信する送信手順と、
前記相互結合網からマルチキャストパケットを受信すると、前記情報を参照して、当該マルチキャストパケットから自計算機宛のデータを抽出する抽出手順と、を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算機、計算機、通信方法およびプログラムに関する。
【背景技術】
【０００２】
一般に、大規模な問題を高速に計算するために、複数の計算機が相互結合網で接続された並列計算機システム（「並列計算機」とも称される）が用いられる。
【０００３】
この並列計算機システムでは、計算対象の問題に付随するデータは、計算機と同数の部分データに分割され、各部分データは、計算機のいずれかに保持される。なお、各計算機は、１つの部分データのみを保持する。各計算機は、部分データを用いて計算を行う際に、各計算機間で演算に必要なデータおよび演算結果のデータを相互に通信する必要がある。
【０００４】
計算機間の通信をプログラムする一般的な方式として、MPI（Message Passing Interface）が知られている。MPIでは、一対の計算機間での通信である一対一通信のほかに、複数の計算機間での通信である集合通信を設定することができる。
【０００５】
集合通信としては、例えば、マルチキャスト通信（Multicast）および全対全通信（All to All）がある。
【０００６】
マルチキャスト通信では、１つの計算機が、あるグループに属する複数の計算機に対して、同一のデータを送信する（特許文献１参照）。
【０００７】
全対全通信では、全計算機が、全計算機に対して、互いに異なるデータを送信する。
【０００８】
全対全通信において、全計算機が全計算機に対して個別に順番にデータを送信する場合、各計算機は、全計算機の数（以下「Ｎ」とする）だけ、データ送信を行う必要がある。よって、Ｎ×Ｎ回のデータ送信が必要となる。このため、送信準備のためのオーバーヘッドが大きくなり、通信時間が長くなってしまう。
【０００９】
全対全通信は、大規模な並列計算において頻繁に使用される。このため、全対全通信にかかる時間を削減することが、並列計算および並列計算機システムの性能の向上につながる。
【００１０】
非特許文献１には、全対全通信におけるデータ送信回数を少なくできる技術、具体的には、全対全通信において１つの計算機が行う通信回数をlog（Ｎ）回にすることができる技術が開示されている。
【００１１】
以下に、非特許文献１に開示された全対全通信方法の概要を記す。
【００１２】
非特許文献１に開示された全対全通信方法では、全計算機数がＮ個の場合、各計算機が他のlog（Ｎ）個の計算機のそれぞれに対して一対一通信でデータを送信することで、全対全通信が実現される。
【００１３】
図１５は、非特許文献１で開示された全対全通信方法のアルゴリズムを説明するための疑似プログラムを示した図である。
【００１４】
図１６は、Ｐ０〜Ｐ７の８個の計算機が非特許文献１で開示された全対全通信を行う場合の動作を説明するための図である。なお、図１６において、「Ｐ」に添えてある数値「０」〜「７」は、計算機番号を表す。
【００１５】
図１６に示した例では、各計算機は、８個のデータを自計算機内のメモリ内に保持する。例えば、Ｐ０は、初期状態ではデータ００〜０７をＰ０内のメモリ内に保持する（図１６（ａ）参照）。
【００１６】
全対全通信が行われる場合、まず、各計算機は、送信すべきデータのメモリ内での配置を変更する（図１６（ａ）および図１６（ｂ）参照）。
【００１７】
その後、各計算機は、３回（３= log８）のデータ送信を行う。
【００１８】
１回目のデータ送信では、Ｐ０からＰ１、Ｐ１からＰ２、…、Ｐ６からＰ７、Ｐ７からＰ０というように、各計算機は、計算機番号が自計算機の計算機番号よりも１だけ大きい計算機に対してデータを送信する。このとき、各計算機は、自計算機内のメモリ内のデータのうち半分のデータを他の計算機に対して送信する（図１６（ｂ）および図１６（ｃ）参照）。なお、図１６では、網掛けされているデータが、送信されるデータを表している。
【００１９】
２回目のデータ送信では、各計算機は、計算機番号が自計算機の計算機番号よりも２だけ大きい計算機に対してデータを送信する（図１６（ｃ）および図１６（ｄ）参照）。
【００２０】
３回目のデータ送信では、各計算機は、計算機番号が自計算機の計算機番号よりも４だけ大きい計算機に対してデータを送信する（図１６（ｄ）および図１６（ｅ）参照）。
【００２１】
計３回のデータ送信が終了後、各計算機は、自計算機内のメモリ内のデータを指定されたメモリアドレスに書き戻すことで全対全通信が実現される。
【先行技術文献】
【特許文献】
【００２２】
【特許文献１】特開２０００−９９４８７号公報
【非特許文献】
【００２３】
【非特許文献１】"Efficient algorithms for all-to-all communications in multiport message passing systems", Proceedings of the sixth annual ACM symposium on Parallel algorithms and architectures, 1994.
【発明の概要】
【発明が解決しようとする課題】
【００２４】
全対全通信を行うために、全計算機が全計算機に対して個別に順番にデータを送信すると、データ送信の効率が悪くなる。例えば、計算機の数をＮ個とした場合、１つの計算機は、他のＮ−１個の計算機に対してデータを送信する必要がある。
【００２５】
一方、非特許文献１に開示された全対全通信方法では、１つの計算機が行うデータの送信回数はlog（Ｎ）回となるため、データ送信回数は少なくなる。
【００２６】
しかしながら、非特許文献１に開示された全対全通信方法では、１つの計算機が送信するデータ量が多くなるという問題がある。以下、この問題を説明する。
【００２７】
例えば、全対全通信において１つの計算機が１つの計算機に対して送信すべきデータのサイズがＤバイトであるとすると、１つの計算機が他の計算機に送信すべきデータのサイズ（データ量）は、（Ｎ−１）×Ｄバイトとなる。
【００２８】
しかし、非特許文献１に開示された全対全通信方法では、１つの計算機が他の計算機に送信する送信データの量は、Ｎ×log（Ｎ）×Ｄ／２となる。これは、本来送信すべきデータ量の約log（Ｎ）／２倍となる。
【００２９】
このように、全対全通信を行うために、全計算機が全計算機に対して個別に順番にデータを送信すると、１つの計算機が行うデータ送信の回数が多くなり、非特許文献１に記載の方法では、１つの計算機が送信するデータの量が多くなる。よって、全対全通信にかかる時間が長くなるという課題があった。
【００３０】
本発明の目的は、上述の課題を解決可能な並列計算機、計算機、通信方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００３１】
本発明の並列計算機は、複数の計算機と、前記複数の計算機を相互に接続する相互結合網と、を含み、前記複数の計算機が前記相互結合網を介して全対全通信を行う並列計算機であって、
前記複数の計算機は、前記計算機の数よりも小さい数のグループにグルーピングされており、
前記相互結合網は、マルチキャストパケットを受信すると、当該マルチキャストパケットを、当該マルチキャストパケットにて指定された送信先に送信し、
前記計算機は、
全対全通信時に前記グループ単位で当該グループに属する計算機に送信される特定データと、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す情報と、を記憶する記憶手段と、
全対全通信時に、前記グループ単位で当該グループに属する計算機に送信される特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが搭載され当該グループが送信先として指定されたマルチキャストパケットを生成し、当該マルチキャストパケットを前記相互結合網に送信する送信手段と、
前記相互結合網からマルチキャストパケットを受信すると、前記情報を参照して、当該マルチキャストパケットから自計算機宛のデータを抽出する抽出手段と、を含む。
【００３２】
本発明の計算機は、マルチキャストパケットを受信すると当該マルチキャストパケットを当該マルチキャストパケットにて指定された送信先に送信する相互結合網を介して全対全通信を行う複数の計算機の１つとして使用され、前記複数の計算機が前記計算機の数よりも小さい数のグループにグルーピングされている、計算機であって、
全対全通信時に前記グループ単位で当該グループに属する計算機に送信される特定データと、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す情報と、を記憶する記憶手段と、
全対全通信時に、前記グループ単位で当該グループに属する計算機に送信される特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが搭載され当該グループが送信先として指定されたマルチキャストパケットを生成し、当該マルチキャストパケットを前記相互結合網に送信する送信手段と、
前記相互結合網からマルチキャストパケットを受信すると、前記情報を参照して、当該マルチキャストパケットから自計算機宛のデータを抽出する抽出手段と、を含む。
【００３３】
本発明の通信方法は、複数の計算機と、前記複数の計算機を相互に接続する相互結合網と、を含み、前記複数の計算機が前記相互結合網を介して全対全通信を行い、前記複数の計算機が前記計算機の数よりも小さい数のグループにグルーピングされた並列計算機での通信方法であって、
前記計算機が、全対全通信時に前記グループ単位で当該グループに属する計算機に送信される特定データと、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す情報と、を記憶手段に記憶する記憶ステップと、
前記計算機が、全対全通信時に、前記グループ単位で当該グループに属する計算機に送信される特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが搭載され当該グループが送信先として指定されたマルチキャストパケットを生成し、当該マルチキャストパケットを前記相互結合網に送信する送信ステップと、
前記相互結合網が、マルチキャストパケットを受信すると、当該マルチキャストパケットを、当該マルチキャストパケットにて指定された送信先に送信する転送ステップと、
前記計算機が、前記相互結合網からマルチキャストパケットを受信すると、前記情報を参照して、当該マルチキャストパケットから自計算機宛のデータを抽出する抽出ステップと、を含む。
【００３４】
本発明の通信方法は、マルチキャストパケットを受信すると当該マルチキャストパケットを当該マルチキャストパケットにて指定された送信先に送信する相互結合網を介して全対全通信を行う複数の計算機の１つとして使用され、前記複数の計算機が前記計算機の数よりも小さい数のグループにグルーピングされている、計算機での通信方法であって、
全対全通信時に前記グループ単位で当該グループに属する計算機に送信される特定データと、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す情報と、を記憶手段に記憶する記憶ステップと、
全対全通信時に、前記グループ単位で当該グループに属する計算機に送信される特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが搭載され当該グループが送信先として指定されたマルチキャストパケットを生成し、当該マルチキャストパケットを前記相互結合網に送信する送信ステップと、
前記相互結合網からマルチキャストパケットを受信すると、前記情報を参照して、当該マルチキャストパケットから自計算機宛のデータを抽出する抽出ステップと、を含む。
【００３５】
本発明のプログラムは、マルチキャストパケットを受信すると当該マルチキャストパケットを当該マルチキャストパケットにて指定された送信先に送信する相互結合網を介して全対全通信を行う複数の計算機の１つとして使用され、前記複数の計算機が前記計算機の数よりも小さい数のグループにグルーピングされている、コンピュータに、
全対全通信時に前記グループ単位で当該グループに属する計算機に送信される特定データと、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す情報と、を記憶手段に記憶する記憶手順と、
全対全通信時に、前記グループ単位で当該グループに属する計算機に送信される特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが搭載され当該グループが送信先として指定されたマルチキャストパケットを生成し、当該マルチキャストパケットを前記相互結合網に送信する送信手順と、
前記相互結合網からマルチキャストパケットを受信すると、前記情報を参照して、当該マルチキャストパケットから自計算機宛のデータを抽出する抽出手順と、を実行させる。 
【発明の効果】
【００３６】
本発明によれば、並列計算機において、１計算機あたりのデータ送信回数が少なく、また、１計算機あたり送信データ量も増えない全対全通信を行うことが可能になる。
【図面の簡単な説明】
【００３７】
【図１】本発明の実施形態に従った並列計算機システムの構成を示す図である。
【図２】計算ノードのグループ分けの一例を示す図である。
【図３】ユニキャストパケットのデータ構造の一例と、マルチキャストパケットのデータ構造の一例と、スキャッタパケットのデータ構造の一例とを示す図である。
【図４】図１に示した計算ノードの構成を示す図である。
【図５】図４に示した通信制御情報保持部で保持される情報を示す図である。
【図６】図４に示した送信部および受信部の構成を示す図である。
【図７】動作例における並列計算機システムでの全対全通信パターンを示す図である。
【図８】動作例における並列計算機システムでの全対全通信前後の、各計算ノードのメモリの様子を示す図である。
【図９】動作例における並列計算機システムでの全対全通信の開始時の、計算ノード２１−１の通信制御情報保持部で保持される情報を示す図である。
【図１０】動作例における並列計算機システムの計算ノード２１−３で通信コマンド生成処理にて生成した通信コマンド情報を示す図である。
【図１１】動作例における並列計算機システムでの通信制御情報更新処理完了時の、計算ノード２１−１の通信制御情報保持部で保持される情報を示す図である。
【図１２】動作例における並列計算機システムにて、計算ノード２１−１が送信する１つのスキャッタパケットを示す図である。
【図１３】動作例における並列計算機システムで、図１２に示したスキャッタパケットが流れる様子を示す図である。
【図１４】動作例における並列計算機システムで、計算ノード２１−１６が図１２に示したスキャッタパケットを受信する時の、通信制御情報保持部内の受信予定情報の一部を示す図である。
【図１５】非特許文献１で開示される、全対全通信方法の疑似プログラムを示した図である。
【図１６】非特許文献１で開示される、全対全通信方法を使った全対全通信の一例における各プロセスのメモリの様子を示した図である。
【発明を実施するための形態】
【００３８】
以下、本発明の一実施形態の並列計算機システム（「並列計算機」とも称される）を説明する。
【００３９】
図１は、本実施形態の並列計算機システムを示したブロック図である。図１に示すように、並列計算機システムは、計算機クラスタ２０−１〜２０−４と、クラスタ間ネットワーク１１と、を含む。
【００４０】
計算機クラスタ２０−１は、計算ノード２１−１〜２１−４と、クラスタ内ネットワーク２２−１と、を含む。計算機クラスタ２０−１では、計算ノード２１−１〜２１−４が、クラスタ内ネットワーク２２−１を介して相互に接続されている。計算機クラスタ２０−２〜２０−４も、計算機クラスタ２０−１と同様の構成である。
【００４１】
なお、計算機クラスタ内の計算ノードの数は、４に限らず、２以上であればよい。また、各計算機クラスタ内の計算ノードの数は、同じでもよいし、互いに異なってもよいし、任意に設定可能である。
【００４２】
各計算ノード２１−１〜２１−１６は、一般的に計算機と呼ぶことができる。
【００４３】
本実施形態では、各計算ノードの符号「２１−１」〜「２１−１６」は、その符号が付与された計算ノードの番号も兼ねる。
【００４４】
計算ノード２１−１〜２１−１６にて構成される計算機群は、１つまたは複数のグループにグルーピングされる。本実施形態では、計算機群は、計算機群内の計算ノードの数よりも小さい数のグループにグルーピングされる。
【００４５】
クラスタ間ネットワーク１１は、計算機クラスタ２０−１〜２０−４を相互に結合している。クラスタ間ネットワーク１１の形態は、計算機クラスタ２０−１〜２０−４を相互に接続できる構成であれば任意であり、例えば、多段結合網、ツリー網、または、トーラス網などでよい。
【００４６】
クラスタ内ネットワーク２２−１〜２２−４、および、クラスタ間ネットワーク１１を合わせて、計算ノード２１−１〜２１−１６を相互に接続する相互結合網１０と呼ぶ。
【００４７】
計算ノード２１−１〜２１−１６は、いくつかの計算ノードからなるグループに分けられ、各計算ノードは、どれか１つのグループに属している。
【００４８】
グループ分けの方法は任意であるが、計算機クラスタ単位で各計算ノードがグループ分けされると、後述する全対全通信の効率がよくなる。
【００４９】
図２は、各計算ノードのグループ分けの一例を示した図である。
【００５０】
本実施形態では、図２に示すように、計算ノード２１−１〜２１−１６は、計算機クラスタごとに、グループＩＤ（１）〜グループＩＤ（４）の４つのグループにグループ分けされる。このように、各計算ノードが１つずつどこかのグループに属するようにグループ分けされたグループを、必須グループと呼ぶことにする。
【００５１】
なお、必須グループとは別に、任意に計算ノードがグループ分けされてもよく、そのようなグループを任意グループと呼ぶことにする。例えば、図２のように、必須グループであるグループＩＤ（１）〜グループＩＤ（４）とは別に、計算ノード２１−１、２１−５、２１−９および２１−１３が属するグループＩＤ（５）や、全計算ノードが属するグループＩＤ（６）が追加で定められてもよい。なお、グループＩＤ（６）にて特定されるグループも、必須グループの一例とすることができる。
【００５２】
グループＩＤは、後述の相互結合網１０でのマルチキャスト転送処理において、マルチキャストパケットの転送先（送信先）となる計算ノード群を識別するために利用される。相互結合網１０でのマルチキャスト転送処理によって、マルチキャストパケットにて指定されたグループＩＤに属する計算ノードに対して、同一マルチキャストパケットがマルチキャスト転送される。
【００５３】
次に、相互結合網１０について、説明する。
【００５４】
相互結合網１０は、計算ノード２１−１〜２１−１６のそれぞれが送信したパケットを、そのパケットが指定する宛先へ転送する。
【００５５】
図３は、相互結合網１０で転送されるパケットを示した図である。
【００５６】
相互結合網１０では、ユニキャストパケット、マルチキャストパケットおよびスキャッタパケットの３種類のパケットが送受信される。
【００５７】
ユニキャストパケットは、１つの計算ノードから他の１つの計算ノードへデータを送信するために用いられる。ユニキャストパケットは、コマンド情報として（００）を有し、送信元計算ノード情報、送信先計算ノード情報、データ長、および、送信データを含む。
【００５８】
相互結合網１０は、送信元計算ノードよりユニキャストパケットを受信した場合、そのユニキャストパケットを、そのユニキャストパケット内の送信先計算ノード情報が示す計算ノードのみに送信する。
【００５９】
マルチキャストパケットは、１つの計算ノードから１つまたは複数の計算ノードへ同一データを同時に送信するために用いられる。マルチキャストパケットは、コマンド情報として（０１）を有し、送信元計算ノード情報、送信先計算ノード群を示すグループＩＤ、データ長、および、送信データを含む。
【００６０】
相互結合網１０は、送信元計算ノードよりマルチキャストパケットを受信した場合、マルチキャストパケットをコピーし、そのマルチキャストパケットを、そのマルチキャストパケットが示すグループＩＤに属する計算ノードにのみ同時に転送する（マルチキャスト転送処理）。
【００６１】
スキャッタパケットは、１つの計算ノードから１つまたは複数の計算ノードへそれぞれ異なるデータを同時に送信するために用いられる。本実施形態では、スキャッタパケットは、計算ノード２１−１〜２１−１６が全対全通信を行うときに使用される。スキャッタパケットは、コマンド情報として（１０）を有し、送信元計算ノード情報、送信先計算ノード群を示すグループＩＤ、スキャッタパケットＩＤ（スキャッタＩＤ）、送信データ長、および、送信データを含む。
【００６２】
スキャッタパケット内の送信データは、複数の計算ノード（例えば、同一のグループに属する複数の計算ノード）に対して送られるべき異なるデータを、後述のデータ結合処理により結合されたものである。
【００６３】
相互結合網１０は、送信元計算ノードよりスキャッタパケットを受信した場合、マルチキャストパケットと同様に、マルチキャスト転送処理によって、そのスキャッタパケットをコピーし、そのスキャッタパケットを、そのスキャッタパケットが示すグループＩＤに属する計算ノードにのみマルチキャスト転送する。
【００６４】
なお、本実施形態で使用されるパケットの種類は３種のみであり、各種類のパケットは、上記のパケットフォーマットを有するが、パケットの種類はこの限りでなく、他のパケットの種類を増やしてもよく、また、パケットフォーマットについても変更してもよい。
【００６５】
計算ノード２１−１〜２１−１６は、相互結合網１０を介して全対全通信を行う。
【００６６】
次に、計算ノード２１−１〜２１−１６の構成を説明する。計算ノード２１−１〜２１−１６は、互いに同一の構成を有しているので、以下では、計算ノード２１−１を例に説明する。
【００６７】
図４は、計算ノード２１−１を示したブロック図である。なお、計算ノード２１−２〜２１−１６については、以下の説明のうち「２１−１」という記載を、「２１−２」〜「２１−１６」のいずれかに読み替えればよい。
【００６８】
図４において、計算ノード２１−１は、計算ユニット２１１と、メモリ２１２と、通信制御情報保持部（以下「保持部」と称する）２１３と、送信部２１４と、受信部２１５と、を含む。なお、メモリ２１２と保持部２１３は、記憶部２１６に含まれる。記憶部２１６は、一般的に記憶手段と呼ぶことができる。
【００６９】
計算ユニット２１１は、計算ノード２１−１が有する機能のうち主に計算を担当する。また、計算ユニット２１１は、計算だけではなく、他の計算ノードへのデータ送信要求を送信部２１４に対して発行する。
【００７０】
メモリ２１２は、計算ノード２１−１の記憶領域である。メモリ２１２は、データを記憶するデータ記憶部２１２１と、プログラムを記憶するプログラム記憶部２１２２と、を含む。
【００７１】
データ記憶部２１２１には、計算ノード２１−１が全対全通信を行う際に計算機群を構成する計算ノード２１−１〜２１−１６に送信され全対全通信時に計算ノード２１−１〜２１−１６と１対１で対応する複数のデータ（以下、単に「複数のデータ」と称する）が記憶されている。
【００７２】
メモリ２１２は、計算ユニット２１１からの読み出し要求に応じて、または、送信部２１４からの読み出し要求に応じて、データ記憶部２１２１内のデータの一部またはプログラム記憶部２１２２内のプログラムの一部を読み出し、そのデータの一部またはプログラムの一部を、読み出し要求の送信元に送信する。
【００７３】
また、メモリ２１２は、計算ユニット２１１からの書き込み要求に応じて、または、受信部２１５からの書き込み要求に応じて、データ記憶部２１２１内のデータを書き換える。
【００７４】
保持部２１３は、通信に関する制御情報を保持する。
【００７５】
図５は、保持部２１３に保持された制御情報の一例を示した図である。
【００７６】
保持部２１３は、グループ情報２１３１と、受信予定情報２１３２と、スキャッタ送信予定情報２１３３と、を保持している。
【００７７】
グループ情報２１３１は、計算ノードのグループ分け結果を示した情報である。グループ情報２１３１は、グループＩＤごとに、グループＩＤと、そのグループＩＤが示すグループに所属する計算ノードと、を示す。
【００７８】
グループＩＤが示すグループに所属する計算ノード（以下「所属計算ノード」と称する）を示す形式は、所属計算ノードのリストを示したリスト形式でもよいし、所属計算ノード番号の範囲を示した形式でもよく、形式は問わない。なお、本実施形態では、グループ情報２１３１は、所属計算ノードをリスト形式で示す。
【００７９】
受信予定情報２１３２は、計算ノード２１−１が受信すべきパケットに関する情報である。受信予定情報２１３２は、計算ノード２１−１が受信すべきパケットの送信元計算ノードの番号と、そのパケットの種類を示すコマンド情報（図３参照）と、そのパケットから抽出されたデータが書き込まれるメモリアドレス（以下、単に「メモリアドレス」と称する）と、追加情報と、を含む。
【００８０】
計算ノード２１−１が、ある計算ノードが送信したユニキャストパケットを受信すべき場合は、受信予定情報２１３２には、そのユニキャストパケットを送信する計算ノードを示す情報（計算ノードの番号）と、ユニキャストパケットを示すコマンド情報「００」と、メモリアドレスとが、互いに関連づけられたユニキャストパケット用レコードが記載される。なお、ユニキャストパケット用レコードには、追加情報は示されない。
【００８１】
計算ノード２１−１が、ある計算ノードが送信したマルチキャストパケットを受信すべき場合は、受信予定情報２１３２には、そのマルチキャストパケットを送信する送信元計算ノードを示す情報と、マルチキャストパケットを示すコマンド情報「０１」と、メモリアドレスとが、互いに関連づけられたマルチキャストパケット用レコードが記載される。なお、マルチキャストパケット用レコードには、追加情報は示されない。
【００８２】
計算ノード２１−１が、ある計算ノードが送信したスキャッタパケットを受信すべき場合は、受信予定情報２１３２には、そのスキャッタパケットを送信する送信元計算ノードを示す情報と、スキャッタパケットを示すコマンド情報「１０」と、メモリアドレスと、追加情報とが、互いに関連づけられたスキャッタパケット用レコードが記載される。
【００８３】
追加情報は、一般的に、全対全通信時に計算ノード２１−１宛のデータがスキャッタパケットパケットに記載された箇所を示した箇所情報（第２情報）と呼ぶことができる。
【００８４】
追加情報は、スキャッタＩＤと、受信オフセットと、受信データサイズと、を示す。
【００８５】
スキャッタＩＤは、送信元計算ノードが複数のスキャッタパケットを送信した場合にスキャッタパケットを一意に決定するためのＩＤである。受信オフセットは、スキャッタパケット内のデータのうち、計算ノード２１−１が受信すべきデータ（計算ノード２１−１宛のデータ）の位置を示す。受信データサイズは、受信すべきデータのサイズを示す。
【００８６】
スキャッタ送信予定情報２１３３は、計算ノード２１−１が送信するスキャッタパケットに関する情報である。
【００８７】
スキャッタ送信予定情報２１３３は、一般的に、複数のデータのうちグループＩＤにて特定されるグループに属する各計算ノードに全対全通信時に送信される各データ（特定データ）がスキャッタパケットに記載される箇所をグループ単位で示した箇所情報（第１情報）を含む。
【００８８】
スキャッタ送信予定情報２１３３には、計算ノード２１−１から送信されるスキャッタパケットのスキャッタＩＤと、送信先となるグループＩＤと、送信すべきデータが記憶されたメモリアドレスのリスト（以下「メモリアドレスリスト」と称する）と、送信すべきデータのサイズのリスト（以下「データサイズリスト」と称する）と、を示す送信用レコードが記載される。
【００８９】
なお、メモリアドレスリストおよびデータサイズリストでは、リストに記載されたデータ（メモリアドレスおよびデータサイズ）の並び順が、送信先となるグループＩＤについてグループ情報２１３１の所属計算ノード情報に示された計算ノードの並び順と対応している。
【００９０】
例えば、図５に示す例では、スキャッタＩＤ「１７」を含む送信用レコードは、スキャッタＩＤ「１７」にて特定されるスキャッタパケットが、グループＩＤ「２」にて特定されるグループに属する計算ノードに送信されることを示す情報である。
【００９１】
さらに説明すると、スキャッタＩＤ「１７」を含む送信用レコードは、スキャッタパケットを用いることによって、計算ノード２１−５に計算ノード２１−１が有するメモリ内のアドレス［５１２］からの１６バイトのデータを送信する処理と、計算ノード２１−６に計算ノード２１−１が有するメモリ内のアドレス［５２８］からの１６バイトのデータを送信する処理と、計算ノード２１−７に計算ノード２１−１が有するメモリ内のアドレス［５４４］からの１６バイトのデータを送信する処理と、計算ノード２１−８に計算ノード２１−１が有するメモリ内のアドレス［５６０］からの１６バイトのデータを送信する処理と、一度に行うことを意味する。
【００９２】
図４に戻って、送信部２１４および受信部２１５は、クラスタ内ネットワーク２２−１に接続されており、相互結合網１０を介して他の計算ノードとデータの送受信を行う。
【００９３】
送信部２１４は、一般的に送信手段と呼ぶことができる。
【００９４】
送信部２１４は、全対全通信時に必須グループ内の計算ノードに対応する各データを送信する状況になると、グループ単位で、その各データをメモリ２１６から読み出し、グループ単位で、その各データがスキャッタ送信予定情報２１３３にて示された箇所に記載されそのグループを送信先として指定したスキャッタパケットを生成し、そのスキャッタパケットを相互結合網１０に送信する。
【００９５】
なお、送信部２１４は、計算ユニット２１１からのデータ送信要求（例えば、スキャッタコマンド発行要求）に従って、メモリ２１２内のデータ記憶部２１２１からデータを読み出し、そのデータを送信するためのパケット（例えば、スキャッタパケット）を生成し、そのパケットを相互結合網１０に送信する。
【００９６】
図６（ａ）は、送信部２１４の一例を示したブロック図である。
【００９７】
図６（ａ）において、送信部２１４は、送信命令処理部２１４１と、パケット生成部２１４２と、出力部２１４３と、を含む。
【００９８】
送信命令処理部２１４１は、計算ユニット２１１からのデータ送信要求を受け付けると、パケット生成部２１４２に対してパケット生成処理要求を出す。なお、データ送信要求は、計算ユニット２１１内のメモリのメモリアドレスおよびデータサイズを示し、パケット生成処理要求は、データ送信要求内のメモリアドレスおよびデータサイズを示す。
【００９９】
パケット生成部２１４２は、送信命令処理部２１４１からパケット生成処理要求を受け付けると、メモリ２１２に対して、パケット生成処理要求内のメモリアドレスおよびデータサイズを示した読み出し要求を出して、メモリ２１２から、そのメモリアドレスからのデータサイズに示されたサイズのデータまたはプログラムを読み出す。その後、パケット生成部２１４２は、そのプログラムまたはデータを送信するためのパケットを生成し、そのパケットを出力部２１４３に転送する。
【０１００】
出力部２１４３は、パケット生成部２１４２からパケットを受け付けると、そのパケットをクラスタ内ネットワーク２２−１に送信する。
【０１０１】
ここで、送信命令処理部２１４１がパケット生成部２１４２にパケット生成処理要求を送信し、パケット生成部２１４２がパケットを生成するパケット生成処理について詳しく説明する。
【０１０２】
送信命令処理部２１４１がパケット生成部２１４２に対して発行するパケット生成処理要求は、「ユニキャストパケット生成要求」、「マルチキャストパケット生成要求」および「スキャッタパケット生成要求」の３種類のいずれかである。
【０１０３】
なお、送信命令処理部２１４１は、計算ユニット２１１から、ユニキャストパケットを指定したデータ送信要求を受け付けた場合、ユニキャストパケット生成要求を、パケット生成部２１４２に発行する。
【０１０４】
また、送信命令処理部２１４１は、計算ユニット２１１から、マルチキャストパケットを指定したデータ送信要求を受け付けた場合、マルチキャストパケット生成要求を、パケット生成部２１４２に発行する。
【０１０５】
また、送信命令処理部２１４１は、計算ユニット２１１から、データ送信要求の一例であるスキャッタコマンド発行要求を受け付けた場合、スキャッタパケット生成要求を、パケット生成部２１４２に発行する。なお、スキャッタコマンド発行要求は、スキャッタＩＤを含み、スキャッタパケット生成要求は、スキャッタコマンド発行要求内のスキャッタＩＤを含む。
【０１０６】
パケット生成部２１４２は、ユニキャストパケット生成要求を受け付けると、ユニキャストパケット生成要求に含まれるメモリアドレスおよびデータサイズを元に、メモリ２１２から、メモリアドレスおよびデータサイズにて特定されるデータを読み出し、そのデータを送信するためのユニキャストパケットを生成する。
【０１０７】
パケット生成部２１４２は、マルチキャストパケット生成要求を受け付けると、マルチキャストパケット生成要求に含まれるメモリアドレスおよびデータサイズを元に、メモリ２１２から、メモリアドレスおよびデータサイズにて特定されるデータを読み出し、そのデータを送信するためのマルチキャストパケットを生成する。
【０１０８】
一方、パケット生成部２１４２は、スキャッタパケット生成要求を受け付けた場合は、スキャタパケット生成処理を実行して、スキャッタパケットを生成する。以下にスキャッタパケット生成処理を説明する。
【０１０９】
スキャッタパケットは、グループＩＤで指定されたグループに所属する全計算ノードに対してそれぞれ送信すべき互いに異なるデータを結合したデータを有する。
【０１１０】
パケット生成部２１４２は、スキャッタパケット生成要求を受けた場合、まず、スキャッタパケット生成要求が有するスキャッタＩＤを有する送信用レコード（図５参照）を、保持部２１３内のスキャッタ送信予定情報２１３より取得する。
【０１１１】
パケット生成部２１４２は、スキャッタＩＤを有する送信用レコードを取得すると、その送信用レコードに記載されたメモリアドレスおよびデータサイズにて特定される各データを、メモリ２１２から読み出す。
【０１１２】
パケット生成部２１４２は、例えば、スキャッタＩＤ「１７」を有する送信用レコードを取得した場合、計算ノード２１−１が有するメモリ２１２から、アドレス［５１２］からの１６バイトのデータと、アドレス［５２８］からの１６バイトのデータと、アドレス［５４４］からの１６バイトのデータと、アドレス［５６０］からの１６バイトのデータと、を読み出す。
【０１１３】
パケット生成部２１４２は、メモリ２１２から各データを読み出すと、その各データを、そのデータに対応するメモリアドレスまたはデータサイズがメモリアドレスリストまたはデータサイズリストに記載された順に並べて送信データを作成し、その送信データを有し、かつ、送信用レコードに記載されたグループＩＤが送信先として指定されたスキャッタパケットを生成する。
【０１１４】
受信部２１５は、一般的に抽出手段と呼ぶことができる。
【０１１５】
受信部２１５は、例えば、相互結合網１０からスキャッタパケットを受信すると、保持部２１３内の受信予定情報２１３２（図５参照）を参照して、そのスキャッタパケットから計算ノード２１−１と対応するデータを抽出する。
【０１１６】
受信部２１５は、相互結合網１０からパケットを受け付けると、そのパケット内のデータをメモリ２１２へ書き込み、計算ユニット２１１へ受信完了を通知する。
【０１１７】
図６（ｂ）は、受信部２１５の一例を示したブロック図である。
【０１１８】
図６（ｂ）において、受信部２１５は、入力部２１５１と、受信判定部２１５２と、受信命令処理部２１５３と、を含む。
【０１１９】
入力部２１５１は、クラスタ内ネットワーク２２−１からパケットを受信する。入力部２１５１が受信するパケットは、ユニキャストパケット、マルチキャストパケットおよびスキャッタパケットの３種類のうちのいずれかである。入力部２１５１は、パケットを受信すると、そのパケットを受信判定部２１５２に転送する。
【０１２０】
受信判定部２１５２は、入力部２１５１から転送されたパケットを受け付けると、そのパケット内のコマンド情報を確認する。
【０１２１】
コマンド情報が、「００」（ユニキャストパケット）であった場合、受信判定部２１５２は、保持部２１３を参照して、受信予定情報２１３２内に、そのパケット内の送信元計算ノードを示したユニキャストパケット用レコードがあるか確認する。
【０１２２】
もし、受信予定情報２１３２内に、そのパケット内の送信元計算ノードを示したユニキャストパケット用レコードがない場合、受信判定部２１５２は、そのパケットは受信すべきパケットでないと判定して、そのパケットを破棄する。
【０１２３】
一方、受信予定情報２１３２内に、そのパケット内の送信元計算ノードを示したユニキャストパケット用レコードがあった場合、受信判定部２１５２は、そのパケットは受信すべきパケットであると判定し、そのユニキャストパケット用レコードからメモリアドレスを取得し、そのメモリアドレスを用いて、メモリ２１２に対して、パケットのデータ部に記載されたデータを書き込む。その後、受信判定部２１５２は、受信予定情報２１３２から、そのユニキャストパケット用レコードを削除する。
【０１２４】
コマンド情報が、「０１」（マルチキャストパケット）であった場合、受信判定部２１５２は、保持部２１３を参照して、受信予定情報２１３２内に、そのパケット内の送信元計算ノードを示したマルチキャストパケット用レコードがあるか確認する。
【０１２５】
もし、受信予定情報２１３２内に、そのパケット内の送信元計算ノードを示したマルチキャストパケット用レコードがない場合、受信判定部２１５２は、そのパケットは受信すべきパケットでないと判定して、そのパケットを破棄する。
【０１２６】
一方、受信予定情報２１３２内に、そのパケット内の送信元計算ノードを示したマルチキャストパケット用レコードがあった場合、受信判定部２１５２は、そのパケットは受信すべきパケットであると判定し、そのマルチキャストパケット用レコードからメモリアドレスを取得し、そのメモリアドレスを用いて、メモリ２１２に対して、パケットのデータ部に記載されたデータを書き込む。その後、受信判定部２１５２は、受信予定情報２１３２から、そのマルチキャストパケット用レコードを削除する。
【０１２７】
コマンド情報が、「１０」（スキャッタパケット）であった場合は、受信判定部２１５２は、そのパケットのデータ部のうち、受信オフセット位置にあるデータ、すなわち、自計算ノードで取得すべきデータ（自計算ノード宛のデータ）を抽出するデータ抽出処理を実行する。
【０１２８】
データ抽出処理では、受信判定部２１５２は、保持部２１３を参照して、受信予定情報２１３２内に、そのパケット内の送信元計算ノードを示し、かつ、そのパケット内のスキャッタＩＤを示すスキャッタパケット用レコードがあるか確認する。
【０１２９】
もし、受信予定情報２１３２内に、そのパケット内の送信元計算ノードを示し、かつ、そのパケット内のスキャッタＩＤを示すスキャッタパケット用レコードがない場合、受信判定部２１５２は、そのパケットは受信すべきパケットでないと判定して、そのパケットを破棄する。
【０１３０】
一方、受信予定情報２１３２内に、そのパケット内の送信元計算ノードを示し、かつ、そのパケット内のスキャッタＩＤを示すスキャッタパケット用レコードがあった場合、受信判定部２１５２は、そのスキャッタパケット用レコードから、メモリアドレス、受信オフセットおよび受信データサイズを読み取り、その後、そのスキャッタパケット用レコードを受信予定情報２１３２から削除する。
【０１３１】
続いて、受信判定部２１５２は、そのパケットのデータ部の先頭から受信オフセットずれた位置にあるデータを受信データサイズ分抜き出し、メモリアドレスを用いて、メモリ２１２に対して、その抜き出されたデータを書き込む。以上の処理が終了すると、受信判定部２１５２は、受信命令処理部２１５３に対して、そのパケットの受信が完了したことを通知する。
【０１３２】
受信命令処理部２１５３は、パケットの受信が完了したことを受信判定部２１５２から通知されると、計算ユニット２１−１に対して、パケットの受信が完了したことを通知する。
【０１３３】
以上が、本発明の一実施形態の並列計算機システムの説明であり、次に、本実施形態の並列計算機システムで全対全通信を行う場合の動作例を説明する。
【０１３４】
図７は、以下の動作例で説明する全対全通信の転送パターンを示した図である。
【０１３５】
具体的には、図７（ａ）は、本動作例での全対全通信において、送信側計算ノードから送信先計算ノード（受信側計算ノード）に送信される転送データが格納されている送信側計算ノードのメモリアドレスを示した図である。
【０１３６】
図７（ｂ）は、本動作例での全対全通信において、送信側計算ノードから送信先計算ノードに送信される転送データのデータサイズを示した図である。
【０１３７】
図７（ｃ）は、送信先計算ノード（受信側計算ノード）別に、送信先計算ノード（受信側計算ノードにて受信されたデータが書き込まれるメモリアドレスを示した図である。
【０１３８】
なお、図７において、計算ノード番号１〜１６は、それぞれ、計算ノード２１−１〜２１−１６に対応している。
【０１３９】
例えば、計算ノード２１−１から計算ノード２１−１６へデータが送信される場合には、計算ノード２１−１のメモリアドレス［１２０］からの８バイトのデータが計算ノード２１−１６へ送信され、計算ノード２１−１６は、計算ノード２１−１から受信したデータを、メモリアドレス［２４８］に書き込む。
【０１４０】
図７に示した転送パターンの情報は、例えば、各計算ノードのメモリ２１２内のプログラム記憶部２１２２に保持される。
【０１４１】
なお、図７に示した転送パターンは、計算ノード２１−１〜２１−１６内のデータを要素とする行列において、それら要素の転置を実施するための転送パターンである。図８は、全対全通信前後の各計算ノードのメモリの様子を示した図である。
【０１４２】
図９は、全対全通信が開始される前の状況（以下「初期状態」と称する）で、各計算ノード内の保持部２１３が保持している情報を示した図である。
【０１４３】
初期状態では、各計算ノードは、必須グループであるグループＩＤ（１）〜グループＩＤ（４）と、グループＩＤ（１）〜グループＩＤ（４）の所属計算ノード情報と、を示したグループ情報２１３１を、共有している。また、初期状態では、受信予定情報２１３２およびスキャッタ送信予定情報２１３３には、何も情報（レコード）がない。
【０１４４】
なお、本動作例では、グループ情報２１３１に必須グループしかないが、他のグループもあってもよい。また、受信予定情報２１３２およびスキャッタ送信予定情報２１３３に情報（レコード）が含まれていないが、他の全対全通信、ユニキャスト通信、または、マルチキャスト通信などの通信が同時に起こっている場合には、それらの通信に関する情報が保持されてもよい。
【０１４５】
上記のような初期状態のもと、図７に示した転送パターンにしたがった全対全通信の動作を説明する。
【０１４６】
全対全通信を行うにあたって、各計算ノード（例えば、各計算ユニット２１１）は、メモリ２１２内のプログラム記憶部２１２２で保持されている転送パターンを実通信コマンドに変換する「通信コマンド生成処理」を実施する。
【０１４７】
以下に、計算ノード２１−３を例に通信コマンド生成処理を説明する。
【０１４８】
各計算ノード（例えば、各計算ユニット２１１）は、まず、自計算ノードを含め全ての計算ノードにデータを送信するための全コマンド送信情報を作成する。
【０１４９】
本実施形態では、各計算ノード（例えば、各計算ユニット２１１）は、送信元計算ノードとして、計算ノード２１−１〜２１−１６を順に設定し、それぞれの送信元計算ノードに対して、送信先のグループＩＤとして、必須グループであるグループＩＤ（１）〜グループＩＤ（４）を設定して、全コマンド送信情報を作成していく。
【０１５０】
例えば、最初は、計算ノード２１−１からグループＩＤ（１）へのスキャッタパケットを用いた送信に関する情報が、全コマンド送信情報として設定される。なお、以下では、スキャッタパケットを用いた送信を「スキャッタ送信」と称し、スキャッタ送信に関する情報を「スキャッタコマンド情報」と称する。
【０１５１】
計算ノード２１−１からグループＩＤ（１）へのスキャッタ送信に関するスキャッタコマンド情報は、以下のように作成される。
【０１５２】
グループＩＤ（１）には、順に、計算ノード２１−１、２１−２、２１−３、２１−４が属している。このため、各計算ノード（例えば、計算ユニット２１−１）は、図７に示した転送パターンを参照して、計算ノード２１−１からグループＩＤ（１）へのスキャッタ送信に使用される、送信データのメモリアドレスリストおよび送信データのデータサイズリストを作成する。
【０１５３】
この場合、各計算ノード（例えば、各計算ユニット２１１）は、図７に示した転送パターンを参照して、計算ノード２１−１から計算ノード２１−１へ送信されるデータについてのメモリ２１２での先頭アドレスとそのデータサイズと、計算ノード２１−１から計算ノード２１−２へ送信されるデータについてのメモリ２１２での先頭アドレスとそのデータサイズと、計算ノード２１−１から計算ノード２１−３へ送信されるデータについてのメモリ２１２での先頭アドレスとそのデータサイズと、計算ノード２１−１から計算ノード２１−４へ送信されるデータについてのメモリ２１２での先頭アドレスとそのデータサイズと、を特定して、メモリアドレスリストおよびデータサイズリストを作成する。
【０１５４】
続いて、各計算ノード（例えば、各計算ユニット２１１）は、送信元計算ノードとして計算ノード２１−１が設定され、かつ、グループＩＤとしてグループＩＤ（１）が設定され、かつ、メモリアドレスリストとしてその作成されたメモリアドレスリストが設定され、かつ、データサイズリストとしてその作成されたデータサイズリストが設定されたスキャッタコマンド情報を、全コマンド送信情報に設定する。
【０１５５】
以下、各計算ノード（例えば、各計算ユニット２１１）は、上記と同様に、各計算ノードから各必須グループへのスキャッタ送信に関するスキャッタコマンド情報を作成していき、それらスキャッタコマンド情報を、全コマンド送信情報に設定していく。
【０１５６】
続いて、各計算ノード（例えば、各計算ユニット２１１）は、全コマンド送信情報内の各スキャッタコマンド情報に対して、それぞれスキャッタＩＤを順に付与していく。
【０１５７】
スキャッタＩＤの付与は、ＩＤの重複がないようにすれば、どのような順序づけであってもよい。
【０１５８】
このように、計算ノード数×必須グループ数（１６×４＝６４）個の全スキャッタコマンド情報が作成される。
【０１５９】
図１０（ａ）は、計算ノードにて作成された全コマンド送信情報を示した図である。
【０１６０】
次に、各計算ノード（例えば、各計算ユニット２１１）は、自計算ノードが受信すべきスキャッタパケットに関する情報（以下「自計算ノードコマンド受信情報」と称する）を作成する。
【０１６１】
各計算ノード（例えば、各計算ユニット２１１）は、先に生成したスキャッタコマンド情報より、自計算ノードが属するグループＩＤを送信先にするスキャッタコマンド情報を抜き出す。例えば、全コマンド送信情報が図１０（ａ）に示したように設定されている場合、計算ノード２１−３は、グループＩＤ（１）に属するので、計算ノード２１−３は、スキャッタＩＤ１、５、９、・・・、６１の１６個のスキャッタコマンド情報を抜き出す。
【０１６２】
続いて、各計算ノード（例えば、各計算ユニット２１１）は、その抜き出されたスキャッタコマンド情報のそれぞれについて、以下の処理を行う。
【０１６３】
まず、各計算ノード（例えば、各計算ユニット２１１）は、抜き出されたスキャッタコマンド情報より、送信元計算ノードを抜き出す。続いて、各計算ノード（例えば、各計算ユニット２１１）は、図７に示した転送パターンを参照して、その送信元計算ノードからのスキャッタパケットから自計算ノード宛のデータを抽出するために使用する情報を作成する。
【０１６４】
例えば、送信元計算ノード２１−１からグループＩＤ（１）へ送信されるスキャッタパケットは、スキャッタＩＤ（１）のスキャッタパケットである。スキャッタＩＤ（１）ののスキャッタパケットは、計算ノード２１−１、２１−２、２１−３、２１−４に対して、それぞれ順に、８バイトのデータ、８バイトのデータ、８バイトのデータ、８バイトのデータを送信するために使用される。
【０１６５】
計算ノード２１−３には、計算ノード２１−１を送信元計算ノードとするスキャッタＩＤ（１）のスキャッタパケットが転送される。
【０１６６】
図７に示した転送パターンによれば、このスキャッタパケットのデータ部の１６バイト目（先頭１６バイトは、２１−１への８バイト＋２１−２への８バイト）からの８バイトのデータが、計算ノード２１−３が受信すべきデータ（計算ノード２１−３宛のデータ）となる。
【０１６７】
このため、計算ノード２１−３（例えば、計算ノード２１−３内の計算ユニット２１１）は、図７に示した転送パターンを参照し、スキャッタＩＤ（１）のスキャッタパケットのデータ部の１６バイト目からの８バイトのデータ（計算ノード２１−３宛のデータ）を抽出するための情報として、追加情報を生成する。この追加情報は、スキャッタＩＤ＝１、受信オフセット１６、および、受信データサイズ＝８を示す。
【０１６８】
また、計算ノード２１−３（例えば、計算ノード２１−３内の計算ユニット２１１）は、図７に示した転送パターンを参照し、計算ノード２１−１からの計算ノード２１−３宛のデータを書き込むメモリアドレスとして「１２８」を特定する。
【０１６９】
その後、計算ノード２１−３（例えば、計算ノード２１−３内の計算ユニット２１１）は、送信元計算ノードとメモリアドレスと追加情報とが設定されたスキャッタコマンド受信情報を作成し、そのスキャッタコマンド受信情報を、自計算ノードコマンド受信情報に設定する。
【０１７０】
以下、各計算ノード（例えば、各計算ユニット２１１）は、上記と同様に、スキャッタコマンド受信情報を作成していき、それらスキャッタコマンド受信情報を、自計算ノードコマンド受信情報に設定していく。図１０（ｂ）は、計算ノード２１−３にて作成された自計算ノードコマンド受信情報を示した図である。
【０１７１】
次に、各計算ノード（例えば、各計算ユニット２１１）は、保持部２１３内の受信予定情報２１３２およびスキャッタ送信予定情報２１３３（図５参照）を更新する「通信制御情報更新処理」を行う。
【０１７２】
各計算ノード（例えば、各計算ユニット２１１）は、通信コマンド生成処理で作成された全コマンド送信情報から、自計算ノードが送信するスキャッタパケットについてのスキャッタコマンド情報を抜き出す。
【０１７３】
各計算ノードは、スキャッタコマンド情報を抜き出すと、そのスキャッタコマンド情報に基づいて、保持部２１３内のスキャッタ送信予定情報２１３３を更新し、同時に、保持部２１３内の受信予定情報２１３２の更新を行う。
【０１７４】
図１１は、通信制御情報更新処理後の計算ノード２１−１内の保持部２１３が保持する情報を示した図である。
【０１７５】
図１１では、図９に示した保持部２１３内の情報（初期状態での保持部２１３内の情報）と比べて、通信制御情報更新処理により、計算ノード２１−１が受信すべきパケットの情報（受信予定情報２１３２内の各レコード）、および、送信すべきスキャッタパケットの情報（スキャッタ送信予定情報２１３３内の各送信レコード）が追加されている。
【０１７６】
通信制御情報更新処理が終了すると、各計算ノード（例えば、各計算ユニット２１１）は、「通信コマンド送信処理」を行う。
【０１７７】
通信コマンド送信処理では、各計算ノードは、通信コマンド生成処理で生成された全コマンド送信情報のうち、自計算ノードが送信元になっているスキャッタコマンド情報に基づいて、実際にスキャッタコマンド発行要求を発行し、スキャッタパケットの送信を行う。
【０１７８】
各計算ノードが複数のスキャッタコマンド発行要求を発行することになるが、複数のスキャッタコマンド発行要求の発行順序は問わない。本動作例では、スキャッタＩＤの小さい順にスキャッタコマンド発行要求を発行するとする。
【０１７９】
通信コマンド送信処理では、まず、各計算ノードの計算ユニット２１１が、全コマンド送信情報のうち、自計算ノードが発行すべきスキャッタコマンドの情報であるスキャッタコマンド情報から、スキャッタＩＤを抜き出す。
【０１８０】
計算ユニット２１１は、スキャッタＩＤを抜き出すと、そのスキャッタＩＤについてのスキャッタコマンド発行要求を送信部２１４に発行する。
【０１８１】
例えば、計算ノード２１−１では、計算ユニット２１１は、送信部２１４に対して、スキャッタＩＤ「１」を含むスキャッタコマンド発行要求と、スキャッタＩＤ「２」を含むスキャッタコマンド発行要求と、スキャッタＩＤ「３」を含むスキャッタコマンド発行要求と、スキャッタＩＤ「４」を含むスキャッタコマンド発行要求と、を順に発行する。
【０１８２】
送信部２１４がスキャッタコマンド発行要求を受け付けると、送信部２１４内の送信命令処理部２１４１は、そのスキャッタコマンド発行要求が保持するスキャッタＩＤを抜き出す。送信命令処理部２１４１は、スキャッタＩＤを抜き出すと、そのスキャッタＩＤを含むスキャッタパケット生成要求を、パケット生成部２１４２に発行する。
【０１８３】
パケット生成部２１４２は、スキャッタパケット生成要求を受け付けると、スキャッタパケット生成要求が保持するスキャッタＩＤを含む送信用レコードを、保持部２１３より取得する。
【０１８４】
例えば、計算ノード２１−１が、スキャッタＩＤ４にて特定されるスキャッタパケットを発行する場合、パケット生成部２１４２は、保持部２１３より、グループＩＤ（１）、メモリアドレスリスト（［９６、１０４、１１２、１２０］）およびデータサイズリスト（［８、８、８、８］）を含む送信用レコードを取得する。
【０１８５】
パケット生成部２１４２は、グループＩＤ（１）、メモリアドレスリスト（［９６、１０４、１１２、１２０］）およびデータサイズリスト（［８、８、８、８］）を含む送信レコードを取得すると、スキャッタＩＤ「４」を含む送信用レコードを、保持部２１３内のスキャッタ送信予定情報２１３３から削除する。
【０１８６】
パケット生成部２１４２は、グループＩＤ（１）、メモリアドレスリスト（［９６、１０４、１１２、１２０］）およびデータサイズリスト（［８、８、８、８］）を含む送信用レコードを取得すると、そのメモリアドレスリスト（［９６、１０４、１１２、１２０］）およびデータサイズリスト（［８、８、８、８］）を元に、メモリ２１２に対して、データ読み出し要求を発行する。
【０１８７】
このデータ読み出し要求により、メモリ２１２のアドレス９６からの８バイトのデータ「１１３」、アドレス１０４からの８バイトのデータ「１１４」、アドレス１１２からの８バイトのデータ「１１５」、アドレス１２０からの８バイトのデータ「１１６」が、メモリ２１２より順に読み出される。
【０１８８】
パケット生成部２１４２は、メモリ２１２より読み出されたデータを読み出し順に結合し、その結合されたデータをデータ部として持つスキャッタパケットを作成する。
【０１８９】
図１２は、パケット生成部２１４２にて作成されたスキャッタパケットを示した図である。
【０１９０】
パケット生成部２１４２は、スキャッタパケットを生成すると、そのスキャッタパケットを、出力部２１４３に転送する。
【０１９１】
出力部２１４３は、スキャッタパケットを受け付けると、出力処理により、そのスキャッタパケットを相互接続網１０に対して送信する。
【０１９２】
相互接続網１０では、スキャッタパケットを受信すると、そのスキャッタパケットを、そのスキャッタパケットが含むグループＩＤに属する計算ノードに、マルチキャスト送信する。
【０１９３】
図１３は、計算ノード２１−１が送信したスキャッタＩＤ４のスキャッタパケットがマルチキャスト送信される様子を示した図である。
【０１９４】
次に、スキャッタパケットを受信した計算ノードが行う、スキャッタパケット受信処理について、図１２に示したスキャッタパケットを計算ノード２１−１６が受信する場合を例に説明する。
【０１９５】
スキャッタパケットは、まず、受信部２１５内の入力部２１５１にて受信される。
【０１９６】
入力部２１５１は、スキャッタパケットを受信すると、そのスキャッタパケットを、受信判定部２１５２に転送する。
【０１９７】
受信判定部２１５２は、スキャッタパケットを受け付けると、受信判定処理を実行する。
【０１９８】
受信判定処理では、受信判定部２１５２は、まず、スキャッタパケット内のコマンド情報を確認する。この例では、コマンド情報が１０（スキャタパケット）であるので、受信判定部２１５２は、データ抽出処理を実行する。
【０１９９】
データ抽出処理では、受信判定部２１５２は、まず、スキャッタパケットから、送信元計算ノード情報（２１−１）とスキャッタＩＤ（４）を読み出す。
【０２００】
受信判定部２１５２は、送信元計算ノード情報（２１−１）とスキャッタＩＤ（４）を読み出すと、保持部２１３を参照する。
【０２０１】
このとき、計算ノード２１−１６の保持部２１３には、図１４で示すような受信予定情報２１３２が保持されているとする。
【０２０２】
保持部２１３には、送信元計算ノード情報「２１−１」とスキャッタＩＤ「４」を示すスキャッタパケット用レコードがあるので、受信判定部２１５２は、スキャッタＩＤ「４」を示すスキャッタパケット用レコードの追加情報に示された受信オフセット「２４」および受信データサイズ「８」と、メモリアドレス「１２８」を読み出す。
【０２０３】
受信判定部２１５２は、受信オフセット「２４」と、受信データサイズ「８」と、メモリアドレス「１２８」と、を読み出すと、スキャッタＩＤ「４」を示すスキャッタパケット用レコードを削除する。
【０２０４】
受信判定部２１５２は、保持部２１３から、受信オフセットと受信データサイズと書き込みメモリアドレスを読み出すと、スキャッタパケットのデータ部から、スキャッタパケットのデータ部の先頭から受信オフセットだけずれた位置から受信データサイズ分のデータ「１１６」を抽出する。
【０２０５】
データ抽出処理が終了すると、受信判定部２１５２は、抽出データ「１１６」とメモリアドレス「１２８」とを、受信命令処理部２１５３に転送する。
【０２０６】
受信命令処理部２１５３は、抽出データ「１１６」とメモリアドレス「１２８」とを受け付けると、抽出データ「１１６」を、メモリ２１２のメモリアドレス「１２８」に書き込む。
【０２０７】
メモリ２１２に対してデータの書き込みが終了すると、受信命令処理部２１５３は、受信終了通知を計算ユニット２１２に対して送信して受信処理が完了する。
【０２０８】
全ての計算ノードが、通信コマンド生成処理で生成されたスキャッタコマンド情報のうち、それぞれの計算ノードが送信元となるスキャッタコマンド情報に応じたスキャッタパケットを上述のように送信し、また、送信されたスキャッタパケットが相互結合網１０でマルチキャスト転送により、各計算ノードに入力され、各計算ノードにて受信判定処理・データ抽出処理・データ書き込み処理からなる受信処理が実行されることで、全対全通信が実現される。
【０２０９】
本実施形態では、各計算ノードは、記憶部２１６と、送信部２１４と、受信部２１５と、を含む。計算ノードは、計算ノードの総数よりも小さい数のグループにグルーピングされている。
【０２１０】
記憶部２１６は、全対全通信時にグループ単位でグループに属する計算ノードに送信される特定データと、特定データがマルチキャストパケットに搭載される箇所をグループ単位で示す第１情報と、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す第２情報と、を記憶する。
【０２１１】
送信部２１４は、全対全通信時に、グループ単位でグループに属する計算ノードに送信される特定データを記憶部２１６から読み出し、グループ単位で、特定データが第１情報にて示された箇所に搭載されグループが送信先として指定されたマルチキャストパケット（上記では「スキャッタパケット」と称した）を生成し、そのマルチキャストパケット（スキャッタパケット）を相互結合網１０に送信する。
【０２１２】
受信部２１５は、相互結合網１０からマルチキャストパケット（スキャッタパケット）を受信すると、第２情報を参照して、そのマルチキャストパケット（スキャッタパケット）から自計算ノード宛のデータを抽出する。
【０２１３】
このため、本実施形態によれば、各計算ノードは、全対全通信を行う際に少なくとも２つの計算ノードに送信するデータを１つのパケットで送信でき、各計算ノードが送信するデータの送信回数を少なくすることができる。例えば、１６個の各計算ノードが、各計算ノードに対して１つ１つデータを転送していたのでは、計算ノードの個数分、つまり１５回（自計算ノードに送信する必要がないため、１６−１＝１５）の送信回数が必要だが、本実施形態によれば、各計算ノードが送信するデータの送信回数は、グルーピングされたグループの個数分だけでよい。本実施形態では４回でよく、送信回数が４分の１でよく、送信にかかるオーバーヘッドが削減できる。
【０２１４】
また、本実施形態によれば、各計算ノードが送信する送信データのデータサイズは、送信すべきデータのサイズを超えることはない。非特許文献１で開示された方法では、本実施形態と同数の計算ノードで全対全通信が実施される場合、本実施形態と比較して１計算ノードあたりに２倍のサイズのデータを送信する必要がある。
【０２１５】
また、本実施形態のように、クラスタ間ネットワーク１１とクラスタ内ネットワーク２２−１〜２２−４というように複数種類の性能を持つネットワークが存在する場合、クラスタ間ネットワークには、各クラスタ内ネットワークよりも多くのデータが往来するため、クラスタ間ネットワークの通信速度が遅くなる可能性が高い。
【０２１６】
クラスタ毎に計算ノードがグルーピングされた場合、クラスタ間ネットワークに流れるデータ量は、各計算ノードが各計算ノードに対して１つ１つデータを転送する場合と同量のデータしか流れる必要がない。
【０２１７】
また、計算ノードのグルーピングの方法によって、各計算ノードのデータ送信回数、または、受信パケットの個数が変わってくる。つまり、全対全通信で送信すべきデータのサイズや、相互結合網の構成・性能に応じて、計算ノードのグルーピングを変えることで、高性能な全対全通信を実施できるカスタマイズ性も持ち合わせているといえる。
【０２１８】
例えば、各計算ユニット２１１が、グループに属する計算ノードの数が、全対全通信にて通信されるデータの量が多くなるほど少なくなるように、複数の計算ノードを複数の計算ノードの数よりも少ない数のグループにグルーピングしてもよい。この場合、各計算ユニット２１１は、グルーピング手段として機能する。
【０２１９】
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明の要旨を逸脱しない範囲で当業者が理解しうる各種の変形が可能である。
【０２２０】
例えば、通信を制御するための情報は、保持部２１３にて保持されていたが、各計算ノードのメモリで保持されてもよい。
【０２２１】
また、本実施形態では、計算ノード上の各機能を有するハードウェアが処理を行う例を説明したが、コンピュータにて読み取り可能な記録媒体に記録されたソフトウェア（プログラム）が各計算ノード（コンピュータ）にて実行されることによって、各計算ノード（コンピュータ）が、計算ユニット２１１、メモリ２１２、保持部２１３、送信部２１４および受信部２１５として機能してもよい。
【０２２２】
また、本実施形態では、全対全通信の転送パターンを実際の通信コマンドに変換する通信コマンド生成処理を、各計算ノードが処理していたが、あらかじめ並列プログラムのコンパイラが通信コマンド生成処理を行って、通信コマンドを生成し、その生成された通信コマンドが、各計算ノードのメモリ２１２内のプログラム記憶部２１２２で保持されてもよい。
【０２２３】
（付記１）複数の計算機と、前記複数の計算機を相互に接続する相互結合網と、を含み、前記複数の計算機が前記相互結合網を介して全対全通信を行い、前記複数の計算機が前記計算機の数よりも小さい数のグループにグルーピングされた並列計算機での通信方法であって、
前記計算機が、全対全通信時に前記グループ単位で当該グループに属する計算機に送信される特定データと、前記特定データがマルチキャストパケットに搭載される箇所を前記グループ単位で示す第１情報と、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す第２情報と、を記憶手段に記憶する記憶ステップと、
前記計算機が、全対全通信時に、前記グループ単位で当該グループに属する計算機に送信される特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが前記第１情報にて示された箇所に搭載され当該グループが送信先として指定されたマルチキャストパケットを生成し、当該マルチキャストパケットを前記相互結合網に送信する送信ステップと、
前記相互結合網が、マルチキャストパケットを受信すると、当該マルチキャストパケットを、当該マルチキャストパケットにて指定された送信先に送信する転送ステップと、
前記計算機が、前記相互結合網からマルチキャストパケットを受信すると、前記第２情報を参照して、当該マルチキャストパケットから自計算機宛のデータを抽出する抽出ステップと、を含む通信方法。
【０２２４】
（付記２）付記１に記載の通信方法において、
前記グループ単位で当該グループに属する計算機にて計算機クラスタが構成される、通信方法。
【０２２５】
（付記３）付記１または２に記載の通信方法において、
前記計算機が、前記グループに属する計算機の数が、全対全通信にて通信されるデータの量が多くなるほど少なくなるように、前記複数の計算機を前記グループにグルーピングするグルーピングステップを、さらに含む通信方法。
【０２２６】
（付記４）マルチキャストパケットを受信すると当該マルチキャストパケットを当該マルチキャストパケットにて指定された送信先に送信する相互結合網を介して全対全通信を行う複数の計算機の１つとして使用され、前記複数の計算機が前記計算機の数よりも小さい数のグループにグルーピングされている、計算機での通信方法であって、
全対全通信時に前記グループ単位で当該グループに属する計算機に送信される特定データと、前記特定データがマルチキャストパケットに搭載される箇所を前記グループ単位で示す第１情報と、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す第２情報と、を記憶手段に記憶する記憶ステップと、
全対全通信時に、前記グループ単位で当該グループに属する計算機に送信される特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが前記第１情報にて示された箇所に搭載され当該グループが送信先として指定されたマルチキャストパケットを生成し、当該マルチキャストパケットを前記相互結合網に送信する送信ステップと、
前記相互結合網からマルチキャストパケットを受信すると、前記第２情報を参照して、当該マルチキャストパケットから自計算機宛のデータを抽出する抽出ステップと、を含む通信方法。
【０２２７】
（付記５）付記４に記載の通信方法において、
前記グループ単位で当該グループに属する計算機にて計算機クラスタが構成される、通信方法。
【０２２８】
（付記６）付記４または５に記載の通信方法において、
前記計算機が、前記グループに属する計算機の数が、全対全通信にて通信されるデータの量が多くなるほど少なくなるように、前記複数の計算機を前記グループにグルーピングするグルーピングステップを、さらに含む通信方法。
【０２２９】
（付記７）マルチキャストパケットを受信すると当該マルチキャストパケットを当該マルチキャストパケットにて指定された送信先に送信する相互結合網を介して全対全通信を行う複数の計算機の１つとして使用され、前記複数の計算機が前記計算機の数よりも小さい数のグループにグルーピングされている、コンピュータに、
全対全通信時に前記グループ単位で当該グループに属する計算機に送信される特定データと、前記特定データがマルチキャストパケットに搭載される箇所を前記グループ単位で示す第１情報と、自計算機宛のデータがマルチキャストパケットに搭載された箇所を示す第２情報と、を記憶手段に記憶する記憶手順と、
全対全通信時に、前記グループ単位で当該グループに属する計算機に送信される特定データを前記記憶手段から読み出し、前記グループ単位で、前記特定データが前記第１情報にて示された箇所に搭載され当該グループが送信先として指定されたマルチキャストパケットを生成し、当該マルチキャストパケットを前記相互結合網に送信する送信手順と、
前記相互結合網からマルチキャストパケットを受信すると、前記第２情報を参照して、当該マルチキャストパケットから自計算機宛のデータを抽出する抽出手順と、を実行させるためのプログラム。
【０２３０】
（付記８）付記７に記載のプログラムにおいて、
前記グループ単位で当該グループに属する計算機にて計算機クラスタが構成される、プログラム。
【０２３１】
（付記９）付記７または８に記載のプログラムにおいて、
前記グループに属する計算機の数が、全対全通信にて通信されるデータの量が多くなるほど少なくなるように、前記複数の計算機を前記グループにグルーピングするグルーピング手順を、前記コンピュータに実行させるプログラム。
【符号の説明】
【０２３２】
１０  相互結合網
１１  クラスタ間ネットワーク
２０−１〜２０−４  計算機クラスタ
２１−１〜２１−１６  計算ノード
２２−１〜２２−４  クラスタ内ネットワーク
２１１  計算ユニット
２１２  メモリ
２１２１  データ記憶部
２１２２  プログラム記憶部
２１３  通信制御情報保持部
２１４  送信部
２１４１  送信命令処理部
２１４２  パケット生成部
２１４３  出力部
２１５  受信部
２１５１  入力部
２１５２  受信判定部
２１５３  受信命令処理部
２１６  記憶部
【図１】
0005540694.tif 000002
【図２】
0005540694.tif 000003
【図３】
0005540694.tif 000004
【図４】
0005540694.tif 000005
【図５】
0005540694.tif 000006
【図６】
0005540694.tif 000007
【図７】
0005540694.tif 000008
【図８】
0005540694.tif 000009
【図９】
0005540694.tif 000010
【図１０】
0005540694.tif 000011
【図１１】
0005540694.tif 000012
【図１２】
0005540694.tif 000013
【図１３】
0005540694.tif 000014
【図１４】
0005540694.tif 000015
【図１５】
0005540694.tif 000016
【図１６】
0005540694.tif 000017