(57)【特許請求の範囲】
【請求項１】
第１のサイズの行列演算に適したデータ配列又は前記第１のサイズを拡大した第２のサイズの行列演算に適したデータ配列のデータが格納されたメモリと、
前記メモリに格納された前記第１のサイズの行列演算に適したデータ配列のデータに対して第１のサイズの行列演算を行う機能と、前記メモリに格納された前記第２のサイズの行列演算に適したデータ配列のデータに対して前記第２のサイズの行列演算を行う機能と、を有する行列演算部と、
前記第１のサイズの行列演算に適したデータ配列と、前記第２のサイズの行列演算に適したデータ配列とを、前記メモリ上で少なくとも一方向に変換可能なデータ配列変換部と、
を有し、
前記第２のサイズの行列演算に適したデータ配列は、前記第２のサイズの行列を構成する行列要素が、前記第１のサイズの行列を行方向及び列方向それぞれに複数並べたもので、ストリーム型処理において連続して処理される第２のサイズの行列を同一ラインに複数組並べたデータ配列であり、
前記第１のサイズの行列演算に適したデータ配列は、ストリーム型処理において連続して処理される第１のサイズの行列を同一ラインに複数並べたデータ配列の複数組が複数ラインに格納されたデータ配列である、
行列演算装置。
【請求項２】
前記メモリには、前記第１のサイズの行列演算に適したデータ配列が格納されており、
前記データ配列変換部は、前記メモリに格納された同一ラインに複数並べた第１のサイズの行列を複数組読み出してデータ格納部に各組を行方向に格納することにより行列状のデータを前記データ格納部上に生成し、該行列状のデータを列方向に順次読み出して前記メモリの同一ラインに並べて書き込むことにより、前記第１のサイズの行列演算に適したデータ配列を、前記第２のサイズの行列演算に適したデータ配列に変換する、
請求項１記載の行列演算装置。
【請求項３】
前記メモリには、前記第２のサイズの行列演算に適したデータ配列が格納されており、
前記データ配列変換部は、前記メモリに格納された同一ラインに複数並べた第２のサイズの行列を複数組読み出してデータ格納部に各組を列方向に格納することにより行列状のデータを前記データ格納部上に生成し、該行列状のデータを行方向に順次読み出して前記メモリの複数ラインに分配して書き込むことにより、前記第２のサイズの行列演算に適したデータ配列を、前記第１のサイズの行列演算に適したデータ配列に変換する、
請求項１記載の行列演算装置。
【請求項４】
前記データ配列変換部は、前記データ格納部を複数個備え、前記複数個のデータ格納部のうちの１つの書き込み時に前記複数個のデータ格納部のうちの他の１つの読み出しを行い、前記メモリから前記第２のサイズの行列に相当するデータが書き込まれる度に前記複数個のデータ格納部それぞれの書き込みと読み出しを切り替える、
請求項２又は３記載の行列演算装置。
【請求項５】
前記メモリには、前記第１のサイズの行列演算に適したデータ配列が格納されており、
前記データ配列変換部は、
前記第１のサイズの行列演算に適したデータ配列に対応した複数の第１のデータ入出力部と、
前記第１のサイズの行列演算に適したデータ配列に対応した複数の第１のデータ入出力部により前記メモリの前記第１のサイズの行列演算に適したデータ配列の複数ラインそれぞれから読み出される第１のサイズの行列を順次取り出して出力する複数のデータ抽出部と、
前記複数のデータ抽出部がそれぞれ出力したデータが結合されて前記第２のサイズの行列演算に適したデータ配列として格納される第１のデータ格納部と、
前記第２のサイズの行列演算に適したデータ配列に対応した第２のデータ入出力部と、
を備えることにより、前記第１のサイズの行列演算に適したデータ配列を、前記第２のサイズの行列演算に適したデータ配列に変換して前記第１のデータ格納部から前記第２のデータ入出力部により前記メモリの同一ラインに並べて書き込む、
請求項１記載の行列演算装置。
【請求項６】
前記メモリには、前記第２のサイズの行列演算に適したデータ配列が格納されており、
前記データ配列変換部は、
前記第１のサイズの行列演算に適したデータ配列に対応した複数の第１のデータ入出力部と、
前記複数の第１のデータ入出力部に対応した複数の第２のデータ格納部と、
前記第２のサイズの行列演算に適したデータ配列に対応した第２のデータ入出力部と、
前記第２のデータ入出力部により前記メモリの前記第２のサイズの行列演算に適したデータ配列のラインから読み出される第２のサイズの行列を、前記第１のサイズの行列に分解して前記複数の第２のデータ格納部それぞれに書き込むデータ分配部と、
を備えることにより、前記第２のサイズの行列演算に適したデータ配列を、前記第１のサイズの行列演算に適したデータ配列に変換して前記複数の第２のデータ格納部から前記複数の第１のデータ入出力部により前記メモリの複数ラインに並べて書き込む、
請求項１記載の行列演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、行列演算装置に関する。
【背景技術】
【０００２】
従来、無線通信ベースバンド処理などで、大量の行列演算処理が必要となる場合がある。このような同一の行列処理を大量のデータに施す際には、メモリから一連のデータを連続して読み出して演算を行い、一連の演算結果をメモリにおける連続したアドレスに書き込むストリーム型の演算処理装置が好適に用いられる。
【０００３】
行列とメモリに関連した２次元配列転置回路が知られている。この２次元配列転置回路では、アドレス変換回路が、下位ビットのアドレス信号が行アドレスを与え、上位ビットのアドレス信号が列アドレスを与えるように制御する第１の制御動作を行う。また、アドレス変換回路が、上位ビットのアドレス信号が行アドレスを与え、下位ビットのアドレス信号が列アドレスを与えるように制御する第２の制御動作を行う。そして、２次元配列転置回路は、第１の制御動作と第２の制御動作のいずれかの制御動作を行うことにより、メモリに書き込まれた２次元配列のデータの転置読み出しを行う。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１０−２０７８６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、メモリ上の大量のデータを連続アドレスでアクセスしてストリーム処理するプロセッサの場合、データが連続アドレスに並んでいないと処理性能が大きく低下してしまう。
【０００６】
しかしながら、例えば２×２行列演算と４×４行列演算を行うプロセッサの場合、２×２行列演算の結果は、２×２行列演算を対象とするのに適した形式でメモリに格納される。このため、メモリ上の２×２行列演算の結果を４×４行列演算の対象とする場合、２×２行列演算の結果であるデータ配列が４×４行列演算に適したものでないため、処理を効率的に行うことができない場合があった。同様に、４×４行列演算の結果を２×２行列演算の対象とする場合も、４×４行列演算の結果のデータ配列が２×２行列演算に適したものでないため、処理を効率的に行うことができない場合があった。
【０００７】
この点、上記従来の２次元配列転置回路は、単にメモリに書き込まれた２次元配列のデータの転置読み出しを行うものであり、異なるサイズの行列演算に適した形式でデータを配列可能なものでは無い。
【０００８】
一つの側面では、本発明は、行列演算を効率的に行うことを目的とする。
【課題を解決するための手段】
【０００９】
本発明の一態様は、第１のサイズの行列演算に適したデータ配列又は前記第１のサイズを拡大した第２のサイズの行列演算に適したデータ配列のデータが格納されたメモリと、前記メモリに格納された前記第１のサイズの行列演算に適したデータ配列のデータに対して第１のサイズの行列演算を行う機能と、前記メモリに格納された前記第２のサイズの行列演算に適したデータ配列のデータに対して前記第２のサイズの行列演算を行う機能と、を有する行列演算部と、前記第１のサイズの行列演算に適したデータ配列と、前記第２のサイズの行列演算に適したデータ配列とを、前記メモリ上で少なくとも一方向に変換可能なデータ配列変換部と、を有し、前記第２のサイズの行列演算に適したデータ配列は、前記第２のサイズの行列を構成する行列要素が、前記第１のサイズの行列を行方向及び列方向それぞれに複数並べたもので、ストリーム型処理において連続して処理される第２のサイズの行列を同一ラインに複数組並べたデータ配列であり、前記第１のサイズの行列演算に適したデータ配列は、ストリーム型処理において連続して処理される第１のサイズの行列を同一ラインに複数並べたデータ配列の複数組が複数ラインに格納されたデータ配列である、行列演算装置である。
【発明の効果】
【００１０】
一実施態様によれば、行列演算を効率的に行うことができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の第１実施例に係る行列演算装置１が、携帯電話のベースバンド処理ＬＳＩ１００に適用された適用例である。
【図２】携帯電話端末がLTEのエリアとW-CDMAのエリアを跨いで移動する様子を示す図である。
【図３】通信方式を切り替え可能な携帯電話１００によって実行される処理の流れを示すフローチャートの一例である。
【図４】行列演算装置１のハードウェア構成例である。
【図５】演算データパス４０のハードウェア構成例である。
【図６】本実施例の行列演算装置１がストリーム型処理によって４×４行列乗算を連続的にＮ回行う様子を示す図である。
【図７】Ａ０×Ｂ０＝Ｃ０を演算する際の演算データパス４０の結線構造を模式的に示す図である。
【図８】本実施例の行列演算装置１がストリーム型処理によって２×２行列乗算を並行して４回行う（４ＳＩＭＤ）様子を示す図である。
【図９】ａ０×ｂ０＝ｃ０、…ａ３×ｂ３＝ｃ３を並列演算する際の演算データパス４０の結線構造を模式的に示す図である。
【図１０】８×８行列乗算を２×２行列乗算、又は４×４行列乗算に分解して処理する様子を示す図である。
【図１１】メモリ上に格納されたデータから４×４行列を解釈する一般的な規則を示す図である。
【図１２】本実施例の制御回路１０が、データメモリ１３４に格納されたデータから４×４行列を解釈する特徴的な規則を示す図である。
【図１３】並行して演算する２×２行列のソースがデータメモリ１３４の同じライン上に格納されていないデータ配列を示す図である。
【図１４】行列演算装置１が行う変換処理を簡易に示す図である。
【図１５】２×２行列演算用のデータ配列を、４×４行列演算用のデータ配列に変換する処理を説明するための図である。
【図１６】４×４行列演算用のデータ配列を、２×２行列演算用のデータ配列に変換する処理を説明するための図である。
【図１７】ソートレジスタ５０の構造及び機能を模式的に示す図である。
【図１８】書き込みサイクルと読み出しサイクルがオフセットして制御される様子を示す図である。
【図１９】２×２行列から４×４行列への変換処理が行われる際に、制御回路１０により実行される処理の流れを示すフローチャートの一例である。
【図２０】４×２行列Ａと２×４行列Ｂの乗算を行った結果の行列Ｃを、４×４行列Ｄに乗算して４×４行列Ｅを得る演算を示す図である。
【図２１】２×２行列で全ての演算処理を行う様子を示す図である。
【図２２】本実施例の行列演算装置１による処理を示す図である。
【図２３】２×２行列Ａ、Ｂ、Ｃ、ＤからＸの逆行列Ｘ-1の２×２成分ＲＡ、ＲＢ、ＲＣ、ＲＤを導出する処理を示すブロック図である。
【図２４】第２実施例に係る行列演算装置２が、２×２行列演算用のデータ配列を、４×４行列演算用のデータ配列に変換する処理を説明するための図である。
【図２５】第２実施例に係る行列演算装置２が、４×４行列演算用のデータ配列を、２×２行列演算用のデータ配列に変換する処理を説明するための図である。
【図２６】第３実施例に係る行列演算装置３が、２×２行列演算用のデータ配列を、４×４行列演算用のデータ配列に変換する処理を説明するための図である。
【図２７】第３実施例に係る行列演算装置３が、４×４行列演算用のデータ配列を、２×２行列演算用のデータ配列に変換する処理を説明するための図である。
【発明を実施するための形態】
【００１２】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【実施例】
【００１３】
＜第１実施例＞
以下、図面を参照し、本発明の第１実施例に係る行列演算装置１について説明する。
【００１４】
［適用例］
図１は、本発明の第１実施例に係る行列演算装置１が、携帯電話のベースバンド処理ＬＳＩ（Large  Scale  Integrated  circuit）１００に適用された適用例である。ベースバンド処理ＬＳＩ１００は、例えば、ＲＦ部１１０と、専用ハードウェア１２０と、ＤＳＰ（Digital  Signal  Processor）１３０＃１〜１３０＃３とを備える。
【００１５】
ＲＦ部１１０は、アンテナ１５０を介して受信された無線信号の周波数をダウンコンバートし、デジタル信号に変換してバス１４０に出力する。また、ＲＦ部１０は、バス１５０に出力されたデジタル信号をアナログ信号に変換し、無線周波数にアップコンバートして、アンテナ１５０に出力する。
【００１６】
専用ハードウェア１２０は、例えば誤り訂正符号を扱うturbo、ビタビアルゴリズムを実行するviterbi、複数のアンテナでデータの送受信を行なうためのMIMO（Multi  Input  Multi  Output）等を含む。
【００１７】
以下、いずれのＤＳＰであるかを区別せず、ＤＳＰ１３０と称する。ＤＳＰ１３０は、プロセッサ１３１と、プログラムメモリ１３２と、周辺回路１３３と、データメモリ１３４とを備える。プロセッサ１３１は、ＣＰＵ１３５と、本実施例の行列演算装置１とを有する。各ＤＳＰ１３０にはSearcher（同期）、Demodulator（復調）、Decoder（復号）、Codec（符号化）、Modulator（変調）等、無線通信信号処理の各要素処理が割り当てられる。
【００１８】
このようなＬＳＩ１００が用いられる背景について説明する。携帯電話が１つの方式のベースバンド処理のみ行うのであれば、専用ハードウェアで携帯電話全体を構成することができる。しかしながら、例えば、LTEとW-CDMAを同一のハードウェア上で実行したい場合は、ＤＳＰ１３０のようなプログラマブルなハードウェアを備える必要がある。図２は、携帯電話端末がLTEのエリアとW-CDMAのエリアを跨いで移動する様子を示す図である。この場合、携帯電話は、ソフトウェアを変更するだけで無線通信方式を切り替えることができる。図３は、通信方式を切り替え可能な携帯電話１００によって実行される処理の流れを示すフローチャートの一例である。まず、携帯電話１００は、基地局を検索し（Ｓ２００）、最も感度の良い基地局を検索する（Ｓ２０２）。次に、携帯電話１００は、現在通信中の基地局と異なる基地局が、最も感度の良い基地局であるか否かを判定する（Ｓ２０４）。現在通信中の基地局と異なる基地局が、最も感度の良い基地局である場合、携帯電話１００は、最も感度の良い基地局の通信方式が現在のものと異なるか否かを判定する（Ｓ２０６）。最も感度の良い基地局の通信方式が現在のものと異なる場合、携帯電話１００は、通信方式を変更する（Ｓ２０８）。
【００１９】
［行列演算装置］
以下、例えば上記のような携帯電話１００に使用される行列演算装置１について説明する。図４は、行列演算装置１のハードウェア構成例である。行列演算装置１は、例えば制御回路１０と、ロードストアユニット２０と、ＦＩＦＯ（First  In,  First  Out）３０、３１、３２と、ソートレジスタ５０を含む演算データパス４０とを備える。
【００２０】
制御回路１０は、例えばＣＰＵ１３５から入力される命令に従って演算器群４０を制御する。制御回路１０に与えられる命令は、例えば、演算種別、ソース（１）の先頭アドレス、ソース（２）の先頭アドレス、デスティネーション（格納先）の先頭アドレス、演算する単位データの個数Ｎである。
【００２１】
ロードストアユニット２０は、データメモリ１３４との間でデータの送受信を行う。以下、本実施例に係るデータメモリ１３４は、例えば、１ライン（一度に読み書き可能なデータの単位）が512バイトのバンクを４つ有する。ロードストアユニット２０は、１サイクルにおいて、データメモリ１３４の各バンクに対して512バイトのデータを読み書き可能であり、１サイクルに512バイト×４バンクで2048バイトのデータを読み書き可能である。ＦＩＦＯ３０、３１には、ロードストアユニット２０がデータメモリ１３４から読み込んだデータが格納され、ＦＩＦＯ３２には、ロードストアユニット２０がデータメモリ１３４に書き込むデータが格納される。
【００２２】
演算データパス４０は、例えば２×２行列演算、又は４×４行列演算を行うことができる。図５は、演算データパス４０のハードウェア構成例である。演算データパス４０は、例えば、８個の２×２行列乗算モジュール４０Ａと、８個の２×２行列加算モジュール４０Ｂとを有し、モジュール４個に対して１個のマルチプレクサ４０Ｃが取り付けられている。演算データパス４０は、モジュール間の結線を切り替えることで、４×４行列乗算、２×２行列乗算の４並列（ＳＩＭＤ）、２×２逆行列演算の４並列（ＳＩＭＤ）等を行うことができる。
【００２３】
２×２行列乗算モジュール４０Ａは、例えば、３２個の乗算器４０Ａａ、２個の除算器４０Ａｂ、及び図示しない２４個の加算器を有する。２×２行列乗算モジュール４０Ａは、制御信号が与えられることで、自己の機能を２×２行列乗算、２×２逆行列演算を含む複数の機能から選択することができる。なお、図５は、数値が16bitの実部及び虚部を持つ複素数の場合を示しており、実数のみを扱う場合、乗算器等の数は、より少なくなる。
【００２４】
ソートレジスタ５０の機能については後述する。
【００２５】
図６は、本実施例の行列演算装置１がストリーム型処理によって４×４行列乗算を連続的にＮ回行う様子を示す図である。図示するように、行列演算装置１は、まずＡ０×Ｂ０の行列乗算を行ってＣ０に格納し、次にＡ１×Ｂ１の行列乗算を行ってＣ１に格納し、最後に、ＡＮ−１×ＢＮ−１の行列乗算を行ってＣＮ−１に格納する。行列演算装置１は、例えば命令として、演算の種別（この場合、４×４行列乗算）、Ａ０が格納された先頭アドレス、Ｂ０が格納された先頭アドレス、デスティネーション、データの個数（Ｎ個）が与えられると、Ｎ回の行列乗算を連続して実行する。このような、メモリ上で連続したアドレスに格納された複数のデータを連続して処理することを、ストリーム型処理と称する。
【００２６】
ロードストアユニット２０は、シーケンシャルアクセス方式によって、Ａ０と読み込むとＡ１を読み込み、次いでＡ２を読み込むといった動作を行う。同一サイクルで同じバンクからＡ０とＢ０を読み込むことはできないため、ロードストアユニット２０は、例えばＡ０を読み込んだ次のサイクルでＢ０を読み込み、ＦＩＦＯ３０にＡ０が、ＦＩＦＯ３１にＢ０が格納された時点でＡ０×Ｂ０の行列演算が可能となる。複数のバンクに跨ってソースを格納しておき、あるデータ（例えばＡ０）にアクセスする遅延時間の最中に次のアドレス（例えばＡ１）へアクセス要求を発行するメモリインターリーブ方式を採用することにより、全体のアクセス時間が短縮される。図７は、Ａ０×Ｂ０＝Ｃ０を演算する際の演算データパス４０の結線構造を模式的に示す図である。図７は、Ａ０を、４個の２×２行列Ａ０（０）、Ａ０（１）、Ａ０（２）、Ａ０（３）に分解して示している。同様に、図７は、Ｂ０を、４個の２×２行列Ｂ０（０）、Ｂ０（１）、Ｂ０（２）、Ｂ０（３）に分解して示し、Ｃ０を、４個の２×２行列Ｃ０（０）、Ｃ０（１）、Ｃ０（２）、Ｃ０（３）に分解して示している。
【００２７】
一方、図８は、本実施例の行列演算装置１がストリーム型処理によって２×２行列乗算を並行して４回行う（４ＳＩＭＤ）様子を示す図である。図示するように、行列演算装置１は、ａ０×ｂ０を演算してｃ０に格納し、ａ１×ｂ１を演算してｃ１に格納し、ａ２×ｂ２を演算してｃ２に格納し、ａ３×ｂ３を演算してｃ３に格納することを、並行して行うことができる。例えば命令として、演算の種別（この場合、２×２行列乗算）、ａ０が格納された先頭アドレス、ｂ０が格納された先頭アドレス、デスティネーション、データの個数（Ｎ個）が与えられると、行列演算装置１は、Ｎ回の並行行列乗算を連続して実行する。この場合、行列演算装置１は、ａ０〜ａ３からａ４Ｎ−４〜ａ４Ｎ−１、ｂ０〜ｂ３からｂ４Ｎ−４〜ｂ４Ｎ−１をそれぞれソースとし、ｃ０〜ｃ３からｃ４Ｎ−４〜ｃ４Ｎ−１までをデスティネーションとする。図９は、ａ０×ｂ０＝ｃ０、…ａ３×ｂ３＝ｃ３を並列演算する際の演算データパス４０の結線構造を模式的に示す図である。なお、ａ０、ｂ０等の２×２行列は、データメモリ１３４上では、４個の行列要素が一列に並べられたデータとして表現される。
【００２８】
ここで、一般的な行列演算のサイズ変換について説明する。図１０は、８×８行列乗算を２×２行列乗算、又は４×４行列乗算に分解して処理する様子を示す図である。図１０（Ａ）は、８×８行列乗算をそのまま行う様子を示し、図１０（Ｂ）は、８×８行列乗算を２×２行列に分解して行う様子を示す。図１０（Ｂ）の演算結果である８×８行列を１６分割した各２×２行列は、それぞれ２×２行列乗算を４回行った結果を加算したものとなる。同様に、図１０（Ｃ）は、図１０（Ｂ）は、８×８行列乗算を４×４行列に分解して行う様子を示す。図１０（Ｃ）の演算結果である８×８行列を４分割した各４×４行列は、それぞれ４×４行列乗算を２回行った結果を加算したものとなる。
【００２９】
［並行して行われる２×２行列演算のソースが同じライン上にある場合］
ところで、図８のように、並行して演算するソースがデータメモリ１３４の同じライン上に格納されている場合は、例えば２×２行列演算用に格納されたデータａ０〜ａ３、及びｂ０〜３を４×４行列とみなして４×４行列演算を行うことは可能である。但し、この場合、制御回路１０は、特有のデータ解釈を行う必要がある。
【００３０】
図１１は、メモリ上に格納されたデータから４×４行列を解釈する一般的な規則を示す図である。しかしながら、このような規則で４×４行列を解釈すると、元々２×２行列の要素であったデータ（１）〜（４）が４×４行列内では２×２行列を形成しないため、２×２行列演算用に格納されたデータを４×４行列とみなして４×４行列演算を行うのには、多くの処理を要する。
【００３１】
これに対し、図１２は、本実施例の制御回路１０が、データメモリ１３４に格納されたデータから４×４行列を解釈する特徴的な規則を示す図である。図示するように、この特徴的な規則では、４×４行列を構成する行列要素が、２×２行列の形態を維持したデータ配列となっている。この結果、本実施例の行列演算装置１は、２×２行列演算用に格納されたデータを４×４行列とみなして、容易に４×４行列演算を行うことができる。また、本実施例の行列演算装置１は、４×４行列演算用に格納されたデータを２×２行列とみなして、容易に２×２行列演算を行うこともできる。
【００３２】
［並行して行われる２×２行列演算のソースが同じライン上にない場合］
一方、並行して演算する２×２行列のソースがデータメモリ１３４の同じライン上に格納されていない場合は、２×２行列演算用に格納されたデータを４×４行列とみなして４×４行列演算を行うことが困難である。このため、本実施例の行列演算装置１は、２×２行列演算に適したデータ配列と、４×４行列演算に適したデータ配列を相互に変換する機能を有する。係るデータ配列の変換命令は、例えばＣＰＵ１３５から制御回路１０に送信される。
【００３３】
図１３は、並行して演算する２×２行列のソースがデータメモリ１３４の同じライン上に格納されていないデータ配列を示す図である。図１３に示すデータ配列に対して、本実施例の行列演算装置１は、ソース（１）とソース（２）の演算を行ってデスティネーションに格納する処理を並行して行う。例えば、行列演算装置１は、ｃ０×ｅ０の結果をｉ０に格納し、ｂ０×ｆ０の結果をｊ０に格納し、ａ０×ｇ０の結果をｋ０に格納し、ｄ０×ｈ０の結果をｉ０に格納することを、並行して行う。
【００３４】
図１３に示すデータ配列に対し、２×２行列を結合して４×４行列にし、４×４行列演算を行う場合、予め、ソース（１）を構成するｃ０、ｂ０、ａ０、ｄ０をＡ０に格納し、ソース（２）を構成するｅ０、ｆ０、ｇ０、ｈ０をＢ０に格納する処理が必要となる。逆に、４×４行列を２×２行列に分解して２×２行列演算を行う場合、Ａ０をｃ０、ｂ０、ａ０、ｄ０に分解して別のラインに格納し、Ｂ０をｅ０、ｆ０、ｇ０、ｈ０に分解して別のラインに格納する処理が必要となる。図１４は、行列演算装置１が行う変換処理を簡易に示す図である。なお、図１４は、ソース（１）のみに着目した図である。
【００３５】
［データ配列の変換］
以下、本実施例の行列演算装置１により実行されるデータ配列の変換処理について説明する。
【００３６】
まず、２×２行列演算用のデータ配列を、４×４行列演算用のデータ配列に変換する処理について説明する。図１５は、２×２行列演算用のデータ配列を、４×４行列演算用のデータ配列に変換する処理を説明するための図である。
【００３７】
制御回路１０は、ＣＰＵ１３５からデータ配列変換命令を受信すると、ロードストアユニット２０に、例えばａ０〜ａ３、ｂ０〜ｂ３、ｃ０〜ｃ３、ｄ０〜ｄ３、ａ４〜ａ７、…の順にデータメモリ１３４からデータを読み込んで、ＦＩＦＯ３０（又は３１）に格納させる。そして、制御回路１０は、例えば面１と面２を有するソートレジスタ５０に、ＦＩＦＯ３０に格納されたデータを行方向に格納し、列方向に読み出してＦＩＦＯ３２に書き込む処理を行う。この結果、ＦＩＦＯ３２から読み出されてデータメモリ１３４に書き込まれるデータは、例えばａ０、ｂ０、ｃ０、ｄ０のように、４×４行列演算に適した形式となる。この際に、図１５に示すように、データ系列ａ０〜ａＮ−１、ｂ０〜ｂＮ−１等は、４×４行列における配列順に並んでいる必要はない。
【００３８】
図１６は、図１５とは逆に、４×４行列演算用のデータ配列を、２×２行列演算用のデータ配列に変換する処理を説明するための図である。制御回路１０は、ＣＰＵ１３５からデータ配列変換命令を受信すると、ロードストアユニット２０に、例えばＡ０を読み込んで、ＦＩＦＯ３０（又は３１）に格納させる。そして、制御回路１０は、ＦＩＦＯ３０に格納されたデータを列方向にソートレジスタ５０に格納し、行方向に読み出してＦＩＦＯ３２に書き込む処理を行う。この結果、ＦＩＦＯ３２から読み出されてデータメモリ１３４に書き込まれるデータは、例えばａ０〜ａ３、ｂ０〜ｂ３、ｃ０〜ｃ３、ｄ０〜ｄ３のように、２×２行列演算に適した形式となる。
【００３９】
図１７は、ソートレジスタ５０の構造及び機能を模式的に示す図である。ソートレジスタは、面１と面２を備える。図中の数字は、書き込みサイクルと読み出しサイクルの処理順を表している。書き込みサイクルと読み出しサイクルは、例えば位相が４サイクル分オフセットして制御される。図１８は、書き込みサイクルと読み出しサイクルがオフセットして制御される様子を示す図である。
【００４０】
例えば、書き込みサイクル０ではａ０〜ａ３が面１の第１行に書き込まれ、書き込みサイクル１ではｂ０〜ｂ３が第２行に書き込まれ、書き込みサイクル２ではｃ０〜ｃ３が第３行に書き込まれ、書き込みサイクル１ではｂ０〜ｂ３が第４行に書き込まれる。次いで、書き込みサイクル４ではａ４〜ａ７が面２の第１行に書き込まれ、書き込みサイクル５ではｂ４〜ｂ７が第２行に書き込まれ、書き込みサイクル６ではｃ４〜ｃ７が第３行に書き込まれ、書き込みサイクル７ではｄ４〜ｄ７が第４行に書き込まれる。これらを制御する書き込み制御信号は、制御回路１０から出力される。
【００４１】
一方、読み出しサイクル０では面１の各行の先頭データが読み出され、読み出しサイクル１では各行の２番目のデータが読み出され、読み出しサイクル２では各行の３番目のデータが読み出され、読み出しサイクル３では各行の４番目のデータが読み出される。次いで、読み出しサイクル４では面２の各行の先頭データが読み出され、読み出しサイクル５では各行の２番目のデータが読み出され、読み出しサイクル６では各行の３番目のデータが読み出され、読み出しサイクル７では各行の４番目のデータが読み出される。ソートレジスタ５０には、マルチプレクサ５２が取り付けられており、面１と面２のいずれか該当する面のデータが読み出され、ＦＩＦＯ３２に格納される。これらを制御する読み出し制御信号は、制御回路１０から出力される。
【００４２】
書き込みサイクル０〜３では、例えばバンク０からの読み出しが行われ、書き込みサイクル４〜７では、例えばバンク１からの読み出しが行われる。同様に、読み出しサイクル０〜３では、例えばバンク０への書き込みが行われ、読み出しサイクル４〜７では、例えばバンク１への書き込みが行われる。本実施例の行列演算装置は、これらを互いにオフセットさせることにより、データメモリ１３４からの読み出しと書き込みを同時に行うことができ、迅速に変換処理を行うことができる。なお、係る制御にも拘わらず読み出し対象バンクと書き込み対象バンクが競合したときは、例えばデータメモリ１３４への書き込みが優先される。
【００４３】
図１９は、２×２行列から４×４行列への変換処理が行われる際に、制御回路１０により実行される処理の流れを示すフローチャートの一例である。
【００４４】
まず、制御回路１０は、ｘ［０］＝ａ、ｘ［１］＝ｂ、ｘ［２］＝ｃ、ｘ［３］＝ｄと定義し、変数ｉの初期値を０とする（Ｓ３００）。
【００４５】
次に、制御回路１０は、データメモリ１３４のアドレスｘ［ｉ］から５１２ビット分のデータをロードしてＦＩＦＯ３０に格納（ＰＵＳＨ）する（Ｓ３０２）。
【００４６】
次に、制御回路１０は、ｘ［ｉ］を１バンク分インクリメントし（例えばａ０→ａ４、ｂ０→ｂ４等）、変数ｉを次式（１）に基づき更新する（Ｓ３０４）。
【００４７】
ｉ＝（ｉ＋１）mod４  …（１）
【００４８】
次に、制御回路１０は、所望のデータ分、処理が終了したか否かを判定する（Ｓ３０６）。制御回路１０は、所望のデータ分、処理が終了した場合は本フローチャートの処理を終了し、所望のデータ分、処理が終了していない場合はＳ３０２に戻り処理を実行する。
【００４９】
［変換を行うと好適な演算処理例］
ここで、２×２行列と４×４行列の間でデータ配列を変換すると好適な例について説明する。図２０は、４×２行列Ａと２×４行列Ｂの乗算を行った結果の行列Ｃを、４×４行列Ｄに乗算して４×４行列Ｅを得る演算を示す図である。本実施例のようにデータ配列の変換機能を有さない行列演算装置の場合、図２１に示すように、２×２行列で全て演算処理を行う必要がある。
【００５０】
これに対し、本実施例の行列演算装置１の場合、２×２行列演算によってＡ×Ｂを演算した後、演算結果のデータ配列を４×４行列演算に適した形式に変換することができる。この結果、Ｃ×Ｄの行列演算を、４×４行列演算によって行うことができる。図２２は、本実施例の行列演算装置１による処理を示す図である。
【００５１】
また、４×４行列の演算を行う途中で、４×４行列の逆行列を求めたい場面が存在する。しかしながら、行列演算装置のサイズ、性能によっては、逆行列演算は２×２行列についてのみ可能な場合がある。本実施例のようにデータ配列の変換機能を有さない行列演算装置の場合、最初から全ての演算を２×２行列演算で行う必要がある。
【００５２】
これに対し、本実施例の行列演算装置１は、例えば４×４行列Ｘを２×２行列Ａ、Ｂ、Ｃ、Ｄに分解し、これらを用いてＸの逆行列Ｘ-1の２×２成分ＲＡ、ＲＢ、ＲＣ、ＲＤを求めることができる。そして、行列演算装置１は、２×２成分ＲＡ、ＲＢ、ＲＣ、ＲＤを２×２行列から４×４行列への変換機能を用いて結合することにより、Ｘの逆行列Ｘ-1を得ることができる。次式（２）は、２×２行列Ａ、Ｂ、Ｃ、ＤからＸの逆行列Ｘ-1の２×２成分ＲＡ、ＲＢ、ＲＣ、ＲＤを導出するための式である。また、図２３は、２×２行列Ａ、Ｂ、Ｃ、ＤからＸの逆行列Ｘ-1の２×２成分ＲＡ、ＲＢ、ＲＣ、ＲＤを導出する処理を示すブロック図である。
【００５３】
【数１】
0005840994.tif 000002
【００５４】
図５に例示した構成によって本実施例の行列演算装置１は、４×４行列演算を１サイクルで行うことができる。ところが、２×２行列演算で、４×４行列乗算を行おうとすると、例えば３サイクル程度の時間を要する場合がある。そこで、本実施例の行列演算装置１は、２×２行列演算に適したデータ配列と４×４行列演算に適したデータ配列を相互に変換する機能を有するものとした。これによって、本実施例の行列演算装置１は、なるべく４×４行列演算によって処理を行う一方、２×２行列演算を行う必要がある処理についてのみ２×２行列演算を行うといった機動的な処理を行うことができる。この結果、本実施例の行列演算装置１は、行列演算を効率的に行うことができる。
【００５５】
［まとめ］
以上説明した本実施例の行列演算装置１は、２×２行列演算に適したデータ配列と４×４行列演算に適したデータ配列を相互に変換する機能を有するため、行列演算を効率的に行うことができる。
【００５６】
＜第２実施例＞
以下、図面を参照し、本発明の第２実施例に係る行列演算装置２について説明する。第２実施例に係る行列演算装置２は、２×２行列演算に適したデータ配列と、４×４行列演算に適したデータ配列を相互に変換するための構成が第１実施例と異なる。従って、第２実施例では、係る相違点を中心として説明する。
【００５７】
図２４は、第２実施例に係る行列演算装置２が、２×２行列演算用のデータ配列を、４×４行列演算用のデータ配列に変換する処理を説明するための図である。第２実施例に係る行列演算装置２は、データストリーム毎（ソース毎、デスティネーション毎）にロードストアユニット２０を有する（図では、２０＃１、２０＃２、２０＃３、２０＃４、２０＃５と表記した）。第２実施例に係る各ロードストアユニット２０は、専用のＦＩＦＯ３５＃１〜３５＃５を有し、ＦＩＦＯ３５＃１〜３５＃４にはマルチプレクサ３６＃１〜３６＃４が取り付けられている。各マルチプレクサは、ＦＩＦＯ３５＃１〜３５＃４に格納されたデータを、他のマルチプレクサと同期して各行の１番目に格納されたデータから順に読み出してＦＩＦＯ３５＃５に書き込む。ＦＩＦＯ３５＃１〜３５＃４は、１データ分読み出されたときにポップされる。係る処理によって、２×２行列演算用のデータ配列を、４×４行列演算用のデータ配列に変換することができる。
【００５８】
図２５は、第２実施例に係る行列演算装置２が、４×４行列演算用のデータ配列を、２×２行列演算用のデータ配列に変換する処理を説明するための図である。この場合、図２４とは逆に、各マルチプレクサが、ＦＩＦＯ３５＃５からデータを読み出すと共に、データの４分の１ずつＦＩＦＯ３５＃１〜３５＃４に書き込む。ＦＩＦＯ３５＃１〜３５＃４は、１データ分書き込まれたときにプッシュされる。
【００５９】
以上説明した第２実施例の行列演算装置２は、２×２行列演算に適したデータ配列と４×４行列演算に適したデータ配列を相互に変換する機能を有するため、行列演算を効率的に行うことができる。
【００６０】
＜第３実施例＞
以下、図面を参照し、本発明の第３実施例に係る行列演算装置３について説明する。第３実施例に係る行列演算装置３は、２×２行列演算に適したデータ配列と、４×４行列演算に適したデータ配列を相互に変換するための構成が第１実施例と異なる。従って、第３実施例では、係る相違点を中心として説明する。
【００６１】
図２６は、第３実施例に係る行列演算装置３が、２×２行列演算用のデータ配列を、４×４行列演算用のデータ配列に変換する処理を説明するための図である。第３実施例に係る行列演算装置２は、ＦＩＦＯ３０及び３１が、行方向と列方向を入れ替えてソートする機能を有する。また、図２７は、第３実施例に係る行列演算装置３が、４×４行列演算用のデータ配列を、２×２行列演算用のデータ配列に変換する処理を説明するための図である。
【００６２】
以上説明した第３実施例の行列演算装置３は、２×２行列演算に適したデータ配列と４×４行列演算に適したデータ配列を相互に変換する機能を有するため、行列演算を効率的に行うことができる。
【００６３】
以上、本発明を実施するための最良の形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【００６４】
例えば、上記各実施例では、行列演算装置が、２×２行列演算に適したデータ配列と４×４行列演算に適したデータ配列を相互に変換する機能を有するものとしたが、任意の異なるサイズの行列演算に適したデータ配列を相互に変換する機能を有するものとしてよい。
【００６５】
以上の説明に関し、さらに以下の項を開示する。
（付記１）
メモリに格納されたデータに対して第１のサイズの行列演算を行う機能と、前記メモリに格納されたデータに対して前記第１のサイズを拡大した第２のサイズの行列演算を行う機能と、を有する行列演算部と、
前記第１のサイズの行列演算に適したデータ配列と、前記第２のサイズの行列演算に適したデータ配列とを、前記メモリ上で少なくとも一方向に変換可能なデータ配列変換部と、
を有する行列演算装置。
（付記２）
前記第２のサイズの行列演算に適したデータ配列は、前記第１のサイズの行列を構成する行列要素が、前記第１のサイズの行列の形態を維持したデータ配列である、
付記１記載の行列演算装置。
（付記３）
前記メモリに格納された、前記第１のサイズの行列演算に適したデータ配列は、ストリーム型処理において連続して処理されるデータ配列が複数組、並列に格納されたデータ配列であり、
前記データ配列変換部は、前記メモリに格納された複数組のデータ配列から一連のデータを順に読み出してデータ格納部に格納することにより行列状のデータを前記データ格納部上に生成し、該行列状のデータの行方向と列方向を入れ替えて読み出したデータを前記メモリに書き込むことにより、前記第１のサイズの行列演算に適したデータ配列を、前記第２のサイズの行列演算に適したデータ配列に変換する、
付記１又は２記載の行列演算装置。
（付記４）
前記メモリに格納された、前記第１のサイズの行列演算に適したデータ配列は、ストリーム型処理において連続して処理されるデータ配列が複数組、並列に格納されたデータ配列であり、
前記データ配列変換部は、前記第２のサイズの行列演算に適したデータ配列に含まれる一連のデータを複数個読み出してデータ格納部に格納することにより行列状のデータを前記データ格納部上に生成し、該行列状のデータの行方向と列方向を入れ替えて読み出したデータを、前記メモリにおける複数のデータ配列が格納される領域に分配して書き込むことにより、前記第２のサイズの行列演算に適したデータ配列を、前記第１のサイズの行列演算に適したデータ配列に変換する、
付記１又は２記載の行列演算装置。
（付記５）
前記メモリは、並行してアクセス可能な複数のデータ領域を有し、
前記データ配列変換部は、前記データ格納部を複数個備え、該複数個のデータ格納部を、前記メモリから前記第２のサイズの行列に相当するデータが格納される度に切り替えて使用する、
付記３又は４記載の行列演算装置。
（付記６）
前記メモリに格納された、前記第１のサイズの行列演算に適したデータ配列は、ストリーム型処理において連続して処理されるデータ配列が複数組、並列に格納されたデータ配列であり、
前記データ配列変換部は、
前記複数のデータ配列に対応した複数のロードストアユニットと、
前記ロードストアユニットにより前記複数組のデータ配列から読み出される一連のデータの一部を取り出して出力する複数のデータ抽出部と、
該複数のデータ抽出部がそれぞれ出力したデータが結合されて前記第２のサイズの行列演算に適したデータ配列として格納されるデータ格納部と、
を備えることにより、前記第１のサイズの行列演算に適したデータ配列を、前記第２のサイズの行列演算に適したデータ配列に変換する、
付記１又は２記載の行列演算装置。
（付記７）
前記メモリに格納された、前記第１のサイズの行列演算に適したデータ配列は、ストリーム型処理において連続して処理されるデータ配列が複数組、並列に格納されたデータ配列であり、
前記データ配列変換部は、
前記複数のデータ配列に対応した複数の第１のロードストアユニットと、
前記複数の第１のロードストアユニットに対応した複数の第１のデータ格納部と、
前記第２のサイズの行列演算に適したデータ配列に対応した第２のロードストアユニットと、
前記第２のロードストアユニットにより読み出された一連のデータのうち各データ配列に対応した一部のデータが入力されると、前記データ配列を構成するデータの単位毎に前記複数の第１のデータ格納部に書き込むデータ分配部と、
を備えることにより、前記第２のサイズの行列演算に適したデータ配列を、前記第１のサイズの行列演算に適したデータ配列に変換する、
付記１又は２記載の行列演算装置。
【符号の説明】
【００６６】
１、２、３  行列演算装置
１０    制御回路
２０    ロードストアユニット
３０、３１、３２  ＦＩＦＯ
４０    演算データパス
５０    ソートレジスタ
１３４  データメモリ
１３５  ＣＰＵ
【図１】
0005840994.tif 000003
【図２】
0005840994.tif 000004
【図３】
0005840994.tif 000005
【図４】
0005840994.tif 000006
【図５】
0005840994.tif 000007
【図６】
0005840994.tif 000008
【図７】
0005840994.tif 000009
【図８】
0005840994.tif 000010
【図９】
0005840994.tif 000011
【図１０】
0005840994.tif 000012
【図１１】
0005840994.tif 000013
【図１２】
0005840994.tif 000014
【図１３】
0005840994.tif 000015
【図１４】
0005840994.tif 000016
【図１５】
0005840994.tif 000017
【図１６】
0005840994.tif 000018
【図１７】
0005840994.tif 000019
【図１８】
0005840994.tif 000020
【図１９】
0005840994.tif 000021
【図２０】
0005840994.tif 000022
【図２１】
0005840994.tif 000023
【図２２】
0005840994.tif 000024
【図２３】
0005840994.tif 000025
【図２４】
0005840994.tif 000026
【図２５】
0005840994.tif 000027
【図２６】
0005840994.tif 000028
【図２７】
0005840994.tif 000029