(57)【要約】【課題】プロセッサ間通信の高速化が可能なプロセッサ間通信システムを提供する。【解決手段】プロセッサ間通信システムは、複数のプロセッサと、複数のプロセッサのいずれかからマルチキャストパケットを受信するとそのパケットを複数のプロセッサのうちそのパケットに宛先として指定された複数のプロセッサに転送する転送装置を含む。各プロセッサは、記憶手段、記憶手段内の基準書込み位置を示す位置情報を保持する保持手段、基準書込み位置を基準にして自プロセッサ用に予め設定された書込み領域を表した調整値とデータが記載されたマルチキャストパケットを転送装置に送信する送信手段、および、送信されたマルチキャストパケットを転送装置を介して受信すると、そのパケットに記載された調整値と保持手段内の位置情報とに基づいて記憶手段における書込み位置を決定しその書込み位置にパケットに記載されたデータを格納する受信手段を含む。【選択図】図１
2009301101.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサと、前記複数のプロセッサのいずれかからマルチキャストパケットを受信すると、当該マルチキャストパケットを、前記複数のプロセッサのうち当該マルチキャストパケットに宛先として指定された複数のプロセッサに転送する転送装置と、を含むプロセッサ間通信システムであって、
前記複数のプロセッサのそれぞれは、
記憶手段と、
前記記憶手段内の基準書込み位置を示す位置情報を保持する保持手段と、
前記基準書込み位置を基準にして自プロセッサ用に予め設定された書込み領域を表した調整値と、データと、が記載されたマルチキャストパケットを、前記転送装置に送信する送信手段と、
送信された前記マルチキャストパケットを、前記転送装置を介して受信すると、当該マルチキャストパケットに記載された調整値と前記保持手段内の位置情報とに基づいて、前記記憶手段における書込み位置を決定し、当該書込み位置に、当該マルチキャストパケットに記載されたデータを格納する受信手段と、を含む、プロセッサ間通信システム。
【請求項２】
請求項１に記載のプロセッサ間通信システムにおいて、
前記データは、前記複数のプロセッサのすべてに格納されるデータである、プロセッサ間通信システム。
【請求項３】
請求項１または２に記載のプロセッサ間通信システムにおいて、
前記複数のプロセッサのそれぞれは、予め、前記保持手段に前記位置情報を設定する制御手段をさらに含む、プロセッサ間通信システム。
【請求項４】
請求項１から３のいずれか１項に記載のプロセッサ間通信システムにおいて、
前記送信手段は、前記保持手段を指定する指定情報と、前記データと、前記調整値と、が記載されたマルチキャストパケットを、前記転送装置に送信し、
前記受信手段は、前記送信されたマルチキャストパケットを、前記転送装置を介して受信すると、当該マルチキャストパケットに記載された調整値と、当該マルチキャストパケットに記載の指定情報にて指定された保持手段内の位置情報と、に基づいて、前記書込み位置を決定し、当該書込み位置に、当該マルチキャストパケットに記載されたデータを格納する、プロセッサ間通信システム。
【請求項５】
請求項４に記載のプロセッサ間通信システムにおいて、
前記複数のプロセッサのそれぞれは、複数のタスクを並列に実行し、
前記保持手段は、前記タスクごとに設けられており、
前記指定情報は、前記複数のタスクのうちの特定のタスクに対応する前記保持手段を指定するものである、プロセッサ間通信システム。
【請求項６】
受信したマルチキャストパケットを複数の送信先に送信するマルチキャスト機能を有する転送装置に他のプロセッサと共に接続されるプロセッサであって、
記憶手段と、
前記記憶手段内の基準書込み位置を示す位置情報を保持する保持手段と、
前記基準書込み位置を基準にして自プロセッサ用に予め設定された書込み領域を表した調整値と、データと、が記載されたマルチキャストパケットを、前記転送装置に送信する送信手段と、
送信された前記マルチキャストパケットを、前記転送装置を介して受信すると、当該マルチキャストパケットに記載された調整値と前記保持手段内の位置情報とに基づいて、前記記憶手段における書込み位置を決定し、当該書込み位置に、当該マルチキャストパケットに記載されたデータを格納する受信手段と、を含むプロセッサ。
【請求項７】
請求項６に記載のプロセッサにおいて、
前記データは、前記複数のプロセッサのすべてに格納されるデータである、プロセッサ。
【請求項８】
自プロセッサ内の記憶手段内の基準書込み位置を示す位置情報を保持する保持手段を個別に有する複数のプロセッサと、前記複数のプロセッサと接続する転送装置と、を含むプロセッサ間通信システムが行うプロセッサ間通信方法であって、
前記複数のプロセッサのうちの任意の１つのプロセッサが、前記基準書込み位置を基準にして自プロセッサ用に予め設定された書込み領域を表した調整値と、データと、が記載されたマルチキャストパケットを、前記転送装置に送信する送信ステップと、
前記転送装置が、前記マルチキャストパケットを受信すると、当該マルチキャストパケットを、前記複数のプロセッサのうち当該マルチキャストパケットに宛先として指定された複数のプロセッサに転送する転送ステップと、
前記マルチキャストパケットに宛先として指定された複数のプロセッサが、前記マルチキャストパケットを受信すると、当該マルチキャストパケットに記載された調整値と、自プロセッサ内の保持手段内の位置情報と、に基づいて、前記記憶手段における書込み位置を決定し、当該書込み位置に、当該マルチキャストパケットに記載されたデータを格納する受信ステップと、を含むプロセッサ間通信方法。
【請求項９】
請求項８に記載のプロセッサ間通信方法において、
前記データは、前記複数のプロセッサのすべてに格納されるデータである、プロセッサ間通信方法。
【請求項１０】
請求項８または９に記載のプロセッサ間通信方法において、
前記複数のプロセッサのそれぞれが、予め、前記保持手段に前記位置情報を設定する制御ステップをさらに含む、プロセッサ間通信方法。
【請求項１１】
請求項８から１０のいずれか１項に記載のプロセッサ間通信方法において、
前記送信ステップでは、前記保持手段を指定する指定情報と、前記データと、前記調整値と、が記載されたマルチキャストパケットを、前記転送装置に送信し、
前記受信ステップでは、前記転送装置から前記マルチキャストパケットが受信されると、当該マルチキャストパケットに記載された調整値と、当該マルチキャストパケットに記載の指定情報にて指定された保持手段内の位置情報と、に基づいて、前記書込み位置を決定し、当該書込み位置に、当該マルチキャストパケットに記載されたデータを格納する、プロセッサ間通信方法。
【請求項１２】
請求項１１に記載のプロセッサ間通信方法において、
前記複数のプロセッサのそれぞれは、複数のタスクを並列に実行し、
前記保持手段は、前記タスクごとに設けられており、
前記指定情報は、前記複数のタスクのうちの特定のタスクに対応する前記保持手段を指定するものである、プロセッサ間通信方法。
【請求項１３】
受信したマルチキャストパケットを複数の送信先に送信するマルチキャスト機能を有する転送装置に他のプロセッサと共に接続されるプロセッサが行う通信方法であって、
記憶手段内の基準書込み位置を示す位置情報を保持手段に保持する保持ステップと、
前記基準書込み位置を基準にして自プロセッサ用に予め設定された書込み領域を表した調整値と、データと、が記載されたマルチキャストパケットを、前記転送装置に送信する送信ステップと、
前記送信されたマルチキャストパケットを、前記転送装置を介して受信すると、当該マルチキャストパケットに記載された調整値と、前記保持手段内の位置情報と、に基づいて、前記記憶手段における書込み位置を決定し、当該書込み位置に、当該マルチキャストパケットに記載されたデータを格納する受信ステップと、を含む通信方法。
【請求項１４】
請求項１３に記載の通信方法において、
前記データは、前記複数のプロセッサのすべてに格納されるデータである、通信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサ間通信システム、プロセッサ、プロセッサ間通信方法、および、通信方法に関し、特に、複数のプロセッサのそれぞれが他のプロセッサからデータを収集するギャザー処理を高速化するための、プロセッサ間通信システム、プロセッサ、プロセッサ間通信方法、および、通信方法に関する。
【背景技術】
【０００２】
MPI（Message Passing Interface）ライブラリは、並列コンピュータ用の並列プログラムが書かれる場合に、最もよく使われる通信ライブラリの１つである。MPIライブラリには、複数のプロセッサからデータを集めて、集めたデータを複数のプロセッサすべてに配るMPI_Allgather()という関数がある。
【０００３】
非特許文献１には、MPIライブラリのMPI_Allgather()の通信方法として、Recursive Doublingというアルゴリズムが紹介されている。
【０００４】
図１１は、Recursive Doublingを説明するための説明図である。
【０００５】
ここでは、プロセッサＡ０〜Ａ７の８個のプロセッサのそれぞれが、MPI_Allgather()を用いて、データＤ０〜Ｄ７をギャザー（収集）する場合を説明する。
【０００６】
なお、プロセッサＡ０にはプロセッサ番号「０」が付与され、プロセッサＡ１にはプロセッサ番号「１」が、プロセッサＡ２にはプロセッサ番号「２」が、プロセッサＡ３にはプロセッサ番号「３」が付与されている。プロセッサＡ４にはプロセッサ番号「４」が付与され、プロセッサＡ５にはプロセッサ番号「５」が、プロセッサＡ６にはプロセッサ番号「６」が、プロセッサＡ７にはプロセッサ番号「７」が付与されている。
【０００７】
また、各プロセッサ番号は、３ビットの２進数で表されているとする。
【０００８】
ステップ１Ａでは、その３ビットの２進数のうち下から１ビット目をドントケアにした場合に同じ内容となるプロセッサ番号が付与されている２つのプロセッサ間で、各プロセッサに格納されているデータが交換される。すなわち、プロセッサＡ０およびＡ１の間、プロセッサＡ２およびＡ３の間、プロセッサＡ４およびＡ５の間、プロセッサＡ６およびＡ７の間で、各プロセッサは、自己が有するデータを相手に送る。
【０００９】
ステップ１Ａが完了した時点では、プロセッサＡ０およびＡ１がデータＤ０およびＤ１を格納し、プロセッサＡ２およびＡ３がデータＤ２およびＤ３を、プロセッサＡ４およびＡ５がデータＤ４およびＤ５を、プロセッサＡ６およびＡ７がデータＤ６およびＤ７を格納している。
【００１０】
ステップ２Ａでは、プロセッサ番号を表す３ビットの２進数のうち下から２ビット目をドントケアにした場合に同じ内容となるプロセッサ番号が付与されている２つのプロセッサ間で、各プロセッサに格納されているデータが交換される。すなわち、プロセッサＡ０およびＡ２の間、プロセッサＡ１およびＡ３の間、プロセッサＡ４およびＡ６の間、プロセッサＡ５およびＡ７の間で、各プロセッサは、自己が有するデータを相手に送る。
【００１１】
ステップ２Ａが完了した時点では、プロセッサＡ０〜Ａ３がデータＤ０〜Ｄ３を格納し、プロセッサＡ４〜Ａ７がデータＤ４〜Ｄ７を格納している。
【００１２】
ステップ３Ａでは、プロセッサ番号を表す３ビットの２進数のうち下から３ビット目をドントケアにした場合に同じ内容となるプロセッサ番号が付与されている２つのプロセッサ間で、各プロセッサに格納されているデータが交換される。すなわち、プロセッサＡ０およびＡ４の間、プロセッサＡ１およびＡ５の間、プロセッサＡ２およびＡ６の間、プロセッサＡ３およびＡ７の間で、各プロセッサは、自己が有するデータを相手に送る。
【００１３】
ステップ３Ａが完了した時点では、プロセッサＡ０〜Ａ７がデータＤ０〜Ｄ７を格納して、MPI_Allgather()が完了する。
【００１４】
プロセッサ数をＰ、各プロセッサから集めるデータのサイズ（データサイズ）をＮバイトとすると、Recursive Doublingでは、logＰ回のステップで、logＰ回の通信が行われ、全ステップで、各プロセッサが、Ｎ（Ｐ−１）バイトのデータを送信し、Ｎ（Ｐ−１）バイトのデータを受信することになる。
【００１５】
１回の通信にかかるレイテンシをα、１バイトの通信にかかる時間（スループット）をβとすると、Recursive Doublingでの通信時間は、logＰ×α＋Ｎ（Ｐ−１）×βとなる。
【００１６】
特許文献１には、１つのプロセッサから送信されたパケットをコピーして他のプロセッサに送信するマルチキャスト機能を有するネットワークを含む並列コンピュータシステムにおいて、マルチキャストの宛先プロセッサごとに書き込みアドレスが異なる場合にでも、ネットワークのマルチキャスト機能を用いることを可能にする技術が開示されている。
【００１７】
特許文献１では、宛先プロセッサごとに書き込みアドレスを設定できるアドレスレジスタを、各プロセッサ内の受信装置が有し、受信データの書き込みに用いる書き込みアドレスを、そのアドレスレジスタに予め設定しておく技術が開示されている。
【特許文献１】特開平９−２９７７４６号公報
【非特許文献１】インプルービング  ザ  パフォーマンス  オブ  コレクティブ  オペレーション  イン  ＭＰＩＣＨ（Improving the Performance of Collective Operations in MPICH）、Rajeev Thakur and William Gropp、Euro PVM/MPI 2003、2003
【発明の開示】
【発明が解決しようとする課題】
【００１８】
非特許文献１に記載されているRecursive Doublingでは、プロセッサ数をＰとすると、logＰ回のステップでlogＰ回の通信を行う必要がある。
【００１９】
並列コンピュータの規模が大きくなると、プロセッサ間の距離が大きくなり、１回の通信にかかるレイテンシが大きくなる。ネットワークのスループットは新しい技術が導入されて年々高くなるが、通信のレイテンシは、並列コンピュータの規模が大きくなるにつれて大きくなるため、その改善は困難である。
【００２０】
また、Recursive Doublingでは、ギャザー処理に参加するプロセッサ台数が２のべき乗でない場合、通信回数がlogＰよりも多くなり、ギャザー処理にかかる時間が長くなる。そして、MPI_Allgatherv()のようにプロセッサによりギャザー（収集）するデータサイズが異なる場合には、１ステップで通信するデータ量がプロセッサによって異なる。このため、１ステップにかかる時間が長くなる。
【００２１】
また、特許文献１に開示されているアドレスレジスタを用いるマルチキャストの方法では、受信したパケットのデータをメモリに書き込むごとに、アドレスレジスタの値が更新される。このため、複数のプロセッサから同時に同じアドレスレジスタを使うマルチキャストパケットが送信された場合は、プロセッサによって受信するパケットの順番が異なる可能性がある。よって、プロセッサごとに、ギャザー（収集）されたデータが異なるアドレスに書き込まれる可能性がある。
【００２２】
従って、特許文献１に開示されているアドレスレジスタを用いるマルチキャストの方法を用いるには、送信プロセッサごとに異なるアドレスレジスタを設け、各プロセッサからのデータを書き込むアドレスを、送信元のプロセッサに対応するアドレスレジスタ内の値を用いて設定する必要がある。
【００２３】
しかしながら、ギャザー処理に参加するプロセッサ台数が多くなると、プロセッサ台数分のアドレスレジスタを受信装置内に実装することは困難になる。
【００２４】
また、使用するアドレスレジスタ数が多くなると、マルチキャストパケットのヘッダに記述される、アドレスレジスタ指定用ビット数が大きくなる。そのため、パケットヘッダが大きくなり、パケットに占めるヘッダの割合が大きくなり、パケットに占めるデータの割合が小さくなる。
【００２５】
また、ギャザー処理を行う前に、書き込みアドレスがアドレスレジスタに設定されるが、使用するアドレスレジスタ数が多くなると、書き込みアドレスの設定回数が多くなり、ギャザー処理を行う前に行われる処理の時間が長くなり、オーバヘッドが大きくなる。
【００２６】
本発明の目的は、上述した課題を解決することが可能な、プロセッサ間通信システム、プロセッサ、プロセッサ間通信方法、および、通信方法を提供することである。
【課題を解決するための手段】
【００２７】
本発明のプロセッサ間通信システムは、複数のプロセッサと、前記複数のプロセッサのいずれかからマルチキャストパケットを受信すると、当該マルチキャストパケットを、前記複数のプロセッサのうち当該マルチキャストパケットに宛先として指定された複数のプロセッサに転送する転送装置と、を含むプロセッサ間通信システムであって、前記複数のプロセッサのそれぞれは、記憶手段と、前記記憶手段内の基準書込み位置を示す位置情報を保持する保持手段と、前記基準書込み位置を基準にして自プロセッサ用に予め設定された書込み領域を表した調整値と、データと、が記載されたマルチキャストパケットを、前記転送装置に送信する送信手段と、送信された前記マルチキャストパケットを、前記転送装置を介して受信すると、当該マルチキャストパケットに記載された調整値と前記保持手段内の位置情報とに基づいて、前記記憶手段における書込み位置を決定し、当該書込み位置に、当該マルチキャストパケットに記載されたデータを格納する受信手段と、を含む。
【００２８】
本発明のプロセッサは、受信したマルチキャストパケットを複数の送信先に送信するマルチキャスト機能を有する転送装置に他のプロセッサと共に接続されるプロセッサであって、記憶手段と、前記記憶手段内の基準書込み位置を示す位置情報を保持する保持手段と、前記基準書込み位置を基準にして自プロセッサ用に予め設定された書込み領域を表した調整値と、データと、が記載されたマルチキャストパケットを、前記転送装置に送信する送信手段と、送信された前記マルチキャストパケットを、前記転送装置を介して受信すると、当該マルチキャストパケットに記載された調整値と前記保持手段内の位置情報とに基づいて、前記記憶手段における書込み位置を決定し、当該書込み位置に、当該マルチキャストパケットに記載されたデータを格納する受信手段と、を含む。
【００２９】
本発明のプロセッサ間通信方法は、自プロセッサ内の記憶手段内の基準書込み位置を示す位置情報を保持する保持手段を個別に有する複数のプロセッサと、前記複数のプロセッサと接続する転送装置と、を含むプロセッサ間通信システムが行うプロセッサ間通信方法であって、前記複数のプロセッサのうちの任意の１つのプロセッサが、前記基準書込み位置を基準にして自プロセッサ用に予め設定された書込み領域を表した調整値と、データと、が記載されたマルチキャストパケットを、前記転送装置に送信する送信ステップと、前記転送装置が、前記マルチキャストパケットを受信すると、当該マルチキャストパケットを、前記複数のプロセッサのうち当該マルチキャストパケットに宛先として指定された複数のプロセッサに転送する転送ステップと、前記マルチキャストパケットに宛先として指定された複数のプロセッサが、前記マルチキャストパケットを受信すると、当該マルチキャストパケットに記載された調整値と、自プロセッサ内の保持手段内の位置情報と、に基づいて、前記記憶手段における書込み位置を決定し、当該書込み位置に、当該マルチキャストパケットに記載されたデータを格納する受信ステップと、を含む。
【００３０】
本発明の通信方法は、受信したマルチキャストパケットを複数の送信先に送信するマルチキャスト機能を有する転送装置に他のプロセッサと共に接続されるプロセッサが行う通信方法であって、記憶手段内の基準書込み位置を示す位置情報を保持手段に保持する保持ステップと、前記基準書込み位置を基準にして自プロセッサ用に予め設定された書込み領域を表した調整値と、データと、が記載されたマルチキャストパケットを、前記転送装置に送信する送信ステップと、前記送信されたマルチキャストパケットを、前記転送装置を介して受信すると、当該マルチキャストパケットに記載された調整値と、前記保持手段内の位置情報と、に基づいて、前記記憶手段における書込み位置を決定し、当該書込み位置に、当該マルチキャストパケットに記載されたデータを格納する受信ステップと、を含む。
【発明の効果】
【００３１】
本発明によれば、他のプロセッサからデータを収集する処理時間に占めるネットワークのレイテンシ分を少なくできる。また、データ収集に参加するプロセッサ数が２のべき乗でない場合や、データサイズがプロセッサごとに異なる場合でも、他のプロセッサからデータを収集する通信時間が長くなることを防止可能になる。また、他のプロセッサからデータを収集するために使用するアドレスレジスタに数を、参加するプロセッサ数によらず少なくすることが可能になる。
【発明を実施するための最良の形態】
【００３２】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００３３】
（第１の実施の形態）
図１は、本発明の第１の実施の形態のプロセッサ間通信システムを示したブロック図である。
【００３４】
図１において、プロセッサ間通信システムは、プロセッサ１０１と、複数のプロセッサ１０１ａ〜１０１ａと、プロセッサ間ネットワーク１０２と、を含む。
【００３５】
プロセッサ１０１と複数のプロセッサ１０１ａ〜１０１ａは、マルチキャスト機能を持つプロセッサ間ネットワーク１０２を介して接続されている。プロセッサ１０１と複数のプロセッサ１０１ａ〜１０１ａは、ギャザー処理に参加しているとする。なお、プロセッサ１０１とプロセッサ１０１ａは、同じ構成である。
【００３６】
プロセッサ間ネットワーク１０２は、一般的に転送装置と呼ぶことができる。
【００３７】
プロセッサ間ネットワーク１０２は、プロセッサ１０１および１０１ａ〜１０１ａのいずれかからマルチキャストパケットを受信すると、そのマルチキャストパケットを、プロセッサ１０１および１０１ａ〜１０１ａのうち、マルチキャストパケットの宛先として指定されたプロセッサに送信する。
【００３８】
なお、プロセッサ間ネットワーク１０２は、プロセッサ１０１および１０１ａ〜１０１ａのいずれかからマルチキャストパケットを受信すると、そのマルチキャストパケットを、プロセッサ１０１および１０１ａ〜１０１ａのすべてに送信してもよい。
【００３９】
プロセッサ１０１は、ＣＰＵ（Central Processing Unit）１１１と、メモリ１１２と、送信装置１１３と、受信装置１１４と、アドレスレジスタ１４０〜１４３と、を含む。なお、アドレスレジスタ１４０〜１４３は、受信装置１１４に含まれてもよい。ＣＰＵ１１１と、メモリ１１２と、送信装置１１３と、受信装置１１４と、アドレスレジスタ１４０〜１４３とは、バス１１０を介して、互いに接続されている。受信装置１１４と、アドレスレジスタ１４０〜１４３とは、直接、接続されている。
【００４０】
受信装置１１４は、ＦＩＦＯ（First-In First-Out）メモリ１２０と、パケットタイプレジスタ１２１と、パケット長レジスタ１２２と、デスティネーションアドレスレジスタ１２３と、書き込みワード数レジスタ１２４と、書き込みアドレスレジスタ１４４と、ＡＬＵ（Arithmetic and Logic Unit）１２５および１２６と、ページ変換テーブル１２７と、書き込みワード数決定回路１２８と、制御回路１２９と、ＭＵＸ（マルチプレクサ）１３０〜１３４と、を含む。
【００４１】
ＣＰＵ１１１は、一般的に制御手段と呼ぶことができる。
【００４２】
ＣＰＵ１１１は、例えば、プロセッサ１０１の動作を規定するプログラムをディスク（コンピュータにて読み取り可能な記録媒体）から読み取り実行することによって、プロセッサ１０１を制御する。
【００４３】
メモリ１１２は、一般的に記憶手段と呼ぶことができる。
【００４４】
メモリ１１２には、ギャザー処理に参加している各プロセッサから収集されたデータが格納される。
【００４５】
アドレスレジスタ１４０〜１４３のいずれかは、一般的に保持手段と呼ぶことができる。本実施形態ではアドレスレジスタ４個の場合の例を示しているが、アドレスレジスタの個数はいくつでもよい。
【００４６】
アドレスレジスタ１４０〜１４３の各々は、メモリ１１２内の基準書込み位置を示す基準アドレスを保持する。なお、基準アドレスは、一般的に、メモリ１１２内の基準書込み位置を示す位置情報と呼ぶことができる。
【００４７】
アドレスレジスタ１４０〜１４３には、ＣＰＵ１１１で実行される受信側のプロセスにより設定された基準アドレスが格納される。つまり、ＣＰＵ１１１は、予め、アドレスレジスタ１４０〜１４３に、基準アドレスを設定する。
【００４８】
なお、本実施形態では、各プロセッサにおいて、アドレスレジスタ１４２が、予めマルチキャストパケットと対応づけられた保持手段（マルチキャスト用保持部）として用いられる。なお、マルチキャスト用保持部は、アドレスレジスタ１４２に限らず、アドレスレジスタ１４０、１４１または１４３でもよい。
【００４９】
アドレスレジスタ１４０にはアドレスレジスタ番号「０」が付与され、アドレスレジスタ１４１にはアドレスレジスタ番号「１」が、アドレスレジスタ１４２にはアドレスレジスタ番号「２」が、アドレスレジスタ１４３にはアドレスレジスタ番号「３」が付与されている。
【００５０】
送信装置１１３は、一般的に送信手段と呼ぶことができる。
【００５１】
送信装置１１３は、基準アドレスを基準にして自プロセッサ用に予め設定されたメモリ１１２内の書込み領域を表した調整値と、データと、が記載されたマルチキャストパケットを、プロセッサ間ネットワーク１０２に送信する。以下、調整値を「オフセット」と称する。
【００５２】
なお、マルチキャストパケットに記載されたデータは、ギャザー処理に参加しているプロセッサのすべてに格納されるためのデータである。
【００５３】
例えば、送信装置１１３は、マルチキャスト用保持部として用いられるアドレスレジスタを指定する指定情報とデータとオフセットとが記載されたマルチキャストパケットを、プロセッサ間ネットワーク１０２に送信する。
【００５４】
図２は、送信装置１１３が送信するパケットの形式の一例を示した説明図である。
【００５５】
図２に示したパケット２００は、マルチキャストパケットとしても使用可能であり、また、シングルキャストパケットとしても使用可能である。なお、パケット２００の１ワード目と２ワード目が、パケットヘッダとして用いられる。
【００５６】
図２において、パケット２００の１ワード目には、パケットタイプ２０１と、パケット長２０２と、ルーティング情報２０３とが記載される。パケット２００の２ワード目には、パケット２００がシングルキャストパケットの場合には、シングルキャストパケットのデスティネーションアドレスが記載され、パケット２００がマルチキャストパケットの場合には、オフセットが記載される。パケット２００の３ワード目以降には、データが記載される。
【００５７】
パケットタイプ２０１は、１ビットのタイプ情報と、３ビットの書き込みアドレス指定情報と、４ビットのその他情報と、を示す。なお、書き込みアドレス指定情報は、一般的に指定情報と呼ぶことができる。
【００５８】
１ビットのタイプ情報は、パケット２００が、シングルキャストパケットか、または、マルチキャストパケットかを示す。これによりルーティング情報２０３の解釈が異なる。
【００５９】
３ビットの書き込みアドレス指定情報は、パケット２００の２ワード目の情報がシングルキャストパケットのデスティネーションアドレスであることを示すか、または、アドレスレジスタ１４０〜１４３の中からマルチキャスト用保持部であるアドレスレジスタを指定すると共にパケット２００の２ワード目の情報がオフセットであることを示す。
【００６０】
パケット長２０２は、パケット２００の３ワード目からのデータのバイト数を示す。
【００６１】
ルーティング情報２０３は、パケット２００がシングルキャストパケットの場合には、宛先プロセッサ番号を示し、パケット２００がマルチキャストパケットの場合には、マルチキャストのためのルーティング情報（例えば、複数の宛先プロセッサ番号）を示す。
【００６２】
図１に戻って、プロセッサ間ネットワーク１０２は、送信装置１１３からパケット２００を受信すると、パケット２００のルーティング情報２０３を参照する。
【００６３】
パケット２００がシングルキャストパケットの場合には、プロセッサ間ネットワーク１０２は、ルーティング情報２０３に従って、１つのプロセッサに、パケット２００を送信する。
【００６４】
一方、パケット２００がマルチキャストパケットの場合には、プロセッサ間ネットワーク１０２は、パケット２００をコピーし、ルーティング情報２０３に従って、複数のプロセッサに、パケット２００を送信する。
【００６５】
受信装置１１４は、一般的に受信手段と呼ぶことができる。
【００６６】
受信装置１１４は、自プロセッサ以外のプロセッサから送信されたマルチキャストパケットであるパケット２００、または、自プロセッサから送信されたマルチキャストパケットであるパケット２００を、プロセッサ間ネットワーク１０２を介して受信すると、パケット２００に記載されたオフセットと、マルチキャスト用保持部であるアドレスレジスタ１４２内の基準アドレスと、に基づいて、メモリ１１２における書込み位置を示す書き込みアドレスを決定する。
【００６７】
例えば、受信装置１１４は、マルチキャストパケットであるパケット２００を受信すると、パケット２００に記載されたオフセットと、パケットタイプ２０１に示されたアドレスレジスタに保持されている基準アドレスと、に基づいて、書き込みアドレスを決定する。
【００６８】
本実施の形態では、受信装置１１４は、パケット２００に記載されたオフセットと、パケットタイプ２０１に示されたアドレスレジスタ（アドレスレジスタ１４２）に保持されている基準アドレスとを、加算することによって、書き込みアドレスを決定する。
【００６９】
受信装置１１４は、その書き込みアドレスに、パケット２００に記載されたデータを格納する。
【００７０】
ＦＩＦＯメモリ１２０は、プロセッサ間ネットワーク１０２からのパケット２００を受信し格納する。
【００７１】
パケットタイプレジスタ１２１は、パケット２００に記載されたパケットタイプ２０１を格納する。
【００７２】
パケット長レジスタ１２２は、パケット２００に記載されたパケット長２０２を格納する。
【００７３】
デスティネーションアドレスレジスタ１２３は、パケット２００の２ワード目に記載されたデスティネーションアドレスまたはオフセットを格納する。
【００７４】
書き込みアドレスレジスタ１４４は、メモリ１１２における書き込みアドレスを格納する。
【００７５】
書き込みアドレスは、パケットタイプレジスタ１２１内のパケットタイプ２０１に基づいて決定される。本実施の形態では、制御回路１２９は、まず、パケットタイプ２０１に基づいてアドレス選択信号ａを設定する。続いて、制御回路１２９は、アドレス選択信号ａ等を用いて、ＭＵＸ１３０および１３４と、ＡＬＵ１２６と、を制御して、書き込みアドレスを決定する。この書き込みアドレスが、書き込みアドレスレジスタ１４４に設定される。
【００７６】
書き込みワード数決定回路１２８は、書き込みアドレスレジスタ１４４の値（書き込みアドレス）とパケット長レジスタ１２２の値（パケット長２０２）などに基づいて、メモリ１１２に対して書き込むデータのワード数を決定する。
【００７７】
書き込みワード数レジスタ１２４は、書き込みワード数決定回路１２８にて決定された書き込みワード数を格納する。
【００７８】
ＡＬＵ１２５は、書き込みワード数レジスタ１２４の値（書き込みワード数）とパケット長レジスタ１２２の値（パケット長２０２）に基づいて、残りパケット長を計算する。
【００７９】
ＡＬＵ１２６は、制御回路１２９に制御され、デスティネーションアドレスレジスタ１２３の値（デスティネーションアドレス）、または、デスティネーションアドレスレジスタ１２３の値（オフセット）とアドレスレジスタ１４０〜１４３のいずれかの値（基準アドレス）、または、書き込みアドレスレジスタ１４４の値（書き込みアドレス）と書き込みワード数レジスタ１２４の値（書き込みワード数）に基づいて、次回の書き込みアドレスを計算する。
【００８０】
ページ変換テーブル１２７は、制御回路１２９に制御され、論理アドレスである書き込みアドレスを、物理アドレスｂに変換して、ＭＵＸ１３３を介してバス１１０に出力する。
【００８１】
制御回路１２９は、受信装置１１４を制御する。例えば、制御回路１２９は、パケットタイプレジスタ１２１の値（パケットタイプ２０１）と書き込みワード数決定回路１２８からの情報（書き込みワード数）を元に、到着したパケット２００内のデータ（本体）をＦＩＦＯメモリ１２０から読み出し、メモリ１１２に書き込む処理を制御する。
【００８２】
ＭＵＸ１３０〜１３４は、制御回路１２９からの制御信号によって制御される。
【００８３】
次に、動作の概要を説明する。
【００８４】
本実施の形態では、ギャザー処理に参加する複数のプロセッサを宛先とするマルチキャストにより、ギャザー処理が行われる。
【００８５】
各プロセッサには、受信したマルチキャストパケット内のデータを書き込む領域の先頭アドレスを格納するためのアドレスレジスタ１４０〜１４３が、複数装備されている。なお、データを書き込む領域の先頭アドレスは、一般的に基準アドレスと呼ぶことができる。
【００８６】
ギャザー処理に参加する各プロセッサは、まず、ギャザー処理に使用するアドレスレジスタ（マルチキャスト用保持部）１４２に、ギャザー結果を格納する領域の先頭アドレスを設定する。なお、ギャザー結果を格納する領域、つまり、自プロセッサ用に予め設定されたメモリ１１２内の書込み領域は、各プロセッサ間で異なるように、予め設定されている。
【００８７】
そして、各送信装置１１３は、マルチキャストパケットに、ギャザー処理に使用するアドレスレジスタを特定するためのアドレスレジスタ番号と、自プロセッサから送るデータの格納位置（書込み位置）と先頭アドレスとの距離を示すオフセットと、を記載し、ギャザー処理に参加するすべてのプロセッサを宛先として、そのマルチキャストパケットを用いて、自プロセッサから送るデータを送信する。
【００８８】
マルチキャストパケットは、プロセッサ間ネットワーク１０２内でコピーされ、ギャザー処理に参加するすべてのプロセッサに送信される。
【００８９】
各プロセッサには、ギャザー処理に参加したすべてのプロセッサからのマルチキャストパケットが到着する。
【００９０】
各プロセッサの受信装置１１４は、マルチキャストパケットにて指定されたアドレスレジスタ１４２から、マルチキャストパケット内のデータを格納するメモリ１１２内の領域の先頭アドレスを読み出し、その先頭アドレスに、マルチキャストパケットに記載されたオフセットを加算して、マルチキャッストパケット内のデータを書き込む書き込みアドレスを計算する。
【００９１】
そして、受信装置１１４は、その書き込みアドレスに、マルチキャッストパケット内のデータを書き込む。
【００９２】
受信装置１１４は、すべてのマルチキャストパケットに対して、同じ処理を行う。ギャザー処理に参加するすべてのプロセッサで、すべてのマルチキャストパケットが受信された時点で、ギャザー処理が完了する。
【００９３】
次に、第１の実施の形態のパケット受信処理について、図１を参照しながら詳細に説明する。
【００９４】
プロセッサ１０１ａからプロセッサ間ネットワーク１０２を経由してプロセッサ１０１に到着したパケット２００は、受信装置１１４のＦＩＦＯメモリ１２０に格納される。
【００９５】
パケット２００の到着は、ＦＩＦＯメモリ１２０からの読み出し可能ワード数ｃによって、制御回路１２９に伝えられる。
【００９６】
制御回路１２９は、読み出し可能ワード数ｃを受け付けると、まず、読み出し信号ｄを用いて、ＦＩＦＯメモリ１２０から、パケット２００のヘッダ部分を読み出し、パケットタイプ２０１をパケットタイプレジスタ１２１に、パケット長２０２をパケット長レジスタ１２２に、デスティネーションアドレスまたはオフセット２０５をデスティネーションアドレスレジスタ１２３に書き込む。
【００９７】
続いて、制御回路１２９は、パケットタイプレジスタ１２１から、パケットタイプ２０１を読み出す。
【００９８】
パケットタイプ２０１内のタイプ情報がシングルキャストパケットを示す場合、制御回路１２９は、信号ａを用いて、ＭＵＸ１３０から、デスティネーションアドレスレジスタ１２３の値（デスティネーションアドレス）を出力させ、ＡＬＵ１２６に、ＭＵＸ１３０からの出力をそのまま書き込みアドレスレジスタ１４４に書き込む処理を実行させる。
【００９９】
よって、パケットタイプ２０１内のタイプ情報がシングルキャストパケットを示す場合、デスティネーションアドレスレジスタ１２３の値（デスティネーションアドレス）が、書き込みアドレスとして、書き込みアドレスレジスタ１４４に書き込まれる。
【０１００】
一方、パケットタイプ２０１内のタイプ情報がマルチキャストパケットを示す場合、制御回路１２９は、まず、信号ａを用いて、ＭＵＸ１３０から、パケットタイプ２０１内の書き込みアドレス指定情報で指定されたアドレスレジスタ１４２の値（先頭アドレス）を出力させ、また、ＭＵＸ１３４を制御してＭＵＸ１３４からデスティネーションアドレスレジスタ１２３の値（オフセット）を出力させる。
【０１０１】
続いて、制御回路１２９は、ＡＬＵ１２６に、ＭＵＸ１３０からの先頭アドレスとＭＵＸ１３４からのオフセットとを加算させ、その加算結果を、書き込みアドレスとして、書き込みアドレスレジスタ１４４に書き込む処理を実行させる。
【０１０２】
よって、パケットタイプ２０１内のタイプ情報がマルチキャストパケットを示す場合、アドレスレジスタ１４２の値（先頭アドレス）とデスティネーションアドレスレジスタ１２３の値（オフセット）とを加算した値が、書き込みアドレスとして、書き込みアドレスレジスタ１４４に書き込まれる。
【０１０３】
書き込みワード数決定回路１２８は、書き込みアドレスレジスタ１４４に設定された書き込みアドレスと、パケット長レジスタ１２２内のデータ長と、に基づいて、メモリ１１２への書き込み要求にしたがって、書き込むワード数を決定する。
【０１０４】
例えば、ＣＰＵ１１１にキャッシュメモリがある場合は、キャッシュラインの一部へのデータ書き込みに比べ、キャッシュライン全体へのデータ書き込みの方が高速に処理できる。そのため、書き込みワード数決定回路１２８は、書き込みアドレスレジスタ１４４に設定された書き込みアドレスがキャッシュライン境界でない場合には、まず、キャッシュライン境界までの書き込みを行い、その後、キャッシュライン全体への書き込みになるように書き込みワード数を決定する。
【０１０５】
書き込みワード数決定回路１２８は、その決定された書き込みワード数を、制御回路１２９に伝える。また、決定された書き込みワード数は、書き込みワード数レジスタ１２４に設定される。
【０１０６】
制御回路１２９は、書き込みワード数を受け付けると、書き込みアドレスレジスタ１４４に設定された書き込みアドレスを、ページ変換テーブル１２７を用いて、論理アドレスから物理アドレスｂに変換し、続いて、書き込むワード数分のデータを、ＦＩＦＯメモリ１２０から読み出し、物理アドレスｂとデータとを、メモリ書き込み要求として、ＭＵＸ１３３を介してバス１１０に送る。
【０１０７】
このメモリ書き込み要求によって、データが、メモリ１１２における書き込みアドレスに格納される。
【０１０８】
制御回路１２９は、メモリ書き込み要求の送信の終了に応じて、書き込みワード数レジスタ１２４内の書き込みワード数と、ＡＬＵ１２５と、を用いて、パケット長レジスタ１２２の値（パケット長）を更新する（書き込みワード数分減算する）。
【０１０９】
本実施の形態では、メモリ書き込み要求の送信が終了すると、制御回路１２９は、ＭＵＸ１３１に、パケット長レジスタ１２２の値（パケット長）を出力させ、ＡＬＵ１２５に、ＭＵＸ１３１からの出力（パケット長）から書き込みワード数レジスタ１２４内の値（書き込みワード数）を減算する処理を実行させる。
【０１１０】
続いて、制御回路１２９は、ＭＵＸ１３２に、ＡＬＵ１２５の出力（減算結果）をパケット長レジスタ１２２に書き込ませる。
【０１１１】
よって、パケット長レジスタ１２２には、残りのデータ長が格納される。
【０１１２】
また、制御回路１２９は、メモリ書き込み要求の送信の終了に応じて、書き込みワード数レジスタ１２４内の書き込みワード数と、ＡＬＵ１２６と、を用いて、書き込みアドレスレジスタ１４４の値を更新する（書き込みワード数分加算する）。
【０１１３】
本実施の形態では、メモリ書き込み要求の送信が終了すると、制御回路１２９は、ＭＵＸ１３０に、書き込みアドレスレジスタ１４４の値（書き込みアドレス）を出力させ、ＭＵＸ１３４に、書き込みワード数レジスタ１２４の値（書き込みワード数）を出力させる。
【０１１４】
続いて、制御回路１２９は、ＡＬＵ１２６に、ＭＵＸ１３０からの出力（書き込みアドレス）とＭＵＸ１３４からの出力（書き込みワード数）とを加算する処理を実行させ、その加算結果を書き込みアドレスレジスタ１４４に書き込む処理を実行させる。
【０１１５】
続いて、制御回路１２９は、書き込みワード数決定回路１２８に、更新されたパケット長レジスタ１２２内の値と書き込みアドレスレジスタ１４４の値を使って次にメモリ１１２に書き込むワード数を決定する処理を実行させる。
【０１１６】
制御回路１２９は、パケット長レジスタ１２２の値がゼロになるまで、上記処理を繰り返し、ＦＩＦＯメモリ１２０内にあるパケットで送られてきたデータすべてを、メモリ１１２に書き込む。これで１つのパケットの処理が終わる。
【０１１７】
次に、第１の実施の形態を使用したギャザー処理について図３Ａ〜図３Ｅを参照しながら説明する。
【０１１８】
ここでは、説明のために、プロセッサ０、プロセッサ１、プロセッサｉ、プロセッサｉ＋１の４つのプロセッサから送信されたマルチキャストパケットだけを示す。また、プロセッサｊ、プロセッサｊ＋１の２つのプロセッサに、それらのパケットが受信された場合だけを示す。
【０１１９】
しかし、本実施の形態のマルチキャストを用いたギャザー処理では、実際には、ギャザー処理に参加するすべてのプロセッサからマルチキャストパケットが送信され、参加するすべてのプロセッサにマルチキャストパケットが到着する。
【０１２０】
なお、プロセッサ０、プロセッサ１、プロセッサｉ、プロセッサｉ＋１、プロセッサｊ、および、プロセッサｊ＋１は、プロセッサ１０１と同一構成である。
【０１２１】
図３Ａは、ギャザー処理を行う前の状態を示した説明図である。
【０１２２】
図３Ａ〜３Ｅに示すギャザー処理の例では、マルチキャスト用保持部としてアドレスレジスタ１４２が使用されるので、各プロセッサ上のプロセスでは、アドレスレジスタ１４２に、書き込みアドレスの先頭アドレスが設定される。
【０１２３】
プロセッサｊでは、アドレスレジスタ１４２に、０ｘ００００１０００が設定されている。また、プロセッサｊ＋１では、アドレスレジスタ１４２に、０ｘ００１００００８が設定されている。
【０１２４】
プロセッサｊとプロセッサｊ＋１のメモリ１１２のイメージが書かれているが、ここでは、論理アドレスのメモリ空間が図示されている。
【０１２５】
また、プロセッサ０、プロセッサ１、プロセッサｉ、プロセッサｉ＋１が送るデータサイズとギャザーする領域の先頭アドレスから、それぞれが書き込むアドレスまでのオフセットが設定されている。
【０１２６】
この例では、各プロセッサが送信するデータサイズが異なるMPI_Allgatherv()の処理を示すが、MPI_Allgather()は、MPI_Allgatherv()の送信データサイズがすべて同じ場合である。
【０１２７】
MPI_Allgatherv()の場合、引数として、各プロセッサからのデータサイズのリストが渡されるので、各プロセッサは、送信するデータのオフセットとデータ長を決定することが可能である。
【０１２８】
また、MPI_Allgather()の場合は、各プロセッサから集めるデータサイズと、自分が何番目のプロセッサであるかがわかるので、各プロセッサは、送信データのオフセットを決定することが可能である。
【０１２９】
図３Ｂは、プロセッサ１からのマルチキャストパケットが、プロセッサｊとプロセッサｊ＋１に到着して、各メモリ１１２に書き込まれたところを示した説明図である。
【０１３０】
プロセッサ１のオフセットは０ｘ００００００４８であり、データ長が２７２バイトなので、まず、オフセットが０ｘ００００００４８でデータ長が２５６バイトのマルチキャストパケットが、プロセッサ１から送信される。
【０１３１】
次に、オフセットが０ｘ０００００１４８でデータ長が１６バイトのマルチキャストパケットが、プロセッサ１から送信される。
【０１３２】
いずれのパケットでも、アドレスレジスタ１４２を使用することが指定されている。
【０１３３】
プロセッサｊでは、アドレスレジスタ１４２の値である０ｘ００００１０００と最初のパケットに付加されたオフセット０ｘ００００００４８を加算した０ｘ００００１０４８から、２５６バイトのデータが書き込まれ、続いて、０ｘ００００１０００と２番目のパケットに付加されたオフセット０ｘ０００００１４８を加算した０ｘ００００１１４８から、１６バイトのデータが書き込まれる。
【０１３４】
プロセッサｊ＋１では、アドレスレジスタ１４２の値である０ｘ００１００００８と最初のパケットに付加されたオフセット０ｘ００００００４８を加算した０ｘ００１０００５０から、２５６バイトのデータが書き込まれ、続いて、０ｘ００１００００８と２番目のパケットに付加されたオフセット０ｘ０００００１４８を加算した０ｘ００１００１５０から、１６バイトのデータが書き込まれる。
【０１３５】
図３Ｃは、プロセッサｉからのマルチキャストパケットが、プロセッサｊとプロセッサｊ＋１に到着して、各メモリ１１２に書き込まれたところを示した説明図である。
【０１３６】
プロセッサｉのオフセットは０ｘ００００１０１０であり、データ長が５２０バイトなので、まず、オフセットが０ｘ００００１０１０でデータ長が２５６バイトのマルチキャストパケットが、プロセッサｉから送信される。
【０１３７】
次に、オフセットが０ｘ００００１１１０でデータ長が２５６バイトのマルチキャストパケットが、プロセッサｉから送信される。
【０１３８】
さらに、オフセットが０ｘ００００１２１０でデータ長が８バイトのマルチキャストパケットが、プロセッサｉから送信される。
【０１３９】
いずれのパケットでも、アドレスレジスタ１４２を使用することが指定されている。
【０１４０】
プロセッサｊでは、アドレスレジスタ１４２の値である０ｘ００００１０００と最初のパケットに付加されたオフセット０ｘ００００１０１０を加算した０ｘ００００２０１０から、２５６バイトのデータが書き込まれ、続いて、０ｘ００００１０００と２番目のパケットに付加されたオフセット０ｘ００００１１１０を加算した０ｘ００００２１１０から、２５６バイトのデータが書き込まれ、続いて、０ｘ００００１０００と３番目のパケットに付加されたオフセット０ｘ００００１２１０を加算した０ｘ００００２２１０から、８バイトのデータが書き込まれる。
【０１４１】
プロセッサｊ＋１では、アドレスレジスタ１４２の値である０ｘ００１００００８と最初のパケットに付加されたオフセット０ｘ００００１０１０を加算した０ｘ００１０１０１８から、２５６バイトのデータが書き込まれ、続いて、０ｘ００１００００８と２番目のパケットに付加されたオフセット０ｘ００００１１１０を加算した０ｘ００１０１１１８から、２５６バイトのデータが書き込まれ、続いて、０ｘ００１００００８と３番目のパケットに付加されたオフセット０ｘ００００１２１０を加算した０ｘ００１０１２１８から、８バイトのデータが書き込まれる。
【０１４２】
図３Ｄは、プロセッサ０からのマルチキャストパケットが、プロセッサｊとプロセッサｊ＋１に到着して、各メモリ１１２に書き込まれたところを示した説明図である。
【０１４３】
プロセッサ０のオフセットは０ｘ００００００００であり、データ長が７２バイトなので、オフセットが０ｘ００００００００でデータ長が７２バイトのマルチキャストパケットが、プロセッサ０から送信される。
【０１４４】
この場合も、パケットには、アドレスレジスタ１４２を使用することが指定されている。
【０１４５】
プロセッサｊでは、アドレスレジスタ１４２の値である０ｘ００００１０００とパケットに付加されたオフセット０ｘ００００００００を加算した０ｘ００００１０００から、７２バイトのデータが書き込まれる。
【０１４６】
プロセッサｊ＋１では、アドレスレジスタ１４２の値である０ｘ００１００００８とパケットに付加されたオフセット０ｘ００００００００を加算した０ｘ００１００００８から、７２バイトのデータが書き込まれる。
【０１４７】
図３Ｅは、プロセッサｉ＋１からのマルチキャストパケットが、プロセッサｊとプロセッサｊ＋１に到着して、各メモリ１１２に書き込まれたところを示した説明図である。
【０１４８】
プロセッサｉ＋１のオフセットは０ｘ００００１２１８であり、データ長が１６バイトなので、オフセットが０ｘ００００１２１８でデータ長が１６バイトのマルチキャストパケットが、プロセッサｉ＋１から送信される。
【０１４９】
この場合も、パケットには、アドレスレジスタ１４２を使用することが指定されている。
【０１５０】
プロセッサｊでは、アドレスレジスタ１４２の値である０ｘ００００１０００とパケットに付加されたオフセット０ｘ００００１２１８を加算した０ｘ００００２２１８から、１６バイトのデータが書き込まれる。
【０１５１】
プロセッサｊ＋１では、アドレスレジスタ１４２の値である０ｘ００１００００８とパケットに付加されたオフセット０ｘ００００１２１８を加算した０ｘ００１０１２２０から、１６バイトのデータが書き込まれる。
【０１５２】
図３Ａ〜図３Ｅの説明では、それぞれ１つのプロセッサから送信されたマルチキャストパケットが、プロセッサｊとプロセッサｊ＋１の両方に到着した場合を図示しているが、実際は、ネットワークの構成等により、受信するプロセッサによって、到着するマルチキャストパケットの順番が異なる場合がある。到着するマルチキャストパケットの順序が異なっても本実施の形態の効果は変わらない。
【０１５３】
本実施の形態によれば、受信装置１１４は、マルチキャストパケットを、プロセッサ間ネットワーク１０２を介して受信すると、そのマルチキャストパケットに記載されたオフセットとアドレスレジスタ１４２内の先頭アドレスとに基づいて、メモリ１１２における書込み位置を決定し、その書込み位置に、マルチキャストパケットに記載されたデータを格納する。
【０１５４】
このため、以下の効果を奏する。
【０１５５】
第１の効果は、各プロセッサが行うギャザー処理の送信回数を１回にでき、ギャザーの処理時間に占めるネットワークのレイテンシ分を少なくできることである。例えば、ギャザー処理における並列コンピュータの大規模化による通信のレイテンシの増加の影響を小さくできる。
【０１５６】
第２の効果は、ギャザー処理に参加するプロセッサ数が２のべき乗でない場合や、ギャザーするデータサイズがプロセッサごとに異なる場合でも、ギャザーの通信時間が長くならないことである。
【０１５７】
第３の効果は、アドレスレジスタを用いたマルチキャストによりギャザー処理を行う場合に、ギャザーに使用するアドレスレジスタの個数を少なくできる。例えば、ギャザーに使用するアドレスレジスタを、参加するプロセッサ数によらず１個にすることが可能になる。
【０１５８】
これにより、受信装置内に実装するアドレスレジスタの個数を少なくできる。また、マルチキャストパケットでアドレスレジスタを指定するビットが少なくてすむため、パケットヘッダを小さくできる。さらに、受信側プロセッサで予め設定するアドレスレジスタ数が１個なので、設定時間を短くでき、ギャザー処理のオーバヘッドを小さく抑えられる。
【０１５９】
本実施の形態では、マルチキャストパケットに記載されるデータは、複数のプロセッサのすべてに格納されるためのデータである。
【０１６０】
この場合、このデータとして、ギャザー処理で用いるデータが用いられると、ギャザー処理を短時間で行うことが可能になる。
【０１６１】
本実施の形態では、受信装置１１４は、マルチキャストパケットをプロセッサ間ネットワーク１０２を介して受信すると、そのマルチキャストパケットに記載されたオフセットと、そのマルチキャストパケットに記載の指定情報にて指定されたアドレスレジスタ内の先頭アドレスとに基づいて、メモリ１１２における書込み位置を決定し、その書込み位置に、そのマルチキャストパケットに記載されたデータを格納する。
【０１６２】
この場合、マルチキャストを用いたデータ収集に用いるアドレスレジスタを指定することによって、データを収集することが可能になる。
【０１６３】
本実施の形態では、ＣＰＵ１１１が、予め、データ収集に用いるアドレスレジスタに先頭アドレスを設定する。このため、先頭アドレスの設定を、自動的に行うことが可能になる。
【０１６４】
（第２の実施の形態）
図４は、本発明の第２の実施の形態の並列コンピュータのプロセッサを示したブロック図である。図４の中で図１と同じ構成の部分については、図１と同じ番号を振り、その説明は省略する。
【０１６５】
第２の実施の形態が第１の実施の形態と異なるのは、１つのプロセッサ１０１で同時に実行されるユーザタスクが複数あり、タスクごとに複数アドレスレジスタを有するアドレスレジスタテーブル１６０が、メモリ１１２上に実現されている点である。
【０１６６】
図５は、図４に示したメモリ１１２上のアドレスレジスタテーブル１６０の一例を示した説明図である。
【０１６７】
この例では、タスクごとに、アドレスレジスタが４個ある場合を示している。また、タスクｉｄが４ビットであり、タスクｉｄが０〜１５のいずれかを示す場合を示している。なお、タスク数とタスクごとのアドレスレジスタ数は、他の値をとることができる。
【０１６８】
図５に示したアドレスレジスタテーブル１６０は、図４に示したアドレスレジスタテーブルベースレジスタ１４５に０ｘ００２２０００００が設定されていて、タスクｉｄレジスタ１４６に７が設定され、アドレスレジスタ番号レジスタ１４７に２が設定されている場合の例である。
【０１６９】
この場合、アドレスレジスタ番号レジスタ１４７に設定された番号が付与されているアドレスレジスタが、タスクｉｄレジスタ１４６に設定されたタスクに対応するマルチキャスト用保持部として用いられる。なお、マルチキャスト用保持部は、一般的に保持手段と呼ぶことができる。
【０１７０】
各アドレスレジスタの最下位ビットは、そのアドレスレジスタに有効な値が入っているかどうかを示すバリッドビット（ｖ）である。
【０１７１】
もし、読み出したアドレスレジスタのバリッドビットが０の場合は、無効なので、エラーとして処理される。
【０１７２】
図６は、第２の実施の形態で使用するパケットの形式の一例を示した説明図である。図６において、図２に示したものと同一のものには同一符号を付してある。
【０１７３】
図６に示したパケット６００は、マルチキャストパケットとしても使用可能であり、また、シングルキャストパケットとしても使用可能である。なお、パケット６００の１ワード目と２ワード目が、パケットヘッダとして用いられる。
【０１７４】
パケットタイプ６０１は、１ビットのタイプ情報と、１ビットのアドレス識別情報と、２ビットのアドレスレジスタ指定情報と、４ビットのタスク指定情報と、を示す。なお、アドレスレジスタ指定情報とタスク指定情報とで、指定情報が構成される。
【０１７５】
１ビットのタイプ情報は、パケット６００が、シングルキャストパケットか、または、マルチキャストパケットかを示す。
【０１７６】
１ビットのアドレス識別情報は、パケットの２ワード目の情報がデスティネーションアドレスであるか、オフセットであるかを示す。
【０１７７】
２ビットのアドレスレジスタ指定情報は、アドレスレジスタテーブル１６０内のアドレスレジスタの番号を示す。
【０１７８】
４ビットのタスク指定情報は、タスクｉｄを示す。
【０１７９】
その他は、第１の実施の形態の図２のパケット形式と同じである。
【０１８０】
図４に戻って、受信装置１１４には、メモリ１１２上のアドレスレジスタをキャッシュするためのアドレスレジスタ１４０〜１４３がある。
【０１８１】
必要に応じて、メモリ１１２上のアドレスレジスタテーブル１６０からアドレスレジスタ内の先頭アドレスが読み出されて、アドレスレジスタ１４０〜１４３に格納される。
【０１８２】
また、受信装置１１４には、タスクｉｄレジスタ１４６と、アドレスレジスタ番号レジスタ１４７が、新たに設けられている。
【０１８３】
タスクｉｄレジスタ１４６は、パケットヘッダに付加されたタスクｉｄを格納する。
【０１８４】
アドレスレジスタ番号レジスタ１４７は、パケットヘッダに付加されたアドレスレジスタ番号を格納する。
【０１８５】
また、受信装置１１４には、アドレスレジスタテーブルベースレジスタ１４５が、新たに設けられている。
【０１８６】
アドレスレジスタテーブルベースレジスタ１４５は、メモリ１１２上のアドレスレジスタテーブル１６０の先頭アドレスを格納する。
【０１８７】
アドレスレジスタテーブルベースレジスタ１４５、タスクｉｄレジスタ１４６、アドレスレジスタ番号レジスタ１４７の値を使って、メモリ１１２上のアドレスレジスタテーブル１６０からアドレスレジスタの値を読み出すための、メモリアドレスｆが生成される。
【０１８８】
また、パケットで指定されたタスクｉｄと、アドレスレジスタ番号で指定されるアドレスレジスタとが、アドレスレジスタ１４０〜１４３にキャッシュされているかどうかを判断するために、アドレスレジスタ１４０〜１４３に対応する、タスクｉｄレジスタ１５４〜１５７と、アドレスレジスタ番号レジスタ１５０〜１５３とが、設けられている。
【０１８９】
そして、タスクｉｄレジスタ１５４〜１５７とアドレスレジスタ番号レジスタ１５０〜１５３との値と、タスクｉｄレジスタ１４６とアドレスレジスタ番号レジスタ１４７との値を、タスクｉｄレジスタ番号比較器１５８が比較して、比較結果ｅを、制御回路１２９に送る。
【０１９０】
制御回路１２９は、比較結果ｅに基づいて、一致したものがあれば、ＭＵＸ１３０を用いて、アドレスレジスタ１４０〜１４３の中から、一致したものを選択する。
【０１９１】
一致したものがなければ、制御回路１２９は、メモリ１１２上のアドレスレジスタテーブル１６０から、メモリアドレスｆを用いて、アドレスレジスタの値を読み出し、その値を、アドレスレジスタ１４０〜１４３のうちの１つに格納する。そして、制御回路１２９は、対応するタスクｉｄレジスタ１５４〜１５７とアドレスレジスタ番号１５０〜１５３のうちの１つに、タスクｉｄレジスタ１４６とアドレスレジスタ番号レジスタ１４７の値を設定する。
【０１９２】
本実施の形態によれば、複数のプロセッサのそれぞれは、複数のタスクを並列に実行する。マルチキャスト用保持部として使用されるアドレスレジスタは、タスクごとに設けられている。そして、マルチキャストパケットには、複数のタスクのうちの特定のタスクに対応するアドレスレジスタを指定する情報が記載される。
【０１９３】
このため、タスクごとに、ギャザー処理に用いるアドレスレジスタを選択することが可能になる。
【０１９４】
（第３の実施の形態）
図７は、本発明の第３の実施の形態の並列コンピュータのプロセッサを示したブロック図である。図７の中で図４と同じ構成の部分については、図４と同じ番号を振り、その説明は省略する。
【０１９５】
第３の実施の形態が第２の実施の形態と異なるのは、アドレスレジスタを用いる場合に、パケット中でタスクｉｄが指定されずに、メモリ１１２上のアドレスレジスタテーブル中のアドレスレジスタを用いることが指定される点である。
【０１９６】
これにより、マルチキャストパケットにおいてタスクｉｄが指定されないため、同じマルチキャストパケットを受け取るのは同じタスクｉｄでなければならないという第２の実施の形態の制限がなくなる。
【０１９７】
図８は、図７に示したメモリ１１２上のアドレスレジスタテーブル１６０の一例を示した説明図である。
【０１９８】
この例では、アドレスレジスタが６４個ある場合を示している。アドレスレジスタ数は他の値をとることができる。また、各アドレスレジスタは、タスクｉｄと関連づけられている。また、図７に示したアドレスレジスタテーブルベースレジスタ１４５に０ｘ００２２０００００が設定されていて、アドレスレジスタ番号レジスタ１４７に３４が設定されている場合を示してある。
【０１９９】
各アドレスレジスタの最下位ビットは、そのアドレスレジスタに有効な値が入っているかどうかを示すバリッドビット（ｖ）である。もし、読み出したアドレスレジスタのバリッドビットが０の場合は、無効なので、エラーとして処理される。
【０２００】
図９は、第３の実施の形態で使用するパケットの形式の一例を示した説明図である。図９において、図２に示したものと同一のものには同一符号を付してある。
【０２０１】
図９に示したパケット９００は、マルチキャストパケットとしても使用可能であり、また、シングルキャストパケットとしても使用可能である。なお、パケット９００の１ワード目と２ワード目が、パケットヘッダとして用いられる。
【０２０２】
パケットタイプ９０１は、１ビットのタイプ情報と、１ビットのアドレス識別情報と、を示す。
【０２０３】
１ビットのタイプ情報は、パケット９００が、シングルキャストパケットか、または、マルチキャストパケットかを示す。
【０２０４】
１ビットのアドレス識別情報は、パケットの２ワード目の情報がデスティネーションアドレスであるか、オフセットであるかを示す。
【０２０５】
パケットタイプ９０１内の残りの６ビットは、２ワード目をデスティネーションアドレスとして用いる場合は、タスクｉｄを示す、受信装置内のアドレスレジスタを用いる場合は、アドレスレジスタ番号を示す。なお、パケットタイプ９０１内の残りの６ビットは、指定情報の一例である。
【０２０６】
その他は、第２の実施の形態の図６のパケット形式と同じである。
【０２０７】
図７に戻って、受信装置１１４には、メモリ１１２上のアドレスレジスタをキャッシュするためのアドレスレジスタ１４０〜１４３と、タスクｉｄレジスタ１５４〜１５７がある。
【０２０８】
必要に応じて、メモリ１１２上のアドレスレジスタテーブル１６０からアドレスレジスタとタスクｉｄが読み出されて、アドレスレジスタ１４０〜１４３とタスクｉｄレジスタ１５４〜１５７に格納される。
【０２０９】
また、受信装置１１４には、タスクｉｄレジスタ１４６が設けられる。
【０２１０】
タスクｉｄレジスタ１４６は、パケットの２ワード目をデスティネーションアドレスとする場合に、パケットヘッダに付加されたタスクｉｄを格納する。
【０２１１】
また、受信装置１１４には、アドレスレジスタ番号レジスタ１４７が設けられている。
【０２１２】
アドレスレジスタ番号レジスタ１４７は、アドレスレジスタを用いるパケットの場合にパケットヘッダに付加されるアドレスレジスタ番号を格納する。
【０２１３】
また、受信装置１１４には、アドレスレジスタテーブルベースレジスタ１４５が設けられている。
【０２１４】
アドレスレジスタテーブルベースレジスタ１４５は、メモリ１１２上のアドレスレジスタテーブル１６０の先頭アドレスを格納する。
【０２１５】
アドレスレジスタテーブルベースレジスタ１４５、アドレスレジスタ番号レジスタ１４７の値を使って、メモリ１１２上のアドレスレジスタテーブル１６０から、アドレスレジスタ内の先頭アドレスとタスクｉｄの値を読み出すための、メモリアドレスｆが生成される。
【０２１６】
また、受信装置１１４には、アドレスレジスタ１４０〜１４３に対応するアドレスレジスタ番号レジスタ１５０〜１５３が設けられている。
【０２１７】
アドレスレジスタ番号レジスタ１５０〜１５３は、パケットで指定されたアドレスレジスタ番号で指定されるアドレスレジスタが、アドレスレジスタ１４０〜１４３にキャッシュされているかどうかを判断するために使用される。
【０２１８】
そして、アドレスレジスタ番号レジスタ１５０〜１５３の値とアドレスレジスタ番号レジスタ１４７との値を、レジスタ番号比較器１７０が比較して、比較結果ｅを、制御回路１２９に送る。
【０２１９】
制御回路１２９は、比較結果ｅに基づいて、一致したものがあれば、ＭＵＸ１３０とＭＵＸ１７１を用いて、アドレスレジスタ１４０〜１４３とタスクｉｄレジスタ１５４〜１５７の中から、一致したものを選択する。
【０２２０】
一致したものがなければ、制御回路１２９は、メモリ１１２上のアドレスレジスタテーブル１６０のメモリアドレスｆから、アドレスレジスタの値とタスクｉｄを読み出し、アドレスレジスタ１４０〜１４３とタスクｉｄレジスタ１５４〜１５７の１つに、それらを格納する。
【０２２１】
そして、制御回路１２９は、対応するアドレスレジスタ番号１５０〜１５３の１つに、アドレスレジスタ番号レジスタ１４７の値を設定する。
【０２２２】
図１０は、上記各実施の形態のプロセッサを用いて、プロセッサ０〜プロセッサ７の８個のプロセッサがMPI_Allgather()で、それぞれデータＤ０〜Ｄ７をギャザーする場合の動作を説明するための説明図である。
【０２２３】
各プロセッサは、プロセッサ０〜７へのマルチキャストパケットで、データを送る。
【０２２４】
プロセッサ数をＰ、各プロセッサから集めるデータサイズをＮバイトとすると、上記各実施の形態のプロセッサでは、１回のステップで、１回の通信を行い、各プロセッサがＮバイトのデータを送信し、Ｎ×Ｐバイトのデータを受信することになる。
【０２２５】
１回の通信にかかるレイテンシをα、１バイトの通信にかかる時間（スループット）をβとすると、通信時間は、α＋Ｎ×Ｐ×βとなる。
【０２２６】
図１１のRecursive Doublingと比べると、転送するバイト数は少し多いが、通信回数が１回であるため、大規模システムでネットワークのレイテンシが大きい場合には、上記各実施の形態のギャザー方法の方が図１１に示したRecursive Doublingよりも有効である。
【０２２７】
また、プロセッサ数が２のべき乗でない場合やMPI_Allgatherv()のように各プロセッサが送信するデータ長にばらつきがある場合には、Recursive Doublingの効率が悪くなる。上記各実施の形態は、これらの場合でも効率が悪くならない。
【０２２８】
以上説明した各実施形態において、図示した構成は単なる一例であって、本発明はその構成に限定されるものではない。
【０２２９】
（産業上の利用可能性）
上記各実施形態は、大規模な並列コンピュータでのギャザー処理を高速に行うプロセッサといった用途に適用できる。
【図面の簡単な説明】
【０２３０】
【図１】本発明の第１の実施の形態のプロセッサ間通信システムを示したブロック図である。
【図２】第１の実施の形態で使用するパケットの形式の一例を示した説明図である。
【図３Ａ】本発明の第１の実施の形態の並列コンピュータを使ったギャザー処理を示す図である。
【図３Ｂ】本発明の第１の実施の形態の並列コンピュータを使ったギャザー処理を示す図である。
【図３Ｃ】本発明の第１の実施の形態の並列コンピュータを使ったギャザー処理を示す図である。
【図３Ｄ】本発明の第１の実施の形態の並列コンピュータを使ったギャザー処理を示す図である。
【図３Ｅ】本発明の第１の実施の形態の並列コンピュータを使ったギャザー処理を示す図である。
【図４】本発明の第２の実施の形態の並列コンピュータのプロセッサを示したブロック図である。
【図５】アドレスレジスタテーブル１６０の一例を示した説明図である。
【図６】第２の実施の形態で使用するパケットの形式の一例を示した説明図である。
【図７】本発明の第３の実施の形態の並列コンピュータのプロセッサを示したブロック図である。
【図８】アドレスレジスタテーブル１６０の一例を示した説明図である。
【図９】第２の実施の形態で使用するパケットの形式の一例を示した説明図である。
【図１０】各実施の形態でのギャザー処理を説明するための説明図である。
【図１１】Recursive Doublingを使ったギャザー処理を説明している図である。
【符号の説明】
【０２３１】
１０１  プロセッサ
１０１ａ  プロセッサ
１０２  プロセッサ間ネットワーク
１１０  バス
１１１  ＣＰＵ
１１２  メモリ
１１３  送信装置
１１４  受信装置
１２０  ＦＩＦＯメモリ
１２１  パケットタイプレジスタ
１２２  パケット長レジスタ
１２３  デスティネーションアドレスレジスタ
１２４  書き込みワード数レジスタ
１２５  ＡＬＵ
１２６  ＡＬＵ
１２７  ページ変換テーブル
１２８  書き込みワード数決定回路
１２９  制御回路
１３０〜１３３  ＭＵＸ
１４０〜１４３  アドレスレジスタ
１４４  書き込みアドレスレジスタ
１４５  アドレスレジスタテーブルベースレジスタ
１４６  タスクｉｄレジスタ
１４７  アドレスレジスタ番号レジスタ
１５０〜１５３  アドレスレジスタ番号レジスタ
１５４〜１５７  タスクｉｄレジスタ
１６０  アドレスレジスタテーブル
１６１  タスクｉｄ＝ｉのアドレスレジスタ群
１６２  タスクｉｄ＝ｉ＋１のアドレスレジスタ群
１７０  レジスタ番号比較器
１７１〜１７２  ＭＵＸ
【図１】
2009301101.tif 000003
【図２】
2009301101.tif 000004
【図３Ａ】
2009301101.tif 000005
【図３Ｂ】
2009301101.tif 000006
【図３Ｃ】
2009301101.tif 000007
【図３Ｄ】
2009301101.tif 000008
【図３Ｅ】
2009301101.tif 000009
【図４】
2009301101.tif 000010
【図５】
2009301101.tif 000011
【図６】
2009301101.tif 000012
【図７】
2009301101.tif 000013
【図８】
2009301101.tif 000014
【図９】
2009301101.tif 000015
【図１０】
2009301101.tif 000016
【図１１】
2009301101.tif 000017