(57)【要約】【課題】演算処理装置、プログラム、及び演算処理装置の制御方法において、ノード平均を求めることによる演算精度の劣化を防ぐことを目的とする。【解決手段】互いに通信可能なＮ台のノードを備え、各ノードは、演算を実行するプロセッサと、値及び前記値を用いた演算結果を保持するメモリを有し、Ｎは２以上の自然数であり、ｎは１以上の自然数であり、Ｎ＝２ｎでない場合、数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを２台ずつ組にして、組にした２台のノードが保持する値の平均値の算出を繰返す処理を実行する。【選択図】図１２
2020190894.tif 000002
【特許請求の範囲】
【請求項１】
互いに通信可能なＮ台のノードを備え、
各ノードは、演算を実行するプロセッサと、値及び前記値を用いた演算結果を保持するメモリを有し、
Ｎは２以上の自然数であり、ｎは１以上の自然数であり、Ｎ＝２ｎでない場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを２台ずつ組にして、組にした２台のノードが保持する値の平均値の算出を繰返す処理を実行することを特徴とする、演算処理装置。
【請求項２】
Ｎ＝２ｐ＋１＋１であり、ｐは２ｐ−１＜Ｎ＜２ｐを満たす自然数である場合、数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、
演算結果の数が奇数の場合、
前回の最後の演算結果の順番を最初として２で除算し、
前回の最初の演算結果と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行い、
演算結果の数が偶数の場合、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行うことを特徴とする、請求項１記載の演算処理装置。
【請求項３】
Ｎ＝２ｐ−１であり、ｐは２ｐ−１＜Ｎ＜２ｐを満たす自然数である場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行うことを特徴とする、請求項１記載の演算処理装置。
【請求項４】
各ノードは、Allreduce処理を実行し、次式（２）
【数８】
2020190894.tif 000010
に従った平均化処理を実行することを特徴とする、請求項１乃至３のいずれか１項記載の演算処理装置。
【請求項５】
互いに通信可能なＮ台のノードを備えたコンピュータを制御するためのプログラムであって、
Ｎは２以上の自然数であり、ｎは１以上の自然数であり、Ｎ＝２ｎでない場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを２台ずつ組にして、組にした２台のノードが保持する値の平均値の算出を繰返す処理を実行する、
処理を前記コンピュータに実行させることを特徴とする、プログラム。
【請求項６】
互いに通信可能なＮ台のノードの夫々が演算を実行し、値及び前記値を用いた演算結果を保持する、演算処理装置の制御方法であって、
Ｎは２以上の自然数であり、ｎは１以上の自然数であり、Ｎ＝２ｎでない場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを２台ずつ組にして、組にした２台のノードが保持する値の平均値の算出を繰返す処理を実行させることを特徴とする、演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、プログラム、及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
近年、様々な分野で高性能計算（ＨＰＣ：High  Performance  Computing）、データサイエンス（Data  Science）、機械学習（ＭＬ：Machine  Learning）、深層学習（ＤＬ：Deep  Learning）等の手法が用いられている。これらの手法は、莫大な量の計算を行うため、単一のプロセッサでデータを処理することは難しい。そこで、これらの手法を用いる場合、データを多数のプロセッサに分割して割り当て、並列に計算させることで高速化を図る並列計算機を導入する。並列計算機は、プロセッサとメモリと通信装置で形成されたノードを複数台有し、プロセッサ間でデータ通信を行わせるために、複数台のノード同士をネットワークを介して接続する。
【０００３】
例えば、ＤＬを行う場合、並列計算機に複数のニューロン層を用意する。各ニューロン層に亘って、入力データから出力データを得るフォワード（Forward）、出力データと正解とを比較し差分を取得するバックワード（Backward）、及び差分を用いて各ニューロン層で用いられるパラメータを更新するアップデート（Update）の処理を繰り返す。これにより、各ニューロン層で用いるパラメータの適切な値を取得する、パラメータの最適化を行う。バックワード処理で求める差分は、例えば画像認識等において微分係数等で表される場合、勾配情報と呼ばれることもある。このようにして、モデル関数とデータの隔たりを小さくするように、パラメータ（又は、モデルパラメータ）を最適化する。
【０００４】
パラメータの最適化では、ニューロン層毎にバックワード処理により各ノードで取得した差分を集約し、所定の演算により更新用データを求めて各ノードに配布する、オールレデュース（Allreduce）処理を行う。Allreduce処理は、例えば全てのノードが有する勾配情報を加算し、各ノードに加算値を分配する。その後、各ノードにおいて、加算値を並列計算機が有するノードの台数で除算して平均を取ることで、更新用データを求めることができる。
【０００５】
ＤＬの計算は、例えば３２ビットや６４ビットの浮動小数点演算を行うＨＰＣの計算とは異なり、精度が多少低くても得られる最終結果が、例えばＨＰＣの計算結果と比べても概ね遜色がないことが知られている。そこで、パラメータを低ビット整数で表すことで、ノード間のデータ通信量を削減することができる。また、データ通信量を削減することで、演算を高速化することができる。例えば１６ビットの半精度浮動小数点演算をサポートし、３２ビット浮動小数点演算に比べて２倍以上のスループットが得られるグラフィックス・プロセッシング・ユニット（ＧＰＵ：Graphics  Processing  Unit）が提案されている。更に、固定小数点数である低ビット整数を用いて、更にスループットを向上させる技術も提案されている。
【０００６】
しかし、例えば４台のノードを有する並列計算機において、勾配情報が例えば８ビットの値であっても、Allreduce処理の途中で１０ビット分のレジスタが必要になる場合がある。例えば、４台のノードの夫々における８ビットの値が符号無しの２進数「１１１１１１１１」であると、これらの値を加算した加算値は、１０ビットの値「１１１１１１１１００」になる。この場合、結局は１６ビット表現での演算を行うことになるため、スループットが１／２に減少してしまう。更に、並列計算機が有するノードの台数が増加して例えば５１２台になると、加算値が１７ビットになる場合もあり、この場合には３２ビット表現での演算を行うことになるため、スループットは１／４に減少してしまう。
【０００７】
そこで、オーバーフローを抑えるために、各ノードが有する勾配情報を加算前に予めノードの台数で除算しても良い。しかし、この場合、オーバーフローの発生は軽減できるものの、並列計算機が有するノードの台数が多いと、商が非常に小さくなるか、或いは、０になるため、加算時に誤差が発生して演算精度が劣化してしまう。並列計算機が有する例えば５１２台のノードの夫々における８ビットの値が、符号無しの２進数「１１１１１１１１」であると、この値をノードの台数である「５１２」で除算した結果は、８ビットの値「００００００００」になる。従って、オーバーフローを回避して演算精度を維持することは難しい。
【０００８】
このように、従来技術では、並列計算機が有するノードの台数が増大するとスループットが低下し、低ビット整数を用いてスループットを向上しようとすると、演算精度が劣化してしまうので、ノード平均を求めることによる演算精度の劣化を防ぐことは難しい。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０００−３３９２７８号公報
【特許文献２】特開２０００−２０５０１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上記の如く、従来技術では、ノード平均を求めることによる演算精度の劣化を防ぐことは難しい。
【００１１】
そこで、１つの側面では、ノード平均を求めることによる演算精度の劣化を防ぐことができる演算処理装置、プログラム、及び演算処理装置の制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
１つの案によれば、互いに通信可能なＮ台のノードを備え、各ノードは、演算を実行するプロセッサと、値及び前記値を用いた演算結果を保持するメモリを有し、Ｎは２以上の自然数であり、ｎは１以上の自然数であり、Ｎ＝２ｎでない場合、数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを２台ずつ組にして、組にした２台のノードが保持する値の平均値の算出を繰返す処理を実行する演算処理装置が提供される。
【発明の効果】
【００１３】
一態様によれば、ノード平均を求めることによる演算精度の劣化を防ぐことができる。
【図面の簡単な説明】
【００１４】
【図１】一実施例における並列計算機の一例を示すブロック図である。
【図２】ノードの機能構成の一例を示すブロック図である。
【図３】番号割当部によるＭＰＩ処理をＮ＝４の場合について説明する図である。
【図４】勾配情報の集約処理の一例を説明する図である。
【図５】平均化処理のパイプライン化を説明する図である。
【図６】２台のノードの保持データの平均値の算出方法を説明する図である。
【図７】一実施例における並列計算機によるAllreduce処理を説明するフローチャートである。
【図８】ノードのハードウェア構成の一例を示すブロック図である。
【図９】ノードを数える順番を固定した場合の一例を説明する図である。
【図１０】ノードを数える順番を変動させる一例を説明する図である。
【図１１】ノードを数える順番を変動させる他の例を説明する図である。
【図１２】通常の全ノード平均化処理の一例を説明するフローチャートである。
【図１３】Ｎ＝６，ｐ＝３の場合の図１２の処理を説明する図である。
【発明を実施するための形態】
【００１５】
以下に、開示の演算処理装置、プログラム、及び演算処理装置の制御方法の各実施例を図面と共に説明する。
【実施例】
【００１６】
図１は、一実施例における並列計算機の一例を示すブロック図である。並列計算機１は、複数台のノード１０−１〜１０−Ｎを有するコンピュータの一例であり、この例では演算処理装置の一例である。ここで、Ｎは２以上の自然数である。ノード１０−１〜１０−Ｎは、夫々ネットワーク５を介して接続されており、ネットワーク５を介して相互にデータの送受信が可能である。ネットワーク５は、通信経路の一例である。つまり、ノード１０−１〜１０−Ｎは、ネットワーク５を介して通信可能である。
【００１７】
ノード１０−１〜１０−Ｎは、例えばＤＬを実行する。ＤＬにおいて、ノード１０−１〜１０−Ｎは、パラメータの最適化を実行する。ノード１０−１〜１０−Ｎは、パラメータの最適化にあたり、更新データを算出する。また、ノード１０−１〜１０−Ｎは、更新データを算出するための数値データである勾配情報を夫々有し、夫々が有する勾配情報を用いてAllreduce処理を実行して更新データを算出する。以下の説明では、ノード１０−１〜１０−Ｎの夫々を区別しない場合、「ノード１０」とも呼ぶ場合もある。
【００１８】
次に、ノード１０によるAllreduce処理を、図２と共に説明する。図２は、ノードの機能構成の一例を示すブロック図である。この例では、Allreduce処理における演算として、平均化を行う場合を例に説明する。ただし、Allreduce処理における演算は、他の演算でも良く、例えば、加算、乗算、最大値の取得及び最小値の取得等でも良い。
【００１９】
図２に示すように、ノード１０−１は、番号割当部１０１、実行処理判定部１０２、通常集約処理実行部１０３、組分集約処理実行部１０４、データ送信部１０５、データ受信部１０６及びデータ格納部１０７を有する。ノード１０−２〜１０−Ｎは、ノード１０−１と同じ構成を有するので、ノード１０−２〜１０−Ｎの構成の図示及び説明は省略する。なお、各ノード１０−１〜１０−Ｎは、上述の如くＤＬにおける様々な処理を実行するが、図２では便宜上、Allreduce処理を行う機能について記載し、他の機能の図示及び説明は省略する。
【００２０】
データ格納部１０７は、勾配情報を格納する。更に、データ格納部１０７は、更新データを算出する際の途中の演算結果及び更新データ等を格納する。
【００２１】
番号割当部１０１は、例えばメッセージ・パッシング・インタフェース（ＭＰＩ：Message  Passing  Interface）関数を用いて、図３に示すような互いに通信可能なプロセス群のグループであるコミュニケータ２を生成する。図３は、番号割当部によるＭＰＩ処理をＮ＝４の場合について説明する図である。各ノード１０−１〜１０−４は、夫々がプロセスを実行するので、コミュニケータ２は、図３に示すようにノード１０−１〜１０−４のグループと考えることもできる。コミュニケータ２に含まれる各ノード１０−１〜１０−４は、夫々がコミュニケータ２の情報を保持する。また、この例では、各ノード１０−１〜１０−４が１つのプロセスを実行する場合を例に説明する。
【００２２】
番号割当部１０１は、ＭＰＩ関数を実行してコミュニケータ２に属するプロセスの数、即ち、この例ではノード１０の台数Ｎであるサイズ（Size）を取得する。この例では、ノード１０−１〜１０−４がコミュニケータ２に含まれるので、番号割当部１０１は、サイズとして「４」を取得する。更に、番号割当部１０１は、ＭＰＩ関数を実行して、コミュニケータ２に属する各プロセスに、識別番号であるランク（Rank）を設定する。ランクは、この例では「０」から順にコミュニケータ２に属する全プロセスの数から「１」を減算した値が割り当てられる。この例では、各ノード１０−１〜１０−４は１つのプロセスを実行するので、ランクは、各ノード１０−１〜１０−４に割り振られた番号とも言える。番号割当部１０１は、ノード１０−１のランクを「０」とし、ノード１０−２のランクを「１」とし、ノード１０−３のランクを「２」とし、ノード１０−４のランクを「３」とする。その後、番号割当部１０１は、サイズ及び各ノード１０−１〜１０−４に割り当てたランクの情報を、実行処理判定部１０２へ出力する。
【００２３】
図２の説明に戻ると、実行処理判定部１０２は、コミュニケータ２のサイズ及び各ノード１０に割り当てられたランクの情報の入力を番号割当部１０１から受ける。また、実行処理判定部１０２は、Allreduce処理の対象の数が「２」のべき乗であるか否かを判定する。Allreduce処理の対象の数は、コミュニケータ２に属するノード１０が実行するプロセスの数の合計である。この例では、各ノード１０が１つのプロセスを実行し、Allreduce処理の対象の数は、コミュニケータ２に含まれるノード１０の台数であり、コミュニケータ２のサイズと一致する。
【００２４】
ノード１０の台数が「２」のべき乗でない場合、実行処理判定部１０２は、通常の全ノード平均化処理を実行することを決定する。通常の全ノード平均化処理とは、例えば全てのノード１０の勾配情報を１台のノード１０に集めて勾配情報の総和を求め、各ノード１０へ配布した後に、各ノード１０が勾配情報の総和をノード１０の台数で除算することで平均値を求める処理である。この場合、実行処理判定部１０２は、Allreduce処理の実行を通常集約処理実行部１０３に指示する。また、実行処理判定部１０２は、サイズの情報及び各ノード１０のランクの情報を、通常集約処理実行部１０３へ送信する。
【００２５】
これに対して、ノード１０の台数が「２」のべき乗の場合、実行処理判定部１０２は、２組平均を用いた全ノード平均化処理を実行することを決定する。この例では、ノード１０の台数は４台なので、ノード１０の台数は「２」の２乗であり、実行処理判定部１０２は、２組平均を用いた全ノード平均化処理を実行することを決定する。２組平均を用いた全ノード平均化処理とは、この例では、勾配情報又は勾配情報を用いた演算結果を保持するノード１０を２台ずつ組にして、組にした２台のノードが保持する値の平均値の算出を繰返す処理である。２組平均を用いた全ノード平均化処理の詳細及び各例については、後述する。この場合、実行処理判定部１０２は、Allreduce処理の実行を組分集約処理実行部１０４に指示する。また、実行処理判定部１０２は、サイズの情報及び各ノード１０のランクの情報を通常集約処理実行部１０３へ送信する。
【００２６】
通常集約処理実行部１０３は、ノード１０の台数が「２」のべき乗でない場合、Allreduce処理の実行の指示を実行処理判定部１０２から受ける。また、通常集約処理実行部１０３は、コミュニケータ２に属するノード１０の中で勾配情報を集約する集約ノードを、ランクを基に決定する。
【００２７】
自ノード１０が集約ノードでない場合、データ格納部１０７に格納された勾配情報の集約ノードへの送信をデータ送信部１０５に行わせる。その後、通常集約処理実行部１０３は、勾配係数の総和の入力をデータ受信部１０６から受ける。また、通常集約処理実行部１０３は、勾配係数の総和をサイズで除算して平均値を算出し、算出した平均値をデータ格納部１０７に格納する。
【００２８】
一方、自ノード１０が集約ノードの場合、通常集約処理実行部１０３は、他のノード１０から送られてきた勾配情報の入力をデータ受信部１０６から受ける。また、通常集約処理実行部１０３は、勾配情報の総和を求め、求めた総和の各ノード１０への送信をデータ送信部１０５に行わせる。その後、通常集約処理実行部１０３は、勾配係数の総和をサイズで除算して平均値を算出し、算出した平均値をデータ格納部１０７に格納する。
【００２９】
組分集約処理実行部１０４は、ノード１０の台数が「２」のべき乗の場合、Allreduce処理の実行の指示を実行処理判定部１０２から受ける。組分集約処理実行部１０４は、繰り返し回数を表すｉを初期化してｉ＝０とする。組分集約処理実行部１０４は、ｊを０以上の整数として、ランクが２ｊと２ｊ＋１となるノード１０を組とする。即ち、組分集約処理実行部１０４は、自ノード１０のランクが２ｊであれば、ランクが２ｊ＋１のノード１０と自ノード１０が組になると判定する。また、自ノード１０のランクが２ｊ＋１であれば、組分集約処理実行部１０４は、ランクが２ｊのノード１０と自ノード１０が組になると判定する。ランクが２ｊ＋１のノード１０の組分集約処理実行部１０４は、組となったランクが２ｊのノード１０へデータ格納部１０７に格納された勾配情報を送信する。
【００３０】
一方、ランクが２ｊのノード１０の組分集約処理実行部１０４は、組となったランクが２ｊ＋１のノード１０から勾配情報を受信する。次に、組分集約処理実行部１０４は、自ノード１０のデータ格納部１０７に格納された勾配情報と受信した勾配情報との平均値を算出する。また、組分集約処理実行部１０４は、演算結果をデータ格納部１０７に格納する。
【００３１】
次に、組分集約処理実行部１０４は、ｉを１つインクリメントして、サイズを「２」のｎ乗と表した場合にｉがｎに達したか否かを判定する。ここで、ｎは１以上の自然数である。ｉがｎに達していなければ、組分集約処理実行部１０４は、勾配情報の平均値を算出したノード１０、即ちランクが２ｊのノード１０にランクの低い順に連番で０から番号を割り当てる。また、組分集約処理実行部１０４は、ｊを０以上の整数として、割り当て番号が２ｊと２ｊ＋１となるノード１０を組とする。
【００３２】
割り当て番号が２ｊのノード１０の組分集約処理実行部１０４は、割り当て番号が２ｊ＋１のノード１０から演算結果を受信する。次に、組分集約処理実行部１０４は、自ノード１０のデータ格納部１０７に格納された演算結果と受信した演算結果との平均値を算出する。また、組分集約処理実行部１０４は、演算結果をデータ格納部１０７に格納する。
【００３３】
以下、ｉがｎに達するまで、組分集約処理実行部１０４は、番号の割り当て、割り当て番号が２ｊのノード１０から割り当て番号が２ｊ＋１のノード１０へのデータ送信、及び演算結果の平均値の算出を繰返す。
【００３４】
ｉがｎに達した場合、自ノード１０以外には平均値の算出結果を持たないので、組分集約処理実行部１０４は、自ノード１０のデータ格納部１０７に格納された演算結果が全ての勾配情報の平均値であると判定する。組分集約処理実行部１０４は、データ格納部１０７に格納された全ての勾配情報の平均値の各ノード１０への送信をデータ送信部１０５に指示する。このように、ｉは、既に行った２台のノード１０の平均化処理の繰り返し回数であり、サイズを「２」のべき乗として表した場合の乗数に繰り返し回数が達すると、全てのノード１０が有する勾配情報の平均値が求められたことになる。
【００３５】
次に、ノード１０−１〜１０−４を使用した場合の勾配情報の集約処理の流れを、図４と共に説明する。図４は、勾配情報の集約処理の一例を説明する図である。ここでは、ｉと各ノード１０−１〜１０−４のランク又は割り当て番号とを、Ｗの添え字として並べて、勾配情報の集約処理の各段階における各ノード１０−１〜１０−４を表す。ノードＷｉｊと表した場合、ｉ回目（ｉは０以上の整数）の２台のノード１０の平均化処理において演算結果を有するノード１０のうち、ランク番号が低い方からｊ番目（ｊは０以上の整数）のノード１０を表す。また、図４において、２台のノード１０の平均化処理において、勾配情報を他のノード１０に送信したノード１０は、除外する。
【００３６】
図４に示すように、ｉ＝０回目の２台のノード１０の平均化処理において、ノード１０−１〜１０−４は、ノードＷ００、ノードＷ０１，ノードＷ０２、ノードＷ０３と表される。ノード１０−１は、ランクが０＝２ｊ（ｊ＝０）であるので、ランクが１＝２ｊ＋１（ｊ＝０）であるノード１０−２と組になる。また、ノード１０−３は、ランクが２＝２ｊ（ｊ＝１）であるので、ランクが１＝２ｊ＋１（ｊ＝１）であるノード１０−４と組になる。
【００３７】
ノード１０−２の勾配情報は、ノード１０−１へ送信され、ノード１０−１は、ノード１０−１の勾配情報とノード１０−２の勾配情報との平均値を算出する。また、ノード１０−４の勾配情報はノード１０−３へ送信され、ノード１０−３は、ノード１０−３の勾配情報とノード１０−４の勾配情報との平均値を算出する。
【００３８】
ｉ＝１回目の２台のノード１０の平均化処理において、ノード１０−１はノードＷ１０と表され、ノード１０−３はノードＷ１１と表される。ノード１０−１は割り当て番号が０＝２ｊ（ｊ＝０）であり、ノード１０−４は割り当て番号が１＝２ｊ＋１（ｊ＝０）であるので、ノード１０−３が演算結果の送り側となる。
【００３９】
そこで、ノード１０−３は、保持する演算結果をノード１０−１へ送信する。ノード１０−１は、ノード１０−１が保持する演算結果とノード１０−２が保持する演算結果との平均値を算出する。
【００４０】
ｉ＝２回目の２台のノード１０の平均化処理において、ノード１０−１はノードＷ２０と表される。この例では、コミュニケータ２のサイズは「４」であり、この時点でｉはコミュニケータ２のサイズを「２」のべき乗で表した場合の乗数に達する。このため、ノード１０−１は、２組平均を用いた全ノード平均化処理の完了を確定する。
【００４１】
図２の説明に戻ると、データ送信部１０５は、通常集約処理実行部１０３又は組分集約処理実行部１０４からデータ送信の指示を受ける。データ送信部１０５は、指示で指定された宛先のノード１０へ指定されたデータを送信する。
【００４２】
データ受信部１０６は、他のノード１０から演算結果の入力を受ける。また、データ受信部１０６は、受信したデータを宛先である通常集約処理実行部１０３又は組分集約処理実行部１０４へ出力する。
【００４３】
このように、本実施例における組分集約処理実行部１０４が２台のノード１０の平均化処理を実行するには、以下の３つの条件を満たすことが好ましい。第１の条件は、Allreduce処理の対象の数が「２」のべき乗であるという条件である。第２の条件は、平均化する値が、「２」の補数表現か符号無しであるという条件である。第３の条件は、演算順序がバリナリツリーを構成するという条件である。
【００４４】
本実施例における組分集約処理実行部１０４は、自ノード１０が有する勾配情報及び演算結果を用いた平均化処理の実行をパイプライン化することで、２組平均を用いた全ノード平均化処理の実行を高速化することができる。次に、組分集約処理実行部１０４における平均化処理のパイプライン化について、図５と共に説明する。図５は、平均化処理のパイプライン化を説明する図である。この例では、ノード１０−１が、ノード１０−２から勾配情報を受信して平均値を算出する場合を説明する。
【００４５】
図５において、バッファ１１１は、ノード１０−１のデータ格納部１０７が有する、受信したデータ及び演算結果を格納する記憶領域である。また、バッファ１１２は、ノード１０−１のデータ格納部１０７が有する、受信したデータの一時格納領域である。更に、バッファ１１３は、ノード１０−２のデータ格納部１０７が有する、送信するデータの格納領域である。即ち、バッファ１１１に格納された配列データは、ノード１０−１が有する勾配情報の一例である。また、バッファ１１３に格納された配列データは、ノード１０−２が有する勾配情報の一例である。ノード１０−１とノード１０−２との勾配情報の平均値を求める場合、ノード１０−２は、配列データの部分データをノード１０−１へ送信する。ノード１０−１は、受信した配列データの部分データに対応する自己が有する配列データの部分データとの間の平均値を求めることを繰り返すことで、配列データ全体の平均値を取得する。
【００４６】
第１段階で、ノード１０−１は、バッファ１１３の領域２０２に格納された部分データを受信し、バッファ１１２の領域２０３に格納する。
【００４７】
次の第２段階で、ノード１０−１は、バッファ１１１の領域２０１に格納された部分データとバッファ１１２の領域２０３に格納された部分データの平均値２０４を算出し、バッファ１１１の領域２０１に格納する。この処理と並行して、ノード１０−１は、バッファ１１３の領域２０６に格納された部分データを受信し、バッファ１１２の領域２０７に格納する。
【００４８】
次の第３段階で、ノード１０−１は、バッファ１１１の領域２０５に格納された部分データとバッファ１１２の領域２０７に格納された部分データの平均値２０８を算出し、バッファ１１１の領域２０５に格納する。この処理と並行して、ノード１０−１は、バッファ１１３の領域２１０に格納された部分データを受信し、バッファ１１２の領域２１１に格納する。
【００４９】
その後、ノード１０−１は、勾配情報である配列データにおける部分データの平均化処理を並列して繰り返し、配列データ全体の平均値の算出を完了する。このように、勾配情報である配列データにおける部分データの平均化処理をパイプライン化して繰り返すことで、組分集約処理実行部１０４は、２組平均を用いた全ノード平均化処理の実行を高速化することができる。
【００５０】
更に、組分集約処理実行部１０４は、２台のノード１０が保持する値の平均値を算出する際に、以下の演算を実行することでオーバーフローの発生を回避する。組分集約処理実行部１０４による２台のノード１０が保持する値の平均値の算出を、図６と共に説明する。図６は、２台のノードの保持データの平均値の算出方法を説明する図である。
【００５１】
受信側のノード１０が保持する値がｘ０、送信側のノード１０が有する値がｘ１である場合、組分集約処理実行部１０４は、ｘ０とｘ１との論理積を求めて第１値を算出する。更に、組分集約処理実行部１０４は、ｘ０とｘ１との排他的論理和を求めて１ビットの右シフトを行い、第２値を算出する。１ビットの右シフトでは、組分集約処理実行部１０４は、シフト後の値に先頭のビットに０を付加する。１ビットの右シフトは、「２」で除算することに相当する。組分集約処理実行部１０４は、第１値と第２値とを加算することで、ｘ０とｘ１との平均値を算出する。
【００５２】
即ち、論理積を「＆」で表し、排他的論理和を「＾」で表し、１ビットの右シフトの演算を「＞＞１」で表した場合、組分集約処理実行部１０４は、（ｘ０＆ｘ１）＋（（ｘ０＾ｘ１）＞＞１）で表される演算を実行することで、ｘ０とｘ１との平均値を求める。この演算方法は、ビット毎に分けて平均値を演算して後に加算する方法であり、負の無限大への丸めを用いた端数切捨て方式である。
【００５３】
ｘ０とｘ１とでビット値が同一の場合は、次の原理で平均値が求まる。先ず、ビット値が同一となるビットをｘ０＆ｘ１で抽出する。この場合、ビット値が同一なので、ｘ０＆ｘ１がそのまま平均値となる。これに対して、ｘ０とｘ１とでビット値が異なる場合は、次の原理で平均値が求まる。先ず、ビット値が異なるビットをｘ０＾ｘ１により抽出する。また、ビット値が異なるので、「２」で除算する演算をシフト演算化して（ｘ０＾ｘ１）＞＞１とすることで、ビット値が異なるビットの平均値を求めることができる。
【００５４】
例えば、ｘ０＝１１００１１００であり、ｘ１＝１０１０１０１０の場合について、具体例を説明する。この場合、ｘ０とｘ１とを単に加算して「２」で除算した場合、加算時に桁の繰り上がりが発生し、８ビットのデータ領域からのオーバーフローが発生する。
【００５５】
これに対して、本実施例における組分集約処理実行部１０４は、演算２２１によりｘ０とｘ１との論理積を算出する。この場合、組分集約処理実行部１０４は、演算２２１の結果である第１値として「１０００１０００」を取得する。演算２２１では、オーバーフローは発生しない。
【００５６】
また、組分集約処理実行部１０４は、演算２２２によりｘ０とｘ１との排他的論理和を求め、演算２２３により１ビットの右シフトを行う。この場合、組分集約処理実行部１０４は、演算２２２の結果である第２値として「０１１００１１０」を取得する。演算２２２でも、オーバーフローは発生しない。
【００５７】
組分集約処理実行部１０４は、演算２２４により第１値と第２値との加算値を算出する。これにより、組分集約処理実行部１０４は、演算結果として「１０１１１１０１１」を得る。この場合、第２値の最上位の桁は０であるので、加算によりオーバーフローが発生することはない。算出された値は、前述した０とｘ１とを単に加算して「２」で除算することで、算出したｘ０とｘ１との平均値と一致する。即ち、組分集約処理実行部１０４は、この演算によりｘ０とｘ１との平均値を算出できる。このように、組分集約処理実行部１０４は、オーバーフローを発生させずに、ｘ０とｘ１との平均値を算出することができる。
【００５８】
次に、一実施例における並列計算機１によるAllreduce処理を、図７と共に説明する。図７は、一実施例における並列計算機によるAllreduce処理を説明するフローチャートである。以下の説明では、ノード１０が保持する勾配情報及び演算結果をまとめて「保持データ」と呼ぶ場合がある。
【００５９】
図８は、ノードのハードウェア構成の一例を示すブロック図である。図８に示すノード１０は、ＣＰＵ（Central  Processing  Unit）２１、メモリ２２及び通信装置２３を有する。ＣＰＵ２１は、演算を実行すると共に、ノード１０全体の制御を司るプロセッサの一例である。ＣＰＵ２１は、メモリ２２に記憶されたプログラムを実行し、図２に示す各部１０１〜１０４の機能を実現できる。つまり、ＣＰＵ２１は、図７に示すAllreduce処理を実行することができる。
【００６０】
メモリ２２は、プログラム、データ等を記憶する記憶装置の一例であり、図２に示すデータ格納部１０７を形成可能である。メモリ２２は、可搬型記録媒体、半導体記憶装置、磁気記録媒体、光記録媒体、光磁気記録媒体等のコンピュータ読取可能な記録媒体により形成可能である。可搬型記録媒体は、ＵＳＢ（Universal  Serial  Bus）メモリ等を含む。半導体記憶装置は、フラッシュメモリ等を含む。光記録媒体は、ＣＤ−ＲＯＭ（Compact  Disk-Read  Only  Memory）、ＤＶＤディスク（Digital  Versatile  Disk）等を含む。なお、メモリ２２にディスク等の磁気記録媒体、光記録媒体又は光磁気記録媒体を用いる場合、記録媒体は、ディスクドライブ等のドライブにロードされ、ドライブによりプログラム等を記録媒体から読み出し、必要に応じて記録媒体にデータ等を書き込む。
【００６１】
通信装置２３は、ノード１０をネットワーク５へ接続可能な送受信装置の一例であり、図２に示すデータ送信部１０５及びデータ受信部１０６を形成可能である。
【００６２】
なお、ノード１０のハードウェア構成は、図８に示す構成に限定されないことは、言うまでもない。
【００６３】
図７のAllreduce処理が開始されると、番号割当部１０１は、ＭＰＩ処理を行い、コミュニケータ２を生成し、生成したコミュニケータ２のサイズ及びコミュニケータ２に属する各ノード１０にランクを割り当てる（ステップＳ１）。その後、番号割当部１０１は、コミュニケータ２のサイズの情報及びランクの情報を実行処理判定部１０２へ出力する。
【００６４】
実行処理判定部１０２は、コミュニケータ２のサイズの情報及びランクの情報の入力を番号割当部１０１から受ける。また、実行処理判定部１０２は、コミュニケータ２のサイズを、Allreduce処理で対象とするノード１０の台数Ｎである対象数Ｎとする。実行処理判定部１０２は、対象数Ｎが「２」のｎ乗と表すことができるか否か、即ち、Ｎ＝２ｎである否かを判定する（ステップＳ２）。
【００６５】
対象数Ｎが「２」のｎ乗と表すことができる場合（ステップＳ２でＹｅｓ）、実行処理判定部１０２は、Allreduce処理の実行を組分集約処理実行部１０４に依頼する。組分集約処理実行部１０４は、Allreduce処理の実行の依頼を受けて、ｉを初期化して０とする（ステップＳ３）。
【００６６】
次に、組分集約処理実行部１０４は、ｊを初期化して０とする（ステップＳ４）。
【００６７】
次に、組分集約処理実行部１０４は、保持データを他のノード１０へ送信していないノード１０のランクの低い側から割り当て番号として０から連番で順に番号を割り当てる。割り当て番号が２ｊ＋１と表されるノード１０の組分集約処理実行部１０４は、自ノード１０の保持データを割り当て番号が２ｊと表されるノード１０へ送信する。一方、割り当て番号が２ｊと表されるノード１０は、自ノード１０の保持データと受信した保持データとの平均値を算出する。ここで、ｉ回目の２台のノード１０の平均化処理における、割り当て番号が２ｊと表されるノード１０の保持データをＷｉ（２ｊ），割り当て番号が２ｊ＋１と表されるノード１０の保持データをＷｉ（２ｊ＋１）と表す。また、ｉ＋１回目の２台のノード１０の平均化処理における、ランクが低い側からｊ番目のノード１０の保持データをＷ（ｉ＋１）ｊと表す。この場合、ｉ回目の処理における割り当て番号が２ｊと表されるノード１０が、ｉ＋１回目の処理におけるｊ番目のノード１０となり、その組分集約処理実行部１０４は、Ｗ（ｉ＋１）ｊ＝（１／２）・（Ｗｉ（２ｊ）＋Ｗｉ（２ｊ＋１））で表される演算を行う（ステップＳ５）。
【００６８】
組分集約処理実行部１０４は、ｊがＮを「２」のべき乗で表した場合の乗数に達したか否か、即ちｊ＜Ｎ／２ｉ−１であるか否かを判定する（ステップＳ６）。ｊ＜Ｎ／２ｉ−１の場合（ステップＳ６でＹｅｓ）、組分集約処理実行部１０４は、ｊを１つインクリメントして（ステップＳ７）、処理をステップＳ５へ戻す。
【００６９】
これに対して、ｊ＜Ｎ／２ｉ−１でない場合（ステップＳ６でＮｏ）、組分集約処理実行部１０４は、同期処理を実行する（ステップＳ８）。同期処理とは、ｉ回目の全ての割り当て番号が２ｊのノード１０における平均化処理が終わるまで待機する処理である。
【００７０】
次に、組分集約処理実行部１０４は、ｉを１つインクリメントする（ステップＳ９）。
【００７１】
次に、組分集約処理実行部１０４は、ｉがコミュニケータ２のサイズを「２」のべき乗として表した場合の乗数に達したか否か、即ちｉ＜ｎであるか否かを判定する（ステップＳ１０）。ｉ＜ｎの場合（ステップＳ１０でＹｅｓ）、組分集約処理実行部１０４は、処理をステップＳ４へ戻す。
【００７２】
これに対して、ｉ＜ｎでない場合（ステップＳ１０でＮｏ）、組分集約処理実行部１０４は、全てのノード１０が有する勾配情報の平均値であるＡｖがＷｉ０であると決定し（ステップＳ１１）、処理は終了する。
【００７３】
一方、対象数Ｎが「２」のｎ乗と表すことができない場合（ステップＳ２でＮｏ）、実行処理判定部１０２は、Allreduce処理の実行を通常集約処理実行部１０３に依頼する。通常集約処理実行部１０３は、Allreduce処理の実行の依頼を受けて、例えば次式（１）に従った通常の全ノード平均化処理を実行し（ステップＳ１２）、処理は終了する。
【００７４】
【数１】
2020190894.tif 000003
【００７５】
このように、本実施例における並列計算機１は、対象数Ｎが「２」のｎ乗と表すことができる場合、ノードを２台ずつ組にしたAllreduce処理の演算を繰り返すことで、全てのノードのAllreduce処理を実行する。これにより、並列計算機１は演算誤差を軽減し且つデータ転送量を抑えることでき、演算精度を犠牲にすることなくスループットを向上させることが可能となる。また、並列計算機１は、論理積と排他的論理和を用いた演算により２つの値の平均値を求めることで、オーバーフローの発生を起こすことなく全ノードの平均化処理を実行することができる。更に、ノード間通信やバッファからのデータの読み出し及び書き込みの処理に比べて、平均化演算は極めて短時間で終了する。並列計算機１は、平均化処理におけるデータ通信並びに、バッファからのデータの読み出し及び書き込みの処理をパイプライン化することにより、処理時間をオーバラップさせて隠蔽することができる。これにより、並列計算機１は、平均化処理の回数の増加による性能劣化を抑えることができる。
【００７６】
なお、通常集約処理実行部１０３は、ステップＳ１２において、Allreduce処理の実行の依頼を受けて、例えば次式（２）に従った通常の全ノード平均化処理を実行しても良い。ここで、ｐは２ｐ−１＜Ｎ＜２ｐを満たす自然数である。
【００７７】
【数２】
2020190894.tif 000004
【００７８】
上記の式（２）の一番右側の数式表現において、ｘｉ／２ｐの項は、各ノード１０が保持する値をｐ回「２」で除算した商である。また、Σの項は、前記ｘｉ／２ｐの項をｉ＝１からｉ＝Ｎ−１について加算した値である。更に、２ｐ／Ｎの項は、Ｎ，ｐによって一意に決まる「１」以上、且つ「２」未満の値である。つまり、偶数時は２つずつ平均を取り、奇数時は１つだけ「２」で除算して他は２つずつ平均する処理を繰り返していき、最後に固定値２ｐ／Ｎを乗算する。
【００７９】
このようにして、実際のノードにダミーノードを加えるか、或いは、実際のノードから「２」のべき乗のノードを選び出し、平均操作の対象となるノードの台数Ｎが「２」のべき乗となるようにする。また、ダミーノードは、実際のノードの中に分散して作成し、特定のノードへの負荷の集中を避ける。
【００８０】
ところが、ノードを数える順番を固定すると、場合によっては、特定のノードが保持する値だけが偏って「２」で除算され続け、商が非常に小さくなるか、或いは、０になる可能性がある。図９は、ノードを数える順番を固定した場合の一例を説明する図である。図９は、ノード１０の台数が１７台の例を示し、「ノードの番号」の行はノード１０に割り振られたノード１０の番号「０」〜「１７」を示す。上記の如く、各ノード１０が１つのプロセスを実行する場合、ノード１０に割り振られた番号と、当該ノード１０が実行するプロセスに割り当てられたランクとは、同じである。「１回目平均」〜「５回目平均」の各行において、番号「０」,．．．は２つのノード１０が保持する値の平均演算を行う箇所の順番を示す。又、各行において、梨地で囲んで示す番号は、１つのノード１０が保持する値を「２」で除算（即ち、１／２演算）する箇所を示す。
【００８１】
図９の１回目平均では、番号「０」の箇所で番号「０」,「１」のノード１０の平均演算を行い、．．．、番号「７」の箇所で番号「１４」,「１５」のノード１０の平均演算を行い、梨地で囲んで示す番号「８」の箇所で番号「１６」のノード１０が保持する値に１／２演算を行う。２回目平均では、番号「０」の箇所で１回目平均の番号「０」,「１」の箇所で得た値の平均演算を行い、．．．、番号「３」の箇所で１回目平均の番号「６」,「７」の箇所で得た値の平均演算を行う。また、２回目平均では、梨地で囲んで示す番号「４」の箇所で１回目平均の番号「８」の値に１／２演算を行う。３回目平均では、番号「０」の箇所で２回目平均の番号「０」,「１」の箇所で得た値の平均演算を行い、番号「１」の箇所で２回目平均の番号「２」,「３」の箇所で得た値の平均演算を行う。また、３回目平均では、梨地で囲んで示す番号「２」の箇所で２回目平均の番号「４」の値に１／２演算を行う。４回目平均では、番号「０」の箇所で３回目平均の番号「０」,「１」の箇所で得た値の平均演算を行い、梨地で囲んで示す番号「１」の箇所で３回目平均の番号「２」の値に１／２演算を行う。５回目平均では、番号「０」の箇所で４回目平均の番号「０」箇所で得た値と、４回目平均の番号「１」の箇所で得た値の平均演算を行う。
【００８２】
つまり、この例では、上記の式（２）が次のようになる。
【００８３】
【数３】
2020190894.tif 000005
【００８４】
なお、ノードを数える順番を固定した場合に起こる上記の如き現象は、ノードを数える順番をランダムにした場合でも起こり得る。
【００８５】
そこで、ノードを数える順番を変動させる場合について説明する。図１０は、ノードを数える順番を変動させる一例を説明する図である。図１０は、ノード１０の台数が１７台の例を示し、「ノードの番号」の行はノード１０に割り振られたノード１０の番号「０」〜「１６」を示す。上記の如く、各ノード１０が１つのプロセスを実行する場合、ノード１０に割り振られた番号と、当該ノード１０が実行するプロセスに割り当てられたランクとは、同じである。「１回目平均」〜「５回目平均」の各行において、梨地で囲んで示す番号「０」は、「２」で除算（即ち、１／２演算）を行う最初の箇所を示し、番号「０」,「１」,．．．は２つのノード１０が保持する値の平均演算を行う箇所の順番を示す。
【００８６】
図１０の１回目平均では、梨地で囲んで示す番号「０」の箇所で番号「１６」のノード１０が保持する値に１／２演算を行い、番号「１」の箇所で番号「０」,「１」のノード１０の平均演算を行い、．．．、番号「８」の箇所で番号「１４」,「１５」のノード１０の平均演算を行う。２回目平均では、梨地で囲んで示す番号「０」の箇所で１回目平均の番号「８」の値に１／２演算を行う。また、２回目平均では、番号「１」の箇所で１回目平均の番号「０」,「１」の箇所で得た値の平均演算を行い、．．．、番号「４」の箇所で１回目平均の番号「６」,「７」の箇所で得た値の平均演算を行う。３回目平均では、梨地で囲んで示す番号「０」の箇所で２回目平均の番号「４」の値に１／２演算を行う。また、３回目平均では、番号「１」の箇所で２回目平均の番号「０」,「１」の箇所で得た値の平均演算を行い、番号「２」の箇所で２回目平均の番号「２」,「３」の箇所で得た値の平均演算を行う。４回目平均では、梨地で囲んで示す番号「０」の箇所で３回目平均の番号「２」の値に１／２演算を行う。また、４回目平均では、番号「１」の箇所で３回目平均の番号「０」,「１」の箇所で得た値の平均演算を行う。５回目平均では、番号「０」の箇所で４回目平均の番号「０」,「１」の箇所で得た値の平均演算を行う。
【００８７】
図１０に示すように、ノード１０の台数Ｎが奇数の場合、数える最初の順番を固定するのではなく、数えた順番で最後のノード１０の順番を最初として当該ノード１０の値を「２」で除算する。また、演算結果の数が奇数の場合、前回の最後の演算結果の順番を最初として「２」で除算し、前回の最初の演算結果と次の演算結果の平均演算を行い、以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行う。更に、演算結果の数が偶数の場合、前回の最初と次の演算結果の平均演算を行い、以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行う。これにより、最も奇数が多くなるノード１０の台数Ｎが２ｐ＋１＋１の場合でも、「２」で除算する値が重複することをできるだけ避けながら平均化が行われ、「２」で除算する箇所の偏りも抑えることができる。
【００８８】
図１１は、ノードを数える順番を変動させる他の例を説明する図である。図１１は、ノード１０の台数が３１台の例を示し、「ノードの番号」の行はノード１０に割り振られたノード１０の番号「０」〜「３０」を示す。上記の如く、各ノード１０が１つのプロセスを実行する場合、ノード１０に割り振られた番号と、当該ノード１０が実行するプロセスに割り当てられたランクとは、同じである。「１回目平均」〜「５回目平均」の各行において、梨地で囲んで示す番号「０」は、「２」で除算（即ち、１／２演算）を行う最初の箇所を示し、番号「０」,「１」,．．．は２つのノード１０が保持する値の平均演算を行う箇所の順番を示す。
【００８９】
図１１の１回目平均では、梨地で囲んで示す番号「０」の箇所で番号「３０」のノード１０が保持する値に１／２演算を行い、番号「１」の箇所で番号「０」,「１」のノード１０の平均演算を行い、．．．、番号「１５」の箇所で番号「２８」,「２９」のノード１０の平均演算を行う。２回目平均では、番号「０」の箇所で１回目平均の番号「０」,「１」の箇所で得た値の平均演算を行う。また、２回目平均では、番号「１」の箇所で１回目平均の番号「２」,「３」の箇所で得た値の平均演算を行い、．．．、番号「７」の箇所で１回目平均の番号「１４」,「１５」の箇所で得た値の平均演算を行う。３回目平均では、番号「０」の箇所で２回目平均の番号「０」,「１」の箇所で得た値の平均演算を行い、番号「１」の箇所で２回目平均の番号「２」,「３」の箇所で得た値の平均演算を行い。また、３回目平均では、番号「２」の箇所で２回目平均の番号「４」,「５」の箇所で得た値の平均演算を行い、番号「３」の箇所で２回目平均の番号「６」,「７」の箇所で得た値の平均演算を行う。４回目平均では、番号「０」の箇所で３回目平均の番号「０」,「１」の箇所で得た値の平均演算を行い、番号「１」の箇所で３回目平均の番号「２」,「３」の箇所で得た値の平均演算を行う。５回目平均では、番号「０」の箇所で４回目平均の番号「０」,「１」の箇所で得た値の平均演算を行う。
【００９０】
図１１に示すように、例えばノード１０の台数が２ｐ−１の場合は、数えた順番で最後のノード１０の順番を最初として当該ノード１０が保持する値を「２」で除算する箇所が１箇所だけ発生する。つまり、数える最初の順番を固定するのではなく、最後のノード１０の順番を最初として当該ノード１０が保持する値を「２」で除算する。また、前回の最初と次の演算結果の平均演算を行い、以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行う。このため、「２」で除算する値が重複することをできるだけ避けて平均化が行われ、「２」で除算する箇所の偏りも抑えることができる。従って、この例では、上記の式（２）が次のようになる。
【００９１】
【数４】
2020190894.tif 000006
【００９２】
図１２は、通常の全ノード平均化処理の一例を説明するフローチャートである。図１２に示す処理は、図７に示すステップＳ２の判定結果がＮｏである場合に、例えば上記の式（２）に従って、図２に示す通常集約処理実行部１０３により実行される。ここで、ｐは２ｐ−１＜Ｎ＜２ｐを満たす自然数である。また、各ノード１０は、１つのプロセスを実行する場合を例に説明する。更に、平均化する値が、「２」の補数表現か符号無しであるという上記第２の条件を満たすことが前提条件である。
【００９３】
通常集約処理実行部１０３は、数えた順番で、ノード１０にノード１０の番号を「０」〜「Ｎ−１」まで割り振る（ステップＳ１２１）。また、通常集約処理実行部１０３は、ｉ＝０,Ｎ’＝Ｎに設定し（ステップＳ１２２）、ｊ＝０に設定する（ステップＳ１２３）。通常集約処理実行部１０３は、Ｎ’が偶数であるか否かを判定し（ステップＳ１２４）、判定結果がＹｅｓであると処理はステップＳ１２５へ進み、Ｎｏであると処理は後述するステップＳ１４１へ進む。
【００９４】
通常集約処理実行部１０３は、Ｗ（ｉ＋１）ｊ＝（１／２）・（Ｗｉ（２ｊ）＋Ｗｉ（２ｊ＋１））で表される演算を行う（ステップＳ１２５）。通常集約処理実行部１０３は、ｊを１つインクリメントし（ステップＳ１２６）、ｊ＜Ｎ’／２であるか否かを判定する（ステップＳ１２７）。ステップＳ１２７の判定結果がＹｅｓであると処理はステップＳ１２５へ戻り、Ｎｏであると処理はステップＳ１２８へ進む。通常集約処理実行部１０３は、Ｎ’＝Ｎ’／２を演算する（ステップＳ１２８）。
【００９５】
ステップＳ１２８の後、通常集約処理実行部１０３は、同期処理を実行する（ステップＳ１２９）。同期処理とは、ｉ回目の全ての割り当て番号が２ｊのノード１０における平均化処理が終わるまで待機する処理である。ステップＳ１２９の後、通常集約処理実行部１０３は、ｉを１つインクリメントし（ステップＳ１３０）、ｉ＜ｐであるか否かを判定する（ステップＳ１３１）。ステップＳ１３１の判定結果がＹｅｓであると処理はステップＳ１２３へ戻り、Ｎｏであると処理はステップＳ１３２へ進む。通常集約処理実行部１０３は、全てのノード１０が有する勾配情報の平均値であるＡｖがＷｉ０・２ｐ／Ｎであると決定し（ステップＳ１３２）、処理は終了する。
【００９６】
一方、ステップＳ１２４の判定結果がＮｏであると、通常集約処理実行部１０３は、Ｗ（ｉ＋１）０＝（１／２）・（Ｗｉ（Ｎ’−１））で表される演算を行い（ステップＳ１４１）、Ｗ（ｉ＋１）（ｊ＋１）＝（１／２）・（Ｗｉ（２ｊ）＋Ｗｉ（２ｊ＋１））で表される演算を行う（ステップＳ１４３）。通常集約処理実行部１０３は、ｊを１つインクリメントし（ステップＳ１４３）、ｊ＜（Ｎ’／２−１／２）であるか否かを判定する（ステップＳ１４４）。ステップＳ１４４の判定結果がＹｅｓであると処理はステップＳ１４２へ戻り、Ｎｏであると処理はステップＳ１４５へ進む。通常集約処理実行部１０３は、Ｎ’＝Ｎ’／２＋１／２で表される演算を行い（ステップＳ１４５）、処理は上記のステップＳ１２９へ進む。
【００９７】
図１３は、Ｎ＝６，ｐ＝３の場合の図１２の処理を説明する図である。図１３において、ｉ＝０回目（Ｎ’は偶数）の２台のノード１０の平均化処理において、番号「０」〜「５」のノードでは夫々値Ｗ００〜Ｗ０５が求められる。
【００９８】
ｉ＝１回目（Ｎ’は奇数）の２台のノード１０の平均化処理において、番号「０」,「１」のノード１０が保持する値Ｗ００，Ｗ０１から値Ｗ１０＝（１／２）・（Ｗ００＋Ｗ０１）が演算される。また、番号「２」,「３」のノード１０が保持する値Ｗ０２，Ｗ０３から値Ｗ１１＝（１／２）・（Ｗ０２＋Ｗ０３）が演算される。更に、番号「４」,「５」のノード１０が保持する値Ｗ０４，Ｗ０５から値Ｗ１２＝（１／２）・（Ｗ０４＋Ｗ０５）が演算される。
【００９９】
ｉ＝２回目（Ｎ’は偶数）の２台のノード１０の平均化処理において、演算された値Ｗ１０，Ｗ１１から値Ｗ２１＝（１／２）・（Ｗ１０＋Ｗ１１）が演算される。また、演算された値Ｗ１２から値Ｗ２０＝Ｗ１２／２が演算される。
【０１００】
ｉ＝３回目（ｉ＝ｐで終了）の２台のノード１０の平均化処理において、演算された値Ｗ２１，Ｗ２２から値Ｗ３０＝（１／２）・（Ｗ２０＋Ｗ２１）が演算される。
【０１０１】
従って、図１３に示す例では、通常集約処理実行部１０３は、６台の全てのノード１０が有する勾配情報の平均値であるＡｖがＷｉ０・２ｐ／Ｎ＝Ｗ３０・２３／６であると決定する。
【０１０２】
このように、図１２に示す通常の全ノード平均化処理によれば、ノード平均を求めることによる演算精度の劣化を防ぐことができる。また、ノードの台数が「２」のべき乗でない場合、全ノードの平均を求めることでオーバーフローが発生してスループットが低下することを防げる。更に、冗長ビットを確保しなくても、オーバーフローの発生を防げる。このため、オーバーフローの発生に起因するスループットの低下を防げる。この結果、最終データの精度を犠牲にすることなく、全ノードの高スループットな平均化が可能になる。
【０１０３】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
互いに通信可能なＮ台のノードを備え、
各ノードは、演算を実行するプロセッサと、値及び前記値を用いた演算結果を保持するメモリを有し、
Ｎは２以上の自然数であり、ｎは１以上の自然数であり、Ｎ＝２ｎでない場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを２台ずつ組にして、組にした２台のノードが保持する値の平均値の算出を繰返す処理を実行することを特徴とする、演算処理装置。
（付記２）
Ｎ＝２ｐ＋１＋１であり、ｐは２ｐ−１＜Ｎ＜２ｐを満たす自然数である場合、数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、
演算結果の数が奇数の場合、
前回の最後の演算結果の順番を最初として２で除算し、
前回の最初の演算結果と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行い、
演算結果の数が偶数の場合、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行うことを特徴とする、付記１記載の演算処理装置。
（付記３）
Ｎ＝２ｐ−１であり、ｐは２ｐ−１＜Ｎ＜２ｐを満たす自然数である場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行うことを特徴とする、付記１記載の演算処理装置。
（付記４）
各ノードは、Allreduce処理を実行し、次式（２）
【数５】
2020190894.tif 000007
に従った平均化処理を実行することを特徴とする、付記１乃至３のいずれか１項記載の演算処理装置。
（付記５）
Ｎが２ｎである場合、前記値又は前記値を用いた演算結果を保持するノードを２台ずつ組にして、組にした２台のノードが保持する値の平均値の算出を繰返す処理を実行することを特徴とする、付記１乃至４のいずれか１項記載の演算処理装置。
（付記６）
互いに通信可能なＮ台のノードを備えたコンピュータを制御するためのプログラムであって、
Ｎは２以上の自然数であり、ｎは１以上の自然数であり、Ｎ＝２ｎでない場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを２台ずつ組にして、組にした２台のノードが保持する値の平均値の算出を繰返す処理を実行する、
処理を前記コンピュータに実行させることを特徴とする、プログラム。
（付記７）
Ｎ＝２ｐ＋１＋１であり、ｐは２ｐ−１＜Ｎ＜２ｐを満たす自然数である場合、数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、
演算結果の数が奇数の場合、
前回の最後の演算結果の順番を最初として２で除算し、
前回の最初の演算結果と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行い、
演算結果の数が偶数の場合、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行う、
処理を前記コンピュータに実行させることを特徴とする、付記６記載のプログラム。
（付記８）
Ｎ＝２ｐ−１であり、ｐは２ｐ−１＜Ｎ＜２ｐを満たす自然数である場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行う、
処理を前記コンピュータに実行させることを特徴とする、付記６記載のプログラム。
（付記９）
各ノードが、Allreduce処理を実行し、次式（２）
【数６】
2020190894.tif 000008
に従った平均化処理を前記コンピュータに実行させることを特徴とする、付記６乃至８のいずれか１項記載のプログラム。
（付記１０）
Ｎが２ｎである場合、前記値又は前記値を用いた演算結果を保持するノードを２台ずつ組にして、組にした２台のノードが保持する値の平均値の算出を繰返す、
処理を前記コンピュータに実行させることを特徴とする、付記６乃至９のいずれか１項記載のプログラム。
（付記１１）
互いに通信可能なＮ台のノードの夫々が演算を実行し、値及び前記値を用いた演算結果を保持する、演算処理装置の制御方法であって、
Ｎは２以上の自然数であり、ｎは１以上の自然数であり、Ｎ＝２ｎでない場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、残りのノードは数えた順番で、前記値又は前記値を用いた演算結果を保持するノードを２台ずつ組にして、組にした２台のノードが保持する値の平均値の算出を繰返す処理を実行させることを特徴とする、演算処理装置の制御方法。
（付記１２）
Ｎ＝２ｐ＋１＋１であり、ｐは２ｐ−１＜Ｎ＜２ｐを満たす自然数である場合、数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、
演算結果の数が奇数の場合、
前回の最後の演算結果の順番を最初として２で除算し、
前回の最初の演算結果と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行い、
演算結果の数が偶数の場合、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行う、
処理を実行させることを特徴とする、付記１１記載の演算処理装置の制御方法。
（付記１３）
Ｎ＝２ｐ−１であり、ｐは２ｐ−１＜Ｎ＜２ｐを満たす自然数である場合、
数えた順番で最後のノードの順番を最初として当該ノードが保持する値を２で除算し、
前回の最初と次の演算結果の平均演算を行い、
以後は前回の演算結果の順番で連続する２つの演算結果の平均演算を行う、
処理を実行させることを特徴とする、付記１１記載の演算処理装置の制御方法。
（付記１４）
各ノードが、Allreduce処理を実行し、次式（２）
【数７】
2020190894.tif 000009
に従った平均化処理を実行させることを特徴とする、付記１１乃至１３のいずれか１項記載の演算処理装置の制御方法。
（付記１５）
Ｎが２ｎである場合、前記値又は前記値を用いた演算結果を保持するノードを２台ずつ組にして、組にした２台のノードが保持する値の平均値の算出を繰返す、
処理を実行させることを特徴とする、付記１１乃至１４のいずれか１項記載の演算処理装置の制御方法。
【０１０４】
以上、開示の演算処理装置、プログラム、及び演算処理装置の制御方法を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【符号の説明】
【０１０５】
１      並列計算機
２      コミュニケータ
５      ネットワーク
１０，１０−１〜１０−Ｎ      ノード
２１      ＣＰＵ
２２      メモリ
２３      通信装置
１０１      番号割当部
１０２      実行処理判定部
１０３      通常集約処理実行部
１０４      組分集約処理実行部
１０５      データ送信部
１０６      データ受信部
１０７      データ格納部
【図１】
2020190894.tif 000011
【図２】
2020190894.tif 000012
【図３】
2020190894.tif 000013
【図４】
2020190894.tif 000014
【図５】
2020190894.tif 000015
【図６】
2020190894.tif 000016
【図７】
2020190894.tif 000017
【図８】
2020190894.tif 000018
【図９】
2020190894.tif 000019
【図１０】
2020190894.tif 000020
【図１１】
2020190894.tif 000021
【図１２】
2020190894.tif 000022
【図１３】
2020190894.tif 000023