(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-02-20
(45)【発行日】2023-03-01
(54)【発明の名称】演算処理装置、プログラム、及び演算処理装置の制御方法
(51)【国際特許分類】
G06F 17/18 20060101AFI20230221BHJP
G06F 9/38 20180101ALI20230221BHJP
【FI】
G06F17/18 A
G06F9/38 370X
(21)【出願番号】P 2019095467
(22)【出願日】2019-05-21
【審査請求日】2022-02-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100107766
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】檀上 匠
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2019-067084(JP,A)
【文献】米国特許出願公開第2008/0183779(US,A1)
【文献】特開2000-020501(JP,A)
【文献】特開2006-033473(JP,A)
【文献】特開昭63-259767(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/18
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
互いに通信可能なN台のノードを備え、
各ノードは、演算を実行するプロセッサと、値及び前記値を用いた演算結果を保持するメモリを有し、
Nは2以上の自然数であり、nは1以上の自然数であり、N=2
nでない場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを2台ずつ組にして、組にした2台のノードが保持する値の平均値の算出を繰返す処理を実行することを特徴とする、演算処理装置。
【請求項2】
N=2
p+1+1であり、pは2
p-1<N<2
pを満たす自然数である場合、数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、
演算結果の数が奇数の場合、
前回の最後の演算結果の順番を最初として2で除算し、
前回の最初の演算結果と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行い、
演算結果の数が偶数の場合、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行うことを特徴とする、請求項1記載の演算処理装置。
【請求項3】
N=2
p-1であり、pは2
p-1<N<2
pを満たす自然数である場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行うことを特徴とする、請求項1記載の演算処理装置。
【請求項4】
各ノードは、Allreduce処理を実行し、次式(2)
【数8】
に従った平均化処理を実行することを特徴とする、請求項1乃至3のいずれか1項記載の演算処理装置。
【請求項5】
互いに通信可能なN台のノードを備えたコンピュータを制御するためのプログラムであって、
Nは2以上の自然数であり、nは1以上の自然数であり、N=2
nでない場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを2台ずつ組にして、組にした2台のノードが保持する値の平均値の算出を繰返す処理を実行する、
処理を前記コンピュータに実行させることを特徴とする、プログラム。
【請求項6】
互いに通信可能なN台のノードの夫々が演算を実行し、値及び前記値を用いた演算結果を保持する、演算処理装置の制御方法であって、
Nは2以上の自然数であり、nは1以上の自然数であり、N=2
nでない場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを2台ずつ組にして、組にした2台のノードが保持する値の平均値の算出を繰返す処理を実行させることを特徴とする、演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算処理装置、プログラム、及び演算処理装置の制御方法に関する。
【背景技術】
【0002】
近年、様々な分野で高性能計算(HPC:High Performance Computing)、データサイエンス(Data Science)、機械学習(ML:Machine Learning)、深層学習(DL:Deep Learning)等の手法が用いられている。これらの手法は、莫大な量の計算を行うため、単一のプロセッサでデータを処理することは難しい。そこで、これらの手法を用いる場合、データを多数のプロセッサに分割して割り当て、並列に計算させることで高速化を図る並列計算機を導入する。並列計算機は、プロセッサとメモリと通信装置で形成されたノードを複数台有し、プロセッサ間でデータ通信を行わせるために、複数台のノード同士をネットワークを介して接続する。
【0003】
例えば、DLを行う場合、並列計算機に複数のニューロン層を用意する。各ニューロン層に亘って、入力データから出力データを得るフォワード(Forward)、出力データと正解とを比較し差分を取得するバックワード(Backward)、及び差分を用いて各ニューロン層で用いられるパラメータを更新するアップデート(Update)の処理を繰り返す。これにより、各ニューロン層で用いるパラメータの適切な値を取得する、パラメータの最適化を行う。バックワード処理で求める差分は、例えば画像認識等において微分係数等で表される場合、勾配情報と呼ばれることもある。このようにして、モデル関数とデータの隔たりを小さくするように、パラメータ(又は、モデルパラメータ)を最適化する。
【0004】
パラメータの最適化では、ニューロン層毎にバックワード処理により各ノードで取得した差分を集約し、所定の演算により更新用データを求めて各ノードに配布する、オールレデュース(Allreduce)処理を行う。Allreduce処理は、例えば全てのノードが有する勾配情報を加算し、各ノードに加算値を分配する。その後、各ノードにおいて、加算値を並列計算機が有するノードの台数で除算して平均を取ることで、更新用データを求めることができる。
【0005】
DLの計算は、例えば32ビットや64ビットの浮動小数点演算を行うHPCの計算とは異なり、精度が多少低くても得られる最終結果が、例えばHPCの計算結果と比べても概ね遜色がないことが知られている。そこで、パラメータを低ビット整数で表すことで、ノード間のデータ通信量を削減することができる。また、データ通信量を削減することで、演算を高速化することができる。例えば16ビットの半精度浮動小数点演算をサポートし、32ビット浮動小数点演算に比べて2倍以上のスループットが得られるグラフィックス・プロセッシング・ユニット(GPU:Graphics Processing Unit)が提案されている。更に、固定小数点数である低ビット整数を用いて、更にスループットを向上させる技術も提案されている。
【0006】
しかし、例えば4台のノードを有する並列計算機において、勾配情報が例えば8ビットの値であっても、Allreduce処理の途中で10ビット分のレジスタが必要になる場合がある。例えば、4台のノードの夫々における8ビットの値が符号無しの2進数「11111111」であると、これらの値を加算した加算値は、10ビットの値「1111111100」になる。この場合、結局は16ビット表現での演算を行うことになるため、スループットが1/2に減少してしまう。更に、並列計算機が有するノードの台数が増加して例えば512台になると、加算値が17ビットになる場合もあり、この場合には32ビット表現での演算を行うことになるため、スループットは1/4に減少してしまう。
【0007】
そこで、オーバーフローを抑えるために、各ノードが有する勾配情報を加算前に予めノードの台数で除算しても良い。しかし、この場合、オーバーフローの発生は軽減できるものの、並列計算機が有するノードの台数が多いと、商が非常に小さくなるか、或いは、0になるため、加算時に誤差が発生して演算精度が劣化してしまう。並列計算機が有する例えば512台のノードの夫々における8ビットの値が、符号無しの2進数「11111111」であると、この値をノードの台数である「512」で除算した結果は、8ビットの値「00000000」になる。従って、オーバーフローを回避して演算精度を維持することは難しい。
【0008】
このように、従来技術では、並列計算機が有するノードの台数が増大するとスループットが低下し、低ビット整数を用いてスループットを向上しようとすると、演算精度が劣化してしまうので、ノード平均を求めることによる演算精度の劣化を防ぐことは難しい。
【先行技術文献】
【特許文献】
【0009】
【文献】特開2000-339278号公報
【文献】特開2000-20501号公報
【発明の概要】
【発明が解決しようとする課題】
【0010】
上記の如く、従来技術では、ノード平均を求めることによる演算精度の劣化を防ぐことは難しい。
【0011】
そこで、1つの側面では、ノード平均を求めることによる演算精度の劣化を防ぐことができる演算処理装置、プログラム、及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【0012】
1つの案によれば、互いに通信可能なN台のノードを備え、各ノードは、演算を実行するプロセッサと、値及び前記値を用いた演算結果を保持するメモリを有し、Nは2以上の自然数であり、nは1以上の自然数であり、N=2nでない場合、数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを2台ずつ組にして、組にした2台のノードが保持する値の平均値の算出を繰返す処理を実行する演算処理装置が提供される。
【発明の効果】
【0013】
一態様によれば、ノード平均を求めることによる演算精度の劣化を防ぐことができる。
【図面の簡単な説明】
【0014】
【
図1】一実施例における並列計算機の一例を示すブロック図である。
【
図2】ノードの機能構成の一例を示すブロック図である。
【
図3】番号割当部によるMPI処理をN=4の場合について説明する図である。
【
図4】勾配情報の集約処理の一例を説明する図である。
【
図5】平均化処理のパイプライン化を説明する図である。
【
図6】2台のノードの保持データの平均値の算出方法を説明する図である。
【
図7】一実施例における並列計算機によるAllreduce処理を説明するフローチャートである。
【
図8】ノードのハードウェア構成の一例を示すブロック図である。
【
図9】ノードを数える順番を固定した場合の一例を説明する図である。
【
図10】ノードを数える順番を変動させる一例を説明する図である。
【
図11】ノードを数える順番を変動させる他の例を説明する図である。
【
図12】通常の全ノード平均化処理の一例を説明するフローチャートである。
【
図13】N=6,p=3の場合の
図12の処理を説明する図である。
【発明を実施するための形態】
【0015】
以下に、開示の演算処理装置、プログラム、及び演算処理装置の制御方法の各実施例を図面と共に説明する。
【実施例】
【0016】
図1は、一実施例における並列計算機の一例を示すブロック図である。並列計算機1は、複数台のノード10-1~10-Nを有するコンピュータの一例であり、この例では演算処理装置の一例である。ここで、Nは2以上の自然数である。ノード10-1~10-Nは、夫々ネットワーク5を介して接続されており、ネットワーク5を介して相互にデータの送受信が可能である。ネットワーク5は、通信経路の一例である。つまり、ノード10-1~10-Nは、ネットワーク5を介して通信可能である。
【0017】
ノード10-1~10-Nは、例えばDLを実行する。DLにおいて、ノード10-1~10-Nは、パラメータの最適化を実行する。ノード10-1~10-Nは、パラメータの最適化にあたり、更新データを算出する。また、ノード10-1~10-Nは、更新データを算出するための数値データである勾配情報を夫々有し、夫々が有する勾配情報を用いてAllreduce処理を実行して更新データを算出する。以下の説明では、ノード10-1~10-Nの夫々を区別しない場合、「ノード10」とも呼ぶ場合もある。
【0018】
次に、ノード10によるAllreduce処理を、
図2と共に説明する。
図2は、ノードの機能構成の一例を示すブロック図である。この例では、Allreduce処理における演算として、平均化を行う場合を例に説明する。ただし、Allreduce処理における演算は、他の演算でも良く、例えば、加算、乗算、最大値の取得及び最小値の取得等でも良い。
【0019】
図2に示すように、ノード10-1は、番号割当部101、実行処理判定部102、通常集約処理実行部103、組分集約処理実行部104、データ送信部105、データ受信部106及びデータ格納部107を有する。ノード10-2~10-Nは、ノード10-1と同じ構成を有するので、ノード10-2~10-Nの構成の図示及び説明は省略する。なお、各ノード10-1~10-Nは、上述の如くDLにおける様々な処理を実行するが、
図2では便宜上、Allreduce処理を行う機能について記載し、他の機能の図示及び説明は省略する。
【0020】
データ格納部107は、勾配情報を格納する。更に、データ格納部107は、更新データを算出する際の途中の演算結果及び更新データ等を格納する。
【0021】
番号割当部101は、例えばメッセージ・パッシング・インタフェース(MPI:Message Passing Interface)関数を用いて、
図3に示すような互いに通信可能なプロセス群のグループであるコミュニケータ2を生成する。
図3は、番号割当部によるMPI処理をN=4の場合について説明する図である。各ノード10-1~10-4は、夫々がプロセスを実行するので、コミュニケータ2は、
図3に示すようにノード10-1~10-4のグループと考えることもできる。コミュニケータ2に含まれる各ノード10-1~10-4は、夫々がコミュニケータ2の情報を保持する。また、この例では、各ノード10-1~10-4が1つのプロセスを実行する場合を例に説明する。
【0022】
番号割当部101は、MPI関数を実行してコミュニケータ2に属するプロセスの数、即ち、この例ではノード10の台数Nであるサイズ(Size)を取得する。この例では、ノード10-1~10-4がコミュニケータ2に含まれるので、番号割当部101は、サイズとして「4」を取得する。更に、番号割当部101は、MPI関数を実行して、コミュニケータ2に属する各プロセスに、識別番号であるランク(Rank)を設定する。ランクは、この例では「0」から順にコミュニケータ2に属する全プロセスの数から「1」を減算した値が割り当てられる。この例では、各ノード10-1~10-4は1つのプロセスを実行するので、ランクは、各ノード10-1~10-4に割り振られた番号とも言える。番号割当部101は、ノード10-1のランクを「0」とし、ノード10-2のランクを「1」とし、ノード10-3のランクを「2」とし、ノード10-4のランクを「3」とする。その後、番号割当部101は、サイズ及び各ノード10-1~10-4に割り当てたランクの情報を、実行処理判定部102へ出力する。
【0023】
図2の説明に戻ると、実行処理判定部102は、コミュニケータ2のサイズ及び各ノード10に割り当てられたランクの情報の入力を番号割当部101から受ける。また、実行処理判定部102は、Allreduce処理の対象の数が「2」のべき乗であるか否かを判定する。Allreduce処理の対象の数は、コミュニケータ2に属するノード10が実行するプロセスの数の合計である。この例では、各ノード10が1つのプロセスを実行し、Allreduce処理の対象の数は、コミュニケータ2に含まれるノード10の台数であり、コミュニケータ2のサイズと一致する。
【0024】
ノード10の台数が「2」のべき乗でない場合、実行処理判定部102は、通常の全ノード平均化処理を実行することを決定する。通常の全ノード平均化処理とは、例えば全てのノード10の勾配情報を1台のノード10に集めて勾配情報の総和を求め、各ノード10へ配布した後に、各ノード10が勾配情報の総和をノード10の台数で除算することで平均値を求める処理である。この場合、実行処理判定部102は、Allreduce処理の実行を通常集約処理実行部103に指示する。また、実行処理判定部102は、サイズの情報及び各ノード10のランクの情報を、通常集約処理実行部103へ送信する。
【0025】
これに対して、ノード10の台数が「2」のべき乗の場合、実行処理判定部102は、2組平均を用いた全ノード平均化処理を実行することを決定する。この例では、ノード10の台数は4台なので、ノード10の台数は「2」の2乗であり、実行処理判定部102は、2組平均を用いた全ノード平均化処理を実行することを決定する。2組平均を用いた全ノード平均化処理とは、この例では、勾配情報又は勾配情報を用いた演算結果を保持するノード10を2台ずつ組にして、組にした2台のノードが保持する値の平均値の算出を繰返す処理である。2組平均を用いた全ノード平均化処理の詳細及び各例については、後述する。この場合、実行処理判定部102は、Allreduce処理の実行を組分集約処理実行部104に指示する。また、実行処理判定部102は、サイズの情報及び各ノード10のランクの情報を通常集約処理実行部103へ送信する。
【0026】
通常集約処理実行部103は、ノード10の台数が「2」のべき乗でない場合、Allreduce処理の実行の指示を実行処理判定部102から受ける。また、通常集約処理実行部103は、コミュニケータ2に属するノード10の中で勾配情報を集約する集約ノードを、ランクを基に決定する。
【0027】
自ノード10が集約ノードでない場合、データ格納部107に格納された勾配情報の集約ノードへの送信をデータ送信部105に行わせる。その後、通常集約処理実行部103は、勾配係数の総和の入力をデータ受信部106から受ける。また、通常集約処理実行部103は、勾配係数の総和をサイズで除算して平均値を算出し、算出した平均値をデータ格納部107に格納する。
【0028】
一方、自ノード10が集約ノードの場合、通常集約処理実行部103は、他のノード10から送られてきた勾配情報の入力をデータ受信部106から受ける。また、通常集約処理実行部103は、勾配情報の総和を求め、求めた総和の各ノード10への送信をデータ送信部105に行わせる。その後、通常集約処理実行部103は、勾配係数の総和をサイズで除算して平均値を算出し、算出した平均値をデータ格納部107に格納する。
【0029】
組分集約処理実行部104は、ノード10の台数が「2」のべき乗の場合、Allreduce処理の実行の指示を実行処理判定部102から受ける。組分集約処理実行部104は、繰り返し回数を表すiを初期化してi=0とする。組分集約処理実行部104は、jを0以上の整数として、ランクが2jと2j+1となるノード10を組とする。即ち、組分集約処理実行部104は、自ノード10のランクが2jであれば、ランクが2j+1のノード10と自ノード10が組になると判定する。また、自ノード10のランクが2j+1であれば、組分集約処理実行部104は、ランクが2jのノード10と自ノード10が組になると判定する。ランクが2j+1のノード10の組分集約処理実行部104は、組となったランクが2jのノード10へデータ格納部107に格納された勾配情報を送信する。
【0030】
一方、ランクが2jのノード10の組分集約処理実行部104は、組となったランクが2j+1のノード10から勾配情報を受信する。次に、組分集約処理実行部104は、自ノード10のデータ格納部107に格納された勾配情報と受信した勾配情報との平均値を算出する。また、組分集約処理実行部104は、演算結果をデータ格納部107に格納する。
【0031】
次に、組分集約処理実行部104は、iを1つインクリメントして、サイズを「2」のn乗と表した場合にiがnに達したか否かを判定する。ここで、nは1以上の自然数である。iがnに達していなければ、組分集約処理実行部104は、勾配情報の平均値を算出したノード10、即ちランクが2jのノード10にランクの低い順に連番で0から番号を割り当てる。また、組分集約処理実行部104は、jを0以上の整数として、割り当て番号が2jと2j+1となるノード10を組とする。
【0032】
割り当て番号が2jのノード10の組分集約処理実行部104は、割り当て番号が2j+1のノード10から演算結果を受信する。次に、組分集約処理実行部104は、自ノード10のデータ格納部107に格納された演算結果と受信した演算結果との平均値を算出する。また、組分集約処理実行部104は、演算結果をデータ格納部107に格納する。
【0033】
以下、iがnに達するまで、組分集約処理実行部104は、番号の割り当て、割り当て番号が2jのノード10から割り当て番号が2j+1のノード10へのデータ送信、及び演算結果の平均値の算出を繰返す。
【0034】
iがnに達した場合、自ノード10以外には平均値の算出結果を持たないので、組分集約処理実行部104は、自ノード10のデータ格納部107に格納された演算結果が全ての勾配情報の平均値であると判定する。組分集約処理実行部104は、データ格納部107に格納された全ての勾配情報の平均値の各ノード10への送信をデータ送信部105に指示する。このように、iは、既に行った2台のノード10の平均化処理の繰り返し回数であり、サイズを「2」のべき乗として表した場合の乗数に繰り返し回数が達すると、全てのノード10が有する勾配情報の平均値が求められたことになる。
【0035】
次に、ノード10-1~10-4を使用した場合の勾配情報の集約処理の流れを、
図4と共に説明する。
図4は、勾配情報の集約処理の一例を説明する図である。ここでは、iと各ノード10-1~10-4のランク又は割り当て番号とを、Wの添え字として並べて、勾配情報の集約処理の各段階における各ノード10-1~10-4を表す。ノードW
ijと表した場合、i回目(iは0以上の整数)の2台のノード10の平均化処理において演算結果を有するノード10のうち、ランク番号が低い方からj番目(jは0以上の整数)のノード10を表す。また、
図4において、2台のノード10の平均化処理において、勾配情報を他のノード10に送信したノード10は、除外する。
【0036】
図4に示すように、i=0回目の2台のノード10の平均化処理において、ノード10-1~10-4は、ノードW
00、ノードW
01,ノードW
02、ノードW
03と表される。ノード10-1は、ランクが0=2j(j=0)であるので、ランクが1=2j+1(j=0)であるノード10-2と組になる。また、ノード10-3は、ランクが2=2j(j=1)であるので、ランクが1=2j+1(j=1)であるノード10-4と組になる。
【0037】
ノード10-2の勾配情報は、ノード10-1へ送信され、ノード10-1は、ノード10-1の勾配情報とノード10-2の勾配情報との平均値を算出する。また、ノード10-4の勾配情報はノード10-3へ送信され、ノード10-3は、ノード10-3の勾配情報とノード10-4の勾配情報との平均値を算出する。
【0038】
i=1回目の2台のノード10の平均化処理において、ノード10-1はノードW10と表され、ノード10-3はノードW11と表される。ノード10-1は割り当て番号が0=2j(j=0)であり、ノード10-4は割り当て番号が1=2j+1(j=0)であるので、ノード10-3が演算結果の送り側となる。
【0039】
そこで、ノード10-3は、保持する演算結果をノード10-1へ送信する。ノード10-1は、ノード10-1が保持する演算結果とノード10-2が保持する演算結果との平均値を算出する。
【0040】
i=2回目の2台のノード10の平均化処理において、ノード10-1はノードW20と表される。この例では、コミュニケータ2のサイズは「4」であり、この時点でiはコミュニケータ2のサイズを「2」のべき乗で表した場合の乗数に達する。このため、ノード10-1は、2組平均を用いた全ノード平均化処理の完了を確定する。
【0041】
図2の説明に戻ると、データ送信部105は、通常集約処理実行部103又は組分集約処理実行部104からデータ送信の指示を受ける。データ送信部105は、指示で指定された宛先のノード10へ指定されたデータを送信する。
【0042】
データ受信部106は、他のノード10から演算結果の入力を受ける。また、データ受信部106は、受信したデータを宛先である通常集約処理実行部103又は組分集約処理実行部104へ出力する。
【0043】
このように、本実施例における組分集約処理実行部104が2台のノード10の平均化処理を実行するには、以下の3つの条件を満たすことが好ましい。第1の条件は、Allreduce処理の対象の数が「2」のべき乗であるという条件である。第2の条件は、平均化する値が、「2」の補数表現か符号無しであるという条件である。第3の条件は、演算順序がバリナリツリーを構成するという条件である。
【0044】
本実施例における組分集約処理実行部104は、自ノード10が有する勾配情報及び演算結果を用いた平均化処理の実行をパイプライン化することで、2組平均を用いた全ノード平均化処理の実行を高速化することができる。次に、組分集約処理実行部104における平均化処理のパイプライン化について、
図5と共に説明する。
図5は、平均化処理のパイプライン化を説明する図である。この例では、ノード10-1が、ノード10-2から勾配情報を受信して平均値を算出する場合を説明する。
【0045】
図5において、バッファ111は、ノード10-1のデータ格納部107が有する、受信したデータ及び演算結果を格納する記憶領域である。また、バッファ112は、ノード10-1のデータ格納部107が有する、受信したデータの一時格納領域である。更に、バッファ113は、ノード10-2のデータ格納部107が有する、送信するデータの格納領域である。即ち、バッファ111に格納された配列データは、ノード10-1が有する勾配情報の一例である。また、バッファ113に格納された配列データは、ノード10-2が有する勾配情報の一例である。ノード10-1とノード10-2との勾配情報の平均値を求める場合、ノード10-2は、配列データの部分データをノード10-1へ送信する。ノード10-1は、受信した配列データの部分データに対応する自己が有する配列データの部分データとの間の平均値を求めることを繰り返すことで、配列データ全体の平均値を取得する。
【0046】
第1段階で、ノード10-1は、バッファ113の領域202に格納された部分データを受信し、バッファ112の領域203に格納する。
【0047】
次の第2段階で、ノード10-1は、バッファ111の領域201に格納された部分データとバッファ112の領域203に格納された部分データの平均値204を算出し、バッファ111の領域201に格納する。この処理と並行して、ノード10-1は、バッファ113の領域206に格納された部分データを受信し、バッファ112の領域207に格納する。
【0048】
次の第3段階で、ノード10-1は、バッファ111の領域205に格納された部分データとバッファ112の領域207に格納された部分データの平均値208を算出し、バッファ111の領域205に格納する。この処理と並行して、ノード10-1は、バッファ113の領域210に格納された部分データを受信し、バッファ112の領域211に格納する。
【0049】
その後、ノード10-1は、勾配情報である配列データにおける部分データの平均化処理を並列して繰り返し、配列データ全体の平均値の算出を完了する。このように、勾配情報である配列データにおける部分データの平均化処理をパイプライン化して繰り返すことで、組分集約処理実行部104は、2組平均を用いた全ノード平均化処理の実行を高速化することができる。
【0050】
更に、組分集約処理実行部104は、2台のノード10が保持する値の平均値を算出する際に、以下の演算を実行することでオーバーフローの発生を回避する。組分集約処理実行部104による2台のノード10が保持する値の平均値の算出を、
図6と共に説明する。
図6は、2台のノードの保持データの平均値の算出方法を説明する図である。
【0051】
受信側のノード10が保持する値がx0、送信側のノード10が有する値がx1である場合、組分集約処理実行部104は、x0とx1との論理積を求めて第1値を算出する。更に、組分集約処理実行部104は、x0とx1との排他的論理和を求めて1ビットの右シフトを行い、第2値を算出する。1ビットの右シフトでは、組分集約処理実行部104は、シフト後の値に先頭のビットに0を付加する。1ビットの右シフトは、「2」で除算することに相当する。組分集約処理実行部104は、第1値と第2値とを加算することで、x0とx1との平均値を算出する。
【0052】
即ち、論理積を「&」で表し、排他的論理和を「^」で表し、1ビットの右シフトの演算を「>>1」で表した場合、組分集約処理実行部104は、(x0&x1)+((x0^x1)>>1)で表される演算を実行することで、x0とx1との平均値を求める。この演算方法は、ビット毎に分けて平均値を演算して後に加算する方法であり、負の無限大への丸めを用いた端数切捨て方式である。
【0053】
x0とx1とでビット値が同一の場合は、次の原理で平均値が求まる。先ず、ビット値が同一となるビットをx0&x1で抽出する。この場合、ビット値が同一なので、x0&x1がそのまま平均値となる。これに対して、x0とx1とでビット値が異なる場合は、次の原理で平均値が求まる。先ず、ビット値が異なるビットをx0^x1により抽出する。また、ビット値が異なるので、「2」で除算する演算をシフト演算化して(x0^x1)>>1とすることで、ビット値が異なるビットの平均値を求めることができる。
【0054】
例えば、x0=11001100であり、x1=10101010の場合について、具体例を説明する。この場合、x0とx1とを単に加算して「2」で除算した場合、加算時に桁の繰り上がりが発生し、8ビットのデータ領域からのオーバーフローが発生する。
【0055】
これに対して、本実施例における組分集約処理実行部104は、演算221によりx0とx1との論理積を算出する。この場合、組分集約処理実行部104は、演算221の結果である第1値として「10001000」を取得する。演算221では、オーバーフローは発生しない。
【0056】
また、組分集約処理実行部104は、演算222によりx0とx1との排他的論理和を求め、演算223により1ビットの右シフトを行う。この場合、組分集約処理実行部104は、演算222の結果である第2値として「01100110」を取得する。演算222でも、オーバーフローは発生しない。
【0057】
組分集約処理実行部104は、演算224により第1値と第2値との加算値を算出する。これにより、組分集約処理実行部104は、演算結果として「101111011」を得る。この場合、第2値の最上位の桁は0であるので、加算によりオーバーフローが発生することはない。算出された値は、前述した0とx1とを単に加算して「2」で除算することで、算出したx0とx1との平均値と一致する。即ち、組分集約処理実行部104は、この演算によりx0とx1との平均値を算出できる。このように、組分集約処理実行部104は、オーバーフローを発生させずに、x0とx1との平均値を算出することができる。
【0058】
次に、一実施例における並列計算機1によるAllreduce処理を、
図7と共に説明する。
図7は、一実施例における並列計算機によるAllreduce処理を説明するフローチャートである。以下の説明では、ノード10が保持する勾配情報及び演算結果をまとめて「保持データ」と呼ぶ場合がある。
【0059】
図8は、ノードのハードウェア構成の一例を示すブロック図である。
図8に示すノード10は、CPU(Central Processing Unit)21、メモリ22及び通信装置23を有する。CPU21は、演算を実行すると共に、ノード10全体の制御を司るプロセッサの一例である。CPU21は、メモリ22に記憶されたプログラムを実行し、
図2に示す各部101~104の機能を実現できる。つまり、CPU21は、
図7に示すAllreduce処理を実行することができる。
【0060】
メモリ22は、プログラム、データ等を記憶する記憶装置の一例であり、
図2に示すデータ格納部107を形成可能である。メモリ22は、可搬型記録媒体、半導体記憶装置、磁気記録媒体、光記録媒体、光磁気記録媒体等のコンピュータ読取可能な記録媒体により形成可能である。可搬型記録媒体は、USB(Universal Serial Bus)メモリ等を含む。半導体記憶装置は、フラッシュメモリ等を含む。光記録媒体は、CD-ROM(Compact Disk-Read Only Memory)、DVDディスク(Digital Versatile Disk)等を含む。なお、メモリ22にディスク等の磁気記録媒体、光記録媒体又は光磁気記録媒体を用いる場合、記録媒体は、ディスクドライブ等のドライブにロードされ、ドライブによりプログラム等を記録媒体から読み出し、必要に応じて記録媒体にデータ等を書き込む。
【0061】
通信装置23は、ノード10をネットワーク5へ接続可能な送受信装置の一例であり、
図2に示すデータ送信部105及びデータ受信部106を形成可能である。
【0062】
なお、ノード10のハードウェア構成は、
図8に示す構成に限定されないことは、言うまでもない。
【0063】
図7のAllreduce処理が開始されると、番号割当部101は、MPI処理を行い、コミュニケータ2を生成し、生成したコミュニケータ2のサイズ及びコミュニケータ2に属する各ノード10にランクを割り当てる(ステップS1)。その後、番号割当部101は、コミュニケータ2のサイズの情報及びランクの情報を実行処理判定部102へ出力する。
【0064】
実行処理判定部102は、コミュニケータ2のサイズの情報及びランクの情報の入力を番号割当部101から受ける。また、実行処理判定部102は、コミュニケータ2のサイズを、Allreduce処理で対象とするノード10の台数Nである対象数Nとする。実行処理判定部102は、対象数Nが「2」のn乗と表すことができるか否か、即ち、N=2nである否かを判定する(ステップS2)。
【0065】
対象数Nが「2」のn乗と表すことができる場合(ステップS2でYes)、実行処理判定部102は、Allreduce処理の実行を組分集約処理実行部104に依頼する。組分集約処理実行部104は、Allreduce処理の実行の依頼を受けて、iを初期化して0とする(ステップS3)。
【0066】
次に、組分集約処理実行部104は、jを初期化して0とする(ステップS4)。
【0067】
次に、組分集約処理実行部104は、保持データを他のノード10へ送信していないノード10のランクの低い側から割り当て番号として0から連番で順に番号を割り当てる。割り当て番号が2j+1と表されるノード10の組分集約処理実行部104は、自ノード10の保持データを割り当て番号が2jと表されるノード10へ送信する。一方、割り当て番号が2jと表されるノード10は、自ノード10の保持データと受信した保持データとの平均値を算出する。ここで、i回目の2台のノード10の平均化処理における、割り当て番号が2jと表されるノード10の保持データをWi(2j),割り当て番号が2j+1と表されるノード10の保持データをWi(2j+1)と表す。また、i+1回目の2台のノード10の平均化処理における、ランクが低い側からj番目のノード10の保持データをW(i+1)jと表す。この場合、i回目の処理における割り当て番号が2jと表されるノード10が、i+1回目の処理におけるj番目のノード10となり、その組分集約処理実行部104は、W(i+1)j=(1/2)・(Wi(2j)+Wi(2j+1))で表される演算を行う(ステップS5)。
【0068】
組分集約処理実行部104は、jがNを「2」のべき乗で表した場合の乗数に達したか否か、即ちj<N/2i-1であるか否かを判定する(ステップS6)。j<N/2i-1の場合(ステップS6でYes)、組分集約処理実行部104は、jを1つインクリメントして(ステップS7)、処理をステップS5へ戻す。
【0069】
これに対して、j<N/2i-1でない場合(ステップS6でNo)、組分集約処理実行部104は、同期処理を実行する(ステップS8)。同期処理とは、i回目の全ての割り当て番号が2jのノード10における平均化処理が終わるまで待機する処理である。
【0070】
次に、組分集約処理実行部104は、iを1つインクリメントする(ステップS9)。
【0071】
次に、組分集約処理実行部104は、iがコミュニケータ2のサイズを「2」のべき乗として表した場合の乗数に達したか否か、即ちi<nであるか否かを判定する(ステップS10)。i<nの場合(ステップS10でYes)、組分集約処理実行部104は、処理をステップS4へ戻す。
【0072】
これに対して、i<nでない場合(ステップS10でNo)、組分集約処理実行部104は、全てのノード10が有する勾配情報の平均値であるAvがWi0であると決定し(ステップS11)、処理は終了する。
【0073】
一方、対象数Nが「2」のn乗と表すことができない場合(ステップS2でNo)、実行処理判定部102は、Allreduce処理の実行を通常集約処理実行部103に依頼する。通常集約処理実行部103は、Allreduce処理の実行の依頼を受けて、例えば次式(1)に従った通常の全ノード平均化処理を実行し(ステップS12)、処理は終了する。
【0074】
【0075】
このように、本実施例における並列計算機1は、対象数Nが「2」のn乗と表すことができる場合、ノードを2台ずつ組にしたAllreduce処理の演算を繰り返すことで、全てのノードのAllreduce処理を実行する。これにより、並列計算機1は演算誤差を軽減し且つデータ転送量を抑えることでき、演算精度を犠牲にすることなくスループットを向上させることが可能となる。また、並列計算機1は、論理積と排他的論理和を用いた演算により2つの値の平均値を求めることで、オーバーフローの発生を起こすことなく全ノードの平均化処理を実行することができる。更に、ノード間通信やバッファからのデータの読み出し及び書き込みの処理に比べて、平均化演算は極めて短時間で終了する。並列計算機1は、平均化処理におけるデータ通信並びに、バッファからのデータの読み出し及び書き込みの処理をパイプライン化することにより、処理時間をオーバラップさせて隠蔽することができる。これにより、並列計算機1は、平均化処理の回数の増加による性能劣化を抑えることができる。
【0076】
なお、通常集約処理実行部103は、ステップS12において、Allreduce処理の実行の依頼を受けて、例えば次式(2)に従った通常の全ノード平均化処理を実行しても良い。ここで、pは2p-1<N<2pを満たす自然数である。
【0077】
【0078】
上記の式(2)の一番右側の数式表現において、xi/2pの項は、各ノード10が保持する値をp回「2」で除算した商である。また、Σの項は、前記xi/2pの項をi=1からi=N-1について加算した値である。更に、2p/Nの項は、N,pによって一意に決まる「1」以上、且つ「2」未満の値である。つまり、偶数時は2つずつ平均を取り、奇数時は1つだけ「2」で除算して他は2つずつ平均する処理を繰り返していき、最後に固定値2p/Nを乗算する。
【0079】
このようにして、実際のノードにダミーノードを加えるか、或いは、実際のノードから「2」のべき乗のノードを選び出し、平均操作の対象となるノードの台数Nが「2」のべき乗となるようにする。また、ダミーノードは、実際のノードの中に分散して作成し、特定のノードへの負荷の集中を避ける。
【0080】
ところが、ノードを数える順番を固定すると、場合によっては、特定のノードが保持する値だけが偏って「2」で除算され続け、商が非常に小さくなるか、或いは、0になる可能性がある。
図9は、ノードを数える順番を固定した場合の一例を説明する図である。
図9は、ノード10の台数が17台の例を示し、「ノードの番号」の行はノード10に割り振られたノード10の番号「0」~「17」を示す。上記の如く、各ノード10が1つのプロセスを実行する場合、ノード10に割り振られた番号と、当該ノード10が実行するプロセスに割り当てられたランクとは、同じである。「1回目平均」~「5回目平均」の各行において、番号「0」,...は2つのノード10が保持する値の平均演算を行う箇所の順番を示す。又、各行において、梨地で囲んで示す番号は、1つのノード10が保持する値を「2」で除算(即ち、1/2演算)する箇所を示す。
【0081】
図9の1回目平均では、番号「0」の箇所で番号「0」,「1」のノード10の平均演算を行い、...、番号「7」の箇所で番号「14」,「15」のノード10の平均演算を行い、梨地で囲んで示す番号「8」の箇所で番号「16」のノード10が保持する値に1/2演算を行う。2回目平均では、番号「0」の箇所で1回目平均の番号「0」,「1」の箇所で得た値の平均演算を行い、...、番号「3」の箇所で1回目平均の番号「6」,「7」の箇所で得た値の平均演算を行う。また、2回目平均では、梨地で囲んで示す番号「4」の箇所で1回目平均の番号「8」の値に1/2演算を行う。3回目平均では、番号「0」の箇所で2回目平均の番号「0」,「1」の箇所で得た値の平均演算を行い、番号「1」の箇所で2回目平均の番号「2」,「3」の箇所で得た値の平均演算を行う。また、3回目平均では、梨地で囲んで示す番号「2」の箇所で2回目平均の番号「4」の値に1/2演算を行う。4回目平均では、番号「0」の箇所で3回目平均の番号「0」,「1」の箇所で得た値の平均演算を行い、梨地で囲んで示す番号「1」の箇所で3回目平均の番号「2」の値に1/2演算を行う。5回目平均では、番号「0」の箇所で4回目平均の番号「0」箇所で得た値と、4回目平均の番号「1」の箇所で得た値の平均演算を行う。
【0082】
つまり、この例では、上記の式(2)が次のようになる。
【0083】
【0084】
なお、ノードを数える順番を固定した場合に起こる上記の如き現象は、ノードを数える順番をランダムにした場合でも起こり得る。
【0085】
そこで、ノードを数える順番を変動させる場合について説明する。
図10は、ノードを数える順番を変動させる一例を説明する図である。
図10は、ノード10の台数が17台の例を示し、「ノードの番号」の行はノード10に割り振られたノード10の番号「0」~「16」を示す。上記の如く、各ノード10が1つのプロセスを実行する場合、ノード10に割り振られた番号と、当該ノード10が実行するプロセスに割り当てられたランクとは、同じである。「1回目平均」~「5回目平均」の各行において、梨地で囲んで示す番号「0」は、「2」で除算(即ち、1/2演算)を行う最初の箇所を示し、番号「0」,「1」,...は2つのノード10が保持する値の平均演算を行う箇所の順番を示す。
【0086】
図10の1回目平均では、梨地で囲んで示す番号「0」の箇所で番号「16」のノード10が保持する値に1/2演算を行い、番号「1」の箇所で番号「0」,「1」のノード10の平均演算を行い、...、番号「8」の箇所で番号「14」,「15」のノード10の平均演算を行う。2回目平均では、梨地で囲んで示す番号「0」の箇所で1回目平均の番号「8」の値に1/2演算を行う。また、2回目平均では、番号「1」の箇所で1回目平均の番号「0」,「1」の箇所で得た値の平均演算を行い、...、番号「4」の箇所で1回目平均の番号「6」,「7」の箇所で得た値の平均演算を行う。3回目平均では、梨地で囲んで示す番号「0」の箇所で2回目平均の番号「4」の値に1/2演算を行う。また、3回目平均では、番号「1」の箇所で2回目平均の番号「0」,「1」の箇所で得た値の平均演算を行い、番号「2」の箇所で2回目平均の番号「2」,「3」の箇所で得た値の平均演算を行う。4回目平均では、梨地で囲んで示す番号「0」の箇所で3回目平均の番号「2」の値に1/2演算を行う。また、4回目平均では、番号「1」の箇所で3回目平均の番号「0」,「1」の箇所で得た値の平均演算を行う。5回目平均では、番号「0」の箇所で4回目平均の番号「0」,「1」の箇所で得た値の平均演算を行う。
【0087】
図10に示すように、ノード10の台数Nが奇数の場合、数える最初の順番を固定するのではなく、数えた順番で最後のノード10の順番を最初として当該ノード10の値を「2」で除算する。また、演算結果の数が奇数の場合、前回の最後の演算結果の順番を最初として「2」で除算し、前回の最初の演算結果と次の演算結果の平均演算を行い、以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行う。更に、演算結果の数が偶数の場合、前回の最初と次の演算結果の平均演算を行い、以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行う。これにより、最も奇数が多くなるノード10の台数Nが2
p+1+1の場合でも、「2」で除算する値が重複することをできるだけ避けながら平均化が行われ、「2」で除算する箇所の偏りも抑えることができる。
【0088】
図11は、ノードを数える順番を変動させる他の例を説明する図である。
図11は、ノード10の台数が31台の例を示し、「ノードの番号」の行はノード10に割り振られたノード10の番号「0」~「30」を示す。上記の如く、各ノード10が1つのプロセスを実行する場合、ノード10に割り振られた番号と、当該ノード10が実行するプロセスに割り当てられたランクとは、同じである。「1回目平均」~「5回目平均」の各行において、梨地で囲んで示す番号「0」は、「2」で除算(即ち、1/2演算)を行う最初の箇所を示し、番号「0」,「1」,...は2つのノード10が保持する値の平均演算を行う箇所の順番を示す。
【0089】
図11の1回目平均では、梨地で囲んで示す番号「0」の箇所で番号「30」のノード10が保持する値に1/2演算を行い、番号「1」の箇所で番号「0」,「1」のノード10の平均演算を行い、...、番号「15」の箇所で番号「28」,「29」のノード10の平均演算を行う。2回目平均では、番号「0」の箇所で1回目平均の番号「0」,「1」の箇所で得た値の平均演算を行う。また、2回目平均では、番号「1」の箇所で1回目平均の番号「2」,「3」の箇所で得た値の平均演算を行い、...、番号「7」の箇所で1回目平均の番号「14」,「15」の箇所で得た値の平均演算を行う。3回目平均では、番号「0」の箇所で2回目平均の番号「0」,「1」の箇所で得た値の平均演算を行い、番号「1」の箇所で2回目平均の番号「2」,「3」の箇所で得た値の平均演算を行い。また、3回目平均では、番号「2」の箇所で2回目平均の番号「4」,「5」の箇所で得た値の平均演算を行い、番号「3」の箇所で2回目平均の番号「6」,「7」の箇所で得た値の平均演算を行う。4回目平均では、番号「0」の箇所で3回目平均の番号「0」,「1」の箇所で得た値の平均演算を行い、番号「1」の箇所で3回目平均の番号「2」,「3」の箇所で得た値の平均演算を行う。5回目平均では、番号「0」の箇所で4回目平均の番号「0」,「1」の箇所で得た値の平均演算を行う。
【0090】
図11に示すように、例えばノード10の台数が2
p-1の場合は、数えた順番で最後のノード10の順番を最初として当該ノード10が保持する値を「2」で除算する箇所が1箇所だけ発生する。つまり、数える最初の順番を固定するのではなく、最後のノード10の順番を最初として当該ノード10が保持する値を「2」で除算する。また、前回の最初と次の演算結果の平均演算を行い、以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行う。このため、「2」で除算する値が重複することをできるだけ避けて平均化が行われ、「2」で除算する箇所の偏りも抑えることができる。従って、この例では、上記の式(2)が次のようになる。
【0091】
【0092】
図12は、通常の全ノード平均化処理の一例を説明するフローチャートである。
図12に示す処理は、
図7に示すステップS2の判定結果がNoである場合に、例えば上記の式(2)に従って、
図2に示す通常集約処理実行部103により実行される。ここで、pは2
p-1<N<2
pを満たす自然数である。また、各ノード10は、1つのプロセスを実行する場合を例に説明する。更に、平均化する値が、「2」の補数表現か符号無しであるという上記第2の条件を満たすことが前提条件である。
【0093】
通常集約処理実行部103は、数えた順番で、ノード10にノード10の番号を「0」~「N-1」まで割り振る(ステップS121)。また、通常集約処理実行部103は、i=0,N’=Nに設定し(ステップS122)、j=0に設定する(ステップS123)。通常集約処理実行部103は、N’が偶数であるか否かを判定し(ステップS124)、判定結果がYesであると処理はステップS125へ進み、Noであると処理は後述するステップS141へ進む。
【0094】
通常集約処理実行部103は、W(i+1)j=(1/2)・(Wi(2j)+Wi(2j+1))で表される演算を行う(ステップS125)。通常集約処理実行部103は、jを1つインクリメントし(ステップS126)、j<N’/2であるか否かを判定する(ステップS127)。ステップS127の判定結果がYesであると処理はステップS125へ戻り、Noであると処理はステップS128へ進む。通常集約処理実行部103は、N’=N’/2を演算する(ステップS128)。
【0095】
ステップS128の後、通常集約処理実行部103は、同期処理を実行する(ステップS129)。同期処理とは、i回目の全ての割り当て番号が2jのノード10における平均化処理が終わるまで待機する処理である。ステップS129の後、通常集約処理実行部103は、iを1つインクリメントし(ステップS130)、i<pであるか否かを判定する(ステップS131)。ステップS131の判定結果がYesであると処理はステップS123へ戻り、Noであると処理はステップS132へ進む。通常集約処理実行部103は、全てのノード10が有する勾配情報の平均値であるAvがWi0・2p/Nであると決定し(ステップS132)、処理は終了する。
【0096】
一方、ステップS124の判定結果がNoであると、通常集約処理実行部103は、W(i+1)0=(1/2)・(Wi(N’-1))で表される演算を行い(ステップS141)、W(i+1)(j+1)=(1/2)・(Wi(2j)+Wi(2j+1))で表される演算を行う(ステップS143)。通常集約処理実行部103は、jを1つインクリメントし(ステップS143)、j<(N’/2-1/2)であるか否かを判定する(ステップS144)。ステップS144の判定結果がYesであると処理はステップS142へ戻り、Noであると処理はステップS145へ進む。通常集約処理実行部103は、N’=N’/2+1/2で表される演算を行い(ステップS145)、処理は上記のステップS129へ進む。
【0097】
図13は、N=6,p=3の場合の
図12の処理を説明する図である。
図13において、i=0回目(N’は偶数)の2台のノード10の平均化処理において、番号「0」~「5」のノードでは夫々値W
00~W
05が求められる。
【0098】
i=1回目(N’は奇数)の2台のノード10の平均化処理において、番号「0」,「1」のノード10が保持する値W00,W01から値W10=(1/2)・(W00+W01)が演算される。また、番号「2」,「3」のノード10が保持する値W02,W03から値W11=(1/2)・(W02+W03)が演算される。更に、番号「4」,「5」のノード10が保持する値W04,W05から値W12=(1/2)・(W04+W05)が演算される。
【0099】
i=2回目(N’は偶数)の2台のノード10の平均化処理において、演算された値W10,W11から値W21=(1/2)・(W10+W11)が演算される。また、演算された値W12から値W20=W12/2が演算される。
【0100】
i=3回目(i=pで終了)の2台のノード10の平均化処理において、演算された値W21,W22から値W30=(1/2)・(W20+W21)が演算される。
【0101】
従って、
図13に示す例では、通常集約処理実行部103は、6台の全てのノード10が有する勾配情報の平均値であるAvがW
i0・2
p/N=W
30・2
3/6であると決定する。
【0102】
このように、
図12に示す通常の全ノード平均化処理によれば、ノード平均を求めることによる演算精度の劣化を防ぐことができる。また、ノードの台数が「2」のべき乗でない場合、全ノードの平均を求めることでオーバーフローが発生してスループットが低下することを防げる。更に、冗長ビットを確保しなくても、オーバーフローの発生を防げる。このため、オーバーフローの発生に起因するスループットの低下を防げる。この結果、最終データの精度を犠牲にすることなく、全ノードの高スループットな平均化が可能になる。
【0103】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
(付記1)
互いに通信可能なN台のノードを備え、
各ノードは、演算を実行するプロセッサと、値及び前記値を用いた演算結果を保持するメモリを有し、
Nは2以上の自然数であり、nは1以上の自然数であり、N=2
nでない場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを2台ずつ組にして、組にした2台のノードが保持する値の平均値の算出を繰返す処理を実行することを特徴とする、演算処理装置。
(付記2)
N=2
p+1+1であり、pは2
p-1<N<2
pを満たす自然数である場合、数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、
演算結果の数が奇数の場合、
前回の最後の演算結果の順番を最初として2で除算し、
前回の最初の演算結果と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行い、
演算結果の数が偶数の場合、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行うことを特徴とする、付記1記載の演算処理装置。
(付記3)
N=2
p-1であり、pは2
p-1<N<2
pを満たす自然数である場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行うことを特徴とする、付記1記載の演算処理装置。
(付記4)
各ノードは、Allreduce処理を実行し、次式(2)
【数5】
に従った平均化処理を実行することを特徴とする、付記1乃至3のいずれか1項記載の演算処理装置。
(付記5)
Nが2
nである場合、前記値又は前記値を用いた演算結果を保持するノードを2台ずつ組にして、組にした2台のノードが保持する値の平均値の算出を繰返す処理を実行することを特徴とする、付記1乃至4のいずれか1項記載の演算処理装置。
(付記6)
互いに通信可能なN台のノードを備えたコンピュータを制御するためのプログラムであって、
Nは2以上の自然数であり、nは1以上の自然数であり、N=2
nでない場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを2台ずつ組にして、組にした2台のノードが保持する値の平均値の算出を繰返す処理を実行する、
処理を前記コンピュータに実行させることを特徴とする、プログラム。
(付記7)
N=2
p+1+1であり、pは2
p-1<N<2
pを満たす自然数である場合、数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、
演算結果の数が奇数の場合、
前回の最後の演算結果の順番を最初として2で除算し、
前回の最初の演算結果と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行い、
演算結果の数が偶数の場合、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行う、
処理を前記コンピュータに実行させることを特徴とする、付記6記載のプログラム。
(付記8)
N=2
p-1であり、pは2
p-1<N<2
pを満たす自然数である場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行う、
処理を前記コンピュータに実行させることを特徴とする、付記6記載のプログラム。
(付記9)
各ノードが、Allreduce処理を実行し、次式(2)
【数6】
に従った平均化処理を前記コンピュータに実行させることを特徴とする、付記6乃至8のいずれか1項記載のプログラム。
(付記10)
Nが2
nである場合、前記値又は前記値を用いた演算結果を保持するノードを2台ずつ組にして、組にした2台のノードが保持する値の平均値の算出を繰返す、
処理を前記コンピュータに実行させることを特徴とする、付記6乃至9のいずれか1項記載のプログラム。
(付記11)
互いに通信可能なN台のノードの夫々が演算を実行し、値及び前記値を用いた演算結果を保持する、演算処理装置の制御方法であって、
Nは2以上の自然数であり、nは1以上の自然数であり、N=2
nでない場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを2台ずつ組にして、組にした2台のノードが保持する値の平均値の算出を繰返す処理を実行させることを特徴とする、演算処理装置の制御方法。
(付記12)
N=2
p+1+1であり、pは2
p-1<N<2
pを満たす自然数である場合、数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、
演算結果の数が奇数の場合、
前回の最後の演算結果の順番を最初として2で除算し、
前回の最初の演算結果と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行い、
演算結果の数が偶数の場合、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行う、
処理を実行させることを特徴とする、付記11記載の演算処理装置の制御方法。
(付記13)
N=2
p-1であり、pは2
p-1<N<2
pを満たす自然数である場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を2で除算し、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する2つの演算結果の平均演算を行う、
処理を実行させることを特徴とする、付記11記載の演算処理装置の制御方法。
(付記14)
各ノードが、Allreduce処理を実行し、次式(2)
【数7】
に従った平均化処理を実行させることを特徴とする、付記11乃至13のいずれか1項記載の演算処理装置の制御方法。
(付記15)
Nが2
nである場合、前記値又は前記値を用いた演算結果を保持するノードを2台ずつ組にして、組にした2台のノードが保持する値の平均値の算出を繰返す、
処理を実行させることを特徴とする、付記11乃至14のいずれか1項記載の演算処理装置の制御方法。
【0104】
以上、開示の演算処理装置、プログラム、及び演算処理装置の制御方法を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【符号の説明】
【0105】
1 並列計算機
2 コミュニケータ
5 ネットワーク
10,10-1~10-N ノード
21 CPU
22 メモリ
23 通信装置
101 番号割当部
102 実行処理判定部
103 通常集約処理実行部
104 組分集約処理実行部
105 データ送信部
106 データ受信部
107 データ格納部