本明細書において、複数の3ソースオペランド浮動小数点加算命令と、当該命令を実行する複数のプロセッサと、当該命令を処理又は実行する場合、当該複数のプロセッサにより実行される複数の方法と、当該命令を処理又は実行する1つ又は複数のプロセッサを組み込む複数のシステムとが開示される。以下の説明において、多数の具体的な詳細(例えば、複数の特定の命令オペレーション、データフォーマット、プロセッサ構成、マイクロアーキテクチャ上の詳細、一連のオペレーションなど)が記載される。しかし、複数の実施形態は、これらの具体的な詳細なしで実施され得る。他の例では、複数の周知回路、構造、及び技術は、本説明の理解を曖昧にすることを回避するために詳細に示されていない。
図1は、3ソース浮動小数点加算命令102の実施形態を実行するよう動作可能なプロセッサ100の実施形態のブロック図である。いくつかの実施形態において、プロセッサは、(例えば、多くの場合、デスクトップ、ラップトップ、又は他のコンピュータに用いられる種類の)汎用プロセッサであってよい。代替的に、プロセッサは、専用プロセッサであってよい。適した専用プロセッサの複数の例としては、複数のグラフィックスプロセッサ、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、コプロセッサ、エンベデッドプロセッサ、デジタルシグナルプロセッサ(DSP)、コントローラ(例えば、マイクロコントローラ)を含むが、これらに限定されない。プロセッサは、様々な複合命令セットコンピューティング(CISC)プロセッサ、様々な縮小命令セットコンピューティング(RISC)プロセッサ、様々な超長命令語(VLIW)プロセッサ、これらの様々なハイブリッド、又は他の種類のプロセッサのうちの何れかであり得る。
オペレーションの間、プロセッサ100は、3ソース浮動小数点加算命令102の実施形態を受信し得る。例えば、3ソース浮動小数点加算命令は、命令フェッチユニット、命令キュー、又は同様のものから受信され得る。3ソース浮動小数点加算命令は、マクロ命令、アセンブリ言語命令、機械コード命令、若しくは、プロセッサの命令セットの命令又は制御信号を表し得る。
いくつかの実施形態において、3ソース浮動小数点加算命令は、少なくとも第1の浮動小数点データ要素を含む第1のソースオペランド112を明示的に指定してよく(例えば、1つ又は複数のフィールド又はビットの一のセットを通じて)、あるいは示してよく(例えば、暗黙的に示してよく、エミュレーションレジスタマッピングを通じてそのレジスタにマッピングされてよい、など)、少なくとも第2の浮動小数点データ要素を含む第2のソースオペランド114を指定してよく、あるいは示してよく、少なくとも第3の浮動小数点データ要素を含む第3のソースオペランド116を指定してよく、あるいは示してよく、結果118が格納されるべきデスティネーションオペランド(例えば、デスティネーション記憶位置)を指定してよく、あるいは示してよい。
再び図1を参照すると、プロセッサは、復号ユニット又はデコーダ104を備える。復号ユニットは、3ソース浮動小数点加算命令102を受信して復号し得る。復号ユニットは、1つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリーポイント、復号された命令又は制御信号、若しくは3ソース浮動小数点加算命令を反映し、表し、及び/又はそこから派生された他の比較的下位命令又は制御信号を出力し得る。当該1つ又は複数の下位命令又は制御信号は、1つ又は複数の下位レベル(例えば、回路レベル又はハードウェアレベル)のオペレーションを通じて、上位レベルの3ソース浮動小数点加算命令を実行し得る。いくつかの実施形態において、復号ユニットは、命令を受信する1つ又は複数の入力構造(例えば、ポート、相互接続、インターフェースなど)と、入力構造に結合され、命令を受信し、認識し、1つ又は複数の対応する下位命令又は制御信号に復号する命令認識及び復号ロジックと、命令認識及び復号ロジックに結合され、1つ又は複数の対応する下位命令又は制御信号を出力する1つ又は複数の出力構造(例えば、ポート、相互接続、インターフェースなど)とを含んでよい。復号ユニットは、複数のマイクロコードリードオンリメモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、及び当技術分野において既知の他の機構を含む様々な異なる機構を用いて実装され得るが、これらに限定されない。
いくつかの実施形態において、復号ユニットに直接提供される3ソース浮動小数点加算命令の代わりに、命令エミュレータ、トランスレータ、モルファ、インタープリタ、又は他の命令変換モジュールが選択的に用いられ得る。様々な異なる種類の命令変換モジュールは、当技術分野において既知であり、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせに実装され得る。いくつかの実施形態において、命令変換モジュールは、例えば、別個のダイ上及び/又はメモリになど、命令処理プロセッサの外部に配置され得る(例えば、静的、動的、又はランタイム命令エミュレーションモジュールとして)。例として、命令変換モジュールは、第1の命令セットに属し得る3ソース浮動小数点加算命令を受信してよく、3ソース浮動小数点加算命令をエミュレートし、トランスレートし、モーフィングし、解釈してよく、あるいは第2の異なる命令セットに属し得る1つ又は複数の対応する又は派生された中間命令又は制御信号に変換してよい。第2の命令セットの1つ又は複数の中間命令又は制御信号は、復号ユニットに提供されてよく、復号ユニットは、受信された、第2の命令セットの1つ又は複数の命令又は制御信号を、プロセッサのネイティブなハードウェア(例えば、1つ又は複数の実行ユニット)により実行可能な1つ又は複数の下位命令又は制御信号に復号し得る。
プロセッサはまた、レジスタ110のセットを備える。複数のレジスタのそれぞれは、浮動小数点データを格納するよう動作可能なオンダイの記憶位置を表し得る。例として、複数のレジスタは、複数の浮動小数点データ要素を格納するよう動作可能な浮動小数点レジスタ、複数のパックド又はスカラ浮動小数点データ要素を格納するよう動作可能なパックドデータレジスタ、又は同様のものであり得る。複数のレジスタは、ソフトウェア及び/又はプログラマに可視のアーキテクチャ的又はアーキテクチャ的に可視で、及び/又は、プロセッサの命令セットの複数の命令により示されて複数のオペランドを識別するレジスタであるレジスタ(例えば、アーキテクチャレジスタファイル)を表し得る。これらのアーキテクチャレジスタは、所与のマイクロアーキテクチャにおける他の非アーキテクチャ的、又は非アーキテクチャ的に可視のレジスタ(例えば、一時レジスタ、リオーダバッファ、リタイアメントレジスタなど)とは対照的である。レジスタは、周知技術を用いて異なるマイクロアーキテクチャに異なる態様で実装されてよく、いかなる特定の種類の回路にも限定されない。適した種類のレジスタの複数の例は、複数の専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられる物理レジスタ、及びこれらの組み合わせを含むが、これらに限定されない。
いくつかの実施形態において、第1のソースオペランド112は、そのセットの第1レジスタに選択的に格納されてよく、第2のソースオペランド114は、そのセットの第2のレジスタに選択的に格納されてよく、第3のソースオペランド116は、そのセットの第3レジスタに選択的に格納されてよく、デスティネーションオペランドは、そのセットの第4レジスタに選択的に格納されてよい。いくつかの場合において、デスティネーションオペランドに用いられるレジスタは、第1、第2、第3のソースオペランドに用いられる複数のレジスタと異なってよい。他の場合において、複数のソースオペランドのうちの1つに用いられるレジスタは、デスティネーションオペランドのために再利用されてよい(例えば、その結果は、複数のソースオペランドのうちの1つに書き込まれ得る)。代替的に、複数のメモリ位置又は他の記憶位置は、これらのオペランドのうちの1つ又は複数に選択的に用いられてよい。
再び図1を参照すると、実行ユニット106は、復号ユニット104とレジスタ110のセットとに結合される。いくつかの実施形態において、以下においてさらに説明されるように、実行ユニットはまた、選択的なパックドデータオペレーションマスクレジスタ120及び/又は選択的なパックドデータオペレーションマスク122に結合され得るが、このことは必須ではない。実行ユニットは、3ソース浮動小数点加算命令を表し、及び/又はそこから派生された、1つ又は複数の復号された、あるいは変換された命令又は制御信号を受信し得る。実行ユニットはまた、少なくとも第1の浮動小数点データ要素を含む第1のソースオペランド112と、少なくとも第2の浮動小数点データ要素を含む第2のソースオペランド114と、少なくとも第3の浮動小数点データ要素を含む第3のソースオペランド116とを受信し得る。実行ユニットは、3ソース浮動小数点加算命令に応じて、及び/又はその結果として(例えば、直接又は間接的に(例えば、エミュレーションを通じて)命令から復号された1つ又は複数の命令又は制御信号に応じて)、命令により示されるデスティネーションオペランドに結果118を格納するよう動作可能である。いくつかの実施形態において、結果は、少なくとも第1、第2、及び第3の浮動小数点データ要素に対応する結果浮動小数点データ要素を含み得る。いくつかの実施形態において、結果浮動小数点データ要素は、少なくとも第1の浮動小数点の丸められた和を含み得る。第1の浮動小数点の丸められた和は、浮動小数点数であり、適切な場合に浮動小数点の丸めを用いて丸められている。いくつかの実施形態において、第1の浮動小数点の丸められた和は、第2の浮動小数点の丸められた和と第3の浮動小数点データ要素との相加的組み合わせを表し得る。いくつかの実施形態において、第2の浮動小数点の丸められた和は、第1の浮動小数点データ要素と第2の浮動小数点データ要素との相加的組み合わせを表し得る。いくつかの実施形態において、結果は、図3から6のうちの何れかに対して示されて説明されるもののうちの何れかであってよいが、本願発明の範囲はそのように限定されない。
明確にするために、本明細書に用いられているように、第1の値と第2の値との「相加的組み合わせ」という用語は、第1及び第2の値のどちらもネゲートされないこと、若しくは何れか又は両方がネゲートされることを可能にする合計を指すのに用いられる。例えば、第2の浮動小数点の丸められた和と第3の浮動小数点データ要素との相加的組み合わせは、第2の浮動小数点の丸められた和に第3の浮動小数点データ要素が加算された合計、又は、第3の浮動小数点データ要素のネゲーションに第2の浮動小数点の丸められた和が加算された合計を含み得る。同様に、第1及び第2の浮動小数点データ要素の相加的組み合わせは、第2の浮動小数点データ要素に第1の浮動小数点データ要素が加算された合計、第2の浮動小数点データ要素のネゲーションに第1の浮動小数点データ要素が加算された合計、第2の浮動小数点データ要素のネゲーションに第1の浮動小数点データ要素のネゲーションが加算された合計、又は、第2の浮動小数点データ要素に第1の浮動小数点データ要素のネゲーションが加算された合計を含み得る。以下にてさらに説明されるように、全てではないが、いくつかの実施形態は、データ要素のうちの任意の1つ、2つ、又は全てを加算の前に選択的にネゲートされることを選択的に可能にし得るが、このことは必須ではない(例えば、別の実施形態ではそのようなネゲーションの機能を可能にしない)。
有利には、3ソース浮動小数点加算命令は、単一の命令(例えば、マクロ命令、命令セットの命令、など)の実行の制限範囲内に2つの加算を実行し得る。従来、2つの異なる命令が必要とされていた。1つの命令で両方の加算を実行する能力は、一定の性能及び/又は電力に対する利点を提供する傾向があり得る。ひとつには、両方の加算は、2つの別個の命令を復号することの代わりに、単一の命令を復号することを通じて実行され得る。これは、別の命令のための復号スロットを空けることによって命令復号スループットを増加させるのに役に立ち得る。これは、1つ少ない命令が復号されて2つの加算を遂行するので、電力消費量を低減させることにも役に立ち得る。2つ目の加算を実行するために、アーキテクチャレジスタへの2つの加算のうちの1つの中間合計の書き込みと、アーキテクチャレジスタからの中間合計の後続の読み取りとを回避することによって、複数の性能向上がまた、達成され得る。そのようなアーキテクチャレジスタへの書き込み及びそれからの読み取りは、概して、追加の時間又は待ち時間を(例えば、2〜3のクロックサイクルのオーダで)招く。これはまた、アーキテクチャレジスタを拘束することを回避することに役に立ち得て、レジスタリネーミングオペレーションの数を低減させることの助けになり得る。複数の読み取り、書き込み、及びレジスタリネーミングオペレーションを取り除くことはまた、電力消費を低減させるのに役に立ち得る。特定のプロセッサにとって、電力消費を低減させること自体が、特定のプロセッサ(例えば、特に高性能コンピューティング用に用いられるもの)が、利用可能な電力消費外枠により制限されるようになる性能を有する傾向があり得るので、向上した性能に繋がり得る。従って、電力消費を低減させることはまた、向上した性能に繋がり得る。
浮動小数点の丸めは、浮動小数点オペレーション(例えば、浮動小数点加算)の正確な結果が仮数部にある桁より多くの桁を必要とする場合に用いられ得る。いくつかの実施形態において、結果は、単一の浮動小数点の丸めオペレーションの代わりに、2つの異なる浮動小数点の丸めオペレーションを反映し得る。具体的に、第1の最初の浮動小数点の丸めオペレーションが、第1の丸められた和を生成すべく、第1及び第2の浮動小数点データ要素に関連する合計のために実行されてよく、次に、第2の後続の浮動小数点の丸めオペレーションが、第3の浮動小数点データ要素と第1の丸められた和との合計のために実行されてよい。以下にてさらに説明されるように、これらの2つの浮動小数点の丸めオペレーションは、命令のマイクロアーキテクチャ上の実装を反映し得る。例えば、いくつかの実施形態において、命令を実装するのに用いられるマイクロアーキテクチャでは、3つの浮動小数点値の同時加算ができないロジックを用い得る。一例として、以下にてさらに説明されるように、2つの浮動小数点加算器は、直列に用いられてよく、それぞれが2つの浮動小数点値のみの同時加算を実行する。
例えば、第1の加算器において、2つの浮動小数点値の合計が実行されてよく、次に、第1の浮動小数点の丸めオペレーションが、その合計に対して、実行されてよく、次に、第2の加算器において、第3の浮動小数点値と丸められた和との合計が実行されてよく、次に、第2の丸めオペレーションが第2の加算器の合計出力に対して実行されてよい。
別の例として、以下にてさらに説明されるように、単一の浮動小数点加算器が再循環で用いられてよく、各サイクルの間又は当該加算器を通るパスの間に、2つの浮動小数点値のみの同時加算が実行され得る。例えば、1つのパスにおいて、2つの浮動小数点値の合計が実行されてよく、次に、第1の浮動小数点の丸めオペレーションが、その合計に対して実行されてよく、次に2つ目のパスにおいて、第3の浮動小数点値と1つ目のパスからの丸められた和との合計が実行されてよく、次に、第2の丸めオペレーションが、2つ目のパスにおける加算器の出力に対して実行されてよい。以下にてさらに説明されるように、そのようなマイクロアーキテクチャ上の実装には、例えば、3つの浮動小数点値の同時加算を実行するための専用及び/又は一般的に大型又は複合ロジックを含む必要性を回避することなど、複数の利点がある。2つの浮動小数点の丸めオペレーションに関連する複数の結果は、単一の丸めオペレーションが実行された場合と僅かに異なってよく、そのようなマイクロアーキテクチャ上の実装を反映し得る。
いくつかの実施形態において、同じ種類の丸めオペレーション又は丸めモードは、丸めの両方の発生のために用いられ得る。異なる種類の丸めオペレーション又は丸めモードは、様々な実施形態に適する。適した丸めモードの複数の例は、(1)最近接偶数への丸め、(2)負の無限大への丸め、(3)正の無限大への丸め、及び(4)切り捨てによるゼロへの丸めを含むが、これらに限定されない。
いくつかの実施形態において、3ソース浮動小数点加算命令は、命令自体の中の組み込み丸めモード制御に対するサポートを有してよいが、これは必須ではない。従来、丸めモード制御は、概して、浮動小数点制御及びステータスレジスタ(例えば、MXCSR)に指定される。いくつかの命令は、複数の符号化フィールドを介して、即値オペランド内に命令毎の丸めオーバーライドを提供することができる。いくつかの実施形態において、命令毎の丸めモードオーバーライド制御は、命令の符号化によって及び即値から提供され得る。例として、いくつかの実施形態において、丸めモード制御は、静的又は命令毎の丸めモードオーバーライド制御として、プレフィックス(例えば、EVEXプレフィックス)に組み込まれ得る。これは、プログラマに、浮動小数点制御及びステータスレジスタ(例えば、MXCSR)に丸めモードをオーバーライドし得る特定の丸めモードを静的に適用することをさせ得る。いくつかの実施形態において、全ての浮動小数点例外の報告の抑制は、そのような丸めモード制御が命令符号化を通じて提供された場合、選択的に示唆され得る。
全ての浮動小数点例外の報告の抑制は、任意の特定のマスクビットが、浮動小数点制御及びステータスレジスタ(例えば、MXCSR)において対応する浮動小数点例外の報告を抑制するか抑制しないかと関係なく、又はそれに関わらず、発生し得る。これらの浮動小数点例外の報告の抑制は、そのような浮動小数点例外が発生したとき、浮動小数点制御及びステータスレジスタ(例えば、MXCSR)のビット又はフラグが更新されない場合があることを意味し得る(例えば、それらは報告されない場合がある)。
再び図1を参照すると、実行ユニット106及び/又はプロセッサ100は、3ソース浮動小数点加算命令を実行し、及び/又は、3ソース浮動小数点加算命令に応じて結果を及び/又はその結果として(例えば、3ソース浮動小数点加算命令から復号された、あるいは派生された1つ又は複数の命令又は制御信号に応じて)格納するよう動作可能な具体的又は特定のロジック(例えば、複数のトランジスタ、集積回路、又はファームウェア(例えば、不揮発性メモリに格納された複数の命令)と潜在的に組み合わせられた他のハードウェア、及び/又はソフトウェア)を含み得る。実行ユニットは、浮動小数点加算ロジック108を含み得る。例として、実行ユニット及び/又は浮動小数点加算ロジックは、浮動小数点加算器、浮動小数点融合積和演算器(FMA)、浮動小数点算術ユニット、浮動小数点算術ロジックユニット、又は同様のものを含んでよい。いくつかの実施形態において、実行ユニットは、複数のソースオペランドを受信する1つ又は複数の入力構造(例えば、ポート、相互接続、インターフェースなど)、入力構造に結合され、複数のソースオペランドを受信及び処理して結果を生成する浮動小数点加算回路又はロジック、及び浮動小数点加算回路又はロジックに結合され、結果を出力する1つ又は複数の出力構造(例えば、ポート、相互接続、インターフェースなど)を含んでよい。いくつかの実施形態において、実行ユニットは、図7から9のうちの何れか1つ又は複数に対して示され説明される回路又はロジックを含んでよく、それらは、適したマイクロアーキテクチャ上の配列の図示的な例であるが、本願発明の範囲はそのように限定されない。
説明を曖昧にすることを回避するために、比較的シンプルなプロセッサ100が示されており、説明されている。他の複数の実施形態において、プロセッサは、複数の他の周知プロセッサ構成要素を選択的に含み得る。そのようなコンポーネントの複数の可能な例は、命令フェッチユニット、命令及びデータキャッシュ、第2又は上位レベルのキャッシュ、アウトオブオーダ実行ロジック、命令スケジューリングユニット、レジスタリネーミングユニット、リタイアメントユニット、バスインタフェースユニット、命令及びデータトランスレーションルックアサイドバッファ、プリフェッチバッファ、マイクロ命令キュー、マイクロ命令シーケンサ、プロセッサに含まれる他の構成要素、及びこれらの様々な組み合わせを含むが、これらに限定されない。そのようなコンポーネントの多数の異なる組み合わせ及び構成は適したものである。複数の実施形態は任意の既知の組み合わせ又は構成に限定されない。
さらに、複数の実施形態は、複数のコアを有する複数のプロセッサ、複数の論理プロセッサ、又は複数実行エンジンに含まれてよく、それらのうちの少なくとも1つは、3ソース浮動小数点加算命令の実施形態を実行する復号ユニット及び実行ユニットを有する。
図2は、3ソース浮動小数点加算命令の実施形態を実行する方法225の実施形態のブロックフロー図である。様々な実施形態において、方法は、プロセッサ、命令処理装置、又は他のデジタルロジックデバイスにより実行され得る。いくつかの実施形態において、図2のオペレーション及び/又は方法は、図1のプロセッサにより及び/又はその中で実行され得る。本明細書にて説明されている、図1のプロセッサに関する複数の構成要素、特徴、及び特定の選択的な詳細はまた、図2のオペレーション及び/又は方法に選択的に適用される。代替的に、図2のオペレーション及び/又は方法は、同様の又は異なるプロセッサ又は装置により及び/又はその中で実行され得る。さらに、図1のプロセッサは、図2のオペレーション及び/又は方法と同じ、同様の、又は異なるものを実行し得る。
ブロック226では、方法は、3ソース浮動小数点加算命令を受信する段階を備える。様々な態様において、命令は、プロセッサ、命令処理装置、又はこれらの一部(例えば、命令フェッチユニット、復号ユニット、バスインタフェースユニットなど)において受信され得る。様々な態様において、命令は、オフダイソースから(例えば、メモリ、相互接続などから)、又はオンダイソースから(例えば、命令キャッシュ、命令キューなどから)、受信され得る。3ソース浮動小数点加算命令は、少なくとも第1の浮動小数点データ要素を含む第1のソースオペランドを指定してよく、あるいは示してよく、少なくとも第2の浮動小数点データ要素を含む第2のソースオペランドを指定してよく、あるいは示してよく、少なくとも第3の浮動小数点データ要素を含む第3のソースオペランドを指定してよく、あるいは示してよい。
ブロック227では、結果が、3ソース浮動小数点加算命令に応じて、及び/又は、3ソース浮動小数点加算命令の結果として、デスティネーションオペランドに格納される。デスティネーションオペランドは、3ソース浮動小数点加算命令により指定されてよく、あるいは示されてよい。代表的に、実行ユニット、命令処理装置、又はプロセッサが命令を実行してその結果を格納し得る。結果は、少なくとも第1、第2、及び第3の浮動小数点データ要素に対応する結果浮動小数点データ要素を含み得る。結果浮動小数点データ要素は、第1の浮動小数点の丸められた和を含み得る。いくつかの実施形態において、第1の浮動小数点の丸められた和は、第2の浮動小数点の丸められた和と第3の浮動小数点データ要素との相加的組み合わせを表し得る。いくつかの実施形態において、第2の浮動小数点の丸められた和は、第1の浮動小数点データ要素と第2の浮動小数点データ要素との相加的組み合わせを表し得る。
いくつかの実施形態において、結果は、図3から6のうちの何れかに対して示され説明されるもののうちの何れかであってよいが、本願発明の範囲はそのように限定されない。
図示される方法は、複数のアーキテクチャ的オペレーション(例えば、ソフトウェアの観点から可視のもの)に関連する。他の複数の実施形態において、方法は、1つ又は複数のマイクロアーキテクチャ上のオペレーションを選択的に含み得る。例として、命令は、フェッチされ復号されてよく、複数のソースオペランドは、アクセスされてよく、実行ユニットは、命令を実行するよう複数のマイクロアーキテクチャ上のオペレーションを実行してよい、等など。いくつかの実施形態において、命令を実行する複数のマイクロアーキテクチャ上のオペレーションは、図3から6又は7から9のうちの何れかに対して示され説明されるもののうちの何れかを選択的に含み得る。例えば、いくつかの実施形態において、第2の浮動小数点の丸められた和は、第1の浮動小数点加算器から第2の浮動小数点加算器に選択的に提供され得る。別の例として、いくつかの実施形態において、第2の浮動小数点の丸められた和は、浮動小数点加算器の出力部からその浮動小数点加算器の入力部に選択的に再循環され得る。
図3は、パックド3ソース浮動小数点選択的マスク加算命令の実施形態に応じて実行され得るパックド3ソース浮動小数点選択的マスク加算オペレーション330の実施形態を示すブロック図である。命令は、第1のソースパックドデータオペランド312、第2のソースパックドデータオペランド314、及び第3のソースパックドデータオペランド316を指定(例えば、明示的に指定)してよく、あるいは示し(例えば、暗黙的に示し)てよい。第1のソースパックドデータオペランドは、第1の複数のパックド浮動小数点データ要素A1−ANを有し得る。
第2のソースパックドデータオペランドは、第2の複数のパックド浮動小数点データ要素B1−BNを有し得る。第3のソースパックドデータオペランドは、第3の複数のパックド浮動小数点データ要素C1−CNを有し得る。
第1のソースパックドデータオペランドにおける各データ要素は、第2のソースパックドデータオペランドにおける異なるデータ要素に対応してよく、その複数のオペランド内の対応する相対位置において、第3のソースパックドデータオペランドにおける異なるデータ要素に対応してよい。例えば、A1、B1、及びC1は、互いに対応してよく、AN、BN、及びCNは、互いに対応してよい、等など。
一般に、各ソースパックドデータオペランドにおける浮動小数点データ要素の数は、各浮動小数点データ要素のビットのサイズにより分割されたソースパックドデータオペランドのビットのサイズに等しいものであってよい。様々な実施形態において、ソースパックドデータオペランドのそれぞれの幅は、64ビット、128ビット、256ビット、512ビット、又は1024ビットであってよいが、本願発明の範囲はそのように限定されない。様々な実施形態において、各浮動小数点データ要素は、16ビットの半精度浮動小数点データ要素、32ビットの単精度浮動小数点データ要素、64ビットの倍精度浮動小数点データ要素、80ビットの拡張倍精度形式、又は128ビットの4倍精度浮動小数点形式であってよい。
いくつかの実施形態において、32ビットの単精度又は64ビットの倍精度形式は、これらの現在普及した使用によりサポートされ得る。他のパックドデータオペランドサイズ及びデータ要素幅も適する。様々な実施形態において、各ソースパックドデータオペランドには、少なくとも2つ、少なくとも4つ、少なくとも8つ、又は8つより多くの浮動小数点データ要素があってよい。
再び図3を参照すると、示されるように、いくつかの実施形態において、命令はまた、ソースパックドデータオペレーションマスク322を選択的に指定してよく、あるいは示してよいが、これは必須ではない。パックドデータオペレーションマスクはまた、本明細書において単にオペレーションマスク、プレディケートマスク、又はマスクとして称され得る。ソースパックドデータオペレーションマスクは、複数のマスク要素M1−MNを有し得る。各マスク要素は、ソースデータ要素及び/又はそのオペランド内の対応する相対位置における結果データ要素に対応し得る。例えば、M1はA1、B1、及びC1に対応し得る。
ソースパックドデータオペレーションマスクは、対応するパックドデータオペレーションが実行されるか否か及び/又は対応する結果が格納されるか否かをプレディケート、条件付きで制御、又はマスクするのに用いられ得るマスクオペランド、プレディケートオペランド、又は条件付き制御オペランドを表し得る。いくつかの実施形態において、マスキング又はプレディケートは、データ要素粒度毎にされてよく、これにより、対応する3データ要素の複数の異なるセットに対する複数のオペレーションが、別個に及び/又は他のものから独立に、プレディケートされ得る、又は条件付きで制御され得る。マスクは、複数のマスク要素、プレディケート要素、又は条件付き制御要素を含み得る。1つの態様において、マスク要素は、3ソースデータ要素の複数の対応するセット及び/又は複数の対応する結果データ要素とワンツーワンに対応して含まれ得る。示されているように、いくつかの実施形態において、各マスク要素は、単一のマスクビットであってよい。そのような場合、マスクは、第1のソースパックドデータオペランドの各データ要素用のビット及び/又は結果パックドデータ318の各結果データ要素用のビットを有し得る。各マスクビットの値は、対応するパックドデータオペレーションが実行されるか否か、及び/又は対応する結果データ要素が格納されるか否かを制御し得る。各マスクビットは、オペレーションが3ソースデータ要素の対応するセットに対して実行されることを可能にし、対応する結果データ要素が結果パックドデータに格納されることを可能にする第1の値を有してよく、又は、オペレーションが3ソースデータ要素の対応するセットに対して実行されることをさせず、及び/又は、対応する結果データ要素が結果パックドデータに格納されることをさせない第2の異なる値を有してよい。1つの可能な従来方式によれば、図示に示されているように、2進数のゼロ(すなわち、0)にクリアされたマスクビットが、マスクオペレーションを表してよく、そのオペレーションの結果の代わりに、マスクされた値が対応する結果データ要素に格納される。対照的に、2進数の1(すなわち、1)に設定されたマスクビットが、マスクされていないオペレーションを表してよく、そのオペレーションの結果が対応する結果データ要素に格納され得る。他の複数の実施形態において、その反対の従来方式が用いられてよく、又は、2つ以上のビットが、各マスク要素用に選択的に用いられてよい(例えば、各マスク要素は、各対応するソースデータ要素と同じビット数を有してよく、1つ又は複数の最上位又は最下位ビットがプレディケートのために用いられてよい)。
オペレーション330の実施形態は、命令の実施形態に応じて及び/又はその結果として実行され得る。パックドデータオペレーションマスク322が選択的に用いられる複数の実施形態において、オペレーションは、その選択的なソースパックドデータオペレーションマスクのマスキング、プレディケート、又は条件付き制御を対象にして実行され得る。結果パックドデータ318が命令に応じて、(例えば、実行ユニットにより)生成され、デスティネーション記憶位置に格納され得る。デスティネーション記憶位置は、命令により指定されてよく、あるいは示されてよい。様々な実施形態において、デスティネーション記憶位置は、パックドデータレジスタ、メモリ位置、又は他の記憶位置であってよい。結果パックドデータは、それぞれが3ソースデータ要素の異なるセットに対応し、異なる対応するマスク要素に対応する複数のデータ要素を含んでよい。
選択的なパックドデータオペレーションマスクが用いられる複数の実施形態において、マスクされていないマスク要素に対応する結果データ要素は、3ソース浮動小数点データ要素の対応するセットに対して実行されるオペレーションに依存する複数の値を有し得る。図示された例において、最右の結果データ要素がマスクされていないオペレーションに対応し、第1、第2、及び第3のソースパックドデータオペランドから、3ソース浮動小数点データ要素の対応するセットに対して実行された対応するパックドデータオペレーションに依存する値を格納する。具体的に、いくつかの実施形態において、最右の結果浮動小数点データ要素は、第1の浮動小数点の丸められた和(例えば、RND1(C1+RND2(A1+B1)))を格納し得る。第1の浮動小数点の丸められた和は、第2の浮動小数点の丸められた和(例えば、RND2(A1+B1))と第3の浮動小数点データ要素(例えば、C1)との相加的組み合わせを表し得る。第2の浮動小数点の丸められた和(例えば、RND2(A1+B1))は、第1の浮動小数点データ要素(例えば、A1)と第2の浮動小数点データ要素(例えば、B1)との相加的組み合わせを表し得る。当該複数の相加的組み合わせは、複数のソースデータ要素(例えば、A1、B1、及び/又はC1のうちの何れか1つ又は複数)が選択的に又は潜在的にネゲートされることを可能にする。この例において、RND1及びRND2は、別個で連続して採用された2つの浮動小数点の丸めオペレーションを指定するのに用いられる(例えば、RND2はRND1の前に実行される)。
対照的に、選択的なパックドデータオペレーションマスク322が用いられる複数の実施形態において、マスクマスク要素に対応する結果データ要素は、ソースデータ要素の対応するペアに対して実行されたオペレーションに依存しない複数の値を有し得る。むしろ、これらの結果データ要素は、マスクされた値(例えば、固定された又は予め定められた値)を有し得る。例えば、対応するオペレーションが実行される必要がなく、又は対応するオペレーションが実行された場合、次に、対応する結果は、結果パックドデータに格納される必要がない、の何れかである。むしろ、マスクされた値(例えば、固定された又は予め定められた値)は、対応する結果データ要素に格納され得る。
図示された例において、第Nのマスク要素MNは、マスクされた値(例えば、この場合、2進数のゼロ)を有する。結果として、対応する最左の結果データ要素は、マスクされた値を有する。その特定のマスクされた値は、特定の実装のために用いられるマスキングの種類に依存し得る。いくつかの実施形態において、ゼロ書き込みマスキングが用いられ得る。ゼロ書き込みマスキングにおいて、マスク結果データ要素は、ゼロを書き込まれ得る(例えば、ゼロの値を有するよう強制され得る)。他の複数の実施形態において、併合マスキングが用いられ得る。併合マスキングにおいて、複数のマスク結果データ要素は、複数の対応するソースデータ要素のうちの1つの値を有し得る(例えば、対応するソースデータ要素は、通過してマスク結果データ要素に渡され得る)。例えば、最左の結果データ要素は、AN、BN、又はCNのうちの1つの値を有し得る。他の複数の実施形態において、他の結果データ要素は、マスクされてよく、又はマスクされていなくてよい。
図4は、スカラ3ソース浮動小数点選択的マスク加算命令の実施形態に応じて実行され得るスカラ3ソース浮動小数点選択的マスク加算オペレーション432の実施形態を示すブロック図である。図4のスカラオペレーションは、図3のパックドオペレーションとは一定の類似点を有する。説明を曖昧にすることを回避するために、図3のパックドオペレーションに関する全ての選択的に同様の又は共通の特性及び詳細を繰り返さずに、図4のスカラオペレーションに関する異なる及び/又はさらなる特性は主に説明される。しかし、各オペランドに複数のデータ要素があることに関する態様を除き、前に説明された図3のパックドオペレーションの特性及び詳細はまた、別段の記載がない限り、又は明確に明白な場合を除き、図4のスカラオペレーションに選択的に適用され得ることが理解されるべきである。
命令は、第1のソースオペランド412、第2のソースオペランド414、及び第3のソースオペランド416を指定(例えば、明示的に指定)してよく、あるいは示し(例えば、暗黙的に示し)てよい。第1のソースオペランドは、第1の浮動小数点データ要素Aを有し得る。第2のソースオペランドは、第2の浮動小数点データ要素Bを有し得る。第3のソースオペランドは、第3の浮動小数点データ要素Cを有し得る。
データ要素A、B、及びCは、互いに対応し得る。上で言及された図3に関する浮動小数点データ要素の前に言及された種類は適したものである。
いくつかの実施形態において、データ要素A、B、及びCは、複数のスカラ形式でそれぞれのパックドデータレジスタに格納され得る。パックドデータレジスタは、浮動小数点データ要素A、B、及びCより広いビット幅を有し得る。例えば、様々な実施形態において、パックドデータレジスタのそれぞれの幅は、64ビット、128ビット、256ビット、512ビット、又は1024ビットであってよいが、本願発明の範囲はそのように限定されない。1つ特定の例において、128ビットのパックドデータレジスタは、用いられてよいが、これは必須ではない。パックドデータレジスタは、スカラ浮動小数点データ要素A、B、及びCに加えてパックドデータを格納することができてよい。
再び図4を参照すると、示されているように、いくつかの実施形態において、命令はまた、ソースオペレーションマスク422を選択的に指定してよく、あるいは示されてよいが、これは必須ではない。ソースオペレーションマスクは、マスク要素Mを有し得る。マスク要素Mは、ソースデータ要素A、B、及びCに対応し得る。マスク要素Mはまた、結果418の同じ相対位置における結果データ要素に対応し得る。ソースオペレーションマスクは、複数のものの代わりに単一のマスク要素があることを主に除き、図3のソースパックドデータオペレーションマスクに対して前に説明されたものと同様の属性及び変形を有し得る。この例示的な実施形態において、マスク要素は、マスクされていない(例えば、M=1)。いくつかの実施形態において、ソースオペレーションマスクは、たとえ対応するスカラ要素が単一のセットのみ存在するとしても、用いられ得る。
オペレーション432の実施形態は、命令の実施形態に応じて及び/又はその結果として実行され得る。オペレーションマスク422が選択的に用いられる複数の実施形態において、オペレーションは、選択的なソースオペレーションマスクのマスキング、プレディケート、又は条件付き制御を対象にして実行され得る。結果418が命令に応じて、(例えば、実行ユニットにより)生成され、デスティネーション記憶位置に格納され得る。デスティネーション記憶位置は、命令により指定されてよく、あるいは示されてよい。様々な実施形態において、デスティネーション記憶位置は、レジスタ、メモリ位置、又は他の記憶位置であってよい。結果は、ソース浮動小数点データ要素A、B,及びC、並びにマスク要素Mに対応する結果浮動小数点データ要素を含んでよい。
図示された例において、マスク要素がマスクされていない(例えば、M=1)ので、結果データ要素は、ソース浮動小数点データ要素A、B、及びCの対応するセットに対して実行されたオペレーションに依存する値を格納する。具体的に、いくつかの実施形態において、結果浮動小数点データ要素は、第1の浮動小数点の丸められた和(例えば、RND1(C+RND2(A+B))を格納し得る。第1の浮動小数点の丸められた和は、第2の浮動小数点の丸められた和(例えば、RND2(A+B))と、第3の浮動小数点データ要素(例えば、C)との相加的組み合わせを表し得る。第2の浮動小数点の丸められた和(例えば、RND2(A+B))は、第1の浮動小数点データ要素(例えば、A)と第2の浮動小数点データ要素(例えば、B)との相加的組み合わせを表し得る。相加的組み合わせは、A、B、及びCのうちの何れか1つ又は複数を選択的に又は潜在的にネゲートされることを可能にする。RND1及びRND2は、別個で連続して採用された2つの浮動小数点の丸めオペレーションを指定するのに用いられる。
代替的な例において、マスク要素がマスクされた場合(例えば、M=0の場合)、結果データ要素は、代わりにマスクされた値(例えば、固定された又は予め定められた値)を格納し得る。図3に対して言及された、前に説明されたマスクされた値は、適したものである(例えば、ゼロ書き込みマスキングの場合における0、又は、併合マスキングの場合におけるA、B、又はCの何れかである)。
図5は、パックド3ソース浮動小数点選択的マスク選択的ネゲーション制御加算命令の実施形態に応じて実行され得るパックド3ソース浮動小数点選択的マスク選択的ネゲーション制御加算オペレーション534の実施形態を示すブロック図である。図5の選択的ネゲーション制御オペレーションは、図3のオペレーションと一定の類似点を有する。説明を曖昧にすることを回避するために、図3のオペレーションに対する全ての選択的に同様の又は共通の特性及び詳細を繰り返さずに、図5の選択的ネゲーション制御オペレーションに関する異なる及び/又はさらなる特性は、主に説明される。しかし、別段の記載がない限り、あるいは明確に明白な場合を除き、前に説明された図3のオペレーションの特性及び詳細はまた、図5の選択的ネゲーション制御オペレーションに選択的に適用し得ることが理解されるべきである。
命令は、浮動小数点データ要素A1−ANを含む第1のソースパックドデータオペランド512、浮動小数点データ要素B1−BNを含む第2のソースパックドデータオペランド514、及び浮動小数点データ要素C1−CNを含む第3のソースパックドデータオペランド516を指定してよく、あるいは示してよい。複数のソースパックドデータオペランド及びデータ要素は、前に説明されたような(例えば、図3に関する)複数の特徴及び変更例を有し得る。
いくつかの実施形態において、命令はまた、ソースパックドデータオペレーションマスク522を選択的に指定してよく、あるいは示してよいが、これは必須ではない。ソースパックドデータオペレーションマスクは、マスク要素M1−MNを有し得る。ソースパックドデータオペレーションマスク及びマスク要素は、前に説明されたような(例えば、図3に関する)複数の特徴及び変更例を有し得る。図示された例において、マスク要素M1及びMNは、両方ともマスクされていない(例えば、M1=1及びMN=1)。
いくつかの実施形態において、命令は、1つ又は複数のビットのネゲーション制御を選択的に有し得るが、これは必須ではない。
1つ又は複数のビットのネゲーション制御は、ソフトウェア及び/又はプログラマが、ソースオペランドのうちの何れか1つ又は複数、若しくは全てのネゲーションを制御することを可能にし得る。いくつかの実施形態において、命令は、第1のソースオペランドのパックド浮動小数点データ要素の全て(例えば、A1−AN)がネゲートされるか否かを指定すべく、第1のソースオペランド512に対応する1つ又は複数のビットの第1のセット536を有し得る。いくつかの実施形態において、命令はまた、若しくは代替的に、第2のソースオペランドのパックド浮動小数点データ要素の全て(例えば、B1−BN)がネゲートされるか否かを指定すべく、第2のソースオペランド514に対応する1つ又は複数のビットの第2のセット538を有し得る。いくつかの実施形態において、命令はまた、若しくは代替的に、第3のソースオペランドのパックド浮動小数点データ要素の全て(例えば、C1−CN)がネゲートされるか否かを指定すべく、第3のソースオペランド516に対応する1つ又は複数のビットの第3のセット540を有し得る。
いくつかの実施形態において、単一のビットが各々のソースパックドデータオペランドに対応してよく、そのソースパックドデータオペランドのためのネゲーション制御を提供するのに用いられてよい。1つの可能な従来方式によれば、ネゲーション制御の各単一のビットは、対応するソースパックドデータの全てのデータ要素がネゲートされることを指定すべく、2進数の1(すなわち、1)に設定されてよく、又は、その代わりに、対応するソースパックドデータオペランドの全てのデータ要素がネゲートされないことを指定すべく、2進数のゼロ(すなわち、0)にクリアされてよい。例えば、第1のビット536は、第1のソースオペランドの全てのデータ要素(例えば、A1−AN)がネゲートされることを指定するよう設定されてよく、又は、それらがネゲートされないことを示すようクリアされてよい。同様に、第2のビット538は、第2のソースオペランドの全てのデータ要素(例えば、B1−BN)がネゲートされることを指定するよう設定されてよく、又は、それらがネゲートされないことを示すようクリアされてよい。同様に、第3のビット540は、第3のソースオペランドの全てのデータ要素(例えば、C1−CN)がネゲートされることを指定するよう設定されてよく、又は、それらがネゲートされないことを示すようクリアされてよい。
いくつかの実施形態において、第1、第2、及び第3のソースパックドデータのうちの何れかに対するネゲーション制御に対応し、それを提供し得るネゲーション制御の1つ又は複数のビットの単一のセットがあってよい。他の複数の実施形態において、第1、第2、及び第3のソースパックドデータのうちの任意の2つに対するネゲーション制御に対応し、それを提供し得るネゲーション制御の1つ又は複数のビットの2つのセットがあってよい。代替的に、第1、第2、及び第3のソースパックドデータのうちの3つの全てに対するネゲーション制御に対応し、それを提供し得るネゲーション制御の1つ又は複数のビットの3つのセットがあってよい。
いくつかの実施形態において、ネゲーション制御のビットは、命令の即値542により選択的に提供され得る。例えば、1つ特定の例示的な実施形態において、8ビットの即値が選択的に用いられてよく、第1のソースパックドデータに対応する単一のビット536は、ビットimm8[0]により提供されてよく、第2のソースパックドデータに対応する単一のビット538は、ビットimm8[1]により提供されてよく、第3のソースパックドデータに対応する単一のビット540は、ビットimm8[2]により提供されてよい。
他の複数の実施形態において、例えば、2ビットの即値、4ビットの即値、6ビットの即値などのような他のサイズの即値が選択的に用いられてよい。他の複数の実施形態において、そのような即値の他のビットは、選択的に用いられてよく、及び/又は、異なる態様でソースパックドデータと一致し得る。別のオプションとして、即値を用いることの代わりに、ネゲーション制御ビットは、そうでなければ、命令により提供され得る(例えば、オペコードの一部として、命令の別のフィールドとして、など)。
再び図5を参照すると、図示された例において、ネゲーション制御の単一のビットは、ソースパックドデータのそれぞれに対応するのに用いられる。さらに、ビットは、ネゲーションを指定するよう設定され、又は、ネゲーションを指定しないようクリアされる。図示された例において、第1のソースパックドデータに対応するビットはクリアされ、第3のソースパックドデータに対応するビットはクリアされる。従って、第1のソースパックドデータのデータ要素(例えば、A1−AN)及び第3のソースパックドデータのデータ要素(例えば、C1−CN)はネゲートされないであろう。対照的に、第2のソースパックドデータに対応するビットは設定され、そのため第2のソースパックドデータのデータ要素(例えば、B1−BN)はネゲートされるであろう。
オペレーション534の実施形態は、命令の実施形態に応じて及び/又はその結果として実行され得る。結果パックドデータ518が命令に応じて、(例えば、実行ユニットにより)生成され、デスティネーション記憶位置に格納され得る。結果パックドデータは、複数の結果データ要素を含み得る。図示された例示的な実施形態において、最右の結果浮動小数点データ要素は、第1の浮動小数点の丸められた和(例えば、RND1(C1+RND2(A1+(−B1))))を格納してよく、最左の結果浮動小数点データ要素は、第Nの浮動小数点の丸められた和(例えば、RND1(CN+RND2(AN+(−BN))))を格納してよい。
データ要素B1からBNは、第2のビット538により提供された丸め制御に基づいてネゲートされることに留意されたい。第1及び第Nの浮動小数点の丸められた和はそれぞれ、別のそれぞれの浮動小数点の丸められた和(例えば、RND2(A1+(−B1))又はRND2(AN+(−BN)))と、第3のソースパックドデータからの対応する浮動小数点データ要素(例えば、C1又はCN)との相加的組み合わせを表し得る。当該複数の相加的組み合わせは、ソースデータ要素、この場合はB1−BNが、選択的に又は潜在的にネゲートされることを可能にする。
有利に、命令の、ネゲーション制御を指定する能力は、命令の柔軟性を増加させるよう(例えば、1つ又は複数のソースが引かれることを可能にすることにより)選択的に用いられ得る。代替的に、ネゲーションは、(例えば、1つ又は複数の他の命令により)パックド3ソース浮動小数点加算命令の実行の制限範囲外において選択的に実行され得る。
表1は、VADD3PDと称されるパックド3ソース倍精度浮動小数点マスクネゲーション制御加算命令の特定の例示的な実施形態の説明を提供する。いくつかの実施形態において、命令は、VADD3PD zmml {k1}{z},zmm2,zmm3/m512,imm8{er}という形式を有し得る。いくつかの実施形態において、命令は、EVEX.U1.NDS.512.F3.0F3A.W1 68/r/is4として、EVEXに符号化され得る。表1 VADD3PD
以下に列挙されるのがVADD3PD命令の擬似コードである。DESTが第1のソースオペランド及びデスティネーションオペランドである。SRC2が第2のソースオペランドである。SRC3が第3のソースオペランドである。VLがビットでのベクトル長であり、この場合は512ビットである。KLがビットでのマスク長であり、この場合は8ビットである。EVEX.bビットは、組み込み丸め制御及び例外の抑制のために用いられる。klがソースオペレーションマスクである。IMM8が8ビットの即値である。「i」及び「j」はカウンタ(counter)である。他の複数の実施形態において、複数のレジスタは、メモリ又は他の記憶位置により置換されてよい。VADD3PD DEST,SRC2,SRC3(KL,VL)=(8,512) IF(VL==512)AND(EVEX.b==1)AND SRC3*is a register* THEN SET_RM(EVEX.RC); ELSE SET_RM(MXCSR).RM); FI; FOR j←0 TO KL−1 i←j*64 IFkl[j]OR*no writemask* THEN DEST[i+63:i]← TMP_SRC2[63:0]=(IMM8[0])?−SRC2[i+63:i]:SRC2[i+63:i] TMP_SRC3[63:0]=(IMM8[1])?−SRC3[i+63:i]:SRC3[i+63:i] TMP_DEST[63:0]=(IMM8[2])?−DEST[i+63:i]:DEST[i+63:i] RoundFPControl( RoundFPControl(TMP_SRC2[63:0]+TMP_SRC3[63:0]) +TMP_DEST[63:0]) ELSE IF*merging−masking*;merging−masking THEN*DEST[i+63:i]remains unchanged* ELSE;zeroing−masking DEST[i+63:i]←0 FIFI; ENDFORDEST[MAX_VL−1:VL]←0
表2は、VADD3PSと称されるパックド3ソース単精度浮動小数点マスクネゲーション制御加算命令の特定の例示的な実施形態の説明を提供する。表2 VADD3PS
VADD3PS命令の擬似コードは、64ビットの代わりに、32ビットのデータ要素が用いられ、幅が2倍のオペレーションマスクが用いられることを除き、上に列挙されたVADD3PD命令の擬似コードと類似する。他の複数の実施形態において、複数のレジスタは、メモリ又は他の記憶位置により置換されてよい。
これらは単に、複数の命令の複数の適した実施形態の複数の図示的な例である。他の複数の実施形態は、より狭いかより広いソースパックドデータオペランドのどちらかを用いてよく、及び/又は異なるサイズの浮動小数点データ要素を用いてよい。他の複数の実施形態は、マスキング/プレディケートを用いなくてよい。他の複数の実施形態は、ネゲーション制御を用いなくてよい。他の複数の実施形態は、複数のソース及び/又はデスティネーションオペランドを別に指定してよく又は示してよい。
図6は、スカラ3ソース浮動小数点選択的マスク選択的ネゲーション制御加算命令の実施形態に応じて実行され得るスカラ3ソース浮動小数点選択的マスク選択的ネゲーション制御加算オペレーション644の実施形態を示すブロック図である。図6のスカラ選択的ネゲーション制御オペレーションは、図4のスカラオペレーションとは一定の類似点を有するが、図5のパックドオペレーションと同様の選択的なネゲーション制御を組み込む。説明を曖昧にすることを回避するために、図4から5のオペレーションに関する全ての選択的に同様の又は共通の特性及び詳細を繰り返さずに、図6の簡潔な説明が提供される。しかし、別段の記載がない限り、あるいは明確に明白な場合を除き、前に説明された図4のスカラオペレーションの特性及び詳細並びに図5のオペレーションの選択的なネゲーション制御の態様はまた、図6のオペレーションに選択的に適用することが理解されるべきである。
図4のスカラオペレーションと同様に、命令は、データ要素Aを含む第1のソースオペランド612、データ要素Bを含む第2のソースオペランド614、及びデータ要素Cを含む第3のソースオペランド616を指定してよく、あるいは示してよい。複数のソースオペランド及びデータ要素は、前に説明されたような(例えば、図4に関する)複数の特徴及び変更例を有してよい。
いくつかの実施形態において、命令はまた、ソースオペレーションマスク622を選択的に指定してよく、あるいは示してよいが、これは必須ではない。ソースオペレーションマスク及びマスク要素は、前に説明されたような(例えば、図4に関する)複数の特徴及び変更例を有してよい。図示された例において、マスク要素Mはマスクされていない(例えば、M=1)。
いくつかの実施形態において、命令は、ネゲーション制御の1つ又は複数のビットを選択的に有してよいが、これは必須ではない。例えば、図示された実施形態において、命令は、第1のビット636と、第2のビット638と、第3のビット640とを有するが、本願発明の範囲はそのように限定されない。これらのビットは、即値642に選択的においてよいが、本願発明の範囲はそのように限定されない。他の複数の実施形態において、命令は、ネゲーション制御がこのスカラ実施形態におけるソースオペレーションの単一のスカラデータ要素に適用されることを除き、前に説明された図5のオペレーションに関する複数の特徴、特性、及び変形例のうちの何れかを有するネゲーション制御を有してよい。図示された例示的な実施形態において、第1のビット636は、データ要素Aのネゲーションを制御するよう設定され、第2のビット638は、データ要素Bのネゲーションがないことを制御するようクリアされ、第3のビット640は、データ要素Cのネゲーションを制御するよう設定される。
結果的に、この例において、結果は、単一の結果データ要素として、第1の浮動小数点の丸められた和(例えば、RND1((−C)+RND2((−A)+B)))を格納し得る。複数の特定のソースオペランドが図示の目的にのみネゲートされることと、他の複数の実施形態において、複数のソースオペランドは別にネゲートされてよく又はネゲートされなくてよいこととが理解されるべきである。
表3は、VADD3SDと称されるスカラ3ソース倍精度浮動小数点マスクネゲーション制御加算命令の特定の例示的な実施形態の説明を提供する。
いくつかの実施形態において、命令はVADD3SD xmml{kl}{z},xmm2,xmm3/m64,imm8{er}という形式を有し得る。
いくつかの実施形態において、命令は、EVEX.U1.NDS.128.F3.0F3A.W1 69/r/is4として、EVEXに符号化され得る。表3 VADD3SD
以下に列挙されるのがVADD3SD命令の擬似コードである。DESTが第1のソースオペランド及びデスティネーションオペランドである。SRC2が第2のソースオペランドである。SRC3が第3のソースオペランドである。EVEX.bビットは、組み込み丸め制御及び例外の抑制のために用いられる。k1は、ソースオペレーションマスクである。IMM8は8ビットの即値である。他の複数の実施形態において、複数のレジスタは、メモリ又は他の記憶位置により置換されてよい。VADD3SD DEST,SRC2,SRC3 IF(EVEX.b==1)AND SRC3*is a register* THEN SET_RM(EVEX.RC); ELSE SET_RM(MXCSR.RM); FI; IF kl[0]OR*no writemask* THEN DEST[63:0]← TMP_SRC2[63:0]=(IMM8[0])?−SRC2[63:0]:SRC2[63:0] TMP_SRC3[63:0]=(IMM8[1])?−SRC3[63:0]:SRC3[63:0] TMP_DEST[63:0]=(IMM8[2])?−DEST[63:0]:DEST[63:0] RoundFPControl( RoundFPControl(TMP_SRC2[63:0]+TMP_SRC3[63:0]) +TMP_DEST[63:0]) ELSEIF*merging−masking*;merging−masking THEN*DEST[63:0] remains unchanged* ELSE;zeroing−masking DEST[63:0]←0 FIFI; DEST[127:64]−SRC1[127:64] DEST[MAX_VL−1:128]←0
表4は、VADD3SSと称されるスカラ3ソース単精度浮動小数点マスクネゲーション制御加算命令の特定の例示的な実施形態の説明を提供する。表4 VADD3SS
VADD3SS命令の擬似コードは、64ビットの代わりに32ビットのデータ要素が用いられることを除き、上に列挙されたVADD3SD命令の擬似コードと同様である。他の複数の実施形態において、複数のレジスタは、メモリ又は他の記憶位置により置換されてよい。
これらは単に、複数の命令の複数の適した実施形態の複数の図示的な例である。他の複数の実施形態は、異なるサイズの浮動小数点データ要素を用いてよい。他の複数の実施形態は、マスキング/プレディケートを用いなくてよい。他の複数の実施形態は、ネゲーション制御を用いなくてよい。他の複数の実施形態は、複数のソース及び/又はデスティネーションオペランドを別に指定してよく、又は示してよい。
図7は、3ソース浮動小数点オペランドを加算する3ソース浮動小数点加算器707の実施形態のブロック図である。この実施形態において、3ソース浮動小数点加算器は、第1のソース浮動小数点オペランド712、第2のソース浮動小数点オペランド714、及び第3のソース浮動小数点オペランド716を同時に受信して加算し、潜在的に丸められた結果750を生成することができる。加算器は、3ソースオペランドを同時に受信する入力部を有し、それらを、通常1つの同時加算オペレーションにおいて加算することができる。そのような複数の実施形態において、中間の丸め及び正規化オペレーションは通常、必要とされず、実行されない。しかし、そのような3ソース浮動小数点加算器の1つ潜在的な欠点が、それらは多くの場合、比較的により複雑な設計を有する傾向があり、多くの場合、より大型となる傾向があり、多くの場合、比較的により多くの電力を消費する傾向があり、そして、多くの場合、より特化される傾向があることである。
多くのプロセッサは、それぞれが同時に2つのソース浮動小数点オペランドを共に加算できる1つ又は複数の2ソース浮動小数点加算器を既に有し、又は容易に有し得るが、それらは同時に3ソース浮動小数点オペランドを共に加算することができない。
そのような加算器の複数の例は、通常の浮動小数点加算器、複数の融合積和演算器、及び同様のものを含む。いくつかの実施形態において、そのような既存の2ソース浮動小数点加算器は、図7のものなどの特化した3ソース浮動小数点加算器を含む必要性を回避すべく、本明細書に開示される3ソース浮動小数点加算命令/オペレーションを実行するのに用いられ得る。
図8は、3ソース浮動小数点オペランドを加算する、共に直列に結合される2ソース浮動小数点加算器808A、808Bのペアの実施形態のブロック図である。例として、加算器は、浮動小数点加算器、浮動小数点融合積和演算器、又は同様のものを含んでよい。第1の2ソースオペランド浮動小数点加算器808Aは、第1の浮動小数点オペランド812と第2の浮動小数点オペランド814とを受信するべく結合される入力部を有する。第1の2ソースオペランド浮動小数点加算器はまた、3ソース浮動小数点加算命令に対応する及び/又はそこから派生された制御信号802を受信すべく結合される複数の入力部を有する。例えば、制御信号は、予約ステーション(図示せず)から受信され得る。いくつかの実施形態において、制御信号、又はそれの選択的に簡略化されたバージョンはまた、選択的なバッファ854に選択的に提供されてよい。第1の2ソースオペランド浮動小数点加算器は、第1及び第2のオペランドに関連する第1の丸められた和852を生成するべく、第1及び第2の浮動小数点オペランドを加算することができる。第1の丸められた和は、浮動小数点の丸めモードに従って適切な場合に丸められる。第1の2ソースオペランド浮動小数点加算器は、第1の丸められた和を提供する出力部を有する。第2の2ソース浮動小数点加算器808Bは、第1の丸められた和を受信するべく、第1の加算器の出力部に結合される入力部を有する。第2の2ソース浮動小数点加算器はまた、第3の浮動小数点オペランド816を受信するべく結合される入力部を有する。第2の2ソース浮動小数点加算器はまた、制御信号802を受信するべく、バッファ854の出力部に結合される入力部又はそれの簡略化したバージョンを有する。制御信号は、第1の丸められた和が第1の加算器により生成される期間において、バッファに格納されてよく、次に、制御信号は第1の丸められた和と共に第2の加算器に提供され得る。第2の2ソースオペランド浮動小数点加算器は、全ての3ソース浮動小数点オペランドに関連する第2の丸められた和818を生成するべく、第3の浮動小数点オペランド及び第1の丸められた和を加算することができる。第2の2ソースオペランド浮動小数点加算器は、第2の丸められた和を提供する出力部を有する。有利に、この実施形態において、3ソース浮動小数点オペランドは、3ソース浮動小数点加算器を含むことを必要とせずに、共に加算されてよく、このことは、設計の複雑さ、寸法、及び/又は電力消費を低減するのに役に立ち得る。
図9は、加算器の出力部を加算器の入力部に結合させる再循環経路956を有する2ソース浮動小数点加算器908の実施形態のブロック図である。例として、加算器は、浮動小数点加算器、浮動小数点融合積和演算器、又は同様のものを含んでよい。2ソースオペランド浮動小数点加算器は、第1の浮動小数点オペランド912及び第2の浮動小数点オペランド914を受信するべく結合される第1及び第2の入力部を有する。2ソースオペランド浮動小数点加算器はまた、3ソース浮動小数点加算命令に対応する及び/又はそこから派生される制御信号902を受信するべく結合される入力部を有する。例えば、制御信号は、予約ステーション(図示せず)から受信され得る。2ソースオペランド浮動小数点加算器は、第1及び第2のソースオペランドに関連する第1の丸められた和952を生成するべく、第1及び第2の浮動小数点オペランドを加算することができる。第1の丸められた和は、浮動小数点の丸めモードに従って適切な場合に丸められる。2ソースオペランド浮動小数点加算器は、再循環経路956に結合される出力部を有する。再循環経路は、加算器の出力部からの第1の丸められた和を、その加算器の入力部と結合させる又は通信させ得る。再循環経路は、加算器の出力部からの第1の丸められた和をその加算器の入力部に戻して結合させるべく、例えば、回線、ワイヤ、相互接続、導電性パス、又は同様のものなどの回路を含んでよい。2ソース浮動小数点加算器はまた、第3の浮動小数点オペランド916を受信するべく結合される入力部を有する。2ソース浮動小数点加算器はまた、制御信号902を受信するべく、バッファ954の出力部に結合される入力部を有する。制御信号は、第1の丸められた和が加算器により生成される期間においてバッファに格納されてよく、次に、制御信号は第1の丸められた和と第3のソースオペランドと共に加算器に提供され得る。2ソースオペランド浮動小数点加算器は、全ての3ソース浮動小数点オペランドに関連する第2の丸められた和918を生成するべく、第3の浮動小数点オペランド及び第1の丸められた和を加算することができる。同じ2ソース浮動小数点加算器が連続の浮動小数点加算オペレーションの両方に用いられることに留意されたい。2ソースオペランド浮動小数点加算器は、第2の丸められた和918を提供する出力部を有する。有利に、この実施形態において、3ソース浮動小数点オペランドは、3ソース浮動小数点加算器を含むことを必要とせずに、共に加算されてよく、このことは、設計の複雑さ、寸法、及び/又は電力消費を低減させるのに役に立ち得る。
図10は、3ソース浮動小数点加算命令に適した命令フォーマット1002の実施形態のブロック図である。命令フォーマットは、オペレーションコード又はオペコード1060を含む。オペコードは、実行されるべき命令及び/又はオペレーション(例えば、3ソース浮動小数点加算)を識別するよう動作可能な複数のビット若しくは1つ又は複数のフィールドを表し得る。
命令フォーマットはまた、第1のソースオペランドを指定する第1のソース指定子1061と、第2のソースオペランドを指定する第2のソース指定子1062と、第3のソースオペランドを指定する第3のソース指定子1063と、結果が格納され得るデスティネーションオペランドを指定するデスティネーション指定子1064とを選択的に含む。例として、これらの指定子のそれぞれは、関連オペランドのレジスタのアドレス、メモリ位置、又は他の記憶位置を明示的に指定する複数のビット若しくは1つ又は複数のフィールドを含み得る。代替的に、別の実施形態において、1つ又は複数の指定子は、明示的に指定されるよりも、命令に選択的に暗黙的であり得る。例えば、いくつかの実施形態において、デスティネーション指定子の代わりに、複数のソースオペランドの1つに用いられた同じ記憶位置が、デスティネーションオペランドとして選択的に暗黙的に用いられてよい。例として、ソース/デスティネーションレジスタは、最初にソースデータを有してよく、その後、そのソースデータは、結果で上書きされてよい。代替的に、別の実施形態において、明示的な指定子のうちの何れか1つ又は複数は、暗黙的なオペランドにより置換され得る。
いくつかの実施形態において、命令フォーマットは、オペレーションマスクを明示的に指定する選択的なオペレーションマスク指定子1065を含んでよい(例えば、マスクレジスタ)。代替的に、パックドデータオペレーションマスクは、暗黙的に示され得る。いくつかの実施形態において、命令フォーマットはまた、マスキングオペレーションの種類を指定する、選択的なマスキングオペレーション種類指定子1066を含み得る。例として、マスキングオペレーション種類指定子は、併合マスキング又はゼロ書き込みマスキングが実行されるか否かを指定する単一のビットを含んでよい。代替的に、マスキングオペレーションの種類は、暗黙的に示されてよいか(例えば、オペコードにより)、あるいは指定されてよい(例えば、制御レジスタにおいて)。他の複数の実施形態は、マスキングを実行しなくてよく、マスク指定子又はマスキング種類指定子を必要としなくてよい。
いくつかの実施形態において、命令フォーマットは、本明細書に開示される複数のオペレーションに用いられる浮動小数点の丸めモードを指定する選択的な浮動小数点の丸めモード指定子1067を含んでよい。いくつかの実施形態において、浮動小数点の丸めモードは、浮動小数点制御レジスタにおいてモードをオーバーライドし得る。本明細書にて言及される様々な丸めモードのうちの何れか、又は当技術分野における他の知られている丸めモードは適したものである。浮動小数点の丸めモード指定子は、選択的で必須ではない。いくつかの実施形態において、丸めモード指定子は、全ての浮動小数点例外を抑制することを暗示し得るが、これは必須ではない。
いくつかの実施形態において、命令フォーマットは、ネゲーション制御を指定する選択的なネゲーション制御指定子1068を含んでよい。いくつかの実施形態において、ネゲーション制御指定子は、即値のビットを含んでよい。代替的に、命令符号化の他の部分のビットは用いられ得る。ネゲーション制御指定子は、選択的で必須ではない。
これは単に1つの図示的な例であることが理解されるべきである。代替的な実施形態は、指定子のサブセットを含んでよく、追加の複数の指定子又はフィールドを追加してよく、一定の複数の指定子又はフィールドを重複してよい、等など。加えて、複数のフィールドの図示されている順序/配列は必須ではないが、むしろ、複数のフィールドは、再配置され、重複されてよく、複数のフィールドは、連続した一連のビットを含む必要がないが、むしろ、非連続又は別個のビットを含んでよい、等など。いくつかの実施形態において、命令フォーマットは、VEX又はEVEX符号化を有してよく、又は、命令フォーマットは、本明細書の他の箇所にて説明される特徴を有してよいが、本願発明の範囲はそのように限定されない。いくつかの実施形態において、EVEX符号化において、第3のソースオペランドは、reg_fieldに符号化されてよく、第1のソースオペランドは、VEX.vvvvに符号化されてよく、第2のソースオペランドは、8ビットの即値の一部及びrm_fieldのうちの1つを用いて符号化されてよいが、本願発明の範囲はそのように限定されない。EVEX符号化の場合、静的な丸めモード制御及び示唆された全ての例外の抑制は、命令のレジスタ形式でレジスタに対してEVEX.bビットを1に設定することにより、命令の符号化において有効となり得る。
図11は、複数のパックドデータレジスタ1110の適した一のセットの例示的な実施形態のブロック図である。複数のパックドデータレジスタは、ZMM0からZMM31と標識される32個の512ビットのパックドデータレジスタを含む。図示された実施形態において、下位16個のレジスタ、すなわち、ZMM0−ZMM15、の下位順の256ビットは、YMM0−YMM15と標識される256ビットのパックドデータレジスタのそれぞれにエイリアスされる又はオーバーレイされるが、このことは必須ではない。同様に、図示された実施形態において、レジスタYMM0−YMM15の下位順の128ビットは、XMM0−XMM15と標識される128ビットのパックドデータレジスタのそれぞれにエイリアスされる又はオーバーレイされるが、このことも必須ではない。512ビットのレジスタZMM0からZMM31は、512ビットのパックドデータ、256ビットのパックドデータ、又は128ビットのパックドデータを保持するよう動作可能である。256ビットのレジスタYMM0−YMM15は、256ビットのパックドデータ又は128ビットのパックドデータを保持するよう動作可能である。128ビットのレジスタXMM0−XMM15は、128ビットのパックドデータを保持するよう動作可能である。いくつかの実施形態において、レジスタのそれぞれは、パックド浮動小数点データ又はパックド整数データの何れかを格納するのに用いられ得る。異なるデータ要素のサイズは、少なくとも8ビットバイトデータ、16ビットワードデータ、32ビットダブルワード、32ビット単精度浮動小数点データ、64ビットクワッドワード、及び64ビット倍精度浮動小数点データを含んでサポートされる。代替的な実施形態において、異なる数のレジスタ及び/又は異なるサイズのレジスタが用いられ得る。さらに他の複数の実施形態において、複数のレジスタは、より小さいレジスタに対してより大きいレジスタのエリアシングを用いてよく又は用いなくてよく、及び/又は、浮動小数点データを格納するのに用いられてよく、又は用いられなくてよい。
図12は、パックドデータオペレーションマスクビット数がパックドデータ幅及びパックドデータ要素幅に依存することを図示する表1270である。128ビット、256ビット、及び512ビットのパックドデータ幅が示されているが、他の幅も可能である。16ビットの半精度、32ビットの単精度、及び64ビットの倍精度浮動小数点形式のパックドデータ要素幅が示されているが、他の幅も可能である。一例として、パックドデータ幅が128ビットである場合、4ビット(例えば、レジスタの最下位順の4ビット)が、パックドデータ要素幅が32ビットである場合、マスキングするのに用いられ得る。
図13は、オペレーションマスクレジスタ1320の適したセットの例示的な実施形態のブロック図である。パックドデータオペレーションマスクレジスタのそれぞれは、パックドデータオペレーションマスクを格納するのに用いられ得る。図示された実施形態において、そのセットは、k0からk7と標識される8つのレジスタを含む。代替的な実施形態は、8つのレジスタより少なく含んでよく(例えば、2つ、4つ、6つなど)、あるいは8つのレジスタより多く含んでよい(例えば、16個、32個など)。図示された実施形態において、レジスタのそれぞれが64ビットである。代替的な実施形態において、レジスタの幅は、64ビットより広くてよく(例えば、80ビット、128ビットなど)、あるいは64ビットより狭くてよい(例えば、8ビット、16ビット、32ビットなど)。複数のレジスタは、周知技術を用いて異なる態様で実装されてよく、任意の既知の特定の種類の回路に限定されない。複数の適したレジスタの複数の例は、専用物理レジスタと、レジスタリネーミングを用いる動的に割り当てられた物理レジスタと、これらの組み合わせとを含むが、これらに限定されない。
いくつかの実施形態において、パックドデータオペレーションマスクレジスタ1320は、アーキテクチャレジスタの別個で専用のセットであってよい。いくつかの実施形態において、複数の命令は、他の種類のレジスタ(例えば、パックドデータレジスタ)を符号化する又は指定するのに用いられるものよりも、命令フォーマットの異なるビット又は1つ又は複数の異なるフィールドにパックドデータオペレーションマスクレジスタを符号化し又は指定してよい。例として、命令は、8つのパックドデータオペレーションマスクレジスタk0からk7のうちの何れか1つを符号化する又は指定するのに、3ビット(例えば、3ビットのフィールド)を用いてよい。代替的な実施形態において、より少ない又はより多くのパックドデータオペレーションマスクレジスタがある場合、より少ない又はより多くのビットのうちの何れかがそれぞれ用いられてよい。1つ特定の実装において、パックドデータオペレーションマスクレジスタk1からk7のみ(ただし、k0ではない)が、マスクパックドデータオペレーションをプレディケートするプレディケートオペランドとして、アドレス指定され得る。レジスタk0は、通常ソース又はデスティネーションとして用いられてよいが、プレディケートオペランドとして符号化されなくてよい(例えば、k0が指定される場合、それが「マスキングなし」符号化を有する)。しかし、このことは選択的で必須ではない。
命令セットは、1つ又は複数の命令フォーマットを含む。所与の命令フォーマットは、他のものから、実行されるべきオペレーション(オペコード)及びオペレーションがそれに対して実行されるオペランドを指定するべく、様々なフィールド(ビット数、ビットの位置)を定義する。
いくつかの命令フォーマットは、命令テンプレート(又はサブフォーマット)の定義を通じてさらに分解される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するよう定義されてよく(含まれたフィールドは通常、同じ順序にあるが、含まれるフィールドがより少ないので、少なくとも一部は異なるビット位置を有する)、及び/又は、別に解釈された所与のフィールドを有するよう定義されてよい。それにより、ISAの各命令が、所与の命令フォーマットを用いて(及び、定義された場合、命令フォーマットの命令テンプレートの所与の1つにおいて)表され、オペレーション及び複数のオペランドを指定するための複数のフィールドを含む。例えば、例示的なADD命令は、特定のオペコードとオペコードフィールドを含む命令フォーマットとを有することによって、複数のオペランド(ソース1/デスティネーション及びソース2)を選択するそのオペコード及び複数のオペランドフィールドを指定し、命令ストリームにおけるこのADD命令の発生は、複数の特定のオペランドを選択する複数のオペランドフィールドにおける具体的な複数のコンテンツを有するであろう。進化型ベクトル拡張(AVX)(AVX1及びAVX2)と称され、ベクトル拡張(VEX)符号化スキームを用いるSIMD拡張のセットがリリースされてより、及び/又は公開されている(例えば、インテル(登録商標)64及びIA−32アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、2011年10月参照、及び、インテル(登録商標)進化型ベクトル拡張プログラミング・レファレンス、2011年6月参照)。例示的な命令フォーマット
本明細書にて説明される命令の複数の実施形態は、異なるフォーマットで具現化され得る。さらに、複数の例示的なシステム、アーキテクチャ、及びパイプラインは以下に詳述される。命令の複数の実施形態は、そのようなシステム、アーキテクチャ、及びパイプライン上で実行され得るが、詳述されているそれらに限定されない。
汎用ベクトル向け命令フォーマット
ベクトル向け命令フォーマットが、ベクトル命令に適した命令フォーマットである(例えば、ベクトルオペレーションに固有の一定の複数のフィールドがある)。ベクトル及びスカラオペレーションの両方が、ベクトル向け命令フォーマットを通じてサポートされる複数の実施形態が説明されている一方、複数の代替的な実施形態は、ベクトル向け命令フォーマットのベクトルオペレーションのみを用いる。
図14A−14Bは、本願発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそれの命令テンプレートを示すブロック図である。図14Aは、本願発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びこれらのクラスAの命令テンプレートを示すブロック図である一方、図14Bは、本願発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びこれらのクラスBの命令テンプレートを示すブロック図である。具体的に、クラスA及びクラスBの命令テンプレートが定義される汎用ベクトル向け命令フォーマット1400であり、これらの両方とも、ノーメモリアクセス1405の命令テンプレートとメモリアクセス1420の命令テンプレートとを含む。ベクトル向け命令フォーマットの文脈における汎用(generic)という用語は、いかなる特定の命令セットにも結びついていない命令フォーマットを指す。
ベクトル向け命令フォーマットが、32ビット(4バイト)又は64ビット(8バイト)のデータ要素幅(又はサイズ)を有する64バイトのベクトルオペランド長(又はサイズ)(それにより、64バイトのベクトルが16ダブルワードサイズの要素又は代替的に8クワッドワードサイズの要素の何れかからなる)、16ビット(2バイト)又は8ビット(1バイト)のデータ要素幅(又はサイズ)を有する64バイトのベクトルオペランド長(又はサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、又は8ビット(1バイト)のデータ要素幅(又はサイズ)を有する32バイトのベクトルオペランド長(又はサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、又は8バット(1バイト)のデータ要素幅(又はサイズ)を有する16バイトのベクトルオペランド長(又はサイズ)をサポートする、本願発明の複数の実施形態が説明される一方、複数の代替的な実施形態は、より多くの、より少ない、又は異なるデータ要素幅(例えば、128ビット(16バイト)のデータ要素幅)を有する、より多くの、より少ない、及び/又は異なるベクトルオペランドサイズ(例えば、256バイトのベクトルオペランド)をサポートし得る。
図14AのクラスAの命令テンプレートは、1)ノーメモリアクセス1405の命令テンプレート内に示されるノーメモリアクセス・フル丸め制御型オペレーション1410の命令テンプレート、及びノーメモリアクセス・データ変換型オペレーション1415の命令テンプレート、並びに2)メモリアクセス1420の命令テンプレート内に示されるメモリアクセス・一時的1425の命令テンプレート及びメモリアクセス・非一時的1430の命令テンプレートを含む。図14BのクラスBの命令テンプレートは、1)ノーメモリアクセス1405の命令テンプレート内に示されるノーメモリアクセス・書き込みマスク制御・部分的丸め制御型オペレーション1412の命令テンプレート及びノーメモリアクセス・書き込みマスク制御・vsize型オペレーション1417の命令テンプレート、並びに2)メモリアクセス1420の命令テンプレート内に示されるメモリアクセス・書き込みマスク制御1427の命令テンプレートを含む。
汎用ベクトル向け命令フォーマット1400は、図14A−14Bに図示されている順序で以下に列挙される複数の以下のフィールドを含む。
フォーマットフィールド1440−このフィールドの特定の値(命令フォーマットの識別子値)がベクトル向け命令フォーマットを一意に識別し、それにより、複数の命令ストリームのベクトル向け命令フォーマットにおいて、複数の命令が発生する。そのように、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットにとっては必須ではないという意味で、選択的である。ベースオペレーションフィールド1442−そのコンテンツは、異なるベースオペレーションを区別する。
レジスタインデックスフィールド1444−そのコンテンツは、直接又はアドレス生成を通じて、ソース及びデスティネーションオペランドがレジスタにあれ、メモリにあれ、それらの位置を指定する。これらは、PxQ(例えば、32x512、16x128、32x1024、64x1024)のレジスタファイルからN個のレジスタを選択するのに十分なビット数を含む。一実施形態においてNは最大、3つのソース及び1つのデスティネーションレジスタであり得る一方、複数の代替的な実施形態では、より多くの又はより少ないソース及びデスティネーションレジスタをサポートし得る(例えば、これらのソースのうちの1つがデスティネーションとしても動作する最大2つのソースをサポートしてよく、これらのソースのうちの1つがデスティネーションとしても動作する最大3つのソースをサポートしてよく、最大2つのソース及び1つのデスティネーションをサポートしてよい)。
修飾子フィールド1446−そのコンテンツは、メモリアクセスを指定する汎用ベクトル命令フォーマットにおける複数の命令の発生を、指定しないものから、すなわち、ノーメモリアクセス1405の命令テンプレートとメモリアクセス1420の命令テンプレートとの間で区別する。
複数のメモリアクセスオペレーションは、(場合によって、レジスタ内の値を用いてソース及び/又はデスティネーションアドレスを指定する)メモリ階層に対して読み取り及び/又は書き込みを行う一方、複数のノーメモリアクセスオペレーションは行わない(例えば、そのソース及びデスティネーションはレジスタである)。一実施形態においてこのフィールドはまた、3つの異なる態様の間で選択してメモリアドレス算出を実行する一方、複数の代替的な実施形態は、より多くの、より少ない、又は異なる態様をサポートしてメモリアドレス算出を実行し得る。
オーグメンテーションオペレーションフィールド1450−そのコンテンツは、ベースオペレーションに加えて、様々な異なるオペレーションから実行されるべき1つを区別する。このフィールドはコンテキスト固有である。本願発明の一実施形態において、このフィールドは、クラスフィールド1468、アルファフィールド1452、及びベータフィールド1454に分割される。オーグメンテーションオペレーションフィールド1450は、オペレーションの複数の共通のグループが2つ、3つ、又は4つの命令ではなく、単一の命令において、実行されることを可能にする。
スケールフィールド1460−そのコンテンツは、メモリアドレス生成のために(例えば、2scale*index+baseを用いるアドレス生成のため)に、インデックスフィールドのコンテンツのスケーリングを可能にする。
変位フィールド1462A−そのコンテンツは、(例えば、2scale*index+base+displacementを用いるアドレス生成のために)、メモリアドレス生成の一部として用いられる。
変位係数フィールド1462B(変位フィールド1462Aが変位係数フィールド1462Bに直接並置されることは一方又は他方が用いられていることを示すことに留意)−そのコンテンツは、アドレス生成の一部として用いられ、メモリアクセス(N)のサイズによりスケーリングされる変位要因を指定する。ここで、Nは、メモリアクセス(例えば、2scale*index+base+displacementを用いるアドレス生成のため)のバイト数である。冗長下位ビットは無視され、よって、変位係数フィールドのコンテンツが、有効アドレスを算出するのに用いられるべき最終変位を生成するために、メモリオペランドの合計サイズ(N)により乗算される。Nの値は、フルオペコードフィールド1474(本明細書で後述される)及びデータ操作フィールド1454Cに基づいて、ランタイムにプロセッサハードウェアにより決定される。変位フィールド1462A及び変位係数フィールド1462Bは、それらがノーメモリアクセス1405の命令テンプレートのために用いられず、及び/又は複数の異なる実施形態がそれら2つのうちの1つのみを実行する又はどちらも実行しない場合があるという意味で、選択的である。
データ要素幅フィールド1464−そのコンテンツは、(いくつかの実施形態において、全ての命令に対して、他の複数の実施形態においては、複数の命令のうちの一部のみに対して)多数のデータ要素幅の中で用いられるべき1つを区別する。このフィールドは、複数のオペコードのいくつかの態様を用いて、1つのデータ要素幅のみがサポートされ、及び/又は、複数のデータ要素幅がサポートされる場合、必須ではないという意味で、選択的である。
書き込みマスクフィールド1470−そのコンテンツは、データ要素位置毎のベースで、デスティネーションベクトルオペランドにおけるデータ要素位置がベースオペレーション及びオーグメンテーションオペレーションの結果を反映するか否かを制御する。クラスAの命令テンプレートは、併合書き込みマスクをサポートする一方、クラスBの命令テンプレートは、併合書き込みマスクとゼロ書き込みの書き込みマスクの両方をサポートする。併合の場合、ベクトルマスクは、デスティネーションの複数の要素の任意のセットが、(ベースオペレーション及びオーグメンテーションオペレーションにより指定される)任意のオペレーションの実行中に複数の更新から保護されることを可能とし、他の一実施形態においては、対応するマスクビットが0を有するデスティネーションの各要素の古い値を保存する。対照的に、ゼロを書き込む場合、複数のベクトルマスクは、デスティネーションの複数の要素の任意のセットが、(ベースオペレーション及びオーグメンテーションオペレーションにより指定される)任意のオペレーションの実行中にゼロを書き込まれることを可能にし、一実施形態において、対応するマスクビットが0の値を有する場合、デスティネーションの要素が0に設定される。この機能のサブセットは、実行されるオペレーションのベクトル長(すなわち、最初のものから最後のものまでの修正される要素のスパン)を制御する能力であるが、しかし、修正される複数の要素が連続している必要はない。それにより、書き込みマスクフィールド1470は、読み込み、格納、算術、ロジックなどを含み、複数の部分的ベクトルオペレーションを可能にする。書き込みマスクフィールド1470のコンテンツが、用いられるべき書き込みマスクを含む多数の書き込みマスクレジスタから1つを選択する(それにより、書き込みマスクフィールド1470のコンテンツは、実行されるべきマスキングを間接的に識別する)、本願発明の複数の実施形態が説明される一方、複数の代替的な実施形態は、その代わりに、又は追加的に、書き込みマスクフィールド1470のコンテンツは、実行されるマスキングを直接指定する。
即値フィールド1472−そのコンテンツは、即値の仕様を可能にする。このフィールドは、即値をサポートしない汎用ベクトル向けフォーマットの実装に存在せず、即値を用いない命令に存在しないという意味で、選択的である。
クラスフィールド1468−そのコンテンツは、異なるクラスの命令の間で区別する。図14A−Bを参照すると、このフィールドのコンテンツはクラスA及びクラスBの命令の間で選択する。図14A−Bにおいて、複数の角の丸いマス目が、特定の値がフィールドに存在することを示すのに用いられる(例えば、図14A−Bのそれぞれのクラスフィールド1468のためのクラスAの1468A及びクラスBの1468B)。
クラスAの命令テンプレート
非メモリアクセス1405のクラスAの命令テンプレートである場合、アルファフィールド1452がRSフィールド1452Aとして解釈され、そのコンテンツは複数の異なるオーグメンテーションオペレーションの種類から実行されるべき1つ(例えば、丸め1452A.1及びデータ変換1452A.2がそれぞれ、ノーメモリアクセス・丸め型オペレーション1410及びノーメモリアクセス・データ変換型オペレーション1415の命令テンプレートに対して指定される)を区別する一方、ベータフィールド1454は、指定される型のオペレーションから実行されるべき1つを区別する。ノーメモリアクセス1405の命令テンプレート、スケールフィールド1460、変位フィールド1462A、及び変位係数フィールド1462Bは、存在しない。
ノーメモリアクセスの命令テンプレートーフル丸め制御型オペレーション
ノーメモリアクセス・フル丸め制御型オペレーション1410の命令テンプレートにおいて、ベータフィールド1454は、丸め制御フィールド1454Aとして解釈され、そのコンテンツは、静的な丸めを提供する。説明されている本願発明の複数の実施形態において、丸め制御フィールド1454Aは、全浮動小数点例外抑制(SAE)フィールド1456及び丸めオペレーション制御フィールド1458を含む一方、複数の代替的な実施形態は、これらのコンセプトの両方をサポートし、同じフィールドに符号化してよく、又はこれらのコンセプト/フィールドのうちの一方又は他方のみを有してよい(例えば、丸めオペレーション制御フィールド1458のみを有してよい)。
SAEフィールド1456−そのコンテンツは、例外イベント報告を無効化にするか否かを区別し、SAEフィールド1456のコンテンツが、抑制が有効であることを示している場合、所与の命令が、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外処理部も立ち上げない。
丸めオペレーション制御フィールド1458−そのコンテンツは、一群の丸めオペレーション(例えば、切り上げ、切り捨て、ゼロへの丸め、及び最近接数への丸め)から実行されるべき1つを区別する。それにより、丸めオペレーション制御フィールド1458は、各命令ベースで丸めモードの変更を可能にする。プロセッサが、複数の丸めモードを指定する制御レジスタを含む、本願発明の一実施形態において、丸めオペレーション制御フィールド1458のコンテンツはそのレジスタ値をオーバーライドする。
ノーメモリアクセスの命令テンプレート−データ変換型オペレーション
ノーメモリアクセス・データ変換型オペレーション1415の命令テンプレートにおいて、ベータフィールド1454は、データ変換フィールド1454Bとして解釈され、そのコンテンツは、多数のデータ変換から実行されるべき1つ(例えば、データ変換なし、スウィズル、ブロードキャスト)を区別する。
メモリアクセス1420のクラスAの命令テンプレートの場合、アルファフィールド1452は、追い出し示唆フィールド1452Bとして解釈され、そのコンテンツは、追い出し示唆から用いられるべき1つを区別し(図14Aでは、一時的1452B.1及び非一時的1452B.2がそれぞれメモリアクセス・一時的1425の命令テンプレート及びメモリアクセス・非一時的1430の命令テンプレートに対して指定される)、一方、ベータフィールド1454は、データ操作フィールド1454Cとして解釈され、そのコンテンツは、多数のデータ操作オペレーション(プリミティブとしても知られている)から実行されるべき1つを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバート、及びデスティネーションのダウンコンバート)。メモリアクセス1420の命令テンプレートは、スケールフィールド1460を含み、変位フィールド1462A又は変位係数フィールド1462Bを選択的に含む。
複数のベクトルメモリ命令は、変換サポートにより、メモリからの複数のベクトル読み込み及びメモリへの複数のベクトル格納を実行する。複数の通常のベクトル命令と同様に、複数のベクトルメモリ命令は、書き込みマスクとして選択されるベクトルマスクのコンテンツに命令される、実際に転送される複数の要素と共に、データ要素単位の様式で、メモリから/へデータを転送する。
メモリアクセスの命令テンプレート−一時的
一時的データは、キャッシュによる利益を十分に受けられるほどすぐに再利用される可能性が高いデータである。しかしながら、これは示唆であり、複数の異なるプロセッサは、その示唆を完全に無視することを含み、複数の異なる態様でこれを実装し得る。
メモリアクセスの命令テンプレート―非一時的
非一時的データは、第1レベルキャッシュでキャッシングによる利益を十分に受けられるほどすぐに再利用される可能性が低いデータであり、追い出しの優先度が与えられるべきである。しかしながら、これは示唆であり、複数の異なるプロセッサは、その示唆を完全に無視することを含み、これを複数の異なる態様で実装し得る。
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド1452は、書き込みマスク制御(Z)フィールド1452Cとして解釈され、そのコンテンツは、書き込みマスクフィールド1470により制御される書き込みマスキングが併合又はゼロ書き込みであるべきか否かを区別する。
非メモリアクセス1405のクラスBの命令テンプレートである場合、ベータフィールド1454の一部は、RLフィールド1457Aとして解釈され、そのコンテンツは、異なるオーグメンテーションオペレーションの種類から実行されるべき1つを区別し(例えば、丸め1457A.1及びベクトル長(VSIZE)1457A.2がそれぞれ、ノーメモリアクセス・書き込みマスク制御・部分的丸め制御型オペレーション1412の命令テンプレート及びノーメモリアクセス・書き込みマスク制御・VSIZE型オペレーション1417の命令テンプレートに対して指定される)、一方、残りのベータフィールド1454は、指定された型の複数のオペレーションから実行されるべきものを区別する。ノーメモリアクセス1405の命令テンプレートにおいて、スケールフィールド1460、変位フィールド1462A、及び変位係数フィールド1462Bは存在しない。
ノーメモリアクセス・書き込みマスク制御、部分的丸め制御型オペレーション1410の命令テンプレートにおいて、残りのベータフィールド1454は、丸めオペレーションフィールド1459Aとして解釈され、例外イベント報告が無効化される(所与の命令がいかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外処理部も立ち上げない)。
丸めオペレーション制御フィールド1459A−丸めオペレーション制御フィールド1458とちょうど同じように、そのコンテンツは、一群の丸めオペレーション(例えば、切り上げ、切り捨て、ゼロへの丸め、最近接数への丸め)から実行されるべき1つを区別する。それにより、丸めオペレーション制御フィールド1459Aは、各命令ベースで複数の丸めモードの変更を可能にする。プロセッサが複数の丸めモードを指定する複数の制御レジスタを含む本願発明の一実施形態において、丸めオペレーション制御フィールド1458のコンテンツは、そのレジスタ値をオーバーライドする。
ノーメモリアクセス・書き込みマスク制御・VSIZE型オペレーション1417の命令テンプレートにおいて、残りのベータフィールド1454は、ベクトル長フィールド1459Bとして解釈され、そのコンテンツは、多数のデータベクトル長から実行されるべき1つ(例えば、128、256、又は512バイト)を区別する。
メモリアクセス1420のクラスBの命令テンプレートである場合、ベータフィールド1454の一部は、ブロードキャストフィールド1457Bとして解釈され、そのコンテンツは、ブロードキャスト型データ操作オペレーションが実行されるか否かを区別し、一方、残りのベータフィールド1454は、ベクトル長フィールド1459Bとして解釈される。メモリアクセス1420の命令テンプレートは、スケールフィールド1460を含み、変位フィールド1462A又は変位係数フィールド1462Bを選択的に含む。
汎用ベクトル向け命令フォーマット1400に関連して、フォーマットフィールド1440、ベースオペレーションフィールド1442、及びデータ要素幅フィールド1464を含むフルオペコードフィールド1474が示されている。フルオペコードフィールド1474がこれらのフィールドの全てを含む、一実施形態が示されている一方、それらの全てをサポートしない複数の実施形態においては、フルオペコードフィールド1474は、これらのフィールドの全てより少ないものを含む。フルオペコードフィールド1474はオペレーションコード(オペコード)を提供する。
オーグメンテーションオペレーションフィールド1450、データ要素幅フィールド1464、及び書き込みマスクフィールド1470は、これらの特徴が、各命令ベースで、汎用ベクトル向け命令フォーマットにおいて指定されることを可能にする。
書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、マスクが複数の異なるデータ要素幅に基づいて適用されることを可能にする複数の型別の命令を生成する。
クラスA及びクラスB内に得られる様々な命令テンプレートは、複数の異なる状況において有益である。本願発明のいくつかの実施形態において、複数の異なるプロセッサ又は一のプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ、又は両方のクラスをサポートし得る。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよく、主にグラフィックス及び/又はサイエンティフィック(スループット)コンピューティング向けのコアは、クラスAのみをサポートしてよく、両方向けのコアは両方をサポートしてよい(もちろん、両方のクラスから複数のテンプレート及び複数の命令のいくつかの組み合わせを有するが両方のクラスから全てのテンプレート及び命令を有しないコアは、本願発明の範囲内にある)。また、単一のプロセッサは、複数のコアを含んでよく、その全ては同じクラスをサポートし、又は異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックス及び汎用コアを有するプロセッサにおいて、主にグラフィックス及び/又はサイエンティフィックコンピューティング向けの複数のグラフィックスコアのうちの1つは、クラスAのみをサポートしてよく、一方、汎用コアのうちの1つ又は複数は、クラスBのみをサポートする、汎用コンピューティング向けのアウトオブオーダ実行及びレジスタリネーミングを有する高性能汎用コアであってよい。別個のグラフィックスコアを有さない別のプロセッサは、クラスA及びクラスBの両方をサポートするもう1つ汎用インオーダ又はアウトオブオーダコアを含み得る。もちろん、一方のクラスからの複数の特徴はまた、本願発明の複数の異なる実施形態において、他方のクラスに実行され得る。高水準言語で書かれている複数のプログラムは、様々な異なる実行可能な形式に換えてもよく(例えば、ジャストインタイムにコンパイルまたは静的にコンパイルされる)、そのような形式には、1)実行用のターゲットプロセッサによりサポートされるクラスの複数の命令のみを有する形式、又は、2)全てのクラスの複数の命令の複数の異なる組み合わせを用いて書かれている複数の代替的なルーチンを有し、コードを現在実行しているプロセッサによってサポートされる命令に基づいて実行する複数のルーチンを選択する制御フローコードを有する形式、が含まれる。
例示的な特定ベクトル向け命令フォーマット
図15A−Dは、本願発明の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図15A−Dは、複数のフィールドの位置、サイズ、解釈、及び順序、並びにそれらのフィールドの一部の値を指定するという意味で特定の特定ベクトル向け命令フォーマット1500を示す。特定ベクトル向け命令フォーマット1500は、x86命令セットを拡張するのに用いられてよく、それにより、複数のフィールドの一部は既存のx86命令セット及びこれらの拡張(例えば、AVX)に用いられるものと同様又は同じである。このフォーマットは、複数の拡張を伴う既存のx86命令セットのプレフィックス符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、及び即値フィールドとの整合性を保つ。図14A−Bの複数のフィールドにマッピングする図15A−Dの複数のフィールドが図示されている。
本願発明の複数の実施形態が、例示の目的のために、汎用ベクトル向け命令フォーマット1400との関連で特定ベクトル向け命令フォーマット1500を参照して説明されているが、本願発明は、特許請求の範囲に記載されたものを除き、特定ベクトル向け命令フォーマット1500に限定されないことが理解されるべきである。例えば、汎用ベクトル向け命令フォーマット1400は、様々なフィールドに対して様々な可能なサイズを企図し、一方、特定ベクトル向け命令フォーマット1500は、特定のサイズのフィールドを含むものとして示される。特定の例を用いて、データ要素幅フィールド1464が特定ベクトル向け命令フォーマット1500における1ビットのフィールドとして図示されている一方、本願発明はそのように限定されない(すなわち、汎用ベクトル向け命令フォーマット1400は、他のサイズのデータ要素幅フィールド1464を企図する)。
汎用ベクトル向け命令フォーマット1400は、図15Aに図示されている順序で以下に列挙される複数の以下のフィールドを含む。EVEXプレフィックス(バイト0−3)1502−4バイトの形式において符号化される。
フォーマットフィールド1440(EVEXバイト0、ビット[7:0])−第1のバイト(EVEXバイト0)がフォーマットフィールド1440であり、0x62(本願発明の一実施形態においてベクトル向け命令フォーマットを区別するのに用いられる固有値)を含む。
第2−第4のバイト(EVEXバイト1−3)は、特定の機能を提供する多数のビットフィールドを含む。
REXフィールド1505(EVEXバイト1、ビット[7−5])−EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、及びEVEX.Bビットフィールド(EVEXバイト1、ビット[5]−B)からなる。
EVEX.R、EVEX.X、及びEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能を提供し、1の補数の形式を用いて符号化される。すなわち、ZMM0がHUBとして符号化され、ZMM15は0000Bとして符号化される。当技術分野で知られているように、複数の命令の複数の他のフィールドがレジスタインデックスの下位3ビット(rrr、xxx、及びbbb)を符号化し、これにより、Rrrr、Xxxx、及びBbbbが、EVEX.R、EVEX.X及びEVEX.Bを加算することにより形成され得る。
REX'フィールド1410−これは、REX'フィールド1410の第1の部分であり、拡張された32個のレジスタセットの上位16又は下位16の何れかを符号化するのに用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本願発明の一実施形態において、このビットは、以下に示されるように他のものと共に、(周知のx86 32ビットのモードで)BOUND命令から区別するビット反転フォーマットに格納され、そのリアルオペコードバイトが62であるが、MOD R/Mフィールド(後述)においてMODフィールドの11の値を受け取らない。本願発明の代替的な複数の実施形態は、これと、以下に示される反転フォーマットの他のビットを格納しない。1の値は、下位16個のレジスタを符号化するのに用いられる。言い換えれば、R'Rrrrが、EVEX.R'、EVEX.R、及び複数の他のフィールドからの他のRRRを組み合わせることによって形成される。
オペコードマップフィールド1515(EVEXバイト1、ビット[3:0]−mmmm)―そのコンテンツは、示唆された先頭のオペコードバイト(0F、0F38、又は0F3)を符号化する。
データ要素幅フィールド1464(EVEXバイト2、ビット[7]−W)は、EVEX.Wという表記により表される。EVEX.Wは、データタイプ(32ビットのデータ要素又は64ビットのデータ要素の何れか)の粒度(サイズ)を定義するのに用いられる。
EVEX.vvvv1520(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は、以下のものを含み得る。1)EVEX.vvvvは、反転された(1の補数)形式で指定される第1のソースレジスタオペランドを符号化し、2つ以上のソースオペランドを有する複数の命令に有効である、2)EVEX.vvvvは、特定のベクトルシフトに対して1の補数の形式で指定されるデスティネーションレジスタオペランドを符号化する、又は3)EVEX.vvvvは、何れのオペランドも符号化せず、そのフィールドは残され、1111bを含むべきである。それにより、EVEX.vvvvフィールド1520は、反転された(1の補数)形式に格納された第1のソースレジスタ指定子の4つの下位ビットを符号化する。命令に応じて、追加の異なるEVEXビットフィールドは、32個のレジスタに指定子サイズを拡張するのに用いられる。
EVEX.Uクラスフィールド1468(EVEXバイト2、ビット[2]−U)−EVEX.U=0の場合、クラスA又はEVEX.U0を示し、EVEX.U=1の場合、クラスB又はEVEX.U1を示す。
プレフィックス符号化フィールド1525(EVEXバイト2、ビット[1:0]−pp)−ベースオペレーションフィールドに対して追加のビットを提供する。EVEXプレフィックスフォーマットのレガシSSE命令に対してサポートを提供することに加えて、これはSIMDプレフィックスをコンパクトにする利点も有する(SIMDプレフィックスを表現するためにバイトを必要とせず、EVEXプレフィックスは2ビットのみを必要とする)。一実施形態において、レガシフォーマット及びEVEXプレフィックスフォーマットの両方にSIMDプレフィックス(66H,F2H、F3H)を用いるレガシSSE命令をサポートするべく、これらのレガシSIMDプレフィックスは、SIMDプレフィックス符号化フィールドに符号化され、デコーダのPLAに提供される前に、ランタイムでレガシSIMDプレフィックスに拡張される(よって、PLAは、修正せずにこれらのレガシ命令のレガシ及びEVEXフォーマットの両方を実行できる)。より新しい命令がオペコード拡張として、EVEXプレフィックス符号化フィールドのコンテンツを直接用いることができるが、特定の実施形態は、整合性に関して同様の様式に拡張するが、これらの複数のレガシSIMDプレフィックスによって指定されるべき異なる複数の意味を可能とする。代替的な実施形態では、PLAを再設計して2ビットのSIMDプレフィックス符号化をサポートしてよく、それにより、拡張が要求されない。
アルファフィールド1452(EVEXバイト3、ビット[7]−EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control、及びEVEX.Nとしても知られており、αを用いて示されることもある)−前に説明されたように、このフィールドは、コンテキスト固有である。
ベータフィールド1454(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2_0、EVEX.r2_0、EVEX.rrl、EVEX.LLO、EVEX.LLBとしても知られており、βββを用いても示される)−前に説明されたように、このフィールドは、コンテキスト固有である。
REX'フィールド1410−これは、REX'フィールドの残りであり、拡張された32のレジスタセットの上位16又は下位16の何れかを符号化するのに用いられ得るEVEX.Vビットフィールド(EVEXバイト3、ビット[3]−V)である。このビットは、ビット反転フォーマットで格納される。1の値は、下位16個のレジスタを符号化するのに用いられる。言い換えれば、V'VVVVは、EVEX.VとEVEX.vvvvを組み合わせることによって形成される。
書き込みマスクフィールド1470(EVEXバイト3、ビット[2:0]−kkk)―そのコンテンツは、前に説明されたように、複数の書き込みマスクレジスタのうちのレジスタのインデックスを指定する。本願発明の一実施形態において、EVEX.kkk=000という特定の値は、特定の命令に対して書き込みマスクを用いないことを示唆する特定の動作を有する(これは、ハードウェアに組み込まれた全ての書き込みマスク又はマスキングハードウェアを回避するハードウェアを用いることを含む、様々な態様で実装され得る)。
リアルオペコードフィールド1530(バイト4)はまた、オペコードバイトとして知られている。オペコードの一部がこのフィールドに指定される。
MOD R/Mフィールド1540(バイト5)は、MODフィールド1542、Regフィールド1544、及びR/Mフィールド1546を含む。前に説明されたように、MODフィールド1542のコンテンツは、メモリアクセスオペレーションとノーメモリアクセスオペレーションとの間で区別する。Regフィールド1544の役割は、デスティネーション・レジスタ・オペランド又はソースレジスタオペランドの何れかを符号化する、又は、オペコード拡張として扱われて何れの命令オペランドを符号化するのにも用いられない、という2つの状況に要約されることができる。R/Mフィールド1546の役割は、メモリアドレスを参照する命令オペランドを符号化すること、又は、デスティネーション・レジスタ・オペランド又はソースレジスタオペランドの何れかを符号化することを含んでよい。
スケール、インデックス、ベース(SIB)バイト(バイト6)−前に説明されたように、スケールフィールド1450のコンテンツは、メモリアドレス生成のために用いられる。SIB.xxx1554及びSIB.bbb1556−これらのフィールドのコンテンツは、レジスタインデックスXxxx及びBbbbに関連して前に言及されていた。
変位フィールド1462A(バイト7−10)−MODフィールド1542が10を含む場合、バイト7−10が変位フィールド1462Aであり、レガシ32ビット変位(disp32)と同じく機能し、バイト粒度で機能する。
変位係数フィールド1462B(バイト7)−MODフィールド1542が01を含む場合、バイト7が変位係数フィールド1462Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セット8ビットの変位(disp8)の位置と同じである。disp8が拡張された符号であることから、−128バイトと127バイトのオフセットとの間でのみアドレスすることができ、64バイトのキャッシュラインに関して、disp8は、−128、−64、0、及び64という4つの本当に有用な値に設定されることができる8ビットを用いるが、多くの場合、より広い範囲が必要とされるので、disp32が用いられる。しかし、disp32には4バイトが必要である。disp8及びdisp32とは対照的に、変位係数フィールド1462Bは、disp8の再解釈であり、変位係数フィールド1462Bを用いる場合、実際の変位は、メモリオペランドアクセス(N)のサイズにより乗算された変位係数フィールドのコンテンツにより決定される。この種類の変位は、disp8*Nと称される。これは、平均命令長(変位のために用いられるが、はるかにより広い範囲を有する単一のバイト)を低減させる。そのような圧縮変位は、有効変位がメモリアクセスの粒度の倍数であるという前提に基づくものであり、よって、アドレスオフセットの冗長下位ビットは符号化される必要がない。言い換えれば、変位係数フィールド1462Bは、レガシx86命令セット8ビットの変位を置換する。それにより、変位係数フィールド1462Bは、disp8がdisp8*Nに多重定義されることのみを除き、x86命令セット8ビットの変位と同じ態様で符号化される(よって、ModRM/SIB 符号化規則は変更されない)。言い換えれば、符号化規則又は符号化長は変更されないが、(バイト単位のアドレスオフセットを得るために、メモリオペランドのサイズで変位をスケーリングする必要がある)ハードウェアによる変位値の解釈においてのみ変更がある。即値フィールド1472は、前に説明されたように動作する。
フルオペコードフィールド
図15Bは、本願発明の一実施形態に係るフルオペコードフィールド1474を構成する特定ベクトル向け命令フォーマット1500の複数のフィールドを示すブロック図である。
具体的に、フルオペコードフィールド1474は、フォーマットフィールド1440と、ベースオペレーションフィールド1442と、データ要素幅(W)フィールド1464とを含む。ベースオペレーションフィールド1442は、プレフィックス符号化フィールド1525と、オペコードマップフィールド1515と、リアルオペコードフィールド1530とを含む。
レジスタインデックスフィールド
図15Cは、本願発明の一実施形態に係るレジスタインデックスフィールド1444を構成する特定ベクトル向け命令フォーマット1500の複数のフィールドを示すブロック図である。具体的に、レジスタインデックスフィールド1444は、REXフィールド1505と、REX'フィールド1510と、MODR/M.regフィールド1544と、MODR/M.r/mフィールド1546と、WWフィールド1520と、xxxフィールド1554と、bbbフィールド1556とを含む。
オーグメンテーションオペレーションフィールド
図15Dは、本願発明の一実施形態に係るオーグメンテーションオペレーションフィールド1450を構成する特定ベクトル向け命令フォーマット1500の複数のフィールドを示すブロック図である。クラス(U)フィールド1468が0を含む場合、EVEX.U0(クラスA1468A)を意味し、1を含む場合、EVEX.U1(クラスB1468B)を意味する。U=0でMODフィールド1542が11を含む(ノーメモリアクセスオペレーションを意味する)場合、アルファフィールド1452(EVEXバイト3、ビット[7]−EH)は、rsフィールド1452Aとして解釈される。rsフィールド1452Aがa1を含む場合(丸め1452A.1)、ベータフィールド1454(EVEXバイト3、ビット[6:4]−SSS)は、丸め制御フィールド1454Aとして解釈される。丸め制御フィールド1454Aは、1ビットのSAEフィールド1456と、2ビットの丸めオペレーションフィールド1458とを含む。rsフィールド1452Aがa0を含む場合(データ変換1452A.2)、ベータフィールド1454(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ変換フィールド1454Bとして解釈される。U=0でMODフィールド1542が00、01、又は10を含む(メモリアクセスオペレーションを意味する)場合、アルファフィールド1452(EVEXバイト3、ビット[7]−EH)は、追い出し示唆(EH)フィールド1452Bとして解釈され、ベータフィールド1454(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド1454Cとして解釈される。
U=1の場合、アルファフィールド1452(EVEXバイト3、ビット[7]−EH)は、書き込みマスク制御(Z)フィールド1452Cとして解釈される。U=1でMODフィールド1542が11を含む(ノーメモリアクセスオペレーションを意味する)場合、ベータフィールド1454(EVEXバイト3、ビット[4]−S0)の一部は、RLフィールド1457Aとして解釈され、a1を含む場合(丸め1457A.1)、残りのベータフィールド1454(EVEXバイト3、ビット[6:5]−S2−1)は、丸めオペレーションフィールド1459Aとして解釈され、一方、RLフィールド1457Aがa0を含む場合(VSIZE1457.A2)、残りのベータフィールド1454(EVEXバイト3、ビット[6−5]−S2−1)は、ベクトル長フィールド1459B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。
U=1でMODフィールド1542が00、01、又は10を含む場合(メモリアクセスオペレーションを意味する)、ベータフィールド1454(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド1459B(EVEXバイト3、ビット[6−5]−L1−0)及びブロードキャストフィールド1457B(EVEXバイト3、ビット[4]−B)として解釈される。
例示的なレジスタアーキテクチャ
図16は、本願発明の一実施形態に係るレジスタアーキテクチャ1600のブロック図である。図示されている実施形態において、512ビット幅の32個のベクトルレジスタ1610があり、これらのレジスタは、ZMM0からZMM31として参照される。下位16個のzmmレジスタの下位順の256ビットは、レジスタymm0−16にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0−15にオーバーレイされる。特定ベクトル向け命令フォーマット1500は、以下の表で示されるように、これらのオーバーレイされるレジスタファイル上で動作する。
言い換えれば、ベクトル長フィールド1459Bは、最大の長さと1つ又は複数の他のより短い長さとの間で選択し、ここで、そのようなより短い長さのそれぞれは、先行の長さの半分の長さであり、ベクトル長フィールド1459Bを有しない命令テンプレートは、最大のベクトル長で動作する。さらに、一実施形態において、特定ベクトル向け命令フォーマット1500のクラスBの命令テンプレートは、パックド又はスカラ単/倍精度浮動小数点データ及びパックド又はスカラ整数データに対して動作する。複数のスカラオペレーションは、zmm/ymm/xmmレジスタにおける最下位のデータ要素位置で実行されるオペレーションであり、上位データ要素位置は、命令前と同じ状態で残されるか、又は、実施形態に応じてゼロを書き込まれるかの何れかである。
書き込みマスクレジスタ1615−図示されている実施形態において、8つの書き込みマスクレジスタ(k0からk7)があり、それぞれのサイズが64ビットである。代替的な実施形態においては、書き込みマスクレジスタ1615はサイズが16ビットである。前に説明されたように、本願発明の一実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして用いられることができず、通常k0を示す符号化が、書き込みマスクのために用いられる場合、0xFFFFのハードウェアに組み込まれる書き込みマスクを選択し、その命令に対する書き込みマスキングを効果的に無効化にする。
汎用レジスタ1625−図示されている実施形態において、複数のメモリオペランドにアドレスする既存のx86アドレッシングモードと共に用いられる16個の64ビットの汎用レジスタがある。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及びR8からR15という名称により参照される。
MMXパックド整数フラットレジスタファイル1650がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)1645−図示されている実施形態において、x87スタックは、x87命令セット拡張を用いて32/64/80ビットの浮動小数点データに対してスカラ浮動小数点オペレーションを実行するのに用いられる8つの要素スタックであり、一方、MMXレジスタは、MMXレジスタとXMMレジスタとの間で実行されるいくつかのオペレーションのための複数のオペランドを保持することと共に、64ビットのパックド整数データに対して複数のオペレーションを実行するのに用いられる。
本願発明の代替的な複数の実施形態は、より広い又はより狭いレジスタを用いてよい。さらに、本願発明の代替的な複数の実施形態は、より多くの、より少ない、又は異なるレジスタファイル及びレジスタを用いてよい。
例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ
複数のプロセッサコアは、複数の異なる目的のために、複数の異なるプロセッサにおいて複数の異なる態様で実装され得る。例えば、そのような複数のコアの複数の実装は、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主にグラフィックス及び/又はサイエンティフィック(スループット)コンピューティング向けの特別用途コアを含み得る。複数の異なるプロセッサの複数の実装は、1)汎用コンピューティング向けの1つ又は複数の汎用インオーダコア及び/又は汎用コンピューティング向けの1つ又は複数の汎用アウトオブオーダコアを含むCPU、2)主にグラフィックス及び/又はサイエンティフィック(スループット)向けの1つ又は複数の特別用途コアを含むコプロセッサを含み得る。そのような複数の異なるプロセッサは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUとして同じパッケージにおける別個のダイ上のコプロセッサ、3)CPUとして同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、統合グラフィックス及び/又はサイエンティフィック(スループット)ロジックなど専用ロジックとして、又は特別用途コアとして称される場合がある)、及び4)同じダイ上で説明されたCPU(アプリケーションコア又はアプリケーションプロセッサとして称される場合がある)上述されたコプロセッサ、及び追加の機能を含み得るチップ上のシステムを含み得る異なるコンピュータシステムアーキテクチャをもたらす。複数の例示的なコアアーキテクチャが次に説明され、その後に複数の例示的プロセッサ及びコンピュータアーキテクチャの説明がされる。
例示的なコアアーキテクチャ インオーダ及びアウトオブオーダコアのブロック図
図17Aは、本願発明の複数の実施形態に係る例示的インオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図17Bは、本願発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコア及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの例示的実施形態の両方を示すブロック図である。図17A−Bの複数の実線のボックスは、インオーダパイプライン及びインオーダコアを図示し、一方、複数の破線のボックスの選択的な追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプライン及びコアを図示する。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様は説明される。
図17Aにおいて、プロセッサパイプライン1700は、フェッチステージ1702と、長さ復号ステージ1704と、復号ステージ1706と、割り当てステージ1708と、リネーミングステージ1710と、スケジューリング(ディスパッチ又は発行としても知られている)ステージ1712と、レジスタ読み取り/メモリ読み取りステージ1714と、実行ステージ1716と、ライトバック/メモリ書き込みステージ1718と、例外処理ステージ1722と、コミットステージ1724とを含む。
図17Bは、実行エンジンユニット1750に結合され、両方ともメモリユニット1770に結合されるフロントエンドユニット1730を含むプロセッサコア1790を示す。コア1790は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、若しくは、ハイブリッド又は代替的コアの種類であってよい。また別のオプションとして、コア1790は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、グラフィックスコア、又は同様のものなどの専用コアであってよい。
フロントエンドユニット1730は、命令キャッシュユニット1734に結合される分岐予測ユニット1732を含み、命令キャッシュユニット1734は命令トランスレーションルックアサイドバッファ(TLB)1736に結合され、命令TLBユニット1736は、命令フェッチユニット1738に結合され、命令フェッチユニット1738は復号ユニット1740に結合される。復号ユニット1740(又はデコーダ)は、複数の命令を復号し、出力部として、1つ又は複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、又は、元の複数の命令から復号された、あるいはこれらを反映した、若しくはこれらから派生された他の制御信号を生成してよい。復号ユニット1740は、様々な異なる機構を用いて実装され得る。適した機構の複数の例は、複数のルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)などを含むが、これらに限定されない。一実施形態において、コア1790は、マイクロコードROM、又は一定のマクロ命令のためのマイクロコードを格納する他のメディア(例えば、復号ユニット1740に、あるいはフロントエンドユニット1730内に)を含む。復号ユニット1740は、実行エンジンユニット1750内のリネーミング/アロケータユニット1752に結合される。
実行エンジンユニット1750は、リタイアメントユニット1754に結合されるリネーミング/アロケータユニット1752と、1つ又は複数のスケジューラユニット1756のセットとを含む。スケジューラユニット1756は、予約ステーション、中央命令ウィンドウなどを含み、任意の数の異なるスケジューラを表す。スケジューラユニット1756は、物理レジスタファイルユニット1758に結合される。物理レジスタファイルユニット1758のそれぞれは、1つ又は複数の物理レジスタファイルを表し、それらの異なるものは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)などのような1つ又は複数の異なるデータの種類を格納する。一実施形態において、物理レジスタファイルユニット1758は、ベクトルレジスタユニットと、書き込みマスクレジスタユニットと、スカラレジスタユニットとを含む。これらのレジスタユニットは、アーキテクチャ的ベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイルユニット1758は、リタイアメントユニット1754により重複され、レジスタリネーミング及びアウトオブオーダ実行が実行され得る(例えば、リオーダバッファ及びリタイアレジスタファイルを用いて、フューチャファイル、履歴バッファ、及びリタイアレジスタファイルを用いて、レジスタマップ及びレジスタのプールを用いるなど)様々な態様を示す。リタイアメントユニット1754及び物理レジスタファイルユニット1758は、実行クラスタ1760に結合される。実行クラスタ1760は、1つ又は複数の実行ユニット1762のセット及び1つ又は複数のメモリアクセスユニット1764のセットを含む。実行ユニット1762は、様々な種類のデータ(例えば、スカラ浮動小数点、パックド整数<パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して、様々なオペレーション(例えば、シフト、加算、減算、乗算)を実行し得る。いくつかの実施形態が、特定の機能又は機能の複数のセットに専用の多数の実行ユニットを含み得る一方、他の複数の実施形態は、1つの実行ユニットのみ又は全てが全ての機能を実行する複数の実行ユニットを含み得る。スケジューラユニット1756、物理レジスタファイルユニット1758、及び実行クラスタ1760は、複数として示される可能性があるが、その理由は、複数の特定の実施形態は、特定の複数のデータの種類/複数のオペレーションに対して別個のパイプラインを生成するからである(例えば、それぞれがこれら自身のスケジューラユニット、物理レジスタファイルユニット及び/又は実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン及び/又はメモリアクセスパイプライン、及び、別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット1764を有する特定の複数の実施形態が実行される)。別個のパイプラインが用いられる場合、これらのパイプラインの1つ又は複数はアウトオブオーダ発行/実行でその残りはインオーダであってよいことも理解されるべきである。
複数のメモリアクセスユニット1764のセットは、メモリユニット1770に結合され、メモリユニット1770は、データキャッシュユニット1774に結合されるデータTLBユニット1772を含み、データキャッシュユニット1774は、レベル2(L2)キャッシュユニット1776に結合される。一例示的実施形態において、メモリアクセスユニット1764は、読み込みユニット、格納アドレスユニット、及び格納データユニットを含んでよく、それらのそれぞれは、メモリユニット1770内のデータTLBユニット1772に結合される。命令キャッシュユニット1734はさらに、メモリユニット1770内のレベル2(L2)キャッシュユニット1776に結合される。L2キャッシュユニット1776は、1つ又は複数の他のレベルのキャッシュに結合され、最終的には主要メモリに結合される。
例として、例示的なレジスタリネーミングアウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン1700を実装し得る。1)命令フェッチ1738は、フェッチ及び長さ復号ステージ1702及び1704を実行し、2)復号ユニット1740は、復号ステージ1706を実行し、3)リネーミング/アロケータユニット1752は、割り当てステージ1708及びリネーミングステージ1710を実行し、4)スケジューラユニット1756は、スケジュールステージ1712を実行し、5)物理レジスタファイルユニット1758及びメモリユニット1770は、レジスタ読み取り/メモリ読み取りステージ1714を実行し、実行クラスタ1760は実行ステージ1716を実行し、6)メモリユニット1770及び物理レジスタファイルユニット1758は、ライトバック/メモリ書き込みステージ1718を実行し、7)様々なユニットが例外処理ステージ1722に関連してよく、8)リタイアメントユニット1754及び物理レジスタファイルユニット1758は、コミットステージ1724を実行する。
コア1790は、本明細書にて説明される命令を含む1つ又は複数の命令セット(例えば、(複数のより新しいバージョンを伴う、いくつかの拡張が追加された)x86命令セット、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスの(NEONのような選択的な追加の拡張を有する)ARM命令セット)をサポートしてよい。一実施形態において、コア1790は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)サポートするロジックを含み、それによって、多くのマルチメディアアプリケーションにより用いられる複数のオペレーションがパックドデータを用いて実行されることを可能にする。
コアは、マルチスレッディング(複数のオペレーション又は複数のスレッドの2つ以上の並列セットを実行すること)をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング(単一の物理的コアが複数のスレッドのそれぞれに対して論理的コアを提供することにより、物理的コアが同時にマルチスレッディングを実行すること)又はこれらの組み合わせ(例えば、時分割フェッチ及び復号化、その後、インテル(登録商標)ハイパースレッディングテクノロジなどでの同時マルチスレッディング)を含む様々な態様で、マルチスレッディングを実行してよいことが理解されるべきである。
アウトオブオーダ実行との関連で、レジスタリネーミングを説明するが、レジスタリネーミングは、インオーダアーキテクチャで用いられてよいことが理解されるべきである。プロセッサの図示された実施形態はまた、別個の命令及びデータキャッシュユニット1734/1774と、共有L2キャッシュユニット1776とを含む一方、複数の代替的な実施形態は、例えば、レベル1(L1)内部キャッシュ又は複数のレベルの内部キャッシュなどの、命令及びデータの両方のための単一の内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュと、コア及び/又はプロセッサの外部にある外部キャッシュとの組み合わせを含み得る。代替的に、キャッシュの全ては、コア及び/又はプロセッサの外部にあってよい。
特定の例示的インオーダコアアーキテクチャ
図18A−Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を図示し、そのコアは、チップ内の多数のロジックブロック(同じ種類及び/又は異なる種類の他の複数のチップを含む)のうちの1つであり得る。複数のロジックブロックは、用途に応じて、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を介して、いくつかの固定関数ロジック、メモリI/Oインターフェース、及び他の必要なI/Oロジックと通信する。
図18Aは、本願発明の複数の実施形態に係る単一のプロセッサコア、及びそのオンダイ相互接続ネットワーク1802との接続、並びにそのレベル2(L2)キャッシュローカルサブセット1804のブロック図である。一実施形態において、命令デコーダ1800は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1806は、スカラ及びベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを可能にする。(設計を簡略化する)一実施形態において、スカラユニット1808及びベクトルユニット1810は、複数の別個のレジスタセットを(スカラレジスタ1812及びベクトルレジスタ1814をそれぞれ)用いており、それらの間で転送されるデータは、メモリに書き込まれ、次に、レベル1(L1)キャッシュ1806からリードバックされる一方、本願発明の代替的な複数の実施形態は、異なるアプローチを用いてよい(例えば、単一のレジスタセットを用いる、又は、データが書き込まれてリードバックされずに2つのレジスタファイルの間で転送されることを可能にする通信パスを含む)。
L2キャッシュローカルサブセット1804は、プロセッサコア毎に1つの別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、自身のL2キャッシュローカルサブセット1804への直接アクセスパスを有する。プロセッサコアにより読み取られたデータは、そのL2キャッシュサブセット1804に格納され、これら自身のローカルL2キャッシュサブセットへアクセスする他のプロセッサコアと並列に、迅速にアクセスされることができる。プロセッサコアにより書き込まれたデータは、その自身のL2キャッシュサブセット1804に格納され、必要な場合には他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは双方向であって、複数のプロセッサコア、複数のL2キャッシュ、及び他のロジックブロックなどの複数のエージェントがチップ内で互いに通信することを可能にする。各リングデータパスは、方向毎に1012ビット幅である。
図18Bは、本願発明の複数の実施形態に係る、図18Aのプロセッサコアの一部の拡大図である。図18Bは、L1キャッシュ1804のL1データキャッシュの一部1806A、並びに、ベクトルユニット1810及びベクトルレジスタ1814に関するさらなる詳細を含む。
具体的に、ベクトルユニット1810は、16幅ベクトル処理ユニット(VPU)(16幅ALU1828を参照)であり、1つ又は複数の整数、単精度浮動、及び倍精度浮動命令を実行する。VPUは、スウィズルユニット1820によるレジスタ入力のスウィズル、数値変換ユニット1822A−Bによる数値変換、及び複製ユニット1824によるメモリ入力部上の複製をサポートする。書き込みマスクレジスタ1826は、結果として生じる複数のベクトル書き込みをプレディケートすることを可能にする。
統合メモリコントローラ及びグラフィックスを有するプロセッサ
図19は、本願発明の複数の実施形態に係るプロセッサ1900のブロック図であり、プロセッサ1900は、1つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよい。図19の複数の実線のボックスは、単一のコア1902Aと、システムエージェント1910と、1つ又は複数のバスコントローラユニット1916のセットとを有するプロセッサ1900を図示し、一方、複数の破線のボックスの選択的な追加は、複数のコア1902A−Nと、システムエージェントユニット1910内の1つ又は複数の統合メモリコントローラユニット1914のセットと、専用ロジック1908とを有する代替的なプロセッサ1900を図示する。
それにより、プロセッサ1900の複数の異なる実装は、1)統合グラフィックス及び/又はサイエンティフィック(スループット)ロジック(1つ又は複数のコアを含み得る)である専用ロジック1908と、1つ又は複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、その2つの組み合わせ)であるコア1902A−Nとを有するCPU、2)主にグラフィックス及び/又はサイエンティフィック(スループット)向けの多数の特別用途コアであるコア1902A−Nを有するコプロセッサ、及び3)多数の汎用インオーダコアであるコア1902A−Nを有するコプロセッサを含み得る。それにより、プロセッサ1900は、汎用プロセッサ、コプロセッサ、又は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループット多集積コア(MIC)コプロセッサ(30以上のコアを含む)、エンベデッドプロセッサ、又は同様のものなどの専用プロセッサであってよい。プロセッサは、1つ又は複数のチップに実装され得る。プロセッサ1900は、例えば、BiCMOS、CMOS、又はNMOSなどの多数の処理技術のうちの何れかを用いて、1つ又は複数の基板の一部であってよく、及び/又はその上に実装されてよい。
メモリ階層は、コア内の1つ又は複数のレベルのキャッシュと、一のセット若しくは1つ又は複数の共有キャッシュユニット1906と、統合メモリコントローラユニット1914のセットに結合される外部メモリ(図示せず)とを含む。共有キャッシュユニット1906のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュなどの1つ又は複数の中レベルのキャッシュ、最終レベルキャッシュ(LLC)、及び/又はこれらの組み合わせを含み得る。
一実施形態において、リングベースの相互接続ユニット1912が、統合グラフィックスロジック1908、共有キャッシュユニット1906のセット、及びシステムエージェントユニット1910/統合メモリコントローラユニット1914を相互接続する一方、複数の代替的な実施形態は、複数のそのようなユニットを相互接続するための任意の数の周知技術を用いてよい。一実施形態において、コヒーレンシは、1つ又は複数のキャッシュユニット1906と、コア1902A−Nとの間で維持される。
いくつかの実施形態において、1つ又は複数のコア1902A−Nは、マルチスレッディングできる。システムエージェント1910は、コア1902A−Nを調整及び操作するそれらの構成要素を含む。システムエージェントユニット1910は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを含み得る。PCUは、コア1902A−N及び統合グラフィックスロジック1908の電力状態の調整に必要なロジック及び複数の構成要素であってよく、又はそれらを含んでよい。ディスプレイユニットは、1つ又は複数の外部接続表示を駆動するためのものである。
コア1902A−Nは、アーキテクチャ命令セットに関して同種又は異種であってよく、すなわち、コア1902A−Nのうちの2つ以上は、同じ命令セットを実行することが可能であり得る一方、他はその命令セット又は異なる命令セットのサブセットのみを実行可能であり得る。
例示的なコンピュータアーキテクチャ
図20−23は、例示的なコンピュータアーキテクチャのブロック図である。複数のラップトップ、デスクトップ、ハンドヘルド型PC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタルシグナルプロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルド型デバイス及び様々な他の電子デバイス用の当技術分野で知られている複数の他のシステム設計及び構成も適する。概して、プロセッサ及び/又は他の実行ロジックを組み込み可能な多様な複数のシステムまたは複数の電子デバイスは、本明細書に開示されるように、概して適する。
ここで図20を参照すると、本願発明の一実施形態に係るシステム2000のブロック図を示す。システム2000は、コントローラハブ2020に結合される1つ又は複数のプロセッサ2010、2015を含んでよい。一実施形態において、コントローラハブ2020は、グラフィックスメモリコントローラハブ(GMCH)2090及び入力/出力ハブ(IOH)2050(複数の別個のチップ上であり得る)を含み、GMCH2090は、メモリ2040及びコプロセッサ2045に結合されたメモリ及びグラフィックスコントローラを含み、IOH2050は、複数の入力/出力(I/O)デバイス2060をGMCH2090に結合させる。代替的に、メモリ及びグラフィックスコントローラのうちの1つ又は両方は、プロセッサ内に統合され(本明細書にて説明されているように)、メモリ2040及びコプロセッサ2045は、プロセッサ2010及び単一のチップ内でIOH2050を有するコントローラハブ2020に直接結合される。
追加のプロセッサ2015の選択的な性質は、図20に破線で示される。各プロセッサ2010、2015は、本明細書にて説明される1つ又は複数の処理コアを含んでよく、プロセッサ1900の特定のバージョンであってよい。
メモリ2040は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、又はその2つの組み合わせであってよい。少なくとも一実施形態において、コントローラハブ2020は、フロントサイドバス(FSB)などのマルチドロップバス、QuickPathインターコネクト(QPI)などのポイントツーポイントインターフェース、又は同様の接続2095を介して、プロセッサ2010、2015と通信する。
一実施形態において、コプロセッサ2045は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ、又は同様のものなどの専用プロセッサである。一実施形態において、コントローラハブ2020は、統合グラフィックスアクセラレータを含んでよい。
物理リソース2010、2015の間には、アーキテクチャ的、マイクロアーキテクチャ上の、熱的、電力消費の特性及び同様のものを含む様々な利点の基準に関して、様々な差異が存在し得る。
一実施形態において、プロセッサ2010は、一般的な種類のデータ処理オペレーションを制御する複数の命令を実行する。複数の命令内には、コプロセッサ命令が組み込まれ得る。プロセッサ2010は、これらのコプロセッサ命令を、取り付けられたコプロセッサ2045により実行されるべき種類のものとして認識する。従って、プロセッサ2010は、又は他の相互接続コプロセッサバス上でコプロセッサ2045にこれらのコプロセッサ命令(又はコプロセッサ命令を表す複数の制御信号)を発行する。コプロセッサ2045は、受信されたコプロセッサ命令を受け取って実行する。
ここで図21を参照すると、本願発明の実施形態に係る第1のより具体的な例示的システム2100のブロック図が示される。図21に示されているように、マルチプロセッサシステム2100が、ポイントツーポイント相互接続システムであり、第1のプロセッサ2170と、ポイントツーポイント相互接続2150を介して結合される第2のプロセッサ2180とを含む。プロセッサ2170及び2180のそれぞれは、プロセッサ1900の特定のバージョンであってよい。本願発明の一実施形態において、プロセッサ2170及び2180はそれぞれ、プロセッサ2010及び2015であり、一方、コプロセッサ2138は、コプロセッサ2045である。別の実施形態において、プロセッサ2170及び2180はそれぞれ、プロセッサ2010及びコプロセッサ2045である。
プロセッサ2170及び2180は、それぞれが統合メモリコントローラ(IMC)ユニット2172及び2182を含むものとして示されている。プロセッサ2170はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インターフェース2176及び2178を含み、同様に、第2のプロセッサ2180は、P−Pインターフェース2186及び2188を含む。プロセッサ2170、2180は、ポイントツーポイント(P−P)インターフェース2150を介して、P−Pインターフェース回路2178、2188を用いて情報を交換し得る。図21に示されているように、IMC2172及び2182は、プロセッサを、それぞれのメモリ、すなわち、メモリ2132及びメモリ2134に結合させ、メモリ2132及びメモリ2134は、それぞれのプロセッサにローカルに取り付けられる主要メモリの一部であり得る。
プロセッサ2170、2180はそれぞれ、個々のP−Pインターフェース2152、2154を介して、ポイントツーポイントインターフェース回路2176、2194、2186、2198を用いて、チップセット2190と情報を交換し得る。チップセット2190は、高性能インターフェース2139を介して、コプロセッサ2138と選択的に情報を交換し得る。一実施形態において、コプロセッサ2138は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ、又は同様のものなどの専用プロセッサである。
共有キャッシュ(図示せず)は、何れかのプロセッサに又は両方のプロセッサの外部に含まれてよく、P−P相互接続を介してプロセッサと接続されてもよく、これにより、プロセッサが低電力モードに置かれた場合にプロセッサの何れか又は両方のローカルキャッシュ情報が、共有キャッシュに格納され得る。
チップセット2190は、インターフェース2196を介して第1のバス2116に結合され得る。一実施形態において、第1のバス2116は、周辺構成要素相互接続(PCI)バス、又はPCIエクスプレスバスなどのバス、若しく別の第3世代I/O相互接続バスはであり得るが、本願発明の範囲はそのように限定されない。
図21に示されているように、様々なI/Oデバイス2114は、第1のバス2116を第2のバス2120に結合させるバスブリッジ2118と共に、第1のバス2116に結合され得る。一実施形態において、複数のコプロセッサ、高スループットMICプロセッサ、GPGPUのアクセラレータ(例えば、グラフィックスアクセラレータ又はデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、又は他のプロセッサなどの1つ又は複数の追加のプロセッサ2115は、第1のバス2116に結合される。一実施形態において、第2のバス2120は、ローピンカウント(LPC)バスであってよい。一実施形態において、様々なデバイスは、例えば、キーボード及び/又はマウス2122、通信デバイス2127及びディスクドライブ又は命令/コード及びデータ2130を含み得る他の大容量ストレージデバイスなどのストレージユニット2128を含む第2のバス2120に結合され得る。さらに、オーディオI/O2124は、第2のバス2120に結合され得る。他のアーキテクチャが可能であることに留意されたい。例えば、図21のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバス又はそのような他のアーキテクチャを実装し得る。
ここで図22を参照すると、本願発明の実施形態に係る第2のより具体的な例示的システム2200のブロック図が示される。図21及び22の同様の複数の要素には同様の参照番号が付され、図21の複数の特定の態様は、図22の他の態様を曖昧にすることを回避するために、図22から省略されている。
図22は、プロセッサ2170、2180がそれぞれ、統合メモリ及びI/O制御ロジック(「CL」)2172及び2182を含み得ることを図示する。それにより、CL2172、2182は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図22は、メモリ2132、2134がCL2172、2182に結合されていることを示しているのみならず、I/Oデバイス2214も制御ロジック2172、2182に結合されていることも示している。レガシI/Oデバイス2215は、チップセット2190に結合される。
ここで図23を参照すると、本願発明の実施形態に係るSoC2300のブロック図が示されている。図19の同様の複数の要素は、同様の参照番号を有する。また、複数の破線のボックスは、より高度なSoC上の選択的な特徴である。図23において、相互接続ユニット2302は、1つ又は複数のコア202A−Nのセット及び共有キャッシュユニット1906を含むアプリケーションプロセッサ2310と、システムエージェントユニット1910と、バスコントローラユニット1916と、統合メモリコントローラユニット1914と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得る1つ又は複数のコプロセッサ2320のセットと、スタティックランダムアクセスメモリ(SRAM)ユニット2330と、直接メモリアクセス(DMA)ユニット2332と、1つ又は複数の外部ディスプレイに結合するためのディスプレイユニット2340とに結合される。一実施形態において、コプロセッサ2320は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、エンベデッドプロセッサ、又は同様のものなどの専用プロセッサを含む。
本明細書に開示される機構の複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装アプローチの組み合わせに実装され得る。本願発明の複数の実施形態は、少なくとも1つのプロセッサ、(揮発性及び不揮発性メモリ及び/又はストレージ要素を含む)ストレージシステム、少なくとも1つの入力デバイス、及び少なくとも1つの出力デバイスを有するプログラマブルシステムを実装する複数のコンピュータプログラム又はプログラムコードとして、実行され得る。
図21に図示されているコード2130などのプログラムコードは、本明細書にて説明される複数の機能を実行し、出力情報を生成するべく、複数の入力命令に適用され得る。出力情報は、既知の様式で1つ又は複数の出力デバイスに適用され得る。本願の目的のために、処理システムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、専用集積回路(ASIC)、又はマイクロプロセッサなどのプロセッサ、を有する任意のシステムを含む。
プログラムコードは、処理システムと通信を行うべく、高水準の手順型又はオブジェクト指向プログラミング言語で実装され得る。プログラムコードは、所望の場合には、アセンブリ又は機械言語で実装されてもよい。実際に、本明細書にて説明される機構は、いかなる特定のプログラミング言語の範囲にも限定されない。いかなる場合であっても、言語は、コンパイラ型又はインタープリタ型言語であってよい。
少なくとも一実施形態の1つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な複数の命令によって実装されてよく、これらは、機械によって読み取られた場合に、機械にロジックを製造させることにより、本明細書にて説明される複数の技術を実行する。「IPコア」として知られているそのような表現は、有形で機械可読メディアに格納されてよく、様々な顧客又は製造施設に供給されて、実際にロジック又はプロセッサを作成する製造機械にロードされてもよい。
そのような機械可読ストレージメディアは、限定的なものではないが、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、書き換え可能コンパクトディスク(CD−RW)及び光磁気ディスクを含む任意の他の種類のディスク、リードオンリメモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルROM(EPROM)フラッシュメモリ、電気的消去可能プログラマブルROM(EEPROM)、位相変化メモリ(PCM)、磁気または光カードなどのランダムアクセスメモリ(RAM)、又は複数の電子的命令を格納するために適した任意の他の種類のメディアなどのストレージ媒体を含む、機械又はデバイスによって製造若しくは形成される複数の物品の非一時的で有形の構成を含んでよい。
従って、本願発明の複数の実施形態はまた、複数の命令を含み、又は本明細書にて説明される構造、回路、装置、プロセッサ及び/又はシステム特徴を定義するハードウェア記述言語(HDL)などの設計データを含む非一時的な有形の機械可読媒体を含む。そのような複数の実施形態はまた、プログラム製品として称され得る。
エミュレーション(2進数変換、コードモーフィングなどを含む)
いくつかの場合において、命令変換器は、命令を、ソース命令セットから、ターゲット命令セットに変換するのに用いられ得る。例えば、命令変換器は、コアにより処理されるべく、命令をトランスレートし(例えば、静的な2進数変換、動的なコンパイルを含む動的な2進数変換を用いて)、モーフィングし、エミュレートし、あるいは1つ又は複数の他の命令に変換し得る。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせに実装され得る。命令変換器は、プロセッサ上、プロセッサ外、又は部分的にプロセッサ上であり部分的にプロセッサ外であってよい。
図24は、本願発明の複数の実施形態に係る、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の使用を対比させるブロック図である。図示された実施形態において、命令変換器はソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせに実装されてもよい。図24は、高水準言語2402のプログラムがx86コンパイラ2404を用いてコンパイルされて、少なくとも1つのx86命令セットコア2416を有するプロセッサによりネイティブに実行され得るx86バイナリコード2406を生成し得ることを示す。少なくとも1つのx86命令セットコア2416を有するプロセッサは、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同じ結果を達成するために、(1)インテル(登録商標)x86命令セットコアの命令セットの大部分、又は(2)複数のオブジェクトコードバージョンの複数のアプリケーション又は少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサ上で実行することを目標とする他のソフトウェアを、互換性を有するように実行あるいは処理することにより、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと同じ機能を実質的に実行できる任意のプロセッサを表す。x86コンパイラ2404は、追加のリンク処理を用いて又は用いずに、少なくとも1つのx86命令セットコア2416を有するプロセッサ上で実行されることができるx86バイナリコード2406(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、図24は、少なくとも1つのx86命令セットコアを有しないプロセッサ2414(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セットを実行する、及び/又はカリフォルニア州サニーベールのARMホールディングスのARM命令セットを実行する複数のコアを有するプロセッサ)によりネイティブに実行され得る代替的な命令セットバイナリコード2410を生成すべく、高水準言語2402のプログラムが代替的な命令セットコンパイラ2408を用いてコンパイルされ得ることを示す。命令変換器2412は、x86バイナリコード2406を、x86命令セットコア2414を有しないプロセッサによりネイティブに実行されるコードに変換するのに用いられる。この変換済みコードは、これが可能な命令変換器の製造が難しいため、代替的な命令セットバイナリコード2410と同じである可能性が高いわけではないが、しかし、変換済みコードは、一般的な動作を遂行して代替的な命令セットからの命令で構成されるであろう。それにより、命令変換器2412は、エミュレーション、シミュレーション、又は他の処理を介して、プロセッサ若しくはx86命令セットプロセッサ又はコアを有しない他の電子デバイスがx86バイナリコード2406を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
図3−13のうちの何れかに関して説明されている複数の構成要素、特徴、及び詳細はまた、図1−2のうちの何れかに選択的に用いられ得る。さらに、本明細書にて説明される複数の装置のうちの何れかに関して本明細書にて説明される複数の構成要素、特徴、及び詳細はまた、複数の実施形態においてそのような装置により、及び/又はそれを用いて実行され得る本明細書にて説明される複数の方法のうちの何れかに選択的に用いられてよく、及び/又はそれらのうちの何れかに適用されてよい。
本明細書にて説明される複数のプロセッサの何れかは、コンピュータシステム又は本明細書に開示される他のシステムのうちの何れかに含まれ得る。いくつかの実施形態において、複数の命令は、本明細書に開示される複数の命令フォーマットに関して説明されている複数の特徴及び詳細を用いて符号化され得る(例えば、VEX、EVEXなど)が、本願発明の範囲はそのように限定されない。
詳細の説明及び特許請求の範囲において、「結合」及び/又は「接続」という用語、並びにこれらの派生語は、用いられ得る。これらの用語は、互いに同義語であることを意図されていない。むしろ、複数の実施形態において、「接続」は、2つ以上の要素が互いに直接物理的及び/又は電気的に接触することを示すのに用いられてよい。「結合」は2つ以上の要素が互いに直接物理的及び/又は電気的に接触することを意味し得る。しかし、「結合」はまた、2つ以上の要素が互いに直接接触しないが、それでも互いに協働又は相互作用することを意味し得る。例えば、実行ユニットは、1つ又は複数の介在構成要素を介して、レジスタ及び/又は復号ユニットに結合され得る。複数の図面において、複数の矢印が複数の接続及び結合を示すのに用いられる。
「及び/又は」という用語は用いられていてよい。本明細書に用いられているように、「及び/又は」という用語は、一方又は他方、若しくは両方を意味する(例えば、A及び/又はBはA又はB若しくはA及びBの両方を意味する)。
上の説明において、複数の具体的な詳細は、複数の実施形態の十分な理解を提供するために記載されている。しかし、他の複数の実施形態はこれらの具体的な詳細の一部を用いずに実施され得る。本願発明の範囲は、上で提供された複数の特定の例により定められず、以下の特許請求の範囲によってのみ定まる。他の例では、複数の周知回路、構造、デバイス、及びオペレーションは、説明の理解を曖昧にすることを回避するために、ブロック図の形式で及び/又は細部を有さずに示されている。適切と考慮され、別段に特定されない限り、又は明確に明白な場合を除き、参照番号、又は参照番号の末尾が、同様又は同じ特性を選択的に有し得る対応する又は類似の要素を示すべく、複数の図面の間に繰り返されている。様々なオペレーション及び方法は説明されている。方法のいくつかは、フロー図において比較的基本な形式で説明されているが、複数の動作は、選択的に追加されてよく、及び/又は方法から取り除かれてよい。
一定の動作は、ハードウェア要素により実行されてよく、又は機械実行可能な又は回路実行可能な命令により具現化されてよく、動作を実行する複数の命令でプログラミングされる機械、回路、又はハードウェア要素(例えば、プロセッサ、プロセッサの一部、回路など)を生じさせ、及び/又はもたらすのに用いられてよい。複数の動作はまた、ハードウェアとソフトウェアとの組み合わせにより選択的に実行され得る。プロセッサ、機械、回路、又はハードウェアが、命令を実行及び/又は処理してその命令に応じて結果を格納するよう動作可能な具体的又は特定の回路又は他のロジック(例えば、ファームウェア及び/又はソフトウェアと潜在的に組み合わせたハードウェア)を含んでよい。
いくつかの実施形態は、機械可読媒体を含む製造品(例えば、コンピュータプログラム製品)を含む。媒体は、機械により可読な形成で情報を提供し、例えば、格納する機構を含み得る。機械可読媒体は、機械により実行された場合及び/又は実行されたとき、機械に、複数の動作、方法、又は本明細書に開示される技術のうちの1つを実行させ及び/又は機械の実行をもたらすよう動作可能な命令又は命令のシーケンスを提供又はそれに格納させ得る。機械可読媒体は、本明細書に開示される複数の命令の1つ又は複数の複数の実施形態を格納してよく、あるいは提供してよい。
いくつかの実施形態において、機械可読媒体は、有形及び/又は非一時的機械可読記憶媒体を含んでよい。例えば、有形及び/又は非一時的機械可読記憶媒体は、フロッピー(登録商標)ディスケット、光記憶媒体、光ディスク、光学式データ記憶デバイス、CD−ROM、磁気ディスク、光磁気ディスク、リードオンリメモリ(ROM)、プログラム可能ROM(PROM)、消去可能プログラム可能ROM(EPROM)、電気的消去可能プログラム可能ROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、非一時的データ記憶デバイス、又は同様のものを含み得る。非一時的機械可読記憶媒体は、一時的な伝搬信号を含まない。別の実施形態において、機械可読媒体は、例えば、電気的、光学的、音響的、若しくは、搬送波、赤外線信号、デジタル信号、又は同様のもののような他の形態の伝搬信号などの一時的な機械可読通信媒体を含んでよい。
適した機械の複数の例は、汎用プロセッサ、専用プロセッサ、命令処理装置、デジタル論理回路、集積回路、又は同様のものを含むが、これらに限定されない。適した機械のさらに他の例は、コンピューティングデバイス、若しくはプロセッサ、命令処理装置、デジタル論理回路、又は集積回路を含む他の電子デバイスを含む。そのようなコンピューティングデバイス及び電子デバイスの複数の例は、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス(例えば、ルータ及びスイッチ)、モバイルインターネットデバイス(MID)、メディアプレイヤ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラを含むが、これらに限定されない。
本明細書の全体に渡って参照し、例えば、「一実施形態」、「実施形態」、「1つ又は複数の実施形態」、「いくつかの実施形態」は、特定の特徴が本願発明の実施に含まれ得るが、必ずしも必須ではないことを示す。同様に、説明において、開示の合理化及び様々な発明の態様の理解の助けの目的のために、様々な特徴は、場合によっては、単一の実施形態、図面、又はこれらの説明に共にグループ化される。しかし、本開示の方法は、本発明が各請求項において明確に記載されたものよりも多くの特徴を必要とするという意図を反映するものと解釈されるべきではない。むしろ、以下の特許請求の範囲が反映している通り、本願発明の態様は、単一の開示実施形態の全ての特徴よりも少ない特徴に存する。それにより、詳細な説明に続く特許請求の範囲は、これにより詳細な説明に明確に組み込まれ、各請求項は、本願発明の別個の実施形態として独立している。
例示的な実施形態
以下の複数の例は、さらなる実施形態に関する。複数の例における具体的事柄は、1つ又は複数の実施形態の任意の箇所に用いられてよい。
例1は、複数のレジスタと、3ソース浮動小数点加算命令を復号する復号ユニットとを含むプロセッサである。3ソース浮動小数点加算命令は、少なくとも第1の浮動小数点データ要素を含む第1のソースオペランドを示し、少なくとも第2の浮動小数点データ要素を含む第2のソースオペランドを示し、少なくとも第3の浮動小数点データ要素を含む第3のソースオペランドを示す。実行ユニットは、複数の複数のレジスタと復号ユニットと結合される。実行ユニットは、3ソース浮動小数点加算命令に応じて、3ソース浮動小数点加算命令により示されるべきデスティネーションオペランドに結果を格納する。結果は、少なくとも第1、第2、及び第3の浮動小数点データ要素に対応する結果浮動小数点データ要素を含む。結果浮動小数点データ要素は、第1の浮動小数点の丸められた和を含む。第1の浮動小数点の丸められた和は、第2の浮動小数点の丸められた和と第3の浮動小数点データ要素との相加的組み合わせを表す。第2の浮動小数点の丸められた和は、第1の浮動小数点データ要素と第2の浮動小数点データ要素との相加的組み合わせを表す。
例2は、例1のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、第1のソースオペランドの1つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第1のビットと、第2のソースオペランドの1つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第2のビットと、第3のソースオペランドの1つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第3のビットとを有する3ソース浮動小数点加算命令を復号する。
例3は、例2のプロセッサを含み、当該プロセッサにおいて、第1、第2、及び第3のビットは、3ソース浮動小数点加算命令の即値のビットを有する。
例4は、例1のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、第1のソースオペランドの1つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する3ソース浮動小数点加算命令を復号する。
例5は、例4のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、第2のソースオペランドの1つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する3ソース浮動小数点加算命令を復号する。
例6は、例5のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、第3のソースオペランドの1つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する3ソース浮動小数点加算命令を復号する。
例7は、例1から6の何れか1つに記載のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、異なる時間でパックドデータを格納することもできるそれぞれのパックドデータレジスタに各々が格納されるスカラデータ要素として、第1、第2、及び第3の浮動小数点データ要素をそれぞれ含む第1、第2、及び第3のソースオペランドを示す3ソース浮動小数点加算命令を復号する。また、3ソース浮動小数点加算命令は、第1、第2、及び第3の浮動小数点データ要素に対応し、それらに対して3ソース浮動小数点加算命令のオペレーションをプレディケートするマスク要素を含むソースプレディケートマスクを示す。
例8は、例1から6のうちの何れか1つに記載のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、第1の浮動小数点データ要素を含む第1の複数のパックドデータ要素と、第2の浮動小数点データ要素を含む第2の複数のパックドデータ要素と、第3の浮動小数点データ要素を含む第3の複数のパックドデータ要素とをそれぞれ有する第1、第2、及び第3のソースオペランドを示す3ソース浮動小数点加算命令を復号する。
例9は、例8のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、複数のマスク要素を含むソースパックドデータオペレーションマスクを示す3ソース浮動小数点加算命令を復号する。マスク要素のそれぞれは、第1、第2、及び第3のソースオペランドの対応する浮動小数点データ要素に対応し、それらに対して3ソース浮動小数点加算命令のパックドデータオペレーションをプレディケートする。
例10は、例1から6のうちの何れか1つに記載のプロセッサを含む、当該プロセッサにおいて、実行ユニットは、第1及び第2の浮動小数点の丸められた和に対して丸めモードを用いており、その丸めモードは、(1)最近接偶数への丸め、(2)負の無限大への丸め、(3)正の無限大への丸め、及び(4)切り捨てによるゼロへの丸めのうちの1つである。復号ユニットはまた、丸めモードを指定する3ソース浮動小数点加算命令を選択的に復号する。また、命令により選択的に指定される丸めモードは、プロセッサの浮動小数点制御レジスタに丸めモードをオーバーライドする。
例11は例1から6のうちの何れか1つに記載のプロセッサを含み、当該プロセッサにおいて、実行ユニットは、第1及び第2の浮動小数点データ要素を受信し、第2の浮動小数点の丸められた和を出力するよう結合される第1の浮動小数点加算器を含む。実行ユニットはまた、第3の浮動小数点データ要素及び第2の浮動小数点の丸められた和を受信するよう結合される第2の浮動小数点加算器を含み、第2の浮動小数点加算器は、第1の浮動小数点の丸められた和を出力する。
例12は、例11のプロセッサを含み、予約ステーションと、当該予約ステーションに結合されるバッファとをさらに含む。バッファは、3ソース浮動小数点加算命令に対応する制御信号を、予約ステーションから受信し、第1の浮動小数点加算器が第2の浮動小数点の丸められた和を生成する期間において制御信号を格納する。バッファは、その期間後に、第2の浮動小数点加算器に結合されて制御信号を第2の浮動小数点加算器に提供する。
例13は、例1から6のうちの何れか1つに記載のプロセッサを含み、当該プロセッサにおいて、実行ユニットは、出力部、入力部、及び、当該出力部を当該入力部に結合させる回路を含む。
例14は、例1から6のうちの何れか1つに記載のプロセッサを含み、当該プロセッサにおいて、復号ユニットは、第3のソースオペランドがreg_fieldに符号化されるEVEX符号化を有する3ソース浮動小数点加算命令を復号する。また、選択的に、第1のソースオペランドは、VEX.vvvvに符号化される。また、選択的に、第2のソースオペランドは、8ビットの即値の一部及びrm_fieldのうちの1つを用いて符号化される。
例15は、プロセッサにおける方法であり、当該方法は、3ソース浮動小数点加算命令を受信する段階を含む。3ソース浮動小数点加算命令は、少なくとも第1の浮動小数点データ要素を含む第1のソースオペランドを示し、少なくとも第2の浮動小数点データ要素を含む第2のソースオペランドを示し、少なくとも第3の浮動小数点データ要素を含む第3のソースオペランドを示す。方法はまた、3ソース浮動小数点加算命令に応じてデスティネーションオペランドに結果を格納する段階を含む。デスティネーションオペランドは、3ソース浮動小数点加算命令により示される。結果は、少なくとも、第1、第2、及び第3の浮動小数点データ要素に対応する結果浮動小数点データ要素を含む。結果浮動小数点データ要素は、第1の浮動小数点の丸められた和を含む。第1の浮動小数点の丸められた和は、第2の浮動小数点の丸められた和と第3の浮動小数点データ要素との相加的組み合わせを表す。第2の浮動小数点の丸められた和は、第1の浮動小数点データ要素と第2の浮動小数点データ要素との相加的組み合わせを表す。
例16は、例15の方法を含み、当該方法において、受信する段階は、第1のソースオペランドの1つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する3ソース浮動小数点加算命令を受信する段階を含む。選択的に、命令はまた、第2のソースオペランドの1つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する。
例17は、例15の方法を含み、当該方法において、受信する段階は、第1及び第2の浮動小数点の丸められた和に対して用いられる丸めモードを指定する3ソース浮動小数点加算命令を受信する段階を含む。
例18は例15の方法を含み、当該方法において、受信する段階は、それぞれのパックドデータレジスタに各々が格納されるスカラデータ要素として、第1、第2、及び第3の浮動小数点データ要素をそれぞれ有する第1、第2、及び第3のソースオペランドを示す3ソース浮動小数点加算命令を受信する段階を含む。3ソース浮動小数点加算命令はまた、ソースプレディケートマスクを選択的に示し得る。
例19は、相互接続と当該相互接続に結合されるプロセッサとを含む、複数の命令を処理するシステムである。当該プロセッサは、3ソース浮動小数点加算命令を受信する。3ソース浮動小数点加算命令は、少なくとも第1の浮動小数点データ要素を含む第1のソースオペランドを示し、少なくとも第2の浮動小数点データ要素を含む第2のソースオペランドを示し、少なくとも第3の浮動小数点データ要素を含む第3のソースオペランドを示す。プロセッサは、3ソース浮動小数点加算命令に応じて、3ソース浮動小数点加算命令により示されるべきデスティネーションオペランドに結果を格納する。結果は、少なくとも、第1、第2、及び第3の浮動小数点データ要素に対応する結果浮動小数点データ要素を含む。結果浮動小数点データ要素は、第1の浮動小数点の丸められた和を含む。第1の浮動小数点の丸められた和は、第2の浮動小数点の丸められた和と第3の浮動小数点データ要素との相加的組み合わせを表す。第2の浮動小数点の丸められた和は、第1の浮動小数点データ要素と第2の浮動小数点データ要素との相加的組み合わせを表す。システムはまた、相互接続に結合されるダイナミックランダムアクセスメモリ(DRAM)を選択的に含む。
例20は、例19のシステムを含み、当該システムにおいて、3ソース浮動小数点加算命令は、第1のソースオペランドの1つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する。
例21は、機械可読メディアを含む製造品を備え、当該製造品は選択的に、非一時的機械可読記憶媒体であってよい。当該媒体は、3ソース浮動小数点加算命令を格納する。3ソース浮動小数点加算命令は、少なくとも第1の浮動小数点データ要素を含む第1のソースオペランドを示し、少なくとも第2の浮動小数点データ要素を含む第2のソースオペランドを示し、少なくとも第3の浮動小数点データ要素を含む第3のソースオペランドを示す。3ソース浮動小数点加算命令は、機械により実行された場合、当該機械に、3ソース浮動小数点加算命令に応じてデスティネーションオペランドに結果を格納することを含む複数の動作を実行させる。デスティネーションオペランドは、3ソース浮動小数点加算命令により示される。結果は、少なくとも、第1、第2、及び第3の浮動小数点データ要素に対応する結果浮動小数点データ要素を含む。結果浮動小数点データ要素は、第1の浮動小数点の丸められた和を含み、第1の浮動小数点の丸められた和は、第2の浮動小数点の丸められた和と第3の浮動小数点データ要素との相加的組み合わせを表す。第2の浮動小数点の丸められた和は、第1の浮動小数点データ要素と第2の浮動小数点データ要素との相加的組み合わせを表す。
例22は、例21の製造品を含み、当該製造品において、3ソース浮動小数点加算命令は、第1のソースオペランドの1つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する。
例23は、複数のレジスタと、3ソース浮動小数点加算命令を復号する復号ユニットとを含むプロセッサである。3ソース浮動小数点加算命令は、少なくとも第1の浮動小数点データ要素を含む第1のソースオペランドを示し、少なくとも第2の浮動小数点データ要素を含む第2のソースオペランドを示し、少なくとも第3の浮動小数点データ要素を含む第3のソースオペランドを示す。命令はまた、第1のソースオペランドの1つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第1のビットを選択的に有し、及び/又は第2のソースオペランドの1つ又は複数の浮動小数点データ要素の全てがネゲートされるか否かを指定する第2のビットを選択的に有する。実行ユニットは、複数のレジスタと復号ユニットとに結合される。実行ユニットは、3ソース浮動小数点加算命令に応じて、3ソース浮動小数点加算命令により示されるべきデスティネーションオペランドに結果を格納する。結果は、少なくとも、第1、第2、及び第3の浮動小数点データ要素に対応する結果浮動小数点データ要素を含む。結果浮動小数点データ要素は、第1、第2、及び第3の浮動小数点データ要素の相加的組み合わせを表す浮動小数点の丸められた和を含む。
例24は、例23のプロセッサを含み、当該プロセッサにおいて、浮動小数点の丸められた和は、別の浮動小数点の丸められた和の相加的組み合わせを表す。
例25は、例15から18のうちの何れかに記載の方法を実行するよう動作可能なプロセッサ又は他の装置を備える。
例26は、例15から18のうちの何れかに記載の方法を実行するための手段を含むプロセッサ又は他の装置を備える。
例27は、例15から18のうちの何れかに記載の方法を実行する、複数のモジュール、ユニット、ロジック、回路、手段、又はこれらの組み合わせを含むプロセッサを備える。
例28は、相互接続と、当該相互接続に結合されるプロセッサと、DRAMから選択される、当該相互接続に結合される少なくとも1つの構成要素と、グラフィックスチップと、無線通信チップと、相変化メモリと、ビデオカメラと、コンピュータシステム又は他の電子デバイスとを含むコンピュータシステム又は他の電子デバイスを備え、例15から18のうちの何れかに記載の方法を実行する。
例29は、プロセッサ、コンピュータシステム、又は他の機械により実行された場合及び/又は実行されたとき、当該機械に例15から18のうちの何れかに記載の方法を実行させるよう動作可能な命令を選択的に格納する、あるいは提供する選択的に非一時的機械可読記憶媒体である機械可読媒体を備える。
例30は、本明細書にて実質的に説明されるような1つ又は複数の動作又は任意の方法を実行するよう動作可能なプロセッサ又は他の装置を備える。
例31は、本明細書にて実質的に説明されるような1つ又は複数の動作又は任意の方法を実行するための手段を含むプロセッサ又は他の装置を備える。
例32は、本明細書にて実質的に説明されるような任意の命令を実行するよう動作可能なプロセッサ又は他の装置を備える。
例33は、本明細書にて実質的に説明されるような命令のうちの何れかを実行するための手段を含むプロセッサ又は他の装置を備える。
例34は、第1の命令セットに属する第1の命令を第2の命令セットの1つ又は複数の命令に変換する段階を含む方法を備え、当該第1の命令は、本明細書に実質的に開示されるような複数の命令のうちの何れかであってよい。方法はまた、第2の命令セットの1つ又は複数の命令を復号し、プロセッサ上で実行する段階を含む。実行する段階は、結果をデスティネーションに格納する段階を含む。結果は、本明細書に実質的に開示される、第1の命令に関する複数の結果のうちの何れかを含み得る。
例35は、第1の命令セットの複数の命令を復号するよう動作可能な復号ユニットを含むプロセッサ又は他の装置を備える。復号ユニットは、本明細書に実質的に開示されるような複数の命令のうちの何れかであってよく第2の命令セットに属する第1の命令をエミュレートする1つ又は複数の命令を受信する。プロセッサ又は他の装置はまた、第1の命令セットの1つ又は複数の命令を実行するべく、復号ユニットに結合される1つ又は複数の実行ユニットを備える。1つ又は複数の実行ユニットは、第1の命令セットの1つ又は複数の命令に応じてデスティネーションに結果を格納するよう動作可能である。結果は、本明細書に実質的に開示される第1の命令に関する複数の結果のうちの何れかを含んでよい。
例36は、第1の命令セットの複数の命令を復号するよう動作可能な復号ユニットを含み、1つ又は複数の実行ユニットを含むプロセッサを有するコンピュータシステム又は他の電子デバイスを備える。コンピュータシステムはまた、プロセッサに結合されるストレージデバイスを備える。ストレージデバイスは、第1の命令を格納し、第1の命令は、本明細書に実質的に開示される複数の命令の何れかであってよく、第2の命令セットに属する。ストレージデバイスはまた、複数の命令を格納して、第1の命令を第1の命令セットの1つ又は複数の命令に変換する。第1の命令セットの1つ又は複数の命令は、プロセッサにより実行された場合、当該プロセッサに、結果をデスティネーションに格納させるよう動作可能である。結果は、本明細書に実質的に開示される第1の命令に関する複数の結果のうちの何れかを含み得る。