(57)【要約】      （修正有）【課題】ＳＩＭＤ演算命令で参照する、ベクトル・レジスタの要素に対応する書き込みマスク・レジスタ内部におけるマスク・ビットの調整を全般に可能にする、共通の操作手段を提供する。【解決手段】ＫＺＢＴＺの実行では、第１の入力マスクの末尾の最下位ゼロビット・ポジションを検出し、出力マスクを、その第１の入力マスクの値を有するようにセットするが、第１の入力マスクにおける末尾の最下位ゼロビット・ポジションよりも最上位ビット・ポジションに近い全てのビット・ポジションはゼロにセットされた状態である。いくつかの実施形態では、第１の入力マスクのビット・ポジションが、対応する第２の入力マスクのビット・ポジションに応じて末尾の最下位ゼロビット・ポジション計算に考慮されないように、第２の入力マスクが書き込みマスクとして使用される。【選択図】図１
2014182796.tif 000002
【特許請求の範囲】
【請求項１】
ゼロマスク・ビフォー・末尾ゼロ（ＫＺＢＴＺ）命令を復号化する復号化ロジックにおいて、前記ＫＺＢＴＺ命令が第１のソース書き込みマスク・オペランドおよびデスティネーション書き込みマスク・オペランドを含む復号化ロジックと、
前記第１のソース書き込みマスクにおいて末尾の最下位ゼロビット・ポジションを検出し、前記デスティネーション書き込みマスクを、前記第１のソース書き込みマスクの値を有するようにセットするが、前記第１のソース書き込みマスクにおける前記末尾の最下位ゼロビット・ポジションよりも最上位ビット・ポジションに近い全てのビット・ポジションはゼロにセットされた状態になるように、前記復号化されたＫＺＢＴＺ命令を実行する実行ロジックとを備える装置。
【請求項２】
前記ＫＺＢＴＺ命令がさらに、第２のソース書き込みマスク・オペランドを含み、前記末尾の最下位ゼロビット・ポジションが、前記第２のソース書き込みマスク・オペランドのそれに対応するビット・ポジションが１にセットされた場合、前記第１のソース書き込みマスク・オペランドにおいてゼロにセットされる最初のビット・ポジションである、請求項１に記載の装置。
【請求項３】
前記書き込みマスク・オペランドが専用書き込みマスク・レジスタである、請求項１または２に記載の装置。
【請求項４】
前記専用書き込みマスク・レジスタのサイズが８または１６ビットである、請求項３に記載の装置。
【請求項５】
前記書き込みマスク・オペランドが汎用レジスタである、請求項１から４のいずれか１項に記載の装置。
【請求項６】
前記実行ロジックが、前記第１のソース・オペランドの各ビット・ポジションを最下位から最上位まで直列に評価する、請求項１から５のいずれか１項に記載の装置。
【請求項７】
前記ビット・ポジションの全てが何時評価完了したか判定するために、カウンタが前記実行ロジックで使用される、請求項６に記載の装置。
【請求項８】
コンピュータ・プロセッサでゼロマスク・ビフォー・末尾ゼロ（ＫＺＢＴＺ）命令を実行する方法であって、前記ＫＺＢＴＺ命令が、第１のソース書き込みマスク・オペランドおよびデスティネーション書き込みマスク・オペランドを含み、
前記第１のソース書き込みマスクにおいて末尾の最下位ゼロビット・ポジションを検出するステップと、
前記デスティネーション書き込みマスクを、前記第１のソース書き込みマスクの値を有するようにセットするが、前記第１のソース書き込みマスクにおける前記末尾の最下位ゼロビット・ポジションよりも最上位ビット・ポジションに近い全てのビット・ポジションはゼロにセットされた状態になるようにするステップとを含む方法。
【請求項９】
前記ＫＺＢＴＺ命令がさらに、第２のソース書き込みマスク・オペランドを含み、前記末尾の最下位ゼロビット・ポジションが、前記第２のソース書き込みマスク・オペランドのそれに対応するビット・ポジションが１にセットされた場合、前記第１のソース書き込みマスク・オペランドにおいてゼロにセットされる最初のビット・ポジションである、請求項８に記載の方法。
【請求項１０】
前記書き込みマスク・オペランドが専用書き込みマスク・レジスタである、請求項８または９に記載の方法。
【請求項１１】
前記専用書き込みマスク・レジスタのサイズが８または１６ビットである、請求項１０に記載の方法。
【請求項１２】
前記書き込みマスク・オペランドが汎用レジスタである、請求項８から１１のいずれか１項に記載の方法。
【請求項１３】
前記第１のソース書き込みマスク・オペランドの各ビット・ポジションが、最下位から最上位まで直列に評価される、請求項８から１２のいずれか１項に記載の方法。
【請求項１４】
前記ビット・ポジションの全てが何時評価完了したかを、カウンタに基づいて判定する、請求項１３に記載の方法。
【請求項１５】
ゼロマスク・ビフォー・末尾ゼロ（ＫＺＢＴＺ）命令をプロセッサに実行させるコードを含んだ、プログラムであって、前記ＫＺＢＴＺ命令が、第１のソース書き込みマスク・オペランドおよびデスティネーション書き込みマスク・オペランドを含み、
前記第１のソース書き込みマスクにおいて末尾の最下位ゼロビット・ポジションを検出するステップと、
前記デスティネーション書き込みマスクを、前記第１のソース書き込みマスクの値を有するようにセットするが、前記第１のソース書き込みマスクにおける前記末尾の最下位ゼロビット・ポジションよりも最上位ビット・ポジションに近い全てのビット・ポジションはゼロにセットされた状態になるようにするステップとを前記プロセッサに実行させるプログラム。
【請求項１６】
前記ＫＺＢＴＺ命令がさらに、第２のソース書き込みマスク・オペランドを含み、前記末尾の最下位ゼロビット・ポジションが、前記第２のソース書き込みマスク・オペランドのそれに対応するビット・ポジションが１にセットされた場合、前記第１のソース書き込みマスク・オペランドにおいてゼロにセットされる最初のビット・ポジションである、請求項１５に記載のプログラム。
【請求項１７】
前記書き込みマスク・オペランドが専用書き込みマスク・レジスタである、請求項１５または１６に記載のプログラム。
【請求項１８】
前記専用書き込みマスク・レジスタのサイズが８または１６ビットである、請求項１７に記載のプログラム。
【請求項１９】
前記書き込みマスク・オペランドが汎用レジスタである、請求項１５から１８のいずれか１項に記載のプログラム。
【請求項２０】
前記第１のソース書き込みマスク・オペランドの各ビット・ポジションが、最下位から最上位まで直列に評価される、請求項１５から１９のいずれか１項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は一般にコンピュータ・プロセッサ・アーキテクチャに関し、より具体的には、実行時に特定の結果を引き起こす命令に関する。
【背景技術】
【０００２】
命令セットすなわち命令セット・アーキテクチャ（ＩＳＡ）は、プログラミングと関係付けられたコンピュータ・アーキテクチャの一部分であり、ネイティブ・データ型、命令、レジスタ・アーキテクチャ、アドレシング・モード、メモリ・アーキテクチャ、割り込み／例外処理、および外部入出力（Ｉ／Ｏ）を含むことができる。命令という用語は一般に、ここではマクロ命令、つまり実行するためにプロセッサに提供される命令を示すことに留意すべきである。これは、プロセッサのデコーダがマクロ命令を復号化した結果生じるマイクロ命令またはＭｉｃｒｏ−Ｏｐｓ（マイクロオプス）とは対照的である。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第５，４４６，９１２号
【特許文献２】米国特許第５，２０７，１３２号
【発明の概要】
【課題を解決するための手段】
【０００４】
本発明は添付の図面の図に例として示されるが、それらの図には限定されない。これらの図では、同じ参照記号は同様の要素を示す。
【０００５】
以下の説明では、多数の特定の詳細について述べる。しかしながらこれらの特定の詳細がなくても、本発明の実施形態を実施できることが理解されよう。それ以外の場合には、この説明の理解をあいまいにしないため、周知の回路、構造および技術は詳細に示していない。
【０００６】
この明細書における「一実施形態」、「ある実施形態」、「一実施形態の例」などについての言及は、記載されている実施形態は特定の機能、構造、または特性を含み得るが、あらゆる実施形態が必ずしもその特定の機能、構造、または特性を含み得るわけではないことを示す。さらに、かかる語句は必ずしも同一の実施形態を示すわけではない。さらに、特定の機能、構造、または特性をある実施形態に関して記載する場合、明示的に記載するしないを問わず他の実施形態に関してかかる機能、構造、または特性に影響が及ぶことは、当業者の知識の範囲内にあると言えよう。
【０００７】
概要
命令セット・アーキテクチャは、ＩＳＡを実装するプロセッサの内部設計であるマイクロ・アーキテクチャとは区別される。様々なマイクロ・アーキテクチャを備えるプロセッサが共通の命令セットを共有することができる。例えば、インテル（登録商標）社製Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、インテル社製コアプロセッサ、およびアドバンスト・マイクロ・ディバイシズ社（カルフォルニア州サニーベール）製プロセッサは、ｘ８６命令セットのほぼ同一のバージョン（より新しいバージョンにはいくつかの拡張が追加されている）を実装するが、異なる内部設計を有する。例えば、そのＩＳＡの同一レジスタ・アーキテクチャを異なるマイクロ・アーキテクチャに様々な方法で実装することができる。こういったマイクロ・アーキテクチャは、専用物理レジスタや１つまたは複数の動的に割り付けられる物理レジスタを含む既知の技術を使用しており、動的に割り付けられる物理レジスタは、レジスタ・リネーミング機構などを使用する（例えば、特許文献１に記載のレジスタ・エイリアス・テーブル（ＲＡＴ）、リオーダ・バッファ（ＲＯＢ）およびリタイアメント・レジスタ・ファイルの使用、特許文献２に記載のレジスタの複数マップと１つのプールの使用など）。他に指定されていない限り、 レジスタ・アーキテクチャ、レジスタ・ファイル、およびレジスタという語句は、ソフトウェア／プログラマから見えるものと、命令がレジスタを指定する方法を示す。具体性を求める場合、論理の、アーキテクチャ上の、またはソフトウェアビジブルの、という形容詞がレジスタ・アーキテクチャにおけるレジスタ／ファイルを示すために使用され、所与のマイクロ・アーキテクチャにおけるレジスタ（例えば物理レジスタ、リオーダ・バッファ、リタイアメント・レジスタ、レジスタ・プール）を示すために種々の形容詞が使用される。
【０００８】
命令セットは、１つまたは複数の命令フォーマットを含む。所与の命令フォーマットは、特に、実行すべき動作とその動作が実行されるオペランドを指定するために、様々なフィールド（ビット番号、ビット位置）を定義する。所与の命令が所与の命令フォーマットを使用して表現され、動作およびオペランドを指定する。命令ストリームは命令の特定のシーケンスであり、そのシーケンス内の命令ごとに、特定の命令フォーマットの命令が生じる。
【０００９】
科学上の、財務上の、自動ベクトル化された汎用の、ＲＭＳ（認識、抽出、合成）／映像およびマルチメディア用途（例えば２Ｄ／３Ｄグラフィックスや画像処理、ビデオ圧縮／復元、音声認識アルゴリズム、オーディオ操作など）はしばしば、多数のデータ項目について実行される同じ動作を必要とする（「データ並列性」と呼ばれる）。Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ（単一命令複数データ、ＳＩＭＤ）は、複数のデータ項目に対して同じ動作をプロセッサに実行させる命令のタイプを表す。ＳＩＭＤ技術は特に、レジスタ内のビットを、それぞれ個別値を表す複数の固定サイズのデータ要素に論理的に分割できるプロセッサに適する。例えば、６４ビット・レジスタ内のビットを、４個の個別の１６ビット・データ要素として操作されるソース・オペランドとして指定することができる。このデータ要素はそれぞれ個別の１６ビット値を表す。別の例として、２５６ビット・レジスタ内のビットを、４個の個別６４ビット・パックデータ要素（クワッドワード（Ｑ）サイズのデータ要素）、または８個の個別３２ビット・パックデータ要素（ダブルワード（Ｄ）サイズのデータ要素）、または１６個の個別１６ビット・パックデータ要素（ワード（Ｗ）サイズのデータ要素）、または３２個の個別８ビット・データ要素（バイト（Ｂ）サイズのデータ要素）として操作されるソース・オペランドとして指定することができる。このデータ・タイプは、パックデータ・タイプまたはベクトルデータ・タイプと呼ばれ、このデータ・タイプのオペランドは、パックデータ・オペランドまたはベクトル・オペランドと呼ばれる。つまり、パックデータ項目またはベクトルは、パックデータ要素のシーケンスを表し、パックデータ・オペランドまたはベクトル・オペランドは、ＳＩＭＤ命令のソースまたはデスティネーションのオペランドである（パックデータ命令またはベクトル命令としても知られる）。
【００１０】
例として、ＳＩＭＤ命令の１つのタイプは、２つのソース・ベクトル・オペランドに対して垂直の形で実行されて、同じデータ要素の数、同じデータ要素順序で同じサイズのデスティネーション・ベクトル・オペランド（結果ベクトル・オペランドとも呼ばれる）を生成する単一のベクトル動作を指定する。ソース・ベクトル・オペランドにおけるデータ要素はソース・データ要素と呼ばれ、デスティネーション・ベクトル・オペランドにおけるデータ要素はデスティネーション・データ要素または結果データ要素と呼ばれる。これらのソース・ベクトル・オペランドは同じサイズのものであり、同じ幅のデータ要素を含み、したがって同数のデータ要素を含む。この２つのソース・ベクトル・オペランドにおける同じビット・ポジションにあるソース・データ要素は、データ要素の対を形成する（対応するデータ要素とも呼ばれる。つまり、各ソース・オペランドのデータ要素ポジション０にあるデータ要素同士が対応し、各ソース・オペランドのデータ要素ポジション１にあるデータ要素同士が対応するなど）。上記のＳＩＭＤ命令によって指定された動作は、これらのソース・データ要素の各対に対して個別に実行されて、一致する数の結果データ要素を生成し、したがってソース・データ要素の各対は対応する結果データ要素を有する。その動作は垂直であるので、かつ、結果ベクトル・オペランドが同じサイズで、同数のデータ要素を有し、結果データ要素がソース・ベクトル・オペランドとして同じデータ要素順で格納されるので、その結果データ要素は、結果ベクトル・オペランドにおいて、そのソース・ベクトル・オペランドの対応するソース・データ要素の対と同じビット・ポジションにある。ＳＩＭＤ命令のこの例示的タイプに加えて、その他多様なＳＩＭＤ命令のタイプが存在する（例えば、１つだけ、または２個を超えるソース・ベクトル・オペランドを有するタイプ、水平の形で動作するタイプ、異なるサイズの結果ベクトル・オペランドを生成するタイプ、データ要素の異なるサイズを有するタイプ、かつ／または異なるデータ要素順を有するタイプなど）。デスティネーション・ベクトル・オペランド（またはデスティネーション・オペランド）という用語は、命令によって指定された動作を実行した直接的な結果として定義されると理解すべきである。この命令は、そのデスティネーション・オペランドを一定の位置に保存することを含み（その位置がその命令によって指定されたレジスタであるかメモリ・アドレスであるかは問わない）、別の命令によってソース・オペランドとしてそれにアクセスできるようになっている（その別の命令によってその同じ位置を指定することによってアクセスする）。
【００１１】
ｘ８６、ＭＭＸ（商標）、ストリーミングＳＩＭＤ拡張（ＳＳＥ）、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４．１、およびＳＳＥ４．２命令を含んだ命令セットを有するインテル社（登録商標）製Ｃｏｒｅ（商標）プロセッサで用いられているものなどのＳＩＭＤ技術は、アプリケーション処理能力の大幅な向上を可能にした（Ｃｏｒｅ（商標）およびＭＭＸ（商標）はインテル社（カリフォルニア州サンタクララ）の登録商標または商標である）。アドバンスド・ベクトル拡張（ＡＶＸ）（ＡＶＸ１およびＡＶＸ２）と呼ばれる、ＶＥＸコード体系を使用する追加のＳＩＭＤ拡張セットが、公開かつ／または公表されている（例えばインテル社（登録商標）の６４およびＩＡ−３２アーキテクチャ・ソフトウェア開発者マニュアル、２０１１年１０月や、インテル社（登録商標）アドバンスド・ベクトル拡張プログラミング・リファレンス、２０１１年６月を参照）。
【００１２】
以下の説明では、命令セット・アーキテクチャにおける次の特定の命令の動作について述べる前に説明を要するかもしれない項目をいくつか取り上げる。そのような項目の１つは「書き込みマスク・レジスタ」と呼ばれる。これは一般に、要素１個毎の計算操作を条件付きで制御するためにオペランドを述語化するのに使用される（以下では、マスク・レジスタという用語も用いることができ、この用語は、以下で述べる「ｋ」個のレジスタなどの書き込みマスク・レジスタを表す）。以下で用いられるように、書き込みマスク・レジスタは複数のビット（１６個、３２個、６４個など）を格納し、その書き込みマスク・レジスタの各アクティブ・ビットがＳＩＭＤ処理の間、ベクトル・レジスタのパックデータ要素の動作／更新を支配する。一般に、プロセッサ・コアで利用可能な書き込みマスク・レジスタは複数存在する。
【００１３】
命令セット・アーキテクチャは少なくともいくつかのＳＩＭＤ命令を含んでいる。そのＳＩＭＤ命令はベクトル動作を指定し、ソース・レジスタおよび／またはデスティネーション・レジスタを下記のベクトル・レジスタから選択するためのフィールドを有する（例示的なＳＩＭＤ命令は、ベクトル・レジスタのうちの１つまたは複数の内容に対して実行されるベクトル動作と、ベクトル・レジスタのうちの１つに格納されるそのベクトル動作の結果を指定することができる）。本発明の様々な実施形態が様々なサイズのベクトル・レジスタを有し、より大きい／より小さい／異なるサイズのデータ要素をサポートすることができる。
【００１４】
ＳＩＭＤ命令によって指定されたマルチビットのデータ要素のサイズ（例えば、バイト、ワード、ダブルワード、クワッドワード）によって、ベクトル・レジスタ内部における「データ要素ポジション」のビット位置が決まり、ベクトル・オペランドのサイズによって、データ要素の数が決まる。パックデータ要素は、特定のポジションに格納されたデータを表す。つまり、デスティネーション・オペランドにおけるデータ要素のサイズと、デスティネーション・オペランドのサイズ（デスティネーション・オペランド内にあるビット総数）に応じて（または言い換えれば、デスティネーション・オペランドのサイズと、デスティネーション・オペランド内部のデータ要素の数に応じて）、結果得られるベクトル・オペランド内部のマルチビット・データ要素ポジションのビット位置は変わる（例えば、結果得られるベクトル・オペランドのデスティネーションがベクトル・レジスタである場合（この説明ではベクトル・レジスタとパックデータ要素レジスタは交換可能な形で使用されている）、デスティネーション・ベクトル・レジスタ内部のマルチビット・データ要素ポジションのビット位置が変わる）。例えば、マルチビット・データ要素のビット位置は、３２ビット・データ要素について動作するベクトル動作（データ要素ポジション０がビット位置３１：０を占有し、データ要素ポジション１がビット位置６３：３２を占有するなど）と、６４ビット・データ要素について動作するベクトル動作（データ要素ポジション０がビット位置６３：０を占有し、データ要素ポジション１がビット位置１２７：６４を占有するなど）とは異なる。
【００１５】
さらに、図１に示されているように、本発明の一実施形態による１アクティブ・ビットのベクトル書き込みマスク要素の数とベクトル・サイズとデータ要素サイズとには相関関係が存在する。１２８ビット、２５６ビット、および５１２ビットのベクトル・サイズが示されているが、他の幅も可能である。８ビットのバイト（Ｂ）、１６ビットのワード（Ｗ）、３２ビットのダブルワード（Ｄ）または単精度浮動小数点、および６４ビットのクワッドワード（Ｑ）または倍精度浮動小数点のデータ要素サイズが検討されているが、他の幅も可能である。図のように、ベクトル・サイズが１２８ビットのときは、ベクトルのデータ要素サイズが８ビットの場合マスキングに１６ビットを使用することができ、ベクトルのデータ要素サイズが１６ビットの場合マスキングに８ビットを使用することができ、ベクトルのデータ要素サイズが３２ビットの場合マスキングに４ビットを使用することができ、ベクトルのデータ要素サイズが６４ビットの場合マスキングに２ビットを使用することができる。ベクトル・サイズが２５６ビットのときは、パックデータ要素幅が８ビットの場合マスキングに３２ビットを使用することができ、ベクトルのデータ要素サイズが１６ビットの場合マスキングに１６ビットを使用することができ、ベクトルのデータ要素サイズが３２ビットの場合マスキングに８ビットを使用することができ、ベクトルのデータ要素サイズが６４ビットの場合マスキングに４ビットを使用することができる。ベクトル・サイズが５１２ビットのときは、ベクトルのデータ要素サイズが８ビットの場合マスキングに６４ビットを使用することができ、ベクトルのデータ要素サイズが１６ビットの場合マスキングに３２ビットを使用することができ、ベクトルのデータ要素サイズが３２ビットの場合マスキングに１６ビットを使用することができ、ベクトルのデータ要素サイズが６４ビットの場合マスキングに８ビットを使用することができる。
【００１６】
ベクトル・サイズとデータ要素サイズの組合せに応じて、全６４ビット、または６４ビットの一部分のみを書き込みマスクとして使用することができる。一般に、単一の要素毎マスキング制御ビットを使用する場合、マスキングに使用されるベクトル書き込みマスク・レジスタ内のビット（アクティブ・ビット）の数は、ベクトル・サイズ（ビット単位）をベクトルのデータ要素サイズ（ビット単位）で割ったものに等しい。
【００１７】
上記で指摘したように、書き込みマスク・レジスタは、ベクトル・レジスタの要素に対応するマスク・ビットを含み（またはメモリ位置）、操作が実行されるべき要素の状況を追跡する。このため、ベクトル・レジスタに対するのと同様の挙動を上記マスク・ビット上で繰り返し、書き込みマスク・レジスタ内部における上記マスク・ビットの調整を全般に可能にする、共通の操作があると望ましい。
【００１８】
図２は、１つまたは複数のＫＺＢＴＺ命令２０４を実行するためのプロセッサ（プロセッサ・コア）２００の例示的実施形態のブロック図である。いくつかの実施形態では、プロセッサは汎用プロセッサであってよい（例えばデスクトップ、ラップトップ、サーバおよびそれに類するコンピュータで使用されるタイプのプロセッサなど）。あるいはプロセッサは専用プロセッサであってもよい。適当な専用プロセッサの例は以下を含むがそれに限定されない。つまり数例を挙げると、ネットワーク・プロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックス・プロセッサ、コプロセッサ、埋込み型プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、およびコントローラである。このプロセッサは、各種復号命令セット・コンピューティング（ＣＩＳＣ）プロセッサ、各種縮小命令セット・コンピューティング（ＲＩＳＣ）プロセッサ、各種超長命令語（ＶＬＩＷ）プロセッサ、それらの各種複合体、または完全に他のタイプのプロセッサのうちの任意のものであってよい。
【００１９】
プロセッサ２００は、アーキテクチャから見えるレジスタ２０５（例えばアーキテクチャ上のレジスタ・ファイル）を含む。アーキテクチャ上のレジスタはまた、本明細書では単にレジスタと呼ぶことができる。他に指定されていない、またはそうではないことが明らかでない限り、アーキテクチャ上のレジスタ、レジスタ・ファイル、およびレジスタという語句は、本明細書では、ソフトウェアおよび／またはプログラマから見えるレジスタ、および／またはオペランドを特定するためにマクロ命令またはアセンブリ言語命令によって指定されるレジスタを示すために使用される。これらのレジスタは、所与のマイクロ・アーキテクチャ内にある他の非アーキテクチャまたはアーキテクチャから見えないレジスタ（例えば、命令によって使用される一時的なレジスタ、リオーダ・バッファ、リタイアメント・レジスタなど）と対照をなす。レジスタは一般に、オンダイのプロセッサ記憶位置を表す。例示したアーキテクチャ上のレジスタは、パックデータ・レジスタ２０６を含む。各パックデータ・レジスタは、パックデータまたはベクトルデータを格納するように動作可能であってよい。例示したアーキテクチャ上のレジスタはまた、パックデータ動作マスク・レジスタ２０７を含む。各パックデータ動作マスク・レジスタは、パックデータ動作マスクを格納するように動作可能であってよい。こういったレジスタを、この説明では書き込みマスク・レジスタと呼ぶことができる。パックデータ・オペランドは、パックデータ・レジスタ２０７に格納することができる。
【００２０】
上記プロセッサはまた、実行ロジック２０８を含む。上記実行ロジックは、１つまたは複数のＫＺＢＴＺ命令２０４を実行または処理するように動作可能である。いくつかの実施形態では、上記実行ロジックは、これらの命令を実行するための特定のロジックを含むことができる（例えばファームウェアと潜在的に組み合わせられた特定の回路またはハードウェアなど）。
【００２１】
効率的にベクトル化するために重要なアルゴリズム・パターンは、間接的なメモリ位置に対する読み／書きを伴う計算である。例えばＡ［Ｂ［ｉ］］をＡ［Ｃ［ｉ］］にコピーするなどである。このタイプのループのベクトル化は、複数のインデックス・ベクトル（すなわちＢ［ｉ］およびＣ［ｉ］）に対する集約／分散操作を伴う。しかしながら、このベクトル化は、複数の読み取りと書き込みを同時に行うことによるメモリの依存関係の違反が無いこと前提としている。例えば、Ｂ［ｉ］からのＳＩＭＤ幅要素からなるグループがＣ［ｉ］と共通の値を保持する場合、リード・アフター・ライト依存性を違反する可能性がある。より具体的には、Ｂ［０］＝０、Ｂ［１］＝１、Ｃ［０］＝１、およびＣ［１］＝２の場合、Ａ［Ｃ［０］］への書き込みの次にＡ［Ｂ［１］］の読み取りを行わなければならない。集約命令により読み取りを全て同時に行い、次いで分散命令により書き込みを全て行うと、この依存性を違反し、解が不正確になる可能性がある。
【００２２】
この問題の解決を助けるために、ｖｃｏｎｆｌｉｃｔと呼ばれる命令が第１のベクトルの各要素を第２のベクトルの全ての要素と比較し、この比較結果をビット・ベクトルのセットとしてベクトル・レジスタ内に出力する。その狙いは、「競合」を検出すること、または様々な集約／分散をまたいでインデックスを整合することである。何らかの競合がある場合、所与のＳＩＭＤ幅要素のグループに対する計算が反復して実行され、以下の疑似コードに示されているように、できるだけ多くの要素を同時に実行する。
for (i=0; i<N; i+=SIMD_WIDTH) {
gather_indices = vload (&B[i]);
scatter_indices = vload (&C[i]);
comparisons = vconflict (gather_indices, scatter_indices);
elements_left_mask = all_ones;
do {
do_these = Compute_Mask_of_Non_Conflicting_Elements (comparisons, elements_left_mask);
Gather_Compute_Scatter (gather_indices, scatter_indices, do_these);
elements_left_mask ^= do_these;
} while (elements_left_mask != 0);
}
【００２３】
上記の「Compute_Mask_of_Non_Conflicting_Elements」は自明ではない操作である。ｖｃｏｎｆｌｉｃｔと併用した既存の命令は全て、１つの問題を共有する。つまり、２つのインデックス・セットの範囲内で起こり得るデータの依存関係を全て検出するには、ｖｃｏｎｆｌｉｃｔの複数のインスタンスを実行し、その比較結果を追加操作しなければならない。具体的には、上記の例において、リード・アフター・ライト（ＲＡＷ）依存性を検出するために、集約インデックス・ベクトルと分散インデックス・ベクトルとの重複インデックスをどのように検出しなければならないのか示している。しかしながら、この提案した、リード・アフター・ライト（ＲＡＷ）依存性を守らせ、いくつかの要素の処理を遅延させる解決策は、ライト・アフター・ライト（ＷＡＷ）依存性またはライト・アフター・リード（ＷＡＲ）依存性の違反を引き起こす可能性がある。例えば、Ｂ［０］＝０、Ｂ［１］＝１、Ｂ［２］＝２、Ｃ［０］＝１、Ｃ［１］＝３、およびＣ［２］＝３であると仮定する。上記の例と同様に、第２の反復は第１の反復に対してＲＡＷ依存性を有するので、その第２の反復は遅延するはずである。第３の反復にはＲＡＷ依存性が無く、したがってその第３の反復を第１の反復と同時に実行する選択肢が存在する可能性がある。しかしながら、それが行われた場合、Ａ［Ｃ［２］］（＝Ａ［３］）への書き込みがＡ［Ｃ［１］］（＝Ａ［３］）への書き込みの前に生じ、ＷＡＷ依存性を違反する。
【００２４】
以下に、命令セットに属する、ゼロマスク・ビフォー・末尾ゼロ（「ＫＺＢＴＺ」）命令と一般に呼ばれる命令の実施形態と、かかる命令を実行するために使用できるシステム、アーキテクチャ、命令フォーマットなどの実施形態について記載する。ＫＺＢＴＺの実行では、第１の入力マスクの末尾の最下位ゼロビット・ポジションを検出し、出力マスクを、その第１の入力マスクの値を有するようにセットするが、第１の入力マスクにおける末尾の最下位ゼロビット・ポジションよりも最上位ビット・ポジションに近い全てのビット・ポジションはゼロにセットされた状態である。いくつかの実施形態では、第１の入力マスクのビット・ポジションが、対応する第２の入力マスクのビット・ポジションに応じて末尾の最下位ゼロビット・ポジションの計算に考慮されないように、第２の入力マスクが書き込みマスクとして使用される。
【図面の簡単な説明】
【００２５】
【図１】本発明の一実施形態による１アクティブ・ビットのベクトル書き込みマスク要素の数とベクトル・サイズとデータ要素サイズの相関関係の図である。
【図２】１つまたは複数の命令を実行するプロセッサ（プロセッサ・コア）の例示的実施形態のブロック図である。
【図３Ａ】ＫＺＢＴＺ動作の例の図である。
【図３Ｂ】ＫＺＢＴＺ動作の例の図である。
【図４】プロセッサにおけるＫＺＢＴＺ命令の実行の一実施形態の図である。
【図５】ＫＺＢＴＺ命令を処理する方法の一実施形態の図である。
【図６】本発明の一実施形態によるレジスタ・アーキテクチャ６００のブロック図である。
【図７Ａ】本発明の実施形態によるインオーダ・パイプラインの例とレジスタ・リネーミングを行うアウトオブオーダ発行／実行パイプラインの例を示すブロック図である。
【図７Ｂ】本発明の実施形態によるプロセッサに含まれる、インオーダ・アーキテクチャ・コアの例示的実施形態とレジスタ・リネーミングを行うアウトオブオーダ発行／実行アーキテクチャ・コアの例を示すブロック図である。
【図８Ａ】インオーダ・コア・アーキテクチャのより具体的な例のブロック図である。このコアは、１つのチップ内にある複数の論理ブロック（同じタイプおよび／または異なるタイプの他のコアを含む）のうちの１つであるはずである。
【図８Ｂ】インオーダ・コア・アーキテクチャのより具体的な例のブロック図である。このコアは、１つのチップ内にある複数の論理ブロック（同じタイプおよび／または異なるタイプの他のコアを含む）のうちの１つであるはずである。
【図９】本発明の実施形態に従って複数のコアを有することができ、統合メモリ・コントローラを有することができ、統合グラフィックスを有することができるプロセッサ９００のブロック図である。
【図１０】コンピュータ・アーキテクチャの例のブロック図である。
【図１１】コンピュータ・アーキテクチャの例のブロック図である。
【図１２】コンピュータ・アーキテクチャの例のブロック図である。
【図１３】コンピュータ・アーキテクチャの例のブロック図である。
【図１４】本発明の実施形態によるソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの用法を対比的に示すブロック図である。
【発明を実施するための形態】
【００２６】
図３Ａ及び図３ＢにＫＺＢＴＺの動作例が示されている。図３Ａに、２つのソース書き込みマスク・レジスタ３０１および３０３とデスティネーション書き込みマスク３０５がある。第１のソース書き込みマスク・レジスタ３０１における最初の「０」値が３番目のビット・ポジション（ＳＲＣ１［２］）に示されている。第２のソース書き込みマスク・レジスタ３０３の対応するビット・ポジションでは値は「１」である。これは、このビット・ポジションが、第１のソース書き込みマスク・レジスタ３０１内ではゼロであり、かつ第２のソース書き込みマスク・レジスタ３０３内では有効化されている、最初のビット・ポジションであることを意味する。したがってデスティネーション書き込みマスク・レジスタ３０５は、ビット・ポジション３に至るまで第１の書き込みマスク・レジスタ３０１の内容を有し、そのビット・ポジションおよびそれより上位のビット・ポジションでは０になるようにセットされる。
【００２７】
図３Ｂに、２つのソース書き込みマスク・レジスタ３０７および３０９とデスティネーション書き込みマスク３１１がある。第１のソース書き込みマスク・レジスタ３０７における最初の「０」値が３番目のビット・ポジション（ＳＲＣ１［２］）内に示されている。第２のソース書き込みマスク・レジスタ３０９の対応するビット・ポジションでは値は「０」である。これは、このビット・ポジションが、末尾の最下位ゼロビット・ポジションであると評価されていないことを意味する。両方の要件を満たす最初のビット・ポジションはビット・ポジション４である（ＳＲＣ１［３］およびＳＲＣ２［３］）。したがってデスティネーション書き込みマスク・レジスタ３１１は、ビット・ポジション４に至るまで第１の書き込みマスク・レジスタ３０７の内容を有し、そのビット・ポジションおよびそれより上位のビット・ポジションでは０になるようにセットされる。
【００２８】
ＫＺＢＴＺのフォーマットの例
この命令のフォーマットの例は「ＫＺＢＴＺ  Ｋ１，Ｋ２，Ｋ３」である。ここで、オペランドＫ１がデスティネーション書き込みマスク・レジスタであり、Ｋ２およびＫ３がソース書き込みマスク・レジスタであり、ＫＺＢＴＺが命令のオペコードである。いくつかの実施形態では、Ｋ１、Ｋ２、およびＫ３は上記で詳述した専用書き込みマスク・レジスタである。他の実施形態では、Ｋ１、Ｋ２、およびＫ３は汎用レジスタである。
【００２９】
ＫＺＢＴＺ実行方法の例
図４に、プロセッサでＫＺＢＴＺ命令を実行する実施形態が示されている。４０１で、第１および第２のソース書き込みマスク・オペランド、デスティネーション書き込みマスク・オペランド、およびオペコードを有するＫＺＢＴＺ命令がフェッチされる。
【００３０】
４０３で、復号化ロジックによってＫＺＢＴＺ命令が復号化される。
【００３１】
４０５で、ソース・オペランドの値が取り出される／読み取られる。例えば、ソース書き込みマスク・レジスタが読み取られる。
【００３２】
４０７で、復号化されたＫＺＢＴＺ命令（またはマイクロ・オペレーションなどのかかる命令を含んだ動作）が１つまたは複数の機能ユニットなどの実行資源によって実行される。これは、第２のソース書き込みマスク・オペランド内の対応するビット・ポジションに値１を有する、第１のソース書き込みマスク・オペランド内の最下位ゼロビット・ポジションを検出するためである。このビット・ポジションが末尾の最下位ゼロビット・ポジションを意味する。この例が図３に示されている。
【００３３】
４０９で、末尾の最下位ゼロビット・ポジションまでの（ただしそのポジションは含まない）値が、デスティネーション書き込みマスク・オペランド内の対応するビット・ポジションに格納される。さらに、デスティネーション書き込みマスク・オペランドの残りのビット・ポジションは０にセットされる。４０７と４０９は個別に示したが、実施形態によっては上記命令の実行の一部分としてまとめて実行される。
【００３４】
図５に、ＫＺＢＴＺ命令を処理する方法の実施形態が示されている。この実施形態では、動作４０１〜４０５の全てではないにせよいくつかが先に実行されているものとする。ただし、それらは下記に記載する詳細をはっきりさせるために示していない。例えば、フェッチおよび復号化は図示せず、オペランドの取り出しも図示しない。この例では、各ビット・ポジションは並行して処理されるが、ビット・ポジションを直列に評価することもできる。
【００３５】
５０１で、第１のソース書き込みマスク・レジスタの内容が、デスティネーション書き込みマスク・レジスタに書き込まれる。いくつかの実施形態では、第１のソース書き込みマスク・レジスタの内容が、上記の代わりに一時的なレジスタまたはその他のデータ構造に書き込まれる。
【００３６】
５０２で、一時的な変数が０にセットされる。この一時的な変数は、５０３における判定の数値が第１のソース書き込みマスク・レジスタにおけるビット・ポジションの番号を超えたかどうか判定するために、カウンタとして使用される。
【００３７】
５０３では、判定が以下のもので構成される。１）第１のソース書き込みマスク・レジスタにおけるビット・ポジションの番号よりもカウンタが小さいかどうか、２）第１のソース書き込みマスク・レジスタのカウンタ値のビット・ポジションにおけるビット値が１であるかどうか、または３）第２のソース書き込みマスク・レジスタのカウンタ値のビット・ポジションにおけるビット値が０であるかどうか。これら２）と３）の判定の両方が偽の場合、次のステップは、上記カウンタ値のビット・ポジションから最上位ビット・ポジションまでのデスティネーション書き込みマスク・レジスタのビット・ポジションをすべてゼロにすることになる（５０７）。上記のカウンタ判定に対する偽は、第１の書き込みマスク全体が評価完了し、末尾の最下位ゼロビット・ポジションが検出されなかったことを意味する。したがって、第１のソース書き込みマスクのビット・ポジションに格納された値が１ではないことに対する偽表示は、ゼロ値という表示である。第２のソース書き込みマスク・レジスタのその同じビット・ポジションに格納された値が１のときに、末尾の最下位ゼロビット・ポジションが検出されている。
【００３８】
これら２）と３）の判定のいずれかが真の場合、次のステップではカウンタを増やし（５０５）、５０３の判定を再度行う。
【００３９】
ＫＺＢＴＺの使用例について以下で説明する。この例では、上記に対する解決策は、先の反復の前に後の反復の実行を許可しないことである。したがってベクトル／ＳＩＭＤの実行は、最初のＲＡＷ依存時に停止しなければならない。入力マスクｋ２が、残りのＲＡＷ依存性を持たないまだ計算する必要がある要素のためにセットされたビットを有するマスクであり、入力マスクｋ３がまだ計算する必要がある全ての要素を示すマスクである場合、ベクトル／ＳＩＭＤの実行では、ＲＡＷ競合を有する最初の要素を検出し、それより後の要素のための全てのビットをゼロにする。これにより、このようなベクトル化ループのための以下のアルゴリズムが導かれる。
for (i=0; i<N; i+=SIMD_WIDTH) {
gather_indices = vload (&B[i]);
scatter_indices = vload (&C[i]);
comparisons = vconflict (gather_indices, scatter_indices);
elements_left_mask = all_ones;
do{
no_raw_mask = Compute_Mask_of_Elements_w/o_RAW_Dependence (comparisons, elements_left_mask);
stop_at_first_conf_mask = kzbtz (no_raw_mask, elements_left_mask);
Gather_Compute_Scatter (gather_indices, scatter_indices, stop_at_first_conf_mask);
elements_left_mask ^= stop_at_first_conf_mask;
} while (elements_left_mask != 0);
}
【００４０】
レジスタ・アーキテクチャの例
図６は、本発明の一実施形態によるレジスタ・アーキテクチャ６００のブロック図である。示されている実施形態には以下のものが存在する。幅が５１２ビットの３２個のベクトル・レジスタ６１０−これらのレジスタはｚｍｍ０〜ｚｍｍ３１と呼ばれる。下位１６個のｚｍｍレジスタの下位２５６ビットがレジスタｙｍｍ０〜１６に重なる。下位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）がレジスタｘｍｍ０〜１５に重なる。
【００４１】
汎用レジスタ６２５−示されている実施形態では、メモリ・オペランドをアドレス指定するために既存のｘ８６アドレッシング・モードと共に使用される１６個の６４ビット汎用レジスタが存在する。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、およびＲ８〜Ｒ１５という名前で参照される。
【００４２】
ＭＭＸパック整数フラット・レジスタ・ファイル６５０が別名割り当てされたスカラー浮動小数点スタック・レジスタ・ファイル６４５（ｘ８７スタック）−示されている実施形態では、ｘ８７スタックは８要素のスタックであり、このスタックは、３２／６４／８０ビット浮動小数点データに対してｘ８７命令セット拡張を使用してスカラー浮動小数点演算を実行するのに使用される。一方ＭＭＸレジスタは、６４ビットのパック整数データに対して演算を実行するのに使用され、ＭＭＸレジスタとＸＭＭレジスタの間で実行されるいくつかの演算のためのオペランドを保持するためにも使用される。
【００４３】
本発明の代替実施形態では、幅がより広いまたは狭いレジスタを使用することもできる。さらに、本発明の代替実施形態では、より多い、より少ない、または異なるレジスタ・ファイルおよびレジスタを使用することができる。
【００４４】
コア・アーキテクチャ、プロセッサ、およびコンピュータ・アーキテクチャの例
プロセッサ・コアは、様々なプロセッサに、様々な目的のために、様々な方法で実装することができる。例えば、かかるコアの実装は以下を含むことができる。１）汎用計算向けの汎用インオーダ・コア、２）汎用計算向けの高性能汎用アウトオブオーダ・コア、３）主にグラフィックスおよび／または科学計算（スループット・コンピューティング）向けの専用コア。各種プロセッサの実装には以下を含むことができる。１）汎用計算向けの１つまたは複数の汎用インオーダ・コアおよび／または汎用計算向けの１つまたは複数の汎用アウトオブオーダ・コアを含んだＣＰＵ、２）主にグラフィックスおよび／または科学（スループット）向けの１つまたは複数の専用コアを含んだコプロセッサ。かかる各種プロセッサは様々なコンピュータ・システム・アーキテクチャに結びつく。この様々なコンピュータ・システム・アーキテクチャには以下を含むことができる。１）ＣＰＵとは別個のチップ上にあるコプロセッサ、２）ＣＰＵと同じパッケージにある個別ダイ上のコプロセッサ、３）ＣＰＵと同じダイ上にあるコプロセッサ（この場合、かかるコプロセッサは専用ロジック呼ばれることがある。専用ロジックには例えば、統合グラフィックスおよび／または科学（スループット）ロジックや、専用コアなどがある）、４）同一ダイ上に上述のＣＰＵ（アプリケーション・コアまたはアプリケーション・プロセッサと呼ばれることがある）と上述のコプロセッサと追加の機能を含むことができるチップ上のシステム。次にコア・アーキテクチャの例について説明し、続いてプロセッサおよびコンピュータ・アーキテクチャの例の説明をする。
【００４５】
コア・アーキテクチャの例
インオーダ／アウトオブオーダ・コアのブロック図
【００４６】
図７Ａは、本発明の実施形態によるインオーダ・パイプラインの例とレジスタ・リネーミングを行うアウトオブオーダ発行／実行パイプラインの例を示すブロック図である。図７Ｂは、本発明の実施形態によるプロセッサに含まれる、インオーダ・アーキテクチャ・コアの例示的実施形態とレジスタ・リネーミングを行うアウトオブオーダ発行／実行アーキテクチャ・コアの例を示すブロック図である。図７Ａ及び図７Ｂにおける実線のボックスはインオーダ・パイプラインおよびインオーダ・コアを示し、破線のボックスの任意追加部分はレジスタ・リネーミングを行うアウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダの態様がアウトオブオーダの態様の部分集合であるものとして、アウトオブオーダの態様について説明する。
【００４７】
図７Ａでは、プロセッサ・パイプライン７００は、フェッチ段階７０２、長さ復号化段階７０４、復号化段階７０６、割付け段階７０８、リネーミング段階７１０、スケジューリング（ディスパッチまたは発行としても知られている）段階７１２、レジスタ読み取り／メモリ読み取り段階７１４、実行段階７１６、ライト・バック／メモリ書き込み段階７１８、例外処理段階７２２、およびコミット段階７２４を含む。
【００４８】
図７Ｂには、実行エンジン・ユニット７５０に結合されたフロントエンド・ユニット７３０を含んだプロセッサ・コア７９０が示されている。実行エンジン・ユニット７５０とフロントエンド・ユニット７３０は両方とも、メモリ・ユニット７７０に結合されている。コア７９０は、縮小命令セット・コンピューティング（ＲＩＳＣ）コア、複合命令セット・コンピューティング（ＣＩＳＣ）コア、超長命令ワード（ＶＬＩＷ）コア、またはハイブリッドもしくは代替コアタイプであってよい。他の選択肢として、コア７９０は、例えばネットワークまたは通信コア、圧縮エンジン、コプロセッサ・コア、汎用計算グラフィックス処理装置（ＧＰＧＰＵ）コア、グラフィックス・コアなどの、専用コアであってよい。
【００４９】
フロントエンド・ユニット７３０は、命令キャッシュ・ユニット７３４に結合された分岐予測ユニット７３２を含み、命令キャッシュ・ユニット７３４は命令トランスレーション・ルックアサイド・バッファ（ＴＬＢ）７３６に結合され、命令トランスレーション・ルックアサイド・バッファ（ＴＬＢ）７３６は命令フェッチ・ユニット７３８に結合され、命令フェッチ・ユニット７３８は復号化ユニット７４０に結合される。復号化ユニット７４０（またはデコーダ）は、命令を復号化し、出力として１つまたは複数のマイクロ・オペレーション、マイクロ・コード・エントリ・ポイント、マイクロ命令、その他の命令、またはその他の制御信号を生成することができる。これらは、元の命令から復号化されるか、その他の方法で元の命令を反映するか、元の命令から導き出される。復号化ユニット７４０は、様々な異なる機構を使用して実装することができる。適当な機構の例は、検索テーブル、ハードウェア実装、プログラマブル・ロジック・アレイ（ＰＬＡ）、マイクロ・コード・リード・オンリー・メモリ（ＲＯＭ）などを含むが、それに限定されない。一実施形態では、コア７９０は、特定のマクロ命令のためのマイクロ・コードを格納するマイクロ・コードＲＯＭまたはその他の媒体を含む（例えば復号化ユニット７４０の中や、その他の方法でフロントエンド・ユニット７３０の内部などに含まれる）。復号化ユニット７４０は、実行エンジン・ユニット７５０内にあるリネーム／アロケータ・ユニット７５２に結合される。
【００５０】
実行エンジン・ユニット７５０は、リタイアメント・ユニット７５４と一式の１つまたは複数のスケジューラ・ユニット７５６とに結合されたリネーム／アロケータ・ユニット７５２を含む。スケジューラ・ユニット７５６は、予約ステーション、中央命令ウィンドウなどを含む様々な任意の数のスケジューラを表す。スケジューラ・ユニット７５６は、物理レジスタ・ファイル・ユニット７５８に結合される。各物理レジスタ・ファイル・ユニット７５８は、１つまたは複数の物理レジスタ・ファイルを表し、この物理レジスタ・ファイルのうちの様々なものが、例えばスカラー整数、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば実行される次の命令のアドレスである命令ポインタ）などの、１つまたは複数の異なるデータ・タイプを格納する。一実施形態では、物理レジスタ・ファイル・ユニット７５８は、ベクトル・レジスタ・ユニットおよびスカラー・レジスタ・ユニットを備える。これらのレジスタ・ユニットは、アーキテクチャのベクトル・レジスタ、ベクトル・マスク・レジスタ、および汎用レジスタを提供することができる。物理レジスタ・ファイル・ユニット７５８はリタイアメント・ユニット７５４と重なっている。これは、レジスタ・リネーミングおよびアウトオブオーダ実行を実装できる様々な方法を示すためである（例えばリオーダ・バッファおよびリタイアメント・レジスタ・ファイルを使用する、フューチャ・ファイル、ヒストリ・バッファ、およびリタイアメント・レジスタ・ファイルを使用する、レジスタ・マップおよびレジスタのプールを使用するなど）。
【００５１】
リタイアメント・ユニット７５４および物理レジスタ・ファイル・ユニット７５８は、実行クラスタ７６０に結合される。実行クラスタ７６０は、１つまたは複数の実行ユニット７６２のセットおよび１つまたは複数のメモリ・アクセス・ユニット７６４のセットを含む。実行ユニット７６２は、様々なタイプのデータ（例えば、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して様々な操作（例えばシフト、加算、減算、乗算）を実行することができる。実施形態によっては、特定のファンクションまたはファンクション・セット専用のいくつかの実行ユニットを含むことができる一方、唯一の実行ユニットまたは、全てが全ファンクションを実行する複数の実行ユニットを含むことができる実施形態もある。スケジューラ・ユニット７５６、物理レジスタ・ファイル・ユニット７５８、および実行クラスタ７６０については、おそらくは複数であると示している。これは、ある特定の実施形態がある特定のタイプのデータ／オペレーションに対して個別のパイプラインを作り出すからである（そういったデータ／オペレーションとは例えば、スカラー整数パイプライン、スカラー浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリ・アクセス・パイプラインなど。そのそれぞれが、それ自体のスケジューラ・ユニット、物理レジスタ・ファイル・ユニット、および／または実行クラスタを有する。個別のメモリ・アクセス・パイプラインの事例では、このパイプラインの実行クラスタのみがメモリ・アクセス・ユニット（複数）７６４を有する特定の実施形態が実装される）。個別のパイプラインが使用される場合、これらのパイプラインの１つまたは複数がアウトオブオーダ発行／実行であり、それ以外がインオーダであってよいことも理解すべきである。
【００５２】
メモリ・アクセス・ユニット７６４のセットはメモリ・ユニット７７０に結合され、メモリ・ユニット７７０はデータＴＬＢユニット７７２を含み、データＴＬＢユニット７７２はデータ・キャッシュ・ユニット７７４に結合され、データ・キャッシュ・ユニット７７４はレベル２（Ｌ２）キャッシュ・ユニット７７６に結合される。一実施形態の例では、メモリ・アクセス・ユニット７６４はロード・ユニット、格納アドレス・ユニット、および格納データ・ユニットを含むことができ、そのそれぞれが、メモリ・ユニット７７０内におけるデータＴＬＢユニット７７２に結合される。命令キャッシュ・ユニット７３４がさらに、メモリ・ユニット７７０にあるレベル２（Ｌ２）キャッシュ・ユニット７７６に結合される。Ｌ２キャッシュ・ユニット７７６は、１つまたは複数の他のレベルのキャッシュと結合され、最終的にメインメモリに結合される。
【００５３】
例として、レジスタ・リネーミングを行うアウトオブオーダ発行／実行コアのアーキテクチャ例が、パイプライン７００を以下のように実装することができる。１）命令フェッチ７３８がフェッチ段階７０２および長さ復号化段階７０４を実行する。２）復号化ユニット７４０が復号化段階７０６を実行する。３）リネーム／アロケータ・ユニット７５２が、割付け段階７０８およびリネーミング段階７１０を実行する。４）スケジューラ・ユニット７５６がスケジュール段階７１２を実行する。５）物理レジスタ・ファイル・ユニット７５８およびメモリ・ユニット７７０が、レジスタ読み取り／メモリ読み取り段階７１４を実行する。実行クラスタ７６０が実行段階７１６を実行する。６）メモリ・ユニット７７０および物理レジスタ・ファイル・ユニット７５８が、ライト・バック／メモリ書き込み段階７１８を実行する。７）各種ユニットが例外処理段階７２２に関わることができる。８）リタイアメント・ユニット７５４および物理レジスタ・ファイル・ユニット７５８が、コミット段階７２４を実行する。
【００５４】
コア７９０は、ここで説明する命令を含む１つまたは複数の命令セットをサポートすることができる（例えば、ｘ８６命令セット（いくつかの拡張がより新しいバージョンと共に加えられている）；ミップス・テクノロジーズ社（サニーベール、ＣＡ）製ＭＩＰＳ命令セット；ＡＲＭホールディングス（サニーベール、ＣＡ）製ＡＲＭ命令セット（ＮＥＯＮなどの任意追加の拡張を有する））。一実施形態では、コア７９０は、パックデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２、および／または前述した汎用のベクトル・フレンドリィな命令フォーマットのうちのいくつかのフォーム（Ｕ＝０および／またはＵ＝１））をサポートするためのロジックを含み、それによって、パックデータを使用して実行される多数のマルチメディア・アプリケーションで用いられる動作が可能になる。
【００５５】
上記コアがマルチスレッディング（オペレーションまたはスレッドからなる２個以上の並列セットを実行する）をサポートでき、様々な方法でそのマルチスレッディングを行うことができることを理解すべきである。こういった方法には、タイム・スライス・マルチスレッディング、同時マルチスレッディング（単一の物理コアが、その物理コアが同時にマルチスレッディングしているスレッドごとに論理コアを提供する）、またはそれらの組合せ（例えば、タイム・スライスしたフェッチ／復号化後、インテル（登録商標）・ハイパースレッディング・テクノロジなどで同時マルチスレッディングする）が含まれる。
【００５６】
レジスタ・リネーミングについてアウトオブオーダ実行の文脈で説明するが、レジスタ・リネーミングはインオーダ・アーキテクチャでも使用できることを理解すべきである。示されているプロセッサの実施形態はまた、別個の命令キャッシュ・ユニット７３４／データ・キャッシュ・ユニット７７４および共用Ｌ２キャッシュ・ユニット７７６を含むが、代替実施形態では、例えばレベル１（Ｌ１）内部キャッシュや複数レベルの内部キャッシュなど、命令とデータの両方に対して単一の内部キャッシュを有することができる。いくつかの実施形態では、上記システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュの組合せを含むこともできる。あるいは、キャッシュの全てが、コアおよび／またはプロセッサの外部にあってもよい。
【００５７】
インオーダ・コア・アーキテクチャの具体例
図８Ａ及び図８Ｂは、インオーダ・コア・アーキテクチャのより具体的な例のブロック図を示す。このコアは、チップ内における複数の論理ブロック（同じタイプおよび／または異なるタイプからなるその他のコアを含む）のうちの１つであるはずである。論理ブロックは、アプリケーションに応じて、いくつかの固定機能ロジック、メモリ入出力インタフェース、およびその他必要な入出力ロジックと、高バンド幅の相互接続ネットワーク（例えばリング・ネットワーク）を介して通信する。
【００５８】
図８Ａは、本発明の実施形態による、単一のプロセッサ・コア、ならびにそのコアのオンダイ相互接続ネットワーク８０２への接続と、そのコアのレベル２（Ｌ２）キャッシュのローカル・サブセット８０４のブロック図である。一実施形態では、命令デコーダ８００が、パックデータ命令セット拡張を備えるｘ８６命令セットをサポートする。Ｌ１キャッシュ８０６は、スカラーおよびベクトル・ユニットにメモリをキャッシュするための低レイテンシのアクセスを可能にする。一実施形態（設計を簡略化するための形態）では、スカラー・ユニット８０８およびベクトル・ユニット８１０が、個別レジスタ・セット（それぞれスカラー・レジスタ８１２、ベクトル・レジスタ８１４）を使用し、それらの間で転送されるデータがメモリに書き込まれ、次いでレベル１（Ｌ１）キャッシュ８０６から再度読み出されるが、本発明の代替実施形態は異なる手法を使用してもよい（例えば単一のレジスタ・セットを使用する、あるいは書き込み／再読み出しすることなくデータを２つのレジスタ・ファイルの間で転送することを可能にする通信パスを含むなど）。
【００５９】
Ｌ２キャッシュのローカル・サブセット８０４は、プロセッサ・コア１個につき１個の、個別のローカル・サブセットに分割されたグローバルＬ２キャッシュの一部分である。各プロセッサ・コアは、それ自体のＬ２キャッシュのローカル・サブセット８０４への直接アクセス・パスを有する。プロセッサ・コアが読み取ったデータは、そのＬ２キャッシュのサブセット８０４に格納され、それら自体のローカルＬ２キャッシュのサブセットにアクセスする他のプロセッサ・コアと並列に、素早くアクセスすることができる。プロセッサ・コアが書き込むデータは、それ自体のＬ２キャッシュのサブセット８０４に格納され、必要ならその他のサブセットからフラッシュされる。リング・ネットワークは、共用データに対するコヒーレンシを確保する。リング・ネットワークは、プロセッサ・コアやＬ２キャッシュ、その他の論理ブロックなどのエージェントがチップ内部で互いに通信できるように双方向になっている。各リング・データ・パスの幅は方向ごとに１０１２ビットになっている。
【００６０】
図８Ｂは、本発明の実施形態による図８Ａにおけるプロセッサ・コアの部分拡大図である。図８Ｂは、Ｌ１キャッシュ８０４のＬ１データ・キャッシュ８０６Ａ部分、ならびにベクトル・ユニット８１０およびベクトル・レジスタ８１４に関する詳細を含む。具体的には、ベクトル・ユニット８１０は、幅１６のベクトル処理ユニット（ＶＰＵ）（幅１６の算術論理演算装置８２８を参照）であり、このベクトル処理ユニットは、整数、単精度浮動、および倍精度浮動命令のうちの１つまたは複数を実行する。ＶＰＵは、スウィズル・ユニット８２０によるレジスタ入力のスウィズル、数値変換ユニット８２２Ａ〜Ｂによる数値変換、およびメモリ入力に上のレプリケーション・ユニット８２４によるレプリケーションをサポートする。
【００６１】
統合メモリ・コントローラおよびグラフィックスを備えるプロセッサ
図９は、本発明の実施形態に従って複数のコアを有することができ、統合メモリ・コントローラを有することができ、統合グラフィックスを有することができるプロセッサ９００のブロック図である。図９の実線のボックスは、単一のコア９０２Ａ、システム・エージェント９１０、１つまたは複数のバス・コントローラ・ユニット９１６のセットを備えるプロセッサ９００を示し、破線のボックスの任意追加部分は、複数のコア９０２Ａ〜Ｎ、システム・エージェント・ユニット９１０内にある１つまたは複数の統合メモリ・コントローラ・ユニット９１４のセット、および専用ロジック９０８を備える代替プロセッサ９００を示す。
【００６２】
したがって、プロセッサ９００の様々な実装は以下を含むことができる。１）専用ロジック９０８が統合グラフィックスおよび／または科学（スループット）ロジック（１つまたは複数のコアを含むことができる）であり、コア９０２Ａ〜Ｎが１つまたは複数の汎用コア（例えば汎用インオーダ・コアや、汎用アウトオブオーダ・コア、それら２種類の組合せなど）であるＣＰＵ、２）コア９０２Ａ〜Ｎが主にグラフィックスおよび／または科学（スループット）向けの多数の専用コアであるコプロセッサ、３）コア９０２Ａ〜Ｎが多数の汎用インオーダ・コアであるコプロセッサ。したがって、プロセッサ９００は、汎用プロセッサでも、コプロセッサでも、専用プロセッサでもよい。この専用プロセッサには例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックス・プロセッサ、ＧＰＧＰＵ（汎用グラフィックス処理ユニット）、高スループットのメニー・インテグレーテッド・コア（ＭＩＣ）コプロセッサ（３０個以上のコアを含む）、埋込み型プロセッサなどがある。プロセッサは１つまたは複数のチップ上に実装することができる。プロセッサ９００は、例えばＢｉＣＭＯＳやＣＭＯＳ、ＮＭＯＳなどのいくつかの処理技術のいずれかを使用する１つまたは複数の基板の一部分であってよく、ならびに／あるいはその１つまたは複数の基板上に実装することができる。
【００６３】
メモリ階層は、コア内部のキャッシュの１つまたは複数のレベル、共用キャッシュ・ユニット９０６のセットまたは１つまたは複数、および統合メモリ・コントローラ・ユニット９１４のセットに結合された外部メモリ（図示せず）を含む。共用キャッシュ・ユニット９０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、またはその他のレベルのキャッシュなど、１つまたは複数の中間レベル・キャッシュ、最下位レベル・キャッシュ（ＬＬＣ）、および／またはそれらの組合せを含むことができる。一実施形態ではリングベースの相互接続ユニット９１２が、統合グラフィックス・ロジック９０８、共用キャッシュ・ユニット９０６、およびシステム・エージェント・ユニット９１０／統合メモリ・コントローラ・ユニット９１４のセットを相互接続するが、代替実施形態では、かかるユニットを相互接続するための任意の数の周知の技術を使用することができる。一実施形態では、１つまたは複数のキャッシュ・ユニット９０６とコア９０２Ａ〜Ｎの間で、コヒーレンシが維持される。
【００６４】
いくつかの実施形態では、１つまたは複数のコア９０２Ａ〜Ｎがマルチスレッドを行うことができる。システム・エージェント９１０は、コア９０２Ａ〜Ｎを調整／動作させる次のコンポーネントを含む。システム・エージェント・ユニット９１０は、例えばパワー・コントロール・ユニット（ＰＣＵ）およびディスプレイ・ユニットを含むことができる。ＰＣＵは、コア９０２Ａ〜Ｎおよび統合グラフィックス・ロジック９０８の電力状態の調整に必要なロジックおよびコンポーネントであってもよく、あるいはそれらを含んでもよい。ディスプレイ・ユニットは、１つまたは複数の外部に接続されたディスプレイを駆動するためのものである。
【００６５】
コア９０２Ａ〜Ｎは、アーキテクチャ命令セットに関して同種であっても、異機種であってもよい。つまり、コア９０２Ａ〜Ｎの２個以上が同一の命令セットを実行することができると同時に、他のコアはその命令セットのサブセットのみ、または異なる命令セットを実行することができる。
【００６６】
コンピュータ・アーキテクチャの例
図１０〜１３は、コンピュータ・アーキテクチャの例のブロック図である。以下の当技術分野で知られているその他のシステム設計および構成も適当である。つまり、デスクトップ、ラップトップ、ハンドヘルドＰＣ、パーソナル・デジタル・アシスタント、エンジニアリング・ワークステーション、サーバ、ネットワーク・デバイス、ネットワーク・ハブ、切替器、埋込み型プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックス・デバイス、ビデオ・ゲーム・デバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブル・メディア・プレーヤ、ハンドへルド・デバイス、およびその他様々な電子デバイスのためのものである。一般に、ここで開示するプロセッサおよび／またはその他の実行ロジックを組み込むことができる非常に多様なシステムまたは電子デバイスが概ね適合する。
【００６７】
次に図１０を参照すると、本発明の一実施形態によるシステム１０００のブロック図が示されている。システム１０００は１つまたは複数のプロセッサ１０１０、１０１５を含むことができ、プロセッサ１０１０、１０１５はコントローラ・ハブ１０２０に結合される。一実施形態ではコントローラ・ハブ１０２０は、グラフィックス・メモリ・コントローラ・ハブ（ＧＭＣＨ）１０９０および入出力ハブ（ＩＯＨ）１０５０（個別チップ上にあってもよい）を含む。ＧＭＣＨ１０９０は、メモリ１０４０およびコプロセッサ１０４５が結合されるメモリ・コントローラおよびグラフィックス・コントローラを含む。ＩＯＨ１０５０は、入出力（Ｉ／Ｏ）デバイス１０６０をＧＭＣＨ１０９０に結合する。あるいは、上記メモリ・コントローラとグラフィックス・コントローラの一方または両方がプロセッサ内部に統合され（ここでの説明と同様）、メモリ１０４０およびコプロセッサ１０４５は、プロセッサ１０１０と、ＩＯＨ１０５０を備える単一のチップ内にあるコントローラ・ハブ１０２０とに直接結合される。
【００６８】
追加のプロセッサ１０１５の任意選択性が図１０に破線で示されている。プロセッサ１０１０、１０１５はそれぞれ、ここで説明する処理コアの１つまたは複数を含むことができ、プロセッサ９００の何れかのバージョンであってよい。
【００６９】
メモリ１０４０は、例えば、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、またはその２つの組合せであってもよい。少なくとも１つの実施形態の場合、コントローラ・ハブ１０２０は、例えばフロントサイド・バス（ＦＳＢ）や、クイック・パス相互接続（ＱＰＩ）などのポイント・ツー・ポイント・インタフェース、または同様の接続１０９５などのマルチドロップ・バスを介してプロセッサ１０１０、１０１５と通信する。
【００７０】
一実施形態では、コプロセッサ１０４５は、例えば高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックス・プロセッサ、ＧＰＧＰＵ、埋込み型プロセッサなどの専用プロセッサである。一実施形態では、コントローラ・ハブ１０２０は、統合グラフィックス・アクセラレータを含むことができる。
【００７１】
物理資源１０１０と１０１５とには、アーキテクチャ上の特性、マイクロ・アーキテクチャ上の特性、熱特性、電力消費特性などを含む価値評価基準の範囲に様々な差異が存在する可能性がある。
【００７２】
一実施形態では、プロセッサ１０１０は、一般的なタイプのデータ処理動作を制御する命令を実行する。その命令の内部にコプロセッサ命令を埋め込むことができる。プロセッサ１０１０は、取り付けられたコプロセッサ１０４５によって実行されるべきタイプのものである、こういったコプロセッサ命令を認識する。したがって、プロセッサ１０１０は、コプロセッサバスまたはその他の相互接続上に、コプロセッサ１０４５に向かってこれらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）を発行する。コプロセッサ１０４５は、受信したコプロセッサ命令を受け付け、実行する。
【００７３】
次に図１１を参照すると、本発明の一実施形態によるシステム１１００の第１のより具体的な例のブロック図が示されている。図１１に示されているように、マルチプロセッサ・システム１１００はポイント・ツー・ポイント相互接続システムであり、ポイント・ツー・ポイント相互接続１１５０を介して結合された第１のプロセッサ１１７０および第２のプロセッサ１１８０を含む。プロセッサ１１７０および１１８０はそれぞれ、プロセッサ９００の何れかのバージョンであってよい。本発明の一実施形態では、プロセッサ１１７０および１１８０がそれぞれプロセッサ１０１０、１０１５であり、コプロセッサ１１３８がコプロセッサ１０４５である。別の実施形態では、プロセッサ１１７０および１１８０はそれぞれ、プロセッサ１０１０、コプロセッサ１０４５である。
【００７４】
統合メモリ・コントローラ（ＩＭＣ）ユニット１１７２、１１８２をそれぞれ含むプロセッサ１１７０、１１８０が示されている。プロセッサ１１７０はまた、そのバス・コントローラ・ユニットの一部分としてポイント・ツー・ポイント（Ｐ−Ｐ）インタフェース１１７６および１１７８を含む。同様に、第２のプロセッサ１１８０は、Ｐ−Ｐインタフェース１１８６および１１８８を含む。プロセッサ１１７０、１１８０は、Ｐ−Ｐインタフェース回路１１７８、１１８８を使用するポイント・ツー・ポイント（Ｐ−Ｐ）インタフェース１１５０を介して情報を交換することができる。図１１に示されているように、ＩＭＣ１１７２および１１８２は、プロセッサをそれぞれのメモリ、すなわちメモリ１１３２、メモリ１１３４に結合する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部分であってよい。
【００７５】
プロセッサ１１７０、１１８０はそれぞれ、個々のＰ−Ｐインタフェース１１５２、１１５４を介してポイント・ツー・ポイント・インタフェース回路１１７６、１１９４、１１８６、１１９８を使用して、情報をチップセット１１９０と交換することができる。チップセット１１９０は任意選択で、高性能インタフェース１１３９を介してコプロセッサ１１３８と情報を交換することができる。一実施形態では、コプロセッサ１１３８は、例えば高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックス・プロセッサ、ＧＰＧＰＵ、埋込み型プロセッサなどの専用プロセッサである。
【００７６】
共用キャッシュ（図示せず）をどちらか一方のプロセッサの中、または両方のプロセッサの外側に含むことができるが、この共用キャッシュは、プロセッサが低電力モードに置かれたときに、一方または両方のプロセッサのローカル・キャッシュ情報を共用キャッシュに格納できるように、Ｐ−Ｐ相互接続を介してそれらのプロセッサと接続されている。
【００７７】
チップセット１１９０は、インタフェース１１９６を介して第１のバス１１１６に結合することができる。一実施形態では、第１のバス１１１６は、周辺装置相互接続（ＰＣＩ）バス、またはＰＣＩエクスプレス・バスなどのバス、または別の第３世代の入出力相互接続バスであってよいが、本発明の範囲はそれに限定されない。
【００７８】
図１１に示されているように、様々な入出力デバイス１１１４と、第１のバス１１１６を第２のバス１１２０に結合するバス・ブリッジ１１１８とを、第１のバス１１１６に結合することができる。一実施形態では、１つまたは複数の追加のプロセッサ１１１５が第１のバス１１１６に結合される。追加のプロセッサには例えば、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックス・アクセラレータやデジタル信号処理（ＤＳＰ）ユニットなど）、フィールド・プログラマブル・ゲート・アレイ、またはその他任意のプロセッサなどがある。一実施形態では、第２のバス１１２０は、ロー・ピン・カウント（ＬＰＣ）バスであってよい。様々なデバイスを第２のバス１１２０に結合することができる。第２のバス１１２０には、一実施形態では例えば、キーボードおよび／またはマウス１１２２、通信デバイス１１２７、および記憶ユニット１１２８などが含まれる。この記憶ユニット１１２８は、命令／コードおよびデータ１１３０を含むことができるディスク・ドライブまたはその他の大容量記憶装置などである。さらに、オーディオ入出力１１２４が場合により第２のバス１１２０に結合される。他のアーキテクチャも可能であることに留意されたい。例えば、図１１のポイント・ツー・ポイントのアーキテクチャの代わりに、システムは、マルチドロップ・バスまたはその他のかかるアーキテクチャを実装することができる。
【００７９】
次に図１２を参照すると、本発明の一実施形態によるシステム１２００の第２のより具体的な例のブロック図が示される。図１１と図１２における同じ要素は同じ参照番号を有し、図１２の他の態様をあいまいにすることを避けるために、図１１のいくつかの態様については図１２から除外した。
【００８０】
図１２に、プロセッサ１１７０、１１８０がそれぞれ、統合メモリ／入出力制御ロジック（「ＣＬ」）１１７２、１１８２を含むことができることが示されている。したがって、ＣＬ１１７２、１１８２は、統合メモリ・コントローラ・ユニットを含み、かつ入出力制御ロジックを含む。図１２に、メモリ１１３２、１１３４がＣＬ１１７２、１１８２に結合されるだけでなく、入出力デバイス１２１４も制御ロジック１１７２、１１８２に結合されることが示されている。レガシー入出力デバイス１２１５がチップセット１１９０に結合される。
【００８１】
次に図１３を参照すると、本発明の一実施形態によるＳｏＣ１３００のブロック図が示されている。図９における類似の要素は同じ参照番号を有する。また、破線のボックスは、より高度なＳｏＣ上の任意選択の機能である。図１３において、相互接続ユニット１３０２が結合されているのは、１つまたは複数のコア９０２Ａ〜Ｎのセットおよび共用キャッシュ・ユニット９０６を含んだアプリケーション・プロセッサ１３１０と、システム・エージェント・ユニット９１０と、バス・コントローラ・ユニット９１６と、統合メモリ・コントローラ・ユニット９１４と、統合グラフィックス・ロジック、画像処理プロセッサ、オーディオ・プロセッサ、およびビデオプロセッサを含むことができるセットまたは１つもしくは複数のコプロセッサ１３２０と、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）ユニット１３３０と、ダイレクト・メモリ・アクセス（ＤＭＡ）ユニット１３３２と、１つまたは複数の外部ディスプレイに結合するためのディスプレイ・ユニット１３４０である。一実施形態では、コプロセッサ１３２０は、例えばネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、埋込み型プロセッサなどの専用プロセッサを含む。
【００８２】
ここで開示する機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはかかる実装手法の組合せに実装することができる。本発明の実施形態は、少なくとも１つのプロセッサ、記憶システム（揮発性および不揮発性メモリおよび／または記憶素子を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備えるプログラマブル・システム上で実行するコンピュータ・プログラムまたはプログラム・コードとして実装することができる。
【００８３】
図１１に示されているコード１１３０などのプログラム・コードは、ここで説明したファンクションを実行しかつ出力情報を生成する命令を、入力するために用いることができる。この出力情報は、１つまたは複数の出力デバイスに周知の形で適用することができる。この適用を行うために、処理システムには、例えばデジタル信号プロセッサ（ＤＳＰ）やマイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、マイクロプロセッサなどのプロセッサを有する任意のシステムが含まれる。
【００８４】
上記プログラム・コードは、処理システムと通信するために、高水準手続言語またはオブジェクト指向プログラミング言語に実装することができる。上記プログラム・コードは、所望ならアセンブリまたは機械言語に実装することもできる。実際、ここで説明する機構は特定のプログラミング言語に範囲は限定されない。いずれの場合も上記言語はコンパイル型言語でもインタープリタ型言語でもよい。
【００８５】
少なくとも１つの実施形態の１つまたは複数の態様が、プロセッサ内部で様々な論理を表現する、機械可読媒体に格納された典型的な命令によって実装することができる。この命令を機械が読み取ると、その命令によって機械はここで説明した技術を実行する論理を作り出す。このような「ＩＰコア」と呼ばれる表現を、実際に論理を作成する作成機械またはプロセッサにロードするために、有形の機械可読媒体に格納し、様々な顧客または製造設備に供給することができる。
【００８６】
かかる機械可読記憶媒体は、以下の記憶媒体を含む、機械またはデバイスによって製造または形成された部材からなる非一時的な有形の仕組みを含むことができるが、これに限定されない。その記憶媒体とは、例えばハードディスクや、フロッピー（登録商標）・ディスク、光ディスク、コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、リライタブルのコンパクト・ディスク（ＣＤ−ＲＷ）、および光磁気ディスクを含むその他任意のタイプのディスク、読み出し専用メモリ（ＲＯＭ）などの半導体デバイス、動的ランダム・アクセス・メモリ（ＤＲＡＭ）などのランダム・アクセス・メモリ（ＲＡＭ）、静的ランダム・アクセス・メモリ（ＳＲＡＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気消去可能プログラマブル読み出し専用メモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気カードまたは光カード、電子命令を格納するのに適した媒体のその他任意のタイプなどである。
【００８７】
したがって、本発明の実施形態はまた、命令を含んだ、または、ここで説明した構造、回路、装置、プロセッサおよび／またはシステムの特徴を定義する例えばハードウェア記述言語（ＨＤＬ）などの設計データを含んだ、非一時的な有形の機械可読媒体を含む。かかる実施形態はまた、プログラム製品と呼ぶことができる。
【００８８】
エミュレーション（バイナリ変換、コードモーフなどを含む）
いくつかの事例では、命令をソース命令セットからターゲット命令セットに変換するために、命令コンバータを使用することができる。例えば、命令コンバータは、命令を、コアで処理する１つまたは複数の他の命令に変換（例えば静的バイナリ変換や、動的コンパイルを含む動的バイナリ変換を使用）、モーフ、エミュレート、またはその他の方法で変換することができる。この命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組合せで実装することができる。命令コンバータは、プロセッサ搭載型であっても、プロセッサ非搭載型であってもよく、あるいは部分的プロセッサ搭載型／部分的プロセッサ非搭載型であってもよい。
【００８９】
図１４は、本発明の実施形態による、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの用法を対比的に示すブロック図である。示されている実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代替方法として、命令コンバータをソフトウェア、ファームウェア、ハードウェア、またはそれらの様々な組合せに実装してもよい。図１４には、ｘ８６コンパイラ１４０４を使用して高級言語１４０２のプログラムをコンパイルして、少なくとも１つのｘ８６命令セット・コアを備えるプロセッサ１４１６で本来実行できるｘ８６バイナリコード１４０６を生成できることが示されている。少なくとも１つのｘ８６命令セット・コアを備えるプロセッサ１４１６とは、（１）インテルｘ８６命令セット・コアの大部分の命令セット、あるいは（２）少なくとも１つのｘ８６命令セット・コアを備えるインテル社製プロセッサとほぼ同じ結果を得るために、少なくとも１つのｘ８６命令セット・コアを備えるインテル社製プロセッサ上で実行することを対象としたアプリケーションまたは他のソフトウェアのオブジェクト・コード・バージョン、以上のいずれかを互換実行またはその他の方法で処理することによって、少なくとも１つのｘ８６命令セット・コアを備えるインテル社製プロセッサとほぼ同じ機能を実行できる任意のプロセッサを示す。ｘ８６コンパイラ１４０４とは、少なくとも１つのｘ８６命令セット・コアを備えるプロセッサ１４１６で追加のリンク処理の有無にかかわらず実行できるｘ８６バイナリコード１４０６（例えばオブジェクト・コード）を生成するように動作可能なコンパイラを示す。同様に、図１４は、少なくとも１つのｘ８６命令セット・コアを備えないプロセッサ１４１４（例えばミップス・テクノロジーズ社（サニーベール、ＣＡ）製ＭＩＰＳ命令セットを実行する、かつ／またはＡＲＭホールディングス（サニーベール、ＣＡ）製ＡＲＭ命令セットを実行するコアを備えるプロセッサなど）で本来実行できる代替命令セット・バイナリコード１４１０を生成するために、代替命令セット・コンパイラ１４０８を使用して高級言語１４０２のプログラムをコンパイルできることを示す。命令コンバータ１４１２は、ｘ８６バイナリコード１４０６を、ｘ８６命令セット・コアを備えないプロセッサ１４１４で本来実行できるコードに変換するために使用される。この変換されたコードは、代替命令セット・バイナリコード１４１０と同一である可能性はない。というのは、これができる命令コンバータは作成することが困難だからである。しかしながら、変換されたコードは全体の動作を実現する。変換されたコードは代替命令セットによる命令で構成される。したがって、命令コンバータ１４１２とは、エミュレーション、シミュレーションまたはその他任意の処理を介して、ｘ８６命令セットのプロセッサもしくはコアを備えないプロセッサまたはその他の電子デバイスが、ｘ８６バイナリコード１４０６を実行するのを可能にする、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組合せを示す。
【符号の説明】
【００９０】
２００  プロセッサ
２０４  ＫＺＢＴＺ命令
２０５  アーキテクチャから見えるレジスタ
２０６  パックデータ・レジスタ
２０７  パックデータ動作マスク・レジスタ
２０８  実行ロジック
３０１  第１のソース書き込みマスク・レジスタ
３０３  第２のソース書き込みマスク・レジスタ
３０５  デスティネーション書き込みマスク
３０７  第１のソース書き込みマスク・レジスタ
３０９  第２のソース書き込みマスク・レジスタ
３１１  デスティネーション書き込みマスク・レジスタ
６００  レジスタ・アーキテクチャ
６１０  ベクトル・レジスタ
６２５  汎用レジスタ
６４５  スカラー浮動小数点スタック・レジスタ・ファイル
６５０  ＭＭＸパック整数フラット・レジスタ・ファイル
７００  プロセッサ・パイプライン
７０２  フェッチ段階
７０４  長さ復号化段階
７０６  復号化段階
７０８  割付け段階
７１０  リネーミング段階
７１２  スケジューリング段階
７１４  レジスタ読み取り／メモリ読み取り段階
７１６   実行段階
７１８   ライト・バック／メモリ書き込み段階
７２２  例外処理段階
７２４  コミット段階
７３０  フロントエンド・ユニット
７３２  分岐予測ユニット
７３４  命令キャッシュ・ユニット
７３６  命令トランスレーション・ルックアサイド・バッファ（ＴＬＢ）
７３８  命令フェッチ・ユニット
７４０  復号化ユニット
７５０  実行エンジン・ユニット
７５２  リネーム／アロケータ・ユニット
７５４  リタイアメント・ユニット
７５６  スケジューラ・ユニット
７５８  物理レジスタ・ファイル・ユニット
７６０  実行クラスタ
７６２  実行ユニット
７６４  メモリ・アクセス・ユニット
７７０  メモリ・ユニット
７７２  データＴＬＢユニット
７７４  データ・キャッシュ・ユニット
７７６  レベル２キャッシュ・ユニット
７９０  プロセッサ・コア
８００  命令デコーダ
８０２  オンダイ相互接続ネットワーク
８０４  ローカル・サブセット
８０６  Ｌ１キャッシュ
８０８  スカラー・ユニット
８１０  ベクトル・ユニット
８１２  スカラー・レジスタ
８１４  ベクトル・レジスタ
８２０  スウィズル・ユニット
８２２  数値変換ユニット
８２４  レプリケーション・ユニット
８２８  算術論理演算装置
９００  プロセッサ
９０２  コア
９０６  共用キャッシュ・ユニット
９０８  専用ロジック
９１０  システム・エージェント・ユニット
９１２  リングベースの相互接続ユニット
９１４  統合メモリ・コントローラ・ユニット
９１６  バス・コントローラ・ユニット
１０００  システム
１０１０  プロセッサ
１０１５  プロセッサ
１０２０  コントローラ・ハブ
１０４０  メモリ
１０４５  コプロセッサ
１０５０  入出力ハブ（ＩＯＨ）
１０６０  入出力デバイス
１０９０  グラフィックス・メモリ・コントローラ・ハブ
１０９５  接続
１１００  マルチプロセッサ・システム
１１１４  入出力デバイス
１１１５  プロセッサ
１１１６  第１のバス
１１１８  バス・ブリッジ
１１２０  第２のバス
１１２２  キーボードおよび／またはマウス
１１２４  オーディオ入出力
１１２７  通信デバイス
１１２８  記憶ユニット
１１３０  命令／コードおよびデータ
１１３２  メモリ
１１３４  メモリ
１１３８  コプロセッサ
１１３９  高性能インタフェース
１１５０  ポイント・ツー・ポイント（Ｐ−Ｐ）インタフェース
１１５２  Ｐ−Ｐインタフェース
１１５４  Ｐ−Ｐインタフェース
１１７０  第１のプロセッサ
１１７２  統合メモリ・コントローラ（ＩＭＣ）ユニット
１１７６  ポイント・ツー・ポイント・インタフェース回路
１１７８  Ｐ−Ｐインタフェース回路
１１８０  第２のプロセッサ
１１８２  統合メモリ・コントローラ（ＩＭＣ）ユニット
１１８６  Ｐ−Ｐインタフェース
１１８８  Ｐ−Ｐインタフェース回路
１１９０  チップセット
１１９４  ポイント・ツー・ポイント・インタフェース回路
１１９６  インタフェース
１１９８  ポイント・ツー・ポイント・インタフェース回路
１２００  システム
１２１４  入出力デバイス
１２１５  レガシー入出力デバイス
１３００  ＳｏＣ
１３０２  相互接続ユニット
１３２０  コプロセッサ
１３１０  アプリケーション・プロセッサ
１３３０  スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）ユニット
１３３２  ダイレクト・メモリ・アクセス（ＤＭＡ）ユニット
１３４０  ディスプレイ・ユニット
１４０２  高級言語
１４０４  ｘ８６コンパイラ
１４０６  ｘ８６バイナリコード
１４０８  代替命令セット・コンパイラ
１４１０  代替命令セット・バイナリコード
１４１２  命令コンバータ
１４１４  プロセッサ
１４１６  プロセッサ
【図１】
2014182796.tif 000003
【図２】
2014182796.tif 000004
【図３Ａ】
2014182796.tif 000005
【図３Ｂ】
2014182796.tif 000006
【図４】
2014182796.tif 000007
【図５】
2014182796.tif 000008
【図６】
2014182796.tif 000009
【図７Ａ】
2014182796.tif 000010
【図７Ｂ】
2014182796.tif 000011
【図８Ａ】
2014182796.tif 000012
【図８Ｂ】
2014182796.tif 000013
【図９】
2014182796.tif 000014
【図１０】
2014182796.tif 000015
【図１１】
2014182796.tif 000016
【図１２】
2014182796.tif 000017
【図１３】
2014182796.tif 000018
【図１４】
2014182796.tif 000019
【外国語明細書】
2014182796000001.pdf