(57)【要約】【課題】  正規化又は丸め処理前にフィードバックを行う浮動小数点ユニットの性能を改善すること。【解決手段】  オペランドを受け取るようにされた入力レジスタを含む浮動小数点算術演算を実行するためのシステムである。このシステムは、さらに、オペランドが非正規化フォーマットであるという判断に応答して、シフト又はマスキング演算を実行するための機構を含む。このシステムは、さらに、オペランドが単精度であること、該オペランドが先行する演算の結果に基づいて増分を要求していること、および、該先行する演算が該増分を実行しなかったことを判断したのに応答して、該オペランドの単精度増分を実行するための命令を含む。オペランドは先行する演算で作成された。このシステムは、さらに、オペランドが倍精度であること、該オペランドが先行する演算の結果に基づいて増分を要求していること、および、該先行する演算が該増分を実行しなかったことを判断したのに応答して、該オペランドの倍精度増分を実行するための命令を含む。【選択図】      図１
2006221622.tif 000002
【特許請求の範囲】
【請求項１】
浮動小数点算術演算を実行するためのシステムであって、
オペランドを受け取るようにされた入力レジスタと、
前記オペランドが非正規化フォーマットであるという判断に応答して、前記オペランドを正規化され、かつ切り捨てされたオペランドと等価になるようにするため前記オペランドに対してマスキング又はシフト演算を実行するためと、
前記オペランドが単精度であること、前記オペランドが先行する演算の結果に基づいて増分を要求していること、および、前記先行する演算が前記増分を実行しなかったことを判断したのに応答して、前記オペランドの単精度増分を実行するためと、
前記オペランドが倍精度であること、前記オペランドが先行する演算の結果に基づいて増分を要求していること、および、前記先行する演算が前記増分を実行しなかったことを判断したのに応答して、前記オペランドの倍精度増分を実行するための
機構と
を備えるシステム。
【請求項２】
前記オペランドが、加数、乗数、又は被乗数である、請求項１に記載のシステム。
【請求項３】
前記オペランドが、前記先行する演算による、丸められておらず、かつ正規化されていない、中間結果である、請求項１に記載のシステム。
【請求項４】
前記シフト演算が左シフト演算である、請求項１に記載のシステム。
【請求項５】
前記シフト演算が左１ビット・シフト演算である、請求項１に記載のシステム。
【請求項６】
前記増分が、前記オペランドを丸めるために必要とされる、請求項１に記載のシステム。
【請求項７】
前記先行する演算が加算演算である、請求項１に記載のシステム。
【請求項８】
前記先行する演算が乗算演算である、請求項１に記載のシステム。
【請求項９】
前記シフト演算の実行、前記単精度増分の実行、および、前記倍精度増分の実行が、前記オペランドの正規化要求に応答してなされるものである、請求項１に記載のシステム。
【請求項１０】
浮動小数点算術演算を実行するためのシステムであって、
複数のオペランドを受け取るようにされた入力レジスタと、
前記オペランドが非正規化フォーマットであるという判断に応答して、前記オペランドを正規化され、かつ切り捨てされたオペランドと等価になるようにするため、前記複数のオペランドのうちの１つに又はそれ以上に対してマスキング又はシフト演算を実行するためと、
前記オペランドが単精度であること、前記オペランドが先行する演算の結果に基づいて増分を要求していること、および、前記先行する演算が前記増分を実行しなかったことを判断したのに応答して、前記複数のオペランドのうちの１つに又は２つ以上に対して単精度増分を実行するためと、
前記オペランドが倍精度であること、前記オペランドが先行する演算の結果に基づいて増分を要求していること、および、前記先行する演算が前記増分を実行しなかったことを判断したのに応答して、前記複数のオペランドのうちの１つに又は２つ以上に対して倍精度増分を実行するための
機構と
を備えるシステム。
【請求項１１】
前記複数のオペランドが、加数、乗数、および被乗数である、請求項１０に記載のシステム。
【請求項１２】
前記１つの又は２つ以上のオペランドが、前記先行する演算による、丸められておらず、かつ正規化されていない、結果である、請求項１０に記載のシステム。
【請求項１３】
浮動小数点算術演算を実行するための方法であって、
オペランドが非正規化フォーマットであるという判断に応答して、前記オペランドに対してマスキング又はシフト演算を実行するステップと、
前記オペランドが単精度であること、前記オペランドが先行する演算の結果に基づいて増分を要求していること、および、前記先行する演算が前記増分を実行しなかったことを判断したのに応答して、前記オペランドの単精度増分を実行するステップであって、前記オペランドが前記先行する演算において作成されたものである、ステップと、
前記オペランドが倍精度であること、前記オペランドが先行する演算の結果に基づいて増分を要求していること、および、前記先行する演算が前記増分を要求しなかったことを判断したのに応答して、前記オペランドの倍精度増分を実行するステップと
を含む方法。
【請求項１４】
前記オペランドが、加数、乗数、又は被乗数である、請求項１３に記載の方法。
【請求項１５】
前記オペランドが、前記先行する演算による、丸められておらず、かつ正規化されていない中間結果である、請求項１３に記載の方法。
【請求項１６】
前記シフト演算が左シフト演算である、請求項１３に記載の方法。
【請求項１７】
前記増分は、前記オペランドを丸めるために必要とされる、請求項１３に記載の方法。
【請求項１８】
前記先行する演算が、加算演算である、請求項１３に記載の方法。
【請求項１９】
前記先行する演算が、乗算演算である、請求項１３に記載の方法。
【請求項２０】
前記マスキング又はシフト演算の実行、前記単精度増分の実行、および、前記倍精度増分の実行が、前記オペランドの正規化要求に応答してなされるものである、請求項１３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
ＩＢＭは、アメリカ合衆国、ニューヨーク州アーモンク所在のインターナショナル・ビジネス・マシーンズ・コーポレーションの登録商標である。Ｓ／３９０、Ｚ９００、およびｚ９９０、並びにここで用いられる他の名称は、インターナショナル・ビジネス・マシーンズ・コーポレーション又は他の会社の登録商標、商標、又は製品名である場合がある。
本発明は、一般に、コンピュータ・システムに関し、より具体的には、浮動小数点演算を提供するコンピュータ・システムに関する。
【背景技術】
【０００２】
「IEEE-754 Standard for Binary Floating-point Arithmetic」は、乗算器を有する浮動小数点プロセッサのようなコンピュータ・ハードウェアに共通に実装される浮動小数点データのアーキテクチャを規定する。このフォーマットは、符号と、符号無しのバイアスされた指数と、仮数で構成される。符合ビットはシングルビットであり「Ｓ」で表される。「ｅ」で表される符号無しのバイアスされた指数は、シングル・フォーマットについては８ビット長であり、ダブル・フォーマットについては１１ビット長である。仮数は、シングル・フォーマットについては２４ビット長であり、ダブル・フォーマットについては５３ビット長である。仮数の最上位ビットは、指数の値から暗示される。仮数の下位ビット又は小数部は、以下の式（１）および（２）において「Ｆ」によって表される。符号無しのバイアスされた指数「ｅ」がゼロに等しくなく、全てのビットが１に設定されていない場合には、浮動小数点数の値は以下の式によって与えられる。
（−１）Ｓ×（１）．Ｆ×２（Ｃ−Ｂｉａｓ）・・・・・・（数１）
【０００３】
この範囲内の数は、正規化数と呼ばれ、これらは仮数の初めに暗黙の１を有する。この範囲外の数は、特殊な数であると考えられる。４種類の特殊な数がＩＥＥＥ−７５４規格に定義されている。これらの特殊な数のうちの３つは、これらの値が、算術計算をほとんど又は全く用いることなく結果の値を指示するので、ハードウェアによって容易に処理される。この３つの特殊な数はゼロ、無限大、および非数値（「ＮａＮ」）である。４番目の種類の特殊な数は、符号無しのバイアスされた指数ｅによって示される正規化されていない数であって、ゼロおよび非ゼロの小数部に等しい。第４の特殊な数の値は、以下の式によって与えられる。
（−１）Ｓ×（０）．Ｆ×２（１−Ｂｉａｓ）・・・・・・（数２）
【０００４】
【特許文献１】米国特許明細書第４，９９９，８０２号
【発明の開示】
【発明が解決しようとする課題】
【０００５】
正規化フォーマットとは対照的に、この非正規化フォーマットにおける小数部に先行する暗黙の１はない。データが非正規化されていると判断するためには、指数部が調査されなければならない。これは、ハードウェアによって実行される計算が、典型的には、乗算の場合にそうであるように、該ハードウェアのサイクル時間に影響する非正規化入力データを前もって決めることによって順次にゲートされることになるので、重要である。非正規化入力データの処理は、オペランドが非正規化されたものであるということについての予めデコードされた情報をもたない浮動小数点プロセッサにとって特有の問題であり、特に、入力オペランドが正規化されたものであるとの仮定がある場合にはそうである。
【０００６】
高性能浮動小数点ユニット（ＦＰＵ）を設計する際の主要な性能要因の１つは、２つの連続する演算の間の依存性を解除するために要求されるサイクルの数である。例えば、融合した乗算・加算演算のための待ち時間全体は、ＦＰＵにつき１サイクル当たり１演算のスループットで７サイクルとなる。この種類のパイプラインにおいては、先行する演算の結果に依存する演算は、開始前に、第１の演算の待ち時間全体を待たなければならないことが普通である（この場合は７サイクル）。
【０００７】
現在、いくつかのＦＰＵは、丸められた中間結果が計算される後まで依存演算を遅延させることによって、データ依存演算の限られた事例に対するサポートとなる、融合した乗算・加算演算を実行する。例えば、特許文献１は、丸め処理前の中間結果が新規の依存命令に伝送され、その後で乗算器において修正されることを可能にする機構を示す。この機構は、丸め処理前に中間結果をサポートして、倍精度データのために乗算器にフィードバックされる。
【０００８】
性能の改善は、複数のデータ型（すなわち、単精度および倍精度）に対して早期の丸められていないフィードバックを提供することによって、および、乗数入力オペランドと加数入力オペランドの両方への依存を可能にすることによって、達成することができる。付加的な性能の改善は、正規化のいくつか又は全てに、丸められておらず、かつ正規化されていない結果をフィードバックすることによって達成することができる。
【課題を解決するための手段】
【０００９】
本発明の例示的な実施形態は、浮動小数点算術演算を実行するためのシステムを含む。このシステムは、オペランドを受け取るようにされた入力レジスタと、該オペランドが非正規化フォーマットであり、マスクされなければならない余剰精度ビットを有する可能性があるという判断に応答して、マスキング又はシフト演算を実行するための機構とを含む。このシステムは、さらに、オペランドが単精度であること、該オペランドが先行する演算の結果に基づいて増分を要求していること、および、該先行する演算が該増分を実行しなかったことを判断したのに応答して、該オペランドの単精度増分を実行するための機構を含む。このオペランドは、先行する演算において作成されたものである。このシステムは、さらに、オペランドが倍精度でありこと、該オペランドが先行する演算の結果に基づいて増分を要求していること、および、該先行する演算が該増分を実行しなかったことを判断したのに応答して、該オペランドの倍精度増分を実行するための機構を含む。
【００１０】
付加的な例示的な実施形態は、浮動小数点算術演算を実行するためのシステムを含む。このシステムは、複数のオペランドを受け取るようにされた入力レジスタと、該オペランドが非正規化フォーマットであり、マスクされなければならない余剰精度ビットを有する可能性があるという判断に応答して、マスキング又はシフト演算を実行するための機構とを含む。このシステムは、さらに、オペランドが単精度であること、該オペランドが先行する演算の結果に基づいて増分を要求していること、および、該先行する演算が該増分を実行しなかったことを判断したのに応答して、複数のオペランドのうちの１つに又は２つ以上に対して単精度増分を実行するための機構を含む。このシステムは、さらに、オペランドが倍精度であること、該オペランドが先行する演算の結果に基づいた増分を要求していること、かつ、該先行する演算が該増分を実行しなかったことを判断したのに応答して、複数のオペランドのうちの１つに又は２つ以上に対して倍精度増分を実行するための機構を含む。
【００１１】
付加的な例示的な実施形態は、浮動小数点算術演算を実行するための方法を含む。この方法は、オペランドが非正規化フォーマットであり、マスクされなければならない余剰精度ビットを有する可能性があるという判断に応答して、マスキング又はシフト演算を実行するステップを含む。この方法は、さらに、オペランドが単精度であること、該オペランドが先行する演算の結果に基づいて増分を要求していること、および、該先行する演算が該増分を実行しなかったことを判断したのに応答して、該オペランドの単精度増分を実行するステップを含む。このオペランドは、先行する演算において作成されたものである。この方法は、さらに、オペランドが倍精度であること、該オペランドが先行する演算の結果に基づいて増分を要求していること、および、該先行する演算が該増分を実行しなかったことを判断したのに応答して、該オペランドの倍精度増分を実行するステップを含む。
【００１２】
さらなる特徴および利点が本発明の技術を通して理解される。本発明の他の実施形態および態様は、ここに詳細に説明されており、特許請求される本発明の一部であると考えられる。利点および特徴をもつ本発明をさらに理解するために、説明および図面を参照する。
【発明を実施するための最良の形態】
【００１３】
本発明として考えられる内容は、特許請求の範囲において特に指摘され、明確に請求される。本発明の上記および他の目的、特徴、および利点は、添付の図面と併せて以下の詳細な説明から明らかである。
【００１４】
詳細な説明は、図面を参照した実施例により、利点および特徴と共に本発明の好ましい実施形態を説明する。
【００１５】
本発明の例示的な実施形態は、１つの融合した乗算・加算演算が前の融合した乗算・加算演算に依存する依存演算に対して、ハードウェアを最適化することに関するものである。融合した乗算・加算のデータフローは、Ａ、Ｂ、およびＣが３つの入力オペランドであり、Ｔが乗加算演算のターゲット又は結果である場合に、式Ｔ＝Ｂ＋Ａ＊Ｃを実施する。Ａは乗数、Ｃは被乗数、Ｂは加数と呼ぶことができる。乗算・加算演算は、乗算に対して１つ、並びに、加算演算に対して１つではなく、１つの丸め誤差で計算される点で、融合されていると考えられる。
【００１６】
本発明の例示的な実施形態においては、３つのオペランドは、ＩＥＥＥ７５４  ２進浮動小数点規格によって定義される２進浮動小数点オペランドである。ＩＥＥＥ７５４規格は、３２ビットの単精度および６４ビットの倍精度フォーマットを定義する。ＩＥＥＥ７５４規格は、或る数が正であるか又は負であるかを示す１符号ビット、その数の指数を表すビットのフィールド、および、その数の仮数を表すビットのフィールドを有するものとしてデータを定義する。
【００１７】
本発明の例示的な実施形態においては、入力オペランド（すなわち、Ａ、Ｂ、およびＣ）は、単精度又は倍精度の何れかとすることができ（例えば、ＡおよびＢは単精度であり、ＣおよびＴは、倍精度又はあらゆる他の組み合わせである）、ターゲット（Ｔ）は、単精度又は倍精度の何れかとされる命令テキストによって定義される。さらに、本発明の例示的な実施形態は、全ての３つのオペランドに対する依存を処理する能力を有する。丸められておらず、かつ正規化されていない中間の結果を３つのオペランド（すなわち、Ａ、Ｂ、およびＣ）の何れかに与えることができる。
【００１８】
融合した乗算・加算データフローの７つのサイクルのパイプラインは、各パイプラインのステージを示すために、Ｆ１、Ｆ２、Ｆ３、Ｆ４、Ｆ５、Ｆ６、およびＦ７を用いて表示を付すことができる。正規化は、パイプラインの最後のステージの隣で、この場合にはＦ６で完了することが普通である。さらに、最後のステージＦ７では、正規化された結果と、最後の場所において１ユニットだけ増分された正規化された結果との間で選択するために丸め処理を実行することが普通である。丸められておらず、かつ正規化されていない早期の結果をフィードバックすることなく、２つの依存関係があり融合した乗算・加算演算の典型的なパイプラインのフローは、以下のように生じる。
【表１】
2006221622.tif 000003
【００１９】
丸められていないデータのフィードバックを与えることを使用することにより、２つの依存した融合した乗算・加算演算のパイプラインのフローは、以下のように生じる。
【表２】
2006221622.tif 000004
【００２０】
上のシーケンスで示されるように、第２の融合した乗算・加算演算は、１サイクル早く開始される。結果として、２つの融合した乗算・加算演算は、１４サイクルではなく１３サイクルで完了する。付加的な部分的なサイクルを、丸められておらず、かつ正規化されていないデータをフィードバックすることによって省くことができ、合計では１つより多いサイクルが省かれるという結果になる。
【００２１】
丸められておらず、かつ正規化されていないフィードバックを提供する本発明の例示的な実施形態においては、２つの異なる方式を使用して、乗数オペランドの場合および加数オペランドの場合を処理する。乗数オペランドに対するフィードバックのためには、サイクルＦ６の中間点からの丸められておらず、かつ正規化されていない結果が、オペランド・レジスタにフィードバックされる（Ｆ１の前のサイクル）。丸め修正項は、第１の演算の出力の精度（例えば、ｒ５）、第２の演算に対する入力の精度（例えば、ｒ５、ｒ２およびｒ７）、および、フィードバックされた結果の正規化要求に基づいて形成される。この修正項は、カウンタ・ツリーにおける部分積に加算される。正規化要求は、Ｆ６の終わりで分かり、Ｆ７の間においては、丸め処理が、増分を要求するか、又は切り捨てを要求するかが分かる。この情報は、カウンタ・ツリーに信号通知され、丸め修正項は、乗数のツリーに対し、サイクルＦ１において、抑制されるか又はイネーブルにされるかの何れかである。丸め修正項は、何れかのオペランドに対する単精度又は倍精度のフィードバックを処理することができる種々の組み合わせの１つとすることができる。さらに、結果を両方の乗数オペランドにフィードバックするという特殊な場合も考慮しなければならない。
【００２２】
加数オペランドに対するフィードバックは、まず、Ｆ６のサイクルにおいて正規化された結果の指数をフィードバックし、次に、後のサイクルＦ７で、正規化され丸められた結果を、加数の第２のパイプライン・ステージにフィードバックすることによって達成される。加数のデータフロー経路は、積に対する加数のシフト量を求める指数差計算にとってのみ重要である。仮数は重要ではなく、その整合は、サイクルＦ２で開始されるように、シフト量計算だけ遅延させられる。したがって、Ｆ７からの正規化され丸められた結果の仮数は、Ｆ２サイクル用ラッチに直接供給することができる。
【００２３】
加数Ｂに対する依存性を修正するためには、本発明の例示的な実施形態は、結果の部分的に正規化された指数を早期に送り、サイクルは、部分的に正規化され丸められた結果の仮数を後で次の演算に送るようにする。これを可能にするために、付加的なビットが整合において使用される。丸め処理は、全てが１の５３ビットの仮数を、５３のゼロが続く１の５３ビットの仮数に増分することができるので、５３ビットの倍精度仮数を整合するのではなく、５４ビットが使用される。整合のシフト量が、丸め処理の後ではなく、むしろ正規化された結果の指数から計算されるので、仮数の付加的なビットは維持される必要がある。
【００２４】
７ステージの融合した乗算・加算パイプラインにおいては、指数がステージ６の後で、ステージ１の入力レジスタにフィードバックされ、したがって、前の命令のステージ７が、依存性をもつ新規な命令のステージ１と重なり合うようになる。以下のサイクルで、ステージ７は、新規の依存性命令のステージ２に対して前の命令の丸められた仮数を供給する。ステージ１においては、加数のシフト整合は達成されず、したがって、このステージはバイパスすることができる。したがって、加数オペランドにおける依存性は、ステージ６からステージ１に正規化された指数を送り、ステージ７からステージ２に丸められた仮数を送り、５３ビットの仮数のキャリー・アウトに対処できるように仮数の付加的なビットを保存することにより、処理することができる。
【００２５】
２つの乗数オペランドＡおよびＣについての修正の例示的な実施形態は以下のとおりである。Ｐが積を表す場合には、
Ｐ＝Ａ×Ｃ・・・・・・（数３）
である。
【００２６】
単精度についてはｎ＝２３であり、又は、倍精度については５２であり、Ａ’が正規化および丸め処理を完了する前の中間の切り捨てされた結果であるものとして、Ａ＝Ａ’＋２−ｎであるならば、Ｐ＝Ａ×Ｃ＝（Ａ’＋２―ｎ）×Ｃ＝Ａ’×Ｃ＋２―ｎ×Ｃである。対応する指数をもつ仮数が共にフィードバックされる限りは、部分的に正規化された結果のみをフィードバックすることは、積の値に影響が全くないことに注目されたい。丸め処理のみが修正を必要とするが、部分的に正規化された結果があることは、増分するビットを突き止めるのを困難にする。
【００２７】
したがって、丸め処理前の中間結果Ａ’に、乗数の部分積アレイにおけるＣが乗算される場合には、Ａ’を用いることに対する修正のために、修正項を加算する必要がある。この修正項は、２―ｎが乗算されたＣで構成される。中間結果が正規化されている場合には、修正項は、Ａが単精度であるか又は倍精度であるかに応じて、２３ビット位置又は５２ビット位置の何れかだけシフトされた単なるＣとなる。しかし、もう１ビット左シフトする必要がある部分的に正規化された結果においては、ｎは単精度については２３又は２４、倍精度については５２又は５３に等しいこととなる。正規化の完了がこれよりも少ない場合には、丸め処理位置の場所は、もっと多くの潜在的な場所を生成することになる。
【００２８】
Ｃ´が丸められておらず、かつ正規化されていない中間の結果であるものとして、Ｃが先行する演算に依存するオペランドであり、Ｃ＝Ｃ’＋２―ｎである場合には、
Ｐ＝Ａ×Ｃ＝Ａ×（Ｃ’＋２―ｎ）＝Ａ×Ｃ’＋Ａ×２―ｎ・・・・・・（数４）
である。
【００２９】
この場合、修正項は、正規化された中間結果については２３ビット位置又は５２ビット位置だけ、或いは、左への最後の１ビット・シフトがフィードバック経路に対してスキップされている場合には、２３、２４、５２又は５３だけシフトされたＡである。
【００３０】
ＡおよびＣの両方が等しく、先行する演算に依存する場合には、
Ｐ＝（Ａ’＋２―ｎ）×（Ｃ’＋２―ｎ）＝Ａ’×Ｃ’＋Ａ’×２―ｎ＋Ｃ’×２―ｎ＋２―ｎ・・・・・・（数５）、および、
Ｐ＝Ａ’×Ｃ’＋Ａ’×２（−ｎ＋１）＋２−２ｎ・・・・・・（数６）
である。
【００３１】
乗数オペランドにおける依存性については、本発明の例示的な実施形態は、完了しようとしている演算の精度に基づいて、および正規化が完了したかどうか（すなわち、左１シフト（ＳＬ１）が要求されるかどうか）に基づいた修正項を作成する。増分が丸め処理に必要とされる場合には、修正項が部分積アレイに加算される。
【００３２】
ＩＥＥＥ７５４浮動小数点規格に追随する２進浮動小数点設計においては、全てのオペランドは、それらが非常に小さくない限りは、正常値より小さい数の範囲で正規化されなければならない。正規化オペランドで始まり、乗算演算は、２つの可能性のあるビット位置のいずれか１つである先頭の１をもつ結果を生成し、最小のシフトしか要求しない。しかし、加算演算は、多数のシフトが要求されるという結果になる大量の取り消しを生じさせることがある。典型的には、先頭ゼロ予想（ＬＺＡ）回路が、加算と並行してシフト量を計算するように設計される。大部分のＬＺＡは、どこに先頭の１があるかについて不正確な推量を生成し、１ビット位置と同じ程度だけずれていることがある。多くのノーマライザは、このことを考慮に入れるように設計されており、ＬＺＡ量だけシフトする多数のシフティング・レベルを用いることによって開始し、この次には修正シフトが続く。修正シフトは、前のシフタのデータの最上位ビットの検出を要求し、もう１ビット左シフトするかどうかを選ぶための選択ラインとして使用される。この修正シフトは、選択が早期には利用可能ではなく、データの全てのビットに動力を再供給しなければならないので、遅い。修正シフトは、４  ＦＯ４（４つの信号まで展開するインバータの遅延）までの遅延を要求することがある。高周波設計においては、これは重要である。以下で説明される本発明の例示的な実施形態は、データを次のオペランドにバイパスする前にＳＬ１をスキップし、その代わりにこれを修正する。
【００３３】
本発明の例示的な実施形態は、丸め処理前に、具体的には、正規化を完了する前に、中間結果を融合した乗算・加算パイプラインにおける次の演算に供給する。本発明の例示的な実施形態は、正規化の最後のＳＬ１修正前にデータをフィードバックするものであるが、これは、正規化のどのレベルより前になるように容易に拡張することができる。早期の正規化より前にデータをフィードバックすることの困難さは、データがより広くなければならず、さらに、最下位ビットをマスキングする必要があることである。本発明の例示的な実施形態は、典型的には、ＦＰＵの重要な経路であるフィードバック経路において臨界的となる量の遅延を減少する。
【００３４】
入力オペランド・レジスタにフィードバックする前にデータをシフトするのではなく、データの仮数および対応する指数が、存在し得る付加的な精度のビットと共にフィードバックされる。先頭ビットが１である場合には、最下位ビットが、オペランド・レジスタに対する入力のときにマスクされる。これはさらに、丸め処理が２つの異なるビット位置に１を加算するので、前述の丸め修正項の設計に影響し、したがって、修正項は潜在的にシフトされなければならないものとなる。
【００３５】
正規化の一部、ＳＬ１修正は、バイパス経路においてスキップされて、丸め経路で遅延される。バイパス経路においては、ＳＬ１修正は、ＬＳＢのマスキング、並びに、以下のサイクルにおいて作成される丸め修正項のシフティングを制御する。浮動小数点レジスタへのスルー経路においては、ＳＬ１修正は、丸め処理の後まで遅延されて、ラウンダの出力の最後のシフティングを選択するのに用いることができる。このように、左１シフトの修正は、臨界的サイクルにおいて１ビットのみをゲートして、動力が再供給された後で、後続サイクルにおいて修正の大部分を実行する。本発明の実施形態は、複雑さが付加されることにはなるが、スキップされたシフティング量だけバス幅を増加させて、最後の４ビットのシフティング、又は、さらなるノーマライザのステップのスキップをカバーするように拡げることができる。
【００３６】
図１は、正規化および丸め処理前にフィードバックを行う、融合した乗算・加算演算を実施するための、本発明の例示的な実施形態に使用することのできるＦＰＵのブロック図である。レジスタ・ファイルからデータ１００が提供され、Ｂ１レジスタ１１０、Ａ１レジスタ１１１、およびＣ１レジスタ１１２に入力される。本発明の例示的な実施形態においては、Ａ１レジスタ１１１およびＣ１レジスタ１１２は、浮動小数点算術演算の乗算部分において用いられるオペランドを含む。Ｂ１レジスタ１１０は、加算オペランドを含む。Ａ１レジスタ１１１のコンテンツが、ブース・デコーダ１３０に入力される。ブース・デコーダ１３０、ブース・マルチプレクサ１３２、およびカウンタ・ツリー／部分積縮小ブロック１３４は、総合的に乗算器と呼ぶことができる。ブース・デコーダの出力が、ブース・マルチプレクサ１３２を通して、カウンタ・ツリー／部分積縮小ブロック１３４に提供される。Ｃ１レジスタ１１２のコンテンツが、丸め修正ブロック１８０に入力される。Ｃ１レジスタ１１２のコンテンツもまた、さらに、ブース・マルチプレクサ１３２を介して、カウンタ・ツリー／部分積縮小ブロック１３４に入力される。
【００３７】
Ａ１レジスタ１１１、Ｂ１レジスタ１１０、およびＣ１レジスタ１１２のコンテンツは、指数差ブロック１２０に入力されて、アライナ１２４における加算器１５０への入力をどのように整合させるかを定める。指数差ブロック１２０の出力がＢ２レジスタ１２２に入力され、Ｂ２レジスタ１２２のコンテンツはアライナ１２４に入力される。アライナ１２４はシフタとして実施することができ、その機能は、加算オペランドを、乗算器１３４において実行された乗算の結果と整合することである。アライナ１２４は、Ｂ３レジスタ１２６に格納される出力を提供する。Ｂ３レジスタ１２６のコンテンツが、３：２カウンタ１４０に入力される。
【００３８】
カウンタ・ツリー／部分積縮小ブロック１３４は、３：２カウンタ１４０に入力される２つの部分積出力を提供する。３：２カウンタ１４０は、出力を、加算器１５０および先頭ゼロ・インジケータ（ＬＺＡ）１８２に提供する。加算器１５０への入力に基づいて、ＬＺＡ１８２は、該加算器１５０の出力がどれだけ左シフトされなければならないかを予測する。当該技術分野で知られているにように、ＬＺＡ１８２は、要求されるシフティング量の良好な推定を提供するが、位置が１だけずれることになる。ＬＺＡからの推定は、ノーマライザ１６０に入力される。加算器１５０の出力もまた、正規化のためにノーマライザ１６０に入力される。正規化が完了する前に、丸められておらず、かつ正規化されていない中間の結果が出力されて、Ａ１レジスタ１１１、Ｂ１レジスタ１１０、およびＣ１レジスタ１１２に送られる。さらに、ノーマライザ１６０からの出力が、丸め処理のためのラウンダ１７０に入力される。丸められた結果は、ラウンダ１７０から出力される。ラウンダ１７０は、丸め処理のために増分が必要かどうかを示す信号を出力する。ラウンダ１７０からのこのインジケータ信号は、丸め修正ブロック１８０に入力されて、カウンタ・ツリー／部分積縮小ブロック１３４に入力される。さらに、丸め修正ブロック１８０への入力は、結果が正規化されるように左１ビット・シフトされる必要があるかどうかを示すための、ノーマライザ１６０からのＳＬ１インジケータである。さらに、丸められた結果をＢ２レジスタ１２２、Ａ１レジスタおよび／又はＣ１レジスタ１１２に入力することができる。
【００３９】
図２は、本発明の例示的な実施形態における乗算器の一部である桁上げ保存加算器ツリーの図である。丸め修正１８０の出力は、入力を桁上げ保存加算器ＣＳＡ３Ｂに提供することに注目されたい。この入力は、前に計算された結果が上向きに丸められたかどうかを示すのに使用される。そうである場合には、１が部分積に加算される。ツリーを通る伝搬遅延のために、丸め処理を適時に追加することができる。
【００４０】
丸められておらず、かつ正規化されていない中間結果を提供するための本発明の例示的な実施形態においては、丸め修正ブロック１８０から出力される丸め修正項の論理が、以下の数式によって計算される。Rounding_correction変数が、Ａ×Ｃの結果に加算されて、Ａおよび／又はＣが丸められないことになるという事実を修正する。DP_TARGETは、ターゲット又は結果が倍精度で表される場合には１に設定されるスイッチであり、ターゲットが単精度で表される場合には、ゼロに設定されるスイッチである。Ａは、Ａ１レジスタ１１１に格納される入力データであり、ＢはＢ１レジスタ１１０に格納される入力データであり、ＣはＣ１レジスタ１１２に格納される入力データである。BYP_Aは、Ａが丸められていない中間の結果である場合に１に設定され、或いは別の場合にはゼロにリセットされるスイッチである。BYP_Cは、Ｃが丸められていない中間の結果である場合に１に設定され、或いは別の場合にはゼロにリセットされるスイッチである。ＳＬ１インジケータは、ＬＺＡ３０２からの出力であり、ＳＬ１がデータに適用される必要があるかどうかを示す。PP_round correctionが、部分積に加算されて、丸められていないＡおよび／又はＣを修正する。rounder_chooses_to_incrementは、切り捨てるか又は増分するかを示すラウンダからのインジケータである。
【表３】
2006221622.tif 000005
【００４１】
５３ビットのＡ又はＣは、単精度においてはビット２４から５３はゼロになるため、これらが単精度であるか又は倍精度であるかには関係なく、使用することができることに注目されたい。本発明の例示的な実施形態においては、この修正は、最初に、DP_TARGET、BYP_A、BYP_C、およびＳＬ１に基づいてなされる。ラウンダが増分されたか又は切り捨てされたかが分かると、そのときは、ＡＮＤゲートがこの修正を抑制又は伝送する。丸め修正ブロック１８０は、２経路のＡＮＤゲートが後に続く１２経路のマルチプレクサとして実施することができる。
【００４２】
図３は、丸められておらず、かつ正規化されていない中間の結果を提供するために本発明の例示的な実施形態に使用することのできる例示的なノーマライザ１６０のブロック図である。ノーマライザ１６０は、ＬＺＡ１８２からの入力、加算器１５０からの高位の加数、および該加算器１５０からの加算器の結果を受け取る。本発明の例示的な実施形態においては、ＬＺＡ１８２の結果、左シフトの推定が８ビット・ワードに格納される。ブロック１６０ａは、ＬＺＡ１８２からの結果ワードの最初の３ビットにおける値に応じて、３２、６４、９６、１２８、および１６０ビットだけ加算器の結果を左シフトする。ブロック１６０ｂは、ＬＺＡ１８２からの結果ワードのビット４および５における値に応じて、０、８、１６、又は２４ビットだけ加算器の結果を左シフトする。ブロック１６０ｃは、ＬＺＡ１８２からの結果ワードの最後の３ビットにおける値に応じて、０、１、２、３、４、５、６、又は７ビットだけ加算器の結果を左シフトする。ブロック１６０ｄは、最上位ビット（ＭＳＢ）の値に応じて、加算器の結果を０又は１ビット左シフトする。ＭＳＢがゼロに等しい場合には、結果は１ビット左シフトされる必要があり、或いは別の場合には、この結果は、どのようなさらに別のシフティングをも要求しない。ノーマライザ１６０からの出力は、ＳＬ１インジケータおよび正規化出力を含む。図３は、さらに、最後の１ビット・シフトの前に出力される、正規化されていない中間の結果Ｕ１を示す。さらに、図３は、第３のシフトの前に出力される、正規化されていない、より早期の中間の結果Ｕ２を示し、これは、ノーマライザのどのようなステージもオペランド・レジスタ１１０、１１１、および１１２にフィードバックされることを可能にするための本発明の変形態様である。
【００４３】
図４は、丸められておらず、かつ正規化されていない中間の結果を提供するために、本発明の例示的な実施形態に実行することのできるオペランド・ラッチ・マスキング処理のフロー図である。図４における処理は、Ａ１レジスタ１１１、Ｂ１レジスタ１１０、およびＣ１レジスタ１１２の各々によって使用して、これらのレジスタの各々における仮数の値を求めることができる。ブロック４０２は、レジスタへの入力データが、Ｕ１、ノーマライザ１６０からの正規化されていない結果である場合に利用される。レジスタ・データにＳＬ１が要求される場合には、余剰ビットをレジスタ・データと共に送られなければならない。ビット０から２２は、変更された正規化された出力と表示が付されたブロック４０２の出力に伝えられる。データが倍精度数を含む場合には、ビット２３が変更された正規化された出力に伝えられ、或いは別の場合には、ビット２３がゼロにリセットされる。また、データが単精度であり、ＳＬ１がデータ上で生じるべき場合には、ビット２３は変更された正規化された出力に伝えられ、或いは別の場合には、ビット２３はゼロにリセットされる。データが倍精度であり、ＳＬ１がデータ上で発生するべき場合、ビット５３は変更された正規化出力に伝えられ、或いは別の場合には、ビット５３はゼロにリセットされる。
【００４４】
変更された正規化された出力は、ブロック４０４に入力される。ブロック４０４に対する別の入力は、レジスタ・ファイルからのデータの右にゼロの値が追加された、５４番目のビットをもつレジスタ・ファイルからのデータである。さらに、ブロック４０４に対する入力は、丸められた結果のデータ又はラウンダ１７０からのラウンダ・データである。ここでも、追加されたゼロの値をもつ５４番目のビットが、ラウンダのデータの右に追加される。ブロック４０４は、ブロック４０６で、Ａ１レジスタ１１１、Ｂ１レジスタ１１０、又はＣ１レジスタに入力するために、これら３つの値の間で選択する３経路のマルチプレクサである。この処理はレジスタの各々に対して実行される。
【００４５】
図５は、本発明の例示的な実施形態に使用することのできる、遅延されたＳＬ１をもつ例示的で任意的なラウンダ１７０ａのブロック図である。ラウンダ１７０ａは、ノーマライザ１６０から、部分的に正規化された出力Ｕ１とＳＬ１インジケータとを受け取る。さらに、ラウンダ１７０ａへの入力は、最下位ビットＬ、保護ビットＧ、およびスティッキー・ビットＳであり、これは、中間結果が不正確であるかどうかを表し、結果が単精度フォーマットであるか、又は倍精度フォーマットであるかの表示である。ラウンダ１７０ａは、部分的に正規化された出力について、全ての可能性のある組み合わせ、すなわち、倍精度ＳＬ１の切り捨て、倍精度ＳＬ１の切り捨てなし、倍精度ＳＬ１の増分、倍精度ＳＬ１の増分なし、単精度ＳＬ１の切り捨て、単精度ＳＬ１の切り捨てなし、単精度ＳＬ１の増分、単精度ＳＬ１の増分なし、を生成する。ＳＬ１インジケータの値および丸め処理表における情報に基づいて、マルチプレクサは、可能性のある組み合わせのリストから値を１つ選択する。
【００４６】
図６は、丸められておらず、かつ正規化されていない中間の結果を提供するために、本発明の例示的な実施形態に実行することのできるオペランド・ラッチ・マスキング処理のフロー図である。このフローは、シフティング処理において、早い時期から非正規化出力に適用されることを除いては（例えば、図４のＵ２）、図４において参照し、説明されたフローと同様である。
【００４７】
本発明の能力は、ソフトウェア、ファームウェア、ハードウェア、又はそのいくつかの組み合わせにより実施できる。
【００４８】
一例として、本発明の１つの又は２つ以上の態様を、例えば、コンピュータ使用可能媒体を有する製品（例えば、１つ又は２つ以上のコンピュータ・プログラム）に含むことができる。媒体は、例えば、本発明の能力を提供し、容易にするためのコンピュータ可読プログラム・コード手段をそこに組み入れている。この製品は、コンピュータ・システムの一部として含んでもよいし、或いは、別々に販売してもよい。
【００４９】
さらに、機械によって可読であり、本発明の能力を実行するために、該機械によって実行可能な少なくとも１つの命令プログラムを実体的に具体化する、少なくとも１つのプログラム格納装置を提供することができる。
【００５０】
ここに示されるフロー図は、実施例に過ぎない。本発明の精神から離れることなく、ここに説明されるこれらの線図又はステップ（又は演算）に対して、多くの変形態様が存在することができる。例えば、ステップを異なる順序で実行してもよいし、或いは、ステップを追加し、削除し、或いは、変更してもよい。これら全ての変形態様は特許請求される本発明の一部と考えられる。
【００５１】
本発明は、例示的な実施形態を参照して説明されたが、本発明の範囲から離れることなく種々の変更を行うことができ、等価物をその要素に対して代用できることが、当業者には理解されるであろう。さらに、その本質的な範囲から離れることなく、特定の状況又は材料を本発明の教示に適応させるように、多くの修正を行うことができる。したがって、本発明は、本発明を実行するために想定される最善のモードとして開示される特定の実施形態に限定されるものではなく、本発明は、添付の特許請求の範囲内にある全ての実施形態を含むことが意図される。さらに、第１、第２などの用語の使用は、どのような順序又は重要性も示すものではなく、むしろ、第１、第２などの用語は、１つの要素を別のものと区別するのに用いられる。
【図面の簡単な説明】
【００５２】
【図１】本発明の例示的な実施形態に使用することのできる例示的な浮動小数点ユニット（ＦＰＵ）のブロック図である。
【図２】本発明の例示的な実施形態に使用することのできる桁上げ保存加算器の一例を示す。
【図３】本発明の例示的な実施形態に使用することのできる例示的なノーマライザのブロック図である。
【図４】本発明の例示的な実施形態に実行することのできるオペランド・ラッチ・マスキング処理のフロー図である。
【図５】本発明の例示的な実施形態に使用することのできる遅延１シフトをもつ任意的な例示的ラウンダ設計のブロック図である。
【図６】本発明の例示的な実施形態に実行することのできるオペランド・ラッチ・マスキング処理のフロー図である。
【符号の説明】
【００５３】
１００：レジスタ・ファイルからのデータ
１１０：Ｂ１レジスタ
１１１：Ａ１レジスタ
１１２：Ｃ１レジスタ
１２０：指数差
１２２：Ｂ２レジスタ
１２４：アライナ
１２６：Ｂ３レジスタ
１３０：ブース・デコード
１３２：ブース・マルチプレクサ
１３４：カウンタ・ツリー／部分積縮小ブロック
１４０：３：２カウンタ
１５０：加算器
１６０：ノーマライザ
１７０：ラウンダ
１８０：丸め修正
【図１】
2006221622.tif 000006
【図２】
2006221622.tif 000007
【図３】
2006221622.tif 000008
【図４】
2006221622.tif 000009
【図５】
2006221622.tif 000010
【図６】
2006221622.tif 000011