(57)【要約】【課題】行列積演算処理を行う演算処理装置において、演算処理全体でのデータ移動の回数を削減し消費電力を低減する。【解決手段】複数の乗算器と複数の加算器とを有し行列積演算処理を行う演算処理装置において、行列積演算における行、列が異なる要素の演算処理を、演算処理に係る入力ベクトルデータの各データをそれぞれ２つの乗算器で使用し１つの命令で行うようにして、入力データの共有を可能にし、行列積演算処理全体でのデータの移動回数を削減し、消費電力を低減する。【選択図】図１
2014186461.tif 000002
【特許請求の範囲】
【請求項１】
第１組の４つの入力データのうちの第１の入力データを第１入力に受けるとともに、第２組の４つの入力データのうちの第１の入力データを第２入力に受けて、当該入力データの積を出力する第１の乗算器と、
前記第１組の第２の入力データを第１入力に受けるとともに、前記第２組の第３の入力データを第２入力に受けて、当該入力データの積を出力する第２の乗算器と、
前記第１組の前記第２の入力データを第１入力に受けるとともに、前記第２組の第４の入力データを第２入力に受けて、当該入力データの積を出力する第３の乗算器と、
前記第１組の前記第１の入力データを第１入力に受けるとともに、前記第２組の第２の入力データを第２入力に受けて、当該入力データの積を出力する第４の乗算器と、
前記第１組の第３の入力データを第１入力に受けるとともに、前記第２組の前記第１の入力データを第２入力に受けて、当該入力データの積を出力する第５の乗算器と、
前記第１組の第４の入力データを第１入力に受けるとともに、前記第２組の前記第３の入力データを第２入力に受けて、当該入力データの積を出力する第６の乗算器と、
前記第１組の前記第４の入力データを第１入力に受けるとともに、前記第２組の前記第４の入力データを第２入力に受けて、当該入力データの積を出力する第７の乗算器と、
前記第１組の前記第３の入力データを第１入力に受けるとともに、前記第２組の前記第２の入力データを第２入力に受けて、当該入力データの積を出力する第８の乗算器と、
前記第１の乗算器の出力と前記第２の乗算器の出力とを加算し、第１の出力データとして加算結果を出力する第１の加算器と、
前記第３の乗算器の出力と前記第４の乗算器の出力とを加算し、第２の出力データとして加算結果を出力する第２の加算器と、
前記第５の乗算器の出力と前記第６の乗算器の出力とを加算し、第３の出力データとして加算結果を出力する第３の加算器と、
前記第７の乗算器の出力と前記第８の乗算器の出力とを加算し、第４の出力データとして加算結果を出力する第４の加算器とを有することを特徴とする演算処理装置。
【請求項２】
第３組の４つの入力データのうちの第１の入力データと前記第１の加算器の出力とを加算し、前記第１の出力データとして加算結果を出力する第５の加算器と、
前記第３組の第２の入力データと前記第２の加算器の出力とを加算し、前記第２の出力データとして加算結果を出力する第６の加算器と、
前記第３組の第３の入力データと前記第３の加算器の出力とを加算し、前記第３の出力データとして加算結果を出力する第７の加算器と、
前記第３組の第４の入力データと前記第４の加算器の出力とを加算し、前記第４の出力データとして加算結果を出力する第８の加算器とをさらに有することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記第２の乗算器及び前記第６の乗算器が、前記第２組の前記第２の入力データを前記第２入力に受け、
前記第４の乗算器及び前記第８の乗算器が、前記第２組の前記第３の入力データを前記第２入力に受けることを特徴とする請求項１又は２記載の演算処理装置。
【請求項４】
前記第２組の前記第２の入力データ又は前記第３の入力データを、制御信号に応じて選択して出力する複数のセレクタを有し、
前記第２の乗算器及び前記第６の乗算器は、第１のセレクタの出力を前記第２入力に受け、
前記第２の乗算器及び前記第６の乗算器は、前記第１のセレクタが前記制御信号に応じて前記第２の入力データを出力しているときに前記第３の入力データを出力し、前記第１のセレクタが前記制御信号に応じて前記第３の入力データを出力しているときに前記第２の入力データを出力する第２のセレクタの出力を前記第２入力に受けることを特徴とする請求項１又は２記載の演算処理装置。
【請求項５】
複数組の前記入力データが格納されるデータ格納部から前記入力データを読み出して前記乗算器に供給する処理制御部をさらに有することを特徴とする請求項１〜４の何れか１項に記載の演算処理装置。
【請求項６】
前記データ格納部に格納される複数組の前記入力データは、Ｎ×Ｎ行列を分割した２×２部分行列における４つのデータであり、
前記処理制御部は、Ｎ×Ｎ行列において演算対象の行に対応する第１のＮ×Ｎ行列内の複数の２×２部分行列における４つのデータを前記第１組の入力データとして前記乗算器に順次供給するとともに、演算対象の列に対応する第２のＮ×Ｎ行列内の複数の２×２部分行列における４つのデータを前記第２組の入力データとして前記乗算器に順次供給することを特徴とする請求項５記載の演算処理装置。
【請求項７】
複数の乗算器及び複数の加算器を有する演算処理装置による演算処理方法であって、
前記演算処理装置の第１の乗算器が、第１組の４つの入力データのうちの第１の入力データと第２組の４つの入力データのうちの第１の入力データとの積を出力し、
前記演算処理装置の第２の乗算器が、前記第１組の第２の入力データと前記第２組の第３の入力データとの積を出力し、
前記演算処理装置の第３の乗算器が、前記第１組の前記第２の入力データと前記第２組の第４の入力データとの積を出力し、
前記演算処理装置の第４の乗算器が、前記第１組の前記第１の入力データと前記第２組の第２の入力データとの積を出力し、
前記演算処理装置の第５の乗算器が、前記第１組の第３の入力データと前記第２組の前記第１の入力データとの積を出力し、
前記演算処理装置の第６の乗算器が、前記第１組の第４の入力データと前記第２組の前記第３の入力データとの積を出力し、
前記演算処理装置の第７の乗算器が、前記第１組の前記第４の入力データと前記第２組の前記第４の入力データとの積を出力し、
前記演算処理装置の第８の乗算器が、前記第１組の前記第３の入力データと前記第２組の前記第２の入力データとの積を出力し、
前記演算処理装置の第１の加算器が、前記第１の乗算器の出力と前記第２の乗算器の出力との和を第１の出力データとして出力し、
前記演算処理装置の第２の加算器が、前記第３の乗算器の出力と前記第４の乗算器の出力との和を第２の出力データとして出力し、
前記演算処理装置の第３の加算器が、前記第５の乗算器の出力と前記第６の乗算器の出力との和を第３の出力データとして出力し、
前記演算処理装置の第４の加算器が、前記第７の乗算器の出力と前記第８の乗算器の出力との和を第４の出力データとして出力することを特徴とする演算処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置及び演算処理方法に関する。
【背景技術】
【０００２】
プロセステクノロジの進歩により、シリコンチップ上に多くのトランジスタが集積されるようになった。一方、演算処理における演算精度は３２ビットもしくは６４ビットで十分である場合が多い。このため、多数のトランジスタを有効に利用する処理方式として、１つの命令で多数の演算器を並列に駆動し複数のデータについて処理するＳＩＭＤ（Single Instruction Multiple Data）方式が広く普及している（例えば、特許文献１参照）。
【０００３】
現在の一般的なＳＩＭＤ方式では、例えば、１２８ビットや２５６ビットのベクトルレジスタに、３２ビットや６４ビットのデータを複数格納する。ベクトルデータの四則演算は、図９に一例を示すように通常の四則演算の演算器を複数並べ、対応するデータ同士の四則演算を各演算器が行うことで実現できる。図９には、４つの乗算器１０１−ｉ（ｉ＝１、２、３、４）を有し、４要素のベクトルデータの積を計算する演算処理部１００を一例として示している。乗算器１０１−ｉは、各入力ベクトルデータａ、ｂの１つの要素であるデータａ（ｉ−１）及びデータｂ（ｉ−１）が入力され、データａ（ｉ−１）とデータｂ（ｉ−１）の積を出力ベクトルデータｃの１つの要素となるデータｃ（ｉ−１）として出力する。
【０００４】
このように現代のＳＩＭＤ方式は、１サイクルで多数の演算器にデータを供給するために用いられることが多く、ベクトルレジスタ長が従来のような数千ビットのものより短く数百ビットに止まり、ショートベクトルＳＩＭＤ方式とも呼ばれる。ベクトル演算は、科学技術計算で多用される行列演算の効率的な処理に適している。以下、一例としてＮ×Ｎ（Ｎは２以上の整数）の２次元行列Ａ、Ｂ、Ｃについて、行列Ａと行列Ｂの積を行列Ｃに加算する演算処理について説明する。
【０００５】
図１０は、スカラー演算処理で、行列Ａと行列Ｂの積を行列Ｃに加算する処理の例を示すフローチャートである。処理が開始されると、まずステップＳ３０１にて、変数ｊを０に初期化する。次に、ステップＳ３０２にて、変数ｊの値を確認し、変数ｊの値がＮより小さければステップＳ３０３へ進み、そうでなければ処理を終了する。ステップＳ３０３にて変数ｉを０に初期化する。次に、ステップＳ３０４にて、変数ｉの値を確認し、変数ｉの値がＮより小さければステップＳ３０５へ進み、そうでなければステップＳ３１０にて変数ｊの値に１を加算してステップＳ３０２へ進む。ステップＳ３０５にて変数ｋを０に初期化する。次に、ステップＳ３０６にて、変数ｋの値を確認し、変数ｋの値がＮより小さければステップＳ３０７へ進み、そうでなければステップＳ３０９にて変数ｉの値に１を加算してステップＳ３０４へ進む。ステップＳ３０７にて、行列Ａの第（ｊ＋１）行・第（ｋ＋１）列のデータＡ[j][k]と行列Ｂの第（ｋ＋１）行・第（ｉ＋１）列のデータＢ[k][i]の積を行列Ｃの第（ｊ＋１）行・第（ｉ＋１）列のデータＣ[j][i]に加算し、加算結果を行列Ｃの第（ｊ＋１）行・第（ｉ＋１）列のデータとする演算を行う。続いて、ステップＳ３０８にて、変数ｋの値に１を加算してステップＳ３０６へ進む。スカラー演算処理で実行した場合には、図１０に示したように変数ｉ、ｊ、ｋの３重のループ処理によりＮ3回の積及び和の演算を行っている。また、必要な命令数はＮ3である。
【０００６】
図１１は、４要素のベクトル演算処理で、行列Ａと行列Ｂの積を行列Ｃに加算する処理の例を示すフローチャートである。図１１に示すステップＳ４０１〜Ｓ４０６、ステップＳ４０８、及びＳ４０９での処理は、図１０に示したステップＳ３０１〜Ｓ３０６、ステップＳ３０８、及びＳ３０９での処理に対応し、処理内容は同様であるので、その説明は省略する。ステップＳ４０６において変数ｋの値がＮより小さい場合に進むステップＳ４０７にて、行列Ａの第（ｊ＋ｘ＋１）行・第（ｋ＋１）列（ｘ＝０、１、２、３）のデータＡ[j+x][k]と行列Ｂの第（ｋ＋１）行・第（ｉ＋１）列のデータＢ[k][i]の積を行列Ｃの第（ｊ＋ｘ＋１）行・第（ｉ＋１）列のデータＣ[j+x][i]に加算し、行列Ｃの第（ｊ＋ｘ＋１）行・第（ｉ＋１）列のデータとする演算を行う。すなわち、図１１に示す例では、連続する４要素についてのベクトル積演算及びベクトル和演算を１命令で行う。また、ステップＳ４０４において変数ｉの値がＮより小さい場合に進むステップＳ４１０にて変数ｊの値に４を加算してステップＳ４０２へ進む。図１１に示したベクトル演算処理で実行した場合には、連続する４要素でベクトル積演算及びベクトル和演算を行うので、Ｎ3回の積及び和の演算が（Ｎ3／４）の命令で実行される。
【０００７】
また、同一の演算処理が可能な複数のベクトル演算器に、同一のベクトルレジスタの異なる要素のデータを供給して演算処理を行うことで、未使用のベクトル演算器を有効に活用し、１サイクル当たりの処理要素数を増加させ演算能力を向上させることが可能な演算処理装置が提案されている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特表２００８−５１９３４９号公報
【特許文献２】特開平１０−３１２３７４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
半導体集積回路は、現代のプロセステクノロジでは電源電圧が１Ｖ程度から下がらないにもかかわらず、集積されるトランジスタ数が増加しているため、消費電力が大きな問題となっている。特に、シリコンチップ上のデータ移動は電力消費が大きく、レジスタ等のデータ格納部に対する入出力回数を減らすことや、データ格納部と演算処理部とを近接配置することが重要になっている。前述した２つの行列の積を求める行列積演算は、行列のデータが格納されるデータ格納部と演算処理部との間でのデータの移動が多い演算処理の１つである。行列積演算は１つの要素に係る演算では同じデータを使用しないため、例えば１つの要素に係る演算をベクトル演算化しても演算処理部へのデータの入力回数が減らず、行列積演算処理を行う演算処理装置の消費電力を低減することができない。
【００１０】
１つの側面では、本発明の目的は、行列積演算処理を行う演算処理装置において、演算処理全体でのデータ移動の回数を削減することにより消費電力を低減することにある。
【課題を解決するための手段】
【００１１】
演算処理装置の一態様は、第１組の４つの入力データ及び第２組の４つの入力データを受ける複数の乗算器と、複数の乗算器の出力を加算し出力データとして加算結果を出力する複数の加算器とを有する。第１の出力データとして、第１組の第１の入力データと第２組の第１の入力データの積と、第１組の第２の入力データと第２組の第３の入力データの積との和を出力する。第２の出力データとして、第１組の第２の入力データと第２組の第４の入力データの積と、第１組の第１の入力データと第２組の第２の入力データの積との和を出力する。第３の出力データとして、第１組の第３の入力データと第２組の第１の入力データの積と、第１組の第４の入力データと第２組の第３の入力データの積との和を出力する。第４の出力データとして、第１組の第４の入力データと第２組の第４の入力データの積と、第１組の第３の入力データと第２組の第２の入力データの積との和を出力する。
【発明の効果】
【００１２】
２つの入力行列のデータを第１組の入力データ、第２組の入力データとして供給することにより、各入力データが２つの乗算器にそれぞれ供給されるので、行列積演算処理全体でのデータ移動の回数を削減することができ、演算処理装置の消費電力を低減することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の第１の実施形態における演算処理装置の構成例を示す図である。
【図２】本実施形態における演算処理装置の構成例を示す図である。
【図３】本実施形態における演算処理装置による演算処理の例を示すフローチャートである。
【図４】本発明の第２の実施形態における演算処理装置の構成例を示す図である。
【図５】本発明の第３の実施形態における演算処理装置の構成例を示す図である。
【図６】本発明の第４の実施形態における演算処理装置の構成例を示す図である。
【図７】本発明の第４の実施形態における演算処理装置の他の構成例を示す図である。
【図８】本発明の第４の実施形態における演算処理装置の他の構成例を示す図である。
【図９】従来の演算処理装置の構成例を示す図である。
【図１０】従来の行列演算処理（スカラー演算処理）の例を示すフローチャートである。
【図１１】従来の行列演算処理（ベクトル演算処理）の例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下、本発明の実施形態を図面に基づいて説明する。
前述したように行列積演算は、１つの要素に係る演算では同じデータを使用しないため、１つの要素に係る演算をベクトル演算化してもデータ格納部と演算処理部との間でのデータの移動回数が減らない。しかし、行が異なり列が同じ要素の演算では同じ列のデータが使用され、列が異なり行が同じ要素の演算では同じ行のデータが使用される。そこで、本実施形態では、行列積演算における行、列が異なる要素の演算処理を１つの命令で行うようにして入力データの共有を可能にし、データ格納部と演算処理部との間でのデータ移動の回数を低減できるようにする。
【００１５】
（第１の実施形態）
本発明の第１の実施形態について説明する。
図１は、第１の実施形態における演算処理装置が有する演算処理部の構成例を示す図である。演算処理部１０Ａは、２つの２×２行列を入力とし、これら入力行列の行列積を出力とする行列積演算器である。第１の入力行列は、データａ０、ａ１、ａ２、ａ３を要素とするベクトルデータａであり、第２の入力行列は、データｂ０、ｂ１、ｂ２、ｂ３を要素とするベクトルデータｂであり、出力行列は、データｃ０、ｃ１、ｃ２、ｃ３を要素とするベクトルデータｃである。ここで、データａ０、ｂ０、ｃ０を各行列における第１行第１列のデータ、データａ１、ｂ１、ｃ１を各行列における第１行第２列のデータ、データａ２、ｂ２、ｃ２を各行列における第２行第１列のデータ、データａ３、ｂ３、ｃ３を各行列における第２行第２列のデータとする。また、各データａ０〜ａ３、ｂ０〜ｂ３、ｃ０〜ｃ３は、数値データであり、データ型は任意である。各データａ０〜ａ３、ｂ０〜ｂ３、ｃ０〜ｃ３のデータ型は、例えば浮動小数点数型、固定小数点数型、整数型などである。
【００１６】
演算処理部１０Ａは、８つの乗算器１１−１〜１１−８、及び４つの加算器１２−１〜１２−４を有する。第１の乗算器１１−１には、４要素の入力ベクトルデータａの第１要素であるデータａ０が第１入力に入力され、４要素の入力ベクトルデータｂの第１要素であるデータｂ０が第２入力に入力される。第１の乗算器１１−１は、入力されるデータａ０とデータｂ０の積を出力する。第２の乗算器１１−２には、入力ベクトルデータａの第２要素であるデータａ１が第１入力に入力され、入力ベクトルデータｂの第３要素であるデータｂ２が第２入力に入力される。第２の乗算器１１−２は、入力されるデータａ１とデータｂ２の積を出力する。第１の加算器１２−１は、第１の乗算器１１−１の出力と第２の乗算器１１−２の出力を加算して、加算結果を４要素の出力ベクトルデータｃの第１要素となるデータｃ０として出力する。
【００１７】
第３の乗算器１１−３には、入力ベクトルデータａのデータａ１が第１入力に入力され、入力ベクトルデータｂの第４要素であるデータｂ３が第２入力に入力される。第３の乗算器１１−３は、入力されるデータａ１とデータｂ３の積を出力する。第４の乗算器１１−４には、入力ベクトルデータａのデータａ０が第１入力に入力され、入力ベクトルデータｂの第２要素であるデータｂ１が第２入力に入力される。第４の乗算器１１−４は、入力されるデータａ０とデータｂ１の積を出力する。第２の加算器１２−２は、第３の乗算器１１−３の出力と第４の乗算器１１−４の出力を加算して、加算結果を出力ベクトルデータｃの第２要素となるデータｃ１として出力する。
【００１８】
第５の乗算器１１−５には、入力ベクトルデータａの第３要素であるデータａ２が第１入力に入力され、入力ベクトルデータｂのデータｂ０が第２入力に入力される。第５の乗算器１１−５は、入力されるデータａ２とデータｂ０の積を出力する。第６の乗算器１１−６には、入力ベクトルデータａの第４要素であるデータａ３が第１入力に入力され、入力ベクトルデータｂのデータｂ２が第２入力に入力される。第６の乗算器１１−６は、入力されるデータａ３とデータｂ２の積を出力する。第３の加算器１２−３は、第５の乗算器１１−５の出力と第６の乗算器１１−６の出力を加算して、加算結果を出力ベクトルデータｃの第３要素となるデータｃ２として出力する。
【００１９】
第７の乗算器１１−７には、入力ベクトルデータａのデータａ３が第１入力に入力され、入力ベクトルデータｂのデータｂ３が第２入力に入力される。第７の乗算器１１−７は、入力されるデータａ３とデータｂ３の積を出力する。第８の乗算器１１−８には、入力ベクトルデータａのデータａ２が第１入力に入力され、入力ベクトルデータｂのデータｂ１が第２入力に入力される。第８の乗算器１１−８は、入力されるデータａ２とデータｂ１の積を出力する。第４の加算器１２−４は、第７の乗算器１１−７の出力と第８の乗算器１１−８の出力を加算して、加算結果を出力ベクトルデータｃの第４要素となるデータｃ３として出力する。
【００２０】
このように入力ベクトルデータａの第１要素であるデータａ０は、第１の乗算器１１−１及び第４の乗算器１１−４に入力され、入力ベクトルデータａの第２要素であるデータａ１は、第２の乗算器１１−２及び第３の乗算器１１−３に入力される。入力ベクトルデータａの第３要素であるデータａ２は、第５の乗算器１１−５及び第８の乗算器１１−８に入力され、入力ベクトルデータａの第４要素であるデータａ３は、第６の乗算器１１−６及び第７の乗算器１１−７に入力される。
【００２１】
また、入力ベクトルデータｂの第１要素であるデータｂ０は、第１の乗算器１１−１及び第５の乗算器１１−５に入力され、入力ベクトルデータｂの第２要素であるデータｂ１は、第４の乗算器１１−４及び第８の乗算器１１−８に入力される。入力ベクトルデータｂの第３要素であるデータｂ２は、第２の乗算器１１−２及び第６の乗算器１１−６に入力され、入力ベクトルデータｂの第４要素であるデータｂ３は、第３の乗算器１１−３及び第７の乗算器１１−７に入力される。
【００２２】
このようにして、レジスタ等のデータ格納部から読み出される各データａ０〜ａ３、ｂ０〜ｂ３を、それぞれ２つの乗算器１１−１〜１１−８で使用して行列積演算に係る演算処理を行う。したがって、従来手法による行列積演算処理と比較して演算処理部１０Ａへのデータの入力回数を（１／２）に削減することができ、消費電力を低減することができる。
【００２３】
図２は、本実施形態における演算処理装置の構成例を示す図である。本実施形態における演算処理装置は、データ格納部３１、処理制御部３２、及び行列演算器３３を有する。データ格納部３１は、例えばレジスタやメモリであり、演算処理等に係るデータを格納する。データ格納部３１には、行列演算器３３での行列演算に係る入出力データが格納される。処理制御部３２は、演算処理に係る各種制御を行う。処理制御部３２は、例えば命令を発行したりデータの授受を制御したりする。行列演算器３３は、本実施形態における演算処理部１０Ａを含み、処理制御部３２による制御に従って行列積演算処理を行う。なお、データ格納部３１と行列演算器３３とが直接にデータを授受可能なようにしても良い。
【００２４】
図３は、本実施形態における演算処理装置での演算処理部１０Ａを使用したＮ×Ｎ行列の行列積演算処理の例を示すフローチャートである。
処理を開始すると、ステップＳ２０１にて、処理制御部３２は、変数ｊを０に初期化する。次に、ステップＳ２０２にて、処理制御部３２は、変数ｊの値を確認し、変数ｊの値がＮより小さければステップＳ２０３へ進み、そうでなければ処理を終了する。ステップＳ２０３にて、処理制御部３２は、変数ｉを０に初期化する。次に、ステップＳ２０４にて、処理制御部３２は、変数ｉの値を確認し、変数ｉの値がＮより小さければステップＳ２０５へ進み、そうでなければステップＳ２１０にて変数ｊの値に２を加算してステップＳ２０２へ進む。ステップＳ２０５にて、処理制御部３２は、変数ｋを０に初期化する。次に、ステップＳ２０６にて、処理制御部３２は、変数ｋの値を確認し、変数ｋの値がＮより小さければステップＳ２０７へ進み、そうでなければステップＳ２０９にて変数ｉの値に２を加算してステップＳ２０４へ進む。
【００２５】
ステップＳ２０７にて、処理制御部３２は、データ格納部３１から行列Ａの第（ｊ＋１）行・第（ｋ＋１）列のデータＡ[j][k]、第（ｊ＋１）行・第（ｋ＋２）列のデータＡ[j][k+1]、第（ｊ＋２）行・第（ｋ＋１）列のデータＡ[j+1][k]、第（ｊ＋２）行・第（ｋ＋２）列のデータＡ[j+1][k+1]を読み出す。また、処理制御部３２は、データ格納部３１から行列Ｂの第（ｋ＋１）行・第（ｉ＋１）列のデータＢ[k][i]、第（ｋ＋１）行・第（ｉ＋２）列のデータＢ[k][i+1]、第（ｋ＋２）行・第（ｉ＋１）列のデータＢ[k+1][i]、第（ｋ＋２）行・第（ｉ＋２）列のデータＢ[k+1][i+1]を読み出す。そして、処理制御部３２は、読み出したデータＡ[j][k]、Ａ[j][k+1]、Ａ[j+1][k]、Ａ[j+1][k+1]をデータａ０、ａ１、ａ２、ａ３とし、データＢ[k][i]、Ｂ[k][i+1]、Ｂ[k+1][i]、Ｂ[k+1][i+1]をデータｂ０、ｂ１、ｂ２、ｂ３として行列演算器３３の演算処理部１０Ａに供給する。
【００２６】
行列演算器３３の演算処理部１０Ａは、データａ０、ｂ０の積とデータａ１、ｂ２の積との和である（Ａ[j][k]×Ｂ[k][i]＋Ａ[j][k+1]×Ｂ[k+1][i]）をデータｃ０として出力し、データａ１、ｂ３の積とデータａ０、ｂ１の積との和である（Ａ[j][k+1]×Ｂ[k+1][i+1]＋Ａ[j][k]×Ｂ[k][i+1]）をデータｃ１として出力する。また、演算処理部１０Ａは、データａ２、ｂ０の積とデータａ３、ｂ２の積との和である（Ａ[j+1][k]×Ｂ[k][i]＋Ａ[j+1][k+1]×Ｂ[k+1][i]）をデータｃ２として出力し、データａ３、ｂ３の積とデータａ２、ｂ１の積との和である（Ａ[j+1][k+1]×Ｂ[k+1][i+1]＋Ａ[j+1][k]×Ｂ[k][i+1]）をデータｃ３として出力する。
【００２７】
さらに、行列演算器３３は、行列Ｃの第（ｊ＋１）行・第（ｉ＋１）列のデータＣ[j][i]にデータｃ０を加算して行列Ｃの第（ｊ＋１）行・第（ｉ＋１）列のデータとし、行列Ｃの第（ｊ＋１）行・第（ｉ＋２）列のデータＣ[j][i+1]にデータｃ１を加算して行列Ｃの第（ｊ＋１）行・第（ｉ＋２）列のデータとする。同様に、行列演算器３３は、行列Ｃの第（ｊ＋２）行・第（ｉ＋１）列のデータＣ[j+1][i]にデータｃ２を加算して行列Ｃの第（ｊ＋２）行・第（ｉ＋１）列のデータとし、行列Ｃの第（ｊ＋２）行・第（ｉ＋２）列のデータＣ[j+1][i+1]にデータｃ３を加算して行列Ｃの第（ｊ＋２）行・第（ｉ＋２）列のデータとする。
【００２８】
続いて、ステップＳ２０８にて、処理制御部３２は、変数ｋの値に２を加算してステップＳ２０６へ進む。このようにして、処理対象のＮ×Ｎの入力行列を２×２部分行列に分割してＮ×Ｎ行列の行列積演算処理を行う。行列積演算処理では、演算対象の第（ｊ＋１）行及び第（ｊ＋２）行にある第１のＮ×Ｎ入力行列内の複数の２×２部分行列のデータを順次供給するとともに、演算対象の第（ｉ＋１）列及び第（ｉ＋２）列にある第２のＮ×Ｎ入力行列内の複数の２×２部分行列のデータを順次供給して演算処理が行われる。
【００２９】
以上のように本実施形態によれば、図３に示されるように、変数ｉ、ｊ、ｋに係るループ処理の回数がすべて（Ｎ／２）回となり、ステップＳ２０７の処理の実行回数は（Ｎ3／８）となる。ステップＳ２０７の処理の１回当たり８個のデータを使用するので、Ｎ×Ｎ行列の行列積演算処理の全体での入力データの移動回数はＮ3回となる。一方、従来手法では、Ｎ×Ｎ行列の行列積演算処理の全体での入力データの移動回数は２Ｎ3回である。したがって、データ格納部３１と演算処理部１０Ａとの間でのデータ移動の回数を（１／２）に削減することができ、消費電力を低減することができる。また、Ｎ×Ｎ行列の行列積演算処理を行うための命令数が、スカラー演算処理で行う場合と比較して（１／８）となり処理時間も短縮することができる。
【００３０】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。なお、以下に説明する第２〜第４の実施形態の各々において、演算処理装置の全体構成、及び演算処理装置によるＮ×Ｎ行列の行列積演算処理は、第１の実施形態と同様であるので説明は省略し、演算処理装置が有する演算処理部の構成について説明する。
【００３１】
図４は、第２の実施形態における演算処理装置が有する演算処理部の構成例を示す図である。図４において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。演算処理部１０Ｂは、２つの２×２行列を入力とし、第１の入力行列と転置した第２の入力行列との行列積を出力とする行列積演算器である。演算処理部１０Ｂは、入力ベクトルデータｂのデータｂ１が乗算器１１−２、１１−６の第２入力に入力され、入力ベクトルデータｂのデータｂ２が乗算器１１−４、１１−８の第２入力に入力される点が、図１に示した演算処理部１０Ａと異なる。
【００３２】
行列積の演算処理は、一方の行列の行方向のデータと他方の行列の列方向のデータとの乗算である。例えば行方向で先頭から最後まで連続してある行単位でデータを格納していき行方向の最後になると次の行にシフトして格納するようにして、両方の行列のデータを同じようにしてデータ格納部に格納すると、入力ベクトルデータｂとして読み出されるデータは連続した領域ではなく、とびとびの領域に格納されることになる。したがって、データ格納部からのデータ読み出しにおいてオーバーヘッドが大きくなってしまう。それに対して、第２の実施形態によれば、第２の入力行列としてのベクトルデータｂのデータｂ０、ｂ１、ｂ２、ｂ３については、行列の転置と同様に入れ換えているので、両方の行列のデータを同じようにして格納しても、データ格納部からのデータ読み出しにおけるオーバーヘッドを抑制することができる。
【００３３】
（第３の実施形態）
次に、本発明の第３の実施形態について説明する。
図５は、第３の実施形態における演算処理装置が有する演算処理部の構成例を示す図である。図５において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。演算処理部１０Ｃは、２つの２×２行列及び制御信号（切り替え信号）Ｔを入力とし、制御信号Ｔによって第２の入力行列を転置するかを選択して、２つの入力行列の行列積を出力とする行列積演算器である。
【００３４】
演算処理部１０Ｃは、８つの乗算器１１−１〜１１−８、及び４つの加算器１２−１〜１２−４に加え、４つのセレクタ１３−１〜１３−４を有する。セレクタ１３−１〜１３−４には、入力ベクトルデータｂのデータｂ１、ｂ２及び制御信号Ｔが入力される。第１のセレクタ１３−１及び第３のセレクタ１３−３は、制御信号Ｔがオフ状態（例えば０）であればデータｂ２を出力し、制御信号Ｔがオン状態（例えば１）であればデータｂ１を出力する。第２のセレクタ１３−２及び第４のセレクタ１３−４は、制御信号Ｔがオフ状態（例えば０）であればデータｂ１を出力し、制御信号Ｔがオン状態（例えば１）であればデータｂ０を出力する。
【００３５】
第１のセレクタ１３−１の出力は第２の乗算器１１−２の第２入力に入力し、第２のセレクタ１３−２の出力は第４の乗算器１１−４の第２入力に入力する。また、第３のセレクタ１３−３の出力は第６の乗算器１１−６の第２入力に入力し、第４のセレクタ１３−４の出力は第８の乗算器１１−８の第２入力に入力する。
【００３６】
このような構成により、入力行列のベクトルデータのデータ格納部における格納方法に応じて、第２の入力行列を転置するかを適宜選択して行列積演算処理を行うことができる。
【００３７】
（第４の実施形態）
次に、本発明の第４の実施形態について説明する。
図６は、第４の実施形態における演算処理装置が有する演算処理部の構成例を示す図である。図６において、図１に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。第４の実施形態における演算処理部は、３つの２×２行列を入力とし、２つの入力行列（第１の入力行列及び第２の入力行列）の行列積と１つの入力行列（第３の入力行列）との和を出力とする行列積演算器である。
【００３８】
第１の入力行列は、データａ０、ａ１、ａ２、ａ３を要素とするベクトルデータａであり、第２の入力行列は、データｂ０、ｂ１、ｂ２、ｂ３を要素とするベクトルデータｂであり、第３の入力行列は、データｃ０、ｃ１、ｃ２、ｃ３を要素とするベクトルデータｃである。また、出力行列は、データｄ０、ｄ１、ｄ２、ｄ３を要素とするベクトルデータｄである。ここで、データａ０、ｂ０、ｃ０、ｄ０を各行列における第１行第１列のデータ、データａ１、ｂ１、ｃ１、ｄ１を各行列における第１行第２列のデータ、データａ２、ｂ２、ｃ２、ｄ２を各行列における第２行第１列のデータ、データａ３、ｂ３、ｃ３、ｄ３を各行列における第２行第２列のデータとする。また、各データａ０〜ａ３、ｂ０〜ｂ３、ｃ０〜ｃ３、ｄ０〜ｄ３は、数値データであり、データ型は任意である。各データａ０〜ａ３、ｂ０〜ｂ３、ｃ０〜ｃ３、ｄ０〜ｄ３のデータ型は、例えば浮動小数点数型、固定小数点数型、整数型などである。
【００３９】
演算処理部２０Ａは、８つの乗算器１１−１〜１１−８、及び４つの加算器１２−１〜１２−４に加えて、４つの加算器２１−１〜２１−４を有する点が、図１に示した演算処理部１０Ａと異なる。第５の加算器２１−１は、第１の加算器１２−１の出力と入力ベクトルデータｃの第１要素であるデータｃ０を加算して、加算結果を出力ベクトルデータｄの第１要素となるデータｄ０として出力する。第６の加算器２１−２は、第２の加算器１２−２の出力と入力ベクトルデータｃの第２要素であるデータｃ１を加算して、加算結果を出力ベクトルデータｄの第２要素となるデータｄ１として出力する。
【００４０】
第７の加算器２１−３は、第３の加算器１２−３の出力と入力ベクトルデータｃの第３要素であるデータｃ２を加算して、加算結果を出力ベクトルデータｄの第３要素となるデータｄ２として出力する。第８の加算器２１−４は、第４の加算器１２−４の出力と入力ベクトルデータｃの第４要素であるデータｃ３を加算して、加算結果を出力ベクトルデータｄの第４要素となるデータｄ３として出力する。
【００４１】
このように加算器２１−１〜２１−４を設けることで、入力ベクトルデータａ、ｂ、ｃとして行列Ａ、Ｂ、Ｃのデータを入力し、出力ベクトルデータｄを行列Ｃのデータとすることで、演算処理部２０Ａで図２のステップＳ２０７に示す演算を１命令で実行することができる。
【００４２】
前述した説明では、図１に示した第１の実施形態における演算処理部に対して、４つの加算器２１−１〜２１−４を設けた例を説明したが、図７及び図８に示すように第２及び第３の実施形態における演算処理部に対して４つの加算器２１−１〜２１−４を設けるようにしても良い。
【００４３】
図７は、第４の実施形態における演算処理装置が有する演算処理部の他の構成例を示す図である。図７において、図１、図４、図６に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。図７に示す演算処理部２０Ｂは、図４に示した第２の実施形態における演算処理部に対して、４つの加算器２１−１〜２１−４を設けたものである。
【００４４】
また、図８は、第４の実施形態における演算処理装置が有する演算処理部の他の構成例を示す図である。図８において、図１、図５、図６に示した構成要素と同一の機能を有する構成要素には同一の符号を付し、重複する説明は省略する。図８に示す演算処理部２０Ｃは、図５に示した第３の実施形態における演算処理部に対して、４つの加算器２１−１〜２１−４を設けたものである。
【００４５】
なお、前記実施形態は、何れも本発明を実施するにあたっての具体化のほんの一例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、またはその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００４６】
１０Ａ、１０Ｂ、１０Ｃ  演算処理部
１１−１〜１１−２  乗算器
１２−１〜１２−４  加算器
１３−１〜１３−４  セレクタ
２０Ａ、２０Ｂ、２０Ｃ  演算処理部
２１−１〜２１−４  加算器
３１  データ格納部
３２  処理制御部
３３  行列演算器
【図１】
2014186461.tif 000003
【図２】
2014186461.tif 000004
【図３】
2014186461.tif 000005
【図４】
2014186461.tif 000006
【図５】
2014186461.tif 000007
【図６】
2014186461.tif 000008
【図７】
2014186461.tif 000009
【図８】
2014186461.tif 000010
【図９】
2014186461.tif 000011
【図１０】
2014186461.tif 000012
【図１１】
2014186461.tif 000013