(57)【要約】【課題】１２８ビット拡張オペランドに対する融合積和浮動小数点演算を行うユニットを提供。【解決手段】３つの１２８ビット拡張オペランド（１００、１０２、１０４）に対して融合積和演算を実行するように構成される浮動小数点ユニット（１０）であって、（ｉ）１１３×１１３ビット乗算器（１４）と、（ｉｉ）左シフタ（１８）と、（ｉｉｉ）右シフタ（２０）と、（ｉｖ）３対２コンプレッサ（２５）を備える選択回路（２４）と、（ｖ）選択回路（２４）からのデータフローに接続された加算器（２６）と、（ｖｉ）加算器（２６）の桁上げ出力（９１）を選択回路（２４）に接続する第１のフィードバック経路（３６）と、（ｖｉｉ）中間拡張結果（８６）をシフタ（１８、２０）を通過させるための、加算器（２６）の出力をシフタ（１８、２０）に接続する第２のフィードバック経路（３８）とを備える、浮動小数点ユニット（１０）。【選択図】図１
2020514862.tif 000002
【特許請求の範囲】
【請求項１】
３つの１２８ビット拡張オペランド（１００、１０２、１０４）に対して融合積和演算を実行するように構成される浮動小数点ユニット（１０）であって、
（ｉ）乗算オペランド（１００、１０２）のデータフローに接続され、２２６ビット桁上げ保存積（７０）を反復して計算するように構成された１１３×１１３ビット乗算器（１４）であって、合計項（７１）および桁上げ項（７４）が、前記積（７０）の上部（７２、７５）および下部（７３、７６）に分離される、前記１１３×１１３ビット乗算器（１４）と、
（ｉｉ）加数（７７）の揃えた部分を送り出すように構成された、加数オペランド（１０４）の上部（７８）および下部（７９）のデータフローに接続された左シフタ（１８）と、
（ｉｉｉ）前記加数（７７）の前記揃えた部分を送り出すように構成された、前記加数オペランド（１０４）の前記上部（７８）および前記下部（７９）の前記データフローに接続された右シフタ（２０）と、
（ｉｖ）前記合計項（７１）および前記桁上げ項（７４）を前記加数（７７）と結合させるための３対２コンプレッサ（２５）を備える前記シフタ（１８、２０）の出力に接続された選択回路（２４）と、
（ｖ）前記選択回路（２４）からのデータフローに接続された加算器（２６）と、
（ｖｉ）その後の２つの加算において前記上部（７２、７５、７８）および前記下部（７３、７６、７９）に対する中間積（７０）と揃えた加数（７７）の拡張加法演算を行うために、前記加算器（２６）の桁上げ出力（９１）を前記選択回路（２４）に接続する第１のフィードバック経路（３６）と、
（ｖｉｉ）正規化のために中間拡張結果（８６）を前記シフタ（１８、２０）を通過させるため、および丸めのために前記加算器（２６）を再度通過させるために、前記加算器（２６）の前記出力を前記シフタ（１８、２０）に接続する第２のフィードバック経路（３８）と
を備える、浮動小数点ユニット（１０）。
【請求項２】
さらに前記左シフタ（１８）がビット循環機能を有する右シフタとして実装される、請求項１に記載のユニット。
【請求項３】
さらに前記乗算器（１４）が、前記積（７０）の前記上部（７２、７５）および前記下部（７３、７６）を順次計算するように構成される、請求項１に記載のユニット。
【請求項４】
前記加数オペランド（１０４）のアンパック回路（１２）に接続される先頭ゼロ・カウンタ（２２）をさらに備える、請求項１に記載のユニット。
【請求項５】
前記加数（７７）の先頭ゼロの数を引いた前記加数（７７）の指数が、定数を加えた前記積（７０）の指数より大きい場合、前記積（７０）を前記加数（７７）に揃えるための手段をさらに備え、ここで前記定数が少なくとも２である、請求項１に記載のユニット。
【請求項６】
非正規加数（７７）の場合、前記加数（７７）を正規化するための手段をさらに備える、請求項５に記載のユニット。
【請求項７】
前記積（７０）の前記上部（７２、７５）および前記下部（７３、７６）を前記加数（７７）に揃え、単一のデータ部にマージするための手段をさらに備える、請求項５に記載のユニット。
【請求項８】
前記加数（７７）の先頭ゼロの数を引いた前記加数（７７）の指数が、定数を加えた前記積（７０）の指数以下である場合、前記左シフタまたは前記右シフタあるいはその両方（１８、２０）によって前記加数（７７）を前記積（７０）に揃えるための手段をさらに備える、ここで前記定数が少なくとも２である、請求項１に記載のユニット。
【請求項９】
前記左シフタまたは前記右シフタあるいはその両方（１８、２０）によって、前記加数（７７）の前記上部（７８）および前記下部（７９）を別々に前記積（７０）に揃えるための手段をさらに備える、請求項８に記載のユニット。
【請求項１０】
効果的な加法演算の場合、前記選択回路（２４）および前記３対２コンプレッサ（２５）によって、前記積（７０）および前記加数（７７）の前記上部（７２、７５、７８）および前記下部（７３、７６、７９）を加算するための手段をさらに備える、請求項８に記載のユニット。
【請求項１１】
エンド・アラウンド桁上げ演算の結果がゼロに等しい場合、前記積（７０）と否定加数（７７）の否定合計を結果（８６）として計算すること、そうでなければ、効果的な減法演算の場合、前記積（７０）と、１を加えた前記否定加数（７７）との合計を結果（８６）として計算すること、を行うための手段をさらに備える、請求項８に記載のユニット。
【請求項１２】
３つの１２８ビット拡張オペランド（１００、１０２、１０４）に対して融合積和演算を実行するように構成される浮動小数点ユニット（１０）で２進浮動小数点算術計算を行うための方法であって、
（ｉ）１１３×１１３ビット乗算器（１４）によって前記乗算オペランド（１００、１０２）の２２６ビット桁上げ保存積（７０）を反復して計算することであって、合計項（７１）および桁上げ項（７４）が、前記積（７０）の上部（７２、７５）および下部（７３、７６）に分離される、前記計算することと、
（ｉｉ）データフローに接続された左シフタ（１８）によって加数（７７）の揃えた部分を送り出すように構成された、加数オペランド（１０４）の少なくとも上部（７８）および下部（７９）を揃えることと、
（ｉｉｉ）前記加数（７７）の前記揃えた部分を送り出すように構成された、前記データフローに接続された右シフタ（２０）によって前記加数オペランド（１０４）の前記上部（７８）および前記下部（７９）を揃えることと、
（ｉｖ）３対２コンプレッサ（２５）を備える前記シフタ（１８、２０）の出力に接続された選択回路（２４）によって前記２つの積項（７１、７４）を前記加数（７７）と結合させることと、
（ｖ）前記選択回路（２４）からのデータフローに接続された加算器（２６）を動作させることと、
（ｖｉ）前記加算器（２６）の桁上げ出力（９１）を前記選択回路（２４）に接続する第１のフィードバック経路（３６）でその後の２つの加算において前記上部（７２、７５、７８）および前記下部（７３、７６、７９）に対する中間積（７０）と揃えた加数（７７）との拡張加算を行うことと、
（ｖｉｉ）正規化のために中間拡張結果（８６）を前記シフタ（１８、２０）を通過させること、および前記加算器（２６）の前記出力を前記シフタ（１８、２０）に接続する第２のフィードバック経路（３８）において丸めのために前記加算器（２６）を再度通過させることと
を含む、方法。
【請求項１３】
ビット循環機能を有する右シフタによって左シフト動作をさらに行う、請求項１２に記載の方法。
【請求項１４】
前記乗算器（１４）によって前記積（７０）の前記上部（７２、７５）および前記下部（７３、７６）を順次さらに計算する、請求項１２に記載の方法。
【請求項１５】
前記加数オペランド（１０４）のアンパック回路（１２）に接続される先頭ゼロ・カウンタ（２２）によって先頭ゼロの数をさらに計算する、請求項１２に記載の方法。
【請求項１６】
前記加数（７７）の先頭ゼロの数を引いた前記加数（７７）の指数が、定数を加えた前記積（７０）の指数より大きい場合、前記積（７０）を前記加数（７７）にさらに揃え、ここで前記定数が少なくとも２である、請求項１２に記載の方法。
【請求項１７】
非正規加数（７７）の場合、前記加数（７７）をさらに正規化する、請求項１６に記載の方法。
【請求項１８】
前記積（７０）の前記上部（７２、７５）および前記下部（７３、７６）を加数（７７）にさらに揃え、単一のデータ部にマージすることを行う、請求項１６に記載の方法。
【請求項１９】
前記加数（７７）の先頭ゼロの数を引いた前記加数（７７）の指数が、定数を加えた前記積（７０）の指数以下である場合、前記左シフタまたは前記右シフタあるいはその両方（１８、２０）によって前記加数（７７）を前記積（７０）にさらに揃え、ここで前記定数が少なくとも２である、請求項１２に記載の方法。
【請求項２０】
前記左シフタまたは前記右シフタあるいはその両方（１８、２０）によって前記加数（７７）の前記上部（７８）および前記下部（７９）を前記積（７０）に別々にさらに揃える、請求項１９に記載の方法。
【請求項２１】
さらに、効果的な加法演算の場合、前記選択回路（２４）および前記３対２コンプレッサ（２５）によって、前記積（７０）の前記上部（７２、７５、７８）および前記下部（７３、７６、７９）と前記加数（７７）を加算する、請求項１９に記載の方法。
【請求項２２】
さらに、効果的な減法演算の場合、エンド・アラウンド桁上げ演算の結果がゼロに等しい場合、前記積（７０）と負の加数（７７）との負の合計を結果（８６）として計算すること、そうでなければ、前記積（７０）と、１を加えた前記負の加数（７７）との合計を結果（８６）として計算すること、を行う、請求項１９に記載の方法。
【請求項２３】
３つの１２８ビット拡張オペランド（１００、１０２、１０４）に対して融合積和演算を実行するように構成される浮動小数点ユニット（１０）で２進浮動小数点算術計算を行うためのコンピュータ・プログラム製品であって、具体化されるプログラム命令を保持するコンピュータ可読ストレージ媒体を備え、前記プログラム命令が、
（ｉ）１１３×１１３ビット乗算器（１４）によって前記乗算オペランド（１００、１０２）の２２６ビット桁上げ保存積（７０）を反復して計算することであって、合計項（７１）および桁上げ項（７４）が、前記積（７０）の上部（７２、７５）および下部（７３、７６）に分離される、前記計算することと、
（ｉｉ）データフローに接続された左シフタ（１８）によって加数（７７）の揃えた部分を送り出すように構成された、加数オペランド（１０４）の少なくとも上部（７８）および下部（７９）を揃えることと、
（ｉｉｉ）前記加数（７７）の前記揃えた部分を送り出すように構成された、前記データフローに接続された右シフタ（２０）によって前記加数オペランド（１０４）の前記上部（７８）および前記下部（７９）を揃えることと、
（ｉｖ）３対２コンプレッサ（２５）を備える前記シフタ（１８、２０）の出力に接続された選択回路（２４）によって前記２つの積項（７１、７４）を前記加数（７７）と結合させることと、
（ｖ）前記選択回路（２４）からのデータフローに接続された加算器（２６）を動作させることと、
（ｖｉ）前記加算器（２６）の桁上げ出力（９１）を前記選択回路（２４）に接続する第１のフィードバック経路（３６）でその後の２つの加算において前記上部（７２、７５、７８）および前記下部（７３、７６、７９）に対する中間積（７０）と揃えた加数（７７）との拡張加算を行うことと、
（ｖｉｉ）正規化のために中間拡張結果（８６）を前記シフタ（１８、２０）を通過させること、および前記加算器（２６）の前記出力を前記シフタ（１８、２０）に接続する第２のフィードバック経路（３８）において丸めのために前記加算器（２６）を再度通過させることと
を含む方法をコンピュータ・システム（２１２）に行わせる、前記コンピュータ・システム（２１２）によって実行可能な、コンピュータ・プログラム製品。
【請求項２４】
請求項１２ないし２２のいずれか一項に記載の方法を行うためのコンピュータ可読プログラム命令を備える、データ処理プログラム（２４０）の実行のためのデータ処理システム（２１０）。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にデータ処理システムに関し、詳細には１２８ビット拡張オペランドに対する融合積和（fused-multiply-add）浮動小数点演算を行うユニット、方法、システム、およびコンピュータ・プログラム製品に関する。
【背景技術】
【０００２】
IEEE-754-2008 Standard for Binary Floating Point Arithmetic, published in 2008は、乗算器を有する浮動小数点プロセッサなどの、コンピュータ・ハードウェアに一般に実装される浮動小数点データ・アーキテクチャを規定する。形式は、符号、符号なしバイアス指数部、および仮数部（significand）からなる。符号ビットは単一ビットであり、「Ｓ」で表現される。符号なしバイアス指数部は「ｅ」で表現され、例えば、単精度に対して長さ８ビット、倍精度に対して長さ１１ビット、および４倍精度に対して長さ１５ビットである。仮数部は例えば、単精度に対して長さ２４ビット、倍精度に対して長さ５３ビット、および４倍精度に対して長さ１１３ビットである。IEEE-754-2008 Standardによって定義されるように、仮数部の最上位ビット、すなわち、いわゆる暗黙ビットは、指数ビットからデコードされる。
【０００３】
浮動小数点算術処理を改良するために、現在のほとんどのプロセッサは、融合積和（以下においてＦＭＡ（fused-multiply-add）と略される）処理と呼ばれる処理を用いて、例えばＡ×Ｂ＋Ｃといった単一命令として実行するために、例えばＡ×Ｂといった浮動小数点乗法演算と、例えば＋Ｃといった浮動小数点加法演算を結合させ、ここで、Ａ、Ｂ、Ｃは、乗算積Ａ×Ｂ、およびＣと乗算積の合計のオペランドである。単一命令の中で２つの演算を行うことによって、ＦＭＡ処理は全体的な実行時間を減少させる。ＦＭＡ処理は、十分な精度で乗法演算と加法演算の両方が行われた後に丸められなければならないだけなので、改良された精度ももたらす。例えば、丸め誤差は２つではなく１つだけである。
【０００４】
分析アプリケーションは、特に大量データに対して動作すると、非常に計算負荷がかかる。これらの主なデータ型は２進浮動小数点である。これは、ＩＬＯＧ（Ｒ）、ＳＰＳＳ（Ｒ）、Ｃｏｇｎｏｓ（Ｒ）、Ａｌｇｏ（Ｒ）、ならびに保険および銀行取引分野に特化された多くの分析パッケージのような市販の分析ソフトウェアを含む。
【０００５】
多くのモバイル・アプリケーションには位置検出ルーチンが必要であるが、これも高負荷の浮動小数点計算である。これらのルーチンの性能は、データベース・クエリおよび保険分析コードとモバイル入力を組み合わせ、リアル・タイム要件を有するテレマテックスのような新興分野において重要である。
【０００６】
問題の大きさが大きくなると、アルゴリズムの数値感度が大きくなる。これはアルゴリズムの安定性を悪化させ、収束の速さを遅くする。これは、高性能領域でよく知られる効果である。この問題に対処する最も簡単な方式は、数学的に重要なルーチンを倍精度から４倍精度の浮動小数点（１２８ビット）に切り替えることである。
【０００７】
ビッグ・データ分析によって、この数値の安定性問題も商業空間に打撃を与えつつある。例えば、非常に大きなＩＬＯＧ（Ｒ）のインストールに関する収束問題、および大容量データ・セットに対して動作するクライアントのリスク・アセスメント・コードに関する収束問題が注目される。この大きなＩＬＯＧ（Ｒ）のインストールに対して、１２８ビット浮動小数点計算に切り替えると、１５％〜３０％速い収束が認められる。
【０００８】
米国特許出願公開第２０１６／００４８３７４（Ａ１）号は、支援命令の使用によって融合積和（ＦＭＡ）演算をエミュレートするための技法を開示する。この従来技術の開示の技法によれば、ＦＭＡ演算は、非融合積和演算を行うための既存ハードウェアが、他の専用ハードウェアを必要とせずに、融合積和演算をエミュレートするのに使用され得るように、支援命令によってエミュレートされる。
【０００９】
第１のオペランド、第２のオペランド、および第３のオペランドに対する融合積和演算をエミュレートすることは、第１のオペランドを第２のオペランドで乗算することに少なくとも部分的に基づいて、中間値を少なくとも１つのプロセッサによって決定することを含む。従来技術の方法は、上限中間値または下限中間値のうちの少なくとも１つを少なくとも１つのプロセッサによって決定することをさらに含み、上限中間値を決定することは、指定された数のビットによって中間値をゼロの方に丸めることを含み、下限中間値を決定することは、上限中間値によって中間値を減算することを含む。方法は、上限中間値または下限中間値のうちの１つに第３のオペランドを加算することに少なくとも部分的に基づいて、上限値と下限値を少なくとも１つのプロセッサによって決定することをさらに含む。方法は、上限値と下限値を加算することによって、第１のオペランド、第２のオペランド、および第３のオペランドに対するエミュレートされた融合積和結果を少なくとも１つのプロセッサによって決定することさらに含む。
【００１０】
米国特許第９，１０４，４７４（Ｂ２）号は、エネルギー効率の良い浮動小数点の乗法演算または加法演算あるいはその両方のための方法および回路を開示する。実施形態は、浮動小数点数のどれだけ多くの仮数ビット（mantissa bit）が確実であり得るかを追跡しながらエネルギー効率の良い可変精度の乗法演算もしくは加法演算もしくはその両方を行うこと、または乗算結果の最下部が最終結果に影響を及ぼす可能性があるときに、乗算の繰返しを含むエネルギー効率の良い浮動小数点乗算を行うこと、あるいはその両方を行う。
【００１１】
可変精度浮動小数点回路はリアル・タイム確実性追跡を用いて、実行時精度の選択を行う。確実性追跡は、必要であれば、結果が不確実になり得る低精度計算を、さらに高い精度で再計算できるようにする。確実性はデータに依存し得るので、数値計算と併せて判断される。確実性を追跡する回路は最低限のオーバヘッドを上乗せするが、計算の大部分は、比較的低い精度でも正しい結果を生み出す。
【００１２】
浮動小数点乗算ステップは、乗法演算に対して、所定の数の乗算積の最下位ビットの桁上げをゼロにセットするように構成される平行四辺形を含むＮビットごとの乗算器（N-bit by N-bit multiplier）（Ｎ×Ｎビット乗算器）回路、および必要であれば、完全な乗算結果を生成するために乗算器によって乗法演算の繰返しを誘発する検出回路によって行われる。
【００１３】
可変精度浮動小数点回路は、浮動小数点計算と並行して積和浮動小数点計算の結果の確実性を判断する。可変精度浮動小数点回路は、キャンセル、正規化シフト、および丸めを行う２進数などの計算からの情報と入力の確実性とを併用して、結果の確実性を計算する。可変精度浮動小数点回路は、複数の精度をサポートする可変精度仮数ユニット（variable precision mantissa unit）、最低精度で最大並列性をサポートする複数の指数データ経路、および出力の確実性限界をもたらす確実性計算ユニットを備える。
【先行技術文献】
【特許文献】
【００１４】
【特許文献１】米国特許出願公開第２０１６／００４８３７４（Ａ１）号
【特許文献２】米国特許第９，１０４，４７４（Ｂ２）号
【非特許文献】
【００１５】
【非特許文献１】IEEE-754-2008 Standard for Binary Floating Point Arithmetic, published in 2008
【発明の概要】
【発明が解決しようとする課題】
【００１６】
上述のような最先端によるプロセッサにおいて、ソフトウェアを用いた１２８ビット浮動小数点演算がエミュレートされる。説明された方法は通常、ハードウェア実装形態より１桁から２桁遅く、このことは、この方法をビッグ・データ分析にとって魅力的でないものにする。本発明は、３つの１２８ビット拡張オペランドに対して融合積和演算を実行するように構成される浮動小数点ユニット、その方法、プログラム、およびシステムを提供する。
【課題を解決するための手段】
【００１７】
浮動小数点ユニットは、（ｉ）乗算オペランドのデータフローに接続され、２２６ビット桁上げ保存積を反復して計算するように構成された１１３×１１３ビット乗算器であって、合計項および桁上げ項が積の上部（high part）および下部（low part）に分離される、１１３×１１３ビット乗算器と、（ｉｉ）加数の揃えた（aligned）部分を送り出すように構成された、加数オペランドの上部および下部のデータフローに接続された左シフタと、（ｉｉｉ）加数の揃えた部分を送り出すように構成された、加数オペランドの上部および下部のデータフローに接続された右シフタと、（ｉｖ）合計項および桁上げ項を加数と結合させるための３対２コンプレッサ（3-to-2 compressor）を備えるシフタの出力に接続された選択回路と、（ｖ）選択回路からのデータフローに接続された加算器と、（ｖｉ）その後の２つの加算において上部および下部に対して中間積と揃えた加数との拡張加法演算を行うために、加算器の桁上げ出力を選択回路に接続する第１のフィードバック経路と、（ｖｉｉ）正規化のために中間拡張結果をシフタを通過させるため、および丸めのために加算器を再度通過させるために、加算器の出力をシフタに接続する第２のフィードバック経路と、を備える、
【００１８】
融合積和演算（ＦＭＡ）の価値は、乗法演算および加法演算という２つの演算を１つの命令が行い、したがって２倍のスループットを実現するということである。しかしＦＭＡのさらに大きな価値は、正確な積および正確な加数に対して加算が行われるという、結合された演算の拡張された正確さである。
【００１９】
１２８ビット浮動小数点計算に対して、丸めの影響は一層厳しくなることがある。したがって、さらに高い正確さを求めて１２８ビット浮動小数点計算に切り替えると、ＦＭＡを有することは有利である。しかし１２８ビットＦＭＡは、アプリケーションにとって魅力的で、使用できるものにするために、ある程度の性能もなければならない。
【００２０】
浮動小数点プロセッサにおいて、１つの中心領域は乗算器アレイである。乗算器アレイは、２つの数の乗算を行うのに使用される。通常、基数４を用いる最先端のＢｏｏｔｈのエンコーディングが用いられ、これは、一般に使用される高速乗算アルゴリズムである。これは、ｎ／２＋１にまとめられる必要がある積項の数を減少させ、ここでｎはオペランドあたりのビットの数である。合計は、桁上げ伝搬加算器（carry-propagate-adder）回路機器によって通常行われる、低い方のビット位置の桁上げ出力が隣の高い方のビット位置に束縛される通常の加算とは対照的に、全てのビットを並行に処理できるようにする桁上げ保存加算器（carry-save-adder）回路機器を使用して行われる。この合計を行う回路機器は、リダクション・ツリーとして当技術分野で知られている。リダクション・ツリーの終わりに、合計項と桁上げ項という２つの項が残り、これらの項は、情報の合計部分と情報の桁上げ部分をそれぞれ表す。これらの項は最終的に、揃えた加数を加算される。ここで再び桁上げ保存加算が行われる。最終的に、同様に合計項および桁上げ項という２つの項だけが残り、これらの２つの項は、１つの最終的な結果を生成するために桁上げ伝搬加算器を使用して加算されなければならない。
【００２１】
都合の良いことに、本発明の浮動小数点ユニット（ＦＰＵ：floating-point unit）は、その構成により、例えばＩＢＭ（Ｒ）ｚ１３プロセッサに導入されるような、加算ベースのデータフローを有する従来の１２８ビット浮動小数点ユニットで１２８ビットＦＭＡ演算を実行できるようにする。適度なハードウェアの拡張だけで、本発明の実施形態は、乗法演算と同じ２３サイクルのレイテンシのある１２８ビット加算ベースのＦＰＵにおいて、１２８ビット精度で真のＦＭＡを実行できるようにする。常に１５サイクルで新しい演算が開始されることが可能であり、これは、例えば、６４ビットＦＭＡベースの浮動小数点ユニットで演算をエミュレートするＩＢＭ（Ｒ）ｚＥＣ１２プロセッサ上での演算より５倍以上速く、７．５倍高いスループットがある。
【００２２】
都合の良いことに、本発明の実施形態によれば、１２８ビット浮動小数点演算のための従来のＦＭＡユニットへの拡張は、第３のオペランドのためのオペランド・ラッチおよびアンパック回路である。さらに乗算器が追加され、回路の面積を節約するために乗算器は、反復的に１１３×１１３ビット積を計算する。本発明の実施形態により、完全な積を計算するのに７回の反復が必要になる可能性がある。乗算器は、桁上げ保存形式で積を送り出す。さらに左シフタが追加され、これは従来のＦＭＡユニットのレジスタに接続されてよい。これは、右シフタを循環器にし、その後のサイクルでこれを使用することによって得られることもある。さらにシフタの後の選択回路は、２つの積項を加数と結合させるための３対２コンプレッサによって拡張される。さらに加数のアンパック回路に先頭ゼロ・カウンタが接続される。さらに、中間積と、丸められていない合計との拡張加算を行うために、加算器へのさらなる入力として、加算器の出力から選択回路へのフィードバック経路も存在する。選択／スワップ回路を経由してシフタに戻るフィードバック経路は、正規化のために中間拡張結果をシフタを通過させるため、および丸めのために加算器を再度通過させるために使用される。
【００２３】
明確にするために、シフタ回路としてシフタが、加算器回路として加算器が、およびカウンタ回路としてカウンタが実装されてよいということに留意されよう。
【００２４】
乗算器およびフィードバック経路として加算ベースのデータフローに追加されるブロックは、１２８ビット浮動小数点乗算をサポートするのに使用される。他のブロックは、積和演算のオーバヘッドである。１２８ビットＦＭＡは、何度も循環することによってこのデータフロー上でエミュレートされる。
【００２５】
有利な実施形態によれば、乗算器は、積の上部および下部を順次計算するように構成されてよい。したがって効果的に４倍精度の積を計算することができる。
【００２６】
有利な実施形態によれば、ユニットは、加数の先頭ゼロの数を引いた加数の指数が、定数を加えた積の指数より大きい場合、積を加数に揃えるための手段を備えることができ、ここで定数は少なくとも２である。この方式で、加数と積は、加算器ユニットおよび丸め器ユニットによって効果的に加算され、丸められることが可能である。
【００２７】
有利な実施形態によれば、ユニットは、積の上部および下部を加数に揃え、単一のデータ部にマージするための手段を備えることができる。これは、効果的に４倍精度の積を計算できるようにする。
【００２８】
有利な実施形態によれば、ユニットは、加数の先頭ゼロの数を引いた加数の指数が、定数を加えた積の指数以下である場合、左シフタまたは右シフタあるいはその両方によって加数を積に揃えるための手段を備えることができ、ここで定数は少なくとも２である。この方式によって、加数と積は、加算器ユニットおよび丸め器ユニットによって効果的に加算され、丸められることが可能である。
【００２９】
有利な実施形態によれば、ユニットは、左シフタまたは右シフタあるいはその両方によって、加数の上部および下部を別々に積に揃えるための手段を備えることができる。したがって、４倍精度のオペランドを計算するために倍精度ユニットが使用されてよい。
【００３０】
有利な実施形態によれば、ユニットは、効果的な加法演算の場合、選択回路および３対２コンプレッサによって、積の上部および下部と加数を加算するための手段を備えることができる。これは、倍精度ユニットで４倍精度のオペランドを計算することを実現する。
【００３１】
有利な実施形態によれば、ユニットは、エンド・アラウンド桁上げ演算の結果がゼロに等しい場合、積と否定加数の否定合計を結果として計算するため、そうでなければ、効果的な減法演算の場合、積と、１を加えた否定加数との合計を結果として計算するための手段を備えることができる。このようにして、結果の最終的な丸めまたは正規化が実現され得る。
【００３２】
さらに、方法は、（ｉ）１１３×１１３ビット乗算器によって乗算オペランドの２２６ビット桁上げ保存積を反復して計算することであって、合計項および桁上げ項が、積の上部および下部に分離される、計算することと、（ｉｉ）加数の揃えた部分を送り出すように構成された、データフローに接続された左シフタによって加数オペランドの上部および下部を揃えることと、（ｉｉｉ）加数の揃えた部分を送り出すように構成された、データフローに接続された右シフタによって加数オペランドの上部および下部を揃えることと、（ｉｖ）３対２コンプレッサを備えるシフタの出力に接続された選択回路によって２つの積項を加数と結合させることと、（ｖ）選択回路からのデータフローに接続された加算器を動作させることと、（ｖｉ）加算器の桁上げ出力を選択回路に接続する第１のフィードバック経路で、その後の２つの加算における上部および下部に対する中間積と揃えた加数との拡張加算を行うことと、（ｖｉｉ）正規化のために中間拡張結果をシフタを通過させること、および加算器の出力をシフタに接続する第２のフィードバック経路において丸めのために加算器を再度通過させることと、を含む。
【００３３】
本発明の方法は、上述のように浮動小数点ユニットを有利に使用して、３つの１２８ビット・オペランドに対する融合積和演算のために実行されてよい。
【００３４】
有利な実施形態によれば、積の上部および下部は、乗算器によって順次計算されてよい。したがって４倍精度の積を効果的に計算することができる。
【００３５】
有利な実施形態によれば、加数の先頭ゼロの数を引いた加数の指数が、定数を加えた積の指数より大きい場合、積は加数に揃えられてよく、ここで定数は少なくとも２である。この方式によって、加数および積は、加算器ユニットおよび丸め器ユニットによって効果的に加算され、丸められることが可能である。
【００３６】
有利な実施形態によれば、積の上部および下部は、加数に揃え、単一のデータ部にマージすることができる。これは、４倍精度の積を効果的に計算できるようにする。
【００３７】
有利な実施形態によれば、加数は、加数の先頭ゼロの数を引いた加数の指数が、定数を加えた積の指数以下である場合、左シフタまたは右シフタあるいはその両方によって積に揃えられてよく、ここで定数は少なくとも２である。この方式によって、加数および積は、加算器ユニットおよび丸め器ユニットによって効果的に加算され、丸められることが可能である。
【００３８】
有利な実施形態によれば、加数の上部および下部は、左シフタまたは右シフタあるいはその両方によって積に別々に揃えられてよい。したがって倍精度ユニットは、４倍精度のオペランドを計算するために使用されてよい。
【００３９】
有利な実施形態によれば、効果的な加法演算の場合、積および加数の上部および下部は、選択回路および３対２コンプレッサによって加算されてよい。これは、倍精度ユニットで４倍精度のオペランドを計算することを実現する。
【００４０】
有利な実施形態によれば、効果的な減法演算の場合、エンド・アラウンド桁上げ演算の結果がゼロに等しい場合、積と否定加数の否定合計が結果として計算されてよく、そうでなければ積と、１を加えた否定加数との合計が結果として計算されてよい。したがって結果の最終的な丸めまたは正規化が実現され得る。
【００４１】
さらなる態様により、コンピュータ・プログラムは、具体化されるプログラム命令を保持するコンピュータ可読ストレージ媒体を備えており、プログラム命令は、（ｉ）１１３×１１３ビット乗算器によって乗算オペランドの２２６ビット桁上げ保存積を反復して計算することであって、合計項および桁上げ項が、積の上部および下部に分離される、計算することと、（ｉｉ）加数の揃えた部分を送り出すように構成された、データフローに接続された左シフタによって加数オペランドの上部および下部を揃えることと、（ｉｉｉ）加数の揃えた部分を送り出すように構成された、データフローに接続された右シフタによって加数オペランドの上部および下部を揃えることと、（ｉｖ）３対２コンプレッサを備えるシフタの出力に接続された選択回路によって２つの積項を加数と結合させることと、（ｖ）選択回路からのデータフローに接続された加算器を動作させることと、（ｖｉ）加算器の桁上げ出力を選択回路に接続する第１のフィードバック経路で、その後の２つの加算において上部および下部に対する中間積と揃えた加数との拡張加算を行うことと、（ｖｉｉ）正規化のために中間拡張結果をシフタを通過させること、および加算器の出力をシフタに接続する第２のフィードバック経路において丸めのために加算器を再度通過させることと、を含む方法をコンピュータ・システムに行わせるためにコンピュータ・システムによって実行可能である。
【００４２】
さらに、上述の方法を行うためのコンピュータ可読プログラム命令を含むデータ処理プログラムを実行するためのデータ処理システムが提案される。
【００４３】
上述および他の目的および利点と共に本発明は、実施形態の以下の詳細な説明から最もよく理解され得るが、この実施形態に制限されない。
【図面の簡単な説明】
【００４４】
【図１】２進浮動小数点算術計算を行うための、本発明の１つの実施形態による、浮動小数点ユニットのデータフローを描写する図であり、浮動小数点ユニットは、Ａ×Ｃ＋Ｂ演算のために３つの１２８ビット拡張オペランドＡ、Ｂ、Ｃに対して融合積和演算を実行するように構成される。
【図２】２進浮動小数点算術計算を行うための、本発明のさらなる実施形態による、浮動小数点ユニットのデータフローを描写する図であり、浮動小数点ユニットは、Ａ×Ｂ＋Ｃ演算のために３つの１２８ビット拡張オペランドＡ、Ｂ、Ｃに対して融合積和演算を実行するように構成される。
【図３】本発明の１つの実施形態による、データの上部および下部に分離される、加算器ループにおけるデータフローを描写する図である。
【図４】本発明の１つの実施形態による、積に関する加数の等級に依存するデータフローの流れ図を描写する図である。
【図５】本発明による方法を実行するためのデータ処理システムの例示的な実施形態を描写する図である。
【発明を実施するための形態】
【００４５】
図面において、同様の要素は等しい参照数字で参照される。図面は概略図にすぎず、本発明の特定のパラメータを表現するためのものではない。さらに図面は、本発明の典型的な実施形態だけを描写するためのものであり、したがって本発明の範囲を限定するものとみなされるべきではない。
【００４６】
本明細書で説明される例証的な実施形態は、３つの１２８ビット拡張オペランドに対して融合積和演算（ＦＭＡ）を実行するための、ユニット、方法、システム、およびコンピュータ・プログラム製品を示す。例証的な実施形態は、説明の明瞭さのための例としてのみ、特定の技術を使用して本明細書で説明されることもある。
【００４７】
例証的な実施形態は、本発明の浮動小数点ユニットで３つの１２８ビット拡張オペランドに対して融合積和演算を実行するために使用されてよい。
【００４８】
図１は、２進浮動小数点算術計算を行うための、本発明の１つの実施形態による、浮動小数点ユニット１０のデータフローを描写し、浮動小数点ユニット１０は、Ａ×Ｃ＋Ｂ演算のために３つの１２８ビット拡張オペランドＡ（１０２）、Ｂ（１０４）、Ｃ（１００）に対して融合積和演算を実行するように構成される。
【００４９】
本発明の実施形態によれば、したがって１２８ビットＦＭＡは、適度なハードウェア拡張だけで加算ベースのデータフローを有する従来の１２８ビット浮動小数点ユニットで実行されてよい。
【００５０】
浮動小数点ユニット（ＦＰＵ）１０は、（ｉ）乗算オペランド１００、１０２のデータフローに接続され、２２６ビット桁上げ保存積７０を反復して計算するように構成された１１３×１１３ビット乗算器１４であって、合計項７１および桁上げ項７４が、積７０の上部７２、７５および下部７３、７６に分離される、１１３×１１３ビット乗算器１４を備える。合計項７１および桁上げ項７４、ならびに上部７２、７５および下部７３、７６への分離の詳細は、図３のデータフローの中で描写される。
【００５１】
ＦＰＵ１０は、（ｉｉ）加数７７の揃えた部分を送り出すように構成された、加数オペランド１０４の上部７８および下部７９のデータフローに接続された左シフタ１８と、（ｉｉｉ）加数７７の揃えた部分を送り出すように構成された、加数オペランド１０４の上部７８および下部７９のデータフローに接続された右シフタ２０と、をさらに備える。さらにＦＰＵ１０は、（ｉｖ）合計項７１および桁上げ項７４と加数７７とを結合させるための３対２コンプレッサ２５を備えるシフタ１８、２０の出力に接続された選択回路２４と、（ｖ）選択回路２４からのデータフローに接続された加算器２６と、を示す。さらにＦＰＵ１０は、（ｖｉ）その後の２つの加算において上部７２、７５、７８および下部７３、７６、７９に対する中間積７０と揃えた加数７７の拡張加法演算を行うために、加算器２６の桁上げ出力９１を選択回路２４に接続する第１のフィードバック経路３６と、（ｖｉｉ）正規化のために中間拡張結果８６をシフタ１８、２０を通過させるため、および丸めのために加算器２６を再度通過させるために、加算器２６の出力をシフタ１８、２０に接続する第２のフィードバック経路３８と、を備える。
【００５２】
データフローは、大きい方のオペランドが常に本発明の方法による第１のオペランドであるというものなので、１つの追加のシフタ１８があれば十分である。
【００５３】
合計項７１および桁上げ項７４における積７０のような２２６ビット拡張乗算器の結果は、狭い１２８ビットＦＰＵ加算器２６に収まるように、下部７３、７６および上部７２、７５に分離される。下部７３、７６および上部７２、７５は、加算器２６を通じて順次送られる。最終的に下部７３、７６および上部７２、７５は、最終的な結果８６にマージされて丸められるか、正規化される。
【００５４】
したがって、図１に描写された本発明の浮動小数点ユニット１０のハードウェア拡張は、従来の１２８ビット浮動小数点ユニットと比較して、第３のオペランド１００に対するオペランド・ラッチ４４およびアンパック回路１２、ならびに積７０の上部７２、７５および下部７３、７６に分離される、桁上げ項７４および合計項７１における２２６ビット桁上げ保存積７０を順次反復的に得るための１１３×１１３乗算器１４を備える。さらにハードウェア拡張は、Ａ２レジスタ４６に接続された左シフタ１８を備える。一方、右シフタ２０はビット循環機能によって実行され、その後のサイクルにおいて使用されてよい。シフタ１８、２０の後の選択回路２４は、合計項７１および桁上げ項７４といった２つの積項を加数７７と結合させるために３対２コンプレッサ２５によって拡張される。さらなる拡張は、加数オペランド１０４（本実施形態におけるオペランドＢ）のアンパック回路１２に接続された先頭ゼロ・カウンタ２２である。さらに、上部７２、７５、７８および下部７３、７６、７９に対する中間積７０と揃えた加数７７との拡張加法演算を行うための第１のフィードバック経路３６を実装するために、加算器２６の桁上げ出力９１を選択回路２４に接続する、エンド・アラウンド桁上げ加算器である加算器２６の近くにある第１のフィードバック経路３６がさらに示される。最終的に、正規化のために中間拡張結果８６をシフタ１８、２０を通過させるため、および丸めのために加算器２６を再度通過させるために、加算器２６の出力をシフタ１８、２０に接続する第２のフィードバック経路３８がさらに示される。
【００５５】
図１に示されるデータフローは、全体的にトップダウン構造に従う。入力オペランド１００、１０２、１０４は、アンパックする前に入力レジスタ４４、４０、４２にラッチされる。乗算オペランド１００、１０２は、乗算器１４に送り込まれる。乗算器１４によって計算された積７０は、３対２コンプレッサ２５を備える選択回路２４に送り込まれ、その後、Ａ４レジスタ５０およびＢ４レジスタ５２を通って加算器２６にラッチされる。これは、選択／スワップ回路１６、ならびにＡ２レジスタ４６およびＢ２レジスタ４８それぞれを通り、図４でさらに詳細に説明されるシフタ１８、２０によって任意選択でシフトして、加算器２６に加数オペランド１０４をラッチすることと共に行われる。左シフトは、加数１０４の先頭ゼロの数を計算する先頭ゼロ・カウンタ２２の結果に依存する。先頭ゼロ・カウンタ２２は、非正規オペランドと共に特に使用される。したがって、オペランドで演算を続ける前に、非正規オペランドの正規化ができる。第１のフィードバック・ループ３６は、加算器２６の中間下部結果（intermediate low result）８８の桁上げ出力９１を送り込むことによって始まり、３対２コンプレッサ２５を有する選択回路２４に戻る。加算器２６の結果８７および８８は、その後のサイクルにおいてＤ６レジスタ５４に送り込まれ、このサイクルで第２のフィードバック・ループ３８が始まり、送り込んだデータは次の反復のために選択／スワップ回路１６に戻る。最終的にＤ６レジスタ５４内の結果８６は、先頭ゼロ予測器２８の結果に応じてそれぞれ、丸め回路３０によって丸められるか、正規化回路３２によって正規化される。最終的な結果はその後、選択およびパック・ユニット３４において選択およびパックされ、Ｒ８出力レジスタ５６にラッチされ、データを１２８ビット結果バスに送り込むことができる。
【００５６】
したがって本発明の実施形態による方法は、（ｉ）１１３×１１３ビット乗算器１４によって、乗算オペランド１００、１０２の２２６ビット桁上げ保存積７０を反復して計算することであって、合計項７１および桁上げ項７４が、積７０の上部７２、７５および下部７３、７６に分離される、計算することと、（ｉｉ）加数７７の揃えた部分を送り出すように構成された、データフローに接続された左シフタ１８によって加数オペランド１０４の上部７８および下部７９を揃えることと、（ｉｉｉ）揃えた加数７７を送り出すように構成された、データフローに接続された右シフタ２０によって、加数オペランド１０４の上部７８および下部７９を揃えることと、（ｉｖ）３対２コンプレッサ２５を備える、シフタ１８、２０の出力に接続された選択回路２４によって、２つの積項７１、７４を加数７７と結合させることと、（ｖ）選択回路２４からのデータフローに接続された加算器２６を動作させることと、（ｖｉ）加算器２６の桁上げ出力９１を選択回路２４に接続する第１のフィードバック経路３６において上部７２、７５、７８および下部７３、７６、７９に対して中間積７０と揃えた加数７７との拡張加算を行うことと、（ｖｉｉ）正規化のためにその後の２つのサイクルにおける中間拡張結果８６をシフタ１８、２０を通過させること、および加算器２６の出力をシフタ１８、２０に接続する第２のフィードバック経路３８において丸めのために加算器２６を再度通過させることと、を含むことができる。
【００５７】
図２において、２進浮動小数点算術計算を行うための、本発明のさらなる実施形態による、浮動小数点ユニット１０のデータフローが描写され、ここで浮動小数点ユニット１０は、Ａ×Ｂ＋Ｃ演算のために３つの１２８ビット拡張オペランドＡ、Ｂ、Ｃ（１００、１０２、１０４）に対して融合積和演算を実行するように構成される。データフローは、本実施形態において乗算オペランド１００、１０２がＡおよびＢであることを除いて、図１に示されたデータフローにかなり類似しており、ここで第３の加数オペランド１０４はＣである。主要な算術演算は図１と同じであり、したがって説明のために、図１の説明が使用され得る。
【００５８】
図３は、本発明の１つの実施形態による、データの上部７２、７５、７８および下部７３、７６、７９に分離される、加算器ループＳ２００、Ｓ２０２におけるデータフローを描写する。第１の加算器ループＳ２００において、下部７３、７６、７９は、合計項８０の下部８２、ならびに桁上げ項８３の下部８５を得るために合計項７３、７６を加数項７９に加算し、結果８６の下部８８を生じることによって計算され、その一方で第２の加算器ループＳ２０２において、上部７２、７５、７８は、合計項８０の上部８１、ならびに桁上げ項８３の上部８４を得るために合計項７２、７５を加数項７８に加算し、結果８６の上部８７を生じることによって計算される。したがって桁上げビット９０、９１は、下部８５、８８から上部８４、８７にシフトされる。
【００５９】
図４において、本発明の１つの実施形態による、積７０に関する加数１０４の等級に依存するデータフローの流れ図が示される。
【００６０】
大きい加数７７の場合において、加数７７の先頭ゼロの数を引いた加数７７の指数が、定数を加えた積７０の指数より大きい場合、積７０は加数７７に揃えられ（Ｓ１０１）、ここで定数は少なくとも２である。次に、可能な下位桁あふれチェックを伴う非正規加数７７の場合（ステップＳ１０６）、加数７７はシフタ１８において正規化される（ステップＳ１０８）（図１参照）。非正規数は浮動小数点数であり、ここで先頭ゼロのない仮数部は指数をもたらし、指数は、浮動小数点表現の最低指数より下方にある。
【００６１】
並行して、ステップＳ１０２において、上部７２、７５および下部７３、７６に分離された、桁上げ項７４および合計項７１で積７０が乗算器１４において計算される。下部７９および上部７８はその後の２つのサイクルにおいて加算され、完全に計算された下部の積および完全に計算された上部の積を形成する。左シフタ１８において、下部の積および上部の積は、指数相違に基づいてステップＳ１０４において加数７７に揃えられ、加算器２６において、揃えた加数７７に加算／減算される。最終的に結果８６は、ステップＳ１１２において丸められる。
【００６２】
小さい加数の場合において、加数７７の先頭ゼロの数を引いた加数７７の指数が、定数を加えた積７０の指数以下である場合、加数７７の下部７９および上部７８は、シフタ１８および２０によって積７０に揃えられ（Ｓ１０３）、ここで定数は少なくとも２である。まずステップＳ１２０において、上部７２、７５および下部７３、７６に分離された、合計項７１および桁上げ項７４で積７０が乗算器１４において計算される。ステップＳ１２２において、指数相違に基づいて、加数７７は、シフタ１８、２０によって揃えられ、上部の加数７８および下部の加数７９に分離される。
【００６３】
ステップＳ１２４において、これが効果的な加法演算の場合であるかどうかの判定が行われる。効果的な加法演算の場合、積７０および加数７７の上部７２、７５、７８および下部７３、７６、７９は、選択回路２４および３対２コンプレッサ２５によって順次加算される（ステップＳ１２６）。
【００６４】
効果的な減法演算の場合、ステップＳ１２８において、下部７３、７６および上部７２、７５に対して３対２コンプレッサ２５および加算器２６によって順次、積７０と否定加数７７の否定合計が第１の結果８６として計算され、積７０と、１を加えた否定加数７７との合計が第２の結果８６として計算される。エンド・アラウンド桁上げ演算の結果がゼロに等しい場合、第１の結果８６が使われ、そうでなければ第２の結果８６が使われる。ステップＳ１３２において、後の正規化のために先頭ゼロ予測器２８によって先頭ゼロの数が判断される。結果合計８６の下部８８および上部８７に対して、シフタ１８および２０において、丸めポイントに対するアラインメント（alignment）、および正規化シフトまたは非正規化シフトが別々に行われる（ステップＳ１３０、ステップＳ１３４）。加算器２６は、結果８６の下部８８および上部８７をマージするために使用される。最終的な結果を得るために、最後のステップＳ１３６として、最終的な丸めまたは正規化が行われる。
【００６５】
次に図５を参照すると、データ処理システム２１０の例の概略図が示される。データ処理システム２１０は適切なデータ処理システムの１つの例にすぎず、本明細書で説明される本発明の実施形態の用途または機能の範囲について何らかの限定を示すためのものではない。それでもデータ処理システム２１０は、実装されること、または本明細書で上記に示された機能のいずれかを行うこと、あるいはその両方ができる。
【００６６】
データ処理システム２１０には、他の非常に多くの汎用または専用のコンピューティング・システム環境または構成によって動作可能なコンピュータ・システム／サーバ２１２がある。コンピュータ・システム／サーバ２１２と共に使用するのに適する可能性のある、よく知られたコンピューティング・システム、環境、または構成、あるいはその組合せの例は、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、手持ち型またはラップトップ型デバイス、マルチプロセッサ・システム、マイクロプロセッサベースのシステム、セット・トップ・ボックス、プログラマブル家庭用電化製品、ネットワークＰＣ、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記のシステムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境、ならびに同様のものを含むがこれらに限定されない。
【００６７】
コンピュータ・システム／サーバ２１２は、コンピュータ・システムによって実行されるプログラム・モジュールなどの、コンピュータ・システム実行可能命令の一般的な背景で説明され得る。一般にプログラム・モジュールは、特定のタスクを行うか、特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含むことができる。コンピュータ・システム／サーバ２１２は、通信ネットワークを通じてリンクされるリモート処理デバイスによってタスクが行われる分散型クラウド・コンピューティング環境において実践されてよい。分散型クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含む、ローカルとリモート両方のコンピュータ・システム・ストレージ媒体の中にあってよい。
【００６８】
図５に示されるように、汎用コンピューティング・デバイスの形で、データ処理システム２１０におけるコンピュータ・システム／サーバ２１２が示される。コンピュータ・システム／サーバ２１２の構成要素は、１つまたは複数のプロセッサまたは処理ユニット２１６、システム・メモリ２２８、およびシステム・メモリ２２８を含む様々なシステム構成要素をプロセッサ２１６に連結するバス２１８を含むことができるがこれらに限定されない。
【００６９】
バス２１８は、メモリ・バスまたはメモリ・コントローラ、周辺機器バス、アクセラレイティッド・グラフィックス・ポート、およびプロセッサまたは様々なバス・アーキテクチャのいずれかを使用するローカル・バスを含むいくつかのタイプのバス構造のいずれかの１つまたは複数を表す。例として、また限定ではなく、このようなアーキテクチャは、インダストリ・スタンダード・アーキテクチャ（ＩＳＡ：Industry Standard Architecture）バス、マイクロ・チャネル・アーキテクチャ（ＭＣＡ：Micro Channel Architecture）バス、拡張ＩＳＡ（ＥＩＳＡ：Enhanced ISA）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（ＶＥＳＡ：Video Electronics Standards Association）ローカル・バス、およびペリフェラル・コンポーネント・インターコネクト（ＰＣＩ：Peripheral Component Interconnect）バスを含む。
【００７０】
コンピュータ・システム／サーバ２１２は典型的には、様々なコンピュータ・システム可読媒体を含む。このような媒体は、コンピュータ・システム／サーバ２１２によってアクセス可能な任意の利用可能な媒体であってよく、媒体は、揮発性媒体および不揮発性媒体の両方、取外し可能媒体および取外し不能媒体の両方を含む。
【００７１】
システム・メモリ２２８は、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）２３０またはキャッシュ・メモリ２３２あるいはその両方などの揮発性メモリの形のコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム／サーバ２１２は、他の取外し可能／取外し不能な、揮発性／不揮発性のコンピュータ・システム・ストレージ媒体をさらに含むことができる。ほんの一例として、ストレージ・システム２３４は、取外し不能な不揮発性磁気媒体（図示せず、また典型的には「ハード・ドライブ」と呼ばれる）を読み書きするために提供されてよい。図示されていないが、取外し可能な不揮発性の磁気ディスク（例えば「フロッピー（Ｒ）・ディスク」）を読み書きするための磁気ディスク・ドライブ、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光媒体などの取外し可能な不揮発性の光ディスクを読み書きするための光ディスク・ドライブが提供されてよい。このような例において、それぞれは、１つまたは複数のデータ媒体インターフェースによってバス２１８に接続されてよい。下記でさらに描写され、説明されるように、メモリ２２８は、本発明の実施形態の機能を実行するように構成されるプログラム・モジュールのセット（例えば少なくとも１つ）を有する少なくとも１つのプログラム製品を含むことができる。
【００７２】
プログラム・モジュール２４２のセット（少なくとも１つ）を有するプログラム／ユーティリティ２４０は、例として、また限定ではなくメモリ２２８に格納されてよく、ならびにオペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データも格納されてよい。オペレーティング・システム、１つもしくは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データ、またはこれらの何らかの組合せのそれぞれは、ネットワーキング環境の実装を含むことができる。プログラム・モジュール２４２は一般に、本明細書で説明されるような本発明の実施形態の機能または方法あるいはその両方を実行する。
【００７３】
コンピュータ・システム／サーバ２１２は、キーボード、ポインティング・デバイス、ディスプレイ２２４、等などの１つもしくは複数の外部デバイス２１４、コンピュータ・システム／サーバ２１２とユーザが対話できるようにする１つもしくは複数のデバイス、または１つもしくは複数の他のコンピューティング・デバイスとコンピュータ・システム／サーバ２１２が通信できるようにする任意のデバイス（例えば、ネットワーク・カード、モデム、等）、あるいはその組合せと通信することもできる。このような通信は、入出力（Ｉ／Ｏ：Input/Output）インターフェース２２２を介して発生してよい。さらにコンピュータ・システム／サーバ２１２は、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）、一般的な広域ネットワーク（ＷＡＮ：wide area network）、またはパブリック・ネットワーク（例えばインターネット）、あるいはその組合せなどの１つまたは複数のネットワークとネットワーク・アダプタ２２０を介して通信することができる。描写されるように、ネットワーク・アダプタ２２０は、コンピュータ・システム／サーバ２１２の他の構成要素とバス２１８を介して通信する。図示されていないが、コンピュータ・システム／サーバ２１２と共に、他のハードウェアまたはソフトウェアあるいはその両方の構成要素が使用されることがあるということを理解されたい。例は、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システム、等を含むがこれらに限定されない。
【００７４】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであってよい。コンピュータ・プログラム製品は、本発明の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令を保持する１つのコンピュータ可読ストレージ媒体（または複数の媒体）を含むことができる。
【００７５】
コンピュータ可読ストレージ媒体は、命令実行デバイスによって使用するための命令を保持し、格納できる有形デバイスであってよい。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または前述の任意の適切な組合せであってよいがこれらに限定されない。コンピュータ可読ストレージ媒体のさらなる具体例の完全に網羅されていないリストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ：read-only memory）、消去可能プログラマブル・リード・オンリ・メモリ（ＥＰＲＯＭ：erasable programmable read-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー（Ｒ）・ディスク、命令が記録されたパンチ・カードまたは溝内の隆起構造などの機械的にエンコードされたデバイス、および前述の任意の適切な組合せを含む。本明細書で使用されるようなコンピュータ可読ストレージ媒体はそれ自体が、電波もしくは他の自由に伝搬する電磁波、導波路もしくは他の伝送媒体を通じて伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、またはワイヤを通じて伝送される電気信号などの一時的な信号であると解釈されるべきではない。
【００７６】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から個々のコンピューティング・デバイス／処理デバイスに、あるいは例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、もしくはワイヤレス・ネットワーク、またはその組合せといったネットワークを介して外部コンピュータまたは外部ストレージ・デバイスにダウンロードされてよい。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを含むことができる。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受け取り、個々のコンピューティング・デバイス／処理デバイス内のコンピュータ可読ストレージ媒体に格納するためにコンピュータ可読プログラム命令を転送する。
【００７７】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはＳｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋、もしくは同様のものなどのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語、もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む１つもしくは複数のプログラミング言語の任意の組合せで書かれたソース・コードもしくはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、スタンド・アロンのソフトウェア・パッケージとして、全面的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で実行することができ、部分的にユーザのコンピュータ上および部分的にリモート・コンピュータ上で、または全面的にリモート・コンピュータもしくはサーバ上で実行することができる。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）もしくは広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続されてよく、また接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを通じて）外部コンピュータに対して行われてもよい。いくつかの実施形態において、例えば、プログラマブルロジック回路機器、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate array）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic array）を含む電子回路機器は、本発明の態様を行うために、コンピュータ可読プログラム命令の状態情報を利用して電子回路機器を個別化にすることによって、コンピュータ可読プログラム命令を実行することができる。
【００７８】
本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照しながら、本発明の態様が本明細書で説明される。流れ図またはブロック図あるいはその両方の各ブロック、および流れ図またはブロック図あるいはその両方の中のブロックの組合せは、コンピュータ可読プログラム命令によって実行されてよいということが理解されよう。
【００７９】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラマブルデータ処理装置のプロセッサによって実行する命令が、流れ図またはブロック図あるいはその両方の１つまたは複数のブロックの中で指定された機能／作用を実行するための手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または機械を生み出す他のプログラマブルデータ処理装置のプロセッサに提供されてよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読ストレージ媒体が、流れ図またはブロック図あるいはその両方の１つまたは複数のブロックの中で指定された機能／作用の態様を実行する命令を含む製品を備えるべく、コンピュータ、プログラマブルデータ処理装置、または他のデバイス、あるいはその組合せに特定の方式で機能するように指図できるコンピュータ可読ストレージ媒体に格納されてもよい。
【００８０】
コンピュータ可読プログラム命令は、コンピュータ上、他のプログラマブル装置上、または他のデバイス上で実行する命令が、流れ図またはブロック図あるいはその両方の１つまたは複数のブロックの中で指定された機能／作用を実行するべく、コンピュータ実行処理を生み出すコンピュータ上、他のプログラマブル装置上、または他のデバイス上で一連の動作ステップを実行させるために、コンピュータ上、他のプログラマブルデータ処理装置上、または他のデバイス上にロードされてもよい。
【００８１】
図中の流れ図およびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を示す。この点に関して、流れ図またはブロック図の中の各ブロックは、指定されたロジック機能を実行するための１つまたは複数の実行可能命令を備える命令のモジュール、セグメント、または一部を表すことができる。いくつかの代替実装形態において、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示される２つのブロックは実際には、実質的に並行に実行されてよく、またブロックは、含まれる機能に応じて、時には逆の順序で実行されてもよい。ブロック図または流れ図あるいはその両方の各ブロック、ならびにブロック図または流れ図あるいはその両方の中のブロックの組合せは、指定された機能または作用を実行するか、専用ハードウェアとコンピュータ命令の組合せを実行する専用ハードウェアベースのシステムによって実行されてよいということにも留意されよう。
【００８２】
様々な本発明の実施形態の説明が例証のために提示されたが、網羅的であること、または開示された実施形態に限定されることを意図するものではない。説明された実施形態の範囲および思想から逸脱することなく多くの変更および変形が当業者には明らかであろう。本明細書で使用された専門用語は、実施形態の原理、実用的な応用、もしくは市場で見つかる技術を超える技術的改良を最もよく説明するように、または本明細書で開示された実施形態を当業者が理解できるように、選ばれた。
【図１】
2020514862.tif 000003
【図２】
2020514862.tif 000004
【図３】
2020514862.tif 000005
【図４】
2020514862.tif 000006
【図５】
2020514862.tif 000007
【手続補正書】
【提出日】令和1年10月4日(2019.10.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
３つの１２８ビット拡張オペランドに対して融合積和演算を実行するように構成される浮動小数点ユニットであって、
（ｉ）乗算オペランドのデータフローに接続され、２２６ビット桁上げ保存積を反復して計算するように構成された１１３×１１３ビット乗算器であって、合計項および桁上げ項が、前記積の上部および下部に分離される、前記１１３×１１３ビット乗算器と、
（ｉｉ）加数の揃えた部分を送り出すように構成された、加数オペランドの上部および下部のデータフローに接続された左シフタと、
（ｉｉｉ）前記加数の前記揃えた部分を送り出すように構成された、前記加数オペランドの前記上部および前記下部の前記データフローに接続された右シフタと、
（ｉｖ）前記合計項および前記桁上げ項を前記加数と結合させるための３対２コンプレッサを備える前記シフタの出力に接続された選択回路と、
（ｖ）前記選択回路らのデータフローに接続された加算器と、
（ｖｉ）その後の２つの加算において前記上部および前記下部に対する中間積と揃えた加数の拡張加法演算を行うために、前記加算器の桁上げ出力を前記選択回路に接続する第１のフィードバック経路と、
（ｖｉｉ）正規化のために中間拡張結果を前記シフタを通過させるため、および丸めのために前記加算器を再度通過させるために、前記加算器の前記出力を前記シフタに接続する第２のフィードバック経路と
を備える、浮動小数点ユニット。
【請求項２】
さらに前記左シフタがビット循環機能を有する右シフタとして実装される、請求項１に記載のユニット。
【請求項３】
さらに前記乗算器が、前記積の前記上部および前記下部を順次計算するように構成される、請求項１に記載のユニット。
【請求項４】
前記加数オペランドのアンパック回路に接続される先頭ゼロ・カウンタをさらに備える、請求項１に記載のユニット。
【請求項５】
前記加数の先頭ゼロの数を引いた前記加数の指数が、定数を加えた前記積の指数より大きい場合、前記積を前記加数に揃えるための手段をさらに備え、ここで前記定数が少なくとも２である、請求項１に記載のユニット。
【請求項６】
非正規加数の場合、前記加数を正規化するための手段をさらに備える、請求項５に記載のユニット。
【請求項７】
前記積の前記上部および前記下部を前記加数に揃え、単一のデータ部にマージするための手段をさらに備える、請求項５に記載のユニット。
【請求項８】
前記加数の先頭ゼロの数を引いた前記加数の指数が、定数を加えた前記積の指数以下である場合、前記左シフタまたは前記右シフタあるいはその両方によって前記加数を前記積に揃えるための手段をさらに備える、ここで前記定数が少なくとも２である、請求項１に記載のユニット。
【請求項９】
前記左シフタまたは前記右シフタあるいはその両方によって、前記加数の前記上部および前記下部を別々に前記積に揃えるための手段をさらに備える、請求項８に記載のユニット。
【請求項１０】
効果的な加法演算の場合、前記選択回路および前記３対２コンプレッサによって、前記積および前記加数の前記上部および前記下部を加算するための手段をさらに備える、請求項８に記載のユニット。
【請求項１１】
エンド・アラウンド桁上げ演算の結果がゼロに等しい場合、前記積と否定加数の否定合計を結果として計算すること、そうでなければ、効果的な減法演算の場合、前記積と、１を加えた前記否定加数との合計を結果として計算すること、を行うための手段をさらに備える、請求項８に記載のユニット。
【請求項１２】
３つの１２８ビット拡張オペランドに対して融合積和演算を実行するように構成される浮動小数点ユニットで２進浮動小数点算術計算を行うための方法であって、
（ｉ）１１３×１１３ビット乗算器によって前記乗算オペランドの２２６ビット桁上げ保存積を反復して計算することであって、合計項および桁上げ項が、前記積の上部および下部に分離される、前記計算することと、
（ｉｉ）データフローに接続された左シフタによって加数の揃えた部分を送り出すように構成された、加数オペランドの少なくとも上部および下部を揃えることと、
（ｉｉｉ）前記加数の前記揃えた部分を送り出すように構成された、前記データフローに接続された右シフタによって前記加数オペランドの前記上部および前記下部を揃えることと、
（ｉｖ）３対２コンプレッサを備える前記シフタの出力に接続された選択回路によって前記２つの積項を前記加数と結合させることと、
（ｖ）前記選択回路からのデータフローに接続された加算器を動作させることと、
（ｖｉ）前記加算器の桁上げ出力を前記選択回路に接続する第１のフィードバック経路でその後の２つの加算において前記上部および前記下部に対する中間積と揃えた加数との拡張加算を行うことと、
（ｖｉｉ）正規化のために中間拡張結果を前記シフタを通過させること、および前記加算器の前記出力を前記シフタに接続する第２のフィードバック経路において丸めのために前記加算器を再度通過させることと
を含む、方法。
【請求項１３】
３つの１２８ビット拡張オペランドに対して融合積和演算を実行するように構成される浮動小数点ユニットで２進浮動小数点算術計算を行うためのコンピュータ・プログラムであって、
（ｉ）１１３×１１３ビット乗算器によって前記乗算オペランドの２２６ビット桁上げ保存積を反復して計算することであって、合計項および桁上げ項が、前記積の上部および下部に分離される、前記計算することと、
（ｉｉ）データフローに接続された左シフタによって加数の揃えた部分を送り出すように構成された、加数オペランドの少なくとも上部および下部を揃えることと、
（ｉｉｉ）前記加数の前記揃えた部分を送り出すように構成された、前記データフローに接続された右シフタによって前記加数オペランドの前記上部および前記下部を揃えることと、
（ｉｖ）３対２コンプレッサを備える前記シフタの出力に接続された選択回路によって前記２つの積項を前記加数と結合させることと、
（ｖ）前記選択回路からのデータフローに接続された加算器を動作させることと、
（ｖｉ）前記加算器の桁上げ出力を前記選択回路に接続する第１のフィードバック経路でその後の２つの加算において前記上部および前記下部に対する中間積と揃えた加数との拡張加算を行うことと、
（ｖｉｉ）正規化のために中間拡張結果を前記シフタを通過させること、および前記加算器の前記出力を前記シフタに接続する第２のフィードバック経路において丸めのために前記加算器を再度通過させることと
を含む方法をコンピュータ・システムに行わせる、前記コンピュータ・システムによって実行可能な、コンピュータ・プログラム。
【請求項１４】
請求項１３のいずれか一項に記載の方法を行うためのコンピュータ可読プログラム命令を備える、データ処理プログラムの実行のためのデータ処理システム。
【国際調査報告】
2020514862.tif 000008
2020514862.tif 000009