(57)【要約】      （修正有）【課題】コンソリデートされた演算マスクを生成する装置、方法、システム、及び命令を提供する。【解決手段】命令処理装置は、複数の演算マスクレジスタを備える。この装置は、演算マスクコンソリデーション命令を受信するデコードユニットも備える。演算マスクコンソリデーション命令は、複数の演算マスクレジスタのうちのソース演算マスクレジスタと、デスティネーション記憶ロケーションとを示す。ソース演算マスクレジスタは、複数のマスクされていない要素内に配置される複数のマスクされた要素を含むソース演算マスクを含む。デコードユニットと結合されている実行ユニットは、演算マスクコンソリデーション命令に応答して、コンソリデートされた演算マスクをデスティネーション記憶ロケーションに記憶する。コンソリデートされた演算マスクは、ともにコンソリデートされたソース演算マスクからのマスクされていない要素を含む。【選択図】図１
2014182802.tif 000002
【特許請求の範囲】
【請求項１】
命令処理装置であって、
複数の演算マスクレジスタと、
演算マスクコンソリデーション命令を受信するデコードユニットであって、前記演算マスクコンソリデーション命令は、前記複数の演算マスクレジスタのソース演算マスクレジスタと、デスティネーション記憶ロケーションとを示し、前記ソース演算マスクレジスタは、複数のマスクされていない要素内に配置される複数のマスクされた要素を含むソース演算マスクを含む、デコードユニットと、
前記デコードユニットと結合された実行ユニットであって、該実行ユニットは、前記演算マスクコンソリデーション命令に応答して、コンソリデートされた演算マスクを前記デスティネーション記憶ロケーションに記憶し、前記コンソリデートされた演算マスクは、ともにコンソリデートされた前記ソース演算マスクからの前記複数のマスクされていない要素を含む、実行ユニットと、
を備える、命令処理装置。
【請求項２】
前記実行ユニットは、前記演算マスクコンソリデーション命令に応答して、前記複数のマスクされた要素が前記コンソリデートされた複数のマスクされていない要素内に配置されないように、前記複数のマスクされていない要素をともにコンソリデートする、請求項１に記載の命令処理装置。
【請求項３】
前記実行ユニットは、前記演算マスクコンソリデーション命令に応答して、前記ソース演算マスクからの前記複数のマスクされていない要素を、前記コンソリデートされた演算マスクの最下位部分においてともにコンソリデートする、請求項１または２に記載の命令処理装置。
【請求項４】
前記実行ユニットは、前記演算マスクコンソリデーション命令に応答して、前記ソース演算マスクからの前記複数のマスクされていない要素を、前記コンソリデートされた演算マスクの最上位部分においてともにコンソリデートする、請求項１または２に記載の命令処理装置。
【請求項５】
前記デコードユニットは、
前記ソース演算マスクからの前記複数のマスクされていない要素が前記コンソリデートされた演算マスクの最下位部分においてともにコンソリデートされることを示す第１の値と、
前記ソース演算マスクからの前記複数のマスクされていない要素が前記コンソリデートされた演算マスクの最上位部分においてともにコンソリデートされることを示す第２の値と、
を有するように使用可能な１つ又は複数のビットを含む前記演算マスクコンソリデーション命令を受信する、請求項１または２に記載の命令処理装置。
【請求項６】
前記ソース演算マスクレジスタは、前記複数のマスクされた要素及び前記複数のマスクされていない要素のそれぞれが異なる単一のビットである前記ソース演算マスクを有する、請求項１から５のいずれか１項に記載の命令処理装置。
【請求項７】
前記複数のマスクされた要素のそれぞれは、バイナリの０の値を有し、前記複数のマスクされていない要素のそれぞれは、バイナリの１の値を有する、請求項６に記載の命令処理装置。
【請求項８】
前記複数の演算マスクレジスタは、一組の８つの演算マスクレジスタを含み、前記８つの演算マスクレジスタのそれぞれは、少なくとも６４ビットまでを有する演算マスクを記憶し、前記デコードユニットは、前記８つの演算マスクレジスタのうちの１つとして前記ソース演算マスクレジスタを指定する３ビットフィールドを有する前記演算マスクコンソリデーション命令を受信する、請求項１から７のいずれか１項に記載の命令処理装置。
【請求項９】
前記デコードユニットは、前記ソース演算マスクレジスタを明示的に指定するとともに前記デスティネーション記憶ロケーションとしてデスティネーション演算マスクレジスタを明示的に指定する前記演算マスクコンソリデーション命令を受信する、請求項１から７のいずれか１項に記載の命令処理装置。
【請求項１０】
前記デコードユニットは、前記コンソリデートされた演算マスクが、前記ソース演算マスクにおける前記複数のマスクされた要素及び前記複数のマスクされていない要素の任意の特定の配置を問わず記憶されることを示すオペコードを有する前記演算マスクコンソリデーション命令を受信する、請求項１から７のいずれか１項に記載の命令処理装置。
【請求項１１】
前記複数の演算マスクレジスタは、パックドデータに対して演算をプレディケートするのに用いられる演算マスクを記憶する、請求項１から１０のいずれか１項に記載の命令処理装置。
【請求項１２】
プロセッサ内における方法であって、
演算マスクコンソリデーション命令を受信するステップであって、前記演算マスクコンソリデーション命令は、ソース演算マスク及びデスティネーション記憶ロケーションを示し、前記ソース演算マスクは、複数のマスクされていない要素内に配置された複数のマスクされた要素を含むことと、
前記演算マスクコンソリデーション命令に応答して、コンソリデートされた演算マスクを前記デスティネーション記憶ロケーションに記憶するステップであって、前記コンソリデートされた演算マスクは、ともにコンソリデートされた前記ソース演算マスクからの前記複数のマスクされていない要素を含むことと、
を含む、プロセッサ内における方法。
【請求項１３】
前記ソース演算マスクからの前記複数のマスクされていない要素は、前記コンソリデートされた演算マスクの最下位部分においてともにコンソリデートされる、請求項１２に記載の方法。
【請求項１４】
前記ソース演算マスクからの前記複数のマスクされていない要素は、前記コンソリデートされた演算マスクの最上位部分においてともにコンソリデートされる、請求項１２に記載の方法。
【請求項１５】
前記演算マスクコンソリデーション命令は、
前記ソース演算マスクからの前記複数のマスクされていない要素が前記コンソリデートされた演算マスクの最下位部分においてともにコンソリデートされることを示す第１の値と、
前記ソース演算マスクからの前記複数のマスクされていない要素が前記コンソリデートされた演算マスクの最上位部分においてともにコンソリデートされることを示す第２の値と、
を有する１つ又は複数のビットを含む、請求項１２に記載の方法。
【請求項１６】
前記受信することは、前記複数のマスクされた要素及び前記複数のマスクされていない要素のそれぞれが異なる単一のビットである前記ソース演算マスクを示す前記演算マスクコンソリデーション命令を受信することを含み、前記複数のマスクされた要素のそれぞれは、バイナリの０の値を有し、前記複数のマスクされていない要素のそれぞれは、バイナリの１の値を有する、請求項１２から１５のいずれか１項に記載の方法。
【請求項１７】
前記受信することは、前記コンソリデートされた演算マスクが、前記ソース演算マスクにおける前記複数のマスクされた要素及び前記複数のマスクされていない要素の任意の特定の配置を問わず記憶されることを示すオペコードを有する前記演算マスクコンソリデーション命令を受信することを含む、請求項１２から１５のいずれか１項に記載の方法。
【請求項１８】
前記複数のマスクされた要素及び前記複数のマスクされていない要素のそれぞれは、異なるパックドデータ要素に対応し、該対応するパックドデータ要素に対する演算をプレディケートするのに用いられる、請求項１２から１７のいずれか１項に記載の方法。
【請求項１９】
コンパイラーが前記コンソリデートされた演算マスクを用いてコードをベクトル化することを更に含む、請求項１２から１８のいずれか１項に記載の方法。
【請求項２０】
命令を処理するシステムであって、
相互接続部と、
前記相互接続部と結合されたプロセッサと、
前記相互接続部と結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）であって、該ＤＲＡＭは、演算マスクコンソリデーション命令を記憶し、該演算マスクコンソリデーション命令は、ソース演算マスク及びデスティネーション記憶ロケーションを示し、該ソース演算マスクは、複数のマスクされていない要素内に配置される複数のマスクされた要素を含み、前記演算マスクコンソリデーション命令は、前記プロセッサによって実行されると、
コンソリデートされた演算マスクを前記デスティネーション記憶ロケーションに記憶することであって、前記コンソリデートされた演算マスクは、ともにコンソリデートされた前記ソース演算マスクからの前記複数のマスクされていない要素を含むこと、
を含む演算を前記プロセッサに実行させるように動作可能である、ＤＲＡＭと、
を備える、命令を処理するシステム。
【請求項２１】
前記ソース演算マスクは、パックドデータに対して演算をプレディケートするのに用いられる、請求項２０に記載のシステム。
【請求項２２】
前記演算マスクコンソリデーション命令は、前記コンソリデートされた演算マスクが前記ソース演算マスクの任意の値について記憶されることを示すオペコードを有する、請求項２０または２１に記載のシステム。
【請求項２３】
演算マスクコンソリデーション命令に応答して、コンソリデートされた演算マスクをデスティネーションに記憶することを含む演算をコンピュータに実行させるプログラムであって、
前記演算マスクコンソリデーション命令は、ソース演算マスク及び前記デスティネーションを示し、前記ソース演算マスクは、複数のマスクされていない要素内に配置された複数のマスクされた要素を含み、前記コンソリデートされた演算マスクは、ともにコンソリデートされた前記ソース演算マスクからの前記複数のマスクされていない要素間に前記複数のマスクされた要素が配置されない前記複数のマスクされていない要素を含むプログラム。
【請求項２４】
前記演算は、前記コンソリデートされた演算マスクが前記ソース演算マスクにおける前記複数のマスクされた要素及び前記複数のマスクされていない要素の多くの異なる配置について記憶されることを示すオペコードを有する前記演算マスクコンソリデーション命令を受信することをさらに含む、請求項２３に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書に説明される実施形態は、包括的には、プロセッサに関する。特に、本明細書に説明される実施形態は、包括的には、命令に応答して演算マスクを操作するプロセッサに関する。
【背景技術】
【０００２】
多くのプロセッサは、単一命令複数データ（ＳＩＭＤ）アーキテクチャを有する。ＳＩＭＤアーキテクチャでは、１つのデータ要素又は一対のデータ要素にのみ作用するスカラー命令の代わりに、パックドデータ命令、ベクトル命令、又はＳＩＭＤ命令が、複数のデータ要素又は複数対のデータ要素に同時及び／又は並列に作用することができる。例えば、複数のデータ要素をパックドデータ又はベクトルデータとして１つのレジスタ又はメモリロケーション内にパックすることができる。パックドデータでは、レジスタ又は他の記憶ロケーションのビットを、一般的には固定サイズの複数のデータ要素のシーケンスに論理的に分割することができる。データ要素のそれぞれは、多くの場合に同じサイズを有する他のデータ要素とともに記憶される個々のデータ片を表すことができる。例えば、２５６ビットパックドデータレジスタは、４つの６４ビットデータ要素、８つの３２ビットデータ要素、１６個の１６ビットデータ要素、又は３２個の８ビットデータ要素を有することができる。これらのパックドデータ要素のそれぞれは、他のものとは別個に又は独立に作用を受けることができる別個の個々のデータ片（例えば、ピクセルの色、浮動小数点値等）を表すことができる。プロセッサは、パックド命令又はＳＩＭＤ命令に応答して複数の演算を同時又は並列に実行する並列実行ハードウェアを有することができる。そのようなＳＩＭＤアーキテクチャは、一般に、処理速度を大幅に改善するのに役立つ。
【０００３】
本発明は、実施形態を例示するのに用いられる以下の説明及び添付図面を参照することによって最もよく理解することができる。
【図面の簡単な説明】
【０００４】
【図１】演算マスクコンソリデーション命令の１つ又は複数の実施形態を処理するように動作可能なプロセッサの一実施形態のブロック図である。
【０００５】
【図２Ａ】マージするマスクされたパックドデータ演算の一例示の実施形態のブロック図である。
【０００６】
【図２Ｂ】ゼロイングするマスクされたパックドデータ演算の一例示の実施形態のブロック図である。
【０００７】
【図３】演算マスクコンソリデーション命令の１つ又は複数の実施形態を実行するように動作可能な命令処理装置の一実施形態のブロック図である。
【０００８】
【図４Ａ】演算マスクコンソリデーション命令の第１の例示の実施形態に応答して及び／又はその結果として実行することができる演算マスクコンソリデーション演算の第１の例示の実施形態のブロック図である。
【０００９】
【図４Ｂ】演算マスクコンソリデーション命令の第２の例示の実施形態に応答して及び／又はその結果として実行することができる演算マスクコンソリデーション演算の第２の例示の実施形態のブロック図である。
【００１０】
【図５】演算マスクコンソリデーション命令の一実施形態を処理する方法の一実施形態のブロック流れ図である。
【００１１】
【図６】演算マスクコンソリデーション命令のための好適なフォーマットの一実施形態のブロック図である。
【００１２】
【図７】好適なパックドデータレジスタの一例示の実施形態のブロック図である。
【００１３】
【図８】パックドデータ演算マスク要素の数がパックドデータ幅及びパックドデータ要素幅に依存することを示すテーブルである。
【００１４】
【図９】好適な一組のパックドデータ演算マスクレジスタの一例示の実施形態のブロック図である。
【００１５】
【図１０】演算マスク要素の数がパックドデータ幅及びパックドデータ要素幅に依存するパックドデータ演算マスクレジスタの一例示の実施形態のブロック図である。
【００１６】
【図１１Ａ】ＶＥＸプレフィックス、リアルオペコードフィールド、Ｍｏｄ  Ｒ／Ｍバイト、ＳＩＢバイト、変位フィールド、及びＩＭＭ８を含む例示的なＡＶＸ命令フォーマットを示す図である。
【００１７】
【図１１Ｂ】図１１Ａからのどのフィールドがフルオペコードフィールド及びベース演算フィールドを構成するのかを示す図である。
【００１８】
【図１１Ｃ】図１１Ａからのどのフィールドがレジスタインデックスフィールドを構成するのかを示す図である。
【００１９】
【図１２】本発明の１つの実施形態によるレジスタアーキテクチャのブロック図である。
【００２０】
【図１３Ａ】本発明の実施形態による例示的なインオーダーパイプライン及び例示的なレジスタリネームアウトオブオーダー発行／実行パイプラインの双方を示すブロック図である。
【００２１】
【図１３Ｂ】本発明の実施形態によるプロセッサに備えられるインオーダーアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネームアウトオブオーダー発行／実行アーキテクチャコアの双方を示すブロック図である。
【００２２】
【図１４Ａ】本発明の実施形態による単一のプロセッサコアを、オンダイ相互接続ネットワークへのその接続及びレベル２（Ｌ２）キャッシュのそのローカルサブセットとともに示すブロック図である。
【００２３】
【図１４Ｂ】本発明の実施形態による図１４Ａにおけるプロセッサコアの一部の拡大図である。
【００２４】
【図１５】本発明の実施形態による、２つ以上のコアを有することができ、統合メモリコントローラーを有することができ、統合グラフィックスを有することができるプロセッサのブロック図である。
【００２５】
【図１６】本発明の１つの実施形態によるシステムのブロック図である。
【００２６】
【図１７】本発明の一実施形態による第１のより具体的な例示的システムのブロック図である。
【００２７】
【図１８】本発明の一実施形態による第２のより具体的な例示的システムのブロック図である。
【００２８】
【図１９】本発明の一実施形態によるＳｏＣのブロック図である。
【００２９】
【図２０】本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令変換器の使用を対比するブロック図である。
【発明を実施するための形態】
【００３０】
本明細書では、演算マスクコンソリデーション命令、これらの命令を実行するプロセッサ、これらの命令を処理又は実行するときにプロセッサによって実行される方法、及びこれらの命令を処理又は実行する１つ又は複数のプロセッサを組み込んだ電子システムが開示される。以下の説明では、多数の具体的な詳細（例えば、具体的な命令演算、演算マスク、データフォーマット、プロセッサ構成、マイクロアーキテクチャの詳細、演算シーケンス等）が述べられる。しかしながら、実施形態は、これらの具体的な詳細がなくても実施することができる。それ以外の場合には、この説明の理解を分かりにくくしないように、よく知られた回路、構造、及び技法は詳細に示されていない。
【００３１】
図１は、１つ又は複数の演算マスクコンソリデーション命令１０４を処理するプロセッサ１００の一例示の実施形態のブロック図である。幾つかの実施形態では、プロセッサは、汎用プロセッサ（例えば、デスクトップ、ラップトップ、サーバー、及び同様のコンピューターにおいて用いられるタイプ）とすることができる。代替的に、プロセッサは、専用プロセッサとすることができる。好適な専用プロセッサの例には、ほんの数例を挙げると、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックスプロセッサ、コプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、及びコントローラーが含まれるが、これらに限定されるものではない。プロセッサは、様々な複合命令セットコンピューティング（ＣＩＳＣ）プロセッサ、様々な縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサ、様々な超長命令語（ＶＬＩＷ）プロセッサ、それらの様々なハイブリッド、又は完全に他のタイプのプロセッサのうちの任意のものとすることができる。
【００３２】
プロセッサは、命令セットアーキテクチャ（ＩＳＡ）１０１を有する。ＩＳＡは、プログラミングに関係したプロセッサのアーキテクチャの一部を表し、プロセッサのネイティブ命令、アーキテクチャレジスタ、データタイプ、アドレス指定モード、メモリアーキテクチャ等を一般に含む。ＩＳＡは、マイクロアーキテクチャとは区別される。マイクロアーキテクチャは、一般に、ＩＳＡを実施するために選択された特定のプロセッサ設計技法を表す。
【００３３】
ＩＳＡは、アーキテクチャ的に可視のレジスタ（例えば、アーキテクチャレジスタファイル）１０５を含む。アーキテクチャレジスタは、本明細書においては、単にレジスタと呼ばれる場合もある。特に別段の指定がないか又は明らかでない限り、アーキテクチャレジスタ、レジスタファイル、及びレジスタという語句は、本明細書においては、ソフトウェア及び／又はプログラマーに可視のレジスタ、及び／又はオペランドを識別するためにマクロ命令若しくはアセンブリ言語命令によって指定されるレジスタを指すのに用いられる。これらのレジスタは、所与のマイクロアーキテクチャにおける他の非アーキテクチャレジスタ又はアーキテクチャ的に可視でないレジスタ（例えば、命令によって用いられる一時レジスタ、リオーダーバッファー、リタイアメントレジスタ等）と対照をなす。これらのレジスタは、一般に、オンダイプロセッサ記憶ロケーションを表す。図示したアーキテクチャレジスタは、パックドデータレジスタ１０６を含む。パックドデータレジスタのそれぞれは、パックドデータ又はベクトルデータを記憶するように動作可能とすることができる。図示したアーキテクチャレジスタは、パックドデータ演算マスクレジスタ１０７も含む。パックドデータ演算マスクレジスタのそれぞれは、パックドデータ演算マスクを記憶するように動作可能とすることができる。
【００３４】
ＩＳＡは、命令セット１０２を含む。この命令セットの命令は、マイクロ命令、マイクロ演算、又はマクロ命令をデコードした結果得られるものとは対照的な、実行のためにプロセッサに提供されるマクロ命令、アセンブリ言語命令、又は機械レベル命令を表す。命令セットは、オプションとして、１つ又は複数の従来のマスクされたパックドデータ命令１０３を含む。前述したパックドデータ命令と同様に、マスクされたパックドデータ命令１０３のそれぞれは、プロセッサが１つ又は複数のパックドデータオペランドのデータ要素に対してパックドデータ演算を実行することを引き起こすように又はもたらすように動作可能とすることができる。パックドデータオペランドは、パックドデータレジスタ１０７に記憶することができる。しかしながら、マスクされたパックドデータ命令のそれぞれは、パックドデータ処理をマスクするか、プレディケートするか、又は条件付きで制御する（例えば、パックドデータ演算マスクレジスタ１０７内の）１つ又は複数のパックドデータ演算マスクを示すことができるという点で異なる。パックドデータ演算マスクは、演算マスク、述語オペランド、又は条件付き演算制御オペランドを表すことができる。
【００３５】
命令セットは、１つ又は複数の演算マスクコンソリデーション命令１０４も含む。演算マスクコンソリデーション命令は、コンソリデートされた演算マスクをプロセッサに生成及び記憶させることができる。好適な命令／演算の具体例は、以下で更に論述される。
【００３６】
プロセッサは、実行ロジック１０８も備える。この実行ロジックは、１つ又は複数の演算マスクコンソリデーション命令１０４を実行又は処理するように動作可能である。幾つかの実施形態では、実行ロジックは、これらの命令を実行する特定のロジック（例えば、特定の回路部、又はファームウェアと潜在的に組み合わされるハードウェア）を含むことができる。
【００３７】
演算マスクコンソリデーション命令１０４を更に論述する前に、パックドデータ演算マスクをどのように用いることができるのかの例を数例最初に論述することが役立つ場合がある。図２Ａは、マージを伴うマスクされたパックドデータ演算２０３Ａの第１の例のブロック図である。マスクされたパックドデータ演算は、マスクされたパックドデータ命令（例えば、図１のマスクされたパックドデータ命令１０３）に応答して又はこの命令の結果として実行することができる。
【００３８】
マスクされたパックドデータ命令は、第１のソースパックドデータ２０９Ａ及び第２のソースパックドデータ２１０Ａを示すことができる。他のマスクされたパックドデータ命令（例えば、パックドシフト命令）は、単一のソースパックドデータのみ、又は３つ以上のソースパックドデータを示すことができる。この説明図では、第１のソースパックドデータ及び第２のソースパックドデータは、同じサイズであり、同じ幅のデータ要素を含み、したがって、それぞれ同じ数のデータ要素を含むが、これは必須ではない。この説明図では、第１のソースパックドデータ及び第２のソースパックドデータのそれぞれは、１６個のデータ要素を有する。１つの例として、第１のソースパックドデータ及び第２のソースパックドデータは、それぞれ５１２ビット幅とすることができ、それぞれ１６個の３２ビットダブルワードデータ要素を含むことができるが、これは必須ではない。２つのソースパックドデータにおける同じ相対位置（例えば、同じ垂直位置）にあるソースデータ要素は、対応するデータ要素の対を表す。これらのデータ要素のそれぞれは、当該データ要素を表すブロック内に示された数値を有する。例えば、第１のソースパックドデータの最低順序（右側）のデータ要素は、３の値を有し、第１のソースパックドデータの最低順序の隣のデータ要素は、７の値を有する。以下同様である。
【００３９】
この命令は、ソースパックドデータ演算マスク２１１Ａも示している。この演算マスクは、パックド演算又はベクトル演算をプレディケートするか又は条件付きで制御する述語オペランド又は条件付きベクトル演算制御オペランドを表す。パックドデータ演算マスクは、マスク要素、述語要素、又は条件付き制御要素を含む。パックドデータ演算マスクは、データ単位の要素粒度でパックドデータ処理をマスクするように又は条件付きで制御するように動作可能とすることができる。１つ又は複数の対応するソースデータ要素との１対１対応でマスク要素を含めることができる。例えば、この説明図に示すように、対応するソースデータ要素の対ごとに１つのそのようなマスク要素が存在することができる。演算マスクによって、各データ要素又は対応するデータ要素の対のパックドデータ処理を、他のものとは別個にかつ独立にプレディケートすること又は条件付きで制御することを可能にすることができる。各マスク要素は、１つ又は複数の対応するソースパックドデータ要素に対するパックドデータ演算をマスクするように又はマスクしないように動作可能とすることができる。例えば、この例では、各マスク要素は、対応するソースパックドデータ要素の対に対する演算をマスクすることができる。
【００４０】
この説明図に示すように、通例、各マスク要素は、単一ビットとすることができる。単一ビットによって、２つの異なる可能性（例えば、演算を実行する対演算を実行しない、演算の結果を記憶する対演算の結果を記憶しない等）のうちのいずれかを指定することを可能にすることができる。代替的に、３つ以上の異なる選択肢から選択することが所望される場合、２ビット以上を各マスク要素に用いることができる。この説明図では、パックドデータ演算マスクは、１６ビット（すなわち、００１１１００００１１０１０１１）を含み、これらの１６ビットのそれぞれは、第１のソースパックドデータ及び第２のソースパックドデータの対応するデータ要素の１６個の対のうちの１つへの順序付きの対応を有する。例えば、最低順序（右側）のマスクビットは、対応するデータ要素の最低順序の対に対応し、最高順序（左側）のマスクビットは、対応するデータ要素の最高順序の対に対応し、以下同様に対応する。
【００４１】
図示した、マスクされたパックドデータ演算は、ソースパックドデータ演算マスクからのマスキング、プレディケーション、又は条件付き制御によるパックドデータ結果２１２Ａ内の第１のソースパックドデータ及び第２のソースパックドデータからのデータ要素の対応する対の総和を条件付きで記憶するマスクされたパックドデータ加算演算である。パックドデータ演算マスク２１１Ａの１６個のマスクビットのそれぞれは、セットされる（すなわち、１のバイナリ値を有する）か又はクリアされる（すなわち、０のバイナリ値を有する）。この図示した規定によれば、ソースパックドデータ要素の対応する対に対して実行されたパックドデータ演算（この場合、加算）の結果をパックドデータ結果２１２Ａの対応するデータ要素に記憶することを可能にするか又は可能にしないために、各マスクビットは、それぞれセットされる（すなわち、１）か又はクリアされる（すなわち、０）。これらのセットされたビット（すなわち、１）は、マスクされていないビット又はマスクされていない要素を表すのに対して、これらのクリアされたビット（すなわち、０）は、マスクされたビット又はマスクされた要素を表す。例えば、最低順序の隣のマスクビットは、セットされ（すなわち、１）、総和（すなわち、８＝７＋１）が、パックドデータ結果の対応する、最低順序の隣のデータ要素に記憶される。この説明図では、総和には下線が付けられている。
【００４２】
逆に、所与のマスクビットがクリアされる（すなわち、０）と、ソースデータ要素の対応する対に対するパックドデータ演算の結果は、対応する結果データ要素に記憶されない。それどころか、この説明図では、第２のソースパックドデータからの対応するデータ要素の値が、対応する結果データ要素に記憶される。例えば、パックドデータ演算マスク内の最高順序のビット（左側）がクリアされ（すなわち、０）、第２のソースパックドデータからの最高順序のデータ要素の数値（すなわち、１５）が、最高順序の結果データ要素に記憶される。このマスキングのバージョンは、マージマスクと呼ばれる。結果の記憶を可能にするためにビットがクリアされ（すなわち、０）、結果の記憶を可能にしないためにビットがセットされる（すなわち、１）逆の規定も可能であることが認識されるべきである。
【００４３】
幾つかの実施形態では、パックドデータ演算は、オプションとして、対応するマスクビットがセットされているか又はクリアされているかにかかわらず、第１のソースパックドデータ及び第２のソースパックドデータのデータ要素の全ての対応する対に対して実行することができるが、パックドデータ演算の結果は、マスクビットの値に応じてパックドデータ結果に記憶される場合もあるし、されない場合もある。代替的に、別の実施形態では、対応するマスクビットが、演算の結果が記憶されないことを指定している場合、パックドデータ演算をオプションとして省略することができる（すなわち、実行されない）。幾つかの実施形態では、オプションとして、例外（例えば、例外フラグ）又は違反を、マスクオフされた要素に対するパックドデータ演算によって抑制するか又は生じないようにすることができる。幾つかの実施形態では、メモリオペランドを有するマスクされたパックドデータ命令の場合、オプションとして、マスクオフされたデータ要素についてメモリ障害を抑制することができる。
【００４４】
図２Ｂは、ゼロイングを有するマスクされたパックドデータ演算２０３Ｂの第２の代表的な例示の実施形態を示すブロック図である。ゼロイングを有するマスクされたパックドデータ演算は、上述したマージを有するマスクされたパックドデータ演算と同様である。この説明を分かりにくくしないようにするために、類似点は繰り返さないことにし、逆に、相違点を主として述べる。１つの注目すべき相違は、対応するマスクビットがマスクオフされている（例えば、０にクリアされている）とき、ソースパックドデータ（例えば、図２Ａにおける第２のソースパックドデータ２１０Ａ）のデータ要素の値を対応する結果データ要素にマージ又は記憶する代わりに、対応する結果データ要素は、ゼロに設定される。例えば、ダブルワード結果パックドデータ要素の全ての３２ビットは、０の値を有することができる。これは、ゼロイングマスキングと呼ばれる。代替的に、０以外の他の所定の値をオプションとして用いることができる。
【００４５】
これらは、マスクされたパックドデータ演算のほんの数個の説明例にすぎない。プロセッサは、多種多様の異なるタイプのマスクされたパックドデータ演算をサポートすることができることが認識されるべきである。他の実施形態では、これらは、１つのみのソースパックドデータを有する演算、３つ以上のソースパックドデータを有する演算、異なるサイズのソースパックドデータを有する演算、異なる数のデータ要素のソースパックドデータを有する演算、水平又は非垂直に整列された形式で実行される演算等を含むことができる。
【００４６】
図３は、演算マスクコンソリデーション命令３０４の一実施形態を実行するように動作可能な実行ユニット３０８を有する命令処理装置３００の一実施形態のブロック図である。幾つかの実施形態では、この命令処理装置は、プロセッサとすることができ、及び／又はプロセッサ内に含めることができる。例えば、幾つかの実施形態では、この命令処理装置は、図１のプロセッサとすることもできるし、図１のプロセッサに含めることもできる。代替的に、この命令処理装置は、同様の又は異なるプロセッサに含めることができる。その上、図１のプロセッサは、同様の又は異なる命令処理装置を備えることができる。
【００４７】
装置３００は、演算マスクコンソリデーション命令３０４を受信することができる。例えば、この命令は、命令フェッチユニット、命令キュー等から受信することができる。演算マスクコンソリデーション命令は、機械コード命令、アセンブリ言語命令、マクロ命令、又はこの装置のＩＳＡの制御信号を表すことができる。演算マスクコンソリデーション命令３０４は、ソース演算マスク３１１を（例えば、１つ若しくは複数のフィールド又は一組のビットを通じて）明示的に指定することもできるし、別の方法で示す（例えば、暗黙的に示す）こともでき、デスティネーション記憶ロケーション３１８を指定することもできるし、別の方法で示すこともできる。幾つかの実施形態では、この命令は、ソース演算マスク及びデスティネーション記憶ロケーションの双方を明示的に指定することができるが、これは必須ではない。例えば、１つの実施形態の演算マスクコンソリデーション命令は、命令フォーマットＫＣｏｎｓｏｌ  Ｋ１，Ｋ２を有することができる。ここで、ＫＣｏｎｓｏｌはオペコードを示し、Ｋ１はデスティネーションパックドデータ演算マスクレジスタを指定し、Ｋ２はソースパックドデータ演算マスクレジスタを指定する。幾つかの実施形態では、ソース演算マスク３１１は、マスクされた要素（例えば、０にクリアされたマスクビット）及びマスクされていない要素（例えば、１にセットされたマスクビット）を含むことができ、マスクされた要素のうちの少なくとも幾つかは、マスクされていない要素のうちの少なくとも幾つかの中に点在又は別の方法で配置することができる。このことの例には、ほんの数個の説明例を与えると、０１０１０１０１、００１０１０００、１１１００１１１、０１１００１０１、及び１１００００１１が含まれるが、確実にこれらに限定されるものではない。
【００４８】
幾つかの実施形態では、ソース演算マスク３１１は、命令によって指定するか又は別の方法で示すことができるソースパックドデータ演算マスクレジスタ３１６に記憶することができる。パックドデータ演算マスクレジスタ３１６は、一組のパックドデータ演算マスクレジスタ３０７のうちの１つとすることができる。同様に、幾つかの実施形態では、デスティネーション記憶ロケーション３１７は、パックドデータ演算マスクレジスタ３０７のうちの１つとすることができる。幾つかの実施形態では、デスティネーション記憶ロケーションは、ソースパックドデータ演算マスク３１６と同じレジスタとすることもできるし、異なるレジスタとすることもできる。パックドデータ演算マスクレジスタは、よく知られた技法を用いて種々のマイクロアーキテクチャにおいて種々の方法で実施することができ、いずれの既知の特定のタイプの回路にも限定されるものではない。好適なタイプのレジスタの例には、専用の物理レジスタ、レジスタリネームを用いて動的にアロケートされた物理レジスタ、及びそれらの組合せが含まれるが、これらに限定されるものではない。
【００４９】
図示した命令処理装置は、デコードユニット又はデコーダー３１５を備える。この命令デコーダーは、マクロ命令、機械コード命令、アセンブリ言語命令、又は他の相対的に高水準の命令を受信してデコードし、受信した高水準の命令を反映し、表し、及び／又はそれらの命令から導出される１つ又は複数のマイクロ命令、マイクロ演算、マイクロコードエントリーポイント、又は他の相対的に低水準の命令若しくは制御信号を出力することができる。これらの１つ又は複数の低水準の命令又は制御信号は、１つ又は複数の低水準（例えば、回路レベル又はハードウェアレベル）の演算を通じて、高水準の命令を実施することができる。デコーダーは、様々な異なるメカニズムを用いて実施することができる。これらのメカニズムには、マイクロコード読み出し専用メモリ（ＲＯＭ）、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、及び当該技術分野で知られているデコーダーを実施するのに用いられる他のメカニズムが含まれるが、これらに限定されるものではない。
【００５０】
他の実施形態では、命令エミュレーター、トランスレーター、モーファー（morpher）、インタープリター、又は他の命令変換ロジックを用いることができる。様々な異なるタイプの命令変換ロジックが、当該技術分野で知られており、これらの命令変換ロジックは、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組合せで実施することができる。命令変換ロジックは、命令を受信し、この命令を１つ又は複数の対応する導出された命令又は制御信号にエミュレート、トランスレート、モーフィング、解釈、又は別の方法で変換することができる。他の実施形態では、命令変換ロジック及びデコーダーの双方を用いることができる。例えば、この装置は、受信した機械コード命令を１つ又は複数の中間命令に変換する命令変換ロジックと、これらの１つ又は複数の中間命令を、この装置のネイティブハードウェア（例えば、実行ユニット）によって実行可能な１つ又は複数の低水準の命令又は制御信号にデコードするデコーダーとを有することができる。命令変換ロジックの一部又は全ては、命令処理装置の外部、例えば、別個のダイ上及び／又はメモリ内等に位置することができる。
【００５１】
図３を再び参照すると、実行ユニット３０８は、デコードユニット３１５、ソースパックドデータ演算マスク３１１、及びデスティネーション記憶ロケーション３１７と結合されている。この実行ユニットは、演算マスクコンソリデーション命令３０４を表し及び／又はこの命令から導出された１つ又は複数のデコード又は別の方法で変換された命令又は制御信号を受信することができる。前述したように、ソース演算マスク３１１は、マスクされた要素及びマスクされていない要素を含むことができ、マスクされた要素のうちの少なくとも幾つかは、マスクされていない要素のうちの少なくとも幾つかの中に点在又は別の方法で配置することができる。幾つかの実施形態では、実行ユニットは、演算マスクコンソリデーション命令３０４に応答して及び／又はこの命令の結果として、コンソリデートされた演算マスク３１８をデスティネーション記憶ロケーション３１７に記憶するように動作可能とすることができる。幾つかの実施形態では、コンソリデートされた演算マスクは、ともに収集され、ともに運ばれ、互いに隣接され、又は別の方法でともにコンソリデートされた、ソース演算マスクからのマスクされていない要素を含むことができる。幾つかの実施形態では、このコンソリデートされた演算マスクには、ソース演算マスクからのコンソリデートされた一組のマスクされていない要素の全ての間において、マスクされた要素が配置又は点在していない場合がある。すなわち、マスクされた要素は、マスクされていない要素間から移動又は別の方法で除去することができる。
【００５２】
幾つかの実施形態では、マスクされた要素及びマスクされていない要素のそれぞれは、異なる単一のマスクビットとすることができ、例えば、各マスクされた要素は、バイナリの０の値を有する単一のビットとすることができる（すなわち、０にクリアすることができる）のに対して、各マスクされていない要素は、バイナリの１の値を有する単一のビットとすることができる（すなわち、１にセットすることができる）。幾つかの実施形態では、実行ユニットは、ソース演算マスクからのマスクされていない要素を、コンソリデートされた演算マスク又はレジスタの最下位部分においてともにコンソリデートするように動作可能とすることができる。代替的に、幾つかの実施形態では、実行ユニットは、ソース演算マスクからのマスクされていない要素を、コンソリデートされた演算マスク又はレジスタの最上位部分においてともにコンソリデートするように動作可能とすることができる。幾つかの実施形態では、演算マスクコンソリデーション命令は、ソース演算マスクからのマスクされていない要素がコンソリデートされた演算マスク又はレジスタの最下位部分においてコンソリデートされるのか又は最上位部分においてコンソリデートされるのかを示すように動作可能とすることができる。例えば、幾つかの実施形態では、演算マスクコンソリデーション命令は、マスクされていない要素が最下位部分においてともにコンソリデートされることを示す第１の値（０の単一ビットバイナリ値）、又はマスクされていない要素が最上位部分においてともにコンソリデートされることを示す第２の値（１の単一ビットバイナリ値）を有することができる１つ又は複数のビットを含むことができる。例えば、１つの実施形態の演算マスクコンソリデーション命令は、命令フォーマットＫＣｏｎｓｏｌ  Ｋ１，Ｋ２，順序を有することができる。ここで、ＫＣｏｎｓｏｌはオペコードを示し、Ｋ１はデスティネーションパックドデータ演算マスクレジスタを指定し、Ｋ２はソースパックドデータ演算マスクレジスタを指定し、順序は、コンソリデーションが演算マスク内の最下位ビットに対するものか又は最上位ビットに対するものかを示す１つ又は複数のビットを含む。
【００５３】
実行ユニット及び／又は命令処理装置は、演算マスクコンソリデーション命令に応答して（例えば、演算マスクコンソリデーション命令からデコードされるか又は別の方法で導出される１つ又は複数の命令又は制御信号に応答して）演算マスクコンソリデーション命令を実行するとともにコンソリデートされた演算マスクを記憶するように動作可能な具体的な又は特定のロジック（例えば、回路部、又はファームウェア及び／又はソフトウェアと潜在的に組み合わされる他のハードウェア）を備えることができる。例として、実行ユニットは、論理ユニット、算術論理ユニット、論理演算を実行するデジタル回路、演算マスクコンソリデーションロジックを備える実行ユニット又は機能ユニット等を含むことができる。
【００５４】
説明を分かりにくくしないようにするために、比較的単純な命令処理装置３００が図示及び説明されてきた。他の実施形態では、この装置は、オプションとして、プロセッサ内に見られる他のよく知られた構成要素を備えることができる。そのような構成要素の例には、分岐予測ユニット、命令フェッチユニット、命令キャッシュ及びデータキャッシュ、命令変換索引バッファー及びデータ変換索引バッファー、プリフェッチバッファー、マイクロ命令キュー、マイクロ命令シーケンサー、レジスタリネームユニット、命令スケジューリングユニット、バスインターフェースユニット、第２のキャッシュ又は高レベルキャッシュ、リタイアメントユニット、プロセッサに含まれる他の構成要素、並びにそれらの様々な組合せが含まれるが、これらに限定されるものではない。プロセッサ内の構成要素の文字どおり多数の異なる組合せ及び構成があり、実施形態は、どの特定の組合せにも構成にも限定されるものではない。実施形態は、複数のコアを有するプロセッサ、論理プロセッサ、又は実行エンジンに含めることができ、これらのうちの少なくとも１つは、本明細書において開示される命令の一実施形態を実行するように動作可能な実行ロジックを有する。
【００５５】
図４Ａは、最下位位置命令への演算マスクコンソリデーションの一例示の実施形態に応じて及び／又はこの実施形態の結果として実行することができる最下位位置演算への演算マスクコンソリデーション４０４Ａの一例示の実施形態のブロック図である。この命令は、ソース演算マスク４１１Ａ及びデスティネーション（例えば、デスティネーション記憶ロケーション）を明示的に指定するか又は別の方法で示す（例えば、暗黙的に示す）ことができる。図示した実施形態では、ソース演算マスクは８ビット幅である。他の実施形態では、ソース演算マスクは、それよりも狭い（例えば、４ビット）か又はそれよりも広い（例えば、１６ビット、３２ビット、６４ビット、又はこれよりも更に広い）かのいずれかとすることができる。幾つかの態様では、演算マスクの幅は、対応するパックドデータ幅及びデータ要素幅に依存し得る（例えば、図８及び図１０の論述参照）。幾つかの実施形態では、ソース演算マスクは、演算マスクレジスタに含めることができ、プレディケーションにアクティブであり、意味があり、及び／又は用いられるレジスタのビットのサブセット（例えば、最低順序のサブセット）を表すことができる。これとは対照的に、レジスタ内のビットの別のサブセット（例えば、最高順序の残りの部分）は、プレディケーションに非アクティブであり、意味がなく、及び／又は用いられない場合がある。幾つかの実施形態では、ソース演算マスクは、複数のマスクされていない要素内に配置された複数のマスクされた要素を含むことができる。例えば、この説明図では、ソース演算マスクは、最低順序のビット０（右側）から最高順序のビット７（左側）へビット値０、０、１、１、０、０、１、１を含む。このデータは、１つの例にすぎず、命令／演算は、ソース演算マスク内のマスクされた要素及びマスクされていない要素の配置にかかわらず機能する。多数の可能な配置のうちの実質的に他のいずれも機能する。図示した規定によれば、セットされたビット値又は「１」のビット値は、マスクされていないビットを表すのに対して、クリアされたビット値又は「０」のビット値は、マスクされたビットを表す。代替の実施形態では、逆の規定を代わりに用いることができる。その上、他の実施形態では、マルチビットマスク要素をオプションとして用いることができる（例えば、２ビット又は対応するパックドデータ要素の幅を有する）。
【００５６】
コンソリデートされた演算マスク４１８Ａの一実施形態は、命令に応答して及び／又は命令の結果としてデスティネーションに記憶することができる。幾つかの実施形態では、コンソリデートされた演算マスクは、デスティネーションにおいて収集又は別の方法でともにコンソリデートされたソース演算マスク４１１Ａからのマスクされていない要素（例えば、図示した規定によれば、セットされたビット又は「１」のビット値）を含むことができる。例えば、命令／演算のこの最下位位置のバージョンでは、全てのマスクされていない要素（例えば、図示した規定によれば、セットされたビット値又は「１」のビット値）、この場合、４つ全てが、コンソリデートされた演算マスク及び／又はデスティネーションの最低順序のビット、この場合、最低順序の４ビットに記憶される。特に、コンソリデートされた演算マスクは、最低順序のビット０（右側）から最高順序のビット７（左側）へビット値１、１、１、１、０、０、０、０を含む。これを達成するための様々な方法が、これらのマスクされていない要素のルーティング、コピー、選択、若しくはそれらの幾つかの組合せ、又は別の方法による移動若しくは再配置を通じて行うことを含めて考慮されている。幾つかの実施形態では、ソース演算マスクからのマスクされた要素（例えば、図示した規定によれば、クリアされたビット又は「０」のビット値）を単に廃棄又は消去することができ、デスティネーションに伝達する必要がない場合がある。ソース演算マスク内のマスクされていないビットの総数よりも上位の（more significant）ビットは、デスティネーションにおいて単に０にすることができる。すなわち、廃棄されたいずれのマスクされた要素（例えば、クリアされたビット又は「０」のビット値）も、マスクされた置換要素（例えば、クリアされたビット又は「０」のビット値）で満たすことができる。代替的に、他の実施形態では、ソース演算マスクからのマスクされた要素は、マスクされていない要素よりも高い順序の位置に移動又は再配置することができる。
【００５７】
図４Ｂは、最上位位置命令への演算マスクコンソリデーションの一例示の実施形態に応答して及び／又はこの実施形態の結果として実行することができる最上位位置演算への演算マスクコンソリデーション４０４Ｂの一例示の実施形態のブロック図である。特徴及び特性の多くは、図４Ａについて前述したものと同様又は同じである。この説明を分かりにくくしないようにするために、論述は、主として異なる特徴及び特性又は追加の特徴及び特性を強調することになる。既に述べたように、この命令は、ソース演算マスク４１１Ｂ及びデスティネーション（例えば、デスティネーション記憶ロケーション）を明示的に指定するか又は別の方法で示す（例えば、暗黙的に示す）ことができる。既に述べたように、コンソリデートされた演算マスク４１８Ｂの一実施形態は、命令に応答して及び／又は命令の結果として、デスティネーションに記憶することができる。上記と同様に、幾つかの実施形態では、コンソリデートされた演算マスクは、デスティネーションにおいてともにコンソリデートされたソース演算マスク４１１Ｂからのマスクされていない要素（例えば、図示した規定によれば、セットされたビット又は「１」のビット値）を含むことができる。しかしながら、命令／演算のこの最上位位置のバージョンでは、４つの全てのマスクされていない要素（例えば、図示した規定によれば、セットされたビット値又は「１」のビット値）は、コンソリデートされた演算マスクの最高順序又は最上位の４ビットに記憶される。特に、コンソリデートされた演算マスクは、最低順序のビット０（右側）から最高順序のビット７（左側）へビット値０、０、０、０、１、１、１、１を含む。
【００５８】
これらは、好適な演算マスクコンソリデーション演算のほんの数個の説明例にすぎない。最低順序のビット０（右側）から最高順序のビット７（左側）への好適な開始８ビットの演算マスク（左側）及び結果のコンソリデートされた演算マスク（右側）の他の例には、以下のものが含まれるが、これらに限定されるものではない。  １００００００１→００００００１１（最下位バージョン）  ０１０１０１００→０００００１１１（最下位バージョン）  ００１０１１１１→０００１１１１１（最下位バージョン）  １００００００１→１１００００００（最上位バージョン）  ０１０１０１００→１１１０００００（最上位バージョン）  ００１０１１１１→１１１１１０００（最上位バージョン）
【００５９】
他の実施形態は、１６ビット演算マスクに対して作用する演算マスクコンソリデーション命令／演算に関するものである。例えば、最低順序のビット０（右側）から最高順序のビット７（左側）への好適な開始１６ビット演算マスク（左側）及び結果のコンソリデートされた１６ビット演算マスク（右側）の他の例には、以下のものが含まれるが、これらに限定されるものではない。  １００００００００１１００００１→００００００００００００１１１１（最下位バージョン）  １００００００００００００００１→００００００００００００００１１（最下位バージョン）  ０００１０１００１１００１１１０→１１１１１１１０００００００００（最上位バージョン）  ０１００１１１１１０１１１１００→１１１１１１１１１１００００００（最上位バージョン）
【００６０】
更に他の実施形態は、６４ビット演算マスク又は他のビット数を有する演算マスクに対して作用する演算マスクコンソリデーション命令／演算に関するものである。その上、所望である場合には、最下位ビット又は最上位ビットから開始する代わりに、中間（例えば、中心又は中央）位置へのコンソリデーションも、オプションとして用いることができる。
【００６１】
図５は、演算マスクコンソリデーション命令の一実施形態を処理する方法５３０の一実施形態のブロック流れ図である。様々な実施形態では、この方法は、汎用プロセッサ、専用プロセッサ、又は他の命令処理装置若しくはデジタル論理デバイスによって実行することができる。幾つかの実施形態では、図５の演算及び／又は方法は、図１のプロセッサ及び／又は図３の装置によって及び／又はそれらの内部において実行することができる。図１のプロセッサ及び図３の装置について本明細書において説明した構成要素、特徴、及び具体的なオプションの詳細は、図５の演算及び／又は方法にもオプションとして適用される。代替的に、図５の演算及び／又は方法は、同様の又は完全に異なるプロセッサ又は装置によって及び／又はそれらの内部において実行することができる。その上、図１のプロセッサ及び／又は図３の装置は、図５のものと同じか、同様か、又は異なる演算及び／又は方法を実行することができる。
【００６２】
この方法は、ブロック５３１において、演算マスクコンソリデーション命令を受信することを含む。様々な態様では、命令は、プロセッサ、命令処理装置、又はそれらの一部分（例えば、命令フェッチユニット、デコーダー、命令変換器等）において受信することができる。様々な態様では、命令は、オフダイソース（例えば、メインメモリ、ディスク、又は相互接続部）から受信することもできるし、オンダイソース（例えば、命令フェッチユニット又は命令キャッシュ）から受信することもできる。演算マスクコンソリデーション命令は、ソース演算マスク及びデスティネーション記憶ロケーションを指定するか又は別の方法で示すことができるする。幾つかの実施形態では、ソース演算マスクは、複数のマスクされていない要素（例えば、バイナリの１にセットされたマスクビット）内に配置された複数のマスクされた要素（例えば、バイナリの０にクリアされたマスクビット）を含むことができる。
【００６３】
コンソリデートされた演算マスクは、ブロック５３２において、演算マスクコンソリデーション命令に応答して及び／又はこの命令の結果として、デスティネーション記憶ロケーションに記憶することができる。代表的には、実行ユニット、命令処理装置、又はプロセッサが、命令によって指定された演算を実行することができ、その結果を記憶することができる。幾つかの実施形態では、コンソリデートされた演算マスクは、ともにコンソリデートされたソース演算マスクからのマスクされていない要素を含むことができる。
【００６４】
幾つかの実施形態では、コンソリデートされた演算マスクには、マスクされた要素が、マスクされていない要素間に配置されていない場合がある。幾つかの実施形態では、マスクされていない要素をコンソリデートされた演算マスク又はレジスタの最下位部分においてコンソリデートすることができる。代替的に、マスクされていない要素をコンソリデートされた演算マスク又はレジスタの最上位部分においてコンソリデートすることができる。幾つかの実施形態では、演算マスクコンソリデーション命令は、最下位部分が用いられるのか又はそれよりも上位部分（例えば、１つ若しくは複数のビット又はフィールドにわたって）が用いられるのかを示すように動作可能とすることができる。
【００６５】
図示した方法は、アーキテクチャ的に可視の演算（例えば、ソフトウェアの視点から可視の演算）を含む。他の実施形態では、この方法は、オプションとして、１つ又は複数のマイクロアーキテクチャ演算を含むことができる。例として、命令をアウトオブオーダーでフェッチし、デコードし、スケジューリングすることができ、ソースオペランドにアクセスすることができ、マイクロアーキテクチャ演算を実行するように実行ユニット又はロジックをイネーブルすることができ、実行ユニット又はロジックがマイクロアーキテクチャ演算を実行して命令を実施することができ、結果をプログラム順に戻し、コミット等することができる。演算を実行する種々のマイクロアーキテクチャの方法が考慮されている。
【００６６】
図６は、演算マスクコンソリデーション命令のための好適な命令フォーマット６３４の一実施形態のブロック図である。この命令フォーマットは、演算コード又はオペコード６３５を含む。このオペコードは、実行される命令及び／又は演算を識別するように使用可能な複数のビット又は１つ若しくは複数のフィールドを表すことができる。この命令フォーマットは、ソース演算マスクを指定するフィールド６３６及びデスティネーション記憶ロケーションを指定するフィールド６３７も含む。例として、これらの指定子のそれぞれは、レジスタのアドレス、メモリロケーション、又は他の記憶ロケーションを指定するビット又は１つ若しくは複数のフィールドを含むことができる。幾つかの実施形態では、これらのそれぞれは、潜在的に同じ又は潜在的に異なるパックドデータ演算マスクレジスタを示すことができる。１つの特定の実施形態では、これらのそれぞれは、８つのパックドデータ演算マスクレジスタのうちの１つを選択する３ビットを含むことができる。他の実施形態では、単一のフィールドを用いて、デスティネーションとしても用いられる単一のソースを示すことができる。更に他の実施形態では、暗黙的なソース及び／又は暗黙的なデスティネーションをオプションとして用いることができる。幾つかの実施形態では、このフォーマットは、オプションとして、最低順序又は最高順序の選択を示す１つ若しくは複数のビット又はフィールド６３８も含むことができる。これは、マスクされていない要素がマスクの最高順序の部分においてコンソリデートされるのか又は最低順序の部分においてコンソリデートされるのかを示すことができる。代替の実施形態には、指定子のサブセットを含むことができるもの、追加のフィールドを加えることができるもの、或る特定の（certain）フィールドを重ね合わせることができるもの等がある。フィールドの図示した順序／配置は必須ではなく、逆に、それらのフィールドは、再配置することができる。フィールドは、ビットの連続シーケンスを含む必要はなく、逆に、非連続の又は分離したビットからなることができる。
【００６７】
本明細書において開示される演算マスクコンソリデーション命令は、汎用命令であり、一般的な用途を有する。例えば、特定のアプリケーション、アルゴリズム、又はコードに有用であるとともに所望される様々な異なる方法で、これらの演算マスク操作命令／演算を単独で又は他の命令と組み合わせて用いて、演算マスクをコンソリデートするか又は別の方法で操作することができる。
【００６８】
幾つかの実施形態では、演算マスクコンソリデーション命令／演算は、コードをベクトル化することを援助するのに用いることができる。例えば、コンパイラーは、コードを自動ベクトル化することを援助するのに演算マスクコンソリデーション命令／演算を用いることができ、ここで、基礎を成すコードは演算マスク内のマスクされていない値のみに対して演算を行う。幾つかの実施形態では、演算マスクコンソリデーション命令／演算は、条件付きループインクリメントコードの自動ベクトル化を容易にする（例えば、ループの複数の反復用のカウンター値の条件付き自動インクリメントを加速又は高速化する）のに用いることができる。条件付きループインクリメント演算は、コンパイラーが自動ベクトル化するには課題になりがちである。例として、例えば、値１、２、３、４、５、６、７、８等の増分カウントは、第１のレジスタに含めることができる。例えば、値０、０、０、０、１、１、１、１を含むコンソリデートされたマスクは、第２のレジスタに含めることができる。コンソリデートされたマスク内の値のそれぞれは、ループの異なる反復を表すことができる。４つのセットされたマスクビットの存在を用いると、各インクリメントを通過する必要なくループ内のカウンター又は変数を効率的にインクリメントするのに用いることができる第１のレジスタから値４を効率的に選択することができる。そのような状況は、通例、高性能コンピューティングアプリケーションにおいてだけでなく、より一般的にも生じる。そのような改良されたベクトル化は、広いベクトル幅の利用を高め、性能を高め、電力消費を削減するのを援助することができる。これは、スレッド単位の性能を高めることも援助することができる。
【００６９】
代替的に、命令／演算は、ベクトル化の強化を促進すること以外の他の目的に用いることができる。幾つかの実施形態では、演算マスクコンソリデーション命令／演算は、マスクされていない要素をカウント又は別の方法で処理する（例えば、マスクされていない要素の総数をカウント又識別する）ことがより容易又はより高速になるように、マスクされていない要素を再配置するのに用いることができる。更に他の実施形態では、演算マスクコンソリデーション命令／演算は、他の命令（例えば、他の演算マスク操作命令、マスクされたパックドデータ命令等）による使用又は消費のために演算マスクを操作するのに用いることができる。しかしながら、本発明の範囲は、これらの特定の使用のみに限定されるものではない。他の使用は、本開示に基づいて当業者に明らかであろう。
【００７０】
図７は、好適な一組のパックドデータレジスタ７０６の一例示の実施形態のブロック図である。図示したパックドデータレジスタは、３２個の５１２ビット幅のパックドデータレジスタ又はベクトルレジスタを含む。これらの３２個の５１２ビット幅レジスタは、ＺＭＭ０〜ＺＭＭ３１のラベルが付けられている。この図示した実施形態では、これらのレジスタのうちの下位の１６個、すなわちＺＭＭ０〜ＺＭＭ１５の低順序の２５６ビットは、ＹＭＭ０〜ＹＭＭ１５のラベルが付けられたそれぞれの２５６ビット幅パックドデータレジスタ又はベクトルレジスタ上にエイリアスされるか又は重ねられている。ただし、これは必須ではない。同様に、図示した実施形態では、ＹＭＭ０〜ＹＭＭ１５の低順序の１２８ビットは、ＸＭＭ０及びＸＭＭ１のラベルが付けられたそれぞれの１２８ビットパックドデータレジスタ又はベクトルレジスタにエイリアスされるか又は重ねられている。ただし、これは必須ではない。５１２ビット幅レジスタＺＭＭ０〜ＺＭＭ３１は、５１２ビットパックドデータ、２５６ビットパックドデータ、又は１２８ビットパックドデータを保持するように動作可能である。２５６ビット幅レジスタＹＭＭ０〜ＹＭＭ１５は、２５６ビットパックドデータ又は１２８ビットパックドデータを保持するように動作可能である。１２８ビット幅レジスタＸＭＭ０及びＸＭＭ１は、１２８ビットパックドデータを保持するように動作可能である。これらのレジスタのそれぞれは、パックド浮動小数点データ又はパックド整数データのいずれかを記憶するのに用いることができる。少なくとも８ビットのバイトデータと、１６ビットのワードデータと、３２ビットのダブルワードデータ又は単精度浮動小数点データと、６４ビットのクワッドワードデータ又は倍精度浮動小数点データとを含む種々のデータ要素サイズがサポートされる。パックドデータレジスタの代替の実施形態は、異なる数のレジスタ、異なるサイズのレジスタを含むことができ、より小さなレジスタ上により大きなレジスタをエイリアスする場合もあるし、しない場合もある。
【００７１】
好適なパックドデータフォーマットの１つの例は、２５６ビット幅であるとともに１６個の１６ビットのワードデータ要素を含む２５６ビットパックドワードフォーマットである。別の例は、２５６ビット幅であるとともに８つの３２ビットのダブルワード（ｄｗｏｒｄ）データ要素を含む２５６ビットのパックドダブルワードフォーマットである。更に別の例は、２５６ビット幅であるとともに４つの６４ビットクワッドワードデータ要素を含む２５６ビットのパックドクワッドワードフォーマットである。他のパックドデータフォーマットも好適である。例えば、他の好適な２５６ビットのパックドデータフォーマットには、２５６ビットのパックド８ビットバイトフォーマット、２５６ビットのパックド３２ビット単精度浮動小数点フォーマット、及び２５６ビットのパックド６４ビット倍精度浮動小数点フォーマットが含まれる。その上、２５６ビットよりも大きい及び／又は小さいパックドデータフォーマットも好適である。例えば、上述したデータタイプの５１２ビットの（又はこれよりも大きな）パックドデータフォーマット及び／又は１２８ビットの（又はこれよりも小さな）パックドデータフォーマットも好適である。一般に、５１２ビットのパックドデータフォーマットは、同じデータタイプについて、２５６ビットのパックドデータフォーマットの２倍のデータ要素を有することができる一方、１２８ビットのパックドデータフォーマットは、同じデータタイプについて、２５６ビットのパックドデータフォーマットの２分の１のデータ要素を有することができる。一般に、パックドデータ要素の数は、パックドデータのビットによるサイズをパックドデータ要素のビットによるサイズによって除算したものに等しい。
【００７２】
図８は、パックドデータ演算マスクのビット数８４０がパックドデータ幅及びパックドデータ要素幅に依存することを示す表である。１２８ビット、２５６ビット、及び５１２ビットのパックドデータ幅が示されているが、他の幅も可能である。８ビットのバイト、１６ビットのワード、３２ビットのダブルワード（ｄｗｏｒｄ）又は単精度浮動小数点、及び６４ビットのクワッドワード（Ｑｗｏｒｄ）又は倍精度浮動小数点のパックドデータ要素幅が考慮されているが、他の幅も可能である。
【００７３】
図示するように、パックドデータ幅が１２８ビットであるときにおいて、パックドデータ要素幅が８ビットであるときは１６ビットをマスキングに用いることができ、パックドデータ要素幅が１６ビットであるときは８ビットをマスキングに用いることができ、パックドデータ要素幅が３２ビットであるときは４ビットをマスキングに用いることができ、パックドデータ要素幅が６４ビットであるときは２ビットをマスキングに用いることができる。パックドデータ幅が２５６ビットであるときにおいて、パックドデータ要素幅が８ビットであるときは３２ビットをマスキングに用いることができ、パックドデータ要素幅が１６ビットであるときは１６ビットをマスキングに用いることができ、パックドデータ要素幅が３２ビットであるときは８ビットをマスキングに用いることができ、パックドデータ要素幅が６４ビットであるときは４ビットをマスキングに用いることができる。パックドデータ幅が５１２ビットであるときにおいて、パックドデータ要素幅が８ビットであるときは６４ビットをマスキングに用いることができ、パックドデータ要素幅が１６ビットであるときは３２ビットをマスキングに用いることができ、パックドデータ要素幅が３２ビットであるときは１６ビットをマスキングに用いることができ、パックドデータ要素幅が６４ビットであるときは８ビットをマスキングに用いることができる。
【００７４】
図９は、好適な一組のパックドデータ演算マスクレジスタ９０７の一例示の実施形態のブロック図である。パックドデータ演算マスクレジスタのそれぞれは、パックドデータ演算マスクを記憶するのに用いることができる。図示した実施形態では、この一組は、ｋ０〜ｋ７のラベルが付けられた８つのパックドデータ演算マスクレジスタを含む。代替の実施形態は、８つよりも少ない（例えば、２つ、４つ、６つ等）か又は８つよりも多い（例えば、１６個、２０個、３２個等）パックドデータ演算マスクレジスタを含むことができる。図示した実施形態では、パックドデータ演算マスクレジスタのそれぞれは６４ビット幅である。代替の実施形態では、パックドデータ演算マスクレジスタの幅は、６４ビットよりも広くすることもできるし（例えば、８０ビット、１２８ビット等）、６４ビットよりも狭くすることもできる（例えば、８ビット、１６ビット、３２ビット等）。パックドデータ演算マスクレジスタは、よく知られた技法を用いて種々の方法で実装することができ、どの既知の特定のタイプの回路にも限定されるものではない。好適なレジスタの例には、専用の物理レジスタ、レジスタリネームを用いて動的にアロケートされた物理レジスタ、及びそれらの組合せが含まれるが、これらに限定されるものではない。
【００７５】
幾つかの実施形態では、パックドデータ演算マスクレジスタ１００７は、別個の専用の一組のアーキテクチャレジスタとすることができる。例として、マスクされたパックドデータ命令は、３ビット（例えば、３ビットフィールド）を用いて、８つのパックドデータ演算マスクレジスタｋ０〜ｋ７のうちの任意の１つをエンコード又は指定することができる。代替の実施形態では、これよりも少ない又はこれよりも多くのパックドデータ演算マスクレジスタがあるとき、それぞれこれよりも少ない又はこれよりも多くのビットを用いることができる。１つの特定の実施態様では、パックドデータ演算マスクレジスタｋ１〜ｋ７（ｋ０ではない）のみを述語オペランドとしてアドレス指定して、マスクされたパックドデータ演算をプレディケートすることができる。レジスタｋ０は、通常のソース又はデスティネーションとして用いることができるが、述語オペランドとしてエンコードされない場合がある（例えば、ｋ０は、指定される場合、全て１を有するか又は「マスクを有しない」とエンコードされる）。他の実施形態では、レジスタの全て又は一部のみを述語オペランドとしてエンコードすることができる。
【００７６】
図１０は、パックドデータ演算マスクレジスタ１００７の一例示の実施形態を示すとともに、パックドデータ演算マスクとして及び／又はマスキングに用いられるビット数がパックドデータ幅及びデータ要素幅に依存することを示す図である。パックドデータ演算マスクレジスタの図示した例示の実施形態は６４ビット幅であるが、これは必須ではない。パックドデータ幅及びデータ要素幅の組合せに応じて、６４ビット全て又は６４ビットのサブセットのみをマスキング用にパックドデータ演算マスクとして用いることができる。一般に、単一の要素ごとのマスキング制御ビットが用いられるとき、マスキング用に用いられるパックドデータ演算マスクレジスタ内のビット数は、ビットによるパックドデータ幅をビットによるパックドデータ要素幅によって除算したものに等しい。
【００７７】
幾つかの説明例が示されている。すなわち、パックドデータ幅が５１２ビットであり、パックドデータ要素幅が６４ビットであるとき、レジスタの最低順序の８ビットが、パックドデータ演算マスクとして用いられる。パックドデータ幅が５１２ビットであり、パックドデータ要素幅が３２ビットであるとき、レジスタの最低順序の１６ビットのみがパックドデータ演算マスクとして用いられる。パックドデータ幅が５１２ビットであり、パックドデータ要素幅が１６ビットであるとき、レジスタの最低順序の３２ビットのみがパックドデータ演算マスクとして用いられる。パックドデータ幅が５１２ビットであり、パックドデータ要素幅が８ビットであるとき、レジスタの６４ビット全てがパックドデータ演算マスクとして用いられる。図示した実施形態によれば、マスクされたパックドデータ命令は、この命令に関連付けられたパックドデータ幅及びデータ要素幅に基づいて、パックドデータ演算マスクに用いられるレジスタの最低順序のビット数又は最下位ビット数のみにアクセスすることができ及び／又はそのビット数を利用することができる。
【００７８】
図示した実施形態では、レジスタの最低順序のサブセット又は部分がマスキングに用いられるが、これは必須ではない。代替の実施形態では、最高順序のサブセット又は他の或るサブセットをオプションとして用いることができる。その上、図示した実施形態では、５１２ビットのパックドデータ幅のみが考慮されているが、類似の原理が、例えば、２５６ビット幅及び１２８ビット幅等の他のパックドデータ幅に適用される。前述したように、６４ビットのパックドデータ演算マスクレジスタの使用が必須ではない。
【００７９】
命令セットは、１つ又は複数の命令フォーマットを有する。所与の命令フォーマットは、特に、実行される演算（オペコード）と、その演算が実行される対象のオペランドとを指定する様々なフィールド（ビット数、ビットのロケーション）を定義する。幾つかの命令フォーマットは、命令テンプレート（又はサブフォーマット）の定義を通じて更に分割される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義することができ（含まれるフィールドは、通常、同じ順序であるが、少なくとも幾つかは、含まれるフィールドが少ないので、異なるビット位置を有する）、及び／又は異なって解釈される所与のフィールドを有するように定義することができる。このように、ＩＳＡの各命令は、所与の命令フォーマットを用いて（定義される場合、その命令フォーマットの命令テンプレートのうちの所与の１つにおいて）表され、演算及びオペランドを指定するためのフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコードと、このオペコードを指定するオペコードフィールド及びオペランド（ソース１／デスティネーション及びソース２）を選択するオペランドフィールドを含む命令フォーマットとを有し、命令ストリームにおけるこのＡＤＤ命令の生起は、特定のオペランドを選択するオペランドフィールドに特定のコンテンツを有する。アドバンストベクトルエクステンション（ＡＶＸ：Advanced Vector Extensions）（ＡＶＸ１及びＡＶＸ２）と呼ばれるとともにベクトルエクステンション（ＶＥＸ：Vector Extensions）符号化方式を用いる一組のＳＩＭＤエクステンションがリリースされ及び／又公開されている。（例えば、Intel（登録商標） 64 and IA-32 Architectures Software Developers Manual, October 1911及びIntel（登録商標） Advanced Vector Extensions Programming Reference, June 1911を参照）。
【００８０】
例示的な命令フォーマット
本明細書において説明する命令の実施形態は、種々のフォーマットで具現化することができる。加えて、例示的なシステム、アーキテクチャ、及びパイプラインが以下に詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、及びパイプライン上で実行することができるが、詳述されるものに限定されるものではない。
【００８１】
ＶＥＸ命令フォーマット
ＶＥＸエンコードによって、命令が３つ以上のオペランドを有することが可能になり、ＳＩＭＤベクトルレジスタを１１８ビットよりも長くすることが可能になる。ＶＥＸプレフィックスの使用によって、３オペランド（又はそれよりも多くのオペランド）シンタックスが提供される。例えば、これまでの２オペランド命令は、ソースオペランドを上書きするＡ＝Ａ＋Ｂ等の演算を実行していた。ＶＥＸプレフィックスの使用によって、オペランドは、Ａ＝Ｂ＋Ｃ等の非消去的な演算を実行することが可能になる。
【００８２】
図１１Ａは、ＶＥＸプレフィックス１１０２、リアルオペコードフィールド１１３０、Ｍｏｄ  Ｒ／Ｍバイト１１４０、ＳＩＢバイト１１５０、変位フィールド１１６２、及びＩＭＭ８  １１７２を含む例示的なＡＶＸ命令フォーマットを示している。図１１Ｂは、図１１Ａからのどのフィールドがフルオペコードフィールド１１７４及びベース演算フィールド１１４２を構成するのかを示している。図１１Ｃは、図１１Ａからのどのフィールドがレジスタインデックスフィールド１１４４を構成するのかを示している。
【００８３】
ＶＥＸプレフィックス（バイト０〜２）１１０２は、３バイト形式でエンコードされる。第１のバイトは、フォーマットフィールド１１４０（ＶＥＸバイト０、ビット［７：０］）であり、このフィールドは、明示的なＣ４バイト値（Ｃ４命令フォーマットを区別するのに用いられる一意の値）を含む。第２のバイト及び第３のバイト（ＶＥＸバイト１及び２）は、特定の機能を提供する複数のビットフィールドを含む。具体的には、ＲＥＸフィールド１１０５（ＶＥＸバイト１、ビット［７〜５］）は、ＶＥＸ．Ｒビットフィールド（ＶＥＸバイト１、ビット［７］−Ｒ）と、ＶＥＸ．Ｘビットフィールド（ＶＥＸバイト１、ビット［６］−Ｘ）と、ＶＥＸ．Ｂビットフィールド（ＶＥＸバイト１、ビット［５］−Ｂ）とからなる。命令の他のフィールドは、当該技術分野で知られているように、レジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、及びｂｂｂ）をエンコードし、ＶＥＸ．Ｒ、ＶＥＸ．Ｘ、及びＶＥＸ．Ｂを加えることによってＲｒｒｒ、Ｘｘｘｘ、及びＢｂｂｂを形成することができるようにする。オペコードマップフィールド１１１５（ＶＥＸバイト１、ビット［４：０］−ｍｍｍｍｍ）は、暗黙のリーディングオペコードバイトをエンコードするコンテンツを含む。Ｗフィールド１１６４（ＶＥＸバイト２、ビット［７］−Ｗ）は、ＶＥＸ．Ｗという表記によって表され、命令に応じて異なる機能を提供する。ＶＥＸ．ｖｖｖｖ１１２０（ＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）の役割は、次のもの、すなわち、１）ＶＥＸ．ｖｖｖｖが、反転された（１の補数）形式で指定された第１のソースレジスタオペランドをエンコードし、２つ以上のソースオペランドを有する命令に有効であること、２）ＶＥＸ．ｖｖｖｖが、或る特定のベクトルシフトについて１の補数の形式で指定されたデスティネーションレジスタオペランドをエンコードすること、又は３）ＶＥＸ．ｖｖｖｖがどのオペランドもエンコードしないこと、を含むことができ、このフィールドは予約され、１１１１ｂを含むべきであるる。ＶＥＸ．Ｌ１１６８のサイズフィールド（ＶＥＸバイト２、ビット［２］−Ｌ）＝０である場合、これは、１１８ビットベクトルを示す。ＶＥＸ．Ｌ＝１である場合、これは、２５６ビットベクトルを示す。プレフィックスエンコードフィールド１１２５（ＶＥＸバイト２、ビット［１：０］−ｐｐ）は、ベース演算フィールド用の追加のビットを提供する。
【００８４】
リアルオペコードフィールド１１３０（バイト３）は、オペコードバイトとしても知られている。このオペコードの一部は、このフィールドにおいて指定される。
【００８５】
ＭＯＤ  Ｒ／Ｍフィールド１１４０（バイト４）は、ＭＯＤフィールド１１４２（ビット［７-６］）、Ｒｅｇフィールド１１４４（ビット［５〜３］）、及びＲ／Ｍフィールド１１４６（ビット［２〜０］）を含む。Ｒｅｇフィールド１１４４の役割は、次のもの、すなわち、デスティネーションレジスタオペランド又はソースレジスタオペランド（Ｒｒｒｒのｒｒｒ）をエンコードすること、を含むこともできるし、オペコードエクステンションとして扱われて、どの命令オペランドをエンコードするのにも用いられないようにすることもできる。Ｒ／Ｍフィールド１１４６の役割は、次のもの、すなわち、メモリアドレスを参照する命令オペランドをエンコードすること、又はデスティネーションレジスタオペランド若しくはソースレジスタオペランドをエンコードすることを含むことができる。
【００８６】
スケール、インデックス、ベース（ＳＩＢ）。スケールフィールド１１５０（バイト５）のコンテンツは、メモリアドレス生成に用いられるＳＳ１１５２（ビット［７〜６］）を含む。ＳＩＢ．ｘｘｘ１１５４（ビット［５〜３］）及びＳＩＢ．ｂｂｂ１１５６（ビット［２〜０］）のコンテンツは、レジスタインデックスＸｘｘｘ及びＢｂｂｂに関して前に言及している。
【００８７】
変位フィールド１１６２及び即値フィールド（ＩＭＭ８）１１７２は、アドレスデータを含む。
【００８８】
例示的なレジスタアーキテクチャ
図１２は、本発明の１つの実施形態によるレジスタアーキテクチャ１２００のブロック図である。図示した実施形態には、５１１ビット幅の３２個のベクトルレジスタ１２１０が存在する。これらのレジスタは、ｚｍｍ０〜ｚｍｍ３１として参照される。下位の１５個のｚｍｍレジスタの低順序の２５６ビットは、レジスタｙｍｍ０〜ｙｍｍ１５の上に重ねられている。下位の１５個のｚｍｍレジスタの低順序の１１８ビット（ｙｍｍレジスタの低順序の１１８ビット）は、レジスタｘｍｍ０〜ｘｍｍ１４の上に重ねられている。
【００８９】
書き込みマスクレジスタ１２１４。図示した実施形態では、それぞれサイズが６４ビットの８つの書き込みマスクレジスタ（ｋ０〜ｋ７）がある。代替の実施形態では、書き込みマスクレジスタ１２１４は、サイズが１５ビットである。前述したように、本発明の１つの実施形態では、ベクトルマスクレジスタｋ０は、書き込みマスクとして用いることができない。通常、ｋ０を示すエンコードが書き込みマスクに用いられるとき、このエンコードは、その命令用の書き込みマスキングを有効にディセーブルする０ｘＦＦＦＦのハードワイヤード書き込みマスクを選択する。
【００９０】
汎用レジスタ１２２５。図示した実施形態には、メモリオペランドをアドレス指定する既存のｘ８６アドレス指定モードとともに用いられる１６個の６４ビット汎用レジスタがある。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、及びＲ８〜Ｒ１４という名称によって参照される。
【００９１】
ＭＭＸパックド整数フラットレジスタファイル１２５０がエイリアスされるスカラー浮動小数点スタックレジスタファイル（ｘ８７スタック）１２４５。図示した実施形態では、ｘ８７スタックは、ｘ８７命令セットエクステンションを用いて３２／６４／８０ビットの浮動小数点データに対してスカラー浮動小数点演算を実行するのに用いられる８要素スタックである一方、ＭＭＸレジスタは、６４ビットパックド整数データに対して演算を実行するとともに、ＭＭＸレジスタとＸＭＭレジスタとの間で実行される幾つかの演算用のオペランドを保持するのに用いられる。
【００９２】
本発明の代替の実施形態は、より広いレジスタ又はより狭いレジスタを用いることができる。加えて、本発明の代替の実施形態は、より多くのレジスタファイル及びレジスタ、より少ないレジスタファイル及びレジスタ、又は異なるレジスタファイル及びレジスタを用いることができる。
【００９３】
例示的なコアアーキテクチャ、プロセッサ、及びコンピューターアーキテクチャ
プロセッサコアは、種々の目的で種々のプロセッサにおいて種々の方法で実施することができる。例えば、そのようなコアの実施態様は、１）汎用コンピューティングを対象とした汎用インオーダーコア、２）汎用コンピューティングを対象とした高性能汎用アウトオブオーダーコア、３）主としてグラフィックス及び／又は科学（スループット）コンピューティングを対象とした専用コア、を含むことができる。種々のプロセッサの実施態様は、１）汎用コンピューティングを対象とした１つ若しくは複数の汎用インオーダーコア及び／又は汎用コンピューティングを対象とした１つ若しくは複数の汎用アウトオブオーダーコアを備えるＣＰＵ、並びに２）主としてグラフィックス及び／又は科学（スループット）を対象とした１つ又は複数の専用コアを備えるコプロセッサ、を含むことができる。そのような種々のプロセッサは、１）ＣＰＵとは別個チップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内にある別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、統合グラフィックスロジック及び／又は科学（スループット）ロジック等の専用ロジック又は専用コアと呼ばれることがある）、並びに４）説明したＣＰＵ（アプリケーションコア又はアプリケーションプロセッサと呼ばれることがある）、上述したコプロセッサ、及び追加の機能と同じダイ上に備えることができるチップ上のシステム、を備えることができる種々のコンピューターシステムアーキテクチャをもたらす。例示的なコアアーキテクチャを次に説明し、その後に例示的なプロセッサ及びコンピューターアーキテクチャを説明する。
【００９４】
例示的なコアアーキテクチャ
インオーダーコア及びアウトオブオーダーコアのブロック図
図１３Ａは、本発明の実施形態による例示的なインオーダーパイプライン及び例示的なレジスタリネームアウトオブオーダー発行／実行パイプラインの双方を示すブロック図である。図１３Ｂは、本発明の実施形態によるプロセッサに含まれる、インオーダーアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネームアウトオブオーダー発行／実行アーキテクチャコアの双方を示すブロック図である。図１３Ａ及び図１３Ｂにおける実線のボックスは、インオーダーパイプライン及びインオーダーコアを示している一方、破線のボックスのオプションの追加は、レジスタリネームアウトオブオーダー発行／実行パイプライン及びコアを示している。インオーダーの態様はアウトオブオーダーの態様のサブセットであることから、アウトオブオーダーの態様を説明することにする。
【００９５】
図１３Ａにおいて、プロセッサパイプライン１３００は、フェッチステージ１３０２、長さデコードステージ１３０４、デコードステージ１３０６、アロケーションステージ１３０８、リネームステージ１３１０、スケジューリング（ディスパッチ又は発行としても知られている）ステージ１３１１、レジスタ読み出し／メモリ読み出しステージ１３１３、実行ステージ１３１５、ライトバック／メモリ書き込みステージ１３１７、例外ハンドリングステージ１３２２、及びコミットステージ１３２４を備える。
【００９６】
図１３Ｂは、実行エンジンユニット１３５０に結合されたフロントエンドユニット１３３０を備えるプロセッサコア１３９０を示し、双方は、メモリユニット１３７０に結合されている。コア１３９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、又はハイブリッドコアタイプ若しくは代替のコアタイプとすることができる。更に別のオプションとして、コア１３９０は、例えば、ネットワークコア又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ＧＰＧＰＵ）コア、グラフィックスコア等のような専用コアとすることができる。
【００９７】
フロントエンドユニット１３３０は、命令キャッシュユニット１３３４に結合された分岐予測ユニット１３３２を備え、この命令キャッシュユニットは、命令変換索引バッファー（ＴＬＢ）１３３６に結合され、この命令変換索引バッファーは、命令フェッチユニット１３３８に結合され、この命令フェッチユニットは、デコードユニット１３４０に結合されている。デコードユニット１３４０（又はデコーダー）は、命令をデコードし、オリジナルの命令からデコードされるか、又はオリジナルの命令を別の方法で反映するか、又はオリジナルの命令から導出される１つ又は複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、又は他の制御信号を出力として生成することができる。デコードユニット１３４０は、様々な異なるメカニズムを用いて実施することができる。好適なメカニズムの例には、ルックアップテーブル、ハードウェア実施態様、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコード読み出し専用メモリ（ＲＯＭ）等が含まれるが、これらに限定されるものではない。１つの実施形態では、コア１３９０は、（例えば、デコードユニット１３４０内又は別の状況ではフロントエンドユニット１３３０内において）或る特定のマクロ命令用のマイクロコードを記憶するマイクロコードＲＯＭ又は他の媒体を備える。デコードユニット１３４０は、実行エンジンユニット１３５０内のリネーム／アロケーターユニット１３５２に結合されている。
【００９８】
実行エンジンユニット１３５０は、リタイアメントユニット１３５４と一組の１つ又は複数のスケジューラユニット１３５６とに結合されたリネーム／アロケーターユニット１３５２を備える。スケジューラユニット１３５６は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット１３５６は、物理レジスタファイルユニット１３５８に結合されている。物理レジスタファイルユニット１３５８のそれぞれは、１つ又は複数の物理レジスタファイルを表し、これらの物理レジスタファイルの異なるものは、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインター）等の１つ又は複数の異なるデータタイプを記憶する。１つの実施形態では、物理レジスタファイルユニット１３５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラーレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供することができる。物理レジスタファイルユニット１３５８は、（例えば、リオーダーバッファー及びリタイアメントレジスタファイルを用いる；フューチャーファイル、履歴バッファー、及びリタイアメントレジスタファイルを用いる；レジスタマップ及びレジスタのプールを用いる等して）レジスタリネーム及びアウトオブオーダー実行を実施することができる様々な方法を示すリタイアメントユニット１３５４によって重ね合わされる。リタイアメントユニット１３５４及び物理レジスタファイルユニット１３５８は、実行クラスター１３６０に結合されている。実行クラスター１３６０は、一組の１つ又は複数の実行ユニット１３６２及び一組の１つ又は複数のメモリアクセスユニット１３６４を備える。実行ユニット１３６２は、様々なタイプのデータ（例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して様々な演算（例えば、シフト、加算、減算、乗算）を実行することができる。幾つかの実施形態は、特定の機能又は特定の数組の機能に専用の複数の実行ユニットを備えることができるが、他の実施形態は、全ての機能を全て実行する１つの実行ユニットのみ又は複数の実行ユニットを備えることができる。スケジューラユニット１３５６、物理レジスタファイルユニット１３５８、及び実行クラスター１３６０は、場合によっては複数のものとして示される。なぜならば、或る特定の実施形態は、或る特定のタイプのデータ／演算用の別々のパイプライン（例えば、それぞれがそれ自体のスケジューラユニット、物理レジスタファイルユニット、及び／又は実行クラスターを有するスカラー整数パイプライン、スカラー浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又はメモリアクセスパイプライン。別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスターのみがメモリアクセスユニット１３６４を有する或る特定の実施形態が実施される）を作成するからである。別々のパイプラインが用いられる場合、これらのパイプラインのうちの１つ又は複数はアウトオブオーダー発行／実行とすることができ、残りはインオーダーとすることができることも理解されるべきである。
【００９９】
一組のメモリアクセスユニット１３６４は、メモリユニット１３７０に結合され、このメモリユニットは、レベル２（Ｌ２）キャッシュユニット１３７６に結合されたデータキャッシュユニット１３７４に結合されているデータＴＬＢユニット１３７２を備える。１つの例示的な実施形態では、メモリアクセスユニット１３６４は、ロードユニット、アドレス記憶ユニット、及びデータ記憶ユニットを備えることができ、これらのそれぞれは、メモリユニット１３７０内のデータＴＬＢユニット１３７２に結合されている。命令キャッシュユニット１３３４は、メモリユニット１３７０内のレベル２（Ｌ２）キャッシュユニット１３７６に更に結合されている。Ｌ２キャッシュユニット１３７６は、１つ又は複数の他のレベルのキャッシュ及び最終的にはメインメモリに結合されている。
【０１００】
例として、例示的なレジスタリネームアウトオブオーダー発行／実行コアアーキテクチャは、次のようにパイプライン１３００を実施することができる。すなわち、１）命令フェッチ１３３８が、フェッチステージ１３０２及び長さデコードステージ１３０４を実行する；２）デコードユニット１３４０が、デコードステージ１３０６を実行する；３）リネーム／アロケーターユニット１３５２が、アロケーションステージ１３０８及びリネームステージ１３１０を実行する；４）スケジューラユニット１３５６が、スケジュールステージ１３１１を実行する；５）物理レジスタファイルユニット１３５８及びメモリユニット１３７０が、レジスタ読み出し／メモリ読み出しステージ１３１３を実行する；実行クラスター１３６０が、実行ステージ１３１５を実行する；６）メモリユニット１３７０及び物理レジスタファイルユニット１３５８が、ライトバック／メモリ書き込みステージ１３１７を実行する；７）様々なユニットが、例外ハンドリングステージ１３２２に関与することができる；並びに８）リタイアメントユニット１３５４及び物理レジスタファイルユニット１３５８が、コミットステージ１３２４を実行する。
【０１０１】
コア１３９０は、本明細書において説明する命令を含む１つ又は複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンとともに追加された幾つかの拡張を有する）；カリフォルニア州サニーベールのMIPS Technologies社のＭＩＰＳ命令セット；カリフォルニア州サニーベールのARM Holdings社のＡＲＭ命令セット（ＮＥＯＮ等のオプションの追加の拡張を有する）をサポートすることができる。１つの実施形態では、コア１３９０は、パックドデータ命令セットエクステンション（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを備え、それによって、多くのマルチメディアアプリケーションによって用いられる演算をパックドデータを用いて実行することが可能になる。
【０１０２】
コアはマルチスレッド化（並列の２つ以上の組の演算又はスレッドを実行する）をサポートすることができ、タイムスライスマルチスレッド化、同時マルチスレッド化（単一の物理コアが、当該物理コアが同時にマルチスレッド化しているスレッドのそれぞれについて論理コアを提供する）、又はそれらの組合せ（例えば、Ｉｎｔｅｌ（登録商標）のＨｙｐｅｒｔｈｒｅａｄｉｎｇ  ｔｅｃｈｎｏｌｏｇｙ等のタイムスライスフェッチ及びデコード、並びにその後の同時のマルチスレッド化）を含む様々な方法でそれを行うことができることが理解されるべきである。
【０１０３】
レジスタリネームは、アウトオブオーダー実行との関連で説明されているが、レジスタリネームは、インオーダーアーキテクチャにおいても用いることができることが理解されるべきである。プロセッサの図示した実施形態は、別々の命令キャッシュユニット１３３４及びデータキャッシュユニット１３７４並びに共有Ｌ２キャッシュユニット１３７６を備えるが、代替の実施形態は、例えば、レベル１（Ｌ１）内部キャッシュ、又は複数のレベルの内部キャッシュ等の命令及びデータの双方用の単一の内部キャッシュを有することができる。幾つかの実施形態では、システムは、内部キャッシュと、コア及び／又はプロセッサの外部にある外部キャッシュとの組合せを備えることができる。代替的に、キャッシュの全てを、コア及び／又はプロセッサの外部にすることができる。
【０１０４】
具体的な例示的インオーダーコアアーキテクチャ
図１４Ａ及び図１４Ｂは、より具体的な例示的インオーダーコアアーキテクチャのブロック図を示している。このコアは、チップ内の幾つかの論理ブロック（同じタイプ及び／又は異なるタイプの他のコアを含む）のうちの１つである。これらの論理ブロックは、アプリケーションに応じて、或る固定機能ロジック、メモリＩ／Ｏインターフェース、及び他の必要なＩ／Ｏロジックと、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を通じて通信する。
【０１０５】
図１４Ａは、本発明の実施形態による、オンダイ相互接続ネットワーク１４０２への接続と、レベル２（Ｌ２）キャッシュ１４０４のローカルサブセットとを伴った単一のプロセッサコアのブロック図である。１つの実施形態では、命令デコーダー１４００は、パックドデータ命令セットエクステンションを有するｘ８６命令セットをサポートする。Ｌ１キャッシュ１４０６は、スカラーユニット及びベクトルユニット内へのキャッシュメモリへの低レイテンシーアクセスを可能にする。１つの実施形態（設計を単純化する）では、スカラーユニット１４０８及びベクトルユニット１４１０は、別々のレジスタセット（それぞれ、スカラーレジスタ１４１２及びベクトルレジスタ１４１４）を用い、それらの間で転送されるデータは、メモリに書き込まれ、次いで、レベル１（Ｌ１）キャッシュ１４０６からリードバックされるが、本発明の代替の実施形態は、異なる手法を用いる（例えば、単一のレジスタセットを用いるか、又はライトバック及びリードバックされることなく２つのレジスタファイル間でデータを転送することを可能にする通信パスを備える）ことができる。
【０１０６】
Ｌ２キャッシュ１４０４のローカルサブセットは、プロセッサコアごとに１つの別々のローカルサブセットに分割されたグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ１４０４のそれ自身のローカルサブセットへの直接アクセスパスを有する。プロセッサコアによって読み出されたデータは、当該プロセッサコアのＬ２キャッシュサブセット１４０４に記憶され、他のプロセッサコアがそれら自身のローカルＬ２キャッシュサブセットにアクセスすることと並列に高速にアクセスすることができる。プロセッサコアによって書き込まれたデータは、それ自身のＬ２キャッシュサブセット１４０４に記憶され、必要な場合に他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシーを保証する。リングネットワークは、プロセッサコア、Ｌ２キャッシュ、及び他の論理ブロック等のエージェントがチップ内で互いに通信することを可能にするために双方向である。各リングデータパスは、方向あたり１０１１ビット幅である。
【０１０７】
図１４Ｂは、本発明の実施形態による、図１４Ａにおけるプロセッサコアの一部の拡大図である。図１４Ｂは、Ｌ１キャッシュ１４０４のＬ１データキャッシュ１４０６Ａ部分、並びにベクトルユニット１４１０及びベクトルレジスタ１４１３に関するより詳細な内容を含む。具体的には、ベクトルユニット１４１０は、整数命令、単精度浮動小数点命令、倍精度浮動小数点命令のうちの１つ又は複数を実行する１５幅ベクトル処理ユニット（ＶＰＵ）（１５幅ＡＬＵ１４２８を参照）である。ＶＰＵは、スウィズルユニット１４１９を用いたレジスタ入力のスウィズルと、数値変換ユニット１４２２Ａ及び１４２２Ｂを用いた数値変換と、メモリ入力に関する複製ユニット１４２４を用いた複製とをサポートする。書き込みマスクレジスタ１４２６は、結果のベクトル書き込みを断定することを可能にする。
【０１０８】
統合メモリコントローラー及び統合グラフィックスを有するプロセッサ
図１５は、本発明の実施形態による、２つ以上のコアを有することができ、統合メモリコントローラーを有することができ、統合グラフィックスを有することができるプロセッサ１５００のブロック図である。図１５における実線のボックスは、単一のコア１５０２Ａと、システムエージェント１５１０と、一組の１つ又は複数のバスコントローラーユニット１５１５とを有するプロセッサ１５００を示している一方、破線のボックスのオプションの追加は、複数のコア１５０２Ａ〜１５０２Ｎと、システムエージェントユニット１５１０内の一組の１つ又は複数の統合メモリコントローラーユニット１５１３と、専用ロジック１５０８とを有する代替のプロセッサ１５００を示している。
【０１０９】
したがって、プロセッサ１５００の種々の実施態様は、１）統合グラフィックス及び／又は科学（スループット）ロジック（１つ又は複数のコアを備えることができる）である専用ロジック１５０８と、１つ又は複数の汎用コア（例えば、汎用インオーダーコア、汎用アウトオブオーダーコア、これらの２つの組合せ）であるコア１５０２Ａ〜１５０２Ｎとを有するＣＰＵと、２）主としてグラフィックス及び／又は科学（スループット）向けの多数の専用コアであるコア１５０２Ａ〜１５０２Ｎを有するコプロセッサと、３）多数の汎用インオーダーコアであるコア１５０２Ａ〜１５０２Ｎを有するコプロセッサとを備えることができる。したがって、プロセッサ１５００は、汎用プロセッサ、例えば、ネットワークプロセッサ若しくは通信プロセッサ等のコプロセッサ又は専用プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループットメニーインテグレーテッドコア（ＭＩＣ）コプロセッサ（３０個以上のコアを備える）、組み込みプロセッサ等とすることができる。このプロセッサは、１つ又は複数のチップ上に実装することができる。プロセッサ１５００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳ等の複数のプロセス技術のうちの任意のものを用いた１つ若しくは複数の基板の一部とすることができ、及び／又は１つ若しくは複数の基板上に実装することができる。
【０１１０】
メモリ階層は、コア内の１つ又は複数のレベルのキャッシュと、一組の１つ又は複数の共有キャッシュユニット１５０６と、一組の統合メモリコントローラーユニット１５１３に結合された外部メモリ（図示せず）とを含む。一組の共有キャッシュユニット１５０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、若しくは他のレベルのキャッシュ等の１つ又は複数の中間レベルキャッシュ、最終レベルキャッシュ（ＬＬＣ）、及び／又それらの組合せを含むことができる。１つの実施形態では、リングベースの相互接続ユニット１５１１が、統合グラフィックスロジック１５０８、一組の共有キャッシュユニット１５０６、及びシステムエージェントユニット１５１０／統合メモリコントローラーユニット１５１３を相互接続するが、代替の実施形態は、そのようなユニットを相互接続するための任意の数のよく知られた技法を用いることができる。１つの実施形態では、１つ又は複数のキャッシュユニット１５０６とコア１５０２Ａ〜１５０２Ｎとの間にコヒーレンシーが維持される。
【０１１１】
幾つかの実施形態では、コア１５０２Ａ〜１５０２Ｎのうちの１つ又は複数は、マルチスレッド化することができる。システムエージェント１５１０は、コア１５０２Ａ〜１５０２Ｎを連係及び動作させる構成要素を備える。システムエージェントユニット１５１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを備えることができる。ＰＣＵは、コア１５０２Ａ〜１５０２Ｎ及び統合グラフィックスロジック１５０８の電力状態を調整するのに必要なロジック及び構成要素とすることができるか又はそれらを備えることができる。ディスプレイユニットは、１つ又は複数の外部に接続されたディスプレイを駆動するためのものである。
【０１１２】
コア１５０２Ａ〜１５０２Ｎは、アーキテクチャ命令セットの観点で同種のものとすることもできるし、異種のものとすることもできる。すなわち、コア１５０２Ａ〜１５０２Ｎのうちの２つ以上は、同じ命令セットを実行可能とすることができる一方、他のものは、その命令セットのサブセットのみ又は異なる命令セットを実行可能とすることができる。
【０１１３】
例示的なコンピューターアーキテクチャ
図１６〜図１９は、例示的なコンピューターアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバー、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラー、携帯電話、ポータブルメディアプレイヤー、ハンドヘルドデバイス、及び他の様々な電子デバイスについて当該技術分野において知られている他のシステム設計及び構成も適している。概して、本明細書において開示されるようなプロセッサ及び／又は他の実行ロジックを組み込むことができる非常に多くの様々なシステム又は電子デバイスが一般に適している。
【０１１４】
次に図１６を参照すると、本発明の１つの実施形態によるシステム１６００のブロック図が示されている。システム１６００は、コントローラーハブ１６２０に結合された１つ又は複数のプロセッサ１６１０、１６１５を備えることができる。１つの実施形態では、コントローラーハブ１６２０は、グラフィックスメモリコントローラーハブ（ＧＭＣＨ）１６９０及び入力／出力ハブ（ＩＯＨ）１６５０（別々のチップ上に存在することができる）を含む。ＧＭＣＨ１６９０は、メモリと、メモリ１６４０及びコプロセッサ１６４５が結合されたグラフィックスコントローラーとを備える。ＩＯＨ１６５０は、入力／出力（Ｉ／Ｏ）デバイス１６６０をＧＭＣＨ１６９０に結合する。代替的に、メモリ及びグラフィックスコントローラーの一方又は双方は、（本明細書において説明するように）プロセッサ内に統合され、メモリ１６４０及びコプロセッサ１６４５は、プロセッサ１６１０と、ＩＯＨ１６５０を有する単一のチップ内のコントローラーハブ１６２０とに直接結合されている。
【０１１５】
追加のプロセッサ１６１５のオプションの特性が、図１６に破線で示されている。各プロセッサ１６１０、１６１５は、本明細書において説明する処理コアのうちの１つ又は複数を備えることができ、プロセッサ１５００の或るバージョンとすることができる。
【０１１６】
メモリ１６４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、又はこれらの２つの組合せとすることができる。少なくとも１つの実施形態について、コントローラーハブ１６２０は、フロントサイドバス（ＦＳＢ）等のマルチドロップバス、ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＱＰＩ）等のポイントツーポイントインターフェース、又は同様の接続１６９５を介してプロセッサ１６１０、１６１５と通信する。
【０１１７】
１つの実施形態では、コプロセッサ１６４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような専用プロセッサである。１つの実施形態では、コントローラーハブ１６２０は、統合グラフィックスアクセラレーターを備えることができる。
【０１１８】
アーキテクチャの特性、マイクロアーキテクチャの特性、熱特性、電力消費特性等を含む多様なメリットメトリック（metrics of merit）の観点から、物理リソース１６１０、１６１５間には様々な相違が存在する可能性がある。
【０１１９】
１つの実施形態では、プロセッサ１６１０は、一般のタイプのデータ処理演算を制御する命令を実行する。命令内には、コプロセッサ命令を組み込むことができる。プロセッサ１６１０は、これらのコプロセッサ命令を、アタッチされたコプロセッサ１６４５によって実行されるべきタイプであるとして認識する。したがって、プロセッサ１６１０は、これらのコプロセッサ命令（又はコプロセッサ命令を表す制御信号）を、コプロセッサ１６４５に向けてコプロセッサバス又は他の相互接続上に発行する。コプロセッサ１６４５は、受信したコプロセッサ命令を受理して実行する。
【０１２０】
次に図１７を参照すると、本発明の一実施形態による第１のより具体的な例示的システム１７００のブロック図が示されている。図１７に示すように、マルチプロセッサシステム１７００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１７５０を介して結合された第１のプロセッサ１７７０及び第２のプロセッサ１７８０を備える。プロセッサ１７７０及び１７８０のそれぞれは、プロセッサ１５００の或るバージョンとすることができる。本発明の１つの実施形態では、プロセッサ１７７０及び１７８０は、それぞれプロセッサ１６１０及び１６１５である一方、コプロセッサ１７３８は、コプロセッサ１６４５である。別の実施形態では、プロセッサ１７７０及び１７８０は、それぞれプロセッサ１６１０及びコプロセッサ１６４５である。
【０１２１】
プロセッサ１７７０及び１７８０は、それぞれ統合メモリコントローラー（ＩＭＣ）ユニット１７７２及び１７８２を備えるものとして示されている。プロセッサ１７７０は、そのバスコントローラーユニットの一部としてポイントツーポイント（Ｐ−Ｐ）インターフェース１７７６及び１７７８も備える。同様に、第２のプロセッサ１７８０も、Ｐ−Ｐインターフェース１７８６及び１７８８を備える。プロセッサ１７７０、１７８０は、ポイントツーポイント（Ｐ−Ｐ）インターフェース回路１７７８、１７８８を用いてＰ−Ｐインターフェース１７５０を介して情報を交換することができる。図１７に示すように、ＩＭＣ１７７２及び１７８２は、プロセッサをそれぞれのメモリ、すなわちメモリ１７３２及びメモリ１７３４に結合している。これらのメモリは、それぞれのプロセッサにローカルにアタッチされたメインメモリの一部分とすることができる。
【０１２２】
プロセッサ１７７０、１７８０はそれぞれ、ポイントツーポイントインターフェース回路１７７６、１７９４、１７８６、１７９８を用いて個々のＰ−Ｐインターフェース１７５２、１７５４を介してチップセット１７９０と情報を交換することができる。チップセット１７９０は、オプションとして、高性能インターフェース１７３９を介してコプロセッサ１７３８と情報を交換することができる。１つの実施形態では、コプロセッサ１７３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような専用プロセッサである。
【０１２３】
共有キャッシュ（図示せず）を、いずれかのプロセッサ内に備えることもできるし、双方のプロセッサの外部に備えて、さらに、Ｐ−Ｐ相互接続を介してプロセッサと接続することもでき、その結果、プロセッサが低電力モードになった場合に、いずれかのプロセッサ又は双方のプロセッサのローカルキャッシュ情報を共有キャッシュに記憶することができる。
【０１２４】
チップセット１７９０は、インターフェース１７９６を介して第１のバス１７１６に結合することができる。１つの実施形態では、第１のバス１７１６は、周辺機器相互接続（ＰＣＩ）バス、又はＰＣＩエクスプレスバス若しくは別の第３世代Ｉ／Ｏ相互接続バス等のバスとすることができるが、本発明の範囲は、そのように限定されるものではない。
【０１２５】
図１７に示すように、様々なＩ／Ｏデバイス１７１４を、第１のバス１７１６を第２のバス１７１９に結合するバスブリッジ１７１８とともに第１のバス１７１６に結合することができる。１つの実施形態では、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレーター（例えば、グラフィックスアクセラレーター又はデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、又は他の任意のプロセッサ等の１つ又は複数の追加のプロセッサ１７１５が第１のバス１７１６に結合されている。１つの実施形態では、第２のバス１７１９は、ローピンカウント（ＬＰＣ）バスとすることができる。様々なデバイスを第２のバス１７１９に結合することができる。これらの様々なデバイスには、例えば、キーボード及び／又はマウス１７２２、通信デバイス１７２７、並びに１つの実施形態では命令／コード及びデータ１７３０を含むことができるディスクドライブ若しくは他のマスストレージデバイス等の記憶ユニット１７２８が含まれる。さらに、オーディオＩ／Ｏ１７２４を第２のバス１７１９に結合することができる。他のアーキテクチャが可能であることに留意されたい。例えば、図１７のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスアーキテクチャ又は他のそのようなアーキテクチャを実装することができる。
【０１２６】
次に図１８を参照すると、本発明の一実施形態による第２のより具体的な例示的なシステム１８００のブロック図が示されている。図１７及び図１８における同様の要素は、同様の参照符号を有し、図１７の或る特定の態様（certain aspects）は、図１８の他の態様を分かりにくくしないように図１８から省略されている。
【０１２７】
図１８は、プロセッサ１７７０、１７８０が、それぞれ、統合されたメモリ及びＩ／Ｏの制御ロジック（「ＣＬ」）１７７２及び１７８２を備えることができることを示している。したがって、ＣＬ１７７２、１７８２は、統合メモリコントローラーユニットを備え、Ｉ／Ｏ制御ロジックを備える。図１８は、メモリ１７３２、１７３４がＣＬ１７７２、１７８２に結合されていることだけでなく、Ｉ／Ｏデバイス１８１３も制御ロジック１７７２、１７８２に結合されていることを示している。レガシーＩ／Ｏデバイス１８１４がチップセット１７９０に結合されている。
【０１２８】
次に図１９を参照すると、本発明の一実施形態によるＳｏＣ１９００のブロック図が示されている。図１５における同様の要素は、同様の参照符号を有する。また、破線のボックスは、より高度なＳｏＣ上のオプションの特徴である。図１９において、相互接続ユニット１９０２は、一組の１つ又は複数のコア１９２Ａ〜１９２Ｎ及び共有キャッシュユニット１５０６を備えるアプリケーションプロセッサ１９１０と、システムエージェントユニット１５１０と、バスコントローラーユニット１５１５と、統合メモリコントローラーユニット１５１３と、統合グラフィックスロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含むことができる一組の１つ又は複数のコプロセッサ１９１９と、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１９３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット１９３２と、１つ又は複数の外部ディスプレイに結合するためのディスプレイユニット１９４０とに結合されている。１つの実施形態では、コプロセッサ１９１９は、例えば、ネットワークプロセッサ又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、組み込みプロセッサ等のような専用プロセッサを含む。
【０１２９】
本明細書において開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はそのような実施手法の組合せで実施することができる。本発明の実施形態は、少なくとも１つのプロセッサと、記憶システム（揮発性及び不揮発性メモリ及び／又は記憶素子を含む）と、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスとを備えるプログラマブルシステム上で実行されるコンピュータープログラム又はプログラムコードとして実施することができる。
【０１３０】
図１７に図示したコード１７３０等のプログラムコードは、入力された命令に適用されて、本明細書において説明した機能を実行し、出力情報を生成することができる。この出力情報は、既知の方法で１つ又は複数の出力デバイスに適用することができる。この適用のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラー、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
【０１３１】
プログラムコードは、処理システムと通信する高級手続型プログラム言語又はオブジェクト指向型プログラム言語で実施することができる。プログラムコードは、所望の場合には、アセンブリ言語又は機械語で実施することもできる。実際に、本明細書において説明したメカニズムは、どの特定のプログラム言語にも範囲が限定されるものではない。いずれにしても、この言語は、コンパイル型言語又は解釈型言語とすることができる。
【０１３２】
少なくとも１つの実施形態の１つ又は複数の態様は、機械によって読み出されると、当該機械に、本明細書において説明した技法を実行するロジックを作製させるプロセッサ内の様々なロジックを表す機械可読媒体上に記憶された代表的な命令によって実施することができる。「ＩＰコア」として知られているそのような表現は、有形の機械可読媒体上に記憶することができ、様々な顧客又は製造設備に供給して、ロジック又はプロセッサを実際に作製する製造機械にロードすることができる。
【０１３３】
そのような機械可読記憶媒体は、機械又はデバイスによって製造又は形成された物品の非一時的な有形の構成を含むことができるが、これに限定されるものではない。これらの物品は、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、再書込み可能コンパクトディスク（ＣＤ−ＲＷ）、及び光磁気ディスクを含む他の任意のタイプのディスク、読み出し専用メモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気カード若しくは光カード、又は電子命令を記憶するのに好適な他の任意のタイプの媒体等の半導体デバイス等の記憶媒体を含む。
【０１３４】
したがって、本発明の実施形態は、命令を含む非一時的な有形の機械可読媒体、又は本明細書において説明した構造、回路、装置、プロセッサ及び／又はシステムの特徴を定義するハードウェア記述言語（ＨＤＬ）等の設計データを含む非一時的な有形の機械可読媒体も含む。そのような実施形態は、プログラム製品と呼ばれる場合もある。
【０１３５】
エミュレーション（バイナリ変換、コードモーフィング等を含む）
場合によっては、命令変換器を用いて、命令をソース命令セットからターゲット命令セットに変換することができる。例えば、命令変換器は、命令を、コアによって処理される１つ又は複数の他の命令に変換（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いる）、モーフィング、エミュレート、又は別の方法で変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、又はそれらの組合せで実施することができる。命令変換器は、オンプロセッサ、オフプロセッサ、又は一部分がオンプロセッサ及び一部分がオフプロセッサとすることができる。
【０１３６】
図２０は、本発明の実施形態による、ソフトウェア命令変換器を用いて、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換することを対比したブロック図である。図示した実施形態では、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、又はそれらの様々な組合せで実施することができる。図２０は、高級言語２００２によるプログラムを、ｘ８６コンパイラー２００４を用いてコンパイルしてｘ８６バイナリコード２００６を生成することができることを示している。このｘ８６バイナリコードは、少なくとも１つのｘ８６命令セットコア２０１５を有するプロセッサが本来的に実行することができるものである。少なくとも１つのｘ８６命令セットコア２０１５を有するプロセッサは、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ結果を達成するために、（１）Ｉｎｔｅｌ  ｘ８６命令セットコアの命令セットの実質的部分、又は（２）少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサ上で実行されることを目的としたアプリケーション又は他のソフトウェアのオブジェクトコードバージョン、を矛盾なく実行又は別の方法で処理することによって、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ機能を実行することができる任意のプロセッサを表している。ｘ８６コンパイラー２００４は、追加のリンク処理の有無を問わず、少なくとも１つのｘ８６命令セットコア２０１５を有するプロセッサ上で実行することができるｘ８６バイナリコード２００６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラーを表している。同様に、図２０は、高級言語２００２によるプログラムを、代替の命令セットコンパイラー２００８を用いてコンパイルして代替の命令セットバイナリコード２０１０を生成することができることを示している。この代替の命令セットバイナリコードは、少なくとも１つのｘ８６命令セットコア２０１３を有しないプロセッサ（例えば、カリフォルニア州サニーベールのMIPS Technologies社のＭＩＰＳ命令セットを実行するコアを有するプロセッサ及び／又はカリフォルニア州サニーベールのARM Holdings社のＡＲＭ命令セットを実行するコアを有するプロセッサ）が本来的に実行することができるものである。命令変換器２０１１は、ｘ８６バイナリコード２００６を、ｘ８６命令セットコア２０１３を有しないプロセッサが本来的に実行することができるコードに変換するのに用いられる。この変換されたコードは、代替の命令セットバイナリコード２０１０と同じである可能性は低い。なぜならば、これを行うことができる命令変換器は、作製が困難であるからである。しかしながら、変換されたコードは、一般的な演算を達成し、代替の命令セットからの命令で構成される。したがって、命令変換器２０１１は、エミュレーション、シミュレーション、又は他の任意のプロセスを通じて、ｘ８６命令セットプロセッサもコアも有しないプロセッサ又は他の電子デバイスがｘ８６バイナリコード２００６を実行することを可能にするソフトウェア、ファームウェア、ハー��ウェア、又はそれらの組合せを表している。
【０１３７】
幾つかの実施形態では、８ビット、１６ビット、３２ビット、及び６４ビット、又はそれらの或る組合せの演算マスク幅をオプションとしてサポートすることができる。幾つかの実施形態では、命令セットは、サポートされる異なる演算マスク幅ごとに異なる演算マスクコンソリデーション命令を含むことができる。演算マスクコンソリデーション命令のオペコードは、演算マスクの幅を暗黙的に示すことができる。代替的に、演算マスクコンソリデーション命令は、複数のサポートされる異なる演算マスク幅に用いることができる。例えば、演算マスクコンソリデーション命令は、用いられる演算マスク幅を示す１つ若しくは複数のビット又はフィールドを有することができる。
【０１３８】
幾つかの実施形態では、演算マスクコンソリデーション命令のオペコードは、特定のデータ再配置演算が（例えば、並べ替え制御（permute control）データを通じて）明示的に指定される必要なく、かつ、特定の単一の又は限られた一組のデータ再配置演算が必要とされることなく、演算マスクコンソリデーション演算が実行されることを示すことができる。この命令のオペコードに応答して、ソース演算マスク内のマスクされた要素及びマスクされていない要素のどの特定の配置にもかかわらず又は関係なく、コンソリデートされた演算マスクを記憶することができる。幾つかの実施形態では、命令は、マスクされた要素及びマスクされていない要素をどのように移動し、再配置し、又は並べ替えてコンソリデートされた演算マスクを生成するのかを明示的に指定しない。幾つかの実施形態では、演算マスクコンソリデーション命令は、要素をどのように移動又は再配置して演算マスクを生成するのかを明示的に指定することなく、マスクされた要素及びマスクされていない要素の配置に応じて異なって要素を移動させる。
【０１３９】
図４Ａ、図４Ｂ、図６、及び図７〜図１０のうちの任意のものについて説明した構成要素、特徴、及び詳細は、オプションとして、図１、図３、及び図５のうちの任意のものにおいても用いことができる。その上、装置のうちの任意のものについて本明細書において説明した構成要素、特徴、及び詳細は、オプションとして、実施形態においてそのような装置によって及び／又はそのような装置を用いて実行することができる本明細書において説明した演算及び方法のうちの任意のものにおいても用いることができる。図２Ａ／２Ｂについて説明した演算マスクのオプションの特徴及び詳細は、図１、図３、図４Ａ、図４Ｂ、及び図５のうちの任意のものの演算マスクにも適用することができる。
【０１４０】
例示の実施形態
以下の例は、更なる実施形態に関係している。それらの例における細部は、１つ又は複数の実施形態における任意の箇所に用いることができる。
【０１４１】
例１は、命令処理装置である。この命令処理装置は、複数の演算マスクレジスタを備える。この命令処理装置は、演算マスクコンソリデーション命令を受信するデコードユニットも備える。この演算マスクコンソリデーション命令は、上記複数の演算マスクレジスタのソース演算マスクレジスタと、デスティネーション記憶ロケーションとを示す。ソース演算マスクレジスタは、複数のマスクされていない要素内に配置される複数のマスクされた要素を含むソース演算マスクを含む。この命令処理装置は、デコードユニットと結合された実行ユニットも備える。この実行ユニットは、演算マスクコンソリデーション命令に応答して、コンソリデートされた演算マスクをデスティネーション記憶ロケーションに記憶する。コンソリデートされた演算マスクは、ともにコンソリデートされたソース演算マスクからのマスクされていない要素を含む。
【０１４２】
例２は、例１の主題を含み、この主題においてオプションとして、上記実行ユニットが、演算マスクコンソリデーション命令に応答して、マスクされた要素が、コンソリデートされたマスクされていない要素内に配置されないように、マスクされていない要素をともにコンソリデートする。
【０１４３】
例３は、例１の主題を含み、この主題においてオプションとして、上記実行ユニットが、演算マスクコンソリデーション命令に応答して、ソース演算マスクからのマスクされていない要素を、コンソリデートされた演算マスクの最下位部分においてともにコンソリデートする。
【０１４４】
例４は、例１の主題を含み、この主題においてオプションとして、上記実行ユニットが、演算マスクコンソリデーション命令に応答して、ソース演算マスクからのマスクされていない要素を、コンソリデートされた演算マスクの最上位部分においてともにコンソリデートする。
【０１４５】
例５は、例１の主題を含み、この主題においてオプションとして、上記デコードユニットが演算マスクコンソリデーション命令を受信する。この演算マスクコンソリデーション命令は、ソース演算マスクからのマスクされていない要素がコンソリデートされた演算マスクの最下位部分においてともにコンソリデートされることを示す第１の値を有するように使用可能な１つ又は複数のビットを含む。この演算マスクコンソリデーション命令は、ソース演算マスクからのマスクされていない要素がコンソリデートされた演算マスクの最上位部分においてともにコンソリデートされることを示す第２の値を有する。
【０１４６】
例６は、例１の主題を含み、この主題においてオプションとして、ソース演算マスクレジスタが、マスクされた要素及びマスクされていない要素のそれぞれが異なる単一のビットであるソース演算マスクを有する。
【０１４７】
例７は、例６の主題を含み、この主題においてオプションとして、各マスクされた要素が、バイナリの０の値を有し、各マスクされていない要素が、バイナリの１の値を有する。
【０１４８】
例８は、例１の主題を含み、この主題においてオプションとして、複数の演算マスクレジスタが、一組の８つの演算マスクレジスタを含み、８つの演算マスクレジスタのそれぞれが、少なくとも６４ビットまでを有する演算マスクを記憶し、デコードユニットが、８つの演算マスクレジスタのうちの１つとしてソース演算マスクレジスタを指定する３ビットフィールドを有する演算マスクコンソリデーション命令を受信する。
【０１４９】
例９は、例１の主題を含み、この主題においてデコードユニットが、ソース演算マスクレジスタを明示的に指定するとともにデスティネーション記憶ロケーションとしてデスティネーション演算マスクレジスタを明示的に指定する演算マスクコンソリデーション命令を受信する。
【０１５０】
例１０は、例１〜９のうちのいずれかの主題を含み、この主題においてデコードユニットが、コンソリデートされた演算マスクが、ソース演算マスクにおけるマスクされた要素及びマスクされていない要素の任意の特定の配置を問わず記憶されることを示すオペコードを有する演算マスクコンソリデーション命令を受信する。
【０１５１】
例１１は、例１〜９のうちのいずれかの主題を含み、この主題において演算マスクレジスタが、パックドデータに対して演算をプレディケートするのに用いられる演算マスクを記憶する。
【０１５２】
例１２は、プロセッサ内における方法である。この方法は、演算マスクコンソリデーション命令を受信することを含む。この演算マスクコンソリデーション命令は、ソース演算マスク及びデスティネーション記憶ロケーションを示す。ソース演算マスクは、複数のマスクされていない要素内に配置された複数のマスクされた要素を含む。この方法は、演算マスクコンソリデーション命令に応答して、コンソリデートされた演算マスクをデスティネーション記憶ロケーションに記憶することも含む。コンソリデートされた演算マスクは、ともにコンソリデートされたソース演算マスクからのマスクされていない要素を含む。
【０１５３】
例１３は、例１２の主題を含み、この主題においてソース演算マスクからのマスクされていない要素が、コンソリデートされた演算マスクの最下位部分においてともにコンソリデートされる。
【０１５４】
例１４は、例１２の主題であって、ソース演算マスクからのマスクされていない要素が、コンソリデートされた演算マスクの最上位部分においてともにコンソリデートされる。
【０１５５】
例１５は、例１２の主題を含み、この主題において演算マスクコンソリデーション命令が、ソース演算マスクからのマスクされていない要素が、コンソリデートされた演算マスクの最下位部分においてともにコンソリデートされることを示す第１の値を有する１つ又は複数のビットを含む。１つ又は複数のビットは、ソース演算マスクからのマスクされていない要素が、コンソリデートされた演算マスクの最上位部分においてともにコンソリデートされることを示す第２の値を有する。
【０１５６】
例１６は、例１２の主題を含み、この主題において上記受信することが、マスクされた要素及びマスクされていない要素のそれぞれが異なる単一のビットであるソース演算マスクを示す命令を受信することを含み、各マスクされた要素が、バイナリの０の値を有し、各マスクされていない要素が、バイナリの１の値を有する。
【０１５７】
例１７は、例１２の主題を含み、この主題において上記受信することが、コンソリデートされた演算マスクが、ソース演算マスクにおけるマスクされた要素及びマスクされていない要素の任意の特定の配置を問わず記憶されることを示すオペコードを有する演算マスクコンソリデーション命令を受信することを含む。
【０１５８】
例１８は、例１２の主題を含み、この主題においてマスクされた要素及びマスクされていない要素のそれぞれが、異なるパックドデータ要素に対応し、この対応するパックドデータ要素に対する演算をプレディケートするのに用いられる。
【０１５９】
例１９は、例１２の主題を含み、この主題は、コンパイラーが、コンソリデートされた演算マスクを用いてコードをベクトル化することを更に含む。
【０１６０】
例２０は、命令を処理するシステムである。このシステムは、相互接続部を備える。このシステムは、相互接続部と結合されたプロセッサ及び相互接続部と結合されたダイナミックランダムアクセスメモリ（ＤＲＡＭ）も備える。ＤＲＡＭは、演算マスクコンソリデーション命令を記憶する。この演算マスクコンソリデーション命令は、ソース演算マスク及びデスティネーション記憶ロケーションを示す。このソース演算マスクは、複数のマスクされていない要素内に配置される複数のマスクされた要素を含む。演算マスクコンソリデーション命令は、プロセッサによって実行されると、コンソリデートされた演算マスクをデスティネーション記憶ロケーションに記憶することを含む演算をプロセッサに実行させるように動作可能である。コンソリデートされた演算マスクは、ともにコンソリデートされたソース演算マスクからのマスクされていない要素を含む。
【０１６１】
例２１は、例２０の主題を含み、この主題においてソース演算マスクがパックドデータに対して演算をプレディケートするのに用いられる。
【０１６２】
例２２は、例２０及び２１のうちのいずれかの主題を含み、この主題において演算マスクコンソリデーション命令が、コンソリデートされた演算マスクがソース演算マスクの任意の値について記憶されることを示すオペコードを有する。
【０１６３】
例２３は、製造物品である。この製造物品は、演算マスクコンソリデーション命令を記憶する非一時的機械可読記憶媒体を備える。この演算マスクコンソリデーション命令は、ソース演算マスク及びデスティネーションを示す。ソース演算マスクは、複数のマスクされていない要素内に配置された複数のマスクされた要素を含む。この演算マスクコンソリデーション命令は、機械によって実行されると、当該演算マスクコンソリデーション命令に応答して、コンソリデートされた演算マスクをデスティネーションに記憶することを含む演算を上記機械に実行させるように動作可能である。上記コンソリデートされた演算マスクは、ともにコンソリデートされたソース演算マスクからのマスクされていない要素を含み、マスクされた要素はこれらのマスクされていない要素間に配置されていない。
【０１６４】
例２４は、例２３の主題を含み、この主題において受信することが、コンソリデートされた演算マスクがソース演算マスクにおけるマスクされた要素及びマスクされていない要素の多くの異なる配置について記憶されることを示すオペコードを有する演算マスクコンソリデーション命令を受信することを含む。
【０１６５】
例２５は、例２３及び２４のうちのいずれかの主題を含み、この主題において上記演算マスクコンソリデーション命令が、機械によって実行されると、当該機械に、ソース演算マスクからのマスクされていない要素をコンソリデートされた演算マスクの最下位部分においてともにコンソリデートさせるように動作可能であり、ソース演算マスクがプレディケーションに用いられる。
【０１６６】
例２６は、機械によって実行されると、請求項１２〜１９のいずれか１項に記載の方法を当該機械に実行させる命令を記憶する機械可読記憶媒体を含む。
【０１６７】
例２７は、請求項１２〜１９のいずれか１項に記載の方法を実行する装置を含む。
【０１６８】
例２８は、請求項１２〜１９のいずれか１項に記載の方法を実行する手段を備える装置を含む。
【０１６９】
例２９は、本明細書において実質的に説明したような方法を実行する装置を含む。
【０１７０】
例３０は、本明細書において実質的に説明したような方法を実行する手段を備える装置を含む。
【０１７１】
例３１は、本明細書において実質的に説明したような命令を実行する装置を含む。
【０１７２】
例３２は、本明細書において実質的に説明したような命令の演算を実行する手段を備える装置を含む。
【０１７３】
この説明及び特許請求の範囲において、「結合された」及び／又は「接続された」という用語が、それらの派生語とともに用いられている。これらの用語は互いに同義語として意図されていないことが理解されるべきである。逆に、特定の実施形態では、「接続された」は、２つ以上の要素が互いに直接物理的又は電気的に接触していることを示すのに用いることができる。「結合された」は、２つ以上の要素が直接物理的又は電気的に接触していることを意味することができる。しかしながら、「結合された」は、２つ以上の要素が互いに直接接触していないが、それでも、互いに協働又は相互作用することも意味することができる。例えば、実行ユニットは、１つ又は複数の介在する構成要素を通じて、レジスタ又はデコーダーと結合することができる。図では、矢印が接続及び結合を示すのに用いられる。
【０１７４】
この説明及び特許請求の範囲において、「ロジック」という用語が用いられている場合がある。ロジックは、本明細書において用いられるとき、ハードウェア、ファームウェア、ソフトウェア、又は様々なそれらの組合せ等のモジュールを含むことができる。ロジックの例には、集積回路部、特定用途向け集積回路、アナログ回路、デジタル回路、プログラムされたロジックデバイス、命令を含むメモリデバイス等が含まれる。幾つかの実施形態では、ハードウェアロジックは、他の回路部構成要素とともにトランジスタ及び／又はゲートを潜在的に含むことができる。
【０１７５】
上記説明では、実施形態の十分な理解を提供するために、具体的な詳細が述べられてきた。しかしながら、他の実施形態は、これらの具体的な詳細のうちの幾つかがなくても実施することができる。本発明の範囲は、上記に提供された具体例によって決定されるものではなく、添付の特許請求の範囲によってのみ決定される。それ以外の場合には、よく知られた回路、構造、デバイス、及び動作は、この説明の理解を分かりにくくしないように、ブロック図の形式又は細部を伴わずに示されている。複数の構成要素が図示及び説明されている場合、場合によっては、これらの複数の構成要素は、１つの構成要素内に組み込むことができる。単一の構成要素が図示及び説明されている場合、場合によっては、この単一の構成要素を２つ以上の構成要素に分割することができる。
【０１７６】
様々な演算及び方法が説明されてきた。これらの方法のうちの幾つかは、比較的基本的な形式で流れ図に説明されているが、演算は、オプションとして、これらの方法に追加することができ、及び／又はこれらの方法から除去することができる。加えて、流れ図は、例示の実施形態による演算の特定の順序を示しているが、その特定の順序は例示である。代替の実施形態は、オプションとして演算を異なる順序で実行し、幾つかの演算を組み合わせ、幾つかの演算を重ねる等することができる。
【０１７７】
幾つかの演算は、ハードウェア構成要素によって実行することもできるし、命令を用いてプログラムされた機械、回路、又はハードウェア構成要素（例えば、プロセッサ、プロセッサの一部分、回路等）が演算を実行することを引き起こし及び／又はもたらすのに用いることができる機械実行可能な命令又は回路実行可能な命令で具現化することもできる。これらの演算は、オプションとして、ハードウェア及びソフトウェアの組合せによって実行することもできる。プロセッサ、機械、回路、又はハードウェアは、具体的な若しくは特定の回路部を含むことができ、又は他のロジック（例えば、ファームウェア及び／又はソフトウェアと潜在的に組み合わされるハードウェア）は、命令に応答して命令を実行及び／又は処理し、結果を記憶するように動作可能である。
【０１７８】
幾つかの実施形態は、機械可読媒体を備える製造物品（例えば、コンピュータープログラム製品）を含む。この媒体は、機械によって可読な形式で情報を提供する、例えば記憶するメカニズムを含むことができる。機械可読媒体は、機械によって実行された場合及び／又は実行されたとき、本明細書において開示された演算、方法、又は技法のうちの１つを当該機械に実行させ及び／又は機械がこれを実行することをもたらすように動作可能な命令又は命令シーケンスを提供することができる、すなわち、当該媒体に記憶しておくことができる。機械可読媒体は、本明細書において開示される命令の実施形態のうちの１つ又は複数を提供する、例えば、記憶することができる。
【０１７９】
幾つかの実施形態では、機械可読媒体は、有形の及び／又は非一時的な機械可読記憶媒体を含むことができる。例えば、有形の及び／又は非一時的な機械可読記憶媒体は、フロッピー（登録商標）ディスケット、光記憶媒体、光ディスク、光データ記憶デバイス、ＣＤ−ＲＯＭ、磁気ディスク、光磁気ディスク、読み出し専用メモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、フラッシュメモリ、相変化メモリ、相変化データ記憶材料、不揮発性メモリ、不揮発性データ記憶デバイス、非一時的メモリ、非一時的データ記憶デバイス等を含むことができる。非一時的な機械可読記憶媒体は、一時的な伝播信号からなるものではない。別の実施形態では、機械可読媒体は、一時的機械可読通信媒体、例えば、搬送波、赤外線信号、デジタル信号等の電気的伝播信号、光学的伝播信号、音響的伝播信号、又は他の形式の伝播信号を含むことができる。
【０１８０】
好適な機械の例には、汎用プロセッサ、専用プロセッサ、命令処理装置、デジタル論理回路、集積回路等が含まれるが、これらに限定されるものではない。好適な機械の更に他の例には、そのようなプロセッサ、命令処理装置、デジタル論理回路、又は集積回路を組み込んだコンピューティングデバイス及び他の電子デバイスが含まれる。そのようなコンピューティングデバイス及び電子デバイスの例には、デスクトップコンピューター、ラップトップコンピューター、ノートブックコンピューター、タブレットコンピューター、ネットブック、スマートフォン、携帯電話、サーバー、ネットワークデバイス（例えば、ルーター及びスイッチ）、モバイルインターネットデバイス（ＭＩＤ）、メディアプレイヤー、スマートテレビ、ネットトップ、セットトップボックス、及びビデオゲームコントローラーが含まれるが、これらに限定されるものではない。
【０１８１】
この明細書全体を通じて、例えば、「１つの実施形態」、「一実施形態」、「１つ又は複数の実施形態」、「幾つかの実施形態」というとき、これは、特定の特徴が本発明の実施において含まれ得るが、必ずしも必須ではないことを示す。同様に、この説明において、様々な特徴は、開示を能率化するとともに様々な発明の態様の理解を助ける目的で、単一の実施形態、図、又はその説明においてともにグループ化されることがある。しかしながら、開示のこの方法は、本発明が各請求項において明確に列挙されたものよりも多くの特徴を必要とするという意図を反映するものと解釈されるべきではない。逆に、添付の特許請求の範囲が反映しているように、本発明の態様は、単一の開示された実施形態の全ての特徴よりも少ないものに存する。したがって、この詳細な説明に続く特許請求の範囲は、この詳細な説明に明確に組み込まれ、各請求項は、本発明の個々の実施形態として自立している。
【図１】
2014182802.tif 000003
【図２Ａ】
2014182802.tif 000004
【図２Ｂ】
2014182802.tif 000005
【図３】
2014182802.tif 000006
【図４Ａ】
2014182802.tif 000007
【図４Ｂ】
2014182802.tif 000008
【図５】
2014182802.tif 000009
【図６】
2014182802.tif 000010
【図７】
2014182802.tif 000011
【図８】
2014182802.tif 000012
【図９】
2014182802.tif 000013
【図１０】
2014182802.tif 000014
【図１１Ａ】
2014182802.tif 000015
【図１１Ｂ】
2014182802.tif 000016
【図１１Ｃ】
2014182802.tif 000017
【図１２】
2014182802.tif 000018
【図１３Ａ】
2014182802.tif 000019
【図１３Ｂ】
2014182802.tif 000020
【図１４Ａ】
2014182802.tif 000021
【図１４Ｂ】
2014182802.tif 000022
【図１５】
2014182802.tif 000023
【図１６】
2014182802.tif 000024
【図１７】
2014182802.tif 000025
【図１８】
2014182802.tif 000026
【図１９】
2014182802.tif 000027
【図２０】
2014182802.tif 000028
【外国語明細書】
2014182802000001.pdf