JP2009258980A - Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ - Google Patents

Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ Download PDF

Info

Publication number
JP2009258980A
JP2009258980A JP2008107061A JP2008107061A JP2009258980A JP 2009258980 A JP2009258980 A JP 2009258980A JP 2008107061 A JP2008107061 A JP 2008107061A JP 2008107061 A JP2008107061 A JP 2008107061A JP 2009258980 A JP2009258980 A JP 2009258980A
Authority
JP
Japan
Prior art keywords
value
register
unit
simd
input
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.)
Granted
Application number
JP2008107061A
Other languages
English (en)
Other versions
JP4502040B2 (ja
Inventor
Yusuke Kobayashi
雄介 小林
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.)
NEC Corp
Original Assignee
NEC Corp
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 NEC Corp filed Critical NEC Corp
Priority to JP2008107061A priority Critical patent/JP4502040B2/ja
Priority to US12/385,406 priority patent/US8041927B2/en
Publication of JP2009258980A publication Critical patent/JP2009258980A/ja
Application granted granted Critical
Publication of JP4502040B2 publication Critical patent/JP4502040B2/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
    • 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)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

【課題】Dekkerの方法をSIMD演算器を用いて高速に実行することを可能とする。
【解決手段】演算処理装置10は、加算誤差を使用するプログラム1をコンパイルするコンパイラ2と、コンパイラ2からの複数の命令を格納する主記憶部4と、主記憶部4から読み出した命令に基づき、複数の演算を一の命令で実行するシングル命令マルチデータ(SIMD)方法の演算で計算誤差を求めるSIMD命令実行部6を有する。SIMD命令実行部6は、複数のレジスタからなる第1のレジスタ群171及び第2のレジスタ群172を有するSIMD用レジスタ177と、第1のレジスタ群171及び第2のレジスタ群172から入力される2つの入力の絶対値を比較する処理をSIMD方式で実行し、絶対値の大きい方を第1の値、小さい方を第2の値とする演算部18とを有し、演算部18は、第1の値及び第2の値を使用した加減算をSIMD方式で実行する。
【選択図】図1

Description

本発明は、複数の演算を一の命令で実行するシングル命令マルチデータ(SIMD(Single Instruction Multiple Data))方法の演算で計算誤差を求めるSIMD演算器、SIMD演算器の演算方法、演算処理装置及びコンパイラに関する。
ハードウェアの倍精度演算器を利用した高精度演算方法として、Double-Double形式の演算がある。Double-double形式とは倍精度形式64ビットを2ワード使用した浮動小数点形式の演算である。hi(MSB側)、lo(LSB側)として2つのワードを用いた106ビットの精度で演算が可能である。
Double-double形式の加算:(c.hi,c.lo)=(a.hi,a.lo)+(b.hi,b.lo)
ここで、下記のようにおく。fl(op(A))は、op(A)を正規化した結果、err(op(A))は、op(A)の演算誤差を示す。
a.hi+b.hi=fl(a.hi+b.hi)+err(a.hi+b.hi)=fl.hi+err.hi
a.lo+b.lo=fl(a.lo+b.lo)+err(a.lo+b.lo)=fl.lo+err.lo
この形式で加算をするためには、倍精度加算結果の計算誤差を算出する必要がある。この方法として、Dekkerの方法と、Knuthの方法が知られている。
Knuthの方法は下記の6命令からなる。a、bの2つの入力から計算誤差yが求まる。+は加算、−は減算を示す。
x←a+b
virtual←x−a
virtual←x−bvirtual
roundoff←b−bvirtual
roundoff←a−avirtual
y←aroundoff+broundoff
しかしながら、Knuthの方法では計算誤差算出に必要な演算数が多いという問題点がある。
これに対し、Dekkerの方法であると、下記の3命令で演算することができる。
x←a+b
virtual←x−a
y←b−bvirtual
ここで、Knuthの方法では、|a|>|b|が前提となっている。
このように、Dekkerの方法は、Knuthの方法と比べると計算誤差算出に必要な演算数が少ないというメリットがある。
Jonathan Richard Shewchuk, "Adaptive Precision Floating-Point Arithmetic and Fast Robust Geometric Predicates", School of Computer Science Carnegie Mellon University Pittsburgh, PA 15213
しかしながら、倍精度加算する2変数の絶対値の大小が演算前に自明である必要がある。従って、Dekkerの方法では、大小比較を行い、その結果を元に動作を決定する(条件判定する)ため、CPUの命令パイプラインをストールさせる可能性がある。また、ベクトル演算のようにSIMDで実行される倍精度加算においては、SIMDの2つの入力レジスタセット毎に大小関係の一致をとる必要があるため、Dekkerの方法では演算することができないという問題点がある。
本発明は、このような問題点を解決するためになされたものであり、Dekkerの方法をSIMD演算器を用いて高速に実行することを可能とするSIMD演算器、SIMD演算器の演算方法、演算処理装置及びコンパイラを提供することを目的とする。
本発明に係る演算器は、複数の演算を単一の命令(SIMD)で実行する演算器であって、複数のレジスタからなる第1のレジスタ群及び第2のレジスタ群を有するSIMD用レジスタと、前記第1のレジスタ群及び第2のレジスタ群から入力される2つの入力の絶対値を比較する処理をSIMD方式で実行し、絶対値の大きい方を第1の値、小さい方を第2の値とする演算手段とを有し、前記演算手段は、前記第1の値及び前記第2の値を使用した加減算をSIMD方式で実行するものである。
本発明に係る演算処理装置は、加算誤差を使用するプログラムをコンパイルするコンパイラと、前記コンパイラからの複数の命令を格納する記憶手段と、前記記憶手段から読み出した命令に基づき、複数の演算を単一の命令(SIMD)で実行する演算器とを有し、前記演算器は、複数のレジスタからなる第1のレジスタ群及び第2のレジスタ群を有するSIMD用レジスタと、前記第1のレジスタ群及び第2のレジスタ群から入力される2つの入力の絶対値を比較する処理をSIMD方式で実行し、絶対値の大きい方を第1の値、小さい方を第2の値とする演算手段とを有し、前記演算手段は、前記第1の値及び前記第2の値を使用した加減算をSIMD方式で実行するものである。
本発明に係る演算方法は、複数の演算を単一の命令(SIMD)で実行する演算器の演算方法であって、複数のレジスタからなる第1のレジスタ群及び第2のレジスタ群からの2つの入力の絶対値を比較し、絶対値が大きい方を第1の値とし、絶対値が小さい方を第2の値とし、前記第1の値が前記第1のレジスタ群、前記第2の値が前記第2のレジスタ群に格納されるようレジスタの値を入れ替え、前記第1及び第2のレジスタ群に格納されたそれぞれ前記第1の値及び第2の値を使用して演算を実行するものである。
本発明に係るコンパイラは、複数の演算を単一の命令(SIMD)で実行する演算器の命令列を生成するコンパイラであって、複数のレジスタからなる第1のレジスタ群及び第2のレジスタ群を有するSIMD用レジスタの前記第1のレジスタ群及び第2のレジスタ群から出力される2つのデータを演算手段に入力し、絶対値を比較させ、絶対値が大きい第1の値を前記第1のレジスタ群に、絶対値が小さい第2の値を前記第2のレジスタ群に格納させる第1の命令と、前記第1の値及び第2の値を使用して前記演算手段により演算を実行させる第2の命令とを生成するものである。
本発明によれば、Dekkerの方法をSIMD演算器を用いて高速に実行することを可能とするSIMD演算器、SIMD演算器の演算方法、演算処理装置及びコンパイラを提供することができる。
以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。この実施の形態は、本発明を、複数の演算を一の命令で実行するシングル命令マルチデータ(SIMD)方法の演算で計算誤差を求める演算処理装置に適用したものである。本実施の形態は、IEEE754浮動小数点形式の加算をするときに生じる加算誤差算出を、SIMD命令実行部で従来方式より少ない実行ステップ数で行うためのものである。
実施の形態1.
図1は、本発明の実施の形態にかかる演算処理装置100を示す図である。図1に示すように、加算誤差を使用するプログラム1をコンパイルするコンパイラ(翻訳装置)2と、コンパイラ2からの複数の命令を格納する主記憶部4と、主記憶部4から読み出した命令に基づき、複数の演算を一の命令で実行するシングル命令マルチデータ(SIMD)方法の演算で計算誤差を求めるSIMD演算手段としてのSIMD命令実行部6とを有する。
SIMD命令実行部6は、複数のレジスタからなる第1のレジスタ群171及び第2のレジスタ群172から入力される2つの入力の絶対値を比較する処理をSIMD方式で実行し、絶対値の大きい方を第1の値、小さい方を第2の値とする演算部18を有し、演算部18は、第1の値及び第2の値を使用した加減算をSIMD方式で実行する。
この演算処理装置100においては、加算誤差を使用するプログラム(プログラムコード)1が、コンパイラ2に入力され、SIMD命令実行部6が実行可能な命令形式に変換される。この変換結果が主記憶部4に格納される。主記憶部4は、SIMD命令実行部6の指示に応じて、命令を送出する。SIMD命令実行部6は、必要あれば、主記憶部4に入力データを要求をした後、命令に従って、SIMD方式で、比較や加減算処理を実行する。SIMD命令実行部6は、必要あれば、適宜、主記憶部4に、演算結果を出力する。
本実施の形態においては、比較演算部112が第1のレジスタ群171及び第2のレジスタ群172のレジスタ値の絶対値の大小関係を判定し、入力データを第1の値、第2の値に振り分ける。このように大小関係が特定された第1の値、第2の値を使用すれば、上述したDekkerの方法により、倍精度加算結果の計算誤差を算出することができる。
実施の形態2.
次に、本発明の第2の実施の形態について説明する。図2は、本発明の実施の形態にかかる演算処理装置10を示す図である。図2に示すように、演算処理装置10は、プログラム1が入力される翻訳装置(コンパイラ)2と、演算装置3と、主記憶部4とを有する。演算装置3は、命令判定部5と、複数の演算を一の命令で実行するシングル命令マルチデータ(SIMD)方法の演算で計算誤差を求めるSIMD演算器として機能するSIMD命令実行部6とを有する。
このように構成された演算処理装置10においては、加算誤差を使用するプログラムコードが、プログラムの入力により翻訳装置2に入力され、演算装置が実行可能な命令形式に変換される。この変換結果が、命令の格納S1により、主記憶部4に格納される。主記憶部4は、演算装置3の指示に応じて、演算装置3の命令判定部5に、命令の入力S2を送出する。命令判定部5は、命令の入力S2に応じ、SIMD命令実行部6に、命令実効制御S3を送出する。
SIMD命令実行部6は、必要あれば、主記憶部4に入力データ要求をし、演算データ入力S4を主記憶部から受信した後、命令実効制御S3によって指示された命令を実行する。SIMD命令実行部6は、必要あれば、適宜、主記憶部4に、演算結果出力S5を送出する。
図3は、SIMD命令実行部の詳細を示す図である。図3に示すように、SIMD命令実行部6は、レジスタ入力部クロスバ16、SIMD用レジスタ17、レジスタ出力部クロスバ11、演算部18、書き戻し制御部14、命令制御部30を有する。SIMD用レジスタ17は、V0を格納する、複数のレジスタ(レジスタ番号0、1、・・・、N−2、N−1)を有するレジスタ群171、V1を格納する、複数のレジスタ(レジスタ番号0、1、・・・、N−2、N−1)を有するレジスタ群172、V2を格納する、複数のレジスタ(レジスタ番号0、1、・・・、N−2、N−1)を有するレジスタ群173を有する。なお、SIMD用レジスタ17は、本実施の形態においては、SIMD演算に使用するが、レジスタとして他の用途で使用することも可能である。演算部18は、比較演算手段として機能するVFCR(Vector Floating Compare to Return values)演算実行部12、加算手段として機能する浮動小数点加算器13を有し、SIMD方式の演算を実行する。このSIMD命令実行部6は、IEEE754(IEEE二進化浮動小数点数演算標準)規格で定義される浮動小数点演算を行うものであって、倍精度加算結果の計算誤差を算出するものである。
ここで、このSIMD命令実行部6が実行する命令について説明する。下記はその命令列を示す。
VFCR V0,V1 :(V0(i),V1(i))←(V0(i),V1(i))
VFAD V2,V0,V1 :V2(i)←V0(i)+V1(i)
VFSB V2,V2,V0 :V2(i)←V2(i)−V0(i)
VFSB V2,V1,V2 :V2(i)←V1(i)−V2(i)
まず、VFCRでは、2つのデータ(V0、V1)の絶対値の大小関係を調べ、絶対値の大きい方をV0(i)(第1の値)とし、絶対値の小さい方をV1(i)(第2の値)とする。そして、VFADでは、第1の値V0(i)と第2の値V1(i)を加算する。次に、VFSBで、前述の加算結果V2(i)から第1の値V0(i)を減算する。最後に、第2の値V1(i)から前述の減算結果V2(i)を減算する。この4命令により、加算誤差を求めるものである。次に、この演算を行う各ブロックについて詳細に説明する。
VFCR演算実行部12は、第1のレジスタ群171及び第2のレジスタ群172から入力される2つの入力の絶対値を比較し、絶対値の大きい方を第1の値V0(i)、小さい方を第2の値V1(i)として出力する。
レジスタ入力部クロスバ16は、演算部18による演算結果をSIMD用レジスタ17に入力する。
SIMD用レジスタ17は、第1の値V0(i)を格納する第1及び第2の値V1(i)を格納する第2のレジスタ群171、172の他、浮動小数点加算器13の演算結果を格納する第3のレジスタ群173を有する。
レジスタ出力部クロスバ11は、SIMD用レジスタ17からのデータを演算部18に出力する。レジスタ入力部クロスバ16、レジスタ出力部クロスバ11は、クロスバスイッチから構成される。すなわち、縦方向に並行した複数の通信路と横方向の同様な通信路の交点にスイッチを設け、これらのスイッチ群を制御することで、対向する通信路との専有経路を動的に構築する構造を有する。
浮動小数点加算器13は、第1の値V0(i)、第2の値V1(i)及び演算部18の演算結果V2(i)を使用して加減算をする。すなわち、上述のVFAD及びVFSBの演算を実行する。具体的には、第1の値V0(i)と第2の値V1(i)を加算し、当該加算結果V2(i)から第1の値V0(i)を減算し、第2の値V1(i)から当該減算結果V2(i)を減算する。
書き戻し制御部14は、演算部18からのデータを64ビットとしてレジスタ入力部クロスバ16に出力する。すなわち、VFCR演算実行部12からは、絶対値の大きさが判断された第1の値V1(i)が64ビットと、第2の値V1(i)が64ビットの計128ビットが出力されるが、配線の引き回しを削減するため、例えば第2の値V1(i)は、バッファに格納し、第1の値V0(i)をレジスタ入力部クロスバ16に出力し、次のタイミングで、第2の値V1(i)をレジスタ入力部クロスバ16に送出する。なお、本実施の形態においては、書き戻し制御部14を設けているが、例えばVFCR演算実行部12とレジスタ入力部クロスバ16との距離が近い場合などの場合は、設けなくてもよい。
命令制御部30は、第1の値V0(i)を第1のレジスタ群171に入力し、第2の値V1(i)を第2のレジスタ群172に入力するようレジスタ入力部クロスバ16を制御する。命令制御部30は、さらに、浮動小数点加算器13の加減算結果を第3のレジスタ群173に入力するようレジスタ入力部クロスバ16を制御する。さらに、第1乃至第3のレジスタ群171−173からの出力をVFCR演算実行部12及び浮動小数点加算器13のいずれに入力するようレジスタ出力部クロスバ11を制御する。
このため、図2に戻って、コンパイラ2は、第1のレジスタ群171及び第2のレジスタ群172から出力される2つのデータを演算部18に入力し、絶対値を比較させ、絶対値が大きい第1の値V0(i)を第1のレジスタ群171に、絶対値が小さい第2の値V1(i)を第2のレジスタ群172に格納させる第1の命令と、第1のレジスタ群171からの第1の値V0(i)と第2のレジスタ群172からの第2の値V1(i)を演算部18に入力し、加算させ、当該加算結果を第3のレジスタ群173に入力する第2の命令と、第3のレジスタ群173からの当該加算結果から第1のレジスタ群171からの第1の値V0(i)を減算させ、当該減算結果を第3のレジスタ群173に入力する第3の命令と、第2のレジスタ群172からの第2の値V1(i)から第3のレジスタ群173からの当該減算結果を減算させる第4の命令とを生成する。これらの命令S1は、主記憶部4に格納され、S2により命令判定部5に入力され、S3によりSIMD命令実行部6の命令制御部30に入力される。
次に、このSIMD命令実行部の動作について説明する。図4は、本発明の実施の形態にかかるSIMD命令実行部の動作を示すフローチャートである。VFCR命令実行可能なSIMD命令実行部6の命令制御部30は、命令実効制御S3を受信すると、SIMD用レジスタ17にレジスタ制御S16を送出し、書き戻し制御部14に書き戻し制御S17を送出し、レジスタ出力部クロスバ11に出力部クロスバ制御S18を送出し、レジスタ入力部クロスバ16に入力部クロスバ制御S19を送出する。
SIMD用レジスタ17は、レジスタ制御S16を受信すると、V0,V1,V2の各レジスタセットから、指定されたレジスタセットの0番のレジスタに格納されている値を送出する。例えば、V0出力S13にV0の0番のレジスタを出力し、V1出力S14にV1の0番のレジスタを出力する。以降、2サイクル毎に、1番からN−1番までのレジスタの値が、出力される(ステップSP1)。なお、この2サイクルは、書き戻し制御部14のバッファ制御に関わる。1サイクルごとに送出すると、バッファが不足する。
レジスタ出力部クロスバ11は、演算部18への入力を切り替える。レジスタ出力部クロスバ11は、VFCR命令S3を受信した命令制御部30が出力した出力部クロスバ制御S18を受信すると、S18によってレジスタセット番号を判定し、S13をVFCR入力S6に、S14をVFCR入力S7に送出する(ステップSP2)。
VFCR演算実行部12は、S6を受信すると、VFCR演算を実行し(ステップSP3)、S10とS11を書き戻し制御部14に出力する。
書き戻し制御部14は、レジスタ入力部クロスバ16への入力を制御する。書き戻し制御部14は、VFCR命令S3を受信した命令制御部30が出力したS17を受信すると、S11を64bitsのバッファに格納し、S10を演算結果S20に出力する。S10の送出が終了した次のサイクルで、S11が格納されたバッファの値を、S20に出力する(ステップSP4)。
レジスタ入力部クロスバ16は、SIMD用レジスタ17への入力を切り替える(ステップSP5)。レジスタ入力部クロスバ16は、VFCR命令S3を受信した命令制御部30が出力したS19を受信すると、S19から2つの入力先S21、S22を判定し、その入力先に、受信したS20を出力する。例えば、レジスタ入力部クロスバ16は、最初に受信したS20の64bitsデータを、入力先1であるV0入力S21に出力する。次に、レジスタ入力部クロスバ16は、2番目のサイクルで受信したS20の64bitsでータを,入力先2であるV1位力S22に出力する。
SIMD用レジスタ17は、S21、S22の入力を、VFCR演算の入力として出力した番号のレジスタに格納する。例えば、最初に受信したS21はV0の0番のレジスタに格納され、最初に受信したS22はV1の0番に格納される。V0とV1は、S21、S22を受信する毎に、格納先レジスタ番号を+1し、S21、S22をN個のレジスタに格納する。
この後は、命令に従って、SIMD用レジスタ17のV0出力S13、V1出力V13、V2出力V14を、加算器入力S8又は加算器入力S9に入力して、加算又は減算を実行する。先ず、V0出力S13を加算器入力S8に、V1出力V13を加算器入力S9に入力し、浮動小数点加算器13により、両者を加算する(ステップSP6)。演算結果は、加算器出力S12から書き戻し制御部14を介してレジスタ入力部クロスバ16に入力される。これはSIMD用レジスタ17のV2入力S23から入力される。
次に、SIMD用レジスタ17のV2出力S15を加算器入力S8に、V0出力S13を加算器入力S9に入力し、浮動小数点加算器13により、両者を減算する(ステップSP7)。演算結果は、加算器出力S12から書き戻し制御部14を介してレジスタ入力部クロスバ16に入力される。これはSIMD用レジスタ17のV2入力S23から入力される。
次に、SIMD用レジスタ17のV1出力S14を加算器入力S8に、V2出力S15を加算器入力S9に入力し、浮動小数点加算器13により、両者を減算する(ステップSP8)。演算結果は、加算器出力S12から書き戻し制御部14を介してレジスタ入力部クロスバ16に入力される。これはSIMD用レジスタ17のV2入力S23から入力される。この得られた加算誤差は、第3のレジスタ群173に格納しておき、必要な場合に読み出しても、書き戻し制御部14などから外部に出力するものとしてもよい。
次に、VFCR演算実行部12について更に詳細に説明する。図5は、VFCR演算実行部12を示すブロック図である。VFCR演算実行部12は、VFCR入力S6、S7が入力されるバッファ41、42と、インバータ43と、加算器44と、セレクタ45とを有する。
バッファ41、42は、符号ビット、指数部及び仮数部からなる64ビットのデータの格納するものであって、セレクタ45にこの64ビットのデータを出力すると共に、符号ビットを除く63ビットのデータが加算器44に入力される。このとき、入力S7の方の指数部及び仮数部のデータ63ビットは、インバータ43に入力され反転される。反転したデータを加算することで、両者を減算する。
加算器44は、例えば、減算した値がマイナスであれば0、プラスであれば1を出力する比較手段として機能する。セレクタ45は、絶対値が大きい第1の値V0をS10から出力し、絶対値が小さい第2の値V1をS11から出力する。加算器44からの大小結果S26がマイナス(0)であれば、入力S7の方が大きいとしてS10から出力し、S6をS11から出力する。大小関係S26がプイラス(1)であれば、S6をS10とし、S7をS11として出力する。
次に、VFCR演算実行部12の動作について説明する。VFCR演算実行部12は、S6を受信するとS6の符号ビットを除いた63ビットを加算器入力として加算器44に入力し、S7を受信するとS7の符号ビットを除いた63ビットの全ビットを反転し、加算器入力として加算器44に入力する。
加算器44は、3入力の加算器で、S23とS25と+1を加算し、最上位ビット(ビット63)からの桁上がりの信号を大小結果S26として、セレクタ45に出力する。
セレクタ45は、大小結果S25が1である(S6の絶対値≧S7の絶対値)ときに、VFCR入力S6をVFCR出力S10に出力し、VFCR入力S7をVFCR出力S11に出力する。セレクタ45は、大小結果S26が0である(S6の絶対値<S7の絶対値)ときに、VFCR入力S6をVFCR出力S11に出力し、VFCR入力S7をVFCR出力S10に出力する。上述の動作により、VFCR演算実行部12の出力であるS10、S11を浮動小数点データとしたときのS10、S11の関係は、S10の絶対値≧S11の絶対値となる。
なお、この動作例では、IEEE754浮動小数点データ形式の倍精度形式(バイナリ64)を前提として記述しているので、扱うデータ幅を64ビットとしているが、このデータ幅に依存するものではない。単精度形式(バイナリ32)等々、他の形式でも実現できることは勿論である。
また、VFCR演算実行部12は、浮動小数点加算器13と別に記述しているが、浮動小数点加算器13が有する加算器を利用することで、加算器13の機能の一部として実装されることも可能である。また、VFCR演算実行部12は、固定小数点加算器、ALUなど64ビットの加算器を有する演算器の機能の一部として実装されることも可能である。
さらに、この動作例では、1つの演算器で、N個のデータを処理するSIMD命令実行部が記述されているが、演算器数をM個に増やした実装も可能である。
なお、本発明は上述した実施の形態のみに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
例えば、上述の実施の形態では、ハードウェアの構成として説明したが、これに限定されるものではなく、任意の処理を、CPU(Central Processing Unit)にコンピュータプログラムを実行させることにより実現することも可能である。この場合、コンピュータプログラムは、記録媒体に記録して提供することも可能であり、また、インターネットその他の伝送媒体を介して伝送することにより提供することも可能である。
本発明の実施の形態にかかる演算処理装置を示す図である。 本発明の実施の形態にかかる演算処理装置を示す図である。 本発明の実施の形態にかかるSIMD命令実行部の詳細を示す図である。 本発明の実施の形態にかかるSIMD命令実行部の動作を示すフローチャートである。 本発明の実施の形態にかかるVFCR演算実行部を示すブロック図である。
符号の説明
2 コンパイラ
3 演算装置
4 主記憶部
5 命令判定部
6 SIMD命令実行部
10、100 演算処理装置
11 レジスタ出力部クロスバ
12 VFCR演算実行部
13 浮動小数点加算器
14 書き戻し制御部
16 レジスタ入力部クロスバ
17 SIMD用レジスタ
18 演算部
30 命令制御部
41、42 バッファ
43 インバータ
44 加算器
45 セレクタ
112 比較演算部
113 加算部
117 SIMD用レジスタ
171−173 レジスタ群

Claims (17)

  1. 複数の演算を単一の命令(SIMD)で実行する演算器であって、
    複数のレジスタからなる第1のレジスタ群及び第2のレジスタ群を有するSIMD用レジスタと、
    前記第1のレジスタ群及び第2のレジスタ群から入力される2つの入力の絶対値を比較する処理をSIMD方式で実行し、絶対値の大きい方を第1の値、小さい方を第2の値とする演算手段とを有し、
    前記演算手段は、前記第1の値及び前記第2の値を使用した加減算をSIMD方式で実行する、演算器。
  2. 前記演算手段による演算結果を前記SIMD用レジスタに入力するレジスタ用入力手段と、
    前記レジスタ用入力手段を制御する命令制御手段とを有し、
    前記命令制御手段は、前記第1の値を前記第1のレジスタ群に入力し、前記第2の値を前記第2のレジスタ群に入力するよう前記レジスタ用入力手段を制御する
    ことを特徴とする請求項1記載の演算器。
  3. 前記演算手段は、前記第1のレジスタ群及び第2のレジスタ群から入力される2つの入力の絶対値を比較する処理をSIMD方式で実行し、絶対値の大きい方を第1の値、小さい方を第2の値とする比較演算手段と、前記第1の値及び前記第2の値を使用した加減算をSIMD方式で実行する加算手段とを有する
    ことを特徴とする請求項2記載の演算器。
  4. 前記SIMD用レジスタからのデータを前記演算手段に出力するレジスタ用出力手段を有し、
    前記SIMD用レジスタは、前記第1及び第2のレジスタ群と、前記加算手段の演算結果を格納する第3のレジスタ群を有し、
    前記命令制御手段は、前記比較演算手段の比較演算結果を前記第1及び第2のレジスタ群に入力し前記加算手段の加減算結果を前記第3のレジスタ群に入力するよう前記レジスタ用入力手段を制御し、前記第1乃至第3のレジスタ群からの出力を前記比較演算手段又は前記加算手段のいずれに入力するよう前記レジスタ用出力手段を制御する
    ことを特徴とする請求項3記載の演算器。
  5. IEEE754規格で定義される浮動小数点演算を行うものであって、前記第1及び第2のレジスタ群に格納される値は、符号ビット、指数部及び仮数部からなり、
    前記第1及び第2のレジスタ群から入力される2つの入力の符号ビットを除き指数部及び仮数部を比較する比較手段と、
    前記比較手段の比較結果に基づき絶対値が大きい方を前記第1の値として出力し、絶対値が小さい方を前記第2の値として出力する選択手段と
    を有することを特徴とする請求項1乃至4のいずれか1項記載の演算器。
  6. 前記加算手段は、前記第1の値と前記第2の値を加算し、当該加算結果から前記第1の値を減算し、前記第2の値から当該減算結果を減算する
    ことを特徴とする請求項1乃至5のいずれか1項記載の演算器。
  7. 倍精度加算結果の計算誤差を算出するものである
    ことを特徴とする請求項1乃至6のいずれか1項記載の演算器。
  8. 加算誤差を使用するプログラムをコンパイルするコンパイラと、
    前記コンパイラからの複数の命令を格納する記憶手段と、
    前記記憶手段から読み出した命令に基づき、複数の演算を単一の命令(SIMD)で実行する演算器とを有し、
    前記演算器は、
    複数のレジスタからなる第1のレジスタ群及び第2のレジスタ群を有するSIMD用レジスタと、
    前記第1のレジスタ群及び第2のレジスタ群から入力される2つの入力の絶対値を比較する処理をSIMD方式で実行し、絶対値の大きい方を第1の値、小さい方を第2の値とする演算手段とを有し、
    前記演算手段は、前記第1の値及び前記第2の値を使用した加減算をSIMD方式で実行する、演算処理装置。
  9. 前記演算手段による演算結果を前記SIMD用レジスタに入力するレジスタ用入力手段と、
    前記レジスタ用入力手段を制御する命令制御手段とを有し、
    前記命令制御手段は、前記第1の値を前記第1のレジスタ群に入力し、前記第2の値を前記第2のレジスタ群に入力するよう前記レジスタ用入力手段を制御する
    ことを特徴とする請求項7記載の演算処理装置。
  10. 前記演算器は、命令判定手段を有し、前記記憶手段から読み出した命令に基づき、2つの入力の絶対値を比較し絶対値が大きい前記第1の値を前記第1のレジスタ群に、絶対値が小さい前記第2の値を前記第2のレジスタ群に格納する第1の命令と、前記第1の値と前記第2の値を加算する第2の命令と、当該加算結果から前記第1の値を減算する第3の命令と、前記第2の値から当該減算結果を減算する第4の命令を生成し、前記命令制御手段に入力する
    ことを特徴とする請求項7記載の演算処理装置。
  11. 前記演算手段は、前記第1のレジスタ群及び第2のレジスタ群から入力される2つの入力の絶対値を比較する処理をSIMD方式で実行し、絶対値の大きい方を第1の値、小さい方を第2の値とする比較演算手段と、前記第1の値及び前記第2の値を使用した加減算をSIMD方式で実行する加算手段とを有する
    ことを特徴とする請求項9記載の演算処理装置。
  12. 前記SIMD用レジスタからのデータを前記演算手段に出力するレジスタ用出力手段を有し、
    前記SIMD用レジスタは、前記第1及び第2のレジスタ群と、前記加算手段の演算結果を格納する第3のレジスタ群を有し、
    前記命令制御手段は、前記比較演算手段の比較演算結果を前記第1及び第2のレジスタ群に入力し前記加算手段の加減算結果を前記第3のレジスタ群に入力するよう前記レジスタ用入力手段を制御し、前記第1乃至第3のレジスタ群からの出力を前記比較演算手段又は前記加算手段のいずれに入力するよう前記レジスタ用出力手段を制御する
    ことを特徴とする請求項11記載の演算処理装置。
  13. IEEE754規格で定義される浮動小数点演算を行うものであって、前記第1及び第2のレジスタ群に格納される値は、符号ビット、指数部及び仮数部からなり、
    前記第1及び第2のレジスタ群から入力される2つの入力の符号ビットを除き指数部及び仮数部を比較する比較手段と、
    前記比較手段の比較結果に応じて絶対値が大きい方を前記第1の値として出力し、絶対値が小さい方を前記第2の値として出力する選択手段と
    を有することを特徴とする請求項8乃至12記載の演算処理装置。
  14. 倍精度加算結果の計算誤差を算出するものである
    ことを特徴とする請求項8乃至13のいずれか1項記載の演算処理装置器。
  15. 複数の演算を単一の命令(SIMD)で実行する演算器の演算方法であって、
    複数のレジスタからなる第1のレジスタ群及び第2のレジスタ群からの2つの入力の絶対値を比較し、絶対値が大きい方を第1の値とし、絶対値が小さい方を第2の値とし、
    前記第1の値が前記第1のレジスタ群、前記第2の値が前記第2のレジスタ群に格納されるようレジスタの値を入れ替え、
    前記第1及び第2のレジスタ群に格納されたそれぞれ前記第1の値及び第2の値を使用して演算を実行する演算方法。
  16. 複数の演算を単一の命令(SIMD)で実行する演算器の命令列を生成するコンパイラであって、
    複数のレジスタからなる第1のレジスタ群及び第2のレジスタ群を有するSIMD用レジスタの前記第1のレジスタ群及び第2のレジスタ群から出力される2つのデータを演算手段に入力し、絶対値を比較させ、絶対値が大きい第1の値を前記第1のレジスタ群に、絶対値が小さい第2の値を前記第2のレジスタ群に格納させる第1の命令と、
    前記第1の値及び第2の値を使用して前記演算手段により演算を実行させる第2の命令とを生成するコンパイラ。
  17. 前記第1のレジスタ群からの前記第1の値と前記第2のレジスタ群からの前記第2の値を前記演算手段に入力し、加算させ、当該加算結果を複数のレジスタからなる第3のレジスタ群に入力する前記第2の命令と、
    前記第3のレジスタ群からの当該加算結果から前記第1のレジスタ群からの前記第1の値を減算させ、当該減算結果を前記第3のレジスタ群に入力する第3の命令と、
    前記第2のレジスタ群からの前記第2の値から前記第3のレジスタ群からの当該減算結果を減算させる第4の命令とを更に生成する
    ことを特徴とする請求項14記載のコンパイラ。
JP2008107061A 2008-04-16 2008-04-16 Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ Expired - Fee Related JP4502040B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008107061A JP4502040B2 (ja) 2008-04-16 2008-04-16 Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ
US12/385,406 US8041927B2 (en) 2008-04-16 2009-04-07 Processor apparatus and method of processing multiple data by single instructions

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008107061A JP4502040B2 (ja) 2008-04-16 2008-04-16 Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ

Publications (2)

Publication Number Publication Date
JP2009258980A true JP2009258980A (ja) 2009-11-05
JP4502040B2 JP4502040B2 (ja) 2010-07-14

Family

ID=41386321

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008107061A Expired - Fee Related JP4502040B2 (ja) 2008-04-16 2008-04-16 Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ

Country Status (1)

Country Link
JP (1) JP4502040B2 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010049611A (ja) * 2008-08-25 2010-03-04 Nec Corp Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ
US8041927B2 (en) 2008-04-16 2011-10-18 Nec Corporation Processor apparatus and method of processing multiple data by single instructions

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0612226A (ja) * 1992-06-25 1994-01-21 Mitsubishi Electric Corp 絶対値比較装置
US20030221089A1 (en) * 2002-05-23 2003-11-27 Sun Microsystems, Inc. Microprocessor data manipulation matrix module

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0612226A (ja) * 1992-06-25 1994-01-21 Mitsubishi Electric Corp 絶対値比較装置
US20030221089A1 (en) * 2002-05-23 2003-11-27 Sun Microsystems, Inc. Microprocessor data manipulation matrix module

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8041927B2 (en) 2008-04-16 2011-10-18 Nec Corporation Processor apparatus and method of processing multiple data by single instructions
JP2010049611A (ja) * 2008-08-25 2010-03-04 Nec Corp Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ
JP4613992B2 (ja) * 2008-08-25 2011-01-19 日本電気株式会社 Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ

Also Published As

Publication number Publication date
JP4502040B2 (ja) 2010-07-14

Similar Documents

Publication Publication Date Title
JP6694880B2 (ja) 有効度整合
KR102447636B1 (ko) 부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법
JP6684713B2 (ja) 融合積和演算を実行するための方法及びマイクロプロセッサ
US7720900B2 (en) Fused multiply add split for multiple precision arithmetic
JP7115211B2 (ja) 演算処理装置および演算処理装置の制御方法
US20130246496A1 (en) Floating-point vector normalisation
JP4388980B2 (ja) 浮動小数点数の除算または平方根演算を行う演算装置及び演算方法
JP2006107463A (ja) パック・データの乗加算演算を実行する装置
JP2006154979A (ja) 浮動小数点数演算回路
JP4482052B2 (ja) 演算装置および演算方法
JP2020507844A (ja) 入力オペランド値を処理するための装置及び方法
JP4476210B2 (ja) 逆数演算の結果値の初期推定値を求めるデータ処理装置および方法
JP4601544B2 (ja) 入力値に逆数演算を実施して結果値を作り出すデータ処理装置および方法
JP4502040B2 (ja) Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ
JP4613992B2 (ja) Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ
US8041927B2 (en) Processor apparatus and method of processing multiple data by single instructions
KR20210122828A (ko) 앵커 데이터 요소에서의 특수 값 인코딩
US10963245B2 (en) Anchored data element conversion
JP7087918B2 (ja) 演算処理装置及びその制御方法
KR20240102915A (ko) 부동소수점 연산 방법 및 연산 장치
JPWO2002029546A1 (ja) 演算器及びそれを用いた電子回路装置
JP3522167B2 (ja) 演算処理回路及び演算処理方法
JP5010648B2 (ja) 演算装置及び演算方法
JP2013210837A (ja) 演算回路及び演算方法
JP2002304288A (ja) データ演算処理装置及びデータ演算処理プログラム

Legal Events

Date Code Title Description
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: 20100330

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100412

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130430

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130430

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140430

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees