JP2012150821A - 非正規化オペランドのためのモードベース乗算−加算プロセッサ - Google Patents
非正規化オペランドのためのモードベース乗算−加算プロセッサ Download PDFInfo
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/487—Multiplying; Dividing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49905—Exception handling
- G06F7/4991—Overflow or underflow
- G06F7/49915—Mantissa overflow or underflow in handling floating-point numbers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/483—Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
- G06F7/487—Multiplying; Dividing
- G06F7/4876—Multiplying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/386—Special constructional features
- G06F2207/3884—Pipelining
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/544—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
- G06F7/5443—Sum of products
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
【解決手段】非正規化サポートモードでは、浮動小数点加算器の正規化回路は、浮動小数点乗算器の出力を正規化、あるいは、非正規化するために使用される。各浮動小数点乗算命令は、強制的にゼロにされる加数で、乗算−加算命令へ推論的に変換される。浮動小数点加算器の正規化回路を利用して積を正規化、あるいは、非正規化する一方で、これは積の値を保存する。乗算処理のオペランドが利用可能である場合、それらは検査される。オペランドがアンノーマル中間積、あるいは、非正規化最終積を生成しない場合、たとえば、オペランド・フォワーディングによって、その加算演算は抑制される。さらに、各融合なしの浮動小数点乗算−加算命令は、ゼロの加数を持つ乗算−加算命令で置き換えられる。そして、元の乗算−加算命令の加数を持つ浮動小数点加算命令は、命令ストリームに挿入される。
【選択図】図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つの加数は強制的にゼロにされる。
もう一つの実施形態はプロセッサに関係する。プロセッサは、正規化回路を有し、浮動小数点乗算−累算ユニットを含んでいる、一つ以上の命令実行パイプラインを含む。さらに、プロセッサは、浮動小数点加算器の正規化回路を使用する浮動小数点乗算器によって出力された、アンノーマル中間仮数部または非正規化浮動小数点積の正規化または非正規化を行なうように動作するパイプライン制御器を含む。
図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のプロセッサ。
以下に本件出願当初の特許請求の範囲に記載された発明を付記する。
[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の方法。
- 前記浮動小数点乗算命令を浮動小数点乗算−加算命令へ変換することは、実行パイプライン段階の前に生じる、請求項1の方法。
- 前記浮動小数点乗算命令を浮動小数点乗算−加算命令へ変換することは、デコードパイプライン段階で生じる、請求項3の方法。
- 前記浮動小数点乗算−加算命令は融合されておらず、浮動小数点乗算器の出力を浮動小数点加算器の正規化回路に転送することをさらに含む、請求項1の方法。
- 浮動小数点乗算器の前記出力を浮動小数点加算器の正規化回路に転送することは、浮動小数点乗算器の前記出力を前記正規化回路に直接、送ることを含む、請求項5の方法。
- 浮動小数点乗算器の前記出力を浮動小数点加算器の正規化回路に送ることは、1つ以上のパイプライン記憶要素を通じて前記正規化回路に浮動小数点乗算器の前記出力を送ることを含む、請求項5の方法。
- 前記浮動小数点乗算命令の乗数と被乗数を検査すること、
前記検査に基づいて、乗算処理の前記積は非正規化数ではないこと、および前記乗算のオペランドは非正規化ではないことを決定すること、ならびに、
そのような決定に応じて、前記浮動小数点加算処理を抑制すること、
をさらに含む、請求項1の方法。 - 前記乗数と被乗数の検査は、実行パイプライン段階で生じる、請求項8の方法。
- 前記浮動小数点加算処理を抑制することは、後続の命令により消費され得るように、浮動小数点乗算器の前記出力のオペランド・フォワーディングを含む、請求項8の方法。
- 前記浮動小数点乗算命令は融合されていない浮動小数点乗算−加算命令であり、
そして、前記浮動小数点乗算命令の変換は、
前記浮動小数点乗算−加算命令の前記加数に対して前記ゼロ値を代入することと、
前記元の浮動小数点乗算−加算命令の前記加数を持つ浮動小数点加算命令を前記浮動小数点乗算−加算命令の後に挿入することと、
を含む、請求項1の方法。 - 前記浮動小数点乗算−加算命令の乗数と被乗数を検査することと、
前記検査に基づいて、前記乗算処理の前記積は非正規化数ではないであろうことを決定することと、
前記検査に基づいて、前記乗算処理への前記入力が非正規化数ではないことを決定することと、
そのような決定に応じて、前記ゼロの加数を前記元の乗算−加算命令の前記加数で置き換えることと、
前記浮動小数点加算命令をNOPに変換することと、
をさらに含む、請求項11の方法。 - 1つ以上の命令実行パイプラインと、
浮動小数点乗算器と、
正規化回路を持つ浮動小数点加算器と、
前記浮動小数点加算器の前記正規化回路を利用する前記浮動小数点乗算器によって出力された浮動小数点積を正規化または非正規化するように動作するパイプライン制御器と、
を含むプロセッサ。 - 前記パイプライン制御器は、非正規化サポートモードにおいてのみ、前記浮動小数点積の正規化を行うか、あるいは、非正規化を行う、請求項13のプロセッサ。
- 前記パイプライン制御器は、各浮動小数点乗算命令を、浮動小数点乗算処理および浮動小数点加算処理を行うように動作する浮動小数点乗算−加算命令へ変換するように前記パイプラインに指令することによって、ならびに、前記浮動小数点加算処理の1つの加数を強制的にゼロにすることによって、前記浮動小数点積の正規化を行うか、あるいは非正規化を行う、
請求項13のプロセッサ。 - 前記パイプライン制御器は、実行パイプ段階の前に、各浮動小数点乗算命令を浮動小数点乗算−加算命令へ変換するように前記パイプラインに指令する、請求項15のプロセッサ。
- 前記パイプライン制御器は、デコードパイプ段階で、各浮動小数点乗算命令を浮動小数点乗算−加算命令へ変換するように前記パイプラインに指令する、請求項16のプロセッサ。
- 前記パイプライン制御器は、さらに、前記浮動小数点乗算器が前記浮動小数点乗算処理を行う前に、乗数と被乗数の検査によって、アンノーマル中間積または非正規化最終積を生成する可能性があるかどうかを予測するように動作する、および、そうでなければ、前記浮動小数点乗算器出力の正規化または非正規化を抑制するように動作する、請求項13のプロセッサ。
- 前記パイプライン制御器は、後続の命令により消費され得るように、前記積のオペランド・フォワーディングによって、前記浮動小数点乗算器の出力の正規化または非正規化を抑制する、請求項18のプロセッサ。
- 前記パイプラインに、各融合されていない浮動小数点乗算−加算命令を、ゼロの加数を持つ浮動小数点乗算−加算命令に、変換するように指令することと、
前記浮動小数点乗算−加算命令の後に、前記元の浮動小数点乗算−加算命令の前記加数を持つ浮動小数点加算命令を挿入すること、
によって、前記パイプライン制御器は、前記非正規化浮動小数点積の正規化を行うか、あるいは、非正規化を行う、請求項13のプロセッサ。 - 前記パイプライン制御器は、さらに、浮動小数点乗算処理を行なう前に、乗数と被乗数の検査によって、前記浮動小数点乗算器がことによるとアンノーマル中間積または非正規化最終積を生成することができるかどうかを予測するように動作する、そして、そうでなければ、浮動小数点乗算器出力の正規化を抑制するように動作する、請求項20のプロセッサ。
- 前記パイプライン制御器は、前記元の乗算−加算命令の前記加数で前記ゼロの加数を置き換えることによって、および、浮動小数点加算命令をNOPへ変換することによって、前記浮動小数点乗算器の前記出力の正規化または非正規化を抑制する、請求項21のプロセッサ。
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)
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)
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)
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 |
-
2006
- 2006-05-10 US US11/382,525 patent/US7912887B2/en active Active
-
2007
- 2007-04-27 JP JP2009509974A patent/JP4938844B2/ja not_active Expired - Fee Related
- 2007-04-27 CN CN2013100259863A patent/CN103135958A/zh active Pending
- 2007-04-27 WO PCT/US2007/067649 patent/WO2007133914A1/en active Application Filing
- 2007-04-27 CN CN2007800163702A patent/CN101438233B/zh not_active Expired - Fee Related
- 2007-04-27 EP EP07761472A patent/EP2024816A1/en not_active Withdrawn
- 2007-04-27 KR KR1020087030127A patent/KR20090014292A/ko not_active Application Discontinuation
-
2011
- 2011-02-14 US US13/026,335 patent/US8447800B2/en not_active Expired - Fee Related
-
2012
- 2012-02-23 JP JP2012037454A patent/JP2012150821A/ja not_active Ceased
Patent Citations (3)
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 |