JP7115211B2 - 演算処理装置および演算処理装置の制御方法 - Google Patents

演算処理装置および演算処理装置の制御方法 Download PDF

Info

Publication number
JP7115211B2
JP7115211B2 JP2018196803A JP2018196803A JP7115211B2 JP 7115211 B2 JP7115211 B2 JP 7115211B2 JP 2018196803 A JP2018196803 A JP 2018196803A JP 2018196803 A JP2018196803 A JP 2018196803A JP 7115211 B2 JP7115211 B2 JP 7115211B2
Authority
JP
Japan
Prior art keywords
operand
exponent
sum
zero
mantissa
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.)
Active
Application number
JP2018196803A
Other languages
English (en)
Other versions
JP2020064504A (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 JP2018196803A priority Critical patent/JP7115211B2/ja
Priority to US16/590,637 priority patent/US11226791B2/en
Priority to EP19201747.3A priority patent/EP3640792A1/en
Priority to CN201910973303.4A priority patent/CN111078292A/zh
Publication of JP2020064504A publication Critical patent/JP2020064504A/ja
Application granted granted Critical
Publication of JP7115211B2 publication Critical patent/JP7115211B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Nonlinear Science (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

本発明は、演算処理装置および演算処理装置の制御方法に関する。
演算処理装置に含まれる積和演算器において、乗算するオペランドの一方がゼロの場合、乗算結果に加算されるオペランドを積和演算の結果としてバイパスさせる手法が提案されている(例えば、特許文献1参照)。また、積和演算器において、入力されるオペランドが非正規化数、非数、無限大、ゼロ等の特殊数を示す場合、バイパス経路を使用して、オペランドを様々な回路ブロックに伝搬させる手法が提案されている(例えば、特許文献2参照)。
特開2014-93085号公報 特開2009-140491号公報
乗算結果に加算されるオペランドをバイパスさせる経路を積和演算器に設ける場合、積和演算器の回路規模が増大するという問題がある。例えば、浮動小数点積和演算器の場合、乗算結果に加算されるオペランドの指数と仮数との両方に対してバイパス経路が設けられる。また、通常の積和演算の演算結果が伝達される経路とバイパス経路とのいずれかを選択するセレクタが、指数と仮数とのそれぞれに設けられる。
1つの側面では、本発明は、演算処理装置の回路規模の増大を抑制することを目的とする。
一つの観点によれば、浮動小数点積和演算器を有する演算処理装置において、前記浮動小数点積和演算器は、積和演算命令に含まれる第1オペランドと第2オペランドのいずれか、または前記第1オペランドと前記第2オペランドの両方がゼロであることを検出するゼロ検出部と、前記ゼロ検出部がゼロを検出した場合、前記第1オペランドの指数を第1設定値に設定し、前記第2オペランドの指数を第2設定値に設定する指数設定部と、前記指数設定部が出力する前記第1オペランドの指数と前記第2オペランドの指数と、前記積和演算命令に含まれる第3オペランドの指数とに基づいて、積和演算により得られる指数を算出する指数算出部と、前記第1オペランドの仮数と前記第2オペランドの仮数との積を算出する乗算部と、前記乗算部が算出した積に、桁合わせした前記第3オペランドの仮数を加算する加算部と、を有し、前記第1設定値と前記第2設定値の和は、前記第3オペランドのビット位置が、前記第1オペランドと前記第2オペランドの積の最上位ビットより上位ビット側に位置するように設定される。
1つの側面では、本発明は、演算処理装置の回路規模の増大を抑制することができる。
一実施形態における演算処理装置の一例を示す図である。 図1の演算処理装置の動作の一例を示す図である。 別の実施形態における演算処理装置を含む情報処理装置の一例を示す図である。 図3の積和演算器の一例を示す図である。 図4の積和演算器による積和演算の一例を示す図である。 図4の積和演算器による積和演算の別の例を示す図である。 図4の積和演算器による積和演算の別の例を示す図である。 図4の積和演算器による積和演算の別の例を示す図である。 図4の積和演算器の動作フローの一例を示す図である。 図4の積和演算器が半精度である場合の積和演算の一例を示す図である。 図4の積和演算器が倍精度である場合の積和演算の一例を示す図である。 他の浮動小数点積和演算器の一例を示す図である。
以下、図面を用いて実施形態が説明される。
図1は、一実施形態における演算処理装置の一例を示す。図1に示す演算処理装置1は、浮動小数点積和演算器10を有する。演算処理装置1は、スカラ方式またはスーパ-スカラ方式のCPU(Central Processing Unit)でもよく、GPU(Graphics Processing Unit)、あるいは深層学習に使用されるプロセッサでもよい。
なお、図示は省略するが、演算処理装置1は、浮動小数点積和演算器10が実行する命令を格納する命令バッファ、命令の実行に使用するデータを保持するレジスタ等を有してもよい。また、演算処理装置1は、複数の積和演算を並列に実行する複数の浮動小数点積和演算器10を有してもよい。以下では、浮動小数点積和演算器10は、単に積和演算器10とも称される。
積和演算器10は、積和演算命令のオペランドで指定される浮動小数点数OP1、OP2、OP3を受ける。積和演算器10は、式(1)に示すように、浮動小数点数OP1、OP2の積を算出し、算出した積に浮動小数点数OP3を加えて、浮動小数点数OP4として出力する。
OP4=OP1*OP2+OP3 ‥(1)
例えば、浮動小数点数OP1、OP2、OP3は入力オペランドであり、浮動小数点数OP4は出力オペランドである。式(1)において、符号”*”は、乗算を示す。
浮動小数点数OP1は、指数OP1Eと仮数OP1Fとを含み、浮動小数点数OP2は、指数OP2Eと仮数OP2Fとを含む。浮動小数点数OP3は、指数OP3Eと仮数OP3Fとを含み、浮動小数点数OP4は、指数OP4Eと仮数OP4Fとを含む。なお、浮動小数点数OP1、OP2、OP3、OP4は、符号を含むが、以下の説明では、浮動小数点数OP1、OP2、OP3、OP4は、ゼロ以上であるとし、符号の説明および符号に関係する回路の動作は省略される。以下では、浮動小数点数OP1、OP2、OP3、OP4は、それぞれオペランドOP1、OP2、OP3、OP4とも称される。
積和演算器10は、ゼロ検出部11、指数設定部12、指数算出部13、乗算部14、桁合わせ部15および加算部16を有する。
ゼロ検出部11は、オペランドOP1がゼロか否を検出するゼロ検出器11aと、オペランドOP2がゼロか否かを検出するゼロ検出器11bとを有する。ゼロ検出部11は、ゼロ検出器11a、11bの一方または両方がゼロを検出した場合、ゼロ検出信号ZDETを指数設定部12に出力する。例えば、ゼロ検出部11は、ゼロ検出器11a、11bの検出結果のオア論理をゼロ検出信号ZDETとして出力する。オア論理は、正論理であっても負論理であってもよい。
指数設定部12は、セレクタ12a、12bを有する。セレクタ12aは、ゼロ検出信号ZDETがゼロの検出を示す場合、予め設定された設定値PV1Eを選択し、選択した設定値PV1Eを指数OP1ESとして指数算出部13および桁合わせ部15に出力する。セレクタ12aは、ゼロ検出信号ZDETがゼロの検出を示さない場合(ゼロ以外の検出を示す場合)、オペランドOP1の指数OP1Eを選択し、選択した指数OP1Eを指数OP1ESとして指数算出部13および桁合わせ部15に出力する。
セレクタ12bは、ゼロ検出信号ZDETがゼロの検出を示す場合、予め設定された設定値PV2Eを選択し、選択した設定値PV2Eを指数OP2ESとして指数算出部13および桁合わせ部15に出力する。セレクタ12bは、ゼロ検出信号ZDETがゼロの検出を示さない場合(ゼロ以外の検出を示す場合)、オペランドOP2の指数OP2Eを選択し、選択した指数OP2Eを指数OP2ESとして指数算出部13および桁合わせ部15に出力する。すなわち、指数設定部12は、ゼロ検出部11がゼロを検出した場合、指数OP1ESを設定値PV1Eに設定し、指数OP2ESを設定値PV2Eに設定する。
ここで、設定値PV1E、PV2Eの和は、オペランドOP3のビット位置が、オペランドOP1、OP2の積の最上位ビットより上位ビット側に位置するように設定される。設定値PV1E、PV2Eの和は、オペランドOP1、OP2の積の指数に相当する。例えば、設定値PV1E、PV2Eは、指数OP1E、OP2Eが取り得る最小の値に設定される。これにより、オペランドOP1、OP2の一方または両方がゼロの場合、積和演算により得られるオペランドOP4の値を、オペランドOP3の値にすることができる。
換言すれば、オペランドOP3をオペランドOP4として出力するためのバイパス経路を設けることなく、オペランドOP4の値を、オペランドOP3の値にすることができる。また、図1に示す積和演算器10は、指数OP1E、OP2Eに対応するセレクタ12a、12bを含むが、仮数OP1F、OP2Fに対応するセレクタを含まない。通常、仮数のビット数は指数のビット数より多い。この結果、バイパス経路を設ける場合に比べて、積和演算器10の回路規模の増大を抑止することができる。
指数算出部13は、指数OP1ES(OP1EまたはPV1E)と、指数OP2ES(OP2EまたはPV2E)と、オペランドOP3の指数OP3Eとに基づいて、積和演算により得られるオペランドOP4の指数OP4Eを算出する。なお、指数算出部13が算出した指数OP4Eは、加算部16による仮数OP1F、OP2F、OP3Fの加算結果に基づいて、補正されてもよい。
乗算部14は、オペランドOP1の仮数OP1FとオペランドOP2の仮数OP2Fとの積OP1F*OP2Fを算出する。なお、符号”*”は積を示す。桁合わせ部15は、指数OP1ES、OP2ESの和から指数OP3Eを減じることで、仮数OP3Fの桁を積OP1F*OP2Fの桁に合わせるためのシフト量を算出する。
加算部16は、乗算部14が算出した積OP1F*OP2Fに、桁合わせしたオペランドOP3の仮数OP3Fを加算し、積和演算により得られるオペランドOP4の仮数OP4Fを算出する。そして、積和演算器10は、積和演算の結果OP1*OP2+OP3をオペランドOP4として出力する。例えば、オペランドOP4は、レジスタに格納される。
図2は、図1の演算処理装置1の動作の一例を示す。すなわち、図2は、演算処理装置1の制御方法の一例を示す。図2に示す動作は、積和演算器10に浮動小数点数の積和演算命令が発行されたことに基づいて開始される。
まず、ステップS1において、ゼロ検出部11は、オペランドOP1がゼロか否かを検出し、オペランドOP2がゼロか否かを検出する。積和演算器10は、オペランドOP1、OP1の一方または両方がゼロの場合、動作をステップS2に移行し、オペランドOP1、OP1の両方ともゼロでない場合、動作をステップS3に移行する。
ステップS2において、指数設定部12は、指数OP1Eの代わりに設定値PV1Eを選択し、指数OP1ESとして指数算出部13に出力する。また、積和演算器10は、指数OP2Eの代わりに設定値PV2Eを選択し、指数OP2ESとして指数算出部13に出力する。ステップS2の後、動作はステップS4に移行される。ステップS3において、指数設定部12は、指数OP1E、OP2Eを選択し、指数OP1ES、OP2ESとして指数算出部13に出力し、動作をステップS4に移行する。
ステップS4において、指数算出部13は、指数設定部12から受信する指数OP1ES、OP2ESとオペランドOP3の指数OP3Eとに基づいて、指数OP4Eを算出し、動作をステップS5に移行する。なお、指数OP4Eは、ステップS7において、補正されてもよい。
ステップS5において、乗算部14は、仮数OP1F、OP2Fの積OP1F*OP2Fを算出し、動作をステップS6に移行する。なお、ステップS5は、ステップS4より前に開始されてもよい。ステップS6において、加算部16は、乗算部14が算出した積OP1F*OP2Fに、桁合わせしたオペランドOP3の仮数OP3Fを加算することで、仮数の積和演算の結果である仮数OP4Fを算出し、動作をステップS7に移行する。なお、加算部16が使用する仮数OP3Fの桁合わせは、桁合わせ部15により実行される。
ステップS7において、積和演算器10は、例えば、加算部16により算出された仮数OP4Fの正規化処理および丸め処理等を実行し、仮数の積和演算の結果である仮数OP4Fを補正する。また、積和演算器10は、正規化処理の結果および丸め処理の結果に基づいて、指数算出部13により算出された指数OP4Eを補正する。そして、積和演算の結果が、オペランドOP4(OP4E、OP4F)として出力される。
図2のかぎ括弧内は、オペランドOP1、OP2の積OP1*OP2と、オペランドOP3との大きさの位置関係の一例を示す。横軸は桁を示しており、図2の左側が上位側を示す。例えば、オペランドOP3は、仮数OP3Fを示し、積OP1*OP2は、仮数の積OP1F*OP2Fを示す。
図2のかぎ括弧内は2進数での表記を示し、各値の左下の黒丸は小数点の位置を示す。例えば、仮数OP3Fおよび図示しない仮数OP1F、OP2Fの整数部が1桁で表される場合、積OP1*OP2の整数部は最大で2桁(整数第1位と第2位)になる。特に限定されないが、仮数OP1F、OP2F、OP3Fは、24ビットであり、仮数の積OP1F*OP2Fは、48ビットである。
積OP1*OP2の最上位ビットが、オペランドOP3の最下位ビットより下位ビット側に位置し、オペランドOP1、OP2の一方または両方がゼロの場合、仮数の積OP1F*OP2Fはゼロになるため、積和演算の結果の仮数OP4Fは仮数OP3Fと等しくなる。一方、積OP1*OP2の最上位ビットが、オペランドOP3の最下位ビットより下位ビット側に位置し、オペランドOP1、OP2がゼロでない場合、積OP1*OP2の丸め方によっては、仮数OP3Fへの桁上がりが生じる。このため、仮数OP4Fは仮数OP3Fと等しくなるとは限らない。
この実施形態では、積OP1*OP2の最上位ビットが、オペランドOP3の最下位ビットより下位ビット側に位置するように、設定値PV1E、PV2Eの和が設定される。これにより、指数OP3Eおよび仮数OP3Fのバイパス経路とセレクタとを積和演算器10に設けることなく、オペランドOP1、OP2のいずれかまたは両方がゼロの場合、オペランドOP3をオペランドOP4として出力することができる。すなわち、オペランドOP1、OP2のいずれかまたは両方がゼロであることを検出してオペランドOP3をオペランドOP4として出力する場合に、積和演算器10の回路規模の増大を抑制することができる。
なお、加算部16は、積OP1F*OP2Fまたは仮数OP3Fの最下位ビットより下位に付加される所定数の付加ビットを演算結果に含めてもよい。この場合、設定値PV1E、PV2Eの和は、仮数OP3Fに付加される付加ビットの最下位ビットが、仮数OP1F、OP2Fの積の最上位ビットと同じ位置か、あるいは最上位ビットより上位ビット側に位置するように設定されてもよい。
以上、図1および図2に示す実施形態では、オペランドOP1、OP2のいずれかまたは両方がゼロであることを検出してオペランドOP3をオペランドOP4として出力する場合に、積和演算器10の回路規模の増大を抑制することができる。
図3は、別の実施形態における演算処理装置を含む情報処理装置の一例を示す。図1および図2で説明した要素および機能と同様の要素および機能については、詳細な説明は省略される。図3において、実線の矢印は、演算命令またはデータが転送される信号線を示し、破線の矢印は、制御信号等の各種の指示が転送される信号線を示す。
図3に示す情報処理装置300は、例えば、サーバであり、ホストコンピュータ200と、通信インタフェース201を介してホストコンピュータ200に接続された制御装置202とを有する。例えば、通信インタフェース201は、PCI(Peripheral Component Interconnect)バスであり、制御装置202は、ホストコンピュータ200のPCIスロットに装着されるPCIカードである。なお、制御装置202は、ホストコンピュータ200内に含まれてもよい。ホストコンピュータ200は通信インタフェース201を通して制御装置202上のプロセッサ203の制御を行う。
制御装置202は、プロセッサ203およびメモリ204を有する。メモリ204は、例えば、複数のメモリチップが積層されたメモリモジュールであり、プロセッサ203に実行させる演算命令列、演算データおよびプロセッサ203の動作を制御する制御命令列を保持し、演算結果が格納される。
プロセッサ203は、通信制御部205、メモリコントローラ206、全体命令制御部207および複数の処理ユニット208を有する。例えば、プロセッサ203は、深層学習に使用されるプロセッサであり、演算処理装置の一例である。なお、図3では、プロセッサ203は、16個の処理ユニット208を有するが、処理ユニット208の数は、16個に限定されない。また、制御装置202は、複数のプロセッサ203を有してもよい。
通信制御部205は、ホストコンピュータ200とプロセッサ203との間での命令列、データ、制御情報の転送を制御する。メモリコントローラ206は、全体命令制御部207および通信制御部205からの指示に基づいて動作する。メモリコントローラ206は、ホストコンピュータ200とメモリ204との間、全体命令制御部207とメモリ204との間、各処理ユニット208とメモリ204との間での命令列およびデータの転送を制御する。
全体命令制御部207は、通信制御部205を介してホストコンピュータ200から受信した指示に基づいて、プロセッサ203全体の動作を制御し、プロセッサ203による演算処理の終了等の応答をホストコンピュータ200に出力する。
各処理ユニット208は、演算命令バッファ209、演算命令制御部210、複数のベクタレジスタ211、複数の積和演算器100を有する。例えば、積和演算器100は、単精度(32ビット)の浮動小数点積和演算器である。なお、積和演算器100は、半精度(16ビット)または倍精度(64ビット)の浮動小数点積和演算器でもよい。特に限定されないが、各処理ユニット208は、数百個から数千個の積和演算器100を含んでもよい。また、各処理ユニット208は、積和演算器100に加えて加算器、論理演算器、乗算器、除算器等を含んでもよい。
演算命令バッファ209は、メモリコントローラ206を介してメモリ204から読み出された演算命令を保持し、演算命令制御部210からの指示に基づいて、保持している演算命令を演算命令制御部210へ出力する。演算命令制御部210は、演算命令バッファ209から受信する演算命令に基づき、ベクタレジスタ211および積和演算器100を制御する。
ベクタレジスタ211は、メモリコントローラ206を介してメモリ204から読み出された演算用のデータを保持し、積和演算器100によって実行された積和演算の演算結果を保持する。積和演算器100は、ベクタレジスタ211から取り出したデータを使用して積和演算を行い、演算結果をベクタレジスタ211へ格納する。
以下、情報処理装置300による積和演算処理の動作の概要が説明される。積和演算処理を実行する場合、ホストコンピュータ200は、通信制御部205とメモリコントローラ206とを介してメモリ204に制御命令列、演算命令列、演算データを格納する。次に、ホストコンピュータ200は、通信制御部205を経由して全体命令制御部207に、メモリ204に保持された制御命令列を読み出して実行することを指示する。
全体命令制御部207は、ホストコンピュータ200からの指示に基づいて、メモリコントローラ206を制御し、メモリ204から制御命令列を取り出す。そして、取り出した制御命令列の各命令にしたがって、メモリ204から演算命令列および演算データを読み出す指示をメモリコントローラ206に発行する。
メモリコントローラ206は、全体命令制御部207からの指示に基づいて、メモリ204から演算命令と演算データとを読み出し、読み出した演算命令を、演算を実行させる処理ユニット208の演算命令バッファ209に格納する。また、メモリコントローラ206は、読み出した演算データを、演算を実行させる処理ユニット208の各ベクタレジスタ211に格納する。
この後、全体命令制御部207は、演算を実行させる処理ユニット208の演算命令制御部210に演算の開始を指示する。指示を受けた演算命令制御部210は、演算命令バッファ209から演算命令を取り出し、ベクタレジスタ211と積和演算器100とを制御して、積和演算を実行させる。例えば、演算命令制御部210は、データの読み出しの指示と、積和演算器100から転送される演算結果の書き込みの指示をベクタレジスタ211に発行する。また、演算命令制御部210は、ベクタレジスタ211から読み出されるデータを使用して演算を実行する指示と、演算結果をベクタレジスタ211に出力する指示とを積和演算器100に発行する。
全体命令制御部207からの指示に基づいて、ベクタレジスタ211は、演算に使用するデータを積和演算器100に出力し、積和演算器100は、演算を実行し、演算結果をベクタレジスタ211に出力する。各演算命令制御部210は、演算の終了に基づいて、全体命令制御部207に演算の終了を通知する。全体命令制御部207は、各演算命令制御部210およびメモリコントローラ206に、演算結果のメモリ204への書き込みを指示する。演算命令制御部210は、ベクタレジスタ211に、演算結果の読み出しと、読み出した演算結果のメモリコントローラ206への転送を指示する。メモリコントローラ206は、各処理ユニット208から送られてくる演算結果をメモリ204に書き込む。
全体命令制御部207は、演算結果のメモリ204への書き込みの完了に基づいて、ホストコンピュータ200に演算処理の完了を報告する。ホストコンピュータ200は、演算処理の完了の報告に基づいて、通信制御部205およびメモリコントローラ206を介して、メモリ204が保持する演算結果のホストコンピュータ200への転送を指示し、演算結果を回収する。
図4は、図3の積和演算器100の一例を示す。積和演算器100は、ゼロ検出器102、104、オアゲート106、セレクタ108、110、加算器112、減算器114、セレクタ116および指数補正回路118を有する。また、積和演算器100は、シフタ120、ブースエンコーダ122、部分積加算回路124、加算器126、左シフタ128および丸め回路130を有する。
例えば、積和演算器100は、IEEE(The Institute of Electrical and Electronics Engineers)754(浮動小数点数演算標準)を採用する。IEEE754の2進浮動小数点形式では、単精度(32ビット)の浮動小数点数は、1ビットの符号と8ビットの指数と23ビットの仮数とを含む。なお、図4では、説明を簡単にするために、入力オペランドOP1、OP2、OP3は、ゼロ以上であるとし、符号の算出に使用される回路の記載を省略する。
ゼロ検出器102は、指数OP1Eおよび仮数OP1Fに基づいてオペランドOP1がゼロか否かを検出し、オペランドOP1がゼロの場合、論理1を出力し、オペランドOP1がゼロ以外の場合、論理0を出力する。ゼロ検出器104は、指数OP2Eおよび仮数OP2Fに基づいてオペランドOP2がゼロか否かを検出し、オペランドOP2がゼロの場合、論理1を出力し、オペランドOP2がゼロ以外の場合、論理0を出力する。
例えば、ゼロ検出器102は、指数OP1E、OP1Fの両方がゼロの場合、オペランドOP1のゼロを検出する。ゼロ検出器104は、オペランドOP2E、OP2Fの両方がゼロの場合、オペランドOP2のゼロを検出する。ゼロ検出器102、104は、ゼロ検出部の一例である。
オアゲート106は、ゼロ検出器102、104の出力をオア演算し、演算結果をゼロ検出信号ZDETとしてセレクタ108、110に出力する。すなわち、オアゲート106は、オペランドOP1、OP2の一方または両方がゼロの場合、論理1のゼロ検出信号ZDETを出力し、オペランドOP1、OP2の両方がゼロでない場合、論理0のゼロ検出信号ZDETを出力する。なお、ゼロ検出器102、104がゼロの検出時に出力する論理は”0”でもよく、この場合、負論理のオアゲート106(例えば、NANDゲート)が使用される。
セレクタ108は、論理0のゼロ検出信号ZDETを受けた場合、指数OP1Eを選択して指数OP1ESとして出力し、論理1のゼロ検出信号ZDETを受けた場合、”1”を選択して指数OP1ESとして出力する。セレクタ110は、論理0のゼロ検出信号ZDETを受けた場合、指数OP2Eを選択して指数OP2ESとして出力し、論理1のゼロ検出信号ZDETを受けた場合、”1”を選択して指数OP2ESとして出力する。オアゲート106およびセレクタ108、110は、指数設定部の一例である。また、セレクタ108は、第1選択部の一例であり、セレクタ110は、第2選択部の一例である。セレクタ108が選択する”1”は、第1設定値の一例であり、セレクタ110が選択する”1”は、第2設定値の一例である。
加算器112は、セレクタ108、110から出力される指数OP1ES、OP2ESを加算し、加算した値からバイアス”127”を引き、オペランドOP1、OP2を乗算した場合の指数を算出する。加算器112は、算出した指数を減算器114およびセレクタ116に出力する。なお、積和演算器100が半精度(16ビット)の場合、加算値からバイアス”15”が引かれ、積和演算器100が倍精度(64ビット)の場合、加算値からバイアス”1023”が引かれる。
減算器114は、加算器112から出力される指数からオペランドOP3の指数OP3Eを減じて、オペランドOP1、OP2を乗算した場合の指数と指数OP3Eとの差DIFEを算出し、算出した差DIFEをセレクタ116およびシフタ120に出力する。
セレクタ116は、差DIFEが0以上の場合、加算値から出力される指数を選択し、差DIFEが負の場合、オペランドOP3の指数OP3Eを選択し、選択した指数を指数補正回路118に出力する。すなわち、セレクタ116は、加算器112から出力される指数と指数OP3Eのうち、大きい方の指数を選択する。加算器112、減算器114およびセレクタ116は、指数算出部の一例である。また、セレクタ116は、第3選択部の一例である。
シフタ120は、減算器114から出力される差DIFEに基づいて、仮数OP3Fのビットをシフトする。減算器114から出力される差DIFEが正値の場合、指数OP3EはオペランドOP1、OP2の乗算結果の指数または”2”よりも小さいため、シフタ120は、仮数OP3Fのビットを差DIFEに基づいて右シフトする。
減算器114から出力される差DIFEが負値の場合、指数OP3EがオペランドOP1、OP2の乗算結果の指数または”2”よりも大きいため、シフタ120は、仮数OP3Fのビットを差DIFEに基づいて左シフトする。これにより、オペランドOP3の小数点の位置が、仮数OP1F、OP2Fの乗算結果の小数点の位置に合わせられる。なお、シフタ120のシフト量は、オペランドOP3の仮数OP3Fの小数点の位置が、加算器126のビット幅からはみ出ないように制限される。
ブースエンコーダ122および部分積加算回路124は、乗数である仮数OP1Fと被乗数である仮数OP2Fとの積を算出する乗算部として動作する。ブースエンコーダ122は、仮数OP1Fの所定数のビット毎に、ビット値にしたがって、仮数OP1F、OP2Fの部分積を算出するための制御値を生成し、生成した制御値を部分積加算回路124に出力する。
部分積加算回路124は、制御値に基づいて、仮数OP2Fの所定数のビット毎(部分ビット)に、部分ビットのM倍(例えば、Mは、0、1、2、-1、-2)を部分積として算出し、算出した部分積を足し込むことで仮数OP1F、OP2Fの積を算出する。部分積加算回路124は、算出した積をサムSUとキャリーCAとして出力する。
加算器126は、部分積加算回路124から出力される積(サムSUとキャリーCA)と、シフタ120により桁合わせされた仮数OP3Fとを加算し、加算結果を左シフタ128に出力する。加算器126は加算部の一例である。
左シフタ128は、仮数の演算結果のビット列中の上位側に最初に現れる”1”を上位側にシフトすることで、加算器から出力される仮数の加算結果を正規化する。左シフタ128は、正規化した加算結果(仮数)と、シフトした数を示すシフト値とを丸め回路に出力する。例えば、仮数を正規化するための左シフタ128のシフト値は、図示しないリーディングゼロカウンタにより算出される。
丸め回路130は、左シフタ128から出力される正規化された仮数の丸め処理を実行し、丸め処理を実行した仮数の値をオペランドOP4の仮数OP4Fとして出力し、左シフタ128から出力されるシフト値を指数補正回路118に出力する。また、丸め回路130は、桁上げが発生する場合、桁上げを示す桁上げ情報を指数補正回路118に出力する。
指数補正回路118は、丸め回路130から出力されるシフト値をセレクタ116から出力される指数の演算結果から引いて指数を補正(正規化処理)し、補正結果をオペランドOP4の指数OP4Eとして出力する。
図5は、図4の積和演算器100による積和演算の一例を示す。積和演算器100が単精度の場合、加算器126は74ビットの幅を有する。単精度の場合、ヒドンビット”1”を含めた仮数OP1F、OP2F、OP3Fは24ビットであり、積OP1F*OP2Fは48ビットである。このため、積OP1F*OP2Fが加算器126のビット幅に収まるように、小数点の位置(黒丸)は、46ビット目と45ビット目の間に設定される。
図5では、オペランドOP3の小数点の位置は、仮数OP1F、OP2Fの積OP1F*OP2Fの小数点の位置と同じである。このため、加算器126は、仮数OP1F、OP2Fの積OP1F*OP2Fと仮数OP3Fとを加算し、仮数の積和演算の結果OP1F*OP2F+OP3Fを算出する。また、加算器126は、積和演算結果(OP1F*OP2F+OP3F)から仮数OP4F(24ビット)を生成する場合、仮数OP4Fの最下位ビットの下にガードビットG、ラウンドビットRおよびスティッキービットSを付加する。ガードビットG、ラウンドビットRおよびスティッキービットSは、仮数の最下位ビットより下位に位置する付加ビットの一例である。なお、オペランドOP3の小数点の位置が積OP1F*OP2Fの小数点の位置と同じ場合、シフタ120による仮数OP3Fのビットシフトは実行されない。
図6は、図4の積和演算器100による積和演算の別の例を示す。図5の説明と同じ内容については、詳細な説明は省略される。図6では、オペランドOP3の小数点の位置は、積OP1F*OP2Fの小数点の位置より39ビット下位側である。この場合、シフタ120は、差DIFEに基づいて、仮数OP3Fを39ビット右シフトし、積OP1F*OP2Fとの桁合わせを実行する。すなわち、仮数OP3Fのシフト量SAは、39ビットに設定される。
仮数OP3Fを39ビット右シフトした場合、仮数OP3Fの下位側の16ビットは、加算器126のビット幅から外れる。加算器126は、積OP1F*OP2Fと仮数OP3Fの上位8ビットとを加算する。仮数OP3Fの下位側の16ビットは、積和演算結果(OP1F*OP2F+OP3F)から仮数OP4F(24ビット)を生成する際にスティッキービットSとしてまとめられる。
図7は、図4の積和演算器100による積和演算の別の例を示す。図5から図6の説明と同じ内容については、詳細な説明は省略される。この例では、オペランドOP3の小数点の位置は、積OP1F*OP2Fの小数点の位置より27ビット上位側に設定される。この場合、シフタ120は、差DIFEに基づいて、仮数OP3Fを27ビット左シフトし、積OP1F*OP2Fとの桁合わせを実行する。すなわち、仮数OP3Fのシフト量SAは、-27ビットに設定される。
図7では、積OP1F*OP2Fの最上位ビットは、積和演算後の仮数OP3Fのスティッキービットと同じ位置になるため、仮数の積OP1F*OP2Fは、スティッキービットとしてまとめられる。なお、仮数OP3Fの最下位ビット(例えば、スティッキービット)が、積OP1F*OP2Fの最上位ビットより上位側にある場合にも、仮数OP3Fのシフト量SAを、-27ビットに制限する飽和処理が実行される。このため、仮数OP3Fの加算器126内でのビット位置は、図7と同じになる。シフト量SAを制限し、仮数OP3Fを加算器126のビット幅に収める飽和処理は、減算器114またはシフタ120により実行される。
図8は、図4の積和演算器100による積和演算の別の例を示す。図5から図7の説明と同じ内容については、詳細な説明は省略される。この例では、オペランドOP1がゼロに設定される。
オペランドOP1、OP2のいずれかまたは両方がゼロの場合、図4のゼロ検出器102またはゼロ検出器104の検出結果に基づき、セレクタ108、110は、オペランドOP1E、OP2Eの代わりに”1”を選択する。このため、加算器112は、”-125”を出力し、減算器114は、オペランドOP3Eが最小値(=”1”)の場合にも、”-126”の差DIFEを出力する。シフタ120は、差DIFEを飽和処理し、仮数OP3Fを27ビット左シフトする。
積OP1F*OP2Fはゼロになるため、仮数OP3Fと積OP1F*OP2Fとの和は、仮数OP3Fになる。そして、仮数OP3Fが仮数OP4Fとして出力される。このため、仮数OP3Fと積OP1F*OP2Fとの関係が図8の状態になるように指数OP1E、OP2Eを変更することで、仮数OP1F、OP2Fがゼロか否かに応じてそれぞれ動作する回路を設けずに、仮数OP3FをオペランドOP4の仮数OP4Fとして出力することができる。換言すれば、オペランドOP1、OP2のいずれかまたは両方がゼロの場合にも、ゼロでない場合と同じ回路動作をさせることができる。
この実施形態では、指数OP1E、OP2Eは”1”に設定される。指数OP1E、OP2Eが”1”に設定される場合の飽和処理前のシフト量preSAは、指数OP3Eを最小値”1”とする場合、式(2)で示される。式中のかぎ括弧内値は、各パラメータの値を示す。
preSA=(OP1E[1])+OP2E[1])-bias[127]-OP3E[1]=-126 ‥(2)
なお、IEEE754では、指数OP1E、OP2E、OP3Eの”1”は、”-126”乗を示す。
シフト量preSA(=-126)は、”-27”より小さいため、実際のシフト量SAは、飽和処理により”-27”に設定される。これにより、オペランドOP1、OP2のいずれかまたは両方がゼロの場合に、指数OP1E、OP2Eを”1”に設定することで、図8の状態にすることができ、仮数OP3FをオペランドOP4の仮数OP4Fとして出力することができる。
なお、シフト量SA=-27は、23ビットの仮数と、ヒドンビットと、ガードビットGと、ラウンドビットRと、積OP1F*OF2Fの整数部の第2位の1ビットとの和(23+1+1+1+1)から求められる。
ところで、オペランドOP1、OP2のいずれかまたは両方がゼロの場合に設定する指数OP1E、OP2Eは、シフト量SAを”-27”以下にできれば”1”以外でもよい。式(3)、(4)は、式(2)に基づいて、シフト量preSAを”-27”以下とする指数の和OP1E+OP2Eを求める例を示す。指数OP3Eは、式(2)と同様に最小値(=”1”)に設定される。
preSA[-27]≧(OP1E+OP2E)-bias[127]-OP3E[1] ‥(3)
OP1E+OP2E≦-27+127+1=101 ‥(4)
式(4)より、単精度の積和演算器100では、指数の和OP1E+OP2Eを101以下に設定することで、指数OP3Eの値にかかわらず、仮数の積OP1F*OP2Fと仮数OP3Fとの関係を図8と同じ状態にすることができる。
式(4)を単精度に限らず、半精度および倍精度に対しても適用可能にする例が式(5)および式(6)に示される。
OP1E+OP2E≦bias+1-(n+3)‥(5)
OP1E+OP2E≦bias-(W1-W2)‥(6)
式(5)において、”n”は、ヒドンビットを含む仮数のビット幅である。式(6)において、”W1”は、加算器126が演算に使用するビット幅であり、”W2”は、積OP1F*OP2Fのヒドンビットを含むビット幅である。
これにより、指数OP3Eおよび仮数OP3Fのバイパス経路とセレクタとを積和演算器100に設けることなく、オペランドOP1、OP2のいずれかまたは両方がゼロの場合、オペランドOP3をオペランドOP4として出力することができる。すなわち、オペランドOP1、OP2のいずれかまたは両方がゼロであることを検出してオペランドOP3をオペランドOP4として出力する場合に、積和演算器100の回路規模の増大を抑制することができる。
図9は、図4の積和演算器100の動作フローの一例を示す。すなわち、図9は、プロセッサ203(演算処理装置)の制御方法の一例を示す。図9に示す動作は、積和演算器100に浮動小数点数の積和演算命令が発行されたことに基づいて開始される。図9に示す動作の処理の一部は並列に実行されてもよい。なお、オペランドOP1、OP2、OP3のいずれかが無限大または非数の場合、特殊処理が必要になるが、特殊処理についての動作の説明は省略される。
まず、ステップS10において、積和演算器100は、オペランドOP1がゼロか否かを検出し、オペランドOP2がゼロか否かを検出する。積和演算器100は、オペランドOP1、OP1の一方または両方がゼロか否かを判定する。積和演算器100は、オペランドOP1、OP1の一方または両方がゼロの場合、動作をステップS12に移行し、オペランドOP1、OP1の両方が非ゼロの場合、動作をステップS14に移行する。オペランドOP1、OP2のゼロの検出は、例えば、ゼロ検出器102、104により実行される。
次に、ステップS12において、積和演算器100は、外部から受信する指数OP1Eの代わりに”1”を指数OP1Eとして選択して加算器112に出力する。また、積和演算器100は、外部から受信する指数OP2Eの代わりに”1”を指数OP2Eとして選択して加算器112に出力する。ステップS12の後、動作はステップS16に移行される。
ステップS14において、積和演算器100は、外部から受信する指数OP1Eを選択して加算器112に出力し、外部から受信する指数OP2Eを選択して加算器112に出力し、動作をステップS16に移行する。ステップS12、S14の動作は、例えば、オアゲート106およびセレクタ108、110により実行される。
ステップS16において、積和演算器100は、オペランドOP1、OP2の積演算における仮数積MULFと指数積MULEとを算出し、動作をステップS18に移行する。仮数積MULFは、仮数OP1F、OP2Fを乗じることで求められ、指数積MULEは、指数OP1E、OP2Eを加算してバイアスbiasを減じることで求められる。バイアスbiasは、単精度では”127”、倍精度では”1023”、半精度では”15”である。例えば、仮数積MULFは、ブースエンコーダ122および部分積加算回路124により算出され、指数積MULEは、加算器112により算出される。
ステップS18において、積和演算器100は、仮数の桁合わせをするために、仮数OP3Fのシフト量preSAを算出し、動作をステップS20に移行する。シフト量preSAは、飽和処理前の計算上のシフト量である。例えば、シフト量preSAは、減算器114により指数積MULEから指数OP3Eを減じることで算出される。
ステップS20において、積和演算器100は、シフト量preSAを加算器126のビット範囲に合わせる補正(飽和処理)を実行し、シフト量SAを求め、動作をステップS22に移行する。これにより、例えば、単精度では、”-27”より小さいシフト量preSAは、シフト量SA=”-27”に設定される。また、”46”より大きいシフト量preSAは、シフト量SA=”46”に設定される。例えば、飽和処理は、減算器114における減算後またはシフタ120におけるシフト動作前に実行される。
ステップS22において、積和演算器100は、ステップS20で算出したシフト量SAを使用して、仮数OP3Fのビットをシフトすることで、仮数OP1F、OP2Fとの桁合わせを行い、動作をステップS24に移行する。例えば、ステップS22の動作は、シフタ120により実行される。
ステップS24において、積和演算器100は、桁合わせした仮数OP3Fと、仮数OP1F、OP2Fの乗算結果とを加算し、動作をステップS26に移行する。例えば、ステップS24の動作は、加算器126により実行される。
ステップS26において、積和演算器100は、ステップS24での仮数の加算結果をIEEE754にしたがって正規化するために左シフトし、動作をステップS28に移行する。例えば、ステップS26の動作は、左シフタ128と図4には示していないリーディングゼロ回路等を使用して実行される。
ステップS28において、積和演算器100は、ステップS26で正規化した仮数の加算結果の丸め処理を実行することで、積和演算後の仮数を求め、動作をステップS30に移行する。例えば、ステップS28の動作は、丸め回路130により実行される。
ステップS30において、積和演算器100は、指数OP3Eと指数積MULEのうち、大きい方を積和演算後の仮の指数resultEとして選択する。また、積和演算器100は、仮の指数resultEを、ステップS26での正規化によるシフト量と、ステップS28での丸め処理の結果に基づいて補正し、動作をステップS32に移行する。例えば、ステップS30の動作は、セレクタ116および指数補正回路118により実行される。
そして、ステップS32において、積和演算器100は、ステップS28での丸め処理により得た仮数を仮数OP4Fとして出力し、ステップS30での補正処理により得た指数を指数OP4Eとして出力し、動作を終了する。
図10は、図4の積和演算器100が半精度である場合の積和演算の一例を示す。図5から図8の説明と同じ内容については、詳細な説明は省略される。
積和演算器100が半精度の場合、加算器126は35ビットの幅を有する。半精度の場合、ヒドンビット”1”を含めた仮数OP1F、OP2F、OP3Fは11ビットであり、積OP1F*OP2Fは22ビットである。このため、積OP1F*OP2Fが加算器126のビット幅に収まるように、小数点の位置(黒丸)は、20ビット目と19ビットの目の間に設定される。
図10に示す例では、オペランドOP3の小数点の位置は、積OP1F*OP2Fの小数点の位置より14ビット上位側に設定される。この場合、シフタ120は、差DIFEに基づいて、仮数OP3Fを14ビット左シフトし、積OP1F*OP2Fとの桁合わせを実行する。すなわち、仮数OP3Fのシフト量SAは、-14ビットに設定される。なお、シフト量SA=-14は、10ビットの仮数と、ヒドンビットと、ガードビットGと、ラウンドビットRと、積OP1F*OF2Fの整数部の第2位の1ビットとの和(10+1+1+1+1)から求められる。
図10に示すように、オペランドOP1、OP2のいずれかまたは両方がゼロの場合に設定する指数OP1E、OP2Eは、シフト量SAを”-14”以下にできればよい。式(7)、(8)は、式(2)に基づいて、シフト量preSAを”-14”以下とする指数の和OP1E+OP2Eを求める例を示す。指数OP3Eは、式(2)と同様に最小値の”1”に設定される。なお、半精度でのバイアスbiasは”15”である。
preSA[-14]≧(OP1E+OP2E)-bias[15]-OP3E[1] ‥(7)
OP1E+OP2E≦-14+15+1=2 ‥(8)
式(8)より、指数の和OP1E+OP2Eが”2”以下の場合、指数OP3Eの値にかかわらず、仮数の積OP1F*OP2Fと仮数OP3Fとの関係を図10と同じ状態にすることができる。図4に示すように、セレクタ108、110が選択する設定値を”1”にすることで、設定値を半精度、単精度、倍精度の積和演算器100で共通にすることができ、設計資産を流用することができる。
図11は、図4の積和演算器100が倍精度である場合の積和演算の一例を示す。図5から図8の説明と同じ内容については、詳細な説明は省略される。
積和演算器100が倍精度の場合、加算器126は161ビットの幅を有する。倍精度の場合、ヒドンビット”1”を含めた仮数OP1F、OP2F、OP3Fは53ビットであり、積OP1F*OP2Fは106ビットである。このため、積OP1F*OP2Fが加算器126のビット幅に収まるように、小数点の位置(黒丸)は、104ビット目と103ビットの目の間に設定される。
図11に示す例では、オペランドOP3の小数点の位置は、積OP1F*OP2Fの小数点の位置より56ビット上位側に設定される。この場合、シフタ120は、差DIFEに基づいて、仮数OP3Fを56ビット左シフトし、積OP1F*OP2Fとの桁合わせを実行する。すなわち、仮数OP3Fのシフト量SAは、-56ビットに設定される。なお、シフト量SA=-56は、52ビットの仮数と、ヒドンビットと、ガードビットGと、ラウンドビットRと、積OP1F*OF2Fの整数部の第2位の1ビットとの和(52+1+1+1+1)から求められる。
図11に示すように、オペランドOP1、OP2のいずれかまたは両方がゼロの場合に設定する指数OP1E、OP2Eは、シフト量SAを”-56”以下にできればよい。式(9)、(10)は、式(2)に基づいて、シフト量preSAを”-56”以下とする指数の和OP1E+OP2Eを求める例を示す。指数OP3Eは、式(2)と同様に最小値の”1”に設定される。なお、半精度でのバイアスbiasは”1023”である。
preSA[-56]≧(OP1E+OP2E)-bias[1023]-OP3E[1] ‥(9)
OP1E+OP2E≦-56+1023+1=968 ‥(10)
式(10)より、指数の和OP1E+OP2Eが”968”以下の場合、指数OP3Eの値にかかわらず、仮数の積OP1F*OP2Fと仮数OP3Fとの関係を図11と同じ状態にすることができる。
図12は、他の浮動小数点積和演算器の一例を示す。図4と同じ要素については、同じ符号を付し、詳細な説明は省略する。
図12に示す積和演算器101は、ゼロ検出器102、104、オアゲート106、加算器112、減算器114、セレクタ116および指数補正回路118を有する。また、積和演算器100は、シフタ120、ブースエンコーダ122、部分積加算回路124、加算器126、左シフタ128、丸め回路130、セレクタ132、134およびバイパス経路136、138を有する。
積和演算器101では、加算器112は、指数OP1E、OP2Eを直接受け、オアゲート106の出力は、セレクタ132、134の制御入力に接続される。バイパス経路136は、仮数OP3Fをセレクタ132に伝達し、バイパス経路138は、指数OP3Eをセレクタ134に伝達する。
セレクタ132は、論理0のゼロ検出信号ZDETをオアゲート106から受けた場合、丸め回路130の出力を選択して仮数OP4Fとして出力する。セレクタ132は、論理1のゼロ検出信号ZDETを受けた場合、バイパス経路136に伝達される仮数OP3Fを選択して仮数OP4Fとして出力する。セレクタ134は、論理0のゼロ検出信号ZDETをオアゲート106から受けた場合、指数補正回路118の出力を選択して指数OP4Eとして出力する。セレクタ134は、論理1のゼロ検出信号ZDETを受けた場合、バイパス経路138に伝達される指数OP3Eを選択して指数OP4Eとして出力する。
これにより、積和演算器101は、オペランドOP1、OP2のいずれかまたは両方がゼロの場合、バイパス経路136、136を使用して、オペランドOP3(指数OP3Eと仮数OP3F)をオペランドOP4(指数OP4Eと仮数OP4F)として出力する。但し、図12に示す積和演算器101では、単精度の場合、指数OP3E用の8ビットのバイパス経路138と仮数OP3F用の23ビットのバイパス経路136が設けられる。実際には、符号ビットのバイパス経路も設けられるため、オペランドOP3の入力側からオペランドOP4の出力側にかけて32ビットのバイパス経路が配線される。
また、セレクタ132は、23ビットの2入力のうちのいずれかの入力を選択し、セレクタ134は、8ビットの2入力のうちのいずれかの入力を選択する。実際には、符号ビットのセレクタも設けられる。これに対して、図4に示すセレクタ108、110の各々は、8ビットの2入力のうちのいずれかの入力を選択すればよい。このため、積和演算器101は、図4に示す積和演算器100に対して、バイパス経路136、138および16ビット分のセレクタのレイアウト領域が必要になる。
以上より、図4に示す積和演算器100は、積和演算器101に比べて、回路規模を削減することができ、プロセッサ203の回路規模の増大を抑制することができる。例えば、図3に示すように、プロセッサ203が多数の積和演算器100を有する場合、回路規模の削減効果は大きく、プロセッサ203のチップサイズの低減効果は大きい。これにより、図12に示す積和演算器101を採用する場合に比べて、情報処理装置300の製造コストを削減することができる。
また、積和演算器100、110では、仮数OP1F、OP2F、OP3Fの演算経路は、直列に配置されたブースエンコーダ122、部分積加算回路124、加算器126、左シフタ128および丸め回路130を含む。仮数OP1F、OP2F、OP3Fの演算回路は、指数OP1E、OP2E、OP3Eの演算回路に比べて規模が大きく、仮数OP1F、OP2F、OP3Fの演算時間は、指数OP1E、OP2E、OP3Eの演算時間に比べて増加する。すなわち、仮数OP1F、OP2F、OP3Fの演算回路が、積和演算器100、110の演算時間のボトルネックになる。
ボトルネックとなる演算経路にセレクタ132を追加した場合、積和演算の演算時間は長くなり、積和演算器101の性能は低下する。図4に示す積和演算器100では、ボトルネックとなる仮数OP1F、OP2F、OP3Fの演算経路にセレクタ等の回路が追加されないため、演算時間の増加を抑止することができ、積和演算器100の性能の低下を抑止することができる。
以上、図4から図11に示す実施形態においても、図1および図2に示す実施形態と同様の効果を得ることができる。すなわち、オペランドOP1、OP2のいずれかまたは両方がゼロであることを検出してオペランドOP3をオペランドOP4として出力する場合に、積和演算器100の回路規模の増大を抑制することができる。
回路規模の増大の抑制効果は、プロセッサ203に含まれる積和演算器100の数が多いほど大きくなる。プロセッサ203のチップサイズの増加を抑制できる場合、情報処理装置300の製造コストを削減することができる。
さらに、図4から図11に示す実施形態では、演算時間のボトルネックとなる演算経路にセレクタ等の回路を追加することなく、オペランドOP1、OP2のいずれかまたは両方がゼロである場合にオペランドOP3をオペランドOP4として出力することができる。これにより、積和演算の演算時間の増加を抑止することができ、積和演算器100の性能の低下を抑止することができる。
セレクタ108、110が選択する設定値を”1”にすることで、設定値を半精度、単精度、倍精度の積和演算器100で共通にすることができ、設計資産を流用することができる。
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
1 演算処理装置
10 積和演算器
11 ゼロ検出部
11a、11b ゼロ検出器
12 指数設定部
12a、12b セレクタ
13 指数算出部
14 乗算部
15 桁合わせ部
16 加算部
100、101 積和演算器
102、104 ゼロ検出器
106 オアゲート
108、110 セレクタ
112 加算器
114 減算器
116 セレクタ
118 指数補正回路
120 シフタ
122 ブースエンコーダ
124 部分積加算回路
126 加算器
128 左シフタ
130 丸め回路
200 ホストコンピュータ
201 通信インタフェース
202 制御装置
203 プロセッサ
204 メモリ
205 通信制御部
206 メモリコントローラ
207 全体命令制御部
208 処理ユニット
209 演算命令バッファ
210 演算命令制御部
211 複数のベクタレジスタ
300 情報処理装置
OP1、OP2、OP3、OP4 オペランド
OP1E、OP2E、OP3E、OP4E 指数
OP1F、OP2F、OP3F、OP4F 仮数

Claims (8)

  1. 浮動小数点積和演算器を有する演算処理装置において、
    前記浮動小数点積和演算器は、
    積和演算命令に含まれる第1オペランドと第2オペランドのいずれか、または前記第1オペランドと前記第2オペランドの両方がゼロであることを検出するゼロ検出部と、
    前記ゼロ検出部がゼロを検出した場合、前記第1オペランドの指数を第1設定値に設定し、前記第2オペランドの指数を第2設定値に設定する指数設定部と、
    前記指数設定部が出力する前記第1オペランドの指数と前記第2オペランドの指数と、前記積和演算命令に含まれる第3オペランドの指数とに基づいて、積和演算により得られる指数を算出する指数算出部と、
    前記第1オペランドの仮数と前記第2オペランドの仮数との積を算出する乗算部と、
    前記乗算部が算出した積に、桁合わせした前記第3オペランドの仮数を加算する加算部と、を有し、
    前記第1設定値と前記第2設定値の和は、前記第3オペランドのビット位置が、前記第1オペランドと前記第2オペランドの積の最上位ビットより上位ビット側に位置するように設定されることを特徴とする演算処理装置。
  2. 前記加算部が、仮数の最下位ビットより下位に位置する所定数の付加ビットを使用して演算を実行する場合、さらに前記第1設定値と前記第2設定値の和は、前記第3オペランドの仮数に付加される前記付加ビットの最下位ビットが、前記第1オペランドと前記第2オペランドの積の最上位ビットと同じ位置か、あるいは前記最上位ビットより上位ビット側に位置するように設定されることを特徴とする請求項1に記載の演算処理装置。
  3. 指数のバイアスをbias、仮数のビット幅をnとする場合、前記第1設定値と前記第2設定値の和は、”bias+1-(n+3)”以下に設定されることを特徴とする請求項1または請求項2に記載の演算処理装置。
  4. 指数のバイアスをbias、前記加算部が演算に使用するビット幅をW1、前記第1オペランドと前記第2オペランドとの積のビット幅W2とする場合、前記第1設定値と前記第2設定値の和は、”bias-(W1-W2)”以下に設定されることを特徴とする請求項1または請求項2に記載の演算処理装置。
  5. 前記第1設定値と前記第2設定値とは、”1”に設定されることを特徴とする請求項1または請求項2に記載の演算処理装置。
  6. 前記指数設定部は、
    前記ゼロ検出部が非ゼロを検出した場合、前記第1オペランドの指数を選択し、前記ゼロ検出部がゼロを検出した場合、前記第1設定値を前記第1オペランドの指数として選択する第1選択部と、
    前記ゼロ検出部が非ゼロを検出した場合、前記第2オペランドの指数を選択し、前記ゼロ検出部がゼロを検出した場合、前記第2設定値を前記第2オペランドの指数として選択する第2選択部と、を有し、
    前記指数算出部は、
    前記第1選択部が出力する前記第1オペランドの指数と、前記第2選択部が出力する前記第2オペランドの指数とを加算する加算器と、
    前記加算器が出力する加算結果と前記第3オペランドの指数とに基づいて、加算結果または前記第3オペランドの指数のいずれかを積和演算により得られる指数として選択する第3選択部と、を有することを特徴とする請求項1ないし請求項5のいずれか1項に記載の演算処理装置。
  7. 前記第1オペランド、前記第2オペランドおよび前記第3オペランドは、IEEE754の2進浮動小数点形式で表現されることを特徴とする請求項1ないし請求項6のいずれか1項に記載の演算処理装置。
  8. 浮動小数点積和演算器を有する演算処理装置の制御方法において、
    前記浮動小数点積和演算器が有するゼロ検出部が、積和演算命令に含まれる第1オペランドと第2オペランドのいずれか、または前記第1オペランドと前記第2オペランドの両方がゼロであることを検出し、
    前記浮動小数点積和演算器が有する指数設定部が、前記ゼロ検出部がゼロを検出した場合、前記第1オペランドの指数を第1設定値に設定し、前記第2オペランドの指数を第2設定値に設定し、
    前記浮動小数点積和演算器が有する指数算出部が、前記指数設定部が出力する前記第1オペランドの指数と前記第2オペランドの指数と、積和演算命令に含まれる第3オペランドの指数とに基づいて、積和演算により得られる指数を算出し、
    前記浮動小数点積和演算器が有する乗算部が、前記第1オペランドの仮数と前記第2オペランドの仮数との積を算出し、
    前記浮動小数点積和演算器が有する加算部が、前記乗算部が算出した積に、桁合わせした前記第3オペランドの仮数を加算し、
    前記第1設定値と前記第2設定値の和は、前記第3オペランドのビット位置が、前記第1オペランドと前記第2オペランドの積の最上位ビットより上位ビット側に位置するように設定されることを特徴とする演算処理装置の制御方法。
JP2018196803A 2018-10-18 2018-10-18 演算処理装置および演算処理装置の制御方法 Active JP7115211B2 (ja)

Priority Applications (4)

Application Number Priority Date Filing Date Title
JP2018196803A JP7115211B2 (ja) 2018-10-18 2018-10-18 演算処理装置および演算処理装置の制御方法
US16/590,637 US11226791B2 (en) 2018-10-18 2019-10-02 Arithmetic processing device and method of controlling arithmetic processing device that enables suppression of size of device
EP19201747.3A EP3640792A1 (en) 2018-10-18 2019-10-07 Arithmetic processing device and method of controlling arithmetic processing device
CN201910973303.4A CN111078292A (zh) 2018-10-18 2019-10-14 算术处理设备和控制算术处理设备的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2018196803A JP7115211B2 (ja) 2018-10-18 2018-10-18 演算処理装置および演算処理装置の制御方法

Publications (2)

Publication Number Publication Date
JP2020064504A JP2020064504A (ja) 2020-04-23
JP7115211B2 true JP7115211B2 (ja) 2022-08-09

Family

ID=68172126

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018196803A Active JP7115211B2 (ja) 2018-10-18 2018-10-18 演算処理装置および演算処理装置の制御方法

Country Status (4)

Country Link
US (1) US11226791B2 (ja)
EP (1) EP3640792A1 (ja)
JP (1) JP7115211B2 (ja)
CN (1) CN111078292A (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11650819B2 (en) 2019-12-13 2023-05-16 Intel Corporation Apparatuses, methods, and systems for instructions to multiply floating-point values of about one
US20210182056A1 (en) * 2019-12-13 2021-06-17 Intel Corporation Apparatuses, methods, and systems for instructions to multiply values of one
US11875154B2 (en) 2019-12-13 2024-01-16 Intel Corporation Apparatuses, methods, and systems for instructions to multiply floating-point values of about zero
US11847450B2 (en) 2019-12-13 2023-12-19 Intel Corporation Apparatuses, methods, and systems for instructions to multiply values of zero
CN113835675A (zh) * 2020-06-23 2021-12-24 深圳市中兴微电子技术有限公司 数据处理装置及数据处理方法
US20230129750A1 (en) * 2021-10-27 2023-04-27 International Business Machines Corporation Performing a floating-point multiply-add operation in a computer implemented environment

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009140491A (ja) 2007-12-07 2009-06-25 Nvidia Corp 融合型積和演算機能ユニット
JP2010218197A (ja) 2009-03-17 2010-09-30 Nec Computertechno Ltd 浮動小数点積和演算装置、浮動小数点積和演算方法、及び浮動小数点積和演算用プログラム
JP2014093085A (ja) 2012-10-31 2014-05-19 Intel Corp 入力データ値に応じたfmaユニットにおける電力消費の低減
JP2020500365A (ja) 2016-10-27 2020-01-09 グーグル エルエルシー ニューラルネットワーク計算ユニットにおける入力データのスパース性の活用

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5574672A (en) * 1992-09-25 1996-11-12 Cyrix Corporation Combination multiplier/shifter
EP0645699A1 (en) * 1993-09-29 1995-03-29 International Business Machines Corporation Fast multiply-add instruction sequence in a pipeline floating-point processor
JPH09507941A (ja) * 1995-04-18 1997-08-12 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン multiply−add浮動小数点シーケンスにおけるウエイト・サイクルなしのブロック正規化
US5748516A (en) * 1995-09-26 1998-05-05 Advanced Micro Devices, Inc. Floating point processing unit with forced arithmetic results
US6298367B1 (en) * 1998-04-06 2001-10-02 Advanced Micro Devices, Inc. Floating point addition pipeline including extreme value, comparison and accumulate functions
JP3600026B2 (ja) * 1998-08-12 2004-12-08 株式会社東芝 浮動小数点演算器
US7058830B2 (en) 2003-03-19 2006-06-06 International Business Machines Corporation Power saving in a floating point unit using a multiplier and aligner bypass
US8255726B2 (en) 2008-07-18 2012-08-28 International Business Machines Corporation Zero indication forwarding for floating point unit power reduction
CN101692202B (zh) * 2009-09-27 2011-12-28 龙芯中科技术有限公司 一种64比特浮点乘加器及其浮点运算流水节拍处理方法
US8667042B2 (en) * 2010-09-24 2014-03-04 Intel Corporation Functional unit for vector integer multiply add instruction
US8965945B2 (en) * 2011-02-17 2015-02-24 Arm Limited Apparatus and method for performing floating point addition
US9317250B2 (en) * 2012-11-12 2016-04-19 Advanced Micro Devices, Inc. Floating point multiply-add unit with denormal number support
US9830129B2 (en) * 2013-11-21 2017-11-28 Samsung Electronics Co., Ltd. High performance floating-point adder with full in-line denormal/subnormal support
US20150193203A1 (en) 2014-01-07 2015-07-09 Nvidia Corporation Efficiency in a fused floating-point multiply-add unit
CN108287681B (zh) * 2018-02-14 2020-12-18 中国科学院电子学研究所 一种单精度浮点融合点乘运算装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009140491A (ja) 2007-12-07 2009-06-25 Nvidia Corp 融合型積和演算機能ユニット
JP2010218197A (ja) 2009-03-17 2010-09-30 Nec Computertechno Ltd 浮動小数点積和演算装置、浮動小数点積和演算方法、及び浮動小数点積和演算用プログラム
JP2014093085A (ja) 2012-10-31 2014-05-19 Intel Corp 入力データ値に応じたfmaユニットにおける電力消費の低減
JP2020500365A (ja) 2016-10-27 2020-01-09 グーグル エルエルシー ニューラルネットワーク計算ユニットにおける入力データのスパース性の活用

Also Published As

Publication number Publication date
JP2020064504A (ja) 2020-04-23
US11226791B2 (en) 2022-01-18
CN111078292A (zh) 2020-04-28
US20200125331A1 (en) 2020-04-23
EP3640792A1 (en) 2020-04-22

Similar Documents

Publication Publication Date Title
JP7115211B2 (ja) 演算処理装置および演算処理装置の制御方法
US9841948B2 (en) Microarchitecture for floating point fused multiply-add with exponent scaling
US6751644B1 (en) Method and apparatus for elimination of inherent carries
US8694572B2 (en) Decimal floating-point fused multiply-add unit
US7720900B2 (en) Fused multiply add split for multiple precision arithmetic
US10489153B2 (en) Stochastic rounding floating-point add instruction using entropy from a register
US9317251B2 (en) Efficient correction of normalizer shift amount errors in fused multiply add operations
US8751555B2 (en) Rounding unit for decimal floating-point division
Brunie Modified fused multiply and add for exact low precision product accumulation
US11294627B2 (en) Floating point dot-product operator with correct rounding
US20100125621A1 (en) Arithmetic processing device and methods thereof
US8239441B2 (en) Leading zero estimation modification for unfused rounding catastrophic cancellation
JP3313560B2 (ja) 浮動小数点演算処理装置
US11550544B2 (en) Fused Multiply-Add operator for mixed precision floating-point numbers with correct rounding
US10489115B2 (en) Shift amount correction for multiply-add
US7752250B2 (en) Rounding floating point division results
US20090164544A1 (en) Dynamic range enhancement for arithmetic calculations in real-time control systems using fixed point hardware
Tsen et al. A combined decimal and binary floating-point multiplier
JP7087918B2 (ja) 演算処理装置及びその制御方法
US8041927B2 (en) Processor apparatus and method of processing multiple data by single instructions
JP5010648B2 (ja) 演算装置及び演算方法
WO2022090690A1 (en) High-precision anchored-implicit processing
JP5376659B2 (ja) 積和演算装置及び積和演算装置の制御方法
JPS62168228A (ja) 浮動小数点積和演算器
JPH0498524A (ja) 浮動小数点演算装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210709

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20220531

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: 20220628

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220711

R150 Certificate of patent or registration of utility model

Ref document number: 7115211

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150