【文献】
RUBY B. LEE, A. MURAT FISKIRAN,PLX : An Instruction Set Architecture and Testbed for Multimedia Information Processing,Journal of VLSI Signal Processing Systems for Signal, Image and Video Technology,Kluwer Academic Publishers(Springer Science+Busine,2005年 5月,Vol:40, Issue:1,Pages:85-108
(58)【調査した分野】(Int.Cl.,DB名)
前記結果の前記最下位側半分は、前記第1オペランドの最下位側半分における最下位側半分のデータ要素のみを前記第2オペランドの最下位側半分における対応する最下位側半分のデータ要素でインターリーブした各データ要素を含み、
前記結果の前記最下位側半分は、少なくとも4つのデータ要素を含む、
請求項1に記載のプロセッサ。
前記結果の前記最下位側半分は、前記第1オペランドの最下位側半分における最上位側半分のデータ要素のみを前記第2オペランドの最下位側半分における対応する最上位側半分のデータ要素でインターリーブした各データ要素を含み、
前記結果の前記最下位側半分は、少なくとも4つのデータ要素を含む、
請求項3に記載のプロセッサ。
ビット[15:0]にデータ要素X0、ビット[31:16]にデータ要素X1、ビット[47:32]にデータ要素X2、ビット[63:48]にデータ要素X3、ビット[207:192]にデータ要素X12、ビット[223:208]にデータ要素X13、ビット[239:224]にデータ要素X14、およびビット[255:240]にデータ要素X15を有する第1ソースオペランドと、ビット[15:0]にデータ要素Y0、ビット[31:16]にデータ要素Y1、ビット[47:32]にデータ要素Y2、ビット[63:48]にデータ要素Y3、ビット[207:192]にデータ要素Y12、ビット[223:208]にデータ要素Y13、ビット[239:224]にデータ要素Y14、およびビット[255:240]にデータ要素Y15を有する第2ソースオペランドとを示す命令をデコードするデコーダと、
前記命令を実行して、ビット[15:0]にデータ要素X0、ビット[31:16]にデータ要素Y0、ビット[47:32]にデータ要素X1、ビット[63:48]にデータ要素Y1、ビット[79:64]にデータ要素X2、ビット[95:80]にデータ要素Y2、ビット[111:96]にデータ要素X3、ビット[127:112]にデータ要素Y3、ビット[143:128]にデータ要素X12、ビット[159:144]にデータ要素Y12、ビット[175:160]にデータ要素X13、ビット[191:176]にデータ要素Y13、ビット[207:192]にデータ要素X14、ビット[223:208]にデータ要素Y14、ビット[239:224]にデータ要素X15、およびビット[255:240]にデータ要素Y15を有する結果を格納する実行ユニットと、
を備えるプロセッサ。
ビット[79:64]にデータ要素X4、ビット[95:80]にデータ要素X5、ビット[111:96]にデータ要素X6、ビット[127:112]にデータ要素X7、ビット[143:128]にデータ要素X8、ビット[159:144]にデータ要素X9、ビット[175:160]にデータ要素X10、およびビット[191:176]にデータ要素X11を有する第1ソースオペランドと、ビット[79:64]にデータ要素Y4、ビット[95:80]にデータ要素Y5、ビット[111:96]にデータ要素Y6、ビット[127:112]にデータ要素Y7、ビット[143:128]にデータ要素Y8、ビット[159:144]にデータ要素Y9、ビット[175:160]にデータ要素Y10、およびビット[191:176]にデータ要素Y11を有する第2ソースオペランドとを示す命令をデコードするデコーダと、
前記命令を実行して、ビット[15:0]にデータ要素X4、ビット[31:16]にデータ要素Y4、ビット[47:32]にデータ要素X5、ビット[63:48]にデータ要素Y5、ビット[79:64]にデータ要素X6、ビット[95:80]にデータ要素Y6、ビット[111:96]にデータ要素X7、ビット[127:112]にデータ要素Y7、ビット[143:128]にデータ要素X8、ビット[159:144]にデータ要素Y8、ビット[175:160]にデータ要素X9、ビット[191:176]にデータ要素Y9、ビット[207:192]にデータ要素X10、ビット[223:208]にデータ要素Y10、ビット[239:224]にデータ要素X11、およびビット[255:240]にデータ要素Y11を有する結果を格納する実行ユニットと、
を備えるプロセッサ。
ビット0から31にデータ要素X0、ビット32から63にデータ要素X1、ビット64から95にデータ要素X2、ビット96から127にデータ要素X3、ビット128から159にデータ要素X4、ビット160から191にデータ要素X5、ビット192から223にデータ要素X6、およびビット224から255にデータ要素X7を有する第1ソースオペランドと、ビット0から31にデータ要素Y0、ビット32から63にデータ要素Y1、ビット64から95にデータ要素Y2、ビット96から127にデータ要素Y3、ビット128から159にデータ要素Y4、ビット160から191にデータ要素Y5、ビット192から223にデータ要素Y6、およびビット224から255にデータ要素Y7を有する第2ソースオペランドとを示す命令をデコードするデコーダと、
前記命令を実行して、宛先の記憶位置における、ビット0から31にデータ要素X0、ビット32から63にデータ要素Y0、ビット64から95にデータ要素X1、ビット96から127にデータ要素Y1、ビット128から159にデータ要素X6、ビット160から191にデータ要素Y6、ビット192から223にデータ要素X7、およびビット224から255にデータ要素Y7を有する結果を格納する実行ユニットと、
を備えるプロセッサ。
ビット0から31にデータ要素X0、ビット32から63にデータ要素X1、ビット64から95にデータ要素X2、ビット96から127にデータ要素X3、ビット128から159にデータ要素X4、ビット160から191にデータ要素X5、ビット192から223にデータ要素X6、およびビット224から255にデータ要素X7を有する第1ソースオペランドと、ビット0から31にデータ要素Y0、ビット32から63にデータ要素Y1、ビット64から95にデータ要素Y2、ビット96から127にデータ要素Y3、ビット128から159にデータ要素Y4、ビット160から191にデータ要素Y5、ビット192から223にデータ要素Y6、およびビット224から255にデータ要素Y7を有する第2ソースオペランドとを示す命令をデコードするデコーダと、
前記命令を実行して、宛先の記憶位置における、ビット0から31にデータ要素X2、ビット32から63にデータ要素Y2、ビット64から95にデータ要素X3、ビット96から127にデータ要素Y3、ビット128から159にデータ要素X4、ビット160から191にデータ要素Y4、ビット192から223にデータ要素X5、およびビット224から255にデータ要素Y5を有する結果を格納する実行ユニットと、
を備えるプロセッサ。
【発明を実施するための形態】
【0008】
以下の記載では、プロセッサの種類、データの種類、データの形式、レジスタの種類、レジスタの配置、システム構成等の数多くの詳細事項が記載される。しかしながら、本発明の実施形態は、これらの詳細事項がなくとも実施可能であることは明らかである。また、周知の回路、構造及び技術は、明細書の理解を曖昧にしない目的から、詳細に示していない。
【0009】
図1は、プロセッサ100の一実施形態を示した図である。プロセッサは、本明細書に記載されるようなクロスレーンアンパック命令102を実行する機能を有する又は実行可能である。
【0010】
プロセッサは、命令を実行可能な様々な種類のプロセッサであってもよい。例えば、プロセッサは、米国、カリフォルニアのサンタクララに本社を置くインテルコーポレーションから入手可能な、PENTIUM(登録商標)4、PENTIUM(登録商標)Dual−Core、Core.2 Duo and Quad、Xeon(登録商標)、Itanium(登録商標)、XScale(登録商標)又はStrongARM(登録商標)プロセッサのような、汎用プロセッサであってもよい。また、プロセッサは、他社製のものであってもよい。プロセッサは、reduced instruction set computing(縮小命令セットコンピューティング:RISC)プロセッサ、complex instruction set computing(複雑命令セットコンピューティング:CISC)プロセッサ、very long instruction word(超長命令語:VLIW)プロセッサ、又は、ハイブリッド又は代替プロセッサの類であってもよい。別のオプションとして、プロセッサは、例えば、ネットワークプロセッサ又は通信プロセッサ、コプロセッサ、組み込みプロセッサ、圧縮エンジン、グラフィックスプロセッサ等の特殊用途プロセッサであってもよい。プロセッサは、1以上のチップに実装されてもよい。
【0011】
使用時には、プロセッサは、クロスレーンアンパック命令102を受信することができる。アンパック命令は、以下に記載するように、プロセッサにアンパックオペレーションを実行させることができる制御信号を表していてもよい。アンパック命令は、例えば、ソフトウェアシーケンス又はアルゴリズムによって提供されてもよい。
【0012】
図示されるプロセッサの実施形態は、命令デコーダ104を含む。デコーダは、クロスレーンアンパック命令を受信してもよい。デコーダは、アンパック命令をデコードし、出力として、1以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令、又は、元のアンパック命令からデコードされる信号又は元のアンパック命令を反映する信号、又は、元のアンパック命令から導出される信号を、生成してもよい。デコーダは、様々に異なるメカニズムを使用して実装されてもよい。好適なメカニズムの例としては、これに限定するわけではないが、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ(PLA)、マイクロコード・ランダムアクセスメモリ(ROM)等が含まれる。
【0013】
一例では、デコーダは、命令トランスレータ、命令エミュレータ、又は、その他の命令変換器と置き換えられてもよい。命令変換器は、ソース命令セットからの命令を、目的の命令セットへと変換する。例えば、命令変換器は、本明細書に記載するように、アンパック命令を、翻訳、変形、エミュレートする又はその他の変換を行うことにより、実行ユニットによって処理される1以上の別の命令へと変換する。命令変換器は、ソフトウェア、ハードウェア、ファームウェア又はこれらの組み合わせに実装されてもよい。命令変換器は、プロセッサ上にあってもよいし、プロセッサの外に存在してもよく、又は、プロセッサの一部であってもよいし、プロセッサの一部でなくてもよい。したがって、デコーダは、プロセッサに必須の構成要素ではない。
【0014】
プロセッサは、少なくとも1つの実行ユニット106を含む。実行ユニットは、デコーダ、命令トランスレータ又は上記したようなその他の命令変換器と結合される又は通信可能とされる。実行ユニットは、アンパック命令を実行可能な回路又はアンパック命令を実行する実行ロジックを含む。例えば、実行ユニットは、1以上のマイクロオペレーション、マイクロ命令又はその他の命令を実行してもよく、若しくは、元のアンパック命令からデコード、変換、エミュレート又は反映、又は、導出される制御信号を実行してもよい。1以上の実施形態において、実行ユニットは、機械命令又はミクロオペレーション又はこれら機械命令から導出される命令を処理する専用ロジックを有してもよい。すなわち、実行ユニットは、クロスレーンアンパック命令に応答して、又は、命令の結果として、オペレーションを実行してもよい。1以上の実施形態では、実行ユニット及び/又はプロセッサは、例えば、PENTIUM(登録商標)4、PENTIUM(登録商標)Dual‐Core、Core(登録商標)2 Duo and Quad、Xeon(登録商標)、Itanium(登録商標)、XScale(登録商標)又はStrongARM(登録商標)マイクロプロセッサで使用されているインテルアーキテクチャ命令の大部分又は全てに応答して又はその結果として、オペレーションを実行してもよい。
【0015】
ある実施形態では、実行ユニットが1つだけ設けられてもよく、又は、特定のオペレーションを実行できる実行ユニットが1つだけ設けられてもよい。その他の実施形態では、特定の機能又は機能のセットに専用の複数の実行ユニットを含んでもよい。加えて、プロセッサの1以上実施形態は、複数のコアを有してもよく、各コアは、少なくとも1つの実行ユニットを有してもよい。
【0016】
プロセッサは、デコーダ及び実行ユニットと結合されたレジスタファイル108を含む。本明細書で使用される"レジスタ"という言葉は、オペランドを特定するべくマクロ命令によって通常使用されるオンボードのプロセッサ格納ロケーションを指す。一般的に、レジスタは、プロセッサの外側から、又は、プログラマの視点から、可視状態となっている。レジスタは、特定の種類の周知の回路に限定されない。以下に説明するようにデータを格納及び供給可能である限り、あらゆる種類のレジスタを好適に使用することができる。好適なレジスタの例としては、これに限定されないが、専用物理レジスタ、レジスタリネームを使用して動的に割り当てられる物理レジスタ、専用物理レジスタと動的に割り当てられる物理レジスタとの組み合わせが含まれる。
【0017】
レジスタファイルは、様々な種類のレジスタを有してもよい。好適な種類のレジスタの例には、これに限定されないが、整数レジスタ、浮動小数点レジスタ、ベクトルレジスタ、ステータスレジスタ、命令ポインタレジスタ等が含まれる。単純化のため、1つのレジスタセット109が図示されている。レジスタセットは、複数のレジスタ又はレジスタのグループを含む。例えば、レジスタセットは、レジスタR0からレジスタRNを含み、ここで、Nは整数である。一実施形態では、Nは15である。レジスタは、リネームされてもよいし、されなくてもよい。
【0018】
レジスタセットは、パックされたデータ(パックドデータ)を格納するよう構成されてもよい。パックドデータは、共にパックされた複数のデータ要素を含む。データ要素とは、レジスタ又はその他の格納ロケーションに、多くの場合、同じビット長を有する他のデータ要素と共に格納されるデータの個々のピースを意味する。レジスタセットは、個別のパックドデータ要素の1つ又は様々なデータ要素へのアクセスを許可してもよい。別の時には、レジスタセットにおける特定のレジスタが、異なるサイズの複数のパックドデータ要素を保持してもよく、それぞれ異なるサイズの複数のパックドデータ要素の全てが、個別にアクセス可能であってもよいし、アクセス可能でなくてもよい。
【0019】
レジスタセットは、複数のレーン(lane)を有する。図示の実施形態では、レジスタをそれぞれ含むレジスタセットは、第1下位レーン110及び第2上位レーン111を有する。下側レーンは、下位ビットを有し、上位レーンは上位ビットを有する。レーンはそれぞれ、複数のビットを有する。例えば、レジスタはそれぞれ、256ビットを有してもよく、レーンがそれぞれ、128ビットを有してもよい。別の実施形態では、プロセッサ及び/又はレジスタは、3つ又は4つ以上のレーンを有してもよく、レジスタ及びレーンは、異なるサイズを有してもよい。
【0020】
図示されたプロセッサの実施形態はまた、デコーダと結合されたキャッシュ112を含む。アーキテクチャに応じて、プロセッサは、例えば、レベル1(L1)内部キャッシュ又は複数レベルの内部キャッシュのような、1つの内部キャッシュを有してもよい。ある実施形態では、システムは、内部キャッシュ及びプロセッサ外部の外部キャッシュとの組み合わせを含んでもよい。これに替えて、キャッシュの全てが、プロセッサの外部に設けられてもよい。
【0021】
説明を曖昧にするのを防ぐために、単純化された形式でプロセッサが図示されている。当業者であれば、プロセッサは、従来の構成要素、回路又はロジックを含んでもよいことは理解できる。例えば、プロセッサは、フロントエンドロジック、レジスタリネームロジック、スケジューリングロジック、バックエンドロジック、リタイアメントロジック、リオーダバッファ等を含んでもよい。また、これは、プロセッサの実施形態の単なる一例に過ぎない。その他の汎用プロセッサ、特殊目的プロセッサ、ネットワーク又は通信プロセッサ、コプロセッサ、組み込みプロセッサ、圧縮エンジン、グラフィックするプロセッサ等も、アンパック命令及び以下に説明するオペレーションの恩恵を受けることができる。
【0022】
図2は、命令を受信し、命令によって規定された結果を格納する方法214の一実施形態を示したブロックフローチャートである。1以上の実施形態において、方法は、本明細書に説明されるアンパック命令の結果として、プロセッサによって方法が実行される。
【0023】
命令は、ブロック215において受信されてもよい。命令は、プロセッサの命令セットにおける機械命令を表していてもよい。一例として、プロセッサ、デコーダ又はプロセッサのその他の部分において、命令が受信されてもよい。典型的には、命令は、例えば、キャッシュ112又はバス又はその他の相互接続から受信されてもよい。
【0024】
ブロック216において、命令がデコードされてもよい。命令は、1以上のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、その他の命令、若しくは、元のアンパック命令からデコード、反映又は導出される制御信号にデコードされてもよい。これに替えて、命令は、上記したように、翻訳、エミュレート又は変換されてもよい。
【0025】
ブロック217において、デコーダ又はプロセッサの別の部分は、命令によって示される1以上のオペランドにアクセスしてもよい及び/又はオペランドを受信してもよい。オペランドは、レジスタ(例えば、レジスタセット109)、メモリロケーション、又は、これらの組み合わせから、アクセス及び/又は受信されてもよい。命令は、レジスタのアドレス、又は、オペランドのメモリロケーションを特定してもよい。例えば、命令は、第1ソースオペランド(SRC1)のアドレス及び第2ソースオペランド(SRC2)のアドレスを特定してもよい。
【0026】
ブロック218において、実行ユニットは、命令によって規定されたオペレーションでイネーブルされる。実行ユニットは、オペランドのデータに対して特定のオペレーションを実行して、結果オペランドを生成してもよい。
【0027】
ブロック219において、結果オペランドが、命令によって規定されるレジスタ又はメモリロケーションの宛先アドレスに格納されてもよい。1以上の実施形態において、SRC1及びSRC2に加えて、命令は、結果オペランドに対するアドレス(DEST)を規定してもよい。これに替えて、1以上の実施形態において、SRC1又はSRC2の何れかが、DESTとして使用されてもよい。例えば、SRC1又はSRC2におけるデータが、結果オペランドで書き換えられてもよい。この場合、命令は、SRC1及びSRC2のうちの一方として、結果オペランドの宛先を特定するものと解釈され、命令は、明示的に別のDESTを規定しなくてもよい。
【0028】
インテルコーポレーションは、最近、インテル(登録商標)アドバンスト・ベクトル・拡張(Intel AVX)命令を導入した。Intel AVXは、インテルアーキテクチャに対して新たな256ビットのSIMD浮動小数点ベクトル拡張を提供する。これにより、Intel(登録商標)SSE4における128ビットXMMレジスタの最大SIMDベクトル長を、256ビットにまで広げる又は倍増させることができる。Intel AVXは、アセンブリにおいて、YMM0−YMM15と称される256ビットのレジスタを導入し、Intel AVX命令の多くは、このレジスタ上で動作する。必要であれば、Intel AVXの詳細については、本願の出願時にはインテルコーポレーションのウェブサイトhttp://software.intel.comlen-us/avxl.において入手可能となる、2009年1月発行のインテル(登録商標)Advanced Vector Extensions Programming Reference(参照番号#319433‐005)を参照されたい。
【0029】
図3は、Intel AVX命令の多くによって利用されるYMMレジスタ320の一実施形態を示した図である。YMMレジスタは、レジスタYMM0からレジスタYMM15を含む。YMMレジスタはそれぞれ、256ビットを有する。図示するように、1以上の実施形態において、YMMレジスタの下位128ビットは、必ずしも必須ではないが、対応する128ビットXMMレジスタにエイリアスされる。レジスタYMM0−YMM15は、2つの128ビットレーンから構築される。下位128ビットレーン310(ビット0〜127)は、XMMレジスタに対応する。上位128ビットレーン311(ビット128〜255)は、YMMレジスタに対応する。
【0030】
図4は、本発明の1以上の実施形態に適したパックドデータのフォーマットの代表例が示されている。パックドワード430及びパックドダブルワード432の、2つのパックドデータフォーマットの例が示されている。特定の概念を良好に例示するべく、これらのパックドデータフォーマットは、例えば、YMMレジスタのような256ビットの格納ロケーションについて示されているが、本発明の実施形態の範囲はこれに限定されない。
【0031】
パックドワードフォーマット430は、256ビット長であり、16個のデータ要素を含む。各データ要素は、16ビット長又は1ワード長である。このような16ビットデータ要素は、"ワード"と称される。図示の例では、データ要素は、低位から高位へと、"ワード0"から"ワード15"と名づけられている。ワード0からワード7は、下位レーン(右側のビット0から127)に対応している。ワード8からワード15は、上位レーン(左側のビット128から255)に対応している。
【0032】
パックドダブルワード(dワード)フォーマット432は、256ビット長を有し、8つのデータ要素を含む。各データ要素は、32ビット長又は1ダブルワード(dワード)長である。このような32ビットデータ要素は、"dワード"と称される。32ビットデータ要素は、一般的に、単精度浮動小数点計算に使用される。図示の例では、データ要素は、低位から高位へと、"dワード0"から"dワード15"と名づけられている。dワード0からワード3は、下位レーンに対応している。ワード4からワード7は、上位レーンに対応している。
【0033】
これらは、単なる一例に過ぎない。その他のパックドデータフォーマットを好適に使用してもよい。例えば、各データ要素が8ビットであるパックド・バイト・フォーマット、各データ要素が64ビットであるパックド・クワッドワード・フォーマットも好適である。64ビットデータ要素は、一般的に、倍精度浮動小数点計算に使用される。64ビットを超えるサイズのデータ要素を使用してもよい。また、256ビットを超える大きさ又は256ビットよりも小さいレジスタを使用してもよい。一般的に、パックドデータフォーマットは、複数のデータ要素を含む。多くの場合、データ要素は、同じサイズである。この場合、データ要素のサイズで分割されるレジスタのサイズは、データ要素の数と等しくなる。
【0034】
インテルAVXでは、複数のマルチビットレーンを有するレジスタを利用している。また、特定のインテルAVX命令は、"インレーン(in−lane)"命令として知られている。"インレーン"命令は、上位及び下位の128ビットの両方、又は、1以上のYMMレジスタの複数レーンにおいて、同じオペレーションの実行を引き起こす。例えば、インテルAVXのUNPCKLPS(VEX.256エンコードバージョン)命令は、上位及び下位の128ビットの両方、又は、YMMレジスタの複数レーンに対して、同じアンパック下位オペレーションを実行させる。現在のところ、異なるアンパックオペレーションが異なる複数のレーンで実行される(例えば、下位アンパック及び上位アンパックを行う)"クロスレーン"アンパック命令は存在していない。したがって、アプリケーションによっては又はある条件下では、抽出、型変換(cast)等の追加的なオペレーションが必要となり、"インレーン"アンパック命令の結果を並び替える必要が生じる場合があり、更なる計算及び/又は複雑なプログラミングを要している。これに替えて、以前のSSEアンパック命令を使用すると、新しい256ビットYMMレジスタを最大限活用することができない。したがって、ある条件又はアプリケーションでは、追加的なアンパック命令及びオペレーションが、有用な場合もある。例えば、アンパック命令は、Structure of Arrays(SoA)対Array of Structures(AoS)アルゴリズムに対しては、有益である。
【0035】
本発明の実施形態は、少なくとも1つのレーンで実行されるアンパックオペレーションとは異なる種類のアンパックオペレーションが少なくとも1つのその他のレーンで実行される複数のレーンにおけるパックドデータをアンパックするプロセッサによって実行又は処理される命令、又は、プロセッサ、プロセッサによって実行される方法、プロセッサを組み込むシステムに関する。本発明の実施形態は、少なくとも1つのレーンに対するアンパック下位オペレーション及び少なくとも1つのその他のレーンに対するアンパック上位オペレーションを規定する"クロスレーン"アンパック命令に関する、又は、"クロスレーン"アンパック命令を処理するプロセッサ、クロスレーンアンパック命令を処理する結果としてプロセッサによって実行される方法、又は、このようなプロセッサを組み込むコンピュータシステム又はその他のシステムに関する。
【0036】
図5は、クロスレーンアンパック方法534の一実施形態を示すフローチャートである。
【0037】
ブロック535において、クロスレーンアンパック命令が受信されてもよい。クロスレーンアンパック命令は、少なくとも1つのレーンに対するアンパック下位オペレーション及び少なくとも1つのその他のレーンに対するアンパック上位オペレーションを規定してもよい。
【0038】
ブロック536において、クロスレーンアンパック命令がデコードされてもよい。これに替えて、命令は、翻訳、エミュレート又はその他の変換が行われてもよい。
【0039】
ブロック537において、クロスレーンアンパック命令によって示される又は規定される第1及び第2ソースオペランドが、アクセスされてもよい。オペランドは、レジスタ又はメモリロケーションからアクセスされてもよい。クロスレーンアンパック命令は、オペランドを示す第1及び第2フィールドを有してもよい。
【0040】
ブロック538において、実行ユニットは、少なくとも1つのレーンに対するアンパック下位オペレーション及び少なくとも1つのその他のレーンに対するアンパック上位オペレーションでイネーブルされてもよい。
【0041】
ブロック539において、クロスレーンアンパック命令によって規定される結果が、レジスタ又はメモリロケーションに格納されてもよい。結果は、少なくとも1つのレーンに対して実行されるアンパック下位オペレーション及び少なくとも1つのその他のレーンに対して実行されるアンパック上位オペレーションを表していていもよい。
【0042】
図6から
図9には、少なくとも1つのレーンに対して実行されるアンパック下位オペレーション及び少なくとも1つのその他のレーンに対して実行されるアンパック上位オペレーションを規定する1つのクロスレーンアンパック命令に従って、複数のレーンを有する第1及び第2オペランドからのパックドデータをアンパッキングする様々な実施形態例が示されている。
【0043】
図6には、下位レーン(ビット0から127)に対するアンパック下位オペレーション及び上位レーン(ビット128から255)に対するアンパック上位オペレーションを規定する1つの第1クロスレーンアンパック命令に従った、2つのレーンを有する256ビットオペランドにおける32ビットダブルワード(dワード)パックドデータ要素のアンパッキングが示されている。
【0044】
第1ソースオペランド650は、256ビットを有し、8つのパックド32ビット又はダブルワードデータ要素を格納する。第1ソースオペランドは、レジスタ(例えば、YMMレジスタ)、メモリ又は別の格納ロケーションに格納されてもよい。これらデータ要素には、下位から上位へと順番に、X0からX7と名前がつけられている。より詳細には、第1ソースオペランドは、ビット0から31で表される第1データ要素(X0)、ビット32から63で表される第2データ要素(X1)、ビット64から95で表される第3データ要素(X2)、ビット96から127で表される第4データ要素(X3)、ビット128から159で表される第5データ要素(X4)、ビット160から191で表される第6データ要素(X5)、ビット192から223で表される第7データ要素(X6)、及び、ビット224から255で表される第8データ要素(X7)を含む。データ要素X0からX3は、下位レーンに対応するデータ要素の下位レーンサブセットを表す。データ要素X4からX7は、上位レーンに対応するデータ要素の上位レーンサブセットを表す。
【0045】
同様に、第2ソースオペランド652は、256ビットを有し、8つのパックド32ビット又はダブルワードデータ要素を格納する。第1ソースオペランドは、レジスタ(例えば、YMMレジスタ)、メモリ又は別の格納ロケーションに格納されてもよい。これらデータ要素には、下位から上位へと順番に、Y0からY7と名前がつけられている。より詳細には、第2ソースオペランドは、ビット0から31で表される第9データ要素(Y0)、ビット32から63で表される第10データ要素(Y1)、ビット64から95で表される第11データ要素(Y2)、ビット96から127で表される第12データ要素(Y3)、ビット128から159で表される第13データ要素(Y4)、ビット160から191で表される第14データ要素(Y5)、ビット192から223で表される第15データ要素(Y6)、及び、ビット224から255で表される第16データ要素(Y7)を含む。データ要素Y0からY3は、下位レーンに対応するデータ要素の下位レーンサブセットを表す。データ要素Y4からY7は、上位レーンに対応するデータ要素の上位レーンサブセットを表す。
【0046】
結果オペランド654は、結果を格納する。結果は、第1クロスレーンアンパック命令によって規定されるアンパックオペレーションの実行に基づいて生成される。結果は、実行ユニット、機能ユニット又はプロセッサのその他の部分によって、クロスレーンアンパック命令の結果として(実行ユニットが、1以上のマイクロ命令又は命令からデコード、翻訳又は導出されたその他の命令を実行する結果として)、格納されてもよい。
【0047】
結果オペランドは、256ビットを有し、8つのパックド32ビット又はダブルワードデータ要素を格納する。結果オペランドにおける8つのデータ要素は、第2クロスレーンアンパック命令によって規定されるアンパックオペレーションに従って、第1及び第2ソースオペランドから選択されるアンパックされインターリーブされる(交互に配置される)データ要素の半分又は全部より少ない数のデータ要素、すなわちサブセットを表す。この特定の第1クロスレーンアンパック命令は、下位レーン(ビット0から127)に対するアンパック下位オペレーション、及び、上位レーン(ビット128から255)に対するアンパック上位オペレーションを規定する。下位レーンに対するアンパック下位オペレーションは、第1及び第2ソースオペランドの下位レーンにおける、下位32ビットのみ又は下位クワッドワード(64ビット)からのダブルワードデータ要素のみのインターリーブされた(交互に配置された)アンパックを含んでもよい。上位レーンに対するアンパック上位オペレーションは、第1及び第2ソースオペランドの上位レーンにおける、上位32ビットのみ又は上位クワッドワード(64ビット)からのダブルワードデータ要素のインターリーブされたアンパックを含んでもよい。
【0048】
図に示すように、格納される結果は、(1)第2オペランドの下位レーンサブセットからの対応する最下位データ要素でインターリーブされた、第1オペランドの下位レーンサブセットからの最下位データ要素のみを下位レーンに含み、(2)第2オペランドの上位レーンサブセットからの対応する最上位データ要素でインターリーブされた、第1オペランドの上位レーンサブセットからの最上位データ要素のみを上位レーンに含んでもよい。
【0049】
より詳細には、結果オペランドは、宛先レジスタのビット0から31に格納された第1データ要素(X0)、宛先レジスタのビット32から63に格納された第9データ要素(Y0)、宛先レジスタのビット64から95に格納された第2データ要素(X1)、宛先レジスタのビット96から127に格納された第10データ要素(Y1)、宛先レジスタのビット128から159に格納された第7データ要素(X6)、宛先レジスタのビット160から191に格納された第15データ要素(Y6)、宛先レジスタのビット192から223に格納された第8データ要素(X7)、及び、宛先レジスタのビット224から255に格納された第16データ要素(Y7)を含んでもよい。
【0050】
結果オペランドは、第1及び第2オペランドからのデータ要素のサブセット(特に、半分)のみを有する。結果オペランドの下位レーンは、第1及び第2オペランドの下位レーンからのデータ要素のサブセット(特に、半分)のみを有する。同様に、結果オペランドの上位レーンは、第1及び第2オペランドの上位レーンからのデータ要素のサブセット(特に、半分)のみを有する。
【0051】
また、下位データ要素X0及びX1並びに下位データ要素Y0及びY1は、同じ相対的な順番に(すなわち、X0は、X1よりも下位のビット順番で、Y0は、Y1よりも下位のビット順番で)、結果オペランドの下位レーンに格納され、これらのデータ要素は、第1及び第2オペランドの下位レーンにそれぞれ現れる。同様に、上位データ要素X6及びX7並びに上位データ要素Y6及びY7は、同じ相対的な順番で、結果オペランドの上位レーンに格納され、これらのデータ要素は、第1及び第2オペランドの上位レーンにそれぞれ現れる。
【0052】
図7には、下位レーン(ビット0から127)に対するアンパック上位オペレーション及び上位レーン(ビット128から255)に対するアンパック下位オペレーションを規定する1つの第2クロスレーンアンパック命令に従って、2つのレーンを有する256ビットオペランドにおける32ビットダブルワード(dワード)パックドデータ要素のアンパッキングが示されている。
【0053】
第1ソースオペランド750は、256ビットを有し、8つのパックド32ビット又はダブルワードデータ要素を格納する。第1ソースオペランドは、レジスタ(例えば、YMMレジスタ)、メモリ又は別の格納ロケーションに格納されてもよい。これらデータ要素には、下位から上位へと順番に、X0からX7と名前がつけられている。より詳細には、第1ソースオペランドは、ビット0から31で表される第1データ要素(X0)、ビット32から63で表される第2データ要素(X1)、ビット64から95で表される第3データ要素(X2)、ビット96から127で表される第4データ要素(X3)、ビット128から159で表される第5データ要素(X4)、ビット160から191で表される第6データ要素(X5)、ビット192から223で表される第7データ要素(X6)、及び、ビット224から255で表される第8データ要素(X7)を含む。データ要素X0からX3は、下位レーンに対応する。データ要素X4からX7は、上位レーンに対応する。
【0054】
同様に、第2ソースオペランド752は、256ビットを有し、8つのパックド32ビット又はダブルワードデータ要素を格納する。第1ソースオペランドは、レジスタ(例えば、YMMレジスタ)、メモリ又は別の格納ロケーションに格納されてもよい。これらデータ要素には、下位から上位へと順番に、Y0からY7と名前がつけられている。より詳細には、第2ソースオペランドは、ビット0から31で表される第9データ要素(Y0)、ビット32から63で表される第10データ要素(Y1)、ビット64から95で表される第11データ要素(Y2)、ビット96から127で表される第12データ要素(Y3)、ビット128から159で表される第13データ要素(Y4)、ビット160から191で表される第14データ要素(Y5)、ビット192から223で表される第15データ要素(Y6)、及び、ビット224から255で表される第16データ要素(Y7)を含む。データ要素Y0からY3は、下位レーンに対応する。データ要素Y4からY7は、上位レーンに対応する。
【0055】
結果オペランド754は、結果を格納する。結果は、第2クロスレーンアンパック命令によって規定されるアンパックオペレーションの実行に基づいて生成される。結果は、実行ユニット、機能ユニット又はプロセッサのその他の部分によって、クロスレーンアンパック命令の結果として(実行ユニットが、1以上のマイクロ命令又は命令からデコード、翻訳又は導出されたその他の命令を実行する結果として)、格納されてもよい。
【0056】
結果オペランドは、256ビットを有し、8つのパックド32ビット又はダブルワードデータ要素を格納する。結果オペランドにおける8つのデータ要素は、第2クロスレーンアンパック命令によって規定されるアンパックオペレーションに従って、第1及び第2ソースオペランドから選択されるアンパックされインターリーブされたデータ要素の半分又は全部より少ない数のデータ要素、すなわちサブセットを表す。
【0057】
この特定の第2クロスレーンアンパック命令は、下位レーン(ビット0から127)に対するアンパック上位オペレーション、及び、上位レーン(ビット128〜255)に対するアンパック下位オペレーションを規定する。下位レーンに対するアンパック上位オペレーションは、第1及び第2ソースオペランドの下位レーンにおける、上位32ビットのみ又は上位クワッドワード(64ビット)からのダブルワードデータ要素のインターリーブ(交互に配置される)アンパックを含んでもよい。上位レーンに対するアンパック上位オペレーションは、第1及び第2ソースオペランドの上位レーンにおける、上位32ビットのみ又は上位クワッドワード(64ビット)からのダブルワードデータ要素のインターリーブアンパックを含んでもよい。
【0058】
図に示すように、結果オペランドは、宛先レジスタのビット0から31に格納される第3データ要素(X2)、宛先レジスタのビット32から63に格納される第11データ要素(Y2)、宛先レジスタのビット64から95に格納される第4データ要素(X3)、宛先レジスタのビット96から127に格納される第12データ要素(Y3)、宛先レジスタのビット128から159に格納される第5データ要素(X4)、宛先レジスタのビット160から191に格納される第13データ要素(Y4)、宛先レジスタのビット192から223に格納される第6データ要素(X5)、及び、宛先レジスタのビット224から255に格納される第14データ要素(Y5)を含んでもよい。
【0059】
図8には、下位レーン(ビット0から127)に対するアンパック上位オペレーション及び上位レーン(ビット128から255)に対するアンパック下位オペレーションを規定する1つの第3クロスレーンアンパック命令に従って、2つのレーンを有する256ビットオペランドにおける16ビットワードパックドデータ要素のアンパッキングが示されている。
【0060】
第1ソースオペランド850は、256ビットを有し、16個のパックド16ビット又はワードデータ要素を格納する。第1ソースオペランドは、レジスタ(例えば、YMMレジスタ)、メモリ又は別の格納ロケーションに格納されてもよい。これらデータ要素には、下位から上位へと順番に、X0からX15と名前がつけられている。データX0からX7は、下位レーンに対応する。データX8からX15は、上位レーンに対応する。
【0061】
同様に、第2ソースオペランド852は、256ビットを有し、16個のパックド16ビット又はワードデータ要素を格納する。第1ソースオペランドは、レジスタ(例えば、YMMレジスタ)、メモリ又は別の格納ロケーションに格納されてもよい。これらデータ要素には、下位から上位へと順番に、Y0からY15と名前がつけられている。データY0からY7は、下位レーンに対応する。データY8からY15は、上位レーンに対応する。
【0062】
結果オペランド854は、結果を格納する。結果は、第3クロスレーンアンパック命令によって規定されるアンパックオペレーションの実行に基づいて生成される。結果は、実行ユニット、機能ユニット又はプロセッサのその他の部分によって、クロスレーンアンパック命令の結果として(実行ユニットが、1以上のマイクロ命令又は命令からデコード、翻訳又は導出されたその他の命令を実行する結果として)、格納されてもよい。
【0063】
結果オペランドは、256ビットを有し、16個のパックド16ビット又はワードデータ要素を格納する。結果オペランドにおける16個のデータ要素は、第2クロスレーンアンパック命令によって規定されるアンパックオペレーションに従って、第1及び第2ソースオペランドから選択されるアンパックされインターリーブされるデータ要素の半分又は全部より少ない数のデータ要素、すなわちサブセットを表す。
【0064】
この特定の第3クロスレーンアンパック命令は、下位レーン(ビット0から127)に対するアンパック下位オペレーション、及び、上位レーン(ビット128から255)に対するアンパック上位オペレーションを規定する。下位レーンに対するアンパック下位オペレーションは、第1及び第2ソースオペランドの下位レーンにおける、下位16ビット又は下位クワッドワード(64ビット)からのワードデータ要素のインターリーブされたアンパックを含んでもよい。上位レーンに対するアンパック上位オペレーションは、第1及び第2ソースオペランドの上位レーンにおける、上位16ビット又は上位クワッドワード(64ビット)からのワードデータ要素のインターリーブされたアンパックを含んでもよい。
【0065】
図示されるように、結果オペランドは、下位レーンに、下位から上位へと順番に並べられたデータ要素、X0、Y0、X1、Y1、X2、Y2、X3、Y3を含む。結果オペランドは、上位レーンに、下位から上位へと順番に並べられたデータ要素、X12、Y12、X13、Y13、X14、Y14、X15、Y15を含む。
【0066】
図9には、下位レーン(ビット0から127)に対するアンパック上位オペレーション及び上位レーン(ビット128から255)に対するアンパック下位オペレーションを規定する1つの第4クロスレーンアンパック命令に従って、2つのレーンを有する256ビットオペランドにおける16ビットワードパックドデータ要素のアンパッキングが示されている。
【0067】
第1ソースオペランド950は、256ビットを有し、16個のパックド16ビット又はワードデータ要素を格納する。第1ソースオペランドは、レジスタ(例えば、YMMレジスタ)、メモリ又は別の格納ロケーションに格納されてもよい。これらデータ要素には、下位から上位へと順番に、X0からX15と名前がつけられている。データX0からX7は、下位レーンに対応する。データX8からX15は、上位レーンに対応する。
【0068】
同様に、第2ソースオペランド952は、256ビットを有し、16個のパックド16ビット又はワードデータ要素を格納する。第1ソースオペランドは、レジスタ(例えば、YMMレジスタ)、メモリ又は別の格納ロケーションに格納されてもよい。これらデータ要素には、下位から上位へと順番に、Y0からY15と名前がつけられている。データY0からY7は、下位レーンに対応する。データY8からY15は、上位レーンに対応する。
【0069】
結果オペランド954は、結果を格納する。結果は、第4クロスレーンアンパック命令によって規定されるアンパックオペレーションの実行に基づいて生成される。結果は、実行ユニット、機能ユニット又はプロセッサのその他の部分によって、クロスレーンアンパック命令の結果として(実行ユニットが、1以上のマイクロ命令又は命令からデコード、翻訳又は導出されたその他の命令を実行する結果として)、格納されてもよい。
【0070】
結果オペランドは、256ビットを有し、16個のパックド16ビット又はワードデータ要素を格納する。結果オペランドにおける16個のデータ要素は、第4クロスレーンアンパック命令によって規定されるアンパックオペレーションに従って、第1及び第2ソースオペランドから選択されるアンパックされインターリーブされるデータ要素の半分又は全部より少ない数のデータ要素、すなわちサブセットを表す。
【0071】
この特定の第4クロスレーンアンパック命令は、下位レーン(ビット0から127)に対するアンパック上位オペレーション、及び、上位レーン(ビット128から255)に対するアンパック下位オペレーションを規定する。下位レーンに対するアンパック上位オペレーションは、第1及び第2ソースオペランドの下位レーンにおける、上位16ビット又は上位クワッドワード(64ビット)からのワードデータ要素の交互に配置された(インターリーブされた)アンパックを含んでもよい。上位レーンに対するアンパック下位オペレーションは、第1及び第2ソースオペランドの上位レーンにおける、下位16ビット又は下位クワッドワード(64ビット)からのワードデータ要素の交互に配置された(インターリーブされた)アンパックを含んでもよい。
【0072】
図示されるように、結果オペランドは、下位レーンに、下位から上位へと順番に並べられたデータ要素、X4、Y4、X5、Y5、X6、Y6、X7、Y7を含む。結果オペランドは、上位レーンに、下位から上位へと順番に並べられたデータ要素、X8、Y8、X9、Y9、X10、Y10、X11、Y11、を含む。
【0073】
図6から
図9のそれぞれに示すように、結果オペランドは、第1及び第2オペランドからのデータ要素のサブセット(特に、半分)のみを有する。結果オペランドの下位レーンは、第1及び第2オペランドの下位レーンからのデータ要素のサブセット(特に、半分)のみを有する。同様に、結果オペランドの上位レーンは、第1及び第2オペランドの上位レーンからのデータ要素のサブセット(特に、半分)のみを有する。
【0074】
第1及び第2オペランドの下位レーンにそれぞれ現れるように、第1及び第2オペランドからのデータ要素は、同じ順番で、結果オペランドの下位レーンに格納される。これは、結果オペランド全体についても同様であり、レーンそれぞれ内についても同様である。
【0075】
図6から
図9では、2つの128ビットレーンを有する256ビットオペランドが説明されたが、本発明の実施形態の範囲は、これに限定されない。オペランドは、これより少ないビット数であってもよいし、多いビット数であってもよい。同様に、レーンは、少ないビット数であってもよいし、多いビット数であってもよい。一例として、オペランドは、128ビットであって、レーンは、64ビットであってもよい。別の例としては、オペランドは、512ビットを有してもよいし、レーンは、64ビット又は128ビットを有してもよい。
【0076】
ある理念を更に例示するべく、クロスレーンアンパック命令の一例の使用例を考える。例えば、Structure of Arrays (SoA) to Array of Structures (AoS) アルゴリズムのような、特定のアルゴリズムにおいて、オペランドに現れるデータ要素と同じ順番を維持しつつ、2つのオペランドからのデータ要素をインターリーブ(交互配置)することが望ましい。以下に示すのは、下位レーン及び上位レーンに複製された4つのデータ要素(0,2,4,6)を有する第1ソースオペランドである。同様に、下位レーン及び上位レーンに複製された4つのデータ要素(1,3,5,7)を有する第2ソースオペランドが示されている。例として、これらのデータ要素は、インテルAVXブロードキャスト命令によって複製されてもよい。以下に示すように、下位レーンに対するアンパック下位オペレーション及び上位レーンに対するアンパック上位オペレーションを規定するクロスレーンアンパック命令は、第1及び第2オペランドからのデータ要素の全てがインターリーブされて、ソースオペランドに現れるこれらデータ要素と同じ順番に並べられている結果オペランドを達成し、その結果が連続的であってもよい。
第1ソースオペランド:6420|6420
第2ソースオペランド:7531|7531
結果オペランド:7654|3210
【0077】
これは、特定のクロスレーンアンパック命令の具体的な使用例を示した一例に過ぎない。クロスレーンアンパック命令のその他の使用及び利点が当業者には明らかであり、当業者は、本開示の恩恵を受ける。
【0078】
図10は、実行されるアンパックオペレーションの種類を規定する制御フィールド1060を有するクロスレーンアンパック命令1002の一実施形態を示した簡略化されたブロック図である。制御フィールドは、複数のビットを有する。図示された例では、第1ビット(bit
0)は、第1レーンに対応し、第2ビット(bit
1)は、第2レーンに対応し、第Nビット(bit
N)は、第Nレーンに対応し、ここでNは、多くの場合2〜5の範囲の整数である。1以上の実施形態において、各ビットは、対応するレーンに対するアンパックオペレーションの第1種類(例えば、アンパック下位オペレーション)を示す第1の所定値(例えば、0)、及び、対応するレーンに対するアンパックオペレーションの第2種類(例えば、アンパック上位オペレーション)を示す第2の所定値(例えば、1)を有してもよい。これに替えて、2又は3以上のビットを必要に応じて使用して、各レーンに対するアンパックオペレーションを規定してもよい。或いは、どのオペレーションが実行されるかを規定する制御フィールドを有する命令ではなく、命令が、アンパックオペレーションの1つの所定の組み合わせを実行してもよく、必要であれば、アンパックオペレーションの複数の異なる組み合わせを提供するべく、複数の命令が含まれてもよい。
【0079】
図11は、本発明の一以上の実施形態を実装するのに好適なコンピュータシステム1170の一実施例を示したブロック図である。コンピュータシステムは、PENTIUM(登録商標)4、PENTIUM(登録商標)Dual‐Core、Core(登録商標)2 Duo and Quad、Xeon(登録商標)、Itanium(登録商標)、XScale(登録商標)又はStrongARM(登録商標)マイクロプロセッサに基づく処理システムのような処理システムを表している。しかしながら、これは、好適なコンピュータシステムの特定の一例である。マルチプロセッサシステム、サーバ、及び、その他の設計又は構成要素を有するその他のコンピュータシステムも好適である。
【0080】
一実施形態において、コンピュータシステムは、米国ワシントン、レドモンドに本社を置くマイクロソフトコーポレーションから入手可能なWINDOWS(登録商標)オペレーティングシステムの一バージョンを実行してもよい。これに替えて、例えば、UNIX(登録商標)、リナックス(登録商標)又は組み込みシステムのようなその他のオペレーティングシステムを使用してもよい。本発明の実施形態は、ハードウェア回路及びソフトウェアの周知の特定の組み合わせに限定されない。
【0081】
コンピュータシステムは、プロセッサ1100を含む。プロセッサは、少なくとも1つの実行ユニット1106を含む。実行ユニット及び/又はプロセッサは、上記したような、少なくとも1つのクロスレーンアンパック命令1102を実行可能又は処理可能であってもよい。プロセッサは、レジスタファイル1108を含む。一以上の実施形態において、レジスタファイルは、複数のレーンを有するレジスタを含む。すなわち、プロセッサは、複数のレーンを有するSIMDアーキテクチャを提供してもよい。図示されているプロセッサは、説明を曖昧にしない目的から、単純化された形式で示されている。プロセッサは、例えば、キャッシュ、命令プリフェッチャ、命令デコーダ又はトランスレータ、トレースキャッシュ、マイクロコード(μコード)、リードオンリーメモリ(ROM)、アウトオブオーダーエンジン等の、その他の構成要素を含んでもよい。
【0082】
プロセッサは、プロセッサバス又はその他のインターコネクト1172と結合される。プロセッサバスは、プロセッサとシステム内のその他の構成要素との間のデータ信号を送信するのに使用されてもよい。
【0083】
また、コンピュータシステムは、メモリ1174を含む。メモリは、ダイナミック・ランダム・アクセス・メモリ(DRAM)、スタティック・ランダム・アクセス・メモリ(SRAM)、フラッシュメモリ、その他の周知の種類のメモリ、又は、これらの組み合わせを含んでもよい。DRAMは、システムで使用されるメモリの1種の例であるが、全てのコンピュータシステムにおいて使用されているわけではない。メモリは、1以上のクロスレーンアンパック命令を含むソフトウェアのような命令1173、及び、データ1174を格納するのに使用されてもよい。
【0084】
コンピュータシステムは、ハブ型アーキテクチャの一例である。ハブ型アーキテクチャは、メモリ制御ハブ(MCR)1176を含む。MCRは、システムロジックチップである。MCRは、プロセッサバス1172及びメモリ1174に結合される。プロセッサは、プロセッサバスを介してMCRと通信を行ってもよい。MCRは、プロセッサ、メモリ、及び、コンピュータシステムにおけるその他の構成要素との間の信号を指示してもよい。MCRは、プロセッサバス、メモリ、及び、ハブインターフェースバス又はその他のインターコネクトとの間の信号をブリッジしてもよい。MCRは、命令及びデータを格納及び読み出すのに使用されるメモリへの高バンド幅メモリパスを提供する。
【0085】
ある実施形態では、システムは、必要に応じて、グラフィックスデバイス(例えば、グラフィック/ビデオカード)1186を含んでもよい。MCRは、グラフィックスデバイスを接続するために、グラフィックスポート及びインターコネクト(例えば、アクセラレーテッド・グラフィックス・ポート(AGP)インターコネクト)を提供してもよい。
【0086】
システムはまた、I/Oコントローラハブ(ICR)1178を含む。ICRは、ハブインターフェースバス又は1以上のバスを含むその他のインターコネクト1177を介して、MCRと結合される。ICRは、ローカルI/Oバス又はその他のインターコネクトを介して、I/Oデバイスへの直接接続を提供してもよい。ローカルI/Oバス又はその他のインターコネクトは、周辺機器を、メモリ、チップセット及びプロセッサに接続する高速I/Oバス又はその他のインターコネクトを表していていてもよい。
【0087】
周辺機器の複数の代表例が示されており、オーディオコントローラ1179、フラッシュBIOS1180、無線送受信機1181、データストレージ1182(例えば、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD−ROMデバイス、フラッシュメモリデバイス等)、ユーザー入力インターフェース(例えば、キーボード)を提供するレガシーI/Oコントローラ1183、ユニバーサルシリアルバス(USB)のようなシリアル拡張ポート1184、及び、ネットワークコントローラ1185が含まれる。これらの具体的に示した周辺機器は、必要に応じて設けられ、必ずしも必須の構成ではない。
【0088】
また、図示した例は、好適なコンピュータシステムの一例に過ぎないことは明らかである。本発明の実施形態の範囲は、特定のコンピュータシステム設計に限定されない。その他のコンピュータシステムの様々な設計についても、好適である。その他の設計には、特に、ラップトップ、デスクトップ、エンジニアリングワークステーション及びサーバ、携帯PC、パーソナル・デジタル・アシスタンス等が含まれる。
【0089】
更に、実施形態は、1以上のプロセッサ又は実行ユニットを有するその他のデバイスにおいて適用されてもよい。例えば、本明細書に開示したクロスレーンアンパック命令のうちの1つを処理可能なプロセッサ及び/又は実行ユニットを含むその他のデバイスの例には、これに限定するわけではないが、携帯メディアプレーヤ、携帯電話、携帯機器、インターネットプロトコルデバイス、セットトップボックス、ネットワークデバイス、ネットワークハブ、広域ネットワーク(WAN)スイッチ、ビデオゲームデバイス、グラフィックスデバイス、デジタル信号プロセッサ(DSP)、マイクロコントローラ、組み込みプロセッサ及びその他のロジック回路が含まれる。SIMD又はパックドデータの恩恵を受ける又は利用するあらゆる電子デバイス又はシステムは、本明細書に記載されるクロスレーンアンパック命令を処理するロジックを含んでもよい。
【0090】
説明及び特許請求の範囲において、"結合(coupled)"及び"接続(connected)"という言葉、並びにこれらの派生語が使用されることがある。この2つの言葉は、同義語として使用されているのではない。特定の実施形態において、"接続"は、2つ以上の要素が物理的に又は電気的に直接互いに接触していることを指すのに使用されている。"結合"も、2つ以上の要素が、直接物理的に又は電気的に接触していることを指す。しかしながら、"結合"は同時に、2つ以上の要素が直接互いに接触していないが、互いに協動又は相互作用していることも意味する。
【0091】
上記の説明では、本発明の実施形態の完全な理解を提供するべく、多くの詳細事項が記載された。しかしながら、これら詳細事項がなくとも本発明を実施可能であることは、当業者にとって明らかである。記載された特定の実施形態は、本発明を限定するために提供されているのではなく、本発明の実施形態を例示するべく提供されている。本発明の範囲は、上記の具体的な例によって決定されるのではなく、添付の特許請求の範囲によってのみ規定される。また、本発明の説明の理解を不明瞭にしない目的から、周知の回路、構造、デバイス及びオペレーションについては、ブロック図の形式で示されており、詳細には示されていない。適切であると考えられる場合、対応する又は類似する要素を示すのに参照番号及び参照番号の末尾部分が図面間で繰り返し使用されている。
【0092】
様々なオペレーション及び方法が記載された。方法のうちの幾つかは、基本的な形式で記載されたが、オペレーションを、必要に応じて、方法に付加してもよいし、方法から省略してもよい。方法のオペレーションは、必要に応じて、異なる順番で実行されてもよい。多くの変形例及び適用が、これらの方法に対して考えられる。
【0093】
あるオペレーションは、ハードウェアコンポーネントによって実行されてもよいし、命令でプログラムされた回路又はハードウェアにオペレーションを実行させる又は少なくとも実行させる結果となる機械実行可能命令によって実現されてもよい。回路は、例として、汎用プロセッサ、特殊目的プロセッサ、又は、ロジック回路を含んでもよい。オペレーションは、必要に応じて、ハードウェア及びソフトウェアの組み合わせによって実行されてもよい。機械命令又は機械命令から導出された1以上の制御信号に応答して、プロセッサは、特定のロジックを含んでもよい。
【0094】
本発明の1以上の実施形態は、1以上の命令(例えば、アンパック命令)及び/又はデータを格納する有形機械アクセス可能及び/又は可読媒体を含むプログラム製品又はその他の製造物品として提供されてもよい。有形媒体は、1以上の材料を含んでもよい。媒体は、機械実行された場合に、機械に1以上の本明細書に開示されたオペレーション又は方法を実行させる及び/又は実行する結果となる命令を提供してもよい。好適な機械としては、これらに限定するわけではないが、例えば、コンピュータシステム、ネットワークデバイス、パーソナル・デジタル・アシスタンス(PDA)、モデム、携帯電話、その他の無線デバイス、及び、1以上のプロセッサを有する様々な電子デバイスが含まれる。
【0095】
媒体は、例えば、機械がアクセス可能な形式で情報を格納することを提供するメカニズムを含んでもよい。例えば、媒体は、必要に応じて、記録媒体を含んでもよく、例えば、フロッピー(登録商標)ディスケット、光記憶媒体、光ディスク、CD−ROM、磁気ディスク、磁気光学ディスク、リードオンリーメモリ(ROM)、プログラム可能ROM(PROM)、消去可能−プログラム可能リードオンリーメモリ(EPROM)、電気的消去可能−プログラム可能リードオンリーメモリ(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックランダムRAM(DRAM)、フラッシュメモリ、及びこれらの組み合わせが含まれる。
【0096】
また、"一実施形態"、"ある実施形態"、"1以上の実施形態"、等の言葉は、少なくとも本発明の実施形態が、特定の特徴を含むことを意味する。同様に、本明細書に記載された様々な特徴が、1つの実施形態、図面又はその説明に一緒に示されたが、これは、開示を縮小して記載し、様々な発明の側面の理解を助ける目的でこのように記載している。このような開示の方法により、本発明が、請求項にそれぞれ明示的に示されている特徴よりも多くの特徴を必要とすると解釈されるべきではない。添付の特許請求の範囲に反映されているように、発明の側面は、開示されている1つの実施形態の全特徴よりも少ない数の特徴に存在する場合がある。したがって、詳細な説明の後に記載される特許請求の範囲は、明示的に、詳細な説明に組み込まれ、各請求項は、本発明の個別の実施形態として、独立している。
本実施形態によれば、以下の各項目に記載の構成もまた開示される。
(項目1)
複数のパックドデータ要素をそれぞれ有する第1オペランド及び第2オペランドを示す命令を受信する段階と、
前記命令に応答して結果を格納する段階とを備え、
前記複数のパックドデータ要素の各々は、それぞれの位置に対応しており、
前記第1オペランドの前記複数のパックドデータ要素の第1サブセット及び前記第2オペランドの前記複数のパックドデータ要素の第1サブセットはそれぞれ、第1レーンに対応し、前記第1オペランドの前記複数のパックドデータ要素の第2サブセット及び前記第2オペランドの前記複数のパックドデータ要素の第2サブセットはそれぞれ、第2レーンに対応し、
前記結果は、
(1)前記第2オペランドの前記第1サブセットの対応する最下位データ要素でインターリーブされている前記第1オペランドの前記第1サブセットからの最下位データ要素のみを前記第1レーンに含み、及び、
(2)前記第2オペランドの前記第2サブセットの対応する最上位データ要素でインターリーブされている前記第1オペランドの前記第2サブセットからの最上位データ要素のみを前記第2レーンに含む方法。
(項目2)
前記第1レーンは、下位レーンを含み、前記第2レーンは、上位レーンを含む項目1に記載の方法。
(項目3)
前記第1レーンは、上位レーンを含み、前記第2レーンは、下位レーンを含む項目1に記載の方法。
(項目4)
前記命令は、制御フィールドを含み、
前記制御フィールドの1以上のビットは、前記第1レーンに対応し、前記第1レーンに対してアンパック下位オペレーションが実行されることを示し、
前記制御フィールドの1以上のビットは、前記第2レーンに対応し、前記第2レーンに対してアンパック上位オペレーションが実行されることを示す項目1から3のいずれか一項に記載の方法。
(項目5)
前記第1レーン及び前記第2レーンはそれぞれ、128ビットを有する項目1から4のいずれか一項に記載の方法。
(項目6)
前記結果を格納する段階は、
前記第1オペランドの前記第1サブセットに前記最下位データ要素が現れているのと同じ順番で、前記第1オペランドの前記第1サブセットからの前記最下位データ要素を格納する段階を含む、前記第1サブセットからの前記複数のパックドデータ要素の半分のみを前記第1レーンに格納する段階と、
前記第2サブセットからの前記複数のパックドデータ要素の半分のみを前記第2レーンに格納する段階とを有する項目1から5のいずれか一項に記載の方法。
(項目7)
前記命令を、1以上の命令にデコードする段階、又は、前記命令を1以上の命令に翻訳する段階のうちの少なくとも1つの段階を更に備える項目1から6のいずれか一項に記載の方法。
(項目8)
命令を受けて、結果を格納する実行ユニットを備え、
前記命令は、第1オペランドを示す第1フィールド及び第2オペランドを示す第2フィールドを有し、
前記第1オペランド及び前記第2オペランドはそれぞれ、複数のパックドデータ要素を有し、
前記複数のパックドデータ要素の各々は、それぞれの位置に対応しており、
前記第1オペランドの前記複数のパックドデータ要素の第1サブセット及び前記第2オペランドの前記複数のパックドデータ要素の第1サブセットはそれぞれ、第1レーンに対応し、前記第1オペランドの前記複数のパックドデータ要素の第2サブセット及び前記第2オペランドの前記複数のパックドデータ要素の第2サブセットはそれぞれ、第2レーンに対応し、
格納される前記結果は、
(1)前記第2オペランドの前記第1サブセットの対応する最下位データ要素でインターリーブされている前記第1オペランドの前記第1サブセットからの最下位データ要素のみを前記第1レーンに含み、及び、
(2)前記第2オペランドの前記第2サブセットの対応する最上位データ要素でインターリーブされている前記第1オペランドの前記第2サブセットからの最上位データ要素のみを前記第2レーンに含む装置。
(項目9)
前記第1レーンは、下位レーンを含み、前記第2レーンは、上位レーンを含む項目8に記載の装置。
(項目10)
前記第1レーンは、上位レーンを含み、前記第2レーンは、下位レーンを含む項目8に記載の装置。
(項目11)
前記命令は、制御フィールドを含み、
前記制御フィールドの1以上のビットは、前記第1レーンに対応し、前記第1オペランド及び前記第2オペランドの前記最下位データ要素がアンパックされることを示し、
前記制御フィールドの1以上のビットは、前記第2レーンに対応し、前記第1オペランド及び前記第2オペランドの前記最上位データ要素がアンパックされることを示す項目8から10のいずれか一項に記載の装置。
(項目12)
前記命令は、前記第1フィールド及び前記第2フィールドとは異なり、前記結果を格納する宛先を示す第3フィールドを有し、
前記結果を格納することは、前記結果を前記宛先に格納することを含む項目8から11のいずれか一項に記載の装置。
(項目13)
前記命令は、クロスレーンアンパック命令を含む項目8から12のいずれか一項に記載の装置。
(項目14)
前記第1レーン及び前記第2レーンは、それぞれ、128ビットを有する項目8から13のいずれか一項に記載の装置。
(項目15)
前記実行ユニットは、
(1)前記第1サブセットからの前記複数のパックドデータ要素の半分のみを前記第1レーンに含み、及び、
(2)前記第2サブセットからの前記複数のパックドデータ要素の半分のみを前記第2レーンに含む、結果を格納する項目8から14のいずれか一項に記載の装置。
(項目16)
前記実行ユニットは、前記第1オペランドの前記第1サブセットに前記最下位データ要素が現れているのと同じ順番で、前記第1オペランドの前記第1サブセットからの前記最下位データ要素を前記第1レーンに含む結果を格納する項目8から15のいずれか一項に記載の装置。
(項目17)
前記実行ユニットは、前記第1オペランドから抽出される少なくとも4つのデータ要素、及び前記第2オペランドから抽出される少なくとも4つのデータ要素を含む結果を格納する項目8から16のいずれか一項に記載の装置。
(項目18)
前記実行ユニットによって実行されると、前記実行ユニットに前記結果を格納させる1以上の命令に前記命令をデコードするデコーダ、及び、
前記実行ユニットによって実行されると、前記実行ユニットに前記結果を格納させる1以上の命令に前記命令を翻訳する命令トランスレータ、
のうちの少なくとも1つを更に備える項目8から17のいずれか一項に記載の装置。
(項目19)
前記実行ユニットは、回路を有し、
前記命令は、機械命令を含み、
前記実行ユニットは、前記機械命令による前記結果を格納する特定のロジックを含む項目8から18のいずれか一項に記載の装置。
(項目20)
ビット0から31で表される第1データ要素、ビット32から63で表される第2データ要素、ビット64から95で表される第3データ要素、ビット96から127で表される第4データ要素、ビット128から159で表される第5データ要素、ビット160から191で表される第6データ要素、ビット192から223で表される第7データ要素、及び、ビット224から255で表される第8データ要素を含む第1ソースオペランドを格納する第1の256ビットレジスタと、
ビット0から31で表される第9データ要素、ビット32から63で表される第10データ要素、ビット64から95で表される第11データ要素、ビット96から127で表される第12データ要素、ビット128から159で表される第13データ要素、ビット160から191で表される第14データ要素、ビット192から223で表される第15データ要素、及び、ビット224から255で表される第16データ要素を含む第2ソースオペランドを格納する第2の256ビットレジスタと、
命令の結果として、結果を格納する実行ユニットとを備え、
格納されるべき結果は、
宛先レジスタのビット0から31に格納される前記第1データ要素、前記宛先レジスタのビット32から63に格納される前記第9データ要素、前記宛先レジスタのビット64から95に格納される前記第2データ要素、前記宛先レジスタのビット96から127に格納される前記第10データ要素、前記宛先レジスタのビット128から159に格納される前記第7データ要素、前記宛先レジスタのビット160から191に格納される前記第15データ要素、前記宛先レジスタのビット192から223に格納される前記第8データ要素、及び、前記宛先レジスタのビット224から255に格納される前記第16データ要素を含む装置。
(項目21)
前記実行ユニットによって実行されると、前記実行ユニットに前記結果を格納させる1以上の命令に前記命令をデコードするデコーダ、及び、
前記実行ユニットによって実行されると、前記実行ユニットに前記結果を格納させる1以上の命令に前記命令を翻訳する命令トランスレータのうちの少なくとも1つを更に備える項目20に記載の装置。
(項目22)
ビット0から31で表される第1データ要素、ビット32から63で表される第2データ要素、ビット64から95で表される第3データ要素、ビット96から127で表される第4データ要素、ビット128から159で表される第5データ要素、ビット160から191で表される第6データ要素、ビット192から223で表される第7データ要素、及び、ビット224から255で表される第8データ要素を含む第1ソースオペランドを格納する第1の256ビットレジスタと、
ビット0から31で表される第9データ要素、ビット32から63で表される第10データ要素、ビット64から95で表される第11データ要素、ビット96から127で表される第12データ要素、ビット128から159で表される第13データ要素、ビット160から191で表される第14データ要素、ビット192から223で表される第15データ要素、及び、ビット224から255で表される第16データ要素を含む第2ソースオペランドを格納する第2の256ビットレジスタと、
命令の結果として、結果を格納する実行ユニットとを備え、
格納されるべき結果は、
宛先レジスタのビット0から31に格納される前記第3データ要素、前記宛先レジスタのビット32から63に格納される前記第11データ要素、前記宛先レジスタのビット64から95に格納される前記第4データ要素、前記宛先レジスタのビット96から127に格納される前記第12データ要素、前記宛先レジスタのビット128から159に格納される前記第5データ要素、前記宛先レジスタのビット160から191に格納される前記第13データ要素、前記宛先レジスタのビット192から223に格納される前記第6データ要素、及び、前記宛先レジスタのビット224から255に格納される前記第14データ要素を含む装置。
(項目23)
前記実行ユニットによって実行されると、前記実行ユニットに前記結果を格納させる1以上の命令に前記命令をデコードするデコーダ、及び、
前記実行ユニットによって実行されると、前記実行ユニットに前記結果を格納させる1以上の命令に前記命令を変換する命令トランスレータのうちの少なくとも1つを更に備える項目22に記載の装置。
(項目24)
インターコネクトと、
前記インターコネクトと結合され、命令を受信するべく、命令デコーダ、命令トランスレータ及び命令エミュレータのうちの少なくとも1つを有するプロセッサと、
前記命令デコーダ、命令トランスレータ及び命令エミュレータのうちの少なくとも1つの前記命令の受信に応答して、結果を格納する回路と、
前記インターコネクトと結合されるダイナミックランダムアクセスメモリ(DRAM)とを備え、
前記命令デコーダ、命令トランスレータ及び命令エミュレータのうちの少なくとも1つは、ハードウェア、ソフトウェア、ファームウェア、又は、これらの組み合わせで実装され、
前記命令は、第1オペランドを示す第1フィールド及び第2オペランドを示す第2フィールドを有し、
前記第1オペランド及び前記第2オペランドはそれぞれ、複数のパックドデータ要素を有し、
前記複数のパックドデータ要素はそれぞれの位置に対応しており、
前記第1オペランドの前記複数のパックドデータ要素の第1サブセット及び前記第2オペランドの前記複数のパックドデータ要素の第1サブセットはそれぞれ、第1レーンに対応し、前記第1オペランドの前記複数のパックドデータ要素の第2サブセット及び前記第2オペランドの前記複数のパックドデータ要素の第2サブセットはそれぞれ、第2レーンに対応し、
前記結果は、
(1)前記第2オペランドの前記第1サブセットの対応する最下位データ要素でインターリーブされている前記第1オペランドの前記第1サブセットからの最下位データ要素のみを前記第1レーンに含み、及び、
(2)前記第2オペランドの前記第2サブセットの対応する最上位データ要素でインターリーブされている前記第1オペランドの前記第2サブセットからの最上位データ要素のみを前記第2レーンに含むシステム。
(項目25)
結果を格納する前記回路は、
(1)前記第1サブセットからの前記複数のパックドデータ要素の半分のみを前記第1レーンに含み、及び、
(2)前記第2サブセットからの前記複数のパックドデータ要素の半分のみを前記第2レーンに含む、結果を格納する項目24に記載のシステム。
(項目26)
位置に対応する複数のパックドデータ要素を含む第1オペランドを示す第1フィールド、及び位置に対応する複数のパックドデータ要素を含む第2オペランドを示す第2フィールドを有する命令を機械に供給するプログラムであって、
前記機械に、
(1)前記第1オペランドの前記複数のパックドデータ要素の第1サブセット及び前記第2オペランドの前記複数のパックドデータ要素の第1サブセットの各々が対応する第1レーンに、前記第2オペランドの前記第1サブセットの対応する最下位データ要素でインターリーブされている前記第1オペランドの前記第1サブセットからの最下位データ要素のみが含まれる結果、及び、
(2)前記第1オペランドの前記複数のパックドデータ要素の第2サブセット及び前記第2オペランドの前記複数のパックドデータ要素の第2サブセットの各々が対応する第2レーンに、前記第2オペランドの前記第2サブセットの対応する最上位データ要素でインターリーブされている前記第1オペランドの前記第2サブセットからの最上位データ要素のみが含まれる結果
を格納させるためのプログラム。
(項目27)
前記命令は、機械命令を含み、
前記機械は、前記機械命令による前記結果を格納する特定のロジックを含む項目26に記載のプログラム。