(57)【要約】【課題】データロード回数の低減を図ること。【解決手段】変換部１１１は、対象の演算命令によってメモリ１０１から取得した第１行列である行列Ａを受け付ける。変換部１１１は、第１行列である行列Ａと、行列Ａを転置した第２行列である行列ＡTと、のうち、演算命令が指示する演算対象の行列を出力する。第２行列は、第１行列に含まれる複数の要素と同一の要素を含む行列であって、第１行列に含まれる複数の要素のうちの少なくともいずれか２つの要素の並びを入れ替えた行列である。演算部１１２は、変換部１１１によって出力された演算対象の行列に対して、演算命令が指示する演算を行う。演算は、例えば、加算、減算、積算などである。１回の演算命令において行列変換と演算とを行うことができる。【選択図】図１
2016218528.tif 000002
【特許請求の範囲】
【請求項１】
対象の演算命令によってメモリから取得した第１行列を受け付けて、受け付けた前記第１行列と、前記第１行列に含まれる複数の要素と同一の要素を含み前記第１行列に含まれる複数の要素のうちの少なくともいずれか２つの要素の並びを入れ替えた第２行列と、のうち、前記演算命令が指示する演算対象の行列を出力する変換部と、
前記変換部によって出力された前記演算対象の行列に対して、前記演算命令が指示する演算を行う演算部と、
を有することを特徴とするデータ処理装置。
【請求項２】
前記変換部は、
前記第１行列と、前記第２行列と、のうち、いずれかを出力する選択部と、
前記演算命令によって、前記第１行列と、前記第２行列と、のうち、いずれかを前記選択部に出力させる制御を行う選択制御部と、
を有することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記選択制御部は、
行の要素の数および列の要素の数に対応する前記第１行列に含まれる特定の並びの複数の要素について前記選択部に出力させる前記第１行列に含まれる複数の要素の並びを指示する制御信号の値を記憶する記憶部から、前記演算命令が指示する前記演算対象の行列についての行の要素の数および列の要素の数に基づいて、前記制御信号の値を読み出して前記選択部に出力し、
前記選択部は、
前記第１行列に含まれる複数の要素を、前記選択制御部から出力された前記制御信号が指示する並びにした複数の要素を含む前記演算対象の行列を出力する、
ことを特徴とする請求項２に記載のデータ処理装置。
【請求項４】
前記第１行列に含まれる複数の要素の数以上の所定数の要素を格納可能なバッファであって、前記メモリから取得した前記第１行列に含まれる複数の要素を特定の並びで格納するバッファを有し、
前記選択部は、
前記バッファに格納された前記所定数の要素を入力可能な前記所定数の選択回路の各々が、前記バッファに格納された前記第１行列に含まれる複数の要素のうちのいずれかを制御信号に基づき選択して出力し、
前記選択制御部は、
前記バッファに格納された前記第１行列に含まれる複数の要素のうち前記選択回路の各々に選択させる要素を指示する制御信号を出力する、
ことを特徴とする請求項２または３に記載のデータ処理装置。
【請求項５】
前記選択部は、
前記バッファに格納された前記所定数の要素のうち前記第１行列に含まれる複数の要素が格納された位置データと、前記制御信号（以下、「第１制御信号」と称する。）と、に基づいて、前記バッファに格納された前記所定数の要素のうち前記選択回路の各々に選択させる要素を指示する第２制御信号を生成し、前記選択回路の各々が生成した前記第２制御信号に基づいて前記バッファに格納された前記所定数の要素のうちのいずれかを選択して出力することを特徴とする請求項４に記載のデータ処理装置。
【請求項６】
前記第１行列は、行および列の要素の数が互いに同じ複数の第１行列であって、
前記第２行列は、行および列の要素の数が互いに同じ複数の第２行列であって、
前記複数の第２行列の各々は、前記複数の第２行列の各々に対応する前記複数の第１行列の各々について前記第１行列に含まれる前記複数の要素のうちの少なくともいずれか２つの要素の並びを入れ替えた行列であることを特徴とする請求項１〜５のいずれか一つに記載のデータ処理装置。
【請求項７】
前記演算対象の行列に含まれる複数の要素の各々が虚部と実部とを有する場合に、
前記変換部は、
前記演算対象の行列に含まれる複数の要素の各々が有する虚部の符号を入れ替えて、入れ替えた後の前記演算対象の行列を出力する共役部を有することを特徴とする請求項１〜６のいずれか一つに記載のデータ処理装置。
【請求項８】
コンピュータが、
対象の演算命令によってメモリから取得した第１行列を受け付けて、受け付けた前記第１行列と、前記第１行列に含まれる複数の要素と同一の要素を含み前記第１行列に含まれる複数の要素のうちの少なくともいずれか２つの要素の並びを入れ替えた第２行列と、のうち、前記演算命令が指示する演算対象の行列を出力し、
出力した前記演算対象の行列に対して、前記演算命令が指示する演算を行う、
ことを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置、およびデータ処理方法に関する。
【背景技術】
【０００２】
従来、無線通信ベースバンド処理などでは、大量の行列演算処理が行われる場合がある。行列演算処理などのように配列型データを扱うには、配列処理アーキテクチャが適している。配列型データを扱うプロセッサとしては、例えば、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）方式やベクトル方式のプロセッサがある。
【０００３】
また、無線通信ベースバンド処理における行列演算では、入力行列の転置行列や複素共役などを取るような行列変換処理が多く発生する。例えば、ＳＩＭＤにおける行列演算の一機能として、複数行列の転置行列を得る技術が公知である（例えば、以下特許文献１参照。）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−１７４２９２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来、配列型データを扱うプロセッサでは、連続した単位データに同一の演算を施すため、メモリから連続的にデータを供給する。ベースバンド処理における行列演算では、入力行列の転置行列や複素共役を取るなどの行列変換処理が多く発生するため、データメモリからのデータロード回数が増大するという問題点がある。
【０００６】
１つの側面では、本発明は、データロード回数の低減を図ることができるデータ処理装置、およびデータ処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、対象の演算命令によってメモリから取得した第１行列を受け付けて、受け付けた前記第１行列と、前記第１行列に含まれる複数の要素と同一の要素を含み前記第１行列に含まれる複数の要素のうちの少なくともいずれか２つの要素の並びを入れ替えた第２行列と、のうち、前記演算命令が指示する演算対象の行列を出力する変換部と、前記変換部によって出力された前記演算対象の行列に対して、前記演算命令が指示する演算を行う演算部と、を有するデータ処理装置、およびデータ処理方法が提案される。
【発明の効果】
【０００８】
本発明の一態様によれば、データロード回数の低減を図ることができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、データ処理装置による一動作例を示す説明図である。
【図２】図２は、データ処理装置の適用例を示す説明図である。
【図３】図３は、データ処理装置と周辺の回路との一構成例を示す説明図である。
【図４】図４は、演算データパスによる演算例を示す説明図である。
【図５】図５は、転置行列に変換する例を示す説明図である。
【図６】図６は、データ処理装置の機能的構成例を示す説明図である。
【図７】図７は、行列変換例を示す説明図である。
【図８】図８は、データ供給回路例を示す説明図である。
【図９】図９は、インデックステーブル例を示す説明図である。
【図１０】図１０は、共役回路例を示す説明図である。
【図１１】図１１は、共役制御信号の出力例を示す説明図である。
【図１２】図１２は、命令実行処理手順例を示すフローチャートである。
【図１３】図１３は、ラップアラウンド処理回路を含むデータ供給回路の一構成例を示す説明図である。
【図１４】図１４は、ＷＭ処理回路と行列変換回路とによる要素の選択例を示す説明図である。
【図１５】図１５は、ラップアラウンド処理回路を含むデータ供給回路の別の構成例を示す説明図である。
【図１６】図１６は、図１５に示すデータ供給回路による行列変換例を示す説明図である。
【図１７】図１７は、メモリアクセスユニットおよびデータ供給回路の処理を模式的に示す図（その１）である。
【図１８】図１８は、メモリアクセスユニットおよびデータ供給回路の処理を模式的に示す図（その２）である。
【図１９】図１９は、ラップアラウンド処理回路の詳細例を示す図である。
【図２０】図２０は、ＷＭ制御回路による選択動作の一例を示す図である。
【図２１】図２１は、ＷＭ制御回路による選択動作の別の一例を示す図である。
【図２２】図２２は、ＷＭ制御回路による選択動作の更に別の一例を示す図である。
【図２３】図２３は、ＷＭ制御回路の構成の一例を示す図である。
【図２４】図２４は、ＳＥＬ＿ＷＲＡＰ回路の構成の一例を示す図である。
【図２５】図２５は、ＡＤＤ＿ＯＦＦＳＥＴ回路の構成の一例を示す図である。
【図２６】図２６は、ＳＬＳ≦Ｍの場合の各信号の生成アルゴリズムを示す図である。
【図２７】図２７は、ＳＬＳ＞Ｍの場合の各信号の生成アルゴリズムを示す図である。
【図２８】図２８は、ＷＭ制御回路の構成の別の一例を示す図である。
【図２９】図２９は、ＳＬＳ＿ＭＯＤテーブルのデータの一例を示す図である。
【図３０】図３０は、データ処理装置の構成の別の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、本発明にかかるデータ処理装置、およびデータ処理方法の実施の形態を詳細に説明する。
【００１１】
図１は、データ処理装置による一動作例を示す説明図である。データ処理装置１００は、ストリーム型処理を行うコンピュータである。ストリーム型処理とは、メモリ１０１から一連のデータ（配列型データ）を順次読み出して演算を行い、一連の演算結果をデータメモリに順次書き込む処理である。データ処理装置１００の適用の一例は図２に示す。適用対象は、例えば、スマートフォン、携帯電話機、タブレット端末装置、タブレット型ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）、ＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙ−ｐｈｏｎｅ  Ｓｙｓｔｅｍ）などである。
【００１２】
また、データ処理装置１００は、命令セットとして、単位データを扱う命令群を有する。単位データは、例えば、行列形式のデータである。命令は、例えば、乗算命令、加算命令、逆行列（除算）命令などの演算命令である。
【００１３】
ここで、無線通信信号処理などにおいては、大量の行列演算処理が必要となる場合がある。行列演算のような演算量が多い処理を高速に実行することが要求される場合、行列演算のための専用回路が設けられる。上述したように、配列型データを扱うプロセッサとしては、例えば、ＳＩＭＤ方式やベクトルプロセッサ方式のプロセッサがある。
【００１４】
ＳＩＭＤ方式のプロセッサでは、単位データとしては例えば１２８ビットのデータを扱う。ここでは、行列に含まれる要素の各々が３２ビットのデータで表される。例えば、２ｘ２行列の単位データ長ＵＬは１２８ビットであり、ＳＩＭＤ幅が４である場合、データ処理幅ＰはＵＬ×ＳＩＭＤ幅の５１２ビットである。
【００１５】
従来、配列型データを扱うプロセッサでは、連続した単位データに同一の演算を施すため、メモリ１０１から連続的にデータを供給する。ベースバンド処理における行列演算では、入力行列の転置行列や複素共役を取るなどの行列変換処理が多く発生するため、データメモリからのロード回数が増大するという問題点がある。
【００１６】
そこで、本実施の形態では、入力行列と該入力行列の複数の要素の並びを入れ替えた変換行列とのうちの演算対象となるいずれかの行列を出力して演算を行う。これにより、行列変換と演算とを１命令で行うことができ、データロード数の低減を図ることができる。したがって、行列演算処理に要する時間の短縮化を図ることができる。
【００１７】
まず、データ処理装置１００は、変換部１１１と、演算部１１２と、を有する。メモリ１０１には、行列に含まれる複数の要素が特定の並びで記憶されてある。メモリ１０１は、データメモリである。特定の並びは、例えば、行を優先して順に一次元配列とした並びである。図１の行列Ａの場合、｛ａ，ｂ，ｃ，ｄ｝のように並べられて記憶される。また、データ処理装置１００が、メモリ１０１から行列を取得する際にも｛ａ，ｂ，ｃ，ｄ｝の並びで取得する。
【００１８】
変換部１１１は、対象の演算命令によってメモリ１０１から取得した第１行列を受け付ける。換言すると、第１行列は、入力行列である。図１の例では、第１行列は行列Ａである。変換部１１１は、第１行列と、第２行列と、のうち、演算命令が指示する演算対象の行列を出力する。第２行列は、第１行列に含まれる複数の要素と同一の要素を含む行列であって、第１行列に含まれる複数の要素のうちの少なくともいずれか２つの要素の並びを入れ替えた行列である。換言すると、第２行列は、例えば、第１行列を変換した変換行列である。第２行列は、例えば、第１行列の転置行列や複素共役の行列である。図１の例では、第２行列は、行列ＡTであり、行列Ａの転置行列である。
【００１９】
例えば、２×２行列の転置行列を得るために、データ処理装置１００は、行列の１次元配列のデータにおいて２番目の要素と３番目の要素とのそれぞれに選択回路を設けて２番目の要素と３番目の要素とのうちのいずれの要素を出力するかを制御してもよい。変換方法の具体例については後述する。選択回路は、マルチプレクサとも称する。
【００２０】
演算部１１２は、変換部１１１によって出力された演算対象の行列に対して、演算命令が指示する演算を行う。演算は、例えば、加算、減算、積算などが挙げられるが、特に限定しない。具体的に、演算部１１２は、例えば、出力された演算対象の行列に対して他の行列との積算を行う。具体的に、演算部１１２は、例えば、出力された演算対象の行列を整数倍する。
【００２１】
これにより、行列変換と演算とを１つの演算命令で同時に行うことができるため、データロード数の低減を図ることができる。
【００２２】
（データ処理装置１００の適用例）
ここで、本実施の形態にかかるデータ処理装置１００を携帯電話機のベースバンド処理ＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）に適用した場合について説明する。
【００２３】
図２は、データ処理装置の適用例を示す説明図である。図２において、ベースバンド処理ＬＳＩ２００は、ＲＦ（Ｒａｄｉｏ  Ｆｒｅｑｕｅｎｃｙ）部２０１と、専用ハードウェア２０２と、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）２０３−１〜２０３−３と、を含む。
【００２４】
ＲＦ部２０１は、アンテナ２０５を介して受信された無線信号の周波数をダウンコンバートし、デジタル信号に変換してバス２０４に出力する。また、ＲＦ部２０１は、バス２０４に出力されたデジタル信号をアナログ信号に変換し、無線周波数にアップコンバートして、アンテナ２０５に出力する。
【００２５】
専用ハードウェア２０２は、例えば、誤り訂正符号を扱うｔｕｒｂｏ、ビタビアルゴリズムを実行するｖｉｔｅｒｂｉ、複数のアンテナでデータの送受信を行うためのＭＩＭＯ（Ｍｕｌｔｉ  Ｉｎｐｕｔ  Ｍｕｌｔｉ  Ｏｕｔｐｕｔ）等を含む。
【００２６】
ＤＳＰ２０３−１〜２０３−３（以下、単に「ＤＳＰ２０３」と称する）は、プロセッサ２１１と、命令メモリ２１３と、周辺回路２１２と、データメモリ２１４と、を含む。プロセッサ２１１は、ＣＰＵ２２１と、データ処理装置１００と、を含む。各ＤＳＰ２０３にはＳｅａｒｃｈｅｒ（同期）、Ｄｅｍｏｄｕｌａｔｏｒ（復調）、Ｄｅｃｏｄｅｒ（復号）、Ｃｏｄｅｃ（符号化）、Ｍｏｄｕｌａｔｏｒ（変調）等、無線通信信号処理の各要素処理が割り当てられる。
【００２７】
命令メモリ２１３は、プログラムなどの命令を記憶するメモリである。データメモリ２１４は、演算対象となるデータや演算結果などを記憶するメモリ１０１である。
【００２８】
図３は、データ処理装置と周辺の回路との一構成例を示す説明図である。図３には、データ処理装置１００と、データ処理装置１００の周辺の命令メモリ２１３およびデータメモリ２１４と、の簡単な接続例を示す。
【００２９】
データ処理装置１００は、命令デコーダ３０４と、データ供給回路３０１と、演算データパス３０２と、データストア回路３０３と、を有する。データ供給回路３０１は、データメモリ２１４に接続され、データメモリ２１４からデータを読み出す。演算データパス３０２は、データ供給回路３０１に接続され、データ供給回路３０１から供給される行列の複数の要素に対して、演算命令が指示する演算を行う演算部１１２である。演算とは、例えば、積算、加算、減算などが挙げられる。
【００３０】
データストア回路３０３は、演算データパス３０２とデータメモリ２１４とに接続され、演算データパス３０２から供給される演算結果をデータメモリ２１４に書き込む。命令メモリ２１３には、複数の命令を有する命令列が格納されており、命令列の各命令が命令デコーダ３０４に順番に供給される。命令デコーダ３０４は、供給される各命令をデコードし、デコード結果に従いデータ供給回路３０１、演算データパス３０２、およびデータストア回路３０３を制御する。これにより、命令デコーダ３０４は、データメモリ２１４へのアクセスおよび演算データパス３０２による演算処理を実行する。
【００３１】
汎用性を考えた場合、行列演算のような配列データを扱うには、ＳＩＭＤ型アーキテクチャが適する。ＳＩＭＤ型アーキテクチャでは、単位データとして例えば３２ビットのスカラデータ、行列、ベクトルなどを扱う。例えばＳＩＭＤ幅が４のシステムであれば、データを４つ並べた長さ４のベクトルを対象として、ベクトルの４つの要素のそれぞれを並列処理することにより、高速に演算を実行する。このようなＳＩＭＤ型アーキテクチャでは、一般に、例えば単位データ長ＵＬが３２ビット、ＳＩＭＤ幅が４、データ処理幅Ｐが１２８（＝４×３２）ビット等に固定される。
【００３２】
本実施の形態では、ストリーム処理アーキテクチャのプロセッサにおいて、単位データ長やＳＩＭＤ幅等を可変なパラメタとしたハードウェア構成とする。これにより、様々な単位データ長の命令を定義できる。このようなハードウェア構成では、単位データ長ＵＬとＳＩＭＤ幅とにより決まるデータ処理幅Ｐ＝ＵＬ×ＳＩＭＤが、演算命令により異なることになる。
【００３３】
図４は、演算データパスによる演算例を示す説明図である。演算データパス３０２は、例えば、データ供給回路３０１から行列に含まれる複数の要素を受け付けると、受け付けた複数の要素に基づき行列演算を行う。データ供給回路３０１から受け付ける複数の要素は、例えば、第１のソースデータｓｒｃ０や第２のソースデータｓｒｃ１である。図４に示すように、データ供給回路３０１内のラップアラウンド回路４０１および、行列変換回路４０２は、ソースデータごとに用意されてもよい。図４の例では、第１のソースデータｓｒｃ０および第２のソースデータｓｒｃ１の各々は、２×２の行列である。行列の各要素は、例えば、実数行列の場合に１６ビットであり、複素数行列の場合に３２ビットであるが、特に限定しない。
【００３４】
演算データパス３０２は、命令デコーダ３０４による演算命令のデコード結果に従い、行列同士の演算を行う。図４の例では、演算は積算である。演算データパス３０２はＳＩＭＤ型アーキテクチャであり、１つの命令による演算を複数の行列に対して実行する。図４に示す演算データパス３０２は、４並列に演算処理を行うことができる。
【００３５】
上述したように、例えば、入力行列の転置行列などを演算データパス３０２により求めた後に演算に利用する場合、入力行列に対する転置行列を得るための命令と、転置行列を利用する演算を行う命令と、のように複数の命令の実行により最終的な演算結果が得られる。具体的に、例えば、転置行列を得るための命令によって入力行列がデータメモリ２１４からロードされて転置行列が得られた後に転置行列がデータメモリ２１４に格納される。そして、転置行列を利用する演算を行う命令によってデータメモリ２１４から転置行列がロードされて転置行列を利用する演算が行われる。このように、演算と行列変換とが異なる命令実行であるような場合に、ロード数が増大して全体の処理に時間がかかるという問題点がある。
【００３６】
図５は、転置行列に変換する例を示す説明図である。本実施の形態では、上述したように、例えば行列を一次元配列で表す場合には行を優先して表す。ここでは、２×２の入力行列から転置行列を得る例を示す。図５（１）に示すように、入力行列Ａ｛ａ，ｂ，ｃ，ｄ｝から転置行列ＡT｛ａ，ｃ，ｂ，ｄ｝を得るには、要素「ｂ」と要素「ｃ」の位置を入れ替えればよい。
【００３７】
そこで、図５（２）に示すように、図４に示す行列変換回路４０２は、転置行列オンオフ信号によって「ｂ」と「ｃ」の要素を入れ替えて出力するマルチプレクサを設けることによって、２×２の入力行列から転置行列または入力行列そのものを得ることができる。
【００３８】
例えば、マルチプレクサ５０１−１とマルチプレクサ５０１−２とはいずれもｂとｃを入力とする。例えば、転置行列オンオフ信号がオンを示す場合に、マルチプレクサ５０１−１はｃを選択して出力し、マルチプレクサ５０１−２はｂを選択して出力する。これにより、転置行列ＡTを得ることができる。一方、例えば、転置行列オンオフ信号がオフを示す場合に、マルチプレクサ５０１−１はｂを選択して出力し、マルチプレクサ５０１−２はｃを選択して出力する。これにより、入力行列Ａをそのまま得ることができる。
【００３９】
（データ処理装置１００の機能的構成例）
図６は、データ処理装置の機能的構成例を示す説明図である。データ処理装置１００は、例えば、バッファ６０１と、変換部１１１と、演算部１１２と、を有する。
【００４０】
また、各部は、論理積回路であるＡＮＤ、否定論理回路であるＩＮＶＥＲＴＥＲ、論理和回路であるＯＲや、ラッチ回路であるＦＦ（Ｆｌｉｐ  Ｆｌｏｐ）などの素子によって形成されてもよい。また、各部は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によって実現されてもよい。具体的には、たとえば、上述した各部の機能をハードウェア記述言語などによってネットリストに機能定義し、そのネットリストを論理合成してＡＳＩＣやＰＬＤに与えることにより、各部を実現してもよい。
【００４１】
変換部１１１は、対象の演算命令によってメモリ１０１から取得した第１行列を受け付ける。メモリ１０１は、例えば、上述したデータメモリ２１４である。そして、変換部１１１は、受け付けた第１行列と、第２行列と、のうち、演算命令が指示する演算対象の行列を出力する。第２行列は、第１行列に含まれる複数の要素と同一の要素を含む行列であって、第１行列に含まれる複数の要素のうちの少なくともいずれか２つの要素の並びを入れ替えた行列である。
【００４２】
演算部１１２は、変換部１１１によって出力された演算対象の行列に対して、演算命令が指示する演算を行う。演算部１１２は、具体的に、例えば、上述した演算データパス３０２である。
【００４３】
変換部１１１は、選択部６１１と、選択制御部６１２と、共役部６１３と、を有する。選択部６１１は、第１行列と、第２行列と、のうち、いずれかを出力する。選択制御部６１２は、演算命令によって、第１行列と、第２行列と、のうち、いずれかを選択部６１１に出力させる制御を行う。
【００４４】
また、選択制御部６１２は、記憶部６２１を有する。記憶部６２１は、行の要素の数および列の要素の数に対応する第１行列に含まれる特定の並びの複数の要素について選択部６１１に出力させる第１行列に含まれる複数の要素の並びを指示する制御信号の値を記憶する。選択制御部６１２は、演算命令が指示する演算対象の行列についての行の要素の数および列の要素の数に基づいて、記憶部６２１から制御信号の値を読み出して選択部６１１に出力する。記憶部６２１は、例えば、後述する図９に示すインデックステーブルである。
【００４５】
選択部６１１は、第１行列に含まれる複数の要素を、選択制御部６１２から出力された制御信号が指示する並びにした複数の要素を含む演算対象の行列を出力する。
【００４６】
バッファ６０１は、例えば、第１行列に含まれる複数の要素の数以上の所定数の要素を格納可能である。また、バッファ６０１は、対象の演算命令によってメモリ１０１から取得した第１行列に含まれる複数の要素を特定の並びで格納する。本実施の形態では、第１行列の行の要素を優先して格納する。
【００４７】
選択部６１１は、バッファ６０１に格納された所定数の要素を入力可能な所定数の選択回路の各々が、バッファ６０１に格納された第１行列に含まれる複数の要素のうちのいずれかを選択して出力する。選択制御部６１２は、バッファ６０１に格納された所定数の要素のうち、選択回路の各々に選択させる要素を指示する。
【００４８】
また、共役部６１３は、演算対象の行列に含まれる複数の要素の各々が虚部と実部とを有する場合に、演算対象の行列に含まれる複数の要素の各々が有する虚部の符号を入れ替えて、入れ替えた後の前記演算対象の行列を出力する。
【００４９】
また、入力行列である第１行列は、行および列の要素の数が互いに同じ複数の第１行列であってもよい。また、変換後の行列である第２行列は、行および列の要素の数が互いに同じ複数の第２行列であってもよい。また、複数の第２行列の各々は、複数の第２行列の各々に対応する複数の第１行列の各々について第１行列に含まれる複数の要素のうちの少なくともいずれか２つの要素の並びを入れ替えた行列である。
【００５０】
以上を踏まえて、各部に対応する回路を用いて詳細に動作を説明する。
【００５１】
図７は、行列変換例を示す説明図である。ここでは、１または複数の入力行列を扱えるようにし、バッファに納まる要素数であれば任意の要素数の行列を入力可能であり、かつ様々な行列変換が可能となるようにする。ここでは、１度に処理可能な要素の数が１６個の場合を例に挙げる。図７の左側では、２×２の第１行列を４個入力し、２×２の転置行列である第２行列を４個得る例である。図７の右側では、２×３の第１行列を２個入力し、３×２の転置行列である第２行列を２個得る例である。入力行列と変換後の行列は複数であっても、行および列の要素の数は互いに同一である。
【００５２】
（データ供給回路３０１例）
図８は、データ供給回路例を示す説明図である。データ供給回路３０１は、例えば、入力バッファ８０１と、マルチプレクサ８０２と、行列変換制御回路８０３と、共役回路８０４と、を有する。
【００５３】
ここで、入力バッファ８０１は、入力行列に含まれる要素を格納可能なレジスタである。入力バッファ８０１のサイズは、例えば、演算データパス３０２での演算される行列のサイズや演算データパス３０２の構成などに応じて決定される。ここでは、入力バッファ８０１は、１６個の要素を格納可能である。入力バッファ８０１は、例えば、行列変換プロセッサにおいてパイプライン処理を行うために設けられる。１個の要素は３２ビットのデータである。
【００５４】
出力バッファ８０５は、変換後の行列に含まれる要素を格納可能なレジスタである。出力バッファ８０５に格納可能な要素の数は、入力バッファ８０１に格納可能な要素の数に応じた数であり、例えば入力バッファ８０１に格納可能な要素の数と同一である。
【００５５】
マルチプレクサ８０２と行列変換制御回路８０３とは変換部１１１である。マルチプレクサ８０２は、第１行列と、第１行列に含まれる複数の要素のうちの少なくとも２つの要素の並びを入れ替えた第２行列と、のいずれかを出力する。マルチプレクサ８０２は、入力バッファ８０１に格納された複数の要素を入れ替えて出力する選択部６１１である。
【００５６】
マルチプレクサ８０２は、所定数のマルチプレクサＭＵＸを有する。所定数は、上述したように、入力バッファ８０１に格納可能な要素の数である。ここでは、マルチプレクサ８０２は、マルチプレクサＭＵＸ＿０〜ＭＵＸ＿１５までの１６個のマルチプレクサＭＵＸを有する。マルチプレクサＭＵＸ＿０〜ＭＵＸ＿１５の各々は、入力バッファ８０１に格納された１６個の要素をすべて入力可能である。マルチプレクサＭＵＸ＿０〜ＭＵＸ＿１５の各々は、マルチプレクサＭＵＸ＿０〜ＭＵＸ＿１５の各々に対応するデータ選択制御信号ｓｅｌ０〜ｓｅｌ１５に応じて一つの要素を選択して、対応する出力バッファ８０５に出力する。
【００５７】
例えば、マルチプレクサＭＵＸ＿０は、入力バッファ８０１に格納された１６個の要素の中から、データ選択制御信号ｓｅｌ０に基づきいずれか一つの要素を選択して出力する。図８の例では、マルチプレクサＭＵＸ＿０〜ＭＵＸ＿１５の各々は、共役回路８０４に出力する。ただし、共役回路８０４がオフ状態である場合、マルチプレクサＭＵＸ＿０〜ＭＵＸ＿１５によって選択された各要素は、マルチプレクサＭＵＸ＿０〜ＭＵＸ＿１５の各々に対応する出力バッファ８０５に出力される。例えば、マルチプレクサＭＵＸ＿０によって選択された要素は、出力バッファ８０５−０に格納される。
【００５８】
行列変換制御回路８０３は、例えば、インデックステーブル８１１と、共役制御回路８１２と、を有する。インデックステーブル８１１は、変換後の行の要素の数および列の要素の数が指定されると、指定された行の要素の数および列の要素の数に対応する要素を選択可能なデータ選択制御信号ｓｅｌ０〜ｓｅｌ１５を出力する。
【００５９】
図９は、インデックステーブル例を示す説明図である。図９に示すインデックステーブル８１１は、入力行列に含まれる複数の要素から転置行列を得るためのデータ選択信号の値が設定されてある。Ｍは変換後の行の要素の数であり、Ｎは、変換後の列の要素の数である。後述する行列変換モードなどを追加してインデックステーブル８１１の行を追加することによって、転置行列とともに他の行列変換などを行うことも可能である。
【００６０】
例えば、入力バッファ８０１に格納される１６個の要素のうち、データ選択制御信号ｓｅｌ０〜ｓｅｌ１５の各々に対応する入力バッファ８０１に格納された要素が出力されることとなる。例えばデータ選択制御信号ｓｅｌ０は、図８に示すマルチプレクサＭＵＸ＿０の制御信号となる。
【００６１】
ここでは、共役回路８０４について省略して説明する。データ選択制御信号ｓｅｌ０が０であると、マルチプレクサＭＵＸ＿０は、入力バッファ８０１−０が付されたレジスタに格納された要素を出力バッファ８０５−０に出力する。インデックステーブル８１１において×印はドントケアである。入力バッファ８０１−０とは、図８において入力バッファ８０１のＩｎｄｅｘに０が付されたレジスタである。出力バッファ８０５−０とは、図８において出力バッファ８０５のＩｎｄｅｘに０が付されたレジスタである。
【００６２】
例えば、Ｍ＝１、Ｎ＝１の場合、インデックステーブル８１１によれば、入力バッファ８０１に入力される要素の並び通りに出力バッファ８０５に要素が出力される。
【００６３】
図７の右側に示した２個の２×３行列から２個の３×２の転置行列を得るためには、Ｍ＝３、Ｎ＝２となる。Ｍ＝３、Ｎ＝２の場合、データ選択制御信号ｓｅｌ０は０であり、データ選択制御信号ｓｅｌ１は３である。そして、データ選択制御信号ｓｅｌ２は１であり、データ選択制御信号ｓｅｌ３は４であり、データ選択制御信号ｓｅｌ４は２であり、データ選択制御信号ｓｅｌ５は５である。また、データ選択制御信号ｓｅｌ６は６であり、データ選択制御信号ｓｅｌ７は９であり、データ選択制御信号ｓｅｌ８は７であり、データ選択制御信号ｓｅｌ９は１０であり、データ選択制御信号ｓｅｌ１０は８である。また、データ選択制御信号ｓｅｌ１１は１１であり、データ選択制御信号ｓｅｌ１２〜ｓｅｌ１５はドントケアである。
【００６４】
図７の右側に示すように、２個の２×３行列の場合、要素の数は１２であり、入力バッファ８０１に格納される１６個の要素のうちの４個の要素は使用しないことになるため、データ選択制御信号ｓｅｌ１２〜ｓｅｌ１５はドントケアとなる。このように、簡単な制御処理によって入力行列を演算対象の行列に変換することができる。
【００６５】
図８の説明に戻って、共役回路８０４は、共役制御信号に応じてマルチプレクサ８０２から出力された各要素の虚部の符号を入れ替える共役部６１３である。虚部の符号を入れ替えることは、共役複素数に取り替えるとも称する。
【００６６】
図１０は、共役回路例を示す説明図である。ここでは、１つの要素が例えば３２ビットのデータであり、３２ビットのデータのうち上位１６ビットのデータが実部であり、下位１６ビットのデータが虚部である。共役回路８０４は、３２ビットのデータのうち虚部の１６ビットのデータを虚部の符号を入れ替える回路ｃｏｍｐ２に入力する。回路ｃｏｍｐ２は、共役制御信号の値に応じて２の補数を計算する回路である。
【００６７】
回路ｃｏｍｐ２は、例えば、共役制御信号の値が０の場合、２の補数を計算せずに入力された１６ビットのデータをそのまま出力し、共役制御信号の値が１の場合、２の補数を計算して計算後の１６ビットのデータを出力する。
【００６８】
図１１は、共役制御信号の出力例を示す説明図である。ここでは、例えば、命令デコーダ３０４から共役制御回路８１２に入力されるＴＦｍｏｄｅの値は、例えば、０であれば変換しないことを示し、１であれば転置行列に変換することを示し、２であればエルミート行列に変換することを示す。共役制御回路８１２は、例えば、ＴＦｍｏｄｅの値が０または１であれば、共役制御信号の値を０に設定して共役回路８０４に出力する。
【００６９】
共役制御回路８１２は、例えば、ＴＦｍｏｄｅの値が２であれば、共役制御信号の値を１に設定して共役回路８０４に出力する。これにより、入力行列のエルミート行列を求める場合に、共役回路８０４がオン状態となり、変換なしや転置行列の場合には、共役回路８０４がオフ状態となる。
【００７０】
図１２は、命令実行処理手順例を示すフローチャートである。命令実行が開始されると、命令デコーダ３０４が命令メモリ２１３から命令を取得してデコードする（ステップＳ１２０１）。つぎに、データ供給回路３０１が、デコード結果に基づきデータをロードする（ステップＳ１２０２）。データ供給回路３０１が、デコード結果に基づき、入力行列をそのまま出力または変換して出力する（ステップＳ１２０３）。
【００７１】
演算データパス３０２が演算を行い、データストア回路３０３が演算結果をメモリ１０１に書き戻す（ステップＳ１２０４）。そして、データ供給回路３０１が、ストリームの全データの処理が終了したか否かを判断する（ステップＳ１２０５）。ストリームの全データの処理が終了していないと判断した場合（ステップＳ１２０５：Ｎｏ）、データ供給回路３０１が、ステップＳ１２０２へ戻って、データをロードする。ストリームの全データの処理が終了したと判断した場合（ステップＳ１２０５：Ｙｅｓ）、命令実行が終了する。
【００７２】
図１３は、ラップアラウンド処理回路を含むデータ供給回路の一構成例を示す説明図である。入力ＦＩＦＯ１３０１は、幅Ｍのデータを複数個格納可能なバッファキューである。Ｍは正の整数である。ここでは、入力バッファ８０１は、１６個の要素を２つ格納可能である。図１３の例では、１個の要素のデータ幅は３２ビットまでである。
【００７３】
図示省略するが、メモリアクセスユニットは、データメモリ２１４に格納されたソースデータのデータ長のデータを読み出して１つ又は複数個の幅Ｍのデータとして入力ＦＩＦＯ１３０１に格納する。ソースデータのデータ長、即ち、演算対象となるソースデータの全体の長さを、ストリーム長ＳＬＳとも呼ぶ。例えば、演算単位が２×２の実数行列（演算ユニット長ＵＬ＝４ｓｈｏｒｔ）であり、１０００個の行列が演算対象となる場合、ストリーム長ＳＬＳは４０００ｓｈｏｒｔである。
【００７４】
具体的には、メモリアクセスユニットは、データメモリ２１４に格納されたデータ長ＳＬＳのデータの先頭から、データメモリ２１４の１ラインに等しいＭ個のデータを読み出す。データメモリ２１４の１ラインは、データメモリ２１４とデータ供給回路３０１との間のバスの幅に等しい。メモリアクセスユニットは、データメモリ２１４とデータ供給回路３０１との間の幅Ｍのバスを介して受け取った幅Ｍのデータを、入力ＦＩＦＯ１３０１に書き込む。入力ＦＩＦＯ１３０１は、幅Ｍのデータを順次格納することができ、先に格納された幅Ｍのデータから順番に読み出すことができる。
【００７５】
ラップアラウンド処理回路４０１は、入力ＦＩＦＯ１３０１からＰ（≦Ｍ）個（ｓｈｏｒｔ）の連続した単位データを選択することにより幅Ｐのデータを読み出す動作を、複数回繰り返すことにより、入力ＦＩＦＯ１３０１から複数個の幅Ｐのデータを隙間なく順番に読み出す。具体的には、ラップアラウンド処理回路４０１は、最初に、入力ＦＩＦＯ１３０１の最も先に格納された幅ＭのデータのＭ個の単位データのうちで、先頭からＰ（≦Ｍ）個の連続した単位データを選択する。ラップアラウンド処理回路４０１は、選択したＰ個の単位データを、行列変換回路４０２に供給してもよい。ただし、ラップアラウンド処理回路４０１と行列変換回路４０２と、の間のデータ転送幅を固定（例えば幅Ｍ）とした場合、ラップアラウンド処理回路４０１は、選択したＰ個の単位データを含む例えば幅Ｍのデータを、行列変換回路４０２に供給してよい。このとき、選択したＰ個の単位データ以外のＭ−Ｐ個の単位データについては、どのような値であってもよい。
【００７６】
Ｐ個の連続した単位データを選択した後、ラップアラウンド処理回路４０１は既に選択した最後の単位データのつぎの単位データからＰ個の連続した単位データを選択し、選択したＰ個の単位データを、演算データパス３０２に供給してよい。これを繰り返すことにより、ラップアラウンド処理回路４０１は複数個の幅Ｐのデータを隙間なく順番に入力ＦＩＦＯ１３０１から読み出す。なお、ラップアラウンド処理回路４０１により選択する単位データが幅Ｍのデータの終端の単位データになる場合には、ラップアラウンド処理回路４０１は、つぎの順番の幅Ｍのデータを入力ＦＩＦＯ１３０１から読み出す。そして、ラップアラウンド処理回路４０１は、この新たな幅Ｍのデータの先頭の単位データおよびそれに続く単位データを選択し続ければよい。
【００７７】
具体的に、マルチプレクサ１３１１は、１６個のマルチプレクサ８０２を有する。マルチプレクサ８０２は、入力バッファ８０１の出力する幅６４のデータＢＵＦＯＵＴから、ＷＭ制御回路１３１２が供給するＷＭ制御信号の指定するＰ個の連続した単位データを選択する。
【００７８】
マルチプレクサ８０２は、上述した、行列変換回路４０２に含まれる選択部である。行列変換制御回路８０３は、行列変換回路４０２に含まれる選択制御部である。
【００７９】
図１４は、ＷＭ処理回路と行列変換回路とによる要素の選択例を示す説明図である。ＷＭ制御回路１３１２は、入力バッファ８０１−４〜入力バッファ８０１−１９に格納された要素を選択するようにＷＭ制御信号を出力する。
【００８０】
そして、行列変換制御回路８０３は、２×２の転置行列を得るためのＴＦ制御信号を出力する。具体的に、例えば、２×２の転置行列を得る場合、行列変換制御回路８０３は、左のマルチプレクサ８０２から順に０，２，１，３，４，６，５，７，８，１０，９，１１，１２，１４，１３，１５を選択するようにＴＦ制御信号を出力する。
【００８１】
ここで、各マルチプレクサ８０２は回路規模が大きいため、データ処理装置１００の規模が大きくなる。そこで、本実施の形態では、ラップアラウンド処理回路４０１におけるマルチプレクサ１３１１と、行列変換回路４０２におけるマルチプレクサ８０２と、を共有して要素の選択処理をマージする。これにより、回路規模の縮小を図ることができる。
【００８２】
選択部６１１は、入力バッファ８０１に格納された所定数の要素のうち第１行列に含まれる複数の要素が格納された位置データと、第１制御信号と、に基づいて、第２制御信号を生成する。第１制御信号は、行列変換制御回路８０３によって出力される信号である。第２制御信号は、入力バッファ８０１に格納された所定数の要素のうち選択回路の各々に選択させる要素を指示する信号である。そして、選択部６１１は、選択回路の各々が生成した第２制御信号に基づいてバッファに格納された所定数の要素のうちのいずれかを選択して出力する。
【００８３】
図１５は、ラップアラウンド処理回路を含むデータ供給回路の別の構成例を示す説明図である。データ供給回路３０１は、入力ＦＩＦＯ１３０１と、入力バッファ８０１と、ＷＭ制御回路１３１２と、行列変換制御回路８０３と、インデックス選択マルチプレクサ１５０１と、データ選択マルチプレクサ１５０２と、共役回路８０４と、を有する。
【００８４】
インデックス選択マルチプレクサ１５０１とデータ選択マルチプレクサ１５０２とは、選択部６１１である。インデックス選択マルチプレクサ１５０１は、バッファ６０１に格納された所定数の要素のうち第１行列に含まれる複数の要素が格納された位置データと、第１制御信号と、に基づいて、第２制御信号を生成する。第２制御信号は、バッファ６０１に格納された所定数の要素のうち選択回路の各々に選択させる要素を指示する信号である。
【００８５】
具体的に、インデックス選択マルチプレクサ１５０１は、例えば、１６個のマルチプレクサを有する。１６個のマルチプレクサの各々は、位置データであるＷＭ制御信号を入力とし、第１制御信号であるＴＦ制御信号に基づいていずれかのデータ選択制御信号を出力する。インデックス選択マルチプレクサ１５０１から出力されるデータ選択制御信号が第２制御信号である。
【００８６】
そして、データ選択マルチプレクサ１５０２は、インデックス選択マルチプレクサ１５０１によって出力されたデータ選択制御信号に基づいて、入力バッファ８０１に格納された要素からいずれかの要素を選択して出力する。具体的に、インデックス選択マルチプレクサ１５０１は、入力バッファ８０１に格納された３２個の要素から、データ選択制御信号に基づいて、１６個の要素を選択して出力する。
【００８７】
図１３に示すマルチプレクサ１３１１およびマルチプレクサ８０２に対して図１５に示すインデックス選択マルチプレクサ１５０１およびデータ選択マルチプレクサ１５０２では、３２ビットのマルチプレクサから５ビットのマルチプレクサに削減している。図１３と図１５とを比較すると、インデックス選択マルチプレクサ１５０１およびデータ選択マルチプレクサ１５０２とによって、回路規模を約１／６倍に縮小することができる。
【００８８】
図１６は、図１５に示すデータ供給回路による行列変換例を示す説明図である。ここでは、図７に示したように２×２の４つの入力行列から２×２の４つの転置行列に変換する例である。また、ここでは、２×２の４つの入力行列に含まれる要素は、入力バッファ８０１−４〜入力バッファ８０１−１９に格納されてある。
【００８９】
行列変換制御回路８０３は、左のデータマルチプレクサ１５０１から順に０，２，１，３，４，６，５，７，８，１０，９，１１，１２，１４，１３，１５を選択するようにＴＦ制御信号を出力する。ＷＭ制御回路１３１２は、入力バッファ８０１−４〜入力バッファ８０１−１９を選択するようにＷＭ制御信号を出力する。
【００９０】
＜ラップアラウンド処理回路４０１＞
ここで、ラップアラウンド処理回路４０１の構成および動作例について詳細に説明する。
【００９１】
図１７は、メモリアクセスユニットおよびデータ供給回路の処理を模式的に示す図（その１）である。図１７に示す処理は、ＳＬＳ＞Ｍの場合に実行される処理である。
【００９２】
図１７（ａ）に示すようにデータメモリ２１４にはストリーム長ＳＬＳのデータが格納される。ストリーム長ＳＬＳは、幅Ｍよりも長い。このストリーム長ＳＬＳのデータが、メモリアクセスユニットにより、幅Ｍごとに読み出され、入力ＦＩＦＯ１３０１に格納される。図１７（ｂ）には、入力ＦＩＦＯ１３０１に格納されたデータ５１を示す。この入力ＦＩＦＯ１３０１に格納されたデータから、Ｐ（≦Ｍ）個の連続した単位データを選択することにより幅Ｐのデータを読み出す動作を、複数回繰り返すことにより、入力ＦＩＦＯ１３０１から複数個の幅Ｐのデータ６１〜６４を隙間なく順番に読み出す。幅Ｐのデータ６５はデータ５１の終端部分にかかってしまうので、幅Ｐのデータ６５を読み出す前までに、メモリアクセスユニットにより、ストリーム長ＳＬＳのデータをデータメモリ２１４から読み出して、入力ＦＩＦＯ１３０１にデータ５２として格納しておく。これにより、入力ＦＩＦＯ１３０１から複数個の幅Ｐのデータ６１〜６９を隙間なく順番に読み出すことができる。なお、図１７（ｃ）に示すように、幅Ｐのデータ６１〜６９の各々は、演算サイクルごとに、即ち各演算サイクルにおいて１つずつ読み出される。
【００９３】
なお、図１７の動作例では、ストリーム長ＳＬＳのデータをデータメモリ２１４から読み出して、入力ＦＩＦＯ１３０１にデータ５１として格納している。そして更にその後、同一のストリーム長ＳＬＳのデータをデータメモリ２１４から読み出して、入力ＦＩＦＯ１３０１にデータ５２として格納している。このような構成にする代わりに、入力ＦＩＦＯ１３０１内に既に格納されているデータ５１を使い回して、データ５２に相当するデータ部分を入力ＦＩＦＯ１３０１に配置してもよい。
【００９４】
図１８は、メモリアクセスユニットおよびデータ供給回路の処理を模式的に示す図（その２）である。図１８に示す処理は、ＳＬＳ≦Ｍの場合に実行される処理である。
【００９５】
図１８（ａ）に示すようにデータメモリ２１４にはストリーム長ＳＬＳのデータが格納されている。ストリーム長ＳＬＳは、幅Ｍよりも短い。このストリーム長ＳＬＳのデータが、メモリアクセスユニットにより、幅Ｍのデータとしてロードされ、入力ＦＩＦＯ１３０１に格納される。図１８（ｂ）には、入力ＦＩＦＯ１３０１に格納されたデータ７０を示す。この入力ＦＩＦＯ１３０１に格納されたデータから、Ｐ（≦Ｍ）個の連続した単位データを選択することにより幅Ｐのデータを読み出す動作を、複数回繰り返すことにより、入力ＦＩＦＯ１３０１から複数個の幅Ｐのデータ７１〜７５を隙間なく順番に読み出す。ただし、幅Ｐのデータ７３の場合、データ７０の終端部分にかかってしまうので、データ７０の先端部分に戻り、先端部分から続けてデータを選択して読み出すことになる。これは幅Ｐのデータ７５についても同様である。このようにして、入力ＦＩＦＯ１３０１から複数個の幅Ｐのデータ７１〜７５を隙間なく順番に読み出すことができる。なお、幅Ｐのデータ７１〜７５の各々は、演算サイクルごとに、即ち各演算サイクルにおいて１つずつ読み出される。
【００９６】
ここで、ラップアラウンド処理回路について詳細に説明する。図１９以降では、ラップアラウンド処理回路について説明するため、行列変換回路４０２については図示などを省略する。
【００９７】
図１９は、ラップアラウンド処理回路の詳細例を示す図である。ラップアラウンド処理回路は、データ選択部１９０１とＷＭ制御回路１３１２とを有する。データ選択部１９０１は、セレクタ回路１９１１と、バッファ回路１９１２と、結合回路１９１３と、マルチプレクサ１３１１と、結合回路１９１４と、を有する。マルチプレクサ１３１１は、セレクタ８４−１〜８４−３２を有する。
【００９８】
入力ＦＩＦＯ１３０１の最も先に格納された幅Ｍ（この例で３２ｓｈｏｒｔ）のデータが、ＷＭ制御回路１３１２からのＰＯＰ信号の「１」に応答して、入力ＦＩＦＯ１３０１から読み出され、セレクタ回路１９１１を介してバッファ回路１９１２に格納される。この例では幅Ｍは、３２ｓｈｏｒｔである。この時、セレクタ回路１９１１はＰＯＰ信号の「１」により、図１９の右側の入力を選択する状態となっている。幅３２のデータがバッファ回路１９１２に格納された状態で、入力ＦＩＦＯ１３０１が出力している幅３２のデータは、バッファ回路１９１２に格納されたデータのつぎのデータとなっている。入力ＦＩＦＯ１３０１が出力している幅３２のデータは、現時点で最も先に格納された幅３２のデータである。
【００９９】
なお、ＰＯＰ信号の「１」に応答して、メモリアクセスユニットにより、ストリーム長ＳＬＳのデータのうち入力ＦＩＦＯ１３０１に未だ格納していない残りのデータをデータメモリ２１４から読み出して、入力ＦＩＦＯ１３０１に後続データとして格納してよい。この際、データメモリ２１４から読み出したデータが、ストリーム長ＳＬＳのデータの終端に至った場合には、つぎのＰＯＰ信号の「１」に応答して、ストリーム長ＳＬＳのデータの始端から読み出しを再開してよい。この場合、図１８（ｂ）に示すように、ストリーム長ＳＬＳのデータの始端が、前に読み出したストリーム長ＳＬＳのデータの終端に隙間なく続くように、入力ＦＩＦＯ１３０１にデータを格納してよい。
【０１００】
結合回路１９１３は、バッファ回路１９１２の格納する１つの幅３２のデータと、入力ＦＩＦＯ１３０１の出力するつぎの幅３２のデータとを並べて構成した、幅６４のデータＢＵＦＯＵＴを出力する。このデータＢＵＦＯＵＴの長さは、６４ｓｈｏｒｔ×１６ビットの１０２４ビットである。
【０１０１】
マルチプレクサ１３１１は、結合回路１９１３の出力する幅６４のデータＢＵＦＯＵＴから、ＷＭ制御回路１３１２が供給するＷＭ制御信号ＳＥＬ００〜ＳＥＬ３１の指定するＰ個の連続した単位データを選択する。実際には、データ選択部１９０１の出力は幅３２（ｓｈｏｒｔ）であるので、選択したＰ個の連続した単位データは、幅３２の出力データのうちの連続した一部に配置されてよい。連続した一部とは、具体的に、例えば、左端の連続した一部分である。演算データパス３０２は、データ処理幅Ｐのデータのみを演算対象とするので、データ選択部１９０１の出力する幅３２のデータのうちで例えば左端の連続したＰ個の単位データを対象として演算を実行すればよい。
【０１０２】
具体的には、セレクタ８４−１が、幅６４のデータＢＵＦＯＵＴのうち、ＷＭ制御信号ＳＥＬ００の指し示す位置にある１ｓｈｏｒｔの単位データを選択して出力する。またセレクタ８４−２が、幅６４のデータＢＵＦＯＵＴのうち、ＷＭ制御信号ＳＥＬ０１の指し示す位置にある１ｓｈｏｒｔの単位データを選択して出力する。以下同様であり、セレクタ８４−３２が、幅６４のデータＢＵＦＯＵＴのうち、ＷＭ制御信号ＳＥＬ３１の指し示す位置にある１ｓｈｏｒｔの単位データを選択して出力する。
【０１０３】
図２０は、ＷＭ制御回路による選択動作の一例を示す図である。図２０に示す例では、幅Ｍが３２（ｓｈｏｒｔ）、ストリーム長ＳＬＳが３４（ｓｈｏｒｔ）、データ処理幅Ｐが８（ｓｈｏｒｔ）である。図２０の表に示すＳＬＳ＿ＭＯＤ、ＯＦＦＳＥＴについては、後程説明する。データ処理幅Ｐが８であるので、以下の説明においては、図１９に示す左端の８個のセレクタ８４−１〜８４−８に供給されるＷＭ制御信号ＳＥＬ００〜ＳＥＬ０７のみに着目する。
【０１０４】
まず、ストリーム長ＳＬＳが３４であるデータの先頭の３２個の単位データが図１９のバッファ回路１９１２に格納され、残りの２個の単位データが、入力ＦＩＦＯ１３０１の出力しているデータの左端に格納された状態であるとする。なお、前述のように、入力ＦＩＦＯ１３０１の出力しているデータにおいては、左端の上記の２個の単位データに続くようにして、その右側に、ストリーム長ＳＬＳが３４であるデータの先頭の部分のデータ（先頭の３０個の単位データ）が格納されている。このように、メモリアクセスユニットにより、ストリーム長ＳＬＳのデータをデータメモリ２１４から随時読み出して、入力ＦＩＦＯ１３０１に後続データとして格納する動作が、継続的に実行される。
【０１０５】
最初のサイクル（ｃｙｃｌｅ＝０）では、ＷＭ制御信号ＳＥＬ００〜ＳＥＬ０７は、「０」〜「７」であり、幅６４のデータＢＵＦＯＵＴの０番（一番左端）の単位データから７番（左端から数えて８個目）の単位データまでが選択される。つぎのサイクル（ｃｙｃｌｅ＝１）では、ＷＭ制御信号ＳＥＬ００〜ＳＥＬ０７は、「８」〜「１５」であり、幅６４のデータＢＵＦＯＵＴの８番（左端から数えて９個目）の単位データから１５番（左端から数えて１６個目）の単位データまでが選択される。その後同様に進行し、バッファ回路１９１２を利用しながら、入力ＦＩＦＯ１３０１から複数個の幅Ｐのデータを隙間なく順番に選択し、読み出していく。
【０１０６】
５番目のサイクル（ｃｙｃｌｅ＝４）において、ＷＭ制御信号ＳＥＬ００〜ＳＥＬ０７は、「３２」〜「３９」であり、幅６４のデータＢＵＦＯＵＴの３２番の単位データから３９番の単位データまでが選択される。このとき、ＰＯＰ信号が「１」になる。従って、つぎのサイクルにおいては、ストリーム長ＳＬＳが３４であるデータの終端の２個の単位データとそれに続く先頭の３０個の単位データが、図１９のバッファ回路１９１２に格納される。またそれに続くストリーム長ＳＬＳが３４であるデータの終端の４個の単位データと、ストリーム長ＳＬＳが３４であるデータの先頭の部分のデータ（先頭の２８個の単位データ）とが、入力ＦＩＦＯ１３０１の出力データ部分に並んで格納される。
【０１０７】
６番目のサイクル（ｃｙｃｌｅ＝５）では、ＷＭ制御信号ＳＥＬ００〜ＳＥＬ０７は、「８」〜「１５」であり、幅６４のデータＢＵＦＯＵＴの８番（左端から数えて９個目）の単位データから１５番（左端から数えて１６個目）の単位データまでが選択される。その後同様に進行し、入力ＦＩＦＯ１３０１から複数個の幅Ｐのデータを隙間なく順番に選択し、読み出していく。
【０１０８】
図２１は、ＷＭ制御回路による選択動作の別の一例を示す図である。図２１に示す例では、幅Ｍが３２（ｓｈｏｒｔ）、ストリーム長ＳＬＳが３４（ｓｈｏｒｔ）、データ処理幅Ｐが３２（ｓｈｏｒｔ）である。図２１の表に示すＳＬＳ＿ＭＯＤ、ＯＦＦＳＥＴについては、後程説明する。データ処理幅Ｐが３２であるので、以下の説明においては、図１９に示す３２個のセレクタ８４−１〜８４−３２に供給されるＷＭ制御信号ＳＥＬ００〜ＳＥＬ３１に着目する。
【０１０９】
まず、ストリーム長ＳＬＳが３４であるデータの先頭の３２個の単位データが図１９のバッファ回路１９１２に格納され、残りの２個の単位データが、入力ＦＩＦＯ１３０１の出力しているデータの左端に格納された状態であるとする。なお、前述のように、入力ＦＩＦＯ１３０１の出力しているデータにおいては、左端の上記の２個の単位データに続くようにして、その右側に、ストリーム長ＳＬＳが３４であるデータの先頭の部分のデータ（先頭の３０個の単位データ）が格納されている。このように、メモリアクセスユニットにより、ストリーム長ＳＬＳのデータをデータメモリ２１４から随時読み出して、入力ＦＩＦＯ１３０１に後続データとして格納する動作が、継続的に実行される。
【０１１０】
最初のサイクル（ｃｙｃｌｅ＝０）では、ＷＭ制御信号ＳＥＬ００〜ＳＥＬ３１は、「０」〜「３１」であり、幅６４のデータＢＵＦＯＵＴの０番（一番左端）の単位データから３１番（一番右端）の単位データまでが選択される。このとき、ＰＯＰ信号が「１」になる。従って、つぎのサイクルにおいては、ストリーム長ＳＬＳが３４であるデータの終端の２個の単位データとそれに続く先頭の３０個の単位データが、図１９のバッファ回路１９１２に格納される。またそれに続くストリーム長ＳＬＳが３４であるデータの終端の４個の単位データと、ストリーム長ＳＬＳが３４であるデータの先頭の部分のデータ（先頭の２８個の単位データ）とが、入力ＦＩＦＯ１３０１の出力データ部分に並んで格納される。
【０１１１】
つぎのサイクル（ｃｙｃｌｅ＝１）でも、ＷＭ制御信号ＳＥＬ００〜ＳＥＬ３１は、「０」〜「３１」であり、幅６４のデータＢＵＦＯＵＴの０番（一番左端）の単位データから３１番（一番右端）の単位データまでが選択される。このとき、ＰＯＰ信号が「１」になる。従って、つぎのサイクルにおいては、ストリーム長ＳＬＳが３４であるデータの終端の４個の単位データとそれに続く先頭の２８個の単位データが、図１９のバッファ回路１９１２に格納される。またそれに続くストリーム長ＳＬＳが３４であるデータの終端の６個の単位データと、ストリーム長ＳＬＳが３４であるデータの先頭の部分のデータ（先頭の２６個の単位データ）とが、入力ＦＩＦＯ１３０１の出力データ部分に並んで格納される。以降同様に進行し、バッファ回路１９１２を利用しながら、入力ＦＩＦＯ１３０１から複数個の幅Ｐのデータを隙間なく順番に選択し、読み出していく。
【０１１２】
図２２は、ＷＭ制御回路による選択動作の更に別の一例を示す図である。図２２に示す例では、幅Ｍが３２（ｓｈｏｒｔ）、ストリーム長ＳＬＳが１２（ｓｈｏｒｔ）、データ処理幅Ｐが８（ｓｈｏｒｔ）である。図２２の表に示すＳＬＳ＿ＭＯＤ、ＯＦＦＳＥＴについては、後程説明する。データ処理幅Ｐが８であるので、以下の説明においては、図１９に示す左端の８個のセレクタ８４−１〜８４−８に供給されるＷＭ制御信号ＳＥＬ００〜ＳＥＬ０７のみに着目する。
【０１１３】
まず、ストリーム長ＳＬＳが１２であるデータの１２個の単位データが図１９のバッファ回路１９１２の左端側に詰めて格納された状態であるとする。
【０１１４】
最初のサイクル（ｃｙｃｌｅ＝０）では、ＷＭ制御信号ＳＥＬ００からＳＥＬ０７は、「０」から「７」のいずれかであり、幅６４のデータＢＵＦＯＵＴの０番（一番左端）の単位データから７番（左端から数えて８個目）の単位データまでが選択される。つぎのサイクル（ｃｙｃｌｅ＝１）では、ＷＭ制御信号ＳＥＬ００からＳＥＬ０７は、「８，９，１０，１１，０，１，２，３」である。したがって、幅６４のデータＢＵＦＯＵＴの８番（左端から数えて９個目）の単位データから１１番（左端から数えて１２個目）の単位データまでと、続いて０番（一番左端）の単位データから３番（左端から数えて４個目）の単位データまでが選択される。その後同様に進行し、バッファ回路１９１２を利用しながら、入力ＦＩＦＯ１３０１から複数個の幅Ｐのデータを隙間なく順番に選択し、読み出していく。この読み出し動作では、ストリーム長ＳＬＳが幅Ｍよりも短いので、ＰＯＰ信号が「１」になることはない。
【０１１５】
図２３は、ＷＭ制御回路の構成の一例を示す図である。図２３に示すＷＭ制御回路１３１２は、ＳＬＳ＿ＭＯＤ回路２３０１と、ＳＬＳレジスタ２３０２と、ＳＥＬ＿ＷＲＡＰ回路２３０３−１〜２３０３−３２と、を有する。また、ＷＭ制御回路１３１２は、ＯＦＦＳＥＴレジスタ２３０４と、ＡＤＤ＿ＯＦＦＳＥＴ回路２３０５と、Ｐ減算回路２３０６と、セレクタ回路２３０７と、を有する。
【０１１６】
図２４は、ＳＥＬ＿ＷＲＡＰ回路の構成の一例を示す図である。図２４に示すＳＥＬ＿ＷＲＡＰ回路２３０３は、ＳＬＳ判定回路２４０１と、ＳＬＳ減算回路２４０２と、Ｎ加算回路２４０３と、セレクタ回路２４０４と、比較回路２４０５と、１加算回路２４０６と、セレクタ回路２４０７と、を有する。ＳＥＬ＿ＷＲＡＰ回路２３０３−１の場合、印加されるＳＬＳ＿ＭＯＤ信号は、ＳＬＳ＿ＭＯＤ回路２３０１の格納する値に等しい。それ以降のＳＥＬ＿ＷＲＡＰ回路２３０３−２〜２３０３−３２の場合、印加されるＳＬＳ＿ＭＯＤ信号は、前段のＳＥＬ＿ＷＲＡＰ回路２３０３の出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号に等しい。
【０１１７】
図２５は、ＡＤＤ＿ＯＦＦＳＥＴ回路の構成の一例を示す図である。図２５に示すＡＤＤ＿ＯＦＦＳＥＴ回路２３０５は、加算回路２５０１と、ＯＦＦＳＥＴレジスタ２５０２と、ＯＦＦＳＥＴレジスタ２５０３と、セレクタ回路２５０４と、セレクタ回路２５０５と、を有する。
【０１１８】
ここで、図２０および図２３から図２５を用いて、ＷＭ制御回路１３１２の動作の一例を説明する。初期状態においては、ＳＬＳ＿ＭＯＤ回路２３０１の格納するＳＬＳ＿ＭＯＤ信号は「０」である。またＯＦＦＳＥＴレジスタ２３０４の格納するＯＦＦＳＥＴ信号は「０」である。
【０１１９】
図２０の例において、ＳＬＳ＞Ｍであることにより図２４に示すセレクタ回路２４０４は、ＯＦＦＳＥＴ信号の値にＮを加算した値を選択する。この値Ｎは、何番目のＳＥＬ＿ＷＲＡＰ回路２３０３であるかを示す値であり、「０」を開始番号として、０番のＳＥＬ＿ＷＲＡＰ回路２３０３−１の場合には「０」である。従って、ＳＥＬ＿ＷＲＡＰ回路２３０３−１の場合、ＯＦＦＳＥＴ信号の値に「０」を加算した「０」が、出力のＷＭ制御信号ＳＥＬの値となる。また「０」であるＳＬＳ＿ＭＯＤ信号に１加算回路２４０６により「１」を加算した値である「１」が、ＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号として出力される。
【０１２０】
つぎのＳＥＬ＿ＷＲＡＰ回路２３０３−２の場合、ＯＦＦＳＥＴ信号の値に「１」を加算した「１」が、出力のＷＭ制御信号ＳＥＬの値となる。またこのＳＥＬ＿ＷＲＡＰ回路２３０３−２の場合、印加されるＳＬＳ＿ＭＯＤ信号は前段からの値「１」のＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号であるので、出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号の値は「２」となる。以下同様にして、ＳＥＬ＿ＷＲＡＰ回路２３０３−ｎの場合、出力するＷＭ制御信号ＳＥＬは「ｎ−１」であり、出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号は「ｎ」となる。ここでのｎは自然数である。これにより、図２０の０番のサイクルに示すようなＷＭ制御信号ＳＥＬ００〜ＳＥＬ３１が生成される。
【０１２１】
セレクタ回路２３０７は、ＳＥＬ＿ＷＲＡＰ回路２３０３−１〜２３０３−３２のそれぞれが出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴを受け取る。セレクタ回路２３０７は、さらに、データ処理幅Ｐから１減算した値、この例では「７」を選択制御信号として受け取る。セレクタ回路２３０７は、０番を開始番号とした場合の７番（即ち８番目）のＳＥＬ＿ＷＲＡＰ回路２３０３−８が出力する値「８」であるＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号を選択して、ＳＬＳ＿ＭＯＤ回路２３０１に供給する。これにより、つぎのサイクルにおいて、ＳＬＳ＿ＭＯＤ回路２３０１に格納されているＳＬＳ＿ＭＯＤ信号は「８」となる。
【０１２２】
図２５に示すＡＤＤ＿ＯＦＦＳＥＴ回路２３０５において、ＳＬＳ＞Ｍであることにより、セレクタ回路２５０５は、データ処理幅ＰにＯＦＦＳＥＴ信号の値を加算した値を選択し、ＯＦＦＳＥＴ＿ＮＥＸＴ信号として出力する。このＯＦＦＳＥＴ＿ＮＥＸＴ信号が、図２３に示すＯＦＦＳＥＴレジスタ２３０４に格納され、つぎのサイクルでのＯＦＦＳＥＴ信号となる。従って、ＯＦＦＳＥＴ信号の値は、１サイクルごとにＰずつ増加していく。ただし、ＯＦＦＳＥＴ信号の値に加算回路２５０１によりＰを加算した値が「３２」となるサイクルにおいては、ＯＦＦＳＥＴレジスタ２５０２に格納された値が１となり、ＰＯＰ＿ＮＥＸＴ信号が「１」となる。
【０１２３】
このＰＯＰ＿ＮＥＸＴ信号が、ＷＭ制御回路１３１２からＰＯＰ信号として出力される。またＯＦＦＳＥＴ信号の値に加算回路２５０１によりＰを加算した値の下位５ビットのみをＯＦＦＳＥＴレジスタ２５０３に格納することにより、ＯＦＦＳＥＴ＿ＮＥＸＴ信号の値は、「０」から「３１」の範囲の値のみをとることになる。即ち、ＯＦＦＳＥＴレジスタ２３０４に格納されるＯＦＦＳＥＴ値は、「０」から「３１」の範囲の値を繰り返すことになる。このようにして、図２０の動作例に示すような、ＯＦＦＳＥＴ信号およびＰＯＰ信号が生成される。なお図２０では、ＯＦＦＳＥＴの値は、６ビット目も含めた値を示してあるため、値「３２」の場合が示されている。
【０１２４】
図２２〜図２５を用いて、ＷＭ制御回路１３１２の動作の別の一例を説明する。初期状態においては、ＳＬＳ＿ＭＯＤ回路２３０１の格納するＳＬＳ＿ＭＯＤ信号は「０」である。またＯＦＦＳＥＴレジスタ２３０４の格納するＯＦＦＳＥＴ信号は「０」である。
【０１２５】
図２２の例において、ＳＬＳ≦Ｍであることにより図２４に示すセレクタ回路２４０４はＳＬＳ＿ＭＯＤ信号を選択するので、ＳＥＬ＿ＷＲＡＰ回路２３０３−１の場合、出力のＷＭ制御信号ＳＥＬは「０」である。また「０」であるＳＬＳ＿ＭＯＤ信号に「１」を加算した値である「１」が、ＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号として出力される。つぎのＳＥＬ＿ＷＲＡＰ回路２３０３−２の場合、印加されるＳＬＳ＿ＭＯＤ信号は前段からの値「１」のＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号であるので、出力のＷＭ制御信号ＳＥＬは「１」であり、且つ、出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号の値は「２」となる。以下同様にして、ＳＥＬ＿ＷＲＡＰ回路２３０３−ｎの場合、出力するＷＭ制御信号ＳＥＬは「ｎ−１」であり、出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号は「ｎ」となる。ここでのｎはＳＬＳより小さい自然数である。
【０１２６】
図２２の例ではストリーム長ＳＬＳが１２であるので、ＳＥＬ＿ＷＲＡＰ回路２３０３−１２の場合、図２４に示す比較回路２４０５の出力が１となる。そして、「０」がセレクタ回路２４０７により選択されて、出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号の値が「０」となる。従って、図２２の０番のサイクルに示すように、ＷＭ制御信号ＳＥＬ００〜ＳＥＬ３１は、「０」から「１１」の間を繰り返す信号となる。
【０１２７】
セレクタ回路２３０７は、ＳＥＬ＿ＷＲＡＰ回路２３０３−１〜２３０３−３２のそれぞれが出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴを受け取る。セレクタ回路２３０７は、さらに、データ処理幅Ｐから１減算した値を選択制御信号として受け取る。この例では、セレクタ回路２３０７は、「７」を選択制御信号として受け取る。セレクタ回路２３０７は、０番を開始番号とした場合の７番（即ち８番目）のＳＥＬ＿ＷＲＡＰ回路２３０３−８が出力する値「８」であるＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号を選択して、ＳＬＳ＿ＭＯＤ回路２３０１に供給する。これにより、つぎのサイクルにおいて、ＳＬＳ＿ＭＯＤ回路２３０１に格納されているＳＬＳ＿ＭＯＤ信号は「８」となる。
【０１２８】
図２５に示すＡＤＤ＿ＯＦＦＳＥＴ回路２３０５において、ＳＬＳ≦Ｍであることにより、セレクタ回路２５０４およびセレクタ回路２５０５は、値「０」を選択して、値「０」のＰＯＰ＿ＮＥＸＴ信号および値「０」のＯＦＦＳＥＴ＿ＮＥＸＴ信号を出力する。これにより、図２２の動作例に示すように、ＯＦＦＳＥＴ信号およびＰＯＰ信号は、両方とも常に「０」となる。
【０１２９】
図２６は、ＳＬＳ≦Ｍの場合の各信号の生成アルゴリズムを示す図である。ＳＬＳ≦Ｍの場合には、図２６に示す生成アルゴリズムにより、ＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号、ＷＭ制御信号ＳＥＬ、およびＰＯＰ信号が生成される。
【０１３０】
図２７は、ＳＬＳ＞Ｍの場合の各信号の生成アルゴリズムを示す図である。ＳＬＳ＞Ｍの場合には、図２７に示す生成アルゴリズムにより、ＰＯＰ信号、ＯＦＦＳＥＴ信号、およびＷＭ制御信号ＳＥＬが生成される。
【０１３１】
図２８は、ＷＭ制御回路の構成の別の一例を示す図である。図２８に示すＷＭ制御回路１３１２は、ＳＬＳ判定回路２８０１と、セレクタ回路２８０２と、ＳＬＳ＿ＭＯＤ回路２８０３と、セレクタ回路２８０４と、１加算回路２８０５と、ＳＬＳ＿ＭＯＤテーブル（ＳＬＳ＿ＭＯＤ＿ＴＢＬ）２８０６と、シフタ回路（ｓｈｉｆｔｅｒ３８４）２８０７と、を有する。ＷＭ制御回路１３１２は、さらに、ＯＦＦＳＥＴレジスタ２３０４と、ＡＤＤ＿ＯＦＦＳＥＴ回路２３０５と、Ｐ減算回路２３０６と、セレクタ回路２３０７と、を有する。図２８において、図２３と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
【０１３２】
図２９は、ＳＬＳ＿ＭＯＤテーブルのデータの一例を示す図である。図２９に示すように、ＳＬＳ＿ＭＯＤテーブル２８０６には、１番から３３番までの３３個の行に対して、６４個の位置データが格納されている。例えば、値が「０」の位置データは、図１９の結合回路１９１３の出力するデータＢＵＦＯＵＴの６４個の単位データのうち、０番（一番左端）の単位データを選択する。同様に、値がｎ（ｎ：０〜６３の整数）の位置データは、図１９の結合回路１９１３の出力するデータＢＵＦＯＵＴの６４個の単位データのうち、ｎ番の単位データを選択する。このように、ＳＬＳ＿ＭＯＤテーブル２８０６は、幅２Ｍのデータから選択する各単位データの選択位置を示す位置データを格納したテーブルである。
【０１３３】
また、図２８に示すシフタ回路２８０７は、ＳＬＳ＿ＭＯＤテーブル２８０６から位置データを受け取り、受け取った位置データをシフトし、シフトした位置データをマルチプレクサ１３１１にＷＭ制御信号ＳＥＬ００〜ＳＥＬ３１として供給する。この構成により、データ選択部１９０１のマルチプレクサ１３１１により、適切な単位データを選択することができる。
【０１３４】
図２８において、ＳＬＳ判定回路２８０１は、ストリーム長ＳＬＳがＭ以下であるか否かを判定する。ＳＬＳ＞Ｍである場合、ＳＬＳ判定回路２８０１の出力は「０」となり、セレクタ回路２８０２は値「３３」を選択して出力する。従って、この場合、ＳＬＳ＿ＭＯＤテーブル２８０６の３３番の行が選択され、図２９の３３番の行に示すように「０」から「６３」の６４個の位置データが出力される。このときセレクタ回路２８０４は、ＯＦＦＳＥＴレジスタ２３０４に格納されるＯＦＦＳＥＴ信号の値を選択し、１加算回路２８０５が、セレクタ回路２８０４により選択された値に「１」を加算し、加算後の値をシフタ回路２８０７に供給する。シフタ回路２８０７は、ＳＬＳ＿ＭＯＤテーブル２８０６から供給された６４個の位置データを、ＯＦＦＳＥＴ信号の値に応じてシフトし、シフト後の６４個の位置データをＷＭ制御信号ＳＥＬとして出力する。これにより、上述したＷＭ制御信号ＳＥＬが生成されることになる。
【０１３５】
ＳＬＳ≦Ｍである場合、ＳＬＳ判定回路２８０１の出力は「１」となり、セレクタ回路２８０２は、ストリーム長ＳＬＳの値を選択して出力する。この結果、例えば、図２２に示すようにストリーム長ＳＬＳが１２である場合、ＳＬＳ＿ＭＯＤテーブル２８０６の１２番の行が選択される。即ち、図２９の１２番の行に示すように「０」から「１１」の値を繰り返す６４個の位置データが、ＳＬＳ＿ＭＯＤテーブル２８０６から出力される。このときセレクタ回路２８０４は、ＳＬＳ＿ＭＯＤ回路２８０３に格納されるＳＬＳ＿ＭＯＤ信号の値を選択し、１加算回路２８０５が、セレクタ回路２８０４により選択された値に「１」を加算し、加算後の値をシフタ回路２８０７に供給する。シフタ回路２８０７は、ＳＬＳ＿ＭＯＤテーブル２８０６から供給された６４個の位置データを、ＳＬＳ＿ＭＯＤ信号の値に応じてシフトし、シフト後の６４個の位置データをＷＭ制御信号ＳＥＬとして出力する。これにより、図１３に示すようなＷＭ制御信号ＳＥＬが生成されることになる。
【０１３６】
図２３のＷＭ制御回路１３１２では、ＳＥＬ＿ＷＲＡＰ回路２３０３−１〜２３０３−３２が３２段に縦続接続されている。従って、ＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号が各段を伝搬していくのに時間かかり、データ供給回路３０１による選択動作を十分に高速に実行できない可能性がある。それに対し図２８に示すＷＭ制御回路１３１２では、シフタ回路２８０７による少数段の遅延が発生するのみであり、データ供給回路３０１による選択動作を十分に高速に実行することができる。
【０１３７】
図３０は、データ処理装置の構成の別の一例を示す図である。図３０において、図３と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
【０１３８】
図３０のデータ処理装置は、複数のデータ供給回路３０１−１〜３０１−ｎと、演算データパス３０２と、データストア回路３０３と、を有する。データ供給回路３０１−１〜３０１−ｎは、データメモリ２１４に格納される複数ｎ個のソースデータ（オペランド）をそれぞれ読み出し、演算データパス３０２に供給する。図４に示す例のように２つのソースデータｓｒｃ０とｓｒｃ１とが演算対象となる場合、データ供給回路３０１−１がソースデータｓｒｃ０を読み出し、データ供給回路３０１−２がソースデータｓｒｃ１を読み出してよい。データ供給回路３０１−１〜３０１−ｎの各々の構成および動作は、前述のデータメモリ２１４の構成および動作と基本的に同一であってよい。図３０のデータ処理装置では、複数ｎ個のソースデータ（オペランド）に対応することが可能となる。
【０１３９】
以上説明したように、データ処理装置１００は、入力行列と該入力行列の複数の要素の並びを入れ替えた変換行列とのうちの演算対象となるいずれかの行列を出力して演算を行う。これにより、行列変換と行列演算とを１命令で行うことができ、データロード数の低減を図ることができる。したがって、行列のデータのロードから行列演算までに要する時間の短縮化を図ることができる。
【０１４０】
また、データ処理装置１００は、第１行列と、第２行列と、のうち、いずれかを出力する選択部と、演算命令によって、第１行列と、第２行列と、のうち、いずれかを選択部に出力させる制御を行う選択制御部と、を有する。これにより、簡単な制御処理によって入力行列を演算対象の行列に変換することができる。
【０１４１】
また、データ処理装置１００は、変換後の行の要素の数および列の要素の数に対応した選択部に出力させる複数の要素の並びを指示する制御信号を記憶するインデックステーブルによって演算対象の行列を指示する。これにより、簡単な処理によって入力行列を演算対象の行列に変換することができる。
【０１４２】
また、データ処理装置１００は、選択部がバッファに格納された所定数の要素を入力可能な所定数の選択回路の各々が、バッファに格納された入力行列に含まれる複数の要素のうちのいずれかを選択して出力する。これにより、入力行列の各要素の数が任意であっても演算対象の行列に変換することができる。
【０１４３】
また、データ処理装置１００は、バッファに格納された要素のうち第１行列の要素の位置情報と、第１行列の要素の入れ替え後の位置を指示する第１制御信号と、に基づき、バッファに格納された要素から入れ替え後の各位置を指示する第２制御信号を生成する。これにより、マルチプレクサの回路規模を縮小することができる。半導体集積回路であるデータ処理装置の面積を小さくすることができると、一枚の半導体ウェーハ上から得られる半導体集積回路の個数を多くすることができるため、半導体集積回路の単価を下げることができる。
【０１４４】
また、第１行列と第２行列とは、複数の行列であってもよい。これにより、複数の行列に対して一括して変換行列を得ることができ、データロードから演算処理までに要する時間の短縮化を図ることができる。
【０１４５】
なお、本実施の形態で説明したデータ処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本プログラムは、磁気ディスク、光ディスク、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）フラッシュメモリなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。
【０１４６】
また、上述したように、本実施の形態で説明したデータ処理装置１００は、スタンダードセルやストラクチャードＡＳＩＣなどのＡＳＩＣやＦＰＧＡなどのＰＬＤによっても実現することができる。具体的には、例えば、上述したデータ処理装置１００の機能をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、データ処理装置１００を製造することができる。
【０１４７】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１４８】
（付記１）対象の演算命令によってメモリから取得した第１行列を受け付けて、受け付けた前記第１行列と、前記第１行列に含まれる複数の要素と同一の要素を含み前記第１行列に含まれる複数の要素のうちの少なくともいずれか２つの要素の並びを入れ替えた第２行列と、のうち、前記演算命令が指示する演算対象の行列を出力する変換部と、
前記変換部によって出力された前記演算対象の行列に対して、前記演算命令が指示する演算を行う演算部と、
を有することを特徴とするデータ処理装置。
【０１４９】
（付記２）前記変換部は、
前記第１行列と、前記第２行列と、のうち、いずれかを出力する選択部と、
前記演算命令によって、前記第１行列と、前記第２行列と、のうち、いずれかを前記選択部に出力させる制御を行う選択制御部と、
を有することを特徴とする付記１に記載のデータ処理装置。
【０１５０】
（付記３）前記選択制御部は、
行の要素の数および列の要素の数に対応する前記第１行列に含まれる特定の並びの複数の要素について前記選択部に出力させる前記第１行列に含まれる複数の要素の並びを指示する制御信号の値を記憶する記憶部から、前記演算命令が指示する前記演算対象の行列についての行の要素の数および列の要素の数に基づいて、前記制御信号の値を読み出して前記選択部に出力し、
前記選択部は、
前記第１行列に含まれる複数の要素を、前記選択制御部から出力された前記制御信号が指示する並びにした複数の要素を含む前記演算対象の行列を出力する、
ことを特徴とする付記２に記載のデータ処理装置。
【０１５１】
（付記４）前記第１行列に含まれる複数の要素の数以上の所定数の要素を格納可能なバッファであって、前記メモリから取得した前記第１行列に含まれる複数の要素を特定の並びで格納するバッファを有し、
前記選択部は、
前記バッファに格納された前記所定数の要素を入力可能な前記所定数の選択回路の各々が、前記バッファに格納された前記第１行列に含まれる複数の要素のうちのいずれかを制御信号に基づき選択して出力し、
前記選択制御部は、
前記バッファに格納された前記第１行列に含まれる複数の要素のうち前記選択回路の各々に選択させる要素を指示する制御信号を出力する、
ことを特徴とする付記２または３に記載のデータ処理装置。
【０１５２】
（付記５）前記選択部は、
前記バッファに格納された前記所定数の要素のうち前記第１行列に含まれる複数の要素が格納された位置データと、前記制御信号（以下、「第１制御信号」と称する。）と、に基づいて、前記バッファに格納された前記所定数の要素のうち前記選択回路の各々に選択させる要素を指示する第２制御信号を生成し、前記選択回路の各々が生成した前記第２制御信号に基づいて前記バッファに格納された前記所定数の要素のうちのいずれかを選択して出力することを特徴とする付記４に記載のデータ処理装置。
【０１５３】
（付記６）前記第１行列は、行および列の要素の数が互いに同じ複数の第１行列であって、
前記第２行列は、行および列の要素の数が互いに同じ複数の第２行列であって、
前記複数の第２行列の各々は、前記複数の第２行列の各々に対応する前記複数の第１行列の各々について前記第１行列に含まれる前記複数の要素のうちの少なくともいずれか２つの要素の並びを入れ替えた行列であることを特徴とする付記１〜５のいずれか一つに記載のデータ処理装置。
【０１５４】
（付記７）前記演算対象の行列に含まれる複数の要素の各々が虚部と実部とを有する場合に、
前記変換部は、
前記演算対象の行列に含まれる複数の要素の各々が有する虚部の符号を入れ替えて、入れ替えた後の前記演算対象の行列を出力する共役部を有することを特徴とする付記１〜６のいずれか一つに記載のデータ処理装置。
【０１５５】
（付記８）前記第２行列は、前記第１行列の転置行列であることを特徴とする付記１〜７のいずれか一つに記載のデータ処理装置。
【０１５６】
（付記９）コンピュータが、
対象の演算命令によってメモリから取得した第１行列を受け付けて、受け付けた前記第１行列と、前記第１行列に含まれる複数の要素と同一の要素を含み前記第１行列に含まれる複数の要素のうちの少なくともいずれか２つの要素の並びを入れ替えた第２行列と、のうち、前記演算命令が指示する演算対象の行列を出力し、
出力した前記演算対象の行列に対して、前記演算命令が指示する演算を行う、
ことを特徴とするデータ処理方法。
【符号の説明】
【０１５７】
１００  データ処理装置
１０１  メモリ
１１１  変換部
１１２  演算部
２００  ベースバンド処理ＬＳＩ
２０１  ＲＦ部
２０２  専用ハードウェア
２０３  ＤＳＰ
２０５  アンテナ
２１１  プロセッサ
２１２  周辺回路
２１３  命令メモリ
２１４  データメモリ
２２１  ＣＰＵ
３０１  データ供給回路
３０２  演算データパス
３０３  データストア回路
３０４  命令デコーダ
４０１  ラップアラウンド処理回路
４０２  行列変換回路
５０１，８０２，１３１１  マルチプレクサ
６０１  バッファ
６１１  選択部
６１２  選択制御部
６２１  記憶部
８０１  入力バッファ
８０３  行列変換制御回路
８０４  共役回路
８０５  出力バッファ
８１１  インデックステーブル
８１２  共役制御回路
１３０１  入力ＦＩＦＯ
１３１２  ＷＭ制御回路
１５０１  インデックス選択マルチプレクサ
１５０２  データ選択マルチプレクサ
ｓｒｃ０，ｓｒｃ１  ソースデータ
ｓｅｌ０〜ｓｅｌ１５  データ選択制御信号，ＴＦ制御信号
ＳＥＬ００〜ＳＥＬ３１  ＷＭ制御信号
【図１】
2016218528.tif 000003
【図２】
2016218528.tif 000004
【図３】
2016218528.tif 000005
【図４】
2016218528.tif 000006
【図５】
2016218528.tif 000007
【図６】
2016218528.tif 000008
【図７】
2016218528.tif 000009
【図８】
2016218528.tif 000010
【図９】
2016218528.tif 000011
【図１０】
2016218528.tif 000012
【図１１】
2016218528.tif 000013
【図１２】
2016218528.tif 000014
【図１３】
2016218528.tif 000015
【図１４】
2016218528.tif 000016
【図１５】
2016218528.tif 000017
【図１６】
2016218528.tif 000018
【図１７】
2016218528.tif 000019
【図１８】
2016218528.tif 000020
【図１９】
2016218528.tif 000021
【図２０】
2016218528.tif 000022
【図２１】
2016218528.tif 000023
【図２２】
2016218528.tif 000024
【図２３】
2016218528.tif 000025
【図２４】
2016218528.tif 000026
【図２５】
2016218528.tif 000027
【図２６】
2016218528.tif 000028
【図２７】
2016218528.tif 000029
【図２８】
2016218528.tif 000030
【図２９】
2016218528.tif 000031
【図３０】
2016218528.tif 000032