(57)【特許請求の範囲】
【請求項１】
プロセッサであって、
復号化された命令を生成するために第１、第２および第３のソースオペランドを有する命令を復号化する復号化ユニットであって、各オペランドが、第１、第２、および第３の座標のうちの１つと関連付けられる、復号化ユニットと、
前記復号化された命令を実行し、前記第１、第２および第３のソースオペランドの各々の１０個又は２０個の下位ビットから、２ビットおきのストライドを伴う第１、第２および第３の前出力値を生成し、前記第１、第２および第３の前出力値のそれぞれを３２ビット又は６４ビットの前出力レジスタに出力し、前記第２の前出力値を１ビットだけ左シフトし、前記第３の前出力値を２ビットだけ左シフトし、前記第１の前出力値、シフトされた前記第２の前出力値およびシフトされた前記第３の前出力値に対してビット単位のＯＲ演算を行うことによって、前記第１、第２および第３のソースオペランドの各々の前記１０個又は２０個の下位ビットをインターリーブすることで、３２ビット又は６４ビットの３次元ｚ曲線インデックスを計算し、３２ビット又は６４ビットのデスティネーションレジスタに出力する実行ユニットと、
を備える、プロセッサ。
【請求項２】
前記命令をフェッチする命令フェッチユニットを更に備え、前記命令が、単一の機械レベル命令である、請求項１に記載のプロセッサ。
【請求項３】
前記３次元ｚ曲線インデックスを、デスティネーションオペランドと関連付けられる前記デスティネーションレジスタにコミットするレジスタファイルユニットを更に備える、請求項１または２に記載のプロセッサ。
【請求項４】
前記レジスタファイルユニットが、
前記第１のソースオペランドを記憶する第１のレジスタと、
前記第２のソースオペランドを記憶する第２のレジスタと、
前記第３のソースオペランドを記憶する第３のレジスタと、
を備える一組のレジスタを更に記憶する、請求項３に記載のプロセッサ。
【請求項５】
前記第１のソースオペランドが、第１の次元座標を示し、
前記第２のソースオペランドが、第２の次元座標を示し、
前記第３のソースオペランドが、第３の次元座標を示す、
請求項４に記載のプロセッサ。
【請求項６】
論理ユニットであって、
３次元ｚ曲線インデックスを計算するための一組の演算のための第１、第２および第３のソース値をそれぞれ記憶する第１、第２および第３のレジスタと、
前記第１、第２および第３のレジスタの各々の１０個又は２０個の下位ビットを入力し、各々の前記１０個又は２０個の下位ビットから、２ビットおきのストライドを伴う第１、第２および第３の前出力値を生成し、前記第１、第２および第３の前出力値のそれぞれを３２ビット又は６４ビットの前出力レジスタに出力し、前記第２の前出力値を１ビットだけ左シフトし、前記第３の前出力値を２ビットだけ左シフトし、前記第１の前出力値、シフトされた前記第２の前出力値およびシフトされた前記第３の前出力値に対してビット単位のＯＲ演算を行うことによって、前記第１、第２および第３のレジスタの各々の前記１０個又は２０個の下位ビットをインターリーブすることで、３２ビット又は６４ビットの前記３次元ｚ曲線インデックスを計算し、３２ビット又は６４ビットのデスティネーションレジスタに出力する実行ユニットと、
を備える、論理ユニット。
【請求項７】
前記第１のソース値が、第１の次元座標を示し、
前記第２のソース値が、第２の次元座標を示し、
前記第３のソース値が、第３の次元座標を示す、
請求項６に記載の論理ユニット。
【請求項８】
３２ビット又は６４ビットの前記３次元ｚ曲線インデックスを記憶する前記３２ビット又は６４ビットのデスティネーションレジスタを更に備える、請求項６または７に記載の論理ユニット。
【請求項９】
前記実行ユニットが単一命令に応じて、１つまたは複数のＡＮＤ、ＸＯＲ、およびシフト演算を介して、前記３次元ｚ曲線インデックスを計算する、請求項６から８のいずれか一項に記載の論理ユニット。
【請求項１０】
前記シフト演算が、左シフト演算である、請求項９に記載の論理ユニット。
【請求項１１】
処理システムであって、
３次元ｚ曲線インデックスを計算するための単一命令をフェッチするための手段であって、前記単一命令が、第１、第２および第３のソースオペランドおよび１つのデスティネーションオペランドを有する、手段と、
前記単一命令を復号化された命令に復号化するための手段と、
ソースオペランド値をフェッチするための手段と、
前記第１、第２および第３のソースオペランドの各々の１０個又は２０個の下位ビットから、２ビットおきのストライドを伴う第１、第２および第３の前出力値を生成し、前記第２の前出力値を１ビットだけ左シフトし、前記第３の前出力値を２ビットだけ左シフトし、前記第１の前出力値、シフトされた前記第２の前出力値およびシフトされた前記第３の前出力値に対してビット単位のＯＲ演算を行うことによって、前記第１、第２および第３のソースオペランドの各々の前記１０個又は２０個の下位ビットをインターリーブすることで、３２ビット又は６４ビットの前記３次元ｚ曲線インデックスを計算し、前記デスティネーションオペランドによって示される３２ビット又は６４ビットのデスティネーションレジスタに出力するために、前記復号化された命令を実行するための手段と、
を備える、システム。
【請求項１２】
前記実行するための手段が更に、１つまたは複数のＡＮＤ、ＸＯＲ、およびシフト演算を使用して前記３次元ｚ曲線インデックスを計算する、請求項１１に記載のシステム。
【請求項１３】
前記実行するための手段が、ＸＯＲ論理ゲート、ＡＮＤ論理ゲート、およびシフタ回路を含む、請求項１２に記載のシステム。
【請求項１４】
３次元ｚ曲線インデックスを計算するための単一命令をフェッチする命令フェッチユニットであって、前記単一命令が、第１、第２および第３ソースオペランドおよび１つのデスティネーションオペランドを有し、各ソースオペランドが、第１、第２、および第３の座標のうちの１つと関連付けられる、命令フェッチユニットと、
前記単一命令を復号化された命令に復号化する復号化ユニットと、
前記復号化された命令のためのソース値を記憶するために多数のレジスタを含むレジスタファイルユニットと、
前記多数のレジスタに記憶された前記第１、第２および第３のソースオペランドの各々の１０個又は２０個の下位ビットを取り出し、各々の前記１０個又は２０個の下位ビットから、２ビットおきのストライドを伴う第１、第２および第３の前出力値を生成し、前記第２の前出力値を１ビットだけ左シフトし、前記第３の前出力値を２ビットだけ左シフトし、前記第１の前出力値、シフトされた前記第２の前出力値およびシフトされた前記第３の前出力値に対してビット単位のＯＲ演算を行うことによって、前記第１、第２および第３のソースオペランドの各々の前記１０個又は２０個の下位ビットをインターリーブすることで、３２ビット又は６４ビットの前記３次元ｚ曲線インデックスを計算し、前記デスティネーションオペランドによって示される３２ビット又は６４ビットのデスティネーションレジスタに出力する実行ユニットと、
を備える、装置。
【請求項１５】
前記実行ユニットが、ＸＯＲ論理ゲート、ＡＮＤ論理ゲート、およびシフタ回路を含む、請求項１４に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
実施形態は、全般的に、コンピュータプロセッサの分野に関する。より具体的には、３Ｄ座標から３ＤのＺ曲線インデックスを計算するための機械レベル命令を含む装置に関する。
【背景技術】
【０００２】
Ｚ順序曲線は、１つのタイプの空間充填曲線であり、その領域が単位間隔［０，１］である連続関数である。Ｚ順序付け（例えば、モートン順序付け）は、疎および密なマトリクス演算（特に、マトリクス乗算）、有限要素解析、画像解析、地震解析、光線追跡、および他のものを含む、多次元的な局所性が重要である大きいデータセットについて、性能のかなりの向上を提供することができる。しかしながら、座標からＺ順序曲線インデックスの計算は、計算集約的であり得る。
【０００３】
本実施形態のより良い理解は、以下の図面と関連する、以下の詳細な説明から得ることができる。
【図面の簡単な説明】
【０００４】
【図１Ａ】８×８マトリクスの例示的なＺ順序マッピングを例示する図である。
【図１Ｂ】８×８マトリクスの例示的なＺ順序マッピングを例示する図である。
【０００５】
【図２Ａ】一実施形態による、ハードウェアＺ曲線インデックスの実装形態の例示的なマルチステージ論理を例示する図である。
【図２Ｂ】一実施形態による、ハードウェアＺ曲線インデックスの実装形態の例示的なマルチステージ論理を例示する図である。
【０００６】
【図３】一実施形態による、３２ビットの３ＤのＺ曲線インデックス命令を実装するための、マルチステージ論理配設のブロック図である。
【０００７】
【図４】一実施形態による、６４ビットの３ＤのＺ曲線インデックス命令を実装するための、マルチステージ論理配設のブロック図である。
【０００８】
【図５】一実施形態による、３つの座標から３ＤのＺ曲線インデックスを計算する命令のためのオペランドおよび論理のブロック図である。
【０００９】
【図６】一実施形態による、３ＤのＺ曲線インデックス命令を処理するためのフロー図である。
【００１０】
【図７Ａ】一実施形態による、一般的ベクトルフレンドリー命令フォーマットおよびその命令テンプレートを例示するブロック図である。
【図７Ｂ】一実施形態による、一般的ベクトルフレンドリー命令フォーマットおよびその命令テンプレートを例示するブロック図である。
【００１１】
【図８Ａ】一実施形態による、例示的な特定のベクトルフレンドリー命令フォーマットを例示するブロック図である。
【図８Ｂ】一実施形態による、例示的な特定のベクトルフレンドリー命令フォーマットを例示するブロック図である。
【図８Ｃ】一実施形態による、例示的な特定のベクトルフレンドリー命令フォーマットを例示するブロック図である。
【図８Ｄ】一実施形態による、例示的な特定のベクトルフレンドリー命令フォーマットを例示するブロック図である。
【００１２】
【図９】一実施形態による、レジスタアーキテクチャのブロック図である。
【００１３】
【図１０Ａ】例示的なインオーダーフェッチ、復号化、リタイアパイプライン、および例示的なレジスタリネーミング、アウトオブオーダー発行／実行パイプラインの両方を例示するブロック図である。
【００１４】
【図１０Ｂ】一実施形態に含まれるように、インオーダーフェッチ、復号化、リタイアコアの例示的な一実施形態、および例示的なレジスタリネーミング、アウトオブオーダー発行／実行アーキテクチャコアの両方を例示するブロック図である。
【００１５】
【図１１Ａ】例示的なインオーダーコアアーキテクチャのブロック図である。
【図１１Ｂ】例示的なインオーダーコアアーキテクチャのブロック図である。
【００１６】
【図１２】一実施形態による、２つ以上のコア、統合メモリコントローラ、および統合グラフィックスを有するプロセッサのブロック図である。
【００１７】
【図１３】例示的なコンピュータシステムのブロック図である。
【００１８】
【図１４】第２の例示的なコンピュータシステムのブロック図である。
【００１９】
【図１５】第３の例示的なコンピュータシステムのブロック図である。
【００２０】
【図１６】一実施形態による、システムオンチップ（ＳｏＣ：ｓｙｓｔｅｍ  ｏｎ  ａ  ｃｈｉｐ）のブロック図である。
【００２１】
【図１７】ソース命令セットの中のバイナリ命令をターゲット命令セットの中のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。
【発明を実施するための形態】
【００２２】
以下の説明では、以下で説明される実施形態の完全な理解を提供するために、数多くの具体的な詳細が説明の目的で記載される。しかしながら、当業者には、この実施形態がこれら具体的な詳細の一部を伴わずに実践することができることが明らかになるであろう。他の事例では、実施形態の根本原理を不明瞭にすることを回避するために、よく知られている構造およびデバイスがブロック図の形態で示される。１つの実施形態において、インテルアーキテクチャ（ＩＡ：Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）を拡張したアーキテクチャの拡張が説明されるが、根本原理は、いかなる特定のＩＳＡにも限定されない。
【００２３】
ベクトルおよびＳＩＭＤ命令の概要
或るタイプのアプリケーションは、しばしば、多数のデータアイテムに対して同じ演算（「データパラレリズム」と称される）を行うことを必要とする。シングルインストラクションマルチプルデータ（ＳＩＭＤ：Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）は、プロセッサに、複数のアイテムに対して１つの演算を行わせる、１つのタイプの命令を指す。ＳＩＭＤ技術は、レジスタのビットを、各々が個別の値を表すいくつかの固定サイズのデータ要素に論理的に分割することができるプロセッサに特に適している。例えば、２５６ビットレジスタの中のビットは、４つの別々の６４ビットパックドデータ要素（クワッドワード（Ｑ）サイズデータ要素）、８つの別々の３２ビットパックドデータ要素（ダブルワード（Ｄ）サイズデータ要素）、１６個の別々の１６ビットパックドデータ要素（ワード（Ｗ）サイズデータ要素）、または３２個の別々の８ビットデータ要素（バイト（Ｂ）サイズデータ要素）として演算されるソースオペランドとして指定することができる。このタイプのデータは、「パックド」データタイプまたは「ベクトル」データタイプと称され、このデータタイプのオペランドは、パックドデータオペランドまたはベクトルオペランドと称される。換言すれば、パックドデータ項目またはベクトルは、一連のパックドデータ要素を指し、パックドデータオペランドまたはベクトルオペランドは、ＳＩＭＤ命令（パックドデータ命令またはベクトル命令としても知られている）のソースまたはデスティネーションオペランドである。
【００２４】
ｘ８６、ＭＭＸ（商標）、ストリーミングＳＩＭＤ拡張（ＳＳＥ：Ｓｔｒｅａｍｉｎｇ  ＳＩＭＤ  Ｅｘｔｅｎｓｉｏｎｓ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１、およびＳＳＥ４．２命令を含む命令セットを有する、Ｉｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサによって採用されたものなどのＳＩＭＤ技術は、アプリケーション性能のかなりの向上を可能にした。アドバンストベクトル拡張（ＡＶＸ：Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ）（ＡＶＸ１およびＡＶＸ２）と称され、ベクトル拡張（ＶＥＸ：Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ）符号化スキームを使用する、追加の一組のＳＩＭＤ拡張がリリースされている（例えば、Ｉｎｔｅｌ（登録商標）６４およびＩＡ−３２  アーキテクチャズ・ソフトウェア・デベロッパズ・マニュアル（Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒｓ  Ｍａｎｕａｌ）、２０１４年９月、およびＩｎｔｅｌ（登録商標）Ｉｎｔｅｌ（登録商標）アーキテクチャ・インストラクション・セット・エクステンションズ・プログラミング・リファレンス（Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅ）、２０１４年９月を参照されたい）。
【００２５】
Ｚ曲線インデクシングの概要
図１Ａは、例示される８×８マトリクス１００の要素ごとの、Ｚ順序キーマッピングを例示する。示される各要素内で、より上位のビットは、最上部にあり、より下位のビットは、最底部にある。Ｚ曲線順序付けの１つの実装形態は、元々のインデックスの各々のビットを各次元にインターリーブする（例えば、シャッフルする）ことによって行われる。例示されるマトリクス１００の各要素に示されるＺ順序付けは、マトリクス１００の中の各要素の次元＿１  １０１および次元＿２  １０２の値のビットごとのインターリーブによって生成される。
【００２６】
例えば、座標［２，３］（例えば、次元＿１  １０１のバイナリ０１０および次元＿２  １０２のバイナリ０１１）での要素のＺ曲線インデックスは、各次元の座標のビットをインターリーブすることによって決定することができ、その結果、００１１０１（例えば、０ｘ０Ｄ）のバイナリのＺ曲線インデックスとなる。例示的なＺ曲線インデックス値は、座標［２，３］でのマトリクス要素が、例示的なマトリクス１００のＺ順序曲線の（１０からインデックスを付けて）１３番目のインデックスであることを示す。
【００２７】
図１Ｂは、Ｚ順序で要素のマトリクス要素を順次的に追跡することによって作成されるＺ曲線２００のグラフ図である。図１Ｂには、例示的な目的で、単純な２ＤのＺ曲線および関連付けられるインデックスが示される。限られたビット長を有する限られた数の座標の場合は、予め計算した値を記入したルックアップテーブルを使用して、一組の座標のＺ曲線インデックスを素早く決定することができる。これは、座標の数およびサイズが増加するにつれて非実用的になり得る。１つの実施形態において、プロセッサは、大きいデータセットを解析するときに、３ＤのＺ曲線インデックスを計算して、計算オーバヘッドを低減させ、アプリケーション性能を向上させるための３２ビットおよび６４ビットの機械レベル命令を含む。
【００２８】
３ＤのＺ曲線インデックスを計算するための機械レベル命令
１つの実施形態において、機械命令は、プロセッサに、入力された座標値に対してビット操作演算を行うことによって３ＤのＺ曲線インデックスを計算させる。
【００２９】
下の表１は、例示的な３２ビット３ＤのＺ曲線インデックスのビット演算を示す。
【表１】
0006773378.tif 000002
【００３０】
表１に示されるように、３２ビットｚ曲線インデックス命令は、各ソース座標の１０個の下位ビットを３２ビットデスティネーションの中へシャッフルする。１つの実施形態において、各ソースの１０個の下位ビットは、１ソースあたり３つのビットストライドおよびソース間の１つのビットオフセットを伴うデスティネーションに交互に分配され、よって、ビットは、指定範囲内で、ゼロビットに、次いで２つおきのビットに分配される。例えば、ｓｒｃ１ビットは、ビット０、３、６、...、２７に分配され、ｓｒｃ２ビットは、ビット１、４、７、...、２８に分配され、ｓｒｃ３ビットは、ビット２、５、８、...、２９に分配される。
【００３１】
下の表２は、６４ビットの３ＤのＺ曲線インデックス命令のビット演算を示す。
【表２】
0006773378.tif 000003
【００３２】
表２に示されるように、６４ビットｚ曲線インデックス命令は、各ソース座標の２０個の下位ビットを６４ビットデスティネーションの中へシャッフルする。１つの実施形態において、各ソースの２０個の下位ビットは、１ソースあたり３つのビットストライドおよびソース間の１つのビットオフセットを伴うデスティネーションに交互に分配され、よって、ビットは、指定範囲内で、ゼロビットに、次いで２つおきのビットに分配される。例えば、ｓｒｃ１ビットは、ビット０、３、６、...、５７に分配され、ｓｒｃ２ビットは、ビット１、４、７、...、５８に分配され、ｓｒｃ３ビットは、ビット２、５、８、...、５９に分配される。
【００３３】
３２ビットＺ曲線インデックスを算出するための例示的な高レベル疑似コードは、下の表３に示される。６４ビットＺ曲線インデックスを算出するための例示的な高レベル疑似コードは、下の表４に示される。疑似コードは、上の表１および表２に示されるビット分配を行うために使用することができる、例示的な高レベル論理を明示する。
【表３】
0006773378.tif 000004
【表４】
0006773378.tif 000005
【００３４】
図２Ａ〜２Ｂは、一実施形態による、ハードウェアＺ曲線インデックスの実装形態のための例示的なマルチステージ論理を例示する。図２Ａは、ＸＯＲゲート２１２と、シフタ回路２１４と、ＡＮＤゲート２１６とを含む論理の単一のステージ２１０を示す。ソース入力２０２は、ソースオペランドまたは以前の論理ステージからの入力とすることができる。一組の一時レジスタ（例えば、ｔｅｍｐ＿Ａ  ２０４、ｔｅｍｐ＿Ｂ  ２０６）を使用して、制御値を供給し、ここで、ｔｅｍｐ＿Ａ  ２０４は、シフト値をシフタ回路に供給し、ｔｅｍｐ＿Ｂ  ２０６は、データがステージ＿ｏｕｔ２１８を介して出力される前に適用されるビットマスクを供給する。ステージ＿ｏｕｔ２１８の値は、最終ステージを除いて、論理ステージごとにＳＲＣ２０２を供給する。最終ステージについて、ステージ＿ｏｕｔ２１８は、ソース（例えば、ＳＲＣ２０２）として提供される初期座標に対応するデスティネーション出力の一部分である。
【００３５】
図２Ｂは、一実施形態による、３ＤのＺ曲線インデックス命令を実装するためのマルチステージ論理配設のブロック図を示す。そのような実施態様において、プロセッサは、各ソース入力に対して論理演算を行い、１座標あたりの構成要素を単一の出力に組み合わせるように構成される、実行ユニットを含む。１つの実施形態において、論理の単一ステージ２１０の多数のインスタンス２２０（例えば、３２ビットについて２２０Ａ〜Ｅ、６４ビットについて２２０Ａ〜Ｆ）は、単一入力座標の３ＤのＺ曲線インデックスの一部分を計算するように配設される。最終ステージ以外の全てのステージ＿ｏｕｔ２１８は、その後のステージのソースを提供する。最終ステージのステージ＿ｏｕｔ２１８は、単一の初期入力座標と関連付けられるＺ曲線インデックスの一部分を提供する。１つの実施形態において、それぞれの座標の出力は、次いで、デスティネーションレジスタに出力する前に組み合わせられる。
【００３６】
各Ｚ曲線インデックスのそれぞれの構成要素を計算するための演算は、実行ユニットにおいて直列にまたは並列に行うことができる。例えば、Ｚ曲線インデックスを計算するための単一のマクロ命令を、多数のマイクロ演算に復号化することができ、各マイクロ演算は、１つまたは複数の実行ユニットに、個別の中間値を組み合わせる前に、ソース座標ごとに演算を行わせる。
【００３７】
図３は、一実施形態による、３２ビットの３ＤのＺ曲線インデックス命令を実装するための、マルチステージ論理配設のブロック図を示す。１つの実施形態において、図２Ａに示される論理２１０の多数のインスタンスは、図２Ｂに示される論理ステージ２２０Ａ〜Ｅによって示されるように結合することができる。マルチステージ論理は、座標ごとにＺ曲線インデックスビットシャッフルを行うために使用することができる。第１の論理ステージ２２０Ａは、３２ビットソース入力３０２を受け付け、ゼロ左シフト３０４および０ｘ０００００３ｆｆのマスク値３０６を有する。第１の論理ステージ２２０Ａの出力３０８は、第２の論理ステージ２２０Ｂのソースとして提供され、論理ステージ２２０Ｂは、入力として、１６ビット左シフト３１４および０ｘｆｆ００００ｆｆのマスク値３１６を受け付ける。第２の論理ステージ２２０Ｂの出力３１８は、第３の論理ステージ２２０Ｃのソースとして提供され、第３の論理ステージ２２０Ｃは、入力として、８ビット左シフト３２４および０ｘ０３００ｆ００ｆのマスク値３２６を受け付ける。第３の論理ステージ２２０Ｃの出力３２８は、第４の論理ステージ２２０Ｄのソースとして提供され、第４の論理ステージ２２０Ｄは、入力として、４ビット左シフト３３４および０ｘ０３０ｃ３０ｃ３のマスク値３３６を受け付ける。第４の論理ステージ２２０Ｄの出力３３８は第５の論理ステージ２２０Ｅのソースとして提供され、第５の論理ステージ２２０Ｅは、入力として、２ビットの左シフト３４４および０ｘ０３０ｃ３０ｃ３のマスク値３４６を受け付ける。第５の論理ステージ２２０Ｅの出力３４８は、シフトされ、他のソース座標の処理出力と組み合わせられ、そして３ＤのＺ曲線インデックスの結果として返される。各ソース入力は、類似の論理パイプラインの処理を受ける。１つの実施形態において、入力ごとのマイクロ演算は、並列に行われる。
【００３８】
図４は、一実施形態による、６４ビットの３ＤのＺ曲線インデックス命令を実装するための、マルチステージ論理配設のブロック図を示す。図２Ｂに示される各論理ステージ２２０Ａ〜Ｆは、座標ごとにＺ曲線インデックスビットシャッフルを行うために使用することができる。１つの実施形態において、論理ステージは、少なくとも６４ビットの精度を有する演算を行って、６４ビット出力を生成するように構成される。第１の論理ステージ２２０Ａは、６４ビットソース入力４０２を受け付け、ゼロ左シフト４０４および０ｘ０００ｆｆｆｆｆのマスク値４０６を有する。第１の論理ステージ２２０Ａの出力４０８は、第２の論理ステージ２２０Ｂのソースとして提供され、第２の論理ステージ２２０Ｂは、入力として、３２ビット左シフト４１４および０ｘ１ｆ００００００００ｆｆｆｆのマスク値４１６を受け付ける。第２の論理ステージ２２０Ｂの出力４１８は、第３の論理ステージ２２０Ｃのソースとして提供され、第３の論理ステージ２２０Ｃは、入力として、１６ビット左シフト４２４および０ｘ１ｆ００００ｆｆ００００ｆｆのマスク値４２６を受け付ける。第３の論理ステージ２２０Ｃの出力４２８は、第４の論理ステージ２２０Ｄのソースとして提供され、第４の論理ステージ２２０Ｄは、入力として、８ビット左シフト４３４および０ｘ１００ｆ００ｆ００ｆ００ｆ００ｆのマスク値４３６を受け付ける。第４の論理ステージ２２０Ｄの出力４３８は、第５の論理ステージ２２０Ｅのソースとして提供され、第５の論理ステージ２２０Ｅは、入力として、４ビット左シフト４４４および０ｘ１０ｃ３０ｃ３０ｃ３０ｃ３０ｃ３のマスク値４４６を受け付ける。第５の論理ステージ２２０Ｅの出力４４８は、第５の論理ステージ２２０Ｅのソースとして提供され、入力として、２ビットの左シフト４５４および０ｘ１２４９２４９２４９２４９２４９のマスク値４５６を受け付ける。第６の論理ステージ２２０Ｆの出力４５８は、シフトされ、他のソース座標の出力と組み合わせられ、そして３ＤのＺ曲線インデックスとして出力される。各ソース入力は、類似の論理パイプラインの処理を受ける。１つの実施形態において、入力ごとのマイクロ演算は、並列に行われる。
【００３９】
図５は、一実施形態による、３つの座標から３ＤのＺ曲線インデックスを計算する命令のためのオペランドおよび論理のブロック図である。命令の一実施形態は、３つのソースオペランドを含む。すなわち、Ｘ次元と関連付けられる第１のソースオペランド５０２、Ｙ次元と関連付けられる第２のソースオペランド５０４、およびＺ次元と関連付けられる第３のソースオペランド５０６である。一実施形態によれば、マクロ命令レベルにおいて、ソースオペランドは、それぞれの座標値を記憶するレジスタ、それぞれの座標値を記憶するメモリアドレス、または即値座標値である。オペランドと関連付けられる座標が記憶されるマイクロ命令レベルにおいて、実行ユニットによって処理される前に、プロセッサレジスタに記憶される。１つの実施形態において、マルチプレクサ（例えば、ｍｕｘ５０８）は、ソースレジスタをプロセッサ実行ユニットのｚ順序論理５１０に結合させ、ソース座標からＺ順序インデックスを計算する。３２ビット前出力レジスタおよび最終結果レジスタの例示的なビットレイアウトの表現は、下の表５に示される。
【表５】
0006773378.tif 000006
【００４０】
上の表５は、ソース入力ごとの３２ビット前出力を示す。表５の各ｘ、ｙ、またはｚの値は、示された座標値の単一ビットを示し、最下位ビットを右側に、最上位ビットを左側に有する。１つの実施形態において、ＳＲＣ１'前出力値は、ＳＲＣ１  ５０２によって示される値から生成され、ＳＲＣ２'前出力値は、ＳＲＣ２  ５０４によって示される値から生成され、ＳＲＣ３'前出力値は、ＳＲＣ３  ５０６によって示される値から生成される。そのような実施形態において、Ｚ順序インデックスは、ＳＲＣ２'前出力を１ビットだけ左にシフトし、ＳＲＣ３'前出力を２ビットだけ左にシフトし、そして、シフトした前出力値に対してビット単位のＯＲ演算を行うことによって作成される。計算したインデックスは、次いで、命令のデスティネーションオペランド５１２によって指定されるＤＥＳＴ場所に出力される。１つの実施形態において、示されるレジスタは、ＳＩＭＤ／ベクトルレジスタであり、命令は、ベクトル演算を行うためのＳＩＭＤ命令である。
【００４１】
図６は、一実施形態による、３ＤのＺ曲線インデックス命令を処理するためのフロー図である。ブロック６０２に示されるように、命令パイプラインは、プロセッサが単一のｚ曲線インデックス命令をフェッチして、３ＤのＺ曲線インデックスを計算するときに開始する。命令は、ブロック６０２でさらに示されるように、第１、第２、および第３のソースオペランド、ならびにデスティネーションオペランドを有する。
【００４２】
ブロック６０４に示されるように、プロセッサは、Ｚ曲線インデックス命令を復号化された命令に復号化する。１つの実施形態において、復号化された命令は、単一の演算である。１つの実施形態において、復号化された命令は、命令の各サブ要素を行うための１つまたは複数の論理的マイクロ演算を含む。マイクロ演算は、実行ユニットなどのプロセッサの構成要素に、命令を実装するための様々な演算を行わせることができるように、ハードワイヤードまたはマイクロコード演算とすることができる。
【００４３】
１つの実施形態において、ブロック６０６に示されるように、復号化された命令は、実行ユニットなどのプロセッサの構成要素に、ソースオペランドによって示されるソースオペランド値をフェッチするための演算を含む、様々な演算を行わせる。様々な実施形態において、ソースオペランドは、レジスタ、メモリアドレス、または即値を含むことができる。マイクロ演算は、メモリから値をフェッチすること、または内部プロセッサレジスタに値をロードすることができる。
【００４４】
ブロック６０８に示されるように、１つまたは複数のプロセッサ実行ユニットは、復号化された命令を実行して、ソース座標値の構成ビットをインターリーブすることによって、３ＤのＺ曲線インデックスを計算する。１つの実施形態において、Ｚ曲線インデックスは、各ソース値の１０個の下位ビットを、長さが少なくとも３０ビットのＺ曲線インデックスにインターリーブすることによって計算される。１つの実施形態において、Ｚ曲線インデックスは、各ソース値の２０個の下位ビットを、長さが少なくとも６０ビットのＺ曲線インデックスにインターリーブすることによって計算される。
【００４５】
ブロック６１０に示されるように、プロセッサは、Ｚ曲線インデックス命令の結果をデスティネーションオペランドによって示される場所に記憶する。３２ビット命令の場合、Ｚ曲線インデックスは、３２ビット出力レジスタに記憶される。６４ビット命令の場合、Ｚ曲線インデックスは、６４ビット出力レジスタに記憶される。
【００４６】
本明細書で説明される実施形態は、Ｘ、Ｙ、およびＺ座標を使用した演算を指し、該座標は、３次元空間内の位置を定義するために使用されるデカルト座標である。当業者は、使用される座標は、例示的なものであり、Ｘ、Ｙ、およびＺ座標は、全般的に、Ｚ曲線順序付けを適用することができる３次元空間における第１、第２、または第３の次元の場所を定義するために使用される、任意の一組の座標を指すことを理解するであろう。
【００４７】
本明細書で説明される実施形態は、処理装置またはデータ処理システムで実装することができる。上述の説明では、多数の具体的な詳細を、本明細書で説明される実施形態の完全な理解を提供する順序で記載した。しかしながら、当業者に明らかになるように、実施形態は、これらの具体的な詳細のいくつかを伴わずに実践することができる。説明されるアーキテクチャ特徴のいくつかは、インテルアーキテクチャ（ＩＡ：Ｉｎｔｅｌ（登録商標）  Ａｒｃｈｉｔｅｃｔｕｒｅ）に対する拡張である。しかしながら、根本原理は、任意の特定のＩＳＡに限定されない。
【００４８】
本明細書で説明される命令の実施形態は、ソース座標値内の上位ビットまたは下位ビットを演算する。本明細書で説明されるように、上位ビットおよび下位ビットは、バイトがコンピュータメモリに記憶されたときにデータワードを形成する該バイトを解釈するために使用される規定とは関係なく、最上位ビットおよび最下位ビットとして定義される。換言すれば、下位ビットまたは最下位ビットは、使用中のバイト順序の規定に従って、データワード内の最小アドレスまたは最大アドレスに記憶することができる。
【００４９】
より完全な理解を提供するために、例示的な命令フォーマット、プロセッサコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャの概要が以下で提供される。
【００５０】
例示的な命令フォーマット
本明細書で説明される命令（複数可）の実施形態は、異なるフォーマットで具現化することができる。加えて、例示的なシステム、アーキテクチャ、およびパイプラインが以下で詳述される。命令（複数可）の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行することができるが、詳述されるものに限定されない。
【００５１】
ベクトルフレンドリー命令フォーマットは、ベクトル命令（例えば、ベクトル演算に特有の或るフィールドがある）に適した命令フォーマットである。実施形態は、ベクトルおよびスカラ演算の両方がベクトルフレンドリー命令フォーマットを通じてサポートされているように説明されるが、代替の実施形態は、ベクトルフレンドリー命令フォーマットを通じてサポートされるベクトル演算だけを使用する。
【００５２】
図７Ａ〜７Ｂは、一実施形態による、一般的ベクトルフレンドリー命令フォーマットおよびその命令テンプレートを例示するブロック図である。図７Ａは、一実施形態による、一般的ベクトルフレンドリー命令フォーマットおよびそのクラスＡ命令テンプレートを例示するブロック図であり、一方で、図７Ｂは、一実施形態による、一般的ベクトルフレンドリー命令フォーマットおよびそのクラスＢ命令テンプレートを例示するブロック図である。具体的には、クラスＡおよびクラスＢ命令テンプレートに対して定義される一般的ベクトルフレンドリー命令フォーマット７００は、どちらのクラスも、非メモリアクセス７０５の命令テンプレートおよびメモリアクセス７２０の命令テンプレートを含む。ベクトルフレンドリー命令フォーマットのコンテキストにおける「一般的」という用語は、いかなる特定の命令セットにも結び付けられていない命令フォーマットを指す。
【００５３】
実施形態は、ベクトルフレンドリー命令フォーマットが、３２ビット（４バイト）または６４ビット（８バイト）のデータ要素幅（またはサイズ）を有する６４バイトのベクトルオペランド長（またはサイズ）（したがって、６４バイトのベクトルは、１６個のダブルワードサイズ要素、または代替的に、８つのクアドワードサイズ要素のいずれかからなる）、１６ビット（２バイト）または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する６４バイトのベクトルオペランド長（またはサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する３２バイトのベクトルオペランド長（またはサイズ）、および３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する１６バイトのベクトルオペランド長（またはサイズ）、をサポートすることを説明する。しかしながら、代替の実施形態は、より大きい、より小さい、または異なるデータ要素幅（例えば、１２８ビット（１６バイト）のデータ要素幅）を有する、より大きい、より小さい、および／または異なるベクトルオペランドサイズ（例えば、２５６バイトのベクトルオペランド）を、サポートする。
【００５４】
図７ＡのクラスＡ命令テンプレートは、１）非メモリアクセス７０５の命令テンプレート内に、非メモリアクセスのフルラウンド制御タイプ演算７１０の命令テンプレート、および非メモリアクセスのデータ変換タイプ演算７１５の命令テンプレートが示されていること、ならびに２）メモリアクセス７２０の命令テンプレート内に、メモリアクセスの一時的７２５命令テンプレート、およびメモリアクセスの非一時的７３０命令テンプレートが示されていること、を含む。図７ＢのクラスＢ命令テンプレートは、１）非メモリアクセス７０５の命令テンプレート内に、非メモリアクセスの書き込みマスク制御の部分的ラウンド制御タイプ演算７１２の命令テンプレート、および非メモリアクセスの書き込みマスク制御のｖｓｉｚｅタイプ演算７１７の命令テンプレートが示されていること、ならびに２）メモリアクセス７２０の命令テンプレート内に、メモリアクセスの書き込みマスク制御７２７の命令テンプレートが示されていること、を含む。
【００５５】
一般的ベクトルフレンドリー命令フォーマット７００は、図７Ａ〜７Ｂに例示される順序で、以下に列記される以下のフィールドを含む。
【００５６】
フォーマットフィールド７４０−このフィールドの特定の値（命令フォーマット識別子の値）は、ベクトルフレンドリー命令フォーマットを、すなわち、命令ストリームのベクトルフレンドリー命令フォーマットにおける命令の発生を一意的に特定する。したがって、このフィールドは、一般的ベクトルフレンドリー命令フォーマットだけを有する命令セットには必要でない、という意味で随意である。
【００５７】
ベース演算フィールド７４２−そのコンテンツは、異なるベース演算を識別する。
【００５８】
レジスタインデックスフィールド７４４−そのコンテンツは、直接またはアドレス生成を通して、ソースの場所およびデスティネーションオペランドがレジスタに、またはメモリにあることを指定する。これらは、Ｐ×Ｑ（例えば、３２×５１２、１６×１２８、３２×１０２４、６４×１０２４）のレジスタファイルからＮ個のレジスタを選択するための十分な数のビットを含む。１つの実施形態において、Ｎは、最大で３つのソースおよび１つのデスティネーションレジスタとすることができるが、代替の実施形態は、より多いまたはより少ないソースおよびデスティネーションレジスタをサポートすることができる（例えば、最大２つのソースをサポートすることができ、これらのソースのうちの１つがデスティネーションとしても機能する。最大で３つのソースをサポートすることができ、これらのソースのうちの１つがデスティネーションとしても機能する。また、最大で２つのソースおよび１つのデスティネーションをサポートすることができる）。
【００５９】
修飾子フィールド７４６−そのコンテンツは、非メモリアクセス７０５の命令テンプレートとメモリアクセス７２０の命令テンプレートとの間で、メモリアクセスするものと、そうでないものを指定する命令の、一般的ベクトル命令フォーマットにおける発生を識別する。メモリアクセス演算は、メモリ階層に対する読み取りおよび／または書き込みを行い（いくつかの場合では、レジスタの値を使用してソースおよび／またはデスティネーションアドレスを指定し）、一方で、非メモリアクセス演算は、これらを行わない（例えば、ソースおよびデスティネーションがレジスタである）。１つの実施形態において、このフィールドはまた、メモリアドレス計算を行うために、３つの異なる方法から選択するが、代替の実施形態は、メモリアドレス計算を行うためのより多い、より少ない、または異なる方法をサポートすることができる。
【００６０】
拡大演算フィールド７５０−そのコンテンツは、ベース演算に加えて、様々な異なる演算のうちのどれを行うのかを識別する。このフィールドは、コンテキストに特有である。本発明の１つの実施形態において、このフィールドは、クラスフィールド７６８、アルファフィールド７５２、およびベータフィールド７５４に分割される。拡大演算フィールド７５０は、共通の演算グループを、２つ、３つ、または４つの命令ではなく、単一の命令で行うことを可能にする。
【００６１】
スケールフィールド７６０−そのコンテンツは、メモリアドレス生成のための（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅを使用するアドレス生成のための）インデックスフィールドのコンテンツのスケーリングを可能にする。
【００６２】
変位フィールド７６２Ａ−そのコンテンツは、（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｄｉｓｐｌａｃｅｍｅｎｔを使用するアドレス生成のための）メモリアドレス生成の一部として使用される。
【００６３】
変位係数フィールド７６２Ｂ（変位係数フィールド７６２Ｂの上に変位フィールド７６２Ａを直接並置することは、一方または他方が使用されることを示すことに留意されたい）−そのコンテンツは、アドレス生成の一部として使用され、メモリアクセス（Ｎ）のサイズによってスケーリングされる変位係数を指定し、ここで、Ｎは、（例えば、２ｓｃａｌｅ＊ｉｎｄｅｘ＋ｂａｓｅ＋ｓｃａｌｅｄ  ｄｉｓｐｌａｃｅｍｅｎｔを使用するアドレス生成のための）メモリアクセスにおけるバイト数である。冗長な下位ビットは無視され、それ故に、変位係数フィールドのコンテンツは、有効アドレスを算出する際に使用される最終変位を生成するために、メモリオペランドの総サイズ（Ｎ）が乗算される。Ｎの値は、フルオペコードフィールド７７４（後に本明細書で説明される）およびデータ操作フィールド７５４Ｃに基づいて、実行時にプロセッサハードウェアによって決定される。変位フィールド７６２Ａおよび変位係数フィールド７６２Ｂは、非メモリアクセス７０５の命令テンプレートに使用されない、および／または異なる実施形態は、これら２つのうちの１つだけを実装することができる、または全く実装しない場合がある、という意味で随意である。
【００６４】
データ要素幅フィールド７６４−そのコンテンツは、（いくつかの実施形態では、すべての命令について、他の実施形態では、命令のいくつかだけについて）いくつかのデータ要素幅のうちのどれを使用するのかを識別する。このフィールドは、１つだけのデータ要素幅がサポートされる、および／またはデータ要素幅がオペコードのいくつかの態様を使用してサポートされる場合に、該フィールドが必要でない、という意味で随意である。
【００６５】
書き込みマスクフィールド７７０−そのコンテンツは、データ要素位置ごとに、デスティネーションベクトルオペランドの中のそのデータ要素位置がベース演算および拡大演算の結果を反映するかどうかを制御する。クラスＡ命令テンプレートは、マージング−書き込みマスキングをサポートし、一方で、クラスＢ命令テンプレートは、マージング−およびゼロ化−書き込みマスキングの両方をサポートする。マージするときに、ベクトルマスクは、デスティネーションの任意の一組のベクトルマスクを、（ベース演算および拡大演算によって指定される）任意の演算の実行中に、更新から保護することを可能にし、他の１つの実施形態では、対応するマスクビットが０を有する場合に、デスティネーションの各要素の古い値を保存する。対照的に、ゼロ化するときに、ベクトルマスクは、デスティネーションの任意の一組のベクトルマスクを、（ベース演算および拡大演算によって指定される）任意の演算の実行中に、ゼロ化することを可能にし、１つの実施形態では、対応するマスクビットが０の値を有するときに、デスティネーションの要素が０に設定される。この機能性のサブセットは、行われている演算のベクトル長（すなわち、最初から最後の１つまでの、修正されている要素のスパン）を制御する能力であるが、修正される要素が連続であることは必要でない。したがって、書き込みマスクフィールド７７０は、ロード、記憶、算術、論理、その他を含む、部分的なベクトル演算を可能にする。実施形態は、書き込みマスクフィールド７７０のコンテンツが、使用される書き込みマスクを含むいくつかの書き込みマスクレジスタのうちの１つを選択すること（したがって、書き込みマスクフィールド７７０のコンテンツが、実行されるマスキングを間接的に特定すること）が説明されるが、代替の実施形態は、代わりに、または加えて、マスク書き込みフィールド７７０のコンテンツが、実行されるマスキングを直接的に指定することを可能にする。
【００６６】
即値フィールド７７２−そのコンテンツは、即値の仕様を可能にする。このフィールドは、即値をサポートせず、かつ即値を使用しない命令には存在しない、一般的ベクトルフレンドリーフォーマットの実装形態に存在しない、という意味で随意である。
【００６７】
クラスフィールド７６８−そのコンテンツは、命令の異なるクラスを識別する。図７Ａ〜７Ｂを参照すると、このフィールドのコンテンツは、クラスＡおよびクラスＢの命令から選択する。図７Ａ〜７Ｂにおいて、角に丸みのある四角は、特定の値がフィールドに存在することを示すために使用される（例えば、図７Ａ〜７Ｂにおいて、クラスフィールド７６８について、それぞれ、クラスＡ  ７６８ＡおよびクラスＢ  ７６８Ｂ）。
【００６８】
クラスＡの命令テンプレート
クラスＡの非メモリアクセス７０５の命令テンプレートの場合において、アルファフィールド７５２は、ＲＳフィールド７５２Ａとして解釈され、そのコンテンツは、異なる拡大演算タイプのうちのどれを行うのかを識別し（例えば、ラウンド７５２Ａ．１およびデータ変換７５２Ａ．２が、それぞれ、非メモリアクセスのラウンドタイプ演算７１０、および非メモリアクセスのデータ変換タイプ演算７１５の命令テンプレートについて指定される）、一方で、ベータフィールド７５４は、指定されたタイプの演算のうちのどれを行うのかを識別する。非メモリアクセス７０５の命令テンプレートにおいて、スケールフィールド７６０、変位フィールド７６２Ａ、および変位スケール７６２Ｂは、存在しない。
【００６９】
非メモリアクセス命令テンプレート−フルラウンド制御タイプ演算
非メモリアクセスのフルラウンド制御タイプ演算７１０の命令テンプレートにおいて、ベータフィールド７５４は、ラウンド制御フィールド７５４Ａとして解釈され、そのコンテンツ（複数可）は、静的ラウンド処理を提供する。説明される実施形態において、ラウンド制御フィールド７５４Ａは、全浮動小数点例外抑制（ＳＡＥ：ｓｕｐｐｒｅｓｓ  ａｌｌ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ  ｅｘｃｅｐｔｉｏｎ）フィールド７５６およびラウンド演算制御フィールド７５８を含むが、代替の実施形態は、これらのコンセプトの両方をサポートすることができ、また、同じフィールドの中へ符号化することができ、またはこれらのコンセプト／フィールドのうちの一方または他方を有することができる（例えば、ラウンド演算制御フィールド７５８だけを有することができる）。
【００７０】
ＳＡＥフィールド７５６−そのコンテンツは、例外イベントの報告を無効にするかどうかを識別し、ＳＡＥフィールド７５６のコンテンツが、抑制が有効であることを示すときに、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも起こさない。
【００７１】
ラウンド演算制御フィールド７５８−そのコンテンツは、一群のラウンド処理演算のうちのどれを行うのかを識別する（例えば、切り上げ、切り捨て、ゼロに向けたラウンド、および最も近方へのラウンド）。したがって、ラウンド演算制御フィールド７５８は、命令単位ごとに、ラウンド処理モードの変更を可能にする。プロセッサがラウンド処理モードを指定するための制御レジスタを含む本発明の一実施形態において、ラウンド演算制御フィールド７５０のコンテンツは、そのレジスタ値をオーバーライドする。
【００７２】
非メモリアクセス命令テンプレート−データ変換タイプ演算
非メモリアクセスデータ変換タイプ演算７１５の命令テンプレートにおいて、ベータフィールド７５４は、データ変換フィールド７５４Ｂとして解釈され、そのコンテンツは、いくつかのデータ変換（例えば、非データ変換、スウィズル、ブロードキャスト）のうちのどれを行うのかを識別する。
【００７３】
クラスＡのメモリアクセス７２０の命令テンプレートの場合において、アルファフィールド７５２は、エビクションヒントフィールド７５２Ｂとして解釈され、そのコンテンツは、エビクションヒントのうちのどれを使用するのかを識別し（図７Ａでは、一時的７５２Ｂ．１および非一時的７５２Ｂ．２が、それぞれ、メモリアクセスの一時的７２５命令テンプレート、およびメモリアクセスの非一時的７３０命令テンプレートについて指定される）、一方で、ベータフィールド７５４は、データ操作フィールド７５４Ｃとして解釈され、そのコンテンツは、いくつかのデータ操作演算（プリミティブとしても知られる）のうちのどれを行うのかを識別する（例えば、非操作、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン）。メモリアクセス７２０の命令テンプレートは、スケールフィールド７６０を含み、随意に、変位フィールド７６２Ａまたは変位スケールフィールド７６２Ｂを含む。
【００７４】
ベクトルメモリ命令は、変換サポートによって、メモリからのベクトルのロードおよび該メモリへのベクトルの記憶を行う。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素的な様式で、メモリとの間でデータを送信し、実際に送信される要素が、書き込みマスクとして選択されるベクトルマスクのコンテンツによって指示される。
【００７５】
メモリアクセス命令テンプレート−一時的
一時的データは、キャッシングの利益を享受するために、すぐに再使用される可能性があるデータである。しかしながら、これはヒントであり、異なるプロセッサが、ヒントを完全に無視することを含む、異なる方法でそれを実装することができる。
【００７６】
メモリアクセス命令テンプレート−非一時的
非一時的データは、一次レベルキャッシュにおけるキャッシングの利益を享受するために、すぐに再使用される可能性がなく、エビクションに対する優先権が与えられるべきデータである。しかしながら、これはヒントであり、異なるプロセッサが、ヒントを完全に無視することを含む、異なる方法でそれを実装することができる。
【００７７】
クラスＢの命令テンプレート
クラスＢの命令テンプレートの場合に、アルファフィールド７５２は、書き込みマスク制御（Ｚ）フィールド７５２Ｃとして解釈され、そのコンテンツは、書き込みマスクフィールド７７０によって制御される書き込みマスキングを、マージするべきか、またはゼロ化するべきかを識別する。
【００７８】
クラスＢの非メモリアクセス７０５の命令テンプレートの場合において、ベータフィールド７５４の一部は、ＲＬフィールド７５７Ａとして解釈され、そのコンテンツは、異なる拡大演算タイプのうちのどれを行うのかを識別し（例えば、ラウンド処理７５７Ａ．１およびベクトル長（ＶＳＩＺＥ）７５７Ａ．２が、それぞれ、非メモリアクセスの書き込みマスク制御の部分的ラウンド制御タイプ演算７１２の命令テンプレート、および非メモリアクセス、書き込みマスク制御、ＶＳＩＺＥタイプ演算７１７の命令テンプレートについて指定される）、一方で、ベータフィールド７５４の残りは、指定されたタイプの演算のうちのどれを行うのかを識別する。非メモリアクセス７０５の命令テンプレートにおいて、スケールフィールド７６０、変位フィールド７６２Ａ、および変位スケール７６２Ｂは、存在しない。
【００７９】
非メモリアクセス、書き込みマスク制御、部分的ラウンド制御タイプ演算７１０の命令テンプレートにおいて、ベータフィールド７５４の残りは、ラウンド演算フィールド７５９Ａとして解釈され、例外イベント報告は、無効にされる（所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも起こさない）。
【００８０】
ラウンド演算制御フィールド７５９Ａ−ラウンド演算制御フィールド７５８と同様に、そのコンテンツは、一群のラウンド処理演算のうちのどれを行うのかを識別する（例えば、切り上げ、切り捨て、ゼロに向けたラウンド、および最も近方へのラウンド）。したがって、ラウンド演算制御フィールド７５９Ａは、命令単位ごとに、ラウンド処理モードの変更を可能にする。プロセッサがラウンド処理モードを指定するための制御レジスタを含む本発明の一実施形態において、ラウンド演算制御フィールド７５０のコンテンツは、そのレジスタ値をオーバーライドする。
【００８１】
非メモリアクセスの書き込みマスク制御のＶＳＩＺＥタイプ演算７１７の命令テンプレートにおいて、ベータフィールド７５４の残りは、ベクトル長フィールド７５９Ｂとして解釈され、そのコンテンツは、いくつかのデータベクトル長（例えば、１２８、２５６、または５１２バイト）のうちのどれを行うのかを識別する。
【００８２】
クラスＢのメモリアクセス７２０の命令テンプレートの場合において、ベータフィールド７５４の一部は、ブロードキャストフィールド７５７Ｂとして解釈され、そのコンテンツは、ブロードキャストタイプデータ操作演算が実行されるかどうかを識別し、一方で、ベータフィールド７５４の残りは、ベクトル長フィールド７５９Ｂと解釈される。メモリアクセス７２０の命令テンプレートは、スケールフィールド７６０を含み、随意に、変位フィールド７６２Ａまたは変位スケールフィールド７６２Ｂを含む。
【００８３】
一般的ベクトルフレンドリー命令フォーマット７００に関して、フルオペコードフィールド７７４は、フォーマットフィールド７４０、ベース演算フィールド７４２、およびデータ要素幅フィールド７６４を含むように示されている。フルオペコードフィールド７７４がこれらのフィールドのすべてを含む１つの実施形態が示されるが、該フィールドのすべてをサポートしない実施形態において、フルオペコードフィールド７７４は、該フィールドのすべてよりも少ないフィールドを含む。フルオペコードフィールド７７４は、演算コード（オペコード）を提供する。
【００８４】
追加演算フィールド７５０、データ要素幅フィールド７６４、および書き込みマスクフィールド７７０は、これらの特徴を、一般的ベクトルフレンドリー命令フォーマットで、命令ごとに指定することを可能にする。
【００８５】
書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、異なるデータ要素幅に基づいてマスクを適用させることを可能にするタイプ付き命令を生成する。
【００８６】
クラスＡおよびクラスＢの範囲内で見出される様々な命令テンプレートは、異なる状況において有益である。いくつかの実施形態では、プロセッサ内の異なるプロセッサまたは異なるコアが、クラスＡだけ、クラスＢだけ、または両方のクラスをサポートすることができる。例えば、汎用コンピューティングを意図する高性能汎用アウトオブオーダーコアが、クラスＢだけをサポートすることができ、グラフィックスおよび／または科学的（スループット）コンピューティングを主として意図するコアが、クラスＡだけをサポートすることができ、両方を意図するコアは、両方をサポートすることができる（当然、両方のクラスからのテンプレートおよび命令のいくつかの混合物を有するが、両方のクラスからのすべてのテンプレートおよび命令を有しないコアは、本発明の範囲内にある）。
【００８７】
単一のプロセッサは、複数のコアを含むことができ、該コアのすべてが同じクラスをサポートするか、または異なるコアが異なるクラスをサポートする。例えば、個別のグラフィックスおよび汎用コアを有するプロセッサにおいて、グラフィックスおよび／または科学的コンピューティングを主として意図するグラフィックスコアの１つが、クラスＡだけをサポートすることができ、一方で、汎用コアのうち１つまたは複数は、クラスＢだけをサポートする汎用コンピューティングを意図するアウトオブオーダー実行およびレジスタリネーミングを有する高性能汎用コアとすることができる。個別のグラフィックスコアを有しない別のプロセッサは、クラスＡおよびクラスＢの両方をサポートするもう１つの汎用インオーダーまたはアウトオブオーダーコアを含むことができる。
【００８８】
当然、異なる実施形態では、１つのクラスからの特徴を他のクラスで実装することもできる。高水準言語で記述されるプログラムは、様々な異なる実行可能な形態に翻訳され（例えば、ジャストインタイムでコンパイルされ、または静的にコンパイルされ）、該形態としては、１）実行のためのターゲットプロセッサによってサポートされるクラス（複数可）の命令だけを有する形態、または２）すべてのクラスの命令の異なる組み合わせを使用して記述される複数の代替のルーチンを有し、かつ現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行するためのルーチンを選択する制御フローコードを有する形態、が挙げられる。
【００８９】
例示的な特定のベクトルフレンドリー命令フォーマット
図８Ａは、一実施形態による、例示的な特有のベクトルフレンドリー命令フォーマットを例示するブロック図である。図８Ａは、フィールドの場所、サイズ、解釈、および順序、ならびにそうしたフィールドのいくつかの値を特定するという意味で特有である、特有のベクトルフレンドリー命令フォーマット８００を示す。特有のベクトルフレンドリー命令フォーマット８００は、ｘ８６命令セットを拡張するために使用することができ、したがって、フィールドのいくつかは、既存のｘ８６命令セットおよびその拡張（例えば、ＡＶＸ）において使用されるものと類似するか、または同じである。このフォーマットは、拡張を有する既存のｘ８６命令セットの接頭辞符号化フィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、および即値フィールドとの整合性を維持する。図８Ａからの複数のフィールドをマッピングする図７Ａ又は図７Ｂからのフィールドが例示される。
【００９０】
実施形態は、例示の目的で、一般的ベクトルフレンドリー命令フォーマット７００のコンテキストで、特有のベクトルフレンドリー命令フォーマット８００を参照して説明されるが、本発明は、特許請求される場合を除き、特有のベクトルフレンドリー命令フォーマット８００に限定されないことを理解されたい。例えば、一般的ベクトルフレンドリー命令フォーマット７００は、様々なフィールドの様々な可能なサイズを想定し、一方で、特有のベクトルフレンドリー命令フォーマット８００は、特有のサイズのフィールドを有するものとして示される。具体的な一例として、データ要素幅フィールド７６４は、特有のベクトルフレンドリー命令フォーマット８００の１ビットフィールドとして例示されるが、本発明は、そのように限定されない（すなわち、一般的ベクトルフレンドリー命令フォーマット７００は、他のサイズのデータ要素幅フィールド７６４を想定する）。
【００９１】
一般的ベクトルフレンドリー命令フォーマット７００は、図８Ａに例示される順序で、以下に列記される以下のフィールドを含む。
【００９２】
ＥＶＥＸ接頭辞（バイト０〜３）８０２−これは、４バイトの形態で符号化される。
【００９３】
フォーマットフィールド７４０（ＥＶＥＸバイト０、ビット［７：０］）−第１のバイト（ＥＶＥＸバイト０）は、フォーマットフィールド７４０であり、０ｘ６２（本発明の１つの実施形態において、ベクトルフレンドリー命令フォーマットを識別するために使用される固有の値）を含む。
【００９４】
第２〜第４のバイト（ＥＶＥＸバイト１〜３）は、特定の能力を提供するいくつかのビットフィールドを含む。
【００９５】
ＲＥＸフィールド８０５（ＥＶＥＸバイト１、ビット［７−５］）−これは、ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、および７５７ＢＥＸバイト１、ビット［５］−Ｂ）からなる。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能性を提供し、１の補数の形態を使用して符号化され、すなわち、ＺＭＭ０は、１１１１Ｂとして符号化され、ＺＭＭ１５は、００００Ｂとして符号化される。命令の他のフィールドは、当技術分野で知られているように、レジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、およびｂｂｂ）を符号化するので、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂを追加することによって、Ｒｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂを形成することができる。
【００９６】
ＲＥＸ'フィールド７１０−これは、ＲＥＸ'フィールド７１０の第１の部分であり、また、拡張した３２個のレジスタセットの上位１６個または下位１６個のいずれかを符号化するために使用される、ＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。本発明の一実施形態において、このビットは、以下に示されるように他のものと共に、（よく知られているｘ８６の３２ビットモードで）ビット反転フォーマットで記憶されて、ＢＯＵＮＤ命令から識別され、そのリアルオペコードバイトは、６２であるが、ＭＯＤ  Ｒ／Ｍフィールド（以下で説明される）では、ＭＯＤフィールドの１１という値を受け付けず、代替の実施形態は、これを記憶せず、以下に示される他のビットは、反転フォーマットである。下位の１６個のレジスタを符号化するために、１という値が使用される。換言すれば、Ｒ'Ｒｒｒｒは、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、および他のフィールドからの他のＲＲＲを組み合わせることによって形成される。
【００９７】
オペコードマップフィールド８１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）−そのコンテンツは、暗黙的な先行オペコードバイト（０Ｆ、０Ｆ  ３８、または０Ｆ  ３）を符号化する。
【００９８】
データ要素幅フィールド７６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）−これは、表記ＥＶＥＸ．Ｗによって表される。ＥＶＥＸ．Ｗは、データタイプの粒度（サイズ）（３２ビットデータ要素または６４ビットデータ要素のいずれか）を定義するために使用される。
【００９９】
ＥＶＥＸ．ｖｖｖｖ８２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）−ＥＶＥＸ．ｖｖｖｖの役割としては、１）ＥＶＥＸ．ｖｖｖｖが、反転（１の補数）の形態で指定され、また、２つ以上のソースオペランドを有する複数の命令に有効である、第１のソースレジスタオペランドを符号化すること、２）ＥＶＥＸ．ｖｖｖｖが、或るベクトルシフトのために１の補数の形態で特定される、デスティネーションレジスタオペランドを符号化すること、または３）ＥＶＥＸ．ｖｖｖｖが、いかなるオペランドも符号化せず、フィールドが予約され、かつ１１１１ｂを含まなければならない、ことが挙げられる。したがって、ＥＶＥＸ．ｖｖｖｖフィールド８２０は、反転（１の補数）の形態で記憶された第１のソースレジスタ指定子の４つの下位ビットを符号化する。命令に応じて、追加の異なるＥＶＥＸビットフィールドを使用して、指定子サイズを３２個のレジスタに拡張する。
【０１００】
ＥＶＥＸ．Ｕ７６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）−ＥＶＥＸ．Ｕ＝０である場合は、クラスＡまたはＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１ある場合は、クラスＢまたはＥＶＥＸ．Ｕ１を示す。
【０１０１】
接頭辞符号化フィールド８２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）−これは、ベース演算フィールドのための追加のビットを提供する。ＥＶＥＸ接頭辞フォーマットのレガシーＳＳＥ命令に対するサポートを提供することに加えて、このことは、ＳＩＭＤ接頭辞をコンパクト化するといった利益も有する（ＳＩＭＤ接頭辞を表すために１バイトを必要とするのではなく、ＥＶＥＸ接頭辞は、２ビットだけしか必要としない）。１つの実施形態において、レガシーフォーマットおよびＥＶＥＸ接頭辞フォーマットの両方のＳＩＭＤ接頭辞（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を使用するレガシーＳＳＥ命令をサポートするために、これらのレガシーＳＩＭＤ接頭辞は、ＳＩＭＤ接頭辞符号化フィールドに符号化され、実行時に、復号器のＰＬＡへの提供に先立って、レガシーＳＩＭＤ接頭辞に拡張される（よって、ＰＬＡは、修正を伴わずに、レガシーフォーマットおよびこれらのレガシー命令のＥＶＥＸフォーマットの両方を実行することができる）。より新しい命令は、ＥＶＥＸ接頭辞符号化フィールドのコンテンツをオペコード拡張として直接使用することができるが、或る実施形態は、整合性のために、同様の様式で拡張するが、これらのレガシーＳＩＭＤ接頭辞によって異なる意味を指定することを可能にする。代替の実施形態は、２ビットＳＩＭＤ接頭辞符号化をサポートするようにＰＬＡを再設計することができ、したがって、拡張を必要としない。
【０１０２】
アルファフィールド７５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ、ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．書き込みマスク制御、およびＥＶＥＸ．Ｎとしても知られており、また、αを伴って例示される）−上で説明したように、このフィールドは、コンテキストに特有である。
【０１０３】
ベータフィールド７５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られており、また、βββを伴って例示される）−上で説明したように、このフィールドはコンテキストに特有である。
【０１０４】
ＲＥＸ'フィールド７１０−これは、ＲＥＸ'フィールドの残部であり、また、拡張した３２個レジスタセットの上位１６個または下位１６個のいずれかを符号化するために使用することができる、ＥＶＥＸ．Ｖビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ'）である。このビットは、ビット反転フォーマットで記憶される。下位の１６個のレジスタを符号化するために、１という値が使用される。換言すれば、ｖ'ｖｖｖｖは、ＥＶＥＸ．Ｖ'、ＥＶＥＸ．ｖｖｖｖを組み合わせることによって形成される。
【０１０５】
書き込みマスクフィールド７７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）−そのコンテンツは、上で説明したように、書き込みマスクレジスタのレジスタのインデックスを指定する。本発明の１つの実施形態において、特有の値ＥＶＥＸ．ｋｋｋ＝０００は、いかなる書き込みマスクも特定の命令に使用されないことを暗示する特別な振る舞いを有する（これは、すべてのものに対してハードワイヤードされた書き込みマスク、またはマスキングハードウェアを迂回するハードウェアの使用を含む、様々な方法で実装することができる）。
【０１０６】
リアルオペコードフィールド８３０（バイト４）は、オペコードバイトとしても知られている。オペコードの一部は、このフィールドにおいて指定される。
【０１０７】
ＭＯＤ  Ｒ／Ｍフィールド８４０（バイト５）は、ＭＯＤフィールド８４２と、Ｒｅｇフィールド８４４と、Ｒ／Ｍフィールド８４６とを含む。上で説明したように、ＭＯＤフィールドの８４２のコンテンツは、メモリアクセス演算と非メモリアクセス演算とを識別する。Ｒｅｇフィールド８４４の役割は、２つの状況に要約することができ、すなわち、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかを符号化すること、またはオペコードエクステンションとして処理され、かつ任意の命令オペランドを符号化するために使用されないこと、である。Ｒ／Ｍフィールド８４６の役割としては、メモリアドレスを参照する命令オペランドを符号化すること、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化すること、が挙げられる。
【０１０８】
スケール、インデックス、ベース（ＳＩＢ）バイト（バイト６）−上で説明したように、スケールフィールドの７５０コンテンツは、メモリアドレス生成に使用される。ＳＩＢ．ｘｘｘ８５４およびＳＩＢ．ｂｂｂ８５６−これらのフィールドのコンテンツは、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関して以前に言及されている。
【０１０９】
変位フィールド７６２Ａ（バイト７〜１０）−ＭＯＤフィールド８４２が１０を含むときに、バイト７〜１０は、変位フィールド７６２Ａであり、それは、レガシー３２ビット変位（ｄｉｓｐ３２）と同様に機能し、バイト粒度で機能する。
【０１１０】
変位係数フィールド７６２Ｂ（バイト７）−ＭＯＤフィールド８４２が０１を含むときに、バイト７は、変位係数フィールド７６２Ｂである。このフィールドの場所は、レガシーｘ８６命令セットの８ビット変位（ｄｉｓｐ８）の場所と同じであり、バイト粒度で機能する。ｄｉｓｐ８は、拡張符号であるので、−１２８〜１２７バイトのオフセットでだけアドレスすることができ、６４バイトのキャッシュラインに関して、ｄｉｓｐ８は、４つの本当に有用な値−１２８、−６４、０、および６４にだけ設定することができる８ビットを使用し、より大きい範囲がしばしば必要であるので、ｄｉｓｐ３２が使用されるが、ｄｉｓｐ３２は、４バイトを必要とする。ｄｉｓｐ８およびｄｉｓｐ３２とは対照的に、変位係数フィールド７６２Ｂは、ｄｉｓｐ８の再解釈であり、変位係数フィールド７６２Ｂを使用するときに、実際の変位は、メモリオペランドアクセス（Ｎ）のサイズを乗算した変位係数フィールドのコンテンツによって決定される。このタイプの変位は、ｄｉｓｐ８＊Ｎと呼ばれる。これは、平均命令長（変位には単一のバイトが使用されるが、極めて大きい範囲を伴う）を低減させる。そのような圧縮変位は、有効な変位がメモリアクセスの粒度の倍数であり、それ故に、アドレスオフセットの冗長な下位ビットを符号化する必要はない、という前提に基づく。換言すれば、変位係数フィールド７６２Ｂは、レガシーｘ８６命令セットの８ビット変位を置換する。したがって、変位係数フィールド７６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎにオーバーロードされることを唯一の例外として、レガシーｘ８６命令セットの８ビット変位と同じ方法で符号化される（したがって、ＭｏｄＲＭ／ＳＩＢ符号化規則にはいかなる変更もない）。換言すれば、符号化規則または符号化長にはいかなる変更もないが、ハードウェアによる変位値の解釈にだけ変更がある（バイト単位のアドレスオフセットを得るために、メモリオペランドのサイズだけ変位をスケーリングする必要がある）。
【０１１１】
即値フィールド７７２は、上で説明したように演算する。
【０１１２】
フルオペコードフィールド
図８Ｂは、本発明の１つの実施形態による、フルオペコードフィールド７７４を構成する特有のベクトルフレンドリー命令フォーマット８００のフィールドを例示するブロック図である。具体的には、フルオペコードフィールド７７４は、フォーマットフィールド７４０と、ベース演算フィールド７４２と、データ要素幅（Ｗ）フィールド７６４とを含む。ベース演算フィールド７４２は、接頭辞符号化フィールド８２５と、オペコードマップフィールド８１５と、リアルオペコードフィールド８３０とを含む。
【０１１３】
レジスタインデックスフィールド
図８Ｃは、本発明の１つの実施形態による、レジスタインデックスフィールド７４４を構成する特有のベクトルフレンドリー命令フォーマット８００のフィールドを例示するブロック図である。具体的には、レジスタインデックスフィールド７４４は、ＲＥＸフィールド８０５と、ＲＥＸ'フィールド８１０と、ＭＯＤＲ／Ｍ．Ｒｅｇフィールド８４４と、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド８４６と、ＷＷフィールド８２０と、ｘｘｘフィールド８５４と、ｂｂｂフィールド８５６とを含む。
【０１１４】
拡大演算フィールド
図８Ｄは、本発明の１つの実施形態による、拡大演算フィールド７５０を構成する特有のベクトルフレンドリー命令フォーマット８００のフィールドを示すブロック図である。クラス（Ｕ）フィールド７６８が、０を含むときには、ＥＶＥＸ．Ｕ０（クラスＡ  ７６８Ａ）を示し、１を含むときには、ＥＶＥＸ．Ｕ１（クラスＢ  ７６８Ｂ）を示す。Ｕ＝０で、かつＭＯＤフィールド８４２が１１を含む（非メモリアクセス演算を示す）ときに、アルファフィールド７５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、ｒｓフィールド７５２Ａとして解釈される。ｒｓフィールド７５２Ａが１を含むとき（ラウンド７５２Ａ．１）に、ベータフィールド７５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ラウンド制御フィールド７５４Ａとして解釈される。ラウンド制御フィールド７５４Ａは、１ビットのＳＡＥフィールド７５６、および２ビットのラウンド演算フィールド７５８を含む。ｒｓフィールド７５２Ａが０を含むとき（データ変換７５２Ａ．２）に、ベータフィールド７５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ変換フィールド７５４Ｂとして解釈される。Ｕ＝０で、かつＭＯＤフィールド８４２が００、０１、または１０を含む（メモリアクセス演算を示す）ときに、アルファフィールド７５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、エビクションヒント（ＥＨ）フィールド７５２Ｂとして解釈され、ベータフィールド７５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ操作フィールド７５４Ｃとして解釈される。
【０１１５】
Ｕ＝１のときに、アルファフィールド７５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、書き込みマスク制御（Ｚ）フィールド７５２Ｃとして解釈される。Ｕ＝１で、かつＭＯＤフィールド８４２が１１を含む（非メモリアクセス演算を示す）ときに、ベータフィールド７５４（ＥＶＥＸバイト３、ビット［４］―Ｓ０）の一部は、ＲＬフィールド７５７Ａとして解釈され、１を含む（ラウンド７５７Ａ．１）ときには、ベータフィールド７５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）の残りは、ラウンド演算フィールド７５９Ａとして解釈され、一方で、ＲＬフィールド７５７Ａが０を含む（ＶＳＩＺＥ７５７．Ａ２）ときに、ベータフィールド７５４（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）の残りは、ベクトル長フィールド７５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）として解釈される。Ｕ＝１で、かつＭＯＤフィールド８４２が００、０１、または１０（メモリアクセス演算を示す）を含むときに、ベータフィールド７５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド７５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）およびブロードキャストフィールド７５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）として解釈される。例示的なレジスタアーキテクチャ図９は、本発明の１つの実施形態による、レジスタアーキテクチャ９００のブロック図である。例示される実施形態では、５１２ビット幅である３２個のベクトルレジスタ９１０があり、これらのレジスタは、ｚｍｍ０〜ｚｍｍ３１として参照される。下位１６個のｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０〜１６にオーバーレイされる。下位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０〜１５にオーバーレイされる。特有のベクトルフレンドリー命令フォーマット８００は、下の表６に例示されるように、オーバーレイされたレジスタファイルに対して演算する。
【表６】
0006773378.tif 000007
【０１１６】
換言すれば、ベクトル長フィールド７５９Ｂは、最大長さおよび１つまたは複数の他のより短い長さから選択し、ここで、各々のそのようなより短い長さは、先行する長さの半分の長さであり、ベクトル長フィールド７５９Ｂを伴わない命令テンプレートは、最大ベクトル長に対して演算する。更に、１つの実施形態において、特有のベクトルフレンドリー命令フォーマット８００のクラスＢ命令テンプレートは、パックドまたはスカラ単精度／倍精度浮動小数点データ、およびパックドまたはスカラ整数データに対して演算する。スカラ演算は、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタにおける最下位データ要素位置に対して行われる演算であり、高位データ要素位置は、実施形態に応じて、該位置が命令の前の位置と同じままであるか、またはゼロにされるかのいずれかである。
【０１１７】
書き込みマスクレジスタ９１５−例示される実施形態では、８つの書き込みマスクレジスタ（ｋ０〜ｋ７）があり、各々が６４ビットのサイズである。代替の実施形態において、書き込みマスクレジスタ９１５は、１６ビットのサイズである。上で説明したように、本発明の１つの実施形態において、ベクトルマスクレジスタｋ０は、書き込みマスクとして使用することができず、通常ｋ０を示す符号化が書き込みマスクに使用されるときには、０ｘＦＦＦＦのハードワイヤード書き込みマスクを選択し、その命令に対する書き込みマスキングを効果的に無効にする。
【０１１８】
汎用レジスタ９２５−例示される実施形態において、アドレスメモリオペランドに対する既存のｘ８６アドレッシングモードと共に使用される、１６個の６４ビット汎用レジスタが存在する。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰという名称、およびＲ８〜Ｒ１５によって参照される。
【０１１９】
ＭＭＸパックド整数フラットレジスタファイル９５０に別名化される、スカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）９４５−例示される実施形態において、ｘ８７スタックは、ｘ８７命令セット拡張を使用して、３２／６４／８０ビット浮動小数点データに対してスカラ浮動小数点演算を行うために使用される８要素スタックであり、一方で、ＭＭＸレジスタは、６４ビットパックド整数データに対して演算を行うために、ならびにＭＭＸ〜ＸＭＭレジスタの間で行われるいくつかの演算のオペランドを保持するために使用される。
【０１２０】
代替の実施形態は、より広いまたはより狭いレジスタを使用することができる。加えて、代替の実施形態は、より多い、より少ない、または異なるレジスタファイルおよびレジスタを使用することができる。
【０１２１】
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ
プロセッサコアは、異なる方法で、異なる目的で、および異なるプロセッサで実装することができる。例えば、そのようなコアの実装形態としては、１）汎用コンピューティングを意図する汎用インオーダーコア、２）汎用コンピューティングを意図する高性能汎用アウトオブオーダーコア、３）グラフィクスおよび／または科学的（スループット）演算を主として意図する専用コア、が挙げられる。異なるプロセッサの実装形態としては、１）汎用コンピューティングを意図する１つまたは複数の汎用インオーダーコア、および／または汎用コンピューティングを意図する１つまたは複数の汎用アウトオブオーダーコアを含むＣＰＵ、および２）グラフィクスおよび／またはサイエンス（スループット）を主として意図する１つまたは複数の専用コアを含むコプロセッサ、が挙げられる。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、該アーキテクチャとしては、１）ＣＰＵとは別のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージの中の別のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、あるときには、統合グラフィクスおよび／または科学的（スループット）論理などの専用論理、または専用コアと称される）、および４）同じダイ上に、説明したＣＰＵ（あるときには、アプリケーションコア（複数可）またはアプリケーションプロセッサ（複数可）と称される）、上で説明したコプロセッサ、および追加の機能性を含むことができる、システムオンチップ、が挙げられる。例示的なコアアーキテクチャを次に説明し、続いて、例示的なプロセッサおよびコンピュータアーキテクチャを説明する。
【０１２２】
例示的なコアアーキテクチャインオーダーコアおよびアウトオブオーダーコアのブロック図
図１０Ａは、一実施形態による、例示的なインオーダーパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダー発行／実行パイプラインの両方を例示するブロック図である。図１０Ｂは、一実施形態によるプロセッサに含まれるように、インオーダーアーキテクチャコアの例示的な実施形態、および例示的なレジスタリネーミング、アウトオブオーダー発行／実行アーキテクチャコアの両方を例示するブロック図である。図１０Ａ〜１０Ｂにおいて実線で囲まれたボックスは、インオーダーパイプラインおよびインオーダーコアを例示し、一方で、破線で囲まれたボックスの随意の追加は、レジスタリネーミング、アウトオブオーダー発行／実行パイプラインおよびコアを例示する。インオーダーの態様がアウトオブオーダーの態様のサブセットであることから、アウトオブオーダーの態様を説明する。
【０１２３】
図１０Ａにおいて、プロセッサパイプライン１０００は、フェッチステージ１００２と、長さ復号化ステージ１００４と、復号化ステージ１００６と、割り当てステージ１００８と、リネーミングステージ１０１０と、スケジューリング（ディスパッチまたは発行としても知られる）ステージ１０１２と、レジスタ読み取り／メモリ読み取りステージ１０１４と、実行ステージ１０１６と、書き戻し／メモリ書き込みステージ１０１８と、例外処理ステージ１０２２と、コミットステージ１０２４とを含む。
【０１２４】
図１０Ｂは、実行エンジンユニット１０５０に結合されたフロントエンドユニット１０３０を含み、どちらのユニットもメモリユニット１０７０に結合される、プロセッサコア１０９０を示す。コア１０９０は、縮小命令セットコンピューティング（ＲＩＳＣ：ｒｅｄｕｃｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｉｎｇ）コア、複合命令セットコンピューティング（ＣＩＳＣ：ｃｏｍｐｌｅｘ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｉｎｇ）コア、超長命令語（ＶＬＩＷ：ｖｅｒｙ  ｌｏｎｇ  ｉｎｓｔｒｕｃｔｉｏｎ  ｗｏｒｄ）コア、またはハイブリッドもしくは代替のコアタイプとすることができる。更に別のオプションとして、コア１０９０は、例えばネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット（ＧＰＧＰＵ：ｇｅｎｅｒａｌ  ｐｕｒｐｏｓｅ  ｃｏｍｐｕｔｉｎｇ  ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）コア、グラフィックスコア、または同類のものなどの、専用コアとすることができる。
【０１２５】
フロントエンドユニット１０３０は、命令キャッシュユニット１０３４に結合された分岐予測ユニット１０３２を含み、これが命令翻訳ルックアサイドバッファ（ＴＬＢ：ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）１０３６に結合され、これが命令フェッチユニット１０３８に係合され、これが復号化ユニット１０４０に結合される。復号化ユニット１０４０（または復号器）は、命令を復号化し、また、出力として、１つまたは複数のマイクロ演算、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を生成することができ、これらは、元々の命令から復号化され、または別様には該命令を反映し、または該命令から導出される。復号化ユニット１０４０は、様々な異なる機構を使用して実装することができる。適切な機構の例としては、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ（ＰＬＡ：ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ａｒｒａｙ）、マイクロコードリードオンリーメモリ（ＲＯＭ：ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ）、その他が挙げられるが、これらに限定されない。１つの実施形態において、コア１０９０は、或るマクロ命令のマイクロコードを記憶するマイクロコードＲＯＭまたは他の媒体を（例えば、復号化ユニット１０４０または別様にはフロントエンドユニット１０３０の中に）含む。復号化ユニット１０４０は、実行エンジンユニット１０５０の中のリネーム／アロケーターユニット１０５２に連結される。
【０１２６】
実行エンジンユニット１０５０は、リタイアメントユニット１０５４に結合されたリネーム／アロケーターユニット１０５２、および一組の１つまたは複数のスケジューラユニット（複数可）１０５６を含む。スケジューラユニット（複数可）１０５６は、リザベーションステーション、中央命令ウインドウ、その他を含む、任意の数の異なるスケジューラを表す。スケジューラユニット（複数可）１０５６は、物理レジスタファイル（複数可）ユニット（複数可）１０５８に結合される。物理レジスタファイル（複数可）ユニット１０５８の各々は、１つまたは複数の物理レジスタファイルを表し、その異なるものが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）、その他などの、１つまたは複数の異なるデータタイプを記憶する。１つの実施形態において、物理レジスタファイル（複数可）ユニット１０５８は、ベクトルレジスタユニットと、書き込みマスクレジスタユニットと、スカラレジスタユニットとを備える。これらのレジスタユニットは、アーキテクチャ上のベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイル（複数可）ユニット（複数可）１０５８は、様々な方法を例示するために、リタイアメントユニット１０５４によってオーバーラップされ、該方法では、（例えば、リオーダーバッファ（複数可）およびリタイアレジスタファイル（複数可）を使用して、フューチャーファイル（複数可）、ヒストリーファイル（複数可）、およびリタイアレジスタファイル（複数可）を使用して、レジスタマップおよびレジスタのプールを使用して、その他によって）レジスタリネーミングおよびアウトオブオーダーの実行を実装することができる。リタイアメントユニット１０５４および物理レジスタファイル（複数可）ユニット（複数可）１０５８は、実行クラスタ（複数可）１０６０に結合される。実行クラスタ（複数可）１０６０は、一組の１つまたは複数の実行ユニット１０６２、および一組の１つまたは複数のメモリアクセスユニット１０６４を含む。実行ユニット１０６２は、様々な演算（例えば、シフト、加算、減算、乗算）を、様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して行うことができる。いくつかの実施形態は、特定の機能または一組の機能に専用のいくつかの実行ユニットを含むことができるが、他の実施形態は、すべての関数をすべて行う唯一の実行ユニットまたは多数の実行ユニットを含むことができる。スケジューラユニット（複数可）１０５６、物理レジスタファイル（複数可）ユニット（複数可）１０５８、および実行クラスタ（複数可）１０６０は、或る実施形態が或るタイプのデータ／演算について個別のパイプラインを生成するので、場合により、複数として示される（例えば、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプラインであり、各々が、それら自体のスケジューラユニット、物理レジスタファイル（複数可）ユニット、および／または実行クラスタを有し、個別のメモリアクセスパイプラインの場合において、或る実施形態は、このパイプラインの実行クラスタだけがメモリアクセスユニット（複数可）１０６４を有して実装される）。また、個別のパイプラインが使用される場合、これらのパイプラインのうち１つまたは複数をアウトオブオーダー発行／実行とし、残りをインオーダーとすることができることも理解されたい。
【０１２７】
一組のメモリアクセスユニット１０６４は、メモリユニット１０７０に結合され、該メモリユニットは、レベル２（Ｌ２）キャッシュユニット１０７６に結合されたデータキャッシュユニット１０７４に結合されたデータＴＬＢユニット１０７２を含む。１つの例示的な実施形態において、メモリアクセスユニット１０６４は、ロードユニットと、ストアアドレスユニットと、ストアデータユニットとを含むことができ、これらの各々が、メモリユニット１０７０の中のデータＴＬＢユニット１０７２に結合される。命令キャッシュユニット１０３４は、メモリユニット１０７０のレベル２（Ｌ２）キャッシュ部１０７６に更に結合される。Ｌ２キャッシュユニット１０７６は、１つまたは複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【０１２８】
一例として、例示的なレジスタリネーミング、アウトオブオーダー発行／実行コアアーキテクチャは、次のようにパイプライン１０００を実装することができる。１）命令フェッチ１０３８が、フェッチステージ１００２および長さ復号化ステージ１００４を行う、２）復号化ユニット１０４０が、復号化ステージ１００６を行う、３）リネーム／アロケーターユニット１０５２が、割り当てステージ１００８およびリネーミングステージ１０１０を行う、４）スケジューラユニット（複数可）１０５６が、スケジュールステージ１０１２を行う、５）物理レジスタファイル（複数可）ユニット（複数可）１０５８およびメモリユニット１０７０が、レジスタ読み取り／メモリ読み取りステージ１０１４を行う、実行クラスタ１０６０が、実行ステージ１０１６を行う、６）メモリユニット１０７０および物理レジスタファイル（複数可）ユニット（複数可）１０５８が、書き戻し／メモリ書き込みステージ１０１８を行う、７）様々なユニットが、例外処理ステージ１０２２に関与することができ、および８）リタイアメントユニット１０５４および物理レジスタファイル（複数可）ユニット（複数可）１０５８が、コミットステージ１０２４を行う。
【０１２９】
コア１０９０は、本明細書で説明される命令（複数可）を含む、１つまたは複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンで追加された、いくつかの拡張を有する）、ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ（Ｓｕｎｎｙｖａｌｅ、ＣＡ）のＭＩＰＳ命令セット、ＡＲＭ  Ｈｏｌｄｉｎｇｓ（Ｓａｎ  Ｊｏｓｅ、ＣＡ）のＡＲＭ命令セット（ＮＥＯＮなどの随意の追加の拡張を有する））をサポートすることができる。１つの実施形態において、コア１０９０は、パックドデータ命令セット拡張をサポートするための論理（例えば、先に説明したＡＶＸ１、ＡＶＸ２、および／または一般的ベクトルフレンドリー命令フォーマットのいくつかの形態（Ｕ＝０および／またはＵ＝１）を含み、それによって、数多くのマルチメディアアプリケーションによって使用される演算を、パックドデータを使用して行うことを可能にする。
【０１３０】
コアが、マルチスレッディング（２つまたはそれ以上の並列の一組の演算またはスレッドを実行すること）をサポートすることができ、また、タイムスライスドマルチスレッディング、同時マルチスレッディング（単一の物理コアが、物理コアが同時にマルチスレッディングしているスレッドの各々のための論理コアを提供する）、またはこれらの組み合わせ（例えば、Ｉｎｔｅｌ（登録商標）ハイパースレッディングテクノロジーなどの、その後の、タイムスライスドフェッチおよび復号化、ならびにその後の同時マルチスレッディング）を含む、様々な方法でサポートすることができることを理解されたい。
【０１３１】
レジスタリネーミングは、アウトオブオーダー実行のコンテキストにおいて説明されるが、レジスタリネーミングは、インオーダーアーキテクチャで使用することができることを理解されたい。プロセッサの例示される実施形態はまた、個別の命令キャッシュユニット１０３４およびデータキャッシュユニット１０７４、ならびに共有Ｌ２キャッシュユニット１０７６を含むが、代替の実施形態は、例えばレベル１（Ｌ１）内部キャッシュまたは複数レベルの内部キャッシュなどの、命令およびデータの両方のための単一の内部キャッシュを有することができる。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含むことができる。代替的に、キャッシュのすべてをコアおよび／またはプロセッサの外部とすることができる。
【０１３２】
具体的で例示的なインオーダーコアアーキテクチャ
図１１Ａ〜１１Ｂは、より具体的で例示的なインオーダーコアアーキテクチャのブロック図を示し、該コアは、チップの中のいくつかの論理ブロックのうちの１つ（同じタイプおよび／または異なるタイプの他のコアを含む）である。論理ブロックは、アプリケーションに応じて、高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を通して、いくつかの固定機能論理、メモリＩ／Ｏインターフェース、および他の必要なＩ／Ｏ論理と通信する。
【０１３３】
図１１Ａは、一実施形態による、オンダイの相互接続ネットワーク１１０２への接続およびレベル２（Ｌ２）キャッシュ１１０４のそのローカルサブセットと共に、単一のプロセッサコアのブロック図である。１つの実施形態において、命令復号器１１００は、パックドデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ１１０６は、スカラおよびベクトルユニットの中のキャッシュメモリへの低遅延アクセスを可能とする。１つの実施形態において（設計を単純化するために）、スカラユニット１１０８およびベクトルユニット１１１０は、個別のレジスタセット（それぞれ、スカラレジスタ１１１２およびベクトルレジスタ１１１４）を使用し、それらの間で転送されるデータがメモリに書き込まれ、次いで、レベル１（Ｌ１）キャッシュ１１０６から読み戻されるが、代替の実施形態は、異なる手法（例えば、単一のレジスタセットを使用するか、またはデータを、書き込みおよび読み戻しを行うことなく２つのレジスタファイル間で転送することを可能にする通信パスを含む）を使用することができる。
【０１３４】
Ｌ２キャッシュ１１０４のローカルサブセットは、１プロセッサコアあたり、個別のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュ１１０４のそれ自体のローカルサブセットへの直接アクセス経路を有する。プロセッサコアにより読み取られたデータは、そのＬ２キャッシュのサブセット１１０４に記憶され、他のプロセッサコアがそれら自体のローカルＬ２キャッシュのサブセットにアクセスすることと並行して、迅速にアクセスすることができる。プロセッサコアにより書き込まれたデータは、それ自体のＬ２キャッシュのサブセット１１０４に記憶され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシーを確実にする。リングネットワークは、プロセッサコア、Ｌ２キャッシュ、および他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能にするために、双方向性である。各リングデータパスは、１方向あたり１０１２ビット幅である。
【０１３５】
図１１Ｂは、一実施形態による、図１１Ａのプロセッサコアの部分拡大図である。図１１Ｂは、Ｌ１キャッシュ１１０４のＬ１データキャッシュ１１０６Ａ部分、ならびにベクトルユニット１１１０およびベクトルレジスタ１１１４に関する更なる詳細を含む。具体的には、ベクトルユニット１１１０は、１６幅のベクトル処理ユニット（ＶＰＵ：ｖｅｃｔｏｒ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）（１６幅のＡＬＵ１１２８を参照されたい）であり、整数、単精度浮動小数点、倍精度浮動小数点命令のうち１つまたは複数を実行する。ＶＰＵは、スウィズルユニット１１２０によるレジスタ入力のスウィズリング、数値変換ユニット１１２２Ａ〜Ｂによる数値変換、およびメモリ入力に対する複製ユニット１１２４による複製をサポートする。書き込みマスクレジスタ１１２６は、結果として生じるベクトル書き込みをプレディケートすることを可能にする。
【０１３６】
統合メモリコントローラおよび専用論理を有するプロセッサ
図１２は、一実施形態による、２つ以上のコアを有することができ、統合メモリコントローラを有することができ、また、統合グラフィクスを有することができる、プロセッサ１２００のブロック図である。図１２において実線で囲まれたボックスは、単一のコア１２０２Ａと、システムエージェント１２１０と、一組の１つまたは複数のバスコントローラユニット１２１６とを有するプロセッサ１２００を示し、一方で、破線で囲まれたボックスの随意の追加部分は、多数のコア１２０２Ａ〜Ｎと、システムエージェントユニット１２１０の中の一組の１つまたは複数の統合メモリコントローラユニット（複数可）１２１４と、専用論理１２０８とを有する代替のプロセッサ１２００を示す。
【０１３７】
したがって、プロセッサ１２００の異なる実装形態は、１）専用論理１２０８が統合グラフィックスおよび／または科学的（スループット）論理（１つまたは複数のコアを含むことができる）であり、コア１２０２Ａ〜Ｎが１つまたは複数の汎用コア（例えば、汎用インオーダーコア、汎用アウトオブオーダーコア、これらの２つの組み合わせ）である、ＣＰＵと、２）コア１２０２Ａ〜Ｎが主としてグラフィクスおよび／または科学的（スループット）を意図する多数の専用コアである、コプロセッサと、３）コア１２０２Ａ〜Ｎが多数の汎用インオーダーコアである、コプロセッサと、を含むことができる。したがって、プロセッサ１２００は、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット：ｇｅｎｅｒａｌ  ｐｕｒｐｏｓｅ  ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）、ハイスループットのメニーインテグレーテッドコア（ＭＩＣ：ｍａｎｙ  ｉｎｔｅｇｒａｔｅｄ  ｃｏｒｅ）コプロセッサ（３０個以上のコアを含む）、組み込みプロセッサ、または同類のものなどの、汎用プロセッサ、コプロセッサ、または専用プロセッサとすることができる。プロセッサは、１つまたは複数のチップ上に実装することができる。プロセッサ１２００は、例えばＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどの、いくつかの処理技術のうちのいずれかを使用して、１つまたは複数の基板の一部とすること、および／またはその上に実装することができる。
【０１３８】
メモリ階層は、コア内の１つまたは複数のレベルのキャッシュと、一組の１つまたは複数の共有キャッシュユニット１２０６と、一組の統合メモリコントローラユニット１２１４に結合された外部メモリ（図示せず）とを含む。一組の共用キャッシュユニット１２０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ：ｌａｓｔ  ｌｅｖｅｌ  ｃａｃｈｅ）、および／またはこれらの組み合わせなどの、１つまたは複数の中間レベルのキャッシュを含むことができる。１つの実施形態において、リングベースの相互接続ユニット１２１２は、統合グラフィック論理１２０８、一組の共有キャッシュユニット１２０６、およびシステムエージェントユニット１２１０／統合メモリコントローラユニット（複数可）１２１４を相互接続するが、代替の実施形態は、そのようなユニットを相互接続するための任意の数の既知の技術を使用することができる。１つの実施形態において、コヒーレンシーは、１つまたは複数のキャッシュユニット１２０６とコア１２０２Ａ〜Ｎとの間で維持される。
【０１３９】
いくつかの実施形態において、コア１２０２Ａ〜Ｎのうちの１つまたは複数は、マルチスレッドを行うことができる。システムエージェント１２１０は、コア１２０２Ａ〜Ｎの協調および演算を行う構成要素を含む。システムエージェントユニット１２１０は、例えば、電力制御ユニット（ＰＣＵ：ｐｏｗｅｒ  ｃｏｎｔｒｏｌ  ｕｎｉｔ）およびディスプレイユニットを含むことができる。ＰＣＵは、コア１２０２Ａ〜Ｎおよび統合グラフィックス論理１２０８の電力状態を調節するために必要な論理および構成要素とするか、または該構成要素を含むことができる。ディスプレイユニットは、１つまたは複数の外部接続ディスプレイを駆動するためのものである。
【０１４０】
コア１２０２Ａ〜Ｎは、アーキテクチャ命令セットに関して同種または異種とすることができ、すなわち、コア１２０２Ａ〜Ｎのうちの２つ以上は、同じ命令セットを実行することができ、一方で、他のものは、その命令セットのサブセットまたは異なる命令セットだけを実行することができる。
【０１４１】
例示的なコンピュータアーキテクチャ
図１３〜図１６は、例示的なコンピュータアーキテクチャのブロック図である。また、ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ：ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ）、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤー、ハンドヘルドデバイス、および様々な他の電子デバイスのための、当技術分野において知られている他のシステム設計および構成も適している。全般に、本明細書で開示されるプロセッサおよび／または他の実行論理を組み込むことができる多様なシステムまたは電子デバイスが一般的に適している。
【０１４２】
次に図１３を参照すると、本発明の一実施形態による、システム１３００のブロック図が示される。システム１３００は、コントローラハブ１３２０に結合される、１つまたは複数のプロセッサ１３１０、１３１５を含むことができる。１つの実施形態において、コントローラハブ１３２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ：ｇｒａｐｈｉｃｓ  ｍｅｍｏｒｙ  ｃｏｎｔｒｏｌｌｅｒ  ｈｕｂ）１３９０および入力／出力ハブ（ＩＯＨ：Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｈｕｂ）１３５０（個別のチップ上にあってよい）を含み、ＧＭＣＨ１３９０は、メモリ１３４０およびコプロセッサ１３４５に結合されるメモリコントローラおよびグラフィックスコントローラを含み、ＩＯＨ１３５０は、入力／出力（Ｉ／Ｏ：ｉｎｐｕｔ／ｏｕｔｐｕｔ）デバイス１３６０をＧＭＣＨ１３９０に結合する。代替的に、メモリコントローラおよびグラフィックスコントローラの一方または両方は、（本明細書で説明されるように）プロセッサ内に統合され、メモリ１３４０およびコプロセッサ１３４５は、プロセッサ１３１０、およびＩＯＨ１３５０を有する単一のチップの中のコントローラハブ１３２０に直接結合される。
【０１４３】
図１３では、追加のプロセッサ１３１５の随意の性質が破線で示される。各プロセッサ１３１０、１３１５は、本明細書で説明される処理コアのうち１つまたは複数を含むことができ、また、いくつかのバージョンのプロセッサ１２００とすることができる。
【０１４４】
メモリ１３４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ：ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、相変化メモリ（ＰＣＭ：ｐｈａｓｅ  ｃｈａｎｇｅ  ｍｅｍｏｒｙ）、または２つの組み合わせとすることができる。少なくとも１つの実施形態について、コントローラハブ１３２０は、フロントサイドバス（ＦＳＢ：ｆｒｏｎｔｓｉｄｅ  ｂｕｓ）などのマルチドロップバス、クイックパスインターコネクト（ＱＰＩ：ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）などのポイントツーポイントインターフェース、または類似する接続１３９５を介して、プロセッサ（複数可）１３１０、１３１５と通信する。
【０１４５】
１つの実施形態において、コプロセッサ１３４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ、または同類のものなどの、専用プロセッサである。１つの実施形態において、コントローラハブ１３２０は、統合グラフィックスアクセラレータを含むことができる。
【０１４６】
物理リソース１３１０、１３１５の間には、アーキテクチャ上の特性、マイクロアーキテクチャ上の特性、熱的特性、電力消費特性、および同類のもの含む、様々な利点のメトリクスに関して、様々な相違があり得る。
【０１４７】
１つの実施形態において、プロセッサ１３１０は、一般的なタイプのデータ処理演算を制御する命令を実行する。命令内には、コプロセッサ命令を埋め込むことができる。プロセッサ１３１０は、これらのコプロセッサ命令を、付加コプロセッサ１３４５によって実行されるべきタイプのものであると認識する。故に、プロセッサ１３１０は、コプロセッサバスまたは他の相互接続に対するこれらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）をコプロセッサ１３４５に発行する。コプロセッサ（複数可）１３４５は、受信したコプロセッサ命令を受け付け、実行する。
【０１４８】
次に図１４を参照すると、本発明の一実施形態による、第１のより具体的で例示的なシステム１４００のブロック図が示される。図１４に示されるように、マルチプロセッサシステム１４００は、ポイントツーポイント相互接続システムであり、また、ポイントツーポイント相互接続１４５０を介して結合される第１のプロセッサ１４７０および第２のプロセッサ１４８０を含む。プロセッサ１４７０および１４８０の各々は、いくつかのバージョンのプロセッサ１２００とすることができる。本発明の１つの実施形態において、プロセッサ１４７０および１４８０は、それぞれプロセッサ１３１０および１３１５であり、一方で、コプロセッサ１４３８は、コプロセッサ１３４５である。別の実施形態において、プロセッサ１４７０および１４８０は、それぞれ、プロセッサ１３１０コプロセッサ１３４５である。
【０１４９】
プロセッサ１４７０および１４８０は、それぞれ、統合メモリコントローラ（ＩＭＣ：ｉｎｔｅｇｒａｔｅｄ  ｍｅｍｏｒｙ  ｃｏｎｔｒｏｌｌｅｒ）ユニット１４７２および１４８２を含んで示される。プロセッサ１４７０はまた、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ：ｐｏｉｎｔ−ｔｏ−ｐｏｉｎｔ）インターフェース１４７６および１４７８も含み、同様に、第２プロセッサ１４８０は、Ｐ−Ｐインターフェース１４８６および１４８８を含む。プロセッサ１４７０、１４８０は、ポイントツーポイント（Ｐ−Ｐ）インターフェース回路１４７８、１４８８を使用して、Ｐ−Ｐインターフェース１４５０を介して情報を交換することができる。図１４に示されるように、ＩＭＣ１４７２および１４８２は、プロセッサをそれぞれのメモリ、すなわちメモリ１４３２およびメモリ１４３４に結合し、該メモリは、それぞれのプロセッサにローカルに付加されたメインメモリの一部分とすることができる。
【０１５０】
プロセッサ１４７０、１４８０は、各々、ポイントツーポイントインターフェース回路１４７６、１４９４、１４８６、１４９８を使用して、個々のＰ−Ｐインターフェース１４５２、１４５４を介してチップセット１４９０と情報を交換することができる。チップセット１４９０は、随意に、高性能インターフェース１４３９を介してコプロセッサ１４３８と情報を交換することができる。１つの実施形態において、コプロセッサ１４３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ、または同類のものなどの、専用プロセッサである。
【０１５１】
共有キャッシュ（図示せず）は、どちらかのプロセッサに、または両方のプロセッサの外部に含むこと、更には、Ｐ−Ｐ相互接続を介してプロセッサと接続することができ、よって、プロセッサが低電力モードに置かれた場合に、一方または両方のプロセッサのローカルキャッシュ情報を共有キャッシュに記憶することができる。
【０１５２】
チップセット１４９０は、インターフェース１４９６を介して第１のバス１４１６に結合することができる。１つの実施形態において、第１のバス１４１６は、周辺構成要素相互接続（ＰＣＩ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス、またはＰＣＩエクスプレスバスもしくは別の第３世代Ｉ／Ｏ相互接続バスなどのバスとすることができるが、本発明の範囲は、そのように限定されるものではない。
【０１５３】
図１４に示されるように、第１のバス１４１６を第２のバス１４２０に結合するバスブリッジ１４１８と共に、様々なＩ／Ｏデバイス１４１４を第１のバス１４１６に結合することができる。１つの実施形態では、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ：ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｉｎｇ）ユニットなど）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどの、１つまたは複数の追加のプロセッサ１４１５が第１のバス１４１６に結合される。１つの実施形態において、第２のバス１４２０は、ローピンカウント（ＬＰＣ：ｌｏｗ  ｐｉｎ  ｃｏｕｎｔ）バスとすることができる。１つの実施形態では、例えば、キーボードおよび／またはマウス１４２２、通信デバイス１４２７、ならびに命令／コードおよびデータ１４３０を含むことができるディスクドライブまたは他の大容量記憶デバイスなどの記憶ユニット１４２８を含む、様々なデバイスを第２のバス１４２０に結合することができる。更に、オーディオＩ／Ｏ１４２４を第２のバス１４２０に結合することができる。他のアーキテクチャが可能であることに留意されたい。例えば、図１４のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装することができる。
【０１５４】
以下、図１５を参照すると、本発明の一実施形態による、第２のより具体的で例示的なシステム１５００のブロック図が示される。図１４および図１５における同様の要素は、同様の参照符合を有し、図１４の或る態様は、図１５の他の態様を不明瞭にすることを回避するために、図１５から省略されている。
【０１５５】
図１５は、プロセッサ１４７０、１４８０が、ぞれぞれ、統合メモリおよびＩ／Ｏ制御論理（「ＣＬ」：ｃｏｎｔｒｏｌ  ｌｏｇｉｃ）１４７２および１４８２を含むことができることを示す。したがって、ＣＬ１４７２、１４８２は、統合メモリコントローラユニットを含み、また、Ｉ／Ｏ制御論理を含む。図１５は、メモリ１４３２、１４３４がＣＬ１４７２、１４８２に結合されることだけではなく、Ｉ／Ｏデバイス１５１４が制御論理１４７２、１４８２に結合されることも示す。レガシーＩ／Ｏデバイス１５１５は、チップセット１４９０に結合される。
【０１５６】
以下、図１６を参照すると、本発明の一実施形態による、ＳｏＣ１６００のブロック図が示される。図１２における同様の要素は、同様の参照符合を有する。また、破線で囲んだボックスは、より高度なＳｏＣ上の随意の特徴である。図１６において、相互接続ユニット１６０２は、一組の１つまたは複数のコア１２０２Ａ〜Ｎおよび共有キャッシュユニット１２０６を含むアプリケーションプロセッサ１６１０、システムエージェントユニット１２１０、バスコントローラユニット１２１６、統合メモリコントローラユニット（複数可）１２１４、統合グラフィックス論理、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含むことができる一組の１つまたは複数のコプロセッサ１６２０、スタティックランダムアクセスメモリ（ＳＲＡＭ：ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）ユニット１６３０、ダイレクトメモリアクセス（ＤＭＡ：ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）ユニット１６３２、および１つまたは複数の外部ディスプレイに結合するためのディスプレイユニット１６４０、に結合される。１つの実施形態において、コプロセッサ（複数可）１６２０としては、例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組み込みプロセッサ、または同類のものなどの、専用プロセッサが挙げられる。
【０１５７】
本明細書で開示される機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装形態の手法の組み合わせで実装される。実施形態は、少なくとも１つのプロセッサ、記憶システム（揮発性および不揮発性メモリおよび／または記憶要素を含む）、少なくとも１つの入力デバイス、ならびに少なくとも１つの出力デバイスを備えるプログラムマブルシステム上で実行する、コンピュータプログラムまたはプログラムコードとして実装される。
【０１５８】
命令を入力して、本明細書で説明される機能を行い、出力情報を生成するために、図１４に例示されるコード１４３０などのプログラムコードを適用することができる。出力情報は、既知の方法で１つまたは複数の出力デバイスに適用することができる。このアプリケーションの目的で、処理システムとしては、例えば、デジタル信号プロセッサ（ＤＳＰ：ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ：ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）、またはマイクロプロセッサなどのプロセッサを有する、任意のシステムが挙げられる。
【０１５９】
プログラムコードは、処理システムと通信するために、高水準手続き型またはオブジェクト指向プログラミング言語で実装することができる。プログラムコードはまた、所望であれば、アセンブリ言語または機械言語で実装することもできる。実際には、本明細書で説明される機構は、いかなる特定のプログラミング言語にも範囲が限定されない。いずれの場合においても、言語は、コンパイル型言語またはインタプリタ型言語とすることができる。
【０１６０】
少なくとも１つの実施形態の１つまたは複数の態様は、機械によって読み込まれたときに、機械に、論理を作り上げさせて本明細書で説明される技術を行う、プロセッサ内の様々な論理を表す機械可読媒体に記憶された代表的な命令によって実装することができる。「ＩＰコア」として知られているそのような表現は、論理またはプロセッサを実際になす製作機械の中へロードするために、有形の機械可読媒体に記憶され、様々な顧客または製造工場に供給することができる。
【０１６１】
そのような機械可読記憶媒体としては、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリーメモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｋ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｉｅｓ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ：ｃｏｍｐａｃｔ  ｄｉｓｋ  ｒｅｗｒｉｔａｂｌｅ）、および磁気光ディスクを含む任意の他の種類のディスク、リードオンリーメモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ：ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、スタティックランダムアクセスメモリ（ＳＲＡＭ：ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）などのランダムアクセスメモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、消去可能プログラム可能リードオンリーメモリ（ＥＰＲＯＭ：ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｉｅｓ）、フラッシュメモリ、電気的消去可能プログラム可能リードオンリーメモリ（ＥＥＰＲＯＭ：ｅｌｅｃｔｒｉｃａｌｌｙ  ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｉｅｓ）、相変化メモリ（ＰＣＭ：ｐｈａｓｅ  ｃｈａｎｇｅ  ｍｅｍｏｒｙ）等の半導体デバイス、磁気もしくは光カード、または、電子命令を記憶するのに適した任意の他のタイプの媒体、を含む記憶媒体などの、機械またはデバイスによって製造または形成される物品の非一時的な有形の配設が挙げられるが、これらに限定されない。
【０１６２】
故に、一実施形態はまた、本明細書で説明される構造、回路、装置、プロセッサ、および／またはシステムの特徴を定義する、ハードウェア記述言語（ＨＤＬ：Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）などの、命令を含む、または設計データを含む、非一時的有形機械可読媒体も含む。このような実施形態はまた、プログラム製品とも称することができる。
【０１６３】
エミュレーション（バイナリトランスレーション、コードモーフィング、その他を含む）
いくつかの場合では、命令をソース命令セットからターゲット命令セットに変換するために、命令変換器を使用することができる。例えば、命令変換器は、命令を、コアによって処理される１つまたは複数の他の命令に翻訳すること（例えば、静的バイナリ翻訳、動的コンパイルを含む動的バイナリ翻訳を使用する）、モーフィングすること、エミュレートすること、または別様には、変換することができる。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装することができる。命令変換器は、プロセッサ上、プロセッサ外、あるいは一部をプロセッサ上として一部をプロセッサ外とすることができる。
【０１６４】
図１７は、一実施形態による、ソース命令セットの中のバイナリ命令をターゲット命令セットの中のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。例示される実施形態において、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア、あるいはこれらの様々な組み合わせで実装することができる。図１７は、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１７１６によってネイティブに実行することができるｘ８６バイナリコード１７０６を生成するために、ｘ８６コンパイラ１７０４を使用して、高水準言語１７０２のプログラムをコンパイルすることができることを示す。
【０１６５】
少なくとも１つのｘ８６命令セットコアを有するプロセッサ１７１６は、少なくとも１つのｘ８６命令セットコアを有するインテルプロセッサと実質的に同じ結果を達成するために、（１）インテルｘ８６命令セットコアの命令セットのかなりの部分、または（２）少なくとも１つのｘ８６命令セットコアを有するインテルプロセッサ上で作動することを目標とした、オブジェクトコードバージョンのアプリケーションまたは他のソフトウェアを、互換的に実行するかまたは別様には処理することによって、少なくとも１つのｘ８６命令セットコアを有するインテルプロセッサと実質的に同じ機能を行うことができる、任意のプロセッサを表す。ｘ８６コンパイラ１７０４は、追加のリンケージ処理を伴って、または伴わずに、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１７１６を有するプロセッサ上で実行することができるｘ８６バイナリコード１７０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図１７は、少なくとも１つのｘ８６命令セットコアを有しないプロセッサ１７１４（例えば、ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ（Ｓｕｎｎｙｖａｌｅ、ＣＡ）のＭＩＰＳ命令セットを実行し、および／またはＡＲＭ  Ｈｏｌｄｉｎｇｓ（Ｓａｎ  Ｊｏｓｅ、ＣＡ）のＡＲＭ命令セットを実行するコアを有するプロセッサ）によってネイティブに実行することができる代替の命令セットバイナリコード１７１０を生成するために、代替の命令セットコンパイラ１７０８を使用して、高水準言語１７０２のプログラムをコンパイルすることができることを示す。
【０１６６】
命令コンバータ１７１２は、ｘ８６バイナリコード１７０６を、ｘ８６命令セットコアを有しないプロセッサ１７１４によってネイティブに実行することができるコードに変換するために使用される。この変換されたコードは、これを行うことができる命令変換器を作製することが困難であるので、代替の命令セットバイナリコード１７１０と同じものになり難くいが、変換されたコードは、一般的な演算を達成し、代替の命令セットからの命令で構成される。したがって、命令変換器１７１２は、エミュレーション、シミュレーション、または任意の他の処理を通して、ｘ８６命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスが、ｘ８６バイナリコード１７０６を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【０１６７】
上述の明細書では、本発明を、その特定の例示的な実施形態を参照して説明してきた。しかしながら、添付の特許請求の範囲に記載された本発明のより広範な趣旨および範囲から逸脱することなく、様々な修正および変更が行われ得ることが明白になるであろう。故に、本明細書および図面は、限定的な意味ではなく、実例的な意味であるとみなされるべきである。
【０１６８】
本明細書で説明される命令は、或る演算を行うように、または所定の機能性を有するように構成された、特定用途向け集積回路（ＡＳＩＣ）などの特定のハードウェア構成を指す。そのような電子デバイスは、典型的には、１つまたは複数の記憶デバイス（持続性機械読み出し可能記憶媒体）、ユーザ入力／出力デバイス（例えば、キーボード、タッチスクリーン、および／またはディスプレイ）、およびネットワーク接続などの、１つまたは複数の他の構成要素に結合された一組の１つまたは複数のプロセッサを含む。一組のプロセッサおよび他の構成要素の結合は、典型的には、１つまたは複数のバスおよびブリッジ（バスコントローラとも称される）を通してなされる。記憶デバイスおよびネットワークトラフィックを搬送する信号は、それぞれ、１つまたは複数の機械読み出し可能記憶媒体および機械読み出し可能通信媒体を表す。したがって、所与の電子デバイスの記憶デバイスは、典型的には、その電子デバイスの一組の１つまたは複数のプロセッサ上で実行するためのコードおよび／またはデータを記憶する。
【０１６９】
この詳細な説明の全体を通して、説明の目的で、本発明の完全な理解を提供するために、数多くの具体的な詳細を記載した。しかしながら、これらの具体的な詳細の一部を伴わずに本発明が実装され得ることが当業者に明らかになるであろう。しかしながら、当業者には、本発明がこれらの具体的な詳細の一部を伴わずに実施され得ることが明らかになるであろう。ある特定の事例において、本発明の主題を不明瞭にすることを回避するために、よく知られている構造および機能は、きめ細かく説明されていない。故に、本発明の範囲および趣旨は、以下の特許請求の範囲の観点から判断されるべきである。
【図１Ａ】
0006773378.tif 000008
【図１Ｂ】
0006773378.tif 000009
【図２Ａ】
0006773378.tif 000010
【図２Ｂ】
0006773378.tif 000011
【図３】
0006773378.tif 000012
【図４】
0006773378.tif 000013
【図５】
0006773378.tif 000014
【図６】
0006773378.tif 000015
【図７Ａ】
0006773378.tif 000016
【図７Ｂ】
0006773378.tif 000017
【図８Ａ】
0006773378.tif 000018
【図８Ｂ】
0006773378.tif 000019
【図８Ｃ】
0006773378.tif 000020
【図８Ｄ】
0006773378.tif 000021
【図９】
0006773378.tif 000022
【図１０Ａ】
0006773378.tif 000023
【図１０Ｂ】
0006773378.tif 000024
【図１１Ａ】
0006773378.tif 000025
【図１１Ｂ】
0006773378.tif 000026
【図１２】
0006773378.tif 000027
【図１３】
0006773378.tif 000028
【図１４】
0006773378.tif 000029
【図１５】
0006773378.tif 000030
【図１６】
0006773378.tif 000031
【図１７】
0006773378.tif 000032