JP6799258B2 - ノード間通信プログラム、並列処理装置およびノード間通信方法 - Google Patents

ノード間通信プログラム、並列処理装置およびノード間通信方法 Download PDF

Info

Publication number
JP6799258B2
JP6799258B2 JP2016255821A JP2016255821A JP6799258B2 JP 6799258 B2 JP6799258 B2 JP 6799258B2 JP 2016255821 A JP2016255821 A JP 2016255821A JP 2016255821 A JP2016255821 A JP 2016255821A JP 6799258 B2 JP6799258 B2 JP 6799258B2
Authority
JP
Japan
Prior art keywords
node
nodes
buffer
rank
group
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2016255821A
Other languages
English (en)
Other versions
JP2018106637A (ja
Inventor
政晃 伏見
政晃 伏見
剛 橋本
剛 橋本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016255821A priority Critical patent/JP6799258B2/ja
Priority to US15/788,878 priority patent/US10268529B2/en
Publication of JP2018106637A publication Critical patent/JP2018106637A/ja
Application granted granted Critical
Publication of JP6799258B2 publication Critical patent/JP6799258B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4234Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17318Parallel communications techniques, e.g. gather, scatter, reduce, roadcast, multicast, all to all
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Mathematical Physics (AREA)
  • Multi Processors (AREA)

Description

本発明はノード間通信プログラム、並列処理装置およびノード間通信方法に関する。
計算量の大きな問題を複数の小さな問題に分割し、ネットワークに接続された複数のコンピュータ(「計算ノード」や単に「ノード」と言うことがある)を並列に動作させて計算する並列処理装置が利用されている。並列処理装置を利用する場合、計算途中においてノード間で通信が発生することがある。そこで、並列処理装置用のアプリケーションプログラムを作成する際に、MPI(Message Passing Interface)ライブラリなどの通信ライブラリが利用されることがある。通信ライブラリを利用することで、ユーザはノード間の通信手順の詳細をアプリケーションプログラム中に記述しなくてよい。
なお、各ノードが自分以外の全てのノードにデータを送信する分散メモリ型の並列計算システムが提案されている。提案の並列計算システムは、複数のノードが2n個のフェーズで相互に通信できるようにする。各ノードは、自分に割り当てられた識別番号とフェーズ番号との排他的論理和を算出し、算出した排他的論理和を識別番号としてもつ他のノードを当該フェーズにおける通信相手として選択する。
特開平11−110362号公報
ところで、あるノードが複数の他のノードと通信する可能性がある場合、ノード間通信の効率を向上させるため、当該あるノードのメモリ上には他のノードそれぞれに対応させて個別の受信バッファを確保しておくことが多い。しかし、他のノードの全てに対して個別の受信バッファを用意すると、メモリ使用量が多くなってしまうという問題がある。
1つの側面では、本発明は、ノード間の通信に用いる受信バッファを削減できるノード間通信プログラム、並列処理装置およびノード間通信方法を提供することを目的とする。
1つの態様では、複数のノードのうちの第1のノードとして用いられるコンピュータに以下の処理を実行させるノード間通信プログラムが提供される。複数のノードのうち第1のノードと同じ第1のグループに属する1以上の第2のノードを決定し、1以上の第2のノードそれぞれに対して第1のノードが有するメモリ上に第1の受信バッファを確保する。複数のノードのうち第2のグループに属する第3のノードおよび1以上の第4のノードを決定し、第3のノードに対してメモリ上に第2の受信バッファを確保すると共に1以上の第4のノードに対してはメモリ上の受信バッファを省略する。1以上の第2のノードのうちの1つの第2のノードと通信する場合、1つの第2のノードに対応する第1の受信バッファをメッセージの受信に使用させ、第3のノードと通信する場合、第2の受信バッファをメッセージの受信に使用させ、1以上の第4のノードのうちの1つの第4のノードと通信する場合、第1の受信バッファまたは第2の受信バッファをメッセージの受信に使用させる。
また、1つの態様では、メモリおよびプロセッサを有する第1のノードと、第1のノードとネットワークで接続された複数の他のノードとを有する並列処理装置が提供される。また、1つの態様では、複数のノードを有する並列処理装置が実行するノード間通信方法が提供される。
1つの側面では、ノード間の通信に用いる受信バッファを削減できる。
第1の実施の形態の並列処理装置の例を示す図である。 第2の実施の形態の並列処理装置の例を示す図である。 ノードのハードウェア例を示すブロック図である。 直接eager通信の例を示す図である。 直接rendezvous通信の例を示す図である。 第1のバッファ配置例を示す図である。 グループIDとグループ内IDの算出例を示す図である。 通信経路の例を示す図である。 第2のバッファ配置例を示す図である。 通信経路の他の例を示す図である。 間接eager通信の例を示す図である。 第1の間接rendezvous通信の例を示す図である。 第2の間接rendezvous通信の例を示す図である。 メッセージフォーマット例を示す第1の図である。 メッセージフォーマット例を示す第2の図である。 メッセージフォーマット例を示す第3の図である。 ノードの機能例を示すブロック図である。 初期化の手順例を示すフローチャートである。 eager通信の手順例を示すフローチャートである。 rendezvous通信の手順例を示す第1のフローチャートである。 rendezvous通信の手順例を示す第2のフローチャートである。 rendezvous通信の手順例を示す第3のフローチャートである。 rendezvous通信の手順例を示す第4のフローチャートである。
以下、本実施の形態を図面を参照して説明する。
[第1の実施の形態]
第1の実施の形態を説明する。
図1は、第1の実施の形態の並列処理装置の例を示す図である。
第1の実施の形態の並列処理装置10は、ノード11,11−1,11−2,11−3を含む複数のノードを有する。ノード11,11−1,11−2,11−3は、例えば、サーバコンピュータなどの物理マシンである。ノード11,11−1,11−2,11−3はネットワークで接続されている。並列処理装置10は、ノード11,11−1,11−2,11−3に並列に情報処理を実行させることができる。情報処理を実行している間、ノード11,11−1,11−2,11−3は相互にメッセージを送信することがある。メッセージの送信は、例えば、MPIなどの通信ライブラリによって実装される。
ノード11は、メモリ12およびプロセッサ13を有する。ノード11−1,11−2,11−3は、メモリやプロセッサを有してもよく、以下に説明するノード11の通信方法と同様の通信方法を実行してもよい。メモリ12は、いわゆる主記憶装置であり、例えば、RAM(Random Access Memory)などの揮発性の半導体記憶装置である。
プロセッサ13は、例えば、CPU(Central Processing Unit)やDSP(Digital Signal Processor)である。ただし、プロセッサ13は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの特定用途の電子回路を含んでもよい。プロセッサ13は、例えば、メモリ12などの記憶装置に記憶されたプログラムを実行する。プログラムには、ノード11−1,11−2,11−3との通信を制御するノード間通信プログラムが含まれる。なお、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
メモリ12には、他のノードからメッセージを受信するための1以上の受信バッファが確保され得る。プロセッサ13は、情報処理の開始時(例えば、通信ライブラリの初期化時)に、メモリ12に1以上の受信バッファを確保する。このとき、プロセッサ13は、ノード11が参加する並列処理に利用されるノード群を特定し、ノード群を複数のグループに分割する。並列処理に利用されるノード群は、例えば、ノード11,11−1,11−2,11−3の間の相互通信によって特定される。プロセッサ13は、以下のようにして、グループ分けに基づいてメモリ12に1以上の受信バッファを確保する。
プロセッサ13は、並列処理に利用されるノード群のうち、ノード11(第1のノード)と同じグループ15(第1のグループ)に属する1以上の他のノード(第2のノード)を決定する。第2のノードは、例えば、ノード11,11−1,11−2,11−3それぞれに付与された識別子に基づいて決定される。識別子はいわゆる「ランク」などの識別番号でもよい。例えば、プロセッサ13は、各ノードの識別子からグループ識別子とグループ内識別子の組を算出する。プロセッサ13は、グループ識別子がノード11と同じでありグループ内識別子がノード11と異なるノードを第2のノードとして決定する。ここでは、ノード11−1が第2のノードであると決定される。
プロセッサ13は、決定した第2のノードそれぞれに対応させて、メモリ12上に個別の受信バッファ(第1の受信バッファ)を確保する。ここでは、ノード11−1に対応させてメモリ12上に受信バッファ14aが確保される。
また、プロセッサ13は、並列処理に利用されるノード群のうち、グループ15と異なるグループ15−1(第2のグループ)に属する1つの他のノード(第3のノード)および1以上の他のノード(第4のノード)を決定する。第3のノードは、例えば、グループ15−1に属するノードのうちノード11に対応するノード(パートナーノード)である。第4のノードは、例えば、グループ15−1に属するノードのうち第2のノードのパートナーノードである。第3のノードおよび第4のノードは、例えば、各ノードに付与された識別子に基づいて決定される。例えば、プロセッサ13は、グループ識別子がノード11と異なりグループ内識別子がノード11と同じノードを第3のノードとして決定する。また、プロセッサ13は、グループ識別子とグループ内識別子の何れもノード11と異なるノードを第4のノードとして決定する。ここでは、ノード11−2が第3のノードであると決定され、ノード11−3が第4のノードであると決定される。
プロセッサ13は、決定した第3のノードに対応させて、メモリ12上に受信バッファ(第2の受信バッファ)を確保する。ここでは、ノード11−2に対応させてメモリ12上に受信バッファ14bが確保される。一方、プロセッサ13は、決定した第4のノードに対応する受信バッファはメモリ12上に確保せず、受信バッファを省略する。
プロセッサ13は、ノード11−1と通信する場合に、ノード11−1に対応する受信バッファ14aがメッセージの受信に使用されるよう制御する。例えば、プロセッサ13は、ノード11−1がノード11にメッセージを送信するときに受信バッファ14aにメッセージを書き込ませることで、ノード11−1がノード11と直接通信できるようにする。また、プロセッサ13は、ノード11−2と通信する場合に、受信バッファ14bがメッセージの受信に使用されるよう制御する。例えば、プロセッサ13は、ノード11−2がノード11にメッセージを送信するときに受信バッファ14bにメッセージを書き込ませることで、ノード11−2がノード11と直接通信できるようにする。
これに対し、ノード11−3に対応する個別の受信バッファはメモリ12上に確保されていない。そこで、プロセッサ13は、ノード11−3と通信する場合に、受信バッファ14aまたは受信バッファ14bがメッセージの受信に使用されるよう制御する。
ノード11−3からノード11にメッセージを送信する場合、送信元ノードのパートナーノードであるノード11−1を経由してメッセージを送信するようにしてもよい。その場合、例えば、ノード11−3は、ノード11−1が有するノード11−3用の受信バッファにメッセージを書き込む。ノード11−1はノード11−3のパートナーノードであるため、ノード11−1にはノード11−3用の受信バッファが確保され得る。ノード11−1は、受信したメッセージを受信バッファ14aに転送する。
また、ノード11−3からノード11にメッセージを送信する場合、宛先ノードのパートナーノードであるノード11−2を経由してメッセージを送信するようにしてもよい。その場合、例えば、ノード11−3は、ノード11−2が有するノード11−3用の受信バッファにメッセージを書き込む。ノード11−2はノード11−3と同じグループに属するため、ノード11−2にはノード11−3用の受信バッファが確保され得る。ノード11−2は、受信したメッセージを受信バッファ14bに転送する。
第1の実施の形態の並列処理装置10によれば、ノード11と同じグループ15に属するノード11−1に対して、メモリ12上に受信バッファ14aが確保される。また、グループ15−1に属するノードのうちノード11に対応するノード11−2に対して、メモリ12上に受信バッファ14bが確保される。一方、グループ15−1に属するノードのうちノード11に対応しないノード11−3については受信バッファが省略される。そして、ノード11とノード11−3とが通信する場合、受信バッファ14aまたは受信バッファ14bがメッセージの受信に使用される。例えば、ノード11−3が生成したメッセージはノード11−1またはノード11−2を経由してノード11に送信される。
これにより、ノード11のメモリ12上に他の全てのノード用の受信バッファを確保する場合よりも、受信バッファの数を減らすことができメモリ使用量を削減できる。
[第2の実施の形態]
次に、第2の実施の形態を説明する。
図2は、第2の実施の形態の並列処理装置の例を示す図である。
第2の実施の形態の並列処理装置は、少なくとも36個のノード(ノード100,100−1,100−2,…,100−35)を含む。ノード100,100−1,100−2,…,100−35はネットワーク30に接続されている。
第2の実施の形態の並列処理装置は、複数のノードに同一種類のユーザプログラムを配置し、これら複数のノードに並列にユーザプログラムを実行させることで並列処理を実現することができる。並列処理が行われている間、複数のノードは相互に通信することがある。通信頻度や通信するノードの組はユーザプログラムに依存する。
ユーザプログラムを作成するにあたり、ノード間の通信を記述するためにMPIライブラリが使用されることがある。MPIライブラリを使用することで、ユーザプログラム中に通信手順の詳細を記述しなくてよく、ユーザプログラムの作成が容易となる。MPIライブラリを参照するユーザプログラムを実行する場合、各ノードは並列処理の開始時にMPIライブラリの初期化を行い、他ノードと通信可能な状態にする。MPIライブラリの初期化には、MPIライブラリをRAMにロードしてユーザプログラムから呼び出し可能にすることや、他ノードから受信したメッセージを一時的に格納するための受信バッファをRAMに確保することが含まれる。メッセージの送信や受信などの実際のノード間通信は、ユーザプログラムがMPIライブラリを呼び出すことで適宜実行される。
並列処理では複数の「プロセス」が並列に実行される。各ノードは1以上のプロセスを実行する。第2の実施の形態では説明を簡単にするため、1つのノードが1つのプロセスを実行することを想定する。ただし、1つのノードが複数のプロセスを実行することも可能である。例えば、複数のプロセッサを有するノードは、1つのプロセッサにつき1つのプロセスを実行することがある。また、複数のプロセッサコアを有するノードは、1つのプロセッサコアにつき1つのプロセスを実行することがある。
ユーザプログラムがMPIライブラリを使用している場合、複数のプロセスそれぞれに対して「ランク」と呼ばれる識別番号が割り当てられる。ランクは「0」から始まる連続する非負整数であり、ランクの最大値はプロセス数より1だけ小さい値である。ランクは、例えば、MPIライブラリに従って複数のノードが通信することで決定される。
図3は、ノードのハードウェア例を示すブロック図である。
ノード100は、CPU101、RAM102、HDD(Hard Disk Drive)103、画像信号処理部104、入力信号処理部105、媒体リーダ106および通信インタフェース107を有する。上記ユニットはバスに接続される。
CPU101は、プログラムの命令を実行する演算回路を含むプロセッサである。CPU101は、HDD103に記憶されたプログラムやデータの少なくとも一部をRAM102にロードし、プログラムを実行する。なお、CPU101は複数のプロセッサコアを備えてもよく、ノード100は複数のプロセッサを備えてもよく、以下で説明する処理を複数のプロセッサまたはプロセッサコアを用いて並列に実行してもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
RAM102は、CPU101が実行するプログラムやCPU101が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、ノード100は、RAM以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
HDD103は、OS(Operating System)やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。プログラムにはノード間通信プログラムが含まれる。なお、ノード100は、フラッシュメモリやSSD(Solid State Drive)などの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
画像信号処理部104は、CPU101からの命令に従って、ノード100に接続されたディスプレイ104aに画像を出力する。ディスプレイ104aとしては、CRT(Cathode Ray Tube)ディスプレイ、液晶ディスプレイ(LCD:Liquid Crystal Display)、プラズマディスプレイ、有機EL(OEL:Organic Electro-Luminescence)ディスプレイなどを用いることができる。
入力信号処理部105は、ノード100に接続された入力デバイス105aから入力信号を取得し、CPU101に出力する。入力デバイス105aとしては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、ノード100に複数の種類の入力デバイスが接続されていてもよい。
媒体リーダ106は、記録媒体106aに記録されたプログラムやデータを読み取る読み取り装置である。記録媒体106aとして、例えば、磁気ディスク、光ディスク、光磁気ディスク(MO:Magneto-Optical disk)、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク(FD:Flexible Disk)やHDDが含まれる。光ディスクには、CD(Compact Disc)やDVD(Digital Versatile Disc)が含まれる。
媒体リーダ106は、例えば、記録媒体106aから読み取ったプログラムやデータを、RAM102やHDD103などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、CPU101によって実行される。なお、記録媒体106aは可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体106aやHDD103を、コンピュータ読み取り可能な記録媒体と言うことがある。
通信インタフェース107は、ネットワーク30に接続され、ネットワーク30を介して他のノードと通信を行うインタフェースである。通信インタフェース107は、例えば、スイッチなどの通信装置とケーブルで接続される有線通信インタフェースである。ただし、基地局と無線リンクで接続される無線通信インタフェースでもよい。
次に、MPIライブラリを用いたノード間通信の基本的方法について説明する。第2の実施の形態の並列処理装置は、以下に説明するeager(イーガー)通信とrendezvous(ランデブー)通信という2種類の通信を行うことができる。eager通信は少量のデータ本文(データペイロード)を送信するのに好適な通信方法であり、rendezvous通信は多量のデータペイロードを送信するのに好適な通信方法である。
図4は、直接eager通信の例を示す図である。
ここでは、ノード100−2にランク#2のプロセス111aが配置されており、ノード100−26にランク#26のプロセス111bが配置されているとする。そして、プロセス111aがプロセス111bに対してデータペイロードを送信することを考える。
ノード100−2のRAMには、プロセス111aによって動的にユーザバッファ112aが確保される。プロセス111aは、送信しようとするデータペイロードをユーザバッファ112aに書き込み、MPIライブラリを呼び出す。ノード100−2のRAMには、MPIライブラリの初期化時に送信バッファ113aが確保されている。呼び出されたMPIライブラリは、ユーザバッファ112aに格納されたデータペイロードにMPI通信用のヘッダを付加してデータメッセージを生成し、データメッセージを送信バッファ113aに書き込む。MPIライブラリは、送信バッファ113aに格納されたデータメッセージを、ノード100−26の受信バッファ114a宛てに送信する。
ノード100−26のRAMには、プロセス111bによって動的にユーザバッファ112bが確保される。プロセス111bは、プロセス111aからのデータペイロードの受信を待つためにMPIライブラリを呼び出す。ノード100−26のRAMには、MPIライブラリの初期化時に受信バッファ114aが確保されている。受信バッファ114aは、プロセス111aからメッセージを受信するための受信バッファ、すなわち、ランク#2用の受信バッファである。ノード100−2は、MPIライブラリの初期化時に行われるノード間通信などを通じて受信バッファ114aのアドレスを知っている。
ノード100−26のMPIライブラリは、受信バッファ114aにメッセージが到着しているか監視する。受信バッファ114aにデータメッセージが到着すると、MPIライブラリは、到着したデータメッセージからヘッダを削除してデータペイロードを抽出し、データペイロードをユーザバッファ112bに書き込む。ユーザバッファ112bに書き込まれたデータペイロードは、プロセス111bから参照可能となる。
図5は、直接rendezvous通信の例を示す図である。
ここでは、図4のeager通信と同様に、ノード100−2に配置されたランク#2のプロセス111aが、ノード100−26に配置されたランク#26のプロセス111bに対してデータペイロードを送信することを考える。
ノード100−2のRAMには、プロセス111aによって動的にユーザバッファ112aが確保される。プロセス111aは、送信しようとするデータペイロードをユーザバッファ112aに書き込み、MPIライブラリを呼び出す。ノード100−2のRAMには、MPIライブラリの初期化時に送信バッファ113aが確保されている。呼び出されたMPIライブラリは、rendezvous通信の開始を要求する制御メッセージ(要求制御メッセージ)を生成し、要求制御メッセージを送信バッファ113aに書き込む。MPIライブラリは、送信バッファ113aに格納された要求制御メッセージを、ノード100−26の受信バッファ114a宛てに送信する。例えば、MPIライブラリは、受信バッファ114aのアドレスを指定して要求制御メッセージを送信する。
ノード100−26のRAMには、プロセス111bによって動的にユーザバッファ112bが確保される。プロセス111bは、プロセス111aからのデータペイロードの受信を待つためにMPIライブラリを呼び出す。ノード100−26のRAMには、MPIライブラリの初期化時に受信バッファ114aが確保されている。受信バッファ114aはランク#2用の受信バッファであり、ノード100−2はそのアドレスを予め知っている。ノード100−26のMPIライブラリは、受信バッファ114aに要求制御メッセージが到着すると、要求制御メッセージに対する応答を示す制御メッセージ(応答制御メッセージ)を生成し、応答制御メッセージを送信バッファ113bに書き込む。
応答制御メッセージには、ユーザバッファ112bのアドレスが含まれる。MPIライブラリは、送信バッファ113bに格納された応答制御メッセージを、ノード100−2の受信バッファ114b宛てに送信する。ノード100−2のRAMには、MPIライブラリの初期化時に受信バッファ114bが確保されている。受信バッファ114bは、プロセス111bからメッセージを受信するための受信バッファ、すなわち、ランク#26用の受信バッファである。ノード100−26は、MPIライブラリの初期化時に行われるノード間通信などを通じて受信バッファ114bのアドレスを知っている。
ノード100−2のMPIライブラリは、受信バッファ114bに応答制御メッセージが到着すると、ユーザバッファ112aに格納されたデータペイロードを、応答制御メッセージで指定されたユーザバッファ112b宛てに送信する。このとき、MPIライブラリは、送信バッファ113aや受信バッファ114aを経由せずに、データペイロードをユーザバッファ112bに直接送信することができる。また、MPIライブラリは、rendezvous通信の完了を示す制御メッセージ(完了制御メッセージ)を生成し、完了制御メッセージを送信バッファ113aに書き込む。MPIライブラリは、送信バッファ113aに格納された完了制御メッセージを受信バッファ114a宛てに送信する。
ノード100−26のMPIライブラリは、受信バッファ114aに応答制御メッセージが到着したことによって、rendezvous通信が完了したと判断する。例えば、MPIライブラリがプロセス111bにデータペイロードの到着を通知する。ユーザバッファ112bに格納されたデータペイロードは、rendezvous通信が完了したと判断された後、プロセス111bから参照可能となる。
このように、eager通信は、予め確保された受信バッファを利用して送信元ノードから宛先ノードに一方的にデータペイロードを送信する通信方法である。よって、データペイロードのサイズが受信バッファのサイズよりも十分小さい場合には、eager通信の方がデータペイロードを効率的に送信することができる。一方、rendezvous通信は、制御メッセージによって宛先ノードから送信元ノードに書き込み先バッファをその都度指定することで、予め確保された受信バッファを経由しないでデータペイロードを送信する通信方法である。よって、データペイロードのサイズが大きい場合には、rendezvous通信の方がデータペイロードを効率的に送信することができる。
ここで、任意の2つのノードの間で図4,5のように直接メッセージを送信できるようにすると、各ノードはRAM上に多数の受信バッファを予め確保しておくことになるという問題がある。次に、バッファ配置の問題について説明する。
図6は、第1のバッファ配置例を示す図である。
ノード100にはランク#0のプロセス111cが配置されている。このバッファ配置方法では、ノード100は、MPIライブラリの初期化時に送信バッファ113dを確保する。また、ノード100は、MPIライブラリの初期化時に、ノード100以外のノードに配置されたランク#1〜#35のプロセスに対応する35個の受信バッファを確保する。受信バッファ115aはランク#1に対応し、受信バッファ115bはランク#2に対応し、受信バッファ115cはランク#35に対応する。
ノード100−1にはランク#1のプロセス111dが配置されている。ノード100−1は、MPIライブラリの初期化時に送信バッファ113eを確保する。また、ノード100−1は、MPIライブラリの初期化時に、ノード100−1以外のノードに配置されたランク#0,#2〜#35のプロセスに対応する35個の受信バッファを確保する。受信バッファ115dはランク#0に対応し、受信バッファ115eはランク#2に対応し、受信バッファ115fはランク#35に対応する。
ノード100−35にはランク#35のプロセス111eが配置されている。ノード100−35は、MPIライブラリの初期化時に送信バッファ113fを確保する。また、ノード100−35は、MPIライブラリの初期化時に、ノード100−35以外のノードに配置されたランク#0〜#34のプロセスに対応する35個の受信バッファを確保する。受信バッファ115gはランク#0に対応し、受信バッファ115hはランク#1に対応し、受信バッファ115iはランク#34に対応する。
並列処理の間に何れのプロセス間でメッセージが送信されるかは、MPIライブラリの初期化時には不明である。よって、任意のプロセス間で図4,5のように直接メッセージを送信することを許容すると、各ノードは図6のようにRAM上に多数の受信バッファを確保することになる。例えば、1つの受信バッファのサイズが2キロバイト(kB)でありプロセス数が100万であるとすると、各ノードは受信バッファだけで約2ギガバイト(GB)のメモリ領域を使用することになる。そこで、第2の実施の形態の並列処理装置は、並列処理で使用する複数のノードをグループ分けし、メッセージを送信する経路を制限することでRAM上の受信バッファを削減する。
図7は、グループIDとグループ内IDの算出例を示す図である。
並列処理装置は、各プロセスのランクrankからグループ識別子grp_idとグループ内識別子idを算出する。grp_id=rank/Nppgであり、id=mod(rank,Nppg)である。すなわち、grp_idはrankをNppgで割った商(小数点以下を切り捨てた整数)であり、idはrankをNppgで割ったときの余りである。Nppgはグループ1つ当たりのプロセス数である。第2の実施の形態では1ノードに1プロセスが配置されるため、Nppgはグループ1つ当たりのノード数でもある。Nppgは、例えば、MPIライブラリの中で固定値として設定されている。ただし、環境変数または実行コマンドのオプションとして、ユーザがNppgを指定できるようにしてもよい。
同じグループ識別子grp_idをもつプロセスは同じグループに属している。第2の実施の形態では1ノードに1プロセスが配置されるため、同じグループ識別子grp_idをもつプロセスが配置されたノードは同じグループに属していると言うことができる。また、あるプロセスにとって、グループ識別子grp_idは異なるもののグループ内識別子idが同じである他のプロセスは「パートナープロセス」である。第2の実施の形態では1ノードに1プロセスが配置されるため、あるプロセスが配置されたノードにとって、グループ識別子grp_idは異なるもののグループ内識別子idが同じである他のプロセスが配置された他のノードは「パートナーノード」であると言うことができる。
ここでは、Nppg=9であり、ノード100,100−1,…,100−35に配置されたランク#0〜#35のプロセスが4つのグループに分割される場合を考える。グループ41(#0)は、grp_id=0をもつプロセス、すなわち、ノード100,100−1,…,100−8に配置されたランク#0〜#8のプロセスの集合である。グループ42(#1)は、grp_id=1をもつプロセス、すなわち、ノード100−9,…,100−17に配置されたランク#9〜#17のプロセスの集合である。グループ43(#2)は、grp_id=2をもつプロセス、すなわち、ノード100−18,…,100−26に配置されたランク#18〜#26のプロセスの集合である。グループ44(#3)は、grp_id=3をもつプロセス、すなわち、ノード100−27,…,100−35に配置されたランク#27〜#35のプロセスの集合である。
図8は、通信経路の例を示す図である。
並列処理装置は、あるプロセスが直接メッセージを送信できる宛先プロセスを、同一グループ内のプロセス(グループ識別子が同じプロセス)と他グループ内のパートナープロセス(グループ内識別子が同じプロセス)に限定する。他グループ内のパートナープロセス以外のプロセス(グループ識別子もグループ内識別子も異なるプロセス)には、パートナープロセス経由でメッセージを送信することになる。
例えば、ランク#2のプロセス111aをもつノード100−2は、宛先が同一グループに属するため、ランク#4のプロセスをもつノード100−4に対して直接メッセージを送信できる。また、ノード100−2は、宛先がパートナープロセスであるため、ランク#11のプロセスをもつノード100−11に対して直接メッセージを送信できる。
一方、ノード100−2は、宛先が同一グループに属しておらずパートナープロセスでもないため、ランク#26のプロセス111bをもつノード100−26に対しては直接メッセージを送信しない。この場合、ノード100−2は、宛先プロセスと同じグループに属するパートナープロセスであるランク#20のプロセスを特定し、ランク#20のプロセスをもつノード100−20に対してメッセージを送信する。ノード100−20は、ノード100−2から受信したメッセージをノード100−26に転送する。
このように、メッセージの送信経路を限定することで受信バッファを削減できる。
図9は、第2のバッファ配置例を示す図である。
ノード100にはランク#0のプロセス111cが配置されている。ノード100は、MPIライブラリの初期化時に送信バッファ113dを確保する。また、ノード100は、MPIライブラリの初期化時に、同一グループに属するランク#1〜#8のプロセスに対応する8個の受信バッファを確保する。更に、ノード100は、他グループのパートナープロセスであるランク#9,#18,#27のプロセスに対応する3個の受信バッファを確保する。受信バッファ115jはランク#8に対応し、受信バッファ115kはランク#9に対応し、受信バッファ115lはランク#18に対応し、受信バッファ115mはランク#27に対応する。
ノード100−1にはランク#1のプロセス111dが配置されている。ノード100−1は、MPIライブラリの初期化時に送信バッファ113eを確保する。また、ノード100−1は、MPIライブラリの初期化時に、同一グループに属するランク#0,#2〜#8のプロセスに対応する8個の受信バッファを確保する。更に、ノード100−1は、他グループのパートナープロセスであるランク#10,#19,#28のプロセスに対応する3個の受信バッファを確保する。受信バッファ115nはランク#8に対応し、受信バッファ115oはランク#10に対応し、受信バッファ115pはランク#19に対応し、受信バッファ115qはランク#28に対応する。
ノード100−35にはランク#35のプロセス111eが配置されている。ノード100−35は、MPIライブラリの初期化時に送信バッファ113fを確保する。また、ノード100−35は、MPIライブラリの初期化時に、同一グループに属するランク#27〜#34のプロセスに対応する8個の受信バッファを確保する。更に、ノード100−35は、他グループのパートナープロセスであるランク#8,#17,#26のプロセスに対応する3個の受信バッファを確保する。受信バッファ115rはランク#27に対応し、受信バッファ115sはランク#8に対応し、受信バッファ115tはランク#17に対応し、受信バッファ115uはランク#26に対応する。
このように、各ノードに確保される受信バッファの数は、他ノードに配置されたプロセスのうち同一グループに属するプロセスの数と他グループの数とを合計したものとなる。図9の例では、他ノードに配置されたプロセスのうち同一グループに属するプロセスの数はNppg−1=8であり他グループの数は3であるため、ノード100,100−1,…,100−35それぞれに確保される受信バッファの数は11になる。よって、図6の場合よりも各ノードに確保される受信バッファが少なくなる。
なお、図7,8ではプロセス総数がNppgで割り切れる例を示したが、プロセス総数がNppgで割り切れない場合にもメッセージの送信経路を制限することができる。
図10は、通信経路の他の例を示す図である。
ここでは、17個のノード(ノード100,100−1,…,100−16)にランク#0〜#16のプロセスが配置されており、Nppg=6である場合を考える。ランク#0〜#5のプロセスがグループ#0に属し、ランク#6〜#11のプロセスがグループ#1に属し、ランク#12〜#16のプロセスがグループ#2に属する。プロセス総数がNppgで割り切れないため、グループ#2に属するプロセスの数はNppg−1=5である。
ここで、ランク#5のプロセスがランク#14のプロセスにメッセージを送信しようとするとき、図8と同様の方法でメッセージを送信しようとしても、グループ#2にはランク#5のプロセスに対応するパートナープロセスが存在しない。すなわち、グループ#2には、ランク#5のプロセスと同じグループ内識別子=5をもつプロセスが存在しない。
そこで、パートナープロセスが存在しない場合、並列処理装置は、送信元プロセスと同じグループに属するプロセスのうち宛先プロセスに対応するパートナープロセスを中継プロセスとして指定することとする。ここでは、ランク#5のプロセスをもつノード100−5は、グループ#0に属するプロセスの中から宛先プロセスに対応するパートナープロセスであるランク#2のプロセスを特定し、ランク#2のプロセスをもつノード100−2に対してメッセージを送信する。ノード100−2は、ノード100−5から受信したメッセージを、ランク#14のプロセスをもつノード100−14に転送する。
次に、中継プロセスが存在する場合における間接的なeager通信と間接的なrendezvous通信について説明する。なお、第2の実施の形態の並列処理装置は、rendezvous通信として後述する2種類の方法の何れか一方を選択できる。
図11は、間接eager通信の例を示す図である。
ここでは、ノード100−2がノード100−20を経由してノード100−26に対して、eager通信によりデータペイロードを送信する場合を考える。
ノード100−2のRAMには、MPIライブラリの初期化時に送信バッファ113aが確保される。また、ノード100−2のRAMには、動的にユーザバッファ112aが確保される。ユーザバッファ112aには、プロセス111aによってデータペイロードが書き込まれる。ノード100−2は、ユーザバッファ112aに格納されたデータペイロードにヘッダを付加してデータメッセージを生成し、データメッセージを送信バッファ113aに書き込む。ノード100−2は、送信バッファ113aに格納されたデータメッセージを、ノード100−20の受信バッファ114cに送信する。
ノード100−20のRAMには、MPIライブラリの初期化時に送信バッファ113cやランク#2用の受信バッファ114cが確保される。受信バッファ114cにデータメッセージが到着すると、ノード100−20は、到着したデータメッセージのヘッダを適切に書き換え、ヘッダを書き換えたデータメッセージを送信バッファ113cに書き込む。ノード100−20は、送信バッファ113cに格納されたデータメッセージを、ノード100−26の受信バッファ114dに送信する。
ノード100−26のRAMには、MPIライブラリの初期化時にランク#20用の受信バッファ114dが確保される。また、ノード100−26のRAMには、動的にユーザバッファ112bが確保される。受信バッファ114dにデータメッセージが到着すると、ノード100−26は、到着したデータメッセージからデータペイロードを抽出し、抽出したデータペイロードをユーザバッファ112bに書き込む。プロセス111bは、ユーザバッファ112bからデータペイロードを読み出す。
図12は、第1の間接rendezvous通信の例を示す図である。
ここでは、ノード100−2がノード100−20を経由してノード100−26に対して、rendezvous通信によりデータペイロードを送信する場合を考える。
ノード100−2のRAMには、MPIライブラリの初期化時に送信バッファ113aやランク#20用の受信バッファ114eが確保される。また、ノード100−2のRAMには、動的にユーザバッファ112aが確保される。ユーザバッファ112aには、プロセス111aによってデータペイロードが書き込まれる。すると、ノード100−2は、rendezvous通信の開始を示す要求制御メッセージを生成して送信バッファ113aに書き込む。ノード100−2は、送信バッファ113aに格納された要求制御メッセージを、ノード100−20の受信バッファ114cに送信する。
ノード100−20のRAMには、MPIライブラリの初期化時に送信バッファ113c、ランク#2用の受信バッファ114cおよびランク#26用の受信バッファ114fが確保される。受信バッファ114cに要求制御メッセージが到着すると、ノード100−20は、RAMに一時バッファ112cを確保する。一時バッファ112cは、受信バッファ114cよりサイズが大きいものの、ユーザプログラムから認識されなくてよい。ノード100−20は、要求制御メッセージに対する応答を示す応答制御メッセージを生成して送信バッファ113cに書き込む。応答制御メッセージには一時バッファ112cのアドレスが含まれる。ノード100−20は、送信バッファ113cに格納された応答制御メッセージを、ノード100−2の受信バッファ114eに送信する。
受信バッファ114eに応答制御メッセージが到着すると、ノード100−2は、ユーザバッファ112aに格納されたデータペイロードを、応答制御メッセージによって指定された一時バッファ112cに送信する。データペイロードの送信が完了すると、ノード100−2は、送信完了を示す完了制御メッセージを生成して送信バッファ113aに書き込む。ノード100−2は、送信バッファ113aに格納された完了制御メッセージを、ノード100−20の受信バッファ114cに送信する。
受信バッファ114cに完了制御メッセージが到着すると、ノード100−20は、rendezvous通信の開始を示す要求制御メッセージを生成して送信バッファ113cに書き込む。ノード100−20は、送信バッファ113cに格納された要求制御メッセージを、ノード100−26の受信バッファ114dに送信する。
ノード100−26のRAMには、MPIライブラリの初期化時に送信バッファ113bやランク#20用の受信バッファ114dが確保される。また、ノード100−26のRAMには、プロセス111bがデータペイロードを取得するために動的にユーザバッファ112bが確保される。受信バッファ114dに要求制御メッセージが到着すると、ノード100−26は、要求制御メッセージに対する応答を示す応答制御メッセージを生成して送信バッファ113bに書き込む。応答制御メッセージにはユーザバッファ112bのアドレスが含まれる。ノード100−26は、送信バッファ113bに格納された応答制御メッセージを、ノード100−20の受信バッファ114fに送信する。
受信バッファ114fに応答制御メッセージが到着すると、ノード100−20は、一時バッファ112cに格納されたデータペイロードを、応答制御メッセージによって指定されたユーザバッファ112bに送信する。データペイロードの送信が完了すると、ノード100−20は、送信完了を示す完了制御メッセージを生成して送信バッファ113cに書き込む。ノード100−20は、送信バッファ113cに格納された完了制御メッセージを、ノード100−26の受信バッファ114dに送信する。プロセス111bは、ユーザバッファ112bからデータペイロードを読み出す。
次に、別のrendezvous通信の方法を説明する。
図13は、第2の間接rendezvous通信の例を示す図である。
前述の第1のrendezvous通信方法では、最初の送信元ノード(始点ノード)と最終的な宛先ノード(終点ノード)との間で中継ノードがデータペイロードを転送している。これに対し、第2のrendezvous通信方法では、中継ノードは要求制御メッセージのみ転送し、それ以降の応答制御メッセージとデータペイロードと完了制御メッセージは始点ノードと終点ノードとの間で直接送信するようにする。
ノード100−2のRAMには、MPIライブラリの初期化時に送信バッファ113aが確保される。また、ノード100−2のRAMには、動的にユーザバッファ112aが確保される。ユーザバッファ112aには、プロセス111aによってデータペイロードが書き込まれる。すると、ノード100−2は、RAMに一時的な受信バッファ114gを確保する。ノード100−2は、rendezvous通信の開始を示す要求制御メッセージを生成して送信バッファ113aに書き込む。要求制御メッセージには受信バッファ114gのアドレスが含まれる。ノード100−2は、送信バッファ113aに格納された要求制御メッセージを、ノード100−20の受信バッファ114cに送信する。
ノード100−20のRAMには、MPIライブラリの初期化時に送信バッファ113cやランク#2用の受信バッファ114cが確保される。受信バッファ114cに要求制御メッセージが到着すると、ノード100−20は、到着した要求制御メッセージの一部内容を適切に書き換え、書き換えた要求制御メッセージを送信バッファ113cに書き込む。ノード100−20は、送信バッファ113cに格納された要求制御メッセージを、ノード100−26の受信バッファ114dに送信する。
ノード100−26のRAMには、MPIライブラリの初期化時に送信バッファ113bやランク#20用の受信バッファ114dが確保される。また、ノード100−26のRAMには、プロセス111bがデータペイロードを取得するために動的にユーザバッファ112bが確保される。受信バッファ114dに要求制御メッセージが到着すると、ノード100−26は、RAMに一時的な受信バッファ114hを確保する。ノード100−26は、要求制御メッセージに対する応答を示す応答制御メッセージを生成して送信バッファ113bに書き込む。応答制御メッセージには、ユーザバッファ112bのアドレスと受信バッファ114hのアドレスが含まれる。ノード100−26は、送信バッファ113bに格納された応答制御メッセージを、要求制御メッセージによって指定されたノード100−2の受信バッファ114gに送信する。
受信バッファ114gに応答制御メッセージが到着すると、ノード100−2は、ユーザバッファ112aに格納されたデータペイロードを、応答制御メッセージによって指定されたユーザバッファ112bに送信する。データペイロードの送信が完了すると、ノード100−2は、送信完了を示す完了制御メッセージを生成して送信バッファ113aに書き込む。ノード100−2は、送信バッファ113aに格納された完了制御メッセージを、応答制御メッセージによって指定された受信バッファ114hに送信する。プロセス111bは、ユーザバッファ112bからデータペイロードを読み出す。
次に、メッセージのフォーマットについて説明する。
図14は、メッセージフォーマット例を示す第1の図である。
始点ノードであるノード100−2から中継ノードであるノード100−20には、データメッセージ121が送信される。データメッセージ121は、メッセージ種別、送信元ランク、ユーザ指定タグ、始点ランク、終点ランクおよびデータペイロードを含む。
メッセージ種別は、メッセージの種別がデータメッセージであることを示す。送信元ランクは、データメッセージ121の直接の送信元を示すランクであり、この例ではランク#2である。ユーザ指定タグは、複数のメッセージを区別するためにユーザプログラムが任意に設定できるタグである。始点ランクは、eager通信の最初の送信元を示すランクであり、この例ではランク#2である。終点ランクは、eager通信の最終的な宛先を示すランクであり、この例ではランク#26である。
中継ノードであるノード100−20から終点ノードであるノード100−26には、データメッセージ121と同様のデータメッセージが送信される。このデータメッセージの送信元ランクは、ランク#2からランク#20に書き換えられる。一方、このデータメッセージの始点ランクおよび終点ランクは、データメッセージ121と同じである。すなわち、ノード100−20によってeager通信が中継されても、始点ランクはランク#2のままであり、終点ランクはランク#26のままである。
図15は、メッセージフォーマット例を示す第2の図である。
第1のrendezvous通信方法では、始点ノードであるノード100−2から中継ノードであるノード100−20に要求制御メッセージ122が送信される。要求制御メッセージ122は、メッセージ種別、送信元ランク、ユーザ指定タグ、データサイズ、送信側リクエスト識別子、始点ランクおよび終点ランクを含む。
メッセージ種別は、メッセージの種別が要求制御メッセージであることを示す。送信元ランクは、要求制御メッセージ122の直接の送信元を示すランクであり、この例ではランク#2である。ユーザ指定タグは、複数のメッセージを区別するためにユーザプログラムが任意に設定できるタグである。データサイズは、rendezvous通信においてノード100−2が送信しようとするデータペイロードのサイズである。送信側リクエスト識別子は、rendezvous通信を識別するためにノード100−2が付与する識別子である。始点ランクは、rendezvous通信の最初の送信元を示すランクであり、この例ではランク#2である。終点ランクは、rendezvous通信の最終的な宛先を示すランクであり、この例ではランク#26である。
中継ノードであるノード100−20から始点ノードであるノード100−2には応答制御メッセージ123が送信される。応答制御メッセージ123は、メッセージ種別、ユーザバッファアドレス、送信側リクエスト識別子および受信側リクエスト識別子を含む。
メッセージ種別は、メッセージの種別が応答制御メッセージであることを示す。ユーザバッファアドレスは、ノード100−20がデータペイロードを受信するためのバッファのアドレスである。ただし、ここではノード100−20は中継ノードであるため、データペイロードを受信するためのバッファは、ノード100−20に一時的に確保された一時バッファ112cである。送信側リクエスト識別子は、要求制御メッセージ122に含まれていた識別子である。受信側リクエスト識別子は、rendezvous通信を識別するためにノード100−20が付与する識別子である。
始点ノードであるノード100−2から中継ノードであるノード100−20には完了制御メッセージ124が送信される。完了制御メッセージ124は、メッセージ種別および受信側リクエスト識別子を含む。
メッセージ種別は、メッセージの種別が完了制御メッセージであることを示す。受信側リクエスト識別子は、応答制御メッセージ123に含まれていた識別子である。
中継ノードであるノード100−20から終点ノードであるノード100−26には、要求制御メッセージ122と同様の要求制御メッセージが送信される。また、終点ノードであるノード100−26から中継ノードであるノード100−20には、応答制御メッセージ123と同様の応答制御メッセージが送信される。また、中継ノードであるノード100−20から終点ノードであるノード100−26には、完了制御メッセージ124と同様の完了制御メッセージが送信される。これらの制御メッセージに含まれる送信元ランク、送信側リクエスト識別子、受信側リクエスト識別子およびユーザバッファアドレスは、ノード100−20,100−26により適切に設定される。
図16は、メッセージフォーマット例を示す第3の図である。
第2のrendezvous通信方法では、始点ノードであるノード100−2から中継ノードであるノード100−20に要求制御メッセージ125が送信される。要求制御メッセージ125は、メッセージ種別、送信元ランク、ユーザ指定タグ、データサイズ、送信側リクエスト識別子、始点ランク、終点ランクおよび送信側一時バッファアドレスを含む。メッセージ種別、送信元ランク、ユーザ指定タグ、データサイズ、送信側リクエスト識別子、始点ランクおよび終点ランクは、要求制御メッセージ122と同様である。送信側一時バッファアドレスは、応答制御メッセージを受信するためにノード100−2に一時的に確保された受信バッファ114gのアドレスである。
中継ノードであるノード100−20から終点ノードであるノード100−26には、要求制御メッセージ125と同様の要求制御メッセージが送信される。原則として、要求制御メッセージ125の内容がノード100−26に転送される。ただし、この要求制御メッセージの送信元ランクは、ランク#2からランク#20に書き換えられる。
終点ノードであるノード100−26から始点ノードであるノード100−2には、ノード100−20を経由せずに応答制御メッセージ126が送信される。応答制御メッセージ126は、メッセージ種別、ユーザバッファアドレス、送信側リクエスト識別子、受信側リクエスト識別子および受信側一時バッファアドレスを含む。
メッセージ種別は、応答制御メッセージ123と同様である。ユーザバッファアドレスは、データペイロードを受信するためにノード100−26に確保されたユーザバッファ112bのアドレスである。送信側リクエスト識別子は、要求制御メッセージ125に含まれていた識別子であり、ノード100−2が付与した識別子である。受信側リクエスト識別子は、rendezvous通信を識別するためにノード100−26が付与する識別子である。受信側一時バッファアドレスは、完了制御メッセージを受信するためにノード100−26に一時的に確保された受信バッファ114hのアドレスである。
始点ノードであるノード100−2から終点ノードであるノード100−26には、ノード100−20を経由せずに完了制御メッセージ127が送信される。完了制御メッセージ127は、メッセージ種別および受信側リクエスト識別子を含む。メッセージ種別および受信側リクエスト識別子は、完了制御メッセージ124と同様である。
次に、各ノードの機能について説明する。
図17は、ノードの機能例を示すブロック図である。
ノード100は、通信バッファ領域131、ユーザバッファ領域132、初期化部133、送信処理部134、受信処理部135および中継制御部136を有する。通信バッファ領域131およびユーザバッファ領域132は、RAM102上の記憶領域を用いて実装される。初期化部133、送信処理部134、受信処理部135および中継制御部136は、例えば、CPU101が実行するプログラムモジュールを用いて実装される。他のノードも、ノード100と同様のモジュール構成を有する。
通信バッファ領域131には、ノード間通信に使用されユーザプログラムからは認識されないバッファが確保される。通信バッファ領域131は、ノード100に配置されたプロセス1つにつき、送信するメッセージを一時的に格納する1つの送信バッファと、受信したメッセージを一時的に格納する複数の受信バッファとを含む。通信バッファ領域131には、rendezvous通信においてデータペイロードを中継するための一時バッファが確保されることがある。ユーザバッファ領域132には、ユーザプログラムから認識されるバッファが確保される。ユーザバッファ領域132は、送信するデータペイロードまたは受信したデータペイロードを格納するユーザバッファを含む。
初期化部133は、並列処理の開始時にMPIライブラリの初期化を行う。初期化部133は、通信バッファ領域131に送信バッファを確保する。また、初期化部133は、並列処理に参加するプロセスを特定し、各プロセスのランクに基づいて同一グループ内のプロセスおよび他グループ内のパートナープロセスを判定する。初期化部133は、判定した同一グループ内のプロセスおよび他グループ内のパートナープロセスそれぞれに対して、個別の受信バッファを通信バッファ領域131に確保する。それ以外のプロセスに対応する受信バッファは、通信バッファ領域131に確保しなくてよい。
送信処理部134は、メッセージやデータペイロードの送信を行う。送信処理部134は、ノード100に配置されたプロセスからのeager通信の要求に応じて、ユーザバッファ領域132の中の指定されたユーザバッファからデータペイロードを読み出し、データメッセージを生成する。また、送信処理部134は、中継制御部136からのeager通信の要求に応じて、到着したデータメッセージを取得してヘッダを書き換える。送信処理部134は、生成したデータメッセージを通信バッファ領域131の中の送信バッファに書き込み、送信バッファに格納されたメッセージを順に送信する。
また、送信処理部134は、ノード100に配置されたプロセスまたは中継制御部136からのrendezvous通信の要求に応じて、各種の制御メッセージを生成する。送信処理部134は、生成した制御メッセージを通信バッファ領域131の中の送信バッファに書き込み、送信バッファに格納されたメッセージを順に送信する。また、送信処理部134は、ノード100に配置されたプロセスからの要求に応じて、ユーザバッファ領域132の中の指定されたユーザバッファからデータペイロードを読み出し、データペイロードを送信する。また、送信処理部134は、中継制御部136からのrendezvous通信の要求に応じて、通信バッファ領域131の中の指定された一時バッファからデータペイロードを読み出し、データペイロードを送信することがある。
受信処理部135は、メッセージやデータペイロードの受信を行う。受信処理部135は、通信バッファ領域131の中の受信バッファを監視し、データメッセージが到着すると受信バッファからデータメッセージを読み出す。受信処理部135は、終点ランクがノード100に配置されたプロセスのランクである場合、データメッセージに含まれるデータペイロードをユーザバッファ領域132の中のユーザバッファに書き込む。一方、受信処理部135は、終点ランクがノード100に配置されたプロセスのランクでない場合、データメッセージの内容を中継制御部136に通知する。
また、受信処理部135は、通信バッファ領域131の中の受信バッファを監視し、制御メッセージが到着すると受信バッファから制御メッセージを読み出す。受信処理部135は、制御メッセージの内容を送信処理部134または中継制御部136に通知する。
中継制御部136は、メッセージやデータペイロードの中継を制御する。中継制御部136は、ノード100が中継ノードとなるeager通信を検出すると、終点ランクのプロセスを判定し、終点ランクに対するデータメッセージの送信を送信処理部134に指示する。また、中継制御部136は、ノード100が中継ノードとなるrendezvous通信を検出すると、終点ランクのプロセスを判定し、終点ランクに対する制御メッセージの送信を送信処理部134に指示する。また、第1のrendezvous通信方法では、中継制御部136は、データペイロードの転送を送信処理部134に指示する。
次に、各ノードの処理手順について説明する。以下では代表してノード100の処理手順を説明するが、他のノードもノード100と同様の処理を行う。
図18は、初期化の手順例を示すフローチャートである。
(S10)初期化部133は、並列処理に参加するプロセスの総数(ランク総数)と、ノード100に配置されたプロセス111cのランク(自ランク)を取得する。ランク総数と自ランクは、ユーザプログラムの記述やノード間通信などを通じて決定される。
(S11)初期化部133は、ステップS10で取得した自ランクから、プロセス111cのグループ識別子(自グループID)とプロセス111cのグループ内識別子(自グループ内ID)とを算出する。前述のように、自グループIDは自ランクをNppgで割った商であり、自グループ内IDは自ランクをNppgで割った余りである。
(S12)初期化部133は、並列処理に参加する他プロセスのランク(他ランク)の中から1つ他ランクを選択する。選択可能な他ランクは、0以上かつランク総数−1以下の整数のうち自ランクと異なるものである。
(S13)初期化部133は、ステップS12で選択した他ランクから、他プロセスのグループ識別子(他ランクグループID)と他プロセスのグループ内識別子(他ランクグループ内ID)とを算出する。前述のように、他ランクグループIDは他ランクをNppgで割った商であり、他ランクグループ内IDは他ランクをNppgで割った余りである。
(S14)初期化部133は、ステップS11の自グループIDとステップS13の他ランクグループIDとを比較すると共に、ステップS11の自グループ内IDとステップS13の他ランクグループ内IDとを比較する。そして、初期化部133は、自グループIDと他ランクグループIDが同じか、または、自グループ内IDと他ランクグループ内IDとが同じであるか判断する。この条件を満たす場合、ステップS15に処理が進む。この条件を満たさない場合、すなわち、自グループIDと他ランクグループIDが異なり、かつ、自グループ内IDと他ランクグループ内IDとが異なる場合、ステップS16に処理が進む。
(S15)初期化部133は、ステップS12で選択した他ランク用の受信バッファを、通信バッファ領域131の中に確保する。
(S16)初期化部133は、ステップS12において全ての他ランクを選択したか判断する。全ての他ランクを選択した場合は初期化が終了し、未選択の他ランクがある場合はステップS12に処理が進む。
図19は、eager通信の手順例を示すフローチャートである。
(S20)送信処理部134は、プロセス111cからeager通信によるデータペイロードの送信要求を受け付けたか判断する。送信要求を受け付けた場合はステップS21に処理が進み、それ以外の場合はステップS24に処理が進む。
(S21)送信処理部134は、プロセス111cの自ランクから、自グループIDと自グループ内IDを算出する。また、送信処理部134は、プロセス111cによって指定された宛先ランクから、宛先グループIDと宛先グループ内IDを算出する。宛先グループIDの算出方法は前述の他ランクグループIDと同様であり、宛先グループ内IDの算出方法は前述の他ランクグループ内IDと同様である。
(S22)送信処理部134は、ステップS21の自グループIDと宛先グループIDが同じか、または、ステップS21の自グループ内IDと宛先グループ内IDとが同じであるか判断する。この条件を満たす場合、ステップS28に処理が進む。この条件を満たさない場合、すなわち、自グループIDと宛先グループIDが異なり、かつ、自グループ内IDと宛先グループ内IDとが異なる場合、ステップS23に処理が進む。
(S23)送信処理部134は、宛先グループIDと自グループ内IDとに基づいて中継プロセスのランクを決定する。中継プロセスは、宛先プロセスと同じグループに属するプロセスのうち、プロセス111cと同じグループ内IDをもつパートナープロセスである。中継プロセスのランク=宛先グループID×Nppg+自グループ内IDと算出できる。ただし、上記の条件を満たすパートナープロセスが存在しない場合、送信処理部134は、プロセス111cが属するグループの中から、宛先プロセスと同じグループ内IDをもつプロセスを中継プロセスとして選択する。送信処理部134は、決定した中継プロセスのランクを宛先ランクとする。また、送信処理部134は、プロセス111cから指定された宛先ランクを終点ランクとする。そして、ステップS28に処理が進む。
(S24)受信処理部135は、何れかの受信バッファにデータメッセージが到着したか判断する。データメッセージが到着した場合はステップS25に処理が進み、データメッセージが到着していない場合は処理が終了する。
(S25)受信処理部135は、到着したデータメッセージに含まれる終点ランクが自ランクであるか判断する。終点ランクが自ランクである場合はステップS27に処理が進み、終点ランクが自ランクでない場合はステップS26に処理が進む。
(S26)中継制御部136は、終点ランクを新たな宛先ランクに決定し、データメッセージの転送を送信処理部134に指示する。そして、ステップS28に処理が進む。
(S27)受信処理部135は、到着したデータメッセージに含まれるデータペイロードをユーザバッファに書き込む。このとき、受信処理部135はプロセス111cからeager通信によるデータペイロードの受信要求を受け付けており、この受信要求によってユーザバッファが指定されている。そして、処理が終了する。
(S28)送信処理部134は、データペイロードにヘッダを付したデータメッセージを、送信バッファ113dに書き込む。プロセス111cからの要求に応じてデータメッセージを送信する場合、送信処理部134は、プロセス111cによって指定されたユーザバッファからデータペイロードを読み出してヘッダを付加する。このとき、ヘッダの送信元ランクおよび始点ランクは自ランクであり、終点ランクはプロセス111cによって指定された宛先ランクである。データメッセージを転送する場合、送信処理部134はヘッダを書き換える。このとき、ヘッダの送信元ランクは自ランクであり、始点ランクおよび終点ランクは元のデータメッセージのままである。
(S29)送信処理部134は、送信バッファ113dに格納されたデータメッセージを、宛先ランクに対応するノード(宛先ノード)が有する受信バッファのうち自ランク用の受信バッファ宛てに送信する。送信処理部134は、データメッセージの送信時に、宛先となる受信バッファのアドレスを指定する。自ランク用の受信バッファのアドレスは、MPIライブラリの初期化時のノード間通信を通じて予め知っている。自ランクが始点ランクであり中継プロセスが存在しない場合、宛先ランクは終点ランクと一致する。自ランクが始点ランクであり中継プロセスが存在する場合、宛先ランクは中継プロセスのランクである。自ランクが始点ランクでない場合、宛先ランクは終点ランクである。
図20は、rendezvous通信の手順例を示す第1のフローチャートである。
ここでは、第1のrendezvous通信方法を説明する。
(S30)送信処理部134は、プロセス111cからrendezvous通信によるデータペイロードの送信要求を受け付けたか判断する。送信要求を受け付けた場合はステップS31に処理が進み、それ以外の場合はステップS40に処理が進む。
(S31)送信処理部134は、プロセス111cの自ランクから、自グループIDと自グループ内IDを算出する。また、送信処理部134は、プロセス111cによって指定された宛先ランクから、宛先グループIDと宛先グループ内IDを算出する。
(S32)送信処理部134は、ステップS31の自グループIDと宛先グループIDが同じか、または、ステップS31の自グループ内IDと宛先グループ内IDとが同じであるか判断する。この条件を満たす場合、ステップS34に処理が進む。この条件を満たさない場合、すなわち、自グループIDと宛先グループIDが異なり、かつ、自グループ内IDと宛先グループ内IDとが異なる場合、ステップS33処理が進む。
(S33)送信処理部134は、宛先グループIDと自グループ内IDとに基づいて中継プロセスのランクを決定する。中継プロセスのランク=宛先グループID×Nppg+自グループ内IDと算出できる。ただし、上記の条件を満たす中継プロセスが存在しない場合、送信処理部134は、プロセス111cが属するグループの中から、宛先プロセスと同じグループ内IDをもつプロセスを中継プロセスとして選択する。送信処理部134は、決定した中継プロセスのランクを宛先ランクとする。また、送信処理部134は、プロセス111cから指定された宛先ランクを終点ランクとする。
(S34)送信処理部134は、要求制御メッセージを生成して送信バッファ113dに書き込む。要求制御メッセージの送信元ランクは自ランクであり、送信側リクエスト識別子は送信処理部134が指定した識別子である。プロセス111cの要求に応じてデータペイロードを送信する場合、始点ランクは自ランクであり、終点ランクはプロセス111cによって指定された宛先ランクである。データペイロードを転送する場合、始点ランクおよび終点ランクは元の要求制御メッセージと同じである。
(S35)送信処理部134は、送信バッファ113dに格納された要求制御メッセージを、宛先ランクに対応する宛先ノードが有する受信バッファのうち自ランク用の受信バッファ宛てに送信する。このとき、自ランクが始点ランクであり中継プロセスが存在しない場合、宛先ランクは終点ランクと一致する。自ランクが始点ランクであり中継プロセスが存在する場合、宛先ランクは中継プロセスのランクである。自ランクが始点ランクでない場合、宛先ランクは終点ランクである。
(S36)受信処理部135は、ステップS35の宛先ランク用の受信バッファに応答制御メッセージが到着したことを検出する。
(S37)送信処理部134は、送信するデータペイロードを読み出す。自ランクが始点ランクである場合、送信処理部134は、プロセス111cによって指定されたユーザバッファからデータペイロードを読み出す。自ランクが始点ランクでない場合、送信処理部134は、一時バッファから転送すべきデータペイロードを読み出す。そして、送信処理部134は、ステップS36の応答制御メッセージによって指定されたバッファ宛てにデータペイロードを送信する。宛先ランクが終点ランクである場合、応答制御メッセージによって指定されるバッファはユーザバッファである。宛先ランクが終点ランクでない場合、応答制御メッセージによって指定されるバッファは一時バッファである。
(S38)送信処理部134は、完了制御メッセージを生成して送信バッファ113dに書き込む。完了制御メッセージの受信側リクエスト識別子は、ステップS36の応答制御メッセージに含まれている受信側リクエスト識別子と同じである。
(S39)送信処理部134は、送信バッファ113dに格納された完了制御メッセージを、ステップS35と同じ受信バッファ宛てに送信する。そして、処理が終了する。
図21は、rendezvous通信の手順例を示す第2のフローチャートである。
(S40)受信処理部135は、何れかの受信バッファに要求制御メッセージが到着したか判断する。要求制御メッセージが到着した場合はステップS41に処理が進み、要求制御メッセージが到着していない場合は処理が終了する。
(S41)受信処理部135は、到着した要求制御メッセージに含まれる終点ランクが自ランクであるか判断する。終点ランクが自ランクである場合はステップS43に処理が進み、終点ランクが自ランクでない場合はステップS42に処理が進む。
(S42)受信処理部135は、データペイロード用の一時バッファを確保する。
(S43)送信処理部134は、応答制御メッセージを生成して送信バッファ113dに書き込む。応答制御メッセージの送信側リクエスト識別子は、ステップS40の要求制御メッセージに含まれている送信側リクエスト識別子と同じである。受信側リクエスト識別子は、受信処理部135が指定した識別子である。終点ランクが自ランクである場合、ユーザバッファアドレスは、プロセス111cによって指定されたユーザバッファのアドレスである。このとき、受信処理部135はプロセス111cからrendezvous通信によるデータペイロードの受信要求を受け付けており、この受信要求によってユーザバッファが指定されている。終点ランクが自ランクでない場合、ユーザバッファアドレスはステップS42で確保した一時バッファのアドレスである。
(S44)送信処理部134は、送信バッファ113dに格納された応答制御メッセージを、要求制御メッセージに含まれている送信元ランクに対応するノード(送信元ノード)が有する受信バッファのうち自ランク用の受信バッファ宛てに送信する。
(S45)受信処理部135は、ステップS44の送信元ランク用の受信バッファ(ステップS40と同じ受信バッファ)に完了制御メッセージが到着したことを検出する。
(S46)受信処理部135は、ステップS40の要求制御メッセージに含まれる終点ランクが自ランクであるか判断する。終点ランクが自ランクである場合はrendezvous通信が終了し、終点ランクが自ランクでない場合はステップS47に処理が進む。
(S47)中継制御部136は、終点ランクを新たな宛先ランクに決定し、データペイロードの転送を送信処理部134に指示する。そして、ステップS34に処理が進む。
図22は、rendezvous通信の手順例を示す第3のフローチャートである。
ここでは、第2のrendezvous通信方法を説明する。
(S50)送信処理部134は、プロセス111cからrendezvous通信によるデータペイロードの送信要求を受け付けたか判断する。送信要求を受け付けた場合はステップS51に処理が進み、それ以外の場合はステップS62に処理が進む。
(S51)受信処理部135は、受信バッファを一時的に確保する。
(S52)送信処理部134は、プロセス111cの自ランクから、自グループIDと自グループ内IDを算出する。また、送信処理部134は、プロセス111cによって指定された宛先ランクから、宛先グループIDと宛先グループ内IDを算出する。
(S53)送信処理部134は、ステップS52の自グループIDと宛先グループIDが同じか、または、ステップS52の自グループ内IDと宛先グループ内IDとが同じであるか判断する。この条件を満たす場合、ステップS55に処理が進む。この条件を満たさない場合、すなわち、自グループIDと宛先グループIDが異なり、かつ、自グループ内IDと宛先グループ内IDとが異なる場合、ステップS54に処理が進む。
(S54)送信処理部134は、宛先グループIDと自グループ内IDとに基づいて中継プロセスのランクを決定する。中継プロセスのランク=宛先グループID×Nppg+自グループ内IDと算出できる。ただし、上記の条件を満たす中継プロセスが存在しない場合、送信処理部134は、プロセス111cが属するグループの中から、宛先プロセスと同じグループ内IDをもつプロセスを中継プロセスとして選択する。送信処理部134は、決定した中継プロセスのランクを宛先ランクとする。また、送信処理部134は、プロセス111cから指定された宛先ランクを終点ランクとする。
(S55)送信処理部134は、要求制御メッセージを生成して送信バッファ113dに書き込む。要求制御メッセージの送信元ランクおよび始点ランクは自ランクであり、送信側リクエスト識別子は送信処理部134が指定した識別子であり、終点ランクはプロセス111cによって指定された宛先ランクである。送信側一時バッファアドレスは、ステップS51で確保した受信バッファのアドレスである。
(S56)送信処理部134は、送信バッファ113dに格納された要求制御メッセージを、宛先ランクに対応する宛先ノードが有する受信バッファのうち自ランク用の受信バッファ宛てに送信する。中継プロセスが存在しない場合、宛先ランクは終点ランクと一致する。中継プロセスが存在する場合、宛先ランクは中継プロセスのランクである。
(S57)受信処理部135は、ステップS51で確保した受信バッファに応答制御メッセージが到着したことを検出する。
(S58)送信処理部134は、プロセス111cによって指定されたユーザバッファからデータペイロードを読み出し、ステップS57の応答制御メッセージによって指定されたユーザバッファ宛てにデータペイロードを送信する。
(S59)送信処理部134は、完了制御メッセージを生成して送信バッファ113dに書き込む。完了制御メッセージの受信側リクエスト識別子は、ステップS57の応答制御メッセージに含まれている受信側リクエスト識別子と同じである。
(S60)送信処理部134は、送信バッファ113dに格納された完了制御メッセージを、応答制御メッセージによって指定された受信バッファ宛てに送信する。
(S61)受信処理部135は、ステップS51の受信バッファを解放する。そして、処理が終了する。
図23は、rendezvous通信の手順例を示す第4のフローチャートである。
(S62)受信処理部135は、何れかの受信バッファに要求制御メッセージが到着したか判断する。要求制御メッセージが到着した場合はステップS63に処理が進み、要求制御メッセージが到着していない場合は処理が終了する。
(S63)受信処理部135は、到着した要求制御メッセージに含まれる終点ランクが自ランクであるか判断する。終点ランクが自ランクである場合はステップS67に処理が進み、終点ランクが自ランクでない場合はステップS64に処理が進む。
(S64)中継制御部136は、終点ランクを新たな宛先ランクに決定し、データペイロードの転送を送信処理部134に指示する。
(S65)送信処理部134は、要求制御メッセージを送信バッファ113dに書き込む。要求制御メッセージの送信元ランクは自ランクである。送信側リクエスト識別子、始点ランク、終点ランクおよび送信側一時バッファアドレスは、元の要求制御メッセージと同じである。すなわち、実質的に元の要求制御メッセージの内容が転送される。
(S66)送信処理部134は、送信バッファ113dに格納された要求制御メッセージを、宛先ランクに対応する宛先ノードが有する受信バッファのうち自ランク用の受信バッファ宛てに送信する。そして、処理が終了する。
(S67)受信処理部135は、受信バッファを一時的に確保する。
(S68)送信処理部134は、応答制御メッセージを生成して送信バッファ113dに書き込む。応答制御メッセージの送信側リクエスト識別子は、ステップS62の要求制御メッセージに含まれている送信側リクエスト識別子と同じである。受信側リクエスト識別子は、受信処理部135が指定した識別子である。ユーザバッファアドレスは、プロセス111cによって指定されたユーザバッファのアドレスである。受信側一時バッファアドレスは、ステップS67で確保した受信バッファのアドレスである。
(S69)送信処理部134は、送信バッファ113dに格納された応答制御メッセージを、要求制御メッセージに含まれている送信側一時バッファアドレスが示す受信バッファ宛てに送信する。この受信バッファは、要求制御メッセージに含まれている始点ランクに対応するノード(始点ノード)が有する受信バッファである。
(S70)受信処理部135は、ステップS67で確保した受信バッファに完了制御メッセージが到着したことを検出する。
(S71)受信処理部135は、ステップS67の受信バッファを解放する。
第2の実施の形態の並列処理装置によれば、各ノードには同一グループに属するプロセス用の受信バッファおよび他グループのパートナープロセス用の受信バッファをRAMに確保すればよく、それ以外の受信バッファを恒常的に確保しておかなくてよい。よって、受信バッファの数を削減することができ、RAM領域の使用量を削減できる。また、各プロセスのランクからグループ識別子とグループ内識別子が算出され、グループ識別子とグループ内識別子に基づいて何れのプロセス用の受信バッファを確保すればよいか判定される。よって、各ノードが独立に確保すべき受信バッファを判定できる。
また、原則として、送信元プロセスと同じグループ内識別子をもつパートナープロセスが中継プロセスとして選択される。よって、メッセージを転送するノードを分散させることができ、特定のノードにメッセージが集中することを抑制できる。その結果、特定のノードがボトルネックとなって並列処理装置の性能が低下することを抑制できる。また、第2のrendezvous通信方法によれば、中継プロセスをもつノードは要求制御メッセージのみを転送すればよく、他の制御メッセージおよびデータペイロードは始点ノードと終点ノードの間で直接送信される。よって、メッセージの送信回数を削減できる。
10 並列処理装置
11,11−1,11−2,11−3 ノード
12 メモリ
13 プロセッサ
14a,14b 受信バッファ
15,15−1 グループ

Claims (7)

  1. 複数のノードのうちの第1のノードとして用いられるコンピュータに、
    前記複数のノードのうち前記第1のノードと同じ第1のグループに属する1以上の第2のノードを決定し、前記1以上の第2のノードそれぞれに対して前記第1のノードが有するメモリ上に第1の受信バッファを確保し、
    前記複数のノードのうち第2のグループに属する第3のノードおよび1以上の第4のノードを決定し、前記第3のノードに対して前記メモリ上に第2の受信バッファを確保すると共に前記1以上の第4のノードに対しては前記メモリ上の受信バッファを省略し、
    前記1以上の第2のノードのうちの1つの第2のノードと通信する場合、前記1つの第2のノードに対応する前記第1の受信バッファをメッセージの受信に使用させ、前記第3のノードと通信する場合、前記第2の受信バッファをメッセージの受信に使用させ、前記1以上の第4のノードのうちの1つの第4のノードと通信する場合、前記第1の受信バッファまたは前記第2の受信バッファをメッセージの受信に使用させる、
    処理を実行させるノード間通信プログラム。
  2. 前記複数のノードそれぞれに識別子が割り当てられ、
    前記第3のノードは、前記第1のノードの前記識別子および前記第2のグループに属する各ノードの前記識別子に基づいて前記第2のグループの中から選択される、
    請求項1記載のノード間通信プログラム。
  3. 前記コンピュータに更に、前記複数のノードそれぞれに対してグループ識別子およびグループ内識別子を算出する処理を実行させ、
    前記1以上の第2のノードは前記グループ識別子が前記第1のノードと同じノードであり、前記第3のノードは前記グループ識別子が前記第1のノードと異なり前記グループ内識別子が前記第1のノードと同じノードであり、前記1以上の第4のノードは前記グループ識別子および前記グループ内識別子が前記第1のノードと異なるノードである、
    請求項1記載のノード間通信プログラム。
  4. 前記コンピュータに更に、前記1つの第2のノードとは直接通信し、前記第3のノードとは直接通信し、前記1つの第4のノードとは前記1つの第2のノードまたは前記第3のノードを経由して通信するよう制御する処理を実行させる、
    請求項1記載のノード間通信プログラム。
  5. 前記コンピュータに更に、
    前記1つの第4のノードによって生成された第1のメッセージが前記1つの第2のノードを経由して前記第1の受信バッファに到着するか、または、前記第1のメッセージが前記第3のノードを経由して前記第2の受信バッファに到着した場合、前記1つの第4のノードに対して前記メモリ上に第3の受信バッファを一時的に確保し、
    前記第1のメッセージに関連する第2のメッセージを、前記第3の受信バッファを用いて前記1つの第4のノードから直接受信することを許容する、
    処理を実行させる請求項1記載のノード間通信プログラム。
  6. メモリおよびプロセッサを有する第1のノードと、
    前記第1のノードとネットワークで接続された複数の他のノードとを有し、
    前記プロセッサは、
    前記複数の他のノードのうち前記第1のノードと同じ第1のグループに属する1以上の第2のノードを決定し、前記1以上の第2のノードそれぞれに対して前記メモリ上に第1の受信バッファを確保し、
    前記複数の他のノードのうち第2のグループに属する第3のノードおよび1以上の第4のノードを決定し、前記第3のノードに対して前記メモリ上に第2の受信バッファを確保すると共に前記1以上の第4のノードに対しては前記メモリ上の受信バッファを省略し、
    前記1以上の第2のノードのうちの1つの第2のノードと通信する場合、前記1つの第2のノードに対応する前記第1の受信バッファをメッセージの受信に使用させ、前記第3のノードと通信する場合、前記第2の受信バッファをメッセージの受信に使用させ、前記1以上の第4のノードのうちの1つの第4のノードと通信する場合、前記第1の受信バッファまたは前記第2の受信バッファをメッセージの受信に使用させる、
    並列処理装置。
  7. 並列処理装置が有する複数のノードのうちの第1のノードが、
    前記複数のノードのうち前記第1のノードと同じ第1のグループに属する1以上の第2のノードを決定し、前記1以上の第2のノードそれぞれに対して前記第1のノードが有するメモリ上に第1の受信バッファを確保し、
    前記複数のノードのうち第2のグループに属する第3のノードおよび1以上の第4のノードを決定し、前記第3のノードに対して前記メモリ上に第2の受信バッファを確保すると共に前記1以上の第4のノードに対しては前記メモリ上の受信バッファを省略し、
    記1以上の第2のノードのうちの1つの第2のノードと通信する場合、前記1つの第2のノードに対応する前記第1の受信バッファをメッセージの受信に使用し、前記第3のノードと通信する場合、前記第2の受信バッファをメッセージの受信に使用し、前記1以上の第4のノードのうちの1つの第4のノードと通信する場合、前記第1の受信バッファまたは前記第2の受信バッファをメッセージの受信に使用する、
    ノード間通信方法。
JP2016255821A 2016-12-28 2016-12-28 ノード間通信プログラム、並列処理装置およびノード間通信方法 Active JP6799258B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2016255821A JP6799258B2 (ja) 2016-12-28 2016-12-28 ノード間通信プログラム、並列処理装置およびノード間通信方法
US15/788,878 US10268529B2 (en) 2016-12-28 2017-10-20 Parallel processing apparatus and inter-node communication method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016255821A JP6799258B2 (ja) 2016-12-28 2016-12-28 ノード間通信プログラム、並列処理装置およびノード間通信方法

Publications (2)

Publication Number Publication Date
JP2018106637A JP2018106637A (ja) 2018-07-05
JP6799258B2 true JP6799258B2 (ja) 2020-12-16

Family

ID=62629794

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016255821A Active JP6799258B2 (ja) 2016-12-28 2016-12-28 ノード間通信プログラム、並列処理装置およびノード間通信方法

Country Status (2)

Country Link
US (1) US10268529B2 (ja)
JP (1) JP6799258B2 (ja)

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2826028B2 (ja) * 1993-01-28 1998-11-18 富士通株式会社 分散メモリ型プロセッサシステム
JPH11110362A (ja) 1997-10-01 1999-04-23 Hitachi Ltd 計算機間データ通信方法
JP3632635B2 (ja) * 2001-07-18 2005-03-23 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
US8711154B2 (en) * 2008-06-09 2014-04-29 Freescale Semiconductor, Inc. System and method for parallel video processing in multicore devices
JP5614491B2 (ja) * 2011-03-11 2014-10-29 富士通株式会社 コマンド制御方法およびコマンド制御プログラム
US20140379725A1 (en) * 2013-06-19 2014-12-25 Microsoft Corporation On demand parallelism for columnstore index build
US20150293974A1 (en) * 2014-04-10 2015-10-15 David Loo Dynamic Partitioning of Streaming Data
US10423511B2 (en) * 2016-11-29 2019-09-24 International Business Machines Corporation Packet flow tracing in a parallel processor complex
US10223301B2 (en) * 2016-11-29 2019-03-05 International Business Machines Corporation Pre-allocating memory buffers by physical processor and using a bitmap metadata in a control program

Also Published As

Publication number Publication date
JP2018106637A (ja) 2018-07-05
US10268529B2 (en) 2019-04-23
US20180181450A1 (en) 2018-06-28

Similar Documents

Publication Publication Date Title
JP6447329B2 (ja) 並列計算制御装置、並列計算システムおよびマイグレーション時間推定プログラム
CN104750559B (zh) 跨多节点的存储器资源的池化
JP2020123041A (ja) メモリシステムおよび制御方法
US9535873B2 (en) System, computer-implemented method and computer program product for direct communication between hardward accelerators in a computer cluster
JP5046801B2 (ja) 画像処理装置及びプログラム
JP5533315B2 (ja) 情報処理システム、管理装置、処理要求装置及びプログラム
JPH10301873A (ja) 通信システムで比較的大きなデータ・オブジェクトの伝送を制御するシステムと方法
US20150067695A1 (en) Information processing system and graph processing method
WO2011162230A1 (ja) 情報処理システム、中継装置、および情報処理方法
US11243714B2 (en) Efficient data movement method for in storage computation
CN111124299A (zh) 数据存储管理方法、装置、设备、系统及存储介质
WO2020253407A1 (zh) 一种执行写操作、读操作的方法及装置
CN111240853A (zh) 一种节点内大块数据双向传输方法及系统
JP6799258B2 (ja) ノード間通信プログラム、並列処理装置およびノード間通信方法
Breitgand et al. Network aware virtual machine and image placement in a cloud
US20210165717A1 (en) I/O To Unpinned Memory Supporting Memory Overcommit And Live Migration Of Virtual Machines
US10367886B2 (en) Information processing apparatus, parallel computer system, and file server communication program
US20140143441A1 (en) Chip multi processor and router for chip multi processor
WO2012143975A1 (en) Storage apparatus and data control method of the same
JP5617586B2 (ja) 情報処理プログラム、中継装置及び中継管理装置
JP7193733B2 (ja) 通信制御プログラム、通信制御方法および情報処理装置
US10516596B2 (en) Information processing apparatus, method and non-transitory computer-readable storage medium
WO2018221118A1 (ja) 仮想ネットワークシステム、および仮想ネットワークシステムの通信方法
JP2018106709A (ja) OpenCLカーネルを処理する方法、及びそれを遂行するコンピューティング装置
US10997107B2 (en) Transaction routing for system on chip

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190910

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20190917

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20190917

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200716

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200811

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201006

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20201020

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201102

R150 Certificate of patent or registration of utility model

Ref document number: 6799258

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150