(57)【要約】【課題】回路規模の増大化を抑制するとともに演算精度の向上を図ること。【解決手段】演算部３０１は、ストリームデータＤ間の行列演算を行う。決定部３０２は、演算部３０１の行列演算により得られる行列ごとに、行列に含まれる各要素の値に基づいて、各要素を浮動小数点で表す場合の行列単位の指数値を決定する。変換部３０３は、行列に含まれる各要素の値を、決定部３０２によって決定された行列単位の指数値に対する各要素の仮数値に変換する。出力部３０４は、変換部３０３によって各要素の値が変換された変換後の行列と、決定部３０２によって決定された行列単位の指数値とを対応付けて出力する。【選択図】図３
2014179065.tif 000002
【特許請求の範囲】
【請求項１】
単位データが行列形式のストリームデータ間の行列演算を行う演算部と、
前記演算部の行列演算により得られる行列ごとに、前記行列に含まれる各要素の値に基づいて、前記各要素を浮動小数点で表す場合の行列単位の指数値を決定する決定部と、
前記各要素の値を、前記決定部によって決定された前記行列単位の指数値に対する前記各要素の仮数値に変換する変換部と、
前記変換部によって前記各要素の値が変換された変換後の行列と前記行列単位の指数値とを対応付けて出力する出力部と、
を有することを特徴とするデータ処理装置。
【請求項２】
前記決定部は、
前記演算部の行列演算により得られる行列ごとに、前記行列に含まれる複数の要素のうちの絶対値が最大の要素を浮動小数点で表す場合の指数値を前記行列単位の指数値に決定することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記ストリームデータは、前記変換部によって前記各要素の値が変換された変換後の行列の配列と、前記決定部によって決定された前記行列単位の指数値の配列とを含み、
前記演算部は、
前記ストリームデータ間の行列加算演算を行う場合、前記ストリームデータ間の対応する第１および第２の指数値の差分に基づいて、前記ストリームデータ間の対応する第１および第２の行列のいずれか一方の行列に含まれる各要素の値をシフトして、前記ストリームデータ間の行列加算演算を行うことを特徴とする請求項１または２に記載のデータ処理装置。
【請求項４】
前記決定部は、
前記演算部の行列演算により得られる一連の要素の先頭から、命令に対応する単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値に基づいて、当該各要素を浮動小数点で表す場合の要素集合単位の指数値を決定し、
前記変換部は、
前記要素集合ごとに、前記要素集合に含まれる各要素の値を、前記決定部によって決定された要素集合単位の指数値に対する前記各要素の仮数値に変換し、
前記出力部は、
前記変換部によって変換された変換後の前記要素集合に含まれる各要素の値と、前記決定部によって決定された要素集合単位の指数値とを対応付けて出力することを特徴とする請求項１〜３のいずれか一つに記載のデータ処理装置。
【請求項５】
前記決定部は、
前記一連の要素に含まれる要素の総数を上限として取り得る要素数それぞれについて、前記一連の要素の先頭から要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値に基づいて、当該各要素を浮動小数点で表す場合の要素集合単位の指数値を決定する決定回路と、
前記一連の要素に含まれる要素それぞれについて、前記決定回路によって前記要素数それぞれについて決定された要素集合単位の指数値の中から、命令に対応する単位データ長となる要素数の要素集合単位の指数値を選択する選択回路と、を含み、
前記変換部は、
前記一連の要素に含まれる要素それぞれについて、当該要素の値を、前記選択回路によって選択された要素集合単位の指数値に対する前記要素の仮数値に変換するシフト回路を含むことを特徴とする請求項４に記載のデータ処理装置。
【請求項６】
前記決定部は、
前記一連の要素に含まれる要素の総数を上限として取り得る２のべき乗の要素数それぞれについて、前記一連の要素の先頭から要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値に基づいて、当該各要素を浮動小数点で表す場合の要素集合単位の指数値を決定する決定回路と、
前記一連の要素に含まれる要素それぞれについて、前記決定回路によって前記要素数それぞれについて決定された要素集合単位の指数値の中から、命令に対応する単位データ長となる要素数の要素集合単位の指数値を選択する選択回路と、を含み、
前記変換部は、
前記一連の要素に含まれる要素それぞれについて、当該要素の値を、前記選択回路によって選択された要素集合単位の指数値に対する前記要素の仮数値に変換することを特徴とする請求項４に記載のデータ処理装置。
【請求項７】
前記変換部は、
選択可能な第１のモードおよび第２のモードのうち、前記第１のモードが選択された場合は、前記単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値を、前記決定部によって決定された要素集合単位の指数値に対する前記各要素の仮数値に変換し、前記第２のモードが選択された場合は、前記一連の要素に含まれる各要素の値を、入力される一連の要素単位の指数値に対する前記各要素の仮数値に変換するシフト回路を含むことを特徴とする請求項４〜６のいずれか一つに記載のデータ処理装置。
【請求項８】
前記決定部は、
前記一連の要素に含まれる要素それぞれが浮動小数点で表される場合、前記一連の要素の先頭から、前記単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の指数値のうちの最大の指数値を要素集合単位の指数値に決定し、
前記変換部は、
前記要素集合ごとに、前記要素集合に含まれる各要素の仮数値を、前記最大の指数値から前記各要素の指数値を減算した減算後の指数値に対する前記各要素の仮数値に変換することを特徴とする請求項４〜７のいずれか一つに記載のデータ処理装置。
【請求項９】
コンピュータが、
単位データが行列形式のストリームデータ間の行列演算を行い、
前記ストリームデータ間の行列演算により得られる行列ごとに、前記行列に含まれる各要素の値に基づいて、前記各要素を浮動小数点で表す場合の行列単位の指数値を決定し、
前記各要素の値を前記行列単位の指数値に対する前記各要素の仮数値に変換し、
前記各要素の値が変換された変換後の行列と前記行列単位の指数値とを対応付けて出力する、
処理を実行することを特徴とするデータ処理方法。
【請求項１０】
コンピュータに、
単位データが行列形式のストリームデータ間の行列演算を行い、
前記ストリームデータ間の行列演算により得られる行列ごとに、前記行列に含まれる各要素の値に基づいて、前記各要素を浮動小数点で表す場合の行列単位の指数値を決定し、
前記各要素の値を前記行列単位の指数値に対する前記各要素の仮数値に変換し、
前記各要素の値が変換された変換後の行列と前記行列単位の指数値とを対応付けて出力する、
処理を実行させることを特徴とするデータ処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置、データ処理方法およびデータ処理プログラムに関する。
【背景技術】
【０００２】
無線通信信号処理などにおいて、大量の行列演算処理が必要となる場合がある。例えば、無線通信信号処理の方式であるＬＴＥ（Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）−Ａｄｖａｎｃｅｄにおいては、行列演算が全体の演算量の多くを占めている。また、大量の行列演算処理が必要となるような配列型データを扱うには、配列処理アーキテクチャが適している。
【０００３】
従来、配列型データを扱うプロセッサとしては、例えば、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）方式やベクトル方式のプロセッサがある。これらプロセッサの命令セットが扱う配列型データはスカラ値の配列であり、単位データはスカラ値である。また、組み込みプロセッサにおいては、命令セットで整数値のみを扱うことで回路規模を小さくすることが行われている。
【０００４】
関連する先行技術としては、例えば、演算装置として浮動小数点演算器を使用しないで整数演算器のみを使用して浮動小数点のシフト演算を行う技術がある。また、例えば、複数の浮動小数点数演算（ＦＰ）パイプラインにより、スケジューラがディスパッチしたベクトル入力のスカラ成分に対して演算を行うことで得られるＦＰ結果を生成して出力バッファに書き込む技術がある。また、最大指数検出装置で各浮動小数点レジスタに保持される浮動小数点数の最大指数を検出し、各仮数シフト装置で最大指数と各々の指数との差分で仮数をシフトし、各符号化装置で符号化を行い、相対的大きさを保持する整数に変換する技術がある。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−３１８４８号公報
【特許文献２】特表２００９−５０５３０１号公報
【特許文献３】特開平０８−１０１９１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来技術では、命令セットで整数値のみを扱う場合、プロセッサの回路面積を抑えることができる一方で、演算精度が低下してしまう場合があるという問題がある。例えば、命令セットで整数値のみを扱う場合、乗算などを行うと演算結果を表現するために必要なビット数が一度に増加してしまい、アプリケーションによってはダイナミックレンジが不足してしまう場合がある。
【０００７】
１つの側面では、本発明は、回路規模の増大化を抑制するとともに演算精度の向上を図るデータ処理装置、データ処理方法およびデータ処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明の一側面によれば、単位データが行列形式のストリームデータ間の行列演算を行い、前記ストリームデータ間の行列演算により得られる行列ごとに、前記行列に含まれる各要素の値に基づいて、前記各要素を浮動小数点で表す場合の行列単位の指数値を決定し、前記各要素の値を前記行列単位の指数値に対する前記各要素の仮数値に変換し、前記各要素の値が変換された変換後の行列と前記行列単位の指数値とを対応付けて出力するデータ処理装置、データ処理方法およびデータ処理プログラムが提案される。
【発明の効果】
【０００９】
本発明の一態様によれば、回路規模の増大化を抑制するとともに演算精度の向上を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、実施の形態１にかかるデータ処理方法の一実施例を示す説明図である。
【図２】図２は、コンピュータシステム２００のハードウェア構成例を示すブロック図である。
【図３】図３は、実施の形態１にかかるデータ処理装置１００の機能的構成例を示す説明図である。
【図４】図４は、実施の形態１にかかるデータ処理装置１００の決定部３０２および変換部３０３の具体的な処理内容の一例を示す説明図である。
【図５】図５は、データ処理装置１００の回路構成例を示す説明図である。
【図６】図６は、データ処理装置１００のハードウェア構成例を示す説明図である。
【図７】図７は、ＤＭＡ６０４の内部構成例を示す説明図である。
【図８】図８は、データ処理装置１００のデータ処理手順の一例を示すフローチャートである。
【図９】図９は、２２行列乗算の具体的処理手順の一例を示すフローチャートである。
【図１０】図１０は、２２行列加算の具体的処理手順の一例を示すフローチャートである。
【図１１】図１１は、２２逆行列演算の具体的処理手順の一例を示すフローチャートである。
【図１２】図１２は、データ処理装置１００の適用例を示す説明図である。
【図１３】図１３は、実施の形態２にかかるデータ処理装置１００の決定部３０２および変換部３０３の具体的な処理内容を示す説明図である。
【図１４】図１４は、実施例１にかかるシフト数生成回路１３０１の回路構成例を示す説明図である。
【図１５】図１５は、実施例２にかかるシフト数生成回路１３０１の回路構成例を示す説明図である。
【図１６Ａ】図１６Ａは、シフト数生成回路１３０１の回路構成の比較例を示す説明図（その１）である。
【図１６Ｂ】図１６Ｂは、シフト数生成回路１３０１の回路構成の比較例を示す説明図（その２）である。
【図１７】図１７は、演算部３０１の回路構成例を示す説明図である。
【図１８】図１８は、データパスの構成例を示す説明図（その１）である。
【図１９】図１９は、データパスの構成例を示す説明図（その２）である。
【図２０】図２０は、実施例３にかかるデータ処理装置１００の回路構成例を示す説明図である。
【図２１】図２１は、実施例４にかかるシフト数生成回路１３０１のＵＬｎ単位データ内シフト数生成回路の動作例を示す説明図である。
【発明を実施するための形態】
【００１１】
以下に図面を参照して、本発明にかかるデータ処理装置、データ処理方法およびデータ処理プログラムの実施の形態を詳細に説明する。
【００１２】
（実施の形態１）
（データ処理方法の一実施例）
図１は、実施の形態１にかかるデータ処理方法の一実施例を示す説明図である。図１において、データ処理装置１００は、ストリーム型処理を行うコンピュータである。ストリーム型処理とは、メモリから一連のデータ（配列型データ）を順次読み出して演算を行い、一連の演算結果をメモリに順次書き込む処理である。
【００１３】
また、データ処理装置１００は、命令セットとして、単位データを扱う命令群を有する。単位データは、例えば、行列形式（または、ベクトル形式）のデータである。命令は、例えば、乗算命令、加算命令、逆行列（除算）命令などである。
【００１４】
ここで、無線通信信号処理などにおいては、大量の行列演算処理が必要となる場合がある。このような場合に、命令セットで整数値のみを扱うと、プロセッサの回路面積を抑えることができる一方で演算精度の低下を招いてしまう。このため、配列型データを浮動小数点で表現することが行われる。
【００１５】
一例として、２×２行列の１０００個のデータの配列Ｍを浮動小数点で表現する場合を想定する。なお、図１中、「ｆ」は、行列に含まれる各要素を浮動小数点で表す場合の仮数部の値を表している。また、図１中、「ｅ」は、行列に含まれる各要素を浮動小数点で表す場合の指数部の値を表している。また、以下の説明では、仮数部の値を「仮数値」と表記し、指数部の値を「指数値」と表記する場合がある。
【００１６】
この場合、図１中（ａ）に示すように、配列Ｍに含まれる各数値を浮動小数点として処理する場合は、高い演算精度を確保できる一方で、プロセッサが命令セットで浮動小数点をサポートしている必要があり回路面積が大きくなる。また、図１中（ｂ）に示すように、配列Ｍ全体を整数シフト命令で一度にシフトさせてから演算を行う場合、配列Ｍ全体で絶対値が最大の数値によりシフト量が決定されるため絶対値が小さい数値の演算精度が低下する場合がある。
【００１７】
そこで、本実施の形態では、データ処理装置１００は、配列Ｍに含まれる行列ごとに行列単位の指数部を割り当てることにより、配列Ｍの行列演算処理を行う。これにより、配列Ｍに含まれる各数値を浮動小数点として処理する場合に比べて回路規模の増大化を抑制するとともに、配列Ｍ全体を整数シフト命令で一度にシフトさせてから演算を行う場合よりも高い演算精度を実現する。
【００１８】
（コンピュータシステム２００のハードウェア構成例）
つぎに、データ処理装置１００が適用されるコンピュータシステム２００のハードウェア構成例について説明する。コンピュータシステム２００は、例えば、スマートフォン、携帯電話機、タブレット型ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）、ＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙ−ｐｈｏｎｅ  Ｓｙｓｔｅｍ）などである。
【００１９】
図２は、コンピュータシステム２００のハードウェア構成例を示すブロック図である。図２において、コンピュータシステム２００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、メモリ２０２と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０３と、を有する。また、各構成部はバス２１０によってそれぞれ接続されている。
【００２０】
ここで、ＣＰＵ２０１は、コンピュータシステム２００の全体の制御を司る。メモリ２０２は、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）およびフラッシュＲＯＭなどを有している。より具体的には、例えば、フラッシュＲＯＭがＯＳやファームウェアなどのプログラムを記憶し、ＲＯＭがアプリケーションプログラムを記憶し、ＲＡＭがＣＰＵ２０１のワークエリアとして使用される。メモリ２０２に記憶されているプログラムは、ＣＰＵ２０１にロードされることで、コーディングされている処理をＣＰＵ２０１に実行させることになる。
【００２１】
Ｉ／Ｆ２０３は、他の装置からのデータの入出力を制御する。具体的には、例えば、Ｉ／Ｆ２０３は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワークに接続され、このネットワークを介して他の装置に接続される。そして、Ｉ／Ｆ２０３は、ネットワークと内部のインターフェースを司り、他の装置からのデータの入出力を制御する。なお、コンピュータシステム２００は、上述した構成部のほかに、例えば、磁気ディスクドライブ、磁気ディスク、ディスプレイ、キーボード、マウスなどを有することにしてもよい。
【００２２】
（データ処理装置１００の機能的構成例）
つぎに、実施の形態１にかかるデータ処理装置１００の機能的構成例について説明する。図３は、実施の形態１にかかるデータ処理装置１００の機能的構成例を示す説明図である。図３において、データ処理装置１００は、演算部３０１と、決定部３０２と、変換部３０３と、出力部３０４と、を含む構成である。具体的には、例えば、各機能部は、論理積回路であるＡＮＤ、否定論理回路であるＩＮＶＥＲＴＥＲ、論理和回路であるＯＲ、論理和否定回路であるＮＯＲや、ラッチ回路であるＦＦ（Ｆｌｉｐ  Ｆｌｏｐ）などの素子によって形成されてもよい。また、各機能部は、例えば、Ｖｅｒｉｌｏｇ−ＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）などの記述によって機能定義し、その記述を論理合成してＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）によって実現してもよい。また、各機能部は、例えば、図２に示したメモリ２０２に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、Ｉ／Ｆ２０３により、その機能を実現することにしてもよい。
【００２３】
演算部３０１は、ストリームデータＤ間の行列演算を行う。ここで、ストリームデータＤは、単位データが行列形式の配列型データである。行列演算は、例えば、行列乗算、行列加算、逆行列（行列除算）などである。ストリームデータＤに含まれる行列の各要素の値は、例えば、整数値である。
【００２４】
以下の説明では、演算対象となる２つのストリームデータＤを「ソース（０）」および「ソース（１）」と表記する場合がある。この場合、演算部３０１は、ソース（０）に含まれる行列とソース（１）に含まれる行列との行列演算を各ソースの先頭の行列から末尾の行列まで順に行う。ただし、演算対象となるストリームデータＤは３つ以上であってもよい。
【００２５】
決定部３０２は、演算部３０１の行列演算により得られる行列ごとに、行列に含まれる各要素の値に基づいて、各要素を浮動小数点で表す場合の行列単位の指数値を決定する。指数値は、各要素を浮動小数点で表す場合の指数部の値である。具体的には、例えば、決定部３０２は、演算部３０１の行列演算により得られる行列ごとに、行列に含まれる複数の要素のうちの絶対値が最大の要素を浮動小数点で表す場合の指数値を行列単位の指数値に決定することにしてもよい。
【００２６】
より具体的には、例えば、まず、決定部３０２は、行列に含まれる複数の要素のうち絶対値が最大となる要素を特定する。つぎに、決定部３０２は、絶対値が最大となる要素の値を正規化して仮数値と指数値とを算出する。仮数値は、要素を浮動小数点で表す場合の仮数部の値である。そして、決定部３０２は、絶対値が最大となる要素の指数値を行列単位の指数値に決定する。すなわち、決定部３０２は、行列に含まれる各要素を浮動小数点で表す場合の指数値を行列単位で統一する。なお、決定部３０２の具体的な処理内容については、図４を用いて後述する。
【００２７】
変換部３０３は、行列に含まれる各要素の値を、決定部３０２によって決定された行列単位の指数値に対する各要素の仮数値に変換する。具体的には、例えば、変換部３０３は、行列に含まれる各要素の値を、行列単位の指数値でシフトした値（仮数値）に変換する。なお、変換部３０３の具体的な処理内容については、図４を用いて後述する。
【００２８】
出力部３０４は、変換部３０３によって各要素の値が変換された変換後の行列と、決定部３０２によって決定された行列単位の指数値とを対応付けて出力する。具体的には、例えば、出力部３０４は、演算部３０１の行列演算により得られる行列ごとに、行列に含まれる各要素の値が変換された変換後の行列と行列単位の指数値とを対応付けてメモリ（例えば、後述の図６に示すデータメモリ６０６）に順次書き込む。
【００２９】
これにより、変換部３０３によって行列に含まれる各要素の値が変換された変換後の行列の配列（以下、「仮数部ストリーム」と表記する場合がある。）と、決定部３０２によって決定された行列単位の指数値の配列（以下、「指数部ストリーム」と表記する場合がある。）とが出力される。
【００３０】
また、演算部３０１は、出力部３０４によって出力された仮数部ストリームと指数部ストリームとを含むストリームデータＤの行列演算を行うことにしてもよい。具体的には、例えば、演算部３０１は、ストリームデータＤ間の行列乗算演算を行う場合、仮数部ストリーム同士を行列乗算し、指数部ストリーム同士をベクトル加算する。
【００３１】
また、演算部３０１は、ストリームデータＤ間の行列加算演算を行う場合、ストリームデータＤ間の対応する指数値の差分に基づいて、ストリームデータＤ間の対応する行列のいずれか一方の行列に含まれる各要素の値をシフトして、ストリームデータＤ間の行列加算演算を行う。これにより、演算対象となる行列同士の指数値を合わせることができる。なお、仮数部ストリームと指数部ストリームとを含むストリームデータＤの行列演算を行う際の演算部３０１の具体的な処理内容については後述する。
【００３２】
また、変換部３０３は、行列に含まれる各要素の値を、ストリームデータＤ単位の指数値に対する各要素の仮数値に変換することにしてもよい。ストリームデータＤ単位の指数値は、例えば、命令の即値ソースオペランドとして任意に設定可能である。
【００３３】
具体的には、例えば、変換部３０３は、行列に含まれる各要素の値を、ストリームデータＤ単位の指数値でシフトした値に変換する。この場合、出力部３０４は、変換部３０３によって行列に含まれる各要素の値が変換された変換後の行列と、ストリームデータＤ単位の指数値とを対応付けて出力することにしてもよい。なお、以下の説明では、ストリームデータＤ単位の指数値を「シフト数Ｓ」と表記する場合がある。
【００３４】
（決定部３０２および変換部３０３の具体的な処理内容）
つぎに、実施の形態１にかかるデータ処理装置１００の決定部３０２および変換部３０３の具体的な処理内容について説明する。図４は、実施の形態１にかかるデータ処理装置１００の決定部３０２および変換部３０３の具体的な処理内容の一例を示す説明図である。図４において、ソース（０）は、単位データが行列形式の配列型データである。ａ［０］〜ａ［Ｌ］は、ソース（０）に含まれる行列の各要素の値である。例えば、２×２の行列の場合、ａ［０］が１行１列の値となり、ａ［１］が１行２列の値となり、ａ［２］が２行１列の値となり、ａ［３］が２行２列の値となる。
【００３５】
また、ソース（１）は、単位データが行列形式の配列型データである。ｂ［０］〜ｂ［Ｍ］は、ソース（１）に含まれる行列の各要素の値である。ここでは、ａ［０］〜ａ［Ｌ］およびｂ［０］〜ｂ［Ｍ］の各々の値は、ｗｂｉｔの整数値である（例えば、ｗ＝１６）。
【００３６】
また、演算結果４００は、ソース（０）に含まれる行列とソース（１）に含まれる行列との行列演算結果を表す行列である。ｃ［０］〜ｃ［Ｎ］は、演算結果４００に含まれる各要素の値である。ｃ［０］〜ｃ［Ｎ］の各々の値は、（ｗ＋α）ｂｉｔの整数値である（例えば、α＝１７，１８）。Ｌ、Ｍ、Ｎの違いによる要素同士の演算の対応関係は、命令の種類により規定される。例えば、行列乗算命令の場合、ソース（０）が２ｘ２行列、ソース（１）が２ｘ１行列であれば、Ｌ、Ｍ、Ｎはそれぞれ３、１、１であり、ｃ［１］＝ａ［２］×ｂ［０］＋ａ［３］×ｂ［１］となるなどである。
【００３７】
この場合、決定部３０２は、演算結果４００に含まれる複数の要素のうち絶対値が最大となる要素を特定する。つぎに、決定部３０２は、絶対値が最大となる要素の値を正規化して仮数値と指数値とを算出する。そして、決定部３０２は、絶対値が最大となる要素の指数値を行列単位の指数値に決定する。以下の説明では、行列単位の指数値を「シフト数ｓ」と表記する場合がある。
【００３８】
つぎに、変換部３０３は、演算結果４００に含まれる各要素の値を、決定部３０２によって決定されたシフト数ｓでシフト演算して、各要素の仮数値ｃ’［０］〜ｃ’［Ｎ］を算出する。ここでは、ｃ’［０］〜ｃ’［Ｎ］の各々の値は、ｗｂｉｔの整数値である。そして、変換部３０３は、演算結果４００に含まれる各要素の値を、算出した各要素の仮数値ｃ’［０］〜ｃ’［Ｎ］に変換する。
【００３９】
以下の説明では、行列に含まれる各要素を浮動小数点で表現する場合の行列単位の指数値を決定して、各要素の値を、行列単位の指数値に対する仮数値に変換する処理を「データ単位ブロック正規化処理」と表記する場合がある。
【００４０】
そして、出力部３０４は、各要素の仮数値ｃ’［０］〜ｃ’［Ｎ］を含む変換後の演算結果４００とシフト数ｓとを対応付けて出力する。このように、ソース（０）に含まれる行列とソース（１）に含まれる行列との演算結果である行列ごとのデータ単位ブロック正規化処理を行うことで、仮数部ストリーム４１０と指数部ストリーム４２０とを出力することができる。
【００４１】
（データ処理装置１００の回路構成例）
図５は、データ処理装置１００の回路構成例を示す説明図である。図５において、データ処理装置１００は、演算器群５０１と、ストリーム単位ブロックシフト部５０２と、データ単位ブロック正規化部５０３と、を有する。演算器群５０１は、ソース（０）とソース（１）との行列演算を行う。ストリームデータＺは、ソース（０）とソース（１）との間の行列演算結果の配列である。演算器群５０１は、例えば、図３に示した演算部３０１に相当する。
【００４２】
ここで、データ処理装置１００は、ＤＣＬＳＳモードオンと、ＤＣＬＳＳモードオフの２つのモードを有する。ＤＣＬＳＳモードオンは、整数ストリームを入力とし、仮数部ストリームと指数部ストリームとを出力するモードである。また、ＤＣＬＳＳモードオフは、整数ストリームを入力とし、整数ストリームを出力するモードである。
【００４３】
ユーザは、ＤＣＬＳＳモードオンまたはＤＣＬＳＳモードオフのいずれかのモードを任意に選択可能である。具体的には、例えば、ユーザは、ストリームデータＤ間の行列乗算や行列除算を行う場合は、演算結果を表現するために必要なビット数が一度に増加する可能性が高いためにＤＣＬＳＳモードオンを選択する。また、ユーザは、ストリームデータＤ間の行列加算を行う場合は、演算結果を表現するために必要なビット数が一度に増加する可能性が低いためにＤＣＬＳＳモードオフを選択する。
【００４４】
具体的には、例えば、ＤＣＬＳＳモードオフが選択された場合、ストリーム単位ブロックシフト部５０２は、ストリームデータＺに含まれる行列Ｚ［２２］ごとに、行列Ｚ［２２］に含まれる各要素の値をシフト数Ｓでシフト演算する。なお、［２２］は２行２列を表している。そして、ストリーム単位ブロックシフト部５０２は、行列Ｚ［２２］に含まれる各要素の値を１６ｂｉｔ整数値に変換する。ここでは、１６ｂｉｔ整数値に変換された変換後の行列Ｚ［２２］を行列Ｆ［２２］と表記する。ストリーム単位ブロックシフト部５０２は、例えば、図３に示した変換部３０３に相当する。
【００４５】
以下の説明では、行列に含まれる各要素の値をシフト数Ｓでシフトして、行列に含まれる各要素の値を１６ｂｉｔ整数値に変換する処理を「ストリーム単位ブロックシフト処理」と表記する場合がある。
【００４６】
また、ＤＣＬＳＳモードオンが選択された場合、データ単位ブロック正規化部５０３は、ストリームデータＺに含まれる行列Ｚ［２２］ごとにデータ単位ブロック正規化処理を行う。データ単位ブロック正規化部５０３は、例えば、図３に示した決定部３０２および変換部３０３に相当する。
【００４７】
ここで、行列Ｚ［２２］に含まれる各要素を「要素Ｚ0〜Ｚ3」とし、各要素Ｚ0〜Ｚ3の仮数値を「仮数値ｆ0〜ｆ3」とし、各要素Ｚ0〜Ｚ3の指数値を「指数値ｅ0〜ｅ3」とすると、行列Ｚ［２２］は、例えば、下記式（１）で表現される。
【００４８】
【数１】
2014179065.tif 000003
【００４９】
また、行列Ｚ［２２］に含まれる要素Ｚ0〜Ｚ3のうち絶対値が最大となる要素を「要素Ｚ1」とすると、行列Ｚ［２２］に含まれる全要素Ｚ0〜Ｚ3の指数部を「指数値ｅ1」で統一すると、行列Ｚ［２２］は下記式（２）のようになる。
【００５０】
【数２】
2014179065.tif 000004
【００５１】
また、行列Ｚ’［２２］に含まれる各要素Ｚ’0、Ｚ1、Ｚ’2、Ｚ’3の値を、指数値ｅ1に対する仮数値に変換した変換後の行列Ｆ［２２］は、下記式（３）のようになる。また、行列Ｆ［２２］に対応する行列単位の指数値Ｅは下記式（４）のようになる。
【００５２】
【数３】
2014179065.tif 000005
【００５３】
Ｅ＝ｅ1      ・・・（４）
【００５４】
一例として、行列Ｚ［２２］に含まれる要素Ｚ0〜Ｚ3の値を、以下のような３２ｂｉｔの整数値とする。
【００５５】
Ｚ0＝０ｘ００１３４ｃｆｆ
Ｚ1＝０ｘ１２ａ８４ｃｆｆ
Ｚ2＝０ｘ３９ｃ３４ｃｆｆ
Ｚ3＝０ｘ０ｂ０５４ｃｆｆ
【００５６】
この場合、要素Ｚ0〜Ｚ3のうち要素Ｚ2の絶対値が最大となるため、行列Ｚ’［２２］に含まれる要素Ｚ’0〜Ｚ’3の仮数値ｆおよび指数値ｅは以下のようになる。
【００５７】
Ｚ’0：ｆ＝０ｘ００２６、ｅ＝１５
Ｚ’1：ｆ＝０ｘ２５５０、ｅ＝１５
Ｚ’2：ｆ＝０ｘ７３８６、ｅ＝１５
Ｚ’3：ｆ＝０ｘ１６０ａ、ｅ＝１５
【００５８】
（演算部３０１の具体的な処理内容）
つぎに、仮数部ストリームと指数部ストリームとを含むストリームデータＤの行列演算を行う際の演算部３０１の具体的な処理内容について説明する。
【００５９】
以下の説明では、ソース（０）の仮数部ストリームを「仮数部ストリーム（０）」と表記し、ソース（０）の指数部ストリームを「指数部ストリーム（０）」と表記する場合がある。また、ソース（１）の仮数部ストリームを「仮数部ストリーム（１）」と表記し、ソース（１）の指数部ストリームを「指数部ストリーム（１）」と表記する場合がある。
【００６０】
まず、ソース（０）とソース（１）との間で行列単位の指数値割り当てを行う２２行列乗算の具体的な処理内容について説明する。この場合、演算部３０１は、下記式（５）を用いて、仮数部ストリーム（０）と仮数部ストリーム（１）との行列積を行う。ただし、Ａ＿ｆ［ｉ］は仮数部ストリーム（０）に含まれるｉ番目のデータ（行列）であり、Ｂ＿ｆ［ｉ］は仮数部ストリーム（１）に含まれるｉ番目のデータ（行列）である（ｉ＝０，１，２，…，ＳＬ−１）。ＳＬは、ソース（０）およびソース（１）のストリーム長である。また、（Ｚ＿ｆ［ｉ］，ｔｍｐ＿ｅ０［ｉ］）はｉ番目の演算結果であり、Ｚ＿ｆ［ｉ］は仮数部の演算結果（２２行列）であり、ｔｍｐ＿ｅ０［ｉ］は指数部の演算結果（スカラ値）である。
【００６１】
（Ｚ＿ｆ［ｉ］，ｔｍｐ＿ｅ０［ｉ］）＝Ａ＿ｆ［ｉ］＊Ｂ＿ｆ［ｉ］…（５）
【００６２】
より具体的には、例えば、演算部３０１は、「ｉ」を「ｉ＝０」で初期化して、上記式（５）を用いて、仮数部ストリーム間の行列積を行う。つぎに、演算部３０１は、「ｉ」をインクリメントして、「ｉ」がストリーム長ＳＬ未満か否かを判断する。ここで、「ｉ」がストリーム長ＳＬ未満の場合、演算部３０１は、上記式（５）を用いて、仮数部ストリーム間の行列積を行う。一方、演算部３０１は、「ｉ」がストリーム長ＳＬ以上の場合、仮数部ストリーム間の行列積を終了する。
【００６３】
また、演算部３０１は、下記式（６）を用いて、指数部ストリーム（０）と指数部ストリーム（１）とのベクトル加算を行う。ただし、Ａ＿ｅ［ｉ］は指数部ストリーム（０）に含まれるｉ番目のデータであり、Ｂ＿ｅ［ｉ］は指数部ストリーム（１）に含まれるｉ番目のデータである。また、ｔｍｐ＿ｅ１［ｉ］はｉ番目の演算結果である。
【００６４】
ｔｍｐ＿ｅ１［ｉ］＝Ａ＿ｅ［ｉ］＋Ｂ＿ｅ［ｉ］…（６）
【００６５】
より具体的には、例えば、演算部３０１は、「ｉ」を「ｉ＝０」で初期化して、上記式（６）を用いて、指数部ストリーム間のベクトル加算を行う。つぎに、演算部３０１は、「ｉ」をインクリメントして、「ｉ」がストリーム長ＳＬ未満か否かを判断する。ここで、「ｉ」がストリーム長ＳＬ未満の場合、演算部３０１は、上記式（６）を用いて、指数部ストリーム間のベクトル加算を行う。一方、演算部３０１は、「ｉ」がストリーム長ＳＬ以上の場合、演算部３０１は、指数部ストリーム間のベクトル加算を終了する。
【００６６】
つぎに、演算部３０１は、下記式（７）を用いて、ソース（０）とソース（１）との２２行列乗算の指数部のｉ番目の演算結果を算出する。
【００６７】
Ｚ＿ｅ［ｉ］＝ｔｍｐ＿ｅ０［ｉ］＋ｔｍｐ＿ｅ１［ｉ］…（７）
【００６８】
より具体的には、例えば、演算部３０１は、「ｉ」を「ｉ＝０」で初期化して、上記式（７）を用いて、指数部のｉ番目の演算結果を算出する。つぎに、演算部３０１は、「ｉ」をインクリメントして、「ｉ」がストリーム長ＳＬ未満か否かを判断する。ここで、「ｉ」がストリーム長ＳＬ未満の場合、演算部３０１は、上記式（７）を用いて、指数部のｉ番目の演算結果を算出する。一方、演算部３０１は、「ｉ」がストリーム長ＳＬ以上の場合、演算部３０１は、指数部の演算を終了する。この結果、ソース（０）とソース（１）との２２行列乗算のｉ番目の演算結果は、（Ｚ＿ｆ［ｉ］，Ｚ＿ｅ［ｉ］）となる。
【００６９】
＜２２行列加算＞
つぎに、ソース（０）とソース（１）との間で行列単位の指数値割り当てを行う２２行列加算の具体的な処理内容について説明する。この場合、演算部３０１は、下記式（８）を用いて、指数部ストリーム（０）と指数部ストリーム（１）とのベクトル減算を行う。ただし、ｔｍｐ＿ｅ０［ｉ］はｉ番目の演算結果である。
【００７０】
ｔｍｐ＿ｅ０［ｉ］＝Ｂ＿ｅ［ｉ］−Ａ＿ｅ［ｉ］…（８）
【００７１】
より具体的には、例えば、演算部３０１は、「ｉ」を「ｉ＝０」で初期化して、上記式（８）を用いて、指数部ストリーム間のベクトル減算を行う。つぎに、演算部３０１は、「ｉ」をインクリメントして、「ｉ」がストリーム長ＳＬ未満か否かを判断する。ここで、「ｉ」がストリーム長ＳＬ未満の場合、演算部３０１は、上記式（８）を用いて、指数部ストリーム間のベクトル減算を行う。一方、「ｉ」がストリーム長ＳＬ以上の場合、演算部３０１は、指数部ストリーム間のベクトル減算を終了する。
【００７２】
ここで、ｔｍｐ＿ｅ０［ｉ］が０以上の場合、演算部３０１は、下記式（９）を用いて、シフト付き２２行列加算を行う。ただし、Ａ＿ｆ［ｉ］＞＞ｔｍｐ＿ｅ０［ｉ］は、ｔｍｐ＿ｅ０［ｉ］分、Ａ＿ｆ［ｉ］を右シフトすることを表している。
【００７３】
Ｚ＿ｆ［ｉ］＝Ａ＿ｆ［ｉ］＞＞ｔｍｐ＿ｅ０［ｉ］＋Ｂ＿ｆ［ｉ］…（９）
【００７４】
一方、ｔｍｐ＿ｅ０［ｉ］が０以上ではない場合、演算部３０１は、下記式（１０）を用いて、シフト付き２２行列加算を行う。ただし、Ｂ＿ｆ［ｉ］＞＞ｔｍｐ＿ｅ０［ｉ］は、ｔｍｐ＿ｅ０［ｉ］分、Ｂ＿ｆ［ｉ］を右シフトすることを表している。
【００７５】
Ｚ＿ｆ［ｉ］＝Ａ＿ｆ［ｉ］＋Ｂ＿ｆ［ｉ］＞＞ｔｍｐ＿ｅ０［ｉ］…（１０）
【００７６】
より具体的には、例えば、演算部３０１は、「ｉ」を「ｉ＝０」で初期化して、上記式（９）または（１０）を用いて、シフト付き２２行列加算を行う。つぎに、演算部３０１は、「ｉ」をインクリメントして、「ｉ」がストリーム長ＳＬ未満か否かを判断する。ここで、「ｉ」がストリーム長ＳＬ未満の場合、演算部３０１は、上記式（９）または（１０）を用いて、シフト付き２２行列加算を行う。一方、演算部３０１は、「ｉ」がストリーム長ＳＬ以上の場合、シフト付き２２行列加算を終了する。
【００７７】
また、演算部３０１は、下記式（１１）を用いて、ソース（０）とソース（１）との間の２２行列加算の指数部のｉ番目の演算結果を算出する。下記式（１１）は、Ａ＿ｅ［ｉ］＜Ｂ＿ｅ［ｉ］の場合に「Ｚ＿ｅ［ｉ］＝Ｂ＿ｅ［ｉ］」となり、Ａ＿ｅ［ｉ］≧Ｂ＿ｅ［ｉ］の場合に「Ｚ＿ｅ［ｉ］＝Ａ＿ｅ［ｉ］」となる関数である。
【００７８】
Ｚ＿ｅ［ｉ］＝（Ａ＿ｅ［ｉ］＜Ｂ＿ｅ［ｉ］）？Ｂ＿ｅ［ｉ］：Ａ＿ｅ［ｉ］
…（１１）
【００７９】
より具体的には、例えば、演算部３０１は、「ｉ」を「ｉ＝０」で初期化して、上記式（１１）を用いて、指数部のｉ番目の演算結果を算出する。つぎに、演算部３０１は、「ｉ」をインクリメントして、「ｉ」がストリーム長ＳＬ未満か否かを判断する。ここで、「ｉ」がストリーム長ＳＬ未満の場合、演算部３０１は、上記式（１１）を用いて、指数部のｉ番目の演算結果を算出する。一方、演算部３０１は、「ｉ」がストリーム長ＳＬ以上の場合、指数部の演算を終了する。この結果、ソース（０）とソース（１）との２２行列加算のｉ番目の演算結果は、（Ｚ＿ｆ［ｉ］，Ｚ＿ｅ［ｉ］）となる。
【００８０】
＜２２逆行列演算＞
つぎに、ソース（０）で行列単位の指数値割り当てを行う２２逆行列演算の具体的な処理内容について説明する。まず、演算部３０１は、下記式（１２）を用いて、仮数部ストリーム（０）に含まれるｉ番目のデータの逆行列演算を行う。
【００８１】
（Ｚ＿ｆ［ｉ］，ｔｍｐ＿ｅ０［ｉ］）＝Ｉｎｖｅｒｓｅ（Ａ＿ｆ［ｉ］）
…（１２）
【００８２】
より具体的には、例えば、演算部３０１は、「ｉ」を「ｉ＝０」で初期化して、上記式（１２）を用いて、ｉ番目のデータの逆行列演算を行う。つぎに、演算部３０１は、「ｉ」をインクリメントして、「ｉ」がストリーム長ＳＬ未満か否かを判断する。ここで、「ｉ」がストリーム長ＳＬ未満の場合、演算部３０１は、上記式（１２）を用いて、ｉ番目のデータの逆行列演算を行う。一方、演算部３０１は、「ｉ」がストリーム長ＳＬ以上の場合、演算部３０１は、ｉ番目のデータの逆行列演算を終了する。
【００８３】
つぎに、演算部３０１は、下記式（１３）を用いて、ソース（０）の２２逆行列演算の指数部のｉ番目の演算結果を算出する。
【００８４】
Ｚ＿ｅ［ｉ］＝ｔｍｐ＿ｅ０［ｉ］＋Ａ＿ｅ［ｉ］…（１３）
【００８５】
より具体的には、例えば、演算部３０１は、「ｉ」を「ｉ＝０」で初期化して、上記式（１３）を用いて、指数部のｉ番目の演算結果を算出する。つぎに、演算部３０１は、「ｉ」をインクリメントして、「ｉ」がストリーム長ＳＬ未満か否かを判断する。ここで、「ｉ」がストリーム長ＳＬ未満の場合、演算部３０１は、上記式（１３）を用いて、指数部のｉ番目の演算結果を算出する。一方、演算部３０１は、「ｉ」がストリーム長ＳＬ以上の場合、演算部３０１は、指数部の演算を終了する。この結果、ソース（０）の２２逆行列演算のｉ番目の演算結果は、（Ｚ＿ｆ［ｉ］，Ｚ＿ｅ［ｉ］）となる。
【００８６】
（データ処理装置１００のハードウェア構成例）
図６は、データ処理装置１００のハードウェア構成例を示す説明図である。図６において、データ処理装置１００は、ストリーム単位ブロックシフト部５０２と、データ単位ブロック正規化部５０３と、命令デコーダ６０１と、演算データパス６０２と、ＭＵＸ（ｍｕｌｔｉｐｌｅｘｅｒ）６０３と、ＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）６０４と、命令メモリ６０５と、データメモリ６０６と、を含む。
【００８７】
命令デコーダ６０１は、命令メモリ６０５に読み込まれた命令の内容を解読して、ＤＭＡ６０４にＤＭＡ制御信号を出力するとともに、演算データパス６０２にデータパス制御信号を出力する。また、命令デコーダ６０１は、ストリーム単位ブロックシフト部５０２にストリーム単位のシフト数Ｓを設定し、ＭＵＸ６０３にＤＣＬＳＳモードを設定する。具体的には、例えば、命令デコーダ６０１は、ＤＣＬＳＳモードオンの場合は「ＤＣＬＳＳ＝１」を設定し、ＤＣＬＳＳモードオフの場合は「ＤＣＬＳＳ＝０」を設定する。
【００８８】
ＤＭＡ制御信号は、演算対象を示すオペランドや演算結果の格納先を示すデスティネーションを含む。データパス制御信号は、命令種別を示すオペコードを含む。図６の例では、ＤＭＡ制御信号には、ｓｒｃ０、ｓｒｃ１、ｄｓｔ、ＳＬが含まれている。ｓｒｃ０は、ソース（０）が格納されたデータメモリ６０６におけるアドレスである。ｓｒｃ１は、ソース（１）が格納されたデータメモリ６０６におけるアドレスである。ｄｓｔは、データメモリ６０６における演算結果が格納されるアドレスである。ＳＬは、ストリーム長である。また、データパス制御信号には、乗算命令を示すｍｘｍｕｌが含まれている。
【００８９】
演算データパス６０２は、命令デコーダ６０１からのデータパス制御信号に従って、不図示の制御回路により内部の結線を切り替えることにより各種の行列演算を行う。具体的には、例えば、演算データパス６０２は、８個の２×２行列乗算モジュールと、８個の２×２行列加算モジュールとを有し、モジュール４個に対して１個のマルチプレクサが取り付けられている。演算データパス６０２は、モジュール間の結線を切り替えることで、４×４行列乗算、２×２行列乗算の４並列、２×２逆行列演算の４並列などを行うことができる。
【００９０】
ＤＭＡ６０４は、命令デコーダ６０１からのＤＭＡ制御信号に従って、データメモリ６０６からソースを読み出して演算データパス６０２に転送する。また、ＤＭＡ６０４は、ＭＵＸ６０３から出力される演算結果をデータメモリ６０６の格納先（デスティネーション）に書き込む。
【００９１】
ストリーム単位ブロックシフト部５０２は、演算データパス６０２からの演算結果に対して、ストリーム単位ブロックシフト処理を行う。データ単位ブロック正規化部５０３は、演算データパス６０２からの演算結果に対して、データ単位ブロック正規化処理を行う。ＭＵＸ６０３は、ＤＣＬＳＳモードに従って、ストリーム単位ブロックシフト部５０２またはデータ単位ブロック正規化部５０３から出力される演算結果をＤＭＡ６０４に出力する。
【００９２】
（ＤＭＡ６０４の内部構成例）
つぎに、図６に示したＤＭＡ６０４の内部構成例について説明する。図７は、ＤＭＡ６０４の内部構成例を示す説明図である。図７において、ａｄｄｒ＿ｓｒｃ０は、ソース（０）が格納されたアドレスを示し、ａｄｄｒ＿ｓｒｃ１はソース（１）が格納されたアドレスを示し、ａｄｄｒ＿ｄｓｔはデスティネーションアドレスを示す。また、ｌｅｎｇｔｈ＿ｓｒｃ０はソース（０）のストリーム長ＳＬを示し、ｌｅｎｇｔｈ＿ｓｒｃ１はソース（１）のストリーム長ＳＬを示し、ｌｅｎｇｔｈ＿ｄｓｔはデスティネーションのストリーム長ＳＬを示す。
【００９３】
ＤＭＡ６０４は、例えば、ソース（０）を読み出すロード部７１０と、ソース（１）を読み出すロード部７２０と、デスティネーションにデータを書き込むストア部７３０と、サイクルカウンタ７４０と、を含む。サイクルカウンタ７４０は、例えば、１回のストリーム型処理が行われる間、１サイクルごとに、０〜Ｎ（Ｎ＝ｌｅｎｇｔｈ＿ｄｓｔ−１）まで１ずつインクリメントされる値ｉをロード部７１０，７２０、ストア部７３０に出力する。
【００９４】
ロード部７１０は、アドレス生成回路７１１と、データバッファ７１２と、を含む。アドレス生成回路７１１には、例えば、ａｄｄｒ＿ｓｒｃ０、ｌｅｎｇｔｈ＿ｓｒｃ０が入力される。アドレス生成回路７１１は、データメモリ６０６のａｄｄｒ＿ｓｒｃ０が指定するアドレスから、１サイクルごとに単位データを１つずつ読み出してデータバッファ７１２に格納する。単位データとは、演算データパス６０２が演算対象とする形式のデータであり、例えば、行列、数値等が指定される。データバッファ７１２に格納されたデータは、必要に応じて演算データパス６０２に出力され、演算対象とされる。
【００９５】
ロード部７２０は、アドレス生成回路７２１と、データバッファ７２２と、を含む。アドレス生成回路７２１には、例えば、ａｄｄｒ＿ｓｒｃ１、ｌｅｎｇｔｈ＿ｓｒｃ１が入力される。アドレス生成回路７２１は、データメモリ６０６のａｄｄｒ＿ｓｒｃ１が指定するアドレスから、１サイクルごとに単位データを１つずつ読み出してデータバッファ７２２に格納する。データバッファ７２２に格納されたデータは、必要に応じて演算データパス６０２に出力され、演算対象とされる。
【００９６】
ストア部７３０は、アドレス生成回路７３１と、データバッファ７３２と、を含む。アドレス生成回路７３１には、例えば、ａｄｄｒ＿ｄｓｔ、ｌｅｎｇｔｈ＿ｄｓｔが入力される。アドレス生成回路７３１は、データメモリ６０６のａｄｄｒ＿ｄｓｔが指定するアドレスに、１サイクルごとに、データバッファ７３２に格納された単位データを１つずつ書き込む。データバッファ７３２には、ＭＵＸ６０３から出力された演算結果が格納される。
【００９７】
（データ処理装置１００のデータ処理手順）
つぎに、データ処理装置１００のデータ処理手順について説明する。
【００９８】
図８は、データ処理装置１００のデータ処理手順の一例を示すフローチャートである。図８のフローチャートにおいて、まず、データ処理装置１００は、命令メモリ６０５から命令を読み込む（ステップＳ８０１）。つぎに、データ処理装置１００は、ストリーム単位ブロックシフト部５０２にストリーム単位のシフト数Ｓを設定するとともに、ＭＵＸ６０３にＤＣＬＳＳモードを設定する（ステップＳ８０２）。
【００９９】
そして、データ処理装置１００は、ＤＭＡ６０４にＤＭＡ制御信号を送信するとともに、演算データパス６０２にデータパス制御信号を送信する（ステップＳ８０３）。つぎに、データ処理装置１００は、「ｉ」を「ｉ＝０」で初期化して（ステップＳ８０４）、データメモリ６０６から演算対象となるｉ番目の行列を読み込んで行列演算を行う（ステップＳ８０５）。
【０１００】
つぎに、データ処理装置１００は、ＤＣＬＳＳモードが「ＤＣＬＳＳ＝１」か否かを判断する（ステップＳ８０６）。ここで、「ＤＣＬＳＳ＝１」の場合（ステップＳ８０６：Ｙｅｓ）、データ処理装置１００は、ステップＳ８０５の演算結果に対してデータ単位ブロック正規化処理を行う（ステップＳ８０７）。
【０１０１】
一方、「ＤＣＬＳＳ＝０」の場合（ステップＳ８０６：Ｎｏ）、データ処理装置１００は、ステップＳ８０５の演算結果に対してストリーム単位ブロックシフト処理を行う（ステップＳ８０８）。そして、データ処理装置１００は、データメモリ６０６にｉ番目の演算結果を書き込む（ステップＳ８０９）。
【０１０２】
つぎに、データ処理装置１００は、「ｉ」をインクリメントして（ステップＳ８１０）、「ｉ」が「ＳＬ」より小さいか否かを判断する（ステップＳ８１１）。ここで、「ｉ」が「ＳＬ」より小さい場合（ステップＳ８１１：Ｙｅｓ）、データ処理装置１００は、ステップＳ８０５に戻る。一方、「ｉ」が「ＳＬ」以上の場合（ステップＳ８１１：Ｎｏ）、データ処理装置１００は、本フローチャートによる一連の処理を終了する。
【０１０３】
これにより、ＤＣＬＳＳモードオンの時は、配列型データに含まれる行列ごとに、行列単位の指数値を割り当てて、行列単位で浮動小数点表現することができる。また、ＤＣＬＳＳモードオフの時は、配列型データ全体を整数シフト命令で一度にシフトさせて、配列型データ単位で浮動小数点表現することができる。
【０１０４】
つぎに、図８に示したステップＳ８０５の行列演算の具体的な処理手順について説明する。ここでは、仮数部ストリームと指数部ストリームとを含むストリームデータＤの行列演算を行う場合を例に挙げて説明する。まず、ソース（０）とソース（１）との２２行列乗算の具体的な処理手順について説明する。
【０１０５】
図９は、２２行列乗算の具体的処理手順の一例を示すフローチャートである。図９のフローチャートにおいて、まず、データ処理装置１００は、上記式（５）を用いて、仮数部ストリーム（０）と仮数部ストリーム（１）との行列積を行う（ステップＳ９０１）。そして、データ処理装置１００は、上記式（６）を用いて、指数部ストリーム（０）と指数部ストリーム（１）とのベクトル加算を行う（ステップＳ９０２）。
【０１０６】
つぎに、データ処理装置１００は、上記式（７）を用いて、ソース（０）とソース（１）との２２行列乗算の指数部のｉ番目の演算結果を算出する（ステップＳ９０３）。そして、データ処理装置１００は、ソース（０）とソース（１）との２２行列乗算のｉ番目の演算結果（Ｚ＿ｆ［ｉ］，Ｚ＿ｅ［ｉ］）を出力して（ステップＳ９０４）、本フローチャートによる一連の処理を終了する。これにより、仮数部ストリームと指数部ストリームとを含むストリームデータＤ間の２２行列乗算を行うことができる。
【０１０７】
つぎに、ソース（０）とソース（１）との２２行列加算の具体的な処理手順について説明する。
【０１０８】
図１０は、２２行列加算の具体的処理手順の一例を示すフローチャートである。図１０において、データ処理装置１００は、上記式（８）を用いて、指数部ストリーム（０）と指数部ストリーム（１）とのベクトル減算を行う（ステップＳ１００１）。つぎに、データ処理装置１００は、ｔｍｐ＿ｅ０［ｉ］が０以上か否かを判断する（ステップＳ１００２）。
【０１０９】
ここで、ｔｍｐ＿ｅ０［ｉ］が０以上の場合（ステップＳ１００２：Ｙｅｓ）、データ処理装置１００は、上記式（９）を用いて、シフト付き２２行列加算を行う（ステップＳ１００３）。一方、ｔｍｐ＿ｅ０［ｉ］が０以上ではない場合（ステップＳ１００２：Ｎｏ）、データ処理装置１００は、上記式（１０）を用いて、シフト付き２２行列加算を行う（ステップＳ１００４）。
【０１１０】
つぎに、データ処理装置１００は、上記式（１１）を用いて、ソース（０）とソース（１）との２２行列加算の指数部のｉ番目の演算結果を算出する（ステップＳ１００５）。そして、データ処理装置１００は、ソース（０）とソース（１）との２２行列加算のｉ番目の演算結果（Ｚ＿ｆ［ｉ］，Ｚ＿ｅ［ｉ］）を出力して（ステップＳ１００６）、本フローチャートによる一連の処理を終了する。これにより、仮数部ストリームと指数部ストリームとを含むストリームデータＤ間の２２行列加算を行うことができる。
【０１１１】
つぎに、ソース（０）の２２逆行列演算の具体的な処理手順について説明する。
【０１１２】
図１１は、２２逆行列演算の具体的処理手順の一例を示すフローチャートである。図１１のフローチャートにおいて、まず、データ処理装置１００は、上記式（１２）を用いて、仮数部ストリーム（０）に含まれるｉ番目のデータの逆行列演算を行う（ステップＳ１１０１）。
【０１１３】
つぎに、データ処理装置１００は、上記式（１３）を用いて、ソース（０）の２２逆行列演算の指数部のｉ番目の演算結果を算出する（ステップＳ１１０２）。そして、データ処理装置１００は、ソース（０）の２２逆行列演算のｉ番目の演算結果（Ｚ＿ｆ［ｉ］，Ｚ＿ｅ［ｉ］）を出力して（ステップＳ１１０３）、本フローチャートによる一連の処理を終了する。これにより、ソース（０）の２２逆行列演算を行うことができる。
【０１１４】
（データ処理装置１００の適用例）
つぎに、実施の形態にかかるデータ処理装置１００を、携帯電話機のベースバンド処理ＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）に適用した場合について説明する。
【０１１５】
図１２は、データ処理装置１００の適用例を示す説明図である。図１２において、ベースバンド処理ＬＳＩ１２００は、ＲＦ（Ｒａｄｉｏ  Ｆｒｅｑｕｅｎｃｙ）部１２１０と、専用ハードウェア１２２０と、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）１２３０＃１〜１２３０＃３と、を含む。
【０１１６】
ＲＦ部１２１０は、アンテナ１２５０を介して受信された無線信号の周波数をダウンコンバートし、デジタル信号に変換してバス１２４０に出力する。また、ＲＦ部１２１０は、バス１２４０に出力されたデジタル信号をアナログ信号に変換し、無線周波数にアップコンバートして、アンテナ１２５０に出力する。
【０１１７】
専用ハードウェア１２２０は、例えば、誤り訂正符号を扱うｔｕｒｂｏ、ビタビアルゴリズムを実行するｖｉｔｅｒｂｉ、複数のアンテナでデータの送受信を行うためのＭＩＭＯ（Ｍｕｌｔｉ  Ｉｎｐｕｔ  Ｍｕｌｔｉ  Ｏｕｔｐｕｔ）等を含む。
【０１１８】
ＤＳＰ１２３０＃１〜１２３０＃３（以下、単に「ＤＳＰ１２３０」と称する）は、プロセッサ１２３１と、プログラムメモリ１２３２と、周辺回路１２３３と、データメモリ１２３４と、を含む。プロセッサ１２３１は、ＣＰＵ１２３５と、データ処理装置１００と、を含む。各ＤＳＰ１２３０にはＳｅａｒｃｈｅｒ（同期）、Ｄｅｍｏｄｕｌａｔｏｒ（復調）、Ｄｅｃｏｄｅｒ（復号）、Ｃｏｄｅｃ（符号化）、Ｍｏｄｕｌａｔｏｒ（変調）等、無線通信信号処理の各要素処理が割り当てられる。
【０１１９】
以上説明したように、実施の形態１にかかるデータ処理装置１００によれば、ストリームデータＤの行列演算により得られる行列ごとに、行列に含まれる各要素の値に基づいて、各要素を浮動小数点で表す場合の行列単位の指数値を決定することができる。また、データ処理装置１００によれば、行列に含まれる各要素の値を行列単位の指数値に対する各要素の仮数値に変換して、変換後の行列と行列単位の指数値とを対応付けて出力することができる。
【０１２０】
これにより、ストリームデータＤの行列演算により得られる行列ごとに、行列単位の指数値を割り当てて、行列単位で浮動小数点表現することができる。この結果、配列型データに含まれる各数値を浮動小数点として処理する場合に比べて回路規模の増大化を抑制することができるとともに、配列型データ全体を整数シフト命令で一度にシフトさせてから演算を行う場合よりも演算精度を向上させることができる。具体的には、例えば、ＬＴＥなどの無線通信信号処理では、単位データが行列の配列型データにおいて、１つの行列に含まれる各要素の値は絶対値が近似するが、行列間の各要素の値は絶対値が大きく異なる特性を有している。このため、配列型データに含まれる行列ごとに行列単位の指数値を割り当てて行列演算することにより、効率的に演算精度を向上させることができる。
【０１２１】
また、データ処理装置１００によれば、ストリームデータＤの行列演算により得られる行列ごとに、行列に含まれる複数の要素のうちの絶対値が最大の要素を浮動小数点で表す場合の指数値を行列単位の指数値に決定することができる。これにより、行列に含まれる全要素の指数部を、絶対値が最大の要素の指数部で統一して正規化することができ演算精度を向上させることができる。
【０１２２】
また、データ処理装置１００によれば、仮数部ストリームと指数部ストリームとを含むストリームデータＤ間の行列加算演算を行う場合、ストリームデータＤ間の対応する指数値の差分を算出することができる。また、データ処理装置１００によれば、ストリームデータＤ間の対応する指数値の差分に基づいて、ストリームデータＤ間の対応する行列のいずれか一方の行列に含まれる各要素の値をシフトすることができる。これにより、演算対象となる行列同士の指数値を合わせて、ストリームデータＤ間の行列加算演算を行うことができる。
【０１２３】
また、データ処理装置１００によれば、ＤＣＬＳＳモードを任意に選択することができる。これにより、演算結果を表現するのに必要なビット数が一度に増加する可能性が高い行列演算を行う場合にＤＣＬＳＳモードオンを選択し、それ以外はＤＣＬＳＳモードオフを選択することができ、行列演算にかかる処理量を抑えることができる。
【０１２４】
これらのことから、実施の形態１にかかるデータ処理装置、データ処理方法およびデータ処理プログラムによれば、配列型データの行列演算にかかる回路規模の増大化を抑制するとともに演算精度の向上を図ることができる。
【０１２５】
（実施の形態２）
つぎに、実施の形態２にかかるデータ処理装置１００について説明する。なお、実施の形態１で説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。
【０１２６】
実施の形態１では、単位データ長が固定である場合について説明したが、実施の形態２では、単位データ長が可変である場合について説明する。単位データ長は、行列形式（または、ベクトル形式）の単位データの長さであり、例えば、単位データに含まれる要素の数で表される。以下の説明では、単位データ長を「単位データ長ＵＬ」と表記する場合がある。
【０１２７】
例えば、図４に示した演算結果４００の例では、単位データ長ＵＬがサイクル当たり（Ｎ＋１）個の要素（ｃ［０］〜ｃ［Ｎ］）に固定されている。一方で、単位データ長ＵＬは実行される命令に応じて変化し、命令ごとに単位データ長ＵＬが変化すると、ＳＩＭＤ幅（並列度）が変化する。
【０１２８】
ここで、サイクル当たりのデータ処理幅を「データ処理幅Ｌ（固定）」とすると、ＳＩＭＤ幅は「Ｌ／ＵＬ」となる。データ処理幅Ｌは、データ処理装置１００のハードウェア資源に応じて決まるものであり、１サイクルで処理できるデータ幅である。ＳＩＭＤ幅は、サイクル当たりの並列に処理できる単位データの数である。
【０１２９】
一例として、データ処理幅Ｌを「Ｌ＝１６」とすると、４×４行列命令であれば、単位データ長ＵＬは「１６」でＳＩＭＤ幅は１ＳＩＭＤとなり、１６要素の１データ／ｃｙｃｌｅとなる。また、２×２行列命令であれば、単位データ長ＵＬは「４」でＳＩＭＤ幅は４ＳＩＭＤとなり、４要素の４データ／ｃｙｃｌｅとなる。
【０１３０】
そこで、実施の形態２では、単位データ長ＵＬが可変な場合であっても、単位データに含まれる各要素を浮動小数点で表現する際のデータ単位の指数値を決定し、各要素の値をデータ単位の指数値に対する仮数値に変換するデータ単位ブロック正規化処理をできるだけ簡単なロジックで実現するデータ処理方法について説明する。
【０１３１】
（決定部３０２および変換部３０３の具体的な処理内容）
まず、実施の形態２にかかるデータ処理装置１００の決定部３０２（図３参照）および変換部３０３（図３参照）の具体的な処理内容について説明する。
【０１３２】
図１３は、実施の形態２にかかるデータ処理装置１００の決定部３０２および変換部３０３の具体的な処理内容を示す説明図である。図１３において、シフト数生成回路１３０１は、決定部３０２が有する決定回路である。また、シフター１３０２は、変換部３０３が有するシフト回路である。
【０１３３】
シフト数生成回路１３０１は、演算部３０１（図３参照）の行列演算により得られる一連の要素の先頭から、単位データ長ＵＬとなる要素数単位の要素集合ごとに、要素集合単位の指数値を決定する。具体的には、例えば、シフト数生成回路１３０１は、要素集合に含まれる各要素の値に基づいて、各要素を浮動小数点で表す場合の要素集合単位の指数値を決定する。
【０１３４】
図１３の例では、データ処理幅Ｌが「Ｌ＝１６」の例であり、ｃ［０］〜ｃ［１５］は、ソース（０）とソース（１）との行列演算結果を表す一連の要素の値である。ここで、単位データ長ＵＬを「ＵＬ＝４」とする。この場合、シフト数生成回路１３０１は、ソース（０）とソース（１）との行列演算結果に含まれる一連の要素の先頭から、単位データ長ＵＬとなる４個単位の要素集合ごとに、要素集合単位の指数値を決定する。
【０１３５】
以下の説明では、ソース（０）とソース（１）との行列演算結果に含まれる要素を、要素の値を用いて「要素ｃ［ｋ］」と表記する場合がある（図１３の例では、ｋ＝０，１，…，１５）。また、要素集合単位の指数値を「要素集合単位のシフト数ｓ」と表記する場合がある。
【０１３６】
例えば、シフト数生成回路１３０１は、要素集合ｃ［０］〜ｃ［３］について、要素集合ｃ［０］〜ｃ［３］のうち絶対値が最大となる要素を特定する。つぎに、シフト数生成回路１３０１は、絶対値が最大となる要素の値を正規化して仮数値と指数値とを算出する。そして、シフト数生成回路１３０１は、絶対値が最大となる要素の指数値を要素集合単位のシフト数ｓに決定する。
【０１３７】
一例として、要素集合ｃ［０］〜ｃ［３］のうち絶対値が最大となる要素を「要素ｃ［０］」とすると、要素集合単位のシフト数ｓは「ｓ＝ｓ０」となる。すなわち、要素ｃ［０］〜ｃ［３］のシフト数ｓ０〜ｓ３は、同一のシフト数ｓ（ｓ０）となる。
【０１３８】
同様に、シフト数生成回路１３０１は、要素集合ｃ［４］〜ｃ［７］について、要素集合ｃ［４］〜ｃ［７］のうち絶対値が最大となる要素の値を正規化して得られる指数値を要素集合単位のシフト数ｓに決定する。すなわち、要素ｃ［４］〜ｃ［７］のシフト数ｓ４〜ｓ７は、同一のシフト数ｓとなる。
【０１３９】
同様に、シフト数生成回路１３０１は、要素集合ｃ［８］〜ｃ［１１］について、要素集合ｃ［８］〜ｃ［１１］のうち絶対値が最大となる要素の値を正規化して得られる指数値を要素集合単位のシフト数ｓに決定する。すなわち、要素ｃ［８］〜ｃ［１１］のシフト数ｓ８〜ｓ１１は、同一のシフト数ｓとなる。
【０１４０】
同様に、シフト数生成回路１３０１は、要素集合ｃ［１２］〜ｃ［１５］について、要素集合ｃ［１２］〜ｃ［１５］のうち絶対値が最大となる要素の値を正規化して得られる指数値を要素集合単位のシフト数ｓに決定する。すなわち、要素ｃ［１２］〜ｃ［１５］のシフト数ｓ１２〜ｓ１５は、同一のシフト数ｓとなる。
【０１４１】
また、シフター１３０２は、単位データ長ＵＬとなる要素数単位の要素集合ごとに、要素集合に含まれる各要素の値を、シフト数生成回路１３０１によって決定された要素集合単位のシフト数ｓに対する各要素の仮数値に変換する。
【０１４２】
例えば、シフター１３０２は、要素集合ｃ［０］〜ｃ［３］について、各要素の値を、シフト数生成回路１３０１によって決定された要素集合単位のシフト数ｓでシフト演算する。具体的には、例えば、シフター１３０２は、各要素の値を、シフト数ｓ０〜ｓ３（ｓ＝ｓ０＝ｓ１＝ｓ２＝ｓ３）でそれぞれシフト演算して、各要素の仮数値ｃ’［０］〜ｃ’［３］を算出する。そして、シフター１３０２は、各要素の値を、算出した各要素の仮数値ｃ’［０］〜ｃ’［３］に変換する。
【０１４３】
同様に、シフター１３０２は、要素集合ｃ［４］〜ｃ［７］について、各要素の値をシフト数ｓ４〜ｓ７でそれぞれシフト演算して、各要素の仮数値ｃ’［４］〜ｃ’［７］を算出する。そして、シフター１３０２は、各要素の値を、算出した各要素の仮数値ｃ’［４］〜ｃ’［７］に変換する。
【０１４４】
同様に、シフター１３０２は、要素集合ｃ［８］〜ｃ［１１］について、各要素の値をシフト数ｓ８〜ｓ１１でそれぞれシフト演算して、各要素の仮数値ｃ’［８］〜ｃ’［１１］を算出する。そして、シフター１３０２は、各要素の値を、算出した各要素の仮数値ｃ’［８］〜ｃ’［１１］に変換する。
【０１４５】
同様に、シフター１３０２は、要素集合ｃ［１２］〜ｃ［１５］について、各要素の値をシフト数ｓ１２〜ｓ１５でそれぞれシフト演算して、各要素の仮数値ｃ’［１２］〜ｃ’［１５］を算出する。そして、シフター１３０２は、各要素の値を、算出した各要素の仮数値ｃ’［１２］〜ｃ’［１５］に変換する。
【０１４６】
この場合、出力部３０４（図３参照）は、変換後の一連の要素ｃ’［０］〜ｃ’［１５］とシフト数ｓ０〜ｓ１５とを対応付けて出力する。具体的には、例えば、出力部３０４は、変換後の一連の要素ｃ’［０］〜ｃ’［１５］のうちの単位データ長ＵＬとなる要素数単位の要素集合ごとに、要素集合単位のシフト数ｓを対応付けて出力する。
【０１４７】
以上説明したように、実施の形態２にかかるデータ処理装置１００によれば、一連の要素の先頭から、単位データ長ＵＬとなる要素数単位の要素集合ごとに、要素集合に含まれる各要素を浮動小数点で表す場合の要素集合単位のシフト数ｓを決定することができる。また、データ処理装置１００によれば、要素集合ごとに、要素集合に含まれる各要素の値を、要素集合単位のシフト数ｓに対する各要素の仮数値に変換することができる。そして、データ処理装置１００によれば、変換後の要素集合に含まれる各要素の値と、要素集合単位のシフト数ｓとを対応付けて出力することができる。
【０１４８】
これにより、単位データ長ＵＬが可変な場合であっても、データ単位ブロック正規化処理を実現することができ、可変な単位データ長ＵＬに応じて、データ単位の指数値を割り当てて、データ単位で浮動小数点表現することができる。
【０１４９】
（実施例１）
以下、実施の形態１，２にかかるデータ処理装置１００の具体的な実施例について説明する。まず、データ処理装置１００の実施例１について説明する。ただし、以下の説明では、特に指定する場合を除いて、データ処理幅Ｌを「Ｌ＝１６」とし、演算部３０１（図３参照）の行列演算により得られる一連の要素（配列型データ）を「要素ｃ［０］〜ｃ［１５］」とする。
【０１５０】
図１４は、実施例１にかかるシフト数生成回路１３０１の回路構成例を示す説明図である。図１４において、シフト数生成回路１３０１は、ＵＬｎ単位データ内シフト数生成回路１４０１〜１４１６と、ｍｕｘ１４２１〜１４３６とを含む。ここで、ＵＬｎ単位データ内シフト数生成回路１４０１〜１４１６は、要素ｃ［０］〜ｃ［１５］に含まれる要素の総数「１６」を上限として取り得る要素数ｎ（ｎ＝１，２，…，１６）それぞれに対応する決定回路である。ｍｕｘ１４２１〜１４３６は、各要素ｃ［０］〜ｃ［１５］に対応する選択回路である。
【０１５１】
例えば、ＵＬ１単位データ内シフト数生成回路１４０１（ｎ＝１）は、ＵＬ１単位データ内シフト数生成回路１４０１−１〜１４０１−１６を有し、要素ｃ［０］〜ｃ［１５］の先頭から１個単位の要素集合ごとに、要素集合単位のシフト数ｓを決定する。ただし、この場合の要素集合に含まれる要素は１個である。
【０１５２】
具体的には、例えば、ＵＬ１単位データ内シフト数生成回路１４０１−１は、要素ｃ［０］の値が入力され、要素ｃ［０］の値を正規化して仮数値と指数値とを算出し、算出した指数値を要素集合単位のシフト数ｓ（シフト数ｓ０）に決定する。決定されたシフト数ｓ０は、ｍｕｘ１４２１に入力される。
【０１５３】
同様に、ＵＬ１単位データ内シフト数生成回路１４０１−２〜１４０１−１６は、要素集合単位のシフト数ｓ（シフト数ｓ１〜ｓ１５）をそれぞれ決定する。また、決定されたシフト数ｓ１〜ｓ１５は、ｍｕｘ１４２２〜１４３６にそれぞれ入力される。
【０１５４】
また、例えば、ＵＬ２単位データ内シフト数生成回路１４０２（ｎ＝２）は、ＵＬ２単位データ内シフト数生成回路１４０２−１〜１４０２−８を有し、要素ｃ［０］〜ｃ［１５］の先頭から２個単位の要素集合ごとに、要素集合単位のシフト数ｓを決定する。
【０１５５】
具体的には、例えば、ＵＬ２単位データ内シフト数生成回路１４０２−１は、要素ｃ［０］，ｃ［１］が入力され、要素集合ｃ［０］，ｃ［１］のうち絶対値が最大となる要素の値を正規化して仮数値と指数値とを算出する。そして、ＵＬ２単位データ内シフト数生成回路１４０２−１は、算出した指数値を要素集合単位のシフト数ｓ（ｓ＝ｓ０＝ｓ１）に決定する。決定されたシフト数ｓ０，ｓ１は、ｍｕｘ１４２１，１４２２にそれぞれ入力される。
【０１５６】
同様に、ＵＬ２単位データ内シフト数生成回路１４０２−２〜１４０２−８は、要素集合単位のシフト数ｓ（シフト数ｓ２〜ｓ１５）をそれぞれ決定する。また、決定されたシフト数ｓ２〜ｓ１５は、ｍｕｘ１４２３〜１４３６にそれぞれ入力される。ＵＬ３単位データ内シフト数生成回路１４０３（ｎ＝３）〜ＵＬ１６単位データ内シフト数生成回路１４１６（ｎ＝１６）についても同様である。
【０１５７】
ｍｕｘ１４２１〜１４３６は、要素ｃ［０］〜ｃ［１５］に含まれる要素それぞれについて、入力された要素集合単位のシフト数ｓの中から、単位データ長ＵＬとなる要素数の要素集合単位のシフト数ｓを選択する。単位データ長ＵＬとなる要素数は、ｍｕｘ１４２１〜１４３６に入力される。
【０１５８】
例えば、単位データ長ＵＬを「ＵＬ＝１」とする。この場合、例えば、ｍｕｘ１４２１は、ＵＬ１単位データ内シフト数生成回路１４０１−１から入力されたシフト数ｓ０を、要素集合単位のシフト数ｓとして選択する。また、単位データ長ＵＬを「ＵＬ＝２」とする。この場合、例えば、ｍｕｘ１４２１は、ＵＬ２単位データ内シフト数生成回路１４０２−１から入力されたシフト数ｓ０を、要素集合単位のシフト数ｓとして選択する。
【０１５９】
ｍｕｘ１４２１〜１４３６によってそれぞれ選択されたシフト数ｓ（シフト数ｓ０〜ｓ１５）は、図１３に示したシフター１３０２に入力される。この結果、シフター１３０２は、各要素ｃ［０］〜ｃ［１５］の値を、ｍｕｘ１４２１〜１４３６によってそれぞれ選択されたシフト数ｓに対する仮数値ｃ’［０］〜ｃ’［１５］にそれぞれ変換する。
【０１６０】
実施例１にかかるデータ処理装置１００によれば、単位データ長ＵＬがデータ処理幅Ｌを上限として取り得るいずれの要素数ｎ（ｎ＝１，２，…，１６）であっても、単位データ長ＵＬに応じたデータ単位ブロック正規化処理を実現することができる。
【０１６１】
（実施例２）
つぎに、データ処理装置１００の実施例２について説明する。
【０１６２】
図１５は、実施例２にかかるシフト数生成回路１３０１の回路構成例を示す説明図である。図１５において、シフト数生成回路１３０１は、要素ｃ［０］〜ｃ［１５］に含まれる要素の総数「１６」を上限として取り得る２のべき乗の要素数ｎ（ｎ＝１，２，４，８，１６）それぞれに対応するＵＬｎ単位データ内シフト数生成回路１５０１〜１５０５と、各要素ｃ［０］〜ｃ［１５］に対応するｍｕｘ１５１１〜１５２６とを含む。
【０１６３】
例えば、ＵＬ１単位データ内シフト数生成回路１５０１（ｎ＝１）は、ＵＬ１単位データ内シフト数生成回路１５０１−１〜１５０１−１６を有し、要素ｃ［０］〜ｃ［１５］の先頭から１個単位の要素集合ごとに、要素集合単位のシフト数ｓを決定する。ただし、この場合の要素集合に含まれる要素は１個である。
【０１６４】
また、例えば、ＵＬ２単位データ内シフト数生成回路１５０２（ｎ＝２）は、ＵＬ２単位データ内シフト数生成回路１５０２−１〜１５０２−８を有し、要素ｃ［０］〜ｃ［１５］の先頭から２個単位の要素集合ごとに、要素集合単位のシフト数ｓを決定する。
【０１６５】
また、例えば、ＵＬ４単位データ内シフト数生成回路１５０３（ｎ＝４）は、ＵＬ４単位データ内シフト数生成回路１５０３−１〜１５０３−４を有し、要素ｃ［０］〜ｃ［１５］の先頭から４個単位の要素集合ごとに、要素集合単位のシフト数ｓを決定する。
【０１６６】
以下、ＵＬ８単位データ内シフト数生成回路１５０４（ｎ＝８）およびＵＬ１６単位データ内シフト数生成回路１５０５（ｎ＝１６）についても同様である。
【０１６７】
ｍｕｘ１５１１〜１５２６は、それぞれ入力された要素集合単位のシフト数ｓの中から、単位データ長ＵＬとなる要素数の要素集合単位のシフト数ｓをそれぞれ選択する。単位データ長ＵＬとなる要素数は、ｍｕｘ１５１１〜１５２６に入力される。
【０１６８】
例えば、単位データ長ＵＬを「ＵＬ＝２」とする。この場合、例えば、ｍｕｘ１５１１は、ＵＬ２単位データ内シフト数生成回路１５０２−１から入力されたシフト数ｓ０を、要素集合単位のシフト数ｓとして選択する。また、例えば、単位データ長ＵＬを「ＵＬ＝４」とする。この場合、例えば、ｍｕｘ１５１１は、ＵＬ４単位データ内シフト数生成回路１５０３−１から入力されたシフト数ｓ０を、要素集合単位のシフト数ｓとして選択する。
【０１６９】
ｍｕｘ１５１１〜１５２６によってそれぞれ選択されたシフト数ｓ（シフト数ｓ０〜ｓ１５）は、図１３に示したシフター１３０２に入力される。この結果、シフター１３０２は、各要素ｃ［０］〜ｃ［１５］の値を、ｍｕｘ１５１１〜１５２６によってそれぞれ選択されたシフト数ｓに対する仮数値ｃ’［０］〜ｃ’［１５］にそれぞれ変換する。
【０１７０】
実施例２にかかるデータ処理装置１００によれば、ＵＬｎ単位データ内シフト数生成回路の数を、データ処理幅Ｌを上限として取り得る２のべき乗の要素数ｎ分に制限することで、実施例１のデータ処理装置１００に比べて、シフト数生成回路１３０１の回路量を抑えることができる。
【０１７１】
ここで、図１６Ａおよび図１６Ｂを用いて、実施例１にかかるシフト数生成回路１３０１と実施例２にかかるシフト数生成回路１３０１の回路構成を比較する。
【０１７２】
図１６Ａおよび図１６Ｂは、シフト数生成回路１３０１の回路構成の比較例を示す説明図である。図１６Ａにおいて、実施例１にかかるシフト数生成回路１３０１（図１４参照）の回路構成例が示されている。また、図１６Ｂにおいて、実施例２にかかるシフト数生成回路１３０１（図１５参照）の回路構成例が示されている。
【０１７３】
図１６Ａおよび図１６Ｂに示すように、実施例２にかかるシフト数生成回路１３０１は、実施例１にかかるシフト数生成回路１３０１に比べて、ＵＬ＝３，５，６，７，９，１０，１１，１２，１３，１４，１５に対応するＵＬｎ単位データ内シフト数生成回路の回路量を削減することができる。
【０１７４】
一方、実施例２にかかるシフト数生成回路１３０１では、ＵＬｎ単位データ内シフト数生成回路を２のべき乗に制限したため、単位データ長ＵＬに対応するＵＬｎ単位データ内シフト数生成回路が存在しない場合がある。例えば、単位データ長ＵＬが「ＵＬ＝３」の場合、単位データ長ＵＬに対応するＵＬｎ単位データ内シフト数生成回路が存在しない。
【０１７５】
この場合、シフト数生成回路１３０１は、単位データ長ＵＬよりも大きい要素数に対応するＵＬｎ単位データ内シフト数生成回路を用いて、単位データ長ＵＬとなる要素数の要素集合単位のシフト数ｓを決定することにしてもよい。例えば、単位データ長ＵＬが「ＵＬ＝３」の場合、シフト数生成回路１３０１は、ＵＬ４単位データ内シフト数生成回路１５０３を用いて、要素集合単位のシフト数ｓを決定することにしてもよい。
【０１７６】
以下、単位データ長ＵＬよりも大きい要素数に対応するＵＬｎ単位データ内シフト数生成回路を用いて、単位データ長ＵＬとなる要素数の要素集合単位のシフト数ｓを決定する場合について説明する。まず、図１７を用いて、図３に示した演算部３０１の回路構成例について説明する。
【０１７７】
図１７は、演算部３０１の回路構成例を示す説明図である。図１７において、演算部３０１は、ｍｕｘ１７０１〜１７１６と、演算器１７２１〜１７２８と、を含む。図１７の例では、データ処理幅Ｌを「Ｌ＝８」とし、ソース（０）を「ａ［０］〜ａ［７］」とし、ソース（１）を「ｂ［０］〜ｂ［７］」とする。
【０１７８】
例えば、ｍｕｘ１７０１は、ソース（０）が入力され、命令に応じてソース（０）からいずれかの要素を選択して、演算器１７２１に出力する選択回路である。同様に、ｍｕｘ１７０３，１７０５，１７０７，１７０９，１７１１，１７１３，１７１５は、ソース（０）が入力され、命令に応じてソース（０）からいずれかの要素を選択して、演算器１７２２〜１７２８にそれぞれ出力する選択回路である。
【０１７９】
また、例えば、ｍｕｘ１７０２は、ソース（１）が入力され、命令に応じてソース（１）からいずれかの要素を選択して、演算器１７２１に出力する選択回路である。同様に、ｍｕｘ１７０４，１７０６，１７０８，１７１０，１７１２，１７１４，１７１６は、ソース（１）が入力され、命令に応じてソース（１）からいずれかの要素を選択して、演算器１７２２〜１７２８にそれぞれ出力する選択回路である。
【０１８０】
また、例えば、演算器１７２１は、ｍｕｘ１７０１，１７０２からそれぞれ入力される要素同士の乗算を行って、演算結果であるｃ［０］を出力する。同様に、演算器１７２２〜１７２８は、入力される要素同士の乗算を行って、演算結果であるｃ［１］〜ｃ［７］を出力する。
【０１８１】
以下、図１８および図１９を用いて、データ処理幅Ｌが「Ｌ＝８」の場合を例に挙げて、演算部３０１のデータパスの構成例について説明する。
【０１８２】
図１８は、データパスの構成例を示す説明図（その１）である。図１８の例では、命令に応じて定まる単位データ長ＵＬを「ＵＬ＝４」とし、ソース（０）を「ａ［０］〜ａ［７］」とし、ソース（１）を「ｂ［０］〜ｂ［７］」とする。この場合、２ＳＩＭＤ（２＝８／４）でデータパスが構成される。
【０１８３】
具体的には、ソース（０）の先頭から４個の要素ａ［０］〜ａ［３］が演算器１７２１〜１７２４にそれぞれ入力され、ソース（１）の先頭から４個の要素ｂ［０］〜ｂ［３］が演算器１７２１〜１７２４にそれぞれ入力される。そして、各演算器１７２１〜１７２４によって要素同士の乗算が行われ、演算結果であるｃ［０］〜ｃ［３］が出力される。
【０１８４】
また、ソース（０）の後続の４個の要素ａ［４］〜ａ［７］が演算器１７２５〜１７２８にそれぞれ入力され、ソース（１）の後続の４個の要素ｂ［４］〜ｂ［７］が演算器１７２５〜１７２８にそれぞれ入力される。そして、各演算器１７２５〜１７２８によって要素同士の乗算が行われ、演算結果であるｃ［４］〜ｃ［７］が出力される。
【０１８５】
図１９は、データパスの構成例を示す説明図（その２）である。図１９の例では、命令に応じて定まる単位データ長ＵＬを「ＵＬ＝３」とし、ソース（０）を「ａ［０］〜ａ［５］」とし、ソース（１）を「ｂ［０］〜ｂ［５］」とする。この場合、単位データ長ＵＬに対応するＵＬ３単位データ内シフト数生成回路がシフト数生成回路１３０１に存在しない。
【０１８６】
このため、シフト数生成回路１３０１は、単位データ長ＵＬ「３」よりも大きい要素数「４」に対応するＵＬ４単位データ内シフト数生成回路１５０３（図１５参照）を用いて、要素集合単位のシフト数ｓを決定する。すなわち、２ＳＩＭＤ（２＝８／４）でデータパスが構成される。
【０１８７】
シフト数生成回路１３０１は、演算器１７２１〜１７２４の入り口にあるｍｕｘ１７０１〜１７１６で２のべき乗にアラインされるよう、ソース（０）、ソース（１）から要素を選択して演算を行う。具体的には、ソース（０）の先頭から３個の要素ａ［０］〜ａ［２］が演算器１７２１〜１７２３にそれぞれ入力され、ソース（１）の先頭から３個の要素ｂ［０］〜ｂ［２］が演算器１７２１〜１７２３にそれぞれ入力される。そして、各演算器１７２１〜１７２３によって要素同士の乗算が行われ、演算結果であるｃ［０］〜ｃ［２］が出力される。
【０１８８】
また、ソース（０）の後続の３個の要素ａ［３］〜ａ［５］が演算器１７２５〜１７２７にそれぞれ入力され、ソース（１）の後続の３個の要素ｂ［３］〜ｂ［５］が演算器１７２５〜１７２７にそれぞれ入力される。そして、各演算器１７２５〜１７２７によって要素同士の乗算が行われ、演算結果であるｃ［３］〜ｃ［５］が出力される。すなわち、シフト数生成回路１３０１は、先頭から４番目、８番目の演算器１７２４，１７２８を飛ばすように、ソース（０）、ソース（１）から要素を選択して演算を行う。
【０１８９】
これにより、単位データ長ＵＬよりも大きい要素数に対応するＵＬｎ単位データ内シフト数生成回路を用いる際に、各要素の入力先となるＵＬｎ単位データ内シフト数生成回路を適切に調整することができる。この結果、単位データ長ＵＬが２のべき乗以外の要素数ｎ（ｎ＝３，５，６，７，９，１０，１１，１２，１３，１４，１５）であっても、単位データ長ＵＬに応じたデータ単位ブロック正規化処理を実現することができる。
【０１９０】
また、ＵＬｎ単位データ内シフト数生成回路を２のべき乗に制限することで、２のべき乗以外の単位データ長ＵＬに応じたデータ単位ブロック正規化処理を行う際にＳＩＭＤ幅（並列度）が減りにくく、データ処理装置１００の処理性能の低下を抑制することができる。
【０１９１】
例えば、実施例１のデータ処理装置１００に比べて、単位データ長ＵＬが「ＵＬ＝３」の場合は、ＳＩＭＤ幅が５ＳＩＭＤから４ＳＩＭＤに減り、単位データ長ＵＬが「ＵＬ＝５」の場合は、ＳＩＭＤ幅が３ＳＩＭＤから２ＳＩＭＤに減って処理性能が低下する。しかし、単位データ長ＵＬが「ＵＬ＝３，５」の場合以外は、実施例１のデータ処理装置１００に比べて、ＳＩＭＤ幅を減らすことなくデータ単位ブロック正規化処理を実現することができる。
【０１９２】
ただし、上述した説明では、ＵＬｎ単位データ内シフト数生成回路を２のべき乗に制限することにしたが、これに限らない。例えば、ＵＬｎ単位データ内シフト数生成回路を、データ処理幅Ｌを上限として取り得る２以外の数（例えば、３）のべき乗に制限したり、奇数や偶数の要素数ｎに制限することにしてもよい。
【０１９３】
（実施例３）
つぎに、データ処理装置１００の実施例３について説明する。実施例３では、データ処理装置１００の回路量を抑えるために、ＤＣＬＳＳモードオンとＤＣＬＳＳモードオフとでシフター１３０２を共有する場合について説明する。
【０１９４】
図２０は、実施例３にかかるデータ処理装置１００の回路構成例を示す説明図である。図２０において、データ処理装置１００は、シフト数生成回路１３０１と、シフター１３０２と、ｍｕｘ２００１〜２０１６を含む。ただし、図２０では、データ処理装置１００の回路構成の一部を抜粋して表示している。
【０１９５】
シフト数生成回路１３０１は、要素ｃ［０］〜ｃ［１５］が入力され、各要素ｃ［０］〜ｃ［１５］のシフト数ｓを決定して、決定した各要素ｃ［０］〜ｃ［１５］のシフト数ｓを対応するｍｕｘ２００１〜２０１６にそれぞれ出力する。
【０１９６】
ｍｕｘ２００１〜２０１６は、各要素ｃ［０］〜ｃ［１５］に対応する選択回路である。例えば、ｍｕｘ２００１は、要素ｃ［０］のシフト数ｓと、ストリームデータ単位のシフト数Ｓとが入力され、ＤＣＬＳＳモードに応じて、シフト数ｓまたはシフト数Ｓのいずれかを、要素ｃ［０］のシフト数ｓ０としてシフター１３０２に出力する。
【０１９７】
具体的には、ＤＣＬＳＳモードオンの場合は、ｍｕｘ２００１は、シフト数ｓをシフター１３０２に出力する。一方、ＤＣＬＳＳモードオフの場合は、ｍｕｘ２００１は、シフト数Ｓをシフター１３０２に出力する。なお、ＤＣＬＳＳモードは、例えば、図６に示した命令デコーダ６０１によって設定される。
【０１９８】
同様に、ｍｕｘ２００２〜２０１６は、各要素ｃ［１］〜ｃ［１５］のシフト数ｓとシフト数Ｓとが入力され、ＤＣＬＳＳモードに応じて、シフト数ｓまたはシフト数Ｓのいずれかを、各要素ｃ［１］のシフト数ｓ１〜ｓ１５としてシフター１３０２に出力する。
【０１９９】
シフター１３０２は、要素ｃ［０］〜ｃ［１５］とシフト数ｓ０〜ｓ１５とが入力され、各要素ｃ［０］〜ｃ［１５］の値を、各シフト数ｓ０〜ｓ１５に対する各要素の仮数値ｃ’［０］〜ｃ’［１５］に変換する。すなわち、ＤＣＬＳＳモードオンの場合には、シフター１３０２は、単位データ長ＵＬとなる要素数単位の要素集合ごとに、要素集合に含まれる各要素の値を、シフト数生成回路１３０１によって決定された要素集合単位のシフト数ｓに対する仮数値に変換する。
【０２００】
一方、ＤＣＬＳＳモードオフの場合には、シフター１３０２は、要素ｃ［０］〜ｃ［１５］に含まれる各要素の値をシフト数Ｓに対する仮数値に変換する。なお、要素集合単位のシフト数ｓは、例えば、図１４に示したシフト数生成回路１３０１のｍｕｘ１４２１〜１４３６や図１５に示したシフト数生成回路１３０１のｍｕｘ１５１１〜１５２６によってそれぞれ選択されたシフト数ｓである。
【０２０１】
実施例３にかかるデータ処理装置１００によれば、ＤＣＬＳＳモードオンとＤＣＬＳＳモードオフとでシフター１３０２を共有することができる。これにより、整数ストリームを入力として仮数部ストリームと指数部ストリームとを出力するＤＣＬＳＳモードを回路量の増加を抑えつつ実現することができる。
【０２０２】
（実施例４）
つぎに、データ処理装置１００の実施例４について説明する。実施例４では、要素ｃ［０］〜ｃ［１５］に含まれる各要素が、整数ではなく、浮動小数点で表される場合であっても、適切に要素集合単位のシフト数ｓと各要素ｃ［０］〜ｃ［１５］の指数値ｓ０〜ｓ１５を出力可能なシフト数生成回路１３０１について説明する。
【０２０３】
具体的には、例えば、シフト数生成回路１３０１は、要素ｃ［０］〜ｃ［１５］の先頭から、単位データ長ＵＬとなる要素数単位の要素集合ごとに、要素集合に含まれる各要素の指数値ｅのうちの最大の指数値ｓ＿ｍａｘを要素集合単位のシフト数ｓに決定する。そして、シフター１３０２は、要素集合ごとに、要素集合に含まれる各要素の仮数値ｆを、最大の指数値ｓ＿ｍａｘから各要素の指数値ｅを減算した減算後の指数値に対する各要素の仮数値に変換する。
【０２０４】
ここで、図２１を用いて、シフト数生成回路１３０１の動作例について説明する。ただし、図２１の例では、シフト数生成回路１３０１内のＵＬｎ単位データ内シフト数生成回路のうち、ＵＬ３単位データ内シフト数生成回路１４０３−１（図１４参照）を例に挙げて説明する。また、単位データ長ＵＬを「ＵＬ＝３」とする。
【０２０５】
図２１は、実施例４にかかるシフト数生成回路１３０１のＵＬｎ単位データ内シフト数生成回路の動作例を示す説明図である。図２１において、ＵＬ３単位データ内シフト数生成回路１４０３−１に、単位データ長ＵＬとなる３個単位の要素集合ｃ［０］〜ｃ［２］が入力されている。
【０２０６】
ここで、各要素ｃ［０］〜ｃ［２］は、下記式（１４）〜（１６）に示すように、仮数値ｆと指数値ｅを持つ浮動小数点で表されている。
【０２０７】
ｃ［０］＝（ｆ０，ｅ０）      ・・・（１４）
ｃ［１］＝（ｆ１，ｅ１）      ・・・（１５）
ｃ［２］＝（ｆ２，ｅ２）      ・・・（１６）
【０２０８】
この場合、ＵＬ３単位データ内シフト数生成回路１４０３−１は、例えば、下記式（１７）を用いて、入力された各要素ｃ［０］〜ｃ［２］の指数値ｅ０〜ｅ２のうちの最大の指数値ｓ＿ｍａｘを特定する。
【０２０９】
ｓ＿ｍａｘ＝ｍａｘ（ｅ０，ｅ１，ｅ２）      ・・・（１７）
【０２１０】
そして、ＵＬ３単位データ内シフト数生成回路１４０３−１は、特定した最大の指数値ｓ＿ｍａｘを、要素集合単位のシフト数ｓに決定して出力する。また、ＵＬ３単位データ内シフト数生成回路１４０３−１は、例えば、下記式（１８）〜（２０）を用いて、最大の指数値ｓ＿ｍａｘから各要素ｃ［０］〜ｃ［２］の指数値ｅ０〜ｅ２を減算することにより、各要素ｃ［０］〜ｃ［２］の指数値ｓ０〜ｓ２を算出して、シフター１３０２に出力する。
【０２１１】
ｓ０＝ｓ＿ｍａｘ−ｅ０      ・・・（１８）
ｓ１＝ｓ＿ｍａｘ−ｅ１      ・・・（１９）
ｓ２＝ｓ＿ｍａｘ−ｅ２      ・・・（２０）
【０２１２】
これにより、各要素ｃ［０］〜ｃ［２］が、浮動小数点で表される場合であっても、適切に要素集合単位のシフト数ｓ（ｓ＿ｍａｘ）と各要素ｃ［０］〜ｃ［２］の指数値ｓ０〜ｓ２を出力することができる。この場合、シフター１３０２は、各要素ｃ［０］〜ｃ［２］の仮数値ｆ０〜ｆ２を、入力された各指数値ｓ０〜ｓ２に対する各要素の仮数値ｃ’［０］〜ｃ’［２］に変換する。
【０２１３】
なお、上述した説明では、シフト数生成回路１３０１内のＵＬ３単位データ内シフト数生成回路１４０３−１を例に挙げて説明したが、他のＵＬｎ単位データ内シフト数生成回路（図１４，図１５参照）についても同様である。
【０２１４】
実施例４にかかるデータ処理装置１００によれば、各要素ｃ［０］〜ｃ［１５］が浮動小数点で表される場合であっても、単位データ長ＵＬとなる要素集合単位のシフト数ｓと各要素ｃ［０］〜ｃ［１５］の指数値ｓ０〜ｓ１５を出力することができる。これにより、一連の要素に含まれる各要素が浮動小数点で表される場合であっても、単位データ長ＵＬに応じたデータ単位ブロック正規化処理を実現することができる。
【０２１５】
なお、本実施の形態で説明したデータ処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本データ処理プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本データ処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【０２１６】
また、本実施の形態で説明したデータ処理装置１００は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、例えば、上述したデータ処理装置１００の各機能部をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、データ処理装置１００を製造することができる。
【０２１７】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０２１８】
（付記１）単位データが行列形式のストリームデータ間の行列演算を行う演算部と、
前記演算部の行列演算により得られる行列ごとに、前記行列に含まれる各要素の値に基づいて、前記各要素を浮動小数点で表す場合の行列単位の指数値を決定する決定部と、
前記各要素の値を、前記決定部によって決定された前記行列単位の指数値に対する前記各要素の仮数値に変換する変換部と、
前記変換部によって前記各要素の値が変換された変換後の行列と前記行列単位の指数値とを対応付けて出力する出力部と、
を有することを特徴とするデータ処理装置。
【０２１９】
（付記２）前記決定部は、
前記演算部の行列演算により得られる行列ごとに、前記行列に含まれる複数の要素のうちの絶対値が最大の要素を浮動小数点で表す場合の指数値を前記行列単位の指数値に決定することを特徴とする付記１に記載のデータ処理装置。
【０２２０】
（付記３）前記ストリームデータは、前記変換部によって前記各要素の値が変換された変換後の行列の配列と、前記決定部によって決定された前記行列単位の指数値の配列とを含み、
前記演算部は、
前記ストリームデータ間の行列加算演算を行う場合、前記ストリームデータ間の対応する第１および第２の指数値の差分に基づいて、前記ストリームデータ間の対応する第１および第２の行列のいずれか一方の行列に含まれる各要素の値をシフトして、前記ストリームデータ間の行列加算演算を行うことを特徴とする付記１または２に記載のデータ処理装置。
【０２２１】
（付記４）前記演算部は、
前記第２の指数値から前記第１の指数値を減算した値が正の場合は前記第１の行列を前記値に基づいてシフトし、前記値が負の場合は前記第２の行列を前記値に基づいてシフトすることを特徴とする付記３に記載のデータ処理装置。
【０２２２】
（付記５）前記決定部は、
前記演算部の行列演算により得られる一連の要素の先頭から、命令に対応する単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値に基づいて、当該各要素を浮動小数点で表す場合の要素集合単位の指数値を決定し、
前記変換部は、
前記要素集合ごとに、前記要素集合に含まれる各要素の値を、前記決定部によって決定された要素集合単位の指数値に対する前記各要素の仮数値に変換し、
前記出力部は、
前記変換部によって変換された変換後の前記要素集合に含まれる各要素の値と、前記決定部によって決定された要素集合単位の指数値とを対応付けて出力することを特徴とする付記１〜４のいずれか一つに記載のデータ処理装置。
【０２２３】
（付記６）前記決定部は、
前記一連の要素に含まれる要素の総数を上限として取り得る要素数それぞれについて、前記一連の要素の先頭から要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値に基づいて、当該各要素を浮動小数点で表す場合の要素集合単位の指数値を決定する決定回路と、
前記一連の要素に含まれる要素それぞれについて、前記決定回路によって前記要素数それぞれについて決定された要素集合単位の指数値の中から、命令に対応する単位データ長となる要素数の要素集合単位の指数値を選択する選択回路と、を含み、
前記変換部は、
前記一連の要素に含まれる要素それぞれについて、当該要素の値を、前記選択回路によって選択された要素集合単位の指数値に対する前記要素の仮数値に変換するシフト回路を含むことを特徴とする付記５に記載のデータ処理装置。
【０２２４】
（付記７）前記決定部は、
前記一連の要素に含まれる要素の総数を上限として取り得る２のべき乗の要素数それぞれについて、前記一連の要素の先頭から要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値に基づいて、当該各要素を浮動小数点で表す場合の要素集合単位の指数値を決定する決定回路と、
前記一連の要素に含まれる要素それぞれについて、前記決定回路によって前記要素数それぞれについて決定された要素集合単位の指数値の中から、命令に対応する単位データ長となる要素数の要素集合単位の指数値を選択する選択回路と、を含み、
前記変換部は、
前記一連の要素に含まれる要素それぞれについて、当該要素の値を、前記選択回路によって選択された要素集合単位の指数値に対する前記要素の仮数値に変換することを特徴とする付記５に記載のデータ処理装置。
【０２２５】
（付記８）前記変換部は、
選択可能な第１のモードおよび第２のモードのうち、前記第１のモードが選択された場合は、前記単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値を、前記決定部によって決定された要素集合単位の指数値に対する前記各要素の仮数値に変換し、前記第２のモードが選択された場合は、前記一連の要素に含まれる各要素の値を、入力される一連の要素単位の指数値に対する前記各要素の仮数値に変換するシフト回路を含むことを特徴とする付記５〜７のいずれか一つに記載のデータ処理装置。
【０２２６】
（付記９）前記決定部は、
前記一連の要素に含まれる要素それぞれが浮動小数点で表される場合、前記一連の要素の先頭から、前記単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の指数値のうちの最大の指数値を要素集合単位の指数値に決定し、
前記変換部は、
前記要素集合ごとに、前記要素集合に含まれる各要素の仮数値を、前記最大の指数値から前記各要素の指数値を減算した減算後の指数値に対する前記各要素の仮数値に変換することを特徴とする付記５〜８のいずれか一つに記載のデータ処理装置。
【０２２７】
（付記１０）コンピュータが、
単位データが行列形式のストリームデータ間の行列演算を行い、
前記ストリームデータ間の行列演算により得られる行列ごとに、前記行列に含まれる各要素の値に基づいて、前記各要素を浮動小数点で表す場合の行列単位の指数値を決定し、
前記各要素の値を前記行列単位の指数値に対する前記各要素の仮数値に変換し、
前記各要素の値が変換された変換後の行列と前記行列単位の指数値とを対応付けて出力する、
処理を実行することを特徴とするデータ処理方法。
【０２２８】
（付記１１）コンピュータに、
単位データが行列形式のストリームデータ間の行列演算を行い、
前記ストリームデータ間の行列演算により得られる行列ごとに、前記行列に含まれる各要素の値に基づいて、前記各要素を浮動小数点で表す場合の行列単位の指数値を決定し、
前記各要素の値を前記行列単位の指数値に対する前記各要素の仮数値に変換し、
前記各要素の値が変換された変換後の行列と前記行列単位の指数値とを対応付けて出力する、
処理を実行させることを特徴とするデータ処理プログラム。
【符号の説明】
【０２２９】
１００  データ処理装置
２００  コンピュータシステム
３０１  演算部
３０２  決定部
３０３  変換部
３０４  出力部
１３０１  シフト数生成回路
１３０２  シフター
【図１】
2014179065.tif 000006
【図２】
2014179065.tif 000007
【図３】
2014179065.tif 000008
【図４】
2014179065.tif 000009
【図５】
2014179065.tif 000010
【図６】
2014179065.tif 000011
【図７】
2014179065.tif 000012
【図８】
2014179065.tif 000013
【図９】
2014179065.tif 000014
【図１０】
2014179065.tif 000015
【図１１】
2014179065.tif 000016
【図１２】
2014179065.tif 000017
【図１３】
2014179065.tif 000018
【図１４】
2014179065.tif 000019
【図１５】
2014179065.tif 000020
【図１６Ａ】
2014179065.tif 000021
【図１６Ｂ】
2014179065.tif 000022
【図１７】
2014179065.tif 000023
【図１８】
2014179065.tif 000024
【図１９】
2014179065.tif 000025
【図２０】
2014179065.tif 000026
【図２１】
2014179065.tif 000027