JP6225687B2 - データ処理装置、およびデータ処理方法 - Google Patents

データ処理装置、およびデータ処理方法 Download PDF

Info

Publication number
JP6225687B2
JP6225687B2 JP2013257371A JP2013257371A JP6225687B2 JP 6225687 B2 JP6225687 B2 JP 6225687B2 JP 2013257371 A JP2013257371 A JP 2013257371A JP 2013257371 A JP2013257371 A JP 2013257371A JP 6225687 B2 JP6225687 B2 JP 6225687B2
Authority
JP
Japan
Prior art keywords
unit
value
data
elements
matrix
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2013257371A
Other languages
English (en)
Other versions
JP2014179065A (ja
Inventor
毅 葛
毅 葛
登 小林
登 小林
博 畑農
博 畑農
靖弘 尾山
靖弘 尾山
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2013257371A priority Critical patent/JP6225687B2/ja
Priority to US14/167,253 priority patent/US9658986B2/en
Publication of JP2014179065A publication Critical patent/JP2014179065A/ja
Application granted granted Critical
Publication of JP6225687B2 publication Critical patent/JP6225687B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/14Conversion to or from non-weighted codes
    • H03M7/24Conversion to or from floating-point codes

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Description

本発明は、データ処理装置、データ処理方法およびデータ処理プログラムに関する。
無線通信信号処理などにおいて、大量の行列演算処理が必要となる場合がある。例えば、無線通信信号処理の方式であるLTE(Long Term Evolution)−Advancedにおいては、行列演算が全体の演算量の多くを占めている。また、大量の行列演算処理が必要となるような配列型データを扱うには、配列処理アーキテクチャが適している。
従来、配列型データを扱うプロセッサとしては、例えば、SIMD(Single Instruction Multiple Data)方式やベクトル方式のプロセッサがある。これらプロセッサの命令セットが扱う配列型データはスカラ値の配列であり、単位データはスカラ値である。また、組み込みプロセッサにおいては、命令セットで整数値のみを扱うことで回路規模を小さくすることが行われている。
関連する先行技術としては、例えば、演算装置として浮動小数点演算器を使用しないで整数演算器のみを使用して浮動小数点のシフト演算を行う技術がある。また、例えば、複数の浮動小数点数演算(FP)パイプラインにより、スケジューラがディスパッチしたベクトル入力のスカラ成分に対して演算を行うことで得られるFP結果を生成して出力バッファに書き込む技術がある。また、最大指数検出装置で各浮動小数点レジスタに保持される浮動小数点数の最大指数を検出し、各仮数シフト装置で最大指数と各々の指数との差分で仮数をシフトし、各符号化装置で符号化を行い、相対的大きさを保持する整数に変換する技術がある。
特開2005−31848号公報 特表2009−505301号公報 特開平08−101919号公報
しかしながら、従来技術では、命令セットで整数値のみを扱う場合、プロセッサの回路面積を抑えることができる一方で、演算精度が低下してしまう場合があるという問題がある。例えば、命令セットで整数値のみを扱う場合、乗算などを行うと演算結果を表現するために必要なビット数が一度に増加してしまい、アプリケーションによってはダイナミックレンジが不足してしまう場合がある。
1つの側面では、本発明は、回路規模の増大化を抑制するとともに演算精度の向上を図るデータ処理装置、データ処理方法およびデータ処理プログラムを提供することを目的とする。
本発明の一側面によれば、単位データが行列形式のストリームデータ間の行列演算を行い、前記ストリームデータ間の行列演算により得られる行列ごとに、前記行列に含まれる各要素の値に基づいて、前記各要素を浮動小数点で表す場合の行列単位の指数値を決定し、前記各要素の値を前記行列単位の指数値に対する前記各要素の仮数値に変換し、前記各要素の値が変換された変換後の行列と前記行列単位の指数値とを対応付けて出力するデータ処理装置、データ処理方法およびデータ処理プログラムが提案される。
本発明の一態様によれば、回路規模の増大化を抑制するとともに演算精度の向上を図ることができるという効果を奏する。
図1は、実施の形態1にかかるデータ処理方法の一実施例を示す説明図である。 図2は、コンピュータシステム200のハードウェア構成例を示すブロック図である。 図3は、実施の形態1にかかるデータ処理装置100の機能的構成例を示す説明図である。 図4は、実施の形態1にかかるデータ処理装置100の決定部302および変換部303の具体的な処理内容の一例を示す説明図である。 図5は、データ処理装置100の回路構成例を示す説明図である。 図6は、データ処理装置100のハードウェア構成例を示す説明図である。 図7は、DMA604の内部構成例を示す説明図である。 図8は、データ処理装置100のデータ処理手順の一例を示すフローチャートである。 図9は、22行列乗算の具体的処理手順の一例を示すフローチャートである。 図10は、22行列加算の具体的処理手順の一例を示すフローチャートである。 図11は、22逆行列演算の具体的処理手順の一例を示すフローチャートである。 図12は、データ処理装置100の適用例を示す説明図である。 図13は、実施の形態2にかかるデータ処理装置100の決定部302および変換部303の具体的な処理内容を示す説明図である。 図14は、実施例1にかかるシフト数生成回路1301の回路構成例を示す説明図である。 図15は、実施例2にかかるシフト数生成回路1301の回路構成例を示す説明図である。 図16Aは、シフト数生成回路1301の回路構成の比較例を示す説明図(その1)である。 図16Bは、シフト数生成回路1301の回路構成の比較例を示す説明図(その2)である。 図17は、演算部301の回路構成例を示す説明図である。 図18は、データパスの構成例を示す説明図(その1)である。 図19は、データパスの構成例を示す説明図(その2)である。 図20は、実施例3にかかるデータ処理装置100の回路構成例を示す説明図である。 図21は、実施例4にかかるシフト数生成回路1301のULn単位データ内シフト数生成回路の動作例を示す説明図である。
以下に図面を参照して、本発明にかかるデータ処理装置、データ処理方法およびデータ処理プログラムの実施の形態を詳細に説明する。
(実施の形態1)
(データ処理方法の一実施例)
図1は、実施の形態1にかかるデータ処理方法の一実施例を示す説明図である。図1において、データ処理装置100は、ストリーム型処理を行うコンピュータである。ストリーム型処理とは、メモリから一連のデータ(配列型データ)を順次読み出して演算を行い、一連の演算結果をメモリに順次書き込む処理である。
また、データ処理装置100は、命令セットとして、単位データを扱う命令群を有する。単位データは、例えば、行列形式(または、ベクトル形式)のデータである。命令は、例えば、乗算命令、加算命令、逆行列(除算)命令などである。
ここで、無線通信信号処理などにおいては、大量の行列演算処理が必要となる場合がある。このような場合に、命令セットで整数値のみを扱うと、プロセッサの回路面積を抑えることができる一方で演算精度の低下を招いてしまう。このため、配列型データを浮動小数点で表現することが行われる。
一例として、2×2行列の1000個のデータの配列Mを浮動小数点で表現する場合を想定する。なお、図1中、「f」は、行列に含まれる各要素を浮動小数点で表す場合の仮数部の値を表している。また、図1中、「e」は、行列に含まれる各要素を浮動小数点で表す場合の指数部の値を表している。また、以下の説明では、仮数部の値を「仮数値」と表記し、指数部の値を「指数値」と表記する場合がある。
この場合、図1中(a)に示すように、配列Mに含まれる各数値を浮動小数点として処理する場合は、高い演算精度を確保できる一方で、プロセッサが命令セットで浮動小数点をサポートしている必要があり回路面積が大きくなる。また、図1中(b)に示すように、配列M全体を整数シフト命令で一度にシフトさせてから演算を行う場合、配列M全体で絶対値が最大の数値によりシフト量が決定されるため絶対値が小さい数値の演算精度が低下する場合がある。
そこで、本実施の形態では、データ処理装置100は、配列Mに含まれる行列ごとに行列単位の指数部を割り当てることにより、配列Mの行列演算処理を行う。これにより、配列Mに含まれる各数値を浮動小数点として処理する場合に比べて回路規模の増大化を抑制するとともに、配列M全体を整数シフト命令で一度にシフトさせてから演算を行う場合よりも高い演算精度を実現する。
(コンピュータシステム200のハードウェア構成例)
つぎに、データ処理装置100が適用されるコンピュータシステム200のハードウェア構成例について説明する。コンピュータシステム200は、例えば、スマートフォン、携帯電話機、タブレット型PC(Personal Computer)、PHS(Personal Handy−phone System)などである。
図2は、コンピュータシステム200のハードウェア構成例を示すブロック図である。図2において、コンピュータシステム200は、CPU(Central Processing Unit)201と、メモリ202と、I/F(Interface)203と、を有する。また、各構成部はバス210によってそれぞれ接続されている。
ここで、CPU201は、コンピュータシステム200の全体の制御を司る。メモリ202は、例えば、ROM(Read Only Memory)、RAM(Random Access Memory)およびフラッシュROMなどを有している。より具体的には、例えば、フラッシュROMがOSやファームウェアなどのプログラムを記憶し、ROMがアプリケーションプログラムを記憶し、RAMがCPU201のワークエリアとして使用される。メモリ202に記憶されているプログラムは、CPU201にロードされることで、コーディングされている処理をCPU201に実行させることになる。
I/F203は、他の装置からのデータの入出力を制御する。具体的には、例えば、I/F203は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワークに接続され、このネットワークを介して他の装置に接続される。そして、I/F203は、ネットワークと内部のインターフェースを司り、他の装置からのデータの入出力を制御する。なお、コンピュータシステム200は、上述した構成部のほかに、例えば、磁気ディスクドライブ、磁気ディスク、ディスプレイ、キーボード、マウスなどを有することにしてもよい。
(データ処理装置100の機能的構成例)
つぎに、実施の形態1にかかるデータ処理装置100の機能的構成例について説明する。図3は、実施の形態1にかかるデータ処理装置100の機能的構成例を示す説明図である。図3において、データ処理装置100は、演算部301と、決定部302と、変換部303と、出力部304と、を含む構成である。具体的には、例えば、各機能部は、論理積回路であるAND、否定論理回路であるINVERTER、論理和回路であるOR、論理和否定回路であるNORや、ラッチ回路であるFF(Flip Flop)などの素子によって形成されてもよい。また、各機能部は、例えば、Verilog−HDL(Hardware Description Language)などの記述によって機能定義し、その記述を論理合成してFPGA(Field Programmable Gate Array)によって実現してもよい。また、各機能部は、例えば、図2に示したメモリ202に記憶されたプログラムをCPU201に実行させることにより、または、I/F203により、その機能を実現することにしてもよい。
演算部301は、ストリームデータD間の行列演算を行う。ここで、ストリームデータDは、単位データが行列形式の配列型データである。行列演算は、例えば、行列乗算、行列加算、逆行列(行列除算)などである。ストリームデータDに含まれる行列の各要素の値は、例えば、整数値である。
以下の説明では、演算対象となる2つのストリームデータDを「ソース(0)」および「ソース(1)」と表記する場合がある。この場合、演算部301は、ソース(0)に含まれる行列とソース(1)に含まれる行列との行列演算を各ソースの先頭の行列から末尾の行列まで順に行う。ただし、演算対象となるストリームデータDは3つ以上であってもよい。
決定部302は、演算部301の行列演算により得られる行列ごとに、行列に含まれる各要素の値に基づいて、各要素を浮動小数点で表す場合の行列単位の指数値を決定する。指数値は、各要素を浮動小数点で表す場合の指数部の値である。具体的には、例えば、決定部302は、演算部301の行列演算により得られる行列ごとに、行列に含まれる複数の要素のうちの絶対値が最大の要素を浮動小数点で表す場合の指数値を行列単位の指数値に決定することにしてもよい。
より具体的には、例えば、まず、決定部302は、行列に含まれる複数の要素のうち絶対値が最大となる要素を特定する。つぎに、決定部302は、絶対値が最大となる要素の値を正規化して仮数値と指数値とを算出する。仮数値は、要素を浮動小数点で表す場合の仮数部の値である。そして、決定部302は、絶対値が最大となる要素の指数値を行列単位の指数値に決定する。すなわち、決定部302は、行列に含まれる各要素を浮動小数点で表す場合の指数値を行列単位で統一する。なお、決定部302の具体的な処理内容については、図4を用いて後述する。
変換部303は、行列に含まれる各要素の値を、決定部302によって決定された行列単位の指数値に対する各要素の仮数値に変換する。具体的には、例えば、変換部303は、行列に含まれる各要素の値を、行列単位の指数値でシフトした値(仮数値)に変換する。なお、変換部303の具体的な処理内容については、図4を用いて後述する。
出力部304は、変換部303によって各要素の値が変換された変換後の行列と、決定部302によって決定された行列単位の指数値とを対応付けて出力する。具体的には、例えば、出力部304は、演算部301の行列演算により得られる行列ごとに、行列に含まれる各要素の値が変換された変換後の行列と行列単位の指数値とを対応付けてメモリ(例えば、後述の図6に示すデータメモリ606)に順次書き込む。
これにより、変換部303によって行列に含まれる各要素の値が変換された変換後の行列の配列(以下、「仮数部ストリーム」と表記する場合がある。)と、決定部302によって決定された行列単位の指数値の配列(以下、「指数部ストリーム」と表記する場合がある。)とが出力される。
また、演算部301は、出力部304によって出力された仮数部ストリームと指数部ストリームとを含むストリームデータDの行列演算を行うことにしてもよい。具体的には、例えば、演算部301は、ストリームデータD間の行列乗算演算を行う場合、仮数部ストリーム同士を行列乗算し、指数部ストリーム同士をベクトル加算する。
また、演算部301は、ストリームデータD間の行列加算演算を行う場合、ストリームデータD間の対応する指数値の差分に基づいて、ストリームデータD間の対応する行列のいずれか一方の行列に含まれる各要素の値をシフトして、ストリームデータD間の行列加算演算を行う。これにより、演算対象となる行列同士の指数値を合わせることができる。なお、仮数部ストリームと指数部ストリームとを含むストリームデータDの行列演算を行う際の演算部301の具体的な処理内容については後述する。
また、変換部303は、行列に含まれる各要素の値を、ストリームデータD単位の指数値に対する各要素の仮数値に変換することにしてもよい。ストリームデータD単位の指数値は、例えば、命令の即値ソースオペランドとして任意に設定可能である。
具体的には、例えば、変換部303は、行列に含まれる各要素の値を、ストリームデータD単位の指数値でシフトした値に変換する。この場合、出力部304は、変換部303によって行列に含まれる各要素の値が変換された変換後の行列と、ストリームデータD単位の指数値とを対応付けて出力することにしてもよい。なお、以下の説明では、ストリームデータD単位の指数値を「シフト数S」と表記する場合がある。
(決定部302および変換部303の具体的な処理内容)
つぎに、実施の形態1にかかるデータ処理装置100の決定部302および変換部303の具体的な処理内容について説明する。図4は、実施の形態1にかかるデータ処理装置100の決定部302および変換部303の具体的な処理内容の一例を示す説明図である。図4において、ソース(0)は、単位データが行列形式の配列型データである。a[0]〜a[L]は、ソース(0)に含まれる行列の各要素の値である。例えば、2×2の行列の場合、a[0]が1行1列の値となり、a[1]が1行2列の値となり、a[2]が2行1列の値となり、a[3]が2行2列の値となる。
また、ソース(1)は、単位データが行列形式の配列型データである。b[0]〜b[M]は、ソース(1)に含まれる行列の各要素の値である。ここでは、a[0]〜a[L]およびb[0]〜b[M]の各々の値は、wbitの整数値である(例えば、w=16)。
また、演算結果400は、ソース(0)に含まれる行列とソース(1)に含まれる行列との行列演算結果を表す行列である。c[0]〜c[N]は、演算結果400に含まれる各要素の値である。c[0]〜c[N]の各々の値は、(w+α)bitの整数値である(例えば、α=17,18)。L、M、Nの違いによる要素同士の演算の対応関係は、命令の種類により規定される。例えば、行列乗算命令の場合、ソース(0)が2x2行列、ソース(1)が2x1行列であれば、L、M、Nはそれぞれ3、1、1であり、c[1]=a[2]×b[0]+a[3]×b[1]となるなどである。
この場合、決定部302は、演算結果400に含まれる複数の要素のうち絶対値が最大となる要素を特定する。つぎに、決定部302は、絶対値が最大となる要素の値を正規化して仮数値と指数値とを算出する。そして、決定部302は、絶対値が最大となる要素の指数値を行列単位の指数値に決定する。以下の説明では、行列単位の指数値を「シフト数s」と表記する場合がある。
つぎに、変換部303は、演算結果400に含まれる各要素の値を、決定部302によって決定されたシフト数sでシフト演算して、各要素の仮数値c’[0]〜c’[N]を算出する。ここでは、c’[0]〜c’[N]の各々の値は、wbitの整数値である。そして、変換部303は、演算結果400に含まれる各要素の値を、算出した各要素の仮数値c’[0]〜c’[N]に変換する。
以下の説明では、行列に含まれる各要素を浮動小数点で表現する場合の行列単位の指数値を決定して、各要素の値を、行列単位の指数値に対する仮数値に変換する処理を「データ単位ブロック正規化処理」と表記する場合がある。
そして、出力部304は、各要素の仮数値c’[0]〜c’[N]を含む変換後の演算結果400とシフト数sとを対応付けて出力する。このように、ソース(0)に含まれる行列とソース(1)に含まれる行列との演算結果である行列ごとのデータ単位ブロック正規化処理を行うことで、仮数部ストリーム410と指数部ストリーム420とを出力することができる。
(データ処理装置100の回路構成例)
図5は、データ処理装置100の回路構成例を示す説明図である。図5において、データ処理装置100は、演算器群501と、ストリーム単位ブロックシフト部502と、データ単位ブロック正規化部503と、を有する。演算器群501は、ソース(0)とソース(1)との行列演算を行う。ストリームデータZは、ソース(0)とソース(1)との間の行列演算結果の配列である。演算器群501は、例えば、図3に示した演算部301に相当する。
ここで、データ処理装置100は、DCLSSモードオンと、DCLSSモードオフの2つのモードを有する。DCLSSモードオンは、整数ストリームを入力とし、仮数部ストリームと指数部ストリームとを出力するモードである。また、DCLSSモードオフは、整数ストリームを入力とし、整数ストリームを出力するモードである。
ユーザは、DCLSSモードオンまたはDCLSSモードオフのいずれかのモードを任意に選択可能である。具体的には、例えば、ユーザは、ストリームデータD間の行列乗算や行列除算を行う場合は、演算結果を表現するために必要なビット数が一度に増加する可能性が高いためにDCLSSモードオンを選択する。また、ユーザは、ストリームデータD間の行列加算を行う場合は、演算結果を表現するために必要なビット数が一度に増加する可能性が低いためにDCLSSモードオフを選択する。
具体的には、例えば、DCLSSモードオフが選択された場合、ストリーム単位ブロックシフト部502は、ストリームデータZに含まれる行列Z[22]ごとに、行列Z[22]に含まれる各要素の値をシフト数Sでシフト演算する。なお、[22]は2行2列を表している。そして、ストリーム単位ブロックシフト部502は、行列Z[22]に含まれる各要素の値を16bit整数値に変換する。ここでは、16bit整数値に変換された変換後の行列Z[22]を行列F[22]と表記する。ストリーム単位ブロックシフト部502は、例えば、図3に示した変換部303に相当する。
以下の説明では、行列に含まれる各要素の値をシフト数Sでシフトして、行列に含まれる各要素の値を16bit整数値に変換する処理を「ストリーム単位ブロックシフト処理」と表記する場合がある。
また、DCLSSモードオンが選択された場合、データ単位ブロック正規化部503は、ストリームデータZに含まれる行列Z[22]ごとにデータ単位ブロック正規化処理を行う。データ単位ブロック正規化部503は、例えば、図3に示した決定部302および変換部303に相当する。
ここで、行列Z[22]に含まれる各要素を「要素Z0〜Z3」とし、各要素Z0〜Z3の仮数値を「仮数値f0〜f3」とし、各要素Z0〜Z3の指数値を「指数値e0〜e3」とすると、行列Z[22]は、例えば、下記式(1)で表現される。
Figure 0006225687
また、行列Z[22]に含まれる要素Z0〜Z3のうち絶対値が最大となる要素を「要素Z1」とすると、行列Z[22]に含まれる全要素Z0〜Z3の指数部を「指数値e1」で統一すると、行列Z[22]は下記式(2)のようになる。
Figure 0006225687
また、行列Z’[22]に含まれる各要素Z’0、Z1、Z’2、Z’3の値を、指数値e1に対する仮数値に変換した変換後の行列F[22]は、下記式(3)のようになる。また、行列F[22]に対応する行列単位の指数値Eは下記式(4)のようになる。
Figure 0006225687
E=e1 ・・・(4)
一例として、行列Z[22]に含まれる要素Z0〜Z3の値を、以下のような32bitの整数値とする。
0=0x00134cff
1=0x12a84cff
2=0x39c34cff
3=0x0b054cff
この場合、要素Z0〜Z3のうち要素Z2の絶対値が最大となるため、行列Z’[22]に含まれる要素Z’0〜Z’3の仮数値fおよび指数値eは以下のようになる。
Z’0:f=0x0026、e=15
Z’1:f=0x2550、e=15
Z’2:f=0x7386、e=15
Z’3:f=0x160a、e=15
(演算部301の具体的な処理内容)
つぎに、仮数部ストリームと指数部ストリームとを含むストリームデータDの行列演算を行う際の演算部301の具体的な処理内容について説明する。
以下の説明では、ソース(0)の仮数部ストリームを「仮数部ストリーム(0)」と表記し、ソース(0)の指数部ストリームを「指数部ストリーム(0)」と表記する場合がある。また、ソース(1)の仮数部ストリームを「仮数部ストリーム(1)」と表記し、ソース(1)の指数部ストリームを「指数部ストリーム(1)」と表記する場合がある。
まず、ソース(0)とソース(1)との間で行列単位の指数値割り当てを行う22行列乗算の具体的な処理内容について説明する。この場合、演算部301は、下記式(5)を用いて、仮数部ストリーム(0)と仮数部ストリーム(1)との行列積を行う。ただし、A_f[i]は仮数部ストリーム(0)に含まれるi番目のデータ(行列)であり、B_f[i]は仮数部ストリーム(1)に含まれるi番目のデータ(行列)である(i=0,1,2,…,SL−1)。SLは、ソース(0)およびソース(1)のストリーム長である。また、(Z_f[i],tmp_e0[i])はi番目の演算結果であり、Z_f[i]は仮数部の演算結果(22行列)であり、tmp_e0[i]は指数部の演算結果(スカラ値)である。
(Z_f[i],tmp_e0[i])=A_f[i]*B_f[i]…(5)
より具体的には、例えば、演算部301は、「i」を「i=0」で初期化して、上記式(5)を用いて、仮数部ストリーム間の行列積を行う。つぎに、演算部301は、「i」をインクリメントして、「i」がストリーム長SL未満か否かを判断する。ここで、「i」がストリーム長SL未満の場合、演算部301は、上記式(5)を用いて、仮数部ストリーム間の行列積を行う。一方、演算部301は、「i」がストリーム長SL以上の場合、仮数部ストリーム間の行列積を終了する。
また、演算部301は、下記式(6)を用いて、指数部ストリーム(0)と指数部ストリーム(1)とのベクトル加算を行う。ただし、A_e[i]は指数部ストリーム(0)に含まれるi番目のデータであり、B_e[i]は指数部ストリーム(1)に含まれるi番目のデータである。また、tmp_e1[i]はi番目の演算結果である。
tmp_e1[i]=A_e[i]+B_e[i]…(6)
より具体的には、例えば、演算部301は、「i」を「i=0」で初期化して、上記式(6)を用いて、指数部ストリーム間のベクトル加算を行う。つぎに、演算部301は、「i」をインクリメントして、「i」がストリーム長SL未満か否かを判断する。ここで、「i」がストリーム長SL未満の場合、演算部301は、上記式(6)を用いて、指数部ストリーム間のベクトル加算を行う。一方、演算部301は、「i」がストリーム長SL以上の場合、演算部301は、指数部ストリーム間のベクトル加算を終了する。
つぎに、演算部301は、下記式(7)を用いて、ソース(0)とソース(1)との22行列乗算の指数部のi番目の演算結果を算出する。
Z_e[i]=tmp_e0[i]+tmp_e1[i]…(7)
より具体的には、例えば、演算部301は、「i」を「i=0」で初期化して、上記式(7)を用いて、指数部のi番目の演算結果を算出する。つぎに、演算部301は、「i」をインクリメントして、「i」がストリーム長SL未満か否かを判断する。ここで、「i」がストリーム長SL未満の場合、演算部301は、上記式(7)を用いて、指数部のi番目の演算結果を算出する。一方、演算部301は、「i」がストリーム長SL以上の場合、演算部301は、指数部の演算を終了する。この結果、ソース(0)とソース(1)との22行列乗算のi番目の演算結果は、(Z_f[i],Z_e[i])となる。
<22行列加算>
つぎに、ソース(0)とソース(1)との間で行列単位の指数値割り当てを行う22行列加算の具体的な処理内容について説明する。この場合、演算部301は、下記式(8)を用いて、指数部ストリーム(0)と指数部ストリーム(1)とのベクトル減算を行う。ただし、tmp_e0[i]はi番目の演算結果である。
tmp_e0[i]=B_e[i]−A_e[i]…(8)
より具体的には、例えば、演算部301は、「i」を「i=0」で初期化して、上記式(8)を用いて、指数部ストリーム間のベクトル減算を行う。つぎに、演算部301は、「i」をインクリメントして、「i」がストリーム長SL未満か否かを判断する。ここで、「i」がストリーム長SL未満の場合、演算部301は、上記式(8)を用いて、指数部ストリーム間のベクトル減算を行う。一方、「i」がストリーム長SL以上の場合、演算部301は、指数部ストリーム間のベクトル減算を終了する。
ここで、tmp_e0[i]が0以上の場合、演算部301は、下記式(9)を用いて、シフト付き22行列加算を行う。ただし、A_f[i]>>tmp_e0[i]は、tmp_e0[i]分、A_f[i]を右シフトすることを表している。
Z_f[i]=A_f[i]>>tmp_e0[i]+B_f[i]…(9)
一方、tmp_e0[i]が0以上ではない場合、演算部301は、下記式(10)を用いて、シフト付き22行列加算を行う。ただし、B_f[i]>>tmp_e0[i]は、tmp_e0[i]分、B_f[i]を右シフトすることを表している。
Z_f[i]=A_f[i]+B_f[i]>>tmp_e0[i]…(10)
より具体的には、例えば、演算部301は、「i」を「i=0」で初期化して、上記式(9)または(10)を用いて、シフト付き22行列加算を行う。つぎに、演算部301は、「i」をインクリメントして、「i」がストリーム長SL未満か否かを判断する。ここで、「i」がストリーム長SL未満の場合、演算部301は、上記式(9)または(10)を用いて、シフト付き22行列加算を行う。一方、演算部301は、「i」がストリーム長SL以上の場合、シフト付き22行列加算を終了する。
また、演算部301は、下記式(11)を用いて、ソース(0)とソース(1)との間の22行列加算の指数部のi番目の演算結果を算出する。下記式(11)は、A_e[i]<B_e[i]の場合に「Z_e[i]=B_e[i]」となり、A_e[i]≧B_e[i]の場合に「Z_e[i]=A_e[i]」となる関数である。
Z_e[i]=(A_e[i]<B_e[i])?B_e[i]:A_e[i]
…(11)
より具体的には、例えば、演算部301は、「i」を「i=0」で初期化して、上記式(11)を用いて、指数部のi番目の演算結果を算出する。つぎに、演算部301は、「i」をインクリメントして、「i」がストリーム長SL未満か否かを判断する。ここで、「i」がストリーム長SL未満の場合、演算部301は、上記式(11)を用いて、指数部のi番目の演算結果を算出する。一方、演算部301は、「i」がストリーム長SL以上の場合、指数部の演算を終了する。この結果、ソース(0)とソース(1)との22行列加算のi番目の演算結果は、(Z_f[i],Z_e[i])となる。
<22逆行列演算>
つぎに、ソース(0)で行列単位の指数値割り当てを行う22逆行列演算の具体的な処理内容について説明する。まず、演算部301は、下記式(12)を用いて、仮数部ストリーム(0)に含まれるi番目のデータの逆行列演算を行う。
(Z_f[i],tmp_e0[i])=Inverse(A_f[i])
…(12)
より具体的には、例えば、演算部301は、「i」を「i=0」で初期化して、上記式(12)を用いて、i番目のデータの逆行列演算を行う。つぎに、演算部301は、「i」をインクリメントして、「i」がストリーム長SL未満か否かを判断する。ここで、「i」がストリーム長SL未満の場合、演算部301は、上記式(12)を用いて、i番目のデータの逆行列演算を行う。一方、演算部301は、「i」がストリーム長SL以上の場合、演算部301は、i番目のデータの逆行列演算を終了する。
つぎに、演算部301は、下記式(13)を用いて、ソース(0)の22逆行列演算の指数部のi番目の演算結果を算出する。
Z_e[i]=tmp_e0[i]+A_e[i]…(13)
より具体的には、例えば、演算部301は、「i」を「i=0」で初期化して、上記式(13)を用いて、指数部のi番目の演算結果を算出する。つぎに、演算部301は、「i」をインクリメントして、「i」がストリーム長SL未満か否かを判断する。ここで、「i」がストリーム長SL未満の場合、演算部301は、上記式(13)を用いて、指数部のi番目の演算結果を算出する。一方、演算部301は、「i」がストリーム長SL以上の場合、演算部301は、指数部の演算を終了する。この結果、ソース(0)の22逆行列演算のi番目の演算結果は、(Z_f[i],Z_e[i])となる。
(データ処理装置100のハードウェア構成例)
図6は、データ処理装置100のハードウェア構成例を示す説明図である。図6において、データ処理装置100は、ストリーム単位ブロックシフト部502と、データ単位ブロック正規化部503と、命令デコーダ601と、演算データパス602と、MUX(multiplexer)603と、DMA(Direct Memory Access)604と、命令メモリ605と、データメモリ606と、を含む。
命令デコーダ601は、命令メモリ605に読み込まれた命令の内容を解読して、DMA604にDMA制御信号を出力するとともに、演算データパス602にデータパス制御信号を出力する。また、命令デコーダ601は、ストリーム単位ブロックシフト部502にストリーム単位のシフト数Sを設定し、MUX603にDCLSSモードを設定する。具体的には、例えば、命令デコーダ601は、DCLSSモードオンの場合は「DCLSS=1」を設定し、DCLSSモードオフの場合は「DCLSS=0」を設定する。
DMA制御信号は、演算対象を示すオペランドや演算結果の格納先を示すデスティネーションを含む。データパス制御信号は、命令種別を示すオペコードを含む。図6の例では、DMA制御信号には、src0、src1、dst、SLが含まれている。src0は、ソース(0)が格納されたデータメモリ606におけるアドレスである。src1は、ソース(1)が格納されたデータメモリ606におけるアドレスである。dstは、データメモリ606における演算結果が格納されるアドレスである。SLは、ストリーム長である。また、データパス制御信号には、乗算命令を示すmxmulが含まれている。
演算データパス602は、命令デコーダ601からのデータパス制御信号に従って、不図示の制御回路により内部の結線を切り替えることにより各種の行列演算を行う。具体的には、例えば、演算データパス602は、8個の2×2行列乗算モジュールと、8個の2×2行列加算モジュールとを有し、モジュール4個に対して1個のマルチプレクサが取り付けられている。演算データパス602は、モジュール間の結線を切り替えることで、4×4行列乗算、2×2行列乗算の4並列、2×2逆行列演算の4並列などを行うことができる。
DMA604は、命令デコーダ601からのDMA制御信号に従って、データメモリ606からソースを読み出して演算データパス602に転送する。また、DMA604は、MUX603から出力される演算結果をデータメモリ606の格納先(デスティネーション)に書き込む。
ストリーム単位ブロックシフト部502は、演算データパス602からの演算結果に対して、ストリーム単位ブロックシフト処理を行う。データ単位ブロック正規化部503は、演算データパス602からの演算結果に対して、データ単位ブロック正規化処理を行う。MUX603は、DCLSSモードに従って、ストリーム単位ブロックシフト部502またはデータ単位ブロック正規化部503から出力される演算結果をDMA604に出力する。
(DMA604の内部構成例)
つぎに、図6に示したDMA604の内部構成例について説明する。図7は、DMA604の内部構成例を示す説明図である。図7において、addr_src0は、ソース(0)が格納されたアドレスを示し、addr_src1はソース(1)が格納されたアドレスを示し、addr_dstはデスティネーションアドレスを示す。また、length_src0はソース(0)のストリーム長SLを示し、length_src1はソース(1)のストリーム長SLを示し、length_dstはデスティネーションのストリーム長SLを示す。
DMA604は、例えば、ソース(0)を読み出すロード部710と、ソース(1)を読み出すロード部720と、デスティネーションにデータを書き込むストア部730と、サイクルカウンタ740と、を含む。サイクルカウンタ740は、例えば、1回のストリーム型処理が行われる間、1サイクルごとに、0〜N(N=length_dst−1)まで1ずつインクリメントされる値iをロード部710,720、ストア部730に出力する。
ロード部710は、アドレス生成回路711と、データバッファ712と、を含む。アドレス生成回路711には、例えば、addr_src0、length_src0が入力される。アドレス生成回路711は、データメモリ606のaddr_src0が指定するアドレスから、1サイクルごとに単位データを1つずつ読み出してデータバッファ712に格納する。単位データとは、演算データパス602が演算対象とする形式のデータであり、例えば、行列、数値等が指定される。データバッファ712に格納されたデータは、必要に応じて演算データパス602に出力され、演算対象とされる。
ロード部720は、アドレス生成回路721と、データバッファ722と、を含む。アドレス生成回路721には、例えば、addr_src1、length_src1が入力される。アドレス生成回路721は、データメモリ606のaddr_src1が指定するアドレスから、1サイクルごとに単位データを1つずつ読み出してデータバッファ722に格納する。データバッファ722に格納されたデータは、必要に応じて演算データパス602に出力され、演算対象とされる。
ストア部730は、アドレス生成回路731と、データバッファ732と、を含む。アドレス生成回路731には、例えば、addr_dst、length_dstが入力される。アドレス生成回路731は、データメモリ606のaddr_dstが指定するアドレスに、1サイクルごとに、データバッファ732に格納された単位データを1つずつ書き込む。データバッファ732には、MUX603から出力された演算結果が格納される。
(データ処理装置100のデータ処理手順)
つぎに、データ処理装置100のデータ処理手順について説明する。
図8は、データ処理装置100のデータ処理手順の一例を示すフローチャートである。図8のフローチャートにおいて、まず、データ処理装置100は、命令メモリ605から命令を読み込む(ステップS801)。つぎに、データ処理装置100は、ストリーム単位ブロックシフト部502にストリーム単位のシフト数Sを設定するとともに、MUX603にDCLSSモードを設定する(ステップS802)。
そして、データ処理装置100は、DMA604にDMA制御信号を送信するとともに、演算データパス602にデータパス制御信号を送信する(ステップS803)。つぎに、データ処理装置100は、「i」を「i=0」で初期化して(ステップS804)、データメモリ606から演算対象となるi番目の行列を読み込んで行列演算を行う(ステップS805)。
つぎに、データ処理装置100は、DCLSSモードが「DCLSS=1」か否かを判断する(ステップS806)。ここで、「DCLSS=1」の場合(ステップS806:Yes)、データ処理装置100は、ステップS805の演算結果に対してデータ単位ブロック正規化処理を行う(ステップS807)。
一方、「DCLSS=0」の場合(ステップS806:No)、データ処理装置100は、ステップS805の演算結果に対してストリーム単位ブロックシフト処理を行う(ステップS808)。そして、データ処理装置100は、データメモリ606にi番目の演算結果を書き込む(ステップS809)。
つぎに、データ処理装置100は、「i」をインクリメントして(ステップS810)、「i」が「SL」より小さいか否かを判断する(ステップS811)。ここで、「i」が「SL」より小さい場合(ステップS811:Yes)、データ処理装置100は、ステップS805に戻る。一方、「i」が「SL」以上の場合(ステップS811:No)、データ処理装置100は、本フローチャートによる一連の処理を終了する。
これにより、DCLSSモードオンの時は、配列型データに含まれる行列ごとに、行列単位の指数値を割り当てて、行列単位で浮動小数点表現することができる。また、DCLSSモードオフの時は、配列型データ全体を整数シフト命令で一度にシフトさせて、配列型データ単位で浮動小数点表現することができる。
つぎに、図8に示したステップS805の行列演算の具体的な処理手順について説明する。ここでは、仮数部ストリームと指数部ストリームとを含むストリームデータDの行列演算を行う場合を例に挙げて説明する。まず、ソース(0)とソース(1)との22行列乗算の具体的な処理手順について説明する。
図9は、22行列乗算の具体的処理手順の一例を示すフローチャートである。図9のフローチャートにおいて、まず、データ処理装置100は、上記式(5)を用いて、仮数部ストリーム(0)と仮数部ストリーム(1)との行列積を行う(ステップS901)。そして、データ処理装置100は、上記式(6)を用いて、指数部ストリーム(0)と指数部ストリーム(1)とのベクトル加算を行う(ステップS902)。
つぎに、データ処理装置100は、上記式(7)を用いて、ソース(0)とソース(1)との22行列乗算の指数部のi番目の演算結果を算出する(ステップS903)。そして、データ処理装置100は、ソース(0)とソース(1)との22行列乗算のi番目の演算結果(Z_f[i],Z_e[i])を出力して(ステップS904)、本フローチャートによる一連の処理を終了する。これにより、仮数部ストリームと指数部ストリームとを含むストリームデータD間の22行列乗算を行うことができる。
つぎに、ソース(0)とソース(1)との22行列加算の具体的な処理手順について説明する。
図10は、22行列加算の具体的処理手順の一例を示すフローチャートである。図10において、データ処理装置100は、上記式(8)を用いて、指数部ストリーム(0)と指数部ストリーム(1)とのベクトル減算を行う(ステップS1001)。つぎに、データ処理装置100は、tmp_e0[i]が0以上か否かを判断する(ステップS1002)。
ここで、tmp_e0[i]が0以上の場合(ステップS1002:Yes)、データ処理装置100は、上記式(9)を用いて、シフト付き22行列加算を行う(ステップS1003)。一方、tmp_e0[i]が0以上ではない場合(ステップS1002:No)、データ処理装置100は、上記式(10)を用いて、シフト付き22行列加算を行う(ステップS1004)。
つぎに、データ処理装置100は、上記式(11)を用いて、ソース(0)とソース(1)との22行列加算の指数部のi番目の演算結果を算出する(ステップS1005)。そして、データ処理装置100は、ソース(0)とソース(1)との22行列加算のi番目の演算結果(Z_f[i],Z_e[i])を出力して(ステップS1006)、本フローチャートによる一連の処理を終了する。これにより、仮数部ストリームと指数部ストリームとを含むストリームデータD間の22行列加算を行うことができる。
つぎに、ソース(0)の22逆行列演算の具体的な処理手順について説明する。
図11は、22逆行列演算の具体的処理手順の一例を示すフローチャートである。図11のフローチャートにおいて、まず、データ処理装置100は、上記式(12)を用いて、仮数部ストリーム(0)に含まれるi番目のデータの逆行列演算を行う(ステップS1101)。
つぎに、データ処理装置100は、上記式(13)を用いて、ソース(0)の22逆行列演算の指数部のi番目の演算結果を算出する(ステップS1102)。そして、データ処理装置100は、ソース(0)の22逆行列演算のi番目の演算結果(Z_f[i],Z_e[i])を出力して(ステップS1103)、本フローチャートによる一連の処理を終了する。これにより、ソース(0)の22逆行列演算を行うことができる。
(データ処理装置100の適用例)
つぎに、実施の形態にかかるデータ処理装置100を、携帯電話機のベースバンド処理LSI(Large Scale Integrated circuit)に適用した場合について説明する。
図12は、データ処理装置100の適用例を示す説明図である。図12において、ベースバンド処理LSI1200は、RF(Radio Frequency)部1210と、専用ハードウェア1220と、DSP(Digital Signal Processor)1230#1〜1230#3と、を含む。
RF部1210は、アンテナ1250を介して受信された無線信号の周波数をダウンコンバートし、デジタル信号に変換してバス1240に出力する。また、RF部1210は、バス1240に出力されたデジタル信号をアナログ信号に変換し、無線周波数にアップコンバートして、アンテナ1250に出力する。
専用ハードウェア1220は、例えば、誤り訂正符号を扱うturbo、ビタビアルゴリズムを実行するviterbi、複数のアンテナでデータの送受信を行うためのMIMO(Multi Input Multi Output)等を含む。
DSP1230#1〜1230#3(以下、単に「DSP1230」と称する)は、プロセッサ1231と、プログラムメモリ1232と、周辺回路1233と、データメモリ1234と、を含む。プロセッサ1231は、CPU1235と、データ処理装置100と、を含む。各DSP1230にはSearcher(同期)、Demodulator(復調)、Decoder(復号)、Codec(符号化)、Modulator(変調)等、無線通信信号処理の各要素処理が割り当てられる。
以上説明したように、実施の形態1にかかるデータ処理装置100によれば、ストリームデータDの行列演算により得られる行列ごとに、行列に含まれる各要素の値に基づいて、各要素を浮動小数点で表す場合の行列単位の指数値を決定することができる。また、データ処理装置100によれば、行列に含まれる各要素の値を行列単位の指数値に対する各要素の仮数値に変換して、変換後の行列と行列単位の指数値とを対応付けて出力することができる。
これにより、ストリームデータDの行列演算により得られる行列ごとに、行列単位の指数値を割り当てて、行列単位で浮動小数点表現することができる。この結果、配列型データに含まれる各数値を浮動小数点として処理する場合に比べて回路規模の増大化を抑制することができるとともに、配列型データ全体を整数シフト命令で一度にシフトさせてから演算を行う場合よりも演算精度を向上させることができる。具体的には、例えば、LTEなどの無線通信信号処理では、単位データが行列の配列型データにおいて、1つの行列に含まれる各要素の値は絶対値が近似するが、行列間の各要素の値は絶対値が大きく異なる特性を有している。このため、配列型データに含まれる行列ごとに行列単位の指数値を割り当てて行列演算することにより、効率的に演算精度を向上させることができる。
また、データ処理装置100によれば、ストリームデータDの行列演算により得られる行列ごとに、行列に含まれる複数の要素のうちの絶対値が最大の要素を浮動小数点で表す場合の指数値を行列単位の指数値に決定することができる。これにより、行列に含まれる全要素の指数部を、絶対値が最大の要素の指数部で統一して正規化することができ演算精度を向上させることができる。
また、データ処理装置100によれば、仮数部ストリームと指数部ストリームとを含むストリームデータD間の行列加算演算を行う場合、ストリームデータD間の対応する指数値の差分を算出することができる。また、データ処理装置100によれば、ストリームデータD間の対応する指数値の差分に基づいて、ストリームデータD間の対応する行列のいずれか一方の行列に含まれる各要素の値をシフトすることができる。これにより、演算対象となる行列同士の指数値を合わせて、ストリームデータD間の行列加算演算を行うことができる。
また、データ処理装置100によれば、DCLSSモードを任意に選択することができる。これにより、演算結果を表現するのに必要なビット数が一度に増加する可能性が高い行列演算を行う場合にDCLSSモードオンを選択し、それ以外はDCLSSモードオフを選択することができ、行列演算にかかる処理量を抑えることができる。
これらのことから、実施の形態1にかかるデータ処理装置、データ処理方法およびデータ処理プログラムによれば、配列型データの行列演算にかかる回路規模の増大化を抑制するとともに演算精度の向上を図ることができる。
(実施の形態2)
つぎに、実施の形態2にかかるデータ処理装置100について説明する。なお、実施の形態1で説明した箇所と同様の箇所については、同一符号を付して図示および説明を省略する。
実施の形態1では、単位データ長が固定である場合について説明したが、実施の形態2では、単位データ長が可変である場合について説明する。単位データ長は、行列形式(または、ベクトル形式)の単位データの長さであり、例えば、単位データに含まれる要素の数で表される。以下の説明では、単位データ長を「単位データ長UL」と表記する場合がある。
例えば、図4に示した演算結果400の例では、単位データ長ULがサイクル当たり(N+1)個の要素(c[0]〜c[N])に固定されている。一方で、単位データ長ULは実行される命令に応じて変化し、命令ごとに単位データ長ULが変化すると、SIMD幅(並列度)が変化する。
ここで、サイクル当たりのデータ処理幅を「データ処理幅L(固定)」とすると、SIMD幅は「L/UL」となる。データ処理幅Lは、データ処理装置100のハードウェア資源に応じて決まるものであり、1サイクルで処理できるデータ幅である。SIMD幅は、サイクル当たりの並列に処理できる単位データの数である。
一例として、データ処理幅Lを「L=16」とすると、4×4行列命令であれば、単位データ長ULは「16」でSIMD幅は1SIMDとなり、16要素の1データ/cycleとなる。また、2×2行列命令であれば、単位データ長ULは「4」でSIMD幅は4SIMDとなり、4要素の4データ/cycleとなる。
そこで、実施の形態2では、単位データ長ULが可変な場合であっても、単位データに含まれる各要素を浮動小数点で表現する際のデータ単位の指数値を決定し、各要素の値をデータ単位の指数値に対する仮数値に変換するデータ単位ブロック正規化処理をできるだけ簡単なロジックで実現するデータ処理方法について説明する。
(決定部302および変換部303の具体的な処理内容)
まず、実施の形態2にかかるデータ処理装置100の決定部302(図3参照)および変換部303(図3参照)の具体的な処理内容について説明する。
図13は、実施の形態2にかかるデータ処理装置100の決定部302および変換部303の具体的な処理内容を示す説明図である。図13において、シフト数生成回路1301は、決定部302が有する決定回路である。また、シフター1302は、変換部303が有するシフト回路である。
シフト数生成回路1301は、演算部301(図3参照)の行列演算により得られる一連の要素の先頭から、単位データ長ULとなる要素数単位の要素集合ごとに、要素集合単位の指数値を決定する。具体的には、例えば、シフト数生成回路1301は、要素集合に含まれる各要素の値に基づいて、各要素を浮動小数点で表す場合の要素集合単位の指数値を決定する。
図13の例では、データ処理幅Lが「L=16」の例であり、c[0]〜c[15]は、ソース(0)とソース(1)との行列演算結果を表す一連の要素の値である。ここで、単位データ長ULを「UL=4」とする。この場合、シフト数生成回路1301は、ソース(0)とソース(1)との行列演算結果に含まれる一連の要素の先頭から、単位データ長ULとなる4個単位の要素集合ごとに、要素集合単位の指数値を決定する。
以下の説明では、ソース(0)とソース(1)との行列演算結果に含まれる要素を、要素の値を用いて「要素c[k]」と表記する場合がある(図13の例では、k=0,1,…,15)。また、要素集合単位の指数値を「要素集合単位のシフト数s」と表記する場合がある。
例えば、シフト数生成回路1301は、要素集合c[0]〜c[3]について、要素集合c[0]〜c[3]のうち絶対値が最大となる要素を特定する。つぎに、シフト数生成回路1301は、絶対値が最大となる要素の値を正規化して仮数値と指数値とを算出する。そして、シフト数生成回路1301は、絶対値が最大となる要素の指数値を要素集合単位のシフト数sに決定する。
一例として、要素集合c[0]〜c[3]のうち絶対値が最大となる要素を「要素c[0]」とすると、要素集合単位のシフト数sは「s=s0」となる。すなわち、要素c[0]〜c[3]のシフト数s0〜s3は、同一のシフト数s(s0)となる。
同様に、シフト数生成回路1301は、要素集合c[4]〜c[7]について、要素集合c[4]〜c[7]のうち絶対値が最大となる要素の値を正規化して得られる指数値を要素集合単位のシフト数sに決定する。すなわち、要素c[4]〜c[7]のシフト数s4〜s7は、同一のシフト数sとなる。
同様に、シフト数生成回路1301は、要素集合c[8]〜c[11]について、要素集合c[8]〜c[11]のうち絶対値が最大となる要素の値を正規化して得られる指数値を要素集合単位のシフト数sに決定する。すなわち、要素c[8]〜c[11]のシフト数s8〜s11は、同一のシフト数sとなる。
同様に、シフト数生成回路1301は、要素集合c[12]〜c[15]について、要素集合c[12]〜c[15]のうち絶対値が最大となる要素の値を正規化して得られる指数値を要素集合単位のシフト数sに決定する。すなわち、要素c[12]〜c[15]のシフト数s12〜s15は、同一のシフト数sとなる。
また、シフター1302は、単位データ長ULとなる要素数単位の要素集合ごとに、要素集合に含まれる各要素の値を、シフト数生成回路1301によって決定された要素集合単位のシフト数sに対する各要素の仮数値に変換する。
例えば、シフター1302は、要素集合c[0]〜c[3]について、各要素の値を、シフト数生成回路1301によって決定された要素集合単位のシフト数sでシフト演算する。具体的には、例えば、シフター1302は、各要素の値を、シフト数s0〜s3(s=s0=s1=s2=s3)でそれぞれシフト演算して、各要素の仮数値c’[0]〜c’[3]を算出する。そして、シフター1302は、各要素の値を、算出した各要素の仮数値c’[0]〜c’[3]に変換する。
同様に、シフター1302は、要素集合c[4]〜c[7]について、各要素の値をシフト数s4〜s7でそれぞれシフト演算して、各要素の仮数値c’[4]〜c’[7]を算出する。そして、シフター1302は、各要素の値を、算出した各要素の仮数値c’[4]〜c’[7]に変換する。
同様に、シフター1302は、要素集合c[8]〜c[11]について、各要素の値をシフト数s8〜s11でそれぞれシフト演算して、各要素の仮数値c’[8]〜c’[11]を算出する。そして、シフター1302は、各要素の値を、算出した各要素の仮数値c’[8]〜c’[11]に変換する。
同様に、シフター1302は、要素集合c[12]〜c[15]について、各要素の値をシフト数s12〜s15でそれぞれシフト演算して、各要素の仮数値c’[12]〜c’[15]を算出する。そして、シフター1302は、各要素の値を、算出した各要素の仮数値c’[12]〜c’[15]に変換する。
この場合、出力部304(図3参照)は、変換後の一連の要素c’[0]〜c’[15]とシフト数s0〜s15とを対応付けて出力する。具体的には、例えば、出力部304は、変換後の一連の要素c’[0]〜c’[15]のうちの単位データ長ULとなる要素数単位の要素集合ごとに、要素集合単位のシフト数sを対応付けて出力する。
以上説明したように、実施の形態2にかかるデータ処理装置100によれば、一連の要素の先頭から、単位データ長ULとなる要素数単位の要素集合ごとに、要素集合に含まれる各要素を浮動小数点で表す場合の要素集合単位のシフト数sを決定することができる。また、データ処理装置100によれば、要素集合ごとに、要素集合に含まれる各要素の値を、要素集合単位のシフト数sに対する各要素の仮数値に変換することができる。そして、データ処理装置100によれば、変換後の要素集合に含まれる各要素の値と、要素集合単位のシフト数sとを対応付けて出力することができる。
これにより、単位データ長ULが可変な場合であっても、データ単位ブロック正規化処理を実現することができ、可変な単位データ長ULに応じて、データ単位の指数値を割り当てて、データ単位で浮動小数点表現することができる。
(実施例1)
以下、実施の形態1,2にかかるデータ処理装置100の具体的な実施例について説明する。まず、データ処理装置100の実施例1について説明する。ただし、以下の説明では、特に指定する場合を除いて、データ処理幅Lを「L=16」とし、演算部301(図3参照)の行列演算により得られる一連の要素(配列型データ)を「要素c[0]〜c[15]」とする。
図14は、実施例1にかかるシフト数生成回路1301の回路構成例を示す説明図である。図14において、シフト数生成回路1301は、ULn単位データ内シフト数生成回路1401〜1416と、mux1421〜1436とを含む。ここで、ULn単位データ内シフト数生成回路1401〜1416は、要素c[0]〜c[15]に含まれる要素の総数「16」を上限として取り得る要素数n(n=1,2,…,16)それぞれに対応する決定回路である。mux1421〜1436は、各要素c[0]〜c[15]に対応する選択回路である。
例えば、UL1単位データ内シフト数生成回路1401(n=1)は、UL1単位データ内シフト数生成回路1401−1〜1401−16を有し、要素c[0]〜c[15]の先頭から1個単位の要素集合ごとに、要素集合単位のシフト数sを決定する。ただし、この場合の要素集合に含まれる要素は1個である。
具体的には、例えば、UL1単位データ内シフト数生成回路1401−1は、要素c[0]の値が入力され、要素c[0]の値を正規化して仮数値と指数値とを算出し、算出した指数値を要素集合単位のシフト数s(シフト数s0)に決定する。決定されたシフト数s0は、mux1421に入力される。
同様に、UL1単位データ内シフト数生成回路1401−2〜1401−16は、要素集合単位のシフト数s(シフト数s1〜s15)をそれぞれ決定する。また、決定されたシフト数s1〜s15は、mux1422〜1436にそれぞれ入力される。
また、例えば、UL2単位データ内シフト数生成回路1402(n=2)は、UL2単位データ内シフト数生成回路1402−1〜1402−8を有し、要素c[0]〜c[15]の先頭から2個単位の要素集合ごとに、要素集合単位のシフト数sを決定する。
具体的には、例えば、UL2単位データ内シフト数生成回路1402−1は、要素c[0],c[1]が入力され、要素集合c[0],c[1]のうち絶対値が最大となる要素の値を正規化して仮数値と指数値とを算出する。そして、UL2単位データ内シフト数生成回路1402−1は、算出した指数値を要素集合単位のシフト数s(s=s0=s1)に決定する。決定されたシフト数s0,s1は、mux1421,1422にそれぞれ入力される。
同様に、UL2単位データ内シフト数生成回路1402−2〜1402−8は、要素集合単位のシフト数s(シフト数s2〜s15)をそれぞれ決定する。また、決定されたシフト数s2〜s15は、mux1423〜1436にそれぞれ入力される。UL3単位データ内シフト数生成回路1403(n=3)〜UL16単位データ内シフト数生成回路1416(n=16)についても同様である。
mux1421〜1436は、要素c[0]〜c[15]に含まれる要素それぞれについて、入力された要素集合単位のシフト数sの中から、単位データ長ULとなる要素数の要素集合単位のシフト数sを選択する。単位データ長ULとなる要素数は、mux1421〜1436に入力される。
例えば、単位データ長ULを「UL=1」とする。この場合、例えば、mux1421は、UL1単位データ内シフト数生成回路1401−1から入力されたシフト数s0を、要素集合単位のシフト数sとして選択する。また、単位データ長ULを「UL=2」とする。この場合、例えば、mux1421は、UL2単位データ内シフト数生成回路1402−1から入力されたシフト数s0を、要素集合単位のシフト数sとして選択する。
mux1421〜1436によってそれぞれ選択されたシフト数s(シフト数s0〜s15)は、図13に示したシフター1302に入力される。この結果、シフター1302は、各要素c[0]〜c[15]の値を、mux1421〜1436によってそれぞれ選択されたシフト数sに対する仮数値c’[0]〜c’[15]にそれぞれ変換する。
実施例1にかかるデータ処理装置100によれば、単位データ長ULがデータ処理幅Lを上限として取り得るいずれの要素数n(n=1,2,…,16)であっても、単位データ長ULに応じたデータ単位ブロック正規化処理を実現することができる。
(実施例2)
つぎに、データ処理装置100の実施例2について説明する。
図15は、実施例2にかかるシフト数生成回路1301の回路構成例を示す説明図である。図15において、シフト数生成回路1301は、要素c[0]〜c[15]に含まれる要素の総数「16」を上限として取り得る2のべき乗の要素数n(n=1,2,4,8,16)それぞれに対応するULn単位データ内シフト数生成回路1501〜1505と、各要素c[0]〜c[15]に対応するmux1511〜1526とを含む。
例えば、UL1単位データ内シフト数生成回路1501(n=1)は、UL1単位データ内シフト数生成回路1501−1〜1501−16を有し、要素c[0]〜c[15]の先頭から1個単位の要素集合ごとに、要素集合単位のシフト数sを決定する。ただし、この場合の要素集合に含まれる要素は1個である。
また、例えば、UL2単位データ内シフト数生成回路1502(n=2)は、UL2単位データ内シフト数生成回路1502−1〜1502−8を有し、要素c[0]〜c[15]の先頭から2個単位の要素集合ごとに、要素集合単位のシフト数sを決定する。
また、例えば、UL4単位データ内シフト数生成回路1503(n=4)は、UL4単位データ内シフト数生成回路1503−1〜1503−4を有し、要素c[0]〜c[15]の先頭から4個単位の要素集合ごとに、要素集合単位のシフト数sを決定する。
以下、UL8単位データ内シフト数生成回路1504(n=8)およびUL16単位データ内シフト数生成回路1505(n=16)についても同様である。
mux1511〜1526は、それぞれ入力された要素集合単位のシフト数sの中から、単位データ長ULとなる要素数の要素集合単位のシフト数sをそれぞれ選択する。単位データ長ULとなる要素数は、mux1511〜1526に入力される。
例えば、単位データ長ULを「UL=2」とする。この場合、例えば、mux1511は、UL2単位データ内シフト数生成回路1502−1から入力されたシフト数s0を、要素集合単位のシフト数sとして選択する。また、例えば、単位データ長ULを「UL=4」とする。この場合、例えば、mux1511は、UL4単位データ内シフト数生成回路1503−1から入力されたシフト数s0を、要素集合単位のシフト数sとして選択する。
mux1511〜1526によってそれぞれ選択されたシフト数s(シフト数s0〜s15)は、図13に示したシフター1302に入力される。この結果、シフター1302は、各要素c[0]〜c[15]の値を、mux1511〜1526によってそれぞれ選択されたシフト数sに対する仮数値c’[0]〜c’[15]にそれぞれ変換する。
実施例2にかかるデータ処理装置100によれば、ULn単位データ内シフト数生成回路の数を、データ処理幅Lを上限として取り得る2のべき乗の要素数n分に制限することで、実施例1のデータ処理装置100に比べて、シフト数生成回路1301の回路量を抑えることができる。
ここで、図16Aおよび図16Bを用いて、実施例1にかかるシフト数生成回路1301と実施例2にかかるシフト数生成回路1301の回路構成を比較する。
図16Aおよび図16Bは、シフト数生成回路1301の回路構成の比較例を示す説明図である。図16Aにおいて、実施例1にかかるシフト数生成回路1301(図14参照)の回路構成例が示されている。また、図16Bにおいて、実施例2にかかるシフト数生成回路1301(図15参照)の回路構成例が示されている。
図16Aおよび図16Bに示すように、実施例2にかかるシフト数生成回路1301は、実施例1にかかるシフト数生成回路1301に比べて、UL=3,5,6,7,9,10,11,12,13,14,15に対応するULn単位データ内シフト数生成回路の回路量を削減することができる。
一方、実施例2にかかるシフト数生成回路1301では、ULn単位データ内シフト数生成回路を2のべき乗に制限したため、単位データ長ULに対応するULn単位データ内シフト数生成回路が存在しない場合がある。例えば、単位データ長ULが「UL=3」の場合、単位データ長ULに対応するULn単位データ内シフト数生成回路が存在しない。
この場合、シフト数生成回路1301は、単位データ長ULよりも大きい要素数に対応するULn単位データ内シフト数生成回路を用いて、単位データ長ULとなる要素数の要素集合単位のシフト数sを決定することにしてもよい。例えば、単位データ長ULが「UL=3」の場合、シフト数生成回路1301は、UL4単位データ内シフト数生成回路1503を用いて、要素集合単位のシフト数sを決定することにしてもよい。
以下、単位データ長ULよりも大きい要素数に対応するULn単位データ内シフト数生成回路を用いて、単位データ長ULとなる要素数の要素集合単位のシフト数sを決定する場合について説明する。まず、図17を用いて、図3に示した演算部301の回路構成例について説明する。
図17は、演算部301の回路構成例を示す説明図である。図17において、演算部301は、mux1701〜1716と、演算器1721〜1728と、を含む。図17の例では、データ処理幅Lを「L=8」とし、ソース(0)を「a[0]〜a[7]」とし、ソース(1)を「b[0]〜b[7]」とする。
例えば、mux1701は、ソース(0)が入力され、命令に応じてソース(0)からいずれかの要素を選択して、演算器1721に出力する選択回路である。同様に、mux1703,1705,1707,1709,1711,1713,1715は、ソース(0)が入力され、命令に応じてソース(0)からいずれかの要素を選択して、演算器1722〜1728にそれぞれ出力する選択回路である。
また、例えば、mux1702は、ソース(1)が入力され、命令に応じてソース(1)からいずれかの要素を選択して、演算器1721に出力する選択回路である。同様に、mux1704,1706,1708,1710,1712,1714,1716は、ソース(1)が入力され、命令に応じてソース(1)からいずれかの要素を選択して、演算器1722〜1728にそれぞれ出力する選択回路である。
また、例えば、演算器1721は、mux1701,1702からそれぞれ入力される要素同士の乗算を行って、演算結果であるc[0]を出力する。同様に、演算器1722〜1728は、入力される要素同士の乗算を行って、演算結果であるc[1]〜c[7]を出力する。
以下、図18および図19を用いて、データ処理幅Lが「L=8」の場合を例に挙げて、演算部301のデータパスの構成例について説明する。
図18は、データパスの構成例を示す説明図(その1)である。図18の例では、命令に応じて定まる単位データ長ULを「UL=4」とし、ソース(0)を「a[0]〜a[7]」とし、ソース(1)を「b[0]〜b[7]」とする。この場合、2SIMD(2=8/4)でデータパスが構成される。
具体的には、ソース(0)の先頭から4個の要素a[0]〜a[3]が演算器1721〜1724にそれぞれ入力され、ソース(1)の先頭から4個の要素b[0]〜b[3]が演算器1721〜1724にそれぞれ入力される。そして、各演算器1721〜1724によって要素同士の乗算が行われ、演算結果であるc[0]〜c[3]が出力される。
また、ソース(0)の後続の4個の要素a[4]〜a[7]が演算器1725〜1728にそれぞれ入力され、ソース(1)の後続の4個の要素b[4]〜b[7]が演算器1725〜1728にそれぞれ入力される。そして、各演算器1725〜1728によって要素同士の乗算が行われ、演算結果であるc[4]〜c[7]が出力される。
図19は、データパスの構成例を示す説明図(その2)である。図19の例では、命令に応じて定まる単位データ長ULを「UL=3」とし、ソース(0)を「a[0]〜a[5]」とし、ソース(1)を「b[0]〜b[5]」とする。この場合、単位データ長ULに対応するUL3単位データ内シフト数生成回路がシフト数生成回路1301に存在しない。
このため、シフト数生成回路1301は、単位データ長UL「3」よりも大きい要素数「4」に対応するUL4単位データ内シフト数生成回路1503(図15参照)を用いて、要素集合単位のシフト数sを決定する。すなわち、2SIMD(2=8/4)でデータパスが構成される。
シフト数生成回路1301は、演算器1721〜1724の入り口にあるmux1701〜1716で2のべき乗にアラインされるよう、ソース(0)、ソース(1)から要素を選択して演算を行う。具体的には、ソース(0)の先頭から3個の要素a[0]〜a[2]が演算器1721〜1723にそれぞれ入力され、ソース(1)の先頭から3個の要素b[0]〜b[2]が演算器1721〜1723にそれぞれ入力される。そして、各演算器1721〜1723によって要素同士の乗算が行われ、演算結果であるc[0]〜c[2]が出力される。
また、ソース(0)の後続の3個の要素a[3]〜a[5]が演算器1725〜1727にそれぞれ入力され、ソース(1)の後続の3個の要素b[3]〜b[5]が演算器1725〜1727にそれぞれ入力される。そして、各演算器1725〜1727によって要素同士の乗算が行われ、演算結果であるc[3]〜c[5]が出力される。すなわち、シフト数生成回路1301は、先頭から4番目、8番目の演算器1724,1728を飛ばすように、ソース(0)、ソース(1)から要素を選択して演算を行う。
これにより、単位データ長ULよりも大きい要素数に対応するULn単位データ内シフト数生成回路を用いる際に、各要素の入力先となるULn単位データ内シフト数生成回路を適切に調整することができる。この結果、単位データ長ULが2のべき乗以外の要素数n(n=3,5,6,7,9,10,11,12,13,14,15)であっても、単位データ長ULに応じたデータ単位ブロック正規化処理を実現することができる。
また、ULn単位データ内シフト数生成回路を2のべき乗に制限することで、2のべき乗以外の単位データ長ULに応じたデータ単位ブロック正規化処理を行う際にSIMD幅(並列度)が減りにくく、データ処理装置100の処理性能の低下を抑制することができる。
例えば、実施例1のデータ処理装置100に比べて、単位データ長ULが「UL=3」の場合は、SIMD幅が5SIMDから4SIMDに減り、単位データ長ULが「UL=5」の場合は、SIMD幅が3SIMDから2SIMDに減って処理性能が低下する。しかし、単位データ長ULが「UL=3,5」の場合以外は、実施例1のデータ処理装置100に比べて、SIMD幅を減らすことなくデータ単位ブロック正規化処理を実現することができる。
ただし、上述した説明では、ULn単位データ内シフト数生成回路を2のべき乗に制限することにしたが、これに限らない。例えば、ULn単位データ内シフト数生成回路を、データ処理幅Lを上限として取り得る2以外の数(例えば、3)のべき乗に制限したり、奇数や偶数の要素数nに制限することにしてもよい。
(実施例3)
つぎに、データ処理装置100の実施例3について説明する。実施例3では、データ処理装置100の回路量を抑えるために、DCLSSモードオンとDCLSSモードオフとでシフター1302を共有する場合について説明する。
図20は、実施例3にかかるデータ処理装置100の回路構成例を示す説明図である。図20において、データ処理装置100は、シフト数生成回路1301と、シフター1302と、mux2001〜2016を含む。ただし、図20では、データ処理装置100の回路構成の一部を抜粋して表示している。
シフト数生成回路1301は、要素c[0]〜c[15]が入力され、各要素c[0]〜c[15]のシフト数sを決定して、決定した各要素c[0]〜c[15]のシフト数sを対応するmux2001〜2016にそれぞれ出力する。
mux2001〜2016は、各要素c[0]〜c[15]に対応する選択回路である。例えば、mux2001は、要素c[0]のシフト数sと、ストリームデータ単位のシフト数Sとが入力され、DCLSSモードに応じて、シフト数sまたはシフト数Sのいずれかを、要素c[0]のシフト数s0としてシフター1302に出力する。
具体的には、DCLSSモードオンの場合は、mux2001は、シフト数sをシフター1302に出力する。一方、DCLSSモードオフの場合は、mux2001は、シフト数Sをシフター1302に出力する。なお、DCLSSモードは、例えば、図6に示した命令デコーダ601によって設定される。
同様に、mux2002〜2016は、各要素c[1]〜c[15]のシフト数sとシフト数Sとが入力され、DCLSSモードに応じて、シフト数sまたはシフト数Sのいずれかを、各要素c[1]のシフト数s1〜s15としてシフター1302に出力する。
シフター1302は、要素c[0]〜c[15]とシフト数s0〜s15とが入力され、各要素c[0]〜c[15]の値を、各シフト数s0〜s15に対する各要素の仮数値c’[0]〜c’[15]に変換する。すなわち、DCLSSモードオンの場合には、シフター1302は、単位データ長ULとなる要素数単位の要素集合ごとに、要素集合に含まれる各要素の値を、シフト数生成回路1301によって決定された要素集合単位のシフト数sに対する仮数値に変換する。
一方、DCLSSモードオフの場合には、シフター1302は、要素c[0]〜c[15]に含まれる各要素の値をシフト数Sに対する仮数値に変換する。なお、要素集合単位のシフト数sは、例えば、図14に示したシフト数生成回路1301のmux1421〜1436や図15に示したシフト数生成回路1301のmux1511〜1526によってそれぞれ選択されたシフト数sである。
実施例3にかかるデータ処理装置100によれば、DCLSSモードオンとDCLSSモードオフとでシフター1302を共有することができる。これにより、整数ストリームを入力として仮数部ストリームと指数部ストリームとを出力するDCLSSモードを回路量の増加を抑えつつ実現することができる。
(実施例4)
つぎに、データ処理装置100の実施例4について説明する。実施例4では、要素c[0]〜c[15]に含まれる各要素が、整数ではなく、浮動小数点で表される場合であっても、適切に要素集合単位のシフト数sと各要素c[0]〜c[15]の指数値s0〜s15を出力可能なシフト数生成回路1301について説明する。
具体的には、例えば、シフト数生成回路1301は、要素c[0]〜c[15]の先頭から、単位データ長ULとなる要素数単位の要素集合ごとに、要素集合に含まれる各要素の指数値eのうちの最大の指数値s_maxを要素集合単位のシフト数sに決定する。そして、シフター1302は、要素集合ごとに、要素集合に含まれる各要素の仮数値fを、最大の指数値s_maxから各要素の指数値eを減算した減算後の指数値に対する各要素の仮数値に変換する。
ここで、図21を用いて、シフト数生成回路1301の動作例について説明する。ただし、図21の例では、シフト数生成回路1301内のULn単位データ内シフト数生成回路のうち、UL3単位データ内シフト数生成回路1403−1(図14参照)を例に挙げて説明する。また、単位データ長ULを「UL=3」とする。
図21は、実施例4にかかるシフト数生成回路1301のULn単位データ内シフト数生成回路の動作例を示す説明図である。図21において、UL3単位データ内シフト数生成回路1403−1に、単位データ長ULとなる3個単位の要素集合c[0]〜c[2]が入力されている。
ここで、各要素c[0]〜c[2]は、下記式(14)〜(16)に示すように、仮数値fと指数値eを持つ浮動小数点で表されている。
c[0]=(f0,e0) ・・・(14)
c[1]=(f1,e1) ・・・(15)
c[2]=(f2,e2) ・・・(16)
この場合、UL3単位データ内シフト数生成回路1403−1は、例えば、下記式(17)を用いて、入力された各要素c[0]〜c[2]の指数値e0〜e2のうちの最大の指数値s_maxを特定する。
s_max=max(e0,e1,e2) ・・・(17)
そして、UL3単位データ内シフト数生成回路1403−1は、特定した最大の指数値s_maxを、要素集合単位のシフト数sに決定して出力する。また、UL3単位データ内シフト数生成回路1403−1は、例えば、下記式(18)〜(20)を用いて、最大の指数値s_maxから各要素c[0]〜c[2]の指数値e0〜e2を減算することにより、各要素c[0]〜c[2]の指数値s0〜s2を算出して、シフター1302に出力する。
s0=s_max−e0 ・・・(18)
s1=s_max−e1 ・・・(19)
s2=s_max−e2 ・・・(20)
これにより、各要素c[0]〜c[2]が、浮動小数点で表される場合であっても、適切に要素集合単位のシフト数s(s_max)と各要素c[0]〜c[2]の指数値s0〜s2を出力することができる。この場合、シフター1302は、各要素c[0]〜c[2]の仮数値f0〜f2を、入力された各指数値s0〜s2に対する各要素の仮数値c’[0]〜c’[2]に変換する。
なお、上述した説明では、シフト数生成回路1301内のUL3単位データ内シフト数生成回路1403−1を例に挙げて説明したが、他のULn単位データ内シフト数生成回路(図14,図15参照)についても同様である。
実施例4にかかるデータ処理装置100によれば、各要素c[0]〜c[15]が浮動小数点で表される場合であっても、単位データ長ULとなる要素集合単位のシフト数sと各要素c[0]〜c[15]の指数値s0〜s15を出力することができる。これにより、一連の要素に含まれる各要素が浮動小数点で表される場合であっても、単位データ長ULに応じたデータ単位ブロック正規化処理を実現することができる。
なお、本実施の形態で説明したデータ処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本データ処理プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本データ処理プログラムは、インターネット等のネットワークを介して配布してもよい。
また、本実施の形態で説明したデータ処理装置100は、スタンダードセルやストラクチャードASIC(Application Specific Integrated Circuit)などの特定用途向けIC(以下、単に「ASIC」と称す。)やFPGAなどのPLD(Programmable Logic Device)によっても実現することができる。具体的には、例えば、上述したデータ処理装置100の各機能部をHDL記述によって機能定義し、そのHDL記述を論理合成してASICやPLDに与えることにより、データ処理装置100を製造することができる。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)単位データが行列形式のストリームデータ間の行列演算を行う演算部と、
前記演算部の行列演算により得られる行列ごとに、前記行列に含まれる各要素の値に基づいて、前記各要素を浮動小数点で表す場合の行列単位の指数値を決定する決定部と、
前記各要素の値を、前記決定部によって決定された前記行列単位の指数値に対する前記各要素の仮数値に変換する変換部と、
前記変換部によって前記各要素の値が変換された変換後の行列と前記行列単位の指数値とを対応付けて出力する出力部と、
を有することを特徴とするデータ処理装置。
(付記2)前記決定部は、
前記演算部の行列演算により得られる行列ごとに、前記行列に含まれる複数の要素のうちの絶対値が最大の要素を浮動小数点で表す場合の指数値を前記行列単位の指数値に決定することを特徴とする付記1に記載のデータ処理装置。
(付記3)前記ストリームデータは、前記変換部によって前記各要素の値が変換された変換後の行列の配列と、前記決定部によって決定された前記行列単位の指数値の配列とを含み、
前記演算部は、
前記ストリームデータ間の行列加算演算を行う場合、前記ストリームデータ間の対応する第1および第2の指数値の差分に基づいて、前記ストリームデータ間の対応する第1および第2の行列のいずれか一方の行列に含まれる各要素の値をシフトして、前記ストリームデータ間の行列加算演算を行うことを特徴とする付記1または2に記載のデータ処理装置。
(付記4)前記演算部は、
前記第2の指数値から前記第1の指数値を減算した値が正の場合は前記第1の行列を前記値に基づいてシフトし、前記値が負の場合は前記第2の行列を前記値に基づいてシフトすることを特徴とする付記3に記載のデータ処理装置。
(付記5)前記決定部は、
前記演算部の行列演算により得られる一連の要素の先頭から、命令に対応する単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値に基づいて、当該各要素を浮動小数点で表す場合の要素集合単位の指数値を決定し、
前記変換部は、
前記要素集合ごとに、前記要素集合に含まれる各要素の値を、前記決定部によって決定された要素集合単位の指数値に対する前記各要素の仮数値に変換し、
前記出力部は、
前記変換部によって変換された変換後の前記要素集合に含まれる各要素の値と、前記決定部によって決定された要素集合単位の指数値とを対応付けて出力することを特徴とする付記1〜4のいずれか一つに記載のデータ処理装置。
(付記6)前記決定部は、
前記一連の要素に含まれる要素の総数を上限として取り得る要素数それぞれについて、前記一連の要素の先頭から要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値に基づいて、当該各要素を浮動小数点で表す場合の要素集合単位の指数値を決定する決定回路と、
前記一連の要素に含まれる要素それぞれについて、前記決定回路によって前記要素数それぞれについて決定された要素集合単位の指数値の中から、命令に対応する単位データ長となる要素数の要素集合単位の指数値を選択する選択回路と、を含み、
前記変換部は、
前記一連の要素に含まれる要素それぞれについて、当該要素の値を、前記選択回路によって選択された要素集合単位の指数値に対する前記要素の仮数値に変換するシフト回路を含むことを特徴とする付記5に記載のデータ処理装置。
(付記7)前記決定部は、
前記一連の要素に含まれる要素の総数を上限として取り得る2のべき乗の要素数それぞれについて、前記一連の要素の先頭から要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値に基づいて、当該各要素を浮動小数点で表す場合の要素集合単位の指数値を決定する決定回路と、
前記一連の要素に含まれる要素それぞれについて、前記決定回路によって前記要素数それぞれについて決定された要素集合単位の指数値の中から、命令に対応する単位データ長となる要素数の要素集合単位の指数値を選択する選択回路と、を含み、
前記変換部は、
前記一連の要素に含まれる要素それぞれについて、当該要素の値を、前記選択回路によって選択された要素集合単位の指数値に対する前記要素の仮数値に変換することを特徴とする付記5に記載のデータ処理装置。
(付記8)前記変換部は、
選択可能な第1のモードおよび第2のモードのうち、前記第1のモードが選択された場合は、前記単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値を、前記決定部によって決定された要素集合単位の指数値に対する前記各要素の仮数値に変換し、前記第2のモードが選択された場合は、前記一連の要素に含まれる各要素の値を、入力される一連の要素単位の指数値に対する前記各要素の仮数値に変換するシフト回路を含むことを特徴とする付記5〜7のいずれか一つに記載のデータ処理装置。
(付記9)前記決定部は、
前記一連の要素に含まれる要素それぞれが浮動小数点で表される場合、前記一連の要素の先頭から、前記単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の指数値のうちの最大の指数値を要素集合単位の指数値に決定し、
前記変換部は、
前記要素集合ごとに、前記要素集合に含まれる各要素の仮数値を、前記最大の指数値から前記各要素の指数値を減算した減算後の指数値に対する前記各要素の仮数値に変換することを特徴とする付記5〜8のいずれか一つに記載のデータ処理装置。
(付記10)コンピュータが、
単位データが行列形式のストリームデータ間の行列演算を行い、
前記ストリームデータ間の行列演算により得られる行列ごとに、前記行列に含まれる各要素の値に基づいて、前記各要素を浮動小数点で表す場合の行列単位の指数値を決定し、
前記各要素の値を前記行列単位の指数値に対する前記各要素の仮数値に変換し、
前記各要素の値が変換された変換後の行列と前記行列単位の指数値とを対応付けて出力する、
処理を実行することを特徴とするデータ処理方法。
(付記11)コンピュータに、
単位データが行列形式のストリームデータ間の行列演算を行い、
前記ストリームデータ間の行列演算により得られる行列ごとに、前記行列に含まれる各要素の値に基づいて、前記各要素を浮動小数点で表す場合の行列単位の指数値を決定し、
前記各要素の値を前記行列単位の指数値に対する前記各要素の仮数値に変換し、
前記各要素の値が変換された変換後の行列と前記行列単位の指数値とを対応付けて出力する、
処理を実行させることを特徴とするデータ処理プログラム。
100 データ処理装置
200 コンピュータシステム
301 演算部
302 決定部
303 変換部
304 出力部
1301 シフト数生成回路
1302 シフター

Claims (6)

  1. 単位データが行列形式のストリームデータ間の行列演算を行う場合に、演算対象となる一連の要素の先頭から、命令に対応する単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値に基づいて、当該各要素を浮動小数点で表す場合の要素集合単位の指数値を決定する決定部と、
    前記要素集合ごとに、前記要素集合に含まれる各要素の値を、前記決定部によって決定された要素集合単位の指数値に対する前記各要素の仮数値に変換する変換部と、
    前記変換部によって変換された変換後の前記要素集合に含まれる各要素の値と、前記決定部によって決定された要素集合単位の指数値とを対応付けて出力する出力部と、
    前記出力部によって出力された、前記変換部によって変換された変換後の前記要素集合に含まれる各要素の値と、前記決定部によって決定された要素集合単位の指数値とを含むストリームデータ間の行列演算を行う演算部と、を有し、
    前記変換部は、
    選択可能な第1のモードおよび第2のモードのうち、前記第1のモードが選択された場合は、前記単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値を、前記決定部によって決定された要素集合単位の指数値に対する前記各要素の仮数値に変換し、前記第2のモードが選択された場合は、前記一連の要素に含まれる各要素の値を、入力される一連の要素単位の指数値に対する前記各要素の仮数値に変換するシフト回路を含む、
    とを特徴とするデータ処理装置。
  2. 前記演算部は、
    前記ストリームデータ間の行列加算演算を行う場合、前記ストリームデータ間の対応する第1および第2の指数値の差分に基づいて、前記ストリームデータ間の対応する第1および第2の要素集合のいずれか一方の要素集合に含まれる各要素の値をシフトして、前記ストリームデータ間の行列加算演算を行うことを特徴とする請求項1に記載のデータ処理装置。
  3. 前記決定部は、
    前記一連の要素に含まれる要素の総数を上限として取り得る要素数それぞれについて、前記一連の要素の先頭から要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値に基づいて、当該各要素を浮動小数点で表す場合の要素集合単位の指数値を決定する決定回路と、
    前記一連の要素に含まれる要素それぞれについて、前記決定回路によって前記要素数それぞれについて決定された要素集合単位の指数値の中から、命令に対応する単位データ長となる要素数の要素集合単位の指数値を選択する選択回路と、を含み、
    前記変換部は、
    前記一連の要素に含まれる要素それぞれについて、当該要素の値を、前記選択回路によって選択された要素集合単位の指数値に対する前記要素の仮数値に変換するシフト回路を含むことを特徴とする請求項1または2に記載のデータ処理装置。
  4. 前記決定部は、
    前記一連の要素に含まれる要素の総数を上限として取り得る2のべき乗の要素数それぞれについて、前記一連の要素の先頭から要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値に基づいて、当該各要素を浮動小数点で表す場合の要素集合単位の指数値を決定する決定回路と、
    前記一連の要素に含まれる要素それぞれについて、前記決定回路によって前記要素数それぞれについて決定された要素集合単位の指数値の中から、命令に対応する単位データ長となる要素数の要素集合単位の指数値を選択する選択回路と、を含み、
    前記変換部は、
    前記一連の要素に含まれる要素それぞれについて、当該要素の値を、前記選択回路によって選択された要素集合単位の指数値に対する前記要素の仮数値に変換することを特徴とする請求項1〜3のいずれか一つに記載のデータ処理装置。
  5. 前記決定部は、
    前記一連の要素に含まれる要素それぞれが浮動小数点で表される場合、前記一連の要素の先頭から、前記単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の指数値のうちの最大の指数値を要素集合単位の指数値に決定し、
    前記変換部は、
    前記要素集合ごとに、前記要素集合に含まれる各要素の仮数値を、前記最大の指数値から前記各要素の指数値を減算した減算後の指数値に対する前記各要素の仮数値に変換することを特徴とする請求項1〜4のいずれか一つに記載のデータ処理装置。
  6. 決定部、変換部、出力部および演算部を有するデータ処理装置が、
    前記決定部により、単位データが行列形式のストリームデータ間の行列演算を行う場合に、演算対象となる一連の要素の先頭から、命令に対応する単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値に基づいて、当該各要素を浮動小数点で表す場合の要素集合単位の指数値を決定し、
    前記変換部により、前記要素集合ごとに、前記要素集合に含まれる各要素の値を、前記決定部によって決定された要素集合単位の指数値に対する前記各要素の仮数値に変換し、
    前記出力部により、前記変換部によって変換された変換後の前記要素集合に含まれる各要素の値と、前記決定部によって決定された要素集合単位の指数値とを対応付けて出力し、
    前記演算部により、前記出力部によって出力された、前記変換部によって変換された変換後の前記要素集合に含まれる各要素の値と、前記決定部によって決定された要素集合単位の指数値とを含むストリームデータ間の行列演算を行う、処理を実行し、
    前記変換部は、
    選択可能な第1のモードおよび第2のモードのうち、前記第1のモードが選択された場合は、前記単位データ長となる要素数単位の要素集合ごとに、前記要素集合に含まれる各要素の値を、前記決定部によって決定された要素集合単位の指数値に対する前記各要素の仮数値に変換し、前記第2のモードが選択された場合は、前記一連の要素に含まれる各要素の値を、入力される一連の要素単位の指数値に対する前記各要素の仮数値に変換するシフト回路を含む、
    ことを特徴とするデータ処理方法。
JP2013257371A 2013-02-18 2013-12-12 データ処理装置、およびデータ処理方法 Expired - Fee Related JP6225687B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2013257371A JP6225687B2 (ja) 2013-02-18 2013-12-12 データ処理装置、およびデータ処理方法
US14/167,253 US9658986B2 (en) 2013-02-18 2014-01-29 Advanced computational processes and methods of using the same

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2013029464 2013-02-18
JP2013029464 2013-02-18
JP2013257371A JP6225687B2 (ja) 2013-02-18 2013-12-12 データ処理装置、およびデータ処理方法

Publications (2)

Publication Number Publication Date
JP2014179065A JP2014179065A (ja) 2014-09-25
JP6225687B2 true JP6225687B2 (ja) 2017-11-08

Family

ID=51352083

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013257371A Expired - Fee Related JP6225687B2 (ja) 2013-02-18 2013-12-12 データ処理装置、およびデータ処理方法

Country Status (2)

Country Link
US (1) US9658986B2 (ja)
JP (1) JP6225687B2 (ja)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10419501B2 (en) * 2015-12-03 2019-09-17 Futurewei Technologies, Inc. Data streaming unit and method for operating the data streaming unit
US9965187B2 (en) * 2016-02-18 2018-05-08 Lawrence Livermore National Security, Llc Near-memory data reorganization engine
CN107315715B (zh) * 2016-04-26 2020-11-03 中科寒武纪科技股份有限公司 一种用于执行矩阵加/减运算的装置和方法
US10346163B2 (en) 2017-11-01 2019-07-09 Apple Inc. Matrix computation engine
CN107941256B (zh) * 2017-11-20 2020-03-06 中国电子科技集团公司第四十一研究所 一种高精度测量仪器的数值个性化显示方法
US10970078B2 (en) 2018-04-05 2021-04-06 Apple Inc. Computation engine with upsize/interleave and downsize/deinterleave options
US10642620B2 (en) 2018-04-05 2020-05-05 Apple Inc. Computation engine with strided dot product
US10754649B2 (en) 2018-07-24 2020-08-25 Apple Inc. Computation engine that operates in matrix and vector modes
US10831488B1 (en) 2018-08-20 2020-11-10 Apple Inc. Computation engine with extract instructions to minimize memory access
US10996960B1 (en) * 2019-11-22 2021-05-04 Blaize, Inc. Iterating single instruction, multiple-data (SIMD) instructions
US11307860B1 (en) 2019-11-22 2022-04-19 Blaize, Inc. Iterating group sum of multiple accumulate operations

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0784753A (ja) * 1993-09-20 1995-03-31 Fujitsu Ltd 固定小数点型ディジタル・シグナル・プロセッサ
JP3384470B2 (ja) * 1994-09-30 2003-03-10 ソニー株式会社 数値変換装置および方法、並びに座標値整数化装置および方法
DE19826252C2 (de) * 1998-06-15 2001-04-05 Systemonic Ag Verfahren zur digitalen Signalverarbeitung
JP2002215384A (ja) * 2001-01-16 2002-08-02 Toshiba Corp 多入力加減算回路
JP2005031848A (ja) 2003-07-09 2005-02-03 Sony Corp 浮動小数点演算の方法および浮動小数点演算プログラム、ならびに浮動小数点演算装置
US7765386B2 (en) 2005-09-28 2010-07-27 Intel Corporation Scalable parallel pipeline floating-point unit for vector processing
US8280939B2 (en) * 2008-05-22 2012-10-02 Videoiq, Inc. Methods and apparatus for automatic accuracy-sustaining scaling of block-floating-point operands
US8301803B2 (en) * 2009-10-23 2012-10-30 Samplify Systems, Inc. Block floating point compression of signal data
US8805914B2 (en) * 2010-06-02 2014-08-12 Maxeler Technologies Ltd. Method and apparatus for performing numerical calculations
US9519457B2 (en) * 2011-05-16 2016-12-13 Nec Corporation Arithmetic processing apparatus and an arithmetic processing method
JP5840994B2 (ja) * 2012-03-27 2016-01-06 富士通株式会社 行列演算装置
US9104473B2 (en) * 2012-03-30 2015-08-11 Altera Corporation Conversion and compression of floating-point and integer data

Also Published As

Publication number Publication date
JP2014179065A (ja) 2014-09-25
US20140237010A1 (en) 2014-08-21
US9658986B2 (en) 2017-05-23

Similar Documents

Publication Publication Date Title
JP6225687B2 (ja) データ処理装置、およびデータ処理方法
US7797366B2 (en) Power-efficient sign extension for booth multiplication methods and systems
TWI405126B (zh) 微處理器及其執行指令之方法
US20110004644A1 (en) Dynamic floating point register precision control
US20060112160A1 (en) Floating-point number arithmetic circuit
JP2013541084A (ja) 浮動小数点除算を実行するための方法および装置
US9712185B2 (en) System and method for improved fractional binary to fractional residue converter and multipler
US9678716B2 (en) Apparatus and method for performing absolute difference operation
KR102253096B1 (ko) 부동 소수점 수를 정수로 변환하기 위한 전자 장치 및 시스템, 및 그것의 작동 방법
US9436465B2 (en) Moving average processing in processor and processor
JP2019057249A (ja) 演算処理装置および演算処理方法
EP2908242A2 (en) Processor that recovers from excessive approximate computing error
KR20150041540A (ko) 수치 연산을 처리하는 장치 및 방법
US7809783B2 (en) Booth multiplier with enhanced reduction tree circuitry
KR20100108509A (ko) 레지스터 명령 필드를 인코딩하는 방법
US8140608B1 (en) Pipelined integer division using floating-point reciprocal
US20200192633A1 (en) Arithmetic processing device and method of controlling arithmetic processing device
WO2019023910A1 (zh) 数据处理方法和设备
US20070198811A1 (en) Data-driven information processor performing operations between data sets included in data packet
EP1984810B1 (en) A booth multiplier with enhanced reduction tree circuitry
CN115268832A (zh) 浮点数取整的方法、装置以及电子设备
JPWO2007094047A1 (ja) 演算装置および演算方法
JP5659772B2 (ja) 演算処理装置
JP4613992B2 (ja) Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ
JP6497250B2 (ja) 演算処理装置および演算処理装置の制御方法

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20150611

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20160602

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20160602

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160905

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170526

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170606

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170807

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170912

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170925

R150 Certificate of patent or registration of utility model

Ref document number: 6225687

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees