(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-01-10
(45)【発行日】2023-01-18
(54)【発明の名称】情報処理装置、同期装置及び情報処理装置の制御方法
(51)【国際特許分類】
G06F 15/173 20060101AFI20230111BHJP
G06F 9/52 20060101ALI20230111BHJP
【FI】
G06F15/173 660D
G06F15/173 660C
G06F9/52 150A
(21)【出願番号】P 2019082006
(22)【出願日】2019-04-23
【審査請求日】2022-01-11
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】吉本 和矢
(72)【発明者】
【氏名】近藤 祐史
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開2012-128808(JP,A)
【文献】特開2012-128809(JP,A)
【文献】米国特許出願公開第2011/0087819(US,A1)
【文献】特開平08-110894(JP,A)
【文献】松田元彦、田中良夫、久保田和人、佐藤三久,SMPクラスタ向けネットワーク・インタフェースAM通信,情報処理学会論文誌,日本,社団法人情報処理学会,1999年05月15日,第40巻,第5号,pp.2225-2234,ISSN 0387-5806
(58)【調査した分野】(Int.Cl.,DB名)
G06F 15/173
G06F 9/52
(57)【特許請求の範囲】
【請求項1】
演算処理装置、記憶装置及び段階的に処理される複数の処理段階を含む同期処理を実行する同期装置を有する情報処理装置であって、
前記演算処理装置は、
前記記憶装置を用いて演算処理を実行する演算実行部と、
前記同期処理の所定処理段階で用いる設定情報を前記同期装置に送信し、且つ、前記演算処理における前記同期処理の実行を前記同期装置に指示する設定処理部とを備え、
前記同期装置は、
前記設定処理部から受信した前記設定情報を管理する設定情報管理領域と、
前記所定処理段階の次処理段階で使用される後段設定情報管理領域の使用状態を記憶する使用状態記憶部と、
前記次処理段階に前記同期処理を進める際に、前記使用状態記憶部における前記後段設定情報管理領域の使用状態を使用中にし、前記後段設定情報管理領域を有する情報処理装置から解放通知を受信すると前記使用状態記憶部における前記後段設定情報管理領域の使用状態を未使用にする状態管理部と、
前記同期処理が前記所定処理段階に移行した場合、前記使用状態記憶部における前記後段設定情報管理領域の使用状態が未使用であれば、前記設定情報管理領域に格納された前記設定情報を基に前記所定処理段階における処理を実行して前記次処理段階に同期処理を進め、前記設定情報管理領域の前記解放通知を出力する同期制御部とを備えた
ことを特徴とする情報処理装置。
【請求項2】
同期の待ち合わせ状態情報を保持する同期状態保持部と、
前記後段設定情報管理領域を有する情報処理装置から同期用信号を受信すると、前記後段設定情報管理領域からの同期用信号の受信情報を前記同期状態保持部に待ち合わせ状態情報に登録する状態管理部とをさらに備え
前記同期制御部は、前記同期状態保持部が保持する前記待ち合わせ状態情報を基に前記次処理段階に同期処理を進めるか否かを判定する
ことを特徴とする請求項1に記載の情報処理装置。
【請求項3】
前記同期制御部は、前記同期処理が完了した場合、前記演算処理装置へ同期処理完了を通知し、
前記演算実行部は、前記演算処理において前記同期処理を用いる場合、前記同期処理の開始を前記設定処理部へ指示し、前記同期処理完了の通知を前記同期制御部から受信することで前記同期制御部による同期処理の完了を確認する
ことを特徴とする請求項1又は2に記載の情報処理装置。
【請求項4】
段階的に処理される複数の処理段階を含む同期処理を実行する同期装置であって、
前記同期処理の所定処理段階で用いる設定情報を管理する設定情報管理領域と、
前記所定処理段階の次処理段階で使用される後段設定情報管理領域の使用状態を記憶する使用状態記憶部と、
前記次処理段階に前記同期処理を進める際に、前記使用状態記憶部における前記後段設定情報管理領域の使用状態を使用中にし、前記後段設定情報管理領域を有する情報処理装置から解放通知を受信すると前記使用状態記憶部における前記後段設定情報管理領域の使用状態を未使用にする状態管理部と、
前記同期処理が前記所定処理段階に移行した場合、前記使用状態記憶部における前記後段設定情報管理領域の使用状態が未使用であれば、前記設定情報管理領域に格納された前記設定情報を基に前記所定処理段階における処理を実行して前記次処理段階に同期処理を進め、前記設定情報管理領域の前記解放通知を出力する同期制御部と
を備えたことを特徴とする同期装置。
【請求項5】
演算処理装置、記憶装置及び段階的に処理される複数の処理段階を含む同期処理を実行する同期装置を有する情報処理装置の制御方法であって、
前記演算処理装置に、
前記記憶装置を用いて演算処理を実行させ、
前記演算処理において同期処理を実行する場合、前記同期処理の所定処理段階で用いる設定情報を前記同期装置へ送信させ、且つ、前記同期処理の実行の指示を前記同期装置へ送信させ、
前記同期装置に、
前記演算処理装置から受信した前記設定情報を設定情報管理領域に格納させ、
前記所定処理段階の次処理段階で使用される後段設定情報管理領域の使用状態を記憶させ、
前記次処理段階に前記同期処理を進める際に、前記後段設定情報管理領域の使用状態を使用中にさせ、前記後段設定情報管理領域を有する情報処理装置から解放通知を受信すると前記後段設定情報管理領域の使用状態を未使用にさせ、
前記同期処理が前記所定処理段階に移行した場合、前記後段設定情報管理領域の使用状態が未使用であれば、前記設定情報管理領域に格納された前記設定情報を基に前記所定処理段階における処理を実行させて前記次処理段階に同期処理を進めさせ、前記解放通知を出力させる
ことを特徴とする情報処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、同期装置及び情報処理装置の制御方法に関する。
【背景技術】
【0002】
HPC(High Performance Computing)などの分野では単体のプロセスを計算するだけでなく、複数のプロセスが協調して並列計算を行うことが多い。このような場合、プロセス同士が協調して計算を行うためにプロセス間で通信が行われる。プロセス間の通信では1対1の通信だけでなく1対NやN対NやN対1などの集団通信も存在する。
【0003】
集団通信を行う際にプロセス間の同期を取る方法としてバリア同期が存在する。バリア同期は、各プロセスが実行する処理の進行具合を合わせるために使用する同期手法である。バリア同期では、バリアポイントと呼ばれる各プロセスにおける同期をとるポイントが設定される。バリア同期を行うそれぞれのプロセスにおいて、処理がバリアポイントに到達すると、そのプロセスは同期処理を開始する。そして、通信を行うことで同期をとる全てのプロセスがバリアポイントに到達したことを認識する。これにより、並列処理される複数のプロセス間で同期をとることができる。
【0004】
バリア同期を高速化させるための専用ハードウェアが存在する。一方で、ソフトウェアでも、バリア同期を含む集団通信におけるノンブロッキング通信がフレームワークとして定義されるなど集団通信の高速化、高機能化に大きな期待が寄せられている。
【0005】
さらに、バリア同期に関する技術として、バリアポイントに達したプロセスがメッセージを送出し、各プロセスは受信したメッセージの数を基にバリア同期が完了したか否かを判定する従来技術がある。また、スレッドがバリアポイントに達すると同期用領域に通知をセットし、他のスレッドの同期用領域を確認して両方併せて同期が完了したかを確認して同期用領域に通知をセットすることを繰り返して同期の完了を判定する従来技術がある。
【先行技術文献】
【特許文献】
【0006】
【文献】特開2010-282189号公報
【文献】特開2010-282190号公報
【文献】特開2008-295115号公報
【文献】特開平7-152712号公報
【文献】特開2003-108392号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかしながら、従来のバリア同期装置は、バリア同期処理の開始でレジスタなどの資源のロックを行い、バリア同期処理の完了で資源を開放する仕組みであった。そのため、従来のバリア同期装置は、連続した複数のバリア同期処理を行う場合、1つ1つのバリア同期処理が完了しなければ次のバリア同期処理を行うことが困難であった。
【0008】
これに対して、近年バリア同期処理を複数のステージに分けることができるようになった。しかし、従来のバリア同期装置では、バリア同期処理の途中で資源を開放することは行われておらず、同じ資源を使用する場合は1つのバリア同期処理を完了させてから次のバリア同期処理を行うことは避けられなかった。そのため、従来のバリア同期装置では、バリア同期処理を高速化させることは困難である。また、ハードウェアやソフトウェアを使用してバリア同期処理を高速化する従来技術であっても、同じ資源を使用するには1つのバリア同期処理を完了させてから次のバリア同期処理を行うため、バリア同期処理を高速化させることは困難である。
【0009】
さらに、受信したメッセージの数を基にバリア同期の完了を判定する従来技術であっても、同じ資源を使用するには1つのバリア同期処理を完了させてから次のバリア同期処理を行うため、バリア同期処理を高速化させることは困難である。これは、同期用領域を用いてバリア同期処理の完了を判定する従来技術であっても同様である。
【0010】
開示の技術は、上記に鑑みてなされたものであって、連続した複数のバリア同期処理の場合であっても処理を高速化することが可能な情報処理装置、同期装置及び情報処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【0011】
本願の開示する情報処理装置、同期装置及び情報処理装置の制御方法の一つの態様において、情報処理装置は、演算処理装置、記憶装置及び段階的に処理される複数の処理段階を含む同期処理を実行する同期装置を有する。前記演算処理装置は、前記記憶装置を用いて演算処理を実行する演算実行部と、前記同期処理の所定処理段階で用いる設定情報を前記同期装置に送信し、且つ、前記演算処理における前記同期処理の実行を前記同期装置に指示する設定処理部とを備える。前記同期装置は、以下の各部を備える。設定情報管理領域は、前記設定処理部から受信した前記設定情報を管理する。使用状態記憶部は、前記所定処理段階の次処理段階で使用される後段設定情報管理領域の使用状態を記憶する。状態管理部は、前記次処理段階に前記同期処理を進める際に、前記使用状態記憶部における前記後段設定情報管理領域の使用状態を使用中にし、前記後段設定情報管理領域を有する情報処理装置から解放通知を受信すると前記使用状態記憶部における前記後段設定情報管理領域の使用状態を未使用にする。同期制御部は、前記同期処理が前記所定処理段階に移行した場合、前記使用状態記憶部における前記後段設定情報管理領域の使用状態が未使用であれば、前記設定状態情報管理領域に格納された前記設定情報を基に前記所定処理段階における処理を実行して前記次処理段階に同期処理を進め、前記設定情報管理領域の前記解放通知を出力する。
【発明の効果】
【0012】
1つの側面では、本発明は、連続した複数のバリア同期処理を高速化することが可能となる。
【図面の簡単な説明】
【0013】
【
図1】
図1は、バリア同期を実行する情報処理システムの一例を表すシステム構成図である。
【
図3】
図3は、4つのプロセスがバタフライ演算により同期処理を実行する場合の処理の流れを示す図である。
【
図4】
図4は、実施例に係るバリア同期装置のブロック図である。
【
図5】
図5は、同期部の詳細を表すブロック図である。
【
図6】
図6は、プロセスにより使用される制御レジスタのステージ毎の遷移を表す図である。
【
図7】
図7は、バリア同期処理の高速化について説明するための図である。
【
図8】
図8は、実施例に係るバリア同期装置によるバリア同期処理全体のフローチャートである。
【
図9】
図9は、実施例に係るバリア同期装置による受信側処理のフローチャートである。
【
図10】
図10は、実施例に係るバリア同期装置による送信側処理のフローチャートである。
【発明を実施するための形態】
【0014】
以下に、本願の開示する情報処理装置、同期装置及び情報処理装置の制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、同期装置及び情報処理装置の制御方法が限定されるものではない。
【実施例1】
【0015】
図1は、バリア同期を実行する情報処理システムの一例を表すシステム構成図である。ノード1~4は、演算を実行する情報処理装置である。ノード1~4は、ネットワーク5に接続される。ノード1~4は、ネットワーク5を介してデータを相互に送受信する。ノード1~4は、いずれもバリア同期に関して同じ機能を有する。以下では、ノード1を例に説明する。
【0016】
図2は、ノードのブロック図である。ノード1は、バリア同期装置10、演算処理部であるCPU11、記憶装置であるメモリ12、システム制御部13、ネットワークインタフェース14及び入出力装置15を有する。バリア同期装置10が、「同期装置」の一例にあたる。
【0017】
CPU11は、システム制御部13とバスで接続される。そして、CPU11は、システム制御部13を介して、バリア同期装置10、メモリ12及び入出力装置15と通信を行う。CPU11は、設定処理部16及び演算実行部17を有する。
【0018】
演算実行部17は、ノード2~4のCPU11と協調して並列計算を実行する。例えば、演算実行部17は、演算処理において1つ又は複数のプロセスをメモリ12上に展開して動作させる。ここで、プロセスとは、演算処理を行わせるプログラムに演算に使用する資源が割り当てられた状態であり、プログラムが実行された状態を表す概念と考えることができる。例えば、並列計算には複数の演算処理を実行させる複数のプログラムが含まれる。そして、各演算処理に対してプロセスが生成される。さらに、1つのプログラムの中には1つ又は複数の命令が含まれる。そして、プロセスの中における命令の実行を表す概念をスレッドと言う場合がある。すなわち、プロセスの中には、1つ又は複数のスレッドが含まれる。また、プログラムにより行われる演算処理をジョブと言う場合もある。
【0019】
演算実行部17は、例えば並列計算の実行中に、動作させるプロセスについてバリア同期の実行を決定する。具体的には、演算実行部17は、各プロセスがそれぞれのバリアポイントに到達すると、バリア同期の処理を開始する。その後、演算実行部17は、システム制御部13を介してバリア同期成立通知をバリア同期装置10から受信する。そして、演算実行部17は、各プロセスからのバリア同期成立通知が揃うと、バリア同期処理の結果を用いて演算処理を実行する。ここで、同じプロセスが複数回のバリア同期処理を繰り返し行う場合もある。
【0020】
設定処理部16は、入出力装置15を用いて操作者により入力されたバリア同期に用いる設定条件の入力をシステム制御部13から受ける。ここで、設定条件には、バリア同期に用いる同期信号のバリア同期処理の各処理段階における接続元及び宛先の情報が含まれる。この情報については後で詳細に説明する。さらに、設定条件には、バリア同期処理のアルゴリズム及び実行条件が含まれる。
【0021】
設定処理部16は、システム制御部13を介してバリア同期に用いる設定条件をバリア同期装置10に送信する。さらに、設定処理部16は、演算実行部11からの指示を受けて、システム制御部13を介してバリアポイント到達通知をバリア同期装置10に送信する。
【0022】
システム制御部13は、ノード1において実行される各種処理の統括制御を行う。例えば、システム制御部13は、CPU11とバリア同期装置10、メモリ12及び入出力装置15との間のデータの送受信を中継する。
【0023】
メモリ12は、演算実行部17が実行する並列計算のプログラムなどを含む各種プログラムを格納する。また、メモリ12の上には、演算実行部17により並列計算におけるプロセスが展開され実行される。さらに、メモリ12は、並列演算で使用するデータ及び演算結果などの各種データを格納する。
【0024】
入出力装置15は、例えば、キーボード、マウス及びディスプレイなどを有する。入出力装置15は、操作者がキーボードなどを用いて入力されたデータをシステム制御部13を介してCPU11へ送信する。また、入出力装置15は、CPU11からシステム制御部13を介して送信されたデータをディスプレイなどに表示させる。
【0025】
バリア同期装置10は、システム制御部13及びネットワークインタフェース14に接続される。バリア同期装置10は、ネットワークインタフェース14を介してネットワーク5に接続する。そして、バリア同期装置10は、ネットワーク5を介して他のノード2~4のバリア同期装置10と通信を行う。
【0026】
バリア同期装置10は、CPU11の設定処理部16から送信されたバリア同期に用いる設定条件をシステム制御部13を介して受信する。さらに、バリア同期装置10は、各プロセスのバリアポイント到達通知をシステム制御部13を介して受信する。そして、バリア同期装置10は、設定条件にしたがってバリア同期処理を実行する。
【0027】
バリア同期処理には、ノード1内で動作する複数のプロセス間のバリア同期処理及びネットワーク5を介して他のバリア同期装置10と通信を行うことでノード2~4で動作するプロセスとの間でのバリア同期処理の双方もしくはいずれかが1つ又は複数含まれる。自装置内でのバリア同期処理も、ネットワークを介した通信を自装置間の通信と置き換えれば、ネットワーク他のノード2~4との間のバリア同期処理と同様に考えることができる。以下では、主に他のノード2~4との間のバリア同期処理について説明するが、自装置内でのバリア同期処理も同様である。
【0028】
ここで、本実施例に係るバリア同期装置10は、
図3に示すバタフライ演算のアルゴリズムにしたがってバリア同期処理を実行する。
図3は、4つのプロセスがバタフライ演算により同期処理を実行する場合の処理の流れを示す図である。ただし、ここで、説明するバタフライ演算は、バリア同期処理のアルゴリズムの一例であり、バリア同期装置10は、他のアルゴリズムを用いてバリア同期処理を行ってもよい。
【0029】
例えば、プロセスP0は、バリアポイントに達すると、同期処理を開始するステージT1における処理を実行する。次に、プロセスP0は、プロセスP0とP1との同期をとるステージT2における処理を実行する。例えば同期処理がリダクション演算であれば、プロセスP0及びプロセスP1は、演算に用いるデータを待ち合わせ、指定された演算を行い、その演算結果を保持する。次に、プロセスP0は、プロセスP0及びP1の同期完了通知とプロセスP2及びP3の同期完了通知とを待ち合わせるステージT3における処理を実行する。例えば同期処理がリダクション演算であれば、プロセスP0及びプロセスP2は、演算に用いるデータを待ち合わせ、指定された演算を行い、その演算結果を保持する。これにより、プロセスP0~P3間のバリア同期処理が完了する。ただし、データの受け渡しを行わない同期処理もあり、その場合は、プロセスP0~P4の間で、通知が行われる。
【0030】
ここで、本実施例では、プロセスによるバリア同期処理として説明したが、並列計算における演算処理を実行する対象であれば他のものであっても同様である。例えば、ここで説明するバリア同期処理は、ジョブやスレッドによるバリア同期処理として考えることも可能である。
【0031】
以下に、バリア同期装置10によるバリア同期処理の詳細について説明する。
図4は、実施例に係るバリア同期装置のブロック図である。バリア同期装置10は、同期部100、受信部101及び送信部102を有する。バリア同期装置10は、例えば、LSI(Large Scale Integrated Circuit)により実現される。
【0032】
受信部101は、ネットワーク5に接続される。受信部101は、例えば、他のノード2~4のバリア同期装置10の送信部102から送信された同期信号や解放通知をネットワーク5を介して受信する。受信部101は、受信した同期信号や解放通知を同期部100へ出力する。
【0033】
送信部102は、ネットワーク5に接続される。送信部102は、例えば、同期信号や解放通知の入力を同期部100から受ける。そして、送信部102は、取得した同期信号や解放通知をネットワーク5を介して他のノード2~4のバリア同期装置10の受信部101に向けて送信する。
【0034】
図5は、同期部の詳細を表すブロック図である。同期部100は、制御部110及び制御レジスタ120を有する。制御部110の機能は、例えば、プロセッサや組み込み回路などで実現される。また、制御レジスタ120の機能は、例えば、フリップフロップやメモリで実現される。
【0035】
制御レジスタ120は、複数存在する。制御レジスタ120は、同期信号の接続元及び宛先として使用するために十分な数が存在する。ここで、ある制御レジスタ120の接続元とは、バリア同期処理において、その制御レジスタ120へ同期信号を送信してくる制御レジスタ120である。すなわち、制御レジスタ120が処理を行うステージの1つ前のステージで処理を行う制御レジスタ120である。また、ある制御レジスタ120の宛先とは、その制御レジスタ120から同期信号が送信される制御レジスタ120である。すなわち、制御レジスタ120が処理を行うステージの次のステージで処理を行う制御レジスタ120である。
【0036】
制御レジスタ120は、シグナルレジスタ121及び宛先情報レジスタ122を有する。シグナルレジスタ121は、制御レジスタ120に対応するバリア同期の待ち合わせ状態を格納する。具体的には、シグナルレジスタ121は、接続元の制御レジスタ120の数と一致する数のシグナル#0~#nの値を保持する。すなわち、制御レジスタ120の接続元として、n+1個の制御レジスタ120が存在する。ここでは、シグナル#iの値が0であれば、シグナル#iに対応する制御レジスタ120からの同期信号をノード1が受信していないことを表す。逆に、シグナル#iの値が1であれば、シグナル#iに対応する制御レジスタ120からの同期信号をノード1が受信したことを表す。
【0037】
宛先情報レジスタ122は、宛先情報123、宛先ステータス124、接続元情報125を有する。宛先情報レジスタ122は、設定条件として通知された情報及び自己が格納された制御レジスタ120が処理を行うステージの次のステージのビジー状態を表す情報を格納する。次のステージのビジー状態は、宛先となる制御レジスタ120が処理を実行中であり使用中であるか否かを表す情報にあたる。
【0038】
宛先情報123は、予め決められたバリア同期処理のアルゴリズムに対応した制御レジスタ120が同期信号を送信する宛先のノード2~4の宛先アドレス及び宛先となる制御レジスタ120の番号を含む宛先情報#D0~#Dmを格納する。宛先情報#D0~#Dmは、同期信号の宛先となる制御レジスタ120の数と同じ数が存在する。すなわち、ここでは、制御レジスタ120の同期信号の宛先として、m+1個の制御レジスタ120が存在する。
【0039】
また、接続元情報125は、予め決められたバリア同期処理のアルゴリズムに対応した制御レジスタ120が同期信号を受信する接続元のノード2~4の接続元アドレス及び接続元となる制御レジスタ120の番号を含む接続元情報#S0~#Snを格納する。接続元情報#S0~#Smは、接続元となる制御レジスタ120の数と同じ数が存在する。例えば、接続元となる制御レジスタ120が2個であり、宛先となる制御レジスタ120が2個であれば、m及びnのいずれも1となる。
【0040】
宛先ステータス124は、自己が格納された制御レジスタ120が処理を行うステージの次のステージのビジー状態を格納する。次のステージのビジー状態から、宛先となる制御レジスタ120が処理を実行中であるため使用中であるか否かが判断できる。宛先ステータス124は、同期信号の宛先となる制御レジスタ120の数に一致する数の宛先ステータス##0~##mを有する。宛先ステータス##jの値が1であれば、その宛先ステータス##jに対応する制御レジスタ120が使用中の状態、言い換えれば次のステージがビジー状態である。逆に、宛先ステータス##jの値が0であれば、その宛先ステータス##jに対応する制御レジスタ120が解放された未使用の状態、言い換えれば次のステージがビジーでない解放状態といえる。
【0041】
制御レジスタ120の宛先情報レジスタ122における宛先情報123及び接続元情報125は、CPU11の設定処理部16から受信した設定条件にしたがって情報設定部112により情報が書き込まれる。各制御レジスタ120において同期信号の接続元と宛先とが設定されることで、バタフライ演算のアルゴリズムにしたがった接続構造で制御レジスタ120同士が接続される。ただし、バタフライ演算は同期処理を行うアルゴリズムの一例であり、他のアルゴリズムを用いてもよい。
【0042】
制御部110は、
図5に示すように、シグナルレジスタ管理部111、情報設定部112、同期制御部113、状態管理部114及び送信制御部115を有する。
【0043】
情報設定部112は、CPU11の設定処理部16からバリア同期に関する設定条件を受信する。そして、情報設定部112は、取得した設定条件にしたがって、制御レジスタ120の宛先情報レジスタ122に制御レジスタ120の番号を登録する。また、情報設定部112は、取得した設定条件にしたがって、制御レジスタ120の宛先情報レジスタ122に制御レジスタ120の番号を書き込む。ここで、宛先アドレスは、システムにより決定されるノード番号と制御レジスタ番号120から決定される。
【0044】
同期制御部113は、CPU11の設定処理部16から送信された設定条件からバリア同期処理のアルゴリズム及び実行条件を取得する。そして、同期制御部113は、バリア同期処理で指示された制御レジスタ120が処理を行うステージが開始ステージ、中継ステージ又は最終ステージのいずれであるかを、バリア同期処理のアルゴリズムを用いて判定する。以下では、バリア同期処理で指示された制御レジスタ120を「制御対象の制御レジスタ120」という。また、制御対象の制御レジスタ120が処理を行うステージを「自ステージ」という。
【0045】
自ステージが中継ステージ又は最終ステージの場合、同期制御部113は、バリア同期処理のアルゴリズムを取得した際に、制御対象の制御レジスタ120の初期化の指示をシグナルレジスタ管理部111へ出力する。自ステージが開始ステージであれば、同期制御部113は、シグナルレジスタ121の初期化を行わなくてよい。
【0046】
次に、同期制御部113は、バリアポイント到達を通知するバリア同期開始信号をCPU11の演算実行部17から受信する。そして、同期制御部113は、実行条件にしたがって、バリア同期開始信号を受信するとバリア同期処理を開始する。
【0047】
同期制御部113は、同期信号及び接続元情報の入力を受信部101から受ける。ただし、この同期信号及び接続元情報の入力は、開始ステージでは行われない。そして、同期制御部113は、接続元情報をシグナルレジスタ管理部111に通知する。
【0048】
自ステージが開始ステージの場合、同期制御部113は、バリア同期処理で指示された制御レジスタ120の宛先情報123を読み出す。次に、同期制御部113は、宛先情報#D0~#Dmのそれぞれの宛先ステータス124を取得する。そして、同期制御部113は、全ての宛先ステータス##~##mの内のいずれかが解放されビジー状態が解除されるまで待機する。
【0049】
宛先ステータス##0~##mの中に解放を示す値が存在する場合、同期制御部113は、解放されビジー状態でなくなった次のステージの制御レジスタ120を送信対象とする。自ステージが開始ステージであれば接続元のステージが存在しないので、同期制御部113は、接続元のステージへの解放通知の送信は行わなくてよい。
【0050】
その後、同期制御部113は、自ステージが開始ステージであるため接続元ステージからの同期信号の待ち合わせを行わずに、送信対象の制御レジスタ120への同期信号の送信要求を送信制御部115へ出力する。加えて、同期制御部113は、同期信号を送信した宛先情報を状態管理部114へ出力して、ステータスの変更を行わせる。これに対して、この場合は自ステージが開始ステージであるので、宛先の制御レジスタ120へ全ての同期信号の送信が完了しても、同期制御部113は、接続元ステージへの解放通知送信を行わない。
【0051】
その後、同期信号を未送信の宛先が存在する場合、同期制御部113は、宛先ステータス124を用いて送信対象の更新を行う。そして、同期制御部113は、新たに送信対象とした制御レジスタ120への同期信号の送信要求を送信制御部115に出力する。これに対して、全ての宛先の制御レジスタ120への同期信号の送信が完了した場合、同期制御部113は、開始ステージにおける同期処理を完了する。
【0052】
また、自ステージが中継ステージの場合、同期制御部113は、バリア同期処理で指示された制御レジスタ120の宛先情報123を読み出す。次に、同期制御部113は、宛先情報#D0~#Dmのそれぞれの宛先ステータス124を取得する。そして、同期制御部113は、全ての宛先ステータス##0~##mの内のいずれかが解放されて宛先の制御レジスタ120が未使用の状態になるまで待機する。
【0053】
宛先ステータス##0~##mのなかに解放されたものが存在する場合、同期制御部113は、未使用となった次のステージの制御レジスタ120を「送信対象」とする。
【0054】
次に、同期制御部113は、シグナルレジスタ121を確認して、全ての接続元からの同期信号の受信が完了したか否かを判定する。シグナル#0~#nのいずれかが0であり同期信号の受信が完了していない接続元がある場合、同期制御部113は、宛先ステータス124の確認を繰り替えして送信対象を更新する。
【0055】
シグナル#0~#nの全てが1であり全ての接続元からの同期信号の受信が完了した場合、同期制御部113は、送信対象の制御レジスタ120への同期信号の送信要求を送信制御部115に出力する。加えて、同期制御部113は、同期信号を送信した宛先情報を状態管理部114へ出力して、ステータスの変更を行わせる。
【0056】
その後、同期信号を未送信の宛先が存在する場合、同期制御部113は、宛先ステータス124を用いて送信対象の更新を行う。そして、同期制御部113は、新たに送信対象とした制御レジスタ120への同期信号の送信要求の送信制御部115への出力及び状態管理部114へのステータス変更の指示を実行する。
【0057】
これに対して、全ての宛先の制御レジスタ120への同期信号の送信が完了した場合、同期制御部113は、解放通知の送信指示を送信制御部115へ出力し、制御対象の制御レジスタ120における同期処理を完了する。
【0058】
また、自ステージが最終ステージの場合、同期制御部113は、シグナルレジスタ121を確認して、全ての接続元からの同期信号の受信が完了したか否かを判定する。自ステージが最終ステージであれば、同期信号を送信することはない。シグナル#0~#nのいずれかが0であり同期信号の受信が完了していない接続元がある場合、同期制御部113は、宛先ステータス124の確認を繰り替えして送信対象を更新する。
【0059】
シグナル#0~#nの全てが1であり全ての接続元からの同期信号の受信が完了した場合、同期制御部113は、バリア同期完了通知をCPU11の演算実行部17へ送信する。これにより、1つのプロセスの同期処理が完了する。その後、同期制御部113は、解放通知の送信指示を送信制御部115へ出力する。
【0060】
以降は、開始ステージ、中継ステージ、最終ステージに関わらない各部の動作の説明であり、ここまでの説明における時系列から外れた動作である。同期制御部113は、解放通知及び解放通知の送信元の制御レジスタ120の情報の入力を受信部101から受ける。そして、同期制御部113は、解放通知の送信元の制御レジスタ120に対応するステータスの解放を状態管理部114に指示する。
【0061】
シグナルレジスタ管理部111は、制御レジスタシグナルレジスタ121の初期化の指示を同期制御部113から受信する。そして、シグナルレジスタ管理部111は、制御対象の制御レジスタ120に含まれるシグナルレジスタ121の各シグナル#0~#nの値を0に設定して初期化する。
【0062】
制御対象の制御レジスタ120のリセット指示の入力を同期制御部113から受ける。そして、シグナルレジスタ管理部111は、制御対象の制御レジスタ120のシグナルレジスタ121をリセットする。
【0063】
その後、シグナルレジスタ管理部111は、同期信号を送信してきた接続元情報の入力を同期制御部113から受ける。そして、シグナルレジスタ管理部111は、取得した接続元情報に対応するシグナル#0~#nのいずれかの値を1に変更し、その接続元のステージからの同期信号の受信が完了したことを表す状態にする。
【0064】
状態管理部114は、同期信号を送信した宛先の制御レジスタ120の情報の入力を同期制御部113から受ける。そして、状態管理部114は、同期信号の送信先の制御レジスタ120に対応する宛先ステータス##0~##mのいずれかの値を1に変更し、その制御レジスタ120が処理を行うステージがビジーであることを表す状態にする。
【0065】
また、状態管理部114は、解放通知の送信元の制御レジスタ120のステータスの解放指示の入力を同期制御部113から受ける。次に、状態管理部114は、解放通知の送信元の制御レジスタ120に対応する宛先ステータス##0~##mのいずれかの値を0に変更し、その制御レジスタ120が処理を行うステージが解放されたことを表す状態にする。
【0066】
送信制御部115は、送信対象とした制御レジスタ120への同期信号の送信要求を同期制御部113から受ける。そして、送信制御部115は、指定された制御レジスタ120への同期信号の送信を送信部102に行わせる。
【0067】
また、送信制御部115は、全ての宛先の制御レジスタ120への同期信号の送信が完了した場合、解放通知の送信指示を同期制御部113から受ける。そして、送信制御部115は、制御対象の制御レジスタ120の接続元の制御レジスタ120の情報を接続元情報125から取得する。その後、送信制御部115は、接続元の制御レジスタ120への解放通知の送信を送信部102に行わせる。
【0068】
図6は、プロセスにより使用される制御レジスタのステージ毎の遷移を表す図である。ここでは、プロセスP0~P3が動作する場合で説明する。各プロセスP0~P3は、同じノード1で動作してもよいし、動作するノード1が異なってもよい。
【0069】
プロセスP0は、ステージT1で制御レジスタR0を使用し、ステージT2で制御レジスタR10を使用し、ステージT3で制御レジスタR0を使用する。プロセスP1は、ステージT1で制御レジスタR1を使用し、ステージT2で制御レジスタR11を使用し、ステージT3で制御レジスタR1を使用する。プロセスP2は、ステージT1で制御レジスタR2を使用し、ステージT2で制御レジスタR12を使用し、ステージT3で制御レジスタR2を使用する。プロセスP0は、ステージT1で制御レジスタR3を使用し、ステージT2で制御レジスタR13を使用し、ステージT3で制御レジスタR3を使用する。
【0070】
ここで、各ステージT1~T3で使用する制御レジスタ120を異ならせることの1つのメリットとして、プロセスP0~P3のバリア同期処理がどこまで進んでいるかを確認することが容易となり、バリア同期処理の制御を容易にすることがある。
【0071】
ただし、プロセスP0~P3は、開始ステージであるステージT1では宛先情報122レジスタを使用し、シグナルレジスタ121は使用しなくてもよい。また、最終ステージであるステージT3では、プロセスP0~P3は、シグナルレジスタ121を使用し、宛先情報レジスタ122を使用しなくてもよい。そこで、プロセスP0~P3は、開始ステージであるステージT1と最終ステージであるステージT3とで同じ制御レジスタ120を使用することが可能である。このように、ステージT1とステージT3とで使用する制御レジスタ120を同じにしても、両者を区別することが可能である。なぜなら、バリア同期装置10は、他の制御レジスタ120からの同期信号の入力が無い状態で開始される場合にステージT1と判定でき、他の制御レジスタ120へ同期信号の出力を行わない場合はステージT3と判定できる。これにより、バリア同期処理において使用される資源を減らすことができる。ただし、ステージT1とステージT3とで使用する制御レジスタ120を異ならせてもよい。
【0072】
次に、
図7を参照して、本実施例に係るバリア同期装置によるバリア同期処理の高速化の効果について説明する。
図7は、バリア同期処理の高速化について説明するための図である。
【0073】
同期処理は制御レジスタ120の単位で行われるため、1つのバリア同期装置10に対して複数のバリア同期処理の実行が命令されてもよい。さらに、同じプロセスに対して、複数のバリア同期処理が繰り返し要求される場合もある。ここでは、例えば、バリア同期処理B0~B3が繰り返し1つのプロセスに対して要求された場合で説明する。さらに、ここでは、各バリア同期処理B0~B3が、ステージT1~T3に段階的に分割される場合で説明する。
【0074】
従来のバリア同期処理では途中で関数から出ることができず、1つのバリア同期処理B0のステージT3の完了後に、次のバリア同期処理B1のステージT1が開始された。そのため、従来のバリア同期処理では、各バリア同期処理B0~B3のステージT1~T3でかかる時間を合計した時間がかかっていた。
【0075】
これに対して、本実施例に係るバリア同期装置10では、バリア同期処理B0のステージT1を実行する制御レジスタ120が同期信号を次のステージT2の制御レジスタ120に送信して解放されると、次のバリア同期処理B1のステージT1を開始できる。そのため、本実施例に係るバリア同期装置10は、各ステージT1~T3で実行される処理を重複させてパイプライン制御で実行することができる。
【0076】
ここで、例えば各ステージT1~T3にかかる時間が同じと考える。その場合、本実施例に係るバリア同期装置10は、バリア同期処理B0~B3のステージT1にかかる時間の合計にバリア同期処理B3のステージT2及びT3にかかる時間を加算した時間で、バリア同期処理B0~B3を完了することができる。
【0077】
これを一般化すると、ステージ数がM(M≧1)であり、バリア同期処理が繰り返される回数をN(N≧1)とすると、従来のバリア同期処理では、処理時間はN×Mであった。これに対して、本実施例に係るバリア同期装置10では、処理時価はN+M-1となる。すなわち、従来のバリア同期処理と比べて、本実施例に係るバリア同期装置10は、バリア同期処理の(N-1)×(M-1)の時間分の高速化を実現することができる。ただし、実際には、ステージの解放通知の送受信のレイテンシが存在するため、処理時間の短縮は少し短くなる。
【0078】
次に、
図8を参照して、本実施例に係るバリア同期装置10によるバリア同期処理の全体的な流れについて説明する。
図8は、実施例に係るバリア同期装置によるバリア同期処理全体のフローチャートである。
【0079】
情報設定部112は、設定条件の入力をCPU11から受ける。そして、情報設定部112は、取得した設定条件にしたがって、制御レジスタ120の宛先情報レジスタ122に制御情報を設定する(ステップS1)。具体的には、情報設定部112は、制御レジスタ120の宛先情報レジスタ122に宛先情報123として宛先アドレス及び宛先となる制御レジスタ120の番号を書き込む。また、情報設定部112は、取得した設定条件にしたがって、制御レジスタ120の宛先情報レジスタ122に接続元情報125として接続元アドレス及び接続元となる制御レジスタ120の番号を書き込む。また、同期制御部113は、設定条件からバリア同期処理のアルゴリズム及び実行条件を取得する。そして、同期制御部113は、バリア同期処理のアルゴリズムから自ステージが中継ステージ又は最終ステージのいずれかを判定する。自ステージが中継ステージ又は最終ステージであれば、同期制御部113は、シグナルレジスタ121の初期化指示をシグナルレジスタ管理部111へ出力する。シグナルレジスタ管理部111は、同期制御部113からの指示を受信して、シグナルレジスタ121の各シグナル#0~#nの値を0に設定して初期化する。
【0080】
その後、同期制御部113はバリアポイント到達を通知するバリア同期開始指示をCPU11から受信する(ステップS2)。そして、同期制御部113は、実行条件にしたがって、バリア同期開始信号を受信するとバリア同期処理を開始する。
【0081】
次に、同期制御部113は、バリア同期処理で指示された制御対象の制御レジスタ120により実行される同期処理のステージが開始ステージか否かを判定する(ステップS3)。
【0082】
制御対象の制御レジスタ120により実行される同期処理のステージが開始ステージの場合(ステップS3:肯定)、同期制御部113は、バリア同期処理に用いる開始通知をCPU11から取得する(ステップS4)。
【0083】
その後、制御部110は、送信処理を実行する(ステップS5)。そして、送信処理完了後、制御部110は、制御対象の制御レジスタ120の同期処理を終了する。
【0084】
これに対して、制御対象の制御レジスタ120により実行される同期処理のステージが開始ステージでない場合(ステップS3:否定)、同期制御部113は、同期処理のステージが中継ステージか否かを判定する(ステップS6)。
【0085】
制御対象の制御レジスタ120により実行される同期処理のステージが中継ステージの場合(ステップS6:肯定)、制御部110は、受信処理を実行する(ステップS7)。
【0086】
その後、制御部110は、送信処理を実行する(ステップS8)。
【0087】
これに対して、制御対象の制御レジスタ120により実行される同期処理のステージが中継ステージでなく、最終ステージの場合(ステップS6:否定)、制御部110は、受信処理を実行する(ステップS9)。
【0088】
同期制御部113は、バリア同期完了をCPU11へ通知する(ステップS10)。
【0089】
その後、制御部110は、接続元の制御レジスタ120へ解放通知を送信する(ステップS11)。
【0090】
次に、
図9を参照して、本実施例に係るバリア同期装置10が他のバリア同期装置10から同期信号を受信する場合の受信側処理の流れについて説明する。
図9は、実施例に係るバリア同期装置による受信側処理のフローチャートである。
図9のフローチャートで実行される処理は、
図8におけるステップS7及びS9で実行される処理の一例にあたる。
【0091】
ここでは、バリア同期装置10が1つの制御対象の制御レジスタ120に対して実行する送信側処理の流れについて説明する。ただし、バリア同期装置10は、複数の制御対象の制御レジスタ120に対して平行して送信側処理を実行することができ、その場合、
図9のフローチャートの処理を制御対象の制御レジスタ120の数に応じて並行して実行する。
【0092】
同期制御部113は、接続元の制御レジスタ120から送信された同期信号及び宛先情報を受信部101から受信する(ステップS101)。ここでは、宛先情報が、ここで制御対象とする制御レジスタ120を示す場合で説明する。
【0093】
次に、同期制御部113は、宛先情報で指定された制御レジスタ120のシグナルレジスタ121における接続元の制御レジスタ120に対応したシグナル#0~#nのいずれかの値を1に設定する(ステップS102)。
【0094】
次に、同期制御部113は、宛先情報で指定された制御レジスタ120のシグナルレジスタ121を読み出す(ステップS103)。
【0095】
そして、同期制御部113は、全てのシグナル#0~#nの値が1か否かを判定する(ステップS104)。シグナル#0~#nの値の中に0が存在する場合(ステップS104:否定)、同期制御部113は、制御対象の制御レジスタ120から送信される同期信号を待ち合わせる(ステップS105)。その後、同期制御部113は、ステップS101へ戻る。
【0096】
これに対して、全てのシグナル#0~#nの値が1の場合(ステップS104:肯定)、同期制御部113は、シグナルレジスタ121のリセットをシグナルレジスタ管理部111に指示する。シグナルレジスタ管理部111は、リセットの指示を受けて、シグナルレジスタ121をリセットする(ステップS106)。その後、制御部110は、受信側処理を終了する。
【0097】
ここで、
図9では、ステップS106においてシグナルレジスタ121のリセットを行うように説明したが、シグナルレジスタ121のリセットは宛先の制御レジスタ120へ信号を送信する前に行えばよい。例えば、シグナルレジスタ121のリセットは宛先の制御レジスタ120へ信号を送信する際に行うことができる。
図9の処理の例では、受信処理が完了したあとに送信処理を行うことになる。
【0098】
次に、
図10を参照して、本実施例に係るバリア同期装置10が他のバリア同期装置10へ同期信号を送信する場合の送信側処理の流れについて説明する。
図10は、実施例に係るバリア同期装置による送信側処理のフローチャートである。
図10のフローチャートで実行される処理は、
図8におけるステップS5及びS8で実行される処理の一例にあたる。
【0099】
ここでも、バリア同期装置10が1つの制御対象の制御レジスタ120に対して実行する送信側処理の流れについて説明する。ただし、バリア同期装置10は、複数の制御対象の制御レジスタ120に対して平行して送信側処理を実行することができ、その場合、
図10のフローチャートの処理を制御対象の制御レジスタ120の数に応じて並行して実行する。
【0100】
同期制御部113は、制御対象の制御レジスタ120の宛先情報レジスタ122に格納された宛先情報123を読み込む(ステップS201)。
【0101】
次に、同期制御部113は、宛先ステータス124を確認して同期信号を未送信の宛先の制御レジスタ120のうち、解放された制御レジスタ120があるか否かを判定する(ステップS202)。
【0102】
同期信号を未送信で且つ解放された制御レジスタ120が無い場合(ステップS202:否定)、同期制御部113は、同期信号を未送信の宛先の制御レジスタ120の何れかが解放されるまで待機する(ステップS203)。そして、同期制御部113は、ステップS202へ戻る。
【0103】
これに対して、同期信号を未送信で且つ解放された制御レジスタ120がある場合(ステップS202:肯定)、同期制御部113は、該当する制御レジスタ120を送信対象の制御レジスタ120として選択する(ステップS204)。
【0104】
次に、同期制御部113は、送信対象の制御レジスタ120への同期信号の送信を送信制御部115に指示する(ステップS205)。この指示を受けて、送信制御部115は、送信対象の制御レジスタ120へ向けて同期信号を送信部102に送信させる。
【0105】
その後、同期制御部113は、送信対象の制御レジスタ120への同期信号の送信を状態管理部114に通知する。状態管理部114は、同期制御部113から指示された送信対象の制御レジスタ120に対応する宛先ステータス124における宛先ステータス##0~##mのいずれかの値を1に設定してビジー状態に変更する(ステップS206)。
【0106】
その後、同期制御部113は、全ての宛先の制御レジスタ120へ同期信号を送信したか否かを判定する(ステップS207)。同期信号を未送信の宛先の制御レジスタ120が存在する場合(ステップS207:否定)、同期制御部113は、ステップS202へ戻る。
【0107】
これに対して、全ての宛先の制御レジスタ120の同期信号の送信が完了した場合(ステップS207:肯定)、同期制御部113は、送信側処理を終了する。
【0108】
ここで、
図8に戻って受信側処理と送信側処理の関係を説明する。
図8では、説明の都合上、ステップS7の受信処理をステップS8の送信処理の前に実行するように図示したが、受信処理は送信処理と並行して実行されてもよい。ただし、その場合も、バリア同期装置10は、受信処理が完了した後に、同期信号を宛先の制御レジスタ120に送信する。
【0109】
ここで、本実施例では、バリア同期装置10が、バタフライ演算のアルゴリズムを用いてバリア同期処理を実行する場合を例に説明したが、バリア同期処理のアルゴリズムはこれに限らない。例えば、バリア同期装置10は、ディスエミネーション(Dissemination)アルゴリズムやペアワイズエクスチェンジウィズリカーシダブリング(Pairwise exchange with recursive doubling)アルゴリズムなど他のアルゴリズムを用いることも可能である。また、本実施例に係るバリア同期装置10が行うバリア同期処理は、All-Reduce処理以外にも、リダクション演算など同期を取りながら実行する集団通信においても適用可能である。
【0110】
以上に説明したように、本実施例に係るバリア同期装置は、複数ステージに分割可能なバリア同期処理の実行において、制御レジスタが同期信号を次ステージに送信しバリア同期処理が終了すると、その制御レジスタに次のバリア同期処理を実行させることができる。すなわち、本実施例に係るバリア同期装置は、バリア同期処理をパイプライン制御することができ、各ステージを重畳させて並行して実行するができる。これにより、連続した複数のバリア同期処理を高速化することができる。
【符号の説明】
【0111】
1~4 ノード
5 ネットワーク
10 バリア同期装置
11 CPU
12 メモリ
13 システム制御部
14 ネットワークインタフェース
15 入出力装置
16 設定処理部
100 同期部
101 受信部
102 送信部
110 制御部
111 シグナルレジスタ管理部
112 情報設定部
113 同期制御部
114 状態管理部
115 送信制御部
120 制御レジスタ
121 シグナルレジスタ
122 宛先情報レジスタ
123 宛先情報
124 宛先ステータス
125 接続元情報