説明

プロセッサにおける効率的なパラレル浮動小数点例外処理

【課題】SIMD命令を実行するプロセッサにおいて浮動小数点例外を効率的に処理する。
【解決手段】SIMD浮動小数点演算の数値例外を特定するステップと、前記SIMD浮動小数点演算の第1Packed部分結果を生成するため、第1SIMDマイクロ演算を開始するステップと、前記SIMD浮動小数点演算の第2Packed部分結果を生成するため、第2SIMDマイクロ演算を開始するステップと、前記第1及び第2Packed部分結果を合成し、前記合成された第1及び第2Packed部分結果の第1要素を非正規化して非正規化要素を有する第3Packed結果を生成するため、SIMD非正規化マイクロ演算を開始するステップと、前記SIMD浮動小数点演算の第3Packed結果を格納するステップと、前記第3Packed結果の非正規化要素を特定するフラグを前記第1Packed部分結果に設定するステップと、を有する。

【発明の詳細な説明】
【技術分野】
【0001】
本開示は、一般にマイクロプロセッサの分野に関する。より詳細には、本開示は、SIMD(Single−Instruction Multiple−Data)命令を実行するプロセッサにおいて浮動小数点例外を処理するための効率的な技術に関する。
【背景技術】
【0002】
浮動小数点演算のためのIEEE(Institute of Electrical and Electronics Engineers)規格(IEEE754)は、シングル精度(32ビット)、ダブル精度(64ビット、シングル拡張精度(43ビット以上、通常使用されない)、及びダブル拡張精度(79ビット以上、通常80ビットにより実現される)の浮動小数点数がどのように表現されるか規定すると共に(負のゼロ、非正規化、無限及びNaN(Not a Number)を含む)、演算がこれらに対してどのように実行されるべきかを規定する。当該規格では、32ビット値のみが要求され、その他は任意的なものである。それはまた、4つの丸めモードと5つの例外(例外が発生したとき、発生したときに何が起きるかを含む)とを規定する。
【0003】
指数は、(2e−1)−1によりバイアスされている(ただし、eは指数フィールドに用いられるビット数である)。例えば、シングル精度数は8ビットの指数を有し、このため、その指数は、それに加えられた2−1=127により格納され、“127によりバイアスされる”と呼ばれる。通常のシングル精度指数は、−126〜127の範囲となる。128の指数は、プラス又はマイナス無限大のために確保される。−127の指数(すべてゼロ)は、プラス又はマイナスゼロのために確保される(又は、非正規化のためだが、非正規化のケースでは、使用されるバイアスは(2e−1)−2、すなわち、127でなく126である。これは、仮数の最上位ビットが1でなくゼロであるという前提のためである)。テーブル1において、シングル精度浮動小数点表現のいくつかの具体例が示される。
【0004】
【表1】

正規化浮動小数点数は、v=s×2×mである。ただし、s,e,mは、
符号ビットが0であるとき、s=+1(正の数で+0)
符号ビットが1であるとき、s=−1(負の数で−0)
e=exponent−bias(すなわち、指数は、それに加えられたbiasと共に格納される)
m=1.fraction(バイナリによる)(すなわち、仮数は、インプリシットな先頭ビット値1の後に、基数点が続き、その後にfractionのバイナリビットが続く)
である。従って、1≦m<2である。
【0005】
非正規化数(denormal number,denormalized number,subnormal number)は、最小の正規化数より小さいが、ゼロではない数(絶対値において)である。非正規化の生成は、結果が小さいとき計算がゆっくりと精度を失う可能性があるため、漸近的アンダーフローとしばしば呼ばれる。IEEE754規格が書かれていたとき、非正規化数は、インテル8087浮動小数点個コプロセッサにより実現された。この実現形態は、非正規化が実際的な実現形態によりサポート可能であることを示していた。
【0006】
正規化浮動小数点表現では、仮数の先頭ビットは1に等しいと仮定される。それが1に等しいと知られているため、仮数の先頭ビットは、一部の浮動小数点表現では、省略され、指数値が対応して調整されるかもしれない。非正規化値は、正規化された形式により表現できない値(すなわち、ゼロでない仮数による可能な最小の指数を有する)である。浮動小数点単位(FPU)の一部の実現形態は、非正規化数をハードウェアにより直接的にはサポートしないが、ある種のソフトウェア又はマイクロコードのサポートにトラップする。これはユーザには透過であるかもしれないが、非正規化数を生成又は使用する計算を正規化数に対する同様の計算よりはるかに低速なものにしうる。
【0007】
現在のプロセッサはまた、浮動小数点数に対してSIMD(Single−Instruction Multiple−Data)を実行する命令を有するかもしれない。これらのSIMD演算が非正規化を生成又は使用するとき、マイクロコードを利用したハードウェア又はソフトウェアにより演算を処理するのに例外がトリガーされるかもしれない。非正規化をハードウェアによりサポートする1つの方法は、非正規化を小さな正規化として単に処理するのに十分な精度を有するより広範な内部表現によるものである。例えば、シングル精度非正規化に関する例外がトリガーされる場合、マイクロコードは、シングル精度オペランドを正規化ダブル精度オペランドに変換し、より広範な表現に対して演算を再実行し、その後に結果を非正規化し、シングル精度に戻すかもしれない。同様に、ダブル精度非正規化は、ダブル拡張精度正規化として処理されるかもしれない。1つの欠点は、非正規化数を生成又は使用する計算が正規化数に対する同様の計算よりはるかに低速なものになることである。
【発明の概要】
【発明が解決しようとする課題】
【0008】
従って、SIMD命令を実行するプロセッサにおいて浮動小数点例外を効率的に処理する技術が所望される。
【課題を解決するための手段】
【0009】
上記課題を解決するため、本発明の一特徴は、SIMD(Single−Instruction Multiple−Data)命令を実行するプロセッサにおいて浮動小数点例外を処理する方法であって、SIMD浮動小数点演算の数値例外を特定するステップと、前記SIMD浮動小数点演算の第1Packed部分結果を生成するため、第1SIMDマイクロ演算を開始するステップと、前記SIMD浮動小数点演算の第2Packed部分結果を生成するため、第2SIMDマイクロ演算を開始するステップと、前記第1及び第2Packed部分結果を合成し、前記合成された第1及び第2Packed部分結果の第1要素を非正規化して非正規化要素を有する第3Packed結果を生成するため、SIMD非正規化マイクロ演算を開始するステップと、前記SIMD浮動小数点演算の第3Packed結果を格納するステップと、前記第3Packed結果の非正規化要素を特定するフラグを前記第1Packed部分結果に設定するステップと、を有する方法に関する。
【発明の効果】
【0010】
本発明によると、SIMD命令を実行するプロセッサにおいて浮動小数点例外を効率的に処理することができる。
【図面の簡単な説明】
【0011】
【図1】図1は、スカラー及びPacked IEEE浮動小数点数を格納するための一例となるストレージフォーマットを示す。
【図2】図2は、SIMD浮動小数点命令を実行し、SIMD浮動小数点例外を効率的に処理する技術を使用するプロセッサを有するシステムの一実施例を示す。
【図3】図3は、SIMD浮動小数点命令を実行し、SIMD浮動小数点例外を効率的に処理する技術を使用するプロセッサの一実施例を示す。
【図4】図4は、SIMD命令を実行するプロセッサにおいて浮動小数点例外を効率的に処理する装置の他の実施例を示す。
【図5a】図5aは、Packed浮動小数点数の内部表現を格納するための一例となるストレージフォーマットを示す。
【図5b】図5bは、Packed浮動小数点数の内部表現を格納するための一例となるストレージフォーマットを示す。
【図6】図6は、SIMD浮動小数点加算器において特定の数値例外を処理するためのプロセスの一実施例のフロー図を示す。
【図7】図7は、SIMD浮動小数点乗算器において特定の共通例外を処理するためのプロセスの一実施例のフロー図を示す。
【図8】図8は、SIMD浮動小数点命令を実行するプロセッサにおいて数値例外を処理するためのプロセスの他の実施例のフロー図を示す。
【発明を実施するための形態】
【0012】
以下、図面に基づいて本発明の実施の形態を説明する。
【0013】
SIMD(Single−Instruction Multiple−Data)命令を実行するプロセッサにおいて浮動小数点例外を実行するための方法及び装置が開示される。一実施例では、数値例外が、SIMD浮動小数点演算について特定され、SIMDマイクロ演算のペアが、SIMD浮動小数点演算のパック(packed)された結果の2つのパックされた部分的な結果を生成するため実行される。以下の開示における数値例外は、非正規化入力値を特定することによって、又は非正規化出力値を結果として生成しうるアンダーフロー状態を特定することによってトリガーされる例外を少なくとも含むと理解され、このため、マイクロコードの使用を必要とするかもしれない。SIMD非正規化マイクロ演算は、2つのパックされた部分的な結果を合成し、合成された2つのパックされた部分的な結果の1以上の要素を非正規化して、1以上の非正規化要素を有するSIMD浮動小数点演算のパックされた結果を生成するため実行される。非正規化要素を特定するため、パックされた部分結果及び/又はパックされた結果と共に、フラグが設定及び格納されてもよい。
【0014】
一実施例では、SIMD正規化マイクロ演算が、乗算(又は除算、平方根若しくは変換)であるとき、SIMD浮動小数点演算の実行前に、正規化された擬似的な内部浮動小数点表現を生成するため実行される。このような擬似的な内部浮動小数点表現は、非正規化要素の対応する何れの擬似的な内部浮動小数点表現が非正規化要素の実際の内部浮動小数点表現に変換される必要があるかを示すために設定されるフラグと共に、正規化Packed浮動小数点オペランドと同じレジスタに格納されてもよい。このような非正規化要素の擬似的な内部浮動小数点表現では、仮数は正規化され、指数は、実際の内部浮動小数点表現のより広範な指数に容易に復元できるように格納されてもよい。例えば、仮数の先頭からのゼロの個数が非正規化の指数から減算される場合(実際の内部浮動小数点表現のより広範な指数フォーマットにおいてバイアスされる)、上位ビットは一定(10など)であってもよく、擬似的な内部浮動小数点表現から落とすことができ、容易に復元できる。
【0015】
このため、このような技術は、スカラー演算に変換し、少数のさらなるマイクロ演算の実行しか要することなく、SIMD浮動小数点例外を同時に透過的に処理するのに利用されてもよい。
【0016】
本発明の上記及び他の実施例は、以下の教示に従って実現されてもよく、本発明のより広範な趣旨及び範囲から逸脱することなく、各種改良及び変更が以下の教示において可能であることが明らかであるべきである。このため、明細書及び図面は、限定的なものでなく例示的なものであるとみなされるべきであり、本発明は、請求項とそれに均等なものに関してのみ規定されるべきである。以下の説明では、本発明の完全な理解を提供するため、多数の具体的な詳細が与えられる。しかしながら、当業者は、これらの具体的な詳細が本発明の実施例を実施するのに必ずしも必要でないことを理解するであろう。さらに、本発明の実施例を不明りょうにしないため、周知の電気構造及び回路は詳細には与えられていない。
【0017】
ますます多くのコンピュータシステムがインターネットやマルチメディアアプリケーションにおいて使用されるに従って、さらなるプロセッササポートが導入されてきた。例えば、SIMD整数/浮動小数点命令及びSSE(Streaming SIMD Extension)は、特定のプログラムタスクを実行するのに必要とされる命令の総数を減少させる命令である。これらの命令は、複数のデータ要素に対してパラレルに処理することによって、ソフトウェアのパフォーマンスを高速化することが可能である。この結果、ビデオ、発話及び画像/フォト処理を含む広範なアプリケーションにおけるパフォーマンスの向上が実現できる。マイクロプロセッサと同様のタイプの論理回路の実現は、通常はいくつかの問題を伴う。さらに、SIMD演算の複雑さは、しばしばデータを正しく処理及び操作するため、さらなる回路の必要をもたらす。
【0018】
図1は、スカラー及びPacked IEEE浮動小数点数を格納するための一例となるストレージフォーマット101〜105を示す。シングル精度フォーマット101は、符号ビット111と、8つの指数ビットと、23の仮数ビット113との32ビットを有する。ダブル精度フォーマット102は、符号ビット121と、11の指数ビット122と、52の仮数ビット123との64ビットを有する。ダブル拡張精度フォーマット103は、符号ビット131と、15の指数ビット132と、64の仮数ビット133との80ビットを有する。IEEE浮動小数点数の各ストレージフォーマットにおいて、仮数112,122,132はまた、1に等しいことが前提とされるインプリシットな最上位ビットJを有するかもしれない。このため、例えば、ダブル精度フォーマット102の52ビットの仮数が16進数値“23456789ABCDE”を格納していた場合、表現される16進数値は、インプリシットなJビットに続く小数点を有する1.23456789ABCDEとなる。その指数は、(2e−1)−1だけバイアスされる(ただし、eは指数フィールドに使用されるビット数である)。このため、シングル精度フォーマット101の8ビットの指数は127だけバイアスされ、ダブル精度フォーマット102の11ビットの指数は1023だけバイアスされる。
【0019】
Packedシングル精度フォーマット104は、128ビットを有し、32ビットの各部分141〜144が、シングル精度フォーマット101を有するシングル精度浮動小数点数を格納する。Packedダブル精度フォーマット105はまた、128ビットを有し、64ビットの各部分151〜152が、ダブル精度フォーマット102を有するダブル精度浮動小数点数を格納する。Packedシングル精度フォーマット104とPakcedダブル精度フォーマット105とは、SIMD浮動小数点演算を実行するのに有用であることが知られている。Packedシングル精度フォーマット104とPackedダブル精度フォーマット105とは、128ビットを有すると示されているが、本発明はこれに限定されるものでないことが理解されるであろう。特に、本発明の実施例は、SIMD浮動小数点演算を実行するため、256、512又はそれ以上のデータビットを有するPackedシングル精度及びPackedダブル精度浮動小数点数のためのフォーマットを含むものであってもよい。
【0020】
これらのSIMD浮動小数点演算が非正規化を生成又は使用するとき、例外(おそらくマスクされている)が、ソフトウェア又はハードウェア及び/又はマイクロコードを使用して演算を処理するためトリガーされるかもしれない。従来のプロセッサでは、このような例外の処理は、Packed浮動小数点数をより広範な表現のスカラー浮動小数点数に変換し、この広範な表現に対してスカラー演算として演算を再実行し、その後に、必要に応じて結果を非正規化し、Packed浮動小数点数に戻す処理を有していたかもしれない。上述されるように、このような非正規化数を生成又は使用する計算の処理は、特にPacked浮動小数点数のフォーマットが256、512又はそれ以上のデータビットを有する場合には、正規化数に対する同様の計算よりはるかに低速になるかもしれない。このため、SIMD命令を実行するプロセッサにおいて浮動小数点例外を処理するための開示されるより効率的な技術が必要とされる。
【0021】
図2は、SIMD浮動小数点命令を実行し、SIMD浮動小数点例外を処理するより効率的な技術を利用するプロセッサ300を有するシステム200の一実施例を示す。システム200は、ここに開示される実施例のように、本発明によりSIMD浮動小数点演算を実行するためのアルゴリズムを実行するロジックを含む実行ユニットを使用する、プロセッサ300などのコンポーネントを有する。システム200は、他のシステム(他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックスなどを有するPCを含む)がまた利用されてもよいが、典型的には、カリフォルニア州サンタクララのインテルコーポレイションから入手可能なPENTIUM(登録商標)III、PENTIUM(登録商標)4、CELERON(登録商標)、XEONTM、ITANIUM(登録商標)、CENTRINO(登録商標)、CORETMDuo、CORETM2Duo及び/又はCORETM2 Quadマイクロプロセッサに基づく処理システムである。一実施例では、一例となるシステム200は、他のオペレーティングシステム(MAC OS(登録商標)X LEOPARD(登録商標)オペレーティングシステム、UNIX(登録商標)及びLinux(登録商標)など)、埋め込みソフトウェア及び/又はグラフィカルユーザインタフェースがまた利用可能であるが、ワシントン州レッドモンドのマイクロソフトコーポレイションかた入手可能なあるバージョンのWINDOWS(登録商標)オペレーティングシステムを実行してもよい。本発明は、何れか特定のハードウェア回路とソフトウェアの組み合わせに限定されるものでない。
【0022】
プロセッサ300は、本発明によるPacked浮動小数点データに対してSIMD命令を実行する1以上の実行ユニット203を有する。本実施例は、単独のプロセッサデスクトップ又はサーバシステムに関して説明されるが、他の実施例は、マルチプロセッサシステムに含まれうる。一実施例のシステム200は、ハブアーキテクチャの一例である。コンピュータシステム200は、データ信号を処理するプロセッサ300を有する。プロセッサ300は、CISC(Complex Instruction Set Computer)マイクロプロセッサ、RISC(Reduced Instruction Set Computing)マイクロプロセッサ、VLIW(Very Long Instruction Word)マイクロプロセッサ、命令セットの組み合わせを実現するプロセッサ又はデジタル信号プロセッサなどの他の何れかのプロセッサ装置とすることが可能である。プロセッサ300は、プロセッサ300とシステム200の他のコンポーネントとの間でデータ信号を送信可能なプロセッサバス210に接続される。システム200の各要素は、当業者に周知な従来の機能を実行する。
【0023】
一実施例では、プロセッサ300は、レベル1(L1)内部キャッシュメモリ207を有する。アーキテクチャに依存して、プロセッサ300は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することが可能である。あるいは、他の実施例では、キャッシュメモリは、プロセッサ300の外部に配設可能である。他の実施例はまた、特定の実現形態及び要求に依存して、内部キャッシュと外部キャッシュの双方の組み合わせを有することも可能である。レジスタファイル208は、SIMD及び/若しくはスカラーレジスタ、整数レジスタ、浮動小数点レジスタ、状態レジスタ及び命令ポインタレジスタを含む各種レジスタに異なるタイプのデータを格納可能である。
【0024】
整数演算及び浮動小数点演算を実行するためのロジックを含む実行ユニット203がまた、プロセッサ300に配設される。プロセッサ300はまた、マイクロコードを用いてハードウェアにより例外処理を実行するため、及び/又は特定のマイクロ命令のためのマイクロコードを格納するマイクロコード(ucode)ROMを有する。本実施例では、実行ユニット203は、SIMD浮動小数点命令を含むPacked命令セット209を処理するためのロジックを有する。命令を実行するための関連する回路と共に、Packed命令セット209を汎用プロセッサ300の命令セットに含めることによって、多くのマルチメディアアプリケーションにより使用される演算は、汎用プロセッサ300のPackedデータを用いて実行されてもよい。従って、多くのマルチメディアアプリケーションは、Packedデータに対して演算を実行するため、プロセッサのデータバスの幅全体を用いることによって、より効率的に加速及び実行可能である。これは、1回に1つのデータ要素によって、1以上の演算を実行するためプロセッサのデータバスを介し少数のデータ単位を伝送する必要を解消することが可能である。
【0025】
実行ユニット203の他の実施例がまた、マイクロコントローラ、埋め込みプロセッサ、グラフィック装置、DSP、及び他のタイプの論理回路により利用可能である。システム200は、メモリ220を有する。メモリ220は、DRAM(Dynamic Random Access Memory)装置、SRAM(Static Random Access Memory)装置、フラッシュメモリ装置又は他のメモリ装置とすることが可能である。メモリ220は、プロセッサ300により実行可能なデータ信号により表される命令及び/又はデータを格納可能である。
【0026】
システムロジックチップ216が、プロセッサバス210とメモリ220とに接続される。図示された実施例におけるシステムロジックチップ216は、メモリコントローラハブ(MCH)である。プロセッサ300は、プロセッサバス210を介しMCH216と通信可能である。MCH216は、命令及びデータの格納のため、またグラフィックコマンド、データ及びテクスチャの格納のため、高帯域幅メモリパス218をメモリ220に提供する。MCH216は、プロセッサ300と、メモリ220と、システム200の他のコンポーネントとの間でデータ信号を誘導し、プロセッサバス210と、メモリ220と、システムI/O222との間でデータ信号をブリッジするためのものである。一部の実施例では、システムロジックチップ216は、グラフィックコントローラ212と接続するためのグラフィックポートを提供可能である。MCH216は、メモリインタフェース218を介しメモリ220に接続される。グラフィックカード212は、AGP(Accelerated Graphics Port)インターコネクト214を介しMCH216に接続される。
【0027】
一部の実施例によるシステム200は、MCH216をI/Oコントローラハブ(ICH)230に接続するための専用のハブインタフェースバス222を有する。ICH230は、ローカルI/Oバスを介しいくつかのI/O装置との直接的な接続を提供する。ローカルI/Oバスは、各周辺装置をメモリ220、チップセット及びプロセッサ300に接続するための高速I/Oバスである。一部の具体例は、オーディオコントローラ、ファームウェアハブ(フラッシュBIOS)228、無線トランシーバ226、データストレージ224、ユーザ入力及びキーボードインタフェースを含むレガシーI/Oコントローラ、USB(Universal Serial Bus)などのシリアル拡張ポート、並びにネットワークコントローラ234である。データストレージ装置224は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROM装置、フラッシュメモリ装置又は他の大容量ストレージ装置を有することが可能である。システム200の一部の実施例では、MCH216とICH230とは、単一のシステムロジックチップ201に一体化されてもよい。他の実施例では、MCH216は、メモリ220への直接的なプロセッサ300のアクセスのため、プロセッサ300に直接一体化されてもよい。システム200の他の実施例では、プロセッサ300は、チップ上のシステムに直接一体化されてもよい。チップ上のシステムの一実施例は、プロセッサ300とメモリ220とを有する。このようなシステムのメモリ220は、フラッシュメモリである。フラッシュメモリ220は、プロセッサ300及び他のシステムコンポーネントと同一ダイ上に設けることも可能である。さらに、メモリコントローラやグラフィックコントローラなどの他のロジックブロックがまた、チップ上のシステムに設けることも可能である。
【0028】
図3は、SIMD浮動小数点命令を実行し、SIMD浮動小数点例外を処理するための効率的な技術を利用するプロセッサ300の一実施例を示す。イン・オーダフロントエンド301は、実行されるマクロ命令をフェッチし、プロセッサパイプラインにおける以降の使用のためそれらを用意するプロセッサ300の一部である。本実施例のフロントエンド301は、複数のユニットを有する。命令プリフェッチャ326は、メモリ220及び/又はI−キャッシュ327からマクロ命令をフェッチし、マシーンが実行方法を知っているマイクロ命令又はマイクロ処理(マイクロop又はuopとも呼ばれる)と呼ばれるプリミティブにそれらを復号化する命令デコーダ328に提供する。マイクロopキャッシュ330は、復号化されたマイクロopを取得し、復号化することなく以降の再実行のためそれらを格納する。マイクロopキャッシュ330の一部の実施例は、マイクロopをプログラムにより順序付けされたシーケンス又はトレースに構成するトレースキャッシュを実行用のマイクロopキュー334に有してもよい。一部の実施例では、デコーダ328又はマイクロopキャッシュ330のトレースキャッシュが複雑なマクロ命令に遭遇すると、マイクロコードROM344が、当該演算を完了させるのに必要なマイクロopを提供するかもしれない。
【0029】
多数のマクロ命令が、単独のマイクロopに変換されるが、他のマクロ命令は、演算全体を完了させるため、複数のマイクロopを必要とする。一実施例では、4より多くのマイクロopがマクロ命令を完了させるため必要とされる場合、デコーダ328は、マクロ命令を実行するため要求されたマイクロopを提供するよう、マイクロコードROM344にアクセスする。
【0030】
一実施例では、浮動小数点演算の例外は、SIMD浮動小数点命令を実行するプロセッサ300における非正規化などの例外ケースをサポートするように浮動小数点演算を再実行するため、マイクロコードROM344における少数のマイクロopに符号化及び処理可能である。
【0031】
SIMD及び他のマルチメディアタイプの命令は、複雑な命令とみなされる。ほとんどの浮動小数点関連命令はまた、複雑な命令である。また、命令デコーダ328が複雑なマクロ命令に遭遇するとき、マイクロコードROM344は、当該マクロ命令のマイクロコードシーケンスを抽出するため、適切な位置においてアクセスされる。当該マクロ命令を実行するのに必要とされる各種マイクロopが、適切な整数及び浮動小数点実行ユニットにおける実行のため、アウト・オブ・オーダ実行エンジン303に通信される。
【0032】
アウト・オブ・オーダ実行エンジン303は、実行のためマイクロ命令が準備される場所である。アウト・オブ・オーダ実行ロジックは、マイクロ命令がパイプラインを進捗し、実行のためスケジューリングされるとき、パフォーマンスを最適化するため、マイクロ命令のフローを円滑化及び再配置するためのいくつかのバッファを有する。アロケータリネーマロジック333は、各マイクロopが実行のため必要とするマシーンバッファ及びリソースを割当て、レジスタファイルの各エントリに論理レジスタをリネームする。アロケータリネーマロジック333の一実施例はまた、メモリ演算のためのメモリキュー331、整数又は不動点演算のための整数キュー332、及び浮動小数点演算のための浮動小数点キュー336を含む各種キューにおける各マイクロopのためのエントリを割り当てる。これらのキュー(それぞれ331,332,336など)から、マイクロopは、リード/ライトユニット311、整数実行ユニット312及び浮動小数点実行ユニット316による実行のため、メモリスケジューラ321、整数スケジューラ302及び浮動小数点スケジューラ306によりスケジューリングされる。マイクロopスケジューラ321,302,306は、マイクロopが実行準備ができた時点を、スケジューラの従属する入力レジスタオペランドソースが準備ができたか否かと、マイクロopがそれらの演算を完了させるのに必要とする実行リソースの利用性とに基づき判断する。実行ユニット311,312,316のそれぞれ又は何れかがスカラー又はSIMD演算を実行するための重複した実行ユニットを有してもよいことは理解されるであろう。
【0033】
レジスタファイルバイパスネットワーク308は、スケジューラ321,302,306と実行ユニット311,312,316との間にある。レジスタファイルバイパスネットワーク308の一部の実施例では、整数演算と浮動小数点演算のための個別のレジスタファイルがあってもよい。このような実施例の各レジスタファイルは、レジスタファイルにまだ書かれていない完了直後の結果を新たな従属するマイクロopにバイパス又は転送可能なバイパスネットワークを有してもよく、互いにデータを通信可能であってもよい。他の実施例では、レジスタファイルバイパスネットワーク308は統合されてもよい。レジスタファイルバイパスネットワーク308の他の実施例は、SIMD浮動小数点演算のためのPacked浮動小数点ソースオペランドとPacked浮動小数点結果とを含むPakcedソース及びデスティネーションオペランドを格納するため、少なくとも256ビット幅のレジスタエントリを有する。
【0034】
マイクロopスケジューラ321,302,306の一部の実施例は、ペアレントロードが実行を終了する前に、従属する演算をディスパッチしてもよい。マイクロopがプロセッサ300において投機的にスケジューリング及び実行されるとき、プロセッサ300はまた、メモリミスを処理するためのロジックを有する。データキャッシュにおいてデータロードがミスした場合、一時的に誤ったデータによりスケジューラを放置したパイプラインにおいて伝送中の従属演算が存在しうる。リプレイ機構は、誤ったデータを使用する命令を追跡及び再実行するかもしれない。従属演算のみが、リプレイされる必要があり、独立演算は完了可能であるかもしれない。マイクロopの実行が完了すると、それらは、リオーダリタイアロジック310によってシーケンシャルプログラム順序にリタイアされる。
【0035】
浮動小数点実行ユニット316の一実施例は、例えば、数値例外などを含むSIMD浮動小数点演算の例外を特定するための例外回路346を有する。マイクロコードROM344又はある特殊な有限状態マシーン(例外回路346などの)に常駐するマイクロコード例外ハンドラは、数値例外に応答して、マイクロコードROM344を使用して、当該例外に遭遇したSIMD浮動小数点演算のSIMDマイクロ演算シーケンスを開始する。一実施例では、SIMDマイクロ演算は、SIMD浮動小数点演算のPacked 結果の2つのPacked部分結果を生成する。SIMD非正規化マイクロ演算は、これら2つのPakced部分結果を合成し、1以上の非正規化要素を有するSIMD浮動小数点演算のPacked結果を生成するため、合成されたPacked部分結果の1以上の要素を非正規化する。これらの要素の1以上においいて非正規化結果を特定するためのフラグが設定され、Packed部分結果と共に格納される。この場合、一部の実施例では、Packed部分結果の1つの正規化は、非正規化マイクロ演算前に要求されるかもしれない。
【0036】
マイクロコード例外ハンドラの一実施例では、マイクロコードROM344がまた、乗算であるとき、SIMD浮動小数点演算のためのSIMDマイクロ演算シーケンスの一部として、正規化された擬似的な内部浮動小数点表現を生成するため、SIMD正規化マイクロ演算を開始するのに利用されてもよい。正規化された擬似的な内部浮動小数点表現により表現される非正規化結果を特定するためのフラグが設定され、Pakced結果と共に格納されてもよい。本実施例では、SIMD浮動小数点演算が加算であるとき、SIMD正規化マイクロ演算は不要であるかもしれない。なぜなら、SIMD浮動小数点加算器は、SIMD浮動小数点加算の入力として非正規化値を含むPackedオペランドを受け入れることが可能であるためである。一部の実施例では、非正規化要素を特定し、正規化された擬似的な内部浮動小数点表現から実際の内部浮動小数点表現を再構成することを可能にするためのフラグが設定され、正規化された擬似的な内部浮動小数点表現と共に格納されるかもしれない。
【0037】
このため、上述されるようなマイクロコード支援機構は、マイクロコードROM344を使用して、SIMD浮動小数点例外を透過的に処理するようにしてもよい。
【0038】
図4は、SIMD命令を実行するプロセッサにおいて浮動小数点例外を効率的に処理するための装置460の他の実施例を示す。装置460は、浮動小数点実行ユニット316に動作接続されたレジスタファイルバイパスネットワーク308を有する。SIMD浮動小数点実行ユニット316の一実施例は、SIMD浮動小数点加算ユニット(FAU)400と、SIMD浮動小数点乗算ユニット(FMU)420とを有する。一実施例では、SIMD FAU400及び/又はSIMD FMU420はまた、浮動小数点正規化ユニット(FNU)410と、SIMD浮動小数点非正規化ユニット(FDU)430とを有してもよい。
【0039】
SIMD FAU400は、シングル精度浮動小数点値のための内部の浮動小数点表現を用いてシングル精度加算を実行可能な複数の浮動小数点加算器と、ダブル精度浮動小数点値のための内部の浮動小数点表現を用いてダブる精度加算を実行可能な複数の浮動小数点加算器とを有してもよい浮動小数点加算器401,402,...,408を有する。SIMD FAU400の一実施例では、1つおきの浮動小数点加算器401,402,...,408は、シングル精度加算とダブル精度加算の両方を実行可能である。SIMD FAU400の他の実施例では、浮動小数点加算器401,402,...,408は、それぞれシングル精度加算及び/又はダブル精度加算を実行するよう分割及び/又は合成されてもよい。浮動小数点加算器401,402,...,408の各実施例は、浮動小数点オペランド要素の仮数を揃えるための配置回路と、浮動小数点オペランド要素の仮数を加算する加算回路とを有する。
【0040】
SIMD FAU400はまた、浮動小数点加算器401,402,...,408にそれぞれ接続される例外回路441,442,...,448を有する。例外回路441,442,...,448の一部の実施例は、SIMD浮動小数点加算演算のPackedオペランドの非正規化要素を検出する非正規化検出回路と、非正規化結果を含むSIMD浮動小数点加算演算の例外結果を特定する例外生成回路と有する。例外回路441,442,...,448の各実施例はまた、特定された例外結果に応答して、マイクロopシーケンスを開始し、SIMD浮動小数点加算演算を再実行するため、マイクロコードROM344に動作接続されるかもしれない。SIMD FAU400の一部の実施例では、浮動小数点加算器401,402,...,408の配置回路は、対応する第2要素が非正規化でない場合、バイアスされていない指数差分(すなわち、バイアスされた指数差分でなく)に従って、対応する第2要素の仮数により非正規化第1要素の仮数を揃えることができるが、第1要素と第2要素の双方が非正規化であるとき、配置を変更しない。これらの実施例では、浮動小数点加算器401,402,...,408はまた、結果として得られた和がSIMD浮動小数点加算演算のPacked結果の正規化結果要素として表現可能である場合、結果としての和を(FNU410などを介し)丸め及び再正規化するようにしてもよい。浮動小数点加算器401,402,...,408(又は正規化手段411,412,...,418)の各実施例がまた、結果がSIMD浮動小数点加算演算のPacked結果の正規化結果要素として表現できないと判断された場合、Packed結果の非正規化要素として加算結果を特定するためのフラグを設定するようにしてもよい。
【0041】
レジスタファイルバイパスネットワーク308の各実施例はまた、SIMD浮動小数点演算のPacked結果を格納し、Packed結果の非正規化要素として結果要素を特定する何れかのフラグを格納するための結果ストレージ回路を有する。
【0042】
SIMD FNU410は、シングル精度浮動小数点値のための内部の浮動小数点表現を用いてシングル精度正規化を実行可能な複数の浮動小数点正規化手段と、ダブル精度浮動小数点値のための内部の浮動小数点表現を用いてダブル精度正規化を実行可能な複数の浮動小数点正規化手段とを有する浮動小数点正規化手段411,412,...,418を有する。SIMD FNU410の一実施例では、1つおきの浮動小数点正規化手段411,412,...,418が、シングル精度正規化とダブル精度正規化の双方を実行可能である。SIMD FNU410の他の実施例では、浮動小数点正規化手段411,412,...,418は、それぞれシングル及び/又はダブル精度正規化を実行するため、分割及び/又は合成されてもよい。浮動小数点正規化手段411,412,...,418の各実施例はまた、同時的なシングル及び/又はダブル精度丸め及び正規化を実行するための仮数丸め回路を有してもよい。浮動小数点正規化手段411,412,...,418の一部の実施例は、Packedオペランドの擬似的な内部浮動小数点表現への正規化において定数(10など)を利用することができるかもしれない。
【0043】
SIMD FMU420は、シングル精度浮動小数点値のための内部的な浮動小数点表現を用いてシングル精度乗算を実行可能な複数の浮動小数点乗算器と、ダブル精度浮動小数点値のための内部的な浮動小数点表現を用いてダブル精度乗算を実行可能な複数の浮動小数点乗算器とを有する浮動小数点乗算器421,422,...,428を有する。SIMD FMU420の一実施例では、1つおきの浮動小数点乗算器421,422,...,428は、シングル精度乗算とダブル精度乗算の両方を実行可能である。SIMD FMU420の他の実施例では、浮動小数点乗算器421,422,...,428は、シングル及び/又はダブル精度乗算をそれぞれ実行するため、分割及び/又は合成されてもよい。
【0044】
SIMD FMU420はまた、浮動小数点乗算器421,422,...,428に接続される例外回路451,452,...,458を有する。例外回路451,452,...,458の一部の実施例は、SIMD浮動小数点乗算演算のPackedオペランドの非正規化要素を検出する非正規化検出回路と、非正規化結果を含むSIMD浮動小数点乗算演算の例外結果を特定する例外生成回路とを有する。例外回路451,452,...,458はまた、Packedオペランドの検出された非正規化要素に応答して、又は特定された例外結果に応答して、SIMD浮動小数点乗算演算を再実行するため、マイクロopシーケンスを開始するために、マイクロコードROM344に動作接続されてもよい。
【0045】
浮動小数点乗算器421,422,...,428の各実施例は、比較に基づき例外オペランド要素との乗算のいくつかの共通結果(ゼロ、最小の表現可能な非正規化又は任意的には無限大など)を予測し、当該予測の結果を例外を回避するため乗算結果として格納する指数比較回路及び予測手段を有してもよい。他方、このような例外オペランド要素との乗算の共通結果が予測されないとき、受信したオペランドに対して乗算が実行され、発生した例外がここに開示された他の技術(プロセス801など)に従って処理されてもよい。
【0046】
SIMD FDU430は、シングル精度浮動小数点値のための内部的な浮動小数点表現を用いてシングル精度非正規化を実行可能な複数の浮動小数点非正規化手段と、ダブル精度浮動小数点値のための内部的な浮動小数点表現を用いてダブル精度非正規化を実行可能な複数の浮動小数点非正規化手段とを有する浮動小数点非正規化手段431,432,...,438を有する。SIMD FDU430の一実施例では、1つおきの浮動小数点非正規化手段431,432,...,438は、シングル精度非正規化とダブル精度非正規化の双方を実行可能である。SIMD FDU430の他の実施例では、浮動小数点非正規化手段431,432,...,438は、シングル及び/又はダブル精度非正規化を実行するため、分割及び/又は合成されてもよい。浮動小数点非正規化手段431,432,...,438の各実施例はまた、同時的なシングル及び/又はダブル精度丸め及び非正規化を実行する仮数丸め回路を有してもよい。浮動小数点非正規化手段431,432,...,438の一部の実施例は、Packed部分結果のペアの非正規化において一定の非正規化指数値(−126又は−1022など)を利用可能であるかもしれない。
【0047】
SIMD FNU410の各実施例は、正規化及び/又は非正規化コンポーネントの浮動小数点要素を有するPackedオペランドの擬似的な内部浮動小数点表現を生成するよう動作可能であってもよい。SIMD FAU400とSIMD FMU420の各実施例は、正規化モードでは正規化コンポーネントの浮動小数点要素を有する1つのPacked結果を生成するよう動作可能であり、数値例外処理モードでは正規化及び/又は非正規化コンポーネントの浮動小数点要素を有するPacked結果の2つのPacked部分結果を生成するよう動作可能であってもよい。数値例外処理モードの一実施例では、フェーズ1Packed部分結果とフェーズ2Packed部分結果とが、2つのPacked部分結果を構成するように、レジスタファイルの別々の格納位置に格納されるかもしれない(時間的順序において異なって又は同時に)。マイクロコードROM344の各実施例はまた、SIMD FAU400とSIMD FMU420に、それらが数値例外処理モードのフェーズ1又はフェーズ2において実行しているか示すためのマイクロopを有してもよい。SIMD FDU430の各実施例は、正規化及び/又は非正規化コンポーネントの浮動小数点要素を有するPacked結果の2つのPacked部分結果を受信し、正規化及び/又は非正規化コンポーネントの浮動小数点要素を有する1つのPacked結果を生成するよう動作可能であってもよい。
【0048】
図5aは、Packed浮動小数点数の内部表現を格納するための一例となるストレージフォーマット510と502とを示す。フォーマット501と502は、シングル精度浮動小数点数のペアを用いて示されるが、フォーマット501,502は、典型的には、より広範なPacked浮動小数点オペランド(例えば、4つのシングル精度要素又は2つのダブル精度要素を有するPackedオペランド、又は8つのシングル精度要素又は4つのダブル精度要素を有するPackedオペランドなど)を単に示している。
【0049】
フォーマット501は、SIMD浮動小数点演算のためのPackedシングル精度デスティネーションオペランドのPacked部分結果のペア(レジスタファイルバイパスネットワーク308などのSIMDレジスタファイルにおける)の一例を示す。フォーマット501は、シングル精度要素のペアを有し、各ペアは、符号ビット(S511)、10の指数ビット(Ex519及びExp8 512)、及び28の仮数ビット(O515、イクスプリットビットJ516、Mant23 513及びGRS517)を有する第1要素と、符号ビット(S521)、10の指数ビット(Ex529及びExp8 522)、及び28の仮数ビット(O525、イクスプリットビットJ526、Mant23 523及びGRS527)を含む第2要素の39ビットを有する。フォーマット501は、第1要素及び/又は第2要素がそれぞれ非正規化要素であるか特定するためのフラグビットIMDN514及び524のペアを含む。
【0050】
フォーマット501の一実施例では、シングル精度要素のペアのコンポーネントが、2つのPackedデータレジスタに格納される。第1Packedデータレジスタは、フラグビットIMDN514,524のペア、符号ビットS521(ビット63など)、指数ビットExp8 522(ビット62〜55など)、仮数ビットMant23 523(ビット54〜32など)、符号ビットS511(ビット31など)、指数ビットExp8 512(ビット30〜23など)、及び仮数ビットMant23 513(ビット22〜0など)を有し、第2Packedデータレジスタは、2つの最上位仮数ビットO525とJ526(ビット63と59など)、指数ビットEx529(ビット62〜61など)、3つの最下位仮数ビットGRS527(ビット42〜40など)、2つの最上位仮数ビットO515とJ516(ビット34〜33など)、指数ビットEx519(ビット32〜31など)、及び3つの最下位仮数ビットGRS517(ビット6〜4など)を有する。
【0051】
Packed要素のコンポーネントがPacked部分結果のペアとして2つのPackedデータレジスタに格納される特定位置は、Packed部分結果のペアからのPacked要素のコンポーネントを浮動小数点計算ユニット(非正規化のためのSIMD FAU400及び/又はSIMD FDU430など)の内部浮動小数点表現に多重化することを容易にするため、設計者により選択されるかもしれないことは理解されるであろう。
【0052】
フォーマット502は、SIMD浮動小数点演算のためのPackedソースオペランドの内部浮動小数点表現(FAU400などの浮動小数点計算ユニットなどにおける)の一例を示す。フォーマット501と同様に、フォーマット502は、シングル精度要素のペアの内部表現を有する。それぞれは、符号ビット(S511)、10の指数ビット(Ex519及びExp8 512)、及び28の仮数ビット(O515,J516,Mant23 513及びGRS517)を含む第1要素と、符号ビット(S521)、10の指数ビット(Ex529及びExp8 522)、及び28の仮数ビット(O525,J526,Mant23 523,GRS527)を含む第2要素との39ビットを有する。フォーマット502の一実施例では、浮動小数点計算ユニットの内部浮動小数点表現は、第1要素のためのEx519とExp8 512(ビット9〜0など)と、第2要素のためのEx529及びExp8 522(ビット9〜0など)とを別々の指数を格納する。フォーマット502の本実施例では、これら2つの要素の仮数は、Packed仮数として格納され、第1仮数は、O515(ビット67など)、J516(ビット66など)、Mant23 513(ビット65〜43など)及びGRS517(ビット42〜40など)を有し、第2仮数は、O525(ビット31など)、J526(ビット30など)、Mant23 523(ビット29〜7など)及びGRS527(ビット6〜4など)を有し、それぞれの最下位ビットにゼロパディングを有する(ビット39〜32とビット3〜0など)。
【0053】
図5bは、Packed浮動小数点数の内部表現を格納するための一例となるストレージフォーマット503,504を示す。フォーマット503,504は、1つのダブル精度浮動小数点数を用いて示されるが、フォーマット503,504は、典型的には、広範なPacked浮動小数点オペランド(4つのシングル精度要素又は2つのダブル精度要素を有するPackedオペランド、又は8つのシングル精度要素又は4つのダブル精度要素を有するPackedオペランドなど)を単に示す。
【0054】
フォーマット503は、SIMD浮動小数点演算のPackedオペランドのダブル精度デスティネーションオペランド要素のPacked部分結果のペア(レジスタファイルバイパスネットワーク308などのSIMDレジスタファイルにおける)の一例を示す。フォーマット503は、符号ビット(S531)、13以上の指数ビット(Ex539及びExp11 532)、及び57の仮数ビット(O535、イクスプリシットビットJ536、Mant52 533及びGRS537)を含む71以上のビットを有するダブル精度要素のPacked部分結果のペアを含む。フォーマット503は、各ダブル精度要素に係り、当該要素が非正規化要素であるか特定するフラグビットIMDN534を有する。
【0055】
Packed要素のコンポーネントがPacked部分結果のペアとして2つのPackedデータレジスタに格納される具体的な位置が、Packed部分結果のペアからのPacked要素のコンポーネントを浮動小数点計算ユニットの内部的な浮動小数点表現に多重化することを容易にするよう設計者により選択されるかもしれない。
【0056】
フォーマット504は、SIMD浮動小数点演算のPackedオペランドのPackedソースオペランド要素の内部的な浮動小数点表現(FAU400などの浮動小数点計算ユニットにおける)の一例を示す。フォーマット503と同様に、フォーマット504は、符号ビット(S531)、13以上の指数ビット(Ex539及びExp11 532)、及び57の仮数ビット(O535,J536,Mant52 533,GRS537)を含む71以上のビットを有するダブル精度要素の内部表現を含む。フォーマット504の一実施例では、浮動小数点計算ユニットの内部的な浮動小数点表現は、各要素について別々の指数Ex539及びExp11 532を格納する(ビット16〜0など)。フォーマット504の本実施例では、Packed要素の仮数は、Packed仮数として格納されてもよく、第1仮数は、それぞれの最下位ビットにゼロパディングを有する(ビット10〜0など)、O535(ビット67など)、J536(ビット66など)、Mant52 533(ビット65〜14など)及びGRS537(ビット14〜11など)を有する。
【0057】
内部的なストレージフォーマット501〜504を用いて、Packed浮動小数点データは固定サイズのレジスタに格納され、SIMD浮動小数点例外は、スカラー演算に変換し、少数のさらなるマイクロ演算の実行しか必要とすることなく、透過的に処理されるかもしれない。また、フォーマット501,502,503及び/又は504の実施例では、いくつかのビット(O525,J526,O535及び/又はJ536など)がインプリシットに表現されることは理解されるであろう。
【0058】
図6は、SIMD浮動小数点加算器における特定の数値例外を処理するためのプロセス602の一実施例のフロー図を示す。ここに開示されるプロセス601と他のプロセスは、専用のハードウェア、又は汎用マシーン、特定用途マシーン若しくはこれらの組み合わせにより実行可能なソフトウェア若しくはファームウェア処理コードを有する処理ブロックにより実行される。ここに開示されるプロセス601と他のプロセスの一部の実施例は、マシーン実行可能な命令又は状態遷移により実現される。これらの命令又は状態遷移は、命令又は状態遷移によりプログラムされる汎用又は特定用途プロセッサに本発明の各ステップを実行させるのに利用可能である。
【0059】
本発明は、本発明のプロセスを実行するようコンピュータ(又は他の電子装置)をプログラムするのに利用可能な命令又は状態遷移を格納したマシーン若しくはコンピュータ可読媒体を有するコンピュータプログラムプロダクト又はソフトウェア若しくはマイクロコードパッチとして提供されてもよい。このようなソフトウェアは、システム又はネットワークサーバのメモリ内に格納可能である。同様に、コードは、ネットワークを介し又は他のコンピュータ可読媒体により配布可能である。このため、マシーン可読媒体は、マシーン(コンピュータなど)により可読な形式により情報を格納又は送信するための何れかの機構を有してもよく、限定されることなく、フロッピー(登録商標)ディスケット、光ディスク、CD(Compact Disc)、CD−ROM(Compact Disc−Read Only Memory)、光磁気ディスク、ROM(Read Only Memory)、RAM(Random Access Memory)、EPROM(Erasable Programmable ROM)、EEPROM(Electrically EPROM)、磁気若しくは光カード、フラッシュメモリ、インターネット、電気、光、音響若しくは他の形式の伝搬信号の伝送を含む。
【0060】
処理ブロック611において開始され、SIMD浮動小数点加算演算のPackedオペランドの非正規化オペランド要素が、SIMD FAUの浮動小数点加算回路の1つに受付される。処理ブロック612において、SIMD浮動小数点加算演算の第2Packedオペランドの対応する第2エペランド要素がまた非正規化であるか判断される。一実施例では、非正規化オペランドと対応する第2オペランドとが、非正規化検出回路により検出されてもよい(回路441〜448の1つなど)
対応する第2オペランド要素が非正規化でない場合、非正規化オペランド要素と対応する第2オペランド要素とが、処理ブロック613においてアライメント回路に入力され、非正規化オペランド要素の仮数がバイアスされていない指数差分に従って、対応する第2オペランド要素の仮数に揃えられる。そうでない場合、対応する第2オペランド要素がまた非正規化である場合、非正規化オペランド要素と対応する第2オペランド要素の仮数はすでに揃えられており、このため、処理は直接処理ブロック614に移行して、仮数が浮動小数点加算回路により加算される。
【0061】
処理ブロック615において、加算の結果がSIMD浮動小数点加算演算のPacked結果の正規化浮動小数点の結果の要素として表現できるか判断される。そうである場合、処理ブロック616において結果としての和が正規化される。そうでない場合、結果としての和は、処理ブロック617において単に丸められ、処理ブロック618において再び正規化され(Oが1に等しい場合、1ビットだけ右シフトされるなど)、SIMD浮動小数点加算演算のPacked結果が処理ブロック619において格納されると、非正規化結果がPacked結果の要素として格納されてもよい。SIMD浮動小数点加算演算のPacked結果を格納する結果ストレージ回路がまた、処理ブロック615において、結果としての和が正規化浮動小数点の結果要素として表現できないと判断された場合、結果としての和を特定するフラグをPacked結果の非正規化結果要素として格納してもよいことが理解されるであろう。
【0062】
プロセス601の各実施例はさらなる支援を必要とすることなく(マイクロコードなどから)、SIMD実行ユニット(SIMD浮動小数点実行ユニット316など)におけるSIMD浮動小数点演算における非正規化などの共通する例外入力を処理するかもしれないということが理解されるであろう。
【0063】
図7は、SIMD浮動小数点乗算器において特定の共通の(マスクされた)例外を処理するプロセス701の一実施例のフロー図を示す。処理ブロック711において、SIMD浮動小数点乗算演算のPackedオペランドの例外オペランド要素は、SIMD FMUの浮動小数点乗算回路の1つにおいて受付される。処理ブロック712において、対応するオペランド要素の指数が比較される。この比較に基づき、例外オペランド要素による乗算の対応する結果の予測が、処理ブロック713において行われる。処理ブロック714において、この結果がゼロであると予想された場合、処理は処理ブロック717に移行し、予測されたゼロの値が結果として格納される。そうでない場合、処理は処理ブロック715に移行し、結果が表現可能な最小の非正規化となるよう予測される場合、処理は処理ブロック717に移行して、予測された表現可能な最小の非正規化値が結果として格納される。そうでない場合、処理は、任意的には処理ブロック716に継続し、結果が無限大であると予測された場合、処理は処理ブロック717に移行して、予測された無限大の値が結果として格納される。そうでない場合、処理ブロック718において、乗算が受け付けたオペランドに対して実行され、発生した例外が、ここに開示される他の技術に従って処理される(プロセス801などのように)。
【0064】
プロセス701の各実施例は、さらなる支援を必要とすることなく(マイクロコードなどから)SIMD実行ユニット(SIMD浮動小数点実行ユニット316など)においてSIMD浮動小数点演算の共通する例外結果を予測及び処理するようにしてもよいことが理解されるであろう。このように通常発生するケースでは、例外ケースを処理するためのペナルティは実質的に解消又は軽減されるかもしれない。あるいは、スカラー演算に変換し、少数の追加的なマイクロ演算しか実行することを要することなく、SIMD浮動小数点例外を処理するための技術が、残りのケースにおいて利用されてもよい。
【0065】
図8は、SIMD浮動小数点命令を実行するプロセッサにおいて非正規化浮動小数点例外を処理するプロセス801の他の実施例のフロー図を示す。処理ブロック811において、SIMD浮動小数点演算のための数値例外が特定される。数値例外に応答して、必要に応じて1以上の任意的な正規化マイクロ演算が処理ブロック812において開始される。プロセス810の一実施例では、正規化マイクロ演算は、SIMD浮動小数点演算がSIMD浮動小数点乗算器によって少なくとも部分的に実行される場合に開始される(乗算、除算、平方根又はシングルからダブル精度への変換など)。正規化マイクロ演算の結果として、Packedオペランドは、非正規化を有したSIMD浮動小数点演算のオリジナルのPackedオペランドの正規化された擬似的な内部浮動小数点表現として格納されてもよい。プロセス801の一実施例では、SIMD浮動小数点加算器が入力として非正規化を含むオペランドを受付可能であるとき、SIMD浮動小数点演算がSIMD浮動小数点かさっきにより実行される場合(加算/減算又はダブルからシングル精度への変換など)、正規化マイクロ演算は不要である。
【0066】
処理ブロック813において、第1SIMDマイクロ演算がSIMD浮動小数点演算の第1Packed部分結果を生成するため開始され、第2SIMDマイクロ演算が、SIMD浮動小数点演算の第2Packed部分結果を生成するため開始される。プロセス801の一部の実施例では、第1及び第2SIMDマイクロ演算は、それらがSIMD浮動小数点演算のPacked結果に対して格納されるPacked部分結果のペアを生成する限り、何れかの順序により実行されてもよいことが理解されるであろう。
【0067】
処理ブロック814において、SIMD非正規化マイクロ演算が、Packed部分結果のペアを合成し、必要に応じて対応する非正規化要素を有するPacked結果を生成するよう合成されたPacked部分結果の何れかの要素を非正規化するよう開始される。SIMD FAU400の一部の実施例では、Packed部分結果のペアの合成はまた、数値例外処理モードのフェーズ1においてPacked部分結果を正規化することを含むかもしれない。処理ブロック815において、Packed結果の非正規化要素を特定するため、例外フラグ(IMDN514及び524又は534など)が計算される。これらの例外フラグは、処理ブロック816において、SIMD浮動小数点演算のPacked結果と共に結果として格納される。
【0068】
プロセス801の各実施例は、非正規化を生成し、再実行を必要とするSIMD浮動小数点例外を処理するために利用可能な効率的な技術を提供することが理解されるであろう。このような例外は、スカラー演算に変換し、少数の追加的なマイクロ演算の実行しか必要とすることなく、透過的に処理されるかもしれない。
【0069】
上記説明は、本発明の好適な実施例を示すためのものである。上記説明から、特に成長が速くさらなる進歩が容易には予想されない技術分野において、本発明は、添付した請求項とそれの均等の範囲内の本発明の原理から逸脱することなく、当業者により構成及び詳細について変更可能であることが明らかである。
【符号の説明】
【0070】
200 システム
203 実行ユニット
207 キャッシュメモリ
208 レジスタファイル
209 Packed命令セット
210 プロセッサバス
220 メモリ
300 プロセッサ

【特許請求の範囲】
【請求項1】
SIMD(Single−Instruction Multiple−Data)命令を実行するプロセッサにおいて浮動小数点例外を処理する方法であって、
SIMD浮動小数点演算の数値例外を特定するステップと、
前記SIMD浮動小数点演算の第1Packed部分結果を生成するため、第1SIMDマイクロ演算を開始するステップと、
前記SIMD浮動小数点演算の第2Packed部分結果を生成するため、第2SIMDマイクロ演算を開始するステップと、
前記第1及び第2Packed部分結果を合成し、前記合成された第1及び第2Packed部分結果の第1要素を非正規化して非正規化要素を有する第3Packed結果を生成するため、SIMD非正規化マイクロ演算を開始するステップと、
前記SIMD浮動小数点演算の第3Packed結果を格納するステップと、
前記第3Packed結果の非正規化要素を特定するフラグを前記第1Packed部分結果に設定するステップと、
を有し、
前記SIMD浮動小数点演算の第1及び第2Packed部分結果を生成するのに用いられる1以上のPackedソースオペランドのセットが、それらの元の表現の幅で格納される方法。
【請求項2】
前記SIMD浮動小数点演算の第1Packed部分結果に対するSIMD正規化マイクロ演算を開始するステップをさらに有する、請求項1記載の方法。
【請求項3】
前記第1SIMDマイクロ演算を開始する前に前記第2SIMDマイクロ演算を開始するステップをさらに有する、請求項1記載の方法。
【請求項4】
前記SIMD浮動小数点演算がSIMD浮動小数点乗算器において少なくとも部分的に実行される場合、第3SIMDマイクロ演算を開始するステップをさらに有する、請求項1記載の方法。
【請求項5】
前記SIMD浮動小数点演算が前記SIMD浮動小数点乗算器において少なくとも部分的に実行される場合、前記第3SIMDマイクロ演算を開始しないステップをさらに有する、請求項4記載の方法。
【請求項6】
SIMD(Single−Instruction Multiple−Data)浮動小数点演算の数値例外を処理するための命令及びデータを格納する非一時的なマシーンアクセス可能な記憶媒体を有する製造物であって、
前記命令は、マシーンによりアクセスされると、前記マシーンに、
前記SIMD浮動小数点演算の第1Packed部分結果を生成するため、第1SIMDマイクロ演算を開始するステップと、
前記SIMD浮動小数点演算の第2Packed部分結果を生成するため、第2SIMDマイクロ演算を開始するステップと、
前記第1及び第2Packed部分結果を合成し、前記合成された第1及び第2Packed部分結果の第1要素を非正規化して非正規化要素を有する第3Packed結果を生成するため、SIMD非正規化マイクロ演算を開始するステップと、
前記SIMD浮動小数点演算の第3Packed結果を格納するステップと、
前記第3Packed結果の非正規化要素を特定するフラグを前記第1Packed部分結果に設定するステップと、
を実行させ、
前記SIMD浮動小数点演算の第1及び第2Packed部分結果を生成するのに用いられる1以上のPackedソースオペランドのセットが、それらの元の表現の幅で格納される製造物。
【請求項7】
前記命令は、マシーンによりアクセスされると、前記マシーンに、前記SIMD浮動小数点演算の第1Packed部分結果に対してSIMD正規化マイクロ演算を開始するステップを実行させる、請求項6記載の製造物。
【請求項8】
前記命令は、マシーンによりアクセスされると、前記マシーンに、前記第1SIMDマイクロ演算の開始前に前記第2SIMDマイクロ演算を開始するステップを実行させる、請求項6記載の製造物。
【請求項9】
前記命令は、マシーンによりアクセスされると、前記マシーンに、前記SIMD浮動小数点演算がSIMD浮動小数点乗算器において少なくとも部分的に実行される場合、前記第3SIMDマイクロ演算を開始するステップを実行させる、請求項6記載の製造物。
【請求項10】
前記命令は、マシーンによりアクセスされると、前記マシーンに、前記SIMD浮動小数点演算がSIMD浮動小数点乗算器において少なくとも部分的に実行されない場合、前記第3SIMDマイクロ演算を開始しないステップを実行させる、請求項6記載の製造物。
【請求項11】
SIMD(Single−Instruction Multiple−Data)浮動小数点演算について複数のPacked浮動小数点オペランドと複数のPacked浮動小数点結果とを格納するレジスタファイルと、
第1SIMD浮動小数点演算の数値例外を特定する例外生成回路と、
前記数値例外に応答して、前記SIMD浮動小数点演算の第1Packed結果を生成するため、第1SIMDマイクロ演算を開始するマイクロコード例外ハンドラと、
を有するプロセッサであって、
前記マイクロコード例外ハンドラはさらに、
前記数値例外に応答して、前記SIMD浮動小数点演算の第2Packed結果を生成するため、第2SIMDマイクロ演算を開始し、
前記数値例外に応答して、前記第1及び第2Packed結果を合成し、前記合成された第1及び第2Packed結果の要素を非正規化し、前記非正規化要素を有する第3Packed結果を生成し、前記SIMD浮動小数点演算の第3Packed結果を格納し、前記第3Packed結果の非正規化された第1要素を特定するフラグを前記第1Packed結果に設定する、SIMD非正規化マイクロ演算を開始し、
前記SIMD浮動小数点演算の第1及び第2Packed部分結果を生成するのに用いられる1以上のPackedソースオペランドのセットが、それらの元の表現の幅で格納されるプロセッサ。
【請求項12】
シングル精度及びダブル精度の加算を実行する浮動小数点加算手段と、
オペランド及び結果の非正規化要素を検出する例外回路と、
を有する、請求項11記載のプロセッサ。
【請求項13】
シングル精度及びダブル精度の乗算を実行する浮動小数点乗算手段と、
オペランド及び結果の非正規化要素を検出する例外回路と、
を有する、請求項11記載のプロセッサ。
【請求項14】
シングル精度及びダブル精度の非正規化を実行する浮動小数点非正規化手段を有する、請求項11記載のプロセッサ。
【請求項15】
SIMD(Single−Instruction Multiple−Data)浮動小数点実行手段を有するプロセッサを有する装置であって、
前記SIMD浮動小数点実行手段は、
シングル精度及びダブル精度の加算を実行し、オペランド及び結果の非正規化要素を検出する例外回路を有する浮動小数点加算手段と、
シングル精度及びダブル精度の乗算を実行し、オペランド及び結果の非正規化要素を検出する例外回路を有する浮動小数点乗算手段と、
シングル精度及びダブル精度の非正規化を実行する浮動小数点非正規化手段と、
SIMD浮動小数点演算の第1Packed部分結果を生成する第1SIMDマイクロ演算と、前記第1SIMD浮動小数点演算の第2Packed部分結果を生成する第2SIMDマイクロ演算と、前記第1SIMD浮動小数点演算の第1Packed部分結果と第2Packed部分結果とを合成紙、非正規化要素を有する第3Packed結果を生成するため前記合成された第1及び第2Packed部分結果の第1要素を非正規化するSIMD非正規化マイクロ演算とを含む複数のSIMDマイクロ演算を格納するマイクロコードストレージと、
を有し、
前記プロセッサは、前記第1SIMD浮動小数点演算の第1及び第2Packed部分結果を生成するのに用いられる1以上のPackedソースオペランドのセットをそれらの元の表現の幅で格納し、
前記第3Packed結果の非正規化要素を特定するフラグが、前記第1Packed部分結果と共に格納される装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5a】
image rotate

【図5b】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2013−50965(P2013−50965A)
【公開日】平成25年3月14日(2013.3.14)
【国際特許分類】
【出願番号】特願2012−222612(P2012−222612)
【出願日】平成24年10月5日(2012.10.5)
【分割の表示】特願2009−152985(P2009−152985)の分割
【原出願日】平成21年6月26日(2009.6.26)
【出願人】(593096712)インテル コーポレイション (931)
【Fターム(参考)】