JP4418578B2 - 第1、第2、第3オペランドに浮動小数点演算を適用するためのデータ処理装置および方法 - Google Patents
第1、第2、第3オペランドに浮動小数点演算を適用するためのデータ処理装置および方法 Download PDFInfo
- Publication number
- JP4418578B2 JP4418578B2 JP2000227492A JP2000227492A JP4418578B2 JP 4418578 B2 JP4418578 B2 JP 4418578B2 JP 2000227492 A JP2000227492 A JP 2000227492A JP 2000227492 A JP2000227492 A JP 2000227492A JP 4418578 B2 JP4418578 B2 JP 4418578B2
- Authority
- JP
- Japan
- Prior art keywords
- sign
- logic
- value
- adder
- result
- 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 - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/544—Methods 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/5443—Sum of products
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49942—Significance control
- G06F7/49947—Rounding
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Description
【発明の属する技術分野】
(発明の背景)
本発明は第1、第2、第3オペランドに浮動小数点演算を適用するためのデータ処理装置および方法に関するものである。
【0002】
【従来の技術】
データ処理装置は一般に、データに対して様々な浮動小数点計算を実行することを求められる。浮動小数点計算の実行に汎用プロセッサがあまり適さないため、専用の浮動小数点ユニット(FPU)の開発が進められてきた。
【0003】
通常必要とされる1つの浮動小数点計算は、2つの数の積に第3の数を加算する乗算・累加(multiply−accumulate)演算すなわちA+(B*C)である。乗算命令に続いて個別累加命令を実行することによって乗算・累加演算を実行することができるが、この方法は比較的遅い。そのため、高速で乗算・累加演算を実行する専用FPUの開発に関心が高まっている。
【0004】
乗算・累加演算の高速化や回路の単純化を意図したFPUの例として、米国特許4,969,118、米国特許5,241,493、米国特許5,375,078、米国特許5,530,663、EP−A−0,645,699、米国特許4,866,652、米国特許4,841,467がある。また、個別ロジックユニットとして乗算器と加算器を保有することも可能である。
【0005】
頻繁に使用されるもう1つの同様の浮動小数点計算に乗算・減算(multiply−subtract)演算すなわち−A+(B*C)があり、これも通常は同じ乗算・累加ロジックを使用して実行することができるが、加算器に入力する前に値Aの符号を反転する。
【0006】
上記乗算・累加および乗算・減算演算の実行に加えて、乗算・累加および乗算・減算演算の符号反転バージョンも、コンパイラで使用される一般計算、複合乗算ルーチン、高速フーリエ変換(FFT)/フィルタ・ルーチンに有用である。
【0007】
乗算・減算演算の符号反転バージョンを実行するための命令については、インテル社の「IA−64 Application Developer’s Architecture Guide,Rev 1.0」の7〜59ページに記述されている。ここで、「浮動小数点型の負の乗算・加算」(floating−point negative multiply−add)命令は、2つの浮動小数点レジスタ値の積を無限精度で計算し、符号変換し、次に、積と第3の浮動小数点レジスタ値を無限精度で加算すると定義される。丸めは最終結果で実行される。したがって、このインテル命令はA−(B*C)で表現される。
【0008】
浮動小数点計算を様々なデータ処理装置で処理するための方法における一貫したアプローチを確立するために、1985年に1つの規格「IEEE Standard for Binary Floating−Point Arithmetic”, ANSI/IEEE Std 754−1985, The Institute of Electrical and Electronic Engineers, Inc., New York, 10017」(以後、本明細書ではIEEE754−1985規格と呼ぶ)が作られた。この規格の1つの定義によれば、乗算は丸め動作で完了し、同様に加算または累加演算も丸め動作で完了する。IEEE754−1985規格ではさらに、IEEE754−1985規格に適合すると考えられる多くの丸め動作を定義している。
【0009】
上記のインテル手法によると、「ヒューズド」乗算・累加(“fused” multiply−accumulate)回路が使用される結果として、上記命令が効率的に処理されるが、累加演算前に乗算結果を独立して決定することができない。また、乗算の全ビット(n×nビット乗算では2nビット)を含む内部精度で乗算が実行され、次に、すべての乗算ビットを用いて累加演算が実行される。したがって、乗算結果に対する丸め動作は、次の累加演算で乗算結果を使用する前には実行されない。したがって、丸め動作は乗算結果に対して実行されると規定しているIEEE754−1985規格に準拠しないことは明らかである。
【0010】
乗算・累加および乗算・減算演算の符号反転バージョンを実行する別の方法では、通常通りに乗算・累加および乗算・減算演算の実行後に、FPUから出力された最終結果の符号が反転される。このようにして、符号反転すなわち−(A+(B*C))および−(−A+(B*C))を実行することができ、これら演算によって所望の代数演算結果が得られる。
【0011】
IBMパワーアーキテクチャでは実際に、乗算・加算を上記タイプの符号反転関数で定義している。「the PowerPC 601 RISC Microprocessor User’s Manual, (IBM) 52G7484 (MPR601UMU−02) or (MOT) MPC601UM/AD, REV 1」のページ10−76〜10−79で、IBMパワーアーキテクチャは以下4つの命令を規定している。
fnmaddx: frD=-([(frA)*(frC)]+(frB))
fnmaddsx: (上記に同じ、ただし単精度データ)
fnmsubx: frD=-([(frA)*(frC)]-(frB))
fnmsubsx: (上記に同じ、ただし単精度データ)
【0012】
インテルのアプローチと同様に、IBMも、ヒューズド乗算・累加ユニットを使用するので、IEEE754−1985規格に準拠する結果は保証されない。
【0013】
IBMの命令と同様の乗算・加算符号反転関数を実行する2つの命令がMIPS IVアーキテクチャでも定義されており、それらは以下の通りである
NMADD.fmt: fd=-((fs*ft)+fr)
NMSUB.fmt: fd=-((fs*ft)-fr)
【0014】
Charles Priceによる「the ”MIPS IV Instruction Set”, Revision 3.2, September1985」のページB−79〜B−78には、「fsの値とFPR ftの値の乗算で中間積を得る。その積とFPR frの値の加算またはその積からFPR frの値の減算が実行される。その結果から得られる和は無限精度で計算され、FCSRにおける現在の丸めモードにしたがって丸められ、符号ビット変更によって符号反転され、FPR fdに書き込まれる。」と記載されている。
【0015】
MIPSアーキテクチャは乗算器と加算器を別々のロジックユニットとして保有するので、乗算・累加演算を実行するとき、乗算器ユニットの出力に丸めを適用し、次に、この出力を加算器ロジックユニットに入力することによって、加算器ロジックユニットの出力が丸められる。したがって、この場合は式−(−A+(B*C))および−(A+(B*C))に対して、IEEE754−1985に準拠する結果が得られる。
【0016】
また、式−(−A+(B*C))は数学的に式A−(B*C)と等価であり、同様に式−(A+(B*C))は数学的に式−A−(B*C)と等価であるので、MIPSで使用されるタイプの命令を使用して式A−(B*C)または−A−(B*C)に対する数学的に正しい結果を得ることができる。
【0017】
(発明の概要)
第1の態様において本発明は第1、第2、第3のオペランドに浮動小数点型乗算・累加演算を実行するデータ処理装置を提供する。この装置は、第2、第3オペランドを乗算し、丸め処理して、丸め済み乗算結果を生成する乗算器と、丸め済み乗算結果と第1オペランドを加算して最終結果を生成し、丸め処理して、丸め済み最終結果を生成する加算器と、第1の単一命令に応答して、加算器からの丸め済み最終結果が第1オペランドから丸め済み乗算結果を減算した値に等しくなるように乗算器および加算器を制御する制御ロジックとを有する。
【0018】
計算−(−A+(B*C))を実行するための上記従来技術による命令では式A−(B*C)に対しては正しい数学的結果が得られるが、ある特定の状況、特に結果がゼロ値になる場合にはその式に対して正しい符号付結果が得られないことが知られている。これについては詳しく後述する。
【0019】
IEEE754−1985規格では、それに準拠すると考えられる多くの丸めモードが定義されており、これら丸めモードにおいて逆符号数値の加算や同符号数値の減算の結果がゼロになるときの結果の表し方が定義されている。
【0020】
結果がこのようにゼロになるのは加算または減算される数が等しいときまたはゼロのときである。それとは無関係に、IEEE754−1985では、丸めモードRN(round to nearest)、RZ(round to zeroまたはchop)、RP (round to plus infinity)において、逆符号数値の加算や同符号数値の減算の結果がゼロになるときには正のゼロとし、それに対してRM(round to minus infinity)においては、負のゼロとすることを規定している。
【0021】
上記を前提として、AとB*Cの大きさと符号が等しいときに、下記表のような符号付ゼロ結果が生じる。
【0022】
したがって、数学的には前述のMIPS IV命令は、式A−(B*C)の正しい演算結果の数値計算には十分だったが、+0と−0が同じ数を表すので、それらの命令を使用して得られる結果から上記例の式に対する正しい符号付結果が得られないことは明らかである。
【0023】
実際のシステム、例えばJava言語を使用するシステムの中には、この差を重要視するものがあることが分かっている。IEEE754−1985規格では、+0と−0に対して異なったビットパターン表現が規定され、続いてそれらに施される算術演算の結果に関していくらか挙動が異なるので、厳密にビット単位の正確さ(bit−exact)を要求するある種のシステム、たとえばJava言語を使用するシステムは影響を受ける。従って、その種のシステムにおいては、式A−(B*C)の結果を得るために−(−A+(B*C))の数値計算命令を使用することはできない。
【0024】
もう一つ、この差が重要になるのは、古いコードを再使用するときである。個別の乗算命令実行後に丸め処理してA−(B*C)などの式の数値を求める古いコードを移植し、そして個別の減算命令実行後に丸め処理する場合に重要なことは、A−(B*C)の数値計算に新たにどのような単一命令を使用しても同じ結果が得られることである。
【0025】
本発明によると、第1オペランドから丸め済み乗算結果を減算した値に等しい丸め済み結果を生成するための第1の単一命令を高速で実行するように構成した乗算・累加ロジックによって上記問題は処理され、式A−(B*C)を数値計算するときにIEEE754−1985に準拠する結果が得られる。
【0026】
また、ある種の専門分野以外において、実際には−(−A+(B*C))よりもA−(B*C)の表現が一般的であるので、式A−(B*C)の数値計算にIEEE754−1985準拠のゼロ結果を与える本発明の第1の単一命令は、いくつかの応用分野で前述の従来技術命令よりも有用であることが判明している。
【0027】
好ましい実施例では、この第1命令をFNMAC命令と呼び、符号反転乗算・累加(negate multiply−accumulate)命令と考えてよい。
【0028】
制御ロジックは、特定の命令の適切な実行を確実にするために乗算器および加算器の一般的な制御を行い、通常は乗算器、加算器への入力や、乗算器、加算器で実行される動作タイミングを制御する。好ましい実施例では、第1の単一命令および第1、第2、第3オペランドの符号値に応答して、同符号加算(LSA)演算か、異符号加算(USA)演算のいずれの演算を加算器に実行させるかを決定し、その決定に依存する制御信号を生成する基本決定ロジックが制御ロジックに含まれる。
【0029】
基本決定ロジックは具体的に、第1の単一命令に応答して、第2、第3オペランドの符号値から丸め済み乗算結果の符号値を決定し、そして、第1オペランドの符号と丸め済み乗算結果の符号が同一ならば加算器でUSA演算を実行、また、第1オペランドの符号と丸め済み乗算結果の符号が異なっていれば、加算器でLSA演算を実行することを決定するように構成される。
【0030】
丸め済み乗算結果と加算するために第1オペランドか符号反転第1オペランドのいずれかを選択するマルチプレクサを加算器に設け、USA演算には符号反転第1オペランドを選択、そしてLSA演算には第1オペランドを選択するための制御信号をマルチプレクサに供給することが好ましい。
【0031】
好ましい実施例において、本装置には更に、基本決定ロジックを内蔵し、最終結果の初期符号値を生成するように構成された符号計算ロジックが含まれる。符号計算ロジックは第1の単一命令に応答して第1オペランドの符号を初期符号値として選択するように構成されることが好ましい。
【0032】
好ましい実施例によれば、加算器で生成される合計値が負の場合、最終結果の生成前にその符号は反転される。本装置には更に、USA演算実行による合計値が正のときに初期符号値を反転し、合計値が負のときには初期符号をそのまま使うように構成した符号調整ロジックが含まれる。
【0033】
符号調整ロジックは、最終結果がゼロの場合、所定の丸めモードによって示される符号値で初期符号値を置換するように構成される。これにより、IEEE754−1985規格への準拠、特に特定の丸めモードにおける加算または減算に関してこの規格が定義するゼロ結果表示法への準拠が確実になる。
【0034】
丸め済み最終結果を生成するために、所定の丸めモードで指定される通りに最終結果の丸め動作を実行する丸めロジックを本装置に設けることが好ましい。
【0035】
好ましい実施例において、制御ロジックは第2の単一命令に応答して、加算器からの丸め済み最終結果が、符号反転第1オペランドから丸め済み乗算結果を減算した値に等しくなるように、乗算器および加算器を制御する。
【0036】
計算−(−A+(B*C))を実行するための上記従来技術による命令では式A−(B*C)に対しては正しい数学的結果が得られるが、ある特定の状況、特に結果がゼロ値になる場合にはその式に対して正しい符号付結果が得られないことが知られている。しかし、本発明の好ましい実施例によれば、第1オペランドから丸め済み乗算結果を減算した値に等しい丸め済み結果を生成するための第1の単一命令を高速で実行するように乗算・累加ロジックが構成され、式A−(B*C)を数値計算するときにIEEE754−1985に準拠する結果が得られる。
【0037】
好ましい実施例では、この第2命令はFNMSC命令と呼ばれ、符号反転乗算・減算命令と考えてよい。
【0038】
第2の態様において本発明は第1、第2、第3のオペランドに浮動小数点型乗算・減算演算を実行するデータ処理装置を提供する。この装置は、第2と第3のオペランドを乗算し、丸め処理して、丸め済み乗算結果を生成する乗算器と、丸め済み乗算結果と符号反転第1オペランドを加算して最終結果を生成し、丸め処理して、丸め済み最終結果を生成する加算器と、第1の単一命令に応答して、加算器からの丸め済み最終結果が符号反転第1オペランドから丸め済み乗算結果を減算した値に等しくなるように乗算器および加算器を制御する制御ロジックとを有する。
【0039】
本発明の第2の態様によれば、符号反転第1オペランドから丸め済み乗算結果を減算した値に等しい丸め済み結果を生成するための第1の単一命令を高速で実行するように乗算・累加ロジックを構成することによって、式−A−(B*C)を数値計算するときにIEEE754−1985に準拠する結果が得られる。
【0040】
この第2の態様では、好ましい実施例における第2命令はFNMSC命令と呼ばれ、符号反転乗算・減算(negate−multiply subtract)命令と考えてよい。
【0041】
好ましい実施例の基本決定ロジックは、第1の単一命令に応答して、第1オペランドの符号と丸め済み乗算結果の符号が同一ならば加算器によってLSA演算を実行、また、第1オペランドの符号と丸め済み乗算結果の符号が異なっていれば、加算器によってUSA演算を実行することを決定するように構成される。
【0042】
この態様ではまた、好ましい実施例の符号計算ロジックは、第1の単一命令に応答して第1オペランドの反転符号に等しい初期符号値を選択するように構成される。
【0043】
第3の態様では、本発明は、データ処理装置において第1、第2、第3のオペランドに浮動小数点乗算・累加演算を実行する方法を提供する。この方法は、第2と第3のオペランドを乗算し、丸め処理して、丸め済み乗算結果を生成するように乗算器を構成するステップと、丸め済み乗算結果と第1オペランドを加算して最終結果を生成し、丸め処理して、丸め済み最終結果を生成するように加算器を構成するステップと、第1の単一命令に応答して、加算器からの丸め済み最終結果が第1オペランドから丸め済み乗算結果を減算した値に等しくなるように乗算器および加算器を制御するステップとを含む。
【0044】
第4の態様では、本発明は、データ処理装置において第1、第2、第3のオペランドに浮動小数点乗算・減算演算を実行する方法を提供する。この方法は、第2と第3のオペランドを乗算し、丸め処理して、丸め済み乗算結果を生成するように乗算器を構成するステップと、丸め済み乗算結果と符号反転第1オペランドを加算して最終結果を生成し、丸め処理して、丸め済み最終結果を生成するように加算器を構成するステップと、第1の単一命令に応答して、加算器からの丸め済み最終結果が符号反転第1オペランドから丸め済み乗算結果を減算した値に等しくなるように乗算器および加算器を制御するステップとを含む。
【0045】
【実施例】
付図に示される好ましい実施例に従って、以下に本発明の詳細を説明する。
【0046】
【好ましい実施例の説明】
図1はメインプロセッサ24、浮動小数点ユニット(FPU)コプロセッサ26、キャッシュメモリ28、主記憶装置30、入出力システム32を含むデータ処理システム22を示す。メインプロセッサ24、キャッシュメモリ28、主記憶装置30、入出力システム32はメインバス34を通して接続される。コプロセッサバス36はメインプロセッサ24を浮動小数点ユニットコプロセッサ26に接続する。
【0047】
動作中、メインプロセッサ24(ARMコアとも呼ばれる)はキャッシュメモリ28、主記憶装置30、入出力システム32とのインタラクションを含む一般タイプのデータ処理動作を制御するデータ処理命令ストリームを実行する。データ処理命令ストリーム中にはコプロセッサ命令が埋め込まれている。メインプロセッサ24は、これらコプロセッサ命令が付属コプロセッサで実行されるタイプであることを認識する。従って、メインプロセッサ24はこれらのコプロセッサ命令をコプロセッサバス36上に送出し、そこからいずれかの付属コプロセッサがそのコプロセッサ命令を受け取る。その場合、FPUコプロセッサ26は、それを自己宛てのものと識別すれば、そのコプロセッサ命令を受け入れて実行する。この識別はコプロセッサ命令に含まれるコプロセッサ番号フィールドによって行われる。
【0048】
図2は図1のFPUコプロセッサ26を詳細に示すブロック図である。図2に示されるように、FPU26は、浮動小数点演算を実行するデータ経路ブロック60と、コプロセッサバス36を通してメインプロセッサ24とインタフェースするコプロセッサインタフェース80と、浮動小数点演算の入力値と浮動小数点演算の結果などを格納するレジスタファイル70とを有する。
【0049】
浮動小数点命令がメインプロセッサからFPU26に渡されると、コプロセッサインタフェース80はそれを受け取って、FPU26がその浮動小数点命令を処理し得るか否かを決定する。そして、新しい命令の受信時に何らかの理由でデータ経路要素ブロック60がその命令の実行を開始することができない場合、コプロセッサインタフェース80はそれをメインプロセッサに通知する。しかし、命令が実行可能な場合は、コプロセッサインタフェース80は、浮動小数点演算を開始するために制御信号を生成してデータ経路要素ブロック60に渡す。
【0050】
浮動小数点演算の実行前に、演算用の入力値がデータバスを介してレジスタファイル70に渡される。そして、入力値が適切なソースレジスタに格納されるように、コプロセッサインタフェース80からレジスタファイル70に制御信号が送られる。
【0051】
浮動小数点演算が開始されると、レジスタファイル70からデータ経路要素ブロック60にソースレジスタの内容が出力される。そして、浮動小数点演算が完了すると、演算結果はデータ経路要素ブロックからレジスタファイル70に渡され、適切な宛先レジスタに格納される。
【0052】
FPU26などのFPUは、適切な浮動小数点命令に応答して浮動小数点乗算・累加演算(A+(B*C))あるいは浮動小数点乗算・減算演算(−A+(B*C))を実行するように構成することができる。FPU26は、図3Aに示されるヒューズド乗算・累加FPUか、図3Bに示される「チェーンド」乗算・累加(“chained” multiply−accumulate)FPUのいずれでもよい。
【0053】
図3Aには、A+(B*C)タイプまたは−A+(B*C)タイプの関数を実行するように構成されたヒューズド乗算・累加FPU用の指数、仮数経路が示される。A、B、Cの指数は指数ユニット100に供給され、そこでAの指数と積(B*C)の指数の差に基づくアライメント信号と共に、結果の初期指数値が決定される。さらに、BおよびCの仮数は部分乗算器120に渡され、そこでキャリー/セーブ(carry/save)形式の積が生成される。また、Aの仮数はアライメントシフタ/補数器110を通過し、−A+(B*C)を計算する場合は、その仮数は反転され、アライメント信号に基づいてシフトされる。
【0054】
キャリーセーブ加算器/最終加算器(carry−save adder and final adder)ブロック130は、独自に乗算B*Cの結果を決定しないで結果を生成するためにアライメントシフタ/補数器回路110および部分乗算器120の出力を処理する。結果は正規化回路(normalizer)140で正規化され、指数調整ブロック160において指数値に必要な調整が施される。最後に丸めブロック150によって丸めが実行され、丸めの結果として必要な新たな調整が指数調整ブロック160によって実行される。
【0055】
これとは対照的に、チェーンド乗算・累加FPUは図3Bに示すような動作をする。同様に、要素100、110、120は図3Aに関する記述と同様に動作する。しかし、部分乗算器120からの出力はキャリーセーブ加算器/最終積加算器(carry save adders and final product adder)170に渡され、そこで積算結果が求められた後、丸め回路180によって丸められる。この丸め処理の結果として指数調整が必要な場合は、指数調整ブロック160に通知される。
【0056】
次に、最終合計加算器190はアライメントシフタ/補数器ブロック110および丸め回路180の出力に基づいて加算を実行する。その結果は図3Aに関する説明と同様に正規化回路140および丸め回路150によって処理される。
【0057】
前述のように、乗算・累加および乗算・減算の符号反転バージョンを生成するための従来技術アプローチでは、乗算・累加演算(A+(B*C))または乗算・減算演算(−A+(B*C))が実行され、その結果は符号反転ロジックへ出力され、そこで、乗算・累加または乗算・減算演算の符号反転バージョンが必要であると仮定して結果の符号反転が実行される。したがって、その場合、ヒューズドFPUか、チェーンドFPUかにかかわらず、最終結果は式−(A+(B*C))または−(−A+(B*C))に等しくなる。前述のように、このような乗算・累加および乗算・減算演算の符号反転バージョンは代数的に正しい結果を与えるが、B*CがAに等しいときに式−A−(B*C)およびA−(B*C)の数値計算には、IEEE754−1985規格で要求される正しい符号付ゼロ値が得られない。
【0058】
前述した従来技術のもう一方のタイプは、図3Aに関して説明したヒューズド乗算・累加演算FPUを使用して、式A−(B*C)の数値計算命令を実行し、そして最終結果だけが丸め処理される。前述のように、IEEE754−1985規格では乗算結果に対して丸め処理を施すように規定しているので、この方法は規格に準拠しない。
【0059】
本発明の好ましい実施例では、この問題は以下のようにして解決される。図2に示されるFPU26のデータ要素経路60は、FMAC命令に応答してチェーンド浮動小数点乗算・累加演算(A+(B*C))を実行するか、またはFMSC命令に応答してチェーンド浮動小数点乗算・減算演算(−A+(B*C))を実行するように構成される。本発明の好ましい実施例によれば、新たな2つの命令が以下の通り定義される。
FNMAC: A−(B*C)
FNMSC: −A−(B*C)
【0060】
FNMAC命令を符号反転乗算・累加命令、FNMSC命令を符号反転乗算・減算命令と考えることができる。これらの命令が乗算・累加および乗算・減算演算の符号反転バージョンに対して代数的に正しい結果を与えると共に、IEEE754−1985規格で要求される正確な符号付ゼロ値を与えることも分かっている。
【0061】
図4はFNMACおよびFNMSC命令に基づいて乗算・累加および乗算・減算演算の符号反転バージョンを生成する際に本発明の好ましい実施例で使用される各要素のブロック図である。レジスタ300、310、320は浮動小数点演算で使用されるA、B、Cの入力オペランドを供給する。オペランドの符号値は符号計算ロジック700に、指数値は指数ロジック230に、仮数値は仮数ロジック220にそれぞれ渡される。図5A、図5Bとの関連で後述するが、符号計算Sブロック700は結果の符号の初期決定を経路250上に出力し、そして仮数ロジック220で実行される加算を制御するために使用される信号を経路245上に出力する。
【0062】
仮数ロジックの中に含まれる乗算・加算段からある種の信号が経路260、265を介して符号調整ロジック720に送られ、この符号調整ロジックには更に使用中の丸めモードが指示される。図5A、図5Bに関連して詳しく後述するが、符号調整ロジック720は符号調整が必要であるか否を決定する。
【0063】
指数ロジック230において、入力オペランドの指数に基づいて最終結果の指数値が求められ、そしてアライメント値が生成され、そのアライメント値は仮数に適用される演算を実行する仮数ロジックに経路270を通して渡される。更に、仮数ロジック220で生成される1つ以上の信号が経路275上に送出され、その信号は最終結果の指数値を調節するために指数ロジックで使用される。これについても図5A、図5Bに関する説明で詳しく述べる。
【0064】
図5A、図5Bは図4のロジックを更に詳しく示すブロック図である。D段(デコード段)においてレジスタ300、310、320からA、B、Cの入力オペランドがそれぞれ供給される。A、B、Cの仮数はレジスタ305、315、325に渡される。各オペランドの符号ビットは結果の符号を初期決定するために符号計算ブロック700に入力される。この決定はA入力オペランドがBオペランドとCオペランドの積よりも大きいという任意の仮定に基づく。この仮定が正しくないことも有り得るが、その場合は、図5A、図5Bに関して後述するように、図5A、図5Bのロジックによって自動的に補償される。
【0065】
また、当業者には明らかなように、浮動小数点加法演算には、同符号加法演算と、異符号加法演算の2種類がある。同符号加法演算(LSA)では、加算の場合は入力オペランドの符号が同一、減算の場合は入力オペランドの符号が互いに異なる。異符号加法演算(USA)では、加算の場合は入力オペランドの符号が互いに異なり、減算の場合は入力オペランドの符号が同一である。また、どのタイプの加法演算を使用するかを決定するのも、符号計算ブロック700であるが、それについては以下に説明する。
【0066】
符号計算ブロック700が実行する初期符号計算においては、入力符号ビットA符号、B符号、C符号(0は正、1は負を表す)、命令(加算か減算の選択)、積の符号反転(FNMACおよびFNMSC命令について)を行うか否か、が考慮される。積の符号(P−Sign)はBの符号とCの符号の排他的論理和である。演算がFNMACかFNMSCのいずれかならば、NegateProduct(反転積)信号が真(すなわち、1)になる。その場合、P−Signの値は反転する。
【0067】
表1は様々な入力信号の値に応じて符号計算ブロック700から出力されるInitialSign信号およびUSASelect信号の値を示す。
表1
【0068】
表1において、最初の4項目はFMAC命令、2つ目の4項目はFNMAC命令、3つ目の4項目はFMSC命令、最後の4項目はFNMSC命令にそれぞれ関連する。InitialSign値はレジスタ705に格納され、USA−Select信号はレジスタ715に収納される。
【0069】
D段でも、指数計算ブロック710は結果の初期指数値と、アライナ460を駆動するAlignShiftCount(アラインシフトカウント)信号とを生成する。初期指数値は、A入力オペランド指数と計算された積の指数(B入力オペランド指数とC入力オペランド指数の和)のいずれか大きい方である。AlignShiftCountはA入力オペランド指数値と計算された積の指数の差に基づく。初期指数はレジスタ725に格納され、AlignShiftCount値はレジスタ735に格納される。
【0070】
El段では、インバータ330はコンプリメント(補数)A入力オペランドを生成する。補数A入力は1の補数形式でE3段のエンド・アラウンド・キャリー(end−around−carry)加算器540に残される。入力信号USASelectに基づいてA入力オペランドまたは補完A入力オペランドを選択するマルチプレクサ360によって被加算数が生成される。USAの場合は常に補数A入力オペランドが選択され、LSA場合は常にA入力オペランドが選択される。マルチプレクサ360の出力はレジスタ400に書き込まれる。そして、3番目のE3段における加算に先立って仮数を積に合わせるために、被加算数はE2段階のアライナ460によってAlignShiftCount)値に基づいてシフトされ、アライナ460からの出力はレジスタ520に書き込まれる。このようにすると、設計上は大規模になるが、いくつかの経路(path)が省略され、ハードウェアのスピードとの妥協が得られる。
【0071】
他の実施例では、A入力の指数と、B入力とC入力の積の指数を利用して、A入力か、BとCの積のいずれか小さい方を求め、その小さい方のデータを選択して反転、シフトすることができる。
【0072】
El段において乗算器380はB入力オペランドの仮数とC入力オペランドの仮数を乗算してMSum(乗算和)およびMCarry(乗算桁上げ)を出力する。これらはレジスタ420、440にそれぞれ書き込まれる。レジスタのMSumおよびMCarryデータはE2段で加算器480によって加算され、Rmode信号で指定される現在の丸めモードと所要最終精度にしたがって丸められる。丸められた積の値はレジスタ530に書き込まれる。
【0073】
E3段において、エンド・アラウンド・キャリー(end−around−carry)加算器540によって最終的に被加算数と積の加算が実行される。加算器から出力されるFinalSum(最終和)の結果が正(加算器540のFinalSumのMSBが0)の場合、変更の必要はなく、結果が負(加算器540のFinalSumのMSBが1)の場合は単純に出力の反転が行われる。この反転はインバータ560によって実行され、そして、マルチプレクサ580は、エンド・アラウンド・キャリー加算器540で生成されるFinalSum MSB信号から得られるResultNegative(結果負)信号に応じて、反転値または非反転値をAddResult(加算結果)値として選択する。そのAddResult値はレジスタ610に書き込まれる。
【0074】
先頭0及び1(Leading 0 and 1)検出器600はFinalSumの結果における最上位の「1」と最上位の「0」の位置を計算する。FinalSumの結果が正の場合、E4段におけるNormShiftCount(ノルムシフトカウント)値の生成に最上位の1の位置を使用して結果が正規化され、初期指数が調整され、一方、結果が負の場合、反転前のFinalSum値で検出された最上位ゼロの位置を使用してNormShiftCount値が生成される。
【0075】
E4段において、レジスタ610の出力はE3段で計算されたNormShiftCount値と共に正規化回路630に入力される。正規化回路630は、AddResultを右に2桁あるいは左に複数桁シフトする機能を備えている。LSA演算では、NormShiftCount値は+2、+1または0であろう。USA演算では、仮数のサイズをnとして、NormShiftCount値は+1、0、または−1〜nであろう。AddResult値は、NormShiftCount値が負であれば右シフトによって正規化され、NormShiftCountが正であれば左シフトによって正規化される。指数調整は、E4段において指数調整(ExpAdjust 1)ブロック730でNormShiftCount値の加算によって実行される。
【0076】
正規化の結果がゼロであるとき、E4段においてゼロ検出ブロック640からZeroResult信号が出力される。
【0077】
また、E4段において、D段からの初期符号値は、加算器540から出力されたFinalSumのMSB(このMSBはレジスタ815に格納されている)およびゼロ検出ブロック640の結果に基づいて符号調整ロジック720によって調整される。MSBがゼロ(すなわち、FinalSumが正)であって演算がUSAだったとすれば、El段の積が不正確と言うより被加算数を反転するという任意決定が誤りであったことになり、結果符号を生成するために初期符号を反転する必要がある。MSBが1(すなわち、FinalSumが負で、USA演算の時だけに可能)ならば、積が正しいと言うよりむしろ被加算数を反転するという任意決定が正しかったので、初期符号が結果符号になる。演算がLSAだったならば、被加算数は反転されないから、符号調整ロジック720による初期符号値の調整は行われない。
【0078】
FinalSum値がゼロならば、符号調整ロジック720は初期符号をIEEE754−1985規格で規定されるゼロ結果符号値に変更する。具体的に、丸めモードがRP、RNまたはRZならば、結果符号は0(すなわち、正)に設定されるが、丸めモードがRMならば、結果符号は1(すなわち、負)に設定される。この結果符号はレジスタ825に格納される。
【0079】
結果がゼロでない場合、E5段の丸め回路680は、RMode(丸めモード)信号によって指定される現在の丸めモードで所望の最終精度に結果を丸め、そして、指数ビットおよび符号ビットからなるこの結果はレジスタファイルに戻される。丸め動作によって仮数がオーバーフローする場合は、指数調整(ExpAdjust2)ブロック740で指数をインクリメントすることにより結果指数(ResultExp)値が形成され、結果仮数は右への1桁シフトされる。
【0080】
演算の最終結果は結果符号ビット、結果指数値、結果仮数値で構成される。
【0081】
以上の記述から分かるように、本発明の好ましい実施例では2つの新しい命令が提供される。すなわち、1つは、BとCを乗算し、その積の符号を反転し、符号反転された積にAを加算することと同等の結果を与えるFNMAC、そしてもう1つは、BとCを乗算し、その積の符号を反転し、Aの符号を反転し、符号反転された積と符号反転されたAを加算することと同等の結果を与えるFNMSCである。
【0082】
これらの命令を使用することにより、IEEE754−1985規格に準拠する乗算・累加と乗算・減算演算の符号反転バージョンが得られる。これらは複雑な乗算ルーチン、FFTおよびフィルタ・ルーチン、コンパイラで使用される一般計算に有用である。例えば、JavaプラットホームではIEEE754−1985規格に準拠するゼロの扱いが要求されるので、その規格に準拠する結果を生成することは重要である。
【0083】
最後に、A−(B*C)の数値計算にヒューズドFPUを使う従来技術アプローチではIEEE754−1985準拠の結果が得られないことを説明するために、A−(B*C)の数値計算時のヒューズド演算、A−(B*C)の数値計算ためのチェーンド演算、そして個別のIEEE754乗算/符号反転/加算演算の相違点を以下に述べる。
【0084】
符号反転乗算・加算は式F=A(B*C)の関数で定義することができる。ただし、F、A、B、Cは符号ビット、指数(バイアス有りまたは無し)、暗示(implied)整数ビット、nビット有意数(significand)を含む浮動小数点数値である。浮動小数点数値は以下のように定義される。
X=−1S*(1+f*2-n)*2E
ただし、Xは不動小数点数値
Sは符号ビット(正は0、負は1)
fはnビット・有意数
Eは指数(ここではバイアス無しとする)
【0085】
この説明において、a=2n+fとして、正のXはa*2-n*2Eで定義される。正のAは
A=a*2-n*2E
で表すことができる。
【0086】
各2進値の最上位ビットが1であれば、2n+1ビットの2進値の積は2n+lまたは2n+2ビットを含む第3の2進値である。nビット有意数の浮動小数点システムでは上位n+1ビットだけが有意であると考えられるが、下位nビットまたはn+1ビットは結果に適用される丸め値を決定するときに使用される。
【0087】
この例では、積を丸めるときにAオペランドに一致するように積が選択され、丸める前よりわずかに小さい。2n+1ビットからなる積を考えると、BとCの積は、丸める前の状態で次のようになる。
(B*C)UR=((a-1)*2-n+d*2-2n)*2E
ただし、a−1は上位n+1ビットの値、dは下位nビットの値である。
【0088】
また、dは、その値によって積の丸め処理が実行されるように指定され、その結果、丸められた積は次のようになる。
(B*C)R=(a*2-n)*2E
【0089】
ヒューズド符号反転乗算・加算演算では、丸める前のAオペランドにBとCの積が加算される。すなわち、
Sum= A-(B*C)= (a*2-n)*2E-((a-1) *2-n+d*2-2n)*2E
Sum= 2E*(2-n*(a-a+1)-d*2-2n)
Sum= 2E*(2-n-d*2-2n)
【0090】
チェーンド符号反転乗算・加算演算では、積は最初にnビットに丸められ、その後でAオペランドと加算される。すなわち、
Sum= A-(B*C)= (a*2-n)*2E-(a*2-n)*2E
Sum= +0
【0091】
Aオペランドが負で、積(B*C)も負の場合、ヒューズド符号反転乗算・加算演算の結果は次のようになる。
-(2E*(2-n-d*2-2n))
ただし、チェーンド符号反転乗算・加算は+0を返す。
なお、この2つの結果は値も、符合も異なる。
【0092】
乗算・加算演算ファミリを備えていないプロセッサでは、符号反転乗算・加算関数は、最初にBとCの乗算、次にその積を丸めることによって実行される。続いて、積の符号反転、そして最後に、Aオペランドと符号反転積の加算、またはAから積の減算が実行される。この一連の演算を実行するプロセッサはチェーンド符号反転乗算・加算と同様に+0を生成する。これが重要な点は、この関数を個別の乗算、符号反転、加算、またはチェーンド符号反転乗算・加算のいずれで実行するにしても、ヒューズド符号反転乗算・加算を実行するプロセッサを使用するか、IEEE754準拠のプロセッサを使用するかによって、この関数に付随し、演算の符号または演算結果の大小に依存するコードの挙動が異なることである。
【0093】
以上に本発明の特定の実施例を記述したが、本発明は上記に限定されることなく、発明の範囲内で多くの変更、追加が可能であることは明らかである。例えば、好ましい実施例では、物理的に切り離されたコプロセッサを備えたCPUにしたがって記述されているが、必ずしもその必要はない。例えば、浮動小数点ユニットはメインプロセッサに内蔵されていてもよい。また、独立請求項の特徴を利用して、本発明の範囲から逸脱することなく従属請求項の特徴を様々に組み合わせることが可能である。
【図面の簡単な説明】
【図1】本発明の好ましい実施例によるデータ処理装置の各要素を示すブロック図。
【図2】本発明の好ましい実施例によるFPUコプロセッサの各要素を示すブロック図。
【図3A】典型的なヒューズド乗算・累加FPUを示すブロック図。
【図3B】典型的なチェーンド乗算・累加FPUを示すブロック図。
【図4】乗算・累加および乗算・減算演算の符号反転バージョンを得るために本発明の好ましい実施例で使用される各要素を示すブロック図。
【図5A】図4のロジックを更に詳細に示すブロック図。
【図5B】図4のロジックを更に詳細に示すブロック図。
【符号の説明】
24 メインプロセッサ
26 コプロセッサ
28 キャッシュメモリ
30 主記憶装置
32 入出力システム
34 メインバス
36 コプロセッサバス
60 データ経路ブロック
70 レジスタファイル
80 コプロセッサインタフェース
110 アライメントシフタ/補数器
140 正規化回路
150 丸めブロック
160 指数調整ブロック
180 丸め回路
190 最終合計加算器
Claims (2)
- 第1、第2、第3のオペランドに浮動小数点乗算・累加(multiply−accumulate)演算を実行するデータ処理装置であって、
第2と第3のオペランドを乗算し、丸め処理して、丸め済み乗算結果を生成する乗算器と、
丸め済み乗算結果と第1オペランドを加算して最終結果を生成し、丸め処理して丸め済み最終結果を生成する加算器と、
第1の単一命令に応答して、前記加算器からの丸め済み最終結果が第1オペランドから丸め済み乗算結果を減算した値に等しくなるように前記乗算器および加算器を制御する制御ロジックとを有し、
前記制御ロジックが、第1の単一命令および第1、第2、第3オペランドの符号値に応答して動作する基本決定ロジックを含み、同符号加算(like−signed addition:LSA)演算か、異符号加算(unlike−signed addition:USA)演算のいずれの演算を前記加算器に実行させるかを前記基本決定ロジックによって決定し、その決定に依存する制御信号を前記基本決定ロジックで生成し、
更に、基本決定ロジックを内蔵し、最終結果の初期符号値を生成するように構成された符号計算ロジックを有し、
第1の単一命令に応答して第1オペランドの符号を初期符号値として選択するように、前記符号計算ロジックを構成し、
前記加算器で生成される合計値が負の場合、最終結果の生成前にその符号を反転し、更に、USA演算実行による合計値が正のときに初期符号値を反転し、合計値が負のときには初期符号をそのまま使うように構成した符号調整ロジックを有し、
最終結果がゼロの場合、所定の丸めモードによって示される符号値で初期符号値を置換するように前記符号調整ロジックを構成した、
前記データ処理装置。 - 第1、第2、第3のオペランドに浮動小数点乗算・減算(multiply−subtract)演算を実行するデータ処理装置であって、
第2と第3のオペランドを乗算し、丸め処理して、丸め済み乗算結果を生成する乗算器と、
丸め済み乗算結果と符号反転第1オペランドを加算して最終結果を生成し、丸め処理して、丸め済み最終結果を生成する加算器と、
第1の単一命令に応答して、前記加算器からの丸め済み最終結果が符号反転第1オペランドから丸め済み乗算結果を減算した値に等しくなるように前記乗算器および加算器を制御する制御ロジックとを有し、
前記制御ロジックが、第1の単一命令および第1、第2、第3オペランドの符号値に応答して動作する基本決定ロジックを含み、同符号加算(like−signed addition:LSA)演算か、異符号加算(unlike−signed addition:USA)演算のいずれの演算を前記加算器に実行させるかを前記基本決定ロジックによって決定し、その決定に依存する制御信号を前記基本決定ロジックで生成し、
更に、基本決定ロジックを内蔵し、最終結果の初期符号値を生成するように構成された符号計算ロジックを有し、
第1の単一命令に応答して第1オペランドの反転符号に等しい初期符号値を選択するように、前記符号計算ロジックを構成し、
前記加算器で生成される合計値が負の場合、最終結果の生成前にその符号を反転し、更に、USA演算実行による合計値が正のときに初期符号値を反転し、合計値が負のときには初期符号をそのまま使うように構成した符号調整ロジックを有し、
最終結果がゼロの場合、所定の丸めモードによって示される符号値で初期符号値を置換するように前記符号調整ロジックを構成した、
前記データ処理装置。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/362,182 US6542916B1 (en) | 1999-07-28 | 1999-07-28 | Data processing apparatus and method for applying floating-point operations to first, second and third operands |
US362182 | 1999-07-28 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001092636A JP2001092636A (ja) | 2001-04-06 |
JP4418578B2 true JP4418578B2 (ja) | 2010-02-17 |
Family
ID=23425020
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000227492A Expired - Lifetime JP4418578B2 (ja) | 1999-07-28 | 2000-07-27 | 第1、第2、第3オペランドに浮動小数点演算を適用するためのデータ処理装置および方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US6542916B1 (ja) |
JP (1) | JP4418578B2 (ja) |
GB (1) | GB2355823B (ja) |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6446104B1 (en) * | 1999-09-15 | 2002-09-03 | Sun Microsystems, Inc. | Double precision floating point multiplier having a 32-bit booth-encoded array multiplier |
US6904446B2 (en) * | 2001-08-24 | 2005-06-07 | Freescale Semiconductor, Inc. | Floating point multiplier/accumulator with reduced latency and method thereof |
US7392273B2 (en) * | 2002-12-20 | 2008-06-24 | International Business Machines Corporation | High-sticky calculation in pipelined fused multiply/add circuitry |
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 |
US8194855B2 (en) * | 2003-06-30 | 2012-06-05 | Oracle America, Inc. | Method and apparatus for implementing processor instructions for accelerating public-key cryptography |
US20070074008A1 (en) * | 2005-09-28 | 2007-03-29 | Donofrio David D | Mixed mode floating-point pipeline with extended functions |
US7917568B2 (en) * | 2007-04-10 | 2011-03-29 | Via Technologies, Inc. | X87 fused multiply-add instruction |
US8046399B1 (en) * | 2008-01-25 | 2011-10-25 | Oracle America, Inc. | Fused multiply-add rounding and unfused multiply-add rounding in a single multiply-add module |
US8239440B2 (en) | 2008-03-28 | 2012-08-07 | Oracle America, Inc. | Processor which implements fused and unfused multiply-add instructions in a pipelined manner |
US8239441B2 (en) * | 2008-05-15 | 2012-08-07 | Oracle America, Inc. | Leading zero estimation modification for unfused rounding catastrophic cancellation |
US8161090B2 (en) * | 2008-12-05 | 2012-04-17 | Crossfield Technology LLC | Floating-point fused add-subtract unit |
GB2474901B (en) * | 2009-10-30 | 2015-01-07 | Advanced Risc Mach Ltd | Apparatus and method for performing multiply-accumulate operations |
US8606840B2 (en) * | 2010-03-17 | 2013-12-10 | Oracle International Corporation | Apparatus and method for floating-point fused multiply add |
US8671129B2 (en) | 2011-03-08 | 2014-03-11 | Oracle International Corporation | System and method of bypassing unrounded results in a multiply-add pipeline unit |
US8892622B2 (en) | 2011-04-07 | 2014-11-18 | Oracle International Corporation | Pipelined divide circuit for small operand sizes |
US9213523B2 (en) * | 2012-06-29 | 2015-12-15 | Intel Corporation | Double rounded combined floating-point multiply and add |
DE102013209657A1 (de) * | 2013-05-24 | 2014-11-27 | Robert Bosch Gmbh | FMA-Einheit, insbesondere zur Verwendung in einer Modellberechnungseinheit zur rein hardwarebasierten Berechnung von Funktionsmodellen |
US9436434B2 (en) | 2014-03-14 | 2016-09-06 | International Business Machines Corporation | Checksum adder |
RU2656730C2 (ru) * | 2014-03-26 | 2018-06-06 | Интел Корпорейшн | Процессоры, способы, системы и команды для сложения трех операндов-источников с плавающей запятой |
US10795677B2 (en) | 2017-09-29 | 2020-10-06 | Intel Corporation | Systems, apparatuses, and methods for multiplication, negation, and accumulation of vector packed signed values |
US11243765B2 (en) | 2017-09-29 | 2022-02-08 | Intel Corporation | Apparatus and method for scaling pre-scaled results of complex multiply-accumulate operations on packed real and imaginary data elements |
US11074073B2 (en) | 2017-09-29 | 2021-07-27 | Intel Corporation | Apparatus and method for multiply, add/subtract, and accumulate of packed data elements |
US11256504B2 (en) | 2017-09-29 | 2022-02-22 | Intel Corporation | Apparatus and method for complex by complex conjugate multiplication |
US10664277B2 (en) | 2017-09-29 | 2020-05-26 | Intel Corporation | Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words |
US10552154B2 (en) * | 2017-09-29 | 2020-02-04 | Intel Corporation | Apparatus and method for multiplication and accumulation of complex and real packed data elements |
US10534838B2 (en) | 2017-09-29 | 2020-01-14 | Intel Corporation | Bit matrix multiplication |
US10514924B2 (en) | 2017-09-29 | 2019-12-24 | Intel Corporation | Apparatus and method for performing dual signed and unsigned multiplication of packed data elements |
US10802826B2 (en) | 2017-09-29 | 2020-10-13 | Intel Corporation | Apparatus and method for performing dual signed and unsigned multiplication of packed data elements |
US10795676B2 (en) | 2017-09-29 | 2020-10-06 | Intel Corporation | Apparatus and method for multiplication and accumulation of complex and real packed data elements |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4969118A (en) | 1989-01-13 | 1990-11-06 | International Business Machines Corporation | Floating point unit for calculating A=XY+Z having simultaneous multiply and add |
US5796645A (en) | 1996-08-27 | 1998-08-18 | Tritech Microelectronics International Ltd. | Multiply accumulate computation unit |
US5880984A (en) | 1997-01-13 | 1999-03-09 | International Business Machines Corporation | Method and apparatus for performing high-precision multiply-add calculations using independent multiply and add instruments |
US6275838B1 (en) * | 1997-12-03 | 2001-08-14 | Intrinsity, Inc. | Method and apparatus for an enhanced floating point unit with graphics and integer capabilities |
DE69927075T2 (de) * | 1998-02-04 | 2006-06-14 | Texas Instruments Inc | Rekonfigurierbarer Koprozessor mit mehreren Multiplizier-Akkumulier-Einheiten |
US6115729A (en) * | 1998-08-20 | 2000-09-05 | Arm Limited | Floating point multiply-accumulate unit |
-
1999
- 1999-07-28 US US09/362,182 patent/US6542916B1/en not_active Expired - Lifetime
-
2000
- 2000-07-11 GB GB0017036A patent/GB2355823B/en not_active Expired - Lifetime
- 2000-07-27 JP JP2000227492A patent/JP4418578B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
GB2355823B (en) | 2004-02-25 |
US6542916B1 (en) | 2003-04-01 |
GB2355823A (en) | 2001-05-02 |
JP2001092636A (ja) | 2001-04-06 |
GB0017036D0 (en) | 2000-08-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4418578B2 (ja) | 第1、第2、第3オペランドに浮動小数点演算を適用するためのデータ処理装置および方法 | |
JP6744916B2 (ja) | 冗長表現を用いた、第1および第2のオペランドの積算 | |
US6360189B1 (en) | Data processing apparatus and method for performing multiply-accumulate operations | |
JP4953644B2 (ja) | 正規化および丸め処理前にフィードバックを行う浮動小数点ユニットのためのシステムおよび方法 | |
US8990282B2 (en) | Apparatus and method for performing fused multiply add floating point operation | |
JP6001276B2 (ja) | 浮動小数点加算を実行するための装置および方法 | |
EP0351242B1 (en) | Floating point arithmetic units | |
US6049865A (en) | Method and apparatus for implementing floating point projection instructions | |
US7720900B2 (en) | Fused multiply add split for multiple precision arithmetic | |
US8046399B1 (en) | Fused multiply-add rounding and unfused multiply-add rounding in a single multiply-add module | |
US8838664B2 (en) | Methods and apparatus for compressing partial products during a fused multiply-and-accumulate (FMAC) operation on operands having a packed-single-precision format | |
CN106250098B (zh) | 用于在执行浮点运算时控制舍入的装置及方法 | |
US10310818B2 (en) | Floating point chained multiply accumulate | |
US11068238B2 (en) | Multiplier circuit | |
US5677861A (en) | Arithmetic apparatus for floating-point numbers | |
US20100125621A1 (en) | Arithmetic processing device and methods thereof | |
Zhang et al. | Efficient fixed/floating-point merged mixed-precision multiply-accumulate unit for deep learning processors | |
JPH09507941A (ja) | multiply−add浮動小数点シーケンスにおけるウエイト・サイクルなしのブロック正規化 | |
JP4601544B2 (ja) | 入力値に逆数演算を実施して結果値を作り出すデータ処理装置および方法 | |
JP4476210B2 (ja) | 逆数演算の結果値の初期推定値を求めるデータ処理装置および方法 | |
US20050228844A1 (en) | Fast operand formatting for a high performance multiply-add floating point-unit | |
JP3803438B2 (ja) | 浮動小数点乗算累算装置 | |
JP4355705B2 (ja) | 乗算装置、及び演算装置 | |
JP2010218197A (ja) | 浮動小数点積和演算装置、浮動小数点積和演算方法、及び浮動小数点積和演算用プログラム | |
KR100317767B1 (ko) | 부동 소수점 2진 4 워드 포맷 승산 명령 유닛 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20061206 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20080929 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20081014 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090113 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090612 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20091008 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20091020 |
|
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: 20091113 |
|
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: 20091130 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 4418578 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121204 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121204 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131204 Year of fee payment: 4 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |