(57)【要約】【課題】演算精度を犠牲にすることなくスループットを向上させる情報処理システム及び情報処理システムの制御方法を提供する。【解決手段】ノード１１は、ネットワーク５を介して、保持する第１のデータを送信する。ノード１２は、ネットワーク５を介して受信した第１のデータと、保持する第２のデータとの演算結果である第１の演算結果データを算出し、算出した第１の演算結果データをネットワーク５を介して送信する。ノード１３は、ネットワーク５を介して、保持する第３のデータを送信する。ノード１４は、ネットワーク５を介して受信した第３のデータと、保持する第４のデータとの演算結果である第２の演算結果データを算出し、ネットワーク５を介して受信した第１の演算結果データと、算出した第２の演算結果データとの演算結果である第３の演算結果データを算出する。【選択図】図１
2020095595.tif 000002
【特許請求の範囲】
【請求項１】
通信経路を介して、保持する第１のデータを送信する第１の情報処理装置と、
前記通信経路を介して受信した前記第１のデータと、保持する第２のデータとの演算結果である第１の演算結果データを算出し、算出した前記第１の演算結果データを前記通信経路を介して送信する第２の情報処理装置と、
前記通信経路を介して、保持する第３のデータを送信する第３の情報処理装置と、
前記通信経路を介して受信した前記第３のデータと、保持する第４のデータとの演算結果である第２の演算結果データを算出し、前記通信経路を介して受信した前記第１の演算結果データと、算出した前記第２の演算結果データとの演算結果である第３の演算結果データを算出する第４の情報処理装置と
を備えたことを特徴とする情報処理システム。
【請求項２】
前記第１乃至第４のデータは、それぞれ、第１乃至第４の数値データであり、
前記第１の演算結果データは、前記第１の数値データと前記第２の数値データとの平均であり、
前記第２の演算結果データは、前記第３の数値データと前記第４の数値データとの平均であり、
前記第３の演算結果データは、前記第１の演算結果データと前記第２の演算結果データとの平均である
ことを特徴とする請求項１に記載の情報処理システム。
【請求項３】
前記第１乃至第４のデータは、それぞれ、第１乃至第４の数値データであり、
前記第１の演算結果データは、前記第１の数値データと前記第２の数値データとの論理積の演算結果である第１の論理積結果データと、前記第１の数値データと前記第２の数値データとの排他的論理和の演算結果である第１の排他的論理和結果データを１ビット右シフトした第１のシフト結果データとの加算結果であり、
前記第２の演算結果データは、前記第３の数値データと前記第４の数値データとの論理積の演算結果である第２の論理積結果データと、前記第３の数値データと前記第４の数値データとの排他的論理和の演算結果である第２の排他的論理和結果データを１ビット右シフトした第２のシフト結果データとの加算結果であり、
前記第３の演算結果データは、前記第１の演算結果データと前記第２の演算結果データとの論理積の演算結果である第３の論理積結果データと、前記第１の演算結果データと前記第２の演算結果データとの排他的論理和の演算結果である第３の排他的論理和結果データを１ビット右シフトした第３のシフト結果データとの加算結果である
ことを特徴とする請求項１又は２に記載の情報処理システム。
【請求項４】
前記第１乃至第３の情報処理装置は、前記第４の情報処理装置が算出した前記第３の演算結果データを取得することを特徴とする請求項１〜３のいずれか一つに記載の情報処理システム。
【請求項５】
前記第１乃至第４の情報処理装置のうちいずれかの特定の情報処理装置が存在しない場合、前記特定の情報処理装置以外の情報処理装置のうちのいずれかが仮想的に生成することを特徴とする請求項１〜４のいずれか一つに記載の情報処理システム。
【請求項６】
前記第１乃至第４の情報処理装置に加えて第５の情報処理装置が存在する場合、前記第１乃至第４の情報処理装置を選択することを特徴とする請求項１〜４のいずれか一つに記載の情報処理システム。
【請求項７】
第１乃至第４の情報処理装置が、通信経路を介して接続される情報処理システムの制御方法であって、
前記第１の情報処理装置が、前記通信経路を介して、保持する第１のデータを送信し、
前記第２の情報処理装置が、前記通信経路を介して受信した前記第１のデータと、保持する第２のデータとの演算結果である第１の演算結果データを算出し、算出した前記第１の演算結果データを、前記通信経路を介して送信し、
前記第３の情報処理装置が、前記通信経路を介して、保持する第３のデータを送信し、
前記第４の情報処理装置が、前記通信経路を介して受信した前記第３のデータと、保持する第４のデータとの演算結果である第２の演算結果データを算出し、前記通信経路を介して受信した前記第１の演算結果データと、算出した前記第２の演算結果データとの演算結果である第３の演算結果データを算出する
ことを特徴とする情報処理システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム及び情報処理システムの制御方法に関する。
【背景技術】
【０００２】
近年、様々な分野でＨＰＣ（High  Performance  Computing）、データサイエンス、機械学習及び深層学習（ＤＬ：Deep  Learning）などが盛んに取り入れられている。これらの手法では、莫大な量の計算が行われる。そのため、これらの手法を用いた場合、単一のプロセッサでデータを処理することが困難である。そこで、データを大量のプロセッサに分割して割り当て、並列に計算させることで高速化を図る並列計算機の導入が盛んになっている。並列計算機では、プロセッサ間でデータ通信を行わせるために、プロセッサとメモリをまとめてノードとして、ノード同士をネットワークで接続する。
【０００３】
例えば、深層学習を行う場合、並列計算機には複数のニューロン層が用意される。そして、各ニューロン層に亘って、入力から出力を得るフォワード、出力と正解とを比較し差分を取得するバックワード及び差分を用いて各ニューロン層で用いられるパラメータを更新するアップデートが繰り返し行われる。これにより、各ニューロン層で用いられるパラメータの適切な値を取得するパラメータの最適化が行われる。バックワード処理で求められる差分は、画像認識などにおいて微分係数などで表される場合には勾配情報と呼ばれる場合がある。
【０００４】
パラメータの最適化において、ニューロン層毎にバックワードにより各ノードで取得された差分を集約し、所定の演算により更新用データを求め、各ノードに配布するＡｌｌｒｅｄｕｃｅ処理と呼ばれる処理が行われる。Ａｌｌｒｅｄｕｃｅ処理としては、例えば、全てのノードが有する勾配情報を加算し、各ノードに加算値が分配される。その後、各ノードにおいて加算値をノード数で除算し平均を取ることで更新用データが求められる。
【０００５】
ここで、深層学習では、３２ビットや６４ビットの浮動小数点演算が用いられるＨＰＣの計算とは異なり、精度が多少低くとも、最終結果に差がほとんどでないことが知られている。そこで、モデルパラメータを低ビット整数で表して、ノード間のデータ通信量を削減することが行われる。例えば、最新のＧＰＵ（Graphics  Processing  Unit）では、１６ビットの半精度浮動小数点演算をサポートし、３２ビット浮動小数点演算に比べて２倍以上のスループットが得られる。さらに、固定小数点数である低ビット整数を用いてさらにスループットを向上させる技術も存在する。
【０００６】
集団通信で平均値を求める技術として、通信性能レベルに基づいてプロセッサをグループ化し、通信性能レベル毎にグループ内のルートプロセッサを決定して、グループ内におけるバイナリツリーでの収集及び拡散を繰返す従来技術がある。また、並列計算において、処理の前半でブロードキャストを行い、後半でコンビネーションを行うことで平均値を求める従来技術がある。また、２項平均値を計算する演算回路において、２の補数表現で整数を加算してシフトし、最上位桁で値が誤る場合に２段の排他的論理和回路で補正を加える従来技術がある。さらに、２進入力データの平均値演算を、外部でデータを加算して右シフトした平均値の結果を入力することで、入力データの演算を軽くする従来技術がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１１−１３４３１１号公報
【特許文献２】特開平９−８１５３０号公報
【特許文献３】特開昭６３−２５９７６７号公報
【特許文献４】特開平４−１１４２３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、例えば、４つのノードを用いる構成で勾配情報が８ビットで値であっても、上述したＡｌｌｒｅｄｕｃｅ処理の途中で１０ビット分のレジスタを使用することになる場合がある。この場合、結局１６ビット表現での演算を行うこととなりスループットが半分に減少してしまう。さらに、ノード数が増加しノード数が５１２になると、和が１７ビットとなる場合もあり、その場合には３２ビット表現での演算を行うことになるため、スループットは１／４に減少する。
【０００９】
そこで、オーバーフローを抑えるために、加算前に予めノード数で各ノードが有する勾配情報を除算する方法が考えられる。しかし、この方法では、オーバーフローの発生は軽減されるが、ノード数が多い場合、商が非常に小さくなるかもしくは０となり、加算時に誤差が発生し計算の精度が劣化する。
【００１０】
また、通信性能レベルに基づいてプロセッサをグループ化して集団通信を行う従来技術では、Ａｌｌｒｅｄｕｃｅ処理におけるオーバーフローの回避及び計算精度の維持は困難である。また、ブロードキャストとコンビネーションとを組み合わせて平均値を求める従来技術をＡｌｌｒｅｄｕｃｅ処理に応用することは困難であり、オーバーフローの回避及び計算精度の維持は困難である。また、最上位桁で値が誤る場合に２段の排他的論理和回路で補正を加える従来技術や、２進入力データの平均値演算において外部でデータを加算して右シフトした平均値の結果を入力する従来技術では、Ａｌｌｒｅｄｕｃｅ処理が考慮されていない。そのため、これらの従来技術を用いても、オーバーフローの回避及び計算精度の維持は困難である。
【００１１】
開示の技術は、上記に鑑みてなされたものであって、演算精度を犠牲にすることなくスループットを向上させる情報処理システム及び情報処理システムの制御方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本願の開示する情報処理システム及び情報処理システムの制御方法の一つの態様において、情報処理システムは以下の各部を備える。第１の情報処理装置は、通信経路を介して、保持する第１のデータを送信する。第２の情報処理装置は、前記通信経路を介して受信した前記第１のデータと、保持する第２のデータとの演算結果である第１の演算結果データを算出し、算出した前記第１の演算結果データを前記通信経路を介して送信する。第３の情報処理装置は、前記通信経路を介して、保持する第３のデータを送信する。第４の情報処理装置は、前記通信経路を介して受信した前記第３のデータと、保持する第４のデータとの演算結果である第２の演算結果データを算出し、前記通信経路を介して受信した前記第１の演算結果データと、算出した前記第２の演算結果データとの演算結果である第３の演算結果データを算出する。
【発明の効果】
【００１３】
１つの側面では、本発明は、演算精度を犠牲にすることなくスループットを向上させることができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、並列計算機の一例の図である。
【図２】図２は、実施例１に係るノードのブロック図である。
【図３】図３は、番号割当部によるＭＰＩ処理を説明するための図である。
【図４】図４は、実施例１に係る勾配情報の集約処理の一例を表す図である。
【図５】図５は、平均化処理のパイプライン化を説明するための図である。
【図６】図６は、２つのノードの保持データの平均値の算出方法を表す図である。
【図７】図７は、実施例１に係る並列計算機によるＡｌｌｒｅｄｕｃｅ処理のフローチャートである。
【図８】図８は、２つのノード毎のＡｌｌｒｅｄｕｃｅ処理の他の方法を表した図である。
【図９】図９は、全量バタフライ方式によるＡｌｌｒｅｄｕｃｅ処理の具体例を表す図である。
【図１０】図１０は、実施例２に係るノードのブロック図である。
【図１１】図１１は、ダミーノードの生成処理の概要を表す図である。
【図１２】図１２は、実施例２に係る勾配情報の集約処理の一例を表す図である。
【図１３】図１３は、ダミーノードを含む場合のノードの組の選択方法の一例を表す図である。
【図１４】図１４は、ダミーノードを含む場合のノードの組の選択方法の他の例を表す図である。
【図１５】図１５は、実施例２に係る並列計算機によるＡｌｌｒｅｄｕｃｅ処理のフローチャートである。
【図１６】図１６は、各ノードにおける２組平均を用いた全ノードの平均化処理のフローチャートである。
【００１５】
以下に、本願の開示する情報処理システム及び情報処理システムの制御方法の実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理システム及び情報処理システムの制御方法が限定されるものではない。
【実施例１】
【００１６】
図１は、並列計算機の一例の図である。本実施例に係る並列計算機１は、例えば、ノード１１〜１４を有する。ノード１１〜１４は、それぞれネットワーク５で接続される。そして、ノード１１〜１４は、ネットワーク５を介して相互にデータの送受信が可能である。このノード１１〜１４が、「第１〜４の情報処理装置」の一例にあたる。また、ネットワーク５が、「通信経路」の一例にあたる。
【００１７】
ノード１１〜１４は、例えば、深層学習を実行する。深層学習において、ノード１１〜１４は、パラメータの最適化を実行する。ノード１１〜１４は、パラメータの最適化にあたり、更新データの算出を行う。そして、ノード１１〜１４は、更新データ算出時に、更新データを算出するための数値データである勾配情報をそれぞれ有し、それぞれが有する勾配情報を用いてＡｌｌｒｅｃｕｃｅ処理を実行して更新データを求める。以下では、ノード１１〜１４のそれぞれを区別しない場合、ノード１０と呼ぶ。ここで、図１では、一例として４台のノード１０を有する並列計算機１を図示したが、ノード１０の数には特に制限は無い。
【００１８】
次に、図２を参照して、ノード１０によるＡｌｌｒｅｄｕｃｅ処理について詳細に説明する。図２は、実施例１に係るノードのブロック図である。ここでは、Ａｌｌｒｅｄｕｃｅ処理における演算として平均化を行う場合を例に説明する。ただし、Ａｌｌｒｅｄｕｃｅ処理における演算は、他の演算でもよく、例えば、加算、乗算、最大値の取得及び最小値の取得などでもよい。
【００１９】
図２に示すように、ノード１０は、番号割当部１０１、実行処理判定部１０２、通常集約処理実行部１０３、組分集約処理実行部１０４、データ送信部１０５、データ受信部１０６及びデータ格納部１０７を有する。なお、各ノード１０は、上述したように深層学習における様々な処理を実行するが、図２では、Ａｌｌｒｅｄｕｃｅ処理を行う機能について記載し、他の機能は省略した。
【００２０】
データ格納部１０７は、勾配情報を格納する。さらに、データ格納部１０７は、更新データ算出の際の途中の演算結果及び更新データを格納する。
【００２１】
番号割当部１０１は、ＭＰＩ（Message  Passing  Interface）関数を用いて、図３に示すような互いに通信可能なプロセス群のグループであるコミュニケータ２を生成する。図３は、番号割当部によるＭＰＩ処理を説明するための図である。各ノード１０は、それぞれがプロセスを実行するので、コミュニケータ２は、図２に示すようにノード１０のグループと考えることもできる。コミュニケータ２に含まれる各ノード１０は、それぞれがコミュニケータ２の情報を保持する。また、本実施例では、１つのノード１０が１つのプロセスを実行する場合を例に説明する。
【００２２】
次に、番号割当部１０１は、ＭＰＩ関数を実行してコミュニケータ２に属するプロセスの数、すなわち、本実施例ではノード１０の数であるサイズ（Ｓｉｚｅ）を取得する。本実施例では、ノード１１〜１４がコミュニケータ２に含まれるので、番号割当部１０１は、サイズとして４を取得する。さらに、番号割当部１０１は、ＭＰＩ関数を実行して、コミュニケータ２に属する各プロセスに、識別番号であるランク（Ｒａｎｋ）を設定する。ランクは、０から順にコミュニケータ２に属する全プロセスの数から１を減算した値が割り当てられる。本実施例では、各ノード１０は１つのプロセスを実行するので、ランクは、各ノード１０に割り当てられるともいえる。番号割当部１０１は、ノード１１のランクを０とし、ノード１２のランクを１とし、ノード１３のランクを２とし、ノード１４のランクを３とする。その後、番号割当部１０１は、サイズ及び各ノード１０に割り当てたランクの情報を実行処理判定部１０２へ出力する。
【００２３】
図２に戻って説明を続ける。実行処理判定部１０２は、コミュニケータ２のサイズ及び各ノード１０に割り当てられたランクの情報の入力を番号割当部１０１から受ける。次に、実行処理判定部１０２は、Ａｌｌｒｅｄｅｃｅ処理の対象の数が２のべき乗であるか否かを判定する。ここで、Ａｌｌｒｅｄｅｃｅ処理の対象の数は、コミュニケータ２に属するノード１０の実行するプロセスの数の合計である。本実施例では、各ノード１０が１つのプロセスを実行する場合であり、Ａｌｌｒｅｄｅｃｅ処理の対象の数は、コミュニケータ２に含まれるノード１０の数であり、コミュニケータ２のサイズと一致する。
【００２４】
ノード１０の数が２のべき乗でない場合、実行処理判定部１０２は、通常の全ノード平均化処理を実行すると決定する。通常の全ノード平均化処理とは、ここでは、全てのノード１０の勾配情報を１台のノード１０に集めて勾配情報の総和を求め、各ノード１０へ配布した後に、各ノード１０が勾配情報の総和をノード１０の数で除算することで平均値を求める処理である。この場合、実行処理判定部１０２は、Ａｌｌｒｅｄｕｃｅ処理の実行を通常集約処理実行部１０３に指示する。また、実行処理判定部１０２は、サイズの情報及び各ノード１０のランクの情報を通常集約処理実行部１０３へ送信する。
【００２５】
これに対して、ノード１０の数が２のべき乗の場合、実行処理判定部１０２は、２組平均を用いた全ノード平均化処理を実行すると決定する。ここでは、ノード１１〜１４の４台なので、ノード１０の数は２の２乗であり、実行処理判定部１０２は、２組平均を用いた全ノード平均化処理を実行すると決定する。ここで、２組平均を用いた全ノード平均化処理とは、勾配情報もしくは勾配情報を用いた演算結果を保持するノード１０を２つずつ組にして、組にした２つのノードが有する値の平均値の算出を繰返す処理である。本実施例では、ノード１１〜１４の４台なので、ノード１０の数は２の２乗であり、実行処理判定部１０２は、２組平均を用いた全ノード平均化処理を実行すると決定する。２組平均を用いた全ノード平均化処理については、後で詳細に説明する。この場合、実行処理判定部１０２は、Ａｌｌｒｅｄｕｃｅ処理の実行を組分集約処理実行部１０４に指示する。また、実行処理判定部１０２は、サイズの情報及び各ノード１０のランクの情報を通常集約処理実行部１０３へ送信する。
【００２６】
通常集約処理実行部１０３は、ノード１０の数が２のべき乗でない場合、Ａｌｌｒｅｄｕｃｅ処理の実行の指示を実行処理判定部１０２から受ける。そして、通常集約処理実行部１０３は、コミュニケータ２に属するノード１０の中で勾配情報を集約する集約ノードを、ランクを基に決定する。
【００２７】
自装置が集約ノードでなければ、データ格納部１０７に格納された勾配情報の集約ノードへの送信をデータ送信部１０５に行わせる。その後、通常集約処理実行部１０３は、勾配係数の総和の入力をデータ受信部１０６から受ける。そして、通常集約処理実行部１０３は、勾配係数の総和をサイズで除算して平均値を算出し、算出した平均値をデータ格納部１０７に格納する。
【００２８】
自装置が集約ノードの場合、通常集約処理実行部１０３は、他のノード１０から送られてきた勾配情報の入力をデータ受信部１０６から受ける。そして、通常集約処理実行部１０３は、勾配情報の総和を求め、求めた総和の各ノード１０への送信をデータ送信部１０５に行わせる。その後、通常集約処理実行部１０３は、勾配係数の総和をサイズで除算して平均値を算出し、算出した平均値をデータ格納部１０７に格納する。
【００２９】
組分集約処理実行部１０４は、ノード１０の数が２のべき乗の場合、Ａｌｌｒｅｄｕｃｅ処理の実行の指示を実行処理判定部１０２から受ける。組分集約処理実行部１０４は、繰り返し回数を表すｉを初期化してｉ＝０とする。そして、組分集約処理実行部１０４は、ｊを０以上の整数として、ランクが２ｊと２ｊ＋１となるノード１０を組とする。すなわち、組分集約処理実行部１０４は、自装置のランクが２ｊであれば、ランクが２ｊ＋１のノード１０と自装置が組になると判定する。また、自装置のランクが２ｊ＋１であれば、組分集約処理実行部１０４は、ランクが２ｊのノード１０と自装置が組になると判定する。そして、ランクが２ｊ＋１のノード１０の組分集約処理実行部１０４は、組となったランクが２ｊのノード１０へデータ格納部１０７に格納された勾配情報を送信する。
【００３０】
一方、ランクが２ｊのノード１０の組分集約処理実行部１０４は、組となったランクが２ｊ＋１のノード１０から勾配情報を受信する。次に、組分集約処理実行部１０４は、自装置のデータ格納部１０７に格納された勾配情報と受信した勾配情報との平均値を算出する。そして、組分集約処理実行部１０４は、演算結果をデータ格納部１０７に格納する。
【００３１】
次に、組分集約処理実行部１０４は、ｉを１つインクリメントして、サイズを２のｎ乗と表した場合にｉがｎに達したか否かを判定する。ｉがｎに達していなければ、組分集約処理実行部１０４は、勾配情報の平均値を算出したノード１０、すなわちランクが２ｊのノード１０にランクの低い順に連番で０から番号を割り当てる。そして、組分集約処理実行部１０４は、ｊを０以上の整数として、割り当て番号が２ｊと２ｊ＋１となるノード１０を組とする。
【００３２】
そして、割り当て番号が２ｊのノード１０の組分集約処理実行部１０４は、割り当て番号が２ｊ＋１のノード１０から演算結果を受信する。次に、組分集約処理実行部１０４は、自装置のデータ格納部１０７に格納された演算結果と受信した演算結果との平均値を算出する。そして、組分集約処理実行部１０４は、演算結果をデータ格納部１０７に格納する。
【００３３】
以下、ｉがｎに達するまで、組分集約処理実行部１０４は、番号の割り当て、割り当て番号が２ｊのノード１０から割り当て番号が２ｊ＋１のノードへのデータ送信、演算結果の平均値の算出を繰返す。
【００３４】
ｉがｎに達した場合、自装置のノード１０以外には平均値の算出結果を持たないので、組分集約処理実行部１０４は、自装置のノード１０のデータ格納部１０７に格納された演算結果が全ての勾配情報の平均値であると判定する。そして、組分集約処理実行部１０４は、データ格納部１０７に格納された全ての勾配情報の平均値の各ノード１０への送信をデータ送信部１０５に指示する。以上に説明したように、ｉは、既に行った２つのノード１０の平均化処理の繰り返し回数であり、サイズを２のべき乗として表した場合の乗数に繰り返し回数が達すると全てのノード１０が有する勾配情報の平均値が求められたことになる。
【００３５】
ここで、図４を参照して本実施例に係るノード１１〜１４を使用した場合の勾配情報の集約処理の流れを説明する。図４は、実施例１に係る勾配情報の集約処理の一例を表す図である。ここでは、ｉと各ノード１０のランク又は割り当て番号とをＷの添え字として並べて、各段階における各ノード１１〜１４を表す。ノードＷｉｊと表した場合、ｉ回目（ｉは０以上の整数）の２つのノード１０の平均化処理において演算結果を有するノード１０のうちのランク番号が低い方からｊ番目（ｊは０以上の整数）のノード１０を表す。また、図４において、２つのノード１０の平均化処理において、勾配情報を他のノード１０に送信したノード１０は、除外される。
【００３６】
図４に示すように、ｉ＝０回目の２つのノード１０の平均化処理において、ノード１１〜１４は、ノードＷ００、ノードＷ０１，ノードＷ０２、ノードＷ０３と表される。ノード１１は、ランクが０＝２ｊ（ｊ＝０）であるので、ランクが１＝２ｊ＋１（ｊ＝０）であるノード１２と組になる。また、ノード１３は、ランクが２＝２ｊ（ｊ＝１）であるので、ランクが１＝２ｊ＋１（ｊ＝１）であるノード１４と組になる。
【００３７】
ノード１２の勾配情報は、ノード１１へ送信される。そして、ノード１１は、ノード１１の勾配情報とノード１２の勾配情報との平均値を算出する。また、ノード１４の勾配情報はノード１３へ送信される。そして、ノード１３は、ノード１３の勾配情報とノード１４の勾配情報との平均値を算出する。
【００３８】
ｉ＝１回目の２つのノード１０の平均化処理において、ノード１１はノードＷ１０と表され、ノード１３はノードＷ１１と表される。ノード１１は割り当て番号が０＝２ｊ（ｊ＝０）であり、ノード１４は割り当て番号が１＝２ｊ＋１（ｊ＝０）であるので、ノード１３が演算結果の送り側となる。
【００３９】
そこで、ノード１３は、保持する演算結果をノード１１へ送信する。そして、ノード１１は、ノード１１が保持する演算結果とノード１２が保持する演算結果との平均値を算出する。
【００４０】
ｉ＝２回目の２つのノード１０の平均化処理において、ノード１１はノードＷ２０と表される。ここで、本実施例に係るコミュニケータ２のサイズは４であり、この時点でｉはコミュニケータ２のサイズを２のべき乗で表した場合の乗数に達する。そこで、ノード１１は、２組平均を用いた全ノード平均化処理の完了を確定する。
【００４１】
ここで、ノード１１が有する勾配情報が「第１のデータ」の一例にあたる。また、ノード１２が有する勾配情報が「第２のデータ」の一例にあたる。また、ノード１３が有する勾配情報が「第３のデータ」の一例にあたる。また、ノード１４が有する勾配情報が「第４のデータ」の一例にあたる。また、ノード１２が算出したノード１１が保持する勾配情報とノード１２が保持する勾配情報との平均値が、「第１の演算結果データ」の一例にあたる。また、ノード１４が算出したノード１３が保持する勾配情報とノード１４が保持する勾配情報との平均値が、「第２の演算結果データ」の一例にあたる。さらに、ノード１４が算出した、ノード１２による勾配情報の平均値とノード１４による勾配情報の平均値との平均値が、「第３の演算結果」の一例にあたる。
【００４２】
図２に戻って説明を続ける。データ送信部１０５は、通常集約処理実行部１０３又は組分集約処理実行部１０４からデータ送信の指示を受ける。そして、データ送信部１０５は、指示で指定された宛先のノード１０へ指定されたデータを送信する。
【００４３】
データ受信部１０６は、他のノード１０から演算結果の入力を受ける。そして、データ受信部１０６は、受信したデータを宛先である通常集約処理実行部１０３又は組分集約処理実行部１０４へ出力する。
【００４４】
以上に説明したように、本実施例に係る組分集約処理実行部１０４が２つのノード１０の平均化処理を実行するには、以下の３つの条件を満たすことが好ましい。第１の条件は、Ａｌｌｒｅｄｕｃｅ処理の対象の数が２のべき乗であるという条件である。第２の条件は、平均化する値は、２の補数表現か符号なしであるという条件である。第３の条件は、演算順序がバリナリツリーを構成するという条件である。
【００４５】
ここで、本実施例に係る組分集約処理実行部１０４は、自装置が有する勾配情報及び演算結果を用いた平均化処理の実行をパイプライン化することで２組平均を用いた全ノード平均化処理の実行を高速化する。そこで、図５を参照して、組分集約処理実行部１０４における平均化処理のパイプライン化について説明する。図５は、平均化処理のパイプライン化を説明するための図である。ここでは、ノード１１が、ノード１２から勾配情報を受信して平均値を算出する場合で説明する。
【００４６】
図５において、バッファ１１１は、ノード１１のデータ格納部１０７が有する受信したデータ及び演算結果を格納する記憶領域である。また、バッファ１１２は、ノード１１のデータ格納部１０７が有する受信したデータの一時格納領域である。また、バッファ１１３は、ノード１２のデータ格納部１０７が有する送信するデータの格納領域である。すなわち、バッファ１１１に格納された配列データが、ノード１１が有する勾配情報にあたる。また、バッファ１１３に格納された配列データが、ノード１２が有する勾配情報にあたる。ここで、ノード１１とノード１２との勾配情報の平均値を求める場合、ノード１２は、配列データの部分データをノード１１へ送信する。そして、ノード１１は、受信した配列データの部分データに対応する自己が有する配列データの部分データとの間の平均値を求めることを繰り返すことで、配列データ全体の平均値を取得する。
【００４７】
第１段階で、ノード１１は、バッファ１１３の領域２０２に格納された部分データを受信し、バッファ１１２の領域２０３に格納する。
【００４８】
次の第２段階で、ノード１１は、バッファ１１１の領域２０１に格納された部分データとバッファ１１２の領域２０３に格納された部分データの平均値２０４を算出し、バッファ１１１の領域２０１に格納する。この処理と並行して、ノード１１は、バッファ１１３の領域２０６に格納された部分データを受信し、バッファ１１２の領域２０７に格納する。
【００４９】
次の第３段階で、ノード１１は、バッファ１１１の領域２０５に格納された部分データとバッファ１１２の領域２０７に格納された部分データの平均値２０８を算出し、バッファ１１１の領域２０５に格納する。この処理と並行して、ノード１１は、バッファ１１３の領域２１０に格納された部分データを受信し、バッファ１１２の領域２１１に格納する。
【００５０】
その後、ノード１１は、勾配情報である配列データにおける部分データの平均化処理を並列して繰り返し、配列データ全体の平均値の算出を完了する。このように、勾配情報である配列データにおける部分データの平均化処理をパイプライン化して繰り返すことで、組分集約処理実行部１０４は、２組平均を用いた全ノード平均化処理の実行を高速化することができる。
【００５１】
さらに、組分集約処理実行部１０４は、２つのノード１０が保持する値の平均値を算出する際に、以下の演算を実行することでオーバーフローの発生を回避する。以下に、図６を参照して、組分集約処理実行部１０４による２つのノード１０が保持する値の平均値の算出を説明する。図６は、２つのノードの保持データの平均値の算出方法を表す図である。
【００５２】
受信側のノード１０が有する値がｘ０、送信側のノード１０が有する値をｘ１である場合、組分集約処理実行部１０４は、ｘ０とｘ１との論理積を求め第１値を算出する。さらに、組分集約処理実行部１０４は、ｘ０とｘ１との排他的論理和を求め１ビットの右シフトを行い第２値を算出する。１ビットの右シフトでは、組分集約処理実行部１０４は、シフト後の値に先頭のビットに０を付加する。ここで、１ビットの右シフトは、２による除算にあたる。そして、組分集約処理実行部１０４は、第１値と第２値とを加算することで、ｘ０とｘ１との平均値を算出する。
【００５３】
すなわち、論理積を「＆」で表し、排他的論理和を「＾」で表し、１ビットの右シフトの演算を「＞＞１」と表した場合、組分集約処理実行部１０４は、（ｘ０＆ｘ１）＋（（ｘ０＾ｘ１）＞＞１）と表される演算を実行することでｘ０とｘ１との平均値を求める。この演算方法は、ビット毎に分けて平均値を計算して後に加算する方法であり、負の無限大への丸めを用いた端数切捨て方式である。
【００５４】
ｘ０とｘ１とでビット値が同一の場合は次の原理で平均値が求まる。まず、ビット値が同一となるビットをｘ０＆ｘ１で抽出する。この場合、ビット値が同一なので、ｘ０＆ｘ１がそのまま平均値となる。これに対して、ｘ０とｘ１とでビット値が異なる場合は次の原理で平均値が求まる。まず、ビット値が異なるビットをｘ０＾ｘ１により抽出する。そして、ビット値が異なるので２で除算する演算をシフト演算化して（ｘ０＾ｘ１）＞＞１とすることで、ビット値が異なるビットの平均値が求められる。
【００５５】
例えば、ｘ０＝１１００１１００であり、ｘ１＝１０１０１０１０の場合で具体例を説明する。この場合、ｘ０とｘ１とを単に加算して２で割った場合、加算時に桁の繰り上がりが発生し、８ビットのデータ領域からのオーバーフローが発生する。
【００５６】
これに対して、本実施例に係る組分集約処理実行部１０４は、演算２２１によりｘ０とｘ１との論理積を算出する。この場合、組分集約処理実行部１０４は、演算２２１の結果である第１値として１０００１０００を取得する。演算２２１ではオーバーフローは発生しない。
【００５７】
また、組分集約処理実行部１０４は、演算２２２によりｘ０とｘ１との排他的論理和を求め、演算２２３により１ビットの右シフトを行う。この場合、組分集約処理実行部１０４は、演算２２２の結果である第２値として０１１００１１０を取得する。演算２２２でもオーバーフローは発生しない。
【００５８】
そして、組分集約処理実行部１０４は、演算２２４により第１値と第２値との加算値を算出する。これにより、組分集約処理実行部１０４は、演算結果として１０１１１１０１１を得る。この場合、第２値の最上位の桁は０であるので、加算によりオーバーフローが発生することはない。ここで算出された値は、前述した０とｘ１とを単に加算して２で割ることで算出したｘ０とｘ１との平均値と一致する。すなわち、組分集約処理実行部１０４は、この演算によりｘ０とｘ１との平均値が算出できる。このように、組分集約処理実行部１０４は、オーバーフローを発生させずに、ｘ０とｘ１との平均値を算出することができる。
【００５９】
次に、図７を参照して、本実施例に係る並列計算機によるＡｌｌｒｅｄｕｃｅ処理の流れについて説明する。図７は、実施例１に係る並列計算機によるＡｌｌｒｅｄｕｃｅ処理のフローチャートである。以下では、ノード１０が保持する勾配情報及び演算結果をまとめて「保持データ」と呼ぶ場合がある。
【００６０】
番号割当部１０１は、コミュニケータ２を生成し、生成したコミュニケータ２のサイズ及びコミュニケータ２に属する各ノード１０にランクを割り当てる（ステップＳ１）。その後、番号割当部１０１は、コミュニケータ２のサイズの情報及びランクの情報を実行処理判定部１０２へ出力する。
【００６１】
実行処理判定部１０２は、コミュニケータ２のサイズの情報及びランクの情報の入力を番号割当部１０１から受ける。そして、実行処理判定部１０２は、コミュニケータ２のサイズをＡｌｌｒｅｄｕｃｅ処理で対象とするノード１０の数である対象数とする。ここでは、対象数をＮとする。そして、実行処理判定部１０２は、対象数Ｎが２のｎ乗と表すことができる、すなわちＮ＝２ｎか否かを判定する（ステップＳ２）。
【００６２】
対象数Ｎが２のｎ乗と表すことができる場合（ステップＳ２：肯定）、実行処理判定部１０２は、Ａｌｌｒｅｄｕｃｅ処理の実行を組分集約処理実行部１０４に依頼する。組分集約処理実行部１０４は、Ａｌｌｒｅｄｕｃｅ処理の実行の依頼を受けて、ｉを初期化して０とする（ステップＳ３）。
【００６３】
次に、組分集約処理実行部１０４は、ｊを初期化して０とする（ステップＳ４）。
【００６４】
次に、組分集約処理実行部１０４は、保持データを他のノード１０へ送信していないノード１０のランクの低い側から割り当て番号として０から連番で順に番号を割り当てる。そして、割り当て番号が２ｊ＋１と表されるノード１０の組分集約処理実行部１０４は、自装置の保持データを割り当て番号が２ｊと表されるノード１０へ送信する。一方、割り当て番号が２ｊと表されるノード１０は、自装置の保持データと受信した保持データとの平均値を算出する。ここで、ｉ回目の２つのノード１０の平均化処理における、割り当て番号が２ｊと表されるノード１０の保持データをｗｉ（２ｊ），割り当て番号が２ｊ＋１と表されるノード１０の保持データをｗｉ（２ｊ＋１）と表す。また、ｉ＋１回目の２つのノード１０の平均化処理における、ランクが低い側からｊ番目のノード１０の保持データをＷ（ｉ＋１）ｊと表す。この場合、ｉ回目の処理における割り当て番号が２ｊと表されるノード１０が、ｉ＋１回目の処理におけるｊ番目のノード１０となり、その組分集約処理実行部１０４は、Ｗ（ｉ＋１）ｊ＝１／２（ｗｉ（２ｊ）＋ｗｉ（２ｊ＋１））と表される計算を行う（ステップＳ５）。
【００６５】
そして、組分集約処理実行部１０４は、ｊがＮを２のべき乗で表した場合の乗数に達したか否か、すなわちｊ＜Ｎ／２ｉ−１か否かを判定する（ステップＳ６）。ｊ＜Ｎ／２ｉ−１の場合（ステップＳ６：肯定）、組分集約処理実行部１０４は、ｊを１つインクリメントして（ステップＳ７）、ステップＳ５へ戻る。
【００６６】
これに対して、ｊ＜Ｎ／２ｉ−１でない場合（ステップＳ６：否定）、組分集約処理実行部１０４は、同期処理を実行する（ステップＳ８）。ここで、同期処理とは、ｉ回目の全ての割り当て番号が２ｊのノード１０における平均化処理が終わるまで待機する処理である。
【００６７】
次に、組分集約処理実行部１０４は、ｉを１つインクリメントする（ステップＳ９）。
【００６８】
次に、組分集約処理実行部１０４は、ｉがコミュニケータ２のサイズを２のべき乗として表した場合の乗数に達したか否か、すなわちｉ＜ｎか否かを判定する（ステップＳ１０）。ｉ＜ｎの場合（ステップＳ１０：肯定）、組分集約処理実行部１０４は、ステップＳ４に戻る。
【００６９】
これに対して、ｉ＜ｎでない場合（ステップＳ１０：否定）、組分集約処理実行部１０４は、全てのノード１０が有する勾配情報の平均値であるＡｖがＷｉ０であると決定する（ステップＳ１１）。
【００７０】
一方、対象数Ｎが２のｎ乗と表すことができない場合（ステップＳ２：否定）、実行処理判定部１０２は、Ａｌｌｒｅｄｕｃｅ処理の実行を通常集約処理実行部１０３に依頼する。通常集約処理実行部１０３は、Ａｌｌｒｅｄｕｃｅ処理の実行の依頼を受けて、ｉ通常の全ノード平均化処理を実行する（ステップＳ１２）。
【００７１】
以上に説明したように、本実施例に係る並列計算機は、ノードを２つずつ組にしたＡｌｌｒｅｄｕｃｅ処理の演算を繰り返すことで、全てのノードのＡｌｌｒｅｄｕｃｅ処理を実行する。これにより、本実施例に係る並列計算機は演算誤差を軽減し且つデータ転送量を抑えることでき、演算精度を犠牲にすることなくスループットを向上させることが可能となる。
【００７２】
さらに、本実施例に係る並列計算機は、論理積と排他的論理和を用いた計算により２つの値の平均値を求めることで、オーバーフローの発生を起こすことなく全ノードの平均化処理を実行することができる。
【００７３】
また、ノード間通信やバッファからのデータの読み出し及び書き込みの処理に比べて平均化演算は極めて短時間で終了する。さらに、本実施例に係る並列計算機は、平均化処理におけるデータ通信並びに、バッファからのデータの読み出し及び書き込みの処理をパイプライン化することにより、処理時間をオーバラップさせて隠蔽することができる。これにより、本実施例に係る並列計算機は、平均化処理の回数の増加による性能劣化を抑えることができる。
【００７４】
（変形例１）
実施例１では、各ノード１０は、ランクの低い順に割り当て番号を振って隣り合う割り当て番号が隣り合うノード１０同士を組にして２つのノード１０毎のＡｌｌｒｅｄｕｃｅ処理を実行した。ただし、２つのノード１０毎のＡｌｌｒｅｄｕｃｅ処理の方法はこれに限らない。そこで、以下に他の方法による２つのノード１０毎のＡｌｌｒｅｄｕｃｅ処理を説明する。図８は、２つのノード毎のＡｌｌｒｅｄｕｃｅ処理の他の方法を表した図である。
【００７５】
図８に示す、集約手順２３１は、分割バタフライ方式と呼ばれる場合がある。また、集約手順２３２は、二分木集約方式とよばれる場合がある。集約手順２３３は、全量バタフライ方式と呼ばれる場合がある。
【００７６】
集約手順２３１では、隣り合うノード１１〜１４が、それぞれ配列データの半分の部分データを交換する。そして、各ノード１１〜１４は、受け取った部分でータと対応する部分データとを用いて演算を行う。次に、各ノード１１〜１４は、配列データの同じ位置の演算結果を有する相手との間で、演算結果の半分の部分データを交換する。そして、各ノード１１〜１４は、受け取った部分でータと対応する部分データとを用いて演算を行う。その後、各ノード１１〜１４が有する演算結果をそれぞれに配布し合うことで、ノード１１〜１４は、全ての勾配情報を用いた演算結果を取得することができる。
【００７７】
また、集約手順２３２では、ノード１１がノード１２に配列データを送信し、ノード１３がノード１４に配列データを送信する。次に、ノード１２及び１４は、受信した配列データを用いて演算を行う。次に、ノード１２は、演算結果をノード１４へ送信する。そして、ノード１４は、それぞれの演算結果を用いて演算を実行する。その後、ノード１４が有する演算結果がノード１１〜１３へ配布される。これにより、ノード１１〜１４は、全ての勾配情報を用いた演算結果を取得することができる。
【００７８】
また、集約手順２３３では、隣り合うノード１１〜１４が、それぞれ配列データの半分の部分データを交換し、それぞれが演算を実行する。次に、ノード１１〜１４のうちの他の演算結果を持つ同士が演算結果を交換し、それぞれが演算を実行する。これにより、ノード１１〜１４は、全ての勾配情報を用いた演算結果を取得することができる。
【００７９】
ここで、図９を参照して、全量バタフライ方式によるＡｌｌｒｅｄｕｃｅ処理の具体例を説明する。図９は、全量バタフライ方式によるＡｌｌｒｅｄｕｃｅ処理の具体例を表す図である。ここでは、ノード１１は、部分データＤ００、Ｄ０１、Ｄ０２及びＤ０３を含む配列データを有する。ノード１２は、部分データＤ１０、Ｄ１１、Ｄ１２及びＤ１３を含む配列データを有する。ノード１３は、部分データＤ２０、Ｄ２１、Ｄ２２及びＤ２３を含む配列データを有する。ノード１４は、部分データＤ３０、Ｄ３１、Ｄ３２及びＤ３３を含む配列データを有する。
【００８０】
ノード１１とノード１２とは、部分データＤ００〜Ｄ０３と部分データＤ１０〜Ｄ１３とを交換する。そして、ノード１１及び１２は、関数ｆを用いた演算を実行して、部分データｆ（Ｄ００，Ｄ１０）、ｆ（Ｄ０１，Ｄ１１）、ｆ（Ｄ０２，Ｄ１２）及びｆ（Ｄ０３，Ｄ１３）を取得する。
【００８１】
同様に、ノード１３とノード１４とは、部分データＤ２０〜Ｄ２３と部分データＤ３０〜Ｄ３３とを交換する。そして、ノード１３及び１４は、関数ｆを用いた演算を実行して、部分データｆ（Ｄ２０，Ｄ３０）、ｆ（Ｄ２１，Ｄ３１）、ｆ（Ｄ２２，Ｄ３２）及びｆ（Ｄ２３，Ｄ３３）を取得する。
【００８２】
次に、ノード１１とノード１３とは、それぞれの演算結果を交換し関数ｆを用いた演算を実行する。また、ノード１２とノード１４とは、それぞれの演算結果を交換し関数ｆを用いた演算を実行する。これにより、ノード１１〜１４は、いずれも、ｆ（Ｄ００，Ｄ１０，Ｄ２０，Ｄ３０）、ｆ（Ｄ０１，Ｄ１１，Ｄ２１，Ｄ３１）、ｆ（Ｄ０２，Ｄ１２，Ｄ２２，Ｄ３２）及びｆ（Ｄ０３，Ｄ１３，Ｄ２３，Ｄ３３）を取得する。これにより、ノード１１〜１４は、Ａｌｌｒｅｄｕｃｅ処理を完了する。
【００８３】
以上に説明したように、本変形例に係る並列計算機は、実施例１とは異なる２組平均を用いた全ノード平均化処理の方法を用いてＡｌｌｒｅｄｕｃｅ処理を実行する。このように、他の組平均を用いた全ノード平均化処理の方法を用いても、演算精度を犠牲にすることなくスループットを向上させることができる。
【００８４】
（変形例２）
実施例１では、組分集約処理実行部１０４は、負の無限大への丸めを用いた端数切捨て方式である（ｘ０＆ｘ１）＋（（ｘ０＾ｘ１）＞＞１）と表される演算を実行することでｘ０とｘ１との平均値を求めた。ただし、オーバーフローを抑えて２つのノード１０の平均値を算出する方法はこれに限らない。そこで、以下に他の方法による２つのノード１０の平均値の算出を説明する。
【００８５】
例えば、組分集約処理実行部１０４は、正の無限大への丸めを用いた端数切上方式によりｘ０とｘ１との平均値を求めることができる。これは、ｘ０とｘ１とをビット毎に分けて平均値の過大評価値を計算した後に誤差を減算する方式である。この方式では、平均値の過大評価値の演算を「｜」とした場合、組分集約処理実行部１０４は、（ｘ０｜ｘ１）−（（ｘ０＾ｘ１）＞＞１）と表される演算を実行することでｘ０とｘ１との平均値を求める。
【００８６】
ｘ０とｘ１とでビット値が同一の場合、ビット値が同一なので（ｘ０｜ｘ１）がそのまま過大評価されていない真の平均値となる。一方、ｘ０とｘ１とでビット値が異なる場合、（ｘ０＾ｘ１）＞＞１により異なるビットが抽出される。ここで、ビット値が異なる場合、真の平均値は、（ｘ０＾ｘ１）−（ｘ０＾ｘ１／２）と表される。そこで、ビット値が異なるビットに着目すると、（ｘ０＾ｘ１）＝（ｘ０｜ｘ１）である。このことから、（ｘ０｜ｘ１）−（ｘ０＾ｘ１／２）により、ビット値が異なる場合の真の平均値が算出される。この際、（ｘ０＾ｘ１／２）で端数切捨てが発生するので、最終的な平均値としては端数切上になる。
【００８７】
また、組分集約処理実行部１０４は、偶然丸め用いることでｘ０とｘ１との平均値を求めることができる。偶数丸めは、ＪＩＳ（Japanese  Industrial  Standards）丸め、ＩＯＳ（International  Organization  for  Standardization）丸め又は銀行丸めと呼ばれる場合もある。これは、端数が発生した場合、結果が偶数になるように丸める手法であり、端数を一方だけ丸めることによる蓄積誤差を統計的になくすことを目的とする。具体的には、組分集約処理実行部１０４は、実施例１の端数切捨て方式をベースに、端数が発生し且つ切り捨て結果が奇数になる場合に１を加算することで平均値を算出する。すなわち、組分集約処理実行部１０４は、ｔ１＝（ｘ０＾ｘ１）、ｔ２＝（ｘ０＆ｘ１）＋（ｔ１＞＞１）として、ｔ２＋（ｔ１＆ｔ２＆１）によりｘ０とｘ１との平均値を算出する。
【００８８】
ここで、端数切捨ての平均値は、（ｘ０＆ｘ１）＋（（ｘ０＾ｘ１）＞＞１）である。端数は（（ｘ０＾ｘ１）＞＞１）の計算で発生するので、シフト前の（ｘ０＾ｘ１）の最下位ビットを見れば端数が発生したか否かが判定できる。すなわち、（（ｘ０＾ｘ１）＆１）により、最下位ビットを見れば端数が発生したビットを抽出できる。また、切り捨て結果の最下位ビットにより切り捨て結果が奇数か否かを判定できるので、（（（ｘ０＆ｘ１）＋（（ｘ０＾ｘ１）＞＞１））＆１）により、切り捨て結果が奇数のビットを抽出できる。以上のことから、端数が発生し且つ切り捨て結果が奇数かどうかは、上記２項目の論理積をもとめることで判定できる。すなわち、（（（ｘ０＾ｘ１）＆（（ｘ０＆ｘ１）＋（（ｘ０＾ｘ１）＞＞１））＆１）により、端数が発生し且つ切り捨て結果が奇数のビットを抽出できる。そして、共通する計算を省くことで、上述した偶然丸め用いたｘ０とｘ１との平均値を求める演算が生成される。
【００８９】
以上に説明したように、本変形例に係る並列計算機は、実施例１とは異なる２つの値の平均値の演算方法を用いてＡｌｌｒｅｄｕｃｅ処理を実行する。このように、２つの値の平均値の演算方法として実施例１と異なる方法を用いても、演算精度を犠牲にすることなくスループットを向上させることができる。
【実施例２】
【００９０】
図１０は、実施例２に係るノードのブロック図である。本実施例に係る並列計算機１は、Ａｌｌｒｅｄｕｃｅ処理の対象とする数が２のべき乗以外の場合にも、２組平均を用いた全ノード平均化処理を実行できることが実施例１と異なる。以下の説明では、実施例１と同じ各部の機能については説明を省略する。以下では、Ａｌｌｒｅｄｕｃｅｓ処理の対象の数を対象数と言う。
【００９１】
実行処理判定部１０２は、対象数が２のべき乗の場合、２組平均を用いた全ノード平均化処理の実行を組分集約処理実行部１０４に依頼する。一方、対象数が２のべき乗でない場合、実行処理判定部１０２は、対象数を調整した上での２組平均を用いた全ノード平均化処理の実行を組分集約処理実行部１０４に依頼する。
【００９２】
組分集約処理実行部１０４は、対象数が２のべき乗でない場合、対象数を調整した上での２組平均を用いた全ノード平均化処理の実行の依頼を実行処理判定部１０２から受ける。
【００９３】
組分集約処理実行部１０４は、対象数が、対象数に最も近いべき乗数未満で、且つ、対象数を２のべき乗で表した数の乗数を１減らした数から乗数を２減らした数を減算した値以上であるか否かを判定する。すなわち、対象数をＮとして、対象数に最も近いべき乗数が２Ｐの場合、組分集約処理実行部１０４は、２Ｐ＋２Ｐ−１≦Ｎ＜２Ｐか否かを判定する。
【００９４】
対象数が、対象数に最も近いべき乗数より大きい、又は、対象数を２のべき乗で表した数の乗数を１減らした数から乗数を２減らした数を減算した値未満の場合、組分集約処理実行部１０４は、最も近い２のべき乗に対して対象数が過剰と判定する。
【００９５】
対象数が過剰の場合、組分集約処理実行部１０４は、２組平均を用いた全ノード平均化処理の対象の全ての対象の中から対象数に最も近いべき乗数のノード１０をランダムに選択する。この場合、組分集約処理実行部１０４は、コミュニケータ２に属するノード１０間で統一した乱数種を用いてランダムな選択を行う。これにより、各ノード１０は、いずれも２組平均を用いた全ノード平均化処理の対象として選択するノード１０を統一することができる。その後、組分集約処理実行部１０４は、選択した対象に対して実施例１と同様に２組平均を用いた全ノード平均化処理を実行する。
【００９６】
一方、組分集約処理実行部１０４は、対象数が、対象数に最も近いべき乗数未満、又は、対象数を２のべき乗で表した数の乗数を１減らした数から乗数を２減らした数を減算した値以上である場合、対象数が最も近い２のべき乗に対して数が不足した状態と判定する。
【００９７】
数が不足した状態の場合、組分集約処理実行部１０４は、図１１に示すダミーノード２０の生成処理を実行する。図１１は、ダミーノードの生成処理の概要を表す図である。ダミーノード２０の生成処理において、組分集約処理実行部１０４は、象数を２のべき乗で表した数から対象数を減算してダミーノード２０の追加数を求める。そして、組分集約処理実行部１０４は、コミュニケータ２に属するノード１０間で統一した乱数種を用いて乱数を発生させる。そして、組分集約処理実行部１０４は、発生した乱数に応じたノード１０をダミーノード２０の役割を担うノード１０とする。ここで、各ノード１０の組分集約処理実行部１０４は、統一された乱数種を用いて乱数を発生させるため、他のノード１０に問い合わせることなく、ダミーノード２０の役割を担うノード１０をいずれのノード１０においても一致させることができる。ここで、図１１では、ノード１２がダミーノード２０の役割を担うノード１０と決定された場合を表す。
【００９８】
そして、ダミーノード２０の役割を担うノード１０として決定されたノード１０の組分集約処理実行部１０４は、本来のノード１０の動作とともにダミーノード２０としての動作を実行する。ここで、図１１では、ノード１２とダミーノード２０とを分けて記載したが、実際には、ダミーノード２０は、ノード１２の中に生成される。ノード１０が、ダミーノード２０として動作する場合、勾配情報はその装置がデータ格納部１０７に保持する勾配情報をダミーノード２０が保持する勾配情報として扱う。
【００９９】
ダミーノード２０の役割を担うノード１０の組分集約処理実行部１０４は、自装置の中にダミーノード２０を作成する。この時、組分集約処理実行部１０４は、データ格納部１０７にダミーノード２０の勾配情報を格納する領域を確保し、その領域に勾配情報をコピーする。すなわち、ダミーノード２０の追加後のイメージとしては、図１１に示すように、新たに生成されたダミーノード２０に、ノード１２の勾配情報１２１がコピーされた状態となる。
【０１００】
そして、ダミーノード２０の役割を担うノード１０の組分集約処理実行部１０４は、本来のノード１０としての２つのノード１０が保持する値の平均化処理と、ダミーノード２０としての２つのノード１０が保持する値の平均化処理とを実行する。また、ダミーノード２０の役割を担うことのないノード１０の組分集約処理実行部１０４は、実施例１と同様の２つのノード１０が保持する値の平均化処理を実行する。ノード１０は、図１２に示すように、演算結果を有するノード１０が１台になるまで、２つのノード１０が保持する値の平均化処理を繰り返し、その後演算結果を全てのノード１０に配布することで、２組平均を用いた全ノード平均化処理を完了する。図１２は、実施例２に係る勾配情報の集約処理の一例を表す図である。
【０１０１】
図１２に示すダミーノード２０は、実際にはノード１２で動作する仮想ノードである。そして、ｉ＝０回目の２つのノード１０の平均化処理において、ダミーノード２０が、ノードＷ０３とされて処理される。その後は、実施例１と同様に処理が行われ、ノード１１は、ノード１１〜１３及びダミーノード２０の勾配情報の平均値を有するノードＷ０２となる。
【０１０２】
ここで、ダミーノード２０は、１つのノード１０が役割を担うため、２組平均を用いた全ノード平均化処理においてなるべく早く除外されることが好ましい。そこで、組分集約処理実行部１０４は、ダミーノード２０を早く除外するように、ノード１０及びダミーノード２０における組を生成することが好ましい。
【０１０３】
図１３は、ダミーノードを含む場合のノードの組の選択方法の一例を表す図である。また、図１４は、ダミーノードを含む場合のノードの組の選択方法の他の例を表す図である。図１３及び１４の何れの場合も、ノード１０が１３台あり、ダミーノード２０が３台生成される場合を表す。そして、２つのノード１０の値の平均化処理毎に演算結果を有する各ノード１０に低い方から割り当て番号が割り当てられる。ここでは、＃０〜＃１２を割り当て番号として、ノード１０に割り当て番号を付加した値で各ノード１０を表す。また、３台のダミーノード２０をノード＃１３〜＃１５と表し、それぞれが、ノード＃７，＃２及び＃１０で実行される場合で説明する。
【０１０４】
例えば、図１３に示すように、Ｎを対象数とし、ｉが０以上でＮ／２より小さい整数とした場合、組分集約処理実行部１０４は、ランクの低い方から順に割り当て番号割り当て、ノード＃ｉとノード＃ｉ＋Ｎ／２とを組として、バイナリツリーを構成する。そして、ノード＃ｉ＋Ｎ／２の組分集約処理実行部１０４は、組となったノード＃ｉに保持データを送信する。一方、ノード＃ｉの組分集約処理実行部１０４は、自装置の保持データと受信した保持データとを用いて演算を行う。その後、組分集約処理実行部１０４は、割り当て番号の再割り当て及び２つのノード１０の値の平均化処理を繰返す。この場合、１回目の２つのノード１０の値の平均化処理において、ダミーノード２０であるノード＃１３〜＃１５は、その後の２つのノード１０の値の平均化処理からは除外される。
【０１０５】
また、組分集約処理実行部１０４は、例えば、図１４に示すように、ランクの低い方から順に割り当て番号割り当て、ｉが偶数である場合のノード＃ｉとノード＃ｉ＋１とを組として、バイナリツリーを構成する。そして、ノード＃ｉ＋１の組分集約処理実行部１０４は、組となったノード＃ｉに保持データを送信する。一方、ノード＃ｉの組分集約処理実行部１０４は、自装置の保持データと受信した保持データとを用いて演算を行う。その後、組分集約処理実行部１０４は、割り当て番号の再割り当て及び２つのノード１０の値の平均化処理を繰返す。この場合も、１回目の２つのノード１０の値の平均化処理において、ダミーノード２０であるノード＃１３〜＃１５は、保持データを組となるノード１０へ送信するので、その後の２つのノード１０の値の平均化処理からは除外される。
【０１０６】
次に、図１５を参照して、本実施例に係る並列計算機によるＡｌｌｒｅｄｕｃｅ処理の流れについて説明する。図１５は、実施例２に係る並列計算機によるＡｌｌｒｅｄｕｃｅ処理のフローチャートである。
【０１０７】
実行処理判定部１０２は、コミュニケータ２のサイズの情報及びランクの情報の入力を番号割当部１０１から受ける。そして、実行処理判定部１０２は、コミュニケータ２のサイズをＡｌｌｒｅｄｕｃｅ処理において対象とするノード１０の数である対象数とする。ここでは、対象数をＮとする。そして、実行処理判定部１０２は、対象数Ｎが２のｐ乗と表すことができるか否か、すなわちＮ＝２ｐか否かを判定する（ステップＳ１０１）。
【０１０８】
Ｎ＝２ｐの場合（ステップＳ１０１：肯定）、実行処理判定部１０２は、２組平均を用いた全ノード平均化処理を組分集約処理実行部１０４に依頼する。組分集約処理実行部１０４は、実行処理判定部１０２からの依頼を受けて、２組平均を用いた全ノード平均化処理を実行する（ステップＳ１０５）。ここで、ステップＳ１０５で実行される処理は、例えば、図７のフローチャートで示したステップＳ３〜Ｓ１１にあたる。
【０１０９】
Ｎ＝２ｐでない場合（ステップＳ１０１：否定）、実行処理判定部１０２は、対象数の調整した上での２組平均を用いた全ノード平均化処理を組分集約処理実行部１０４に依頼する。そこで、組分集約処理実行部１０４は、実行処理判定部１０２からの依頼を受けて、対象数が、対象数に最も近いべき乗数より小さく、且つ、対象数を２のべき乗で表した数の乗数を１減らした数から乗数を２減らした数を減算した値以上か否かを判定する。すなわち、組分集約処理実行部１０４は、対象数がＮであり、対象数に最も近い２のべき乗が２Ｐである場合、２Ｐ−１＋２Ｐ−２≦Ｎ＜２Ｐか否かを判定する（ステップＳ１０２）。
【０１１０】
２Ｐ−１＋２Ｐ−２≦Ｎ＜２Ｐの場合（ステップＳ１０２：肯定）、組分集約処理実行部１０４は、２Ｐ−Ｎ個のダミーノード２０を加え、ランダムに選んだ勾配情報をコピーする（ステップＳ１０３）。言い換えれば、組分集約処理実行部１０４は、ランダムに選んだノード１０の中にダミーノード２０を生成させて、選ばれたノード１０が保持する勾配情報をコピーしてダミーノード２０に保持させる。
【０１１１】
その後、組分集約処理実行部１０４は、ダミーノード２０とノード１０とを２組平均を用いた全ノード平均化処理の対象として、２組平均を用いた全ノード平均化処理を実行する（ステップＳ１０５）。
【０１１２】
これに対して、２Ｐ−１＋２Ｐ−２≦Ｎ＜２Ｐでない場合（ステップＳ１０２：否定）、組分集約処理実行部１０４は、２組平均を用いた全ノード平均化処理の対象であるＮ個のノード１０の中から２Ｐ個のノード１０をランダムに選択する（ステップＳ１０４）。
【０１１３】
その後、組分集約処理実行部１０４は、選択したノード１０を２組平均を用いた全ノード平均化処理の対象として、２組平均を用いた全ノード平均化処理を実行する（ステップＳ１０５）。
【０１１４】
さらに、図１６を参照して、特定のノード１０における２組平均を用いた全ノード平均化処理の流れを説明する。図１６は、各ノードにおける２組平均を用いた全ノードの平均化処理のフローチャートである。
【０１１５】
組分集約処理実行部１０４は、統一された乱数種から乱数を発生させる（ステップＳ２０１）。
【０１１６】
組分集約処理実行部１０４は、発生させた乱数で自装置である特定のノード１０がダミーノード２０を生成するノード１０か否かを判定する（ステップＳ２０２）。
【０１１７】
特定のノード１０がダミーノード２０を生成するノード１０の場合（ステップＳ２０２：肯定）、組分集約処理実行部１０４は、ダミーノード２０のパラメータと勾配情報を保持する領域を確保する。さらに、組分集約処理実行部１０４は、勾配情報を確保した領域にコピーする（ステップＳ２０３）。
【０１１８】
組分集約処理実行部１０４は、特定のノード１０とダミーノード２０の両方についてオーバーフロー防止の２組平均を用いた全ノード平均化処理を実行する（ステップＳ２０４）。
【０１１９】
これに対して、特定のノード１０がダミーノード２０を生成するノード１０でない場合（ステップＳ２０２：否定）、組分集約処理実行部１０４は、特定のノード１０についてオーバーフロー防止の２組平均を用いた全ノード平均化処理を実行する（ステップＳ２０５）。
【０１２０】
以上に説明したように、本実施例に係る並列計算機は、対象数の数に応じて、全対象数から選択して対象数を減らす、又は、ダミーノードを加えて対象数を増やして、２組平均を用いた全ノード平均化処理を実行する。これにより、対象数が２のべき乗で表すことができない場合にも、２組平均を用いた全ノード平均化処理を実行することができる。したがって、本実施例に係る並列計算機は演算誤差を軽減し且つデータ転送量を抑えることでき、対象数の制限なく演算精度を犠牲にすることなくスループットを向上させることが可能となる。
【符号の説明】
【０１２１】
１  並列計算機
２  コミュニケータ
５  ネットワーク
１０〜１４  ノード
２０  ダミーノード
１０１  番号割当部
１０２  実行処理判定部
１０３  通常集約処理実行部
１０４  組分集約処理実行部
１０５  データ送信部
１０６  データ受信部
１０７  データ格納部
【図１】
2020095595.tif 000003
【図２】
2020095595.tif 000004
【図３】
2020095595.tif 000005
【図４】
2020095595.tif 000006
【図５】
2020095595.tif 000007
【図６】
2020095595.tif 000008
【図７】
2020095595.tif 000009
【図８】
2020095595.tif 000010
【図９】
2020095595.tif 000011
【図１０】
2020095595.tif 000012
【図１１】
2020095595.tif 000013
【図１２】
2020095595.tif 000014
【図１３】
2020095595.tif 000015
【図１４】
2020095595.tif 000016
【図１５】
2020095595.tif 000017
【図１６】
2020095595.tif 000018