JP2012150821A - 非正規化オペランドのためのモードベース乗算−加算プロセッサ - Google Patents

非正規化オペランドのためのモードベース乗算−加算プロセッサ Download PDF

Info

Publication number
JP2012150821A
JP2012150821A JP2012037454A JP2012037454A JP2012150821A JP 2012150821 A JP2012150821 A JP 2012150821A JP 2012037454 A JP2012037454 A JP 2012037454A JP 2012037454 A JP2012037454 A JP 2012037454A JP 2012150821 A JP2012150821 A JP 2012150821A
Authority
JP
Japan
Prior art keywords
floating point
instruction
multiply
floating
multiplier
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.)
Ceased
Application number
JP2012037454A
Other languages
English (en)
Inventor
Kenneth Alan Dockser
ケネス・アラン・ドックサー
Sunil Lall Pathik
パティク・スニル・ラール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2012150821A publication Critical patent/JP2012150821A/ja
Ceased legal-status Critical Current

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
    • G06F7/487Multiplying; Dividing
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • G06F7/487Multiplying; Dividing
    • G06F7/4876Multiplying
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/386Special constructional features
    • G06F2207/3884Pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • G06F7/5443Sum of products

Landscapes

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

Abstract

【課題】浮動小数点乗算命令を浮動小数点乗算−加算命令へ再コード化する。
【解決手段】非正規化サポートモードでは、浮動小数点加算器の正規化回路は、浮動小数点乗算器の出力を正規化、あるいは、非正規化するために使用される。各浮動小数点乗算命令は、強制的にゼロにされる加数で、乗算−加算命令へ推論的に変換される。浮動小数点加算器の正規化回路を利用して積を正規化、あるいは、非正規化する一方で、これは積の値を保存する。乗算処理のオペランドが利用可能である場合、それらは検査される。オペランドがアンノーマル中間積、あるいは、非正規化最終積を生成しない場合、たとえば、オペランド・フォワーディングによって、その加算演算は抑制される。さらに、各融合なしの浮動小数点乗算−加算命令は、ゼロの加数を持つ乗算−加算命令で置き換えられる。そして、元の乗算−加算命令の加数を持つ浮動小数点加算命令は、命令ストリームに挿入される。
【選択図】図2

Description

本開示は、一般にプロセッサ分野に関する、そして、特に、非正規化オペランドを扱うために、浮動小数点乗算命令を浮動小数点乗算−加算命令へ再コード化するモードベースの方法に関する。
マイクロプロセッサは、幅広い種類の用途において、数値に関する計算処理を行う。高実行スピード、低パワー消費、小サイズは、携帯電子装置のような埋め込み式の用途では特に、プロセッサ設計者にとって重要な目標である。現代のプロセッサは、各々が複数の実行ステップを有する連続命令が実行時に重なるように、パイプライン方式を利用する。パイプライン方式では、各命令は、フェッチ、デコード、実行、書き戻し(Write-Back)のような一連の実行段階で実行されるが、それぞれが複数のパイプラインを備え得る。パイプ段階は、命令実行段階の全部、あるいは部分を実行する記憶要素と論理からなる。命令はパイプラインを通じて連続して流れる。実行段階は、命令によって指定される算術演算、論理演算、あるいは、メモリアクセス動作を行う、そして、特に数値についてさまざまな算術演算を行なうことができる。
デジタルプロセッサは、固定小数点か浮動小数点のいずれかのフォーマットで数値を表す。浮動小数点の数は、基数2の整数指数の累乗(the base 2 raised to an integer exponent)によって乗算される固定小数点の仮数部(significand)(マンチッサ(mantissa)としても知られる)を備える。IEEE754標準のような、いくつかのフォーマットでは、引用によりここに取り込まれるように、浮動小数点表示は符号ビットを追加的に含む。2の整数指数の累乗(raised to an integer exponent)によって仮数部を乗算することは、基数10システムの科学的記数法に対して2進数アナログ化することである。つまり、指数の値は、実際の数値を実現するために、仮数部の2進小数点がシフトされるべき、ビット位置の数および方向を決定する。それ故に、浮動小数点という用語が使われる。
仮数部が、1<=仮数部<2の範囲にあり、指数がその定義される範囲にある場合、浮動小数点の値は、“正規化”数とみなされる。正規化浮動小数点数の仮数部は、このように1.小数部( 1.fraction)の形式からなる。ここで、“小数部(fraction)”とは、1以上の仮数部の小数部分(fractional portion)を示す2進数値である。指数の値は、2進数小数点を左(負の指数に対して)または右(正の指数に対して)にシフトする。IEEE754標準においては、単精度の浮動小数点数に対する指数の値は、−126から127までの範囲となる。IEEE754単精度フォーマットの数字を符号化する場合には、符号化された指数のすべてが正になるように、127のバイアスが未加工の指数に加えられる。
任意の指数を持つ、1より小さい仮数部、つまり、0<仮数部<1で示される浮動小数点値は、ここにおいて、“アンノーマル(unnormal)”数と呼ばれる。特別に関心のあるアンノーマル浮動小数点数の部分集合が非正規化(“denormal”)数(サブノーマル(subnormal)数としても知られている。)である。非正規化浮動小数点数(denormal floating-point number)は、0<仮数部<1の範囲にある仮数部と、指数−126を利用することによって、1.0×2−126よりも小さな値を表す。非正規化浮動小数点数は、ゼロから小数部−1の幅までの範囲を持つ小数部において、その数の頭のゼロがある(With the number of leading zeros in the fraction ranging from zero to the width of the fraction-1.)、0.小数部(0.fraction)の形式の仮数部を持つ。数値を正確に表すビットがより少なくなるような、精度の損失を犠牲にして、非正規化数は126ビット位置を超える2進数小数点の“左シフト”を達成するために、正規化仮数部の小数部分のビット位置を有効に利用する。非正規化数は、ゼロに非常に近い値を表す、そして、結果が非常に小さい場合に計算がゆっくりと精度を失うことを許容する、緩やかなアンダーフローの実現のために使用され得る。
浮動小数点乗算器回路の場合には、非正規化積(denormal product)はいくつかの方法で発生する。乗数または被乗数のいずれかが、非正規化数であるかもしれない。この場合には、中間積(intermediate product)の仮数部は一般にアンノーマル(つまり、1より小)になるが、オペランドの数値によっては、最終的に丸め(round)が行われた積(product)は、正規化数または非正規化数になる可能性がある。乗数と被乗数の両方が非正規化数である場合には、最終的に丸めが行われた積は、ゼロとなるか、あるいは、最小の表現可能な非正規化数となる。
さらに、指数が小さく、(単精度について)−126以下の指数を必要とする正規化数を生じる場合には、2つの正規化数の積は非正規化数になる可能性がある。この場合には、乗算の中間値が“正規ではない(non-normal)”形式 と仮定する通常の状況とは異なることは注意すべきである。正規化仮数部は、範囲[1,2)、つまり、正確に1からほぼ2まで(仮に5ビットの仮数部について1.0000から 1.1111)の値を仮定している可能性がある。2つの正規化仮数部の積は、範囲[1,4)、つまり、正確に1からほぼ4までの値を仮定している可能性がある。この中間積の仮数部は、1.小数部、または、1x.小数部の形式を仮定している可能性がある。後者に関しては、2からほぼ4まで(10.0000から11.1111)の値に対して仮定している。浮動小数点乗算の型どおりの事として、2進数小数点を左方へシフトし、指数を1だけ増加することによって、浮動小数点乗算器はこの中間結果を調整する。そのような“正規ではない(non-normal)”中間結果は、ここにおいて非正規化数であると考えられていないし、本開示によって明示的に扱われない。
いくつかの組み込まれたプロセッサのような、一般的なプロセッサの用途では、非正規化数は必ずしもサポートされる必要はない。たとえば、非正規化値は、精度の大幅な損失なしに、単にゼロとして表わされる可能性がある。しかしながら、Java(登録商標)プログラミング言語は、非正規化数に対するサポートを明示している。したがって、サポートを行うプロセッサは、少なくともJava実行モードの間には、非正規化浮動小数点数に適応するように、Javaコードの実行を指令する。
非正規化浮動小数点数は、ソフトウェアルーティンにおいて、非正規化数の検知と非正規化数の処理に関する例外を生成することによって、ソフトウェアでサポートされ得る。このプロセスは遅く、程度の大きいオーバーヘッドを引き起こす。それは、システムパフォーマンスを減少し、パワー消費を増加する。
非正規化数は、各浮動小数点計算用の要素に、非正規化検知と正規化回路を加えることによってハードウェアでサポートされ得る。たとえば、仮数部を正規化位置(つまり、1.小数部)へ移動すること、および、(単精度の場合に対して)−126より小さな指数値(非標準)を許容することによって、非正規化数は“正規化され(normalized)”得る。同様に、(単精度の場合に対して)指数が−126になるように、仮数部を非正規化位置(つまり、0.小数部)へシフトすることによって、その結果は“非正規化され”得る。しかしながら、そのような追加的回路は、シリコンエリアを増加させ、レイテンシ(latency)を増やし、スループットの遅れを招き、最小サイクル時間を潜在的に増加し、それ故に最大動作周波数を減少する。さらに、非正規化数は滅多に出会うことはなく、通常ケースを犠牲にした稀なケースに対する性能の最適化は、全体的なプロセッサの性能を低下させる。
浮動小数点加算器は、加数を整列し、その合計を正規化し、丸めを行う回路を含む。一つ以上の実施形態によれば、非正規化サポートモードにおいて、浮動小数点加算器の正規化回路は、浮動小数点乗算器からの結果を正規化するか、あるいは非正規化するために利用される。各乗算命令は、強制的にゼロにされる加数を持つ乗算−加算(乗算−累算としても知られる)命令で推論的に置き換えられる。これは、乗算器の出力が、その値を変えずに、しかし、その積の正規化や非正規化を行なうために加算器の正規化回路を利用するように、加算器回路を通る指示を行う。中間積がアンノーマルではない、または、最終積(final product)が非正規化数ではないことが決定されるならば、加算部分の処理は、たとえば、オペランド・フォワーディング(operand forwarding)によって抑制され(suppress)得る。多くの場合、乗算命令オペランドの指数の処理により、この決定は乗算実行の初期に行うことが可能である。
一つの実施形態は、アンノーマル中間仮数部または非正規化最終積を扱う浮動小数点乗算命令の実行方法に関係する。浮動小数点乗算命令は、浮動小数点乗算処理と浮動小数点加算処理を行なうように動作する浮動小数点乗算−加算命令に変換される。そして、浮動小数点加算処理の1つの加数は強制的にゼロにされる。
もう一つの実施形態はプロセッサに関係する。プロセッサは、正規化回路を有し、浮動小数点乗算−累算ユニットを含んでいる、一つ以上の命令実行パイプラインを含む。さらに、プロセッサは、浮動小数点加算器の正規化回路を使用する浮動小数点乗算器によって出力された、アンノーマル中間仮数部または非正規化浮動小数点積の正規化または非正規化を行なうように動作するパイプライン制御器を含む。
詳細な説明
図1はプロセッサ10の機能ブロック図を示す。プロセッサ10は、制御論理14に従って命令実行パイプライン12内で命令を実行する。制御論理14は、さまざまな処理モードを定義するステータスレジスタ15のような一つ以上のレジスタを含む。パイプライン12は、12aと12bのような多重並行パイプラインを持つスーパースカラー設計であり得る。パイプライン12aと12bのそれぞれは、パイプ段階内に構成されるさまざまなレジスタやラッチ16、そして、一つ以上の論理演算ユニット(Arithmetic Logic Unit)(ALU)18を含む。パイプ段階レジスタまたはラッチ16およびALU18は、汎用レジスタ(General Purpose Register)ファイル28のレジスタからオペランドを読み取ることができ、および/または、そのレジスタに結果を書き込むことができる。
パイプライン12aと12bは、インストラクション・サイド・トランスレーション・ルックアサイド・バッファ(Instruction-side Translation Lookaside Buffer)(ITLB)22によって管理されるメモリーアドレッシングと許可(permission)により、命令キャッシュ(IキャッシュつまりI$)20から命令のフェッチを行う。主トランスレーション・ルックアサイド・バッファ(Translation Lookaside Buffer)(TLB)26によって管理されるメモリーアドレッシングと許可により、データキャッシュ(DキャッシュつまりD$)24からデータはアクセスされる。さまざまな実施形態では、ITLB22は、TLB26の一部のコピーを含む可能性がある。あるいは、ITLB22 とTLB26は統合され得る。同様に、プロセッサ10のさまざまな実施形態では、Iキャッシュ20とDキャッシュ24は統合され得るし、一体化され得る。Iキャッシュ20および/またはDキャッシュ24におけるミスは、メモリーインターフェース34の制御下で、主(オフチップの)メモリー36へのアクセスを引き起こす原因となる。
プロセッサ10は、さまざまな周辺装置40,42へのアクセスを制御する入力/出力(I/O)インターフェース38を含む可能性がある。当業者はプロセッサ10の多数の変形が可能であることを認識するだろう。たとえば、プロセッサ10は、IキャッシュかDキャッシュのいずれか、あるいは、両方に対する第2レベル(L2)キャッシュを含む可能性がある。さらに、プロセッサ10において描かれた一つ以上の機能ブロックは、特定の実施形態から省略される可能性がある。
一つ以上の実施形態では、プロセッサ10は、たとえば、ステータスレジスタ15における非正規化サポートビットにより示される非正規化サポートモードで動作する。特に、非正規化サポートモードは、プロセッサ10がJavaコードを直接実行する場合にはいつでも入り込む可能性があり、また、プログラマーが非正規化浮動小数点の数をサポートすることを選択するような別の場合に入り込む可能性がある。
非正規化サポートモードでは、プロセッサ10は、加数がゼロの状態で、各浮動小数点乗算命令を乗算−加算(multiply-add)(あるいは、乗算−累算(multiply-accumulate))命令へ推論的に変換する。乗算−加算処理は融合されたタイプまたは融合されていないタイプからなる可能性がある。融合された乗算−加算処理の場合には、中間積の全幅(入力の2倍幅)は、中間の丸めなく、加算器に送られる。融合されていない乗算−加算処理の場合には、乗算処理の中間積は、加算処理が行なわれる以前に(しばしば入力精度に)丸めが行われる。
ある実施形態では、各浮動小数点乗算命令は、強制的にゼロにされた加数を持つ融合された乗算−加算命令に推論的に置き換えられる。この命令の流れの変更は、一般に、デコード段階のような関連するパイプライン12a、12bの初期、あるいは、いずれにしても実行段階の前に実行される。正規化プロセッサ処理によって、融合された乗算−加算の実行段階では、図2で示されるように、浮動小数点乗算器の出力は、浮動小数点加算器の入力へ導かれるであろう。融合された乗算−加算命令をサポートする浮動小数点加算器は、浮動小数点乗算器から中間積を受け取るために十分な入力幅を持つ。
図2は、浮動小数点乗算器50の出力が浮動小数点加算器52の入力に導かれること示す機能ブロック図である。浮動小数点加算器52は、浮動小数点加数を整列するための整列回路54、浮動小数点の合計を計算するための加算回路56、その合計を正規化(あるいは非正規化)するための正規化回路58、シフトされた合計に丸めを行うための丸め回路60を含む。乗算器50への乗数(MR)と被乗数(MD)の入力、そして、浮動小数点加算器52への加数の入力は、GPRファイル28に格納されるような登録値(registered value)となり得る。被加算数37は、正規化サポートモードで浮動小数点加算器52を利用するために、浮動小数点加算器52に多重化する。
浮動小数点乗算器50の出力値を保存するために、数字の正規化を行ったり、あるいは、非正規化を行う一方で、浮動小数点加算処理の加数は強制的にゼロにされる。これは多くの方法で実現される可能性がある。たとえば、図2に示されるように、ゼロ値は、整列回路54に多重化される可能性がある。あるいは、正規化実行の一部として浮動小数点乗算−加算命令によって検索(retrieve)されるために、そのゼロ値はGPRレジスタ29に格納される可能性がある。さらなる例としては、GPRレジスタ29の出力は、非正規化サポートモードビットを含む制御論理でゲート制御され、レジスタ値をゲートオフし、非正規化サポートモードでゼロを示す可能性がある。いずれの場合でも、ゼロ値は、1つの加数として浮動小数点加算器52に適用され、浮動小数点乗算器50の2倍幅出力は他方の加数として適用される。加算回路56におけるゼロへの加算は、数値を変更しない。それから、その数値は、正規化回路58で正規化/非正規化され、丸め回路60で丸めが行われる。この方式では、プロセッサ10は、浮動小数点乗算器50のアンノーマル出力と非正規化最終結果を適合するために、浮動小数点加算器52の中の既存のハードウェアを利用する。
命令セットの構造が融合されていない乗算−加算処理のみをサポートするような他の実施形態では、各浮動小数点乗算命令は、融合されていない乗算−加算命令で推論的に置き換えられる。この場合には、中間の完全幅積は、丸めなしに加算器の正規化論理58に送られるはずである。これはいろいろな仕方で実現され得る。たとえば、マルチプレクサ57に示されるように、その積は加算回路56をバイパスして、正規化論理58へ直接、送られる可能性がある。図には示されていないが、浮動小数点加算器52は、中間レジスタを持つパイプラインユニットとして実現され得る。そのようなケースでは、正規化論理に送られるデータは、整合させるためにパイプラインにすることも可能である。あるいは、浮動小数点加算器入力論理は、完全幅の中間積を受け取るために修正される可能性がある。いずれの場合も、加算回路56と正規化回路(normalizer)58は、そのデータに対してすでに十分な幅となっている。同様に、融合されていない乗算−加算処理の場合には、頭のゼロのカウント(leading zero count)は、中間積の上部半分(upper half)で行なわれるはずである。このカウントは、制御のための正規化論理と指数生成のための指数論理へ送られるはずである(示されていない)。
一般的に、乗数(MR)と被乗数(MD)の値は、実行段階のように、パイプラインの深さが増してはじめて、知らされることとなる。MRとMDの値が知らされるとすぐに、それらすべては、両方が正規化値であるかどうかを決定するために検査され、浮動小数点乗算器から正規化された仮数部を生成することとなる。平行して、最終結果が正規化状態にあるかどうかを決定するために、指数値に基づいて処理が実行される可能性がある。浮動小数点乗算器50の出力が正規化形式であり、最終結果が正規化浮動小数点数であるならば、加算処理は抑制される可能性がある。この場合には、浮動小数点乗算器50の出力は、通路62によって図2に示されるように、オペランド・フォワーディングによって浮動小数点加算器52をバイパスする可能性がある。これにより、その結果に依存して後続の命令は、加算器を通過するまで待たずに、このデータを消費することが可能になる。結果がほとんど非正規化でないようなケースでは、結果が非正規化であるのかどうかを早期に決定することは困難である。これらのケースでは、最終積が非正規である場合には、非正規化されるように、加算処理が行われるであろう。
乗算−加算命令の浮動小数点乗算処理は、中間積として非正規化数またはアンノーマル数を同様に生成する可能性がある。非正規化サポートモードでは、融合されていない乗算−加算命令は、乗算処理の積にゼロ値を加算するために変更される。そして、加算命令は、元の乗算−加算命令の加数と共に、乗算−加算命令の後で命令ストリームに挿入される。つまり、浮動小数点乗算処理の完全幅積は、元の加数で加算処理を実行する前にゼロに加算される。乗算−加算命令に変換される乗算命令について上記で議論が行われたように、浮動小数点加算器は、より幅の広い中間積を受け取るために修正されるべきであり、あるいは、この積は正規化回路に導かれるはずである。同様に、頭のゼロのカウントは、正規化回路を制御するために使用される積の有効ビット(significant bit)に対して維持されるはずである。このように、乗算−加算命令の加算処理は、別々の浮動小数点加算命令を通じて加算処理を実行する以前に、その値を変えることなく、積の任意の正規化、あるいは非正規化を行なうために使用される。融合された乗算−加算命令を実現する論理は、後続の加算命令を挿入する必要はなく、アンノーマルあるいは非正規化中間積を取り扱うことが可能である。
図2に示されるように、浮動小数点乗算器50の出力は、浮動小数点加算器52の1つの入力に導かれる。そして、浮動小数点加算器52への他の入力では、ゼロが強制される。加算回路56は、前述のように、中間積の値を変えない、それは、正規化回路58で正規化/非正規化され、丸め回路60で丸められる。それから、正規化された(あるいは非正規化された)数は、通路64に示されるように、浮動小数点加算器52の1つの入力に送られる。GPRレジスタ29に格納された元の乗算−加算命令の加数は、浮動小数点加算器52の他の入力に導かれる。そして、浮動小数点加算命令が実行される。このように、浮動小数点乗算器50の出力は、元の融合されていない乗算−加算命令の加算処理を行なう前に、浮動小数点加算器52の回路を利用して正規化/非正規化される。
ここで、また、加算命令の命令ストリームへの挿入、およびゼロの加数を代入するための乗算−加算命令の変更は、一般に、デコード段階のような、パイプラインの初期に行なわれる。実行段階のように、乗数(MR)と被乗数(MD)の値が知らされると、それらは検査される可能性がある。そして、乗算処理が中間アンノーマル出力をおそらく生成し得るかどうか、あるいは、最終結果が非正規化であるかどうかを決定するために、指数は処理される可能性がある。そうでない場合には、乗算−加算命令の変更は、ゼロの加数に対して元の加数を代入することによって、逆にされるか、あるいは、“元に戻される(undone)”可能性がある。さらに、挿入された浮動小数点加算命令は、従来のパイプライン最適化により除去され得るNOP(オペレーションなし(no operation))へ変換される可能性がある。
図3は、非正規化サポートモードにおいて浮動小数点乗算命令を処理する際のプロセッサ10の動作を示す。命令はフェッチされ(命令キャッシュ20からのように)、デコードされる(ブロック70)。プロセッサが非正規化サポートモード(ブロック72)で動作していない場合には、従来のパイプライン処理により命令を処理する(ブロック86)。プロセッサが非正規化サポートモード(ブロック72)である場合には、デコードされた命令は、それが浮動小数点乗算命令(ブロック74)であるかどうかを決定するために検査される。そうでなければ、命令は従来どおりに実行される(ブロック86)。
命令が浮動小数点乗算命令である場合には、プロセッサ10は浮動小数点乗算命令の代わりに、ゼロの加数を持つ浮動小数点乗算−加算命令を用いる(ブロック76)。浮動小数点乗算処理に対するオペランドが利用可能な場合には、浮動小数点乗算処理が正規化出力の生成が保証されるかどうかを決定するために、それらは検査される。浮動小数点乗算処理がアンノーマル中間出力を生成するか、あるいは、最終結果が非正規(denormal)となる可能性がある場合には(ブロック80)、代用された乗算−加算命令は、従来のパイプライン処理によって処理が行われ(ブロック86)、上記の説明のように、浮動小数点加算器52の正規化回路58を使用して中間積を正規化するか、あるいは、非正規化する。融合された乗算−加算命令の場合には、それ以上の制御は必要とされない。融合されていない乗算−加算命令の場合には、加算回路56は中間積を取り扱うのに十分な幅であるが、浮動小数点加算器52は加算器にビットを適切に送るために修正される必要がある。あるいは、中間積は、図2に示されるように、浮動小数点加算器52の正規化回路58に、調停する状態要素(intervening state elements)を潜在的に含めて、直接送られる。
浮動小数点乗算処理が正規化中間と最終結果を生成すると決定される場合(ブロック80)、“ゼロへの加算”処理は、たとえばオペランド・フォワーディングによって抑制される可能性がある(ブロック82)。これは、“ゼロへの加算”処理を実行するという性能ペナルティー(performance penalty)を回避する。その場合には、浮動小数点乗算器50の出力の正規化/非正規化は必要でなくなる。
図4は、非正規化サポートモードの浮動小数点乗算−加算命令を処理する際のプロセッサ10の処理を示す。命令はフェッチされ(命令キャッシュ20からのように)、デコードされる(ブロック90)。プロセッサが非正規化サポートモードで動作していない場合(ブロック92)、従来のパイプライン処理による命令が処理される(ブロック106)。プロセッサが非正規化サポートモードにある場合(ブロック92)には、デコードされた命令は、融合されていない浮動小数点乗算−加算命令であるかどうかを決定するために検査される(ブロック94)。命令が浮動小数点乗算−加算命令でないか、あるいは、融合された乗算−加算命令である場合には、命令は従来のやり方で実行される(ブロック106)。
命令が融合されていない浮動小数点乗算−加算命令である場合(ブロック94)には、浮動小数点加算処理を実行する前に、プロセッサは、浮動小数点乗算処理の中間積を正規化/非正規化する。最初に、値ゼロが、浮動小数点乗算−加算命令における加数に代入される(ブロック96)。それから、元の加数を持つ浮動小数点加算命令は、修正された浮動小数点乗算−加算命令に続く命令ストリームに挿入される(ブロック98)。
実行段階のように、浮動小数点乗算処理のオペランドが利用可能である場合、浮動小数点乗算処理が正規化中間と最終結果の生成を保証するかどうかを決定するために、それらは検査される。浮動小数点乗算処理がアンノーマル中間体や非正規化最終結果を生成する可能性がある場合(ブロック100)には、修正された乗算−加算命令と追加の加算命令は、従来のパイプライン処理によって処理され(ブロック106)、上記で説明したように、浮動小数点加算処理を行なう前に、浮動小数点加算器52の正規化回路68を使用して積の正規化/非正規化を行う。
浮動小数点乗算処理が正規化中間体と最終積を生成すると決定される場合(ブロック100)には、積の正規化は抑制される。元の加数は、浮動小数点乗算−加算命令におけるゼロの代わりに使用される(ブロック102)。そして、追加の浮動小数点加算処理は、浮動小数点加算命令をNOPに変換することによって抑制される(ブロック104)。それから、命令の処理は、従来のパイプライン処理によって継続する(ブロック86)。
一つ以上の実施形態によれば、浮動小数点乗算処理の中間のアンノーマル出力と非正規化最終結果は、浮動小数点加算器52の正規化回路58を利用して正規化/非正規化が行われる。これは、レイテンシ(latency)や遅れを加え、シリコンエリアを拡大し、パワー消費を増加する、浮動小数点乗算器50の出力へ正規化回路を加える必要性を取り除く。
本発明は、特別の性質、態様、実施形態に関してここで説明されたが、多数の変形、修正、他の実施形態が、本発明の幅広い範囲にわたり可能であること、従って、すべての変形、修正、実施形態は、開示の範囲内であるとみなされることは明らかである。したがって、本実施形態は、例示されるようなすべての態様において解釈されるべきであり、制限されるべきではない。添付された請求項の意味と同等の範囲内で発生するすべての変更は、そこにおいて包含されることを意図するものである。
プロセッサの機能ブロック図。 浮動小数点乗算器によって供給される浮動小数点加算器の機能ブロック図。 浮動小数点乗算の命令を実行する方法の流れ図。 浮動小数点乗算−加算命令を実行する方法の流れ図。
本発明は、特別の性質、態様、実施形態に関してここで説明されたが、多数の変形、修正、他の実施形態が、本発明の幅広い範囲にわたり可能であること、従って、すべての変形、修正、実施形態は、開示の範囲内であるとみなされることは明らかである。したがって、本実施形態は、例示されるようなすべての態様において解釈されるべきであり、制限されるべきではない。添付された請求項の意味と同等の範囲内で発生するすべての変更は、そこにおいて包含されることを意図するものである。
以下に本件出願当初の特許請求の範囲に記載された発明を付記する。
[C1]浮動小数点乗算命令を、浮動小数点乗算処理および浮動小数点加算処理を行うように動作する浮動小数点乗算−加算命令へ変換することと、
前記浮動小数点加算処理の1つの加数を強制的にゼロにすることと、
を含む、非正規化入力、および/または、非正規化積を扱うための浮動小数点乗算命令を実行する方法。
[C2]前記方法のステップは、非正規化サポートモードにおいてのみ行われるC1の方法。
[C3]前記浮動小数点乗算命令を浮動小数点乗算−加算命令へ変換することは、実行パイプライン段階の前に生じる、C1の方法。
[C4]前記浮動小数点乗算命令を浮動小数点乗算−加算命令へ変換することは、デコードパイプライン段階で生じる、C3の方法。
[C5]前記浮動小数点乗算−加算命令は融合されておらず、浮動小数点乗算器の出力を浮動小数点加算器の正規化回路に転送することをさらに含む、C1の方法。
[C6]浮動小数点乗算器の前記出力を浮動小数点加算器の正規化回路に転送することは、浮動小数点乗算器の前記出力を前記正規化回路に直接、送ることを含む、C5の方法。
[C7]浮動小数点乗算器の前記出力を浮動小数点加算器の正規化回路に送ることは、1つ以上のパイプライン記憶要素を通じて前記正規化回路に浮動小数点乗算器の前記出力を送ることを含む、C5の方法。
[C8]前記浮動小数点乗算命令の乗数と被乗数を検査すること、
前記検査に基づいて、乗算処理の前記積は非正規化数ではないこと、および前記乗算のオペランドは非正規化ではないことを決定すること、ならびに、
そのような決定に応じて、前記浮動小数点加算処理を抑制すること、
をさらに含む、C1の方法。
[C9]前記乗数と被乗数の検査は、実行パイプライン段階で生じる、C8の方法。
[C10]前記浮動小数点加算処理を抑制することは、後続の命令により消費され得るように、浮動小数点乗算器の前記出力のオペランド・フォワーディングを含む、C8の方法。
[C11]前記浮動小数点乗算命令は融合されていない浮動小数点乗算−加算命令であり、
そして、前記浮動小数点乗算命令の変換は、
前記浮動小数点乗算−加算命令の前記加数に対して前記ゼロ値を代入することと、
前記元の浮動小数点乗算−加算命令の前記加数を持つ浮動小数点加算命令を前記浮動小数点乗算−加算命令の後に挿入することと、
を含む、C1の方法。
[C12]前記浮動小数点乗算−加算命令の乗数と被乗数を検査することと、
前記検査に基づいて、前記乗算処理の前記積は非正規化数ではないであろうことを決定することと、
前記検査に基づいて、前記乗算処理への前記入力が非正規化数ではないことを決定することと、
そのような決定に応じて、前記ゼロの加数を前記元の乗算−加算命令の前記加数で置き換えることと、
前記浮動小数点加算命令をNOPに変換することと、
をさらに含む、C11の方法。
[C13]1つ以上の命令実行パイプラインと、
浮動小数点乗算器と、
正規化回路を持つ浮動小数点加算器と、
前記浮動小数点加算器の前記正規化回路を利用する前記浮動小数点乗算器によって出力された浮動小数点積を正規化または非正規化するように動作するパイプライン制御器と、
を含むプロセッサ。
[C14]前記パイプライン制御器は、非正規化サポートモードにおいてのみ、前記浮動小数点積の正規化を行うか、あるいは、非正規化を行う、C13のプロセッサ。
[C15]前記パイプライン制御器は、各浮動小数点乗算命令を、浮動小数点乗算処理および浮動小数点加算処理を行うように動作する浮動小数点乗算−加算命令へ変換するように前記パイプラインに指令することによって、ならびに、前記浮動小数点加算処理の1つの加数を強制的にゼロにすることによって、前記浮動小数点積の正規化を行うか、あるいは非正規化を行う、
C13のプロセッサ。
[C16]前記パイプライン制御器は、実行パイプ段階の前に、各浮動小数点乗算命令を浮動小数点乗算−加算命令へ変換するように前記パイプラインに指令する、C15のプロセッサ。
[C17]前記パイプライン制御器は、デコードパイプ段階で、各浮動小数点乗算命令を浮動小数点乗算−加算命令へ変換するように前記パイプラインに指令する、C16のプロセッサ。
[C18]前記パイプライン制御器は、さらに、前記浮動小数点乗算器が前記浮動小数点乗算処理を行う前に、乗数と被乗数の検査によって、アンノーマル中間積または非正規化最終積を生成する可能性があるかどうかを予測するように動作する、および、そうでなければ、前記浮動小数点乗算器出力の正規化または非正規化を抑制するように動作する、C13のプロセッサ。
[C19]前記パイプライン制御器は、後続の命令により消費され得るように、前記積のオペランド・フォワーディングによって、前記浮動小数点乗算器の出力の正規化または非正規化を抑制する、C18のプロセッサ。
[C20]前記パイプラインに、各融合されていない浮動小数点乗算−加算命令を、ゼロの加数を持つ浮動小数点乗算−加算命令に、変換するように指令することと、
前記浮動小数点乗算−加算命令の後に、前記元の浮動小数点乗算−加算命令の前記加数を持つ浮動小数点加算命令を挿入すること、
によって、前記パイプライン制御器は、前記非正規化浮動小数点積の正規化を行うか、あるいは、非正規化を行う、C13のプロセッサ。
[C21]前記パイプライン制御器は、さらに、浮動小数点乗算処理を行なう前に、乗数と被乗数の検査によって、前記浮動小数点乗算器がことによるとアンノーマル中間積または非正規化最終積を生成することができるかどうかを予測するように動作する、そして、そうでなければ、浮動小数点乗算器出力の正規化を抑制するように動作する、C20のプロセッサ。
[C22]前記パイプライン制御器は、前記元の乗算−加算命令の前記加数で前記ゼロの加数を置き換えることによって、および、浮動小数点加算命令をNOPへ変換することによって、前記浮動小数点乗算器の前記出力の正規化または非正規化を抑制する、C21のプロセッサ。

Claims (22)

  1. 浮動小数点乗算命令を、浮動小数点乗算処理および浮動小数点加算処理を行うように動作する浮動小数点乗算−加算命令へ変換することと、
    前記浮動小数点加算処理の1つの加数を強制的にゼロにすることと、
    を含む、非正規化入力、および/または、非正規化積を扱うための浮動小数点乗算命令を実行する方法。
  2. 前記方法のステップは、非正規化サポートモードにおいてのみ行われる請求項1の方法。
  3. 前記浮動小数点乗算命令を浮動小数点乗算−加算命令へ変換することは、実行パイプライン段階の前に生じる、請求項1の方法。
  4. 前記浮動小数点乗算命令を浮動小数点乗算−加算命令へ変換することは、デコードパイプライン段階で生じる、請求項3の方法。
  5. 前記浮動小数点乗算−加算命令は融合されておらず、浮動小数点乗算器の出力を浮動小数点加算器の正規化回路に転送することをさらに含む、請求項1の方法。
  6. 浮動小数点乗算器の前記出力を浮動小数点加算器の正規化回路に転送することは、浮動小数点乗算器の前記出力を前記正規化回路に直接、送ることを含む、請求項5の方法。
  7. 浮動小数点乗算器の前記出力を浮動小数点加算器の正規化回路に送ることは、1つ以上のパイプライン記憶要素を通じて前記正規化回路に浮動小数点乗算器の前記出力を送ることを含む、請求項5の方法。
  8. 前記浮動小数点乗算命令の乗数と被乗数を検査すること、
    前記検査に基づいて、乗算処理の前記積は非正規化数ではないこと、および前記乗算のオペランドは非正規化ではないことを決定すること、ならびに、
    そのような決定に応じて、前記浮動小数点加算処理を抑制すること、
    をさらに含む、請求項1の方法。
  9. 前記乗数と被乗数の検査は、実行パイプライン段階で生じる、請求項8の方法。
  10. 前記浮動小数点加算処理を抑制することは、後続の命令により消費され得るように、浮動小数点乗算器の前記出力のオペランド・フォワーディングを含む、請求項8の方法。
  11. 前記浮動小数点乗算命令は融合されていない浮動小数点乗算−加算命令であり、
    そして、前記浮動小数点乗算命令の変換は、
    前記浮動小数点乗算−加算命令の前記加数に対して前記ゼロ値を代入することと、
    前記元の浮動小数点乗算−加算命令の前記加数を持つ浮動小数点加算命令を前記浮動小数点乗算−加算命令の後に挿入することと、
    を含む、請求項1の方法。
  12. 前記浮動小数点乗算−加算命令の乗数と被乗数を検査することと、
    前記検査に基づいて、前記乗算処理の前記積は非正規化数ではないであろうことを決定することと、
    前記検査に基づいて、前記乗算処理への前記入力が非正規化数ではないことを決定することと、
    そのような決定に応じて、前記ゼロの加数を前記元の乗算−加算命令の前記加数で置き換えることと、
    前記浮動小数点加算命令をNOPに変換することと、
    をさらに含む、請求項11の方法。
  13. 1つ以上の命令実行パイプラインと、
    浮動小数点乗算器と、
    正規化回路を持つ浮動小数点加算器と、
    前記浮動小数点加算器の前記正規化回路を利用する前記浮動小数点乗算器によって出力された浮動小数点積を正規化または非正規化するように動作するパイプライン制御器と、
    を含むプロセッサ。
  14. 前記パイプライン制御器は、非正規化サポートモードにおいてのみ、前記浮動小数点積の正規化を行うか、あるいは、非正規化を行う、請求項13のプロセッサ。
  15. 前記パイプライン制御器は、各浮動小数点乗算命令を、浮動小数点乗算処理および浮動小数点加算処理を行うように動作する浮動小数点乗算−加算命令へ変換するように前記パイプラインに指令することによって、ならびに、前記浮動小数点加算処理の1つの加数を強制的にゼロにすることによって、前記浮動小数点積の正規化を行うか、あるいは非正規化を行う、
    請求項13のプロセッサ。
  16. 前記パイプライン制御器は、実行パイプ段階の前に、各浮動小数点乗算命令を浮動小数点乗算−加算命令へ変換するように前記パイプラインに指令する、請求項15のプロセッサ。
  17. 前記パイプライン制御器は、デコードパイプ段階で、各浮動小数点乗算命令を浮動小数点乗算−加算命令へ変換するように前記パイプラインに指令する、請求項16のプロセッサ。
  18. 前記パイプライン制御器は、さらに、前記浮動小数点乗算器が前記浮動小数点乗算処理を行う前に、乗数と被乗数の検査によって、アンノーマル中間積または非正規化最終積を生成する可能性があるかどうかを予測するように動作する、および、そうでなければ、前記浮動小数点乗算器出力の正規化または非正規化を抑制するように動作する、請求項13のプロセッサ。
  19. 前記パイプライン制御器は、後続の命令により消費され得るように、前記積のオペランド・フォワーディングによって、前記浮動小数点乗算器の出力の正規化または非正規化を抑制する、請求項18のプロセッサ。
  20. 前記パイプラインに、各融合されていない浮動小数点乗算−加算命令を、ゼロの加数を持つ浮動小数点乗算−加算命令に、変換するように指令することと、
    前記浮動小数点乗算−加算命令の後に、前記元の浮動小数点乗算−加算命令の前記加数を持つ浮動小数点加算命令を挿入すること、
    によって、前記パイプライン制御器は、前記非正規化浮動小数点積の正規化を行うか、あるいは、非正規化を行う、請求項13のプロセッサ。
  21. 前記パイプライン制御器は、さらに、浮動小数点乗算処理を行なう前に、乗数と被乗数の検査によって、前記浮動小数点乗算器がことによるとアンノーマル中間積または非正規化最終積を生成することができるかどうかを予測するように動作する、そして、そうでなければ、浮動小数点乗算器出力の正規化を抑制するように動作する、請求項20のプロセッサ。
  22. 前記パイプライン制御器は、前記元の乗算−加算命令の前記加数で前記ゼロの加数を置き換えることによって、および、浮動小数点加算命令をNOPへ変換することによって、前記浮動小数点乗算器の前記出力の正規化または非正規化を抑制する、請求項21のプロセッサ。
JP2012037454A 2006-05-10 2012-02-23 非正規化オペランドのためのモードベース乗算−加算プロセッサ Ceased JP2012150821A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/382,525 2006-05-10
US11/382,525 US7912887B2 (en) 2006-05-10 2006-05-10 Mode-based multiply-add recoding for denormal operands

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2009509974A Division JP4938844B2 (ja) 2006-05-10 2007-04-27 非正規化オペランドのためのモードベース乗算−加算プロセッサ

Publications (1)

Publication Number Publication Date
JP2012150821A true JP2012150821A (ja) 2012-08-09

Family

ID=38461209

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2009509974A Expired - Fee Related JP4938844B2 (ja) 2006-05-10 2007-04-27 非正規化オペランドのためのモードベース乗算−加算プロセッサ
JP2012037454A Ceased JP2012150821A (ja) 2006-05-10 2012-02-23 非正規化オペランドのためのモードベース乗算−加算プロセッサ

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2009509974A Expired - Fee Related JP4938844B2 (ja) 2006-05-10 2007-04-27 非正規化オペランドのためのモードベース乗算−加算プロセッサ

Country Status (6)

Country Link
US (2) US7912887B2 (ja)
EP (1) EP2024816A1 (ja)
JP (2) JP4938844B2 (ja)
KR (1) KR20090014292A (ja)
CN (2) CN103135958A (ja)
WO (1) WO2007133914A1 (ja)

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7912887B2 (en) * 2006-05-10 2011-03-22 Qualcomm Incorporated Mode-based multiply-add recoding for denormal operands
US8037118B2 (en) * 2007-04-10 2011-10-11 Eric Quinnell Three-path fused multiply-adder circuit
US8046399B1 (en) * 2008-01-25 2011-10-25 Oracle America, Inc. Fused multiply-add rounding and unfused multiply-add rounding in a single multiply-add module
US8239440B2 (en) 2008-03-28 2012-08-07 Oracle America, Inc. Processor which implements fused and unfused multiply-add instructions in a pipelined manner
US8239441B2 (en) * 2008-05-15 2012-08-07 Oracle America, Inc. Leading zero estimation modification for unfused rounding catastrophic cancellation
US8103858B2 (en) * 2008-06-30 2012-01-24 Intel Corporation Efficient parallel floating point exception handling in a processor
US8166091B2 (en) * 2008-11-10 2012-04-24 Crossfield Technology LLC Floating-point fused dot-product unit
US8150902B2 (en) 2009-06-19 2012-04-03 Singular Computing Llc Processing with compact arithmetic processing element
US9092213B2 (en) * 2010-09-24 2015-07-28 Intel Corporation Functional unit for vector leading zeroes, vector trailing zeroes, vector operand 1s count and vector parity calculation
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
US8892622B2 (en) 2011-04-07 2014-11-18 Oracle International Corporation Pipelined divide circuit for small operand sizes
US9600278B1 (en) 2011-05-09 2017-03-21 Altera Corporation Programmable device using fixed and configurable logic to implement recursive trees
US9098332B1 (en) 2012-06-01 2015-08-04 Altera Corporation Specialized processing block with fixed- and floating-point structures
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
US8996600B1 (en) * 2012-08-03 2015-03-31 Altera Corporation Specialized processing block for implementing floating-point multiplier with subnormal operation support
US9829956B2 (en) * 2012-11-21 2017-11-28 Nvidia Corporation Approach to power reduction in floating-point operations
US9286069B2 (en) 2012-12-21 2016-03-15 Arm Limited Dynamic write port re-arbitration
US9189200B1 (en) 2013-03-14 2015-11-17 Altera Corporation Multiple-precision processing block in a programmable integrated circuit device
US9348795B1 (en) 2013-07-03 2016-05-24 Altera Corporation Programmable device using fixed and configurable logic to implement floating-point rounding
CN103677739B (zh) * 2013-11-28 2016-08-17 中国航天科技集团公司第九研究院第七七一研究所 一种可配置的乘累加运算单元及其构成的乘累加运算阵列
US20150261542A1 (en) * 2014-03-14 2015-09-17 Arm Limited Data processing apparatus and method for performing data processing operation with a conditional processing step
CN106325810B (zh) * 2014-07-02 2019-06-18 上海兆芯集成电路有限公司 微处理器
US9563400B2 (en) 2014-09-18 2017-02-07 International Business Machines Corporation Optimized structure for hexadecimal and binary multiplier array
US9684488B2 (en) 2015-03-26 2017-06-20 Altera Corporation Combined adder and pre-adder for high-radix multiplier circuit
US9823897B2 (en) * 2015-09-25 2017-11-21 Arm Limited Apparatus and method for floating-point multiplication
US11061672B2 (en) 2015-10-02 2021-07-13 Via Alliance Semiconductor Co., Ltd. Chained split execution of fused compound arithmetic operations
US9875084B2 (en) * 2016-04-28 2018-01-23 Vivante Corporation Calculating trigonometric functions using a four input dot product circuit
US10078512B2 (en) 2016-10-03 2018-09-18 Via Alliance Semiconductor Co., Ltd. Processing denormal numbers in FMA hardware
US10175944B2 (en) 2017-04-12 2019-01-08 Intel Corporation Mixed-precision floating-point arithmetic circuitry in specialized processing blocks
JP7114622B2 (ja) 2017-05-17 2022-08-08 グーグル エルエルシー ハードウェアにおける行列乗算の実行
EP3646164A4 (en) * 2017-06-30 2021-01-20 INTEL Corporation HETEROGENIC MULTIPLIER
US10747501B2 (en) * 2017-08-31 2020-08-18 Qualcomm Incorporated Providing efficient floating-point operations using matrix processors in processor-based systems
US11157280B2 (en) 2017-12-07 2021-10-26 International Business Machines Corporation Dynamic fusion based on operand size
US11256509B2 (en) 2017-12-07 2022-02-22 International Business Machines Corporation Instruction fusion after register rename
US10901694B2 (en) 2018-12-31 2021-01-26 Micron Technology, Inc. Binary parallel adder and multiplier
US11347511B2 (en) * 2019-05-20 2022-05-31 Arm Limited Floating-point scaling operation
US20220229633A1 (en) 2020-01-07 2022-07-21 SK Hynix Inc. Multiplication and accumulation(mac) operator and processing-in-memory (pim) device including the mac operator
TW202141290A (zh) 2020-01-07 2021-11-01 韓商愛思開海力士有限公司 記憶體中處理(pim)系統和pim系統的操作方法
US11663000B2 (en) 2020-01-07 2023-05-30 SK Hynix Inc. Multiplication and accumulation(MAC) operator and processing-in-memory (PIM) device including the MAC operator
CN112463112B (zh) * 2020-11-19 2022-08-16 上海壁仞智能科技有限公司 点积累加方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09212337A (ja) * 1996-01-31 1997-08-15 Hitachi Ltd 浮動小数点演算処理装置
JPH11102353A (ja) * 1997-09-26 1999-04-13 Nec Corp 浮動小数点積和演算器
JP2003529124A (ja) * 1999-07-30 2003-09-30 ミップス テクノロジーズ インコーポレイテッド 乗算−加算演算用高精度プロセッサ

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4727508A (en) 1984-12-14 1988-02-23 Motorola, Inc. Circuit for adding and/or subtracting numbers in logarithmic representation
US4825400A (en) 1986-01-13 1989-04-25 General Electric Company Floating point accumulator circuit
US5530663A (en) * 1994-11-14 1996-06-25 International Business Machines Corporation Floating point unit for calculating a compound instruction A+B×C in two cycles
JPH09507941A (ja) * 1995-04-18 1997-08-12 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン multiply−add浮動小数点シーケンスにおけるウエイト・サイクルなしのブロック正規化
CN1075646C (zh) * 1996-01-19 2001-11-28 张胤微 一种高速乘法器
JP3658072B2 (ja) * 1996-02-07 2005-06-08 株式会社ルネサステクノロジ データ処理装置およびデータ処理方法
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
US5903479A (en) * 1997-09-02 1999-05-11 International Business Machines Corporation Method and system for executing denormalized numbers
US6714957B1 (en) * 2000-01-04 2004-03-30 National Semiconductor Corporation System and method for efficient processing of denormal results as hardware exceptions
CA2327924A1 (en) * 2000-12-08 2002-06-08 Ibm Canada Limited-Ibm Canada Limitee Processor design for extended-precision arithmetic
US20020164239A1 (en) * 2001-05-07 2002-11-07 Angermeier Gregory Robert Tiltable cargo box assembly with extension ramp
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
US6904446B2 (en) * 2001-08-24 2005-06-07 Freescale Semiconductor, Inc. Floating point multiplier/accumulator with reduced latency and method thereof
US7188133B2 (en) * 2002-06-20 2007-03-06 Matsushita Electric Industrial Co., Ltd. Floating point number storage method and floating point arithmetic device
US20050228844A1 (en) * 2004-04-08 2005-10-13 International Business Machines Corporation Fast operand formatting for a high performance multiply-add floating point-unit
US7225323B2 (en) * 2004-11-10 2007-05-29 Nvidia Corporation Multi-purpose floating point and integer multiply-add functional unit with multiplication-comparison test addition and exponent pipelines
US7451172B2 (en) * 2005-02-10 2008-11-11 International Business Machines Corporation Handling denormal floating point operands when result must be normalized
US7720900B2 (en) * 2005-09-09 2010-05-18 International Business Machines Corporation Fused multiply add split for multiple precision arithmetic
US7912887B2 (en) * 2006-05-10 2011-03-22 Qualcomm Incorporated Mode-based multiply-add recoding for denormal operands
US8037118B2 (en) * 2007-04-10 2011-10-11 Eric Quinnell Three-path fused multiply-adder circuit

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH09212337A (ja) * 1996-01-31 1997-08-15 Hitachi Ltd 浮動小数点演算処理装置
JPH11102353A (ja) * 1997-09-26 1999-04-13 Nec Corp 浮動小数点積和演算器
JP2003529124A (ja) * 1999-07-30 2003-09-30 ミップス テクノロジーズ インコーポレイテッド 乗算−加算演算用高精度プロセッサ

Also Published As

Publication number Publication date
EP2024816A1 (en) 2009-02-18
CN101438233B (zh) 2013-03-06
WO2007133914A1 (en) 2007-11-22
CN103135958A (zh) 2013-06-05
CN101438233A (zh) 2009-05-20
US7912887B2 (en) 2011-03-22
JP2009536771A (ja) 2009-10-15
KR20090014292A (ko) 2009-02-09
US8447800B2 (en) 2013-05-21
JP4938844B2 (ja) 2012-05-23
US20110137970A1 (en) 2011-06-09
US20070266071A1 (en) 2007-11-15

Similar Documents

Publication Publication Date Title
JP4938844B2 (ja) 非正規化オペランドのためのモードベース乗算−加算プロセッサ
US9891886B2 (en) Split-path heuristic for performing a fused FMA operation
TWI515649B (zh) 響應於輸入資料値以降低在積和熔加運算(fma)單元中的功率消耗之技術
JP4953644B2 (ja) 正規化および丸め処理前にフィードバックを行う浮動小数点ユニットのためのシステムおよび方法
US11347511B2 (en) Floating-point scaling operation
US8577948B2 (en) Split path multiply accumulate unit
JP6001276B2 (ja) 浮動小数点加算を実行するための装置および方法
JPH06236257A (ja) データ・プロセッサにおいて浮動小数点実行ユニット内で後正規化を実行する方法および装置
Trong et al. P6 binary floating-point unit
Schwarz et al. FPU implementations with denormalized numbers
US20090259708A1 (en) Apparatus and method for optimizing the performance of x87 floating point addition instructions in a microprocessor
Boersma et al. The POWER7 binary floating-point unit
US5815420A (en) Microprocessor arithmetic logic unit using multiple number representations
Quinnell et al. Bridge floating-point fused multiply-add design
US8620983B2 (en) Leading sign digit predictor for floating point near subtractor
Srinivasan et al. Split-path fused floating point multiply accumulate (FPMAC)
JP2012521047A (ja) 浮動小数点ユニットにおけるオーバーシフトの高速検出のためのメカニズム
WO2011137209A1 (en) Operand-optimized asynchronous floating-point units and methods of use thereof
US6976153B1 (en) Floating point unit with try-again reservation station and method of operation
EP0837390A1 (en) Improvements in or relating to microprocessor integrated circuits
JPH0469734A (ja) 浮動小数点加減算のアンダーフロー例外発生予測回路
GB2617436A (en) Chained multiply accumulate using an unrounded product
Zheng et al. Floating-point unit processing denormalized numbers

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130927

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131001

A045 Written measure of dismissal of application [lapsed due to lack of payment]

Free format text: JAPANESE INTERMEDIATE CODE: A045

Effective date: 20140225