JP6001276B2 - 浮動小数点加算を実行するための装置および方法 - Google Patents

浮動小数点加算を実行するための装置および方法 Download PDF

Info

Publication number
JP6001276B2
JP6001276B2 JP2012031642A JP2012031642A JP6001276B2 JP 6001276 B2 JP6001276 B2 JP 6001276B2 JP 2012031642 A JP2012031642 A JP 2012031642A JP 2012031642 A JP2012031642 A JP 2012031642A JP 6001276 B2 JP6001276 B2 JP 6001276B2
Authority
JP
Japan
Prior art keywords
operand
result
circuit
mantissa
addition
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
JP2012031642A
Other languages
English (en)
Other versions
JP2012174269A (ja
Inventor
レイモンド ルッツ デイヴィッド
レイモンド ルッツ デイヴィッド
Original Assignee
エイアールエム リミテッド
エイアールエム リミテッド
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 エイアールエム リミテッド, エイアールエム リミテッド filed Critical エイアールエム リミテッド
Publication of JP2012174269A publication Critical patent/JP2012174269A/ja
Application granted granted Critical
Publication of JP6001276B2 publication Critical patent/JP6001276B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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
    • 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/485Adding; Subtracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/01Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising
    • G06F5/012Methods or arrangements for data conversion without changing the order or content of the data handled for shifting, e.g. justifying, scaling, normalising in floating-point computations
    • 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/74Selecting or encoding within a word the position of one or more bits having a specified value, e.g. most or least significant one or zero detection, priority encoders
    • 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/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • 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

Landscapes

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

Description

本発明は、結果Rを得るためにオペランドAおよびオペランドBに加算演算を実行するための装置および方法に関する。ただし、オペランドA、オペランドB、および結果Rは、それぞれ仮数部および指数を有する浮動小数点値である。
浮動小数点数は、以下のように表現することができる。
±1.x*2
ただし式中で、
xは小数部、
1.xは仮数部(仮数としても知られる)、
yは指数である。
浮動小数点加算は、2つの形態、すなわち同符号加算(LSA:like−signed addition)または異符号加算(USA:unlike−signed addition)を取ることができる。LSA演算は、同符号の二つの浮動小数点オペランドが加算される場合、または異符号の2つの浮動小数点オペランドが減算される場合に実行される。同様に、USA演算は、異符号の2つの浮動小数点オペランドが加算される場合、または同符号の2つの浮動小数点オペランドが減算される場合である。本願において浮動小数点オペランドの加算および係るオペランドの仮数部の加算について言及するとき、それはまとめてLSA演算またはUSA演算について言及するものであると解釈されるべきであり、したがって、係る用語は加算処理および減算処理の両方を含むと理解されるであろう。
一般に、プロセッサは、異なるデータ処理演算を実行するために、いくつかのパイプラインユニットを有するであろう。係るパイプラインユニットの1つが、加算演算を実行するためにいくつかのパイプラインステージを備える加算器ユニットである。浮動小数点加算は、いくつかのステージ、すなわち(1)指数解析および差計算、(2)オペランド整置(operand alignment)、(3)加算(丸め挿入を含む場合がある)、および(4)正規化からなる。長年にわたって、加算器パイプラインにおける現状技術は、1つは近接パス(near path)と称され他方は遠隔パス(far path)と称される2つの別個のパスを加算処理の少なくとも部分に対して提供してきた。特に、このように近接/遠隔パスを分割することにより、非自明(nontrivial)な整置(alignment)および非自明な正規化が相互排他的であるという所見に基づいて、加算処理におけるクロックサイクルを節約することができる。
したがって、近接パスは、指数が等しいかまたは1だけ異なるオペランドに関与し、仮数部の先行ビットの相殺(cancellation)が生じる可能性を有する、USA演算に対して用いられる。係る差は、丸めを必要としないが、加算の後に正規化を必要とする。次に、遠隔パスは、すべての他のUSA演算およびすべてのLSA演算に対して用いられ、整置および丸めを実施するための回路を必要とするが、自明な(1ビット)正規化のみを必要とする。
このように分割された加算器パイプラインは、最初、P Farmwaldによる博士論文「On the Design of High Performance Digital Arithmetic Units」、University of California Livermore、1981年において発表され、それに続くいくつかの設計、例えば、A Nainiらによる「1−GHz HAL SPARC64 Dual Floating Point Unit with RAS Features」を題名とする論文、Proceedings of the 15th IEEE Symposium on Computer Architecture, 2001、および同一の譲受人の米国特許第7,437,400号参照、において改良を重ねてきた。なお、これらの内容全体は、参照により本明細書に組み込まれる。
加算に関する演算の1つの一般的な形態が乗算累算演算(multiply−accumulate operation)であり、この乗算累算演算は、A+L*Mの形をとる。なお、式中、オペランドLおよびオペランドMの乗算結果は、加算のための第2オペランドBを形成する。IEEE754−2008規格の発表とともに、融合乗算累算(FMA:fused multiply accumulate)演算(本明細書においては、融合乗算加算演算(fused multiply add operation)とも称される)が浮動小数点ユニットにとって必要なものとなった。なお、このFMA演算においては、丸められていない乗算結果がオペランドAに加算され、次いで、丸めが加算の出力に対して実行される。専用のFMAパイプラインユニットがこれまでに開発されてきたが、係る専用ユニットの提供は高コストである。一般に、係るFMAユニットは、標準的な加算演算および標準的な乗算演算を実行するためにも用いられ、それにより、別個の加算器ユニットおよび別個の乗算器ユニットが不必要となる。しかしFMAユニットが複雑であるために、FMAユニットは、標準的な加算演算において専用の加算器ユニットよりも一般に時間がかかり、また標準的な乗算演算の実行においても、別個の乗算器ユニットよりも一般に時間がかかることとなるであろう。演算の大部分は、実際にはFMA演算ではないが、標準的な加算および乗算に関与するため、浮動小数点ユニットの性能は顕著な影響を受ける可能性がある。
FMA演算を実行するための他のメカニズムは、例えば、その内容全体が参照により本明細書に組み込まれる、同一の譲受人による同時係属中の米国特許出願第12/585,668号のように、別個の乗算ユニットを用いてオペランドLおよびオペランドMの乗算を実行し、次いで、その乗算結果を丸めない状態で別個の加算器ユニットに転送し、オペランドAに加算されるべき第2オペランドを形成することである。しかし、上述の近接/遠隔パスアーキテクチャを加算器ユニットに対して用いると、近接パスの演算において問題を生じる。特に、その問題は、オペランドの1つとして用いられる、丸められていない乗算結果が結果Rの長さの2倍となり、そのために近接パスにおいて相殺が存在しない場合でさえも丸めが必要となる可能性がある点である。上述のように、近接パスは一般に丸め回路を提供せず、加算の出力は、丸めの実行前に正規化される必要がある。その結果、丸めの実行を可能とするために、近接パスに別のパイプラインステージを加えることが必要となり、このことは、加算器ユニットの性能に顕著な影響を与えるものである。
したがって、データ処理装置のための改良された浮動点加算器ユニットを提供することが望ましいことになる。
第1の態様によれば、本発明は、結果Rを得るためにオペランドAおよびオペランドBに加算演算を実行するための装置を提供する。なお、オペランドA、オペランドB、および結果Rは、それぞれ仮数部および指数を有する浮動小数点値であり、前記の装置は、オペランドAおよびオペランドBに異符号加算を行わせる場合に生成される出力において存在するであろう先行するゼロの個数の予測に基づいてシフト表示を生成するよう構成された予測回路と、仮数部を加算する前にオペランドAおよびオペランドBの両方の仮数部にシフト演算を実行するよう構成された結果前正規化回路であって、このシフト演算は、オペランドAおよびオペランドBに対する修正された仮数部を生成するために、シフト表示による決定に応じて、オペランドAおよびオペランドBの両方の仮数部のいくつかの最上位ビットを廃棄するよう作用する、結果前正規化回路と、オペランドAおよびオペランドBの指数を参照することにより、先行ビット相殺状態の存在を検出するよう構成されたオペランド解析回路と、前記の先行ビット相殺状態が存在する場合、結果Rの仮数部を生成するために、オペランドAおよびオペランドBに対する修正された仮数部の加算を実行するよう構成された加算回路とを備える。
本発明によれば、先行ゼロ予測器回路等の予測回路がシフト表示を生成するために用いられ、シフト表示は、次いで、シフトが予測回路により生成されたシフト表示に依存する範囲で、両方の入力オペランドの仮数部にシフトオペランドを実行することにより、その結果の仮数部を前正規化するために用いられる。先行ビット相殺状態が検出された場合、加算回路は、結果の仮数部を生成するために、結果前正規化回路により出力された修正された仮数部を用いて加算を実行するように準備される。係る手法は、別個の近接パスおよび遠隔パスを提供する種類の従来の先行技術に係る加算器回路よりも、かなり簡単で且つ小型の装置を提供する。
本発明に係る装置は、入力オペランドのうちの1つが以前の乗算器ステージの丸められていない乗算結果である場合の加算を実行することが可能である。それにより、融合乗算累算演算を簡単且つ効果的な方法で実行することが可能となる。しかし、融合乗算累算演算に対するサポートが必要とされない実施形態においてさえも、本発明の装置に係る加算器回路を用意することにより、顕著な利点を達成することができる点にも注意されたい。
1つの実施形態においては、オペランド解析回路は、オペランドAおよびオペランドBの指数が同一の値または1だけ異なる値を有する場合に、および異符号加算が前記のオペランドAおよびオペランドBに加算演算を実行するために用いられる場合に、先行ビット相殺状態の存在を検出する。一般的な先行技術に係る加算回路においては、係る先行ビット相殺状態は、一般的に、用いられる先行技術に係る加算回路の近接パスにおいて生じるものである。しかし、本発明の実施形態によれば、別個の近接パスは不必要であり、その代わりに、すべての他の加算演算に用いられことになる同一の加算回路が、先行ビット相殺状態の存在下でも用いられる。しかし、加算回路の動作の前に、前正規化回路により前正規化されている結果の仮数部を伴う。
1つの実施形態においては、予測回路は、異符号加算によりオペランドAおよびオペランドBのうちの小さい方のオペランドがオペランドAおよびオペランドBのうちの大きい方のオペランドから減算される場合に対して、シフト表示を算出する。
しかし、1つの実施形態においては、オペランドAおよびオペランドBのうちいずれが大きいかの判定は、予測回路が先行ゼロ値を算出し始める時点では得られず、予測回路は、オペランドAがオペランドBより大きいことを仮定する第1シフト表示候補と、オペランドBがオペランドAより大きいことを仮定する第2シフト表示候補とを生成するよう準備される。したがって、係る手法により、予測回路は、どちらのオペランドが大きいかを認識する前に、動作を開始することが可能となり、それにより、この手法を用いずに可能であった場合よりも、より高速に、先行ゼロの個数を判定することが可能となる。
1つの係る実施形態においては、この装置は、オペランドAおよびオペランドBのどちらが大きい方のオペランドであるかを判定するより大きいオペランドの判定回路と、より大きいオペランドの判定回路に応答して、オペランドAが大きい方のオペランドである場合には第1シフト表示候補をシフト表示として選択し、オペランドBが大きい方のオペランドである場合には第2シフト表示候補をシフト表示として選択するよう構成された選択回路とをさらに備える。したがって、係る実施形態においては、予測回路の動作をより大きいオペランドの判定回路の動作と並行して実行し、次いで、より大きいオペランドの判定回路からの出力に基づいて、2つのシフト表示候補の間で選択を行うことができることが理解されるであろう。
1つの実施形態においては、この装置は、オペランドAの指数の最下位ビット(LSB:least significant bit)がオペランドBの指数の最下位ビットと同一であるかどうかを示す比較結果を出力するよう構成された比較回路をさらに備える。比較結果が、これらの指数のLSBが同一であることを示す場合、予測回路は、異符号加算によりオペランドAおよびオペランドBのうちの小さい方のオペランドがオペランドAおよびオペランドBのうちの大きい方のオペランドから引かれる場合に対するシフト表示を算出する。しかしながら、比較結果がこれらの指数のLSBが同一でないことを示す場合、予測回路は、異符号加算によりオペランドAおよびオペランドBのうちの小さい方のオペランドの1ビット右シフトされたバージョンがオペランドAおよびオペランドBのうちの大きい方から引かれる場合に対するシフト表示を算出する。前述のように、これらのオペランドの指数が等しい場合に、またはこれらのオペランドの指数が1だけ異なる値を有する場合に、先行ビット相殺状態が生じる可能性がある。上述の実施形態により、指数が同一ではないことが比較結果により示されるとき、指数は1だけ異なると想定される。先行ビット相殺状態が実際に存在しないと判定される場合、結果前正規化回路の出力は加算回路により使用されず、したがって、予想回路の出力は効率的に無視されるため、この想定は妥当である。
1つの実施形態においては、加算回路は加算の実行時に、挿入丸め(injection rounding)を実行することにより丸め増分値を加算するよう構成され、加算回路の前に結果前正規化回路が動作することにより、確実に、オペランドAおよびオペランドBの修正された仮数部が挿入丸めに対して正しく整置される。これにより、計算時に加算回路の出力の後に追加的な丸め回路が不必要であるため、顕著な性能利点が提供される。これは、融合乗算累算演算がサポートされるべき場合に加算の実行後に丸めの実行を可能とするために、別のパイプラインステージを近接パスに加えることが必要とされるであろう先行技術に係る近接パスおよび遠隔パスを使用する配設に対して比較されるべきである。
1つの実施形態においては、加算回路は、オーバーフロー状態が存在しないことを仮定して第1丸め増分値を用いる加算を実行するよう構成された第1加算回路と、オーバーフロー状態が存在することを仮定して第2丸め増分値を用いる加算を実行するよう構成された第2加算回路とを備える。先行ゼロ訂正状態が存在する場合、加算回路は、オペランドAおよびオペランドBの修正された仮数部から第2加算回路により生成された結果Rの仮数部として出力するよう構成される。当業者に理解されるように、オペランドAおよびオペランドBに異符号加算を実行することにより生成される出力において存在する先行ゼロの個数を予測するために用いられる予測回路は、実際に、先行ゼロの予測される個数において最大で1ビットだけずれる可能性がある。一般に、これは、ずれの可能性を打ち消すための何らかの訂正回路の提供が必要とすることになる。しかし上述の実施形態においては、このことは、先行ゼロの予測個数が1だけずれると判定される場合、第2加算回路からの出力が結果の仮数部を形成するために用いられるという点において、2つの加算回路の存在により自動的に対処される。
先行ゼロ訂正状態を検出するための方法はいくつか存在するが、1つの実施形態においては、前記の加算回路がオペランドAおよびオペランドBに対する修正された仮数部を加算するとき、先行ゼロ訂正状態は、第1加算回路から桁上げ出力(carry out)が生成される場合に検出される。
1つの実施形態においては、装置は、仮数部を加算する前に、オペランドAおよびオペランドBのうちの小さい方のオペランドの仮数部を、オペランドAおよびオペランドBのうちの大きい方のオペランドの仮数部と整置する整置動作を実行するよう構成された整置回路をさらに備え、加算回路は、前記の先行ビット相殺状態が存在しない場合、整置回路により整置されたオペランドAおよびオペランドBの仮数部の加算を実行するように構成される。したがって、先行ビット相殺状態が存在しない場合、結果前正規化回路の出力は無視され、それにかわって、加算回路は、大きい方のオペランドの仮数部と、小さい方のオペランドの整置された仮数部とを、整置回路から受け取る。
1つの実施形態においては、整置回路は、シフトするビットの個数がオペランドAおよびオペランドBの指数の差に依存する状態で、オペランドAおよびオペランドBのうちの小さい方のオペランドの仮数部に右シフト演算を実行することにより、前記の整置演算を実行する。
1つの実施形態においては、この装置は、一連のパイプラインステージとして構成され、結果前正規化回路は、加算回路が配置された後続のパイプラインステージの前のパイプラインステージに配置される。さらに、1つの実施形態においては、前記の予測回路は、結果前正規化回路が配置されたパイプラインステージの前の、先行するパイプラインステージに配置される。
1つの実施形態においては、この装置は、非正規化状態の検出に応答して、加算回路の入力の前に、オペランドAおよびオペランドBに対する修正された仮数部の1ビット訂正右シフトを実行するシフト訂正回路をさらに備える。次いで、これにより、非正規化状態が、正常状態のオペランドと略同様の方法で取り扱うことが可能となる。
非正規化状態を検出する方法はいくつか存在するが、1つの実施形態においては、非正規化状態は、結果Rの指数が予め定められた値となる場合に検出される。1つの例示的な実装においては、この予め定められた値は、すべてがゼロからなる指数値である。倍精度数に対して、これはe−1022の指数を指定し、係る例においては、仮数部は、0.xxxの形となる。
この装置への入力オペランドのうちの1つが、2つ浮動小数点オペランドに実行された乗算演算の結果であり、丸められていない入力としてこの装置に提供される場合、最終的な合計は、丸められていない乗算結果が不正確な指数を有する(すなわち、結果が丸められた後に指定されたよりも1だけ高くなる)可能性があるために、実際に結果4.0を達成することができる。次いで、乗算結果に近接する数がUSA演算により乗算結果から引かれる場合、乗算結果の指数が、加算回路のデフォルト出力に関連する結果の指数より2だけ高くなる可能性がある。係るシナリオは本明細書において二重オーバーフロー状態と称される。1つの実施形態においては、この装置は、二重オーバーフロー状態の検出に応答して、加算回路の出力に関わりなく、結果Rの仮数部のすべての小数部ビットを論理ゼロ値として出力する結果仮数部出力回路をさらに備える。
加算回路が、オーバーフロー状態が存在しないことを仮定して第1丸め増分値を用いて加算を実行するための第1加算回路と、オーバーフロー状態が存在することを仮定して第2丸め増分値を用いて加算を実行するための第2加算回路とを備える、1つの特定の実施形態においては、二重オーバーフロー状態は、異符号加算演算を実行するとき桁上げ出力が第2加算回路から生じる場合に検出される。次いで、二重オーバーフロー状態が存在する場合、結果の指数は、第1加算回路からの出力に関連する指数よりも2だけ大きく設定される。
予測回路は、様々な形を取り得るが、1つの実施形態においては、オペランドAおよびオペランドBに異符号加算を行うことにより生成される出力において存在するであろう先行ゼロの個数を示す先行ゼロ値を、シフト表示として算出するよう構成された先行ゼロ予測回路を備える。
第2の態様によれば、本発明は、データ処理装置内で結果Rを得るためにオペランドAおよびオペランドBに加算演算を実行するための方法を提供する。なお、オペランドA、オペランドB、および結果Rは、それぞれ仮数部および指数を有する浮動小数点値であり、前記の方法は、オペランドAおよびオペランドBに異符号加算を実行する場合に生成される出力において存在するであろう先行ゼロの個数の予測に基づいてシフト表示を生成することと、結果前正規化回路を用いて仮数部の加算の前にオペランドAおよびオペランドBの両方の仮数部にシフト演算を実行することであって、このシフト演算は、オペランドAおよびオペランドBに対する修正された仮数部を生成するために、シフト表示による決定に応じて、オペランドAおよびオペランドBの両方の仮数部の最上位ビットのうちのいくつかを廃棄するように作用する、ことと、オペランドAおよびオペランドBの指数を参照することにより、先行ビット相殺状態の存在を検出することと、加算回路を、前記の先行ビット相殺状態の存在に応答して、結果Rの仮数部を生成するために、オペランドAおよびオペランドBに対する修正された仮数部の加算を実行するよう準備することと、を含む。
第3の態様によれば、本発明は、結果Rを得るためにオペランドAおよびオペランドBに加算演算を実行するための装置を提供する。なお、オペランドA、オペランドB、および結果Rは、それぞれ仮数部および指数を有する浮動小数点値であり、前記の装置は、オペランドAおよびオペランドBに異符号加算を実行する場合に生成される出力において存在するであろう先行ゼロの個数の予測に基づいてシフト表示を生成するよう構成された予測手段と、仮数部を加算する前にオペランドAおよびオペランドBの両方の仮数部にシフト演算を実行するよう構成された結果前正規化手段であって、このシフト演算は、オペランドAおよびオペランドBに対する修正された仮数部を生成するために、シフト表示による決定に応じて、オペランドAおよびオペランドBの両方の仮数部の最上位ビットのうちのいくつかを廃棄するよう作用する、結果前正規化手段と、オペランドAおよびオペランドBの指数を参照することにより、先行ビット相殺状態の存在を検出するよう構成されたオペランド解析手段と、前記の先行ビット相殺状態の存在中に、結果Rの仮数部を生成するために、オペランドAおよびオペランドBに対する修正された仮数部の加算を実行するための加算手段とを備える。
本発明は、添付の図面に図示される本発明の実施形態を参照して、単に例示としてのみ、さらに説明されるであろう。
1つの実施形態に係る融合乗算加算処理ユニットの概略図である。 1つの実施形態に係る図1の加算回路の仮数部処理パス内に提供される構成要素を示す図である。 1つの実施形態に係る図2の構成要素に入力される様々な制御信号を生成するために用いることができる回路の概略図である。 1つの実施形態に係る図2の構成要素に入力される様々な制御信号を生成するために用いることができる回路の概略図である。 1つの実施形態に係る図2の構成要素に入力される様々な制御信号を生成するために用いることができる回路の概略図である。 図2の加算器add0からの出力に関連する結果の指数が1つの実施形態にしたがって算出される方法を示すフローチャートである。 1つの実施形態に係る図2の回路の動作を示すフローチャートである。 1つの実施形態に係る図2の回路の動作を示すフローチャートである。 1つの実施形態に係る図5AのLZA計算の実行に必要なステップを示すフローチャートである。
図1は、浮動小数点処理ユニットの一部として用いられ得る融合乗算加算処理ユニット1を概略的に示す。融合乗算加算ユニットの様々な要素について以下で説明するが、浮動小数点乗算加算ユニット1は、明確さのために図1に図示しない追加的な特徴および要素を含むことになることを理解されたい、。融合乗算加算ユニット1は、融合乗算加算ユニット1は53ビットの仮数部を有する倍精度オペランドを処理するものとして示されているが、融合乗算加算ユニット1は、24ビットの仮数部を有する単精度オペランド(またはNビットの仮数部を有する別の浮動小数点形式を用いて表される浮動小数点数)を処理することもできる可能性がある。
融合乗算加算ユニット1は、乗算回路4および加算回路8を備える。乗算回路4は、53ビットの仮数部を有する2つのオペランドLおよびMを受け取る。乗算回路は乗算命令に応答して、オペランドLおよびオペランドMを乗算し、正規化され且つ丸められた、53ビットの仮数部を有する積L*Mをライン10上に出力する。乗算回路4は融合乗算加算命令にも応答して、オペランドLおよびオペランドMを乗算し、丸められていない106ビットの仮数部を有する積L*Mを生成する。丸められていない積L*Mは、バス12を介して加算回路8に転送される。
加算回路8はバス16を介してオペランドAを受け取る。オペランドAは53ビットの仮数部を有する。加算回路は、53ビットの仮数部を有するオペランドBおよび106ビットの仮数部を有する丸められていない積L*Mのうちの一方または両方も受け取る。加算回路8は、融合乗算加算命令に応答して、バス16を介して受け取られたオペランドAを、バス12を介して受け取られた丸められていない積L*Mに加算する。加算回路は、加算命令にも応答して、オペランドAをオペランドBに加算する。次に、どの命令が実行されているかに関わらず、丸められた結果値A+L*MまたはA+Bが加算回路8により出力される。加算回路8の出力は、記憶のために登録ファイル(図示せず)に送ることができ、または、マルチプレクサ20に戻されるように転送することができ、出力値は後続の命令のためのオペランドAとして用いられるよう選択することができる。
乗算回路4および加算回路8の両方は、(乗算回路4の丸め回路は、乗算回路4が融合乗算加算命令を実行するために用いられるときには用いられないが)浮動小数点値を丸めるための回路を備える。浮動小数点値を丸めることは、短縮された仮数部を用いて表すことができる値を生成するために、仮数部のビット数を減少させ、短縮された仮数部に丸めの値を加えることにより、実行される。乗算ステージ4の間に丸めを実行する方法は、米国特許出願第2006/0117080(A1)号において説明され、その内容はその全体を参照により本明細書に組み込まれる。加算ステージ8の間に丸めを実行する方法は、米国特許出願第2006/0136543(A1)号に説明され、その内容はその全体が参照により本明細書に組み込まれる。これらの出願は、丸めを乗算演算または加算演算に組み込むことにより、浮動小数点値の丸めを高速化するための技法を説明する。したがって、本出願に説明する丸め回路は、乗算演算または加算演算を実行する乗算回路4または加算回路8の部分から必ずしも分離する必要はなく、丸めを実行するよう、または実行しないよう選択的に構成されてもよい同一回路の少なくとも一部を備えることができる可能性がある。
上述のように、融合乗算加算ユニット1は、別個の乗算ステージおよび加算ステージにおいて融合乗算加算命令を実行する。このことは、単一の融合乗算加算命令を実行するにあたってより多くの処理サイクルが必要とされることを意味するが、一連の融合乗算加算命令、加算命令、または乗算命令を実行するほうが、異なる命令の処理をインターリーブすることができるため、より高速である。単一の乗算命令または加算命令の処理も、これらの処理が、乗算回路および加算回路の両方ではなく、乗算回路または加算回路のうちの1つのみを用いて実行することができるため、先行技術に係る融合MACユニットにおける処理よりも高速である。融合乗算加算ユニット1は、処理される用途に応じて一連の命令の処理を3パーセントから23パーセント高速化することができるというシミュレーション結果が示されている。融合乗算加算ユニット1は、ax+by+cz+dwの形のドット積を計算することに特に効果的である。なぜなら、ドット積の計算は一連の融合乗算加算命令を要求するからである。
図1の形の回路は、同一の譲受人による同時継続中の米国特許出願第12/585,668号において説明されており、その全内容は参照により本明細書に組み込まれる。乗算器回路4は、融合多重加算命令の実行時に加算器8に入力されるための丸められていない乗算結果を出力することができるかぎり、様々な形を取ることができる。適切な乗算器回路の1つの例が同一の譲受人による同時継続中の米国特許出願第12/588,962号において説明されており、その全内容は参照により本明細書に組み込まれる。しかし係る乗算器を融合乗算加算演算の一部として用いる場合、丸め挿入は、乗算結果を加算器に転送する前に、実行されないことになる。
加算回路8の構成に関しては、別個の近接パスおよび遠隔パスを用い従来の構造を使用することにより、融合MAC命令実行時に性能上の問題が生じる可能性がある。特に、オペランドの1つとして用いられる丸められていない乗算結果は結果Rの長さの2倍となり、したがって近接パスにおける相殺が存在しない場合でさえも丸めが必要となり得る。しかし、近接パスは一般に丸め回路を提供せず、加算の出力は、丸めの実行前に正規化される必要がある。その結果、丸めの実行を可能とするために、近接パスに他のパイプラインステージを加えることが必要となり、このことは、加算器ユニットの性能に顕著な影響を与えることとなるであろう。
図2は、上記の問題に対処するために、新規の加算回路8の仮数部処理パス内に提供される構成要素を示す図である。
実行ステージE1に示すように、例えば登録ファイル、加算器8からのオペランド転送、乗算器4からのオペランド転送、等の、オペランドAおよびオペランドB(ここではopaおよびopbと示される)のためのいくつかのソースが存在し、これらの様々なソースは図2においてボックス100およびボックス110により概略的に示される。図2に示す実施形態においては、融合MAC演算が実行される場合、乗算器からの丸められていない乗算結果L*Mはopbソースとして図2の加算器に提供されると考えられる。図2に示す加算器ユニットの外部にある制御回路は、適切な制御信号をマルチプレクサopa_mux105およびマルチプレクサopb_mux115に送信することにより、どちらの入力を選択するかを特定する。
次のマルチプレクサ回路120および125は、次いで、オペランドの種類(単精度、倍精度、融合乗算出力)に応じて、利用可能なビットから選択する。単純化のために、指数回路は、大部分の計算が仮数部に関するものである(指数は、ほとんどの場合、仮数部に何が起こるかを制御するために用いられる)ため、図2において図示されない。マルチプレクサ120および125からの出力は、パイプラインステージE1の終端におけるフリップフロップ130および135に記憶される。
パイプラインステージE2において、フリップフロップ130および135に記憶された小数部値の両方が2つのマルチプレクサ160および165に提供され、これら両方のマルチプレクサは、opaが大きい方のオペランドであるかどうかを特定するために指数パスにおいて判定された「a_larger」信号により制御される。次いでマルチプレクサ160は大きい方のオペランドに関連する小数部値を選択し、マルチプレクサ165は小さい方のオペランドに関連する小数部値を選択し、両方の小数部値は107ビットに拡張され、パイプラインステージE2の終端における関連付けられたフリップフロップ175および185に記憶される。特に、マルチプレクサ160および165は、先行ビットを加えることにより小数部を仮数部に変換する論理を含む。このように、正規化オペランドに対しては論理1値が加えられ、非正規化オペランドに対しては論理ゼロ値が加えられる。なお、非正規化オペランドは、オペランドが予め定められた指数値(1つの実装においては、この予め定められた指数値はすべてゼロの指数値である)を有することにより、検出される。次いでopaの仮数部にゼロを埋めて、opbの仮数部と一致するよう、106ビットにする(最下位ビットとして一連の論理ゼロ値を加える)ことによっても、さらなる追加ビットが両方の仮数部に加えられる。その結果、起こりうる1ビット右シフトが存在する場合にすべての情報が捉えられることが可能となる。なお、1ビット右シフトは、後述する理由のために生じる場合がある(論理的に、1ビット右シフトは仮数部に変換された後に実行される)。
しかし、どのオペランドがより大きいかについての判定は、パイプラインステージE2の後半においてのみ得られる。その情報が得られる以前において、予測回路(この場合、先行ゼロ検出回路)は、オペランドopaおよびオペランドopbに異符号加算を実行することにより生成される出力に存在するであろう先行ゼロの個数の予測に基づいて、シフト表示を生成するために用いられる。このシフト表示は、先行ビット相殺状態が存在すると判定された場合、後に用いられるであろう。なお、係る先行ビット相殺状態は、opaおよびopbの指数が同一の値または1だけ異なる値を有する場合、および異符号加算がopaおよびopbに加算演算を実行するために用いられる場合に、生じるものである。
この点に留意して、制御信号シフト1は、2つの入力指数の下位ビットが異なる(すなわちシフト1= 指数a[0] XOR 指数b[0])場合に、設定される。指数の差が奇数であることがシフト1により示される場合、その後先行ビット相殺状態が存在すると判定されるとき指数が1だけ異なるであろうと推定される。したがって、シフト1制御信号が設定されるとき、小さい方の小数部は、LZA計算実行前に、1ビットだけ右シフトされる必要がある。
どちらのオペランドがより大きいかはまだ認識されていないため、2つのLZA回路150および155が提供され、第1のLZA回路は、小数部aから(必要に応じて1ビットシフトされた)小数部bを減算し、第2のLZA回路は、小数部bから(必要に応じて1ビットシフとされた)小数部aを減算する。これが実行される間に、オペランドAおよびオペランドBのどちらが大きいか、および2つのオペランドの間の指数の正確な差が判定される(この回路は指数の処理を行うものであり、図2には図示されないが、図3Cを参照して後に説明されるように、2つの減算を行う)。
次に、ステージE2の終端におけるマルチプレクサ170は、大きい方のオペランドから(必要に応じて1ビットシフトされた)小さい方のオペランドを減算した正確なLZA値を選択し、その値をフリップフロップ180に記憶する。前述のように、マルチプレクサ160および165は、大きい方のオペランドの仮数部および小さい方のオペランドの仮数部をそれぞれ選択する。マルチプレクサ165は、4:1のマルチプレクサであり、小さい方のオペランドの仮数部の1ビット右シフトされたバージョンを選択するよう設定されたシフト1信号にも応答する点にも注意すべきである。
先行ゼロ予測器回路は、当業者に理解されるように、様々な方法で構成することができる。例えば、M Schmooklerらによる文献「Leading Zero Anticipation and Detection − a Comparison of Methods」、15th IEEE Symposium on Computer Arithmetic, pages 7−12, June 2001、および同一の譲受人による米国特許第7,668,892号も参照されたい。なお、これらの全内容は参照により本明細書に組み込まれる。
パイプラインステージE3の開始までに、演算が同符号加算(LSA)であるかまたは異符号加算(USA)であるかが認識される。指数の差が2以上であるすべてのLSAおよびすべてのUSAは、(指数における差が奇数である場合、opsの仮数部はすでにマルチプレクサ165を介して1ビットシフトを経験していることを考慮して)右シフト回路200を用いて指数の差だけ右シフトされたopsの仮数部を有する。指数の差がゼロまたは1であるUSA(すなわち、これらの加算は前述の先行ビット相殺状態を生じさせる)は、左シフト回路190および195を用いて、フリップフロップ180に記憶されたLZA値だけ左シフトされたoplおよびopsの両方を有する。しかし、適用される左シフトの量は、大きい方のオペランドの指数と非正規化値に関連する指数(例えば、すべてゼロの指数値)との間の範囲に制限される。
非正規化指数値ゼロおよび正規化指数値1の両方が同一の実際の指数に対応するため、結果の指数がゼロである場合、1ビット右シフト訂正が必要とされる。このことは、4:1のマルチプレクサ205および210において処理される。特に、マルチプレクサ205は、先行ビット相殺状態の存在に応じて、oplの左シフトされた仮数部とoplのシフトされていない仮数部との間で選択し、非正規化訂正が必要である場合は、1ビット訂正されたバージョンを選択する。同様に、マルチプレクサ210は、先行ビット相殺状態の存在に応じて、opsの左シフトされた仮数部とopsの右シフトされた仮数部との間で選択し、非正規化訂正が必要である場合は、1ビット訂正されたバージョンを選択する。
ステージE3の終端において、2つの3:2加算器215および230は、マルチプレクサ205および210からの2つの出力を、丸め定数が挿入され、加算器230はオーバーフローが生じないことを仮定し、加算器215はオーバーフローが生じることを仮定する状態で、組み合わせるために用いられる。丸め定数に関するさらなる考察が、後に提供されるであろう。両方の加算器は、桁上げ保存形式で結果を出力し、桁上げ値および保存値は、ステージE3の終端において、フリップフロップ220および225内、およびフリップフロップ235および240内に、それぞれ記憶される。これらのフリップフロップは、3:2加算器から生じる場合がある任意の桁上げ出力ビットを捉えるために、サイズが108ビットである。
ステージE4において、桁上げ保存形式は、加算され、次いで、加算器およびマルチプレクサ250および255ならびに260および265を用いて、単精度数または倍精度数として再構築される。最終結果の仮数部が次いでマルチプレクサ270を介して選択され、その仮数部の小数部部分が次いで結果の符号および指数とともにフリップフロップ275内に記憶される。フリップフロップ275は、1ビットの符号値、52ビットの小数部値、および11ビットの指数値を収容するために、サイズが64ビットである。最終結果の仮数部がマルチプレクサ270により選択される方法については次の4つの可能性がある。
可能性1−特殊結果が選択される(これにより加算器出力が上書きされる)。特殊結果は、図2に図示しない指数論理にほぼ基づいて選択され、特殊結果は、一般に、結果の指数がすべて1である場合に検出される。特殊結果はNaN(非数)および無限大等であり、特殊結果を処理する回路については当業者がよく理解するところである。
可能性2−非オーバーフロー加算器(add0)260のビット107が設定される場合、オーバーフロー加算器(add1)250の出力が選択される。しかし、1つの特定の実施形態においては、このルールに1つの例外が存在する。すなわち、この出力は、ゼロの計算結果指数を有するUSA演算に対しては選択されない。なぜなら、これはオーバーフローすることができない別個の非正規化ケースであるためである。この例外的ケースにおいては、加算器260の出力が選択される。
可能性3−(1)add1(ビット108)の桁上げ出力が設定される場合、または(2)add0の出力のビット107が設定され、USA演算およびゼロの計算結果指数を有する融合された入力が存在する場合(この後者のケースは非正規化二重オーバーフロー状態である)、(結果の仮数部の全小数部ビットをゼロに設定し、次いで、add1出力に対して計算された値よりも1だけ高い指数を選択する)オーバーフロー2結果が選択される。
可能性4−上述の可能性1〜3に説明したいずれの状況も存在しない場合、add0の出力が結果の仮数部を形成するために用いられる。
上述した図2の回路を見ると、回路は別個の近接パスおよび遠隔パスを有さないことがわかるであろう。従来の近接/遠隔パス加算器においては、LZA演算は加算と同時に実行され、LZA値は合計を正規化するために用いられる。しかし、図2の上記の説明から、LZA演算がはるかに早期に、すなわちステージE4における加算の2サイクル前であるステージE2において、実行されることがわかるであろう。次いで、計算されたLZA値は、ステージE3において2つのオペランドの仮数部を左シフトし、その結果としてこれらの仮数部のいくつかの先行ビットを廃棄することにより、加算結果を前正規化するために用いられる。USA演算が存在する場合においてはこれらの先行ビットは加算されるとき(すなわち、すべてゼロになるとき)相殺されるため、この左シフト演算により、情報が失われることはまったくない。
さらに、このようにして合計を前正規化することにより、先行ビット相殺状態が存在すると判定され、したがって2つの左シフト回路190および195からの出力が加算に用いられる場合、シフトされた仮数部が丸め挿入に対して正しく整置され、そのようにして、ステージE4における2つの加算器250および260が、確実に、正しく丸められた結果を生成する。加えて、C HindsおよびD Lutzによる文献「A Small and Fast Leading One Predictor Corrector Circuit」、Asilomar Conference on Signals, Systems, and Computers、1181〜1185ページ、2005年10月において説明されたLZA訂正問題が、ステージE4において2つの加算器250および260を有することにより、自動的に処理される。特に、LZA回路の出力は、先行ゼロの個数の予測において1ビットだけずれる可能性があるが、係るエラーが存在する場合は、オーバーフローが加算器add0 260から生じることになり、その結果、加算器add1 250からの出力が選択される。このようにして、先行ゼロ予測のエラーが自動的に訂正されることとなる。
図2の加算器において、真の近接パスまたは遠隔パスは存在しない。遠隔パスを使用したであろう演算はLZA結果を無視し、小さい方のオペランドを、2つのオペランドの指数の差から計算された量だけ右シフトする。近接パスを使用したであろう演算は、ステージE3においてLZA結果を用いて、オペランドを左シフトする。両方の場合において、ステージE3の終端で3:2加算器を用いて丸め定数が加えられる。
融合された入力の特性により、最終合計は実際に結果4.0(マルチプレクサ270への制御におけるオーバーフロー2を示す)を達成することができる。これは、乗算結果が丸められず、したがって不正確な指数を有する場合があるという事実によるものである。例えば、乗算器4からの乗算結果が54個以上の先行する1からなる場合を考える。丸められている場合には乗算結果はより高い指数を持つであろうが、しかし乗算結果は丸められていない。これに近接する数が加算器8内でUSA演算によりその値から減算される場合、指数は次の3つの値、すなわち、add0加算器の出力に関連する結果の指数に等しい値、add0加算器の出力に関連する結果の指数よりも1だけ大きい値、またはadd0加算器の出力に関連する結果の指数よりも2だけ大きい値、のいずれかを取ることができる。図4を参照して後に説明するように、加算器8がUSAを処理する方法は、add0加算器からの出力の指数を大きい方のオペランドの指数よりも1だけ小さく設定すること(右シフト回路200の出力が用いられると仮定して)、またはadd0加算器からの出力の指数を、大きい方のオペランドの指数からLZA値を引いた値と等しくなるよう設定し(左シフト回路190および195の出力が使われると仮定して)、その後、合計が、2番目に大きい指数にオーバーフローできるようにすることである。丸められていない(融合された)入力を用いると、2番目に高い指数へと再びオーバーフローすることが実際に可能である。したがって、前述のように(可能性3)オーバーフロー2状態を処理する必要性が生じる。
非正規化数の処理に関しては、これは、ステージE2内で適切な仮数部ビット(非正規化数に対しては、これは0であり、正規化数に対しては、これは1であろう)をoplおよびopsに挿入し、その後ステージE3において4:1マルチプレクサ205および210を用いてシフト量を1だけ調節することが単に必要となる。非正規化数は、その後図2を参照して説明された正常な流れを用いることにより、最終的な加算においてオーバーフロー2状態に対処する必要なしに、処理される(係る場合におけるUSA演算の結果は非化、最小の指数を有する正規化、または最小値に1を加えた指数を有する正規化となる可能性がある)。
図3A〜図3Cは、1つの実施形態に係る、図2の構成要素に入力される様々な制御信号を生成するために提供することができる回路を示す。図3Aに示すように、好適にはXORゲートの形を取り得る比較回路300は、オペランドAの指数およびオペランドBの指数の両方の最下位ビットを受け取り、図2のパイプラインステージE2に入力される「シフト1」信号を、比較回路300の出力において生成する。したがって、シフト1信号は、これらの指数の最下位ビットが異なる場合は、論理1値に設定され、それ以外の場合は、論理ゼロ値にクリアされることが理解されるであろう。
図3Bは、パイプラインステージE3の間に、マルチプレクサ205および210に入力されるL(左シフト)制御信号またはR(右シフト)制御信号を生成するために用いられる、オペランド解析回路310の動作を示す。特に、指数差回路315はオペランドAおよびオペランドBの指数を受け取り、これらの指数の差を判定する。USA検出器320は、両方の入力オペランドの符号と、入力命令に指定された加算演算または減算演算とから、USA演算が実行されるかどうかをも判定する。次いでL/R生成器325が、指数差回路315およびUSA検出器320の両方から出力を受け取る。オペランドAおよびオペランドBの指数が同一の値または1だけ異なる値を有し、且つ異符号加算が実行される場合、これは、先行ビット相殺状態が存在することを示し、したがってL出力が設定される。逆に、先行ビット相殺状態が存在しない場合、R出力が設定される。1つの値がLを示し、他方の値がRを示す場合、実際は、単一ビット出力信号が用いられる可能性がある。
図3Cは、図2のパイプラインステージE2およびE3において用いられる「exp diff」信号および「a_larger」信号を生成するために用いられるより大きいオペランドの判定回路330の動作を概略的に示す。より大きい指数の検出器335は、オペランドAおよびオペランドBの指数から、いずれが大きい方の指数であるかを判定し、次いで、回路340は、exp diff信号を生成するために、大きい方の指数から小さい方の指数を減算する。次いでより大きい小数部の検出器345がオペランドAおよびオペランドBの両方の小数部値を受け取り、いずれの小数部が小さいかを判定する。より大きいオペランドの検出器350は、より大きい指数の検出器335およびより大きい小数部の検出器345から出力を受け取り、この入力に基づいて、いずれのオペランドがより大きいかを判定する。一般に、より大きい指数の検出器335からの出力は、いずれが大きい方のオペランドであるかを判定するために用いられるが、指数が等しい場合は、より大きい小数部の検出器からの出力が、大きい方のオペランドを判定するために用いられる。次いでより大きいオペランドの検出器350は、a_larger信号を生成する。なお、このa_larger信号は、オペランドAがより大きい場合には論理1値に設定され、オペランドBがより大きい場合には論理ゼロ値にクリアされる。
図4は、図2の加算器add 0 260から出力される結果に関連する指数を判定するために、指数処理パス(図2において図示せず)において実行されるステップを示すフローチャートである。ステップ360において、L値がオペランド解析回路310の出力において設定されているかどうかが判定される。L値が設定されている場合、次いでステップ365において、加算器260からの出力に関連する結果の指数が、大きい方のオペランドの指数から、フリップフロップ180に記憶されたLZA値を減算した値と等しくなるよう設定される。しかし、大きい方の指数をどの程度まで減少させるかについては制限があり、1つの特定の実施形態においては、非正規化値に関連するであろう値より低くなるよう減少させることは認められない。なお、その非正規化値に関連するであろう値は、1つの実施形態においては、すべてゼロの指数値である。
ステップ360において、L値が設定されていないと判定された場合、プロセスはステップ370へと進み、ステップ370において、異符号加算演算が実行されるかどうかが判定される。異符号加算演算が実行されないと判定された場合、プロセスはステップ375へと進み、ステップ375において、加算器260からの出力に関連する結果の指数が、大きい方のオペランドの指数と等しくなるよう設定される。しかし、ステップ370において異符号加算演算が実行されると判定された場合、プロセスはステップ380へと進み、ステップ380において、加算器260からの出力に関連する結果の指数が、大きい方のオペランドの指数から1を減算した値に等しくなるよう設定される。
加算器260からの出力に関連する結果の指数を判定することにより、加算器250からの出力に関連する結果の指数が、単に、計算された指数より1だけ大きく設定されていることが理解できるであろう。
加算器260からの出力に関連する結果の指数がすべてゼロである場合、これは、非正規化状態の存在を示し、その結果、図2のパイプラインのステージE3において、非正規化信号を設定させ、マルチプレクサ205および210への入力として提供される。同様に、加算器260からの出力に関連する結果の指数がすべて1である場合、これは、特殊な場合の存在を示し、図2のパイプラインのステージE4の間、マルチプレクサ270に入力される特殊信号を設定するために用いられる。
図5Aおよび図5Bは、1つの実施形態に係る図2の回路の動作を示すフローチャートである。ステップ400において、入力オペランドAおよび入力オペランドBが受け取られ、オペランドBはいくつかの実施形態においてはオペランドLおよびオペランドMの丸められていない積算結果である。その後、先行ゼロ予測(LZA:leading zero anticipation)計算がステップ405で実行される。なお、このプロセスは後に図6を参照してさらに詳細に説明される。
その後、ステップ410およびステップ415が並行して実行され、ステップ410において、オペランドAおよびオペランドBの仮数部が、ステップ405で生成されたLZA結果により決定される量だけ左シフトされる。ステップ415において、小さい方のオペランドの仮数部は、指数の差に応じた量だけ右シフトされる。
その後、プロセスはステップ420に進み、ステップ420において先行ビット相殺状態が存在するかどうかが判定される。先行ビット相殺状態が存在する場合、ステップ410で生成された左シフトされた仮数部がステップ425において選択される。逆に、先行ビット相殺状態が存在しない場合、大きい方のオペランドの仮数部および小さい方のオペランドの右シフトされた仮数部がステップ430において選択される。
ステップ425またはステップ430のいずれかの後、プロセスはステップ435に進み、ステップ435において、非正規化状態が存在するかどうかが判定される。一般に、非正規化状態は、加算器260に関連する結果の指数がすべてゼロである場合に検出される。非正規化状態が存在すると判定された場合、プロセスはステップ440に進み、ステップ440において、選択された仮数部の1ビット訂正された右シフトが実行される。
ステップ440の後に、またはステップ435の直接後に、非正規化状態が存在しない場合、2つの加算演算がステップ445において挿入丸めを用いて実行される。第1の加算はオーバーフロー状態が存在しないことを仮定し、第2の加算はオーバーフロー状態を仮定する。
その後、ステップ450において、前述のように、特殊状態が検出されるかどうか判定される。なお、これは一般に加算器260からの結果に関連する指数がすべて1である場合に、成り立つ。特殊状態が存在する場合、プロセスはステップ455に進み、ステップ455において、予め定められた特殊状態が結果の仮数部として選択される。しかし、特殊状態が存在しないと仮定すると、ステップ460においてオーバーフロー2状態が存在するかどうかが検出される。オーバーフロー2状態の存在が検出された場合、プロセスはステップ465に枝分かれして進み、ステップ465において、結果の仮数部のすべての小数部ビットは強制的にゼロに設定される。
オーバーフロー2状態が存在しないと考えられる場合、ステップ470において、オーバーフロー状態が存在するかどうか、すなわち加算器260からの桁上げ出力が存在するかどうかが判定される。オーバーフロー状態が存在すると判定される場合は、第2加算器250の出力がステップ475において結果の仮数部として用いられ、一方、オーバーフロー状態が存在しない場合は、第1加算器260の出力が結果の仮数部として用いられる。ステップ455、465、475、および480のうちの関連する1つのステップの後、結果の仮数部がステップ485において出力される。
図6は、図5Aのステップ405をさらに詳細に示すフローチャートである。ステップ500において、オペランドAおよびオペランドBの指数の最下位ビットが同一であるかどうかが判定される。これらが同一である場合、プロセスはステップ505およびステップ510に進み、ステップ505およびステップ510において、第1シフト表示候補および第2シフト表示候補が生成される。なお、第1シフト表示候補はオペランドAがより大きいことを仮定し、第2シフト表示候補はオペランドBがより大きいことを仮定する。
同様に、オペランドAおよびオペランドBの指数の最下位ビットが同一でない場合、プロセスはステップ515およびステップ520に進み、ステップ515およびステップ520において、オペランドAまたはオペランドBがより大きいことをそれぞれ仮定して、第1シフト表示候補および第2シフト表示候補が再び生成される。しかし、ステップ515およびステップ520での計算においては、より小さいと仮定されたオペランドの1ビット右シフトされたバージョンが用いられる。
次いでプロセスはステップ525へと進み、ステップ525において、オペランドAがオペランドBより大きいかどうかが判定される。オペランドAがオペランドBより大きいと判定された場合、プロセスはステップ530へと進み、ステップ530において、第1シフト表示候補が、フリップフロップ180に記憶されるLZA結果として選択される。しかし、ステップ525においてオペランドAがオペランドBより大きくないと判定された場合、ステップ535において、第2シフト表示候補がLZA結果として選択される。ステップ530またはステップ535のいずれかの後、ステップ540において、LZA結果がフリップフロップ180に記憶される。
図2においてround0およびround1として3:2加算器215および230に入力される丸めの値を、完全性のために考慮すると、これらの値は、用いられる丸めモードに依存するであろう。例えば、4つのIEEE 754丸めモード、すなわちRZ(ゼロへの丸め)、RN(最近接偶数への丸め)、RM(負の無限大への丸め)、およびRP(正の無限大への丸め)が存在する。浮動小数点数は符号および大きさとして記憶されるため、RMおよびRPは、それらの範囲の部分に対しては無限大への丸め(RU)として、およびそれ以外の範囲に対してはRZと見なすことができる。特に、RPモードに対しては、任意の正の数は無限大へ丸められ(RU丸め)、任意の負の数は丸められない(RZ丸め)が、一方でRMモードに対しては任意の負の数は無限大へと丸められ(RU丸め)、任意の正の数は丸められない(RZ丸め)。したがって、すべて実際的な目的に対して、3つの丸めモードすなわちRZ、RN、およびRUのみが存在する。
挿入による丸めは、3つの丸めモードのうちの1つを実行する定数を加えることを意味する。挿入丸めの利点は、要求される挿入が加算の実行前に行われ、それにより、加算の出力後に別個の丸め動作が不必要となることである。まず、仮数部に24ビットを有する単精度浮動小数点数を考えると、RNモードに対しては、第24番目のビットのすぐ右側に1が挿入される。RUモードに対しては、すべて1のワードが第24番目のビットの右側に挿入される。RZモードに対しては、挿入は行われない(すなわち、ゼロの挿入値が選択される)。
2つの丸め定数が図2の実施形態において実際に用いられる。なぜなら、上位24ビットの位置について何らかの不確実性が存在するためである。2つの数を合計する際に桁上げ出力が存在する場合、上位24ビットは、桁上げ出力が存在しない場合に上位24ビットが存在する位置から1ビット左にずれた位置に存在する。これは、ステージE4において2つの加算器と2つの丸め定数が提供されるためである。なお、1つの加算器は合計からの桁上げ出力が存在することを仮定し、他の加算器は桁上げ出力が存在しないと仮定する。低い方の加算器260の桁上げ出力ビットを見ることにより、どの加算器が正しいかを判定することができる。
したがって、単精度数を加える場合、低い方の加算器(add0)に対する挿入丸めの値round0は、
上位24ビット:ゼロ
第25番目のビット:RUまたはRNモードを用いる場合、1
第26番目および残りのビット:RUモードを用いる場合、1
となる。
単精度数を加える場合、高い方の加算器(add1)に対する挿入丸めの値round1は、
上位23ビット:ゼロ
第24番目のビット:RUモードまたはRNモードを用いる場合、1
第25番目および残りのビット:RUモードを用いる場合、1
となる。
倍精度数は仮数部に53ビットを有し、したがって、第53番目のビットの右側に挿入が行われる。それ以外は、単精度加算器に対する場合と論理はまったく同じである。したがって、倍精度数を加える場合、低い方の加算器(add0)に対する挿入丸めの値round0は、
上位53ビット:ゼロ
第54番目のビット:RUモードまたはRNモードを用いる場合、1
第55番目および残りのビット:RUモードを用いる場合、1
となる。
倍精度数を加算する場合、高い方の加算器(add1)に対する挿入丸めの値round1は、
上位52ビット:ゼロ
第53番目のビット:RUモードまたはRNモードを用いる場合、1
第54番目および残りのビット:RUモードを用いる場合、1
となる。
図2で説明した加算器によれば、加算器への入力は、同じ2つの挿入定数が常に用いられるよう準備される(先行ビット相殺状態が存在する場合に、結果の前正規化を介して)。
以下の文では、図2の加算回路の統合されたパスが、従来は加算器の遠隔パスを経由したであろう加算および従来は加算器の近接パスを経由したであろう加算をどのように処理するかを示す、いくつかの例が提供される。
浮動小数点数は、符号ビットおよび大きさとして表され、大きさは常に正である。符号ビットおよび演算(加算および減算)は、演算が同符号加算(LSA)であるかまたは異符号加算(USA)であるかを判定するために、評価される。
LSAは、
正のAプラス正のB
負のAプラス負のB
正のAマイナス負のB
負のAマイナス正のB
である。
USAは、
正のAプラス負のB
負のAプラス正のB
正のAマイナス正のB
負のAマイナス負のB
である。
以下の例に対しては、明確さのために、4ビットの仮数部および小さい指数のみを有する短い形式が用いられる。真の例は24ビットまたは53ビットの仮数部を有する。簡略のために、丸め定数は含まれない。以下の例においては、1.011 e4として表現される数は、1.011×2を示す。
例1
LSA、従来の遠隔パス(LSAは常に右シフトの場合である)
1.011 e4
+1.101 e2
加算を実行する前に、指数を同一にする必要がある。したがって、小さい方の数は、2桁だけ右シフトされる必要がある。
1.011 e4
+0.01101 e4
−−−−−−−−
1.11001 e4
図2を参照すると、上の例において、LZA出力180は無視されることになり、小さい方のオペランドは右シフト回路200を用いて右シフトされることになり、add0加算器260からの出力が、オーバーフローが存在しないため、選択されることになる。
例2
USA右シフト、従来の遠隔パス
1.011 e4
−1.001 e2
減算する前に、指数を同一にする必要がある。したがって、小さい方の数は、右シフト回路200により、2桁だけ右シフトされる必要がある。
1.011 e4
−0.01001 e4
−−−−−−−−
1.00011 e4
2の補数の演算における減算の実行方法は、減数を反転し、それと1とを被減数に加えることである(被減数−減数=差)。減算を1ビット桁だけ左シフトし、やりやすくするように、指数を減少させる(これは減算であるため、指数は開始時点よりも1だけ少ない値となる場合があるが、大きくなることはない)。指数が減少する場合はadd0が用いられ、差が元の指数に「オーバーフロー」する場合はadd1が用いられる)。図2を参照すると、上述の内容は、1つの実施形態においては、ステージE2において反転器165に減数を反転する論理を加え、ステージE3において両方のマルチプレクサ205および210に両方の仮数部を左シフトする論理を加え、次いでE4において両方の加算器250および260に別の入力として1の値を加えることにより、達成することができる。結果として、実行された加算は、
0.1100 e3
+1.0110 e3
+ 1
−−−−−−−
10.0011 e3
と示すことができる。
桁上げ出力は、正しい答えがオーバーフロー加算器250からであることを意味し、正確な答えは、1だけ大きい指数を有し、
1.000 e4 (RZ丸め)
が得られる。
この場合、RUモードまたはRNモードで丸めを実行した場合、答えは1.001e4となるであろう点に注意されたい。
例3
同一の指数、左シフトが要求され、従来の近接パスを有する、USA
1.110 e4
−1.100 e4
2の補数の加算に変換すると、これは、
1.110 e4
+0.011 e4
+ 1
−−−−−−
0.010 e4
となる。
この結果は正常規化数ではない(正規化浮動小数点数は、1.xxx×何らかの指数の形でならなければならない)。したがって、LZA出力180を用いて両方のオペランドをどれだけ左シフトすべきかを認識し、次いで、左シフト回路190および195を用いて必要な左シフトを実行する。この場合、予測されたLZAは3であり、したがって加算は、
0.000 e1
+1.111 e1 (減数を左シフトするとき、1が挿入される)
+ 1
−−−−−−
10.000 e1
となる。
桁上げ出力は、正しい答えがオーバーフロー加算器250からであることを意味し、正確な答えは1だけ大きい指数を有し、
1.000 e2
となる。
例4
1だけずれた指数、左シフトが要求され、従来の近接パスを有する、USA
1.011 e4
−1.100 e3
これは、指数を同一にするために1ビット右シフト(マルチプレクサ165により実行される)が必要となる。
1.011 e4
−0.1100 e4
2の補数の加算に変換すると、これは、
1.011 e4
+1.0011 e4
+ 1
となる。
予測されるLZAは2であり、したがって左シフト回路190および195を利用して両方のオペランドを2だけ左シフトし、それに応じて指数を調節すると、
1.100 e2
+0.111 e2
+ 1
−−−−−−
10.100 e2
が得られる。
桁上げ出力は、正しい答えがオーバーフロー加算器250からであることを意味し、正確な答えは、1だけ大きい指数を有し、
1.010 e3
が得られる。
例5
二重オーバーフロー、従来の遠隔パスを有する、USA
この例に対しては、入力のうちの1つは、融合乗算加算の一部として乗算器4から出力される必要がある。この入力は他の入力の2倍の長さとなるであろう。さらに、この入力は丸められていないため、丸められた同一結果と比較すると1だけずれている指数を有する場合がある。例えば、乗算器出力が、
1.111_1110e7
であるとする(式中のアンダースコアは長いビットの列を読みやすくするためにのみ置いたものであり、他に特段の意味を有すものではない)。
これはRU丸めまたはRN丸めにより丸める場合、
1.000 e8
が得られる。
その結果、興味深い状況が生じる。すなわち、積から小さい数を減算した結果、指数が増加することとなるのである。これは本明細書では「二重オーバーフロー」と称される。例えば、
1.111_1110 e7
−1.000 e2
を考える。
小さい方のオペランドを右シフトすると、
1.111_1110 e7
−0.000_0100 e7
が得られる。
2の補数の加算に変換し、さらに減算のために1ビット左シフトを実行する(例2を参照)と、
1.11_1110 e6
+1.11_1011 e6
+ 1
−−−−−−−−−−
11.11_1010 e6
が得られる。
桁上げ出力は正しい答えがオーバーフロー加算器250からであることを意味し、したがって指数は1だけ大きくなる。しかし、丸め定数を加えた場合(RNまたはRU)、合計が二重オーバーフローすることに注意すべきである。
1.111_1010 e7
+ 1000 (RN丸め定数)
−−−−−−−−−−−
10.000_0010
から、正しく丸められた答え、
1.000 e8
が得られる。
図2を考慮すると、この状態を検出する方法は、より大きい加算器add1 250からのオーバーフローを検出し、係るオーバーフローが生じた場合、結果の仮数部の全小数部ビットを強制的に1に設定し、より大きい加算器250の出力に関連する指数よりも1だけ大きい指数を、結果の指数として選択することである。
本発明の実施形態が新規の加算器回路を提供することが、上述の内容から理解できるであろう。なお、この新規の加算器は、後に合計が計算される前に両方のオペランドを左シフトすることによる結果の前正規化が続く、早期のLZA判定(1つの実施形態においては、小数部、または実際に指数の他のビットが比較される前に行われる)が含まれる。さらに、挿入丸めは、すべの加算に対して用いられ、特に、結果の前正規化のために、先行ビット相殺を有する効果的な減算に用いることができる。これにより、特に簡単で且つ効果的な加算器回路が提供され、その結果、従来の先行技術に係る手法において用いられるような、別個の近接パスおよび遠隔パスが不必要となる。実施形態によれば、先行ゼロ訂正は不必要となる点に注意すべきである。なぜなら、先行ゼロ値が1だけずれる場合、そのずれは、図2のオーバーフロー加算器250からの出力の使用により自動的に訂正されるためである。
実施形態に係る加算器回路は、乗算器の出力が丸められない状態で加算器回路に提供される融合乗算加算演算をサポートするために加算器回路が別個の乗算器回路に接続されている場合に、特に有益である。特に、実施形態に係る加算器回路は、融合乗算加算演算の実行時に挿入丸めの適用を可能にする。なぜなら、前正規化回路が動作することにより、先行ビット相殺が存在する場合に、入力が挿入丸めに対して正しく整置されることを確実にするためである。
しかし加算器が融合乗算加算演算に対応するにあたって特に良好に適合する一方で、この基本的設計は、設計が融合乗算加算演算をサポートしない場合でも、依然として、従来の近接/遠隔パス加算器に対する改良である。融合乗算加算演算がサポートされない場合、図2のいくつかのパスのサイズが低減されることが理解されるであろう。なぜなら、両方の指数部は、倍精度値が処理されると仮定すると、サイズが53ビットとなるからである。
上述した新規の加算器の設計によれば、従来の加算器の全近接パスは2つの左シフト器および2つのLZA回路により置き換えられる。タイミングは近接/遠隔パス加算器と等価(実際のところ、融合乗算加算演算を実行する場合には、より優れたものとなる)であるが、それに加えて、加算器は、従来の近接/遠隔パス加算器よりも、かなり簡単で且つ小型なものとなる。
本明細書においては本発明に係る特定の実施形態について説明してきたが、本発明がこれらの実施形態に限定されないこと、および本発明の範囲内で、多数の変更例および追加例がなわれてもよいことは、明らかであろう。例えば、本発明の範囲から逸脱することなく、以下の従属請求項の特徴と独立請求項の特徴とを様々に組み合わせることが可能である。

Claims (20)

  1. 結果Rを得るためにオペランドAおよびオペランドBに加算演算を実行する装置であって、前記オペランドA、前記オペランドB、および前記結果Rは、仮数部および指数を各々有する浮動小数点値である、装置であって、
    前記オペランドAおよび前記オペランドBに異符号加算を実行することにより生成される出力に存在するであろう先行するゼロの個数の予測に基づいてシフト表示を生成するように構成された予測回路と、
    前記仮数部の加算の前に、前記オペランドAおよび前記オペランドBの両方の前記仮数部にシフト演算を実行するように構成され、前記シフト演算は、前記オペランドAおよび前記オペランドBに対して修正された仮数部を生成するために、前記シフト表示による決定に応じて、前記オペランドAおよび前記オペランドBの両方の前記仮数部の最上位ビットのいくつかを廃棄するように作用する、結果前正規化回路と、
    前記オペランドAおよび前記オペランドBの前記指数を参照して、先行ビット相殺状態の存在を検出するように構成されたオペランド解析回路と、
    前記先行ビット相殺状態の存在下で、前記結果Rの前記仮数部を生成するために、前記オペランドAおよび前記オペランドBに対する前記修正された仮数部の加算を実行するように構成された加算回路と、
    を備え、
    前記加算回路は、前記先行ビット相殺状態の不存在下で、前記結果Rの前記仮数部を生成するために、前記結果前正規化回路によって生成された前記修正された仮数部を使用することなく、前記オペランドAおよび前記オペランドBの両方の前記仮数部の加算を実行し、
    前記オペランドBは2つの浮動小数点オペランドに乗算演算を実行した結果であり、前記オペランドBは、前記結果Rが融合乗算累積演算の結果を表すように、入力として丸められない状態で前記装置に提供され、
    前記結果Rの前記仮数部は、Nビットを有しており、前記オペランドBの前記仮数部は、丸められない状態に起因してNビットよりも多いビット数を有しており、
    前記加算回路は、前記加算の実行時、挿入丸めを実行して丸め増分値を加算するように構成され、
    前記加算回路の前に前記結果前正規化回路が動作することにより、前記オペランドAおよび前記オペランドBの前記修正された仮数部が、前記挿入丸めに対して正しく整置されることを確実にする装置。
  2. 前記オペランド解析回路は、前記オペランドAおよび前記オペランドBの前記指数が同一の値または1だけ異なる値を有し、かつ前記オペランドAと前記オペランドBとに前記加算演算を実行するために、異符号加算が用いられる場合に、前記先行ビット相殺状態の存在を検出する、請求項1に記載の装置。
  3. 前記予測回路は、前記異符号加算により、前記オペランドAおよび前記オペランドBのうちの小さい方のオペランドが前記オペランドAおよび前記オペランドBのうちの大きい方のオペランドから引かれる場合に対して、前記シフト表示を算出する、請求項1または請求項2に記載の装置。
  4. 前記オペランドAおよび前記オペランドBのいずれがより大きいかの判定は、前記予測回路が先行ゼロ値の計算を開始する時点では得られず、
    前記予測回路は、第1シフト表示候補および第2シフト表示候補を生成するように準備され、前記第1シフト表示候補は前記オペランドAが前記オペランドBよりも大きいことを仮定し、前記第2シフト表示候補は前記オペランドBが前記オペランドAよりも大きいことを仮定する、
    請求項3に記載の装置。
  5. 前記オペランドAおよび前記オペランドBのいずれが大きい方のオペランドであるかを判定するためのより大きいオペランドの判定回路と、
    前記より大きいオペランドの判定回路に応答して、前記オペランドAが前記大きい方のオペランドである場合は、前記シフト表示として、前記第1シフト表示候補を選択するように構成され、前記オペランドBが前記大きい方のオペランドである場合は、前記シフト表示として、前記第2シフト表示候補を選択するように構成された選択回路と、
    をさらに備える、請求項4に記載の装置。
  6. 前記オペランドAの前記指数の最下位ビットが前記オペランドBの前記指数の最下位ビットと同一であるかどうかを示す比較結果を出力するように構成された比較回路をさらに備え、
    前記比較結果が前記指数の前記最下位ビットが同一であることを示す場合、前記予測回路は、前記異符号加算により、前記オペランドAおよび前記オペランドBのうちの小さい方のオペランドが前記オペランドAおよび前記オペランドBの大きい方のオペランドから減算される場合に対して、前記シフト表示を計算し、
    前記比較結果が前記指数の前記最下位ビットが同一でないことを示す場合、前記予測回路は、前記異符号加算により、前記オペランドAおよび前記オペランドBのうちの前記小さい方のオペランドの1ビット右シフトされたバージョンが前記オペランドAおよび前記オペランドBのうちの前記大きい方のオペランドから減算される場合に対して、前記シフト表示を計算する、
    請求項3から請求項5のいずれかに記載の装置。
  7. 前記加算回路は、
    オーバーフロー状態が存在しないことを仮定して、第1丸め増分値を用いて前記加算を実行するように構成された第1加算回路と、
    オーバーフロー状態が存在することを仮定して、第2丸め増分値を用いて前記加算を実行するように構成された第2加算回路と、
    を備え、
    先行ゼロ訂正状態が存在する場合には、前記加算回路は、前記結果Rの前記仮数部として、前記オペランドAおよび前記オペランドBの前記修正された仮数部から前記第2加算回路により生成された結果を出力するように構成された、
    請求項1に記載の装置。
  8. 前記加算回路が前記オペランドAおよび前記オペランドBに対する前記修正された仮数部の前記加算を実行するとき、前記先行ゼロ訂正状態は、前記第1加算回路から桁上げ出力が生成された場合に検出される、請求項7に記載の装置。
  9. 前記結果前正規化回路は、前記オペランドAおよび前記オペランドBに対する前記修正された仮数部を生成するために、前記オペランドAおよび前記オペランドBの両方の前記仮数部に左シフト演算を実行することにより、前記シフト演算を実行する、
    請求項1から請求項8のいずれかに記載の装置。
  10. 前記仮数部の前記加算の前に、前記オペランドAおよび前記オペランドBのうちの前記小さい方のオペランドの前記仮数部と、前記オペランドAおよび前記オペランドBのうちの前記大きい方のオペランドの前記仮数部とを整置を実行するように構成された整置回路をさらに備え、
    前記加算回路は、前記先行ビット相殺状態が存在しない場合、前記整置回路により整置された前記オペランドAおよび前記オペランドBの前記仮数部の加算を実行するように構成された、
    請求項1から請求項9のいずれかに記載の装置。
  11. 前記整置回路は、シフトするビットの個数が前記オペランドAおよび前記オペランドBの前記指数の差に依存する状態で、前記オペランドAおよび前記オペランドBのうちの前記小さい方のオペランドの前記仮数部に右シフト演算を実行することにより、整置演算を実行する、請求項10に記載の装置。
  12. 前記装置は、一連のパイプラインステージとして構成され、前記結果前正規化回路は、前記加算回路が配置された後続のパイプラインステージの前のパイプラインステージに配置される、請求項1から請求項11のいずれかに記載の装置。
  13. 前記予測回路は、前記結果前正規化回路が配置された前記パイプラインステージの前の、先行するパイプラインステージに配置される、請求項12に記載の装置。
  14. 前記加算回路の入力の前に、非正規化状態の検出に応答して、前記オペランドAおよび前記オペランドBに対する前記修正された仮数部に1ビット訂正右シフトを実行するシフト訂正回路をさらに備える、請求項1から請求項13のいずれかに記載の装置。
  15. 前記非正規化状態は、前記結果Rの前記指数が予め定められた値をとる場合に検出される、請求項14に記載の装置。
  16. 二重オーバーフロー状態の検出に応答して、前記加算回路の前記出力に関わりなく、前記結果Rの前記仮数部の全小数部ビットを論理ゼロ値として出力する、結果仮数部出力回路をさらに備える、請求項1から請求項15のいずれかに記載の装置。
  17. 前記加算回路は、
    オーバーフロー状態が存在しないことを仮定して、第1丸め増分値を用いて前記加算を実行するように構成された第1加算回路と、
    オーバーフロー状態が存在することを仮定して、第2丸め増分値を用いて前記加算を実行するように構成された第2加算回路と、
    を備え、
    前記二重オーバーフロー状態は、異符号加算演算の実行時、前記第2加算回路から桁上げ出力が生じた場合に検出され、
    前記二重オーバーフロー状態が存在する場合、前記結果の前記指数は、前記第1加算回路からの前記出力に関連する前記指数よりも2だけ大きく設定される、
    請求項16に記載の装置。
  18. 前記予測回路は、前記オペランドAおよび前記オペランドBに異符号加算を実行することにより生成される出力に存在するであろう先行ゼロの個数を示す先行ゼロ値を、前記シフト表示として計算するように構成された先行ゼロ予測回路を備える、請求項1から請求項17の請求項のいずれかに記載の装置。
  19. データ処理装置のプロセッサによって実行される方法であり、結果Rを生成するためにオペランドAおよびオペランドBに加算演算を実行する方法であって、前記オペランドA、前記オペランドB、および前記結果Rは、仮数部および指数を各々有する浮動小数点値である、方法であって、
    前記オペランドAおよび前記オペランドBに異符号加算を実行することにより生成される出力において存在するであろう先行ゼロの個数の予測に基づいて、シフト表示を生成することと、
    結果前正規化回路を用いて、前記仮数部の加算の前に、前記オペランドAおよび前記オペランドBの両方の前記仮数部にシフト演算を実行し、前記シフト演算は、前記オペランドAおよび前記オペランドBに対して修正された仮数部を生成するために、前記シフト表示による決定に応じて、前記オペランドAおよび前記オペランドBの両方の前記仮数部の最上位ビットのいくつかを廃棄するように作用することと、
    前記オペランドAおよび前記オペランドBの前記指数を参照して、先行ビット相殺状態の存在を検出することと、
    前記結果Rの前記仮数部を生成するために、前記先行ビット相殺状態の存在に応答して、前記オペランドAおよび前記オペランドBに対する前記修正された仮数部の加算を実行するように、加算回路を動作させることと、
    を含み、
    前記加算回路は、前記先行ビット相殺状態の不存在下で、前記結果Rの前記仮数部を生成するために、前記結果前正規化回路によって生成された前記修正された仮数部を使用することなく、前記オペランドAおよび前記オペランドBの両方の前記仮数部の加算を実行し、
    前記オペランドBは2つの浮動小数点オペランドに乗算演算を実行した結果であり、前記オペランドBは、前記結果Rが融合乗算累積演算の結果を表すように、入力として丸められない状態で前記装置に提供され、
    前記結果Rの前記仮数部は、Nビットを有しており、前記オペランドBの前記仮数部は、丸められない状態に起因してNビットよりも多いビット数を有しており、
    前記加算回路は、前記加算の実行時、挿入丸めを実行して丸め増分値を加算するように構成され、
    前記加算回路の前に前記結果前正規化回路が動作することにより、前記オペランドAおよび前記オペランドBの前記修正された仮数部が、前記挿入丸めに対して正しく整置されることを確実にする方法。
  20. 結果Rを得るためにオペランドAおよびオペランドBに加算演算を実行する装置であって、前記オペランドA、前記オペランドB、前記結果Rは、仮数部および指数を各々有する浮動小数点値である、装置であって、
    前記オペランドAおよび前記オペランドBに異符号加算を実行することにより生成される出力に存在するであろう先行するゼロの個数の予測に基づいてシフト表示を生成する予想手段と、
    前記仮数部の加算の前に、前記オペランドAおよび前記オペランドBの両方の前記仮数部にシフト演算を実行し、前記シフト演算は、前記オペランドAおよび前記オペランドBに対して修正された仮数部を生成するために、前記シフト表示による決定に応じて、前記オペランドAおよび前記オペランドBの両方の前記仮数部の最上位ビットのいくつかを廃棄するように作用する、結果前正規化手段と、
    前記オペランドAおよび前記オペランドBの前記指数を参照して、先行ビット相殺状態の存在を検出するオペランド解析手段と、
    前記先行ビット相殺状態の存在下で、前記結果Rの前記仮数部を生成するために、前記オペランドAおよび前記オペランドBに対する前記修正された仮数部の加算を実行する加算手段と、
    を備え、
    前記加算手段は、前記先行ビット相殺状態の不存在下で、前記結果Rの前記仮数部を生成するために、前記結果前正規化手段によって生成された前記修正された仮数部を使用することなく、前記オペランドAおよび前記オペランドBの両方の前記仮数部の加算を実行し、
    前記オペランドBは2つの浮動小数点オペランドに乗算演算を実行した結果であり、前記オペランドBは、前記結果Rが融合乗算累積演算の結果を表すように、入力として丸められない状態で前記装置に提供され、
    前記結果Rの前記仮数部は、Nビットを有しており、前記オペランドBの前記仮数部は、丸められない状態に起因してNビットよりも多いビット数を有しており、
    前記加算手段は、前記加算の実行時、挿入丸めを実行して丸め増分値を加算するように構成され、
    前記加算手段の前に前記結果前正規化手段が動作することにより、前記オペランドAおよび前記オペランドBの前記修正された仮数部が、前記挿入丸めに対して正しく整置されることを確実にする装置。
JP2012031642A 2011-02-17 2012-02-16 浮動小数点加算を実行するための装置および方法 Active JP6001276B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/929,827 US8965945B2 (en) 2011-02-17 2011-02-17 Apparatus and method for performing floating point addition
US12/929,827 2011-02-17

Publications (2)

Publication Number Publication Date
JP2012174269A JP2012174269A (ja) 2012-09-10
JP6001276B2 true JP6001276B2 (ja) 2016-10-05

Family

ID=45814184

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012031642A Active JP6001276B2 (ja) 2011-02-17 2012-02-16 浮動小数点加算を実行するための装置および方法

Country Status (4)

Country Link
US (1) US8965945B2 (ja)
JP (1) JP6001276B2 (ja)
CN (1) CN102707921B (ja)
GB (1) GB2488863B (ja)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US9361267B2 (en) 2013-09-03 2016-06-07 International Business Machines Corporation Splitable and scalable normalizer for vector data
US9830129B2 (en) 2013-11-21 2017-11-28 Samsung Electronics Co., Ltd. High performance floating-point adder with full in-line denormal/subnormal support
US9461667B2 (en) 2013-12-30 2016-10-04 Samsung Electronics Co., Ltd. Rounding injection scheme for floating-point to integer conversion
GB2522194B (en) * 2014-01-15 2021-04-28 Advanced Risc Mach Ltd Multiply adder
WO2016003740A1 (en) 2014-07-02 2016-01-07 Via Alliance Semiconductor Co., Ltd. Split-path fused multiply-accumulate operation using first and second sub-operations
US9582248B2 (en) * 2014-09-26 2017-02-28 Arm Limited Standalone floating-point conversion unit
US10019227B2 (en) 2014-11-19 2018-07-10 International Business Machines Corporation Accuracy-conserving floating-point value aggregation
GB2537419B (en) * 2015-04-17 2021-09-01 Advanced Risc Mach Ltd Accumulation of floating-point values
US11061672B2 (en) 2015-10-02 2021-07-13 Via Alliance Semiconductor Co., Ltd. Chained split execution of fused compound arithmetic operations
US10540143B2 (en) 2015-10-24 2020-01-21 Alan A. Jorgensen Apparatus for calculating and retaining a bound on error during floating point operations and methods thereof
US9817662B2 (en) 2015-10-24 2017-11-14 Alan A Jorgensen Apparatus for calculating and retaining a bound on error during floating point operations and methods thereof
US10114642B2 (en) * 2015-12-20 2018-10-30 Intel Corporation Instruction and logic for detecting the floating point cancellation effect
US10489152B2 (en) * 2016-01-28 2019-11-26 International Business Machines Corporation Stochastic rounding floating-point add instruction using entropy from a register
US10671347B2 (en) 2016-01-28 2020-06-02 International Business Machines Corporation Stochastic rounding floating-point multiply instruction using entropy from a register
US10061561B2 (en) * 2016-09-07 2018-08-28 Arm Limited Floating point addition with early shifting
US10157059B2 (en) * 2016-09-29 2018-12-18 Intel Corporation Instruction and logic for early underflow detection and rounder bypass
US10078512B2 (en) 2016-10-03 2018-09-18 Via Alliance Semiconductor Co., Ltd. Processing denormal numbers in FMA hardware
US10303438B2 (en) * 2017-01-16 2019-05-28 International Business Machines Corporation Fused-multiply-add floating-point operations on 128 bit wide operands
US10140093B2 (en) * 2017-03-30 2018-11-27 Arm Limited Apparatus and method for estimating a shift amount when performing floating-point subtraction
CN107168678B (zh) * 2017-05-09 2020-10-27 清华大学 一种乘加计算装置及浮点乘加计算方法
CN107291420B (zh) * 2017-06-27 2020-06-05 上海兆芯集成电路有限公司 整合算术及逻辑处理的装置
US10241756B2 (en) 2017-07-11 2019-03-26 International Business Machines Corporation Tiny detection in a floating-point unit
JP2019141327A (ja) * 2018-02-21 2019-08-29 株式会社三洋物産 遊技機
JP7115211B2 (ja) * 2018-10-18 2022-08-09 富士通株式会社 演算処理装置および演算処理装置の制御方法
US11119729B2 (en) * 2019-03-28 2021-09-14 Arm Limited Alignment shifting and incrementing to determine a rounded result of adding first and second floating-point operands
CN111753317A (zh) * 2020-05-27 2020-10-09 长沙睿永信息技术有限公司 一种等长数字加密的实现方法
WO2020264540A2 (en) * 2020-05-30 2020-12-30 Futurewei Technologies, Inc. Methods and apparatus for efficient denormal handling in floating-point units
US11983237B2 (en) * 2021-02-21 2024-05-14 Ceremorphic, Inc. Floating point dot product multiplier-accumulator

Family Cites Families (32)

* Cited by examiner, † Cited by third party
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
US5027308A (en) * 1989-02-14 1991-06-25 Intel Corporation Circuit for adding/subtracting two floating point operands
US5010508A (en) * 1989-02-14 1991-04-23 Intel Corporation Prenormalization for a floating-point adder
JPH0635671A (ja) * 1992-07-14 1994-02-10 Matsushita Electric Ind Co Ltd 浮動小数点加減算装置
JPH07121353A (ja) * 1993-10-20 1995-05-12 Matsushita Electric Ind Co Ltd 浮動小数点加減算装置
US5631859A (en) 1994-10-27 1997-05-20 Hewlett-Packard Company Floating point arithmetic unit having logic for quad precision arithmetic
US5633819A (en) * 1995-10-24 1997-05-27 Exponential Technology, Inc. Inexact leading-one/leading-zero prediction integrated with a floating-point adder
US5996066A (en) * 1996-10-10 1999-11-30 Sun Microsystems, Inc. Partitioned multiply and add/subtract instruction for CPU with integrated graphics functions
US6223198B1 (en) * 1998-08-14 2001-04-24 Advanced Micro Devices, Inc. Method and apparatus for multi-function arithmetic
US6085208A (en) * 1997-10-23 2000-07-04 Advanced Micro Devices, Inc. Leading one prediction unit for normalizing close path subtraction results within a floating point arithmetic unit
US6131104A (en) * 1998-03-27 2000-10-10 Advanced Micro Devices, Inc. Floating point addition pipeline configured to perform floating point-to-integer and integer-to-floating point conversion operations
WO1999031573A1 (fr) 1997-12-17 1999-06-24 Kabushiki Kaisha Ultraclean Technology Research Institute Procede et circuit semi-conducteur pour effectuer des operations arithmetiques
US7346643B1 (en) * 1999-07-30 2008-03-18 Mips Technologies, Inc. Processor with improved accuracy for multiply-add operations
US6594679B1 (en) 2000-03-20 2003-07-15 International Business Machines Corporation Leading-zero anticipator having an independent sign bit determination module
CA2327924A1 (en) 2000-12-08 2002-06-08 Ibm Canada Limited-Ibm Canada Limitee Processor design for extended-precision arithmetic
US7392273B2 (en) * 2002-12-20 2008-06-24 International Business Machines Corporation High-sticky calculation in pipelined fused multiply/add circuitry
US7337202B2 (en) * 2003-12-24 2008-02-26 International Business Machines Corporation Shift-and-negate unit within a fused multiply-adder circuit
US7428566B2 (en) 2004-11-10 2008-09-23 Nvidia Corporation Multipurpose functional unit with multiply-add and format conversion pipeline
US7225323B2 (en) * 2004-11-10 2007-05-29 Nvidia Corporation Multi-purpose floating point and integer multiply-add functional unit with multiplication-comparison test addition and exponent pipelines
US8015231B2 (en) 2004-11-30 2011-09-06 Arm Limited Data processing apparatus and method for performing floating point multiplication
US7433911B2 (en) 2004-12-21 2008-10-07 Arm Limited Data processing apparatus and method for performing floating point addition
US7461117B2 (en) * 2005-02-11 2008-12-02 International Business Machines Corporation Floating point unit with fused multiply add and method for calculating a result with a floating point unit
US7437400B2 (en) 2005-03-14 2008-10-14 Arm Limited Data processing apparatus and method for performing floating point addition
US7668892B2 (en) 2005-08-25 2010-02-23 Arm Limited Data processing apparatus and method for normalizing a data value
US7912887B2 (en) * 2006-05-10 2011-03-22 Qualcomm Incorporated Mode-based multiply-add recoding for denormal operands
US8078660B2 (en) 2007-04-10 2011-12-13 The Board Of Regents, University Of Texas System Bridge fused multiply-adder circuit
CN101174200B (zh) * 2007-05-18 2010-09-08 清华大学 一种具有五级流水线结构的浮点乘加融合单元
US8106914B2 (en) * 2007-12-07 2012-01-31 Nvidia Corporation Fused multiply-add functional unit
CN100570552C (zh) * 2007-12-20 2009-12-16 清华大学 一种并行浮点乘加单元
US8239440B2 (en) 2008-03-28 2012-08-07 Oracle America, Inc. Processor which implements fused and unfused multiply-add instructions in a pipelined manner
US8495121B2 (en) 2008-11-20 2013-07-23 Advanced Micro Devices, Inc. Arithmetic processing device and methods thereof
US8489663B2 (en) 2009-06-05 2013-07-16 Advanced Micro Devices Decimal floating-point adder with leading zero anticipation

Also Published As

Publication number Publication date
US8965945B2 (en) 2015-02-24
CN102707921A (zh) 2012-10-03
JP2012174269A (ja) 2012-09-10
GB2488863B (en) 2017-12-06
CN102707921B (zh) 2017-06-30
GB2488863A (en) 2012-09-12
US20120215823A1 (en) 2012-08-23
GB201200822D0 (en) 2012-02-29

Similar Documents

Publication Publication Date Title
JP6001276B2 (ja) 浮動小数点加算を実行するための装置および方法
US9110713B2 (en) Microarchitecture for floating point fused multiply-add with exponent scaling
US8447800B2 (en) Mode-based multiply-add recoding for denormal operands
US6904446B2 (en) Floating point multiplier/accumulator with reduced latency and method thereof
US6360189B1 (en) Data processing apparatus and method for performing multiply-accumulate operations
TWI405126B (zh) 微處理器及其執行指令之方法
CN107608655B (zh) 微处理器中执行fma指令的方法和微处理器
US5993051A (en) Combined leading one and leading zero anticipator
JPH0544046B2 (ja)
US7668892B2 (en) Data processing apparatus and method for normalizing a data value
CN111752526A (zh) 浮点相加
Quinnell et al. Bridge floating-point fused multiply-add design
US7437400B2 (en) Data processing apparatus and method for performing floating point addition
US8620983B2 (en) Leading sign digit predictor for floating point near subtractor
US7373369B2 (en) Advanced execution of extended floating-point add operations in a narrow dataflow
US7356553B2 (en) Data processing apparatus and method for determining a processing path to perform a data processing operation on input data elements
Thiruvenkadam et al. Area-efficient dual-mode fused floating-point three-term adder
US7386580B2 (en) Data processing apparatus and method for computing an absolute difference between first and second data elements
He et al. Multiply-add fused float point unit with on-fly denormalized number processing
US20190121615A1 (en) Apparatus and method for subtracting significand values of floating-point operands
US20240004611A1 (en) Tininess detection
US20230305805A1 (en) Chained multiply accumulate using an unrounded product
US9519458B1 (en) Optimized fused-multiply-add method and system
KR20230015844A (ko) 극소 검출
Gopal A novel low power multi path double precision fused multiplier accumulator architecture

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150122

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160225

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160301

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160601

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160616

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160719

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160901

R150 Certificate of patent or registration of utility model

Ref document number: 6001276

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

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