(57)【要約】【課題】演算部の演算に必要なデータの転送量又はデータ保持部の容量を削減することができる演算処理装置を提供することを課題とする。【解決手段】演算処理装置は、各々がデータを記憶する複数の第１のデータ保持部（ＬＲ１〜ＬＲ８）と、データを記憶する共有データ保持部（ＳＲ）と、各々が、前記複数の第１のデータ保持部に記憶されているデータと前記共有データ保持部に記憶されているデータをそれぞれ用いて演算を行う複数の演算部（ＥＸ１〜ＥＸ８）とを有する。【選択図】図９
2018206128.tif 000002
【特許請求の範囲】
【請求項１】
各々がデータを記憶する複数の第１のデータ保持部と、
データを記憶する共有データ保持部と、
各々が、前記複数の第１のデータ保持部に記憶されているデータと前記共有データ保持部に記憶されているデータをそれぞれ用いて演算を行う複数の演算部と
を有することを特徴とする演算処理装置。
【請求項２】
前記複数の第１のデータ保持部は、第１の行列データを記憶し、
前記共有データ保持部は、第２の行列データを記憶し、
前記複数の演算部は、前記第１の行列データと前記第２の行列データの演算を行うこと特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記複数の第１のデータ保持部は、それぞれ、前記第１の行列データのうちの異なる行データを記憶し、
前記複数の演算部の各々は、積和演算処理部を有し、
前記積和演算処理部は、前記第１の行列データのうちの１つの行データと、前記第２の行列データのうちの１つの列データとの積和演算を行い、
前記複数の演算部は、前記第１の行列データと前記第２の行列データの積を演算し、第３の行列データを出力することを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記複数の第１のデータ保持部は、それぞれ、前記第１の行列データのうちの異なる１つの行データを記憶し、
前記複数の演算部の各々は、１個の積和演算処理部を有することを特徴とする請求項３に記載の演算処理装置。
【請求項５】
前記複数の第１のデータ保持部は、それぞれ、前記第１の行列データのうちの異なる複数の行データを記憶し、
前記複数の演算部の各々は、複数の積和演算処理部を有することを特徴とする請求項３に記載の演算処理装置。
【請求項６】
前記複数の演算部は、前記第３の行列データをそれぞれ前記複数の第１のデータ保持部に書き込むことを特徴とする請求項３〜５のいずれか１項に記載の演算処理装置。
【請求項７】
さらに、前記第１の行列データと前記第２の行列データを記憶するメモリ部と、
前記メモリ部に記憶されている前記第１の行列データを前記複数の第１のデータ保持部に転送し、前記メモリ部に記憶されている前記第２の行列データを前記共有データ保持部に転送し、前記複数の第１のデータ保持部に記憶されている前記第３の行列データを前記メモリ部に転送する制御部とを有することを特徴とする請求項６に記載の演算処理装置。
【請求項８】
さらに、複数の第２のデータ保持部を有し、
前記複数の演算部は、前記第３の行列データをそれぞれ前記複数の第２のデータ保持部に書き込むことを特徴とする請求項３〜５のいずれか１項に記載の演算処理装置。
【請求項９】
さらに、前記第１の行列データと前記第２の行列データを記憶するメモリ部と、
前記メモリ部に記憶されている前記第１の行列データを前記複数の第１のデータ保持部に転送し、前記メモリ部に記憶されている前記第２の行列データを前記共有データ保持部に転送し、前記複数の第２のデータ保持部に記憶されている前記第３の行列データを前記メモリ部に転送する制御部とを有することを特徴とする請求項８に記載の演算処理装置。
【請求項１０】
データを記憶するメモリ部と、
複数のデータ保持部と、
前記メモリ部に記憶されている異なる第１のデータを前記複数のデータ保持部に書き込み、前記メモリ部に記憶されている同じ第２のデータを前記複数のデータ保持部に同時に書き込む制御部と、
各々が、前記複数のデータ保持部に記憶されている前記第１のデータと前記第２のデータをそれぞれ用いて演算を行い、第３のデータを出力する複数の演算部とを有し、
前記複数の演算部は、前記第３のデータを前記複数のデータ保持部に書き込み、
前記制御部は、前記複数のデータ保持部に記憶されている前記第３のデータを前記メモリ部に転送することを特徴とする演算処理装置。
【請求項１１】
前記第１のデータは、第１の行列データであり、
前記第２のデータは、第２の行列データであり、
前記第３のデータは、第３の行列データであり、
前記複数の演算部は、前記第１の行列データと前記第２の行列データの演算を行い、前記第３の行列データを出力すること特徴とする請求項１０に記載の演算処理装置。
【請求項１２】
前記複数のデータ保持部は、それぞれ、前記第１の行列データのうちの異なる行データを記憶し、
前記複数の演算部の各々は、積和演算処理部を有し、
前記積和演算処理部は、前記第１の行列データのうちの１つの行データと、前記第２の行列データのうちの１つの列データとの積和演算を行い、
前記複数の演算部は、前記第１の行列データと前記第２の行列データの積を演算し、前記第３の行列データを出力することを特徴とする請求項１１に記載の演算処理装置。
【請求項１３】
前記複数のデータ保持部は、それぞれ、前記第１の行列データのうちの異なる複数の行データを記憶し、
前記複数の演算部の各々は、複数の積和演算処理部を有することを特徴とする請求項１２に記載の演算処理装置。
【請求項１４】
データを記憶する主記憶装置と、
前記主記憶装置に接続される演算処理装置とを有し、
前記演算処理装置は、
各々がデータを記憶する複数の第１のデータ保持部と、
データを記憶する共有データ保持部と、
各々が、前記複数の第１のデータ保持部に記憶されているデータと前記共有データ保持部に記憶されているデータをそれぞれ用いて演算を行う複数の演算部と
を有することを特徴とする情報処理装置。
【請求項１５】
演算処理装置の制御方法であって、
前記演算処理装置が有する複数の第１のデータ保持部の各々が、データを記憶し、
前記演算処理装置が有する共有データ保持部が、データを記憶し、
前記演算処理装置が有する複数の演算部の各々が、前記複数の第１のデータ保持部に記憶されているデータと前記共有データ保持部に記憶されているデータをそれぞれ用いて演算を行うことを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置、情報処理装置及び演算処理装置の制御方法に関する。
【背景技術】
【０００２】
複数のプロセッサから構成されるマルチプロセッサシステムが知られている（特許文献１参照）。マルチプロセッサシステムは、少なくとも二つ以上のプロセッサから参照可能なベクトルレジスタ群を共有する。各ベクトルレジスタは、当該ベクトルレジスタへのアクセスが許可されているプロセッサを識別する手段と、複数のベクトル要素データから成るベルトルデータ値を保持する手段とを有する。さらに、各ベクトルレジスタは、各ベクトル要素データに対応してそれらベクトル要素データの状態の表示及び参照の条件を制御できる手段を有する。
【０００３】
また、複数のアクセス経路を有する中央記憶装置と、複数の処理装置と、接続手段とを有するマルチプロセッサシステムが知られている（特許文献２参照）。複数の処理装置は、それぞれが内部情報経路を有し、それぞれが複数のポートを介して中央記憶装置のアクセス経路に接続される。ポートは、処理装置から内部情報経路を介して基準要求を受け取ると共に、アクセス経路を介して中央記憶装置へのメモリ基準を発生しかつ制御する。接続手段は、１つ又は複数の共用レジスタ、及び共用レジスタがプロセッサ内動作に比例する速度でアクセスされるように共用レジスタを処理装置のそれぞれの内部情報経路に接続する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開昭６４−５７３６６号公報
【特許文献２】特開昭６０−３７０６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
マルチプロセッサシステムは、複数のプロセッサを用いることにより、演算速度を向上させることができる。しかし、プロセッサの演算に必要なデータの転送量が多い場合には、データ転送時間が長くなるので、マルチプロセッサシステムは、プロセッサの数を増やしても、演算効率が低下してしまう。また、ベクトルレジスタの容量が大きい場合には、マルチプロセッサシステムの面積及びコストが増加してしまう。
【０００６】
１つの側面では、本発明の目的は、演算部の演算に必要なデータの転送量又はデータ保持部の容量を削減することができる演算処理装置、情報処理装置及び演算処理装置の制御方法を提供することである。
【課題を解決するための手段】
【０００７】
演算処理装置は、各々がデータを記憶する複数の第１のデータ保持部と、データを記憶する共有データ保持部と、各々が、前記複数の第１のデータ保持部に記憶されているデータと前記共有データ保持部に記憶されているデータをそれぞれ用いて演算を行う複数の演算部とを有する。
【発明の効果】
【０００８】
１つの側面では、演算部の演算に必要なデータの転送量又はデータ保持部の容量を削減することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、第１の実施形態による情報処理装置の構成例を示す図である。
【図２】図２は、実行部の構成例を示す図である。
【図３】図３は、第１の基本技術による実行部の構成例を示す図である。
【図４】図４は、第２の基本技術による実行部の構成例を示す図である。
【図５】図５は、演算器内の８個のＦＭＡ演算部を示す図である。
【図６】図６は、第３の基本技術による実行部の構成例を示す図である。
【図７】図７は、第４の基本技術による実行部の構成例を示す図である。
【図８】図８は、第１の実施形態による実行部の構成例を示す図である。
【図９】図９は、第１の実施形態による他の実行部の構成例を示す図である。
【図１０】図１０は、共有ベクトルレジスタとローカルベクトルレジスタのアドレスマップの例を示す図である。
【図１１】図１１は、図９の演算処理装置の制御方法を示す図である。
【図１２】図１２は、第２の実施形態による実行部の構成例を示す図である。
【図１３】図１３は、第２の実施形態による他の実行部の構成例を示す図である。
【図１４】図１４は、図１３の演算処理装置の制御方法を示す図である。
【図１５】図１５は、第３の実施形態による実行部の構成例を示す図である。
【図１６】図１６は、図１５の演算処理装置の制御方法を示す図である。
【発明を実施するための形態】
【００１０】
（第１の実施形態）
図１は、第１の実施形態による情報処理装置１００の構成例を示す図である。情報処理装置１００は、例えばサーバ又はスーパーコンピュータ等のコンピュータであり、演算処理装置１０１と、入出力装置１０２と、主記憶装置１０３とを有する。入出力装置１０２は、キーボード、表示装置、及びハードディスクドライブ装置等を有する。主記憶装置１０３は、メインメモリであり、データを記憶する。演算処理装置１０１は、入出力装置１０２及び主記憶装置１０３に接続される。
【００１１】
演算処理装置１０１は、例えばプロセッサであり、ロードストア部１０４と、制御部１０５と、実行部１０６とを有する。制御部１０５は、ロードストア部１０４及び実行部１０６を制御する。ロードストア部１０４は、キャッシュメモリ１０７を有し、入出力装置１０２、主記憶装置１０３及び実行部１０６に対して、データを入出力する。キャッシュメモリ１０７は、主記憶装置１０３に記憶されている命令及びデータのうちの使用頻度が高い一部の命令及びデータを記憶する。実行部１０６は、キャッシュメモリ１０７に記憶されているデータを用いて演算を行う。
【００１２】
図２は、実行部１０６の構成例を示す図である。実行部１０６は、データ保持部としてのローカルベクトルレジスタＬＲ１と、ＦＭＡ（fused multiply-add）演算部２００とを有する。ＦＭＡ演算部２００は、積和演算を行う積和演算処理部であり、レジスタ２０１〜２０３と、乗算器２０４と、加減算器２０５と、レジスタ２０６とを有する。
【００１３】
制御部１０５は、キャッシュメモリ１０７とローカルベクトルレジスタＬＲ１との間でデータを転送することができる。ローカルベクトルレジスタＬＲ１は、データＯＰ１、ＯＰ２及びＯＰ３を記憶する。レジスタ２０１は、ローカルベクトルレジスタＬＲ１が出力するデータＯＰ１を記憶する。レジスタ２０２は、ローカルベクトルレジスタＬＲ１が出力するデータＯＰ２を記憶する。レジスタ２０３は、ローカルベクトルレジスタＬＲ１が出力するデータＯＰ３を記憶する。
【００１４】
乗算器２０４は、レジスタ２０１に記憶されているデータＯＰ１とレジスタ２０２に記憶されているデータＯＰ２の乗算を行い、乗算結果を出力する。加減算器２０５は、乗算器２０４の出力データとレジスタ２０３に記憶されているデータＯＰ３との加算又は減算を行い、演算結果を出力する。レジスタ２０６は、加減算器２０５の出力データを記憶し、その記憶しているデータＲＲをローカルベクトルレジスタＬＲ１に出力する。
【００１５】
実行部１０６は、式（１）のように、行列データＡと行列データＢの積を演算し、行列データＣを出力する。行列データＡは、ｍ行ｎ列のデータである。行列データＢは、ｎ行ｐ列のデータである。行列データＣは、ｍ行ｐ列のデータである。
【００１６】
【数１】
2018206128.tif 000003
【００１７】
行列データＣの要素データｃijは、式（２）で表される。ここで、要素データａikは、行列データＡの要素データである。要素データｂkjは、行列データＢの要素データである。
【００１８】
【数２】
2018206128.tif 000004
【００１９】
例えば、要素データｃ11は、式（３）で表される。実行部１０６は、行列データＡの第１の行データａ11、ａ12、ａ13、ａ14、・・・、ａ1nと行列データＢの第１の列データｂ11、ｂ21、ｂ31、ｂ41、・・・、ｂn1との積和演算により、要素データｃ11を求めることができる。
ｃ11＝ａ11ｂ11＋ａ12ｂ21＋ａ13ｂ31＋ａ14ｂ41＋・・・＋ａ1nｂn1  ・・・（３）
【００２０】
まず、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡ及びＢをデータ保持部としてのローカルベクトルレジスタＬＲ１に転送する。第１のサイクルでは、ローカルベクトルレジスタＬＲ１は、データＯＰ１として要素データａ11を出力し、データＯＰ２として要素データｂ11を出力し、データＯＰ３として０を出力する。すると、ＦＭＡ演算部２００は、ＯＰ１×ＯＰ２＋ＯＰ３の演算により、データＲＲとしてａ11ｂ11を出力する。ローカルベクトルレジスタＬＲ１は、データＲＲとしてａ11ｂ11を記憶する。
【００２１】
次に、第２のサイクルでは、ローカルベクトルレジスタＬＲ１は、データＯＰ１として要素データａ12を出力し、データＯＰ２として要素データｂ21を出力し、データＯＰ３として前サイクルのデータＲＲ（＝ａ11ｂ11）を出力する。すると、ＦＭＡ演算部２００は、ＯＰ１×ＯＰ２＋ＯＰ３の演算により、データＲＲとしてａ11ｂ11＋ａ12ｂ21を出力する。ローカルベクトルレジスタＬＲ１は、データＲＲとしてａ11ｂ11＋ａ12ｂ21を記憶する。
【００２２】
次に、第３のサイクルでは、ローカルベクトルレジスタＬＲ１は、データＯＰ１として要素データａ13を出力し、データＯＰ２として要素データｂ31を出力し、データＯＰ３として前サイクルのデータＲＲ（＝ａ11ｂ11＋ａ12ｂ21）を出力する。すると、ＦＭＡ演算部２００は、ＯＰ１×ＯＰ２＋ＯＰ３の演算により、データＲＲとしてａ11ｂ11＋ａ12ｂ21＋ａ13ｂ31を出力する。ローカルベクトルレジスタＬＲ１は、データＲＲとしてａ11ｂ11＋ａ12ｂ21＋ａ13ｂ31を記憶する。以降、実行部１０６は、同様の処理を繰り返し、式（３）により、要素データｃ11を求める。
【００２３】
なお、制御部１０５は、要素データｃ11を示す最終サイクルのデータＲＲのみをローカルベクトルレジスタＬＲ１に書き込み、途中サイクルのデータＲＲをローカルベクトルレジスタＬＲ１に書き込まないようにしてもよい。
【００２４】
また、要素データｃ12は、式（４）で表される。実行部１０６は、行列データＡの第１の行データａ11、ａ12、ａ13、ａ14、・・・、ａ1nと行列データＢの第２の列データｂ12、ｂ22、ｂ32、ｂ42、・・・、ｂn2との積和演算により、要素データｃ12を求めることができる。
ｃ12＝ａ11ｂ12＋ａ12ｂ22＋ａ13ｂ32＋ａ14ｂ42＋・・・＋ａ1nｂn2  ・・・（４）
【００２５】
また、要素データｃ1pは、式（５）で表される。実行部１０６は、行列データＡの第１の行データａ11、ａ12、ａ13、ａ14、・・・、ａ1nと行列データＢの第ｐの列データｂ1p、ｂ2p、ｂ3p、ｂ4p、・・・、ｂnpとの積和演算により、要素データｃ1pを求めることができる。
ｃ1p＝ａ11ｂ1p＋ａ12ｂ2p＋ａ13ｂ3p＋ａ14ｂ4p＋・・・＋ａ1nｂnp  ・・・（５）
【００２６】
また、要素データｃm1は、式（６）で表される。実行部１０６は、行列データＡの第ｍの行データａm1、ａm2、ａm3、ａm4、・・・、ａmnと行列データＢの第１の列データｂ11、ｂ21、ｂ31、ｂ41、・・・、ｂn1との積和演算により、要素データｃm1を求めることができる。
ｃm1＝ａm1ｂ11＋ａm2ｂ21＋ａm3ｂ31＋ａm4ｂ41＋・・・＋ａmnｂn1  ・・・（６）
【００２７】
また、要素データｃm2は、式（７）で表される。実行部１０６は、行列データＡの第ｍの行データａm1、ａm2、ａm3、ａm4、・・・、ａmnと行列データＢの第２の列データｂ12、ｂ22、ｂ32、ｂ42、・・・、ｂn2との積和演算により、要素データｃm2を求めることができる。
ｃm2＝ａm1ｂ12＋ａm2ｂ22＋ａm3ｂ32＋ａm4ｂ42＋・・・＋ａmnｂn2  ・・・（７）
【００２８】
また、要素データｃmpは、式（８）で表される。実行部１０６は、行列データＡの第ｍの行データａm1、ａm2、ａm3、ａm4、・・・、ａmnと行列データＢの第ｐの列データｂ1p、ｂ2p、ｂ3p、ｂ4p、・・・、ｂnpとの積和演算により、要素データｃmpを求めることができる。
ｃmp＝ａm1ｂ1p＋ａm2ｂ2p＋ａm3ｂ3p＋ａm4ｂ4p＋・・・＋ａmnｂnp  ・・・（８）
【００２９】
以上のように、データＯＰ１は、行列データＡである。データＯＰ２は、行列データＢである。データＲＲは、行列データＣである。ローカルベクトルレジスタＬＲ１には、行列データＣが書き込まれる。制御部１０５は、ローカルベクトルレジスタＬＲ１の行列データＣをキャッシュメモリ１０７に転送する。
【００３０】
図３は、第１の基本技術による実行部１０６の構成例を示す図である。実行部１０６は、８個のローカルベクトルレジスタＬＲ１〜ＬＲ８と、８個の演算器ＥＸ１〜ＥＸ８と、セレクタ３００を有する。演算器ＥＸ１〜ＥＸ８の各々は、１個のＦＭＡ演算部２００を有する。ＦＭＡ演算部２００は、図２のＦＭＡ演算部２００と同じ構成を有する。
【００３１】
キャッシュメモリ１０７は、行列データＡ及びＢを記憶する。演算処理装置１０１は、大きな要素数をもつ行列データＡ及びＢの積を求めるに当たり、演算器ＥＸ１〜ＥＸ８毎に小さな部分行列同士の積を算出することを繰り返す。行列データＡ、Ｂ及びＣは、それぞれ、２００×２００の正方行列データである。８個のＦＭＡ演算部２００の各々は、２０×２０行列ずつ演算する。１要素データは、４バイトである。
【００３２】
演算器ＥＸ１〜ＥＸ８の各々は、２０×２０行列の演算を行う。制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの２０×２０行列×４バイト＝１．６ｋバイトの部分行列データＡ1をローカルベクトルレジスタＬＲ１に転送する。そして、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＢのうちの２０×２０行列×４バイト＝１．６ｋバイトの部分行列データＢ1をローカルベクトルレジスタＬＲ１に転送する。
【００３３】
同様に、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの２０×２０行列×４バイト＝１．６ｋバイトの異なる部分行列データＡ2〜Ａ8をローカルベクトルレジスタＬＲ２〜ＬＲ８にそれぞれ転送する。そして、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＢのうちの２０×２０行列×４バイト＝１．６ｋバイトの異なる部分行列データＢ2〜Ｂ8をローカルベクトルレジスタＬＲ２〜ＬＲ８にそれぞれ転送する。
【００３４】
演算器ＥＸ１〜ＥＸ８は、それぞれ、２０×２０の部分行列データＡ1〜Ａ8と２０×２０の部分行列データＢ1〜Ｂ8の積を演算し、行列データＣのうちの異なる２０×２０の部分行列データＣ1〜Ｃ8を求める。制御部１０５は、演算器ＥＸ１〜ＥＸ８により求められた２０×２０の部分行列データＣ1〜Ｃ8をローカルベクトルレジスタＬＲ１〜ＬＲ８にそれぞれ書き込む。ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、２０×２０行列×４バイト＝１．６ｋバイトの異なる部分行列データＣ1〜Ｃ8を記憶する。
【００３５】
ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、１．６ｋバイト×３行列＝４．８ｋバイトの容量を有する。ローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量は、４．８ｋバイト×８＝３８．４ｋバイトである。
【００３６】
次に、２００×２００の正方行列の積を求めるための積和演算処理サイクル数を説明する。２０×２０の正方行列の１要素を求めるための演算回数は２０回であり、２０×２０の正方行列の積を求めるには、２０回×４００要素＝８０００回の演算が必要である。実行部１０６は、２０×２０の正方行列の積を１０回実施することにより、２００×２００の正方行列のうちの２０要素を求めることができる。したがって、積和演算処理サイクル数は、式（９）により、２０×１０6サイクルである。
（８０００回×１０回／２０要素）×４００００要素／８[演算器数]＝２０×１０6
・・・（９）
【００３７】
次に、２００×２００の正方行列の積を求めるために必要なデータ量は、式（１０）により、９６Ｍバイトである。
（４．８ｋバイト×１０回／２０要素）×４００００要素＝９６Ｍバイト
・・・（１０）
【００３８】
上記より、キャッシュメモリ１０７とローカルベクトルレジスタＬＲ１〜ＬＲ８との間のデータ転送量は、式（１１）により、４．８バイト／サイクルであり、動作周波数が１ＧＨｚである場合には、４．８Ｇバイト／ｓである。
９６Ｍバイト／（２０×１０6サイクル）＝４．８バイト／サイクル  ・・・（１１）
【００３９】
図４は、第２の基本技術による実行部１０６の構成例を示す図である。図４の実行部１０６は、図３の実行部１０６に対して、演算器ＥＸ１〜ＥＸ８が異なる。図３の演算器ＥＸ１〜ＥＸ８の各々は、１個のＦＭＡ演算部２００を有する。これに対し、図４の演算器ＥＸ１〜ＥＸ８の各々は、８個のＦＭＡ演算部２００を有するＳＩＭＤ（Single Instruction Multiple Data）演算器である。ＳＩＭＤ演算器ＥＸ１〜ＥＸ８は、それぞれ、一つの命令指示により、複数のデータに対して同一種の演算を行う。以下、図４の実行部１０６が図３の実行部１０６と異なる点を説明する。
【００４０】
図５は、演算器ＥＸ１内の８個のＦＭＡ演算部２００を示す図である。８個のＦＭＡ演算部２００は、それぞれ、相互に異なるデータＯＰ１〜ＯＰ３を入力し、データＲＲを出力する。
【００４１】
次に、図４を参照しながら、データ保持部としてのローカルベクトルレジスタＬＲ１〜ＬＲ８の容量を説明する。図４の演算器ＥＸ１〜ＥＸ８は、それぞれ、図３の演算器ＥＸ１〜ＥＸ８に対して、８倍の数のＦＭＡ演算部２００を有する。したがって、図４の部分行列データＡ1は、図３の部分行列データＡ1の８倍の量であり、１．６ｋバイト×８＝１２．８ｋバイトである。同様に、図４の部分行列データＡ2〜Ａ8、Ｂ1〜Ｂ8及びＣ1〜Ｃ8も、それぞれ、１２．８ｋバイトである。ローカルベクトルレジスタＬＲ１の容量は、１２．８ｋバイト×３行列＝３８．４ｋバイトである。同様に、ローカルベクトルレジスタＬＲ２〜ＬＲ８の容量も、それぞれ、１２．８ｋバイト×３行列＝３８．４ｋバイトである。ローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量は、３８．４ｋバイト×８≒３０７ｋバイトである。
【００４２】
次に、キャッシュメモリ１０７とローカルベクトルレジスタＬＲ１〜ＬＲ８との間のデータ転送量を説明する。図４のデータ転送量は、図３のデータ転送量の８倍であるので、４．８Ｇバイト／ｓ×８＝３８．４Ｇバイト／ｓである。
【００４３】
次に、演算処理装置１０１の制御方法を説明する。キャッシュメモリ１０７は、行列データＡ及びＢを記憶する。制御部１０５は、キャッシュメモリ１０７に記憶されている部分行列データＡ1〜Ａ8をローカルベクトルレジスタＬＲ１〜ＬＲ８にそれぞれ転送する。次に、制御部１０５は、キャッシュメモリ１０７に記憶されている部分行列データＢ1〜Ｂ8をローカルベクトルレジスタＬＲ１〜ＬＲ８にそれぞれ転送する。次に、ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、データＯＰ１〜ＯＰ３をサイクル毎に演算器ＥＸ１〜ＥＸ８に出力する。演算器ＥＸ１〜ＥＸ８は、それぞれ、８個のＦＭＡ演算部２００の積和演算を繰り返し、８個のデータＲＲを出力する。制御部１０５は、演算器ＥＸ１〜ＥＸ８が出力するデータＲＲを部分行列データＣ1〜Ｃ8として、ローカルベクトルレジスタＬＲ１〜ＬＲ８にそれぞれ書き込む。そして、制御部１０５は、ローカルベクトルレジスタＬＲ１〜ＬＲ８に記憶されている部分行列データＣ1〜Ｃ8を、セレクタ３００を介して、順にキャッシュメモリ１０７に転送する。
【００４４】
演算処理装置１０１は、上記の３８．４Ｇバイト／ｓのデータ転送速度を満たせない場合、演算器ＥＸ１〜ＥＸ８に必要なデータを供給できず、演算器ＥＸ１〜ＥＸ８を休ませることになる。すなわち、キャッシュメモリ１０７のバス帯域不足による性能低下となる。なお、演算処理装置１０１は、部分行列の演算を繰り返すためには、同じ行列要素を何度もキャッシュメモリ１０７からローカルベクトルレジスタＬＲ１〜ＬＲ８に転送する必要があり、演算処理に対してデータ転送効率が悪い。後に、演算処理に対してデータ転送効率がよい演算処理装置１０１の実施形態を説明する。
【００４５】
図６は、第３の基本技術による実行部１０６の構成例を示す図である。図６の実行部１０６は、図３の実行部１０６に対して、ローカルベクトルレジスタＬＲ１〜ＬＲ８が記憶するデータが異なる。演算器ＥＸ１〜ＥＸ８の各々は、１個のＦＭＡ演算部２００を有する。キャッシュメモリ１０７は、２００×２００の行列データＡと２００×２００の行列データＢを記憶する。以下、図６の実行部１０６が図３の実行部１０６と異なる点を説明する。
【００４６】
実行部１０６は、大きな要素数をもつ行列データＡ及びＢの積を求めるに当たり、演算器ＥＸ１〜ＥＸ８毎に行列の積の要素を１行（ｃi1，・・・，ｃip）ずつ算出することを繰り返す。例えば、演算器ＥＸ１は、行列データＣの第１の行データｃ11，・・・，ｃ1pを算出する。演算器ＥＸ２は、行列データＣの第２の行データｃ21，・・・，ｃ2pを算出する。演算器ＥＸ３は、行列データＣの第３の行データｃ31，・・・，ｃ3pを算出する。同様に、演算器ＥＸ４〜ＥＸ８は、それぞれ、行列データＣの第４〜第８の行データを算出する。実行部１０６は、２００×２００の正方行列の積を求めるに当たり、１個のＦＭＡ演算部２００毎に１×２００行列ずつ演算する。１要素は４バイトである。
【００４７】
制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの１×２００行列×４バイト＝０．８ｋバイトの部分行列データＡ1をローカルベクトルレジスタＬＲ１に転送する。次に、制御部１０５は、キャッシュメモリ１０７に記憶されている２００×２００行列×４バイト＝１６０ｋバイトの行列データＢをローカルベクトルレジスタＬＲ１に転送する。同様に、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの１×２００行列×４バイト＝０．８ｋバイトの異なる部分行列データＡ2〜Ａ8をローカルベクトルレジスタＬＲ２〜ＬＲ８にそれぞれ転送する。また、制御部１０５は、キャッシュメモリ１０７に記憶されている２００×２００行列×４バイト＝１６０ｋバイトの行列データＢをローカルベクトルレジスタＬＲ２〜ＬＲ８に転送する。ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、行列データＢの全要素を記憶する。
【００４８】
演算器ＥＸ１〜ＥＸ８は、それぞれ、１×２００の部分行列データＡ1〜Ａ8と２００×２００の行列データＢの積を演算し、行列データＣのうちの異なる１×２００の部分行列データＣ1〜Ｃ8を求める。例えば、演算器ＥＸ１は、行列データＡの第１の行データと行列データＢの積和演算により、行列データＣの第１の行データを算出する。演算器ＥＸ２は、行列データＡの第２の行データと行列データＢの積和演算により、行列データＣの第２の行データを算出する。制御部１０５は、演算器ＥＸ１〜ＥＸ８により求められた１×２００の部分行列データＣ1〜Ｃ8をローカルベクトルレジスタＬＲ１〜ＬＲ８にそれぞれ書き込む。ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、１×２００行列×４バイト＝０．８ｋバイトの異なる部分行列データＣ1〜Ｃ8を記憶する。
【００４９】
ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、０．８ｋバイト＋１６０ｋバイト＋０．８ｋバイト≒１６２ｋバイトの容量を有する。ローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量は、１６２ｋバイト×８≒１．３Ｍバイトである。
【００５０】
次に、２００×２００の正方行列の積を求めるための積和演算処理サイクル数を説明する。行列データＣの１×２００の部分行列の１要素を求めるための演算回数は２００回である。２００×２００の行列データＣを算出するための積和演算処理サイクル数は、式（１２）により、１×１０6サイクルである。
２００×２００行列×２００回／８［演算器数］＝１×１０6サイクル
・・・（１２）
【００５１】
次に、２００×２００の正方行列の積を求めるために必要なデータ量は、式（１３）により、４８０ｋバイトである。
２００×２００行列×３［行列数］×４バイト＝４８０ｋバイト  ・・・（１３）
【００５２】
上記より、キャッシュメモリ１０７とローカルベクトルレジスタＬＲ１〜ＬＲ８との間のデータ転送量は、式（１４）により、０．４８バイト／サイクルであり、動作周波数が１ＧＨｚである場合には、４８０Ｍバイト／ｓである。
４８０ｋバイト／（１×１０6サイクル）＝０．４８バイト／サイクル
・・・（１４）
【００５３】
図７は、第４の基本技術による実行部１０６の構成例を示す図である。図７の実行部１０６は、図６の実行部１０６に対して、演算器ＥＸ１〜ＥＸ８が異なる。図６の演算器ＥＸ１〜ＥＸ８の各々は、１個のＦＭＡ演算部２００を有する。これに対し、図７の演算器ＥＸ１〜ＥＸ８の各々は、８個のＦＭＡ演算部２００を有するＳＩＭＤ演算器である。以下、図７の実行部１０６が図６の実行部１０６と異なる点を説明する。
【００５４】
まず、ローカルベクトルレジスタＬＲ１〜ＬＲ８の容量を説明する。図７の演算器ＥＸ１〜ＥＸ８は、それぞれ、図６の演算器ＥＸ１〜ＥＸ８に対して、８倍の数のＦＭＡ演算部２００を有する。部分行列データＡ1は、１×２００行列×８×４バイト＝６．４ｋバイトである。同様に、部分行列データＡ2〜Ａ8及びＣ1〜Ｃ8も、それぞれ、６．４ｋバイトである。行列データＢは、２００×２００行列×４バイト＝１６０ｋバイトである。ローカルベクトルレジスタＬＲ１の容量は、６．４ｋバイト＋１６０ｋバイト＋６．４ｋバイト≒１７３ｋバイトである。同様に、ローカルベクトルレジスタＬＲ２〜ＬＲ８の容量も、それぞれ、１７３ｋバイトである。ローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量は、１７３ｋバイト×８≒１．４Ｍバイトである。
【００５５】
次に、キャッシュメモリ１０７とローカルベクトルレジスタＬＲ１〜ＬＲ８との間のデータ転送量を説明する。図７のデータ転送量は、図６のデータ転送量の８倍であるので、４８０Ｍバイト／ｓ×８＝３．８４Ｇバイト／ｓである。
【００５６】
図４の演算処理装置１０１は、上記のように、ローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量が３０７ｋバイトであり、データ転送量が３８．４Ｇバイト／ｓである。したがって、図７の演算処理装置１０１は、図４の演算処理装置１０１に対して、データ転送量が３．８４Ｇ／３８．４Ｇ＝１／１０であるが、ローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量が１．４Ｍ／３０７ｋ≒４倍であり、大きい。また、図７のローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、大部分が同じ行列データＢであり、使用効率が悪い。後に、ローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量が小さい演算処理装置１０１の実施形態を説明する。
【００５７】
次に、演算処理装置１０１の制御方法を説明する。キャッシュメモリ１０７は、行列データＡ及びＢを記憶する。制御部１０５は、キャッシュメモリ１０７に記憶されている部分行列データＡ1〜Ａ8をローカルベクトルレジスタＬＲ１〜ＬＲ８にそれぞれ転送し、キャッシュメモリ１０７に記憶されている行列データＢをローカルベクトルレジスタＬＲ１〜ＬＲ８にそれぞれ転送する。ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、行列データＢの全要素を記憶する。次に、ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、データＯＰ１〜ＯＰ３をサイクル毎に演算器ＥＸ１〜ＥＸ８に出力する。演算器ＥＸ１〜ＥＸ８は、それぞれ、８個のＦＭＡ演算部２００の積和演算を繰り返し、８個のデータＲＲを出力する。制御部１０５は、演算器ＥＸ１〜ＥＸ８が出力するデータＲＲを部分行列データＣ1〜Ｃ8として、ローカルベクトルレジスタＬＲ１〜ＬＲ８にそれぞれ書き込む。そして、制御部１０５は、ローカルベクトルレジスタＬＲ１〜ＬＲ８に記憶されている部分行列データＣ1〜Ｃ8を、セレクタ３００を介して、順にキャッシュメモリ１０７に転送する。
【００５８】
図８は、第１の実施形態による実行部１０６の構成例を示す図である。実行部１０６は、８個の演算器ＥＸ１〜ＥＸ８と、セレクタ３００と、演算器ＥＸ１〜ＥＸ８から共有される共有データ保持部としての共有ベクトルレジスタＳＲと、演算器ＥＸ１〜ＥＸ８の各々に対して備えられるデータ保持部としての８個のローカルベクトルレジスタＬＲ１〜ＬＲ８とを有する。演算器ＥＸ１〜ＥＸ８の各々は、１個のＦＭＡ演算部２００を有する。ＦＭＡ演算部２００は、図２のＦＭＡ演算部２００と同じ構成を有する。
【００５９】
キャッシュメモリ１０７は、２００×２００の行列データＡ及び２００×２００行列データＢを記憶する。実行部１０６は、行列データＡ及びＢの積を求めるに当たり、演算器ＥＸ１〜ＥＸ８毎に行列の積の要素を１行（ｃi1，・・・，ｃip）ずつ算出することを繰り返す。例えば、演算器ＥＸ１は、行列データＣの第１の行データｃ11，・・・，ｃ1pを算出する。演算器ＥＸ２は、行列データＣの第２の行データｃ21，・・・，ｃ2pを算出する。演算器ＥＸ３は、行列データＣの第３の行データｃ31，・・・，ｃ3pを算出する。同様に、演算器ＥＸ４〜ＥＸ８は、それぞれ、行列データＣの第４〜第８の行データを算出する。実行部１０６は、２００×２００の正方行列の積を求めるに当たり、１個のＦＭＡ演算部２００毎に１×２００行列ずつ演算する。１要素は４バイトである。
【００６０】
制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの１×２００行列×４バイト＝０．８ｋバイトの第１の行の部分行列データＡ1をローカルベクトルレジスタＬＲ１に転送する。同様に、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの１×２００行列×４バイト＝０．８ｋバイトの第２〜第８の行の部分行列データＡ2〜Ａ8をローカルベクトルレジスタＬＲ２〜ＬＲ８にそれぞれ転送する。また、制御部１０５は、キャッシュメモリ１０７に記憶されている２００×２００行列×４バイト＝１６０ｋバイトの行列データＢを共有ベクトルレジスタＳＲに転送する。共有ベクトルレジスタＳＲは、行列データＢの全要素を記憶する。
【００６１】
ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、データＯＰ１及びＯＰ３を演算器ＥＸ１〜ＥＸ８に出力する。共有ベクトルレジスタＳＲは、データＯＰ２を演算器ＥＸ１〜ＥＸ８に出力する。データＯＰ１は、部分行列データＡ1〜Ａ8である。データＯＰ２は、行列データＢである。データＯＰ３は、前サイクルのデータＲＲであり、初期値が０である。
【００６２】
演算器ＥＸ１〜ＥＸ８は、８×２００の第１〜第８の行の部分行列データＡ1〜Ａ8と２００×２００の行列データＢの積を演算し、行列データＣのうちの８×２００の第１〜第８の行の部分行列データＣ1〜Ｃ8を求める。例えば、演算器ＥＸ１は、行列データＡの第１の行データと行列データＢの積和演算により、行列データＣの第１の行データを算出する。演算器ＥＸ２は、行列データＡの第２の行データと行列データＢの積和演算により、行列データＣの第２の行データを算出する。制御部１０５は、演算器ＥＸ１〜ＥＸ８により求められた部分行列データＣ1〜Ｃ8をローカルベクトルレジスタＬＲ１〜ＬＲ８にそれぞれ書き込む。ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、１×２００行列×４バイト＝０．８ｋバイトの異なる部分行列データＣ1〜Ｃ8を記憶する。
【００６３】
以降、演算処理装置１０１は、上記の処理を８行単位で繰り返す。すなわち、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの８×２００の第９〜第１６の行の部分行列データＡ1〜Ａ8をローカルベクトルレジスタＬＲ１〜ＬＲ８にそれぞれ転送する。演算器ＥＸ１〜ＥＸ８は、８×２００の第９〜第１６の行の部分行列データＡ1〜Ａ8と２００×２００の行列データＢの積を演算し、８×２００の第９〜第１６の行の部分行列データＣ1〜Ｃ8を求める。演算処理装置１０１は、上記の処理を第２００の行まで繰り返す。
【００６４】
行列データＢは、上記のように、１６０ｋバイトである。したがって、共有ベクトルレジスタＳＲは、１６０ｋバイトの容量を有する。ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、０．８ｋバイト＋０．８ｋバイト＝１．６ｋバイトの容量を有する。ローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量は、１．６ｋバイト×８≒１３ｋバイトである。共有ベクトルレジスタＳＲとローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量は、１６０ｋバイト＋１３ｋバイト＝１７３ｋバイトである。
【００６５】
次に、２００×２００の正方行列の積を求めるための積和演算処理サイクル数を説明する。行列データＣの１×２００の部分行列の１要素を求めるための演算回数は２００回である。２００×２００の行列データＣを算出するための積和演算処理サイクル数は、式（１５）により、１×１０6サイクルである。
２００×２００行列×２００回／８［演算器数］＝１×１０6サイクル
・・・（１５）
【００６６】
次に、２００×２００の正方行列の積を求めるために必要なデータ量は、式（１６）により、４８０ｋバイトである。
２００×２００行列×３［行列数］×４バイト＝４８０ｋバイト  ・・・（１６）
【００６７】
上記より、キャッシュメモリ１０７とローカルベクトルレジスタＬＲ１〜ＬＲ８との間のデータ転送量は、式（１７）により、０．４８バイト／サイクルであり、動作周波数が１ＧＨｚである場合には、４８０Ｍバイト／ｓである。
４８０ｋバイト／（１×１０6サイクル）＝０．４８バイト／サイクル
・・・（１７）
【００６８】
図９は、第１の実施形態による他の実行部１０６の構成例を示す図である。図９の実行部１０６は、図８の実行部１０６に対して、演算器ＥＸ１〜ＥＸ８が異なる。図８の演算器ＥＸ１〜ＥＸ８の各々は、１個のＦＭＡ演算部２００を有する。これに対し、図９の演算器ＥＸ１〜ＥＸ８の各々は、８個のＦＭＡ演算部２００を有するＳＩＭＤ演算器である。以下、図９の実行部１０６が図８の実行部１０６と異なる点を説明する。
【００６９】
図９の共有ベクトルレジスタＳＲは、図８の共有ベクトルレジスタＳＲと同じく、１６０ｋバイトの容量を有する。図９の演算器ＥＸ１〜ＥＸ８は、それぞれ、図８の演算器ＥＸ１〜ＥＸ８に対して、８倍の数のＦＭＡ演算部２００を有する。部分行列データＡ1は、１×２００行列×８×４バイト＝６．４ｋバイトである。同様に、部分行列データＡ2〜Ａ8及びＣ1〜Ｃ8も、それぞれ、６．４ｋバイトである。ローカルベクトルレジスタＬＲ１の容量は、６．４ｋバイト＋６．４ｋバイト≒１３ｋバイトである。同様に、ローカルベクトルレジスタＬＲ２〜ＬＲ８の容量も、それぞれ、１３ｋバイトである。ローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量は、１３ｋバイト×８＝１０４ｋバイトである。共有ベクトルレジスタＳＲとローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量は、１６０ｋバイト＋１０４ｋバイト＝２６４ｋバイトである。
【００７０】
次に、キャッシュメモリ１０７と共有ベクトルレジスタＳＲ及びローカルベクトルレジスタＬＲ１〜ＬＲ８との間のデータ転送量を説明する。図９のデータ転送量は、図８のデータ転送量の８倍であるので、４８０Ｍバイト／ｓ×８＝３．８４Ｇバイト／ｓである。
【００７１】
図４の演算処理装置１０１は、上記のように、ローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量が３０７ｋバイトであり、データ転送量が３８．４Ｇバイト／ｓである。また、図７の演算処理装置１０１は、上記のように、ローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量が１．４Ｍバイトであり、データ転送量が３．８４Ｇバイト／ｓである。
【００７２】
したがって、図９の演算処理装置１０１は、図４の演算処理装置１０１に対して、データ転送量が３．８４Ｇ／３８．４Ｇ＝１／１０であり、ベクトルレジスタの合計容量が少ない（２６４ｋ／３０７ｋ）。また、図９の演算処理装置１０１は、図７の演算処理装置１０１に対して、データ転送量が同じであり（３．８４Ｇバイト／ｓ）、ベクトルレジスタの合計容量が２６４ｋ／１．４Ｍ≒１／１０である。
【００７３】
図４の演算処理装置１０１は、部分行列の演算を繰り返すため、同じ行列要素を何度もキャッシュメモリ１０７からローカルベクトルレジスタＬＲ１〜ＬＲ８に転送する必要があるため、データ転送量が多くなる。これに対し、図９の演算処理装置１０１は、行列Ａの同じ行の部分行列データＡ1〜Ａ8をキャッシュメモリ１０７からローカルベクトルレジスタＬＲ１〜ＬＲ８に１度だけ転送し、行列データＢの各要素をキャッシュメモリ１０７から共有ベクトルレジスタＳＲに１度だけ転送するので、キャッシュメモリ１０７とベクトルレジスタの間のデータ転送量を減らすことができる。
【００７４】
また、図７の演算処理装置１０１は、８個のローカルベクトルレジスタＬＲ１〜ＬＲ８の各々に行列データＢの全要素を格納する必要がある。これに対し、図９の演算処理装置１０１は、１個の共有ベクトルレジスタＳＲのみに行列データＢの全要素を格納するため、ベクトルレジスタの合計容量を削減することができる。
【００７５】
また、ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、演算器ＥＸ１〜ＥＸ８に対して、データＯＰ１及びＯＰ３の出力ポートと、データＲＲの入力ポートとを有する。これに対し、共有ベクトルレジスタＳＲは、演算器ＥＸ１〜ＥＸ８に対して、データＯＰ２の出力ポートを有し、データの入力ポートを有しない。このため、図９の演算処理装置１０１は、図４及び図７の演算処理装置１０１に対して、ベクトルレジスタの面積対容量の効率がよい。以上のように、図９の演算処理装置１０１は、図４及び図７の演算処理装置１０１に対して、データ転送量及びベクトルレジスタの合計容量が少なく、演算効率及びコストメリットを向上させることができる。
【００７６】
図１０は、共有ベクトルレジスタＳＲとローカルベクトルレジスタＬＲ１〜ＬＲ８のアドレスマップの例を示す図である。共有ベクトルレジスタＳＲのアドレスは、ローカルベクトルレジスタＬＲ１〜ＬＲ８のアドレスとは異なるように割り当てられる。以下、制御部１０５が共有ベクトルレジスタＳＲ及びローカルベクトルレジスタＬＲ１〜ＬＲ８への書き込み及び読み出しを制御する方法を説明する。制御部１０５は、プログラムを実行することにより、上記の転送及び演算の制御を行うことができる。制御部１０５は、プログラム等の上位層により、共有ベクトルレジスタＳＲ及びローカルベクトルレジスタＬＲ１〜ＬＲ８のアドレスを区別して制御する。これにより、制御部１０５は、部分行列データＡ1〜Ａ8をキャッシュメモリ１０７からローカルベクトルレジスタＬＲ１〜ＬＲ８に転送し、行列データＢをキャッシュメモリ１０７から共有ベクトルレジスタＳＲに転送することができる。
【００７７】
図１１は、図９の演算処理装置１０１の制御方法を示す図である。キャッシュメモリ１０７は、２００×２００の行列データＡと、２００×２００の行列データＢを記憶する。まず、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの８×２００の第１〜第８の行の部分行列データＡ1をローカルベクトルレジスタＬＲ１に転送する。また、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの８×２００の第９〜第１６の行の部分行列データＡ2をローカルベクトルレジスタＬＲ２に転送する。同様に、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの４８×２００の第１７〜第６４の行の部分行列データＡ3〜Ａ8をローカルベクトルレジスタＬＲ３〜ＬＲ８に転送する。
【００７８】
次に、制御部１０５は、キャッシュメモリ１０７に記憶されている２００×２００の行列データＢを共有ベクトルレジスタＳＲに転送する。共有ベクトルレジスタＳＲは、行列データＢの全要素を記憶する。ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、データＯＰ１及びＯＰ３を演算器ＥＸ１〜ＥＸ８に出力する。共有ベクトルレジスタＳＲは、データＯＰ２を演算器ＥＸ１〜ＥＸ８に出力する。データＯＰ１は、部分行列データＡ1〜Ａ8である。データＯＰ２は、行列データＢである。データＯＰ３は、前サイクルのデータＲＲであり、初期値が０である。ここで、全演算器ＥＸ１〜ＥＸ８が共有ベクトルレジスタＳＲから入力する行列データＢは同じである。したがって、共有ベクトルレジスタＳＲは、全演算器ＥＸ１〜ＥＸ８に行列データＢをブロードキャストで出力すればよい。
【００７９】
次に、制御部１０５は、演算器ＥＸ１〜ＥＸ８に対して、積和演算の実行開始を指示する。演算器ＥＸ１〜ＥＸ８は、それぞれ、８×２００の部分行列データＡ1〜Ａ8と２００×２００の行列データＢの積を演算し、行列データＣのうちの異なる８×２００の部分行列データＣ1〜Ｃ8を求める。例えば、演算器ＥＸ１は、行列データＡの第１〜第８の行データと行列データＢの積和演算により、行列データＣの第１〜第８の行データを算出する。演算器ＥＸ２は、行列データＡの第９〜第１６の行データと行列データＢの積和演算により、行列データＣの第９〜第１６の行データを算出する。制御部１０５は、演算器ＥＸ１〜ＥＸ８により求められた部分行列データＣ1〜Ｃ8をローカルベクトルレジスタＬＲ１〜ＬＲ８にそれぞれ書き込む。ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、８×２００の部分行列データＣ1〜Ｃ8を記憶する。
【００８０】
次に、制御部１０５は、ローカルベクトルレジスタＬＲ１〜ＬＲ８に記憶されている部分行列データＣ1〜Ｃ8を、セレクタ３００を介して、順にキャッシュメモリ１０７に転送する。
【００８１】
以降、演算処理装置１０１は、上記の処理を６４行単位で繰り返す。すなわち、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの６４×２００の第６５〜第１２８の行の部分行列データＡ1〜Ａ8をローカルベクトルレジスタＬＲ１〜ＬＲ８に転送する。演算器ＥＸ１〜ＥＸ８は、６４×２００の第６５〜第１２８の行の部分行列データＡ1〜Ａ8と２００×２００の行列データＢの積を演算し、６４×２００の第６５〜第１２８の行の部分行列データＣ1〜Ｃ8を求める。演算処理装置１０１は、上記の処理を第２００の行まで繰り返す。これにより、キャッシュメモリ１０７には、２００×２００の行列データＣが記憶される。
【００８２】
なお、上記の制御部１０５の転送と演算器ＥＸ１〜ＥＸ８の演算は、並列に行われる。そのため、制御部１０５が転送している時も、演算器ＥＸ１〜ＥＸ８は、演算しており、演算効率が低下しない。
【００８３】
（第２の実施形態）
図１２は、第２の実施形態による実行部１０６の構成例を示す図である。図１２の実行部１０６は、図８の実行部１０６に対して、ローカルベクトルレジスタＬＲ１〜ＬＲ８の代わりに、ローカルベクトルレジスタＬＲＡ１〜ＬＲＡ８及びＬＲＣ１〜ＬＲＣ８を設けたものである。以下、本実施形態が第１の実施形態と異なる点を説明する。
【００８４】
ローカルベクトルレジスタＬＲＡ１及びＬＲＣ１は、図８のローカルベクトルレジスタＬＲ１を分割したものである。ローカルベクトルレジスタＬＲＡ１は、キャッシュメモリ１０７から転送された１×２００の部分行列データＡ1を記憶し、演算器ＥＸ１にデータＯＰ１として部分行列データＡ1を出力する。ローカルベクトルレジスタＬＲＣ１は、演算器ＥＸ１が出力するデータＲＲを１×２００の部分行列データＣ1として記憶し、演算器ＥＸ１にデータＯＰ３を出力する。
【００８５】
同様に、ローカルベクトルレジスタＬＲＡ２〜ＬＲＡ８及びＬＲＣ２〜ＬＲＣ８は、それぞれ、図８のローカルベクトルレジスタＬＲ２〜ＬＲ８を分割したものである。ローカルベクトルレジスタＬＲＡ２〜ＬＲＡ８は、それぞれ、キャッシュメモリ１０７から転送された１×２００の部分行列データＡ2〜Ａ8を記憶し、演算器ＥＸ２〜ＥＸ８にデータＯＰ１として部分行列データＡ2〜Ａ8を出力する。ローカルベクトルレジスタＬＲＣ２〜ＬＲＣ８は、それぞれ、演算器ＥＸ１〜ＥＸ８が出力するデータＲＲを１×２００の部分行列データＣ2〜Ｃ8として記憶し、演算器ＥＸ２〜ＥＸ８にデータＯＰ３を出力する。
【００８６】
制御部１０５は、ローカルベクトルレジスタＬＲＣ１〜ＬＲＣ８に記憶されている部分行列データＣ1〜Ｃ8を、セレクタ３００を介して、順にキャッシュメモリ１０７に転送する。
【００８７】
共有ベクトルレジスタＳＲとローカルベクトルレジスタＬＲＡ１〜ＬＲＡ８及びＬＲＣ１〜ＬＲＣ８の合計容量は、図８の共有ベクトルレジスタＳＲとローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量と同じであり、１７３ｋバイトである。
【００８８】
また、キャッシュメモリ１０７と、共有ベクトルレジスタＳＲ及びローカルベクトルレジスタＬＲＡ１〜ＬＲＡ８，ＬＲＣ１〜ＬＲＣ８との間のデータ転送量は、図８のキャッシュメモリ１０７と共有ベクトルレジスタＳＲ及びローカルベクトルレジスタＬＲ１〜ＬＲ８との間のデータ転送量と同じであり、４８０Ｍバイト／ｓである。
【００８９】
ローカルベクトルレジスタＬＲＣ１〜ＬＲＣ８は、それぞれ、演算器ＥＸ１〜ＥＸ８に対して、データＯＰ３の出力ポートと、データＲＲの入力ポートとを有する。これに対し、ローカルベクトルレジスタＬＲＡ１〜ＬＲＡ８は、それぞれ、演算器ＥＸ１〜ＥＸ８に対して、データＯＰ１の出力ポートを有し、データの入力ポートを有しない。これにより、ローカルベクトルレジスタＬＲＡ１〜ＬＲＡ８の物量及び配線を削減し、ベクトルレジスタの面積対容量の効率を高めることができる。
【００９０】
図１３は、第２の実施形態による他の実行部１０６の構成例を示す図である。図１３の実行部１０６は、図１２の実行部１０６に対して、演算器ＥＸ１〜ＥＸ８が異なる。図１２の演算器ＥＸ１〜ＥＸ８の各々は、１個のＦＭＡ演算部２００を有する。これに対し、図１３の演算器ＥＸ１〜ＥＸ８の各々は、８個のＦＭＡ演算部２００を有するＳＩＭＤ演算器である。以下、図１３の実行部１０６が図１２の実行部１０６と異なる点を説明する。
【００９１】
ローカルベクトルレジスタＬＲＡ１〜ＬＲＡ８は、それぞれ、８×２００の部分行列データＡ1〜Ａ8を記憶し、容量が６．４ｋバイトである。ローカルベクトルレジスタＬＲＣ１〜ＬＲＣ８は、それぞれ、８×２００の部分行列データＣ1〜Ｃ8を記憶し、容量が６．４ｋバイトである。
【００９２】
共有ベクトルレジスタＳＲとローカルベクトルレジスタＬＲＡ１〜ＬＲＡ８及びＬＲＣ１〜ＬＲＣ８の合計容量は、図９の共有ベクトルレジスタＳＲとローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量と同じであり、２６４ｋバイトである。
【００９３】
また、キャッシュメモリ１０７と、共有ベクトルレジスタＳＲ及びローカルベクトルレジスタＬＲＡ１〜ＬＲＡ８，ＬＲＣ１〜ＬＲＣ８との間のデータ転送量は、図９のキャッシュメモリ１０７と共有ベクトルレジスタＳＲ及びローカルベクトルレジスタＬＲ１〜ＬＲ８との間のデータ転送量と同じであり、３．８４Ｇバイト／ｓである。
【００９４】
図１４は、図１３の演算処理装置１０１の制御方法を示す図である。キャッシュメモリ１０７は、２００×２００の行列データＡと、２００×２００の行列データＢを記憶する。まず、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの８×２００の第１〜第８の行の部分行列データＡ1をローカルベクトルレジスタＬＲＡ１に転送する。また、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの８×２００の第９〜第１６の行の部分行列データＡ2をローカルベクトルレジスタＬＲＡ２に転送する。同様に、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの４８×２００の第１７〜第６４の行の部分行列データＡ3〜Ａ8をローカルベクトルレジスタＬＲＡ３〜ＬＲＡ８に転送する。
【００９５】
次に、制御部１０５は、キャッシュメモリ１０７に記憶されている２００×２００の行列データＢを共有ベクトルレジスタＳＲに転送する。共有ベクトルレジスタＳＲは、行列データＢの全要素を記憶する。ローカルベクトルレジスタＬＲＡ１〜ＬＲＡ８は、それぞれ、データＯＰ１を演算器ＥＸ１〜ＥＸ８に出力する。共有ベクトルレジスタＳＲは、データＯＰ２を演算器ＥＸ１〜ＥＸ８に出力する。ローカルベクトルレジスタＬＲＣ１〜ＬＲＣ８は、それぞれ、データＯＰ３を演算器ＥＸ１〜ＥＸ８に出力する。データＯＰ１は、部分行列データＡ1〜Ａ8である。データＯＰ２は、行列データＢである。データＯＰ３は、前サイクルのデータＲＲであり、初期値が０である。
【００９６】
次に、制御部１０５は、演算器ＥＸ１〜ＥＸ８に対して、積和演算の実行開始を指示する。演算器ＥＸ１〜ＥＸ８は、それぞれ、８×２００の部分行列データＡ1〜Ａ8と２００×２００の行列データＢの積を演算し、行列データＣのうちの異なる８×２００の部分行列データＣ1〜Ｃ8を求める。例えば、演算器ＥＸ１は、行列データＡの第１〜第８の行データと行列データＢの積和演算により、行列データＣの第１〜第８の行データを算出する。演算器ＥＸ２は、行列データＡの第９〜第１６の行データと行列データＢの積和演算により、行列データＣの第９〜第１６の行データを算出する。制御部１０５は、演算器ＥＸ１〜ＥＸ８により求められた部分行列データＣ1〜Ｃ8をローカルベクトルレジスタＬＲＣ１〜ＬＲＣ８にそれぞれ書き込む。ローカルベクトルレジスタＬＲＣ１〜ＬＲＣ８は、それぞれ、８×２００の部分行列データＣ1〜Ｃ8を記憶する。
【００９７】
次に、制御部１０５は、ローカルベクトルレジスタＬＲＣ１〜ＬＲＣ８に記憶されている部分行列データＣ1〜Ｃ8を、セレクタ３００を介して、順にキャッシュメモリ１０７に転送する。
【００９８】
以降、演算処理装置１０１は、上記の処理を６４行単位で繰り返す。すなわち、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの６４×２００の第６５〜第１２８の行の部分行列データＡ1〜Ａ8をローカルベクトルレジスタＬＲＡ１〜ＬＲＡ８に転送する。演算器ＥＸ１〜ＥＸ８は、６４×２００の第６５〜第１２８の行の部分行列データＡ1〜Ａ8と２００×２００の行列データＢの積を演算し、６４×２００の第６５〜第１２８の行の部分行列データＣ1〜Ｃ8を求める。演算処理装置１０１は、上記の処理を第２００の行まで繰り返す。これにより、キャッシュメモリ１０７には、２００×２００の行列データＣが記憶される。
【００９９】
なお、上記の制御部１０５の転送と演算器ＥＸ１〜ＥＸ８の演算は、並列に行われる。そのため、制御部１０５が転送している時も、演算器ＥＸ１〜ＥＸ８は、演算しており、演算効率が低下しない。
【０１００】
（第３の実施形態）
図１５は、第３の実施形態による実行部１０６の構成例を示す図である。図１５の実行部１０６は、図７の実行部１０６に対して、構成が同じであり、制御方法が異なる。実行部１０６は、８個のローカルベクトルレジスタＬＲ１〜ＬＲ８と、８個の演算器ＥＸ１〜ＥＸ８と、セレクタ３００とを有する。演算器ＥＸ１〜ＥＸ８の各々は、８個のＦＭＡ演算部２００を有する。ローカルベクトルレジスタＬＲ１は、８×２００の部分行列データＡ1と、２００×２００の行列データＢと、８×２００の部分行列データＣ1を記憶する。同様に、ローカルベクトルレジスタＬＲ２〜ＬＲ８は、それぞれ、８×２００の部分行列データＡ2〜Ａ8と、２００×２００の行列データＢと、８×２００の部分行列データＣ2〜Ｃ8を記憶する。ローカルベクトルレジスタＬＲ１〜ＬＲ８の合計容量は、図７のものと同じであり、１７３ｋバイト×８＝１．４Ｍバイトである。以下、図１５の演算処理装置１０１が図７の演算処理装置１０１と異なる点を説明する。
【０１０１】
まず、図７の演算処理装置１０１の制御方法を説明する。まず、制御部１０５は、部分行列データＡ1をキャッシュメモリ１０７からローカルベクトルレジスタＬＲ１に転送し、行列データＢをキャッシュメモリ１０７からローカルベクトルレジスタＬＲ１に転送する。次に、制御部１０５は、部分行列データＡ2をキャッシュメモリ１０７からローカルベクトルレジスタＬＲ２に転送し、行列データＢをキャッシュメモリ１０７からローカルベクトルレジスタＬＲ２に転送する。その後、同様に、制御部１０５は、部分行列データＡ3〜Ａ8をキャッシュメモリ１０７からローカルベクトルレジスタＬＲ３〜ＬＲ８に順に転送し、行列データＢをキャッシュメモリ１０７からローカルベクトルレジスタＬＲ３〜ＬＲ８に順に転送する。キャッシュメモリ１０７とローカルベクトルレジスタＬＲ１〜ＬＲ８との間のデータ転送量は、上記のように、３．８４Ｇバイト／ｓである。
【０１０２】
次に、図１５の演算処理装置１０１の制御方法を説明する。まず、制御部１０５は、部分行列データＡ1をキャッシュメモリ１０７からローカルベクトルレジスタＬＲ１に転送する。次に、制御部１０５は、部分行列データＡ2をキャッシュメモリ１０７からローカルベクトルレジスタＬＲ２に転送する。次に、制御部１０５は、同様に、部分行列データＡ3〜Ａ8をキャッシュメモリ１０７からローカルベクトルレジスタＬＲ３〜ＬＲ８に順に転送する。次に、制御部１０５は、キャッシュメモリ１０７から行列データＢを読み出す。キャッシュメモリ１０７は、行列データＢをブロードキャストでローカルベクトルレジスタＬＲ１〜ＬＲ８に出力する。制御部１０５は、同じ行列データＢをローカルベクトルレジスタＬＲ１〜ＬＲ８に同時に書き込む。
【０１０３】
図７の演算処理装置１０１がキャッシュメモリ１０７からローカルベクトルレジスタＬＲ１〜ＬＲ８に転送する行列データＢのデータ量は、１６０ｋバイト×８である。これに対し、図１５の演算処理装置１０１がキャッシュメモリ１０７からローカルベクトルレジスタＬＲ１〜ＬＲ８に転送する行列データＢのデータ量は、１６０ｋバイトである。したがって、図１５の演算処理装置１０１では、キャッシュメモリ１０７とローカルベクトルレジスタＬＲ１〜ＬＲ８との間のデータ転送量は、３．８４Ｇバイト／ｓ−１６０ｋ×７＝２．７２Ｇバイト／ｓであり、図７のものより少なく、演算効率が向上する。
【０１０４】
図１６は、図１５の演算処理装置１０１の制御方法を示す図である。キャッシュメモリ１０７は、２００×２００の行列データＡと、２００×２００の行列データＢを記憶する。まず、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの８×２００の第１〜第８の行の部分行列データＡ1を読み出し、部分行列データＡ1をローカルベクトルレジスタＬＲ１に書き込む。次に、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの８×２００の第９〜第１６の行の部分行列データＡ2を読み出し、部分行列データＡ2をローカルベクトルレジスタＬＲ２に書き込む。同様に、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの４８×２００の第１７〜第６４の行の部分行列データＡ3〜Ａ8を順に読み出し、部分行列データＡ3〜Ａ8をローカルベクトルレジスタＬＲ３〜ＬＲ８に順に書き込む。
【０１０５】
次に、制御部１０５は、キャッシュメモリ１０７に記憶されている２００×２００の行列データＢを読み出す。キャッシュメモリ１０７は、行列データＢをブロードキャストでローカルベクトルレジスタＬＲ１〜ＬＲ８に出力する。制御部１０５は、同じ行列データＢをローカルベクトルレジスタＬＲ１〜ＬＲ８に同時に書き込む。ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、データＯＰ１〜ＯＰ３を演算器ＥＸ１〜ＥＸ８に出力する。データＯＰ１は、部分行列データＡ1〜Ａ8である。データＯＰ２は、行列データＢである。データＯＰ３は、前サイクルのデータＲＲであり、初期値が０である。
【０１０６】
次に、制御部１０５は、演算器ＥＸ１〜ＥＸ８に対して、積和演算の実行開始を指示する。演算器ＥＸ１〜ＥＸ８は、それぞれ、８×２００の部分行列データＡ1〜Ａ8と２００×２００の行列データＢの積を演算し、行列データＣのうちの異なる８×２００の部分行列データＣ1〜Ｃ8を求める。例えば、演算器ＥＸ１は、行列データＡの第１〜第８の行データと行列データＢの積和演算により、行列データＣの第１〜第８の行データを算出する。演算器ＥＸ２は、行列データＡの第９〜第１６の行データと行列データＢの積和演算により、行列データＣの第９〜第１６の行データを算出する。制御部１０５は、演算器ＥＸ１〜ＥＸ８により求められた部分行列データＣ1〜Ｃ8をローカルベクトルレジスタＬＲ１〜ＬＲ８にそれぞれ書き込む。ローカルベクトルレジスタＬＲ１〜ＬＲ８は、それぞれ、８×２００の部分行列データＣ1〜Ｃ8を記憶する。
【０１０７】
次に、制御部１０５は、ローカルベクトルレジスタＬＲ１〜ＬＲ８に記憶されている部分行列データＣ1〜Ｃ8を、セレクタ３００を介して、順にキャッシュメモリ１０７に転送する。
【０１０８】
以降、演算処理装置１０１は、上記の処理を６４行単位で繰り返す。すなわち、制御部１０５は、キャッシュメモリ１０７に記憶されている行列データＡのうちの６４×２００の第６５〜第１２８の行の部分行列データＡ1〜Ａ8をローカルベクトルレジスタＬＲ１〜ＬＲ８に転送する。演算器ＥＸ１〜ＥＸ８は、６４×２００の第６５〜第１２８の行の部分行列データＡ1〜Ａ8と２００×２００の行列データＢの積を演算し、６４×２００の第６５〜第１２８の行の部分行列データＣ1〜Ｃ8を求める。演算処理装置１０１は、上記の処理を第２００の行まで繰り返す。これにより、キャッシュメモリ１０７には、２００×２００の行列データＣが記憶される。
【０１０９】
以上のように、第１〜第３の実施形態によれば、演算器ＥＸ１〜ＥＸ８の演算に必要なデータの転送量又はベクトルレジスタの容量を削減することができる。これにより、演算処理装置１０１は、行列の乗算処理などの科学技術計算において、演算器ＥＸ１〜ＥＸ８の個数を増やした分だけ性能を向上させることができる。
【０１１０】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【０１１１】
１００  情報処理装置
１０１  演算処理装置
１０２  入出力装置
１０３  主記憶装置
１０４  ロードストア部
１０５  制御部
１０６  実行部
１０７  キャッシュメモリ
２００  ＦＭＡ演算部
３００  セレクタ
ＳＲ  共有ベクトルレジスタ
ＬＲ１〜ＬＲ８  ローカルベクトルレジスタ
ＥＸ１〜ＥＸ８  演算器
【図１】
2018206128.tif 000005
【図２】
2018206128.tif 000006
【図３】
2018206128.tif 000007
【図４】
2018206128.tif 000008
【図５】
2018206128.tif 000009
【図６】
2018206128.tif 000010
【図７】
2018206128.tif 000011
【図８】
2018206128.tif 000012
【図９】
2018206128.tif 000013
【図１０】
2018206128.tif 000014
【図１１】
2018206128.tif 000015
【図１２】
2018206128.tif 000016
【図１３】
2018206128.tif 000017
【図１４】
2018206128.tif 000018
【図１５】
2018206128.tif 000019
【図１６】
2018206128.tif 000020