複数のマスクド結果要素に伝搬する複数の対応するアンマスクド結果要素に複数のソース要素を記憶する、伝搬を有するマスクドソース要素記憶命令と、当該命令を実行する複数のプロセッサと、当該命令を処理又は実行する場合、当該複数のプロセッサにより実行される複数の方法と、当該命令を処理又は実行する1つ又は複数のプロセッサを組み込んだ複数のシステムとが、本明細書にて開示される。以下の説明において、多数の具体的な詳細(例えば、特定の命令オペレーション、データフォーマット、プロセッサ構成、マイクロアーキテクチャ上の詳細、一連のオペレーションなど)が記載される。しかし、複数の実施形態は、これらの具体的な詳細なしで実施され得る。他の例では、本明細書の理解を曖昧にしてしまうことを回避するために、複数の周知回路、構造、及び技術が詳細に示されていない。
図1は、伝搬を有するマスクドソース要素記憶命令102の実施形態を実行するよう動作可能なプロセッサ100の実施形態のブロック図である。いくつかの実施形態において、プロセッサは、汎用プロセッサ(例えば、多くの場合にデスクトップ、ラップトップ、又は他のコンピュータに用いられる種類の汎用マイクロプロセッサ)であってよい。代替的に、プロセッサは、特定用途プロセッサであってよい。適する特定用途プロセッサの複数の例は、複数のネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックスプロセッサ、コプロセッサ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、及びコントローラ(例えば、マイクロコントローラ)を含むが、単にいくつかの例を挙げており、これらに限定されない。プロセッサは、様々な複合命令セットコンピューティング(CISC)プロセッサ、様々な縮小命令セットコンピューティング(RISC)プロセッサ、様々な超長命令語(VLIW)プロセッサ、これらの様々なハイブリッド、又は他の種類のプロセッサのうちの何れかであってよい。
オペレーション中に、プロセッサ100は、伝搬を有するマスクドソース要素記憶命令102の実施形態を受信し得る。例えば、命令は、命令フェッチユニット、命令キュー、又は同様のものから受信され得る。命令は、マクロ命令、アセンブリ言語命令、機械コード命令、若しくは、プロセッサの命令セットの他の命令又は制御信号を表し得る。いくつかの実施形態において、命令は、複数のデータ要素を有する第1のソースパックドデータオペランド110を明示的に指定してよく(例えば、1つ又は複数のフィールド、又はビットセットを介して)、又はそうでなければ示してよく(例えば、暗黙的に示す、エミュレーションレジスタマッピングを介してそのレジスタにマッピングされる、など)、いくつかの実施形態においては、少なくとも1つの値を有する選択的な第2のソース(例えば、パックドデータ)オペランド112を指定してよく、又はそうでなければ示してよく、(例えば、パックドデータ・オペレーション・マスクレジスタ118における)ソースマスク116を指定してよく、又はそうでなければ示してよく、結果パックドデータオペランド114が記憶されるべくデスティネーション記憶位置を指定してよく、又はそうでなければ示してよい。
再び図1を参照すると、プロセッサは、復号ユニット又はデコーダ104を備える。復号ユニットは、伝搬を有するマスクドソース要素記憶命令102を受信し、復号し得る。復号ユニットは、1つ又は複数のマイクロ命令、マイクロオペレーション、マイクロコードエントリーポイント、復号された命令又は制御信号、若しくは、命令102を反映、表し、及び/又は命令102から派生された他の比較的下位の命令又は制御信号を出力し得る。1つ又は複数の下位の命令又は制御信号は、1つ又は複数の下位(例えば、回路レベル又はハードウェアレベル)のオペレーションを介して、上位の命令102を実装し得る。いくつかの実施形態において、復号ユニットは、命令を受信する1つ又は複数の入力構造(例えば、ポート、相互接続、インターフェースなど)と、入力構造に結合され、命令を受信して認識し、1つ又は複数の対応する下位の命令又は制御信号に復号する命令認識及び復号ロジックと、命令認識及び復号ロジックに結合され、1つ又は複数の対応する下位の命令又は制御信号を出力する1つ又は複数の出力構造(例えば、ポート、相互接続、インターフェースなど)とを含み得る。復号ユニットは、マイクロコードリードオンリメモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、及び当技術分野において既知の他のメカニズムを含む様々な異なるメカニズムを用いて実装され得るが、これらに限定されない。
いくつかの実施形態において、復号ユニットに直接提供されている命令102の代わりに、命令エミュレータ、変換器、モーファ、インタプリタ、又は他の命令変換モジュールが選択的に用いられ得る。様々な異なる種類の命令変換モジュールが、当技術分野においては既知であり、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせに実装され得る。いくつかの実施形態において、命令変換モジュールは、例えば、別々のダイ上及び/又はメモリ内(例えば、スタティック、ダイナミック、又はランタイム命令エミュレーションモジュールとして)など、命令処理プロセッサの外部に配置されてよい。例として、命令変換モジュールは、第1の命令セットであり得る命令102を受信してよく、命令102をエミュレートし、トランスレートし、モーフィングし、解釈し、又はそうでなければ、命令102を、異なる第2の命令セットであり得る1つ又は複数の対応する又は派生された中間の命令又は制御信号に変換し得る。第2の命令セットの1つ又は複数の中間の命令又は制御信号は、復号ユニット(例えば、復号ユニット104)に提供されてよく、復号ユニットは、第2の命令セットの受信された1つ又は複数の命令又は制御信号を、プロセッサのネイティブなハードウェア(例えば、1つ又は複数の実行ユニット)により実行可能な1つ又は複数の下位の命令又は制御信号に復号し得る。
プロセッサはまた、パックドデータレジスタ108のセットを含む。パックドデータレジスタのそれぞれは、パックドデータ、ベクトルデータ、又はSIMDデータを記憶するよう動作可能なオンダイの記憶位置を表し得る。パックドデータレジスタは、アーキテクチャ的に可視のレジスタ(例えば、アーキテクチャラルレジスタファイル)を表し得る。アーキテクチャ的に可視の又はアーキテクチャラルレジスタは、ソフトウェア及び/又はプログラマに可視であり、並びに/若しくは、プロセッサの命令セットの命令により示され、複数のオペランドを識別するレジスタである。これらのアーキテクチャラルレジスタは、所与のマイクロアーキテクチャ(例えば、一時的のレジスタ、リオーダバッファ、リタイアメントレジスタなど)においては他の非アーキテクチャラル又は非アーキテクチャ的に可視のレジスタとは対照的である。パックドデータレジスタは、周知技術を用いて、異なる方式で異なるマイクロアーキテクチャにおいて実装されてよく、如何なる特定の種類の回路にも限定されない。様々な異なる種類のレジスタが適する。適する種類のレジスタの複数の例としては、複数の専用物理レジスタ、レジスタリネーミングを用いる動的割り当て物理レジスタ、及びこれらの組み合わせを含むが、これらに限定されない。
いくつかの実施形態において、第1のソースパックドデータオペランド110は、第1のパックドデータレジスタに選択的に記憶されてよく、第2のソースパックドデータオペランド112は、第2のパックドデータレジスタに記憶されてよい。代替的に、複数のメモリ位置又は他の記憶位置が、これらのオペランドのうちの1つ又は複数のために用いられ得る。いくつかの実施形態において、デスティネーション記憶位置はまた、パックドデータレジスタであり得る。いくつかの場合において、デスティネーション記憶位置として用いられるパックドデータレジスタは、第1のソースパックドデータオペランド及び第2のソースオペランドのために用いられるパックドデータレジスタと異なってよい。他の場合において、複数のソースパックドデータオペランドのうちの1つのために用いられるパックドデータレジスタは、デスティネーション記憶位置として、再利用され得る(例えば、結果パックドデータオペランドは、ソースパックドデータオペランドのうちの1つに書き込まれ得る)。例えば、いくつかの場合において、結果パックドデータオペランドは、第2のソースパックドデータオペランドに書き込まれてよく、場合によっては、同じ種類の命令の別のインスタンスとして、第2のソースパックドデータオペランドを用意するのに用いられ得る。代替的に、メモリ又は他の複数の記憶位置が、デスティネーション記憶位置用に選択的に用いられ得る。
再び図1を参照すると、実行ユニット106は、復号ユニット104と、第1のソースパックドデータオペランド110と、選択的に第2のソースオペランド112と、ソースマスク116とに結合される(例えば、パックドデータレジスタ108とパックドデータ・オペレーション・マスクレジスタ118とに結合され得る)。例として、実行ユニットは、論理又はデータ操作オペレーション、若しくは同様のものを実行するよう、算術ロジックユニットと、ロジックユニットと、デジタル回路とを含み得る。実行ユニットは、伝搬を有するマスクドソース要素記憶命令102を表す、及び/又は、それから派生された、1つ又は複数の復号された又はそうでなければ変換された命令又は制御信号を受信し得る。実行ユニットはまた、第1のソースパックドデータオペランド110とソースマスク116とを受信してよく、いくつかの実施形態においては選択的な第2のソース(例えば、パックドデータ)オペランド112を受信してよく、それらは全て、命令102により指定されてよく、又はそうでなければ示されてよい。
いくつかの実施形態において、実行ユニットは、複数のデータ要素が如何に第1のソースパックドデータオペランド110から結果パックドデータオペランド114に記憶されるかをマスキング又は制御するべく、ソースマスク116をマスキング又は制御オペランドとして用いてよい。ソースマスクは、複数のマスク要素又は制御要素を含み得る。いくつかの実施形態において、複数のマスク要素は、結果パックドデータオペランドの対応する結果データ要素と一対一の対応関係に含まれ得る。これにより、マスキング又は制御が、各結果データ要素のために、他のものとは別々に及び/又は独立に提供され得る。いくつかの実施形態において、各マスク要素は、単一のマスクビットであってよいが、本願発明の範囲はそのように限定されない。そのような場合において、ソースマスクは、各結果データ要素及び/又は各ソースデータ要素のマスクビットを有し得る。いくつかの実施形態において、各マスクビット又は他のマスク要素の値が、第1のソースパックドデータオペランド110からの対応するデータ要素が結果パックドデータオペランド114における対応する結果データ要素に記憶されるべきか否かをマスキング又は制御し得る。例えば、各マスクビット又は要素は、第1のソースパックドデータオペランド110における対応するソースデータ要素を、対応するアンマスクド結果データ要素に記憶させるアンマスクド値(例えば、バイナリの1(すなわち、1)に設定される)を有してよく、又は、各マスクビットは、(例えば、最も近いアンマスクド結果データ要素の)別の値を、対応するマスクド結果データ要素に伝搬又はそうでなければ記憶させるマスクド値(例えば、バイナリの0(すなわち、0)にクリアされる)を有してよい。別の実施形態において、2つ以上のビットが各マスク要素用に選択的に用いられ得る。例えば、各マスク要素は、各対応するソースデータ要素と同じビット数を有してよく、最下位ビット又は最上位ビットが単一のマスクビットとして用いられてよい。
実行ユニットは、命令102に応じて及び/又はその結果として(例えば、命令から直接又は間接的に(例えば、エミュレーションを介して)復号された1つ又は複数の命令又は制御信号に応じて)、命令に示されたデスティネーション記憶位置に結果パックドデータオペランド114を記憶するよう動作可能であり得る。いくつかの実施形態において、結果パックドデータオペランドは、少なくとも2つのアンマスクド結果データ要素を含み得る。少なくとも2つのアンマスクド結果データ要素は、ソースマスク116のアンマスクドマスク要素に対応し得る。結果パックドデータオペランド114のアンマスクド結果データ要素のそれぞれは、同じ相対ビット位置において、第1のソースパックドデータオペランド110の対応するデータ要素の値を有し得る。結果パックドデータオペランド114はまた、各最も近いペアのアンマスクド結果データ要素の間における、そのペアのアンマスクド結果データ要素と同じ値を有する全てのマスクド結果データ要素を有してよく、そのペアは、結果パックドデータオペランド114の第1の端部(例えば、最低桁のビット位置又は端部、若しくは最高桁のビット位置又は端部)に最も近い。複数のマスクド結果データ要素は、ソースマスク116の複数のマスクドマスク要素に対応する。いくつかの実施形態において、結果パックドデータオペランドの複数の前述の特性は、柔軟な方式で(例えば、シャッフル、並べ替え、又は他の高柔軟性の命令の明示的な制御オペランドにより)明示的に指定されるものではなく、命令に対して固定的又は暗黙的(例えば、オペコード又は命令の種類について固定的又は暗黙的)であってよい。いくつかの実施形態において、結果パックドデータオペランドは選択的に、図3から6のうちの何れかについて示されて説明されるそれらのうちの何れかであり得るが、本願発明の範囲はそのように限定されない。
実行ユニット及び/又はプロセッサは、命令102を実行し、並びに/若しくは命令102に応じて及び/又は命令102の結果として、その結果を記憶するよう動作可能な具体的又は特定のロジック(例えば、複数のトランジスタ、集積回路、又は、ファームウェア(例えば、不揮発性メモリに記憶される複数の命令)及び/又はソフトウェアと潜在的に組み合わせられる他のハードウェア)を含み得る。いくつかの実施形態において、実行ユニットは、ソースオペランドを受信する1つ又は複数の入力構造(例えば、ポート、相互接続、インターフェースなど)と、その入力構造に結合され、そのソースオペランドを処理して結果オペランドを生成する回路又はロジックと、その回路又はロジックに結合され、その結果オペランドを出力する1つ又は複数の出力構造(例えば、ポート、相互接続、インターフェースなど)とを含み得る。
本明細書を曖昧にしてしまうことを回避するために、比較的簡単なプロセッサが示され説明されている。他の実施形態において、プロセッサは、他の周知プロセッサ構成要素を選択的に含み得る。複数の実施形態は、複数のコア、論理プロセッサ、又は実行エンジンを有する複数のプロセッサに含まれてよく、それらの少なくとも1つは、本明細書で開示される命令の実施形態を実行する復号ユニットと実行ユニットとを有する。
図2は、伝搬を有するマスクドソース要素記憶命令の実施形態を実行する方法220の実施形態のブロックフロー図である。様々な実施形態において、当該方法は、プロセッサ、命令処理装置、又は他のデジタルロジックデバイスにより実行され得る。いくつかの実施形態において、図2の方法は、図1のプロセッサにより、及び/又は、そのプロセッサ内で、実行され得る。本明細書にて説明される、図1のプロセッサについての複数の構成要素、特徴、及び特定の選択的な詳細は、図2の方法にも選択的に適用される。代替的に、図2の方法は、同様の又は異なるプロセッサ又は装置により、及び/又は、同様の又は異なるプロセッサ又は装置内で、実行され得る。さらに、図1のプロセッサは、図2の複数の方法と同じの、同様の、又は異なるものを実行し得る。
ブロック221では、方法は、伝搬を有するマスクドソース要素記憶命令を受信する段階を含む。様々な態様において、命令は、プロセッサ又はその一部(例えば、命令フェッチユニット、復号ユニット、バスインターフェースユニットなど)において受信され得る。様々な態様において、命令は、オフダイのソースから(例えば、メモリ、相互接続などから)、又は、オンダイのソースから(例えば、命令キャッシュ、命令キューなどから)、受信され得る。命令は、第1の複数のデータ要素を含む第1のソースパックドデータオペランドを指定してよく、又はそうでなければ示してよく、いくつかの実施形態においては、値を有する第2のソースオペランドを選択的に指定してよく、又はそうでなければ示してよく、複数のマスク要素を含むソースマスクを指定してよく、又はそうでなければ示してよく、デスティネーション記憶位置を指定してよく、又はそうでなければ示してよい。
ブロック222では、方法は、命令に応じて及び/又はその結果として、デスティネーション記憶位置に結果パックドデータオペランドを記憶する段階を含む。代表的に、実行ユニットが命令を実行し、その結果を記憶し得る。いくつかの実施形態において、結果パックドデータオペランドは、少なくとも2つのアンマスクド結果データ要素を含み得る。アンマスクド結果データ要素は、ソースマスクのアンマスクドマスク要素に対応し得る。結果パックドデータオペランドのアンマスクド結果データ要素のそれぞれは、同じ相対ビット位置において、第1のソースパックドデータオペランドの対応するデータ要素の値を有し得る。結果パックドデータオペランドはまた、各最も近いペアのアンマスクド結果データ要素の間における、そのペアのアンマスクド結果データ要素と同じ値を有する全てのマスクド結果データ要素を有してよく、そのペアは、結果パックドデータオペランドの第1の端部に最も近い。複数のマスクド結果データ要素は、ソースマスクの複数のマスクドマスク要素に対応し得る。
示されている方法は、複数のアーキテクチャラルオペレーション(例えば、ソフトウェアの視点から可視のもの)を伴う。複数の他の実施形態において、方法は、1つ又は複数のマイクロアーキテクチャ上のオペレーションを選択的に含み得る。命令は、フェッチされ、復号され、アウトオフオーダでスケジューリングされてよく、複数のソースオペランドが、アクセスされてよく、実行ユニットが、その命令を実行する、マイクロアーキテクチャ上の複数のオペレーションを実行してよい、等など。いくつかの実施形態において、マイクロアーキテクチャ上の複数のオペレーションは、ソース要素から結果要素に値を記憶する段階と、下位のアンマスクド結果要素から上位のマスクド結果要素に値を伝搬又は記憶する段階となどを選択的に含み得る。
図3は、命令の実施形態に応じて実行され得る、最下位のソース要素を複数の最下位のマスクド結果データ要素に記憶する、伝搬を有するマスクド対応ソース要素記憶オペレーション330の実施形態を示すブロック図である。この実施形態において、第2のソースパックドデータオペランド312の最下位のデータ要素(X0)の値が、ゼロ又は1以上の数(例えば、示された例においては3)の最下位のマスク済み結果データ要素332のセットの複数の値のために用いられ得る。 命令はまた、第1の複数のパックドデータ要素を有する第1のソースパックドデータオペランド310を指定し(例えば、明示的に指定し)てよく、又はそうでなければ、示し(例えば、暗黙的に示し)てよい。示された実施形態において、第1のソースパックドオペランドデータは、8つのデータ要素A0からA7を有するが、本願発明の範囲はそのように限定されない。複数の他の実施形態において、第1のソースパックドデータオペランドは、例えば、各データ要素のビットのサイズによって分割された第1のソースパックドデータオペランドのビットのサイズに等しい数などの異なる数のデータ要素を有し得る。様々な実施形態において、第1のソースパックドデータオペランドの幅は、64ビット、128ビット、256ビット、512ビット、又は1024ビットであり得るが、本願発明の範囲はそのように限定されない。様々な実施形態において、各パックドデータ要素の幅は、8ビット、16ビット、32ビット、又は64ビットであり得るが、本願発明の範囲はそのように限定されない。いくつかの実施形態において、第1のソースパックドデータオペランドは、メモリ位置においてよく、これは、データ要素が、前にソースパックドデータレジスタにロードされることを必要とせずに、直接にメモリから結果パックドデータに記憶されることを可能にし得るが、このことは必須ではない。
命令はまた、第2のソースパックドデータオペランド312を指定してよく、又はそうでなければ示してよい。この実施形態において、第2のソースパックドデータオペランドは、その値が結果パックドデータオペランド314におけるゼロ又は1以上(例えば、示された例においては3)の最下位又は最低桁のマスク済み結果データ要素用に用いられ(例えば、それに記憶され)得る単一の最下位又は最低桁のデータ要素(X0)を提供し得る。マスク済み結果データ要素は、ソースマスクオペランド316内の同じ相対位置における複数のマスク済みマスク要素に対応するものであり得る。いくつかの実施形態において、第2のソースパックドデータオペランドは、パックドデータレジスタに記憶され得る。この実施形態において、単一のデータ要素(X0)は、最下位又は最低桁のデータ要素位置に記憶される。第2のソースパックドデータオペランドにおける複数の他のデータ要素及び/又はデータ要素位置が、アスタリスク(*)を付された形で設計され、それらがオペレーション及び/又は命令に選択的に無視されてよく及び/又は使用されなくてよいことを示す。以下においてさらに説明されるように、パックドデータオペランドの最下位の位置において単一のデータ要素(例えば、X0)を提供することは、アルゴリズム的観点から、特定の実装(例えば、減少ループをベクトル化する場合)に対して利点を与え得る。しかし、本願発明の範囲は、複数のそのような実装又はこのように単一のデータ要素(X0)を提供することに限定されない。
命令はまた、ソースマスク316を指定し又はそうでなければ示し得る。ソースマスクは、複数のマスク要素を含み得る。例えば、ソースマスクは、結果パックドデータオペランドにおける結果データ要素の数と同じ数のマスク要素を含み得る。示された実施形態において、ソースマスクは8つのマスク要素を有する。各マスク要素は、複数のオペランド内の同じ相対位置において、第1のソースパックドデータの複数のデータ要素のうちの1つ及び/又は結果パックドデータの複数のデータ要素のうちの1つに対応し得る。例えば、最低桁のマスク要素が最低桁の結果データ要素及び/又はA0に対応してよく、最高桁のマスク要素が最高桁の結果データ要素及び/又はA7に対応してよく、等など。示されているように、いくつかの実施形態において、各マスク要素は、単一のマスクビットであってよいが、本願発明の範囲はそのように限定されない。示された実施形態に用いられる規定に従って、バイナリの0(すなわち、0)の値を有するマスク要素が、マスク済み又はマスクドマスク要素を表す一方、バイナリの1(すなわち、1)の値を有するマスク要素が、アンマスクドマスク要素を表す。その逆の規定も可能である。特定の示された例において、8つのマスクビットは、左の最高桁の位置から右の最低桁のビット位置で、バイナリ値0、1、0、0、1、0、0及び0を有する。これらは単に例示的な値であることが理解されるであろう。いくつかの実施形態において、命令は、パックドデータオペレーションを叙述する叙述オペランドとしてのソースマスクを有するマスクレジスタを示す他の命令を有する命令セットに含まれ得る。
結果パックドデータオペランド314は、命令の実施形態に応じて及び/又はその結果として、デスティネーション記憶位置において、(例えば、実行ユニット306により)生成され記憶され得る。デスティネーション記憶位置は、命令により指定され又はそうでなければ示され得る。様々な実施形態において、デスティネーション記憶位置は、パックドデータレジスタ、メモリ位置、又は他の記憶位置であってよい。結果パックドデータオペランドは、複数の結果データ要素を含み得る。例えば、結果パックドデータは、第1のソースパックドデータオペランドにおけるデータ要素の数と同じ数、及び/又は、ソースマスクにおけるマスク要素の数と同じ数の結果データ要素を含み得る。示された実施形態において、結果パックドデータは、8つの結果データ要素を有するが、本願発明の範囲はそのように限定されない。各結果データ要素は、複数のオペランド内の同じ相対位置において、第1のソースパックドデータにおける異なるデータ要素、及び/又は、ソースマスクにおける異なるマスク要素に対応し得る。
8つの結果データ要素は、右の最下位の端部又はビット位置331から左の最上位の端部又はビット位置333に移動する場合、データ要素位置0から7を占有する。示された例示的な実施形態において、位置3における結果データ要素(A3)が、アンマスクドマスク要素(例えば、1の値を有する)に対応し、最下位のアンマスクド結果データ要素及び/又は最下位の端部又はビット位置に最も近いアンマスクド結果データ要素であることに留意されたい。示された例示的な実施形態における332で示されているように、3つの最下位又は最右の結果データ要素(すなわち、位置0から2において)は、最下位の端部又はビット位置と位置3における最下位のアンマスクド結果データ要素(A3)との間のマスクド結果データ要素のセットを表す。3つの最下位の結果データ要素はそれぞれ、マスク済みマスク要素(例えば、0の値を有する)に対応する一方、位置3における次の最上位の結果データ要素(A3)は、アンマスクドマスク要素(例えば、1の値を有する)に対応する。この実施形態において、第2のソースパックドデータオペランド312の単一の最下位のデータ要素(X0)の値は、結果パックドデータの位置3において最初に遭遇した又は最下位のアンマスクド結果データ要素(A3)の前のこれらの最下位のマスク済み結果データ要素の3つの全ての複数の値用に用いられる(例えば、これらに記憶される)。この実施形態において、X0は、これらの最下位のマスク済み結果データ要素用に用いられる予め定められた値である。位置3における次の最上位の結果データ要素(A3)は、アンマスクド結果データ要素であり、第1のソースパックドデータオペランドの位置3において対応するデータ要素(A3)の値を記憶する。
示された例示の結果パックドデータオペランドをわたって右から左へ続くと、2つの次の最上位の結果データ要素(すなわち、位置4及び5において)がそれぞれ、マスク済みマスク要素(例えば、0の値を有する)に対応するマスク済み結果データ要素でもある。いくつかの実施形態において、334で示されているように、最も近い下位のアンマスクド結果データ要素(この場合はA3)の値は、位置4及び5におけるこれらの2つの上位のマスク済み結果データ要素のそれぞれに伝搬され、又はそうでなければ記憶され得る。例えば、示されているように、位置4から5におけるマスク済み結果データ要素のそれぞれは、最も近い下位のアンマスクド結果データ要素(A3)の値を記憶し得る。つまり、いくつかの実施形態において、最も近い下位のアンマスクド結果データ要素(A3)の値は、ゼロ又は1以上(この場合は2)の上位のマスク済み結果データ要素のセットに伝搬され得る。対応するソースデータ要素の値が同じ対応する又は「垂直」の位置における第1のソースパックドデータからこれらのマスク済み結果データ要素に記憶される、いわゆる「垂直」のオペレーションではなく、最も近い前の下位のアンマスクド結果データ要素の値がこれらのマスク済み結果データ要素のそれぞれに記憶され得る、いわゆる「水平」のオペレーションが実行され得ることに留意されたい。
位置6における次の最上位の結果データ要素(A6)が、アンマスクド結果データ要素であり、第1のソースパックドデータオペランドの位置6における対応するデータ要素(A6)の値を記憶する。次の最上位の結果データ要素(すなわち、位置7における)が、マスク済み結果データ要素であり、マスクドマスク要素(例えば、0の値を有する)に対応する。位置6におけるアンマスクド結果データ要素(A6)が、結果パックドデータオペランドの最上位の端部又はビット位置に最も近いアンマスクド結果データ要素である。位置7における結果データ要素は、結果パックドデータオペランドの最高桁の端部又はビット位置と、その最高桁の端部又はビット位置に最も近いアンマスクド結果データ要素(例えば、位置6におけるA6)との間における1つ又は複数のマスクド結果データ要素(この場合は、単一のマスクド結果データ要素)のセットを表す。いくつかの実施形態において、最も近い下位のアンマスクド結果データ要素、この例においては位置6におけるアンマスクド結果データ要素A6、の値は、位置7におけるこの上位のマスク済み結果データ要素に記憶され得る。例えば、示されているように、最も近い下位のアンマスクド結果データ要素(A6)の値は、位置7における最上位のマスク済み結果データ要素に伝搬され得る。
最下位のソース要素を最下位のマスクド結果データ要素に記憶する、伝搬を有するマスクドソース要素記憶命令の特定の例示的な実施形態の擬似コードが、以下に列挙され、当該命令は、MULTISRCSTRPROPZEROと称される。MASKがソースマスク(例えば、ソースマスク316)である。SRC1が、結果パックドデータオペランドのゼロ又は1以上の最下位のマスクド要素のセットに記憶される単一の最下位のデータ要素を有する第2のソースパックドデータオペランド(例えば、オペランド312)である。SRC2が、デスティネーションに記憶され又は伝搬される複数の要素を有する第1のソースパックドデータオペランド(例えば、オペランド310)である。DSTが、結果パックドデータオペランド(例えば、オペランド314)を記憶し得るデスティネーションである。様々な実施形態において、SRC1、SRC2、及びDSTはそれぞれ、128ビット(例えば、複数のxmmレジスタ)、256ビット(例えば、複数のymmレジスタ)、又は512ビット(例えば、複数のzmmレジスタ)であり得るが、本願発明の範囲はそのように限定されない。代替的な実施形態において、複数の他のサイズのレジスタが用いられてよく、及び/又は、1つ又は複数のソースオペランドがパックドデータレジスタの代わりに、メモリ位置又は他の記憶位置から取り出され得る。加えて、複数の他の実施形態において、複数の明示的なソースオペランドのうちの1つが、デスティネーションオペランドとして暗黙的に再利用され得る。コードにおいて、「i」が複数のオペランド内の位置カウンタであり、「i++」がインクリメントを意味し、VLが第1のソースパックドデータオペランド内のデータ要素の数であり、tmp_valがテンポラリ変数である。データは、いくつかの例を挙げると、バイト、ワード、ダブルワード、クワッドワード、単精度、又は倍精度であってよい。MULTISRCSTRPROPZERO MASK, SRC1,SRC2,DST
tmp_val=SRC1[0];
for(i=0;i<VL;i++){
if(MASK[i]== 1)tmp_val=SRC2[i];
DST[i]=tmp_val;}
図4は、最上位のソース要素を最下位のマスクド結果データ要素に記憶する、伝搬を有するマスクド対応ソース要素記憶オペレーション436の実施形態を示すブロック図であり、当該オペレーション436は命令の実施形態に応じて実行され得る。この実施形態において、第2のソースパックドデータオペランド412の単一の最上位のデータ要素(X7)の値が、ゼロ又は1以上(例えば、示された例においては3)の最下位のマスク済み結果データ要素432のセットの複数の値用に用いられる。
命令は、第1のソースパックドデータオペランド410、第2のソースパックドデータオペランド412、及びソースマスク416を指定し(例えば、明示的に指定し)てよく、又はそうでなければ、示し(例えば、暗黙的に示し)てよい。第1のソースパックドデータオペランド、第2のソースパックドデータオペランド(以下にて言及される複数の差異とは別に)、及びソースマスクは、(例えば、図3について)前述の複数の特性及び変動のうちの何れかを選択的に有し得る。
この実施形態において、第2のソースパックドデータオペランド412は、その値が、結果パックドデータオペランド414におけるゼロ又は1以上(例えば、示された例においては3)の最下位又は最低桁のマスク済み結果データ要素432用に用いられ(例えば、それらに記憶され)得る単一の最上位又は最高桁のデータ要素(X7)を提供する。以下にさらに説明されるように、パックドデータオペランドの最上位の位置に単一のデータ要素(例えば、X7)を提供することは、アルゴリズム的観点から、複数の特定の実装(例えば、増加ループをベクトル化する場合)に対して利点を与え得る。しかし、本願発明の範囲は複数のそのような実装に、又はこのように単一のデータ要素(X7)を提供することに限定されない。
結果パックドデータオペランド414は、命令の実施形態に応じて及び/又はその結果として、デスティネーション記憶位置において、(例えば、実行ユニット406により)生成され、記憶され得る。8つの結果データ要素は、右の最下位の端部又はビット位置431から左の最上位の端部又はビット位置433に移動する場合、データ要素位置0から7を占有する。示された例示的な実施形態において、位置3における結果データ要素(A3)は、アンマスクドマスク要素(例えば、1の値を有する)に対応し、最下位の(例えば、最右の)アンマスクド結果データ要素及び/又は最下位の端部又はビット位置に最も近いアンマスクド結果データ要素である。432で示されているように、示された例示的な実施形態において、3つの最下位又は最右の結果データ要素(すなわち、位置0から2において)は、最下位の端部又はビット位置と位置3における最下位のアンマスクド結果データ要素(A3)との間におけるマスクド結果データ要素のセットを表す。この実施形態において、第2のソースパックドデータオペランド412の単一の最上位又は最高桁のデータ要素(X7)の値は、結果パックドデータの位置3において最初に遭遇した又は最下位のアンマスクド結果データ要素(A3)の前の3つの全ての最下位のマスク済み結果データ要素に記憶される。この実施形態において、X7は、これらの最下位のマスク済み結果データ要素のために用いられる予め定められた値である。位置3における次の最上位の結果データ要素(A3)は、アンマスクド結果データ要素であり、対応するデータ要素(A3)の値を第1のソースパックドデータオペランドの位置3に記憶する。最下位のデータ要素(X0)の代わりに、最上位のデータ要素(X7)の使用に関するこれらの差異とは別に、結果パックドデータオペランド414は、前述の図3の結果パックドデータオペランド314の複数の特性及び変動のうちの何れかを選択的に有し得る。
最上位のソース要素を最下位のマスクド結果データ要素を記憶する、伝搬を有するマスクドソース要素記憶命令の特定の例示的な実施形態の擬似コードが、以下に列挙され、当該命令は、MULTISRCSTRPROPUPPERと称される。SRC1が、結果パックドデータオペランドのゼロ又は1以上の最下位のマスクド要素のセットに記憶される単一の最上位のデータ要素を有するソースパックドデータオペランド(例えば、オペランド412)である。そうでない場合、MASK、SRC1、SRC2、DST、VL、及び他のパラメータが、前述のMULTISRCSTRPROPZERO命令に示されているような複数の特性及び変動と同じものを有し得る。MULTISRCSTRPROPUPPER MASK,SRC1,SRC2,DST
tmp_val=SRC1[VL−1];
for(i=0;i<VL;i++){
if(MASK[i]==1)tmp_val=SRC2[i];
DST[i]=tmp_val;}
図5は、最下位のマスクド結果データ要素を変更されずに残す、伝搬を有するマスクド対応ソース要素記憶オペレーション538の実施形態を示すブロック図であり、当該オペレーション538は、命令の実施形態に応じて実行され得る。この実施形態において、最低桁のアンマスクド結果データ要素(例えば、示された例においては位置3におけるA3)の前のゼロ又は1以上(例えば、示された例においては3)の最下位のマスクド結果データ要素532のセットが、変更されずに残され得る(例えば、デスティネーション記憶位置の複数の初期値が変更されない場合がある)。
命令は、第1のソースパックドデータオペランド510とソースマスク516とを指定し(例えば、明示的に指定し)てよく、又はそうでなければ示し(例えば、暗黙的に示し)てよい。第1のソースパックドデータオペランド510及びソースマスク516は、(例えば、図3−4について)前述の複数の特性及び変動のうちの何れかを選択的に有し得る。この実施形態において、(例えば、第2のソースオペランド312又は412のような)第2のソースオペランドが最下位のマスクド結果データ要素532のセットのために用いられる単一の値を提供する必要はない。
結果パックドデータオペランド514は、命令又はオペレーションの実施形態に応じて及び/又はその結果として、デスティネーション記憶位置において、(例えば、実行ユニット506により)生成され、記憶され得る。最下位の端部又はビット位置531が右に示され、最上位の端部又はビット位置533が左に示される。前のように、示された例示的な実施形態において、位置3において結果データ要素(A3)は、アンマスクドマスク要素(例えば、1の値を有する)に対応し、最下位(例えば、最右)のアンマスクド結果データ要素である。532において示されたように、位置0から2における3つの最下位(最右)の結果データ要素が、マスクド結果データ要素のセットを表し、それらは、最下位の端部又はビット位置と位置3における最下位のアンマスクド結果データ要素(A3)との間にある。この実施形態において、位置0から2におけるこれらの最下位(例えば、最右)のマスクド結果データ要素の3つの全てが変更されずに残され得る。例えば、デスティネーション記憶位置(例えば、レジスタ)における最初の又は開始データ要素は、オペレーション/命令により、変更されずに残されてよく、及び/又は、更新されなくてよい。例として、デスティネーション記憶位置は、3つの最下位のデータ要素位置に、データ要素R0からR2を最初に記憶し得る。オペレーション/命令の後、データ要素R0からR2は、3つの最下位のデータ要素位置に記憶された状態を維持し得る。上述の複数の差異を除けば、結果パックドデータオペランド514は、(例えば、図3から4について)前述の複数の特性及び変動のうちの何れかを選択的に有し得る。
変更されずに残す、伝搬を有するマスクドソース要素記憶命令の特定の例示的な実施形態の擬似コードが、以下に列挙され、当該命令は、MULTISRCSTRPROPUNと称される。この実施形態において、第2のソースオペランド(例えば、オペランド312、412)が、結果パックドデータオペランドのゼロ又は1以上の最下位マスクド要素のセットに記憶される単一のデータ要素を提供する必要はない。この実施形態において、SRC1が、デスティネーションに記憶され又は伝搬される複数の要素を有する第1のソースパックドデータオペランド(例えば、オペランド510)である。SRC1、MASK、DST、VLは、前述のMULTISRCSTRPROPZERO及びMULTISRCSTRPROPUPPER命令に示されているような複数の特性及び変動と同じものを有し得る。この実施形態において、第1の最下位のアンマスクド結果データ要素の前のDSTの最下位のマスクド結果データ要素が、変更されないままであり得る。MULTISRCSTRPROPUN MASK,SRC1,DST
for([i=0;i<VL;i++]{
if(MASK[i]==1)break;//最下位のアンマスクド位置を探す
else*DST[i]remains unchanged*}
for(;i<VL;i++){//iが最下位のアンマスクド位置から続く
if(MASK[i]==1)tmp_val=SRC1[i];
DST[i]=tmp_val;}
図6は、最下位のソース要素を最上位のマスクド結果データ要素に記憶する、逆方向の、伝搬を有するマスクド対応ソース要素記憶オペレーション640の実施形態を示すブロック図であり、オペレーション640は、命令の実施形態に応じて実行され得る。この実施形態において、第2のソースパックドデータオペランド612の最下位のデータ要素(X0)の値が、最上位のアンマスクド結果データ要素(例えば、示された例においては、位置6におけるA6)の前のゼロ又は1以上(例えば、示された例においては1)の最上位のマスク済み結果データ要素632のセットの複数の値用に用いられ得る。
命令は、第1のソースパックドデータオペランド610、第2のソースパックドデータオペランド612、及びソースマスク616を指定し(例えば、明示的に指定し)てよく、又はそうでなければ、示し(例えば、暗黙的に示し)てよい。第1のソースパックドデータオペランド、第2のソースパックドデータオペランド、及びソースマスクは、(例えば、図3から4について)前述の複数の特性及び変動のうちの何れかを選択的に有し得る。この例示的な実施形態において、第2のソースパックドデータオペランド612は、最上位のマスク済み結果データ要素632に記憶される最下位のデータ要素(X0)を有する。
結果パックドデータオペランド614は、命令又はオペレーションの実施形態に応じて、及び/又は、その結果として、デスティネーション記憶位置において、(例えば、実行ユニット606により)生成され、記憶され得る。最下位の端部又はビット位置631が右に示され、最上位の端部又はビット位置633が左に示される。この実施形態において、オペレーションは、逆方向の、伝搬を有する記憶オペレーションであり、そのオペレーションにおいて、結果データ要素632のセットが、最下位のセットの代わりに、最上位のセットであり、伝搬が上位のデータ要素位置から下位のデータ要素位置に行われる。示された例示的な実施形態において、位置6における結果データ要素(A6)は、最上位のアンマスクド結果データ要素及び/又は最上位の端部又はビット位置(例えば、図示の左)に最も近いアンマスクド結果データ要素に対応する。示された例示的な実施形態の632にて示されているように、位置7における最上位の結果データ要素は、最上位の端部又はビット位置と位置6における最上位のアンマスクド結果データ要素(A6)との間のゼロ又は1以上(例えば、この場合においては1)の最上位のマスクド結果データ要素のセットを表す。この実施形態において、第2のソースパックドデータオペランド612の単一の最下位又は最低桁のデータ要素(X0)の値は、これらの最上位のマスクド結果データ要素632の全てに記憶される。
位置6における最上位のアンマスクド結果データ要素(A6)は、第1のソースパックドデータオペランド610の位置6における対応するデータ要素(A6)の値を記憶する。
この実施形態において、上位のアンマスクド結果データ要素の複数の値が、次のアンマスクド結果データ要素まで、隣接する下位のマスクド結果データ要素に伝搬され又は記憶される。示された例において、位置4及び5における次の2つの下位の結果データ要素はまた、マスク済み結果データ要素である。634において示されているように、位置6における最も近い上位のアンマスクド結果データ要素(A6)の値は、位置4及び5におけるマスクド結果データ要素のそれぞれに(この実施形態においては、ビット桁を減らす方向に)伝搬されてよく、又はそうでなければ記憶されてよい。
位置3における次の下位のデータ要素が、アンマスクド結果データ要素であり、対応するソースデータ要素(A3)の値を記憶する。位置0から2における次の3つの最下位データ要素は、マスクド結果データ要素であり、最も近い上位のアンマスクド結果データ要素、この場合は位置3における結果データ要素(A3)、の値を記憶する。
図6の実施形態では、第2のソースパックドデータオペランド612から最下位のデータ要素(X0)を用いる場合を示す。別の実施形態において、最上位のデータ要素(X7)は、選択的に用いられ得る。さらに別の実施形態において、最上位のマスクド結果データ要素は、変更されずに残されてよく、第2のソースオペランド612は、選択的に省略されてよい。
最下位のソース要素を最上位のマスクド結果データ要素に記憶する、逆方向の、伝搬を有するマスクドソース要素記憶命令の特定の例示的な実施形態の擬似コードが、以下に列挙され、当該命令は、REVMULTISRCSTRPROPZEROと称される。この命令は、上位のアンマスクド結果データ要素から下位のマスクド結果データ要素に、値の逆方向の伝搬又は記憶を用いる。コードにおいて、「i−」がデクリメントを意味し、i>=0が、「i」にゼロより大きい又はそれに等しいという条件を付ける。この実施形態において、MASK、SRC1、SRC2、DST、VLは、前述のMULTISRCSTRPROPZEROとMULTISRCSTRPROPUPPER命令に示されているような複数の特性及び変動と同じものを有し得る。複数の他の実施形態において、SRC1から最下位のデータ要素を用いる代わりに、SRC1から最上位のデータ要素が選択的に用いられてよく、又は、DSTにおける最初の最上位のマスクドデータ要素が変更されずに残されてよい。REVMULTISRCSTRPROPZERO MASK,SRC1,SRC2,DST
tmp_val=SRC1[0];
for(i=VL−1;i>=0;i−−){
if(MASK[i]==1)tmp_val=SRC2[i];
DST[i]=tmp_val;}
図3から6は、いくつかの図示の例示的な実施形態を示す。しかし、本願発明の範囲は、単にこれらの実施形態に限定されない。複数の他の実施形態は、異なる数のデータ要素、マルチビットのマスク要素などを含み得る。加えて、図3から6は、最下位又は最上位のマスクド結果データ要素の複数の値用に用いられるべき単一のデータ要素又は値(例えば、X0)を提供する3つの異なる例示的な方式を示す。以下にてさらに説明されるように、これらの3つの異なる方式は、複数の異なる実装中において(例えば、ループのベクトル化中に)特定の利点を与え得る。しかし、様々な他の実施形態において、単一のデータ要素又は値は、パックドデータの、汎用レジスタの、メモリ位置の、又は別の記憶位置の、中間の位置に提供され得る。単一のデータ要素又は値が、特定の実装に対して命令長を過度に増加させないよう十分に小さい場合(例えば、8ビットバイトの要素又は16ビットワードの要素)、それは、次に、命令の即値に選択的に提供され得る。
本明細書にて開示されている複数の命令は、汎用命令である。当業者であれば、命令を用いるための様々な異なる方式及び目的が分かるであろう。いくつかの実施形態において、複数の命令は、例えば、条件によって修正されるスカラ値上の複数の計算を含む複数のループなどのループのベクトル化を容易にするのに用いられ得るが、本願発明の範囲はそのように限定されない。そのようなループの1つの例が以下の擬似コードに示される。x=x0;//xを初期値に設定する
for(i=0;i<N;i++){
if(condition[i])x=A[i];//条件が満たされた場合のみxを変更する
result[i]=computation(x,i);}
この擬似コードにおいて、xがスカラ値であり、「i」が反復の数である。この例において、計算は、そのスカラxの値に依存しており、特定の実装に応じて、反復の数「i」に潜在的に/選択的に依存し得る。
1つの可能な物理例としては二重状態のトリガがある。例えば、トリガが、特定のイベント(例えば、ボタンが押されている)によって別の状態にスイッチしてよく(例えば、0→1、又は、1→0)、当該トリガは、別の特定のイベント(例えば、そのボタンが再び押された)までその状態のままであってよい。マスクにおいて、複数の「1」が、トリガが別の状態(例えば、ボタンが押された)にスイッチされたときの複数の瞬間に対応する場合、複数の「0」が、トリガの状態が変更されないまま(例えば、ボタンがまだ再び押されていない)であることを意味し得る。1つの可能なグラフィックの例では、異なる色で描かれる複数の線である。当該複数の線によって境界が定義される。所望であれば、境界の間のスペースに複数の境界の複数の色で埋めることがあり得る。
本明細書にて開示される命令の実施形態が、この目的のために用いられ得る。各画素は、その関連色を有し得る。マスクにおける複数の「1」は、その自身の既に知られている色を有する境界画素を定義し得る。複数の「0」は、その色を変更する必要がある2つの境界の間の複数の画素を表し得る。複数の「0」の色は、まったく定義されなくてもよい。いくつかの実施形態において、本明細書にて開示される命令の実施形態では、(例えば、命令の順の形態の)右の境界、又は(例えば、命令の逆の形態の)左の境界の色で複数の「0」を埋めてよい。従って、ここのマスクは、伝搬の複数の境界を定義するのに用いられ得る。
1つの課題というと、目下、そのような複数のループをベクトル化することが、ベクトル化が完全に可能な場合、複数のx値における反復の間のデータ依存関係が主因として、概して、非常に困難になる傾向がある。一般に、そのようなループをベクトル化するべくコンパイラにより用いられることができる、データ依存関係を解決できる十分に短い一連の命令が存在しない。
有利には、本明細書にて開示される複数の命令は、例えば、上の擬似コードに示されているループのような複数のループのベクトル化を容易にするのに用いられ得る。例えば、これらの命令は、後続の複数のベクトル計算用に用いられることができる複数のx値のベクトルを生成するのに用いられ得る。上の擬似コードにおいて、xは最初に初期値に設定されることに留意されたい。ループの反復中、xの値は、その反復に対する条件が満たされるそれらの反復に対してのみ変更されることも留意されたい。条件が満たされない場合、xの値は変わらない。これは、結果パックドデータオペランドにおいて1つの位置から別の位置にデータ要素の値を伝搬することによって実行され得る。
いくつかの実施形態において、複数の反復の条件は、本明細書にて開示される複数の命令の実行の限界外において評価され得る。これらの条件の評価は、ソースマスクを生成するのに用いられてよく、本明細書にて開示される複数の命令の複数の実施形態により示されてよい。複数の開始の(例えば、最下位の)マスクド結果データ要素は、初期値(例えば、上の擬似コードの例の場合においては、x0)に設定され、第1のアンマスクド結果データ要素に伝搬され得る。その第1の(例えば、最下位の)アンマスクド結果データ要素は、別のソースオペランドから対応するデータ要素の値を与えられてよく、一連の値A[i](例えば、A0、A1、A2など)を記憶してよい。
制御マスク(下位の位置がjとして)における2つの後続のセットビットに関する複数のデータ要素位置の間の結果パックドデータには、複数の値A[j]が記憶されてよく、ここで、jは、条件(例えば、条件[j]が真である)を満たす。これは、ループの反復のセット上の複数のx値に対応し得る。
特定のコンセプトをさらに示すために、例示的なループが如何にベクトル化され得るかについて、以下の例示的な擬似コードを考慮する。この例は、multisrcstrpropzero命令を用いる。
broadcast x0,zmml//zmm1をx0で初期化する
k2=100...0//vcompressによる使用のために上位のマスクビットセットのみでマスクを作成する
for(i=0;i+=KL;i<N){//ここで、KLがベクトルにおける要素の数である
zmm_iterations={i+KL−1:i+KL−2:...:i+1:i}//KL反復数
k1[KL−1:0]=condition(i+KL−1:i)//条件に基づいてソースマスクを生成する
vmovaps&A[i],zmm2//x値のベクトルを準備する
multisrcstrpropzer k1,zmm1,zmm2,zmm3//最下位の要素バージョン
zmm4=computatiоn(zmm3,zmm_iteratiоns)//x及びiに対して計算を行う
result[i+KL−1:i]=zmm4//結果を記憶する
vcompress zmm3,zmm1{k2}//次のxのためにzmm3の上位の要素を用いる}
上において、zmm3レジスタの上位の値からループのKLベクトル反復の次のセットのx値を得るために、vcompress命令が用いられ、k2マスクは最上位のビットセットのみを有することに留意されたい。
別の実施形態において、次の反復のための準備でそのような追加のオーバヘッドの取り除きを補助するよう(例えば、vcompress命令及びk2マスクを取り除く)、multisrcstrpropupper命令は、multisrcstrpropzero命令の代わりに選択的に用いられ得る。multisrcstrpropupper命令を用いるループを実装する以下の例示的な擬似コードを考慮する。broadcast x0,zmm3//zmm3をx0で初期化するfor(i=0;i+=KL;i<N){//ここで、KLがベクトルにおける要素の数である zmm_iterations={i+KL−1:i+KL−2:...:i+1:i}//KL反復数
k1[KL−1:0]=condition(i+KL−1:i)//条件に基づいてソースマスクを生成する
vmovaps&A[i],zmm2//x値のベクトルを準備する
multisrcstrpropupper k1,zmm3,zmm2,zmm3//最上位の要素バージョン
zmm4=computation(zmm3,zmm_iterations)//x及びiに対して計算を行う
result[i+KL−1 :i]=zmm4//結果を記憶する}
この実施形態において、vcompress命令が取り除かれ、最上位のビットセットのみを有するk2マスクを生成又は用いる必要がないことに留意されたい。また、zmm3がソース及びデスティネーションの両方として、multisrcstrpropupper命令により用いられることに留意されたい。いくつかの実施形態において、ソースオペランド(例えば、レジスタ)をデスティネーションとして用いるよう命令には暗黙的である場合がある。multisrcstrpropupper及び/又はmultisrcstrpropzero命令の何れかの別の実施形態において、メモリ位置が、zmm2の代わりに複数の値を提供するべく、ソースオペランドとして用いられ得る。
さらに示すために、ベクトルがループの8回の反復のために用いられる上のループの実装の例を考慮する。最初に、複数の条件はソースマスクを生成するよう評価されてよく、開始データが、multisrcstrpropupper命令に示され得るソースオペランドにおいて確立されてよい。例えば、以下の複数のオペランド(左に最高桁を有し、右に最低桁を有する)を考慮する。k1=01001000//反復0から7のためのソースマスクの例示的な値
zmm2=A7:A6:A5:A4:A3:A2:A1:A0//反復0から7のためのA値
zmm3=x0:*:*:*:*:*:*:*//zmm3の最上位のデータ要素をx0で初期化する
//*が任意又は値に構わないことを示すmultisrcstrpropupper命令は、以下のように実行され得る。 multisrcstrpropupperk1,zmm3,zmm2,zmm3
multisrcstrpropupper命令の実行によって、以下の結果パックドデータオペランドが記憶され得る。zmm3=A6:A6:A3:A3:A3:x0:x0:x0
次に、8つの条件の別のセットが新たなソースマスクを生成するよう評価され得る。次の8つの反復の開始A値の新たなセットが新たなソースオペランドに記憶され得る。前のmultisrcstrpropupper命令の結果パックドデータオペランドは、新たな結果パックドデータの最下位のマスクドデータ要素用に用いられる単一の最上位のデータ要素を提供するべく、ソースオペランドとして示され得る。
例えば、以下の複数のオペランド(左に最高桁を有し、右に最低桁を有する)を考慮する。k1=10010100//反復8から15のための例示的なソースマスク
zmm2=A15:A14:A13:A12:A10:A9:A8//反復8から15のA値
zmm3=A6:A6:A3:A3:A3:x0:x0:x0//x値の前の結果ベクトルmultisrcstrpropupper命令は、以下のように実行され得る。 multisrcstrpropupper k1,zmm3,zmm2,zmm3
multisrcstrpropupper命令の実行によって、以下の結果パックドデータオペランドが記憶され得る。zmm3=A15:A12:A12:A12:A10:A10:A6:A6 この処理は通常、ループの後続の反復のために繰り返され得る。
図7は、パックドデータレジスタ708の適したセットの例示的な実施形態のブロック図である。複数のパックドデータレジスタは、ZMM0からZMM31と標識された32の512ビットのパックドデータレジスタを含む。示された実施形態において、下位の256ビットの下位16個のレジスタ、すなわち、ZMM0からZMM15が、YMM0からYMM15と標識された256ビットのパックドデータレジスタのそれぞれの上にエイリアスされ又はオーバーレイされるが、このことは必須ではない。
同様に、示された実施形態において、下位の128ビットのレジスタYMM0−YMM15は、XMM0からXMM15と標識された128ビットのパックドデータレジスタのそれぞれの上にエイリアスされ又はオーバーレイされるが、このことも必須ではない。512ビットのレジスタZMM0からZMM31は、512ビットのパックドデータ、256ビットのパックドデータ、又は128ビットのパックドデータを保持するよう動作可能である。256ビットのレジスタYMM0−YMM15は、256ビットのパックドデータ又は128ビットのパックドデータを保持するよう動作可能である。128ビットのレジスタXMM0からXMM15は、128ビットのパックドデータを保持するよう動作可能である。いくつかの実施形態においてにおいて、レジスタのそれぞれは、パックド浮動小数点データ又はパックド整数データの何れかを記憶するのに用いられ得る。少なくとも8ビットバイトデータと、16ビットワードデータと、32ビットダブルワードと、32ビット単精度浮動小数点データと、64ビットクワッドワードと、64ビット倍精度浮動小数点データとを含み、データ要素の異なるサイズがサポートされる。複数の代替的な実施形態において、異なる数のレジスタ及び/又は異なるサイズのレジスタが用いられ得る。複数のさらなる他の実施形態において、複数のレジスタが、より小さいレジスタ上により大きいレジスタをエイリアスすることを用いても用いなくてもよく、及び/又は、浮動小数点データを記憶するのに用いられても用いられなくてもよい。
図8は、マスクビット数がパックドデータ幅とパックドデータ要素幅とに依存することを示す表890である。128ビット、256ビット、及び512ビットのパックドデータ幅が示されているが、他の複数の幅も可能である。8ビットバイト、16ビットワード、32ビットダブルワード(dwords)又は単精度浮動小数点、及び64ビットクワッドワード(Qwords)又は倍精度浮動小数点のパックドデータ要素幅が考慮されるが、他の複数の幅も可能である。
図9は、パックドデータ・オペレーション・マスクレジスタ918の適したセットの例示的な実施形態のブロック図である。パックドデータ・オペレーション・マスクレジスタのそれぞれは、パックドデータオペレーションマスクを記憶するのに用いられ得る。示された実施形態において、セットは、k0からk7と標識された8つのレジスタを含む。複数の代替的な実施形態は、8つより少ないレジスタ(例えば、2、4、6など)又は8つより多いレジスタ(例えば、16、32など)の何れかを含み得る。示された実施形態において、レジスタのそれぞれは、64ビットである。複数の代替的な実施形態において、レジスタの幅は、64ビットより広いもの(例えば、80ビット、128ビットなど)又は64ビットより狭いもの(例えば、8ビット、16ビット、32ビットなど)の何れかであってよい。複数のレジスタは、周知技術を用いて異なる方式で実装されてよく、如何なる既知の特定の種類の回路にも限定されない。適したレジスタの複数の例として、複数の専用物理レジスタ、レジスタリネーミングを用いる動的割り当て物理レジスタ、及びこれらの組み合わせが含まれるが、これらに限定されない。例として、命令が、3ビット(例えば、3ビットフィールド)を用いて、8つのパックドデータ・オペレーション・マスクレジスタk0からk7のうちの何れか1つを符号化し又は指定してよい。複数の代替的な実施形態において、より少ない又はより多くのパックドデータ・オペレーション・マスクレジスタが存在する場合、より少ない又はより多くのビットの何れかがそれぞれ、用いられ得る。いくつかの実施形態において、マスクが、これらのレジスタの最下位ビットのに記憶され得るが、このことは必須ではない。
命令セットが1つ又は複数の命令フォーマットを含む。所与の命令フォーマットが、様々なフィールド(ビットの数、ビットの位置)を定義し、他のものから、実行されるべきオペレーション(オペコード)とそのオペレーションが実行されるオペランドとを指定する。いくつかの命令フォーマットが、命令テンプレート(又はサブフォーマット)の定義により、さらに分割される。例えば、所与の命令フォーマットの複数の命令テンプレートは、命令フォーマットのフィールド(含まれるフィールドは典型的には、同じ順序であるが、含まれるフィールドがより少ないので、少なくともいくつかは異なるビット位置を有する)の異なるサブセットを有するよう定義されてよく、及び/又は、異なる解釈される所与のフィールドを有するよう定義されてよい。従って、ISAの各命令は、所与の命令フォーマットを用いて表され(定義された場合、その命令フォーマットの複数の命令テンプレートのうちの所与の1つにおいて)、オペレーションとオペランドとを指定する複数のフィールドを含む。例えば、例示的なADD命令では、特定オペコードと、オペランド(ソース1/デスティネーション及びソース2)を選択するオペコードとオペランドフィールドを指定するオペコードフィールドを含む命令フォーマットとを有し、命令ストリームにおいてこのADD命令の発生が、特定のオペランドを選択するオペランドフィールドにおいて特定のコンテンツを有する。高度ベクトル拡張(AVX)(AVX1及びAVX2)と称され、ベクトル拡張(VEX)コーディングスキームを用いるSIMD拡張のセットが、リリース及び/又は公開されている(例えば、インテル(登録商標)64及びIA−32アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル、2011年10月参照、及び、インテル(登録商標)高度ベクトル拡張プログラミング・レファレンス、2011年6月参照)。例示的な命令フォーマット
本明細書にて説明されている命令の複数の実施形態が、異なるフォーマットで具現され得る。さらに、複数の例示的なシステム、アーキテクチャ、及びパイプラインが以下にて詳述される。命令の複数の実施形態が、そのようなシステム、アーキテクチャ、及びパイプライン上で実行され得るが、詳述されたそれらに限定されない。
汎用ベクトル向け命令フォーマット
ベクトル向け命令フォーマットが、ベクトル命令に適した命令フォーマットである(例えば、ベクトルオペレーションに固有の特定のフィールドが存在する)。ベクトル向け命令フォーマットを介してベクトル及びスカラオペレーションの両方がサポートされる複数の実施形態が説明される一方、複数の代替的な実施形態では、ベクトル向け命令フォーマットのベクトルオペレーションのみを用いる。
図10Aから図10Bは、本願発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びその命令テンプレートを示すブロック図である。図10Aは、本願発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそのクラスAの命令テンプレートを示すブロック図である一方、図10Bは、本願発明の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びそのクラスBの命令テンプレートを示すブロック図である。具体的に、クラスA及びクラスB命令のテンプレートが定義される汎用ベクトル向け命令フォーマット1000であり、それらの両方がノーメモリアクセス1005の命令テンプレートとメモリアクセス1020の命令テンプレートとを含む。汎用という用語は、ベクトル向け命令フォーマットのとの関連では、如何なる特定の命令セットとも紐付けされない命令フォーマットを指す。
ベクトル向け命令フォーマットが、32ビット(4バイト)又は64ビット(8バイト)のデータ要素幅(又はサイズ)を有する64バイトのベクトルオペランド長(又はサイズ)(従って、64バイトのベクトルは、16ダブルワードサイズの複数の要素、又は代替的に、8クワッドワードサイズの複数の要素の何れかからなる)、16ビット(2バイト)又は8ビット(1バイト)のデータ要素幅(又はサイズ)を有する64バイトのベクトルオペランド長(又はサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)又は8ビット(1バイト)のデータ要素幅(又はサイズ)を有する32バイトのベクトルオペランド長(又はサイズ)、及び32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)又は8ビット(1バイト)のデータ要素幅(又はサイズ)を有する16バイトのベクトルオペランド長(又はサイズ)をサポートする本願発明の複数の実施形態が説明される一方、複数の代替的な実施形態は、より多くの、より少ない、又は複数の異なるデータ要素幅(例えば、128ビット(16バイト)のデータ要素幅)を有する、より多くの、より少ない、及び/又は異なる複数のベクトルオペランドサイズ(例えば、複数の256バイトのベクトルオペランド)をサポートしてもよい。
図10AのクラスAの命令テンプレートは、以下を含む。1)ノーメモリアクセス1005の命令テンプレート内において、ノーメモリアクセス、フルラウンド制御型オペレーション1010の命令テンプレートと、ノーメモリアクセス、データ変換型オペレーション1015の命令テンプレートとが示され、2)メモリアクセス1020の命令テンプレート内において、メモリアクセス、一時的1025の命令テンプレートと、メモリアクセス、非一時的1030の命令テンプレートとが示される。図10BのクラスBの命令テンプレートは、以下を含む。1)ノーメモリアクセス1005の命令テンプレート内において、ノーメモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション1012の命令テンプレートと、ノーメモリアクセス、書き込みマスク制御VSIZE型オペレーション1017の命令テンプレートとが示され、2)メモリアクセス1020の命令テンプレート内において、メモリアクセス、書き込みマスク制御1027の命令テンプレートが示される。
汎用ベクトル向け命令フォーマット1000は、図10Aから10Bに示されている順序で以下に列挙される以下の複数のフィールドを含む。
フォーマットフィールド1040−このフィールドにおける特定の値(命令フォーマット識別子値)が、ベクトル向け命令フォーマットを一意に識別し、従って、命令ストリームのベクトル向け命令フォーマットにおいて命令が発生する。そのように、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットにとっては必須ではないという意味では選択的である。ベースオペレーションフィールド1042−そのコンテンツが異なるベースオペレーションを区別する。
レジスタインデックスフィールド1044−そのコンテンツが、直接又はアドレス生成を介して、ソース及びデスティネーションオペランドの位置を、それらがレジスタにあろうともメモリにあろうとも、指定する。これらは、PxQ(例えば、32x512、16x128、32x1024、64x1024)のレジスタファイルから、N個のレジスタを選択する十分なビット数を含む。一実施形態において、Nが最大、3つのソース及び1つのデスティネーションレジスタであり得る一方、複数の代替的な実施形態では、より多くの又はより少ないソース及びデスティネーションレジスタをサポートし得る(例えば、これらのソースのうちの1つがデスティネーションとしても動作する最大2つのソースをサポートしてよく、これらのソースのうちの1つがデスティネーションとしても動作する最大3つのソースをサポートしてよく、最大2つのソース及び1つのデスティネーションをサポートしてよい)。
修飾子フィールド1046−そのコンテンツが、メモリアクセスを指定する汎用ベクトル命令フォーマットにおける命令の発生を、指定しないものから、つまり、ノーメモリアクセス1005の命令テンプレートとメモリアクセス1020の命令テンプレートとの間で区別する。メモリアクセスオペレーションが、メモリ階層から読み取り及び/又はそれに書き込む(場合によっては、レジスタにおける値を用いるソース及び/又はデスティネーションアドレスを指定する)一方、非メモリアクセスオペレーションがそうしない(例えば、ソース及びデスティネーションがレジスタである)。一実施形態において、このフィールドはまた、メモリアドレス算出を実行する3つの異なる方式の間から選択する一方、複数の代替的な実施形態では、メモリアドレス算出を実行するより多くの又はより少ない異なる方式をサポートし得る。
増加オペレーションフィールド1050−そのコンテンツが、様々な異なるオペレーションのうちのどちらがベースオペレーションに加えて実行されるかを区別する。このフィールドはコンテキスト固有である。本願発明の一実施形態において、このフィールドは、クラスフィールド1068と、アルファフィールド1052と、ベータフィールド1054とに分割される。増加オペレーションフィールド1050は、共通グループのオペレーションが、2つ、3つ、又は4つの命令ではなく、単一の命令において実行されることを可能にする。
スケールフィールド1060−そのコンテンツが、メモリアドレス生成のため(例えば、2scale*index+baseを用いるアドレス生成のため)のインデックスフィールドのコンテンツのスケーリングを可能にする。
変位フィールド1062A−そのコンテンツが、メモリアドレス生成の一部として(例えば、2scale*index+base+displacementを用いるアドレス生成のために)用いられる。
変位係数フィールド1062B(変位フィールド1062Aが変位係数フィールド1062Bと直接並置することが、一方又は他方が用いられることを示すに留意されたい)−そのコンテンツが、アドレス生成の一部として用いられ、それが、メモリアクセスのサイズ(N)によりスケールされる変位係数を指定し、ここで、Nは、メモリアクセスにおけるバイト数である(例えば、2scale*index+base+scaled displacementを用いるアドレス生成のため)。冗長下位ビットが無視され、よって、変位係数フィールドのコンテンツが、有効なアドレスを算出するのに用いられる最終変位を生成するために、メモリオペランド合計サイズ(N)により乗算される。Nの値は、フルオペコードフィールド1074(後で本明細書にて説明される)及びデータ操作フィールド1054Cに基づいて、プロセッサハードウェアによりランタイムで決定される。変位フィールド1062A及び変位係数フィールド1062Bは、それらが、ノーメモリアクセス1005の命令テンプレートのために用いられず、及び/又は、異なる実施形態では、その2つのうちの1つのみを実装してよく、又はその2つのうちの1つも実装しないという意味で選択的である。
データ要素幅フィールド1064−そのコンテンツが、多数のデータ要素幅のうちのどちらが(いくつかの実施形態においては、全ての命令のために、他の実施形態においては、命令のうちの一部のみのために)用いられるかを区別する。このフィールドは、1つのデータ要素幅のみがサポートされる場合、及び/又は、データ要素幅がオペコードのいくつかの態様を用いてサポートされる場合、それが必須ではないという意味で選択的である。
書き込みマスクフィールド1070−そのコンテンツが、各データ要素位置ベースで、デスティネーションベクトルオペランドにおけるデータ要素位置がベースオペレーションと増加オペレーションとの結果を反映するか否かを制御する。クラスAの命令テンプレートが、併合書き込みマスクをサポートする一方、クラスBの命令テンプレートが、併合書き込みマスキング及びゼロ書き込みマスクの両方をサポートする。併合する場合、ベクトルマスクが、(ベースオペレーション及び増加オペレーションにより指定される)あらゆるオペレーションの実行中に、デスティネーションにおける任意のセットの要素を更新から保護することを可能にするが、他の一実施形態においては、デスティネーションの各要素の古い値を保存し、ここで、対応するマスクビットが0を有する。対照的に、ゼロを書き込む場合、ベクトルマスクが、(ベースオペレーション及び増加オペレーションにより指定される)あらゆるオペレーションの実行中に、デスティネーションにおける任意のセットの要素がゼロを書き込まれることを可能にするが、一実施形態においては、対応するマスクビットが0の値を有する場合、デスティネーションの要素が0に設定される。この機能性のサブセットが、実行されているオペレーションのベクトル長を制御する能力である(つまり、最初から最後の1つまで修正されている複数の要素のスパン)。しかし、修正される要素が連続であることは必須ではない。従って、書き込みマスクフィールド1070は、読み込み、記憶、算術、論理などを含み、部分的なベクトルオペレーションを可能にする。書き込みマスクフィールド1070のコンテンツが、用いられる書き込みマスクを保持する多数の書き込みマスクレジスタの1つを選択する(従って、書き込みマスクフィールド1070のコンテンツが、マスキングが実行されると間接的に識別する)本願発明の複数の実施形態が説明される一方、複数の代替的な実施形態では、その代わりに、又は追加的に、マスク書き込みフィールド1070のコンテンツがマスキングが実行されることを直接指定することを可能にする。
即値フィールド1072−そのコンテンツが即値の仕様を可能にする。このフィールドは、即値をサポートしない汎用ベクトル向けフォーマットの実装に存在せず、即値を用いない命令に存在しないという意味で選択的である。
クラスフィールド1068−そのコンテンツが、異なるクラスの命令の間で区別する。図10Aから図10Bを参照すると、このフィールドのコンテンツがクラスA及びクラスB命令の間で選択する。図10Aから図10Bにおいて、角の丸いマス目が用いられて特定の値がフィールドに存在することを示す(例えば、それぞれが図10Aから図10Bにある、クラスフィールド1068のクラスA 1068A及びクラスB 1068B)。
クラスAの命令テンプレート
非メモリアクセス1005のクラスAの命令テンプレートの場合、アルファフィールド1052は、RSフィールド1052Aとして解釈され、そのコンテンツが、異なる増加オペレーション種類のうちのどちらが実行されるかを区別する(例えば、ラウンド1052A.1及びデータ変換1052A.2はそれぞれ、ノーメモリアクセス、ラウンド型オペレーション1010と、ノーメモリアクセス、データ変換型オペレーション1015の命令テンプレートのために指定される)一方、ベータフィールド1054は、指定された型のオペレーションのどちらが実行されるかを区別する。ノーメモリアクセス1005の命令テンプレートにおいて、スケールフィールド1060、変位フィールド1062A、及び変位スケールフィールド1062Bは、存在しない。
ノーメモリアクセス命令テンプレート−フルラウンド制御型オペレーション
ノーメモリアクセスフルラウンド制御型オペレーション1010の命令テンプレートにおいて、ベータフィールド1054は、ラウンド制御フィールド1054Aとして解釈され、そのコンテンツが、静的ラウンドを提供する。説明されている本願発明の複数の実施形態において、ラウンド制御フィールド1054Aが、全浮動小数点例外抑制(SAE)フィールド1056とラウンドオペレーション制御フィールド1058とを含む一方、複数の代替的な実施形態では、これらのコンセプトの両方をサポートしてよく、同じフィールドに符号化してよく、又は、これらのコンセプト/フィールドのうちの一方又は他方のみを有してよい(例えば、ラウンドオペレーション制御フィールド1058のみをしてよい)。
SAEフィールド1056−そのコンテンツが、例外イベント報告を無効にするか否かを区別する。SAEフィールド1056のコンテンツが、抑制が可能であることを示した場合、所与の命令が何れの種類の浮動小数点例外フラグを報告せず、何れの浮動小数点例外処理部も起動しない。
ラウンドオペレーション制御フィールド1058−そのコンテンツが、ラウンドオペレーションのグループのうちのどちら(例えば、切り上げ、切り捨て、ゼロへの丸め、最近接数への丸め)を実行するかを区別する。従って、ラウンドオペレーション制御フィールド1058は、命令ベースでラウンドモードの変更を可能にする。プロセッサが複数のラウンドモードを指定する制御レジスタを含む本願発明の一実施形態において、ラウンドオペレーション制御フィールド1050のコンテンツは、そのレジスタ値を無効にする。
ノーメモリアクセス命令テンプレート−データ変換型オペレーション
ノーメモリアクセスデータ変換型オペレーション1015の命令テンプレートにおいて、ベータフィールド1054は、データ変換フィールド1054Bとして解釈され、そのコンテンツが、多数のデータ変換(例えば、データ変換なし、スウィズル、ブロードキャスト)のうちのどちらが実行されるかを区別する。
メモリアクセス1020のクラスAの命令テンプレートの場合、アルファフィールド1052は、追い出し示唆フィールド1052Bとして解釈され、そのコンテンツが、追い出し示唆のうちのどちらが用いられるかを区別する(図10Aにおいては、一時的1052B.1及び非一時的1052B.2がそれぞれ、メモリアクセス、一時的1025の命令テンプレート及びメモリアクセス、非一時的1030の命令テンプレートのために指定される)一方、ベータフィールド1054は、データ操作フィールド1054Cとして解釈され、そのコンテンツが、多数のデータ操作オペレーション(プリミティブとしても知られている)のうちのどちら(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、デスティネーションのダウンコンバージョン)が実行されるかを区別する。メモリアクセス1020の命令テンプレートは、スケールフィールド1060を含み、変位フィールド1062A又は変位スケールフィールド1062Bを選択的に含む。
ベクトルメモリ命令が、変換サポートにより、メモリからのベクトル読み込みと、メモリへのベクトル記憶とを実行する。通常の複数のベクトル命令と同様に、ベクトルメモリ命令が、データ要素単位の様式で、書き込みマスクとして選択されるベクトルマスクのコンテンツにより指示される、実際に伝送される複数の要素とともに、メモリから/へデータを伝送する。
メモリアクセス命令テンプレート−一時的
一時的データが、キャッシングから利益を得るのに十分に速やかに再利用される可能性が高いデータである。しかしながら、これは示唆であり、複数の異なるプロセッサが、その示唆を完全に無視することを含み、異なる方式でそれを実装し得る。
メモリアクセス命令テンプレート−非一時的
非一時的データが、第1のレベルのキャッシュにおいて、キャッシングから利益を得るのに十分に速やかに再利用される可能性が低いデータであり、削除の優先度を与えられるべきである。しかしながら、これは示唆であり、複数の異なるプロセッサが、その示唆を完全に無視することを含み、異なる方式でそれを実装し得る。
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド1052は、書き込みマスク制御(Z)フィールド1052Cとして解釈され、そのコンテンツが、書き込みマスクフィールド1070により制御される書き込マスキングが併合又はゼロ書き込みであるべきか否かを区別する。
非メモリアクセス1005のクラスBの命令テンプレートの場合、ベータフィールド1054の一部が、RLフィールド1057Aとして解釈され、そのコンテンツが、異なる増加オペレーション種類のうちのどちらが実行されるかを区別する(例えば、ラウンド1057A.1及びベクトル長(VSIZE)1057A.2がそれぞれ、ノーメモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション1012の命令テンプレート及びノーメモリアクセス、書き込みマスク制御、VSIZE型オペレーション1017の命令テンプレートのために指定される)一方、残りのベータフィールド1054が指定された型のオペレーションのうちのどちらが実行されるかを区別する。ノーメモリアクセス1005の命令テンプレートにおいて、スケールフィールド1060、変位フィールド1062A、及び変位スケールフィールド1062Bは、存在しない。
ノーメモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション1010の命令テンプレートにおいて、残りのベータフィールド1054は、ラウンドオペレーションフィールド1059Aとして解釈され、例外イベント報告が無効化され(所与の命令が何れの種類の浮動小数点例外フラグも報告せず、何れの浮動小数点例外処理部も起動しない)。
ラウンドオペレーション制御フィールド1059A−単にラウンドオペレーション制御フィールド1058として、そのコンテンツが、ラウンドオペレーションのグループのうちのどちら(例えば、切り上げ、切り捨て、ゼロへの丸め、最近接数への丸め)を実行するかを区別する。従って、ラウンドオペレーション制御フィールド1059Aは、命令ベースでラウンドモードの変更を可能にする。プロセッサが複数のラウンドモードを指定するための制御レジスタを含む本願発明の一実施形態において、ラウンドオペレーション制御フィールド1050のコンテンツがそのレジスタ値を無効にする。
ノーメモリアクセス、書き込みマスク制御、VSIZE型オペレーション1017の命令テンプレートにおいて、残りのベータフィールド1054は、ベクトル長フィールド1059Bとして解釈され、そのコンテンツが、多数のデータベクトル長のうちのどちら(例えば、128、256、又は512バイト)が実行されるかを区別する。
メモリアクセス1020のクラスBの命令テンプレートの場合、ベータフィールド1054の一部は、ブロードキャストフィールド1057Bとして解釈され、そのコンテンツが、ブロードキャスト型データ操作オペレーションが実行されるか否かを区別する一方、残りのベータフィールド1054は、ベクトル長フィールド1059Bとして解釈される。メモリアクセス1020の命令テンプレートは、スケールフィールド1060を含み、変位フィールド1062A又は変位スケールフィールド1062Bを選択的に含む。
汎用ベクトル向け命令フォーマット1000に関連して、フォーマットフィールド1040と、ベースオペレーションフィールド1042と、データ要素幅フィールド1064とを含むフルオペコードフィールド1074が示される。フルオペコードフィールド1074がこれらのフィールドの全てを含む一実施形態が示されている一方、それらの全てをサポートしない実施形態においては、フルオペコードフィールド1074は、これらのフィールドの全てより少ないフィールドを含む。フルオペコードフィールド1074は、オペレーションコード(オペコード)を提供する。
増加オペレーションフィールド1050、データ要素幅フィールド1064、及び書き込みマスクフィールド1070は、汎用ベクトル向け命令フォーマットにおいて命令ベースで指定されるこれらの特徴を可能にする。
書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、異なるデータ要素幅に基づいてマスクが適用されることを可能にする複数の型別の命令を生成する。
クラスA及びクラスB内で得られる様々な命令テンプレートは、複数の異なる状況に有益である。本願発明のいくつかの実施形態において、異なるプロセッサ、又は、プロセッサ内の異なるコアが、クラスAのみ、クラスBのみ、又は両方のクラスをサポートし得る。例えば、汎用計算向けの高性能汎用アウトオブオーダコアが、クラスBのみをサポートしてよく、主にグラフィックス及び/又はサイエンティフィック(スループット)計算向けのコアが、クラスAのみをサポートしてよく、両方向けのコアが、両方をサポートしてよい(勿論、両方のクラスからのテンプレート及び命令の全てを含むわけではないが、両方のクラスからのテンプレート及び命令の特定の組み合わせを有するコアが、本願発明の範囲内である)。また、単一のプロセッサが、複数のコアを含んでよく、それらの全ては、同じクラスをサポートし、又は、それらにおける異なるコアが異なるクラスをサポートする。例えば、別々のグラフィックスコアと汎用コアとを有するプロセッサにおいて、主にグラフィックス及び/又はサイエンティフィック計算向けのグラフィックスコアのうちの1つが、クラスAのみをサポートし得る一方、複数の汎用コアのうちの1つ又は複数は、アウトオブオーダ実行及びレジスタリネーミングを伴う、クラスBのみをサポートする汎用計算向けの高性能汎用コアであり得る。別々のグラフィックスコアを有しない別のプロセッサが、クラスA及びクラスBの両方をサポートするもう1つの汎用インオーダ又はアウトオブオーダコアを含み得る。勿論、1つのクラスからの複数の特徴はまた、本願発明の複数の異なる実施形態において、他のクラスに実装され得る。高水準言語で記述される複数のプログラムは、1)実行のために対象プロセッサによってサポートされるクラスの複数の命令のみを有する形式、又は2)全クラスの複数の命令の複数の異なる組み合わせを用いて記述される代替的な複数のルーチンを有し、コードを現在実行しているプロセッサによってサポートされる複数の命令に基づいて実行する、複数のルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式にされる(例えば、ジャストインタイムでコンパイルされ、又は静的にコンパイルされる)。
例示的な特定ベクトル向け命令フォーマット
図11AからDは、本願発明の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図11AからDは、位置、サイズ、インタープリテーション、及びフィールドの順序、並びにそれらのフィールドのうちのいくつかの値を指定するという意味で特定である特定ベクトル向け命令フォーマット1100を示す。特定ベクトル向け命令フォーマット1100は、x86命令セットを拡張するのに用いられてよく、従って、フィールドのいくつかは、既存のx86命令セット及びこれらの拡張(例えば、AVX)に用いられるものと同様又は同じである。このフォーマットは、拡張された既存のx86命令セットのプレフィックス符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、及び即値フィールドとともに整合性を維持する。図10A及びBからの複数のフィールドにマッピングされる図11AからDからの複数のフィールドが示されている。
本願発明の複数の実施形態が、汎用ベクトル向け命令フォーマット1000との関連で例示的な目的で、特定ベクトル向け命令フォーマット1100を参照して説明されているが、本願発明は、特記されている場合を除き、特定ベクトル向け命令フォーマット1100に限定されないことが理解されるべきである。例えば、汎用ベクトル向け命令フォーマット1000は、様々なフィールドの様々な可能なサイズを企図している一方、特定ベクトル向け命令フォーマット1100が特定のサイズのフィールドを有するものとして示されている。具体的な例として、データ要素幅フィールド1064が特定ベクトル向け命令フォーマット1100における1つのビットフィールドとして示される一方、本願発明はそのように限定されない(つまり、汎用ベクトル向け命令フォーマット1000は、他のサイズのデータ要素幅フィールド1064を企図する)。
汎用ベクトル向け命令フォーマット1000は、図11Aに示される順序で以下にて列挙される以下のフィールドを含む。EVEXプレフィックス(バイト0から3)1102−4バイトの形式で符号化される。
フォーマットフィールド1040(EVEXバイト0、ビット[7:0])−第1のバイト(EVEXバイト0)がフォーマットフィールド1040であり、0x62を保持する(本願発明の一実施形態においてベクトル向け命令フォーマットを区別するのに用いられる一意な値である)。
第2から第4のバイト(EVEXバイト1から3)は、特定の機能を提供する多数のビットフィールドを含む。
REXフィールド1105(EVEXバイト1、ビット[7−5])−EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、及び1057BEXバイト1、ビット[5]−B)からなる。EVEX.R、EVEX.X、及びEVEX.Bビットフィールドは、対応するVEXビットフィールドとして同じ機能性を提供し、1の補数形式を用いて符号化される。すなわち、ZMM0が1111Bと符号化され、ZMM15が0000Bと符号化される。命令の他のフィールドは、当技術分野では知られているように、下位3ビットのレジスタインデックス(rrr、xxx、bbb)を符号化し、これにより、Rrrr、Xxxx、及びBbbbが、EVEX.R、EVEX.X、及びEVEX.Bを加算することによって形成され得る。
REX'フィールド1010−これは、REX'フィールド1010の第1の部分であり、拡張された32のレジスタセットの上位16個又は下位16個の何れかを符号化するのに用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本願発明の一実施形態において、このビットは、以下に示されるように、他のものとともに、BOUND命令からを区別するべく(周知のx86の32ビットモードにおいて)、ビット反転フォーマットに記憶され、そのリアルオペコードバイトが62であるが、MOD R/Mフィールド(以下にて説明される)においてMODフィールドにおける11の値を受け取らないが、本願発明の代替的な複数の実施形態では、これ及び以下に示される他のビットを反転形式で記憶しない。1の値が、下位16個のレジスタを符号化するのに用いられる。言い換えれば、R'Rrrrが、他のフィールドから、EVEX.R'、EVEX.R、及び他のRRRを組み合わせて形成される。
オペコードマップフィールド1115(EVEXバイト1、ビット[3:0]−mmmm)−そのコンテンツが、暗黙の先頭のオペコードバイト(0F、0F 38、又は0F 3)を符号化する。
データ要素幅フィールド1064(EVEXバイト2、ビット[7]−W)−EVEX.Wという表記によって表される。EVEX.Wは、データ型(32ビットのデータ要素又は64ビットのデータ要素の何れか)の粒度(サイズ)を定義するのに用いられる。
EVEX.vvvv1120(EVEXバイト2、ビット[6:3]−vwv)−EVEX.vwvの役割は、以下を含み得る。1)EVEX.vwvは、反転(1の補数)の形式で指定された第1のソースレジスタオペランドを符号化し、2つ以上のソースオペランドを有する命令に有効である。2)EVEX.vvvvは、特定のベクトルシフトのために1の補数形式で指定されたデスティネーションレジスタオペランドを符号化する。又は、3)EVEX.vvvvは、何れのオペランドも符号化せず、フィールドは、留保され、1111bを保持するべきである。従って、EVEX.vvvvフィールド11120は、反転(1の補数)形式で記憶された第1のソースレジスタ指定子の4つの下位ビットを符号化する。命令に応じて、追加の異なるEVEXビットフィールドが32のレジスタの指定子サイズを拡張するのに用いられる。
EVEX.U1068クラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.U=0の場合、クラスA又はEVEX.U0を示し、EVEX.U=1の場合、クラスB又はEVEX.U1を示す。
プレフィックス符号化フィールド1125(EVEXバイト2、ビット[1:0]−pp)−ベースオペレーションフィールドに対して追加のビットを提供する。EVEXプレフィックス形式のレガシSSE命令に対するサポートを提供することに加えて、これは、SIMDプレフィックスを圧縮するという利益も有する(SIMDプレフィックスを表すのにバイトを要求するのではなく、EVEXプレフィックスは、2ビットのみを要求する)。一実施形態において、レガシ形式及びEVEXプレフィックス形式の両方のSIMDプレフィックス(66H、F2H、F3H)を用いるレガシSSE命令をサポートするために、これらのレガシSIMDプレフィックスは、SIMDプレフィックス符号化フィールドに符号化され、デコーダのPLAに提供される前にランタイムでレガシSIMDプレフィックスに拡張される(それにより、PLAは、これらのレガシ命令のレガシ及びEVEX形式の両方を修正せずに実行することができる)。より新たな命令が、EVEXプレフィックス符号化フィールドのコンテンツをオペコード拡張として直接用いることができるが、複数の特定の実施形態では、整合性のために同様の様式で拡張するが、これらのレガシSIMDプレフィックスにより指定される異なる意味を可能にする。代替的な実施形態では、2ビットのSIMDプレフィックス符号化をサポートするようにPLAを再設計してよく、従って、拡張を要求しない。
アルファフィールド1052(EVEXバイト3、ビット[7]−EH。EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control、及びEVEX.Nとしても知られており、αを用いても示される)−前述のように、このフィールドは、コンテキスト固有である。
ベータフィールド1054(EVEXバイト3、ビット[6:4]−SSS。EVEX.s2−0、EVEX.r2−0、EVEX.rrl、EVEX.LL0、EVEX.LLBとしても知られており、βββを用いても示される)−前述のように、このフィールドはコンテキスト固有である。
REX'フィールド1010−これは、残りのREX'フィールドであり、拡張された32のレジスタセットの上位16個又は下位16個の何れかを符号化するのに用いられ得るEVEX.Vビットフィールド(EVEXバイト3、ビット[3]−V)である。このビットはビット反転フォーマットで記憶される。1の値が、下位16個のレジスタを符号化するのに用いられる。言い換えれば、V'VVVVは、EVEX.VとEVEX.vvwとを組み合わせすることによって形成される。
書き込みマスクフィールド1070(EVEXバイト3、ビット[2:0]−kkk)−前述のように、そのコンテンツが、書き込みマスクレジスタにおけるレジスタのインデックスを指定する。本願発明の一実施形態において、特定の値EVEX.kkk=000は、特定の命令に対して書き込みマスクが用いられないことを示唆する特別の動作を有する(これは、ハードワイヤードされた全ての書き込みマスク又はマスキングハードウェアを回避するハードウェアを用いることを含む様々な方式で実装され得る)。
リアルオペコードフィールド1130(バイト4)は、オペコードバイトとしても知られている。オペコードの一部がこのフィールドに指定される。
MOD R/Mフィールド1140(バイト5)は、MODフィールド1142と、Regフィールド1144と、R/Mフィールド1146とを含む。前述のように、MODフィールド1142のコンテンツは、メモリアクセスと非メモリアクセスオペレーションとの間で区別する。Regフィールド1144の役割は、デスティネーションレジスタオペランド又はソースレジスタオペランドの何れかを符号化する、又は、オペコード拡張として扱われ、何れの命令オペランドを符号化するのに用いられないという2つの状況に要約されることができる。R/Mフィールド1146の役割は、メモリアドレスを参照する命令オペランドを符号化すること、又は、デスティネーションレジスタオペランド又はソースレジスタオペランドの何れかを符号化することを含み得る。
スケール、インデックス、ベース(SIB)バイト(バイト6)−前述のように、スケールフィールド1050のコンテンツは、メモリアドレス生成のために用いられる。SIB.xxx1154及びSIB.bbb1156−これらのフィールドのコンテンツは、レジスタインデックスXxxx及びBbbbに関連して前に参照されている。
変位フィールド1062A(バイト7から10)−MODフィールド1142が10を保持する場合、バイト7から10が変位フィールド1062Aであり、レガシ32ビット変位(disp32)と同じように機能し、バイト粒度で機能する。
変位係数フィールド1062B(バイト7)−MODフィールド1142が01を保持する場合、バイト7が変位係数フィールド1062Bである。このフィールドの位置は、レガシx86命令セット8ビット変位(disp8)の位置と同じく、バイト粒度で機能する。disp8が拡張された符号であり、−128から127バイトのオフセットの間のみでアドレスすることができ、複数の64バイトのキャッシュラインに関して、disp8は、実に有用な4つの値である−128、−64、0、及び64にのみ設定可能な8ビットを用い、より広範囲が必要とされる場合が多いことから、disp32が用いられるが、しかし、disp32は、4バイトを要求する。disp8及びdisp32とは対照的に、変位係数フィールド1062Bは、disp8の再解釈であり、変位係数フィールド1062Bを用いる場合、実際の変位が、メモリオペランドアクセスのサイズ(N)により乗算される変位係数フィールドのコンテンツにより決定される。この種類の変位は、disp8*Nと称される。これは、平均命令長(変位に用いられる単一のバイトだが、かなりより広範囲を有する)を減少させる。そのような圧縮された変位は、有効変位がメモリアクセスの粒度の倍数という前提に基づくものであり、よって、アドレスオフセットの冗長下位ビットが符号化される必要はない。言い換えれば、変位係数フィールド1062Bは、レガシx86命令セット8ビット変位を置換する。従って、変位係数フィールド1062Bは、disp8がdisp8*Nに多重定義されることを唯一の例外として、x86命令セット8ビット変位と同じ方式で符号化される(よって、ModRM/SIB符号化規則において変更はない)。言い換えれば、変更は、符号化規則又は符号化長にないが、ハードウェアによる変位値のインタープリテーションにのみある(バイト単位のアドレスオフセットを得るべく、メモリオペランドのサイズにより変位をスケールする必要がある)。即値フィールド1072は、前述のように動作する。
フルオペコードフィールド
図11Bは、本願発明の一実施形態に係る、フルオペコードフィールド1074を作成する特定ベクトル向け命令フォーマット1100の複数のフィールドを示すブロック図である。
具体的に、フルオペコードフィールド1074は、フォーマットフィールド1040と、ベースオペレーションフィールド1042と、データ要素幅(W)フィールド1064とを含む。ベースオペレーションフィールド1042は、プレフィックス符号化フィールド1125と、オペコードマップフィールド1115と、リアルオペコードフィールド1130とを含む。
レジスタインデックスフィールド
図11Cは、本願発明の一実施形態に係る、レジスタインデックスフィールド1044を作成する特定ベクトル向け命令フォーマット1100の複数のフィールドを示すブロック図である。具体的に、レジスタインデックスフィールド1044は、REXフィールド1105と、REX'フィールド1110と、MODR/M.regフィールド1144と、MODR/M.r/mフィールド1146と、WWフィールド1120と、xxxフィールド1154と、bbbフィールド1156とを含む。
増加オペレーションフィールド
図11Dは、本願発明の一実施形態に係る、増加オペレーションフィールド1050を作成する特定ベクトル向け命令フォーマット1100の複数のフィールドを示すブロック図である。クラス(U)フィールド1068が0を含む場合、EVEX.U0(クラスA 1068A)を意味し、1を含む場合、EVEX.U1(クラスB 1068B)を意味する。U=0でMODフィールド1142が11を含む(ノーメモリアクセスオペレーションを意味する)場合、アルファフィールド1052(EVEXバイト3、ビット[7]−EH)がrsフィールド1052Aとして解釈される。rsフィールド1052Aが一の1を含む場合(ラウンド1052A.1)、ベータフィールド1054(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド1054Aとして解釈される。ラウンド制御フィールド1054Aは、1つのビットSAEフィールド1056と2つのビットラウンドオペレーションフィールド1058とを含む。rsフィールド1052Aが一の0を含む場合(データ変換1052A.2)、ベータフィールド1054(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ変換フィールド1054Bとして解釈される。U=0でMODフィールド1142が00、01、又は10を含む(メモリアクセスオペレーションを意味する)場合、アルファフィールド1052(EVEXバイト3、ビット[7]−EH)は、追い出し示唆(EH)フィールド1052Bとして解釈され、ベータフィールド1054(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド1054Cとして解釈される。
U=1の場合、アルファフィールド1052(EVEXバイト3、ビット[7]−EH)は、書き込みマスク制御(Z)フィールド1052Cとして解釈される。U=1でMODフィールド1142が11を含む(ノーメモリアクセスオペレーションを意味する)場合、ベータフィールド1054(EVEXバイト3、ビット[4]−S0)の一部が、RLフィールド1057Aとして解釈され、一の1を含む場合(ラウンド1057A.1)、残りのベータフィールド1054(EVEXバイト3、ビット[6−5]−S2−1)がラウンドオペレーションフィールド1059Aとして解釈される一方、RLフィールド1057Aが一の0を含む場合(VSIZE1057.A2)、残りのベータフィールド1054(EVEXバイト3、ビット[6−5]−S2−1)は、ベクトル長フィールド1059B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。U=1でMODフィールド1142が00、01、又は10を含む(メモリアクセスオペレーションを意味する)場合、ベータフィールド1054(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド1059B(EVEXバイト3、ビット[6:5]−L1−0)及びブロードキャストフィールド1057B(EVEXバイト3、ビット[4]−B)として解釈される。
例示的なレジスタアーキテクチャ
図12は、本願発明の一実施形態に係るレジスタアーキテクチャ1200のブロック図である。示されている実施形態において、32個の512ビット幅のベクトルレジスタ1210が存在し、これらのレジスタは、zmm0からzmm31として参照される。下位256ビットの下位16個のzmmレジスタは、レジスタymm0から16上にオーバーレイされる。下位128ビットの下位16個のzmmレジスタ(下位128ビットのymmレジスタ)は、レジスタxmm0から15上にオーバーレイされる。特定ベクトル向け命令フォーマット1100は、以下の表に示されるように、オーバーレイされたこれらのレジスタファイル上で動作する。
言い換えれば、ベクトル長フィールド1059Bは、最大長と、1つ又は複数の他のより短い長さとの間で選択し、それぞれのそのようなより短い長さは、前の長さの半分の長さであり、ベクトル長フィールド1059Bを有しない命令テンプレートは、最大のベクトル長で動作する。さらに、一実施形態において、特定ベクトル向け命令フォーマット1100のクラスBの命令テンプレートは、パックド又はスカラ単/倍精度浮動小数点データとパックド又はスカラ整数データとに対して動作する。複数のスカラオペレーションが、zmm/ymm/xmmレジスタ内の最下位のデータ要素位置において実行されるオペレーションであり、上位のデータ要素位置は、実施形態に応じて、命令前と同じ状態で残される又はゼロを書き込まれるの何れかである。
書き込みマスクレジスタ1215−示される実施形態において、8つの書き込みマスクレジスタ(k0からk7)が存在し、それぞれのサイズが64ビットである。代替的な実施形態において、書き込みマスクレジスタ1215のサイズは、16ビットである。前述のように、本願発明の一実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして用いられることができず、k0を通常示す符号化が、書き込みマスクのために用いられる場合、それは、0xFFFFのハードワイヤードされた書き込みマスクを選択し、その命令のための書き込みマスキングを効果的に無効にする。
汎用レジスタ1225−示されている実施形態において、メモリオペランドをアドレスするのに用いられる16個の64ビットの汎用レジスタが、既存のx86アドレスモードとともに存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及びR8からR15という名称により参照される。
MMXパックド整数フラットレジスタファイル1250がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)1245−示されている実施形態において、x87スタックは、x87命令セット拡張を用いる32/64/80ビットの浮動小数点データに対して、スカラ浮動小数点オペレーションを実行するのに用いられる8個の要素スタックである一方、MMXレジスタは、64ビットのパックド整数データに対してオペレーションを実行するとともに、MMXとXMMレジスタとの間で実行されたいくつかのオペレーションのための複数のオペランドを保持するのに用いられる。
本願発明の代替的な複数の実施形態が、より広い又はより狭いレジスタを用い得る。さらに、本願発明の代替的な複数の実施形態では、より多くの、より少ない、又は異なるレジスタファイル及びレジスタを用い得る。
例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ
複数のプロセッサコアが、異なる目的のために、異なる方式で異なるプロセッサにおいて実装され得る。例えば、複数のそのようなコアの実装は、1)汎用計算向けの汎用インオーダコアと、2)汎用計算向けの高性能汎用アウトオブオーダコアと、3)主にグラフィックス及び/又はサイエンティフィック(スループット)計算向けの特別用途コアとを含み得る。複数の異なるプロセッサの実装は、1)汎用計算向けの1つ又は複数の汎用インオーダコア及び/又は汎用計算向けの1つ又は複数の汎用アウトオブオーダコアを含むCPUと、2)主にグラフィックス及び/又はサイエンティフィック(スループット)向けの1つ又は複数の特別用途コアを含むコプロセッサとを含み得る。複数のそのような異なるプロセッサは、1)CPUとは別々のチップ上のコプロセッサと、2)CPUと同じパッケージにおける別々のダイ上のコプロセッサと、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、場合によっては、統合グラフィックス及び/又はサイエンティフィック(スループット)ロジック又は特別用途コアなどの特定用途ロジックと称される)と、4)同じダイ上の説明されているCPU(場合によってはアプリケーションコア又はアプリケーションプロセッサと称される)、上述したコプロセッサ、及び追加の機能性を含み得るチップ上のシステムとを含み得る異なるコンピュータシステムアーキテクチャをもたらす。複数の例示的なコアアーキテクチャが、次に説明され、次いで、複数の例示的なプロセッサとコンピュータアーキテクチャが説明される。
例示的なコアアーキテクチャ インオーダ及びアウトオブオーダコアのブロック図
図13Aは、本願発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図13Bは、本願発明の複数の実施形態に係るプロセッサに含まれるインオーダーアーキテクチャコアの例示的な複数の実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図13Aから図13Bの実線のボックスが、インオーダパイプライン及びインオーダコアを示す一方、選択的な追加の破線のボックスが、レジスタリネーミング、アウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様が説明される。
図13Aにおいて、プロセッサパイプライン1300が、フェッチステージ1302と、長復号ステージ1304と、復号ステージ1306と、割り当てステージ1308と、リネーミングステージ1310と、スケジューリング(ディスパッチ又は発行としても知られている)ステージ1312と、レジスタ読み取り/メモリ読み取りステージ1314と、実行ステージ1316と、ライトバック/メモリ書き込みステージ1318と、例外処理ステージ1322と、コミットステージ1324とを含む。
図13Bは、実行エンジンユニット1350に結合されるフロントエンドユニット1330を含むプロセッサコア1390を示し、実行エンジンユニット1350及びフロントエンドユニット1330の両方ともメモリユニット1370に結合される。コア1390は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、若しくはハイブリッド又は代替的なコアタイプであってよい。さらに別の選択肢として、コア1390は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用計算グラフィックス処理ユニット(GPGPU)コア、グラフィックスコア又は同様のものなどの特別用途コアであってよい。
フロントエンドユニット1330は、命令キャッシュユニット1334に結合される分岐予測ユニット1332を含み、命令キャッシュユニット1334は、命令トランスレーションルックアサイドバッファ(TLB)1336に結合され、命令TLB1336は、命令フェッチユニット1338に結合され、命令フェッチユニット1338は、復号ユニット1340に結合される。復号ユニット1340(デコーダ)は、命令を復号してよく、元の命令から復号された、又はそうでなければ、元の命令を反映した、若しくは元の命令から派生された1つ又は複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成してよく。復号ユニット1340は、様々な異なるメカニズムを用いて実装され得る。適したメカニズムの複数の例としては、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)などを含むが、これらに限定されない。一実施形態において、コア1390は、マイクロコードROM、又は、特定のマクロ命令のためのマイクロコードを(例えば、復号ユニット1340に、又はそうでなければ、フロントエンドユニット1330内に)記憶する他の媒体を含む。
復号ユニット1340は、実行エンジンユニット1350内のリネーム/アロケータユニット1352に結合される。
実行エンジンユニット1350は、リタイアメントユニット1354と1つ又は複数のスケジューラユニット1356のセットとに結合されるリネーム/アロケータユニット1352を含む。スケジューラユニット1356は、予約局、中央命令ウィンドウなどを含む、任意の数の異なるスケジューラを表す。スケジューラユニット1356は、物理レジスタファイルユニット1358に結合される。物理レジスタファイルユニット1358のそれぞれは、1つ又は複数の物理レジスタファイルを表し、それらの異なるものは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)などのような、1つ又は複数の異なるデータの種類を記憶する。一実施形態において、物理レジスタファイルユニット1358は、ベクトルレジスタユニットと、書き込みマスクレジスタユニットと、スカラレジスタユニットとを含む。これらのレジスタユニットは、アーキテクチャラルベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供し得る。物理レジスタファイルユニット1358は、リタイアメントユニット1354によりオーバラップされ、レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な方式(例えば、リオーダバッファとリタイアメントレジスタファイルとを用いて、フューチャファイルと、履歴バッファと、リタイアメントレジスタファイルとを用いて、レジスタマップとレジスタのプールとを用いて、など)を示す。リタイアメントユニット1354及び物理レジスタファイルユニット1358は、実行クラスタ1360に結合される。実行クラスタ1360は、1つ又は複数の実行ユニット1362のセットと、1つ又は複数のメモリアクセスユニット1364のセットとを含む。実行ユニット1362は、様々な種類のデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して、様々なオペレーション(例えば、シフト、加算、減算、乗算)を実行し得る。いくつかの実施形態では、特定の関数又は関数のセット専用の多数の実行ユニットを含み得る一方、複数の他の実施形態では、1つの実行ユニットのみ、又は、全てが全ての関数を実行する複数の実行ユニットを含み得る。スケジューラユニット1356、物理レジスタファイルユニット1358、及び実行クラスタ1360は、特定の実施形態では、特定の種類のデータ/オペレーション(例えば、それぞれがそれら自身のスケジューラユニット、物理レジスタファイルユニット、及び/又は実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン及び/又はメモリアクセスパイプラインであり、別々のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット1364を有する特定の実施形態が実装される)のための別々のパイプラインを生成するので、複数として示される可能性がある。別々のパイプラインが用いられる場合、これらのパイプラインのうちの1つ又は複数がアウトオブオーダ発行/実行で、残りがインオーダであり得ることも理解されるべきである。
メモリアクセスユニット1364のセットが、レベル2(L2)キャッシュユニット1376に結合されるデータキャッシュユニット1374に結合されるデータTLBユニット1372を含むメモリユニット1370に結合される。1つの例示的な複数の実施形態において、メモリアクセスユニット1364は、読み込みユニットと、記憶アドレスユニットと、記憶データユニットとを含んでよく、それらのそれぞれは、メモリユニット1370内のデータTLBユニット1372に結合される。命令キャッシュユニット1334は、メモリユニット1370内のレベル2(L2)キャッシュユニット1376にさらに結合される。L2キャッシュユニット1376は、1つ又は複数の他のレベルのキャッシュに結合され、最終的には主要メモリに結合される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン1300を実装し得る。1)命令フェッチ1338がフェッチ及び長さ復号ステージ1302及び1304を実行し、2)復号ユニット1340が復号ステージ1306を実行し、3)リネーム/アロケータユニット1352が割り当てステージ1308及びリネーミングステージ1310を実行し、4)スケジューラユニット1356がスケジューリングステージ1312を実行し、5)物理レジスタファイルユニット1358及びメモリユニット1370がレジスタ読み取り/メモリ読み取りステージ1314を実行し、実行クラスタ1360が実行ステージ1316を実行し、6)メモリユニット1370及び物理レジスタファイルユニット1358が、ライトバック/メモリ書き込みステージ1318を実行し、7)様々なユニットが例外処理ステージ1322を伴い、8)リタイアメントユニット1354及び物理レジスタファイルユニット1358がコミットステージ1324を実行する。
コア1390は、本明細書にて説明されている命令を含む1つ又は複数の命令セット(例えば、x86命令セット(より新たなバージョンが加えられたいくつかの拡張を有する)、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスの(NEONのような選択的な追加の拡張を有する)ARM命令セット)をサポートし得る。一実施形態において、コア1390は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、パックドデータを用いて実行される多くのマルチメディアアプリケーションにより用いられる複数のオペレーションを可能にする。
コアは、マルチスレッディング(2つ以上の並列セットのオペレーション又はスレッドを実行する)をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング(単一の物理的コアが複数のスレッドのそれぞれに対して論理的コアを提供することにより、物理的コアが同時にマルチスレッディングを実行すること)又はこれらの組み合わせ(例えば、時分割フェッチ及び復号化、その後、インテル(登録商標)ハイパースレッディング・テクノロジなどでの同時マルチスレッディング)を含む様々な方式でサポートし得ることが理解されるべきである。
レジスタリネーミングがアウトオブオーダ実行との関連で説明される一方、レジスタリネーミングは、インオーダーアーキテクチャを用いられ得ることが理解されるべきである。プロセッサの示された実施形態では、別々の命令及びデータキャッシュユニット1334/1374と、共有のL2キャッシュユニット1376とも含む一方、代替的な実施形態では、例えば、レベル1(L1)内部キャッシュ又は複数のレベルの内部キャッシュのような、命令及びデータの両方のための単一の内部キャッシュを有し得る。いくつかの実施形態において、システムは、内部キャッシュと、コア及び/又はプロセッサの外部にある外部キャッシュとの組み合わせを含み得る。代替的に、キャッシュの全ては、コア及び/又はプロセッサの外部にあってよい。
具体的な例示的インオーダコアアーキテクチャ
図14AからBは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック(同じ種類及び/又は異なる種類の他のコアを含む)のうちの1つであろう。複数の論理ブロックは、用途に応じて、いくつかの固定の関数ロジック、メモリI/Oインターフェース、及び他の必要なI/Oロジックを用いて、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を介して通信する。
図14Aは、本願発明の複数の実施形態に係る単一のプロセッサコア、及びそのオンダイ相互接続ネットワーク1402との接続、並びにそのレベル2(L2)キャッシュ1404のローカルサブセットのブロック図である。一実施形態において、命令デコーダ1400は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1406は、スカラ及びベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを可能にする。(設計を簡略化する)一実施形態において、スカラユニット1408及びベクトルユニット1410が、別々のレジスタセット(それぞれ、スカラレジスタ1412及びベクトルレジスタ1414)を用い、それらの間で伝送されるデータがメモリに書き込まれ、次に、レベル1(L1)キャッシュ1406からリードバックされる一方、本願発明の代替的な複数の実施形態では、(例えば、単一のレジスタセットを用いる、又は、データが書き込まれてリードバックされることなく、2つのレジスタファイルの間で伝送されることを可能にする通信パスを含む)異なるアプローチを用い得る。
L2キャッシュのローカルサブセット1404は、プロセッサコア毎に1つの別々のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、その自身のL2キャッシュのローカルサブセット1404への直接アクセスパスを有する。プロセッサコアにより読み取られるデータは、そのL2キャッシュサブセット1404に記憶され、それらの自身のローカルL2キャッシュサブセットにアクセスする他のプロセッサコアとは並列に、迅速にアクセスされることができる。プロセッサコアにより書き込まれるデータは、その自身のL2キャッシュサブセット1404に記憶され、必要であれば、他の複数のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを確保する。リングネットワークは、プロセッサコア、L2キャッシュ、及び他の論理ブロックなどのエージェントがチップ内で互いに通信することを可能にする双方向である。各リングデータパスは、方向毎に1012ビット幅である。
図14Bは、本願発明の複数の実施形態に係る、図14Aのプロセッサコアの一部の拡大図である。図14Bは、L1キャッシュ1406のL1データキャッシュ1406A部分、並びに、ベクトルユニット1410及びベクトルレジスタ1414に関するさらなる詳細を含む。具体的に、ベクトルユニット1410は、16幅のベクトル処理ユニット(VPU)(16幅ALU1428を参照)であり、1つ又は複数の整数、単精度浮動、及び倍精度浮動命令を実行する。VPUは、スウィズルユニット1420によるレジスタ入力のスウィズル、数値変換ユニット1422AからBによる数値変換、及び複製ユニット1424によるメモリ入力の複製をサポートする。複数の書き込みマスクレジスタ1426は、結果として生じるベクトル書き込みを叙述することを可能にする。
統合メモリコントローラ及びグラフィックスを有するプロセッサ
図15は、1つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよい、本願発明の複数の実施形態に係るプロセッサ1500のブロック図である。図15の実線のボックスは、単一コア1502Aと、システムエージェント1510と、1つ又は複数のバスコントローラユニット1516のセットとを有するプロセッサ1500を示す一方、選択的な追加の破線のボックスは、複数のコア1502AからNと、システムエージェントユニット1510内の1つ又は複数の統合メモリコントローラユニット1514のセットと、特定用途ロジック1508とを有する代替的なプロセッサ1500を示す。
従って、プロセッサ1500の異なる実装は、1)統合グラフィックス及び/又はサイエンティフィック(スループット)ロジック(1つ又は複数のコアを含み得る)である特定用途ロジック1508と、1つ又は複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、その2つの組み合わせ)であるコア1502AからNとを有するCPUと、2)主にグラフィックス及び/又はサイエンティフィック(スループット)向けの多数の特別用途コアであるコア1502AからNを有するコプロセッサと、3)多数の汎用インオーダコアであるコア1502AからNを有するコプロセッサと含み得る。従って、プロセッサ1500は、汎用プロセッサ、コプロセッサ、又は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、ハイスループット多集積コア(MIC)コプロセッサ(30以上のコアを含む)、エンベデッドプロセッサ、又は同様のものなどの特定用途プロセッサであってよい。プロセッサは、1つ又は複数のチップ上に実装され得る。プロセッサ1500は、例えば、BiCMOS、CMOS,又はNMOSなどの多数の処理技術のうちの何れかを用いて、1つ又は複数の基板の一部であってよく、及び/又はその上に実装されてよい。
メモリ階層は、コア内の1つ又は複数のレベルのキャッシュと、1つ又は複数の共有キャッシュユニット1506のセットと、統合メモリコントローラユニット1514のセットに結合される外部メモリ(図示せず)とを含む。共有キャッシュユニット1506のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)又は他のレベルのキャッシュなどの1つ又は複数の中レベルのキャッシュ、ラストレベルのキャッシュ(LLC)、及び/又はこれらの組み合わせを含み得る。一実施形態において、リングベース相互接続ユニット1512が、統合グラフィックスロジック1508と、共有キャッシュユニット1506のセットと、システムエージェントユニット1510/統合メモリコントローラユニット1514とに相互接続する一方、代替的な実施形態では、複数のそのようなユニットを相互接続するための任意の数の周知技術を用い得る。一実施形態において、コヒーレンシが、1つ又は複数のキャッシュユニット1506とコア1502AからNとの間で維持される。
いくつかの実施形態において、1つ又は複数のコア1502AからNは、マルチスレッディングすることができる。システムエージェント1510は、コア1502AからNの調整及び操作を行うそれらの構成要素を含む。システムエージェントユニット1510は、例えば、電力制御ユニット(PCU)と、ディスプレイユニットとを含み得る。PCUは、コア1502AからN及び統合グラフィックスロジック1508の電力状態を調整するのに必要とされるロジック及び構成要素であってよく、又はそれらを含んでよい。ディスプレイユニットは、1つ又は複数の外部接続ディスプレイを駆動するためのものである。
コア1502AからNは、アーキテクチャ命令セットに関して同種又は異種であってよく、つまり、2つ以上のコア1502AからNは、同じ命令セットを実行可能である一方、他のものは、その命令セット又は異なる命令セットのサブセットのみを実行可能であってよい。
例示的なコンピュータアーキテクチャ
図16から19は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型PC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイス用の当技術分野で既知の他の複数のシステム設計及び複数の構成も、適する。概して、本明細書に開示される多様なプロセッサ及び/又は他の実行ロジックを組み込むことができるシステム又は電子デバイスは概ね適する。
ここで図16を参照すると、本願発明の一実施形態に係るシステム1600のブロック図が示される。システム1600は、コントローラハブ1620に結合される1つ又は複数のプロセッサ1610、1615を含み得る。一実施形態において、コントローラハブ1620は、グラフィックスメモリコントローラハブ(GMCH)1690と、入力/出力ハブ(IOH)1650(別々のチップ上であり得る)とを含み、GMCH1690は、メモリ1640とコプロセッサ1645とが結合されるメモリ及びグラフィックコントローラを含み、IOH1650は、入力/出力(I/O)デバイス1660をGMCH1690に結合させる。代替的に、メモリ及びグラフィックコントローラの一方又は両方が、(本明細書にて説明されているように)プロセッサ内に集積され、メモリ1640とコプロセッサ1645とは、プロセッサ1610と、IOH1650を有する単一チップ内のコントローラハブ1620とに直接結合される。
追加のプロセッサ1615の選択的な特性は、図16において破線で示される。それぞれのプロセッサ1610、1615は、本明細書にて説明される1つ又は複数の処理コアを含んでよく、プロセッサ1500の特定のバージョンであってよい。
メモリ1640は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、又はその2つの組み合わせであってよい。少なくとも一実施形態において、コントローラハブ1620は、フロントサイドバス(FSB)のようなマルチドロップバス、QuickPath相互接続(QPI)のようなポイントツーポイントインターフェース、又は同様の接続1695を介してプロセッサ1610と1615と通信する。
一実施形態において、コプロセッサ1645は、例えば、ハイスループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ、又は同様のものなどの特定用途プロセッサである。一実施形態において、コントローラハブ1620は、統合グラフィックスアクセラレータを含み得る。
物理リソース1610、1615の間には、アーキテクチャ上、マイクロアーキテクチャ上、熱的、電力消費の特性、及び同様のものを含む利点の様々な基準に関して、様々な相違が存在し得る。
一実施形態において、プロセッサ1610は、一般的な種類のデータ処理オペレーションを制御する複数の命令を実行する。複数の命令内に、複数のコプロセッサ命令が組み込まれ得る。プロセッサ1610は、これらのコプロセッサ命令を、取り付られたコプロセッサ1645により実行されるべき種類として認識する。従って、プロセッサ1610は、コプロセッサ1645に対して、コプロセッサバス又は他の相互接続上でこれらのコプロセッサ命令(又は、コプロセッサ命令を表す制御信号)を発行する。コプロセッサ1645は、受信したコプロセッサ命令を受け取って実行する。
ここで図17を参照すると、本願発明の実施形態に係る第1のより具体的な例示的システム1700のブロック図が示される。図17に示されているように、マルチプロセッサシステム1700が、ポイントツーポイント相互接続システムであり、第1のプロセッサ1770と、ポイントツーポイント相互接続1750を介して結合された第2のプロセッサ1780とを含む。プロセッサ1770及び1780のそれぞれは、プロセッサ1500の特定のバージョンであり得る。本願発明の一実施形態において、プロセッサ1770及び1780はそれぞれ、プロセッサ1610及び1615である一方、コプロセッサ1738はコプロセッサ1645である。別の実施形態において、プロセッサ1770及び1780はそれぞれ、プロセッサ1610及びコプロセッサ1645である。
統合メモリコントローラ(IMC)ユニット1772及び1782をそれぞれ含むプロセッサ1770及び1780が示される。プロセッサ1770が、そのバスコントローラユニットの一部として、ポイントツーポイント(P―P)インターフェース1776及び1778も含み、同様に、第2のプロセッサ1780がP−Pインターフェース1786及び1788を含む。プロセッサ1770、1780は、P―Pインターフェース回路1778、1788を用いて、ポイントツーポイント(P―P)インターフェース1750を介して情報を交換し得る。図17に示されているように、IMC1772及び1782は、複数のプロセッサをそれぞれ、複数のメモリ、すなわち、メモリ1732とメモリ1734とに結合させ、それらは、それぞれのプロセッサにローカルに取り付られた主要メモリの部分であり得る。
プロセッサ1770、1780はそれぞれ、ポイントツーポイントインターフェース回路1776、1794、1786、1798を用いて、個別のP−Pインターフェース1752、1754を介して、チップセット1790と情報を交換し得る。チップセット1790は、高性能インターフェース1739を介して、コプロセッサ1738と選択的に情報を交換し得る。一実施形態において、コプロセッサ1738は、例えば、ハイスループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、エンベデッドプロセッサ、又は同様のものなどの特定用途プロセッサである。
何れかのプロセッサに、又は両方のプロセッサの外部には、共有キャッシュ(図示せず)が含まれてよく、またP―P相互接続を介してプロセッサに接続されてよく、これにより、プロセッサが低電力モードに置かれた場合、プロセッサの何れか又は両方のローカルキャッシュの情報が共有キャッシュに記憶され得る。
チップセット1790は、インターフェース1796を介して第1のバス1716に結合され得る。一実施形態において、第1のバス1716は、周辺構成要素相互接続(PCI)バス、又は、PCIエクスプレスバス、又は別の第3世代のI/O相互接続バスなどのバスであってよいが、本願発明の範囲はそのように限定されない。
図17に示されているように、様々なI/Oデバイス1714が、第1のバス1716を第2のバス1720に結合させるバスブリッジ1718とともに、第1のバス1716に結合され得る。一実施形態において、コプロセッサ、ハイスループットMICプロセッサ、GPGPUのアクセラレータ(例えば、グラフィックスアクセラレータ又はデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサのような1つ又は複数の追加のプロセッサ1715が、第1のバス1716に結合される。一実施形態において、第2のバス1720は、ローピンカウント(LPC)バスであってよい。一実施形態において、様々なデバイスが、例えば、キーボード及び/又はマウス1722と、通信デバイス1727と、命令/コード及びデータ1730を含み得るディスクドライブ又は他の大容量ストレージデバイスのような記憶ユニット1728とを含む第2のバス1720に結合され得る。さらに、オーディオI/O1724が、第2のバス1720に結合され得る。複数の他のアーキテクチャが可能であることに留意されたい。例えば、図17のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバス又は他のそのようなアーキテクチャを実装し得る。
ここで図18を参照すると、本願発明の実施形態に係る第2のより具体的な例示的システム1800のブロック図が示される。図17及び図18における同様の要素には同様の参照番号が付され、図18の他の態様を曖昧にしてしまうことを回避するために、図17の特定の態様が図18では省略されている。
図18は、プロセッサ1770、1780はそれぞれ、統合メモリ及びI/O制御ロジック(「CL」)1772及び1782を含み得ることを示す。従って、CL1772、1782は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図18は、メモリ1732、1734がCL1772、1782に結合されるのみならず、複数のI/Oデバイス1814もまた制御ロジック1772、1782に結合されることを示す。複数のレガシI/Oデバイス1815がチップセット1790に結合される。
ここで図19を参照すると、本願発明の実施形態に係るSoC1900のブロック図が示される。図15における同様の要素には、同様の参照番号が付される。また、破線のボックスが、複数のより高度なSoC上の複数の選択的な特徴である。図19において、相互接続ユニット1902が、1つ又は複数のコア202AからNのセットと、共有キャッシュユニット1506とを含むアプリケーションプロセッサ1910と、システムエージェントユニット1510と、バスコントローラユニット1516と、統合メモリコントローラユニット1514と、統合グラフィックスロジックを含み得る一のセット又は1つ又は複数のコプロセッサ1920と、画像プロセッサと、オーディオプロセッサと、ビデオプロセッサと、スタティックランダムアクセスメモリ(SRAM)ユニット1930と、ダイレクトメモリアクセス(DMA)ユニット1932と、1つ又は複数の外部ディスプレイに結合されるディスプレイユニット1940とに結合される。一実施形態において、コプロセッサ1920は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ、エンベデッドプロセッサ、又は同様のものなどの特定用途プロセッサを含む。
本明細書にて開示されるメカニズムの複数の実施形態が、ハードウェア、ソフトウェア、ファームウェア、又はそのような実装アプローチの組み合わせに実装され得る。本願発明の複数の実施形態が、少なくとも1つのプロセッサと、(揮発性及び不揮発性メモリ及び/又は記憶要素を含む)ストレージシステムと、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを含むプログラマブルシステム上で実行するコンピュータプログラム又はプログラムコードとして実装され得る。
図17に示されているコード1730のようなプログラムコードは、本明細書にて説明されている複数の関数を実行し、出力情報を生成するべく、複数の入力命令に適用され得る。出力情報は、既知の様式で1つ又は複数の出力デバイスに適用され得る。本願の複数の目的のために、処理システムが、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)又はマイクロプロセッサのようなプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するべく、高水準手順又はオブジェクト指向のプログラミング言語に実装され得る。プログラムコードはまた、所望であれば、アセンブリ又は機械言語に実装され得る。実際に、本明細書にて説明される複数のメカニズムは、如何なる特定のプログラミング言語の範囲にも限定されない。何れの場合においても、言語は、コンパイル型又はインタプリタ型の言語であってよい。
少なくとも一実施形態の1つ又は複数の態様が、プロセッサ内の様々なロジックを表す機械可読媒体上に記憶される複数の代表的命令によって実装されてよく、機械に読み取られた場合、その機械にロジックを作成させ、本明細書にて説明されている複数の技術を実行させる。「IPコア」として知られているそのような複数の表現は、有形の機械可読媒体上に記憶され、様々な顧客又は製造設備に供給されて、実際にロジック又はプロセッサを作り出す複数の製造機械にロードされてよい。
そのような機械可読記憶媒体は、限定されるわけではないが、ハードディスク、フロッピ(登録商標)ディスクを含む任意の他の種類のディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、及び磁気光ディスクのような記憶媒体、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)のようなランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)、磁気又は光カードのような半導体デバイス、又は複数の電子命令を記憶するのに適する任意の他の種類の媒体を含む、機械又はデバイスにより製造又は形成される複数の物品の非一時的な有形の装置を含み得る。
従って、本願発明の複数の実施形態は、本明細書にて説明されている複数の構造、複数の回路、複数の装置、複数のプロセッサ、及び/又は複数のシステム特徴を定義する、ハードウェア記述言語(HDL)などの複数の命令を保持する、又は設計データを保持する非一時的な有形の機械可読媒体も含む。そのような実施形態は、複数のプログラム製品としても称され得る。エミュレーション(バイナリ変換、コードモーフィングなどを含む)
いくつかの場合において、命令変換器が、命令をソース命令セットからターゲット命令セットに変換するのに用いられ得る。例えば、命令変換器は、命令を、コアにより処理される1つ又は複数の他の命令にトランスレート(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる)、モーフィング、エミュレート、又はそうでなければ、変換し得る。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせに実装され得る。命令変換器は、プロセッサ上、プロセッサ外、又は、部分的にプロセッサ上であり部分的にプロセッサ外であってよい。
図20は、本願発明の複数の実施形態に係るソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令変換器の使用を対比させるブロック図である。示された実施形態において、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせに実装されてよい。図20は、高水準言語2002におけるプログラムが、少なくとも1つのx86命令セットコアを有するプロセッサ2016によりネイティブで実行され得るx86バイナリコード2006を生成するべく、x86コンパイラ2004を用いてコンパイルされ得ることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ2016は、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同じ結果を達成するために、(1)インテル(登録商標)x86命令セットコアの命令セットの大部分、又は(2)複数のアプリケーションの複数のオブジェクトコードバージョン又は少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサ上で実行することを目的とする他のソフトウェアを、互換性を有するように実行又はそうでなければ処理することにより、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと実質的に同じ複数の機能を実行することができる任意のプロセッサを表す。x86コンパイラ2004は、追加のリンケージ処理の有無に関わらず、少なくとも1つのx86命令セットコアを有するプロセッサ2016上で実行されることができるx86バイナリコード2006(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、図20は、少なくとも1つのx86命令セットコアを有さないプロセッサ2014(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セットを実行する、及び/又はカリフォルニア州サニーベールのARMホールディングスのARM命令セットを実行する複数のコアを有するプロセッサ)によってネイティブで実行され得る代替的な命令セットバイナリコード2010を生成するために、代替的な命令セットコンパイラ2008を用いて、高水準言語2002のプログラムがコンパイルされてもよいことを示す。命令変換器2012は、x86バイナリコード2006を、x86命令セットコアを有さないプロセッサ2014によりネイティブで実行され得るコードに変換するのに用いられる。この変換済みコードは、これが可能な命令変換器の作成は難しいので、代替的な命令セットバイナリコード2010と同じである可能性は低いが、しかしながら、変換済みコードは、一般的なオペレーションを達成し、代替的な命令セットからの複数の命令で構成される。従って、命令変換器2012は、エミュレーション、シミュレーション又は任意の他の処理を介して、プロセッサ又はx86命令セットプロセッサ若しくはコアを有さない他の電子デバイスがx86バイナリコード2006を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
図3から9のうちの何れかについて説明された複数の構成要素、特徴、及び詳細はまた、図1から2のうちの何れかに選択的に用いられ得る。さらに、本明細書にて説明された装置のうちの何れかについて本明細書にて説明された複数の構成要素、特徴、詳細はまた、複数の実施形態において、そのような装置により及び/又はそれを用いて実行され得る、本明細書にて説明されている複数の方法のうちの何れかに選択的に用いられ及び/又は適用し得る。本明細書にて説明されている複数のプロセッサのうちの何れかは、本明細書にて開示されている複数のコンピュータシステム又は他のシステムのうちの何れかに含まれ得る。命令は、本明細書にて開示されている様々な命令フォーマットのうちの何れかを有し得る。
本明細書及び特許請求の範囲において、「結合される」及び/又は「接続される」という用語、並びにそれらの複数の派生語が用いられ得る。これらの用語は、互いの同義語であることを意図しない。むしろ、複数の実施形態において、「接続される」は、2つ以上の要素が互いに直接物理的及び/又は電気的接触することを示すのに用いられ得る。「結合される」は、2つ以上の要素が互いに直接物理的及び/又は電気的接触することを意味し得る。しかし、「結合される」はまた、2つ以上の要素が互いに直接接触するが、またさらに互いに協働又は相互作用することを意味し得る。例えば、実行ユニットが、1つ又は複数の介在構成要素を介して、レジスタ及び/又は復号ユニットに結合され得る。複数の図において、複数の矢印を用いて複数の接続及び結合を示す。
「及び/又は」という用語が用いられ得る。本明細書にて用いられているように、「及び/又は」という用語は、一方又は他方若しくは両方を意味する(例えば、A及び/又はBは、A又はB、若しくはA及びBの両方を意味する)。
上述において、複数の実施形態に対する完全な理解を提供するために、複数の具体的な詳細が記載されている。しかし、複数の他の実施形態が、これらの具体的な詳細の一部を用いずに実施され得る。本願発明の範囲は、以上に提供されている複数の特定の例により定まるものではなく、以下の特許請求の範囲によってのみ定まる。複数の他の例において、本明細書の理解を曖昧にしてしまうことを回避するために、複数の周知回路、構造、デバイス、及びオペレーションは、ブロック図形式で、及び/又は、細部を有さずに示されている。適切性を考慮し、複数の参照番号又は参照番号の末尾が、複数の図面中に繰り返されており、対応の又は類似の要素を示し、別段に指定され又は明確に明らかにされていない限り、同様の又は同じ特性を選択的に有する。
複数の特定のオペレーションが、ハードウェア要素により実行されてよく、又は、それらのオペレーションを実行する複数の命令をプログラミングされる機械、回路、又はハードウェア要素(例えば、プロセッサ、プロセッサの一部、回路など)を生じる、及び/又はもたらすのに用いられ得る、機械実行可能な又は回路実行可能な命令により具現され得る。複数のオペレーションはまた、ハードウェアとソフトウェアとの組み合わせにより選択的に実行され得る。プロセッサ、機械、回路、又はハードウェアが、命令を実行及び/又は処理し、その命令に応じて結果を記憶するよう動作可能な具体的又は特定の回路又は他のロジック(例えば、ファームウェア及び/又はソフトウェアと潜在的に組み合わせられるハードウェア)を含み得る。
いくつかの実施形態は、機械可読媒体を含む製品(例えば、コンピュータプログラム製品)を含む。媒体は、情報を、提供する、例えば、機械により可読な形態に記憶するメカニズムを含み得る。機械可読媒体は、機械に実行された場合及び/又はとき、その機械に、本明細書にて開示されている1つ又は複数のオペレーション、方法、又は技術を実行させ、及び/又は、その機械にそれらを実行することをもたらせるよう動作可能な命令又は一連の命令を提供し又は自身に記憶し得る。機械可読媒体は、本明細書にて開示されている複数の命令の1つ又は複数の実施形態を記憶してよく、又はそうでなければ提供してよい。
いくつかの実施形態において、機械可読媒体は、有形及び/又は非一時的機械可読記憶媒体を含み得る。例えば、有形及び/又は非一時的機械可読記憶媒体は、フロッピ(登録商標)ディスケット、光記憶媒体、光ディスク、光学式データストレージデバイス、CD−ROM、磁気ディスク、磁気光ディスク、リードオンリメモリ(ROM)、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データストレージデバイス、非一時的メモリ、非一時的データストレージデバイス、又は同様のものを含み得る。非一時的機械可読記憶媒体は、一時的な伝搬信号からなるものではない。
適した機械の複数の例としては、汎用プロセッサ、特定用途プロセッサ、命令処理装置、デジタル論理回路、集積回路、又は同様のものを含むが、これらに限定されない。適した機械のさらに他の複数の例としては、コンピューティングデバイス、又は、プロセッサ、命令処理装置、デジタル論理回路、又は集積回路を含む他の電子デバイスを含む。そのようなコンピューティングデバイス及び電子デバイスの複数の例としては、デスクトップコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、タブレットコンピュータ、ノートブック、スマートフォン、携帯電話、サーバ、ネットワークデバイス(例えば、ルータ及びスイッチ)、モバイルインターネットデバイス(MID)、メディアプレイヤ、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラを含むが、これらに限定されない。
本明細書全体に渡って、例えば、「一実施形態」、「実施形態」、「1つ又は複数の実施形態」、「いくつかの実施形態」への言及は、特定の特徴が本願発明の実施内に含まれ得るが、必ずしも必須とされるわけではないことを示す。同様に、本明細書において、本開示の合理化及び本願発明の様々な態様の理解の助けの目的のために、場合によっては、様々な特徴が単一の実施形態、図面、又はこれらの説明にまとめてグループ化される。しかし、本開示の方法は、本願発明が各請求項において明確に記載されたものよりも多くの特徴を必要とするという意図を反映するものと解釈されるべきではない。むしろ、以下の請求項が反映しているように、本願発明の態様は、単一の開示実施形態の全ての特徴より少ない特徴に存する。従って、詳細な説明に続く特許請求の範囲は、これにより詳細な説明に明確に組み込まれ、各請求項は、本願発明自身の別々の実施形態として独立している。例示的な実施形態
以下の複数の例は、複数のさらなる実施形態に関する。複数の例における具体的事柄が1つ又は複数の実施形態の任意の箇所に用いられ得る。
例1は、命令を復号する復号ユニットを備えるプロセッサである。命令は、第1の複数のデータ要素を含む第1のソースパックドデータオペランドを示し、複数のマスク要素を含むソースマスクを示し、デスティネーション記憶位置を示す。実行ユニットがその復号ユニットに結合される。実行ユニットは、命令に応じて、デスティネーション記憶位置に結果パックドデータオペランドを記憶する。結果パックドデータオペランドは、ソースマスクのアンマスクドマスク要素に対応する少なくとも2つのアンマスクド結果データ要素を有する。アンマスクド結果データ要素のそれぞれは、同じ相対ビット位置において、第1のソースパックドデータオペランドの対応するデータ要素の値を有する。各最も近いペアのアンマスクド結果データ要素の間の全てのマスクド結果データ要素は、結果パックドデータオペランドの第1の端部に最も近いそのペアのアンマスクド結果データ要素と同じ値を有する。マスクド結果データ要素は、ソースマスクのマスクドマスク要素に対応する。
例2は、例1のプロセッサを備え、実行ユニットが、第1の端部と、その第1の端部に最も近い第1のアンマスクド結果データ要素との間の少なくとも1つのマスクド結果データ要素の第1のセットを含む結果パックドデータオペランドを記憶する。
例3は、例2のプロセッサを備え、その復号ユニットは、最上位のデータ要素を含む第2のソースパックドデータオペランドを示す命令を復号する。また、選択的に、実行ユニットは、第1のセットの各マスクド結果データ要素が第2のソースパックドデータオペランドの最上位のデータ要素と同じ値を有する結果パックドデータオペランドを記憶する。
例4は、例3のプロセッサを含み、その復号ユニットは、第2のソースパックドデータオペランドのために用いられるレジスタがデスティネーション記憶位置としても用いられることを暗黙的に示すが、明示的に指定しない命令を復号する。
例5は、例3のプロセッサを含み、その実行ユニットは、結果パックドデータオペランドを記憶し、その第1の端部は、最下位の端部を含む。
例6は、例2のプロセッサを含み、その復号ユニットは、最下位のデータ要素を含む第2のソースパックドデータオペランドを示す命令を復号する。また、選択的に、その実行ユニットは、第1のセットの各マスクド結果データ要素が第2のソースパックドデータオペランドの最下位のデータ要素と同じ値を有する結果パックドデータオペランドを記憶する。
例7は、例5のプロセッサを含み、その実行ユニットは、第1の端部が最上位の端部を含む結果パックドデータオペランドを記憶する。
例8は、例2のプロセッサを含み、その実行ユニットは、第1のセットの各マスクド結果データ要素が、同じ相対ビット位置において、第1のソースパックドデータオペランドの対応するデータ要素の値を有する結果パックドデータオペランドを記憶する。
例9は、例1から8のうちの何れか1つのプロセッサを含み、実行ユニットが、結果パックドデータオペランドの第2の端部とその第2の端部に最も近い第2のアンマスクド結果データ要素との間の少なくとも1つのマスクド結果データ要素の第2のセットを含む結果パックドデータオペランドを記憶する。第2のセットの各マスクド結果データ要素は、第2のアンマスクド結果データ要素と同じ値を有する。
例10は、例1から8のうちの何れか1つのプロセッサを含み、ソースマスクの各マスク要素は単一のビットからなる。
例11は、例1から8のうちの何れか1つのプロセッサを含み、そのソースマスクは、マスクレジスタを記憶し、命令は、複数のパックドデータオペレーションを叙述するマスクレジスタを叙述オペランドとして示す複数の他の命令を有する命令セットに含まれる。
例示的12は、例1から8のうちの何れか1つのプロセッサを含み、その復号ユニットは、メモリ内の位置に第1のソースパックドデータオペランドを示す命令を復号する。
例13は、例1から8のうちの何れか1つのプロセッサを含み、その実行ユニットは、第1のソースパックドデータオペランドの対応するデータ要素の値を有する各アンマスクド結果データ要素が命令のオペコードに対して固定される結果パックドデータオペランドを記憶する。
例14は、命令を受信する段階を備える、プロセッサにおける方法である。その命令は、第1の複数のデータ要素を含む第1のソースパックドデータオペランドを示し、複数のマスク要素を含むソースマスクを示し、デスティネーション記憶位置を示す。命令に応じて、デスティネーション記憶位置に結果パックドデータを記憶する段階が含まれる。結果パックドデータは、ソースマスクのアンマスクドマスク要素に対応する少なくとも2つのアンマスクド結果データ要素を含み、アンマスクド結果データ要素のそれぞれは、同じ相対ビット位置において、第1のソースパックドデータオペランドの対応するデータ要素の値を有する。各最も近いペアのアンマスクド結果データ要素の間の全てのマスクド結果データ要素は、結果パックドデータオペランドの第1の端部に最も近いそのペアのアンマスクド結果データ要素と同じ値を有する。マスクド結果データ要素は、ソースマスクのマスクドマスク要素に対応する。
例15は、例14の方法を含み、記憶する段階は、第1の端部とその第1の端部に最も近い第1のアンマスクド結果データ要素との間の少なくとも1つのマスクド結果データ要素の第1のセットを含む結果パックドデータオペランドを記憶する段階を含む。
例16は、例15の方法を含み、受信する段階は、最上位のデータ要素を含む第2のソースパックドデータオペランドを示す命令を受信する段階を含む。また、選択的に、記憶する段階は、第1のセットの各マスクド結果データ要素が第2のソースオペランドの最上位のデータ要素と同じ値を有する結果パックドデータオペランドを記憶する段階を含む。
例17は、例15の方法を含み、受信する段階は、最下位のデータ要素を含む第2のソースパックドデータオペランドを示す命令を受信する段階を含む。また、選択的に、記憶する段階は、第1のセットの各マスクド結果データ要素が第2のソースオペランドの最下位のデータ要素と同じ値を有する結果パックドデータオペランドを記憶する段階を含む。
例18は、例15の方法を含み、記憶する段階は、第1のセットの各マスクド結果データ要素が、同じ相対ビット位置において、第1のソースパックドデータオペランドの対応するデータ要素の値を有する結果パックドデータオペランドを記憶する段階を含む。
例19は、例14の方法を含み、記憶する段階は、第2の端部とその第2の端部に最も近い第2のアンマスクド結果データ要素との間の少なくとも1つのマスクド結果データ要素の第2のセットを含む結果パックドデータオペランドを記憶する段階を含む。第2のセットの各マスクド結果データ要素は、第2のアンマスクド結果データ要素と同じ値を有する。
例20は、例14の方法を含み、受信する段階は、各マスク要素が単一のビットからなるソースマスクを示す命令を受信する段階を含む。
例21は、相互接続と、その相互接続に結合されるプロセッサとを含む、複数の命令を処理するシステムである。そのプロセッサは、第1の複数のデータ要素を含む第1のソースパックドデータオペランドを示し、複数のマスク要素を含むソースマスクを示し、デスティネーション記憶位置を示す命令に応じて、デスティネーション記憶位置に結果パックドデータオペランドを記憶するよう動作可能である。結果パックドデータオペランドは、ソースマスクのアンマスクドマスク要素に対応する少なくとも2つのアンマスクド結果データ要素を含み、アンマスクド結果データ要素のそれぞれは、同じ相対ビット位置において第1のソースパックドデータオペランドの対応するデータ要素の値を有する。各最も近いペアのアンマスクド結果データ要素の間の全てのマスクド結果データ要素は、結果パックドデータオペランドの第1の端部に最も近いそのペアのアンマスクド結果データ要素と同じ値を有する。マスクド結果データ要素は、ソースマスクのマスクドマスク要素に対応する。システムは、その相互接続に結合されるダイナミックランダムアクセスメモリ(DRAM)も含む。DRAMは、複数の条件に基づいて修正されるスカラ値に対して計算を実行するループをベクトル化する命令のセットを記憶する。命令のセットは、プロセッサにより実行された場合、プロセッサに複数のオペレーションを実行させるよう動作可能であり、その複数のオペレーションは、複数の条件を評価することと、真と評価される条件に対して複数のマスク要素をアンマスクドようにすることと、偽と評価される条件に対して複数のマスク要素をマスクされるようにすることと、結果パックドデータオペランドに対して並列に複数の計算を実行することとを含む。
例22は、例21のシステムを含み、プロセッサは、第1の端部とその第1の端部に最も近い第1のアンマスクド結果データ要素との間の少なくとも1つのマスクド結果データ要素の第1のセットを含む結果パックドデータオペランドを記憶する。また、選択的に、第1のセットの各マスクド結果データ要素は、命令により示される第2のソースパックドデータオペランドの最上位のデータ要素と同じ値を有する。
例23は、非一時的機械可読記憶媒体を含む製品を備える。非一時的機械可読記憶媒体は、命令を記憶する。命令は、第1の複数のデータ要素を含む第1のソースパックドデータオペランドを示し、複数のマスク要素を含むソースマスクを示し、デスティネーション記憶位置を示す。命令は、機械により実行された場合、その機械に、命令に応じて、デスティネーション記憶位置に結果パックドデータオペランドを記憶することを含む複数のオペレーションを実行させるよう動作可能である。結果パックドデータオペランドは、ソースマスクのアンマスクドマスク要素に対応する少なくとも2つのアンマスクド結果データ要素を含む。アンマスクド結果データ要素のそれぞれは、同じ相対ビット位置において、第1のソースパックドデータオペランドの対応するデータ要素の値を有する。各最も近いペアのアンマスクド結果データ要素の間の全てのマスクド結果データ要素は、結果パックドデータオペランドの第1の端部に最も近いそのペアのアンマスクド結果データ要素と同じ値を有する。マスクド結果データ要素は、ソースマスクのマスクドマスク要素に対応する。
例24は、例23の製品を含み、各マスク要素は、単一のビットからなり、命令は、1つ又は複数の最下位のマスクド結果データ要素のセットに記憶される単一の値を有する第2のソースパックドデータオペランドを示す。
例25は、例14から20のうちの何れかの方法を実行するよう動作可能なプロセッサ又は他の装置を備える。
例26は、例14から20のうちの何れかの方法を実行するための手段を含むプロセッサ又は他の装置を備える。
例27は、複数のモジュール、ユニット、ロジック、回路、手段、又はこれらの任意の組み合わせを含む、例14から20のうちの何れかの方法を実行するプロセッサを備える。
例28は、相互接続と、その相互接続に結合されるプロセッサと、その相互接続に結合され、DRAM、グラフィックスチップ、無線通信チップ、相変化メモリ、及びビデオカメラから選択される少なくとも1つの構成要素とを含むコンピュータシステム又は他の電子デバイスを備え、コンピュータシステム又は他の電子デバイスは、例14から20のうちの何れかの方法を実行する。
例29は、プロセッサ、コンピュータシステム、又は他の機械により実行された場合及び/又はとき、その機械に、例14から20のうちの何れかの方法を実行させるよう動作可能な命令を選択的に記憶し又はそうでなければ提供する選択的に非一時的機械可読媒体を含む。
例30は、実質的に本明細書にて説明されているような1つ又は複数のオペレーション又は何れの方法を実行するよう動作可能なプロセッサ又は他の装置を含む。
例31は、実質的に本明細書にて説明されている1つ又は複数のオペレーション又は何れかの方法を実行するための手段を含むプロセッサ又は他の装置を備える。
例32は、実質的に本明細書にて説明されている何れかの命令を実行するよう動作可能なプロセッサ又は他の装置を備える。
例33は、実質的に本明細書にて説明されている何れかの命令を実行するための手段を含むプロセッサ又は他の装置を備える。
例34は、第1の命令セットの複数の命令を復号するよう動作可能な復号ユニットを含むプロセッサ又は他の装置を備える。その復号ユニットは、実質的に本明細書にて開示されている何れかの命令であり、第2の命令セットである、第1の命令をエミュレートする1つ又は複数の命令を受信する。そのプロセッサ又は他の装置は、第1の命令セットのうちの1つ又は複数の命令を実行するその復号ユニットに結合される1つ又は複数の実行ユニットも含む。第1の命令セットのうちの1つ又は複数の命令に応じて、1つ又は複数の実行ユニットは、デスティネーションに結果を記憶するよう動作可能である。その結果は、第1の命令に関して実質的に本明細書にて開示されている複数の結果のうちの何れかを含み得る。
例35は、第1の命令セットのうちの複数の命令を復号するよう動作可能な復号ユニットを含み、1つ又は複数の実行ユニットを含むプロセッサを有するコンピュータシステム又は他の電子デバイスを備える。コンピュータシステムは、そのプロセッサに結合されるストレージデバイスも含む。ストレージデバイスは、実質的に本明細書にて開示されている複数の命令のうちの何れかであり得る、第2の命令セットである第1の命令を記憶する。ストレージデバイスはまた、第1の命令を第1の命令セットのうちの1つ又は複数の命令に変換する複数の命令を記憶する。第1の命令セットのうちの1つ又は複数の命令は、プロセッサにより実行された場合、プロセッサに、結果をデスティネーションに記憶させるよう動作可能である。その結果は、第1の命令に関して実質的に本明細書いて開示されている複数の結果のうちの何れかを含み得る。
例36は、例8のプロセッサを含み、その復号ユニットは、第1のソースパックドデータオペランドのために用いられるレジスタがデスティネーション記憶位置としても用いられることを暗黙的に示すが、明示的に指定しない命令を復号する。