融合型積和演算機能ユニット
【課題】ダイレクトメモリアクセスを用いてメモリから画像処理モジュールへデータを転送する場合に、メモリに要求される容量と転送帯域を小さくする。
【解決手段】グラフィックスプロセッサに、レンダリングに使用される単精度の機能ユニットに加えて、倍精度の算術演算の直接的なサポートを提供する機能ユニットが追加される。倍精度の機能ユニットは、融合型積和演算を含む複数の異なる演算を、少なくとも倍精度の幅であるデータ経路及び/又は論理回路を使用して、実行することができる。倍精度の機能ユニット及び単精度の機能ユニットは、共通の命令発行回路によって制御することができ、コアに含まれている倍精度の機能ユニットの複製の数を、単精度の機能ユニットの複製の数よりも少なくすることができ、これによって、倍精度のサポートを加えることによる、チップ面積に対する影響が低減する。
【解決手段】グラフィックスプロセッサに、レンダリングに使用される単精度の機能ユニットに加えて、倍精度の算術演算の直接的なサポートを提供する機能ユニットが追加される。倍精度の機能ユニットは、融合型積和演算を含む複数の異なる演算を、少なくとも倍精度の幅であるデータ経路及び/又は論理回路を使用して、実行することができる。倍精度の機能ユニット及び単精度の機能ユニットは、共通の命令発行回路によって制御することができ、コアに含まれている倍精度の機能ユニットの複製の数を、単精度の機能ユニットの複製の数よりも少なくすることができ、これによって、倍精度のサポートを加えることによる、チップ面積に対する影響が低減する。
【発明の詳細な説明】
【技術分野】
【0001】
[0001]本発明は、グラフィックスプロセッサに関するものであり、より詳細には、グラフィックスプロセッサにおける倍精度の融合型積和演算(Fused Multiply-add)機能ユニットに関するものである。
【発明の背景】
【0002】
[0002]グラフィックスプロセッサは、コンピュータシステムにおいて、2次元のジオメトリデータ又は3次元のジオメトリデータから画像をレンダリングするステップを高速化する目的で一般に使用されている。このようなプロセッサは、一般には、高い並列性及び高いスループットを持つように設計されており、数千個のプリミティブを並列に処理して、複雑でリアルなアニメーション画像をリアルタイムでレンダリングすることができる。高性能のグラフィックスプロセッサは、一般的な中央処理装置(CPU)よりも高い計算能力を提供する。
【0003】
[0003]最近では、グラフィックスプロセッサの処理能力を利用して、画像のレンダリングには無関係の様々な計算を高速化することが注目されている。「汎用」グラフィックスプロセッサを使用して、科学分野、金融分野、ビジネス分野、及びその他の分野における計算を実行することができる。
【0004】
[0004]汎用計算用にグラフィックスプロセッサを適合させる上での一つの問題は、グラフィックスプロセッサは、通常、比較的低い数値精度用に設計されていることである。高品質の画像は、32ビット(「単精度」)浮動小数点値、場合によっては16ビット(「半精度」)浮動小数点値を使用してレンダリングされ得るものであり、機能ユニット及び内部パイプラインは、これらのデータ幅がサポートされるように構成されている。それに対して、多くの汎用計算では、より高い数値精度、例えば、64ビット(「倍精度」)が要求される。
【0005】
[0005]より高い数値精度をサポートするために、グラフィックスプロセッサによっては、一連の機械語命令と32ビット又は16ビットの機能ユニットとを用いて倍精度の計算を実行するためのソフトウェア手法を使用している。この方法ではスループットが低下し、例えば、1回の64ビット乗算演算を完了するのに100個以上の機械語命令が必要となることがある。このような長い命令列により、グラフィックスプロセッサの倍精度のスループットが大幅に低下することがある。一つの代表的なケースにおいては、グラフィックスプロセッサが倍精度の計算を実行するときのスループットは、高性能のデュアルコアCPUチップによって可能であるスループットの約1/5であると推定される(これと比較して、同じグラフィックスプロセッサは、単精度の計算をデュアルコアCPUのスループットの約15〜20倍で実行することができる)。ソフトウェアベースのソリューションは非常に遅いため、従来のグラフィックスプロセッサを倍精度の計算に使用することはめったにない。
【0006】
[0006]別のソリューションは、単純に、グラフィックスプロセッサの算術演算回路の全てを、倍精度のオペランドを扱うよう十分な広さにすることである。これにより、倍精度演算におけるグラフィックスプロセッサのスループットが増大して、単精度におけるスループットに匹敵するものとなる。しかしながら、グラフィックスプロセッサは、一般に、並列演算をサポートするために、各算術演算回路の数十個の複製を備えており、このような各回路のサイズを増大させることによって、チップ面積、コスト、及び電力消費量が相当に増大する。
【0007】
[0007]更に別のソリューションは、所有者が同一の同時係属中の米国特許出願第11/359,353号明細書(出願日:2006年2月21日)に記載されているように、単精度の算術演算回路を利用して倍精度の演算を実行することである。この方法においては、単精度の機能ユニットに含まれている特殊なハードウェアを使用して、倍精度の演算を反復的に実行する。この方法は、ソフトウェアベースのソリューションよりも相当に高速であるが(スループットは、単精度のスループットの1/100以下ではなく、例えば1/4となり得る)、チップの設計が大幅に複雑となり得る。さらに、単精度の演算と倍精度の演算との間で同じ機能ユニットを共有する結果として、同じ機能ユニットを必要とする命令が多すぎる場合に、そのユニットがパイプラインにおけるボトルネックとなることがある。
【発明の概要】
【0008】
[0008]本発明の実施形態は、グラフィックスプロセッサにおける倍精度の算術演算を直接的にサポートする。レンダリングに使用される単精度の機能ユニットに加えて、多目的の倍精度の機能ユニットが提供される。倍精度の機能ユニットは、倍精度の入力に対する融合型積和演算を含む複数の異なる演算を、少なくとも倍精度の幅であるデータ経路及び/又は論理回路を使用して、実行することができる。倍精度の機能ユニット及び単精度の機能ユニットは、共通の命令発行回路によって制御することができ、コアに含まれている倍精度の機能ユニットの複製の数を、単精度の機能ユニットの複製の数よりも少なくすることができ、これによって、倍精度のサポートを加えることによるチップ面積に対する影響が低減する。
【0009】
[0009]本発明の一態様によると、グラフィックスプロセッサは、画像データを生成するようになっているレンダリングパイプラインを有する。このレンダリングパイプラインは、単精度オペランド用に動作するものであり、複数の並列スレッドを実行するようになっている処理コアを含んでいる。処理コアは、倍精度の入力オペランドのセットに対して複数の倍精度演算のうちの一つを選択的に実行するようになっている多目的の倍精度機能ユニットを含んでいる。この多目的の倍精度機能ユニットは、少なくとも一つの算術演算論理回路を含んでおり、倍精度機能ユニットの算術演算論理回路の全ては、倍精度において動作するための十分な広さになっている。いくつかの実施形態においては、倍精度機能ユニットは、倍精度演算のそれぞれが同数のクロックサイクルで完了するように構成されている。また、倍精度機能ユニットは、倍精度演算のうちの任意の一つを完了するために要求される時間(例えば、クロックサイクルの数)がアンダーフロー条件又はオーバーフロー条件によって影響されないように、構成されていてもよい。
【0010】
[0010]様々な倍精度演算及び倍精度演算の組合せをサポートすることができる。一実施形態においては、倍精度演算は、二つの倍精度オペランドを加算する加算演算と、二つの倍精度オペランドを乗算する乗算演算と、第1の倍精度オペランドと第2の倍精度オペランドとの積を計算し、次いで、この積に第3の倍精度オペランドを加算する、融合型積和演算と、を含んでいる。サポートすることのできる別の倍精度演算としては、第1のオペランドと第2のオペランドとに対して比較テストを実行し、この比較テストが満たされているかを示すブール結果を生成する倍精度比較(DSET)演算、二つの倍精度入力オペランドのうち大きい方のオペランドを返す倍精度最大値(DMAX)演算、二つの倍精度入力オペランドのうち小さい方のオペランドを返す倍精度最小値(DMIN)演算、が挙げられる。さらには、倍精度形式から倍精度以外の形式に(又はその逆に)オペランドを変換する形式変換演算もサポートすることができる。
【0011】
[0011]本発明の別の態様によると、グラフィックスプロセッサは、画像データを生成するようになっているレンダリングパイプラインを含んでいる。このレンダリングパイプラインは、複数の並列スレッドを実行するようになっている処理コアを含んでいる。処理コアは、一以上の単精度オペランドに対して算術演算を実行するようになっている単精度の機能ユニットと、倍精度入力オペランドのセットに対して積和演算を実行して倍精度の結果を提供するようになっている倍精度の融合型積和演算(DFMA)機能ユニットと、を含んでいる。このDFMA機能ユニットは、DFMAパイプラインを含んでおり、DFMAパイプラインは、当該DFMAパイプラインを通る単一のパスで積和演算を実行するのに十分に広いデータ経路を有することが好適である。例えば、DFMA機能ユニットは、倍精度の二つの仮数の積を1回の反復で計算するようになっている乗算器と、倍精度の二つの仮数の和を1回の反復で計算するようになっている加算器と、を含んでいてもよい。
【0012】
[0012]さらに、DFMA機能ユニットを、別の演算を実行するように構成することもできる。例えば、いくつかの実施形態においては、DFMAは、一組の倍精度入力オペランドに対して乗算演算を実行して倍精度の結果を提供するように構成されている。いくつかの実施形態においては、乗算演算と融合型積和演算は、それぞれ、同数のクロックサイクルで完了する。同様に、DFMA機能ユニットを、一組の倍精度入力オペランドに対して加算演算を実行して倍精度の結果を提供するように構成することができる。一実施形態においては、加算演算と融合型積和演算は、それぞれ、同数のクロックサイクルで完了する。
【0013】
[0013]いくつかの実施形態においては、処理コアは、並列に動作するようになっている第1の機能ユニットの複数(P個)の複製と、DFMA機能ユニットの複数(N個)の複製と、を含んでいる。ここで、数Pは数Nよりも大きい。一実施形態においては、数Nは1である。
【0014】
[0014]処理コアは、入力マネージャ回路を含んでいてもよく、当該入力マネージャ回路は、DFMA機能ユニット用のP個のセットの倍精度入力オペランドを集めて、P個のセットの倍精度オペランドのうち異なるセットの倍精度オペランドを、異なる(例えば、連続する)クロックサイクルで、DFMA機能ユニットに提供するようになっている。さらに、入力マネージャ回路は、第1の機能ユニット用のP個のセットの単精度入力オペランドを集めて、P個のセットの単精度オペランドのうちの異なるセットの単精度オペランドを、第1の機能ユニットのP個の複製の各々に並列に提供してもよい。
【0015】
[0015]本発明の概念及び利点は、以下の詳細な説明と添付の図面から深く理解されるであろう。
【図面の簡単な説明】
【0016】
【図1】本発明の実施形態によるコンピュータシステムのブロック図である。
【図2】本発明の実施形態による、グラフィックス処理ユニットにおいて実施することのできるレンダリングパイプラインのブロック図である。
【図3】本発明の実施形態による実行コアのブロック図である。
【図4】本発明の実施形態による倍精度機能ユニットによって実行することのできる倍精度算術演算と、倍精度比較演算と、形式変換演算とを一覧表示した図である。
【図5】本発明の実施形態による倍精度機能ユニットの単純化したブロック図である。
【図6】図5の倍精度機能ユニットにおけるオペランド準備ブロックのブロック図である。
【図7】図5の倍精度機能ユニットにおける指数経路のブロック図である。
【図8】図5の倍精度機能ユニットにおける仮数経路のブロック図である。
【図9】図5の倍精度機能ユニットにおける符号経路のブロック図である。
【図10】図5の倍精度機能ユニットにおける出力セクションのブロック図である。
【図11】本発明の実施形態による実行コアのブロック図である。
【図12】本発明の実施形態による、倍精度機能ユニットのためのオペランドの順序付けを示すブロック図である。
【詳細な説明】
【0017】
[0028]本発明の実施形態は、専用の倍精度(例えば、64ビット)機能ユニットを含むグラフィックスプロセッサを提供する。一実施形態においては、倍精度機能ユニットは、加算演算と、乗算演算と、融合型積和演算と、更には、倍精度比較と、倍精度形式とそれ以外の形式との間の形式変換とを実行することができる。
【0018】
I.システムの概要
A.コンピュータシステムの概要
[0029]図1は、本発明の実施形態によるコンピュータシステム100のブロック図である。コンピュータシステム100は、メモリブリッジ105を含むバス経路を介して通信する中央処理装置(CPU)102及びシステムメモリ104を含んでいる。メモリブリッジ105は、例えば、従来のノースブリッジチップであってもよく、バス又はその他の通信経路106(例:HyperTransportリンク)を介してI/O(入力/出力)ブリッジ107に接続されている。I/Oブリッジ107は、例えば、従来のサウスブリッジチップであってもよく、一以上のユーザ入力装置108(例:キーボード、マウス)からユーザ入力を受け取り、当該入力をバス106及びメモリブリッジ105を介してCPU 102に転送する。視覚的出力は、ピクセルベースの表示装置110(例:従来のCRT又はLCDベースのモニター)によって提供され、この表示装置110は、バス又はその他の通信経路113(例:PCI Express(PCI−E)、アクセラレーテッドグラフィックスポート(AGP)リンク)を介してメモリブリッジ105に接続されたグラフィックスサブシステム112の制御下で動作する。I/Oブリッジ107には、システムディスク114も接続されている。スイッチ116は、I/Oブリッジ107と、その他のコンポーネント、例えば、ネットワークアダプタ118、様々なアドインカード120,121との間の接続を提供している。I/Oブリッジ107には、それ以外のコンポーネント(図示していない)として、USB接続装置又はその他のポート接続装置、CDドライブ、DVDドライブなどを接続することもできる。様々なコンポーネントの間のバス接続は、バスプロトコル(例えば、PCI(ペリフェラルコンポーネントインターコネクト)、PCI−E、AGP、HyperTransport)、又はその他の任意のバス通信プロトコル或いはポイントツーポイント通信プロトコルを使用して実施することができ、異なるデバイスの間の接続には、この技術分野において公知であるように、様々なプロトコルを使用することができる。
【0019】
[0030]グラフィックス処理サブシステム112は、グラフィックス処理ユニット(GPU)122とグラフィックスメモリ124とを含んでおり、これらは、例えば、一以上の集積回路デバイス、例えば、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、メモリデバイスを使用して実施することができる。GPU 122は、様々なタスクとして、CPU 102及び/又はシステムメモリ104によってメモリブリッジ105及びバス113を介して供給されるグラフィックスデータからピクセルデータを生成すること、グラフィックスメモリ124と対話してピクセルデータを格納及び更新すること等に関連するタスクを実行するように、構成することができる。例えば、GPU 122は、CPU 102上で実行される様々なプログラムによって提供される2次元又は3次元のシーンデータから、ピクセルデータを生成することができる。さらに、GPU 122は、メモリブリッジ105を介して受け取るピクセルデータを、さらなる処理を実行して、又はそのまま、グラフィックスメモリ124に格納することができる。GPU 122は、グラフィックスメモリ124からのピクセルデータを表示装置110に提供するように構成されたスキャンアウトモジュールも含んでいる。
【0020】
[0031]さらに、GPU 122は、データ処理タスクのために、汎用計算を実行するように構成されている。当該タスクには、グラフィックスアプリケーションに関連するタスク(例えば、ビデオゲーム等における物理モデリング)と、グラフィックスアプリケーションには関連しないタスクとが含まれる。汎用計算の場合には、GPU 122は、システムメモリ104又はグラフィックスメモリ124から入力データを読み取り、一以上のプログラムを実行して当該データを処理し、出力データをシステムメモリ104又はグラフィックスメモリ124に書き込むことが好適である。GPU 122は、汎用計算において使用するための一以上の倍精度の融合型積和演算ユニット(図1には示していない)と、レンダリング演算時に使用する別の単精度の機能ユニットとを含むことが好適である。
【0021】
[0032]CPU 102は、システム100のマスタープロセッサとして動作し、他のシステムコンポーネントの動作を制御及び調整する。具体的には、CPU 102は、GPU 122の動作を制御するコマンドを発行する。いくつかの実施形態においては、CPU 102は、GPU 122用のコマンドストリームをコマンドバッファに書き込む。このコマンドバッファは、システムメモリ104、グラフィックスメモリ124、又は、CPU 102及びGPU 122の双方からアクセス可能な別の記憶域中に存在し得る。GPU 122は、コマンドバッファからコマンドストリームを読み取り、CPU 102の動作とは非同期にコマンドを実行する。これらのコマンドは、画像を生成するための従来のレンダリングコマンドを含み得るものであり、また、CPU 102上で実行されるアプリケーションが画像の生成には関連しないデータ処理をGPU 122の計算能力を利用して行うことを可能にする汎用計算コマンドを含み得る。
【0022】
[0033]図1に示したシステムは例示を目的としており、変形及び変更が可能であることが理解されるであろう。バスのトポロジー(例えば、ブリッジの数、ブリッジの配置編成)は、必要に応じて修正することができる。例えば、いくつかの実施形態においては、システムメモリ104が、ブリッジを通じてではなく直接的にCPU 102に接続されており、他のデバイスが、メモリブリッジ105及びCPU 102を介してシステムメモリ104と通信する。別のトポロジーにおいては、グラフィックスサブシステム112が、メモリブリッジ105ではなくI/Oブリッジ107に接続される。さらに別の実施形態においては、I/Oブリッジ107とメモリブリッジ105とを一つのチップに統合することができる。図1に示した特定のコンポーネントはオプションであり、例えば、任意の数のアドインカード或いは周辺装置をサポートすることができる。いくつかの実施形態においては、スイッチ116が省かれ、ネットワークアダプタ118及びアドインカード120,121がI/Oブリッジ107に直接接続される。
【0023】
[0034]さらに、GPU 122と、システム100の他のコンポーネントとの間の接続を変更することも可能である。いくつかの実施形態においては、グラフィックスサブシステム112が、システム100の拡張スロットに挿入することのできるアドインカードとして実施される。別の実施形態においては、GPUが、バスブリッジ(例えば、メモリブリッジ105、I/Oブリッジ107)と共に一つのチップに統合される。更に別の実施形態においては、GPU 122の要素のいくつか又は全てをCPU 102と統合することができる。
【0024】
[0035]GPUは、任意の量のローカルグラフィックスメモリを備えていてもよく(ローカルメモリを設けなくてもよい)、ローカルメモリ及びシステムメモリを任意の組合せで使用することができる。例えば、ユニファイドメモリアーキテクチャ(UMA)の実施形態においては、専用のグラフィックスメモリデバイスを設けず、GPUは、システムメモリを独占的又は略独占的に使用する。UMAの実施形態においては、GPUをバスブリッジチップに組み込むことができ、又は、GPUをブリッジチップ及びシステムメモリに接続する高速バス(例:PCI−E)を備えた個別のチップとして、GPUを提供することが可能である。
【0025】
[0036]さらに、例えば、1枚のグラフィックスカードに複数のGPUを含めることによって、或いは、複数のグラフィックスカードをバス113に接続することによって、任意の数のGPUをシステムに含めることができることも理解されたい。複数のGPUを、同じ表示装置又は複数の異なる表示装置への画像を生成するように並列に動作させてもよく、或いは、一つのGPUが画像を生成するように動作する一方で、別のGPUが汎用計算(後から説明する倍精度の計算を含む)を実行してもよい。
【0026】
[0037]さらには、本発明の態様を具現化するGPUは、様々な装置、例えば、汎用コンピュータシステム、ビデオゲームコンソール及びその他の特殊用途のコンピュータシステム、DVDプレーヤー、携帯機器(携帯電話、携帯情報端末など)に組み込むことができる。
【0027】
B.レンダリングパイプラインの概要
[0038]図2は、本発明の実施形態による、図1のGPU 122において実施することのできるレンダリングパイプライン200のブロック図である。この実施形態においては、レンダリングパイプライン200は、適用可能なグラフィックス関連のプログラム(例えば、頂点シェーダー、ジオメトリシェーダー、ピクセルシェーダーのうちの少なくとも一つ)と汎用計算プログラムとが、同じ並列処理ハードウェア(本明細書においては「マルチスレッドコアアレイ(multithreaded core array)」202と称する)を使用して実行されるアーキテクチャを使用して、実施されている。
【0028】
[0039]レンダリングパイプライン200は、マルチスレッドコアアレイ202に加えて、フロントエンド204及びデータアセンブラ206と、セットアップモジュール208と、ラスタライザ210と、カラーアセンブリモジュール212と、ラスターオペレーションモジュール(ROP)214と、を含んでいる。これらのコンポーネントのそれぞれは、従来の集積回路技術又はその他の技術を使用して実施することができる。
【0029】
[0040]レンダリング演算においては、フロントエンド204が、状態情報(STATE)と、コマンド(CMD)と、ジオメトリデータ(GDATA)とを、例えば図1のCPU 102から受け取る。いくつかの実施形態においては、CPU 102は、ジオメトリデータを直接提供するのではなく、ジオメトリデータが格納されているシステムメモリ104中の位置への参照情報を提供し、データアセンブラ206が、システムメモリ104からデータを取得する。レンダリング演算においては、状態情報、コマンド、及びジオメトリデータは、基本的に従来の性質のものとすることができ、これらを使用することにより、レンダリング後の(一以上の)必要な画像(例えば、シーンのジオメトリ、ライティング、シェーディング、テクスチャ、モーション、カメラパラメータのうちの一つ以上)を定義することができる。
【0030】
[0041]状態情報及びレンダリングコマンドは、レンダリングパイプライン200の様々なステージにおける処理パラメータ及びアクションを定義する。フロントエンド204は、状態情報及びレンダリングコマンドを、制御経路(図示していない)を介して、レンダリングパイプライン200の別のコンポーネントに導く。この技術分野において公知であるように、これらのコンポーネントは、処理時にアクセスされる様々な制御レジスタに値を格納し、又は制御レジスタ内の値を更新することによって、受け取った状態情報に応答することができ、パイプライン内で受け取ったデータを処理することによって、レンダリングコマンドに応答することができる。
【0031】
[0042]フロントエンド204は、ジオメトリデータをデータアセンブラ206に導く。データアセンブラ206は、ジオメトリデータをフォーマッティングし、それをマルチスレッドコアアレイ202におけるジオメトリモジュール218への配送用に準備する。
【0032】
[0043]ジオメトリモジュール218は、頂点データに対して頂点シェーダープログラム及び/又はジオメトリシェーダープログラムを実行するよう、マルチスレッドコアアレイ202におけるプログラマブル処理エンジン(図示していない)に命令する。これらのプログラムは、フロントエンド204によって提供される状態情報に応答して選択される。頂点シェーダープログラム及び/又はジオメトリシェーダープログラムは、この技術分野において公知であるようにレンダリングアプリケーションによって指定することができ、異なる頂点及び/又はプリミティブに、異なるシェーダープログラムを適用することができる。いくつかの実施形態においては、頂点シェーダープログラム及びジオメトリシェーダープログラムは、マルチスレッドコアアレイ202における同じプログラマブル処理コアを使用して実行される。従って、一つの処理コアは、ある時点においては頂点シェーダーとして動作し、頂点プログラムの命令を受け取って実行することができ、別の時点においては、同じ処理コアがジオメトリシェーダーとして動作し、ジオメトリプログラムの命令を受け取って実行することができる。処理コアはマルチスレッド化することができ、異なるタイプのシェーダープログラムを実行する異なるスレッドを、マルチスレッドコアアレイ202において並列に進行させることができる。
【0033】
[0044]頂点シェーダープログラム及び/又はジオメトリシェーダープログラムが実行された後に、ジオメトリモジュール218は、処理されたジオメトリデータ(GDATA’)をセットアップモジュール208に渡す。セットアップモジュール208は、一般的に従来の設計のモジュールとすることができるものであり、各プリミティブのクリップ空間座標又はスクリーン空間座標からエッジ方程式(edge equations)を生成する。エッジ方程式は、スクリーン空間内の点がプリミティブの内側であるか外側であるかを判定する目的に好適に使用可能である。
【0034】
[0045]セットアップモジュール208は、プリミティブ(PRIM)のそれぞれをラスタライザ210に提供する。ラスタライザ210(一般的に従来の設計とすることができる)は、どのピクセル(存在時)がプリミティブによってカバーされているかを、例えば従来のスキャン変換アルゴリズム(scan−conversion algorithms)を使用して判定する。本明細書において使用する「ピクセル」(又は「フラグメント」)は、一般には、一つのカラー値が決定される、2次元スクリーン空間内の領域を意味する。ピクセルの数及び配置は、レンダリングパイプライン200の設定可能なパラメータとすることができ、特定の表示装置の画面解像度に相関させてもよく、又は相関させなくてもよい。
【0035】
[0046]ラスタライザ210は、どのピクセルがプリミティブによってカバーされているかを判定した後、プリミティブ(PRIM)と、そのプリミティブによってカバーされているピクセルのスクリーン座標(X,Y)のリストとを、カラーアセンブリモジュール212に提供する。カラーアセンブリモジュール212は、ラスタライザ210から受け取ったプリミティブとカバレッジ情報とを、プリミティブの頂点の属性(例:色成分、テクスチャ座標、面法線)に関連付けて、属性のいくつか又は全てをスクリーン座標空間内の位置の関数として定義する平面方程式(又はその他の適切な方程式)を生成する。
【0036】
[0047]これらの属性方程式は、ピクセルシェーダープログラムにおいて、プリミティブの中の任意の位置における属性の値を計算するために好適に使用可能である。当該方程式は、従来の手法を使用して生成することができる。例えば、一実施形態においては、カラーアセンブリモジュール212は、属性UそれぞれについてU=Ax+By+Cという形式の平面方程式の係数A、B、及びCを生成する。
【0037】
[0048]カラーアセンブリモジュール212は、ピクセルの少なくとも一つのサンプリング位置をカバーしているプリミティブそれぞれの属性方程式(EQS、例えば、平面方程式の係数A、B、及びCを含んでいることができる)と、カバーされているピクセルのスクリーン座標(X,Y)のリストとを、マルチスレッドコアアレイ202におけるピクセルモジュール224に提供する。ピクセルモジュール224は、マルチスレッドコアアレイ202におけるプログラマブル処理エンジン(図示していない)に命令して、プリミティブによってカバーされているピクセルそれぞれに対して一以上のピクセルシェーダープログラムを実行させる。これらのプログラムは、フロントエンド204によって提供される状態情報に応答して選択される。あらゆる所与のセットのピクセルに対して使用するピクセルシェーダープログラムは、頂点シェーダープログラム及びジオメトリシェーダープログラムと同様に、レンダリングアプリケーションが指定することができる。
【0038】
[0049]ピクセルシェーダープログラムは、頂点シェーダープログラム及び/又はジオメトリシェーダープログラムを実行する同じプログラマブル処理エンジンを使用して、マルチスレッドコアアレイ202において好適に実行される。従って、一つの処理エンジンは、ある時点においては頂点シェーダーとして動作し、頂点プログラムの命令を受け取って実行することができ、別の時点においては、同じ処理エンジンがジオメトリシェーダーとして動作し、ジオメトリプログラムの命令を受け取って実行することができ、更に別の時点においては、同じ処理エンジンがピクセルシェーダーとして動作し、ピクセルシェーダープログラムの命令を受け取って実行することができる。
【0039】
[0050]ピクセル又はピクセルのグループの処理が完了した時点で、ピクセルモジュール224は、処理されたピクセル(PDATA)をROP 214に提供する。ROP 214は、一般的に従来の設計のものであってもよく、ピクセルモジュール224から受け取るピクセル値と、フレームバッファ226内の構築中の画像のピクセルとを統合する。このフレームバッファ226は、例えば、グラフィックスメモリ124内に位置し得る。いくつかの実施形態においては、ROP 214は、ピクセルをマスクすることができ、又は、新しいピクセルと、レンダリングされている画像に以前に書き込まれたピクセルとをブレンドすることができる。デプスバッファ、アルファバッファ、及びステンシルバッファを使用して、レンダリングされている画像に対する、入力されるピクセルそれぞれの寄与(存在時)を決定することもできる。入力されるピクセル値それぞれと、以前に格納されているピクセル値との適切な組合せに対応するピクセルデータPDATA’が、再びフレームバッファ226に書き込まれる。画像が完成した時点で、フレームバッファ226を表示装置にスキャンアウトし、及び/又は、更なる処理を行うことができる。
【0040】
[0051]汎用計算においては、マルチスレッドコアアレイをピクセルモジュール224によって(又はジオメトリモジュール218によって)制御することができる。フロントエンド204は、例えば図1のCPU 102から状態情報(STATE)及び処理コマンド(CMD)を受け取り、これらの状態情報及びコマンドを、制御経路(図示していない)を介して作業配分ユニットに提供する。この作業配分ユニットは、例えばカラーアセンブリモジュール212又はピクセルモジュール224に組み込むことができる。作業配分ユニットは、マルチスレッドコアアレイ202を構成している複数の処理コアの間で処理タスクを分配する。様々な作業配分アルゴリズムを使用することができる。
【0041】
[0052]処理タスクのそれぞれは、複数の処理スレッドを実行することを含むことが好適であり、この場合、スレッドのそれぞれは同じプログラムを実行する。プログラムは、「グローバルメモリ」(例:システムメモリ104、グラフィックスメモリ124、又は、GPU 122及びCPU 102の両方からアクセス可能な任意の別のメモリ)から入力データを読み取るための命令と、少なくともいくつかの倍精度演算を含む様々な演算を入力データに対して実行して出力データを生成するための命令と、出力データをグローバルメモリに書き込むための命令と、を含むことが好適である。具体的な処理タスクについては、本発明において重要ではない。
【0042】
[0053]図2に記載したレンダリングパイプラインは例示を目的としており、変形及び変更が可能であることが理解されるであろう。このパイプラインは、図示したユニットとは異なるユニットを含むことができ、処理イベントの順序は、本明細書に説明した順序とは異なっていてもよい。さらに、本明細書に説明したモジュールのいくつか又は全ての複数のインスタンスを並列に動作させることができる。このような一実施形態においては、マルチスレッドコアアレイ202は、二つ以上のジオメトリモジュール218と、それと同じ数の並列に動作するピクセルモジュール224とを含む。ジオメトリモジュール及びピクセルモジュールのそれぞれは、マルチスレッドコアアレイ202における処理エンジンの異なるサブセットを協働して制御する。
【0043】
C.コアの概要
[0054]マルチスレッドコアアレイ202は、多数の処理スレッドを並列に実行するようになっている一以上の処理コアを含むことが好適である。ここで、「スレッド」との用語は、特定のセットの入力データに対して実行される特定のプログラムのインスタンスを意味する。例えば、スレッドは、一つの頂点の属性に対して実行される頂点シェーダープログラムのインスタンス、或いは、与えられたプリミティブ及びピクセルに対して実行されるピクセルシェーダープログラムのインスタンス、又は、汎用計算プログラムのインスタンスとすることができる。
【0044】
[0055]図3は、本発明の実施形態による実行コア300のブロック図である。実行コア300は、例えば、上述したマルチスレッドコアアレイ202において実施することができ、様々な計算を実行するための任意の一連の命令を実行するように構成されている。いくつかの実施形態においては、同じ実行コア300を使用して、グラフィックスレンダリングの全ての段階におけるシェーダープログラム(例えば、頂点シェーダープログラム、ジオメトリシェーダープログラム、ピクセルシェーダープログラムのうちの一つ以上)と、汎用計算プログラムとを、実行することができる。
【0045】
[0056]実行コア300は、フェッチ・ディスパッチユニット302と、発行ユニット304と、倍精度の融合型積和演算(DFMA)ユニット320と、DFMA以外の複数(N個)の機能ユニット(FU)322と、レジスタファイル324と、を含んでいる。機能ユニット320,322のそれぞれは、指定された演算を実行するように構成されている。一実施形態においては、DFMAユニット320は、後述するように、倍精度の融合型積和演算と、それ以外の倍精度演算とを好適に実施する。なお、コア300には任意の数のDFMAユニット320を含めることができることを理解されたい。
【0046】
[0057]DFMA以外の機能ユニット322は、基本的に従来の設計のものであってもよく、様々な演算(例えば、単精度の加算演算、乗算演算、ビットごとの論理演算、比較演算、形式変換演算、テクスチャフィルタリング、メモリアクセス(例:ロード動作及び格納動作)、超越関数の近似、補間)をサポートすることができる。機能ユニット320,322はパイプライン化されていてもよく、これにより、この技術分野において公知であるように、前の命令が終了する前に新しい命令を発行することができる。また、任意の組合せの機能ユニットが提供されていてもよい。
【0047】
[0058]実行コア300の動作時、フェッチ・ディスパッチユニット302は、命令の格納域(図示していない)から命令を取得し、当該命令をデコードし、そして、当該命令を、関連するオペランド参照又はオペランドデータと一緒に、オペコードとして発行ユニット304にディスパッチする。発行ユニット304は、命令のそれぞれについて、参照先のオペランドを、例えばレジスタファイル324から取得する。命令のオペランドの全てが用意されると、発行ユニット304は、オペコード及びオペランドをDFMAユニット320又はDFMA以外の機能ユニット322に送ることによって、その命令を発行する。発行ユニット304は、与えられた命令を実行するための適切な機能ユニットを、オペコードを使用して選択することが好適である。フェッチ・ディスパッチユニット302及び発行ユニット304は、従来のマイクロプロセッサのアーキテクチャ及び技術を使用して実施することができ、その詳細な説明については、本発明を理解する上で重要ではないため省略する。
【0048】
[0059]DFMAユニット320及びDFMA以外の機能ユニット322は、オペコード及び関連するオペランドを受け取り、それらのオペランドに対して、指定された演算を実行する。結果のデータは、レジスタファイル324(又は別の転送先)にデータ転送経路326を介して転送することのできる結果値の形式で提供される。レジスタファイル324は、いくつかの実施形態においては、特定のスレッドに割り当てられる区域を有するローカルレジスタファイルと、複数のスレッド間でのデータの共有を可能にするグローバルレジスタファイル、とを含んでいる。レジスタファイル324は、プログラムの実行時に、入力データ、中間結果、及びその他のデータを格納する目的に使用することができる。レジスタファイル324の具体的な実施形態については、本発明において重要ではない。
【0049】
[0060]一実施形態においては、コア300はマルチスレッド化されており、例えば、スレッドのそれぞれに関連付けられる現在の状態情報を維持することによって、最大数(例えば、384個、768個)までのスレッドを並列に実行することができる。コア300は、例えば、あるクロックサイクルにおいて、頂点スレッドからのプログラム命令を発行した後、別の頂点スレッドからの、又は別のタイプのスレッド(例えば、ジオメトリスレッド、ピクセルスレッドなど)からのプログラム命令を発行することができるように、一つのスレッドから別のスレッドに迅速に切り替えるように設計されていることが好適である。
【0050】
[0061]図3の実行コアは例示を目的としており、変形及び変更が可能であることが理解されるであろう。プロセッサには任意の数のコアを含めることができ、コアには任意の数の機能ユニットを含めることができる。フェッチ・ディスパッチユニット302及び発行ユニット304は、任意の望ましいマイクロアーキテクチャとして、例えば、スケーラアーキテクチャ、スーパースケーラアーキテクチャ、又はベクトルアーキテクチャを実施することができ、インオーダー又はアウトオブオーダーの命令発行方式、投機的実行モード、単一命令複数データ(SIMD)命令発行方式などを必要に応じて採用する。いくつかのアーキテクチャにおいては、発行ユニットは、複数の機能ユニットを対象とする複数のオペコード及びオペランドを含むロング命令ワード、又は、一つの機能ユニットを対象とする複数のオペコード及び/又はオペランドを含むロング命令ワードを受け取る、又は発行する、又は受け取って発行することができる。いくつかのアーキテクチャにおいては、実行コアは、例えばSIMD命令を実行するための並列に動作可能な、機能ユニットそれぞれの複数のインスタンスを含むことができる。さらに、実行コアは、パイプライン化された一連の機能ユニットを含むことができ、この場合、一つのステージにおける機能ユニットからの結果は、レジスタファイルに直接転送されるのではなく、後のステージにおける機能ユニットに転送される。このような構成の機能ユニットは、一つのロング命令ワード又は複数の個別の命令によって制御することができる。
【0051】
[0062]さらに、本発明の教示内容にアクセスするこの技術分野における通常の技能を有する者には、DFMAユニット320を任意のマイクロプロセッサの中の機能ユニットとして実施することができ、グラフィックスプロセッサ又は何らかの特定のプロセッサ、或いは実行コアのアーキテクチャには限定されないことが認識されるであろう。例えば、DFMAユニット320を、汎用並列処理ユニット(general−purpose parallel processing unit)又は汎用CPUにおいて実施することができる。
【0052】
C.DFMAユニットの概要
[0063]本発明の一実施形態によると、実行コア300は、DFMAユニット320を含んでおり、当該DFMAユニット320は、3種類の演算、すなわち、倍精度算術演算、比較演算、倍精度形式とそれ以外の形式との間の形式変換、を実行する。
【0053】
[0064]DFMAユニット320は、倍精度浮動小数点形式における入力及び出力を扱い、変換演算においては、倍精度以外の浮動小数点形式又は固定小数点形式における入力及び出力を扱うことが好適である。演算によってオペランドの形式が異なっていてもよい。DFMAユニット320の実施形態について説明する前に、代表的な形式について定義しておく。
【0054】
[0065]本明細書において使用する「fp32」は、IEEE754規格の単精度浮動小数点形式を意味し、この形式においては、正規の浮動小数点数が、符号ビットと、8個の指数ビットと、23個の仮数部ビットとによって表される。2−126〜2127の範囲内の指数が1〜254の整数を使用して表されるように、指数は127だけプラス方向にバイアスされる。「正規」数の場合、23個の仮数部ビットは、24ビットの仮数のうちの小数部分として解釈され、整数部分として1が暗黙的に含まれている(本明細書においては、用語「仮数部」は、先頭の1が暗黙的に含まれているときに使用しているのに対し、「仮数」は、先頭の1が明示的に含まれている(該当時)ことを表す目的で使用している)。
【0055】
[0066]本明細書において使用する「fp64」は、IEEE754規格の倍精度浮動小数点形式を意味し、この形式においては、正規の浮動小数点数が、符号ビットと、11個の指数ビットと、52個の仮数部ビットとによって表される。2−1022〜21023の範囲内の指数が1〜2046の整数を使用して表されるように、指数は1023だけプラス方向にバイアスされる。「正規」数の場合、52個の仮数部ビットは、53ビットの仮数のうちの小数部分として解釈され、整数部分として1が暗黙的に含まれている。
【0056】
[0067]本明細書において使用する「fp16」は、グラフィックスにおいて一般的に使用される「半精度」浮動小数点形式を意味し、この形式においては、正規の浮動小数点数が、符号ビットと、5個の指数ビットと、10個の仮数部ビットとによって表される。2−14〜215の範囲内の指数が1〜30の整数を使用して表されるように、指数は15だけプラス方向にバイアスされる。「正規」数の場合、10個の仮数部ビットは、11ビットの仮数のうちの小数部分として解釈され、整数部分として1が暗黙的に含まれている。
【0057】
[0068]fp16形式、fp32形式、及びfp64形式においては、指数ビット全てが0である数を非正規数(又は「デノーマル」)と称し、仮数における暗黙的な先頭の1を持たないものとして解釈される。このような数は、例えば、計算におけるアンダーフローを表すことができる。指数ビット全てが1であり、仮数部ビット全てが0である(正又は負の)数は、(正又は負の)無限大(INF)と称する。この数は、例えば、計算におけるオーバーフローを表すことができる。指数ビット全てが1であり、仮数部ビットが0以外である数は、非数(NaN)と称し、例えば、定義されていない値を表す目的に使用することができる。ゼロ(0)も特殊な数とみなされ、指数ビット及び仮数部ビットの全てが0にセットされていることによって表される。ゼロはどちらの符号を持つこともでき、従って、正のゼロ及び負のゼロが許可される。
【0058】
[0069]固定小数点形式は、本明細書においては、形式が符号付きであるか符号なしであるかを示す先頭の「s」又は「u」と、ビットの総数を表す数(例:16、32、64)とによって指定する。従って、s32は符号付き32ビット形式を意味し、u64は符号なし64ビット形式を意味し、他も同様である。符号付き形式の場合、2の補数表現を使用することが有利である。本明細書において使用している全ての形式において、最上位ビット(MSB)はビットフィールドの左端であり、最下位ビット(LSB)は右端である。
【0059】
[0070]なお、これらの形式は、本明細書においては例示を目的として定義及び使用しており、DFMAユニットは、本発明の範囲から逸脱することなく、これらの形式又はそれ以外の形式の任意の組合せをサポートすることができることを理解されたい。具体的には、「単精度」及び「倍精度」は、現在定義されている標準形式に限定されず、任意の二つの異なる小数点形式を意味することができることを理解されたい。倍精度形式(例:fp64)は、より広い範囲の浮動小数点数を表し、及び/又は、より高い精度の浮動小数点数を表す関連する単精度形式(例:fp32)よりも多くの数のビットを使用する任意の形式を意味する。同様に、「半精度」は、一般的には、より狭い範囲の浮動小数点数を表し、及び/又は、より低い精度の浮動小数点数を表す、関連する単精度形式よりも少ないビットを使用する形式を意味することができる。
【0060】
[0071]次に、本発明によるDFMAユニット320の実施形態について説明する。図4は、DFMAユニット320のこの実施形態によって実行することのできる、倍精度の算術演算、比較演算、及び形式変換演算を一覧表示する表400である。
【0061】
[0072]セクション402は、算術演算を一覧表示している。加算(DADD)は、fp64の二つの入力A及びCを加算し、fp64の和A+Cを返す。乗算(DMUL)は、fp64の二つの入力A及びBを乗算し、fp64の積A*Bを返す。融合型積和演算(DFMA)は、fp64の三つの入力A,B,及びCを受け取り、A*B+Cを計算する。この演算は、積A*Bが、Cに加算される前に丸められないことにおいて「融合型(fused)」である。正確な値A*Bを使用することにより、精度が向上し、浮動小数点算術演算の近い将来の規格であるIEEE754Rに準拠する。
【0062】
[0073]セクション404は、比較演算を一覧表示している。最大値演算(DMAX)は、fp64のオペランドA及びオペランドBのうちの大きい方を返し、最小値演算(DMIN)は、二つのオペランドのうちの小さい方を返す。二項テスト演算(DSET)は、倍精度のオペランドA及びオペランドBに対して、複数の二項関係テスト(binary relationship tests)のうちの一つを実行し、そのテストが満たされているかを示すブール値を返す。この実施形態においては、テストすることのできる二項関係としては、より大きい(A>B)、より小さい(A<B)、等しい(A=B)、順序付けできない(A?B、これは、A又はBのいずれかがNaNである場合に真である)、さらには、否定(例:A≠B)、及び様々な組合せテスト(A≧B、A<>B、A?=Bなど)が挙げられる。
【0063】
[0074]セクション406は、形式変換演算及び丸め演算を一覧している。この実施形態においては、DFMAユニット320は、fp64形式の数を、別の64ビット形式又は32ビット形式の数に変換する、又はその逆に変換することができる。D2F演算は、オペランドAをfp64からfp32に変換し、F2Dは、オペランドAをfp32からfp64に変換する。D2I演算は、オペランドAを、fp64から、s64、u64、s32、及びu32のうちのいずれかの形式に変換する。変換後の形式を特定するのに個別のオペコードを使用することができることを理解されたい。I2D演算は、整数オペランドCを、s64、u64、s32、及びu32のうちのいずれかの形式からfp64形式に変換する。この場合も、変換前の形式を識別するのに個別のオペコードを使用することができることを理解されたい。この実施形態においては、倍精度形式への変換及び倍精度形式からの変換の全てがDFMAユニット320によってサポートされる。DFMAではない機能ユニットは、他の形式変換(例えば、fp32形式とfp16形式との間、fp32形式と整数形式との間)を実行することができる。
【0064】
[0075]D2D演算は、fp64のオペランドに丸め演算(例えば、IEEE丸めモード)を適用する目的に使用される。これらの演算は、fp64のオペランドを、fp64形式で表される整数値に丸める。一実施形態においては、サポートされるD2D演算として、切捨て(0の方向に丸める)、シーリング(+無限大の方向に丸める)、フロア(−無限大の方向に丸める)、最近接(最も近い整数に切り上げる又は切り捨てる)が挙げられる。
【0065】
[0076]この実施形態においては、DFMAユニット320は、より高度な数学関数(例えば、除算、剰余、平方根)については、直接的なハードウェアサポートを提供しない。しかしながら、DFMAユニット320を使用して、ソフトウェアベースでのこれらの演算の実施を高速化することができる。例えば、除算するための一つの一般的な方法では、商q=a/bが推定され、次いで、t=q*b−aを使用してその推定がテストされる。tが0であれば、商qが正しく求められている。0でない場合、tの大きさを用いて推定した商qが修正され、tが0になるまでテストが繰り返される。各反復のテスト結果tは、1回のDFMA演算(A=q、B=b、C=−a)を使用して正確に計算することができる。同様に、平方根の場合、一つの一般的な方法では、r=a1/2が推定され、次いで、t=r*r−aが計算され、その推定がテストされ、tが0でなければrが修正される。この場合も、各反復のテスト結果tは、1回のDFMA演算(A=B=r、C=−a)を使用して正確に計算することができる。
【0066】
[0077]第II節及び第III節では、図4に示した演算の全てを実行することのできるDFMAユニット320について説明する。第II節では、DFMAユニット320の回路構造について説明し、第III節では、その回路構造を使用して、図4に一覧した演算を実行する方法について説明する。なお、本明細書に説明するDFMAユニット320は例示を目的としており、異なる機能の組合せを、回路ブロックの適切な組合せを使用してサポートすることができることを理解されたい。
【0067】
II.DFMAユニットの構造
[0078]図5は、図4に示した演算の全てをサポートする本発明の実施形態によるDFMAユニット320の単純化したブロック図である。この実施形態においては、DFMAユニット320は、全ての演算に使用されるマルチステージパイプラインを実施している。DFMAユニット320は、プロセッササイクルのそれぞれにおいて、(例えば、図3の発行ユニット304から)三つの新しいオペランド(A0,B0,C0)を、オペランド入力経路502,504,506を介して受け取り、実行すべき演算を示すオペコードを、オペコード経路508を介して受け取ることができる。この実施形態においては、演算は、図4に示した任意の演算とすることができる。オペコードは、演算のみならず、オペランドの入力形式と、結果に使用する出力形式(入力形式と同じ形式又は異なる形式)とを示すことが好適である。なお、図4に示した演算は、当該演算に関連付けられた複数のオペコードを有することができることに留意されたい。例えば、出力がs64であるD2Iのための一つのオペコードと、出力がs32であるD2Iのための別のオペコードとが存在し得る。
【0068】
[0079]DFMAユニット320は、演算のそれぞれを全てのパイプラインステージを通じて処理し、64ビット(特定の形式変換演算の場合には32ビット)の結果値(OUT)を信号経路510上に生成し、対応する条件コード(COND)を信号経路512上に生成する。これらの信号は、アーキテクチャに応じて、例えば、図3に示したようにレジスタファイル324、発行ユニット304、又はプロセッサコアの別の要素に転送され得る。一実施形態においては、パイプラインステージは、プロセッササイクルに対応する。別の実施形態においては、一つのステージが複数のプロセッササイクルを含み得る。さらに、パイプライン内の複数の異なる経路は、並列に動作することが有利である。
【0069】
[0080]第II.A節では、DFMAパイプラインの概要について説明し、第II.B−I節では、各セクションの回路ブロックについて詳しく説明する。
【0070】
A.DFMAパイプライン
[0081]最初に、パイプラインについて、DFMA演算時に回路ブロックがどのように使用されるかに関連して説明する。オペランド準備ブロック514は、(まだfp64形式ではないオペランドについて)オペランドのフォーマッティングと、特殊数の検出とを実行する。さらに、オペランド準備ブロック514は、入力されるfp64のオペランドから、仮数ビット(Am,Bm,Cm)と、指数ビット(Ae,Be,Ce)と、符号ビット(As,Bs,Cs)とを取り出す。一実施形態においては、オペランドの無効な組合せは存在しない。演算において使用されないオペランドは、単に無視することができる。
【0071】
[0082]仮数経路516は、仮数Amと仮数Bmの積を計算する。これと並列に、指数経路518は、指数Ae及び指数Beを使用して、積A*BとオペランドCとの間の相対的な位置合わせ量を求め、オペランドC用の位置合わせ後の仮数(C_align)を仮数経路516に供給する。仮数経路516は、C_alignを積Am*Bmに加算し、次いで、結果を正規化する。仮数経路516は、この正規化に基づいて、位置合わせ信号(ALIGN_NORM)を指数経路518に戻し、指数経路518は、このALIGN_NORM信号と、指数Ae,Be,及びCeとを一緒に使用して、最終結果の指数を求める。
【0072】
[0083]符号経路520は、オペランド準備ブロック514から符号ビットAs,Bs,及びCsを受け取り、結果の符号を求める。仮数経路516は、結果が0である場合を検出し、結果ゼロ(R_ZERO)を符号経路520に提供する。
【0073】
[0084]出力セクション522は、仮数経路516からの結果の仮数Rmと、指数経路518からの結果の指数Reと、符号経路520からの結果の符号Rsとを受け取る。さらに、出力セクション522は、オペランド準備ブロック514から特殊数信号(SPC)を受け取る。出力セクション522は、これらの情報に基づいて、出力経路510に提供することができるように最終結果(OUT)をフォーマッティングし、条件コード(COND)を出力経路512上に生成する。条件コード(結果よりも少ない数のビットを含んでいることが好適である)は、結果の特性に関する一般情報を伝える。例えば、条件コードは、結果が正である、負である、0である、NaNである、無限大である、或いは非正規であるかを示すビットを含み得る。この技術分野において公知であるように、結果と一緒に条件コードが提供される場合、その結果を使用する下流の要素は、場合によっては、その処理において結果自体ではなく条件コードを使用することができる。いくつかの実施形態においては、演算の実行時に例外又はその他のイベントが発生したことを、条件コードを使用して示すことができる。別の実施形態においては、条件コードを完全に省くことができる。
【0074】
[0085]なお、「仮数経路」、「指数経路」などの名称は、特定の演算(例:DFMA)時に経路それぞれの様々な回路ブロックによって実行される機能を示唆するものであるが、任意の内部データ経路上の回路ブロックを、演算に依存する方式で様々な用途に利用することができることを理解されたい。例については後述する。
【0075】
[0086]データ経路に加えて、DFMAユニット320は、制御経路(図5には制御ブロック530として表してある)も提供する。制御ブロック530は、オペコードを受け取り、オペコードに依存する様々な制御信号(この図ではまとめて「OPCTL」として表してある)を生成する。この制御信号は、パイプラインを通じたデータ伝搬と同期して回路ブロックのそれぞれに伝搬され得る(様々な回路ブロックまでのOPCTL信号の接続は図5には示していない)。後述するように、OPCTL信号を使用して、DFMAユニット3220の様々な回路ブロックの動作をオペコードに応答して有効化する、無効化する、及びその他の制御を行うことにより、複数の異なる演算を同じパイプライン要素を使用して実行することを可能とする。本明細書において言及する様々なOPCTL信号は、オペコード自体を含み得るものであり、又は、例えば、制御ブロック530において実施されている組合せ論理回路によってオペコードから導かれる何らかの別の信号を含み得るものである。いくつかの実施形態においては、制御ブロック530は、いくつかのパイプラインステージにおける複数の回路ブロックを使用して実施することができる。なお、一つの演算時に複数の異なるブロックに提供されるOPCTL信号は、同じ信号、又は異なる信号とすることができることを理解されたい。この技術分野における通常の技能を有する者には、本開示に基づいて、適切なOPCTL信号を構築することができるであろう。
【0076】
[0087]一つのステージの複数の回路ブロックに要求される処理時間は、回路ブロックごとに異なることがあり、一つのステージに要求される時間は、演算によって異なり得ることに留意されたい。従って、DFMAユニット320は、一つのパイプラインステージから次のステージまでの複数の異なる経路上のデータ伝搬を制御する目的で、様々なタイミング・同期回路(図5には示していない)を含むことも可能である。また、任意の適切なタイミング回路(例:ラッチ、送信ゲート)が使用されてもよい。
【0077】
A.オペランドの準備
[0088]図6は、本発明の実施形態によるオペランド準備ブロック514のブロック図である。オペランド準備ブロック514は、入力オペランドA,B,及びCを受け取り、仮数部分(Am,Bm,Cm)を仮数経路516に提供し、指数部分(Ae,Be,Ce)を指数経路518に提供し、符号ビット(As,Bs,Cs)を符号経路520に提供する。
【0078】
[0089]オペランドA,B,及びCは、それぞれのNaN検出ブロック612,614,616と、それぞれの絶対値/符号反転ブロック618,620,622において受け取られる。NaN検出ブロック612,614,616のそれぞれは、受け取ったオペランドがNaN(指数ビット全てが1であり、仮数部ビットが0以外である)であるかを判定し、対応する制御信号を生成する。
【0079】
[0090]絶対値/符号反転ブロック618,620,622は、OPCTL信号(図示していない)に応答してオペランドの符号ビットを反転させる目的に使用することができる。例えば、図4に一覧表示した演算において、オペランドの負数又はオペランドの絶対値を使用することが指定されることがある。ブロック618,620,622は、符号ビットを反転させてオペランドの符号を反転する、又は符号ビットを負でない状態(IEEE754形式の場合には0)に強制することができる。入力オペランドがNaNである場合、対応する絶対値/符号反転ブロック618,620,622は、そのNaNを更に「クワイエット型にし」(例えば、仮数部の先頭ビットを1にセットすることによる)、符号ビットをそのままにする。絶対値/符号反転ブロック618,620,622は、それぞれの出力をオペランド選択マルチプレクサ632,634,636に提供する。
【0080】
[0091]倍精度算術演算の場合、絶対値/符号反転ブロック618によって生成されるオペランドA,B,及びCを直接的に使用することができる。比較演算の場合、A/B比較回路624がオペランドAとオペランドBとを比較する。一実施形態においては、絶対値/符号反転ブロック620がオペランドBの符号を反転し、A/B比較回路624が、Aと−Bとの和を、これらがあたかも固定小数点数であるかのように計算する。結果が正であればAがBよりも大きく、結果が負であればAがBよりも小さく、結果が0であればAはBに等しい。さらに、A/B比較回路624は、NaN検出回路612及び614からのNaN情報を受け取ることができる(これらの経路は図6には示していない)。A又はBのいずれか(又は双方)がNaNであるならば、A及びBは「順序付けできない」。結果の情報は制御論理回路630に提供される。制御論理回路630は、結果情報を信号R_TESTとして出力セクション522に提供し、更に、制御信号をオペランド選択マルチプレクサ632,634,636に提供する。
【0081】
[0092]形式変換オペランドの場合、入力はfp64形式ではないことがある。fp32抽出回路626は、F2D演算時にアクティブである。fp32抽出回路626は、オペランドAを受け取って、入力がfp32の非正規数であるかのテスト全てを実行する。さらに、fp32抽出回路626は、受け取ったオペランドの仮数部フィールドを23ビットから52ビットに拡張する(例えば、末尾の0を追加することによる)。fp32抽出回路626は、fp32の8ビットの指数を11ビットに拡張し、指数のバイアスを127から1023に増大させる(例えば、fp32の指数に896を加えることよる)。
【0082】
[0093]符号なし/符号付き(U/S)抽出回路628は、I2D演算時にアクティブである。U/S抽出回路628は、u32、s32、u64、s64のいずれかの形式の固定小数点オペランドCを受け取り、fp64に変換することができるようにそれを準備する。U/S抽出回路628は、固定小数点オペランドを、1の補数(又は2の補数)の形式から符号・絶対値形式(sign−magnitude form)に変換し、オペランドが仮数部フィールドにおいて桁が合うように先頭又は最後に0を付加する。U/S抽出回路628は、自身の出力をオペランド選択マルチプレクサ636に提供し、さらに、I2D入力信号として指数経路518に提供する。
【0083】
[0094]オペランド選択マルチプレクサ632,634,636は、制御論理回路630からの信号に応答して、オペランドA,B,Cを選択する。オペランド選択マルチプレクサ632は、絶対値/符号反転回路618からのオペランドAと、(fp64形式で表現されている)一定値0.0及び1.0との間での選択を行う。DMUL演算及びDFMA演算の場合、オペランドAが選択される。DMIN(DMAX)演算の場合、A<B(A>B)であればオペランドAが選択され、そうでなければ1.0が選択される。DADD演算及びI2D演算の場合、0.0が選択される。
【0084】
[0095]オペランド選択マルチプレクサ634は、絶対値/符号反転回路620からのオペランドBと、(fp64形式で表現されている)一定値0.0及び1.0との間での選択を行う。DMUL演算及びDFMA演算の場合、オペランドBが選択される。DMIN(DMAX)演算の場合、B<A(B>A)であればオペランドBが選択され、そうでなければ1.0が選択される。DADD演算及びI2D演算の場合、0.0が選択される。
【0085】
[0096]オペランド選択マルチプレクサ636は、絶対値/符号反転回路622からのオペランドCと、fp32抽出回路626からの抽出されたfp32値と、U/S抽出回路628からの抽出された符号なし又は符号付き整数値と、(fp64形式で表現されている)一定値0.0との間での選択を行う。DADD演算及びDFMA演算の場合、オペランドCが選択される。DMUL演算及び比較演算の場合、一定値0.0が選択される。F2D演算の場合、fp32抽出回路626からの抽出されたfp32値が選択され、I2D演算の場合、U/S抽出回路628からの抽出されたu/s値が選択される。
【0086】
[0097]選択マルチプレクサ632,634,636によって選択されたオペランドA,B,及びCは、特殊数検出回路638,640,642に提供される。fp64のオペランドの場合、特殊数検出回路638,640,642は、全ての特殊数条件(非正規、NaN、無限大、0を含む)を検出する。F2D演算の場合、特殊数検出回路642は、fp32抽出回路626から経路644を介してfp32特殊数情報を受け取る。特殊数検出回路638,640,642のそれぞれは、オペランドが特殊数であるか否かと、特殊数であるならばそのタイプとを示す特殊数信号(SPC)を生成する。特殊数信号SPCは、図5に示したように信号経路524を通じて出力セクション522に提供される。特殊数検出回路には、一般的に従来の設計のものを使用することができる。代替の一実施形態においては、(回路612,614,及び616によって実行される)NaN検出は、回路638,640,642では繰り返されない。代わりに、特殊数検出回路638,640,642のそれぞれは、NaN検出回路612,614,及び616のうちの対応する回路からNaN信号を受け取り、その信号を使用して、オペランドがNaNであるかを判定する。
【0087】
[0098]特殊数検出回路638,640,及び642は、いずれかの特殊数が検出されるか否かにかかわらず、オペランドを、仮数ビットと、指数ビットと、符号ビットとに分ける。特殊数検出回路638は、オペランドAの仮数の部分(Am)を仮数経路516(図5)に提供し、オペランドAの指数の部分(Ae)を指数経路518に提供し、符号ビット(As)を符号経路520に提供する。特殊数検出回路640は、オペランドBの仮数の部分(Bm)を仮数経路516に提供し、オペランドBの指数の部分(Be)を指数経路518に提供し、符号ビット(Bs)を符号経路520に提供する。特殊数検出回路642は、オペランドCの仮数の部分(Cm)及び指数の部分(Ce)を指数経路518に提供し、符号ビット(Cs)を符号経路520に提供する。いくつかの実施形態においては、特殊数検出回路638,640,642は、仮数Am,Bm,Cmに先頭の1を付加する(数が非正規であるときを除く)。
【0088】
B.指数経路
[0099]図7は、本発明の実施形態による指数経路518のブロック図である。
【0089】
[0100]指数計算回路702は、オペランド準備ブロック514(図5)から指数ビットAe,Be,及びCeを受け取り、DFMA結果のA*B+Cのブロック指数を計算する。従来の指数計算回路が使用されてもよい。一実施形態においては、全てのオペランドが正規数である場合、指数計算回路は、AeとBeとを加算し、fp64の指数のバイアス(1023)を減算して積A*Bの指数を求め、次いで、この積の指数と指数Ceのうちの大きい方を、DFMA結果のブロック指数(BLE)として選択する。このブロック指数BLEは、下流の最終指数計算回路704に提供される。一以上のオペランドが非正規数(特殊数信号SPCによって示される)である場合、適切な論理回路を使用してブロック指数BLEを求めることができる。別の実施形態においては、特殊数が含まれる演算における指数の決定は、後述するように出力セクション522において扱われる。
【0090】
[0101]さらに、指数計算ブロック702は、Cmと積Am*Bmの小数点位置が合うようにオペランドCの仮数を実質的に左又は右にシフトさせる量を求める。この量は、制御信号Sh_Cとしてシフト回路706に提供される。この制御信号は、Cmを右シフトすることによって、実質的な左シフト又は右シフトを必ず達成することができるように、Cmの余分なパディングを考慮することが好適である。
【0091】
[0102]仮数Cmは符号反転回路708に提供され、符号反転回路708は、条件付きで、すなわち、Cと積A*Bとの間に相対的マイナス符号(relative minus sign)が存在している場合に、(例えば、1の補数による符号反転を使用して)Cmの符号を反転する。相対的マイナス符号は、後述するように符号経路520において検出され、符号制御信号SignCTLは、相対的マイナス符号が存在しているかを示す。符号反転回路708の出力(Cm又は〜Cmのいずれか)は、シフト回路706に提供される。
【0092】
[0103]一実施形態においては、シフト回路706は217ビットのバレルシフターであり、54ビットの仮数Cmを最大157ビットだけ右シフトすることができる。Cmを右シフトする量は、Sh_C信号によって決まる。仮数Cmは、必要な距離だけ右シフトすることができるように位置合わせされた状態でシフターに入力されることが好適である。217ビットというサイズは、53ビットの仮数Cm(及びガードビットとラウンドビット)の全体を、106ビットの積A*B(及び積のガードビットとラウンドビット)の左又は右に合わせる(106ビットの積A*Bは、217ビットフィールドのMSBから右に55ビットの位置に合わせられる)のに十分な空間が確保されるように選択されている。右シフトによってバレルシフターからはみ出したビットは破棄することができる。別の実施形態においては、フラグビットを使用して、右シフトによってバレルシフターからはみ出したビットの全てが「1」であるかを追跡し、この情報を、後述する丸め演算において使用することができる。
【0093】
[0104]代替実施形態においては、従来のスワップマルチプレクサ(swap mux)を使用して、積Am*BmとCmとの間で大きい方のオペランドを選択することができ、次いで、小さい方のオペランドを右シフトすることができる。
【0094】
[0105]D2D演算の場合、仮数CmはD2D論理回路710にも提供される。D2D論理回路710は、仮数Cmと、指数Ceと、符号Csとを受け取り、整数丸め規則を適用する。一実施形態においては、D2D論理回路710は、2進小数点の位置を指数Ceに基づいて決定し、次いで、OPCTL信号(図示していない)に基づいて選択される丸め規則を適用する。丸めモードは、従来の論理回路を使用して実施することができる。また、任意の組合せの丸めモード(例えば、切捨てモード、シーリングモード、フロアモード、最近接モード、ただしこれらに限定されない)をサポートしてもよい。
【0095】
[0106]選択マルチプレクサ712は、シフトされた仮数C_Shiftと、D2D論理回路の出力と、U/S抽出回路628(図6)からのI2D入力とを受け取り、これらの入力のうちの一つを、OPCTL信号に基づいて、仮数経路516に供給される位置合わせ後の仮数C_alignとして選択する。倍精度算術演算及び比較演算の場合、オペランドC_Shiftが選択される。形式変換D2D又はI2Dの場合、C_Shift以外の該当する入力が選択される。
【0096】
[0107]アンダーフロー論理回路713は、fp64及びfp32の結果における潜在的なアンダーフローを検出するように構成されている。D2F演算以外の演算の場合、アンダーフロー論理回路713は、11ビットのfp64ブロック指数BLEが0であるか、又は、非正規結果が生じうるほど十分に0に近いかを判定する。アンダーフロー論理回路713は、指数が0に達しない範囲で仮数を左シフトすることのできる最大ビット数を、ブロック指数に基づいて求める。この数は、8ビットのアンダーフロー信号U_fp64として仮数経路516(図8を参照)に提供される。D2F演算の場合、指数は8ビットのfp32の指数として扱われ、アンダーフロー論理回路713は、許容される最大左シフトを求める。この数は、8ビットのアンダーフロー信号U_fp32として仮数経路516に提供される。
【0097】
[0108]指数経路518は、最終指数計算論理回路704を更に含んでいる。減算回路720には、ブロック指数BLEが提供される。さらに、減算回路720には、仮数経路516からのブロックシフト(BL_Sh)信号が提供される。このBL_Sh信号は、後述するように、積Am*BmをオペランドC_alignに加算したときのMSBの相殺効果を反映している。減算回路720は、BLEからBL_Shを減算して差EDIFを求める。アンダーフロー/オーバーフロー回路722は、減算結果EDIFにおけるアンダーフロー又はオーバーフローを検出する。プラス1回路724は、結果のEDIFに1を加算し、マルチプレクサ720は、アンダーフロー/オーバーフロー条件に基づいて、EDIF信号とEDIF+1信号のいずれかを結果の指数Reとして選択する。結果Reとアンダーフロー/オーバーフロー信号(U/O)とが、出力セクション522に提供される。
【0098】
C.仮数経路
[0109]図8は、本発明の実施形態による仮数経路516のブロック図である。仮数経路516は、オペランドA,B,及びCの仮数に対して積演算及び和演算を実行する。
【0099】
[0110]53×53乗算器802は、(上述した)オペランド準備ブロック514から仮数Am及びBmを受け取り、106ビットの積Am*Bmを計算する。この積は168ビット加算器804に提供され、加算器804は、位置合わせ後の仮数C_alignを更に受け取る。バレルシフター706によって使用される217ビットフィールドの末尾部分のビットは破棄することができ、或いは、末尾部分のビットが0でないか、又は全て1であるかを示すフラグビットを維持することができる。加算器804は、出力Sum及び〜Sum(和の2の補数)を生成する。マルチプレクサ806は、Sum及び〜Sumのいずれかを、和のMSB(符号ビット)に基づいて選択する。選択された和(S)は、ゼロ検出回路814と左シフト回路816とに提供される。ゼロ検出回路814は、選択された和Sが0であるか否かを判定し、対応するR_ZERO信号を符号経路520に提供する。
【0100】
[0111]さらに、仮数経路516は、和Sを正規化する。LZD回路808,810を使用して、Sum及び〜Sumの双方について先頭のゼロの検出(LZD)が並列に実行される。LZD回路808,810のそれぞれは、自身の入力における先頭のゼロの数を示すLZD信号(Z1,Z2)を生成する。LZDマルチプレクサ812は、和のMSB(符号ビット)に基づいて、該当するLZD信号(Z1又はZ2)を選択する。マルチプレクサ806によってSumが選択されるならばZ2を選択し、マルチプレクサ806によって〜Sumが選択されるならばZ1を選択する。選択されたLZD信号は、ブロックシフト信号BL_Shとして指数経路518に提供され、指数経路518において、当該LZD信号が使用されて、上述したように結果の指数が調整される。
【0101】
[0112]正規化論理回路818は、和Sの正規化シフトを決める左シフト量Lshiftを選択する。正規数の結果の場合、左シフト量は、52ビットの仮数部(及びガードビットとラウンドビット)を残して先頭の1が仮数フィールドの外にシフトされるだけ十分に大きいことが好適である。しかしながら、場合によっては、結果は、fp64非正規数又はfp32非正規数として表現すべきアンダーフローである。一実施形態においては、D2F以外の演算の場合、正規化論理回路818は、BL_Shがアンダーフロー信号U_fp64よりも大きくない限りは、LZDマルチプレクサ812からの出力BL_Shを選択し、BL_Shがアンダーフロー信号U_fp64よりも大きい場合、正規化論理回路818は、左シフト量としてU_fp64を選択する。D2F演算の場合、正規化論理回路818は、fp32アンダーフロー信号U_fp32を使用して左シフト量Lshiftを制限する。
【0102】
[0113]左シフト回路816は、和Sを量Lshiftだけ左シフトする。結果のSnは、丸め論理回路820と、プラス1加算器822と、仮数選択マルチプレクサ824とに提供される。丸め論理回路820は、IEEE規格の算術演算に対して定義されている四つの丸めモード(最近接、フロア、シーリング、切捨て)を実施することが好適であり、異なるモードにおいては異なる結果が選択され得る。OPCTL信号又は別の制御信号(図示していない)を使用して、丸めモードの一つを指定することができる。丸め論理回路820は、丸めモードと、正規化された和Snとに基づいて、結果のSnを選択するのか、又はプラス1加算器822によって計算されるSn+1を選択するのかを決定する。選択マルチプレクサ824は、適切な結果(Sn又はSn+1)を選択することによって、丸め論理回路820からの制御信号に応答する。
【0103】
[0114]マルチプレクサ824によって選択された結果は、フォーマッティングブロック826に渡される。浮動小数点出力を有する演算の場合、ブロック826は、仮数Rmを出力セクション522に提供する。和Sは、(整数演算をサポートするため)少なくとも64ビット幅であることが好適であり、余分なビットはフォーマッティングブロック826によって削除することもできる。D2I演算(整数出力を有する)の場合、フォーマッティングブロック826は、結果を、LSBを含む52ビットのint_Lフィールドと、MSBを含む11ビットのint_Mフィールドとに分ける。Rm、int_L、及びint_Mは、出力セクション522に提供される。
【0104】
D.符号経路
[0115]図9は、本発明の実施形態による符号経路520のブロック図である。符号経路520は、オペランド準備ブロック514(図5)からオペランドの符号As,Bs,及びCsを受け取る。さらに、符号経路520は、仮数経路516からの結果ゼロ信号R_Zeroと、進行中の演算のタイプを示すOPCTL信号と、オペランド準備ブロック514からの特殊数信号SPCとを受け取る。符号経路520は、これらの情報に基づいて、結果の符号を求めて符号ビットRsを生成する。
【0105】
[0116]より具体的には、符号経路520は、積/和回路902と最終符号回路904とを含んでいる。積/和回路902は、オペランド準備ブロック514から、オペランドA,B,及びCの符号ビットAs,Bs,及びCsを受け取る。積/和回路902は、符号ビットAs及びBsと従来の符号論理規則(sign logic rules)とを使用して、積A*Bの符号(Sp)を求め、次いで、この積の符号と符号ビットCsとを比較し、積とオペランドCとが同符号を有するか又は異符号を有するかを判定する。積/和回路904は、この情報に基づいて、SignCTL信号をアサート又はデアサートし、SignCTL信号が、最終符号回路904と、指数経路518における符号反転ブロック708(図7)とに提供される。さらには、積とオペランドCとが同符号を有する場合、最終結果もその符号を有し、積とオペランドCとが異符号を有する場合、結果は、どちらが大きいかによって決まる。
【0106】
[0117]最終符号回路904は、最終的な符号を決定する上で必要な情報の全てを受け取る。具体的には、最終符号回路904は、符号情報(積の符号Spを含む)と、積/和回路902からのSignCTL信号と、符号ビットAs,Bs,及びCsとを受け取る。さらに、最終符号回路904は、仮数経路516からのゼロ検出信号R_ZEROと、オペランド準備ブロック514からの特殊数信号SPCとを受け取る。さらに、最終符号回路904は、仮数経路516における加算器804から和のMSB(和が正であるか負であるかを示す)を受け取る。
【0107】
[0118]最終符号回路904は、これらの情報に基づいて、従来の符号論理回路を使用して結果の符号ビットRsを決定することができる。例えば、DFMA演算の場合、符号ビットSpとCsとが同じであるならば、結果もその符号を有する。SpとCsとが異符号であるならば、仮数経路516における加算器804が、(Am*Bm)−C_alignを計算する。Am*BmがC_alignより大きい場合、加算器804は正の結果Sumを計算し、積の符号Spを選択すべきである。Am*BmがC_alignより小さい場合、加算器804は負の結果Sumを計算し、符号Csを選択すべきである。加算器804の出力SumのMSBは、結果の符号を示しており、この選択を駆動する目的に使用することができる。結果Sumが0である場合、R_ZERO信号がアサートされ、最終符号回路904は、いずれか適切な符号を選択することができる(fp64形式では0は正又は負のどちらでもよい)。DFMA以外の演算の場合、最終符号回路904は、最終的な符号としていずれかのオペランドの符号を通過させることができる。
【0108】
E.出力セクション
[0119]図10は、本発明の実施形態によるDFMAユニット320の出力セクション522のブロック図である。
【0109】
[0120]出力マルチプレクサ制御論理回路1002は、指数経路518(図7)からのアンダーフロー/オーバーフロー(U/O)信号と、オペランド準備ブロック514(図6)からのR_test信号及びSPC信号と、進行中の演算のタイプを示すOPCTL信号とを受け取る。出力マルチプレクサ制御論理回路1002は、これらの情報に基づいて、仮数部選択マルチプレクサ1004及び指数選択マルチプレクサ1006のための選択制御信号を生成する。さらに、出力マルチプレクサ制御論理回路1002は、条件コード信号COND(例えば、オーバーフロー又はアンダーフロー条件、NaN条件、又はその他の条件を示すことができる)を生成する。いくつかの実施形態においては、条件コードは、DSET演算時にブール結果を伝える目的にも使用される。
【0110】
[0121]仮数部選択マルチプレクサ1004は、仮数経路516からの結果の仮数部Rmと、最大52ビットの整数出力(D2I演算時に使用される)と、複数の特殊値とを受け取る。特殊値としては、一実施形態においては、1の52ビットフィールド(D2I演算において64ビットの最大整数を表現するために使用される)、0の52ビットフィールド(0.0又は1.0が結果である場合に使用される)、52ビットフィールド0x0_0000_8000_0000(D2I演算において32ビットの最小整数を表現するために使用される)、先頭が1である52ビットフィールド(内部で生成されるクワイエット型NaNを表すために使用される)、max_int32値(例:0x7fff_ffff_ffff_ffff)(D2I演算において32ビットの最大整数を表現するために使用される)、クワイエット型NaN値(オペランド準備ブロック514からの、NaNである入力オペランドを通過させるために使用される)、min_denorm値(例:最後のビット位置が1)(アンダーフローの場合に使用される)が挙げられる。演算に応じて、及びオペランドのいずれか又は結果が特殊数であるかに応じて、入力のいずれかを選択することができる。
【0111】
[0122]指数選択マルチプレクサ1006は、指数経路518からの結果の指数Reと、最大11個の整数ビット(整数形式の出力の場合のMSB)と、複数の特殊値とを受け取る。特殊値としては、一実施形態においては、0x3ff(fp64における1.0の指数)、0x000(非正規及び0.0の場合の指数)、0x7fe(正規数のfp64最大指数)、0x7ff(fp64 NaN又はfp64無限大の結果の場合)が挙げられる。演算に応じて、及びオペランドのいずれか又は結果が特殊数であるかに応じて、入力のいずれかを選択することができる。
【0112】
[0123]連結ブロック1008は、符号ビットRsと、マルチプレクサ1004によって選択される仮数部ビットと、マルチプレクサ1006によって選択される指数ビットとを受け取る。連結ブロック1008は、結果を、(例えば、IEEE754規格に従って符号、指数、仮数部の順序に)フォーマッティングし、64ビットの出力信号OUTを提供する。
【0113】
F.オペランドのバイパス経路又は通過経路
[0124]DFMAユニット320は、いくつかの実施形態においては、オペランドを修正せずに様々な回路ブロックを伝搬させることのできるバイパス経路又は通過経路を提供する。例えば、いくつかの演算時、乗算器802は、入力(例:Am)に1.0を乗算して、入力Amを実質的に通過させる。Amに1.0を乗算するのではなく、乗算器802の周囲に入力Amのバイパス経路を提供することができる。このバイパス経路は、Amが加算器804への入力に正しいタイミングで到着するように、乗算器802と同じ数のクロックサイクルを消費することが有利である。しかしながら、乗算器802がバイパスされるとき、乗算器802を電力遮断状態又は低電力状態に設定することができ、これによって、回路面積が少し増大することと引き換えに電力消費量が低減する。同様に、いくつかの演算時、加算器804を使用して入力(例:C_align)に0を加算し、入力C_alignを実質的に通過させる。特に、加算器804の出力Sum及び〜Sumのどちらをマルチプレクサ806によって選択すべきかが事前に既知である演算の場合、C_alignに0を加算するのではなく、加算器804の周囲に入力C_alignのためのバイパス経路を提供することができる。入力C_alignを、Sumの経路及び〜Sumの経路のうちの正しい経路にバイパスさせることができる。この場合も、バイパス経路は、タイミングが影響を受けないように、加算器804と同じ数のクロックサイクルを消費することが有利である。しかしながら、加算器804をバイパスする演算においては、加算器804を電力遮断状態又は低電力状態に設定することができるので、電力消費量を低減することができる。
【0114】
[0125]従って、(後の)第III節における演算の説明では、様々なオペランドを特定の回路ブロックにバイパス又は通過させることを言及している。このことは、オペランドに影響を与えない演算(例:0を加算する、1.0を乗算する)を実行するよう介在する回路ブロックを制御して、当該回路ブロックへの入力がそのまま出力として通過させることによって、又は、バイパス経路を使用することによって、達成することができることを理解されたい。さらには、ある回路ブロックの周囲のバイパス経路又は通過経路をたどるとき、以降の回路ブロックにおいては、引き続きそのバイパス経路を必ずしもたどらなくてよい。さらには、一つの回路ブロックにおいて修正された値は、以降の回路ブロックの周囲のバイパス経路をたどることができる。演算時に特定の回路ブロックがバイパスされる場合、その回路ブロックを電力遮断状態に設定して電力消費量を低減する、又は、通常に動作させて、例えば選択マルチプレクサ又はその他の回路を使用することによってその出力を無視させることができる。
【0115】
[0126]本明細書に説明したDFMAユニットは例示を目的としており、変形及び変更が可能であることが理解されるであろう。本明細書に説明した回路ブロックの多くは、従来の機能を提供し、この技術分野において公知である技術を使用して実施することができる。従って、これらのブロックの詳しい説明は省略した。演算回路をブロックに分割する方式は変更することができ、ブロックを組み合わせる、或いはブロックを変更することができる。さらに、パイプラインステージの数と、特定の回路ブロック又は演算を特定のパイプラインステージに割り当てる方式も、変更する、又は別の形態をとることができる。特定の実施形態における回路ブロックの選択及び編成は、サポートする一連の演算に依存し、演算の可能な組合せのそれぞれにおいて、本明細書に説明したブロックの全てが必ずしも要求されるわけではないことが、当業者には認識されるであろう。
【0116】
III.DFMAユニットの演算
[0127]DFMAユニット320は、図4に一覧した演算の全てを、上述した回路ブロックを利用して、回路面積の面で効率的にサポートすることが好適である。従って、DFMAユニット320の動作は、少なくともいくつかの側面において、実行される演算に依存する。以下の節では、DFMAユニット320を使用して、図4に一覧した演算のそれぞれを実行する方法について説明する。
【0117】
[0128]なお、浮動小数点例外(例えば、オーバーフロー条件、アンダーフロー条件を含む)は、余分な処理サイクルを必要とすることなくDFMAユニット320の中で扱われることに留意されたい。例えば、入力オペランドがNaN又はその他の特殊数である演算は、図5のオペランド準備ブロック514において検出され、出力セクション522において適切な特殊数出力が選択される。NaN、アンダーフロー、オーバーフロー、又はその他の特殊数が演算の過程において生じた場合、その条件が検出され、出力セクション522において適切な特殊数出力が選択される。
【0118】
A.融合型積和演算(DFMA)
[0129]DFMA演算の場合、DFMAユニット320は、fp64形式のオペランドA0,B0,及びC0と、DFMA演算を実行することを示すオペコードと、を受け取る。NaN回路612,614,616は、選択されるオペランドのいずれか一つ以上がNaNであるかを判定する。絶対値/符号反転回路618,620,622は、オペランドのそれぞれについて、必要な場合に符号ビットを反転する(又は反転しない)。オペランド選択マルチプレクサ632,634,及び636は、それぞれの絶対値/符号反転回路618,620,及び622の出力を選択し、これらの出力を特殊数検出回路638,640,642に提供する。特殊数検出回路638,640,及び642は、オペランドのそれぞれが特殊数であるかを判定し、該当する特殊数SPC信号を経路524上に生成する。特殊数検出回路638,640,及び642は、仮数Am,Bm,及びCm(正規数の場合は先頭に1が付加されており、非正規数の場合は先頭に0が付加されている)を仮数経路516に提供し、指数Ae,Be,及びCeを指数経路518に提供し、符号ビットAs,Bs,及びCsを符号経路520に提供する。
【0119】
[0130]A/B比較回路624、fp32抽出回路626、及び、U/S整数抽出回路628はDFMA演算においては使用されず、これらの回路は、必要に応じて、電力遮断状態又は低電力状態に設定され得る。
【0120】
[0131]符号経路520においては、積/和回路902が、積A*Bが正であるか負であるかを符号ビットAs及びBsから判定し、積の符号Spと符号ビットCsとを比較する。積とCsとが異符号を有する場合、異符号を示すためにSignCTL信号がアサートされ、積とCsとが同符号を有する場合、SignCTL信号がデアサートされる。
【0121】
[0132]指数経路518(図7)においては、指数計算ブロック702が、指数Ae,Be,及びCeを受け取る。指数計算ブロック702は、指数Aeと指数Beとを加算し、積A*Bのブロック指数を求め、次いで、この積のブロック指数と指数Ceのうちの大きい方を、結果のブロック指数BLEとして選択する。さらに、指数計算ブロック702は、積のブロック指数と指数Ceのうちの小さい方を、二つのうちの大きい方から減算し、対応するシフト制御信号Sh_Cを生成する。アンダーフロー論理回路713は、ブロック指数BLEがアンダーフロー又は潜在的なアンダーフローに対応しているかを検出し、アンダーフロー信号U_fp64を生成する(DFMA演算時にはU_fp32信号は使用されない。)。
【0122】
[0133]符号反転ブロック708は、オペランド準備ブロック514からの仮数Cmと、符号経路520からのSignCTL信号とを受け取る。SignCTL信号がアサートされている場合、符号反転ブロック708は、相対的マイナス符号を考慮するために仮数Cmを反転し、反転されたCmをシフト回路706に提供する。アサートされていない場合、符号反転ブロック708は、Cmを修正せずにシフト回路706に提供する。
【0123】
[0134]シフト回路706は、符号反転ブロック708によって提供された仮数Cmを、シフト制御信号Sh_Cに対応する量だけ右シフトし、シフトされた仮数C_Shiftを選択マルチプレクサ712に提供する。選択マルチプレクサ712は、シフトされた仮数C_Shiftを選択し、このシフトされた仮数をオペランドC_alignとして仮数経路516に提供する。
【0124】
[0135]仮数経路516(図8)においては、乗算器802が、106ビットの積Am*Bmを計算し、この積を168ビットの加算器804に提供する。乗算器802の動作は、指数計算ブロック702の動作と並列に行うことができる。
【0125】
[0136]加算器804は、指数経路518の選択マルチプレクサ712からオペランドC_alignを受け取り、入力Am*BmとC_alignとを加算してSum及び〜Sumを求める。SumのMSBに基づいて、マルチプレクサ806は、これら出力の一方を最終的な和として選択する。Sumが正である(MSBが0)ならばSumが選択され、Sumが負である(MSBが1)ならば〜Sumが選択される。LZD回路808及び810は、それぞれ、〜Sum及びSumにおける先頭の0の数を求める。マルチプレクサ812は、LZD出力の一方を先頭の0の数として選択し、先頭ゼロ信号BL_Shを指数経路518と正規化論理回路818とに提供する。
【0126】
[0137]マルチプレクサ806によって選択される最終的な和Sは、ゼロ検出回路814にも提供される。ゼロ検出回路814は、最終的な和が0である場合、符号経路520へのR_ZERO信号をアサートし、そうでない場合、R_ZERO信号をアサートしない。
【0127】
[0138]正規化論理回路818は、U_fp64信号がアンダーフローを示していない限りは、先頭ゼロ信号を正規化信号Lshiftとして選択し、U_fp64信号がアンダーフローを示している場合、仮数は指数1に対応する位置までシフトされるのみであり、従って、結果は非正規形式において表現される。シフト回路816は、選択された和SをLshift信号に応答して左シフトし、正規化された和Snを生成する。プラス1加算器822は、正規化された和Snに1を加算する。丸め論理回路820は、(OPCTL信号によって指定される)丸めモードと、(経路821上の)正規化された和SnのLSBとを使用して、正規化された和を切り上げるべきであるかを判定する。切り上げるべきである場合、丸め論理回路820は、加算器822からの出力Sn+1が選択されるように、選択マルチプレクサ824を制御する。そうでない場合、選択マルチプレクサ824は、正規化された和Snを選択する。選択マルチプレクサ824は、選択された結果Rmを出力セクション522に提供する。いくつかの実施形態においては、選択マルチプレクサ824は、結果の仮数から先頭ビット(正規数の場合は1)をドロップする。
【0128】
[0139]丸め演算と並列に、指数経路518(図7)は、結果の指数Reを計算する。具体的には、減算ブロック720が、指数計算ブロック702からのブロック指数BLEと、仮数経路516からのブロックシフト信号BL_Shとを受け取る。減算ブロック720は、これら二つの入力を減算し、その結果EDIFを、アンダーフロー/オーバーフロー論理回路722と、プラス1加算器724と、選択マルチプレクサ726とに提供する。アンダーフロー/オーバーフロー論理回路722は、結果のMSBを使用して、アンダーフロー又はオーバーフローが発生したかを判定し、アンダーフロー又はオーバーフローの存在の有無を反映するU/O信号を生成する。選択マルチプレクサ726は、このU/O信号に基づいて、減算結果EDIFと、プラス1加算器724の出力との間での選択を行う。選択された値は、結果の指数Reとして、U/O信号と共に出力セクション522に提供される。
【0129】
[0140]丸め演算と並列に、符号経路520(図9)における最終符号回路904は、積/和回路902によって判定された符号と、仮数経路516から受け取るR_ZERO信号及び和のMSBと、オペランド準備ブロック514から受け取る特殊数SPC信号とに基づいて、最終的な符号Rsを決定する。
【0130】
[0141]出力セクション522(図10)は、仮数経路516からの結果の仮数Rmと、指数経路518からの結果の指数Reと、符号経路520からの結果の符号Rsと、オペランド準備ブロック514からの特殊数SPC信号と、指数経路518からのU/O信号とを受け取る。SPC信号及びU/O信号に基づいて、出力マルチプレクサ制御論理回路1002は、仮数部マルチプレクサ1004のための制御信号と、指数マルチプレクサ1006のための制御信号とを生成する。さらに、出力マルチプレクサ制御論理回路1002は、様々な条件コードCOND(例えば、結果がオーバーフロー、アンダーフロー、又はNaNであるかを示す)を生成する。
【0131】
[0142]仮数部マルチプレクサ1004は、正規数及び非正規数の場合、仮数部Rmを選択する。アンダーフローの場合、丸めモードに応じて、0又は仮数部min_denormが選択される。オーバーフロー(無限大)の場合、仮数部0x0_0000_0000_0000が選択される。いずれかの入力オペランドがNaNである場合、クワイエット型NaNの仮数部が選択される。演算中にNaNが発生した場合、内部(クワイエット型)NaNの仮数0x8_0000_0000が選択される。
【0132】
[0143]指数マルチプレクサ1006は、正規数の場合、結果の指数Reを選択する。非正規数及びアンダーフローの場合、指数0x000が選択される。無限大又はNaNの場合、最大指数0x7ffが選択される。
【0133】
[0144]連結ブロック1008は、選択された仮数部と、選択された指数と、符号Rsとを受け取り、fp64の最終的な結果OUTを生成する。条件コードは必要に応じて設定され得る。
【0134】
[0145]なお、DFMAユニット320では、全てのDFMA演算が、オーバーフロー又はアンダーフローにかかわらず同数のサイクルで完了することに留意されたい。さらに、DFMAユニット320は、IEEE754規格に従って、浮動小数点算術演算におけるオーバーフロー/アンダーフロー時の予測デフォルト動作(expected default overflow/underflow behavior)を実施する。即ち、適切な結果OUTが返され、オーバーフロー/アンダーフロー条件を示すように、(条件コードCONDにおける)ステータスフラグがセットされる。いくつかの実施形態においては、これらの条件を扱うためのユーザ定義のトラップが実施されてもよく、トラップを発生させるべきであるかを判定するよう、条件コードCONDを使用することが可能である。
【0135】
B.乗算
[0146]乗算(DMUL)は、オペランドCを0にセットして、DFMAユニット320が、A*B+0.0を計算することで、上述したDFMA演算と同じように実施することが可能である。一実施形態においては、オペコードがDMUL演算を示している場合に、選択マルチプレクサ636(図6)を使用して、入力オペランドCをfp64の値0に置き換えることができる。
【0136】
C.加算
[0147]加算(DADD)は、オペランドBを1.0にセットして、DFMAユニット320がA*1.0+Cを計算することで、上述したDFMA演算と同じように実施することが可能である。一実施形態においては、オペコードがDADD演算を示している場合に、選択マルチプレクサ634(図6)を使用して、入力オペランドBをfp64の値1.0に置き換えることができる。
【0137】
D.DMAX及びDMIN
[0148]DMAX演算又はDMIN演算の場合、オペランド準備ブロック514(図6)が、オペランドA及びオペランドBを受け取る。NaN回路612及び614が、選択されたオペランドのいずれか一方又は双方がNaNであるかを判定する。絶対値/符号反転回路618,620が、必要に応じて符号ビットを反転する(又は反転しない)。
【0138】
[0149]A/B比較回路624は、絶対値/符号反転回路618,620からオペランドA及びオペランドBを受け取り、例えば、これらのオペランドがあたかも整数であるかのようにAからBを減算することによって、比較を実行する。この減算に基づいて、A/B比較回路624は、AがBよりも大きい、AがBよりも小さい、又はAがBに等しいかを示すCOMP信号を生成する。COMP信号は制御論理回路630に提供される。制御論理回路630は、対応するR_Test信号を生成し、さらに、選択マルチプレクサ632,634,及び636用の選択信号を生成する。
【0139】
[0150]具体的には、DMAX演算の場合、オペランドAのマルチプレクサ632は、AがBより大きければオペランドAを選択し、AがBより小さければオペランド1.0を選択し、一方で、オペランドBのマルチプレクサ634は、BがAより大きければオペランドBを選択し、BがAより小さければオペランド1.0を選択する。DMIN演算の場合、オペランドAのマルチプレクサ632は、AがBより小さければオペランドAを選択し、AがBより大きければオペランド1.0を選択し、一方で、オペランドBのマルチプレクサ634は、BがAより小さければオペランドBを選択し、BがAより大きければオペランド1.0を選択する。DMAX及びDMINのいずれの場合も、A=Bである特殊な場合は、マルチプレクサ632がオペランドAを選択する一方でマルチプレクサ634がオペランド1.0を選択するように制御することによって、或いは、マルチプレクサ632がオペランド1.0を選択する一方でマルチプレクサ634がオペランドBを選択するように制御することによって、扱うことができる。いずれの場合にも、オペランドCのマルチプレクサ636は、オペランド0.0を選択するように動作することが好適である。
【0140】
[0151]特殊数検出回路638,640,及び642は、オペランドが特殊数であるかを判定し、該当する特殊数SPC信号を経路524上に生成する。特殊数検出回路638,640,及び642は、仮数Am,Bm,及びCm(正規数の場合は先頭に1が付加されており、非正規数の場合は先頭に0が付加されている)を仮数経路516に提供し、指数Ae,Be,及びCeを指数経路518に提供し、符号ビットAs,Bs,及びCsを符号経路520に提供する。
【0141】
[0152]fp32抽出回路626及び符号なし/符号付き整数抽出回路628は、DMAX演算又はDMIN演算の場合には使用されず、これらの回路は、必要に応じて電力遮断状態又は低電力状態に設定され得る。
【0142】
[0153]仮数経路516、指数経路518、及び符号経路520は、DFMA演算について上述したように動作する。DMAX演算の場合、仮数経路516、指数経路518、及び符号経路520は、max(A,B)*1.0+0.0を計算する。DMIN演算の場合、仮数経路516、指数経路518、及び符号経路520は、min(A,B)*1.0+0.0を計算する。従って、正規数の場合、Rm,Re,及びRsは、所望の結果の仮数、指数、及び符号に対応する。
【0143】
[0154]出力セクション522(図10)は、特殊数を扱う。具体的には、DMAX演算及びDMIN演算の結果は、NaNオペランドに対して定義されておらず、結果はNaN値にセットされ得る。出力マルチプレクサ制御論理回路1002は、結果をNaNとするべきかを、特殊数SPC信号を使用して判定する。NaNとするべきである場合、仮数部マルチプレクサ1004がクワイエット型NaN入力を選択し、指数マルチプレクサが0x7ffを選択する。そうでない場合、結果Rm及び結果Reが選択される。条件コードは必要に応じて設定され得る。
【0144】
[0155]代替実施形態においては、仮数経路516、指数経路518、及び符号経路520のコンポーネントのいくつか又は全てをバイパスすることができる。バイパスされるコンポーネントは低電力状態に設定され得る。バイパス経路が、仮数経路516、指数経路518、及び符号経路520のうちの最も長い経路と同数のパイプラインステージを占めるように、バイパス経路に様々な遅延回路(ラッチなど)を含めてもよい。これにより、DFMAユニット320における全ての演算について、完了に要するサイクルが同数となり、これにより、命令発行論理回路が単純化される。
【0145】
E.DSET
[0156]DSET演算では、DMAX及びDMINと同様に、オペランド準備ブロック514におけるA/B比較回路624(図6)が使用される。DSETでは、DMAX及びDMINとは異なり、入力オペランドの一方が返されるのではなく、テストされた条件が満たされているかを示すブール値が返される。
【0146】
[0157]DSET演算の場合、オペランド準備ブロック514(図6)が、オペランドA及びオペランドBを受け取る。NaN回路612及び614は、選択されたオペランドのいずれか一方又は双方がNaNであるかを判定する。絶対値/符号反転回路618,620は、必要な場合に符号ビットを反転する。
【0147】
[0158]A/B比較回路624は、絶対値/符号反転回路618,620からオペランドA及びオペランドBを受け取り、例えば、これらのオペランドがあたかも整数であるかのようにAからBを減算することによって、比較を実行し、それぞれの符号ビットを考慮する。A/B比較回路624は、この減算に基づいて、AがBよりも大きい、AがBよりも小さい、又はAがBに等しいかを示すCOMP信号を生成する。COMP信号は制御論理回路630に提供される。制御論理回路630は、対応するR_Test信号を生成し、さらに、Aマルチプレクサ632、Bマルチプレクサ634、及びCマルチプレクサ636用の選択信号を生成する。DSET演算の結果はブール値であるため、一実施形態では、三つのマルチプレクサ632,634,636の全てがゼロオペランドを選択する。別の実施形態においては、マルチプレクサ632及び634がオペランドA及びオペランドBを選択する。特殊数検出回路638及び640は、これらのオペランドが特殊数であるかを判定し、該当する特殊数SPC信号を経路524上に生成する。
【0148】
[0159]fp32抽出回路626及び符号なし/符号付き整数抽出回路628は、DSET演算の場合には使用されず、これらの回路は、必要に応じて電力遮断状態又は低電力状態に設定され得る。
【0149】
[0160]仮数経路516、指数経路518、及び符号経路520は、DFMA演算について上述したように動作するか、又は、これらの一部又は全体をバイパスすることができる。バイパスされるコンポーネントは低電力状態に設定され得る。上述したように、バイパス経路が、仮数経路516、指数経路518、及び符号経路520のうちの最も長い経路と同じ数のパイプラインステージを占めるように、バイパス経路に様々な遅延回路(ラッチなど)を含めることができる。これにより、DFMAユニット320における全ての演算について、完了に要するサイクルが同数となり、これにより、命令発行論理回路が単純化される。
【0150】
[0161]出力セクション522(図10)は、特殊数を扱う。具体的には、IEEE754規格においては、A又はB(又は双方)がNaNであるならば、A及びBは順序付けできない。出力マルチプレクサ制御論理回路1002は、AがBよりも大きい、AがBよりも小さい、又はAがBに等しいかを示すR_Test信号と、A又はBがNaNであるかを示す特殊数SPC信号と、要求されている特定のテスト演算を示すOPCTL信号とを受け取る。出力マルチプレクサ制御論理回路1002は、R_Test信号及びSPC信号を使用して、要求されたテストが満たされているかを判定する。一実施形態においては、DSET演算の結果を条件コードとして提供し、結果OUTを無視する。その場合、出力マルチプレクサ制御論理回路1002は、結果を示すように条件コードCONDを設定し、オプションとして、出力OUTの仮数部及び指数を選択することができる。別の実施形態においては、テスト結果を反映するように出力OUTを設定することができ、この場合、出力マルチプレクサ制御論理回路1002は、テストが満たされているならば論理真に対応する64ビット値が選択され、テストが満たされていないならば論理偽に対応する64ビット値が選択されるように、仮数部マルチプレクサ1004及び指数マルチプレクサ1006を動作させる。
【0151】
F.形式変換
[0162]いくつかの実施形態においては、DFMAユニット320は、倍精度形式とそれ以外の形式との間での形式変換演算もサポートする。以下に例を説明する。
【0152】
1.fp32からfp64(F2D)
[0163]F2D演算の場合、fp32入力オペランドAが、対応するfp64数に変換される。特殊数入力は適切に扱われる。例えば、fp32無限大又はfp32 NaNは、fp64無限大又はfp64 NaNに変換される。全てのfp32非正規数は、fp64の正規数に変換することができる。
【0153】
[0164]オペランド準備ブロック514(図6)は、fp32のオペランドAを受け取る。絶対値/符号反転回路618は、オペランドAを修正することなくfp32抽出ブロック626に通過させる。fp32抽出ブロック626は、オペランドAに対してfp64形式への最初の上位変換を実行する。具体的には、fp32抽出ブロック626は、8ビットの指数を取り出し、1023−127=896を加算して、fp64形式の正しいバイアスを有する11ビットの指数を生成する。23ビットの仮数には、末尾の0がパディングされる。さらに、fp32抽出ブロック626は、オペランドAがfp32の特殊数(例:無限大、NaN、0、又は非正規)であるかを判定し、その情報を、経路644を介して特殊数検出回路642に提供する。さらに、fp32抽出ブロック626は、オペランドの符号を反転する、或いはオペランドに絶対値を適用することもできる。
【0154】
[0165]オペランドCのマルチプレクサ636は、fp32抽出ブロック626によって提供される上位変換されたオペランドを選択し、オペランドAのマルチプレクサ632及びオペランドBのマルチプレクサ634は、ゼロオペランドを選択する。特殊数検出回路642は、オペランドがfp32非正規数でない限りは、仮数に先頭の1を付加する。さらに、特殊数検出回路642は、fp32非正規数が正規数として特定されている場合を除き(全てのfp32非正規数はfp64において正規数として表現することができるため)、fp32抽出ブロック626によって提供される特殊数情報を、自身の特殊数SPC信号として使用する。
【0155】
[0166]仮数経路516及び指数経路518は、DFMA演算について上述したように動作して、fp64形式において0.0*0.0+Cを計算する。仮数経路516及び指数経路518における正規化要素は、上位変換されたfp64オペランドを正規化する。代替実施形態においては、図8を参照し、指数経路518からの位置合わせ後の仮数C_alignを、仮数経路516における加算器804の周囲をマルチプレクサ806のSum入力にバイパスさせることができる。ここで、乗算器802及び加算器804を低電力状態に設定することができる。符号経路520は符号ビットCsを通過させることが好適である。
【0156】
[0167]出力セクション522(図10)においては、入力オペランドがfp32無限大、fp32 NaN、又はfp32 0であったことを特殊数SPC信号が示していない限りは、正規化されたfp64の結果(Rm,Rs,Re)が選択される。入力オペランドがfp32無限大であった場合、出力マルチプレクサ制御論理回路1002は、fp64無限大の仮数部(0x0_0000_0000_0000)が選択されるように仮数部マルチプレクサ1004を動作させ、fp64無限大の指数(0x7ff)が選択されるように指数マルチプレクサ1006を動作させる。入力オペランドがfp32 NaNであった場合、出力マルチプレクサ制御論理回路1002は、fp64クワイエット型NaNの仮数部が選択されるように仮数部マルチプレクサ1004を動作させ、fp64 NaNの指数(0x7ff)が選択されるように指数マルチプレクサ1006を動作させる。入力オペランドがfp32 0であった場合、出力マルチプレクサ制御論理回路1002は、fp64 0の仮数部(0x0_0000_0000_0000)が選択されるように仮数部マルチプレクサ1004を動作させ、fp64 0の指数(0x000)が選択されるように指数マルチプレクサ1006を動作させる。条件コードは、必要に応じて設定され得る。
【0157】
2.整数からfp64(I2D)
[0168]I2D演算の場合、整数(u64,s64,u32,又はs32形式)がfp64形式に変換される。オペランド準備ブロック514(図6)は、64ビットの整数オペランドCを受け取る。32ビット整数形式の場合、32個の先頭の0を付加することができる。絶対値/符号反転回路622は、オペランドCを修正することなくU/S抽出ブロック628に通過させる。U/S抽出ブロック628は、オペランドCに対してfp64形式への最初の上位変換を実行する。具体的には、抽出ブロック628は、オペランドCにおける先頭の1の位置を(例えばプライオリティエンコーダを使用して)判定する。11ビットの指数は、指数フィールドを1086(263に対応する)に初期化することによって求められる。32ビット形式の入力の場合、先頭の1がドロップされ、仮数に末尾の0がパディングされて、52ビットの仮数部が生成される。64ビット形式の入力の場合、必要に応じて仮数が53ビットに切り捨てられ、先頭の1がドロップされる。また、ガードビット及びラウンドビットが必要に応じて維持されてもよい。
【0158】
[0169]さらに、U/S抽出ブロック628は、入力オペランドが0であるかを判定し、特殊数検出回路642用の対応の制御信号を生成する。0以外の特殊数(非正規、無限大、及びNaN)は、I2D演算時には発生せず、検出する必要がない。
【0159】
[0170]オペランドCのマルチプレクサ636は、U/S抽出ブロック628によって提供される上位変換されたオペランドを選択する。オペランドAのマルチプレクサ632とオペランドBのマルチプレクサ634のそれぞれは、ゼロオペランドを選択する。特殊数検出回路642は、U/S抽出ブロック628によって提供されるゼロ情報を使用して、入力オペランドが0であるかを示す特殊数SPC信号を生成する。
【0160】
[0171]仮数経路516及び指数経路518は、DFMA演算について上述したように動作し、0.0*0.0+Cを計算する。仮数経路516及び指数経路518における正規化要素は、上位変換されたfp64オペランドを正規化する。代替実施形態においては、図8を参照し、指数経路518からの位置合わせ後の仮数C_alignを、仮数経路516における加算器804の周囲をマルチプレクサ806のSum入力にバイパスさせることができる。乗算器802及び加算器804は低電力状態に設定され得る。符号経路520は符号ビットCsを通過させることが好適である。
【0161】
[0172]出力セクション522(図10)においては、入力オペランドが整数0であったことを特殊数SPC信号が示していない限りは、正規化されたfp64の結果(Rm,Rs,Re)が選択される。入力オペランドが整数0であった場合、出力マルチプレクサ制御論理回路1002は、fp64 0の仮数部(0x0_0000_0000_0000)が選択されるように仮数部マルチプレクサ1004を動作させ、fp64 0の指数(0x000)が選択されるように指数マルチプレクサ1006を動作させる。必要に応じて条件コードが設定され得る。
【0162】
3.fp64からfp32(D2F)
[0173]fp64は、fp32よりも広い範囲の浮動小数点数をカバーしているので、fp64からfp32への(D2F)変換では、fp32値におけるオーバーフロー及びアンダーフローを検出することが要求される。
【0163】
[0174]D2F演算の場合、オペランド準備ブロック514(図6)にオペランドCが提供される。絶対値/符号反転回路622は、必要に応じて絶対値又はオペランドの符号反転を実行し、オペランドCをオペランドCのマルチプレクサ636に渡す。オペランドCのマルチプレクサ636は、オペランドCを選択し、特殊数検出回路642に提供する。特殊数検出回路642は、fp64非正規数、fp64 0、fp64無限大、又はfp64 NaNを検出し、対応するSPC信号を出力セクション522に提供する。選択マルチプレクサ632及び634は、オペランド0.0を選択する。
【0164】
[0175]指数経路518(図7)においては、指数計算ブロック702は、fp64指数を897だけマイナス方向にバイアスし、対応するfp32の指数を求める。fp32の指数がアンダーフローする場合、指数計算ブロック702は、アンダーフローが排除されるようにCの仮数を右シフトするSh_C信号を生成する(218ビット以上のシフトが必要である場合、Cの仮数は0になる)。シフト回路706は、Sh_C信号に従ってCの仮数を右シフトする。結果はマルチプレクサ712によって選択され、位置合わせ後の仮数C_alignとして仮数経路516に提供される。アンダーフロー論理回路713は、fp32アンダーフローを検出し、U_fp32信号を生成する。
【0165】
[0176]仮数経路516(図8)においては、乗算器802が、積0.0*0.0を計算する(又はバイパスされる)。この積(0)は、加算器804によって仮数C_alignに加算される。マルチプレクサ806は、結果Sumを選択する(入力が符号・絶対値形式であるため)。0の結果は、回路814によって検出される。0以外の結果は、DFMA演算に関して上述したように正規化される。丸め論理回路820を使用して、切り上げるかを判定することができる。なお、結果は23ビットのfp32仮数であるため、プラス1加算器822は、(53番目ではなく)24番目のビット位置に1を加算する必要があることに留意されたい。
【0166】
[0177]出力セクション522(図10)は、結果を組み立てる。fp32の23ビットの仮数部は、52ビットフィールドのRmにおいて提供される。出力マルチプレクサ制御論理回路1002は、結果がfp32の正規数ではない場合を除き、Rmが選択されるように仮数部マルチプレクサ1004を制御する。fp32 0又はfp32無限大である場合、0の仮数0x00000_0000_0000が選択され、fp32 NaNである場合、クワイエット型fp32 NaNの仮数が選択される。fp32非正規数の場合、Rmを使用することができる。
【0167】
[0178]8ビットのfp32の指数は、11ビットの指数フィールドにおいて提供される。出力マルチプレクサ制御論理回路1002は、結果がfp32の正規数ではない場合を除き、Reが選択されるように指数マルチプレクサ1004を制御する。fp32非正規数又はfp32 0である場合、0の指数0x000が選択される。fp32無限大又はfp32 NaNである場合、fp32の最大指数0x7ffが選択される。
【0168】
[0179]連結ブロック1008は、Rm及びReを、64ビットの出力フィールドのうちの31ビットにパックし、符号ビットRsを先頭に付加する。11ビットの指数における3個のMSBがドロップされ、52ビットの仮数部における29個のLSBがドロップされる。fp32の結果は、例えば、必要に応じて64ビットフィールドのMSB又はLSBにおいて位置合わせすることができる。必要に応じて条件コードを設定することができる。
【0169】
4.fp64から整数(D2D)
[0180]D2I演算の場合、オーバーフロー及びアンダーフローが検出される。オーバーフローは最大整数値にセットされ、アンダーフローは0にセットされる。
【0170】
[0181]変換するオペランドは、fp64形式におけるオペランドCとして提供される。絶対値/符号反転回路622は、必要に応じて絶対値又はオペランドの符号反転を実行し、オペランドCをオペランドCのマルチプレクサ636に渡す。オペランドCのマルチプレクサ636は、オペランドCを選択し、特殊数検出回路642に提供する。特殊数検出回路642は、fp64非正規数、fp64 0、fp64無限大、又はfp64 NaNを検出し、対応するSPC信号を出力セクション522に提供する。選択マルチプレクサ632及び634は、オペランド0.0を選択する。
【0171】
[0182]指数経路518(図7)においては、指数計算ブロック702は、2進小数点を整数位置に合わせるためにCmをシフトすべき量を、指数Ceを使用して求め、対応するSh_C信号を生成する。一実施形態においては、指数計算ブロック702は、指数のバイアスを取り除き、仮数部の幅と、使用される整数形式と、32ビット形式の結果を64ビットフィールドにおいて表現する方式(例:32個のMSB又は32個のLSBを使用する)とを考慮する。さらに、変換後の整数形式において結果がオーバーフローするか、又はアンダーフローするかを、指数Ceを使用して判定する。オーバーフロー又はアンダーフローする場合、対応するオーバーフロー信号又はアンダーフロー信号(図示していない)が、出力セクション522における出力マルチプレクサ制御論理回路1002(図10)に送られることが好適である。
【0172】
[0183]シフト回路706は、Cmを量C_Shiftだけシフトさせ、このC_Shift信号がマルチプレクサ712によってC_align信号として選択される。
【0173】
[0184]仮数経路516(図8)においては、乗算器802が、結果0.0を加算器804に提供する。加算器804は、0.0をC_alignに加算し、Cが正であるか負であるかに応じて、Sum又は〜Sumが選択される。シフター816は、この結果をシフトしないことが好適である。整数フォーマッティングブロック826は、結果を、11ビットのMSBフィールドint_Mと、53ビットのLSBフィールドint_Lとに分ける。
【0174】
[0185]出力セクション522(図10)においては、出力マルチプレクサ制御論理回路1002が、オーバーフロー、アンダーフロー、又は特殊数オペランドである場合を除いて、結果のint_L及び結果のint_Mがそれぞれ選択されるように仮数部マルチプレクサ1004及び指数マルチプレクサ1006を制御する。オーバーフローの場合、出力形式(u32,s32,u64,又はs64)における最大整数が選択され、アンダーフローの場合、0が選択される。条件コードは、必要に応じて設定され得る。
【0175】
IV.更なる実施形態
[0186]本発明について、特定の実施形態に関連して説明してきたが、膨大な修正・変更が可能であることが当業者には認識されるであろう。例えば、DFMAユニットは、より多くの機能、より少ない機能、又は異なる機能が、組合せとしてサポートされるように実施されてもよく、或いは、任意の形式又は任意の形式の組合せにおけるオペランド及び結果がサポートされるように実施されてもよい。
【0176】
[0187]本明細書において説明した様々なバイパス経路及び通過経路は、異なる形態をとることもできる。一般的に、回路ブロックの周囲のバイパス経路が説明してある箇所では、その経路を、そのブロックにおける恒等演算(すなわち、オペランドに影響を与えない演算(例:0を加算する))に置き換えることができる。ある演算時にバイパスされる回路ブロックは、アイドル状態(例えば、低電力状態)に設定することができ、或いは、通常に動作させ、(例えば、選択マルチプレクサ又はその他の回路の動作によって)下流のブロックが結果を無視するようにすることができる。
【0177】
[0188]DFMAパイプラインは、任意の数のステージに分割することができ、ステージそれぞれにおけるコンポーネントの組合せは、必要に応じて異なる組合せとすることができる。さらに、本明細書において特定の回路ブロックによって提供される機能を、複数のパイプラインステージにまたがるように分割することができる。例えば、乗算器のツリーが複数のステージを占めることができる。さらに、様々なブロックの機能を修正・変更することができる。いくつかの実施形態においては、例えば、異なる加算器回路又は異なる乗算器回路を使用することができる。
【0178】
[0189]さらに、DFMAユニットについて、理解を促進する目的で、回路ブロックに基づいて説明してきた。これらの回路ブロックは、様々な回路コンポーネント及び様々なレイアウトを使用して実施することができ、本明細書に説明してあるブロックが、特定の一連のコンポーネント又は特定の物理的レイアウトに限定されないことが、当業者には認識されるであろう。ブロックは、必要に応じて、物理的に結合する、又は分けることができる。
【0179】
[0190]プロセッサは、実行コアの中に一以上のDFMAユニットを含んでいてもよい。例えば、スーパースケーラ命令発行方式(すなわち、1サイクルあたり二つ以上の命令を発行する)又はSIMD命令発行方式が望ましい場合、複数のDFMAユニットを実施することができ、異なるDFMAユニットが、異なる機能の組合せをサポートすることができる。さらに、プロセッサは、複数の実行コアを含んでいてもよく、コアのそれぞれが自身の(一つ以上の)DFMAユニットを有することができる。
【0180】
[0191]いくつかの実施形態においては、実行コアがSIMD命令発行をサポートし、一つのDFMAパイプラインにおいて複数のデータセットを連続的に処理することができるように、一つのDFMAユニットを、入力の順序付け及び出力収集のための適切な論理回路と組み合わせて使用することができる。
【0181】
[0192]図11は、本発明の実施形態による、DFMA機能ユニット1102を含む実行コア1100のブロック図である。DFMAユニット1102は、上述したDFMAユニット320に類似するユニット、又は同じユニットとすることができる。コア1100はSIMD命令を発行する、すなわち、P組の異なるセットの単精度オペランドを有する同じ命令を、P個のセットの単精度SIMDユニット1104に並列に発行することができる。SIMDユニット1104のそれぞれは、同じオペコードと、異なるセットのオペランドとを受け取る。P個のSIMDユニット1104は、並列に動作してP個の結果を生成する。DFMAユニット1102には、P−way SIMD命令が、P個の一連のSISD(単一命令単一データ)命令として発行される。
【0182】
[0193]入力マネージャ1106(命令発行ユニットの一部とすることができる)は、SIMD命令のオペランドを集め、SIMD命令のP個のセットのオペランド全てが集まったとき、それらオペランド及び適用可能なオペコードを、P個のSIMDユニット1104又はDFMAユニット1102のいずれかに提供する。出力収集器1008は、SIMDユニット1104又はDFMAユニット1102からの結果を集め、それらの結果を、結果バス1110を介してレジスタファイル(図11には示していない)に提供する。いくつかの実施形態においては、結果バス1110は、入力マネージャ1106へのバイパス経路も提供し、従って、結果を次の命令において使用することができるように、結果をレジスタファイルに提供するのと並列に入力マネージャ1106に提供することができる。一つのDFMAユニット1102を使用して、見かけ上のSIMD動作を提供する目的で、入力マネージャ1106は、例えば、P個の連続するクロックサイクルのそれぞれにおいて、異なるセットのオペランドを有する同じオペコードを発行することによって、DFMAユニット1102への命令の発行をシリアル化することが有利である。
【0183】
[0194]図12は、本発明の実施形態による、DFMAユニット1102のためのシリアル化された命令発行方式を示しているブロック図である。入力オペランド収集ユニット1202(図11の入力マネージャ1106に含めることができる)は、二つの収集器1204,1206を含んでいる。収集器1204,1206のそれぞれは、32ビットレジスタの配列であり、P組の単精度オペランドトリプレットA,B,及びCのための十分な空間を提供する。言い換えれば、収集器1204,1206のそれぞれは、一つのSIMD命令の全てのオペランドを格納することができる。入力オペランド収集ユニット1202は、例えば図3のレジスタファイル324及び/又は図11の結果バス1110から、オペランドを取得する。与えられた命令に対して、どのオペランドを集めるかを判定するために、タグ、又はその他の従来の手法を使用することができる。一つの命令のオペランドを、その命令が発行されるよりも数クロックサイクル前に集めることができるための十分な収集器1206が提供される。
【0184】
[0195]単精度命令の場合、P個のSIMDユニット1104が一つの命令を実行するために必要なオペランドの全てが、一方の収集器(例:収集器1204)にロードされる。P個のSIMDユニット1104に命令が発行されるとき、収集器1204全体が並列に読み取られて、SIMDユニット1104のそれぞれに異なるオペランドトリプレットA,B,Cが提供されることが好適である。
【0185】
[0196]DFMAユニット1102への命令の場合、オペランドは倍精度(例:64ビット)である。オペランドのそれぞれは、双方の収集器1204,1206の中の対応するレジスタを使用して格納することができる。例えば、収集器1204の中のレジスタ1208は、オペランドAの一つのインスタンスの32個のMSB(例:符号ビット、11個の指数ビット、及び仮数部の20個のMSB)を格納することができ、その一方で、収集器1206の中のレジスタ1210は、同じオペランドの32個のLSB(例:仮数部の残りの32ビット)を格納する。このように、倍精度のP−way SIMD命令に必要なオペランドトリプレットA,B,Cの全てを、二つの単精度収集器1204,1206を使用して集めることができる。
【0186】
[0197]コア1100は、一つのDFMAユニット1102のみを備えており、P個のセットのオペランドは、出力マルチプレクサ(MUX)1212,1214(いずれもカウンタ1216によって制御される)を使用して連続的に提供されることが好適である。マルチプレクサ1212及び1214は、カウンタ1216に応答して、それぞれの収集器1204及び1206からのオペランドトリプレットのMSB及びLSBを選択する。例えば、図示したデータ経路においては、マルチプレクサ1212は、収集器1204の中のレジスタ1208からのオペランドAの32個のMSBを選択することができ、その一方で、マルチプレクサ1214は、収集器1206の中のレジスタ1210からの同じオペランドAの32個のLSBを選択することができる。これら64ビットが、倍精度幅の経路を通じてDFMAユニット1102に提供される。同様に、(レジスタ1220及びレジスタ1222からの)オペランドBと(レジスタ1224及びレジスタ1226からの)オペランドCとを、同じカウンタ1216によって制御される対応するマルチプレクサ(図示していない)を使用して、DFMAユニット1102に提供することができる。次のクロックサイクルにおいては、収集器1204及び1206の中の次のセットのレジスタからのオペランドA,B,及びCをDFMAユニット1102に提供することができ、P個のセットのオペランドの全てが提供されるまで、以下同様に繰り返す。
【0187】
[0198]マルチプレクサ1212及び1214は、収集器1204及び1206とともに、DFMAユニット1102における見かけ上のSIMD実行を提供する(ただしスループットは低下する)。従って、コア1100のプログラミングモデルでは、全ての命令(倍精度命令を含む)についてP−way SIMDの実行が利用可能であることを想定することができる。
【0188】
[0199]本明細書に説明したオペランドの収集及び順序付けの論理回路は、例示を目的としており、変形及び変更が可能であることが理解されるであろう。SIMD対応型のコアには、任意の数のDFMAユニットを提供することができ、任意の数のDFMAユニットに並列に命令を発行することができる。いくつかの実施形態においては、単精度演算に対する倍精度演算におけるスループットは、DFMAユニットの数に対応して増減する。例えば、P個のSIMDユニットとN個のDFMAユニットとが存在している場合、倍精度におけるスループットは、単精度におけるスループットのN/Pである。いくつかの実施形態においては、NはPに等しいことが最適である。別の実施形態においては、別の要因(例:レジスタファイルと機能ユニットとの間の内部データ経路の幅)によって、倍精度におけるスループットが、存在するDFMAユニットの数には関係なく、単精度におけるスループットより低い値に制限されることがある。その場合、Nは、その別の制限要因下において可能な値よりも大きくないことが最適である。
【0189】
[0200]さらに、DFMAユニットが単精度の機能ユニットとは個別であるため、DFMAユニットが使用されないとき、例えば、グラフィックスプロセッサ又はコアが、レンダリングプロセス、或いは倍精度を必要としないその他の計算のみに使用されているとき、DFMAユニットの電力を落とすことができることに留意されたい。さらには、DFMAユニットを、それ以外の回路コンポーネントの動作に影響を与えることなく、集積回路の設計から省くことができる。これにより、異なるチップによって倍精度演算の異なるサポートレベルが提供される製品ファミリーの設計が容易になる。例えば、GPUファミリーは、それぞれが少なくとも一つのDFMAユニットを含む多数のコアを有する高性能のGPUと、倍精度がハードウェアベースでサポートされず、DFMAユニットが存在しない低性能のGPUとを含んでいてもよい。
【0190】
[0201]さらに、本発明をグラフィックスプロセッサに関連して説明してきたが、別のプロセッサ(例えば、数学コプロセッサ、ベクトルプロセッサ、又は汎用プロセッサ)においても本発明の態様を採用することができることが、当業者には理解されるであろう。
【0191】
[0202]このように、本発明を特定の実施形態に関連して説明してきたが、本発明は、請求項の範囲内のあらゆる変形形態及び均等の形態を包含することを理解されたい。
【符号の説明】
【0192】
100…コンピュータシステム、102…CPU、104…システムメモリ、105…メモリブリッジ、106…通信経路、107…I/Oブリッジ、108…ユーザ入力装置、110…表示装置、112…グラフィックスサブシステム、113…通信経路、114…システムディスク、116…スイッチ、118…ネットワークアダプタ、120,121…アドインカード、122…GPU、124…グラフィックスメモリ、200…レンダリングパイプライン、202…マルチスレッドコアアレイ、204…フロントエンド、206…データアセンブラ、208…セットアップモジュール、210…ラスタライザ、212…カラーアセンブリモジュール、214…ラスターオペレーションモジュール(ROP)、218…ジオメトリモジュール、224…ピクセルモジュール、226…フレームバッファ、300…実行コア、302…フェッチ・ディスパッチユニット、304…発行ユニット、320…DFMAユニット、322…機能ユニット、324…レジスタファイル、326…データ転送経路、502,504,506…オペランド入力経路、508…オペコード経路、510,512,524…信号経路、514…オペランド準備、516…仮数経路、518…指数経路、520…符号経路、522…出力セクション、530…制御ブロック、612,614,616…NaN検出ブロック、618,620,622…絶対値/符号反転ブロック、624…A/B比較回路、626…FP32抽出回路、628…U/S抽出回路、630…制御論理回路、632…Aマルチプレクサ、634…Bマルチプレクサ、636…Cマルチプレクサ、638,640,642…特殊数検出回路、702…指数計算回路、704…最終指数計算回路、706…シフト回路、708…符号反転回路、710…D2D論理回路、712…マルチプレクサ、713…アンダーフロー論理回路、720…減算回路、722…アンダーフロー/オーバーフロー回路、724…プラス1回路、726…マルチプレクサ、802…53×53乗算器、804…168ビット加算器、806…マルチプレクサ、808,810…LZD、812…マルチプレクサ、814…ゼロ検出回路、816…シフト回路、818…正規化論理回路、820…丸め論理回路、822…プラス1加算器、824…マルチプレクサ、826…フォーマッティング、902…積/和回路、904…最終符号回路、1002…出力マルチプレクサ制御論理回路、1004…仮数部マルチプレクサ、1006…指数マルチプレクサ、1008…連結ブロック、1102…DFMAユニット、1104…SIMDユニット、1106…入力マネージャ、1108…出力収集器、1110…結果バス、1202…オペランド収集、1208(0)〜1208(P−1),1210(0)〜1210(P−1),1220,1224,1226…レジスタ、1212,1214…マルチプレクサ、1216…カウント。
【技術分野】
【0001】
[0001]本発明は、グラフィックスプロセッサに関するものであり、より詳細には、グラフィックスプロセッサにおける倍精度の融合型積和演算(Fused Multiply-add)機能ユニットに関するものである。
【発明の背景】
【0002】
[0002]グラフィックスプロセッサは、コンピュータシステムにおいて、2次元のジオメトリデータ又は3次元のジオメトリデータから画像をレンダリングするステップを高速化する目的で一般に使用されている。このようなプロセッサは、一般には、高い並列性及び高いスループットを持つように設計されており、数千個のプリミティブを並列に処理して、複雑でリアルなアニメーション画像をリアルタイムでレンダリングすることができる。高性能のグラフィックスプロセッサは、一般的な中央処理装置(CPU)よりも高い計算能力を提供する。
【0003】
[0003]最近では、グラフィックスプロセッサの処理能力を利用して、画像のレンダリングには無関係の様々な計算を高速化することが注目されている。「汎用」グラフィックスプロセッサを使用して、科学分野、金融分野、ビジネス分野、及びその他の分野における計算を実行することができる。
【0004】
[0004]汎用計算用にグラフィックスプロセッサを適合させる上での一つの問題は、グラフィックスプロセッサは、通常、比較的低い数値精度用に設計されていることである。高品質の画像は、32ビット(「単精度」)浮動小数点値、場合によっては16ビット(「半精度」)浮動小数点値を使用してレンダリングされ得るものであり、機能ユニット及び内部パイプラインは、これらのデータ幅がサポートされるように構成されている。それに対して、多くの汎用計算では、より高い数値精度、例えば、64ビット(「倍精度」)が要求される。
【0005】
[0005]より高い数値精度をサポートするために、グラフィックスプロセッサによっては、一連の機械語命令と32ビット又は16ビットの機能ユニットとを用いて倍精度の計算を実行するためのソフトウェア手法を使用している。この方法ではスループットが低下し、例えば、1回の64ビット乗算演算を完了するのに100個以上の機械語命令が必要となることがある。このような長い命令列により、グラフィックスプロセッサの倍精度のスループットが大幅に低下することがある。一つの代表的なケースにおいては、グラフィックスプロセッサが倍精度の計算を実行するときのスループットは、高性能のデュアルコアCPUチップによって可能であるスループットの約1/5であると推定される(これと比較して、同じグラフィックスプロセッサは、単精度の計算をデュアルコアCPUのスループットの約15〜20倍で実行することができる)。ソフトウェアベースのソリューションは非常に遅いため、従来のグラフィックスプロセッサを倍精度の計算に使用することはめったにない。
【0006】
[0006]別のソリューションは、単純に、グラフィックスプロセッサの算術演算回路の全てを、倍精度のオペランドを扱うよう十分な広さにすることである。これにより、倍精度演算におけるグラフィックスプロセッサのスループットが増大して、単精度におけるスループットに匹敵するものとなる。しかしながら、グラフィックスプロセッサは、一般に、並列演算をサポートするために、各算術演算回路の数十個の複製を備えており、このような各回路のサイズを増大させることによって、チップ面積、コスト、及び電力消費量が相当に増大する。
【0007】
[0007]更に別のソリューションは、所有者が同一の同時係属中の米国特許出願第11/359,353号明細書(出願日:2006年2月21日)に記載されているように、単精度の算術演算回路を利用して倍精度の演算を実行することである。この方法においては、単精度の機能ユニットに含まれている特殊なハードウェアを使用して、倍精度の演算を反復的に実行する。この方法は、ソフトウェアベースのソリューションよりも相当に高速であるが(スループットは、単精度のスループットの1/100以下ではなく、例えば1/4となり得る)、チップの設計が大幅に複雑となり得る。さらに、単精度の演算と倍精度の演算との間で同じ機能ユニットを共有する結果として、同じ機能ユニットを必要とする命令が多すぎる場合に、そのユニットがパイプラインにおけるボトルネックとなることがある。
【発明の概要】
【0008】
[0008]本発明の実施形態は、グラフィックスプロセッサにおける倍精度の算術演算を直接的にサポートする。レンダリングに使用される単精度の機能ユニットに加えて、多目的の倍精度の機能ユニットが提供される。倍精度の機能ユニットは、倍精度の入力に対する融合型積和演算を含む複数の異なる演算を、少なくとも倍精度の幅であるデータ経路及び/又は論理回路を使用して、実行することができる。倍精度の機能ユニット及び単精度の機能ユニットは、共通の命令発行回路によって制御することができ、コアに含まれている倍精度の機能ユニットの複製の数を、単精度の機能ユニットの複製の数よりも少なくすることができ、これによって、倍精度のサポートを加えることによるチップ面積に対する影響が低減する。
【0009】
[0009]本発明の一態様によると、グラフィックスプロセッサは、画像データを生成するようになっているレンダリングパイプラインを有する。このレンダリングパイプラインは、単精度オペランド用に動作するものであり、複数の並列スレッドを実行するようになっている処理コアを含んでいる。処理コアは、倍精度の入力オペランドのセットに対して複数の倍精度演算のうちの一つを選択的に実行するようになっている多目的の倍精度機能ユニットを含んでいる。この多目的の倍精度機能ユニットは、少なくとも一つの算術演算論理回路を含んでおり、倍精度機能ユニットの算術演算論理回路の全ては、倍精度において動作するための十分な広さになっている。いくつかの実施形態においては、倍精度機能ユニットは、倍精度演算のそれぞれが同数のクロックサイクルで完了するように構成されている。また、倍精度機能ユニットは、倍精度演算のうちの任意の一つを完了するために要求される時間(例えば、クロックサイクルの数)がアンダーフロー条件又はオーバーフロー条件によって影響されないように、構成されていてもよい。
【0010】
[0010]様々な倍精度演算及び倍精度演算の組合せをサポートすることができる。一実施形態においては、倍精度演算は、二つの倍精度オペランドを加算する加算演算と、二つの倍精度オペランドを乗算する乗算演算と、第1の倍精度オペランドと第2の倍精度オペランドとの積を計算し、次いで、この積に第3の倍精度オペランドを加算する、融合型積和演算と、を含んでいる。サポートすることのできる別の倍精度演算としては、第1のオペランドと第2のオペランドとに対して比較テストを実行し、この比較テストが満たされているかを示すブール結果を生成する倍精度比較(DSET)演算、二つの倍精度入力オペランドのうち大きい方のオペランドを返す倍精度最大値(DMAX)演算、二つの倍精度入力オペランドのうち小さい方のオペランドを返す倍精度最小値(DMIN)演算、が挙げられる。さらには、倍精度形式から倍精度以外の形式に(又はその逆に)オペランドを変換する形式変換演算もサポートすることができる。
【0011】
[0011]本発明の別の態様によると、グラフィックスプロセッサは、画像データを生成するようになっているレンダリングパイプラインを含んでいる。このレンダリングパイプラインは、複数の並列スレッドを実行するようになっている処理コアを含んでいる。処理コアは、一以上の単精度オペランドに対して算術演算を実行するようになっている単精度の機能ユニットと、倍精度入力オペランドのセットに対して積和演算を実行して倍精度の結果を提供するようになっている倍精度の融合型積和演算(DFMA)機能ユニットと、を含んでいる。このDFMA機能ユニットは、DFMAパイプラインを含んでおり、DFMAパイプラインは、当該DFMAパイプラインを通る単一のパスで積和演算を実行するのに十分に広いデータ経路を有することが好適である。例えば、DFMA機能ユニットは、倍精度の二つの仮数の積を1回の反復で計算するようになっている乗算器と、倍精度の二つの仮数の和を1回の反復で計算するようになっている加算器と、を含んでいてもよい。
【0012】
[0012]さらに、DFMA機能ユニットを、別の演算を実行するように構成することもできる。例えば、いくつかの実施形態においては、DFMAは、一組の倍精度入力オペランドに対して乗算演算を実行して倍精度の結果を提供するように構成されている。いくつかの実施形態においては、乗算演算と融合型積和演算は、それぞれ、同数のクロックサイクルで完了する。同様に、DFMA機能ユニットを、一組の倍精度入力オペランドに対して加算演算を実行して倍精度の結果を提供するように構成することができる。一実施形態においては、加算演算と融合型積和演算は、それぞれ、同数のクロックサイクルで完了する。
【0013】
[0013]いくつかの実施形態においては、処理コアは、並列に動作するようになっている第1の機能ユニットの複数(P個)の複製と、DFMA機能ユニットの複数(N個)の複製と、を含んでいる。ここで、数Pは数Nよりも大きい。一実施形態においては、数Nは1である。
【0014】
[0014]処理コアは、入力マネージャ回路を含んでいてもよく、当該入力マネージャ回路は、DFMA機能ユニット用のP個のセットの倍精度入力オペランドを集めて、P個のセットの倍精度オペランドのうち異なるセットの倍精度オペランドを、異なる(例えば、連続する)クロックサイクルで、DFMA機能ユニットに提供するようになっている。さらに、入力マネージャ回路は、第1の機能ユニット用のP個のセットの単精度入力オペランドを集めて、P個のセットの単精度オペランドのうちの異なるセットの単精度オペランドを、第1の機能ユニットのP個の複製の各々に並列に提供してもよい。
【0015】
[0015]本発明の概念及び利点は、以下の詳細な説明と添付の図面から深く理解されるであろう。
【図面の簡単な説明】
【0016】
【図1】本発明の実施形態によるコンピュータシステムのブロック図である。
【図2】本発明の実施形態による、グラフィックス処理ユニットにおいて実施することのできるレンダリングパイプラインのブロック図である。
【図3】本発明の実施形態による実行コアのブロック図である。
【図4】本発明の実施形態による倍精度機能ユニットによって実行することのできる倍精度算術演算と、倍精度比較演算と、形式変換演算とを一覧表示した図である。
【図5】本発明の実施形態による倍精度機能ユニットの単純化したブロック図である。
【図6】図5の倍精度機能ユニットにおけるオペランド準備ブロックのブロック図である。
【図7】図5の倍精度機能ユニットにおける指数経路のブロック図である。
【図8】図5の倍精度機能ユニットにおける仮数経路のブロック図である。
【図9】図5の倍精度機能ユニットにおける符号経路のブロック図である。
【図10】図5の倍精度機能ユニットにおける出力セクションのブロック図である。
【図11】本発明の実施形態による実行コアのブロック図である。
【図12】本発明の実施形態による、倍精度機能ユニットのためのオペランドの順序付けを示すブロック図である。
【詳細な説明】
【0017】
[0028]本発明の実施形態は、専用の倍精度(例えば、64ビット)機能ユニットを含むグラフィックスプロセッサを提供する。一実施形態においては、倍精度機能ユニットは、加算演算と、乗算演算と、融合型積和演算と、更には、倍精度比較と、倍精度形式とそれ以外の形式との間の形式変換とを実行することができる。
【0018】
I.システムの概要
A.コンピュータシステムの概要
[0029]図1は、本発明の実施形態によるコンピュータシステム100のブロック図である。コンピュータシステム100は、メモリブリッジ105を含むバス経路を介して通信する中央処理装置(CPU)102及びシステムメモリ104を含んでいる。メモリブリッジ105は、例えば、従来のノースブリッジチップであってもよく、バス又はその他の通信経路106(例:HyperTransportリンク)を介してI/O(入力/出力)ブリッジ107に接続されている。I/Oブリッジ107は、例えば、従来のサウスブリッジチップであってもよく、一以上のユーザ入力装置108(例:キーボード、マウス)からユーザ入力を受け取り、当該入力をバス106及びメモリブリッジ105を介してCPU 102に転送する。視覚的出力は、ピクセルベースの表示装置110(例:従来のCRT又はLCDベースのモニター)によって提供され、この表示装置110は、バス又はその他の通信経路113(例:PCI Express(PCI−E)、アクセラレーテッドグラフィックスポート(AGP)リンク)を介してメモリブリッジ105に接続されたグラフィックスサブシステム112の制御下で動作する。I/Oブリッジ107には、システムディスク114も接続されている。スイッチ116は、I/Oブリッジ107と、その他のコンポーネント、例えば、ネットワークアダプタ118、様々なアドインカード120,121との間の接続を提供している。I/Oブリッジ107には、それ以外のコンポーネント(図示していない)として、USB接続装置又はその他のポート接続装置、CDドライブ、DVDドライブなどを接続することもできる。様々なコンポーネントの間のバス接続は、バスプロトコル(例えば、PCI(ペリフェラルコンポーネントインターコネクト)、PCI−E、AGP、HyperTransport)、又はその他の任意のバス通信プロトコル或いはポイントツーポイント通信プロトコルを使用して実施することができ、異なるデバイスの間の接続には、この技術分野において公知であるように、様々なプロトコルを使用することができる。
【0019】
[0030]グラフィックス処理サブシステム112は、グラフィックス処理ユニット(GPU)122とグラフィックスメモリ124とを含んでおり、これらは、例えば、一以上の集積回路デバイス、例えば、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、メモリデバイスを使用して実施することができる。GPU 122は、様々なタスクとして、CPU 102及び/又はシステムメモリ104によってメモリブリッジ105及びバス113を介して供給されるグラフィックスデータからピクセルデータを生成すること、グラフィックスメモリ124と対話してピクセルデータを格納及び更新すること等に関連するタスクを実行するように、構成することができる。例えば、GPU 122は、CPU 102上で実行される様々なプログラムによって提供される2次元又は3次元のシーンデータから、ピクセルデータを生成することができる。さらに、GPU 122は、メモリブリッジ105を介して受け取るピクセルデータを、さらなる処理を実行して、又はそのまま、グラフィックスメモリ124に格納することができる。GPU 122は、グラフィックスメモリ124からのピクセルデータを表示装置110に提供するように構成されたスキャンアウトモジュールも含んでいる。
【0020】
[0031]さらに、GPU 122は、データ処理タスクのために、汎用計算を実行するように構成されている。当該タスクには、グラフィックスアプリケーションに関連するタスク(例えば、ビデオゲーム等における物理モデリング)と、グラフィックスアプリケーションには関連しないタスクとが含まれる。汎用計算の場合には、GPU 122は、システムメモリ104又はグラフィックスメモリ124から入力データを読み取り、一以上のプログラムを実行して当該データを処理し、出力データをシステムメモリ104又はグラフィックスメモリ124に書き込むことが好適である。GPU 122は、汎用計算において使用するための一以上の倍精度の融合型積和演算ユニット(図1には示していない)と、レンダリング演算時に使用する別の単精度の機能ユニットとを含むことが好適である。
【0021】
[0032]CPU 102は、システム100のマスタープロセッサとして動作し、他のシステムコンポーネントの動作を制御及び調整する。具体的には、CPU 102は、GPU 122の動作を制御するコマンドを発行する。いくつかの実施形態においては、CPU 102は、GPU 122用のコマンドストリームをコマンドバッファに書き込む。このコマンドバッファは、システムメモリ104、グラフィックスメモリ124、又は、CPU 102及びGPU 122の双方からアクセス可能な別の記憶域中に存在し得る。GPU 122は、コマンドバッファからコマンドストリームを読み取り、CPU 102の動作とは非同期にコマンドを実行する。これらのコマンドは、画像を生成するための従来のレンダリングコマンドを含み得るものであり、また、CPU 102上で実行されるアプリケーションが画像の生成には関連しないデータ処理をGPU 122の計算能力を利用して行うことを可能にする汎用計算コマンドを含み得る。
【0022】
[0033]図1に示したシステムは例示を目的としており、変形及び変更が可能であることが理解されるであろう。バスのトポロジー(例えば、ブリッジの数、ブリッジの配置編成)は、必要に応じて修正することができる。例えば、いくつかの実施形態においては、システムメモリ104が、ブリッジを通じてではなく直接的にCPU 102に接続されており、他のデバイスが、メモリブリッジ105及びCPU 102を介してシステムメモリ104と通信する。別のトポロジーにおいては、グラフィックスサブシステム112が、メモリブリッジ105ではなくI/Oブリッジ107に接続される。さらに別の実施形態においては、I/Oブリッジ107とメモリブリッジ105とを一つのチップに統合することができる。図1に示した特定のコンポーネントはオプションであり、例えば、任意の数のアドインカード或いは周辺装置をサポートすることができる。いくつかの実施形態においては、スイッチ116が省かれ、ネットワークアダプタ118及びアドインカード120,121がI/Oブリッジ107に直接接続される。
【0023】
[0034]さらに、GPU 122と、システム100の他のコンポーネントとの間の接続を変更することも可能である。いくつかの実施形態においては、グラフィックスサブシステム112が、システム100の拡張スロットに挿入することのできるアドインカードとして実施される。別の実施形態においては、GPUが、バスブリッジ(例えば、メモリブリッジ105、I/Oブリッジ107)と共に一つのチップに統合される。更に別の実施形態においては、GPU 122の要素のいくつか又は全てをCPU 102と統合することができる。
【0024】
[0035]GPUは、任意の量のローカルグラフィックスメモリを備えていてもよく(ローカルメモリを設けなくてもよい)、ローカルメモリ及びシステムメモリを任意の組合せで使用することができる。例えば、ユニファイドメモリアーキテクチャ(UMA)の実施形態においては、専用のグラフィックスメモリデバイスを設けず、GPUは、システムメモリを独占的又は略独占的に使用する。UMAの実施形態においては、GPUをバスブリッジチップに組み込むことができ、又は、GPUをブリッジチップ及びシステムメモリに接続する高速バス(例:PCI−E)を備えた個別のチップとして、GPUを提供することが可能である。
【0025】
[0036]さらに、例えば、1枚のグラフィックスカードに複数のGPUを含めることによって、或いは、複数のグラフィックスカードをバス113に接続することによって、任意の数のGPUをシステムに含めることができることも理解されたい。複数のGPUを、同じ表示装置又は複数の異なる表示装置への画像を生成するように並列に動作させてもよく、或いは、一つのGPUが画像を生成するように動作する一方で、別のGPUが汎用計算(後から説明する倍精度の計算を含む)を実行してもよい。
【0026】
[0037]さらには、本発明の態様を具現化するGPUは、様々な装置、例えば、汎用コンピュータシステム、ビデオゲームコンソール及びその他の特殊用途のコンピュータシステム、DVDプレーヤー、携帯機器(携帯電話、携帯情報端末など)に組み込むことができる。
【0027】
B.レンダリングパイプラインの概要
[0038]図2は、本発明の実施形態による、図1のGPU 122において実施することのできるレンダリングパイプライン200のブロック図である。この実施形態においては、レンダリングパイプライン200は、適用可能なグラフィックス関連のプログラム(例えば、頂点シェーダー、ジオメトリシェーダー、ピクセルシェーダーのうちの少なくとも一つ)と汎用計算プログラムとが、同じ並列処理ハードウェア(本明細書においては「マルチスレッドコアアレイ(multithreaded core array)」202と称する)を使用して実行されるアーキテクチャを使用して、実施されている。
【0028】
[0039]レンダリングパイプライン200は、マルチスレッドコアアレイ202に加えて、フロントエンド204及びデータアセンブラ206と、セットアップモジュール208と、ラスタライザ210と、カラーアセンブリモジュール212と、ラスターオペレーションモジュール(ROP)214と、を含んでいる。これらのコンポーネントのそれぞれは、従来の集積回路技術又はその他の技術を使用して実施することができる。
【0029】
[0040]レンダリング演算においては、フロントエンド204が、状態情報(STATE)と、コマンド(CMD)と、ジオメトリデータ(GDATA)とを、例えば図1のCPU 102から受け取る。いくつかの実施形態においては、CPU 102は、ジオメトリデータを直接提供するのではなく、ジオメトリデータが格納されているシステムメモリ104中の位置への参照情報を提供し、データアセンブラ206が、システムメモリ104からデータを取得する。レンダリング演算においては、状態情報、コマンド、及びジオメトリデータは、基本的に従来の性質のものとすることができ、これらを使用することにより、レンダリング後の(一以上の)必要な画像(例えば、シーンのジオメトリ、ライティング、シェーディング、テクスチャ、モーション、カメラパラメータのうちの一つ以上)を定義することができる。
【0030】
[0041]状態情報及びレンダリングコマンドは、レンダリングパイプライン200の様々なステージにおける処理パラメータ及びアクションを定義する。フロントエンド204は、状態情報及びレンダリングコマンドを、制御経路(図示していない)を介して、レンダリングパイプライン200の別のコンポーネントに導く。この技術分野において公知であるように、これらのコンポーネントは、処理時にアクセスされる様々な制御レジスタに値を格納し、又は制御レジスタ内の値を更新することによって、受け取った状態情報に応答することができ、パイプライン内で受け取ったデータを処理することによって、レンダリングコマンドに応答することができる。
【0031】
[0042]フロントエンド204は、ジオメトリデータをデータアセンブラ206に導く。データアセンブラ206は、ジオメトリデータをフォーマッティングし、それをマルチスレッドコアアレイ202におけるジオメトリモジュール218への配送用に準備する。
【0032】
[0043]ジオメトリモジュール218は、頂点データに対して頂点シェーダープログラム及び/又はジオメトリシェーダープログラムを実行するよう、マルチスレッドコアアレイ202におけるプログラマブル処理エンジン(図示していない)に命令する。これらのプログラムは、フロントエンド204によって提供される状態情報に応答して選択される。頂点シェーダープログラム及び/又はジオメトリシェーダープログラムは、この技術分野において公知であるようにレンダリングアプリケーションによって指定することができ、異なる頂点及び/又はプリミティブに、異なるシェーダープログラムを適用することができる。いくつかの実施形態においては、頂点シェーダープログラム及びジオメトリシェーダープログラムは、マルチスレッドコアアレイ202における同じプログラマブル処理コアを使用して実行される。従って、一つの処理コアは、ある時点においては頂点シェーダーとして動作し、頂点プログラムの命令を受け取って実行することができ、別の時点においては、同じ処理コアがジオメトリシェーダーとして動作し、ジオメトリプログラムの命令を受け取って実行することができる。処理コアはマルチスレッド化することができ、異なるタイプのシェーダープログラムを実行する異なるスレッドを、マルチスレッドコアアレイ202において並列に進行させることができる。
【0033】
[0044]頂点シェーダープログラム及び/又はジオメトリシェーダープログラムが実行された後に、ジオメトリモジュール218は、処理されたジオメトリデータ(GDATA’)をセットアップモジュール208に渡す。セットアップモジュール208は、一般的に従来の設計のモジュールとすることができるものであり、各プリミティブのクリップ空間座標又はスクリーン空間座標からエッジ方程式(edge equations)を生成する。エッジ方程式は、スクリーン空間内の点がプリミティブの内側であるか外側であるかを判定する目的に好適に使用可能である。
【0034】
[0045]セットアップモジュール208は、プリミティブ(PRIM)のそれぞれをラスタライザ210に提供する。ラスタライザ210(一般的に従来の設計とすることができる)は、どのピクセル(存在時)がプリミティブによってカバーされているかを、例えば従来のスキャン変換アルゴリズム(scan−conversion algorithms)を使用して判定する。本明細書において使用する「ピクセル」(又は「フラグメント」)は、一般には、一つのカラー値が決定される、2次元スクリーン空間内の領域を意味する。ピクセルの数及び配置は、レンダリングパイプライン200の設定可能なパラメータとすることができ、特定の表示装置の画面解像度に相関させてもよく、又は相関させなくてもよい。
【0035】
[0046]ラスタライザ210は、どのピクセルがプリミティブによってカバーされているかを判定した後、プリミティブ(PRIM)と、そのプリミティブによってカバーされているピクセルのスクリーン座標(X,Y)のリストとを、カラーアセンブリモジュール212に提供する。カラーアセンブリモジュール212は、ラスタライザ210から受け取ったプリミティブとカバレッジ情報とを、プリミティブの頂点の属性(例:色成分、テクスチャ座標、面法線)に関連付けて、属性のいくつか又は全てをスクリーン座標空間内の位置の関数として定義する平面方程式(又はその他の適切な方程式)を生成する。
【0036】
[0047]これらの属性方程式は、ピクセルシェーダープログラムにおいて、プリミティブの中の任意の位置における属性の値を計算するために好適に使用可能である。当該方程式は、従来の手法を使用して生成することができる。例えば、一実施形態においては、カラーアセンブリモジュール212は、属性UそれぞれについてU=Ax+By+Cという形式の平面方程式の係数A、B、及びCを生成する。
【0037】
[0048]カラーアセンブリモジュール212は、ピクセルの少なくとも一つのサンプリング位置をカバーしているプリミティブそれぞれの属性方程式(EQS、例えば、平面方程式の係数A、B、及びCを含んでいることができる)と、カバーされているピクセルのスクリーン座標(X,Y)のリストとを、マルチスレッドコアアレイ202におけるピクセルモジュール224に提供する。ピクセルモジュール224は、マルチスレッドコアアレイ202におけるプログラマブル処理エンジン(図示していない)に命令して、プリミティブによってカバーされているピクセルそれぞれに対して一以上のピクセルシェーダープログラムを実行させる。これらのプログラムは、フロントエンド204によって提供される状態情報に応答して選択される。あらゆる所与のセットのピクセルに対して使用するピクセルシェーダープログラムは、頂点シェーダープログラム及びジオメトリシェーダープログラムと同様に、レンダリングアプリケーションが指定することができる。
【0038】
[0049]ピクセルシェーダープログラムは、頂点シェーダープログラム及び/又はジオメトリシェーダープログラムを実行する同じプログラマブル処理エンジンを使用して、マルチスレッドコアアレイ202において好適に実行される。従って、一つの処理エンジンは、ある時点においては頂点シェーダーとして動作し、頂点プログラムの命令を受け取って実行することができ、別の時点においては、同じ処理エンジンがジオメトリシェーダーとして動作し、ジオメトリプログラムの命令を受け取って実行することができ、更に別の時点においては、同じ処理エンジンがピクセルシェーダーとして動作し、ピクセルシェーダープログラムの命令を受け取って実行することができる。
【0039】
[0050]ピクセル又はピクセルのグループの処理が完了した時点で、ピクセルモジュール224は、処理されたピクセル(PDATA)をROP 214に提供する。ROP 214は、一般的に従来の設計のものであってもよく、ピクセルモジュール224から受け取るピクセル値と、フレームバッファ226内の構築中の画像のピクセルとを統合する。このフレームバッファ226は、例えば、グラフィックスメモリ124内に位置し得る。いくつかの実施形態においては、ROP 214は、ピクセルをマスクすることができ、又は、新しいピクセルと、レンダリングされている画像に以前に書き込まれたピクセルとをブレンドすることができる。デプスバッファ、アルファバッファ、及びステンシルバッファを使用して、レンダリングされている画像に対する、入力されるピクセルそれぞれの寄与(存在時)を決定することもできる。入力されるピクセル値それぞれと、以前に格納されているピクセル値との適切な組合せに対応するピクセルデータPDATA’が、再びフレームバッファ226に書き込まれる。画像が完成した時点で、フレームバッファ226を表示装置にスキャンアウトし、及び/又は、更なる処理を行うことができる。
【0040】
[0051]汎用計算においては、マルチスレッドコアアレイをピクセルモジュール224によって(又はジオメトリモジュール218によって)制御することができる。フロントエンド204は、例えば図1のCPU 102から状態情報(STATE)及び処理コマンド(CMD)を受け取り、これらの状態情報及びコマンドを、制御経路(図示していない)を介して作業配分ユニットに提供する。この作業配分ユニットは、例えばカラーアセンブリモジュール212又はピクセルモジュール224に組み込むことができる。作業配分ユニットは、マルチスレッドコアアレイ202を構成している複数の処理コアの間で処理タスクを分配する。様々な作業配分アルゴリズムを使用することができる。
【0041】
[0052]処理タスクのそれぞれは、複数の処理スレッドを実行することを含むことが好適であり、この場合、スレッドのそれぞれは同じプログラムを実行する。プログラムは、「グローバルメモリ」(例:システムメモリ104、グラフィックスメモリ124、又は、GPU 122及びCPU 102の両方からアクセス可能な任意の別のメモリ)から入力データを読み取るための命令と、少なくともいくつかの倍精度演算を含む様々な演算を入力データに対して実行して出力データを生成するための命令と、出力データをグローバルメモリに書き込むための命令と、を含むことが好適である。具体的な処理タスクについては、本発明において重要ではない。
【0042】
[0053]図2に記載したレンダリングパイプラインは例示を目的としており、変形及び変更が可能であることが理解されるであろう。このパイプラインは、図示したユニットとは異なるユニットを含むことができ、処理イベントの順序は、本明細書に説明した順序とは異なっていてもよい。さらに、本明細書に説明したモジュールのいくつか又は全ての複数のインスタンスを並列に動作させることができる。このような一実施形態においては、マルチスレッドコアアレイ202は、二つ以上のジオメトリモジュール218と、それと同じ数の並列に動作するピクセルモジュール224とを含む。ジオメトリモジュール及びピクセルモジュールのそれぞれは、マルチスレッドコアアレイ202における処理エンジンの異なるサブセットを協働して制御する。
【0043】
C.コアの概要
[0054]マルチスレッドコアアレイ202は、多数の処理スレッドを並列に実行するようになっている一以上の処理コアを含むことが好適である。ここで、「スレッド」との用語は、特定のセットの入力データに対して実行される特定のプログラムのインスタンスを意味する。例えば、スレッドは、一つの頂点の属性に対して実行される頂点シェーダープログラムのインスタンス、或いは、与えられたプリミティブ及びピクセルに対して実行されるピクセルシェーダープログラムのインスタンス、又は、汎用計算プログラムのインスタンスとすることができる。
【0044】
[0055]図3は、本発明の実施形態による実行コア300のブロック図である。実行コア300は、例えば、上述したマルチスレッドコアアレイ202において実施することができ、様々な計算を実行するための任意の一連の命令を実行するように構成されている。いくつかの実施形態においては、同じ実行コア300を使用して、グラフィックスレンダリングの全ての段階におけるシェーダープログラム(例えば、頂点シェーダープログラム、ジオメトリシェーダープログラム、ピクセルシェーダープログラムのうちの一つ以上)と、汎用計算プログラムとを、実行することができる。
【0045】
[0056]実行コア300は、フェッチ・ディスパッチユニット302と、発行ユニット304と、倍精度の融合型積和演算(DFMA)ユニット320と、DFMA以外の複数(N個)の機能ユニット(FU)322と、レジスタファイル324と、を含んでいる。機能ユニット320,322のそれぞれは、指定された演算を実行するように構成されている。一実施形態においては、DFMAユニット320は、後述するように、倍精度の融合型積和演算と、それ以外の倍精度演算とを好適に実施する。なお、コア300には任意の数のDFMAユニット320を含めることができることを理解されたい。
【0046】
[0057]DFMA以外の機能ユニット322は、基本的に従来の設計のものであってもよく、様々な演算(例えば、単精度の加算演算、乗算演算、ビットごとの論理演算、比較演算、形式変換演算、テクスチャフィルタリング、メモリアクセス(例:ロード動作及び格納動作)、超越関数の近似、補間)をサポートすることができる。機能ユニット320,322はパイプライン化されていてもよく、これにより、この技術分野において公知であるように、前の命令が終了する前に新しい命令を発行することができる。また、任意の組合せの機能ユニットが提供されていてもよい。
【0047】
[0058]実行コア300の動作時、フェッチ・ディスパッチユニット302は、命令の格納域(図示していない)から命令を取得し、当該命令をデコードし、そして、当該命令を、関連するオペランド参照又はオペランドデータと一緒に、オペコードとして発行ユニット304にディスパッチする。発行ユニット304は、命令のそれぞれについて、参照先のオペランドを、例えばレジスタファイル324から取得する。命令のオペランドの全てが用意されると、発行ユニット304は、オペコード及びオペランドをDFMAユニット320又はDFMA以外の機能ユニット322に送ることによって、その命令を発行する。発行ユニット304は、与えられた命令を実行するための適切な機能ユニットを、オペコードを使用して選択することが好適である。フェッチ・ディスパッチユニット302及び発行ユニット304は、従来のマイクロプロセッサのアーキテクチャ及び技術を使用して実施することができ、その詳細な説明については、本発明を理解する上で重要ではないため省略する。
【0048】
[0059]DFMAユニット320及びDFMA以外の機能ユニット322は、オペコード及び関連するオペランドを受け取り、それらのオペランドに対して、指定された演算を実行する。結果のデータは、レジスタファイル324(又は別の転送先)にデータ転送経路326を介して転送することのできる結果値の形式で提供される。レジスタファイル324は、いくつかの実施形態においては、特定のスレッドに割り当てられる区域を有するローカルレジスタファイルと、複数のスレッド間でのデータの共有を可能にするグローバルレジスタファイル、とを含んでいる。レジスタファイル324は、プログラムの実行時に、入力データ、中間結果、及びその他のデータを格納する目的に使用することができる。レジスタファイル324の具体的な実施形態については、本発明において重要ではない。
【0049】
[0060]一実施形態においては、コア300はマルチスレッド化されており、例えば、スレッドのそれぞれに関連付けられる現在の状態情報を維持することによって、最大数(例えば、384個、768個)までのスレッドを並列に実行することができる。コア300は、例えば、あるクロックサイクルにおいて、頂点スレッドからのプログラム命令を発行した後、別の頂点スレッドからの、又は別のタイプのスレッド(例えば、ジオメトリスレッド、ピクセルスレッドなど)からのプログラム命令を発行することができるように、一つのスレッドから別のスレッドに迅速に切り替えるように設計されていることが好適である。
【0050】
[0061]図3の実行コアは例示を目的としており、変形及び変更が可能であることが理解されるであろう。プロセッサには任意の数のコアを含めることができ、コアには任意の数の機能ユニットを含めることができる。フェッチ・ディスパッチユニット302及び発行ユニット304は、任意の望ましいマイクロアーキテクチャとして、例えば、スケーラアーキテクチャ、スーパースケーラアーキテクチャ、又はベクトルアーキテクチャを実施することができ、インオーダー又はアウトオブオーダーの命令発行方式、投機的実行モード、単一命令複数データ(SIMD)命令発行方式などを必要に応じて採用する。いくつかのアーキテクチャにおいては、発行ユニットは、複数の機能ユニットを対象とする複数のオペコード及びオペランドを含むロング命令ワード、又は、一つの機能ユニットを対象とする複数のオペコード及び/又はオペランドを含むロング命令ワードを受け取る、又は発行する、又は受け取って発行することができる。いくつかのアーキテクチャにおいては、実行コアは、例えばSIMD命令を実行するための並列に動作可能な、機能ユニットそれぞれの複数のインスタンスを含むことができる。さらに、実行コアは、パイプライン化された一連の機能ユニットを含むことができ、この場合、一つのステージにおける機能ユニットからの結果は、レジスタファイルに直接転送されるのではなく、後のステージにおける機能ユニットに転送される。このような構成の機能ユニットは、一つのロング命令ワード又は複数の個別の命令によって制御することができる。
【0051】
[0062]さらに、本発明の教示内容にアクセスするこの技術分野における通常の技能を有する者には、DFMAユニット320を任意のマイクロプロセッサの中の機能ユニットとして実施することができ、グラフィックスプロセッサ又は何らかの特定のプロセッサ、或いは実行コアのアーキテクチャには限定されないことが認識されるであろう。例えば、DFMAユニット320を、汎用並列処理ユニット(general−purpose parallel processing unit)又は汎用CPUにおいて実施することができる。
【0052】
C.DFMAユニットの概要
[0063]本発明の一実施形態によると、実行コア300は、DFMAユニット320を含んでおり、当該DFMAユニット320は、3種類の演算、すなわち、倍精度算術演算、比較演算、倍精度形式とそれ以外の形式との間の形式変換、を実行する。
【0053】
[0064]DFMAユニット320は、倍精度浮動小数点形式における入力及び出力を扱い、変換演算においては、倍精度以外の浮動小数点形式又は固定小数点形式における入力及び出力を扱うことが好適である。演算によってオペランドの形式が異なっていてもよい。DFMAユニット320の実施形態について説明する前に、代表的な形式について定義しておく。
【0054】
[0065]本明細書において使用する「fp32」は、IEEE754規格の単精度浮動小数点形式を意味し、この形式においては、正規の浮動小数点数が、符号ビットと、8個の指数ビットと、23個の仮数部ビットとによって表される。2−126〜2127の範囲内の指数が1〜254の整数を使用して表されるように、指数は127だけプラス方向にバイアスされる。「正規」数の場合、23個の仮数部ビットは、24ビットの仮数のうちの小数部分として解釈され、整数部分として1が暗黙的に含まれている(本明細書においては、用語「仮数部」は、先頭の1が暗黙的に含まれているときに使用しているのに対し、「仮数」は、先頭の1が明示的に含まれている(該当時)ことを表す目的で使用している)。
【0055】
[0066]本明細書において使用する「fp64」は、IEEE754規格の倍精度浮動小数点形式を意味し、この形式においては、正規の浮動小数点数が、符号ビットと、11個の指数ビットと、52個の仮数部ビットとによって表される。2−1022〜21023の範囲内の指数が1〜2046の整数を使用して表されるように、指数は1023だけプラス方向にバイアスされる。「正規」数の場合、52個の仮数部ビットは、53ビットの仮数のうちの小数部分として解釈され、整数部分として1が暗黙的に含まれている。
【0056】
[0067]本明細書において使用する「fp16」は、グラフィックスにおいて一般的に使用される「半精度」浮動小数点形式を意味し、この形式においては、正規の浮動小数点数が、符号ビットと、5個の指数ビットと、10個の仮数部ビットとによって表される。2−14〜215の範囲内の指数が1〜30の整数を使用して表されるように、指数は15だけプラス方向にバイアスされる。「正規」数の場合、10個の仮数部ビットは、11ビットの仮数のうちの小数部分として解釈され、整数部分として1が暗黙的に含まれている。
【0057】
[0068]fp16形式、fp32形式、及びfp64形式においては、指数ビット全てが0である数を非正規数(又は「デノーマル」)と称し、仮数における暗黙的な先頭の1を持たないものとして解釈される。このような数は、例えば、計算におけるアンダーフローを表すことができる。指数ビット全てが1であり、仮数部ビット全てが0である(正又は負の)数は、(正又は負の)無限大(INF)と称する。この数は、例えば、計算におけるオーバーフローを表すことができる。指数ビット全てが1であり、仮数部ビットが0以外である数は、非数(NaN)と称し、例えば、定義されていない値を表す目的に使用することができる。ゼロ(0)も特殊な数とみなされ、指数ビット及び仮数部ビットの全てが0にセットされていることによって表される。ゼロはどちらの符号を持つこともでき、従って、正のゼロ及び負のゼロが許可される。
【0058】
[0069]固定小数点形式は、本明細書においては、形式が符号付きであるか符号なしであるかを示す先頭の「s」又は「u」と、ビットの総数を表す数(例:16、32、64)とによって指定する。従って、s32は符号付き32ビット形式を意味し、u64は符号なし64ビット形式を意味し、他も同様である。符号付き形式の場合、2の補数表現を使用することが有利である。本明細書において使用している全ての形式において、最上位ビット(MSB)はビットフィールドの左端であり、最下位ビット(LSB)は右端である。
【0059】
[0070]なお、これらの形式は、本明細書においては例示を目的として定義及び使用しており、DFMAユニットは、本発明の範囲から逸脱することなく、これらの形式又はそれ以外の形式の任意の組合せをサポートすることができることを理解されたい。具体的には、「単精度」及び「倍精度」は、現在定義されている標準形式に限定されず、任意の二つの異なる小数点形式を意味することができることを理解されたい。倍精度形式(例:fp64)は、より広い範囲の浮動小数点数を表し、及び/又は、より高い精度の浮動小数点数を表す関連する単精度形式(例:fp32)よりも多くの数のビットを使用する任意の形式を意味する。同様に、「半精度」は、一般的には、より狭い範囲の浮動小数点数を表し、及び/又は、より低い精度の浮動小数点数を表す、関連する単精度形式よりも少ないビットを使用する形式を意味することができる。
【0060】
[0071]次に、本発明によるDFMAユニット320の実施形態について説明する。図4は、DFMAユニット320のこの実施形態によって実行することのできる、倍精度の算術演算、比較演算、及び形式変換演算を一覧表示する表400である。
【0061】
[0072]セクション402は、算術演算を一覧表示している。加算(DADD)は、fp64の二つの入力A及びCを加算し、fp64の和A+Cを返す。乗算(DMUL)は、fp64の二つの入力A及びBを乗算し、fp64の積A*Bを返す。融合型積和演算(DFMA)は、fp64の三つの入力A,B,及びCを受け取り、A*B+Cを計算する。この演算は、積A*Bが、Cに加算される前に丸められないことにおいて「融合型(fused)」である。正確な値A*Bを使用することにより、精度が向上し、浮動小数点算術演算の近い将来の規格であるIEEE754Rに準拠する。
【0062】
[0073]セクション404は、比較演算を一覧表示している。最大値演算(DMAX)は、fp64のオペランドA及びオペランドBのうちの大きい方を返し、最小値演算(DMIN)は、二つのオペランドのうちの小さい方を返す。二項テスト演算(DSET)は、倍精度のオペランドA及びオペランドBに対して、複数の二項関係テスト(binary relationship tests)のうちの一つを実行し、そのテストが満たされているかを示すブール値を返す。この実施形態においては、テストすることのできる二項関係としては、より大きい(A>B)、より小さい(A<B)、等しい(A=B)、順序付けできない(A?B、これは、A又はBのいずれかがNaNである場合に真である)、さらには、否定(例:A≠B)、及び様々な組合せテスト(A≧B、A<>B、A?=Bなど)が挙げられる。
【0063】
[0074]セクション406は、形式変換演算及び丸め演算を一覧している。この実施形態においては、DFMAユニット320は、fp64形式の数を、別の64ビット形式又は32ビット形式の数に変換する、又はその逆に変換することができる。D2F演算は、オペランドAをfp64からfp32に変換し、F2Dは、オペランドAをfp32からfp64に変換する。D2I演算は、オペランドAを、fp64から、s64、u64、s32、及びu32のうちのいずれかの形式に変換する。変換後の形式を特定するのに個別のオペコードを使用することができることを理解されたい。I2D演算は、整数オペランドCを、s64、u64、s32、及びu32のうちのいずれかの形式からfp64形式に変換する。この場合も、変換前の形式を識別するのに個別のオペコードを使用することができることを理解されたい。この実施形態においては、倍精度形式への変換及び倍精度形式からの変換の全てがDFMAユニット320によってサポートされる。DFMAではない機能ユニットは、他の形式変換(例えば、fp32形式とfp16形式との間、fp32形式と整数形式との間)を実行することができる。
【0064】
[0075]D2D演算は、fp64のオペランドに丸め演算(例えば、IEEE丸めモード)を適用する目的に使用される。これらの演算は、fp64のオペランドを、fp64形式で表される整数値に丸める。一実施形態においては、サポートされるD2D演算として、切捨て(0の方向に丸める)、シーリング(+無限大の方向に丸める)、フロア(−無限大の方向に丸める)、最近接(最も近い整数に切り上げる又は切り捨てる)が挙げられる。
【0065】
[0076]この実施形態においては、DFMAユニット320は、より高度な数学関数(例えば、除算、剰余、平方根)については、直接的なハードウェアサポートを提供しない。しかしながら、DFMAユニット320を使用して、ソフトウェアベースでのこれらの演算の実施を高速化することができる。例えば、除算するための一つの一般的な方法では、商q=a/bが推定され、次いで、t=q*b−aを使用してその推定がテストされる。tが0であれば、商qが正しく求められている。0でない場合、tの大きさを用いて推定した商qが修正され、tが0になるまでテストが繰り返される。各反復のテスト結果tは、1回のDFMA演算(A=q、B=b、C=−a)を使用して正確に計算することができる。同様に、平方根の場合、一つの一般的な方法では、r=a1/2が推定され、次いで、t=r*r−aが計算され、その推定がテストされ、tが0でなければrが修正される。この場合も、各反復のテスト結果tは、1回のDFMA演算(A=B=r、C=−a)を使用して正確に計算することができる。
【0066】
[0077]第II節及び第III節では、図4に示した演算の全てを実行することのできるDFMAユニット320について説明する。第II節では、DFMAユニット320の回路構造について説明し、第III節では、その回路構造を使用して、図4に一覧した演算を実行する方法について説明する。なお、本明細書に説明するDFMAユニット320は例示を目的としており、異なる機能の組合せを、回路ブロックの適切な組合せを使用してサポートすることができることを理解されたい。
【0067】
II.DFMAユニットの構造
[0078]図5は、図4に示した演算の全てをサポートする本発明の実施形態によるDFMAユニット320の単純化したブロック図である。この実施形態においては、DFMAユニット320は、全ての演算に使用されるマルチステージパイプラインを実施している。DFMAユニット320は、プロセッササイクルのそれぞれにおいて、(例えば、図3の発行ユニット304から)三つの新しいオペランド(A0,B0,C0)を、オペランド入力経路502,504,506を介して受け取り、実行すべき演算を示すオペコードを、オペコード経路508を介して受け取ることができる。この実施形態においては、演算は、図4に示した任意の演算とすることができる。オペコードは、演算のみならず、オペランドの入力形式と、結果に使用する出力形式(入力形式と同じ形式又は異なる形式)とを示すことが好適である。なお、図4に示した演算は、当該演算に関連付けられた複数のオペコードを有することができることに留意されたい。例えば、出力がs64であるD2Iのための一つのオペコードと、出力がs32であるD2Iのための別のオペコードとが存在し得る。
【0068】
[0079]DFMAユニット320は、演算のそれぞれを全てのパイプラインステージを通じて処理し、64ビット(特定の形式変換演算の場合には32ビット)の結果値(OUT)を信号経路510上に生成し、対応する条件コード(COND)を信号経路512上に生成する。これらの信号は、アーキテクチャに応じて、例えば、図3に示したようにレジスタファイル324、発行ユニット304、又はプロセッサコアの別の要素に転送され得る。一実施形態においては、パイプラインステージは、プロセッササイクルに対応する。別の実施形態においては、一つのステージが複数のプロセッササイクルを含み得る。さらに、パイプライン内の複数の異なる経路は、並列に動作することが有利である。
【0069】
[0080]第II.A節では、DFMAパイプラインの概要について説明し、第II.B−I節では、各セクションの回路ブロックについて詳しく説明する。
【0070】
A.DFMAパイプライン
[0081]最初に、パイプラインについて、DFMA演算時に回路ブロックがどのように使用されるかに関連して説明する。オペランド準備ブロック514は、(まだfp64形式ではないオペランドについて)オペランドのフォーマッティングと、特殊数の検出とを実行する。さらに、オペランド準備ブロック514は、入力されるfp64のオペランドから、仮数ビット(Am,Bm,Cm)と、指数ビット(Ae,Be,Ce)と、符号ビット(As,Bs,Cs)とを取り出す。一実施形態においては、オペランドの無効な組合せは存在しない。演算において使用されないオペランドは、単に無視することができる。
【0071】
[0082]仮数経路516は、仮数Amと仮数Bmの積を計算する。これと並列に、指数経路518は、指数Ae及び指数Beを使用して、積A*BとオペランドCとの間の相対的な位置合わせ量を求め、オペランドC用の位置合わせ後の仮数(C_align)を仮数経路516に供給する。仮数経路516は、C_alignを積Am*Bmに加算し、次いで、結果を正規化する。仮数経路516は、この正規化に基づいて、位置合わせ信号(ALIGN_NORM)を指数経路518に戻し、指数経路518は、このALIGN_NORM信号と、指数Ae,Be,及びCeとを一緒に使用して、最終結果の指数を求める。
【0072】
[0083]符号経路520は、オペランド準備ブロック514から符号ビットAs,Bs,及びCsを受け取り、結果の符号を求める。仮数経路516は、結果が0である場合を検出し、結果ゼロ(R_ZERO)を符号経路520に提供する。
【0073】
[0084]出力セクション522は、仮数経路516からの結果の仮数Rmと、指数経路518からの結果の指数Reと、符号経路520からの結果の符号Rsとを受け取る。さらに、出力セクション522は、オペランド準備ブロック514から特殊数信号(SPC)を受け取る。出力セクション522は、これらの情報に基づいて、出力経路510に提供することができるように最終結果(OUT)をフォーマッティングし、条件コード(COND)を出力経路512上に生成する。条件コード(結果よりも少ない数のビットを含んでいることが好適である)は、結果の特性に関する一般情報を伝える。例えば、条件コードは、結果が正である、負である、0である、NaNである、無限大である、或いは非正規であるかを示すビットを含み得る。この技術分野において公知であるように、結果と一緒に条件コードが提供される場合、その結果を使用する下流の要素は、場合によっては、その処理において結果自体ではなく条件コードを使用することができる。いくつかの実施形態においては、演算の実行時に例外又はその他のイベントが発生したことを、条件コードを使用して示すことができる。別の実施形態においては、条件コードを完全に省くことができる。
【0074】
[0085]なお、「仮数経路」、「指数経路」などの名称は、特定の演算(例:DFMA)時に経路それぞれの様々な回路ブロックによって実行される機能を示唆するものであるが、任意の内部データ経路上の回路ブロックを、演算に依存する方式で様々な用途に利用することができることを理解されたい。例については後述する。
【0075】
[0086]データ経路に加えて、DFMAユニット320は、制御経路(図5には制御ブロック530として表してある)も提供する。制御ブロック530は、オペコードを受け取り、オペコードに依存する様々な制御信号(この図ではまとめて「OPCTL」として表してある)を生成する。この制御信号は、パイプラインを通じたデータ伝搬と同期して回路ブロックのそれぞれに伝搬され得る(様々な回路ブロックまでのOPCTL信号の接続は図5には示していない)。後述するように、OPCTL信号を使用して、DFMAユニット3220の様々な回路ブロックの動作をオペコードに応答して有効化する、無効化する、及びその他の制御を行うことにより、複数の異なる演算を同じパイプライン要素を使用して実行することを可能とする。本明細書において言及する様々なOPCTL信号は、オペコード自体を含み得るものであり、又は、例えば、制御ブロック530において実施されている組合せ論理回路によってオペコードから導かれる何らかの別の信号を含み得るものである。いくつかの実施形態においては、制御ブロック530は、いくつかのパイプラインステージにおける複数の回路ブロックを使用して実施することができる。なお、一つの演算時に複数の異なるブロックに提供されるOPCTL信号は、同じ信号、又は異なる信号とすることができることを理解されたい。この技術分野における通常の技能を有する者には、本開示に基づいて、適切なOPCTL信号を構築することができるであろう。
【0076】
[0087]一つのステージの複数の回路ブロックに要求される処理時間は、回路ブロックごとに異なることがあり、一つのステージに要求される時間は、演算によって異なり得ることに留意されたい。従って、DFMAユニット320は、一つのパイプラインステージから次のステージまでの複数の異なる経路上のデータ伝搬を制御する目的で、様々なタイミング・同期回路(図5には示していない)を含むことも可能である。また、任意の適切なタイミング回路(例:ラッチ、送信ゲート)が使用されてもよい。
【0077】
A.オペランドの準備
[0088]図6は、本発明の実施形態によるオペランド準備ブロック514のブロック図である。オペランド準備ブロック514は、入力オペランドA,B,及びCを受け取り、仮数部分(Am,Bm,Cm)を仮数経路516に提供し、指数部分(Ae,Be,Ce)を指数経路518に提供し、符号ビット(As,Bs,Cs)を符号経路520に提供する。
【0078】
[0089]オペランドA,B,及びCは、それぞれのNaN検出ブロック612,614,616と、それぞれの絶対値/符号反転ブロック618,620,622において受け取られる。NaN検出ブロック612,614,616のそれぞれは、受け取ったオペランドがNaN(指数ビット全てが1であり、仮数部ビットが0以外である)であるかを判定し、対応する制御信号を生成する。
【0079】
[0090]絶対値/符号反転ブロック618,620,622は、OPCTL信号(図示していない)に応答してオペランドの符号ビットを反転させる目的に使用することができる。例えば、図4に一覧表示した演算において、オペランドの負数又はオペランドの絶対値を使用することが指定されることがある。ブロック618,620,622は、符号ビットを反転させてオペランドの符号を反転する、又は符号ビットを負でない状態(IEEE754形式の場合には0)に強制することができる。入力オペランドがNaNである場合、対応する絶対値/符号反転ブロック618,620,622は、そのNaNを更に「クワイエット型にし」(例えば、仮数部の先頭ビットを1にセットすることによる)、符号ビットをそのままにする。絶対値/符号反転ブロック618,620,622は、それぞれの出力をオペランド選択マルチプレクサ632,634,636に提供する。
【0080】
[0091]倍精度算術演算の場合、絶対値/符号反転ブロック618によって生成されるオペランドA,B,及びCを直接的に使用することができる。比較演算の場合、A/B比較回路624がオペランドAとオペランドBとを比較する。一実施形態においては、絶対値/符号反転ブロック620がオペランドBの符号を反転し、A/B比較回路624が、Aと−Bとの和を、これらがあたかも固定小数点数であるかのように計算する。結果が正であればAがBよりも大きく、結果が負であればAがBよりも小さく、結果が0であればAはBに等しい。さらに、A/B比較回路624は、NaN検出回路612及び614からのNaN情報を受け取ることができる(これらの経路は図6には示していない)。A又はBのいずれか(又は双方)がNaNであるならば、A及びBは「順序付けできない」。結果の情報は制御論理回路630に提供される。制御論理回路630は、結果情報を信号R_TESTとして出力セクション522に提供し、更に、制御信号をオペランド選択マルチプレクサ632,634,636に提供する。
【0081】
[0092]形式変換オペランドの場合、入力はfp64形式ではないことがある。fp32抽出回路626は、F2D演算時にアクティブである。fp32抽出回路626は、オペランドAを受け取って、入力がfp32の非正規数であるかのテスト全てを実行する。さらに、fp32抽出回路626は、受け取ったオペランドの仮数部フィールドを23ビットから52ビットに拡張する(例えば、末尾の0を追加することによる)。fp32抽出回路626は、fp32の8ビットの指数を11ビットに拡張し、指数のバイアスを127から1023に増大させる(例えば、fp32の指数に896を加えることよる)。
【0082】
[0093]符号なし/符号付き(U/S)抽出回路628は、I2D演算時にアクティブである。U/S抽出回路628は、u32、s32、u64、s64のいずれかの形式の固定小数点オペランドCを受け取り、fp64に変換することができるようにそれを準備する。U/S抽出回路628は、固定小数点オペランドを、1の補数(又は2の補数)の形式から符号・絶対値形式(sign−magnitude form)に変換し、オペランドが仮数部フィールドにおいて桁が合うように先頭又は最後に0を付加する。U/S抽出回路628は、自身の出力をオペランド選択マルチプレクサ636に提供し、さらに、I2D入力信号として指数経路518に提供する。
【0083】
[0094]オペランド選択マルチプレクサ632,634,636は、制御論理回路630からの信号に応答して、オペランドA,B,Cを選択する。オペランド選択マルチプレクサ632は、絶対値/符号反転回路618からのオペランドAと、(fp64形式で表現されている)一定値0.0及び1.0との間での選択を行う。DMUL演算及びDFMA演算の場合、オペランドAが選択される。DMIN(DMAX)演算の場合、A<B(A>B)であればオペランドAが選択され、そうでなければ1.0が選択される。DADD演算及びI2D演算の場合、0.0が選択される。
【0084】
[0095]オペランド選択マルチプレクサ634は、絶対値/符号反転回路620からのオペランドBと、(fp64形式で表現されている)一定値0.0及び1.0との間での選択を行う。DMUL演算及びDFMA演算の場合、オペランドBが選択される。DMIN(DMAX)演算の場合、B<A(B>A)であればオペランドBが選択され、そうでなければ1.0が選択される。DADD演算及びI2D演算の場合、0.0が選択される。
【0085】
[0096]オペランド選択マルチプレクサ636は、絶対値/符号反転回路622からのオペランドCと、fp32抽出回路626からの抽出されたfp32値と、U/S抽出回路628からの抽出された符号なし又は符号付き整数値と、(fp64形式で表現されている)一定値0.0との間での選択を行う。DADD演算及びDFMA演算の場合、オペランドCが選択される。DMUL演算及び比較演算の場合、一定値0.0が選択される。F2D演算の場合、fp32抽出回路626からの抽出されたfp32値が選択され、I2D演算の場合、U/S抽出回路628からの抽出されたu/s値が選択される。
【0086】
[0097]選択マルチプレクサ632,634,636によって選択されたオペランドA,B,及びCは、特殊数検出回路638,640,642に提供される。fp64のオペランドの場合、特殊数検出回路638,640,642は、全ての特殊数条件(非正規、NaN、無限大、0を含む)を検出する。F2D演算の場合、特殊数検出回路642は、fp32抽出回路626から経路644を介してfp32特殊数情報を受け取る。特殊数検出回路638,640,642のそれぞれは、オペランドが特殊数であるか否かと、特殊数であるならばそのタイプとを示す特殊数信号(SPC)を生成する。特殊数信号SPCは、図5に示したように信号経路524を通じて出力セクション522に提供される。特殊数検出回路には、一般的に従来の設計のものを使用することができる。代替の一実施形態においては、(回路612,614,及び616によって実行される)NaN検出は、回路638,640,642では繰り返されない。代わりに、特殊数検出回路638,640,642のそれぞれは、NaN検出回路612,614,及び616のうちの対応する回路からNaN信号を受け取り、その信号を使用して、オペランドがNaNであるかを判定する。
【0087】
[0098]特殊数検出回路638,640,及び642は、いずれかの特殊数が検出されるか否かにかかわらず、オペランドを、仮数ビットと、指数ビットと、符号ビットとに分ける。特殊数検出回路638は、オペランドAの仮数の部分(Am)を仮数経路516(図5)に提供し、オペランドAの指数の部分(Ae)を指数経路518に提供し、符号ビット(As)を符号経路520に提供する。特殊数検出回路640は、オペランドBの仮数の部分(Bm)を仮数経路516に提供し、オペランドBの指数の部分(Be)を指数経路518に提供し、符号ビット(Bs)を符号経路520に提供する。特殊数検出回路642は、オペランドCの仮数の部分(Cm)及び指数の部分(Ce)を指数経路518に提供し、符号ビット(Cs)を符号経路520に提供する。いくつかの実施形態においては、特殊数検出回路638,640,642は、仮数Am,Bm,Cmに先頭の1を付加する(数が非正規であるときを除く)。
【0088】
B.指数経路
[0099]図7は、本発明の実施形態による指数経路518のブロック図である。
【0089】
[0100]指数計算回路702は、オペランド準備ブロック514(図5)から指数ビットAe,Be,及びCeを受け取り、DFMA結果のA*B+Cのブロック指数を計算する。従来の指数計算回路が使用されてもよい。一実施形態においては、全てのオペランドが正規数である場合、指数計算回路は、AeとBeとを加算し、fp64の指数のバイアス(1023)を減算して積A*Bの指数を求め、次いで、この積の指数と指数Ceのうちの大きい方を、DFMA結果のブロック指数(BLE)として選択する。このブロック指数BLEは、下流の最終指数計算回路704に提供される。一以上のオペランドが非正規数(特殊数信号SPCによって示される)である場合、適切な論理回路を使用してブロック指数BLEを求めることができる。別の実施形態においては、特殊数が含まれる演算における指数の決定は、後述するように出力セクション522において扱われる。
【0090】
[0101]さらに、指数計算ブロック702は、Cmと積Am*Bmの小数点位置が合うようにオペランドCの仮数を実質的に左又は右にシフトさせる量を求める。この量は、制御信号Sh_Cとしてシフト回路706に提供される。この制御信号は、Cmを右シフトすることによって、実質的な左シフト又は右シフトを必ず達成することができるように、Cmの余分なパディングを考慮することが好適である。
【0091】
[0102]仮数Cmは符号反転回路708に提供され、符号反転回路708は、条件付きで、すなわち、Cと積A*Bとの間に相対的マイナス符号(relative minus sign)が存在している場合に、(例えば、1の補数による符号反転を使用して)Cmの符号を反転する。相対的マイナス符号は、後述するように符号経路520において検出され、符号制御信号SignCTLは、相対的マイナス符号が存在しているかを示す。符号反転回路708の出力(Cm又は〜Cmのいずれか)は、シフト回路706に提供される。
【0092】
[0103]一実施形態においては、シフト回路706は217ビットのバレルシフターであり、54ビットの仮数Cmを最大157ビットだけ右シフトすることができる。Cmを右シフトする量は、Sh_C信号によって決まる。仮数Cmは、必要な距離だけ右シフトすることができるように位置合わせされた状態でシフターに入力されることが好適である。217ビットというサイズは、53ビットの仮数Cm(及びガードビットとラウンドビット)の全体を、106ビットの積A*B(及び積のガードビットとラウンドビット)の左又は右に合わせる(106ビットの積A*Bは、217ビットフィールドのMSBから右に55ビットの位置に合わせられる)のに十分な空間が確保されるように選択されている。右シフトによってバレルシフターからはみ出したビットは破棄することができる。別の実施形態においては、フラグビットを使用して、右シフトによってバレルシフターからはみ出したビットの全てが「1」であるかを追跡し、この情報を、後述する丸め演算において使用することができる。
【0093】
[0104]代替実施形態においては、従来のスワップマルチプレクサ(swap mux)を使用して、積Am*BmとCmとの間で大きい方のオペランドを選択することができ、次いで、小さい方のオペランドを右シフトすることができる。
【0094】
[0105]D2D演算の場合、仮数CmはD2D論理回路710にも提供される。D2D論理回路710は、仮数Cmと、指数Ceと、符号Csとを受け取り、整数丸め規則を適用する。一実施形態においては、D2D論理回路710は、2進小数点の位置を指数Ceに基づいて決定し、次いで、OPCTL信号(図示していない)に基づいて選択される丸め規則を適用する。丸めモードは、従来の論理回路を使用して実施することができる。また、任意の組合せの丸めモード(例えば、切捨てモード、シーリングモード、フロアモード、最近接モード、ただしこれらに限定されない)をサポートしてもよい。
【0095】
[0106]選択マルチプレクサ712は、シフトされた仮数C_Shiftと、D2D論理回路の出力と、U/S抽出回路628(図6)からのI2D入力とを受け取り、これらの入力のうちの一つを、OPCTL信号に基づいて、仮数経路516に供給される位置合わせ後の仮数C_alignとして選択する。倍精度算術演算及び比較演算の場合、オペランドC_Shiftが選択される。形式変換D2D又はI2Dの場合、C_Shift以外の該当する入力が選択される。
【0096】
[0107]アンダーフロー論理回路713は、fp64及びfp32の結果における潜在的なアンダーフローを検出するように構成されている。D2F演算以外の演算の場合、アンダーフロー論理回路713は、11ビットのfp64ブロック指数BLEが0であるか、又は、非正規結果が生じうるほど十分に0に近いかを判定する。アンダーフロー論理回路713は、指数が0に達しない範囲で仮数を左シフトすることのできる最大ビット数を、ブロック指数に基づいて求める。この数は、8ビットのアンダーフロー信号U_fp64として仮数経路516(図8を参照)に提供される。D2F演算の場合、指数は8ビットのfp32の指数として扱われ、アンダーフロー論理回路713は、許容される最大左シフトを求める。この数は、8ビットのアンダーフロー信号U_fp32として仮数経路516に提供される。
【0097】
[0108]指数経路518は、最終指数計算論理回路704を更に含んでいる。減算回路720には、ブロック指数BLEが提供される。さらに、減算回路720には、仮数経路516からのブロックシフト(BL_Sh)信号が提供される。このBL_Sh信号は、後述するように、積Am*BmをオペランドC_alignに加算したときのMSBの相殺効果を反映している。減算回路720は、BLEからBL_Shを減算して差EDIFを求める。アンダーフロー/オーバーフロー回路722は、減算結果EDIFにおけるアンダーフロー又はオーバーフローを検出する。プラス1回路724は、結果のEDIFに1を加算し、マルチプレクサ720は、アンダーフロー/オーバーフロー条件に基づいて、EDIF信号とEDIF+1信号のいずれかを結果の指数Reとして選択する。結果Reとアンダーフロー/オーバーフロー信号(U/O)とが、出力セクション522に提供される。
【0098】
C.仮数経路
[0109]図8は、本発明の実施形態による仮数経路516のブロック図である。仮数経路516は、オペランドA,B,及びCの仮数に対して積演算及び和演算を実行する。
【0099】
[0110]53×53乗算器802は、(上述した)オペランド準備ブロック514から仮数Am及びBmを受け取り、106ビットの積Am*Bmを計算する。この積は168ビット加算器804に提供され、加算器804は、位置合わせ後の仮数C_alignを更に受け取る。バレルシフター706によって使用される217ビットフィールドの末尾部分のビットは破棄することができ、或いは、末尾部分のビットが0でないか、又は全て1であるかを示すフラグビットを維持することができる。加算器804は、出力Sum及び〜Sum(和の2の補数)を生成する。マルチプレクサ806は、Sum及び〜Sumのいずれかを、和のMSB(符号ビット)に基づいて選択する。選択された和(S)は、ゼロ検出回路814と左シフト回路816とに提供される。ゼロ検出回路814は、選択された和Sが0であるか否かを判定し、対応するR_ZERO信号を符号経路520に提供する。
【0100】
[0111]さらに、仮数経路516は、和Sを正規化する。LZD回路808,810を使用して、Sum及び〜Sumの双方について先頭のゼロの検出(LZD)が並列に実行される。LZD回路808,810のそれぞれは、自身の入力における先頭のゼロの数を示すLZD信号(Z1,Z2)を生成する。LZDマルチプレクサ812は、和のMSB(符号ビット)に基づいて、該当するLZD信号(Z1又はZ2)を選択する。マルチプレクサ806によってSumが選択されるならばZ2を選択し、マルチプレクサ806によって〜Sumが選択されるならばZ1を選択する。選択されたLZD信号は、ブロックシフト信号BL_Shとして指数経路518に提供され、指数経路518において、当該LZD信号が使用されて、上述したように結果の指数が調整される。
【0101】
[0112]正規化論理回路818は、和Sの正規化シフトを決める左シフト量Lshiftを選択する。正規数の結果の場合、左シフト量は、52ビットの仮数部(及びガードビットとラウンドビット)を残して先頭の1が仮数フィールドの外にシフトされるだけ十分に大きいことが好適である。しかしながら、場合によっては、結果は、fp64非正規数又はfp32非正規数として表現すべきアンダーフローである。一実施形態においては、D2F以外の演算の場合、正規化論理回路818は、BL_Shがアンダーフロー信号U_fp64よりも大きくない限りは、LZDマルチプレクサ812からの出力BL_Shを選択し、BL_Shがアンダーフロー信号U_fp64よりも大きい場合、正規化論理回路818は、左シフト量としてU_fp64を選択する。D2F演算の場合、正規化論理回路818は、fp32アンダーフロー信号U_fp32を使用して左シフト量Lshiftを制限する。
【0102】
[0113]左シフト回路816は、和Sを量Lshiftだけ左シフトする。結果のSnは、丸め論理回路820と、プラス1加算器822と、仮数選択マルチプレクサ824とに提供される。丸め論理回路820は、IEEE規格の算術演算に対して定義されている四つの丸めモード(最近接、フロア、シーリング、切捨て)を実施することが好適であり、異なるモードにおいては異なる結果が選択され得る。OPCTL信号又は別の制御信号(図示していない)を使用して、丸めモードの一つを指定することができる。丸め論理回路820は、丸めモードと、正規化された和Snとに基づいて、結果のSnを選択するのか、又はプラス1加算器822によって計算されるSn+1を選択するのかを決定する。選択マルチプレクサ824は、適切な結果(Sn又はSn+1)を選択することによって、丸め論理回路820からの制御信号に応答する。
【0103】
[0114]マルチプレクサ824によって選択された結果は、フォーマッティングブロック826に渡される。浮動小数点出力を有する演算の場合、ブロック826は、仮数Rmを出力セクション522に提供する。和Sは、(整数演算をサポートするため)少なくとも64ビット幅であることが好適であり、余分なビットはフォーマッティングブロック826によって削除することもできる。D2I演算(整数出力を有する)の場合、フォーマッティングブロック826は、結果を、LSBを含む52ビットのint_Lフィールドと、MSBを含む11ビットのint_Mフィールドとに分ける。Rm、int_L、及びint_Mは、出力セクション522に提供される。
【0104】
D.符号経路
[0115]図9は、本発明の実施形態による符号経路520のブロック図である。符号経路520は、オペランド準備ブロック514(図5)からオペランドの符号As,Bs,及びCsを受け取る。さらに、符号経路520は、仮数経路516からの結果ゼロ信号R_Zeroと、進行中の演算のタイプを示すOPCTL信号と、オペランド準備ブロック514からの特殊数信号SPCとを受け取る。符号経路520は、これらの情報に基づいて、結果の符号を求めて符号ビットRsを生成する。
【0105】
[0116]より具体的には、符号経路520は、積/和回路902と最終符号回路904とを含んでいる。積/和回路902は、オペランド準備ブロック514から、オペランドA,B,及びCの符号ビットAs,Bs,及びCsを受け取る。積/和回路902は、符号ビットAs及びBsと従来の符号論理規則(sign logic rules)とを使用して、積A*Bの符号(Sp)を求め、次いで、この積の符号と符号ビットCsとを比較し、積とオペランドCとが同符号を有するか又は異符号を有するかを判定する。積/和回路904は、この情報に基づいて、SignCTL信号をアサート又はデアサートし、SignCTL信号が、最終符号回路904と、指数経路518における符号反転ブロック708(図7)とに提供される。さらには、積とオペランドCとが同符号を有する場合、最終結果もその符号を有し、積とオペランドCとが異符号を有する場合、結果は、どちらが大きいかによって決まる。
【0106】
[0117]最終符号回路904は、最終的な符号を決定する上で必要な情報の全てを受け取る。具体的には、最終符号回路904は、符号情報(積の符号Spを含む)と、積/和回路902からのSignCTL信号と、符号ビットAs,Bs,及びCsとを受け取る。さらに、最終符号回路904は、仮数経路516からのゼロ検出信号R_ZEROと、オペランド準備ブロック514からの特殊数信号SPCとを受け取る。さらに、最終符号回路904は、仮数経路516における加算器804から和のMSB(和が正であるか負であるかを示す)を受け取る。
【0107】
[0118]最終符号回路904は、これらの情報に基づいて、従来の符号論理回路を使用して結果の符号ビットRsを決定することができる。例えば、DFMA演算の場合、符号ビットSpとCsとが同じであるならば、結果もその符号を有する。SpとCsとが異符号であるならば、仮数経路516における加算器804が、(Am*Bm)−C_alignを計算する。Am*BmがC_alignより大きい場合、加算器804は正の結果Sumを計算し、積の符号Spを選択すべきである。Am*BmがC_alignより小さい場合、加算器804は負の結果Sumを計算し、符号Csを選択すべきである。加算器804の出力SumのMSBは、結果の符号を示しており、この選択を駆動する目的に使用することができる。結果Sumが0である場合、R_ZERO信号がアサートされ、最終符号回路904は、いずれか適切な符号を選択することができる(fp64形式では0は正又は負のどちらでもよい)。DFMA以外の演算の場合、最終符号回路904は、最終的な符号としていずれかのオペランドの符号を通過させることができる。
【0108】
E.出力セクション
[0119]図10は、本発明の実施形態によるDFMAユニット320の出力セクション522のブロック図である。
【0109】
[0120]出力マルチプレクサ制御論理回路1002は、指数経路518(図7)からのアンダーフロー/オーバーフロー(U/O)信号と、オペランド準備ブロック514(図6)からのR_test信号及びSPC信号と、進行中の演算のタイプを示すOPCTL信号とを受け取る。出力マルチプレクサ制御論理回路1002は、これらの情報に基づいて、仮数部選択マルチプレクサ1004及び指数選択マルチプレクサ1006のための選択制御信号を生成する。さらに、出力マルチプレクサ制御論理回路1002は、条件コード信号COND(例えば、オーバーフロー又はアンダーフロー条件、NaN条件、又はその他の条件を示すことができる)を生成する。いくつかの実施形態においては、条件コードは、DSET演算時にブール結果を伝える目的にも使用される。
【0110】
[0121]仮数部選択マルチプレクサ1004は、仮数経路516からの結果の仮数部Rmと、最大52ビットの整数出力(D2I演算時に使用される)と、複数の特殊値とを受け取る。特殊値としては、一実施形態においては、1の52ビットフィールド(D2I演算において64ビットの最大整数を表現するために使用される)、0の52ビットフィールド(0.0又は1.0が結果である場合に使用される)、52ビットフィールド0x0_0000_8000_0000(D2I演算において32ビットの最小整数を表現するために使用される)、先頭が1である52ビットフィールド(内部で生成されるクワイエット型NaNを表すために使用される)、max_int32値(例:0x7fff_ffff_ffff_ffff)(D2I演算において32ビットの最大整数を表現するために使用される)、クワイエット型NaN値(オペランド準備ブロック514からの、NaNである入力オペランドを通過させるために使用される)、min_denorm値(例:最後のビット位置が1)(アンダーフローの場合に使用される)が挙げられる。演算に応じて、及びオペランドのいずれか又は結果が特殊数であるかに応じて、入力のいずれかを選択することができる。
【0111】
[0122]指数選択マルチプレクサ1006は、指数経路518からの結果の指数Reと、最大11個の整数ビット(整数形式の出力の場合のMSB)と、複数の特殊値とを受け取る。特殊値としては、一実施形態においては、0x3ff(fp64における1.0の指数)、0x000(非正規及び0.0の場合の指数)、0x7fe(正規数のfp64最大指数)、0x7ff(fp64 NaN又はfp64無限大の結果の場合)が挙げられる。演算に応じて、及びオペランドのいずれか又は結果が特殊数であるかに応じて、入力のいずれかを選択することができる。
【0112】
[0123]連結ブロック1008は、符号ビットRsと、マルチプレクサ1004によって選択される仮数部ビットと、マルチプレクサ1006によって選択される指数ビットとを受け取る。連結ブロック1008は、結果を、(例えば、IEEE754規格に従って符号、指数、仮数部の順序に)フォーマッティングし、64ビットの出力信号OUTを提供する。
【0113】
F.オペランドのバイパス経路又は通過経路
[0124]DFMAユニット320は、いくつかの実施形態においては、オペランドを修正せずに様々な回路ブロックを伝搬させることのできるバイパス経路又は通過経路を提供する。例えば、いくつかの演算時、乗算器802は、入力(例:Am)に1.0を乗算して、入力Amを実質的に通過させる。Amに1.0を乗算するのではなく、乗算器802の周囲に入力Amのバイパス経路を提供することができる。このバイパス経路は、Amが加算器804への入力に正しいタイミングで到着するように、乗算器802と同じ数のクロックサイクルを消費することが有利である。しかしながら、乗算器802がバイパスされるとき、乗算器802を電力遮断状態又は低電力状態に設定することができ、これによって、回路面積が少し増大することと引き換えに電力消費量が低減する。同様に、いくつかの演算時、加算器804を使用して入力(例:C_align)に0を加算し、入力C_alignを実質的に通過させる。特に、加算器804の出力Sum及び〜Sumのどちらをマルチプレクサ806によって選択すべきかが事前に既知である演算の場合、C_alignに0を加算するのではなく、加算器804の周囲に入力C_alignのためのバイパス経路を提供することができる。入力C_alignを、Sumの経路及び〜Sumの経路のうちの正しい経路にバイパスさせることができる。この場合も、バイパス経路は、タイミングが影響を受けないように、加算器804と同じ数のクロックサイクルを消費することが有利である。しかしながら、加算器804をバイパスする演算においては、加算器804を電力遮断状態又は低電力状態に設定することができるので、電力消費量を低減することができる。
【0114】
[0125]従って、(後の)第III節における演算の説明では、様々なオペランドを特定の回路ブロックにバイパス又は通過させることを言及している。このことは、オペランドに影響を与えない演算(例:0を加算する、1.0を乗算する)を実行するよう介在する回路ブロックを制御して、当該回路ブロックへの入力がそのまま出力として通過させることによって、又は、バイパス経路を使用することによって、達成することができることを理解されたい。さらには、ある回路ブロックの周囲のバイパス経路又は通過経路をたどるとき、以降の回路ブロックにおいては、引き続きそのバイパス経路を必ずしもたどらなくてよい。さらには、一つの回路ブロックにおいて修正された値は、以降の回路ブロックの周囲のバイパス経路をたどることができる。演算時に特定の回路ブロックがバイパスされる場合、その回路ブロックを電力遮断状態に設定して電力消費量を低減する、又は、通常に動作させて、例えば選択マルチプレクサ又はその他の回路を使用することによってその出力を無視させることができる。
【0115】
[0126]本明細書に説明したDFMAユニットは例示を目的としており、変形及び変更が可能であることが理解されるであろう。本明細書に説明した回路ブロックの多くは、従来の機能を提供し、この技術分野において公知である技術を使用して実施することができる。従って、これらのブロックの詳しい説明は省略した。演算回路をブロックに分割する方式は変更することができ、ブロックを組み合わせる、或いはブロックを変更することができる。さらに、パイプラインステージの数と、特定の回路ブロック又は演算を特定のパイプラインステージに割り当てる方式も、変更する、又は別の形態をとることができる。特定の実施形態における回路ブロックの選択及び編成は、サポートする一連の演算に依存し、演算の可能な組合せのそれぞれにおいて、本明細書に説明したブロックの全てが必ずしも要求されるわけではないことが、当業者には認識されるであろう。
【0116】
III.DFMAユニットの演算
[0127]DFMAユニット320は、図4に一覧した演算の全てを、上述した回路ブロックを利用して、回路面積の面で効率的にサポートすることが好適である。従って、DFMAユニット320の動作は、少なくともいくつかの側面において、実行される演算に依存する。以下の節では、DFMAユニット320を使用して、図4に一覧した演算のそれぞれを実行する方法について説明する。
【0117】
[0128]なお、浮動小数点例外(例えば、オーバーフロー条件、アンダーフロー条件を含む)は、余分な処理サイクルを必要とすることなくDFMAユニット320の中で扱われることに留意されたい。例えば、入力オペランドがNaN又はその他の特殊数である演算は、図5のオペランド準備ブロック514において検出され、出力セクション522において適切な特殊数出力が選択される。NaN、アンダーフロー、オーバーフロー、又はその他の特殊数が演算の過程において生じた場合、その条件が検出され、出力セクション522において適切な特殊数出力が選択される。
【0118】
A.融合型積和演算(DFMA)
[0129]DFMA演算の場合、DFMAユニット320は、fp64形式のオペランドA0,B0,及びC0と、DFMA演算を実行することを示すオペコードと、を受け取る。NaN回路612,614,616は、選択されるオペランドのいずれか一つ以上がNaNであるかを判定する。絶対値/符号反転回路618,620,622は、オペランドのそれぞれについて、必要な場合に符号ビットを反転する(又は反転しない)。オペランド選択マルチプレクサ632,634,及び636は、それぞれの絶対値/符号反転回路618,620,及び622の出力を選択し、これらの出力を特殊数検出回路638,640,642に提供する。特殊数検出回路638,640,及び642は、オペランドのそれぞれが特殊数であるかを判定し、該当する特殊数SPC信号を経路524上に生成する。特殊数検出回路638,640,及び642は、仮数Am,Bm,及びCm(正規数の場合は先頭に1が付加されており、非正規数の場合は先頭に0が付加されている)を仮数経路516に提供し、指数Ae,Be,及びCeを指数経路518に提供し、符号ビットAs,Bs,及びCsを符号経路520に提供する。
【0119】
[0130]A/B比較回路624、fp32抽出回路626、及び、U/S整数抽出回路628はDFMA演算においては使用されず、これらの回路は、必要に応じて、電力遮断状態又は低電力状態に設定され得る。
【0120】
[0131]符号経路520においては、積/和回路902が、積A*Bが正であるか負であるかを符号ビットAs及びBsから判定し、積の符号Spと符号ビットCsとを比較する。積とCsとが異符号を有する場合、異符号を示すためにSignCTL信号がアサートされ、積とCsとが同符号を有する場合、SignCTL信号がデアサートされる。
【0121】
[0132]指数経路518(図7)においては、指数計算ブロック702が、指数Ae,Be,及びCeを受け取る。指数計算ブロック702は、指数Aeと指数Beとを加算し、積A*Bのブロック指数を求め、次いで、この積のブロック指数と指数Ceのうちの大きい方を、結果のブロック指数BLEとして選択する。さらに、指数計算ブロック702は、積のブロック指数と指数Ceのうちの小さい方を、二つのうちの大きい方から減算し、対応するシフト制御信号Sh_Cを生成する。アンダーフロー論理回路713は、ブロック指数BLEがアンダーフロー又は潜在的なアンダーフローに対応しているかを検出し、アンダーフロー信号U_fp64を生成する(DFMA演算時にはU_fp32信号は使用されない。)。
【0122】
[0133]符号反転ブロック708は、オペランド準備ブロック514からの仮数Cmと、符号経路520からのSignCTL信号とを受け取る。SignCTL信号がアサートされている場合、符号反転ブロック708は、相対的マイナス符号を考慮するために仮数Cmを反転し、反転されたCmをシフト回路706に提供する。アサートされていない場合、符号反転ブロック708は、Cmを修正せずにシフト回路706に提供する。
【0123】
[0134]シフト回路706は、符号反転ブロック708によって提供された仮数Cmを、シフト制御信号Sh_Cに対応する量だけ右シフトし、シフトされた仮数C_Shiftを選択マルチプレクサ712に提供する。選択マルチプレクサ712は、シフトされた仮数C_Shiftを選択し、このシフトされた仮数をオペランドC_alignとして仮数経路516に提供する。
【0124】
[0135]仮数経路516(図8)においては、乗算器802が、106ビットの積Am*Bmを計算し、この積を168ビットの加算器804に提供する。乗算器802の動作は、指数計算ブロック702の動作と並列に行うことができる。
【0125】
[0136]加算器804は、指数経路518の選択マルチプレクサ712からオペランドC_alignを受け取り、入力Am*BmとC_alignとを加算してSum及び〜Sumを求める。SumのMSBに基づいて、マルチプレクサ806は、これら出力の一方を最終的な和として選択する。Sumが正である(MSBが0)ならばSumが選択され、Sumが負である(MSBが1)ならば〜Sumが選択される。LZD回路808及び810は、それぞれ、〜Sum及びSumにおける先頭の0の数を求める。マルチプレクサ812は、LZD出力の一方を先頭の0の数として選択し、先頭ゼロ信号BL_Shを指数経路518と正規化論理回路818とに提供する。
【0126】
[0137]マルチプレクサ806によって選択される最終的な和Sは、ゼロ検出回路814にも提供される。ゼロ検出回路814は、最終的な和が0である場合、符号経路520へのR_ZERO信号をアサートし、そうでない場合、R_ZERO信号をアサートしない。
【0127】
[0138]正規化論理回路818は、U_fp64信号がアンダーフローを示していない限りは、先頭ゼロ信号を正規化信号Lshiftとして選択し、U_fp64信号がアンダーフローを示している場合、仮数は指数1に対応する位置までシフトされるのみであり、従って、結果は非正規形式において表現される。シフト回路816は、選択された和SをLshift信号に応答して左シフトし、正規化された和Snを生成する。プラス1加算器822は、正規化された和Snに1を加算する。丸め論理回路820は、(OPCTL信号によって指定される)丸めモードと、(経路821上の)正規化された和SnのLSBとを使用して、正規化された和を切り上げるべきであるかを判定する。切り上げるべきである場合、丸め論理回路820は、加算器822からの出力Sn+1が選択されるように、選択マルチプレクサ824を制御する。そうでない場合、選択マルチプレクサ824は、正規化された和Snを選択する。選択マルチプレクサ824は、選択された結果Rmを出力セクション522に提供する。いくつかの実施形態においては、選択マルチプレクサ824は、結果の仮数から先頭ビット(正規数の場合は1)をドロップする。
【0128】
[0139]丸め演算と並列に、指数経路518(図7)は、結果の指数Reを計算する。具体的には、減算ブロック720が、指数計算ブロック702からのブロック指数BLEと、仮数経路516からのブロックシフト信号BL_Shとを受け取る。減算ブロック720は、これら二つの入力を減算し、その結果EDIFを、アンダーフロー/オーバーフロー論理回路722と、プラス1加算器724と、選択マルチプレクサ726とに提供する。アンダーフロー/オーバーフロー論理回路722は、結果のMSBを使用して、アンダーフロー又はオーバーフローが発生したかを判定し、アンダーフロー又はオーバーフローの存在の有無を反映するU/O信号を生成する。選択マルチプレクサ726は、このU/O信号に基づいて、減算結果EDIFと、プラス1加算器724の出力との間での選択を行う。選択された値は、結果の指数Reとして、U/O信号と共に出力セクション522に提供される。
【0129】
[0140]丸め演算と並列に、符号経路520(図9)における最終符号回路904は、積/和回路902によって判定された符号と、仮数経路516から受け取るR_ZERO信号及び和のMSBと、オペランド準備ブロック514から受け取る特殊数SPC信号とに基づいて、最終的な符号Rsを決定する。
【0130】
[0141]出力セクション522(図10)は、仮数経路516からの結果の仮数Rmと、指数経路518からの結果の指数Reと、符号経路520からの結果の符号Rsと、オペランド準備ブロック514からの特殊数SPC信号と、指数経路518からのU/O信号とを受け取る。SPC信号及びU/O信号に基づいて、出力マルチプレクサ制御論理回路1002は、仮数部マルチプレクサ1004のための制御信号と、指数マルチプレクサ1006のための制御信号とを生成する。さらに、出力マルチプレクサ制御論理回路1002は、様々な条件コードCOND(例えば、結果がオーバーフロー、アンダーフロー、又はNaNであるかを示す)を生成する。
【0131】
[0142]仮数部マルチプレクサ1004は、正規数及び非正規数の場合、仮数部Rmを選択する。アンダーフローの場合、丸めモードに応じて、0又は仮数部min_denormが選択される。オーバーフロー(無限大)の場合、仮数部0x0_0000_0000_0000が選択される。いずれかの入力オペランドがNaNである場合、クワイエット型NaNの仮数部が選択される。演算中にNaNが発生した場合、内部(クワイエット型)NaNの仮数0x8_0000_0000が選択される。
【0132】
[0143]指数マルチプレクサ1006は、正規数の場合、結果の指数Reを選択する。非正規数及びアンダーフローの場合、指数0x000が選択される。無限大又はNaNの場合、最大指数0x7ffが選択される。
【0133】
[0144]連結ブロック1008は、選択された仮数部と、選択された指数と、符号Rsとを受け取り、fp64の最終的な結果OUTを生成する。条件コードは必要に応じて設定され得る。
【0134】
[0145]なお、DFMAユニット320では、全てのDFMA演算が、オーバーフロー又はアンダーフローにかかわらず同数のサイクルで完了することに留意されたい。さらに、DFMAユニット320は、IEEE754規格に従って、浮動小数点算術演算におけるオーバーフロー/アンダーフロー時の予測デフォルト動作(expected default overflow/underflow behavior)を実施する。即ち、適切な結果OUTが返され、オーバーフロー/アンダーフロー条件を示すように、(条件コードCONDにおける)ステータスフラグがセットされる。いくつかの実施形態においては、これらの条件を扱うためのユーザ定義のトラップが実施されてもよく、トラップを発生させるべきであるかを判定するよう、条件コードCONDを使用することが可能である。
【0135】
B.乗算
[0146]乗算(DMUL)は、オペランドCを0にセットして、DFMAユニット320が、A*B+0.0を計算することで、上述したDFMA演算と同じように実施することが可能である。一実施形態においては、オペコードがDMUL演算を示している場合に、選択マルチプレクサ636(図6)を使用して、入力オペランドCをfp64の値0に置き換えることができる。
【0136】
C.加算
[0147]加算(DADD)は、オペランドBを1.0にセットして、DFMAユニット320がA*1.0+Cを計算することで、上述したDFMA演算と同じように実施することが可能である。一実施形態においては、オペコードがDADD演算を示している場合に、選択マルチプレクサ634(図6)を使用して、入力オペランドBをfp64の値1.0に置き換えることができる。
【0137】
D.DMAX及びDMIN
[0148]DMAX演算又はDMIN演算の場合、オペランド準備ブロック514(図6)が、オペランドA及びオペランドBを受け取る。NaN回路612及び614が、選択されたオペランドのいずれか一方又は双方がNaNであるかを判定する。絶対値/符号反転回路618,620が、必要に応じて符号ビットを反転する(又は反転しない)。
【0138】
[0149]A/B比較回路624は、絶対値/符号反転回路618,620からオペランドA及びオペランドBを受け取り、例えば、これらのオペランドがあたかも整数であるかのようにAからBを減算することによって、比較を実行する。この減算に基づいて、A/B比較回路624は、AがBよりも大きい、AがBよりも小さい、又はAがBに等しいかを示すCOMP信号を生成する。COMP信号は制御論理回路630に提供される。制御論理回路630は、対応するR_Test信号を生成し、さらに、選択マルチプレクサ632,634,及び636用の選択信号を生成する。
【0139】
[0150]具体的には、DMAX演算の場合、オペランドAのマルチプレクサ632は、AがBより大きければオペランドAを選択し、AがBより小さければオペランド1.0を選択し、一方で、オペランドBのマルチプレクサ634は、BがAより大きければオペランドBを選択し、BがAより小さければオペランド1.0を選択する。DMIN演算の場合、オペランドAのマルチプレクサ632は、AがBより小さければオペランドAを選択し、AがBより大きければオペランド1.0を選択し、一方で、オペランドBのマルチプレクサ634は、BがAより小さければオペランドBを選択し、BがAより大きければオペランド1.0を選択する。DMAX及びDMINのいずれの場合も、A=Bである特殊な場合は、マルチプレクサ632がオペランドAを選択する一方でマルチプレクサ634がオペランド1.0を選択するように制御することによって、或いは、マルチプレクサ632がオペランド1.0を選択する一方でマルチプレクサ634がオペランドBを選択するように制御することによって、扱うことができる。いずれの場合にも、オペランドCのマルチプレクサ636は、オペランド0.0を選択するように動作することが好適である。
【0140】
[0151]特殊数検出回路638,640,及び642は、オペランドが特殊数であるかを判定し、該当する特殊数SPC信号を経路524上に生成する。特殊数検出回路638,640,及び642は、仮数Am,Bm,及びCm(正規数の場合は先頭に1が付加されており、非正規数の場合は先頭に0が付加されている)を仮数経路516に提供し、指数Ae,Be,及びCeを指数経路518に提供し、符号ビットAs,Bs,及びCsを符号経路520に提供する。
【0141】
[0152]fp32抽出回路626及び符号なし/符号付き整数抽出回路628は、DMAX演算又はDMIN演算の場合には使用されず、これらの回路は、必要に応じて電力遮断状態又は低電力状態に設定され得る。
【0142】
[0153]仮数経路516、指数経路518、及び符号経路520は、DFMA演算について上述したように動作する。DMAX演算の場合、仮数経路516、指数経路518、及び符号経路520は、max(A,B)*1.0+0.0を計算する。DMIN演算の場合、仮数経路516、指数経路518、及び符号経路520は、min(A,B)*1.0+0.0を計算する。従って、正規数の場合、Rm,Re,及びRsは、所望の結果の仮数、指数、及び符号に対応する。
【0143】
[0154]出力セクション522(図10)は、特殊数を扱う。具体的には、DMAX演算及びDMIN演算の結果は、NaNオペランドに対して定義されておらず、結果はNaN値にセットされ得る。出力マルチプレクサ制御論理回路1002は、結果をNaNとするべきかを、特殊数SPC信号を使用して判定する。NaNとするべきである場合、仮数部マルチプレクサ1004がクワイエット型NaN入力を選択し、指数マルチプレクサが0x7ffを選択する。そうでない場合、結果Rm及び結果Reが選択される。条件コードは必要に応じて設定され得る。
【0144】
[0155]代替実施形態においては、仮数経路516、指数経路518、及び符号経路520のコンポーネントのいくつか又は全てをバイパスすることができる。バイパスされるコンポーネントは低電力状態に設定され得る。バイパス経路が、仮数経路516、指数経路518、及び符号経路520のうちの最も長い経路と同数のパイプラインステージを占めるように、バイパス経路に様々な遅延回路(ラッチなど)を含めてもよい。これにより、DFMAユニット320における全ての演算について、完了に要するサイクルが同数となり、これにより、命令発行論理回路が単純化される。
【0145】
E.DSET
[0156]DSET演算では、DMAX及びDMINと同様に、オペランド準備ブロック514におけるA/B比較回路624(図6)が使用される。DSETでは、DMAX及びDMINとは異なり、入力オペランドの一方が返されるのではなく、テストされた条件が満たされているかを示すブール値が返される。
【0146】
[0157]DSET演算の場合、オペランド準備ブロック514(図6)が、オペランドA及びオペランドBを受け取る。NaN回路612及び614は、選択されたオペランドのいずれか一方又は双方がNaNであるかを判定する。絶対値/符号反転回路618,620は、必要な場合に符号ビットを反転する。
【0147】
[0158]A/B比較回路624は、絶対値/符号反転回路618,620からオペランドA及びオペランドBを受け取り、例えば、これらのオペランドがあたかも整数であるかのようにAからBを減算することによって、比較を実行し、それぞれの符号ビットを考慮する。A/B比較回路624は、この減算に基づいて、AがBよりも大きい、AがBよりも小さい、又はAがBに等しいかを示すCOMP信号を生成する。COMP信号は制御論理回路630に提供される。制御論理回路630は、対応するR_Test信号を生成し、さらに、Aマルチプレクサ632、Bマルチプレクサ634、及びCマルチプレクサ636用の選択信号を生成する。DSET演算の結果はブール値であるため、一実施形態では、三つのマルチプレクサ632,634,636の全てがゼロオペランドを選択する。別の実施形態においては、マルチプレクサ632及び634がオペランドA及びオペランドBを選択する。特殊数検出回路638及び640は、これらのオペランドが特殊数であるかを判定し、該当する特殊数SPC信号を経路524上に生成する。
【0148】
[0159]fp32抽出回路626及び符号なし/符号付き整数抽出回路628は、DSET演算の場合には使用されず、これらの回路は、必要に応じて電力遮断状態又は低電力状態に設定され得る。
【0149】
[0160]仮数経路516、指数経路518、及び符号経路520は、DFMA演算について上述したように動作するか、又は、これらの一部又は全体をバイパスすることができる。バイパスされるコンポーネントは低電力状態に設定され得る。上述したように、バイパス経路が、仮数経路516、指数経路518、及び符号経路520のうちの最も長い経路と同じ数のパイプラインステージを占めるように、バイパス経路に様々な遅延回路(ラッチなど)を含めることができる。これにより、DFMAユニット320における全ての演算について、完了に要するサイクルが同数となり、これにより、命令発行論理回路が単純化される。
【0150】
[0161]出力セクション522(図10)は、特殊数を扱う。具体的には、IEEE754規格においては、A又はB(又は双方)がNaNであるならば、A及びBは順序付けできない。出力マルチプレクサ制御論理回路1002は、AがBよりも大きい、AがBよりも小さい、又はAがBに等しいかを示すR_Test信号と、A又はBがNaNであるかを示す特殊数SPC信号と、要求されている特定のテスト演算を示すOPCTL信号とを受け取る。出力マルチプレクサ制御論理回路1002は、R_Test信号及びSPC信号を使用して、要求されたテストが満たされているかを判定する。一実施形態においては、DSET演算の結果を条件コードとして提供し、結果OUTを無視する。その場合、出力マルチプレクサ制御論理回路1002は、結果を示すように条件コードCONDを設定し、オプションとして、出力OUTの仮数部及び指数を選択することができる。別の実施形態においては、テスト結果を反映するように出力OUTを設定することができ、この場合、出力マルチプレクサ制御論理回路1002は、テストが満たされているならば論理真に対応する64ビット値が選択され、テストが満たされていないならば論理偽に対応する64ビット値が選択されるように、仮数部マルチプレクサ1004及び指数マルチプレクサ1006を動作させる。
【0151】
F.形式変換
[0162]いくつかの実施形態においては、DFMAユニット320は、倍精度形式とそれ以外の形式との間での形式変換演算もサポートする。以下に例を説明する。
【0152】
1.fp32からfp64(F2D)
[0163]F2D演算の場合、fp32入力オペランドAが、対応するfp64数に変換される。特殊数入力は適切に扱われる。例えば、fp32無限大又はfp32 NaNは、fp64無限大又はfp64 NaNに変換される。全てのfp32非正規数は、fp64の正規数に変換することができる。
【0153】
[0164]オペランド準備ブロック514(図6)は、fp32のオペランドAを受け取る。絶対値/符号反転回路618は、オペランドAを修正することなくfp32抽出ブロック626に通過させる。fp32抽出ブロック626は、オペランドAに対してfp64形式への最初の上位変換を実行する。具体的には、fp32抽出ブロック626は、8ビットの指数を取り出し、1023−127=896を加算して、fp64形式の正しいバイアスを有する11ビットの指数を生成する。23ビットの仮数には、末尾の0がパディングされる。さらに、fp32抽出ブロック626は、オペランドAがfp32の特殊数(例:無限大、NaN、0、又は非正規)であるかを判定し、その情報を、経路644を介して特殊数検出回路642に提供する。さらに、fp32抽出ブロック626は、オペランドの符号を反転する、或いはオペランドに絶対値を適用することもできる。
【0154】
[0165]オペランドCのマルチプレクサ636は、fp32抽出ブロック626によって提供される上位変換されたオペランドを選択し、オペランドAのマルチプレクサ632及びオペランドBのマルチプレクサ634は、ゼロオペランドを選択する。特殊数検出回路642は、オペランドがfp32非正規数でない限りは、仮数に先頭の1を付加する。さらに、特殊数検出回路642は、fp32非正規数が正規数として特定されている場合を除き(全てのfp32非正規数はfp64において正規数として表現することができるため)、fp32抽出ブロック626によって提供される特殊数情報を、自身の特殊数SPC信号として使用する。
【0155】
[0166]仮数経路516及び指数経路518は、DFMA演算について上述したように動作して、fp64形式において0.0*0.0+Cを計算する。仮数経路516及び指数経路518における正規化要素は、上位変換されたfp64オペランドを正規化する。代替実施形態においては、図8を参照し、指数経路518からの位置合わせ後の仮数C_alignを、仮数経路516における加算器804の周囲をマルチプレクサ806のSum入力にバイパスさせることができる。ここで、乗算器802及び加算器804を低電力状態に設定することができる。符号経路520は符号ビットCsを通過させることが好適である。
【0156】
[0167]出力セクション522(図10)においては、入力オペランドがfp32無限大、fp32 NaN、又はfp32 0であったことを特殊数SPC信号が示していない限りは、正規化されたfp64の結果(Rm,Rs,Re)が選択される。入力オペランドがfp32無限大であった場合、出力マルチプレクサ制御論理回路1002は、fp64無限大の仮数部(0x0_0000_0000_0000)が選択されるように仮数部マルチプレクサ1004を動作させ、fp64無限大の指数(0x7ff)が選択されるように指数マルチプレクサ1006を動作させる。入力オペランドがfp32 NaNであった場合、出力マルチプレクサ制御論理回路1002は、fp64クワイエット型NaNの仮数部が選択されるように仮数部マルチプレクサ1004を動作させ、fp64 NaNの指数(0x7ff)が選択されるように指数マルチプレクサ1006を動作させる。入力オペランドがfp32 0であった場合、出力マルチプレクサ制御論理回路1002は、fp64 0の仮数部(0x0_0000_0000_0000)が選択されるように仮数部マルチプレクサ1004を動作させ、fp64 0の指数(0x000)が選択されるように指数マルチプレクサ1006を動作させる。条件コードは、必要に応じて設定され得る。
【0157】
2.整数からfp64(I2D)
[0168]I2D演算の場合、整数(u64,s64,u32,又はs32形式)がfp64形式に変換される。オペランド準備ブロック514(図6)は、64ビットの整数オペランドCを受け取る。32ビット整数形式の場合、32個の先頭の0を付加することができる。絶対値/符号反転回路622は、オペランドCを修正することなくU/S抽出ブロック628に通過させる。U/S抽出ブロック628は、オペランドCに対してfp64形式への最初の上位変換を実行する。具体的には、抽出ブロック628は、オペランドCにおける先頭の1の位置を(例えばプライオリティエンコーダを使用して)判定する。11ビットの指数は、指数フィールドを1086(263に対応する)に初期化することによって求められる。32ビット形式の入力の場合、先頭の1がドロップされ、仮数に末尾の0がパディングされて、52ビットの仮数部が生成される。64ビット形式の入力の場合、必要に応じて仮数が53ビットに切り捨てられ、先頭の1がドロップされる。また、ガードビット及びラウンドビットが必要に応じて維持されてもよい。
【0158】
[0169]さらに、U/S抽出ブロック628は、入力オペランドが0であるかを判定し、特殊数検出回路642用の対応の制御信号を生成する。0以外の特殊数(非正規、無限大、及びNaN)は、I2D演算時には発生せず、検出する必要がない。
【0159】
[0170]オペランドCのマルチプレクサ636は、U/S抽出ブロック628によって提供される上位変換されたオペランドを選択する。オペランドAのマルチプレクサ632とオペランドBのマルチプレクサ634のそれぞれは、ゼロオペランドを選択する。特殊数検出回路642は、U/S抽出ブロック628によって提供されるゼロ情報を使用して、入力オペランドが0であるかを示す特殊数SPC信号を生成する。
【0160】
[0171]仮数経路516及び指数経路518は、DFMA演算について上述したように動作し、0.0*0.0+Cを計算する。仮数経路516及び指数経路518における正規化要素は、上位変換されたfp64オペランドを正規化する。代替実施形態においては、図8を参照し、指数経路518からの位置合わせ後の仮数C_alignを、仮数経路516における加算器804の周囲をマルチプレクサ806のSum入力にバイパスさせることができる。乗算器802及び加算器804は低電力状態に設定され得る。符号経路520は符号ビットCsを通過させることが好適である。
【0161】
[0172]出力セクション522(図10)においては、入力オペランドが整数0であったことを特殊数SPC信号が示していない限りは、正規化されたfp64の結果(Rm,Rs,Re)が選択される。入力オペランドが整数0であった場合、出力マルチプレクサ制御論理回路1002は、fp64 0の仮数部(0x0_0000_0000_0000)が選択されるように仮数部マルチプレクサ1004を動作させ、fp64 0の指数(0x000)が選択されるように指数マルチプレクサ1006を動作させる。必要に応じて条件コードが設定され得る。
【0162】
3.fp64からfp32(D2F)
[0173]fp64は、fp32よりも広い範囲の浮動小数点数をカバーしているので、fp64からfp32への(D2F)変換では、fp32値におけるオーバーフロー及びアンダーフローを検出することが要求される。
【0163】
[0174]D2F演算の場合、オペランド準備ブロック514(図6)にオペランドCが提供される。絶対値/符号反転回路622は、必要に応じて絶対値又はオペランドの符号反転を実行し、オペランドCをオペランドCのマルチプレクサ636に渡す。オペランドCのマルチプレクサ636は、オペランドCを選択し、特殊数検出回路642に提供する。特殊数検出回路642は、fp64非正規数、fp64 0、fp64無限大、又はfp64 NaNを検出し、対応するSPC信号を出力セクション522に提供する。選択マルチプレクサ632及び634は、オペランド0.0を選択する。
【0164】
[0175]指数経路518(図7)においては、指数計算ブロック702は、fp64指数を897だけマイナス方向にバイアスし、対応するfp32の指数を求める。fp32の指数がアンダーフローする場合、指数計算ブロック702は、アンダーフローが排除されるようにCの仮数を右シフトするSh_C信号を生成する(218ビット以上のシフトが必要である場合、Cの仮数は0になる)。シフト回路706は、Sh_C信号に従ってCの仮数を右シフトする。結果はマルチプレクサ712によって選択され、位置合わせ後の仮数C_alignとして仮数経路516に提供される。アンダーフロー論理回路713は、fp32アンダーフローを検出し、U_fp32信号を生成する。
【0165】
[0176]仮数経路516(図8)においては、乗算器802が、積0.0*0.0を計算する(又はバイパスされる)。この積(0)は、加算器804によって仮数C_alignに加算される。マルチプレクサ806は、結果Sumを選択する(入力が符号・絶対値形式であるため)。0の結果は、回路814によって検出される。0以外の結果は、DFMA演算に関して上述したように正規化される。丸め論理回路820を使用して、切り上げるかを判定することができる。なお、結果は23ビットのfp32仮数であるため、プラス1加算器822は、(53番目ではなく)24番目のビット位置に1を加算する必要があることに留意されたい。
【0166】
[0177]出力セクション522(図10)は、結果を組み立てる。fp32の23ビットの仮数部は、52ビットフィールドのRmにおいて提供される。出力マルチプレクサ制御論理回路1002は、結果がfp32の正規数ではない場合を除き、Rmが選択されるように仮数部マルチプレクサ1004を制御する。fp32 0又はfp32無限大である場合、0の仮数0x00000_0000_0000が選択され、fp32 NaNである場合、クワイエット型fp32 NaNの仮数が選択される。fp32非正規数の場合、Rmを使用することができる。
【0167】
[0178]8ビットのfp32の指数は、11ビットの指数フィールドにおいて提供される。出力マルチプレクサ制御論理回路1002は、結果がfp32の正規数ではない場合を除き、Reが選択されるように指数マルチプレクサ1004を制御する。fp32非正規数又はfp32 0である場合、0の指数0x000が選択される。fp32無限大又はfp32 NaNである場合、fp32の最大指数0x7ffが選択される。
【0168】
[0179]連結ブロック1008は、Rm及びReを、64ビットの出力フィールドのうちの31ビットにパックし、符号ビットRsを先頭に付加する。11ビットの指数における3個のMSBがドロップされ、52ビットの仮数部における29個のLSBがドロップされる。fp32の結果は、例えば、必要に応じて64ビットフィールドのMSB又はLSBにおいて位置合わせすることができる。必要に応じて条件コードを設定することができる。
【0169】
4.fp64から整数(D2D)
[0180]D2I演算の場合、オーバーフロー及びアンダーフローが検出される。オーバーフローは最大整数値にセットされ、アンダーフローは0にセットされる。
【0170】
[0181]変換するオペランドは、fp64形式におけるオペランドCとして提供される。絶対値/符号反転回路622は、必要に応じて絶対値又はオペランドの符号反転を実行し、オペランドCをオペランドCのマルチプレクサ636に渡す。オペランドCのマルチプレクサ636は、オペランドCを選択し、特殊数検出回路642に提供する。特殊数検出回路642は、fp64非正規数、fp64 0、fp64無限大、又はfp64 NaNを検出し、対応するSPC信号を出力セクション522に提供する。選択マルチプレクサ632及び634は、オペランド0.0を選択する。
【0171】
[0182]指数経路518(図7)においては、指数計算ブロック702は、2進小数点を整数位置に合わせるためにCmをシフトすべき量を、指数Ceを使用して求め、対応するSh_C信号を生成する。一実施形態においては、指数計算ブロック702は、指数のバイアスを取り除き、仮数部の幅と、使用される整数形式と、32ビット形式の結果を64ビットフィールドにおいて表現する方式(例:32個のMSB又は32個のLSBを使用する)とを考慮する。さらに、変換後の整数形式において結果がオーバーフローするか、又はアンダーフローするかを、指数Ceを使用して判定する。オーバーフロー又はアンダーフローする場合、対応するオーバーフロー信号又はアンダーフロー信号(図示していない)が、出力セクション522における出力マルチプレクサ制御論理回路1002(図10)に送られることが好適である。
【0172】
[0183]シフト回路706は、Cmを量C_Shiftだけシフトさせ、このC_Shift信号がマルチプレクサ712によってC_align信号として選択される。
【0173】
[0184]仮数経路516(図8)においては、乗算器802が、結果0.0を加算器804に提供する。加算器804は、0.0をC_alignに加算し、Cが正であるか負であるかに応じて、Sum又は〜Sumが選択される。シフター816は、この結果をシフトしないことが好適である。整数フォーマッティングブロック826は、結果を、11ビットのMSBフィールドint_Mと、53ビットのLSBフィールドint_Lとに分ける。
【0174】
[0185]出力セクション522(図10)においては、出力マルチプレクサ制御論理回路1002が、オーバーフロー、アンダーフロー、又は特殊数オペランドである場合を除いて、結果のint_L及び結果のint_Mがそれぞれ選択されるように仮数部マルチプレクサ1004及び指数マルチプレクサ1006を制御する。オーバーフローの場合、出力形式(u32,s32,u64,又はs64)における最大整数が選択され、アンダーフローの場合、0が選択される。条件コードは、必要に応じて設定され得る。
【0175】
IV.更なる実施形態
[0186]本発明について、特定の実施形態に関連して説明してきたが、膨大な修正・変更が可能であることが当業者には認識されるであろう。例えば、DFMAユニットは、より多くの機能、より少ない機能、又は異なる機能が、組合せとしてサポートされるように実施されてもよく、或いは、任意の形式又は任意の形式の組合せにおけるオペランド及び結果がサポートされるように実施されてもよい。
【0176】
[0187]本明細書において説明した様々なバイパス経路及び通過経路は、異なる形態をとることもできる。一般的に、回路ブロックの周囲のバイパス経路が説明してある箇所では、その経路を、そのブロックにおける恒等演算(すなわち、オペランドに影響を与えない演算(例:0を加算する))に置き換えることができる。ある演算時にバイパスされる回路ブロックは、アイドル状態(例えば、低電力状態)に設定することができ、或いは、通常に動作させ、(例えば、選択マルチプレクサ又はその他の回路の動作によって)下流のブロックが結果を無視するようにすることができる。
【0177】
[0188]DFMAパイプラインは、任意の数のステージに分割することができ、ステージそれぞれにおけるコンポーネントの組合せは、必要に応じて異なる組合せとすることができる。さらに、本明細書において特定の回路ブロックによって提供される機能を、複数のパイプラインステージにまたがるように分割することができる。例えば、乗算器のツリーが複数のステージを占めることができる。さらに、様々なブロックの機能を修正・変更することができる。いくつかの実施形態においては、例えば、異なる加算器回路又は異なる乗算器回路を使用することができる。
【0178】
[0189]さらに、DFMAユニットについて、理解を促進する目的で、回路ブロックに基づいて説明してきた。これらの回路ブロックは、様々な回路コンポーネント及び様々なレイアウトを使用して実施することができ、本明細書に説明してあるブロックが、特定の一連のコンポーネント又は特定の物理的レイアウトに限定されないことが、当業者には認識されるであろう。ブロックは、必要に応じて、物理的に結合する、又は分けることができる。
【0179】
[0190]プロセッサは、実行コアの中に一以上のDFMAユニットを含んでいてもよい。例えば、スーパースケーラ命令発行方式(すなわち、1サイクルあたり二つ以上の命令を発行する)又はSIMD命令発行方式が望ましい場合、複数のDFMAユニットを実施することができ、異なるDFMAユニットが、異なる機能の組合せをサポートすることができる。さらに、プロセッサは、複数の実行コアを含んでいてもよく、コアのそれぞれが自身の(一つ以上の)DFMAユニットを有することができる。
【0180】
[0191]いくつかの実施形態においては、実行コアがSIMD命令発行をサポートし、一つのDFMAパイプラインにおいて複数のデータセットを連続的に処理することができるように、一つのDFMAユニットを、入力の順序付け及び出力収集のための適切な論理回路と組み合わせて使用することができる。
【0181】
[0192]図11は、本発明の実施形態による、DFMA機能ユニット1102を含む実行コア1100のブロック図である。DFMAユニット1102は、上述したDFMAユニット320に類似するユニット、又は同じユニットとすることができる。コア1100はSIMD命令を発行する、すなわち、P組の異なるセットの単精度オペランドを有する同じ命令を、P個のセットの単精度SIMDユニット1104に並列に発行することができる。SIMDユニット1104のそれぞれは、同じオペコードと、異なるセットのオペランドとを受け取る。P個のSIMDユニット1104は、並列に動作してP個の結果を生成する。DFMAユニット1102には、P−way SIMD命令が、P個の一連のSISD(単一命令単一データ)命令として発行される。
【0182】
[0193]入力マネージャ1106(命令発行ユニットの一部とすることができる)は、SIMD命令のオペランドを集め、SIMD命令のP個のセットのオペランド全てが集まったとき、それらオペランド及び適用可能なオペコードを、P個のSIMDユニット1104又はDFMAユニット1102のいずれかに提供する。出力収集器1008は、SIMDユニット1104又はDFMAユニット1102からの結果を集め、それらの結果を、結果バス1110を介してレジスタファイル(図11には示していない)に提供する。いくつかの実施形態においては、結果バス1110は、入力マネージャ1106へのバイパス経路も提供し、従って、結果を次の命令において使用することができるように、結果をレジスタファイルに提供するのと並列に入力マネージャ1106に提供することができる。一つのDFMAユニット1102を使用して、見かけ上のSIMD動作を提供する目的で、入力マネージャ1106は、例えば、P個の連続するクロックサイクルのそれぞれにおいて、異なるセットのオペランドを有する同じオペコードを発行することによって、DFMAユニット1102への命令の発行をシリアル化することが有利である。
【0183】
[0194]図12は、本発明の実施形態による、DFMAユニット1102のためのシリアル化された命令発行方式を示しているブロック図である。入力オペランド収集ユニット1202(図11の入力マネージャ1106に含めることができる)は、二つの収集器1204,1206を含んでいる。収集器1204,1206のそれぞれは、32ビットレジスタの配列であり、P組の単精度オペランドトリプレットA,B,及びCのための十分な空間を提供する。言い換えれば、収集器1204,1206のそれぞれは、一つのSIMD命令の全てのオペランドを格納することができる。入力オペランド収集ユニット1202は、例えば図3のレジスタファイル324及び/又は図11の結果バス1110から、オペランドを取得する。与えられた命令に対して、どのオペランドを集めるかを判定するために、タグ、又はその他の従来の手法を使用することができる。一つの命令のオペランドを、その命令が発行されるよりも数クロックサイクル前に集めることができるための十分な収集器1206が提供される。
【0184】
[0195]単精度命令の場合、P個のSIMDユニット1104が一つの命令を実行するために必要なオペランドの全てが、一方の収集器(例:収集器1204)にロードされる。P個のSIMDユニット1104に命令が発行されるとき、収集器1204全体が並列に読み取られて、SIMDユニット1104のそれぞれに異なるオペランドトリプレットA,B,Cが提供されることが好適である。
【0185】
[0196]DFMAユニット1102への命令の場合、オペランドは倍精度(例:64ビット)である。オペランドのそれぞれは、双方の収集器1204,1206の中の対応するレジスタを使用して格納することができる。例えば、収集器1204の中のレジスタ1208は、オペランドAの一つのインスタンスの32個のMSB(例:符号ビット、11個の指数ビット、及び仮数部の20個のMSB)を格納することができ、その一方で、収集器1206の中のレジスタ1210は、同じオペランドの32個のLSB(例:仮数部の残りの32ビット)を格納する。このように、倍精度のP−way SIMD命令に必要なオペランドトリプレットA,B,Cの全てを、二つの単精度収集器1204,1206を使用して集めることができる。
【0186】
[0197]コア1100は、一つのDFMAユニット1102のみを備えており、P個のセットのオペランドは、出力マルチプレクサ(MUX)1212,1214(いずれもカウンタ1216によって制御される)を使用して連続的に提供されることが好適である。マルチプレクサ1212及び1214は、カウンタ1216に応答して、それぞれの収集器1204及び1206からのオペランドトリプレットのMSB及びLSBを選択する。例えば、図示したデータ経路においては、マルチプレクサ1212は、収集器1204の中のレジスタ1208からのオペランドAの32個のMSBを選択することができ、その一方で、マルチプレクサ1214は、収集器1206の中のレジスタ1210からの同じオペランドAの32個のLSBを選択することができる。これら64ビットが、倍精度幅の経路を通じてDFMAユニット1102に提供される。同様に、(レジスタ1220及びレジスタ1222からの)オペランドBと(レジスタ1224及びレジスタ1226からの)オペランドCとを、同じカウンタ1216によって制御される対応するマルチプレクサ(図示していない)を使用して、DFMAユニット1102に提供することができる。次のクロックサイクルにおいては、収集器1204及び1206の中の次のセットのレジスタからのオペランドA,B,及びCをDFMAユニット1102に提供することができ、P個のセットのオペランドの全てが提供されるまで、以下同様に繰り返す。
【0187】
[0198]マルチプレクサ1212及び1214は、収集器1204及び1206とともに、DFMAユニット1102における見かけ上のSIMD実行を提供する(ただしスループットは低下する)。従って、コア1100のプログラミングモデルでは、全ての命令(倍精度命令を含む)についてP−way SIMDの実行が利用可能であることを想定することができる。
【0188】
[0199]本明細書に説明したオペランドの収集及び順序付けの論理回路は、例示を目的としており、変形及び変更が可能であることが理解されるであろう。SIMD対応型のコアには、任意の数のDFMAユニットを提供することができ、任意の数のDFMAユニットに並列に命令を発行することができる。いくつかの実施形態においては、単精度演算に対する倍精度演算におけるスループットは、DFMAユニットの数に対応して増減する。例えば、P個のSIMDユニットとN個のDFMAユニットとが存在している場合、倍精度におけるスループットは、単精度におけるスループットのN/Pである。いくつかの実施形態においては、NはPに等しいことが最適である。別の実施形態においては、別の要因(例:レジスタファイルと機能ユニットとの間の内部データ経路の幅)によって、倍精度におけるスループットが、存在するDFMAユニットの数には関係なく、単精度におけるスループットより低い値に制限されることがある。その場合、Nは、その別の制限要因下において可能な値よりも大きくないことが最適である。
【0189】
[0200]さらに、DFMAユニットが単精度の機能ユニットとは個別であるため、DFMAユニットが使用されないとき、例えば、グラフィックスプロセッサ又はコアが、レンダリングプロセス、或いは倍精度を必要としないその他の計算のみに使用されているとき、DFMAユニットの電力を落とすことができることに留意されたい。さらには、DFMAユニットを、それ以外の回路コンポーネントの動作に影響を与えることなく、集積回路の設計から省くことができる。これにより、異なるチップによって倍精度演算の異なるサポートレベルが提供される製品ファミリーの設計が容易になる。例えば、GPUファミリーは、それぞれが少なくとも一つのDFMAユニットを含む多数のコアを有する高性能のGPUと、倍精度がハードウェアベースでサポートされず、DFMAユニットが存在しない低性能のGPUとを含んでいてもよい。
【0190】
[0201]さらに、本発明をグラフィックスプロセッサに関連して説明してきたが、別のプロセッサ(例えば、数学コプロセッサ、ベクトルプロセッサ、又は汎用プロセッサ)においても本発明の態様を採用することができることが、当業者には理解されるであろう。
【0191】
[0202]このように、本発明を特定の実施形態に関連して説明してきたが、本発明は、請求項の範囲内のあらゆる変形形態及び均等の形態を包含することを理解されたい。
【符号の説明】
【0192】
100…コンピュータシステム、102…CPU、104…システムメモリ、105…メモリブリッジ、106…通信経路、107…I/Oブリッジ、108…ユーザ入力装置、110…表示装置、112…グラフィックスサブシステム、113…通信経路、114…システムディスク、116…スイッチ、118…ネットワークアダプタ、120,121…アドインカード、122…GPU、124…グラフィックスメモリ、200…レンダリングパイプライン、202…マルチスレッドコアアレイ、204…フロントエンド、206…データアセンブラ、208…セットアップモジュール、210…ラスタライザ、212…カラーアセンブリモジュール、214…ラスターオペレーションモジュール(ROP)、218…ジオメトリモジュール、224…ピクセルモジュール、226…フレームバッファ、300…実行コア、302…フェッチ・ディスパッチユニット、304…発行ユニット、320…DFMAユニット、322…機能ユニット、324…レジスタファイル、326…データ転送経路、502,504,506…オペランド入力経路、508…オペコード経路、510,512,524…信号経路、514…オペランド準備、516…仮数経路、518…指数経路、520…符号経路、522…出力セクション、530…制御ブロック、612,614,616…NaN検出ブロック、618,620,622…絶対値/符号反転ブロック、624…A/B比較回路、626…FP32抽出回路、628…U/S抽出回路、630…制御論理回路、632…Aマルチプレクサ、634…Bマルチプレクサ、636…Cマルチプレクサ、638,640,642…特殊数検出回路、702…指数計算回路、704…最終指数計算回路、706…シフト回路、708…符号反転回路、710…D2D論理回路、712…マルチプレクサ、713…アンダーフロー論理回路、720…減算回路、722…アンダーフロー/オーバーフロー回路、724…プラス1回路、726…マルチプレクサ、802…53×53乗算器、804…168ビット加算器、806…マルチプレクサ、808,810…LZD、812…マルチプレクサ、814…ゼロ検出回路、816…シフト回路、818…正規化論理回路、820…丸め論理回路、822…プラス1加算器、824…マルチプレクサ、826…フォーマッティング、902…積/和回路、904…最終符号回路、1002…出力マルチプレクサ制御論理回路、1004…仮数部マルチプレクサ、1006…指数マルチプレクサ、1008…連結ブロック、1102…DFMAユニット、1104…SIMDユニット、1106…入力マネージャ、1108…出力収集器、1110…結果バス、1202…オペランド収集、1208(0)〜1208(P−1),1210(0)〜1210(P−1),1220,1224,1226…レジスタ、1212,1214…マルチプレクサ、1216…カウント。
【特許請求の範囲】
【請求項1】
画像データを生成するようになっており、複数の並列スレッドを実行するようになっている処理コアを含んでおり、単精度オペランドに対して動作するレンダリングパイプラインを備えており、
前記処理コアが、倍精度の入力オペランドのセットに対して複数の倍精度演算のうちの一つを選択的に実行するようになっている多目的の倍精度機能ユニットを更に含んでおり、該多目的の倍精度機能ユニットが、少なくとも一つの算術演算論理回路を含んでおり、
前記複数の倍精度演算が、二つの倍精度オペランドを加算する加算演算と、二つの倍精度オペランドを乗算する乗算演算と、第1の倍精度オペランドと第2の倍精度オペランドとの積を計算し、次いで、前記積に第3の倍精度オペランドを加算する融合型積和演算と、を含んでおり、
前記多目的の倍精度機能ユニットは、前記複数の倍精度演算の各々を単一の経路において実行するよう十分に広く、前記複数の倍精度演算の各々を同数のクロックサイクルで完了させ、
前記倍精度機能ユニットの前記算術演算論理回路の全てが、倍精度において動作するよう十分な広さになっている、
グラフィックスプロセッサ。
【請求項2】
前記倍精度機能ユニットは、前記複数の倍精度演算のそれぞれが、オーバーフロー条件又はアンダーフロー条件が発生するかにかかわらず、同数のクロックサイクルで完了するように構成されている、請求項1に記載のグラフィックスプロセッサ。
【請求項3】
前記倍精度機能ユニットは、オーバーフロー条件又はアンダーフロー条件が発生した場合に、浮動小数点算術演算の規格に準拠するオーバーフロー結果又はアンダーフロー結果を生成し、前記オーバーフロー条件又は前記アンダーフロー条件が発生したか否かを示すための出力ステータスフラグをセットするように、なっている、請求項2に記載のグラフィックスプロセッサ。
【請求項4】
前記倍精度機能ユニットは、前記複数の倍精度演算のうちの任意の一つを完了するために要する時間が浮動小数点例外によって影響されないように、構成されている、請求項1に記載のグラフィックスプロセッサ。
【請求項5】
前記複数の倍精度演算が、第1のオペランドと第2のオペランドとに対して比較テストを実行し、前記比較テストが満たされているか否かを示すブール結果を生成する倍精度比較(DSET)演算を更に含んでいる、請求項1に記載のグラフィックスプロセッサ。
【請求項6】
前記複数の倍精度演算が、
二つの倍精度入力オペランドのうちの大きい方のオペランドを返す倍精度最大値(DMAX)演算と、
二つの倍精度入力オペランドのうちの小さい方のオペランドを返す倍精度最小値(DMIN)演算と、
を更に含んでいる、請求項1に記載のグラフィックスプロセッサ。
【請求項7】
前記複数の倍精度演算が、倍精度形式から倍精度以外の形式にオペランドを変換する少なくとも一つの形式変換演算を更に含んでいる、請求項1に記載のグラフィックスプロセッサ。
【請求項8】
前記複数の倍精度演算が、倍精度以外の形式から倍精度形式にオペランドを変換する少なくとも一つの形式変換演算、を更に含んでいる、請求項1に記載のグラフィックスプロセッサ。
【請求項9】
画像データを生成するよう構成されたレンダリングパイプラインであり、複数の並列スレッドを実行するように構成された処理コアを含む該レンダリングパイプラインを備えており、
前記処理コアが、一以上の単精度オペランドに対して算術演算を実行するよう構成された単精度機能ユニットを含んでおり、
前記処理コアが、倍精度入力オペランドのセットに対して融合型積和演算を実行して倍精度の結果を提供し、一対の倍精度入力オペランドに対して加算演算を実行して倍精度の結果を提供し、一対の倍精度入力オペランドに対して乗算演算を実行して倍精度の結果を提供するよう構成された倍精度の積和演算(DFMA)機能ユニットを更に含んでおり、
前記DFMA機能ユニットがDFMAパイプラインを含んでおり、前記DFMAパイプラインは、当該DFMAパイプラインを通る単一の経路において前記融合型積和演算、前記加算演算、又は前記乗算演算が実行されるよう十分に広いデータ経路を有し、前記融合型積和演算、前記加算演算、及び前記乗算演算のそれぞれを、同数のクロックサイクルで完了させる、
グラフィックスプロセッサ。
【請求項10】
前記DFMA機能ユニットが、
二つの倍精度仮数の積を1回の反復において計算するよう構成された乗算器と、
二つの倍精度仮数の和を1回の反復において計算するよう構成された加算器と、
を含んでいる、請求項9に記載のグラフィックスプロセッサ。
【請求項11】
前記融合型積和演算、前記加算演算、及び前記乗算演算のそれぞれが、オーバーフロー条件又はアンダーフロー条件が発生するか否かにかかわらず同数のクロックサイクルで完了する、請求項9に記載のグラフィックスプロセッサ。
【請求項12】
前記DFMA機能ユニットが、オーバーフロー条件又はアンダーフロー条件が発生した場合に、浮動小数点算術演算の規格に準拠するオーバーフロー結果又はアンダーフロー結果を生成し、前記オーバーフロー条件又は前記アンダーフロー条件が発生したか否かを示すための出力ステータスフラグをセットするように、更に構成されている、請求項11に記載のグラフィックスプロセッサ。
【請求項13】
前記処理コアが、並列に動作するようになっている前記単精度機能ユニットの複数(P個)の複製と、前記DFMA機能ユニットの複数(N個)の複製と、を含んでいる、請求項9に記載のグラフィックスプロセッサ。
【請求項14】
前記数Pが前記数Nよりも大きい、請求項13に記載のグラフィックスプロセッサ。
【請求項15】
前記数Nが1である、請求項14に記載のグラフィックスプロセッサ。
【請求項16】
前記処理コアが、前記DFMA機能ユニットを対象とするP個のセットの倍精度入力オペランドを集めて、前記P個のセットの倍精度オペランドのうち異なるセットの倍精度オペランドを、異なるクロックサイクルにおいて、前記DFMA機能ユニットに提供するようになっている入力マネージャ回路を更に含んでいる、請求項15に記載のグラフィックスプロセッサ。
【請求項17】
前記入力マネージャ回路が、前記単精度機能ユニットを対象とするP個のセットの単精度入力オペランドを集めて、前記単精度機能ユニットの前記P個の複製のそれぞれに、前記P個のセットの単精度オペランドのうち異なるセットの単精度オペランドを、並列に提供するように、なっている、請求項16に記載のグラフィックスプロセッサ。
【請求項1】
画像データを生成するようになっており、複数の並列スレッドを実行するようになっている処理コアを含んでおり、単精度オペランドに対して動作するレンダリングパイプラインを備えており、
前記処理コアが、倍精度の入力オペランドのセットに対して複数の倍精度演算のうちの一つを選択的に実行するようになっている多目的の倍精度機能ユニットを更に含んでおり、該多目的の倍精度機能ユニットが、少なくとも一つの算術演算論理回路を含んでおり、
前記複数の倍精度演算が、二つの倍精度オペランドを加算する加算演算と、二つの倍精度オペランドを乗算する乗算演算と、第1の倍精度オペランドと第2の倍精度オペランドとの積を計算し、次いで、前記積に第3の倍精度オペランドを加算する融合型積和演算と、を含んでおり、
前記多目的の倍精度機能ユニットは、前記複数の倍精度演算の各々を単一の経路において実行するよう十分に広く、前記複数の倍精度演算の各々を同数のクロックサイクルで完了させ、
前記倍精度機能ユニットの前記算術演算論理回路の全てが、倍精度において動作するよう十分な広さになっている、
グラフィックスプロセッサ。
【請求項2】
前記倍精度機能ユニットは、前記複数の倍精度演算のそれぞれが、オーバーフロー条件又はアンダーフロー条件が発生するかにかかわらず、同数のクロックサイクルで完了するように構成されている、請求項1に記載のグラフィックスプロセッサ。
【請求項3】
前記倍精度機能ユニットは、オーバーフロー条件又はアンダーフロー条件が発生した場合に、浮動小数点算術演算の規格に準拠するオーバーフロー結果又はアンダーフロー結果を生成し、前記オーバーフロー条件又は前記アンダーフロー条件が発生したか否かを示すための出力ステータスフラグをセットするように、なっている、請求項2に記載のグラフィックスプロセッサ。
【請求項4】
前記倍精度機能ユニットは、前記複数の倍精度演算のうちの任意の一つを完了するために要する時間が浮動小数点例外によって影響されないように、構成されている、請求項1に記載のグラフィックスプロセッサ。
【請求項5】
前記複数の倍精度演算が、第1のオペランドと第2のオペランドとに対して比較テストを実行し、前記比較テストが満たされているか否かを示すブール結果を生成する倍精度比較(DSET)演算を更に含んでいる、請求項1に記載のグラフィックスプロセッサ。
【請求項6】
前記複数の倍精度演算が、
二つの倍精度入力オペランドのうちの大きい方のオペランドを返す倍精度最大値(DMAX)演算と、
二つの倍精度入力オペランドのうちの小さい方のオペランドを返す倍精度最小値(DMIN)演算と、
を更に含んでいる、請求項1に記載のグラフィックスプロセッサ。
【請求項7】
前記複数の倍精度演算が、倍精度形式から倍精度以外の形式にオペランドを変換する少なくとも一つの形式変換演算を更に含んでいる、請求項1に記載のグラフィックスプロセッサ。
【請求項8】
前記複数の倍精度演算が、倍精度以外の形式から倍精度形式にオペランドを変換する少なくとも一つの形式変換演算、を更に含んでいる、請求項1に記載のグラフィックスプロセッサ。
【請求項9】
画像データを生成するよう構成されたレンダリングパイプラインであり、複数の並列スレッドを実行するように構成された処理コアを含む該レンダリングパイプラインを備えており、
前記処理コアが、一以上の単精度オペランドに対して算術演算を実行するよう構成された単精度機能ユニットを含んでおり、
前記処理コアが、倍精度入力オペランドのセットに対して融合型積和演算を実行して倍精度の結果を提供し、一対の倍精度入力オペランドに対して加算演算を実行して倍精度の結果を提供し、一対の倍精度入力オペランドに対して乗算演算を実行して倍精度の結果を提供するよう構成された倍精度の積和演算(DFMA)機能ユニットを更に含んでおり、
前記DFMA機能ユニットがDFMAパイプラインを含んでおり、前記DFMAパイプラインは、当該DFMAパイプラインを通る単一の経路において前記融合型積和演算、前記加算演算、又は前記乗算演算が実行されるよう十分に広いデータ経路を有し、前記融合型積和演算、前記加算演算、及び前記乗算演算のそれぞれを、同数のクロックサイクルで完了させる、
グラフィックスプロセッサ。
【請求項10】
前記DFMA機能ユニットが、
二つの倍精度仮数の積を1回の反復において計算するよう構成された乗算器と、
二つの倍精度仮数の和を1回の反復において計算するよう構成された加算器と、
を含んでいる、請求項9に記載のグラフィックスプロセッサ。
【請求項11】
前記融合型積和演算、前記加算演算、及び前記乗算演算のそれぞれが、オーバーフロー条件又はアンダーフロー条件が発生するか否かにかかわらず同数のクロックサイクルで完了する、請求項9に記載のグラフィックスプロセッサ。
【請求項12】
前記DFMA機能ユニットが、オーバーフロー条件又はアンダーフロー条件が発生した場合に、浮動小数点算術演算の規格に準拠するオーバーフロー結果又はアンダーフロー結果を生成し、前記オーバーフロー条件又は前記アンダーフロー条件が発生したか否かを示すための出力ステータスフラグをセットするように、更に構成されている、請求項11に記載のグラフィックスプロセッサ。
【請求項13】
前記処理コアが、並列に動作するようになっている前記単精度機能ユニットの複数(P個)の複製と、前記DFMA機能ユニットの複数(N個)の複製と、を含んでいる、請求項9に記載のグラフィックスプロセッサ。
【請求項14】
前記数Pが前記数Nよりも大きい、請求項13に記載のグラフィックスプロセッサ。
【請求項15】
前記数Nが1である、請求項14に記載のグラフィックスプロセッサ。
【請求項16】
前記処理コアが、前記DFMA機能ユニットを対象とするP個のセットの倍精度入力オペランドを集めて、前記P個のセットの倍精度オペランドのうち異なるセットの倍精度オペランドを、異なるクロックサイクルにおいて、前記DFMA機能ユニットに提供するようになっている入力マネージャ回路を更に含んでいる、請求項15に記載のグラフィックスプロセッサ。
【請求項17】
前記入力マネージャ回路が、前記単精度機能ユニットを対象とするP個のセットの単精度入力オペランドを集めて、前記単精度機能ユニットの前記P個の複製のそれぞれに、前記P個のセットの単精度オペランドのうち異なるセットの単精度オペランドを、並列に提供するように、なっている、請求項16に記載のグラフィックスプロセッサ。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2012−84142(P2012−84142A)
【公開日】平成24年4月26日(2012.4.26)
【国際特許分類】
【外国語出願】
【出願番号】特願2011−217575(P2011−217575)
【出願日】平成23年9月30日(2011.9.30)
【分割の表示】特願2008−302713(P2008−302713)の分割
【原出願日】平成20年11月27日(2008.11.27)
【出願人】(501261300)エヌヴィディア コーポレイション (166)
【Fターム(参考)】
【公開日】平成24年4月26日(2012.4.26)
【国際特許分類】
【出願番号】特願2011−217575(P2011−217575)
【出願日】平成23年9月30日(2011.9.30)
【分割の表示】特願2008−302713(P2008−302713)の分割
【原出願日】平成20年11月27日(2008.11.27)
【出願人】(501261300)エヌヴィディア コーポレイション (166)
【Fターム(参考)】
[ Back to top ]