本明細書に開示されるのは、3次元(3D)モートン座標を3つの3D座標(例えば、x座標,y座標,及びz座標)に変換する3Dモートン座標変換命令と、命令を実行するプロセッサと、命令を処理又は実行する際にプロセッサにより実行される方法と、命令を処理又は実行する1つ又は複数のプロセッサを組み込むシステムである。以下の説明には、多くの具体的な詳細が明記されている(例えば、具体的な命令オペレーション、データフォーマット、プロセッサの構成、マイクロアーキテクチャの詳細、オペレーションの順序など)。しかし、これらの具体的な詳細がなくても、実施形態は実施され得る。他の例では、説明の理解をあいまいにしないように、周知の回路、構造、及び技術は詳細に示されてはいない。
1つの課題は、データ項目をメモリ又はリニアストレージに格納する方法が、データ項目を用いるアルゴリズムの性能に著しく影響を与え得るということである。一例を挙げると、データ項目は概してメモリからプロセッサに読み出される必要があるが、メモリからプロセッサに一度に読み出され得るのは限られた数のビットだけである。例えば、プロセッサは、512ビットの連続したデータをメモリから一度に(例えば、1つの読み出しオペレーションで)読み出すことしかできないのが一般的である。データ項目が行優先順序で格納されているか、列優先順序で格納されているか、又は何らかの他の順序で格納されているかに応じて、異なるデータ項目が連続した順序で読み出される。例えば、データ項目が行優先順序で格納されている場合、データ項目は、27、3、8、11、9、24などの順に、最大512ビットまで読み出され得る。反対に、データ項目が行優先順序で格納されている場合、データ項目は、27、9、8、7、3、24などの順に、最大512ビットまで読み出され得る。一般的に、メモリからの各読み出しオペレーションは、対象のデータ項目の一部だけを配列から取得することができ得る。例として、特に配列が大きい(例えば、少なくとも512ビットより大きい)場合、データ項目が行優先順序で格納されているならば、異なる行でも同じ列にある隣接したデータ(例えば、データ項目27及び9)を、これらのデータ項目が配列内で互いに隣接しているのに、配列の第1列から同じ読み出しオペレーションで取得することさえ不可能であり得る。データが、列優先順序であり、3D配列及び4D配列用のデータストレージ向けである場合にも、類似した状況に直面し得る。
概して、データ項目をメモリ内に配列する方法はまた、データ項目をプロセッサの1つ又は複数のキャッシュ内に効率的にキャッシュする能力に影響を与える。典型的には、キャッシュ内のデータ項目へのアクセスは、メモリ内のデータ項目へのアクセスより低レイテンシである。しかし、対象のデータ項目がキャッシュ内にあったとしても、データ項目が多数の異なるキャッシュラインの中に分散している場合には、十分なキャッシュ利用ができないことが生じやすい場合がある。一般的に、各キャッシュラインは、メモリから読み出された512ビットの連続したデータを格納する。データ項目が、データを用いる関連アルゴリズムに効率的な方法でメモリに配列されていない場合、データ項目はキャッシュライン内に散在し得る。深刻なシナリオにおいては、各キャッシュラインは、対象のデータ項目を1つしか保持しない場合がある。反対に、特定のアルゴリズムに非常に効率的な方法でデータ項目がメモリ内に配列されているならば、対象のデータ項目は、各キャッシュラインが複数から多数の対象のデータ項目を含んだ状態で、キャッシュライン内により密に詰め込まれ得る。これが、キャッシュの有効性を改善するのに役立ち得る。同様に、特定のアルゴリズムに非常に効率的な方法でデータ項目がメモリ内に配列されているならば、少なくとも平均では、より多くの対象データ項目が各読み出しオペレーションにおいてプロセッサに読み出され得る。したがって、特定のアルゴリズムに効率的な方法でデータをメモリ内に配列することが可能となるであろう手法が、性能を改善するのに役立ち得る。
他のデータに対して、多次元の局所性又は近接関係を有するデータを処理しやすい様々な異なるタイプのアルゴリズムが存在する。1つの例として、画像処理アルゴリズム(例えば、赤目軽減、圧縮など)は,隣接したピクセル、周囲のピクセル、又はそうでなければ近くのピクセルのグループ用のデータを共に又は同時に処理しやすいことが多い。アルゴリズムは、単一の行又は列内にある全ピクセルのデータ(例えば、行優先配列の場合でも列優先配列の場合でもよいが)ではなく、隣接する画素のブロックのデータに比較的関心があり得る。同様に、多くの映像処理アルゴリズム(例えば、圧縮、映像監視分析、ロボットビジョンなど)では、隣接する画素からなるグループのデータ、及び/又はシーケンシャルな映像フレームのピクセルに対応するデータを共に又は同時に処理することが一般的である。例えば、ピクセルの絶対値ではなく、そのようなピクセル間の差異を格納することで、圧縮が実現されることが多い。多次元の局所性を有するデータも利用しやすい他のアプリケーション、又はアルゴリズムの例をいくつか挙げると、限定されないが、トモグラフィ解析、耐震解析、形状モデリング、行列演算(例えば、行列乗算及び/又は行列転置)、有限要素解析、光線追跡法、フーリエ変換、並列データ構築アプリケーション、及びグラフィックスアプリケーションなどが含まれる。しかし、上述されたように、特に比較的大きい配列が含まれる場合、行優先順序のデータ、列優先順序のデータ、及び様々な他の配列のデータは、多次元の局所性を有するデータを頻繁に利用するアプリケーションに効率的な配列のデータを提供しないことが多い。結果として、多次元の局所性を維持するデータを構成する他の方法が、特定の利点を特定のアプリケーションに提供しやすいであろう。
Z順序曲線は、モートン順序曲線としても知られており、連続した空間充填曲線、又はデータの多次元の局所性又は近接関係を維持しながら、多次元のデータを1次元にマッピングすることができる機能である。すなわち、モートン順序曲線は、2D空間、3D空間,4D空間、又は他の多次元空間内のデータを、データの多次元の局所性を維持する方法で、データの線形リスト又は配列の上にマッピングし得る(例えば、多次元空間内に局所性を有するデータはまた、モートン曲線により提供される線形リスト又は配列内に局所性を有する)。モートン順序曲線に沿ったデータの順序は、Z曲線順序又はモートン順序と呼ばれる。モートン順序は、各ポイントのモートンコード又はモートン座標に反映される。Z順序曲線は、基本ユニットとして4つのポイントを線形に接続するZ字形状の曲線である。Z順序空間充填曲線全体は、これら複数の又は多くのZ字形状の曲線又はユニットを共に接続することで形成され、2D空間、3D空間,4D空間、又は他の多次元空間を充填する。
図2は、図1の2D配列100にマッピングされたZ順序曲線又はモートン順序曲線206の例を示す。示されるように、複数のZ字形状の曲線又はユニット(この例では4つ)が、2D配列内の全てのポイントを通過又は充填すべく線形配列内で共に接続され得る。この例では、2D配列内に16個のデータ項目があるので、4つのポイントをそれぞれ有する4つのZ字形状のユニットが、16個のデータ項目の2D配列を完全に通過する。この説明図では、座標は10進数表記(例えば、1,2,3など)で示されている。座標の同等の2進表現207がまた、10進数の座標と並んで括弧にくくられて示されている(例えば、10、11)。例として、10進数の座標値2は、2進数のインデックス値「10」と同等である。
モートン順序曲線を配列にマッピングすることは、配列のポイント又はデータ項目のモートンコード又は座標208を決定することを含む。モートン順序曲線に沿った個々のポイントのモートン座標は、複数の多次元座標の2進表現からなるビットを固定パターンにインターリーブすることで計算され得る。例えば、x座標の第1及び第2のビットがx1及びx2とそれぞれ表される場合、且つy座標の第1及び第2のビットがy1及びy2とそれぞれ表される場合、あるポイントのモートン座標は、これらのビットをx1y1x2y2の順序にインターリーブすることで計算され得る。さらに説明すると、そのポイントのモートン座標(x=1、y=0)は、これらの座標の2進表現からなるビット(すなわち、01、00)をインターリーブすることで求めることができ、値「0001」というモートン座標208を得る。同様に、3D及び4Dでは、3Dモートン座標又は4Dモートン座標は、3つの座標及び4つの座標の2進表現からなるビットをそれぞれインターリーブすることで求められ得る。反対に、複数の多次元座標の2進表現を計算することは、モートン座標のビットを別々の座標にする逆方向の固定デインターリーブを必要とする。例えば、モートン座標x1y1x2y2は、ビットx1y1x2y2をデインターリーブすることでx座標及びy座標の2進表現に変換され、x座標をx1x2として、y座標をy1y2として生成し得る。さらに説明すると、モートン座標「0001」は、2進表現のx座標「01」及びy座標「00」に変換され得る。同様に、3D及び4Dでは、2進表現の3つ又は4つの異なる座標は、3Dモートン座標又は4Dモートン座標のビットをデインターリーブすることで求められ得る。
データ内の多次元の局所性を表す能力に部分的に起因して、特定のタイプのアプリケーションに関する性能を改善するのに役立つべく、2D配列、3D配列、又は4D配列が、対応する2Dモートン順序表現、3Dモートン順序表現、又は4Dモートン順序表現に再配列され得る。例えば、アプリケーションがデータを処理する前に、データは2D配列、3D配列、又は4D配列から、対応する2Dモートン順序表現、3Dモートン順序表現、又は4Dモートン順序表現にメモリ内で再配列され得る。そのアプリケーションがデータを処理した後、2Dモートン順序表現、3Dモートン順序表現、又は4Dモートン順序表現を2D配列、3D配列、又は4D配列に戻すよう変換することが好ましい場合がある。他のシナリオでは、データは最初に2Dモートン順序表現、3Dモートン順序表現、又は4Dモートン順序表現で構成され、性能を改善すべく又は他の理由により、2D配列、3D配列、又は4D配列に再配列され得る。いずれにしても、モートン順序配列と、多次元配列及び/又は多次元空間との間で変換することが好ましいことが多い。そのような変換は一般的に、計算集約型になりやすい。そのような変換を加速することができる命令は、性能を改善するのに役立ち得る。
図3は、3Dモートン座標変換命令312の実施形態を実行するよう動作可能なプロセッサ310の実施形態に関するブロック図である。実施形態によっては、プロセッサは汎用プロセッサ(例えば、デスクトップ、ラップトップ、又は他のコンピュータに用いられるタイプの汎用マイクロプロセッサ又は中央処理装置(CPU))でよい。あるいは、プロセッサは専用プロセッサでもよい。適切な専用プロセッサの例には、限定されないが、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックスプロセッサ、コプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、及びコントローラ(例えば、マイクロコントローラ)が含まれる。プロセッサは、様々な複合命令セット計算(CISC)アーキテクチャ、縮小命令セット計算(RISC)アーキテクチャ、超長命令語(VLIW)アーキテクチャ、ハイブリッドアーキテクチャ、又は他のタイプのアーキテクチャのうちいずれかを有してよく、あるいは異なるアーキテクチャの組み合わせを有してもよい(例えば、異なるコアが異なるアーキテクチャを有してよい)。
動作中に、プロセッサ310は3Dモートン座標変換命令312を受信してよい。例えば命令は、相互接続しているメモリからフェッチされてよく、又は別の方法でそこから受信されてもよい。命令は、マクロ命令、アセンブリ言語命令、機械語命令、あるいはプロセッサの命令セットの制御信号又は他の命令を表してよい。
再度図3を参照すると、プロセッサは、復号ユニット又はデコーダ314を含む。復号ユニットは、3Dモートン座標変換命令を受信して復号してよい。3Dモートン座標変換命令は、プロセッサの命令セットの一部であってよい。復号ユニットは、1つ又は複数の比較的低水準の命令又は制御信号(例えば、1つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、復号命令、又は制御信号など)を出力してよく、この命令又は制御信号は、比較的高水準の3Dモートン座標変換命令を反映する、表す、及び/又はそこから得られる。復号ユニットは、限定されないが、マイクロコードリードオンリメモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、及び復号ユニットを実装するのに適した他のメカニズムを含む様々な異なるメカニズムを用いて実装されてよい。
実施形態によっては、3Dモートン座標変換命令が復号ユニットに直接提供される代わりに、命令エミュレータ、トランスレータ、モーファ、インタプリタ又は他の命令変換モジュールが任意に用いられてよい。様々なタイプの適切な命令変換モジュールが、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせを使って実装されてよい。実施形態によっては、命令変換モジュールは、例えば、別個のダイ上、及び/又はメモリ内など、プロセッサの外部に設けられてよい(例えば、スタティック、ダイナミック、又はランタイムエミュレーションモジュールとして)。例として命令変換モジュールは、3Dモートン座標変換命令(第1の命令セットでよい)を受信してよく、3Dモートン座標変換命令を1つ又は複数の対応する中間命令あるいは制御信号(第2の異なる命令セットでよい)にエミュレーションしてよく、翻訳してよく、モーフィングしてよく、解釈してよく、又は別の方法で変換してよい。第2の命令セットの1つ又は複数の中間命令又は制御信号は復号ユニットに提供されてよく、復号ユニットは、1つ又は複数の中間命令又は制御信号を、プロセッサのネイティブハードウェア(例えば、1つ又は複数の実行ユニット)が実行可能な1つ又は複数の低水準の命令又は制御信号に復号してよい。
再度図3を参照すると、プロセッサはまた、パックドデータレジスタ318のセットを含む。パックドデータレジスタのそれぞれは、パックドデータ、ベクトルデータ、又は単一命令・複数データ(SIMD)のデータを格納するよう動作可能なオンダイの記憶位置を表し得る。SIMDアーキテクチャでは、パックドデータ命令、ベクトル命令、又はSIMD命令が、複数のデータ要素又は複数の組のデータ要素を同時に又は並列に処理し得る。プロセッサは、複数のオペレーションを同時に又は並列に実行するための、パックドデータ命令に対応する並列実行ハードウェアを有してよい。複数のデータ要素は、パックドデータ又はベクトルデータとして1つのレジスタ又はメモリ位置内にパックされてよい。パックドデータでは、レジスタ又は他の記憶位置のビットは、一連のデータ要素に論理的に分割されてよい。例えば、256ビット幅のパックドデータレジスタは、4個の64ビット幅のデータ要素、8個の32ビットデータ要素、16個の16ビットデータ要素などを有してよい。データ要素のそれぞれは、別々の個々のデータ(例えば、ピクセル色、座標など)を表してよく、他のものとは別々に及び/又は別個に影響され得る。パックドデータレジスタは、アーキテクチャ的に可視なレジスタ又はアーキテクチャレジスタを表してよく、これらは、ソフトウェア及び/又はプログラマに可視であり、及び/又は、オペランドを特定するためにプロセッサの命令セットの命令によって示されるレジスタである。これらのアーキテクチャレジスタは、所定のマイクロアーキテクチャ内の他の非アーキテクチャレジスタ(例えば、一時レジスタ、リオーダバッファ、リタイアメントレジスタなど)と対比される。パックドデータレジスタは、公知技術を用いて異なる方法で異なるマイクロアーキテクチャに実装されてよく、いかなる特定のタイプの設計にも限定されない。適切なタイプのレジスタの例には、限定されないが、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられる物理レジスタ、及びこれらの組み合わせが含まれる。
実施形態によっては、命令は、複数の3Dモートン座標を含むソースパックドデータオペランド320を(例えば、1つ又は複数のフィールド又はビットのセットを通じて)明示的に指定しても、別の方法で示してもよく(例えば、暗黙に示してもよい)、あるいは、1つ又は複数の結果パックドデータオペランド324が格納される1つ又は複数のデスティネーション記憶位置を指定しても、別の方法で示してもよい。1つの例として、命令は、ソースオペランド及び結果オペランドのうち1つ又は複数用のレジスタ、メモリ位置、又は他の記憶位置を指定するためのオペランド指定フィールドを有してよい。あるいは、これらのオペランドのうち1つ又は複数は、任意で、命令に対して暗黙的(例えば、命令のオペコードに対して暗黙的)でよい。別の選択肢として、ソースオペランド用に用いられる記憶位置はまた、結果オペランド用として再利用されてよい(例えば、同じ記憶位置を最初はソースオペランド用に、その後は結果オペランド用に用いることは、命令に対して暗黙的でよい)。示されるように、実施形態によっては、ソースパックドデータオペランド320は任意で、第1のパックドデータレジスタに格納されてよい。さらに示されるように、実施形態によっては、1つ又は複数の結果パックドデータオペランド324は、1つ又は複数のパックドデータレジスタに格納されてよい。あるいは、実施形態によっては、ソースパックドデータオペランドに用いられるパックドデータレジスタが、結果パックドデータオペランドを格納するのに任意で再利用されてよい。1つの態様において、ソース/デスティネーションレジスタが、ソースオペランド及び結果オペランドの両方に用いられると暗黙に又は黙示的に理解され得る。さらに、メモリ位置又は他の記憶位置が、これらのオペランドのうち1つ又は複数のために任意で用いられ得るので、パックドデータレジスタの使用は必須ではない。
再度図3を参照すると、実行ユニット316は、復号ユニット314及びパックドデータレジスタ318に結合されている。実行ユニットは、1つ又は複数の復号された又は別の方法で変換された命令又は制御信号を受信してよく、これらは3Dモートン座標変換命令312を表す、及び/又は3Dモートン座標変換命令312から得られる。実行ユニットはまた、複数の3Dモートン座標を含むソースパックドデータオペランド320を受信してよい。実行ユニットは、3Dモートン座標変換命令に応答して、及び/又は3Dモートン座標変換命令の結果として(例えば、当該命令から復号される1つ又は複数の命令又は制御信号に応答して)、当該命令により示される1つ又は複数のデスティネーション記憶位置に1つ又は複数の結果パックドデータオペランド324を格納するよう動作可能である。実施形態によっては、1つ又は複数の結果パックドデータオペランドは、3つの3D座標からなる複数のセットを含んでよい。実施形態によっては、3つの3D座標は、3D空間、3D配列、又は他の3Dデータ構造のx座標,y座標,及びz座標を表してよい。x、y、及びzは、3つの異なる次元を指定するのに本明細書では広く用いられており、3D空間であるこれらの次元に限定されるのではなく、関心のあるその他の所望の特性(例えば、圧力、時間、温度など)を表してもよい。3D座標のセットのそれぞれ(例えば、x座標、y座標、z座標の各セット)は、複数の3Dモートン座標の異なる1つに対応してよい。実施形態によっては、その結果は、図5〜図8で示され説明されるもののうちいずれであってもよいが、本発明の範囲はそのように限定されてはいない。
実施形態によっては、命令は、各3Dモートン座標のビットについて、3通りのビット単位の固定デインターリーブを実行ユニットに実行させてよい。例えば、1番目のビットから始まる所定のモートン座標の3ビットごとの値は、対応する第1の座標(例えば、x座標)として共に連結されて1つ又は複数の結果パックドデータオペランドに格納されてよく、2番目のビットから始まる所定のモートン座標の3ビットごとの値は、対応する第2の座標(例えば、y座標)として共に連結されて1つ又は複数の結果パックドデータオペランドに格納されてよく、3番目のビットから始まる所定のモートン座標の3ビットごとの値は、対応する第3の座標(例えば、z座標)として共に連結されて1つ又は複数の結果パックドデータオペランドに格納されてよい。3ビットの幅、並びに0ビット、1ビット、及び2ビットのオフセットがあることに留意されたい。さらに説明すると、実行ユニットは、少なくとも0、3、6、9、12、15、及び18の位置(並びに、実施形態によっては任意で21、24、27の位置のうち1つ又は複数も)におけるビットの値を、所定の3Dモートン座標に対応する3D座標のセットの第1の3D座標(例えば、x座標)に対応する連続した最下位ビットストリングに格納してよい。同様に、実行ユニットは、少なくとも1、4、7、10、13、16、及び19の位置(並びに、実施形態によっては任意で22、25、28の位置のうち1つ又は複数も)におけるビットの値を、3D座標の対応するセットの第2の3D座標(例えば、y座標)に対応する連続した最下位ビットストリングに格納してよい。同じく、実行ユニットは、少なくとも2、5、8、11、14、17、及び20の位置(並びに、実施形態によっては任意で23、26、29の位置のうち1つ又は複数も)におけるビットの値を、3D座標の対応するセットの第3の3D座標(例えば、z座標)に対応する連続した最下位ビットストリングに格納してよい。
実施形態によっては、3つの結果パックドデータオペランドが、座標変換命令により示される対応する3つのデスティネーション記憶位置(例えば、パックドデータレジスタ)に格納されてよい。実施形態によっては、3つの結果パックドデータオペランドのそれぞれは、同じ次元に全て対応する複数の3D座標(例えば、第1の結果オペランドの全てのx座標、第2の結果オペランドの全てのy座標、第3の結果オペランドの全てのz座標)を任意で含んでよい。あるいは、単一の結果パックドデータオペランドが、座標変換命令により示される単一のデスティネーション記憶位置(例えば、単一のパックドデータレジスタ)に任意で格納されてもよい。実施形態によっては、3つの3D座標(例えば、x座標、y座標、及びz座標)の各セットは、対応する3Dモートン座標と同じ相対位置にある単一のデータ要素に任意で格納されてよい(例えば、x、y、z座標のタプルが単一の32ビット結果データ要素に任意で格納されてよい)。
実行ユニット及び/又はプロセッサは、特定又は特殊なロジック(例えば、トランジスタ、集積回路、又はファームウェア(例えば、不揮発性メモリに格納される命令)と組み合わされる可能性のある他のハードウェア、及び/又はソフトウェア)を含んでよく、当該ロジックは、3Dモートン座標変換命令を実行するよう動作可能である、及び/又は、3Dモートン座標変換命令に応答して及び/又は3Dモートン座標変換命令の結果として(例えば、3Dモートン座標変換命令から復号された1つ又は複数の命令又は制御信号に応答して)、その結果を格納する。例として、実行ユニットは、ロジックユニット、算術ロジックユニットなどを含んでよい。実施形態によっては、実行ユニットは、3通りのビット単位の固定デインターリーブを実行するマルチプレクサを利用してよい。他の実施形態では、様々な異なるタイプのマスク処理及び論理演算が、3通りのビット単位の固定デインターリーブを実行するのに用いられてよい。
説明をあいまいにしないように、比較的簡単なプロセッサ310が示され、説明されている。しかし、プロセッサは他の構成要素を任意で含んでよい。そのような構成要素の可能性のある例には、限定されないが、図9及び/又は図16A〜19のいずれかのうちのいずれかに示され説明される構成要素が含まれる。様々な異なる実施形態が、そのような構成要素の様々な異なる組み合わせ及び構成を含んでよい。そのような構成要素は、それぞれのオペレーションに従って動作できるようにすべく、互いに結合されてよい。実施形態によっては、構成要素の全てが少なくとも1つのコア、いくつかのコア、コアのサブセット、又はプロセッサのコア全てに含まれてよい。様々な実施形態では、プロセッサは、少なくとも1つ、2つ、4つ、8つ、16個、32個、又はさらに多くのコアを有してよい。
図4は、3Dモートン座標変換命令の実施形態を実行する方法430に関する実施形態のブロックフロー図である。様々な実施形態において、本方法はプロセッサ、命令処理装置、又は他のデジタルロジックデバイスによって実行されてよい。実施形態によっては、図4の方法は、図3のプロセッサによって、及び/又はその内部で実行されてよい。図3のプロセッサについて、本明細書で説明される構成要素、機能、及び特定の任意の詳細はまた、図4の方法に任意で適用される。代わりに、図4の方法が、同種の又は異なるプロセッサ又は装置によって、及び/又はその内部で実行されてよい。さらに、図3のプロセッサは、図4の方法と同じ方法、同様の方法、又は異なる方法を実行してもよい。
本方法は、ブロック432において3Dモートン座標変換命令を受信する段階を含む。様々な局面において、命令はプロセッサ又はその一部(例えば、命令フェッチユニット、復号ユニット、バスインタフェースユニットなど)で受信されてよい。様々な局面において、命令は、オフプロセッサ及び/又はオフダイソース(例えば、メモリ、相互接続など)から、又はオンプロセッサ及び/又はオンダイソース(例えば、命令キャッシュ、命令キューなど)から受信されてよい。3Dモートン座標変換命令は、複数の3Dモートン座標を含むソースパックドデータオペランドを指定するか、又は別の方法でそれを示してよく、且つ1つ又は複数のデスティネーション記憶位置を指定するか、又は別の方法でそれを示してもよい。
ブロック434において、1つ又は複数の結果パックドデータオペランドは、3Dモートン座標変換命令に応答して、及び/又は3Dモートン座標変換命令の結果として、1つ又は複数のデスティネーション記憶位置に格納されてよい。実施形態によっては、その結果は、3つの3D座標からなる複数のセットを含んでよい。3次元座標のセットのそれぞれは、3次元モートン座標の異なる1つに対応する。実施形態によっては、ソースパックドデータオペランド及び1つ又は複数の結果パックドデータオペランドは、図5〜図8のオペランドのいずれであってもよいが、本発明の範囲はそのように限定されてはいない。
示される方法は、アーキテクチャ上のオペレーション(例えば、ソフトウェアの観点から可視のもの)を含む。他の実施形態において、本方法は、1つ又は複数のマイクロアーキテクチャ上のオペレーションを任意で含んでよい。例として、命令はプリフェッチされ、命令キャッシュに格納され、命令フェッチユニットによってフェッチされ、復号され、スケジューリングされてよく、ソースオペランドはアクセスされ、他の命令に対してアウトオブオーダに実行されてよく、実行ユニットは命令を実行するためにマイクロアーキテクチャ上のオペレーションを実行してよい、など。
図5は、ソースパックドデータオペランド520の異なる32ビットデータ要素にそれぞれ格納される3Dモートン座標(m)を、対応する3つの3D座標(x、y、及びz)に変換する3Dモートン座標変換オペレーション540の例示的な実施形態を示すブロック図であり、対応する3つの3D座標は、3つの結果パックドデータオペランド542、544、546の異なる1つの対応する32ビットデータ要素にそれぞれ格納される。このオペレーションは、3つの3D座標命令への3Dモートン座標変換に関する例示的な実施形態に応じて実行されてよい。
その命令は、ソースパックドデータオペランド520を指定又は別の方法で示してよい。ソースパックドデータオペランドは、複数の3Dモートン座標(m)を有する。3Dモートン座標のそれぞれは、ソースパックドデータオペランドの異なる32ビットデータ要素に格納されている。特定の例示された実施形態において、ソースパックドデータオペランドは、16個の32ビットデータ要素を有する512ビットのソースパックドデータオペランドであるが、本発明の範囲はそのように限定されてはいない。16個の32ビットデータ要素は、対応する16個の3Dモートン座標(m1からm16)を含む。他の実施形態では、他の幅のソースパックドデータオペランド、及び/又は他の数の3Dモートン座標が任意で用いられてよい。例えば、様々な実施形態において、ソースパックドデータオペランドの幅は、64ビット、128ビット、256ビット、512ビット、又は1024ビットでもよいが、本発明の範囲はそのように限定されてはいない。この例示的な実施形態では、データ要素は32ビットデータ要素であるが、本発明の範囲はそのように限定されてはいない。例えば、64ビットデータ要素など、他のサイズのデータ要素も適している。ソースパックドデータオペランド内のデータ要素及び/又は3Dモートン座標の数字は、データ要素のそれぞれのビット幅で分割されたソースパックドデータオペランドのビット幅になり得る。様々な実施形態において、少なくとも2個、少なくとも4個、少なくとも8個、少なくとも16個、少なくとも32個、又は32個より多くのデータ要素及び/又は3Dモートン座標がソースパックドデータオペランドに存在してもよい。
この例示的な実施形態では、3つの結果パックドデータオペランド542、544、546が(例えば、実行ユニット516によって)生成され、命令に応答して格納されてよい。具体的には、第1の結果パックドデータオペランド520、第2の結果パックドデータオペランド544、及び第3の結果パックドデータオペランド546が生成されてよい。これら3つの結果パックドデータオペランドは、対応する3つのデスティネーション記憶位置に格納されてよく、これらのデスティネーション記憶位置は命令によって指定されてよく、又は別の方法で示されてよい。様々な実施形態において、これらのデスティネーション記憶位置は、パックドデータレジスタ、メモリ位置、他の記憶位置、又はそれらの組み合わせであってよい。
3つの結果パックドデータオペランドは、複数の3Dモートン座標から変換された3つの3D座標の複数のセットを含む。具体的には、3つの結果パックドデータオペランドは、ソースパックドデータオペランドの3Dモートン座標の数と同じ数の3つの3D座標からなるセットを含む。3Dモートン座標のそれぞれは、(例えば、オペランド内の同じ相対ビット位置にある)結果パックドデータオペランドの3つの3D座標からなる別の対応するセットに対応し、またそれに変換されてよい。例えば、ソースパックドデータオペランドの最下位(右端)32ビットデータ要素にある3Dモートン座標(m1)は、第1の結果パックドデータオペランドの最下位(右端)32ビットデータ要素にある第1の対応する3D座標(x1)、第2の結果パックドデータオペランドの最下位32ビットデータ要素にある第2の対応する3D座標(y1)、及び第3の結果パックドデータオペランドの最下位32ビットデータ要素にある第3の対応する3D座標(z1)に変換されてよい。同様に、ソースパックドデータオペランドの最上位(左端)32ビットデータ要素にある3Dモートン座標(m16)は、第1の結果パックドデータオペランドの最上位32ビットデータ要素にある第1の対応する3D座標(x16)、第2の結果パックドデータオペランドの最上位32ビットデータ要素にある第2の対応する3D座標(y16)、及び第3の結果パックドデータオペランドの最上位32ビットデータ要素にある第3の対応する3D座標(z16)に変換されてよい。他の全ての座標が同様に又は類似して変換されてよい。アルゴリズム全体の観点から効率性をうまく利用するために、多くの場合、命令/オペレーションが同じタイプの座標を同じ結果パックドデータオペランドに(例えば、全てのx座標を1つの結果パックドデータオペランドに、全てのy座標を別の結果パックドデータオペランドに、そして全てのz座標をさらに別の結果パックドデータオペランドに)格納してよいことに留意されたい。ただし、これは必須ではない。
前述したように、3つの3D座標からなるセットのそれぞれは、対応する3Dモートン座標のビットに、固定した3通りのビット単位のデインターリーブを実行して、3つの3D座標のうち異なる1つにそれぞれ対応する3つの連続したビットストリングにすることで、対応する3Dモートン座標から生成されてよい。示された例示的な実施形態では、3Dモートン座標(m)はそれぞれ30ビットであり、対応する3つの3D座標(x、y、及びz)の各々はそれぞれ10ビットであるが、本発明の範囲はそのように限定されてはいない。10ビットの3つのセットはそれぞれ、モートン座標として単一の32ビットデータ要素に入ることができる最大の同一セットサイズである(すなわち、10+10+10=30、32−30=2)。他の実施形態において、結果パックドデータオペランドの3つの3D座標のそれぞれは、7ビット、8ビット、9ビット、又は10ビットといった同じ数のビットを用いて表され得、複数の3Dモートン座標のそれぞれは、その数のビットの3倍になり得る。多くの用途では、より多くの座標系を表すことができるように、3つの3D座標のビットの数は9ビット又は10ビットになる。
32ビットソースデータ要素(SRC1)に格納された所定の3Dモートン座標(例えば、m1)を対応する3つの10ビット3D座標(x1、y1、z1)に変換し、それぞれが別の対応する結果(RES1、RES2、RES3)のデータ要素に格納されるオペレーションが、以下のように表され得る。ここで、「0:27:3」の中の「3」は、3ビットごとにビットを飛び越していくことを表す。
これが意味するのは、10ビットのx座標は、0、3、6、9、12、15、18、21、24、及び27の位置における30ビット3Dモートン座標(m)のビットの値を格納してよく、10ビットのy座標は、1、4、7、10、13、16、19、22、25、及び28の位置におけるビットの値を格納してよく、10ビットのz座標は、2、5、8、11、14、17、20、23、26、及び29の位置におけるビットの値を格納してよいということである。さらに説明すると、以下の表1は、3Dモートン座標(m)及びその対応する3つの3D座標(x、y、z)に関する1つの可能な例をリストにしており、最下位ビットを右側に示し、x座標に対応するビットをモートン座標に太字で示している。
示された実施形態では、結果パックドデータオペランドのそれぞれは、ソースパックドデータオペランドと同じ幅を任意で有するが、これは必須ではない。3つの3D座標のそれぞれは、3Dモートン座標の1/3の数のビットしか有していないので、必要に応じてより小さい結果パックドデータオペランドが任意で用いられてよい。例えば、結果パックドデータオペランドはソースパックドデータオペランドの半分のビットを任意で有してよく、3つの3D座標のそれぞれは、ソースパックドデータオペランドのデータ要素の半分のビットしか任意で有さないデータ要素に格納されてよい。例えば、結果パックドデータオペランドは任意で、16ビットデータ要素を有する256ビットの結果パックドデータオペランドであってよい。
図6は、ソースパックドデータオペランド620の異なる64ビットデータ要素にそれぞれ格納される3Dモートン座標(m)を、対応する3つの3D座標(x、y、及びz)に変換する3Dモートン座標変換オペレーション647の例示的な実施形態を示すブロック図であり、対応する3つの3D座標は、3つの結果パックドデータオペランド642、644、646のうち異なる1つの対応する64ビットデータ要素にそれぞれ格納される。このオペレーションは、3つの3D座標命令への3Dモートン座標変換に関する例示的な実施形態に応じて実行されてよい。
図6のオペレーションは、図5のオペレーションとある程度の類似性を有するが、3Dモートン座標及び対応する3D座標の幅と、データ要素が32ビットデータ要素の代わりに64ビットデータ要素である点とが主に異なる。説明をあいまいにしないように、図6のオペレーションについて異なる特性及び/又は追加の特性を主に説明し、図5のオペレーションに関する任意に類似又は共通した特性及び詳細を全て繰り返すことはしない。しかし、図5のオペレーションについて前述した特性及び詳細は、変形例及び代替例を含めて、別段の定めがない限り、又は別の方法で明らかに識別できない限り、図6のオペレーションに任意で適用されてもよいことが理解されるべきである。
前述したように、命令は、ソースパックドデータオペランド620を指定してよく、又は別の方法でそれを示してもよい。この実施形態では、3Dモートン座標のそれぞれは、ソースパックドデータオペランドの異なる64ビットデータ要素に格納されている。特定の例示された実施形態において、ソースパックドデータオペランドは、8つの64ビットデータ要素、及び/又は8つの3Dモートン座標(m1からm8)を有する512ビットのソースパックドデータオペランドであるが、本発明の範囲はそのように限定されてはいない。他の実施形態では、ソースパックドデータオペランドは512ビットより広くても、それより狭くてもよい(例えば、128ビット、256ビット、1024ビットなど)。
この例示的な実施形態では、3つの結果パックドデータオペランド642、644、646が(例えば、実行ユニット616によって)生成され、命令に応じて格納されてよい。3つの結果パックドデータオペランドは3つの3D座標からなる複数のセットを含み、これらのセットはソースパックドデータオペランドの同じ数の3Dモートン座標から生成又は変換される。3Dモートン座標のそれぞれは、(例えば、オペランド内の同じ相対ビット位置にある)結果パックドデータオペランドの3つの3D座標からなる別の対応するセットに対応し、またそれに変換されてよい。例えば、ソースパックドデータオペランドの最下位(右端)64ビットデータ要素にある3Dモートン座標(m1)は、第1の結果パックドデータオペランドの最下位64ビットデータ要素にある第1の対応する3D座標(x1)、第2の結果パックドデータオペランドの最下位64ビットデータ要素にある第2の対応する3D座標(y1)、及び第3の結果パックドデータオペランドの最下位64ビットデータ要素にある第3の対応する3D座標(z1)に変換されてよい。他の3Dモートン座標は、結果パックドデータオペランドに格納された3つの3D座標からなる対応するセットに同様に又は類似して変換されてよい。
前述したように、3つの3D座標からなるセットのそれぞれは、対応する3Dモートン座標のビットに、固定した3通りのビット単位のデインターリーブを実行して、3つの3D座標のうち異なる1つにそれぞれ対応する3つの連続したビットストリングにすることで、対応する3Dモートン座標から生成されてよい。示された例示的な実施形態では、3Dモートン座標(m)はそれぞれ63ビットであり、対応する3つの3D座標(x、y、及びz)の各々はそれぞれ21ビットであるが、本発明の範囲はそのように限定されてはいない。21ビットの3つのセットはそれぞれ、モートン座標として単一の64ビットデータ要素に入ることができる最大の同一セットサイズである(すなわち、21+21+21=63、64−63=1)。他の実施形態において、結果パックドデータオペランドの3つの3D座標のそれぞれは、12ビットから21ビット、又は15ビットから21ビット、又は18ビットから21ビットの範囲をとる同じ数のビットで表されてよく、3Dモートン座標のそれぞれは、その数のビットの3倍になり得る。概して、より多くのビットによって、より多くのデータポイント及び/又はより多くの座標系を表すことが可能になる。
64ビットソースデータ要素(SRC1)に格納された所定の3Dモートン座標(例えば、m1)を対応する3つの21ビット3D座標(x1、y1、z1)に変換し、それぞれが別の対応する結果(RES1、RES2、RES3)のデータ要素に格納されるオペレーションが、以下のように表され得る。ここで、「0:60:3」の中の「3」は、3ビットごとにビットを飛び越していくことを表す。
21ビットのx座標は、0、3、6、9、12などと続いて60までの位置における30ビット3Dモートン座標(m)のビットの値を格納してよく、21ビットのy座標は、1、4、7、10、13などと続いて61までの位置におけるビットの値を格納してよく、21ビットのz座標は2、5、8、11、14などと続いて62までの位置におけるビットの値を格納してよい。
図7は、ソースパックドデータオペランド720の異なる32ビットデータ要素にそれぞれ格納される3Dモートン座標(m)を、対応する3つの3D座標(x、y、及びz)に変換する3Dモートン座標変換オペレーション750の例示的な実施形態を示すブロック図であり、対応する3つの3D座標は、単一の結果パックドデータオペランド748の対応する32ビットデータ要素の異なる連続したビット部分にそれぞれ格納される。このオペレーションは、3つの3D座標命令への3Dモートン座標変換に関する例示的な実施形態に応じて実行されてよい。
図7のオペレーションは、図5のオペレーションとある程度の類似性を有するが、3つの3D座標のセットが、それぞれ異なる結果パックドデータオペランドの異なるデータ要素に格納される代わりに、単一の結果パックドデータオペランドのデータ要素の3つの異なる部分に格納されるという点で主に異なる。説明をあいまいにしないように、図7のオペレーションについて異なる特性及び/又は追加の特性を主に説明し、図5のオペレーションに関する任意に類似又は共通した特性及び詳細を全て繰り返すことはしない。しかし、図5のオペレーションについて前述した特性及び詳細は、変形例及び代替例を含めて、別段の定めがない限り、又は別の方法で明らかに識別できない限り、図7のオペレーションに任意で適用されてもよいことが理解されるべきである。
前述したように、命令は、ソースパックドデータオペランド720を指定してよく、又は別の方法でそれを示してもよい。この実施形態では、3Dモートン座標のそれぞれは、ソースパックドデータオペランドの異なる32ビットデータ要素に格納されている。特定の例示された実施形態において、ソースパックドデータオペランドは、16個の32ビットデータ要素、及び/又は16個の3Dモートン座標(m1からm16)を有する512ビットのソースパックドデータオペランドであるが、本発明の範囲はそのように限定されてはいない。他の実施形態では、ソースパックドデータオペランドは512ビットより広くても、それより狭くてもよく(例えば、128ビット、256ビット、1024ビットなど)、より少ない又はより多いデータ要素及び/又は3Dモートン座標を有してもよい。
この例示的な実施形態では、単一の結果パックドデータオペランド748が(例えば、実行ユニット716によって)生成され、命令に応答して格納されてよい。結果パックドデータオペランドは3つの3D座標からなる複数のセットを含み、それらのセットはソースパックドデータオペランドの同じ数の3Dモートン座標から生成又は変換される。ソースパックドデータオペランドの3Dモートン座標のそれぞれは、(例えば、オペランド内の同じ相対ビット位置にある)結果パックドデータオペランドの3つの3D座標からなる別の対応するセットに対応し、またそれに変換されてよい。例えば、ソースパックドデータオペランドの最下位(右端)32ビットデータ要素にある3Dモートン座標(m1)は、結果パックドデータオペランドの最下位32ビットデータ要素にある3つの座標(x1、y1、z1)からなるセットに変換されてよい。他の3Dモートン座標は、結果パックドデータオペランドの異なるデータ要素にそれぞれ格納された3つの3D座標からなる対応するセットに同様に又は類似して変換されてよい。
前述したように、3つの3D座標からなるセットのそれぞれは、対応する3Dモートン座標のビットに、固定した3通りのビット単位のデインターリーブを実行して、3つの3D座標のうち異なる1つにそれぞれ対応する3つの連続したビットストリングにすることで、対応する3Dモートン座標から生成されてよい。示された例示的な実施形態では、3Dモートン座標(m)はそれぞれ30ビットであり、対応する3つの3D座標(x、y、及びz)の各々はそれぞれ10ビットであるが、本発明の範囲はそのように限定されてはいない。他の実施形態において、結果パックドデータオペランドの3つの3D座標のそれぞれは、7ビットから10ビット、又は9ビットから10ビットの範囲をとる同じ数のビットで表されてよく、3Dモートン座標のそれぞれは、その数のビットの3倍になり得る。概して、より多くのビットによって、より多くのデータポイント及び/又はより多くの座標系を表すことが可能になる。
32ビットソースデータ要素(SRC1)に格納された所定の3Dモートン座標(例えば、m1)を対応する3つの10ビット3D座標(x1、y1、z1)に変換し、それぞれが単一の結果パックドデータオペランドの単一の結果データ要素(RES1)の異なる連続したビット部分に格納されるオペレーションが、以下のように表され得る。ここで、「0:27:3」の中の「3」は、3ビットごとにビットを飛び越していくことを表す。
これが意味するのは、RES1のビット[0:9]にある10ビットのx座標は、0、3、6、9、12、15、18、21、24、及び27の位置における30ビット3Dモートン座標(m)のビットの値を格納してよく、RES1のビット[10:19]にある10ビットのy座標は、1、4、7、10、13、16、19、22、25、及び28の位置におけるビットの値を格納してよく、RES1のビット[20:29]にある10ビットのz座標は、2、5、8、11、14、17、20、23、26、及び29の位置におけるビットの値を格納してよいということである。さらに説明すると、以下の表2は、3Dモートン座標(m)及びその対応する3つの3D座標(x、y、z)に関する1つの可能な例をリストにしており、最下位ビットを右側に示し、x座標のビットをモートン座標に太字で示している。
図8は、ソースパックドデータオペランド820の異なる64ビットデータ要素にそれぞれ格納される3Dモートン座標(m)を、対応する3つの3D座標(x、y、及びz)に変換する3Dモートン座標変換オペレーション852の例示的な実施形態を示すブロック図であり、対応する3つの3D座標は、単一の結果パックドデータオペランド848の対応する64ビットデータ要素の異なる連続したビット部分にそれぞれ格納される。このオペレーションは、3つの3D座標命令への3Dモートン座標変換に関する例示的な実施形態に応じて実行されてよい。
図8のオペレーションは図7のオペレーションとある程度の類似性を有するが、64ビットデータ要素と、それに対応してより広い3Dモートン座標及び3D座標とが用いられているという点で主に異なる。説明をあいまいにしないように、図8のオペレーションについて異なる特性及び/又は追加の特性を主に説明し、図7のオペレーションに関する任意に類似又は共通した特性及び詳細を全て繰り返すことはしない。しかし、図7のオペレーションについて前述した特性及び詳細は、変形例及び代替例を含めて、別段の定めがない限り、又は別の方法で明らかに識別できない限り、図8のオペレーションに任意で適用されてもよいことが理解されるべきである。
前述したように、命令は、ソースパックドデータオペランド820を指定してよく、又は別の方法でそれを示してもよい。この実施形態では、3Dモートン座標のそれぞれは、ソースパックドデータオペランドの異なる64ビットデータ要素に格納されている。特定の例示された実施形態において、ソースパックドデータオペランドは、8つの64ビットデータ要素、及び/又は8つの3Dモートン座標(m1からm8)を有する512ビットのソースパックドデータオペランドであるが、本発明の範囲はそのように限定されてはいない。他の実施形態では、ソースパックドデータオペランドは512ビットより広くても、それより狭くてもよく(例えば、128ビット、256ビット、1024ビットなど)、より少ない又はより多いデータ要素及び/又は3Dモートン座標を有してもよい。
この例示的な実施形態では、単一の結果パックドデータオペランド848が(例えば、実行ユニット816によって)生成され、命令に応答して格納されてよい。結果パックドデータオペランドは3つの3D座標からなる複数のセットを含み、それらのセットはソースパックドデータオペランドの同じ数の3Dモートン座標から生成又は変換される。ソースパックドデータオペランドの3Dモートン座標のそれぞれは、(例えば、オペランド内の同じ相対ビット位置にある)結果パックドデータオペランドの3つの3D座標からなる別の対応するセットに対応し、またそれに変換されてよい。例えば、ソースパックドデータオペランドの最下位(右端)64ビットデータ要素にある3Dモートン座標(m1)は、結果パックドデータオペランドの最下位64ビットデータ要素にある3つの座標(x1、y1、z1)からなるセットに変換されてよい。他の3Dモートン座標は、結果パックドデータオペランドの異なるデータ要素にそれぞれ格納された3つの3D座標からなる対応するセットに同様に又は類似して変換されてよい。
前述したように、3つの3D座標からなるセットのそれぞれは、対応する3Dモートン座標のビットに、固定した3通りのビット単位のデインターリーブを実行して、3つの3D座標のうち異なる1つにそれぞれ対応する3つの連続したビットストリングにすることで、対応する3Dモートン座標から生成されてよい。示された例示的な実施形態では、3Dモートン座標(m)はそれぞれ63ビットであり、対応する3つの3D座標(x、y、及びz)の各々はそれぞれ21ビットであるが、本発明の範囲はそのように限定されてはいない。他の実施形態において、結果パックドデータオペランドの3つの3D座標のそれぞれは、12ビットから21ビット、又は15ビットから21ビット、又は18ビットから21ビットの範囲をとる同じ数のビットで表されてよく、3Dモートン座標のそれぞれは、その数のビットの3倍になり得る。
64ビットソースデータ要素(SRC1)に格納された所定の3Dモートン座標(例えば、m1)を対応する3つの21ビット3D座標(x1、y1、z1)に変換し、それぞれが単一の結果パックドデータオペランドの単一の結果データ要素(RES1)の異なる連続したビット部分に格納されるオペレーションが、以下のように表され得る。ここで、「0:60:3」の中の「3」は、3ビットごとにビットを飛び越していくことを表す。
図9は、モートン座標変換命令の実施形態を実行するよう動作可能な適切なプロセッサについての、より詳細な例示的な実施形態のブロック図である。プロセッサはコア980を含む。プロセッサは複数のコア(例えば、少なくとも2つ、少なくとも4つ、少なくとも8つ、少なくとも30個など)を任意で有してよい。場合によっては、全てのコアが、示されるコアと同じであってよく、又は他の場合には、複数のコアの一部が異なっていてもよい(例えば、異なる構成要素又は命令セットを有してもよい)。場合によっては、全てのコアが、本明細書に開示されるモートン座標変換を実行できてよく、又は他の場合には、複数のコアの一部だけがそうであってもよい。コア980は、プログラムフローの分岐を予測する分岐予測ユニット981を含む。分岐予測ユニットは、命令プリフェッチユニット982に結合されている。命令プリフェッチユニットは、外部メモリから、それに結合されたメモリユニット989を通じて、モートン座標変換命令を含む命令をプリフェッチしてよく、又は別の方法でその命令を受信してもよい。レベル1(L1)命令キャッシュが命令プリフェッチユニットに結合されている。L1命令キャッシュは、プリフェッチ済みの、又は別の方法で受信済みのモートン座標変換命令を含む命令をキャッシュしてよく、又は別の方法で格納してもよい。命令フェッチユニット984が、L1命令キャッシュ及び復号ユニット914に結合されている。命令フェッチユニットは、モートン座標変換命令を含む命令をL1命令キャッシュからフェッチし、又は別の方法でそれを受信し、モートン座標変換命令を含む命令を復号ユニットに提供してよい。復号ユニットは、本明細書で説明される他の復号ユニットと同じであっても類似していてもよい。
プロセッサは、1つ又は複数のレジスタファイルユニット918を含む。一般的に、レジスタファイルユニットは様々な異なるタイプのレジスタを含んでよく、例えば、パックドデータレジスタ、汎用レジスタ、ステータスレジスタ又はフラグレジスタ、制御レジスタ又は構成レジスタなどがある。アウトオブオーダ(OOO)実行を用いる実施形態では、プロセッサはまた、リソースを割り当ててレジスタ(例えば、モートン座標変換命令に関連するパックドデータレジスタ)上でレジスタリネーミングを実行するために、レジスタファイルユニットに結合されたレジスタリネーム及び/又はアロケータユニットを任意で含んでよい。また、OOO実行の場合には、プロセッサは、復号ユニットと、リネーム/アロケーションユニットと、1つ又は複数の実行ユニット916とに結合された1つ又は複数のスケジューラユニット986を任意で含んでよい。スケジューラユニットは、実行ユニット上のオペレーションをスケジューリングしてよい。複数の実行ユニットのうち少なくとも1つは、本明細書で開示される他の実行ユニットと同じであっても類似していてもよい。一般的に、プロセッサは複数の異なるタイプの実行ユニットを任意で有してよく、例えば、整数実行ユニット、浮動小数点実行ユニット、ベクトル実行ユニット、1つ又は複数のメモリアクセスユニット987、又はバスインタフェースユニットなどがある。アウトオブオーダ(OOO)実行を用いる実施形態では、プロセッサはまた、命令をリタイア又はコミットするために、レジスタファイルユニットとリネーム/アロケータユニット985とに結合されたリタイアメント又はコミットユニット991を任意で含んでよい。プロセッサは、モートン座標変換命令を含む命令のデータ要素及び/又はオペランドを含んだデータをキャッシュする、又は別の方法でこれを格納するL1データキャッシュユニット974を含んでよい。レベル2(L2)キャッシュユニット990が任意で含まれてよく、また複数のコアによって任意で共有されてもよい。L2キャッシュユニットは、データと、モートン座標変換命令を含む命令とを格納してよい。プロセッサはまた、アドレス変換データをキャッシュするために、1つ又は複数の変換ルックアサイドバッファ(不図示)を任意で含んでよい。アウトオブオーダ(OOO)実行を用いる実施形態では、プロセッサはまた、実行結果をリオーダするためのリオーダバッファ(不図示)、及び/又は、1つ又は複数のリザベーションステーション(不図示)を任意で含んでよい。プロセッサの様々な実施形態は、これらの構成要素の一部又は全てからなる様々な異なる組み合わせ及び構成を含んでよい。これらの実施形態は、任意の既知のそのような組み合わせ又は構成に限定されてはいない。
図10は、3Dモートン座標変換命令1012の実施形態のブロック図である。命令は、オペレーションコードつまりオペコード1080を含む。オペコードは、(例えば、3Dモートン座標を3D座標に変換するために)実行される命令及び/又はオペレーションを特定するよう動作可能な複数のビット、あるいは1つ又は複数のフィールドを表してよい。
命令はまた、ソースパックドデータオペランドを格納するのに用いられるレジスタ、メモリ位置、又は他の記憶位置を明示的に指定するソースオペランド指定子1082を含む。命令はまた、第1の結果パックドデータオペランドを格納するレジスタ又は他の記憶位置を明示的に指定する第1のデスティネーション記憶位置指定子1084と、任意の第2の結果パックドデータオペランドを格納するレジスタ又は他の記憶位置を明示的に指定する任意の第2のデスティネーション記憶位置指定子1086と、任意の第3の結果パックドデータオペランドを格納するレジスタ又は他の記憶位置を明示的に指定する任意の第3のデスティネーション記憶位置指定子1088とを含む。例として、これらの指定子のそれぞれは、レジスタ、メモリ位置、又は他の記憶位置のアドレスを明示的に指定する複数のビットのセットあるいは1つ又は複数のフィールドを含んでよい。あるいは前述したように、単一の結果パックドデータオペランド、及び対応する単一のデスティネーション記憶位置が必要に応じて任意で用いられてもよい。さらに、これらの記憶位置のそれぞれに明示的な指定子を有する命令の代わりに、命令は、ソースオペランド及びデスティネーション記憶位置のうち1つ又は複数に対し、1つ又は複数の暗黙的な記憶位置(例えば、命令のオペコードに対して暗黙的)を任意で有してよい。例えば、所定の固定レジスタが明示的に指定される必要がないように、ソースオペランド、又は複数のデスティネーション記憶位置の1つに所定の固定レジスタを用いることは、命令のオペコードに対して暗黙的であってよい。別の例として、ソースオペランド、及び複数の結果オペランドのうち1つを格納するデスティネーション記憶位置の両方(例えば、暗黙的なソース/デスティネーションレジスタ)に、(例えば、命令によって一度は明示的に指定された)同じレジスタ又は他の記憶位置を再利用することは、暗黙的であってよい。実施形態によっては、命令は他のフィールド又はビットを有してよく、例えば、32ビット又64ビットの実行状態又はモードを示すビットなどがある。これは、適切な3Dモートン座標変換命令の単に1つの説明のための実例であることが、理解されるべきである。代替的な実施形態は、示されたフィールド/指定子のサブセットを含んでよく、追加のフィールド/指定子を加えてもよく、特定のフィールド/指定子を重ねてもよいなどである。さらに、フィールド/指定子の示された順序及び配列は必須ではない。フィールド/指定子は様々に再配列されてもよい。さらに、フィールド/指定子は、連続したビット配列を含む必要はなく、むしろ、非連続なビット又は分離したビットを含んでもよい。実施形態によっては、命令フォーマットは、本明細書の他の箇所に開示されるVEX又はEVEX符号化、又は命令フォーマット、及び属性を有してよいが、本発明の範囲はそのように限定されてはいない。VEX及びEVEX符号化、並びにフォーマットに関するさらなる詳細が以下でさらに説明される。
命令セットは、1つ又は複数の命令フォーマットを含む。所定の命令フォーマットは、とりわけ、実行されるオペレーション(オペコード)及び当該オペレーションが実行されるオペランドを指定すべく、様々なフィールド(ビット数、ビット位置)を規定する。一部の命令フォーマットは、命令テンプレート(又はサブフォーマット)の定義によってさらに分類される。例えば、所定の命令フォーマットの命令テンプレートは、命令フォーマットの複数のフィールドからなる異なるサブセットを有するよう定義されてよく(含まれるフィールドは典型的には同じ順位にあるが、含まれるフィールドがより少ないことから、少なくともいくつかは異なるビット位置を有する)、及び/又は、異なるように解釈された所定のフィールドを有するよう定義されてもよい。したがって、ISAの各命令は、所定の命令フォーマットを用いて(且つ、定義された場合には、その命令フォーマットの命令テンプレートのうち所定の1つに)表され、オペレーション及びオペランドを指定するフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと、そのオペコードを指定するためのオペコードフィールド、及びオペランド(ソース1/デスティネーション及びソース2)を選択するためのオペランドフィールドを含む命令フォーマットとを有し、このADD命令が命令ストリーム内に出現すると、オペランドフィールド内に、特定のオペランドを選択する特定のコンテンツを有することになる。アドバンスト・ベクトル・エクステンション(AVX)(AVX1及びAVX2)と呼ばれ、ベクトル拡張(VEX)コード体系を用いるSIMD拡張のセットが公表及び/又は公開されている(例えば、Intel(登録商標)64及びIA−32アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル(2011年10月)を参照、並びにIntel(登録商標)アドバンスト・ベクトル・エクステンション・プログラミング・レファレンス(2011年6月)を参照)。
[例示的な命令フォーマット]
本明細書に説明される命令の実施形態は、異なるフォーマットで具現化され得る。さらに、例示的なシステム、アーキテクチャ、及びパイプラインが以下に詳述される。命令の実施形態は、このようなシステム、アーキテクチャ、及びパイプライン上で実行されてよいが、詳述されているものに限定されてはいない。
[VEX命令フォーマット]
VEX符号化は、命令が2つより多くのオペランドを有することを可能にし、SIMDベクトルレジスタが128ビットより長くなることを可能にする。VEXプリフィックスを使用することで、3つ(又はそれより多く)のオペランド構文が提供される。例えば、直前の2つのオペランド命令が、A=A+Bなどの演算を実行し、これによってソースオペランドが置き換えられる。VEXプリフィックスを用いることで、オペランドはA=B+Cなどの非破壊演算を実行することが可能となる。
図11Aは、VEXプリフィックス1102、リアルオペコードフィールド1130、Mod R/Mバイト1140、SIBバイト1150、変位フィールド1162、及びIMM8 1172を含む例示的なAVX命令フォーマットを示す。図11Bは、図11Aのどのフィールドが、フルオペコードフィールド1174及びベースオペレーションフィールド1142を構成するかを示す。図11Cは、図11Aのどのフィールドが、レジスタインデックスフィールド1144を構成するかを示す。
VEXプリフィックス(バイト0−2)1102は、3バイト形式で符号化される。第1のバイトは、フォーマットフィールド1140(VEXバイト0、ビット[7:0])であり、これは、明示的なC4バイト値(C4命令フォーマットを識別するのに用いられる固有値)を含む。第2〜第3のバイト(VEXバイト1−2)は、特定の機能を提供する複数のビットフィールドを含む。具体的には、REXフィールド1105(VEXバイト1、ビット[7−5])は、VEX.Rビットフィールド(VEXバイト1、ビット[7]−R)、VEX.Xビットフィールド(VEXバイト1、ビット[6]−X)、及びVEX.Bビットフィールド(VEXバイト1、ビット[5]−B)から構成される。命令の他のフィールドは、Rrrr、Xxxx、及びBbbbがVEX.R、VEX.X、及びVEX.Bを加えることで形成され得るように、当技術分野において知られるレジスタインデックスの下位3ビット(rrr、xxx、及びbbb)を符号化する。オペコードマップフィールド1115(VEXバイト1、ビット[4:0]−mmmmm)は、暗黙の先頭オペコードバイトを符号化するコンテンツを含む。Wフィールド1164(VEXバイト2、ビット[7]−W)は、VEX.Wの表記で表され、命令に応じて異なる機能を提供する。VEX.vvvv1120(EVEXバイト2、ビット[6:3]−vvvv)の役割は、以下のことを含んでよい。1)VEX.vvvvは、第1のソースレジスタオペランドを符号化し、反転(1の補数)形式で指定され、2又はそれより多くのソースオペランドを有する命令に有効である。2)VEX.vvvvは、デスティネーションレジスタオペランドを符号化し、特定のベクトルシフトについて1の補数形式で指定される。又は、3)VEX.vvvvは、いかなるオペランドも符号化せず、フィールドは予約され1111bを含むはずである。VEX.L1168サイズフィールド(VEXバイト2、ビット[2]−L)=0の場合、このフィールドは128ビットベクトルを示し、VEX.L=1の場合は256ビットベクトルを示す。プリフィックス符号化フィールド1125(EVEXバイト2、ビット[1:0]−pp)は、ベースオペレーションフィールドに追加ビットを提供する。
リアルオペコードフィールド1130(バイト3)はまた、オペコードバイトとして知られる。オペコードの一部はこのフィールドで指定される。
MOD R/Mフィールド1140(バイト4)は、MODフィールド1142(ビット[7−6])、Regフィールド1144(ビット[5−3])及びR/Mフィールド1146(ビット[2−0])を含む。Regフィールド1144の役割は、以下のことを含んでよい。つまり、デスティネーションレジスタオペランド又はソースレジスタオペランド(Rrrrのrrr)を符号化する、又はオペコード拡張として扱われて、いかなる命令オペランドを符号化するのにも用いられない。R/Mフィールド1146の役割は、以下のことを含んでよい。つまり、メモリアドレスを参照する命令オペランドを符号化する、あるいはデスティネーションレジスタオペランド又はソースレジスタオペランドを符号化する。
スケール・インデックス・ベース(SIB):スケールフィールド1150(バイト5)のコンテンツはSS 1152(ビット[7−6])を含み、これはメモリアドレス生成に用いられる。SIB.xxx 1154(ビット[5−3])及びSIB.bbb 1156(ビット[2−0])のコンテンツは、レジスタインデックスXxxx及びBbbbに関して前述されている。
変位フィールド1162及び即値フィールド(IMM8)1172は、アドレスデータを含む。
[汎用ベクトル対応命令フォーマット]
ベクトル対応命令フォーマットは、ベクトル命令に適した命令フォーマットである(例えば、ベクトル演算に固有の特定のフィールドが存在する)。ベクトル演算及びスカラ演算の両方がベクトル対応命令フォーマットを通じてサポートされる実施形態が説明されているが、代替的な実施形態はベクトル対応命令フォーマットを通じてベクトル演算のみを用いる。
図12A及び図12Bは、本発明の実施形態に従って、汎用ベクトル対応命令フォーマット及びその命令テンプレートを示すブロック図である。図12Aは、本発明の実施形態に従って、汎用ベクトル対応命令フォーマット及びそのクラスA命令テンプレートを示すブロック図である。図12Bは、本発明の実施形態に従って、汎用ベクトル対応命令フォーマット及びそのクラスB命令テンプレートを示すブロック図である。具体的には、汎用ベクトル対応命令フォーマット1200に対してクラスA命令テンプレート及びクラスB命令テンプレートが定義され、その両方が非メモリアクセス1205命令テンプレート及びメモリアクセス1220命令テンプレートを含む。ベクトル対応命令フォーマットとの関連で、汎用という用語は、いかなる特定の命令セットにも関係していない命令フォーマットを意味する。
本発明の実施形態が説明されるが、ここでベクトル対応命令フォーマットは以下のものをサポートする。つまり、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バイトベクトルオペランド)をサポートしてよい。
図12AのクラスA命令テンプレートは以下のものを含む。つまり、1)非メモリアクセス1205の命令テンプレート内に示されている、非メモリアクセス・フルラウンド制御型オペレーション1210の命令テンプレート、及び非メモリアクセス・データ変換型オペレーション1215の命令テンプレート、並びに2)メモリアクセス1220の命令テンプレート内に示されている、メモリアクセス・一時的1225の命令テンプレート、及びメモリアクセス・非一時的1230の命令テンプレートである。図12BのクラスB命令テンプレートは以下のものを含む。つまり、1)非メモリアクセス1205の命令テンプレート内に示されている、非メモリアクセス・書き込みマスク制御・部分ラウンド制御型オペレーション1212の命令テンプレート、及び非メモリアクセス・書き込みマスク制御・vsize型オペレーション1217の命令テンプレート、並びに2)メモリアクセス1220命令テンプレート内に示されている、メモリアクセス・書き込みマスク制御1227の命令テンプレートである。
汎用ベクトル対応命令フォーマット1200は、図12A〜12Bに示される順で以下に列挙する次のフィールドを含む。
フォーマットフィールド1240:このフィールドの特定値(命令フォーマット識別子の値)は、ベクトル対応命令フォーマットを一意に特定し、したがって、命令ストリーム内のベクトル対応命令フォーマットにおける命令の出現を特定する。そのため、このフィールドは、汎用ベクトル対応命令フォーマットのみを有する命令セットには必要とされないという点で、任意なものである。
ベースオペレーションフィールド1242:このコンテンツは、異なるベースオペレーションを識別する。
レジスタインデックスフィールド1244:このコンテンツは、ソース及びデスティネーションオペランドの位置を、それらがレジスタ内にあってもメモリ内にあっても、直接又はアドレス生成を通じて指定する。これらは、PxQ(例えば32x512、16x128、32x1024、64x1024)レジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。1つの実施形態において、Nは3つのソース及び1つのデスティネーションレジスタまでであってよいが、代替的な実施形態はより多くの又はより少ないソース及びデスティネーションレジスタをサポートしてもよい(例えば、2つのソース(このうち1つはデスティネーションの役割も果たす)までをサポートしてよく、3つのソース(このうち1つはデスティネーションの役割も果たす)までをサポートしてもよく、2つのソース及び1つのデスティネーションまでをサポートしてもよい)。
修飾子フィールド1246:このコンテンツは、汎用ベクトル命令フォーマットにおいてメモリアクセスを指定する命令の出現をそうでない命令の出現と識別する。すなわち、非メモリアクセス1205の命令テンプレートとメモリアクセス1220の命令テンプレートとを識別する。メモリアクセスオペレーションは、メモリ階層を読み出す、及び/又はメモリ階層へ書き込む(場合によっては、レジスタ内の値を用いてソースアドレス及び/又はデスティネーションアドレスを指定する)が、非メモリアクセスオペレーションはこうしたことを行わない(例えば、ソース及びデスティネーションはレジスタである)。1つの実施形態において、このフィールドはまた、メモリアドレス計算を実行するための3つの異なる方法から選択するが、代替的な実施形態は、メモリアドレス計算を実行するためのより多くの方法、より少ない方法、又は異なる方法をサポートしてもよい。
拡大オペレーションフィールド1250:このコンテンツは、様々な異なるオペレーションのどれがベースオペレーションに加えて実行されるかを識別する。このフィールドは、コンテキスト固有のものである。本発明の1つの実施形態において、このフィールドは、クラスフィールド1268、アルファフィールド1252、及びベータフィールド1254に分割される。拡大オペレーションフィールド1250は、共通グループのオペレーションが2つ、3つ、又は4つの命令ではなく、単一の命令で実行されることを可能にする。
スケールフィールド1260:このコンテンツは、メモリアドレス生成のために(例えば、2[スケール]×[インデックス]+[ベース]を用いるアドレス生成のために)インデックスフィールドのコンテンツをスケーリングすることを可能にする。
変位フィールド1262A:このコンテンツは、(例えば、2[スケール]×[インデックス]+[ベース]+[変位]を用いるアドレス生成のために)メモリアドレス生成の一部として用いられる。
変位係数フィールド1262B(なお、変位フィールド1262Aを変位係数フィールド1262Bのすぐ上に並置することで、一方又は他方が使用されていることが示される点に注意):このコンテンツは、アドレス生成の一部として用いられ、これは、メモリアクセスのサイズ(N)によってスケーリングされる変位係数を指定する。ここで、Nは、(例えば、2[スケール]×[インデックス]+[ベース]+[スケーリングされた変位]を用いるアドレス生成のための)メモリアクセス内のバイト数である。冗長下位ビットは無視され、したがって、有効アドレスの計算に用いられる最終的な変位を生成するために、変位係数フィールドのコンテンツはメモリオペランドの合計サイズ(N)を乗じる。Nの値は、フルオペコードフィールド1274(本明細書に後述)及びデータ操作フィールド1254Cに基づき、プロセッサハードウェアによって実行時に決定される。変位フィールド1262A及び変位係数フィールド1262Bは、これらが非メモリアクセス1205の命令テンプレートには用いられず、及び/又は異なる実施形態では2つのうち一方のみを実装するかどちらも実装しない場合があるという点で任意である。
データ要素幅フィールド1264:このコンテンツは、(実施形態によっては全ての命令に、他の実施形態ではいくつかの命令だけに)複数のデータ要素幅のどれが用いられるべきかを識別する。このフィールドは、1つのデータ要素幅のみがサポートされる場合、及び/又は複数のデータ要素幅がオペコードの何らかの態様を用いてサポートされる場合は、必要とされないという点で任意である。
書き込みマスクフィールド1270:このコンテンツは、データ要素位置に基づいて、デスティネーションベクトルオペランドのそのデータ要素位置がベースオペレーション及び拡大オペレーションの結果を反映するかどうかを制御する。クラスA命令テンプレートは、マージ処理・書き込みマスク処理をサポートし、クラスB命令テンプレートは、マージ・書き込みマスク処理、及びゼロ設定・書き込みマスク処理の両方をサポートする。マージする場合、ベクトルマスクは、(ベースオペレーション及び拡大オペレーションによって指定される)任意のオペレーションを実行中に、デスティネーションにおける任意のセットの要素が更新から保護されることを可能とし、他の1つの実施形態では、対応するマスクビットが0である場合、デスティネーションの各要素の古い値を保護する。これに対して、ゼロ設定する場合、ベクトルマスクは、デスティネーションにおける任意のセットの要素が(ベースオペレーション及び拡大オペレーションによって指定される)任意のオペレーションの実行中にゼロ設定されることを可能とし、1つの実施形態では、対応するマスクビットの値が0である場合、デスティネーションの要素は0に設定される。この機能のサブセットは、実行されているオペレーションのベクトル長(すなわち、変更される要素の最初から最後の要素までの長さ)を制御する能力である。しかし、変更される要素は連続的である必要はない。したがって、書き込みマスクフィールド1270は、ロード演算、ストア演算、算術演算、論理演算などを含む一部のベクトル演算を可能にする。書き込みマスクフィールド1270のコンテンツが用いられる書き込みマスクを含む複数の書き込みマスクレジスタのうち1つを選択する(したがって、書き込みマスクフィールド1270のコンテンツが実行されるマスク処理を間接的に特定する)本発明の実施形態が説明されるが、代替的な実施形態では代わりに又は追加的に、書き込みマスクフィールド1270のコンテンツが、実行されるマスク処理を直接指定することを可能にする。
即値フィールド1272:このコンテンツは、即値の指定を可能とする。このフィールドは、即値をサポートしない汎用ベクトル対応フォーマットの実装には存在せず、また即値を用いない命令には存在しないという点で任意である。
クラスフィールド1268:このコンテンツは、複数の異なるクラスの命令を識別する。図12A〜図12Bに関連して、このフィールドのコンテンツは、クラスA命令及びクラスB命令から選択する。図12A〜図12Bでは、角が丸い四角が、フィールド内に特定値が存在することを示すのに用いられている(例えば、図12A〜図12Bにそれぞれあるクラスフィールド1268用のクラスA 1268A、及びクラスB 1268B)。
[クラスAの命令テンプレート]
クラスAの非メモリアクセス1205命令テンプレートの場合、アルファフィールド1252はRSフィールド1252Aと解釈され、そのコンテンツは、異なる拡大オペレーションタイプのどれが実行されるべきかを識別し(例えば、非メモリアクセス・ラウンド型オペレーション1210及び非メモリアクセス・データ変換型オペレーション1215の命令テンプレートに対し、ラウンド1252A.1及びデータ変換1252A.2がそれぞれ指定される)、ベータフィールド1254は、指定されるタイプのオペレーションのどれが実行されるべきかを識別する。非メモリアクセス1205の命令テンプレートには、スケールフィールド1260、変位フィールド1262A、及び変位係数フィールド1262Bが存在しない。
[非メモリアクセス命令テンプレート−フルラウンド制御型オペレーション]
非メモリアクセスフルラウンド制御型オペレーション1210の命令テンプレートにおいて、ベータフィールド1254はラウンド制御フィールド1254Aと解釈され、そのコンテンツは静的なラウンド処理を提供する。説明された本発明の実施形態では、ラウンド制御フィールド1254Aは、全浮動小数点例外抑制(SAE)フィールド1256及びラウンド演算制御フィールド1258を含むが、代替的な実施形態では、これらのコンセプトを両方ともサポートしてよく、それらを同じフィールド内に符号化してよく、あるいはこれらのコンセプト/フィールドの一方又は他方のみを有してもよい(例えば、ラウンド演算制御フィールド1258のみを有してよい)。
SAEフィールド1256:このコンテンツは、例外イベント報告を無効化するかどうか識別する。SAEフィールド1256のコンテンツが、抑制が可能であることを示す場合、所定の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも呼び出さない。
ラウンド演算制御フィールド1258:このコンテンツは、ラウンド演算のグループのどれを実行すべきかを識別する(例えば、切り上げ、切り捨て、0への丸め、及び最近接丸め)。したがって、ラウンド演算制御フィールド1258は、命令に基づいてラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む本発明の1つの実施形態において、ラウンド演算制御フィールド1250のコンテンツは、当該レジスタの値をオーバーライドする。
[非メモリアクセス命令テンプレート−データ変換型オペレーション]
非メモリアクセスデータ変換型オペレーション1215の命令テンプレートでは、ベータフィールド1254はデータ変換フィールド1254Bとして解釈され、そのコンテンツは、複数のデータ変換のどれが実行されるべきかを識別する(例えば、データ変換なし、スウィズル、ブロードキャスト)。
クラスAのメモリアクセス1220の命令テンプレートの場合、アルファフィールド1252はエビクションヒントフィールド1252Bと解釈され、そのコンテンツは、エビクションヒントのどれが用いられるべきかを識別する(図12Aにおいて、一時的1252B.1及び非一時的1252B.2はそれぞれ、メモリアクセス・一時的1225の命令テンプレート及びメモリアクセス・非一時的1230の命令テンプレートに指定される)。ベータフィールド1254はデータ操作フィールド1254Cと解釈され、そのコンテンツは、(プリミティブとしても知られる)複数のデータ操作オペレーションのどれが実行されるべきかを識別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、デスティネーションのダウンコンバージョン)。メモリアクセス1220の命令テンプレートはスケールフィールド1260を含み、任意で変位フィールド1262A又は変位係数フィールド1262Bを含む。
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロード及びメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令はデータ要素単位の形式でデータをメモリから転送し、データをメモリに転送する。実際に転送される要素は、書き込みマスクとして選択されるベクトルマスクのコンテンツによって指示される。
[メモリアクセス命令テンプレート−一時的]
一時的データは、すぐに再利用されてキャッシュによる恩恵を受ける可能性の高いデータである。しかし、これはヒントであり、異なるプロセッサが異なる方法でヒントを実行してよく、その方法には、ヒントを完全に無視することも含まれる。
[メモリアクセス命令テンプレート−非一時的]
非一時的データは、すぐに再利用されてレベル1キャッシュにキャッシュすることから恩恵を受ける可能性が低いデータであり、エビクションが優先されなければならない。しかし、これはヒントであり、異なるプロセッサが異なる方法でヒントを実行してよく、その方法には、ヒントを完全に無視することも含まれる。
[クラスBの命令テンプレート]
クラスBの命令テンプレートの場合には、アルファフィールド1252は書き込みマスク制御(Z)フィールド1252Cと解釈され、そのコンテンツは、書き込みマスクフィールド1270によって制御される書き込みマスク処理がマージ処理であるべきか、ゼロ設定処理であるべきかを識別する。
クラスBの非メモリアクセス1205の命令テンプレートの場合、ベータフィールド1254の一部はRLフィールド1257Aと解釈され、そのコンテンツは、異なる拡大オペレーションタイプのどれが実行されるべきかを識別し(例えば、非メモリアクセス・書き込みマスク制御・部分ラウンド制御型オペレーション1212の命令テンプレート、及び非メモリアクセス・書き込みマスク制御・VSIZE型オペレーション1217の命令テンプレートに対し、ラウンド1257A.1及びベクトル長(VSIZE)1257A.2がそれぞれ指定される)、ベータフィールド1254の残りは、指定されるタイプのオペレーションのどれが実行されるべきかを識別する。非メモリアクセス1205の命令テンプレートには、スケールフィールド1260、変位フィールド1262A、及び変位係数フィールド1262Bが存在しない。
非メモリアクセス・書き込みマスク制御・部分ラウンド制御型オペレーション1212の命令テンプレートでは、ベータフィールド1254の残りのものはラウンド演算フィールド1259Aと解釈され、例外イベント報告は無効にされる(所定の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも呼び出さない)。
ラウンド演算制御フィールド1259A:ラウンド演算制御フィールド1258と全く同じように、このコンテンツは、ラウンド演算のグループのどれを実行すべきかを識別する(例えば、切り上げ、切り捨て、0への丸め、及び最近接丸め)。したがって、ラウンド演算制御フィールド1259Aは、命令に基づいてラウンドモードの変更を可能にする。プロセッサがラウンドモードを指定する制御レジスタを含む本発明の1つの実施形態において、ラウンド演算制御フィールド1250のコンテンツは、当該レジスタの値をオーバーライドする。
非メモリアクセス・書き込みマスク制御・VSIZE型オペレーション1217の命令テンプレートでは、ベータフィールド1254の残りのものはベクトル長フィールド1259Bと解釈され、そのコンテンツは、複数のデータベクトル長のどれが実行されるべきかを識別する(例えば、128バイト、256バイト、又は512バイト)。
クラスBのメモリアクセス1220の命令テンプレートの場合には、ベータフィールド1254の一部はブロードキャストフィールド1257Bと解釈され、そのコンテンツは、ブロードキャスト型のデータ操作オペレーションが実行されるべきかどうかを識別し、ベータフィールド1254の残りはベクトル長フィールド1259Bと解釈される。メモリアクセス1220の命令テンプレートはスケールフィールド1260を含み、任意で変位フィールド1262A又は変位係数フィールド1262Bを含む。
汎用ベクトル対応命令フォーマット1200に関して、フォーマットフィールド1240、ベースオペレーションフィールド1242、及びデータ要素幅フィールド1264を含むフルオペコードフィールド1274が示されている。フルオペコードフィールド1274がこれらのフィールド全てを含む1つの実施形態が示されているが、これらを全てサポートしない実施形態では、フルオペコードフィールド1274は、これら全てのフィールドより少ないフィールドを含む。フルオペコードフィールド1274は、オペレーションコード(オペコード)を提供する。
拡大オペレーションフィールド1250、データ要素幅フィールド1264、及び書き込みマスクフィールド1270は、これらの機能が汎用ベクトル対応命令フォーマットの命令に基づいて指定されることを可能にする。
書き込みマスクフィールドとデータ要素幅フィールドの組み合わせは、それらが異なるデータ要素幅に基づいてマスクが適用されることを可能にするという点で、型付き命令を形成する。
クラスA及びクラスB内で見られる様々な命令テンプレートは、異なる状況において有益である。本発明の実施形態によっては、異なるプロセッサ又はプロセッサ内の異なるコアが、クラスAのみ、クラスBのみ、又は両方のクラスをサポートしてよい。例えば、汎用計算を対象とした高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよく、グラフィックス及び/又は科学的(スループット)計算を主に対象としたコアは、クラスAのみをサポートしてよく、両方を対象としたコアは、両方をサポートしてよい(もちろん、コアは、両方のクラスのテンプレート及び命令の何らかの組み合わせを有するが、両方のクラスの全てのテンプレート及び命令が本発明の範囲内にあるわけではない)。また、単一のプロセッサは複数のコアを含んでよく、その全てが同じクラスをサポートし、又はその異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックス及び汎用コアを有するプロセッサにおいて、グラフィックス及び/又は科学計算を主に対象とする複数のグラフィックスコアのうち1つがクラスAのみをサポートしてよく、複数の汎用コアのうち1つ又は複数が、クラスBのみをサポートする汎用計算を対象としたアウトオブオーダ実行及びレジスタリネーミングを有する高性能汎用コアであってもよい。別個のグラフィックスコアを持たない別のプロセッサは、クラスA及びクラスBの両方をサポートするもう1つの汎用インオーダ又はアウトオブオーダコアを含んでよい。もちろん、一方のクラスの特徴はまた、本発明の異なる実施形態において他方のクラスに実装されてよい。高水準言語で書かれたプログラムは、以下の形式を含む様々な異なる実行可能形式に変換される(例えば、ジャスト・イン・タイム方式でコンパイルされる、又は静的にコンパイルされる)であろう。例えば、1)実行用ターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、あるいは2)全クラスの命令の様々な組み合わせを用いて書かれた代替ルーチンを有し、プロセッサによってサポートされる命令に基づいて、実行するルーチンを選択する制御フローコードを有する形式であって、当該プロセッサが当該コードを現時点で実行している、形式である。
[例示的な特定ベクトル対応命令フォーマット]
図13A〜図13Dは、本発明の実施形態に従って例示的な特定ベクトル対応命令フォーマットを示すブロック図である。図13Aは、特定ベクトル対応命令フォーマット1300を示し、これは位置、サイズ、解釈、及びフィールドの順序、並びにこれらのフィールドのいくつかに対する値を指定するという点で特定のものである。特定ベクトル対応命令フォーマット1300は、x86命令セットを拡張するのに用いられてよく、したがって、フィールドのいくつかは、既存のx86命令セット及びその拡張版(例えば、AVX)に用いられるものと同様又は同じである。このフォーマットは、拡張された既存のx86命令セットのプリフィックス符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、及び即値フィールドと一致した状態のままである。図13Aのフィールドがマッピングされる図12A〜図12Bのフィールドが示されている。
本発明の実施形態は、例示を目的として汎用ベクトル対応命令フォーマット1200との関連で特定ベクトル対応命令フォーマット1300に関連して説明されるが、本発明は、特許請求される場合を除いて、特定ベクトル対応命令フォーマット1300に限定されないことが理解されるべきである。例えば、汎用ベクトル対応命令フォーマット1200では、様々なフィールドについて様々な可能なサイズを検討するが、特定ベクトル対応命令フォーマット1300は、特定のサイズのフィールドを有するものとして示されている。具体的な例として、データ要素幅フィールド1264が、特定ベクトル対応命令フォーマット1300内の1ビットフィールドとして示されているが、本発明はそのように限定されてはいない(すなわち、汎用ベクトル対応命令フォーマット1200では、他のサイズのデータ要素幅フィールド1264を検討する)。
汎用ベクトル対応命令フォーマット1200は、図13Aに示される順で以下に列挙される次のフィールドを含む。
EVEXプリフィックス(バイト0−3)1302:4バイト形式で符号化される。
フォーマットフィールド1240(EVEXバイト0、ビット[7:0]:1番目のバイト(EVEXバイト0)はフォーマットフィールド1240であり、ここには0x62(本発明の1つの実施形態において、ベクトル対応命令フォーマットを識別するのに用いられる固有値)が入っている。
2〜4番目のバイト(EVEXバイト1−3)は、特定の機能を提供する複数のビットフィールドを含む。
REXフィールド1305(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は1111Bとして符号化され、ZMM15は0000Bとして符号化される。当技術分野において知られているように、命令の他のフィールドは、レジスタインデックスの下位3ビット(rrr、xxx、及びbbb)を符号化し、EVEX.R、EVEX.X、及びEVEX.Bを加えることで、Rrrr、Xxxx、Bbbbが形成され得る。
REX´フィールド1210:これはREX´フィールド1210の1番目の部分であり、拡張された32個のレジスタセットの上位16又は下位16を符号化するのに用いられるEVEX.R´ビットフィールド(EVEXバイト1、ビット[4]−R´)である。本発明の1つの実施形態において、このビットは、以下に示されるように他のビットと共にビット反転フォーマットで格納され、(周知のx86の32ビットモードにおいて)BOUND命令と識別する。BOUND命令のリアルオペコードバイトは62であるが、(後述の)MOD R/MフィールドにおいてMODフィールドの値11を受け付けない。本発明の代替的な実施形態は、このビット及び他の以下に示されるビットを反転フォーマットで格納しない。1の値が、下位16個のレジスタを符号化するのに用いられる。換言すると、EVEX.R´、EVEX.R、及び他のフィールドの他のRRRを組み合わせことで、R´Rrrrが形成される。
オペコードマップフィールド1315(EVEXバイト1、ビット[3:0 ]−mmmm):このコンテンツは、暗黙の先頭オペコードバイト(0F、0F38、又は0F3)を符号化する。
データ要素幅フィールド1264(EVEXバイト2、ビット[7]−W):EVEX.Wという表記によって表される。EVEX.Wは、データタイプ(32ビットデータ要素又は64ビットデータ要素)の粒度(サイズ)を規定するのに用いられる。
EVEX.vvvv1320(EVEXバイト2、ビット[6:3]−vvvv):EVEX.vvvvの役割は以下のことを含み得る。1)EVEX.vvvvは、第1のソースレジスタオペランドを符号化し、反転(1の補数)形式で指定され、2又はそれより多くのソースオペランドを有する命令に有効である。2)EVEX.vvvvは、デスティネーションレジスタオペランドを符号化し、特定のベクトルシフトについて1の補数形式で指定される。又は、3)EVEX.vvvvはいかなるオペランドも符号化せず、フィールドは予約され1111bを含むはずである。したがって、EVEX.vvvvフィールド1320は、反転(1の補数)形式で格納される第1のソースレジスタ指定子の下位ビット4つを符号化する。命令に応じて、追加の異なるEVEXビットフィールドが、指定子サイズを32個のレジスタに拡張するのに用いられる。
EVEX.Uクラスフィールド1268(EVEXバイト2、ビット[2]−U):EVEX.U=0の場合にクラスA又はEVEX.U0を示し、EVEX.U=1の場合にクラスB又はEVEX.U1を示す。
プリフィックス符号化フィールド1325(EVEXバイト2、ビット[1:0]−pp):ベースオペレーションフィールドに追加のビットを提供する。EVEXプリフィックスフォーマットのレガシSSE命令にサポートを提供することに加え、SIMDプリフィックスを圧縮するという利点も有する(SIMDプリフィックスを示すのに1バイトを必要とするのではなく、EVEXプリフィックスは2ビットしか必要としない)。1つの実施形態において、レガシフォーマット及びEVEXプリフィックスフォーマットの両方でSIMDプリフィックス(66H、F2H、F3H)を用いるレガシSSE命令をサポートすべく、このレガシSIMDプリフィックスはSIMDプリフィックス符号化フィールドに符号化され、実行時には、デコーダのPLAに提供される前にレガシSIMDプリフィックスに拡張される(そのため、PLAは、このレガシ命令のレガシフォーマットとEVEXフォーマットとの両方を変更せずに実行し得る)。より新たな命令がEVEXプリフィックス符号化フィールドのコンテンツをオペコード拡張として直接用いる場合があるが、特定の実施形態は一貫性のために同様の形式で拡張しても、このレガシSIMDプリフィックスによって指定される異なる目的を可能とする。代替的な実施形態は、2ビットSIMDプリフィックス符号化をサポートするようにPLAを再設計してよく、したがって拡張を必要としない。
アルファフィールド1252(EVEXバイト3、ビット[7]−EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control、及びEVEX.Nとしても知られ、αでも示される):前述したように、このフィールドはコンテキスト固有である。
ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2−0、EVEX.r2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られ、βββでも示される):前述したように、このフィールドはコンテキスト固有である。
REX´フィールド1210:これは、REX´フィールドの残りであり、拡張された32個のレジスタセットの上位16又は下位16を符号化するのに用いられ得るEVEX.V´ビットフィールド(EVEXバイト3、ビット[3]−V´)である。このビットは、ビット反転フォーマットで格納される。1の値が、下位16個のレジスタを符号化するのに用いられる。換言すると、V´VVVVは、EVEX.V´、EVEX.vvvvを組み合わせることで形成される。
書き込みマスクフィールド1270(EVEXバイト3、ビット[2:0]−kkk):このコンテンツは、前述したように、書き込みマスクレジスタにおいてレジスタのインデックスを指定する。本発明の1つの実施形態において、特定値EVEX.kkk=000は、どの書き込みマスクも特定の命令に用いられないことを示唆する特別な挙動を有する(これは、全て1に物理的に組み込まれた書き込みマスクの使用、又はマスキングハードウェアをバイパスするハードウェアの使用を含む様々な方法で実装され得る)。
リアルオペコードフィールド1330(バイト4)はまた、オペコードバイトとしても知られている。そのオペコードの一部はこのフィールドに指定されている。
MOD R/Mフィールド1340(バイト5)は、MODフィールド1342、Regフィールド1344、及びR/Mフィールド1346を含む。前述したように、MODフィールド1342のコンテンツは、メモリアクセスオペレーションと非メモリアクセスオペレーションとを識別する。Regフィールド1344の役割は、デスティネーションレジスタオペランド又はソースレジスタオペランドを符号化すること、あるいはオペコード拡張として扱われ、いかなる命令オペランドを符号化するのにも用いられないこと、という2つの状況に要約され得る。R/Mフィールド1346の役割は、メモリアドレスを参照する命令オペランドを符号化すること、あるいはデスティネーションレジスタオペランド又はソースレジスタオペランドを符号化することを含んでよい。
スケール・インデックス・ベース(SIB)バイト(バイト6):前述したように、スケールフィールド1250のコンテンツは、メモリアドレス生成に用いられる。SIB.xxx1354及びSIB.bbb1356:これらのフィールドのコンテンツは、レジスタインデックスXxxx及びBbbbに関して前述されている。
変位フィールド1262A(バイト7−10):MODフィールド1342に10が入っている場合、バイト7−10は変位フィールド1262Aであり、これは、レガシ32ビット変位(disp32)と同じように機能し、バイト粒度で機能する。
変位係数フィールド1262B(バイト7):MODフィールド1342に01が入っている場合、バイト7は変位係数フィールド1262Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)のものと同じである。disp8は符号拡張されているので、−128と127バイトとの間のオフセットをアドレス指定できるだけであり、64バイトキャッシュラインに関しては、disp8は本当に有用な4つの値−128、−64、0及び64にだけ設定され得る8ビットを用いる。より広い範囲が必要となることが多いのでdisp32が用いられるが、disp32は4バイトを必要とする。disp8及びdisp32と対照的に、変位係数フィールド1262Bはdisp8を再解釈したものであり、変位係数フィールド1262Bを用いる場合、実際の変位は、メモリオペランドアクセスのサイズ(N)を乗じた変位係数フィールドのコンテンツによって決定される。このタイプの変位は、disp8×Nと呼ばれる。これにより、平均命令長(変位のために用いられる単一のバイトであるが、はるかに広い範囲を有する)が減少する。そのような圧縮された変位は、有効変位がメモリアクセスの粒度の倍数であるという前提に基づいており、したがって、アドレスオフセットの冗長下位ビットは、符号化される必要がない。換言すると、変位係数フィールド1262Bは、レガシx86命令セットの8ビット変位を代用する。したがって、変位係数フィールド1262Bは、disp8がdisp8×Nにオーバーロードされることを唯一の例外として、x86命令セットの8ビット変位と同じように符号化される(そのため、ModRM/SIB符号化ルールに変更はない)。換言すると、符号化ルール又は符号化長に変更はなく、ハードウェアによる変位値の解釈にだけ変更がある(これにより、バイト単位のアドレスオフセットを取得するために、メモリオペランドのサイズによって変位をスケーリングすることが必要となる)。
即値フィールド1272は、前述したように作用する。
[フルオペコードフィールド]
図13Bは、本発明の1つの実施形態に従って、フルオペコードフィールド1274を構成する特定ベクトル対応命令フォーマット1300のフィールドを示すブロック図である。具体的には、フルオペコードフィールド1274は、フォーマットフィールド1240、ベースオペレーションフィールド1242、及びデータ要素幅(W)フィールド1264を含む。ベースオペレーションフィールド1242は、プリフィックス符号化フィールド1325、オペコードマップフィールド1315、及びリアルオペコードフィールド1330を含む。
[レジスタインデックスフィールド]
図13Cは、本発明の1つの実施形態に従って、レジスタインデックスフィールド1244を構成する特定ベクトル対応命令フォーマット1300のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド1244は、REXフィールド1305、REX´フィールド1310、MODR/M.regフィールド1344、MODR/M.r/mフィールド1346、VVVVフィールド1320、xxxフィールド1354、及びbbbフィールド1356を含む。
[拡大オペレーションフィールド]
図13Dは、本発明の1つの実施形態に従って、拡大オペレーションフィールド1250を構成する特定ベクトル対応命令フォーマット1300のフィールドを示すブロック図である。クラス(U)フィールド1268に0が入っている場合、これはEVEX.U0(クラスA1268A)を意味し、1が入っている場合には、EVEX.U1(クラスB1268B)を意味する。U=0、且つMODフィールド1342に11が入っている場合(非メモリアクセスオペレーションを意味する)、アルファフィールド1252(EVEXバイト3、ビット[7]−EH)はrsフィールド1252Aと解釈される。rsフィールド1252Aに1が入っている場合(ラウンド1252A.1)、ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS)はラウンド制御フィールド1254Aと解釈される。ラウンド制御フィールド1254Aは、1ビットのSAEフィールド1256及び2ビットのラウンド演算フィールド1258を含む。rsフィールド1252Aに0が入っている場合(データ変換1252A.2)、ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS)は3ビットのデータ変換フィールド1254Bと解釈される。U=0、且つMODフィールド1342に00、01、又は10が入っている場合(メモリアクセスオペレーションを意味する)、アルファフィールド1252(EVEXバイト3、ビット[7]−EH)はエビクションヒント(EH)フィールド1252Bと解釈され、ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS)は3ビットのデータ操作フィールド1254Cと解釈される。
U=1の場合、アルファフィールド1252(EVEXバイト3、ビット[7]−EH)は書き込みマスク制御(Z)フィールド1252Cと解釈される。U=1、且つMODフィールド1342に11が入っている場合(非メモリアクセスオペレーションを意味する)、ベータフィールド1254(EVEXバイト3、ビット[4]−S0)の一部はRLフィールド1257Aと解釈され、1(ラウンド1257A.1)が入っている場合には、ベータフィールド1254(EVEXバイト3、ビット[6−5]−S2−1)の残りはラウンド演算フィールド1259Aと解釈される。RLフィールド1257Aに0(VSIZE1257.A2)が入っている場合、ベータフィールド1254(EVEXバイト3、ビット[6−5]−S2−1)の残りはベクトル長フィールド1259B(EVEXバイト3、ビット[6−5]−L1−0)と解釈される。U=1、且つMODフィールド1342に00、01、又は10が入っている場合(メモリアクセスオペレーションを意味する)、ベータフィールド1254(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド1259B(EVEXバイト3、ビット[6−5]−L1−0)及びブロードキャストフィールド1257B(EVEXバイト3、ビット[4]−B)と解釈される。
[例示的なレジスタアーキテクチャ]
図14は、本発明の1つの実施形態によるレジスタアーキテクチャ1400のブロック図である。示される実施形態には、512ビット幅の32個のベクトルレジスタ1410があり、これらのレジスタは、zmm0〜zmm31と参照符号が付けられている。下位16個のzmmレジスタの下位256ビットは、レジスタymm0〜15にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0〜15にオーバーレイされる。特定ベクトル対応命令フォーマット1300は、以下の表に示されるように、これらのオーバーレイされたレジスタファイルを処理する。
換言すると、ベクトル長フィールド1259Bは、最大長さと1つ又は複数の他のより短い長さとの間から選択し、このようなより短い長さはそれぞれ、前述の長さの半分の長さであり、ベクトル長フィールド1259Bを用いない命令テンプレートは、最大ベクトル長を処理する。さらに1つの実施形態において、特定ベクトル対応命令フォーマット1300のクラスB命令テンプレートは、パックド又はスカラ単精度/倍精度浮動小数点データ、及びパックド又はスカラ整数データを処理する。スカラ演算は、zmm/ymm/xmmレジスタ内の最下位データ要素位置において実行される演算であり、上位のデータ要素位置は、実施形態に応じて、命令の前と同じ状態のままにされるか又はゼロ設定される。
書き込みマスクレジスタ1415:示される実施形態には、8個の書き込みマスクレジスタ(k0〜k7)があり、それぞれのサイズは64ビットである。代替的な実施形態において、書き込みマスクレジスタ1415のサイズは16ビットである。前述したように、本発明の1つの実施形態において、ベクトルマスクレジスタk0は書き込みマスクとして用いられることができず、k0を標準的に示すであろう符号化が書き込みマスクに用いられる場合、これは、物理的に組み込まれた0xFFFFという書き込みマスクを選択し、当該命令用の書き込みマスクを事実上無効にする。
汎用レジスタ1425:示される実施形態には、メモリオペランドをアドレス指定する既存のx86アドレッシングモードと共に用いられる16個の64ビット汎用レジスタが存在する。これらのレジスタには、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及びR8〜R15という名称で参照符号が付けられている。
MMXパックド整数フラットレジスタファイル1450がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)1445:示される実施形態において、x87スタックは、x87命令セット拡張を用いて32/64/80ビット浮動小数点データに対してスカラ浮動小数点演算を実行するのに用いられる8要素スタックである。一方、MMXレジスタは、64ビットパックド整数データに対して演算を実行するのに用いられ、さらにMMXとXMMレジスタとの間で実行される一部の演算用にオペランドを保持するのに用いられる。
本発明の代替的な実施形態は、より広いレジスタを用いても、又はより狭いレジスタを用いてもよい。さらに、本発明の代替的な実施形態は、より多くのレジスタファイル、より少ないレジスタファイル、又は異なるレジスタファイル及びレジスタを用いてもよい。
[例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ]
プロセッサコアは、異なる方法で、異なる目的のために、異なるプロセッサに実装されてよい。例えば、そのようなコアの実装は、1)汎用計算を対象とした汎用インオーダコア、2)汎用計算を対象とした高性能汎用アウトオブオーダコア、3)グラフィックス及び/又は科学(スループット)計算を主に対象とした専用コアを含んでよい。異なるプロセッサの実装は、1)汎用計算を対象とした1つ又は複数の汎用インオーダコア、及び/又は、汎用計算を対象とした1つ又は複数の汎用アウトオブオーダコアを含むCPU、並びに2)グラフィックス及び/又は科学(スループット)を主に対象とした1つ又は複数の専用コアを含むコプロセッサを含んでよい。そのような異なるプロセッサによって異なるコンピュータシステムアーキテクチャがもたらされるが、それは次のようなものを含んでよい。1)CPUとは別個のチップに搭載されたコプロセッサ、2)CPUと同じパッケージ内の別個のダイに搭載されたコプロセッサ、3)CPUと同じダイに搭載されたコプロセッサ(この場合、そのようなコプロセッサは専用ロジックと呼ばれることがあり、例えば統合グラフィックスロジック及び/又は科学(スループット)ロジック、あるいは専用コアなどがある)、及び4)説明されたCPU(アプリケーションコア又はアプリケーションプロセッサと呼ばれることがある)、上述のコプロセッサ、及び追加機能を同じダイ上に含み得るシステムオンチップである。例示的なコアアーキテクチャが次に説明され、その後に例示的なプロセッサ及びコンピュータアーキテクチャの説明が続く。
[例示的なコアアーキテクチャ]
[インオーダコア及びアウトオブオーダコアのブロック図]
図15Aは、本発明の実施形態に従って、例示的なインオーダパイプラインと、例示的なレジスタリネーミング・アウトオブオーダ発行/実行パイプラインとの両方を示すブロック図である。図15Bは、本発明の実施形態に従って、プロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング・アウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。図15A〜図15Bの実線で示されたボックスは、インオーダパイプライン及びインオーダコアを示す。一方、破線で示されたボックスの任意の追加は、レジスタリネーミング・アウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダ態様はアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様が説明される。
図15Aにおいて、プロセッサパイプライン1500は、フェッチステージ1502、レングス復号ステージ1504、復号ステージ1506、割り当てステージ1508、リネーミングステージ1510、スケジューリング(ディスパッチ又は発行としても知られる)ステージ1512、レジスタ読み出し/メモリ読み出しステージ1514、実行ステージ1516、ライトバック/メモリ書き込みステージ1518、例外処理ステージ1522、及びコミットステージ1524を含む。
図15Bは、実行エンジンユニット1550に結合されたフロントエンドユニット1530を含むプロセッサコア1590を示し、両方ともメモリユニット1570に結合されている。コア1590は、縮小命令セット計算(RISC)コア、複合命令セット計算(CISC)コア、超長命令語(VLIW)コア、あるいはハイブリッド又は代替的なコアタイプであってよい。さらに別の選択肢として、コア1590は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用計算グラフィックス処理ユニット(GPGPU)コア、グラフィックスコアなどの専用コアであってもよい。
フロントエンドユニット1530は、命令キャッシュユニット1534に結合された分岐予測ユニット1532を含み、命令キャッシュユニット1534は命令変換ルックアサイドバッファ(TLB)1536に結合され、命令変換ルックアサイドバッファ(TLB)1536は命令フェッチユニット1538に結合され、命令フェッチユニット1538は復号ユニット1540に結合されている。復号ユニット1540(又はデコーダ)は、複数の命令を復号し、1つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成し得る。これらは、元の命令から復号され、又は別の方法で元の命令を反映し、又は元の命令から導出される。復号ユニット1540は、様々な異なるメカニズムを用いて実装されてよい。適切なメカニズムの例には、限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)などが含まれる。1つの実施形態において、コア1590は、特定のマクロ命令用のマイクロコードを(例えば、復号ユニット1540の中に、そうでなければフロントエンドユニット1530内に)格納するマイクロコードROM又は他の媒体を含む。復号ユニット1540は、実行エンジンユニット1550内のリネーム/アロケータユニット1552に結合されている。
実行エンジンユニット1550は、リタイアメントユニット1554と、1つ又は複数のスケジューラユニット1556のセットとに結合されたリネーム/アロケータユニット1552を含む。スケジューラユニット1556は、リザベーションステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット1556は、物理レジスタファイルユニット1558に結合されている。物理レジスタファイルユニット1558のそれぞれは、1つ又は複数の物理レジスタファイルを表し、そのそれぞれ異なる物理レジスタファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)など、1つ又は複数の異なるデータタイプを格納する。1つの実施形態において、物理レジスタファイルユニット1558は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイルユニット1558は、リタイアメントユニット1554によってオーバーラップされ、レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な方法を示す(例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いる、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いる、並びにレジスタマップ及びレジスタのプールを用いるなど)。リタイアメントユニット1554及び物理レジスタファイルユニット1558は、実行クラスタ1560に結合されている。実行クラスタ1560は、1つ又は複数の実行ユニット1562のセットと、1つ又は複数のメモリアクセスユニット1564のセットとを含む。実行ユニット1562は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に実行してよい。いくつかの実施形態は、特定の機能又は機能のセットに専用の複数の実行ユニットを含んでよく、他の実施形態は、1つのみの実行ユニット、又は全ての機能を全て実行する複数の実行ユニットを含んでもよい。特定の実施形態は、特定のタイプのデータ/オペレーションに対して別個のパイプラインを形成するので、スケジューラユニット1556、物理レジスタファイルユニット1558、及び実行クラスタ1560は、可能性として複数であると示されている(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又はメモリアクセスパイプラインはそれぞれ、独自のスケジューラユニット、物理レジスタファイルユニット、及び/又は実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット1564を有する特定の実施形態が実装される)。別個のパイプラインが用いられる場合、これらのパイプラインのうち1つ又は複数がアウトオブオーダ発行/実行であってよく、残りがインオーダであってもよいことも理解されるべきである。
メモリアクセスユニット1564のセットがメモリユニット1570に結合され、メモリユニット1570は、レベル2(L2)キャッシュユニット1576に結合されたデータキャッシュユニット1574に結合されたデータTLBユニット1572を含む。1つの例示的な実施形態において、メモリアクセスユニット1564は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、これらのそれぞれはメモリユニット1570内のデータTLBユニット1572に結合されている。命令キャッシュユニット1534は、メモリユニット1570内のレベル2(L2)キャッシュユニット1576にさらに結合される。L2キャッシュユニット1576は、1つ又は複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
例として、例示的なレジスタリネーミング・アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン1500を以下のように実装してよい。すなわち、1)命令フェッチ1538がフェッチステージ1502及びレングス復号ステージ1504を実行する。2)復号ユニット1540が復号ステージ1506を実行する。3)リネーム/アロケータユニット1552が割り当てステージ1508及びリネーミングステージ1510を実行する。4)スケジューラユニット1556がスケジュールステージ1512を実行する。5)物理レジスタファイルユニット1558及びメモリユニット1570がレジスタ読み出し/メモリ読み出しステージ1514を実行する。実行クラスタ1560が実行ステージ1516を実行する。6)メモリユニット1570及び物理レジスタファイルユニット1558がライトバック/メモリ書き込みステージ1518を実行する。7)様々なユニットが例外処理ステージ1522に関与し得る。8)リタイアメントユニット1554及び物理レジスタファイルユニット1558がコミットステージ1524を実行する。
コア1590は、本明細書で説明される命令を含む1つ又は複数の命令セット(例えば、x86命令セット(より新たなバージョンと共に追加されたいくつかの拡張を有する)、MIPS Technologies(カリフォルニア州/サニーベール)のMIPS命令セット、ARM Holdings(カリフォルニア州/サニーベール)のARM命令セット(NEONなどの任意の追加拡張を有する))をサポートしてよい。1つの実施形態において、コア1590はパックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それによって多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能にする。
コアはマルチスレッディング(オペレーション又はスレッドからなる2つ又はそれより多くの並列セットを実行)をサポートしてよく、タイムスライスマルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングしているスレッドのそれぞれに対して、単一の物理コアが論理コアを提供する)、又はこれらの組み合わせ(例えば、タイムスライスフェッチ及び復号、並びにそれ以降のIntel(登録商標)ハイパースレッディング・テクノロジーなどの同時マルチスレッディング)を含む様々な方法でサポートしてよいことが理解されるべきである。
レジスタリネーミングがアウトオブオーダ実行との関連で説明されるが、レジスタリネーミングはインオーダアーキテクチャで用いられてもよいことが理解されるべきである。示されたプロセッサの実施形態はまた、別々の命令キャッシュユニット1534とデータキャッシュユニット1574、並びに共有L2キャッシュユニット1576を含むが、代替的な実施形態は、命令及びデータの両方に対して、例えばレベル1(L1)内部キャッシュ又は複数のレベルの内部キャッシュなど、単一の内部キャッシュを有してもよい。実施形態によっては、システムは、内部キャッシュ及び外部キャッシュの組み合わせを含んでよく、外部キャッシュはコア及び/又はプロセッサの外部に存在する。あるいは、全てのキャッシュが、コア及び/又はプロセッサの外部にあってもよい。
[具体的な例示的インオーダコアアーキテクチャ]
図16A〜図16Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック(同じタイプ及び/又は異なるタイプの他のコアを含む)の1つになるであろう。論理ブロックは、用途に応じて、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を通じて、何らかの固定機能ロジック、メモリI/Oインタフェース、及び他の必要なI/Oロジックと通信する。
図16Aは、本発明の実施形態による単一のプロセッサコアのブロック図であり、オンダイ相互接続ネットワーク1602への接続に加え、レベル2(L2)キャッシュ1604のローカルサブセットを有する。1つの実施形態において、命令デコーダ1600はパックドデータ命令セット拡張を用いてx86命令セットをサポートする。L1キャッシュ1606によって、キャッシュメモリからスカラユニット及びベクトルユニットへの低レイテンシアクセスが可能となる。1つの実施形態において、(設計の単純化のために)スカラユニット1608及びベクトルユニット1610が、別々のレジスタセット(それぞれ、複数のスカラレジスタ1612及び複数のベクトルレジスタ1614)を用い、これらの間で転送されるデータはメモリに書き込まれ、その後、レベル1(L1)キャッシュ1606から読み戻されるが、本発明の代替的な実施形態は、異なる手法を用いてよい(例えば、単一のレジスタセットを用いる、又は書き込み及び読み戻しを行うことなく、2つのレジスタファイル間でのデータ転送を可能にする通信経路を含む)。
L2キャッシュのローカルサブセット1604は、別個のローカルサブセットに分割されるグローバルL2キャッシュの一部であり、プロセッサコアごとに1つである。各プロセッサコアは、独自のL2キャッシュのローカルサブセット1604に直接アクセスする経路を有する。プロセッサコアにより読み出されたデータは、L2キャッシュサブセット1604に格納され、他のプロセッサコアが独自のローカルL2キャッシュサブセットにアクセスするのと並行して、高速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、独自のL2キャッシュサブセット1604に格納され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは双方向性であり、プロセッサコア、L2キャッシュ、及び他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能にする。各リングデータ経路は、方向ごとに1012ビット幅である。
図16Bは、本発明の実施形態による図16Aのプロセッサコアに関する部分拡大図である。図16Bは、L1キャッシュ1604の一部であるL1データキャッシュ1606Aと、ベクトルユニット1610及びベクトルレジスタ1614に関するより詳細とを含む。具体的には、ベクトルユニット1610は16幅のベクトル処理ユニット(VPU)(16幅のALU1628を参照)であり、整数命令、単精度浮動小数点命令、及び倍精度浮動小数点命令のうち1つ又は複数を実行する。VPUは、スウィズルユニット1620を用いたレジスタ入力のスウィズル処理、数値変換ユニット1622A〜1622Bを用いた数値変換、並びに複製ユニット1624を用いたメモリ入力の複製をサポートする。書き込みマスクレジスタ1626は、結果として生じるベクトル書き込みをプレディケートする(predicateing )ことを可能にする。
[統合メモリコントローラ及び統合グラフィックスを有するプロセッサ]
図17は、本発明の実施形態によるプロセッサ1700のブロック図であり、これは1つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよい。図17の実線で示されたボックスは、単一のコア1702A、システムエージェント1710、1つ又は複数のバスコントローラユニット1716のセットを有するプロセッサ1700を示し、破線で示されたボックスの任意の追加は、複数のコア1702A〜1702N、システムエージェントユニット1710内にある1つ又は複数の統合メモリコントローラユニット1714のセット、及び専用ロジック1708を有する代替プロセッサ1700を示す。
したがって、プロセッサ1700の異なる実装は、1)専用ロジック1708が統合グラフィックス及び/又は科学(スループット)ロジック(1つ又は複数のコアを含んでよい)であり、コア1702A〜1702Nが1つ又は複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、その2つの組み合わせ)であるCPU、2)コア1702A〜1702Nが、グラフィックス及び/又は科学(スループット)を主に対象とした多数の専用コアであるコプロセッサ、並びに3)コア1702A〜1702Nが多数の汎用インオーダコアであるコプロセッサを含んでよい。したがって、プロセッサ1700は汎用プロセッサ、コプロセッサであってよく、あるいは専用プロセッサ、例えばネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットの多数統合コア(MIC)コプロセッサ(30個又はそれより多くのコアを含む)、組み込みプロセッサなどであってもよい。プロセッサは、1つ又は複数のチップ上に実装されてよい。プロセッサ1700は、例えば、BiCMOS、CMOS、又はNMOSなどの複数のプロセス技術のいずれかを用いる1つ又は複数の基板の一部であってよく、及び/又は当該基板上に実装されてもよい。
メモリ階層は、コア内にある1つ又は複数のレベルのキャッシュと、共有キャッシュユニット1706のセットあるいは1つ又は複数の共有キャッシュユニット1706と、統合メモリコントローラユニット1714のセットに結合された外部メモリ(不図示)とを含む。共有キャッシュユニット1706のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュなど、1つ又は複数の中間レベルのキャッシュ、又は他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、及び/又はこれらの組み合わせを含んでよい。1つの実施形態において、リングベースの相互接続ユニット1712が、統合グラフィックスロジック1708、共有キャッシュユニット1706のセット、及びシステムエージェントユニット1710/統合メモリコントローラユニット1714を相互接続するが、代替的な実施形態は、このようなユニットを相互接続するのに任意の数の周知技術を用いてよい。1つの実施形態において、1つ又は複数のキャッシュユニット1706と、コア1702A〜1702Nとの間でコヒーレンシが維持される。
実施形態によっては、コア1702A〜1702Nのうち1つ又は複数がマルチスレッディング可能である。システムエージェント1710は、コア1702A〜1702Nを調整し動作させるこうした構成要素を含む。システムエージェントユニット1710は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを含んでよい。PCUは、コア1702A〜1702N及び統合グラフィックスロジック1708の電力状態を管理するのに必要なロジック及び構成要素であってよく、又は当該ロジック及び当該構成要素を含んでもよい。ディスプレイユニットは、外部接続された1つ又は複数のディスプレイを駆動するためのものである。
コア1702A〜1702Nは、アーキテクチャ命令セットに関して同種でも異種でもよい。すなわち、コア1702A〜1702Nのうち2つ又はそれより多くは同じ命令セットを実行することが可能であってよいが、他のものはその命令セットのサブセット又は別の命令セットだけを実行することが可能であってもよい。
[例示的なコンピュータアーキテクチャ]
図18〜図21は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ型PC、デスクトップ型PC、ハンドヘルド型PC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルド型デバイス、及び様々な他の電子デバイス向けの当技術分野において知られる他のシステム設計及び構成も適している。概して、本明細書に開示されるプロセッサ及び/又は他の実行ロジックを組み込むことが可能である多様なシステム又は電子デバイスが一般的に適している。
ここで図18を参照すると、本発明の1つの実施形態によるシステム1800のブロック図が示されている。システム1800は、1つ又は複数のプロセッサ1810、1815を含んでよく、これらはコントローラハブ1820に結合されている。1つの実施形態において、コントローラハブ1820は、グラフィックスメモリコントローラハブ(GMCH)1890と、入力/出力ハブ(IOH)1850(これは別個のチップ上にあってよい)とを含む。GMCH1890は、メモリ及びグラフィックスコントローラを含み、これらにメモリ1840及びコプロセッサ1845が結合されている。IOH1850は入力/出力(I/O)デバイス1860をGMCH1890に結合する。あるいは、メモリ及びグラフィックスコントローラの一方又は両方が、(本明細書に説明されるように)プロセッサ内に統合され、メモリ1840及びコプロセッサ1845は、プロセッサ1810と、IOH1850と共に単一チップに入ったコントローラハブ1820とに直接結合される。
任意的な性質の追加のプロセッサ1815は、図18に破線で示されている。各プロセッサ1810、1815は、本明細書で説明される処理コアのうち1つ又は複数を含んでよく、何らかのバージョンのプロセッサ1700であってよい。
メモリ1840は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、又はこの2つの組み合わせであってよい。少なくとも1つの実施形態では、コントローラハブ1820は、フロントサイドバス(FSB)などのマルチドロップバス、QuickPath相互接続(QPI)などのポイントツーポイントインタフェース、又は同種の接続1895を介してプロセッサ1810、1815と通信する。
1つの実施形態において、コプロセッサ1845は、例えば、ハイスループットMICプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどの専用プロセッサである。1つの実施形態において、コントローラハブ1820は統合グラフィックスアクセラレータを含んでよい。
物理リソース1810と1815との間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、電力消費特性などを含む広範な価値基準に関して、様々な差異が存在し得る。
1つの実施形態において、プロセッサ1810は、一般的タイプのデータ処理オペレーションを制御する命令を実行する。この命令内にコプロセッサ命令が組み込まれてもよい。プロセッサ1810は、このコプロセッサ命令を、付属のコプロセッサ1845が実行すべきタイプの命令であると認識する。したがって、プロセッサ1810は、このコプロセッサ命令(又はコプロセッサ命令を表す制御信号)をコプロセッサバス又は他の相互接続を使ってコプロセッサ1845に発行する。コプロセッサ1845は、受信したコプロセッサ命令を受け付けて実行する。
ここで図19を参照すると、本発明の実施形態に従って、より具体的な第1の例示的なシステム1900のブロック図が示されている。図19に示されるように、マルチプロセッサシステム1900はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1950を介して結合される第1のプロセッサ1970と、第2のプロセッサ1980とを含む。プロセッサ1970及び1980のそれぞれは、何らかのバージョンのプロセッサ1700であってよい。本発明の1つの実施形態において、プロセッサ1970及び1980はそれぞれ、プロセッサ1810及び1815であり、コプロセッサ1938はコプロセッサ1845である。別の実施形態において、プロセッサ1970及び1980はそれぞれ、プロセッサ1810及びコプロセッサ1845である。
プロセッサ1970及び1980は、統合メモリコントローラ(IMC)ユニット1972及び1982をそれぞれ含んで示されている。プロセッサ1970はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース1976及び1978を含み、同様に第2のプロセッサ1980はP−Pインタフェース1986及び1988を含む。プロセッサ1970、1980は、ポイントツーポイント(P−P)インタフェース1950を介し、P−Pインタフェース回路1978、1988を用いて情報を交換してよい。図19に示されるように、IMC1972及び1982は、プロセッサをそれぞれのメモリ、すなわちメモリ1932及びメモリ1934に結合する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
プロセッサ1970、1980はそれぞれ、個々のP−Pインタフェース1952、1954を介し、ポイントツーポイントインタフェース回路1976、1994、1986、1998を用いてチップセット1990と情報を交換してよい。チップセット1990は任意で、高性能インタフェース1939を介してコプロセッサ1938と情報を交換してよい。1つの実施形態において、コプロセッサ1938は、例えば、ハイスループットMICプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサなどの専用プロセッサである。
共有キャッシュ(不図示)がどちらかのプロセッサに含まれても、又は両方のプロセッサの外部に含まれてもよく、さらにP−P相互接続を介してこれらのプロセッサに接続されてもよい。これにより、プロセッサが低電力モードに置かれている場合に、どちらかのプロセッサ又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得る。
チップセット1990は、インタフェース1996を介して第1のバス1916に結合されてよい。1つの実施形態において、第1のバス1916は、ペリフェラル・コンポーネント・インターコネクト(PCI)バス、あるいはPCIエクスプレスバス又は別の第3世代I/O相互接続バスなどのバスであってよいが、本発明の範囲はそのように限定されてはいない。
図19に示されるように、第1のバス1916を第2のバス1920に結合するバスブリッジ1918と共に、様々なI/Oデバイス1914が第1のバス1916に結合されてよい。1つの実施形態において、1つ又は複数の追加のプロセッサ1915が第1のバス1916に結合される。追加のプロセッサとは、コプロセッサ、ハイスループットMICプロセッサ、GPGPUのアクセラレータ(例えば、グラフィックスアクセラレータ、又はデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、又はその他のプロセッサなどである。1つの実施形態において、第2のバス1920はローピンカウント(LPC)バスであってよい。様々なデバイスが第2のバス1920に結合されてよく、1つの実施形態において、そのようなデバイスには例えば、キーボード及び/又はマウス1922、通信デバイス1927、及びストレージユニット1928が含まれ、ストレージユニットには、命令/コード及びデータ1930を含み得るディスクドライブ又は他の大容量ストレージデバイスなどがある。さらに、オーディオI/O1924が第2のバス1920に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図19のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバスアーキテクチャ又は他のそのようなアーキテクチャを実装してよい。
ここで図20を参照すると、本発明の実施形態に従って、より具体的な第2の例示的なシステム2000のブロック図が示されている。図19及び図20内の同様の要素は同様の参照番号を有しており、図19の特定の態様が、図20の他の態様をあいまいにしないように、図20から省略されている。
図20は、プロセッサ1970、1980がそれぞれ、統合メモリと、I/O制御ロジック(「CL」)1972及び1982とを含んでよいことを示す。したがって、CL1972、1982は統合メモリコントローラユニットを含み、且つI/O制御ロジックを含む。図20は、メモリ1932、1934だけがCL1972、1982に結合されているのでなく、I/Oデバイス2014もまた、制御ロジック1972、1982に結合されていることを示している。レガシI/Oデバイス2015がチップセット1990に結合されている。
ここで図21を参照すると、本発明の実施形態に従ってSoC2100のブロック図が示されている。図17内の同種の要素は同様の参照番号を有している。また、破線で示されるボックスは、より高度なSoCにおける任意の機能である。図21において、相互接続ユニット2102が、1つ又は複数のコア1702A〜1702N及び共有キャッシュユニット1706のセットを含むアプリケーションプロセッサ2110と、システムエージェントユニット1710と、バスコントローラユニット1716と、統合メモリコントローラユニット1714と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及び映像プロセッサを含み得る1つ又は複数のコプロセッサ2120又はそのセットと、スタティックランダムアクセスメモリ(SRAM)ユニット2130と、ダイレクトメモリアクセス(DMA)ユニット2132と、1つ又は複数の外部ディスプレイに結合するためのディスプレイユニット2140とに結合されている。1つの実施形態において、コプロセッサ2120は専用プロセッサを含み、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ、組み込みプロセッサなどがある。
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装手法の組み合わせで実装されてよい。本発明の実施形態は、少なくとも1つのプロセッサと、ストレージシステム(揮発性メモリ及び不揮発性メモリ、及び/又は記憶素子を含む)と、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを有するプログラマブルシステム上で実行されるコンピュータプログラム又はプログラムコードとして実装されてよい。
図19に示されるコード1930などのプログラムコードは、本明細書で説明される機能を実行し、出力情報を生成する命令を入力するのに適用されてよい。出力情報は、1つ又は複数の出力デバイスに既知の方法で適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信すべく、高水準の手続き型又はオブジェクト指向型プログラミング言語で実装されてよい。プログラムコードはまた、必要に応じて、アセンブリ言語又は機械語で実装されてよい。実際には、本明細書で説明されるメカニズムは、いかなる特定のプログラミング言語にも範囲を限定されてはいない。どのような場合でも、言語はコンパイラ型言語又はインタプリタ型言語であってよい。
少なくとも1つの実施形態の1つ又は複数の態様は、機械可読媒体に格納された典型的な命令により実装されてよい。この命令は、プロセッサ内の様々なロジックを表し、機械により読み出されると、本明細書で説明される技術を実行すべく機械にロジックを作成させる。「IPコア」として知られるそのような表現は、有形の機械可読媒体に格納され、ロジック又はプロセッサを実際に作成する製造装置にロードすべく、様々な顧客又は製造施設に供給されてよい。
そのような機械可読記憶媒体は、限定されることなく、機械又は装置により製造される又は形成される非一時的な有形の構成の物品を含んでよく、そのような物品には、ハードディスクや、フロッピ(登録商標)ディスク、光ディスク、コンパクトディスク・リードオンリメモリ(CD−ROM)、コンパクトディスク・リライタブル(CD−RW)、及び光磁気ディスクを含むその他のタイプのディスク、半導体デバイスとして、例えば、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)やスタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)など、磁気カード又は光カード、又は電子命令を格納するのに適したその他のタイプの媒体などの記憶媒体を含む。
したがって、本発明の実施形態はまた、命令を含んだ、又はハードウェア記述言語(HDL)などの設計データを含んだ非一時的な有形の機械可読媒体を含む。HDLは、本明細書で説明される構造、回路、装置、プロセッサ、及び/又はシステム機能を規定する。そのような実施形態はまた、プログラム製品と呼ばれ得る。
[エミュレーション(バイナリ変換、コードモーフィングなどを含む)]
場合によっては、命令をソース命令セットからターゲット命令セットに変換するのに命令変換器が用いられてよい。例えば命令変換器は、ある命令を、コアによって処理される1つ又は複数の他の命令に翻訳(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる)、モーフィング、エミュレーション、又は別の方法で変換してよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令変換器は、プロセッサ上にあっても、プロセッサ外にあっても、又は一部がプロセッサ上にあり且つ一部がプロセッサ外にあってもよい。
図22は、本発明の実施形態に従って、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令変換器の使用法を対比するブロック図である。図示された実施形態では、命令変換器はソフトウェア命令変換器であるが、代わりに命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてもよい。図22は、高水準言語2202のプログラムがx86コンパイラ2204を用いてコンパイルされ、少なくとも1つのx86命令セットコアを搭載するプロセッサ2216によってネイティブに実行され得るx86バイナリコード2206を生成し得ることを示す。少なくとも1つのx86命令セットコアを搭載するプロセッサ2216は、少なくとも1つのx86命令セットコアを搭載するIntel(登録商標)プロセッサと実質的に同じ結果を実現すべく、(1)Intel(登録商標)x86命令セットコアの命令セットの大部分、又は(2)少なくとも1つのx86命令セットコアを搭載するIntel(登録商標)プロセッサ上で動作することを目的としたオブジェクトコード形式のアプリケーション又は他のソフトウェアを、互換的に実行する、又は別の方法で処理することで、少なくとも1つのx86命令セットコアを搭載するIntel(登録商標)プロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。x86コンパイラ2204は、追加のリンケージ処理をしてもしなくても、少なくとも1つのx86命令セットコアを搭載するプロセッサ2216上で実行され得るx86バイナリコード2206(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、図22は、高水準言語2202のプログラムが、別の命令セットコンパイラ2208を用いてコンパイルされ、少なくとも1つのx86命令セットコアを搭載しないプロセッサ2214(例えば、MIPS Technologies(カリフォルニア州/サニーベール)のMIPS命令セットを実行するコア、及び/又は、ARM Holdings(カリフォルニア州/サニーベール)のARM命令セットを実行するコアを搭載したプロセッサ)によりネイティブに実行され得る別の命令セットバイナリコード2210を生成し得ることを示す。命令変換器2212は、x86バイナリコード2206を、x86命令セットコアを搭載しないプロセッサ2214によりネイティブに実行され得るコードに変換するのに用いられる。この変換されたコードは、別の命令セットバイナリコード2210と同じになる可能性は低い。なぜなら、同じにできる命令変換器を作るのは難しいからである。しかし、変換されたコードは一般的なオペレーションを実現し、別の命令セットの命令で構成される。したがって、命令変換器2212は、エミュレーション、シミュレーション、又はその他の処理を通じて、x86命令セットプロセッサ又はコアを持たないプロセッサ又は他の電子デバイスがx86バイナリコード2206を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
図5〜図10のいずれかについて説明された構成要素、特徴、及び詳細はまた、図3〜図4のいずれかに任意で適用されてよい。さらに、複数の装置のいずれかについて説明された構成要素、特徴、及び詳細はまた、複数の方法のいずれかに任意で適用されてよく、その方法は複数の実施形態において、そのような装置によって及び/又はそのような装置を用いて実行され得る。本明細書で説明されるプロセッサのいずれも、システムオンチップ(SoC)及び/又は本明細書で開示されるコンピュータシステム、及び/又は他のコンピュータシステム(例えば、デスクトップ又は携帯電話)、及び/又は他のSoCのいずれかに含まれてよい。実施形態によっては、コンピュータシステムは、相互接続と、当該相互接続に結合されたプロセッサと、当該相互接続に結合されたダイナミックランダムアクセスメモリ(DRAM)とを含んでよい。あるいは、DRAMの代わりに、リフレッシュする必要がない他のタイプの揮発性メモリが用いられてよく、又はフラッシュメモリが用いられてもよい。任意で、SoC内のプロセッサとオンダイ又はオンチップに統合され得る又はそこに含まれ得る他の構成要素の例には、限定されないが、メモリコントローラ、メモリ(例えば、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、及び/又はフラッシュメモリ)、グラフィックスデバイス(例えば、グラフィックス処理ユニット(GPU)、グラフィックスコア、又はグラフィックスプロセッサなど)、デジタル信号プロセッサ、画像信号プロセッサ、液晶ディスプレイ(LCD)又は他のディスプレイコントローラ、及び1つ又は複数の外部インタフェース(例えば、ユニバーサルシリアルバス(USB)、汎用非同期送受信回路(UART)、ファイヤワイヤ、イーサネット(登録商標)、Bluetooth(登録商標)など)に制御を提供するための1つ又は複数の入力及び/又は出力(I/O)コントローラが含まれる。携帯電話用のSoCはまた、ロングタームエボリューション(LTE)モデム、センサエンジン、及び衛星航法システムコントローラ(例えば、全地球測位衛星(GPS)、ガリレオ(Galileo)、及び/又は北斗(Beidou))を任意で含んでよい。実施形態によっては、命令は、本明細書で開示される命令フォーマットの機能又は詳細を有してよいが、これは必須ではない。
本明細書及び請求項において、「結合」及び/又は「接続」という用語が、これらの派生語と共に用いられている場合がある。これらの用語は、互いに同義語であると意図されてはいない。むしろ、複数の実施形態において、「接続」は、2つ又はそれより多くの要素が互いに物理的及び/又は電気的に直接接触していることを示すのに用いられてよい。「結合」も、2つ又はそれより多くの要素が互いに物理的及び/又は電気的に直接接触していることを意味し得る。しかし、「結合」はまた、2つ又はそれより多くの要素が互いに直接接触していないが、それでもまだ互いに協同又は相互作用していることを意味し得る。例えば、実行ユニットは、レジスタ及び/又は復号ユニットと、間にある1つ又は複数の構成要素を通じて結合されてよい。図には、接続及び結合を示すのに矢印が用いられている。
「及び/又は」という用語が用いられている場合がある。本明細書で用いられる場合、「及び/又は」という用語は、一方又は他方、あるいは両方を意味する(例えば、A及び/又はBは、A又はB、あるいはA及びBの両方を意味する)。
上記明細書には、実施形態の完全な理解を提供すべく、具体的な詳細が明記されている。しかし、これらの具体的な詳細の一部がなくても他の実施形態が実施され得る。本発明の範囲は、上述された具体的な例によって決定されるのではなく、以下の請求項によってのみ決定される。他の例において、周知の回路、構造、装置、及びオペレーションが、説明の理解をあいまいにしないよう、ブロック図の形態で、及び/又は詳細を省いて示されている。適切と考えられる場合、参照番号、又は参照番号の末尾部分は、対応する要素又は類似の要素を示すために複数の図の間で繰り返されている。そのような要素は、他に明記されない限り、又は明らかに識別できない限り、同様又は同じ特性を任意で有してよい。
特定のオペレーションは、ハードウェア要素によって実行されてよく、あるいは機械実行可能又は回路実行可能な複数の命令で具現化されてよい。これらの命令は、オペレーションを実行する命令を用いてプログラミングされた機械、回路、又はハードウェア要素(例えば、プロセッサ、プロセッサの一部、回路など)を生じさせ、及び/又はもたらすのに用いられてよい。オペレーションはまた、任意で、ハードウェア及びソフトウェアの組み合わせによって実行されてよい。プロセッサ、機械、回路、又はハードウェアは特定又は特殊な回路を含んでよく、あるいは他のロジック(例えば、ファームウェア及び/又はソフトウェアと組み合わされる可能性のあるハードウェア)は、命令を実行及び/又は処理し、命令に応答して結果を格納するよう動作可能である。
いくつかの実施形態は、機械可読媒体を含む製造品(例えば、コンピュータプログラム製品)を含む。媒体は、機械によって可読な形態で情報を提供する、例えば格納するメカニズムを含んでよい。機械可読媒体は、命令又は一連の命令を提供してよく、又はこれらを機械可読媒体上に格納していてもよい。命令又は一連の命令は、機械によって実行された場合及び/又は実行されたときに、本明細書に開示されるオペレーション、方法、又は技術のうち1つを機械に実行させる、及び/又はそれを実行する機械をもたらすよう動作可能である。
実施形態によっては、機械可読媒体は非一時的機械可読記憶媒体を含んでよい。例えば、非一時的機械可読記憶媒体は、フロッピ(登録商標)ディスケット、光記憶媒体、光ディスク、光データストレージデバイス、CD−ROM、磁気ディスク、光磁気ディスク、リードオンリメモリ(ROM)、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データストレージ材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイスなどを含んでよい。非一時的機械可読記憶媒体は、一時的な伝搬信号で構成されるものではない。実施形態によっては、記憶媒体は固体物質を含む有形の媒体を含んでよい。
適した機械の例には、限定されないが、汎用プロセッサ、専用プロセッサ、デジタル論理回路、集積回路、システムオンチップ(SoC)などが含まれる。適した機械のさらに他の例には、プロセッサ、デジタル論理回路、又は集積回路を含んだコンピュータシステム又は他の電子デバイスが含まれる。そのようなコンピュータシステム又は電子デバイスの例には、限定されないが、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、携帯電話(例えばスマートフォン)、サーバ、ネットワークデバイス(例えば、ルータ及びスイッチ)、モバイルインターネットデバイス(MID)、メディアプレーヤ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラが含まれる。
本明細書の全体にわたる「1つの実施形態」、「ある実施形態」、「1つ又は複数の実施形態」、「いくつかの実施形態」への言及は、例えば、特定の特徴が本発明の実施に含まれてよいが、必ずしもそれが必須ではないことを示す。同様に、本明細書では、本開示を簡素化すること及び様々な発明的側面の理解を助けることを目的に、様々な特徴が単一の実施形態、図、又はその説明において共にグループ化されることがある。しかし、この開示方法によって、本発明が各請求項に明確に説明されている以上の特徴を必要としているという意図が反映されていると解釈するべきではない。むしろ、以下の特許請求の範囲が反映するように、発明的側面は、開示された単一の実施形態の全ての特徴より少ない特徴にある。したがって、詳細な説明に続く特許請求の範囲は、これにより、この詳細な説明に明確に組み込まれ、各請求項は本発明の別々の実施形態として独立している。
[例示的な実施形態]
以下の例は、さらなる実施形態に関する。これらの例の詳細は、1つ又は複数の実施形態のどこでも用いられてよい。
例1は、複数のパックドデータレジスタと、3次元(3D)モートン座標変換命令を復号する復号ユニットとを含むプロセッサ又は他の装置である。3Dモートン座標変換命令は、複数の3Dモートン座標を含むソースパックドデータオペランドを示し、且つ1つ又は複数のデスティネーション記憶位置を示す。実行ユニットは、パックドデータレジスタと復号ユニットとに結合される。実行ユニットは、3Dモートン座標変換命令を復号する復号ユニットに応答して、1つ又は複数の結果パックドデータオペランドを1つ又は複数のデスティネーション記憶位置に格納する。1つ又は複数の結果パックドデータオペランドは、3つの3D座標からなる複数のセットを含む。3つの3D座標からなる複数のセットのそれぞれは、複数の3Dモートン座標のうち異なる1つに対応する。
例2は例1に記載のプロセッサを含み、ここで実行ユニットは、3Dモートン座標変換命令を復号する復号ユニットに応答し、対応する3Dモートン座標のビットに3通りのビット単位のデインターリーブを実行して、3つの3D座標のうち異なる1つにそれぞれ対応する3つの連続したビットストリングにすることで、3つの3D座標からなる複数のセットのそれぞれを生成する。
例3は例1から例2のいずれか1つに記載のプロセッサを含み、ここで実行ユニットは、3Dモートン座標変換命令を復号する復号ユニットに応答して格納する。実行ユニットはまた、少なくとも所定の3Dモートン座標の0、3、6、9、12、15、及び18の位置におけるビットの値を第1の連続したビットストリングとして1つ又は複数の結果パックドデータオペランドに格納し、第1の連続したビットストリングは、所定の3Dモートン座標に対応する3つの3D座標からなる所定のセットのうち第1の3D座標に対応する。実行ユニットはまた、少なくとも所定の3Dモートン座標の1、4、7、10、13、16、及び19の位置におけるビットの値を第2の連続したビットストリングとして1つ又は複数の結果パックドデータオペランドに格納し、第2の連続したビットストリングは、3つの3D座標からなる所定のセットのうち第2の3D座標に対応する。実行ユニットはまた、少なくとも所定の3Dモートン座標の2、5、8、11、14、17、及び20の位置におけるビットの値を第3の連続したビットストリングとして1つ又は複数の結果パックドデータオペランドに格納し、第3の連続したビットストリングは、3つの3D座標からなる所定のセットのうち第3の3D座標に対応する。
例4は例1から例2のいずれか1つに記載のプロセッサを含み、ここで実行ユニットは、3Dモートン座標変換命令を復号する復号ユニットに応答して、少なくとも所定の3Dモートン座標の0、3、6、9、12、15、18、21、24、27、30、及び33の位置におけるビットの値を第1の連続したビットストリングとして1つ又は複数の結果パックドデータオペランドに格納し、第1の連続したビットストリングは、所定の3Dモートン座標に対応する3つの3D座標からなる所定のセットのうち第1の3D座標に対応する。実行ユニットはまた、少なくとも所定の3Dモートン座標の1、4、7、10、13、16、19、22、25、28、31、及び34の位置におけるビットの値を第2の連続したビットストリングとして1つ又は複数の結果パックドデータオペランドに格納し、第2の連続したビットストリングは、3つの3D座標からなる所定のセットのうち第2の3D座標に対応する。実行ユニットはまた、少なくとも所定の3Dモートン座標の2、5、8、11、14、17、20、23、26、29、32、及び35の位置におけるビットの値を第3の連続したビットストリングとして1つ又は複数の結果パックドデータオペランドに格納し、第3の連続したビットストリングは、3つの3D座標からなる所定のセットのうち第3の3D座標に対応する。
例5は例1に記載のプロセッサを含み、ここで実行ユニットは、3Dモートン座標変換命令を復号する復号ユニットに応答して、3Dモートン座標変換命令により示される3つのデスティネーション記憶位置に3つの結果パックドデータオペランドを格納する。これらの結果パックドデータオペランドのそれぞれにおける3D座標は、同じ次元に任意で対応する。
例6は例5に記載のプロセッサを含み、ここで、ソースパックドデータオペランドを格納するのに用いられるパックドデータレジスタが、複数の結果パックドデータオペランドの1つを格納する3つのデスティネーション記憶位置の1つとしても用いられるということは任意で、3Dモートン座標変換命令に暗に示される。
例7は例1に記載のプロセッサを含み、ここで、実行ユニットは、3Dモートン座標変換命令を復号する復号ユニットに応答して、3Dモートン座標変換命令により示される単一のデスティネーション記憶位置に単一の結果パックドデータオペランドを格納する。3つの3D座標からなる各セットは任意で、対応する3Dモートン座標を有するソースパックドデータオペランドのデータ要素と同じ相対位置にある単一の結果パックドデータオペランドの異なるデータ要素に格納される。
例8は例1に記載のプロセッサを含み、ここで所定の3Dモートン座標は、ソースパックドデータオペランドの32ビットデータ要素に格納される。所定の3Dモートン座標に対応する、3つの3D座標からなる所定のセットの各3D座標は任意で、7ビットから10ビット、又は8ビットから10ビット、あるいは9ビット又は10ビットを含む。
例9は例1に記載のプロセッサを含み、ここで所定の3Dモートン座標は、ソースパックドデータオペランドの64ビットデータ要素に格納される。所定の3Dモートン座標に対応する、3つの3D座標からなる所定のセットの各3D座標は任意で、15ビットから21ビット、又は18ビットから21ビットを含む。
例10は例1に記載のプロセッサを含み、分岐を予測する任意の分岐予測ユニットと、この分岐予測ユニットに結合される任意の命令プリフェッチユニットとをさらに含む。命令プリフェッチユニットは、3Dモートン座標変換命令を含む命令をプリフェッチする。任意で、レベル1(L1)命令キャッシュが含まれ、命令プリフェッチユニットに結合される。L1命令キャッシュは、3Dモートン座標変換命令を含む命令を格納する。任意のL1データキャッシュが、データを格納するために含まれてよい。任意のレベル2(L2)キャッシュが、データと3Dモートン座標変換命令を含む命令とを格納するために含まれてよい。任意の命令フェッチユニットが、3Dモートン座標変換命令をL1命令キャッシュからフェッチし、その3Dモートン座標変換命令を復号ユニットに提供するために、L1命令キャッシュ及び復号ユニットに結合される。
任意のレジスタリネームユニットが、パックドデータレジスタをリネームするためにパックドデータレジスタに結合される。
例11は、3次元(3D)モートン座標変換命令を受信する段階を含むプロセッサにおける方法である。3Dモートン座標変換命令は、複数の3Dモートン座標を含むソースパックドデータオペランドを示し、且つ1つ又は複数のデスティネーション記憶位置を示す。本方法はまた、1つ又は複数の結果パックドデータオペランドを1つ又は複数のデスティネーション記憶位置に格納する段階を含む。1つ又は複数の結果パックドデータオペランドは、3つの3D座標からなる複数のセットを含む。3次元座標のセットのそれぞれは、3次元モートン座標の異なる1つに対応する。
例12は例11に記載の方法を含み、対応する3Dモートン座標のビットに3通りのビット単位のデインターリーブを実行して、3つの3D座標のうち異なる1つにそれぞれ対応する3つの連続したビットストリングにすることで、3つの3D座標からなるセットのそれぞれを生成する段階をさらに含む。
例13は例11に記載の方法を含み、ここで1つ又は複数の結果パックドデータオペランドを格納する段階は、3Dモートン座標変換命令により示される3つのデスティネーション記憶位置に3つの結果パックドデータオペランドを格納する段階を任意で含む。結果パックドデータオペランドのそれぞれの3D座標は、全て任意で同じ次元に対応する。
例14は例11に記載の方法を含み、ここで1つ又は複数の結果パックドデータオペランドを格納する段階は、3Dモートン座標変換命令により示される単一のデスティネーション記憶位置に単一の結果パックドデータオペランドを格納する段階を任意で含む。3つの3D座標の各セットは、対応する3Dモートン座標を有するソースパックドデータオペランドのデータ要素と同じ相対位置にある単一の結果パックドデータオペランドの異なるデータ要素に任意で存在する。
例15は例11に記載の方法を含み、32ビットデータ要素に格納された所定の3Dモートン座標を有するソースパックドデータオペランドを受信する段階をさらに含む。また任意で、格納する段階は、所定の3Dモートン座標に対応する3つの3D座標からなる所定のセットを格納する段階を含み、各3D座標は7ビットから10ビットを含む。
例16は例11に記載の方法を含み、ここで1つ又は複数の結果パックドデータオペランドを格納する段階は、少なくとも所定の3Dモートン座標の0、3、6、9、12、15、及び18の位置におけるビットの値を第1の連続したビットストリングとして1つ又は複数の結果パックドデータオペランドに格納する段階を含み、第1の連続したビットストリングは、所定の3Dモートン座標に対応する3つの3D座標からなる所定のセットのうち第1の3D座標に対応する。また任意で、少なくとも所定の3Dモートン座標の1、4、7、10、13、16、及び19の位置におけるビットの値を第2の連続したビットストリングとして1つ又は複数の結果パックドデータオペランドに格納する段階を含み、第2の連続したビットストリングは、3つの3D座標からなる所定のセットのうち第2の3D座標に対応する。また任意で、少なくとも所定の3Dモートン座標の2、5、8、11、14、17、及び20の位置におけるビットの値を第3の連続したビットストリングとして1つ又は複数の結果パックドデータオペランドに格納する段階を含み、第3の連続したビットストリングは、3つの3D座標からなる所定のセットのうち第3の3D座標に対応する。
例17は例11に記載の方法を含み、64ビットデータ要素に格納された所定の3Dモートン座標を有するソースパックドデータオペランドを受信する段階をさらに含む。本方法はまた、所定の3Dモートン座標に対応する3つの3D座標からなる所定のセットを格納する段階を含み、各3D座標は15ビットから21ビットを含む。
例18は例11に記載の方法を含み、ここで1つ又は複数の結果パックドデータオペランドを格納する段階は、少なくとも所定の3Dモートン座標の0、3、6、9、12、15、18、21、24、27、30、及び33の位置におけるビットの値を第1の連続したビットストリングとして1つ又は複数の結果パックドデータオペランドに格納する段階を含み、第1の連続したビットストリングは、所定の3Dモートン座標に対応する3つの3D座標からなる所定のセットのうち第1の3D座標に対応する。また任意で、少なくとも所定の3Dモートン座標の1、4、7、10、13、16、19、22、25、28、31、及び34の位置におけるビットの値を第2の連続したビットストリングとして1つ又は複数の結果パックドデータオペランドに格納する段階を含み、第2の連続したビットストリングは、3つの3D座標からなる所定のセットのうち第2の3D座標に対応する。また任意で、少なくとも所定の3Dモートン座標の2、5、8、11、14、17、20、23、26、29、32、及び35の位置におけるビットの値を第3の連続したビットストリングとして1つ又は複数の結果パックドデータオペランドに格納する段階を含み、第3の連続したビットストリングは、3つの3D座標からなる所定のセットのうち第3の3D座標に対応する。
例19は命令を処理するシステムであり、本システムは相互接続と当該相互接続に結合されたプロセッサとを含む。複数のデータ要素を含むソースパックドデータオペランドを示し、且つ1つ又は複数のデスティネーション記憶位置を示す命令を、プロセッサは受信する。プロセッサは、命令に応答して、1つ又は複数の結果パックドデータオペランドを1つ又は複数のデスティネーション記憶位置に格納する。1つ又は複数の結果パックドデータオペランドは、ソースパックドデータオペランド内の各データ要素に対して、対応する3つのビットストリングのセットを含む。3つのビットストリングの各セットは、第1のビットストリング、第2のビットストリング、及び第3のビットストリングを含む。第1のビットストリングはそれぞれ、ソースパックドデータオペランドの対応するデータ要素の少なくとも0、3、6、9、12、15、及び18の位置におけるビットの値を含む。第2のビットストリングはそれぞれ、ソースパックドデータオペランドの対応するデータ要素の少なくとも1、4、7、10、13、16、及び19の位置におけるビットの値を含む。第3のビットストリングはそれぞれ、ソースパックドデータオペランドの対応するデータ要素の少なくとも2、5、8、11、14、17、及び20の位置におけるビットの値を含む。システムはまた、相互接続に結合された任意のダイナミックランダムアクセスメモリ(DRAM)を含む。
例20は例19に記載のシステムを含み、ここでプロセッサは命令に応答して、3つの結果パックドデータオペランドを3つのデスティネーション記憶位置に格納し、3つの結果パックドデータオペランドのうち1つは、第1のビットストリングの全てを格納する。
例21は、非一時的機械可読記憶媒体を含む製造品である。非一時的機械可読記憶媒体は命令を格納する。命令は、複数のデータ要素を含むソースパックドデータオペランドを示し、且つ1つ又は複数のデスティネーション記憶位置を示す。命令は、機械により実行されると、1つ又は複数の結果パックドデータオペランドを1つ又は複数のデスティネーション記憶位置に格納することを含むオペレーションを機械に実行させる。1つ又は複数の結果パックドデータオペランドは、ソースパックドデータオペランド内の各データ要素に対して対応する3つのビットストリングのセットを含む。3つのビットストリングの各セットは、第1のビットストリング、第2のビットストリング、及び第3のビットストリングを含む。第1のビットストリングはそれぞれ、ソースパックドデータオペランドの対応するデータ要素の少なくとも0、3、6、9、12、15、及び18の位置におけるビットの値を含む。第2のビットストリングはそれぞれ、ソースパックドデータオペランドの対応するデータ要素の少なくとも1、4、7、10、13、16、及び19の位置におけるビットの値を含む。第3のビットストリングはそれぞれ、ソースパックドデータオペランドの対応するデータ要素の少なくとも2、5、8、11、14、17、及び20の位置におけるビットの値を含む。
例22は例21に記載の製造品を含み、ここでプロセッサは命令に応答して、単一の結果パックドデータオペランドを単一のデスティネーション記憶位置に格納する。
例23は、例11から例18のいずれか1つに記載の方法を実行するよう動作するプロセッサ又は他の装置である。
例24は、例11から例18のいずれか1つに記載の方法を実行する手段を含むプロセッサ又は他の装置である。
例25は、例11から例18のいずれか1つに記載の方法を実行するモジュール及び/又はユニット及び/又はロジック及び/又は回路及び/又は手段のうち任意の組み合わせを含むプロセッサ又は他の装置である。
例26は、プロセッサ、コンピュータシステム、電子デバイス、又は他の機械により実行された場合、及び/又は実行されるとき、例11から例18のいずれか1つに記載の方法を機械に実行させるよう動作する命令を任意で格納する、又は別の方法でそれを提供する非一時的機械可読媒体を任意に含む製造品である。
例27は、実質的に本明細書に説明されるプロセッサ又は他の装置である。
例28は、実質的に本明細書に説明される任意の方法を実行するよう動作するプロセッサ又は他の装置である。