(57)【特許請求の範囲】
【請求項１】
マイクロプロセッサにおいて形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するための方法であって、Ａ、Ｂ、及びＣは入力オペランドであり、ＣがＡとＢとの積に累算される前に丸めは生じず、当該方法は、
前記融合積和演算を、第１及び第２の積和サブ演算に分割するステップと、
前記第１の積和サブ演算において、（ｉ）ＡとＢとの部分積をＣと累算するか、又は（ｉｉ）ＡとＢとの部分積のみを累算するかを選択し、前記（ｉ）又は（ｉｉ）の場合の累算の結果から丸められていない非冗長和を生成するステップと、
前記丸められていない非冗長和の複数のＭＳＢから、丸められていない非冗長中間結果ベクトルを生成するステップ；
前記丸められていない非冗長和から除外された複数のＬＳＢから１つ以上の丸めインジケータを生成するステップ；
前記第１の積和サブ演算がＣを累算することなく前記丸められていない非冗長和を生成した場合に、前記第２の積和サブ演算において、Ｃを、前記丸められていない非冗長中間結果ベクトルと累算するステップと、
前記（ｉ）の場合に得られる前記丸められていない非冗長和又は前記（ｉｉ）の場合に前記第２の積和サブ演算で得られる非冗長和に基づいて前記丸めインジケータを利用することにより、前記融合積和演算の最終的な丸められた結果を生成するステップと、
を含む方法。
【請求項２】
前記第１の積和サブ演算と第２の積和サブ演算との間に、前記丸められていない非冗長和をメモリに記憶し、及び／又は前記丸められていない非冗長和を第１の命令実行ユニットから第２の命令実行ユニットに転送するステップ
をさらに含む請求項１に記載の方法。
【請求項３】
複数の計算制御インジケータをメモリに記憶するステップ、及び／又は複数の計算制御インジケータを第１の命令実行ユニットから第２の命令実行ユニットに転送するステップをさらに含む、請求項１又は２に記載の方法。
【請求項４】
前記メモリは、前記第１及び第２の命令実行ユニットの外部にあり、前記丸められていない非冗長和を記憶する結果ストアと、前記第２の積和サブ演算におけるその後の計算がどのように進行すべきかを指示するように前記ＡとＢとの部分積に付随して生成される複数の計算制御インジケータを記憶する、前記結果ストアと区別される計算制御インジケータ・ストアとを備える、請求項２又は３に記載の方法。
【請求項５】
前記計算制御インジケータは、前記丸められていない非冗長和から算術的に正しい丸められた結果を生成するためのものである、請求項３又は４に記載の方法。
【請求項６】
形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するように動作可能なマイクロプロセッサであって、Ａ、Ｂ、及びＣは入力オペランドであり、ＣがＡとＢとの積に累算される前に丸めは生じず、当該マイクロプロセッサは、
融合積和演算の第１及び第２の積和サブ演算を実行するように構成された２つ以上の命令実行ユニット
を備え、前記第１の積和サブ演算において、（ｉ）ＡとＢとの部分積をＣと累算すること、又は（ｉｉ）ＡとＢとの部分積のみを累算することの間で選択が行われ、前記（ｉ）又は（ｉｉ）の場合の累算の結果から、丸められていない非冗長和が生成され、
前記丸められていない非冗長和の複数のＭＳＢから、丸められていない非冗長中間結果ベクトルが生成され、
前記丸められていない非冗長和から除外された複数のＬＳＢから１つ以上の丸めインジケータが生成され、
前記第１の積和サブ演算がＣを累算することなく前記丸められていない非冗長和を生成した場合に、前記第２の積和サブ演算において、Ｃは、前記丸められていない非冗長中間結果ベクトルと累算され、
前記（ｉ）の場合に得られる前記丸められていない非冗長和又は前記（ｉｉ）の場合に前記第２の積和サブ演算で得られる非冗長和に基づいて丸めインジケータを利用することにより、前記融合積和演算の最終的な丸められた結果が生成される、
マイクロプロセッサ。
【請求項７】
前記第１の積和サブ演算によって生成された前記丸められていない非冗長和を記憶するための、前記２つ以上の命令実行ユニットの外部のメモリ、をさらに備え、前記メモリは、前記第２の積和サブ演算が実行中になるまで無期限に前記丸められていない非冗長和を記憶するように構成され、これにより、前記２つ以上の命令実行ユニットが前記第１の積和サブ演算と前記第２の積和サブ演算との間に前記融合積和演算に無関係の他の演算を実行することを可能にする、請求項６に記載のマイクロプロセッサ。
【請求項８】
前記メモリは、前記丸められていない非冗長和を記憶する結果ストアと、前記第２の積和サブ演算におけるその後の計算がどのように進行すべきかを指示するように前記ＡとＢとの積に付随して生成される複数の計算制御インジケータを記憶する、前記結果ストアと区別される計算制御インジケータ・ストアとを備える、請求項７に記載のマイクロプロセッサ。
【請求項９】
前記２つ以上の命令実行ユニットは、前記第１の積和サブ演算を実行するように構成された乗算器と、前記第２の積和サブ演算を実行するように構成された加算器とを備える、請求項７又は８に記載のマイクロプロセッサ。
【請求項１０】
マイクロプロセッサにおいて形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するための方法であって、Ａ、Ｂ、及びＣは入力オペランドであり、当該方法は、
少なくともＡとＢとの積を計算し、丸められていない非冗長中間結果ベクトルを生成するための第１命令を、前記マイクロプロセッサの第１の実行ユニットにディスパッチするステップであって、前記第１の実行ユニットにおいて、（ｉ）ＡとＢとの部分積をＣと累算するか、又は（ｉｉ）ＡとＢとの部分積のみを累算するかを選択し、前記（ｉ）又は（ｉｉ）の場合の累算の結果から丸められていない非冗長和を生成し、前記丸められていない非冗長和の複数のＭＳＢから、丸められていない非冗長中間結果ベクトルを生成し、前記丸められていない非冗長和から除外された複数のＬＳＢから１つ以上の丸めインジケータを生成するステップと、
前記（ｉ）の場合に得られる前記丸められていない非冗長和と前記（ｉｉ）の場合に得られる丸められていない非冗長中間結果ベクトルとを受け取り、前記丸めインジケータを利用することにより、±Ａ＊Ｂ±Ｃの最終的な丸められた結果を生成するための第２命令を、前記マイクロプロセッサの第２の実行ユニットにディスパッチするステップと、
±Ａ＊Ｂ±Ｃの前記最終的な丸められた結果を保存するステップと、
を含む方法。
【請求項１１】
前記丸められていない非冗長中間結果ベクトルを前記第１の実行ユニットから前記第２の実行ユニットに転送するステップ、及び／又は前記計算の丸められていない結果を複数の実行ユニットの間で共有される共有メモリに保存するステップ、をさらに含む請求項１０に記載の方法。
【請求項１２】
前記第１の実行ユニットが、前記第２の実行ユニットにおけるその後の計算がどのように進行すべきかを指示するように前記ＡとＢとの積に付随して生成される１つ以上の計算制御インジケータを生成するステップであって、前記第１の実行ユニットは、少なくともＡとＢとの積の前記計算及び前記丸められていない非冗長中間結果ベクトルの前記生成に付随的に前記１つ以上の計算制御インジケータを生成する、ステップと、
前記第２の実行ユニットが前記１つ以上の計算制御インジケータを受け取り、前記丸められていない結果及び前記計算制御インジケータを使用して前記最終的な丸められた結果を生成するステップと、
をさらに含む請求項１０又は１１に記載の方法。
【請求項１３】
マイクロプロセッサにおいて形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するための方法であって、Ａ、Ｂ、及びＣは入力オペランドであり、当該方法は、
少なくともＡとＢとの積を計算し、丸められていない非冗長中間結果ベクトルを生成するための第１命令を、前記マイクロプロセッサの第１の実行ユニットにディスパッチするステップであって、前記第１の実行ユニットにおいて、（ｉ）ＡとＢとの部分積をＣと累算するか、又は（ｉｉ）ＡとＢとの部分積のみを累算するかを選択し、前記（ｉ）又は（ｉｉ）の場合の累算の結果から丸められていない非冗長和を生成し、前記丸められていない非冗長和の複数のＭＳＢから、丸められていない非冗長中間結果ベクトルを生成し、前記丸められていない非冗長和から除外された複数のＬＳＢから１つ以上の丸めインジケータを生成するステップと、
前記融合積和演算のその後の計算がどのように進行すべきかを指示するように前記ＡとＢとの積に付随して生成される計算制御インジケータを生成するステップと、
前記（ｉ）の場合に得られる前記丸められていない非冗長和と前記（ｉｉ）の場合に得られる丸められていない非冗長中間結果ベクトル及び計算制御インジケータを受け取る第２命令を、前記マイクロプロセッサの第２の実行ユニットにディスパッチし、前記計算制御インジケータ及び前記丸めインジケータに従って±Ａ＊Ｂ±Ｃの最終的な丸められた結果を生成するステップと、
を含む方法。
【請求項１４】
前記計算制御インジケータは、前記第１の実行ユニットがＣをＡとＢとの積に累算したか否かの指示を含む、請求項１３に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本出願は、２０１４年７月２日に申請され「Ｎｏｎ−Ａｔｏｍｉｃ  Ｓｐｌｉｔ−Ｐａｔｈ  Ｆｕｓｅｄ  Ｍｕｌｔｉｐｌｙ−Ａｃｃｕｍｕｌａｔｅ  ｗｉｔｈ  Ｒｏｕｎｄｉｎｇ  ｃａｃｈｅ」と題された米国仮特許出願第６２／０２０，２４６号及び２０１５年６月１０日に申請され「Ｎｏｎ−Ａｔｏｍｉｃ  Ｔｅｍｐｏｒａｌｌｙ−Ｓｐｌｉｔ  Ｆｕｓｅｄ  Ｍｕｌｔｉｐｌｙ−Ａｃｃｕｍｕｌａｔｅ  Ａｐｐａｒａｔｕｓ  ａｎｄ  Ｏｐｅｒａｔｉｏｎ  Ｕｓｉｎｇ  ａ  Ｃａｌｃｕｌａｔｉｏｎ  Ｃｏｎｔｒｏｌ  Ｉｎｄｉｃａｔｏｒ  Ｃａｃｈｅ  ａｎｄ  Ｐｒｏｖｉｄｉｎｇ  ａ  Ｓｐｌｉｔ−Ｐａｔｈ  Ｈｅｕｒｉｓｔｉｃ  ｆｏｒ  Ｐｅｒｆｏｒｍｉｎｇ  ａ  Ｆｕｓｅｄ  ＦＭＡ  Ｏｐｅｒａｔｉｏｎ  ａｎｄ  Ｇｅｎｅｒａｔｉｎｇ  ａ  Ｓｔａｎｄａｒｄ  Ｆｏｒｍａｔ  Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ」と題された米国仮特許出願第６２／１７３，８０８号の利益を主張するものであり、上記出願の双方が本明細書において参照により援用される。
【０００２】
本出願は、さらに、すべて２０１５年６月２４日に申請された下記の関連出願の優先権を主張し、参照により援用する：「Ｔｅｍｐｏｒａｌｌｙ  Ｓｐｌｉｔ  Ｆｕｓｅｄ  Ｍｕｌｔｉｐｌｙ−Ａｃｃｕｍｕｌａｔｅ  Ｏｐｅｒａｔｉｏｎ」と題された米国特許出願第１４／７４８，８７０号、「Ｃａｌｃｕｌａｔｉｏｎ  Ｃｏｎｔｒｏｌ  Ｉｎｄｉｃａｔｏｒ  Ｃａｃｈｅ」と題された米国特許出願第１４／７４８，９２４号、「Ｃａｌｃｕｌａｔｉｏｎ  Ｃｏｎｔｒｏｌ  Ｉｎｄｉｃａｔｏｒ  Ｃａｃｈｅ」と題された米国特許出願第１４／７４８，９５６号、「Ｓｔａｎｄａｒｄ  Ｆｏｒｍａｔ  Ｉｎｔｅｒｍｅｄｉａｔｅ  Ｒｅｓｕｌｔ」と題された米国特許出願第１４／７４９，００２号、「Ｓｐｌｉｔ−Ｐａｔｈ  Ｈｅｕｒｉｓｔｉｃ  ｆｏｒ  Ｐｅｒｆｏｒｍｉｎｇ  ａ  Ｆｕｓｅｄ  ＦＭＡ  Ｏｐｅｒａｔｉｏｎ」と題された米国特許出願第１４／７４９，０５０号、「Ｓｕｂｄｉｖｉｓｉｏｎ  ｏｆ  ａ  ｆｕｓｅｄ  ｃｏｍｐｏｕｎｄ  ａｒｉｔｈｍｅｔｉｃ  ｏｐｅｒａｔｉｏｎ」と題された米国特許出願第１４／７４９，０８８号、及び「Ｎｏｎ−ａｔｏｍｉｃ  Ｓｐｌｉｔ−Ｐａｔｈ  Ｆｕｓｅｄ  Ｍｕｌｔｉｐｌｙ−Ａｃｃｕｍｕｌａｔｅ」と題された米国特許出願第１４／７４８，８１７号。
【０００３】
本出願は、算術演算を実行するためのマイクロプロセッサ設計、より具体的には、融合ＦＭＡ演算に関する。
【背景技術】
【０００４】
現代的なコンピュータの設計では、融合浮動小数点積和（ＦＭＡ）計算は、少なくとも１９９０年頃と早くから大きな商業的な関心を集めた及び学術研究の一分野であった。融合ＦＭＡ計算は、±Ａ＊Ｂ±Ｃの形式の算術演算であり、これにおいて、Ａ、Ｂ、及びＣは、浮動小数点入力オペランド（それぞれ、被乗数、乗数、及びアキュムレータ）であり、ＣがＡとＢとの積に累算される前に丸めは行われない。記法±Ａ＊Ｂ±Ｃは、限定はしないが、（ａ）Ａ＊Ｂ＋Ｃ、（ｂ）Ａ＊Ｂ−Ｃ、（ｃ）−Ａ＊Ｂ＋Ｃ、（ｄ）−Ａ＊Ｂ−Ｃ、（ｅ）Ａ＊Ｂ（すなわち、Ｃは０に設定される）、及び（ｆ）Ａ＋Ｃ（すなわち、Ｂは１．０に設定される）を含む。
【０００５】
１９９０年頃にＩＢＭのＲＩＳＣ  Ｓｙｓｔｅｍ／６０００は、この算術機能の初期の商業的実装をアトミック、すなわち、不可分計算として提供した。その後の設計で、ＦＭＡ計算を最適化した。
【０００６】
その２００４年の論文「Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ−Ｆｕｓｅｄ  ｗｉｔｈ  Ｒｅｄｕｃｅｄ  Ｌａｔｅｎｃｙ」において、著者のＴｏｍａｓ  Ｌａｎｇ及びＪａｖｉｅｒ  Ｄ．  Ｂｒｕｇｕｅｒａ（「Ｌａｎｇら」）は、最適化されたＦＭＡ設計に関係するいくつかの重要な態様を教示しており、これには、指数差及びアキュムレータ・シフト／アライン量の事前計算と、乗算アレイと並列のアキュムレータのアライメントと、必要時の２の補数アキュムレータの使用と、Ｓｕｍ＆Ｃａｒｒｙベクトルの条件付き反転と、最終加算／丸めモジュールの前のＳｕｍ＆Ｃａｒｒｙベクトルの正規化と、正規化シフトとのＬＺＡ／ＬＯＡの重複演算（overlapping  operation）と、桁上げ、丸め、ガード、及びスティッキー・ビットの別個計算と、統合加算／丸めモジュール（unified  add/round  module）における１ｍ幅（ここで、ｍはいくつかあるオペランドのうちの１つのオペランドの仮数の幅である）を有するデュアル和加算器（dual  sum  adder）の使用とを含む。
【０００７】
その２００５年の論文「Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ｆｕｓｅｄ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ：  Ｒｅｄｕｃｅｄ  Ｌａｔｅｎｃｙ  ｆｏｒ  Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ａｄｄｉｔｉｏｎ」において、著者のＴｏｍａｓ  Ｌａｎｇ及びＪａｖｉｅｒ  Ｄ．  Ｂｒｕｇｕｅｒａ（「ＬａｎｇらＩＩ」）は、アライメントを正規化ケースから分離する分割（又は二重）データ経路の使用を教示しており、これにおいて、「近接」データ経路（close  data  path）は、｛２，１，０，−１｝の間の指数差での実効減算に使用され（詳細な説明においてさらに発展させ、著しく改良された概念）、「遠隔」データ経路（far  data  path）は、残りすべてのケースに対して使用された。ＬａｎｇらＩＩは、さらに、乗算アレイの桁上げ保存出力に対する遠隔データ経路内のデュアル・アライメント・シフターと近接データ経路内の非常に制限されたアライメント・シフトとの使用を教示した。
【０００８】
２００４年の論文「Ｍｕｌｔｉｐｌｅ  Ｐａｔｈ  ＩＥＥＥ  Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ｆｕｓｅｄ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ」では、著者のＰｅｔｅｒ−Ｍｉｃｈａｅｌ  Ｓｅｉｄｅｌ（「Ｓｅｉｄｅｌ」）は、ＦＭＡ設計への他の機能強化が、複数の並列計算経路を考慮することによって実現され得ることを教示した。Ｓｅｉｄｅｌは、さらに、使用されていない経路上のゲートの非活性化と、指数差及び実効演算からの複数の計算経路の決定と、２つの区別できる計算経路であって、一方はマス・キャンセル（mass  cancellation）が生じ得る小さい指数差に対するものであり、もう一方は他のすべてのケースに対するものである、計算経路の使用と、実効減算との小さな指数差に対応するケースについての、大きな積計算へのアキュムレータ値の挿入とを教示した。
【０００９】
広範なメディア配信及びインターネット・コンテンツ・アクセスを提供する個人用ポータブル・コンピューティング・デバイスの今日の遍在は、より安価に生産でき、消費電力及びエネルギーが著しく少ない、且つ命令の結果のより高いスループットを可能にするＦＭＡロジックを設計するなおいっそうの努力を要求する。
【００１０】
ＦＭＡ演算を実行する支配的なアプローチは、統合積和ユニットを使用して、結果の丸めを含む、ＦＭＡ演算全体を実行することを伴う。大半の学術的な提案及び商業的な実装では、一般的に、２つの数を乗算し、丸められていない積を第３のオペランド、加数又はアキュムレータに加算し、その結果を丸める能力を有するモノリシックな、又はアトミックな機能ユニットを記述する。
【００１１】
代替的アプローチでは、従来の乗算ユニットを使用して、Ａ＊Ｂサブ演算を実行し、次いで、従来の加算ユニットを使用して、ＣをＡとＢとの積に累算する。しかし、この従来の分割ユニット・アプローチでは、同じユニット内のＡとＢとの部分積とともにＣを累算することによって得られる可能性のある速度及び性能の向上を犠牲にする。従来の分割ユニット・アプローチは、２つの丸め演算も伴う。ＡとＢとの積が丸められ、次いで、ＡとＢとの積へのＣの累算が丸められる。したがって、従来の分割ユニット・アプローチは、ときには、統合アプローチと異なる、より精度の低い結果をもたらす。また、丸めを２回行う演算であるため、従来の分割ユニット・アプローチは、「融合」ＦＭＡ演算を実行することができず、浮動小数点算に対するＩＥＥＥ７５４技術規格に適合しない。
【００１２】
ＦＭＡハードウェアは、複数のコンピューティング目的に使用され、ＩＥＥＥ７５４への適合を可能にし得るので、コンピュータ設計者は、高い頻度で、現代的な製品において以前の乗算及び加算機能ユニットをアトミックＦＭＡ実行ユニットで丸ごと置き換えようとする。しかし、このアプローチには複数の不利益がある。
【００１３】
第１に、ＦＭＡハードウェアの実装コストは、一般的に、別個の乗算及び加算機能ユニットよりも高くなり、また実装も複雑になる。第２に、単純な加算又は乗算を実行したときに、ＦＭＡハードウェアを通るときの待ち時間が、別個の加算又は乗算機能ユニットよりも長くなり、また一般的に、より多くの電力を消費する。第３に、乗算及び加算機能を組み合わせて１つの機能ユニットにすると、スーパースカラー・コンピュータ・プロセッサ設計では、算術命令がディスパッチされ得る利用可能なポートの数を減らすことになり、それにより、コンピュータがソース・コード、又はマシン・レベルのソフトウェアにおける並列性を利用する能力を減じる。
【００１４】
この第３の不利益は、スタンドアロンの加算器機能ユニットなどの、より多くの機能ユニットを加えることによって対処できるが、これは実装コストをさらに押し上げる。本質的に、追加の加算器は（たとえば）、アトミックなＦＭＡの能力を提供する一方で、許容可能な命令レベル並列度（ＩＬＰ）を維持する価格となる。このことは、次いで、全体的な実装サイズの増加並びに寄生容量及び抵抗の増加の原因となる。半導体製造技術はより小さい形状に向かいつつあるので、この寄生容量及び抵抗は、算術計算のタイミング遅延又は待ち時間のより大きい原因となる。このタイミング遅延は、ときには、「長いワイヤ」に起因する遅延としてモデル化される。そのため、アトミックなＦＭＡ実装によるＩＬＰの縮小を補償するために別個の機能ユニットを追加することは、必要なダイ・スペース、電力消費量、及び算術計算の待ち時間に関するメリットの縮小をもたらす。
【００１５】
結果として、最良の提案及び実装は、一般的に（常にというわけではないが）、正しい算術結果（ＩＥＥＥ丸め及び他の仕様に関して）をもたらし、ときには、より高い命令スループットを発揮し、著しく多いハードウェア回路を必要とすることによって実装のコストを増加させ、より複雑なＦＭＡハードウェア上で単純な乗算又は加算計算を実行するための電力消費量を増やす。
【００１６】
現代的なＦＭＡ設計の組み合わされた目標は、不完全に果たされたままである。
【発明の概要】
【００１７】
一態様において、マイクロプロセッサにおいて形式±Ａ＊Ｂ±Ｃの融合積和演算（fused  multiply-accumulate  operation）を実行するための方法が提供され、Ａ、Ｂ、及びＣは入力オペランドであり、ＣがＡとＢとの積に累算される前に丸めは生じない。融合積和演算は、１つ以上の命令実行ユニットによって実行されるべき第１及び第２の積和サブ演算に分割される。第１の積和サブ演算では、ＡとＢとの部分積をＣと累算するか、又は代わってＡとＢとの部分積のみを累算するかと、そこから丸められていない非冗長和を生成するかとの選択が行われる。第１の積和サブ演算と第２の積和サブ演算との間に、丸められていない非冗長和がメモリに記憶され、１つ以上の命令実行ユニットが積和演算に無関係の他の演算を実行することを可能にする。代替的に、又はそれに加えて、丸められていない非冗長和は、第１の命令実行ユニットから第２の命令実行ユニットに転送される。
【００１８】
第２の積和サブ演算において、Ｃは、丸められていない非冗長和と、第１の積和サブ演算がＣを累算することなく丸められていない非冗長和を作り出した場合に累算される。第２の積和サブ演算において、最終的な丸められた結果が、融合積和演算から生成される。
【００１９】
一実装において、１つ以上の命令実行ユニットは、第１の積和サブ演算を実行するように構成された乗算器と、第２の積和サブ演算を実行するように構成された加算器とを備える。
【００２０】
一実装において、複数の計算制御インジケータがメモリに記憶され、及び／又は第１の命令実行ユニットから第２の命令実行ユニットに転送される。計算制御インジケータは、第２の積和サブ演算におけるその後の計算がどのように進行すべきかを指示する。これらのインジケータのうちの１つは、Ｃとの累算が第１の積和サブ演算において生じたかを指示する。これらのインジケータのうちのいくつかは、算術的に正しい丸められた結果が丸められていない非冗長和から生成されることを可能にする。
【００２１】
メモリは、１つ以上の命令実行ユニットの外部にあり、また共有される。メモリは、丸められていない非冗長和を記憶するための、リオーダ・バッファなどの、結果ストアと、第２の積和サブ演算におけるその後の計算がどのように進行すべきかを指示する複数の計算制御インジケータを記憶する、結果ストアと区別できるアソシアティブ・キャッシュなどの、計算制御インジケータ・ストアとを備える。結果ストアは、結果バスに結合され、結果バスは１つ以上の命令実行ユニットに共通である。計算制御インジケータ・ストアは、結果バスに結合されず、第１の又は第２の積和サブ演算を実行するように構成された実行ユニットによってのみ共有される。
【００２２】
前述の構成は、積和演算が２つの時間的に区別できるサブ演算に分割されることを可能にする。命令実行ユニットは、第１の積和サブ演算の実行と第２の積和サブ演算の実行との間に、積和演算に無関係の他の演算を実行することができる。
【００２３】
別の態様では、上で説明されている方法を実装するためにマイクロプロセッサが用意される。マイクロプロセッサは、融合積和演算の第１及び第２の積和サブ演算を実行するように構成された１つ以上の命令実行ユニットを備える。第１の積和サブ演算の間、ＡとＢとの部分積とＣとの累算又はＡとＢとの部分積のみの累算の間で選択が行われ、その選択に従って、丸められていない非冗長和が生成される。第２の積和サブ演算の間、Ｃは、条件付きで、第１の積和サブ演算がＣを累算することなく丸められていない非冗長和を作り出した場合に、丸められていない非冗長和と累算される。最後に、融合積和演算の完全な丸められた結果が、Ｃと条件付き累算された丸められていない非冗長和から生成される。
【００２４】
一実装において、マイクロプロセッサは、第１の積和サブ演算によって生成された丸められていない非冗長和を記憶するための、１つ以上の命令実行ユニットの外部のメモリをさらに備え、該メモリは、第２の積和サブ演算が実行中になる（in  play）まで無期限に丸められていない非冗長和を記憶するように構成され、これにより、１つ以上の命令実行ユニットが、第１の積和サブ演算と第２の積和サブ演算との間に、積和演算に無関係の他の演算を実行することを可能にする。
【００２５】
別の態様では、マイクロプロセッサにおいて形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するための方法が提供され、ここで、Ａ、Ｂ、及びＣは入力オペランドである。第１の実行ユニットは、少なくともＡとＢとの積を計算するように選択される。計算の丸められていない非冗長中間結果ベクトルが、複数の実行ユニットの間で共有される共有メモリに保存され、且つ／或いは第１の実行ユニットから第２の実行ユニットに転送される。第２の実行ユニットは、共有メモリから丸められていない非冗長中間結果ベクトルを受け取り、±Ａ＊Ｂ±Ｃの最終的な丸められた結果を生成するように選択される。最後に、±Ａ＊Ｂ±Ｃの最終的な丸められた結果が保存される。
【００２６】
一実装において、第１の実行ユニットは、第２の実行ユニットにおけるその後の計算がどのように進行すべきかを指示する１つ以上の計算制御インジケータを生成する。第１の実行ユニットは、少なくともＡとＢとの積の計算及び丸められていない非冗長中間結果ベクトルの生成に付随的に（concomitantly）計算制御インジケータを生成する。この後、第２の実行ユニットは、メモリから１つ以上の計算制御インジケータを受け取り、丸められていない非冗長中間結果ベクトル及び計算制御インジケータを使用して最終的な丸められた結果を生成する。
【００２７】
別の実装では、マイクロプロセッサは、少なくともＡとＢとの積についての第１の実行ユニットの計算から１つ以上の丸めインジケータを生成し、１つ以上の丸めインジケータを共有メモリに保存する。この後、第２の実行ユニットは、メモリから１つ以上の丸めインジケータを受け取り、丸められていない非冗長中間結果ベクトル及び１つ以上の丸めインジケータを使用して最終的な丸められた結果を生成する。
【００２８】
別の態様では、形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するための方法が提供され、ここで、Ａ、Ｂ、及びＣは入力オペランドである。この方法は、少なくともＡとＢとの積を計算し、丸められていない非冗長中間結果ベクトルを生成するように第１の実行ユニットを選択するステップと、積和サブ演算のその後の計算がどのように進行すべきかを指示するための計算制御インジケータを保存し、及び／又は転送するステップと、中間結果ベクトル及び計算制御インジケータを受け取るように第２の実行ユニットを選択するステップと、計算制御インジケータに従って±Ａ＊Ｂ±Ｃの最終的な丸められた結果を生成するステップとを含む。
【００２９】
一実装において、計算制御インジケータは、第１の実行ユニットがＣをＡとＢとの積に累算したかの指示を含む。別の実装では、計算制御インジケータは、中間結果ベクトルから算術的に正しい丸められた結果を生成するためのインジケータを含む。
【００３０】
一態様において、中間結果ベクトルを生成し、複数の計算制御インジケータを付随的に生成するように動作可能である命令実行ユニットを備えるマイクロプロセッサが提供される。計算制御インジケータは、中間結果ベクトルから最終結果を生成するためのその後の計算がどのように進行すべきかを指示し、これらのインジケータのうちの少なくとも一部は、中間結果ベクトルの計算及び／又は生成から、また計算及び／又は生成の間に導出される。マイクロプロセッサは、中間結果ベクトル及び複数の計算制御インジケータを記憶する、命令実行ユニットの外部にある記憶装置をさらに備える。
【００３１】
一実装において、命令実行ユニットは、３つ以上のオペランド入力を有して構成される算術処理ユニットである。さらに、中間結果ベクトルは、複合算術演算の第１の算術演算の、オペランド入力のうちの少なくとも２つへの適用から生成される。複数の計算制御インジケータは、複合算術演算の第２の算術演算子を使用して、複合算術演算の第２の算術演算がどのように進行すべきかを指示する。
【００３２】
一実装において、複合算術演算は、順次算術演算である。より具体的な一実装において、第１及び第２の算術演算子は、加算、減算、乗算、及び除算からなる群から選択される、基本算術演算子である。なおいっそう具体的な一実装において、複合算術演算は、積和演算であり、第１の算術演算は、少なくとも、被乗数オペランドと乗数オペランドとの乗算であり、第２の算術演算は、被乗数オペランドと乗数オペランドとの積への累算オペランドの累算である。
【００３３】
一実装において、計算制御インジケータから離されていると考えられる、中間結果ベクトルは、複合算術演算の算術的に正しい表現を矛盾なく生成するために必要であるよりも少ないビットで表される。その一方で、複数の計算制御インジケータと組み合わされた、中間結果ベクトルは、複合算術演算の算術的に正しい表現を生成するために十分な情報を提供する。複合算術演算の算術的に正しい表現の定義は、有効桁においてターゲット・データ・サイズに低減された複合算術演算の無限精度計算のその結果によって生成されるであろう表現から区別不能なものである。
【００３４】
たとえば、中間結果ベクトルは、第１の算術演算の結果の最上位ビットからなる丸められていない切り捨てられた値であるものとしてよい。最下位ビットを切除すると、その結果、複合算術演算の正しく丸められた最終結果を作り出す上で本質的であり得る情報が失われる。この実装では、最下位ビットは、１つ以上の計算制御インジケータ−より具体的には、丸め制御インジケータ−に圧縮され、これは、中間結果ベクトルから算術的に正しい丸められた結果を生成するために十分な情報を提供する。
【００３５】
一実装において、記憶装置は、汎用記憶装置と計算制御インジケータ記憶装置とを備える。この２つの記憶装置は、汎用記憶装置が、命令結果を記憶するためにマイクロプロセッサの命令セットの大半の命令によってアクセス可能であるが、計算制御インジケータ記憶装置は、計算制御インジケータを記憶し又はロードするように動作可能な命令のみにアクセス可能であるという点で、区別可能である。
【００３６】
さらに、マイクロプロセッサは、結果バスと、結果バスとは別個であり区別できるデータ経路とを備える。結果バスは、命令実行ユニットから結果を汎用記憶装置に伝達する。データ経路は、命令実行ユニットと計算制御インジケータ記憶装置との間に延びて、計算制御インジケータを計算制御インジケータ記憶装置に記憶し、及び計算制御インジケータ記憶装置からロードすることを可能にする。
【００３７】
一実装において、計算制御インジケータは、複合算術演算のどれくらいが中間結果ベクトルを生成する際に完了しているかに関する情報を提供する。別の実装では、計算制御インジケータは、第１の算術演算がアンダーフロー状態又はオーバーフロー状態をもたらしたかに関する情報を提供する。
【００３８】
別の態様では、マイクロプロセッサにおいて算術演算を実行する方法が提供される。この方法は、命令実行ユニットを使用して、中間結果ベクトルと、中間結果ベクトルから最終結果を生成するためのその後の計算がどのように進行すべきかを指示する複数の計算制御インジケータとを生成するステップを含む。この方法は、中間結果ベクトル及び複数の計算制御インジケータを命令実行ユニットの外部のメモリに記憶するステップをさらに含む。
【００３９】
一実装において、この方法は、中間結果ベクトル及び複数の計算制御インジケータをメモリからロードするステップと、最終結果を生成するために計算制御インジケータに従って中間結果ベクトル上で計算を実行するステップとをさらに含む。
【００４０】
一実装において、算術演算は、複合又は順次算術演算である。別の実装では、算術演算は、少なくとも１つの乗算と少なくとも１つの累算とを伴う融合演算である。より具体的な一実装において、算術演算は、オペランドが被乗数と乗数とアキュムレータとを含む融合浮動小数点積和演算であり、中間結果ベクトルは、被乗数と乗数との少なくとも部分積の和である。
【００４１】
一実装において、この方法は、複合算術演算を、第１の算術オペランドを使用する第１の算術演算と第２の算術オペランドを使用する第２の算術演算とに分割するステップをさらに含む。計算制御インジケータは、第２の算術演算がどのように進行すべきかを指示し、複合算術演算のどれくらいが中間結果ベクトルを生成する際に完了しているかに関する情報を提供し、且つ／或いは第１の算術演算がアンダーフロー状態又はオーバーフロー状態をもたらしたかに関する情報を提供し得る。
【００４２】
一実装において、中間結果ベクトルは、初期結果（２ｍ以上のビットを有し得る）よりも少ないビット（たとえば、ｍビット）を有する。したがって、計算制御インジケータから離されていると考えられるときに、中間結果ベクトルは、複合算術演算の算術的に正しい表現を矛盾なく生成するために必要であるよりも少ない数のビットで表される。しかしながら、複数の計算制御インジケータと組み合わされた、中間結果ベクトルは、複合算術演算の算術的に正しい表現を生成するために十分な情報を提供する。
【００４３】
別の態様では、丸められていない結果と丸められていない結果を丸めるための複数の丸めインジケータとを生成するように構成された複数の命令実行ユニットを備えるマイクロプロセッサが提供される。マイクロプロセッサは、複数の丸めインジケータを記憶するように構成された、命令実行ユニットの外部にある丸めキャッシュをさらに備え、これは、アソシアティブ・キャッシュであってもよい。
【００４４】
一実装において、マイクロプロセッサは、複数の命令実行ユニットによって生成される丸められていない結果を記憶するための、丸めキャッシュから区別できる、汎用メモリ・ストアをさらに備える。より具体的な一実装において、マイクロプロセッサは、丸めビット転送経路と、丸めビット転送経路から区別できる結果バスとをさらに備え、命令実行ユニットは、丸められていない結果を結果バスに出力し、丸めビット転送経路上で丸めインジケータを丸めキャッシュに出力するように構成される。
【００４５】
一実装において、複数の命令実行ユニットのうちの少なくとも１つは、第１の型の命令に応答して丸められていない結果を、第２の型の命令に応答して丸められた結果を生成するように構成される。別の実装では、マイクロプロセッサは、（ａ）第１の命令実行ユニットによって生成された丸められていない結果を第２の命令実行ユニットに供給し、（ｂ）丸めキャッシュからの複数の丸めインジケータのうちの少なくとも１つを第２の命令実行ユニットに供給するように構成される。第２の命令実行ユニットは、少なくとも丸められていない結果オペランドに数学演算を実行して、複数の丸めインジケータのうち供給された少なくとも１つを使用して最終的な丸められた結果を生成するように構成される。
【００４６】
別の態様では、中間結果ベクトルと、中間結果ベクトルから最終結果を生成するためのその後の計算がどのように進行すべきかを指示する複数の計算制御インジケータとを生成するように動作可能な第１の命令実行ユニットを備えるマイクロプロセッサが実現される。マイクロプロセッサは、中間結果ベクトル及び複数の計算制御インジケータを第２の命令実行ユニットに転送するように構成された、命令実行ユニットの外部にある転送バスをさらに備える。一実装において、第１の命令実行ユニットは、第１の型の命令に応答して丸められていない結果を、第２の型の命令に応答して丸められた結果を生成するように構成される。
【００４７】
別の態様では、マイクロプロセッサにおいて丸め演算を実行するための方法が提供される。第１の命令実行ユニットは、丸められていない結果を生成する。次いで、少なくとも１つの丸めインジケータが、第１の命令実行ユニットの外部の丸めキャッシュ内に記憶される。第２の命令実行ユニットは、その後、丸められていない結果及び少なくとも１つの丸めインジケータを丸めキャッシュから読み出し、これらの入力と、場合により１つ以上の他のオペランドとから、最終的な丸められた結果を生成する。
【００４８】
一実装において、この方法は、丸められていない結果を、丸めキャッシュから区別できる汎用記憶装置内に記憶するステップをさらに含む。より具体的な一実装において、この方法は、複数の命令実行ユニットを汎用記憶装置に結合する結果バスとは別個であるデータ経路を通じて第１の命令ユニットから丸めキャッシュに１つの丸めインジケータを転送するステップをさらに含む。
【００４９】
別の態様では、マイクロプロセッサにおいて算術演算を実行する方法が提供される。第１の命令実行ユニットは、中間結果ベクトルと、中間結果ベクトルから最終結果を生成するためのその後の計算がどのように進行すべきかを指示する複数の計算制御インジケータとを生成する。中間結果ベクトル及び複数の計算制御インジケータは、次いで、第２の命令実行ユニットに転送される。次いで、第２の命令実行ユニットは、計算制御インジケータに従って最終結果を生成し、算術演算を完了する。
【００５０】
一実装において、算術演算は、複合算術演算である。より具体的な一実装において、複合算術演算は、融合型であり、融合型は最終結果を生成するために単一の丸めのみが許される型である。なおいっそう具体的な一実装において、算術演算は、融合積和演算であり、中間結果ベクトルは、積和演算の一部分の丸められていない結果であり、計算制御インジケータは、積和演算の最終的な丸められた結果を生成するための丸めインジケータを含む。
【００５１】
一実装において、中間結果ベクトルの転送は、結果バスを介して行われ、計算制御文字の転送は、結果バスから区別できるデータ経路を介して行われる。
【００５２】
一態様において、命令パイプラインと、共有メモリと、命令パイプライン内の第１及び第２の算術処理ユニットとを備えるマイクロプロセッサが提供され、各々が共有メモリからオペランドを読み出し、結果を共有メモリに書き込む。第１の算術処理ユニットは、数学演算の第１の部分を実行して、数学演算の完全な最終結果ではない中間結果ベクトルを作り出す。第１の算術処理ユニットは、中間結果ベクトルから最終結果を生成するためのその後の計算がどのように進行すべきかを指示する複数の非アーキテクチャ計算制御インジケータを生成する。第２の算術処理ユニットは、計算制御インジケータに従って、数学演算の第２の部分を実行して、数学演算の完全な最終結果を生成する。
【００５３】
一実装において、数学演算の第１の部分は、２つの入力オペランドの少なくとも乗算を含む。さらなる実装において、数学演算の第１の部分は、第１の２つの入力オペランド及び第３のオペランドの値が１つ以上の所定条件のセットの少なくとも１つを満足する場合に、第３のオペランドとの累算をさらに含む。そうでない場合、数学演算の第２の部分のみが、第３のオペランドとの累算を含む。最低限、数学演算の第２の部分は、丸めサブ演算を含む。
【００５４】
より具体的な一実装において、数学演算は、積和演算であり、マイクロプロセッサは、アトミックな統合積和命令を少なくとも第１及び第２のマイクロ命令に変換するトランスレータ又はＲＯＭをさらに備える。さらに、第１のマイクロ命令の実行は、中間結果ベクトルを生成し、第２のマイクロ命令の実行は、中間結果ベクトルを使用して完全な最終結果を生成する。
【００５５】
なおいっそう具体的な一実装において、数学演算は、形式±Ａ＊Ｂ±Ｃの融合浮動小数点積和（ＦＭＡ）演算であり、ここで、Ａ、Ｂ、及びＣは浮動小数点入力オペランドであり、ＣがＡとＢとの積に累算される前に丸めは生じない。
【００５６】
一実装において、中間結果ベクトルは、丸められていない値であり、完全な最終結果は、丸められた値である。さらに、計算制御インジケータは、第２の算術処理が中間結果ベクトルに数学演算の第２の部分を実行した後に正しく丸められた完全な最終結果を作り出すことを可能にするのに十分な情報を提供する丸めインジケータを含む。
【００５７】
一実装において、第１の算術処理ユニットは、中間結果ベクトルをレジスタに、計算制御インジケータを計算制御インジケータ・キャッシュに記憶し、第２の算術処理ユニットは、レジスタから中間結果ベクトルを、計算制御インジケータ・キャッシュから計算制御インジケータをロードする。別の実装では、マイクロプロセッサは、中間結果ベクトルを第２の算術処理ユニットに転送する。
【００５８】
別の態様では、マイクロプロセッサにおいて形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するための方法が提供され、Ａ、Ｂ、及びＣは入力オペランドである。オペランドＡとＢとの部分積の計算が行われる。丸められていない結果は、（ａ）オペランドＡとＢとの部分積か、又は（ｂ）オペランドＡとＢとの部分積とオペランドＣかの、いずれかの第１の累算から生成される。第１の累算が、オペランドＣを含む場合、この累算の前に、乗数ユニット部分積総和ツリー内のオペランドＣの選択的に補数をとられた仮数をアライメントする。
【００５９】
１つ以上の最下位ビットが、丸められていない結果から除外されて、丸められていない中間結果ベクトルを生成する。一実装において、丸められていない中間結果ベクトルは、融合積和演算のターゲット結果の仮数のビット数に等しいビット数を有する仮数を含む、浮動小数点数についての標準ＩＥＥＥ形式で表される。
【００６０】
より具体的な一実装において、丸められていない中間結果ベクトルは、中間仮数結果と、中間結果指数（ＩＲＥｘｐ）とを含み、ＩＲＥｘｐは、Ｃの指数とオペランドＡ及びＢの指数値の和の関数とのうち大きい方の正規化された表現である。丸められていない中間結果ベクトルは、第１の累算がオペランドＣを含んでいたかと、積和演算が実効減算であるかと、保留中である循環桁上げがないかとに応じて生成される中間符号インジケータをさらに含む。中間符号インジケータは、第１の累算がオペランドＣを含んでいたかと、積和演算が実効減算であるかと、保留中である循環桁上げがないかとに応じて生成される。
【００６１】
一実装において、この方法は、循環桁上げインジケータ（Ｅ）を生成するステップをさらに含む。第１の累算がオペランドＣを含んでいて、丸められていない中間結果ベクトルが正であり、累算が実効減算である場合、循環桁上げ補正が保留中であることを指示するＥに対する値が生成される。別の実装では、この方法は、ＩＲＥｘｐが表現可能な又は望ましい指数値の範囲を上回るか又は下回るかを指示するように中間アンダーフロー（Ｕ）指示及び中間オーバーフロー（Ｏ）指示を生成するステップをさらに含む。
【００６２】
丸められていない結果の除外される最下位ビットは、１つ以上の丸めインジケータに低減される。一実装において、１つ以上の丸めインジケータは、ガード（Ｇ）、ラウンド（Ｒ）、及び／又はスティッキー（Ｓ）ビットを含む。別の実装では、丸めインジケータのうちの１つ（Ｚ）は、Ｃとの累算が第１の累算において実行されたかを指示する。さらに別の実装において、丸めインジケータのうちの２つは、オーバーフロー（Ｏ）及びアンダーフロー（Ｕ）インジケータである。さらに別の実装において、丸めインジケータのうちの１つ（Ｅ）は、循環桁上げが保留中であるかを指示する。
【００６３】
一実装において、この方法は、１つ以上の丸めインジケータを丸めキャッシュに記憶するステップをさらに含む。別の実装では、この方法は、丸められていない中間結果ベクトルを、複数の命令実行ユニットによってアクセス可能な共有記憶装置内に記憶するステップをさらに含む。
【００６４】
第１の累算が、オペランドＣを含んでいなかった場合、オペランドＣと丸められていない中間結果ベクトルとの第２の累算が実行される。積和演算の最終的な丸められた結果が、丸めインジケータを使用して生成される。
【００６５】
別の態様では、マイクロプロセッサにおいて、複数の算術処理ユニットを使用して複数のオペランドに複合算術演算を実行する方法が提供される。第１の算術ユニットは、複合算術演算の少なくとも第１の算術演算を実行することから、丸められていない非冗長初期結果を生成する。第１の算術ユニットは、次いで、丸められていない非冗長初期結果から記憶形式中間結果を生成する。記憶形式中間結果は、丸められていない非冗長初期結果の複数の最上位ビット（ＭＳＢ）を含み、丸められていない非冗長初期結果の複数の最下位ビット（ＬＳＢ）を除外する。記憶形式中間結果は、第２の算術演算ユニットが記憶形式中間結果から最終的な丸められた結果を生成することを可能にするための複数の丸めインジケータをさらに含む。第２の算術演算ユニットは、後に、複合算術演算を完了し、記憶形式中間結果から最終的な丸められた結果を生成する。
【００６６】
一態様において、マイクロプロセッサにおいて形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するための方法が提供され、ここで、Ａ、Ｂ、及びＣは入力オペランドである。Ａ、Ｂ、及び／又はＣの値が、ＡとＢとの部分積とＣとの連帯累算を実行するための十分条件を満たすかを検出する評価が行われる。満たす場合、Ｃの連帯累算が、ＡとＢとの部分積と行われ、連帯累算の結果は、丸められる。満たさない場合、ＡとＢとの部分積の一次累算が行われる。これは、一次累算の丸められていない非冗長結果を生成する。次いで、丸められていない結果は、丸められていない非冗長結果の１つ以上の最下位ビットを除外する丸められていない非冗長中間結果ベクトルを生成するように、切り捨てられる。次いで、二次累算が実行され、丸められていない非冗長中間結果ベクトルにＣを加算又は減算する。最後に、二次累算の結果が、丸められる。
【００６７】
一実装において、切り捨ては、融合積和演算のためのターゲット・データ形式の仮数幅に等しい仮数幅を有する丸められていない非冗長中間結果ベクトルを生成するのに十分である。
【００６８】
一実装において、Ａ、Ｂ、及び／又はＣが、ＡとＢとの部分積とＣとの連帯累算を実行するための十分条件を満たす場合、ＡとＢの仮数の部分積とＣの仮数とのアライメントを行うためにＥｘｐＤｅｌｔａが使用される。
【００６９】
一実装において、Ａ、Ｂ、及び／又はＣが、ＡとＢとの部分積とＣとの連帯累算を実行するための十分条件を満たさない場合、除外された最下位ビットは、１つ以上の丸めインジケータのセットに低減される。丸めインジケータは、後に、二次累算の結果の丸めに使用される。
【００７０】
別の態様では、形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するように動作可能な１つ以上の命令実行ユニットを備えるマイクロプロセッサが提供され、ここで、Ａ、Ｂ、及びＣは入力オペランドである。命令実行ユニットのうちの１つ又は複数の中で、Ａ、Ｂ、及び／又はＣの値がＡとＢとの部分積とＣとの連帯累算を実行するための十分条件を満たすかを指示するための、オペランド分析ロジックが提供される。さらに、制御ロジックが提供され、制御ロジックは、十分条件が満たされた場合に、１つ以上の命令実行ユニットに、ＡとＢとの部分積とＣとの連帯累算を実行させ、連帯累算の結果を丸めさせる。十分条件が満たされていない場合、制御ロジックは、１つ以上の命令実行ユニットに、ＡとＢとの部分積の一次累算を実行させ、一次累算の丸められていない結果を生成させ、丸められていない結果の１つ以上の最下位ビットを除外する丸められていない中間結果ベクトルを生成するように、丸められていない結果を切り捨てさせ、丸められていない中間結果ベクトルへのＣの二次累算を実行させ、二次累算の結果を丸めさせる。
【００７１】
一実装において、Ａ、Ｂ、及び／又はＣが、ＡとＢとの部分積とＣとの連帯累算を実行するための十分条件を満たさない場合、制御ロジックは、１つ以上の命令実行ユニットに、除外された１つ以上の最下位ビットを、二次累算の結果の丸めにおいて使用される１つ以上の丸めインジケータのセットに低減させる。さらに、制御ロジックは、１つ以上の丸めインジケータを、二次累算の結果の丸めにおける使用のために、除外された１つ以上の最下位ビットから生成させる。
【００７２】
一実装において、マイクロプロセッサは、丸められていない中間結果ベクトルを記憶するための第１の共有命令実行ユニット記憶装置と、複数の丸めインジケータを記憶するための第２の共有命令実行ユニット記憶装置とをさらに備える。
【００７３】
別の態様では、マイクロプロセッサにおいて形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するための方法が提供され、ここで、Ａ、Ｂ、及びＣは入力オペランドである。この方法は、Ａ、Ｂ、及び／又はＣの値が、ＡとＢとの部分積とＣとの連帯累算を実行するための十分条件を満たすかを検出するステップを含む。満たす場合、ＡとＢとの部分積とＣの連帯累算が行われ、その後、連帯累算の結果の丸めが行われる。満たさない場合、ＡとＢとの部分積の一次累算が行われて、丸められていない中間結果ベクトルと、一次累算についての１つ以上の丸めインジケータとを生成する。その後、丸められていない中間結果ベクトルへのＣの二次累算が行われ、次いで、１つ以上の丸めインジケータを使用して二次累算の結果の丸めが行われる。
【００７４】
一実装において、ＡとＢとの積の絶対値がＣの絶対値よりも実質的に大きい場合に、ＡとＢとの部分積とＣとの連帯累算を実行するための十分条件が存在する。
【００７５】
一実装において、この方法は、ＡとＢとの積の絶対値がＣの絶対値よりも実質的に大きいかを、Ａ及びＢの指数値の和からＣの指数値を引く関数として指数差ＥｘｐＤｅｌｔａを計算することによって評価するステップをさらに含む。指数差ＥｘｐＤｅｌｔａの計算は、Ａ及びＢの指数値の和からＣの指数値を引いた値から、指数バイアス値をさらに減算してもよい。したがって、たとえば、ＡとＢとの部分積とＣとの連帯累算を実行するための十分条件は、ＥｘｐＤｅｌｔａ≧−２の場合に存在し得る。
【００７６】
別の態様では、形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するように動作可能な１つ以上の命令実行ユニットを備えるマイクロプロセッサが提供され、ここで、Ａ、Ｂ、及びＣは入力オペランドである。命令実行ユニットのうちの１つ又は複数の中で、Ａ、Ｂ、及び／又はＣの値がＡとＢとの部分積とＣとの連帯累算を実行するための十分条件を満たすかどうかを指示するための、オペランド分析ロジックが提供される。制御ロジックが提供され、制御ロジックは、十分条件が満たされた場合に、命令実行ユニット（複数可）に、ＡとＢとの部分積とＣとの連帯累算を実行させ、連帯累算の結果を丸めさせる。満たさない場合、制御ロジックは、命令実行ユニット（複数可）に、ＡとＢとの部分積の一次累算を実行して、丸められていない中間結果ベクトルと１つ以上の丸めインジケータとを生成させ、その後、丸められていない中間結果ベクトルへのＣの二次累算を実行させ、最後に、１つ以上の丸めインジケータを使用して二次累算の結果を丸めさせる。
【００７７】
一実装において、融合積和演算のためのターゲット・データ形式の仮数幅と同じ仮数幅を有するように、丸められていない中間結果ベクトルが生成される。
【００７８】
一実装において、ＡとＢとの部分積とＣとの連帯累算を実行するための十分条件は、融合積和演算を実行することにおけるマス・キャンセルの潜在性である。マス・キャンセルは、アキュムレータＣと総和されるときにＡとＢとの積の最上位ビットの１つ以上を否定することとして定義され得る。
【００７９】
別の実装では、ＡとＢとの部分積とＣとの連帯累算を実行するための十分条件は、融合積和演算が実効減算を作り出し、実効減算は、ＡとＢとの積へのＣの加算又は減算が（ａ）ＡとＢとの積の絶対値の大きさ又は（ｂ）Ｃの絶対値の大きさのうち大きい方よりも小さい絶対値の大きさを有する結果Ｒをもたらすであろう場合に指示されること、及び、Ａ及びＢの指数値の和から、任意の指数バイアス値を引き、Ｃの指数値を引いた値が、Ｘ乃至Ｙの範囲内に入ることである。たとえば、Ｘは負の２で、Ｙは正の１とすることができる。
【００８０】
一態様では、マイクロプロセッサにおいて形式±Ａ＊Ｂ±Ｃの融合積和演算の実行の準備をするための方法が提供され、Ａ、Ｂ、及びＣは入力オペランドであり、ＣがＡとＢとの積に累算される前に丸めは生じない。融合積和演算を完了するために、第１及び第２の積和マイクロ命令が１つ以上の命令実行ユニットに発行される。第１の積和マイクロ命令は、丸められていない非冗長結果ベクトルを、（ａ）ＡとＢとの部分積か、又は（ｂ）ＡとＢとの部分積とＣかのうちの選択された１つの第１の累算から生成させる。第２の積和マイクロ命令は、第１の累算がＣを含まなかった場合に、丸められていない非冗長結果ベクトルとＣとの第２の累算の実行を引き起こす。第２の積和マイクロ命令は、さらに、最終的な丸められた結果を丸められていない非冗長結果ベクトルから生成させ、最終的な丸められた結果は、融合積和演算の完全な結果である。
【００８１】
一実装において、この方法は、Ｃとの第１の累算を実行するか又はＣなしの第１の累算を実行するかを、Ａ、Ｂ、及びＣの値の間の１つ以上の関係に基づいて選択するステップをさらに含む。より具体的な一実装において、この方法は、Ｃとの第１の累算を実行するか又はＣなしの第１の累算を実行するかを、ＡとＢとの積とＣとの累算の間の１つ以上の関係が実効減算を構成するであろうことに基づいて選択するステップをさらに含む。別のより具体的な実装において、この方法は、Ｃとの第１の累算を実行するか又はＣなしの第１の累算を実行するかを、Ａ、Ｂ、及びＣの指数値の間の１つ以上の関係に基づいて選択するステップをさらに含む。なおいっそう具体的な一実装において、この方法は、Ａ及びＢの指数の和とＣの指数との間の差を決定するステップを含む。Ａ及びＢの指数の和からＣの指数を引き、任意の指数バイアスでさらに調整された値が、負の１より大きいか又は等しい場合、積和演算の累算部分を乗算ユニットにおいて実行する。Ａ及びＢの指数の和からＣの指数を引いた値が、負の３より小さいか又は等しい場合、積和演算の累算部分は加算器ユニットにおいて実行される。
【００８２】
別の実装では、この方法は、融合積和演算の結果の絶対値が｜Ａ＊Ｂ｜と｜Ｃ｜とのうち大きい方よりも小さくなるかを事前に決定するステップを含む。もしそうであれば、Ａ及びＢの指数の和からＣの指数を引いた値が、任意の指数バイアスを考慮した後、負の２より大きいか又は等しい場合、積和演算の累算部分は加算器ユニット内で実行され、次いで、積和演算の累算部分は乗算ユニット内で実行される。
【００８３】
別の実装では、この方法は、Ｃの指数によって表される値がＡ及びＢの指数の和よりも著しく大きいかを決定する。任意の指数バイアスを考慮した後にＣの指数がＡ及びＢの指数の和よりも少なくとも８倍大きい場合、積和演算の累算部分が加算器ユニットにおいて実行される。さらに、任意の指数バイアスを考慮した後にＣの指数がＡ及びＢの指数の和よりも少なくとも４倍大きい場合、及び融合積和演算の結果の絶対値が｜Ａ＊Ｂ｜と｜Ｃ｜とのうち大きい方よりも小さくなる場合、積和演算の累算部分が乗算器ユニットにおいて実行される。
【００８４】
別の態様では、マイクロプロセッサにおいて形式±Ａ＊Ｂ±Ｃの融合積和命令を実行するための方法が提供され、ここで、Ａ、Ｂ、及びＣは入力オペランドである。この方法は、融合積和命令を第１及び第２のマイクロ命令に変換するステップを含む。第１のマイクロ命令は、命令実行ユニットに、積和演算の第１の部分の丸められていない中間結果ベクトルを生成するように命令する。第２のマイクロ命令は、命令実行ユニットに、丸められていない中間結果ベクトルを受け取り、それを使用して±Ａ＊Ｂ±Ｃの最終的な丸められた結果を生成するように命令する。マイクロプロセッサは、第１のマイクロ命令を第１の命令実行ユニットにディスパッチして丸められていない結果を生成する。マイクロプロセッサは、さらに、第２のマイクロ命令を第２の命令実行ユニットにディスパッチして丸められていない結果を受け取り、最終的な丸められた結果を生成する。最後に、±Ａ＊Ｂ±Ｃの最終的な丸められた結果が共有メモリに記憶される。
【００８５】
一実装において、融合積和命令は、融合浮動小数点積和命令であり、Ａ、Ｂ、及びＣは、各々が符号インジケータと仮数と指数とを有するオペランドであり、融合積和命令は、プリセットされた仮数幅を有するターゲット・データ形式を指定する。この実装において、第１のマイクロ命令は、ターゲット・データ形式のプリセットされた仮数幅に等しい仮数幅を有する丸められていない中間結果ベクトルを生成する。
【００８６】
一実装において、中間結果ベクトルは、転送バスを介して第１の命令実行ユニットから第２の命令実行ユニットの入力オペランド・ポートに転送される。代替的実装において、中間結果ベクトルは、汎用メモリに記憶される。より具体的な一実装において、中間結果ベクトルは、第１の命令実行ユニットから結果バスに出力され、結果バスを介して汎用メモリに転送される。
【００８７】
別の態様では、マイクロプロセッサにおいて融合複合算術演算を実行するための方法が提供される。この方法は、融合複合算術演算を実行するために、複数の命令実行ユニットによって実行されるべき、複数の個別のマイクロ命令を発行するステップを含む。第１の命令実行ユニットは、第１のマイクロ命令を実行して、融合複合算術演算の少なくとも第１の演算子を使用して丸められていない非冗長ベクトル結果を生成する。少なくとも第２の命令実行ユニットは、少なくとも第２のマイクロ命令を実行して、融合複合算術演算の任意の残りの演算子を使用して丸められていない非冗長ベクトル結果から最終的な丸められた結果を生成し、最終的な丸められた結果は、複合算術演算の完全な結果である。
【００８８】
一実装において、第２の命令実行ユニットは、第１の命令実行で第１のマイクロ命令を実行している間に無関係のマイクロ命令を実行し、無関係のマイクロ命令は融合複合算術演算の実行に無関係である。より具体的な一実装において、丸められていない非冗長ベクトル結果は、複数の命令ユニットによって共有される第１のメモリに記憶され、第２の命令実行ユニットは、丸められていない非冗長ベクトル結果が第１のメモリに記憶された後、第２の命令実行ユニットが第２のマイクロ命令を実行する前に、少なくとも１つの無関係のマイクロ命令を実行する。
【００８９】
一実装において、第１の命令実行ユニットは、第２の命令実行ユニットが最終的な丸められた結果を生成することを可能にする複数の丸めインジケータを生成する。丸めインジケータは、複数の命令ユニットによって共有される第２のメモリに記憶される。
【００９０】
代替的実装において、第１の命令実行ユニットは、丸められていない非冗長ベクトル結果及び丸めインジケータを第２の命令ユニットに転送する。
【００９１】
一態様において、形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するように動作可能なマイクロプロセッサが提供され、Ａ、Ｂ、及びＣは入力オペランドである。マイクロプロセッサは、第１及び第２の実行ユニットと、Ａ、Ｂ、及び／又はＣの値がＡとＢとの部分積とＣとの連帯累算を実行するための十分条件を満たすかを決定する入力オペランド・アナライザー回路とを備える。第１の命令実行ユニットは、ＡとＢとを乗算し、Ａ、Ｂ、及び／又はＣの値がＡとＢとの部分積とＣとの連帯累算を実行するための十分条件を満たすときに、ＡとＢとの部分積にＣを連帯的に（jointly）累算する。第２の命令実行ユニットは、Ａ、Ｂ、及び／又はＣの値がＡとＢとの部分積とＣとの連帯累算を実行するための十分条件を満たさないときに、ＡとＢとの積にＣを別個に累算する。
【００９２】
一実装において、第１及び第２の命令実行ユニットは、それぞれ、乗算器及び加算器である。乗算器は、乗算命令を実行し、融合積和演算の少なくとも第１の部分を実行するように動作可能である。加算器は、加算命令及び減算命令を実行し、融合積和演算の少なくとも第２の部分を実行するように動作可能である。
【００９３】
一実装において、Ａ、Ｂ、及びＣは仮数を用いて表される。第１の命令実行ユニットは、３ｍビット未満の、より好ましくは２ｍ＋２ビット以下の幅の総和データ経路を、追加のｍビット・スティッキー・コレクタと共に備え、ｍはＡ及びＢの仮数を表すために使用されるビットの数を表す。
【００９４】
連帯累算のための１つの十分条件は、Ｃが、ＡとＢとの積の大きさに対して、Ｃの最上位ビットをＡとＢとの部分積総和のための総和ツリー内に提供された最上位ビットの左にシフトすることなく総和ツリーの中でＣがアライメントされることを可能にする大きさを有することである。
【００９５】
Ｃとの連帯累算のための別の十分条件は、Ｃの絶対値の大きさがマス・キャンセルの潜在性を作り出すほどＡとＢとの積の絶対値の大きさに十分近いことであり、マス・キャンセルは、Ｃと総和されるときにＡとＢとの積の最上位ビットの１つ以上をキャンセルすることを指す。
【００９６】
Ｃとの連帯累算のためのさらに別の十分条件は、第１及び第２の部分条件を含む。第１の部分条件は、Ａ及びＢの指数の和からＣの指数を引き、任意の指数バイアス値でさらに調整された値が、負の２よりも大きいか又は等しいことである。第２の部分条件は、ＡとＢとの積へのＣの累算が実効減算をもたらし、これは、｜Ｒ｜が｜Ａ＊Ｂ｜又は｜Ｃ｜のうち大きい方よりも小さい場合に結果として生じることである。
【００９７】
別の態様では、マイクロプロセッサにおいて形式±Ａ＊Ｂ±Ｃの積和演算を実行するための方法が提供され、Ａ、Ｂ、及びＣは入力値である。Ａ、Ｂ、及び／又はＣの値が１つ以上の前提条件のセットの少なくとも１つを満足するかの決定が行われる。第１の命令実行ユニット内で、Ａ及びＢは一緒に乗算され、その部分積は、Ａ、Ｂ、及び／又はＣの値が連帯累算のための十分条件を満足する場合に選択的にＣと累算される。第２の命令実行ユニット内で、Ｃは、Ａ、Ｂ、及び／又はＣの値が連帯累算のための十分条件を満足していない場合にＡとＢとの積に選択的に累算される。
【００９８】
一実装において、第１及び第２の命令実行ユニットは、それぞれ、乗算器及び加算器である。乗算器は、乗算命令を実行し、融合積和演算の少なくとも第１の部分を実行するように動作可能である。加算器は、加算命令及び減算命令を実行し、融合積和演算の少なくとも第２の部分を実行するように動作可能である。
【００９９】
別の態様では、形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するように構成されているマイクロプロセッサが実現され、Ａ、Ｂ、及びＣは入力オペランドである。マイクロプロセッサは、第１及び第２の命令実行ユニットを備える。第１の命令実行ユニットは、ＡとＢとの積を算出する乗算演算を実行するように構成されて動作可能であり、ＡとＢとの積にＣを累算する累算演算を選択的に実行するようにさらに動作可能である。第２の実行命令ユニットは、ＡとＢとの積にＣを累算するように構成され、動作可能である。第１の命令実行ユニット内で、入力オペランド・アナライザー回路は、Ａ、Ｂ、及びＣの値を分析して、第１の命令実行ユニットに乗算演算と累算演算とを連帯的に実行させるか、又は第１及び第２の命令実行ユニットに乗算演算と累算演算とを別個に実行させるかを決定するように構成される。制御ロジックは、第１の命令実行ユニットが第１の命令実行ユニットの中で乗算演算と累算演算とを連帯的に実行することを、入力オペランド・アナライザー回路がそのように決定したときに行わせ、第１及び第２の命令実行ユニットが乗算演算と累算演算とを別個に実行することを、入力オペランド・アナライザー回路がそのように決定したときに行わせるように構成される。
【０１００】
一実装において、第１の命令実行ユニットは、乗算ユニットであり、第２の命令実行ユニットは、加算器ユニットである。別の実装では、マイクロプロセッサは、第１の命令実行ユニットによって生成された積和演算の結果を記憶し、その結果を第２の命令実行ユニットにロードするための共有メモリをさらに備える。代替的実装において、マイクロプロセッサは、第１の命令実行ユニットによって生成された積和演算の結果を第２の命令実行ユニットに転送するための転送バスをさらに備える。
【０１０１】
別の態様では、形式±Ａ＊Ｂ±Ｃの融合積和演算を実行するように動作可能なマイクロプロセッサが提供され、Ａ、Ｂ、及びＣは入力オペランドである。マイクロプロセッサは、第１及び第２の命令実行ユニットを備える。第１の命令実行ユニットは、ＡとＢとの積を算出する乗算演算を実行するように構成され、ＡとＢとの積にＣを累算する累算演算を選択的に実行するようにさらに構成される。第２の実行命令ユニットは、ＡとＢとの積にＣを累算するように構成される。第１の命令実行ユニット内で、マイクロプロセッサは、Ａ、Ｂ、及びＣの値を分析して、第１の命令実行ユニットに乗算演算と累算演算とを連帯的に実行させるか、又は第１及び第２の命令実行ユニットに乗算演算と累算演算とを別個に実行させるかを決定するように構成された入力オペランド・アナライザー回路をさらに備える。マイクロプロセッサは、入力オペランド・アナライザー回路に応答して（ａ）第１の命令実行ユニットが第１の命令実行ユニットの中で乗算演算と累算演算とを連帯的に実行すること、又は（ｂ）第１及び第２の命令実行ユニットが乗算演算と累算演算とを別個に実行することのいずれかを行わせるように構成された制御ロジックをさらに備える。
【０１０２】
一実装において、第１の命令実行ユニットは、積和演算の少なくとも一部分を実行するときに丸められていない結果を生成し、通常の乗算演算を実行するときに丸められた結果を生成するように構成される。
【０１０３】
別の実装では、第２の命令実行ユニットは、入力オペランドとして丸められていない結果を受け取り、積和演算の少なくとも一部分を実行するときに算術的に正しい丸められた結果を生成するために複数の丸めインジケータをさらに受け取り、通常の累算演算を実行するときに複数の丸めインジケータを受け取らないように構成される。
【０１０４】
さらに別の実装において、マイクロプロセッサは、第１及び第２の命令実行ユニットによって共有され、第１の命令実行ユニットの乗算演算及び選択的累算演算の結果を記憶するように構成されたメモリを備える。第１のメモリは、第２の命令実行ユニットが、乗算演算及び選択的累算演算の結果が記憶された後、ＡとＢとの積にＣを累算する前に、複数の無関係の演算を実行することを可能にする。
【０１０５】
本明細書で説明されている方法及び装置は、複合算術演算の必要な回路、実装コスト、及び漸増する電力消費量を最小にする。高いレベルにおいて、この装置及び方法は、複合算術演算を、物理的に及び／又は論理的に別個のハードウェア・ユニットによって実行される少なくとも２つのサブ演算に分離し、上記ハードウェア・ユニットの各々が、複合算術演算計算の一部を実行する。丸め又は計算制御に必要な追加ビットが、２つの演算の間に、キャッシュ内に記憶される。サブ演算は、異なる時間及び場所で行われ、必要なデータ・ピースが、最終的な丸めを遂行するようにアセンブルされる。
【０１０６】
この方法及び装置には、特にＦＭＡ演算に適用されるような、いくつかの顕著な利点がある。
【０１０７】
第１に、この方法及び装置は、ＦＭＡ計算を識別して少なくとも２つの型に分離し、いずれかの計算型の部分を時間的に又は物理的に切り離されている方式で実行する。
【０１０８】
第２に、この方法及び装置は、命令セット・アーキテクチャ［ＩＳＡ］からのアトミックな又は統合されたＦＭＡ命令を、少なくとも２つのサブ演算に翻訳し又は変換する。
【０１０９】
第３に、この方法及び装置は、上記サブ演算が実行されることを許し、それらが非アトミックな、又は時間的に若しくは物理的に切り離されている方式で、たとえば、アウト・オブ・オーダーのスーパースカラー・コンピュータ・プロセッサ・デバイスで、実行されることを許す。
【０１１０】
第４に、ＦＭＡ計算に必要な算術演算のうちのいくつか（たとえば、ＦＭＡの第１の型の一部、又は代替的にＦＭＡの第２の型の一部に対応する）は、第１の専用マイクロ命令の実行中に実行される。
【０１１１】
第５に、この方法及び装置は、新規性のある方式で、ＦＭＡ符号データを事前計算する。
【０１１２】
第６に、この方法及び装置は、中間結果計算の結果の一部を、たとえば、結果（リネーム）レジスタ内に保存する。
【０１１３】
第７に、この方法及び装置は、その計算の結果の他の何らかの部分を、たとえば、丸めキャッシュ又は計算制御インジケータ・キャッシュと称され得る別の記憶素子に保存する。
【０１１４】
第８に、この方法及び装置は、中間結果と称される、これらの集合的データを、新規性のある標準化された記憶形式で保存する。さらに、この方法及び装置は、潜在的に、記憶形式中間結果を保存するのではなく、特別な型のその後の第２のマイクロ命令に転送する。
【０１１５】
第９に、この方法及び装置は、望ましいときに丸めキャッシュにアクセスして、保存されたデータをその後の第２のマイクロ命令に提供する。
【０１１６】
第１０に、この方法及び装置は、丸めキャッシュからのデータに応じて、選択的に、ＦＭＡ加数を第２のマイクロ命令に提供するか、又はその入力をゼロにする。
【０１１７】
第１１に、この方法及び装置は、記憶形式中間結果を入力として使用して、第２の（又はさらなる）専用マイクロ命令の実行中に、第１又は第２の型のいずれかについての残りの必要な算術ＦＭＡ計算を実行する。
【０１１８】
第１２に、この方法及び装置は、説明されている丸めキャッシュと組み合わせて、また丸めキャッシュをバイパスするように動作可能なデータ転送ネットワークと組み合わせて、従来技術の乗算及び加算ハードウェア実行ユニットに最小の修正の組合せを提供する。
【０１１９】
第１３に、この方法及び装置は、算術計算のためのディスパッチ・ポートの利用可能性を縮小したり、或いは特定の投資されたハードウェア・コストに関してＩＬＰを利用するコンピュータの能力を損なったりすることがない。
【０１２０】
本発明は、複数の仕方で特徴付けられることができ、限定はしないが、本明細書で説明されている個々の態様又は本明細書で説明されている態様のうち２つ以上の態様の組合せを含み、また上で説明されている利点の任意の組合せのうちの任意の単一の利点を含むことが理解されるであろう。
【図面の簡単な説明】
【０１２１】
【図１】２つのサブ演算、修正された乗算器、及び修正された加算器を使用してＦＭＡ計算を実行するように構成された実行ユニットと丸め又は計算制御インジケータ・キャッシュとを有するマイクロプロセッサの一実施形態の最上位図である。
【図２】数空間の、５タイプのＦＭＡ計算への例示的な（ただし、非限定的な）サブ分割を示す図である。
【図３】ＦＭＡ計算を実行するように構成された修正された乗算器及び修正された加算器のいくつかの論理的コンポーネントを示す機能ブロック図である。
【図４】ＦＭＡ乗数、被乗数、及びアキュムレータを入力オペランドとして受け取るように適切な修正を有する乗算算出ユニットの一実施形態の経路決定ロジック及び仮数乗算器モジュールの機能ブロック図である。
【図５】記憶形式中間結果を作り出すように適切な修正をさらに有する、図４に部分的に示されている乗算算出ユニットの指数結果生成器及び丸めインジケータ生成器の機能ブロック図である。
【図６】記憶形式中間結果及びアキュムレータを受け取るように適切な修正を有する加算器算出ユニットの一実施形態の機能ブロック図である。
【図７】非アトミック分割経路ＦＭＡ計算の第１のＦＭＡサブ演算の一実装の経路決定部分を示す機能ブロック図である。
【図８】非アトミック分割経路ＦＭＡ計算の第１のＦＭＡサブ演算の乗算及び累算部分を示す機能ブロック図である。
【図９Ａ】非アトミック分割経路ＦＭＡ計算の第１のＦＭＡサブ演算の記憶形式中間結果生成部分を示す機能ブロック図である。
【図９Ｂ】非アトミック分割経路ＦＭＡ計算の第１のＦＭＡサブ演算の記憶形式中間結果生成部分を示す機能ブロック図である。
【図１０】非アトミック分割経路ＦＭＡ計算の第２のＦＭＡサブ演算を示す機能ブロック図である。
【図１１】融合ＦＭＡ命令の、第１及び第２のＦＭＡマイクロ命令への命令変換の一実施形態を示す。
【発明を実施するための形態】
【０１２２】
マイクロプロセッサ
【０１２３】
次に図１を参照すると、マイクロプロセッサ１０を示すブロック図が図示されている。マイクロプロセッサ１０は、ＦＭＡ計算を実行するように構成された複数の実行ユニット４５、５０、６０を有する。マイクロプロセッサ１０は、命令キャッシュ１５と、命令トランスレータ及び／又はマイクロコードＲＯＭ２０と、リネーム・ユニット及び予約ステーション２５と、修正された乗算器４５、修正された加算器５０、及び他の実行ユニット６０を含む複数の実行ユニットと、丸めキャッシュ５５（代替的に計算制御インジケータ記憶装置とも称される）と、アーキテクチャ・レジスタ３５と、リオーダ・バッファ３０（リネーム・レジスタを含む）とを備える。他の機能ユニット（図示せず）は、とりわけ、マイクロコード・ユニットと、分岐予測器と、キャッシュ・メモリ階層（たとえば、レベル１データ・キャッシュ、レベル２キャッシュ）、メモリ順序バッファ、及びメモリ管理ユニットを含むメモリ・サブシステムと、データ・プリフェッチ・ユニットと、バス・インターフェース・ユニットとを備えることができる。マイクロプロセッサ１０は、命令がプログラム順序から外れた実行のために発行され得るという点でアウト・オブ・オーダー実行のマイクロアーキテクチャを有する。より具体的には、アーキテクチャ命令（又はマクロ命令）が翻訳又は変換されるマイクロ命令は、プログラム順序から外れた実行のために発行され得る。マイクロ命令のプログラム順序は、それらの翻訳又は変換元のそれぞれのアーキテクチャ命令のプログラム順序と同じである。マイクロプロセッサ１０は、クロック・サイクルごとに複数の命令を実行のために実行ユニットに発行することができるという点で、スーパースカラー・マイクロアーキテクチャをさらに有する。一実装において、マイクロプロセッサ１０は、ｘ８６命令セット・アーキテクチャと互換性のある方式で命令の実行を提供する。
【０１２４】
命令キャッシュ１５は、システム・メモリからフェッチされたアーキテクチャ命令をキャッシュする。命令トランスレータ及び／又はマイクロコードＲＯＭ２０は、命令キャッシュ１５からフェッチされたアーキテクチャ命令をマイクロプロセッサ１０のマイクロアーキテクチャのマイクロ命令セットのマイクロ命令に翻訳し又は変換する。実行ユニット４５、５０、６０が、マイクロ命令を実行する。アーキテクチャ命令の翻訳又は変換先のマイクロ命令が、アーキテクチャ命令を実装する。リネーム・ユニット２５は、プログラム順序におけるマイクロ命令のためにＲＯＢ３０内にエントリを受け取り、割り振り、割り振られたＲＯＢエントリのインデックスでマイクロ命令を更新し、各マイクロ命令をマイクロ命令を実行する実行ユニットに関連付けられている適切な予約ステーション２５にディスパッチし、マイクロ命令に対するレジスタ・リネーミング及び依存関係生成を実行する。
【０１２５】
型による計算の分類
【０１２６】
本発明の一実装の一態様において、ＦＭＡ計算は、変数ＥｘｐＤｅｌｔａによって示される、入力オペランドの指数値の差、及びＦＭＡ計算が実効減算（effective  subtraction）を伴うかどうかに基づき区別される。図２は、値ＥｘｐＤｅｌｔａを表す数直線７０を含む数空間６５を示している。数直線７０より下の領域は、計算が実効減算を構成することを表す。数直線７０より上の領域は、計算が実効加算を構成する（すなわち、実効減算はない）ことを表す。
【０１２７】
指数差ＥｘｐＤｅｌｔａは、乗数及び被乗数入力指数値の和から任意の指数バイアス値を引き、加数又は減数入力指数値を引いた値である。アキュムレータがバイアス調整された積ベクトルよりもかなり大きい計算は、負のＥｘｐＤｅｌｔａで特徴付けられる。同様に、アキュムレータがバイアス調整された積ベクトルよりもかなり小さい計算は、正のＥｘｐＤｅｌｔａで特徴付けられる。
【０１２８】
変数ＥｆｆＳｕｂによって示される「実効減算」は、入力オペランドの符号及び所望される演算（たとえば、乗算加算又は乗算減算）が組み合わさって、結果の大きさの実効増加ではなく浮動小数点数結果の大きさの実効減少を引き起こすことを示す。たとえば、負の被乗数が正の乗数で乗算され（負の積）、次いで正の被加数に加算されたときに、結果の大きさの実効減少をもたらし、実効減算（ＥｆｆＳｕｂ）と指定される。
【０１２９】
図２の数空間６５の右側に示されているように、積ベクトルの大きさが結果を支配している場合、アキュムレータは、初めのラウンド・ビット又はスティッキー・ビット計算に直接寄与することができる。以下で説明されているように、アキュムレータと積の仮数との相対的アライメントは、丸めに寄与するビットを計算する前に２つを足し合わせることを奨励する。図２の数空間６５は、「実効減算」がないそのようなケースを「２型」計算８０として、実効減算があるそのようなケースを「４型」計算９０として指定する。
【０１３０】
図２の数空間６５の左側に示されているように、アキュムレータの大きさが結果を支配し、アキュムレータの仮数のサイズが所望の結果の仮数のサイズよりも小さいか、又は等しいときに、アキュムレータは初めのラウンド・ビット又はスティッキー・ビット計算に寄与し得ない。図２の数空間６５は、「実効減算」がないそのようなケースを「３型」計算８５として、実効減算があるそのようなケースを「５型」計算９５として指定する。アキュムレータは、積の仮数の左に効果的にアライメントされるので、アキュムレータを加算する前にいくつかのスティッキー・ビット及びラウンド・ビットを識別することによって利点が実現され得る。
【０１３１】
ＥｘｐＤｅｌｔａが図２の数直線７０の右側にある状況を、ＥｘｐＤｅｌｔａが図２の数直線７０の左側にある状況から区別することには多くの利点がある。たとえば、従来のＦＭＡは、極端に広い、入力仮数幅の３倍程度又はそれ以上のアライメント・シフターを利用して、アキュムレータが被乗数と乗数との積の左又は右にアライメントされ得る計算を考慮する。ＦＭＡ計算を２つの修正された実行ユニット（修正された乗算器４５と修正された加算器５０）によって実行される２つのサブ演算に分割することによって、より小さいデータ経路及びより小さいアライメント・シフターを利用することが可能である。
【０１３２】
数直線７０の右側の計算では、アキュムレータは、中間積ベクトルよりも小さい大きさを有する。ここで、修正された乗算器４５内で乗算器積にアキュムレータを加算することは有利である。そのような計算に対して、従来のＦＭＡのデータ経路幅より小さい、ほぼ１つの仮数の幅であるデータ経路幅で十分である。修正された乗算器４５は、すでに、何らかの固有の遅延を有しているので、アキュムレータは、総和ツリー／アレイと効率的にアライメントされる。正規化及び丸めも簡素化される。丸めは、修正された加算器５０によって第２のＦＭＡサブ演算において実行される。
【０１３３】
数直線７０の左側の計算では、対照的に、アキュムレータは、より大きいオペランドとなり、丸めに寄与し得ない。アキュムレータが丸めに寄与していないので（次に説明される特別なケースを除いて）、乗数積に対して何らかの初めのスティッキー・コレクション（ｓｔｉｃｋｙ  ｃｏｌｌｅｃｔｉｏｎ）を実行すること、中間結果をメモリ（たとえば、リオーダ・バッファ及び／又はキャッシュ）に保存すること、及び修正された加算器５０を使用してアキュムレータを総和することが可能である。従来の丸めロジックでは、アキュムレータが丸め判断に寄与しない特別なケースを効果的に取り扱い、和のオーバーフローがある場合、ラウンド・ビットはスティッキー・ビットのうちの１つになり、和のＬＳＢがラウンド・ビットになる。
【０１３４】
いくつかの種類のＦＭＡ計算−図２の数空間６５の下半分に示されている「実効減算」計算のサブセット−の結果、最上位桁の１つ又は複数がゼロに設定され得る。当業者は、これを「マス・キャンセル」と称する。図２において、マス・キャンセルに対する潜在的可能性が存在する計算は、「１型」計算７５として指定される。そのような場合、丸め点がどこにあるかを決定するために、丸めに先だって正規化が必要になる場合がある。ベクトルを正規化する際に関わるシフト演算は、著しい時間遅延を引き起こし、且つ／或いは先頭桁予測の使用を必要とする場合がある。その一方で、先頭桁予測は、マス・キャンセルを伴わないＦＭＡ計算に対してはバイパスされ得る。
【０１３５】
要するに、ＦＭＡ計算は、図２に示されているように、ＥｘｐＤｅｌｔａ及びＥｆｆＳｕｂに基づきいくつかの型にソートされる。第１のＦＭＡ計算型７５は、ＥｆｆＳｕｂが真である範囲｛−２，−１，０，＋１｝内のＥｘｐＤｅｌｔａでの計算を含むように定義される。これらは、ビットのマス・キャンセルに対する潜在的可能性が対処される計算を含む。第２のＦＭＡ計算型８０は、ＥｆｆＳｕｂが偽の場合にＥｘｐＤｅｌｔａが−１以上での計算を含む。第３のＦＭＡ計算型８５は、ＥｆｆＳｕｂが偽の場合にＥｘｐＤｅｌｔａが−２以下での計算を含む。第４のＦＭＡ計算型９０は、ＥｆｆＳｕｂが真でありＥｘｐＤｅｌｔａ値が｛＋１｝よりも大きい計算を含む。第５のＦＭＡ計算型９５は、ＥｆｆＳｕｂが真でありＥｘｐＤｅｌｔａ値が｛−２｝よりも小さい計算を含む。本明細書で説明されている型の指定は、単なる例であること、及び型は異なる仕方で定義され得ることも理解されるであろう。たとえば、一実装において、２型及び４型が、単一のユニタリ型（unitary  type）として記述されてもよく、同様に、３型及び５型が、単一のユニタリ型として記述されてもよい。さらに、図２の数直線７０の右部分と左部分との間の分割線（破線で示されている）は、実装が異なれば異なり得る。
【０１３６】
融合ＦＭＡ命令実行コンポーネント・セット
【０１３７】
図３は、ＦＭＡ計算を実行するように構成された融合ＦＭＡ命令実行コンポーネント・セット１００の一実施形態の一般化された図を示している。コンポーネント・セット１００は、２つの物理的に及び／又は論理的に別個の算術演算ロジック・ユニット−一実装では修正された乗算器４５及び修正された加算器５０−と複数の丸められていない中間結果ベクトル及び丸めインジケータを記憶するための共有記憶装置１５５及び５５とを備える。
【０１３８】
修正された乗算器４５及び修正された加算器５０の各々は、命令実行ユニットであり、より具体的には、マシン・レベルの命令（たとえば、ＣＩＳＣマイクロアーキテクチャの命令の指定されたセット又はＲＩＳＣマイクロアーキテクチャのマイクロ命令の指定されたセット）をデコードし、そのオペランドを共有高速メモリのコレクションから読み出し、その結果を該メモリのコレクションに書き込む命令パイプライン２４内の算術処理ユニットである。命令実行ユニットは、完了のためそれに対して意図的に配送されたマシン・レベルの命令の指定されたセットを実行するように用意されたロジック回路の特性セットとして理解されてもよく、並列（及び単にパイプライン化されているだけでない）様式で複数のマシン命令を実行するように動作可能な回路のより大きなクラスタ（もし存在すれば）と対照的である。
【０１３９】
より具体的には、修正された乗算器４５及び修正された加算器５０は、マイクロ命令をデコードし、マイクロ命令に基づき独立して演算し、制御信号を内部データ経路に提供することができる、別個のアトミックなスタンドアロン実行ユニットである。共有高速メモリは、データを交換し、その結果を他の実行ユニットに見せるようにマイクロ命令に提供される、非アーキテクチャ計算用レジスタのセット又はレジスタ・ファイルであってよい。
【０１４０】
より具体的には、修正された乗算器４５は、ほとんどの態様において、ＦＭＡ演算の一部ではない通常の乗算マイクロ命令を実行することができるという点で従来型であり得る好適な乗算計算ユニットである。しかし、これは、以下でさらに説明されているように、ＦＭＡ乗数１０５、被乗数１１０、及びアキュムレータ１１５を入力オペランドとして受け取り、記憶形式中間結果１５０を作り出すために、適切な修正を有する。同様に、修正された加算器５０は、ほとんどの態様において、加算又は減算などの、ＦＭＡ演算ではない通常の累算マイクロ命令を実行することができるという点で従来型であり得る好適な加算器計算ユニットである。しかし、これは、記憶形式中間結果１５０を受け取り、正しい丸められたＦＭＡ結果を作り出すために、適切な修正を有する。
【０１４１】
修正された乗算器４５は、融合ＦＭＡ演算の第１のステージ又は部分（ＦＭＡ１サブ演算）を実行することができる。修正された乗算器４５は、入力オペランド・アナライザー１４０と、乗算器総和アレイ１２０と、最終加算器１２５と、正規化シフター１３０と、先頭桁予測器及びエンコーダ１３５とを備える。ＦＭＡ１サブ演算を実行するときに、修正された乗算器４５は、丸められていない正規化された総和結果１４５と複数の丸めビット（又は丸めインジケータ）とを生成し、出力する。その一方で、非融合ＦＭＡ演算を実行するときに、修正された乗算器４５は、丸められたＩＥＥＥ準拠結果を生成する。
【０１４２】
丸めビットと丸められていない正規化された総和結果１４５の最上位ビット（most  significant  bits；ＭＳＢ）とは、記憶形式に従って記憶される。一実装において、丸められていない正規化された総和結果１４５のＭＳＢは、ターゲット・データ形式の仮数幅に等しい仮数幅を有するリネーム・レジスタ１５５に記憶するために、結果バス１４６上に出力される。丸めビットは、リネーム・レジスタ１５５を記憶する記憶装置ユニット（たとえば、リオーダ・バッファ３０）から区別できる丸めキャッシュ５５内に記憶するために、修正された乗算器の外部にあり結果バス１４６から区別できる専用の丸めビット若しくは計算制御インジケータ・データ経路又は接続ネットワーク１４８上に出力される。丸められていない正規化された総和結果１４５のＭＳＢは、丸めビットとともに、記憶形式中間結果１５０を一緒に構成する。
【０１４３】
リネーム・レジスタ１５５及び丸めキャッシュ５５は、他の実行ユニットから見える共有メモリの一部であるので、修正された乗算器４５から物理的に及び／又は論理的に別個である、修正された加算器５０は、オペランド・バス１５２及び丸めビット・データ経路１４８を介して記憶形式中間結果１５０を受け取り、融合ＦＭＡ演算の第２の（完了）ステージ又は部分（ＦＭＡ２サブ演算）を実行することができる。さらに、ＦＭＡ１とＦＭＡ２との間に、他の無関係の演算が実行され得る。
【０１４４】
修正された加算器５０は、修正された乗算器４５がすでに必要な累算を実行していたＦＭＡの状況においてアキュムレータ・オペランドをゼロに設定するために、オペランド修正器１６０を備える。修正された加算器５０は、最終的な丸められた結果を作り出すために丸めモジュール１８０においてどの丸めビット−修正された乗算器４５によって生成される丸めビット、又は修正された加算器５０の内部生成丸めビット、又は両方の何らかの組合せ−を使用するかを選択するためのラウンド・ビット選択ロジック１７５をさらに備える。修正された加算器５０は、２つの累算オペランドのマス・キャンセルの場合に総和を正規化するための近接経路総和回路１６５と、１ビット分のシフトしか必要としない総和を作り出す累算を実行するための遠隔経路総和回路１７０とをさらに備える。以下でさらに説明されているように、ＦＭＡ２サブ演算は、全体として遠隔経路総和回路１７０によって処理され得る。
【０１４５】
修正された乗算器
【０１４６】
図４及び５は、修正された乗算器４５の一実施形態のより詳細な図を示している。図４は、具体的に、修正された乗算器４５の経路決定ロジック１８５及び仮数乗算器モジュール１９０を示している。図５は、具体的に、修正された乗算器４５の指数結果生成器２６０及び丸めインジケータ生成器２４５を示している。
【０１４７】
図４に示されているように、経路決定ロジック１８５は、入力デコーダ２００と、入力オペランド・アナライザー１４０と、経路制御ロジック２１５と、アキュムレータ・アライメント及び注入ロジック回路２２０とを備える。仮数乗算器モジュール１９０は、図３の乗算器総和アレイ１２０を含み、これは図４において２つのコンポーネント、乗算器アレイ２３５及び部分積加算器２４０として表されている。仮数乗算器モジュール１９０は、最終加算器１２５と、先頭桁予測器及びエンコーダ１３５と、正規化シフター１３０とをさらに備える。
【０１４８】
図５に示されているように、指数結果生成器２６０は、ＰＮＥｘｐ生成器２６５、ＩＲＥｘｐ生成器２７０、及びアンダーフロー／オーバーフロー検出器２７５を備える。丸めインジケータ生成器２４５は、中間符号生成器２８０、結果ベクトル・ポート２８５、循環桁上げインジケータ２９０、スティッキー・ビット生成器２９５、及びラウンド・ビット生成器３００を備える。
【０１４９】
図４に再び注意を向けると、修正された乗算器４５は、１つ又は複数の入力ポート１９５を通じて入力マイクロ命令及びオペランド値を受け取る。ＦＭＡマイクロ命令の場合、修正された乗算器４５は、被乗数オペランドＡ、乗数オペランドＢ、及びアキュムレータ・オペランドＣを受け取り、これらの各々が、符号インジケータ又はビットと、仮数と、指数とを含む。図４及び６において、浮動小数点オペランドの符号、仮数、及び指数コンポーネントは、それぞれ、添字Ｓ、Ｍ、及びＥによって表される。したがって、たとえば、ＡＳ、ＡＭ、及びＡＥは、それぞれ、被乗数符号ビット、被乗数仮数、及び被乗数指数を表す。
【０１５０】
デコーダ２００は、ＦＭＡインジケータＭと２進数演算符号インジケータ（又はビット）ＰＳ及びＯＳとを生成するために入力マイクロ命令をデコードする。Ｍは、ＦＭＡマイクロ命令を受け取ることを表す。一実装において、Ａ＊Ｂ＋Ｃの形式のＦＭＡマイクロ命令は、結果として、２進数ゼロの正乗算／ベクトル負乗算符号演算子ＰＳと２進数ゼロの加算／減算演算子ＯＳとの生成を引き起こす。−Ａ＊Ｂ＋Ｃの形式の負乗算加算マイクロ命令は、結果として、２進数１のＰＳと２進数０のＯＳとを生じる。Ａ＊Ｂ−Ｃの形式の乗算減算マイクロ命令は、結果として、２進数０のＰＳと２進数１のＯＳとを生じ、−Ａ＊Ｂ−Ｃの形式のベクトル負乗算減算マイクロ命令は、結果として、２進数１のＰＳ及びＯＳを生じる。他のより単純な実装では、修正された乗算器４５は、ベクトル負マイクロ命令及び／又は減算マイクロ命令を直接サポートしないが、マイクロプロセッサ１０は、乗算加算／減算マイクロ命令を修正された乗算器４５にディスパッチする前に最初に１つ又は複数のオペランド、又は符号インジケータを適宜加法的に反転することによって同等の演算をサポートする。
【０１５１】
乗算器アレイ２３５は、被乗数及び乗数の仮数値ＡＭ及びＢＭを受け取り、ＡＭとＢＭとの部分積を算出する。（ＡＭ及びＢＭのいずれかの絶対値が１又は０である場合、乗算器アレイ２３５は、ＡＭとＢＭとの完全な積を構成するであろう単一の「部分積」値を作り出し得ることが理解されるであろう。）部分積は、部分積加算器２４０に供給され、部分積加算器２４０は、ＡとＢとのこうした部分積をこれらを総和する準備において受け取るための複数のエントリを備える。部分積加算器２４０内のエントリのうちの少なくとも１つは、アキュムレータ導出値ＣＸを受け取るように構成される。部分積加算器２４０の追加の説明は、入力オペランド・アナライザー１４０とアキュムレータ・アライメント及び注入ロジック２２０との説明の後、以下で再開する。
【０１５２】
入力オペランド・アナライザー１４０は、ＥｘｐＤｅｌｔａアナライザー・サブ回路２１０及びＥｆｆＳｕｂアナライザー・サブ回路２０５を備える。ＥｘｐＤｅｌｔａアナライザー・サブ回路２１０は、ＥｘｐＤｅｌｔａ（ＥｘｐΔ）値を生成する。一実装において、ＥｘｐＤｅｌｔａは、乗数及び被乗数入力指数値ＡＥ及びＢＥを総和し、加数又は減数入力指数値ＣＥを減算し、もしあれば、指数バイアス値ＥｘｐＢｉａｓを減算することによって計算される。ＥｘｐＢｉａｓ値を導入することで、ＡＥ、ＢＥ、及びＣＥが、たとえばＩＥＥＥ７５４によって要求されるような、バイアスされた指数を使用して表されるときに、被乗数Ａと乗数Ｂとの積が、アキュムレータＣのバイアスの２倍のバイアスを有するという事実を補正する。
【０１５３】
ＥｆｆＳｕｂアナライザー・サブ回路２０５は、オペランド符号インジケータＡＳ、ＢＳ、及びＣＳと、演算子符号インジケータＰＳ及びＯＳとを分析する。ＥｆｆＳｕｂアナライザー・サブ回路２０５は、ＦＭＡ演算が実効減算となるかどうかを指示する「ＥｆｆＳｕｂ」値を生成する。たとえば、実効減算は、ＡとＢとの積（又は負ベクトル乗算演算子についての負の積）に対するＣの演算子指定の加算又は減算が（ａ）ＡとＢとの積の絶対値の大きさ、又は（ｂ）Ｃの絶対値の大きさ、よりも小さい絶対値の大きさを有する結果Ｒをもたらす場合に、結果として生じる。数学的記法で表された場合、ＦＭＡ演算は、（｜Ｒ｜＜｜Ａ＊Ｂ｜）∨（｜Ｒ｜＜｜Ｃ｜）の場合に実効減算を構成し、ここで、ＲはＦＭＡ演算の結果である。ＥｆｆＳｕｂをＦＭＡ演算の結果に関して記述すると都合がよいが、ＥｆｆＳｕｂアナライザー・サブ回路２０５は、Ａ、Ｂ、及びＣの仮数、指数、又は大きさを評価することなく、符号インジケータＡＳ、ＢＳ、ＣＳ、ＰＳ、及びＯＳを分析することによってＥｆｆＳｕｂを事前に決定することが理解されるであろう。
【０１５４】
経路制御ロジック２１５は、入力オペランド・アナライザー１４０によって生成されるＥｘｐＤｅｌｔａ及びＥｆｆＳｕｂインジケータを受け取り、それに応答して、経路制御信号を生成し、その値は、ここでは変数Ｚによって参照される。経路制御信号Ｚは、Ｃの累算がＡとＢとの部分積とともに修正された乗算器４５内で実行されるかどうかを制御する。一実装において、Ｚを生成するために経路制御ロジック２１５が使用する基準は、図２に規定されている。一実装において、Ｚは、修正された乗算器４５が乗算加算演算の累算部分を実行するように選択されるすべてのケース（たとえば、１、２、及び４型）に対して２進数の１であり、ＥｘｐＤｅｌｔａ及びＥｆｆＳｕｂの他のすべての組合せ（たとえば、３及び５型）に対して２進数の０である。
【０１５５】
代替的に、経路制御ロジック２１５がＺを生成するために使用し得る基準は、Ｃが、ＡとＢとの積の大きさに対して、ＡとＢとの部分積総和のための総和ツリー内に提供される最上位ビットの左にＣの最上位ビットをシフトすることなく、総和ツリー内でＣのアライメントを行うことが可能な大きさを有するかどうかである。別の、又は代替的な基準は、ＦＭＡ演算を実行する際のマス・キャンセルに対する潜在的可能性があるかどうかである。さらに別の、又は代替的な基準は、ＡとＢとの積に対するＣの累算が、ＡとＢとの積とＣとをアライメントするのに必要なビットよりも少ないビットを必要とする丸められていない結果Ｒを生成するかどうかである。こうして、経路制御基準は修正された乗算器４５の設計に依存して変わり得ることが理解されるであろう。
【０１５６】
アキュムレータ・アライメント及び注入ロジック２２０回路は、経路制御ロジック２１５によって生成されたＺと、ＥｘｐＤｅｌｔａアナライザー・サブ回路２１０によって生成されたＥｘｐＤｅｌｔａと、シフト定数ＳＣと、アキュムレータ仮数値ＣＭとを受け取る。一実装において、アキュムレータ・アライメント及び注入ロジック２２０は、ＣＭのビット単位の否定
【０１５７】
［外１］
0006684713.tif 000002
と、加算／減算累算演算子インジケータＯＳとをさらに受け取る。別の実装では、アキュムレータ・アライメント及び注入ロジック２２０は、加算／減算累算演算子インジケータＯＳが修正された乗算器４５によって受け取られたマイクロ命令が乗算減算マイクロ命令であることを指示する場合に、ＣＭを選択的に加法的に反転する。
【０１５８】
これらの入力に応答して、アキュムレータ・アライメント及び注入ロジック２２０回路は、部分積加算器２４０内に注入する値ＣＸを作り出す。ＣＸを保持するアレイの幅は、２ｍ＋１、又は入力オペランド仮数ＡＭ、ＢＭ、及びＣＭの幅の２倍プラス１追加ビットである。
【０１５９】
Ｍが２進数の０であり、修正された乗算器４５がＦＭＡ１サブ演算ではなく通常の乗算演算を実行していることを示している場合、マルチプレクサ２３０が、ＣＸの代わりに丸め定数ＲＣを部分積加算器２４０内に注入して、修正された乗算器４５が従来の様式で丸められた結果を生成できるようにする。ＲＣの値は、命令によって指示された丸めの型（たとえば、切り上げへの０．５の丸め（round  half  up）、偶数への０．５の丸め（round  half  to  even）、０から遠い方への０．５の丸め（round  half  away  from  zero））と、さらに入力オペランドのビット・サイズ（たとえば、３２ビット対６４ビット）とに、部分的に依存する。一実装において、部分積加算器２４０は、２つの異なる丸め定数を使用して、２つの和を算出し、次いで、適切な和を選択する。修正された乗算器４５のＩＭａｎｔ出力は、これによって、通常の乗算演算の正しく丸められた仮数結果となる。
【０１６０】
Ｍが２進数の１で、Ｚが２進数の０であり、Ｃの累算が部分積加算器２４０によって実行されるべきでないことを指示している場合、一実装において、アキュムレータ・アライメント及び注入ロジック２２０回路は、ＣＸ＝０を設定し、マルチプレクサ２３０に、ＣＸを受け取るために提供される部分積加算器２４０内に０を注入することを行わせる。Ｍが２進数の１で、Ｚが２進数の１である場合、アキュムレータ・アライメント及び注入ロジック２２０は、ＥｘｐＤｅｌｔａ＋シフト定数ＳＣに等しい量だけＣＭを右シフトし、ＣＸを作り出す。一実装において、シフト定数ＳＣは２に等しく、これは、Ｃとの累算が修正された乗算器４５内で実行される図２の数空間内の最大の負のＥｘｐＤｅｌｔａに対応する。次いで、マルチプレクサ２３０は、その結果得られるＣＸを部分積加算器２４０に注入する。
【０１６１】
アキュムレータ・アライメント及び注入ロジック２２０は、さらに、スティッキー・コレクタを組み込む。部分積加算器２４０の総和ツリーの最下位ビット（least  significant  bit；ＬＳＢ）を超えてシフトされるアキュムレータＣＸの任意の部分が、ＸｔｒａＳｔｋｙビットとして保持され、丸めに使用される。ｍ個までのビットは、部分積加算器２４０のＬＳＢを超えてシフトされ得るので、ＸｔｒａＳｔｋｙビットは、ｍ幅の追加スティッキー・ビット・アレイとして転送され、スティッキー・ビットＳを計算する際に使用される。
【０１６２】
修正された乗算器４５の総和ロジックに再び注意すると、部分積加算器２４０は、いくつかの実装において総和ツリーであり、一実装において１つ又は複数の桁上げ保存加算器である。部分積加算器２４０は、部分積の総和の中にこの追加の選択的にビット単位否定されアライメントされたアキュムレータ入力値を含み、従来技術の乗算実行ユニットに典型的な方法に従い、提供された部分積総和ツリー内のビットの列上の桁上げ保存ベクトルごとに、丸められていない冗長表現又は和への総和を実行する。
【０１６３】
ここでもまた、部分積加算器２４０によって実行される数学演算は、Ｚの値に依存することが理解されるであろう。Ｚ＝１の場合、部分積加算器２４０は、ＡＭとＢＭとの部分積とＣＸの連帯累算（joint  accumulation）を実行する。Ｚ＝０の場合、部分積加算器２４０は、ＡＭとＢＭとの部分積の一次累算を実行する。一次又は連帯累算の結果として、部分積加算器２４０は、２ｍビット和ベクトル及び２ｍビット桁上げベクトルとして表される冗長２進数和を作り出す。
【０１６４】
桁上げ及び和ベクトルは、最終加算器１２５と先頭桁予測器及びエンコーダ１３５との両方に転送される。最終加算器１２５は、桁上げ先見加算器又は桁上げ伝播加算器であってよく、桁上げ及び和ベクトルを２ｍ＋１の幅を有する正又は負の事前正規化された丸められていない非冗長和ＰＮＭａｎｔにコンバートすることによって総和プロセスを完了する。最終加算器１２５は、ＰＮＭａｎｔが正か又は負かを指示する和符号ビットＳｕｍＳｇｎをさらに生成する。
【０１６５】
最終加算器１２５がＰＮＭａｎｔを生成するのと並行して、また同じ時間間隔の間に、先頭桁予測器及びエンコーダ１３５は、ＰＮＭａｎｔを正規化するためにキャンセルされる必要のある先頭桁の数を予想する。この配置構成は、最終加算器１２５による最終加算が正規化の後に行われる従来技術の分割された乗算加算ＦＭＡ設計に勝る利点をもたらす。これは、桁上げベクトルと和ベクトルの両方の正規化を必要とするものであり、今度は、先頭桁予測の出力を待たなければならない。好ましい一実装において、先頭桁予測器及びエンコーダ１３５は、正又は負のいずれかの和を収容する。
【０１６６】
一実装において、先頭桁予測は、１型計算に対してのみ実行される。先頭桁予測の選ばれた方法は、すでに説明されているように、また浮動小数点計算設計の実務における当業者に理解されるように、正又は負のいずれかの和を収容する。
【０１６７】
先頭桁予測器及びエンコーダ１３５は、最大１ビットの不正確さを有し得るので、これを補正するためのいくつかの通常使用される技術が正規化シフター１３０において、又はそれに関して提供され得る。一アプローチは、この不正確さを予想するロジックを提供することである。別のアプローチは、ＰＮＭａｎｔのＭＳＢがセットされているかいないかを調べ、それに応答して、ＰＮＭａｎｔの追加のシフトを選択することである。
【０１６８】
正規化シフター１３０は、最終加算器１２５から丸められていない非冗長和ＰＮＭａｎｔを受け取り、初期仮数値ＧＭａｎｔを生成する。ＣＸとの累算が部分積加算器２４０を使用して実行されている場合、ＧＭａｎｔは、ＣＸと、ＡＭとＢＭとの積との、絶対的な正規化された和である。他のすべての場合において、ＧＭａｎｔは、ＡＭとＢＭとの積の、絶対的な正規化された和である。
【０１６９】
ＧＭａｎｔを作り出すために、正規化シフター１３０は、ＰＮＭａｎｔが負であることをＳｕｍＳｇｎが指示する場合、ＰＮＭａｎｔをビット単位で否定する。負のＰＮＭａｎｔ値についての正規化シフター１３０のビット単位の否定は、以下でさらに説明されているように、記憶形式中間結果１５０の生成において有用である。さらに、正しい丸めを容易にすることにおいても有用である。修正された乗算器においてＰＮＭａｎｔを反転することによって、ＰＮＭａｎｔは、それが負数であったことを伝えることなく、修正された加算器に正数として提供され得る。これは、累算が和として実装され、簡素化された方式で丸められることを可能にする。
【０１７０】
さらに、正規化シフター１３０は、ＰＮＭａｎｔをＬＤＰ、ＥｆｆＳｕｂ、及びＺの関数である量だけ左シフトする。最上位先頭桁のキャンセルが生じない場合であっても、有用な標準化された記憶形式中間結果１５０を作り出し、正しいその後の丸めを可能にするために、０、１、又は２ビット位置によるＰＮＭａｎｔの左シフトが必要とされ得ることに留意されたい。左シフトからなる正規化は、算術的最上位桁を標準化された最も左の位置に移動し、それを以下でさらに説明されている記憶形式中間結果１５０で表現することができる。
【０１７１】
この実装は、従来技術のＦＭＡ設計に勝る３つの追加の利点を実現する。第１に、ＥｆｆＳｕｂに応答してアキュムレータ仮数上で２の補数が実行される場合に必要とされるであろうようには、追加の桁上げビットを部分積加算器２４０に挿入する必要がない。第２に、大きい符号ビット検出器／予測器モジュールを提供し非冗長部分積及びアキュムレータ総和値の冗長和及び桁上げベクトル表現を調べて選択的に補数をとる必要がない。第３に、追加の桁上げビット入力を提供し部分積及びアキュムレータ総和の上記ような選択的に補数をとられた和及び桁上げベクトル表現に対する正しい計算を保証する必要がない。
【０１７２】
次に、図５の指数結果生成器２６０を参照すると、ＰＮＥｘｐ生成器２６５は、事前正規化された指数値ＰＮＥｘｐを、被乗数及び乗数指数値ＡＥ及びＢＥと指数バイアスＥｘｐＢｉａｓとシフト定数ＳＣとの関数として生成する。より具体的には、一実装において、ＰＮＥｘｐは、シフト定数ＳＣにＡＥ＋ＢＥ−ＥｘｐＢｉａｓを加えたものとして計算される。
【０１７３】
ＩＲＥｘｐ生成器２７０は、正規化シフター１３０によって実行される仮数の正規化を考慮するようにＰＮＥｘｐをデクリメントし、ＰＮＥｘｐ及び先頭桁予測ＬＤＰの関数である中間結果指数ＩＲＥｘｐを生成する。次いで、ＩＲＥｘｐは結果ベクトル・ポート２８５に転送されるが、これは以下でさらに説明されている。
【０１７４】
中間符号生成器２８０は、中間結果符号インジケータＩＲＳｇｎを、ＥｆｆＳｕｂ、Ｅ、ＡＳ、ＢＳ、及びＺの関数として生成する。より具体的には、一実装において、ＩＲＳｇｎは、いくつかの場合において、被乗数符号ビットＡＳと乗数符号ビットＢＳとの排他的論理和（ＸＯＲ）として計算される。しかし、Ｚビットが２進数の１であり、累算が実行されていることを示し、ＥｆｆＳｕｂも２進数の１であり、実効減算であることを示し、Ｅビット値が２進数の０であり、循環桁上げが保留になっていないことを示す場合、ＩＲＳｇｎは、有利には、被乗数符号ビットＡＳと乗数符号ビットＢＳとの否定排他的論理和（ＸＮＯＲ）として計算される。別の言い方をすれば、中間符号は、一般的に、ＡとＢとの積の符号である。ＡとＢとの積の符号は、アキュムレータがＡとＢとの積よりも大きい大きさを有するときに逆にされ、乗算加算演算は実効減算であり、累算の完了は循環桁上げを必要としない（累算が負であるため）。
【０１７５】
中間結果符号インジケータＩＲＳｇｎは、マス・キャンセルが起こり得ることであるＦＭＡ計算についての最終符号ビットを決定するための革新的方法に寄与する。従来技術の分割経路ＦＭＡ実装とは異なり、本明細書で説明されている実装は、符号予測を必要とせず、また符号予測する際に採用されるかなり大きい回路を必要としない。代替的に、ゼロの結果の符号、又は符号付きゼロ入力による計算からの結果の符号は、容易に事前算出されることができ、たとえば、丸めモード入力を組み込む。
【０１７６】
結果ベクトル・ポート２８５は、中間結果指数ＩＲＥｘｐと中間結果符号ＩＲＳｇｎと中間結果仮数ＩＲＭａｎｔとを含む記憶形式中間結果ベクトルＩＲＶｅｃｔｏｒを出力する。記憶形式の一実装において、ＩＲＭａｎｔは、ＧＭａｎｔの最上位ｍビットを含み、ここで、ｍは、ターゲット・データ型の幅である。たとえば、ＩＥＥＥ  ｄｏｕｂｌｅ  ｄｏｕｂｌｅ精度計算において、結果ベクトル・ポート２８５は、ＩＲＶｅｃｔｏｒを、単一の符号ビットと１１個の指数ビットとＧＭａｎｔの最上位５３ビットとの組合せとして出力する。記憶形式の別の実装において、ｍは、仮数値ＡＭ、ＢＭ、及びＣＭの幅に等しい。さらに別の実装において、ｍは、仮数値ＡＭ、ＢＭ、及びＣＭの幅よりも大きい。
【０１７７】
これらの仮数ビットの単一の最上位ビットは、記憶されるときに暗黙の値を仮定することができ、これはＩＥＥＥ標準記憶形式に類似している。ＩＲＶｅｃｔｏｒは、ＲＯＢ３０のリネーム・レジスタ１５５などの共有メモリに保存され、したがって、他の命令実行ユニットによってアクセスされ、且つ／或いは結果転送バス４０上で別の命令実行ユニットに転送され得る。好ましい一実装において、ＩＲＶｅｃｔｏｒは、リネーム・レジスタ１５５に保存される。さらに、中間結果ベクトルは、ＲＯＢ３０内で永続的な割り当てを与えられ得るアーキテクチャ・レジスタと異なり、ＲＯＢ内で予測不可能な割り当てを与えられる。代替的実装において、ＩＲＶｅｃｔｏｒは、ＦＭＡ演算の最終的な丸められた結果が記憶されるデスティネーション・レジスタに一時的に保存される。
【０１７８】
次に、図５の丸めインジケータ生成器２４５を参照すると、アンダーフロー／オーバーフロー検出器２７５は、アンダーフロー・インジケータＵ１及びオーバーフロー・インジケータＯ１を、記憶形式中間結果１５０（以下でさらに説明されている）の精度又はターゲット・データ型に対応する、ＩＲＥｘｐと指数範囲値ＥｘｐＭｉｎ及びＥｘｐＭａｘとの関数として生成する。ＩＲＥｘｐが、このＦＭＡ計算のターゲット・データ型に対する表現可能な指数値の範囲よりも小さいか、又はリネーム・レジスタなどの中間記憶装置に対する表現可能な指数値の範囲よりも小さい場合、Ｕ１ビットは２進数の１を割り当てられる。そうでない場合、Ｕ１ビットは、２進数の０を割り当てられる。逆に、ＩＲＥｘｐが、このＦＭＡ計算のターゲット・データ型に対する表現可能な指数値の範囲よりも大きいか、又はリネーム・レジスタなどの中間記憶装置に対する表現可能な指数値の範囲よりも大きい場合、Ｏ１ビットは２進数の１を割り当てられる。そうでない場合、Ｏ１ビットは、２進数の０を割り当てられる。代替的に、Ｕ＆Ｏは、４つのとり得る指数範囲を表すようにエンコードされてもよく、そのエンコーディングのうちの少なくとも１つはアンダーフローを表し、そのうちの少なくとも１つはオーバーフローを表す。
【０１７９】
Ｕ１及びＯ１ビットは、通常の乗算器ユニットの従来の実装では、例外制御ロジックに報告される。しかし、ＦＭＡ１サブ演算を実行したときに、修正された乗算器４５は、Ｕ１及びＯ１ビットを中間記憶装置に出力し、これは、修正された加算器５０によって処理される。
【０１８０】
循環桁上げインジケータ生成器２９０は、保留中の循環桁上げインジケータＥ１ビットを、ＺとＥｆｆＳｕｂとＳｕｍＳｇｎとの関数として生成する。Ｅ１ビットは、事前に決定されているＺビットが２進数値の１を有し、部分積加算器２４０がＣとの累算を実行していたことを指示し、事前に決定されているＥｆｆＳｕｂ変数が結果として実効減算を引き起こした累算を指示し、ＳｕｍＳｇｎによって指示されているように正の丸められていない非冗長値ＰＮＭａｎｔが作り出された場合に、２進数の１を割り当てられる。他のすべてのケースにおいて、Ｅ１は２進数の０を割り当てられる。
【０１８１】
結果ベクトル・ポート２８５は、ＧＭａｎｔの最上位ビットを中間結果ベクトルの中間結果仮数として記憶するが、スティッキー・ビット生成器２９５及びラウンド・ビット生成器３００は、重要度の低い（たとえば、中間結果仮数の５３番目のビットを超える）残りのビットをラウンド（Ｒ１）及びスティッキー（Ｓ１）ビットに低減する。スティッキー・ビット生成器２９５は、スティッキー・ビットＳ１を、ＳｕｍＳｇｎとＺとＧＭａｎｔの最下位ビットとＥｆｆＳｕｂとＸｔｒａＳｔｋｙビットとの関数として生成する。ラウンド・ビット生成器３００は、ラウンド・ビットＲ１をＧＭａｎｔの最下位ビットの関数として生成する。
【０１８２】
丸めキャッシュ
【０１８３】
丸めビット・ポート３０５は、ビットＵ１、Ｏ１、Ｅ１、Ｓ１、Ｒ１、及びＺの各々を、それらがＦＭＡ演算の最終的な丸められた結果を生成するために別の命令実行ユニット（たとえば、修正された加算器５０）によってその後使用され得るように出力する。便宜上、これらのビットはすべて、これらのビットのうちのいくつかがＦＭＡ演算の最終出力を作り出す際に他の目的に使用され得るとしても、またこれらのビットのすべてが丸めに使用されるとは限らない場合であっても、本明細書では丸めビットと称される。たとえば、いくつかの実装において、Ｏ１ビットは、丸めに使用されない場合がある。これらのビットは、計算制御インジケータと交換可能に称され得る。ビットＺ及びＥは、たとえば、どのようなさらなる計算が実行される必要があるかを指示する。Ｕ及びＯは、たとえば、それらの計算がどのように進行すべきかを指示する。さらに、これらのビットは、修正された乗算器４５のＦＭＡ１サブ演算と修正された加算器５０のＦＭＡ２サブ演算との間の中断において計算状態情報を表し、適宜記憶するためのコンパクト形式を提供するので、計算中断状態値と称され得る。
【０１８４】
中間結果ベクトル及びアキュムレータ値Ｃと一緒に、これらのビットは、丸めビット、計算制御インジケータ、計算状態インジケータ、又は何か別の名で称されるとしても、その後の命令実行ユニットが必要とするあらゆるものを、そのオペランド値に加えて提供して、算術的に正しい最終結果を作り出す。別の言い方をすれば、中間結果ベクトルと丸めビットとの組合せは、ＦＭＡ演算の結果の算術的に正しい表現を作り出すために必要なあらゆるものを提供し、これは、有効桁において（in  significance）ターゲット・データ・サイズに低減された±Ａ＊Ｂ±Ｃの無限精度ＦＭＡ計算から生成された結果から区別不能なものである。
【０１８５】
本発明の好ましい一態様に合わせて、マイクロプロセッサ１０は、丸めビットを、計算制御インジケータ・ストアとも代替的に称され得る丸めキャッシュ５５内に記憶することと、丸めビットを転送バス４０上で別の命令実行ユニットに転送することの両方を実行するように構成される。代替的一実装において、マイクロプロセッサ１０は、丸めキャッシュ５５を有さず、その代わりに、丸めビットを転送バス４０上で別の命令実行ユニットに単に転送する。さらに別の代替的実装において、マイクロプロセッサ１０は、丸めビットを丸めキャッシュ５５内に記憶するが、丸めビットを一方の命令実行ユニットから別の命令実行ユニットに直接転送するための転送バス４０を備えていない。
【０１８６】
丸めキャッシュ５５とそれが記憶する丸めビット又は計算制御インジケータとは両方とも非アーキテクチャであり、このことは、命令セット・アーキテクチャ（ＩＳＡ）の一部として指定されたプログラマから見える信号ソースであるアーキテクチャ・レジスタ及びアーキテクチャ・インジケータ（浮動小数点ステータス・ワードなど）とは対照的に、それらがエンド・ユーザ・プログラマからは見えないことを意味する。
【０１８７】
本明細書で説明されている丸めビットの特定のセットは例示的であること、及び代替的実装が丸めビットの代替的セットを生成することが理解されるであろう。たとえば、代替的一実装では、修正された乗算器４５は、ガード・ビットＧ１を生成するガード・ビット生成器をさらに備える。別の実装では、修正された乗算器４５は、ゼロの結果の符号をさらに事前計算し、その値を丸めキャッシュに保存する。修正された加算器５０のその後の計算がゼロの結果をもたらした場合、修正された加算器５０は、保存されているゼロ結果符号インジケータを使用して最終的な符号付きゼロ結果を生成する。
【０１８８】
本発明の別の好ましい態様に合わせて、丸めキャッシュ５５は、修正された乗算器４５の外部にあるメモリ記憶装置である。しかしながら、代替的一実装では、丸めキャッシュ５５は、修正された乗算器４５に組み込まれる。
【０１８９】
より具体的には、丸めキャッシュ５５は、一実装において、結果バスから命令実行ユニットに独立して結合される。結果バスは、命令実行ユニットから結果を汎用記憶装置に伝達するが、丸めキャッシュ５５は、命令実行ユニットに結果バス５５とは独立して結合される。さらに、計算制御インジケータ記憶装置は、計算制御インジケータを記憶又はロードするように動作可能である命令にのみアクセス可能であり得る。したがって、丸めキャッシュ５５は、命令結果が出力される結果バスを通じてとは異なるメカニズムによって、たとえば、それ独自のワイヤのセットを通じてアクセスされる。丸めキャッシュ５５は、さらに、命令実行ユニットの入力オペランド・ポートを通じてとは異なるメカニズムを通じてアクセスされる。
【０１９０】
一実装において、丸めキャッシュ５５はフル・アソシアティブ・コンテンツ・アクセス可能メモリであり、並列にディスパッチされ得るＦＭＡ１マイクロ命令の最大数と同じ数の書き込みポートと、並列にディスパッチされ得るＦＭＡ２マイクロ命令の最大数と同じ数の読み出しポートと、ＦＭＡ１マイクロ命令がディスパッチされてから命令スケジューラが対応するＦＭＡ２マイクロ命令をディスパッチするまでの間に経過し得る時間の最大期間（単位はクロック・サイクル数）及び命令スケジューラの容量に関係する深さ（エントリの数）とを有する。別の実装では、丸めキャッシュ５５はより小さく、マイクロプロセッサ１０は、丸めキャッシュ５５内の空間がＦＭＡ１マイクロ命令の丸めビット結果を記憶するのに利用可能でない場合にＦＭＡ１マイクロ命令をリプレイするように構成される。
【０１９１】
キャッシュの各エントリは、キャッシュ・データだけでなくキャッシュ・データに関係するタグ値の記憶を提供する。タグ値は、記憶形式中間結果ベクトルを記憶するリネーム・レジスタ１５５を識別するために使用されるのと同じタグ値であってよい。マイクロプロセッサ１０が、第２のマイクロ命令のオペランドを用意／フェッチしているときに、これは、ＲＯＢインデックスを使用してリネーム・レジスタ１５５から記憶されている中間データを取り出し、そのまったく同じインデックスが、丸めキャッシュ５５に提供され、中間結果１５０の残りの部分（すなわち、計算制御インジケータ）を供給することになる。
【０１９２】
有利には、リネーム・レジスタ１５５に割り振られている量よりも著しく少ない量の物理的記憶装置エントリが丸めキャッシュ５５に割り振られ得る。リネーム・レジスタ１５５の数は、アウト・オブ・オーダー・マイクロプロセッサ又は設計において実行ユニットを飽和したままにするために必要なレジスタ名の数と実行中の（in  flight）マイクロ命令の数との関数である。対照的に、丸めキャッシュ５５のエントリの望ましい数は、実行中のＦＭＡマイクロ命令のあり得そうな数の関数にされ得る。したがって、非限定的な一例において、マイクロプロセッサ・コアは、６５個のリネーム・レジスタ１５５と、ただし並列で最大８つの算術計算を果たすように８個だけの丸めキャッシュ５５エントリとを提供し得る。
【０１９３】
代替的一実装は、中間結果ベクトルを記憶して丸めキャッシュ５５データに対する追加ビットを提供するために使用されるリネーム・レジスタ１５５を拡張する（すなわち、リネーム・レジスタを広くする）。これは、潜在的に空間の次善最適な使用であるが、それでも、本発明の範囲内にある。
【０１９４】
丸めビットは、中間結果ベクトルＩＲＶｅｃｔｏｒとともに、記憶形式中間結果１５０を一緒に含む。この説明されている記憶形式は、標準化されたデータ形式に従って丸められていない正規化された総和結果１４５の最上位ビット（そのうちの１つは暗黙値を有する）を保存及び／又は転送し、Ｅ１、Ｚ、Ｕ１、及びＯ１ビットとともに丸められていない正規化された総和結果１４５の残りの（低減された、又は低減されていない）ビットを保存及び／又は転送し、従来技術に勝る著しい利点をもたらす。
【０１９５】
修正された加算器
【０１９６】
次に、図６を参照すると、修正された加算器５０は、オペランド修正器１６０と、アライメント及び調整ロジック３３０と、単一ビット・オーバーフロー・シフト・ロジック３４５と対になる遠隔経路累算モジュール３４０とを備える。オペランド修正器１６０は、指数生成器３３５、符号生成器３６５、加算器丸めビット生成器３５０、ラウンド・ビット選択ロジック１７５、及び丸めモジュール１８０をさらに備える。
【０１９７】
一実装では、修正された加算器５０は、分割経路設計を備え、近接計算と遠隔計算とを別個に算出することを可能にすることが留意されるべきであり、これは、浮動小数点計算設計の実務における当業者に理解されるであろう。近接経路計算機能は、マルチビット正規化シフター（図示せず）と対になる近接経路累算モジュール（図示せず）を備えるが、そのような機能は、図６には示されていない。一実装において、入力指数値の差が集合｛−１、０、＋１｝内にある実効減算を構成するオペランドＣとＤとの通常の累算は、近接経路１６５に向けられる。他のすべての加算演算は、遠隔経路１７０に向けられる。有利には、本発明は、修正された加算器５０内のすべてのＦＭＡ２サブ演算が遠隔経路１７０に向けられることを可能にする。
【０１９８】
修正された加算器５０は、マイクロ命令と２つの入力オペランドとを受け取るための１つ又は複数の入力ポート３１０を備える。第１の入力オペランドＤは、被減数又は第１の加数である。第２のオペランドＣは、減数又は第２の加数である。浮動小数点実装では、各入力オペランドは、入力符号、指数、及び仮数値を含み、それぞれＳ、Ｅ、及びＭで表される。デコーダ３１５はマイクロ命令を解釈して、信号ＱＳを使用して、演算が加算であるか又は減算であるかを指示する。デコーダは、マイクロ命令（又はマイクロ命令によって指定されたオペランド参照）をさらに解釈して、信号Ｍにより、修正された加算器５０がＦＭＡ２サブ演算を実行すべきである専用マイクロ演算をマイクロ命令が指令するかどうかを指示する。
【０１９９】
修正された加算器５０が、ＦＭＡ２サブ演算を実行するタスクを課されたときに、修正された加算器５０は、対応するＦＭＡ１サブ演算を実行した修正された乗算器４５によってすでに生成されている中間結果ベクトルＩＲＶｅｃｔｏｒを受け取る。中間結果ベクトルＩＲＶｅｃｔｏｒは、幅がｍビットしかないので、修正された加算器５０は、ｍビットよりも広い仮数を受け入れ又は処理するように修正される必要がなく、一実装ではそのように修正されない。したがって、修正された加算器５０の内部データ経路、累算モジュール３４０、及び他の回路は、より広い形式で提示されるＩＲＶｅｃｔｏｒである必要があり又はそうであった場合よりも単純で、効率的である。また、マス・キャンセルに対する潜在的可能性を伴う累算は、修正された乗算器４５によって行われるので、ＦＭＡ結果を正しく計算するために修正された加算器５０の近接／マス・キャンセル経路に加えなければならない丸めロジックはない。
【０２００】
一実装において、修正された加算器５０は、リネーム・レジスタ１５５からＩＲＶｅｃｔｏｒを受け取る。別の実装では、ＩＲＶｅｃｔｏｒは、転送バス４０から受け取られる。図６に例示されている実装では、ＩＲＶｅｃｔｏｒは、オペランドＤとして受け取られ得る。修正された加算器５０は、他のオペランドとして、アキュムレータ値Ｃを受け取る。
【０２０１】
Ｍが、修正された加算器５０がＦＭＡ２サブ演算を実行するタスクを課されていることを指示する場合、オペランド修正器１６０は、Ｚが２進数の１であり、Ｃの累算が修正された乗算器４５で実行されていることを指示するときに、１つの入力オペランドの一部を２進数の０に等しくなるように設定する。一実装において、指数、仮数、及び符号フィールドＣＥ、ＣＭ、及びＣＳの各々は、０に修正される。別の実装では、指数及び仮数フィールドＣＥ及びＣＭのみが２進数の０に修正され、オペランド符号ＣＳは保持される。その結果、修正された加算器５０は、加数Ｄと２進数符号付き０とを総和する。
【０２０２】
２進数の１のＭのビットは、さらに、修正された加算器５０に、修正された乗算器４５によって生成され、記憶形式中間結果１５０に組み込まれた丸めビットを受け取るように、信号で伝える。
【０２０３】
他のすべてのケース、すなわち、Ｚが２進数の０である場合、又はＭが２進数の０である場合で、修正された加算器５０が従来の累算演算のタスクを課されていることを指示するとき、オペランド修正器１６０は、従来の浮動小数点加算に必要な可能性があるもの以外の指数及び仮数フィールドＣＥ及びＣＭを修正しない。
【０２０４】
一実装において、オペランド修正器１６０は、Ｚの値を受け取ってＣＭと０との間、及びＣＥと０との間で選択する一対のマルチプレクサを備える。選択された値は、図６上でＣＭ＊及びＣＥ＊として表される。次いで、アライメント及び調整ロジック３３０は、選択された値ＣＭ＊及び第１のオペランド仮数ＤＭのアライメント及び／又は調整を行う。
【０２０５】
次に、遠隔経路累算モジュール３４０は、ＣＭ＊とＤＭとを総和する。一実装において、累算モジュール３４０は、和とインクリメントされた和とを提供するデュアル和加算器である。また、一実装では、累算モジュール３４０は、１の補数の方法論を使用して実効減算を実行するように動作可能である。その和が仮数フィールド内に１ビットのオーバーフローを作り出す場合、オーバーフロー・シフト・ロジック３４５が、和を１ビットだけ条件付きシフトし、結果の値を丸められるように準備する。
【０２０６】
指数生成器３３５は、選択された指数値ＣＥ＊と第１のオペランド指数ＤＥとオーバーフロー・シフト・ロジック３４５によって作り出されるシフト量とを使用して最終指数ＦＥｘｐを生成する。
【０２０７】
符号生成器３６５は、最終符号ＦＳｇｎを、第１及び第２のオペランド符号ＣＳ及びＤＳと加算／減算演算子ＱＳと総和結果の符号との関数として生成する。
【０２０８】
図示されていない別の実装において、オペランド修正器１６０は、加算器がＦＭＡ２サブ演算を実行していること及びＺが２進数の１であることを入力デコーダが指示し、Ｃとの累算がすでに実行されていることを指示するときに、総和ロジックを静止状態に保持しながら、第１のオペランドＤを丸めモジュール１８０に直接転送させるセレクタ・ロジックで置換される。
【０２０９】
修正された加算器５０内のロジックは、それ独自の、丸めビットＲ２、Ｓ２、Ｕ２、Ｏ２、及びＥ２のセットを生成する。修正された加算器５０がＦＭＡ２サブ演算を実行するタスクを課されていることをＭが指示するときに、修正された加算器５０は、ＦＭＡ１サブ演算を実行した修正された乗算器４５によって事前に生成されている複数の丸めビットＲ１、Ｓ１、Ｕ１、Ｏ１、Ｚ、及びＥ１をさらに受け取る。
【０２１０】
Ｍが２進数の１であるケースについては、ラウンド・ビット選択ロジック１７５は、修正された乗算器４５からの丸めビットＥ１、Ｒ１、及びＳ１、修正された加算器５０からの丸めビットＥ２、Ｒ２、及びＳ２、又はこれら２つの何らかの混合若しくは組合せが、最終的な丸められた仮数結果を生成するために加算器の丸めモジュール１８０によって使用されるかどうかを決定する。たとえば、実行されている演算がＦＭＡ２サブ演算でない場合（すなわち、Ｍ＝０）、丸めモジュール１８０は、加算器生成丸めビットＥ２、Ｒ２、及びＳ２を使用する。代替的に、累算が、修正された乗算器４５で行われており（すなわち、Ｍ＝１及びＺ＝１）、アンダーフローがなかった場合（すなわち、ＵＭ＝０）、選択された乗算器生成丸めビットＥ１、Ｒ１、及びＳ１は、最終的な丸められた結果を作り出すために丸めモジュール１８０によって必要とされるあらゆるものを提供する。
【０２１１】
可変位置丸めモジュール１８０は、修正された加算器５０の遠隔計算機能の一部として提供され、一実装では、１の補数の実効減算から結果として得られる正の差の丸めを収容し、それに加えて、また異なる仕方で、実効減算ではない加算から結果として得られる正の和の丸めを収容する。丸めモジュール１８０は、選択されたラウンド・ビットＲｘとスティッキー・ビットＳｘともし提供されていればガード・ビットＧｘ（図示せず）とを、従来のユニタリ加算／減算ユニットがそのようなビットを処理する方式と似た方式で処理する。しかしながら、丸めモジュール１８０は、少なくとも１つの補助入力、すなわち、１の補数の実効減算が修正された乗算器４５によって実行された場合に循環桁上げ補正が必要であることを指示し得る、選択された循環桁上げビットＥｘを受け入れるように、従来の設計から修正される。選択されたＲｘ、Ｓｘ、及びＥｘ入力を使用することで、丸めモジュール１８０は、中間結果ベクトルと符号付き０との和を正しく丸めて、正しい、ＩＥＥＥ準拠結果を作り出すが、これは浮動小数点計算設計の実務における当業者に理解されるであろう。
【０２１２】
上で指摘されているように、修正された加算器５０は、いくつかの型の従来の累算演算を実行するために近接経路１６５を必要とし得るが、本明細書で説明されているＦＭＡ演算を実行するのに近接経路１６５を必要としない。したがって、本明細書で説明されている型のＦＭＡ演算を実行するときに、近接経路ロジック１６５は、ＦＭＡ計算中に節電するため静止状態に保持され得る。
【０２１３】
第１及び第２のＦＭＡサブ演算
【０２１４】
図７〜１０は、第１のＦＭＡサブ演算（ＦＭＡ１）及びその後の第２のＦＭＡサブ演算（ＦＭＡ２）を使用して非アトミック分割経路積和計算を実行する方法の一実施形態を示しており、これにおいて、ＦＭＡ２サブ演算は、第１のＦＭＡ１サブ演算に時間的にも物理的にも束縛されない。
【０２１５】
図７は、ＦＭＡ１サブ演算の経路決定部分を示している。ブロック４０８において、ＦＭＡ１サブ演算は、ＥｆｆＳｕｂ変数を決定する。２進数の１のＥｆｆＳｕｂは、乗算器オペランドの積へのアキュムレータ・オペランドの累算が結果として実効減算をもたらすかどうかを指示する。ブロック４１１において、ＦＭＡ１サブ演算は、アキュムレータ・オペランドのビット単位の否定を選択的に引き起こす。ブロック４１４において、ＦＭＡ１サブ演算は、ＥｘｐＤｅｌｔａを計算する。ＥｘｐＤｅｌｔａは、アキュムレータ指数及び指数バイアスによって低減される乗数及び被乗数指数の和に等しい。ＥｘｐＤｅｌｔａは、加算を目的とする積仮数とアキュムレータ仮数との相対的アライメントだけでなく、ＥｆｆＳｕｂ変数と一緒に、アキュムレータ・オペランドとの累算がＦＭＡ１サブ演算によって実行されるかどうかも決定する。
【０２１６】
ブロック４１７において、ＦＭＡ１サブ演算は、経路制御信号Ｚを決定する。２進数の１の値は、アキュムレータ・オペランドとの総和が、修正された乗算器４５回路を使用して、ＦＭＡ１サブ演算において実行されることを指示する。一実装において、ＦＭＡ１サブ演算は、ＥｘｐＤｅｌｔａが負の１以上である場合にＺに２進数の１を割り当て、さらに、ＥｆｆＳｕｂが２進数の１であり且つＥｘｐＤｅｌｔａが負の２である場合にＺに２進数の１を割り当てる。他の実装では、ＥｘｐＤｅｌｔａ及びＥｆｆＳｕｂの数空間を異なる仕方で切り分け得る。
【０２１７】
図８は、ＦＭＡ１サブ演算の乗算及び条件付き累算部分を示す機能ブロック図である。ブロック４２０において、ＦＭＡ１サブ演算は、累算オペランドのための累算経路を選択する。Ｚが２進数の０である場合、ブロック４２６において、ＦＭＡ１サブ演算は、アキュムレータ・オペランドをさらに累算することなく、乗算器オペランドの部分積の総和を計算する。代替的に、Ｚが２進数の１である場合、ブロック４２３において、ＦＭＡ１サブ演算は、選択的に補数をとられたアキュムレータ仮数をＥｘｐＤｅｌｔａ値の関数である量だけアライメントするが、これは一実装ではＥｘｐＤｅｌｔａにシフト定数を加えた値に等しい。
【０２１８】
ブロック４２６／４２９において、ＦＭＡ１サブ演算は、（ａ）乗数及び被乗数オペランドの部分積（４２６）か、又は（ｂ）乗数及び被乗数オペランドの部分積とアキュムレータ・オペランド（４２９）かの、いずれかの第１の累算を実行する。ブロック４３２において、ＦＭＡ１サブ演算は、総和の最上位先頭桁の必要な任意のキャンセルを予想するために先頭桁予測を条件付きで実行する。先頭桁予測は、１型ＦＭＡ演算７５であるＦＭＡ演算上で調整され、ブロック４２９の総和の一部分と並列に実行される。代替的に、先頭桁予測ロジックは、ブロック４２６又はブロック４２９のいずれかによって作り出される結果に対して接続され、使用され得る。
【０２１９】
ブロック４２６又はブロック４２９及び４３２において実行されるアクションの結果として、ＦＭＡ１サブ演算は、丸められていない、非冗長正規化総和結果１４５を作り出す（ブロック４３５）。これから、ＦＭＡ１サブ演算は、記憶形式中間結果１５０を生成する（ブロック４３８）。記憶形式中間結果１５０が記憶されるか、又は転送バス４０にディスパッチされると、ＦＭＡ１サブ演算は完結し、ＦＭＡ演算に無関係であり得る他の演算を実行するようにＦＭＡ１サブ演算を実行したリソース（たとえば、修正された乗算器４５などの命令実行ユニット）を解放する。当業者であれば、これは連続的な段階を通じて複数の演算を同時に処理することができるパイプライン化された乗算器に等しく適用可能であることを理解するであろう。
【０２２０】
図９Ａ及び９Ｂは、記憶形式中間結果１５０を生成するプロセスをより詳しく示している。ブロック４４１において、ＦＭＡ１サブ演算は、実効減算を構成したアキュムレータ・オペランドとの累算に起因して循環桁上げ補正が保留中であるかどうかを決定する。ＺとＥｆｆＳｕｂの両方が２進数の１（すなわち、１型ＦＭＡ演算７５又は４型ＦＭＡ演算９０）であり、ブロック４３５からの丸められていない非冗長結果が正である場合、ＦＭＡ１サブ演算は、変数Ｅ１に２進数の１を割り当てる。
【０２２１】
ブロック４４４において、ＦＭＡ１サブ演算は、負の場合に、仮数をビット単位に否定することと、シフト演算を介して、標準化された記憶形式に仮数を正規化することによって、初期仮数結果（ＧＭａｎｔ）を作成する。
【０２２２】
ブロック４４７において、ＦＭＡ１サブ演算は、中間結果符号（ＩＲＳｇｎ）を生成する。Ｅが２進数の０であり、Ｚ及びＥｆｆＳｕｂが両方とも２進数の１である場合、ＩＲＳｇｎは、論理ＸＮＯＲ、又は被乗数及び乗数符号ビットである。そうでない場合、ＩＲＳｇｎは、被乗数及び乗数符号ビットの論理ＸＯＲである。
【０２２３】
ブロック４５３において、ＦＭＡ１サブ演算は、ＰＮＥｘｐを、ＳＣ＋乗数及び被乗数指数値の和からＥｘｐＢｉａｓを引いた値として生成する。
【０２２４】
ブロック４５６において、ＦＭＡ１サブ演算は、ＰＮＭａｎｔの正規化を考慮するようにＰＮＥｘｐを減じ、それによって、中間結果指数値（ＩＲＥｘｐ）を生成する。
【０２２５】
ブロック４５９において、ＦＭＡ１サブ演算は、中間アンダーフロー（Ｕ１）及び中間オーバーフロー（Ｏ１）ビットを決定する。
【０２２６】
ブロック４６２において、ＦＭＡ１サブ演算は、初期仮数（ＧＭａｎｔ）の最上位ビットから中間結果仮数（ＩＲＭａｎｔ）を作成する。
【０２２７】
ブロック４６５において、ＦＭＡ１サブ演算は、中間結果ベクトルＩＲｖｅｃｔｏｒを一緒に構成するＩＲＳｇｎ、ＩＲＭａｎｔ、及びＩＲＥｘｐを、リネーム・レジスタなどの記憶装置に保存する。
【０２２８】
ブロック４６８において、ＦＭＡ１サブ演算は、ＧＭａｎｔのＬＳＢ及び部分積加算器２４０のシフトアウトされたビット（ＸｔｒａＳｔｋｙ）を、ラウンド（Ｒ１）及びスティッキー（Ｓ１）ビットに、さらに代替的一実装ではガード・ビット（Ｇ１）に低減する。
【０２２９】
ブロック４７１において、ＦＭＡ１サブ演算は、Ｒ１、Ｓ１、Ｅ１、Ｚ、Ｕ１、及びＯ１ビットと、提供されていればＧ１ビットとを、丸めキャッシュ５５に記録する。
【０２３０】
図１０は、非アトミック分割経路ＦＭＡ計算の第２のＦＭＡサブ演算を示す機能ブロック図である。
【０２３１】
ブロック４７４において、ＦＭＡ２サブ演算は、リネーム・レジスタなどの記憶装置に事前に保存されている中間結果ベクトルＩＲｖｅｃｔｏｒを受け取る。代替的に、ＦＭＡ２サブ演算は、転送バスからＩＲＶｅｃｔｏｒを受け取る。
【０２３２】
ブロック４７７において、ＦＭＡ２サブ演算は、丸めキャッシュ５５などの記憶装置に事前に保存されている丸めビットを受け取る。代替的に、ＦＭＡ２サブ演算は、転送バスから丸めビットを受け取る。
【０２３３】
ブロック４８０において、ＦＭＡ２サブ演算は、アキュムレータ入力値を受け取る。
【０２３４】
判断ブロック４８３において、ＦＭＡ２サブ演算は、ブロック４７４で受け取られたＺビットを調べる。Ｚビットが２進数の１（又は真）であり、アキュムレータとの総和がすでにＦＭＡ１サブ演算によって実行されていることを指示している場合、流れはブロック４８６に進む。そうでなければ、流れはブロック４８９に進む。
【０２３５】
ブロック４８６において、ＦＭＡ２サブ演算は、アキュムレータ入力値の指数及び仮数フィールドをゼロに修正する。一実装において、ＦＭＡ２サブ演算は、入力アキュムレータの符号ビットを修正しない。その後、ブロック４９２において、ＦＭＡ２サブ演算は、中間結果ベクトルと符号付き０オペランドとの和を計算する。次いで、流れは、ブロック４９４に進む。
【０２３６】
ブロック４８９において、ＦＭＡ２サブ演算は、中間結果ベクトルとアキュムレータとの和を計算する。次いで、流れは、ブロック４９４に進む。
【０２３７】
ブロック４９４において、ＦＭＡ２サブ演算は、ＦＭＡ１サブ演算によって生成されたＺ、Ｕ１、及びＯ１ビットを、ＦＭＡ２サブ演算によって生成されたＵ２及びＯ２ビットとともに使用して、和の仮数を正しく丸めるために丸めビットＥ１、Ｅ２、Ｒ１、Ｒ２、Ｓ１、及びＳ２のうちのどれを使用すべきかを選択する。
【０２３８】
ブロック４９６において、ＦＭＡ２サブ演算は、選択された丸めビットを使用して和を正しく丸める。仮数丸めプロセスと並列に、ＦＭＡ２サブ演算は、ＩＲＥｘｐを選択的にインクリメントする（ブロック４９８）。この方式で、ＦＭＡ２サブ演算は、最終的な丸められた結果を作り出す。
【０２３９】
図７〜１０に示されているアクションの多くは、図示されている順序で実行される必要はないことが理解されるであろう。さらに、図７〜１０に示されているアクションのうちのいくつかは、互いに並列に実行され得る。
【０２４０】
計算型への適用
【０２４１】
この節では、上で説明されている様々な変数値の間の機能的関係が図２の計算の５つの異なる「型」にどのように適用されるかを説明する。この節では、ＰＮＭａｎｔの計算、符号、及び正規化と、各々のデータ型に関連するＥｆｆＳｕｂ、ＥｘｐＤｅｌｔａ、Ｚ、Ｅ、及びＩｎｔＳｇｎの値とに注目する。
【０２４２】
第１の型
【０２４３】
図２に示されているように、１型ＦＭＡ計算７５は、演算が実効減算を伴い（したがって、ＥｆｆＳｕｂ＝１）、ＣがＡとＢとの積に関して大きさが十分近く（たとえば、−２≦ＥｘｐＤｅｌｔａ≦１）、修正された乗算器４５がＣとの累算を実行するように選択され（したがって、Ｚ＝１）、その結果マス・キャンセルが生じ得る計算として特徴付けられる。
【０２４４】
累算が修正された乗算器４５において実行され、その結果、実効減算をもたらす（すなわち、ＥｆｆＳｕｂ＝１及びＺ＝１）ので、アキュムレータ・アライメント及び注入ロジック２２０は、部分積加算器２４０内に注入する前にアキュムレータ・オペランド仮数値ＣＭのビット単位の否定を引き起こし、且つ／或いは選択する。アキュムレータ・アライメント及び注入ロジック２２０は、ＥｘｐＤｅｌｔａを使用して、部分積加算器２４０内の部分積に対してアキュムレータ仮数をアライメントする。
【０２４５】
次いで、丸められていない非冗長値１４５（すなわち、ＰＮＭａｎｔ）への完全総和が、部分積の総和の中にこの追加の選択的にビット単位否定されアライメントされたアキュムレータ入力値を含む、従来技術の乗算実行ユニットに典型的な方法に従って実行される。したがって、ＰＮＭａｎｔは、１の補数形式で、乗数及び被乗数仮数値の積とアキュムレータ仮数値との間の算術的差を表す。
【０２４６】
ＰＮＭａｎｔは、正又は負であるものとしてよい。ＰＮＭａｎｔが正である場合、循環桁上げが必要であり、保留循環桁上げインジケータＥ１は２進数の１を割り当てられる。ＰＮＭａｎｔが負である場合、循環桁上げは不要であり、Ｅ１は２進数の０を割り当てられる。Ｅ１の割り当てられた値は、ＰＮＭａｎｔの関数であるだけでなく、１型計算７５に対するものであるときに２進数の１であるＺ及びＥｆｆＳｕｂ双方の関数でもあることが理解されるであろう。
【０２４７】
部分積及びアキュムレータ入力総和の一部と並列に、最上位先頭桁の任意の必要なキャンセルを予想するために先頭桁予測が実行される。前の方で指摘されたように、これは、好ましい一実装では、ＰＮＭａｎｔへの総和の間、最終加算器１２５に対して並列な回路において実行される。
【０２４８】
浮動小数点計算設計の実務における当業者によって理解されるように、先頭桁の減算キャンセルが生じていない場合でも、ＰＮＭａｎｔは、本発明によって説明され採用されている中間結果１５０のための所望の記憶形式とアライメントするために、ＰＮＥｘｐへのＳＣの寄与に従って０、１、又は２ビット位置の正規化を必要とし得る。マス・キャンセルが生じる場合、著しく多くのシフトが必要になり得る。さらに、ＰＮＭａｎｔが負である場合、値は、ビット単位で否定される。この選択的な正規化及びビット単位否定は、初期仮数値ＧＭａｎｔを作り出すためにＰＮＭａｎｔ上で実行され、その最上位ｍビットは中間結果仮数ＩＲＭａｎｔになる。
【０２４９】
中間結果符号ＩＲＳｇｎは、Ｅ１の値に依存して、被乗数符号ビットＡＳと乗数符号ビットＢＳとの論理ＸＯＲ又はＸＮＯＲのいずれかとして計算される。Ｅ１が２進数の１である場合、ＩＲＳｇｎは、被乗数符号ビットと乗数符号ビットとの排他的論理和（ＸＯＲ）として計算される。Ｅ１が２進数の０である場合、ＩＲＳｇｎは、有利に、被乗数符号ビットと乗数符号ビットとの排他的論理否定和（ＸＮＯＲ）として計算される。
【０２５０】
次に、ＦＭＡ２演算を参照すると、修正された加算器５０は、経路制御信号Ｚを含む、記憶され又は転送された丸めビットを受け取る。Ｚは１であるので、最終的な積和結果を作り出すために、中間結果ベクトルＩＲＶｅｃｔｏｒは、丸めと、潜在的に他のわずかな調整とを必要とする。一実装において、修正された加算器５０は、中間結果ベクトルＩＲＶｅｃｔｏｒを、供給される第２のオペランド、アキュムレータＣとに代わって、０オペランド（又は、別の実装では、２進数符号付き０オペランド）と総和する。
【０２５１】
最終的な処理の一部として、修正された加算器５０は、総和及び丸め完了の前に、より大きな数値範囲を包含するように、たとえば、ＦＭＡ演算のターゲット・データ型に対するアンダーフロー及びオーバーフロー指数範囲を包含するように、受け取られたＩＲＥｘｐを修正することができる。受け取られた値Ｚ＝１ビットに従って、修正された加算器５０は、大部分は従来型の、ＩＲＥｘｐのインクリメントを含み得るプロセスである方式で受け取られたＲ、Ｓ、Ｕ、Ｏ、及びＥビットを使用して、ＩＲＶｅｃｔｏｒを丸める。
【０２５２】
第２の型
【０２５３】
図２に示されているように、２型ＦＭＡ計算８０は、演算が実効減算を伴わず（したがって、ＥｆｆＳｕｂ＝０）、ＣがＡとＢとの積に関して大きさが十分小さく、修正された乗算器４５がＣとの累算を実行するように選択される（したがって、Ｚ＝１）計算として特徴付けられる。
【０２５４】
演算が結果として実効減算をもたらさないので（すなわち、ＥｆｆＳｕｂ＝０）、アキュムレータ・アライメント及び注入ロジック２２０は、部分積加算器２４０内に注入する前にアキュムレータ・オペランド仮数値ＣＭのビット単位の否定を引き起こし又は選択することをしない。
【０２５５】
アキュムレータ・アライメント及び注入ロジック２２０は、アキュムレータ仮数を部分積加算器２４０に注入して、ＥｘｐＤｅｌｔａを使用して部分積に対してアキュムレータ仮数をアライメントする。
【０２５６】
負の値のＰＮＭａｎｔは作り出されない。さらに、作り出されるＰＮＭａｎｔの正の値は、１の補数の減算の結果ではなく、したがって、循環桁上げ補正を必要としない。したがって、保留循環桁上げインジケータＥ１は、２進数の０を割り当てられる。
【０２５７】
これは、実効減算ではないので、先頭桁の減算マス・キャンセルは発生せず、その結果、そのようなキャンセルを予想するために先頭桁予測が実行される必要はない。代替的に、先頭桁予測は、ＰＮＥｘｐへのＳＣの寄与に従って０、１、又は２ビット位置の必要な正規化を予想するために使用され得る。
【０２５８】
Ａ及びＢの積と、Ｃとの総和は、浮動小数点計算設計の実務における当業者には理解されるであろうが、他の場合に乗数と被乗数との積が有するであろうよりも１桁位置大きい算術有効桁又は重みを有する算術的オーバーフローを作り出し得る。その結果、本発明によって説明され採用されている中間結果のための所望の記憶形式でその値をアライメントするために、ＰＮＭａｎｔの０、１、又は２ビット位置の正規化が必要な場合がある。この正規化は、初期仮数値ＧＭａｎｔを作り出し、その最上位ｍビットは中間結果仮数ＩＲＭａｎｔになる。
【０２５９】
事前正規化された指数ＰＮＥｘｐは、最初に入力乗数及び被乗数指数値を加算し、次いで任意の指数バイアス値を減算し、最後にＺ＝１となる最も負のＥｘｐＤｅｌｔａに従ってＳＣ＝２を加算することによって計算される。図２が２型計算について示しているように、Ｃの大きさは、ＡとＢとの積の大きさよりも著しく大きくはなく、したがって、その結果得られる和は入力アキュムレータ以上となる。
【０２６０】
演算は実効減算ではないので（すなわち、ＥｆｆＳｕｂ＝０）、中間結果符号ＩＲＳｇｎは、被乗数符号ビットＡＳと乗数符号ビットＢＳとの論理ＸＯＲとして計算される。
【０２６１】
次に、ＦＭＡ２演算を参照すると、修正された加算器５０は、経路制御信号Ｚを含む、記憶され又は転送された丸めビットを受け取る。Ｚは２進数の１であるので、最終的な積和結果を作り出すために、中間結果ベクトルＩＲＶｅｃｔｏｒは、わずかな何らかの最終処理、主として丸めを必要とする。一実装において、修正された加算器５０は、中間結果ベクトルＩＲＶｅｃｔｏｒを、供給される第２のオペランド、アキュムレータＣとに代わって、０オペランド（又は、別の実装では、２進数符号付き０オペランド）と総和する。
【０２６２】
最終的な処理の一部として、修正された加算器５０は、より大きな数値範囲を包含するように、たとえば、ＦＭＡ演算のターゲット・データ型に対するアンダーフロー及びオーバーフロー指数範囲を包含するように、ＩＲＥｘｐを修正することができる。修正された加算器５０は、大部分は従来型の、ＩＲＥｘｐのインクリメントを含み得るプロセスである方式でＩＲＶｅｃｔｏｒを丸めて、最終的な正しい結果を作り出す。
【０２６３】
第３の型
【０２６４】
図２に示されているように、３型ＦＭＡ計算８５は、演算が実効減算を伴わず（したがって、ＥｆｆＳｕｂ＝０）、ＣがＡとＢとの積に関して十分に大きく、修正された加算器５０がＣとの累算を実行するように選択される（したがって、Ｚ＝０）計算として特徴付けられる。
【０２６５】
したがって、ＥｆｆＳｕｂは、２進数の０である。さらに、経路制御信号Ｚは、２進数の０であり、アキュムレータ・オペランドとの総和が実行されないことを指定する。また、Ｚ及びＥｆｆＳｕｂは、両方とも２進数の０なので、保留循環桁上げインジケータＥ１は、２進数の０を割り当てられる。
【０２６６】
Ｚは２進数の０なので、アキュムレータ・アライメント及び注入ロジック２２０は、乗算器ユニット部分積総和ツリー内のアキュムレータ入力の仮数をアライメントしない。代替的に、アキュムレータ・アライメント及び注入ロジック２２０は、そのようなアライメントされた入力に算術的値０を持たせる。
【０２６７】
次いで、丸められていない非冗長値への部分積の完全総和は、入力アキュムレータ仮数値を含まない、従来技術の乗算実行ユニットに典型的な方法に従って実行される。このＦＭＡ型は、実効減算ではないので（すなわち、ＥｆｆＳｕｂ＝０）、総和は、正のＰＮＭａｎｔを作り出し、これはＳｕｍＳｇｎによって指示される。それに加えて、ＰＮＭａｎｔの正の値は、１の補数の減算の結果ではなく、したがって、循環桁上げ補正を必要としない。
【０２６８】
これは、実効減算ではないので、先頭桁の減算マス・キャンセルは発生せず、その結果、そのようなキャンセルを予想するために先頭桁予測が実行されはしない。
【０２６９】
ＡとＢとの積は、乗数及び被乗数仮数の積内に１桁位置の算術的オーバーフローを作り出し得る。その結果、正の丸められていない非冗長値の０又は１ビット位置の正規化が、本発明によって説明され採用されている所望の中間結果形式とその値をアライメントするために必要な場合がある。この正規化は、初期仮数値ＧＭａｎｔを作り出し、その最上位ｍビットは中間結果仮数ＩＲＭａｎｔになる。
【０２７０】
事前に決定されている経路制御信号Ｚは２進数の０であり、累算が実行されていないことを指示するので、中間結果符号ＩＲＳｇｎは、被乗数符号ビットＡＳと乗数符号ビットＢＳとの論理ＸＯＲとして計算される。
【０２７１】
次に、ＦＭＡ２演算を参照すると、修正された加算器５０は、Ｚを含む、記憶され又は転送された丸めビットを受け取る。Ｚは２進数の０なので、修正された加算器５０は、中間結果ベクトル、第１のオペランドを、アキュムレータＣ、第２のオペランドと総和させる。
【０２７２】
この累算を実行する前に、修正された加算器５０は、より大きな数値範囲を包含するように、たとえば、ＦＭＡ演算のターゲット・データ型に対するアンダーフロー及びオーバーフロー指数範囲を包含するように、ＩＲＥｘｐを修正することができる。これは、アキュムレータ値が結果を支配する３型計算８５なので、ＩＲＥｘｐは、アキュムレータ入力指数値よりも小さくなる。
【０２７３】
有利には、これは、修正された加算器５０の２つのオペランドの遠隔経路累算を可能にする。遠隔経路累算では、より小さい指数値を有するオペランドの仮数は、アライメントの間に右にシフトされる。次いで、所望の丸めビットを超えてこうしてシフトされた仮数ビットはいずれも、丸め計算に寄与する。アキュムレータは結果を支配するので、これは丸め計算に対するビットに寄与せず、必要な丸め計算を簡素化し得る。
【０２７４】
修正された加算器５０は、修正された加算器５０によって実行される演算の一部として作り出されるＧ２（もしあれば）、Ｒ２、Ｓ２、及びＥ２（２進数値０を有する）丸めビットを、Ｒ１、Ｓ１、Ｅ１と併せて使用して、中間結果とアキュムレータ入力値との和を丸めて、浮動小数点計算設計の分野における当業者によって理解されるような、ＦＭＡ計算に対する最終的な丸められた正しい結果を作り出す。
【０２７５】
第４の型
【０２７６】
図２に示されているように、４型ＦＭＡ計算９０は、演算が実効減算を伴い（したがって、ＥｆｆＳｕｂ＝１）、ＣがＡとＢとの積に関して大きさが十分小さく、修正された乗算器４５がＣとの累算を実行するように選択される（したがって、Ｚ＝１）計算として特徴付けられる。
【０２７７】
累算は、修正された乗算器４５において実行され、その結果、実効減算（すなわち、ＥｆｆＳｕｂ＝１及びＺ＝１）をもたらすので、アキュムレータ・アライメント及び注入ロジック２２０は、部分積加算器２４０内に注入する前にアキュムレータ・オペランド仮数値ＣＭのビット単位の否定を引き起こし、且つ／或いは選択する。アキュムレータ・アライメント及び注入ロジック２２０は、ＥｘｐＤｅｌｔａを使用して、部分積加算器２４０内の部分積に対してアキュムレータ仮数をアライメントする。
【０２７８】
ＡとＢとの積は、Ｃよりも大きさが著しく大きいので、先頭桁の減算マス・キャンセルが発生せず、その結果、そのようなキャンセルを予想するために先頭桁予測が実行されはしない。
【０２７９】
さらに、総和プロセスは、正のＰＮＭａｎｔを作り出す。その結果、保留循環桁上げインジケータＥ１は、２進数の１を割り当てられ、その後、循環桁上げ補正が中間結果仮数に対して保留になっていることを修正された加算器５０に信号で伝える。
【０２８０】
浮動小数点計算設計の実務における当業者によって理解されるように、ＰＮＭａｎｔは、ＰＮＥｘｐへのＳＣの寄与に従って、本発明によって説明され採用されている中間結果に対する所望の記憶形式にアライメントするために、０、１、又は２ビット位置のシフト又は正規化を必要とし得る。次いで、この正規化は、丸められていない非冗長値上で選択的に実行され、初期仮数値ＧＭａｎｔを作り出し、その最上位ｍビットは中間結果仮数ＩＲＭａｎｔになる。
【０２８１】
４型計算９０は、実効減算を構成する（すなわち、ＥｆｆＳｕｂ＝１）Ｃの累算を伴い（すなわち、Ｚ＝１）、循環桁上げを必要とするコンテキストにおいて正のＰＮＭａｎｔを作り出すので（すなわち、Ｅ１は１）、中間結果符号ＩＲＳｇｎは、被乗数符号ビットＡＳと乗数符号ビットＢＳとの論理ＸＯＲとして計算される。
【０２８２】
次に、ＦＭＡ２演算を参照すると、修正された加算器５０は、経路制御信号Ｚを含む、記憶され又は転送された丸めビットを受け取る。Ｚは１であるので、最終的な積和結果を作り出すために、中間結果ベクトルＩＲＶｅｃｔｏｒは、わずかな何らかの最終処理、主として丸めを必要とする。一実装において、修正された加算器５０は、中間結果ベクトルを、供給される第２のオペランド、アキュムレータＣとに代わって、０オペランド（又は、別の実装では、２進数符号付き０オペランド）と総和させる。
【０２８３】
０（又は２進数符号付き０）とのこの累算を実行する前に、修正された加算器５０は、より大きな数値範囲を包含するように、たとえば、ＦＭＡ演算のターゲット・データ型に対するアンダーフロー及びオーバーフロー指数範囲を包含するように、ＩＲＥｘｐを修正することができる。
【０２８４】
Ｅビット２進数値が記憶形式中間結果１５０において受け取られたことに応答して、循環桁上げ補正が、第１のマイクロ命令の間に潜在的に実行される１の補数の実効減算に従って必要になることがある。そのため、Ｅビットは、修正された加算器５０実行ユニットの修正された丸めロジックへの補助入力として、記憶形式中間結果１５０のＧ１（もしあれば）、Ｒ１、及びＳ１ビットとともに提供される。
【０２８５】
次いで、修正された丸めロジックは、Ｇ１（もしあれば）、Ｒ１、Ｓ１、及びＥ１補助入力を使用して、中間結果ベクトルと符号付き０との和の正しい丸めを計算して、浮動小数点計算設計の実務における当業者に理解されるであろうような、ＦＭＡ計算のこの第４の型に対する正しい結果を作り出す。
【０２８６】
第５の型
【０２８７】
図２に示されているように、５型ＦＭＡ計算は、演算が実効減算を伴い（すなわち、ＥｆｆＳｕｂ＝１）、ＣがＡとＢとの積に関して大きさが十分に大きく、修正された加算器５０がＣとの累算を実行するように選択される（すなわち、Ｚ＝０）計算として特徴付けられる。
【０２８８】
累算は、修正された乗算器４５において実行されないので、アキュムレータ・アライメント及び注入ロジック２２０は、部分積加算器２４０総和ツリー内のＣＸをアライメントしない。或いは、アキュムレータ・アライメント及び注入ロジック２２０は、そのようなアライメントされた入力に算術的値０を持たせる。修正された乗算器４５は、従来技術の乗算実行ユニットに典型的な方法に従ってＰＮＭａｎｔへの部分積の完全な総和を実行する。
【０２８９】
Ｃとの累算は実行されていないので、先頭桁の減算マス・キャンセルは発生せず、その結果、それを予想するために先頭桁予測が実行されはしない。さらに、正のＰＮＭａｎｔが作り出されるが、それは１の補数の減算の結果ではない。したがって、これは循環桁上げ補正を必要とせず、Ｅ１は、２進数の０を割り当てられる。
【０２９０】
浮動小数点計算設計の実務における当業者によって理解されるように、ＰＮＭａｎｔは、中間結果１５０に対する所望の記憶形式にアライメントするために、０又は１ビット位置のシフト又は正規化を必要とし得る。この正規化は、初期仮数値ＧＭａｎｔを作り出し、その最上位ｍビットは中間結果仮数ＩＲＭａｎｔになる。
【０２９１】
５型計算は、Ｃとの累算を伴わない（すなわち、Ｚ＝０）ので、中間結果符号ＩＲＳｇｎは、被乗数符号ビットＡＳと乗数符号ビットＢＳとの論理ＸＯＲとして計算される。
【０２９２】
次に、ＦＭＡ２演算を参照すると、修正された加算器５０は、Ｚを含む、記憶され又は転送された丸めビットを受け取る。Ｚは０であるので、最終的な積和結果を作り出すために、中間結果ベクトルＩＲＶｅｃｔｏｒは、アキュムレータＣと累算される必要がある。
【０２９３】
これは、アキュムレータ値が結果を支配する５型計算なので、ＩＲＥｘｐは、アキュムレータ入力指数値よりも小さくなる。有利には、これは、修正された加算器５０の２つのオペランドの遠隔経路累算を可能にする。遠隔経路累算では、より小さい指数値を有するオペランドの仮数は、アライメントの間に右にシフトされる。次いで、所望の丸めビットを超えてこうしてシフトされた仮数ビットはいずれも、丸め計算に寄与する。アキュムレータは結果を支配するので、これは丸め計算に対するビットに寄与せず、必要な丸め計算を簡素化し得る。
【０２９４】
記憶形式中間結果１５０から受け取られた保留循環桁上げインジケータＥ１は、２進数の０なので、ＦＭＡ１演算から保留になっている循環桁上げ補正はない。そのため、Ｅ１ビットは、修正された加算器５０実行ユニットの修正された丸めロジックへの補助入力として、記憶形式中間結果１５０のＲ１及びＳ１ビット、並びにもしあればＧ１ビットとともに提供される。
【０２９５】
しかしながら、修正された加算器５０によって実行される累算は、１の補数の実効減算を別個に引き起こし得る。したがって、修正された丸めロジックは、循環桁上げを含め、丸めビットを生成して、中間結果ベクトルとアキュムレータ入力値との和の正しい丸めを計算して、浮動小数点計算設計の実務における当業者に理解されるであろうような、ＦＭＡ計算のこの第５の型に対する正しい結果を作り出す。
【０２９６】
専用マイクロ命令
【０２９７】
本発明の一実装の別の態様において、トランスレータ及び／又はマイクロコードＲＯＭ２０は、ＦＭＡ命令をそれぞれの乗算及び加算ユニットによってそれぞれ実行される第１及び第２の専用マイクロ命令に翻訳又は変換するように構成される。第１の（又はそれ以上の）専用マイクロ命令（複数可）は、たとえば、説明されている目的に適した最小の修正を有する従来技術の乗算ユニットに類似する乗算実行ユニットにおいて実行され得る。第２の（又はそれ以上の）専用マイクロ命令は、たとえば、説明されている目的に適した最小の修正を有する従来技術の加算器ユニットに類似する加算器実行ユニットにおいて実行され得る。
【０２９８】
図１１は、融合ＦＭＡ命令５３５の、第１及び第２の専用マイクロ命令５５３及び５７１へのＦＭＡ命令翻訳又は変換の一実施形態を示す図である。非限定的な例において、融合ＦＭＡ命令５３５は、命令ＯＰコード・フィールド５３８と、デスティネーション・フィールド５４１と、第１のオペランド（被乗数）フィールド５４４と、第２のオペランド（乗数）フィールド５４７と、第３のオペランド（アキュムレータ）フィールド５５０とを備える。
【０２９９】
ＦＭＡ命令５３５は、ＯＰコード・フィールド５３８によって指示されるように、乗算加算命令、乗算減算命令、負乗算加算命令、又は負乗算減算命令であり得る。ちょうどＦＭＡ命令５３５にいくつかの型があり得るように、第１の専用マイクロ命令５５３にもいくつかの型があり得、たとえば、乗算加算マイクロ命令、乗算減算マイクロ命令、負乗算加算マイクロ命令、及び負乗算減算マイクロ命令があり得る。これらの型の特性は、もしあれば、関連するマイクロ命令５５３のＯＰコード・フィールド５５６に反映される。
【０３００】
第１の専用マイクロ命令５５３は、第１から第５の型のＦＭＡ計算に必要な算術計算の何らかの部分の実行を指図する。実行される具体的な計算は、具体的な型に依存して変わる。第１の専用マイクロ命令５５３は、上で説明されている修正された乗算器４５などの、第１の実行ユニットにディスパッチされる。
【０３０１】
第２の専用マイクロ命令５７１は、第１から第５の型のＦＭＡ計算に必要な残りの算術計算の実行を指図する。第２の専用マイクロ命令５７１によって実行される具体的な計算も、具体的な型に依存して変わる。現在の実装において、第２の専用マイクロ命令５５３は、上で説明されている修正された加算器５０などの、第２の実行ユニットにディスパッチされる。第２の専用マイクロ命令５７１は、浮動小数点乗算加算融合演算又は浮動小数点乗算減算融合演算の有利な実装に従って、亜型、たとえば、Ａｄｄ又はＳｕｂｔｒａｃｔを有し得る。
【０３０２】
より具体的には、第１の専用マイクロ命令５５３は、第１、第２、及び第３の入力オペランド５４４、５４７、及び５５０を指定し、それぞれ、被乗数オペランドＡ、乗数オペランドＢ、及びアキュムレータ・オペランドＣと称され得る。第１の専用マイクロ命令は、デスティネーション・フィールド５５９をさらに指定することができ、一時レジスタを指すものとしてもよい。代替的に、デスティネーション・レジスタ５５９は暗黙的である。
【０３０３】
第１の専用マイクロ命令５５３は、ＦＭＡ１サブ演算の実行、すなわち、ＡとＢとの部分積の、さらに条件付きでＣとの累算を指図して、丸められていない記憶形式中間結果１５０を作り出す。第１の専用マイクロ命令５５３は、ＥｆｆＳｕｂ及びＥｘｐＤｅｌｔａ変数の決定をさらに指図し、ＥｘｐＤｅｌｔａ及びＥｆｆＳｕｂ値の所定のセットについて、２進数の１がＺビットに割り当てられるようにする。次いで、これは、いくつかの依存するプロセスを制御する。
【０３０４】
２進数の１のＺビットは、アキュムレータ・オペランドとの総和が第１の演算で実行され、第２のマイクロ命令によって実行される必要はないことを指定する。次いで、Ｚビット指定及びＥｘｐＤｅｌｔａは、部分積加算器２４０内の選択的に補数をとられたアキュムレータ仮数のアライメントを引き起こすために使用され、これはこの追加の項を受け入れるために適切な修正を有する。
【０３０５】
第１の専用マイクロ命令５５３は、さらに、丸められていない非冗長値（ＰＮＭａｎｔ）への完全総和が従来技術の乗算実行ユニットに典型的な方法に従って、ただし部分積の総和の中に追加の選択的にビット単位否定されアライメントされたアキュムレータ入力値ＣＭ、又は
【０３０６】
［外２］
0006684713.tif 000003
を含み、実行されることを指図する。ＰＮｕｍが負である場合、この条件は、信号ＳｕｍＳｇｎによって指摘される。
【０３０７】
第１の専用マイクロ命令５５３は、ＰＮＭａｎｔがシフトされビット単位で否定されることを指図して初期仮数値（ＧＭａｎｔ）を作り出し、その後、ＧＭａｎｔを低減して記憶形式中間結果１５０の中間結果仮数（ＩＭａｎｔ）を作り出すことが続く。こうして、中間結果仮数ＩＭａｎｔは、このＥｆｆＳｕｂ指定計算からの１の補数の算術差の正規化された絶対値であり、循環桁上げについてのいずれの補正も保留する。
【０３０８】
第１の専用マイクロ命令５５３は、中間結果指数値の計算をさらに指図する。第１に、事前正規化された指数値（ＰＮＥｘｐ）は、Ｚが２進数値１を割り当てられている最も負のＥｘｐＤｅｌｔａに従って、被乗数指数ＡＥと乗数指数ＢＥとの和を指数バイアスＥｘｐＢｉａｓによって低減し、次いでシフト定数ＳＣに加算したものに等しくなるように生成される。次いで、中間結果指数値（ＩＲＥｘｐ）が、ＰＮＥｘｐから生成され、正規化シフター１３０によって実行される仮数の正規化を考慮した量だけデクリメントされる。
【０３０９】
第１の専用マイクロ命令５５３は、中間結果符号ＩＲＳｇｎの計算をさらに指図する。中間結果符号ＩＲＳｇｎは、中間結果仮数ＩＲＭａｎｔ及び中間結果指数ＩＲＥｘｐと一緒に、記憶形式中間結果１５０ベクトルＩＲＶｅｃｔｏｒを構成する。
【０３１０】
第１の専用マイクロ命令５５３は、Ｚに加えていくつかの丸めビットをさらに生成させる。中間結果仮数に組み込まれていないＧＭａｎｔの最下位ビットは、表現がラウンド（Ｒ）及びスティッキー（Ｓ）ビットに、及び一実装ではさらにガード（Ｇ）ビットに低減される。部分積加算器２４０が、ＡとＢとの部分積と、Ｃとを累算しており、演算が正のＰＮＭａｎｔ値を作り出した実効減算であった場合に、２進数の１が循環桁上げビットＥに割り当てられ、循環桁上げを実行する必要があることを指示する。第１の専用マイクロ命令は、中間アンダーフロー（Ｕ）及び中間オーバーフロー（Ｏ）ビットをさらに決定させる。
【０３１１】
最後に、第１の専用命令５５３は、一実装では、記憶形式中間結果１５０ベクトルＩＲＶｅｃｔｏｒをメモリに記憶させ、別の実装では、それを転送させ、またさらに別の実装では、それを記憶させることと転送させることの両方を行わせる。同様に、第１の専用命令５５３は、一実装では、丸めビットをメモリに記憶させ、別の実装では、それを転送させ、また別の実装では、それを記憶させることと転送させることの両方を行わせる。これは、第１の専用命令を実行するタスクを課されている実行ユニットが、第１のＦＭＡマイクロ命令が実行されてから第２のＦＭＡマイクロ命令が実行されるまでの間にＦＭＡ演算に無関係の他の演算を実行することを可能にする。
【０３１２】
第２の専用マイクロ命令５７１は、ＯＰコード５７４を提供し、第１及び第２の入力加算器オペランド５８０及び５８３をそれぞれ指定する。第２の専用マイクロ命令５７１は、ＦＭＡ２演算を実行させる。これは、Ｃが第１の専用マイクロ命令５７１によって累算されなかった場合、中間結果仮数とＣとの条件付き累算を含む。第２の専用マイクロ命令５７１は、ＦＭＡ演算の最終的な丸められた結果の生成をさらに引き起こす。
【０３１３】
第１のアキュムレータ・オペランド５８０は、その値として、第１の専用マイクロ命令５５３によって生成される積を有し、第２のアキュムレータ・オペランド５８３は、その値として、第１の専用マイクロ命令によって指定された同じアキュムレータ値を有する。一実装において、第２の専用マイクロ命令５７１のソース・オペランド・フィールド５８０は、第１の専用マイクロ命令５５３のデスティネーション・フィールド５５９と同じレジスタを指す。第２の専用マイクロ命令５７１は、デスティネーション・レジスタ５７７をさらに指定し、これは一実装においてＦＭＡ命令５３５のデスティネーション・フィールド５４１と同じレジスタである。
【０３１４】
結び
【０３１５】
現在の実装は、実効減算の間における１の補数の累算への対応を記述しているが、代替的実装は、実効減算の間に２の補数の累算を採用するように本発明の方法を適応させることができ、これは算術又は浮動小数点計算設計の実務における当業者によって理解されるであろう。
【０３１６】
いくつかの利点が、本発明によって実現される。これは、特にＩＥＥＥ丸め要求条件に関して、他の実装では明確に実現されていない望ましいＦＭＡ算術結果のＩＥＥＥ仕様互換性及び正しさを実現する。
【０３１７】
本発明は、別個に利用可能な乗算器及び加算器ユニットを保持することによって命令ディスパッチに対する独立算術機能ユニットの可用性を最大化し、これにより、コンピュータ・プロセッサが特定の投資実装コストに対してＩＬＰをより完全に活用することを可能にする。別の言い方をすれば、これは、最小限実装されたハードウェアの同時利用を最大にし、望む通り最も頻繁に期待される計算を可能な限り高速に完了すること可能にする。これは、算術結果のスループットを向上させる。これが可能になるのは、特別な型の必要な第１及び第２の（又はさらに多くの）マイクロ命令が、時間的に及び／又は物理的に切り離された方式でディスパッチされ実行され得るからである。こうして、ＦＭＡの第１のそのようなマイクロ命令が乗算機能ユニットにディスパッチされる間に、第２又はそれ以上の無関係のマイクロ命令（複数可）が１つ又は複数の加算器機能ユニットに同時にディスパッチされ得る。
【０３１８】
同様に、ＦＭＡの第２のそのようなマイクロ命令が加算器機能ユニットにディスパッチされる間に、乗算機能性を必要とする任意の他の無関係のマイクロ命令が乗算機能ユニットに同時にディスパッチされ得る。
【０３１９】
その結果、そのような提供される乗算及び加算器機能ユニットの数は、要求システムの望ましい全体的性能及びＩＬＰ能力に応じて、完全に揃えたモノリシックＦＭＡハードウェアに比べて機能ユニット当たり少ない実装コストで、より柔軟に構成され得る。コンピュータ・システムがマイクロ命令を再順序付けする能力がこうして高められ、コスト及び電力消費量が低減される。
【０３２０】
本発明は、他の設計では必要となるような命令待ち時間を最短にするために大きな特殊目的のハードウェアを使用することを必要としない。他のＦＭＡハードウェア実装は、予想正規化、予想加算、予想符号計算、及び複雑な丸め回路などの、大きい複雑な回路機能性を必要とする。これらの複雑な要素は、多くの場合、最終設計を実現する際にクリティカルなタイミング経路となり、計算の間にさらなる電力を消費し、実装するために貴重な物理的回路空間を必要とする。
【０３２１】
本発明は、従来技術によって提供され得るようにより単純な加算又は乗算命令に対する待ち時間を最短にするために大きなＦＭＡハードウェア内に特別なバイパス回路又はモダリティの実装を行うことを必要としない。
【０３２２】
本発明の他の実装は、特別な型の第１のマイクロ命令の実行の間に算術演算をより多く、又はより少なく実行することができ、また特別な型の第２のマイクロ命令の実行の間に算術演算をより多く、又はより少なく実行することができ、このことは、これらのマイクロ命令の計算の割り振りが異なり得ることを意味する。したがって、これらの他の実装は、別個の必要な算出ユニットのいずれかに／いずれにも修正を、より多く、又はより少なく提供することができる。したがって、これらの他の実装では、中間結果のより多く、又はより少なくを丸めキャッシュに記憶することができ、また同様に、中間結果のより多く、又はより少なくを第２のマイクロ命令に転送するステップを備えることができる。
【０３２３】
他の実装では、説明されている丸めキャッシュを、アドレス可能レジスタ・ビット、コンテンツ・アクセシブル・メモリ（ＣＡＭ）、キュー・ストレージ、又はマッピング関数として実装することができる。
【０３２４】
他の実装は、第１のマイクロ命令を実行するための複数の別個のハードウェア又は実行ユニットを提供することができ、且つ／或いは第２のマイクロ命令を実行するための複数の別個のハードウェア又は実行ユニットを提供することができる。同様に、これらは、たとえば、区別できるソース・コード命令ストリーム若しくはデータ・ストリームのため、又はマルチコア・コンピュータ・プロセッサ実装のために、複数の丸めキャッシュを、そうするのが有利であれば提供し得る。
【０３２５】
現在の実装は、スーパースカラー、アウト・オブ・オーダー命令ディスパッチに適応されているが、他の実装は、たとえば、丸めキャッシュを取り除くことによって、及び提供されている乗算計算ユニットから別個の加算器計算ユニットへのデータ転送ネットワークを用意することによって、インオーダー命令ディスパッチに適合され得る。ＦＭＡトランザクション型の例示的な区分化、及び本発明によって実証されている必要最小限のハードウェア修正は、インオーダー命令ディスパッチへのそのような適応において有利なものとなるであろう。本明細書では５つのＦＭＡの型への区分化を説明しているが、より少ない、より多い、及び／又は異なる型への区分化も、本発明の範囲内にある。
【０３２６】
また、本明細書では、ＦＭＡ演算を実行するための区別できる修正された乗算及び修正された加算器ユニットを説明しているが、本発明の別の実装では、積和ユニットは、第１の積和命令に応答して第１の積和サブ演算を実行し、結果を外部メモリ記憶装置に保存し、第２の積和命令に応答して第２の積和サブ演算を実行するように構成される。
【０３２７】
本発明は、ときにはベクトル命令型又はベクトルＦＭＡ計算とも称される、ＦＭＡ計算のＳＩＭＤ実装に適用可能であり、その場合、修正された乗算器の複数の事例及び修正された加算器の複数の事例があるであろう。一実施形態において、単一の丸めキャッシュは、本発明のＳＩＭＤ適用のニーズに応える。別の実施形態では、複数の丸めキャッシュが、ＳＩＭＤ適用に応えるために用意される。
【０３２８】
本発明は、加算又は累算を組み込むか、又は加算又は累算が後に続く、乗算計算を必要とする浮動小数点融合乗算加算計算の実行に関係しているが、他の実装は、本発明の方法を、特に中間結果のいくつかの部分に対するキャッシュの使用に関して、２つよりも多い連鎖する算術演算を必要とする算出若しくは計算に、異なる算術演算に、又はそれらの算術演算を異なる順序で実行するステップに適用することができる。たとえば、これらの方法を、乗算乗算加算又は乗算加算加算の連鎖する計算などの、他の複合算術演算（すなわち、２つ以上の算術演算子又は３つ以上のオペランドを伴う算術演算）に適用して、算術演算の精度を高めるか、又は計算スループットを向上させることが望ましいことがある。さらに、本発明のいくつかの態様−たとえば、特定のビット位置に丸める整数演算の、第１及び第２のサブ演算へのサブ分割であって、その第１のサブ演算は丸められていない中間結果を作り出し、第２のサブ演算は丸められていない中間結果から丸められた最終結果を生成する、サブ分割−は、整数算術演算に適用可能である。したがって、他の実装では、異なるステータス・ビットを必要に応じてキャッシュ・メカニズムに記録し得る。
【０３２９】
本明細書は、便宜のために丸めビット及び他の内部ビットの使用を説明していること、及び本発明は、丸め関係又は計算制御変数のエンコードされた表現を含む、インジケータの他の形態に等しく適用可能であることが理解されるであろう。さらに、変数が「２進数の１」（「論理の１」とも称する）を有するものとして説明されている多くの場合において、本発明は、そのような変数が「２進数の０」（「論理の０」とも称する）を有するブール論理同等の代替的実施形態を包含し、これらの変数の他の表現をさらに包含する。同様に、変数が「２進数の０」を有するものとして説明されている場合、本発明は、そのような変数が「２進数の１」を有するブール論理同等の代替的実施形態を包含し、これらの変数の他の表現をさらに包含する。本明細書で使用されているように、累算という用語は、加法的な和及び加法的な差の両方を包含する方式で使用されることがさらに理解されるであろう。
【０３３０】
さらに、「命令」という用語は、「アーキテクチャ命令」及びこれらの翻訳又は変換先となり得る「マイクロ命令」の両方を包含することが理解されるであろう。同様に、「命令実行ユニット」という用語は、マイクロプロセッサが最初にマイクロ命令に翻訳又は変換することなくアーキテクチャ命令（すなわち、ＩＳＡマシン・コード）を直接実行する実施形態を排他的に意味するものではない。マイクロ命令は、命令の一種であるため、したがって「命令実行ユニット」は、マイクロプロセッサが最初にＩＳＡ命令をマイクロ命令に翻訳又は変換する実施形態をさらに包含し、命令実行ユニットは、マイクロ命令を実行することを常に、またそれだけを行う。
【０３３１】
本明細書では、「仮数」及び「仮数部」という用語は、交換可能に使用される。「初期結果」及び「中間結果」などの他の用語は、ＦＭＡ演算の異なるステージで作り出される結果及び表現を区別することを目的として使用される。また、本明細書では、一般的に、「記憶形式中間結果」を、中間結果「ベクトル」（数量を意味する）と複数の計算制御変数との両方を含むものとして言及する。これらの用語は、厳密に、又は衒学的にみなされるべきでなく、むしろ、実用主義的に、出願人の伝える意図に従い、異なる文脈において異なるものを意味し得ることを認識すべきである。
【０３３２】
また、図１及び３〜６に示されている機能ブロックは、モジュール、回路、サブ回路、ロジック、及びデジタル・ロジック及びマイクロプロセッサ設計の分野内で一般に使用されている他の言い回しとして交換可能に記述されて、配線、トランジスタ、及び／又は１つ又は複数の機能を実行する他の物理構造で具現化されるデジタル・ロジックを指定することができる。さらに、本発明は、本明細書で示されているのと異なる仕方で明細書において説明されている機能を分配する代替的実装を包含することが理解されるであろう。
【０３３３】
次の参照文献は、限定はしないが、ＦＭＡ設計における関連する概念を説明することと、説明されている本発明の情報を与えることとを含むすべての目的に関して参照により本明細書に組み込まれている。
【０３３４】
参照文献：
Ｈｏｋｅｎｅｋ，  Ｍｏｎｔｏｙｅ，  Ｃｏｏｋ，“Ｓｅｃｏｎｄ−Ｇｅｎｅｒａｔｉｏｎ  ＲＩＳＣ  Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  ｗｉｔｈ  Ｍｕｌｔｉｐｌｙ−  Ａｄｄ  Ｆｕｓｅｄ”，ＩＥＥＥ  Ｊｏｕｒｎａｌ  Ｏｆ  Ｓｏｌｉｄ−Ｓｔａｔｅ  Ｃｉｒｃｕｉｔｓ，  Ｖｏｌ  ２５，  Ｎｏ  ５，  Ｏｃｔ  １９９０．
Ｌａｎｇ，  Ｂｒｕｇｕｅｒａ，“Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ−Ｆｕｓｅｄ  ｗｉｔｈ  Ｒｅｄｕｃｅｄ  Ｌａｔｅｎｃｙ”，ＩＥＥＥ  Ｔｒａｎｓ  Ｏｎ  Ｃｏｍｐｕｔｅｒｓ，  Ｖｏｌ  ５３，  Ｎｏ  ８，  Ａｕｇ  ２００４．
Ｂｒｕｇｕｅｒａ，  Ｌａｎｇ，“Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ｆｕｓｅｄ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ：  Ｒｅｄｕｃｅｄ  Ｌａｔｅｎｃｙ  ｆｏｒ  Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ａｄｄｉｔｉｏｎ”，Ｐｕｂ  ＴＢＤ  −  Ｅｘａｃｔ  Ｔｉｔｌｅ  Ｉｍｐｏｒｔａｎｔ．
Ｖａｎｇａｌ，  Ｈｏｓｋｏｔｅ，  Ｂｏｒｋａｒ，  Ａｌｖａｎｐｏｕｒ，“Ａ  ６．２−ＧＦｌｏｐｓ  Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ｍｕｌｔｉｐｌｙ−Ａｃｃｕｍｕｌａｔｏｒ  Ｗｉｔｈ  Ｃｏｎｄｉｔｉｏｎａｌ  Ｎｏｒｍａｌｉｚａｔｉｏｎ”，ＩＥＥＥ  Ｊｏｕｒ．  Ｏｆ  Ｓｏｌｉｄ−Ｓｔａｔｅ  Ｃｉｒｃｕｉｔｓ，  Ｖｏｌ  ４１，  Ｎｏ  １０，  Ｏｃｔ  ２００６．
Ｇａｌａｌ，  Ｈｏｒｏｗｉｔｚ，“Ｅｎｅｒｇｙ−Ｅｆｆｉｃｉｅｎｔ  Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ｕｎｉｔ  Ｄｅｓｉｇｎ”，ＩＥＥＥ  Ｔｒａｎｓ  Ｏｎ  Ｃｏｍｐｕｔｅｒｓ  Ｖｏｌ  ６０，  Ｎｏ  ７，  Ｊｕｌｙ  ２０１１．
Ｓｒｉｎｉｖａｓａｎ，  Ｂｈｕｄｉｙａ，  Ｒａｍａｎａｒａｙａｎａｎ，  Ｂａｂｕ，  Ｊａｃｏｂ，  Ｍａｔｈｅｗ，  Ｋｒｉｓｈｎａｍｕｒｔｈｙ，  Ｅｒｒａｇｕｎｔｌａ，“Ｓｐｌｉｔ−ｐａｔｈ  Ｆｕｓｅｄ  Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｍｕｌｔｉｐｌｙ  Ａｃｃｕｍｕｌａｔｅ  （ＦＰＭＡＣ）”，２０１３  Ｓｙｍｐ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｉｔｈｍｅｔｉｃ  （ｐａｐｅｒ）．
Ｓｒｉｎｉｖａｓａｎ，  Ｂｈｕｄｉｙａ，  Ｒａｍａｎａｒａｙａｎａｎ，  Ｂａｂｕ，  Ｊａｃｏｂ，  Ｍａｔｈｅｗ，  Ｋｒｉｓｈｎａｍｕｒｔｈｙ，  Ｅｒｒａｇｕｎｔｌａ，“Ｓｐｌｉｔ−ｐａｔｈ  Ｆｕｓｅｄ  Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｍｕｌｔｉｐｌｙ  Ａｃｃｕｍｕｌａｔｅ  （ＦＰＭＡＣ）”，２０１４  Ｓｙｍｐ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｉｔｈｍｅｔｉｃ，  Ａｕｓｔｉｎ  ＴＸ，  （ｓｌｉｄｅｓ  ｆｒｏｍ  ｗｗｗ．ａｒｉｔｈｓｙｍｐｏｓｉｕｍ．ｏｒｇ）．
Ｓｒｉｎｉｖａｓａｎ，  Ｂｈｕｄｉｙａ，  Ｒａｍａｎａｒａｙａｎａｎ，  Ｂａｂｕ，  Ｊａｃｏｂ，  Ｍａｔｈｅｗ，  Ｋｒｉｓｈｎａｍｕｒｔｈｙ，  Ｅｒｒａｇｕｎｔｌａ，  Ｕｎｉｔｅｄ  Ｓｔａｔｅｓ  Ｐａｔｅｎｔ  ８，５７７，９４８  （Ｂ２），  Ｎｏｖ  ５，  ２０１３．
Ｑｕａｃｈ，  Ｆｌｙｎｎ，“Ｓｕｇｇｅｓｔｉｏｎｓ  Ｆｏｒ  Ｉｍｐｌｅｍｅｎｔｉｎｇ  Ａ  Ｆａｓｔ  ＩＥＥＥ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ−Ｆｕｓｅｄ  Ｉｎｓｔｒｕｃｔｉｏｎ”，（Ｓｔａｎｆｏｒｄ）  Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ  ＣＳＬ−ＴＲ−９１−４８３  Ｊｕｌｙ，  １９９１．
Ｓｅｉｄｅｌ，“Ｍｕｌｔｉｐｌｅ  Ｐａｔｈ  ＩＥＥＥ  Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ｆｕｓｅｄ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ”，ＩＥＥＥ  ２００４．
Ｈｕａｎｇ，  Ｓｈｅｎ，  Ｄａｉ，  Ｗａｎｇ，“Ａ  Ｎｅｗ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｆｏｒ  Ｍｕｌｔｉｐｌｅ−Ｐｒｅｃｉｓｉｏｎ  Ｆｌｏａｔｉｎｇ−  Ｐｏｉｎｔ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ  Ｆｕｓｅｄ  Ｕｎｉｔ  Ｄｅｓｉｇｎ”，Ｐｕｂ  ＴＢＤ，  Ｎａｔ’ｌ  Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｄｅｆｅｎｓｅ  Ｔｅｃｈ，  Ｃｈｉｎａ  （ａｆｔｅｒ）  ２００６．
Ｐａｉｄｉｍａｒｒｉ，  Ｃｅｖｒｅｒｏ，  Ｂｒｉｓｋ，  Ｉｅｎｎｅ，“ＦＰＧＡ  Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｏｆ  ａ  Ｓｉｎｇｌｅ−Ｐｒｅｃｉｓｉｏｎ  Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ｍｕｌｔｉｐｌｙ−Ａｃｃｕｍｕｌａｔｏｒ  ｗｉｔｈ  Ｓｉｎｇｌｅ−Ｃｙｃｌｅ  Ａｃｃｕｍｕｌａｔｉｏｎ”，Ｐｕｂ  ＴＢＤ．
Ｈｅｎｒｙ，  Ｅｌｌｉｏｔｔ，  Ｐａｒｋｓ，“Ｘ８７  Ｆｕｓｅｄ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ  Ｉｎｓｔｒｕｃｔｉｏｎ”，Ｕｎｉｔｅｄ  Ｓｔａｔｅｓ  Ｐａｔｅｎｔ  ７，９１７，５６８  （Ｂ２），  Ｍａｒ  ２９，  ２０１１．
Ｗａｌａａ  Ａｂｄ  Ｅｌ  Ａｚｉｚ  Ｉｂｒａｈｉｍ，“Ｂｉｎａｒｙ  Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｆｕｓｅｄ  Ｍｕｌｔｉｐｌｙ  Ａｄｄ  Ｕｎｉｔ”，Ｔｈｅｓｉｓ  Ｓｕｂｍｉｔｔｅｄ  ｔｏ  Ｃａｉｒｏ  Ｕｎｉｖｅｒｓｉｔｙ，  Ｇｉｚａ，  Ｅｇｙｐｔ，  ２０１２  （ｒｅｔｒ  ｆｒｏｍ  Ｇｏｏｇｌｅ）．
Ｑｕｉｎｅｌｌ，“Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ｆｕｓｅｄ  Ｍｕｌｔｉｐｌｙ−Ａｄｄ  Ａｒｃｈｉｔｅｃｔｕｒｅｓ”，Ｄｉｓｓｅｒｔａｔｉｏｎ  Ｐｒｅｓｅｎｔｅｄ  ｔｏ  Ｕｎｉｖ  Ｔｅｘａｓ  ａｔ  Ａｕｓｔｉｎ，  Ｍａｙ  ２００７，  （ｒｅｔｒ  ｆｒｏｍ  Ｇｏｏｇｌｅ）．
Ａｕｔｈｏｒ  Ｕｎｋｎｏｗｎ，“ＡＭＤ  Ａｔｈｌｏｎ  Ｐｒｏｃｅｓｓｏｒ  Ｆｌｏａｔｉｎｇ  Ｐｏｉｎｔ  Ｃａｐａｂｉｌｉｔｙ”，ＡＭＤ  Ｗｈｉｔｅ  Ｐａｐｅｒ  Ａｕｇ  ２８，  ２０００．
Ｃｏｒｎｅａ，  Ｈａｒｒｉｓｏｎ，  Ｔａｎｇ，“Ｉｎｔｅｌ  Ｉｔａｎｉｕｍ  Ｆｌｏａｔｉｎｇ−Ｐｏｉｎｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ”，Ｐｕｂ  ＴＢＤ．
Ｇｅｒｗｉｇ，  Ｗｅｔｔｅｒ，  Ｓｃｈｗａｒｚ，  Ｈａｅｓｓ，  Ｋｒｙｇｏｗｓｋｉ，  Ｆｌｅｉｓｃｈｅｒ，  Ｋｒｏｅｎｅｒ，“Ｔｈｅ  ＩＢＭ  ｅＳｅｒｖｅｒ  ｚ９９０  ｆｌｏａｔｉｎｇ−ｐｏｉｎｔ  ｕｎｉｔ”，ＩＢＭ  Ｊｏｕｒ  Ｒｅｓ  ＆  Ｄｅｖ  Ｖｏｌ  ４８  Ｎｏ  ３／４  Ｍａｙ，  Ｊｕｌｙ  ２００４．
Ｗａｉｔ，“ＩＢＭ  ＰｏｗｅｒＰＣ  ４４０  ＦＰＵ  ｗｉｔｈ  ｃｏｍｐｌｅｘ−ａｒｉｔｈｍｅｔｉｃ  ｅｘｔｅｎｓｉｏｎｓ”，ＩＢＭ  Ｊｏｕｒ  Ｒｅｓ  ＆  Ｄｅｖ  Ｖｏｌ  ４９  Ｎｏ  ２／３  Ｍａｒｃｈ，  Ｍａｙ  ２００５．
Ｃｈａｔｔｅｒｊｅｅ，  Ｂａｃｈｅｇａ，  ｅｔ  ａｌ，“Ｄｅｓｉｇｎ  ａｎｄ  ｅｘｐｌｏｉｔａｔｉｏｎ  ｏｆ  ａ  ｈｉｇｈ−ｐｅｒｆｏｒｍａｎｃｅ  ＳＩＭＤ  ｆｌｏａｔｉｎｇ−ｐｏｉｎｔ  ｕｎｉｔ  ｆｏｒ  Ｂｌｕｅ  Ｇｅｎｅ／Ｌ”，ＩＢＭ  Ｊｏｕｒ  Ｒｅｓ  ＆  Ｄｅｖ，  Ｖｏｌ  ４９  Ｎｏ  ２／３  Ｍａｒｃｈ，  Ｍａｙ  ２００５．
【図１】
0006684713.tif 000004
【図２】
0006684713.tif 000005
【図３】
0006684713.tif 000006
【図４】
0006684713.tif 000007
【図５】
0006684713.tif 000008
【図６】
0006684713.tif 000009
【図７】
0006684713.tif 000010
【図８】
0006684713.tif 000011
【図９Ａ】
0006684713.tif 000012
【図９Ｂ】
0006684713.tif 000013
【図１０】
0006684713.tif 000014
【図１１】
0006684713.tif 000015