JP4691294B2 - 乗算−加算演算用高精度プロセッサ - Google Patents
乗算−加算演算用高精度プロセッサ Download PDFInfo
- Publication number
- JP4691294B2 JP4691294B2 JP2001514658A JP2001514658A JP4691294B2 JP 4691294 B2 JP4691294 B2 JP 4691294B2 JP 2001514658 A JP2001514658 A JP 2001514658A JP 2001514658 A JP2001514658 A JP 2001514658A JP 4691294 B2 JP4691294 B2 JP 4691294B2
- Authority
- JP
- Japan
- Prior art keywords
- multiplier
- unit
- fpu
- fractional part
- floating point
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49942—Significance control
- G06F7/49947—Rounding
- G06F7/49957—Implementation of IEEE-754 Standard
-
- 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)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computational Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Nonlinear Science (AREA)
- General Engineering & Computer Science (AREA)
- Complex Calculations (AREA)
Description
(発明の背景)
本発明は、浮動小数点プロセッサに関し、より詳細には、乗算−加算(Madd)演算用高精度浮動小数点プロセッサに関する。
【0002】
デジタル処理システムにおいて、数字データは、典型的には整数表示または浮動小数点表示を用いて表される。浮動小数点表示は多くの用途において好ましい。その理由は、浮動小数点表示は広範囲の数値を表示することができ、そしていくつかの特定の演算の操作が容易だからである。浮動小数点表示は、典型的には次の3つの構成要素を含む:サインビット(sign)、しばしば有効(significand)と称される小数部(mant)、および指数(exp)。示された浮動小数点の数は、(−1)sign・mant・2expと表され得る。浮動小数点の表示はまた、“IEEE Standard for Binary Floating−Point Arithmetic”によって定義される。これは本明細書中でIEEE754標準(または単にIEEE標準)と称され、そして本明細書中においてすべての目的でその全体が参照として援用される。
【0003】
多くの演算(加算、減算、および乗算のような算術演算を含む)が浮動小数点の数で実行され得る。算術演算のために、IEEE標準は、各浮動小数点演算についての独自の解を生成するために従うべきガイドラインを提供する。特に、IEEE標準は、特定の演算(例えば、乗算、加算)、得られた出力の精度、および使用されるべきデータフォーマットからの結果を基に実行されるべき処理を説明する。例えば、IEEE標準は、加算および乗算演算からの結果に適用可能ないくつかの丸めモード、および丸めが実行されるビット位置を定義する。この要求は、IEEE準拠浮動小数点プロセッサの異なるインプリメンテーションからの同一の結果を保証する。
【0004】
多くの用途は、2つのオペランドでの乗算、および第3のオペランドとの得られた積の加算(または減算)を実行する。この乗算−加算(すなわち、Madd)演算は、例えば、フィルタ関数、たたみこみ関数、相関関数、マトリックス変換、および他の関数を演算するためにしばしば使用されるデジタル信号処理において共通である。Madd演算はまた、(3−D)グラフィック用途のための幾何学的演算に共通して使用される。
【0005】
従来は、Madd演算は、乗算(MUL)演算に続いて加算(ADD)演算を連続的に実行することにより達成され得る。この連続的な演算の実行により、長期の処理遅延が引き起こされる。性能の向上は、従来の浮動小数点乗算および加算をまたサポートする特別に指定されたユニットを使用して、Madd演算を実行することで、しばしば達成することができる。
【0006】
Madd演算のために、後処理が、乗算部分からの途中の結果を基に典型的に実行される。IEEE丸め要求を満たす最終のMadd出力を得るために、後処理は、可能な非正規化(denormalization)、およびIEEE標準によって定義される丸めモードの一つに従う途中結果の丸めを含む。非正規化は非正規化された数(すなわち、最小の正の表示可能な正規化された数(+amin)と最小の負の表示可能な正規化された数(−amin)との間のゼロでない数)で実行され、丸めがIEEE標準によって特定されるビット位置で実行され得るような適切なフォーマットの非正規化された数を設定する。IEEE準拠Madd結果を生成するための後処理(すなわち、より詳細には、非正規化および丸め)は、典型的には精度の低下(非正規化および丸めの間に、いくつかのビットが放棄されるため)、ハードウェアの複雑性の増加、および処理時間の増加をもたらす。ハードウェアの複雑性を減少させ、処理時間を改善するために、いくつかのMaddアーキテクチャは、最小の表示可能な正規化された数よりも小さい数(例えば、途中結果)がゼロまたはaminのような何か他の値に設定またはフラッシュ(flush)されるさらなる演算モードを提供する。しかし、フラッシュトゥーゼロモードは、小数部がゼロまたは何か他のあらかじめ定義された最小値で置換されるために精度のより大きいロスを受ける。
【0007】
従って、Madd演算に関して、出力結果の精度を向上させ、途中結果の後処理を簡単にし、そして全体の処理時間を減少させる技術が非常に望まれる。
【0008】
(発明の要旨)
本発明は、乗算加算(Madd)演算の実行が可能であり、高精度で、回路複雑性が低く、可能な限り演算速度を向上させた浮動小数点プロセッサを提供する。向上した性能は、特定の様式での特定の演算モードでの演算時に、乗算器ユニットからの途中結果を処理することで達成される。具体的には、途中結果は、以下で詳細に説明するように、正規化または非正規化されず、丸められる。
【0009】
本発明の実施形態は、乗算−加算(Madd)演算を実行するように構成可能な浮動小数点ユニット(FPU)を提供する。FPUは、加算器ユニットに接続された乗算器ユニットを含む。乗算器ユニットは、乗算器出力小数部を生成するために、第1および第2のオペランドに関する小数部を受け取り、そして乗算する。乗算器ユニットは、丸められそして擬正規化フォーマットを有する乗算器出力小数部によって定義される第1の演算モードで演算するように構成可能である。加算器ユニットは乗算器ユニットに接続し、そしてFPU出力小数部を生成するために、乗算器出力小数部と第3のオペランドの小数部とを受け取り、そしてそれらを結合する。
【0010】
一つの実施形態では、擬正規化フォーマットは、一の値を有する2進小数点の左側に対する少なくとも一つのビットによって特徴付けられる。乗算器出力小数部は、IEEE標準によって定義されたビット位置で丸められ得、そしてさらにその関連する指数部とは無関係に丸められ得る。
【0011】
乗算器ユニットは、複数の演算モードうちの一つで選択的に演算するように指定され得る。上記の第1の演算モードに加えて、第2の演算モードがIEEE標準に適合する乗算器出力小数部によって定義され得る。このモードでは、乗算器出力小数部は、必要に応じて正規化または非正規化され、IEEE標準に従って丸められる。第3の演算モードが、非正規化乗算器出力が検出される場合にゼロまたは他のあらかじめ定義された値にフラッシュされる乗算器出力小数部によって定義され得る。演算モードは、制御レジスタ、制御信号、または何か他の機構に格納された値によって選択され得る。
【0012】
FPUは、相互の数または相互の平方根の数を近似するように指定された一組の演算を実行するように構成される場合に向上した性能を提供し得る。これらの近似は、Newton−Raphsonアルゴリズムに従って実行され得る。
【0013】
本発明のさらに別の実施形態は、Madd演算を実行するように構成可能な浮動小数点プロセッサを提供する。浮動小数点プロセッサは、加算器ユニットに接続された乗算器ユニットを含む。乗算器ユニットは、第1の丸めユニットに作動可能に接続された乗算器アレイを含む。乗算器アレイは、2つのオペランドの小数部を受け取り、そして乗算する。第1の丸めユニットは、乗算器アレイからの出力を丸めるように構成可能であり、擬正規化フォーマットを有する丸められた乗算器出力小数部を生成する。加算器ユニットは、桁上げ伝播加算器(CPA)、第2の丸めユニット、および正規化ユニットを含む。CPAは乗算器出力小数部および第3のオペランドの小数部を受け取り、そしてそれらを結合する。第2の丸めユニットはCPAと結合し、そしてCPAからの小数部を受け取り、丸める。正規化ユニットは第2の丸めユニットと結合し、そして丸められた小数部を受け取り、正規化する。乗算器ユニット内では、別のCPAが乗算器アレイと第1の丸めユニットとの間で接続可能であり、合計出力と乗算器アレイからの桁上げ出力とを受け取り、結合する。
【0014】
上記のFPUおよび浮動小数点プロセッサは、典型的にはオペランドの指数部を処理するためのさらなるユニットを含む。FPUおよび浮動小数点プロセッサは、マイクロプロセッサまたは他のハードウェア構造物内に組み込まれ得、さらにハードウェア設計言語(例えば、Verilog)を使用して記載および/またはインプリメントされ得る。
【0015】
本発明のさらに別の実施形態は、浮動小数点Madd演算を実行する方法を提供する。この方法によれば、2つのオペランドに関する小数部は第3の小数部を生成するために乗算され、次いでこれは第4の小数部を生成するために丸められる。第4の小数部は、擬正規化フォーマットおよび正規化された小数部より大きな範囲を有する。第4の小数部は第3のオペランドの小数部と結合されて、出力小数部を生成する。出力小数部はさらに丸められ、そして正規化され、IEEE標準に適合する表示を生成し得る。
【0016】
本発明はまた、上記の実施形態をインプリメントするコンピュータプログラム製品を提供する。
【0017】
本発明の他の局面とともに、上記の事項は、以下の明細書、特許請求の範囲、および添付の図面を参照してより明らかとなる。
【0018】
(特定の実施形態の説明)
図1は、本発明の浮動小数点ユニット(FPU)110を組み込んだプロセッサ100の実施形態の簡略化した図を示す。図1の特定の実施形態に示されるように、プロセッサ100は、命令ディスパッチユニット(IDU)120、ロード格納ユニット(LSU)130および整数実行ユニット(IXU)140をさらに含む。IDU120は、命令のシーケンスを復号し、FPU110への浮動小数点命令をディスパッチし、ディスパッチされた各浮動小数点命令の状態、リソースおよびレジスタ依存性、ならびに得られたオペランドを次のFPU命令へバイパスする確率を追跡する。FPU110は、IDU120によって指示される浮動小数点計算を実行する。LSU130は、他のエレメント(すなわち、プロセッサ100の内部または外部)とインターフェイスし、データをFPU110へ提供し、FPU110からデータを受け取る。例えば、オペランドがLSU130からFPU110へとロードされ、結果がFPU110からLSU130へ提供される。IXU140は、整数計算を実行し、データをFPU110へ送信し、FPU110からデータを受け取ることができる。
【0019】
図1はまた、FPU110の実施形態のブロック図を示す。FPU110は、LSU130とインターフェイスする浮動小数点レジスタファイル(FPR)152を含む。FPR152は、複数のリードポート(すなわち、各算術演算あたり最大3つのオペランドおよび蓄積演算あたり1つのオペランドを読み出すためのリードポート)、および複数のライトポート(すなわち、各算術演算およびロード演算あたり1つのオペランドを書き込むためのライトポート)を含む。
【0020】
浮動小数点パイプファイル(PIP)154はFPR152に接続し、さらにLSU130およびIXU140とインターフェイスする。各命令について、PIP154は、FPR152、ロードパイプファイル、結果パイプファイルまたはROMからオペランドを選択し受け取る。次いで、PIP154は、受け取られたオペランドを(すなわち、IEEE準拠フォーマットから)FPU110内のプロセシングユニットによって認識される内部データフォーマットにアンパックする。PIP154はまた、FPU110からの結果を外部回路によって必要とされるデータフォーマット(すなわち、IEEE準拠フォーマット)にパックして、パックされた結果をFPR152に提供する。
【0021】
浮動小数点乗算器(MUL)156はPIP154に接続し、浮動小数点乗算命令および乗算−加算(MADD)命令のような複合命令の乗算部分を実行する。MUL156は、PIP154から2つのオペランドの小数部を受け取る。1実施形態において、MUL156は、完全な精度を有する1組の和出力および桁上げ出力を生成する乗算器アレイとインプリメントされる。和出力および桁上げ出力は、桁上げ伝播加算器(CPA)に提供されて、この桁上げ伝播加算器(CPA)で結合されて、正確な丸められていない合成小数部を生成する。合成小数部の下位ビットは、論理的に結合されて、「スティッキー」ビットを形成する。このスティッキービットは、丸めビットおよび現在の丸めモードと組み合わせて用いて、MUL156内の次の丸めユニットへと送信される丸め情報を生成する。MUL156は、以下に詳述する。
【0022】
浮動小数点加算器(ADD)158は、PIP154およびMUL156に接続する。ADD158は、浮動小数点加算および減算命令、ならびにMADDのような複合命令の加算部分を実行する。ADD158は、2つのオペランドを受け取って、例えば、大量相殺加算器(MCA)と同時に動作するプリスケール加算器(PSA)を用いて、浮動小数点絶対値加算/減算を実行する。最終的な出力は、加算器のうちの1つから選択され、PIP154へと提供されて格納される。1実施形態において、加算器の選択は、主オペランドとこのようなオペランドの小数部である第1のわずかなビット(すなわち、整数ビットと端数部分のうちの最上位ビット)との間の指数差に基づいているので、(1)PSAは常に加算に用いられ、丸めおよび正規化を行う前に、結果が0.1000000以上であると保証される場合には、PSAは選択的に減算に用いられ、(2)丸めおよび正規化を行う前に、結果が1.0未満であると保証され、かつ多くの先頭のゼロを有し得る場合には、MCAは選択的に減算に用いられる。両方の条件を満たすオペランドは、PSAまたはMCAのいずれかによって処理され得る。しばしば、この選択基準では、オペランド指数間の差が2より大きい場合には、PSAを選択して加算および減算を行い、オペランド指数間の差が2以下である場合には、MCAを選択して減算する。
【0023】
浮動小数点指数ユニット(EXP)160は、PIP154およびADD158に接続する。EXP160は、PIP154からオペランドの指数を受け取り、実行される演算に基づく出力指数およびオペランドの指数を推定して、小数部に関して実行される丸めおよび正規化に基づく評価された出力指数を(例えば、MUL156およびADD158によって)調整する。EXP160はまた、オーバーフロー/アンダーフロー予測および検査等の他の関数を実行する。
【0024】
浮動小数点除算/平方根ユニット(DSQ)162はMUL156に接続し、小数部について除算および平方根命令を行う。DSQ162は、特定のアルゴリズム(例えば、基数−2SRTアルゴリズムまたは基数−4SRTアルゴリズム)を実行するように設計されている。
【0025】
浮動小数点制御ユニット(CTL)164は、FPU110のための制御ユニットである。CTL164は、浮動小数点命令を受け取り、FPU110内の種々のユニットの演算を指示し、適切な出力を生成する。
【0026】
図2は、加算演算、乗算演算、および加算−乗算(Madd)演算を実行することが可能な浮動小数点ユニット(FPU)200の実施形態のブロック図である。FPU200は、図1に示されるFPU100の一部を表す。FPU200は、加算器ユニットに接続された乗算器ユニットを含む。簡略化のため、図1に示される回路等のサポート回路は、図2には示していない。乗算器ユニットは、乗算器アレイ210と、桁上げ伝播加算器(CPA)212と、丸めユニット216と、指数結合ユニット220とを含む。加算器ユニットは、図2に示されるように残りのユニットを含む。FPU200は、以下に記載されるように、精度を増加させる、ハードウェアの設計を簡略化する、演算パフォーマンスを向上するといったいくつかの特徴を含む。
【0027】
どの時点においても、FPU200は、加算、乗算およびMaddを含む少なくとも3つの異なる演算のうちの1つを実行するように構成され得る。これらの演算は以下の式
Fd=Fs±Ft、
Fd=Fs・Ft、
Fd=±((Fs・Ft)±Fr)、
によって表される。ここでFdは合成出力であり、Fr、FsおよびFtは3つの入力オペランドである。Madd演算は、以下の演算へとさらに分けることができ、それらの対応する名前は、
Fd=(Fs・Ft)+Fr、 MADD
Fd=(Fs・Ft)−Fr、 MSUB
Fd=−((Fs・Ft)+Fr) N MADD
Fd=−((Fs・Ft)−Fr) N MSUB
である。
【0028】
図2に示されるように、2つのオペランドの小数部(Mant SおよびMant T)が、乗算器アレイ210に提供される。アレイ210は、例えば、ブースアルゴリズムまたは修正ブースアルゴリズムを実行し得、部分積生成ロジックおよび複数の桁上げ保存加算器を含み得る。部分積生成ロジックは、小数部に基づいて部分積を生成する。桁上げ保存加算器は複数の部分積をまとめて加算し、2つの数(最終的な和および桁上げ)だけが残るまで、その出力をツリー方式で他の桁上げ保存加算器に送信する。特定のインプリメンテーションでは、桁上げ保存加算器は、4つの項を取り上げ、それらを結合させて2つにするが、他の構成も可能である。
【0029】
従って、アレイ210は、2つのオペランドを乗算し、その積を和および桁上げフォーマットでCPA212に提供する。CPA212は、和と桁上げとを結合させて、得られた小数部を丸めユニット216に提供する。この丸めユニット216は、FPUの特定の演算モードに基づいて小数部を処理する。丸めユニット216の演算についてはさらに後述される。処理された小数部は、乗算器ユニットからの出力小数部を含む。
【0030】
2つのオペランドの指数(Exp SおよびExp T)が、指数結合ユニット220に提供される。この指数結合ユニット220は、乗算演算を行うためにこれらの指数を結合する。ユニット220からの結合された指数は、乗算器ユニットからの出力指数を含む。
【0031】
1実施形態において、パフォーマンスが改善される(すなわち、演算速度がより高速になる)場合には、加算器ユニットは、同時に動作するプリスケール加算器(PSA)と大量相殺加算器(MCA)とを含む。オペランドの特性に応じて、PSAまたはMCAのいずれかからの出力が選択される。
【0032】
浮動小数点加算を実行するために、2つのオペランドの小数部は、典型的には、2つのオペランドの指数が等しくなるまで一方の小数部をシフトさせ、その指数を調節することによって合わせられる。次いで、小数部が結合(例えば、加算または減算)され、その合成小数部が正規化される。結合前のシフト数は、(例えば、大きな数を小さな数に加算する場合には)大きくなり得、結合後のシフト数もまた、(例えば、同じ大きさを有する2つのオペランドを減算する場合には)大きくなり得る。PSAおよびMCAは、これらの2つの極端な条件を含む大抵の入力条件を効率的に処理するように設計されている。
【0033】
PSAの場合、丸めユニット216からの小数部が、MUX232aおよび232bに提供される。オペランドRおよびTの小数部は、実行される演算に基づいて、これら小数部のうちの一方を選択し、選択された小数部をMUX232aおよび232bへ提供するMUX230に提供される。MUX232aは、小さい方のオペランドの小数部を選択し、選択された小数部を右シフトユニット234に提供する。MUX232bは、大きい方のオペランドの小数部を選択し、選択された小数部をCPA236に提供する。
【0034】
オペランドRおよびTの指数は、実行される演算に基づいて指数のうちの一方を選択するMUX226に提供される。MUX226から選択された指数およびユニット220からの結合された指数が、2つの指数間の差および予備的な結果の指数を決定する指数計算ユニット252に提供される。予備的な結果の指数は、実行される算術式に応じて決定され、このことは、1999年7月30日に出願され、本発明の譲渡人に譲渡された米国特許出願第09/363,638号に記載されており、同出願を本明細書中において参考として援用する。予備的な結果の指数(例えば、加算演算が実行される際の大きい方の指数)は、指数調整ユニット256に提供され、指数差は、小さい方のオペランドの小数部を示される指数差だけ右にシフトさせる右シフトユニット234に提供される。シフトされた小数部は、2つの小数部を結合するCPA236に提供され、結合された小数部を丸めユニット242に提供する。丸めユニット242は、その結合された小数部を丸め、丸められた小数部を正規化ユニット244に提供する。
【0035】
CPA236からの小数部は、01.xxx−−xxxx、1x.xxx−−xxxx、または(減算による)0.1xxx−−xxxxフォーマットであり得る。正規化ユニット244は、必要ならば1ビット右シフトまたは左シフトを実行することによって、その結果を01.xxx−−xxフォーマットに正規化する。指数は、正規化ユニット244によって実行される正規化に基づいて、必要に応じて指数調整ユニット256により調整される。
【0036】
FPU200のMCA部は、CPA262と、先頭ゼロ予測器(LZA)264と、左シフトユニット266とを含む。MCAの場合、丸めユニット216およびMUX230からの小数部は、MUX232cおよび232dに提供される。MUX232は、指数差に基づいて小数部の一方を容易にわずかにシフトさせ、小数部を合わせる。MUX232はまた、減算演算において小数部の一方を選択して反転させるために用いられる(簡略化のため、インバータは図2に示さない)。MUX232cおよび232dからの出力は、CPA262およびLZA264に提供される。CPA262は、2つの小数部を結合して、結合された小数部を左シフトユニット266に提供する。LZA264は、入力オペランドに基づいて、合成小数部の先頭ゼロの数を予測する。LZA264からの出力は、左シフトユニット266のシフト数を規定する制御信号へとコード化される。制御信号はまた、指数を調整するために指数調整256へ提供される。
【0037】
正規化ユニット244および左シフトユニット266の出力はMUX246に提供される。このMUX246は、PSAまたはMCAからの出力をFPU200からの出力小数部として選択する。ユニット256からの調整された指数は、FPU200からの出力指数を含む。FPU200の演算については、1999年7月20日に出願され、本発明の譲渡人に譲渡された米国特許出願第09/364,514号にさらに記載され、同出願を本明細書中において参考のため援用する。
【0038】
図2は、2つの丸め演算が実行され得るMaddアーキテクチャを示す。一方の丸め演算は乗算演算後に実行され、他方の丸め演算は加算演算後に実行される。このMaddアーキテクチャは、乗算および加算が別個に実行されるかのように、IEEE丸め要件を満たすMadd結果を生成し得る。
【0039】
図3Aは、正規化された浮動小数点数の表示を示す。この表示には、符号ビット310と、小数部312と、指数314とが含まれる。正規化された浮動小数点数は、2進小数点(すなわち、小数部の整数部分)の左側に1を有する小数部によって1.xxx−−xxフォーマットと表される。ここで、「x」はそれぞれ1または0のいずれかである1ビットを表す。IEEE標準によって規定されているように、端数部分「xxx−−xx」は、正規化された単倍精度の数の場合には2進小数点の後ろに23ビットを表し、正規化された二倍精度の数の場合には52ビットを表す。正規化された小数部は、1.0〜2.0(すなわち、1.0≦小数部<2.0)の範囲を有する。
【0040】
IEEE標準は、浮動小数点数の表示を規定する。正規化された数の場合には、IEEE標準は、小数部の端数部分のみ(すなわち、図3Aの「xxx−−xx」部分)を格納するように指定する。2進小数点の左側の先頭1は、陰であり格納されない。
【0041】
図3Bは、IEEE標準によって規定される単倍精度および二倍精度の浮動小数点数の表示を示す。IEEE標準は、単倍(32ビット)精度および二倍(64ビット)精度の浮動小数点数について、指数および小数部の端数部分に用いられるビット数を規定する。図3Bに示されるように、単倍精度表示は3つの要素を含む。すなわち、1つの符号ビット(sign)、8ビットの指数(exp)および23ビットの小数部(mant)である。二倍精度表示は、1つの符号ビット(sign)、11ビットの指数(exp)および52ビットの小数部(mant)を含む。浮動小数点数(y)は、次のように表され得る。
【0042】
y=(−1)sign・mant・2exp 式(1)
図4Aは、すべての実数を図式的に表す線図を示す。この線図は一定の比率で描かれていないことに留意されたい。一般に、実数は、負の無限遠(−∝)から正の無限遠(+∝)の範囲である。図4Aに示される線図において、式(1)に示される浮動小数点式については、0.0より大きな数(すなわち、y>0.0)が正の符号ビット(すなわちsign=0)によって表され、0.0より小さな数(すなわち、y<0.0)が負の符号ビット(すなわち、sign=1)によって表される。1.0より大きな絶対値を有する数(すなわち、|y|>1.0)は、正の指数(すなわち、exp≧0)によって表され、1.0より小さい絶対値を有する数(すなわち、|y|<1.0)は、負の指数(すなわち、exp<0)によって表される。
【0043】
(単倍精度の場合に32ビットを有し、二倍精度の場合に64ビットを有する図3Bに示されるような)有限分解を有する浮動小数点表示については、特定の値域内の数のみが、式(1)に示される式を用いて正規化された数として表示され得る。この値域は、最大正規化値amaxと最小正規化値aminによって定義される。単倍精度数については、amaxは、2+128よりもわずかに小さく、amin=2-126である。0〜最小正規化値の間のいくつかの数(すなわち、amin>y>0.0)は、以下に説明される非正規化された数として表示され得る。ゼロ(0.0)および最大正規化値(例えば、無限遠)よりも大きないくつかの数については特別な表示が用いられる。
【0044】
図4Bは、IEEE標準による単倍精度数の指数表示の図を示す。バイナリ表示を有する正の指数値と負の指数値との両方を得るために、表示された指数がバイアス値でオフセットされる。単倍精度数の場合、IEEE標準は、127となる指数バイアス値を規定する。従って、実際の(すなわち、バイアスされていない)指数値は、表示された(すなわち、バイアスされた)指数値(すなわち、図3Bに示される指数部に格納された値)から指数バイアス値127を引いたものに等しい。例えば、バイアスされた指数値254、127および1は、バイアスされていない指数値+127、0および−126にそれぞれ対応する。IEEE標準によれば、すべて1の指数値(例えば、255)およびすべてゼロ(例えば、0)の指数値は、以下に説明されるように特別な場合を表示するために用いられる。従って、表示され得る正規化された数は、+127〜−126の範囲内の指数を有する。
【0045】
図5Aは、いくつかの正規化された数の表示を示す。上述のように、正規化された数は、1.xxx−−xxフォーマットに適合する小数部を有する。ここで、2進小数点の左側のビットは1であり、2進小数点の右側の各「x」は、1またはゼロ(0)のいずれかであり得る単一ビットを表す。一般に、正規化された数は、規定の範囲内(例えば、単倍精度については、+127〜−126のバイアスされた指数にそれぞれ相当する254〜1)であるバイアスされた指数を有する。バイアスされた指数値0は、以下に説明するように、ゼロ(すなわち、y=0.0)および非正規化された数を表示するために保存される。
【0046】
正規化された最大数(すなわち、amax)は、111...110のバイアスされた指数(これは、単倍精度のバイアスされていない指数+127に相当する)と、すべて1の小数部(これは、2進小数点の左側の「1」が正規化された数の場合には陰であるので、小数部の値1.111...11に相当する)とを有する。すべて1の指数は、特別な表示のために保存されることに留意されたい。表示され得る次に大きな数は、同じ指数値(例えば、単倍精度の場合のバイアスされていない指数+127)と、正規化された最大値(すなわち、1.111...10)よりも小さな1つの最小桁ビット(LSB)である小数部値とを有する。一般に、漸減的に小さくなる数に対して、小数部の端数部分は、すべて1からすべて0へと1だけデクリメントされる。端数部分がすべて0の場合には、次に小さな数が、端数部分をすべて1へと戻してリセットし、1だけ指数値をデクリメントすることによって表示される。このプロセスは、指数000...001および端数部分がすべて0で表示される最小値に到達するまで続く。
【0047】
図5Bは、いくつかの非正規化された数および0の表示を示す。上述のように、ゼロ実数(すなわち、y=0.0)は、すべてゼロの指数およびすべてゼロの小数部とによって表示される。表示され得る数の範囲を広げるために、IEEE標準は、すべてゼロの指数およびすべてゼロの小数部を用いて非正規化された数の表示を規定する。非正規化された小数部は、0.xxx−−xxのフォーマットを有し、ここで2進小数点の左側のビットは、ゼロ(0)であり、2進小数点の右側の各「x」は、1またはゼロ(0)のいずれかである。非正規化された最大数は、小数部値0.111...11(これは、単倍精度の2-126よりもわずかに小さな値に相当する)を有し、非正規化された最小数は、小数部値0.000...01(すなわち、これは単倍精度の2-149に相当する)を有する。従って、非正規化された数は、正規化された最小数amin〜ゼロの間の範囲(すなわち、単倍精度の2-126から2-149の範囲)を網羅する。
【0048】
非正規化された数は、図4Aにおいて線図で示されるように表示可能な数の範囲を広げるが、一般的にはFPUで処理するのはより困難とされる。これは、指数および小数部を操作するためにはさらなる処理が必要とされるためである。処理を容易にし、非正規化された数の処理を簡略化するためには、FPUは、典型的には、内部正規化表示を用いてIEEEに準拠した非正規化された数の表示を可能にするように、さらなる分解によって設計される。例えば、さらに1ビットだけ指数を増加させることによって、分解は大きく増加し、非正規化された数は、処理の前に内部表示を用いて正規化され得る。特定の例として、単倍精度の場合には、+255〜−254の範囲のバイアスされていない指数を有する9ビット指数が、IEEEによる非正規化された最小数2-149を容易に表すことができる。
【0049】
一般的に、IEEEフォーマットにしたがって、数がメモリまたは格納部に格納される。このように、これらの数は、正規化された数、非正規化された数、または特定の数(例えば、ゼロまたは無限遠)であり得る。多くのFPUアーキテクチャに対して、格納部から数が検索され、FPUによって処理される前に、内部の正規化表記に「アンパック」される。FPUからのその結果の出力は、格納部に戻されるように転送される前に、IEEEフォーマットに「パック」され得る。
【0050】
IEEE標準は、ガイドラインを規定し、後に加算および乗算などの、浮動小数点演算に対する一意の結果を生成する。IEEE標準は、Madd演算の処理を規定しない。Madd演算は、基本的に、乗算後の加算という連鎖である。IEEEに準拠するMadd結果を生成するために、Madd演算の乗算器からの途中の結果を処理して、IEEEに準拠する途中の結果を生成することが必要があり、そのIEEEに準拠する途中の結果は、IEEE乗算演算からの結果と同一である。
【0051】
図6Aは、乗算演算から生じ得る2つの小数部表記を示す。各々が、1.0と2.0の範囲内であり(すなわち、1.xxx−−xxフォーマットに対応する)、Nビットの精度を有する2つの正規化された小数部(すなわち、内部表記を用いて)の乗算を行なう場合、その結果の小数部は、1.0から4.0の範囲内にあり得、01.xxx−−xxxx、または、1x.xxx−−xxxxフォーマットを有し得る。端数部「xxx−−xxxx」は、丸めこまない乗算器の結果に対する精度の2Nビットの(または、単倍精度の23ビットより多いビット、および、二倍精度数の52ビットより多いビット)までを表す。2進小数点の左の2ビットは、1.0から4.0の範囲を表すのに使用される。その結果のオペランドが、1.0と2.0の範囲内の小数部を維持するように、2.0以上であるか否かの正規化(例えば、1ビット位置の右シフト)を行ない得る。指数は、シフトが行なわれるかどうか(すなわち、それぞれ1ビット位置だけ右にシフトするように、1つだけ指数を増加させることにより)に従って調整される。
【0052】
図6Bは、丸めこまない小数部を除いて正規化された表示を示す。乗算器アレイからの結果である小数部は、2Nビットまでの精度を有し得るので、丸めこみは、Nビットの精度を有し、入力される小数部と同じ精度を有する、小数部を提供するように行なわれ得る。IEEE標準は、利用可能な丸めこみモードと同様に丸めこまれるべきビットの位置を規定する。本質的に、小数部は、矢印620によって示される規定されたビット位置の右まで切り捨てられ、おそらくこのビット位置で増加される。増加ビットは、丸めこみビットと「スティッキー」ビットと現在の丸めこみモードとに基づいて生成される。この丸めこみビットは、矢印620の右までのビットであり、スティッキービットは丸めこみビットの右までの全てのビットの論理和である。丸めこみは、再正規化を必要とする小数部を生成し得る。これが生じる場合、第2の正規化が行なわれる。
【0053】
図6Cは、IEEE標準に適合する正規化された小数部の表示を示す。正規化された小数部は、1.0と2.0の範囲で、Nビットの精度を有する。
【0054】
図6A〜図6Cに示されるフォーマットは、「擬正規化」フォーマットの変形例として見なされ得る。本明細書で使用されるように、擬正規化フォーマットは、2進小数点の左に位置する一の値(1)を有する少なくとも1つのビットの存在によって規定される。したがって、擬正規化フォーマットは、01.xxx−−xx、10.xxx−−xx、11.xxx−−xxおよび他のフォーマットを含む。擬正規化フォーマットは、2進小数点の右までのバイナリデジットの任意の数を含有する。
【0055】
上記のように、2つのNビットの数の乗算の結果は、2Nビットまでの精度を有する積である。入力オペランドに応じて、積は、最大の正規化値amaxを超え得、または、IEEE非正規化の範囲内に入り得る。乗算演算後の後処理の一部として、IEEEに準拠する乗算結果を生成するために、途中の結果が正規化された数または非正規化された数であるか否かを判定する。途中の結果が非正規化された数であるとみなされる場合、非正規化後の丸めこみが、IEEEに準拠する乗算結果を生成するために、行なわれ、これは、IEEEに準拠するMadd結果の生成するための必須条件である。
【0056】
途中の結果の非正規化は、以下の様に、行なわれ得る。第1に、途中の結果に関連する途中の指数は、最小の正規化された指数未満(例えば、単倍精度の−126未満)かどうか判定されるようにチェックされる。この状況は、2つの小さな数を乗算する場合に生じ得、内部指数表示の加算精度は、小さな結果をキャプチャし得る。途中の指数は、最小の正規化された指数未満である場合、小数部は右にシフトされ、指数は各ビットの右シフトで1つだけ増加される。小数部の右シフトおよび指数の増加は、更新された指数が最小の正規化された指数に等しくなるまで、続く。次いで、小数部は、IEEE標準によって示されるビット位置で丸めこまれる。丸めこみがIEEE標準によって規定されるような正しいビット位置で行われ得るように、非正規化が必要である。
【0057】
IEEEに準拠する乗算結果を生成するための途中の結果の非正規化は、ビットが非正規化プロセスの間、捨てられるので、一般に、正確度の低下が生じる。さらに、非正規化は、インプリメントするためのさらなるハードウェアを必要とする時間消費プロセスである。さまざまなアプローチが、非正規化の数の処理を単純化し、ハードウェア要件を減らすためにインプリメントされている。これらのアプローチのうちの2つを以下に説明する。
【0058】
あるアプローチにおいて、FPUは非正規化された数を検出するが、実際の非正規化は、ある他の機構(例えば、ソフトウェア)によって行なわれる。非正規化された数の検出は、指数および小数部の値に基づいた従来の技術を用いて為され得る。非正規化された数の検出の際に、例外が生じ(すなわち、フラッグが生じ)、正しい処置がソフトウェアによって実行される。ハードウェアによる検出およびソフトウェアによる処理のアプローチは、入力オペランドおよび乗算器ユニットからの途中の結果に適用され得る。IEEEに準拠する乗算結果を生成するために非正規化された数を取り扱うこのアプローチは、典型的には、より単純化されたハードウェア設計のためにパフォーマンスを犠牲にする(すなわち、より遅い演算速度)。
【0059】
別のアプローチにおいて、FPUは非正規化された数をゼロにフラッシュするための性能を有するように設計される。この「フラッシュ・ツゥ・ゼロ」アプローチのある具体的なインプリメンテーションにおいて、オペランドが最小の正規化された数の正および負の範囲内にあると決定される(すなわち、+aminと―aminとの間)場合、ゼロ(0.0)にセットされる。フラッシュ・ツゥ・ゼロアプローチの他の変形例もまた、インプリメントされ得る。例えば、正の無限遠に丸めこむ丸めこみモードにおいて、オペランドは、ゼロ(0、0)とaminの範囲内にある場合、最小の規格された数aminにフラッシュされ、−aminとゼロ(0、0)の範囲内にある場合、ゼロ(0、0)にフラッシュされる。負の無限遠に丸めこむ丸めこみモードにおいて、オペランドは、−aminとゼロ(0、0)の範囲内にある場合、−aminにフラッシュされ、ゼロ(0、0)とaminの範囲内にある場合、ゼロ(0、0)にフラッシュされる。フラッシュ・ツゥ・ゼロ演算は、非正規化された入力オペランド、途中オペランド、出力オペランドに関して実行され得る。このアプローチは、向上した演算速度を提供し、途中の結果をゼロにフラッシュするために最小のさらなるハードウェアを必要とする。しかし、Madd結果はIEEEに準拠せず、正確度は低下する。なぜなら、小数部がゼロまたはある他の値にフラッシュされる場合、ビットが捨てられるからである。
【0060】
多くのアプリケーションは、Madd演算からのIEEEに準拠する結果を必要としない。これらのアプリケーションに対して、Madd演算の乗算器からの途中の結果は、上記のように、ゼロにフラッシュされ得る。しかし、途中の結果をゼロにフラッシュすることは、関連するMadd結果の正確度を低下させる。
【0061】
本発明によれば、Madd演算の乗算器からの途中の結果の正規化または非正規化ではなく、丸めこみを引き起こす新たなアプローチが提供される。この「Maddフラッシュオーバーライド」アプローチにおいて、途中の結果は、正確度を向上させるために、内部の正規化されたフォーマットに維持される。このアプローチは、独占的に使用され得るか、または、コンピュータシステムのいくつかの演算モードの1つとして構成され得る。そのような演算モードの各々は、例えば、制御レジスタに保持される1つ以上のビットによって特定され得る。
【0062】
図8は、特定の演算モードを特定するビットを格納するように構成された浮動小数点制御ステータスレジスタ(「FCSR」)の表示を示す。このFCSRは、FPUの浮動小数点演算を制御するビットの値を含む。特定の実施形態において、FCSRは、ぞれぞれ、ビット位置24、22に配置されるフラッシュ「FS」ビットおよびMaddフラッシュオーバーライド(FO)ビットを含み、IEEE準拠モードとフラッシュ・ツゥ・ゼロモードとMaddフラッシュオーバーライドモードを特定する。FSビットが1である場合(すなわち、論理ハイ)、フラッシュ・ツゥ・ゼロモードが活性化され、FSビットが0である場合(すなわち、論理ロー)、IEEE準拠モードが活性化される。FOビットが1である場合、Maddフラッシュオーバーライドモードが活性化され、Madd演算の非正規化された途中の結果が、FSビットにしたがってフラッシュも非正規化もされない。FCSRは、本発明の譲受人に譲渡され、本明細書において参考として援用される、1999年7月20日に出願した米国特許出願第09/364,787号にさらに記載される。
【0063】
表1は、FSおよびFOビットに対する演算モードおよび指定を要約する。
【0064】
【表1】
一般に、FPUは表1に示されるモードおよびリストに示されない他のモードの任意の組み合わせをサポートするように設計され得る。例えば、FPUは、Maddフラッシュオーバーライドモード、IEEE準拠モード、Maddフラッシュオーバーライドモードのみ、表1にリストに示される3つのすべてのモード、または、他のモードの組み合わせをサポートするように設計され得る。IEEE準拠モードにおいて、IEEEに準拠する途中の結果を生成するための処理は、ハードウェア、ソフトウェア、または、ハードウェアとソフトウェアとの組み合わせにおいて実行され得る。表1のリストに示されるモードは、以下に示すように説明される。
【0065】
IEEE準拠モードにおいて、FPUの乗算器ユニットからの途中の結果は、ハードウェアまたはソフトウェアに必要な場合、正規化されるか、または、非正規化され、かつ、丸めこまれる。図6Aを参照すると、CPA212からの途中の結果は、01.xxx−−xxxxまたは1x.xxx−−xxxxフォーマットのいずれかであり得る。始めに、途中の結果の指数は、途中の結果が正規化された数または非正規化された数の範囲内にあるかどうかを判定するようにチェックされる。これは、最大指数値expmaxおよび最小指数値expmin(例えば、単倍精度に対して、expmax=+127、expmin=−126)と、指数を比較することによって、達成され得る。途中の結果が正規化された数であると決定される場合、小数部は01.xxx−−xxxxフォーマットと正規化される。あるいは、途中の結果が非正規化された数であると決定される場合、小数部は上記の態様で非正規化される。正規化された小数部または非正規化された小数部は、次いで、図6Bの矢印620によって示される位置で丸めこまれる。正規化/非正規化および丸めこまれた途中の結果は、加算器ユニットに提供される。
【0066】
フラッシュ・ツゥ・ゼロモードにおいて、FPUの乗算器ユニットからの小数部は、途中の結果が非正規化された数である場合、ゼロにフラッシュされる。また、この非正規化は、途中の結果および小数部値に対する指数をチェックすることにより達成され得る。具体的には、指数がexpminより小さく、小数部がゼロに等しくない(例えば、mant≠0)場合、途中の結果は、非正規化された数とみなされ、ゼロにフラッシュされる。
【0067】
Maddフラッシュオーバーライドモードにおいて、乗算器ユニットからの途中の結果は、丸めこまれるが、正規化および非正規化されない。ある実施形態において、丸めこみは、途中の結果に関連する指数をチェックすることなく行なわれる。ある実施形態において、丸めこみユニット216からの小数部は、amaxおよびaminによって規定される範囲内の非正規化された数または数であるかどうかにかかわらず、丸めこまれる。
【0068】
図7Aは、乗算器ユニットのCPA212からの小数部の2つの小数部表示を示す。乗算器アレイ210からの出力は、2進小数点の右の2Nビットまでの精度、かつ、2進小数点の左の2ビットの精度を有し得る。丸めこみユニット216は、始めに、最上位ビット(MSB)位置708のビットがゼロ(0)または一(1)であるか否かを判定する。丸めこまれるべきビットの位置は、小数部が01.xxx−−xxxxまたは1x.xxx−−xxxxフォーマットを有するか否かに応じて、1ビット位置だけ異なる。01.xxx−−xxxxフォーマットを有する小数部に対して、丸めこみユニット216は、矢印710aによって示される位置におけるビットを丸めこむ。あるいは、1x.xxx−−xxxxフォーマットを有する小数部に対して、丸めこみユニット216は、矢印710bによって示される位置におけるビットを丸めこむ。
【0069】
図7Bは、丸めこみユニット216からの小数部の2つの小数部表示を示す。丸めこまれた小数部は1.0と4.0との間の範囲にあり、これは、正規化された小数部の範囲の約2倍である。追加のビットを用いて、小数部内の追加の範囲を表す。次のユニット(例えば、右シフトユニット234、CPA236、丸めこみユニット242、PSAの正規化ユニット244、CPA262、MCAの左シフトユニット266)は、小数部の追加のビットを適切に処理するように設計される。
【0070】
MADDフラッシュオーバーライドモードに従って、正規化および非正規化を行なわずに、丸めこみを行なうことによって、幾つかの利点が得られる。第1に、ビットを捨てる非正規化が行なわれないので、正確度が向上する。MADDフラッシュオーバーライドモードにおいて、途中の結果は、内部の正規化されたフォーマットを正確度が向上するように維持する。
【0071】
第2に、ハードウェアのいくつか、または、全ては、2Nビットより小さい精度で設計され得る。なぜなら、精度の幾つかは、乗算器ユニット内の丸めこみを放棄する確率が高いからである。例えば、乗算器アレイ210およびCPA212は、2Nビットより小さい精度でインプリメントされ得る。加算器ユニットの次のユニットは、また、2Nビットより小さい精度を有する数で演算するように設計され得る。これは、また、ハードウェア設計を単純化する。
【0072】
第3に、より小さい精度内のこれらのユニットのインプリメンテーションは、FPUの演算速度を向上し得る。上述したように、乗算器アレイは、一般的には、順に演算する桁上げ保存加算器のセットでインプリメントされる。処理遅延を小さくすること、および、それにより演算速度を速くすることは、フルの2Nビットの結果より小さく結果を計算することにより、得られ得る。
【0073】
上述したように、Madd演算を行なうことが可能な浮動小数点プロセッサは多くのアプリケーション(例えば、デジタル信号処理およびグラフィック)において所望されている。Madd演算は、また、算術アルゴリズムにおいて一般に用いられる。例えば、Newton―Raphsonアルゴリズムは、逆数および逆数の平方根を近似するために使用される収束アルゴリズムである。このアルゴリズムは、多くの乗算器およびMadd演算を行なう。アルゴリズムのパフォーマンス(例えば、収束の速度および正確度)はMadd演算の正確度に依存する。さらに、そのアルゴリズムは、一般的に、多くのMadd演算を含むので、アルゴリズムの速度は、また、Madd演算の速度に依存する。本発明を組みこんだ浮動小数点プロセッサは、Newton―Raphsonアルゴリズムをインプリメントするために使用される場合、向上したパフォーマンス(すなわち正確度および速度)を提供し得る。
【0074】
数Rの逆数を近似するためのNewton―Raphson逆数アルゴリズムは、
1/R≒Xi+1=Xi・(2−R・Xi)
として規定される。ここで、iは1以上の整数(すなわち、i=1,2,3,...)であり、Xiはi回目の反復からの近似であり、Xi+1は(i+1)回目の反復におけるより正確な近似である。
【0075】
数(R)の逆数平方根を近似するためのNewton―Raphson逆数平方根アルゴリズムは、
1/√(R)≒Xi+1=(3−R・Xi・Xi)・Xi/2、
として規定され、ここで、Xiはi回目の反復からの数Rの逆数平方根の近似であり、Xi+1は(i+1)回目の反復におけるより正確な近似である。
【0076】
浮動小数点プロセッサを用いたNewton―Raphsonアルゴリズムおよびそのインプリメンテーションは、本発明の譲受人に譲渡され、本明細書において参考として援用される、1999年7月20日に出願した米国特許出願第09/363,637号にさらに記載される。
【0077】
FPU110の浮動小数点命令セットアーキテクチャ(ISA)は、Newton―Raphson逆数アルゴリズムおよび逆数平方根アルゴリズムをインプリメントするための命令を含む。ある実施形態において、ISAは、Newton―Raphson逆数アルゴリズムの反復をインプリメントするための3つの命令を含む。3つの命令は、RECIP1(オペランド1)、RECIP2(オペランド1、オペランド2)、MADD(オペランド1、オペランド2、オペランド3)である。
【0078】
RECIP1(オペランド1)命令により、FPU110はオペランド1の逆数の推定である結果を生成することができる。推定を生成するには多様な方法がある。ある実施形態において、ルックアップテーブルが使用される。RECIP2(オペランド1、オペランド2)命令により、FPU110が、(オペランド1−オペランド2・オペランド3)に等しい結果を生成することができる。MADD命令は、FPU110が、(オペランド1+オペランド2・オペランド3)に等しい結果を生成することが可能な乗算−加算命令である。RECIP1およびRECIP2命令は、上記の米国特許出願第09/364,787号にさらに記載される。
【0079】
数(R)の逆数を近似するためのNewton―Raphsonアルゴリズムは、以下のシーケンスにおいて上記の命令を実行するようにFPU110を構成することにより、インプリメントされ得る。
【0080】
(1) Xi=RECIP1(R)
(2) IR=RECIP2(R,Xi)
(3) Xi+1=MADD(Xi,Xi,IR)
FPU110が上の所与のシーケンスにおける上の3つの命令を実行した後、以下の量が得られる。
【0081】
Xi+1=Xi+Xi・IR=Xi+Xi(1−R・Xi)=2Xi−R・Xi・Xi=Xi(2−R・Xi),
これは、数Rの逆数に対するNewton―Raphson近似である。
【0082】
ある実施形態において、浮動小数点ISAは、逆数平方根を近似するためのNewton―Raphsonアルゴリズムの反復を行なうための4つの命令を含む。4つの命令は、RSQRT1(オペランド1)、RSQRT2(オペランド1、オペランド2)、MUL(オペランド1、オペランド2)、MADD(オペランド1、オペランド2、オペランド3)である。
【0083】
RSQRT1(オペランド1)命令により、FPU110が、オペランドの逆数平方根の推定である結果を生成することができる。その推定を生成するには多様な方法がある。ある実施形態において、ルックアップテーブルが使用される。RSQRT2(オペランド1、オペランド2)命令により、FPU110が(1−オペランド1・オペランド2)/2に等しい結果を生成することができる。MADD(オペランド1、オペランド2、オペランド3)命令は、上述している。MUL(オペランド1、オペランド2)命令は、FPU110がオペランド1・オペランド2に等しい結果を生成可能な乗算命令である。RSQRT1およびRSQRT2命令は、上述した米国特許出願第09/364,787号にさらに記載される。
【0084】
数(R)の逆数平方根を近似するためのNewton―Raphsonアルゴリズムは、以下のシーケンスにおいて上記の命令を実行するようにFPU110を構成することにより、インプリメントされ得る。
【0085】
(1) Xi=RSQRT1(R)
(2) IR1=MUL(R,Xi)
(3) IR2=RSQRT2(IR1,Xi)
(4) Xi+1=MADD(Xi,Xi,IR2)
FPU110が上記の所与のシーケンスの上の4つの命令を実行した後、Xi+1=(3−R・Xi・Xi)・Xi/2であり、これは、数Rの逆数平方根のNewton―Raphson近似である。
【0086】
上で示した命令のセットの各々は、MADD命令を含む。MADD命令は、上記のMADDフラッシュオーバーライドモードを用いて実行される場合、向上した正確度を有する。RECIP2(R,Xi)命令によって生成されるIR値およびRSQRT2(IR1,Xi)命令によって生成されるIR2値は、通常小さな数である。これらの数は図6Aに示される擬正規化フォーマットで内部的に表される場合、大きな精度が得られ、それにより、近似の正確度が向上する。さらに、,XiおよびIR(またはIR2)が小さい数である場合、MADD命令の実行の間(上記のシーケンスにおいて提供されるように)XiとIR(またはIR2)との乗算の結果、非正規化された数が生じ得る。しかし、これらの値が擬正規化フォーマットで維持される場合、非正規化処理が一般的に避けられるので、正確度は維持される。
【0087】
明瞭にするために、本発明は、IEEEフォーマットに適合する単倍精度浮動小数点表示および二倍精度浮動小数点表示のコンテキストで記載される。しかし、本発明は、他の浮動小数点表示で用いられるように適応されてもよく、これは、本発明の範囲内である。
【0088】
FPU200は、様々な態様でインプリメントされ得る。例えば、FPU200は、デジタル信号プロセッサ内のハードウェア、アプリケーション専用集積回路(ASIC)、マイクロプロセッサおよび他のハードウェア構造でインプリメントされ得る。
【0089】
ハードウェアを用いた本発明のインプリメンテーションに加えて、本発明は、また、コンピュータ読み出し可能なプログラムコードを格納するために構成されたコンピュータ使用可能媒体を含む製造品で実施され得る。プログラムコードにより、本明細書において開示されるハードウェアの、機能、製造およびその両方が可能になる。例えば、これは、当業者に利用可能な、汎用プログラム言語(例えば、C、C++など)、ハードウェア記述子言語(HDL)、レジスタ転送言語(RTL)、Verilog HDL、VHDL、AHDL(Alteraハードウェア記述子言語)、または、他のプログラムおよび/または回路(すなわち、スキマティク(schematic))キャプチャツールによって達成され得る。具体例として、Snyopsys,Inc.によるVerilogシミュレータ「VCS v.4.1.1」は、本発明をシュミレートするために使用された。J.Bhasker,Star Galaxy Pr.1997による名称「A Verilog HDL Printer」の書籍は、Verilog HDLの詳細を提供し、全ての目的でその全体を本明細書の参考として援用する。プログラムコードインプリメンテーションにおいて、図2はフロー図の実施形態として機能し得る。
【0090】
上記のように本発明によって達成される機能は、プログラムコードで使用され得るコアで表され得、集積回路の製造物の一部としてハードウェアに変換され得ることが理解される。また、ハードウェアおよびソフトウェアの組み合わせを用いた本発明の他のインプリメンテーション(例えば、FPU200)も可能である。したがって、上記の実施形態は、本発明の範囲内であり、この特許によって保護されると考慮されるべきである。
【0091】
好適な実施形態の上記記載は、任意の当業者が、本発明を行なう、または、本発明を使用することができるように提供されている。これらの実施形態の様々な改変が当業者にとって容易に明らかであり、本明細書で規定される一般原理は、発明力を使用することなく他の実施形態に適用され得る。したがって、本発明は、本明細書で使用された実施形態に限定することを意図するものではなく、本明細書で開示された原理および新規な特徴と矛盾しない最も広い範囲に一致するべきである。
【図面の簡単な説明】
【図1】 図1は、本発明の浮動小数点ユニット(FPU)を導入するプロセッサの一実施形態の簡略化した図を示す。
【図2】 図2は、本発明に従って、加算、乗算、および乗算−加算演算を実行可能なFPUの一実施形態のブロック図を示す。
【図3A】 図3Aは、浮動小数点数の表示を示す。
【図3B】 図3Bは、IEEE標準によって定義されるような信号および二倍精度浮動小数点数の表示を示す。
【図4A】 図4Aは、すべての実数を図式的に表示するラインの図を示す。
【図4B】 図4Bは、IEEE標準による単倍精度数の指数部表示の図を示す。
【図5A】 図5Aは、いくつかの正規化された数の表示を示す。
【図5B】 図5Bは、いくつかの非正規化された数およびゼロ(0)の表示を示す。
【図6A】 図6Aは、乗算演算から生じ得る2つの小数部表示を示す。
【図6B】 図6Bは、丸められていないが正規化された小数部の表示を示す。
【図6C】 図6Cは、IEEE標準に適合する正規化された小数部の表示を示す。
【図7A】 図7Aは、図2のFPUの乗算器ユニット内の桁上げ伝播加算器(CPA)からの小数部の2つの小数部の表示を示す。
【図7B】 図7Bは、乗算器ユニット内の丸めユニットからの小数部の2つの小数部表示を示す。
【図8】 図8は、特定の演算モードを識別するビットを格納するように構成された浮動小数点制御ステータスレジスタ(“FCSR”)の表示を示す。
Claims (15)
- 乗算−加算(Madd)中間演算を実行するように構成されている浮動小数点ユニット(FPU)であって、
前記FPUは、
第1および第2の浮動小数点オペランドの小数部を受け取り、乗算することにより、前記第1の浮動小数点オペランドと前記第2の浮動小数点オペランドとの浮動小数点積の乗算器出力小数部を生成するように構成されている乗算器ユニットと、
前記乗算器ユニットに結合された加算器ユニットであって、前記浮動小数点積の前記乗算器出力小数部と第3の浮動小数点オペランドの小数部とを受け取り、結合することにより、浮動小数点Madd結果のFPU出力小数部を生成するように構成されている加算器ユニットと
を含み、
前記乗算器ユニットは、前記乗算器出力小数部を正規化または非正規化することではなく、前記乗算器出力小数部を丸めることによって特徴付けられる第1の演算モードで演算するように構成されており、前記乗算器出力小数部は、正規化された小数部より広い範囲を有する擬正規化フォーマットを有し、
前記乗算器出力小数部は、2進小数点の左側に対する2つのビットの精度を含み、前記擬正規化フォーマットは、前記2つのビットのうちの少なくとも一つのビットが1の値を有することによって特徴付けられ、
前記乗算器ユニットは、前記第1の演算モードおよび第2の演算モードを含む複数の演算モードのうちの一つで演算するように構成されており、前記第2の演算モードはIEEE標準に適合する前記乗算器出力小数部によって定義され、
前記乗算器ユニットは、前記第2の演算モードで演算するときに、IEEE標準に従って、前記乗算器出力小数部を、必要に応じて正規化または非正規化し、丸めるようにさらに構成されており、
前記乗算器ユニットは、非正規化乗算器出力が検出され、前記乗算器ユニットが第3の演算モードで演算される場合に、前記乗算器出力小数部をゼロにフラッシュするか、または前記乗算器出力小数部を特定の値に設定するようにさらに構成されている、FPU。 - 前記乗算器出力小数部は、2進浮動小数点算術のためのIEEE754標準によって定義されるビット位置で丸められる、請求項1に記載のFPU。
- 前記乗算器出力小数部は、前記浮動小数点積の乗算器出力指数部とは独立して丸められる、請求項1に記載のFPU。
- 前記乗算器出力小数部は、前記第1および第2の浮動小数点オペランドの小数部の範囲のおよそ2倍の範囲を有する、請求項1に記載のFPU。
- 前記第1および第2の浮動小数点オペランドの小数部を前記乗算器ユニットによる処理前に格納フォーマットから内部フォーマットへアンパックするように構成されている浮動小数点パイプファイル(PIP)をさらに備える、請求項1に記載のFPU。
- 前記格納フォーマットは、IEEE標準に適合する、請求項5に記載のFPU。
- 前記内部フォーマットは、前記格納フォーマットを上回る増加した分解能を有し、前記PIPは、前記第1および第2の浮動小数点オペランドの小数部を、前記乗算器ユニットによる処理前に内部の正規化された表示へ変換するように構成されている、請求項5に記載のFPU。
- 前記PIPは、前記FPU出力小数部を格納のために戻される前に、前記内部フォーマットから前記格納フォーマットへパックするようにさらに構成されている、請求項5に記載のFPU。
- 前記乗算器ユニットは、前記乗算器出力小数部と、前記浮動小数点積の乗算器出力指数部とをチェックすることによって、非正規化された乗算器出力を検出するように構成されている、請求項1に記載のFPU。
- 請求項1に記載のFPUを含むプロセッサであって、前記FPUは、ある数の逆数を近似するように設計された一組の演算を実行する、プロセッサ。
- 請求項1に記載のFPUを含むプロセッサであって、前記FPUは、ある数の逆数平方根を近似するように設計された一組の演算を実行する、プロセッサ。
- 請求項1に記載のFPUを含むプロセッサであって、前記FPUは、Newton−Raphsonアルゴリズムをインプリメントするように設計された一組の演算を実行する、プロセッサ。
- 前記FPUは、前記Newton−Raphsonアルゴリズムをインプリメントするとき、少なくとも一つのMadd演算を実行する、請求項12に記載のプロセッサ。
- 乗算−加算(Madd)中間演算を実行するように構成されている浮動小数点プロセッサであって、前記プロセッサは、乗算器ユニットおよび加算器ユニットを含み、
前記乗算器ユニットは、
第1および第2の浮動小数点オペランドの小数部を受け取り、乗算するように構成されている乗算器アレイと、
前記乗算器アレイに作動可能に結合された第1の丸めユニットであって、前記第1の丸めユニットは、前記乗算器アレイからの出力を丸めて、前記第1の浮動小数点オペランドと前記第2の浮動小数点オペランドとの浮動小数点積の乗算器出力小数部を生成するように構成されており、前記乗算器出力小数部は、正規化または非正規化されずに丸められ、正規化された小数部よりも広い範囲を有する擬正規化フォーマットを有する、第1の丸めユニットと
を含み、
前記乗算器出力小数部は、2進小数点の左側に対する2つのビットの精度を含み、前記擬正規化フォーマットは、前記2つのビットのうちの少なくとも一つのビットが1の値を有することによって特徴付けられ、
前記乗算器ユニットは、第1の演算モードおよび第2の演算モードを含む複数の演算モードのうちの一つで演算するように構成されており、前記乗算器ユニット中の前記第1の丸めユニットは、前記乗算器ユニットが前記第1の演算モードで演算されるときに、前記擬正規化フォーマットで前記乗算器出力小数部を丸めるように構成されており、前記第1の丸めユニットは、前記乗算器ユニットが前記第2の演算モードで演算されるときに、IEEE標準に従って前記乗算器出力小数部を丸めるようにさらに構成されており、
前記乗算器ユニット中の前記第1の丸めユニットは、非正規化乗算器出力が検出され、前記乗算器ユニットが第3の演算モードで演算される場合に、前記乗算器出力小数部をゼロにフラッシュするか、または前記乗算器出力小数部を特定の値に設定するようにさらに構成されており、
前記加算器ユニットは前記乗算器ユニットに結合され、前記加算器ユニットは、
前記浮動小数点積の前記乗算器出力小数部と、第3の浮動小数点オペランドの小数部とを受け取り、結合するように構成されている桁上げ伝播加算器(CPA)と、
前記CPAに結合された第2の丸めユニットであって、前記CPAからの小数部を受け取り、丸めるように構成されている第2の丸めユニットと、
前記第2の丸めユニットに結合された正規化ユニットであって、前記第2の丸めユニットからの丸められた小数部を受け取り、正規化するように構成されている正規化ユニットと
を含む、プロセッサ。 - 前記乗算器出力小数部は、2進浮動小数点算術のためのIEEE754標準によって定義されたビット位置で丸められる、請求項14に記載のプロセッサ。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/364,512 | 1999-07-30 | ||
US09/364,512 US7346643B1 (en) | 1999-07-30 | 1999-07-30 | Processor with improved accuracy for multiply-add operations |
PCT/US2000/020160 WO2001009712A1 (en) | 1999-07-30 | 2000-07-24 | Processor with improved accuracy for multiply-add operations |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2003529124A JP2003529124A (ja) | 2003-09-30 |
JP2003529124A5 JP2003529124A5 (ja) | 2007-09-06 |
JP4691294B2 true JP4691294B2 (ja) | 2011-06-01 |
Family
ID=23434844
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001514658A Expired - Fee Related JP4691294B2 (ja) | 1999-07-30 | 2000-07-24 | 乗算−加算演算用高精度プロセッサ |
Country Status (4)
Country | Link |
---|---|
US (2) | US7346643B1 (ja) |
EP (1) | EP1234228A4 (ja) |
JP (1) | JP4691294B2 (ja) |
WO (1) | WO2001009712A1 (ja) |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7346643B1 (en) * | 1999-07-30 | 2008-03-18 | Mips Technologies, Inc. | Processor with improved accuracy for multiply-add operations |
US20050228844A1 (en) * | 2004-04-08 | 2005-10-13 | International Business Machines Corporation | Fast operand formatting for a high performance multiply-add floating point-unit |
US20060179096A1 (en) * | 2005-02-10 | 2006-08-10 | International Business Machines Corporation | System and method for a fused multiply-add dataflow with early feedback prior to rounding |
US7451172B2 (en) * | 2005-02-10 | 2008-11-11 | International Business Machines Corporation | Handling denormal floating point operands when result must be normalized |
EP1710690A1 (en) * | 2005-04-07 | 2006-10-11 | STMicroelectronics (Research & Development) Limited | Multiplication circuitry |
US20090210678A1 (en) * | 2005-08-01 | 2009-08-20 | Simon Ford | Handling of Denormals In Floating Point Number Processim |
US7912887B2 (en) * | 2006-05-10 | 2011-03-22 | Qualcomm Incorporated | Mode-based multiply-add recoding for denormal operands |
US9223751B2 (en) | 2006-09-22 | 2015-12-29 | Intel Corporation | Performing rounding operations responsive to an 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 |
US8103858B2 (en) * | 2008-06-30 | 2012-01-24 | Intel Corporation | Efficient parallel floating point exception handling in a processor |
US8332453B2 (en) * | 2008-12-10 | 2012-12-11 | International Business Machines Corporation | Shifter with all-one and all-zero detection using a portion of partially shifted vector and shift amount in parallel to generated shifted result |
US8150902B2 (en) | 2009-06-19 | 2012-04-03 | Singular Computing Llc | Processing with compact arithmetic processing element |
US8468191B2 (en) * | 2009-09-02 | 2013-06-18 | Advanced Micro Devices, Inc. | Method and system for multi-precision computation |
US8629867B2 (en) * | 2010-06-04 | 2014-01-14 | International Business Machines Corporation | Performing vector multiplication |
US8692825B2 (en) | 2010-06-24 | 2014-04-08 | International Business Machines Corporation | Parallelized streaming accelerated data structure generation |
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 |
US8965945B2 (en) * | 2011-02-17 | 2015-02-24 | Arm Limited | Apparatus and method for performing floating point addition |
US8909690B2 (en) | 2011-12-13 | 2014-12-09 | International Business Machines Corporation | Performing arithmetic operations using both large and small floating point values |
US8527923B1 (en) * | 2012-03-16 | 2013-09-03 | Nvidia Corporation | System, method, and computer program product for hierarchical formal hardware verification of floating-point division and/or square root algorithmic designs using automatic sequential equivalence checking |
US9298457B2 (en) | 2013-01-22 | 2016-03-29 | Altera Corporation | SIMD instructions for data compression and decompression |
WO2014116712A1 (en) * | 2013-01-22 | 2014-07-31 | Samplify Systems, Inc. | Data compression and decompression using simd instructions |
US9274802B2 (en) | 2013-01-22 | 2016-03-01 | Altera Corporation | Data compression and decompression using SIMD instructions |
GB2511314A (en) | 2013-02-27 | 2014-09-03 | Ibm | Fast fused-multiply-add pipeline |
US9489174B2 (en) | 2014-09-26 | 2016-11-08 | Imagination Technologies Limited | Rounding floating point numbers |
US10042607B2 (en) * | 2016-08-22 | 2018-08-07 | Altera Corporation | Variable precision floating-point multiplier |
US10055195B2 (en) | 2016-09-20 | 2018-08-21 | Altera Corporation | Variable precision floating-point adder and subtractor |
US20180121168A1 (en) * | 2016-10-27 | 2018-05-03 | Altera Corporation | Denormalization in multi-precision floating-point arithmetic circuitry |
US11010131B2 (en) * | 2017-09-14 | 2021-05-18 | Intel Corporation | Floating-point adder circuitry with subnormal support |
US10871946B2 (en) | 2018-09-27 | 2020-12-22 | Intel Corporation | Methods for using a multiplier to support multiple sub-multiplication operations |
US10732932B2 (en) | 2018-12-21 | 2020-08-04 | Intel Corporation | Methods for using a multiplier circuit to support multiple sub-multiplications using bit correction and extension |
CN111694543B (zh) * | 2020-06-01 | 2022-06-14 | 中国人民解放军国防科技大学 | 近似乘法器设计方法、近似乘法器和图像锐化电路 |
CN114647399B (zh) * | 2022-05-19 | 2022-08-16 | 南京航空航天大学 | 一种低能耗高精度近似并行定宽乘法累加装置 |
CN115718586B (zh) * | 2022-11-29 | 2024-01-19 | 格兰菲智能科技有限公司 | 像素颜色混合操作方法、图形绘制方法、装置和设备 |
Family Cites Families (121)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US499789A (en) * | 1893-06-20 | Saw-setting device | ||
US3889107A (en) | 1972-10-16 | 1975-06-10 | Evans & Sutherland Computer Co | System of polygon sorting by dissection |
US4012433A (en) * | 1975-11-24 | 1977-03-15 | Gulf Oil Corporation | Process for manufacturing 4-chloro-2-butynyl m-chlorocarbanilate |
US4156279A (en) | 1977-11-22 | 1979-05-22 | Honeywell Information Systems Inc. | Microprogrammed data processing unit including a multifunction secondary control store |
JPS5776634A (en) | 1980-10-31 | 1982-05-13 | Hitachi Ltd | Digital signal processor |
EP0146961B1 (en) | 1983-12-26 | 1991-03-20 | Hitachi, Ltd. | Image and graphic pattern processing apparatus |
JPS61213927A (ja) | 1985-03-18 | 1986-09-22 | Hitachi Ltd | 浮動小数点演算処理装置 |
US4967375A (en) | 1986-03-17 | 1990-10-30 | Star Technologies, Inc. | Fast architecture for graphics processor |
US4999789A (en) | 1987-02-05 | 1991-03-12 | Hewlett-Packard Co. | Method and apparatus for trimming B-spline descriptions of patches in a high performance three dimensional graphics system |
US5012433A (en) | 1987-04-27 | 1991-04-30 | International Business Machines Corporation | Multistage clipping method |
US4866652A (en) | 1987-09-01 | 1989-09-12 | Weitek Corporation | Floating point unit using combined multiply and ALU functions |
US4879676A (en) | 1988-02-29 | 1989-11-07 | Mips Computer Systems, Inc. | Method and apparatus for precise floating point exceptions |
JP2517064B2 (ja) * | 1988-05-10 | 1996-07-24 | 富士通株式会社 | 非正規化数の処理方式 |
JPH0291724A (ja) * | 1988-09-28 | 1990-03-30 | Fujitsu Ltd | 演算装置 |
US5212662A (en) * | 1989-01-13 | 1993-05-18 | International Business Machines Corporation | Floating point arithmetic two cycle data flow |
JP3076046B2 (ja) | 1989-01-31 | 2000-08-14 | 日本電気株式会社 | 例外検出回路 |
US5581796A (en) | 1989-03-07 | 1996-12-03 | Hitachi, Ltd. | Processing method and graphics processor for skip drawing a figure |
US5025407A (en) | 1989-07-28 | 1991-06-18 | Texas Instruments Incorporated | Graphics floating point coprocessor having matrix capabilities |
US5159665A (en) | 1989-11-27 | 1992-10-27 | Sun Microsystems, Inc. | Graphics accelerator system |
JPH03278124A (ja) * | 1990-03-28 | 1991-12-09 | Toshiba Corp | 浮動小数点演算の例外発生予測回路 |
JPH04127364A (ja) * | 1990-09-19 | 1992-04-28 | Nec Corp | 積和算器 |
US5206823A (en) | 1990-12-13 | 1993-04-27 | Micron Technology, Inc. | Apparatus to perform Newton iterations for reciprocal and reciprocal square root |
US5220524A (en) | 1990-12-13 | 1993-06-15 | Micron Technology, Inc. | Machine method to perform newton iterations for reciprocals |
US5278949A (en) | 1991-03-12 | 1994-01-11 | Hewlett-Packard Company | Polygon renderer which determines the coordinates of polygon edges to sub-pixel resolution in the X,Y and Z coordinates directions |
US5444838A (en) | 1991-03-18 | 1995-08-22 | Hewlett-Packard Company | Computer system and method for interference checking of polyhedra using capping polygons |
JP2875909B2 (ja) | 1991-07-12 | 1999-03-31 | 三菱電機株式会社 | 並列演算処理装置 |
US5428716A (en) | 1991-12-26 | 1995-06-27 | International Business Machines Corporation | Solid-clip methodology and architecture for clipping solid models and displaying cross-sections using depth-buffers |
US5359548A (en) | 1992-04-15 | 1994-10-25 | Fujitsu Limited | Floating-point arithmetic system having multiple-input addition and subtraction means |
US5420966A (en) | 1992-04-29 | 1995-05-30 | Canon Information Systems Canon Kabushiki Kaisha | Method and apparatus for filling an object based rasterized image |
US5257216A (en) | 1992-06-10 | 1993-10-26 | Intel Corporation | Floating point safe instruction recognition apparatus |
US5357599A (en) | 1992-07-30 | 1994-10-18 | International Business Machines Corporation | Method and apparatus for rendering polygons |
US5367650A (en) | 1992-07-31 | 1994-11-22 | Intel Corporation | Method and apparauts for parallel exchange operation in a pipelined processor |
GB2271260A (en) | 1992-10-02 | 1994-04-06 | Canon Res Ct Europe Ltd | Processing image data |
US5457779A (en) | 1993-01-15 | 1995-10-10 | Silicon Graphics, Inc. | System for accessing graphic data in a SIMD processing environment |
US5671170A (en) | 1993-05-05 | 1997-09-23 | Hewlett-Packard Company | Method and apparatus for correctly rounding results of division and square root computations |
US5341321A (en) | 1993-05-05 | 1994-08-23 | Hewlett-Packard Company | Floating point arithmetic unit using modified Newton-Raphson technique for division and square root |
WO1995009392A1 (en) | 1993-09-27 | 1995-04-06 | Giga Operations Corporation | Implementation of a selected instruction set cpu in programmable hardware |
EP0645699A1 (en) | 1993-09-29 | 1995-03-29 | International Business Machines Corporation | Fast multiply-add instruction sequence in a pipeline floating-point processor |
US5815695A (en) | 1993-10-28 | 1998-09-29 | Apple Computer, Inc. | Method and apparatus for using condition codes to nullify instructions based on results of previously-executed instructions on a computer processor |
EP0651321B1 (en) | 1993-10-29 | 2001-11-14 | Advanced Micro Devices, Inc. | Superscalar microprocessors |
US5392228A (en) | 1993-12-06 | 1995-02-21 | Motorola, Inc. | Result normalizer and method of operation |
US5420971A (en) | 1994-01-07 | 1995-05-30 | Panasonic Technologies, Inc. | Image edge finder which operates over multiple picture element ranges |
US5553015A (en) | 1994-04-15 | 1996-09-03 | International Business Machines Corporation | Efficient floating point overflow and underflow detection system |
US6279099B1 (en) | 1994-04-29 | 2001-08-21 | Sun Microsystems, Inc. | Central processing unit with integrated graphics functions |
JP3599409B2 (ja) | 1994-06-14 | 2004-12-08 | 株式会社ルネサステクノロジ | 分岐予測装置 |
US5550767A (en) | 1994-10-14 | 1996-08-27 | Ibm Corporation | Method and apparatus for detecting underflow and overflow |
US5631859A (en) | 1994-10-27 | 1997-05-20 | Hewlett-Packard Company | Floating point arithmetic unit having logic for quad precision arithmetic |
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 |
US5751621A (en) | 1994-11-17 | 1998-05-12 | Hitachi, Ltd. | Multiply-add unit and data processing apparatus using it |
US5511016A (en) | 1994-11-30 | 1996-04-23 | International Business Machines Corporation | Method for store rounding and circuit therefor |
CN100412786C (zh) | 1994-12-02 | 2008-08-20 | 英特尔公司 | 可以对复合操作数进行压缩操作的微处理器 |
US5619198A (en) | 1994-12-29 | 1997-04-08 | Tektronix, Inc. | Number format conversion apparatus for signal processing |
US5550768A (en) * | 1995-01-31 | 1996-08-27 | International Business Machines Corporation | Rounding normalizer for floating point arithmetic operations |
US5999960A (en) | 1995-04-18 | 1999-12-07 | International Business Machines Corporation | Block-normalization in multiply-add floating point sequence without wait cycles |
US5720019A (en) | 1995-06-08 | 1998-02-17 | Hewlett-Packard Company | Computer graphics system having high performance primitive clipping preprocessing |
US5602769A (en) | 1995-07-05 | 1997-02-11 | Sun Microsystems, Inc. | Method and apparatus for partially supporting subnormal operands in floating point multiplication |
US5977987A (en) | 1995-07-26 | 1999-11-02 | Raycer, Incorporated | Method and apparatus for span and subspan sorting rendering system |
US5842004A (en) | 1995-08-04 | 1998-11-24 | Sun Microsystems, Inc. | Method and apparatus for decompression of compressed geometric three-dimensional graphics data |
US5852443A (en) | 1995-08-04 | 1998-12-22 | Microsoft Corporation | Method and system for memory decomposition in a graphics rendering system |
US5990904A (en) | 1995-08-04 | 1999-11-23 | Microsoft Corporation | Method and system for merging pixel fragments in a graphics rendering system |
US5953241A (en) * | 1995-08-16 | 1999-09-14 | Microunity Engeering Systems, Inc. | Multiplier array processing system with enhanced utilization at lower precision for group multiply and sum instruction |
US7301541B2 (en) | 1995-08-16 | 2007-11-27 | Microunity Systems Engineering, Inc. | Programmable processor and method with wide operations |
US6643765B1 (en) | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
US6385634B1 (en) * | 1995-08-31 | 2002-05-07 | Intel Corporation | Method for performing multiply-add operations on packed data |
US5726927A (en) | 1995-09-11 | 1998-03-10 | Digital Equipment Corporation | Multiply pipe round adder |
US5701442A (en) | 1995-09-19 | 1997-12-23 | Intel Corporation | Method of modifying an instruction set architecture of a computer processor to maintain backward compatibility |
US5767859A (en) | 1995-09-28 | 1998-06-16 | Hewlett-Packard Company | Method and apparatus for clipping non-planar polygons |
US5867413A (en) | 1995-10-17 | 1999-02-02 | Hitachi Micro Systems, Inc. | Fast method of floating-point multiplication and accumulation |
US5990899A (en) | 1995-10-27 | 1999-11-23 | Microsoft Corporation | Method for compressing journal streams |
US5805486A (en) | 1995-11-28 | 1998-09-08 | Intel Corporation | Moderately coupled floating point and integer units |
US5774709A (en) | 1995-12-06 | 1998-06-30 | Lsi Logic Corporation | Enhanced branch delay slot handling with single exception program counter |
US5852726A (en) | 1995-12-19 | 1998-12-22 | Intel Corporation | Method and apparatus for executing two types of instructions that specify registers of a shared logical register file in a stack and a non-stack referenced manner |
US5729724A (en) | 1995-12-20 | 1998-03-17 | Intel Corporation | Adaptive 128-bit floating point load and store operations for quadruple precision compatibility |
US5793661A (en) | 1995-12-26 | 1998-08-11 | Intel Corporation | Method and apparatus for performing multiply and accumulate operations on packed data |
US6175370B1 (en) | 1996-02-02 | 2001-01-16 | Kabushiki Kaisha Toshiba | Geometry translation processor |
US5764555A (en) | 1996-03-13 | 1998-06-09 | International Business Machines Corporation | Method and system of rounding for division or square root: eliminating remainder calculation |
US5880983A (en) | 1996-03-25 | 1999-03-09 | International Business Machines Corporation | Floating point split multiply/add system which has infinite precision |
US5777625A (en) | 1996-03-28 | 1998-07-07 | Hewlett-Packard Company | Clipper re-uses storage locations allocated for verticles |
US5892698A (en) | 1996-04-04 | 1999-04-06 | Hewlett-Packard Company | 2's complement floating-point multiply accumulate unit |
US5860017A (en) | 1996-06-28 | 1999-01-12 | Intel Corporation | Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction |
US5768170A (en) | 1996-07-25 | 1998-06-16 | Motorola Inc. | Method and apparatus for performing microprocessor integer division operations using floating point hardware |
US5996066A (en) | 1996-10-10 | 1999-11-30 | Sun Microsystems, Inc. | Partitioned multiply and add/subtract instruction for CPU with integrated graphics functions |
US6249798B1 (en) | 1996-10-10 | 2001-06-19 | Institute For The Development Of Emerging Architectures, L.L.C. | Method, apparatus and computer system for directly transferring and translating data between an integer processing unit and a floating point processing unit |
US5923577A (en) | 1996-10-21 | 1999-07-13 | Samsung Electronics Company, Ltd. | Method and apparatus for generating an initial estimate for a floating point reciprocal |
US5847979A (en) | 1996-10-31 | 1998-12-08 | Samsung Electronics Company, Ltd. | Method and apparatus for generating an initial estimate for a floating point reciprocal of a square root |
US6275233B1 (en) | 1996-11-01 | 2001-08-14 | International Business Machines Corporation | Surface simplification preserving a solid volume |
US5928316A (en) | 1996-11-18 | 1999-07-27 | Samsung Electronics Co., Ltd. | Fused floating-point multiply-and-accumulate unit with carry correction |
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 |
US5901076A (en) | 1997-04-16 | 1999-05-04 | Advanced Micro Designs, Inc. | Ripple carry shifter in a floating point arithmetic unit of a microprocessor |
JPH10293853A (ja) | 1997-04-21 | 1998-11-04 | Mitsubishi Electric Corp | クリップ処理装置 |
US5862066A (en) | 1997-05-01 | 1999-01-19 | Hewlett-Packard Company | Methods and apparatus for fast check of floating point zero or negative zero |
US5790827A (en) | 1997-06-20 | 1998-08-04 | Sun Microsystems, Inc. | Method for dependency checking using a scoreboard for a pair of register sets having different precisions |
US6169554B1 (en) | 1997-06-30 | 2001-01-02 | Sun Microsystems, Inc. | Clip testing unit for a three-dimensional graphics accelerator |
JP3132436B2 (ja) * | 1997-09-26 | 2001-02-05 | 日本電気株式会社 | 浮動小数点積和演算器 |
US6052129A (en) | 1997-10-01 | 2000-04-18 | International Business Machines Corporation | Method and apparatus for deferred clipping of polygons |
US6275838B1 (en) | 1997-12-03 | 2001-08-14 | Intrinsity, Inc. | Method and apparatus for an enhanced floating point unit with graphics and integer capabilities |
US6175851B1 (en) | 1998-02-06 | 2001-01-16 | S3 Incorporated | Fast adder/subtractor for signed floating point numbers |
KR100290906B1 (ko) | 1998-03-10 | 2001-07-12 | 김영환 | 부동소수점곱셈기에서반올림과덧셈을동시에수행하는장치및방법 |
US6426746B2 (en) | 1998-03-31 | 2002-07-30 | Intel Corporation | Optimization for 3-D graphic transformation using SIMD computations |
US5995122A (en) | 1998-04-30 | 1999-11-30 | Intel Corporation | Method and apparatus for parallel conversion of color values from a single precision floating point format to an integer format |
US6175907B1 (en) | 1998-07-17 | 2001-01-16 | Ip First, L.L.C | Apparatus and method for fast square root calculation within a microprocessor |
JP3869947B2 (ja) | 1998-08-04 | 2007-01-17 | 株式会社日立製作所 | 並列処理プロセッサ、および、並列処理方法 |
US6115729A (en) * | 1998-08-20 | 2000-09-05 | Arm Limited | Floating point multiply-accumulate unit |
AU5686299A (en) | 1998-08-20 | 2000-03-14 | Raycer, Inc. | Method and apparatus for generating texture |
US6199089B1 (en) | 1998-09-18 | 2001-03-06 | Ati International Srl | Floating point arithmetic logic unit rounding using at least one least significant bit |
US7117342B2 (en) | 1998-12-03 | 2006-10-03 | Sun Microsystems, Inc. | Implicitly derived register specifiers in a processor |
US7242414B1 (en) | 1999-07-30 | 2007-07-10 | Mips Technologies, Inc. | Processor having a compare extension of an instruction set architecture |
US6732259B1 (en) | 1999-07-30 | 2004-05-04 | Mips Technologies, Inc. | Processor having a conditional branch extension of an instruction set architecture |
US6298365B1 (en) | 1999-02-24 | 2001-10-02 | International Business Machines Corporation | Method and system for bounds comparator |
US6401108B1 (en) | 1999-03-31 | 2002-06-04 | International Business Machines Corp. | Floating point compare apparatus and methods therefor |
JP2000347832A (ja) | 1999-06-09 | 2000-12-15 | Mitsubishi Electric Corp | 浮動小数点演算方式ならびに浮動小数点演算装置およびそれを備える半導体集積回路装置 |
US6697832B1 (en) | 1999-07-30 | 2004-02-24 | Mips Technologies, Inc. | Floating-point processor with improved intermediate result handling |
US6714197B1 (en) | 1999-07-30 | 2004-03-30 | Mips Technologies, Inc. | Processor having an arithmetic extension of an instruction set architecture |
US6912559B1 (en) | 1999-07-30 | 2005-06-28 | Mips Technologies, Inc. | System and method for improving the accuracy of reciprocal square root operations performed by a floating-point unit |
US6631392B1 (en) | 1999-07-30 | 2003-10-07 | Mips Technologies, Inc. | Method and apparatus for predicting floating-point exceptions |
US7346643B1 (en) | 1999-07-30 | 2008-03-18 | Mips Technologies, Inc. | Processor with improved accuracy for multiply-add operations |
US6285779B1 (en) | 1999-08-02 | 2001-09-04 | Trident Microsystems | Floating-point complementary depth buffer |
JP4439060B2 (ja) | 1999-12-17 | 2010-03-24 | 株式会社ルネサステクノロジ | 浮動小数点加算器 |
US6535898B1 (en) | 2000-01-24 | 2003-03-18 | Microsoft Corporation | Fast floating-point truncation to integer form |
US6996596B1 (en) | 2000-05-23 | 2006-02-07 | Mips Technologies, Inc. | Floating-point processor with operating mode having improved accuracy and high performance |
US7424414B2 (en) * | 2003-09-05 | 2008-09-09 | Road Safety International, Inc. | System for combining driving simulators and data acquisition systems and methods of use thereof |
-
1999
- 1999-07-30 US US09/364,512 patent/US7346643B1/en not_active Expired - Fee Related
-
2000
- 2000-07-24 WO PCT/US2000/020160 patent/WO2001009712A1/en not_active Application Discontinuation
- 2000-07-24 EP EP00948936A patent/EP1234228A4/en not_active Withdrawn
- 2000-07-24 JP JP2001514658A patent/JP4691294B2/ja not_active Expired - Fee Related
-
2007
- 2007-12-03 US US11/949,418 patent/US8024393B2/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
EP1234228A1 (en) | 2002-08-28 |
US7346643B1 (en) | 2008-03-18 |
US8024393B2 (en) | 2011-09-20 |
US20080183791A1 (en) | 2008-07-31 |
WO2001009712A1 (en) | 2001-02-08 |
JP2003529124A (ja) | 2003-09-30 |
EP1234228A4 (en) | 2005-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4691294B2 (ja) | 乗算−加算演算用高精度プロセッサ | |
US6697832B1 (en) | Floating-point processor with improved intermediate result handling | |
JP6495220B2 (ja) | 選択可能な副精度に対して、低減された電力要求を有する浮動小数点プロセッサ | |
US8429217B2 (en) | Executing fixed point divide operations using a floating point multiply-add pipeline | |
JP3689183B2 (ja) | 正確な浮動小数点除算/平方根演算を実現する正確、かつ効果的なスティッキー・ビット計算 | |
US5880984A (en) | Method and apparatus for performing high-precision multiply-add calculations using independent multiply and add instruments | |
US6631392B1 (en) | Method and apparatus for predicting floating-point exceptions | |
KR100955557B1 (ko) | 선택가능 준정밀도를 가진 부동―소수점 프로세서 | |
JP6001276B2 (ja) | 浮動小数点加算を実行するための装置および方法 | |
JP4953644B2 (ja) | 正規化および丸め処理前にフィードバックを行う浮動小数点ユニットのためのシステムおよび方法 | |
US6996596B1 (en) | Floating-point processor with operating mode having improved accuracy and high performance | |
KR19990072273A (ko) | 초등함수값을고정밀도로어림계산하는시스템및방법 | |
US5943249A (en) | Method and apparatus to perform pipelined denormalization of floating-point results | |
JP2008520048A (ja) | 汎用乗算加算機能ユニット | |
Quinnell et al. | Bridge floating-point fused multiply-add design | |
Boersma et al. | The POWER7 binary floating-point unit | |
Chen et al. | Pipelined computation of very large word-length LNS addition/subtraction with polynomial hardware cost | |
US6941334B2 (en) | Higher precision divide and square root approximations | |
Jaiswal et al. | Area-efficient architecture for dual-mode double precision floating point division | |
US6912559B1 (en) | System and method for improving the accuracy of reciprocal square root operations performed by a floating-point unit | |
Bruguera | Low-latency and high-bandwidth pipelined radix-64 division and square root unit | |
JPH0687219B2 (ja) | 制御方法 | |
US6615228B1 (en) | Selection based rounding system and method for floating point operations | |
EP0837390A1 (en) | Improvements in or relating to microprocessor integrated circuits | |
JPH0823810B2 (ja) | 浮動小数点演算回路 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070723 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070723 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20091022 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20091028 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100120 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20100802 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20101122 |
|
A911 | Transfer of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20101129 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20110127 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110221 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 4691294 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140225 Year of fee payment: 3 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |