(57)【要約】  第１及び第２のソースオペランド、デスティネーションオペランド及び即値を含む単一のＸＯＲ及び回転命令に応じて回転及びＸＯＲを実行するコンピュータプロセッサで実行するシステム、装置及び方法が本明細書に開示される。
2015535982.tif 000002
【特許請求の範囲】
【請求項１】
単一のＸＯＲ及び回転命令に応じて回転及びＸＯＲを実行するコンピュータプロセッサで実行する方法であって、前記回転及びＸＯＲ命令は、第１及び第２のソースオペランド、デスティネーションオペランド、オペコード及び即値を含み、前記方法は、
第１及び第２のモードの中の１つを実行するべく、単一の前記回転及びＸＯＲ命令を実行する段階と、
前記第１または第２のモードのいずれかからの結果を、前記デスティネーションオペランドに関連付けられたデスティネーション位置に記憶する段階とを備え、
前記第１のモードが実行されると、ＸＯＲされた値を生成するべく、前記第１及び第２のソースオペランドの複数の値をＸＯＲし、次に、前記ＸＯＲされた値を複数のビット位置の数Ｘだけ回転させ、前記第２のモードが実行されると、前記第１のソースオペランドの値を複数のビット位置の数Ｘだけ回転させ、前記第２のソースオペランドからの値で前記回転された値をＸＯＲする、方法。
【請求項２】
複数の前記Ｘのビット位置は、前記即値の１または複数のビットの１０進値である、請求項１に記載の方法。
【請求項３】
前記即値の１または複数のビットは、前記即値の最下位６ビットである、請求項２に記載の方法。
【請求項４】
前記回転は、左回転である、請求項１から３のいずれか１項に記載の方法。
【請求項５】
前記ＸＯＲ及び回転命令は、Ｓｋｅｉｎハッシュアルゴリズムの一部である、請求項１から４のいずれか１項に記載の方法。
【請求項６】
前記ＸＯＲ及び回転命令は、Ｂｌａｋｅハッシュアルゴリズムの一部である、請求項１から４のいずれか１項に記載の方法。
【請求項７】
前記第１及び第２のソースオペランドの各々は、レジスタと関連付けられ、複数の前記レジスタのサイズは、８ビット、１６ビット、３２ビットまたは６４ビットの中の１つである、請求項１から６のいずれか１項に記載の方法。
【請求項８】
前記第１及び第２のモードのいずれが前記即値のビット値に基づいて実行されるべきかを決定する段階をさらに備える、請求項１から７のいずれか１項に記載の方法。
【請求項９】
命令の発生を自己に記憶した有形の機械可読記憶媒体を備え、前記命令のフォーマットは、第１及び第２のソースオペランド、デスティネーションオペランド、即値及びオペコードを規定し、前記オペコードは、単一の前記命令の単一の前記発生に応答して、第１及び第２のモードのうちの１つを実行するための回転及びＸＯＲの単一の前記命令を実行し、前記第１または第２のモードのいずれかからの結果を、前記デスティネーションオペランドに関連付けられたデスティネーション位置に記憶するよう機械に命令し、前記第１のモードでは、実行により、前記第１及び第２のソースオペランドの複数の値をＸＯＲすることにより、ＸＯＲされた値を生成し、次に、前記ＸＯＲされた値を複数のビット位置の数Ｘだけ回転させ、前記第２のモードでは、実行により、前記第１のソースオペランドの値を複数のビット位置の数Ｘだけ回転させ、前記回転された値を前記第２のソースオペランドからの値でＸＯＲする、製造される物品。
【請求項１０】
前記Ｘのビット位置は、前記即値の１または複数のビットの１０進値である、請求項９に記載の製造される物品。
【請求項１１】
前記即値の１または複数のビットは、前記即値の最下位６ビットである、請求項１０に記載の製造される物品。
【請求項１２】
前記回転は、左回転である、請求項９から１１のいずれか１項に記載の製造される物品。
【請求項１３】
前記命令は、Ｓｋｅｉｎハッシュアルゴリズムの一部である、請求項９から１２のいずれか１項に記載の製造される物品。
【請求項１４】
前記命令は、Ｂｌａｋｅハッシュアルゴリズムの一部である、請求項９から１２のいずれか１項に記載の製造される物品。
【請求項１５】
前記第１及び第２のソースオペランドの各々は、レジスタと関連付けられ、複数の前記レジスタのサイズは、８ビット、１６ビット、３２ビットまたは６４ビットの中の１つである、請求項９から１４のいずれか１項に記載の製造される物品。
【請求項１６】
前記オペコードは、前記第１及び第２のモードのいずれが前記即値のビット値に基づいて実行されるべきかを決定するべく、前記機械にさらに命令する、請求項９から１５のいずれか１項に記載の製造される物品。
【請求項１７】
第１及び第２のソースオペランド、デスティネーションオペランド、オペコード及び即値を含む単一のＸＯＲ及び回転命令を復号化するハードウェアデコーダと、
第１及び第２のモードのうちの１つを実行し、前記第１または第２のモードのいずれかからの結果を、前記デスティネーションオペランドに関連付けられたデスティネーション位置に記憶する実行ロジックであって、前記第１のモードでは、実行により、ＸＯＲされた値を生成するべく、前記第１及び第２のソースオペランドの複数の値をＸＯＲし、次に、前記ＸＯＲされた値を複数のビット位置の数Ｘだけ回転させ、前記第２のモードでは、実行により、前記第１のソースオペランドの値を複数のビット位置の数Ｘによって回転させ、前記回転された値を前記第２のソースオペランドからの値でＸＯＲする実行ロジックとを備える、装置。
【請求項１８】
前記Ｘのビット位置は、前記即値の１または複数のビットの１０進値である、請求項１７に記載の装置。
【請求項１９】
前記即値の１または複数のビットは、前記即値の最下位６ビットである、請求項１８に記載の装置。
【請求項２０】
前記回転は、左回転である、請求項１７から１９のいずれか１項に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、概して、コンピュータプロセッサアーキテクチャに関し、より詳細には、実行された場合に特定の結果をもたらす複数の命令に関する。
【背景技術】
【０００２】
Ｂｌａｋｅセキュアハッシュアルゴリズムは、新たなＮＩＳＴ  ＳＨＡ−３規格となる５つのアルゴリズムの１つである。ＢＬＡＫＥは、４つのハッシュ関数、ＢＬＡＫＥ−２２４、ＢＬＡＫＥ−２５６、ＢＬＡＫＥ−３８４及びＢＬＡＫＥ−５１２からなるファミリーである。ＢＬＡＫＥ−２５６及びＢＬＡＫＥ−２２４は、３２ビットワードに基づき、ＢＬＡＫＥ−５１２及びＢＬＡＫＥ−３８４は、６４ビットワードに基づく。ＢＬＡＫＥ−２５６は、３２ビットワード、１４ラウンド及び２５６ビット出力のＢＬＡＫＥであり、ＢＬＡＫＥ−５１２は、６４ビットワード、１６ラウンド及び５１２ビット出力のＢＬＡＫＥである。
【０００３】
ＢＬＡＫＥの圧縮関数は、３２ビットまたは６４ビットワードのいずれかの４Ｘ４行列で表される状態に基づく。ＢＬＡＫＥのラウンドは、独立した列の複数の更新の実行と、それに続く、状態行列の複数の対角線要素の独立した複数の更新とから構成される。各列及び対角線の更新のために、２つのメッセージワード及び２つの予め定められた定数が、状態に入力される。
【０００４】
１６ワードの状態ｖ０からｖ１５は、行列形式の中で以下のように表される。
【０００５】
｜ｖ０  ｖ１  ｖ２  ｖ３｜
｜ｖ４  ｖ５  ｖ６  ｖ７｜
｜ｖ８  ｖ９  ｖ１０  ｖ１１｜
｜ｖ１２  ｖ１３  ｖ１４  ｖ１５｜
【０００６】
ＢＬＡＫＥのラウンドは、ｖ０からｖ１５の状態行列の関数を用いた変形である。
【０００７】
Ｇ（ａ，ｂ，ｃ，ｄ）は、最初に状態行列の複数の列Ｇ０（ｖ０，ｖ４，ｖ８，ｖ１２）Ｇ１（ｖ１，ｖ５，ｖ９，ｖ１３）Ｇ２（ｖ２，ｖ６，ｖ１０，ｖ１４）Ｇ３（ｖ３，ｖ７，ｖ１１，ｖ１５）を更新し、次に状態行列の複数の対角線Ｇ４（ｖ０，ｖ５，ｖ１０，ｖ１５）Ｇ５（ｖ１，ｖ６，ｖ１１，ｖ１２）Ｇ６（ｖ２，ｖ７，ｖ８，ｖ１３）Ｇ７（ｖ３，ｖ４，ｖ９，ｖ１４）を更新する。これを、図１に示す。
【０００８】
Ｇ関数は、以下の、８つの従属的な複数の段階から構成される。
【０００９】
ａ＝ａ＋ｂ＋（ｍ＿ｒ（２ｉ）Λｃ＿ｒ（２ｉ＋１））
ｄ＝（ｄΛａ）"＞１６
ｃ＝ｃ＋ｄ
ｂ＝（ｂΛｃ）"＞１２
ａ＝ａ＋ｂ＋（ｍ＿ｒ（２ｉ＋１）Λｃ＿ｒ（２ｉ））
ｄ＝（ｄΛａ）"＞８  ｃ＝ｃ＋ｄ  ｂ＝（ｂΛｃ）"＞７
ここで、ｍ＿ｒ（２ｉ及びｍ＿ｒ（２ｉ＋１）は、各ラウンドで入力された１６のメッセージワードの中の２つであり、ｃ＿ｒ（２ｉ）及びｃ＿ｒ（２ｉ＋１）は、１６の定数の中の２つである。
【００１０】
列の更新関数Ｇ０、Ｇ１、Ｇ２、Ｇ３は、独立であり、並行に実行可能である。複数の列の更新が完了すると、対角線の更新関数Ｇ４、Ｇ５、Ｇ６、Ｇ７が実行される。Ｇ４、Ｇ５、Ｇ６、Ｇ７も、完全に独立であり、並行に実行可能である。
【００１１】
Ｇ関数は、図２に示すように、６回のＸＯＲ、６回の加算及び４回の回転を必要とする。８つのＧ関数から構成されるラウンドは、したがって、４８回のＸＯＲ、４８回の加算及び３２回の回転、１ラウンドあたり合計１２８の演算を必要とする。さらに２８回のＸＯＲが、初期化及び処理完結のために必要となる。例として、ＢＬＡＫＥ−５１２は、１６ラウンド、１６＊１２８＝２０４８＋２８＝２０７６の演算を必要とする。
【００１２】
Ｓｋｅｉｎアルゴリズムは、ＮＩＳＴ  ＳＨＡ３セキュアハッシュ規格の残る５つの中の他のアルゴリズムである。Ｓｋｅｉｎは、ＭＩＸ、Ｐｅｒｍｕｔｅ及びサブキー加算の、３つの主な関数からなる。ＭＩＸ関数は、６４ビットワードのペアに対し、ＸＯＲ、回転及びｃａｒｒｙ−ｐｒｏｐａｇａｔｅ加算の３つの数学的演算のみを用いる。例示的なＭＩＸ関数を、図３に示す。
【００１３】
各ＭＩＸ関数は、結果の中の第１の６４ビットを生成する２つの６４ビット入力、及び第２の入力を回転させたバージョンを加算した結果のＸＯＲを加算することにより、結果の中の第２の６４ビットを生成する。ＭＩＸ関数は、１２８ビット幅であり、Ｓｋｅｉｎ−２５６では１ラウンドあたり２つのＭＩＸ関数、Ｓｋｅｉｎ−５１２では１ラウンドあたり４つのＭＩＸ関数、Ｓｋｅｉｎ−１０２４では１ラウンドあたり８つを必要とする。
【００１４】
Ｓｋｅｉｎアルゴリズムのラウンドは、２５６、５１２または１０２４ビットにわたる複数のＭＩＸ関数、その後、６４ビットワードのＰｅｒｍｕｔｅである。第１のラウンド前と、４ラウンド毎にその終了後、サブキー加算を伴うＭｌＸ／Ｐｅｒｍｕｔｅの７２ラウンドがある。Ｓｋｅｉｎ-２５６の４ラウンドの図４は、Ｓｋｅｉｎハッシュ関数ファミリー文書からのものである。
【図面の簡単な説明】
【００１５】
本発明は、例として示されるものであり、同様の参照符号が同様の要素を示す複数の添付の図面の図における限定ではない。
【図１】Ｂｌａｋｅセキュアハッシュアルゴリズムの一部を示す。
【図２】Ｂｌａｋｅセキュアハッシュアルゴリズムの一部を示す。
【図３】Ｓｋｅｉｎセキュアハッシュアルゴリズムの一部を示す。
【図４】Ｓｋｅｉｎセキュアハッシュアルゴリズムの一部を示す。
【図５】例示的なＲＯＴＡＴＥａｎｄＸＯＲ命令の例示的な動作の例を示す。
【図６】他の例示的なＲＯＴＡＴＥａｎｄＸＯＲ命令の例示的な動作の例を示す。
【図７Ａ】プロセッサにおけるＲＯＴＡＴＥａｎｄＸＯＲ命令の実行の異なる実施形態を示す。
【図７Ｂ】プロセッサにおけるＲＯＴＡＴＥａｎｄＸＯＲ命令の実行の異なる実施形態を示す。
【図７Ｃ】プロセッサにおけるＲＯＴＡＴＥａｎｄＸＯＲ命令の実行の異なる実施形態を示す。
【図８Ａ】ＲＯＴＡＴＥａｎｄＸＯＲ命令を処理するための方法の複数の実施形態を示す。
【図８Ｂ】ＲＯＴＡＴＥａｎｄＸＯＲ命令を処理するための方法の複数の実施形態を示す。
【図８Ｃ】ＲＯＴＡＴＥａｎｄＸＯＲ命令を処理するための方法の複数の実施形態を示す。
【図９】ＲＯＴＡＴＥａｎｄＸＯＲ命令のための疑似コードの実施形態を示す。
【図１０】本発明の一実施形態に係るレジスタアーキテクチャ１０００のブロック図である。
【図１１Ａ】本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【図１１Ｂ】本発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。
【図１２Ａ】より具体的な、例示的なインオーダコアアーキテクチャのブロック図を示し、ここで、コアは、いくつかの論理ブロックの１つである（チップにおいて、同じタイプ及び／または複数の異なるタイプの複数のコアを含む）。
【図１２Ｂ】より具体的な、例示的なインオーダコアアーキテクチャのブロック図を示し、ここで、コアは、いくつかの論理ブロックの１つである（チップにおいて、同じタイプ及び／または複数の異なるタイプの複数のコアを含む）。
【図１３】本発明の複数の実施形態に係る１より多くのコアを有してもよく、集積メモリコントローラを有してもよく、集中画像表示を有してもよいプロセッサ１３００のブロック図である。
【図１４】例示的なコンピュータアーキテクチャのブロック図である。
【図１５】例示的なコンピュータアーキテクチャのブロック図である。
【図１６】例示的なコンピュータアーキテクチャのブロック図である。
【図１７】例示的なコンピュータアーキテクチャのブロック図である。
【図１８】本発明の複数の実施形態に係るソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令変換器の利用を対比させるブロック図である。
【発明を実施するための形態】
【００１６】
以下の説明では、数々の具体的な詳細が記載される。しかしながら、本発明の複数の実施形態は、これらの具体的な詳細がなくとも実施可能であることを理解されたい。他の例では、この説明の理解の妨げとならないよう、周知の回路、構造及び技術は、詳細には示さない。
【００１７】
本明細書における「一実施形態」、「実施形態」、「例示的な実施形態」等の言及は、記載された実施形態が、特有の機能、構造または特性を含んでもよいが、あらゆる実施形態がその特有の機能、構造または特性を必ずしも含むとは限らないことを示す。さらに、そのような文言は、必ずしも同じ実施形態を指すとは限らない。さらに、ある実施形態に関して特有の機能、構造または特性が記載される場合、明示的に記載されているか否かに関わらず、他の実施形態に関してそのような機能、構造または特性に影響することは当業者の知識の範囲内であるとされる。
【００１８】
ＳＨＡ１／２のような既存の複数の暗号ハッシュアルゴリズムも、回転及びＸＯＲ演算ならびにＢｌａｋｅ及びＳｋｅｉｎハッシュアルゴリズムを用い、専用の回転及びＸＯＲ命令の利益を享受する。ＸＯＲ及びＲｏｔａｔｅ演算を組み合わせた整数命令によれば、Ｇ関数の演算回数が４回（１６回から１２回へ）減少し、すなわち、最大２５％が節約される。複数の演算がこれらの複数のタイプのハッシュ関数の中で連続化されるものとして、ＸＯＲ−回転演算がデータ処理のクリティカルパス上にあり、性能利得が増大可能となる。複数の整数ＩＡ命令を伴うＳｋｅｉｎ−５１２の４ラウンドの処理は、１６の加算、１６の回転、１６のＸＯＲ及び１２のサブキー加算（サブキーを確立するために４の加算、及び４ラウンド毎に状態を更新するために８の加算）、合計で６０の命令を必要とする。回転及びＸＯＲ演算を組み合わせる命令により、合計が４４に減少し、すなわち最大３６％が節約される。
【００１９】
図５は、例示的なＲＯＴＡＴＥａｎｄＸＯＲ命令の例示的な演算の例を示す。この例では、８ビットのソースレジスタが２つ存在する（ＳＲＣ１  ５０１及びＳＲＣ２  ５０３）。理解を容易化するために、これらの複数のレジスタの内容を、ＳＲＣ１  ５０１のｘＡＢ及びＳＲＣ２  ５０３のｘＢ０という１６進値として示す。以下に詳述するように、本発明の複数の実施形態は、８ビットの複数のソースに限定されるものではなく、限定されるものではないが、８ビット、１６ビット、３２ビット、６４ビット、１２８ビット等を含む任意のサイズのソースにより利用可能である。
【００２０】
この例では、２つのソース５０１、５０３は、ＸＯＲロジック５０５を用いて、共に排他的論理和が演算される（ＸＯＲされる）。ＸＯＲの結果は、次に回転ロジック５０７により、位置設定数だけ回転される。例示された実施形態では、回転は、複数のビット位置の設定数の左回転であるが、しかしながら他の実施形態では、回転は、複数のビット位置の設定数の右回転であってもよい。回転のためのビット位置の数は、ＲＯＴＡＴＥａｎｄＸＯＲ命令の即値の中の多数のビットによって決定される。この例では、即値の最下位６ビットが、回転するビット数及びこれらのビット値が１であることを決定するために用いられる。ＸＯＲからのｘ１Ｂ値自体は１ビットだけ左回転し、デスティネーション５０９に記憶されたｘ３７という新たな値を与える。更に、いくつかの実施形態では、ＸＯＲの複数のビットがシフトアウト（例えば、全ての０または１がシフトイン）する場合、回転は、設定値を与えるシフトである。この命令の実行は、特にＢｌａｋｅセキュアハッシュアルゴリズムで有用である。
【００２１】
図６は、例示的なＲＯＴＡＴＥａｎｄＸＯＲ命令の演算の例示的な他の例を示す。この例は、回転があらゆるＸＯＲ演算の前に行われる点で、前述の例と異なる。この例では、８ビットのソースレジスタ（ＳＲＣ１  ６０１及びＳＲＣ２  ６０３）が２つ存在する。理解を容易化するために、これらの複数のレジスタの内容を、ＳＲＣ１  ６０１のｘＡＢ及びＳＲＣ２  ６０３のｘＢ０という１６進値として示す。以下に詳述するように、本発明の複数の実施形態は、８ビットの複数のソースに限定されるものではなく、限定されるものではないが、８ビット、１６ビット、３２ビット、６４ビット、１２８ビット等を含む任意のサイズのソースにより利用可能である。
【００２２】
この例では、第１のソース６０１は、回転ロジック６０５によって命令の即値から決定される複数のビット位置の設定数だけ左回転する。前述の例と同様に、他の実施形態では、回転は、複数のビット位置の設定数だけの右回転であってもよい。この例では、即値の最下位６ビットが、回転するビット数及びこれらのビット値が１であることを決定するために用いられる。第１のソース６０１からのｘＡＢ値自体は、１ビットだけ左回転し、ｘ５７という新たな値を与える。更に、いくつかの実施形態では、ＸＯＲの複数のビットがシフトアウトする（例えば、全ての０または１がシフトイン）する場合、回転は、設定値を与えるシフトである。
【００２３】
回転結果は、次にＸＯＲロジック６０７を用いて、第２のソース６０３からのデータによりＸＯＲされる。従って、ｘ５７は、ｘＢ０によりＸＯＲされてｘＥ７という結果を与え、デスティネーション６０９に記憶される。この命令の実行は、Ｓｋｅｉｎハッシュアルゴリズムの一部として特に有用である。
【００２４】
［例示的なフォーマット］
この命令の例示的なフォーマットは、「ＲＯＴＡＴＥａｎｄＸＯＲ  ＤＥＳＴ、ＳＲＣ１、ＳＲＣ２、ＩＭＭ」であり、ここで、オペランドＤＥＳＴは（８ビット、１６ビット、３２ビット、６４ビット等のレジスタのような）デスティネーションレジスタまたはメモリ位置であり、ＳＲＣ１及びＳＲＣ２は、複数のレジスタ、複数のメモリ位置またはデスティネーションと同じサイズの両方の組み合わせのいずれかであり得る複数のソースである。ＩＭＭは、命令の即値であり、任意の数のビットであってもよいが、しかしながら一実施形態では、ＩＭＭは、８ビットの値である。ＲＯＴＡＴＥａｎｄＸＯＲは、命令のオペコードである。
【００２５】
［実行の例示的な複数の方法］
図７Ａ−Ｃは、プロセッサにおけるＲＯＴＡＴＥａｎｄＸＯＲ命令の実行のいくつかの異なる実施形態を示す。
【００２６】
図７Ａでは、２つのソースオペランド（複数のレジスタ、複数のメモリ位置または両方）、デスティネーションオペランド（レジスタまたはメモリ位置のいずれか）、オペコード及び即値を有するＲＯＴＡＴＥａｎｄＸＯＲ命令は、７０１でフェッチされる。
【００２７】
ＲＯＴＡＴＥａｎｄＸＯＲ命令は、７０３で復号ロジックによって復号化される。命令のフォーマットに応じて、書き込み及び取得を行う複数のレジスタ、アクセスするメモリアドレス等のような様々なデータが、この段階で解釈されてもよい。
【００２８】
複数のソースオペランドの値は、７０５で取得／読み出しが行われる。例えば、複数のソースレジスタが、読み出される。いずれかのソースオペランドがメモリオペランドである場合、そのオペランドと関連づけられたデータが、取得される。
【００２９】
ＲＯＴＡＴＥａｎｄＸＯＲ命令（または、複数のマイクロオペレーションのような命令を備える複数の演算）は、ＲＯＴＡＴＥａｎｄＸＯＲ命令を実行することにより２つのモードの中の１つを実行する７０７の１または複数の機能ユニットのような複数の実行リソースによって実行され、ここで、２つのモードは、第１及び第２のソースオペランドの値をＸＯＲすることによってＸＯＲされた値を生成し、次に（図５に示したような）ＸＯＲされた値を回転させる第１のモード、または第１のソースオペランドの値を回転させ、次に、（図６に示したような）第２のオペランドの値によって回転された値をＸＯＲする第２のモードのいずれかである。上述したように、回転は、実装に応じて、左または右のいずれであってもよい。
【００３０】
回転のためのビット位置の数は、即値の１または複数の値によって決定される。いくつかの実施形態では、即値の下位６ビットは、この決定のために用いられる。これらの実施形態では、これらのビットの１０進値は、回転のためのビット位置の数である。
【００３１】
更に、用いるモードの決定は、即値の１または複数のビットによって設定される。いくつかの実施形態では、即値の最上位ビットは、この目的のために用いられる。例えば、値が１の場合は第１のモードが選択され、値が０の場合は第２のモードが選択される。勿論、逆の規約を用いることは可能である。
【００３２】
７０９では、（いずれかのモードの）ＸＯＲ及び回転の結果が、デスティネーションオペランドに関連付けられた位置に記憶される。７０７および７０９は別々に例示したが、いくつかの実施形態では、これらが命令の実行の一部として、共に実行される。
【００３３】
図７Ｂでは、２つのソースオペランド（複数のレジスタ、複数のメモリ位置または両方）、デスティネーションオペランド（レジスタまたはメモリ位置のいずれか）、オペコード及び即値を有するＲＯＴＡＴＥａｎｄＸＯＲ命令は、７１１でフェッチされる。
【００３４】
ＲＯＴＡＴＥａｎｄＸＯＲ命令は、７１３で復号ロジックによって復号化される。命令のフォーマットに応じて、書き込み及び取得を行う複数のレジスタ、アクセスするメモリアドレス等のような様々なデータが、この段階で解釈されてもよい。
【００３５】
複数のソースオペランドの値は、７１５で取得／読み出される。例えば、複数のソースレジスタが、読み出される。いずれかのソースオペランドがメモリオペランドである場合は、そのオペランドと関連づけられたデータが、取得される。
【００３６】
ＲＯＴＡＴＥａｎｄＸＯＲ命令（または、複数のマイクロオペレーションのような命令を備える複数の演算）は、７１７で第１及び第２のソースオペランドの複数の値をＸＯＲすることによってＸＯＲされた値を生成し、次に（図５に示したような）ＸＯＲされた値を回転させるＲＯＴＡＴＥａｎｄＸＯＲ命令を実行する、１または複数の機能ユニットのような複数の実行リソースによって実行される。上述したように、回転は、実装に応じて、左または右のいずれであってもよい。
【００３７】
回転のためのビット位置の数は、即値の１または複数の値によって決定される。いくつかの実施形態では、即値の下位６ビットは、この決定のために用いられる。これらの実施形態では、これらのビットの１０進値は、回転のためのビット位置の数である。
【００３８】
７１９では、ＸＯＲ及び回転の結果は、デスティネーションオペランドに関連付けられた位置に記憶される。７１７および７１９は別々に例示したが、いくつかの実施形態では、これらが命令の実行の一部として、共に実行される。
【００３９】
図７Ｃでは、２つのソースオペランド（複数のレジスタ、複数のメモリ位置または両方）、デスティネーションオペランド（レジスタまたはメモリ位置のいずれか）、オペコード及び即値を有するＲＯＴＡＴＥａｎｄＸＯＲ命令は、７２１でフェッチされる。
【００４０】
ＲＯＴＡＴＥａｎｄＸＯＲ命令は、７２３で復号ロジックによって復号化される。命令のフォーマットに応じて、書き込み及び取得を行う複数のレジスタ、アクセスするメモリアドレス等のような様々なデータが、この段階で解釈されてもよい。
【００４１】
複数のソースオペランドの値は、７２５で取得／読み出される。例えば、複数のソースレジスタが、読み出される。いずれかのソースオペランドがメモリオペランドである場合、そのオペランドと関連づけられたデータが、取得される。
【００４２】
ＲＯＴＡＴＥａｎｄＸＯＲ命令（または、複数のマイクロオペレーションのような命令を備える複数の演算）は、７２７でＲＯＴＡＴＥａｎｄＸＯＲ命令を実行することにより、第１のソースオペランドの値を回転させ、次に（図６に示したような）第２のオペランドの値によってその回転された値をＸＯＲする、１または複数の機能ユニットのような複数の実行リソースによって実行される。上述したように、回転は、実装に応じて、左または右のいずれであってもよい。
【００４３】
回転のためのビット位置の数は、即値の１または複数の値によって決定される。いくつかの実施形態では、即値の下位６ビットは、この決定のために用いられる。これらの実施形態では、これらのビットの１０進値は、回転のためのビット位置の数である。
【００４４】
７２９では、ＸＯＲ及び回転の結果が、デスティネーションオペランドに関連付けられた位置に記憶される。７２７および７２９は別々に例示したが、いくつかの実施形態では、これらが命令の実行の一部として、共に実行される。
【００４５】
図８Ａ−Ｃは、ＲＯＴＡＴＥａｎｄＸＯＲ命令を処理するための方法の複数の実施形態を示す。これらの実施形態では、複数の演算であるフェッチ、復号化及び取得段階のうち、全てではないとしてもいくつかが先に実行されたと仮定するが、しかしながらこれらは、以下に示す詳細の妨げとならないよう図示されない。
【００４６】
図８Ａでは、８０１において、ＲＯＴＡＴＥａｎｄＸＯＲ命令の即値が、ＸＯＲ／回転または回転／ＸＯＲ演算が実行されなければならないことを示すか否かの決定がなされる。いくつかの実施形態では、（詳細に前述したように）即値の最上位ビットが、モードを決定する。
【００４７】
ＸＯＲ／回転モードが示される場合は、第１及び第２のソースからのデータがＸＯＲされることにより、８０３で中間結果を生成する。この中間結果は、８０５でＸビット位置だけ回転される。ビット位置の数Ｘは、詳細に前述したように、即値の１または複数のビットによって決定される。例えば、最下位６ビットの１０進値は、数Ｘを与えてもよい。
【００４８】
ＸＯＲ及び回転演算の結果は、８１１でデスティネーションオペランドによって示されるデスティネーション位置に記憶される。
【００４９】
回転／ＸＯＲモードが示される場合は、第１のソースのデータは、８０７においてＸビット位置だけ回転される。ビット位置の数Ｘは、詳細に前述したように、即値の１または複数のビットによって決定される。例えば、最下位６ビットの１０進値が、数Ｘを与えてもよい。
【００５０】
この回転された値は、８０９で第２のソースのデータによってＸＯＲされる。
【００５１】
ＸＯＲ及び回転演算の結果は、８１１でデスティネーションオペランドによって示されるデスティネーション位置に記憶される。
【００５２】
図８Ｂでは、８１３において、第１及び第２のソースからのデータがＸＯＲされることにより、中間結果を生成する。この中間結果は、８１５においてＸビット位置だけ回転される。ビット位置の数Ｘは、詳細に前述したように、即値の１または複数のビットによって決定される。例えば、最下位６ビットの１０進値が、数Ｘを与えてもよい。
【００５３】
ＸＯＲ及び回転演算の結果は、８１６でデスティネーションオペランドによって示されるデスティネーション位置に記憶される。
【００５４】
図８Ｃでは、第１のソースのデータは、８１７において、Ｘビット位置だけ回転される。ビット位置の数Ｘは、詳細に前述したように、即値の１または複数のビットによって決定される。例えば、最下位６ビットの１０進値が、数Ｘを与えてもよい。
【００５５】
この回転された値は、８１９で第２のソースのデータによってＸＯＲされる。
【００５６】
ＸＯＲ及び回転演算の結果は、８２０でデスティネーションオペランドによって示されるデスティネーション位置に記憶される。
【００５７】
図９は、ＲＯＴＡＴＥａｎｄＸＯＲ命令のための疑似コードの実施形態を示す。
【００５８】
［例示的なレジスタアーキテクチャ］
図１０は、本発明の一実施形態に係るレジスタアーキテクチャ１０００のブロック図である。例示された実施形態では、５１２ビット幅のベクトルレジスタ１０１０が３２個存在し、これらの複数のレジスタは、ｚｍｍ０−ｚｍｍ３１と称される。下位１６の複数のｚｍｍレジスタの下位２５６ビットは、複数のレジスタｙｍｍ０−１６上にオーバーレイされる。下位１６の複数のｚｍｍレジスタの下位１２８ビット（複数のｙｍｍレジスタの下位１２８ビット）は、複数のレジスタｘｍｍ０−１５にオーバーレイされる。
【００５９】
［複数の汎用レジスタ１０２５］
例示された実施形態では、複数のメモリオペランドにアドレスするための既存の複数のｘ８６アドレス指定モードと共に用いられる６４ビットの汎用レジスタが、１６個存在する。これらの複数のレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ及びＲ８−Ｒ１５という名で称される。
【００６０】
［ＭＭＸパック型整数フラットレジスタファイル１０５０がエイリアスされるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）１０４５］
例示された実施形態では、ｘ８７スタックは、ｘ８７命令セット拡張を用いて３２／６４／８０ビットの浮動小数点データに対する複数のスカラ浮動小数点演算を実行するために用いられる、８個の要素のスタックであり、複数のＭＭＸレジスタは、６４ビットパック型整数データに対する複数の演算を実行し、ＭＭＸ及びＸＭＭレジスタ間で実行されるいくつかの演算のための複数のオペランドを保持するために用いられる。
【００６１】
本発明の複数の代替的な実施形態は、より広い、またはより狭いレジスタを用いてもよい。
【００６２】
更に、本発明の複数の代替的な実施形態は、より多くの、より少ない、または異なるレジスタファイル及びレジスタを用いてもよい。
【００６３】
［例示的な複数のコアアーキテクチャ、複数のプロセッサ及び複数のコンピュータアーキテクチャ］
複数のプロセッサコアは、異なる態様で、異なる目的のために、かつ異なるプロセッサに実装されてもよい。例えば、そのような複数のコアの実装は、１）汎用演算用の汎用インオーダコア、２）汎用演算用の高性能汎用アウトオブオーダコア、３）主にグラフィック及び／または科学的（スループット）演算用の特殊用途向けコアを含んでもよい。複数の異なるプロセッサの実装は、１）汎用演算用の１または複数の汎用インオーダコア及び／または汎用演算用の１または複数の汎用アウトオブオーダコアを含むＣＰＵ、ならびに２）主にグラフィック及び／または科学的（スループット）用の１または複数の特殊用途コアを含むコプロセッサを含んでもよい。そのような複数の異なるプロセッサにより、異なる複数のコンピュータシステムアーキテクチャが構成され、コンピュータシステムアーキテクチャは、１）ＣＰＵからの個別のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内の個別のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、場合により、集中画像表示及び／または科学的（スループット）ロジックのような特殊用途ロジック、または特殊用途コアと称される）、及び４）説明されたＣＰＵ（場合によりアプリケーションコアまたはアプリケーションプロセッサと称される）、上述のコプロセッサ及び追加機能を同じダイ上に含み得るチップ上のシステムを含んでもよい。
【００６４】
例示的な複数のコアアーキテクチャを次に説明した後、例示的な複数のプロセッサ及び複数のコンピュータアーキテクチャの説明を行う。
【００６５】
［例示的な複数のコアアーキテクチャ］
［インオーダ及びアウトオブオーダコアのブロック図］
図１１Ａは、本発明の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図１１Ｂは、本発明の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図１１Ａ−Ｂの複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、選択的に追加された複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様がアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様について説明する。
【００６６】
図１１Ａでは、プロセッサパイプライン１１００は、フェッチステージ１１０２、長さ復号ステージ１１０４、復号ステージ１１０６、配分ステージ１１０８、リネームステージ１１１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ１１１２、レジスタ読み出し／メモリ読み出しステージ１１１４、実行ステージ１１１６、ライトバック／メモリ書込みステージ１１１８、例外処理ステージ１１２２及びコミットステージ１１２４を含む。
【００６７】
図１１Ｂは、実行エンジンユニット１１５０に結合されるフロントエンドユニット１１３０を含むプロセッサコア１１９０を示し、両方ともメモリユニット１１７０に結合される。コア１１９０は、縮小命令セットコンピュータ（ＲＩＳＣ）コア、複合命令セットコンピュータ（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コアもしくはハイブリッドまたは代替的なコアタイプであってもよい。さらに他のオプションとして、コア１１９０は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用演算画像処理ユニット（ＧＰＧＰＵ）コア、グラフィックコアなどのような特殊用途コアであってもよい。
【００６８】
フロントエンドユニット１１３０は、命令キャッシュユニット１１３４に結合された分岐予測ユニット１１３２を含み、命令キャッシュユニット１１３４は、命令トランスレーションルックアサイドバッファ（ＴＬＢ）１１３６に結合され、ＴＬＢ１１３６は、命令フェッチユニット１１３８に結合され、命令フェッチユニット１１３８は、復号ユニット１１４０に結合される。復号ユニット１１４０（またはデコーダ）は、複数の命令を復号化し、出力として、１または複数のマイクロ演算、マイクロコードエントリポイント、マイクロ命令、他の命令もしくは元の複数の命令から復号化された、または他の方法で反映する、または導出された他の制御信号を生成してもよい。復号ユニット１１４０は、複数の様々な異なるメカニズムを用いて実装されてもよい。適した複数のメカニズムの例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等を含む。一実施形態では、コア１１９０は、マイクロコードＲＯＭまたは（例えば、復号ユニット１１４０、さもなければフロントエンドユニット１１３０内で）特定の複数のマクロ命令に対するマイクロコードを記憶する他のメディアを含む。復号ユニット１１４０は、実行エンジンユニット１１５０内のリネーム／アロケータユニット１１５２に結合される。
【００６９】
実行エンジンユニット１１５０は、リタイアメントユニット１１５４及び１または複数のスケジューラユニット１１５６のセットに結合されたリネーム／アロケータユニット１１５２を含む。スケジューラユニット１１５６は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット１１５６は、物理レジスタファイルユニット１１５８に結合される。物理レジスタファイルユニット１１５８のそれぞれは、１または複数の物理レジスタファイルを表し、異なる物理レジスタファイルが、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、次に実行されるべき命令のアドレスである命令ポインタ）などの、１または複数の異なるデータ型を記憶する。一実施形態では、物理レジスタファイルユニット１１５８は、ベクトルレジスタユニット及びスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ及び複数の汎用レジスタを提供してもよい。物理レジスタファイルユニット１１５８は、リタイアメントユニット１１５４と重複することにより、レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な複数の態様（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、フューチャファイル、ヒストリバッファ及びリタイアメントレジスタファイルを用いて、レジスタマップ及び複数のレジスタのプールを用いて、等）を示す。リタイアメントユニット１１５４及び物理レジスタファイルユニット１１５８は、実行クラスタ１１６０に結合される。実行クラスタ１１６０は、１または複数の実行ユニット１１６２のセット及び１または複数のメモリアクセスユニット１１６４のセットを含む。複数の実行ユニット１１６２は、複数の様々な型のデータ（例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して、様々な複数の演算（例えば、複数のシフト、加算、減算、乗算）を実行してもよい。いくつかの実施形態は、具体的な複数の機能または複数の機能の複数のセット専用の多数の実行ユニットを含んでもよく、複数の他の実施形態は、１つだけの実行ユニットまたは全ての機能を全てが実行する複数の実行ユニットを含んでもよい。スケジューラユニット１１５６、物理レジスタファイルユニット１１５８及び実行クラスタ１１６０は、場合によっては複数として示されるが、その理由は、特定の複数の実施形態は、特定の複数のデータ型／複数の演算（例えば、各々が自己のスケジューラユニット、物理レジスタファイルユニット及び／または実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点／パック型整数／パック型浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン及び／またはメモリアクセスパイプライン、及び、個別のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット１１６４を有する特定の複数の実施形態が実装される）に対して個別の複数のパイプラインを形成するからである。個別の複数のパイプラインが用いられる場合、これらのパイプラインのうちの１または複数がアウトオブオーダ発行／実行であり、残りがインオーダであってもよいことも理解されたい。
【００７０】
メモリアクセスユニット１１６４のセットは、データＴＬＢユニット１１７２を含むメモリユニット１１７０に結合され、データＴＬＢユニット１１７２は、データキャッシュユニット１１７４に結合され、データキャッシュユニット１１７４は、二次（Ｌ２）キャッシュユニット１１７６に結合される。例示的な一実施形態では、メモリアクセスユニット１１６４は、読み込みユニット、記憶アドレスユニット及び記憶データユニットを含んでもよく、これらのそれぞれは、メモリユニット１１７０内のデータＴＬＢユニット１１７２に結合される。命令キャッシュユニット１１３４は、メモリユニット１１７０内の二次（Ｌ２）キャッシュユニット１１７６にさらに結合される。Ｌ２キャッシュユニット１１７６は、１または複数の他のレベルのキャッシュ、及び最終的にはメインメモリに結合される。
【００７１】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン１１００を以下のとおり実装してもよい。１）命令フェッチ１１３８が、フェッチステージ１１０２及び長さ復号ステージ１１０４を実行し、２）復号ユニット１１４０が、復号ステージ１１０６を実行し、３）リネーム／アロケータユニット１１５２が、配分ステージ１１０８及びリネームステージ１１１０を実行し、４）スケジューラユニット１１５６が、スケジューリングステージ１１１２を実行し、５）物理レジスタファイルユニット１１５８及びメモリユニット１１７０が、レジスタ読み出し／メモリ読み出しステージ１１１４を実行し、実行クラスタ１１６０が、実行ステージ１１１６を実行し、６）メモリユニット１１７０及び物理レジスタファイルユニット１１５８が、ライトバック／メモリ書込みステージ１１１８を実行し、７）様々な複数のユニットが、例外処理ステージ１１２２に関与してもよく、かつ８）リタイアメントユニット１１５４及び物理レジスタファイルユニット１１５８が、コミットステージ１１２４を実行する。
【００７２】
コア１１９０は、本明細書に記載された命令を含む１または複数の命令セット（例えば、ｘ８６命令セット（複数のより新しいバージョンに追加されたいくつかの拡張を有する）、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスのＡＲＭ命令セット（ＮＥＯＮなどの複数の選択的なさらなる拡張を有する））をサポートしてもよい。一実施形態では、コア１１９０は、パックデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２及び／または先述したジェネリックなベクトル向け命令フォーマットのいくつかの形式（Ｕ＝０及び／またはＵ＝１））をサポートするロジックを含むことによって、多くのマルチメディアアプリケーションによって用いられる複数の演算が、パックデータを用いて実行される。
【００７３】
理解するべきことは、コアは、マルチスレッディング（複数の演算または複数のスレッドの２またはそれより多くの並列セットを実行すること）をサポートしてもよく、時分割マルチスレッディング、同時マルチスレッディング（単一の物理的コアが複数のスレッドのそれぞれに対して論理的コアを提供することにより、物理的コアが同時マルチスレッディングを実行すること）またはこれらの組み合わせ（例えば、時分割フェッチ及び復号化、その後、インテル（登録商標）ハイパースレッディング・テクノロジーなどでの同時マルチスレッディング）を含む様々な態様で、マルチスレッディングを実行してもよい。
【００７４】
レジスタリネーミングについて、アウトオブオーダ実行との関連で説明しているが、理解するべきことは、インオーダアーキテクチャにおいて、レジスタリネーミングが用いられてもよい。プロセッサの例示された実施形態は、個別の命令キャッシュユニット１１３４及びデータキャッシュユニット１１７４と共有のＬ２キャッシュユニット１１７６とをさらに含むが、代替的な複数の実施形態は、例えば、一次（Ｌ１）内部キャッシュまたは複数のレベルの内部キャッシュのような、複数の命令及びデータの両方のための単一の内部キャッシュを有してもよい。いくつかの実施形態では、システムは、内部キャッシュとコア及び／またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでもよい。代替的に、全てのキャッシュは、コア及び／またはプロセッサの外部にあってもよい。
【００７５】
［具体的な、例示的なインオーダコアアーキテクチャ］
図１２Ａ−Ｂは、より具体的な、例示的なインオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック（同じ型及び／または異なる型の他の複数のコアを含む）の中の１つであってもよい。複数のロジックブロックは、用途に応じて、高帯域幅相互接続ネットワーク（例えば、リングネットワーク）を介して、いくつかの固定機能ロジック、メモリＩ／Ｏインターフェース及び他の必要なＩ／Ｏロジックと通信を行う。
【００７６】
図１２Ａは、本発明の複数の実施形態に係る単一のプロセッサコアのブロック図であり、オンダイの相互接続ネットワーク１２０２との接続及び二次（Ｌ２）キャッシュローカルサブセット１２０４と共に示される。一実施形態では、命令デコーダ１２００は、パックデータ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ１２０６によれば、スカラ及びベクトルユニットに対して、キャッシュメモリへの低レイテンシアクセスが可能である。一実施形態では（設計の単純化のために）、スカラユニット１２０８及びベクトルユニット１２１０は、個別のレジスタセット（それぞれ、複数のスカラレジスタ１２１２及び複数のベクトルレジスタ１２１４）を用い、これらの間で転送されるデータは、一次（Ｌ１）キャッシュ１２０６のメモリに書き込まれてから再読み出しされるが、本発明の代替的な複数の実施形態は、異なるアプローチ（例えば、単一のレジスタセットを用いる、または書き込み及び再読み出しを行うことなく、２つのレジスタファイル間でデータを転送させる通信パスを含む）を用いてもよい。
【００７７】
Ｌ２キャッシュローカルサブセット１２０４は、プロセッサコアあたり１つの個別のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、自己のＬ２キャッシュローカルサブセット１２０４に対するダイレクトアクセスパスを有する。プロセッサコアに読み出されたデータは、自己のＬ２キャッシュサブセット１２０４に記憶され、迅速かつ、自己の複数のローカルＬ２キャッシュサブセットにアクセスする他の複数のプロセッサコアと並行に、アクセスされることができる。プロセッサコアに書き込まれたデータは、自己のＬ２キャッシュサブセット１２０４に記憶され、必要な場合には、他の複数のサブセットからフラッシュされる。リングネットワークは、共有のデータに対するコヒーレンシを保証する。リングネットワークが双方向であることにより、複数のプロセッサコア、複数のＬ２キャッシュ及び他の複数のロジックブロックなどのエージェントは、チップ内で互いに通信を行うことができる。各リングデータパスは、１方向あたり１０１２ビット幅である。
【００７８】
図１２Ｂは、本発明の複数の実施形態に係る図１２Ａのプロセッサコアの一部の拡大図である。図１２Ｂは、Ｌ１キャッシュ１２０６の一部であるＬ１データキャッシュ１２０６Ａと、併せて、ベクトルユニット１２１０及び複数のベクトルレジスタ１２１４に関するさらなる詳細とを含む。具体的には、ベクトルユニット１２１０は、整数、単精度浮動及び倍精度浮動命令のうちの１または複数を実行する１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ１２２８を参照）である。ＶＰＵは、再構成ユニット１２２０による複数のレジスタ入力の再構成、数字変換ユニット１２２２Ａ−Ｂによる数字変換、及び複製ユニット１２２４によるメモリ入力に対する複製をサポートする。
【００７９】
［集積メモリコントローラ及びグラフィックを有するプロセッサ］
図１３は、本発明の複数の実施形態に係るプロセッサ１３００のブロック図であり、プロセッサ１３００は、１より多くのコアを有してもよく、集積メモリコントローラを有してもよく、集中画像表示を有してもよい。図１３の複数の実線のボックスは、単一のコア１３０２Ａ、システムエージェント１３１０、１または複数のバスコントローラユニット１３１６のセットを有するプロセッサ１３００を示し、選択的に追加された複数の破線のボックスは、複数のコア１３０２Ａ−Ｎを有する代替的なプロセッサ１３００、システムエージェントユニット１３１０内の１または複数の集積メモリコントローラユニット１３１４のセット及び特殊用途ロジック１３０８を示す。
【００８０】
したがって、プロセッサ１３００の異なる複数の実装は、１）集中画像表示及び／または科学的（スループット）ロジック（１または複数のコアを含んでもよい）である特殊用途ロジック１３０８を有するＣＰＵ、及び１または複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、この２つの組み合わせ）であるコア１３０２Ａ−Ｎ、２）主にグラフィック及び／または科学的（スループット）用として意図された多数の特殊用途コアであるコア１３０２Ａ−Ｎを有するコプロセッサ、及び３）多数の汎用インオーダコアであるコア１３０２Ａ−Ｎを有するコプロセッサを含んでもよい。したがって、プロセッサ１３００は、汎用プロセッサ、コプロセッサまたは、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用画像処理ユニット）、ハイスループット多集積コア（ＭＩＣ）コプロセッサ（３０またはそれより多くのコアを含む）、組込みプロセッサなどのような特殊用途プロセッサであってもよい。プロセッサは、１または複数のチップ上に実装されてもよい。プロセッサ１３００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳまたはＮＭＯＳなどの多数の処理技術のいずれかを用いて、１または複数の基板の一部であってもよく、及び／またはその上に実装されてもよい。
【００８１】
メモリ階層は、複数のコア、１または複数の共有キャッシュユニット１３０６またはそのセット、及び複数の集積メモリコントローラユニット１３１４のセットに結合される外部メモリ（不図示）内に、１または複数のレベルのキャッシュを含む。複数の共有キャッシュユニット１３０６のセットは、二次（Ｌ２）、三次（Ｌ３）、四次（Ｌ４）または他の複数のレベルのキャッシュなどの１または複数の中レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）及び／またはこれらの組み合わせを含んでもよい。一実施形態では、リングベースの相互接続ユニット１３１２が、集中画像表示ロジック１３０８、複数の共有キャッシュユニット１３０６のセット及びシステムエージェントユニット１３１０／集積メモリコントローラユニット１３１４を相互接続するが、代替的な複数の実施形態は、そのような複数のユニットを相互接続するための任意の数の周知技術を用いてもよい。一実施形態では、１または複数のキャッシュユニット１３０６と複数のコア１３０２Ａ−Ｎとの間で、コヒーレンシが保持される。
【００８２】
いくつかの実施形態では、コア１３０２Ａ−Ｎのうちの１または複数は、マルチスレッディングが可能である。システムエージェント１３１０は、コア１３０２Ａ−Ｎの調整及び操作を行うこれらのコンポーネントを含む。システムエージェントユニット１３１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでもよい。ＰＣＵは、コア１３０２Ａ−Ｎ及び集中画像表示ロジック１３０８の電力状態を調整するために必要なロジック及び複数のコンポーネントであってもよく、またはこれらを含んでもよい。ディスプレイユニットは、１または複数の外部接続ディスプレイを駆動するためのものである。
【００８３】
コア１３０２Ａ−Ｎは、アーキテクチャ命令セットに関してホモジニアスまたはヘテロジニアスであってもよく、すなわち、コア１３０２Ａ−Ｎのうちの２またはそれより多くは、同じ命令セットを実行可能であってもよいが、他は、その命令セットまたは異なる命令セットのサブセットのみを実行可能であってもよい。
【００８４】
［例示的なコンピュータアーキテクチャ］
図１４−１７は、例示的な複数のコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型ＰＣ、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組込みプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス及び様々な他の電子デバイス用の当技術分野で公知の他の複数のシステム設計及び複数の構成も、適している。概して、本明細書で開示されるように、プロセッサ及び／または他の実行ロジックを組み込み可能な多様なシステムまたは電子デバイスが、概して適している。
【００８５】
ここで、図１４を参照すると、本発明の一実施形態に係るシステム１４００のブロック図が示される。システム１４００は、コントローラハブ１４２０に結合される１または複数のプロセッサ１４１０、１４１５を含んでもよい。一実施形態では、コントローラハブ１４２０は、（個別のチップ上にあってもよい）グラフィックメモリコントローラハブ（ＧＭＣＨ）１４９０及び入出力ハブ（ＩＯＨ）１４５０を含み、ＧＭＣＨ１４９０は、メモリ１４４０及びコプロセッサ１４４５が結合されるメモリ及び複数のグラフィクスコントローラを含み、ＩＯＨ１４５０は、複数の入出力（Ｉ／Ｏ）デバイス１４６０をＧＭＣＨ１４９０に結合する。代替的に、メモリ及び複数のグラフィクスコントローラの一方または両方は、プロセッサ内に集積され（本明細書に記載されたように）、メモリ１４４０及びコプロセッサ１４４５は、プロセッサ１４１０及び単一のチップ内でＩＯＨ１４５０を有するコントローラハブ１４２０に直接結合される。
【００８６】
追加的なプロセッサ１４１５の選択的な性質を、図１４に複数の破線で示す。各プロセッサ１４１０、１４１５は、本明細書に記載された複数のプロセッサコアのうちの１または複数を含んでもよく、いくつかのバージョンのプロセッサ１３００であってもよい。
【００８７】
メモリ１４４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、位相変化メモリ（ＰＣＭ）またはこれら２つの組み合わせであってもよい。少なくとも１つの実施形態について、コントローラハブ１４２０は、フロントサイドバス（ＦＳＢ）のようなマルチドロップバス、クイックパス相互接続（ＱＰＩ）のようなポイントツーポイントインターフェースまたは同様の接続１４９５を介して、プロセッサ１４１０、１４１５と通信を行う。
【００８８】
一実施形態では、コプロセッサ１４４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組込みプロセッサなどのような特殊用途プロセッサである。一実施形態では、コントローラハブ１４２０は、集中画像表示アクセラレータを含んでもよい。
【００８９】
物理的リソース１４１０、１４１５の間には、アーキテクチャ、マイクロアーキテクチャ、温度、電力消費特性等を含む様々な利益の基準に関して、数々の違いが存在しうる。
【００９０】
一実施形態では、プロセッサ１４１０は、一般的なタイプの複数のデータ処理動作を制御する複数の命令を実行する。複数の命令内に、複数のコプロセッサ命令が組み込まれていてもよい。プロセッサ１４１０は、これらの複数のコプロセッサ命令を、取り付けられたコプロセッサ１４４５によって実行されるべきタイプのものと認識する。従って、プロセッサ１４１０は、これらの複数のコプロセッサ命令（または複数のコプロセッサ命令を表す複数の制御信号）を、コプロセッサバスまたは他の相互接続上で、コプロセッサ１４４５に対して発行する。コプロセッサ１４４５は、受信された複数のコプロセッサ命令を受け付けて実行する。
【００９１】
ここで、図１５を参照すると、本発明の実施形態に係る第１のより具体的な例示的なシステム１５００のブロック図が示される。図１５に示されるように、マルチプロセッサシステム１５００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１５５０を介して結合される第１のプロセッサ１５７０及び第２のプロセッサ１５８０を含む。プロセッサ１５７０および１５８０のそれぞれは、いくつかのバージョンのプロセッサ１３００であってもよい。本発明の一実施形態では、プロセッサ１５７０および１５８０は、それぞれプロセッサ１４１０および１４１５であり、コプロセッサ１５３８は、コプロセッサ１４４５である。他の実施形態では、プロセッサ１５７０および１５８０は、それぞれプロセッサ１４１０、コプロセッサ１４４５である。
【００９２】
プロセッサ１５７０および１５８０は、集積メモリコントローラ（ＩＭＣ）ユニット１５７２および１５８２をそれぞれ含むものとして示される。プロセッサ１５７０は、自己のバスコントローラユニットの一部として、複数のポイントツーポイント（Ｐ−Ｐ）インターフェース１５７６および１５７８をさらに含み、同様に、第２のプロセッサ１５８０は、複数のＰ−Ｐインターフェース１５８６および１５８８を含む。複数のプロセッサ１５７０、１５８０は、複数のＰ−Ｐインターフェース回路１５７８、１５８８を用いたポイントツーポイント（Ｐ−Ｐ）インターフェース１５５０を介して、情報を交換してもよい。図１５に示されるように、ＩＭＣ１５７２および１５８２は、複数のプロセッサを個別のメモリ、すなわち、個別のプロセッサにローカルに取り付けられたメインメモリの一部となり得るメモリ１５３２及びメモリ１５３４に結合する。
【００９３】
複数のプロセッサ１５７０、１５８０の各々は、複数のポイントツーポイントインターフェース回路１５７６、１５９４、１５８６、１５９８を用いる個々のＰ−Ｐインターフェース１５５２、１５５４を介して、チップセット１５９０と情報を交換してもよい。チップセット１５９０は、高性能インターフェース１５３９を介して、コプロセッサ１５３８と任意選択的に情報を交換してもよい。一実施形態では、コプロセッサ１５３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、組込みプロセッサなどのような特殊用途プロセッサである。
【００９４】
共有キャッシュ（不図示）は、いずれかのプロセッサの内部に含まれ、または両方のプロセッサの外部にあってもよいが、プロセッサが低電力モードであっても、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに記憶され得るように、Ｐ−Ｐ相互接続を介して複数のプロセッサに接続される。
【００９５】
チップセット１５９０は、インターフェース１５９６を介して、第１のバス１５１６に結合されてもよい。一実施形態では、第１のバス１５１６は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バスもしくはＰＣＩ  Ｅｘｐｒｅｓｓバスまたは他の第３世代Ｉ／Ｏ相互接続バスなどのバスであってもよいが、本発明の範囲はこれに限定されない。
【００９６】
図１５に示されるように、様々なＩ／Ｏデバイス１５１４が、第１のバス１５１６を第２のバス１５２０に結合するバスブリッジ１５１８と共に、第１のバス１５１６に結合されてもよい。一実施形態では、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵのアクセラレータ（例えば、グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイもしくは任意の他のプロセッサなどの１または複数の追加的なプロセッサ１５１５が、第１のバス１５１６に結合される。一実施形態では、第２のバス１５２０は、ローピンカウント（ＬＰＣ）バスであってもよい。
【００９７】
例えば、キーボード及び／またはマウス１５２２、通信デバイス１５２７、及びディスクドライブ、または複数の命令／コード及びデータ１５３０を含みうる他の大容量ストレージデバイスなどの記憶ユニット１５２８を含む様々な複数のデバイスが、一実施形態では、第２のバス１５２０に結合されてもよい。
【００９８】
さらに、オーディオＩ／Ｏ１５２４が、第２のバス１５２０に結合されてもよい。なお、他の複数のアーキテクチャが、適用可能である。例えば、図１５のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
【００９９】
ここで、図１６を参照すると、本発明の実施形態に係る第２のより具体的な、例示的なシステム１６００のブロック図が示される。図１５及び１６における同様の複数の要素には、同様の参照番号が付され、図１５の複数の特定の態様は、図１６の他の複数の態様を不明瞭にすることを防ぐために、図１６では省略されている。
【０１００】
図１６は、複数のプロセッサ１５７０、１５８０は、それぞれ集積メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）１５７２及び１５８２を含んでもよいことを示す。したがって、ＣＬ１５７２、１５８２は、複数の集積メモリコントローラユニットを含み、かつ、Ｉ／Ｏ制御ロジックを含む。図１６は、メモリ１５３２、１５３４のみがＣＬ１５７２、１５８２に結合されるのではなく、複数のＩ／Ｏデバイス１６１４も、複数の制御ロジック１５７２、１５８２に結合されることを示す。複数のレガシーＩ／Ｏデバイス１６１５は、チップセット１５９０に結合される。
【０１０１】
ここで、図１７を参照すると、本発明の実施形態に係るＳｏＣ１７００のブロック図が示される。図１３における同様の複数の要素には、同様の参照番号が付される。また、複数の破線のボックスは、より進化したＳｏＣ上のオプションの機能である。図１７では、相互接続ユニット１７０２は、１または複数のコア２０２Ａ―Ｎ及び共有キャッシュユニット１３０６のセットを含むアプリケーションプロセッサ１７１０、システムエージェントユニット１３１０、バスコントローラユニット１３１６、集積メモリコントローラユニット１３１４、集中画像表示ロジック、画像プロセッサ、オーディオプロセッサ及びビデオプロセッサを含み得る１または複数のコプロセッサ１７２０またはそのセット、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１７３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット１７３２及び１または複数の外部ディスプレイに結合するためのディスプレイユニット１７４０に結合される。一実施形態では、コプロセッサ１７２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組込みプロセッサなどのような特殊用途プロセッサを含む。
【０１０２】
本明細書に開示される複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはそのような複数の実装アプローチの組み合わせで実装されてもよい。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性及び不揮発性メモリ及び／または複数の記憶要素を含む）、少なくとも１つの入力デバイスおよび少なくとも１つの出力デバイスを備えるプログラム可能な複数のシステム上で実行する複数のコンピュータプログラムまたはプログラムコードとして実装されてもよい。
【０１０３】
図１５に示すコード１５３０などのプログラムコードは、本明細書に記載された複数の機能を実行し、出力情報を生成するべく、複数の入力命令に適用されてもよい。出力情報は、１または複数の出力デバイスに、公知の態様で適用されてもよい。この適用のために、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特殊用途集積回路（ＡＳＩＣ）またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０１０４】
プログラムコードは、処理システムと通信を行うべく、高水準の手順型またはオブジェクト指向プログラミング言語で実装されてもよい。プログラムコードは、必要に応じて、アセンブリ言語または機械言語でさらに実装されてもよい。実際には、本明細書に記載された複数のメカニズムは、その範囲において、任意の特定のプログラム言語に限定されるものではない。いずれの場合であっても、言語は、コンパイル言語またはインタプリタ型言語であってもよい。
【０１０５】
少なくとも１つの実施形態のうち１または複数の態様は、機械可読媒体に記憶された、プロセッサ内の様々なロジックを表す複数の表現命令によって実装されてもよく、このような命令は、機械に読み出された場合に、本明細書に記載される複数の技術を実行するべく、機械にロジックを組み立てさせる。「ＩＰコア」として知られるそのような複数の表現は、有形の機械可読媒体上に記憶され、様々な顧客または製造工場に供給されて、実際にロジックまたはプロセッサを作り出す製造機械に読み込まれてもよい。
【０１０６】
そのような機械可読記憶媒体は、限定的ではないが、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、書き換え可能コンパクトディスク（ＣＤ−ＲＷ）及び磁気光ディスクを含む任意の他のタイプのディスク、リードオンリメモリ（ＲＯＭ）などの半導体デバイス、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、フラッシュメモリ、消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、位相変化メモリ（ＰＣＭ）、磁気または光カードなどのランダムアクセスメモリ（ＲＡＭ）、もしくは複数の電子的命令を記憶するために適した任意の他のタイプのメディアなどの記憶媒体を含む、機械またはデバイスによって製造または形成される複数の物品の非一時的かつ有形の構成を含んでもよい。
【０１０７】
従って、本発明の複数の実施形態は、複数の命令を含む、または本明細書に記載される複数の構造、複数の回路、複数の装置、複数のプロセッサ及び／または複数のシステム機能を定義するハードウェア記述言語（ＨＤＬ）などの設計データを含む非一時的かつ有形の機械可読媒体をさらに含む。そのような複数の実施形態は、プログラム製品と称されてもよい。
【０１０８】
［エミュレート（バイナリ変換、コードモーフィング等を含む）］
場合によっては、命令変換部は、ソース命令セットからターゲット命令セットへと命令を変換するために用いられてもよい。例えば、命令変換部は、命令をコアによって処理されるべき１または複数の他の命令に、（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）変換、モーフィング、エミュレートまたは他の方法で変換してもよい。命令変換部は、ソフトウェア、ハードウェア、ファームウェアまたはこれらの組み合わせで実装されてもよい。命令変換部は、プロセッサ上にあってもよく、プロセッサ外にあってもよく、または一部がプロセッサ上かつ一部がプロセッサ外にあってもよい。
【０１０９】
図１８は、ソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換する、本発明の複数の実施形態に係るソフトウェア命令変換器の利用を対比させるブロック図である。例示された実施形態では、命令変換部は、ソフトウェア命令変換器であるが、代替的に、命令変換部は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの様々な複数の組み合わせで実装されてもよい。図１８は、少なくとも１つのｘ８６命令セットコア１８１６を有するプロセッサによってネイティブで実行され得るｘ８６バイナリコード１８０６を生成するために、ｘ８６コンパイラ１８０４を用いてコンパイルされ得る高水準言語１８０２のプログラムを示す。少なくとも１つのｘ８６命令セットコア１８１６を有するプロセッサは、少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサと実質的に同じ結果を出すべく、（１）インテル社製ｘ８６命令セットコアの命令セットの大部分、もしくは（２）複数のアプリケーションのオブジェクトコードバージョンまたは少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサ上で実行されることが想定された他のソフトウェアを互換可能に実行または他の方法で処理することにより、少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサと実質的に同じ複数の機能を実行可能な任意のプロセッサを表す。ｘ８６コンパイラ１８０４は、さらなるリンク処理の有無に関わらず、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１８１６上で実行可能なｘ８６バイナリコード１８０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図１８は、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ１８１４（例えば、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズ（ＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ）のＭＩＰＳ命令セットを実行する、及び／またはカリフォルニア州サニーベールのＡＲＭホールディングス（ＡＲＭ  Ｈｏｌｄｉｎｇｓ）のＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によってネイティブで実行され得る、代替的な命令セットバイナリコード１８１０を生成するべく、代替的な命令セットコンパイラ１８０８を用いてコンパイルされ得る高水準言語１８０２のプログラムを示す。命令変換部１８１２は、ｘ８６バイナリコード１８０６を、ｘ８６命令セットコアを有さないプロセッサ１８１４によってネイティブで実行され得るコードに変換するために用いられる。この変換されたコードは、このような変換が可能な命令変換部の製造は難しいため、代替的な命令セットバイナリコード１８１０と同じとなる可能性は低いが、しかしながら変換されたコードは、全般的な演算を達成し、代替的な命令セットからの複数の命令により補完される。したがって、命令変換部１８１２は、エミュレート、シミュレーションまたは任意の他の処理を介して、プロセッサもしくはｘ８６命令セットプロセッサまたはコアを有さない他の電子デバイスにｘ８６バイナリコード１８０６を実行させるソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表す。
【図１】
2015535982.tif 000003
【図２】
2015535982.tif 000004
【図３】
2015535982.tif 000005
【図４】
2015535982.tif 000006
【図５】
2015535982.tif 000007
【図６】
2015535982.tif 000008
【図７Ａ】
2015535982.tif 000009
【図７Ｂ】
2015535982.tif 000010
【図７Ｃ】
2015535982.tif 000011
【図８Ａ】
2015535982.tif 000012
【図８Ｂ】
2015535982.tif 000013
【図８Ｃ】
2015535982.tif 000014
【図９】
2015535982.tif 000015
【図１０】
2015535982.tif 000016
【図１１Ａ】
2015535982.tif 000017
【図１１Ｂ】
2015535982.tif 000018
【図１２Ａ】
2015535982.tif 000019
【図１２Ｂ】
2015535982.tif 000020
【図１３】
2015535982.tif 000021
【図１４】
2015535982.tif 000022
【図１５】
2015535982.tif 000023
【図１６】
2015535982.tif 000024
【図１７】
2015535982.tif 000025
【図１８】
2015535982.tif 000026
【国際調査報告】
2015535982.tif 000027
2015535982.tif 000028