(57)【特許請求の範囲】
【請求項１】
並列な複数の実行ユニットと、
前記複数の実行ユニットの複数の入力を、第１のバッファ及び複数のメモリバンクの複数の出力に接続する第１のマトリクススイッチと、
並列な前記複数のメモリバンク及び複数の第２のバッファの複数の入力を、前記第１のバッファ、前記複数のメモリバンク、及び前記複数の実行ユニットの複数の出力に接続する第２のマトリクススイッチと、
前記複数の第２のバッファの複数の出力に接続される複数の入力を有するオフロードエンジンと、
を備える、ハードウェアプロセッサ。
【請求項２】
前記オフロードエンジンの出力は、前記第１のバッファの入力に接続する、請求項１に記載のハードウェアプロセッサ。
【請求項３】
前記第１のバッファの出力からの読み出しと前記複数の第２のバッファの複数の入力への書き込みとを同時に実行するデータハザード解消ロジックをさらに備える、請求項１に記載のハードウェアプロセッサ。
【請求項４】
前記データハザード解消ロジックは、ストールを挿入しない、請求項３に記載のハードウェアプロセッサ。
【請求項５】
前記複数の実行ユニットは、第１のクロック速度で実行し、前記オフロードエンジンは、第２のより低速のクロック速度で実行する、請求項１に記載のハードウェアプロセッサ。
【請求項６】
前記複数の実行ユニットの各々は、シフトレジスタを含む、請求項１に記載のハードウェアプロセッサ。
【請求項７】
前記第１のバッファ及び前記複数の第２のバッファは、ファーストインファーストアウト（ＦＩＦＯ）バッファである、請求項１に記載のハードウェアプロセッサ。
【請求項８】
前記複数のメモリバンクは、４つ又はそれより多くのメモリバンクであり、各メモリバンクは、複数の他のメモリバンクの複数の入力ポート及び複数の出力ポートとは別個の入力ポート及び出力ポートを含む、請求項１から７のいずれか１項に記載のハードウェアプロセッサ。
【請求項９】
制御信号に基づいて、第１のマトリクススイッチにより、ハードウェアプロセッサの並列な複数の実行ユニットの複数の入力を、第１のバッファ及び複数のメモリバンクの複数の出力に接続し、第２のマトリクススイッチにより、並列な前記複数のメモリバンク及び複数の第２のバッファの複数の入力を、前記第１のバッファ、前記複数のメモリバンク、及び前記複数の実行ユニットの複数の出力に接続する段階と、
前記複数の第２のバッファの複数の出力からオフロードエンジンの複数の入力にデータを提供する段階と、
を備える、方法。
【請求項１０】
前記オフロードエンジンの出力から前記第１のバッファの入力にデータを提供する段階をさらに備える、請求項９に記載の方法。
【請求項１１】
前記第１のバッファの出力からの読み出しと前記複数の第２のバッファの複数の入力への書き込みとを同時に実行する段階をさらに備える、請求項９に記載の方法。
【請求項１２】
ストールを挿入しない段階をさらに備える、請求項１１に記載の方法。
【請求項１３】
前記複数の実行ユニットによって第１のクロック速度で実行し、前記オフロードエンジンによって第２のより低速のクロック速度で実行する段階をさらに備える、請求項９に記載の方法。
【請求項１４】
前記複数の実行ユニットの各々は、シフトレジスタを含む、請求項９に記載の方法。
【請求項１５】
前記第１のバッファ及び前記複数の第２のバッファは、ファーストインファーストアウト（ＦＩＦＯ）バッファである、請求項９に記載の方法。
【請求項１６】
前記複数のメモリバンクは、４つ又はそれより多くのメモリバンクであり、各メモリバンクは、複数の他のメモリバンクの複数の入力ポート及び複数の出力ポートとは別個の入力ポート及び出力ポートを含む、請求項９から１５のいずれか１項に記載の方法。
【請求項１７】
ハードウェアプロセッサであって、
命令を復号するハードウェアデコーダと、
前記命令を実行することにより、
制御信号に基づいて、第１のマトリクススイッチにより、前記ハードウェアプロセッサの並列な複数の実行ユニットの複数の入力を、第１のバッファ及び複数のメモリバンクの複数の出力に接続し、第２のマトリクススイッチにより、並列な前記複数のメモリバンク及び複数の第２のバッファの複数の入力を、前記第１のバッファ、前記複数のメモリバンク、及び前記複数の実行ユニットの複数の出力に接続し、
前記複数の第２のバッファの複数の出力からオフロードエンジンの複数の入力にデータを提供する
ハードウェア実行ユニットと、
を備える、ハードウェアプロセッサ。
【請求項１８】
前記オフロードエンジンの出力は、前記第１のバッファの入力に接続する、請求項１７に記載のハードウェアプロセッサ。
【請求項１９】
前記ハードウェア実行ユニットは、前記命令を実行し、これにより、前記第１のバッファの出力からの読み出しと、前記複数の第２のバッファの複数の入力への書き込みとを同時に実行させる、請求項１７に記載のハードウェアプロセッサ。
【請求項２０】
前記ハードウェア実行ユニットは、ストールを挿入することなく前記命令を実行する、請求項１９に記載のハードウェアプロセッサ。
【請求項２１】
前記複数の実行ユニットは、第１のクロック速度で実行し、前記オフロードエンジンは、第２のより低速のクロック速度で実行する、請求項１７に記載のハードウェアプロセッサ。
【請求項２２】
前記複数の実行ユニットの各々は、シフトレジスタを含む、請求項１７に記載のハードウェアプロセッサ。
【請求項２３】
前記第１のバッファ及び前記複数の第２のバッファは、ファーストインファーストアウト（ＦＩＦＯ）バッファである、請求項１７に記載のハードウェアプロセッサ。
【請求項２４】
前記複数のメモリバンクは、４つ又はそれより多くのメモリバンクであり、各メモリバンクは、複数の他のメモリバンクの複数の入力ポート及び複数の出力ポートとは別個の入力ポート及び出力ポートを含む、請求項１７から２３のいずれか１項に記載のハードウェアプロセッサ。
【請求項２５】
並列な複数の実行ユニットと、
第１のマトリクススイッチにより、前記複数の実行ユニットの複数の入力を、第１のバッファ及び複数のメモリバンクの複数の出力に接続し、第２のマトリクススイッチにより、並列な前記複数のメモリバンク及び複数の第２のバッファの複数の入力を、前記第１のバッファ、前記複数のメモリバンク、及び前記複数の実行ユニットの複数の出力に接続する手段と、
前記複数の第２のバッファの複数の出力に接続される複数の入力を有するオフロードエンジンと、
を備える、ハードウェア装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して電子分野に関し、より詳細には、本開示の実施形態は、密結合ヘテロジニアスコンピューティングのためのハードウェアプロセッサに関する。
【背景技術】
【０００２】
プロセッサ又は複数のプロセッサのセットは、命令セット、例えば命令セットアーキテクチャ（ＩＳＡ）からの複数の命令を実行する。命令セットは、プログラミングに関するコンピュータアーキテクチャの一部であり、概して、複数のネイティブデータ型、複数の命令、レジスタアーキテクチャ、複数のアドレス指定モード、メモリアーキテクチャ、割り込み及び例外処理ならびに外部入力及び出力（Ｉ／Ｏ）を含む。
【図面の簡単な説明】
【０００３】
本開示は、添付図面の複数の図において、限定としてではなく例として示されるものであり、ここで、同様の参照符号は、同様の要素を示す。
【図１】本開示の複数の実施形態に係るハードウェアプロセッサを示す。
【図２Ａ】本開示の複数の実施形態に係るハードウェアプロセッサを通して、複数のデータパスを示す。
【図２Ｂ】本開示の複数の実施形態に係る図２Ａにおけるハードウェアプロセッサを通る複数のアクティブなデータパスを示す。
【図３】本開示の複数の実施形態に係るデータパスを通して移行する複数のベクトルを示す。
【図４】本開示の複数の実施形態に係るフロー図を示す。
【図５Ａ】本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びこれらのクラスＡ命令テンプレートを示すブロック図である。
【図５Ｂ】本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びこれらのクラスＢ命令テンプレートを示すブロック図である。
【図６Ａ】本開示の複数の実施形態に係る図５Ａ及び５Ｂにおける汎用ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。
【図６Ｂ】本開示の一実施形態に係るフルオペコードフィールドを形成する図６Ａにおける特定ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。
【図６Ｃ】本開示の一実施形態に係るレジスタインデックスフィールドを形成する図６Ａにおける特定ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。
【図６Ｄ】本開示の一実施形態に係る増加オペレーションフィールド５５０を形成する図６Ａにおける特定ベクトル向け命令フォーマットの複数のフィールドを示すブロック図である。
【図７】本開示の一実施形態に係るレジスタアーキテクチャのブロック図である。
【図８Ａ】本開示の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【図８Ｂ】本開示の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。
【図９Ａ】本開示の複数の実施形態に係る単一のプロセッサコアを、そのオンダイ相互接続ネットワークへの接続及びその二次（Ｌ２）キャッシュのローカルサブセットと共に示すブロック図である。
【図９Ｂ】本開示の複数の実施形態に係る図９Ａにおけるプロセッサコアの一部の拡大図である。
【図１０】１つより多くのコアを有してよく、集積メモリコントローラを有してよく、集中画像表示を有してよい、本開示の複数の実施形態に係るプロセッサのブロック図である。
【図１１】本開示の一実施形態に係るシステムのブロック図である。
【図１２】本開示の実施形態に係る、より具体的な例示的システムのブロック図である。
【図１３】本開示の実施形態に係る、第２のより具体的な例示的システムのブロック図を示す。
【図１４】本開示の実施形態に係るシステムオンチップ（ＳｏＣ）のブロック図を示す。
【図１５】本開示の複数の実施形態に係るソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比したブロック図である。
【発明を実施するための形態】
【０００４】
以下の説明において、多数の具体的な詳細が示される。しかしながら、本開示の複数の実施形態は、これらの具体的な詳細がなくとも実施可能であることを理解されたい。他の複数の例において、周知の複数の回路、構造及び技術は、この説明に対する理解を曖昧にしないよう、詳細には示されていない。
【０００５】
本明細書における「一実施形態」、「実施形態」、「例示的な実施形態」等の記載は、説明される実施形態が、特定の機能、構造、又は特性を含んでよいが、各実施形態がその特定の機能、構造、又は特性を必ずしも含まなくてよいことを示す。さらに、このような複数の語句は、必ずしも同じ実施形態を参照するものではない。さらに、ある実施形態に関連して特定の機能、構造、又は特性が説明される場合、明示的に説明されているか否かに関わらず、複数の他の実施形態に関連してこのような機能、構造、又は特性に影響を与えることは、当業者の知識の範囲内であると考えられる。
【０００６】
（例えばハードウェア）プロセッサ又はプロセッサのセットは、命令セット、例えば命令セットアーキテクチャ（ＩＳＡ）からの複数の命令を実行する。命令セットは、プログラミングに関するコンピュータアーキテクチャの一部であり、概して、複数のネイティブデータ型、複数の命令、レジスタアーキテクチャ、複数のアドレス指定モード、メモリアーキテクチャ、割り込み及び例外処理ならびに外部入力及び出力（Ｉ／Ｏ）を含む。本明細書において、命令という用語は、マクロ命令、例えば、実行のためにプロセッサに提供される命令、又は、マイクロ命令、例えば、複数のマクロ命令を復号するプロセッサの復号ユニット（デコーダ）から得られた命令を意味してよいことに留意されたい。プロセッサ（例えば、複数の命令を復号及び／又は実行する１つ又は複数のコアを有するもの）は、例えば、演算、ロジック、又は他の複数の機能の実行において、データに対して動作してよい。
【０００７】
複数の特定の機能は、複数のベクトル（例えば、各エレメントを特定する対応インデックスを有する複数のデータエレメント（エントリ）のアレイ又は他の順序のリスト）、例えば、複数の他のベクトルに対して動作するベクトルに対するオペレーションを含んでよい。ベクトルのエレメントは、概して、単一の値、例えば、それ自身のインデックス値によって特定される値を表すデータの別個のセクションを意味してよい。ベクトルの複数のエレメントは、数値（例えば、整数、浮動小数点等）であってよい。一実施形態において、ベクトルは、単一の数値、例えば単一の浮動小数点数を表す複数のエレメントを含む。
【０００８】
プロセッサは、（例えば、プロセッサダイとは別個の）メモリ（例えば、データストレージデバイス）のデータにアクセス（例えば、ロード及び／又はストア）してよい。メモリは、システムメモリ、例えば、ランダムアクセスメモリ（ＲＡＭ）であってよい。データストレージデバイスは、プロセッサキャッシュを含まなくてよく、及び／又は、限定されるものではないが、ハードディスクドライブ（ＨＤＤ）ストレージのような外部ストレージを含まなくてよい。
【０００９】
プロセッサは、特定のオペレーション（又はオペレーションの一部）をオフロードエンジンにオフロードしてよい。ハードウェアオフロードエンジンは、プロセッサとは別個であってよく（例えば、オフダイ）、又はプロセッサの一部、例えば、コアの一部又はコアとは別個であってよい。オフロードエンジンを用いるプロセッサ（例えば、プロセッサコア）は、その命令セットにおける命令（例えば、特定のオペコードを有するもの）を含んでよく、命令セットは、例えば、当該命令が実行される場合に、データをハードウェアオフロードエンジンに送信させる。一実施形態において、オフロードエンジンは、例えば、本明細書において説明されるように、そのオペレーションを制御する有限ステートマシン（ＦＳＭ）を含む。一実施形態において、プロセッサコア（例えば、複数の（例えばベクトル）実行ユニット）は、第１のクロック速度で実行してよく、オフロードエンジンは、第２のより高速（又はより低速）のクロック速度で（例えば同時に）実行してよい。一実施形態において、オフロードエンジンは、プロセッサのクロック速度の倍より大きい速度で動作する。一実施形態において、オフロードエンジンは、プロセッサのクロック速度の２、３、４、５、６、７、８、９、１０、１１、１２、１３、１４、１５、１６、１７、１８、１９、２０、又は２５倍等、より高速（又はより低速）の速度で動作する。オフロードエンジンは、オフロードエンジンを用いるプロセッサと異なる型のプロセッサであってよい。一実施形態において、プロセッサ及びオフロードエンジンは、同じ命令セット、例えばＩＳＡを用いる。
【００１０】
一実施形態において、プロセッサは、領域が特化された問題に対処する特定用途向けオフロードエンジンを含む。ハードウェアのみ及びソフトウェアのみのアプローチと比較して、ハイブリッドプロセッサアーキテクチャの複数の特定の実施形態は、ソフトウェア（例えば、プロセッサ上で動作するファームウェア）の柔軟性と、最適化されたハードウェア（例えば、特定用途向けオフロードエンジン）の効率性との両方を提供することができる。例えば、公開鍵暗号化（ＰＫＥ）の一実施形態において、回路（例えば、コンテンツ処理モジュール（ＣＰＭ））は、（例えば、プログラマブル）ベクトルプロセッサ（例えば、モジュラー計算プロセッサ（ＭＭＰ））と、（例えば大型）整数乗算器（５２１ｂｘ５２１ｂ）オフロードエンジンとを含んでよい。本実施形態は、オフロードエンジンのモデルの非同期利用を含んでよく、例えば、これにより、複数のオペランドのソーシング及び結果のドレインは、２つの（例えばファームウェア）ベクトル命令の実行を含む。複数の命令のこのようなシーケンシャルな実行モデルは、オフロードエンジンの利用、従って、システムのスループット全体を低減することができる。（例えば高）並列データパスを有するこのようなベクトルプロセッサ及びオフロードエンジンは、データハザード解消ロジックの利用を含んでもよい。
【００１１】
本開示の一実施形態において超長命令語（ＶＬＩＷ）型の命令に対するベクトルプロセッサ（例えば、ベクトルプロセッサアーキテクチャ）は、例えば、プロセッサ（例えばコア）によってオフロードエンジンに送信されたデータ及び／又はオフロードエンジンによってプロセッサに送信されたデータの、プロセッサ自体の内部における、又はオフロードエンジンへ及び／又はオフロードエンジンからの（例えば高）並列データ移動を可能とする。ＶＬＩＷ命令は（例えば、実行された場合に）、複数の（例えば、別個の又は異なる）複数のオペレーションを生じさせてよい。例えば、１つのＶＬＩＷ命令は（例えば、実行された場合に）、１つの（例えば、異なる）複数のオペレーションをプロセッサの複数の実行ユニットの各々に対して実行させてよい。
【００１２】
本開示の複数の特定の実施形態は、スイッチ（又は複数のスイッチ）と、複数の並列データオペレーションを可能にする複数の実行ユニットとを含む。スイッチは、マトリックス（例えば、クロスバー）スイッチであってよい。マトリックススイッチは、概して、複数の入力と複数の出力との間にある個々のスイッチのアセンブリを意味してよい。スイッチは、非ブロックスイッチであってよく、これにより、他の複数の同時接続が、他の複数の入力を他の複数の出力に接続することの妨げとならない。単一の入力は、複数の出力に接続されてよい。
【００１３】
一実施形態において、（例えば、パイプラインの第１の命令からの）データが（例えば、パイプラインの第２の命令によって）当該データに対するオペレーションを実行することを必要とされる場合、（例えば、第１の命令からの）データの欠損は、（例えば、第２の命令による）オペレーションの実行において遅延を生じさせ得る。このような場合、実行パイプラインの一部は、データが利用可能になる（例えば、第１の命令が実行を完了し、結果のデータが第２の命令によって利用可能となる）まで、ストール（例えば、停止）のような特別な処理を用いてよい。この条件は、概して、データハザードと称されることがある。
【００１４】
本開示の複数の特定の実施形態は、データハザード解消ロジックを含む。一実施形態において、ハードウェアプロセッサは、１つ又は複数の（例えば、整数）オフロードエンジン、（例えば、ベクトルプロセッサの）１つ又は複数の実行ユニット、複数のメモリバンク、及び、データハザードを検出及び／又は防止する能力により複数の処理エレメント及びメモリのいずれか又は全ての中におけるデータ移動を容易にする（例えば、データスイッチングロジック及び／又はデータハザード解消ロジックを含む）スイッチを含む。例えば、データハザード解消ロジックは、複数の（例えば右又は左）シフトオペレーション、例えばベクトルシフトオペレーションをサポートするベクトル処理データパスを制御してよい。
【００１５】
図１は、本開示の複数の実施形態に係るハードウェアプロセッサ１００を示す。図示されるハードウェアプロセッサ１００は、プロセッサコア１０２と、オフロードエンジン１０４と、メモリ１０６へのアクセスと、スイッチ１０８とを含む。これらのコンポーネントの任意の組み合わせが用いられてよい。メモリ１０６は、別個のコンポーネントとして示されるが、ハードウェアプロセッサ１００の一部であってよい。プロセッサコアは、１つ又は複数の実行ユニットを（例えば、直列及び／又は並列に）含んでよい。オフロードエンジンは、例えば、プロセッサコアに対して複数のオペレーションを実行してよく、これにより、プロセッサコアは、他の複数のオペレーションを（例えば同時に）実行してよい。オフロードエンジンは、その複数のオペレーションが完了した（例えば、データが利用可能である）ことを示す信号を（例えば、プロセッサコアに）提供してよい。オフロードエンジンは、プロセッサとは別個（例えば、オフダイ）であってよい。オフロードエンジンは、（例えば、プロセッサとは）別個のメモリへのアクセス、例えば、ダイレクトメモリアクセスを有してよい。
【００１６】
メモリ１０６は、任意のデータストレージデバイスであってよい。図示されるメモリ１０６は、複数のメモリバンク、例えば、メモリバンクＡ、Ｂ、Ｆ、及びＧを含む。メモリは、メモリバンクＡ−Ｇを含んでよい。メモリは、任意の複数のメモリバンクを含んでよい。例えば、メモリは、２つ又はそれより多くのメモリバンク、３つ又はそれより多くのメモリバンク、４つ又はそれより多くのメモリバンク、５つ又はそれより多くのメモリバンク等を含んでよい。各メモリバンクは、それ自身のアクセスポート又は複数のポート（例えば、入力及び／又は出力）を有してよい。各メモリバンクは、他のメモリバンク、例えば複数のメモリバンクから独立してアクセス可能であり、又は、各メモリバンクは、同時にアクセス可能である。プロセッサは、メモリを含んでもよい。プロセッサ及び／又はメモリは、バッファ、例えばシフトレジスタを含んでよい。
【００１７】
スイッチは、特定の入力を特定の出力に接続する制御信号を（例えばプロセッサコア１０２から）受信してよい。スイッチ１０８は、任意の複数の通信パスを含んでよく、図示されたものに限定されるものではない。スイッチは、コンポーネントを選択的に接続してよい。例えば、スイッチ１０８は、プロセッサコア、オフロードエンジン、メモリ、及びこれらの任意の組み合わせを接続してよい。なお、本明細書における単一方向の矢印は、一方向の通信であることを必要としないことがあり、例えば、これは、（例えば、当該コンポーネントへ、及び当該コンポーネントからの）二方向の通信を示してよい。複数の通信パスのいずれか又は全ての組み合わせは、本明細書の複数の実施形態において用いられてよい。スイッチは、どのコンポーネントが共に接続されるか（例えば、２つのコンポーネント間においてアクティブな接続）を制御するデータハザード解消ロジックを含んでよい。スイッチは、プロセッサ（例えば、プロセッサコア）によって、例えば、スイッチに送信される制御信号又は複数の信号によって制御されてよい。一実施形態において、スイッチは、プロセッサのコンポーネント内、例えば、プロセッサコア及び／又はオフロードエンジン内にあってよい。スイッチは、複数の接続を制御（例えば、アクティブ化）してよく、これにより、データパスが、データハザードを許さない（例えば、含まない）ようにする。あらゆるデータパスは、スイッチにルートバックされてよく、例えばこれにより、出力は、入力としてルートバックされる。
【００１８】
図２Ａは、本開示の複数の実施形態に係るハードウェアプロセッサ２００を通る複数のデータパスを示す。図２Ａのデータフローは、概して、左から右への態様で進む。図示されたデータパスは、命令をフェッチするプロセッサの命令フェッチユニット２１０を含む。フェッチされた命令（例えば、マクロ命令）は次に、デコーダ２１２に進んでよく、これにより、例えば、元の命令から復号され、又は元の命令を他の方法で反映し、又は元の命令から派生した１つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は他の制御信号を、出力として生成するべく復号される。復号された命令は、次に、ベクトル分解ユニット２１４に進んでよく、これにより、例えば、（例えばＶＬＩＷ）ベクトル命令を、プロセッサ２００の示されたデータパスによって（例えば、露出された命令セットアーキテクチャに対してトランスペアレントな態様で）実行可能な複数の（例えばダブルクワッドワード）サブ命令に変換する。命令フェッチユニット２１０、デコーダ２１２、及びベクトル分解ユニット２１４のいずれか又は全ては、任意であってよい。さらに、複数のパイプラインレジスタ（例えば、ＥＣ／ＭＲレジスタ２１６、ＭＲ／ＥＸレジスタ２２０、ＥＸ０／ＥＸ１レジスタ２２２、及びＥＸ／ＷＢレジスタ２２４）が示されるが、任意の単一又は複数のパイプラインレジスタが用いられてよい。一実施形態において、パイプラインレジスタは用いられない。
【００１９】
示されたデータパスの残りは、複数の連続的なプロセッサパイプラインステージを含み、これらは、メモリ読み出し（ＭＲ）、実行０（ＥＸ０）、実行１（ＥＸ１）、及びメモリライトバック（ＷＢ）とラベリングされている。一実施形態において、複数の実行ステージは、例えば、図示された回路を有する（例えば、コアを含む）プロセッサであるプロセッサ２００（例えば、プロセッサ２００の単一のコア２０２）の一部である。プロセッサコア２０２は、複数の実行ステージを（例えば直列に）有する回路、又は単一の実行ステージから出力されたデータを当該単一の実行ステージへの入力として再ルーティングする、例えば、出力を入力として帰還させる回路を含んでよい。一実施形態において、スイッチ２０８Ａ及びスイッチ２０８Ｂは、同じスイッチであってよい。命令フェッチユニット２１０、デコーダ２１２、及びベクトル分解ユニット２１４のいずれか又は全ては、ハードウェアプロセッサ２００の一部又はプロセッサコア２０２であってよい。単一のプロセッサコアが特定の図に示されるが、ハードウェアプロセッサは、複数のプロセッサコアを含んでよい。一実施形態において、誤り訂正（例えば、誤り訂正ユニット）は、パイプラインにおいて、例えばメモリ読み出し（ＭＲ）の前に行われてよい。
【００２０】
一実施形態において、ＭＲステージにおける複数のメモリ（例えば、ＲＡＭ）バンクは、ライトバック（ＷＢ）ステージにおける複数の同じ物理的インスタンスである。図示された実施形態において、ＭＲステージにおける（例えば、ファーストインファーストアウト（ＦＩＦＯ））バッファＡ（例えば、入力バッファ）は、オフロードエンジン２０４の出力を受信するバッファと同じである。一実施形態において、オフロードエンジン２０４の出力を受信するバッファは、異なるバッファである。オフロードエンジン２０４は、その出力をバッファ２１８の入力に直接提供するものとして示される。一実施形態において、オフロードエンジンは、パイプラインを通して、例えば、パイプラインレジスタ２１６の入力を通して、その出力を提供する。一実施形態において、上記回路のいずれか又はいくつかを迂回するためのバイパス、例えば、マトリックススイッチ２０８Ａとマトリックススイッチ２０８Ｂの間に、例えば、図２Ｂのパス（２）のために用いられる別個のバイパスが存在してよい。一実施形態において、マトリックススイッチ２０８Ａとマトリックススイッチ２０８Ｂと間の回路は、例えば、データに対して前方転送以外のいずれのオペレーションも実行することなく、例えば、ＡＬＵ２、（存在する場合には）ＥＸ０／ＥＸ１レジスタ２２２、及び（存在する場合には）シフタ２を通るバイパスとして用いられてよい。
【００２１】
一実施形態において、プロセッサは、（例えば、図２Ａに示される複数のデータパスを通して）第２の（例えばＦＩＦＯ）バッファ又は複数のバッファ（例えば、バッファＢ２２６及びバッファＣ２２８）のセットへの書き込みと、第１のバッファ（例えば、バッファＡ２１８）からの読み出しとを同時に（例えば、時間的に重複して）実行する。一実施形態において、ハードウェアプロセッサは、オフロードエンジン２０４へのデータ及び／又はオフロードエンジン２０４からのデータを前処理及び後処理してよい。公開鍵の算出におけるこの利用の一例は、Ｋａｒａｔｓｕｂａ法による乗算であり、中間乗算結果が合算されてよい。他の例は、楕円曲線暗号（ＥＣＣ）の点の加算及び点の２倍算において用いられる式である。
【００２２】
複数の特定の実施形態において、プロセッサは、複数（例えば、２つ）の（例えばベクトル）実行ユニットを（例えば、並列及び／又は直列に）含んでよい。一実施形態において、（例えばベクトル）演算ロジックユニット（ＡＬＵ）実行ユニットは、シフタ実行ユニットと直列である（例えば、シフタ実行ユニットに出力を提供する）。複数の特定の実施形態において、これにより、並列オペレーションにおいて起こり得る（例えば構造的な）データハザードを回避することができる。（例えば構造的な）データハザードは、メモリ（例えばＲＡＭ）バンク、例えばメモリバンク２０６に対しても発生し得る。複数のメモリバンク（例えば、メモリバンクＡ及びメモリバンクＢ）は、例えば、オフロードエンジン２０４（例えば、一実施形態において多倍長整数（ｂｉｇ−ｉｎｔｅｇｅｒ）乗算器）が２つの入力（例えば、入力オペランド）をとる場合に、（例えば同時に）用いられてよい。これにより、１つのメモリバンクにおいて必要とされる同時の読み出し及び／又は書き込みを実行することなく、並列なソーシング及びドレインが可能となり得る。例えば、Ｋａｒａｔｓｕｂａ法による乗算の分解は、２つのメモリ書き込み及び３つのメモリ読み出しを同時に用いてよく、これにより、アルゴリズムにおいて利用可能な並列性を完全に活用する。図示されたデータパスは、他の複数のメモリバンク（例えば、メモリバンクＦ及びメモリバンクＧ）を含む。一実施形態において、複数のメモリバンク（例えば、各々が、複数の他のメモリバンクの入力ポート及び出力ポートとは別個にそれ自身の入力ポート及び出力ポートを有するもの）を用いることは、より少ない数のメモリバンクに複数のさらなるポートを追加するよりも、（例えば、エリア的に）より効率的なことがある。複数の特定の実施形態において（例えば、ＭＭＰ）、複数の（例えば一部の）メモリバンク（例えば、メモリバンクＦ及びメモリバンクＧ）は、連続乗算用の一時ストレージとして、及び／又は内積のアキュムレータとして、用いられてよい。一実施形態において、複数のメモリバンクの第１のセット（例えば、メモリバンクＦ及びメモリバンクＧ）は、複数のメモリバンクの第２のセット（例えば、メモリバンクＡ及びメモリバンクＢ）と比べてストレージ容量がより小さい。
【００２３】
ソースは、複数の入力ポートにルーティングされてよい。本明細書において開示される複数のデータパスは、前述された複数の例の利用をサポートしてよいが、複数のメモリ（例えばＲＡＭ）バンク、及び複数のバッファ、例えば入力及び出力（例えばＦＩＦＯ）バッファの中における直接的な並列データ移動をも可能にしてよい。一実施形態において、プロセッサのデータパスは、例えば他の複数のオペレーションと並列に、一時ストレージ（例えば、メモリバンクＦ及びＧ）とメインストレージ（例えば、メモリバンクＡ及びＢ）との間におけるデータの前後移動を可能にしてよい。
【００２４】
一実施形態において、例えば、オフロードエンジンの同時のソーシング及びドレインに関連する並列性を最大限活用すべく、プロセッサは、以下の複数のソースシンクペア、すなわち、
複数のソース（例えば、メモリバンクＡ、Ｂ、Ｆ、及びＧ及びバッファＡ）複数の（例えば５つの）出力ポートから複数のＡＬＵ（例えば、図２Ａ−２Ｂにおいて並列なＡＬＵ１及びＡＬＵ２）の（例えば４つの）入力ポート（例えば、その各々）のいずれかと、
複数のソース（例えば、メモリバンクＡ、Ｂ、Ｆ、及びＧ、バッファＡ、及びＡＬＵ１及びＡＬＵ２）の複数の（例えば７つの）出力ポートから複数のシンク（例えば、メモリバンクＡ、Ｂ、Ｆ、及びＧ、バッファＢ、及びバッファＣ）の（例えば６つの）入力ポートのいずれかと
のペアのうちいずれか又は両方をサポートするデータパスを含んでよい。
【００２５】
示された複数のソースシンクペアにおける複数の並列移動は、スイッチ２０８Ａ及びスイッチ２０８Ｂによって接続（例えば、可能に）されてよい。一実施形態において、スイッチは、どの入力又は複数の入力（例えば、ポート）がどの出力（例えば、ポート）又は複数の出力に接続すべきかを選択する制御信号を送信する。例えば、命令は、例えば、どの複数の接続がアクティブであるかを制御する複数の制御信号を、（例えば、これらのフィールドとして）含んでよい。命令は（例えば、プロセッサによって実行された場合に）、どの型のオペレーションが入力データに対してＡＬＵによって実行されるべきかを示してよい。ＡＬＵ１及びＡＬＵ２は、複数の異なる型のオペレーションを同時に実行してよい。一実施形態、例えば、命令セットアーキテクチャレベルにおけるデータパスの並列性をサポートする実施形態は、この例において「ｄｅｘｅｃ」と称され、以下の表１のフォーマットを有する６４ビットＶＬＩＷスタイルの命令を含んでよい。
【表１】
0006456867.tif 000002
【００２６】
ここで図２Ｂを参照すると、他の命令の例が説明される。図２Ｂは、本開示の複数の実施形態に係る図２Ａにおけるハードウェアプロセッサ２００を通る複数のアクティブなデータパスを示す。この例示的な「ｄｅｘｅｃ」命令２０１は、４つの異なるフィールド（メモリライトバック、複数の乗算器バッファ入力、命令のＡＬＵ１部分、及び命令のＡＬＵ２部分）を含む。複数の異なる破線は、命令が（例えば、プロセッサによる命令の実行から）スイッチ２０８Ａ及び２０８Ｂを介して生じさせる複数の異なる接続を示す。例えば、メモリライトバックフィールドの第１のセクションにおいて、ａ３［１］＝ｂ０［３］は、メモリバンクＡにおける第３のアレイの第２のエレメントに書き込まれる、メモリバンクＢにおけるゼロ番目のアレイの第４のエレメントを意味してよい。例えば、バンクＢの第４のエレメントにおいて開始するベクトルは、メモリバンクＡの第２のエレメントにおいて開始するメモリバンクＡに書き込まれ（例えば、コピーされ）てよい。「−」は、フィールドに値がないこと、例えば、特定の例においてオペレーションフィールドが用いられていないことを示してよい。一実施形態において、プロセッサは、（例えば、実行パイプラインにおいて）ストールを含まない。ストールは、ノーオペレーション（ＮＯＰ）命令、バブル等であってよい。ストールは、ベクトル内ストール、例えば、ベクトルオペレーションが例えば実行ステージ０又は実行ステージ１において生じている間のストールを意味してよい。
【００２７】
図２Ｂに示される命令は、命令内及び／又は複数の連続的な命令間における潜在的なデータハザードを解決しつつ、複数のソース及びデスティネーションオペランドに対して同時に動作する命令の例であってよい。高いレベルにおいて、示された命令は２つの演算オペレーションを含み、これらは、ＡＬＵ１及びＡＬＵ２によってそれぞれ促進され、かつ、ハードウェアオフロードエンジン（例えば、乗算器）及び４つのメモリバンクＡ、Ｂ、Ｆ及びＧをターゲットにするデータ移動オペレーションの３つのインスタンスに対する複数のキューイングオペランドの１つのインスタンスを有する。これらの（例えばシーケンスの）オペレーションの例は、以下のとおりであってよい。
【００２８】
ＡＬＵ１：メモリバンクＡからソースされたベクトルオペランドａ３［５］は、ビット回転を受け、出力にコピーされる。出力は、その最上位ビット（ＭＳＢ）部分に追加のデータ（例えばクワッドワード）を有する出力オペランドを含む。ＡＬＵ１出力のデスティネーションは、この命令の他の部分に表される。
【００２９】
ＡＬＵ２：ＡＬＵ２は、単一のオペランドをソースし、これは、ハードウェアオフロードエンジン（例えば乗算器）の出力からソースされたバッファＡの出力である。オペレーションは、例えば、さらなるデータ（例えばクワッドワード）をＭＳＢ部分に追加した後、このオペランドをＡＬＵ２の出力にコピーしてよい。（この最後のオペレーションは、「＋１」によって指定されてよい。）この例示的命令は、ＡＬＵ１及びＡＬＵ２のバイナリオペレータとしての能力を適用しないが、代わりに、単項オペランドの例において適用する。ＡＬＵは、バイナリ及び／又は単項オペレーションを実行してよい。
【００３０】
ハードウェア乗算器オフロードエンジン（例えば乗算器）：乗算器は、（例えば、バッファＢ及びバッファＣからの）その複数のオペランドを（例えば、上述されたように）ＡＬＵ１の出力からソースしてよく、メモリバンクＦからソースされたベクトルオペランドｆ［１］をソースしてよい。
【００３１】
メモリコピーオペレーション（左から右への読み出し）
（１）ａ２［１］＝ｂ０［３］は、（例えばベクトル）オペランドｂ０［３］をａ２［１］にコピーする。
（２）ｂ３［２］＝ＡＬＵ２は、（例えば、上述された）ＡＬＵ２の出力を、メモリバンクＢにおいて（例えばベクトル）オペランドｂ３［２］にコピーする。
（３）ｇ［０］＝ＡＬＵ２も、ＡＬＵ２の出力を（例えば、第２のデスティネーションオペランドとして）、メモリバンクＧにおいて（例えばベクトル）オペランドｇ［０］にコピーする。複数の特定の実施形態は、メモリバンクへの第４のデータコピーオペレーションを可能にし得るが、この選択肢は、この例示的命令においては用いられない。
【００３２】
他の例として、ハードウェアプロセッサは、メモリバンクＡにストアされた、オフロードエンジン（例えば、乗算器）の幅（ｗ）より大きい数を二乗する複数のデータパスのアクティブ化を含んでよい。例えば、メモリバンクＡにストアされた数は、乗算器オフロードエンジンのサイズの２倍のベクトルであってよい。この例において、段階１として、命令が受信されてよく、これにより、バンクＡのアドレスａから乗算器バッファＢ及びＣに半ベクトルを送信する（例えば、乗算１）。段階２として、命令は、バンクＡのアドレスａ＋幅（ｗ）から乗算器バッファＢ及びＣに半ベクトルを送信してよい（例えば、乗算２）。段階３として、命令は、バンクＡから乗算器オフロードエンジンに両方の半ベクトルを送信してよく、途中で１をシフトする（例えば、乗算３）。段階４として、ハードウェアプロセッサは、乗算器オフロードエンジンの出力（例えば、乗算１の結果）をメモリバンクＢのアドレス［ｂ，ｂ＋２ｗ］にストアしてよい。段階５として、ハードウェアプロセッサは、乗算器オフロードエンジンの出力（例えば、乗算２の結果）をバンクＢのアドレス［ｂ＋２ｗ，ｂ＋４ｗ］にストアしてよい。段階６として、ハードウェアプロセッサは、アドレス［ｂ＋ｗ，ｂ＋３ｗ］間でバンクＢを読み出し、ＡＬＵを通してデータを送信することにより当該データを乗算器オフロードエンジンの出力（例えば、乗算３の結果）に加算し、これをバンクＢのアドレス［ｂ＋ｗ，ｂ＋３ｗ］にストアしてよい。
【００３３】
段階５及び６の間において、リードアフターライトが行われ、そのロジックは、そこにおけるデータハザードを防止し得る。段階６内において、同じ命令内での読み出しと書き込みとの（例えば完全な）重複が存在してよい。一実施形態において、段階４及び段階１は単一の命令に併合され、同時に動作する。一実施形態において、段階５及び段階２は単一の命令に併合され、同時に動作する。一実施形態において、段階６及び段階３は単一の命令に併合され、同時に動作する。本明細書における複数の特定の実施形態は、パイプライン化されたプロセッサのためのデータハザード解消ロジックを提供する。ＭＭＰの例として、リードアフターライト（ＲＡＷ）ハザードが適用可能であってよく、これは、２つの連続的なベクトル命令の間で、先行する命令の書き込みと後の命令の読み出しとが、同じデータストレージ（例えば、メモリバンク）の重複するアドレス（例えば、アドレス範囲）に対して実行された場合に発生し得る。複数の特定の実施形態において、ストール（例えばＮＯＰ）は、ベクトル内（例えば、ベクトル中央における）命令の実行に挿入されるものではなく、例えば、最下位ビット（ＬＳＢ）をＥＸ０からＥＸ１ステージに転送することを含むデータパスの右シフトオペレーションに起因する。一実施形態において、ベクトルオペレーションは、最下位エレメント（例えば、クワッドワード）から最上位エレメント（例えば、クワッドワード）に向かってよく、例えば、これによりシフタは、右シフトオペレーションを実行すべく、ベクトルの次のエレメント（例えばクワッドワード）からＬＳＢをとる。図２Ａ−２Ｂのデータパスにおいて、これは、ＥＸ０ステージから転送されたＬＳＢをとり、ＥＸ０／ＥＸ１パイプラインを迂回することに対応する。ストールが複数の特定の実施形態に挿入される、例えば、ベクトルオペレーションの中央において右シフトを実行するＭＲ／ＥＸパイプラインに挿入される場合、ＥＸ１ステージは、ＥＸ０ステージから転送する有効なＬＳＢの欠如により前進できないことがあり、例えば、ハザード条件が持続するデッドロックを発生させる。ストール挿入における上述された制約のため、（例えば、ＭＭＰにおける）ＲＡＷデータハザード条件の検出は、命令がベクトル分解ユニットに発行される前に、例えば、データパスにおける保留の書き込みのアドレス範囲に対する命令のアドレス範囲をチェックすることによって、デコーダにおいて実行されてよい。複数の特定の実施形態において、複数のベクトル命令から複数の異なるメモリバンクへのデータパスにおいて、複数の保留の書き込みが存在することがある。本開示の複数の特定の実施形態は、ベクトル内ストール（例えば、ＮＯＰ遮断）を用いることなく、データパスにおけるハザードを防止する。一実施形態において、ベクトル命令は、（例えばＲＡＷ）データハザードをチェックすることなく、デコーダによって発行される。データハザードは、メモリバンクからの読み出し前に、例えば、ＥＣ／ＭＲパイプラインステージにおいて、チェックされてよい。チェックは、ベクトルの各エレメント（例えば、ワード）が特定のステージ、例えば、ＥＣ／ＭＲステージに到達した場合に、当該エレメントに対して（例えば、エラーチェックユニットによって）実行されてよい。チェックは、データパスの残りに、読み出されるべき即値アドレスである保留の書き込みが１つもないことをチェックすることであってよい。（例えばＲＡＷ）データハザードが検出された場合、プロセッサは、ベクトル内ストール（例えばＮＯＰ）を挿入せず、ベクトル間ストール（例えばＮＯＰ）をそこに挿入してよい。より積極的な命令スケジューリングにおいて、早期段階にスケジューリングされる追従命令は、前の命令のパイプラインが完了しておらず、ハザードを発生させ得ることを検出してよい。例えば、ほぼ重複する複数のアドレス範囲に対するチェックの実行は、当該範囲がメモリの境界及びメモリのラップアラウンドを含む場合に好ましくない影響をもたらすような実装を必要とすることがあるが、これと対照的に、パイプラインが最大でｎ回サイクルの場合、ｎ個のアドレスコンパレータがハザード検出のために用いられてよい。
【００３４】
図３は、本開示の複数の実施形態に係るデータパス３００を通る複数のベクトルの移行を、例えばパイプラインスナップショットとして示す。データハザード解消（例えばロジック）は、以下のいずれか又は全てを含んでよい。一実施形態（ａ）において、データハザード解消は、例えば複数のベクトルが右に移動した場合に、１つだけインクリメントされるパイプラインのアドレスを有することを含む。このように、（例えばエレメント）ｘをパイプラインに発行した時点で、ｘ＝ｍ−ｄ＜ｍ、ここでｄが正の整数の場合、ストライドｄは、２つのベクトルが前進する場合に整合するように維持されてよい。具体的には、ベクトルｘからの複数のアドレス読み出しは、ｄの距離だけ、ベクトルｍからの複数のアドレス書き込みを継続的に遅らせてよい。一実施形態（ｂ）において、ｘの発行時にｘ＝ｍ＋ｊ＋ｄ＞ｍ＋ｊであり、ここでｄが正の整数である場合、ｄのストライドは、２つのベクトルが前進する場合に整合するように維持されてよい。具体的には、ベクトルｘからの複数のアドレス読み出しは、パイプラインにおいてアクティブなベクトルｍからの書き込みアドレス範囲の外部に（例えば、常に）あってよい。一実施形態において、アドレスチェックにより、（例えば）上記２つの条件（ａ）及び（ｂ）の１つがｄ≧１を満たす場合に（又はその場合にのみ）、ベクトルｘは移動してよい。２つのいずれも適用されない場合、（例えばベクトル間）ストール（例えばＮＯＰ）は、例えば、最終的に（ａ）がｄ＝１により適用可能となるまで又はベクトルＭが消失するまで、挿入されてよい。一実施形態（ｄ）において、ベクトルｍに追従する他のベクトル、例えばベクトルｎが存在する場合、ベクトルｘの前進は、さらにｘ＜ｎ又はｘ＞ｎ＋ｋの対象とされてよい。いずれも適用可能ではない場合、（例えばベクトル間）ストール（例えばＮＯＰ）は、例えば、ベクトルｎがパイプラインの末尾に配置されるまで、ベクトルｍ及びｎの進行を可能とするように挿入されてよい。次に、（ａ）、（ｂ）、及び（ｃ）は、ベクトルｎに再帰的に適用可能であってよい。一実施形態（ｅ）において、パイプラインにおいてベクトルｎに追従するより多くのベクトルが存在する場合、（ｄ）は、再帰的に適用可能であってよい。一実施形態において、アドレスチェックは、（ｊ＋ｋ＋２）個のコンパレータのいずれかが、読み出されたｘのアドレスに等しいｍのアドレスを示すか否かをチェックすることを含んでよい。
【００３５】
本開示の複数の特定の実施形態は、いずれの範囲もチェックしないでよく、例えば、入手された単一の読み出アドレスに対して、パイプラインにおける複数の保留の書き込みアドレスの等価性のみチェックしてよい。本開示の複数の特定の実施形態は、例えば、動的ベクトル追従ロジックを用いることなく、複数の保留の書き込みが１つのベクトル命令に属するか否かをチェックしないデータハザード解消ロジックを可能にしてよい。
【００３６】
本明細書における複数の特定の実施形態は、オフロードエンジンの１００％又は約１００％の利用を実現してよい。本明細書における複数の特定の実施形態は、例えば、（例えば、単一の命令、複数データ（ＳＩＭＤ）実装における場合のように）密結合均一処理、又は、（例えば、画像処理ユニット（ＧＰＧＰＵ）コンピューティングにおける汎用コンピューティングの場合のように）１つの処理グループ（例えばアンサンブル）だけがホモジニアスの処理でビジーだが、他の処理グループは待機している非常に緩く結合された実行のいずれかに提供する並列処理アーキテクチャと対照的に、２つの異なる処理エンジン（例えば、プロセッサコア、又はさらなる例として、その実行ユニット）による、（例えばＶＬＩＷ）命令セットを通してのヘテロジニアス並列処理に、密な結合を提供する。対照的に、本明細書における複数の特定の実施形態において、複数の処理エレメント（例えば、当該システムのプロセッサと異なる速度で動作するオフロードエンジン（又は他のプロセッサ）であるもの）の両方は、命令レベルで協調し、例えば、ＳＩＭＤ構造と対照的にＶＬＩＷ構造を有する命令セットにより所与のタスクを実行する。
【００３７】
図４は、本開示の複数の実施形態に係るフロー図４００を示す。フロー図４００は、制御信号に基づいて、スイッチにより、ハードウェアプロセッサの並列な複数の実行ユニットの複数の入力を第１のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な複数のメモリバンク及び複数の第２のバッファの複数の入力を第１のバッファ、複数のメモリバンク、及び複数の実行ユニットの複数の出力に接続する段階４０２と、複数の第２のバッファの複数の出力からオフロードエンジンの複数の入力にデータを提供する段階４０４と、を含む。プロセッサは、例えば有限ステートマシンのような、本明細書のフロー図に従って動作するロジックを含んでよい。
【００３８】
一実施形態において、ハードウェアプロセッサは、並列な複数の（例えばベクトル）実行ユニットと、複数の実行ユニットの複数の入力を第１のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な複数のメモリバンク及び複数の第２のバッファの複数の入力を第１のバッファ、複数のメモリバンク、及び複数の実行ユニットの複数の出力に接続するスイッチと、複数の第２のバッファの複数の出力に接続される複数の入力を有するオフロードエンジンと、を含む。オフロードエンジンの出力は、第１のバッファの入力に接続してよい。ハードウェアプロセッサは、第１のバッファの出力からの読み出しと複数の第２のバッファの複数の入力への書き込みとを同時に実行するデータハザード解消ロジックをさらに含んでよい。データハザード解消ロジックは、（例えばベクトル内）ストールを挿入しなくてよい。複数の（例えばベクトル）実行ユニットは、第１のクロック速度で実行してよく、オフロードエンジンは、第２のより高速（又はより低速）のクロック速度で実行してよい。実行ユニットは、シフトレジスタを含んでよい。複数の実行ユニットの各々は、シフトレジスタを含んでよい。第１のバッファ及び複数の第２のバッファは、ファーストインファーストアウト（ＦＩＦＯ）バッファであってよい。複数のメモリバンクは、４つ又はそれより多くのメモリバンクであってよく、各メモリバンクは、複数の他のメモリバンクの複数の入力ポート及び複数の出力ポートとは別個の入力ポート及び出力ポートを含んでよい。
【００３９】
他の実施形態において、方法は、制御信号に基づいて、スイッチにより、ハードウェアプロセッサの並列な複数の実行ユニットの複数の入力を第１のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な複数のメモリバンク及び複数の第２のバッファの複数の入力を第１のバッファ、複数のメモリバンク、及び複数の実行ユニットの複数の出力に接続する段階と、複数の第２のバッファの複数の出力からオフロードエンジンの複数の入力にデータを提供する段階と、を含む。方法は、オフロードエンジンの出力から第１のバッファの入力にデータを提供する段階を含んでよい。方法は、第１のバッファの出力からの読み出しと複数の第２のバッファの複数の入力への書き込みとを同時に実行する段階を含んでよい。方法は、例えば、実行ユニットによって実行されるべき、ストールを挿入しない段階を含んでよい。方法は、複数の実行ユニットによって第１のクロック速度で実行し、オフロードエンジンによって第２のより高速（又はより低速）のクロック速度で実行する段階をさらに含んでよい。複数の実行ユニットの各々は、シフトレジスタを含んでよい。複数のメモリバンクは、４つ又はそれより多くのメモリバンクであり、各メモリバンクは、複数の他のメモリバンクの複数の入力ポート及び複数の出力ポートとは別個の入力ポート及び出力ポートを含む。第１のバッファ及び複数の第２のバッファは、ファーストインファーストアウト（ＦＩＦＯ）バッファであってよい。
【００４０】
さらに他の実施形態において、ハードウェアプロセッサは、命令を復号するハードウェアデコーダと、命令を実行することにより、制御信号に基づいて、ハードウェアプロセッサの並列な複数の実行ユニットの複数の入力を第１のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な複数のメモリバンク及び複数の第２のバッファの複数の入力を第１のバッファ、複数のメモリバンク、及び複数の実行ユニットの複数の出力に接続し、複数の第２のバッファの複数の出力からオフロードエンジンの複数の入力にデータを提供するハードウェア実行ユニットと、を含む。オフロードエンジンの出力は、第１のバッファの入力に接続してよい。ハードウェア実行ユニットは、命令を実行してよく、これにより、第１のバッファの出力からの読み出しと、複数の第２のバッファの複数の入力への書き込みとを同時に実行させる。ハードウェア実行ユニットは、ストールを挿入することなく、命令を実行してよい。複数の実行ユニットは、第１のクロック速度で実行してよく、オフロードエンジンは、第２のより高速（又はより低速）のクロック速度で実行してよい。複数の実行ユニットの各々は、シフトレジスタを含んでよい。第１のバッファ及び複数の第２のバッファは、ファーストインファーストアウト（ＦＩＦＯ）バッファであってよい。複数のメモリバンクは、４つ又はそれより多くのメモリバンクであってよく、各メモリバンクは、複数の他のメモリバンクの複数の入力ポート及び複数の出力ポートとは別個の入力ポート及び出力ポートを含んでよい。
【００４１】
他の実施形態において、ハードウェア装置は、並列な複数の実行ユニットと、複数の実行ユニットの複数の入力を第１のバッファ及び複数のメモリバンクの複数の出力に接続し、並列な複数のメモリバンク及び複数の第２のバッファの複数の入力を第１のバッファ、複数のメモリバンク、及び複数の実行ユニットの複数の出力に接続する手段と、複数の第２のバッファの複数の出力に接続される複数の入力を有するオフロードエンジンと、を含む。
【００４２】
さらに他の実施形態において、装置は、コードをストアするデータストレージデバイスを備え、コードは、ハードウェアプロセッサによって実行された場合に、本明細書に開示される任意の方法をハードウェアプロセッサに実行させる。
【００４３】
命令セットは、１つ又は複数の命令フォーマットを含んでよい。所与の命令フォーマットは、実行されるべきオペレーション（例えば、オペコード）及び当該オペレーションが実行されるべき対象であるオペランド、及び／又は他のデータフィールド（例えば、マスク）を、他のものの中から指定する様々なフィールド（例えば、ビットの数、ビットの位置）を定義してよい。いくつかの命令フォーマットは、複数の命令テンプレート（又はサブフォーマット）の定義によってさらに分解される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットの複数のフィールドの異なる複数のサブセットを有するように定義されてよく（含まれる複数のフィールドは、典型的には同じ順序だが、少なくともいくつかは、含まれるフィールドがより少ないため、異なる複数のビット位置を有する）、及び／又は、異なるように解釈される所与のフィールドを有するように定義されてよい。従って、ＩＳＡの各命令は、所与の命令フォーマットを用いて（かつ、定義される場合には、その命令フォーマットの複数の命令テンプレートの所与のもので）表され、オペレーション及び複数のオペランドを指定するための複数のフィールドを含む。例えば、例示的なＡＤＤ命令は、オペコード及びオペランドフィールドを指定することにより複数のオペランド（ソース１／デスティネーション及びソース２）を選択するために、具体的なオペコード及びオペコードフィールドを含む命令フォーマットを有し、命令ストリームにおけるこのＡＤＤ命令の発生は、具体的な複数のオペランドを選択する複数のオペランドフィールド内の具体的な複数の内容を有する。次世代ベクトル拡張（ＡＶＸ）（ＡＶＸ１及びＡＶＸ２と称され、ベクトル拡張（ＶＥＸ）符号化スキームを用いるＳＩＭＤ拡張のセットが、リリース及び／又は公開されている（例えば、２０１５年４月発行のインテル（登録商標）６４及びＩＡ−３２アーキテクチャソフトウェアデベロッパーズマニュアル及び２０１４年１０月発行のインテル（登録商標）アーキテクチャ命令セット拡張プログラミングリファレンスを参照）。
【００４４】
［例示的な命令フォーマット］
本明細書で説明される命令の複数の実施形態は、異なる複数のフォーマットで具現されてよい。さらに、例示的なシステム、アーキテクチャ、及びパイプラインが以下に詳述される。命令の複数の実施形態は、このようなシステム、アーキテクチャ、及びパイプライン上で実行可能であるが、詳述されるものに限定されるものではない。
【００４５】
［汎用ベクトル向け命令フォーマット］
ベクトル向け命令フォーマットは、（例えば、特定の複数のフィールド固有の複数のベクトルオペレーションが存在する）複数のベクトル命令に適した命令フォーマットである。ベクトル及びスカラオペレーションの両方がベクトル向け命令フォーマットを通してサポートされる複数の実施形態が説明されるが、複数の代替的な実施形態は、ベクトル向け命令フォーマットのベクトルオペレーションのみを用いる。
【００４６】
図５Ａ−５Ｂは、本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びこれらの命令テンプレートを示すブロック図である。図５Ａは、本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びその複数のクラスＡ命令テンプレートを示すブロック図であり、図５Ｂは、本開示の複数の実施形態に係る汎用ベクトル向け命令フォーマット及びその複数のクラスＢ命令テンプレートを示すブロック図である。具体的には、クラスＡ及びクラスＢ命令テンプレートが定義される汎用ベクトル向け命令フォーマット５００であり、これらは両方とも、複数の非メモリアクセス５０５命令テンプレート及びメモリアクセス５２０命令テンプレートを含む。汎用という用語は、ベクトル向け命令フォーマットとの関連では、任意の具体的な命令セットに拘束されない命令フォーマットを指す。
【００４７】
ベクトル向け命令フォーマットが、３２ビット（４バイト）又は６４ビット（８バイト）のデータエレメント幅（又はサイズ）を有する６４バイトベクトルオペランド長（又はサイズ）（従って、６４バイトベクトルは、１６ダブルワードサイズの複数のエレメント、又は代わりに、８クワッドワードサイズの複数のエレメントのいずれかからなる）、１６ビット（２バイト）又は８ビット（１バイト）のデータエレメント幅（又はサイズ）を有する６４バイトベクトルオペランド長（又はサイズ）、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）又は８ビット（１バイト）のデータエレメント幅（又はサイズ）を有する３２バイトベクトルオペランド長（又はサイズ）、及び３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）又は８ビット（１バイト）のデータエレメント幅（又はサイズ）を有する１６バイトベクトルオペランド長（又はサイズ）をサポートする本開示の複数の実施形態が説明されるが、複数の代替的な実施形態は、より多くの、より少ない、又は複数の異なるデータエレメント幅（例えば、１２８ビット（１６バイト）のデータエレメント幅）を有する、より多くの、より少ない、及び／又は異なる複数のベクトルオペランドサイズ（例えば、２５６バイトの複数のベクトルオペランド）をサポートしてよい。
【００４８】
ハードウェアプロセッサ、例えば、乗算器オフロードエンジンを有するＭＭＰハードウェアプロセッサは、複数の多倍精度演算を実行してよい。ハードウェアプロセッサは、１２８、２５６、５１２、１０２４等ビットのベクトルをシフトし、例えば、単一の（例えばＶＬＩＷ）命令において（例えば非常に大きい）整数を２で除算すること又は（例えば非常に大きい）整数を２で乗算することを実行してよい。
【００４９】
図５ＡのクラスＡ命令テンプレートは、１）その内部に、非メモリアクセス、フルラウンド制御型オペレーション５１０命令テンプレート、及び非メモリアクセス、データ変換型オペレーション５１５命令テンプレートが示される複数の非メモリアクセス５０５命令テンプレートと、２）その内部に、メモリアクセス、一時的５２５命令テンプレート、及びメモリアクセス、非一時的５３０命令テンプレートが示されるメモリアクセス５２０命令テンプレートとを含む。図５ＢのクラスＢ命令テンプレートは、１）その内部に、非メモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション５１２命令テンプレート、及び非メモリアクセス、書き込みマスク制御、ｖｓｉｚｅ型オペレーション５１７命令テンプレートが示される非メモリアクセス５０５命令テンプレートと、２）その内部に、メモリアクセス、書き込みマスク制御５２７命令テンプレートが示されるメモリアクセス５２０命令テンプレートとを含む。
【００５０】
汎用ベクトル向け命令フォーマット５００は、図５Ａ−５Ｂに示される順序で、以下に列挙される以下のフィールドを含む。
【００５１】
フォーマットフィールド５４０：このフィールドにおける特定値（命令フォーマット識別子の値）は、ベクトル向け命令フォーマットを一意に特定し、従って、命令ストリームにおけるベクトル向け命令フォーマットの複数の命令の発生を特定する。このように、このフィールドは、汎用ベクトル向け命令フォーマットのみを有する命令セットには必要とされないという意味で任意である。
ベースオペレーションフィールド５４２：その内容は、異なる複数のベースオペレーションを区別する。
【００５２】
レジスタインデックスフィールド５４４：その内容は、直接的に又はアドレス生成を通して、ソース及びデスティネーションオペランドの位置が、レジスタ内にあるか又はメモリ内にあるかを指定する。これらは、ＰｘＱ（例えば、３２ｘ５１２、１６ｘ１２８、３２ｘ１０２４、６４ｘ１０２４）レジスタファイルからＮ個のレジスタを選択するために十分な数のビットを含む。一実施形態において、Ｎは、３つのソース及び１つのデスティネーションレジスタまでであってよいが、複数の代替的な実施形態は、より多くの又はより少ないソース及びデスティネーションレジスタをサポートしてよい（例えば、２つのソースまでであっても、これらのソースのうち１つがデスティネーションとしても動作するようなソースをサポートしてよく、３つのソースまでであっても、これらのソースのうちの１つがデスティネーションとしても動作するソースをサポートしてよく、２つのソース及び１つのデスティネーションまでをサポートしてよい。）
【００５３】
修飾子フィールド５４６：その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットの複数の命令の発生を、メモリアクセスを指定しないものから、すなわち、複数の非メモリアクセス５０５命令テンプレートとメモリアクセス５２０命令テンプレートとを区別する。複数のメモリアクセスオペレーションは、（いくつかの場合において、複数のレジスタ内の複数の値を用いて、ソース及び／又はデスティネーションアドレスを指定する）メモリ階層の読み出し及び／又は書き込みを実行するが、複数の非メモリアクセスオペレーションは、これを実行しない（例えば、ソース及びデスティネーションがレジスタである）。一実施形態において、このフィールドは、複数のメモリアドレス算出を実行する３つの異なる態様の間でさらに選択するが、複数の代替的な実施形態は、複数のメモリアドレス算出を実行するより多くの、より少ない、又は異なる態様をサポートしてよい。
【００５４】
増加オペレーションフィールド５５０：その内容は、ベースオペレーションに加えて、様々な異なるオペレーションの中で実行されるべきいずれかを区別する。このフィールドは、状況に応じて異なる。本開示の一実施形態において、このフィールドは、クラスフィールド５６８、アルファフィールド５５２、及びベータフィールド５５４に分割される。増加オペレーションフィールド５５０は、２、３、又は４つの命令ではなく単一の命令において実行されるべき複数のオペレーションの共通グループを可能とする。
【００５５】
スケールフィールド５６０：その内容は、メモリアドレス生成のために（例えば、２ｓｃａｌｅ×インデックス＋ベースを用いるアドレス生成のために）、インデックスフィールドの内容のスケーリングを可能とする。
【００５６】
変位フィールド５６２Ａ：その内容は、（例えば、２ｓｃａｌｅ×インデックス＋ベース＋変位を用いるアドレス生成のために）メモリアドレス生成の一部として用いられる。
【００５７】
変位ファクタフィールド５６２Ｂ（なお、変位ファクタフィールド５６２Ｂの直上に変位フィールド５６２Ａを並べることは、一方又は他方が用いられることを示す）：その内容は、アドレス生成の一部として用いられる。これは、メモリアクセスのサイズ（Ｎ）によりスケールされるべき変位ファクタを指定する。ここで、Ｎは、（例えば、２ｓｃａｌｅ×インデックス＋ベース＋スケールされた変位を用いるアドレス生成のための）メモリアクセスにおけるバイト数である。複数の冗長下位ビットは無視され、従って、変位ファクタフィールドの内容は、実効アドレスの算出に用いられる最終的な変位を生成すべく、複数のメモリオペランドの合計サイズ（Ｎ）により乗算される。Ｎの値は、プロセッサハードウェアによって、（本明細書において後述される）フルオペコードフィールド５７４及びデータ操作フィールド５５４Ｃに基づいて、ランタイムで決定される。変位フィールド５６２Ａ及び変位ファクタフィールド５６２Ｂは、これらが非メモリアクセス５０５命令テンプレートのために用いられないという意味で任意であり、及び／又は、異なる複数の実施形態は、これら２つのうち１つだけを実装してよく、又はこれらのうち１つも実装しなくてよい。
【００５８】
データエレメント幅フィールド５６４：その内容は、多数のデータエレメント幅のうちのいずれが（いくつかの実施形態においては全ての命令に対して、複数の他の実施形態では、複数の命令のうちのいくつかのみに対して）用いられるかを区別する。このフィールドは、複数のオペコードのいくつかの態様を用いて、１つだけのデータエレメント幅がサポートされる場合、及び／又は複数のデータエレメント幅がサポートされる場合には必要とされないという意味で任意である。
【００５９】
書き込みマスクフィールド５７０：その内容は、データエレメント位置毎に、デスティネーションベクトルオペランドにおける当該データエレメント位置がベースオペレーション及び増加オペレーションの結果を反映するか否かを制御する。クラスＡ命令テンプレートは、併合書き込みマスクをサポートするが、クラスＢ命令テンプレートは、併合及びゼロ書き込みマスクの両方をサポートする。併合の場合、複数のベクトルマスクは、（ベースオペレーション及び増加オペレーションによって指定された）いずれのオペレーションの実行中も、デスティネーションの複数のエレメントの任意のセットを更新から保護することを可能にする。他の一実施形態において、対応するマスクビットが０を有する場合、デスティネーションの各エレメントの古い値を保持する。対照的に、複数のゼロ書き込みベクトルマスクが（ベースオペレーション及び増加オペレーションによって指定された）いずれのオペレーションの実行中もデスティネーションの複数のエレメントの任意のセットへのゼロ書き込みを可能にする場合、一実施形態において、対応するマスクビットが０値を有する場合、デスティネーションのエレメントは０にセットされる。この機能性のサブセットは、実行されているオペレーションのベクトル長を制御する（すなわち、複数のエレメントのスパンが最初から最後のものまで変更される）能力である。しかしながら、変更される複数のエレメントが連続する必要はない。従って、書き込みマスクフィールド５７０は、ロード、ストア、演算、論理等を含む複数の部分的なベクトルオペレーションを可能とする。書き込みマスクフィールド５７０の内容が多数の書き込みマスクレジスタの中から使用されるべき書き込みマスクを含む１つを選択する（従って、書き込みマスクフィールド５７０の内容は、実行されるべきマスキングを間接的に特定する）本開示の複数の実施形態が説明されるが、代替的な実施形態によれば、代わりに又はさらに、マスク書き込みフィールド５７０の内容は、実行されるべきマスキングを直接的に指定することを可能とする。
【００６０】
即値フィールド５７２：その内容は、即値の指定を可能とする。このフィールドは、即値をサポートしない汎用ベクトル向けフォーマットの実装では存在せず、即値を用いない複数の命令に存在しないという意味で任意である。
【００６１】
クラスフィールド５６８：その内容は、複数の命令の異なるクラス間を区別する。図５Ａ−Ｂを参照すると、このフィールドの内容は、クラスＡ及びクラスＢ命令の間で選択する。図５Ａ−Ｂにおいて、複数の角が円い四角は、特定値がフィールドに存在する（例えば、図５Ａ−Ｂにおいて、クラスフィールド５６８に対してクラスＡ５６８Ａ及びクラスＢ５６８Ｂのそれぞれ）ことを示すために用いられる。
【００６２】
［クラスＡ命令テンプレート］
複数のクラスＡの非メモリアクセス５０５命令テンプレートの場合、アルファフィールド５５２は、ＲＳフィールド５５２Ａと解釈され、その内容は、複数の異なる増加オペレーション型の中でいずれが実行されるべきかを区別し（例えば、非メモリアクセス、ラウンド型オペレーション５１０及び非メモリアクセス、複数のデータ変換型オペレーション５１５命令テンプレートに対し、ラウンド５５２Ａ．１及びデータ変換５５２Ａ．２がそれぞれ指定される）、ベータフィールド５５４は、指定される型の複数のオペレーションの中でいずれが実行されるべきかを区別する。非メモリアクセス５０５命令テンプレートには、スケールフィールド５６０、変位フィールド５６２Ａ、及び変位スケールフィールド５６２Ｂは存在しない。
【００６３】
［メモリアクセス命令テンプレート：フルラウンド制御型オペレーション］
非メモリアクセスフルラウンド制御型オペレーション５１０の命令テンプレートにおいて、ベータフィールド５５４は、ラウンド制御フィールド５５４Ａと解釈され、その内容は、静的なラウンドを提供する。説明された本開示の複数の実施形態において、ラウンド制御フィールド５５４Ａは、全浮動小数点例外抑制（ＳＡＥ）フィールド５５６及びラウンドオペレーション制御フィールド５５８を含むが、複数の代替的な実施形態は、これらの複数の概念の両方を同じフィールドに符号化することをサポートしてよく、又はこれらの複数の概念／複数のフィールドの１つ又は他を有するだけでよい（例えば、ラウンドオペレーション制御フィールド５５８のみを有してよい）。
【００６４】
ＳＡＥフィールド５５６：その内容は、例外イベント報告を無効化するか否かを区別する。ＳＡＥフィールド５５６の内容が、抑制可能であることを示す場合、所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外処理部も起動しない。
【００６５】
ラウンドオペレーション制御フィールド５５８：その内容は、複数のラウンドオペレーションのいずれのグループ（例えば、切り上げ、切り捨て、０への丸め及び近似値への丸め）を実行するかを区別する。従って、ラウンドオペレーション制御フィールド５５８は、命令に基づいて、ラウンドオペレーションモードの変更を可能とする。プロセッサが複数のラウンドオペレーションモードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンドオペレーション制御フィールド５５０の内容は、当該レジスタ値にオーバライドする。
【００６６】
［非メモリアクセス命令テンプレート−データ変換型オペレーション］
非メモリアクセスデータ変換型オペレーション５１５命令テンプレートにおいて、ベータフィールド５５４はデータ変換フィールド５５４Ｂと解釈され、その内容は、多数のデータ変換のうちいずれが実行されるか（例えば、データ変換なし、スウィズル、ブロードキャスト）を区別する。
【００６７】
クラスＡのメモリアクセス５２０命令テンプレートの場合、アルファフィールド５５２は、エビクションヒントフィールド５５２Ｂと解釈され、その内容は、複数のエビクションヒントの中からいずれが用いられるべきかを区別し（図５Ａにおいて、一時的５５２Ｂ．１及び非一時的５５２Ｂ．２が、メモリアクセス、一時的５２５命令テンプレート及びメモリアクセス、非一時的５３０命令テンプレートに対してそれぞれ指定される）、ベータフィールド５５４は、データ操作フィールド５５４Ｃと解釈され、その内容は、（プリミティブとしても知られる）多数のデータ操作オペレーションのうちいずれが実行されるべきか（例えば、操作なし、ブロードキャスト、ソースのアップコンバート及びデスティネーションのダウンコンバート）を区別する。複数のメモリアクセス５２０命令テンプレートは、スケールフィールド５６０と、任意に、変位フィールド５６２Ａ又は変位スケールフィールド５６２Ｂとを含む。
【００６８】
複数のベクトルメモリ命令は、変換サポートにより、メモリからの複数のベクトルロード、メモリへの及び複数のベクトルストアを実行する。通常のベクトル命令と同様に、複数のベクトルメモリ命令は、書き込みマスクとして選択されるベクトルマスクの内容によって命令される、実際に転送される複数のエレメントとともに、データエレメント単位の態様で、メモリから／メモリへデータを転送する。
【００６９】
［メモリアクセス命令テンプレート−一時的］
一時的データは、キャッシュによる利益を十分に受けられるほどすぐに再使用される可能性が高いデータである。しかしながら、これは示唆であり、複数の異なるプロセッサが、この示唆を完全に無視することを含む異なる態様で、これを実装してよい。
【００７０】
［メモリアクセス命令テンプレート−非一時的］
非一時的データは、一次レベルキャッシュにおいてキャッシュによる利益を受けられるほど十分即座に再使用される可能性が低いデータであり、エビクションの優先度が与えられなければならない。しかしながら、これは示唆であり、複数の異なるプロセッサが、この示唆を完全に無視することを含む異なる態様で、これを実装してよい。
【００７１】
［命令テンプレート−クラスＢ］
複数のクラスＢ命令テンプレートの場合、アルファフィールド５５２は、書き込みマスク制御（Ｚ）フィールド５５２Ｃと解釈され、その内容は、書き込みマスクフィールド５７０によって制御される書き込みマスキングが、併合又はゼロ書き込みを実行すべきか否かを区別する。
【００７２】
複数のクラスＢ非メモリアクセス５０５命令テンプレートの場合、ベータフィールド５５４の一部は、ＲＬフィールド５５７Ａと解釈され、その内容は、複数の異なる増加オペレーション型の中でいずれが実行されるべきかを区別し（例えば、ラウンド５５７Ａ．１及びベクトル長（ＶＳＩＺＥ）５５７Ａ．２は、非メモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション５１２命令テンプレート及び非メモリアクセス、書き込みマスク制御、ＶＳＩＺＥ型オペレーション５１７命令テンプレートに対してそれぞれ指定される）、ベータフィールド５５４の残りは、指定される型の複数のオペレーションのいずれが実行されるべきかを区別する。非メモリアクセス５０５命令テンプレートには、スケールフィールド５６０、変位フィールド５６２Ａ、及び変位スケールフィールド５６２Ｂは存在しない。
【００７３】
非メモリアクセス、書き込みマスク制御、部分的ラウンド制御型オペレーション５１０の命令テンプレートにおいて、ベータフィールド５５４の残りは、ラウンドオペレーションフィールド５５９Ａと解釈され、例外イベント報告は、無効化される（所与の命令は、いずれの種類の浮動小数点例外フラグも報告せず、いずれの浮動小数点例外処理部も起動しない）。
【００７４】
ラウンドオペレーション制御フィールド５５９Ａ：単にラウンドオペレーション制御フィールド５５８として、その内容は、複数のラウンドオペレーションのいずれのグループが（例えば、切り上げ、切り捨て、０への丸め及び近似値への丸めを）実行するかを区別する。従って、ラウンドオペレーション制御フィールド５５９Ａは、命令に基づいて、ラウンドオペレーションモードの変更を可能とする。プロセッサが複数のラウンドオペレーションモードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンドオペレーション制御フィールド５５０の内容は、当該レジスタ値にオーバライドする。
【００７５】
非メモリアクセス、書き込みマスク制御、ＶＳＩＺＥ型オペレーション５１７命令テンプレートにおいて、ベータフィールド５５４の残りは、ベクトル長フィールド５５９Ｂと解釈され、その内容は、多数のデータベクトル長の中からいずれが実行されるべきか（例えば、１２８、２５６、又は５１２バイト）を区別する。
【００７６】
複数のクラスＢのメモリアクセス５２０命令テンプレートの場合、ベータフィールド５５４の一部は、ブロードキャストフィールド５５７Ｂと解釈され、その内容は、ブロードキャスト型のデータ操作オペレーションが実行されるべきか否かを区別し、ベータフィールド５５４の残りは、ベクトル長フィールド５５９Ｂと解釈される。複数のメモリアクセス５２０命令テンプレートは、スケールフィールド５６０と、任意に、変位フィールド５６２Ａ又は変位スケールフィールド５６２Ｂとを含む。
【００７７】
汎用ベクトル向け命令フォーマット５００に関して、フォーマットフィールド５４０、ベースオペレーションフィールド５４２、及びデータエレメント幅フィールド５６４を含むフルオペコードフィールド５７４が示される。一実施形態において、フルオペコードフィールド５７４はこれらフィールドの全てを含むものとして示されるが、フルオペコードフィールド５７４は、これらの全てをサポートしてはいない複数の実施形態においては、これらフィールドの一部を含む。フルオペコードフィールド５７４は、オペレーションコード（オペコード）を提供する。
【００７８】
増加オペレーションフィールド５５０、データエレメント幅フィールド５６４、及び書き込みマスクフィールド５７０は、汎用ベクトル向け命令フォーマットにおいて、これら全ての機能が命令に基づいて指定されることを可能とする。
【００７９】
書き込みマスクフィールド及びデータエレメント幅フィールドの組み合わせは、型別の複数の命令を形成し、これらによれば、マスクは複数の異なるデータエレメント幅に基づいて適用されることが可能となる。
【００８０】
クラスＡ及びクラスＢ内で見られる様々な複数の命令テンプレートは、複数の異なる状況において有益である。本開示の複数の実施形態のいくつかにおいて、複数の異なるプロセッサ又はプロセッサ内の複数の異なるコアは、クラスＡのみ、クラスＢのみ、又は両方のクラスをサポートしてよい。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスＢのみをサポートしてよく、主にグラフィック及び／又は科学的（スループット）コンピューティング向けのコアは、クラスＡのみをサポートしてよく、両方向けのコアは、両方をサポートしてよい（勿論、コアは、両方のクラスからの複数のテンプレート及び命令のいくつかの組み合わせを有するが、両方のクラスからの複数のテンプレート及び命令の全てが本開示の範囲内にある訳ではない）。また、単一のプロセッサは、全てが同じクラスをサポートする、又は異なるコアが異なるクラスをサポートする複数のコアを含んでよい。例えば、別個のグラフィックコア及び汎用コアを有するプロセッサにおいて、主にグラフィック及び／又は科学コンピューティング向けに意図された複数のグラフィックコアの１つは、クラスＡのみをサポートしてよく、複数の汎用コアのうちの１つ又は複数は、クラスＢのみをサポートする汎用コンピューティング向けに意図されたアウトオブオーダ実行及びレジスタリネーミングを有する高性能汎用コアであってよい。別個のグラフィックコアを有さない他のプロセッサは、クラスＡ及びクラスＢの両方をサポートする汎用インオーダ又はアウトオブオーダコアをもう１つ含んでよい。勿論、１つのクラスからの複数の機能は、本開示の複数の異なる実施形態における他のクラスで実装されてもよい。高水準言語で記述された複数のプログラムは、１）実行のためにターゲットのプロセッサにサポートされるクラスの命令のみを有する形式、又は２）全クラスの命令の複数の異なる組み合わせを用いて記述された代替的な複数のルーチンを有し、コードを現在実行中のプロセッサにサポートされる複数の命令に基づいて実行する複数のルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能形式にされる（例えば、ジャストインタイムにコンパイルされる又は静的にコンパイルされる）ことがある。
【００８１】
［例示的な特定ベクトル向け命令フォーマット］
図６Ａは、本開示の複数の実施形態に係る例示的な特定ベクトル向け命令フォーマットを示すブロック図である。図６Ａは、複数のフィールドの位置、サイズ、解釈及び順序、ならびにこれらのフィールドのうちいくつかに対する複数の値を指定するという意味で具体的な特定ベクトル向け命令フォーマット６００を示す。特定ベクトル向け命令フォーマット６００は、ｘ８６命令セットを拡張するために用いられてよく、従って、複数のフィールドのうちのいくつかは、既存のｘ８６命令セット及びこれらの拡張（例えば、ＡＶＸ）において用いられるものと同様又は同じである。このフォーマットは、複数の拡張を有する既存のｘ８６命令セットのプレフィクス符号化フィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、及び複数の即値フィールドとの整合性を維持する。図６Ａの複数のフィールドがマッピングされる図５Ａ−Ｂの複数のフィールドが示される。
【００８２】
本開示の複数の実施形態は、例示目的のため、汎用ベクトル向け命令フォーマット５００との関連で特定ベクトル向け命令フォーマット６００を参照して説明されるが、本開示は、特許請求の範囲に記載されたものを除いて、特定ベクトル向け命令フォーマット６００に限定されるものではないことを理解されたい。例えば、汎用ベクトル向け命令フォーマット５００は、様々なフィールドの様々な可能なサイズを検討し、特定ベクトル向け命令フォーマット６００は、複数の具体的なサイズの複数のフィールドを有するものとして示される。具体的な例を用いて、データエレメント幅フィールド５６４は、特定ベクトル向け命令フォーマット６００の１ビットフィールドとして示されるが、本開示は、この例に限定されるものではない（すなわち、汎用ベクトル向け命令フォーマット５００は、複数の他のサイズのデータエレメント幅フィールド５６４を検討する）。
【００８３】
汎用ベクトル向け命令フォーマット５００は、図６Ａに示される順序で、以下に列挙される以下のフィールドを含む。ＥＶＥＸプレフィクス（バイト０−３）６０２は、４バイト形式で符号化される。
【００８４】
フォーマットフィールド５４０（ＥＶＥＸバイト０、ビット［７：０］）］：第１のバイト（ＥＶＥＸバイト０）は、フォーマットフィールド５４０であり、これは、０ｘ６２（本開示の一実施形態において、ベクトル向け命令フォーマットを区別するために用いられる固有値）を含む。
【００８５】
第２−第４のバイト（ＥＶＥＸバイト１−３）は、具体的な能力を提供する多数のビットフィールドを含む。
【００８６】
ＲＥＸフィールド６０５（ＥＶＥＸバイト１、ビット［７−５］は、ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット７−Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］−Ｘ）、及び５５７ＢＥＸバイト１、ビット［５］−Ｂ）からなる。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、及びＥＶＥＸ．Ｂビットフィールドは、対応する複数のＶＥＸビットフィールドと同じ機能性を提供し、１の補数形式を用いて符号化される、すなわち、ＺＭＭ０は１１１１Ｂとして符号化され、ＺＭＭ１５は００００Ｂとして符号化される。当技術分野において公知であるように、複数の命令の複数の他のフィールドは、複数のレジスタインデックスの下位３ビット（ｒｒｒ、ｘｘｘ、及びｂｂｂ）を符号化し、これにより、Ｒｒｒｒ、Ｘｘｘｘ、及びＢｂｂｂは、ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、及びＥＶＥＸ．Ｂを追加することによって形成されてよい。
【００８７】
ＲＥＸ'フィールド５１０：これは、ＲＥＸ'フィールド５１０の第１の部分であり、拡張された３２レジスタセットの上位１６又は下位１６のいずれかを符号化するために用いられるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］−Ｒ'）である。本開示の一実施形態において、このビットは、以下に示される他のものと共に、ビット反転フォーマットでストアされることにより、リアルオペコードバイトは６２であるが、（後述の）ＭＯＤ  Ｒ／ＭフィールドにおいてＭＯＤフィールドの値１１を受け付けない（周知のｘ８６の３２ビットモードにおける）ＢＯＵＮＤ命令から区別するが、本開示の複数の代替的な実施形態は、このビット及び以下に示される反転フォーマットの他のビットをストアしない。１の値は、下位１６個のレジスタを符号化するために用いられる。換言すると、Ｒ'Ｒｒｒｒは、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、及び複数の他のフィールドからの他のＲＲＲを組み合わせことによって形成される。
【００８８】
オペコードマップフィールド６１５（ＥＶＥＸバイト１、ビット［３：０］−ｍｍｍｍ）：その内容は、暗示された先頭オペコードバイト（０Ｆ、０Ｆ３８、又は０Ｆ３）を符号化する。
【００８９】
データエレメント幅フィールド５６４（ＥＶＥＸバイト２、ビット［７］−Ｗ）は、表記ＥＶＥＸ．Ｗにより表される。ＥＶＥＸ．Ｗは、データ型（３２ビットデータエレメント又は６４ビットデータエレメントのいずれか）の粒度（サイズ）を定義するために用いられる。
【００９０】
ＥＶＥＸ．ｖｖｖｖ６２０（ＥＶＥＸバイト２、ビット［６：３］−ｖｖｖｖ）：ＥＶＥＸ．ｖｖｖｖの役割は、１）ＥＶＥＸ．ｖｖｖｖは、反転（１の補数）形式で指定される第１のソースレジスタオペランドを符号化し、２つ又はそれより多くのソースオペランドを有する複数の命令に対して有効であり、２）ＥＶＥＸ．ｖｖｖｖは、特定の複数のベクトルシフトに対して１の補数形式で指定されるデスティネーションレジスタオペランドを符号化し、又は３）ＥＶＥＸ．ｖｖｖｖは、いずれのオペランドも符号化せず、フィールドは保持されて１１１１ｂを含まなくてはならないということを含んでよい。従って、ＥＶＥＸ．ｖｖｖｖフィールド６２０は、反転（１の補数）形式でストアされた第１のソースレジスタ指定子の下位４ビットを符号化する。命令に応じて、追加の異なるＥＶＥＸビットフィールドは、指定子サイズを３２のレジスタに拡張するために用いられる。
【００９１】
ＥＶＥＸ．Ｕ５６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］−Ｕ）：ＥＶＥＸ．Ｕ＝０の場合、これは、クラスＡ又はＥＶＥＸ．Ｕ０を示す。ＥＶＥＸ．Ｕ＝１の場合、これは、クラスＢ又はＥＶＥＸ．Ｕ１を示す。
【００９２】
プレフィクス符号化フィールド６２５（ＥＶＥＸバイト２、ビット［１：０］−ｐｐ）は、ベースオペレーションフィールドに対してさらなる複数のビットを提供する。ＥＶＥＸプレフィクスフォーマットにおける複数のレガシＳＳＥ命令に対するサポートを提供することに加えて、これは、ＳＩＭＤプレフィクスを圧縮する利益をも有する（ＳＩＭＤプレフィクスを表現するバイトを必要とするのではなく、ＥＶＥＸプレフィクスは２ビットのみを必要とする）。一実施形態において、レガシフォーマット及びＥＶＥＸプレフィクスフォーマットの両方においてＳＩＭＤプレフィクス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を用いる複数のレガシＳＳＥ命令をサポートすべく、これらのレガシＳＩＭＤプレフィクスは、ＳＩＭＤプレフィクス符号化フィールドに符号化され、デコーダのＰＬＡに提供される前に、ランタイムにおいてレガシＳＩＭＤプレフィクスに拡張される（従って、ＰＬＡは、これらのレガシ命令のレガシ及びＥＶＥＸフォーマットの両方を変更することなく実行することができる）。より新たな複数の命令は、ＥＶＥＸプレフィクス符号化フィールドの内容を直接、オペコード拡張として用いることができたが、複数の特定の実施形態は、整合性のために同様に拡張するが、これらのレガシＳＩＭＤプレフィクスにより指定された異なる意味を可能とする。代替的な実施形態は、２ビットＳＩＭＤプレフィクスの符号化をサポートするＰＬＡを再設計してよく、従って、拡張を必要としない。
【００９３】
アルファフィールド５５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ、ＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．ｗｒｉｔｅ  ｍａｓｋ  ｃｏｎｔｒｏｌ、及びＥＶＥＸ．Ｎとしても知られ、またαで示される）：前述されたように、このフィールドは状況に応じて異なる。
【００９４】
ベータフィールド５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ、ＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られ、またβββで示される）：前述されたように、このフィールドは状況に応じて異なる。
【００９５】
ＲＥＸ'フィールド５１０：これは、ＲＥＸ'フィールドの残りであり、拡張された３２レジスタセットの上位１６又は下位１６のいずれかを符号化するために用いられてよいＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸバイト３、ビット［３］−Ｖ'）である。このビットは、ビット反転フォーマットでストアされる。１の値は、下位１６個のレジスタを符号化するために用いられる。換言すると、Ｖ'ＶＶＶＶは、ＥＶＥＸ．Ｖ'、ＥＶＥＸ．ｖｖｖｖを組み合わせることによって形成される。
【００９６】
書き込みマスクフィールド５７０（ＥＶＥＸバイト３、ビット［２：０］−ｋｋｋ）：その内容は、前述されたように、複数の書き込みマスクレジスタ内のレジスタにおいてインデックスを指定する。本開示の一実施形態において、特定値ＥＶＥＸ．ｋｋｋ＝０００は、特定の命令のために用いられる書き込みマスクがないことを示唆する特別な挙動を有する（これは、ハードウェアに組み込まれた全ての書き込みマスク又はマスキングハードウェアを迂回するハードウェアを用いることを含む、様々な態様で実装されてよい）。
【００９７】
リアルオペコードフィールド６３０（バイト４）は、オペコードバイトとしても知られる。オペコードの一部は、このフィールドにおいて指定される。
【００９８】
ＭＯＤ  Ｒ／Ｍフィールド６４０（バイト５）は、ＭＯＤフィールド６４２、Ｒｅｇフィールド６４４及びＲ／Ｍフィールド６４６を含む。前述されたように、ＭＯＤフィールド６４２の内容は、メモリアクセス及び非メモリアクセスオペレーション間を区別する。Ｒｅｇフィールド６４４の役割は、２つの状況に対して要約されてよい。すなわち、デスティネーションレジスタオペランド又はソースレジスタオペランドのいずれかを符号化する場合、又はオペコード拡張として扱われ、いずれの命令オペランドの符号化にも用いられない場合である。Ｒ／Ｍフィールド６４６の役割は、以下を含んでよい。すなわち、メモリアドレスを参照する命令オペランドを符号化すること、又はデスティネーションレジスタオペランド又はソースレジスタオペランドのいずれかを符号化することである。
【００９９】
スケーリング、インデックス、ベース（ＳＩＢ）バイト（バイト６）：前述されたように、スケールフィールド５５０の内容は、メモリアドレス生成のために用いられる。ＳＩＢ．ｘｘｘ６５４及びＳＩＢ．ｂｂｂ６５６：これらのフィールドの内容は、レジスタインデックスＸｘｘｘ及びＢｂｂｂに関して前に説明されている。
【０１００】
変位フィールド５６２Ａ（バイト７―１０）：ＭＯＤフィールド６４２が１０を含む場合、バイト７−１０は変位フィールド５６２Ａであり、これは、レガシ３２ビット変位（ｄｉｓｐ３２）と同じ機能をはたし、かつ、バイト粒度において機能する。
【０１０１】
変位ファクタフィールド５６２Ｂ（バイト７）：ＭＯＤフィールド６４２が０１を含む場合、バイト７は、変位ファクタフィールド５６２Ｂである。このフィールドの位置は、バイト粒度において機能するレガシｘ８６命令セットの８ビット変位（ｄｉｓｐ８）の位置と同じである。ｄｉｓｐ８は符号拡張されるので、これは、−１２８及び１２７バイトオフセット間でのみアドレスすることができる。複数の６４バイトキャッシュラインに関して、ｄｉｓｐ８は、−１２８、−６４、０、及び６４の４つのみという実に有用な値にセットされ得る８ビットを用いる。多くの場合、より広範囲が必要とされるので、ｄｉｓｐ３２が用いられる。しかしながら、ｄｉｓｐ３２は、４バイトを必要とする。ｄｉｓｐ８及びｄｉｓｐ３２と対照的に、変位ファクタフィールド５６２Ｂは、ｄｉｓｐ８の再解釈である。変位ファクタフィールド５６２Ｂを用いる場合、実際の変位は、メモリオペランドアクセスのサイズ（Ｎ）で乗算された変位ファクタフィールドの内容によって決定される。この型の変位は、ｄｉｓｐ８×Ｎと称される。これは、（変位のために用いられる単一バイトであるが、はるかにより広範囲を有する）平均命令長を低減させる。このような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であるという前提に基づいており、従って、アドレスオフセットの冗長下位ビットは、符号化される必要がない。換言すると、変位ファクタフィールド５６２Ｂは、レガシｘ８６命令セットの８ビット変位を代替する。従って、変位ファクタフィールド５６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８×Ｎにオーバーロードされる唯一の例外はあるものの、ｘ８６命令セットの８ビット変位と同じ態様で符号化される（ＭｏｄＲＭ／ＳＩＢ符号化ルールに変更はない）。換言すると、（バイト単位のアドレスオフセットを得るために、変位をメモリオペランドのサイズによりスケーリングする必要がある）ハードウェアによる変位値の解釈のみを除いて、複数の符号化ルール又は符号化長に変更はない。即値フィールド５７２は、前述されたように動作する。
【０１０２】
［フルオペコードフィールド］
図６Ｂは、本開示の一実施形態に係るフルオペコードフィールド５７４を形成する特定ベクトル向け命令フォーマット６００の複数のフィールドを示すブロック図である。具体的には、フルオペコードフィールド５７４は、フォーマットフィールド５４０、ベースオペレーションフィールド５４２、及びデータエレメント幅（Ｗ）フィールド５６４を含む。ベースオペレーションフィールド５４２は、プレフィクス符号化フィールド６２５、オペコードマップフィールド６１５、及びリアルオペコードフィールド６３０を含む。
【０１０３】
［レジスタインデックスフィールド］
図６Ｃは、本開示の一実施形態に係るレジスタインデックスフィールド５４４を形成する特定ベクトル向け命令フォーマット６００の複数のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド５４４は、ＲＥＸフィールド６０５、ＲＥＸ'フィールド６１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド６４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド６４６、ＶＶＶＶフィールド６２０、ｘｘｘフィールド６５４、及びｂｂｂフィールド６５６を含む。
【０１０４】
［増加オペレーションフィールド］
図６Ｄは、本開示の一実施形態に係る増加オペレーションフィールド５５０を形成する特定ベクトル向け命令フォーマット６００の複数のフィールドを示すブロック図である。クラス（Ｕ）フィールド５６８が０を含む場合、これはＥＶＥＸ．Ｕ０（クラスＡ５６８Ａ）を意味し、１を含む場合、これはＥＶＥＸ．Ｕ１（クラスＢ５６８Ｂ）を意味する。Ｕ＝０、かつＭＯＤフィールド６４２が（非メモリアクセスオペレーションを意味する）１１を含む場合、アルファフィールド５５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、ｒｓフィールド５５２Ａと解釈される。ｒｓフィールド５５２Ａが１（ラウンド５５２Ａ．１）を含む場合、ベータフィールド５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ラウンド制御フィールド５５４Ａと解釈される。ラウンド制御フィールド５５４Ａは、１ビットのＳＡＥフィールド５５６及び２ビットのラウンドオペレーションフィールド５５８を含む。ｒｓフィールド５５２Ａが０（データ変換５５２Ａ．２）を含む場合、ベータフィールド５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットのデータ変換フィールド５５４Ｂと解釈される。Ｕ＝０、かつＭＯＤフィールド６４２が００、０１、又は１０（メモリアクセスオペレーションを意味する）を含む場合、アルファフィールド５５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、エビクションヒント（ＥＨ）フィールド５５２Ｂと解釈され、ベータフィールド５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、３ビットデータ操作フィールド５５４Ｃと解釈される。
【０１０５】
Ｕ＝１の場合、アルファフィールド５５２（ＥＶＥＸバイト３、ビット［７］−ＥＨ）は、書き込みマスク制御（Ｚ）フィールド５５２Ｃと解釈される。Ｕ＝１、かつＭＯＤフィールド６４２が（非メモリアクセスオペレーションを意味する）１１を含む場合、ベータフィールド５５４の一部（ＥＶＥＸバイト３、ビット［４］−Ｓ０）は、ＲＬフィールド５５７Ａと解釈され、１（ラウンド５５７Ａ．１）を含む場合、ベータフィールド５５４の残り（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）は、ラウンドオペレーションフィールド５５９Ａと解釈され、ＲＬフィールド５５７Ａが０（ＶＳＩＺＥ５５７．Ａ２）を含む場合、ベータフィールド５５４の残り（ＥＶＥＸバイト３、ビット［６−５］−Ｓ２−１）は、ベクトル長フィールド５５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）と解釈される。Ｕ＝１、かつＭＯＤフィールド６４２が００、０１、又は１０（メモリアクセスオペレーションを意味する）を含む場合、ベータフィールド５５４（ＥＶＥＸバイト３、ビット［６：４］−ＳＳＳ）は、ベクトル長フィールド５５９Ｂ（ＥＶＥＸバイト３、ビット［６−５］−Ｌ１−０）及びブロードキャストフィールド５５７Ｂ（ＥＶＥＸバイト３、ビット［４］−Ｂ）と解釈される。
【０１０６】
［例示的なレジスタアーキテクチャ］
図７は、本開示の一実施形態に係るレジスタアーキテクチャ７００のブロック図である。示された実施形態には、５１２ビット幅の３２個のベクトルレジスタ７１０が存在する。これらのレジスタは、ｚｍｍ０からｚｍｍ３１と記載される。下位１６個のｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０−１６にオーバーレイされる。下位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０−１５の上にオーバーレイされる。特定ベクトル向け命令フォーマット６００は、以下の表に示されるように、これらのオーバーレイされたレジスタファイルにおいて動作する。
【表２】
0006456867.tif 000003
【０１０７】
換言すると、ベクトル長フィールド５５９Ｂは、最大長と１つ又は複数の他のより短い長さとの間で選択し、ここで、このようなより短い長さの各々は、先行の長さの半分の長さであり、ベクトル長フィールド５５９Ｂを有さない複数の命令のテンプレートは、最大ベクトル長において動作する。さらに、一実施形態において、特定ベクトル向け命令フォーマット６００の複数のクラスＢ命令テンプレートは、パック型又はスカラ単／倍精度浮動小数点データ及びパック型又はスカラ整数データにおいて動作する。複数のスカラオペレーションは、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタ内の最下位のデータエレメント位置で実行されるオペレーションである。より高位のデータエレメント位置は、命令の前のそれらと同じ状態のままに残される、又は実施形態に応じてゼロ書き込みが実行される。
【０１０８】
書き込みマスクレジスタ７１５：示された実施形態において、８個の書き込みマスクレジスタが存在し（ｋ０からｋ７）、各々のサイズは６４ビットである。代替的な実施形態において、書き込みマスクレジスタ７１５は、１６ビットサイズである。前述されたように、本開示の一実施形態において、ベクトルマスクレジスタｋ０は、書き込みマスクとして用いられることができない。通常ｋ０を示す符号化が、書き込みマスクのために用いられる場合、これは、ハードウェアに組み込まれる書き込みマスク０ｘＦＦＦＦを選択し、当該命令に対し、有効に書き込みマスキングを無効化する。
【０１０９】
汎用レジスタ７２５：示された実施形態において、複数のメモリオペランドにアドレスする既存の複数のｘ８６アドレス指定モードと共に用いられる１６個の６４ビット汎用レジスタが存在する。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、及びＲ８からＲ１５という名称で記載される。
【０１１０】
ＭＭＸパック型整数フラットレジスタファイル７５０がエイリアスされるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）７４５：示された実施形態において、ｘ８７スタックは、ｘ８７命令セット拡張を用いて３２／６４／８０ビット浮動小数点データに対してスカラ浮動小数点の複数のオペレーションを実行するために用いられる８エレメントスタックであり、複数のＭＭＸレジスタは、６４ビットパック型整数データに対して複数のオペレーションを実行し、ＭＭＸ及びＸＭＭレジスタの間で実行されるいくつかのオペレーションのための複数のオペランドを保持するために用いられる。
【０１１１】
本開示の複数の代替的な実施形態は、より広い又はより狭い複数のレジスタを用いてよい。さらに、本開示の複数の代替的な実施形態は、より多くの、より少ない、又は異なる複数のレジスタファイル及び複数のレジスタを用いてよい。
【０１１２】
［例示的なコアアーキテクチャ、プロセッサ、及びコンピュータアーキテクチャ］
複数のプロセッサコアは、異なる複数の目的に対して複数の異なる態様で実装されてよく、複数の異なるプロセッサで実装されてよい。例えば、このような複数のコアの実装は、１）汎用コンピューティング向けの汎用インオーダコア、２）汎用コンピューティング向けの高性能汎用アウトオブオーダコア、３）主にグラフィック及び／又は科学用途（スループット）コンピューティング向けの特定用途向けコアを含んでよい。複数の異なるプロセッサの実装は、１）汎用コンピューティング向けの１つ又は複数の汎用インオーダコア及び／又は汎用コンピューティング向けの１つ又は複数の汎用アウトオブオーダコアを含むＣＰＵ、並びに２）主にグラフィック及び／又は科学用途（スループット）向けの１つ又は複数の特定用途向けコアを含むコプロセッサを含んでよい。このような複数の異なるプロセッサは、複数の異なるコンピュータシステムアーキテクチャをもたらし、複数の異なるコンピュータシステムアーキテクチャは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージにおける別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、このようなコプロセッサは、場合によっては、集中画像表示及び／又は科学用途（スループット）ロジックのような特定用途向けロジック、又は特定用途向けコア等と称される）、及び４）同じダイ上に、説明されたＣＰＵ（場合によっては、アプリケーションコア又はアプリケーションプロセッサと称される）、上述されたコプロセッサ、及び追加的な機能性を含み得るシステムオンチップを含んでよい。複数の例示的なコアアーキテクチャが、次に説明され、次いで、例示的な複数のプロセッサ及びコンピュータアーキテクチャが説明される。
【０１１３】
［例示的なコアアーキテクチャ］
インオーダ及びアウトオブオーダコアのブロック図
図８Ａは、本開示の複数の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図８Ｂは、本開示の複数の実施形態に係るプロセッサに含まれるべきインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図８Ａ−Ｂにおける複数の実線のボックスは、インオーダパイプライン及びインオーダコアを示し、任意に追加された複数の破線のボックスは、レジスタリネーミング、アウトオブオーダ発行／実行パイプライン及びコアを示す。インオーダ態様はアウトオブオーダ態様のサブセットであるとして、アウトオブオーダ態様が説明される。
【０１１４】
図８Ａにおいて、プロセッサパイプライン８００が、フェッチステージ８０２、長さ復号ステージ８０４、復号ステージ８０６、配分ステージ８０８、リネーミングステージ８１０、スケジューリング（ディスパッチ又は発行としても知られる）ステージ８１２、レジスタ読み出し／メモリ読み出しステージ８１４、実行ステージ８１６、ライトバック／メモリ書き込みステージ８１８、例外処理ステージ８２２、及びコミットステージ８２４を含む。
【０１１５】
図８Ｂは、実行エンジンユニット８５０に結合されるフロントエンドユニット８３０を含むプロセッサコア８９０を示し、両方ともメモリユニット８７０に結合される。コア８９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、又はハイブリッドもしくは代替的な型のコアであってよい。さらに他の選択肢として、コア８９０は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティング画像処理ユニット（ＧＰＧＰＵ）コア、グラフィックコア等のような特定用途向けコアであってよい。
【０１１６】
フロントエンドユニット８３０は、命令キャッシュユニット８３４と結合される分岐予測ユニット８３２を含み、命令キャッシュユニット８３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）８３６と結合され、命令トランスレーションルックアサイドバッファ８３６は命令フェッチユニット８３８と結合され、命令フェッチユニット８３８は復号ユニット８４０と結合される。復号ユニット８４０（又はデコーダもしくはデコーダユニット）は、複数の命令（例えばマクロ命令）を復号し、１つ又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は元の命令から復号され、又は他の方法でこれを反映し、又はこれから派生した他の制御信号を、出力として生成してよい。復号ユニット８４０は、様々な異なるメカニズムを用いて実装されてよい。複数の適したメカニズムの複数の例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等を含む。一実施形態において、コア８９０は、複数の特定のマクロ命令に対するマイクロコードを（例えば、復号ユニット８４０、又は他の方法でフロントエンドユニット８３０内に）ストアする、マイクロコードＲＯＭ又は他の媒体を含む。復号ユニット８４０は、実行エンジンユニット８５０内のリネーミング／アロケータユニット８５２と結合される。
【０１１７】
実行エンジンユニット８５０は、リタイアメントユニット８５４及び１つ又は複数のスケジューラユニット８５６のセットと結合されるリネーミング／アロケータユニット８５２を含む。スケジューラユニット８５６は、複数のリザベーションステーション、中央命令ウィンドウ等を含む、任意の数の異なるスケジューラを表す。スケジューラユニット８５６は、物理レジスタファイルユニット８５８に結合される。複数の物理レジスタファイルユニット８５８の各々は、１つ又は複数の物理レジスタファイル、スカラ整数、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行される次の命令のアドレスである命令ポインタ）等のような１つ又は複数の異なるデータ型をストアする異なるものを表す。一実施形態において、物理レジスタファイルユニット８５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、及びスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、及び汎用レジスタを提供してよい。物理レジスタファイルユニット８５８は、リタイアメントユニット８５４にオーバラップされて、（例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いて、フューチャファイル、履歴バッファ、及びリタイアメントレジスタファイルを用いて、レジスタマップ及び複数のレジスタのプールを用いる等）レジスタリネーミング及びアウトオブオーダ実行が実装されてよい様々な態様を示す。リタイアメントユニット８５４及び物理レジスタファイルユニット８５８は、実行クラスタ８６０と結合される。実行クラスタ８６０は、１つ又は複数の実行ユニット８６２のセット及び１つ又は複数のメモリアクセスユニット８６４のセットを含む。実行ユニット８６２は、様々なオペレーション（例えば、シフト、加算、減算、乗算）を様々な型のデータ（例えば、スカラ浮動小数点、パック型整数、パック型浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行してよい。いくつかの実施形態は、複数の具体的な機能又は複数の機能の複数のセット専用の、多数の実行ユニットを含んでよいが、複数の他の実施形態は、１つだけの実行ユニット、又は、その全てで全ての機能を実行し得る複数の実行ユニットを含んでよい。スケジューラユニット８５６、物理レジスタファイルユニット８５８及び実行クラスタ８６０は、場合によっては複数として示されるが、その理由は、複数の特定の実施形態は、特定の複数の型のデータ／オペレーションに対して、複数の別個のパイプラインを形成するからである（例えば、各々がこれら自身のスケジューラユニット、物理レジスタファイルユニット及び／又は実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点／パック型整数／パック型浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、及び／又はメモリアクセスパイプラインであり、別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット８６４を有する複数の特定の実施形態が実装される）。複数の別個のパイプラインが使用される場合、これらのパイプラインのうちの１つ又は複数は、アウトオブオーダ発行／実行であり、残りはインオーダであってよいことも理解されたい。
【０１１８】
複数のメモリアクセスユニット８６４のセットは、メモリユニット８７０と結合される。メモリユニット８７０は、二次（Ｌ２）キャッシュユニット８７６と結合されるデータキャッシュユニット８７４と結合される、データＴＬＢユニット８７２を含む。例示的な一実施形態において、メモリアクセスユニット８６４は、ロードユニット、ストアアドレスユニット、及びストアデータユニットを含んでよく、それらの各々は、メモリユニット８７０内のデータＴＬＢユニット８７２に結合される。命令キャッシュユニット８３４は、メモリユニット８７０内の二次（Ｌ２）キャッシュユニット８７６とさらに結合される。Ｌ２キャッシュユニット８７６は、１つ又は複数の他のレベルのキャッシュと結合され、最終的にメインメモリと結合される。
【０１１９】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン８００を実装してよい。１）命令フェッチ８３８が、フェッチ及び長さ復号ステージ８０２及び８０４を実行する、２）復号ユニット８４０が、復号ステージ８０６を実行する、３）リネーミング／アロケータユニット８５２が、配分ステージ８０８及びリネーミングステージ８１０を実行する、４）スケジューラユニット８５６が、スケジューリングステージ８１２を実行する、５）物理レジスタファイルユニット８５８及びメモリユニット８７０が、レジスタ読み出し／メモリ読み出しステージ８１４を実行し、実行クラスタ８６０が、実行ステージ８１６を実行する、６）メモリユニット８７０及び物理レジスタファイルユニット８５８が、ライトバック／メモリ書き込みステージ８１８を実行する、７）複数の様々なユニットが、例外処理ステージ８２２に関わってよく、８）リタイアメントユニット８５４及び物理レジスタファイルユニット８５８が、コミットステージ８２４を実行する。
【０１２０】
コア８９０は、本明細書において説明される命令を含む１つ又は複数の命令セット（例えば、（複数のより新たなバージョンを伴う、いくつかの拡張が追加された）ｘ８６命令セット、カリフォルニア州サニーベールのＭＩＰＳテクノロジーズのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭホールディングスの（ＮＥＯＮのような任意のさらなる拡張を有する）ＡＲＭ命令セット）をサポートしてよい。一実施形態において、コア８９０は、パック型データ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートするロジックを含み、これによって、多くのマルチメディアアプリケーションによって用いられる複数のオペレーションが、パック型データを用いて実行されることが可能となる。
【０１２１】
コアは、マルチスレッディング（複数のオペレーション又は複数のスレッドの２つ又はそれより多くの並列セットを実行すること）をサポートしてよく、時分割マルチスレッディング、同時マルチスレッディング（単一の物理コアが複数のスレッドの各々に対して論理的コアを提供することにより、物理コアが同時マルチスレッディングを実行すること）又はこれらの組み合わせ（例えば、時分割フェッチ及び復号化、その後、インテル（登録商標）ハイパースレッディングテクノロジーなどでの同時マルチスレッディング）を含む様々な態様で、マルチスレッディングを実行してよいことを理解されたい。
【０１２２】
アウトオブオーダ実行との関連で、レジスタリネーミングを説明するが、レジスタリネーミングは、インオーダアーキテクチャで用いられてよいことを理解されたい。プロセッサの示された実施形態は、別個の命令ならびにデータキャッシュユニット８３４／８７４及び共有Ｌ２キャッシュユニット８７６をさらに含むが、複数の代替的な実施形態は、命令及びデータの両方のための、例えば、一次（Ｌ１）内部キャッシュのような単一の内部キャッシュ、又は複数のレベルの内部キャッシュを有してよい。いくつかの実施形態において、システムは内部キャッシュと、コア及び／又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代わりに、全てのキャッシュはコア及び／又はプロセッサの外部にあってよい。
【０１２３】
［具体的な例示的インオーダコアアーキテクチャ］
図９Ａ−Ｂは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、ここで、コアは、チップ内のいくつかの論理ブロック（同じ型及び／又は異なる型の他の複数のコアを含む）の中の１つであってよい。複数の論理ブロックは、用途に応じて、高帯域幅の相互接続ネットワーク（例えば、リングネットワーク）を通して、いくつかの固定機能ロジック、メモリＩ／Ｏインタフェース、及び他の必要なＩ／Ｏロジックと通信を行う。
【０１２４】
図９Ａは、本開示の複数の実施形態に係る単一のプロセッサコアを、そのオンダイ相互接続ネットワーク９０２への接続及びその二次（Ｌ２）キャッシュのローカルサブセット９０４と共に示すブロック図である。一実施形態において、命令復号ユニット９００は、パック型データ命令セット拡張を有するｘ８６命令セットをサポートする。Ｌ１キャッシュ９０６が、スカラ及びベクトルユニットに入るキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態において、（設計の単純化のために）スカラユニット９０８及びベクトルユニット９１０は、別個のレジスタセット（それぞれ、複数のスカラレジスタ９１２及び複数のベクトルレジスタ９１４）を用い、これらの間で転送されるデータは、一次（Ｌ１）キャッシュ９０６のメモリに書き込まれてから再読み出しされるが、本開示の複数の代替的な実施形態は、異なるアプローチ（例えば、単一のレジスタセットを用いる、又は書き込み及び再読み出しを行うことなく、２つのレジスタファイル間におけるデータ転送を可能とする通信パスを含む）を用いてよい。
【０１２５】
Ｌ２キャッシュのローカルサブセット９０４は、プロセッサコア毎に１つの別個のローカルサブセットに分割されるグローバルＬ２キャッシュの一部である。各プロセッサコアは、Ｌ２キャッシュのそれ自身のローカルサブセット９０４へのダイレクトアクセスパスを有する。プロセッサコアによって読み出されたデータは、そのＬ２キャッシュサブセット９０４内にストアされ、他のプロセッサコアによるこれら自身のローカルＬ２キャッシュサブセットへのアクセスと並列に、迅速なアクセスが可能である。プロセッサコアによって書き込まれたデータは、必要に応じて、それ自身のＬ２キャッシュサブセット９０４にストアされ、他のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを保証する。リングネットワークは、双方向性であり、複数のプロセッサコア、Ｌ２キャッシュ、及び他の論理ブロックのようなエージェントが、チップ内で互いに通信を行うことを可能にする。各リングデータパスは、各方向につき１０１２ビット幅である。
【０１２６】
図９Ｂは、本開示の複数の実施形態に係る図９Ａにおけるプロセッサコアの一部の拡大図である。図９Ｂは、Ｌ１キャッシュ９０６の一部であるＬ１データキャッシュ９０６Ａ、ならびにベクトルユニット９１０及び複数のベクトルレジスタ９１４に関するさらなる詳細を含む。具体的には、ベクトルユニット９１０は、整数、単精度浮動小数、及び倍精度浮動小数命令のうちの１つ又は複数を実行する、１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ９２８参照）である。ＶＰＵは、スウィズルユニット９２０によるレジスタ入力のスウィズル、数値変換ユニット９２２Ａ−Ｂによる数値変換、及び複製ユニット９２４によるメモリ入力に対する複製をサポートする。書き込みマスクレジスタ９２６は、結果的な複数のベクトル書き込みの叙述を可能とする。
【０１２７】
図１０は、本開示の複数の実施形態に係るプロセッサ１０００のブロック図であり、当該プロセッサは、１つより多くのコアを有してよく、集積メモリコントローラを有してよく、集中画像表示を有してよい。図１０における複数の実線のボックスは、単一のコア１００２Ａ、システムエージェント１０１０、１つ又は複数のバスコントローラユニット１０１６のセットを備えるプロセッサ１０００を示し、任意に追加された複数の破線のボックスは、複数のコア１００２Ａ−Ｎ、システムエージェントユニット１０１０内の１つ又は複数の集積メモリコントローラユニット１０１４のセット、及び特定用途向けロジック１００８を備える代替的なプロセッサ１０００を示す。
【０１２８】
従って、プロセッサ１０００の複数の異なる実装は、１）（１つ又は複数のコアを含み得る）集中画像表示及び／又は科学用途（スループット）ロジックである特定用途向けロジック１００８、及び１つ又は複数の汎用コア（例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら２つの組み合わせ）である複数のコア１００２Ａ−Ｎを有するＣＰＵ、２）主にグラフィック及び／又は科学用途（スループット）向けの多数の特定用途向けコアである複数のコア１００２Ａ−Ｎを有するコプロセッサ、及び３）多数の汎用インオーダコアである複数のコア１００２Ａ−Ｎを有するコプロセッサを含んでよい。従って、プロセッサ１０００は、汎用プロセッサ、コプロセッサ、又は例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ（汎用画像処理ユニット）、ハイスループット多集積コア（ＭＩＣ）コプロセッサ（３０又はそれより多くのコアを含む）、組み込みプロセッサ等のような特定用途向けプロセッサであってよい。プロセッサは、１つ又は複数のチップ上に実装されてよい。プロセッサ１０００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、又はＮＭＯＳのような、多数の処理技術のいずれかを用いた１つ又は複数の基板の一部であってよく、及び／又はその上に実装されてよい。
【０１２９】
メモリ階層は、複数のコア内における１つ又は複数のレベルのキャッシュ、１つ又は複数の共有キャッシュユニット１００６のセット、及び複数の集積メモリコントローラユニット１０１４のセットに結合される外部メモリ（不図示）を含む。共有キャッシュユニット１００６のセットは、二次（Ｌ２）、三次（Ｌ３）、四次（Ｌ４）、又は他のレベルのキャッシュ等のような１つ又は複数の中レベルキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、及び／又はこれらの組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット１０１２が、集中画像表示ロジック１００８、複数の共有キャッシュユニット１００６のセット、及びシステムエージェントユニット１０１０／集積メモリコントローラユニット１０１４を相互接続するが、複数の代替的な実施形態は、このようなユニットを相互接続する任意の数の周知技術を用いてよい。一実施形態において、１つ又は複数のキャッシュユニット１００６とコア１００２−Ａ−Ｎとの間において、コヒーレンシが維持される。
【０１３０】
いくつかの実施形態において、コア１００２Ａ−Ｎのうちの１つ又は複数は、マルチスレッディングが可能である。システムエージェント１０１０は、コア１００２Ａ−Ｎを調整及び動作させるこれらのコンポーネントを含む。システムエージェントユニット１０１０は、例えば、電力制御ユニット（ＰＣＵ）及びディスプレイユニットを含んでよい。ＰＣＵは、コア１００２Ａ−Ｎ及び集中画像表示ロジック１００８の電力状態の調整に必要なロジック及び複数のコンポーネントであってよく、又はこれらを含んでよい。ディスプレイユニットは、１つ又は複数の外部接続されたディスプレイを駆動するためのものである。
【０１３１】
コア１００２Ａ−Ｎは、アーキテクチャ命令セットに関してホモジニアス又はヘテロジニアスであってよく、すなわち、コア１００２Ａ−Ｎのうち２つ又はそれより多くは、同じ命令セットを実行可能であってよく、他のものは、当該命令セット又は異なる命令セットのサブセットのみを実行可能であってよい。
【０１３２】
［例示的なコンピュータアーキテクチャ］
図１１−１４は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルド型ＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、及び様々な他の電子デバイスのための当技術分野において公知の他の複数のシステム設計及び構成も、適している。概して、本明細書において開示されるように、プロセッサ及び／又は他の実行ロジックを組み込むことが可能な多種多様なシステム又は電子デバイスが、概して適している。
【０１３３】
ここで図１１を参照すると、本開示の一実施形態に係るシステム１１００のブロック図が示される。システム１１００は、コントローラハブ１１２０に結合される１つ又は複数のプロセッサ１１１０、１１１５を含んでよい。一実施形態において、コントローラハブ１１２０は、グラフィックメモリコントローラハブ（ＧＭＣＨ）１１９０及び入力／出力ハブ（ＩＯＨ）１１５０（複数の別個のチップ上にあってよい）を含む。ＧＭＣＨ１１９０は、メモリ１１４０及びコプロセッサ１１４５が結合される複数のメモリ及びグラフィックコントローラを含む。ＩＯＨ１１５０は、複数の入力／出力（Ｉ／Ｏ）デバイス１１６０をＧＭＣＨ１１９０に結合する。代わりに、メモリ及びグラフィックコントローラの一方又は両方は、（本明細書において説明されるように）プロセッサ内で集積され、メモリ１１４０及びコプロセッサ１１４５は、プロセッサ１１１０と、ＩＯＨ１１５０を有する単一のチップ内のコントローラハブ１１２０とに直接結合される。メモリ１１４０は、スイッチ制御モジュール１１４０Ａ（及び／又はデータハザード解消モジュール）を含んでよく、これにより、例えば、実行された場合に、プロセッサに本開示の任意の方法を実行させるコードをストアする。
【０１３４】
複数の追加のプロセッサ１１１５が任意の性質であることが、図１１において、破線で示される。各プロセッサ１１１０、１１１５は、本明細書において説明される処理コアのうちの１つ又は複数を含んでよく、プロセッサ１０００の何らかのバージョンであってよい。
【０１３５】
メモリ１１４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）又はこれら２つの組み合わせであってよい。少なくとも１つの実施形態に対して、コントローラハブ１１２０は、フロントサイドバス（ＦＳＢ）のようなマルチドロップバス、クイックパスインタコネクト（ＱＰＩ）のようなポイントツーポイントインタフェース、又は同様の接続部１１９５を介して、プロセッサ１１１０、１１１５と通信を行う。
【０１３６】
一実施形態において、コプロセッサ１１４５は、例えば、ハイスループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような特定用途向けプロセッサである。一実施形態において、コントローラハブ１１２０は、集中画像表示アクセラレータを含んでよい。
【０１３７】
物理リソース１１１０、１１１５の間には、アーキテクチャ上、マイクロアーキテクチャ上、熱的、電力消費等の特性を含む利点の様々な基準に関して、様々な相違が存在し得る。
【０１３８】
一実施形態において、プロセッサ１１１０は、一般的な型の複数のデータ処理オペレーションを制御する複数の命令を実行する。複数のコプロセッサ命令が、複数の命令内に組み込まれてよい。プロセッサ１１１０は、これらのコプロセッサ命令を、取り付けられたコプロセッサ１１４５によって実行されるべき型のものであると認識する。従って、プロセッサ１１１０は、コプロセッサバス又は他のインタコネクト上において、これらのコプロセッサ命令（又は複数のコプロセッサ命令を表す制御信号）を、コプロセッサ１１４５に発行する。コプロセッサ１１４５は、複数のコプロセッサ命令を受け付け、受信されたコプロセッサ命令を実行する。
【０１３９】
ここで図１２を参照すると、本開示の実施形態に係る第１のより具体的な例示的システム１２００のブロック図が示される。図１２に示されるように、マルチプロセッサシステム１２００は、ポイントツーポイントインタコネクトシステムであり、ポイントツーポイントインタコネクト１２５０を介して結合される第１のプロセッサ１２７０及び第２のプロセッサ１２８０を含む。プロセッサ１２７０及び１２８０の各々は、プロセッサ１０００の何らかのバージョンであってよい。本開示の一実施形態において、プロセッサ１２７０及び１２８０は、それぞれ、プロセッサ１１１０及び１１１５であり、コプロセッサ１２３８は、コプロセッサ１１４５である。他の実施形態において、プロセッサ１２７０及び１２８０は、それぞれ、プロセッサ１１１０及びコプロセッサ１１４５である。
【０１４０】
プロセッサ１２７０及び１２８０は、それぞれ、集積メモリコントローラ（ＩＭＣ）ユニット１２７２及び１２８２を含むものとして示される。プロセッサ１２７０は、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース１２７６及び１２７８をさらに含み、同様に、第２のプロセッサ１２８０は、Ｐ−Ｐインタフェース１２８６及び１２８８を含む。プロセッサ１２７０、１２８０は、Ｐ−Ｐインタフェース回路１２７８、１２８８を用いて、ポイントツーポイント（Ｐ−Ｐ）インタフェース１２５０を介して情報を交換してよい。図１２に示されるように、ＩＭＣ１２７２及び１２８２は、プロセッサをそれぞれのメモリ、すなわち、メモリ１２３２及びメモリ１２３４に結合し、これらは、それぞれのプロセッサにローカルに取り付けされたメインメモリの一部であってよい。
【０１４１】
プロセッサ１２７０、１２８０は、各々、ポイントツーポイントインタフェース回路１２７６、１２９４、１２８６、１２９８を用いて、個々のＰ−Ｐインタフェース１２５２、１２５４を介してチップセット１２９０と情報を交換してよい。チップセット１２９０は、任意に、高性能インタフェース１２３９を介して、コプロセッサ１２３８と情報を交換してよい。一実施形態において、コプロセッサ１２３８は、例えば、ハイスループットＭＩＣプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、ＧＰＧＰＵ、組み込みプロセッサ等のような特定用途向けプロセッサである。
【０１４２】
共有キャッシュ（不図示）は、いずれかのプロセッサに含まれてよく、又は両方のプロセッサの外部にあってよく、さらに、Ｐ−Ｐ相互接続を介して複数のプロセッサと接続されてよく、これにより、プロセッサが低電力モードに置かれた場合に、いずれか又は両方のプロセッサのローカルキャッシュ情報が、共有キャッシュ内にストアされ得る。
【０１４３】
チップセット１２９０は、インタフェース１２９６を介して第１のバス１２１６に結合されてよい。一実施形態において、第１のバス１２１６は、ペリフェラルコンポーネントインタコネクト（ＰＣＩ）バス、もしくはＰＣＩエクスプレスバス又は他の第３世代Ｉ／Ｏ相互接続バスのようなバスであってよいが、本開示の範囲はこれらのバスに限定されるものではない。
【０１４４】
図１２に示されるように、様々なＩ／Ｏデバイス１２１４は、第１のバス１２１６を第２のバス１２２０に結合するバスブリッジ１２１８と共に、第１のバス１２１６に結合されてよい。一実施形態において、コプロセッサ、ハイスループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィックアクセラレータ又はデジタル信号処理（ＤＳＰ）ユニットのような）、フィールドプログラマブルゲートアレイ、又は任意の他のプロセッサのような１つ又は複数の追加のプロセッサ１２１５が、第１のバス１２１６に結合される。一実施形態において、第２のバス１２２０は、ローピンカウント（ＬＰＣ）バスであってよい。一実施形態において、例えば、キーボード及び／又はマウス１２２２、通信デバイス１２２７、ならびに命令／コード及びデータ１２３０を含んでよいディスクドライブ又は他の大容量ストレージデバイスのようなストレージユニット１２２８を含む様々なデバイスが、第２のバス１２２０に結合されてよい。さらに、オーディオＩ／Ｏ１２２４は、第２のバス１２２０に結合されてよい。なお、他の複数のアーキテクチャが、適用可能である。例えば、図１２のポイントツーポイントアーキテクチャの代わりに、システムがマルチドロップバス又は他のこのようなアーキテクチャを実装してよい。
【０１４５】
ここで図１３を参照すると、本開示の実施形態に係る第２のより具体的な例示的システム１３００のブロック図が示される。図１２及び１３において、複数の同様の要素は同様の参照符号を有し、図１２の複数の特定の態様は、図１３の他の複数の態様への妨げとならないよう、図１３から省略されている。
【０１４６】
図１３は、プロセッサ１２７０、１２８０が集積メモリ及びＩ／Ｏ制御ロジック（「ＣＬ」）１２７２及び１２８２をそれぞれ含んでよいことを示す。従って、ＣＬ１２７２、１２８２は、複数の集積メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図１３は、メモリ１２３２、１２３４がＣＬ１２７２、１２８２に結合されることのみならず、Ｉ／Ｏデバイス１３１４もが制御ロジック１２７２、１２８２に結合されることをも示す。レガシＩ／Ｏデバイス１３１５は、チップセット１２９０に結合される。
【０１４７】
ここで図１４を参照すると、本開示の実施形態に係るＳｏＣ１４００のブロック図が示される。図１０において、複数の同様の要素は、同様の参照符号を有する。また、複数の破線のボックスは、より高度な複数のＳｏＣにおいて、任意の機能である。図１４において、相互接続ユニット１４０２は、１つ又は複数のコア２０２Ａ−Ｎのセット、及び共有キャッシュユニット１００６を含むアプリケーションプロセッサ１４１０、システムエージェントユニット１０１０、バスコントローラユニット１０１６、集積メモリコントローラユニット１０１４、集中画像表示ロジック、画像プロセッサ、オーディオプロセッサ、及びビデオプロセッサを含み得る１つ又は複数のコプロセッサ１４２０のセット、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１４３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット１４３２、及び１つ又は複数の外部ディスプレイと結合するためのディスプレイユニット１４４０と結合されている。一実施形態において、コプロセッサ１４２０は、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、ハイスループットＭＩＣプロセッサ、組み込みプロセッサ等のような特定用途向けプロセッサを含む。
【０１４８】
本明細書に開示される（例えば、複数のメカニズムの）実施形態は、ハードウェア、ソフトウェア、ファームウェア、又はこのような複数の実装アプローチの組み合わせで実装されてよい。本開示の複数の実施形態は、少なくとも１つのプロセッサ、（揮発性及び不揮発性メモリ及び／又は複数のストレージエレメントを含む）ストレージシステム、少なくとも１つの入力デバイス及び少なくとも１つの出力デバイスを備える複数のプログラマブルシステム上で実行する複数のコンピュータプログラム又はプログラムコードとして実装されてよい。
【０１４９】
図１２に示されるコード１２３０のようなプログラムコードは、本明細書で説明される複数の機能を実行し、出力情報を生成する複数の入力命令に適用されてよい。出力情報は、公知の態様で、１つ又は複数の出力デバイスに適用されてよい。この用途の複数の目的のために、処理システムは、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、又はマイクロプロセッサのようなプロセッサを有する任意のシステムを含む。
【０１５０】
プログラムコードは、処理システムと通信を行うべく、高水準の手順型又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、所望の場合には、アセンブリ又は機械言語で実装されてもよい。実際には、本明細書で説明される複数のメカニズムの範囲は、いずれの特定のプログラミング言語にも限定されるものではない。いずれの場合であっても、言語は、コンパイラ型又はインタプリタ型言語であってよい。
【０１５１】
少なくとも１つの実施形態の１つ又は複数の態様は、プロセッサ内の様々なロジックを表す機械可読媒体にストアされた代表的な複数の命令によって実装されてよく、これらは、機械によって読み出された場合に、機械にロジックを製造させることにより、本明細書で説明される複数の技術を実行する。「ＩＰコア」として公知であるこのような複数の表現は、有形の機械可読媒体にストアされてよく、様々な顧客、又は実際にロジック又はプロセッサを作成する複数の製造機械にロードする複数の製造設備に供給されてよい。
【０１５２】
このような機械可読記憶媒体は、ハードディスク、フロッピ（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、書き換え可能コンパクトディスク（ＣＤ−ＲＷ）、及び光磁気ディスクを含む任意の他のタイプのディスクのような記憶媒体、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）のようなランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、及び相変化メモリ（ＰＣＭ）のような半導体デバイス、磁気もしくは光カード、又は複数の電子的命令のストアに適した任意の他のタイプの媒体を含む、機械又はデバイスにより製造又は形成される、非一時的で有形の複数の構成の物品を含んでよいが、これらに限定されるものではない。
【０１５３】
従って、本開示の複数の実施形態は、複数の命令を含み、又は本明細書で説明される複数の構造、複数の回路、複数の装置、複数のプロセッサ及び／又はシステムの複数の機能を定義するハードウェア記述言語（ＨＤＬ）のような設計データを含む、非一時的な有形の機械可読媒体をさらに含む。このような複数の実施形態は、プログラム製品と称されることもある。
【０１５４】
［エミュレート（バイナリ変換、コードモーフィング等を含む）］
いくつかの場合において、命令コンバータは、ソース命令セットからターゲット命令セットに命令を変換するために用いられてよい。例えば、命令コンバータは、命令を、コアにより処理されるべき他の１つ又は複数の他の命令にトランスレート（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて）、モーフィング、エミュレート、又は他の方法で変換してよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、又はこれらの組み合わせで実装されてよい。命令コンバータは、プロセッサ上にあってよく、プロセッサ外にあってよく、又は部分的にプロセッサ上かつ部分的にプロセッサ外にあってよい。
【０１５５】
図１５は、本開示の複数の実施形態に係るソース命令セットの複数のバイナリ命令をターゲット命令セットの複数のバイナリ命令に変換するソフトウェア命令コンバータの使用を対比したブロック図である。示された実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代わりに、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、又はこれらの様々な組み合わせで実装されてよい。図１５は、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１５１６によってネイティブで実行可能なｘ８６バイナリコード１５０６を生成するために、高水準言語１５０２のプログラムが、ｘ８６コンパイラ１５０４を用いてコンパイルされてよいことを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ１５１６は、少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサと実質的に同じ結果を実現すべく、（１）インテルｘ８６命令セットコアの命令セットの大部分、もしくは（２）少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサ上で動作することをターゲットとしたアプリケーション又は他のソフトウェアのオブジェクトコードバージョンを互換的に実行するか、又は他の方法で処理することによって、少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサと実質的に同じ機能を実行可能な任意のプロセッサを表す。ｘ８６コンパイラ１５０４は、さらなるリンク処理を用いて、又は用いることなく、少なくとも１つのｘ８６命令セットコアを有するプロセッサ１５１６上で実行可能なｘ８６バイナリコード１５０６（例えば、オブジェクトコード）を生成するように動作可能なコンパイラを表す。同様に、図１５は、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ１５１４（例えば、カリフォルニア州のサニーベールにあるＭＩＰＳテクノロジーズのＭＩＰＳ命令セットを実行する及び／又はカリフォルニア州のサニーベールのＡＲＭホールディングスのＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によってネイティブで実行可能な代替的な命令セットバイナリコード１５１０を生成すべく、代替的な命令セットコンパイラ１５０８を用いてコンパイル可能な高水準言語１５０２のプログラムを示す。命令コンバータ１５１２は、ｘ８６バイナリコード１５０６を、ｘ８６命令セットコアを有さないプロセッサ１５１４によってネイティブで実行可能なコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード１５１０と同じである可能性が低い。なぜなら、この変換が可能な命令コンバータは、製造が難しいからである。しかしながら、変換されたコードは、一般的なオペレーションを実現し、代替的な命令セットからの複数の命令で構成される。従って、命令コンバータ１５１２は、エミュレート、シミュレーション又は任意の他の処理を通じて、ｘ８６命令セットプロセッサ又はコアを有さないプロセッサ又は他の電子デバイスがｘ８６バイナリコード１５０６を実行することを可能にする、ソフトウェア、ファームウェア、ハードウェア、又はこれらの組み合わせを表す。
【図１】
0006456867.tif 000004
【図２Ａ】
0006456867.tif 000005
【図２Ｂ】
0006456867.tif 000006
【図３】
0006456867.tif 000007
【図４】
0006456867.tif 000008
【図５Ａ】
0006456867.tif 000009
【図５Ｂ】
0006456867.tif 000010
【図６Ａ】
0006456867.tif 000011
【図６Ｂ】
0006456867.tif 000012
【図６Ｃ】
0006456867.tif 000013
【図６Ｄ】
0006456867.tif 000014
【図７】
0006456867.tif 000015
【図８Ａ】
0006456867.tif 000016
【図８Ｂ】
0006456867.tif 000017
【図９Ａ】
0006456867.tif 000018
【図９Ｂ】
0006456867.tif 000019
【図１０】
0006456867.tif 000020
【図１１】
0006456867.tif 000021
【図１２】
0006456867.tif 000022
【図１３】
0006456867.tif 000023
【図１４】
0006456867.tif 000024
【図１５】
0006456867.tif 000025