ここでは、複数のソート加速命令、複数の命令を実行するための複数のプロセッサ、複数の命令を処理または実行する場合に複数のプロセッサによって実行される複数の方法、および、複数の命令を処理または実行するための1または複数のプロセッサを組み込んだ複数のシステム、が開示される。以下の説明では、多数の特定の詳細が記載される(例えば、複数の特定の命令オペレーション、複数のパックドデータフォーマット、複数のプロセッサ構成、マイクロアーキテクチャの詳細、複数のオペレーションによる複数のシーケンスなど)。しかしながら、複数の実施形態が、これらの特定の詳細を有さずに実施されてよい。他の複数の例では、説明の理解が分かりにくくなることを避けるべく、周知の回路、周知の構造および周知の技術は、詳細を示していない。
図1は、ソート加速命令102の実施形態を実行可能なプロセッサ100の実施形態のブロック図である。いくつかの実施形態において、プロセッサは、(例えば、デスクトップ、ラップトップ、または他の複数のコンピュータでしばしば使用されるタイプの)汎用プロセッサであってよい。あるいは、プロセッサは特殊目的プロセッサであってよい。これらに限られるわけではないが、適切な特殊目的プロセッサの例として、ネットワークプロセッサ、通信プロセッサ、グラフィクスプロセッサ、暗号プロセッサ、コプロセッサ、組込みプロセッサ、デジタルシグナルプロセッサ(DSP)、およびコントローラ(マイクロコントローラ)を含む。プロセッサは、さまざまな複合命令セットコンピューティング(CISC)プロセッサ、縮小命令セットコンピューティング(RISC)プロセッサ、超長命令語(VLIW)プロセッサ、それらのハイブリッド、またはその他のタイプのいずれであってよく、あるいは、そのような異なるプロセッサ(例えば、異なる複数のコア中で)の組み合わせを有してもよい。
オペレーションの間、プロセッサ100は、ソート加速命令102の実施形態を受信してよい。例えば、命令は、命令取出しユニットおよび命令キューなどから受信されてよい。ソート加速命令は、マクロ命令、アセンブリ言語命令、マシン語命令、または、プロセッサの命令セットの命令若しくは制御信号、を表してよい。いくつかの実施形態においてソート加速命令は、ソースパックドデータ110を、(例えば、1または複数のフィールドまたは1セットの複数ビットによって)明示的に規定するか、あるいは(例えば暗示的に示すなどして)示してよく、結果パックドデータ114が格納されるべき宛先(例えば、行き先格納位置)を規定するかあるいは示してよい。いくつかの実施形態において、命令は、任意選択的に第2のソースパックドデータ112を規定するかあるいは示してよく、いくつかの実施形態では、第2の結果パックドデータ116が格納されるべき第2の宛先(例えば、行き先格納位置)を、任意選択的に規定するかあるいは示してよい。
再び図1を参照するとプロセッサはデコードユニットまたはデコーダ104を含む。デコードユニットは、ソート加速命令をデコードしてよい。デコードユニットは、1または複数の、マイクロ命令/マイクロオペレーション/マイクロコードエントリーポイント/デコードされた命令もしくは制御信号、または、その他の比較的下位レベルの命令もしくは制御信号を出力してよく、これらはソート加速命令を反映し、表し、および/またはソート加速命令から導出される。1または複数の下位レベルの命令または制御信号は、1または複数の下位レベルのオペレーション(例えば、回路レベルまたはハードウェアレベル)によって、高位レベルの命令を実行してよい。いくつかの実施形態においてデコードユニットは、命令を受信するための1または複数の入力構造(1または複数のポート、1または複数の相互接続、インターフェース、など)、複数の入力構造に連結され、命令を認識しデコードするための命令認証デコードロジック、命令認証デコードロジックに連結され1または複数の対応する下位レベルの命令または制御信号を出力するための1または複数の出力構造(1または複数のポート、1または複数の相互接続、インターフェース、など)を有してよい。デコードユニットは様々な異なるメカニズムを用いて実装されてよく、これに限定されるものではないが、当該メカニズムは、複数のマイクロコード読み出し専用メモリ(ROM)、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラム可能ロジックアレイ(PLA)、および、当技術分野において周知のデコードユニットを実装するために用いられるその他の複数のメカニズムを含む。
いくつかの実施形態では、デコードユニットへ直接提供されるソート加速命令ではなく、命令エミュレータ、翻訳器、モーフィング器、インタープリター、またはその他の命令変換モジュールが、任意選択的に使用されてよい。当技術分野において、様々なタイプの命令変換モジュールが知られており、ソフトウェア、ハードウェア、ファームウェアまたはその組み合わせで実装されてよい。いくつかの実施形態では、命令変換モジュールは、例えば、別個のダイの上、および/またはメモリの中(スタティック、ダイナミックまたはランタイムエミュレーションモジュール等として)などのように、プロセッサ外に位置してよい。一例として、命令変換モジュールは、ソート加速命令を受信してよく、これは第1の命令セットであってよく、そして命令変換モジュールは、ソート加速命令を、1または複数の対応または導出された中間命令または制御信号へとエミュレート、翻訳、モーフィング、解釈、または変換してよく、この中間命令または制御信号は第2の異なる命令セットであってよい。第2の命令セットにおける1または複数の中間命令または制御信号は、デコードユニットへ提供されてよく、デコードユニットは、それらを、プロセッサのネイティブハードウェア(1または複数の実行ユニットなど)によって実行可能な、1または複数の下位レベルの命令または制御信号へとデコードしてよい。
プロセッサ100は、また、複数のパックドデータレジスタ108の1セットを含んでよい。複数のパックドデータレジスタのそれぞれは、パックドデータ、ベクトルデータまたはSIMDデータを格納可能なオンダイの格納位置を表してよい。複数のパックドデータレジスタは、アーキテクチャ的に可視の複数のレジスタ(アーキテクチャレジスタファイルなど)を表してよい。アーキテクチャ的に可視の複数のレジスタまたはアーキテクチャ的な複数のレジスタは、ソフトウェアおよび/またはプログラマにとって可視であり、かつ/あるいは、複数のオペランドを特定するプロセッサの命令セットにおける複数の命令により示される複数のレジスタである。これらの複数のアーキテクチャレジスタは、所与のマイクロアーキテクチャ(例えば、複数の一時レジスタ、複数のリオーダ・バッファ、複数のリタイアメントレジスタなど)における、その他の非アーキテクチャ的なまたは非アーキテクチャ的に可視の複数のレジスタとは、対照をなす。複数のパックドデータレジスタは、複数の周知の技法を用いて異なる複数のマイクロアーキテクチャに異なる方法で実装されてよく、そして、いかなる特定の回路のタイプにも限定されない。これに限定されるわけではないが、複数のレジスタの適切なタイプの例としては、複数の専用物理レジスタ、レジスタリネーミングを使用して動的に割り当てられる複数の物理レジスタ、およびそれらの組み合わせを含む。
いくつかの実施形態において示されるように、第1のソースパックドデータ110、オプショナルの第2のソースパックドデータ112、第1の結果パックドデータ114、およびオプショナルの第2の結果パックドデータ116は、それぞれ、複数のパックドデータレジスタに任意選択的に格納されてよい。これに代えて、複数のメモリ位置またはその他の複数の格納位置が、これらの複数のオペランドのうちの1または複数のために使用されてよい。さらには、別個のものとして図示されてはいるが、いくつかの実施形態においては、1つのソースパックドデータのために用いられる1つのパックドデータレジスタは、行き先格納位置として再利用されてよい(例えば、1つの結果パックドデータは、そのソースパックドデータの上に書き込まれてよい)。
再び図1を参照すると、実行ユニット106が、デコードユニット104および複数のパックドデータレジスタ108に連結される。実行ユニットは、ソート加速命令を表すおよび/またはソート加速命令から導出される、1または複数のデコードまたは変換された複数の命令または複数の制御信号を受信してよい。実行ユニットは、また、第1のソースパックドデータ110を受信してよく、いくつかの実施形態では、第2のソースパックドデータ112を受信してよい。実行ユニットは、ソート加速命令に応答して、および/または、ソート加速命令の結果として、(例えば、命令からデコードされた1または複数の命令または制御信号に応答して)、命令によって示された第1の宛先に第1の結果パックドデータ114を格納し、かつ、いくつかの実施形態においては、命令によって示された第2の宛先に第2の結果パックドデータ116格納するように、動作可能であるか、またはそのように構成される。いくつかの実施形態において、実行ユニットは、また、任意選択的に結果マスク120を(例えば、複数のマスクレジスタ118のオプショナルなセットに)格納してよい。様々な実施形態において、結果パックドデータおよび/または結果マスクは、図3−4または6−13のいずれであってもよい。
実行ユニットおよび/またはプロセッサは、具体的なまたは特定のロジック(例えば、複数のトランジスタ、集積回路または、ファームウェア(例えば、不揮発性メモリに格納された命令)および/またはソフトウェアと組み合わせることができるその他のハードウェア)を有してよく、上記ロジックは、命令に応答しておよび/または命令の結果として、ソート加速命令および/またはその結果の格納を実行可能である。一例として、実行ユニットは、算術ロジックユニット、ロジックユニット、データ再配列ユニット、またはそれに同等のものを有してよい。いくつかの実施形態において、実行ユニットは、複数のソースオペランドを受信するための1または複数の入力構造(1または複数のポート、1または複数の相互接続、インターフェース、など)と、ソースパックドデータを受信・処理し、結果パックドデータを生成するための、1または複数の入力構造に連結されたソート回路またはロジック107と、結果パックドデータを出力するための、ソート回路またはロジック107に連結された、1または複数の出力構造(1または複数のポート、1または複数の相互接続、インターフェース、など)と、を有してよい。一例として、ソート回路またはロジックは、比較交換チェーン、選択もしくはルーティングヒエラルキーに基づく値、または、その他のソート回路もしくはロジックを有してよい。
図2は、シングル・ソースソート・複数インデックス・命令の実施形態を実行する方法225の実施形態のブロック流れ図である。様々な実施形態において、方法は、プロセッサ(例えば図1のプロセッサ)、命令処理装置または集積回路により実行されてよい。図1のプロセッサのためにここで記載された複数のコンポーネント、複数の特徴および複数の特定のオプショナルな詳細は、また任意選択的に、図2における複数のオペレーションおよび/または方法へ適用する。
ブロック226において、方法は、シングル・ソースソート・複数インデックス・命令を受信する段階を有する。命令は、プロセッサまたはその一部(例えば、命令取出しユニット、デコードユニット、バスインターフェースユニット)で受信されてよい。様々な態様において、命令は、オフダイのソースから(例えば、メモリ、相互接続などから)、または、オンダイのソースから(例えば、命令キャッシュ、命令キューから)受信されてよい。命令は、ソートされた順序とはなっていない(例えば、パックドデータにおいて大きさが増加または減少するようには、ソートされていない)少なくとも4つのデータ要素を含むソースパックドデータを、規定しあるいは示してよい。命令は、また、行き先格納位置を、規定しあるいは示してよい。
ブロック227において、命令に応答して、および/または、命令の結果として、結果パックドデータが、行き先格納位置に格納される。典型的には、実行ユニットまたはプロセッサは、命令を実行して、その結果を格納してよい。結果パックドデータは、少なくとも4つのインデックスを有してよい。いくつかの実施形態において、複数インデックスは、ソースパックドデータにおける対応する複数のデータ要素を特定してよい。いくつかの実施形態において、複数インデックスは、結果パックドデータにおける複数の位置に格納されてよく、これらの位置は、ソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す。即ち、複数インデックスは、複数のインデックス自体の値に基づいてではなく、むしろ、ソースパックドデータにおいて、それらのインデックスが対応する複数のデータ要素の値に基づいて、ソートされた順序で格納されてよい。いくつかの実施形態において、結果パックドデータは、ソースパックドデータにおける全データ要素に対応する複数インデックスを有してよい。
図3は、シングル・ソースソート・複数インデックス・オペレーション330の実施形態を例示するブロック図であって、シングル・ソースソート・複数インデックス・命令の実施形態に応答して実行されてよい。シングル・ソースソート・複数インデックス・命令は、少なくとも4つのデータ要素を含むソースパックドデータ310を、規定しあるいは示してよい。ソースパックドデータは、パックドデータレジスタ、メモリ位置、またはその他の格納位置に格納されてよい。一般的に、ソースパックドデータにおける複数のデータ要素の数は、各データ要素のビットサイズまたはビット幅で割り算されたソースパックドデータのビットサイズまたはビット幅に等しくてよい。様々な実施形態において、ソースパックドデータの幅は、64ビット、128ビット、256ビット、512ビットまたは1024ビットであってよい。様々な実施形態において、各データ要素の幅は、8ビット、16ビット、32ビットまたは64ビットであってよい。ある特定の限定的ではない例において、ソースパックドデータは512ビット幅であってよく、かつ、16個の32ビットのデータ要素または8個の64ビットのデータ要素を有してよい。複数のデータ要素は、整数、固定小数点、または浮動小数点の形式を有してよい。
特定の図示された例において、ソースパックドデータは、8個のデータ要素を有する。8個のデータ要素は、右側の最小有効ビットまたは最下位ビット位置から、左側の最大有効ビットまたは最上位ビット位置まで、−4、1、8、12、43、55、1、12という複数の値を有する。これらの値は、ソートされた順序になっていない(例えば、パックドデータにおいて増加順または減少順ではソートされていない)。
結果パックドデータ314は、シングル・ソースソート・複数インデックス・命令に応答して、(例えば、実行ユニット106により)生成され、行き先格納位置に格納されてよい。行き先格納位置は、命令により、規定されるかまたは示されてよい。様々な実施形態において、行き先格納位置は、パックドデータレジスタ、メモリ位置、または、その他の格納位置であってよい。行き先格納位置は、ソースパックドデータのために用いられるのと同じ格納位置または異なる格納位置のいずれかであってよい。
いくつかの実施形態において、結果パックドデータは、少なくとも4個のインデックスを有してよい。特に図示された例では、結果パックドデータは8個のインデックスを有する。各インデックスは、ソースパックドデータにおける対応する単一のデータ要素を、指し示し、特定し、または、単一のデータ要素と関連してよい。複数のデータ要素のそれぞれは、対応するインデックスによって示されるソースパックドデータ内に位置してよい。インデックスは、オペランド内でのデータ要素の相対位置またはオフセットを表してよい。例えば、可能性のある1つの規定によれば、これは図中で使用されているものであるが、0から7のインデックス値が、パックドデータを最下位のビット位置から最上位のビット位置へと(見て取れるように右から左へ)横断する第1から第8の位置における8個のデータ要素を表してよい。更に例示すると、−4という値を有するデータ要素はインデックス0を有し、8という値を有するデータ要素はインデックス2を有し、43という値を有するデータ要素はインデックス4を有する、という具合である。これに代えて、様々なその他のインデックスを付す規定が、任意選択的に使用されてよい(例えば、0ではなく1から開始する、7から0へと逆にインデックスを付ける、任意のマッピング規定とする、など)。示される例において、複数のインデックスは、インデックスが付けられた複数の位置を表すのに十分な多数のビット数(例えば、示される例では3ビット)を有してよい。
いくつかの実施形態において、複数インデックスは、結果パックドデータにおける複数の位置に格納されてよく、それらはソースパックドデータにおける対応する複数のデータ要素のソートされた順序を表す。示される例において、ソートされた順序とは最下位のビット位置から最上位のビット位置へと増加する増加順であるが、これに代えて減少順を任意選択的に使用してもよい。示される例において、複数の値に対して、増加するソート順序は、−4、1、1、8、12、12、43、55となる。結果として、−4という値を有するデータ要素に対応するインデックス値0が、結果パックドデータの第1のまたは最下位の位置に格納され、1という値を有する最も右側のデータ要素に対応するインデックス値1が、第2のまたは次に最下位の位置に格納される、という具合である。この図では、複数の矢印が、複数インデックスおよび複数データ要素の間の対応を示すために用いられる。
結果パックドデータは、ソートされた複数インデックスを格納するが、ソートされた複数のソースデータ要素を格納しないことに注意されたい。いくつかの実施形態では、複数のソースデータ要素をソートするために、ソートされた複数のインデックスが、任意選択的に、異なる命令により続けて使用されてよい。例えばいくつかの実施形態において、複数のソースデータ要素をソートするために、並べ替え命令やシャッフル命令などが複数インデックスを使用してよい。例えば、並べ替えまたはシャッフル命令は、複数インデックスを有する結果パックドデータ314を第1のソースオペランドとして、およびソースパックドデータ310を第2のソースオペランドとして示してよく、それら複数のインデックスを制御することに基づいて格納される複数データ要素を有する結果パックドデータを格納してもよい。適切な命令の一つの特定な例としては、VPERMD命令があり、これはカリフォルニア、サンタクララのインテル株式会社から利用可能な、2013年12月に出版された、Intel Architecture Instruction Set Extensions Programming Reference、319433−017に記載されている。
しかしながら、いくつかの実装においては、ソートされた複数データ要素ではなく、複数インデックスを格納する方が有利である。例えば、ソートされた複数インデックスは、ソースパックドデータ310における複数のソースデータ要素に加えて、または代えて、他のデータをソートするために用いられてよい。例えば、このことは、複数のソースデータ要素が、複数のソートキーとして用いられ、かつ多数のデータ要素とそれぞれ関連するような様々な異なるデータ構造において、あてはまってよい。更に例示するために、複数の行と列とに配列されたテーブルの(例えば、スプレッドシートにおける)簡単な例を検討する。1つの列が複数の発明者名をリストし、別の1列が発明者識別番号をリストする。複数の名前および複数の識別番号の両方が、一緒にかつ互いに一貫性を保ったままソートされる必要があるかもしれない。1例として、ソートは、ソートキーとして名前に基づくものであってよく、ソートされた複数インデックスが結果として格納されてよい。ソートされた複数インデックスは、複数の名前および複数の識別番号の両方をソートするために用いられてよい。従って、いくつかの実装では、ソートされた複数インデックスを格納することは、ソートされた複数のデータ要素を格納する場合と比して、フレキシビリティと、関連する他のデータをソートすることができるなどの、複数の利点を提供してよい。
いくつかの実施形態において、ソートは、不変の順序(例えば、昇順)で行われてよい。不変というのは、2つの要素が等しい複数のサーチキーを有する場合に、それらの要素の間の相対的順序が変化しないことを意味する。例えば、2つの行に同じ発明者名であるが異なる識別番号がある場合、名前に従ってテーブルをソートしてもこれらの識別番号の順序は変化しない。これは、不変ではない順序とは対照的であって、そのような場合には、相対的順序は保証されず、等しい複数のキーを有する複数の要素はシャッフルされうる。
図4は、シングル・ソースソート・複数インデックスおよび複数データ要素・オペレーション432の実施形態を例示するブロック図であって、オペレーションはシングル・ソースソート・複数インデックスおよび複数データ要素・命令の実施形態に応答して実行されてよい。図4のオペレーションは、図3のオペレーションとある程度の類似性を有する。説明が分かりにくくなることを避けるために、図4のオペレーションに対する異なるおよび/または追加の複数の特徴が主として説明され、図3のオペレーションと比べて、任意選択的に類似または共通する全ての特徴および詳細を、繰り返すことはしない。しかしながら、そうではない旨が述べられるか、あるいは、そうではないことが明確であるという場合以外には、先述した図3のオペレーションにおける複数の特徴および詳細は、また、任意選択的に図4のオペレーションに適用してよい。
シングル・ソースソート・複数インデックスおよび複数データ要素命令は、少なくとも4つのデータ要素を有するソースパックドデータ410を、規定しあるいは示してよい。ソースパックドデータおよび複数データ要素は、本明細書の他の箇所で(例えば、図3において)記載されたものであってよい。
第1の結果パックドデータ414は、命令に応答して(例えば、実行ユニット106によって)生成され、第1の行き先格納位置に格納されてよい。第1の結果パックドデータ414は、少なくとも4個のインデックスを有してよい。第1の結果パックドデータは、本明細書の他の箇所で(例えば、図3において)記載されたものであってよい。
本実施形態では、命令に応答して、第2の結果パックドデータ416がまた生成され、第2の行き先格納位置に格納されてよい。第2の行き先格納位置は、命令によって規定されるかまたは示されてよく、そしてパックドデータレジスタ、メモリ位置、またはその他の格納位置であってよい。第2の結果パックドデータは、対応する複数のデータ要素を有してよく、これらのデータ要素は、第1の結果パックドデータ414に格納され、ソートされた順序を反映する第2の結果パックドデータ416における複数の位置に格納された、複数のインデックスに対応する。例えば、増加するソート順序では、第2の結果パックドデータは、図の右から左へ−4、1、1、8、12、12、43、55という複数の値を格納してよい。他の実施形態では、代わりに、複数インデックスおよび複数データ要素に対して減少順が用いられてよい。
ソートされた複数インデックスは、図3において、結果として格納される。ソートされた複数インデックスおよびソートされた複数のデータ要素の両方が、図4において、結果として格納される。他の実施形態では、複数インデックスではなく複数のソートデータ要素が、命令に応答して任意選択的に格納されてよい。
図5は、2つのソースソート・複数インデックス・命令の実施形態を実行する方法535の実施形態のブロック流れ図である。様々な実施形態において、方法は、プロセッサ(例えば、図1のプロセッサ)、命令処理装置、デジタルロジックデバイス、または集積回路により実行されてよい。図1のプロセッサのためにここで記載された複数のコンポーネント、複数の特徴および複数の特定のオプショナルな詳細は、また任意選択的に、図5における複数のオペレーションおよび/または方法へ適用する。
ブロック536において、方法は、2つのソースソート・複数インデックス・命令を受信する段階を有する。様々な態様において、命令は、プロセッサまたはその一部(例えば、命令取出しユニット、デコードユニット、バスインターフェースユニット)で受信されてよい。様々な態様において、命令は、オフダイのソースから(例えば、メモリ、相互接続などから)、または、オンダイのソースから(例えば、命令キャッシュ、命令キューから)受信されてよい。2つのソースソート・複数インデックス・命令は、少なくとも4つのデータ要素の第1のセットを含む第1のソースパックドデータを規定しあるいは示してよく、そして、少なくとも4つのデータ要素の第2のセットを含む第2のソースパックドデータを規定しあるいは示してよい。命令は、また、行き先格納位置を規定し、あるいは示してよい。
再度図5を参照すると、ブロック537において、2つのソースソート・複数インデックス・命令に応答して、および/または、その結果として、結果パックドデータが、行き先格納位置に格納される。典型的には、実行ユニットまたはプロセッサは、命令を実行し、その結果を格納してよい。結果パックドデータは、少なくとも4つのインデックスを有してよい。いくつかの実施形態において、複数インデックスは、第1および第2のソースパックドデータにおける対応するデータ要素の複数の位置を特定してよい。いくつかの実施形態において、複数インデックスは、実際には、第1および第2のソースパックドデータの1つにおいて、単一の対応する複数データ要素を特定してよい(例えば図6−9を参照)。或いは、複数インデックスは、第1および第2のソースパックドデータのそれぞれにおいて、対応するデータ要素の複数の位置を特定するだけであってもよく、そして第1および第2のソースパックドデータの1つを示すために別のビットが用いられてよく、これにより単一の対応するデータ要素を示す(例えば図10−13を参照)。複数インデックスは、第1および第2のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す結果パックドデータにおける複数の位置に格納されてよい。その結果は、2つのソースのいずれかにおける複数データ要素に対応するソートされた複数インデックスを格納した併合ソートを表す。
図6は、複数データ要素・オペレーション640の最小の半分のための2つのソースソート・複数インデックスの実施形態を例示するブロック図であり、オペレーションは複数データ要素の命令における最小の半分に対する2つのソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも4つのデータ要素の第1のセットを含む第1のソースパックドデータ610を、規定しあるいは示してよく、そして、少なくとも4つのデータ要素の第2のセットを含む第2のソースパックドデータ612を、規定しあるいは示してよい。第1および第2のソースパックドデータは、それぞれが一方のデータとは独立して、パックドデータレジスタ、メモリ位置、またはその他の格納位置に、格納されてよい。第1および第2のソースパックドデータは、複数のサイズ、複数データ要素の個数、複数データ要素のサイズ、および、本明細書の他の箇所で開示された複数データ要素のタイプ、を有してよい。
特定の図示された例において、第1のソースパックドデータおよび第2のソースパックドデータは、それぞれ、8個のデータ要素を有する。第1のソースパックドデータは、右側の最下位ビット位置から、左側の最上位ビット位置まで、−4、1、1、8、12、12、43、55という複数の値を有する。第2のソースパックドデータは、右側の最下位ビット位置から、左側の最上位ビット位置まで、−14、−12、0、10、16、18、24、60という複数の値を有する。本実施形態において、第1のソースパックドデータでの複数の値および第2のソースパックドデータでの複数の値は、それぞれ、最下位のビット位置から最上位のビット位置へ増加順にソートされる。いくつかの実施形態において、第1および第2のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータオペランド(例えば、正しく動作する命令に対して)内においてソートされた順序であることを仮定されるか(例えば、暗示的に命令に対して仮定される)、または要求されてよい。他のいくつかの実施形態において、第1および第2のソースパックドデータのそれぞれの中の複数データ要素は、ソートされた順序であることを仮定または要求されなくてよい(例えば、複数の要素がソートされない順序である場合に、命令が正しく動作してよい)。
結果パックドデータ614は、命令に応答して(例えば、実行ユニット106によって)生成され、行き先格納位置に格納されてよい。様々な実施形態において、行き先格納位置は、パックドデータレジスタ、メモリ位置、またはその他の格納位置であってよい。行き先格納位置は、第1および第2のソースパックドデータの1つのために用いられるのと同じ格納位置あるいは異なる格納位置のいずれかであってよい。
いくつかの実施形態において、結果パックドデータは、少なくとも4個のインデックスを有してよい。いくつかの実施形態において、結果パックドデータはソースパックドデータの1つにおける複数のデータ要素の数と同数の複数のインデックスを有してよいが、これは必ずしも必要ではない。特に図示された例では、結果パックドデータは8個のインデックスを有する。各インデックスは、第1および第2のソースパックドデータにおける対応するデータ要素の複数の位置を、指し示し、特定し、または、対応するデータ要素の複数の位置と関連してよい。いくつかの実施形態において、複数インデックスは、実際には、第1および第2のソースパックドデータの1つにおいて、単一の対応する複数データ要素を特定してよい。複数データ要素のそれぞれは、第1および第2のソースパックドデータ内に、インデックスが付けられた位置を有してよい。インデックスは、第1および第2のソースパックドデータ内でのデータ要素の相対位置またはオフセットを表してよい。例えば可能性のある1つの規定によれば、これは図中で使用されているものであるが、第1のソースパックドデータ610を最下位のビット位置から最上位のビット位置へ(見て取れるように右から左へ)横断する際に、0から7のインデックス値が8個のデータ要素のインデックスとなってよく、第2のソースパックドデータ612を最下位のビット位置から最上位のビット位置へ(見て取れるように右から左へ)横断する際に、8から15のインデックス値が8個のデータ要素のインデックスとなってよい。示される例において、複数の矢印が、複数インデックスおよび複数データ要素の間の対応を示すために用いられる。図示されるように、−14という値を有するデータ要素はインデックス8を有し、−12という値を有するデータ要素はインデックス9を有する、といった具合である。或いは、特定の実装のための様々なその他のインデックスを付す望ましい規定が、任意選択的に用いられてよい(例えば、0ではなく1から開始する、逆にインデックスを付ける、任意にマッピングされたインデックスを付す規定、など)。
複数インデックスは、結果パックドデータにおける複数の位置に格納されてよく、これらは第1および第2のソースパックドデータにおける対応する複数のデータ要素のソートされた順序を表す。いくつかの実施形態において、複数インデックスは、第1および第2のソースパックドデータにおける複数データ要素の全ての順序部分集合のみに対して格納されてよい。いくつかの実施形態において、順序部分集合とは、全データ要素における順序づけられた最小の部分集合(例えば、最小の半分)であってよい。示される例において、8個の最小の値は、−14、 −12、−4、0、1、1、8、10である。示される実施形態において、8個のインデックスは、結果パックドデータにおける複数の位置に格納され、複数の位置は、第1および第2のソースパックドデータにおける対応する8個の最小のデータ要素のソートされた増加順(最下位のビット位置から最上位のビット位置へと増加する)を表す。図示されるように、−14という値を有するデータ要素に対応するインデックス8が、結果パックドデータにおける最下位の位置に格納され、−12という値を有するデータ要素に対応するインデックス9が、次に最下位の位置に格納され、−4という値を有するデータ要素に対応するインデックス0が、3番目の最下位の位置に格納される、という具合である。他の実施形態において、減少順または逆順序が任意選択的に用いられてよい。ソートオペレーションは、第1および第2のソースパックドデータの両方に対するソートされた複数インデックスを、併合する。
図7は、複数データ要素・オペレーション742の最大の半分のための2つのソースソート・複数インデックスの実施形態を例示するブロック図であり、オペレーションは複数データ要素の命令における最大の半分に対する2つのソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも4つのデータ要素の第1のセットを含む第1のソースパックドデータ710を、規定あるいは示してよく、そして、少なくとも4つのデータ要素の第2のセットを含む第2のソースパックドデータ712を、規定あるいは示してよい。第1および第2のソースパックドデータは、本明細書の他の箇所で記載した複数の特徴および変形例を有してよい。他の複数の実施形態やその他の命令ではこのことは必要ではないが、示される実施形態では、第1のソースパックドデータの複数の値、および第2のソースパックドデータの複数の値は、増加順にソートされる。
結果パックドデータ714は、命令に応答して(例えば、実行ユニット106によって)生成され、行き先格納位置に格納されてよい。いくつかの実施形態において、結果パックドデータは、少なくとも4個のインデックスを有してよい。いくつかの実施形態において、複数インデックスは、第1および第2のソースパックドデータの1つにおいて、単一の対応する複数データ要素を特定してよい。いくつかの実施形態において、複数インデックスは、第1および第2のソースパックドデータにおいて対応する複数データ要素のソートされた順序を表す結果パックドデータにおける複数の位置に格納されてよい。
図7の実施形態において順序部分集合は、最小の部分集合である順序部分集合ではなく、順序づけられた最大の部分集合であってよく、例えば、第1および第2のソースパックドデータにおける複数データ要素の全ての最大の半分、であってよい。例えば、8個のインデックスは、結果パックドデータにおける複数の位置に格納されてよく、複数の位置は、第1および第2のソースパックドデータにおいて対応する8個の最大のデータ要素のソートされた順序を表す。例に示された複数データ要素の数値例を検討すると、8個の最大のデータ要素は、12、12、16、18、24、43、55、60という値を有する。示される実施形態において、8個のインデックスは、結果パックドデータにおける複数の位置に格納され、複数の位置は、第1および第2のソースパックドデータにおいて対応する8個の最大のデータ要素のソートされた増加順(最下位のビット位置から最上位ビット位置へと増加する)を表す。図示されるように、12という値を有する最も右側のデータ要素に対応するインデックス4が、最下位の位置に格納され、12という値を有するデータ要素に対応するインデックス5が、次に最下位の位置に格納され、16という値を有するデータ要素に対応するインデックス12が、3番目の最下位の位置に格納される、という具合である。他の実施形態において、代わりに、減少順が任意選択的に用いられてよい。
図6、図7では、最小または最大の半分のみに対する複数インデックスが格納される実施形態を示している。他の実施形態においては、複数のソースオペランドと同じサイズの結果に、最小および最大の半分の両方に対する複数インデックスが、格納されてよい。例えば、このことは、複数インデックスが対応する複数のデータ要素よりも十分に小さい場合(例えば、半分のサイズであるか、それよりも小さい)に、可能であってよい。そのようなアプローチは、いくつかの実装では、長所を提供しうる。或いは、最小および最大の半分に対する複数インデックスは、対応するシャッフル命令やブレンド命令などの利用を促すために、別個のままとされてよい。
図8は、複数データ要素・オペレーション844の最小の半分のための2つのソートされていないソースソート・複数インデックスの実施形態を例示するブロック図であり、オペレーションは複数データ要素の命令の最小の半分のための2つのソートされていないソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも4つのデータ要素の第1のセットを含む第1のソースパックドデータ810を、規定あるいは示してよく、そして、少なくとも4つのデータ要素の第2のセットを含む第2のソースパックドデータ812を、規定あるいは示してよい。特定の図示された例では、第1のソースパックドデータおよび第2のソースパックドデータは、それぞれ、8個のデータ要素を有する。第1のソースパックドデータは、右側の最下位位置から左側の最上位位置まで、−4、1、8、12、43、55、1、12という複数の値を有する。本実施形態において、第1のソースパックドデータにおける複数の値は、ソートされた順序にはなっていない。同様に、第2のソースパックドデータにおける複数の値は、順にソートされてはいない。そのような実施形態において、第1および第2のソースパックドデータのそれぞれの中の複数データ要素は、ソートされた順序であることを仮定または要求されなくてよい(例えば、複数の要素がソートされていない順序である場合に、命令が正しく動作してよい)。
結果パックドデータ814は、命令に応答して(例えば、実行ユニット106によって)生成され、行き先格納位置に格納されてよい。いくつかの実施形態において、結果パックドデータは、少なくとも4個のインデックスを有してよい。いくつかの実施形態において、複数インデックスは、第1および第2のソースパックドデータの1つにおいて、単一の対応する複数データ要素を特定してよい。いくつかの実施形態において、複数インデックスは、第1および第2のソースパックドデータにおける対応する複数データ要素のソートされた順序を表す、結果パックドデータにおける複数の位置、に格納されてよい。示される実施形態において、結果パックドデータは最小の部分集合に対応する複数インデックスを有し、この場合、第1および第2のソースパックドデータにおける全てのデータ要素の最小の半分を有する。他の実施形態では、結果パックドデータは最大の部分集合に対応する複数インデックスを有してよく、例えば、第1および第2のソースパックドデータにおける全てのデータ要素の最大の半分を有してよい。
図9は、複数データ要素・オペレーション946の最小の半分のための、2つのソースソート・複数インデックスおよびデータの実施形態を例示するブロック図であり、オペレーションは、複数データ要素・命令の最小の半分のための2つのソースソート・複数インデックスおよびデータの実施形態に応答して実行されてよい。命令は、少なくとも4つのデータ要素の第1のセットを含む第1のソースパックドデータ910を、規定あるいは示してよく、そして、少なくとも4つのデータ要素の第2のセットを含む第2のソースパックドデータ912を、規定あるいは示してよい。第1および第2のソースパックドデータは、複数のサイズ、複数のデータ要素の個数、複数のデータ要素のサイズ、および、本明細書の他の箇所で開示された複数のデータ要素のタイプ、を有してよい。示された実施形態において、第1および第2のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータオペランド内においてソートされた順序であることを仮定されるか(例えば、暗示的に、命令に対して仮定される)、または要求されてよい。他のいくつかの実施形態において、第1のソースパックドデータおよび第2のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータオペランド内においてソートされた順序であることを仮定または要求されなくてよい。
第1の結果パックドデータ914は、命令に応答して(例えば、実行ユニット106によって)生成され、第1の行き先格納位置に格納されてよい。第1の結果パックドデータ914は、複数インデックスを有してよい。第1の結果パックドデータおよび複数インデックスは、図6に対して先述したのと同類または共通の複数の特徴および詳細を有してよい。示される実施形態において、結果パックドデータは最小の部分集合に対応する複数インデックスを有し、この場合、第1および第2のソースパックドデータにおける全てのデータ要素の最小の半分を有する。他の実施形態では、結果パックドデータは最大の部分集合に対応する複数インデックスを有してよく、例えば、第1および第2のソースパックドデータにおける全てのデータ要素の最大の半分を有してよい。
本実施形態において、第2の結果パックドデータ916は、また命令に応答して生成され、第2の行き先格納位置に格納されてよい。第2の行き先格納位置は、命令によって規定されるかまたは示されてよく、そしてパックドデータレジスタ、メモリ位置、またはその他の格納位置であってよい。第2の行き先格納位置は、第1または第2のソースパックドデータの1つのために用いられるのと同じ格納位置あるいは異なる格納位置のいずれかであってよい。第2の結果パックドデータは、対応する複数データ要素を有してよく、これらのデータ要素は、第1の結果パックドデータに格納され、ソートされた順序を反映する第2の結果パックドデータにおける複数の位置に格納された、複数インデックスに対応する。示される実施形態において、第2の結果パックドデータはソートされた最小の部分集合を有し、この場合、第1および第2のソースパックドデータにおける全てのデータ要素のソートされた最小の半分を有する。具体的には、第2の結果パックドデータは、右から左へ、複数のデータ要素である−14、−12、−4、0、1、1、8、10を格納する。他の実施形態では、第2の結果パックドデータは、代わりに、ソートされた最大の部分集合を有し、例えば、第1および第2のソースパックドデータにおける全てのデータ要素のソートされた最大の半分である。
結果として、ソートされた複数インデックスが図6に格納される。結果として、ソートされた複数インデックスおよびソートされた複数のデータ要素の両方が、図9に格納される。他の実施形態では、複数インデックスではなく複数のソートデータ要素が、命令に応答して任意選択的に格納されてよい。
図7−9には、図6のオペレーションと特定の類似性を有する複数のオペレーションを示す。説明を分かりにくくすることを避けるために、図7−9における複数のオペレーションに対する異なるおよび/または追加の複数の特徴が主として説明され、図6のオペレーションと比べて、任意選択的に類似または共通する全ての特徴および詳細を、繰り返すことはしない。しかしながら、そうではない旨が述べられるか、あるいは、そうではないことが明確であるという場合以外には、先述した図6のオペレーションにおける複数の特徴および詳細は、また、任意選択的に図7−9の複数のオペレーションのいずれに適用してよいことが、認められべきである。
図10は、複数データ要素・オペレーション1048の最小の半分のためのマスクを有する2つのソースソート・複数インデックスの実施形態を例示するブロック図であり、オペレーションは複数データ要素の命令における最小の半分のためのマスクを有する2つのソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも4つのデータ要素の第1のセットを含む第1のソースパックドデータ1010を、規定あるいは示してよく、そして、少なくとも4つのデータ要素の第2のセットを含む第2のソースパックドデータ1012を、規定あるいは示してよい。第1および第2のソースパックドデータは、複数のサイズ、複数のデータ要素の個数、複数のデータ要素のサイズ、および、本明細書の他の箇所で開示された複数のデータ要素のタイプ、を有してよい。
このことは必要ではないが、示される実施形態では、第1のソースパックドデータおよび第2のソースパックドデータのそれぞれにおける複数の値は、順番にソートされる。いくつかの実施形態において、複数のソースデータ要素がそれぞれのパックドデータ内においてソートされた順序であることが仮定される(例えば、暗示的に命令に対して仮定される)か、または要求されてよい。他の実施形態では、減少順が任意選択的に用いられてもよいが、示される例では、複数のオペランドにおいて増加するビット桁を有する増加順が用いられてよい。他の実施形態において、第1のソースパックドデータおよび第2のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータ内においてソートされた順序であることを仮定または要求されなくてよい(例えば、複数の要素がソートされていない順序である場合に、命令が正しく動作してよい)。
結果パックドデータ1014は、命令に応答して(例えば、実行ユニット106によって)生成され、行き先格納位置に格納されてよい。いくつかの実施形態において、結果パックドデータは、少なくとも4個のインデックスを有してよい。いくつかの実施形態において、各インデックスは、第1および第2のソースパックドデータにおける一対の対応するデータ要素の位置を、指し示し、特定し、またはその位置と関連してよい。複数インデックス自体は、単一の対応するデータ要素を実際に特定しなくてもよく、むしろ、実際の対応するデータ要素が第1または第2のソースパックドデータに位置するかどうかを示すことなく、第1および第2のパックドデータにおける一対の対応するデータ要素位置を特定してよい。例えば可能性のある1つの規定によれば、これは図中で使用されているものであるが、第1のソースパックドデータを最下位のビット位置から最上位のビット位置へ(見て取れるように右から左へ)横断する際に、0から7のインデックス値が8個のデータ要素位置を表してよく、そして、第2のソースパックドデータを最下位のビット位置から最上位のビット位置へ横断する際に、同じ0から7のインデックス値が8個のデータ要素位置を表してよい。例えば、43という値を有するデータ要素および24という値を有するデータ要素は両方とも、同じインデックス6を有してよい。以前に述べたように、複数インデックスに対して、様々なその他のインデックスを付す規定が、任意選択的に用いられてよい(例えば、0ではなく1から開始する、逆にまたは降順に規定する、任意にマッピングされた規定とする、など)。そのような実施形態において、インデックス単独では、単一の対応するデータ要素を特定するのには不十分であってよい。
いくつかの実施形態において、複数インデックスは、対応する複数データ要素のソートされた順序を表す結果パックドデータにおける複数の位置に格納されてよい。示される実施形態において、複数インデックスは、結果パックドデータにおける複数の位置に格納され、複数の位置は、対応する複数データ要素のソートされた増加順を表す。他の実施形態においては、減少順が任意選択的に用いられてよい。さらには、示される実施形態において、複数インデックスは、順序づけられた最小の部分集合、例えば、全データ要素における最小の半分のみに対して格納されてよい。或いは、他の実施形態では、最大の部分集合(例えば、最大の半分)や中間の部分集合などが、用いられてよい。或いは、ソースパックドデータにおける全てのデータ要素のための複数インデックスが、任意選択的に格納されてよい。
再度、図10を参照すると、命令に応答して、結果マスク1020が生成され、第2の行き先格納位置に格納されてよい。行き先格納位置は、命令によって規定されるか、または示されてよい。いくつかの実施形態において、第2の行き先格納位置は、マスクレジスタ(例えば、複数のマスクレジスタ118の1つ)であってよい。或いは、結果マスクは、汎用レジスタ、メモリ位置、またはその他の格納位置に格納されてよい。
いくつかの実施形態において、結果マスクは、少なくとも4つのマスク要素を有してよい。いくつかの実施形態において、結果マスクは、結果パックドデータにおける複数インデックスと同じ個数のマスク要素を有してよい。各マスク要素は、結果パックドデータで対応する複数インデックスのうちの異なる1つに対応してよい。各マスク要素は、対応するインデックスによって示されたデータ要素位置における単一の対応するデータ要素が、第1のソースパックドデータに位置するか、その代わりに、第2のソースパックドデータに位置するかを、示してよい。即ち、各マスク要素は、第1および第2のソースパックドデータのうちの1つを特定または選択してよく、これにより、特定のまたは選択されたソースパックドデータにおける複数インデックスが付けられた位置で対応する単一のデータ要素を特定する。
いくつかの実施形態において、各マスク要素は、単一ビットであってよいが、或いは、2又はそれ以上のビットが任意選択的に用いられてよい(例えば、マルチビットデータ要素における最上位または最下位のビット)。例えば可能性のある1つの規定によれば、これは図中で使用されているものであるが、バイナリ値1が設定されている単一ビット(即ち1)は、そのデータ要素が第1のソースパックドデータ1010に位置することを示し、これに対して、バイナリ値ゼロにクリアされているビット(即ち0)は、そのデータ要素が第2のソースパックドデータ1012に位置することを示す。或いは、逆の規定が任意選択的に用いられてよい。更に例示すると、(第2のソースパックドデータを示すために)、−14という値を有するデータ要素は、結果パックドデータの最も右側の位置における対応するインデックス0、および、結果マスクの最も右側の位置におけるマスク要素値0によって、特定される。同様に、(第1のソースパックドデータを示すために)、−4という値を有するデータ要素は、結果パックドデータの右から3番目の位置における対応するインデックス0、および、結果マスクの右から3番目の位置におけるマスク要素値1によって、特定される。
いくつかの実施形態において、必須ではないものの、異なるソースパックドデータにおける2つのインターオペランドデータ要素が複数の等しい値を有する場合に、ソースパックドデータの1つからのそれらの要素は、あたかもより小さな値を有するものとして解釈されるという規定が、採用されてよい。いくつかの実施形態では、必須ではないものの、同じソースパックドデータにおける2つのイントラオペランドデータ要素が複数の等しい値を有する場合に、最下位のデータ要素は、あたかもより小さな値を有するものとして解釈されるという規定が、採用されてよい。
(図6−9で示されたアプローチで行われているように)複数インデックスの中へ組み込むのではなく、結果マスクに追加のパックドデータオペランド選択ビットを含めることが(複数のマスク要素など)、特定の実施形態では、利点を提供してよい。これは、例えば、パックドデータオペレーションをマスクするまたは述語とする(プレディケートする・叙述する)べく、プロセッサが、結果マスクを叙述オペランドとして利用することができる場合に、あてはまってよい。いくつかの実施形態では、対応する複数データ要素の異なる複数ペアに対する複数のオペレーションが、別々におよび/または他と独立してプレディケーションされるかまたは条件付きで制御されるように、マスキングやプレディケーションはデータ要素毎の粒度におけるものであってよい。結果マスクにおける複数のマスク要素は、複数のプレディケート要素または複数の条件付き制御要素を表してよい。1つの態様では、複数のマスク要素は、対応する複数のソースデータ要素および/または対応する複数の結果データ要素との1対1対応に含まれてよい。例として、対応するオペレーションが実行されるべきものであるか否か、および/または、対応する結果データ要素が格納されるべきものであるか否かを、各マスク要素の値またはビットが制御してよい。各マスク要素の値またはビットは、対応する複数のソースデータ要素のペア上でオペレーションを実行させることを許可し、かつ対応する結果データ要素が宛先に格納されることを許可するための第1の値を有してよく、あるいは、対応する複数のソースデータ要素のペア上でオペレーションを実行させることを許可せず、および/または対応する結果データ要素が宛先に格納されることを許可しないための第2異なる値を有してよい。可能性のある1つの規定によれば、バイナリゼロにクリアされたマスクビット(即ち、0)は、マスクされたオペレーションを表してよく、これに対して、バイナリワンに設定されたマスクビット(即ち、1)は、マスクされていないオペレーションを表してよい。
いくつかの実施形態において、結果マスクを生成する命令に加えて、命令セットはまた、ソース叙述オペランドまたは条件付き制御オペランドとして結果マスクを示すまたはアクセスすることのできる第2の命令を有してよく、これらのオペランドは、対応する複数のオペレーションが実行されるべきものであるか否か、および/または、対応する複数の結果が格納されるべきものであるか否かを、プレディケートするか、条件付きで制御するか、またはマスクするために用いられる。特定の複数の実装において、ソース叙述オペランドとして結果マスクを示してよい命令の1つの具体的な例は、VMOVDQA32命令であり、これは2013年12月に出版されたIntel Architecture Instruction Set Extensions Programming Reference、319433−017に記載されている。VMOVDQA32命令は、アラインされパックされたダブル・ワード(倍長語)整数値を、ソースパックドデータオペランドから結果パックドデータオペランドへ、プレディケーションのためのソース書込みマスクを用いて移動させることができる。結果マスクば、VMOVDQA32命令によって、ソース書込みマスクとして示されてよい。いくつかの実装において、および/またはいくつかのアルゴリズムに対して、結果マスクは、そのようなプレディケートされた複数の命令によって用いられてよく、アルゴリズムに関する総合的な視点から、特定の性能および/または効率の利点を提供する。いくつかの実施形態では、結果パックドデータ1014がたとえ、代わりに追加のビットを複数のインデックスへ組み込むことができるほど十分なビットを有するとしても、結果マスクが用いられてよい。
図11は、複数データ要素・オペレーション1150の最大の半分のためのマスクを有する2つのソースソート・複数インデックスの実施形態を例示するブロック図であり、オペレーションは複数データ要素の命令の最大の半分に対するマスクを有する2つのソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも4つのデータ要素の第1のセットを含む第1のソースパックドデータ1110を、規定あるいは示してよく、かつ、少なくとも4つのデータ要素の第2のセットを含む第2のソースパックドデータ1112を、規定あるいは示してよい。これは必ずしも必要ではないが、示される実施形態では、第1のソースパックドデータおよび第2のソースパックドデータのそれぞれにおける複数の値は、順番にソートされる。いくつかの実施形態において、複数のソースデータ要素がそれぞれのパックドデータ内においてソートされた順序であることが、仮定されるか(例えば、暗示的に命令に対して仮定される)または要求されてよい。他の実施形態では、減少順が任意選択的に用いられてもよいが、示される例では、複数のオペランドにおいて増加するビット桁と共に増加順が用いられてよい。他の実施形態において、第1のソースパックドデータおよび第2のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータ内においてソートされた順序であることを、仮定または要求されなくてよい(例えば、複数の要素がソートされていない順序である場合に、命令が正しく動作してよい)。
結果パックドデータ1114は、命令に応答して(例えば、実行ユニット106によって)生成され、行き先格納位置に格納されてよい。いくつかの実施形態において、結果パックドデータは、少なくとも4個のインデックスを有してよい。いくつかの実施形態において、各インデックスは、第1および第2のソースパックドデータにおける一対の対応するデータ要素の位置を、指し示し、特定し、または関連してよい。同様に、命令に応答して、結果マスク1120が格納されてよい。結果マスクは、複数インデックスに対応する複数のマスク要素を有してよい。
図11の実施形態において、複数インデックスは、順序づけられた最大の部分集合に対応してよく、例えば、例示された実施形態において、第1および第2のソースパックドデータにおける複数データ要素の全てにおける最大の半分に対応してよい。例えば、8個のインデックスは、結果パックドデータにおける複数の位置に格納されてよく、複数の位置は、第1および第2のソースパックドデータにおいて対応する8個の最大のデータ要素のソートされた順序(例えば、12、12、16、18、24、43、55、60)を表す。同様に、結果マスクの複数のマスク要素は、順序づけられた最大の部分集合に対応してよく、例えば、例示された実施形態において、第1および第2のソースパックドデータにおける複数データ要素の全てにおける最大の半分に対応してよい。
示される実施形態において、8個のインデックスは、結果パックドデータにおける複数の位置に格納され、複数の位置は、第1および第2のソースパックドデータにおいて対応する8個の最大のデータ要素のソートされた増加順を表す。他の実施形態において、減少順または逆順序が任意選択的に用いられてよい。
図12は、複数データ要素・オペレーション1252の最小の半分のためのマスクを有する2つのソートされていないソースソート・複数インデックスの実施形態を例示するブロック図であって、オペレーションは複数データ要素の命令の最小の半分のためのマスクを有する2つのソートされていないソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも4つのデータ要素の第1のセットを含む第1のソースパックドデータ1210を、規定あるいは示してよく、かつ、少なくとも4つのデータ要素の第2のセットを含む第2のソースパックドデータ1212を、規定あるいは示してよい。図12のオペレーションにおいて、第1のソースパックドデータオペランドにおける複数データ要素の複数の値は、ソートされた順序になっていない。同様に、第2のソースパックドデータオペランドにおける複数データ要素の複数の値は、ソートされた順序になっていない。第1のソースパックドデータおよび第2のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータオペランド内においてソートされた順序であることを仮定または要求されなくてよい(例えば、複数の要素が、複数のソースパックドデータオペランドにおいてソートされていない順序である場合に、命令が正しく動作してよい)。結果パックドデータ1214は、命令に応答して(例えば実行ユニット106によって)生成され、行き先格納位置に格納されてよい。
いくつかの実施形態において、結果パックドデータは、少なくとも4個のインデックスを有してよい。いくつかの実施形態において、各インデックスは、第1および第2のソースパックドデータにおける一対の対応するデータ要素の位置を、指し示し、特定し、または関連してよい。同様に、命令に応答して、結果マスク1220が格納されてよい。結果マスクは、複数のインデックスに対応する複数のマスク要素を有してよい。
示される実施形態において、複数のインデックスおよび複数のマスク要素は、最小の部分集合に対応し、この場合、第1および第2のソースパックドデータにおける全てのデータ要素における最小の半分に対応する。他の実施形態では、複数のインデックスおよび複数のマスク要素は、最大の部分集合に対応してよく、例えば、第1および第2のソースパックドデータにおける全てのデータ要素における最大の半分に対応してよい。
示される実施形態において、8個のインデックスは、結果パックドデータにおける複数の位置に格納され、複数の位置は、第1および第2のソースパックドデータにおいて対応する8個の最大のデータ要素のソートされた増加順を表す。他の実施形態において、減少順または逆順序が任意選択的に用いられてよい。
図13は、複数データ要素・オペレーション1354の最小の半分のための、マスクおよびソートデータを有する2つのソースソート・複数インデックスの実施形態を例示するブロック図であって、オペレーションは、複数データ要素の命令の最小の半分のためのマスクおよびソートデータを有する2つのソースソート・複数インデックスの実施形態に応答して実行されてよい。命令は、少なくとも4つのデータ要素の第1のセットを含む第1のソースパックドデータ1310を、規定あるいは示してよく、かつ、少なくとも4つのデータ要素の第2のセットを含む第2のソースパックドデータ1312を、規定あるいは示してよい。これは必ずしも必要ではないが、示される実施形態では、第1のソースパックドデータおよび第2のソースパックドデータのそれぞれにおける複数の値は、順番にソートされる。いくつかの実施形態において、複数のソースデータ要素がそれぞれのパックドデータ内においてソートされた順序であることが仮定されるか(例えば、暗示的に命令に対して仮定される)、または要求されてよい。他の実施形態では、減少順が任意選択的に用いられてもよいが、示される例では、複数のオペランドにおいて増加するビット桁と共に増加順が用いられてよい。他の実施形態において、第1のソースパックドデータおよび第2のソースパックドデータのそれぞれの中の複数データ要素は、それぞれのパックドデータ内においてソートされた順序であることを仮定または要求されなくてよい(例えば、複数の要素がソートされていない順序である場合に命令が正しく動作してよい)。
第1の結果パックドデータ1314は、命令に応答して(例えば、実行ユニット106によって)生成され、行き先格納位置に格納されてよい。いくつかの実施形態において、結果パックドデータは、少なくとも4個のインデックスを有してよい。いくつかの実施形態において、各インデックスは、第1および第2のソースパックドデータにおける一対の対応するデータ要素の複数の位置を、指し示し、特定し、または関連してよい。同様に、命令に応答して結果マスク1320が格納されてよい。結果マスクは、複数インデックスに対応する複数のマスク要素を有してよい。
本実施形態では、また第2の結果パックドデータ1316が、命令に応答して生成され、第2の行き先格納位置に格納されてよい。第2の行き先格納位置は、命令によって規定されるか、または示されてよく、かつ、パックドデータレジスタ、メモリ位置、または、その他の格納位置であってよい。第2の行き先格納位置は、第1または第2のソースパックドデータの1つのために用いられるのと同じ格納位置あるいは異なる格納位置のいずれかであってよい。第2の結果パックドデータは、対応する複数データ要素を有してよく、これらのデータ要素は、ソートされた順序を反映する第2の結果パックドデータにおける複数の位置に格納された、複数インデックスおよび複数のマスク要素に対応する。
示された実施形態において、ソートされた複数の要素、複数インデックスおよび複数のマスク要素は、最小の部分集合に対応し、この場合、第1および第2のソースパックドデータにおける全てのデータ要素の最小の半分に対応する。他の実施形態において、ソートされた複数の要素、複数インデックスおよび複数のマスク要素は、最大の部分集合に対応してよく、例えば、第1および第2のソースパックドデータにおける全てのデータ要素の最大の半分に対応してよい。
示された実施形態において、ソートされた複数の要素、複数インデックスおよび複数のマスク要素は複数の位置に格納され、増加順を表す。他の複数の実施形態では、減少順または逆順序が任意選択的に用いられてよい。
結果として、ソートされた複数インデックスが図10に格納される。結果として、ソートされた複数インデックスおよびソートされた複数のデータ要素の両方が、図13に格納される。他の実施形態では、複数インデックスではなく複数のソートデータ要素が、命令に応答して任意選択的に格納されてよい。
図11−13における複数のオペレーションは、図10のオペレーションと特定の類似性を有する。説明を分かりにくくすることを避けるために、図11−13における複数のオペレーションに対する異なるおよび/または追加の複数の特徴が主として説明され、図10のオペレーションと比べて、任意選択的に類似または共通する全ての特徴および詳細を、繰り返すことはしない。しかしながら、そうではない旨が述べられるか、あるいは、そうではないことが明確であるという場合以外には、先述した図10のオペレーションにおける複数の特徴および詳細は、また、任意選択的に図11−13のいずれの複数のオペレーションに適用してよいことが、認められべきである。
命令セットは、ここで開示される複数の命令のうちの1または複数を有してよい。例えば、いくつかの実施形態において、命令セットは、ソートされた結果を生成することができる第1の命令(例えば、図3−4の1つのために示されたまたは記載されたような)、および、ソースパックドデータを仮定するかまたは必要とする第2の命令(例えば、図6、7、9、10、11、13の1つのために示されたまたは記載されたような)を、任意選択的に有してよい。他の例として、いくつかの実施形態において、命令セットは、全てのソースデータ要素における最小の半分のソートのための第1の命令(例えば、図6および10の1つのために示されたまたは記載されたような)、および、全てのデータ要素命令における最大の半分のソートのための第2の命令(例えば、図7および11の1つのために示されたまたは記載されたような)を、任意選択的に有してよい。或いは、命令セットは、ここで示され記載された複数の命令のうちの1つのみを有してもよい。
以下のコード片は、32の整数をソートするために、ここで開示された複数の命令の例を用いたアルゴリズムの例示的な実施形態を表す。sortassistd命令は、図3に示されたのと同様のオペレーションを用いて、複数のダブル・ワードの要素を昇順にソートする。sortedmergedassistl命令およびsortedmergedassisth命令は、図10、11におけるオペレーションと同様に、第1および第2のソースパックドデータに、既にソートされた複数の要素に対するソートされた複数のインデックスを格納する2つのソース命令である。
sort32:
vmovdqu32 (%rdi), %zmm0
vmovdqu32 64(%rdi), %zmm1
sortassistd %zmm0, %zmm2
sortassistd %zmm1, %zmm3
vpermd %zmm0, %zmm2, %zmm0
vpermd %zmm1, %zmm3, %zmm1
sortedmergedassistl %zmm1, %zmm0, %zmm2, %k1
sortedmergedassisth %zmm1, %zmm0, %zmm3, %k2
vpermd %zmm0, %zmm2, %zmm4
vpermd %zmm1, %zmm2, %zmm5
vpermd %zmm0, %zmm3, %zmm6
vpermd %zmm1, %zmm3, %zmm7
vmovdqu32 %zmm5, %zmm4, {%k1}
vmovdqu32 %zmm7, %zmm6, {%k2}
vmovdqu32 %zmm4, {%rdi}
vmovdqu32 %zmm6, 64{%rdi}
ret
いくつかの実施形態において、命令フォーマットは、オペコードまたは命令コードを有してよい。オペコードは、実行されるべき命令および/またはオペレーション(例えば、ソートインデックスオペレーション)を特定可能な、複数のビットまたは1もしくは複数のフィールドを表してよい。特定の命令に応じて、命令フォーマットは、また、1または複数のソースおよび/または複数の宛先指示子を、任意選択的に有してよい。例として、複数の指示子のそれぞれは、レジスタ、メモリ位置、またはその他の格納位置のアドレスを規定するために、複数のビット、または、1または複数のフィールドを有してよい。或いは、そのような明示的な指示子に代えて、1または複数のソースおよび/または宛先は、命令に対して明示的に規定されるのではなく、任意選択的に黙示的に規定されてよい。加えて、あるソースが宛先として再利用されることは、任意選択的に黙示的であってよい。加えて、命令フォーマットは、任意選択的に複数の追加フィールドを追加してよく、特定の複数のフィールドと重なり合ってもよい。複数のフィールドは、隣接するビット配列を有する必要がなく、むしろ、隣接しないかまたは分離された複数のビットから構成されてよい。いくつかの実施形態において、命令フォーマットは、VEXまたはEVEXの符号化または命令フォーマットに従ってよいが、本発明の範囲は、それに限定されない。
図14は、複数のパックドデータレジスタ1408の適切な一つのセットの実施形態の一例のブロック図である。複数のパックドデータレジスタは、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ビットの倍精度浮動小数点データを含む。代替的な複数の実施形態においては、異なる個数のレジスタおよび/または異なるサイズのレジスタが用いられてよい。更なる他の複数の実施形態では、複数のレジスタは、より小さな複数のレジスタ上においてより大きな複数のレジスタのエイリアシングを利用しても利用しなくてもよく、および/または、複数のレジスタは、浮動小数点データを格納するために用いられても用いられなくてもよい。
命令セットは、1または複数の命令フォーマットを有してよい。所与の命令フォーマットは、様々なフィールド(ビット数、ビット位置)を定義し、特に、実行されるべきオペレーション(オペコード)と、そのオペレーションがそこで実行されるべき1または複数のオペランドとを規定する。いくつかの命令フォーマットは、複数の命令テンプレート(または複数のサブフォーマット)による定義によって、更に分解される。例えば、所定の命令フォーマットにおける複数の命令テンプレートは、命令フォーマットの複数のフィールド(含まれる複数のフィールドは、典型的には同じ順序であるが、少なくともそのいくつかは異なるビット位置を有する。というのも、より少ないフィールドが含まれるからである。)の異なるサブセットを有するように定義されてよく、および/または、異なって解釈される所与のフィールドを有するように定義されてもよい。従って、ISAの各命令は、所与の命令フォーマット(および、もし定義されるのであれば、その命令フォーマットにおける複数の命令テンプレートの所与の1つにおいて)を用いて表現され、かつ、オペレーションおよび複数のオペランドを特定するための複数のフィールドを有する。例えば、例示的なADD命令は、特定のオペコードと、そのオペコードを規定するためのオペコードフィールドおよび複数のオペランド(ソース1/宛先およびソース2)を選択するための複数のオペランドフィールドとを有する命令フォーマットとを有しており、命令ストリーム中にこのADD命令が存在すると、特定の複数のオペランドを選択する複数のオペランドフィールドに、特定の複数のコンテンツを含むことになる。Advanced Vector Extensions(AVX)(AVX1およびAVX2)で参照され、ベクトル拡張(VEX)スキームを利用している複数のSIMD拡張のセットが存在し、リリースされ、および/または公開されている(例えば、インテル64およびIA−32 Architectures Software Developers Manual、2011年10月、およびインテル Advanced Vector Extensions Programming Reference 2011年6月 を参照)。
例示的な複数の命令フォーマット ここで記載される1または複数の命令に関する複数の実施形態は、異なる複数のフォーマットで具体化されてもよい。加えて、複数の例示的なシステム、アーキテクチャ、およびパイプラインが、以下で詳述される。1または複数の命令に関する複数の実施形態は、そうした複数のシステム、アーキテクチャ、およびパイプライン上で実行されてよいが、そうした詳細には限定されない。
一般的なベクトルフレンドリな命令フォーマット ベクトルフレンドリな命令フォーマットとは、複数のベクトル命令適した命令フォーマットである(例えば、複数のベクトル演算を特定するための特定の複数のフィールドが存在する)。ベクトルフレンドリな命令フォーマットによってベクトル演算およびスカラー演算の両方がサポートされた複数の実施形態が記載されているが、代替の複数の実施形態では、ベクトルフレンドリな命令フォーマットによってベクトル演算のみを用いてよい。
図15Aおよび図15Bは、本発明の実施形態における、一般的なベクトルフレンドリな命令フォーマットおよびその複数の命令テンプレートを例示するブロック図である。図15Aは、本発明の実施形態における、一般的なベクトルフレンドリな命令フォーマットおよびそのクラスAの複数の命令テンプレートを例示するブロック図であり、一方、図15Bは、本発明の実施形態における、上記の一般的なベクトルフレンドリな命令フォーマットおよびそのクラスBの複数の命令テンプレートを例示するブロック図である。具体的には、一般的なベクトルフレンドリな命令フォーマット1500に対してクラスAおよびクラスBの複数の命令テンプレートが定義され、両者が、非メモリアクセス1505の命令テンプレートと、メモリアクセス1520命令テンプレートとを含む。
ベクトルフレンドリな命令フォーマットというコンテキストにおいて一般的(ジェネリック)という用語は、命令フォーマットが、いかなる特定の命令セットにも関連していないことを指す。
本発明の複数の実施形態が記載され、そこでは、ベクトルフレンドリな命令フォーマットが以下の、
32ビット(4バイト)または64ビット(8バイト)のデータ要素幅(またはサイズ)を有する64バイトベクトルオペランド長(またはサイズ)(従って、64バイトベクトルは、16個のダブル・ワードサイズの要素または、8個のクアッド・ワードサイズの要素のいずれかから構成される)、
16ビット(2バイト)または8ビット(1バイト)のデータ要素幅(またはサイズ)を有する64バイトベクトルオペランド長(またはサイズ)、
32ビット(4バイト)、64ビット(8バイト)、または16ビット(2バイト)のデータ要素幅(またはサイズ)を有する32バイトベクトルオペランド長(またはサイズ)、および
32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)または8ビット(1バイト)のデータ要素幅(またはサイズ)を有する16バイトベクトルオペランド長(またはサイズ)、
をサポートするが、
代替の実施形態は、より多い、より少ない、または異なるデータ要素幅(例えば、128ビット(16バイト)データ要素幅)を有する、より多い、より少ない、および/または異なる、ベクトルオペランドサイズ(例えば、256バイトベクトルオペランド)を、サポートしてよい。
図15AのクラスAの命令テンプレートは、1)非メモリアクセス1505の命令テンプレート内に、図示される、非メモリアクセス・フルラウンド制御型オペレーション1510の命令テンプレートと、非メモリアクセス・データ変換型オペレーション1515の命令テンプレートとを有し、2)メモリアクセス1520の命令テンプレート内に、図示される、メモリアクセス・一時的1525の命令テンプレートと、メモリアクセス・非一時的1530の命令テンプレートとを有する。図15BのクラスBの命令テンプレートは、1)非メモリアクセス1505の命令テンプレート内に、図示される、非メモリアクセス・書込みマスク制御・一部ラウンド制御型オペレーション1512の命令テンプレートと、非メモリアクセス・書込みマスク制御・Vサイズ型オペレーション1517の命令テンプレートとを有し、2)メモリアクセス1520の命令テンプレート内に、図示される、メモリアクセス・書込みマスク制御1527の命令テンプレートを有する。
一般的なベクトルフレンドリな命令フォーマット1500は、図15Aおよび図15Bに例示された順序で、下にリストされた以下の複数のフィールドを有する。
フォーマットフィールド1540−このフィールドにおける特定の値(命令フォーマット識別値)は、一意にベクトルフレンドリな命令フォーマットを特定し、従って、命令ストリームにおけるベクトルフレンドリな命令フォーマットの複数の命令の発生を特定する。このフィールドそれ自体は、一般的なベクトルフレンドリな命令フォーマットのみを有する命令セットに対してはこのフィールドは必要ではないという意味では、オプショナルである。
ベースオペレーションフィールド1542−そのコンテンツは、異なるベースオペレーションを区別する。
レジスタインデックスフィールド1544−そのコンテンツは、直接的またはアドレス発生を介して、ソースおよび複数の宛先オペランドの位置を規定し、それらはレジスタまたはメモリにある。これらは、P×Q個(例えば、32×512、16×128、32×1024、64×1024)のレジスタファイルからN個のレジスタを選択するのに十分なビット数を有する。一実施形態では、Nは、3つのソースおよび1つの宛先レジスタまでであってよく、代替の実施形態では、それよりも多いかまたは少ないソースおよび宛先レジスタをサポートしてよい(例えば、2つのソースまでをサポートしてよくそのうちの1つは宛先としての役割も果たす。3つのソースまでをサポートしてよくそのうちの1つが宛先としての役割も果たす。2つのソースと1つの宛先までをサポートしてよい)。
修飾子フィールド1546−そのコンテンツは、一般的なベクトル命令フォーマットの中にメモリアクセスを規定する命令が存在するものと、存在しないものとを区別する。即ち、非メモリアクセス1505の命令テンプレートと、メモリアクセス1520の命令テンプレートとを区別する。複数のメモリアクセスオペレーションは、メモリ階層に対して読み取りおよび/または書込みを行うが(場合によっては、レジスタ内の値を用いてソースおよび/または宛先のアドレスを特定する)、これに対して、複数の非メモリアクセスオペレーションは、そうした特定を行わない(例えば、ソースおよび複数の宛先は、複数のレジスタである)。一実施形態では、このフィールドは、また、メモリアドレス計算を実行するために3つの異なる方法の間において選択を行うが、代替の実施形態は、複数のメモリアドレス計算を実行するためにより多くの、より少ない、または異なる方法を、サポートしてよい。
拡大オペレーションフィールド1550−そのコンテンツは、様々な異なる複数のオペレーションのどの1つがベースオペレーションに加えて実行されるべきかを区別する。このフィールドは、前後関係に応じて特定される。本発明の一実施形態において、このフィールドは、クラスフィールド1568、アルファフィールド1552およびベータフィールド1554へと分割される。拡大オペレーションフィールド1550は、2、3または4つの命令ではなく単一の命令において、共通する複数のオペレーションのグループが実行されることを可能とする。
スケール(scale)フィールド1560−そのコンテンツは、メモリアドレス発生(例えば、2scale×index+baseを使用するアドレス発生)に対する、インデックスフィールドのコンテンツのスケーリングを許容する。
置換(displacement)フィールド1562A−そのコンテンツは、メモリアドレス発生の一部として使用される(例えば、アドレス発生のために2scale×index+base+displacementを用いる)。
置換ファクターフィールド1562B(置換フィールド1562Aを直接的に置換ファクターフィールド1562Bに並置すると、これらのうちの1つまたは他方が使用されることを意味する)−そのコンテンツは、アドレス発生の一部として使用され、メモリアクセス(N)のサイズによってスケーリングされるべき、置換ファクターを規定する。ここで、Nはメモリアクセスのバイト数である(例えば、アドレス発生のために2scale×index+base+スケールされたdisplacementを用いる)。重複する複数の下位ビットは無視され、これによって、有効なアドレスを計算するために用いられる最終的な置換を生成するべく、置換ファクターフィールドのコンテンツが、メモリオペランドの総サイズ(N)と乗算される。N値は、(後に記載される)フルオペコードフィールド1574およびデータ操作フィールド1554Cに基づき、プロセッサハードウェアによってランタイムで決定される。置換フィールド1562Aおよび置換ファクターフィールド1562Bは、それらが非メモリアクセス1505命令テンプレートでは用いられないという意味ではオプショナルであり、および/または、異なる実施形態では、1つのみのフィールドを実装してよく、または、この2つのいずれを実装しなくてもよい。
データ要素幅フィールド1564−そのコンテンツは、多数のデータ要素幅のいずれが用いられるべきか(いくつかの実施形態では全命令に対して、他の複数の実施形態では、複数の命令のうちの一部のみに対して)を区別する。このフィールドは、1つのみのデータ要素幅がサポートされるか、および/または、オペコードのある態様を用いて複数のデータ要素幅がサポートされる場合には、必要ではないという意味において、オプショナルである。
書込みマスクフィールド1570−そのコンテンツは、データ要素位置毎に基づいて、宛先ベクトルオペランドにおけるそのデータ要素位置が、ベースオペレーションおよび拡大オペレーションの結果を反映しているかどうかを制御する。クラスAの命令テンプレートは、マージ−書込みマスキングをサポートし、一方で、クラスBの命令テンプレートは、マージおよびゼロ化の両方のマスキングをサポートする。マージする場合には、複数のベクトルマスクは、いかなるオペレーション(ベースオペレーションおよび拡大オペレーションによって規定される)を実行中であっても、その宛先のいかなる要素のセットも更新されないようにプロテクトする。他の1つの実施形態では、対応するマスクビットが0である宛先の各要素の古い値を失わないようにする。対照的に、ゼロ化する場合には、複数のベクトルマスクは、いかなるオペレーション(ベースオペレーションおよび拡大オペレーションによって規定される)を実行中であっても、その宛先のいかなる要素のセットもゼロ化する。一つの実施形態では、対応するマスクビットが0である場合に、宛先の要素がゼロ値に設定される。この機能性のサブセットは、実行されているオペレーション(即ち、最初から最後の要素まで、修正されている複数要素のスパン)のベクトル長を制御する能力を有する。しかしながら、修正される複数の要素は、連続している必要は無い。従って、書込みマスクフィールド1570は、ロード、格納、算術、論理、その他を含む部分的なベクトル演算を許容する。書込みマスクフィールド1570のコンテンツが、使用されるべき書込みマスクを含んだ多数の書込みマスクレジスタの1つを選択する(そして、これにより、書込みマスクフィールド1570のコンテンツが間接的に実行されるべきマスキングを特定する)ような本発明の複数の実施形態が記載されたが、或いは、代替または追加の複数の実施形態では、書込みマスクフィールド1570のコンテンツが実行されるべきマスキングを直接的に規定することを許容する。
即時フィールド1572−そのコンテンツは、即値(イミディエイト)の仕様を許容する。このフィールドは、即値をサポートしない一般的なベクトルフレンドリなフォーマットの実装には存在せず、かつ、即値を使用しない命令には存在しないという意味で、オプショナルである。
クラスフィールド1568−そのコンテンツは、異なる命令のクラス間を区別する。図15A−Bを参照すると、このフィールドのコンテンツは、クラスA命令とクラスB命令との間を選択する。図15A−Bにおいて、角が丸められた四角は、特定の値がそのフィールドに存在することを示すために用いられる(例えば、図15A−Bのそれぞれにおける、クラスフィールド1568に対するクラスA1568A、クラスB1568B)。
クラスAの命令テンプレート
クラスAの非メモリアクセス1505の命令テンプレートの場合、アルファフィールド1552は、RSフィールド1552Aとして解釈され、そのコンテンツは、異なる拡大オペレーション型のいずれを実行すべきかを区別し(例えば、ラウンド1552A.1およびデータ変換1552A.2は、それぞれ、非メモリアクセス・ラウンド型オペレーション1510、非メモリアクセス・データ変換型オペレーション1515命令テンプレートのために規定される)、他方で、ベータフィールド1554は、規定された型のオペレーションのいずれが実行されるべきかを区別する。非メモリアクセス1505の命令テンプレートにおいて、スケールフィールド1560、置換フィールド1562A、および置換スケールフィールド1562Bは存在しない。
非メモリアクセスの命令テンプレート−フルラウンド制御型オペレーション 非メモリアクセス・フルラウンド制御型オペレーション1510の命令テンプレートでは、ベータフィールド1554はラウンド制御フィールド1554Aとして解釈され、そのコンテンツは静的な丸め(ラウンディング)を提供する。本発明の複数の実施形態においてラウンド制御フィールド1554Aは、SAE(Suppress all floating point exceptions)フィールド1556およびラウンドオペレーション制御フィールド1558を有するが、代替の実施形態では、これらの両方のコンセプトをサポートし、同じフィールドへとエンコードしてもよく、或いは、これらのコンセプト/フィールドの1つだけ、または他方を有してもよい(例えば、ラウンドオペレーション制御フィールド1558だけを有してもよい)。
SAEフィールド1556−そのコンテンツは、例外イベントの報告を無効化するか否かを区別する。SAEフィールド1556のコンテンツが、禁止が有効化されていることを示す場合に、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、またいかなる浮動小数点例外ハンドラも立ち上げない。
ラウンドオペレーション制御フィールド1558−そのコンテンツは、実行すべき丸め演算のグループの1つを区別する(例えば、切り上げ、切り捨て、ゼロ方向へ丸める、最も近く丸める)。従って、ラウンドオペレーション制御フィールド1558は、命令毎に基づいて、丸めモードの変化を許容する。プロセッサが、複数の丸めモードを規定するための制御レジスタを有するような本発明の一実施形態において、ラウンドオペレーション制御フィールド1558のコンテンツは、そのレジスタ値を無効にする。
非メモリアクセスの命令テンプレート−データ変換オペレーション 非メモリアクセス・データ変換型オペレーション1515の命令テンプレートにおいてベータフィールド1554は、データ変換フィールド1554Bとして解釈され、そのコンテンツは、多数のデータ変換のいずれが実行されるべきかを区別する(例えば、データ変換無し、スウィズル、ブロードキャスト)。
クラスAのメモリアクセス1520の命令テンプレートの場合、アルファフィールド1552がエビクションヒントフィールド1552Bとして解釈され、そのコンテンツは、複数のエビクションヒントのうちのいずれが用いられるべきかを区別し(図15Aでは、一時的1552B.1および非一時的1552B.1は、それぞれ、メモリアクセス一時的1525命令テンプレートおよびメモリアクセス非一時的1530命令テンプレートに対して規定される)、他方では、ベータフィールド1554はデータ操作フィールド1554Cとして解釈され、そのコンテンツは、多数のデータ操作オペレーション(基本的なものとしても知られている)のいずれが実行されるべきかを区別する(例えば、操作無し、ブロードキャスト、ソースのアップ変換、宛先のダウン変換)。メモリアクセス1520の命令テンプレートはスケールフィールド1560を有し、任意選択的に、置換フィールド1562Aまたは置換スケールフィールド1562Bを有する。
複数のベクトルメモリ命令は、メモリからのベクトルの複数のロード、およびメモリへのベクトルの複数の格納を、変換サポートと共に実行する。通常のベクトル命令と同様に、複数のベクトルメモリ命令は、メモリへ/メモリから、データ要素として賢いやり方でデータを転送し、実際に転送される要素は、書込みマスクとして選択されたベクトルマスクのコンテンツによってディクテイトされる。
メモリアクセスの命令テンプレート−一時的
一時的データは、キャッシュすることの利益を得るのに十分な程度に、直ちに再利用される可能性の高いデータである。しかしながらこれはヒントであって、異なる複数のプロセッサがそれを異なる方法で実装してもよく、ヒントを全く無視することも含む。
メモリアクセスの命令テンプレート−非一時的
非一時的データは、第1レベルキャッシュでキャッシュすることの利益を得るのに十分な程度に直ちに再利用される可能性の低いデータであり、エビクションが優先される。しかしながらこれはヒントであって、異なる複数のプロセッサがそれを異なる方法で実装してもよく、ヒントを全く無視することも含む。
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド1552は、書込みマスク制御(Z)フィールド1552Cとして解釈され、そのコンテンツは、書込みマスクフィールド1570によって制御される書込みマスキングが、マージであるべきかゼロ化であるべきかを区別する。
クラスBの非メモリアクセス1505の命令テンプレートの場合、ベータフィールド1554の一部はRLフィールド1557Aとして解釈され、そのコンテンツは、異なる拡大オペレーション型のいずれを実行すべきかを区別し(例えば、ラウンド1557A.1およびベクトル長(VSIZE)1557A.2はそれぞれ、非メモリアクセス・書込みマスク制御・部分ラウンド制御型オペレーション1512命令テンプレート、および非メモリアクセス・書込みマスク制御・VSIZE型オペレーション1517命令テンプレートのために規定される)、他方では、ベータフィールド1554の残り部分は、規定された型のオペレーションのいずれが実行されるべきかを区別する。非メモリアクセス1505の命令テンプレートにおいて、スケールフィールド1560、置換フィールド1562A、および置換スケールフィールド1562Bは存在しない。
非メモリアクセス・書込みマスク制御・部分ラウンド制御型オペレーション1510の命令テンプレートでは、ベータフィールド1554の残り部分は、ラウンドオペレーションフィールド1559Aとして解釈され、例外イベントの報告は無効化される(所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、またいかなる浮動小数点例外ハンドラも立ち上げない)。
ラウンドオペレーション制御フィールド1559A−ラウンドオペレーション制御フィールド1558と同様に、そのコンテンツは、実行すべき丸め演算(ラウンディングオペレーション)のグループの1つを区別する(例えば、切り上げ、切り捨て、ゼロ方向へ丸める、最も近くに丸める)。したがって、ラウンドオペレーション制御フィールド1559Aは、命令毎に基づいて、丸めモードの変化を許容する。プロセッサが、複数の丸めモードを規定するための制御レジスタを有するような本発明の一実施形態において、ラウンドオペレーション制御フィールド1550のコンテンツは、そのレジスタ値を無効にする。
非メモリアクセス・書込みマスク制御・VSIZE型オペレーション1517の命令テンプレートにおいて、ベータフィールド1554の残り部分はベクトル長フィールド1559Bとして解釈され、そのコンテンツは、多数のデータベクトル長のいずれが実行されるべきかを区別する(例えば、128、256、または512バイト)。
クラスBのメモリアクセス1520の命令テンプレートの場合、ベータフィールド1554の一部はブロードキャストフィールド1557Bとして解釈され、そのコンテンツはそのブロードキャスト型データ操作オペレーションが実行されるべきかどうかを区別し、他方で、ベータフィールド1554の残り部分は、ベクトル長フィールド1559Bとして解釈される。メモリアクセス1520の命令テンプレートはスケールフィールド1560を有し、任意選択的に、置換フィールド1562Aまたは置換スケールフィールド1562Bを有する。
一般的なベクトルフレンドリな命令フォーマット1500に関して、フォーマットフィールド1540、ベースオペレーションフィールド1542およびデータ要素幅フィールド1564を有するフルオペコードフィールド1574が示される。これらのフィールドの全てをフルオペコードフィールド1574が有するような1つの実施形態が示されているが、フルオペコードフィールド1574は、これらの全フィールドをサポートしていない実施形態では、これらの全てのフィールドよりも少ないフィールドを有する。フルオペコードフィールド1574は、オペレーションコード(オペコード)を提供する。
拡大オペレーションフィールド1550、データ要素幅フィールド1564、および書込みマスクフィールド1570は、これらの特徴が、一般的なベクトルフレンドリな命令フォーマットおいて命令毎に規定されることを許容する。
書込みマスクフィールドおよびデータ要素幅フィールドの組み合わせにより型(タイプ)が付された複数の命令を生成し、それらの命令では、これらのフィールドが、異なるデータ要素幅に基づきマスクが適用されることを許容する。
クラスAおよびクラスB内に見つけられる様々な命令テンプレートは、異なる複数の状況で有益である。本発明のいくつかの実施形態において、異なる複数のプロセッサまたは、1つのプロセッサ内の異なる複数のコアが、クラスAだけ、クラスBだけ、または両方のクラスを、サポートしてよい。例えば、汎用計算用の高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよい。主としてグラフィックスおよび/または科学(スループット)計算用のコアは、クラスAのみをサポートしてよい。両方を目的とするコアは両方をサポートしてよい(無論、コアは複数のテンプレートおよび複数の命令の混合を有するが、両クラスに由来するテンプレートおよび命令の全てではないものも本発明の範囲内である)。また、単一のプロセッサがマルチコアを有してよく、コアの全てが同じクラスをサポートし、または異なるコアが異なるクラスをサポートする。例えば、複数のグラフィックスコアと複数の汎用コアとを別個に有するプロセッサにおいて、複数のグラフィックスコアにおける、主としてグラフィックスおよび/または科学計算用の1つのコアがクラスAのみをサポートし、その一方で、1または複数の汎用コアが、クラスBのみサポートする汎用計算を目的とするアウトオブオーダ実行およびレジスタリネーミングを備えた高性能汎用コアであってよい。別個のグラフィックコアを有さない他のプロセッサは、クラスAおよびクラスBの両方をサポートする、もう1つの汎用のインオーダまたはアウトオブオーダのコアを有してよい。無論、本発明の異なる実施形態では、1つのクラスに由来する特徴は、また、他のクラスで実装されてよい。高水準言語で書かれたプログラムが、異なる多様な実行可能な形式へと変換される(例えば、実行時コンパイルされ、または静的コンパイルされる)。そしてこの形式は、1)実行の為のターゲットプロセッサによってサポートされる1の(または複数の)クラスの命令のみを含む形式、または2)全てのクラスに含まれる命令の異なる組合せを用いて書かれた代替的なルーチンを有し、かつ、現在コードを実行しているプロセッサによってサポートされる複数の命令に基づいて実行するためのルーチンを選択する制御フローコードを有する形式、を含む。
例示的な特定のベクトルフレンドリな命令フォーマット
図16は、本発明の実施形態における、例示的な特定のベクトルフレンドリな命令フォーマットを例示するブロック図である。図16は、特定のベクトルフレンドリな命令フォーマット1600を示し、このフォーマットは、複数フィールドのいくつかに対する値のみならず、位置、サイズ、インタプリテーション、フィールド順序をも規定するという意味において、特定のフォーマットである。特定のベクトルフレンドリな命令フォーマット1600はx86命令セットを拡張するために用いられ、これにより、複数フィールドのいくつかは現存のx86命令セットおよびその拡張(例えば、AVX)で用いられる複数のフィールドと、類似するかまたは同じとなる。このフォーマットは、拡張を伴う現存のx86命令セットにおけるプレフィックス符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、置換フィールド、および即時フィールドと整合性を保ったままである。図15に由来する複数のフィールドであって、図16に由来する複数のフィールドが描かれた複数のフィールドが、例示される。
例示の目的から、一般的なベクトルフレンドリな命令フォーマット1500のコンテキストの中で、本発明の複数の実施形態が特定のベクトルフレンドリな命令フォーマット1600を参照しつつ記載されるが、本発明は、請求項に記載された場合を除き、特定のベクトルフレンドリな命令フォーマット1600には限定されないことが理解されるべきである。例えば一般的なベクトルフレンドリな命令フォーマット1500は、様々なフィールドに対して様々な可能なサイズを予期するが、これに対し、特定のベクトルフレンドリな命令フォーマット1600は、複数の特定サイズの複数のフィールドを有するものとして示されている。特定の例を用いて、データ要素幅フィールド1564が、特定のベクトルフレンドリな命令フォーマット1600における1ビットフィールドとして例示されるが、本発明はこれに限定されない(即ち、一般的なベクトルフレンドリな命令フォーマット1500は、データ要素幅フィールド1564における他の複数のサイズを予期する。)
一般的なベクトルフレンドリな命令フォーマット1500は、図16Aに例示される順序で、以下にリストされた複数のフィールドを有する。
EVEXプレフィックス(バイト0―3)1602−4バイト形式でエンコードされる。
フォーマットフィールド1540(EVEXバイト0、ビット[7:0])−第1のバイト(EVEXバイト0)はフォーマットフィールド1540であり、0x62を含む(本発明の一実施形態では、ベクトルフレンドリな命令フォーマットを区別するために用いられる固有の値である)。
第2の4バイト(EVEXバイト1−3)は、特定の機能を提供する多数のビットフィールドを有する。
REXフィールド1605(EVEXバイト1、ビット[7−5]−EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)および1557BEX バイト1、ビット[5]−B)、からなる。EVEX.R、EVEX.XおよびEVEX.Bビットフィールドは、対応する複数のVEXビットフィールドと同じ機能を提供し、複数個の1の補数形式を用いてエンコードされる。即ち、ZMM0は、1111Bとしてエンコードされ、ZMM15は0000Bとしてエンコードされる。複数の命令についての他の複数のフィールドは、当技術分野で知られているように(rrr、xxxおよびbbb)、レジスタの複数のインデックスにおける下位の3ビットをエンコードし、EVEX.R、EVEX.XおよびEVEX.Bを追加することによって、Rrrr、Xxxx、およびBbbbが形成されてよい。
REX´フィールド1510−これは、REX´フィールド1510の第1の部分であり、拡張された32レジスタセットにおける上位16または下位16のいずれかをエンコードするのに用いられるEVEX.R´ビットフィールド(EVEXバイト1、ビット[4]−R´)である。本発明の一実施形態において、このビットは、BOUND命令と区別すべく、下記に示すように他のビットを伴って、(よく知られたx86 32ビットモードにおいて)ビット反転形式で格納され、そのリアルオペコードバイトは62であるが、MOD R/Mフィールド(後述)において、MODフィールドの11の値を受け付けない。本発明の複数の代替の実施形態では、このビットおよび、以下で記載されるその他の示されたビットを反転形式では格納しない。値1は、下位の16レジスタをエンコードするために用いられる。言い換えると、EVEX.R´、EVEX.R、および、他のフィールドに由来するその他のRRRを組み合わせることにより、R´Rrrrが形成される。
オペコードマップフィールド1615(EVEX バイト1、ビット[3:0]−mmmm)−そのコンテンツは、黙示的なリーディング・オペコード(0F、 0F38または0F3)をエンコードする。
データ要素幅フィールド1564(EVEX バイト2、ビット[7]−W)は、EVEX.Wという表記により表される。EVEX.Wは、データ型の粒度(サイズ)を定義するために用いられる(32ビットの複数のデータ要素または64ビットの複数のデータ要素のいずれか)。
EVEX.vvvv1620(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割としては以下を含んでよい。(1)EVEX.vvvvは、反転形式(複数の1の補数)で規定された第1のソースレジスタオペランドをエンコードし、複数の命令に対して2またはそれよりも多くのソースオペランドと共に有効である。(2)EVEX.vvvvは、所定の複数のベクトルシフトに対する反転形式(複数の1の補数)で規定された宛先レジスタオペランドをエンコードする。または、(3)EVEX.vvvvは、いかなるオペランドもエンコードせず、フィールドはリザーブされ、1111bを含む。このように、EVEX.vvvvフィールド1620は、反転形式(複数の1の補数)で格納された、第1ソースレジスタ指示子の4つの低位ビットをエンコードする。命令に応じて、追加の異なるEXEVビットフィールドが、識別子サイズを32レジスタへ拡張するために用いられる。
EVEX.U1568クラスフィールド(EVEX バイト2、ビット[2]−U)−EVEX.U=0の場合には、クラスAまたはEVEX.U0を示し、EVEX.U=1の場合には、クラスBまたはEVEX.U1を示す。
プレフィックス符号化フィールド1625(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プレフィックスによって規定される異なる複数の意味を許容する。代替の実施形態では、2ビットSIMDプレフィックス符号化をサポートすべくPLAを再設計してよく、これにより拡張が不要となってよい。
アルファフィールド1552(EVEXバイト3、ビット[7]−EH、これはEVEX.EH、 EVEX.rs、EVEX.RL、EVEX書込みマスク制御、およびEVEX.Nとしても知られており、また、αとして示される)−先に述べたように、当該フィールドは、前後関係に応じて特定される。
ベータフィールド1554(EVEXバイト3、ビット[6:4]−SSS、これはEVEX.s2−0、EVEX.r2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られ、また、βββとして示される) −先に述べたように、当該フィールドは、前後関係に応じて特定される。
REX´フィールド1510−これは、REX´フィールドの残り部分であり、拡張された32レジスタセットにおける上位16または下位16のいずれかをエンコードするのに用いられてよいEVEX.V´ビットフィールド(EVEXバイト3、ビット[3]−V´)である。このビットは、ビット反転形式で格納される。値1は、下位の16レジスタをエンコードするために用いられる。言い換えると、EVEX.V´およびEVEX.vvvvを組み合わせることによりV´VVVVが形成される。
書込みマスクフィールド1570(EVEXバイト3、ビット[2:0]−kkk)−このコンテンツは、先述したように、複数の書込みマスクレジスタにおける一のレジスタのインデックスを規定する。本発明の一実施形態において、特定の値EVEX.kkk=000は特別な振る舞いを有し、特定の命令に対して書込みマスクが用いられないことを暗示する(これは様々なやり方で実装されてよく、全ての書込みマスクまたはマスキングハードウェアを迂回するハードウェアに配線接続された一の書込みマスクを使用することを含む)。
リアルオペコードフィールド1630(バイト4)が、また、オペコードバイトとして知られる。オペコードの一部は、このフィールドにおいて規定される。
MOD R/Mフィールド1640(バイト5)は、MODフィールド1642、Regフィールド1644およびR/Mフィールド1646を有する。先述したように、MODフィールド1642のコンテンツは、メモリアクセスオペレーションと非メモリアクセスオペレーションとを区別する。Regフィールド1644の役割は、2つの状況に集約することができる。宛先レジスタオペランドおよびソースレジスタオペランドのいずれかをエンコードするか、または、オペコード拡張として扱われ、命令オペランドをエンコードするためには用いられない。R/Mフィールド1646の役割としては以下を有してよい。メモリアドレスを参照する命令オペランドをエンコードするか、または、宛先レジスタオペランドおよびソースレジスタオペランドのいずれかをエンコードする。
スケール、インデックス、ベース(SIB)バイト(バイト6)−先述したように、スケールフィールド1550のコンテンツは、メモリアドレス発生のために用いられる。SIB.xxx1654およびSIB.bbb1656−これら複数のフィールドの複数のコンテンツは、レジスタの複数インデックスXxxxおよびBbbbに関連して事前に参照されている。
置換フィールド1562A(バイト7―10)−MODフィールド1642が10を含む場合、バイト7―10が置換フィールド1562Aであり、レガシー32ビット置換(disp32)と同様に機能し、かつバイト粒度で機能する。
置換ファクターフィールド1562B(バイト7)−MODフィールド1642が01を含む場合、バイト7が置換ファクターフィールド1562Bである。このフィールド位置は、レガシーx86命令セット8ビット置換(disp8)と同様であり、バイト粒度で機能する。disp8は符号拡張されるので、−128と127バイトのオフセット間でアドレス指定のみ可能である。64バイトのキャッシュラインに関してdisp8は8ビットを使用し、この8ビットは実際に有用な4つの値、−128、64、0、64のみに設定されうる。しばしばより広いレンジが必要となるので、disp32が用いられる。しかしながら、disp32は4バイトを要する。disp8およびdisp32とは対照的に、置換ファクターフィールド1562Bは、disp8の再解釈である。置換ファクターフィールド1562Bを使用する場合、実際の置換は、メモリオペランドアクセス(N)のサイズが乗じられた置換ファクターフィールドのコンテンツによって決定される。このタイプの置換は、disp8*Nとして参照される。これにより、平均の命令長さが短くなる(置換に対して単一のバイトが使用されるが、より広いレンジを備える)。そうした圧縮された置換は、効果的な置換とはメモリアクセスの多様な粒度であり、よって、アドレスオフセットにおける冗長な複数の低位ビットはエンコードされる必要が無い、という前提に基づく。言い換えると、置換ファクターフィールド1562Bは、レガシーx86命令セットの8ビット置換を、代用する。したがって、置換ファクターフィールド1562Bは、disp8はdisp8*Nへオーバーロードされるという唯一の例外があるが、x86命令セット8ビット置換と同じやり方でエンコードされる(つまりModRM/SIBエンコード規則には変更はない)。言い換えると、エンコード規則またはエンコード長に変更はなく、ハードウェア(バイト単位のアドレスオフセットを得るためにメモリオペランドのサイズにより、その置換をスケールする必要がある)による置換値の解釈にのみ変更がある。
即時フィールド1572は、先述したように動作する。
フルオペコードフィールド
図16Bは、本発明の一実施形態における、フルオペコードフィールド1574を作り上げる、特定のベクトルフレンドリな命令フォーマット1600の複数のフィールドを例示するブロック図である。具体的には、フルオペコードフィールド1574は、フォーマットフィールド1540、ベースオペレーションフィールド1542およびデータ要素幅(W)フィールド1564を有する。ベースオペレーションフィールド1542は、プレフィックス符号化フィールド1625、オペコードマップフィールド1615、およびリアルオペコードフィールド1630を含む。
レジスタインデックスフィールド
図16Cは、本発明の一実施形態における、レジスタインデックスフィールド1544を作り上げる、特定のベクトルフレンドリな命令フォーマット1600の複数のフィールドを例示するブロック図である。具体的には、レジスタインデックスフィールド1544は、REXフィールド1605、REX´フィールド1610、MODR/M.regフィールド1644、MODR/M.r/mフィールド1646、VVVVフィールド1620、xxxフィールド1654およびbbbフィールド1656を有する。
拡大オペレーションフィールド
図16Dは、本発明の一実施形態における、拡大オペレーションフィールド1550を作り上げる、特定のベクトルフレンドリな命令フォーマット1600の複数のフィールドを例示するブロック図である。クラス(U)フィールド1568が0を含む場合にはEVEX.U0(クラスA 1568A)を意味し、0を含む場合には、EVEX.U1(クラスB 1568B)を意味する。U=0で、かつMODフィールド1642が11を含む場合(非メモリアクセスオペレーションを意味する)、アルファフィールド1552(EVEXバイト3、ビット[7]−EH)は、rsフィールド1552Aとして解釈される。rsフィールド1552Aがa1(ラウンド1552A.1)を含む場合、ベータフィールド1554(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド1554Aとして解釈される。ラウンド制御フィールド1554Aは、1ビットのSAEフィールド1556および2ビットのラウンドオペレーションフィールド1558を含む。rsフィールド1552Aが0を含む場合(データ変換1552A.2)、ベータフィールド1554(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ変換フィールド1554Bとして解釈される。U=0で、かつMODフィールド1642が00、01、または10を含む場合(メモリアクセスオペレーションを意味する)、アルファフィールド1552(EVEXバイト3、ビット[7]−EH)はエビクションヒント(EH)フィールド1552Bとして解釈され、ベータフィールド1554(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド1554Cとして解釈される。
U=1の場合、アルファフィールド1552(EVEXバイト3、ビット[7]−EH)は、書込みマスク制御(Z)フィールド1552Cとして解釈される。U=1で、かつMODフィールド1642が11を含む場合(非メモリアクセスオペレーションを意味する)、ベータフィールド1554の一部(EVEXバイト3、ビット[4]−S0)は、RLフィールド1557Aとして解釈される。これが1(ラウンド1557A.1)を含む場合、ベータフィールド1554の残り(EVEXバイト3、ビット[6−5]−S2−1)はラウンドオペレーションフィールド1559Aとして解釈されるが、その一方で、RLフィールド1557Aが0(VSIZE1557.A2)を含む場合、ベータフィールド1554の残り(EVEXバイト3、ビット[6−5]−S2−1)はベクトル長フィールド1559B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。U=1で、かつMODフィールド1642が00、01または10を含む場合(メモリアクセスオペレーションを意味する)、ベータフィールド1554(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド1559B(EVEXバイト3、ビット[6−5]−L1−0)およびブロードキャストフィールド1557B(EVEXバイト3、ビット[4]−B)として解釈される。
例示的なレジスタ・アーキテクチャ
図17は、本発明の一実施形態における、レジスタ・アーキテクチャ1700のブロック図である。例示される実施形態では、512ビット幅の32のベクトルレジスタ1710があり、これらのレジスタは、zmm0からzmm31として参照される。下位の16のzmmレジスタにおける下位256ビットは、レジスタymm0−16にオーバーレイされる。下位の16のzmmレジスタにおける下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0−15にオーバーレイされる。特定のベクトルフレンドリな命令フォーマット1600は、これらのオーバーレイレジスタファイルにおいて、以下の複数のテーブルに図示されるように動作する。
言い換えると、ベクトル長フィールド1559Bは、最大の長さおよび1または複数のより短い長さから選択し、これらのより短い長さのそれぞれは先行する長さの半分であり、ベクトル長フィールド1559Bを有していない命令テンプレートは、最大のベクトル長で動作する。更には一実施形態において、特定のベクトルフレンドリな命令フォーマット1600におけるクラスBの複数の命令テンプレートは、パックドまたはスカラー単精度/倍精度浮動小数点データ、および、パックドまたはスカラー整数データ、で動作する。複数のスカラー演算は、zmm/ymm/xmmレジスタにおける最低位のデータ要素位置で実行される複数のオペレーションである。より高位の複数のデータ要素位置は、その命令に先だってそれらのデータがあったのと同じままとされるか、実施形態に応じてゼロに設定される。
書込みマスクレジスタ1715−例示の実施形態では、8個の書込みマスクレジスタ(k0からk7)があり、それぞれ64ビットのサイズである。代替的な実施形態では、書込みマスクレジスタ1715は、16ビットのサイズである。先述したように本発明の一実施形態において、ベクトルマスクレジスタk0は、書込みマスクとして使用することはできず、通常はk0を示す符号化が書込みマスクのために用いられる場合には、配線接続された0xFFFFの書込みマスクを選択し、その命令に対する書込みマスクを効果的に無効化する。
複数の汎用レジスタ1725−例示の実施形態では、メモリオペランドのアドレスを指定するための既存のx86アドレス指定モードと共に用いられる、16個の64ビット汎用レジスタがある。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSPおよびR8からR15という名称で参照される。
スカラー浮動小数点スタックレジスタファイル(x87スタック)1745では、MMXパックド整数フラットレジスタファイル1750が、その上でエイリアスされる。例示の実施形態では、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(時折、1または複数のアプリケーションコア、1または複数のアプリケーションプロセッサとして参照される)、上述のコプロセッサ、および追加の機能を有してよいチップ上のシステム、を備えてよい。例示的な複数のコアアーキテクチャが、例示的な複数のプロセッサおよび複数のコンピューターアーキテクチャの記載を伴って、次に記載される。
例示的な複数のコアアーキテクチャ
インオーダおよびアウトオブオーダコアのブロック図
図18Aは、本発明の複数の実施形態における、インオーダパイプラインの典型例およびレジスタリネーミング・アウトオブオーダ発行/実行パイプラインの典型例の両方を例示するブロック図である。図18Bは、本発明の複数の実施形態における、プロセッサに含まれるべき、インオーダコア・アーキテクチャの典型的な実施形態と、典型的なレジスタリネーミング・アウトオブオーダ発行/実行アーキテクチャコアとの両方を例示するブロック図である。図18A−Bの実線で囲まれた複数のボックスは、インオーダパイプラインおよびインオーダコアを例示し、一方で、オプショナルで追加される点線で囲まれた複数のボックスは、レジスタリネーミング・アウトオブオーダ発行/実行パイプラインおよびコアを例示する。インオーダの態様が、アウトオブオーダの態様のサブセットであることから、アウトオブオーダの態様が記述される。
図18Aにおいて、プロセッサパイプライン1800は、フェッチ段1802、符号長デコード段1804、デコード段1806、割り当て段1808、リネーム段1810、スケジューリング段1812(ディスパッチまたは発行としても知られる)、レジスタ読み出し/メモリ読み出し段1814、実行段1816、ライトバック/メモリ書込み段1818、例外処理段1822、およびコミット段1824を有する。
図18Bは、実行エンジンユニット1850に連結されたフロントエンド・ユニット1830を有するプロセッサコア1890を示し、両方がメモリユニット1870に連結される。コア1890は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、それらのハイブリッド、またはその他のタイプのコアであってよい。他のオプションとしては、コア1890は、例えば、ネットワークまたはコミュニケーションコア、圧縮エンジン、コプロセッサコア、汎用計算グラフィクス処理ユニット(GPGPU)コア、グラフィックスコア、その同等物、等の特殊目的コアであってよい。
フロントエンド・ユニット1830は、命令キャッシュユニット1834に連結された分岐予測ユニット1832を有し、当該キャッシュユニットは命令トランスレーション・ルックアサイド・バッファ(TLB)1836に連結され、当該バッファは命令取出しユニット1838に連結され、当該ユニットはデコードユニット1840に連結される。デコードユニット1840(またはデコーダ)は、複数の命令をデコードし、出力として1または複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、その他の命令、またはその他の制御信号を生成してよく、これらはオリジナルの命令からデコードされるか、複数のオリジナル命令を反映しているか、或いは、複数のオリジナル命令から導出される。デコードユニット1840は、様々な異なるメカニズムを用いて実装されてよい。複数の適したメカニズムの複数の例としては、これに限定されるわけではないが、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラム可能ロジックアレイ(PLA)、複数のマイクロコード読み出し専用メモリ(ROM)などである。一実施形態において、コア1890は、マイクロコードROM、または、特定のマクロ命令のためのマイクロコードを格納する他の媒体を(デコードユニット1840内、またはフロントエンド・ユニット1830の内部に)有する。デコードユニット1840は、実行エンジンユニット1850においてリネーム/アロケータユニット1852に連結される。
実行エンジンユニット1850は、リタイアメントユニット1854に連結されたリネーム/アロケータユニット1852と、1セットの1または複数のスケジューラユニット1856とを有する。1または複数のスケジューラユニット1856は、 あらゆる個数の異なるスケジューラを表し、予約ステーション、中央命令窓などを含む。1または複数のスケジューラユニット1856は、1または複数の物理レジスタファイル・ユニット1858に連結される。複数の物理レジスタファイルユニット1858のそれぞれが、1または複数の物理レジスタファイルを表し、それらのファイルのうちの異なるいくつかは、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等の、1または複数の異なるデータ型を格納する。一実施形態において、物理レジスタファイルユニット1858は、ベクトルレジスタユニット、書込みマスクレジスタユニットおよびスカラーレジスタユニットを備える。これらの複数のレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ、および複数の汎用レジスタを提供してよい。1または複数の物理レジスタファイルユニット1858はリタイアメントユニット1854によって一部が重複して様々な方法を例示し、それらの方法では、レジスタリネーミングおよびアウトオブオーダ実行が実装されてよい(例えば、1または複数のリオーダ・バッファおよびリタイアレジスタファイルを用いる。1または複数のフューチャーファイル、ヒストリーファイル、およびリタイアレジスタファイルを用いる。レジスタマップと複数レジスタのプールを用いる、等)。リタイアメントユニット1854および1または複数の物理レジスタファイルユニット1858が、1または複数の実行クラスタ1860に連結される。1または複数の実行クラスタ1860は、1セットの1または複数の実行ユニット1862、および、1セットの1または複数のメモリアクセスユニット1864を有する。複数の実行ユニット1862は、様々なオペレーションを実行してよく(例えば、シフト、加算、減算、乗算)、かつ様々なデータ型(例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)で実行してよい。いくつかの実施形態では、特定機能専用のまたは複数機能のセットに専用の多数の実行ユニットを備えてよいが、他の実施形態では、実行ユニットを1つだけ備えてもよく、または、全ての機能を実行するマルチ実行ユニットを備えてもよい。スケジューラユニット1856、物理レジスタファイルユニット1858、および実行クラスタ1860が、場合によっては複数であり得るものとして示される。なぜなら、特定の実施形態では、特定の複数のデータ型/複数のオペレーションのための別個の複数のパイプラインを生成する(例えば、スカラー整数パイプライン、スカラー浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプラインおよび/またはメモリアクセスパイプライン等であり、それぞれが自身のスケジューラユニット、1または複数の物理レジスタファイルユニットおよび/または実行クラスタを有する。そして、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみが1または複数のメモリアクセスユニット1864を有するような特定の複数の実施形態が実装される)。個別の複数パイプラインが用いられるにあたり、これらの1または複数のパイプラインは、アウトオブオーダ発行/実行であり、残りがインオーダであってよいことも理解されるべきである。
複数のメモリアクセスユニット1864のセットはメモリユニット1870に連結され、当該ユニットは、レベル2(L2)キャッシュユニット1876に連結されたデータキャッシュユニット1874に連結されたデータTLBユニット1872を有する。例示的な1つの実施形態において、複数のメモリアクセスユニット1864は、ロードユニット、格納アドレスユニット、および格納データユニットを備え、その各々がメモリユニット1870において、データTLBユニット1872に連結される。命令キャッシュユニット1834は、メモリユニット1870において、さらにレベル2(L2)キャッシュユニット1876に連結される。L2キャッシュユニット1876は1または複数のその他のレベルのキャッシュに連結され、最終的にはメインメモリに連結される。
例として、例示的なレジスタリネーミング・アウトオウブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン1800を実装してよい。
1)命令フェッチ1838がフェッチ段1802と符号長デコード段1804とを実行する。
2)デコードユニット1840がデコード段1806を実行する。
3)リネーム/アロケータユニット1852が、割り当て段1808とリネーム段1810とを実行する。
4)1または複数のスケジューラユニット1856が、スケジュール段1812を実行する。
5)1または複数の物理レジスタファイルユニット1858およびメモリユニット1870が、レジスタ読み出し/メモリ読み出し段1814を実行し、実行クラスタ1860が実行段1816を実行する。
6)メモリユニット1870および1または複数の物理レジスタファイルユニット1858が、ライトバック/メモリ書込み段1818を実行する。
7)様々なユニットが例外処理段1822に含まれてよい。
8)リタイアメントユニット1854および1または複数の物理レジスタファイルユニット1858が、コミット段1824を実行する。
コア1890は、1または複数の命令セット(例えば、X86命令セット(新規のバージョンが追加されたいくつかの拡張と共に)、カリフォルニア州サニーベールのMIPSテクノロジーにおけるMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスのARM命令セット(NEON等のオプショナルな追加拡張と共に)など)をサポートしてよく、ここで記載された1または複数の命令を含んでよい。一実施形態において、コア1890はパックデータ命令セット拡張(AVX1、AVX2など)をサポートするロジックを有し、それによって、多数のマルチメディアアプリケーションによって使用される複数のオペレーションがパックドデータを用いて実行されることを許容する。
このコアは、マルチスレッド(2又はそれ以上の並列のオペレーションやスレッドのセットを実行する)をサポートしてよく、そして様々なやり方でその実行をサポートしてもよいことが理解されるべきであり、その方法としては、タイム・スライス・マルチスレッド、同時マルチスレッド(物理コアが同時にマルチスレッドを行うように、単一の物理コアが複数スレッドのそれぞれに対して論理コアを提供する)、またはその組み合せ(例えば、インテル(登録商標)のハイパースレッド技術のように、タイム・スライスでフェッチし、デコードし、その後、同時マルチスレッドを行う)を含んでよい。
レジスタリネーミングはアウトオブオーダ実行のコンテキストで記載されるものであるが、レジスタリネーミングがインオーダアーキテクチャで用いられてもよいことが理解されるべきである。例示されたプロセッサの実施形態では、別個の命令キャッシュユニット1834、データキャッシュユニット1874、および共有レベル2キャッシュユニット1876を有しているが、代替の複数の実施形態では、例えばレベル1(L1)内部キャッシュまたはマルチレベルの内部キャッシュ等の、命令とデータの両方のための単一の内部キャッシュを有してもよい。いくつかの実施形態においてシステムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせ、を有してよい。或いは、全てのキャッシュが、コアおよび/またはプロセッサの外部にあってもよい。
特定の例示的なインオーダコアアーキテクチャ
図19A、Bは、インオーダコアアーキテクチャのより具体的な例のブロック図を示し、そのコアは、1つのチップにおけるいくつかのロジックブロック(同じタイプのおよび/または異なるタイプの他の複数コアを含む)の1つでありうる。複数のロジックブロックは、アプリケーションに応じて、何らかの固定機能ロジック、複数のメモリI/Oインターフェースおよび他の必要なI/Oロジックと共に、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を介して通信する。
図19Aは、本発明の複数の実施形態における、オンダイ相互接続ネットワーク1902への接続およびレベル2(L2)キャッシュ1904のローカルサブセットと共に、単一のプロセッサコアのブロック図を示す。一実施形態において、命令デコーダ1900は、パックデータ命令セット拡張と共に、x86命令セットをサポートする。L1キャッシュ1906は、低レイテンシアクセスで、スカラーユニットおよびベクトルユニットへとメモリをキャッシュすることを許容する。(設計を単純化した)一実施形態において、スカラーユニット1908およびベクトルユニット1910が別個の複数のレジスタセット(それぞれ、複数のスカラーレジスタ1912および複数のベクトルレジスタ1914)を使用し、これらの間で転送されるデータはメモリに書込まれ、そして、レベル1(L1)キャッシュ1906から再度読み出されるが、本発明の複数の代替の実施形態においては、異なるアプローチを用いてもよい(例えば、単一のレジスタセットを用いる、または、2つのレジスタファイル間で書込み・再度読み出しをすることなく、データが転送されることを許容する通信パスを備える、など)。
L2キャッシュ1904のローカルサブセットは、1プロセッサコアにつき別個の複数のローカルサブセットへと分割される、グローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1904における自身のローカルサブセットへの直接のアクセスパスを有する。プロセッサコアに読み取られるデータは、そのL2キャッシュのサブセット1904に格納され、かつ、自身のローカルL2キャッシュの複数のサブセットにアクセスする他の複数のプロセッサコアと並行して素早くアクセスされることが可能である。プロセッサコアに書き込まれるデータは、その自身のL2キャッシュのサブセット1904に格納され、必要に応じて、他の複数のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを保証する。リングネットワークは、双方向的であり、複数のプロセッサコア、複数のL2キャッシュおよび他の複数のロジックブロック等のエージェントが、チップ内で互いに通信することを可能とする。各リングデータパスは、1方向当たり1012ビット幅である。
図19Bは、本発明の実施形態における図19Aのプロセッサコアの部分の拡張図である。図19Bは、L1キャッシュ1904のL1データキャッシュ1906A部分だけでなく、ベクトルユニット1910およびベクトルレジスタ1914に関して、より詳細を有する。具体的には、ベクトルユニット1910は、16−ワイド・ベクトル処理ユニット(VPU)であり(16−ワイドALU1928を参照)、このユニットは、整数命令、単精度浮動小数命令および倍精度浮動小数命令の1つまたは複数を実行する。VPUは、メモリ入力において、スウィズルユニット1920による複数のレジスタ入力のスウィズル、数字変換ユニット1922A−Bによる数字変換、および、複製ユニット1924による複製をサポートする。複数の書込みマスクレジスタ1926は、結果としてのベクトル書き込みをプレディケートすることを許容する。
統合メモリコントローラおよびグラフィックスを備えたプロセッサ 図20は、本発明の実施形態におけるプロセッサ2000のブロック図であって、1より多くのコアを有してよく、統合メモリコントローラを有してよく、集積化されたグラフィックスを有してよい。図20において実線で囲まれた複数のボックスは、単一のコア2002Aを有するプロセッサ2000、システムエージェント2010、1セットの1または複数のバスコントローラユニット2016を例示し、一方で、オプショナルで追加される点線で囲まれた複数のボックスは、マルチコア2002A−Nを有する代替のプロセッサ2000、システムエージェントユニット2010における1セットの1または複数の統合メモリコントローラユニット2014、および特殊目的ロジック2008を例示する。
したがって、プロセッサ2000の異なる複数の実装としては、1)統合化されたグラフィックおよび/または科学(スループット)ロジックである特殊目的ロジック2008を有する1つのCPU(このロジックは1または複数のコアを含んでよい)、および、1または複数の汎用コア2002A−Nである複数コア2002A−N(例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら2つの組み合わせ)、2)グラフィックスおよび/または科学(スループット)を主目的とした多数の特殊目的コアである複数コア2002A−Nを有する1つのコプロセッサ、および、3)多数の汎用インオーダコアである複数コア2002A−Nを有する1つのコプロセッサ、を備えてよい。したがって、プロセッサ2000は、例えばネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィクス処理ユニット)、高スループット多数統合コア(MIC)コプロセッサ(30またはそれよりも多くのコアを含む)、組込みプロセッサ、またはその同等物等の、汎用プロセッサ、コプロセッサ、または特殊目的プロセッサであってよい。プロセッサは、1または複数のチップに実装されてよい。プロセッサ2000は、例えば、BiCMOS、CMOSまたはNMOS等の多くのプロセス技術のいずれを用いた1または複数の基板の一部であってよく、および/または、1または複数の基板に実装されてよい。
メモリ階層は、複数のコア内における1または複数のキャッシュレベル、1セットのまたは1若しくは複数の共有キャッシュユニット2006、および、1セットの複数の統合メモリコントローラユニット2014に連結された外部メモリ(不図示)を有する。複数の共有キャッシュユニット2006のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)または他のキャッシュレベル等の1または複数の中レベルキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせを、有してよい。一実施形態において、リングベース相互接続部2012は、統合グラフィックスロジック2008、複数の共有キャッシュユニット2006のセット、および、システムエージェントユニット2010/1または複数の統合メモリコントロールユニット2014を相互接続するが、代替の複数の実施形態では、これらのユニットを相互接続するために周知の技法をいくつ用いてもよい。一実施形態では、1または複数のキャッシュユニット2006とコア2002A−Nとの間で、コヒーレンシが維持される。
いくつかの実施形態では、コア2002A−Nのうちの1つまたは複数が、マルチスレッドを行うことができる。システムエージェント2010は、コア2002A−Nを調整し操作する複数のコンポーネントを有する。システムエージェントユニット2010は、例えば、電力制御ユニット(PCU)とディスプレイユニットとを有してよい。PCUは、コア2002A−Nおよび統合グラフィックスロジック2008の電力状態を調整するための必要なロジックおよびコンポーネントであってよく、または、それらのロジックおよびコンポーネントを有してもよい。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
コア2002A−Nは、アーキテクチャ命令セットに関して同種(ホモジニアス)または異種(ヘテロジニアス)であってよい。即ち、コア2002A−Nの2又はそれ以上が同じ命令セットを実行することができ、その一方で、他のコアは、その命令セットのサブセットまたは異なる命令セットだけを実行することができてよい。
例示的な複数のコンピューターアーキテクチャ 図21−24は、例示的な複数のコンピューターアーキテクチャの複数のブロック図である。ラップトップ、デスクトップ、ハンドヘルド型PC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込みプロセッサ、デジタルシグナルプロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、および、様々なその他の電子デバイスのための技術において知られている他の複数のシステム設計および複数の構成もまた適する。一般的には、本明細書で開示されたようなプロセッサおよび/または他の実行ロジックを組み込むことが可能な、非常に多様なシステムまたは電子デバイスが、概して適する。
ここで図21を参照すると、本発明の一実施形態におけるシステム2100のブロック図が示される。システム2100は、1または複数のプロセッサ2110、2115を備えてよく、これらはコントローラハブ2120に連結される。一実施形態においてコントローラハブ2120は、グラフィックメモリコントローラハブ(GMCH)2190と、入出力ハブ(IOH)2150を有し(これらは別のチップに搭載されてよい)、GMCH2190は、メモリ2140およびコプロセッサ2145が連結されたメモリおよびグラフィクスコントローラを含み、IOH2150は、入出力(I/O)デバイス2160をGMCH2190と連結する。或いは、メモリおよびグラフィクスコントローラの1つまたは両方がプロセッサ内で統合され(本明細書で記載されるように)、メモリ2140とコプロセッサ2145がプロセッサ2110に直接連結され、かつ、単一のチップのコントローラハブ2120にIOH2150と共に連結される。
複数の追加プロセッサ2115がオプショナルなものであることが、図21では破線で示されている。プロセッサ2110、2115のそれぞれが、本明細書で記載される1または複数の処理コアを有してよく、プロセッサ2000のあるバージョンであってよい。
メモリ2140は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、位相変化メモリ(PCM)、またはこの2つの組み合わせであってよい。少なくとも1つの実施形態では、コントローラハブ2120が、フロントサイドバス(FSB)などのマルチドロップバス、クイックパス相互接続(QPI)などのポイントツーポイントインターフェース、または、同様の接続2195を介して、1または複数のプロセッサ2110、2115と通信する。
一実施形態においてコプロセッサ2145は、例えば、ハイスループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組込みプロセッサ、またはその同等物などの特殊目的プロセッサである。一実施形態において、コントローラハブ2120は、統合化グラフィックアクセラレータを有してよい。
アーキテクチャ特性、マイクロアーキテクチャ特性、温度特性、電力消費特などを含んだ性能指標の範囲に関して、物理的なリソース2110、2115の間には、様々な違いがあり得る。
一実施形態において、プロセッサ2110は、一般的なタイプの複数のデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令が複数の命令の内部に埋め込まれてよい。プロセッサ2110は、これらのコプロセッサ命令を、取り付けられたコプロセッサ2145によって実行されるべきタイプのものとして認識する。従って、プロセッサ2110は、コプロセッサバスまたは他の相互接続において、これらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)を、コプロセッサ2145へと発行する。1または複数のコプロセッサ2145は、受信した複数のコプロセッサ命令を受け付け、そして実行する。
ここで図22を参照すると、本発明の実施形態に従う、第1のより具体的な例示的システム2200のブロック図が示される。図22に示されるように、マルチプロセッサシステム2200は、ポイントツーポイント相互接続システムであって、ポイントツーポイント相互接続2250を介して連結された第1のプロセッサ2270と第2のプロセッサ2280とを含む。プロセッサ2270および2280のそれぞれは、プロセッサ2000のあるバージョンであってよい。本発明の一実施形態において、プロセッサ2270および2280は、それぞれ、プロセッサ2110および2115であり、その一方で、コプロセッサ2238はコプロセッサ2145である。他の実施形態では、プロセッサ2270および2280はそれぞれ、プロセッサ2110およびコプロセッサ2145である。
プロセッサ2270および2280は、統合メモリコントローラ(IMC)ユニット2272および2282をそれぞれ含むように示されている。プロセッサ2270は、また、その複数のバスコントローラユニットの一部としてポイントツーポイント(P−P)インターフェース2276および2278を有し、同様に、第2のプロセッサ2280は、P−Pインターフェース2286および2288を有する。プロセッサ2270、2280は、P−Pインターフェース回路2278、2288を用いて、ポイントツーポイント(P−P)インターフェース2250を介して、情報を交換してよい。図22に示されるように、IMC2272および2282は、プロセッサを各メモリ、即ち、メモリ2232およびメモリ2234へと連結し、これらのメモリは、ローカルに複数のプロセッサへと取り付けられたメインメモリにおける複数の部分であってよい。
プロセッサ2270、2280は、P−Pインターフェース回路2276、2294、2286、2298を用いて、P−Pインターフェース2252、2254を介して、チップセット2290と情報をそれぞれ交換してよい。チップセット2290は、高性能インターフェース2239を介して、コプロセッサ2238と、任意選択的に情報を交換してよい。一実施形態では、コプロセッサ2238は、例えば、ハイスループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組込みプロセッサ、またはその同等物などの特殊目的プロセッサである。
共有キャッシュ(不図示)は、プロセッサに含まれてもよく、または両プロセッサの外にあってもよく、であるにもかかわらずP−P相互接続を介してプロセッサと接続されてよく、これにより、もし1つのプロセッサが低電力モードになった場合には、一方または両方のプロセッサのローカルキャッシュの情報が共有キャッシュに格納されてよい。
チップセット2290は、インターフェース2296を介して第1バス2216へ連結されてよい。本発明はこれには限定されないが、一実施形態において、第1バス2216はペリフェラルコンポーネントインターコネクト(PCI)バス、PCIエクスプレスバスなどのバス、或いは、他の第3世代I/O相互接続バスであってよい。
図22に示されるように、様々な複数のI/Oデバイス2214がバスブリッジ2218と共に第1バス2216に連結されてよく、当該バスブリッジは第1バス2216を第2バス2220へ連結する。一実施形態において、複数のコプロセッサ、複数のハイスループットMICプロセッサ、複数のGPGPU、複数のアクセラレータ(複数のグラフィックアクセラレータや複数のデジタルシグナル処理(DSP)ユニットなど)、複数のフィールドプログラマブルゲートアレイ、または他のプロセッサなどの1または複数の追加のプロセッサ2215が、第1バス2216に連結される。一実施形態において、第2バス2220は、低ピンカウント(LPC)バスであってよい。様々なデバイスが第2バス2220に連結されてよく、一実施形態では、そのようなデバイスとしては、例えば、キーボードおよび/またはマウス2222、複数の通信デバイス2227、および、命令/コードおよびデータ2230を備えてよいディスクドライブまたは他の大容量ストレージデバイス等の記憶ユニット2228、を含む。更には、オーディオI/O2224が、第2バス2220に連結されてよい。他の複数のアーキテクチャが可能であることに留意されたい。例えば、システムは、図22のポイントツーポイントアーキテクチャではなく、マルチドロップバスや他のそのようなアーキテクチャを実装してもよい。
ここで図23を参照すると、本発明の実施形態に従う、第2のより具体的な例示的システム2300のブロック図が示される。図22および23と同じ要素には同様の参照番号を有し、図23における他の様態が分かりにくくなるのを避けるために、図22における所定の態様が図23から省略されている。図23は、プロセッサ2270、2280が、それぞれ、統合化されたメモリおよびI/O制御ロジック(CL)2272、2282を有してよいことを例示する。従って、CL2272、2282は、複数の統合メモリコントローラユニットおよびI/O制御ロジックを有する。
図23は、メモリ2232、2234がCL2272、2282に連結されるだけでなく、複数のI/Oデバイス2314もまた制御ロジック2272、2282に連結されることを、例示する。複数のレガシーI/Oデバイス2315がチップセット2290に連結される。
ここで図24を参照すると、本発明の実施形態に従う、SoC2400のブロック図が示される。図20と類似の要素は、同じ参照番号を有する。また点線で囲まれた複数のボックスは、より上級版のSoCにおける、任意選択的な特徴である。図24において、1または複数の相互接続ユニット2402が、1セットの1または複数のコア202A−Nおよび1または複数のキャッシュユニット2006を有するアプリケーションプロセッサ2410;システムエージェントユニット2010;1または複数のバスコントローラユニッ2016;1または複数の統合メモリコントローラユニット2014;統合グラフィックスロジック、イメージプロセッサ、オーディオプロセッサおよびビデオプロセッサを有してよい1セットのまたは1若しくは複数のコプロセッサ2420;スタティックランダムアクセスメモリ(SRAM)ユニット2430;ダイレクトメモリアクセス(DMA)ユニット2432;および1または複数の外部のディスプレイへ結合するためのディスプレイユニット2440、に連結される。一実施形態において、1または複数のコプロセッサ2420は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ、組込みプロセッサ、またはその同等物などの特殊目的プロセッサである。
本明細書に開示される複数のメカニズムの複数の実施形態が、ハードウェア、ソフトウェア、ファームウェア、または、そのような実装アプローチの組み合わせで、実装されてよい。本発明の複数の実施形態が、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/または記憶要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備えたプログラム可能なシステムで実行される複数のコンピュータプログラムまたはプログラムコードとして実装されてよい。
本明細書に記載された複数の機能を実行し、そして出力情報を生成するために、図22に図示されたコード2230のようなプログラムコードが、入力命令へ適用されてよい。出力情報は周知のやり方で1または複数の出力デバイスへ適用されてよい。この適用のために、処理システムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特殊目的集積回路(ASIC)またはマイクロプロセッサなどのプロセッサを有する任意のシステムを備えてよい。
プログラムコードは、処理システムとの通信を行うべく、高水準の手続型またはオブジェクト指向型のプログラミング言語で実装されてよい。プログラムコードは、また、要求に応じてアセンブリ言語またはマシン言語で実装されてよい。実際に、ここで記載されるメカニズムは、その範囲に関して、いかなる特定のプログラミング言語にも限定されない。いずれの場合であっても、言語はコンパイラ型またはインタプリタ型の言語であってよい。
少なくとも1つの実施形態における1または複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な命令により実装されてよく、機械によって読み取られると、ここに記載された複数の技術を実行させるべく機械にロジックを組み上げさせる。IPコアとして知られるそのようなリプレゼンテーションは有形の機械可読媒体に格納され、実際にロジックまたはプロセッサを作る製造機械へと搭載すべく、様々なカスタマーまたは製造施設へ供給されてよい。
そのような機械可読格納媒体は、これに限定されるわけではないが、機械またはデバイスによって製造または形成された品物の非一時的な有形の配列を有してよく、ハードディスクや、フロッピー(登録商標)ディスク、光ディスク、リードオンリコンパクトディスクメモリ(CD−ROM)、書換可能なコンパクトディスク(CD−RW)、光磁気ディスクを含む他のディスクタイプ、そして、読み取専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、ダイナミックランダムアクセスメモリ(DRAM)やスタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルROM(EPROM)、フラッシュメモリ、電気消去可能プログラマブルROM(EEPROM)、位相変化メモリ(PCM)、磁気または光カードなどの半導体デバイスや、電子的な命令を格納するのに適したその他の媒体、を有してよい。
従って、また本発明の実施形態によると、非一時的で有形の機械可読媒体は、複数の命令を含み、またはハードウェア記述言語(HDL)のような設計データを含み、これにより、ここで記載された構造、回路、装置、プロセッサおよび/またはシステムの特徴を定義する。そのような実施形態はまた、プログラム製品として参照されてよい。
エミュレーション(バイナリ変換、コードモーフィングなどを含む) 場合によっては、ソース命令セットからの命令をターゲット命令セットへと変換すべく、命令コンバータが用いられよい。例えば、命令コンバータは、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)、1の命令を、コアによって処理されるべき1または複数の命令へと、翻訳、モーフィング、エミュレートまたは変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装されてよい。命令コンバータは、プロセッサ上にあってもなくてもよく、或いは、一部がプロセッサにあり一部がプロセッサになくてもよい。
図25は、本発明の複数の実施形態における、ソース命令セット中の複数のバイナリ命令を、ターゲット命令セット中の複数のバイナリ命令へと変換するためのソフトウエア命令コンバータの使用を対比したブロック図である。代替的には、命令コンバータはソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてよいが、例示された実施形態では、命令コンバータはソフトウエア命令コンバータである。図25は、高水準言語2502によるプログラムを示しており、X86バイナリコード2506を生成すべくX86コンパイラ2504を用いてコンパイルされてよく、X86バイナリコード2506は、少なくとも1つのX86命令セットコアを有するプロセッサ2516によってネイティブで実行される。少なくとも1つのX86命令セットコアを有するプロセッサ2516は、少なくとも1つのX86命令セットコアを有するインテルプロセッサと実質的に同じ複数の機能を実行できる全てのプロセッサを表しており、これらの同じ機能は、1)インテルX86命令セットコアの命令セットの実質的な一部、または2)少なくとも1つのX86命令セットコアを有するインテルプロセッサと実質的に同じ結果をもたらすべく、少なくとも1つのX86命令セットコアを有するインテルプロセッサで実行することをターゲットとした、アプリケーションのオブジェクトコードバージョンまたは他のソフトウェア、を互換的に実行または処理することによって、実行できる。x86コンパイラ2504は、X86バイナリコード2506(例えば、オブジェクトコード)を生成することが可能なコンパイラを表しており、このバイナリコードは、追加の結合処理を用いて、または用いずに、少なくとも1つのx86命令セットコアを有するプロセッサ2516上で実行されうる。同様に、図25は、高水準言語2502によるプログラムを示しており、代替の命令セットバイナリコード2510を生成すべく代替の命令セットコンパイラ2508を用いてコンパイルされてよく、バイナリコード2510は、少なくとも1つのX86命令セットコアを有さないプロセッサ2514によってネイティブで実行される(例えば、カリフォルニア州サニーベールのMIPSテクノロジーにおけるMIPS命令セットを実行する、および/または、カリフォルニア州サニーベールのARMホールディングスのARM命令セットを実行する、複数のコアを備えるプロセッサ)。命令コンバータ2512は、X86バイナリコード2506を、X86命令セットコアを有さないプロセッサ2514によってネイティブ実行されうるコードへと変換するために用いられる。この変換後のコードは、代替の命令セットバイナリコード2510と同じではない可能性が高い。なぜならば、これができるような命令コンバータを作成することは難しいからである。しかしながら変換後のコードは、一般的なオペレーションを達成し、代替の命令セットからの命令によって作られうる。従って、命令コンバータ2512は、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表し、これらは、エミュレーション、シミュレーションまたはその他のプロセスを通じて、X86命令セットプロセッサまたはコアを有さないプロセッサや他の電子デバイスが、x86バイナリコード2506を実行することを許容する。
図3−4に記載された複数のコンポーネント、複数の特徴および複数の詳細は、また図1−2において、任意選択的に用いられてよい。図6−13に記載された複数のコンポーネント、複数の特徴および複数の詳細は、また、図1または5において、任意選択的に用いられてよい。さらには、本明細書で記載されたいずれかの装置のための複数のコンポーネント、複数の特徴および複数の詳細は、また、本明細書で記載されたいずれかの方法において、任意選択的に用いられてよく、および/または適用されてよく、それらの方法は、複数の実施形態において、そうした装置によっておよび/または装置と共に実行されてよい。本明細書で記載されたどの複数のプロセッサが、本明細書で開示されたどのコンピュータシステムまたは他のシステムに含まれてもよい。いくつかの実施形態において、複数の命令は、本明細書で開示された複数の命令フォーマットにおける複数の特徴や複数の詳細を有してよいが、これは必須ではない。
詳細な説明と請求項において、「連結される」および/または「接続される」という用語は、それらの派生的な意味を伴って、用いられていたかもしれない。これらの用語は、互いに同義語としては意図されていない。むしろ、複数の実施形態において、「接続され」とは、互いに2又はそれ以上の要素が直接に物理的および/または電気的に接触した状態にあることを示すために用いられてよい。「連結され」とは、2又はそれ以上の要素が、互いに、直接に物理的および/または電気的に接触した状態にあることを意味してよい。しかしながら、「連結され」とは、また、2又はそれ以上の要素が、互いに直接的には接触はしていないが、なおも、互いに協力し、または相互作用することを意味してよい。例えば、実行ユニットは、1または複数の介在コンポーネントを通じて、レジスタおよび/またはデコードユニットに連結されてよい。図中、矢印は、接続および連結を示すのに用いられる。
「および/または」という用語が用いられていたかもしれない。本明細書で用いられるように、「および/または」という用語は、1つまたは他の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は、複数のパックドデータレジスタと、命令をデコードするデコードユニットとを有するプロセッサである。上記命令は、少なくとも4つのデータ要素の第1のセットを有する第1のソースパックドデータを示し、少なくとも4つのデータ要素の第2のセットを有する第2のソースパックドデータを示し、かつ行き先格納位置を示す。実行ユニットは、上記の複数のパックドデータレジスタおよび上記のデコードユニットに結合される。実行ユニットは、上記命令に応答して結果パックドデータを上記行き先格納位置に格納する。上記結果パックドデータは、少なくとも4つのインデックスを有する。上記複数のインデックスは、上記第1および第2のソースパックドデータにおける対応する複数のデータ要素位置を特定する。上記複数のインデックスは、上記第1および第2のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す上記結果パックドデータにおける複数の位置に格納される。
例2は、例1のプロセッサを備えており、上記実行ユニットは、上記第1および第2のソースパックドデータのそれぞれにおいて、上記複数のインデックスのそれぞれが対応するデータ要素位置を特定する結果パックドデータを格納する。また、実行ユニットは上記命令に応答して少なくとも4つのマスク要素を有する結果マスクを格納し、この結果マスクにおいて、各マスク要素は上記複数のインデックスの異なる1つに対応する。また、各マスク要素は上記対応するインデックスに対する上記データ要素位置が上記第1のソースパックドデータにあるか、または上記第2のソースパックドデータにあるかを示す。
例3は、例2のプロセッサを備え、さらに結果マスクを格納するマスクレジスタを備える。上記命令は、パックドデータオペレーションをプレディケートする叙述オペランドとして結果マスクを示すことができる第2の命令を有する命令セットに含まれる。
例4は、例1のプロセッサを備え、上記実行ユニットは、上記結果パックドデータを格納し、この結果パックドデータにおける上記複数のインデックスのそれぞれが、上記第1および第2のソースパックドデータのうちの1つにおいて、対応する単一のデータ要素を特定する。
例5は、例1から4のいずれかに記載のプロセッサを備え、上記実行ユニットは、上記命令に応答して、第2の結果パックドデータを、上記命令によって示される第2の行き先格納位置に格納する。上記第2の結果パックドデータは、上記ソートされた順序を反映した上記第2の結果パックドデータの複数の位置に格納された上記複数のインデックスに対応する上記第1および第2のソースパックドデータからの上記複数のデータ要素を有する。
例6は、例1から4のいずれかに記載のプロセッサを備え、上記デコードユニットは、上記命令に対してソートされた順序となっていると仮定される上記少なくとも4つのデータ要素を含む上記第1のソースパックドデータを示し、かつ上記命令に対してソートされた順序となっていると仮定される前記少なくとも4つのデータ要素を含む上記第2のソースパックドデータを示す命令、をデコードする。
例7は、例1から4のいずれかに記載のプロセッサを備え、上記デコードユニットは、上記命令に対してソートされた順序となっていないと仮定される上記少なくとも4つのデータ要素を含む上記第1のソースパックドデータを示し、かつ上記命令に対してソートされた順序となっていないと仮定される前記少なくとも4つのデータ要素を含む上記第2のソースパックドデータを示す命令、をデコードする。
例8は、例1から4のいずれかに記載のプロセッサを備え、上記実行ユニットは上記結果パックドデータを格納し、この結果パックドデータにおいて、上記複数のインデックスが、上記第1および第2のソースパックドデータの上記複数のデータ要素の全てにおける最小の半分を含む上記対応する複数のデータ要素の上記ソートされた順序を表す上記複数の位置に、格納される。
例9は、例1から4のいずれかに記載のプロセッサを備え、上記実行ユニットは、上記結果パックドデータを格納し、この結果パックドデータにおいて、上記複数のインデックスが、上記第1および第2のソースパックドデータの上記複数のデータ要素の全てにおける最大の半分を含む上記対応する複数のデータ要素の前記ソートされた順序を表す上記複数の位置に、格納される。
例10は、例1から4のいずれかに記載のプロセッサを備え、上記デコードユニットは、それぞれが32ビットおよび64ビットの一方を有する少なくとも8つのデータ要素を含む上記第1のソースパックドデータを示す上記命令を、デコードする。
例11は、命令を受信する段階を備えるプロセッサにおける方法である。上記命令が、少なくとも4つのデータ要素の第1のセットを有する第1のソースパックドデータを示し、少なくとも4つのデータ要素の第2のセットを有する第2のソースパックドデータを示し、かつ行き先格納位置を示す。上記命令に応答して結果パックドデータを上記行き先格納位置に格納する。上記結果パックドデータは少なくとも4つのインデックスを有する。上記複数のインデックスは、上記第1および第2のソースパックドデータにおける対応する複数のデータ要素位置を特定する。上記複数のインデックスは、上記第1および第2のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す上記結果パックドデータにおける複数の位置に格納される。
例12は、例11の方法を備え、受信する段階が、上記少なくとも4つのデータ要素をソートされた順序で有する上記第1のソースパックドデータを示す上記命令を受信する段階を有する。
例13は、例11または12の方法を備え、上記結果パックドデータを格納する段階は、結果パックドデータを格納する段階を有し、当該段階において、上記複数のインデックスのそれぞれが、上記第1および第2のソースパックドデータのうちの1つにおいて、対応する単一のデータ要素を特定する。
例14は、複数のパックドデータレジスタと、命令をデコードするデコードユニットとを有するプロセッサである。上記命令は、ソートされた順序ではない少なくとも4つのデータ要素を有するソースパックドデータを示し、かつ行き先格納位置を示す。実行ユニットが、上記複数のパックドデータレジスタおよび上記デコードユニットに結合される。上記実行ユニットは、上記命令に応答して結果パックドデータを上記行き先格納位置に格納する。上記結果パックドデータは少なくとも4つのインデックスを有する。上記複数のインデックスは、上記ソースパックドデータにおける対応する複数のデータ要素を特定する。上記複数のインデックスは、上記ソースパックドデータにおいて上記対応する複数のデータ要素の上記ソートされた順序を表す上記結果パックドデータにおける複数の位置に格納される。
例15は、例14のプロセッサを備え、上記実行ユニットは、上記命令に応答して、第2の結果パックドデータを、上記命令によって示される第2の行き先格納位置に格納し、上記第2の結果パックドデータは、上記ソートされた順序を反映した上記第2の結果パックドデータの複数の位置に格納された前記対応する複数のデータ要素を有する。
例16は、例14または15のプロセッサを備え、上記結果パックドデータは、上記ソースパックドデータにおける全てのデータ要素に対応する複数のインデックスを有する。
例17は、例14または15のプロセッサを備え、上記デコードユニットは、それぞれが32ビットおよび64ビットの一方を有する少なくとも8つのデータ要素を含む上記ソースパックドデータを示す上記命令を、デコードする。
例18は、命令を受信する段階を備えたるプロセッサにおける方法であり、上記命令は、ソートされた順序ではない少なくとも4つのデータ要素を有するソースパックドデータを示し、かつ行き先格納位置を示す。
上記命令に応答して上記行き先格納位置に、結果パックドデータを格納する。上記結果パックドデータは少なくとも4つのインデックスを有する。上記複数のインデックスは、上記ソースパックドデータにおける対応する複数のデータ要素を特定する。上記複数のインデックスは、上記ソースパックドデータにおいて前記対応する複数のデータ要素の前記ソートされた順序を表す前記結果パックドデータにおける複数の位置に格納される。
例19は、例18の方法を備え、上記命令によって示される第2の行き先格納位置に第2の結果パックドデータを格納する段階を更に備え、上記第2の結果パックドデータは、上記ソートされた順序を反映した複数の位置に格納された上記対応する複数のデータ要素を有する。
例20は例18または19の方法を備え、受信する段階は、それぞれが32ビットおよび64ビットの一方を有する少なくとも8つのデータ要素を含む上記ソースパックドデータを示す上記命令を受信する段階を有し、格納する段階は、上記ソースパックドデータにおける全てのデータ要素に対応する複数のインデックスを有する上記結果パックドデータを格納する段階を有する。
例21は、相互接続と、この相互接続に結合されたプロセッサとを有する、複数の命令を処理するシステムである。上記プロセッサは命令を受信し、上記命令は、少なくとも4つのデータ要素の第1のセットを有する第1のソースパックドデータを示し、少なくとも4つのデータ要素の第2のセットを有する第2のソースパックドデータを示し、かつ宛先レジスタを示す。上記プロセッサは、上記命令に応答して、結果パックドデータを上記宛先レジスタに格納する。上記結果パックドデータは少なくとも4つのインデックスを有する。上記複数のインデックスは、上記第1および第2のソースパックドデータにおける対応する複数のデータ要素位置を特定する。上記複数のインデックスは、上記第1および第2のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す上記結果パックドデータにおける複数の位置に格納される。ダイナミックランダムアクセスメモリ(DRAM)が、上記相互接続に結合される。上記DRAMは、データをソートすべく上記結果パックドデータの上記複数のインデックスを使用するためのアルゴリズムを任意選択的に格納する。
例22は、例21のシステムを備え、上記プロセッサは、結果パックドデータを格納し、この結果パックドデータにおける上記複数のインデックスのそれぞれが、上記第1および第2のソースパックドデータのうちの1つにおいて、上記対応する単一のデータ要素を特定する。
例23は、非一時的機械可読記憶媒体を備えた製造品であり、この非一時的機械可読記憶媒体は命令を格納する。上記命令は少なくとも4つのデータ要素の第1のセットを有する第1のソースパックドデータを示し、少なくとも4つのデータ要素の第2のセットを有する第2のソースパックドデータを示し、かつ行き先格納位置を示す。上記命令は機械に実行されると上記機械に複数のオペレーションを実行させ、上記複数のオペレーションは、上記命令に応答して結果パックドデータを上記行き先格納位置に格納する段階を備える。上記結果パックドデータは少なくとも4つのインデックスを有する。上記複数のインデックスは、上記第1および第2のソースパックドデータにおける対応する複数のデータ要素位置を特定する。上記複数のインデックスは、上記第1および第2のソースパックドデータにおいて対応する複数のデータ要素のソートされた順序を表す上記結果パックドデータにおける複数の位置に格納される。
例24は、例23の製造品を備え、上記命令は、上記少なくとも4つのデータ要素をソートされた順序で有する上記第1のソースパックドデータを示す。
例25は、例11から13のいずれか1つに記載された方法を実行するための手段を備えた、プロセッサまたは他の装置である。
例26は、例11から13のいずれか1つに記載された方法を実行するための、モジュール、ユニット、ロジック、回路、手段、またはこれらの任意の組み合せを備えた、プロセッサまたは他の装置である。
例27は、機械可読媒体を備える製造品であり、任意選択的に、機械可読媒体は、プロセッサ、コンピュータシステム、またはその他の機械によって実行された場合および/または時に、当該機械に、例11から13のいずれか1つの方法を実行させる命令を提供する非一時的機械可読記憶媒体であってよい。
例28は、相互接続と、この相互接続に連結されたプロセッサと、この相互接続に連結された少なくとも1つのコンポーネントとを備えたコンピュータシステムまたは他の電子デバイスであり、上記コンポーネントは、ダイナミックランダムアクセスメモリ(DRAM)、グラフィックスチップ、無線通信チップ、位相変化メモリ、ビデオカメラから選択され、上記コンピュータシステムまたは他の電子デバイスは、例11から13のいずれか1つの方法を実行可能である。
例29は、例18から20のいずれか1つの方法を実行するための手段を備えた、プロセッサまたは他の装置である。
例30は、例18から20のいずれか1つに記載された方法を実行するための、モジュール、ユニット、ロジック、回路、手段、またはこれらの任意の組み合せを備えた、プロセッサまたは他の装置である。
例31は、機械可読媒体を備える製造品であり、任意選択的に、機械可読媒体は、プロセッサ、コンピュータシステム、またはその他の機械によって実行された場合および/または時に、当該機械に、例18から20のいずれか1つの方法を実行させる命令を提供する非一時的機械可読記憶媒体であってよい。
例32は、相互接続と、この相互接続に連結されたプロセッサと、この相互接続に連結された少なくとも1つのコンポーネントとを備えたコンピュータシステムまたは他の電子デバイスであり、上記コンポーネントは、ダイナミックランダムアクセスメモリ(DRAM)、グラフィックスチップ、無線通信チップ、位相変化メモリ、ビデオカメラから選択され、上記コンピュータシステムまたは他の電子デバイスは、例18から20のいずれか1つの方法を実行可能である。
例33は、本明細書に実質的に記載された、1または複数のオペレーションまたはあらゆる方法を実行可能な、プロセッサまたは他の装置である。
例34は、本明細書に実質的に記載された、1または複数のオペレーションまたはあらゆる方法を実行するための手段を備えた、プロセッサまたは他の装置である。
例35は、本明細書に実質的に記載されたあらゆる命令を実行する、プロセッサまたは他の装置である。
例36は、本明細書に実質的に記載されたあらゆる命令を実行するための手段を備えた、プロセッサまたは他の装置である。
例37は、第1の命令を変換する有する方法を備え、この命令は、本明細書で実質的に開示された命令のいずれであってもよく、また第1の命令セットからの命令であってよく、上記第1の命令は第2の命令セットにおける1または複数の命令へと変換される。上記方法は、また、プロセッサ上で、上記第2の命令セットにおける1または複数の命令を、デコードし実行する段階を有する。上記実行する段階は、宛先に結果を格納する段階を有する。上記結果は、第1の命令のために本明細書で実質的に開示された複数の結果のうちのいずれを有してもよい。
例38は、第1の命令セットにおける複数の命令をデコード可能なデコードユニットを有するプロセッサまたは他の装置を備える。上記デコードユニットは、第1の命令をエミュレートする1または複数の命令を受信し、この第1の命令は、本明細書で実質的に開示された複数の命令のうちのいずれであってもよく、また、第2の命令セットからの命令である。上記プロセッサまたは他の装置は、また、上記第1の命令セットにおける1または複数の命令を実行するために、上記デコードユニットに連結された1または複数の実行ユニットを有する。1または複数の実行ユニットは、第1の命令セットにおける1または複数の命令に応答して、宛先に結果を格納することが可能である。この結果は、第1の命令のために本明細書で実質的に開示された複数の結果のうちのいずれを有してもよい。
例39は、第1の命令セットの命令をデコード可能なデコードユニットを含み、かつ、1または複数の実行ユニットを含むプロセッサを有するコンピュータシステムまたは他の電子デバイスを備える。コンピュータシステムは、また、上記プロセッサに連結された記憶デバイスを有する。上記記憶デバイスは第1の命令を格納し、この第1の命令は、本明細書で実質的に開示された複数の命令のうちのいずれであってもよく、また、第2の命令セットからの命令である。上記記憶デバイスは、また、上記第1の命令を、第1の命令セットにおける1または複数の命令へと変換するための複数の命令を格納する。第1の命令セットにおける1または複数の命令は、プロセッサによって実行されると、当該プロセッサに、宛先に結果を格納させるように動作可能である。この結果は、第1の命令のために本明細書で実質的に開示された複数の結果のうちのいずれを有してもよい。