本明細書では、演算マスクコンソリデーション命令、これらの命令を実行するプロセッサ、これらの命令を処理又は実行するときにプロセッサによって実行される方法、及びこれらの命令を処理又は実行する1つ又は複数のプロセッサを組み込んだ電子システムが開示される。以下の説明では、多数の具体的な詳細(例えば、具体的な命令演算、演算マスク、データフォーマット、プロセッサ構成、マイクロアーキテクチャの詳細、演算シーケンス等)が述べられる。しかしながら、実施形態は、これらの具体的な詳細がなくても実施することができる。それ以外の場合には、この説明の理解を分かりにくくしないように、よく知られた回路、構造、及び技法は詳細に示されていない。
図1は、1つ又は複数の演算マスクコンソリデーション命令104を処理するプロセッサ100の一例示の実施形態のブロック図である。幾つかの実施形態では、プロセッサは、汎用プロセッサ(例えば、デスクトップ、ラップトップ、サーバー、及び同様のコンピューターにおいて用いられるタイプ)とすることができる。代替的に、プロセッサは、専用プロセッサとすることができる。好適な専用プロセッサの例には、ほんの数例を挙げると、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックスプロセッサ、コプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、及びコントローラーが含まれるが、これらに限定されるものではない。プロセッサは、様々な複合命令セットコンピューティング(CISC)プロセッサ、様々な縮小命令セットコンピューティング(RISC)プロセッサ、様々な超長命令語(VLIW)プロセッサ、それらの様々なハイブリッド、又は完全に他のタイプのプロセッサのうちの任意のものとすることができる。
プロセッサは、命令セットアーキテクチャ(ISA)101を有する。ISAは、プログラミングに関係したプロセッサのアーキテクチャの一部を表し、プロセッサのネイティブ命令、アーキテクチャレジスタ、データタイプ、アドレス指定モード、メモリアーキテクチャ等を一般に含む。ISAは、マイクロアーキテクチャとは区別される。マイクロアーキテクチャは、一般に、ISAを実施するために選択された特定のプロセッサ設計技法を表す。
ISAは、アーキテクチャ的に可視のレジスタ(例えば、アーキテクチャレジスタファイル)105を含む。アーキテクチャレジスタは、本明細書においては、単にレジスタと呼ばれる場合もある。特に別段の指定がないか又は明らかでない限り、アーキテクチャレジスタ、レジスタファイル、及びレジスタという語句は、本明細書においては、ソフトウェア及び/又はプログラマーに可視のレジスタ、及び/又はオペランドを識別するためにマクロ命令若しくはアセンブリ言語命令によって指定されるレジスタを指すのに用いられる。これらのレジスタは、所与のマイクロアーキテクチャにおける他の非アーキテクチャレジスタ又はアーキテクチャ的に可視でないレジスタ(例えば、命令によって用いられる一時レジスタ、リオーダーバッファー、リタイアメントレジスタ等)と対照をなす。これらのレジスタは、一般に、オンダイプロセッサ記憶ロケーションを表す。図示したアーキテクチャレジスタは、パックドデータレジスタ106を含む。パックドデータレジスタのそれぞれは、パックドデータ又はベクトルデータを記憶するように動作可能とすることができる。図示したアーキテクチャレジスタは、パックドデータ演算マスクレジスタ107も含む。パックドデータ演算マスクレジスタのそれぞれは、パックドデータ演算マスクを記憶するように動作可能とすることができる。
ISAは、命令セット102を含む。この命令セットの命令は、マイクロ命令、マイクロ演算、又はマクロ命令をデコードした結果得られるものとは対照的な、実行のためにプロセッサに提供されるマクロ命令、アセンブリ言語命令、又は機械レベル命令を表す。命令セットは、オプションとして、1つ又は複数の従来のマスクされたパックドデータ命令103を含む。前述したパックドデータ命令と同様に、マスクされたパックドデータ命令103のそれぞれは、プロセッサが1つ又は複数のパックドデータオペランドのデータ要素に対してパックドデータ演算を実行することを引き起こすように又はもたらすように動作可能とすることができる。パックドデータオペランドは、パックドデータレジスタ107に記憶することができる。しかしながら、マスクされたパックドデータ命令のそれぞれは、パックドデータ処理をマスクするか、プレディケートするか、又は条件付きで制御する(例えば、パックドデータ演算マスクレジスタ107内の)1つ又は複数のパックドデータ演算マスクを示すことができるという点で異なる。パックドデータ演算マスクは、演算マスク、述語オペランド、又は条件付き演算制御オペランドを表すことができる。
命令セットは、1つ又は複数の演算マスクコンソリデーション命令104も含む。演算マスクコンソリデーション命令は、コンソリデートされた演算マスクをプロセッサに生成及び記憶させることができる。好適な命令/演算の具体例は、以下で更に論述される。
プロセッサは、実行ロジック108も備える。この実行ロジックは、1つ又は複数の演算マスクコンソリデーション命令104を実行又は処理するように動作可能である。幾つかの実施形態では、実行ロジックは、これらの命令を実行する特定のロジック(例えば、特定の回路部、又はファームウェアと潜在的に組み合わされるハードウェア)を含むことができる。
演算マスクコンソリデーション命令104を更に論述する前に、パックドデータ演算マスクをどのように用いることができるのかの例を数例最初に論述することが役立つ場合がある。図2Aは、マージを伴うマスクされたパックドデータ演算203Aの第1の例のブロック図である。マスクされたパックドデータ演算は、マスクされたパックドデータ命令(例えば、図1のマスクされたパックドデータ命令103)に応答して又はこの命令の結果として実行することができる。
マスクされたパックドデータ命令は、第1のソースパックドデータ209A及び第2のソースパックドデータ210Aを示すことができる。他のマスクされたパックドデータ命令(例えば、パックドシフト命令)は、単一のソースパックドデータのみ、又は3つ以上のソースパックドデータを示すことができる。この説明図では、第1のソースパックドデータ及び第2のソースパックドデータは、同じサイズであり、同じ幅のデータ要素を含み、したがって、それぞれ同じ数のデータ要素を含むが、これは必須ではない。この説明図では、第1のソースパックドデータ及び第2のソースパックドデータのそれぞれは、16個のデータ要素を有する。1つの例として、第1のソースパックドデータ及び第2のソースパックドデータは、それぞれ512ビット幅とすることができ、それぞれ16個の32ビットダブルワードデータ要素を含むことができるが、これは必須ではない。2つのソースパックドデータにおける同じ相対位置(例えば、同じ垂直位置)にあるソースデータ要素は、対応するデータ要素の対を表す。これらのデータ要素のそれぞれは、当該データ要素を表すブロック内に示された数値を有する。例えば、第1のソースパックドデータの最低順序(右側)のデータ要素は、3の値を有し、第1のソースパックドデータの最低順序の隣のデータ要素は、7の値を有する。以下同様である。
この命令は、ソースパックドデータ演算マスク211Aも示している。この演算マスクは、パックド演算又はベクトル演算をプレディケートするか又は条件付きで制御する述語オペランド又は条件付きベクトル演算制御オペランドを表す。パックドデータ演算マスクは、マスク要素、述語要素、又は条件付き制御要素を含む。パックドデータ演算マスクは、データ単位の要素粒度でパックドデータ処理をマスクするように又は条件付きで制御するように動作可能とすることができる。1つ又は複数の対応するソースデータ要素との1対1対応でマスク要素を含めることができる。例えば、この説明図に示すように、対応するソースデータ要素の対ごとに1つのそのようなマスク要素が存在することができる。演算マスクによって、各データ要素又は対応するデータ要素の対のパックドデータ処理を、他のものとは別個にかつ独立にプレディケートすること又は条件付きで制御することを可能にすることができる。各マスク要素は、1つ又は複数の対応するソースパックドデータ要素に対するパックドデータ演算をマスクするように又はマスクしないように動作可能とすることができる。例えば、この例では、各マスク要素は、対応するソースパックドデータ要素の対に対する演算をマスクすることができる。
この説明図に示すように、通例、各マスク要素は、単一ビットとすることができる。単一ビットによって、2つの異なる可能性(例えば、演算を実行する対演算を実行しない、演算の結果を記憶する対演算の結果を記憶しない等)のうちのいずれかを指定することを可能にすることができる。代替的に、3つ以上の異なる選択肢から選択することが所望される場合、2ビット以上を各マスク要素に用いることができる。この説明図では、パックドデータ演算マスクは、16ビット(すなわち、0011100001101011)を含み、これらの16ビットのそれぞれは、第1のソースパックドデータ及び第2のソースパックドデータの対応するデータ要素の16個の対のうちの1つへの順序付きの対応を有する。例えば、最低順序(右側)のマスクビットは、対応するデータ要素の最低順序の対に対応し、最高順序(左側)のマスクビットは、対応するデータ要素の最高順序の対に対応し、以下同様に対応する。
図示した、マスクされたパックドデータ演算は、ソースパックドデータ演算マスクからのマスキング、プレディケーション、又は条件付き制御によるパックドデータ結果212A内の第1のソースパックドデータ及び第2のソースパックドデータからのデータ要素の対応する対の総和を条件付きで記憶するマスクされたパックドデータ加算演算である。パックドデータ演算マスク211Aの16個のマスクビットのそれぞれは、セットされる(すなわち、1のバイナリ値を有する)か又はクリアされる(すなわち、0のバイナリ値を有する)。この図示した規定によれば、ソースパックドデータ要素の対応する対に対して実行されたパックドデータ演算(この場合、加算)の結果をパックドデータ結果212Aの対応するデータ要素に記憶することを可能にするか又は可能にしないために、各マスクビットは、それぞれセットされる(すなわち、1)か又はクリアされる(すなわち、0)。これらのセットされたビット(すなわち、1)は、マスクされていないビット又はマスクされていない要素を表すのに対して、これらのクリアされたビット(すなわち、0)は、マスクされたビット又はマスクされた要素を表す。例えば、最低順序の隣のマスクビットは、セットされ(すなわち、1)、総和(すなわち、8=7+1)が、パックドデータ結果の対応する、最低順序の隣のデータ要素に記憶される。この説明図では、総和には下線が付けられている。
逆に、所与のマスクビットがクリアされる(すなわち、0)と、ソースデータ要素の対応する対に対するパックドデータ演算の結果は、対応する結果データ要素に記憶されない。それどころか、この説明図では、第2のソースパックドデータからの対応するデータ要素の値が、対応する結果データ要素に記憶される。例えば、パックドデータ演算マスク内の最高順序のビット(左側)がクリアされ(すなわち、0)、第2のソースパックドデータからの最高順序のデータ要素の数値(すなわち、15)が、最高順序の結果データ要素に記憶される。このマスキングのバージョンは、マージマスクと呼ばれる。結果の記憶を可能にするためにビットがクリアされ(すなわち、0)、結果の記憶を可能にしないためにビットがセットされる(すなわち、1)逆の規定も可能であることが認識されるべきである。
幾つかの実施形態では、パックドデータ演算は、オプションとして、対応するマスクビットがセットされているか又はクリアされているかにかかわらず、第1のソースパックドデータ及び第2のソースパックドデータのデータ要素の全ての対応する対に対して実行することができるが、パックドデータ演算の結果は、マスクビットの値に応じてパックドデータ結果に記憶される場合もあるし、されない場合もある。代替的に、別の実施形態では、対応するマスクビットが、演算の結果が記憶されないことを指定している場合、パックドデータ演算をオプションとして省略することができる(すなわち、実行されない)。幾つかの実施形態では、オプションとして、例外(例えば、例外フラグ)又は違反を、マスクオフされた要素に対するパックドデータ演算によって抑制するか又は生じないようにすることができる。幾つかの実施形態では、メモリオペランドを有するマスクされたパックドデータ命令の場合、オプションとして、マスクオフされたデータ要素についてメモリ障害を抑制することができる。
図2Bは、ゼロイングを有するマスクされたパックドデータ演算203Bの第2の代表的な例示の実施形態を示すブロック図である。ゼロイングを有するマスクされたパックドデータ演算は、上述したマージを有するマスクされたパックドデータ演算と同様である。この説明を分かりにくくしないようにするために、類似点は繰り返さないことにし、逆に、相違点を主として述べる。1つの注目すべき相違は、対応するマスクビットがマスクオフされている(例えば、0にクリアされている)とき、ソースパックドデータ(例えば、図2Aにおける第2のソースパックドデータ210A)のデータ要素の値を対応する結果データ要素にマージ又は記憶する代わりに、対応する結果データ要素は、ゼロに設定される。例えば、ダブルワード結果パックドデータ要素の全ての32ビットは、0の値を有することができる。これは、ゼロイングマスキングと呼ばれる。代替的に、0以外の他の所定の値をオプションとして用いることができる。
これらは、マスクされたパックドデータ演算のほんの数個の説明例にすぎない。プロセッサは、多種多様の異なるタイプのマスクされたパックドデータ演算をサポートすることができることが認識されるべきである。他の実施形態では、これらは、1つのみのソースパックドデータを有する演算、3つ以上のソースパックドデータを有する演算、異なるサイズのソースパックドデータを有する演算、異なる数のデータ要素のソースパックドデータを有する演算、水平又は非垂直に整列された形式で実行される演算等を含むことができる。
図3は、演算マスクコンソリデーション命令304の一実施形態を実行するように動作可能な実行ユニット308を有する命令処理装置300の一実施形態のブロック図である。幾つかの実施形態では、この命令処理装置は、プロセッサとすることができ、及び/又はプロセッサ内に含めることができる。例えば、幾つかの実施形態では、この命令処理装置は、図1のプロセッサとすることもできるし、図1のプロセッサに含めることもできる。代替的に、この命令処理装置は、同様の又は異なるプロセッサに含めることができる。その上、図1のプロセッサは、同様の又は異なる命令処理装置を備えることができる。
装置300は、演算マスクコンソリデーション命令304を受信することができる。例えば、この命令は、命令フェッチユニット、命令キュー等から受信することができる。演算マスクコンソリデーション命令は、機械コード命令、アセンブリ言語命令、マクロ命令、又はこの装置のISAの制御信号を表すことができる。演算マスクコンソリデーション命令304は、ソース演算マスク311を(例えば、1つ若しくは複数のフィールド又は一組のビットを通じて)明示的に指定することもできるし、別の方法で示す(例えば、暗黙的に示す)こともでき、デスティネーション記憶ロケーション318を指定することもできるし、別の方法で示すこともできる。幾つかの実施形態では、この命令は、ソース演算マスク及びデスティネーション記憶ロケーションの双方を明示的に指定することができるが、これは必須ではない。例えば、1つの実施形態の演算マスクコンソリデーション命令は、命令フォーマットKConsol K1,K2を有することができる。ここで、KConsolはオペコードを示し、K1はデスティネーションパックドデータ演算マスクレジスタを指定し、K2はソースパックドデータ演算マスクレジスタを指定する。幾つかの実施形態では、ソース演算マスク311は、マスクされた要素(例えば、0にクリアされたマスクビット)及びマスクされていない要素(例えば、1にセットされたマスクビット)を含むことができ、マスクされた要素のうちの少なくとも幾つかは、マスクされていない要素のうちの少なくとも幾つかの中に点在又は別の方法で配置することができる。このことの例には、ほんの数個の説明例を与えると、01010101、00101000、11100111、01100101、及び11000011が含まれるが、確実にこれらに限定されるものではない。
幾つかの実施形態では、ソース演算マスク311は、命令によって指定するか又は別の方法で示すことができるソースパックドデータ演算マスクレジスタ316に記憶することができる。パックドデータ演算マスクレジスタ316は、一組のパックドデータ演算マスクレジスタ307のうちの1つとすることができる。同様に、幾つかの実施形態では、デスティネーション記憶ロケーション317は、パックドデータ演算マスクレジスタ307のうちの1つとすることができる。幾つかの実施形態では、デスティネーション記憶ロケーションは、ソースパックドデータ演算マスク316と同じレジスタとすることもできるし、異なるレジスタとすることもできる。パックドデータ演算マスクレジスタは、よく知られた技法を用いて種々のマイクロアーキテクチャにおいて種々の方法で実施することができ、いずれの既知の特定のタイプの回路にも限定されるものではない。好適なタイプのレジスタの例には、専用の物理レジスタ、レジスタリネームを用いて動的にアロケートされた物理レジスタ、及びそれらの組合せが含まれるが、これらに限定されるものではない。
図示した命令処理装置は、デコードユニット又はデコーダー315を備える。この命令デコーダーは、マクロ命令、機械コード命令、アセンブリ言語命令、又は他の相対的に高水準の命令を受信してデコードし、受信した高水準の命令を反映し、表し、及び/又はそれらの命令から導出される1つ又は複数のマイクロ命令、マイクロ演算、マイクロコードエントリーポイント、又は他の相対的に低水準の命令若しくは制御信号を出力することができる。これらの1つ又は複数の低水準の命令又は制御信号は、1つ又は複数の低水準(例えば、回路レベル又はハードウェアレベル)の演算を通じて、高水準の命令を実施することができる。デコーダーは、様々な異なるメカニズムを用いて実施することができる。これらのメカニズムには、マイクロコード読み出し専用メモリ(ROM)、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、及び当該技術分野で知られているデコーダーを実施するのに用いられる他のメカニズムが含まれるが、これらに限定されるものではない。
他の実施形態では、命令エミュレーター、トランスレーター、モーファー(morpher)、インタープリター、又は他の命令変換ロジックを用いることができる。様々な異なるタイプの命令変換ロジックが、当該技術分野で知られており、これらの命令変換ロジックは、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組合せで実施することができる。命令変換ロジックは、命令を受信し、この命令を1つ又は複数の対応する導出された命令又は制御信号にエミュレート、トランスレート、モーフィング、解釈、又は別の方法で変換することができる。他の実施形態では、命令変換ロジック及びデコーダーの双方を用いることができる。例えば、この装置は、受信した機械コード命令を1つ又は複数の中間命令に変換する命令変換ロジックと、これらの1つ又は複数の中間命令を、この装置のネイティブハードウェア(例えば、実行ユニット)によって実行可能な1つ又は複数の低水準の命令又は制御信号にデコードするデコーダーとを有することができる。命令変換ロジックの一部又は全ては、命令処理装置の外部、例えば、別個のダイ上及び/又はメモリ内等に位置することができる。
図3を再び参照すると、実行ユニット308は、デコードユニット315、ソースパックドデータ演算マスク311、及びデスティネーション記憶ロケーション317と結合されている。この実行ユニットは、演算マスクコンソリデーション命令304を表し及び/又はこの命令から導出された1つ又は複数のデコード又は別の方法で変換された命令又は制御信号を受信することができる。前述したように、ソース演算マスク311は、マスクされた要素及びマスクされていない要素を含むことができ、マスクされた要素のうちの少なくとも幾つかは、マスクされていない要素のうちの少なくとも幾つかの中に点在又は別の方法で配置することができる。幾つかの実施形態では、実行ユニットは、演算マスクコンソリデーション命令304に応答して及び/又はこの命令の結果として、コンソリデートされた演算マスク318をデスティネーション記憶ロケーション317に記憶するように動作可能とすることができる。幾つかの実施形態では、コンソリデートされた演算マスクは、ともに収集され、ともに運ばれ、互いに隣接され、又は別の方法でともにコンソリデートされた、ソース演算マスクからのマスクされていない要素を含むことができる。幾つかの実施形態では、このコンソリデートされた演算マスクには、ソース演算マスクからのコンソリデートされた一組のマスクされていない要素の全ての間において、マスクされた要素が配置又は点在していない場合がある。すなわち、マスクされた要素は、マスクされていない要素間から移動又は別の方法で除去することができる。
幾つかの実施形態では、マスクされた要素及びマスクされていない要素のそれぞれは、異なる単一のマスクビットとすることができ、例えば、各マスクされた要素は、バイナリの0の値を有する単一のビットとすることができる(すなわち、0にクリアすることができる)のに対して、各マスクされていない要素は、バイナリの1の値を有する単一のビットとすることができる(すなわち、1にセットすることができる)。幾つかの実施形態では、実行ユニットは、ソース演算マスクからのマスクされていない要素を、コンソリデートされた演算マスク又はレジスタの最下位部分においてともにコンソリデートするように動作可能とすることができる。代替的に、幾つかの実施形態では、実行ユニットは、ソース演算マスクからのマスクされていない要素を、コンソリデートされた演算マスク又はレジスタの最上位部分においてともにコンソリデートするように動作可能とすることができる。幾つかの実施形態では、演算マスクコンソリデーション命令は、ソース演算マスクからのマスクされていない要素がコンソリデートされた演算マスク又はレジスタの最下位部分においてコンソリデートされるのか又は最上位部分においてコンソリデートされるのかを示すように動作可能とすることができる。例えば、幾つかの実施形態では、演算マスクコンソリデーション命令は、マスクされていない要素が最下位部分においてともにコンソリデートされることを示す第1の値(0の単一ビットバイナリ値)、又はマスクされていない要素が最上位部分においてともにコンソリデートされることを示す第2の値(1の単一ビットバイナリ値)を有することができる1つ又は複数のビットを含むことができる。例えば、1つの実施形態の演算マスクコンソリデーション命令は、命令フォーマットKConsol K1,K2,順序を有することができる。ここで、KConsolはオペコードを示し、K1はデスティネーションパックドデータ演算マスクレジスタを指定し、K2はソースパックドデータ演算マスクレジスタを指定し、順序は、コンソリデーションが演算マスク内の最下位ビットに対するものか又は最上位ビットに対するものかを示す1つ又は複数のビットを含む。
実行ユニット及び/又は命令処理装置は、演算マスクコンソリデーション命令に応答して(例えば、演算マスクコンソリデーション命令からデコードされるか又は別の方法で導出される1つ又は複数の命令又は制御信号に応答して)演算マスクコンソリデーション命令を実行するとともにコンソリデートされた演算マスクを記憶するように動作可能な具体的な又は特定のロジック(例えば、回路部、又はファームウェア及び/又はソフトウェアと潜在的に組み合わされる他のハードウェア)を備えることができる。例として、実行ユニットは、論理ユニット、算術論理ユニット、論理演算を実行するデジタル回路、演算マスクコンソリデーションロジックを備える実行ユニット又は機能ユニット等を含むことができる。
説明を分かりにくくしないようにするために、比較的単純な命令処理装置300が図示及び説明されてきた。他の実施形態では、この装置は、オプションとして、プロセッサ内に見られる他のよく知られた構成要素を備えることができる。そのような構成要素の例には、分岐予測ユニット、命令フェッチユニット、命令キャッシュ及びデータキャッシュ、命令変換索引バッファー及びデータ変換索引バッファー、プリフェッチバッファー、マイクロ命令キュー、マイクロ命令シーケンサー、レジスタリネームユニット、命令スケジューリングユニット、バスインターフェースユニット、第2のキャッシュ又は高レベルキャッシュ、リタイアメントユニット、プロセッサに含まれる他の構成要素、並びにそれらの様々な組合せが含まれるが、これらに限定されるものではない。プロセッサ内の構成要素の文字どおり多数の異なる組合せ及び構成があり、実施形態は、どの特定の組合せにも構成にも限定されるものではない。実施形態は、複数のコアを有するプロセッサ、論理プロセッサ、又は実行エンジンに含めることができ、これらのうちの少なくとも1つは、本明細書において開示される命令の一実施形態を実行するように動作可能な実行ロジックを有する。
図4Aは、最下位位置命令への演算マスクコンソリデーションの一例示の実施形態に応じて及び/又はこの実施形態の結果として実行することができる最下位位置演算への演算マスクコンソリデーション404Aの一例示の実施形態のブロック図である。この命令は、ソース演算マスク411A及びデスティネーション(例えば、デスティネーション記憶ロケーション)を明示的に指定するか又は別の方法で示す(例えば、暗黙的に示す)ことができる。図示した実施形態では、ソース演算マスクは8ビット幅である。他の実施形態では、ソース演算マスクは、それよりも狭い(例えば、4ビット)か又はそれよりも広い(例えば、16ビット、32ビット、64ビット、又はこれよりも更に広い)かのいずれかとすることができる。幾つかの態様では、演算マスクの幅は、対応するパックドデータ幅及びデータ要素幅に依存し得る(例えば、図8及び図10の論述参照)。幾つかの実施形態では、ソース演算マスクは、演算マスクレジスタに含めることができ、プレディケーションにアクティブであり、意味があり、及び/又は用いられるレジスタのビットのサブセット(例えば、最低順序のサブセット)を表すことができる。これとは対照的に、レジスタ内のビットの別のサブセット(例えば、最高順序の残りの部分)は、プレディケーションに非アクティブであり、意味がなく、及び/又は用いられない場合がある。幾つかの実施形態では、ソース演算マスクは、複数のマスクされていない要素内に配置された複数のマスクされた要素を含むことができる。例えば、この説明図では、ソース演算マスクは、最低順序のビット0(右側)から最高順序のビット7(左側)へビット値0、0、1、1、0、0、1、1を含む。このデータは、1つの例にすぎず、命令/演算は、ソース演算マスク内のマスクされた要素及びマスクされていない要素の配置にかかわらず機能する。多数の可能な配置のうちの実質的に他のいずれも機能する。図示した規定によれば、セットされたビット値又は「1」のビット値は、マスクされていないビットを表すのに対して、クリアされたビット値又は「0」のビット値は、マスクされたビットを表す。代替の実施形態では、逆の規定を代わりに用いることができる。その上、他の実施形態では、マルチビットマスク要素をオプションとして用いることができる(例えば、2ビット又は対応するパックドデータ要素の幅を有する)。
コンソリデートされた演算マスク418Aの一実施形態は、命令に応答して及び/又は命令の結果としてデスティネーションに記憶することができる。幾つかの実施形態では、コンソリデートされた演算マスクは、デスティネーションにおいて収集又は別の方法でともにコンソリデートされたソース演算マスク411Aからのマスクされていない要素(例えば、図示した規定によれば、セットされたビット又は「1」のビット値)を含むことができる。例えば、命令/演算のこの最下位位置のバージョンでは、全てのマスクされていない要素(例えば、図示した規定によれば、セットされたビット値又は「1」のビット値)、この場合、4つ全てが、コンソリデートされた演算マスク及び/又はデスティネーションの最低順序のビット、この場合、最低順序の4ビットに記憶される。特に、コンソリデートされた演算マスクは、最低順序のビット0(右側)から最高順序のビット7(左側)へビット値1、1、1、1、0、0、0、0を含む。これを達成するための様々な方法が、これらのマスクされていない要素のルーティング、コピー、選択、若しくはそれらの幾つかの組合せ、又は別の方法による移動若しくは再配置を通じて行うことを含めて考慮されている。幾つかの実施形態では、ソース演算マスクからのマスクされた要素(例えば、図示した規定によれば、クリアされたビット又は「0」のビット値)を単に廃棄又は消去することができ、デスティネーションに伝達する必要がない場合がある。ソース演算マスク内のマスクされていないビットの総数よりも上位の(more significant)ビットは、デスティネーションにおいて単に0にすることができる。すなわち、廃棄されたいずれのマスクされた要素(例えば、クリアされたビット又は「0」のビット値)も、マスクされた置換要素(例えば、クリアされたビット又は「0」のビット値)で満たすことができる。代替的に、他の実施形態では、ソース演算マスクからのマスクされた要素は、マスクされていない要素よりも高い順序の位置に移動又は再配置することができる。
図4Bは、最上位位置命令への演算マスクコンソリデーションの一例示の実施形態に応答して及び/又はこの実施形態の結果として実行することができる最上位位置演算への演算マスクコンソリデーション404Bの一例示の実施形態のブロック図である。特徴及び特性の多くは、図4Aについて前述したものと同様又は同じである。この説明を分かりにくくしないようにするために、論述は、主として異なる特徴及び特性又は追加の特徴及び特性を強調することになる。既に述べたように、この命令は、ソース演算マスク411B及びデスティネーション(例えば、デスティネーション記憶ロケーション)を明示的に指定するか又は別の方法で示す(例えば、暗黙的に示す)ことができる。既に述べたように、コンソリデートされた演算マスク418Bの一実施形態は、命令に応答して及び/又は命令の結果として、デスティネーションに記憶することができる。上記と同様に、幾つかの実施形態では、コンソリデートされた演算マスクは、デスティネーションにおいてともにコンソリデートされたソース演算マスク411Bからのマスクされていない要素(例えば、図示した規定によれば、セットされたビット又は「1」のビット値)を含むことができる。しかしながら、命令/演算のこの最上位位置のバージョンでは、4つの全てのマスクされていない要素(例えば、図示した規定によれば、セットされたビット値又は「1」のビット値)は、コンソリデートされた演算マスクの最高順序又は最上位の4ビットに記憶される。特に、コンソリデートされた演算マスクは、最低順序のビット0(右側)から最高順序のビット7(左側)へビット値0、0、0、0、1、1、1、1を含む。
これらは、好適な演算マスクコンソリデーション演算のほんの数個の説明例にすぎない。最低順序のビット0(右側)から最高順序のビット7(左側)への好適な開始8ビットの演算マスク(左側)及び結果のコンソリデートされた演算マスク(右側)の他の例には、以下のものが含まれるが、これらに限定されるものではない。 10000001→00000011(最下位バージョン) 01010100→00000111(最下位バージョン) 00101111→00011111(最下位バージョン) 10000001→11000000(最上位バージョン) 01010100→11100000(最上位バージョン) 00101111→11111000(最上位バージョン)
他の実施形態は、16ビット演算マスクに対して作用する演算マスクコンソリデーション命令/演算に関するものである。例えば、最低順序のビット0(右側)から最高順序のビット7(左側)への好適な開始16ビット演算マスク(左側)及び結果のコンソリデートされた16ビット演算マスク(右側)の他の例には、以下のものが含まれるが、これらに限定されるものではない。 1000000001100001→0000000000001111(最下位バージョン) 1000000000000001→0000000000000011(最下位バージョン) 0001010011001110→1111111000000000(最上位バージョン) 0100111110111100→1111111111000000(最上位バージョン)
更に他の実施形態は、64ビット演算マスク又は他のビット数を有する演算マスクに対して作用する演算マスクコンソリデーション命令/演算に関するものである。その上、所望である場合には、最下位ビット又は最上位ビットから開始する代わりに、中間(例えば、中心又は中央)位置へのコンソリデーションも、オプションとして用いることができる。
図5は、演算マスクコンソリデーション命令の一実施形態を処理する方法530の一実施形態のブロック流れ図である。様々な実施形態では、この方法は、汎用プロセッサ、専用プロセッサ、又は他の命令処理装置若しくはデジタル論理デバイスによって実行することができる。幾つかの実施形態では、図5の演算及び/又は方法は、図1のプロセッサ及び/又は図3の装置によって及び/又はそれらの内部において実行することができる。図1のプロセッサ及び図3の装置について本明細書において説明した構成要素、特徴、及び具体的なオプションの詳細は、図5の演算及び/又は方法にもオプションとして適用される。代替的に、図5の演算及び/又は方法は、同様の又は完全に異なるプロセッサ又は装置によって及び/又はそれらの内部において実行することができる。その上、図1のプロセッサ及び/又は図3の装置は、図5のものと同じか、同様か、又は異なる演算及び/又は方法を実行することができる。
この方法は、ブロック531において、演算マスクコンソリデーション命令を受信することを含む。様々な態様では、命令は、プロセッサ、命令処理装置、又はそれらの一部分(例えば、命令フェッチユニット、デコーダー、命令変換器等)において受信することができる。様々な態様では、命令は、オフダイソース(例えば、メインメモリ、ディスク、又は相互接続部)から受信することもできるし、オンダイソース(例えば、命令フェッチユニット又は命令キャッシュ)から受信することもできる。演算マスクコンソリデーション命令は、ソース演算マスク及びデスティネーション記憶ロケーションを指定するか又は別の方法で示すことができるする。幾つかの実施形態では、ソース演算マスクは、複数のマスクされていない要素(例えば、バイナリの1にセットされたマスクビット)内に配置された複数のマスクされた要素(例えば、バイナリの0にクリアされたマスクビット)を含むことができる。
コンソリデートされた演算マスクは、ブロック532において、演算マスクコンソリデーション命令に応答して及び/又はこの命令の結果として、デスティネーション記憶ロケーションに記憶することができる。代表的には、実行ユニット、命令処理装置、又はプロセッサが、命令によって指定された演算を実行することができ、その結果を記憶することができる。幾つかの実施形態では、コンソリデートされた演算マスクは、ともにコンソリデートされたソース演算マスクからのマスクされていない要素を含むことができる。
幾つかの実施形態では、コンソリデートされた演算マスクには、マスクされた要素が、マスクされていない要素間に配置されていない場合がある。幾つかの実施形態では、マスクされていない要素をコンソリデートされた演算マスク又はレジスタの最下位部分においてコンソリデートすることができる。代替的に、マスクされていない要素をコンソリデートされた演算マスク又はレジスタの最上位部分においてコンソリデートすることができる。幾つかの実施形態では、演算マスクコンソリデーション命令は、最下位部分が用いられるのか又はそれよりも上位部分(例えば、1つ若しくは複数のビット又はフィールドにわたって)が用いられるのかを示すように動作可能とすることができる。
図示した方法は、アーキテクチャ的に可視の演算(例えば、ソフトウェアの視点から可視の演算)を含む。他の実施形態では、この方法は、オプションとして、1つ又は複数のマイクロアーキテクチャ演算を含むことができる。例として、命令をアウトオブオーダーでフェッチし、デコードし、スケジューリングすることができ、ソースオペランドにアクセスすることができ、マイクロアーキテクチャ演算を実行するように実行ユニット又はロジックをイネーブルすることができ、実行ユニット又はロジックがマイクロアーキテクチャ演算を実行して命令を実施することができ、結果をプログラム順に戻し、コミット等することができる。演算を実行する種々のマイクロアーキテクチャの方法が考慮されている。
図6は、演算マスクコンソリデーション命令のための好適な命令フォーマット634の一実施形態のブロック図である。この命令フォーマットは、演算コード又はオペコード635を含む。このオペコードは、実行される命令及び/又は演算を識別するように使用可能な複数のビット又は1つ若しくは複数のフィールドを表すことができる。この命令フォーマットは、ソース演算マスクを指定するフィールド636及びデスティネーション記憶ロケーションを指定するフィールド637も含む。例として、これらの指定子のそれぞれは、レジスタのアドレス、メモリロケーション、又は他の記憶ロケーションを指定するビット又は1つ若しくは複数のフィールドを含むことができる。幾つかの実施形態では、これらのそれぞれは、潜在的に同じ又は潜在的に異なるパックドデータ演算マスクレジスタを示すことができる。1つの特定の実施形態では、これらのそれぞれは、8つのパックドデータ演算マスクレジスタのうちの1つを選択する3ビットを含むことができる。他の実施形態では、単一のフィールドを用いて、デスティネーションとしても用いられる単一のソースを示すことができる。更に他の実施形態では、暗黙的なソース及び/又は暗黙的なデスティネーションをオプションとして用いることができる。幾つかの実施形態では、このフォーマットは、オプションとして、最低順序又は最高順序の選択を示す1つ若しくは複数のビット又はフィールド638も含むことができる。これは、マスクされていない要素がマスクの最高順序の部分においてコンソリデートされるのか又は最低順序の部分においてコンソリデートされるのかを示すことができる。代替の実施形態には、指定子のサブセットを含むことができるもの、追加のフィールドを加えることができるもの、或る特定の(certain)フィールドを重ね合わせることができるもの等がある。フィールドの図示した順序/配置は必須ではなく、逆に、それらのフィールドは、再配置することができる。フィールドは、ビットの連続シーケンスを含む必要はなく、逆に、非連続の又は分離したビットからなることができる。
本明細書において開示される演算マスクコンソリデーション命令は、汎用命令であり、一般的な用途を有する。例えば、特定のアプリケーション、アルゴリズム、又はコードに有用であるとともに所望される様々な異なる方法で、これらの演算マスク操作命令/演算を単独で又は他の命令と組み合わせて用いて、演算マスクをコンソリデートするか又は別の方法で操作することができる。
幾つかの実施形態では、演算マスクコンソリデーション命令/演算は、コードをベクトル化することを援助するのに用いることができる。例えば、コンパイラーは、コードを自動ベクトル化することを援助するのに演算マスクコンソリデーション命令/演算を用いることができ、ここで、基礎を成すコードは演算マスク内のマスクされていない値のみに対して演算を行う。幾つかの実施形態では、演算マスクコンソリデーション命令/演算は、条件付きループインクリメントコードの自動ベクトル化を容易にする(例えば、ループの複数の反復用のカウンター値の条件付き自動インクリメントを加速又は高速化する)のに用いることができる。条件付きループインクリメント演算は、コンパイラーが自動ベクトル化するには課題になりがちである。例として、例えば、値1、2、3、4、5、6、7、8等の増分カウントは、第1のレジスタに含めることができる。例えば、値0、0、0、0、1、1、1、1を含むコンソリデートされたマスクは、第2のレジスタに含めることができる。コンソリデートされたマスク内の値のそれぞれは、ループの異なる反復を表すことができる。4つのセットされたマスクビットの存在を用いると、各インクリメントを通過する必要なくループ内のカウンター又は変数を効率的にインクリメントするのに用いることができる第1のレジスタから値4を効率的に選択することができる。そのような状況は、通例、高性能コンピューティングアプリケーションにおいてだけでなく、より一般的にも生じる。そのような改良されたベクトル化は、広いベクトル幅の利用を高め、性能を高め、電力消費を削減するのを援助することができる。これは、スレッド単位の性能を高めることも援助することができる。
代替的に、命令/演算は、ベクトル化の強化を促進すること以外の他の目的に用いることができる。幾つかの実施形態では、演算マスクコンソリデーション命令/演算は、マスクされていない要素をカウント又は別の方法で処理する(例えば、マスクされていない要素の総数をカウント又識別する)ことがより容易又はより高速になるように、マスクされていない要素を再配置するのに用いることができる。更に他の実施形態では、演算マスクコンソリデーション命令/演算は、他の命令(例えば、他の演算マスク操作命令、マスクされたパックドデータ命令等)による使用又は消費のために演算マスクを操作するのに用いることができる。しかしながら、本発明の範囲は、これらの特定の使用のみに限定されるものではない。他の使用は、本開示に基づいて当業者に明らかであろう。
図7は、好適な一組のパックドデータレジスタ706の一例示の実施形態のブロック図である。図示したパックドデータレジスタは、32個の512ビット幅のパックドデータレジスタ又はベクトルレジスタを含む。これらの32個の512ビット幅レジスタは、ZMM0〜ZMM31のラベルが付けられている。この図示した実施形態では、これらのレジスタのうちの下位の16個、すなわちZMM0〜ZMM15の低順序の256ビットは、YMM0〜YMM15のラベルが付けられたそれぞれの256ビット幅パックドデータレジスタ又はベクトルレジスタ上にエイリアスされるか又は重ねられている。ただし、これは必須ではない。同様に、図示した実施形態では、YMM0〜YMM15の低順序の128ビットは、XMM0及びXMM1のラベルが付けられたそれぞれの128ビットパックドデータレジスタ又はベクトルレジスタにエイリアスされるか又は重ねられている。ただし、これは必須ではない。512ビット幅レジスタZMM0〜ZMM31は、512ビットパックドデータ、256ビットパックドデータ、又は128ビットパックドデータを保持するように動作可能である。256ビット幅レジスタYMM0〜YMM15は、256ビットパックドデータ又は128ビットパックドデータを保持するように動作可能である。128ビット幅レジスタXMM0及びXMM1は、128ビットパックドデータを保持するように動作可能である。これらのレジスタのそれぞれは、パックド浮動小数点データ又はパックド整数データのいずれかを記憶するのに用いることができる。少なくとも8ビットのバイトデータと、16ビットのワードデータと、32ビットのダブルワードデータ又は単精度浮動小数点データと、64ビットのクワッドワードデータ又は倍精度浮動小数点データとを含む種々のデータ要素サイズがサポートされる。パックドデータレジスタの代替の実施形態は、異なる数のレジスタ、異なるサイズのレジスタを含むことができ、より小さなレジスタ上により大きなレジスタをエイリアスする場合もあるし、しない場合もある。
好適なパックドデータフォーマットの1つの例は、256ビット幅であるとともに16個の16ビットのワードデータ要素を含む256ビットパックドワードフォーマットである。別の例は、256ビット幅であるとともに8つの32ビットのダブルワード(dword)データ要素を含む256ビットのパックドダブルワードフォーマットである。更に別の例は、256ビット幅であるとともに4つの64ビットクワッドワードデータ要素を含む256ビットのパックドクワッドワードフォーマットである。他のパックドデータフォーマットも好適である。例えば、他の好適な256ビットのパックドデータフォーマットには、256ビットのパックド8ビットバイトフォーマット、256ビットのパックド32ビット単精度浮動小数点フォーマット、及び256ビットのパックド64ビット倍精度浮動小数点フォーマットが含まれる。その上、256ビットよりも大きい及び/又は小さいパックドデータフォーマットも好適である。例えば、上述したデータタイプの512ビットの(又はこれよりも大きな)パックドデータフォーマット及び/又は128ビットの(又はこれよりも小さな)パックドデータフォーマットも好適である。一般に、512ビットのパックドデータフォーマットは、同じデータタイプについて、256ビットのパックドデータフォーマットの2倍のデータ要素を有することができる一方、128ビットのパックドデータフォーマットは、同じデータタイプについて、256ビットのパックドデータフォーマットの2分の1のデータ要素を有することができる。一般に、パックドデータ要素の数は、パックドデータのビットによるサイズをパックドデータ要素のビットによるサイズによって除算したものに等しい。
図8は、パックドデータ演算マスクのビット数840がパックドデータ幅及びパックドデータ要素幅に依存することを示す表である。128ビット、256ビット、及び512ビットのパックドデータ幅が示されているが、他の幅も可能である。8ビットのバイト、16ビットのワード、32ビットのダブルワード(dword)又は単精度浮動小数点、及び64ビットのクワッドワード(Qword)又は倍精度浮動小数点のパックドデータ要素幅が考慮されているが、他の幅も可能である。
図示するように、パックドデータ幅が128ビットであるときにおいて、パックドデータ要素幅が8ビットであるときは16ビットをマスキングに用いることができ、パックドデータ要素幅が16ビットであるときは8ビットをマスキングに用いることができ、パックドデータ要素幅が32ビットであるときは4ビットをマスキングに用いることができ、パックドデータ要素幅が64ビットであるときは2ビットをマスキングに用いることができる。パックドデータ幅が256ビットであるときにおいて、パックドデータ要素幅が8ビットであるときは32ビットをマスキングに用いることができ、パックドデータ要素幅が16ビットであるときは16ビットをマスキングに用いることができ、パックドデータ要素幅が32ビットであるときは8ビットをマスキングに用いることができ、パックドデータ要素幅が64ビットであるときは4ビットをマスキングに用いることができる。パックドデータ幅が512ビットであるときにおいて、パックドデータ要素幅が8ビットであるときは64ビットをマスキングに用いることができ、パックドデータ要素幅が16ビットであるときは32ビットをマスキングに用いることができ、パックドデータ要素幅が32ビットであるときは16ビットをマスキングに用いることができ、パックドデータ要素幅が64ビットであるときは8ビットをマスキングに用いることができる。
図9は、好適な一組のパックドデータ演算マスクレジスタ907の一例示の実施形態のブロック図である。パックドデータ演算マスクレジスタのそれぞれは、パックドデータ演算マスクを記憶するのに用いることができる。図示した実施形態では、この一組は、k0〜k7のラベルが付けられた8つのパックドデータ演算マスクレジスタを含む。代替の実施形態は、8つよりも少ない(例えば、2つ、4つ、6つ等)か又は8つよりも多い(例えば、16個、20個、32個等)パックドデータ演算マスクレジスタを含むことができる。図示した実施形態では、パックドデータ演算マスクレジスタのそれぞれは64ビット幅である。代替の実施形態では、パックドデータ演算マスクレジスタの幅は、64ビットよりも広くすることもできるし(例えば、80ビット、128ビット等)、64ビットよりも狭くすることもできる(例えば、8ビット、16ビット、32ビット等)。パックドデータ演算マスクレジスタは、よく知られた技法を用いて種々の方法で実装することができ、どの既知の特定のタイプの回路にも限定されるものではない。好適なレジスタの例には、専用の物理レジスタ、レジスタリネームを用いて動的にアロケートされた物理レジスタ、及びそれらの組合せが含まれるが、これらに限定されるものではない。
幾つかの実施形態では、パックドデータ演算マスクレジスタ1007は、別個の専用の一組のアーキテクチャレジスタとすることができる。例として、マスクされたパックドデータ命令は、3ビット(例えば、3ビットフィールド)を用いて、8つのパックドデータ演算マスクレジスタk0〜k7のうちの任意の1つをエンコード又は指定することができる。代替の実施形態では、これよりも少ない又はこれよりも多くのパックドデータ演算マスクレジスタがあるとき、それぞれこれよりも少ない又はこれよりも多くのビットを用いることができる。1つの特定の実施態様では、パックドデータ演算マスクレジスタk1〜k7(k0ではない)のみを述語オペランドとしてアドレス指定して、マスクされたパックドデータ演算をプレディケートすることができる。レジスタk0は、通常のソース又はデスティネーションとして用いることができるが、述語オペランドとしてエンコードされない場合がある(例えば、k0は、指定される場合、全て1を有するか又は「マスクを有しない」とエンコードされる)。他の実施形態では、レジスタの全て又は一部のみを述語オペランドとしてエンコードすることができる。
図10は、パックドデータ演算マスクレジスタ1007の一例示の実施形態を示すとともに、パックドデータ演算マスクとして及び/又はマスキングに用いられるビット数がパックドデータ幅及びデータ要素幅に依存することを示す図である。パックドデータ演算マスクレジスタの図示した例示の実施形態は64ビット幅であるが、これは必須ではない。パックドデータ幅及びデータ要素幅の組合せに応じて、64ビット全て又は64ビットのサブセットのみをマスキング用にパックドデータ演算マスクとして用いることができる。一般に、単一の要素ごとのマスキング制御ビットが用いられるとき、マスキング用に用いられるパックドデータ演算マスクレジスタ内のビット数は、ビットによるパックドデータ幅をビットによるパックドデータ要素幅によって除算したものに等しい。
幾つかの説明例が示されている。すなわち、パックドデータ幅が512ビットであり、パックドデータ要素幅が64ビットであるとき、レジスタの最低順序の8ビットが、パックドデータ演算マスクとして用いられる。パックドデータ幅が512ビットであり、パックドデータ要素幅が32ビットであるとき、レジスタの最低順序の16ビットのみがパックドデータ演算マスクとして用いられる。パックドデータ幅が512ビットであり、パックドデータ要素幅が16ビットであるとき、レジスタの最低順序の32ビットのみがパックドデータ演算マスクとして用いられる。パックドデータ幅が512ビットであり、パックドデータ要素幅が8ビットであるとき、レジスタの64ビット全てがパックドデータ演算マスクとして用いられる。図示した実施形態によれば、マスクされたパックドデータ命令は、この命令に関連付けられたパックドデータ幅及びデータ要素幅に基づいて、パックドデータ演算マスクに用いられるレジスタの最低順序のビット数又は最下位ビット数のみにアクセスすることができ及び/又はそのビット数を利用することができる。
図示した実施形態では、レジスタの最低順序のサブセット又は部分がマスキングに用いられるが、これは必須ではない。代替の実施形態では、最高順序のサブセット又は他の或るサブセットをオプションとして用いることができる。その上、図示した実施形態では、512ビットのパックドデータ幅のみが考慮されているが、類似の原理が、例えば、256ビット幅及び128ビット幅等の他のパックドデータ幅に適用される。前述したように、64ビットのパックドデータ演算マスクレジスタの使用が必須ではない。
命令セットは、1つ又は複数の命令フォーマットを有する。所与の命令フォーマットは、特に、実行される演算(オペコード)と、その演算が実行される対象のオペランドとを指定する様々なフィールド(ビット数、ビットのロケーション)を定義する。幾つかの命令フォーマットは、命令テンプレート(又はサブフォーマット)の定義を通じて更に分割される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義することができ(含まれるフィールドは、通常、同じ順序であるが、少なくとも幾つかは、含まれるフィールドが少ないので、異なるビット位置を有する)、及び/又は異なって解釈される所与のフィールドを有するように定義することができる。このように、ISAの各命令は、所与の命令フォーマットを用いて(定義される場合、その命令フォーマットの命令テンプレートのうちの所与の1つにおいて)表され、演算及びオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと、このオペコードを指定するオペコードフィールド及びオペランド(ソース1/デスティネーション及びソース2)を選択するオペランドフィールドを含む命令フォーマットとを有し、命令ストリームにおけるこのADD命令の生起は、特定のオペランドを選択するオペランドフィールドに特定のコンテンツを有する。アドバンストベクトルエクステンション(AVX:Advanced Vector Extensions)(AVX1及びAVX2)と呼ばれるとともにベクトルエクステンション(VEX:Vector Extensions)符号化方式を用いる一組のSIMDエクステンションがリリースされ及び/又公開されている。(例えば、Intel(登録商標) 64 and IA-32 Architectures Software Developers Manual, October 1911及びIntel(登録商標) Advanced Vector Extensions Programming Reference, June 1911を参照)。
例示的な命令フォーマット
本明細書において説明する命令の実施形態は、種々のフォーマットで具現化することができる。加えて、例示的なシステム、アーキテクチャ、及びパイプラインが以下に詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、及びパイプライン上で実行することができるが、詳述されるものに限定されるものではない。
VEX命令フォーマット
VEXエンコードによって、命令が3つ以上のオペランドを有することが可能になり、SIMDベクトルレジスタを118ビットよりも長くすることが可能になる。VEXプレフィックスの使用によって、3オペランド(又はそれよりも多くのオペランド)シンタックスが提供される。例えば、これまでの2オペランド命令は、ソースオペランドを上書きするA=A+B等の演算を実行していた。VEXプレフィックスの使用によって、オペランドは、A=B+C等の非消去的な演算を実行することが可能になる。
図11Aは、VEXプレフィックス1102、リアルオペコードフィールド1130、Mod R/Mバイト1140、SIBバイト1150、変位フィールド1162、及びIMM8 1172を含む例示的なAVX命令フォーマットを示している。図11Bは、図11Aからのどのフィールドがフルオペコードフィールド1174及びベース演算フィールド1142を構成するのかを示している。図11Cは、図11Aからのどのフィールドがレジスタインデックスフィールド1144を構成するのかを示している。
VEXプレフィックス(バイト0〜2)1102は、3バイト形式でエンコードされる。第1のバイトは、フォーマットフィールド1140(VEXバイト0、ビット[7:0])であり、このフィールドは、明示的なC4バイト値(C4命令フォーマットを区別するのに用いられる一意の値)を含む。第2のバイト及び第3のバイト(VEXバイト1及び2)は、特定の機能を提供する複数のビットフィールドを含む。具体的には、REXフィールド1105(VEXバイト1、ビット[7〜5])は、VEX.Rビットフィールド(VEXバイト1、ビット[7]−R)と、VEX.Xビットフィールド(VEXバイト1、ビット[6]−X)と、VEX.Bビットフィールド(VEXバイト1、ビット[5]−B)とからなる。命令の他のフィールドは、当該技術分野で知られているように、レジスタインデックスの下位3ビット(rrr、xxx、及びbbb)をエンコードし、VEX.R、VEX.X、及びVEX.Bを加えることによってRrrr、Xxxx、及びBbbbを形成することができるようにする。オペコードマップフィールド1115(VEXバイト1、ビット[4:0]−mmmmm)は、暗黙のリーディングオペコードバイトをエンコードするコンテンツを含む。Wフィールド1164(VEXバイト2、ビット[7]−W)は、VEX.Wという表記によって表され、命令に応じて異なる機能を提供する。VEX.vvvv1120(VEXバイト2、ビット[6:3]−vvvv)の役割は、次のもの、すなわち、1)VEX.vvvvが、反転された(1の補数)形式で指定された第1のソースレジスタオペランドをエンコードし、2つ以上のソースオペランドを有する命令に有効であること、2)VEX.vvvvが、或る特定のベクトルシフトについて1の補数の形式で指定されたデスティネーションレジスタオペランドをエンコードすること、又は3)VEX.vvvvがどのオペランドもエンコードしないこと、を含むことができ、このフィールドは予約され、1111bを含むべきであるる。VEX.L1168のサイズフィールド(VEXバイト2、ビット[2]−L)=0である場合、これは、118ビットベクトルを示す。VEX.L=1である場合、これは、256ビットベクトルを示す。プレフィックスエンコードフィールド1125(VEXバイト2、ビット[1:0]−pp)は、ベース演算フィールド用の追加のビットを提供する。
リアルオペコードフィールド1130(バイト3)は、オペコードバイトとしても知られている。このオペコードの一部は、このフィールドにおいて指定される。
MOD R/Mフィールド1140(バイト4)は、MODフィールド1142(ビット[7-6])、Regフィールド1144(ビット[5〜3])、及びR/Mフィールド1146(ビット[2〜0])を含む。Regフィールド1144の役割は、次のもの、すなわち、デスティネーションレジスタオペランド又はソースレジスタオペランド(Rrrrのrrr)をエンコードすること、を含むこともできるし、オペコードエクステンションとして扱われて、どの命令オペランドをエンコードするのにも用いられないようにすることもできる。R/Mフィールド1146の役割は、次のもの、すなわち、メモリアドレスを参照する命令オペランドをエンコードすること、又はデスティネーションレジスタオペランド若しくはソースレジスタオペランドをエンコードすることを含むことができる。
スケール、インデックス、ベース(SIB)。スケールフィールド1150(バイト5)のコンテンツは、メモリアドレス生成に用いられるSS1152(ビット[7〜6])を含む。SIB.xxx1154(ビット[5〜3])及びSIB.bbb1156(ビット[2〜0])のコンテンツは、レジスタインデックスXxxx及びBbbbに関して前に言及している。
変位フィールド1162及び即値フィールド(IMM8)1172は、アドレスデータを含む。
例示的なレジスタアーキテクチャ
図12は、本発明の1つの実施形態によるレジスタアーキテクチャ1200のブロック図である。図示した実施形態には、511ビット幅の32個のベクトルレジスタ1210が存在する。これらのレジスタは、zmm0〜zmm31として参照される。下位の15個のzmmレジスタの低順序の256ビットは、レジスタymm0〜ymm15の上に重ねられている。下位の15個のzmmレジスタの低順序の118ビット(ymmレジスタの低順序の118ビット)は、レジスタxmm0〜xmm14の上に重ねられている。
書き込みマスクレジスタ1214。図示した実施形態では、それぞれサイズが64ビットの8つの書き込みマスクレジスタ(k0〜k7)がある。代替の実施形態では、書き込みマスクレジスタ1214は、サイズが15ビットである。前述したように、本発明の1つの実施形態では、ベクトルマスクレジスタk0は、書き込みマスクとして用いることができない。通常、k0を示すエンコードが書き込みマスクに用いられるとき、このエンコードは、その命令用の書き込みマスキングを有効にディセーブルする0xFFFFのハードワイヤード書き込みマスクを選択する。
汎用レジスタ1225。図示した実施形態には、メモリオペランドをアドレス指定する既存のx86アドレス指定モードとともに用いられる16個の64ビット汎用レジスタがある。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、及びR8〜R14という名称によって参照される。
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、スケジューリング(ディスパッチ又は発行としても知られている)ステージ1311、レジスタ読み出し/メモリ読み出しステージ1313、実行ステージ1315、ライトバック/メモリ書き込みステージ1317、例外ハンドリングステージ1322、及びコミットステージ1324を備える。
図13Bは、実行エンジンユニット1350に結合されたフロントエンドユニット1330を備えるプロセッサコア1390を示し、双方は、メモリユニット1370に結合されている。コア1390は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、又はハイブリッドコアタイプ若しくは代替のコアタイプとすることができる。更に別のオプションとして、コア1390は、例えば、ネットワークコア又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア、グラフィックスコア等のような専用コアとすることができる。
フロントエンドユニット1330は、命令キャッシュユニット1334に結合された分岐予測ユニット1332を備え、この命令キャッシュユニットは、命令変換索引バッファー(TLB)1336に結合され、この命令変換索引バッファーは、命令フェッチユニット1338に結合され、この命令フェッチユニットは、デコードユニット1340に結合されている。デコードユニット1340(又はデコーダー)は、命令をデコードし、オリジナルの命令からデコードされるか、又はオリジナルの命令を別の方法で反映するか、又はオリジナルの命令から導出される1つ又は複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成することができる。デコードユニット1340は、様々な異なるメカニズムを用いて実施することができる。好適なメカニズムの例には、ルックアップテーブル、ハードウェア実施態様、プログラマブルロジックアレイ(PLA)、マイクロコード読み出し専用メモリ(ROM)等が含まれるが、これらに限定されるものではない。1つの実施形態では、コア1390は、(例えば、デコードユニット1340内又は別の状況ではフロントエンドユニット1330内において)或る特定のマクロ命令用のマイクロコードを記憶するマイクロコードROM又は他の媒体を備える。デコードユニット1340は、実行エンジンユニット1350内のリネーム/アロケーターユニット1352に結合されている。
実行エンジンユニット1350は、リタイアメントユニット1354と一組の1つ又は複数のスケジューラユニット1356とに結合されたリネーム/アロケーターユニット1352を備える。スケジューラユニット1356は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット1356は、物理レジスタファイルユニット1358に結合されている。物理レジスタファイルユニット1358のそれぞれは、1つ又は複数の物理レジスタファイルを表し、これらの物理レジスタファイルの異なるものは、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインター)等の1つ又は複数の異なるデータタイプを記憶する。1つの実施形態では、物理レジスタファイルユニット1358は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラーレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供することができる。物理レジスタファイルユニット1358は、(例えば、リオーダーバッファー及びリタイアメントレジスタファイルを用いる;フューチャーファイル、履歴バッファー、及びリタイアメントレジスタファイルを用いる;レジスタマップ及びレジスタのプールを用いる等して)レジスタリネーム及びアウトオブオーダー実行を実施することができる様々な方法を示すリタイアメントユニット1354によって重ね合わされる。リタイアメントユニット1354及び物理レジスタファイルユニット1358は、実行クラスター1360に結合されている。実行クラスター1360は、一組の1つ又は複数の実行ユニット1362及び一組の1つ又は複数のメモリアクセスユニット1364を備える。実行ユニット1362は、様々なタイプのデータ(例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して様々な演算(例えば、シフト、加算、減算、乗算)を実行することができる。幾つかの実施形態は、特定の機能又は特定の数組の機能に専用の複数の実行ユニットを備えることができるが、他の実施形態は、全ての機能を全て実行する1つの実行ユニットのみ又は複数の実行ユニットを備えることができる。スケジューラユニット1356、物理レジスタファイルユニット1358、及び実行クラスター1360は、場合によっては複数のものとして示される。なぜならば、或る特定の実施形態は、或る特定のタイプのデータ/演算用の別々のパイプライン(例えば、それぞれがそれ自体のスケジューラユニット、物理レジスタファイルユニット、及び/又は実行クラスターを有するスカラー整数パイプライン、スカラー浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又はメモリアクセスパイプライン。別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスターのみがメモリアクセスユニット1364を有する或る特定の実施形態が実施される)を作成するからである。別々のパイプラインが用いられる場合、これらのパイプラインのうちの1つ又は複数はアウトオブオーダー発行/実行とすることができ、残りはインオーダーとすることができることも理解されるべきである。
一組のメモリアクセスユニット1364は、メモリユニット1370に結合され、このメモリユニットは、レベル2(L2)キャッシュユニット1376に結合されたデータキャッシュユニット1374に結合されているデータTLBユニット1372を備える。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が、スケジュールステージ1311を実行する;5)物理レジスタファイルユニット1358及びメモリユニット1370が、レジスタ読み出し/メモリ読み出しステージ1313を実行する;実行クラスター1360が、実行ステージ1315を実行する;6)メモリユニット1370及び物理レジスタファイルユニット1358が、ライトバック/メモリ書き込みステージ1317を実行する;7)様々なユニットが、例外ハンドリングステージ1322に関与することができる;並びに8)リタイアメントユニット1354及び物理レジスタファイルユニット1358が、コミットステージ1324を実行する。
コア1390は、本明細書において説明する命令を含む1つ又は複数の命令セット(例えば、x86命令セット(より新しいバージョンとともに追加された幾つかの拡張を有する);カリフォルニア州サニーベールのMIPS Technologies社のMIPS命令セット;カリフォルニア州サニーベールのARM Holdings社のARM命令セット(NEON等のオプションの追加の拡張を有する)をサポートすることができる。1つの実施形態では、コア1390は、パックドデータ命令セットエクステンション(例えば、AVX1、AVX2)をサポートするロジックを備え、それによって、多くのマルチメディアアプリケーションによって用いられる演算をパックドデータを用いて実行することが可能になる。
コアはマルチスレッド化(並列の2つ以上の組の演算又はスレッドを実行する)をサポートすることができ、タイムスライスマルチスレッド化、同時マルチスレッド化(単一の物理コアが、当該物理コアが同時にマルチスレッド化しているスレッドのそれぞれについて論理コアを提供する)、又はそれらの組合せ(例えば、Intel(登録商標)のHyperthreading technology等のタイムスライスフェッチ及びデコード、並びにその後の同時のマルチスレッド化)を含む様々な方法でそれを行うことができることが理解されるべきである。
レジスタリネームは、アウトオブオーダー実行との関連で説明されているが、レジスタリネームは、インオーダーアーキテクチャにおいても用いることができることが理解されるべきである。プロセッサの図示した実施形態は、別々の命令キャッシュユニット1334及びデータキャッシュユニット1374並びに共有L2キャッシュユニット1376を備えるが、代替の実施形態は、例えば、レベル1(L1)内部キャッシュ、又は複数のレベルの内部キャッシュ等の命令及びデータの双方用の単一の内部キャッシュを有することができる。幾つかの実施形態では、システムは、内部キャッシュと、コア及び/又はプロセッサの外部にある外部キャッシュとの組合せを備えることができる。代替的に、キャッシュの全てを、コア及び/又はプロセッサの外部にすることができる。
具体的な例示的インオーダーコアアーキテクチャ
図14A及び図14Bは、より具体的な例示的インオーダーコアアーキテクチャのブロック図を示している。このコアは、チップ内の幾つかの論理ブロック(同じタイプ及び/又は異なるタイプの他のコアを含む)のうちの1つである。これらの論理ブロックは、アプリケーションに応じて、或る固定機能ロジック、メモリI/Oインターフェース、及び他の必要なI/Oロジックと、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を通じて通信する。
図14Aは、本発明の実施形態による、オンダイ相互接続ネットワーク1402への接続と、レベル2(L2)キャッシュ1404のローカルサブセットとを伴った単一のプロセッサコアのブロック図である。1つの実施形態では、命令デコーダー1400は、パックドデータ命令セットエクステンションを有するx86命令セットをサポートする。L1キャッシュ1406は、スカラーユニット及びベクトルユニット内へのキャッシュメモリへの低レイテンシーアクセスを可能にする。1つの実施形態(設計を単純化する)では、スカラーユニット1408及びベクトルユニット1410は、別々のレジスタセット(それぞれ、スカラーレジスタ1412及びベクトルレジスタ1414)を用い、それらの間で転送されるデータは、メモリに書き込まれ、次いで、レベル1(L1)キャッシュ1406からリードバックされるが、本発明の代替の実施形態は、異なる手法を用いる(例えば、単一のレジスタセットを用いるか、又はライトバック及びリードバックされることなく2つのレジスタファイル間でデータを転送することを可能にする通信パスを備える)ことができる。
L2キャッシュ1404のローカルサブセットは、プロセッサコアごとに1つの別々のローカルサブセットに分割されたグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュ1404のそれ自身のローカルサブセットへの直接アクセスパスを有する。プロセッサコアによって読み出されたデータは、当該プロセッサコアのL2キャッシュサブセット1404に記憶され、他のプロセッサコアがそれら自身のローカルL2キャッシュサブセットにアクセスすることと並列に高速にアクセスすることができる。プロセッサコアによって書き込まれたデータは、それ自身のL2キャッシュサブセット1404に記憶され、必要な場合に他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシーを保証する。リングネットワークは、プロセッサコア、L2キャッシュ、及び他の論理ブロック等のエージェントがチップ内で互いに通信することを可能にするために双方向である。各リングデータパスは、方向あたり1011ビット幅である。
図14Bは、本発明の実施形態による、図14Aにおけるプロセッサコアの一部の拡大図である。図14Bは、L1キャッシュ1404のL1データキャッシュ1406A部分、並びにベクトルユニット1410及びベクトルレジスタ1413に関するより詳細な内容を含む。具体的には、ベクトルユニット1410は、整数命令、単精度浮動小数点命令、倍精度浮動小数点命令のうちの1つ又は複数を実行する15幅ベクトル処理ユニット(VPU)(15幅ALU1428を参照)である。VPUは、スウィズルユニット1419を用いたレジスタ入力のスウィズルと、数値変換ユニット1422A及び1422Bを用いた数値変換と、メモリ入力に関する複製ユニット1424を用いた複製とをサポートする。書き込みマスクレジスタ1426は、結果のベクトル書き込みを断定することを可能にする。
統合メモリコントローラー及び統合グラフィックスを有するプロセッサ
図15は、本発明の実施形態による、2つ以上のコアを有することができ、統合メモリコントローラーを有することができ、統合グラフィックスを有することができるプロセッサ1500のブロック図である。図15における実線のボックスは、単一のコア1502Aと、システムエージェント1510と、一組の1つ又は複数のバスコントローラーユニット1515とを有するプロセッサ1500を示している一方、破線のボックスのオプションの追加は、複数のコア1502A〜1502Nと、システムエージェントユニット1510内の一組の1つ又は複数の統合メモリコントローラーユニット1513と、専用ロジック1508とを有する代替のプロセッサ1500を示している。
したがって、プロセッサ1500の種々の実施態様は、1)統合グラフィックス及び/又は科学(スループット)ロジック(1つ又は複数のコアを備えることができる)である専用ロジック1508と、1つ又は複数の汎用コア(例えば、汎用インオーダーコア、汎用アウトオブオーダーコア、これらの2つの組合せ)であるコア1502A〜1502Nとを有するCPUと、2)主としてグラフィックス及び/又は科学(スループット)向けの多数の専用コアであるコア1502A〜1502Nを有するコプロセッサと、3)多数の汎用インオーダーコアであるコア1502A〜1502Nを有するコプロセッサとを備えることができる。したがって、プロセッサ1500は、汎用プロセッサ、例えば、ネットワークプロセッサ若しくは通信プロセッサ等のコプロセッサ又は専用プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットメニーインテグレーテッドコア(MIC)コプロセッサ(30個以上のコアを備える)、組み込みプロセッサ等とすることができる。このプロセッサは、1つ又は複数のチップ上に実装することができる。プロセッサ1500は、例えば、BiCMOS、CMOS、又はNMOS等の複数のプロセス技術のうちの任意のものを用いた1つ若しくは複数の基板の一部とすることができ、及び/又は1つ若しくは複数の基板上に実装することができる。
メモリ階層は、コア内の1つ又は複数のレベルのキャッシュと、一組の1つ又は複数の共有キャッシュユニット1506と、一組の統合メモリコントローラーユニット1513に結合された外部メモリ(図示せず)とを含む。一組の共有キャッシュユニット1506は、レベル2(L2)、レベル3(L3)、レベル4(L4)、若しくは他のレベルのキャッシュ等の1つ又は複数の中間レベルキャッシュ、最終レベルキャッシュ(LLC)、及び/又それらの組合せを含むことができる。1つの実施形態では、リングベースの相互接続ユニット1511が、統合グラフィックスロジック1508、一組の共有キャッシュユニット1506、及びシステムエージェントユニット1510/統合メモリコントローラーユニット1513を相互接続するが、代替の実施形態は、そのようなユニットを相互接続するための任意の数のよく知られた技法を用いることができる。1つの実施形態では、1つ又は複数のキャッシュユニット1506とコア1502A〜1502Nとの間にコヒーレンシーが維持される。
幾つかの実施形態では、コア1502A〜1502Nのうちの1つ又は複数は、マルチスレッド化することができる。システムエージェント1510は、コア1502A〜1502Nを連係及び動作させる構成要素を備える。システムエージェントユニット1510は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを備えることができる。PCUは、コア1502A〜1502N及び統合グラフィックスロジック1508の電力状態を調整するのに必要なロジック及び構成要素とすることができるか又はそれらを備えることができる。ディスプレイユニットは、1つ又は複数の外部に接続されたディスプレイを駆動するためのものである。
コア1502A〜1502Nは、アーキテクチャ命令セットの観点で同種のものとすることもできるし、異種のものとすることもできる。すなわち、コア1502A〜1502Nのうちの2つ以上は、同じ命令セットを実行可能とすることができる一方、他のものは、その命令セットのサブセットのみ又は異なる命令セットを実行可能とすることができる。
例示的なコンピューターアーキテクチャ
図16〜図19は、例示的なコンピューターアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバー、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラー、携帯電話、ポータブルメディアプレイヤー、ハンドヘルドデバイス、及び他の様々な電子デバイスについて当該技術分野において知られている他のシステム設計及び構成も適している。概して、本明細書において開示されるようなプロセッサ及び/又は他の実行ロジックを組み込むことができる非常に多くの様々なシステム又は電子デバイスが一般に適している。
次に図16を参照すると、本発明の1つの実施形態によるシステム1600のブロック図が示されている。システム1600は、コントローラーハブ1620に結合された1つ又は複数のプロセッサ1610、1615を備えることができる。1つの実施形態では、コントローラーハブ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つの組合せとすることができる。少なくとも1つの実施形態について、コントローラーハブ1620は、フロントサイドバス(FSB)等のマルチドロップバス、QuickPath Interconnect(QPI)等のポイントツーポイントインターフェース、又は同様の接続1695を介してプロセッサ1610、1615と通信する。
1つの実施形態では、コプロセッサ1645は、例えば、高スループットMICプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ等のような専用プロセッサである。1つの実施形態では、コントローラーハブ1620は、統合グラフィックスアクセラレーターを備えることができる。
アーキテクチャの特性、マイクロアーキテクチャの特性、熱特性、電力消費特性等を含む多様なメリットメトリック(metrics of merit)の観点から、物理リソース1610、1615間には様々な相違が存在する可能性がある。
1つの実施形態では、プロセッサ1610は、一般のタイプのデータ処理演算を制御する命令を実行する。命令内には、コプロセッサ命令を組み込むことができる。プロセッサ1610は、これらのコプロセッサ命令を、アタッチされたコプロセッサ1645によって実行されるべきタイプであるとして認識する。したがって、プロセッサ1610は、これらのコプロセッサ命令(又はコプロセッサ命令を表す制御信号)を、コプロセッサ1645に向けてコプロセッサバス又は他の相互接続上に発行する。コプロセッサ1645は、受信したコプロセッサ命令を受理して実行する。
次に図17を参照すると、本発明の一実施形態による第1のより具体的な例示的システム1700のブロック図が示されている。図17に示すように、マルチプロセッサシステム1700は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1750を介して結合された第1のプロセッサ1770及び第2のプロセッサ1780を備える。プロセッサ1770及び1780のそれぞれは、プロセッサ1500の或るバージョンとすることができる。本発明の1つの実施形態では、プロセッサ1770及び1780は、それぞれプロセッサ1610及び1615である一方、コプロセッサ1738は、コプロセッサ1645である。別の実施形態では、プロセッサ1770及び1780は、それぞれプロセッサ1610及びコプロセッサ1645である。
プロセッサ1770及び1780は、それぞれ統合メモリコントローラー(IMC)ユニット1772及び1782を備えるものとして示されている。プロセッサ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と情報を交換することができる。1つの実施形態では、コプロセッサ1738は、例えば、高スループットMICプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ等のような専用プロセッサである。
共有キャッシュ(図示せず)を、いずれかのプロセッサ内に備えることもできるし、双方のプロセッサの外部に備えて、さらに、P−P相互接続を介してプロセッサと接続することもでき、その結果、プロセッサが低電力モードになった場合に、いずれかのプロセッサ又は双方のプロセッサのローカルキャッシュ情報を共有キャッシュに記憶することができる。
チップセット1790は、インターフェース1796を介して第1のバス1716に結合することができる。1つの実施形態では、第1のバス1716は、周辺機器相互接続(PCI)バス、又はPCIエクスプレスバス若しくは別の第3世代I/O相互接続バス等のバスとすることができるが、本発明の範囲は、そのように限定されるものではない。
図17に示すように、様々なI/Oデバイス1714を、第1のバス1716を第2のバス1719に結合するバスブリッジ1718とともに第1のバス1716に結合することができる。1つの実施形態では、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレーター(例えば、グラフィックスアクセラレーター又はデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、又は他の任意のプロセッサ等の1つ又は複数の追加のプロセッサ1715が第1のバス1716に結合されている。1つの実施形態では、第2のバス1719は、ローピンカウント(LPC)バスとすることができる。様々なデバイスを第2のバス1719に結合することができる。これらの様々なデバイスには、例えば、キーボード及び/又はマウス1722、通信デバイス1727、並びに1つの実施形態では命令/コード及びデータ1730を含むことができるディスクドライブ若しくは他のマスストレージデバイス等の記憶ユニット1728が含まれる。さらに、オーディオI/O1724を第2のバス1719に結合することができる。他のアーキテクチャが可能であることに留意されたい。例えば、図17のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスアーキテクチャ又は他のそのようなアーキテクチャを実装することができる。
次に図18を参照すると、本発明の一実施形態による第2のより具体的な例示的なシステム1800のブロック図が示されている。図17及び図18における同様の要素は、同様の参照符号を有し、図17の或る特定の態様(certain aspects)は、図18の他の態様を分かりにくくしないように図18から省略されている。
図18は、プロセッサ1770、1780が、それぞれ、統合されたメモリ及びI/Oの制御ロジック(「CL」)1772及び1782を備えることができることを示している。したがって、CL1772、1782は、統合メモリコントローラーユニットを備え、I/O制御ロジックを備える。図18は、メモリ1732、1734がCL1772、1782に結合されていることだけでなく、I/Oデバイス1813も制御ロジック1772、1782に結合されていることを示している。レガシーI/Oデバイス1814がチップセット1790に結合されている。
次に図19を参照すると、本発明の一実施形態によるSoC1900のブロック図が示されている。図15における同様の要素は、同様の参照符号を有する。また、破線のボックスは、より高度なSoC上のオプションの特徴である。図19において、相互接続ユニット1902は、一組の1つ又は複数のコア192A〜192N及び共有キャッシュユニット1506を備えるアプリケーションプロセッサ1910と、システムエージェントユニット1510と、バスコントローラーユニット1515と、統合メモリコントローラーユニット1513と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含むことができる一組の1つ又は複数のコプロセッサ1919と、スタティックランダムアクセスメモリ(SRAM)ユニット1930と、ダイレクトメモリアクセス(DMA)ユニット1932と、1つ又は複数の外部ディスプレイに結合するためのディスプレイユニット1940とに結合されている。1つの実施形態では、コプロセッサ1919は、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサ等のような専用プロセッサを含む。
本明細書において開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実施手法の組合せで実施することができる。本発明の実施形態は、少なくとも1つのプロセッサと、記憶システム(揮発性及び不揮発性メモリ及び/又は記憶素子を含む)と、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスとを備えるプログラマブルシステム上で実行されるコンピュータープログラム又はプログラムコードとして実施することができる。
図17に図示したコード1730等のプログラムコードは、入力された命令に適用されて、本明細書において説明した機能を実行し、出力情報を生成することができる。この出力情報は、既知の方法で1つ又は複数の出力デバイスに適用することができる。この適用のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラー、特定用途向け集積回路(ASIC)、又はマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信する高級手続型プログラム言語又はオブジェクト指向型プログラム言語で実施することができる。プログラムコードは、所望の場合には、アセンブリ言語又は機械語で実施することもできる。実際に、本明細書において説明したメカニズムは、どの特定のプログラム言語にも範囲が限定されるものではない。いずれにしても、この言語は、コンパイル型言語又は解釈型言語とすることができる。
少なくとも1つの実施形態の1つ又は複数の態様は、機械によって読み出されると、当該機械に、本明細書において説明した技法を実行するロジックを作製させるプロセッサ内の様々なロジックを表す機械可読媒体上に記憶された代表的な命令によって実施することができる。「IPコア」として知られているそのような表現は、有形の機械可読媒体上に記憶することができ、様々な顧客又は製造設備に供給して、ロジック又はプロセッサを実際に作製する製造機械にロードすることができる。
そのような機械可読記憶媒体は、機械又はデバイスによって製造又は形成された物品の非一時的な有形の構成を含むことができるが、これに限定されるものではない。これらの物品は、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD−ROM)、再書込み可能コンパクトディスク(CD−RW)、及び光磁気ディスクを含む他の任意のタイプのディスク、読み出し専用メモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブル読み出し専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)、相変化メモリ(PCM)、磁気カード若しくは光カード、又は電子命令を記憶するのに好適な他の任意のタイプの媒体等の半導体デバイス等の記憶媒体を含む。
したがって、本発明の実施形態は、命令を含む非一時的な有形の機械可読媒体、又は本明細書において説明した構造、回路、装置、プロセッサ及び/又はシステムの特徴を定義するハードウェア記述言語(HDL)等の設計データを含む非一時的な有形の機械可読媒体も含む。そのような実施形態は、プログラム製品と呼ばれる場合もある。
エミュレーション(バイナリ変換、コードモーフィング等を含む)
場合によっては、命令変換器を用いて、命令をソース命令セットからターゲット命令セットに変換することができる。例えば、命令変換器は、命令を、コアによって処理される1つ又は複数の他の命令に変換(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる)、モーフィング、エミュレート、又は別の方法で変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組合せで実施することができる。命令変換器は、オンプロセッサ、オフプロセッサ、又は一部分がオンプロセッサ及び一部分がオフプロセッサとすることができる。
図20は、本発明の実施形態による、ソフトウェア命令変換器を用いて、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換することを対比したブロック図である。図示した実施形態では、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はそれらの様々な組合せで実施することができる。図20は、高級言語2002によるプログラムを、x86コンパイラー2004を用いてコンパイルしてx86バイナリコード2006を生成することができることを示している。このx86バイナリコードは、少なくとも1つのx86命令セットコア2015を有するプロセッサが本来的に実行することができるものである。少なくとも1つのx86命令セットコア2015を有するプロセッサは、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ結果を達成するために、(1)Intel x86命令セットコアの命令セットの実質的部分、又は(2)少なくとも1つのx86命令セットコアを有するIntelプロセッサ上で実行されることを目的としたアプリケーション又は他のソフトウェアのオブジェクトコードバージョン、を矛盾なく実行又は別の方法で処理することによって、少なくとも1つのx86命令セットコアを有するIntelプロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表している。x86コンパイラー2004は、追加のリンク処理の有無を問わず、少なくとも1つのx86命令セットコア2015を有するプロセッサ上で実行することができるx86バイナリコード2006(例えば、オブジェクトコード)を生成するように動作可能なコンパイラーを表している。同様に、図20は、高級言語2002によるプログラムを、代替の命令セットコンパイラー2008を用いてコンパイルして代替の命令セットバイナリコード2010を生成することができることを示している。この代替の命令セットバイナリコードは、少なくとも1つのx86命令セットコア2013を有しないプロセッサ(例えば、カリフォルニア州サニーベールのMIPS Technologies社のMIPS命令セットを実行するコアを有するプロセッサ及び/又はカリフォルニア州サニーベールのARM Holdings社のARM命令セットを実行するコアを有するプロセッサ)が本来的に実行することができるものである。命令変換器2011は、x86バイナリコード2006を、x86命令セットコア2013を有しないプロセッサが本来的に実行することができるコードに変換するのに用いられる。この変換されたコードは、代替の命令セットバイナリコード2010と同じである可能性は低い。なぜならば、これを行うことができる命令変換器は、作製が困難であるからである。しかしながら、変換されたコードは、一般的な演算を達成し、代替の命令セットからの命令で構成される。したがって、命令変換器2011は、エミュレーション、シミュレーション、又は他の任意のプロセスを通じて、x86命令セットプロセッサもコアも有しないプロセッサ又は他の電子デバイスがx86バイナリコード2006を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、又はそれらの組合せを表している。
幾つかの実施形態では、8ビット、16ビット、32ビット、及び64ビット、又はそれらの或る組合せの演算マスク幅をオプションとしてサポートすることができる。幾つかの実施形態では、命令セットは、サポートされる異なる演算マスク幅ごとに異なる演算マスクコンソリデーション命令を含むことができる。演算マスクコンソリデーション命令のオペコードは、演算マスクの幅を暗黙的に示すことができる。代替的に、演算マスクコンソリデーション命令は、複数のサポートされる異なる演算マスク幅に用いることができる。例えば、演算マスクコンソリデーション命令は、用いられる演算マスク幅を示す1つ若しくは複数のビット又はフィールドを有することができる。
幾つかの実施形態では、演算マスクコンソリデーション命令のオペコードは、特定のデータ再配置演算が(例えば、並べ替え制御(permute control)データを通じて)明示的に指定される必要なく、かつ、特定の単一の又は限られた一組のデータ再配置演算が必要とされることなく、演算マスクコンソリデーション演算が実行されることを示すことができる。この命令のオペコードに応答して、ソース演算マスク内のマスクされた要素及びマスクされていない要素のどの特定の配置にもかかわらず又は関係なく、コンソリデートされた演算マスクを記憶することができる。幾つかの実施形態では、命令は、マスクされた要素及びマスクされていない要素をどのように移動し、再配置し、又は並べ替えてコンソリデートされた演算マスクを生成するのかを明示的に指定しない。幾つかの実施形態では、演算マスクコンソリデーション命令は、要素をどのように移動又は再配置して演算マスクを生成するのかを明示的に指定することなく、マスクされた要素及びマスクされていない要素の配置に応じて異なって要素を移動させる。
図4A、図4B、図6、及び図7〜図10のうちの任意のものについて説明した構成要素、特徴、及び詳細は、オプションとして、図1、図3、及び図5のうちの任意のものにおいても用いことができる。その上、装置のうちの任意のものについて本明細書において説明した構成要素、特徴、及び詳細は、オプションとして、実施形態においてそのような装置によって及び/又はそのような装置を用いて実行することができる本明細書において説明した演算及び方法のうちの任意のものにおいても用いることができる。図2A/2Bについて説明した演算マスクのオプションの特徴及び詳細は、図1、図3、図4A、図4B、及び図5のうちの任意のものの演算マスクにも適用することができる。
例示の実施形態
以下の例は、更なる実施形態に関係している。それらの例における細部は、1つ又は複数の実施形態における任意の箇所に用いることができる。
例1は、命令処理装置である。この命令処理装置は、複数の演算マスクレジスタを備える。この命令処理装置は、演算マスクコンソリデーション命令を受信するデコードユニットも備える。この演算マスクコンソリデーション命令は、上記複数の演算マスクレジスタのソース演算マスクレジスタと、デスティネーション記憶ロケーションとを示す。ソース演算マスクレジスタは、複数のマスクされていない要素内に配置される複数のマスクされた要素を含むソース演算マスクを含む。この命令処理装置は、デコードユニットと結合された実行ユニットも備える。この実行ユニットは、演算マスクコンソリデーション命令に応答して、コンソリデートされた演算マスクをデスティネーション記憶ロケーションに記憶する。コンソリデートされた演算マスクは、ともにコンソリデートされたソース演算マスクからのマスクされていない要素を含む。
例2は、例1の主題を含み、この主題においてオプションとして、上記実行ユニットが、演算マスクコンソリデーション命令に応答して、マスクされた要素が、コンソリデートされたマスクされていない要素内に配置されないように、マスクされていない要素をともにコンソリデートする。
例3は、例1の主題を含み、この主題においてオプションとして、上記実行ユニットが、演算マスクコンソリデーション命令に応答して、ソース演算マスクからのマスクされていない要素を、コンソリデートされた演算マスクの最下位部分においてともにコンソリデートする。
例4は、例1の主題を含み、この主題においてオプションとして、上記実行ユニットが、演算マスクコンソリデーション命令に応答して、ソース演算マスクからのマスクされていない要素を、コンソリデートされた演算マスクの最上位部分においてともにコンソリデートする。
例5は、例1の主題を含み、この主題においてオプションとして、上記デコードユニットが演算マスクコンソリデーション命令を受信する。この演算マスクコンソリデーション命令は、ソース演算マスクからのマスクされていない要素がコンソリデートされた演算マスクの最下位部分においてともにコンソリデートされることを示す第1の値を有するように使用可能な1つ又は複数のビットを含む。この演算マスクコンソリデーション命令は、ソース演算マスクからのマスクされていない要素がコンソリデートされた演算マスクの最上位部分においてともにコンソリデートされることを示す第2の値を有する。
例6は、例1の主題を含み、この主題においてオプションとして、ソース演算マスクレジスタが、マスクされた要素及びマスクされていない要素のそれぞれが異なる単一のビットであるソース演算マスクを有する。
例7は、例6の主題を含み、この主題においてオプションとして、各マスクされた要素が、バイナリの0の値を有し、各マスクされていない要素が、バイナリの1の値を有する。
例8は、例1の主題を含み、この主題においてオプションとして、複数の演算マスクレジスタが、一組の8つの演算マスクレジスタを含み、8つの演算マスクレジスタのそれぞれが、少なくとも64ビットまでを有する演算マスクを記憶し、デコードユニットが、8つの演算マスクレジスタのうちの1つとしてソース演算マスクレジスタを指定する3ビットフィールドを有する演算マスクコンソリデーション命令を受信する。
例9は、例1の主題を含み、この主題においてデコードユニットが、ソース演算マスクレジスタを明示的に指定するとともにデスティネーション記憶ロケーションとしてデスティネーション演算マスクレジスタを明示的に指定する演算マスクコンソリデーション命令を受信する。
例10は、例1〜9のうちのいずれかの主題を含み、この主題においてデコードユニットが、コンソリデートされた演算マスクが、ソース演算マスクにおけるマスクされた要素及びマスクされていない要素の任意の特定の配置を問わず記憶されることを示すオペコードを有する演算マスクコンソリデーション命令を受信する。
例11は、例1〜9のうちのいずれかの主題を含み、この主題において演算マスクレジスタが、パックドデータに対して演算をプレディケートするのに用いられる演算マスクを記憶する。
例12は、プロセッサ内における方法である。この方法は、演算マスクコンソリデーション命令を受信することを含む。この演算マスクコンソリデーション命令は、ソース演算マスク及びデスティネーション記憶ロケーションを示す。ソース演算マスクは、複数のマスクされていない要素内に配置された複数のマスクされた要素を含む。この方法は、演算マスクコンソリデーション命令に応答して、コンソリデートされた演算マスクをデスティネーション記憶ロケーションに記憶することも含む。コンソリデートされた演算マスクは、ともにコンソリデートされたソース演算マスクからのマスクされていない要素を含む。
例13は、例12の主題を含み、この主題においてソース演算マスクからのマスクされていない要素が、コンソリデートされた演算マスクの最下位部分においてともにコンソリデートされる。
例14は、例12の主題であって、ソース演算マスクからのマスクされていない要素が、コンソリデートされた演算マスクの最上位部分においてともにコンソリデートされる。
例15は、例12の主題を含み、この主題において演算マスクコンソリデーション命令が、ソース演算マスクからのマスクされていない要素が、コンソリデートされた演算マスクの最下位部分においてともにコンソリデートされることを示す第1の値を有する1つ又は複数のビットを含む。1つ又は複数のビットは、ソース演算マスクからのマスクされていない要素が、コンソリデートされた演算マスクの最上位部分においてともにコンソリデートされることを示す第2の値を有する。
例16は、例12の主題を含み、この主題において上記受信することが、マスクされた要素及びマスクされていない要素のそれぞれが異なる単一のビットであるソース演算マスクを示す命令を受信することを含み、各マスクされた要素が、バイナリの0の値を有し、各マスクされていない要素が、バイナリの1の値を有する。
例17は、例12の主題を含み、この主題において上記受信することが、コンソリデートされた演算マスクが、ソース演算マスクにおけるマスクされた要素及びマスクされていない要素の任意の特定の配置を問わず記憶されることを示すオペコードを有する演算マスクコンソリデーション命令を受信することを含む。
例18は、例12の主題を含み、この主題においてマスクされた要素及びマスクされていない要素のそれぞれが、異なるパックドデータ要素に対応し、この対応するパックドデータ要素に対する演算をプレディケートするのに用いられる。
例19は、例12の主題を含み、この主題は、コンパイラーが、コンソリデートされた演算マスクを用いてコードをベクトル化することを更に含む。
例20は、命令を処理するシステムである。このシステムは、相互接続部を備える。このシステムは、相互接続部と結合されたプロセッサ及び相互接続部と結合されたダイナミックランダムアクセスメモリ(DRAM)も備える。DRAMは、演算マスクコンソリデーション命令を記憶する。この演算マスクコンソリデーション命令は、ソース演算マスク及びデスティネーション記憶ロケーションを示す。このソース演算マスクは、複数のマスクされていない要素内に配置される複数のマスクされた要素を含む。演算マスクコンソリデーション命令は、プロセッサによって実行されると、コンソリデートされた演算マスクをデスティネーション記憶ロケーションに記憶することを含む演算をプロセッサに実行させるように動作可能である。コンソリデートされた演算マスクは、ともにコンソリデートされたソース演算マスクからのマスクされていない要素を含む。
例21は、例20の主題を含み、この主題においてソース演算マスクがパックドデータに対して演算をプレディケートするのに用いられる。
例22は、例20及び21のうちのいずれかの主題を含み、この主題において演算マスクコンソリデーション命令が、コンソリデートされた演算マスクがソース演算マスクの任意の値について記憶されることを示すオペコードを有する。
例23は、製造物品である。この製造物品は、演算マスクコンソリデーション命令を記憶する非一時的機械可読記憶媒体を備える。この演算マスクコンソリデーション命令は、ソース演算マスク及びデスティネーションを示す。ソース演算マスクは、複数のマスクされていない要素内に配置された複数のマスクされた要素を含む。この演算マスクコンソリデーション命令は、機械によって実行されると、当該演算マスクコンソリデーション命令に応答して、コンソリデートされた演算マスクをデスティネーションに記憶することを含む演算を上記機械に実行させるように動作可能である。上記コンソリデートされた演算マスクは、ともにコンソリデートされたソース演算マスクからのマスクされていない要素を含み、マスクされた要素はこれらのマスクされていない要素間に配置されていない。
例24は、例23の主題を含み、この主題において受信することが、コンソリデートされた演算マスクがソース演算マスクにおけるマスクされた要素及びマスクされていない要素の多くの異なる配置について記憶されることを示すオペコードを有する演算マスクコンソリデーション命令を受信することを含む。
例25は、例23及び24のうちのいずれかの主題を含み、この主題において上記演算マスクコンソリデーション命令が、機械によって実行されると、当該機械に、ソース演算マスクからのマスクされていない要素をコンソリデートされた演算マスクの最下位部分においてともにコンソリデートさせるように動作可能であり、ソース演算マスクがプレディケーションに用いられる。
例26は、機械によって実行されると、請求項12〜19のいずれか1項に記載の方法を当該機械に実行させる命令を記憶する機械可読記憶媒体を含む。
例27は、請求項12〜19のいずれか1項に記載の方法を実行する装置を含む。
例28は、請求項12〜19のいずれか1項に記載の方法を実行する手段を備える装置を含む。
例29は、本明細書において実質的に説明したような方法を実行する装置を含む。
例30は、本明細書において実質的に説明したような方法を実行する手段を備える装置を含む。
例31は、本明細書において実質的に説明したような命令を実行する装置を含む。
例32は、本明細書において実質的に説明したような命令の演算を実行する手段を備える装置を含む。
この説明及び特許請求の範囲において、「結合された」及び/又は「接続された」という用語が、それらの派生語とともに用いられている。これらの用語は互いに同義語として意図されていないことが理解されるべきである。逆に、特定の実施形態では、「接続された」は、2つ以上の要素が互いに直接物理的又は電気的に接触していることを示すのに用いることができる。「結合された」は、2つ以上の要素が直接物理的又は電気的に接触していることを意味することができる。しかしながら、「結合された」は、2つ以上の要素が互いに直接接触していないが、それでも、互いに協働又は相互作用することも意味することができる。例えば、実行ユニットは、1つ又は複数の介在する構成要素を通じて、レジスタ又はデコーダーと結合することができる。図では、矢印が接続及び結合を示すのに用いられる。
この説明及び特許請求の範囲において、「ロジック」という用語が用いられている場合がある。ロジックは、本明細書において用いられるとき、ハードウェア、ファームウェア、ソフトウェア、又は様々なそれらの組合せ等のモジュールを含むことができる。ロジックの例には、集積回路部、特定用途向け集積回路、アナログ回路、デジタル回路、プログラムされたロジックデバイス、命令を含むメモリデバイス等が含まれる。幾つかの実施形態では、ハードウェアロジックは、他の回路部構成要素とともにトランジスタ及び/又はゲートを潜在的に含むことができる。
上記説明では、実施形態の十分な理解を提供するために、具体的な詳細が述べられてきた。しかしながら、他の実施形態は、これらの具体的な詳細のうちの幾つかがなくても実施することができる。本発明の範囲は、上記に提供された具体例によって決定されるものではなく、添付の特許請求の範囲によってのみ決定される。それ以外の場合には、よく知られた回路、構造、デバイス、及び動作は、この説明の理解を分かりにくくしないように、ブロック図の形式又は細部を伴わずに示されている。複数の構成要素が図示及び説明されている場合、場合によっては、これらの複数の構成要素は、1つの構成要素内に組み込むことができる。単一の構成要素が図示及び説明されている場合、場合によっては、この単一の構成要素を2つ以上の構成要素に分割することができる。
様々な演算及び方法が説明されてきた。これらの方法のうちの幾つかは、比較的基本的な形式で流れ図に説明されているが、演算は、オプションとして、これらの方法に追加することができ、及び/又はこれらの方法から除去することができる。加えて、流れ図は、例示の実施形態による演算の特定の順序を示しているが、その特定の順序は例示である。代替の実施形態は、オプションとして演算を異なる順序で実行し、幾つかの演算を組み合わせ、幾つかの演算を重ねる等することができる。
幾つかの演算は、ハードウェア構成要素によって実行することもできるし、命令を用いてプログラムされた機械、回路、又はハードウェア構成要素(例えば、プロセッサ、プロセッサの一部分、回路等)が演算を実行することを引き起こし及び/又はもたらすのに用いることができる機械実行可能な命令又は回路実行可能な命令で具現化することもできる。これらの演算は、オプションとして、ハードウェア及びソフトウェアの組合せによって実行することもできる。プロセッサ、機械、回路、又はハードウェアは、具体的な若しくは特定の回路部を含むことができ、又は他のロジック(例えば、ファームウェア及び/又はソフトウェアと潜在的に組み合わされるハードウェア)は、命令に応答して命令を実行及び/又は処理し、結果を記憶するように動作可能である。
幾つかの実施形態は、機械可読媒体を備える製造物品(例えば、コンピュータープログラム製品)を含む。この媒体は、機械によって可読な形式で情報を提供する、例えば記憶するメカニズムを含むことができる。機械可読媒体は、機械によって実行された場合及び/又は実行されたとき、本明細書において開示された演算、方法、又は技法のうちの1つを当該機械に実行させ及び/又は機械がこれを実行することをもたらすように動作可能な命令又は命令シーケンスを提供することができる、すなわち、当該媒体に記憶しておくことができる。機械可読媒体は、本明細書において開示される命令の実施形態のうちの1つ又は複数を提供する、例えば、記憶することができる。
幾つかの実施形態では、機械可読媒体は、有形の及び/又は非一時的な機械可読記憶媒体を含むことができる。例えば、有形の及び/又は非一時的な機械可読記憶媒体は、フロッピー(登録商標)ディスケット、光記憶媒体、光ディスク、光データ記憶デバイス、CD−ROM、磁気ディスク、光磁気ディスク、読み出し専用メモリ(ROM)、プログラマブルROM(PROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、非一時的データ記憶デバイス等を含むことができる。非一時的な機械可読記憶媒体は、一時的な伝播信号からなるものではない。別の実施形態では、機械可読媒体は、一時的機械可読通信媒体、例えば、搬送波、赤外線信号、デジタル信号等の電気的伝播信号、光学的伝播信号、音響的伝播信号、又は他の形式の伝播信号を含むことができる。
好適な機械の例には、汎用プロセッサ、専用プロセッサ、命令処理装置、デジタル論理回路、集積回路等が含まれるが、これらに限定されるものではない。好適な機械の更に他の例には、そのようなプロセッサ、命令処理装置、デジタル論理回路、又は集積回路を組み込んだコンピューティングデバイス及び他の電子デバイスが含まれる。そのようなコンピューティングデバイス及び電子デバイスの例には、デスクトップコンピューター、ラップトップコンピューター、ノートブックコンピューター、タブレットコンピューター、ネットブック、スマートフォン、携帯電話、サーバー、ネットワークデバイス(例えば、ルーター及びスイッチ)、モバイルインターネットデバイス(MID)、メディアプレイヤー、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラーが含まれるが、これらに限定されるものではない。
この明細書全体を通じて、例えば、「1つの実施形態」、「一実施形態」、「1つ又は複数の実施形態」、「幾つかの実施形態」というとき、これは、特定の特徴が本発明の実施において含まれ得るが、必ずしも必須ではないことを示す。同様に、この説明において、様々な特徴は、開示を能率化するとともに様々な発明の態様の理解を助ける目的で、単一の実施形態、図、又はその説明においてともにグループ化されることがある。しかしながら、開示のこの方法は、本発明が各請求項において明確に列挙されたものよりも多くの特徴を必要とするという意図を反映するものと解釈されるべきではない。逆に、添付の特許請求の範囲が反映しているように、本発明の態様は、単一の開示された実施形態の全ての特徴よりも少ないものに存する。したがって、この詳細な説明に続く特許請求の範囲は、この詳細な説明に明確に組み込まれ、各請求項は、本発明の個々の実施形態として自立している。