(57)【要約】【課題】  複数の情報処理装置が相互に転送されたデータを使用して演算を実行し、演算により得られた結果データを各情報処理装置に転送する情報処理システムにおいて、各情報処理装置における、転送したデータに対する演算以外の他の演算の処理性能の低下を抑止する。【解決手段】  各情報処理装置は、第１の演算を実行する演算処理装置と、主記憶装置と、演算処理部、バッファ部および転送制御部を有する制御装置とを有する。バッファ部は、演算処理部が実行する第２の演算で使用するデータを保持する。転送制御部は、主記憶装置からバッファ部へのデータの転送と、他の情報処理装置が有する主記憶装置からバッファ部へのデータの転送とを制御するとともに、演算処理部が実行した第２の演算の結果データの自情報処理装置が有する主記憶装置への転送と他の情報処理装置が有する主記憶装置への転送とを制御する。【選択図】    図１
2018160180.tif 000002
【特許請求の範囲】
【請求項１】
複数の情報処理装置を含む情報処理システムにおいて、
前記複数の情報処理装置の各々は、
第１の演算を実行する演算処理装置と、
データを記憶する主記憶装置と、
前記複数の情報処理装置の間でのデータの転送を制御する制御装置を有し、
前記制御装置は、
第２の演算を実行する演算処理部と、
前記演算処理部が実行する前記第２の演算で使用するデータを保持するバッファ部と、
前記主記憶装置から前記バッファ部へのデータの転送と、前記複数の情報処理装置のうちの他の情報処理装置が有する主記憶装置から前記バッファ部へのデータの転送とを制御するとともに、前記演算処理部が実行した前記第２の演算の結果データの前記演算処理部が含まれる自情報処理装置が有する主記憶装置への転送と、前記第２の演算の結果データの前記他の情報処理装置が有する主記憶装置への転送とを制御する転送制御部を有することを特徴とする情報処理システム。
【請求項２】
前記バッファ部は、複数のバッファを有し、
前記転送制御部は、前記演算処理部が前記複数のバッファのいずれかに保持されたデータを使用して前記第２の演算を実行中に、前記自情報処理装置が有する主記憶装置および前記他の情報処理装置が有する主記憶装置から前記複数のバッファの他のいずれかへのデータの転送を制御することを特徴とする請求項１記載の情報処理システム。
【請求項３】
前記複数の情報処理装置の各々の前記演算処理装置は、前記第１の演算を実行することで、前記演算処理部が前記第２の演算で使用するデータを生成し、生成したデータを前記主記憶装置に格納し、
前記複数の情報処理装置の各々の前記転送制御部は、
前記複数の情報処理装置の各々の前記演算処理装置による前記第１の演算の完了に基づいて、前記他の情報処理装置の前記転送制御部にデータの転送要求を発行し、
前記他の情報処理装置の前記転送制御部からの前記転送要求に基づいて前記主記憶装置から読み出したデータを、前記転送要求を発行した情報処理装置に出力し、
前記転送要求に応答して前記他の情報処理装置の前記転送制御部から転送されたデータを前記バッファ部に格納することを特徴とする請求項１または請求項２記載の情報処理システム。
【請求項４】
前記複数の情報処理装置の各々の前記演算処理装置は、前記第１の演算を実行することで、前記演算処理部が前記第２の演算で使用するデータを生成し、生成したデータを前記主記憶装置に格納し、
前記複数の情報処理装置の各々の前記転送制御部は、
前記複数の情報処理装置の各々の前記演算処理装置による前記第１の演算の完了に基づいて、前記他の情報処理装置の前記演算処理部のそれぞれが前記第２の演算で使用するデータを前記主記憶装置から読み出し、読み出したデータを前記他の情報処理装置の前記転送制御部にそれぞれ出力し、
前記他の情報処理装置の前記転送制御部から受信したデータを前記バッファ部に格納することを特徴とする請求項１または請求項２記載の情報処理システム。
【請求項５】
前記複数の情報処理装置の各々の前記転送制御部は、
前記他の情報処理装置の前記主記憶装置に前記第２の演算の対象データが残っている場合、前記演算処理部が実行した演算の結果データを前記他の情報処理装置の前記主記憶装置に格納する指示と、前記他の情報処理装置の前記主記憶装置から前記第２の演算の対象データを読み出す指示とを含む格納読出要求を前記他の情報処理装置に発行し、
前記他の情報処理装置の転送制御部からの前記格納読出要求に基づいて、前記格納読出要求とともに受信する前記結果データを前記主記憶装置に格納するとともに、前記第２の演算の対象データを前記主記憶装置から読み出して、前記格納読出要求の発行元の情報処理装置に出力することを特徴とする請求項１ないし請求項４のいずれか１項記載の情報処理システム。
【請求項６】
前記複数の情報処理装置の各々の前記転送制御部は、前記演算処理部が実行した演算の結果データを、前記他の情報処理装置にブロードキャストすることを特徴とする請求項１ないし請求項５のいずれか１項記載の情報処理システム。
【請求項７】
前記複数の情報処理装置間で転送されるデータは、パケットにより転送され、
前記バッファ部は、各パケットで転送可能な最大サイズのデータを、前記複数の情報処理装置の前記主記憶装置にそれぞれ対応して保持可能な記憶容量を有することを特徴とする請求項１ないし請求項６のいずれか１項記載の情報処理システム。
【請求項８】
情報処理システムに含まれる情報処理装置において、
第１の演算を実行する演算処理装置と、
演算に使用するデータを記憶する主記憶装置と、
前記情報処理システムに含まれる他の情報処理装置との間でのデータの転送を制御する制御装置を有し、
前記制御装置は、
第２の演算を実行する演算処理部と、
前記演算処理部が実行する前記第２の演算で使用するデータを保持するバッファ部と、
前記主記憶装置から前記バッファ部へのデータの転送と、前記他の情報処理装置が有する主記憶装置から前記バッファ部へのデータの転送とを制御するとともに、前記演算処理部が実行した前記第２の演算の結果データの前記主記憶装置への転送と、前記第２の演算の結果データの前記他の情報処理装置が有する主記憶装置への転送とを制御する転送制御部を有することを特徴とする情報処理装置。
【請求項９】
各々が、第１の演算を実行する演算処理装置と、演算に使用するデータを記憶する主記憶装置と、他の情報処理装置との間でのデータの転送を制御する制御装置とを有する複数の情報処理装置を含む情報処理システムの制御方法において、
前記制御装置が有する転送制御部が、前記主記憶装置から前記制御装置が有するバッファ部へのデータの転送と、前記他の情報処理装置が有する主記憶装置から前記バッファ部へのデータの転送とを制御し、
前記制御装置が有する演算処理部が、前記バッファ部に格納されたデータを使用して第２の演算を実行し、
前記転送制御部が、前記演算処理部が実行した前記第２の演算の結果データの前記演算処理部が含まれる自情報処理装置が有する主記憶装置への転送と、前記第２の演算の結果データの前記他の情報処理装置が有する主記憶装置への転送とを制御することを特徴とする情報処理システムの制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理装置および情報処理システムの制御方法に関する。
【背景技術】
【０００２】
複数のノードを含み演算を並列に実行する情報処理システムを使用してディープラーニング等の処理を実行する場合、他のノードから集めたデータを使用して各ノードで演算を実行し、各ノードの演算結果を他の全てのノードに対してブロードキャストするオールリデュース処理が実行される（例えば、特許文献１、２参照）。また、ＣＰＵ（Central Processing Unit）とＤＳＰ（Digital Signal Processor）とＤＭＡＣ（Direct Memory Access Controller）とを含む信号処理装置では、ＤＳＰ内の複数のメモリの各々と外部装置との間のＤＭＡ転送は、ＤＳＰが実行するプログラム中に埋め込まれたＤＭＡ命令により実行される。これにより、ＣＰＵの負荷を増加することなく、メモリと外部装置との間のデータ転送とＤＳＰによるデータの演算とが、並列に実行される（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】国際公開第２０１１／０５８６４０号
【特許文献２】特開２０１５−２３３１７８号公報
【特許文献３】特開平８−１１５２１３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
オールリデュース処理では、複数のノードの主記憶装置に記憶された演算用のデータが他の全てのノードの主記憶装置に転送され、各ノードは、主記憶装置に保持されたデータの演算を実行し、演算により得られた結果データを主記憶装置に格納する。この後、各ノードは、主記憶装置に格納された結果データを、他のノードに分配する。各ノードに設けられるＣＰＵ等の演算処理装置は、主記憶装置に保持されたデータの演算を実行している間、他の演算を実行することができない。
【０００５】
１つの側面では、本発明は、複数の情報処理装置が相互に転送したデータを使用して演算を実行し、演算により得られた結果データを各情報処理装置に転送する情報処理システムにおいて、各情報処理装置における、転送したデータに対する演算以外の他の演算の処理性能の低下を抑止することを目的とする。
【課題を解決するための手段】
【０００６】
一つの実施態様では、複数の情報処理装置を含む情報処理システムにおいて、複数の情報処理装置の各々は、第１の演算を実行する演算処理装置と、データを記憶する主記憶装置と、複数の情報処理装置の間でのデータの転送を制御する制御装置を有し、制御装置は、第２の演算を実行する演算処理部と、演算処理部が実行する第２の演算で使用するデータを保持するバッファ部と、主記憶装置からバッファ部へのデータの転送と、複数の情報処理装置のうちの他の情報処理装置が有する主記憶装置からバッファ部へのデータの転送とを制御するとともに、演算処理部が実行した第２の演算の結果データの演算処理部が含まれる自情報処理装置が有する主記憶装置への転送と、第２の演算の結果データの他の情報処理装置が有する主記憶装置への転送とを制御する転送制御部を有する。
【発明の効果】
【０００７】
１つの側面では、本発明は、複数の情報処理装置が相互に転送したデータを使用して演算を実行し、演算により得られた結果データを各情報処理装置に転送する情報処理システムにおいて、各情報処理装置における、転送したデータに対する演算以外の他の演算の処理性能の低下を抑止することができる。
【図面の簡単な説明】
【０００８】
【図１】情報処理システム、情報処理装置および情報処理システムの制御方法の一実施形態を示す図である。
【図２】図１に示す情報処理システムの動作の一例を示す図である。
【図３】図１に示す情報処理システムと異なる他の情報処理システムの動作の一例を示す図である。
【図４】情報処理システム、情報処理装置および情報処理システムの制御方法の別の実施形態を示す図である。
【図５】図４に示すＤＭＡユニットの一例を示す図である。
【図６】図５に示すＤＭＡユニットの動作の一例を示す図である。
【図７】図４に示す情報処理システムで使用されるパケットのフォーマットの一例を示す図である。
【図８】図４に示す情報処理システムで使用されるパケットのフォーマットの一例（図７の続き）を示す図である。
【図９】図４に示すＤＭＡエンジンの動作の概要を示す図である。
【図１０】図４に示す各ノードのメモリに格納されるデータと、リデュース演算の担当ノードとの関係の一例を示す図である。
【図１１】図４に示す情報処理システムにおいて、各ノードがデータを収集し、リデュース演算を並列に実行する動作の概要を示す図である。
【図１２】図９において各ノードが並列に実行したリデュース演算の結果データを分配する動作の概要を示す図である。
【図１３】図４に示す情報処理システムの動作の一例を示す図である。
【図１４】図１３の動作の続きを示す図である。
【図１５】図１３および図１４に示すマスタの動作フローの一例を示す図である。
【図１６】図１３および図１４に示すスレーブの動作フローの一例を示す図である。
【図１７】図４に示す情報処理システムが実行するディープラーニングの一例を示す図である。
【図１８】図４に示す情報処理システムと異なる他の情報処理システムの一例を示す図である。
【図１９】図１８に示すＤＭＡエンジンの動作の概要を示す図である。
【図２０】図１８に示す情報処理システムの動作の一例を示す図である。
【図２１】情報処理システムの別の実施形態における動作の一例を示す図である。
【図２２】情報処理システムの別の実施形態における動作の一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、図面を用いて実施形態を説明する。
【００１０】
図１は、情報処理システム、情報処理装置および情報処理システムの制御方法の一実施形態を示す。図１に示す情報処理システム１００は、ネットワークＮＷを介して相互に接続される複数の情報処理装置１を有する。なお、情報処理システム１００に含まれる情報処理装置１の数は、２つに限定されない。情報処理装置１の各々は、演算処理装置２、主記憶装置３および制御装置４を有する。例えば、演算処理装置２、主記憶装置３および制御装置４は、共通のバスＢＵＳを介して相互に接続される。
【００１１】
演算処理装置２は、例えば、積和演算等を実行する複数の演算器を有する。積和演算は、第１の演算の一例である。主記憶装置３は、演算処理装置２が実行する演算に使用するデータおよび後述する演算処理部５が実行する演算に使用するデータを記憶する。制御装置４は、複数の情報処理装置１間でのデータの転送を制御する。以下では、各情報処理装置１は、ノードとも称される。
【００１２】
制御装置４は、演算処理部５、バッファ部６および転送制御部７を有する。例えば、バッファ部６は、共通のバスＢＵＳ等を介することなく、転送制御部７および演算処理部５に接続される。演算処理部５は、例えば、複数の加算器と除算器とを有し、複数のデータ毎に平均値を算出する。加算器と除算器によりデータの平均値を算出する演算は、第２の演算の一例である。バッファ部６は、演算処理部５が実行する演算で使用するデータであって、主記憶装置３から転送されるデータを保持する。
【００１３】
転送制御部７は、自ノードの主記憶装置３から自ノードのバッファ部６にデータを転送する制御を実行するとともに、他ノードの主記憶装置３から自ノードのバッファ部６にデータを転送する制御を実行する。また、転送制御部７は、自ノードのバッファ部６に格納されたデータを使用して自ノードの演算処理部５が実行した演算の結果データを、自ノードの主記憶装置３と他ノードの主記憶装置３とに転送する制御を実行する。以下では、演算対象のデータを自ノードおよび他ノードから集め、集めたデータを使用して実行される演算は、リデュース演算とも称される。
【００１４】
図１に示す複数の情報処理装置１の各々は、自ノードおよび他ノードの主記憶装置３に保持されたデータを、自ノードのバッファ部６に格納し、バッファ部６に格納されたデータを使用して演算処理部５によりリデュース演算を実行する。そして、複数の情報処理装置１の各々は、演算処理部５によるリデュース演算で得られた結果データを自ノードおよび全ての他ノードに対して送信することにより、自ノードおよび全ての他ノードの主記憶装置３に当該結果データを格納する。すなわち、情報処理システム１００は、オールリデュース処理を実行する。
【００１５】
図２は、図１に示す情報処理システム１００の動作の一例を示す。各情報処理装置１は、図２に示すマスタの動作とスレーブの動作とを並列に実行する。すなわち、マスタの動作とスレーブの動作は、全ての情報処理装置１のそれぞれで実行される。
【００１６】
まず、各情報処理装置１は、演算処理装置２を動作させて主記憶装置３からデータを読み出し、積和演算等の演算処理を実行し、演算結果をリデュース演算に使用するデータとして、自ノードの主記憶装置３に格納する。全ての情報処理装置１の演算処理装置２での演算が完了したことに基づいて、マスタとして動作する情報処理装置１の転送制御部７は、他の情報処理装置１に読み出し要求を発行する（図２（ａ））。演算処理装置２での演算の完了に基づいて、他の情報処理装置１に発行される読み出し要求は、データの転送要求の一例である。また、転送制御部７は、自ノードの主記憶装置３に読み出し要求を発行し、主記憶装置３から読み出したデータをバッファ部６に格納する（図２（ｂ）、（ｃ））。
【００１７】
スレーブとして動作する情報処理装置１の転送制御部７は、他の情報処理装置１から読み出し要求を受けた場合、自ノードの主記憶装置３に読み出し要求を発行し、主記憶装置３からデータを読み出す（図２（ｄ）、（ｅ））。そして、転送制御部７は、主記憶装置３から読み出したデータを、マスタとして動作する情報処理装置１に出力する（図２（ｆ））。マスタとして動作する情報処理装置１の転送制御部７は、スレーブとして動作する情報処理装置１から受けたデータをバッファ部６に格納する（図２（ｇ））。以下の説明では、マスタとして動作する情報処理装置１の転送制御部７は、転送制御部７（マスタ）とも称される。
【００１８】
バッファ部６は、図1に示すバスＢＵＳ等を介することなく、転送制御部７に接続される。このため、転送制御部７からバッファ部６へのデータの転送時間を、転送制御部７から主記憶装置３へのデータの転送時間に比べて短縮することができる。
【００１９】
全ての情報処理装置１の主記憶装置３からバッファ部６へのデータの転送が完了した後、マスタとして動作する情報処理装置１の演算処理部５は、バッファ部６に保持されたデータを使用してリデュース演算を実行する（図２（ｈ））。リデュース演算に使用するデータは、バッファ部６に格納されるため、リデュース演算に使用するデータを格納する記憶領域を主記憶装置３に確保することなく、リデュース演算を実行することができる。また、バッファ部６は、共通のバスＢＵＳ等を介することなく、演算処理部５に接続されるため、バッファ部６から演算処理部５へのデータの転送時間を、主記憶装置３から演算処理部５へのデータの転送時間に比べて短縮することができる。
【００２０】
演算処理部５が実行するリデュース演算は、例えば、複数の情報処理装置１の主記憶装置３からそれぞれ読み出されたデータの平均値を算出する演算である。各主記憶装置３からバッファ部６に転送されるデータは、例えば、複数の要素データを含む配列データである。演算処理部５は、複数の配列データから要素データをそれぞれ取り出して、取り出した要素データ毎に平均値を算出する。すなわち、演算処理部５は、複数のリデュース演算を繰り返し実行する。
【００２１】
リデュース演算は、演算処理部５がバッファ部６にアクセスすることで実行されるため、演算処理装置２を使用することなく実行され、かつ、主記憶装置３にアクセスすることなく実行される。このため、演算処理装置２は、演算処理部５がリデュース演算の実行中に、主記憶装置３にアクセスして他の演算処理を実行することができ、オールリデュース処理を実行する場合にも他の演算の処理性能が低下することを抑止することができる。また、リデュース演算は主記憶装置３にアクセスすることなく実行されるため、主記憶装置３へのアクセス効率がリデュース演算の実行により低下することを抑止することができる。
【００２２】
転送制御部７（マスタ）は、バッファ部６に保持されたデータを使用したリデュース演算の完了に基づいて、自ノードの主記憶装置３に書き込み要求を発行し、リデュース演算の結果データを主記憶装置３に格納する（図２（ｉ））。また、転送制御部７（マスタ）は、スレーブとして動作する情報処理装置１に書き込み要求を発行する（図２（ｊ））。書き込み要求を受けた転送制御部７は、自ノードの主記憶装置３に書き込み要求を発行し、マスタとして動作する情報処理装置１が実行したリデュース演算の結果データを主記憶装置３に格納する（図２（ｋ））。
【００２３】
この後、情報処理システム１００は、図２（ａ）から図２（ｋ）に示す動作を繰り返し実行する。すなわち、転送制御部７（マスタ）は、他ノードの情報処理装置１と自ノードの主記憶装置３に読み出し要求を発行し、次のリデュース演算に使用するデータを全てのノードの主記憶装置３から読み出す。そして、転送制御部７は、読み出したデータをバッファ部６に格納する。マスタとして動作する情報処理装置１の演算処理部５は、バッファ部６に保持されたデータを使用してリデュース演算を実行する。転送制御部７（マスタ）は、リデュース演算の完了に基づいて、リデュース演算の結果データを自ノードと他ノードの主記憶装置３に格納する処理を実行する。
【００２４】
図３は、図１に示す情報処理システム１００と異なる他の情報処理システムの動作の一例を示す。図２と同様の動作については、詳細な説明は省略する。図３に示す動作を実行する情報処理システムの各情報処理装置は、図１に示す演算処理部５およびバッファ部６を持たないことを除き、図１に示す情報処理装置１と同様の構成である。すなわち、情報処理装置の各々は、演算処理装置と、主記憶装置と、演算処理部５およびバッファ部６を持たない制御装置とを有する。各情報処理装置は、主記憶装置に保持されたデータを使用して、演算処理装置によりリデュース演算を実行する。
【００２５】
まず、図２と同様に、各情報処理装置は、演算処理装置を動作させて主記憶装置３からデータを読み出し、積和演算等の演算処理を実行し、演算結果を自ノードの主記憶装置に格納する。全ての情報処理装置の演算処理装置での演算が完了したことに基づいて、マスタとして動作する情報処理装置の転送制御部は、スレーブとして動作する情報処理装置に読み出し要求を発行する（図３（ａ））。
【００２６】
スレーブとして動作する情報処理装置の転送制御部は、マスタとして動作する情報処理装置から読み出し要求を受けた場合、自ノードの主記憶装置に読み出し要求を発行し、主記憶装置からデータを読み出す（図３（ｂ）、（ｃ））。そして、転送制御部は、主記憶装置から読み出したデータを、マスタとして動作する情報処理装置に出力する（図３（ｄ））。マスタとして動作する情報処理装置の転送制御部は、スレーブとして動作する情報処理装置から受けたデータを主記憶装置に格納する（図３（ｅ））。
【００２７】
マスタとして動作する情報処理装置の演算処理装置は、スレーブとして動作する情報処理装置の主記憶装置から自ノードの主記憶装置へのデータの格納が完了した後、主記憶装置に保持されたデータを使用してリデュース演算を開始する（図３（ｆ））。演算処理装置は、リデュース演算の対象データの主記憶装置からのロードと、リデュース演算の結果データの主記憶装置へのストアとを繰り返し実行しながら、リデュース演算の処理を実行する。
【００２８】
転送制御部（マスタ）は、リデュース演算の実行の完了に基づいて、自ノードの主記憶装置に読み出し要求を発行し、リデュース演算の結果データを主記憶装置から読み出す（図３（ｇ）、（ｈ））。転送制御部（マスタ）は、スレーブとして動作する情報処理装置に書き込み要求を発行する（図３（ｉ））。書き込み要求を受けた転送制御部は、自ノードの主記憶装置に書き込み要求を発行し、リデュース演算の結果データを主記憶装置に格納する（図３（ｊ））。
【００２９】
この後、情報処理システムは、図３（ａ）から図３（ｊ）に示す動作を繰り返し実行する。すなわち、転送制御部（マスタ）は、スレーブとして動作する情報処理装置に読み出し要求を発行し、次のリデュース演算に使用するデータを他ノードの主記憶装置から読み出し、読み出したデータを主記憶装置に格納する。マスタとして動作する情報処理装置の演算処理装置は、主記憶装置に保持されたデータを使用してリデュース演算を実行する。転送制御部（マスタ）は、リデュース演算の完了に基づいて、リデュース演算の結果データをスレーブとして動作する情報処理装置の主記憶装置に格納する処理を実行する。
【００３０】
図３に示す動作を実行する情報処理システムでは、主記憶装置は共通のバスを介して転送制御部に接続される。このため、転送制御部によるデータの主記憶装置への転送時間は、図１に示した転送制御部７によるデータのバッファ部６への転送時間に比べて長くなる。これにより、図３では、図２に比べて、リデュース演算の開始が遅れてしまう。また、リデュース演算で使用するデータの主記憶装置からの読み出し時間も、図１に示すバッファ部６からのデータの読み出し時間より長くなる。このため、リデュース演算の実行時間は、図２に比べて長くなる。さらに、リデュース演算の対象データが主記憶装置に格納されるため、図１に示す情報処理システム１００に比べて、リデュース演算のために主記憶装置３内で使用する記憶領域が増加し、空き領域が減少する。
【００３１】
また、リデュース演算の結果データが主記憶装置に格納されるため、スレーブとして動作する情報処理装置へのデータの転送は、主記憶装置から結果データを読み出すことで実行される。これにより、図２に比べて、スレーブとして動作する情報処理装置に結果データを転送するタイミングが遅くなり、スレーブとして動作する情報処理装置からの次のリデュース演算の対象データを読み出すタイミングが遅くなる。さらに、演算処理装置は、リデュース演算を実行している間、他の演算を実行することができず、演算処理装置がリデュース演算のために主記憶装置にアクセスしている間、他の装置は、主記憶装置にアクセスできない。
【００３２】
この結果、図３に示す動作を実行する情報処理システムでは、図１に示す情報処理システム１００に比べて、各情報処理装置による演算性能が低下する。
【００３３】
以上、図１および図２に示す実施形態では、リデュース演算は、演算処理装置２を使用することなく実行され、かつ、主記憶装置３にアクセスすることなく実行される。このため、演算処理装置２は、演算処理部５がリデュース演算を実行中に他の演算を実行することができ、オールリデュース処理により他の演算の処理性能が低下することを抑止することができる。また、リデュース演算は主記憶装置３にアクセスすることなく実行されるため、主記憶装置３へのアクセス効率がリデュース演算の実行により低下することを抑止することができる。
【００３４】
転送制御部７からバッファ部６へのリデュース演算の対象データの転送時間を、転送制御部７から主記憶装置３への対象データの転送時間に比べて短縮することができるため、図３に比べてリデュース演算を早く開始することができる。また、バッファ部６から演算処理部５への対象データの転送時間を、主記憶装置３から演算処理装置２への対象データの転送時間に比べて短縮することができるため、リデュース演算の実行時間を図３に比べて短縮することができる。
【００３５】
リデュース演算の結果データは、主記憶装置３に格納されることなくスレーブとして動作する情報処理装置１の主記憶装置３に転送される。アクセスレイテンシがバッファ部６に比べて大きい主記憶装置３を介さずに結果データを転送できるため、図３に比べて、次のリデュース演算に使用するデータのバッファ部６への転送を早く開始することができ、次のリデュース演算を早く開始することができる。
【００３６】
リデュース演算に使用するデータが、主記憶装置３でなく、バッファ部６に格納されるため、リデュース演算に使用するデータを格納する記憶領域を主記憶装置３に確保することなく、リデュース演算を実行することができる。
【００３７】
以上より、オールリデュース処理を実行する情報処理システム１００の処理性能を、図３に比べて向上することができる。
【００３８】
図４は、情報処理システム、情報処理装置および情報処理システムの制御方法の別の実施形態を示す。図４に示す情報処理システム１００Ａは、４つのノードＮＤ（ＮＤ０、ＮＤ１、ＮＤ２、ＮＤ３）、ホストＣＰＵ１０および記憶装置１２を有する。ノードＮＤ０−ＮＤ３は、情報を処理する情報処理装置の一例である。
【００３９】
ホストＣＰＵ１０は、情報処理システム１００Ａの全体の動作を制御し、例えば、ノードＮＤ０−ＮＤ３にディープラーニングを実行させる。記憶装置１２は、ホストＣＰＵ１０が実行する制御プログラムと、ノードＮＤ０−ＮＤ３が実行する学習に使用されるデータ等とを保持する。学習に使用するデータは、ホストＣＰＵ１０の制御により、記憶装置１２から各ノードＮＤ０−ＮＤ３のメモリ２４に格納される。
【００４０】
各ノードＮＤ０−ＮＤ３は、互いに同じ構成であるため、以下では、ノードＮＤ０の構成が説明される。ノードＮＤ０は、演算ユニット２０、メモリコントローラ２２、メモリ２４およびＤＭＡエンジン２６を有する。演算ユニット２０は、演算処理装置の一例であり、メモリ２４は、主記憶装置３の一例であり、ＤＭＡエンジン２６は、複数のノードＮＤ０−ＮＤ３間でのデータの転送を制御する制御装置の一例である。
【００４１】
演算ユニット２０、メモリコントローラ２２およびＤＭＡエンジン２６は、共通のバスＢＵＳにより相互に接続される。ＤＭＡエンジン２６は、演算ユニット２８、バッファ３０Ａ、３０ＢおよびＤＭＡユニット３２を有する。演算ユニット２８は、演算処理部の一例であり、バッファ３０Ａ、３０Ｂは、バッファ部の一例であり、ＤＭＡユニット３２は、転送制御部の一例である。特に限定されないが、演算ユニット２０、メモリコントローラ２２およびＤＭＡエンジン２６は、１つの半導体チップに含まれ、この半導体チップとメモリ２４とが基板に実装される。
【００４２】
演算ユニット２０は、例えば、浮動小数点用の複数の積和演算器等を有する。演算ユニット２０は、ホストＣＰＵ１０が実行するディープラーニングにおいて、学習用のデータ（例えば、画像データ）の特徴を抽出するための演算、および抽出した特徴データと正解データとの誤差を算出するための演算を実行する。演算ユニット２０が実行する積和演算等は、第１の演算の一例である。
【００４３】
メモリ２４は、演算ユニット２０が使用するデータと、ＤＭＡエンジン２６内の演算ユニット２８が使用するデータとを記憶する。例えば、メモリ２４は、ＨＢＭ（High Bandwidth Memory）である。なお、メモリ２４は、ＳＤＲＡＭ（Synchronous Dynamic Random Access Memory）等を含むメモリモジュールでもよい。
【００４４】
演算ユニット２８は、浮動小数点用の加算器および除算器等の複数の演算器を有する。そして、演算ユニット２８は、自ノードＮＤ０内のデータおよび他ノードＮＤ２−ＮＤ３から集められたデータを用いて平均化処理等の演算を実行する。すなわち、ＤＭＡエンジン２６は、複数のノードＮＤから集められたデータを束ねて処理するリデュース処理を実行する。リデュース処理は、他のノードＮＤ１−ＮＤ３のＤＭＡエンジン２６でも実行されるため、情報処理システム１００Ａの全体では、オールリデュース処理が実行される。オールリデュース処理の例は、図９から図１４で説明される。
【００４５】
以下では、リデュース処理のために演算ユニット２８が実行する演算は、リデュース演算とも称される。演算ユニット２８が実行するリデュース演算は、第２の演算の一例である。バッファ３０Ａ、３０Ｂは、リデュース演算で使用するデータをそれぞれ保持する。
【００４６】
演算ユニット２８は、バッファ３０Ａ、３０Ｂに保持されたデータを交互に使用してリデュース演算を実行する。これにより、バッファ３０Ａに保持されたデータのリデュース演算中に、次のリデュース演算用のデータをバッファ３０Ｂに格納することができる。すなわち、リデュース演算の裏でデータ転送を実行することで、リデュース演算を連続して実行することができる。
【００４７】
バッファ３０Ａ、３０Ｂのアクセスレイテンシは、メモリ２４のアクセスレイテンシより小さい。このため、演算ユニット２８は、メモリ２４からデータを読み出す場合に比べて、バッファ３０Ａ、３０Ｂからデータを高速に読み出すことができる。また、ＤＭＡユニット３２は、メモリ２４にデータを格納する場合に比べて、バッファ３０Ａ、３０Ｂにデータを高速に格納することができる。
【００４８】
ＤＭＡユニット３２は、ホストＣＰＵ１０を介して記憶装置１２と自ノードＮＤ０のメモリ２４との間でデータを転送する機能を有する。また、ＤＭＡユニット３２は、自ノードＮＤ０のメモリ２４または他ノードＮＤ２−ＮＤ３のメモリ２４から自ノードＮＤ０のバッファ３０Ａ、３０Ｂにデータを転送する機能を有する。さらに、ＤＭＡユニット３２は、リデュース演算により得られる結果データを、自ノードＮＤ０のメモリ２４または他ノードＮＤ２−ＮＤ３のメモリ２４に転送する機能を有する。なお、ＤＭＡユニット３２は、自ノードＮＤ０のメモリ２４に保持されたデータを他ノードＮＤ２−ＮＤ３のバッファ３０Ａ、３０Ｂに転送する機能を有してもよい。
【００４９】
なお、各ノードＮＤ０−ＮＤ３は、リデュース演算を実行する他ノードＮＤに演算の対象データを転送するスレーブとして動作するとともに、リデュース演算を実行し、リデュース演算の結果データを他ノードＮＤに転送するマスタとして動作する。すなわち、各ノードＮＤ０−ＮＤ３は、スレーブによる処理とマスタによる処理とを混在して実行する。そして、４つのノードＮＤ０−ＮＤ３は、リデュース演算を並列に実行することにより、オールリデュース処理を実行する。以下では、説明を分かりやすくするために、マスタによる動作とスレーブによる動作とを区別して記載する場合がある。
【００５０】
図５は、図４に示すＤＭＡユニット３２の一例を示す。ＤＭＡユニット３２は、ディスクリプタ保持部３４、リクエスト管理部３６、シーケンサ３８、メモリアクセス制御部４０、要求制御部４２、応答制御部４４、パケット送信部４６およびパケット受信部４８を有する。
【００５１】
ディスクリプタ保持部３４は、オールリデュース処理の実行時に起動されるＤＭＡ転送の指示を含むディスクリプタを保持する複数のエントリを有する。例えば、ディスクリプタは、オールリデュース処理を実行する他ノードＮＤを識別する情報と、自ノードＮＤが実行するリデュース演算の対象データを保持するメモリ２４の領域情報とを含む。また、ディスクリプタは、他ノードＮＤがそれぞれ実行するリデュース演算の対象データを保持する他ノードのメモリ２４の領域情報を含む。なお、他ノードＮＤのメモリ２４の領域情報を、自ノードＮＤのメモリ２４の領域情報に基づいて間接的に求めることが可能な場合、他ノードのメモリ２４の領域情報は、ディスクリプタに含まれなくてもよい。
【００５２】
例えば、ディスクリプタに含まれるメモリ２４の領域情報は、リデュース演算の対象データを保持する記憶領域の先頭アドレスと対象データのサイズ（データ長）とを含む。なお、リデュース演算により得られる結果データを、リデュース演算前の対象データを保持するメモリ２４の記憶領域とは別の記憶領域に格納する場合、ディスクリプタは、さらに、結果データを格納する記憶領域を示す情報を含む。
【００５３】
ディスクリプタ保持部３４に格納されるディスクリプタは、図４に示す記憶装置１２に保持される。そして、ディスクリプタは、ＤＭＡユニット３２がホストＣＰＵ１０に発行する転送要求パケットに応答して、ホストＣＰＵ１０を介して記憶装置１２からＤＭＡユニット３２に転送され、ディスクリプタ保持部３４に格納される。
【００５４】
例えば、ＤＭＡユニット３２は、複数のディスクリプタを記憶装置１２からディスクリプタ保持部３４に予め転送する。そして、ＤＭＡユニット３２は、ディスクリプタで指示される所定サイズのデータのリデュース演算が完了する毎に、新たなディスクリプタを記憶装置１２からディスクリプタ保持部３４に転送する。例えば、所定サイズは、ＤＭＡユニット３２によるデータの最大転送単位である１６ＭＢ（メガバイト）である。なお、ＤＭＡユニット３２によるデータの最大転送単位は、１６ＭＢに限定されず、所定サイズは、ＤＭＡユニット３２によるデータの最大転送単位より小さくてもよい。
【００５５】
リクエスト管理部３６は、所定量のデータのリデュース演算を実行するためにシーケンサ３８を起動する場合、ディスクリプタ保持部３４から対象のディスクリプタを取り出し、取り出したディスクリプタをシーケンサ３８に出力する。
【００５６】
シーケンサ３８は、リクエスト管理部３６からのディスクリプタの受信に基づいて起動される。シーケンサ３８は、ディスクリプタで指示された所定サイズのデータのリデュース演算が完了するまで、リデュース演算に使用するデータの転送と、リデュース演算と、リデュース演算により得られた結果データの転送とを制御する。例えば、ディスクリプタで指示される所定サイズが１６ＭＢであり、メモリ２４のアクセスの単位（後述するパケットの最大データサイズ）が２ＫＢ（キロバイト）であるとする。この場合、記憶装置１２から各ノードＮＤのメモリ２４に１６ＭＢのデータが転送される毎に、リデュース演算とリデュース演算の前後のデータ転送とが、２ＫＢ単位で実行される。なお、メモリ２４にアクセスする単位は、後述するパケットで転送可能な最大データサイズ（最大ペイロードサイズ）に依存して決められ、２ＫＢに限定されない。
【００５７】
シーケンサ３８は、自ノードＮＤ内でデータの転送を制御する場合、メモリアクセス制御部４０にメモリ２４のアクセス要求を発行し、自ノードＮＤから他ノードＮＤへのデータの転送を制御する場合、要求制御部４２に各種要求を発行する。シーケンサ３８が実行するデータ転送の制御の例は、図６に示される。なお、シーケンサ３８は、バッファ３０Ａ、３０Ｂを交互に使用して、演算ユニット２８にリデュース演算を実行させる。このため、シーケンサ３８は、フェッチ要求等に基づいてメモリ２４からデータが読み出されるタイミングに合わせて、バッファ３０Ａ、３０Ｂのいずれかを制御してデータを受信させる。また、シーケンサ３８は、各バッファ３０Ａ、３０Ｂから出力されるデータの格納状況を示す情報に基づいて、バッファ３０Ａ、３０Ｂのいずれかにリデュース演算の対象データの格納が完了したことを確認する。そして、シーケンサ３８は、対象データの格納が完了したバッファ３０Ａ、３０Ｂのいずれかに、リデュース演算の開始指示を出力する。リデュース演算の開始の指示を受信したバッファ３０Ａ、３０Ｂのいずれかは、リデュース演算の対象データと演算の開始指示とを演算ユニット２８に出力する。
【００５８】
演算ユニット２８は、バッファ３０Ａ、３０Ｂのいずれかから受けたデータを用いてリデュース演算を実行する。演算ユニット２８は、リデュース演算の結果データをストアバッファ４０ｃとパケット送信部４６の送信バッファ４６ａとに格納する。また、演算ユニット２８は、リデュース演算の完了を示す完了情報をシーケンサ３８に出力する。シーケンサ３８は、完了情報に基づいて、リデュース演算の結果データを自ノードＮＤのメモリ２４に格納するために、メモリ２４のアクセス要求をメモリアクセス制御部４０に出力する。また、シーケンサ３８は、完了情報に基づいて、リデュース演算の結果データを他ノードＮＤのメモリ２４に格納するために、後述するリデュースＢＣ（broadcast）要求またはリデュースＢＣ＆Ｇｅｔ要求を要求制御部４２に出力する。
【００５９】
メモリアクセス制御部４０は、フェッチ要求管理部４０ａ、ストア要求管理部４０ｂおよびストアバッファ４０ｃを有する。ストアバッファ４０ｃには、自ノードＮＤの演算ユニット２８が実行したリデュース演算の結果データが格納される。フェッチ要求管理部４０ａおよびストア要求管理部４０ｂの動作の例は、図６に示される。
【００６０】
要求制御部４２は、シーケンサ３８から受信する各種要求をパケット送信部４６に出力し、パケット受信部４８から受信する各種要求をメモリアクセス制御部４０に出力する。応答制御部４４は、他ノードＮＤが発行した自ノードＮＤのメモリ２４へのアクセス要求に対応して、自ノードのメモリ２４からデータを受信した場合、応答を生成してパケット送信部４６に出力する。応答制御部４４は、他ノードＮＤが発行した応答に含まれるデータをパケット受信部４８から受けた場合、受けたデータをバッファ３０Ａ、３０Ｂのいずれかに格納する。また、応答制御部４４は、自ノードＮＤが他ノードＮＤに発行した各種要求に対応する応答をパケット受信部４８から受けた場合、応答を他ノードＮＤから受信したことを示す情報をシーケンサ３８に出力する。
【００６１】
パケット送信部４６は、他ノードＮＤのそれぞれに対応して、他ノードＮＤに送信するパケットが格納される複数の送信バッファ４６ａを有する。各送信バッファ４６ａは、複数のパケットを格納する複数のエントリを有する。パケット送信部４６は、要求制御部４２および応答制御部４４から受ける各種要求と情報とに基づいて、パケットを生成し、生成したパケットを宛先毎に送信バッファ４６ａに格納する。パケット送信部４６は、送信バッファ４６ａに格納されたパケットを順次発行する。
【００６２】
パケット受信部４８は、他ノードＮＤのそれぞれに対応して、他ノードＮＤから受けるパケットが格納される複数の受信バッファ４８ａを有する。各受信バッファ４８ａは、複数のパケットを格納する複数のエントリを有する。パケット受信部４８は、受信バッファ４８ａに格納された要求パケットに基づいて、各種要求を要求制御部４２に出力し、受信バッファ４８ａに格納された応答パケットに基づいて、各種応答を応答制御部４４に出力する。
【００６３】
なお、メモリコントローラ２２は、メモリアクセス制御部４０からのフェッチ要求パケットに基づいて、メモリ２４にメモリアクセス要求（リード）を発行する。メモリコントローラ２２は、メモリアクセス制御部４０からのストア要求パケットに基づいて、メモリ２４にメモリアクセス要求（ライト）を発行する。メモリアクセス要求は、例えば、２ＫＢのデータを読み出し、または書き込むまで繰り返し発行される。
【００６４】
図６は、図５に示すＤＭＡユニット３２の動作の一例を示す。図６（Ａ）は、自ノードにデータの転送要求を発行する場合の動作の例を示す。図６（Ｂ）は、他ノードにデータの転送要求を発行する場合の動作の例を示す。図６（Ｃ）は、他ノードからデータの転送要求が発行される場合の動作の例を示す。破線の矢印は、データの転送を示す。例えば、メモリアクセス制御部４０は、メモリコントローラ２２へのアクセス要求をパケット形式で出力し、パケット送信部４６は、他ノードＮＤへの各種要求および各種要求をパケット形式で出力する。
【００６５】
図６（Ａ）において、シーケンサ３８は、自ノードＮＤのメモリ２４からデータを読み出してバッファ３０Ａ、３０Ｂのいずれかに格納する場合、フェッチ要求管理部４０ａにフェッチ要求を出力する（図６（ａ））。フェッチ要求管理部４０ａは、シーケンサ３８からフェッチ要求を受けた場合、フェッチ要求パケットを生成してメモリコントローラ２２に発行する（図６（ｂ））。メモリコントローラ２２は、フェッチ要求パケットに基づいてメモリ２４にアクセスする。メモリ２４から読み出されたデータは、バッファ３０Ａ、３０Ｂに格納される。
【００６６】
また、シーケンサ３８は、自ノードＮＤのメモリ２４にリデュース演算の結果データ等を書き込む場合、ストア要求管理部４０ｂにストア要求を出力する（図６（ｃ））。ストア要求管理部４０ｂは、シーケンサ３８からストア要求を受けた場合、ストアバッファ４０ｃに保持されたデータを含むストア要求パケットを生成してメモリコントローラ２２に発行する（図６（ｄ））。メモリコントローラ２２は、ストア要求パケットに基づいてメモリ２４にアクセスし、データをメモリ２４に書き込む。
【００６７】
シーケンサ３８は、自ノードＮＤのメモリ２４へのリデュース演算の結果データの書き込みに続いて、次のリデュース演算に使用するデータをメモリ２４から読み出す場合、フェッチ要求管理部４０ａにストア＆Ｎｅｘｔフェッチ要求を出力する（図６（ｅ））。例えば、フェッチ要求管理部４０ａは、シーケンサ３８からストア＆Ｎｅｘｔフェッチ要求を受けた場合、ストア＆Ｎｅｘｔフェッチ要求パケットをメモリコントローラ２２に発行する（図６（ｆ））。
【００６８】
メモリコントローラ２２は、ストア＆Ｎｅｘｔフェッチ要求パケットに基づいてメモリ２４にデータを書き込んだ後、次のリデュース演算に使用するデータをメモリ２４から読み出して出力する。メモリ２４から読み出されたデータは、バッファ３０Ａ、３０Ｂに格納される。なお、ストア＆Ｎｅｘｔフェッチ要求パケットは、ストア要求管理部４０ｂから発行されてもよい。例えば、リデュース演算の結果データは、メモリ２４において、リデュース演算に使用した元のデータを保持する記憶領域に上書きされる。次のリデュース演算の対象データを保持する記憶領域の先頭アドレスは、リデュース演算の結果データを上書きした記憶領域の最終アドレスの次のアドレスである。
【００６９】
なお、実際には、フェッチ要求パケットに基づいて、図示しないフェッチ応答パケットがメモリコントローラ２２から発行され、ストア要求パケットに基づいて、図示しないストア応答パケットがメモリコントローラ２２から発行される。また、ストア＆Ｎｅｘｔフェッチ要求パケットに基づいて、図示しないストア＆Ｎｅｘｔフェッチ応答パケットがメモリコントローラ２２から発行される。
【００７０】
図６（Ｂ）において、シーケンサ３８は、他ノードＮＤのメモリ２４からデータを読み出し、読み出したデータを自ノードＮＤのバッファ３０Ａ、３０Ｂのいずれかに格納する場合、要求制御部４２にリデュースＧｅｔ要求を出力する（図６（ｇ））。要求制御部４２は、シーケンサ３８からリデュースＧｅｔ要求を受けた場合、受けたリデュースＧｅｔ要求をパケット送信部４６に出力する（図６（ｈ））。パケット送信部４６は、要求制御部４２からのリデュースＧｅｔ要求に基づいてリデュースＧｅｔ要求パケットを生成し、生成したリデュースＧｅｔ要求パケットを他ノードＮＤに出力する（図６（ｉ））。リデュースＧｅｔ要求パケットを受信した他ノードＮＤは、後述する図６（ｒ）−図６（ｗ）に示す動作を実行する。
【００７１】
パケット受信部４８は、他ノードＮＤからのリデュースＧｅｔ応答パケット（データ）の受信に基づいて、リデュースＧｅｔ応答を応答制御部４４に出力する（図６（ｊ））。応答制御部４４は、他ノードＮＤからのリデュースＧｅｔ応答パケットに含まれるデータをバッファ３０Ａ、３０Ｂのいずれかに格納する（図６（ｋ））。データをバッファ３０Ａ、３０Ｂのいずれに格納するかは、リデュースＧｅｔ応答パケットの元となるリデュースＧｅｔ要求の発行時にシーケンサ３８により決められる。
【００７２】
シーケンサ３８は、自ノードＮＤのメモリ２４に格納されたリデュース演算の結果データを他ノードＮＤに転送する場合、要求制御部４２にリデュースＢＣ要求（またはリデュースＰｕｔ要求）を出力する（図６（ｌ））。リデュースＢＣ要求は、共通のデータを複数の他ノードＮＤのメモリ２４に格納する場合に使用される。要求制御部４２は、シーケンサ３８からリデュースＢＣ要求（またはリデュースＰｕｔ要求）を受けた場合、受けたリデュースＢＣ要求（またはリデュースＰｕｔ要求）をパケット送信部４６に出力する（図６（ｍ））。
【００７３】
パケット送信部４６は、要求制御部４２からのリデュースＢＣ要求に基づいてリデュースＢＣ要求パケットを他ノードＮＤに発行し、要求制御部４２からのリデュースＰｕｔ要求に基づいてリデュースＰｕｔ要求パケットを他ノードＮＤに発行する（図６（ｎ））。なお、リデュースＢＣ要求またはリデュースＰｕｔ要求が他ノードＮＤに発行される場合、他ノードＮＤに格納するデータが送信バッファ４６ａに予め格納される。リデュースＢＣ要求またはリデュースＰｕｔ要求を受信した他ノードＮＤは、後述する図６（ｘ）−図６（ｚ）に示す動作を実行する。
【００７４】
シーケンサ３８は、他ノードＮＤのメモリ２４へのリデュース演算の結果データの書き込みに続いて、次のリデュース演算の対象データを他ノードＮＤから読み出す場合、要求制御部４２にリデュースＢＣ＆Ｇｅｔ要求を出力する（図６（ｏ））。要求制御部４２は、シーケンサ３８からリデュースＢＣ＆Ｇｅｔ要求を受けた場合、受けたリデュースＢＣ＆Ｇｅｔ要求をパケット送信部４６に出力する（図６（ｐ））。パケット送信部４６は、要求制御部４２からのリデュースＢＣ＆Ｇｅｔ要求に基づいてリデュースＢＣ＆Ｇｅｔ要求パケットを生成し、生成したリデュースＢＣ＆Ｇｅｔ要求パケットを他ノードＮＤに出力する（図６（ｑ））。リデュースＢＣ＆Ｇｅｔ要求パケットを受信した他ノードＮＤは、後述する図６（ｚ１）−図６（ｚ４）に示す動作を実行する。リデュースＢＣ＆Ｇｅｔ要求に対応してリデュースＢＣ＆Ｇｅｔ応答パケットを他ノードＮＤから受信した場合のＤＭＡユニット３２の動作は、リデュースＧｅｔ応答パケットに基づく動作と同様である。
【００７５】
図６（Ｃ）において、パケット受信部４８は、リデュースＧｅｔ要求パケットを他ノードＮＤから受信した場合、リデュースＧｅｔ要求を要求制御部４２に出力する（図６（ｒ））。要求制御部４２は、リデュースＧｅｔ要求をフェッチ要求管理部４０ａに出力する（図６（ｓ））。フェッチ要求管理部４０ａは、要求制御部４２からリデュースＧｅｔ要求を受けた場合、フェッチ要求パケットを生成してメモリコントローラ２２に発行する（図６（ｔ））。メモリコントローラ２２は、フェッチ要求パケットに基づいてメモリ２４からデータを読み出す。メモリ２４から読み出されたデータは、フェッチ応答として応答制御部４４に出力される（図６（ｕ））。応答制御部４４は、フェッチ応答に基づいて、リデュースＧｅｔ応答をパケット送信部４６に出力する（図６（ｖ））。パケット送信部４６は、応答制御部４４からのリデュースＧｅｔ応答に基づいてリデュースＧｅｔ応答パケットを生成して、リデュースＧｅｔ要求パケットの発行元のノードＮＤに出力する（図６（ｗ））。
【００７６】
パケット受信部４８は、リデュースＢＣ要求パケット（またはリデュースＰｕｔ要求パケット）を他ノードＮＤから受信した場合、リデュースＢＣ要求（またはリデュースＰｕｔ要求）を要求制御部４２に出力する（図６（ｘ））。要求制御部４２は、リデュースＢＣ要求（またはリデュースＰｕｔ要求）をフェッチ要求管理部４０ａに出力する（図６（ｙ））。フェッチ要求管理部４０ａは、要求制御部４２からのリデュースＢＣ要求（またはリデュースＰｕｔ要求）に基づいて、ストア要求パケットを生成してメモリコントローラ２２に発行する（図６（ｚ））。メモリコントローラ２２は、ストア要求パケットに基づいて、リデュースＢＣ要求パケット（またはリデュースＰｕｔ要求パケット）に含まれるデータをメモリ２４に書き込む。なお、実際には、リデュースＢＣ要求パケット（またはリデュースＰｕｔ要求パケット）に基づいて、図示しないリデュースＢＣ応答パケット（またはリデュースＰｕｔ応答パケット）がメモリコントローラ２２から発行される。
【００７７】
パケット受信部４８は、リデュースＢＣ＆Ｇｅｔ要求パケットを他ノードＮＤから受信した場合、リデュースＢＣ＆Ｇｅｔ要求を要求制御部４２に出力する（図６（ｚ１））。要求制御部４２は、リデュースＢＣ＆Ｇｅｔ要求をフェッチ要求管理部４０ａに出力する（図６（ｚ２））。フェッチ要求管理部４０ａは、要求制御部４２からリデュースＢＣ＆Ｇｅｔ要求を受けた場合、ストア＆Ｎｅｘｔフェッチ要求パケットを生成してメモリコントローラ２２に発行する（図６（ｚ３））。メモリコントローラ２２は、ストア＆Ｎｅｘｔフェッチ要求パケットに基づいてメモリ２４にデータを書き込んだ後、次のリデュース演算に使用するデータをメモリ２４から読み出してストア＆Ｎｅｘｔフェッチ応答パケットとして出力する（図６（ｚ４））。ストア＆Ｎｅｘｔフェッチ要求が他ノードＮＤから発行された場合、メモリ２４から読み出されたデータは、ストア＆Ｎｅｘｔフェッチ応答パケットとして応答制御部４４に出力される。応答制御部４４は、ストア＆Ｎｅｘｔフェッチ応答をパケット送信部４６に出力する。そして、パケット送信部４６は、リデュースＢＣ＆Ｇｅｔ応答パケットを、リデュースＢＣ＆Ｇｅｔ要求パケットの発行元のノードＮＤに発行する（図６（ｚ５））。
【００７８】
図７は、図４に示す情報処理システム１００Ａで使用されるパケットのフォーマットの一例を示す。図７に示すリデュース系パケットは、バッファ３０Ａ、３０Ｂに対してデータを読み書きするパケットと、リデュース演算の結果データをメモリ２４に格納するパケットとを含む。
【００７９】
図７において、パケットタイプの欄には、要求パケットまたは応答パケットを識別する情報が格納される。要求パケットのＲＥＱ＿ＩＤの欄には、要求パケットの発行元がパケット毎に割り当てた番号（シーケンス番号等）が格納される。応答パケットのＲＥＱ＿ＩＤの欄には、対応する要求パケットのＲＥＱ＿ＩＤの欄に格納された番号と同じ番号が格納される。
【００８０】
ＤＩＳＴ＿ＩＤの欄は、パケットの宛先のノードＮＤを識別する番号が格納され、ＳＲＣ＿ＩＤの欄は、パケットを発行するノードＮＤを識別する番号が格納される。例えば、応答パケットのＤＩＳＴ＿ＩＤの欄には、対応する要求パケットのＳＲＣ＿ＩＤが格納され、応答パケットのＳＲＣ＿ＩＤの欄には、対応する要求パケットのＤＩＳＴ＿ＩＤが格納される。
【００８１】
ＤＩＳＴ＿ＡＤＲＳの欄には、メモリ２４において、データを読み書きする記憶領域の先頭アドレスが格納される。例えば、リデュースＧｅｔ要求パケットのＤＩＳＴ＿ＡＤＲＳの欄には、メモリ２４においてデータを読み出す記憶領域の先頭アドレスが格納される。リデュースＢＣ＆ＧｅｔパケットおよびリデュースＢＣ要求のＤＩＳＴ＿ＡＤＲＳの欄には、メモリ２４においてデータを書き込む記憶領域の先頭アドレスが格納される。なお、パケットの名称に含まれる”ＢＣ”は、複数のノードＮＤに共通のデータを転送するブロードキャストを示す。
【００８２】
ペイロードの欄には、データが格納される。例えば、リデュースＢＣ＆Ｇｅｔ要求パケットのペイロードには、スレーブのメモリ２４に書き込むデータ（リデュース演算の結果データ）が格納される。リデュースＧｅｔ応答パケットおよびリデュースＢＣ＆Ｇｅｔ応答パケットのペイロードには、スレーブのメモリ２４から読み出されたリデュース演算に使用するデータが格納される。例えば、図７に示すパケットのペイロードには、２ＫＢのデータが格納される。
【００８３】
リデュースＢＣ＆Ｇｅｔ要求パケットのオフセットの欄には、ＤＩＳＴ＿ＡＤＲＳの欄に格納されるアドレスからの相対値が格納される。リデュースＢＣ＆Ｇｅｔ要求パケットを受けたスレーブは、ＤＩＳＴ＿ＡＤＲＳの欄に格納されたアドレスにオフセットの欄に格納された相対値を加えたアドレスで示されるメモリ２４の記憶領域から順にデータを読み出す。例えば、オフセットの欄には、”２ＫＢ”のデータを保持する記憶領域に相当するアドレスの範囲を示すアドレス値が格納される。これにより、スレーブは、マスタに送信するデータを、メモリ２４において、ペイロードに格納されたデータを格納した記憶領域の次の領域から読み出す。なお、オフセットを”２ＫＢ”のデータに相当するアドレス値に固定する場合、オフセットの欄は未使用にされてもよい。
【００８４】
図８は、図４に示す情報処理システム１００Ａで使用されるパケットのフォーマットの一例（図７の続き）を示す。パケットタイプ、ＲＥＱ＿ＩＤ、ＤＩＳＴ＿ＩＤ、ＳＲＣ＿ＩＤ、ＤＩＳＴ＿ＡＤＲＳおよびペイロードの欄は、図７と同じ用途である。図８に示すノード内パケットは、自ノードＮＤが自ノードＮＤのメモリ２４にデータを読み書きするパケットを含む。図８に示す通常パケットは、例えば、２つのノードＮＤのメモリ２４間でデータを転送する場合に使用される。
【００８５】
ノード内パケットにおいて、フェッチ要求パケットのＡＤＲＳの欄には、データを読み出すメモリ２４の記憶領域の先頭アドレスが格納される。ストア要求パケットとストアＮｅｘｔフェッチ要求パケットのＡＤＲＳの欄には、ペイロードのデータを格納するメモリ２４の記憶領域の先頭アドレスが格納される。ストアＮｅｘｔフェッチ要求パケットのＮｅｘｔＡＤＲＳの欄には、データを読み出すメモリ２４の記憶領域の先頭アドレスが格納される。ＮｅｘｔＡＤＲＳの欄に格納されるアドレスは、例えば、図５に示したメモリアクセス制御部４０により算出される。
【００８６】
通常パケットにおいて、Ｇｅｔ要求パケットのＤＩＳＴ＿ＡＤＲＳの欄には、メモリ２４においてデータを読み出す記憶領域の先頭アドレスが格納される。Ｇｅｔ要求パケットのデータ長の欄には、メモリ２４から読み出すデータのサイズが格納される。Ｐｕｔ要求パケットのＤＩＳＴ＿ＡＤＲＳの欄には、メモリ２４においてデータを書き込む記憶領域の先頭アドレスが格納される。Ｐｕｔ要求パケットのデータ長の欄には、メモリ２４に書き込むデータのサイズが格納される。なお、特に限定されないが、図４に示すホストＣＰＵ１０と各ノードＮＤ０−ＮＤ３の間でのデータ転送では、図８の通常パケットと同様のパケットが使用される。
【００８７】
図９は、図４に示すＤＭＡエンジン２６の動作の概要を示す。例えば、図９に示す動作は、記憶装置１２から各ノードＮＤにリデュース演算の対象の１６ＭＢのデータが転送される毎に、各ノードＮＤで並列に実行される。
【００８８】
まず、ＤＭＡユニット３２は、自ノードＮＤのメモリ２４に保持されたリデュース演算の対象データ（例えば、２ＫＢ）を自ノードＮＤのバッファ３０Ａ、３０Ｂのそれぞれに格納する。また、ＤＭＡユニット３２は、他の３つのノードＮＤのメモリ２４に保持されたリデュース演算の対象データ（例えば、２ＫＢ）を自ノードＮＤのバッファ３０Ａ、３０Ｂのそれぞれに格納する（図９（ａ）、（ｂ））。
【００８９】
なお、各バッファ３０Ａ、３０Ｂには、合わせて８ＫＢのデータが格納されるため、各ノードＮＤには、８ＫＢ以上の記憶容量を有するバッファ３０Ａ、３０Ｂが設けられる。換言すれば、各バッファ３０Ａ、３０Ｂの記憶容量は、図７および図８に示したパケットのペイロードに格納されるデータの最大サイズに基づいて決められる。
【００９０】
例えば、バッファ３０Ａ、３０Ｂの記憶容量は、１つのパケットで転送可能なデータの最大サイズ（２ＫＢ）に、オールリデュース処理を実行するノードＮＤの数（４つ）を乗じた値に設定される。バッファ３０Ａ、３０Ｂの記憶容量を、パケットのペイロードのサイズに基づいて設定することで、バッファ３０Ａ、３０Ｂの規模を最小限にすることができる。この結果、ＤＭＡエンジン２６にバッファ３０Ａ、３０Ｂを設ける場合にも、ＤＭＡエンジン２６の回路規模の増加を最小限にすることができる。
【００９１】
次に、演算ユニット２８は、バッファ３０Ａに格納されたデータを用いてリデュース演算を順次実行し、リデュース演算により得られた結果データをバッファ３０Ａに上書きする（図９（ｃ））。結果データを、リデュース演算に使用したデータを保持したバッファ３０Ａの記憶領域に上書きすることで、リデュース処理に使用するバッファ３０Ａの記憶容量を最小限にすることができる。なお、結果データは、バッファ３０Ａの空き領域に格納されてもよい。この場合、１０ＫＢ以上の記憶容量を有するバッファ３０Ａ、３０Ｂが設けられる。
【００９２】
次に、演算ユニット２８は、バッファ３０Ｂに格納されたデータを用いてリデュース演算を順次実行し、リデュース演算により得られた結果データをバッファ３０Ｂに上書きする（図９（ｄ））。ＤＭＡユニット３２は、バッファ３０Ａに保持された結果データを、自ノードＮＤのメモリ２４に格納するとともに、自ノードＮＤのメモリ２４からリデュース演算を実行する次の対象データを読み出してバッファ３０Ａに格納する。また、ＤＭＡユニット３２は、バッファ３０Ａに保持された結果データを、他ノードＮＤのメモリ２４に格納するとともに、他ノードＮＤのメモリ２４からリデュース演算を実行する次の対象データを読み出してバッファ３０Ａに格納する（図９（ｅ））。ＤＭＡユニット３２による自ノードＮＤおよび他ノードＮＤのメモリ２４とバッファ３０Ａとの間でのデータの転送は、演算ユニット２８がリデュース演算を実行する裏で実行される。
【００９３】
次に、演算ユニット２８は、バッファ３０Ａに格納されたデータを用いてリデュース演算を順次実行し、リデュース演算により得られた結果データをバッファ３０Ａに上書きする（図９（ｆ））。ＤＭＡユニット３２は、演算ユニット２８がリデュース演算を実行する裏で、バッファ３０Ｂに保持された結果データをメモリ２４に格納し、リデュース演算を実行する次の対象データをメモリ２４から読み出してバッファ３０Ｂに格納する（図９（ｇ））。
【００９４】
この後、演算ユニット２８は、データを読み出すバッファ３０Ａ、３０Ｂを交互に切り替え、リデュース演算を実行し、ＤＭＡユニット３２は、データを転送するバッファ３０Ａ、３０Ｂを交互に切り替える。そして、バッファ３０Ａ、３０Ｂを交互に使用して、リデュース演算とメモリ２４に対するデータ転送とが繰り返し実行され、メモリ２４に格納された１６ＭＢのデータのリデュース処理が実行される。図９に示す例では、バッファ３０Ａ、３０Ｂを使用することで、リデュース演算とメモリ２４に対するデータ転送とを並列に実行することができる。この結果、リデュース演算を連続して絶え間なく実行することができ、リデュース演算とメモリ２４に対するデータ転送とを交互に実行する場合に比べて、リデュース処理の実行時間を短縮することができる。
【００９５】
図１０は、図４に示す各ノードＮＤのメモリ２４に格納されるデータと、リデュース演算の担当ノードＮＤとの関係の一例を示す。ノードＮＤ０のメモリ２４には、自ノードＮＤ０および他ノードＮＤ１−ＮＤ３で実行するリデュース演算に使用するデータが保持される。ノードＮＤ１のメモリ２４には、自ノードＮＤ１および他ノードＮＤ０、ＮＤ２、ＮＤ３で実行するリデュース演算に使用するデータが保持される。同様に、ノードＮＤ２、ＮＤ３のメモリ２４にも、４つのノードＮＤ０−ＮＤ３で実行するリデュース演算に使用するデータが保持される。
【００９６】
図１０に示すメモリ２４に保持されたリデュース演算の対象データにおいて、先頭の数字は、データを保持するメモリ２４のノードＮＤの番号を示す。”−”の後に続く２桁の数字において、上位の値はリデュース演算を実行するノードＮＤの番号を示し、下位の値は、データの番号を示す。図１０に示すように、メモリ２４に保持されるデータのうち、”−”の後に続く上位の値が”０”のデータは、ノードＮＤ０に集められ、”−”の後に続く上位の値が”１”のデータは、ノードＮＤ１に集められる。”−”の後に続く上位の値が”２”のデータは、ノードＮＤ２に集められ、”−”の後に続く上位の値が”３”のデータは、ノードＮＤ３に集められる。
【００９７】
そして、各ノードＮＤ０−ＮＤ３は、集められた４つのデータ毎にリデュース演算を実行する。例えば、ノードＮＤ０は、データ”０−００”、”１−００”、”２−００”、”３−００”のリデュース演算を実行し、結果データ”０−００’”を算出する。また、ノードＮＤ０は、データ”０−０１”、”１−０１”、”２−０１”、”３−０１”のリデュース演算を実行して、結果データ”０−０１’”を算出する。ノードＮＤ１は、データ”０−１０”、”１−１０”、”２−１０”、”３−１０”のリデュース演算を実行し、結果データ”０−１０’”を算出する。また、ノードＮＤ１は、データ”０−１１”、”１−１１”、”２−１１”、”３−１１”のリデュース演算を実行して、結果データ”０−１１’”を算出する。
【００９８】
図１０には示していないが、各ノードＮＤ０−ＮＤ３が算出した結果データは、全てのノードＮＤ０−ＮＤ３に分配される。例えば、ノードＮＤ０が算出した結果データ”０−００’”、”０−０１’”は、自ノードＮＤ０のメモリ２４と、他ノードＮＤ１−ＮＤ３のメモリ２４にそれぞれ格納される。ノードＮＤ１が算出した結果データ”０−１０’”、”０−１１’”は、自ノードＮＤ１のメモリ２４と、他ノードＮＤ０、ＮＤ２、ＮＤ３のメモリ２４にそれぞれ格納される。
【００９９】
図１１は、図４に示す情報処理システム１００Ａにおいて、各ノードＮＤがデータを収集し、リデュース演算を並列に実行する動作の概要を示す。図１１では、図４に示す演算ユニット２８は、マスタとして動作し、図４に示すＤＭＡユニット３２は、マスタまたはスレーブとして動作する。
【０１００】
各ノードＮＤにおいて、マスタとして動作するＤＭＡユニット３２は、自ノードＮＤで実行するリデュース演算の対象データをメモリ２４から読み出し、自ノードＮＤのバッファ３０Ａ（または３０Ｂ）に格納する（図１１（ａ）、（ｂ）、（ｃ）、（ｄ））。また、各ノードＮＤにおいて、スレーブとして動作するＤＭＡユニット３２は、他ノードＮＤで実行するリデュース演算の対象データを自ノードＮＤのメモリ２４から読み出す（図１１（ｅ）、（ｆ）、（ｇ）、（ｈ））。
【０１０１】
そして、スレーブとして動作するＤＭＡユニット３２は、メモリ２４から読み出したデータを、他ノードＮＤのバッファ３０Ａ（または３０Ｂ）に転送する（図１１（ｉ）、（ｊ）、（ｋ）、（ｌ））。例えば、ノードＮＤ０−ＮＤ３が、他ノードＮＤに転送するデータ量は、互いに等しい。そして、各ノードＮＤにおいて、マスタとして動作する演算ユニット２８は、バッファ３０Ａ（または３０Ｂ）に格納されたデータを用いてリデュース演算を並列に実行し、結果データを算出する。
【０１０２】
図１２は、図９において各ノードＮＤが並列に実行したリデュース演算の結果データを分配する動作の概要を示す。各ノードＮＤにおいて、マスタとして動作するＤＭＡユニット３２は、リデュース演算により算出された結果データを、自ノードＮＤのメモリ２４に格納する（図１２（ａ）、（ｂ）、（ｃ）、（ｄ））。
【０１０３】
また、各ノードＮＤにおいて、スレーブとして動作するＤＭＡユニット３２は、リデュース演算により算出された結果データを、他ノードＮＤに転送する（図１２（ｅ）、（ｆ）、（ｇ）、（ｈ））。他ノードＮＤは、受けた結果データをメモリ２４に格納する（図１２（ｉ）、（ｊ）、（ｋ）、（ｌ））。すなわち、各ノードＮＤの演算ユニット２８で算出された結果データは、自ノードＮＤおよび他ノードＮＤに分配される。例えば、ノードＮＤ０−ＮＤ３が、他ノードＮＤに転送するデータ量は、互いに等しい。
【０１０４】
結果データは、メモリ２４において、リデュース演算の対象データが保持された記憶領域に上書きされる。なお、結果データは、メモリ２４において、自ノードＮＤにおけるリデュース演算の対象データが保持された記憶領域とは別の領域に格納されてもよい。
【０１０５】
図１３および図１４は、図４に示す情報処理システム１００Ａの動作の一例を示す。各ノードＮＤ０−ＮＤ３は、図１３および図１４に示すマスタの動作とスレーブの動作とを並列に実行する。すなわち、図１１および図１２に示したように、マスタの動作とスレーブの動作は、全てのノードＮＤ０−ＮＤ３のそれぞれで実行される。なお、図１３および図１４は、説明を分かりやすくするために、ノードＮＤ０のマスタとしての動作と、ノードＮＤ１のスレーブとして動作を示す。
【０１０６】
まず、ノードＮＤ０−ＮＤ３は、演算ユニット２０を動作させ、メモリ２４に保持されたデータを使用して積和演算等の演算処理を並列に実行し、演算結果をメモリ２４に格納する処理を繰り返す。演算ユニット２０による演算の結果（図１１に示した”０−００”、”０−０１”等）は、リデュース演算に使用するデータとしてメモリ２４に格納される。
【０１０７】
そして、ノードＮＤ０−ＮＤ３は、バリア同期等により演算処理の完了を待ち合わせる。ノードＮＤ０のＤＭＡユニット３２は、自ノードＮＤ０および他ノードＮＤ１−ＮＤ３の演算ユニット２０による演算処理の完了に基づいて、リデュース演算を実行するためにＤＭＡ処理（リデュースＤＭＡ）を起動する（図１３（ａ））。
【０１０８】
ノードＮＤ０のＤＭＡユニット３２は、自ノードのメモリ２４からリデュース演算に使用するデータを読み出すためにフェッチ要求を発行する（図１３（ｂ））。リデュース演算の実行を開始する前、バッファ３０Ａ、３０Ｂには、以前に実行されたリデュース演算の結果データ等の無効なデータが格納されている。このため、ＤＭＡユニット３２は、バッファ３０Ａ、３０Ｂのそれぞれにデータを格納するために、フェッチ要求を２回発行する。ノードＮＤ０のメモリ２４からのフェッチ応答に含まれるデータは、バッファ３０Ａ、３０Ｂにそれぞれ格納される（図１３（ｃ））。なお、メモリ２４から読み出したデータをバッファ３０Ａ、３０Ｂのいずれに格納するかは、図５に示すシーケンサ３８の制御により決められる。
【０１０９】
ノードＮＤ０のＤＭＡユニット３２は、他ノードＮＤ１−ＮＤ３のメモリ２４からリデュース演算に使用するデータを読み出すために、他ノードＮＤ１−ＮＤ３の各々にリデュースＧｅｔ要求を発行する（図１３（ｄ））。リデュースＧｅｔ要求は、データの転送要求の一例である。バッファ３０Ａ、３０Ｂのそれぞれに格納するデータを各ノードから転送させるため、リデュースＧｅｔ要求は、各ノードＮＤ１−ＮＤ３毎に２回発行される。
【０１１０】
他ノードＮＤ１−ＮＤ３のＤＭＡユニット３２は、ノードＮＤ０からのリデュースＧｅｔ要求に基づいて、自ノードのメモリ２４にフェッチ要求を発行する（図１３（ｅ））。他ノードＮＤ１−ＮＤ３のＤＭＡユニット３２は、自ノードのメモリ２４からのフェッチ応答に含まれるデータを受信する（図１３（ｆ））。他ノードＮＤ１−ＮＤ３のＤＭＡユニット３２は、フェッチ応答に含まれるデータをノードＮＤ０（マスタ）に転送するため、リデュースＧｅｔ応答をそれぞれ発行する（図１３（ｇ））。
【０１１１】
なお、実際の動作では、フェッチ要求は、図５に示すメモリコントローラ２２に発行される。フェッチ要求を受けたメモリコントローラ２２は、メモリ２４からデータを読み出し、読み出したデータを含むフェッチ応答をＤＭＡユニット３２に出力する。後述するストア＆Ｎｅｘｔフェッチ要求もメモリコントローラ２２に発行され、メモリコントローラ２２からストア＆Ｎｅｘｔフェッチ応答が出力される。
【０１１２】
ノードＮＤ０のＤＭＡユニット３２は、他ノードＮＤ１−ＮＤ３のメモリ２４からのリデュースＧｅｔ応答に含まれるデータを、バッファ３０Ａ、３０Ｂのそれぞれに格納する（図１３（ｈ））。各ノードＮＤ０−ＮＤ３によるマスタおよびスレーブとしての動作により、各ノードＮＤ０−ＮＤ３のメモリ２４は、図１１に示す状態になる。
【０１１３】
マスタとして動作するノードＮＤ０が、リデュースＤＭＡを起動し、リデュースＧｅｔ要求を他ノードＮＤ１−ＮＤ３に発行することで、ノードＮＤ０は、他ノードＮＤ１−ＮＤ３からのリデュースＧｅｔ応答を待つことができる。これにより、マスタとして動作するノードＮＤ０のシーケンサ３８は、既存のシーケンサと同様の制御をすることで、他ノードＮＤ１−ＮＤ３のメモリ２４に保持されたリデュース演算の対象データを収集することができる。
【０１１４】
各ノードＮＤ０−ＮＤ３のメモリ２４からバッファ３０Ａ、３０Ｂへのデータの格納が完了した後、ノードＮＤ０の演算ユニット２８は、例えば、バッファ３０Ａに保持されたデータを使用して、リデュース演算を実行する（図１３（ｉ））。演算ユニット２８は、バッファ３０Ａからデータを取り出してリデュース演算を実行し、リデュース演算により得られた結果データを図５に示すストアバッファ４０ｃおよび送信バッファ４６ａに転送する処理を繰り返し実行する。バッファ３０Ａ、３０Ｂは、メモリ２４に比べてアクセスレイテンシが小さいため、演算対象のデータの読み出しを高速に実行することができる。なお、演算ユニット２８は、リデュース演算により得られた結果データを、演算の対象データを取り出したバッファ３０Ａに転送（上書き）する処理を繰り返し実行してもよい。
【０１１５】
ノードＮＤ０のＤＭＡユニット３２は、バッファ３０Ａに保持された全てのデータのリデュース演算の完了に基づいて、ストア＆Ｎｅｘｔフェッチ要求を発行する（図１３（ｊ））。ストア＆Ｎｅｘｔフェッチ要求には、ストアバッファ４０ｃに格納されたリデュース演算の結果データが含まれる。なお、リデュース演算の結果データがバッファ３０Ａに格納される場合、ストア＆Ｎｅｘｔフェッチ要求には、バッファ３０Ａに格納されたリデュース演算の結果データが含まれる。メモリコントローラ２２は、ストア＆Ｎｅｘｔフェッチ要求に基づいて、ストア＆Ｎｅｘｔフェッチ要求に含まれる結果データをメモリ２４に格納する。
【０１１６】
また、メモリコントローラ２２は、ストア＆Ｎｅｘｔフェッチ要求に基づいて、次のリデュース演算に使用するデータをメモリ２４から読み出し、読み出したデータを含むストア＆Ｎｅｘｔフェッチ応答を出力する。ストア＆Ｎｅｘｔフェッチ応答に含まれるデータは、シーケンサ３８による制御に基づいて、リデュース演算の結果データを出力済みのバッファ３０Ａに格納される（図１３（ｋ））。
【０１１７】
さらに、ノードＮＤ０のＤＭＡユニット３２は、リデュース演算の結果データを他ノードＮＤ１−ＮＤ３のメモリ２４に格納するため、他ノードＮＤ１−ＮＤ３にリデュースＢＣ＆Ｇｅｔ要求を発行する（図１３（ｌ））。リデュースＢＣ＆Ｇｅｔ要求には、送信バッファ４６ａに格納されたリデュース演算の結果データが含まれる。なお、リデュース演算の結果データがバッファ３０Ａに格納される場合、リデュースＢＣ＆Ｇｅｔ要求には、バッファ３０Ａに格納されたリデュース演算の結果データが含まれる。リデュースＢＣ＆Ｇｅｔ要求は、格納読出要求の一例である。
【０１１８】
図１２で説明したように、各ノードＮＤで実行されたリデュース演算の結果データは、他ノードＮＤにそれぞれ転送される。換言すれば、リデュース演算の結果データを含むパケットにおいて、宛先と格納アドレス以外の情報は共通である。このため、リデュースＢＣ＆Ｇｅｔ要求により、リデュース演算の結果データをブロードキャストすることで、各ノードＮＤ１−ＮＤ３に送信するパケットをそれぞれ生成する場合に比べて、ＤＭＡユニット３２の送信制御を簡易にすることができる。
【０１１９】
他ノードＮＤ１−ＮＤ３のＤＭＡユニット３２は、ノードＮＤ０からのリデュースＢＣ＆Ｇｅｔ要求に基づいて、自ノードのメモリ２４にストア＆Ｎｅｘｔフェッチ要求を発行する（図１３（ｍ））。他ノードＮＤ１−ＮＤ３におけるストア＆Ｎｅｘｔフェッチ要求に基づく動作は、上述したノードＮＤ０におけるストア＆Ｎｅｘｔフェッチ要求に基づく動作と同様である。他ノードＮＤ１−ＮＤ３のＤＭＡユニット３２は、メモリ２４からのフェッチ応答に含まれるデータを受信する（図１３（ｎ））。
【０１２０】
他ノードＮＤ１−ＮＤ３のＤＭＡユニット３２は、ストア＆Ｎｅｘｔフェッチ応答に含まれるデータをノードＮＤ０（マスタ）に転送するため、リデュースＢＣ＆Ｇｅｔ応答を発行する（図１３（ｏ））。リデュースＢＣ＆Ｇｅｔ応答に含まれるデータは、シーケンサ３８による制御に基づいて、リデュース演算の結果データを出力済みのバッファ３０Ａに格納される（図１３（ｐ））。
【０１２１】
リデュース演算を実行していないデータがメモリ２４に残っている場合、リデュースＢＣ＆Ｇｅｔ要求を発行することで、リデュース演算の結果データのメモリ２４への格納と次のリデュース演算用のデータの読み出しとを１つのパケットで処理することができる。同様に、ストア＆Ｎｅｘｔフェッチ要求を発行することで、リデュース演算の結果データのメモリ２４への格納と次のリデュース演算用のデータの読み出しとを１つのパケットで処理することができる。
【０１２２】
ノードＮＤ０の演算ユニット２８は、バッファ３０Ａへのデータの格納処理中に、バッファ３０Ｂに保持されたデータを使用して、リデュース演算を実行する（図１３（ｑ））。換言すれば、バッファ３０Ａへのデータの転送は、演算ユニット２８によるリデュース演算の裏で実行される。演算ユニット２８は、バッファ３０Ｂからデータを取り出して演算し、演算により得られた結果データを図５に示すストアバッファ４０ｃおよび送信バッファ４６ａに格納する処理を繰り返し実行する。
【０１２３】
次に、図１４において、ノードＮＤ０のＤＭＡユニット３２は、演算ユニット２８によるリデュース演算の実行により得られた結果データを自ノードのメモリ２４に格納するため、ストア＆Ｎｅｘｔフェッチ要求を発行する（図１４（ａ））。
【０１２４】
メモリコントローラ２２は、ストア＆Ｎｅｘｔフェッチ要求に含まれる結果データをメモリ２４に格納し、次のリデュース演算に使用するデータをメモリ２４から読み出し、読み出したデータを含むストア＆Ｎｅｘｔフェッチ応答を出力する（図１４（ｂ））。ストア＆Ｎｅｘｔフェッチ応答に含まれるデータは、シーケンサ３８による制御に基づいて、バッファ３０Ｂに格納される（図１４（ｂ））。すなわち、シーケンサ３８は、複数のストア＆Ｎｅｘｔフェッチ応答に含まれるデータをバッファ３０Ａ、３０Ｂに交互に格納する。
【０１２５】
また、ノードＮＤ０のＤＭＡユニット３２は、リデュース演算の結果データを他ノードＮＤ１−ＮＤ３のメモリ２４に格納するため、他ノードＮＤ１−ＮＤ３にリデュースＢＣ＆Ｇｅｔ要求を発行する（図１４（ｃ））。リデュースＢＣ＆Ｇｅｔ要求に基づく他ノードＮＤ１−ＮＤ３の動作は、図１３（ｌ）、（ｍ）、（ｎ）で説明した動作と同様である。リデュースＢＣ＆Ｇｅｔ応答に含まれるデータは、シーケンサ３８による制御に基づいてバッファ３０Ｂに格納される（図１４（ｄ））。
【０１２６】
ノードＮＤ０の演算ユニット２８は、バッファ３０Ｂへのデータの格納処理中に、バッファ３０Ａに保持されたデータを使用して、リデュース演算を実行する（図１４（ｅ））。この後、バッファ３０Ａ、３０Ｂの一方に保持されたデータを交互に使用してリデュース演算が実行され、リデュース演算の裏で、リデュース演算に使用されないバッファ３０Ａ、３０Ｂの他方に新たなデータが転送される。
【０１２７】
ノードＮＤ０のＤＭＡユニット３２は、例えば、バッファ３０Ａに保持されたデータを使用した最後のリデュース演算が実行された後、自ノードのメモリ２４に結果データを格納するためにストア要求を発行する（図１４（ｆ））。メモリコントローラ２２は、ストア要求に含まれる結果データをメモリ２４に格納する。また、ノードＮＤ０のＤＭＡユニット３２は、他ノードＮＤ１−ＮＤ３にリデュースＢＣ要求を発行する（図１４（ｇ））。他ノードＮＤ１−ＮＤ３のＤＭＡユニット３２は、ノードＮＤ０からのリデュースＢＣ要求に基づいて、自ノードのメモリ２４に結果データを格納するためにストア要求を発行する（図１４（ｈ））。そして、バッファ３０Ａに保持されたデータを使用した最後のリデュース演算の結果データが各ノードＮＤ０−ＮＤ３のメモリ２４に格納される。
【０１２８】
バッファ３０Ａに保持されたデータを使用した最後のリデュース演算の結果データを自ノードＮＤ０−ＮＤ３のメモリ２４に転送中、ノードＮＤ０の演算ユニット２８は、バッファ３０Ｂに保持されたデータを使用して、リデュース演算を実行する（図１４（ｉ））。ノードＮＤ０のＤＭＡユニット３２は、例えば、バッファ３０Ｂに保持されたデータを使用した最後のリデュース演算が実行された後、自ノードへのストア要求と、他ノードＮＤ１−ＮＤ３へのリデュースＢＣ要求を発行する（図１４（ｊ）、（ｋ））。そして、バッファ３０Ｂに保持されたデータを使用した最後のリデュース演算の結果データが各ノードＮＤ０−ＮＤ３のメモリ２４に格納される。なお、図１４では、ストア要求に基づいて発行されるストア応答と、リデュースＢＣ要求に基づいて発行されるリデュースＢＣ応答との記載は省略される。
【０１２９】
なお、図１３および図１４において、リデュースＢＣ＆Ｇｅｔ要求の代わりに、リデュースＢＣ要求と複数のリデュースＧｅｔ要求とが順次発行されてもよく、他ノードＮＤ１−ＮＤ３に、リデュースＰｕｔ要求とリデュースＧｅｔ要求とが発行されてもよい。また、図１４において、ストア＆Ｎｅｘｔフェッチ要求の代わりに、ストア要求とフェッチ要求とが順次発行されてもよい。
【０１３０】
図１５は、図１３および図１４に示すマスタの動作フローの一例を示す。図１５に示す動作フローは、全てのノードＮＤ０−ＮＤ３の演算ユニット２０が実行する積和演算等の演算処理の完了に基づいて開始される。
【０１３１】
まず、ステップＳ１０において、マスタは、リデュース演算の対象データを自ノードのメモリ２４と他ノードのメモリ２４から自ノードのバッファ３０Ａ、３０Ｂのいずれかに転送する。次に、ステップＳ１２において、マスタは、バッファ３０Ａに保持されたデータのリデュース演算を実行する。この後、マスタは、バッファ３０Ａに対するデータの転送動作およびバッファ３０Ｂに保持されたデータのリデュース演算と、バッファ３０Ｂに対するデータの転送動作およびバッファ３０Ａに保持されたデータのリデュース演算とを並列に実行する。すなわち、マスタは、ステップＳ２０、Ｓ２２、Ｓ２４、Ｓ２６の動作と、ステップＳ３０、Ｓ３２、Ｓ３４、Ｓ３６の動作とを並列に実行する。
【０１３２】
ステップＳ２０において、マスタは、バッファ３０Ａに保持されたデータを使用したリデュース演算の結果データを自ノードのメモリ２４と他ノードのメモリ２４に格納する処理を実行する。次に、ステップＳ２２において、マスタは、メモリ２４に保持されたデータのバッファ３０Ａを使用したリデュース演算が完了していない場合、動作をステップＳ２４に移行させる。一方、マスタは、メモリ２４に保持されたデータのバッファ３０Ａを使用したリデュース演算が完了した場合、バッファ３０Ａを使用したリデュース演算の処理を完了する。
【０１３３】
ステップＳ２４において、マスタは、次のリデュース演算の対象データを自ノードのメモリ２４と他ノードのメモリ２４から自ノードのバッファ３０Ａに転送する。次に、ステップＳ２６において、マスタは、バッファ３０Ａに保持されたデータのリデュース演算を実行し、動作をステップＳ２０に移行させる。
【０１３４】
一方、ステップＳ３０において、マスタは、バッファ３０Ｂに保持されたデータのリデュース演算を実行する。次に、ステップＳ３２において、マスタは、バッファ３０Ｂに保持されたデータを使用したリデュース演算の結果データを自ノードのメモリ２４と他ノードのメモリ２４に格納する処理を実行する。次に、ステップＳ３４において、マスタは、メモリ２４に保持されたデータのバッファ３０Ｂを使用したリデュース演算が完了していない場合、動作をステップＳ３６に移行させる。一方、マスタは、メモリ２４に保持されたデータのバッファ３０Ｂを使用したリデュース演算が完了した場合、バッファ３０Ｂを使用したリデュース演算の処理を完了する。
【０１３５】
ステップＳ３６において、マスタは、次のリデュース演算の対象データを自ノードのメモリ２４と他ノードのメモリ２４から自ノードのバッファ３０Ｂに転送し、動作をステップＳ３０に移行させる。
【０１３６】
図１６は、図１３および図１４に示すスレーブの動作フローの一例を示す。図１６に示す動作フローは、所定の頻度で開始される。
【０１３７】
まず、ステップＳ４０において、スレーブは、他ノードからデータの格納要求を受信した場合、動作をステップＳ４２に移行し、他ノードからデータの格納要求を受信していない場合、動作をステップＳ４４に移行させる。ここで、データの格納要求は、図１３および図１４に示すリデュースＢＣ＆Ｇｅｔ要求またはリデュースＢＣ要求である。
【０１３８】
ステップＳ４２において、スレーブは、他ノードから受信したデータをメモリ２４に格納し、動作をステップＳ４４に移行する。ステップＳ４４において、スレーブは、他ノードからデータの転送要求を受信した場合、動作をステップＳ４６に移行し、他ノードからデータの転送要求を受信していない場合、動作を終了する。ここで、データの転送要求は、図１３および図１４に示すリデュースＧｅｔ要求またはリデュースＢＣ＆Ｇｅｔ要求である。ステップＳ４６において、スレーブは、転送する対象データをメモリ２４から読み出して転送要求の発行元に出力し、動作を終了する。
【０１３９】
図１７は、図４に示す情報処理システム１００Ａが実行するディープラーニングの一例を示す。図１７に示す処理は、各ノードＮＤ０−ＮＤ３で並列に実行される。すなわち、ノードＮＤ０がマスタとして動作する場合、ノードＮＤ１−ＮＤ３がスレーブとして動作し、ノードＮＤ１がマスタとして動作する場合、ノードＮＤ０、ＮＤ２、ＮＤ３がスレーブとして動作する。ノードＮＤ２がマスタとして動作する場合、ノードＮＤ０、ＮＤ１、ＮＤ３がスレーブとして動作し、ノードＮＤ３がマスタとして動作する場合、ノードＮＤ０−ＮＤ２がスレーブとして動作する。以下では、ノードＮＤ０がマスタとして動作し、ノードＮＤ１−ＮＤ３がスレーブとして動作する例が説明される。
【０１４０】
まず、ノードＮＤ０（マスタ）は、演算ユニット２０を使用して、複数の画像データ等の学習データＬ００と、予め算出されたパラメータＰ０との演算を実行することで、学習データＬ００の特徴を抽出する。ノードＮＤ０は、演算ユニット２０を使用して、抽出した特徴を正解データと比較することで誤差データＥ００を抽出する（図１７（ａ））。
【０１４１】
他のノードＮＤ１−ＮＤ３（スレーブ）は、学習データＬ００−Ｌ３０とパラメータＰ０とに基づいて学習データの特徴を抽出し、抽出した特徴を正解データと比較することで誤差データＥ１０−Ｅ３０をそれぞれ抽出する（図１７（ｂ）、（ｃ）、（ｄ））。学習データＬ００、Ｌ１０、Ｌ２０、Ｌ３０は、ノードＮＤ０−ＮＤ３毎に異なり、パラメータＰ０および正解データは、ノードＮＤ０−ＮＤ３に共通である。
【０１４２】
各ノードＮＤ０−ＮＤ３が抽出した誤差データＥ００、Ｅ１０、Ｅ２０、Ｅ３０は、図１１に示したように、各ノードＮＤ０−ＮＤ３のメモリ２４に格納される。図１１において、データ”０−００”、”０−０１”等は、誤差データの要素をそれぞれ示す。誤差データＥ００、Ｅ１０、Ｅ２０、Ｅ３０は、互いに異なる学習データＬ００、Ｌ１０、Ｌ２０、Ｌ３０に基づいて算出されるため、誤差データＥ００、Ｅ１０、Ｅ２０、Ｅ３０の値はばらつく。このため、次の学習用のパラメータの更新に使用するために、誤差データＥ００、Ｅ１０、Ｅ２０、Ｅ３０を平均化する平均化処理が実行される。
【０１４３】
すなわち、ノードＮＤ０は、自ノードが抽出した誤差データＥ００と、ノードＮＤ１−ＮＤ３が抽出した誤差データＥ１０、Ｅ２０、Ｅ３０とを収集する（図１７（ｅ））。誤差データＥ００、Ｅ１０、Ｅ２０、Ｅ３０は、図１１に示したように、ＤＭＡユニット３２の動作により、各ノードＮＤ０−ＮＤ３のメモリ２４からノードＮＤ０（マスタ）のバッファ３０Ａまたは３０Ｂに転送される。そして、ノードＮＤ０は、演算ユニット２８を使用して、バッファ３０Ａまたは３０Ｂに転送された誤差データＥ００、Ｅ１０、Ｅ２０、Ｅ３０の各要素を平均化する処理を実行する（図１７（ｆ））。すなわち、リデュース演算が実行される。
【０１４４】
ノードＮＤ０は、平均化により得られたデータ（リデュース演算の結果データ）を、図１２に示したように、ノードＮＤ０−ＮＤ３のメモリ２４に転送する（図１７（ｇ））。平均化により得られたデータは、図１２に示す”０−００’”、”０−０１’”等である。図１１に示したように、ノードＮＤ１−ＮＤ３の各々は、ノードＮＤ０による誤差データＥ００−Ｅ３０の平均化処理の実行中に、他の誤差データの平均化処理を実行し、平均化した誤差データを他のノードＮＤに分配する。
【０１４５】
この後、各ノードＮＤ０−ＮＤ３は、演算ユニット２０を使用して、自ノードＮＤおよび他ノードＮＤで平均化した誤差データに基づいてパラメータを更新する処理を実行する（図１７（ｈ）、（ｉ）、（ｊ）、（ｋ））。そして、各ノードＮＤ０−ＮＤ３は、次の学習データＬ０１（またはＬ１１、Ｌ１２、Ｌ１３のいずれか）と、更新されたパラメータＰ１との演算を実行することで、新たな誤差データＥ０１（またはＥ１１、Ｅ１２、Ｅ１３のいずれか）を抽出する。この後、図１７（ｅ）、（ｆ）、（ｇ）と同様に、誤差データＥ０１、Ｅ１１、Ｅ２１、Ｅ３１の収集、平均化処理および平均化された誤差データの分配が実行される。このように、パラメータに基づいて学習データの特徴を抽出する処理と、抽出した特徴を正解データと比較して誤差データを抽出する処理と、抽出した誤差データを使用してパラメータを更新する処理とを繰り返し実行することで、学習度が習熟していく。
【０１４６】
図１８は、図４に示す情報処理システム１００Ａと異なる他の情報処理システムの一例を示す。図４と同一の要素については、同じ符号を付し、詳細な説明は省略する。図１８に示す情報処理システム１００Ｂは、各ノードＮＤ（ＮＤ０−ＮＤ３）の構成が、図４に示す各ノードＮＤ（ＮＤ０−ＮＤ３）の構成と相違する。
【０１４７】
各ノードＮＤは、演算ユニット２０Ｂ、メモリコントローラ２２、メモリ２４およびＤＭＡユニット３２Ｂを含むＤＭＡエンジン２６Ｂを有する。ＤＭＡエンジン２６Ｂは、図４に示す演算ユニット２８およびバッファ３０Ａ、３０Ｂを持たない。ＤＭＡユニット３２Ｂは、自ノードＮＤのメモリ２４、他ノードＮＤのメモリ２４および記憶装置１２の間でのデータの転送を制御する。
【０１４８】
図１８に示す情報処理システム１００Ｂでは、各ノードＮＤは、ＤＭＡユニット３２Ｂを使用して、リデュース演算に使用するデータを他ノードＮＤのメモリ２４から自ノードＮＤのメモリ２４に転送する。各ノードＮＤは、演算ユニット２０Ｂを動作させて、メモリ２４に保持されたデータのリデュース演算を実行し、リデュース演算により得られた結果データを自ノードＮＤのメモリ２４に格納する。リデュース演算は、ＤＭＡユニット３２Ｂによるデータの転送単位（例えば、１６ＭＢ）で実行される。そして、各ノードＮＤは、ＤＭＡユニット３２Ｂを使用して、リデュース演算の結果データを他ノードＮＤのメモリ２４に分配する。
【０１４９】
図１９は、図１８に示すＤＭＡエンジン２６Ｂの動作の概要を示す。まず、ＤＭＡユニット３２Ｂは、他ノードＮＤのメモリ２４に保持されたリデュース演算の対象データ（例えば、４ＭＢ）を自ノードＮＤのメモリ２４に転送することで、１６ＭＢのデータをメモリ２４に収集する（図１９（ａ））。次に、演算ユニット２０Ｂは、メモリ２４に保持されたデータを使用してリデュース演算を実行し、実行により得られた結果データをメモリ２４に格納する。次に、ＤＭＡユニット３２Ｂは、結果データを他ノードＮＤのメモリ２４に分配する。
【０１５０】
図２０は、図１８に示す情報処理システム１００Ｂの動作の一例を示す。図１３および図１４と同様の動作については、詳細な説明は省略する。各ノードＮＤ０−ＮＤ３は、マスタの動作とスレーブの動作とを並列に実行する。図２０では、説明を分かりやすくするために、ノードＮＤ０のマスタとしての動作と、ノードＮＤ１のスレーブとして動作を示す。また、図１３および図１４と同様に、メモリコントローラ２２の動作は省略される。
【０１５１】
まず、図１３と同様に、ノードＮＤ０−ＮＤ３は、演算ユニット２０Ｂを動作させて積和演算等の演算処理を並列に実行し、バリア同期等により演算処理の完了を待ち合わせる。演算ユニット２０Ｂの動作により、リデュース演算に使用するデータがメモリ２４に格納される。ノードＮＤ０のＤＭＡユニット３２Ｂは、自ノードＮＤ０および他ノードＮＤ１−ＮＤ３の演算ユニット２０による演算処理の完了に基づいて、リデュース演算を実行するため、以下に説明するＤＭＡを起動する（図２０（ａ））。
【０１５２】
ノードＮＤ０のＤＭＡユニット３２Ｂは、ノードＮＤ１−ＮＤ３のメモリ２４からリデュース演算に使用するデータを読み出すために、ノードＮＤ１−ＮＤ３の各々にＧｅｔ要求を発行する（図２０（ｂ））。例えば、各Ｇｅｔ要求で指定されるデータの転送長は４ＭＢである。
【０１５３】
ノードＮＤ１のＤＭＡユニット３２Ｂは、ノードＮＤ０からのＧｅｔ要求に基づいて、自ノードのメモリ２４にフェッチ要求を発行する（図２０（ｃ））。ノードＮＤ１のＤＭＡユニット３２Ｂは、メモリ２４からのフェッチ応答に含まれるデータを受信する（図２０（ｄ））。ノードＮＤ１のＤＭＡユニット３２Ｂは、フェッチ応答に含まれるデータをノードＮＤ０（マスタ）に転送するため、Ｇｅｔ応答を発行する（図２０（ｅ））。ノードＮＤ２、ＮＤ３のＤＭＡユニット３２Ｂも、図２０（ｃ）、図２０（ｄ）に示す処理と同じ処理を実行する。
【０１５４】
ノードＮＤ０のＤＭＡユニット３２Ｂは、ノードＮＤ１−ＮＤ３のメモリ２４からのＧｅｔ応答に含まれるデータを、メモリ２４に格納するために、各ノードＮＤ１−ＮＤ３からのデータの受信に基づいてストア要求を発行する（図２０（ｆ））。
【０１５５】
リデュース演算の対象データがメモリ２４に転送された後、ノードＮＤ０の演算ユニット２０Ｂは、メモリ２４に保持されたデータをロードしてリデュース演算を実行し、リデュース演算の実行により得られた結果データをメモリ２４にストアする（図２０（ｇ））。そして、データのメモリ２４からのロードと、リデュース演算と、結果データのメモリ２４へのストアとが、１６ＭＢのデータに対して繰り返し実行される。
【０１５６】
ノードＮＤ０のＤＭＡユニット３２Ｂは、メモリ２４に保持された全ての対象データのリデュース演算の実行が完了した場合、ＤＭＡを起動し、自ノードＮＤのメモリ２４から他ノードＮＤのメモリ２４に、結果データ（４ＭＢ）を転送する。すなわち、ノードＮＤ０のＤＭＡユニット３２Ｂは、自ノードＮＤのメモリ２４にフェッチ要求を発行し、自ノードＮＤのメモリ２４からのフェッチ応答に含まれる結果データを受信する（図２０（ｈ）、（ｉ））。そして、ノードＮＤ０のＤＭＡユニット３２Ｂは、受信した結果データを含むリデュースＢＣ要求をノードＮＤ１−ＮＤ３に発行する（図２０（ｊ））。
【０１５７】
ノードＮＤ１のＤＭＡユニット３２Ｂは、リデュースＢＣ要求に含まれる結果データを自ノードＮＤのメモリ２４に格納するために、ストア要求を発行する（図２０（ｋ））。ノードＮＤ２、ＮＤ３のＤＭＡユニット３２Ｂも、図２０（ｋ）と同様にストア要求を発行する。そして、ノードＮＤ０で実行されたリデュース演算の結果データが、ノードＮＤ１−ＮＤ３に分配される。
【０１５８】
図１８に示す情報処理システム１００Ｂでは、リデュース演算の対象データがメモリ２４に格納されるため、図４に示す情報処理システム１００Ａに比べて、メモリ２４内の記憶領域の使用量が増大する。リデュース演算の対象データのメモリ２４への転送とリデュース演算とは、互いに重複することなく、異なるタイミングで実行される。このため、図４に示す情報処理システム１００Ａに比べて、積和演算等の演算処理の完了後にＤＭＡを起動してから、所定量のリデュース演算の結果データの他ノードＮＤへの分配が完了するまでのレイテンシが大きくなる。
【０１５９】
また、リデュース演算の実行毎にメモリ２４がアクセスされるため、図４に示す情報処理システム１００Ａに比べて、メモリ２４のアクセス頻度が高くなる。このため、演算ユニット２０Ｂが実行する他の演算によるメモリ２４のアクセスのスループットが圧迫される。さらに、リデュース演算が演算ユニット２０Ｂで実行されるため、演算ユニット２０Ｂは、リデュース演算を実行中に、他の演算を実行できない。メモリ２４のアクセスのスループットの圧迫と、演算ユニット２０Ｂでのリデュース演算の実行とにより、図４に示す情報処理システム１００Ａに比べて、各ノードＮＤ０−ＮＤ３の演算性能が低下する。
【０１６０】
以上、図４から図１７に示す実施形態においても、図１に示す実施形態と同様の効果を得ることができる。例えば、リデュース演算を実行する演算ユニット２８を演算ユニット２０とは別に設けることで、演算ユニット２０は、演算ユニット２８によるリデュース演算の動作の影響を受けることなく、リデュース演算の対象データを生成する演算等を実行することができる。すなわち、演算ユニット２８が実行するオールリデュース処理により、他の演算の処理性能が低下することを抑止することができる。また、演算ユニット２８は、演算ユニット２０によるリデュース演算の対象データを生成する演算の動作の影響を受けることなく、リデュース演算を実行することができる。さらに、リデュース演算は主記憶装置３にアクセスすることなく実行されるため、主記憶装置３へのアクセス効率がリデュース演算の実行により低下することを抑止することができる。
【０１６１】
リデュース演算の対象データは、メモリ２４に比べてアクセスレイテンシが小さいバッファ３０Ａ、３０Ｂに転送されるため、対象データをメモリ２４に転送する場合に比べて、対象データの転送時間を短縮することができる。これにより、リデュース演算を早く開始することができる。また、バッファ３０Ａ、３０Ｂからの対象データの読み出しを、メモリ２４からの対象データの読み出しに比べて高速に実行できる。これにより、リデュース演算の実行期間を短縮でき、結果データの転送を早く開始することができる。この結果、次のリデュース演算の対象データをバッファ３０Ａ、３０Ｂに早く転送することができ、次のリデュース演算を早く開始することができる。
【０１６２】
さらに、図４から図１７に示す実施形態では、バッファ３０Ａ、３０Ｂを使用することで、リデュース演算とメモリ２４に対するデータ転送とを並列に実行することができる。この結果、リデュース演算を連続して絶え間なく実行することができ、リデュース演算とメモリ２４に対するデータ転送とを交互に実行する場合に比べて、リデュース処理の実行時間を短縮することができる。
【０１６３】
マスタとして動作するノードＮＤ０が、リデュースＤＭＡを起動し、リデュースＧｅｔ要求を他ノードＮＤ１−ＮＤ３に発行することで、ノードＮＤ０は、他ノードＮＤ１−ＮＤ３からのリデュースＧｅｔ応答を待つことができる。これにより、マスタとして動作するノードＮＤ０のシーケンサ３８は、既存のシーケンサと同様の制御により、他ノードＮＤ１−ＮＤ３のメモリ２４に保持されたリデュース演算の対象データを収集することができる。
【０１６４】
リデュース演算を実行していないデータがメモリ２４に残っている場合、リデュースＢＣ＆Ｇｅｔ要求を発行することで、リデュース演算の結果データのメモリ２４への格納と次のリデュース演算用のデータの読み出しとを１つのパケットで処理することができる。同様に、ストア＆Ｎｅｘｔフェッチ要求を発行することで、リデュース演算の結果データのメモリ２４への格納と次のリデュース演算用のデータの読み出しとを１つのパケットで処理することができる。
【０１６５】
リデュースＢＣ＆Ｇｅｔ要求等のブロードキャスト用のパケットを用いてリデュース演算の結果データを他ノードＮＤに転送することで、他ノードＮＤへのパケットを個別に生成する場合に比べて、ＤＭＡユニット３２の転送制御を簡易にすることができる。
【０１６６】
バッファ３０Ａ、３０Ｂの記憶容量を、パケットのペイロードのサイズに基づいて設定することで、バッファ３０Ａ、３０Ｂの規模を最小限にすることができる。この結果、ＤＭＡエンジン２６にバッファ３０Ａ、３０Ｂを設ける場合にも、ＤＭＡエンジン２６の回路規模の増加を最小限にすることができる。
【０１６７】
以上より、オールリデュース処理を実行する情報処理システム１００Ａの処理性能を向上することができる。
【０１６８】
図２１は、情報処理システムの別の実施形態における動作の一例を示す。図４から図２０に示す実施形態で説明した要素と同一または同様の要素については、同一の符号を付し、詳細な説明は省略する。図２１に示す動作を実行する情報処理システムの構成および機能は、図５に示すシーケンサ３８の制御の一部が相違することを除き、図４および図５に示す情報処理システム１００Ａの構成および機能と同様である。図２１では、図１３と同様に、ノードＮＤ０のマスタとしての動作と、ノードＮＤ１のスレーブとして動作とが示される。
【０１６９】
まず、ノードＮＤ０−ＮＤ３は、演算ユニット２０を動作させて積和演算等の演算処理を並列に実行し、バリア同期等により演算処理の完了を待ち合わせる。演算ユニット２０の動作により、図１１に示したように、リデュース演算に使用するデータがメモリ２４に格納される。
【０１７０】
まず、ノードＮＤ０のＤＭＡユニット３２は、図１３と同様に、各ノードＮＤ０−ＮＤ３の演算ユニット２０による演算処理の完了に基づいて、リデュースＤＭＡを起動する（図２１（ａ））。ノードＮＤ０のＤＭＡユニット３２は、自ノードのメモリ２４からリデュース演算に使用するデータを読み出すためにフェッチ要求を発行する（図２１（ｂ））。ＤＭＡユニット３２は、バッファ３０Ａ、３０Ｂのそれぞれにデータを格納するために、フェッチ要求を２回発行する。フェッチ応答に含まれるデータは、バッファ３０Ａ、３０Ｂにそれぞれ格納される（図２１（ｃ））。
【０１７１】
一方、ノードＮＤ１のＤＭＡユニット３２は、各ノードＮＤ０−ＮＤ３の演算ユニット２０による演算処理の完了に基づいて、リデュース演算の対象データを読み出すために、メモリ２４にフェッチ要求を発行する（図２１（ｄ））。フェッチ要求は、ノードＮＤ０、ＮＤ２、ＮＤ３のバッファ３０Ａ、３０Ｂに対応して６回発行される。
【０１７２】
ノードＮＤ１のＤＭＡユニット３２は、メモリ２４からのフェッチ応答に含まれるデータを受信する（図２１（ｅ））。ノードＮＤ１のＤＭＡユニット３２は、フェッチ応答に含まれるデータをノードＮＤ０、ＮＤ２、ＮＤ３のそれぞれに転送するため、各ノードＮＤ０、ＮＤ２、ＮＤ３に対してリデュースＰｕｔ要求を２回ずつ発行する（図２１（ｆ））。ノードＮＤ２、ＮＤ３は、ノードＮＤ１と同様に動作し、リデュース演算の対象データをノードＮＤ０に転送するために、リデュースＰｕｔ要求を２回ずつ発行する（図２１（ｇ））。これ以降の動作は、図１３および図１４と同じである。
【０１７３】
スレーブとして動作するノードＮＤ１−ＮＤ３は、マスタとしても動作するため、マスタとしての自ノードのメモリ２４のフェッチ要求の発行に基づいて、リデュースＰｕｔ要求用のフェッチ要求を発行することができる。図２１では、図１３に示したマスタからのリデュースＢＣ＆Ｇｅｔ要求を待たずに、メモリ２４からリデュース演算の対象データを取り出してマスタに転送できる。このため、図１３に比べて、リデュース演算の対象データのバッファ３０Ａ、３０Ｂへの格納が完了するタイミングを早くすることができ、最初のリデュース演算を早く開始することができる。この結果、図４に示す情報処理システム１００Ａに比べて、オールリデュース処理に掛かる時間を短縮することができる。例えば、図１７に示したディープラーニングにおいて、誤差データＥ０１、Ｅ１１、Ｅ２１、Ｅ３１の収集、平均化処理および平均化された誤差データの分配に掛かる時間を短縮することができる。
【０１７４】
以上、図２１に示す実施形態においても、図１から図２０に示す実施形態と同様の効果を得ることができる。さらに、図２１に示す実施形態では、積和演算等の演算処理の完了に基づいて、スレーブが自発的にリデュース演算の対象データをマスタに転送することで、オールリデュース処理に掛かる時間を短縮することができる。
【０１７５】
図２２は、情報処理システムの別の実施形態における動作の一例を示す。図１３と同一または同様の動作については、詳細な説明は省略する。図４から図２０に示す実施形態で説明した要素と同一または同様の要素については、同一の符号を付し、詳細な説明は省略する。図２２に示す動作を実行する情報処理システムの構成および機能は、図５に示すシーケンサ３８の制御の一部が相違することを除き、図４および図５に示す情報処理システム１００Ａの構成および機能と同様である。図２２では、図１３と同様に、ノードＮＤ０のマスタとしての動作と、ノードＮＤ１のスレーブとして動作とが示される。
【０１７６】
この実施形態では、各ノードＮＤ０−ＮＤ３の演算ユニット２０による演算処理の完了に基づいて、図１３と同様に、各ノードＮＤ０−ＮＤ３のメモリ２４からバッファ３０Ａへのリデュース演算に使用するデータの転送が実行される（図２２（ａ））。但し、各ノードＮＤ０−ＮＤ３のメモリ２４からバッファ３０Ｂへのリデュース演算に使用するデータの転送は、この時点では実行されない。図２２において、バッファ３０Ｂへのデータの転送処理を除く動作は、図１３と同じである。
【０１７７】
ノードＮＤ０のＤＭＡユニット３２（マスタ）は、演算ユニット２８がバッファ３０Ａに保持されたデータを使用してリデュース演算を実行中に、バッファ３０Ｂにデータを格納するためのフェッチ要求を発行する（図２２（ｂ））。フェッチ応答に含まれるデータは、リデュース演算を実行中にバッファ３０Ｂに格納される（図２２（ｃ））。
【０１７８】
また、ノードＮＤ０のＤＭＡユニット３２は、演算ユニット２８がバッファ３０Ａに保持されたデータを使用してリデュース演算を実行中に、他ノードＮＤ１−ＮＤ３に、バッファ３０Ｂにデータを格納するためのリデュースＧｅｔ要求を発行する（図２２（ｄ））。他ノードＮＤ１−ＮＤ３のＤＭＡユニット３２（スレーブ）は、バッファ３０Ｂにデータを格納するためのリデュースＧｅｔ要求に基づいて、メモリ２４にフェッチ要求を発行する（図２２（ｅ））。
【０１７９】
他ノードＮＤ１−ＮＤ３のＤＭＡユニット３２は、フェッチ応答によりメモリ２４から読み出したデータを含むリデュースＧｅｔ応答をノードＮＤ０に発行する（図２２（ｆ））。そして、演算ユニット２８がバッファ３０Ａに保持されたデータを使用してリデュース演算を実行中に、他ノードＮＤ１−ＮＤ３から転送されたデータがバッファ３０Ｂに格納される（図２２（ｇ））。
【０１８０】
図２２に示す動作に続いて、図１４に示す動作が実行される。図２２に示す動作では、演算ユニット２０による演算処理の完了に基づいて、バッファ３０Ａにデータが転送され、バッファ３０Ａに転送されたデータを使用してリデュース演算の実行中に、バッファ３０Ｂにデータを格納するためのフェッチ要求およびリデュースＧｅｔ要求が発行される。演算ユニット２０による演算処理の完了に基づいて、バッファ３０Ａにデータを格納するためのＤＭＡ動作を集中して実行することで、バッファ３０Ａへのデータの格納を図１３に比べて早く完了することができる。この結果、図１３に比べて、最初のリデュース演算を早く開始することができ、オールリデュース処理の効率を向上することができる。
【０１８１】
以上、図２２に示す実施形態においても、図１から図２０に示す実施形態と同様の効果を得ることができる。さらに、図２２に示す実施形態では、ＤＭＡユニット３２は、演算ユニット２０による演算処理の完了後のバッファ３０Ｂへの最初のデータの転送を、演算ユニット２８によるバッファ３０Ａに保持されたデータのリデュース演算中に実行する。バッファ３０Ａにデータを格納するためのＤＭＡ動作を集中して実行することで、バッファ３０Ａへのデータの格納を図１３に比べて早く完了することができる。この結果、図１３に比べて、最初のリデュース演算を早く開始することができ、オールリデュース処理の効率を向上することができる。
【０１８２】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１８３】
１…情報処理装置；２…演算処理装置；３…主記憶装置；４…制御装置；５…演算処理部；６…バッファ部；７…転送制御部；１０…ホストＣＰＵ；１２…記憶装置；２０…演算ユニット；２０Ｂ…演算ユニット；２２…メモリコントローラ；２４…メモリ；２６、２６Ｂ…ＤＭＡエンジン；２８…演算ユニット；３０Ａ、３０Ｂ…バッファ；３２、３２Ｂ…ＤＭＡユニット；３４…ディスクリプタ保持部；３６…リクエスト管理部；３８…シーケンサ；４０…メモリアクセス制御部；４０ａ…フェッチ要求管理部；４０ｂ…ストア要求管理部；４０ｃ…ストアバッファ；４２…要求制御部；４４…応答制御部；４６…パケット送信部；４６ａ…送信バッファ；４８…パケット受信部；４８ａ…受信バッファ；１００、１００Ａ、１００Ｂ…情報処理システム；ＢＵＳ…バス；ＮＤ…ノード；ＮＷ…ネットワーク
【図１】
2018160180.tif 000003
【図２】
2018160180.tif 000004
【図３】
2018160180.tif 000005
【図４】
2018160180.tif 000006
【図５】
2018160180.tif 000007
【図６】
2018160180.tif 000008
【図７】
2018160180.tif 000009
【図８】
2018160180.tif 000010
【図９】
2018160180.tif 000011
【図１０】
2018160180.tif 000012
【図１１】
2018160180.tif 000013
【図１２】
2018160180.tif 000014
【図１３】
2018160180.tif 000015
【図１４】
2018160180.tif 000016
【図１５】
2018160180.tif 000017
【図１６】
2018160180.tif 000018
【図１７】
2018160180.tif 000019
【図１８】
2018160180.tif 000020
【図１９】
2018160180.tif 000021
【図２０】
2018160180.tif 000022
【図２１】
2018160180.tif 000023
【図２２】
2018160180.tif 000024