JP6684713B2 - 融合積和演算を実行するための方法及びマイクロプロセッサ - Google Patents

融合積和演算を実行するための方法及びマイクロプロセッサ Download PDF

Info

Publication number
JP6684713B2
JP6684713B2 JP2016538834A JP2016538834A JP6684713B2 JP 6684713 B2 JP6684713 B2 JP 6684713B2 JP 2016538834 A JP2016538834 A JP 2016538834A JP 2016538834 A JP2016538834 A JP 2016538834A JP 6684713 B2 JP6684713 B2 JP 6684713B2
Authority
JP
Japan
Prior art keywords
sum
product
unrounded
result
rounding
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
JP2016538834A
Other languages
English (en)
Other versions
JP2016535360A (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 JP2016535360A publication Critical patent/JP2016535360A/ja
Application granted granted Critical
Publication of JP6684713B2 publication Critical patent/JP6684713B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • 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/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49905Exception handling
    • G06F7/4991Overflow or underflow
    • G06F7/49915Mantissa overflow or underflow in handling floating-point numbers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/499Denomination or exception handling, e.g. rounding or overflow
    • G06F7/49942Significance control
    • G06F7/49947Rounding
    • G06F7/49957Implementation of IEEE-754 Standard
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/22Microcontrol or microprogram arrangements
    • G06F9/223Execution means for microinstructions irrespective of the microinstruction function, e.g. decoding of microinstructions and nanoinstructions; timing of microinstructions; programmable logic arrays; delays and fan-out problems
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/3017Runtime instruction translation, e.g. macros
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • 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

Description

関連出願
本出願は、2014年7月2日に申請され「Non−Atomic Split−Path Fused Multiply−Accumulate with Rounding cache」と題された米国仮特許出願第62/020,246号及び2015年6月10日に申請され「Non−Atomic Temporally−Split Fused Multiply−Accumulate Apparatus and Operation Using a Calculation Control Indicator Cache and Providing a Split−Path Heuristic for Performing a Fused FMA Operation and Generating a Standard Format Intermediate Result」と題された米国仮特許出願第62/173,808号の利益を主張するものであり、上記出願の双方が本明細書において参照により援用される。
本出願は、さらに、すべて2015年6月24日に申請された下記の関連出願の優先権を主張し、参照により援用する:「Temporally Split Fused Multiply−Accumulate Operation」と題された米国特許出願第14/748,870号、「Calculation Control Indicator Cache」と題された米国特許出願第14/748,924号、「Calculation Control Indicator Cache」と題された米国特許出願第14/748,956号、「Standard Format Intermediate Result」と題された米国特許出願第14/749,002号、「Split−Path Heuristic for Performing a Fused FMA Operation」と題された米国特許出願第14/749,050号、「Subdivision of a fused compound arithmetic operation」と題された米国特許出願第14/749,088号、及び「Non−atomic Split−Path Fused Multiply−Accumulate」と題された米国特許出願第14/748,817号。
本出願は、算術演算を実行するためのマイクロプロセッサ設計、より具体的には、融合FMA演算に関する。
現代的なコンピュータの設計では、融合浮動小数点積和(FMA)計算は、少なくとも1990年頃と早くから大きな商業的な関心を集めた及び学術研究の一分野であった。融合FMA計算は、±A*B±Cの形式の算術演算であり、これにおいて、A、B、及びCは、浮動小数点入力オペランド(それぞれ、被乗数、乗数、及びアキュムレータ)であり、CがAとBとの積に累算される前に丸めは行われない。記法±A*B±Cは、限定はしないが、(a)A*B+C、(b)A*B−C、(c)−A*B+C、(d)−A*B−C、(e)A*B(すなわち、Cは0に設定される)、及び(f)A+C(すなわち、Bは1.0に設定される)を含む。
1990年頃にIBMのRISC System/6000は、この算術機能の初期の商業的実装をアトミック、すなわち、不可分計算として提供した。その後の設計で、FMA計算を最適化した。
その2004年の論文「Floating−Point Multiply−Add−Fused with Reduced Latency」において、著者のTomas Lang及びJavier D. Bruguera(「Langら」)は、最適化されたFMA設計に関係するいくつかの重要な態様を教示しており、これには、指数差及びアキュムレータ・シフト/アライン量の事前計算と、乗算アレイと並列のアキュムレータのアライメントと、必要時の2の補数アキュムレータの使用と、Sum&Carryベクトルの条件付き反転と、最終加算/丸めモジュールの前のSum&Carryベクトルの正規化と、正規化シフトとのLZA/LOAの重複演算(overlapping operation)と、桁上げ、丸め、ガード、及びスティッキー・ビットの別個計算と、統合加算/丸めモジュール(unified add/round module)における1m幅(ここで、mはいくつかあるオペランドのうちの1つのオペランドの仮数の幅である)を有するデュアル和加算器(dual sum adder)の使用とを含む。
その2005年の論文「Floating−Point Fused Multiply−Add: Reduced Latency for Floating−Point Addition」において、著者のTomas Lang及びJavier D. Bruguera(「LangらII」)は、アライメントを正規化ケースから分離する分割(又は二重)データ経路の使用を教示しており、これにおいて、「近接」データ経路(close data path)は、{2,1,0,−1}の間の指数差での実効減算に使用され(詳細な説明においてさらに発展させ、著しく改良された概念)、「遠隔」データ経路(far data path)は、残りすべてのケースに対して使用された。LangらIIは、さらに、乗算アレイの桁上げ保存出力に対する遠隔データ経路内のデュアル・アライメント・シフターと近接データ経路内の非常に制限されたアライメント・シフトとの使用を教示した。
2004年の論文「Multiple Path IEEE Floating−Point Fused Multiply−Add」では、著者のPeter−Michael Seidel(「Seidel」)は、FMA設計への他の機能強化が、複数の並列計算経路を考慮することによって実現され得ることを教示した。Seidelは、さらに、使用されていない経路上のゲートの非活性化と、指数差及び実効演算からの複数の計算経路の決定と、2つの区別できる計算経路であって、一方はマス・キャンセル(mass cancellation)が生じ得る小さい指数差に対するものであり、もう一方は他のすべてのケースに対するものである、計算経路の使用と、実効減算との小さな指数差に対応するケースについての、大きな積計算へのアキュムレータ値の挿入とを教示した。
広範なメディア配信及びインターネット・コンテンツ・アクセスを提供する個人用ポータブル・コンピューティング・デバイスの今日の遍在は、より安価に生産でき、消費電力及びエネルギーが著しく少ない、且つ命令の結果のより高いスループットを可能にするFMAロジックを設計するなおいっそうの努力を要求する。
FMA演算を実行する支配的なアプローチは、統合積和ユニットを使用して、結果の丸めを含む、FMA演算全体を実行することを伴う。大半の学術的な提案及び商業的な実装では、一般的に、2つの数を乗算し、丸められていない積を第3のオペランド、加数又はアキュムレータに加算し、その結果を丸める能力を有するモノリシックな、又はアトミックな機能ユニットを記述する。
代替的アプローチでは、従来の乗算ユニットを使用して、A*Bサブ演算を実行し、次いで、従来の加算ユニットを使用して、CをAとBとの積に累算する。しかし、この従来の分割ユニット・アプローチでは、同じユニット内のAとBとの部分積とともにCを累算することによって得られる可能性のある速度及び性能の向上を犠牲にする。従来の分割ユニット・アプローチは、2つの丸め演算も伴う。AとBとの積が丸められ、次いで、AとBとの積へのCの累算が丸められる。したがって、従来の分割ユニット・アプローチは、ときには、統合アプローチと異なる、より精度の低い結果をもたらす。また、丸めを2回行う演算であるため、従来の分割ユニット・アプローチは、「融合」FMA演算を実行することができず、浮動小数点算に対するIEEE754技術規格に適合しない。
FMAハードウェアは、複数のコンピューティング目的に使用され、IEEE754への適合を可能にし得るので、コンピュータ設計者は、高い頻度で、現代的な製品において以前の乗算及び加算機能ユニットをアトミックFMA実行ユニットで丸ごと置き換えようとする。しかし、このアプローチには複数の不利益がある。
第1に、FMAハードウェアの実装コストは、一般的に、別個の乗算及び加算機能ユニットよりも高くなり、また実装も複雑になる。第2に、単純な加算又は乗算を実行したときに、FMAハードウェアを通るときの待ち時間が、別個の加算又は乗算機能ユニットよりも長くなり、また一般的に、より多くの電力を消費する。第3に、乗算及び加算機能を組み合わせて1つの機能ユニットにすると、スーパースカラー・コンピュータ・プロセッサ設計では、算術命令がディスパッチされ得る利用可能なポートの数を減らすことになり、それにより、コンピュータがソース・コード、又はマシン・レベルのソフトウェアにおける並列性を利用する能力を減じる。
この第3の不利益は、スタンドアロンの加算器機能ユニットなどの、より多くの機能ユニットを加えることによって対処できるが、これは実装コストをさらに押し上げる。本質的に、追加の加算器は(たとえば)、アトミックなFMAの能力を提供する一方で、許容可能な命令レベル並列度(ILP)を維持する価格となる。このことは、次いで、全体的な実装サイズの増加並びに寄生容量及び抵抗の増加の原因となる。半導体製造技術はより小さい形状に向かいつつあるので、この寄生容量及び抵抗は、算術計算のタイミング遅延又は待ち時間のより大きい原因となる。このタイミング遅延は、ときには、「長いワイヤ」に起因する遅延としてモデル化される。そのため、アトミックなFMA実装によるILPの縮小を補償するために別個の機能ユニットを追加することは、必要なダイ・スペース、電力消費量、及び算術計算の待ち時間に関するメリットの縮小をもたらす。
結果として、最良の提案及び実装は、一般的に(常にというわけではないが)、正しい算術結果(IEEE丸め及び他の仕様に関して)をもたらし、ときには、より高い命令スループットを発揮し、著しく多いハードウェア回路を必要とすることによって実装のコストを増加させ、より複雑なFMAハードウェア上で単純な乗算又は加算計算を実行するための電力消費量を増やす。
現代的なFMA設計の組み合わされた目標は、不完全に果たされたままである。
一態様において、マイクロプロセッサにおいて形式±A*B±Cの融合積和演算(fused multiply-accumulate operation)を実行するための方法が提供され、A、B、及びCは入力オペランドであり、CがAとBとの積に累算される前に丸めは生じない。融合積和演算は、1つ以上の命令実行ユニットによって実行されるべき第1及び第2の積和サブ演算に分割される。第1の積和サブ演算では、AとBとの部分積をCと累算するか、又は代わってAとBとの部分積のみを累算するかと、そこから丸められていない非冗長和を生成するかとの選択が行われる。第1の積和サブ演算と第2の積和サブ演算との間に、丸められていない非冗長和がメモリに記憶され、1つ以上の命令実行ユニットが積和演算に無関係の他の演算を実行することを可能にする。代替的に、又はそれに加えて、丸められていない非冗長和は、第1の命令実行ユニットから第2の命令実行ユニットに転送される。
第2の積和サブ演算において、Cは、丸められていない非冗長和と、第1の積和サブ演算がCを累算することなく丸められていない非冗長和を作り出した場合に累算される。第2の積和サブ演算において、最終的な丸められた結果が、融合積和演算から生成される。
一実装において、1つ以上の命令実行ユニットは、第1の積和サブ演算を実行するように構成された乗算器と、第2の積和サブ演算を実行するように構成された加算器とを備える。
一実装において、複数の計算制御インジケータがメモリに記憶され、及び/又は第1の命令実行ユニットから第2の命令実行ユニットに転送される。計算制御インジケータは、第2の積和サブ演算におけるその後の計算がどのように進行すべきかを指示する。これらのインジケータのうちの1つは、Cとの累算が第1の積和サブ演算において生じたかを指示する。これらのインジケータのうちのいくつかは、算術的に正しい丸められた結果が丸められていない非冗長和から生成されることを可能にする。
メモリは、1つ以上の命令実行ユニットの外部にあり、また共有される。メモリは、丸められていない非冗長和を記憶するための、リオーダ・バッファなどの、結果ストアと、第2の積和サブ演算におけるその後の計算がどのように進行すべきかを指示する複数の計算制御インジケータを記憶する、結果ストアと区別できるアソシアティブ・キャッシュなどの、計算制御インジケータ・ストアとを備える。結果ストアは、結果バスに結合され、結果バスは1つ以上の命令実行ユニットに共通である。計算制御インジケータ・ストアは、結果バスに結合されず、第1の又は第2の積和サブ演算を実行するように構成された実行ユニットによってのみ共有される。
前述の構成は、積和演算が2つの時間的に区別できるサブ演算に分割されることを可能にする。命令実行ユニットは、第1の積和サブ演算の実行と第2の積和サブ演算の実行との間に、積和演算に無関係の他の演算を実行することができる。
別の態様では、上で説明されている方法を実装するためにマイクロプロセッサが用意される。マイクロプロセッサは、融合積和演算の第1及び第2の積和サブ演算を実行するように構成された1つ以上の命令実行ユニットを備える。第1の積和サブ演算の間、AとBとの部分積とCとの累算又はAとBとの部分積のみの累算の間で選択が行われ、その選択に従って、丸められていない非冗長和が生成される。第2の積和サブ演算の間、Cは、条件付きで、第1の積和サブ演算がCを累算することなく丸められていない非冗長和を作り出した場合に、丸められていない非冗長和と累算される。最後に、融合積和演算の完全な丸められた結果が、Cと条件付き累算された丸められていない非冗長和から生成される。
一実装において、マイクロプロセッサは、第1の積和サブ演算によって生成された丸められていない非冗長和を記憶するための、1つ以上の命令実行ユニットの外部のメモリをさらに備え、該メモリは、第2の積和サブ演算が実行中になる(in play)まで無期限に丸められていない非冗長和を記憶するように構成され、これにより、1つ以上の命令実行ユニットが、第1の積和サブ演算と第2の積和サブ演算との間に、積和演算に無関係の他の演算を実行することを可能にする。
別の態様では、マイクロプロセッサにおいて形式±A*B±Cの融合積和演算を実行するための方法が提供され、ここで、A、B、及びCは入力オペランドである。第1の実行ユニットは、少なくともAとBとの積を計算するように選択される。計算の丸められていない非冗長中間結果ベクトルが、複数の実行ユニットの間で共有される共有メモリに保存され、且つ/或いは第1の実行ユニットから第2の実行ユニットに転送される。第2の実行ユニットは、共有メモリから丸められていない非冗長中間結果ベクトルを受け取り、±A*B±Cの最終的な丸められた結果を生成するように選択される。最後に、±A*B±Cの最終的な丸められた結果が保存される。
一実装において、第1の実行ユニットは、第2の実行ユニットにおけるその後の計算がどのように進行すべきかを指示する1つ以上の計算制御インジケータを生成する。第1の実行ユニットは、少なくともAとBとの積の計算及び丸められていない非冗長中間結果ベクトルの生成に付随的に(concomitantly)計算制御インジケータを生成する。この後、第2の実行ユニットは、メモリから1つ以上の計算制御インジケータを受け取り、丸められていない非冗長中間結果ベクトル及び計算制御インジケータを使用して最終的な丸められた結果を生成する。
別の実装では、マイクロプロセッサは、少なくともAとBとの積についての第1の実行ユニットの計算から1つ以上の丸めインジケータを生成し、1つ以上の丸めインジケータを共有メモリに保存する。この後、第2の実行ユニットは、メモリから1つ以上の丸めインジケータを受け取り、丸められていない非冗長中間結果ベクトル及び1つ以上の丸めインジケータを使用して最終的な丸められた結果を生成する。
別の態様では、形式±A*B±Cの融合積和演算を実行するための方法が提供され、ここで、A、B、及びCは入力オペランドである。この方法は、少なくともAとBとの積を計算し、丸められていない非冗長中間結果ベクトルを生成するように第1の実行ユニットを選択するステップと、積和サブ演算のその後の計算がどのように進行すべきかを指示するための計算制御インジケータを保存し、及び/又は転送するステップと、中間結果ベクトル及び計算制御インジケータを受け取るように第2の実行ユニットを選択するステップと、計算制御インジケータに従って±A*B±Cの最終的な丸められた結果を生成するステップとを含む。
一実装において、計算制御インジケータは、第1の実行ユニットがCをAとBとの積に累算したかの指示を含む。別の実装では、計算制御インジケータは、中間結果ベクトルから算術的に正しい丸められた結果を生成するためのインジケータを含む。
一態様において、中間結果ベクトルを生成し、複数の計算制御インジケータを付随的に生成するように動作可能である命令実行ユニットを備えるマイクロプロセッサが提供される。計算制御インジケータは、中間結果ベクトルから最終結果を生成するためのその後の計算がどのように進行すべきかを指示し、これらのインジケータのうちの少なくとも一部は、中間結果ベクトルの計算及び/又は生成から、また計算及び/又は生成の間に導出される。マイクロプロセッサは、中間結果ベクトル及び複数の計算制御インジケータを記憶する、命令実行ユニットの外部にある記憶装置をさらに備える。
一実装において、命令実行ユニットは、3つ以上のオペランド入力を有して構成される算術処理ユニットである。さらに、中間結果ベクトルは、複合算術演算の第1の算術演算の、オペランド入力のうちの少なくとも2つへの適用から生成される。複数の計算制御インジケータは、複合算術演算の第2の算術演算子を使用して、複合算術演算の第2の算術演算がどのように進行すべきかを指示する。
一実装において、複合算術演算は、順次算術演算である。より具体的な一実装において、第1及び第2の算術演算子は、加算、減算、乗算、及び除算からなる群から選択される、基本算術演算子である。なおいっそう具体的な一実装において、複合算術演算は、積和演算であり、第1の算術演算は、少なくとも、被乗数オペランドと乗数オペランドとの乗算であり、第2の算術演算は、被乗数オペランドと乗数オペランドとの積への累算オペランドの累算である。
一実装において、計算制御インジケータから離されていると考えられる、中間結果ベクトルは、複合算術演算の算術的に正しい表現を矛盾なく生成するために必要であるよりも少ないビットで表される。その一方で、複数の計算制御インジケータと組み合わされた、中間結果ベクトルは、複合算術演算の算術的に正しい表現を生成するために十分な情報を提供する。複合算術演算の算術的に正しい表現の定義は、有効桁においてターゲット・データ・サイズに低減された複合算術演算の無限精度計算のその結果によって生成されるであろう表現から区別不能なものである。
たとえば、中間結果ベクトルは、第1の算術演算の結果の最上位ビットからなる丸められていない切り捨てられた値であるものとしてよい。最下位ビットを切除すると、その結果、複合算術演算の正しく丸められた最終結果を作り出す上で本質的であり得る情報が失われる。この実装では、最下位ビットは、1つ以上の計算制御インジケータ−より具体的には、丸め制御インジケータ−に圧縮され、これは、中間結果ベクトルから算術的に正しい丸められた結果を生成するために十分な情報を提供する。
一実装において、記憶装置は、汎用記憶装置と計算制御インジケータ記憶装置とを備える。この2つの記憶装置は、汎用記憶装置が、命令結果を記憶するためにマイクロプロセッサの命令セットの大半の命令によってアクセス可能であるが、計算制御インジケータ記憶装置は、計算制御インジケータを記憶し又はロードするように動作可能な命令のみにアクセス可能であるという点で、区別可能である。
さらに、マイクロプロセッサは、結果バスと、結果バスとは別個であり区別できるデータ経路とを備える。結果バスは、命令実行ユニットから結果を汎用記憶装置に伝達する。データ経路は、命令実行ユニットと計算制御インジケータ記憶装置との間に延びて、計算制御インジケータを計算制御インジケータ記憶装置に記憶し、及び計算制御インジケータ記憶装置からロードすることを可能にする。
一実装において、計算制御インジケータは、複合算術演算のどれくらいが中間結果ベクトルを生成する際に完了しているかに関する情報を提供する。別の実装では、計算制御インジケータは、第1の算術演算がアンダーフロー状態又はオーバーフロー状態をもたらしたかに関する情報を提供する。
別の態様では、マイクロプロセッサにおいて算術演算を実行する方法が提供される。この方法は、命令実行ユニットを使用して、中間結果ベクトルと、中間結果ベクトルから最終結果を生成するためのその後の計算がどのように進行すべきかを指示する複数の計算制御インジケータとを生成するステップを含む。この方法は、中間結果ベクトル及び複数の計算制御インジケータを命令実行ユニットの外部のメモリに記憶するステップをさらに含む。
一実装において、この方法は、中間結果ベクトル及び複数の計算制御インジケータをメモリからロードするステップと、最終結果を生成するために計算制御インジケータに従って中間結果ベクトル上で計算を実行するステップとをさらに含む。
一実装において、算術演算は、複合又は順次算術演算である。別の実装では、算術演算は、少なくとも1つの乗算と少なくとも1つの累算とを伴う融合演算である。より具体的な一実装において、算術演算は、オペランドが被乗数と乗数とアキュムレータとを含む融合浮動小数点積和演算であり、中間結果ベクトルは、被乗数と乗数との少なくとも部分積の和である。
一実装において、この方法は、複合算術演算を、第1の算術オペランドを使用する第1の算術演算と第2の算術オペランドを使用する第2の算術演算とに分割するステップをさらに含む。計算制御インジケータは、第2の算術演算がどのように進行すべきかを指示し、複合算術演算のどれくらいが中間結果ベクトルを生成する際に完了しているかに関する情報を提供し、且つ/或いは第1の算術演算がアンダーフロー状態又はオーバーフロー状態をもたらしたかに関する情報を提供し得る。
一実装において、中間結果ベクトルは、初期結果(2m以上のビットを有し得る)よりも少ないビット(たとえば、mビット)を有する。したがって、計算制御インジケータから離されていると考えられるときに、中間結果ベクトルは、複合算術演算の算術的に正しい表現を矛盾なく生成するために必要であるよりも少ない数のビットで表される。しかしながら、複数の計算制御インジケータと組み合わされた、中間結果ベクトルは、複合算術演算の算術的に正しい表現を生成するために十分な情報を提供する。
別の態様では、丸められていない結果と丸められていない結果を丸めるための複数の丸めインジケータとを生成するように構成された複数の命令実行ユニットを備えるマイクロプロセッサが提供される。マイクロプロセッサは、複数の丸めインジケータを記憶するように構成された、命令実行ユニットの外部にある丸めキャッシュをさらに備え、これは、アソシアティブ・キャッシュであってもよい。
一実装において、マイクロプロセッサは、複数の命令実行ユニットによって生成される丸められていない結果を記憶するための、丸めキャッシュから区別できる、汎用メモリ・ストアをさらに備える。より具体的な一実装において、マイクロプロセッサは、丸めビット転送経路と、丸めビット転送経路から区別できる結果バスとをさらに備え、命令実行ユニットは、丸められていない結果を結果バスに出力し、丸めビット転送経路上で丸めインジケータを丸めキャッシュに出力するように構成される。
一実装において、複数の命令実行ユニットのうちの少なくとも1つは、第1の型の命令に応答して丸められていない結果を、第2の型の命令に応答して丸められた結果を生成するように構成される。別の実装では、マイクロプロセッサは、(a)第1の命令実行ユニットによって生成された丸められていない結果を第2の命令実行ユニットに供給し、(b)丸めキャッシュからの複数の丸めインジケータのうちの少なくとも1つを第2の命令実行ユニットに供給するように構成される。第2の命令実行ユニットは、少なくとも丸められていない結果オペランドに数学演算を実行して、複数の丸めインジケータのうち供給された少なくとも1つを使用して最終的な丸められた結果を生成するように構成される。
別の態様では、中間結果ベクトルと、中間結果ベクトルから最終結果を生成するためのその後の計算がどのように進行すべきかを指示する複数の計算制御インジケータとを生成するように動作可能な第1の命令実行ユニットを備えるマイクロプロセッサが実現される。マイクロプロセッサは、中間結果ベクトル及び複数の計算制御インジケータを第2の命令実行ユニットに転送するように構成された、命令実行ユニットの外部にある転送バスをさらに備える。一実装において、第1の命令実行ユニットは、第1の型の命令に応答して丸められていない結果を、第2の型の命令に応答して丸められた結果を生成するように構成される。
別の態様では、マイクロプロセッサにおいて丸め演算を実行するための方法が提供される。第1の命令実行ユニットは、丸められていない結果を生成する。次いで、少なくとも1つの丸めインジケータが、第1の命令実行ユニットの外部の丸めキャッシュ内に記憶される。第2の命令実行ユニットは、その後、丸められていない結果及び少なくとも1つの丸めインジケータを丸めキャッシュから読み出し、これらの入力と、場合により1つ以上の他のオペランドとから、最終的な丸められた結果を生成する。
一実装において、この方法は、丸められていない結果を、丸めキャッシュから区別できる汎用記憶装置内に記憶するステップをさらに含む。より具体的な一実装において、この方法は、複数の命令実行ユニットを汎用記憶装置に結合する結果バスとは別個であるデータ経路を通じて第1の命令ユニットから丸めキャッシュに1つの丸めインジケータを転送するステップをさらに含む。
別の態様では、マイクロプロセッサにおいて算術演算を実行する方法が提供される。第1の命令実行ユニットは、中間結果ベクトルと、中間結果ベクトルから最終結果を生成するためのその後の計算がどのように進行すべきかを指示する複数の計算制御インジケータとを生成する。中間結果ベクトル及び複数の計算制御インジケータは、次いで、第2の命令実行ユニットに転送される。次いで、第2の命令実行ユニットは、計算制御インジケータに従って最終結果を生成し、算術演算を完了する。
一実装において、算術演算は、複合算術演算である。より具体的な一実装において、複合算術演算は、融合型であり、融合型は最終結果を生成するために単一の丸めのみが許される型である。なおいっそう具体的な一実装において、算術演算は、融合積和演算であり、中間結果ベクトルは、積和演算の一部分の丸められていない結果であり、計算制御インジケータは、積和演算の最終的な丸められた結果を生成するための丸めインジケータを含む。
一実装において、中間結果ベクトルの転送は、結果バスを介して行われ、計算制御文字の転送は、結果バスから区別できるデータ経路を介して行われる。
一態様において、命令パイプラインと、共有メモリと、命令パイプライン内の第1及び第2の算術処理ユニットとを備えるマイクロプロセッサが提供され、各々が共有メモリからオペランドを読み出し、結果を共有メモリに書き込む。第1の算術処理ユニットは、数学演算の第1の部分を実行して、数学演算の完全な最終結果ではない中間結果ベクトルを作り出す。第1の算術処理ユニットは、中間結果ベクトルから最終結果を生成するためのその後の計算がどのように進行すべきかを指示する複数の非アーキテクチャ計算制御インジケータを生成する。第2の算術処理ユニットは、計算制御インジケータに従って、数学演算の第2の部分を実行して、数学演算の完全な最終結果を生成する。
一実装において、数学演算の第1の部分は、2つの入力オペランドの少なくとも乗算を含む。さらなる実装において、数学演算の第1の部分は、第1の2つの入力オペランド及び第3のオペランドの値が1つ以上の所定条件のセットの少なくとも1つを満足する場合に、第3のオペランドとの累算をさらに含む。そうでない場合、数学演算の第2の部分のみが、第3のオペランドとの累算を含む。最低限、数学演算の第2の部分は、丸めサブ演算を含む。
より具体的な一実装において、数学演算は、積和演算であり、マイクロプロセッサは、アトミックな統合積和命令を少なくとも第1及び第2のマイクロ命令に変換するトランスレータ又はROMをさらに備える。さらに、第1のマイクロ命令の実行は、中間結果ベクトルを生成し、第2のマイクロ命令の実行は、中間結果ベクトルを使用して完全な最終結果を生成する。
なおいっそう具体的な一実装において、数学演算は、形式±A*B±Cの融合浮動小数点積和(FMA)演算であり、ここで、A、B、及びCは浮動小数点入力オペランドであり、CがAとBとの積に累算される前に丸めは生じない。
一実装において、中間結果ベクトルは、丸められていない値であり、完全な最終結果は、丸められた値である。さらに、計算制御インジケータは、第2の算術処理が中間結果ベクトルに数学演算の第2の部分を実行した後に正しく丸められた完全な最終結果を作り出すことを可能にするのに十分な情報を提供する丸めインジケータを含む。
一実装において、第1の算術処理ユニットは、中間結果ベクトルをレジスタに、計算制御インジケータを計算制御インジケータ・キャッシュに記憶し、第2の算術処理ユニットは、レジスタから中間結果ベクトルを、計算制御インジケータ・キャッシュから計算制御インジケータをロードする。別の実装では、マイクロプロセッサは、中間結果ベクトルを第2の算術処理ユニットに転送する。
別の態様では、マイクロプロセッサにおいて形式±A*B±Cの融合積和演算を実行するための方法が提供され、A、B、及びCは入力オペランドである。オペランドAとBとの部分積の計算が行われる。丸められていない結果は、(a)オペランドAとBとの部分積か、又は(b)オペランドAとBとの部分積とオペランドCかの、いずれかの第1の累算から生成される。第1の累算が、オペランドCを含む場合、この累算の前に、乗数ユニット部分積総和ツリー内のオペランドCの選択的に補数をとられた仮数をアライメントする。
1つ以上の最下位ビットが、丸められていない結果から除外されて、丸められていない中間結果ベクトルを生成する。一実装において、丸められていない中間結果ベクトルは、融合積和演算のターゲット結果の仮数のビット数に等しいビット数を有する仮数を含む、浮動小数点数についての標準IEEE形式で表される。
より具体的な一実装において、丸められていない中間結果ベクトルは、中間仮数結果と、中間結果指数(IRExp)とを含み、IRExpは、Cの指数とオペランドA及びBの指数値の和の関数とのうち大きい方の正規化された表現である。丸められていない中間結果ベクトルは、第1の累算がオペランドCを含んでいたかと、積和演算が実効減算であるかと、保留中である循環桁上げがないかとに応じて生成される中間符号インジケータをさらに含む。中間符号インジケータは、第1の累算がオペランドCを含んでいたかと、積和演算が実効減算であるかと、保留中である循環桁上げがないかとに応じて生成される。
一実装において、この方法は、循環桁上げインジケータ(E)を生成するステップをさらに含む。第1の累算がオペランドCを含んでいて、丸められていない中間結果ベクトルが正であり、累算が実効減算である場合、循環桁上げ補正が保留中であることを指示するEに対する値が生成される。別の実装では、この方法は、IRExpが表現可能な又は望ましい指数値の範囲を上回るか又は下回るかを指示するように中間アンダーフロー(U)指示及び中間オーバーフロー(O)指示を生成するステップをさらに含む。
丸められていない結果の除外される最下位ビットは、1つ以上の丸めインジケータに低減される。一実装において、1つ以上の丸めインジケータは、ガード(G)、ラウンド(R)、及び/又はスティッキー(S)ビットを含む。別の実装では、丸めインジケータのうちの1つ(Z)は、Cとの累算が第1の累算において実行されたかを指示する。さらに別の実装において、丸めインジケータのうちの2つは、オーバーフロー(O)及びアンダーフロー(U)インジケータである。さらに別の実装において、丸めインジケータのうちの1つ(E)は、循環桁上げが保留中であるかを指示する。
一実装において、この方法は、1つ以上の丸めインジケータを丸めキャッシュに記憶するステップをさらに含む。別の実装では、この方法は、丸められていない中間結果ベクトルを、複数の命令実行ユニットによってアクセス可能な共有記憶装置内に記憶するステップをさらに含む。
第1の累算が、オペランドCを含んでいなかった場合、オペランドCと丸められていない中間結果ベクトルとの第2の累算が実行される。積和演算の最終的な丸められた結果が、丸めインジケータを使用して生成される。
別の態様では、マイクロプロセッサにおいて、複数の算術処理ユニットを使用して複数のオペランドに複合算術演算を実行する方法が提供される。第1の算術ユニットは、複合算術演算の少なくとも第1の算術演算を実行することから、丸められていない非冗長初期結果を生成する。第1の算術ユニットは、次いで、丸められていない非冗長初期結果から記憶形式中間結果を生成する。記憶形式中間結果は、丸められていない非冗長初期結果の複数の最上位ビット(MSB)を含み、丸められていない非冗長初期結果の複数の最下位ビット(LSB)を除外する。記憶形式中間結果は、第2の算術演算ユニットが記憶形式中間結果から最終的な丸められた結果を生成することを可能にするための複数の丸めインジケータをさらに含む。第2の算術演算ユニットは、後に、複合算術演算を完了し、記憶形式中間結果から最終的な丸められた結果を生成する。
一態様において、マイクロプロセッサにおいて形式±A*B±Cの融合積和演算を実行するための方法が提供され、ここで、A、B、及びCは入力オペランドである。A、B、及び/又はCの値が、AとBとの部分積とCとの連帯累算を実行するための十分条件を満たすかを検出する評価が行われる。満たす場合、Cの連帯累算が、AとBとの部分積と行われ、連帯累算の結果は、丸められる。満たさない場合、AとBとの部分積の一次累算が行われる。これは、一次累算の丸められていない非冗長結果を生成する。次いで、丸められていない結果は、丸められていない非冗長結果の1つ以上の最下位ビットを除外する丸められていない非冗長中間結果ベクトルを生成するように、切り捨てられる。次いで、二次累算が実行され、丸められていない非冗長中間結果ベクトルにCを加算又は減算する。最後に、二次累算の結果が、丸められる。
一実装において、切り捨ては、融合積和演算のためのターゲット・データ形式の仮数幅に等しい仮数幅を有する丸められていない非冗長中間結果ベクトルを生成するのに十分である。
一実装において、A、B、及び/又はCが、AとBとの部分積とCとの連帯累算を実行するための十分条件を満たす場合、AとBの仮数の部分積とCの仮数とのアライメントを行うためにExpDeltaが使用される。
一実装において、A、B、及び/又はCが、AとBとの部分積とCとの連帯累算を実行するための十分条件を満たさない場合、除外された最下位ビットは、1つ以上の丸めインジケータのセットに低減される。丸めインジケータは、後に、二次累算の結果の丸めに使用される。
別の態様では、形式±A*B±Cの融合積和演算を実行するように動作可能な1つ以上の命令実行ユニットを備えるマイクロプロセッサが提供され、ここで、A、B、及びCは入力オペランドである。命令実行ユニットのうちの1つ又は複数の中で、A、B、及び/又はCの値がAとBとの部分積とCとの連帯累算を実行するための十分条件を満たすかを指示するための、オペランド分析ロジックが提供される。さらに、制御ロジックが提供され、制御ロジックは、十分条件が満たされた場合に、1つ以上の命令実行ユニットに、AとBとの部分積とCとの連帯累算を実行させ、連帯累算の結果を丸めさせる。十分条件が満たされていない場合、制御ロジックは、1つ以上の命令実行ユニットに、AとBとの部分積の一次累算を実行させ、一次累算の丸められていない結果を生成させ、丸められていない結果の1つ以上の最下位ビットを除外する丸められていない中間結果ベクトルを生成するように、丸められていない結果を切り捨てさせ、丸められていない中間結果ベクトルへのCの二次累算を実行させ、二次累算の結果を丸めさせる。
一実装において、A、B、及び/又はCが、AとBとの部分積とCとの連帯累算を実行するための十分条件を満たさない場合、制御ロジックは、1つ以上の命令実行ユニットに、除外された1つ以上の最下位ビットを、二次累算の結果の丸めにおいて使用される1つ以上の丸めインジケータのセットに低減させる。さらに、制御ロジックは、1つ以上の丸めインジケータを、二次累算の結果の丸めにおける使用のために、除外された1つ以上の最下位ビットから生成させる。
一実装において、マイクロプロセッサは、丸められていない中間結果ベクトルを記憶するための第1の共有命令実行ユニット記憶装置と、複数の丸めインジケータを記憶するための第2の共有命令実行ユニット記憶装置とをさらに備える。
別の態様では、マイクロプロセッサにおいて形式±A*B±Cの融合積和演算を実行するための方法が提供され、ここで、A、B、及びCは入力オペランドである。この方法は、A、B、及び/又はCの値が、AとBとの部分積とCとの連帯累算を実行するための十分条件を満たすかを検出するステップを含む。満たす場合、AとBとの部分積とCの連帯累算が行われ、その後、連帯累算の結果の丸めが行われる。満たさない場合、AとBとの部分積の一次累算が行われて、丸められていない中間結果ベクトルと、一次累算についての1つ以上の丸めインジケータとを生成する。その後、丸められていない中間結果ベクトルへのCの二次累算が行われ、次いで、1つ以上の丸めインジケータを使用して二次累算の結果の丸めが行われる。
一実装において、AとBとの積の絶対値がCの絶対値よりも実質的に大きい場合に、AとBとの部分積とCとの連帯累算を実行するための十分条件が存在する。
一実装において、この方法は、AとBとの積の絶対値がCの絶対値よりも実質的に大きいかを、A及びBの指数値の和からCの指数値を引く関数として指数差ExpDeltaを計算することによって評価するステップをさらに含む。指数差ExpDeltaの計算は、A及びBの指数値の和からCの指数値を引いた値から、指数バイアス値をさらに減算してもよい。したがって、たとえば、AとBとの部分積とCとの連帯累算を実行するための十分条件は、ExpDelta≧−2の場合に存在し得る。
別の態様では、形式±A*B±Cの融合積和演算を実行するように動作可能な1つ以上の命令実行ユニットを備えるマイクロプロセッサが提供され、ここで、A、B、及びCは入力オペランドである。命令実行ユニットのうちの1つ又は複数の中で、A、B、及び/又はCの値がAとBとの部分積とCとの連帯累算を実行するための十分条件を満たすかどうかを指示するための、オペランド分析ロジックが提供される。制御ロジックが提供され、制御ロジックは、十分条件が満たされた場合に、命令実行ユニット(複数可)に、AとBとの部分積とCとの連帯累算を実行させ、連帯累算の結果を丸めさせる。満たさない場合、制御ロジックは、命令実行ユニット(複数可)に、AとBとの部分積の一次累算を実行して、丸められていない中間結果ベクトルと1つ以上の丸めインジケータとを生成させ、その後、丸められていない中間結果ベクトルへのCの二次累算を実行させ、最後に、1つ以上の丸めインジケータを使用して二次累算の結果を丸めさせる。
一実装において、融合積和演算のためのターゲット・データ形式の仮数幅と同じ仮数幅を有するように、丸められていない中間結果ベクトルが生成される。
一実装において、AとBとの部分積とCとの連帯累算を実行するための十分条件は、融合積和演算を実行することにおけるマス・キャンセルの潜在性である。マス・キャンセルは、アキュムレータCと総和されるときにAとBとの積の最上位ビットの1つ以上を否定することとして定義され得る。
別の実装では、AとBとの部分積とCとの連帯累算を実行するための十分条件は、融合積和演算が実効減算を作り出し、実効減算は、AとBとの積へのCの加算又は減算が(a)AとBとの積の絶対値の大きさ又は(b)Cの絶対値の大きさのうち大きい方よりも小さい絶対値の大きさを有する結果Rをもたらすであろう場合に指示されること、及び、A及びBの指数値の和から、任意の指数バイアス値を引き、Cの指数値を引いた値が、X乃至Yの範囲内に入ることである。たとえば、Xは負の2で、Yは正の1とすることができる。
一態様では、マイクロプロセッサにおいて形式±A*B±Cの融合積和演算の実行の準備をするための方法が提供され、A、B、及びCは入力オペランドであり、CがAとBとの積に累算される前に丸めは生じない。融合積和演算を完了するために、第1及び第2の積和マイクロ命令が1つ以上の命令実行ユニットに発行される。第1の積和マイクロ命令は、丸められていない非冗長結果ベクトルを、(a)AとBとの部分積か、又は(b)AとBとの部分積とCかのうちの選択された1つの第1の累算から生成させる。第2の積和マイクロ命令は、第1の累算がCを含まなかった場合に、丸められていない非冗長結果ベクトルとCとの第2の累算の実行を引き起こす。第2の積和マイクロ命令は、さらに、最終的な丸められた結果を丸められていない非冗長結果ベクトルから生成させ、最終的な丸められた結果は、融合積和演算の完全な結果である。
一実装において、この方法は、Cとの第1の累算を実行するか又はCなしの第1の累算を実行するかを、A、B、及びCの値の間の1つ以上の関係に基づいて選択するステップをさらに含む。より具体的な一実装において、この方法は、Cとの第1の累算を実行するか又はCなしの第1の累算を実行するかを、AとBとの積とCとの累算の間の1つ以上の関係が実効減算を構成するであろうことに基づいて選択するステップをさらに含む。別のより具体的な実装において、この方法は、Cとの第1の累算を実行するか又はCなしの第1の累算を実行するかを、A、B、及びCの指数値の間の1つ以上の関係に基づいて選択するステップをさらに含む。なおいっそう具体的な一実装において、この方法は、A及びBの指数の和とCの指数との間の差を決定するステップを含む。A及びBの指数の和からCの指数を引き、任意の指数バイアスでさらに調整された値が、負の1より大きいか又は等しい場合、積和演算の累算部分を乗算ユニットにおいて実行する。A及びBの指数の和からCの指数を引いた値が、負の3より小さいか又は等しい場合、積和演算の累算部分は加算器ユニットにおいて実行される。
別の実装では、この方法は、融合積和演算の結果の絶対値が|A*B|と|C|とのうち大きい方よりも小さくなるかを事前に決定するステップを含む。もしそうであれば、A及びBの指数の和からCの指数を引いた値が、任意の指数バイアスを考慮した後、負の2より大きいか又は等しい場合、積和演算の累算部分は加算器ユニット内で実行され、次いで、積和演算の累算部分は乗算ユニット内で実行される。
別の実装では、この方法は、Cの指数によって表される値がA及びBの指数の和よりも著しく大きいかを決定する。任意の指数バイアスを考慮した後にCの指数がA及びBの指数の和よりも少なくとも8倍大きい場合、積和演算の累算部分が加算器ユニットにおいて実行される。さらに、任意の指数バイアスを考慮した後にCの指数がA及びBの指数の和よりも少なくとも4倍大きい場合、及び融合積和演算の結果の絶対値が|A*B|と|C|とのうち大きい方よりも小さくなる場合、積和演算の累算部分が乗算器ユニットにおいて実行される。
別の態様では、マイクロプロセッサにおいて形式±A*B±Cの融合積和命令を実行するための方法が提供され、ここで、A、B、及びCは入力オペランドである。この方法は、融合積和命令を第1及び第2のマイクロ命令に変換するステップを含む。第1のマイクロ命令は、命令実行ユニットに、積和演算の第1の部分の丸められていない中間結果ベクトルを生成するように命令する。第2のマイクロ命令は、命令実行ユニットに、丸められていない中間結果ベクトルを受け取り、それを使用して±A*B±Cの最終的な丸められた結果を生成するように命令する。マイクロプロセッサは、第1のマイクロ命令を第1の命令実行ユニットにディスパッチして丸められていない結果を生成する。マイクロプロセッサは、さらに、第2のマイクロ命令を第2の命令実行ユニットにディスパッチして丸められていない結果を受け取り、最終的な丸められた結果を生成する。最後に、±A*B±Cの最終的な丸められた結果が共有メモリに記憶される。
一実装において、融合積和命令は、融合浮動小数点積和命令であり、A、B、及びCは、各々が符号インジケータと仮数と指数とを有するオペランドであり、融合積和命令は、プリセットされた仮数幅を有するターゲット・データ形式を指定する。この実装において、第1のマイクロ命令は、ターゲット・データ形式のプリセットされた仮数幅に等しい仮数幅を有する丸められていない中間結果ベクトルを生成する。
一実装において、中間結果ベクトルは、転送バスを介して第1の命令実行ユニットから第2の命令実行ユニットの入力オペランド・ポートに転送される。代替的実装において、中間結果ベクトルは、汎用メモリに記憶される。より具体的な一実装において、中間結果ベクトルは、第1の命令実行ユニットから結果バスに出力され、結果バスを介して汎用メモリに転送される。
別の態様では、マイクロプロセッサにおいて融合複合算術演算を実行するための方法が提供される。この方法は、融合複合算術演算を実行するために、複数の命令実行ユニットによって実行されるべき、複数の個別のマイクロ命令を発行するステップを含む。第1の命令実行ユニットは、第1のマイクロ命令を実行して、融合複合算術演算の少なくとも第1の演算子を使用して丸められていない非冗長ベクトル結果を生成する。少なくとも第2の命令実行ユニットは、少なくとも第2のマイクロ命令を実行して、融合複合算術演算の任意の残りの演算子を使用して丸められていない非冗長ベクトル結果から最終的な丸められた結果を生成し、最終的な丸められた結果は、複合算術演算の完全な結果である。
一実装において、第2の命令実行ユニットは、第1の命令実行で第1のマイクロ命令を実行している間に無関係のマイクロ命令を実行し、無関係のマイクロ命令は融合複合算術演算の実行に無関係である。より具体的な一実装において、丸められていない非冗長ベクトル結果は、複数の命令ユニットによって共有される第1のメモリに記憶され、第2の命令実行ユニットは、丸められていない非冗長ベクトル結果が第1のメモリに記憶された後、第2の命令実行ユニットが第2のマイクロ命令を実行する前に、少なくとも1つの無関係のマイクロ命令を実行する。
一実装において、第1の命令実行ユニットは、第2の命令実行ユニットが最終的な丸められた結果を生成することを可能にする複数の丸めインジケータを生成する。丸めインジケータは、複数の命令ユニットによって共有される第2のメモリに記憶される。
代替的実装において、第1の命令実行ユニットは、丸められていない非冗長ベクトル結果及び丸めインジケータを第2の命令ユニットに転送する。
一態様において、形式±A*B±Cの融合積和演算を実行するように動作可能なマイクロプロセッサが提供され、A、B、及びCは入力オペランドである。マイクロプロセッサは、第1及び第2の実行ユニットと、A、B、及び/又はCの値がAとBとの部分積とCとの連帯累算を実行するための十分条件を満たすかを決定する入力オペランド・アナライザー回路とを備える。第1の命令実行ユニットは、AとBとを乗算し、A、B、及び/又はCの値がAとBとの部分積とCとの連帯累算を実行するための十分条件を満たすときに、AとBとの部分積にCを連帯的に(jointly)累算する。第2の命令実行ユニットは、A、B、及び/又はCの値がAとBとの部分積とCとの連帯累算を実行するための十分条件を満たさないときに、AとBとの積にCを別個に累算する。
一実装において、第1及び第2の命令実行ユニットは、それぞれ、乗算器及び加算器である。乗算器は、乗算命令を実行し、融合積和演算の少なくとも第1の部分を実行するように動作可能である。加算器は、加算命令及び減算命令を実行し、融合積和演算の少なくとも第2の部分を実行するように動作可能である。
一実装において、A、B、及びCは仮数を用いて表される。第1の命令実行ユニットは、3mビット未満の、より好ましくは2m+2ビット以下の幅の総和データ経路を、追加のmビット・スティッキー・コレクタと共に備え、mはA及びBの仮数を表すために使用されるビットの数を表す。
連帯累算のための1つの十分条件は、Cが、AとBとの積の大きさに対して、Cの最上位ビットをAとBとの部分積総和のための総和ツリー内に提供された最上位ビットの左にシフトすることなく総和ツリーの中でCがアライメントされることを可能にする大きさを有することである。
Cとの連帯累算のための別の十分条件は、Cの絶対値の大きさがマス・キャンセルの潜在性を作り出すほどAとBとの積の絶対値の大きさに十分近いことであり、マス・キャンセルは、Cと総和されるときにAとBとの積の最上位ビットの1つ以上をキャンセルすることを指す。
Cとの連帯累算のためのさらに別の十分条件は、第1及び第2の部分条件を含む。第1の部分条件は、A及びBの指数の和からCの指数を引き、任意の指数バイアス値でさらに調整された値が、負の2よりも大きいか又は等しいことである。第2の部分条件は、AとBとの積へのCの累算が実効減算をもたらし、これは、|R|が|A*B|又は|C|のうち大きい方よりも小さい場合に結果として生じることである。
別の態様では、マイクロプロセッサにおいて形式±A*B±Cの積和演算を実行するための方法が提供され、A、B、及びCは入力値である。A、B、及び/又はCの値が1つ以上の前提条件のセットの少なくとも1つを満足するかの決定が行われる。第1の命令実行ユニット内で、A及びBは一緒に乗算され、その部分積は、A、B、及び/又はCの値が連帯累算のための十分条件を満足する場合に選択的にCと累算される。第2の命令実行ユニット内で、Cは、A、B、及び/又はCの値が連帯累算のための十分条件を満足していない場合にAとBとの積に選択的に累算される。
一実装において、第1及び第2の命令実行ユニットは、それぞれ、乗算器及び加算器である。乗算器は、乗算命令を実行し、融合積和演算の少なくとも第1の部分を実行するように動作可能である。加算器は、加算命令及び減算命令を実行し、融合積和演算の少なくとも第2の部分を実行するように動作可能である。
別の態様では、形式±A*B±Cの融合積和演算を実行するように構成されているマイクロプロセッサが実現され、A、B、及びCは入力オペランドである。マイクロプロセッサは、第1及び第2の命令実行ユニットを備える。第1の命令実行ユニットは、AとBとの積を算出する乗算演算を実行するように構成されて動作可能であり、AとBとの積にCを累算する累算演算を選択的に実行するようにさらに動作可能である。第2の実行命令ユニットは、AとBとの積にCを累算するように構成され、動作可能である。第1の命令実行ユニット内で、入力オペランド・アナライザー回路は、A、B、及びCの値を分析して、第1の命令実行ユニットに乗算演算と累算演算とを連帯的に実行させるか、又は第1及び第2の命令実行ユニットに乗算演算と累算演算とを別個に実行させるかを決定するように構成される。制御ロジックは、第1の命令実行ユニットが第1の命令実行ユニットの中で乗算演算と累算演算とを連帯的に実行することを、入力オペランド・アナライザー回路がそのように決定したときに行わせ、第1及び第2の命令実行ユニットが乗算演算と累算演算とを別個に実行することを、入力オペランド・アナライザー回路がそのように決定したときに行わせるように構成される。
一実装において、第1の命令実行ユニットは、乗算ユニットであり、第2の命令実行ユニットは、加算器ユニットである。別の実装では、マイクロプロセッサは、第1の命令実行ユニットによって生成された積和演算の結果を記憶し、その結果を第2の命令実行ユニットにロードするための共有メモリをさらに備える。代替的実装において、マイクロプロセッサは、第1の命令実行ユニットによって生成された積和演算の結果を第2の命令実行ユニットに転送するための転送バスをさらに備える。
別の態様では、形式±A*B±Cの融合積和演算を実行するように動作可能なマイクロプロセッサが提供され、A、B、及びCは入力オペランドである。マイクロプロセッサは、第1及び第2の命令実行ユニットを備える。第1の命令実行ユニットは、AとBとの積を算出する乗算演算を実行するように構成され、AとBとの積にCを累算する累算演算を選択的に実行するようにさらに構成される。第2の実行命令ユニットは、AとBとの積にCを累算するように構成される。第1の命令実行ユニット内で、マイクロプロセッサは、A、B、及びCの値を分析して、第1の命令実行ユニットに乗算演算と累算演算とを連帯的に実行させるか、又は第1及び第2の命令実行ユニットに乗算演算と累算演算とを別個に実行させるかを決定するように構成された入力オペランド・アナライザー回路をさらに備える。マイクロプロセッサは、入力オペランド・アナライザー回路に応答して(a)第1の命令実行ユニットが第1の命令実行ユニットの中で乗算演算と累算演算とを連帯的に実行すること、又は(b)第1及び第2の命令実行ユニットが乗算演算と累算演算とを別個に実行することのいずれかを行わせるように構成された制御ロジックをさらに備える。
一実装において、第1の命令実行ユニットは、積和演算の少なくとも一部分を実行するときに丸められていない結果を生成し、通常の乗算演算を実行するときに丸められた結果を生成するように構成される。
別の実装では、第2の命令実行ユニットは、入力オペランドとして丸められていない結果を受け取り、積和演算の少なくとも一部分を実行するときに算術的に正しい丸められた結果を生成するために複数の丸めインジケータをさらに受け取り、通常の累算演算を実行するときに複数の丸めインジケータを受け取らないように構成される。
さらに別の実装において、マイクロプロセッサは、第1及び第2の命令実行ユニットによって共有され、第1の命令実行ユニットの乗算演算及び選択的累算演算の結果を記憶するように構成されたメモリを備える。第1のメモリは、第2の命令実行ユニットが、乗算演算及び選択的累算演算の結果が記憶された後、AとBとの積にCを累算する前に、複数の無関係の演算を実行することを可能にする。
本明細書で説明されている方法及び装置は、複合算術演算の必要な回路、実装コスト、及び漸増する電力消費量を最小にする。高いレベルにおいて、この装置及び方法は、複合算術演算を、物理的に及び/又は論理的に別個のハードウェア・ユニットによって実行される少なくとも2つのサブ演算に分離し、上記ハードウェア・ユニットの各々が、複合算術演算計算の一部を実行する。丸め又は計算制御に必要な追加ビットが、2つの演算の間に、キャッシュ内に記憶される。サブ演算は、異なる時間及び場所で行われ、必要なデータ・ピースが、最終的な丸めを遂行するようにアセンブルされる。
この方法及び装置には、特にFMA演算に適用されるような、いくつかの顕著な利点がある。
第1に、この方法及び装置は、FMA計算を識別して少なくとも2つの型に分離し、いずれかの計算型の部分を時間的に又は物理的に切り離されている方式で実行する。
第2に、この方法及び装置は、命令セット・アーキテクチャ[ISA]からのアトミックな又は統合されたFMA命令を、少なくとも2つのサブ演算に翻訳し又は変換する。
第3に、この方法及び装置は、上記サブ演算が実行されることを許し、それらが非アトミックな、又は時間的に若しくは物理的に切り離されている方式で、たとえば、アウト・オブ・オーダーのスーパースカラー・コンピュータ・プロセッサ・デバイスで、実行されることを許す。
第4に、FMA計算に必要な算術演算のうちのいくつか(たとえば、FMAの第1の型の一部、又は代替的にFMAの第2の型の一部に対応する)は、第1の専用マイクロ命令の実行中に実行される。
第5に、この方法及び装置は、新規性のある方式で、FMA符号データを事前計算する。
第6に、この方法及び装置は、中間結果計算の結果の一部を、たとえば、結果(リネーム)レジスタ内に保存する。
第7に、この方法及び装置は、その計算の結果の他の何らかの部分を、たとえば、丸めキャッシュ又は計算制御インジケータ・キャッシュと称され得る別の記憶素子に保存する。
第8に、この方法及び装置は、中間結果と称される、これらの集合的データを、新規性のある標準化された記憶形式で保存する。さらに、この方法及び装置は、潜在的に、記憶形式中間結果を保存するのではなく、特別な型のその後の第2のマイクロ命令に転送する。
第9に、この方法及び装置は、望ましいときに丸めキャッシュにアクセスして、保存されたデータをその後の第2のマイクロ命令に提供する。
第10に、この方法及び装置は、丸めキャッシュからのデータに応じて、選択的に、FMA加数を第2のマイクロ命令に提供するか、又はその入力をゼロにする。
第11に、この方法及び装置は、記憶形式中間結果を入力として使用して、第2の(又はさらなる)専用マイクロ命令の実行中に、第1又は第2の型のいずれかについての残りの必要な算術FMA計算を実行する。
第12に、この方法及び装置は、説明されている丸めキャッシュと組み合わせて、また丸めキャッシュをバイパスするように動作可能なデータ転送ネットワークと組み合わせて、従来技術の乗算及び加算ハードウェア実行ユニットに最小の修正の組合せを提供する。
第13に、この方法及び装置は、算術計算のためのディスパッチ・ポートの利用可能性を縮小したり、或いは特定の投資されたハードウェア・コストに関してILPを利用するコンピュータの能力を損なったりすることがない。
本発明は、複数の仕方で特徴付けられることができ、限定はしないが、本明細書で説明されている個々の態様又は本明細書で説明されている態様のうち2つ以上の態様の組合せを含み、また上で説明されている利点の任意の組合せのうちの任意の単一の利点を含むことが理解されるであろう。
2つのサブ演算、修正された乗算器、及び修正された加算器を使用してFMA計算を実行するように構成された実行ユニットと丸め又は計算制御インジケータ・キャッシュとを有するマイクロプロセッサの一実施形態の最上位図である。 数空間の、5タイプのFMA計算への例示的な(ただし、非限定的な)サブ分割を示す図である。 FMA計算を実行するように構成された修正された乗算器及び修正された加算器のいくつかの論理的コンポーネントを示す機能ブロック図である。 FMA乗数、被乗数、及びアキュムレータを入力オペランドとして受け取るように適切な修正を有する乗算算出ユニットの一実施形態の経路決定ロジック及び仮数乗算器モジュールの機能ブロック図である。 記憶形式中間結果を作り出すように適切な修正をさらに有する、図4に部分的に示されている乗算算出ユニットの指数結果生成器及び丸めインジケータ生成器の機能ブロック図である。 記憶形式中間結果及びアキュムレータを受け取るように適切な修正を有する加算器算出ユニットの一実施形態の機能ブロック図である。 非アトミック分割経路FMA計算の第1のFMAサブ演算の一実装の経路決定部分を示す機能ブロック図である。 非アトミック分割経路FMA計算の第1のFMAサブ演算の乗算及び累算部分を示す機能ブロック図である。 非アトミック分割経路FMA計算の第1のFMAサブ演算の記憶形式中間結果生成部分を示す機能ブロック図である。 非アトミック分割経路FMA計算の第1のFMAサブ演算の記憶形式中間結果生成部分を示す機能ブロック図である。 非アトミック分割経路FMA計算の第2のFMAサブ演算を示す機能ブロック図である。 融合FMA命令の、第1及び第2のFMAマイクロ命令への命令変換の一実施形態を示す。
マイクロプロセッサ
次に図1を参照すると、マイクロプロセッサ10を示すブロック図が図示されている。マイクロプロセッサ10は、FMA計算を実行するように構成された複数の実行ユニット45、50、60を有する。マイクロプロセッサ10は、命令キャッシュ15と、命令トランスレータ及び/又はマイクロコードROM20と、リネーム・ユニット及び予約ステーション25と、修正された乗算器45、修正された加算器50、及び他の実行ユニット60を含む複数の実行ユニットと、丸めキャッシュ55(代替的に計算制御インジケータ記憶装置とも称される)と、アーキテクチャ・レジスタ35と、リオーダ・バッファ30(リネーム・レジスタを含む)とを備える。他の機能ユニット(図示せず)は、とりわけ、マイクロコード・ユニットと、分岐予測器と、キャッシュ・メモリ階層(たとえば、レベル1データ・キャッシュ、レベル2キャッシュ)、メモリ順序バッファ、及びメモリ管理ユニットを含むメモリ・サブシステムと、データ・プリフェッチ・ユニットと、バス・インターフェース・ユニットとを備えることができる。マイクロプロセッサ10は、命令がプログラム順序から外れた実行のために発行され得るという点でアウト・オブ・オーダー実行のマイクロアーキテクチャを有する。より具体的には、アーキテクチャ命令(又はマクロ命令)が翻訳又は変換されるマイクロ命令は、プログラム順序から外れた実行のために発行され得る。マイクロ命令のプログラム順序は、それらの翻訳又は変換元のそれぞれのアーキテクチャ命令のプログラム順序と同じである。マイクロプロセッサ10は、クロック・サイクルごとに複数の命令を実行のために実行ユニットに発行することができるという点で、スーパースカラー・マイクロアーキテクチャをさらに有する。一実装において、マイクロプロセッサ10は、x86命令セット・アーキテクチャと互換性のある方式で命令の実行を提供する。
命令キャッシュ15は、システム・メモリからフェッチされたアーキテクチャ命令をキャッシュする。命令トランスレータ及び/又はマイクロコードROM20は、命令キャッシュ15からフェッチされたアーキテクチャ命令をマイクロプロセッサ10のマイクロアーキテクチャのマイクロ命令セットのマイクロ命令に翻訳し又は変換する。実行ユニット45、50、60が、マイクロ命令を実行する。アーキテクチャ命令の翻訳又は変換先のマイクロ命令が、アーキテクチャ命令を実装する。リネーム・ユニット25は、プログラム順序におけるマイクロ命令のためにROB30内にエントリを受け取り、割り振り、割り振られたROBエントリのインデックスでマイクロ命令を更新し、各マイクロ命令をマイクロ命令を実行する実行ユニットに関連付けられている適切な予約ステーション25にディスパッチし、マイクロ命令に対するレジスタ・リネーミング及び依存関係生成を実行する。
型による計算の分類
本発明の一実装の一態様において、FMA計算は、変数ExpDeltaによって示される、入力オペランドの指数値の差、及びFMA計算が実効減算(effective subtraction)を伴うかどうかに基づき区別される。図2は、値ExpDeltaを表す数直線70を含む数空間65を示している。数直線70より下の領域は、計算が実効減算を構成することを表す。数直線70より上の領域は、計算が実効加算を構成する(すなわち、実効減算はない)ことを表す。
指数差ExpDeltaは、乗数及び被乗数入力指数値の和から任意の指数バイアス値を引き、加数又は減数入力指数値を引いた値である。アキュムレータがバイアス調整された積ベクトルよりもかなり大きい計算は、負のExpDeltaで特徴付けられる。同様に、アキュムレータがバイアス調整された積ベクトルよりもかなり小さい計算は、正のExpDeltaで特徴付けられる。
変数EffSubによって示される「実効減算」は、入力オペランドの符号及び所望される演算(たとえば、乗算加算又は乗算減算)が組み合わさって、結果の大きさの実効増加ではなく浮動小数点数結果の大きさの実効減少を引き起こすことを示す。たとえば、負の被乗数が正の乗数で乗算され(負の積)、次いで正の被加数に加算されたときに、結果の大きさの実効減少をもたらし、実効減算(EffSub)と指定される。
図2の数空間65の右側に示されているように、積ベクトルの大きさが結果を支配している場合、アキュムレータは、初めのラウンド・ビット又はスティッキー・ビット計算に直接寄与することができる。以下で説明されているように、アキュムレータと積の仮数との相対的アライメントは、丸めに寄与するビットを計算する前に2つを足し合わせることを奨励する。図2の数空間65は、「実効減算」がないそのようなケースを「2型」計算80として、実効減算があるそのようなケースを「4型」計算90として指定する。
図2の数空間65の左側に示されているように、アキュムレータの大きさが結果を支配し、アキュムレータの仮数のサイズが所望の結果の仮数のサイズよりも小さいか、又は等しいときに、アキュムレータは初めのラウンド・ビット又はスティッキー・ビット計算に寄与し得ない。図2の数空間65は、「実効減算」がないそのようなケースを「3型」計算85として、実効減算があるそのようなケースを「5型」計算95として指定する。アキュムレータは、積の仮数の左に効果的にアライメントされるので、アキュムレータを加算する前にいくつかのスティッキー・ビット及びラウンド・ビットを識別することによって利点が実現され得る。
ExpDeltaが図2の数直線70の右側にある状況を、ExpDeltaが図2の数直線70の左側にある状況から区別することには多くの利点がある。たとえば、従来のFMAは、極端に広い、入力仮数幅の3倍程度又はそれ以上のアライメント・シフターを利用して、アキュムレータが被乗数と乗数との積の左又は右にアライメントされ得る計算を考慮する。FMA計算を2つの修正された実行ユニット(修正された乗算器45と修正された加算器50)によって実行される2つのサブ演算に分割することによって、より小さいデータ経路及びより小さいアライメント・シフターを利用することが可能である。
数直線70の右側の計算では、アキュムレータは、中間積ベクトルよりも小さい大きさを有する。ここで、修正された乗算器45内で乗算器積にアキュムレータを加算することは有利である。そのような計算に対して、従来のFMAのデータ経路幅より小さい、ほぼ1つの仮数の幅であるデータ経路幅で十分である。修正された乗算器45は、すでに、何らかの固有の遅延を有しているので、アキュムレータは、総和ツリー/アレイと効率的にアライメントされる。正規化及び丸めも簡素化される。丸めは、修正された加算器50によって第2のFMAサブ演算において実行される。
数直線70の左側の計算では、対照的に、アキュムレータは、より大きいオペランドとなり、丸めに寄与し得ない。アキュムレータが丸めに寄与していないので(次に説明される特別なケースを除いて)、乗数積に対して何らかの初めのスティッキー・コレクション(sticky collection)を実行すること、中間結果をメモリ(たとえば、リオーダ・バッファ及び/又はキャッシュ)に保存すること、及び修正された加算器50を使用してアキュムレータを総和することが可能である。従来の丸めロジックでは、アキュムレータが丸め判断に寄与しない特別なケースを効果的に取り扱い、和のオーバーフローがある場合、ラウンド・ビットはスティッキー・ビットのうちの1つになり、和のLSBがラウンド・ビットになる。
いくつかの種類のFMA計算−図2の数空間65の下半分に示されている「実効減算」計算のサブセット−の結果、最上位桁の1つ又は複数がゼロに設定され得る。当業者は、これを「マス・キャンセル」と称する。図2において、マス・キャンセルに対する潜在的可能性が存在する計算は、「1型」計算75として指定される。そのような場合、丸め点がどこにあるかを決定するために、丸めに先だって正規化が必要になる場合がある。ベクトルを正規化する際に関わるシフト演算は、著しい時間遅延を引き起こし、且つ/或いは先頭桁予測の使用を必要とする場合がある。その一方で、先頭桁予測は、マス・キャンセルを伴わないFMA計算に対してはバイパスされ得る。
要するに、FMA計算は、図2に示されているように、ExpDelta及びEffSubに基づきいくつかの型にソートされる。第1のFMA計算型75は、EffSubが真である範囲{−2,−1,0,+1}内のExpDeltaでの計算を含むように定義される。これらは、ビットのマス・キャンセルに対する潜在的可能性が対処される計算を含む。第2のFMA計算型80は、EffSubが偽の場合にExpDeltaが−1以上での計算を含む。第3のFMA計算型85は、EffSubが偽の場合にExpDeltaが−2以下での計算を含む。第4のFMA計算型90は、EffSubが真でありExpDelta値が{+1}よりも大きい計算を含む。第5のFMA計算型95は、EffSubが真でありExpDelta値が{−2}よりも小さい計算を含む。本明細書で説明されている型の指定は、単なる例であること、及び型は異なる仕方で定義され得ることも理解されるであろう。たとえば、一実装において、2型及び4型が、単一のユニタリ型(unitary type)として記述されてもよく、同様に、3型及び5型が、単一のユニタリ型として記述されてもよい。さらに、図2の数直線70の右部分と左部分との間の分割線(破線で示されている)は、実装が異なれば異なり得る。
融合FMA命令実行コンポーネント・セット
図3は、FMA計算を実行するように構成された融合FMA命令実行コンポーネント・セット100の一実施形態の一般化された図を示している。コンポーネント・セット100は、2つの物理的に及び/又は論理的に別個の算術演算ロジック・ユニット−一実装では修正された乗算器45及び修正された加算器50−と複数の丸められていない中間結果ベクトル及び丸めインジケータを記憶するための共有記憶装置155及び55とを備える。
修正された乗算器45及び修正された加算器50の各々は、命令実行ユニットであり、より具体的には、マシン・レベルの命令(たとえば、CISCマイクロアーキテクチャの命令の指定されたセット又はRISCマイクロアーキテクチャのマイクロ命令の指定されたセット)をデコードし、そのオペランドを共有高速メモリのコレクションから読み出し、その結果を該メモリのコレクションに書き込む命令パイプライン24内の算術処理ユニットである。命令実行ユニットは、完了のためそれに対して意図的に配送されたマシン・レベルの命令の指定されたセットを実行するように用意されたロジック回路の特性セットとして理解されてもよく、並列(及び単にパイプライン化されているだけでない)様式で複数のマシン命令を実行するように動作可能な回路のより大きなクラスタ(もし存在すれば)と対照的である。
より具体的には、修正された乗算器45及び修正された加算器50は、マイクロ命令をデコードし、マイクロ命令に基づき独立して演算し、制御信号を内部データ経路に提供することができる、別個のアトミックなスタンドアロン実行ユニットである。共有高速メモリは、データを交換し、その結果を他の実行ユニットに見せるようにマイクロ命令に提供される、非アーキテクチャ計算用レジスタのセット又はレジスタ・ファイルであってよい。
より具体的には、修正された乗算器45は、ほとんどの態様において、FMA演算の一部ではない通常の乗算マイクロ命令を実行することができるという点で従来型であり得る好適な乗算計算ユニットである。しかし、これは、以下でさらに説明されているように、FMA乗数105、被乗数110、及びアキュムレータ115を入力オペランドとして受け取り、記憶形式中間結果150を作り出すために、適切な修正を有する。同様に、修正された加算器50は、ほとんどの態様において、加算又は減算などの、FMA演算ではない通常の累算マイクロ命令を実行することができるという点で従来型であり得る好適な加算器計算ユニットである。しかし、これは、記憶形式中間結果150を受け取り、正しい丸められたFMA結果を作り出すために、適切な修正を有する。
修正された乗算器45は、融合FMA演算の第1のステージ又は部分(FMA1サブ演算)を実行することができる。修正された乗算器45は、入力オペランド・アナライザー140と、乗算器総和アレイ120と、最終加算器125と、正規化シフター130と、先頭桁予測器及びエンコーダ135とを備える。FMA1サブ演算を実行するときに、修正された乗算器45は、丸められていない正規化された総和結果145と複数の丸めビット(又は丸めインジケータ)とを生成し、出力する。その一方で、非融合FMA演算を実行するときに、修正された乗算器45は、丸められたIEEE準拠結果を生成する。
丸めビットと丸められていない正規化された総和結果145の最上位ビット(most significant bits;MSB)とは、記憶形式に従って記憶される。一実装において、丸められていない正規化された総和結果145のMSBは、ターゲット・データ形式の仮数幅に等しい仮数幅を有するリネーム・レジスタ155に記憶するために、結果バス146上に出力される。丸めビットは、リネーム・レジスタ155を記憶する記憶装置ユニット(たとえば、リオーダ・バッファ30)から区別できる丸めキャッシュ55内に記憶するために、修正された乗算器の外部にあり結果バス146から区別できる専用の丸めビット若しくは計算制御インジケータ・データ経路又は接続ネットワーク148上に出力される。丸められていない正規化された総和結果145のMSBは、丸めビットとともに、記憶形式中間結果150を一緒に構成する。
リネーム・レジスタ155及び丸めキャッシュ55は、他の実行ユニットから見える共有メモリの一部であるので、修正された乗算器45から物理的に及び/又は論理的に別個である、修正された加算器50は、オペランド・バス152及び丸めビット・データ経路148を介して記憶形式中間結果150を受け取り、融合FMA演算の第2の(完了)ステージ又は部分(FMA2サブ演算)を実行することができる。さらに、FMA1とFMA2との間に、他の無関係の演算が実行され得る。
修正された加算器50は、修正された乗算器45がすでに必要な累算を実行していたFMAの状況においてアキュムレータ・オペランドをゼロに設定するために、オペランド修正器160を備える。修正された加算器50は、最終的な丸められた結果を作り出すために丸めモジュール180においてどの丸めビット−修正された乗算器45によって生成される丸めビット、又は修正された加算器50の内部生成丸めビット、又は両方の何らかの組合せ−を使用するかを選択するためのラウンド・ビット選択ロジック175をさらに備える。修正された加算器50は、2つの累算オペランドのマス・キャンセルの場合に総和を正規化するための近接経路総和回路165と、1ビット分のシフトしか必要としない総和を作り出す累算を実行するための遠隔経路総和回路170とをさらに備える。以下でさらに説明されているように、FMA2サブ演算は、全体として遠隔経路総和回路170によって処理され得る。
修正された乗算器
図4及び5は、修正された乗算器45の一実施形態のより詳細な図を示している。図4は、具体的に、修正された乗算器45の経路決定ロジック185及び仮数乗算器モジュール190を示している。図5は、具体的に、修正された乗算器45の指数結果生成器260及び丸めインジケータ生成器245を示している。
図4に示されているように、経路決定ロジック185は、入力デコーダ200と、入力オペランド・アナライザー140と、経路制御ロジック215と、アキュムレータ・アライメント及び注入ロジック回路220とを備える。仮数乗算器モジュール190は、図3の乗算器総和アレイ120を含み、これは図4において2つのコンポーネント、乗算器アレイ235及び部分積加算器240として表されている。仮数乗算器モジュール190は、最終加算器125と、先頭桁予測器及びエンコーダ135と、正規化シフター130とをさらに備える。
図5に示されているように、指数結果生成器260は、PNExp生成器265、IRExp生成器270、及びアンダーフロー/オーバーフロー検出器275を備える。丸めインジケータ生成器245は、中間符号生成器280、結果ベクトル・ポート285、循環桁上げインジケータ290、スティッキー・ビット生成器295、及びラウンド・ビット生成器300を備える。
図4に再び注意を向けると、修正された乗算器45は、1つ又は複数の入力ポート195を通じて入力マイクロ命令及びオペランド値を受け取る。FMAマイクロ命令の場合、修正された乗算器45は、被乗数オペランドA、乗数オペランドB、及びアキュムレータ・オペランドCを受け取り、これらの各々が、符号インジケータ又はビットと、仮数と、指数とを含む。図4及び6において、浮動小数点オペランドの符号、仮数、及び指数コンポーネントは、それぞれ、添字S、M、及びEによって表される。したがって、たとえば、A、A、及びAは、それぞれ、被乗数符号ビット、被乗数仮数、及び被乗数指数を表す。
デコーダ200は、FMAインジケータMと2進数演算符号インジケータ(又はビット)P及びOとを生成するために入力マイクロ命令をデコードする。Mは、FMAマイクロ命令を受け取ることを表す。一実装において、A*B+Cの形式のFMAマイクロ命令は、結果として、2進数ゼロの正乗算/ベクトル負乗算符号演算子Pと2進数ゼロの加算/減算演算子Oとの生成を引き起こす。−A*B+Cの形式の負乗算加算マイクロ命令は、結果として、2進数1のPと2進数0のOとを生じる。A*B−Cの形式の乗算減算マイクロ命令は、結果として、2進数0のPと2進数1のOとを生じ、−A*B−Cの形式のベクトル負乗算減算マイクロ命令は、結果として、2進数1のP及びOを生じる。他のより単純な実装では、修正された乗算器45は、ベクトル負マイクロ命令及び/又は減算マイクロ命令を直接サポートしないが、マイクロプロセッサ10は、乗算加算/減算マイクロ命令を修正された乗算器45にディスパッチする前に最初に1つ又は複数のオペランド、又は符号インジケータを適宜加法的に反転することによって同等の演算をサポートする。
乗算器アレイ235は、被乗数及び乗数の仮数値A及びBを受け取り、AとBとの部分積を算出する。(A及びBのいずれかの絶対値が1又は0である場合、乗算器アレイ235は、AとBとの完全な積を構成するであろう単一の「部分積」値を作り出し得ることが理解されるであろう。)部分積は、部分積加算器240に供給され、部分積加算器240は、AとBとのこうした部分積をこれらを総和する準備において受け取るための複数のエントリを備える。部分積加算器240内のエントリのうちの少なくとも1つは、アキュムレータ導出値Cを受け取るように構成される。部分積加算器240の追加の説明は、入力オペランド・アナライザー140とアキュムレータ・アライメント及び注入ロジック220との説明の後、以下で再開する。
入力オペランド・アナライザー140は、ExpDeltaアナライザー・サブ回路210及びEffSubアナライザー・サブ回路205を備える。ExpDeltaアナライザー・サブ回路210は、ExpDelta(ExpΔ)値を生成する。一実装において、ExpDeltaは、乗数及び被乗数入力指数値A及びBを総和し、加数又は減数入力指数値Cを減算し、もしあれば、指数バイアス値ExpBiasを減算することによって計算される。ExpBias値を導入することで、A、B、及びCが、たとえばIEEE754によって要求されるような、バイアスされた指数を使用して表されるときに、被乗数Aと乗数Bとの積が、アキュムレータCのバイアスの2倍のバイアスを有するという事実を補正する。
EffSubアナライザー・サブ回路205は、オペランド符号インジケータA、B、及びCと、演算子符号インジケータP及びOとを分析する。EffSubアナライザー・サブ回路205は、FMA演算が実効減算となるかどうかを指示する「EffSub」値を生成する。たとえば、実効減算は、AとBとの積(又は負ベクトル乗算演算子についての負の積)に対するCの演算子指定の加算又は減算が(a)AとBとの積の絶対値の大きさ、又は(b)Cの絶対値の大きさ、よりも小さい絶対値の大きさを有する結果Rをもたらす場合に、結果として生じる。数学的記法で表された場合、FMA演算は、(|R|<|A*B|)∨(|R|<|C|)の場合に実効減算を構成し、ここで、RはFMA演算の結果である。EffSubをFMA演算の結果に関して記述すると都合がよいが、EffSubアナライザー・サブ回路205は、A、B、及びCの仮数、指数、又は大きさを評価することなく、符号インジケータA、B、C、P、及びOを分析することによってEffSubを事前に決定することが理解されるであろう。
経路制御ロジック215は、入力オペランド・アナライザー140によって生成されるExpDelta及びEffSubインジケータを受け取り、それに応答して、経路制御信号を生成し、その値は、ここでは変数Zによって参照される。経路制御信号Zは、Cの累算がAとBとの部分積とともに修正された乗算器45内で実行されるかどうかを制御する。一実装において、Zを生成するために経路制御ロジック215が使用する基準は、図2に規定されている。一実装において、Zは、修正された乗算器45が乗算加算演算の累算部分を実行するように選択されるすべてのケース(たとえば、1、2、及び4型)に対して2進数の1であり、ExpDelta及びEffSubの他のすべての組合せ(たとえば、3及び5型)に対して2進数の0である。
代替的に、経路制御ロジック215がZを生成するために使用し得る基準は、Cが、AとBとの積の大きさに対して、AとBとの部分積総和のための総和ツリー内に提供される最上位ビットの左にCの最上位ビットをシフトすることなく、総和ツリー内でCのアライメントを行うことが可能な大きさを有するかどうかである。別の、又は代替的な基準は、FMA演算を実行する際のマス・キャンセルに対する潜在的可能性があるかどうかである。さらに別の、又は代替的な基準は、AとBとの積に対するCの累算が、AとBとの積とCとをアライメントするのに必要なビットよりも少ないビットを必要とする丸められていない結果Rを生成するかどうかである。こうして、経路制御基準は修正された乗算器45の設計に依存して変わり得ることが理解されるであろう。
アキュムレータ・アライメント及び注入ロジック220回路は、経路制御ロジック215によって生成されたZと、ExpDeltaアナライザー・サブ回路210によって生成されたExpDeltaと、シフト定数SCと、アキュムレータ仮数値Cとを受け取る。一実装において、アキュムレータ・アライメント及び注入ロジック220は、Cのビット単位の否定
[外1]
Figure 0006684713
と、加算/減算累算演算子インジケータOとをさらに受け取る。別の実装では、アキュムレータ・アライメント及び注入ロジック220は、加算/減算累算演算子インジケータOが修正された乗算器45によって受け取られたマイクロ命令が乗算減算マイクロ命令であることを指示する場合に、Cを選択的に加法的に反転する。
これらの入力に応答して、アキュムレータ・アライメント及び注入ロジック220回路は、部分積加算器240内に注入する値Cを作り出す。Cを保持するアレイの幅は、2m+1、又は入力オペランド仮数A、B、及びCの幅の2倍プラス1追加ビットである。
Mが2進数の0であり、修正された乗算器45がFMA1サブ演算ではなく通常の乗算演算を実行していることを示している場合、マルチプレクサ230が、Cの代わりに丸め定数RCを部分積加算器240内に注入して、修正された乗算器45が従来の様式で丸められた結果を生成できるようにする。RCの値は、命令によって指示された丸めの型(たとえば、切り上げへの0.5の丸め(round half up)、偶数への0.5の丸め(round half to even)、0から遠い方への0.5の丸め(round half away from zero))と、さらに入力オペランドのビット・サイズ(たとえば、32ビット対64ビット)とに、部分的に依存する。一実装において、部分積加算器240は、2つの異なる丸め定数を使用して、2つの和を算出し、次いで、適切な和を選択する。修正された乗算器45のIMant出力は、これによって、通常の乗算演算の正しく丸められた仮数結果となる。
Mが2進数の1で、Zが2進数の0であり、Cの累算が部分積加算器240によって実行されるべきでないことを指示している場合、一実装において、アキュムレータ・アライメント及び注入ロジック220回路は、C=0を設定し、マルチプレクサ230に、Cを受け取るために提供される部分積加算器240内に0を注入することを行わせる。Mが2進数の1で、Zが2進数の1である場合、アキュムレータ・アライメント及び注入ロジック220は、ExpDelta+シフト定数SCに等しい量だけCを右シフトし、Cを作り出す。一実装において、シフト定数SCは2に等しく、これは、Cとの累算が修正された乗算器45内で実行される図2の数空間内の最大の負のExpDeltaに対応する。次いで、マルチプレクサ230は、その結果得られるCを部分積加算器240に注入する。
アキュムレータ・アライメント及び注入ロジック220は、さらに、スティッキー・コレクタを組み込む。部分積加算器240の総和ツリーの最下位ビット(least significant bit;LSB)を超えてシフトされるアキュムレータCの任意の部分が、XtraStkyビットとして保持され、丸めに使用される。m個までのビットは、部分積加算器240のLSBを超えてシフトされ得るので、XtraStkyビットは、m幅の追加スティッキー・ビット・アレイとして転送され、スティッキー・ビットSを計算する際に使用される。
修正された乗算器45の総和ロジックに再び注意すると、部分積加算器240は、いくつかの実装において総和ツリーであり、一実装において1つ又は複数の桁上げ保存加算器である。部分積加算器240は、部分積の総和の中にこの追加の選択的にビット単位否定されアライメントされたアキュムレータ入力値を含み、従来技術の乗算実行ユニットに典型的な方法に従い、提供された部分積総和ツリー内のビットの列上の桁上げ保存ベクトルごとに、丸められていない冗長表現又は和への総和を実行する。
ここでもまた、部分積加算器240によって実行される数学演算は、Zの値に依存することが理解されるであろう。Z=1の場合、部分積加算器240は、AとBとの部分積とCの連帯累算(joint accumulation)を実行する。Z=0の場合、部分積加算器240は、AとBとの部分積の一次累算を実行する。一次又は連帯累算の結果として、部分積加算器240は、2mビット和ベクトル及び2mビット桁上げベクトルとして表される冗長2進数和を作り出す。
桁上げ及び和ベクトルは、最終加算器125と先頭桁予測器及びエンコーダ135との両方に転送される。最終加算器125は、桁上げ先見加算器又は桁上げ伝播加算器であってよく、桁上げ及び和ベクトルを2m+1の幅を有する正又は負の事前正規化された丸められていない非冗長和PNMantにコンバートすることによって総和プロセスを完了する。最終加算器125は、PNMantが正か又は負かを指示する和符号ビットSumSgnをさらに生成する。
最終加算器125がPNMantを生成するのと並行して、また同じ時間間隔の間に、先頭桁予測器及びエンコーダ135は、PNMantを正規化するためにキャンセルされる必要のある先頭桁の数を予想する。この配置構成は、最終加算器125による最終加算が正規化の後に行われる従来技術の分割された乗算加算FMA設計に勝る利点をもたらす。これは、桁上げベクトルと和ベクトルの両方の正規化を必要とするものであり、今度は、先頭桁予測の出力を待たなければならない。好ましい一実装において、先頭桁予測器及びエンコーダ135は、正又は負のいずれかの和を収容する。
一実装において、先頭桁予測は、1型計算に対してのみ実行される。先頭桁予測の選ばれた方法は、すでに説明されているように、また浮動小数点計算設計の実務における当業者に理解されるように、正又は負のいずれかの和を収容する。
先頭桁予測器及びエンコーダ135は、最大1ビットの不正確さを有し得るので、これを補正するためのいくつかの通常使用される技術が正規化シフター130において、又はそれに関して提供され得る。一アプローチは、この不正確さを予想するロジックを提供することである。別のアプローチは、PNMantのMSBがセットされているかいないかを調べ、それに応答して、PNMantの追加のシフトを選択することである。
正規化シフター130は、最終加算器125から丸められていない非冗長和PNMantを受け取り、初期仮数値GMantを生成する。Cとの累算が部分積加算器240を使用して実行されている場合、GMantは、Cと、AとBとの積との、絶対的な正規化された和である。他のすべての場合において、GMantは、AとBとの積の、絶対的な正規化された和である。
GMantを作り出すために、正規化シフター130は、PNMantが負であることをSumSgnが指示する場合、PNMantをビット単位で否定する。負のPNMant値についての正規化シフター130のビット単位の否定は、以下でさらに説明されているように、記憶形式中間結果150の生成において有用である。さらに、正しい丸めを容易にすることにおいても有用である。修正された乗算器においてPNMantを反転することによって、PNMantは、それが負数であったことを伝えることなく、修正された加算器に正数として提供され得る。これは、累算が和として実装され、簡素化された方式で丸められることを可能にする。
さらに、正規化シフター130は、PNMantをLDP、EffSub、及びZの関数である量だけ左シフトする。最上位先頭桁のキャンセルが生じない場合であっても、有用な標準化された記憶形式中間結果150を作り出し、正しいその後の丸めを可能にするために、0、1、又は2ビット位置によるPNMantの左シフトが必要とされ得ることに留意されたい。左シフトからなる正規化は、算術的最上位桁を標準化された最も左の位置に移動し、それを以下でさらに説明されている記憶形式中間結果150で表現することができる。
この実装は、従来技術のFMA設計に勝る3つの追加の利点を実現する。第1に、EffSubに応答してアキュムレータ仮数上で2の補数が実行される場合に必要とされるであろうようには、追加の桁上げビットを部分積加算器240に挿入する必要がない。第2に、大きい符号ビット検出器/予測器モジュールを提供し非冗長部分積及びアキュムレータ総和値の冗長和及び桁上げベクトル表現を調べて選択的に補数をとる必要がない。第3に、追加の桁上げビット入力を提供し部分積及びアキュムレータ総和の上記ような選択的に補数をとられた和及び桁上げベクトル表現に対する正しい計算を保証する必要がない。
次に、図5の指数結果生成器260を参照すると、PNExp生成器265は、事前正規化された指数値PNExpを、被乗数及び乗数指数値A及びBと指数バイアスExpBiasとシフト定数SCとの関数として生成する。より具体的には、一実装において、PNExpは、シフト定数SCにA+B−ExpBiasを加えたものとして計算される。
IRExp生成器270は、正規化シフター130によって実行される仮数の正規化を考慮するようにPNExpをデクリメントし、PNExp及び先頭桁予測LDPの関数である中間結果指数IRExpを生成する。次いで、IRExpは結果ベクトル・ポート285に転送されるが、これは以下でさらに説明されている。
中間符号生成器280は、中間結果符号インジケータIRSgnを、EffSub、E、A、B、及びZの関数として生成する。より具体的には、一実装において、IRSgnは、いくつかの場合において、被乗数符号ビットAと乗数符号ビットBとの排他的論理和(XOR)として計算される。しかし、Zビットが2進数の1であり、累算が実行されていることを示し、EffSubも2進数の1であり、実効減算であることを示し、Eビット値が2進数の0であり、循環桁上げが保留になっていないことを示す場合、IRSgnは、有利には、被乗数符号ビットAと乗数符号ビットBとの否定排他的論理和(XNOR)として計算される。別の言い方をすれば、中間符号は、一般的に、AとBとの積の符号である。AとBとの積の符号は、アキュムレータがAとBとの積よりも大きい大きさを有するときに逆にされ、乗算加算演算は実効減算であり、累算の完了は循環桁上げを必要としない(累算が負であるため)。
中間結果符号インジケータIRSgnは、マス・キャンセルが起こり得ることであるFMA計算についての最終符号ビットを決定するための革新的方法に寄与する。従来技術の分割経路FMA実装とは異なり、本明細書で説明されている実装は、符号予測を必要とせず、また符号予測する際に採用されるかなり大きい回路を必要としない。代替的に、ゼロの結果の符号、又は符号付きゼロ入力による計算からの結果の符号は、容易に事前算出されることができ、たとえば、丸めモード入力を組み込む。
結果ベクトル・ポート285は、中間結果指数IRExpと中間結果符号IRSgnと中間結果仮数IRMantとを含む記憶形式中間結果ベクトルIRVectorを出力する。記憶形式の一実装において、IRMantは、GMantの最上位mビットを含み、ここで、mは、ターゲット・データ型の幅である。たとえば、IEEE double double精度計算において、結果ベクトル・ポート285は、IRVectorを、単一の符号ビットと11個の指数ビットとGMantの最上位53ビットとの組合せとして出力する。記憶形式の別の実装において、mは、仮数値A、B、及びCの幅に等しい。さらに別の実装において、mは、仮数値A、B、及びCの幅よりも大きい。
これらの仮数ビットの単一の最上位ビットは、記憶されるときに暗黙の値を仮定することができ、これはIEEE標準記憶形式に類似している。IRVectorは、ROB30のリネーム・レジスタ155などの共有メモリに保存され、したがって、他の命令実行ユニットによってアクセスされ、且つ/或いは結果転送バス40上で別の命令実行ユニットに転送され得る。好ましい一実装において、IRVectorは、リネーム・レジスタ155に保存される。さらに、中間結果ベクトルは、ROB30内で永続的な割り当てを与えられ得るアーキテクチャ・レジスタと異なり、ROB内で予測不可能な割り当てを与えられる。代替的実装において、IRVectorは、FMA演算の最終的な丸められた結果が記憶されるデスティネーション・レジスタに一時的に保存される。
次に、図5の丸めインジケータ生成器245を参照すると、アンダーフロー/オーバーフロー検出器275は、アンダーフロー・インジケータU及びオーバーフロー・インジケータOを、記憶形式中間結果150(以下でさらに説明されている)の精度又はターゲット・データ型に対応する、IRExpと指数範囲値ExpMin及びExpMaxとの関数として生成する。IRExpが、このFMA計算のターゲット・データ型に対する表現可能な指数値の範囲よりも小さいか、又はリネーム・レジスタなどの中間記憶装置に対する表現可能な指数値の範囲よりも小さい場合、Uビットは2進数の1を割り当てられる。そうでない場合、Uビットは、2進数の0を割り当てられる。逆に、IRExpが、このFMA計算のターゲット・データ型に対する表現可能な指数値の範囲よりも大きいか、又はリネーム・レジスタなどの中間記憶装置に対する表現可能な指数値の範囲よりも大きい場合、Oビットは2進数の1を割り当てられる。そうでない場合、Oビットは、2進数の0を割り当てられる。代替的に、U&Oは、4つのとり得る指数範囲を表すようにエンコードされてもよく、そのエンコーディングのうちの少なくとも1つはアンダーフローを表し、そのうちの少なくとも1つはオーバーフローを表す。
及びOビットは、通常の乗算器ユニットの従来の実装では、例外制御ロジックに報告される。しかし、FMA1サブ演算を実行したときに、修正された乗算器45は、U及びOビットを中間記憶装置に出力し、これは、修正された加算器50によって処理される。
循環桁上げインジケータ生成器290は、保留中の循環桁上げインジケータEビットを、ZとEffSubとSumSgnとの関数として生成する。Eビットは、事前に決定されているZビットが2進数値の1を有し、部分積加算器240がCとの累算を実行していたことを指示し、事前に決定されているEffSub変数が結果として実効減算を引き起こした累算を指示し、SumSgnによって指示されているように正の丸められていない非冗長値PNMantが作り出された場合に、2進数の1を割り当てられる。他のすべてのケースにおいて、Eは2進数の0を割り当てられる。
結果ベクトル・ポート285は、GMantの最上位ビットを中間結果ベクトルの中間結果仮数として記憶するが、スティッキー・ビット生成器295及びラウンド・ビット生成器300は、重要度の低い(たとえば、中間結果仮数の53番目のビットを超える)残りのビットをラウンド(R)及びスティッキー(S)ビットに低減する。スティッキー・ビット生成器295は、スティッキー・ビットSを、SumSgnとZとGMantの最下位ビットとEffSubとXtraStkyビットとの関数として生成する。ラウンド・ビット生成器300は、ラウンド・ビットRをGMantの最下位ビットの関数として生成する。
丸めキャッシュ
丸めビット・ポート305は、ビットU、O、E、S、R、及びZの各々を、それらがFMA演算の最終的な丸められた結果を生成するために別の命令実行ユニット(たとえば、修正された加算器50)によってその後使用され得るように出力する。便宜上、これらのビットはすべて、これらのビットのうちのいくつかがFMA演算の最終出力を作り出す際に他の目的に使用され得るとしても、またこれらのビットのすべてが丸めに使用されるとは限らない場合であっても、本明細書では丸めビットと称される。たとえば、いくつかの実装において、Oビットは、丸めに使用されない場合がある。これらのビットは、計算制御インジケータと交換可能に称され得る。ビットZ及びEは、たとえば、どのようなさらなる計算が実行される必要があるかを指示する。U及びOは、たとえば、それらの計算がどのように進行すべきかを指示する。さらに、これらのビットは、修正された乗算器45のFMA1サブ演算と修正された加算器50のFMA2サブ演算との間の中断において計算状態情報を表し、適宜記憶するためのコンパクト形式を提供するので、計算中断状態値と称され得る。
中間結果ベクトル及びアキュムレータ値Cと一緒に、これらのビットは、丸めビット、計算制御インジケータ、計算状態インジケータ、又は何か別の名で称されるとしても、その後の命令実行ユニットが必要とするあらゆるものを、そのオペランド値に加えて提供して、算術的に正しい最終結果を作り出す。別の言い方をすれば、中間結果ベクトルと丸めビットとの組合せは、FMA演算の結果の算術的に正しい表現を作り出すために必要なあらゆるものを提供し、これは、有効桁において(in significance)ターゲット・データ・サイズに低減された±A*B±Cの無限精度FMA計算から生成された結果から区別不能なものである。
本発明の好ましい一態様に合わせて、マイクロプロセッサ10は、丸めビットを、計算制御インジケータ・ストアとも代替的に称され得る丸めキャッシュ55内に記憶することと、丸めビットを転送バス40上で別の命令実行ユニットに転送することの両方を実行するように構成される。代替的一実装において、マイクロプロセッサ10は、丸めキャッシュ55を有さず、その代わりに、丸めビットを転送バス40上で別の命令実行ユニットに単に転送する。さらに別の代替的実装において、マイクロプロセッサ10は、丸めビットを丸めキャッシュ55内に記憶するが、丸めビットを一方の命令実行ユニットから別の命令実行ユニットに直接転送するための転送バス40を備えていない。
丸めキャッシュ55とそれが記憶する丸めビット又は計算制御インジケータとは両方とも非アーキテクチャであり、このことは、命令セット・アーキテクチャ(ISA)の一部として指定されたプログラマから見える信号ソースであるアーキテクチャ・レジスタ及びアーキテクチャ・インジケータ(浮動小数点ステータス・ワードなど)とは対照的に、それらがエンド・ユーザ・プログラマからは見えないことを意味する。
本明細書で説明されている丸めビットの特定のセットは例示的であること、及び代替的実装が丸めビットの代替的セットを生成することが理解されるであろう。たとえば、代替的一実装では、修正された乗算器45は、ガード・ビットGを生成するガード・ビット生成器をさらに備える。別の実装では、修正された乗算器45は、ゼロの結果の符号をさらに事前計算し、その値を丸めキャッシュに保存する。修正された加算器50のその後の計算がゼロの結果をもたらした場合、修正された加算器50は、保存されているゼロ結果符号インジケータを使用して最終的な符号付きゼロ結果を生成する。
本発明の別の好ましい態様に合わせて、丸めキャッシュ55は、修正された乗算器45の外部にあるメモリ記憶装置である。しかしながら、代替的一実装では、丸めキャッシュ55は、修正された乗算器45に組み込まれる。
より具体的には、丸めキャッシュ55は、一実装において、結果バスから命令実行ユニットに独立して結合される。結果バスは、命令実行ユニットから結果を汎用記憶装置に伝達するが、丸めキャッシュ55は、命令実行ユニットに結果バス55とは独立して結合される。さらに、計算制御インジケータ記憶装置は、計算制御インジケータを記憶又はロードするように動作可能である命令にのみアクセス可能であり得る。したがって、丸めキャッシュ55は、命令結果が出力される結果バスを通じてとは異なるメカニズムによって、たとえば、それ独自のワイヤのセットを通じてアクセスされる。丸めキャッシュ55は、さらに、命令実行ユニットの入力オペランド・ポートを通じてとは異なるメカニズムを通じてアクセスされる。
一実装において、丸めキャッシュ55はフル・アソシアティブ・コンテンツ・アクセス可能メモリであり、並列にディスパッチされ得るFMA1マイクロ命令の最大数と同じ数の書き込みポートと、並列にディスパッチされ得るFMA2マイクロ命令の最大数と同じ数の読み出しポートと、FMA1マイクロ命令がディスパッチされてから命令スケジューラが対応するFMA2マイクロ命令をディスパッチするまでの間に経過し得る時間の最大期間(単位はクロック・サイクル数)及び命令スケジューラの容量に関係する深さ(エントリの数)とを有する。別の実装では、丸めキャッシュ55はより小さく、マイクロプロセッサ10は、丸めキャッシュ55内の空間がFMA1マイクロ命令の丸めビット結果を記憶するのに利用可能でない場合にFMA1マイクロ命令をリプレイするように構成される。
キャッシュの各エントリは、キャッシュ・データだけでなくキャッシュ・データに関係するタグ値の記憶を提供する。タグ値は、記憶形式中間結果ベクトルを記憶するリネーム・レジスタ155を識別するために使用されるのと同じタグ値であってよい。マイクロプロセッサ10が、第2のマイクロ命令のオペランドを用意/フェッチしているときに、これは、ROBインデックスを使用してリネーム・レジスタ155から記憶されている中間データを取り出し、そのまったく同じインデックスが、丸めキャッシュ55に提供され、中間結果150の残りの部分(すなわち、計算制御インジケータ)を供給することになる。
有利には、リネーム・レジスタ155に割り振られている量よりも著しく少ない量の物理的記憶装置エントリが丸めキャッシュ55に割り振られ得る。リネーム・レジスタ155の数は、アウト・オブ・オーダー・マイクロプロセッサ又は設計において実行ユニットを飽和したままにするために必要なレジスタ名の数と実行中の(in flight)マイクロ命令の数との関数である。対照的に、丸めキャッシュ55のエントリの望ましい数は、実行中のFMAマイクロ命令のあり得そうな数の関数にされ得る。したがって、非限定的な一例において、マイクロプロセッサ・コアは、65個のリネーム・レジスタ155と、ただし並列で最大8つの算術計算を果たすように8個だけの丸めキャッシュ55エントリとを提供し得る。
代替的一実装は、中間結果ベクトルを記憶して丸めキャッシュ55データに対する追加ビットを提供するために使用されるリネーム・レジスタ155を拡張する(すなわち、リネーム・レジスタを広くする)。これは、潜在的に空間の次善最適な使用であるが、それでも、本発明の範囲内にある。
丸めビットは、中間結果ベクトルIRVectorとともに、記憶形式中間結果150を一緒に含む。この説明されている記憶形式は、標準化されたデータ形式に従って丸められていない正規化された総和結果145の最上位ビット(そのうちの1つは暗黙値を有する)を保存及び/又は転送し、E、Z、U、及びOビットとともに丸められていない正規化された総和結果145の残りの(低減された、又は低減されていない)ビットを保存及び/又は転送し、従来技術に勝る著しい利点をもたらす。
修正された加算器
次に、図6を参照すると、修正された加算器50は、オペランド修正器160と、アライメント及び調整ロジック330と、単一ビット・オーバーフロー・シフト・ロジック345と対になる遠隔経路累算モジュール340とを備える。オペランド修正器160は、指数生成器335、符号生成器365、加算器丸めビット生成器350、ラウンド・ビット選択ロジック175、及び丸めモジュール180をさらに備える。
一実装では、修正された加算器50は、分割経路設計を備え、近接計算と遠隔計算とを別個に算出することを可能にすることが留意されるべきであり、これは、浮動小数点計算設計の実務における当業者に理解されるであろう。近接経路計算機能は、マルチビット正規化シフター(図示せず)と対になる近接経路累算モジュール(図示せず)を備えるが、そのような機能は、図6には示されていない。一実装において、入力指数値の差が集合{−1、0、+1}内にある実効減算を構成するオペランドCとDとの通常の累算は、近接経路165に向けられる。他のすべての加算演算は、遠隔経路170に向けられる。有利には、本発明は、修正された加算器50内のすべてのFMA2サブ演算が遠隔経路170に向けられることを可能にする。
修正された加算器50は、マイクロ命令と2つの入力オペランドとを受け取るための1つ又は複数の入力ポート310を備える。第1の入力オペランドDは、被減数又は第1の加数である。第2のオペランドCは、減数又は第2の加数である。浮動小数点実装では、各入力オペランドは、入力符号、指数、及び仮数値を含み、それぞれS、E、及びMで表される。デコーダ315はマイクロ命令を解釈して、信号Qを使用して、演算が加算であるか又は減算であるかを指示する。デコーダは、マイクロ命令(又はマイクロ命令によって指定されたオペランド参照)をさらに解釈して、信号Mにより、修正された加算器50がFMA2サブ演算を実行すべきである専用マイクロ演算をマイクロ命令が指令するかどうかを指示する。
修正された加算器50が、FMA2サブ演算を実行するタスクを課されたときに、修正された加算器50は、対応するFMA1サブ演算を実行した修正された乗算器45によってすでに生成されている中間結果ベクトルIRVectorを受け取る。中間結果ベクトルIRVectorは、幅がmビットしかないので、修正された加算器50は、mビットよりも広い仮数を受け入れ又は処理するように修正される必要がなく、一実装ではそのように修正されない。したがって、修正された加算器50の内部データ経路、累算モジュール340、及び他の回路は、より広い形式で提示されるIRVectorである必要があり又はそうであった場合よりも単純で、効率的である。また、マス・キャンセルに対する潜在的可能性を伴う累算は、修正された乗算器45によって行われるので、FMA結果を正しく計算するために修正された加算器50の近接/マス・キャンセル経路に加えなければならない丸めロジックはない。
一実装において、修正された加算器50は、リネーム・レジスタ155からIRVectorを受け取る。別の実装では、IRVectorは、転送バス40から受け取られる。図6に例示されている実装では、IRVectorは、オペランドDとして受け取られ得る。修正された加算器50は、他のオペランドとして、アキュムレータ値Cを受け取る。
Mが、修正された加算器50がFMA2サブ演算を実行するタスクを課されていることを指示する場合、オペランド修正器160は、Zが2進数の1であり、Cの累算が修正された乗算器45で実行されていることを指示するときに、1つの入力オペランドの一部を2進数の0に等しくなるように設定する。一実装において、指数、仮数、及び符号フィールドC、C、及びCの各々は、0に修正される。別の実装では、指数及び仮数フィールドC及びCのみが2進数の0に修正され、オペランド符号Cは保持される。その結果、修正された加算器50は、加数Dと2進数符号付き0とを総和する。
2進数の1のMのビットは、さらに、修正された加算器50に、修正された乗算器45によって生成され、記憶形式中間結果150に組み込まれた丸めビットを受け取るように、信号で伝える。
他のすべてのケース、すなわち、Zが2進数の0である場合、又はMが2進数の0である場合で、修正された加算器50が従来の累算演算のタスクを課されていることを指示するとき、オペランド修正器160は、従来の浮動小数点加算に必要な可能性があるもの以外の指数及び仮数フィールドC及びCを修正しない。
一実装において、オペランド修正器160は、Zの値を受け取ってCと0との間、及びCと0との間で選択する一対のマルチプレクサを備える。選択された値は、図6上でC*及びC*として表される。次いで、アライメント及び調整ロジック330は、選択された値C*及び第1のオペランド仮数Dのアライメント及び/又は調整を行う。
次に、遠隔経路累算モジュール340は、C*とDとを総和する。一実装において、累算モジュール340は、和とインクリメントされた和とを提供するデュアル和加算器である。また、一実装では、累算モジュール340は、1の補数の方法論を使用して実効減算を実行するように動作可能である。その和が仮数フィールド内に1ビットのオーバーフローを作り出す場合、オーバーフロー・シフト・ロジック345が、和を1ビットだけ条件付きシフトし、結果の値を丸められるように準備する。
指数生成器335は、選択された指数値C*と第1のオペランド指数Dとオーバーフロー・シフト・ロジック345によって作り出されるシフト量とを使用して最終指数FExpを生成する。
符号生成器365は、最終符号FSgnを、第1及び第2のオペランド符号C及びDと加算/減算演算子Qと総和結果の符号との関数として生成する。
図示されていない別の実装において、オペランド修正器160は、加算器がFMA2サブ演算を実行していること及びZが2進数の1であることを入力デコーダが指示し、Cとの累算がすでに実行されていることを指示するときに、総和ロジックを静止状態に保持しながら、第1のオペランドDを丸めモジュール180に直接転送させるセレクタ・ロジックで置換される。
修正された加算器50内のロジックは、それ独自の、丸めビットR、S、U、O、及びEのセットを生成する。修正された加算器50がFMA2サブ演算を実行するタスクを課されていることをMが指示するときに、修正された加算器50は、FMA1サブ演算を実行した修正された乗算器45によって事前に生成されている複数の丸めビットR、S、U、O、Z、及びEをさらに受け取る。
Mが2進数の1であるケースについては、ラウンド・ビット選択ロジック175は、修正された乗算器45からの丸めビットE、R、及びS、修正された加算器50からの丸めビットE、R、及びS、又はこれら2つの何らかの混合若しくは組合せが、最終的な丸められた仮数結果を生成するために加算器の丸めモジュール180によって使用されるかどうかを決定する。たとえば、実行されている演算がFMA2サブ演算でない場合(すなわち、M=0)、丸めモジュール180は、加算器生成丸めビットE、R、及びSを使用する。代替的に、累算が、修正された乗算器45で行われており(すなわち、M=1及びZ=1)、アンダーフローがなかった場合(すなわち、U=0)、選択された乗算器生成丸めビットE、R、及びSは、最終的な丸められた結果を作り出すために丸めモジュール180によって必要とされるあらゆるものを提供する。
可変位置丸めモジュール180は、修正された加算器50の遠隔計算機能の一部として提供され、一実装では、1の補数の実効減算から結果として得られる正の差の丸めを収容し、それに加えて、また異なる仕方で、実効減算ではない加算から結果として得られる正の和の丸めを収容する。丸めモジュール180は、選択されたラウンド・ビットRとスティッキー・ビットSともし提供されていればガード・ビットG(図示せず)とを、従来のユニタリ加算/減算ユニットがそのようなビットを処理する方式と似た方式で処理する。しかしながら、丸めモジュール180は、少なくとも1つの補助入力、すなわち、1の補数の実効減算が修正された乗算器45によって実行された場合に循環桁上げ補正が必要であることを指示し得る、選択された循環桁上げビットEを受け入れるように、従来の設計から修正される。選択されたR、S、及びE入力を使用することで、丸めモジュール180は、中間結果ベクトルと符号付き0との和を正しく丸めて、正しい、IEEE準拠結果を作り出すが、これは浮動小数点計算設計の実務における当業者に理解されるであろう。
上で指摘されているように、修正された加算器50は、いくつかの型の従来の累算演算を実行するために近接経路165を必要とし得るが、本明細書で説明されているFMA演算を実行するのに近接経路165を必要としない。したがって、本明細書で説明されている型のFMA演算を実行するときに、近接経路ロジック165は、FMA計算中に節電するため静止状態に保持され得る。
第1及び第2のFMAサブ演算
図7〜10は、第1のFMAサブ演算(FMA1)及びその後の第2のFMAサブ演算(FMA2)を使用して非アトミック分割経路積和計算を実行する方法の一実施形態を示しており、これにおいて、FMA2サブ演算は、第1のFMA1サブ演算に時間的にも物理的にも束縛されない。
図7は、FMA1サブ演算の経路決定部分を示している。ブロック408において、FMA1サブ演算は、EffSub変数を決定する。2進数の1のEffSubは、乗算器オペランドの積へのアキュムレータ・オペランドの累算が結果として実効減算をもたらすかどうかを指示する。ブロック411において、FMA1サブ演算は、アキュムレータ・オペランドのビット単位の否定を選択的に引き起こす。ブロック414において、FMA1サブ演算は、ExpDeltaを計算する。ExpDeltaは、アキュムレータ指数及び指数バイアスによって低減される乗数及び被乗数指数の和に等しい。ExpDeltaは、加算を目的とする積仮数とアキュムレータ仮数との相対的アライメントだけでなく、EffSub変数と一緒に、アキュムレータ・オペランドとの累算がFMA1サブ演算によって実行されるかどうかも決定する。
ブロック417において、FMA1サブ演算は、経路制御信号Zを決定する。2進数の1の値は、アキュムレータ・オペランドとの総和が、修正された乗算器45回路を使用して、FMA1サブ演算において実行されることを指示する。一実装において、FMA1サブ演算は、ExpDeltaが負の1以上である場合にZに2進数の1を割り当て、さらに、EffSubが2進数の1であり且つExpDeltaが負の2である場合にZに2進数の1を割り当てる。他の実装では、ExpDelta及びEffSubの数空間を異なる仕方で切り分け得る。
図8は、FMA1サブ演算の乗算及び条件付き累算部分を示す機能ブロック図である。ブロック420において、FMA1サブ演算は、累算オペランドのための累算経路を選択する。Zが2進数の0である場合、ブロック426において、FMA1サブ演算は、アキュムレータ・オペランドをさらに累算することなく、乗算器オペランドの部分積の総和を計算する。代替的に、Zが2進数の1である場合、ブロック423において、FMA1サブ演算は、選択的に補数をとられたアキュムレータ仮数をExpDelta値の関数である量だけアライメントするが、これは一実装ではExpDeltaにシフト定数を加えた値に等しい。
ブロック426/429において、FMA1サブ演算は、(a)乗数及び被乗数オペランドの部分積(426)か、又は(b)乗数及び被乗数オペランドの部分積とアキュムレータ・オペランド(429)かの、いずれかの第1の累算を実行する。ブロック432において、FMA1サブ演算は、総和の最上位先頭桁の必要な任意のキャンセルを予想するために先頭桁予測を条件付きで実行する。先頭桁予測は、1型FMA演算75であるFMA演算上で調整され、ブロック429の総和の一部分と並列に実行される。代替的に、先頭桁予測ロジックは、ブロック426又はブロック429のいずれかによって作り出される結果に対して接続され、使用され得る。
ブロック426又はブロック429及び432において実行されるアクションの結果として、FMA1サブ演算は、丸められていない、非冗長正規化総和結果145を作り出す(ブロック435)。これから、FMA1サブ演算は、記憶形式中間結果150を生成する(ブロック438)。記憶形式中間結果150が記憶されるか、又は転送バス40にディスパッチされると、FMA1サブ演算は完結し、FMA演算に無関係であり得る他の演算を実行するようにFMA1サブ演算を実行したリソース(たとえば、修正された乗算器45などの命令実行ユニット)を解放する。当業者であれば、これは連続的な段階を通じて複数の演算を同時に処理することができるパイプライン化された乗算器に等しく適用可能であることを理解するであろう。
図9A及び9Bは、記憶形式中間結果150を生成するプロセスをより詳しく示している。ブロック441において、FMA1サブ演算は、実効減算を構成したアキュムレータ・オペランドとの累算に起因して循環桁上げ補正が保留中であるかどうかを決定する。ZとEffSubの両方が2進数の1(すなわち、1型FMA演算75又は4型FMA演算90)であり、ブロック435からの丸められていない非冗長結果が正である場合、FMA1サブ演算は、変数Eに2進数の1を割り当てる。
ブロック444において、FMA1サブ演算は、負の場合に、仮数をビット単位に否定することと、シフト演算を介して、標準化された記憶形式に仮数を正規化することによって、初期仮数結果(GMant)を作成する。
ブロック447において、FMA1サブ演算は、中間結果符号(IRSgn)を生成する。Eが2進数の0であり、Z及びEffSubが両方とも2進数の1である場合、IRSgnは、論理XNOR、又は被乗数及び乗数符号ビットである。そうでない場合、IRSgnは、被乗数及び乗数符号ビットの論理XORである。
ブロック453において、FMA1サブ演算は、PNExpを、SC+乗数及び被乗数指数値の和からExpBiasを引いた値として生成する。
ブロック456において、FMA1サブ演算は、PNMantの正規化を考慮するようにPNExpを減じ、それによって、中間結果指数値(IRExp)を生成する。
ブロック459において、FMA1サブ演算は、中間アンダーフロー(U)及び中間オーバーフロー(O)ビットを決定する。
ブロック462において、FMA1サブ演算は、初期仮数(GMant)の最上位ビットから中間結果仮数(IRMant)を作成する。
ブロック465において、FMA1サブ演算は、中間結果ベクトルIRvectorを一緒に構成するIRSgn、IRMant、及びIRExpを、リネーム・レジスタなどの記憶装置に保存する。
ブロック468において、FMA1サブ演算は、GMantのLSB及び部分積加算器240のシフトアウトされたビット(XtraStky)を、ラウンド(R)及びスティッキー(S)ビットに、さらに代替的一実装ではガード・ビット(G)に低減する。
ブロック471において、FMA1サブ演算は、R、S、E、Z、U、及びOビットと、提供されていればGビットとを、丸めキャッシュ55に記録する。
図10は、非アトミック分割経路FMA計算の第2のFMAサブ演算を示す機能ブロック図である。
ブロック474において、FMA2サブ演算は、リネーム・レジスタなどの記憶装置に事前に保存されている中間結果ベクトルIRvectorを受け取る。代替的に、FMA2サブ演算は、転送バスからIRVectorを受け取る。
ブロック477において、FMA2サブ演算は、丸めキャッシュ55などの記憶装置に事前に保存されている丸めビットを受け取る。代替的に、FMA2サブ演算は、転送バスから丸めビットを受け取る。
ブロック480において、FMA2サブ演算は、アキュムレータ入力値を受け取る。
判断ブロック483において、FMA2サブ演算は、ブロック474で受け取られたZビットを調べる。Zビットが2進数の1(又は真)であり、アキュムレータとの総和がすでにFMA1サブ演算によって実行されていることを指示している場合、流れはブロック486に進む。そうでなければ、流れはブロック489に進む。
ブロック486において、FMA2サブ演算は、アキュムレータ入力値の指数及び仮数フィールドをゼロに修正する。一実装において、FMA2サブ演算は、入力アキュムレータの符号ビットを修正しない。その後、ブロック492において、FMA2サブ演算は、中間結果ベクトルと符号付き0オペランドとの和を計算する。次いで、流れは、ブロック494に進む。
ブロック489において、FMA2サブ演算は、中間結果ベクトルとアキュムレータとの和を計算する。次いで、流れは、ブロック494に進む。
ブロック494において、FMA2サブ演算は、FMA1サブ演算によって生成されたZ、U、及びOビットを、FMA2サブ演算によって生成されたU及びOビットとともに使用して、和の仮数を正しく丸めるために丸めビットE、E、R、R、S、及びSのうちのどれを使用すべきかを選択する。
ブロック496において、FMA2サブ演算は、選択された丸めビットを使用して和を正しく丸める。仮数丸めプロセスと並列に、FMA2サブ演算は、IRExpを選択的にインクリメントする(ブロック498)。この方式で、FMA2サブ演算は、最終的な丸められた結果を作り出す。
図7〜10に示されているアクションの多くは、図示されている順序で実行される必要はないことが理解されるであろう。さらに、図7〜10に示されているアクションのうちのいくつかは、互いに並列に実行され得る。
計算型への適用
この節では、上で説明されている様々な変数値の間の機能的関係が図2の計算の5つの異なる「型」にどのように適用されるかを説明する。この節では、PNMantの計算、符号、及び正規化と、各々のデータ型に関連するEffSub、ExpDelta、Z、E、及びIntSgnの値とに注目する。
第1の型
図2に示されているように、1型FMA計算75は、演算が実効減算を伴い(したがって、EffSub=1)、CがAとBとの積に関して大きさが十分近く(たとえば、−2≦ExpDelta≦1)、修正された乗算器45がCとの累算を実行するように選択され(したがって、Z=1)、その結果マス・キャンセルが生じ得る計算として特徴付けられる。
累算が修正された乗算器45において実行され、その結果、実効減算をもたらす(すなわち、EffSub=1及びZ=1)ので、アキュムレータ・アライメント及び注入ロジック220は、部分積加算器240内に注入する前にアキュムレータ・オペランド仮数値Cのビット単位の否定を引き起こし、且つ/或いは選択する。アキュムレータ・アライメント及び注入ロジック220は、ExpDeltaを使用して、部分積加算器240内の部分積に対してアキュムレータ仮数をアライメントする。
次いで、丸められていない非冗長値145(すなわち、PNMant)への完全総和が、部分積の総和の中にこの追加の選択的にビット単位否定されアライメントされたアキュムレータ入力値を含む、従来技術の乗算実行ユニットに典型的な方法に従って実行される。したがって、PNMantは、1の補数形式で、乗数及び被乗数仮数値の積とアキュムレータ仮数値との間の算術的差を表す。
PNMantは、正又は負であるものとしてよい。PNMantが正である場合、循環桁上げが必要であり、保留循環桁上げインジケータEは2進数の1を割り当てられる。PNMantが負である場合、循環桁上げは不要であり、Eは2進数の0を割り当てられる。Eの割り当てられた値は、PNMantの関数であるだけでなく、1型計算75に対するものであるときに2進数の1であるZ及びEffSub双方の関数でもあることが理解されるであろう。
部分積及びアキュムレータ入力総和の一部と並列に、最上位先頭桁の任意の必要なキャンセルを予想するために先頭桁予測が実行される。前の方で指摘されたように、これは、好ましい一実装では、PNMantへの総和の間、最終加算器125に対して並列な回路において実行される。
浮動小数点計算設計の実務における当業者によって理解されるように、先頭桁の減算キャンセルが生じていない場合でも、PNMantは、本発明によって説明され採用されている中間結果150のための所望の記憶形式とアライメントするために、PNExpへのSCの寄与に従って0、1、又は2ビット位置の正規化を必要とし得る。マス・キャンセルが生じる場合、著しく多くのシフトが必要になり得る。さらに、PNMantが負である場合、値は、ビット単位で否定される。この選択的な正規化及びビット単位否定は、初期仮数値GMantを作り出すためにPNMant上で実行され、その最上位mビットは中間結果仮数IRMantになる。
中間結果符号IRSgnは、Eの値に依存して、被乗数符号ビットAと乗数符号ビットBとの論理XOR又はXNORのいずれかとして計算される。Eが2進数の1である場合、IRSgnは、被乗数符号ビットと乗数符号ビットとの排他的論理和(XOR)として計算される。Eが2進数の0である場合、IRSgnは、有利に、被乗数符号ビットと乗数符号ビットとの排他的論理否定和(XNOR)として計算される。
次に、FMA2演算を参照すると、修正された加算器50は、経路制御信号Zを含む、記憶され又は転送された丸めビットを受け取る。Zは1であるので、最終的な積和結果を作り出すために、中間結果ベクトルIRVectorは、丸めと、潜在的に他のわずかな調整とを必要とする。一実装において、修正された加算器50は、中間結果ベクトルIRVectorを、供給される第2のオペランド、アキュムレータCとに代わって、0オペランド(又は、別の実装では、2進数符号付き0オペランド)と総和する。
最終的な処理の一部として、修正された加算器50は、総和及び丸め完了の前に、より大きな数値範囲を包含するように、たとえば、FMA演算のターゲット・データ型に対するアンダーフロー及びオーバーフロー指数範囲を包含するように、受け取られたIRExpを修正することができる。受け取られた値Z=1ビットに従って、修正された加算器50は、大部分は従来型の、IRExpのインクリメントを含み得るプロセスである方式で受け取られたR、S、U、O、及びEビットを使用して、IRVectorを丸める。
第2の型
図2に示されているように、2型FMA計算80は、演算が実効減算を伴わず(したがって、EffSub=0)、CがAとBとの積に関して大きさが十分小さく、修正された乗算器45がCとの累算を実行するように選択される(したがって、Z=1)計算として特徴付けられる。
演算が結果として実効減算をもたらさないので(すなわち、EffSub=0)、アキュムレータ・アライメント及び注入ロジック220は、部分積加算器240内に注入する前にアキュムレータ・オペランド仮数値Cのビット単位の否定を引き起こし又は選択することをしない。
アキュムレータ・アライメント及び注入ロジック220は、アキュムレータ仮数を部分積加算器240に注入して、ExpDeltaを使用して部分積に対してアキュムレータ仮数をアライメントする。
負の値のPNMantは作り出されない。さらに、作り出されるPNMantの正の値は、1の補数の減算の結果ではなく、したがって、循環桁上げ補正を必要としない。したがって、保留循環桁上げインジケータEは、2進数の0を割り当てられる。
これは、実効減算ではないので、先頭桁の減算マス・キャンセルは発生せず、その結果、そのようなキャンセルを予想するために先頭桁予測が実行される必要はない。代替的に、先頭桁予測は、PNExpへのSCの寄与に従って0、1、又は2ビット位置の必要な正規化を予想するために使用され得る。
A及びBの積と、Cとの総和は、浮動小数点計算設計の実務における当業者には理解されるであろうが、他の場合に乗数と被乗数との積が有するであろうよりも1桁位置大きい算術有効桁又は重みを有する算術的オーバーフローを作り出し得る。その結果、本発明によって説明され採用されている中間結果のための所望の記憶形式でその値をアライメントするために、PNMantの0、1、又は2ビット位置の正規化が必要な場合がある。この正規化は、初期仮数値GMantを作り出し、その最上位mビットは中間結果仮数IRMantになる。
事前正規化された指数PNExpは、最初に入力乗数及び被乗数指数値を加算し、次いで任意の指数バイアス値を減算し、最後にZ=1となる最も負のExpDeltaに従ってSC=2を加算することによって計算される。図2が2型計算について示しているように、Cの大きさは、AとBとの積の大きさよりも著しく大きくはなく、したがって、その結果得られる和は入力アキュムレータ以上となる。
演算は実効減算ではないので(すなわち、EffSub=0)、中間結果符号IRSgnは、被乗数符号ビットAと乗数符号ビットBとの論理XORとして計算される。
次に、FMA2演算を参照すると、修正された加算器50は、経路制御信号Zを含む、記憶され又は転送された丸めビットを受け取る。Zは2進数の1であるので、最終的な積和結果を作り出すために、中間結果ベクトルIRVectorは、わずかな何らかの最終処理、主として丸めを必要とする。一実装において、修正された加算器50は、中間結果ベクトルIRVectorを、供給される第2のオペランド、アキュムレータCとに代わって、0オペランド(又は、別の実装では、2進数符号付き0オペランド)と総和する。
最終的な処理の一部として、修正された加算器50は、より大きな数値範囲を包含するように、たとえば、FMA演算のターゲット・データ型に対するアンダーフロー及びオーバーフロー指数範囲を包含するように、IRExpを修正することができる。修正された加算器50は、大部分は従来型の、IRExpのインクリメントを含み得るプロセスである方式でIRVectorを丸めて、最終的な正しい結果を作り出す。
第3の型
図2に示されているように、3型FMA計算85は、演算が実効減算を伴わず(したがって、EffSub=0)、CがAとBとの積に関して十分に大きく、修正された加算器50がCとの累算を実行するように選択される(したがって、Z=0)計算として特徴付けられる。
したがって、EffSubは、2進数の0である。さらに、経路制御信号Zは、2進数の0であり、アキュムレータ・オペランドとの総和が実行されないことを指定する。また、Z及びEffSubは、両方とも2進数の0なので、保留循環桁上げインジケータEは、2進数の0を割り当てられる。
Zは2進数の0なので、アキュムレータ・アライメント及び注入ロジック220は、乗算器ユニット部分積総和ツリー内のアキュムレータ入力の仮数をアライメントしない。代替的に、アキュムレータ・アライメント及び注入ロジック220は、そのようなアライメントされた入力に算術的値0を持たせる。
次いで、丸められていない非冗長値への部分積の完全総和は、入力アキュムレータ仮数値を含まない、従来技術の乗算実行ユニットに典型的な方法に従って実行される。このFMA型は、実効減算ではないので(すなわち、EffSub=0)、総和は、正のPNMantを作り出し、これはSumSgnによって指示される。それに加えて、PNMantの正の値は、1の補数の減算の結果ではなく、したがって、循環桁上げ補正を必要としない。
これは、実効減算ではないので、先頭桁の減算マス・キャンセルは発生せず、その結果、そのようなキャンセルを予想するために先頭桁予測が実行されはしない。
AとBとの積は、乗数及び被乗数仮数の積内に1桁位置の算術的オーバーフローを作り出し得る。その結果、正の丸められていない非冗長値の0又は1ビット位置の正規化が、本発明によって説明され採用されている所望の中間結果形式とその値をアライメントするために必要な場合がある。この正規化は、初期仮数値GMantを作り出し、その最上位mビットは中間結果仮数IRMantになる。
事前に決定されている経路制御信号Zは2進数の0であり、累算が実行されていないことを指示するので、中間結果符号IRSgnは、被乗数符号ビットAと乗数符号ビットBとの論理XORとして計算される。
次に、FMA2演算を参照すると、修正された加算器50は、Zを含む、記憶され又は転送された丸めビットを受け取る。Zは2進数の0なので、修正された加算器50は、中間結果ベクトル、第1のオペランドを、アキュムレータC、第2のオペランドと総和させる。
この累算を実行する前に、修正された加算器50は、より大きな数値範囲を包含するように、たとえば、FMA演算のターゲット・データ型に対するアンダーフロー及びオーバーフロー指数範囲を包含するように、IRExpを修正することができる。これは、アキュムレータ値が結果を支配する3型計算85なので、IRExpは、アキュムレータ入力指数値よりも小さくなる。
有利には、これは、修正された加算器50の2つのオペランドの遠隔経路累算を可能にする。遠隔経路累算では、より小さい指数値を有するオペランドの仮数は、アライメントの間に右にシフトされる。次いで、所望の丸めビットを超えてこうしてシフトされた仮数ビットはいずれも、丸め計算に寄与する。アキュムレータは結果を支配するので、これは丸め計算に対するビットに寄与せず、必要な丸め計算を簡素化し得る。
修正された加算器50は、修正された加算器50によって実行される演算の一部として作り出されるG(もしあれば)、R、S、及びE(2進数値0を有する)丸めビットを、R、S、Eと併せて使用して、中間結果とアキュムレータ入力値との和を丸めて、浮動小数点計算設計の分野における当業者によって理解されるような、FMA計算に対する最終的な丸められた正しい結果を作り出す。
第4の型
図2に示されているように、4型FMA計算90は、演算が実効減算を伴い(したがって、EffSub=1)、CがAとBとの積に関して大きさが十分小さく、修正された乗算器45がCとの累算を実行するように選択される(したがって、Z=1)計算として特徴付けられる。
累算は、修正された乗算器45において実行され、その結果、実効減算(すなわち、EffSub=1及びZ=1)をもたらすので、アキュムレータ・アライメント及び注入ロジック220は、部分積加算器240内に注入する前にアキュムレータ・オペランド仮数値Cのビット単位の否定を引き起こし、且つ/或いは選択する。アキュムレータ・アライメント及び注入ロジック220は、ExpDeltaを使用して、部分積加算器240内の部分積に対してアキュムレータ仮数をアライメントする。
AとBとの積は、Cよりも大きさが著しく大きいので、先頭桁の減算マス・キャンセルが発生せず、その結果、そのようなキャンセルを予想するために先頭桁予測が実行されはしない。
さらに、総和プロセスは、正のPNMantを作り出す。その結果、保留循環桁上げインジケータEは、2進数の1を割り当てられ、その後、循環桁上げ補正が中間結果仮数に対して保留になっていることを修正された加算器50に信号で伝える。
浮動小数点計算設計の実務における当業者によって理解されるように、PNMantは、PNExpへのSCの寄与に従って、本発明によって説明され採用されている中間結果に対する所望の記憶形式にアライメントするために、0、1、又は2ビット位置のシフト又は正規化を必要とし得る。次いで、この正規化は、丸められていない非冗長値上で選択的に実行され、初期仮数値GMantを作り出し、その最上位mビットは中間結果仮数IRMantになる。
4型計算90は、実効減算を構成する(すなわち、EffSub=1)Cの累算を伴い(すなわち、Z=1)、循環桁上げを必要とするコンテキストにおいて正のPNMantを作り出すので(すなわち、Eは1)、中間結果符号IRSgnは、被乗数符号ビットAと乗数符号ビットBとの論理XORとして計算される。
次に、FMA2演算を参照すると、修正された加算器50は、経路制御信号Zを含む、記憶され又は転送された丸めビットを受け取る。Zは1であるので、最終的な積和結果を作り出すために、中間結果ベクトルIRVectorは、わずかな何らかの最終処理、主として丸めを必要とする。一実装において、修正された加算器50は、中間結果ベクトルを、供給される第2のオペランド、アキュムレータCとに代わって、0オペランド(又は、別の実装では、2進数符号付き0オペランド)と総和させる。
0(又は2進数符号付き0)とのこの累算を実行する前に、修正された加算器50は、より大きな数値範囲を包含するように、たとえば、FMA演算のターゲット・データ型に対するアンダーフロー及びオーバーフロー指数範囲を包含するように、IRExpを修正することができる。
Eビット2進数値が記憶形式中間結果150において受け取られたことに応答して、循環桁上げ補正が、第1のマイクロ命令の間に潜在的に実行される1の補数の実効減算に従って必要になることがある。そのため、Eビットは、修正された加算器50実行ユニットの修正された丸めロジックへの補助入力として、記憶形式中間結果150のG(もしあれば)、R、及びSビットとともに提供される。
次いで、修正された丸めロジックは、G(もしあれば)、R、S、及びE補助入力を使用して、中間結果ベクトルと符号付き0との和の正しい丸めを計算して、浮動小数点計算設計の実務における当業者に理解されるであろうような、FMA計算のこの第4の型に対する正しい結果を作り出す。
第5の型
図2に示されているように、5型FMA計算は、演算が実効減算を伴い(すなわち、EffSub=1)、CがAとBとの積に関して大きさが十分に大きく、修正された加算器50がCとの累算を実行するように選択される(すなわち、Z=0)計算として特徴付けられる。
累算は、修正された乗算器45において実行されないので、アキュムレータ・アライメント及び注入ロジック220は、部分積加算器240総和ツリー内のCをアライメントしない。或いは、アキュムレータ・アライメント及び注入ロジック220は、そのようなアライメントされた入力に算術的値0を持たせる。修正された乗算器45は、従来技術の乗算実行ユニットに典型的な方法に従ってPNMantへの部分積の完全な総和を実行する。
Cとの累算は実行されていないので、先頭桁の減算マス・キャンセルは発生せず、その結果、それを予想するために先頭桁予測が実行されはしない。さらに、正のPNMantが作り出されるが、それは1の補数の減算の結果ではない。したがって、これは循環桁上げ補正を必要とせず、Eは、2進数の0を割り当てられる。
浮動小数点計算設計の実務における当業者によって理解されるように、PNMantは、中間結果150に対する所望の記憶形式にアライメントするために、0又は1ビット位置のシフト又は正規化を必要とし得る。この正規化は、初期仮数値GMantを作り出し、その最上位mビットは中間結果仮数IRMantになる。
5型計算は、Cとの累算を伴わない(すなわち、Z=0)ので、中間結果符号IRSgnは、被乗数符号ビットAと乗数符号ビットBとの論理XORとして計算される。
次に、FMA2演算を参照すると、修正された加算器50は、Zを含む、記憶され又は転送された丸めビットを受け取る。Zは0であるので、最終的な積和結果を作り出すために、中間結果ベクトルIRVectorは、アキュムレータCと累算される必要がある。
これは、アキュムレータ値が結果を支配する5型計算なので、IRExpは、アキュムレータ入力指数値よりも小さくなる。有利には、これは、修正された加算器50の2つのオペランドの遠隔経路累算を可能にする。遠隔経路累算では、より小さい指数値を有するオペランドの仮数は、アライメントの間に右にシフトされる。次いで、所望の丸めビットを超えてこうしてシフトされた仮数ビットはいずれも、丸め計算に寄与する。アキュムレータは結果を支配するので、これは丸め計算に対するビットに寄与せず、必要な丸め計算を簡素化し得る。
記憶形式中間結果150から受け取られた保留循環桁上げインジケータEは、2進数の0なので、FMA1演算から保留になっている循環桁上げ補正はない。そのため、Eビットは、修正された加算器50実行ユニットの修正された丸めロジックへの補助入力として、記憶形式中間結果150のR及びSビット、並びにもしあればGビットとともに提供される。
しかしながら、修正された加算器50によって実行される累算は、1の補数の実効減算を別個に引き起こし得る。したがって、修正された丸めロジックは、循環桁上げを含め、丸めビットを生成して、中間結果ベクトルとアキュムレータ入力値との和の正しい丸めを計算して、浮動小数点計算設計の実務における当業者に理解されるであろうような、FMA計算のこの第5の型に対する正しい結果を作り出す。
専用マイクロ命令
本発明の一実装の別の態様において、トランスレータ及び/又はマイクロコードROM20は、FMA命令をそれぞれの乗算及び加算ユニットによってそれぞれ実行される第1及び第2の専用マイクロ命令に翻訳又は変換するように構成される。第1の(又はそれ以上の)専用マイクロ命令(複数可)は、たとえば、説明されている目的に適した最小の修正を有する従来技術の乗算ユニットに類似する乗算実行ユニットにおいて実行され得る。第2の(又はそれ以上の)専用マイクロ命令は、たとえば、説明されている目的に適した最小の修正を有する従来技術の加算器ユニットに類似する加算器実行ユニットにおいて実行され得る。
図11は、融合FMA命令535の、第1及び第2の専用マイクロ命令553及び571へのFMA命令翻訳又は変換の一実施形態を示す図である。非限定的な例において、融合FMA命令535は、命令OPコード・フィールド538と、デスティネーション・フィールド541と、第1のオペランド(被乗数)フィールド544と、第2のオペランド(乗数)フィールド547と、第3のオペランド(アキュムレータ)フィールド550とを備える。
FMA命令535は、OPコード・フィールド538によって指示されるように、乗算加算命令、乗算減算命令、負乗算加算命令、又は負乗算減算命令であり得る。ちょうどFMA命令535にいくつかの型があり得るように、第1の専用マイクロ命令553にもいくつかの型があり得、たとえば、乗算加算マイクロ命令、乗算減算マイクロ命令、負乗算加算マイクロ命令、及び負乗算減算マイクロ命令があり得る。これらの型の特性は、もしあれば、関連するマイクロ命令553のOPコード・フィールド556に反映される。
第1の専用マイクロ命令553は、第1から第5の型のFMA計算に必要な算術計算の何らかの部分の実行を指図する。実行される具体的な計算は、具体的な型に依存して変わる。第1の専用マイクロ命令553は、上で説明されている修正された乗算器45などの、第1の実行ユニットにディスパッチされる。
第2の専用マイクロ命令571は、第1から第5の型のFMA計算に必要な残りの算術計算の実行を指図する。第2の専用マイクロ命令571によって実行される具体的な計算も、具体的な型に依存して変わる。現在の実装において、第2の専用マイクロ命令553は、上で説明されている修正された加算器50などの、第2の実行ユニットにディスパッチされる。第2の専用マイクロ命令571は、浮動小数点乗算加算融合演算又は浮動小数点乗算減算融合演算の有利な実装に従って、亜型、たとえば、Add又はSubtractを有し得る。
より具体的には、第1の専用マイクロ命令553は、第1、第2、及び第3の入力オペランド544、547、及び550を指定し、それぞれ、被乗数オペランドA、乗数オペランドB、及びアキュムレータ・オペランドCと称され得る。第1の専用マイクロ命令は、デスティネーション・フィールド559をさらに指定することができ、一時レジスタを指すものとしてもよい。代替的に、デスティネーション・レジスタ559は暗黙的である。
第1の専用マイクロ命令553は、FMA1サブ演算の実行、すなわち、AとBとの部分積の、さらに条件付きでCとの累算を指図して、丸められていない記憶形式中間結果150を作り出す。第1の専用マイクロ命令553は、EffSub及びExpDelta変数の決定をさらに指図し、ExpDelta及びEffSub値の所定のセットについて、2進数の1がZビットに割り当てられるようにする。次いで、これは、いくつかの依存するプロセスを制御する。
2進数の1のZビットは、アキュムレータ・オペランドとの総和が第1の演算で実行され、第2のマイクロ命令によって実行される必要はないことを指定する。次いで、Zビット指定及びExpDeltaは、部分積加算器240内の選択的に補数をとられたアキュムレータ仮数のアライメントを引き起こすために使用され、これはこの追加の項を受け入れるために適切な修正を有する。
第1の専用マイクロ命令553は、さらに、丸められていない非冗長値(PNMant)への完全総和が従来技術の乗算実行ユニットに典型的な方法に従って、ただし部分積の総和の中に追加の選択的にビット単位否定されアライメントされたアキュムレータ入力値C、又は
[外2]
Figure 0006684713
を含み、実行されることを指図する。PNumが負である場合、この条件は、信号SumSgnによって指摘される。
第1の専用マイクロ命令553は、PNMantがシフトされビット単位で否定されることを指図して初期仮数値(GMant)を作り出し、その後、GMantを低減して記憶形式中間結果150の中間結果仮数(IMant)を作り出すことが続く。こうして、中間結果仮数IMantは、このEffSub指定計算からの1の補数の算術差の正規化された絶対値であり、循環桁上げについてのいずれの補正も保留する。
第1の専用マイクロ命令553は、中間結果指数値の計算をさらに指図する。第1に、事前正規化された指数値(PNExp)は、Zが2進数値1を割り当てられている最も負のExpDeltaに従って、被乗数指数Aと乗数指数Bとの和を指数バイアスExpBiasによって低減し、次いでシフト定数SCに加算したものに等しくなるように生成される。次いで、中間結果指数値(IRExp)が、PNExpから生成され、正規化シフター130によって実行される仮数の正規化を考慮した量だけデクリメントされる。
第1の専用マイクロ命令553は、中間結果符号IRSgnの計算をさらに指図する。中間結果符号IRSgnは、中間結果仮数IRMant及び中間結果指数IRExpと一緒に、記憶形式中間結果150ベクトルIRVectorを構成する。
第1の専用マイクロ命令553は、Zに加えていくつかの丸めビットをさらに生成させる。中間結果仮数に組み込まれていないGMantの最下位ビットは、表現がラウンド(R)及びスティッキー(S)ビットに、及び一実装ではさらにガード(G)ビットに低減される。部分積加算器240が、AとBとの部分積と、Cとを累算しており、演算が正のPNMant値を作り出した実効減算であった場合に、2進数の1が循環桁上げビットEに割り当てられ、循環桁上げを実行する必要があることを指示する。第1の専用マイクロ命令は、中間アンダーフロー(U)及び中間オーバーフロー(O)ビットをさらに決定させる。
最後に、第1の専用命令553は、一実装では、記憶形式中間結果150ベクトルIRVectorをメモリに記憶させ、別の実装では、それを転送させ、またさらに別の実装では、それを記憶させることと転送させることの両方を行わせる。同様に、第1の専用命令553は、一実装では、丸めビットをメモリに記憶させ、別の実装では、それを転送させ、また別の実装では、それを記憶させることと転送させることの両方を行わせる。これは、第1の専用命令を実行するタスクを課されている実行ユニットが、第1のFMAマイクロ命令が実行されてから第2のFMAマイクロ命令が実行されるまでの間にFMA演算に無関係の他の演算を実行することを可能にする。
第2の専用マイクロ命令571は、OPコード574を提供し、第1及び第2の入力加算器オペランド580及び583をそれぞれ指定する。第2の専用マイクロ命令571は、FMA2演算を実行させる。これは、Cが第1の専用マイクロ命令571によって累算されなかった場合、中間結果仮数とCとの条件付き累算を含む。第2の専用マイクロ命令571は、FMA演算の最終的な丸められた結果の生成をさらに引き起こす。
第1のアキュムレータ・オペランド580は、その値として、第1の専用マイクロ命令553によって生成される積を有し、第2のアキュムレータ・オペランド583は、その値として、第1の専用マイクロ命令によって指定された同じアキュムレータ値を有する。一実装において、第2の専用マイクロ命令571のソース・オペランド・フィールド580は、第1の専用マイクロ命令553のデスティネーション・フィールド559と同じレジスタを指す。第2の専用マイクロ命令571は、デスティネーション・レジスタ577をさらに指定し、これは一実装においてFMA命令535のデスティネーション・フィールド541と同じレジスタである。
結び
現在の実装は、実効減算の間における1の補数の累算への対応を記述しているが、代替的実装は、実効減算の間に2の補数の累算を採用するように本発明の方法を適応させることができ、これは算術又は浮動小数点計算設計の実務における当業者によって理解されるであろう。
いくつかの利点が、本発明によって実現される。これは、特にIEEE丸め要求条件に関して、他の実装では明確に実現されていない望ましいFMA算術結果のIEEE仕様互換性及び正しさを実現する。
本発明は、別個に利用可能な乗算器及び加算器ユニットを保持することによって命令ディスパッチに対する独立算術機能ユニットの可用性を最大化し、これにより、コンピュータ・プロセッサが特定の投資実装コストに対してILPをより完全に活用することを可能にする。別の言い方をすれば、これは、最小限実装されたハードウェアの同時利用を最大にし、望む通り最も頻繁に期待される計算を可能な限り高速に完了すること可能にする。これは、算術結果のスループットを向上させる。これが可能になるのは、特別な型の必要な第1及び第2の(又はさらに多くの)マイクロ命令が、時間的に及び/又は物理的に切り離された方式でディスパッチされ実行され得るからである。こうして、FMAの第1のそのようなマイクロ命令が乗算機能ユニットにディスパッチされる間に、第2又はそれ以上の無関係のマイクロ命令(複数可)が1つ又は複数の加算器機能ユニットに同時にディスパッチされ得る。
同様に、FMAの第2のそのようなマイクロ命令が加算器機能ユニットにディスパッチされる間に、乗算機能性を必要とする任意の他の無関係のマイクロ命令が乗算機能ユニットに同時にディスパッチされ得る。
その結果、そのような提供される乗算及び加算器機能ユニットの数は、要求システムの望ましい全体的性能及びILP能力に応じて、完全に揃えたモノリシックFMAハードウェアに比べて機能ユニット当たり少ない実装コストで、より柔軟に構成され得る。コンピュータ・システムがマイクロ命令を再順序付けする能力がこうして高められ、コスト及び電力消費量が低減される。
本発明は、他の設計では必要となるような命令待ち時間を最短にするために大きな特殊目的のハードウェアを使用することを必要としない。他のFMAハードウェア実装は、予想正規化、予想加算、予想符号計算、及び複雑な丸め回路などの、大きい複雑な回路機能性を必要とする。これらの複雑な要素は、多くの場合、最終設計を実現する際にクリティカルなタイミング経路となり、計算の間にさらなる電力を消費し、実装するために貴重な物理的回路空間を必要とする。
本発明は、従来技術によって提供され得るようにより単純な加算又は乗算命令に対する待ち時間を最短にするために大きなFMAハードウェア内に特別なバイパス回路又はモダリティの実装を行うことを必要としない。
本発明の他の実装は、特別な型の第1のマイクロ命令の実行の間に算術演算をより多く、又はより少なく実行することができ、また特別な型の第2のマイクロ命令の実行の間に算術演算をより多く、又はより少なく実行することができ、このことは、これらのマイクロ命令の計算の割り振りが異なり得ることを意味する。したがって、これらの他の実装は、別個の必要な算出ユニットのいずれかに/いずれにも修正を、より多く、又はより少なく提供することができる。したがって、これらの他の実装では、中間結果のより多く、又はより少なくを丸めキャッシュに記憶することができ、また同様に、中間結果のより多く、又はより少なくを第2のマイクロ命令に転送するステップを備えることができる。
他の実装では、説明されている丸めキャッシュを、アドレス可能レジスタ・ビット、コンテンツ・アクセシブル・メモリ(CAM)、キュー・ストレージ、又はマッピング関数として実装することができる。
他の実装は、第1のマイクロ命令を実行するための複数の別個のハードウェア又は実行ユニットを提供することができ、且つ/或いは第2のマイクロ命令を実行するための複数の別個のハードウェア又は実行ユニットを提供することができる。同様に、これらは、たとえば、区別できるソース・コード命令ストリーム若しくはデータ・ストリームのため、又はマルチコア・コンピュータ・プロセッサ実装のために、複数の丸めキャッシュを、そうするのが有利であれば提供し得る。
現在の実装は、スーパースカラー、アウト・オブ・オーダー命令ディスパッチに適応されているが、他の実装は、たとえば、丸めキャッシュを取り除くことによって、及び提供されている乗算計算ユニットから別個の加算器計算ユニットへのデータ転送ネットワークを用意することによって、インオーダー命令ディスパッチに適合され得る。FMAトランザクション型の例示的な区分化、及び本発明によって実証されている必要最小限のハードウェア修正は、インオーダー命令ディスパッチへのそのような適応において有利なものとなるであろう。本明細書では5つのFMAの型への区分化を説明しているが、より少ない、より多い、及び/又は異なる型への区分化も、本発明の範囲内にある。
また、本明細書では、FMA演算を実行するための区別できる修正された乗算及び修正された加算器ユニットを説明しているが、本発明の別の実装では、積和ユニットは、第1の積和命令に応答して第1の積和サブ演算を実行し、結果を外部メモリ記憶装置に保存し、第2の積和命令に応答して第2の積和サブ演算を実行するように構成される。
本発明は、ときにはベクトル命令型又はベクトルFMA計算とも称される、FMA計算のSIMD実装に適用可能であり、その場合、修正された乗算器の複数の事例及び修正された加算器の複数の事例があるであろう。一実施形態において、単一の丸めキャッシュは、本発明のSIMD適用のニーズに応える。別の実施形態では、複数の丸めキャッシュが、SIMD適用に応えるために用意される。
本発明は、加算又は累算を組み込むか、又は加算又は累算が後に続く、乗算計算を必要とする浮動小数点融合乗算加算計算の実行に関係しているが、他の実装は、本発明の方法を、特に中間結果のいくつかの部分に対するキャッシュの使用に関して、2つよりも多い連鎖する算術演算を必要とする算出若しくは計算に、異なる算術演算に、又はそれらの算術演算を異なる順序で実行するステップに適用することができる。たとえば、これらの方法を、乗算乗算加算又は乗算加算加算の連鎖する計算などの、他の複合算術演算(すなわち、2つ以上の算術演算子又は3つ以上のオペランドを伴う算術演算)に適用して、算術演算の精度を高めるか、又は計算スループットを向上させることが望ましいことがある。さらに、本発明のいくつかの態様−たとえば、特定のビット位置に丸める整数演算の、第1及び第2のサブ演算へのサブ分割であって、その第1のサブ演算は丸められていない中間結果を作り出し、第2のサブ演算は丸められていない中間結果から丸められた最終結果を生成する、サブ分割−は、整数算術演算に適用可能である。したがって、他の実装では、異なるステータス・ビットを必要に応じてキャッシュ・メカニズムに記録し得る。
本明細書は、便宜のために丸めビット及び他の内部ビットの使用を説明していること、及び本発明は、丸め関係又は計算制御変数のエンコードされた表現を含む、インジケータの他の形態に等しく適用可能であることが理解されるであろう。さらに、変数が「2進数の1」(「論理の1」とも称する)を有するものとして説明されている多くの場合において、本発明は、そのような変数が「2進数の0」(「論理の0」とも称する)を有するブール論理同等の代替的実施形態を包含し、これらの変数の他の表現をさらに包含する。同様に、変数が「2進数の0」を有するものとして説明されている場合、本発明は、そのような変数が「2進数の1」を有するブール論理同等の代替的実施形態を包含し、これらの変数の他の表現をさらに包含する。本明細書で使用されているように、累算という用語は、加法的な和及び加法的な差の両方を包含する方式で使用されることがさらに理解されるであろう。
さらに、「命令」という用語は、「アーキテクチャ命令」及びこれらの翻訳又は変換先となり得る「マイクロ命令」の両方を包含することが理解されるであろう。同様に、「命令実行ユニット」という用語は、マイクロプロセッサが最初にマイクロ命令に翻訳又は変換することなくアーキテクチャ命令(すなわち、ISAマシン・コード)を直接実行する実施形態を排他的に意味するものではない。マイクロ命令は、命令の一種であるため、したがって「命令実行ユニット」は、マイクロプロセッサが最初にISA命令をマイクロ命令に翻訳又は変換する実施形態をさらに包含し、命令実行ユニットは、マイクロ命令を実行することを常に、またそれだけを行う。
本明細書では、「仮数」及び「仮数部」という用語は、交換可能に使用される。「初期結果」及び「中間結果」などの他の用語は、FMA演算の異なるステージで作り出される結果及び表現を区別することを目的として使用される。また、本明細書では、一般的に、「記憶形式中間結果」を、中間結果「ベクトル」(数量を意味する)と複数の計算制御変数との両方を含むものとして言及する。これらの用語は、厳密に、又は衒学的にみなされるべきでなく、むしろ、実用主義的に、出願人の伝える意図に従い、異なる文脈において異なるものを意味し得ることを認識すべきである。
また、図1及び3〜6に示されている機能ブロックは、モジュール、回路、サブ回路、ロジック、及びデジタル・ロジック及びマイクロプロセッサ設計の分野内で一般に使用されている他の言い回しとして交換可能に記述されて、配線、トランジスタ、及び/又は1つ又は複数の機能を実行する他の物理構造で具現化されるデジタル・ロジックを指定することができる。さらに、本発明は、本明細書で示されているのと異なる仕方で明細書において説明されている機能を分配する代替的実装を包含することが理解されるであろう。
次の参照文献は、限定はしないが、FMA設計における関連する概念を説明することと、説明されている本発明の情報を与えることとを含むすべての目的に関して参照により本明細書に組み込まれている。
参照文献:
Hokenek, Montoye, Cook,“Second−Generation RISC Floating Point with Multiply− Add Fused”,IEEE Journal Of Solid−State Circuits, Vol 25, No 5, Oct 1990.
Lang, Bruguera,“Floating−Point Multiply−Add−Fused with Reduced Latency”,IEEE Trans On Computers, Vol 53, No 8, Aug 2004.
Bruguera, Lang,“Floating−Point Fused Multiply−Add: Reduced Latency for Floating−Point Addition”,Pub TBD − Exact Title Important.
Vangal, Hoskote, Borkar, Alvanpour,“A 6.2−GFlops Floating−Point Multiply−Accumulator With Conditional Normalization”,IEEE Jour. Of Solid−State Circuits, Vol 41, No 10, Oct 2006.
Galal, Horowitz,“Energy−Efficient Floating−Point Unit Design”,IEEE Trans On Computers Vol 60, No 7, July 2011.
Srinivasan, Bhudiya, Ramanarayanan, Babu, Jacob, Mathew, Krishnamurthy, Erraguntla,“Split−path Fused Floating Point Multiply Accumulate (FPMAC)”,2013 Symp on Computer Arithmetic (paper).
Srinivasan, Bhudiya, Ramanarayanan, Babu, Jacob, Mathew, Krishnamurthy, Erraguntla,“Split−path Fused Floating Point Multiply Accumulate (FPMAC)”,2014 Symp on Computer Arithmetic, Austin TX, (slides from www.arithsymposium.org).
Srinivasan, Bhudiya, Ramanarayanan, Babu, Jacob, Mathew, Krishnamurthy, Erraguntla, United States Patent 8,577,948 (B2), Nov 5, 2013.
Quach, Flynn,“Suggestions For Implementing A Fast IEEE Multiply−Add−Fused Instruction”,(Stanford) Technical Report CSL−TR−91−483 July, 1991.
Seidel,“Multiple Path IEEE Floating−Point Fused Multiply−Add”,IEEE 2004.
Huang, Shen, Dai, Wang,“A New Architecture For Multiple−Precision Floating− Point Multiply−Add Fused Unit Design”,Pub TBD, Nat’l University of Defense Tech, China (after) 2006.
Paidimarri, Cevrero, Brisk, Ienne,“FPGA Implementation of a Single−Precision Floating−Point Multiply−Accumulator with Single−Cycle Accumulation”,Pub TBD.
Henry, Elliott, Parks,“X87 Fused Multiply−Add Instruction”,United States Patent 7,917,568 (B2), Mar 29, 2011.
Walaa Abd El Aziz Ibrahim,“Binary Floating Point Fused Multiply Add Unit”,Thesis Submitted to Cairo University, Giza, Egypt, 2012 (retr from Google).
Quinell,“Floating−Point Fused Multiply−Add Architectures”,Dissertation Presented to Univ Texas at Austin, May 2007, (retr from Google).
Author Unknown,“AMD Athlon Processor Floating Point Capability”,AMD White Paper Aug 28, 2000.
Cornea, Harrison, Tang,“Intel Itanium Floating−Point Architecture”,Pub TBD.
Gerwig, Wetter, Schwarz, Haess, Krygowski, Fleischer, Kroener,“The IBM eServer z990 floating−point unit”,IBM Jour Res & Dev Vol 48 No 3/4 May, July 2004.
Wait,“IBM PowerPC 440 FPU with complex−arithmetic extensions”,IBM Jour Res & Dev Vol 49 No 2/3 March, May 2005.
Chatterjee, Bachega, et al,“Design and exploitation of a high−performance SIMD floating−point unit for Blue Gene/L”,IBM Jour Res & Dev, Vol 49 No 2/3 March, May 2005.

Claims (14)

  1. マイクロプロセッサにおいて形式±A*B±Cの融合積和演算を実行するための方法であって、A、B、及びCは入力オペランドであり、CがAとBとの積に累算される前に丸めは生じず、当該方法は、
    前記融合積和演算を、第1及び第2の積和サブ演算に分割するステップと、
    前記第1の積和サブ演算において、(i)AとBとの部分積をCと累算するか、又は(ii)AとBとの部分積のみを累算するかを選択し、前記(i)又は(ii)の場合の累算の結果から丸められていない非冗長和を生成するステップと、
    前記丸められていない非冗長和の複数のMSBから、丸められていない非冗長中間結果ベクトルを生成するステップ;
    前記丸められていない非冗長和から除外された複数のLSBから1つ以上の丸めインジケータを生成するステップ;
    前記第1の積和サブ演算がCを累算することなく前記丸められていない非冗長和を生成した場合に、前記第2の積和サブ演算において、Cを、前記丸められていない非冗長中間結果ベクトルと累算するステップと、
    前記(i)の場合に得られる前記丸められていない非冗長和又は前記(ii)の場合に前記第2の積和サブ演算で得られる非冗長和に基づいて前記丸めインジケータを利用することにより、前記融合積和演算の最終的な丸められた結果を生成するステップと、
    を含む方法。
  2. 前記第1の積和サブ演算と第2の積和サブ演算との間に、前記丸められていない非冗長和をメモリに記憶し、及び/又は前記丸められていない非冗長和を第1の命令実行ユニットから第2の命令実行ユニットに転送するステップ
    をさらに含む請求項1に記載の方法。
  3. 複数の計算制御インジケータをメモリに記憶するステップ、及び/又は複数の計算制御インジケータを第1の命令実行ユニットから第2の命令実行ユニットに転送するステップをさらに含む、請求項1又は2に記載の方法。
  4. 前記メモリは、前記第1及び第2の命令実行ユニットの外部にあり、前記丸められていない非冗長和を記憶する結果ストアと、前記第2の積和サブ演算におけるその後の計算がどのように進行すべきかを指示するように前記AとBとの部分積に付随して生成される複数の計算制御インジケータを記憶する、前記結果ストアと区別される計算制御インジケータ・ストアとを備える、請求項2又は3に記載の方法。
  5. 前記計算制御インジケータは、前記丸められていない非冗長和から算術的に正しい丸められた結果を生成するためのものである、請求項3又は4に記載の方法。
  6. 形式±A*B±Cの融合積和演算を実行するように動作可能なマイクロプロセッサであって、A、B、及びCは入力オペランドであり、CがAとBとの積に累算される前に丸めは生じず、当該マイクロプロセッサは、
    融合積和演算の第1及び第2の積和サブ演算を実行するように構成された2つ以上の命令実行ユニット
    を備え、前記第1の積和サブ演算において、(i)AとBとの部分積をCと累算すること、又は(ii)AとBとの部分積のみを累算することの間で選択が行われ、前記(i)又は(ii)の場合の累算の結果から、丸められていない非冗長和が生成され、
    前記丸められていない非冗長和の複数のMSBから、丸められていない非冗長中間結果ベクトルが生成され、
    前記丸められていない非冗長和から除外された複数のLSBから1つ以上の丸めインジケータが生成され、
    前記第1の積和サブ演算がCを累算することなく前記丸められていない非冗長和を生成した場合に、前記第2の積和サブ演算において、Cは、前記丸められていない非冗長中間結果ベクトルと累算され、
    前記(i)の場合に得られる前記丸められていない非冗長和又は前記(ii)の場合に前記第2の積和サブ演算で得られる非冗長和に基づいて丸めインジケータを利用することにより、前記融合積和演算の最終的な丸められた結果が生成される、
    マイクロプロセッサ。
  7. 前記第1の積和サブ演算によって生成された前記丸められていない非冗長和を記憶するための、前記2つ以上の命令実行ユニットの外部のメモリ、をさらに備え、前記メモリは、前記第2の積和サブ演算が実行中になるまで無期限に前記丸められていない非冗長和を記憶するように構成され、これにより、前記2つ以上の命令実行ユニットが前記第1の積和サブ演算と前記第2の積和サブ演算との間に前記融合積和演算に無関係の他の演算を実行することを可能にする、請求項6に記載のマイクロプロセッサ。
  8. 前記メモリは、前記丸められていない非冗長和を記憶する結果ストアと、前記第2の積和サブ演算におけるその後の計算がどのように進行すべきかを指示するように前記AとBとの積に付随して生成される複数の計算制御インジケータを記憶する、前記結果ストアと区別される計算制御インジケータ・ストアとを備える、請求項7に記載のマイクロプロセッサ。
  9. 前記2つ以上の命令実行ユニットは、前記第1の積和サブ演算を実行するように構成された乗算器と、前記第2の積和サブ演算を実行するように構成された加算器とを備える、請求項7又は8に記載のマイクロプロセッサ。
  10. マイクロプロセッサにおいて形式±A*B±Cの融合積和演算を実行するための方法であって、A、B、及びCは入力オペランドであり、当該方法は、
    少なくともAとBとの積を計算し、丸められていない非冗長中間結果ベクトルを生成するための第1命令を、前記マイクロプロセッサの第1の実行ユニットにディスパッチするステップであって、前記第1の実行ユニットにおいて、(i)AとBとの部分積をCと累算するか、又は(ii)AとBとの部分積のみを累算するかを選択し、前記(i)又は(ii)の場合の累算の結果から丸められていない非冗長和を生成し、前記丸められていない非冗長和の複数のMSBから、丸められていない非冗長中間結果ベクトルを生成し、前記丸められていない非冗長和から除外された複数のLSBから1つ以上の丸めインジケータを生成するステップと、
    前記(i)の場合に得られる前記丸められていない非冗長和と前記(ii)の場合に得られる丸められていない非冗長中間結果ベクトルとを受け取り、前記丸めインジケータを利用することにより、±A*B±Cの最終的な丸められた結果を生成するための第2命令を、前記マイクロプロセッサの第2の実行ユニットにディスパッチするステップと、
    ±A*B±Cの前記最終的な丸められた結果を保存するステップと、
    を含む方法。
  11. 前記丸められていない非冗長中間結果ベクトルを前記第1の実行ユニットから前記第2の実行ユニットに転送するステップ、及び/又は前記計算の丸められていない結果を複数の実行ユニットの間で共有される共有メモリに保存するステップ、をさらに含む請求項10に記載の方法。
  12. 前記第1の実行ユニットが、前記第2の実行ユニットにおけるその後の計算がどのように進行すべきかを指示するように前記AとBとの積に付随して生成される1つ以上の計算制御インジケータを生成するステップであって、前記第1の実行ユニットは、少なくともAとBとの積の前記計算及び前記丸められていない非冗長中間結果ベクトルの前記生成に付随的に前記1つ以上の計算制御インジケータを生成する、ステップと、
    前記第2の実行ユニットが前記1つ以上の計算制御インジケータを受け取り、前記丸められていない結果及び前記計算制御インジケータを使用して前記最終的な丸められた結果を生成するステップと、
    をさらに含む請求項10又は11に記載の方法。
  13. マイクロプロセッサにおいて形式±A*B±Cの融合積和演算を実行するための方法であって、A、B、及びCは入力オペランドであり、当該方法は、
    少なくともAとBとの積を計算し、丸められていない非冗長中間結果ベクトルを生成するための第1命令を、前記マイクロプロセッサの第1の実行ユニットにディスパッチするステップであって、前記第1の実行ユニットにおいて、(i)AとBとの部分積をCと累算するか、又は(ii)AとBとの部分積のみを累算するかを選択し、前記(i)又は(ii)の場合の累算の結果から丸められていない非冗長和を生成し、前記丸められていない非冗長和の複数のMSBから、丸められていない非冗長中間結果ベクトルを生成し、前記丸められていない非冗長和から除外された複数のLSBから1つ以上の丸めインジケータを生成するステップと、
    前記融合積和演算のその後の計算がどのように進行すべきかを指示するように前記AとBとの積に付随して生成される計算制御インジケータを生成するステップと、
    前記(i)の場合に得られる前記丸められていない非冗長和と前記(ii)の場合に得られる丸められていない非冗長中間結果ベクトル及び計算制御インジケータを受け取る第2命令を、前記マイクロプロセッサの第2の実行ユニットにディスパッチし、前記計算制御インジケータ及び前記丸めインジケータに従って±A*B±Cの最終的な丸められた結果を生成するステップと、
    を含む方法。
  14. 前記計算制御インジケータは、前記第1の実行ユニットがCをAとBとの積に累算したか否かの指示を含む、請求項13に記載の方法。
JP2016538834A 2014-07-02 2015-06-24 融合積和演算を実行するための方法及びマイクロプロセッサ Active JP6684713B2 (ja)

Applications Claiming Priority (19)

Application Number Priority Date Filing Date Title
US201462020246P 2014-07-02 2014-07-02
US62/020,246 2014-07-02
US201562173808P 2015-06-10 2015-06-10
US62/173,808 2015-06-10
US14/748,924 US10019229B2 (en) 2014-07-02 2015-06-24 Calculation control indicator cache
US14/748,817 2015-06-24
US14/749,002 US9798519B2 (en) 2014-07-02 2015-06-24 Standard format intermediate result
US14/749,050 2015-06-24
US14/748,870 2015-06-24
US14/749,002 2015-06-24
US14/749,088 2015-06-24
US14/748,817 US9778907B2 (en) 2014-07-02 2015-06-24 Non-atomic split-path fused multiply-accumulate
PCT/US2015/037508 WO2016003740A1 (en) 2014-07-02 2015-06-24 Split-path fused multiply-accumulate operation using first and second sub-operations
US14/748,870 US9778908B2 (en) 2014-07-02 2015-06-24 Temporally split fused multiply-accumulate operation
US14/749,088 US9891887B2 (en) 2014-07-02 2015-06-24 Subdivision of a fused compound arithmetic operation
US14/748,956 2015-06-24
US14/748,956 US10019230B2 (en) 2014-07-02 2015-06-24 Calculation control indicator cache
US14/749,050 US9891886B2 (en) 2014-07-02 2015-06-24 Split-path heuristic for performing a fused FMA operation
US14/748,924 2015-06-24

Publications (2)

Publication Number Publication Date
JP2016535360A JP2016535360A (ja) 2016-11-10
JP6684713B2 true JP6684713B2 (ja) 2020-04-22

Family

ID=53502534

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2016538834A Active JP6684713B2 (ja) 2014-07-02 2015-06-24 融合積和演算を実行するための方法及びマイクロプロセッサ
JP2015227713A Active JP6207574B2 (ja) 2014-07-02 2015-11-20 計算制御インジケータキャッシュ

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2015227713A Active JP6207574B2 (ja) 2014-07-02 2015-11-20 計算制御インジケータキャッシュ

Country Status (6)

Country Link
US (7) US9798519B2 (ja)
EP (2) EP2963538B1 (ja)
JP (2) JP6684713B2 (ja)
CN (7) CN106406810B (ja)
TW (7) TWI650652B (ja)
WO (1) WO2016003740A1 (ja)

Families Citing this family (96)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9513906B2 (en) * 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9606803B2 (en) 2013-07-15 2017-03-28 Texas Instruments Incorporated Highly integrated scalable, flexible DSP megamodule architecture
US11106462B2 (en) * 2019-05-24 2021-08-31 Texas Instruments Incorporated Method and apparatus for vector sorting
US20150065928A1 (en) * 2013-08-30 2015-03-05 ISOS Solutions, LLC Apparatus for Reducing the Appearance and Effects of Scars
US11432990B2 (en) 2013-08-30 2022-09-06 ISOS Solutions, LLC Textured apparatus with therapeutic material incorporated therein and methods of manufacturing same
US11061672B2 (en) 2015-10-02 2021-07-13 Via Alliance Semiconductor Co., Ltd. Chained split execution of fused compound arithmetic operations
US10671347B2 (en) * 2016-01-28 2020-06-02 International Business Machines Corporation Stochastic rounding floating-point multiply instruction using entropy from a register
US10489152B2 (en) 2016-01-28 2019-11-26 International Business Machines Corporation Stochastic rounding floating-point add instruction using entropy from a register
US10282169B2 (en) 2016-04-06 2019-05-07 Apple Inc. Floating-point multiply-add with down-conversion
US10275243B2 (en) 2016-07-02 2019-04-30 Intel Corporation Interruptible and restartable matrix multiplication instructions, processors, methods, and systems
GB2553783B (en) 2016-09-13 2020-11-04 Advanced Risc Mach Ltd Vector multiply-add instruction
US10241757B2 (en) 2016-09-30 2019-03-26 International Business Machines Corporation Decimal shift and divide instruction
US10127015B2 (en) 2016-09-30 2018-11-13 International Business Machines Corporation Decimal multiply and shift instruction
US10078512B2 (en) 2016-10-03 2018-09-18 Via Alliance Semiconductor Co., Ltd. Processing denormal numbers in FMA hardware
US20180121168A1 (en) * 2016-10-27 2018-05-03 Altera Corporation Denormalization in multi-precision floating-point arithmetic circuitry
CN109710559A (zh) * 2016-11-03 2019-05-03 北京中科寒武纪科技有限公司 Slam运算装置和方法
US10140092B2 (en) 2016-11-04 2018-11-27 Samsung Electronics Co., Ltd. Closepath fast incremented sum in a three-path fused multiply-add design
US10216479B2 (en) * 2016-12-06 2019-02-26 Arm Limited Apparatus and method for performing arithmetic operations to accumulate floating-point numbers
US10515302B2 (en) * 2016-12-08 2019-12-24 Via Alliance Semiconductor Co., Ltd. Neural network unit with mixed data and weight size computation capability
KR102649318B1 (ko) * 2016-12-29 2024-03-20 삼성전자주식회사 상태 회로를 포함하는 메모리 장치와 그것의 동작 방법
US10303438B2 (en) * 2017-01-16 2019-05-28 International Business Machines Corporation Fused-multiply-add floating-point operations on 128 bit wide operands
US10452288B2 (en) * 2017-01-19 2019-10-22 International Business Machines Corporation Identifying processor attributes based on detecting a guarded storage event
GB2560159B (en) * 2017-02-23 2019-12-25 Advanced Risc Mach Ltd Widening arithmetic in a data processing apparatus
EP4053695A1 (en) 2017-03-20 2022-09-07 INTEL Corporation Systems, methods, and apparatuses for dot production operations
US10489877B2 (en) 2017-04-24 2019-11-26 Intel Corporation Compute optimization mechanism
US10055383B1 (en) * 2017-04-28 2018-08-21 Hewlett Packard Enterprise Development Lp Matrix circuits
US10338919B2 (en) * 2017-05-08 2019-07-02 Nvidia Corporation Generalized acceleration of matrix multiply accumulate operations
DE102018110607A1 (de) 2017-05-08 2018-11-08 Nvidia Corporation Verallgemeinerte Beschleunigung von Matrix-Multiplikations-und-Akkumulations-Operationen
CN107315710B (zh) 2017-06-27 2020-09-11 上海兆芯集成电路有限公司 全精度及部分精度数值的计算方法及装置
CN107291420B (zh) 2017-06-27 2020-06-05 上海兆芯集成电路有限公司 整合算术及逻辑处理的装置
WO2019009870A1 (en) 2017-07-01 2019-01-10 Intel Corporation SAVE BACKGROUND TO VARIABLE BACKUP STATUS SIZE
US10235135B2 (en) 2017-07-17 2019-03-19 International Business Machines Corporation Normalization of a product on a datapath
US10387147B2 (en) 2017-08-02 2019-08-20 International Business Machines Corporation Managing an issue queue for fused instructions and paired instructions in a microprocessor
CN107833176A (zh) 2017-10-30 2018-03-23 上海寒武纪信息科技有限公司 一种信息处理方法及相关产品
CN109783055B (zh) * 2017-11-10 2021-02-12 瑞昱半导体股份有限公司 浮点数运算电路及方法
US10481869B1 (en) * 2017-11-10 2019-11-19 Apple Inc. Multi-path fused multiply-add with power control
US11809869B2 (en) 2017-12-29 2023-11-07 Intel Corporation Systems and methods to store a tile register pair to memory
US11093247B2 (en) 2017-12-29 2021-08-17 Intel Corporation Systems and methods to load a tile register pair
US11023235B2 (en) 2017-12-29 2021-06-01 Intel Corporation Systems and methods to zero a tile register pair
US11816483B2 (en) 2017-12-29 2023-11-14 Intel Corporation Systems, methods, and apparatuses for matrix operations
US11669326B2 (en) 2017-12-29 2023-06-06 Intel Corporation Systems, methods, and apparatuses for dot product operations
US11789729B2 (en) 2017-12-29 2023-10-17 Intel Corporation Systems and methods for computing dot products of nibbles in two tile operands
JP6863907B2 (ja) * 2018-01-05 2021-04-21 日本電信電話株式会社 演算回路
CN108364065B (zh) * 2018-01-19 2020-09-11 上海兆芯集成电路有限公司 采布斯乘法的微处理器
CN108416431B (zh) * 2018-01-19 2021-06-01 上海兆芯集成电路有限公司 神经网络微处理器与宏指令处理方法
CN108363559B (zh) * 2018-02-13 2022-09-27 北京旷视科技有限公司 神经网络的乘法处理方法、设备和计算机可读介质
CN110276447A (zh) * 2018-03-14 2019-09-24 上海寒武纪信息科技有限公司 一种计算装置及方法
US10664287B2 (en) 2018-03-30 2020-05-26 Intel Corporation Systems and methods for implementing chained tile operations
DE102018209901A1 (de) * 2018-06-19 2019-12-19 Robert Bosch Gmbh Recheneinheit, Verfahren und Computerprogramm zum Multiplizieren zumindest zweier Multiplikanden
US11093579B2 (en) 2018-09-05 2021-08-17 Intel Corporation FP16-S7E8 mixed precision for deep learning and other algorithms
US10970076B2 (en) 2018-09-14 2021-04-06 Intel Corporation Systems and methods for performing instructions specifying ternary tile logic operations
US11579883B2 (en) 2018-09-14 2023-02-14 Intel Corporation Systems and methods for performing horizontal tile operations
US10990396B2 (en) 2018-09-27 2021-04-27 Intel Corporation Systems for performing instructions to quickly convert and use tiles as 1D vectors
US10719323B2 (en) 2018-09-27 2020-07-21 Intel Corporation Systems and methods for performing matrix compress and decompress instructions
US10866786B2 (en) 2018-09-27 2020-12-15 Intel Corporation Systems and methods for performing instructions to transpose rectangular tiles
US10896043B2 (en) 2018-09-28 2021-01-19 Intel Corporation Systems for performing instructions for fast element unpacking into 2-dimensional registers
US10963256B2 (en) 2018-09-28 2021-03-30 Intel Corporation Systems and methods for performing instructions to transform matrices into row-interleaved format
US10929143B2 (en) 2018-09-28 2021-02-23 Intel Corporation Method and apparatus for efficient matrix alignment in a systolic array
US10963246B2 (en) 2018-11-09 2021-03-30 Intel Corporation Systems and methods for performing 16-bit floating-point matrix dot product instructions
CN111221496B (zh) * 2018-11-26 2023-06-13 北京华航无线电测量研究所 一种使用fpga实现浮点数据累加的方法
CN111260069B (zh) * 2018-11-30 2022-12-09 上海寒武纪信息科技有限公司 数据处理装置、方法、芯片及电子设备
US10929503B2 (en) 2018-12-21 2021-02-23 Intel Corporation Apparatus and method for a masked multiply instruction to support neural network pruning operations
US11886875B2 (en) 2018-12-26 2024-01-30 Intel Corporation Systems and methods for performing nibble-sized operations on matrix elements
US11294671B2 (en) 2018-12-26 2022-04-05 Intel Corporation Systems and methods for performing duplicate detection instructions on 2D data
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
US10942985B2 (en) 2018-12-29 2021-03-09 Intel Corporation Apparatuses, methods, and systems for fast fourier transform configuration and computation instructions
US10922077B2 (en) 2018-12-29 2021-02-16 Intel Corporation Apparatuses, methods, and systems for stencil configuration and computation instructions
US11016731B2 (en) 2019-03-29 2021-05-25 Intel Corporation Using Fuzzy-Jbit location of floating-point multiply-accumulate results
US11269630B2 (en) 2019-03-29 2022-03-08 Intel Corporation Interleaved pipeline of floating-point adders
US10990397B2 (en) 2019-03-30 2021-04-27 Intel Corporation Apparatuses, methods, and systems for transpose instructions of a matrix operations accelerator
US11175891B2 (en) 2019-03-30 2021-11-16 Intel Corporation Systems and methods to perform floating-point addition with selected rounding
CN111814093A (zh) * 2019-04-12 2020-10-23 杭州中天微系统有限公司 一种乘累加指令的处理方法和处理装置
US11403097B2 (en) 2019-06-26 2022-08-02 Intel Corporation Systems and methods to skip inconsequential matrix operations
US11334647B2 (en) 2019-06-29 2022-05-17 Intel Corporation Apparatuses, methods, and systems for enhanced matrix multiplier architecture
US10825512B1 (en) 2019-08-27 2020-11-03 Nxp Usa, Inc. Memory reads of weight values
US11829729B2 (en) 2019-09-05 2023-11-28 Micron Technology, Inc. Spatiotemporal fused-multiply-add, and related systems, methods and devices
US11934824B2 (en) 2019-09-05 2024-03-19 Micron Technology, Inc. Methods for performing processing-in-memory operations, and related memory devices and systems
US11693657B2 (en) * 2019-09-05 2023-07-04 Micron Technology, Inc. Methods for performing fused-multiply-add operations on serially allocated data within a processing-in-memory capable memory device, and related memory devices and systems
US11288220B2 (en) * 2019-10-18 2022-03-29 Achronix Semiconductor Corporation Cascade communications between FPGA tiles
US11119772B2 (en) 2019-12-06 2021-09-14 International Business Machines Corporation Check pointing of accumulator register results in a microprocessor
US11714875B2 (en) 2019-12-28 2023-08-01 Intel Corporation Apparatuses, methods, and systems for instructions of a matrix operations accelerator
CN113126954B (zh) 2019-12-31 2024-04-09 华为技术有限公司 浮点数乘法计算的方法、装置和算术逻辑单元
US11182159B2 (en) 2020-02-26 2021-11-23 Google Llc Vector reductions using shared scratchpad memory
CN113391788B (zh) * 2020-03-11 2024-01-26 芯立嘉集成电路(杭州)有限公司 存储器内算术处理器及存储器内算术处理方法
CN113721886A (zh) * 2020-05-25 2021-11-30 瑞昱半导体股份有限公司 对数计算方法及对数计算电路
WO2021250689A1 (en) * 2020-06-12 2021-12-16 Gulzar Singh Novel hardware accelerator circuit for bit-level operations in a microcontroller
US11537861B2 (en) 2020-06-23 2022-12-27 Micron Technology, Inc. Methods of performing processing-in-memory operations, and related devices and systems
TWI746126B (zh) * 2020-08-25 2021-11-11 創鑫智慧股份有限公司 矩陣乘法裝置及其操作方法
US11941395B2 (en) 2020-09-26 2024-03-26 Intel Corporation Apparatuses, methods, and systems for instructions for 16-bit floating-point matrix dot product instructions
US11029920B1 (en) * 2020-10-21 2021-06-08 Chariot Technologies Lab, Inc. Execution of a conditional statement by an arithmetic and/or bitwise unit
WO2022150058A1 (en) * 2021-01-07 2022-07-14 Groq, Inc. Numerical precision in digital multiplier circuitry
US11663004B2 (en) 2021-02-26 2023-05-30 International Business Machines Corporation Vector convert hexadecimal floating point to scaled decimal instruction
US11360769B1 (en) 2021-02-26 2022-06-14 International Business Machines Corporation Decimal scale and convert and split to hexadecimal floating point instruction
US11625244B2 (en) * 2021-06-22 2023-04-11 Intel Corporation Native support for execution of get exponent, get mantissa, and scale instructions within a graphics processing unit via reuse of fused multiply-add execution unit hardware logic
US20230129750A1 (en) 2021-10-27 2023-04-27 International Business Machines Corporation Performing a floating-point multiply-add operation in a computer implemented environment
CN117149099B (zh) * 2023-10-31 2024-03-12 江苏华鲲振宇智能科技有限责任公司 一种计算存储分体式服务器系统及控制方法

Family Cites Families (58)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB1527289A (en) 1976-08-17 1978-10-04 Int Computers Ltd Data processing systems
US4974198A (en) 1986-07-16 1990-11-27 Nec Corporation Vector processing system utilizing firm ware control to prevent delays during processing operations
JPH01119861A (ja) * 1987-11-02 1989-05-11 Sharp Corp ディジタル信号処理用lsi
JPH04177527A (ja) * 1990-11-09 1992-06-24 Hitachi Ltd 演算処理回路
US5375078A (en) 1992-12-15 1994-12-20 International Business Machines Corporation Arithmetic unit for performing XY+B operation
US5347481A (en) 1993-02-01 1994-09-13 Hal Computer Systems, Inc. Method and apparatus for multiplying denormalized binary floating point numbers without additional delay
DE69519449T2 (de) 1994-05-05 2001-06-21 Conexant Systems Inc Raumzeigersdatenpfad
JP2987308B2 (ja) * 1995-04-28 1999-12-06 松下電器産業株式会社 情報処理装置
GB9513115D0 (en) 1995-06-28 1995-08-30 Biochemie Sa Organic compounds
US5867413A (en) * 1995-10-17 1999-02-02 Hitachi Micro Systems, Inc. Fast method of floating-point multiplication and accumulation
US5880983A (en) 1996-03-25 1999-03-09 International Business Machines Corporation Floating point split multiply/add system which has infinite precision
JPH09325953A (ja) * 1996-06-06 1997-12-16 Hitachi Ltd プロセッサおよびデータ処理装置
JP3790307B2 (ja) * 1996-10-16 2006-06-28 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
KR100291383B1 (ko) * 1996-11-18 2001-09-17 윤종용 디지털신호처리를위한명령을지원하는모듈계산장치및방법
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
US6233672B1 (en) * 1997-03-06 2001-05-15 Advanced Micro Devices, Inc. Piping rounding mode bits with floating point instructions to eliminate serialization
US6094668A (en) 1997-10-23 2000-07-25 Advanced Micro Devices, Inc. Floating point arithmetic unit including an efficient close data path
US6611856B1 (en) * 1999-12-23 2003-08-26 Intel Corporation Processing multiply-accumulate operations in a single cycle
US20040098439A1 (en) 2000-02-22 2004-05-20 Bass Stephen L. Apparatus and method for sharing overflow/underflow compare hardware in a floating-point multiply-accumulate (FMAC) or floating-point adder (FADD) unit
US7117372B1 (en) 2000-11-28 2006-10-03 Xilinx, Inc. Programmable logic device with decryption and structure for preventing design relocation
US6779013B2 (en) 2001-06-04 2004-08-17 Intel Corporation Floating point overflow and sign detection
US7080111B2 (en) * 2001-06-04 2006-07-18 Intel Corporation Floating point multiply accumulator
US6947962B2 (en) * 2002-01-24 2005-09-20 Intel Corporation Overflow prediction algorithm and logic for high speed arithmetic units
WO2003100602A2 (en) * 2002-05-24 2003-12-04 Koninklijke Philips Electronics N.V. A scalar/vector processor
US7689641B2 (en) 2003-06-30 2010-03-30 Intel Corporation SIMD integer multiply high with round and shift
GB2411975B (en) 2003-12-09 2006-10-04 Advanced Risc Mach Ltd Data processing apparatus and method for performing arithmetic operations in SIMD data processing
US7433911B2 (en) 2004-12-21 2008-10-07 Arm Limited Data processing apparatus and method for performing floating point addition
US7401107B2 (en) 2004-12-22 2008-07-15 Arm Limited Data processing apparatus and method for converting a fixed point number to a floating point number
US7730117B2 (en) * 2005-02-09 2010-06-01 International Business Machines Corporation System and method for a floating point unit with feedback prior to normalization and rounding
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
US20070038693A1 (en) 2005-08-10 2007-02-15 Christian Jacobi Method and Processor for Performing a Floating-Point Instruction Within a Processor
JP4956950B2 (ja) * 2005-09-29 2012-06-20 ソニー株式会社 反射型スクリーン
WO2007094047A2 (ja) 2006-02-14 2007-08-23 Fujitsu Ltd 演算装置および演算方法
US7912887B2 (en) * 2006-05-10 2011-03-22 Qualcomm Incorporated Mode-based multiply-add recoding for denormal operands
US8429384B2 (en) 2006-07-11 2013-04-23 Harman International Industries, Incorporated Interleaved hardware multithreading processor architecture
US9223751B2 (en) * 2006-09-22 2015-12-29 Intel Corporation Performing rounding operations responsive to an instruction
US8321849B2 (en) * 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US8443029B2 (en) * 2007-03-01 2013-05-14 International Business Machines Corporation Round for reround mode in a decimal floating point instruction
US8078660B2 (en) 2007-04-10 2011-12-13 The Board Of Regents, University Of Texas System Bridge fused multiply-adder circuit
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
US20090248769A1 (en) 2008-03-26 2009-10-01 Teck-Kuen Chua Multiply and accumulate digital filter operations
US8046400B2 (en) * 2008-04-10 2011-10-25 Via Technologies, Inc. Apparatus and method for optimizing the performance of x87 floating point addition instructions in a microprocessor
US9507656B2 (en) 2009-04-16 2016-11-29 Oracle America, Inc. Mechanism for handling unfused multiply-accumulate accrued exception bits in a processor
JP5491071B2 (ja) * 2009-05-20 2014-05-14 エヌイーシーコンピュータテクノ株式会社 命令融合演算装置および命令融合演算方法
CN101930354B (zh) * 2009-07-28 2014-03-12 威盛电子股份有限公司 微处理器及其执行指令的方法
US8386755B2 (en) * 2009-07-28 2013-02-26 Via Technologies, Inc. Non-atomic scheduling of micro-operations to perform round instruction
US8990282B2 (en) 2009-09-21 2015-03-24 Arm Limited Apparatus and method for performing fused multiply add floating point operation
CN101825998B (zh) * 2010-01-22 2012-09-05 龙芯中科技术有限公司 向量复数乘法运算的处理方法及相应的装置
US8577948B2 (en) * 2010-09-20 2013-11-05 Intel Corporation Split path multiply accumulate unit
US8914430B2 (en) * 2010-09-24 2014-12-16 Intel Corporation Multiply add functional unit capable of executing scale, round, GETEXP, round, GETMANT, reduce, range and class instructions
CN101986264B (zh) * 2010-11-25 2013-07-31 中国人民解放军国防科学技术大学 用于simd向量微处理器的多功能浮点乘加运算装置
US8965945B2 (en) * 2011-02-17 2015-02-24 Arm Limited Apparatus and method for performing floating point addition
US8671129B2 (en) 2011-03-08 2014-03-11 Oracle International Corporation System and method of bypassing unrounded results in a multiply-add pipeline unit
US9213523B2 (en) * 2012-06-29 2015-12-15 Intel Corporation Double rounded combined floating-point multiply and add
US8892619B2 (en) 2012-07-24 2014-11-18 The Board Of Trustees Of The Leland Stanford Junior University Floating-point multiply-add unit using cascade design
US9152382B2 (en) * 2012-10-31 2015-10-06 Intel Corporation Reducing power consumption in a fused multiply-add (FMA) unit responsive to input data values
US11061672B2 (en) 2015-10-02 2021-07-13 Via Alliance Semiconductor Co., Ltd. Chained split execution of fused compound arithmetic operations

Also Published As

Publication number Publication date
TWI650652B (zh) 2019-02-11
CN106325810B (zh) 2019-06-18
CN106126189B (zh) 2019-02-15
JP2017010512A (ja) 2017-01-12
US10019229B2 (en) 2018-07-10
US9778908B2 (en) 2017-10-03
US10019230B2 (en) 2018-07-10
US20160004509A1 (en) 2016-01-07
CN106293610A (zh) 2017-01-04
TWI608410B (zh) 2017-12-11
EP2963539B1 (en) 2020-03-25
TW201617849A (zh) 2016-05-16
EP2963538B1 (en) 2020-04-01
EP2963538A1 (en) 2016-01-06
CN105849690A (zh) 2016-08-10
US9778907B2 (en) 2017-10-03
CN106325810A (zh) 2017-01-11
TWI601019B (zh) 2017-10-01
TW201617929A (zh) 2016-05-16
TWI634437B (zh) 2018-09-01
TWI638312B (zh) 2018-10-11
TW201617928A (zh) 2016-05-16
US20160004665A1 (en) 2016-01-07
CN106325811A (zh) 2017-01-11
TWI625671B (zh) 2018-06-01
US20160004508A1 (en) 2016-01-07
CN106325811B (zh) 2020-02-07
US20160004507A1 (en) 2016-01-07
WO2016003740A1 (en) 2016-01-07
CN106339202A (zh) 2017-01-18
US9891886B2 (en) 2018-02-13
CN106406810A (zh) 2017-02-15
US20160004504A1 (en) 2016-01-07
US9891887B2 (en) 2018-02-13
TW201617927A (zh) 2016-05-16
JP6207574B2 (ja) 2017-10-04
CN106406810B (zh) 2019-08-06
US20160004505A1 (en) 2016-01-07
CN106293610B (zh) 2019-03-15
EP2963539A1 (en) 2016-01-06
TW201617850A (zh) 2016-05-16
US9798519B2 (en) 2017-10-24
TW201612739A (en) 2016-04-01
TWI605384B (zh) 2017-11-11
CN106126189A (zh) 2016-11-16
TW201617857A (zh) 2016-05-16
CN106339202B (zh) 2019-05-21
JP2016535360A (ja) 2016-11-10
US20160004506A1 (en) 2016-01-07
CN105849690B (zh) 2019-03-15

Similar Documents

Publication Publication Date Title
JP6684713B2 (ja) 融合積和演算を実行するための方法及びマイクロプロセッサ
CN107077417B (zh) 有效性配准
Muller et al. Hardware implementation of floating-point arithmetic
Bruintjes Design of a fused multiply-add floating-point and integer datapath

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160224

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160224

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170228

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170314

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20170608

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170713

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20180116

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180413

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20181009

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190206

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20190214

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20190329

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200109

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200330

R150 Certificate of patent or registration of utility model

Ref document number: 6684713

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