本明細書において、パックドデータアライメントプラス演算命令、命令を実行するプロセッサ、命令を処理又は実行する場合にプロセッサによって実行される方法、及び命令を処理又は実行する1つ又は複数のプロセッサを組み込んだシステムが開示される。以下の説明において、多数の具体的な詳細が示される(例えば、具体的な命令オペレーション、データフォーマット、プロセッサ構成、マイクロアーキテクチャの詳細、オペレーションの順序等)。しかしながら、実施形態は、これらの具体的な詳細がなくとも実施可能である。他の例において、周知の回路、構造及び技術は、説明の理解の妨げとなることを回避すべく、詳細には示されていない。
いくつかの実施形態において、パックドデータアライメントプラス演算命令は、SIMDアーキテクチャを有するプロセッサにおいて実行されてよい。SIMDアーキテクチャにおいて、並列又はSIMD実行ロジック(例えば、1つ又は複数のSIMD実行ユニット)は、概して、互いに特定のデータエレメントアライメントを有するパックドデータ又はSIMDデータのデータエレメントに対して、オペレーションを実行するように設計される。例として、SIMD加算器ユニットは、第1及び第2のソースパックドデータの同じ相対的データエレメント位置にある対応データエレメントを、加算するように設計されてよい。同様に、多種多様な他のタイプのSIMD実行ユニット(例えば、SIMD乗算ユニット、SIMD比較ユニット、SIMDシフトユニット等)は、第1及び第2のソースパックドデータの同じ相対的データエレメント位置にある対応データエレメントに対して動作するように設計されてよい。対応データエレメントに対するこのようなオペレーションは、「垂直」SIMDオペレーションと称される場合がある。
他のSIMD実行ユニットは、対応データエレメントのみに対する動作、及び/又は「垂直」SIMDオペレーションのみの実行に限定されるものではない。むしろ、いくつかのSIMD実行ユニットは、非対応データエレメントに対して動作してよい。一例として、複合的な乗算命令を実行する実行ユニットは、対応データエレメント及び非対応データエレメント(例えば、対角線のデータエレメント)の両方を乗算し、乗算された積を組み合わせるように動作可能であってよい。しかしながら、SIMD実行ユニットは、典型的には、特定の固定かつ非柔軟な相対的データエレメントアライメントを有するソースパックドデータのデータエレメントに対して動作するように設計される。本明細書において開示されるパックドデータアライメントプラス演算命令がなくとも、特定の固定かつ非柔軟な相対的データエレメントアライメントをまだ示していないデータエレメントに対して動作することが望ましい場合には、典型的には、SIMD実行ユニットが所望のデータエレメントに対して動作可能となる前に、1つ又は複数のパックドデータアライメントオペレーションが実行される必要がある。例えば、他の命令が実行され、第1のソースパックドデータオペランドの移動又はアライメントされたデータエレメントに対してオペレーションを実行する前に、最初のシフト、回転、シフト−マージ、又は他のパックドデータアライメント命令が第1のソースパックドデータオペランドに対して実行され、第1のソースパックドデータオペランドのデータエレメントを移動させ又はアライメントしてよい。
しかしながら、1つ又は複数の別個のパックドデータアライメント命令を実行する必要は、1つ又は複数の欠点を有する傾向があり得る。1つのあり得る欠点は、1つ又は複数のパックドデータアライメント命令が、追加の実行時間(例えば、1つ又は複数のクロックサイクル)を費やす傾向があり得る、及び/又は追加のリソース(例えば、フェッチユニット、デコーダ、実行ユニット等)を用いる傾向があり得る別個の命令であり、これにより、電力消費が増加することである。他のあり得る欠点は、パックドデータアライメント命令が、典型的には、これらの結果をアーキテクチャレジスタ(例えば、パックドデータレジスタ)に戻して格納することで、レジスタが、他のデータを格納するために利用不可能となり得ることである。有利には、本明細書において開示されるパックドデータアライメントプラス演算命令は、パックドデータアライメントオペレーション及び演算オペレーションの両方を、同じ単一命令の性能の制約内で、組み合わせてよい。これは、別個のパックドデータアライメント及び演算命令を実行する必要を回避する助けとなることがあり、これにより、概して、性能向上、アーキテクチャレジスタの利用可能性向上等の助けとなることがある。
図1は、パックドデータアライメントプラス演算命令102の実施形態を実行するように動作可能なプロセッサ100の実施形態のブロック図である。いくつかの実施形態において、プロセッサは、汎用プロセッサ(例えば、デスクトップ、ラップトップ、又は他のコンピュータにおいて用いられるタイプの汎用マイクロプロセッサ又は中央処理装置(CPU))であってよい。あるいは、プロセッサは、特定用途向けプロセッサであってよい。好適な特定用途向けプロセッサの例は、限定されるものではないが、デジタル信号プロセッサ(DSP)、画像プロセッサ、グラフィクスプロセッサ、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、コプロセッサ、埋め込みプロセッサ、及びコントローラ(例えば、マイクロコントローラ)を含む。プロセッサは、様々な複合命令セットコンピューティング(CISC)アーキテクチャ、縮小命令セットコンピューティング(RISC)アーキテクチャ、超長命令語(VLIW)アーキテクチャ、ハイブリッドアーキテクチャ、他のタイプのアーキテクチャのいずれかを有してよく、又は異なるアーキテクチャの組み合わせを有してよい(例えば、異なるコアは、異なるアーキテクチャを有してよい)。具体的な一例示的実施形態において、プロセッサは、画像プロセッサユニットとして用いられるDSPであってよいが、本発明の範囲は、このように限定されるものではない。
オペレーション中に、プロセッサ100は、パックドデータアライメントプラス演算命令102を受信してよい。例えば、命令は、バス又は他の相互接続を介して、メモリから受信されてよい。命令は、マクロ命令、アセンブリ語命令、機械コード命令、もしくは他の命令又はプロセッサの命令セットの制御信号を表してよい。いくつかの実施形態において、パックドデータアライメントプラス演算命令は、(例えば、1つ又は複数のフィールド又はビットのセットを通して)第1の複数のデータエレメント(例えば、図示される例において、データエレメントA1からA4と符号を付された)を含む1つ又は複数のソースパックドデータオペランドの第1のセット112を明示的に規定もしくは示し(例えば、暗示的に示し)てよく、第2の複数のデータエレメントを含む1つ又は複数のソースパックドデータオペランドの第2のセット(例えば、図示される例において、データエレメントB1からB8と符号を付された)を明示的に規定もしくは示してよく、結果パックドデータオペランド120が格納されるデスティネーション格納位置118を明示的に規定もしくは示してよい。一例として、命令は、オペランドのレジスタ、メモリ位置、又は他の格納位置を明示的に規定するソース及び/又はデスティネーションオペランド規定フィールドを有してよい。あるいは、これらのオペランドの1つ又は複数は、任意選択的に、明示的に表されず、命令によって暗示又は黙示(例えば、命令のオペコードによって暗示又は黙示)されてよい。例えば、プロセッサは、オペコードに基づいて、これらのオペランドの1つのために用いられる具体的な固定レジスタ又は他の格納位置を理解してよい。一態様において、ソースオペランドのデータは、入力/出力デバイス(例えば、ネットワークインタフェース、デジタル画像取得デバイス、ビデオ入力デバイス、無線インタフェース、オーディオ入力デバイス等)から受信されていてよいが、これは、必須ではない。
図示されるように、いくつかの実施形態において、パックドデータアライメントプラス演算命令は、少なくとも1つのデータエレメントオフセット122を明示的に規定又は示してもよい。さらに後述されるように、少なくとも1つのデータエレメントオフセットは、ソースパックドデータオペランドの第1及び第2のセットにおいて、ソースパックドデータオペランドをアライメントするパックドデータアライメントオペレーションを実行するために用いられてよい。少なくとも1つのデータエレメントオフセットは、異なる実施形態における様々な異なるタイプのオフセットを表してよい。好適なオフセットの例は、限定されるものではないが、ほんの数例を挙げると、データエレメント数の規定又は指示、(例えば、データエレメントサイズインクリメントにおける)ビット数の規定又は指示、予め定められた数のデータエレメントの1つの選択、(例えば、データエレメントサイズインクリメントにおける)予め定められた数のビットの1つの選択、(例えば、データエレメントサイズインクリメントにおける)データエレメント又はビットにおける回転量の規定又は指示、及び(例えば、データエレメントサイズインクリメントにおける)データエレメント又はビットにおける規定又は指示されたシフト量を含む。図示されるように、いくつかの実施形態において、少なくとも1つのデータエレメントオフセットは、任意選択的に、汎用レジスタ又は他のスカラレジスタ124に格納されてよい。あるいは、命令の即値は、任意選択的に、少なくとも1つのデータエレメントオフセットを提供するために用いられてよく、又は、このようなアプローチの組み合わせが、任意選択的に用いられてよい。有利には、このような実施形態は、命令が柔軟かつ可変のオフセットを示すことを可能とする。(例えば、一態様において、オフセットは、4、−3、−2、−1、0、1、2、3、又は4のデータエレメントオフセット位置のいずれか1つであってよい。ここで、負の整数(例えば、−2)は、1つの方向におけるオフセットを示すために用いられ、負ではない整数(例えば、2)は、反対方向におけるオフセットを示すために用いられる)。さらに他の実施形態において、固定オフセットは、任意選択的に、命令の非オペコードフィールドを通して柔軟又は可変的に示されるのではなく、命令(例えば、これらのオペコード)に暗示されてよい。
図1を再度参照すると、プロセッサは、デコードユニット又はデコーダ104を含む。デコードユニットは、パックドデータアライメントプラス演算命令を受信及びデコードしてよい。デコードユニットは、1つ又は複数の相対的により低レベルの命令又は制御信号(例えば、1つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリポイント、デコードされた命令又は制御信号等)を出力してよい。これらは、相対的により高レベルのパックドデータアライメントプラス演算命令を反映し、表し、及び/又はこれから導出される。いくつかの実施形態において、デコードユニットは、パックドデータアライメントプラス演算命令を受信する1つ又は複数の入力構造(例えば、ポート、相互接続、インタフェース)、これに結合された、パックドデータアライメントプラス演算命令を認識及びデコードする命令認識及びデコードロジック、ならびにこれに結合された、より低レベルの命令又は制御信号を出力する1つ又は複数の出力構造(例えば、ポート、相互接続、インタフェース)を含んでよい。デコードユニットは、限定されるものではないが、マイクロコードリードオンリメモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、及びデコードユニットの実装に好適な他のメカニズムを含む、様々な異なるメカニズムを用いて実装されてよい。
いくつかの実施形態において、パックドデータアライメントプラス演算命令がデコードユニットに直接提供される代わりに、命令エミュレータ、トランスレータ、モーファ、インタープリタ、又は他の命令変換モジュールが、任意選択的に用いられてよい。様々なタイプの命令変換モジュールが、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。いくつかの実施形態において、命令変換モジュールは、例えば、別個のダイ上及び/又はメモリ内(例えば、静的、動的、もしくはランタイムエミュレーションモジュール)のような、プロセッサ外部に配置されてよい。例として、命令変換モジュールは、第1の命令セットに含まれ得るパックドデータアライメントプラス演算命令を受信してよく、パックドデータアライメントプラス演算命令を、第2の異なる命令セットに含まれ得る1つ又は複数の対応する中間命令又は制御信号にエミュレート、トランスレート、モーフィング、解釈、又は変換してよい。第2の命令セットの1つ又は複数の中間命令又は制御信号は、プロセッサのネイティブハードウェア(例えば、1つ又は複数の実行ユニット)によって実行可能な1つ又は複数のより低レベルの命令又は制御信号にこれらをデコードし得るデコードユニット(例えば、デコードユニット104)に提供されてよい。
図1を再度参照すると、プロセッサ100は、パックドデータレジスタ108のセットをさらに含む。パックドデータレジスタの各々は、パックドデータ又はSIMDデータを格納するように動作可能なオンダイストレージ位置を表してよい。パックドデータ又はSIMDデータは、「空間」SIMDを示してよく、ここで、エレメントは、バス又は他の相互接続を介して共に受信され、キャリーチェーンの中断がデータエレメント間に存在し得るパックドデータ又はSIMDデータとして、レジスタに共に格納されてよい、等である。パックドデータレジスタは、アーキテクチャ的に可視な、又はソフトウェア及び/又はプログラマに可視なアーキテクチャレジスタを表してよく、及び/又は、オペランドを特定するプロセッサの命令セットの命令によって示されるレジスタである。これらのアーキテクチャレジスタは、所与のマイクロアーキテクチャの他の非アーキテクチャレジスタ(例えば、テンポラリレジスタ、リオーダバッファ、リタイアメントレジスタ等)と対比される。パックドデータレジスタは、異なる態様で、異なるマイクロアーキテクチャで実装されてよく、特定のタイプの設計に限定されるものではない。好適なタイプのレジスタの例は、限定されるものではないが、専用物理レジスタ、レジスタリネーミングを用いて動的に割り当てられる物理レジスタ、及びこれらの組み合わせを含む。
いくつかの実施形態において、1つ又は複数のソースパックドデータオペランドの第1のセット112は、任意選択的に、1つ又は複数のパックドデータレジスタ110の第1のセットに格納されてよく(例えば、単一のレジスタが、単一のオペランドを格納するために用いられてよく、又は、異なるパックドデータレジスタが、2つの異なるオペランドの各々を格納するために用いられてよい)、1つ又は複数のソースパックドデータオペランドの第2のセット116は、任意選択的に、1つ又は複数のパックドデータレジスタ114の第2のセットに格納されてよい(例えば、単一のレジスタが、単一のオペランドを格納するために用いられてよく、又は、異なるパックドデータレジスタが、2つの異なるオペランドの各々を格納するために用いられてよい)。いくつかの実施形態において、デスティネーション格納位置118は、任意選択的に、第3のパックドデータレジスタであってよい。あるいは、メモリ位置、又は他の格納位置は、任意選択的に、これらのオペランドの1つ又は複数のために用いられてよい。さらに、いくつかの実施形態において、ソースパックドデータオペランドの1つのために用いられるソース/デスティネーションパックドデータレジスタは、任意選択的に、結果パックドデータオペランドを格納するためのデスティネーション格納位置として、再利用されてよい。例えば、命令は、ソース/デスティネーションレジスタを規定してよく、プロセッサは、ソース/デスティネーションレジスタが最初にソースオペランドを取得するために用いられること、及び、次いでひき続き、結果オペランドがソース/デスティネーションレジスタに格納され、ソースオペランドを上書きすることを、暗示的又は黙示的に理解してよい。さらに、いくつかの実施形態において、命令は、1つ又は複数のソースパックドデータオペランドの1セットだけを示してよい(例えば、セット112を示すが、セット116を示さない)。
図1を再度参照すると、実行ユニット106は、デコードユニット104に結合される。実行ユニットは、パックドデータアライメントプラス演算命令を表す、及び/又はこれから導出される、1つ又は複数のデコード又は変換された命令又は制御信号を受信してよい。実行ユニットは、例えば、パックドデータレジスタ108に結合されることによって、ソースパックドデータオペランドの第1及び第2のセット112、116にも結合される。実行ユニットは、ソースパックドデータオペランドの第1及び第2のセットを受信してよい。実行ユニットは、パックドデータアライメントプラス演算命令に応答して、及び/又はその結果として(例えば、これからデコードされた1つ又は複数の命令もしくは制御信号に応答して)、命令によって示されるデスティネーション格納位置118に、結果パックドデータオペランド120を格納するように動作可能である。
いくつかの実施形態において、結果パックドデータオペランドは、複数の結果データエレメント(例えば、図示される例において、データエレメントR1からR4と符号を付されている)を含んでよい。いくつかの実施形態において、結果データエレメントの各々は、ソースパックドデータオペランドの第1のセット112におけるデータエレメント及びソースパックドデータオペランドの第2のセット116におけるデータエレメントのペアにより実行されたオペレーションの値を有してよい。例えば、図示される例示的実施形態において示されるように、R1は、ソースパックドデータオペランドの第1のセットにおけるデータエレメントA1及びソースパックドデータオペランドの第2のセットにおける非対応データエレメントB4のペアにより実行されたオペレーション(OP)の値を有してよい。同様に、R2は、A2及びB5により実行されたオペレーション(OP)の値を有してよく、R3は、A3及びB6により実行されたオペレーション(OP)の値を有してよく、R4は、A4及びB7により実行されたオペレーション(OP)の値を有してよい。これは、オペランド116に適用された3のデータエレメント位置の例示的なオフセットに関する1つの説明例に過ぎない。
いくつかの実施形態において、例えば、少なくとも1つのデータエレメントオフセットが、集合的又は累積的に、少なくとも1つの0以外のデータエレメントオフセットになる場合、各ペアにおけるデータエレメントは、ソースオペランドにおける非対応データエレメントであってよい。例えば、A1及びB4は、ソースパックドデータオペランドの第1及び第2のセットにおいて非対応データエレメント位置にある(すなわち、ソースパックドデータオペランドの第1及び第2のセットにおいて、A1は、B1と対応データエレメント位置にあるが、B4とは当該位置にない)。同様に、A2及びB5、A3及びB6、ならびにA4及びB7は、各々、ソースパックドデータオペランドの第1及び第2のセットにおいて非対応データエレメント位置にある。
実行ユニットは、少なくとも1つのデータエレメントオフセットを、ソースパックドデータオペランドの第1及び第2のセットのうち少なくとも対応する1つに適用してよく、少なくとも1つのデータエレメントオフセットは、ソースパックドデータオペランドの第1及び第2のセットにおける各ペアのデータエレメント間の対応関係のあらゆる欠如を打ち消し、除去し、キャンセルし、又はこれに対抗してよい。少なくとも1つのデータエレメントオフセットをソースパックドデータオペランドの第1及び第2のセットの少なくとも1つに適用することは、各ペアのデータエレメントに対応関係(例えば、同じ相対的データエレメント位置)を持たせ、又は、実行ユニット内の中間もしくはマイクロアーキテクチャレジスタもしくは回路において、これらをアライメントしてよい。いくつかの実施形態において、非対応データエレメント位置は、パックドデータアライメントプラス演算命令によって示される少なくとも1つのデータエレメントオフセットに基づいて、異なってよい。単一の0以外のオフセットの場合、非対応データエレメントは、0以外のオフセットだけ異なってよい。例えば、図示される例示的実施形態において、非対応データエレメント位置は、3のデータエレメント位置だけ異なる。例えば、B4は、A1との対応データエレメント位置に位置し得るように、図中左に3のデータエレメント位置だけ、回転、シフト、もしくは移動させられ、又はオフセットされてよい(実装に応じて、最下位又は最上位ビット位置のいずれかに向かってよい)。いくつかの実施形態において、(この具体例における)この3のデータエレメント位置の差は、3のデータエレメント位置の単一のデータエレメントオフセットに等しくてよい。他の実施形態において、2つのオフセットの場合、非対応データエレメントは、2つのオフセットの組み合わせ又は2つのオフセットの適用によって、又はこれに基づいて、異なってよい。例えば、(この具体例における)図示される3のデータエレメント位置の差は、1つ又は複数のソースパックドデータオペランドの第1のセットに適用される第1のデータエレメントオフセットと、1つ又は複数のソースパックドデータオペランドの第2のセットに適用される第2のデータエレメントオフセットとの間の差に等しくてよい。例として、図において、A1は、パックドデータオペランドの第1のセットに適用される0のデータエレメントオフセット、及びパックドデータオペランドの第2のセットに適用される3のデータエレメントオフセットにより実行され得る、移動がなされたものとして示されていない。他の実施形態において、非対応データエレメント位置は、例えば、マイナス4のデータエレメント位置と4のデータエレメント位置との間(すなわち、−4、−3、−2、−1、0、1、2、3、4)の差、マイナス2のデータエレメント位置と2のデータエレメント位置との間(例えば、−2、−1、0、1、2)の差、0のデータエレメント位置と4のデータエレメント位置との間(すなわち、0、1、2、3、4)の差、0のデータエレメント位置と2のデータエレメント位置との間(すなわち、0、1、2)の差、0のデータエレメント位置と1のデータエレメント位置との間の差、マイナス6のデータエレメント位置と6のデータエレメント位置との間の差、0のデータエレメント位置と6のデータエレメント位置との間の差、等のような、正又は負のデータエレメントオフセットの間における他の差に基づいて、異なってよい。
図示される実施形態において、ソース及び結果オペランドの具体例が図示及び説明されたが、本発明の範囲は、このように限定されるものではない。図示される例示的実施形態において、ソースパックドデータオペランドの第1のセットは、任意選択的に、少なくとも4つのデータエレメントを有し、ソースパックドデータオペランドの第2のセットは、任意選択的に、8つのデータエレメントを有し、結果パックドデータオペランドは、任意選択的に、4つのデータエレメントを有するが、他の実施形態において、より少ない又はより多くのデータエレメントが、任意選択的に、これらのオペランドのために用いられてよい。1つの他の説明例として、ソースパックドデータオペランドの第1及び第2のセットの各々は、任意選択的に、64のデータエレメントを有してよく、結果パックドデータオペランドは、任意選択的に、その半数又は32のデータエレメントを有してよい。他の実施形態において、本明細書において開示される他の数のデータエレメントも、好適である。また、図示を容易化すべく、結果データエレメントは、物理的にソースデータエレメントより大きいが、結果データエレメントは、ソースデータエレメントと同じ又は異なる数のビットを有してよい。さらに、ソースパックドデータオペランドの第1及び第2のセットのデータエレメントは、同じ又は異なる数のビットを有してよい。いくつかの実施形態において、結果パックドデータオペランドは、変形及びこれらの代替的な実施形態を含む、図3−6のいずれかに関して図示及び説明されるもののいずれかであってよい。
実行ユニット及び/又はプロセッサは、パックドデータアライメントプラス演算命令を実行し、及び/又は、パックドデータアライメントプラス演算命令に応答して、及び/又はその結果として(例えば、パックドデータアライメントプラス演算命令からデコードされた1つ又は複数の命令もしくは制御信号に応答して)、結果を格納するように動作可能な特有又は特定のロジック(例えば、トランジスタ、集積回路、又はファームウェア(例えば、不揮発性メモリに格納された命令)と組み合わせられる可能性のある他のハードウェア及び/又はソフトウェア)を含んでよい。いくつかの実施形態において、実行ユニットは、ソースオペランドを受信する1つ又は複数の入力構造(例えば、ポート、相互接続、インタフェース)、ソースオペランドに対して算術オペレーションを実行するパックドデータアライメント回路又はロジック(例えば、シフト又は回転回路又はロジック)、アライメントされた中間オペランドに対して算術又は論理オペレーションを実行して結果オペランドを生成する、これらに結合された算術又は論理オペレーション回路又はロジック、及び結果オペランドを出力する、これらに結合された1つ又は複数の出力構造(例えば、ポート、相互接続、インタフェース)を含んでよい。いくつかの実施形態において、実行ユニットは、図4に関して図示及び説明される回路又はロジック、又はこれらの変形もしくは代替を含んでよい。これらは、好適なマイクロアーキテクチャ構成の説明例であるが、本発明の範囲は、このように限定されるものではない。いくつかの実施形態において、実行ユニットは、デジタル信号プロセッサの画像プロセッサユニットに含まれ、画像の画素を処理するために用いられてよいが、本発明の範囲は、このように限定されるものではない。
説明の妨げとなることを回避すべく、比較的単純なプロセッサ100が、図示及び説明されている。しかしながら、プロセッサは、任意選択的に、他のプロセッサコンポーネントを含んでよい。例えば、様々な異なる実施形態は、図7及び/又は図8A−10のいずれかに関して図示及び説明されるコンポーネントの様々な異なる組み合わせ及び構成を含んでよい。プロセッサのコンポーネントの全ては、共に結合され、これらが意図されたように動作することを可能としてよい。
図2は、パックドデータアライメントプラス演算命令の実施形態を実行する方法230の実施形態のブロックフロー図である。様々な実施形態において、方法は、プロセッサ、命令処理装置、又は他のデジタルロジックデバイスによって実行されてよい。いくつかの実施形態において、図2の方法は、図1のプロセッサによって、及び/又はその内部で実行されてよい。図1のプロセッサに関して本明細書において説明されたコンポーネント、機能、及び具体的かつ任意選択的な詳細は、任意選択的に、図2の方法にも適用される。あるいは、図2の方法は、異なるプロセッサ又は装置によって、及び/又はその内部で実行されてよい。さらに、図1のプロセッサは、図2のものと異なる方法を実行してよい。
方法は、ブロック231において、パックドデータアライメントプラス演算命令を受信する段階を含む。様々な態様において、命令は、プロセッサ又はその一部(例えば、命令フェッチユニット、デコードユニット、バスインタフェースユニット等)において、受信されてよい。様々な態様において、命令は、オフプロセッサ及び/又はオフダイソースから(例えば、メモリ、相互接続等から)、又はオンプロセッサ及び/又はオンダイソースから(例えば、命令キャッシュ、命令キュー等から)、受信されてよい。パックドデータアライメントプラス演算命令は、第1の複数のデータエレメントを含む1つ又は複数のソースパックドデータオペランドの第1のセットを規定又は示してよく、第2の複数のデータエレメントを含む1つ又は複数のソースパックドデータオペランドの第2のセットを規定又は示してよく、少なくとも1つのデータエレメントオフセットを規定又は示してよく、デスティネーション格納位置を規定又は示してよい。
結果パックドデータオペランドは、ブロック232において、パックドデータアライメントプラス演算命令に応答して、及び/又はその結果として、デスティネーション格納位置に格納されてよい。結果パックドデータオペランドは、複数の結果データエレメントを含んでよい。いくつかの実施形態において、結果データエレメントの各々は、ソースパックドデータオペランドの第1のセットにおけるデータエレメント及びソースパックドデータオペランドの第2のセットにおける非対応データエレメントのペアにより実行されたオペレーションの値を有してよい。いくつかの実施形態において、各ペアの非対応データエレメントは、ソースパックドデータオペランドの第1及び第2のセットにおける非対応データエレメント位置にあった。いくつかの実施形態において、非対応データエレメント位置は、パックドデータアライメントプラス演算命令によって示される少なくとも1つのデータエレメントオフセットに基づいて、異なっていた。いくつかの実施形態において、方法は、デジタル信号プロセッサによる画像処理中の画素フィルタリング中に実行されてよいが、本発明の範囲は、このように限定されるものではない。
図示される方法は、アーキテクチャオペレーション(例えば、ソフトウェアの視点から可視のもの)を含む。他の実施形態において、方法は、任意選択的に、1つ又は複数のマイクロアーキテクチャオペレーションを含んでよい。例として、命令は、フェッチ、デコード、アウトオブオーダスケジューリングされてよく、ソースオペランドは、アクセスされてよく、実行ユニットは、命令(例えば、少なくとも1つのオフセットに基づいて、データエレメントをシフト、回転、又は移動させること)を実装するマイクロアーキテクチャオペレーションを実行してよい、等である。
図3は、パックドデータアライメントプラス演算命令302の第1の例示的実施形態に応答して実行され得るパックドデータアライメントプラス演算オペレーション348の第1の例示的実施形態を示すブロック図である。命令は、オペレーションコード又はオペコード336を含む。オペコードは、命令及び/又は実行されるオペレーション(例えば、パックドデータアライメント及び特定のタイプの演算オペレーション(例えば、平均、乗算、加算、シフト等))を特定するように動作可能な複数のビット又は1つ又は複数のフィールドを表してよい。
命令は、任意選択的に、第1のソースパックドデータオペランド312−1を規定する第1のソース規定フィールド(SRC1)338、及び第2のソースパックドデータオペランド312−2を規定する第2のソース規定フィールド(SRC2)340をさらに含む。第1及び第2のソースパックドデータオペランドは、ソースパックドデータオペランドの第1のセットを表す。命令は、任意選択的に、第3のソースパックドデータオペランド316−1を規定する第3のソース規定フィールド(SRC3)342、第4のソースパックドデータオペランド316−2を規定する第4のソース規定フィールド(SRC4)344をさらに含む。第3及び第4のソースパックドデータオペランドは、ソースパックドデータオペランドの第2のセットを表す。命令は、任意選択的に、結果パックドデータオペランド320が格納されるデスティネーション格納位置を規定するデスティネーション規定フィールド(DEST)346をさらに含む。
例として、ソース及びデスティネーション規定フィールドの各々は、関連付けられたオペランドを格納するレジスタ、メモリ位置、又は他の格納位置のアドレスを明示的に規定する(必ずではないが、しばしば連続的な)ビットを含んでよい。あるいは、他の実施形態において、規定フィールドのいずれかは、任意選択的に省略されてよく、レジスタ又は他の格納位置は、任意選択的に、命令に暗示され、又はこれによって黙示されてよい。例えば、オペコードをデコードする際に、オペランドの1つに対して固定のレジスタを用いることは、(明示的に表されてはいないものの)既定のこと、又は、そのように理解されてよい。他の例として、デスティネーション規定フィールドを有する代わりに、ソース規定フィールドの1つが、ソース/デスティネーションレジスタを規定するソース/デスティネーション規定フィールドを表してよい。ソースパックドデータオペランドは、最初に、ソース/デスティネーションレジスタに格納されてよく、次に、暗示的に又は既定のこととして、ソース/デスティネーションレジスタを再利用し、最初のソースパックドデータオペランドを介して、結果パックドデータオペランドを格納してよい。
命令は、少なくとも1つのデータエレメントオフセットも示してよい。図示される例示的実施形態において、命令は、ソースパックドデータオペランドの第1のセット(本実施形態におけるオペランド312−1、312−2)に対応する、これに適用される第1のオフセットを規定又は示す第1のオフセット規定フィールド322−1、及びソースパックドデータオペランドの第2のセット(本実施形態におけるオペランド316−1、316−2)に対応する、これに適用される任意選択的な第2のオフセットを規定又は示す任意選択的な第2のオフセット規定フィールド322−2を有する。いくつかの実施形態において、これらのオフセット規定フィールドの各々のビットは、オフセットの値が格納されるレジスタ(例えば、汎用レジスタ又は他のスカラレジスタ)又は他の格納位置を規定又は示してよい。他の実施形態において、これらのオフセット規定フィールドの各々のビットは、オフセットの値を規定し、又はオフセットの値を符号化もしくは示し(例えば、複数の予め定められたオフセットの間に選択する値を有し)てよい。いくつかの実施形態において、命令の即値は、任意選択的に、第1のオフセット及び任意選択的な第2のオフセットを有してよい。アプローチを組み合わせることも、好適である。
図示される例示的実施形態において、第1のオフセットは、1のデータエレメント位置のオフセットを示し、第2のオフセットは、2のデータエレメント位置のオフセットを示すが、これは、1つの説明例に過ぎない。他の実施形態において、第1及び第2のオフセットの各々は、−8、−7、−6、−5、−4、−3、−2、−1、0、1、2、3、4、5、7、又は8のデータエレメント位置のいずれかであってよい。より少ない又はより多くのデータエレメントオフセットが、任意選択的に、他の実施形態においてサポートされてよい。他の実施形態において、命令は、単一のオフセットを提供する単一のオフセット規定フィールドのみを有してよい。さらに、他の実施形態において、1つ又は複数のオフセットは、任意選択的に、命令(例えば、オペコード)に暗示され又は既定であってよく、非柔軟又は固定であってよい。パックドデータアライメントプラス演算命令の他の実施形態は、任意選択的に、説明されたフィールドのいくつかを省略し、さらなるフィールドを追加(例えば、特定のタイプのオペレーション(例えば、シフト量を提供する、飽和演算が実行されるか否かを示す、等)に関連付けられたフィールドを追加)してよく、命令内において、フィールドを多様に再変更してよい。
図において、ソースオペランドの好適なセットの例が示されるが、本発明の範囲は、これらの特定のソースオペランドに限定されるものではない。具体的には、第1のソースパックドデータオペランド312−1(例えば、SRC1によって示される)は、4つのパックドデータエレメントA1−A4を有し、第2のソースパックドデータオペランド312−2(例えば、SRC2によって示される)は、4つのパックドデータエレメントA5−A8を有する。同様に、第3のソースパックドデータオペランド316−1(例えば、SRC3によって示される)は、4つのパックドデータエレメントB1−B4を有し、第4のソースパックドデータオペランド316−2(例えば、SRC4によって示される)は、4つのパックドデータエレメントB5−B8を有する。他の実施形態においてソースパックドデータオペランドは、任意選択的に、異なる数のパックドデータエレメントを含んでよい。一般に、各ソースパックドデータオペランドにおけるデータエレメントの数は、単一のデータエレメントのビットサイズによって分割されたソースパックドデータオペランドのビットサイズに等しくてよい。様々な実施形態において、各ソースパックドデータオペランドは、64ビット、128ビット、256ビット、512ビット、又は1024ビットであってよいが、本発明の範囲は、このように限定されるものではない。様々な実施形態において、各データエレメントは、8ビット、16ビット、32ビット、又は64ビットであってよいが、本発明の範囲は、このように限定されるものではない。様々な実施形態において、4、8、16、32、又は64のデータエレメントがオペランドの各々に存在してよいが、本発明の範囲は、このように限定されるものではない。オペランドが同数のデータエレメントを有することは必須ではない。一般に、オペランドにおけるデータエレメントの数は、2のべき乗の数であるが、これは、必須ではない。
図示される例示的実施形態において、最下位データエレメントは左側、最上位データエレメントは右側にあるが、反対の構成も可能である。第1のセットオペランド312−1、312−2及び第2のセットオペランド316−1、316−2において同じ相対的データエレメント位置にあるデータエレメントは、対応位置にある、及び/又は対応データエレメントである。例えば、A1及びB1は、対応データエレメントであり、A2及びB2は、対応データエレメントである、等である。対照的に、A2及びB3は、非対応データエレメント位置にある、及び/又は、A2及びB3は、非対応データエレメントである。さらに、第1及び第2のソースパックドデータオペランドは、A7及びB7は対応するがA7及びB3は対応しない等となるように、A5及びB5は対応するがA5及びB1は対応しないように、論理的に連結される又は共にあるものとみなされてよい。
パックドデータアライメントプラス演算オペレーション348は、パックドデータアライメントプラス演算命令302の実施形態に応答して実行されてよい。これは、ソースオペランドを、これらが関連付けられたレジスタ又は他の格納位置から取得又は受信し、これらを実行ユニット306に提供することを含んでよい。命令によって示される少なくとも1つのオフセット(本実施形態において、第1のオフセット及び任意選択的な第2のオフセット)も、実行ユニットに提供されてもよい。パックドデータアライメントプラス演算命令に応答可能な実行ユニットは、結果パックドデータオペランド320を生成し、これをデスティネーション格納位置(例えば、DESTによって示される)に格納するように動作可能であってよい。結果パックドデータオペランドは、複数の結果データエレメントを含んでよい。図示される例示的実施形態において、結果パックドデータオペランドは、4つの結果データエレメントを有するが、他の実施形態は、4つより少ない又はより多くの結果データエレメントを有してよい。いくつかの実施形態において、結果データエレメントの各々は、少なくとも、ソースパックドデータオペランドの第1のセット(例えば、オペランド312−1、312−2)におけるデータエレメント及びソースパックドデータオペランドの第2のセット(例えば、オペランド316−1、316−2)における非対応データエレメントのペアにより実行されたオペレーション(OP)の値を有してよい。ここで、各ペアの非対応データエレメントは、ソースパックドデータオペランドの第1及び第2のセットにおいて、非対応データエレメント位置にある。例えば、図示される例示的実施形態において、第1の結果データエレメントは、A2及びB3に対して実行されたオペレーション(OP)の値を有してよく、第2の結果データエレメントは、A3及びB4に対して実行されたオペレーション(OP)の値を有してよく、第3の結果データエレメントは、A4及びB5に対して実行されたオペレーション(OP)の値を有してよく、第4の結果データエレメントは、A5及びB6に対して実行されたオペレーション(OP)の値を有してよい。
いくつかの実施形態において、各ペアの非対応データエレメントは、ソースパックドデータオペランドの第1及び第2のセットにおいて、非対応データエレメント位置にあってよく、これらは、命令によって示される少なくとも1つのデータエレメントオフセット(例えば、第1のオフセット322−1及び第2のオフセット322−2)に基づいて異なる。非対応データエレメント位置は、実行ユニットが、パックドデータアライメントプラス演算命令に応答して、かつ、パックドデータアライメントプラス演算命令の性能の制約内において、非対応データエレメントを対応データエレメント位置に配置すべく、第1及び第2のオフセットをソースオペランドに適用するように動作可能となるような位置であってよい。例えば、B3は、1のデータエレメント位置の第1のオフセット322−1を第1及び第2のソースパックドデータオペランドに適用(例えば、これらの論理的連結)することによって、かつ、2のデータエレメント位置の第2のオフセット322−2を第3及び第4のソースパックドデータオペランドに適用(例えば、これらの論理的連結)することによって、A2に対する対応データエレメント位置に(例えば、同じ相対的データエレメントビット位置に)オフセット又は移動させられてよい。図示される例示的実施形態において、第1のオフセットは、1のデータエレメント位置であり、第2のオフセットは、2のデータエレメント位置である。そこで、第1及び第2のオフセットの適用は、データエレメントの相対的位置を、集合的に1のデータエレメント位置だけオフセット又は移動させる。集合的に2つのオフセットは、実行ユニット内において、A2及びB3を対応データエレメントとし、A3及びB4を対応データエレメントとし、A5及びB6を対応データエレメントとする等のように動作可能である。データエレメントオフセットは、例えば、シフト、回転、シフト−マージオペレーション等のような、異なる態様で、異なる実施形態において適用されてよい。A2及びB3(等)は、概して、アーキテクチャ的に可視なパックドデータレジスタ内における対応データエレメントではなく、むしろ、パックドデータレジスタから一度アクセスされると、実行ユニット内部において、内部回路及び/又はテンポラリ/中間のアーキテクチャ的に不可視なレジスタ内における対応データエレメントとされることに留意されたい。
実行ユニットは、多種多様な異なるタイプのオペレーション(OP)のいずれかを、アライメントされたデータエレメントに対して実行するように動作可能であってよい。本発明の範囲は、このようなオペレーション(OP)のいずれかの公知の特定のタイプに限定されるものではない。好適なタイプのオペレーションの例は、限定されるものではないが、算術オペレーション(例えば、加算、減算、乗算、除算、乗加算、乗累算、ドット積等)、論理オペレーション(例えば、シフト、回転、論理AND、論理OR、論理XOR、論理AND NOT等)、他のオペレーション(例えば、比較オペレーション、平方根、逆数平方根、ビットカウント、ビット反転、半値幅飽和演算等)、及びこれらの組み合わせを含む。いくつかの実施形態において、実行ユニットは、「垂直」SIMD演算オペレーション(例えば、実行ユニットの「垂直」SIMDレーン又は部分)を、同じ相対的データエレメント位置にある対応データエレメントのみに対して実行してよいが、本発明の範囲は、このように限定されるものではない。例えば、実行ユニットは、パック加算、パック減算、パック乗算、パック除算、パック平均、パック半値幅飽和演算、パック平方根、パック逆数平方根、パックシフト、パック回転、パック論理AND、パック論理OR、パック論理XOR、パック論理AND NOT、パック比較等を、ソースオペランドの第1及び第2のセットにおける対応データエレメントのみに対して実行してよい。
いくつかの実施形態において、実行ユニットは、対応データエレメント及び非対応データエレメントの組み合わせを含む垂直及び非垂直SIMD演算オペレーションの両方の組み合わせを実行してよい。一例として、実行ユニットは、対応及び非対応データエレメントの積の両方を加算することを含む複合乗算オペレーションを実行してよい。このようなより複雑な垂直プラス非垂直SIMDオペレーションの様々な他の例も、好適である。いずれにしても、データエレメントの所望のセットに対してオペレーションを実行するために、データエレメントは、これらがあるべきものとして実行ユニットが期待した、又は設計された、意図された位置に、アライメントされている。有利には、アライメントオペレーションは、同じパックドデータアライメントを実現するために、多種多様な異なるタイプの既存の垂直及び/又は垂直及び非垂直SIMD実行ユニット又はロジックの再利用又は利用を、別個のパックドデータアライメント命令(例えば、シフトマージ命令)を実行する必要なく可能としてよい。具体的な例示的実施形態において、オペレーションは、乗算、加算、平均、及び乗累算の1つであってよいが、本発明の範囲は、このように限定されるものではない。
図4は、パックドデータアライメントプラス演算オペレーションの実施形態を実行するように動作可能な実行ユニットの例示的実施形態のブロック図である。実行ユニットは、本明細書において説明される異なるオペレーション(例えば、図3及び5−6のもの)を実行するために用いられてよい。実行ユニットは、第1のアライメントユニット460及び第2のアライメントユニット467を含む。実行ユニットは、垂直SIMD演算ユニット466をさらに含む。
第1のアライメントユニットは、図示される実施形態において、第1のソースパックドデータオペランド412−1及び第2のソースパックドデータオペランド412−2を含む、1つ又は複数のソースパックドデータオペランドの第1のセットを受信するように結合される。第1のアライメントユニットは、第1の連結及び回転ユニットCR1、第2の連結及び回転ユニットCR2、及び第3の連結及び回転ユニットCR3を含む。CR1は、0のデータエレメント位置の最下位ビット位置に向けて(図では左向きに示されるが)右回転を実行し、0のデータエレメントオフセット中間オペランド461−0を出力するように動作可能である。0のデータエレメント位置だけ回転するので、CR1ユニットは、任意選択的に、より単純な連結ユニットに置換されてよい。CR2は、1のデータエレメント位置の最下位ビット位置に向けて右回転を実行し、1のデータエレメントオフセット中間オペランド461−1を出力するように動作可能である。CR3は、2のデータエレメント位置の最下位ビット位置に向けて右回転を実行し、2のデータエレメントオフセット中間オペランド461−2を出力するように動作可能である。中間オペランド461の各々は、第1のマルチプレクサ(MUX)又は他のセレクタユニット464への入力として提供されてよい。他の実施形態において、追加の及び/又は異なる数のデータエレメント位置が、任意選択的にサポートされてよい。例えば、代替的な一実施形態において、5又は9の異なるデータエレメントオフセット中間オペランドが、任意選択的に生成され、セレクタユニットに入力されてよい。また、他の実施形態において、シフトが、任意選択的に、回転の代わりに用いられてよい。命令によって示される第1のデータエレメントオフセット422−1は、セレクタユニット464に入力されてよく、入力の1つを選択するために用いられてよい。本例示的実施形態において、第1のデータエレメントオフセットは、1のデータエレメント位置である。そこで、1のデータエレメントオフセット中間オペランド461−1が、第1の選択されたオペランド465として選択及び出力されてよい。
第2のアライメントユニット467は、図示される実施形態において、第3のソースパックドデータオペランド416−1及び第4のソースパックドデータオペランド416−2を含む1つ又は複数のソースパックドデータオペランドの第2のセットを受信するように結合される。第2のアライメントユニットは、第4の連結及び回転ユニットCR4、第5の連結及び回転ユニットCR5、及び第6の連結及び回転ユニットCR6を含む。CR4は、0のデータエレメント位置の最下位ビット位置に向けて(図では左向きに示されるが)右回転を実行し、0のデータエレメントオフセット中間オペランド468−0を出力するように動作可能である。0のデータエレメント位置だけ回転するので、CR4ユニットは、任意選択的に、より単純な連結ユニットに置換されてよい。CR5は、1のデータエレメント位置の最下位ビット位置に向けて右回転を実行し、1のデータエレメントオフセット中間オペランド468−1を出力するように動作可能である。CR6は、2のデータエレメント位置の最下位ビット位置に向けて右回転を実行し、2のデータエレメントオフセット中間オペランド468−2を出力するように動作可能である。中間オペランド468の各々は、第2のマルチプレクサ(MUX)又は他のセレクタユニット469への入力として提供されてよい。他の実施形態において、追加の及び/又は異なる数のデータエレメント位置が、任意選択的にサポートされてよい。例えば、代替的な一実施形態において、5又は9の異なるデータエレメントオフセット中間オペランドが、任意選択的に生成され、セレクタユニットに入力されてよい。また、他の実施形態において、任意選択的に、回転の代わりにシフトが用いられてよい。命令によって示される第2のデータエレメントオフセット422−2は、第2のセレクタユニット469に入力されてよく、入力の1つを選択するために用いられてよい。本例示的実施形態において、第2のデータエレメントオフセットは、2のデータエレメント位置である。そこで、2のデータエレメントオフセット中間オペランド461−2が、第2の選択されたオペランド470として選択及び出力されてよい。
第1の選択されたオペランド465及び第2の選択されたオペランド470の両方は、垂直SIMD演算ユニット466(例えば、SIMD加算ユニット、SIMD乗算ユニット等)に入力されてよい。垂直SIMD演算ユニットは、第1及び第2の選択されたオペランドの対応データエレメントに対して、垂直SIMD演算オペレーションを実行するように動作可能であってよい。例えば、パック追加、乗算、平均、除算、又は本明細書において説明される他のオペレーションのような、前述されたタイプのオペレーションのいずれも、好適である。垂直SIMD演算ユニットは、結果パックドデータオペランド420を出力及び格納してよい。図示される例示的実施形態において、第1のオフセットは1のデータエレメント位置であり、第2のオフセットは2のデータエレメント位置であるので、結果パックドデータオペランドは、A2及びB3に対して実行されたオペレーションの値を含む第1の結果データエレメント、A3及びB4に対して実行されたオペレーションの値を含む第2の結果データエレメント、A4及びB5に対して実行されたオペレーションの値を含む第3の結果データエレメント、ならびにA5及びB6に対して実行されたオペレーションの値を含む第4の結果データエレメントを有してよい。
これは、好適な実行ユニットの1つの説明例に過ぎない。他の実施形態において、第1及び第2のアライメントユニットは、複数のシフトオペレーション及び選択オペレーションに代えて、代わりに、対応オフセットに基づいて、シフト−マージタイプのオペレーションを実行してよい。さらに他の実施形態において、単一の可変シフト又は回転ユニットは、複数の可能性を形成してこれらの1つを選択する代わりに、オフセットに基づいて、オペランドをシフト又は回転させてよい。さらに、他の実施形態において、単一のデータエレメントオフセットのみが用いられる場合、第1及び第2のアライメントユニットのうちの1つだけが、任意選択的に含まれてよい。
図5は、パックドデータアライメントプラス演算命令502の第2の例示的実施形態に応答して実行され得るパックドデータアライメントプラス演算オペレーション548の第2の例示的実施形態を示すブロック図である。図5の命令及びオペレーションは、図3の命令及びオペレーションと特定の類似性を有する。説明の妨げとなることを回避すべく、図3の命令及びオペレーションに関する、全ての任意選択的に同様な又は共通の特性、詳細、変形、及び代替を反復することなく、図5の命令及びオペレーションに関しては、異なる及び/又は追加の特性が主に説明される。しかしながら、図3の命令及びオペレーションの前述された特性、詳細、変形、及び代替は、異なる記述がない又は異なることが自明でない限り、任意選択的に、図5の命令及びオペレーションにも適用されてよいことを理解されたい。
命令502は、オペコード536、第1のソースパックドデータオペランド512を規定する第1のソース規定フィールド(SRC1)538、第2のソースパックドデータオペランド516−1を規定する第2のソース規定フィールド(SRC2)540、及び第3のソースパックドデータオペランド516−2を規定する第3のソース規定フィールド(SRC3)542を含む。本実施形態において、第1のソースパックドデータオペランド512は、図3の実施形態における2つのソースパックドデータオペランドと対照的に、単一のソースパックドデータオペランドのみの第1のセットである。第2及び第3のソースパックドデータオペランド516は、2つのソースパックドデータオペランドの第2のセットを表す。命令は、任意選択的に、結果パックドデータオペランド520が格納されるデスティネーション格納位置を規定するデスティネーション規定フィールド(DEST)546をさらに含む。これらのフィールド及びオペランドの各々は、前述された特性、詳細、変形、及び代替を有してよい。
本実施形態において、命令も、図3の実施形態における2つのデータエレメントオフセットと対照的に、単一のデータエレメントオフセットのみを示す。命令は、単一のオフセットを規定又は示す単一のオフセット規定フィールド522を有する。これは、ソースパックドデータオペランドの第2のセット(本実施形態におけるオペランド516−1、516−2)に対応し、これに適用される。データエレメントオフセット及びその規定フィールドは、前述された特性、詳細、変形、及び代替を有してよい。第1のソースパックドデータオペランドのデータエレメントをオフセット又は移動させることなく、様々な状況において、第2及び第3のソースパックドデータオペランドと第1のソースパックドデータオペランドとの間で相対的オフセットのみを実行することが有用である。単一のデータエレメントオフセットは、これを実現するために十分である。また、単一のデータエレメントオフセットのみを適用することにより、例えば、アライメントユニットの1つを除去(例えば、図4における第1のアライメントユニットを除去)するようなことが、実行ユニットの複雑性を減じる助けとなり得る。図示される例示的実施形態において、単一のオフセットは、3のデータエレメント位置のオフセットを示すが、これは、1つの説明例に過ぎない。他の実施形態において単一のオフセットは、具体的な実装に応じて、−4から4、0から4、−2から2、0から2、又は何らかの他の数のデータエレメント位置のいずれか1つであってよい。前述されたように、オフセットは、データエレメント数、ビット数、シフト量、回転量等として規定されてよい。あるいは、他の実施形態において、望ましい場合には、第2のデータエレメントオフセットが、任意選択的に用いられてよい。代替的な実施形態において、固定オフセットが、任意選択的に、オフセット規定フィールドの代わりに用いられてよく、前述されたように、オペコードに暗示されてよい。
図示される実施形態において、1つ又は複数のソースパックドデータオペランドの第1のセットは、単一の第1のソースパックドデータオペランド512(例えば、SRC1によって示される)のみを有してよく、これは、本例示的実施形態において、4つのパックドデータエレメントA1−A4を有する。第2のソースパックドデータオペランド516−1(例えば、SRC2によって示される)は、4つのパックドデータエレメントB1−B4を有し、第3のソースパックドデータオペランド516−2(例えば、SRC3によって示される)は、4つのパックドデータエレメントB5−B8を有する。図示される例示的実施形態において、第2及び第3のソースパックドデータエレメントのみがオフセットされるので、図3におけるデータエレメントA5によって示されたような、第1のソースパックドデータオペランドのオフセットに起因して消失したデータエレメントを置換又は代替するための追加のデータエレメントは必要ない。他の数のデータエレメントが、前述されたように、代わりに用いられてよい。さらに、図示される実施形態において、ソースパックドデータオペランドの第2のセットは、第2及び第3のソースパックドデータオペランドを有するが、他の実施形態において、第1のソースパックドデータオペランドより多くのデータエレメント(例えば、サポートされるオフセット量に応じて、2倍又は少なくとももう1つ)を含む単一のソースパックドデータオペランドが、任意選択的に、代わりに用いられてよい。
第1のソースパックドデータオペランド512ならびに第2及び第3のソースパックドデータオペランド516−1、516−2の第2のセットにおいて同じ相対的データエレメント位置にあるデータエレメントは、対応位置にある、及び/又は対応データエレメントである。例えば、A1及びB1が対応し、A4及びB4が対応する、等である。対照的に、ソースオペランドにおいて、A1及びB4は、非対応データエレメント位置にある、及び/又は、A1及びB4は、非対応データエレメントである。さらに、第1及び第2のソースパックドデータオペランドは、A1及びB5が対応しないように、論理的連結される又は共にあるものとみなされてよい。
パックドデータアライメントプラス演算オペレーション548の第2の実施形態は、パックドデータアライメントプラス演算命令502の第2の実施形態に応答して実行されてよい。パックドデータアライメントプラス演算命令に応答可能な実行ユニットは、結果パックドデータオペランド520を生成し、これをデスティネーション格納位置に格納するように動作可能であってよい。図示される例示的実施形態において、結果パックドデータオペランドは、4つの結果データエレメントを有するが、他の実施形態は、4つより少ない又はより多くの結果データエレメントを有してよい。いくつかの実施形態において、結果データエレメントの各々は、少なくとも、ソースパックドデータオペランドの第1のセット(例えば、単一のソースパックドデータオペランド512)におけるデータエレメント及びソースパックドデータオペランドの第2のセット(例えば、第2及び第3のソースパックドデータオペランド516−1、516−2)における非対応データエレメントのペアにより実行されたオペレーション(OP)の値を有してよい。各ペアの非対応データエレメントは、第1のソースパックドデータオペランドならびに第2及び第3のパックドデータオペランドにおいて、非対応データエレメント位置にあってよい。例えば、図示される例示的実施形態において、第1の結果データエレメントは、A1及びB4に対して実行されたオペレーション(OP)の値を有してよく、第2の結果データエレメントは、A2及びB5に対して実行されたオペレーション(OP)の値を有してよく、第3の結果データエレメントは、A3及びB6に対して実行されたオペレーション(OP)の値を有してよく、第4の結果データエレメントは、A4及びB7に対して実行されたオペレーション(OP)の値を有してよい。これは、1つの説明例に過ぎない。
前述されたように、いくつかの実施形態において、各ペアの非対応データエレメントは、ソースパックドデータオペランドにおいて、単一のデータエレメントオフセットに基づいて異なる非対応データエレメント位置にある。非対応データエレメント位置は、実行ユニットが、パックドデータアライメントプラス演算命令に応答して、かつ、パックドデータアライメントプラス演算命令の性能の制約内において、非対応データエレメントを対応データエレメント位置に配置すべく、単一のデータエレメントオフセットを第2及び第3のソースパックドデータオペランドに適用するように動作可能となるような位置であってよい。例えば、B4は、A1に対応する(例えば、同じ相対的データエレメント位置を有する)ように、単一のデータエレメントオフセット522を第2及び第3のソースパックドデータオペランドに適用(例えば、これらの論理的連結)することによって、3のデータエレメント位置だけオフセット又は移動させられてよい。実行ユニットは、前述されたように、様々な異なるタイプのオペレーション(OP)のいずれかを、アライメントされたデータエレメントに対して実行するように動作可能であってよい。いくつかの実施形態において、実行ユニットは、対応データエレメントのみに対して、「垂直」SIMD演算オペレーションを実行してよい。他の実施形態において、実行ユニットは、対応データエレメント及び非対応データエレメントの組み合わせを含む垂直及び非垂直SIMD演算オペレーションの両方の組み合わせを実行してよい。
図6は、パックドデータアライメントプラス演算命令602の第3の例示的実施形態に応答して実行され得るパックドデータアライメントプラス演算オペレーション648の第3の例示的実施形態を示すブロック図である。図6の命令及びオペレーションは、図3の命令及びオペレーションと特定の類似性を有する。説明の妨げとなることを回避すべく、図3の命令及びオペレーションに関する、全ての任意選択的に同様な又は共通の特性、詳細、変形、及び代替を反復することなく、図6の命令及びオペレーションに関しては、異なる及び/又は追加の特性が主に説明される。しかしながら、図3の命令及びオペレーションの前述された特性、詳細、変形、及び代替は、異なる記述がない又は異なることが自明でない限り、任意選択的に、図6の命令及びオペレーションにも適用されてよいことを理解されたい。
命令602は、オペコード636、第1のソースパックドデータオペランド612を規定する第1のソース規定フィールド(SRC1)638、及び第2のソースパックドデータオペランド616を規定する第2のソース規定フィールド(SRC2)640を含む。本実施形態において、第1のソースパックドデータオペランド612は、単一のソースパックドデータオペランドのみの第1のセットを表す。同様に、第2のソースパックドデータオペランド616は、単一のソースパックドデータオペランドのみの第2のセットを表す。命令は、任意選択的に、結果パックドデータオペランド620が格納されるデスティネーション格納位置を規定するデスティネーション規定フィールド(DEST)646をさらに含む。これらのフィールド及びオペランドの各々は、前述された特性、詳細、変形、及び代替を有してよい。
本実施形態において、命令は、第1のデータエレメントオフセット622−1及び第2のデータエレメントオフセット622−2をさらに示す。第1のデータエレメントオフセットは、第1のソースパックドデータオペランド612に対応し、かつ、これに適用され、第2のデータエレメントオフセットは、第2のソースパックドデータオペランド616に対応し、かつ、これに適用される。他の実施形態において、(例えば、図5と併せて説明されたように)望ましい場合には、単一のデータエレメントオフセットのみが用いられてよい。データエレメントオフセット、及びこれらの規定フィールドは、前述された特性、詳細、変形、及び代替を有してよい。図示される例示的実施形態において、第1のデータエレメントオフセットは、0のデータエレメント位置のオフセットを示し、第2のデータエレメントオフセットは、3のデータエレメント位置のオフセットを示すが、これは、1つの説明例に過ぎない。他の実施形態において、互いに独立するデータエレメントオフセットの各々は、具体的な実装に応じて、−4から4、0から4、−2から2、0から2、又は何らかの他の数のデータエレメント位置のいずれか1つであってよい(例えば、より多くのデータエレメントが存在する場合には、より大きい数のオフセットが用いられてもよい)。前述されたように、各データエレメントオフセットは、データエレメント数、ビット数、ビット又はデータエレメントのシフト量、ビットもしくはデータエレメントの回転量等として規定されてよい。
図示される例示的実施形態において、第1のソースパックドデータオペランド612(例えば、SRC1によって示される)は、8つのパックドデータエレメントA1−A8を有する。第2のソースパックドデータオペランド616(例えば、SRC2によって示される)は、8つのパックドデータエレメントB1−B8を有する。他の実施形態において、他の数のデータエレメントが、任意選択的に、代わりに用いられてよい。第1のソースパックドデータオペランド612及び第2のソースパックドデータオペランド616において同じ相対的データエレメント位置にあるデータエレメントは、対応位置にある、及び/又は対応データエレメントである。例えば、A1及びB1が対応し、A7及びB7が対応する、等である。対照的に、ソースオペランドにおいて、A1及びB4は、非対応データエレメント位置にある、及び/又は、A1及びB4は、非対応データエレメントである。図示される実施形態において、ソースオペランドの各々は、結果パックドデータオペランドより多くのデータエレメント(例えば、この例において、2倍のデータエレメント)を有する。
パックドデータアライメントプラス演算オペレーション648の第3の実施形態は、パックドデータアライメントプラス演算命令602の第3の実施形態に応答して実行されてよい。パックドデータアライメントプラス演算命令に応答可能な実行ユニットは、結果パックドデータオペランド620を生成し、これをデスティネーション格納位置に格納するように動作可能であってよい。図示される例示的実施形態において、結果パックドデータオペランドは、4つの結果データエレメントを有するが、他の実施形態は、4つより少ない又はより多くの結果データエレメントを有してよい。いくつかの実施形態において、結果データエレメントの各々は、少なくとも、第1のソースパックドデータオペランド612におけるデータエレメント及び第2のソースパックドデータオペランド616における非対応データエレメントのペアにより実行されたオペレーション(OP)の値を有してよい。各ペアの非対応データエレメントは、第1及び第2のソースパックドデータオペランドにおいて、非対応データエレメント位置にあってよい。例えば、図示される例示的実施形態において、第1の結果データエレメントは、A1及びB4に対して実行されたオペレーション(OP)の値を有してよく、第2の結果データエレメントは、A2及びB5に対して実行されたオペレーション(OP)の値を有してよく、第3の結果データエレメントは、A3及びB6に対して実行されたオペレーション(OP)の値を有してよく、第4の結果データエレメントは、A4及びB7に対して実行されたオペレーション(OP)の値を有してよい。これは、1つの説明例に過ぎない。他の説明例において、第1のオフセットは、代わりに、1、3(例えば、第2のオフセットと同じ)、4、10等であってよい。
前述されたように、いくつかの実施形態において、各ペアの非対応データエレメントは、第1及び第2のソースパックドデータオペランドにおいて、非対応データエレメント位置にあってよく、ここで、非対応位置は、第1及び第2のデータエレメントオフセットの適用に基づいて異なる。非対応データエレメント位置は、実行ユニットが、非対応データエレメントに対応関係を持たせるべく、第1及び第2のデータエレメントオフセットを第1及び第2のソースパックドデータオペランドにそれぞれ適用するように動作可能となるような位置であってよい。例えば、B4は、A1に対応する(例えば、同じ相対的データエレメント位置を有する)ように、3のデータエレメント位置だけオフセット又は移動させられてよい。実行ユニットは、前述されたように、様々な異なるタイプのオペレーション(OP)のいずれかを、アライメントされたデータエレメントに対して実行するように動作可能であってよい。いくつかの実施形態において、実行ユニットは、対応データエレメントのみに対して、「垂直」SIMD演算オペレーションを実行してよい。他の実施形態において、実行ユニットは、対応データエレメント及び非対応データエレメントの組み合わせを含む垂直及び非垂直SIMD演算オペレーションの両方の組み合わせを実行してよい。
いくつかの実施形態において、本明細書において開示される命令は、画像処理における画素フィルタリングにおいて用いられてよいが、本発明の範囲は、このように限定されるものではない。フィルタリングにおいて、フィルタリングされた結果の画素が、所与の入力画素及び所与の入力画素に近接する1つ又は複数の画素から算出されることは、非常に一般的である。例として、画素の列をなす所与の画素は、所与の画素の両側において隣接する近接画素と共に(例えば、標準化畳み込み1、2、1係数フィルタにより)、フィルタリングされてよい。従来、SIMDベクトルプロセッサにおけるフィルタの実装は、データの反復アライメントを用いて実行され、毎回、SIMDオペレーションがこれに続く。画像化及びビジョンにおいて、このようなフィルタが、サイズ3x3、5x5、7x7等の2次元(2D)形式で多用されており、(本明細書において開示される命令が用いられない限り)これらはそれぞれ、9、25、及び49のアライメントオペレーションを含み得るものであり、これらの各々は、別個のパックドデータアライメント命令である可能性がある。特に、埋め込みデジタル信号プロセッサ、又は他の概してリソースが制約された環境において実装される場合に、追加のアライメントオペレーションを実行するサイクルコスト、及び/又はアライメント命令の中間結果を格納するために必要とされる追加のレジスタ空間は、全体的な効率性に大きく影響し得る。
上述された実施形態の多くにおいて、1つ又は複数のソースパックドデータオペレーションの異なるセットが図示及び説明されている(例えば、図1におけるセット112及び116)。いくつかの用途及び実装において、(例えば、1つ又は複数のソースパックドデータオペランドの1つの単一のセットにおける)同じデータが、オペレーションのために用いられてよい。これを実現する1つの態様は、同じレジスタ又は他の格納位置を、1つ又は複数のソースパックドデータオペランドの両方のセットに対して規定することである。例えば、命令は、セット112に対してレジスタR1及びR2のペアを規定してよく、セット116に対しても、レジスタR1及びR2を規定してよい。あるいは、1つ又は複数のパックドデータオペランドの単一のセット(例えば、セット112)は、命令によって規定されてよく(例えば、レジスタR1及びR2が規定されてよい)、ソースパックドデータオペランドの第1及び第2のセット112、116の両方に対してソースパックドデータオペランド112の単一のセットを用いることが、命令(例えば、そのオペコード)によって暗示又は黙示されてよい。命令は、追加のソース規定フィールド(例えば、SRC2、SRC3)を省略してよい。いくつかの実施形態において、全てのソースオペランドのデータエレメントは、任意選択的に、全て、画像の画素の同じ列の画素であってよい。例えば、画素をこれらの近接画素と共に平均化(例えば、フィルタ係数1,2,1による画素の標準化畳み込みを実装)するために、画像処理における画素フィルタリングにおいて、及び様々な他の適用において、各コピー又は複製に異なるオフセットを適用して、ソースパックドデータオペランドの同じセットの異なるコピー又は複製を複数回オフセットする(例えば、フィルタ係数1,2,1による画素の標準化畳み込みの場合、3つの複製に0、1、及び2のデータエレメントオフセットを適用する)ことを可能とすることが、しばしば有用である。従って、上記の開示された事項に対する代替的な実施形態は、1つ又は複数のソースパックドデータオペランドの単一のセット(例えば、112)のみを示し、(例えば、明示されたセット116の代わりに)当該示されたセットのコピー又は複製を暗示的又は既定的に再利用してよい。
図7は、本発明の実施形態を実装するために好適なプロセッサ700の詳細な例示的実施形態のブロック図である。プロセッサは、パックドデータアライメントプラス演算命令の実施形態を実行可能な少なくとも1つのコア780を含む。コアは、プログラムフローにおける分岐を予測する分岐予測ユニット781を含む。分岐予測ユニットは、命令プリフェッチユニット782に結合される。命令プリフェッチユニットは、パックドデータアライメントプラス演算命令を含む命令を、(例えば、メモリユニット790を通して)メモリからプリフェッチ又は受信してよい。レベル1(L1)命令キャッシュ783が、命令プリフェッチユニットに結合される。L1命令キャッシュは、パックドデータアライメントプラス演算命令を含む命令をキャッシュ又は格納してよい。プロセッサは、命令のためのデータエレメント及び/又はオペランドを含むデータをキャッシュ又は格納するL1データキャッシュ791をさらに含む。プロセッサは、任意選択的に、レベル2(L2)キャッシュ792をさらに含む。L2キャッシュは、コア専用であってよく、又は、コア及び1つ又は複数の他の任意選択的なコア(不図示)によって共有されてよい。L2キャッシュは、パックドデータアライメントプラス演算命令を含むデータ及び命令を格納してよい。命令フェッチユニット784は、L1命令キャッシュ、L2キャッシュ、及びデコードユニット704に結合される。命令フェッチユニットは、パックドデータアライメントプラス演算命令を含む命令を、(例えば、L1命令キャッシュ又はL2キャッシュから)フェッチ又は受信してよく、命令をデコードユニットに提供してよい。デコードユニットは、本明細書の他の箇所で説明されたように、パックドデータアライメントプラス演算命令を含む命令をデコードしてよい。
プロセッサは、1つ又は複数のレジスタファイルユニット788をさらに含む。レジスタファイルユニットは、例えば、パックドデータレジスタ、汎用レジスタ、ステータスもしくはフラグレジスタ、制御もしくは構成レジスタ等のような、様々な異なるタイプのレジスタを含んでよい。コアがアウトオブオーダ(OOO)実行を任意選択的にサポートする実施形態において、コアは、任意選択的に、レジスタファイルユニットに結合されたレジスタリネーミング/アロケータユニット785をさらに含んでよい。これは、リソースを割り当て、レジスタ(例えば、パックドデータアライメントプラス演算命令に関連付けられたパックドデータレジスタ)に対してレジスタリネーミングを実行する。さらに、OOO実行のために、コアは、任意選択的に、デコードユニット、リネーミング/アロケータユニット、及び1つ又は複数の実行ユニット706、789に結合された1つ又は複数のスケジューラユニット786を含んでよい。スケジューラユニットは、パックドデータアライメントプラス演算命令からデコードされた1つ又は複数のオペレーションを含むデコードされた命令に関連付けられた1つ又は複数のオペレーションを、実行ユニットにおける実行のためにスケジューリングしてよい。コアは、任意選択的に、例えば、整数実行ユニット、浮動小数点実行ユニット、ベクトル実行ユニット、1つ又は複数のメモリアクセスユニット789等のような、複数の異なるタイプの実行ユニットを有してよい。OOO実行のために、コアは、任意選択的に、実行ユニット、レジスタファイルユニット、及びリネーミング/アロケータユニットに結合されたリタイアメント又はコミットユニット787を含んでよい。リタイアメント又はコミットユニットは、命令をリタイア又はコミットするように動作可能であってよい。
これは、好適なプロセッサの1つの説明例に過ぎないことを理解されたい。代替的な実施形態において、プロセッサは、より少ない又はより多くのコンポーネントを含んでよい。任意選択的に含まれ得る他のコンポーネントの例は、1つ又は複数の命令及び/又はデータトランスレーションルックアサイドバッファ(TLB)、1つ又は複数のリオーダバッファ(ROB)、予約ステーション、アドレス生成ユニット、デバッグユニット、性能モニタユニット、電力管理ユニットである。さらに、プロセッサは、任意選択的に、(例えば、少なくとも2つ、少なくとも4つ、少なくとも8つ、少なくとも30等の)マルチコアを有してよい。いくつかの場合には、コアの全ては、同じコンポーネントを有し、コア780と同じ命令セットをサポートしてよい。あるいは、コアの少なくともいくつかは、異なるコンポーネントを有してよく、及び/又は、異なる命令セットをサポートしてよい。
[例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ]
プロセッサコアは、異なる態様で、異なる目的のために、異なるプロセッサにおいて、実装されてよい。例えば、このようなコアの実装は、1)汎用コンピューティング用の汎用インオーダコア、2)汎用コンピューティング用の高性能汎用アウトオブオーダコア、3)主にグラフィクス及び/又は科学的(スループット)コンピューティング用の特定用途向けコアを含んでよい。異なるプロセッサの実装は、1)汎用コンピューティング用の1つ又は複数の汎用インオーダコア、及び/又は汎用コンピューティング用の1つ又は複数の汎用アウトオブオーダコアを含むCPU、ならびに2)主にグラフィクス及び/又は科学的(スループット)用の1つ又は複数の特定用途向けコアを含むコプロセッサを含んでよい。このような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、これは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別個のダイ上にあるコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、このようなコプロセッサは、統合グラフィクス及び/又は科学的(スループット)ロジックのような特定用途向けロジック、又は特定用途向けコアと称される場合がある)、及び4)同じダイ上に、説明されたCPU(アプリケーションコア又はアプリケーションプロセッサと称される場合がある)、上述のコプロセッサ及び追加の機能を含み得るシステムオンチップを含んでよい。例示的なコアアーキテクチャが、次に説明され、続いて、例示的なプロセッサ及びコンピュータアーキテクチャが説明される。
[例示的なコアアーキテクチャ]
インオーダ及びアウトオブオーダコアのブロック図
図8Aは、本発明の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図8Bは、本発明の実施形態に係る、プロセッサに含まれるインオーダアーキテクチャコア及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方の例示的な実施形態を示すブロック図である。図8A−Bにおける実線のボックスは、インオーダパイプライン及びインオーダコアを示し、任意選択的に追加された破線のボックスは、レジスタリネーミング、アウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであることを前提に、アウトオブオーダ態様が説明される。
図8Aにおいて、プロセッサパイプライン800は、フェッチステージ802、長さデコードステージ804、デコードステージ806、割り当てステージ808、リネーミングステージ810、スケジューリング(ディスパッチ又は発行としても知られる)ステージ812、レジスタ読み出し/メモリ読み出しステージ814、実行ステージ816、ライトバック/メモリ書き込みステージ818、例外処理ステージ822、及びコミットステージ824を含む。
図8Bは、実行エンジンユニット850に結合されたフロントエンドユニット830を含み、この両方がメモリユニット870に結合されたプロセッサコア890を示す。コア890は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、又はハイブリッドもしくは代替的なタイプのコアであってよい。さらに他の選択肢として、コア890は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィクス処理ユニット(GPGPU)コア、グラフィクスコア等のような特定用途向けコアであってよい。
フロントエンドユニット830は、命令キャッシュユニット834に結合された分岐予測ユニット832を含み、命令キャッシュユニット834は命令トランスレーションルックアサイドバッファ(TLB)836に結合され、命令トランスレーションルックアサイドバッファ836は命令フェッチユニット838に結合され、命令フェッチユニット838はデコードユニット840に結合される。デコードユニット840(又はデコーダ)は、命令をデコードし、元の命令からデコードされ、これらを反映し、又はこれらから導出された1つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を、出力として生成してよい。デコードユニット840は、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等を含む。一実施形態において、コア890は、(例えば、デコードユニット840において、又はフロントエンドユニット830内に)特定のマクロ命令に対するマイクロコードを格納するマイクロコードROM又は他の媒体を含む。デコードユニット840は、実行エンジンユニット850におけるリネーミング/アロケータユニット852に結合される。
実行エンジンユニット850は、リタイアメントユニット854に結合されたリネーミング/アロケータユニット852、及び1つ又は複数のスケジューラユニット856のセットを含む。スケジューラユニット856は、予約ステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット856は、物理レジスタファイルユニット858に結合される。物理レジスタファイルユニット858の各々は、1つ又は複数の物理レジスタファイルを表す。これらの異なる1つ1つは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、次に実行される命令のアドレスである命令ポインタ)等のような、1つ又は複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット858は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供してよい。物理レジスタファイルユニット858は、リタイアメントユニット854とオーバラップし、(例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いて、レジスタのレジスタマップ及びプール等を用いて、等)レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な態様を示す。リタイアメントユニット854及び物理レジスタファイルユニット858は、実行クラスタ860に結合される。実行クラスタ860は、1つ又は複数の実行ユニット862のセット及び1つ又は複数のメモリアクセスユニット864のセットを含む。実行ユニット862は、様々なオペレーション(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行してよい。いくつかの実施形態は、特定の機能又は機能のセット専用の多数の実行ユニットを含んでよいが、他の実施形態は、1つだけの実行ユニット、又は全ての機能を全てが実行する複数の実行ユニットを含んでよい。スケジューラユニット856、物理レジスタファイルユニット858及び実行クラスタ860は、複数として示される場合がある。なぜなら、特定の実施形態は、特定のタイプのデータ/オペレーションに対して、別個のパイプラインを形成するからである(例えば、各々がこれら自身のスケジューラユニット、物理レジスタファイルユニット及び/又は実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又はメモリアクセスパイプラインであり、別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット864を有する特定の実施形態が実装される)。別個のパイプラインが用いられる場合に、これらのパイプラインの1つ又は複数は、アウトオブオーダ発行/実行であってよく、残りはインオーダであってよいことも理解されたい。
メモリアクセスユニット864のセットは、メモリユニット870に結合される。メモリユニット870は、レベル2(L2)キャッシュユニット876に結合されたデータキャッシュユニット874に結合された、データTLBユニット872を含む。例示的な一実施形態において、メモリアクセスユニット864は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、これらの各々は、メモリユニット870におけるデータTLBユニット872に結合される。命令キャッシュユニット834は、メモリユニット870のレベル2(L2)キャッシュユニット876に、さらに結合される。L2キャッシュユニット876は、1つ又は複数の他のレベルのキャッシュに結合され、最終的に、メインメモリに結合される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下の通りパイプライン800を実装してよい。1)命令フェッチ838が、フェッチ及び長さデコードステージ802及び804を実行する、2)デコードユニット840が、デコードステージ806を実行する、3)リネーミング/アロケータユニット852が、割り当てステージ808及びリネーミングステージ810を実行する、4)スケジューラユニット856が、スケジューリングステージ812を実行する、5)物理レジスタファイルユニット858及びメモリユニット870が、レジスタ読み出し/メモリ読み出しステージ814を実行し、実行クラスタ860が、実行ステージ816を実行する、6)メモリユニット870及び物理レジスタファイルユニット858が、ライトバック/メモリ書き込みステージ818を実行する、7)様々なユニットが、例外処理ステージ822に関与してよく、8)リタイアメントユニット854及び物理レジスタファイルユニット858が、コミットステージ824を実行する。
コア890は、本明細書において説明される命令を含む1つ又は複数の命令セット(例えば、(より新たなバージョンを伴う、いくつかの拡張が追加された)x86命令セット、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM Holdingsの(NEONのような任意選択的な追加の拡張を有する)ARM命令セット)をサポートしてよい。一実施形態において、コア890は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、これにより、多くのマルチメディアアプリケーションによって用いられるオペレーションが、パックドデータを用いて実行されることが可能となる。
コアは、マルチスレッディング(オペレーション又はスレッドの2つ又はそれより多くの並列なセットを実行すること)をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング(単一の物理コアが、物理コアが同時にマルチスレッディングするスレッドの各々に対して論理コアを提供する)、又はこれらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディングテクノロジにおけるもののような、時分割フェッチ及びデコードならびにその後の同時マルチスレッディング)を含む様々な態様で、これを実行してよいことを理解されたい。
レジスタリネーミングが、アウトオブオーダ実行に関連して説明されるが、レジスタリネーミングは、インオーダアーキテクチャにおいて用いられてよいことを理解されたい。プロセッサの図示される実施形態は、別個の命令ならびにデータキャッシュユニット834/874及び共有L2キャッシュユニット876をさらに含むが、代替的な実施形態は、命令及びデータの両方のための、例えば、レベル1(L1)内部キャッシュのような単一の内部キャッシュ、又は複数のレベルの内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュと、コア及び/又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。あるいは、キャッシュの全ては、コア及び/又はプロセッサの外部にあってよい。
[具体的な例示的インオーダコアアーキテクチャ]
図9A−Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。ここで、コアは、チップにおけるいくつかの論理ブロック(同じタイプ及び/又は異なるタイプの他のコアを含む)の中の1つであってよい。論理ブロックは、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を通して、用途に応じて、いくつかの固定機能ロジック、メモリI/Oインタフェース、及び他の必要なI/Oロジックとの通信を行う。
図9Aは、本発明の実施形態に係るシングルプロセッサコアのブロック図であり、そのオンダイ相互接続ネットワーク902への接続、及びそのレベル2(L2)キャッシュ904のローカルサブセットと共に示す。一実施形態において、命令デコーダ900は、パックドデータ命令セット拡張を含むx86命令セットをサポートする。L1キャッシュ906は、スカラ及びベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態において、(設計を単純化するために)スカラユニット908及びベクトルユニット910は、別個のレジスタセット(それぞれ、スカラレジスタ1912及びベクトルレジスタ914)を用い、これらの間で転送されたデータは、メモリに書き込まれ、次に、レベル1(L1)キャッシュ906からリードバックされるが、本発明の代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用いる、又は、書き込み及びリードバックされることなく、データが2つのレジスタファイル間で転送されることを可能とする通信経路を含む)を用いてよい。
L2キャッシュのローカルサブセット904は、プロセッサコア毎に1つの別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュのローカルサブセット904へのそれ自身の直接アクセス経路を有する。プロセッサコアによって読み出されたデータは、そのL2キャッシュサブセット904に格納され、他のプロセッサコアによるこれら自身のローカルL2キャッシュサブセットへのアクセスと並列に、迅速なアクセスが可能である。プロセッサコアによって書き込まれたデータは、必要に応じて、それ自身のL2キャッシュサブセット904に格納され、他のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを確保する。リングネットワークは、双方向であり、プロセッサコア、L2キャッシュ及び他の論理ブロックのようなエージェントが、チップ内で互いに通信を行うことを可能とする。各リングデータ経路は、一方向あたり1012ビット幅である。
図9Bは、本発明の実施形態に係る図9Aにおけるプロセッサコアの一部の拡大図である。図9Bは、L1キャッシュ906のL1データキャッシュ906A部分、ならびにベクトルユニット910及びベクトルレジスタ914に関するさらなる詳細を含む。具体的には、ベクトルユニット910は、整数、単精度浮動小数、及び倍精度浮動小数命令のうちの1つ又は複数を実行する、16幅ベクトル処理ユニット(VPU)(16幅ALU928参照)である。VPUは、スウィズルユニット920によるレジスタ入力のスウィズル、数値変換ユニット922A−Bによる数値変換、及び複製ユニット924によるメモリ入力に対する複製をサポートする。書き込みマスクレジスタ926は、結果的なベクトル書き込みの叙述を可能とする。
[統合メモリコントローラ及びグラフィクスを有するプロセッサ]
図10は、本発明の実施形態に係る1つより多くのコア、統合メモリコントローラ、及び統合グラフィクスを有し得るプロセッサ1000のブロック図である。図10における実線のボックスは、シングルコア1002A、システムエージェント1010、1つ又は複数のバスコントローラユニット1016のセットを有するプロセッサ1000を示し、任意選択的に追加された破線のボックスは、マルチコア1002A−N、システムエージェントユニット1010における1つ又は複数の統合メモリコントローラユニット1014のセット、及び特定用途向けロジック1008を有する代替的なプロセッサ1000を示す。
そこで、プロセッサ1000の異なる実装は、1)(1つ又は複数のコアを含み得る)統合グラフィクス及び/又は科学的(スループット)ロジックである特定用途向けロジック1008、及び1つ又は複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら2つの組み合わせ)であるコア1002A−Nを有するCPU、2)主にグラフィクス及び/又は科学的(スループット)向けの多数の特定用途向けコアであるコア1002A−Nを有するコプロセッサ、及び3)多数の汎用インオーダコアであるコア1002A−Nを有するコプロセッサを含んでよい。そこで、プロセッサ1000は、汎用プロセッサ、コプロセッサ、又は例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィクス処理ユニット)、高スループット多集積コア(MIC)コプロセッサ(30又はそれより多くのコアを含む)、埋め込みプロセッサ等のような特定用途向けプロセッサであってよい。プロセッサは、1つ又は複数のチップ上に実装されてよい。プロセッサ1000は、例えば、BiCMOS、CMOS、又はNMOSのような多数の処理技術のいずれかを用いて、1つ又は複数の基板の一部であってよい、及び/又は、これらの上に実装されてよい。
メモリ階層は、コア内における1つ又は複数のレベルのキャッシュ、1つ又は複数の共有キャッシュユニット1006のセット、及び統合メモリコントローラユニット1014のセットに結合された外部メモリ(不図示)を含む。共有キャッシュユニット1006のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュ等のような1つ又は複数の中レベルキャッシュ、ラストレベルキャッシュ(LLC)、及び/又はこれらの組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット1012が、統合グラフィクススロジック1008、共有キャッシュユニット1006のセット、及びシステムエージェントユニット1010/統合メモリコントローラユニット1014を相互接続するが、代替的な実施形態は、このようなユニットを相互接続する任意の数の周知技術を用いてよい。一実施形態において、1つ又は複数のキャッシュユニット1006とコア1002−A−Nとの間で、コヒーレンシが維持される。
いくつかの実施形態において、コア1002A−Nの1つ又は複数は、マルチスレッディングが可能である。システムエージェント1010は、コア1002A−Nを調整及び動作させるこれらのコンポーネントを含む。システムエージェントユニット1010は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを含んでよい。PCUは、コア1002A−N及び統合グラフィクススロジック1008の電力状態を調整するために必要とされるロジック及びコンポーネントであってよい、又はこれらを含んでよい。ディスプレイユニットは、1つ又は複数の外部接続ディスプレイを駆動させるためのものである。
コア1002A−Nは、アーキテクチャ命令セットの観点から、ホモジニアス又はヘテロジニアスであってよい。すなわち、コア1002A−Nのうち2つ又はそれより多くは、同じ命令セットを実行可能であってよいが、他のコアは、当該命令セット又は異なる命令セットのサブセットのみを実行可能であってよい。
[例示的なコンピュータアーキテクチャ]
図11−21は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイス用の、当技術分野において公知な他のシステム設計及び構成も、好適である。概して、本明細書において開示されるプロセッサ及び/又は他の実行ロジックを組み込み可能な多種多様なシステム又は電子デバイスが、概して好適である。
ここで図11を参照すると、本発明の一実施形態に係るシステム1100のブロック図が示される。システム1100は、コントローラハブ1120に結合された1つ又は複数のプロセッサ1110、1115を含んでよい。一実施形態において、コントローラハブ1120は、グラフィクスメモリコントローラハブ(GMCH)1190及び入力/出力ハブ(IOH)1150(これらは、別個のチップ上にあってよい)を含み、GMCH1190は、メモリ1140及びコプロセッサ1145が結合されたメモリ及びグラフィクスコントローラを含み、IOH1150は、入力/出力(I/O)デバイス1160をGMCH1190に結合する。あるいは、メモリ及びグラフィクスコントローラの一方又は両方は、(本明細書において説明されたように)プロセッサ内で統合され、メモリ1140及びコプロセッサ1145は、プロセッサ1110及び単一のチップにおいてIOH1150を有するコントローラハブ1120に直接結合される。
追加のプロセッサ1115の任意選択的な性質は、図11において、破線で示される。各プロセッサ1110、1115は、本明細書において説明される処理コアの1つ又は複数を含んでよく、プロセッサ1000の何らかのバージョンであってよい。
メモリ1140は、例えば、動的ランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)又はこれら2つの組み合わせであってよい。少なくとも1つの実施形態に関して、コントローラハブ1120は、フロントサイドバス(FSB)のようなマルチドロップバス、QuickPath相互接続(QPI)のようなポイントツーポイントインタフェース、又は同様の接続1195を介して、プロセッサ1110、1115との通信を行う。
一実施形態において、コプロセッサ1145は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、埋め込みプロセッサ等のような特定用途向けプロセッサである。一実施形態において、コントローラハブ1120は、統合グラフィクスアクセラレータを含んでよい。
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性等を含む広範囲な利益基準の観点から、物理リソース1110、1115間には様々な相違が存在し得る。
一実施形態において、プロセッサ1110は、一般的なタイプのデータ処理オペレーションを制御する命令を実行する。命令内に、コプロセッサ命令が埋め込まれてよい。プロセッサ1110は、これらのコプロセッサ命令を、取り付けられたコプロセッサ1145によって実行されるべきタイプのものであると認識する。従って、プロセッサ1110は、コプロセッサバス又は他の相互接続上において、これらのコプロセッサ命令(又はコプロセッサ命令を表す制御信号)を、コプロセッサ1145に発行する。コプロセッサ1145は、受信されたコプロセッサ命令を受理及び実行する。
ここで図12を参照すると、本発明の実施形態に係る第1のより具体的な例示的システム1200のブロック図が示される。図12に示されるように、マルチプロセッサシステム1200は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1250を介して結合される第1のプロセッサ1270及び第2のプロセッサ1280を含む。プロセッサ1270及び1280の各々は、プロセッサ1000の何らかのバージョンであってよい。本発明の一実施形態において、プロセッサ1270及び1280は、それぞれ、プロセッサ1110及び1115であり、コプロセッサ1238は、コプロセッサ1145である。他の実施形態において、プロセッサ1270及び1280は、それぞれ、プロセッサ1110及びコプロセッサ1145である。
プロセッサ1270及び1280は、それぞれ、統合メモリコントローラ(IMC)ユニット1272及び1282を含むものとして示される。プロセッサ1270は、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース1276及び1278をさらに含み、同様に、第2のプロセッサ1280は、P−Pインタフェース1286及び1288を含む。プロセッサ1270、1280は、P−Pインタフェース回路1278、1288を用いて、ポイントツーポイント(P−P)インタフェース1250を介して情報を交換してよい。図12に示されるように、IMC1272及び1282は、プロセッサをそれぞれのメモリ、すなわち、メモリ1232及びメモリ1234に結合する。これらは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
プロセッサ1270、1280は、各々、ポイントツーポイントインタフェース回路1276、1294、1286、1298を用いて、個々のP−Pインタフェース1252、1254を介してチップセット1290と情報を交換してよい。チップセット1290は、任意選択的に、高性能インタフェース1239を介して、コプロセッサ1238と情報を交換してよい。一実施形態において、コプロセッサ1238は、例えば、高スループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、埋め込みプロセッサ等のような特定用途向けプロセッサである。
共有キャッシュ(不図示)は、いずれかのプロセッサ内、又は両方のプロセッサの外部に含まれてよく、プロセッサが低電力モードに置かれた場合に、いずれか又は両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、P−P相互接続を介して、さらにプロセッサに接続されてよい。
チップセット1290は、インタフェース1296を介して第1のバス1216に結合されてよい。一実施形態において、第1のバス1216は、ペリフェラルコンポーネント相互接続(PCI)バス、又はPCIエクスプレスバスもしくは他の第3世代I/O相互接続バスのようなバスであってよいが、本発明の範囲は、このように限定されるものではない。
図12に示されるように、様々なI/Oデバイス1214は、第1のバス1216を第2のバス1220に結合するバスブリッジ1218と共に、第1のバス1216に結合されてよい。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィクスアクセラレータ又はデジタル信号処理(DSP)ユニットのような)、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサのような1つ又は複数の追加のプロセッサ1215が、第1のバス1216に結合される。一実施形態において、第2のバス1220は、ローピンカウント(LPC)バスであってよい。一実施形態において、例えば、キーボード及び/又はマウス1222、通信デバイス1227、ならびに命令/コード及びデータ1230を含み得るディスクドライブ又は他の大容量ストレージデバイスのようなストレージユニット1228を含む様々なデバイスが、第2のバス1220に結合されてよい。さらに、オーディオI/O1224が、第2のバス1220に結合されてよい。他のアーキテクチャが可能であることに留意されたい。例えば、図12のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のこのようなアーキテクチャを実装してよい。
ここで図13を参照すると、本発明の実施形態に係る第2のより具体的な例示的システム1300のブロック図が示される。図12及び13における同様の要素は、同様の参照番号を付され、図13の他の態様の妨げとなることを回避するために、図12の特定の態様が、図13から省略されている。
図13は、プロセッサ1270、1280が統合メモリ及びI/O制御ロジック(「CL」)1272及び1282をそれぞれ含んでよいことを示す。そこで、CL1272、1282は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図13は、メモリ1232、1234がCL1272、1282に結合されることのみならず、I/Oデバイス1314もが制御ロジック1272、1282に結合されることをも示す。レガシI/Oデバイス1315は、チップセット1290に結合される。
ここで図14を参照すると、本発明の実施形態に係るSoC1400のブロック図が示される。図10における同様の要素は、同様の参照番号が付される。また、破線のボックスは、より進化したSoCにおける任意選択的な機能である。図14において、相互接続ユニット1402は、1つ又は複数のコア132A−Nのセット及び共有キャッシュユニット1006を含むアプリケーションプロセッサ1410と、システムエージェントユニット1010と、バスコントローラユニット1016と、統合メモリコントローラユニット1014と、統合グラフィクススロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得る1つ又は複数のコプロセッサ1420セットと、静的ランダムアクセスメモリ(SRAM)ユニット1430と、ダイレクトメモリアクセス(DMA)ユニット1432と、1つ又は複数の外部ディスプレイに結合するためのディスプレイユニット1440と、に結合される。一実施形態において、コプロセッサ1420は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、埋め込みプロセッサ等のような特定用途向けプロセッサを含む。
本明細書において開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はこのような実装アプローチの組み合わせで実装されてよい。本発明の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性及び不揮発性メモリ及び/又はストレージ要素を含む)、少なくとも1つの入力デバイス、ならびに少なくとも1つの出力デバイスを備えるプログラマブルシステムにおいて実行されるコンピュータプログラム又はプログラムコードとして実装されてよい。
図12に示されるコード1230のようなプログラムコードは、本明細書において説明される機能を実行し、出力情報を生成する入力命令に適用されてよい。出力情報は、1つ又は複数の出力デバイスに、公知の様式で適用されてよい。本願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、又はマイクロプロセッサのようなプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムとの通信を行うために、高レベルの手続き型又はオブジェクト指向のプログラミング言語で実装されてよい。プログラムコードは、望ましい場合には、アセンブリ又は機械語で実装されてもよい。実際に、本明細書において説明されるメカニズムは、いずれかの特定のプログラミング言語に、その範囲において限定されるものではない。いずれにせよ、言語は、コンパイル型又は解釈型言語であってよい。
少なくとも1つの実施形態の1つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な命令によって実装されてよい。これは、機械によって読み出された場合に、本明細書において説明される技術を実行するロジックを、機械に製造させる。「IPコア」として知られるこのような表現は、有形の機械可読媒体に格納され、ロジック又はプロセッサを実際に製造する製造機械にロードされるべく、様々な顧客又は製造施設に供給されてよい。
このような機械可読記憶媒体は、ハードディスク、フロッピ(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、及び光磁気ディスクを含む任意の他のタイプのディスクのような記憶媒体、リードオンリメモリ(ROM)、動的ランダムアクセスメモリ(DRAM)、静的ランダムアクセスメモリメモリ(SRAM)のようなランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、及び相変化メモリ(PCM)のような半導体デバイス、磁気もしくは光カード、又は電子的命令の格納に好適な任意の他のタイプの媒体を含む、機械又はデバイスにより製造又は形成される、非一時的で有形の構成の物品を含んでよいが、これらに限定されるものではない。
従って、本発明の実施形態は、有形の非一時的機械可読媒体をさらに含む。これは、命令を含み、又は、本明細書において説明される構造、回路、装置、プロセッサ及び/又はシステム機能を定義するハードウェア記述言語(HDL)のような設計データを含む。このような実施形態は、プログラム製品と称されてもよい。
エミュレーション(バイナリトランスレーション、コード、モーフィング等を含む) いくつかの場合には、命令コンバータは、命令をソース命令セットからターゲット命令セットに変換するために用いられてよい。例えば、命令コンバータは、命令を、コアによって処理される1つ又は複数の他の命令に(例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて)トランスレート、モーフィング、エミュレート、又は変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令コンバータは、オンプロセッサ、オフプロセッサ、又は一部がオンプロセッサで一部がオフプロセッサであってよい。
図15は、本発明の実施形態に係るソース命令セットにおけるバイナリ命令を、ターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの利用を対比するブロック図である。図示される実施形態において、命令コンバータは、ソフトウェア命令コンバータであるが、あるいは、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてよい。図15は、少なくとも1つのx86命令セットコアを有するプロセッサ1516によってネイティブで実行可能なx86バイナリコード1506を生成するために、高水準言語1502のプログラムが、x86コンパイラ1504を用いてコンパイルされてよいことを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1516は、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同じ結果を実現するために、(1)インテル(登録商標)x86命令セットコアの命令セットの大部分、又は(2)少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサ上で動作することをターゲットとするアプリケーション又は他のソフトウェアのオブジェクトコードバージョンを、互換的に実行又は処理することによって、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同じ機能を実行可能な任意のプロセッサを表す。x86コンパイラ1504は、追加のリンク処理を用いて、又は用いることなく、少なくとも1つのx86命令セットコアを有するプロセッサ1516上で実行可能なx86バイナリコード1506(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図15は、高水準言語1502のプログラムが代替的な命令セットコンパイラ1508を用いてコンパイルされることにより、少なくとも1つのx86命令セットコアを有さないプロセッサ1514(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行するか、及び/又はカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを有するプロセッサ)によってネイティブで実行可能な代替的な命令セットバイナリコード1510が生成されてよいことを示す。命令コンバータ1512は、x86バイナリコード1506を、x86命令セットコアを有さないプロセッサ1514によってネイティブで実行可能なコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード1510と同じである可能性が低い。なぜなら、この変換が可能な命令コンバータは、製造が困難だからである。しかしながら、変換されたコードは、一般的なオペレーションを実現し、代替的な命令セットからの命令で構成される。そこで、命令コンバータ1512は、エミュレーション、シミュレーション又は任意の他の処理を通じて、x86命令セットプロセッサ又はコアを有さないプロセッサ又は他の電子デバイスがx86バイナリコード1506を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
図3−7ののいずれかに関して説明されるコンポーネント、機能、及び詳細は、任意選択的に、図1−2のいずれかに適用されてもよい。さらに、装置のいずれに関して説明されたコンポーネント、機能、及び詳細は、任意選択的に、実施形態において、このような装置によって、及び/又はこれらと共に実行され得る方法のいずれかに適用されてもよい。本明細書において説明されるプロセッサのいずれかは、本明細書(例えば、図11−14)において開示されるコンピュータシステムのいずれかに含まれてよい。いくつかの実施形態において、コンピュータシステムは、動的ランダムアクセスメモリ(DRAM)を含んでよい。あるいは、コンピュータシステムは、更新される必要がないタイプの揮発性メモリ又はフラッシュメモリを含んでよい。本明細書において開示される命令は、本明細書に示されるマイクロアーキテクチャのいずれかを有する、本明細書に示されるプロセッサのいずれかにより、本明細書に示されるシステムのいずれかにおいて実行されてよい。
明細書及び特許請求の範囲において、「結合」及び/又は「接続」という用語は、これらの派生語と共に、用いられていてよい。これらの用語は、互いの同義語であることが意図されるものではない。むしろ、実施形態において、「接続」は、2つ又はより多くのエレメントが、互いに直接物理的及び/又は電気的に接触することを示すために用いられてよい。「結合」は、2つ又はより多くのエレメントが、互いに直接物理的及び/又は電気的に接触することを意味してよい。しかしながら、「結合」は、2つ又はより多くのエレメントが、互いに直接接触していないが、なお互いに連携又はやり取りすることを意味してもよい。例えば、実行ユニットは、1つ又は複数の介在するコンポーネントを通して、レジスタ及び/又はデコードユニットに結合されてよい。図において、矢印は、接続及び結合を示すために用いられる。
「及び/又は」という用語が、用いられていてよい。本明細書において用いられるように、「及び/又は」という用語は、一方もしくは他方又は両方を意味する(例えば、A及び/又はBは、A又はB、又はA及びBの両方を意味する)。
上記の説明において、実施形態を十分に理解せしめるために、具体的な詳細が示されている。しかしながら、他の実施形態は、これらの具体的な詳細のいくつかがなくとも実施可能である。本発明の範囲は、上述された具体例によって決定されるものではなく、以下の特許請求の範囲によってのみ決定されるものである。他の例において、周知の回路、構造、デバイス、及びオペレーションが、説明の理解の妨げとなることを回避するために、ブロック図の形式で、及び/又は詳細なく、示されている。適切とみなされる場合には、参照番号、又は参照番号の末尾部分は、図中で反復され、異なる規定がない又は異なることが自明ではない限り、任意選択的に同様の又は同じ特性を有し得る、対応する又は類似の要素を示す。
特定のオペレーションは、ハードウェアコンポーネントによって実行されてよく、又は機械実行可能もしくは回路実行可能な命令で具現化されてよい。これらの命令は、命令によりプログラミングされた機械、回路、又はハードウェアコンポーネント(例えば、プロセッサ、プロセッサの一部、回路等)によるオペレーションの実行を発生させ、及び/又は、これをもたらすために用いられてよい。オペレーションは、任意選択的に、ハードウェア及びソフトウェアの組み合わせによって実行されてもよい。プロセッサ、機械、回路、又はハードウェアは、特有又は特定の回路を含んでよく、又は、他のロジック(例えば、ファームウェア及び/又はソフトウェアと組み合わせられる可能性のあるハードウェア)は、命令を実行及び/又は処理し、命令に応答して、結果を格納するように動作可能である。
いくつかの実施形態は、機械可読媒体を含む製品(例えば、コンピュータプログラム製品)を含む。媒体は、機械可読形式で情報を提供する、例えば、格納するメカニズムを含んでよい。機械可読媒体は、命令又は一連の命令を提供、又はこれらを自身に格納してよい。これらの命令は、機械によって実行された場合及び/又はそのときに、本明細書において開示される1つ又は複数のオペレーション、方法、もしくは技術を機械に実行させ、及び/又は、機械によるこれらの実行をもたらすように動作可能である。
いくつかの実施形態において、機械可読媒体は、非一時的機械可読記憶媒体を含んでよい。例えば、非一時的機械可読記憶媒体は、フロッピ(登録商標)ディスケット、光記憶媒体、光ディスク、光データストレージデバイス、CD−ROM、磁気ディスク、光磁気ディスク、リードオンリメモリ(ROM)、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、ランダムアクセスメモリ(RAM)、静的RAM(SRAM)、動的RAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データストレージ材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイス等を含んでよい。非一時的機械可読記憶媒体は、一時的な伝搬信号から構成されるものではない。いくつかの実施形態において、記憶媒体は、固形物を含む有形の媒体を含んでよい。
好適な機械の例は、限定されるものではないが、汎用プロセッサ、特定用途向けプロセッサ、デジタル論理回路、集積回路等を含む。好適な機械のさらに他の例は、プロセッサ、デジタル論理回路、又は集積回路を含むコンピュータシステム又は他の電子デバイスを含む。このようなコンピュータシステム又は電子デバイスの例は、限定されるものではないが、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ネットブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス(例えば、ルータ及びスイッチ)、モバイルインターネットデバイス(MID)、メディアプレイヤ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラを含む。
本明細書全体を通して、「一実施形態」、「実施形態」、「1つ又は複数の実施形態」、「いくつかの実施形態」という記載は、例えば、特定の機能が本発明の実施に含まれてよいが、必ずしも必須ではないことを示す。同様に、本明細書において、様々な機能が、単一の実施形態、図、又はその説明において、開示のストリームライン化及び様々な発明の態様の理解を支援することを目的として、共にグループ化される場合がある。しかしながら、この開示方法は、本発明が、各請求項に明示的に記載されるより多くの機能を必要とするという意図を反映するものと解釈されるべきものではない。むしろ、以下の特許請求の範囲が反映するように、発明の態様は、単一の開示された実施形態の全ての機能より少ない機能に基づく。そこで、詳細な説明に続く特許請求の範囲は、これにより、この詳細な説明に明示的に組み込まれ、各請求項は、本発明の別個の実施形態として独立している。
[例示的実施形態]
以下の例は、さらなる実施形態に関する。例の詳細は、1つ又は複数の実施形態の任意の箇所において用いられてよい。
例1は、パックドデータアライメントプラス演算命令をデコードするデコードユニットを含むプロセッサ又は他の装置である。パックドデータアライメントプラス演算命令は、第1の複数のデータエレメントを含む1つ又は複数のソースパックドデータオペランドの第1のセットを示し、第2の複数のデータエレメントを含む1つ又は複数のソースパックドデータオペランドの第2のセットを示し、少なくとも1つのデータエレメントオフセットを示し、デスティネーション格納位置を示す。装置は、デコードユニットに結合された実行ユニットをさらに含む。実行ユニットは、パックドデータアライメントプラス演算命令に応答して、結果パックドデータオペランドをデスティネーション格納位置に格納する。結果パックドデータオペランドは、その各々が、ソースパックドデータオペランドの第1のセットのデータエレメント及びソースパックドデータオペランドの第2のセットのデータエレメントのペアにより実行されたオペレーションの値を有する複数の結果データエレメントを含む。実行ユニットは、少なくとも1つのデータエレメントオフセットを、ソースパックドデータオペランドの第1及び第2のセットのうち少なくとも対応する1つに適用する。少なくとも1つのデータエレメントオフセットは、ソースパックドデータオペランドの第1及び第2のセットにおいて、各ペアのデータエレメント間の対応関係のあらゆる欠如に対抗する。
例2は、例1のプロセッサを含む。ここで、デコードユニットは、1つ又は複数のソースパックドデータオペランドの第2のセットに対応する単一のデータエレメントオフセットのみを示す命令をデコードする。また、任意選択的に、ここで、各ペアのデータエレメントは、少なくとも1つのデータエレメントオフセットによって対抗される対応関係の欠如を有する。
例3は、例1のプロセッサを含む。ここで、デコードユニットは、1つ又は複数のソースパックドデータオペランドの第1のセットに対応する第1のデータエレメントオフセット及び1つ又は複数のソースパックドデータオペランドの第2のセットに対応する第2のデータエレメントオフセットを示す命令をデコードする。
例4は、例3のプロセッサを含む。ここで、各ペアのデータエレメントは、1つ又は複数のソースパックドデータオペランドの第1のセットに対する第1のデータエレメントオフセットの適用、及び1つ又は複数のソースパックドデータオペランドの第2のセットに対する第2のデータエレメントオフセットの適用によって対抗される対応関係の欠如を有する。
例5は、例1のプロセッサを含む。ここで、デコードユニットは、第1のソースパックドデータオペランド及び第2のソースパックドデータオペランドを含むソースパックドデータオペランドの第1のセット、ならびに第3のソースパックドデータオペランド及び第4のソースパックドデータオペランドを含むソースパックドデータオペランドの第2のセットを示す命令をデコードする。
例6は、例1のプロセッサを含む。ここで、デコードユニットは、単一の第1のソースパックドデータオペランドのみを含む1つ又は複数のソースパックドデータオペランドの第1のセット、ならびに第2のソースパックドデータオペランド及び第3のソースパックドデータオペランドを含むソースパックドデータオペランドの第2のセットを示す命令をデコードする。
例7は、例6のプロセッサを含む。ここで、結果パックドデータオペランドは、任意選択的に、第1のソースパックドデータオペランド及び第2のソースパックドデータオペランドの各々と同数のデータエレメントを含む。
例8は、例1のプロセッサを含む。ここで、デコードユニットは、単一の第1のソースパックドデータオペランドのみを含む1つ又は複数のソースパックドデータオペランドの第1のセット、ならびに単一の第2のソースパックドデータオペランドのみを含む1つ又は複数のソースパックドデータオペランドの第2のセットを示す命令をデコードし、実行ユニットは、第2のソースパックドデータオペランドより少ないデータエレメントを任意選択的に有する結果パックドデータオペランドを格納する。
例9は、例1から8のいずれか1つのプロセッサを含む。ここで、デコードユニットは、少なくとも1つのデータエレメントオフセットのうち、複数の異なるデータエレメントオフセット値のいずれか1つを有することが可能なデータエレメントオフセットを示す命令をデコードする。
例10は、例1から8のいずれか1つのプロセッサを含む。ここで、デコードユニットは、少なくとも1つのデータエレメントオフセットのうち、(1)最下位ビット位置に向かう方向における、少なくとも1及び2のデータエレメント位置のいずれか1つのオフセット、(2)0のデータエレメント位置のオフセット、ならびに(3)最上位ビット位置に向かう方向における、少なくとも1及び2のデータエレメント位置のいずれか1つのオフセット、のいずれか1つであることが可能なデータエレメントオフセットを示す命令をデコードする。
例11は、例1から8のいずれか1つのプロセッサを含む。ここで、デコードユニットは、少なくとも1つのデータエレメントオフセットのうち、(1)最下位ビット位置に向かう方向における、少なくとも1、2、3、及び4のデータエレメント位置のいずれか1つのオフセット、(2)0のデータエレメント位置のオフセット、ならびに(3)最上位ビット位置に向かう方向における、少なくとも1、2、3、及び4のデータエレメント位置のいずれか1つのオフセット、のいずれか1つであることが可能なデータエレメントオフセットを示す命令をデコードする。
例12は、例1から8のいずれか1つのプロセッサを含む。ここで、実行ユニットは、命令に応答して、その各々が、データエレメントのペアにより実行されたオペレーションの値を有する結果データエレメントを有する結果パックドデータオペランドを格納し、オペレーションは、任意選択的に、加算、減算、乗算、除算、及び平均オペレーションの1つである。
例13は、例1から8のいずれか1つのプロセッサを含む。ここで、実行ユニットは、デコードされた命令に応答して、各ペアのデータエレメントに対して、垂直単一命令複数データ(SIMD)オペレーションを実行する。
例14は、例1から8のいずれか1つのプロセッサを含む。ここで、デコードユニットは、少なくとも1つのデータエレメントオフセットのデータエレメントオフセットの値を示す即値を任意選択的に有する命令をデコードする。
例15は、例1から8のいずれか1つのプロセッサを含む。ここで、デコードユニットは、少なくとも1つのデータエレメントオフセットのデータエレメントオフセットの値を示す値を格納するスカラレジスタを任意選択的に示す命令をデコードする。
例16は、例1から8のいずれか1つのプロセッサを含む。プロセッサは、実行ユニットを有するデジタル信号プロセッサの画像プロセッサユニットをさらに含む。
例17は、例1から8のいずれか1つのプロセッサを含む。プロセッサは、分岐を予測する任意選択的な分岐予測ユニットをさらに含む。プロセッサは、分岐予測ユニットに結合された、パックドデータアライメントプラス演算命令を含む命令をプリフェッチする任意選択的な命令プリフェッチユニットをさらに含んでよい。プロセッサは、命令プリフェッチユニットに結合された、命令を格納する任意選択的なレベル1(L1)命令キャッシュをさらに含んでよい。プロセッサは、データを格納する任意選択的なL1データキャッシュをさらに含んでよい。プロセッサは、データ及び命令を格納する任意選択的なレベル2(L2)キャッシュをさらに含んでよい。プロセッサは、デコードユニット、L1命令キャッシュ、及びL2キャッシュに結合された命令フェッチユニットであって、L1命令キャッシュ及びL2キャッシュの1つからのパックドデータアライメントプラス演算命令をフェッチし、パックドデータアライメントプラス演算命令をデコードユニットに提供する命令フェッチユニットをさらに含んでよい。プロセッサは、レジスタをリネーミングする任意選択的なレジスタリネーミングユニットをさらに含んでよい。プロセッサは、実行のためにパックドデータアライメントプラス演算命令からデコードされた1つ又は複数のオペレーションをスケジューリングする任意選択的なスケジューラをさらに含んでよい。プロセッサは、パックドデータアライメントプラス演算命令の実行結果をコミットする任意選択的なコミットユニットをさらに含んでよい。
例18は、パックドデータアライメントプラス演算命令を受信する段階を含む、プロセッサにおける方法である。パックドデータアライメントプラス演算命令は、第1の複数のデータエレメントを含む1つ又は複数のソースパックドデータオペランドの第1のセットを示し、第2の複数のデータエレメントを含む1つ又は複数のソースパックドデータオペランドの第2のセットを示し、少なくとも1つのデータエレメントオフセットを示し、デスティネーション格納位置を示してよい。方法は、パックドデータアライメントプラス演算命令に応答して、結果パックドデータオペランドをデスティネーション格納位置に格納する段階をさらに含む。結果パックドデータオペランドは、その各々が、ソースパックドデータオペランドの第1のセットからのデータエレメント及びソースパックドデータオペランドの第2のセットからのデータエレメントのペアにより実行されたオペレーションの値を有する複数の結果データエレメントを含む。各ペアのデータエレメントは、ソースパックドデータオペランドの第1及び第2のセットにおいて、非対応データエレメント位置にあったものである。非対応データエレメント位置は、パックドデータアライメントプラス演算命令によって示される少なくとも1つのデータエレメントオフセットに基づいて、異なっていたものである。
例19は、例18の方法を含む。ここで、受信する段階は、単一のデータエレメントオフセットのみを示す命令を受信する段階を含み、非対応データエレメント位置は、単一のデータエレメントオフセットだけ異なる。
例20は、例18の方法を含む。ここで、受信する段階は、1つ又は複数のソースパックドデータオペランドの第1のセットに対応する第1のデータエレメントオフセット、及び1つ又は複数のソースパックドデータオペランドの第2のセットに対応する第2のデータエレメントオフセットを示す命令を受信する段階を含む。非対応データエレメント位置は、任意選択的に、第1のデータエレメントオフセットと第2のデータエレメントオフセットとの間の差だけ異なる。
例21は、例18の方法を含む。ここで、受信する段階は、ソースパックドデータオペランドの第1のセットの第1のソースパックドデータオペランド及び第2のソースパックドデータオペランドの両方を示し、ソースパックドデータオペランドの第2のセットの第3のソースパックドデータオペランド及び第4のソースパックドデータオペランドの両方を示す命令を受信する段階を含む。
例22は、例18の方法を含む。ここで、受信する段階は、複数の異なるデータエレメントオフセット値のいずれか1つたり得るデータエレメントオフセットを示す命令を受信する段階を含む。
例23は、例18から22のいずれか1つの方法を含む。ここで、格納する段階は、その各々が、データエレメントのペアにより実行されたオペレーションの値を有する結果データエレメントを格納する段階を含み、オペレーションは、任意選択的に、加算オペレーション、減算オペレーション、乗算オペレーション、除算オペレーション、及び平均オペレーションの1つである。
例24は、例18から22のいずれか1つの方法を含む。方法は、データエレメントのペアにより、垂直単一命令複数データ(SIMD)オペレーションとして、オペレーションを実行する段階をさらに含む。
例25は、例18から22のいずれか1つの方法を含む。方法は、デジタル信号プロセッサによる画像処理中の画素フィルタリング中に実行される。
例26は、命令を処理するシステムである。システムは、相互接続及び相互接続に結合されたプロセッサを含む。プロセッサは、パックドデータアライメントプラス演算命令を受信する。パックドデータアライメントプラス演算命令は、第1の複数のデータエレメントを含む1つ又は複数のソースパックドデータオペランドの第1のセットを示し、第2の複数のデータエレメントを含む1つ又は複数のソースパックドデータオペランドの第2のセットを示し、少なくとも1つのデータエレメントオフセットを示し、デスティネーション格納位置を示す。プロセッサは、命令に応答して、結果パックドデータオペランドをデスティネーション格納位置に格納する。結果パックドデータオペランドは、その各々が、ソースパックドデータオペランドの第1のセットのデータエレメント及びソースパックドデータオペランドの第2のセットのデータエレメントのペアにより実行されたオペレーションの値を有する複数の結果データエレメントを含む。プロセッサは、少なくとも1つのデータエレメントオフセットを、ソースパックドデータオペランドの第1及び第2のセットのうち少なくとも対応する1つに適用する。少なくとも1つのデータエレメントオフセットは、ソースパックドデータオペランドの第1及び第2のセットにおいて、各ペアのデータエレメント間の対応関係のあらゆる欠如に対抗する。システムは、相互接続に結合された動的ランダムアクセスメモリ(DRAM)をさらに含む。DRAMは、画素フィルタリングアルゴリズムを実行する命令セットを格納する。命令セットは、プロセッサによって実行された場合に、各々が異なるオフセットを含むパックドデータアライメントプラス演算命令の複数のインスタンスを、プロセッサに実行させる。
例27は、例26のシステムを含む。ここで、命令は、複数の異なる値のいずれか1つたり得る第1のデータエレメントオフセットを示す。各ペアのデータエレメントは、任意選択的に、ソースオペランドの第1及び第2のセットにおいて、非対応データエレメント位置にあってよい。
例28は、非一時的機械可読記憶媒体を含む製品である。非一時的機械可読記憶媒体は、パックドデータアライメントプラス演算命令を格納する。命令は、第1の複数のデータエレメントを含む1つ又は複数のソースパックドデータオペランドの第1のセットを示し、第2の複数のデータエレメントを含む1つ又は複数のソースパックドデータオペランドの第2のセットを示し、少なくとも1つのデータエレメントオフセットを示し、デスティネーション格納位置を示す。命令は、機械によって実行された場合に、結果パックドデータオペランドをデスティネーション格納位置に格納することを含むオペレーションを、機械に実行させる。結果パックドデータオペランドは、その各々が、ソースパックドデータオペランドの第1のセットからのデータエレメント及びソースパックドデータオペランドの第2のセットからのデータエレメントのペアにより実行されたオペレーションの値を有する複数の結果データエレメントを含む。各ペアのデータエレメントは、ソースパックドデータオペランドの第1及び第2のセットにおいて、非対応データエレメント位置にあったものである。非対応データエレメント位置は、パックドデータアライメントプラス演算命令によって示される少なくとも1つのデータエレメントオフセットに基づいて異なっていたものである。
例29は、例28の製品を含む。ここで、命令は、少なくとも1つのデータエレメントオフセットのうち、(1)最下位ビット位置に向かう方向における、少なくとも1及び2のデータエレメント位置のいずれか1つのオフセット、(2)0のデータエレメント位置のオフセット、ならびに(3)最上位ビット位置に向かう方向における、少なくとも1及び2のデータエレメント位置のいずれか1つのオフセット、のいずれか1つであることが可能なデータエレメントオフセットを示す。
例30は、パックドデータアライメントプラス演算命令をデコードするデコードユニットを含むプロセッサ又は他の装置である。パックドデータアライメントプラス演算命令は、第1の複数のデータエレメントを含む1つ又は複数のソースパックドデータオペランドの第1のセットを示し、第2の複数のデータエレメントを含む1つ又は複数のソースパックドデータオペランドの第2のセットを示し、少なくとも1つのデータエレメントオフセットを示し、デスティネーション格納位置を示す。プロセッサは、デコードユニットに結合された実行ユニットをさらに含む。実行ユニットは、パックドデータアライメントプラス演算命令に応答して、結果パックドデータオペランドをデスティネーション格納位置に格納する。結果パックドデータオペランドは、その各々が、ソースパックドデータオペランドの第1のセットのデータエレメント及びソースパックドデータオペランドの第2のセットの非対応データエレメントのペアにより実行されたオペレーションの値を有する複数の結果データエレメントを含む。各ペアの非対応データエレメントは、ソースパックドデータオペランドの第1及び第2のセットにおいて、非対応データエレメント位置にある。非対応データエレメント位置は、パックドデータアライメントプラス演算命令によって示される少なくとも1つのデータエレメントオフセットに基づいて異なる。
例31は、例18から25のいずれか1つの方法を実行する、又はこれを実行するように動作可能なプロセッサ又は他の装置である。
例32は、例18から25のいずれか1つの方法を実行するための手段を含むプロセッサ又は他の装置である。
例33は、命令を任意選択的に格納又は提供する非一時的機械可読媒体を任意選択的に含む製品である。命令は、プロセッサ、コンピュータシステム、電子デバイス、又は他の機械によって実行された場合及び/又はそのときに、例18から25のいずれか1つの方法を、機械に実行させるように動作可能である。例34は、本明細書において実質的に説明されるようなプロセッサ又は他の装置である。
例35は、本明細書において実質的に説明されるような任意の方法を実行するように動作可能なプロセッサ又は他の装置である。
例36は、本明細書において実質的に説明されるような任意のパックドデータアライメントプラス演算命令を実行する(例えば、実行するコンポーネントを有する、又は実行するように動作可能な)プロセッサ又は他の装置である。
例37は、第1の命令セットの命令をデコードするデコードユニットを有するプロセッサを含むコンピュータシステム又は他の電子デバイスである。プロセッサは、1つ又は複数の実行ユニットをさらに有する。電子デバイスは、プロセッサに結合されたストレージデバイスをさらに含む。ストレージデバイスは、第1の命令を格納する。当該命令は、本明細書において実質的に開示されたようなパックドデータアライメントプラス演算命令のいずれかであってよく、第2の命令セットに含まれる。ストレージデバイスは、第1の命令を、第1の命令セットの1つ又は複数の命令に変換する命令をさらに格納する。第1の命令セットの1つ又は複数の命令は、プロセッサによって実行された場合に、第1の命令によって規定されるようなアーキテクチャ上の影響を、プロセッサに有させる。