プレディケーションの現行の実装は、通例、プレディケートレジスタを在来のレジスタファイルに類似する仕方で実装する。そのような実装においては、プレディケートレジスタは、論理的レジスタ指定子を用いる命令によって明示的に特定される。論理的レジスタ指定子は、レジスタエイリアステーブル(RAT(register alias table))に類似する構造を用いるプロセッサパイプラインのリネーミングステージで物理的レジスタ指定子に変換される。特定の論理的レジスタにより保持される物理的レジスタの解放は、論理的レジスタがオーバーライトされるときに起こる。従って、プレディケートレジスタファイルの実装は、汎用レジスタの実装と同様の困難を有する。
数個の実施形態において、軽量のスタックベースのプレディケーションデザインが開示される。このスタックベースのデザインは、アーキテクチャ的およびマイクロアーキテクチャ的構造体にあまり影響を及ぼさずに可能にされ得る。マイクロアーキテクチャ的実装(例えば、レジスタリネーミング、レジスタファイル実装)は、在来のプレディケーションデザインと比べて少ないダイ面積および少ない稼働電力を可能にする。マイクロアーキテクチャ的実装は、一実施形態において分岐予測性能を高める命令パイプラインに対する変更をも可能にする。
以下でプロセッサコアアーキテクチャが記載され、次に、本明細書に記載される実施形態による典型的なプレディケートレジスタおよび命令実装を有する典型的プロセッサおよびコンピュータアーキテクチャが記載される。以下に記載される本発明の実施形態の完全な理解を提供するために、多数の具体的細部が明らかにされる。しかし、それらの実施形態がこれらの具体的細部のうちの幾つかを持たずに実施され得ることは当業者にとっては明らかであろう。他の例において、種々の実施形態の基礎を成す原理を不明確にすることを避けるために、よく知られている構造およびデバイスはブロック図の形で示される。
本明細書に記載される実施形態は、ハードウェア/ソフトウェア協調設計されるプロセッサにおいて実装され得る。
プロセッサコアは様々な目的で、様々なプロセッサにおいて、様々な仕方で実装され得る。例えば、そのようなコアの実装は、1)汎用コンピューティング向けの汎用インオーダーコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダーコア、3)主としてグラフィクスおよび/または科学(スループット)コンピューティング向けの専用コアを含み得る。
プロセッサは、シングルプロセッサコアデザインまたはマルチプルプロセッサコアデザインを用いて実装され得る。プロセッサの中の複数のプロセッサコアは、アーキテクチャ命令セットに関して同種または異種であり得る。様々なプロセッサの実装は、1)汎用コンピューティング向けの1つまたは複数の汎用インオーダーコアおよび/または汎用コンピューティング向けの1つまたは複数の汎用アウトオブオーダーコアを含むCPU、および、2)主としてグラフィクスおよび/または科学向けの1つまたは複数の専用コア(例えば、多数の統合されたコアプロセッサ)を含むコプロセッサを含み得る。そのような様々なプロセッサは様々なコンピュータシステムアーキテクチャをもたらし、それらのコンピュータシステムアーキテクチャは、1)CPUとは別のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、時には、統合グラフィクスおよび/または科学(スループット)論理などの専用論理、または専用コアと称される)、および、4)記載されたCPU(時には1つもしくは複数のアプリケーションコアまたは1つもしくは複数のアプリケーションプロセッサと称される)、上記のコプロセッサ、および追加の機能性を同じダイ上に含み得るシステムオンチップを含み得る。
典型的コアアーキテクチャインオーダーおよびアウトオブオーダーコアのブロック図 図1Aは、一実施形態による、典型的なインオーダーパイプラインおよび典型的なレジスタリネーミングアウトオブオーダー発行/実行パイプラインを示すブロック図である。図1Bは、一実施形態によるプロセッサに含まれるべきインオーダーアーキテクチャコアの典型的実施態様と典型的なレジスタリネーミング、アウトオブオーダー発行/実行アーキテクチャコアとの両方を示すブロック図である。図1A〜1Bの実線のボックスはインオーダーパイプラインおよびインオーダーコアを示し、任意に付け加えられた破線ボックスはレジスタリネーミング、アウトオブオーダー発行/実行パイプラインおよびコアを示す。インオーダーアスペクトはアウトオブオーダーアスペクトの部分集合であるものとして、アウトオブオーダーアスペクトが記載されるであろう。
図1Aにおいて、プロセッサパイプライン100は、フェッチステージ102、長さデコードステージ104、デコードステージ106、アロケーションステージ108、リネーミングステージ110、スケジューリング(ディスパッチまたは発行としても知られている)ステージ112、レジスタリード/メモリリードステージ114、実行ステージ116、ライトバック/メモリライトステージ118、例外処理ステージ122、およびコミットステージ124を含む。
図1Bは実行エンジンユニット150に結合されたフロントエンドユニット130を含むプロセッサコア190を示し、両者はメモリユニット170に結合されている。コア190は、縮小命令セットコンピューティング(RISC(reduced instruction set computing))コア、複合命令セットコンピューティング(CISC(complex instruction set computing))コア、超長命令語(VLIW(very long instruction word))コア、またはハイブリッドもしくは代替コアタイプであり得る。別の選択肢として、コア190は、例えば、ネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィクス処理ユニット(GPGPU(general purpose computing graphics processing unit))コア、グラフィクスコア、などの専用コアであり得る。
フロントエンドユニット130は命令キャッシュユニット134に結合されている分岐予測ユニット132を含み、命令キャッシュユニット134は命令トランスレーションルックアサイドバッファ(TLB(translation lookaside buffer))136に結合され、TLB136は命令フェッチユニット138に結合され、命令フェッチユニット138はデコードユニット140に結合されている。デコードユニット140(またはデコーダ)は、命令をデコードし、出力として、原命令からデコードされた、あるいは原命令を別様に反映する、あるいは原命令から導出された、1つまたは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を生成することができる。デコードユニット140は、種々の異なるメカニズムを用いて実装され得る。適切なメカニズムの例は、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA(programmable logic array))、マイクロコード読み出し専用メモリ(ROM(read only memory))、などを含むが、これらに限定されない。一実施形態では、コア190は、或るマイクロ命令のためのマイクロコードを格納するマイクロコードROMまたは他の媒体を(例えば、デコードユニット140内に、あるいはフロントエンドユニット130内の他の場所に)含む。デコードユニット140は、実行エンジンユニット150内のリネーム/アロケータユニット152に結合される。
実行エンジンユニット150は、リタイアメントユニット154とスケジューラユニット156のセットとに結合されたリネーム/アロケータユニット152を含む。スケジューラユニット156は、リザベーションステーション、中央命令ウィンドウなどを含む任意の数の様々なスケジューラを表す。スケジューラユニット156は、物理的レジスタファイルユニット158に結合されている。物理的レジスタファイルユニット158の各々は1つまたは複数の物理的レジスタファイルを表し、そのうちの異なるものは、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、次に実行されるべき命令のアドレスである命令ポインタ)などの、1つまたは複数の異なるデータタイプを格納する。一実施形態では、物理的レジスタファイルユニット158は、ベクトルレジスタユニット、ライトマスクレジスタユニット、およびスカラーレジスタユニットを含む。これらのレジスタユニットは、アーキテクチュラルベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理的レジスタファイルユニット158は、レジスタリネーミングおよびアウトオブオーダー実行を実装し得る種々の仕方(例えば、リオーダーバッファおよびリタイアメントレジスタファイルを用いる、フューチャーファイル、ヒストリーバッファ、およびリタイアメントレジスタファイルを用いる、レジスタマップおよび予備のレジスタを用いる、等々)を示すためにリタイアメントユニット154と一部重ねられている。リタイアメントユニット154および物理的レジスタファイルユニット158は、実行クラスタ160に結合されている。実行クラスタ160は、実行ユニット162のセットとメモリアクセスユニット164のセットとを含む。実行ユニット162は、種々のタイプのデータ(例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して種々の演算(例えば、シフト、加算、引き算、掛け算)を行うことができる。幾つかの実施形態は特定の機能または機能のセットに専用の多数の実行ユニットを含み得るが、他の実施形態は、唯一の実行ユニット、あるいはその全てが全ての機能を実行する複数の実行ユニットを含むことができる。スケジューラユニット156、物理的レジスタファイルユニット158、および実行クラスタ160は、一定の実施形態が一定のタイプのデータ/操作のために別々のパイプラインを作るので、複数である可能性があるとして示されている(例えば、それぞれが自分自身のスケジューラユニット、物理的レジスタファイルユニット、および/または実行クラスタを有するスカラー整数パイプライン、スカラー浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプラインおよび/またはメモリアクセスパイプライン − さらに別々のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタだけがメモリアクセスユニット164を有する一定の実施形態が実装される)。別々のパイプラインが使用される場合には、これらのパイプラインのうちの1つまたは複数はアウトオブオーダー発行/実行で他はインオーダーであり得るということも理解されるべきである。
メモリアクセスユニット164のセットはメモリユニット170に結合され、メモリユニット170は、レベル2(L2)キャッシュユニット176に結合されたデータキャッシュユニット174に結合されたデータTLBユニット172を含む。1つの典型的実施形態では、メモリアクセスユニット164はロードユニット、ストアアドレスユニット、およびストアデータユニットを含むことができ、それらの各々はメモリユニット170内のデータTLBユニット172に結合される。命令キャッシュユニット134は、メモリユニット170内のレベル2(L2)キャッシュユニット176にさらに結合されている。L2キャッシュユニット176は、1つまたは複数の他のレベルのキャッシュに結合され、結局はメインメモリに結合される。
例を挙げると、典型的レジスタリネーミング、アウトオブオーダー発行/実行コアアーキテクチャはパイプライン100を次の通りに実装することができる。すなわち、1)命令フェッチ138はフェッチステージ102および長さデコードステージ104を実行し、2)デコードユニット140はデコードステージ106を実行し、3)リネーム/アロケータユニット152はアロケーションステージ108およびリネーミングステージ110を実行し、4)スケジューラユニット156はスケジュールステージ112を実行し、5)物理的レジスタファイルユニット158およびメモリユニット170はレジスタリード/メモリリードステージ114を実行し、実行クラスタ160は実行ステージ116を実行し、6)メモリユニット170および物理的レジスタファイルユニット158はライトバック/メモリライトステージ118を実行し、7)種々のユニットが例外処理ステージ122に関係する可能性があり、8)リタイアメントユニット154および物理的レジスタファイルユニット158はコミットステージ124を実行する。
コア190は、本明細書に記載された1つまたは複数の命令を含む、1つまたは複数の命令セット(例えば、x86命令セット(新しいバージョンに対して追加されている幾つかのエクステンションを有する)、カリフォルニア州サニーベールのMIPSテクノロジーズ(MIPS Technologies)のMIPS命令セット、英国ケンブリッジのARMホールディングス(ARM Holdings)のARM(登録商標)命令セット(NEONなどの任意の追加エクステンションを有する))をサポートすることができる。一実施形態では、コア190は、パックドデータ命令セットエクステンション(例えば、AVX1、AVX2、など)をサポートする論理を含み、多くのマルチメディアアプリケーションにより使用される操作がパックドデータを用いて実行されることを可能にしている。
このコアがマルチスレッディング(操作またはスレッドの並行する2つ以上のセットを実行すること)をサポートすることができ、しかもそれを、タイムスライスマルチスレッディング、同時マルチスレッディング(この場合、単一の物理的コアが、その物理的コアが同時にマルチスレッディングしているスレッドの各々のために論理コアを提供する)、またはそれらの組み合わせ(例えば、Intel(登録商標)のHyper−Threading Technologyの場合のようにタイムスライス方式でフェッチおよびデコードを行い、その後に同時マルチスレッディングを行う)を含む多様な仕方で行うことができるということが理解されるべきである。
レジスタリネーミングはアウトオブオーダー実行と関連して記載されるが、レジスタリネーミングはインオーダーアーキテクチャにおいて使用され得ることが理解されるべきである。プロセッサの図示された実施形態は別々の命令キャッシュユニット134およびデータキャッシュユニット174ならびに共用されるL2キャッシュユニット176も含むが、代わりの実施形態は、例えばレベル1(L1)内部キャッシュまたは複数レベルの内部キャッシュなどの、命令およびデータの両方のための単一の内部キャッシュを持つことができる。幾つかの実施形態では、システムは、内部キャッシュと、コアおよび/またはプロセッサの外側の外部キャッシュとの組み合わせを含み得る。あるいは、全てのキャッシュがコアおよび/またはプロセッサの外側にあってもよい。
具体的な典型的インオーダーコアアーキテクチャ 図2A〜2Bは、より具体的な典型的インオーダーコアアーキテクチャのブロック図であり、このコアはチップ内の数個の論理ブロック(同じタイプおよび/または異なるタイプの他のコアを含む)のうちの1つであろう。それらの論理ブロックは、用途に応じて、広帯域幅相互接続ネットワーク(例えば、リングネットワーク)を通して或る固定機能論理、メモリI/Oインターフェースおよび他の所要のI/O論理と通信する。
図2Aは、一実施形態による、オンダイ相互接続ネットワーク202へのコネクションおよびレベル2(L2)キャッシュ204のローカルサブセットを有する単一のプロセッサコアのブロック図である。一実施形態では、命令デコーダ200は、パックドデータ命令セットエクステンションを有するx86命令セットをサポートする。L1キャッシュ206は、キャッシュメモリに対してスカラーユニットおよびベクトルユニットへの低遅延アクセスを可能にする。一実施形態では(デザインを簡単化するために)、スカラーユニット208およびベクトルユニット210は別々のレジスタセット(それぞれ、スカラーレジスタ212およびベクトルレジスタ214)を使用し、これらの間で転送されるデータはメモリに書き込まれ、後にレベル1(L1)キャッシュ206から読み返されるが、代替実施形態は異なるアプローチを使用することができる(例えば、単一のレジスタセットを使用するか、あるいは、データを書き込んで読み返すことをせずにデータを2つのレジスタファイル間で転送できるようにする通信パスを含める)。
L2キャッシュ204のローカルサブセットは、1プロセッサコアに対して1つずつ、別々のローカルサブセットに分割されるグローバルL2キャッシュの部分である。各プロセッサコアは、L2キャッシュ204の自分自身のローカルサブセットへの直接アクセスパスを有する。プロセッサコアにより読まれたデータは、そのプロセッサコアのL2キャッシュサブセット204に格納され、迅速に、かつそれら自身のローカルL2キャッシュサブセットにアクセスする他のプロセッサコアと同時に、アクセスされ得る。プロセッサコアにより書きこまれるデータは、そのプロセッサコア自身のL2キャッシュサブセット204に格納され、必要に応じて他のサブセットからフラッシュされる。リングネットワークは、共用されるデータのコヒーレンシを保証する。リングネットワークは、プロセッサコア、L2キャッシュおよび他の論理ブロックなどのエージェントがチップ内で互いに通信することを可能にするために双方向性である。各リングデータパスは、1方向につき1012ビット幅である。
図2Bは、一実施形態による図2Aのプロセッサコアの部分の拡大図である。図2Bは、L1キャッシュ206のL1データキャッシュ206A部分と、ベクトルユニット210およびベクトルレジスタ214に関するさらなる詳細とを含む。具体的には、ベクトルユニット210は16幅のベクトル処理ユニット(VPU(vector−processing unit))(16幅のALU228を参照されたい)であり、整数命令、単精度浮動小数点命令、および倍精度浮動小数点命令のうちの1つまたは複数を実行する。このVPUは、スウィズルユニット220を用いてレジスタ入力をスウィズルすること、数値変換ユニット222A〜Bを用いる数値変換、および複製ユニット224を用いるメモリ入力に対する複製をサポートする。ライトマスクレジスタ226は、生じたベクトルライトをプレディケートすることを可能にする。
統合メモリコントローラおよび専用論理を有するプロセッサ 図3は、一実施形態により、2つ以上のコアを持つことができ、統合メモリコントローラを持つことができ、統合グラフィクスを持つことができるプロセッサ300のブロック図である。図3の実線のボックスは単一のコア302A、システムエージェント310、1つまたは複数のバスコントローラユニット316のセットを有するプロセッサ300を示し、任意に追加された破線のボックスは、複数のコア302A〜N、システムエージェントユニット310内の1つまたは複数の統合メモリコントローラユニット314のセット、および専用論理308を有する代替プロセッサ300を示す。
従って、プロセッサ300の様々な実装は次のもの、すなわち、1)専用論理308が統合されたグラフィクスおよび/または科学(スループット)論理(これは1つまたは複数のコアを含み得る)であり、コア302A〜Nが1つまたは複数の汎用コア(例えば、汎用インオーダーコア、汎用アウトオブオーダーコア、これら両者の組み合わせ)であるCPU、2)コア302A〜Nが主としてグラフィクスおよび/または科学(スループット)向けの多数の専用コアであるコプロセッサ、および3)コア302A〜Nが多数の汎用インオーダーコアであるコプロセッサ、を含むことができる。従って、プロセッサ300は、汎用プロセッサ、コプロセッサまたは専用プロセッサ、例えばネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(general purpose graphics processing unit(汎用グラフィクス処理ユニット))、高スループットのメニーインテグレーテッドコア(MIC(many integrated core))コプロセッサ(30またはそれ以上のコアを含む)、組み込みプロセッサなど、であり得る。プロセッサは、1つまたは複数のチップ上に実装され得る。プロセッサ300は、幾つかのプロセス技術、例えばBiCMOS、CMOS、もしくはNMOSなど、のうちのいずれかを用いる1つまたは複数の基板の一部であり得、および/または、そのような基板上に実装され得る。
メモリヒエラルキーは、コア内の1つまたは複数のレベルのキャッシュ、1組の1つもしくは複数の共用キャッシュユニット306、および統合メモリコントローラユニット314のセットに結合されている外部メモリ(図示されていない)を含む。共用キャッシュユニット306のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、もしくは他のレベルのキャッシュ、ラストレベルキャッシュ(LLC(last level cache))、および/またはそれらの組み合わせなどの、1つまたは複数の中間レベルキャッシュを含むことができる。一実施形態においてはリングベース相互接続ユニット312が統合グラフィクス論理308、共用キャッシュユニット306のセット、およびシステムエージェントユニット310/1つもしくは複数の統合メモリコントローラユニット314を相互に接続するが、代替実施形態はそのようなユニットを相互に接続するために任意の数の公知技術を使用することができる。一実施形態では、1つまたは複数のキャッシュユニット306とコア302A〜Nとの間でコヒーレンシが維持される。
幾つかの実施形態では、コア302A〜Nのうちの1つまたは複数はマルチスレッディングを行うことができる。システムエージェント310は、コア302A〜Nを調整し操作するコンポーネントを含む。システムエージェントユニット310は、例えば、電力制御ユニット(PCU(power control unit))およびディスプレイユニットを含み得る。PCUは、コア302A〜Nおよび統合グラフィクス論理308の電力状態を調節するために必要な論理およびコンポーネントであるか、またはそのような論理およびコンポーネントを含むことができる。そのディスプレイユニットは、1つまたは複数の外部から接続されたディスプレイを駆動するためのものである。
コア302A〜Nはアーキテクチャ命令セットに関して同種または異種であり得る。すなわち、コア302A〜Nのうちの2つ以上は同じ命令セットを実行することができ、他はその命令セットのサブセットだけまたは異なる命令セットを実行することができる。
典型的コンピュータアーキテクチャ 図4〜7は典型的コンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ(DSP(digital signal processor))、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤー、ハンドヘルドデバイス、および他の種々の電子デバイスについて当該技術において知られている他のシステムデザインおよび構成も適切である。一般に、本明細書において開示されるプロセッサおよび/または他の実行論理を組み入れることのできるきわめて多様なシステムまたは電子デバイスが一般的に適切である。
図4は、一実施形態によるシステム400のブロック図を示す。システム400は、コントローラハブ420に結合されている1つまたは複数のプロセッサ410、415を含み得る。一実施形態では、コントローラハブ420はグラフィクスメモリコントローラハブ(GMCH(graphics memory controller hub))490および入力/出力ハブ(IOH(Input/Output Hub))450(これらは別々のチップ上に存在し得る)を含み、GMCH490は、メモリ440およびコプロセッサ445が結合されているメモリおよびグラフィクスコントローラを含み、IOH450は入力/出力(I/O)デバイス460をGMCH490に結合させる。あるいは、メモリおよびグラフィクスコントローラのうちの一方または両方が(本明細書に記載されているように)プロセッサ内に統合され、メモリ440およびコプロセッサ445はプロセッサ410に直接結合され、コントローラハブ420はIOH450と共に単一のチップ内に存在する。
追加のプロセッサ415の任意性は、図4において破線で示されている。各プロセッサ410、415は、本明細書に記載された処理コアのうちの1つまたは複数を含むことができ、プロセッサ300の何らかのバージョンであり得る。
メモリ440は、例えば、ダイナミックランダムアクセスメモリ(DRAM(dynamic random access memory))、相変化メモリ(PCM(phase change memory))、またはこれら二者の組み合わせであり得る。少なくとも1つの実施形態に関しては、コントローラハブ420は、フロントサイドバス(FSB(frontside bus))などのマルチドロップバス、クイックパスインターコネクト(QPI(QuickPath Interconnect))などのポイントツーポイントインターフェース、または同様のコネクション495を介して1つまたは複数のプロセッサ410、415と通信する。
一実施形態では、コプロセッサ445は、例えば高スループットMICプロセッサ、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサ、などの専用プロセッサである。一実施形態では、コントローラハブ420は統合グラフィクスアクセラレータを含むことができる。
アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性、電力消費特性などを含む、様々なメリット測定基準に関して、物理的リソース410、415の間には多様な差異があり得る。
一実施形態では、プロセッサ410は、一般的タイプのデータ処理操作を制御する命令を実行する。命令の中にコプロセッサ命令を埋め込むことができる。プロセッサ410は、これらのコプロセッサ命令を、接続されているコプロセッサ445により実行されるべきタイプのものであると認識する。従って、プロセッサ410は、これらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサバスまたは他のインターコネクトでコプロセッサ445へ発行する。コプロセッサ445は、受け取ったコプロセッサ命令を受け入れて実行する。
図5は、一実施形態による第1のより具体的な典型的システム500のブロック図を示す。図5に示されているように、マイクロプロセッサシステム500は、ポイントツーポイント相互接続システムであり、ポイントツーポイントインターコネクト550を介して結合された第1プロセッサ570および第2プロセッサ580を含む。プロセッサ570および580の各々は、プロセッサ300の何らかのバージョンであり得る。本発明の一実施形態では、プロセッサ570および580はそれぞれプロセッサ410および415であり、コプロセッサ538はコプロセッサ445である。別の実施形態では、プロセッサ570および580はそれぞれプロセッサ410およびコプロセッサ445である。
プロセッサ570および580は、統合メモリコントローラ(IMC(integrated memory controller))ユニット572および582をそれぞれ含んで示されている。プロセッサ570は、自身のバスコントローラユニットの一部としてポイントツーポイント(P−P(point−to−point))インターフェース576および578も含み、同様に、第2プロセッサ580はP−Pインターフェース586および588を含む。プロセッサ570、580は、ポイントツーポイント(P−P)インターフェース回路578、588を用いてP−Pインターフェース550を介して情報を交換することができる。図5に示されているように、IMC572および582はプロセッサをそれぞれのメモリ、すなわちメモリ532およびメモリ534、に結合させ、これらのメモリは、それぞれのプロセッサに局所的に接続されているメインメモリの部分であり得る。
プロセッサ570、580は、それぞれ、ポイントツーポイントインターフェース回路576、594、586、598を用いて個々のP−Pインターフェース552、554を介してチップセット590と情報を交換することができる。チップセット590は、任意に、高性能インターフェース539を介してコプロセッサ538と情報を交換することができる。一実施形態では、コプロセッサ538は、例えば高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、組み込みプロセッサなどの専用プロセッサである。
プロセッサが低電力モードにされたならばいずれかのまたは両方のプロセッサのローカルキャッシュ情報を共用キャッシュに格納できるように、いずれかのプロセッサの中に、または両方のプロセッサの外部に、P−Pインターコネクトを介してプロセッサと接続される共用キャッシュ(図示されていない)をさらに含めることができる。
チップセット590は、インターフェース596を介して第1バス516に結合され得る。一実施形態では、第1バス516はペリフェラルコンポーネントインターコネクト(PCI(Peripheral Component Interconnect))バス、またはPCIエクスプレス(PCI Express)バスなどのバスまたは別の第3世代I/Oインターコネクトバスであり得るが、本発明の範囲はそのように限定されない。
図5に示されているように種々のI/Oデバイス514が、第1バス516を第2バス520に結合するバスブリッジ518と共に、第1バス516に結合され得る。一実施形態では、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィクスアクセラレータまたはデジタル信号処理(DSP(digital signal processing))ユニットなど)、フィールドプログラマブルゲートアレイ、または他の任意のプロセッサなどの追加のプロセッサ515が第1バス516に結合される。一実施形態では、第2バス520はローピンカウント(LPC(low pin count))バスであり得る。一実施形態では、例えば、キーボードおよび/またはマウス522、通信デバイス527、ならびに、命令/コードおよびデータ530を含み得るディスクドライブもしくは他の大容量ストレージデバイスなどのストレージユニット528を含む種々のデバイスが第2バス520に結合され得る。さらに、オーディオI/O524が第2バス520に結合され得る。他のアーキテクチャが可能であることに留意されたい。例えば、図5のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のそのようなアーキテクチャを実装することができる。
図6は、一実施形態による第2のより具体的な典型的システム600のブロック図を示す。図5および6の類似する要素は類似する参照数字を有し、図5の一定の局面は、図6の他の局面を不明瞭にしないように、図6から省略されている。
図6は、プロセッサ570、580が統合メモリおよびI/O制御論理(CL(control logic))572および582をそれぞれ含み得ることを示している。従って、CL572、582は、統合メモリコントローラユニットを含み、I/O制御論理を含む。図6は、メモリ532、534がCL572、582に結合されることだけではなくて、I/Oデバイス614も制御論理572、582に結合されることを示す。レガシーI/Oデバイス615はチップセット590に結合される。
図7は、一実施形態によるSoC700のブロック図を示す。図3の類似要素は同様の参照数字を有する。さらに、破線のボックスは、より進化したSoC上の任意的特徴物である。図7において、インターコネクトユニット702は、1つまたは複数のコア302A〜Nのセットおよび共用キャッシュユニット306を含むアプリケーションプロセッサ710と、システムエージェントユニット310と、バスコントローラユニット316と、統合メモリコントローラユニット314と、統合グラフィクス論理、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得る1組の1つもしくは複数のコプロセッサ720と、スタティックランダムアクセスメモリ(SRAM(static random access memory))ユニット730と、ダイレクトメモリアクセス(DMA(direct memory access))ユニット732と、1つまたは複数の外部ディスプレイに結合されるべきディスプレイユニット740とに結合される。一実施形態では、コプロセッサ720は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサ、などの専用プロセッサを含む。
本明細書に開示されたメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせで実装される。実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/またはストレージ素子を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを含むプログラマブルなシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装される。
図5に示されているコード530などのプログラムコードは、本明細書に記載されている機能を実行して出力情報を生成する入力命令に対して適用され得る。出力情報は、公知の仕方で1つまたは複数の出力デバイスに対して適用され得る。この適用を行う目的のために、処理システムは、例えばデジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC(application specific integrated circuit))、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するために高レベルの手続き型のまたはオブジェクト指向のプログラミング言語において実装され得る。プログラムコードは、希望に応じてアセンブリ言語または機械語でも実装され得る。実際、本明細書に記載されるメカニズムの範囲はどんな特定のプログラミング言語にも限定されない。いずれにせよ、言語は、コンパイル済みまたは翻訳済みの言語であり得る。
少なくとも1つの実施形態の1つまたは複数の局面は、プロセッサ内の種々の論理を表す機械可読媒体に格納された代表的データにより実装され得、そのデータは、機械によって読まれると、その機械に、本明細書に記載されている技術を実行する論理を作らせる。「IPコア」として知られているそのような表現は、有形の機械可読媒体(テープ)に格納されることができ、実際にその論理またはプロセッサを作る製造機械にロードするために種々のカスタマまたは製造設備に供給され得る。例えば、ARMホールディングス社(ARM Holdings Ltd.)および中国科学アカデミーのコンピューティング技術研究所(the Institute of Computing Technology (ICT) of the Chinesse Academy of Sciences)により開発されたプロセッサなどのIPコアは、種々のカスタマまたはライセンシーにライセンスまたは販売されて、これらのカスタマまたはライセンシーにより製造されるプロセッサにおいて実装され得る。
そのような機械可読記憶媒体は、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD−ROM(compact disk read−only memory))、リライタブルコンパクトディスク(CD−RW(rewritable CD))、および光磁気ディスクを含む他の任意のタイプのディスク、読み出し専用メモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM(dynamic RAM))、スタティックランダムアクセスメモリ(SRAM(static RAM))、などのランダムアクセスメモリ(RAM)、消去可能でプログラマブルな読み出し専用メモリ(EPROM(erasable programmable ROM))、フラッシュメモリ、電気的に消去可能でプログラマブルな読み出し専用メモリ(EEPROM(electrically erasable programmable ROM))、相変化メモリ(PCM)などの半導体デバイス、磁気もしくは光カード、または他の任意のタイプの、電子的命令を格納するのに適する媒体などの記憶媒体を含む、機械またはデバイスによって製造または形成される物品の非一時的な有形の装置を、無制限に、含み得る。
従って、実施形態は、本明細書に記載されている構造、回路、装置、プロセッサおよび/またはシステム特徴を定義するハードウェア記述言語(HDL(Hardware Description Language))などの、命令を含むかまたはデザインデータを含む非一時的な有形の機械可読媒体をも含む。そのような実施形態は、プログラム製品とも称され得る。
エミュレーション(バイナリ変換、コードモーフィングなどを含む) 或る場合には、命令をソース命令セットからターゲット命令セットに変換するために命令コンバータが使用され得る。例えば、命令コンバータは、命令を、コアにより処理されるべき1つまたは複数の他の命令に変換(例えば、スタティックバイナリ変換、ダイナミックコンパイルを含むダイナミックバイナリ変換を用いて)し、モーフィングし、エミュレートし、あるいは別の仕方で変換することができる。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせにおいて実装され得る。命令コンバータはオンプロセッサ、オフプロセッサ、またはパートオンパートオフプロセッサであり得る。
図8は、一実施形態による、ソース命令セット中のバイナリ命令をターゲット命令セット中のバイナリ命令に変換するソフトウェア命令コンバータの使用を対照させるブロック図である。図示されている実施形態では、命令コンバータはソフトウェア命令コンバータであるが、代わりに、命令コンバータはソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせにおいて実装され得る。図8は、少なくとも1つのx86命令セットコアを有するプロセッサ816によりネイティブに実行され得るx86バイナリコード806を生成するために高レベル言語802のプログラムがx86コンパイラ804を用いてコンパイルされ得ることを示す。
少なくとも1つのx86命令セットコアを有するプロセッサ816は、少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同じ結果を達成するために、(1)Intel(登録商標)x86命令セットコアの命令セットの相当の部分または(2)少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサ上で動作するように設定されたアプリケーションもしくは他のソフトウェアのオブジェクトコードバージョンをコンパチブルに実行しまたは別の仕方で処理することによって少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同じ機能を実行することのできる任意のプロセッサを表す。x86コンパイラ804は、少なくとも1つのx86命令セットコアを有するプロセッサ816上で、追加のリンケージ処理を伴ってあるいは伴わずに、実行され得るx86バイナリコード806(例えば、オブジェクトコード)を生成するように動作し得るコンパイラを表す。同様に、図8は、高レベル言語802のプログラムが、少なくとも1つのx86命令セットコア814を持たないプロセッサ(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セットを実行するおよび/または英国ケンブリッジのARMホールディングスのARM命令セットを実行するコアを有するプロセッサ)によってネイティブに実行され得る代替命令セットバイナリコード810を生成するために代替命令セットコンパイラ808を用いてコンパイルされ得ることを示す。
命令コンバータ812は、x86バイナリコード806を、x86命令セットコアを持たないプロセッサ814によってネイティブに実行され得るコードに変換するために使用される。この変換後のコードは代替命令セットバイナリコード810とは、これを実行できる命令コンバータが製造困難であるために、同じではない可能性があるが、変換後のコードは、大体の動作を成し遂げ、代替命令セットからの命令から組み立てられるであろう。従って、命令コンバータ812は、x86命令セットプロセッサまたはコアを持たないプロセッサまたは他の電子デバイスがx86バイナリコード806を実行することを、エミュレーション、シミュレーションまたは他の任意のプロセスを通して、可能にするソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
軽量なスタックベースのプレディケーション 軽量なスタックベースのプレディケーションの実施形態が記載されるであろう。実施形態は、既存のプレディケートレジスタ実装よりハードウェアの複雑さが小さいプレディケートスタック実装を得るためにレジスタとリネーミング論理とを含む。さらに、プレディケートレジスタのリネーミングとプレディケートレジスタの再利用とは、在来のプレディケートレジスタ実装と比べると簡単化された論理を用いて実行され得る。
一実施形態では、プレディケート命令は、プレディケーション値を生成し、この値を、後の命令による条件付き実行を可能にするために、プレディケートスタックへプッシュする。命令は、スタック上の指定されたプレディケート値に基づいて条件付きで実行する。一実施形態では、条件付きで実行されるブランチにわたってスタック整合性を維持するためにプレディケートスタック管理および同期命令が設けられる。
一実施形態では、プレディケートレジスタスタックのためのレジスタリネーム論理はプロセッサ命令パイプラインにおいて初めの方に移される。初めの方のプレディケートレジスタリネームは、プレディケートされた命令のためのプレディケートを包含する物理的レジスタが命令デコードステージと同じく早くに使用されることを可能にし、在来のプレディケートレジスタ実装より早く分岐結果計算が行われるとともに分岐予測ミスからの回復が改善されるという結果を伴う。
これらの性能改善は、既存の実装と比べてプレディケートレジスタのためのダイ面積要求条件を低減することによる実装コストの低減をも伴って実現され得る。ダイ面積の低減は、プロセッサのダイナミックキャパシタンスが減少するとともに、それと関連してプロセッサの電力消費量が減少するという結果をもたらし得る。さらに、命令コード化スペース要求条件は、プレディケート値を生成する命令については、その命令のために明示的プレディケートデスティネーションレジスタが要求されなくてよいので、低減され得る。
一実施形態では、プレディケーション実装は、アウトオブオーダーハードウェアソフトウェア協調設計プロセッサにおける実装に適するように改められる。プレディケートレジスタのためのソフトウェアサポートは、プログラムにコンパイルされるか、あるいはコンパイル後に実行のためにバイナリ変換システムによって挿入され得る。簡単化されたハードウェア論理は、既存のプレディケートレジスタ実装と比べて、プロセッサダイ面積のさらなる節約と、プロセッサのダイナミックキャパシタンスのさらなる低減とをもたらす。
プレディケートレジスタスタック概観 様々な実施形態において、プレディケート値はレジスタスタックにおいて編成される。従って、ソースおよびデスティネーション論理レジスタは、プレディケート値を消費し生成する命令によって明示的に参照されない。代わりに、プレディケートリードおよびライトは、プレディケートスタック内の、トップオブスタック(ToS(Top−of−Stack))レジスタに関して特定の位置の値をアドレス指定する。一実施形態では、プレディケート値への参照は現在のToS値に関して相対的に行われる(例えば、ToS、ToS−1、ToS+2)。一実施形態では、スタック参照は、値をスタックへプッシュし(例えば書き込む)またはスタックからポップする(例えば、読み出す)ことにより行われる。プッシュまたはポップ操作のタイプに応じて、操作はToSに対して副作用を及ぼし得る。
一実施形態では、プレディケートスタックの状態を明示的に管理し維持するための命令が設けられる。例えば、分岐再収束後のプレディケートスタック値の一貫したビューを維持する命令が設けられる。一実施形態では、種々のソフトウェア制御フローパスにおけるプレディケートスタックの整合性を維持するためにプレディケートスタック管理機能が使用され得る。コードは様々な制御フローパスをたどるので、プレディケートスタックに対して異なる数のプッシュおよびポップが生じ得る。或る状況においては、再収束後コードは分岐前のプレディケート値にアクセスすることができないであろう。例えば、再収束後コードの位置は、その前の制御フローパスのうちのどれが取られたかによって変化し得る。以下で図13〜15Cと関連して典型的制御フロー命令が記載される。
早期分岐計算および予測ミス回復 一実施形態では、スタックベースのプレディケーション実装は、プロセッサパイプライン内でのプレディケートレジスタの論理−物理マッピングの早期実現を可能にする。従って、その分岐が実行される前に分岐の結果を計算するかあるいはその予測ミスを訂正するために、早期に計算されたプレディケート値が使用され得る。より伝統的な編成を使用してそのようにすることは、リネーミングがプロセッサパイプライン内で後に行われるので、もっと著しく複雑であろう。
図9は、レジスタエイリアステーブルを使用してプレディケートリネーミングを実装するアウトオブオーダープロセッサのための典型的パイプラインのブロック図である。レジスタエイリアステーブル(RAT(register alias table))は、レジスタリネームへの在来のアプローチである。図示されているパイプラインは、例示的なものであり、いかなる特定のプロセッサアーキテクチャのプロセッサパイプラインを示すことも意図してはおらず、アウトオブオーダーレジスタリネーミングプロセッサの処理パイプラインの一部分の一般的な例として提示されている。簡潔を目的として、パイプラインの幾つかの部分は、典型的インオーダーパイプラインの構成要素と図1Bの典型的レジスタリネーミングアウトオブオーダー発行/実行アーキテクチャとを用いて示されている。
前に図示された図1Bの分岐予測ユニット132、命令フェッチユニット138、デコードユニット140、および実行ユニット162が示されている。加えて、エイリアスコンポーネント942、命令キューコンポーネント944、リネームコンポーネント952、プレディケートRATコンポーネント954、およびシャドウRATコンポーネント956が示されている。エイリアスコンポーネント942およびリネームコンポーネント952は、図1Bに示されているリネーム/アロケータユニット152の部分であり得る。プレディケートRAT954およびシャドウRAT956は、図1Bに示されている物理的レジスタファイルユニット158のうちの1つまたは複数の中に存在し得る。
当該技術において知られているプレディケーション実装においては、プレディケートRATコンポーネント954は、レジスタエイリアスが物理的レジスタ内の物理的レジスタのうちの1つに対して命令により明示的に特定される論理レジスタ指定子の間に生成される当該技術において知られている他のRATとして実装される。論理レジスタ指定子は、プロセッサパイプラインのリネーミングステージにおいて物理的レジスタ指定子に変換される。レジスタリネーミング中に、一群の命令がリネーミングコンポーネント952に入る。これらの命令の間のデータ依存性が判定され、1セットの可能性のあるソースオペランド物理的レジスタが、エイリアステーブル(例えば、RAT)を用いて判定される。分岐投機中に、プレディケートRAT954は、レジスタリネーミングのための投機的エイリアス情報を格納する。シャドウRAT956は、分岐予測ミスの場合にデータ回復のために使用される、投機性がより低いシャドウ状態を格納する。
実行中、プレディケートレジスタの物理的IDはリネームコンポーネント952までは不明である。従って、プレディケートレジスタの物理的レジスタIDの知識に依拠する分岐予測または分岐予測ミス訂正は遅延させられる。或る場合には、予測ミス回復パス970は実行ユニット162まで遅延させられ得る。従って、アウトオブオーダー、レジスタリネーミングパイプラインにおいてプレディケーションを使用すると、稀に分岐予測が正しい予測に失敗した場合には深刻な分岐予測ミスペナルティが生じ得る。
図10は、一実施形態による、プレディケートレジスタスタックを実装したアウトオブオーダープロセッサのためのパイプラインのブロック図である。一実施形態では、スタックベースのプレディケーション実装は、プレディケートレジスタのための物理的レジスタの実現をプロセッサパイプラインの初めの方へ移すことによって予測ミスペナルティを著しく低減する。
一実施形態を実装するために構成された更新済みプロセッサコンポーネントが示されている。更新済みコンポーネントは、分岐予測ユニット1032、命令フェッチユニット1038、デコードユニット1040、エイリアスコンポーネント1042、命令キューコンポーネント1044、リネームコンポーネント1052、および実行ユニット1062を含む。
プレディケートリネーム操作はオフセットが既知となったならばすぐに実行され得、リネーム論理1054は、在来のレジスタリネーム論理より著しく低減されたハードウェア論理を用いて実装され得る。一実施形態では、オフセットは、パイプラインの命令デコードステージの間にデコードユニット1040の中で既知となる。オフセットが既知となると、プレディケートToSレジスタおよびリネーム論理1054はプレディケート物理的レジスタIDを決定することができる。プレディケートレジスタリネームを命令パイプライン内でもっと前の方へ移せば、前に計算されたプレディケート値に基づいて分岐予測ミス回復を行う追加の機会が得られる。従って、実行ユニット1062は依然として予測ミス回復パス1070上に存在し得るノードであるが、早期予測ミス検出ポイント1072がデコードユニット1040、エイリアスコンポーネント1042、命令キューコンポーネント1044、またはリネームコンポーネント1052において作動可能にされ得る。
一実施形態では、シャドウプレディケートレジスタ1056のセットが含められる。分岐予測ミスの結果としてパイプラインの全体または部分がフラッシュされる場合、正しいToS物理的レジスタ識別子はシャドウプレディケートレジスタ1056のうちの1つから回復され得る。一実施形態では、ToS識別子のシャドウコピーが各々のあり得るパイプラインフラッシュポイントにおいて維持される。例えば、1つのシャドウコピーがコミットにおいて完全パイプラインフラッシュを処理するために使用され、追加の1つのシャドウコピーが部分的パイプラインフラッシュからの回復のためにパイプライン内のもっと前の方のポイントにおいて、例えばあり得る早期予測ミス検出ポイント1072のうちの1つにおいて、保持され得る。
典型的プレディケートレジスタスタック実装 図11は、実施形態が実装され得る典型的プロセッサのブロック図である。簡潔性を目的として単一のプロセッサコア1190(例えばコア0)の細部が図示されているが、他のコア(例えば、コア1〜N)は同様の論理を持つことができる。一実施形態では、プロセッサコア1190は、図1Bの典型的プロセッサ190に図示されているプロセッサコンポーネントを含む。さらに、各コアは、少なくとも、改善された分岐予測ユニット1132、命令フェッチユニット1138およびデコードユニット1140を含む改善されたフロントエンドユニット1130を含み得る。一実施形態では、各コアは、リネーム/アロケータユニット1152、スケジューラユニット1156、および物理的レジスタファイルユニット1158を含む改善されたアウトオブオーダー実行エンジンユニット1150を含む。
一実施形態では、プロセッサコア1190は、図10のスタックベースのプレディケートシステムを実装する。そのような実施形態では、分岐予測ユニット1032は分岐予測ユニット1132内に実装される。命令フェッチユニット1038は命令フェッチユニット1138内に実装される。デコードユニット1040はデコードユニット1140内に実装される。一実施形態では、エイリアスコンポーネント1042およびリネームコンポーネント1052はリネーム/アロケータユニット1152内に実装される。実行ユニット1062は、実行ユニット162のうちのいずれか1つまたは複数であり得る。命令キュー1044は、スケジューラユニット1156のうちの1つまたは複数のものの中でリザベーションステーションとして実装され得る。
一実施形態では、ToSレジスタおよびリネーム論理1054はデコードユニット1140の中に、またはデコードユニット1140と関連して、実装される。しかし、もしプレディケートレジスタハードウェアがプロセッサコアの他のコンポーネント内に実装されるならば、依然として早期プレディケートレジスタ決定が行われ得る(例えば、デコードステージの間に)。一実施形態では、ToSレジスタおよびリネーム論理1054は、フロントエンドユニット1130によりアクセスされ得る簡単化されたリネーミング論理を用いるリネーム/アロケータユニット1152の中に実装される。一実施形態では、プレディケートTOSレジスタおよびリネーム論理1054は、物理的レジスタファイルユニット1158のうちの1つまたは複数のものの中に実装される。
図12A〜12Bは、プレディケートレジスタスタックの一実施形態を実装するためのプロセッサコンポーネントのブロック図である。それらのプロセッサコンポーネントは、図11のプロセッサコア1190のコンポーネントとして図示されている。特に、図12Aは、実行エンジンユニット1150および物理的レジスタファイルユニット1158を示す。物理的レジスタファイルユニット1158は、個々の実行ユニット(図示されていない)のうちの1つまたは複数のものに接続され得る。図12Bは、物理的レジスタファイルユニット1158の拡大図を示す。
図12Aに示されているように、一実施形態では、レジスタリネームコンポーネント1152.1およびレジスタアロケーションコンポーネント1152.2は実行エンジンユニット1150のリネーム/アロケータユニット1152の中に含まれる。スケジューラユニット1156の中のリザベーションステーション1257は、図10のアウトオブオーダー命令キュー1044を実装するために使用され得る。一実施形態では、物理的レジスタファイルユニット1158は、プレディケートToSレジスタおよびリネーム論理1254を、実行エンジンユニット1150内で使用される他の物理的レジスタと共に、含む。プレディケートToSレジスタおよびリネーム論理1254は、プレディケートレジスタセット1210内のレジスタのレジスタIDを選択するために使用される。プレディケートレジスタセット1210内のレジスタは、プレディケートレジスタスタックのレジスタの代わりに使用される。
一実施形態では、物理的プレディケートレジスタセット1210内の各プレディケートレジスタは、1ビットのプレディケート値(例えば、真のための0b1または偽のための0b0)を保持するように構成されたシングルビットレジスタである。一実施形態では、プレディケートレジスタセット1210はマルチビットレジスタ(例えば、16ビット、32ビット)から構成され、レジスタ論理はそれらのマルチビットレジスタのシングルビットをシングルプレディケートレジスタとして与えるように構成される。
図12Bは、物理的レジスタファイルユニット1158の拡大図を示す。任意の所与時点でのライブプレディケートレジスタのセットは[ToS−MAX_OFFSET,ToS+MAX_OFFSET]として定義され、ここで図12A〜12Bの+Nおよび−NはプレディケートレジスタスタックについてToS1206からの+MAX_OFFSETおよび−MAX_OFFSETを示す。MAX_OFFSETは、実施形態によりさまざまである。プレディケート値が計算されると、それらの値はプレディケートスタックの頂部へ(例えば、ToS1206の上のレジスタへ)プッシュされ、ToSはその新しい値まで進められる。
一実施形態では、プレディケートレジスタリネーミング論理1254は、ToSレジスタのレジスタIDを格納するレジスタ1204と、そのToS IDから要求されたオフセットを計算するALU1202とを含む。前に計算されたプレディケートは、現在のプレディケートToSレジスタに関して相対的に特定される(例えば、ToS+1、ToS−2など)。特定の値の論理名は、時間が経つにつれて変化するであろう。例えば、ToSにある特定のプレディケートレジスタは、次のプレディケート値がプレディケートレジスタスタックへプッシュされた後、ToS−1にアドレス指定されるであろう。ToSレジスタが増大するごとに、プレディケート(例えば、ToS−(MAX_OFFSET+1)の位置にあるプレディケート)のうちの1つは、ライブプレディケート値の範囲の外へ出る。これが生じると、ToS−(MAX_OFFSET+1)位置にあるプレディケート値は無効とみなされる。その論理レジスタと関連付けられている物理的レジスタは、その論理レジスタが無効になると再利用される。
パイプラインの全体または部分がフラッシュされる場合、正しいToS値はシャドウToSレジスタ1256内のシャドウコピーから回復される。一実施形態では、将来フラッシュが起こり得る各々のパイプラインポイントでシャドウコピーが維持される。一実施形態では、論理的に[ToS−MAX_OFFSET,ToS+MAX_OFFSET]の外側にあるプレディケート値は、もしパイプラインをフラッシュしてプロセッサの状態をそのプレディケート値が依然として有効なままであるはずのポイントまで後退させる可能性が残っているならば、解放されるべきではないということに注意して、ソフトウェアは開発される。一実施形態では、プロセッサ状態の後退後にそのレジスタがライブになる可能性がありそうならば、論理レジスタが解放されることを阻止する論理が含められる。プレディケートレジスタのコストは割合に少ないので、一実施形態では、プレディケートレジスタのアウトオブバウンズ問題の可能性を制限するために、物理的レジスタの数を十分に多く保つことができる。1つの実装では最大16個のライブプレディケートレジスタを包含するプレディケートレジスタスタックで十分である。しかし、任意の時点におけるライブプレディケートレジスタの数は、プロセッサまたはプロセッサコアの命令パイプラインの長さに基づいて調整され得る。
新しいプレディケート値は、或る程度の比較命令を用いて、明示的に、または、何らかの方法で試験され得る値を計算する任意の命令によって暗に、計算されてスタックへプッシュされ得る。例えば、アーキテクチャフラグを改変する既存の命令は、プレディケート値をプレディケートスタックへプッシュする可能性がある。所与の命令に関してプッシュまたは比較するプレディケート値としてどのアーキテクチャフラグを用いるかは、命令コード化の一部として指定され得、常に0とあるいは他の任意の条件と対照して試験すると想定され得る。一実施形態では、任意の生成された値が常にスタックの頂部へプッシュされる。従って、命令コード化において、明示的デスティネーションプレディケートレジスタは指定されない。
一実施形態では、ToSは常に増大すると想定され得、明示的ポップ命令は設けられない。しかし、一実施形態では、スタックから値を除去して、ポップされた値の数だけToSを小さくするようにポップ命令が実装され得る。一実施形態では、スタック同期命令の結果としてToSを以前のポイントへ移す暗示的ポップ命令が設けられる。
プレディケートレジスタスタック管理命令 或るスタックベースのデザインでは、プログラムが様々な制御パスを取り得るとき、制御パスが収束したときスタックは整合した状態にあるべきである。換言すれば、プレディケートToSレジスタおよびどのTOS−N参照も、どのパスが取られたかによらずに同じプレディケートレジスタを参照するべきである。スタックへプッシュされたプレディケート値の数が制御フローパスによって異なるならば、プレディケートレジスタスタックは整合しなくなる。プレディケートレジスタスタックを整合しない状態に置く命令の典型的セットが以下の表1に示されている。
上の表1において、2つの分岐パスのうちの1つが、第2行のToSにより示されるプレディケートレジスタ内の値に基づいて実行される。predeicate_falseパスは、2つのプレディケート値をプレディケートスタックへプッシュする。predicate_trueパスは、1つのプレディケート値をプレディケートスタックへプッシュする。従って、第7行の分岐は、前の分岐パスのうちのどれが取られたかによって異なるプレディケート値を用いて評価されるであろうが、これは意図された結果ではない可能性がある。
一実施形態では、異なる数のプレディケート値をプレディケートレジスタスタックへプッシュする分岐パスにおいてスタック整合性を(例えば、コンパイラまたはデベロッパーが)維持することを可能にする専用の命令が含められる。
プレディケートスタックプッシュ命令 一実施形態では、1つまたは複数の値をプレディケートスタックへ明示的にプッシュし、ToSを適宜前進させる命令(例えば、ppush)が設けられる。スタックへプッシュされる値は、真または偽であり得る。一実施形態では、「don't−care」値がプッシュされ得る。don't−care値をプッシュすると、ToSがアップデートされるとともに、新しい値をセットすることなくプレディケートレジスタ内に存在する既存の値が再使用されることになるであろう。プレディケートレジスタスタック整合性を維持するためにプレディケートスタックプッシュ命令を利用する命令の典型的セットが下の表2に示されている。
上の表2において、追加の「ppush 0x1」命令が第6a行に示されている。一実施形態では、ppush 0x1命令は、0x1値をプレディケートスタックへプッシュし、ToSをその挿入された値へアップデートする。その結果、スタックへプッシュされたプレディケート値の数は両方のブランチにおいて等しくなるであろう。従って、第7行のブランチは、前のブランチ実行を顧慮せずに同じプレディケート値を用いて評価されるであろう。単一のビットのプッシュが示されているが(例えば、0x1)、一実施形態は、命令のソースオペランドのビット値に基づいて数個のビットをスタックへプッシュすることを可能にする。例えば、ソース値が0x3(例えば、0b11)であるならば、一実施形態は2つの真プレディケートをスタックへプッシュする。
プレディケートスタックキューおよび同期命令 一実施形態では、プレディケートキュー(例えば、pqueue)およびプレディケート同期(例えば、psync)命令が設けられる。pqueue命令は、1つまたは複数のプレディケートの明示的系列を、ToSをこれらの値を通過させて前へ進めることなく、スタックへプッシュすることができる。従って、将来の値がスタックへプッシュされると、その将来の値は、pqueue命令によりプッシュされた値をオーバーライトする。pqueue命令は、ToSの現在の位置を、後にpsync命令により使用され得るように、保存することもできる。
psync命令は、一実施形態では、ToSをキュー命令以前にToSがあった位置へ移動させ(例えばpsync bottom、psync.b)またはToSを、ToSが前のpqueue命令により書きこまれた最後のプレディケート値を指すまで前進させる(例えばpsync top、psync.t)。例えば、様々な制御フローパスにおいて計算されたプレディケートのいずれもが分岐再収束ポイントを超えてライブであるように意図されていなければpsync bottom命令を使用することができて、pqueueによりプッシュされた任意の値ならびにpqueueとpsync bottomとの間にスタックへプッシュされた他の任意の値の暗黙のポッピングをもたらす。反対に、変化し得る数のプッシュが分岐の間に発生し、これらの値のうちの幾つかが再収束ポイントを超えてライブであるように意図されるならば、psync top命令を使用することができる。プレディケートレジスタスタックの整合性を維持するためにプレディケートスタックキューおよび同期命令を利用する命令の典型的セットが下の表3に示されている。
上の表3において、第1a行は0x3(例えば、0b11)の値をスタックへプッシュするpqueue命令を示す。これに応じて、2つの真プレディケート値がプッシュされる。一実施形態では、このpqueue命令は、ToS位置を後の使用のために保存するけれども、新たにキューに入れられた値を反映するようにToS位置をアップデートすることはない。ToS位置はpqueue命令の結果としてアップデートされないので、第2行におけるbr.p命令によるToSへの参照は、第1行のadd.p命令によりプッシュされたプレディケート値への参照である。第2行の分岐の後、第3行および第4行の命令により2つの値がプレディケートスタックへプッシュされ、または第6行の命令により1つの値がプレディケートスタックへプッシュされる。このブランチにおける各プッシュは、第1a行のpqueue命令によって挿入された値をオーバーライトし、各プッシュ後にスタックを前進させる。
第6b行で、プレディケートスタックを同期させるためにpsync命令が使用される。psync.tまたはpsync.bのうちのいずれか一方が使用され得る。psync.t命令は、直前のpqueue命令により書き込まれた最後の値までToSを前進させるために使用される。表3のコードにおいて、第1a行のpqueue 0x3は2つのプレディケート値をプレディケートスタックへプッシュした。従って、一実施形態では、第6a行のpsync.tは、前のToS位置を読み出して、第1a行のpqueue命令によって格納された前のToS値を2位置通過させてToSを前進させる。代わりに、ToSをpqueue命令以前の位置へ復帰させるためにpsync.b命令を使用することができ、この復帰は、前のブランチにおいてプッシュされたいかなるプレディケート値をも本質的に廃棄する。いずれの場合にも、デベロッパーまたはコンパイラは、分岐収束後、プレディケートスタックの状態を確信することができる。
図13は、一実施形態による、プレディケートスタックを管理する命令を含む処理システムのブロック図である。この典型的処理システムは、メインメモリ1300に結合されたプロセッサ1355を含む。プロセッサ1355は、プレディケートスタック管理命令をデコードするためのデコード論理1331を有するデコードユニット1330を含む。加えて、プロセッサ実行エンジンユニット1340は、プレディケートレジスタスタック命令を実行するための追加の実行論理1341を含む。レジスタ1305は、実行ユニット1340が命令ストリームを実行するときオペランド、制御データおよび他のタイプのデータのためのレジスタストレージを提供する。一実施形態では、レジスタ1305は、本明細書に記載された論理的プレディケートレジスタスタックを実装するために使用される物理的レジスタも含む。
簡潔性を目的として、単一のプロセッサコア(コア0)の細部が図13に示されている。しかし、図13に示されている各コアがコア0と同じ論理のセットを持ち得ることが理解されるであろう。図示されているように、各コアは、所定のキャッシュ管理ポリシーに従って命令およびデータをキャッシュするための専用レベル1(L1)キャッシュ1312およびレベル2(L2)キャッシュ1311も含み得る。L1キャッシュ1311は、命令を格納するための独立した命令キャッシュ1320とデータを格納するための独立したデータキャッシュ1321とを含む。種々のプロセッサキャッシュの中に格納された命令およびデータは、固定したサイズ(例えば、64、128、512バイト長)であり得るキャッシュラインのグラニュラリティで管理される。この典型的実施形態の各コアは、メインメモリ1300および/または共用レベル3(L3)キャッシュ1316から命令をフェッチするための命令フェッチユニット1310と、その命令をデコードするためのデコードユニット1330と、その命令を実行するための実行ユニット1340と、その命令をリタイアさせて結果をライトバックするためのライトバック/リタイアユニット1350とを有する。
命令フェッチユニット1310は、メモリ1300(またはキャッシュのうちの1つ)から次にフェッチされるべき命令のアドレスを格納するための次命令ポインタ1303と、アドレス変換を高速化するために最近使われた仮想−物理命令アドレスのマップを格納するための命令変換ルックアサイドバッファ(ITLB(instruction translation look−aside buffer))1304と、命令分岐アドレスを投機的に予測するための分岐予測ユニット1302と、ブランチアドレスおよびターゲットアドレスを格納するための分岐ターゲットバッファ(BTB(branch target buffer))1301と、を含む種々の公知コンポーネントを含む。フェッチされると、命令は次に、デコードユニット1330、実行ユニット1340、およびライトバック/リタイアユニット1350を含む命令パイプラインの残りのステージへ流される。
図14は、一実施形態による、典型的プレディケートスタック管理命令を処理する論理についての流れ図である。ブロック1402において、命令パイプラインは、プレディケートレジスタスタックを改変するかまたは別様にアクセスする命令のフェッチから始まる。命令は、プレディケートレジスタスタックを改変する命令、または、その命令により実行された計算の結果としてセットされることもセットされないこともあるアーキテクチャステータスフラグとの比較に基づいてプレディケートレジスタスタックを改変する命令であり得る。
ブロック1404で、プロセッサは命令をデコードしてデコード済み命令とする。一実施形態では、デコード済み命令は単一の操作である。一実施形態では、デコード済み命令は、この命令の各サブエレメントを実行する1つまたは複数の論理的マイクロ操作を含む。それらのマイクロ操作はハードワイヤードであることができ、あるいは、マイクロコード操作はプロセッサの実行ユニットなどのコンポーネントに該命令を実装する種々の操作を実行させることができる。
ブロック1406で、プロセッサの実行ユニットは、プレディケートレジスタスタックにアクセスする操作を実行するためにデコード済み命令を実行する。一実施形態では、命令は、スタック内の論理的位置(例えば、ToS、ToS−1、ToS+1)を含むオペランドにより指定されるプレディケートスタック上の位置からのリードを行わせる。一実施形態では、命令は、プレディケートレジスタスタックへのプッシュを行わせる。値をプレディケートレジスタスタックへプッシュする命令については、一実施形態において、生成された値がスタックの頂部へプッシュされるので、値をプレディケートスタックへプッシュする命令のために命令コード化において明示的デスティネーションプレディケートレジスタは指定されない。
ブロック1408において、命令は、プレディケートレジスタスタックを、該命令により示された通りに、プロセッサに改変させる。一実施形態では、命令は、プロセッサの実行ユニットに、命令実行中にセットされる1つまたは複数のアーキテクチャフラグ(例えば、carry、zero overflow、negative)に基づいて値を生成させてその値をプレディケートレジスタスタックへプッシュさせる。一実施形態では、命令は、明示的プレディケートスタック管理操作を行う命令である。命令は、ToS値を前進させずに1つまたは複数の値をプレディケートスタックへプッシュする操作、ToS値を前進させるのと同時に1つまたは複数の値をプレディケートスタックへプッシュする操作、またはToSを前のプレディケートスタック操作に基づく位置に同期させる操作を含む、プレディケートスタックに対する任意の数の操作を実行することができる。
図15A〜15Cは、実施形態による、特定のプレディケートスタック管理命令についての流れ図である。図15Aは、一実施形態によるプレディケートスタックプッシュ命令(例えば、ppush)についての論理を示す。図15Bは、一実施形態によるプレディケートスタックキュー命令(例えば、pqueue)についての論理を示す。図15Cは、一実施形態によるプレディケートスタック同期命令(例えば、psync.b、psync.t)についての論理を示す。本明細書に記載された実施形態と矛盾しない、明示的プレディケートスタック管理を実行する他の命令が考えられ得るということが理解されるであろう。
図15Aのブロック1504に示されているように、一実施形態では、デコードユニットが、第1オペランドを有する第1命令(例えば、プレディケートプッシュ命令)をデコードして第1デコード済み命令とする。ブロック1506において、プロセッサ実行ユニットなどのプロセッサコンポーネントは第1オペランドのための第1オペランド値を取り出す操作を実行し、その第1オペランド値は1つまたは複数のプレディケート値を含む。ブロック1508において、プロセッサは、オペランド値のビットに基づいて1つまたは複数のプレディケート値をデコードする。例えば、0x4というオペランド値は、0b100にデコードされ得、3つのプレディケート値(例えば、0b1、0b0、および0b0)をプレディケートスタックへプッシュするという結果をもたらし得る。
ブロック1510において、プロセッサ実行論理はデコード済みプレディケート値をプレディケートスタックへプッシュする。プレディケート値をプッシュすることは、一実施形態では、プレディケートスタックの論理的レジスタと関連付けられた物理的レジスタIDを決定するためにプレディケートレジスタリネーム論理を使用する。ブロック1512において、プレディケートレジスタリネーム論理は、プレディケートスタックの頂部を、プレディケートレジスタスタックへプッシュされた最後の値まで前進させるために使用される。
図15Bのブロック1514に示されているように、一実施形態では、デコードユニットは、第1オペランドを有する第2命令(例えば、プレディケートキュー命令)をデコードして第2デコード済み命令とする。ブロック1516において、プロセッサ実行ユニットなどのプロセッサコンポーネントは第1オペランドのための第1オペランド値を取り出す操作を実行し、その第1オペランド値は1つまたは複数のプレディケート値を含む。ブロック1518において、プロセッサはオペランド値から少なくとも1つのプレディケート値の系列をデコードする。
ブロック1520において、プロセッサ実行論理はそのプレディケート値の系列をプレディケートスタックへプッシュする。一実施形態では、ブロック1521において示されているように、プレディケートキュー命令は、後に同期命令によって使用され得るように現在のToS位置(例えば、ToSレジスタID)を明示的に保存することができる。しかし、前のキュー命令と関連付けられたプレディケートToSを判定する他の方法が使用され得るので、必ずしも全ての実施形態がキュー命令によるプレディケートToS位置の明示的保存に依拠するわけではない。第2命令については、ブロック1512においてプレディケートキュー命令は明示的にはプレディケートスタックの頂部を前進させない。従って、プレディケートキュー命令によってプッシュされたプレディケート値は、これらの値が、プレディケートプッシュからの明示的プッシュによって、または、プレディケート値をプレディケートスタックへその命令の操作結果もしくは副作用としてプッシュするようにコード化された命令からのプッシュによって、オーバーライトされるまでは、ToS+N個の論理識別子を用いてアクセスされ得る。
図15Cのブロック1524において示されているように、一実施形態では、デコードユニットは第3命令(例えば、プレディケート同期命令)をデコードする。一実施形態では、1526において示されているように、第3命令は前に格納されたToS位置を取り出す。前に格納されたToS位置は、そのような実施形態では、前に実行されたプレディケートスタックキュー命令により格納される。しかし、前のキュー命令と関連付けられているプレディケートToSを判定する他の方法が使用され得るので、必ずしも全ての実施形態がキュー命令によるプレディケートToS位置の明示的保存に依拠するわけではない。ブロック1528に示されているように、プロセッサは、その命令のための同期モードを決定する。一実施形態では、同期モードは、命令デコード中にデコードユニットによって決定される。一実施形態では、プロセッサは、プレディケート同期命令の実行中に同期モードを決定する。ブロック1530に示されているように、プレディケートレジスタリネーム論理は、プレディケート同期命令のタイプまたはコード化に基づいてプレディケートToSレジスタを「ボトム」または「トップ」モードで同期させる。ブロック1532はボトム同期操作を示し、この場合、リネーム論理はToSを前のプレディケートキュー命令より前の位置へ移動させる。ブロック1533はトップ同期操作を示し、この場合、リネーム論理はToSを前のプレディケートキュー命令により書き込まれた最後のプレディケートまで移動させる。一実施形態では、前のプレディケートキュー命令により書き込まれた最後のプレディケートへのToSの移動は、論理的分岐の間に書き込まれたプレディケート値の数を越えてToSを前進させる。一実施形態では、前のプレディケートキュー命令によりプッシュされたプレディケート値より多くのプレディケート値が分岐中にプッシュされるならば、ToSの移動は1つまたは複数の命令の暗黙のポップをもたらす結果となる。
典型的命令フォーマット 本明細書に記載された1つまたは複数の命令の実施形態は、様々なフォーマットで具体化され得る。さらに、典型的なシステム、アーキテクチャ、およびパイプラインが以下に詳しく記載される。1つまたは複数の命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプラインにおいて実行され得るが、これらの細部には限定されない。
ベクトルフレンドリな命令フォーマットとは、ベクトル命令(例えば、ベクトル操作に特有の一定のフィールドがある)に適する命令フォーマットである。ベクトルフレンドリな命令フォーマットによってベクトル操作およびスカラー操作の両方がサポートされる実施形態が記載されるが、代替実施形態はベクトル操作ベクトルフレンドリな命令フォーマットだけを使用する。
図16A〜16Bは、一実施形態による一般的なベクトルフレンドリ命令フォーマットとその命令テンプレートとを示すブロック図である。図16Aは一実施形態による一般的ベクトルフレンドリ命令フォーマットとそのクラスA命令テンプレートとを示すブロック図であり、図16Bは一実施形態によるこの一般的ベクトルフレンドリ命令フォーマットとそのクラスB命令テンプレートとを示すブロック図である。具体的には、クラスAおよびクラスB命令テンプレートが定義されている一般的ベクトルフレンドリ命令フォーマット1600、その両方の命令テンプレートがメモリアクセス無し1605命令テンプレートとメモリアクセス1620命令テンプレートとを含む。ベクトルフレンドリ命令フォーマットの文脈において一般的という用語は、いかなる特定の命令セットにも結び付けられていない命令フォーマットに関連する。
ベクトルフレンドリな命令フォーマットが32ビット(4バイト)もしくは64ビット(8バイト)のデータエレメント幅(もしくはサイズ)を有する64バイトのベクトルオペランド長(もしくはサイズ)(従って、64バイトのベクトルは16個のダブルワード−サイズエレメントもしくは、代わりに、8クワッドワード−サイズエレメントから成る)、16ビット(2バイト)もしくは8ビット(1バイト)のデータエレメント幅(もしくはサイズ)を有する64バイトのベクトルオペランド長(もしくはサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、もしくは8ビット(1バイト)のデータエレメント幅(もしくはサイズ)を有する32バイトのベクトルオペランド長(もしくはサイズ)、および、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)、もしくは8ビット(1バイト)のデータエレメント幅(もしくはサイズ)を有する16バイトのベクトルオペランド長(もしくはサイズ)をサポートする実施形態が記載されるであろう。しかし、代替実施形態は、もっと大きな、もっと小さな、または様々なデータエレメント幅(例えば、128ビット(16バイト)のデータエレメント幅)を有するもっと大きな、もっと小さなおよび/または様々なベクトルオペランドサイズ(例えば、256バイトのベクトルオペランド)をサポートする。
図16AのクラスA命令テンプレートは次を含む、1)メモリアクセス無し1605命令テンプレートの中にはメモリアクセス無し、完全丸め制御タイプ操作1610命令テンプレートとメモリアクセス無し、データ変換タイプ操作1615命令テンプレートとが示されており、2)メモリアクセス1620命令テンプレートの中にはメモリアクセス、一時的1625命令テンプレートとメモリアクセス、非一時的1630命令テンプレートとが示されている。図16BのクラスB命令テンプレートは次を含む、1)メモリアクセス無し1605命令テンプレートの中にはメモリアクセス無し、ライトマスク制御、部分的丸め制御タイプ操作1612命令テンプレートとメモリアクセス無し、ライトマスク制御、vsizeタイプ操作1617命令テンプレートとが示されており、2)メモリアクセス1620命令テンプレートの中にはメモリアクセス、ライトマスク制御1627命令テンプレートが示されている。
一般的ベクトルフレンドリ命令フォーマット1600は、下にリストされている下記のフィールドを、図16A〜16Bに示されている順に含む。
フォーマットフィールド1640 − このフィールド内の具体的値(命令フォーマット識別子値)は、ベクトルフレンドリ命令フォーマットを、従って命令ストリームにおけるベクトルフレンドリ命令フォーマット内の命令の出現を、一意的に特定する。そのような次第で、このフィールドは、一般的ベクトルフレンドリ命令フォーマットだけを有する命令セットのためにはこのフィールドは必要でないという意味において、任意的である。
ベース操作フィールド1642 − その内容は、様々なベース操作を識別する。
レジスタインデックスフィールド1644 − その内容は、直接にまたはアドレス生成を通して、ソースおよびデスティネーションオペランドの位置を、それらがレジスタ内にあるにせよメモリ内にあるにせよ、指定する。これらの位置は、P×Q(例えば、32×512、16×128、32×1024、74×1024)レジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一実施形態ではNは最大3個のソースおよび1個のデスティネーションレジスタであり得るが、代替実施形態はもっと多くのあるいはもっと少ないソースおよびデスティネーションレジスタをサポートすることができる(例えば、最大2個のソースをサポートすることができ、この場合それらのソースのうちの1つはデスティネーションの役割も果たし、あるいは、最大3個のソースをサポートすることができ、この場合それらのソースのうちの1つはデスティネーションの役割も果たし、あるいは、2個のソースと1個のデスティネーションとをサポートすることができる)。
モディファイアフィールド1646 − その内容は、メモリアクセスを指定する一般的ベクトル命令フォーマット内の命令の出現を、指定しない命令から区別する、すなわち、メモリアクセス無し1605命令テンプレートとメモリアクセス1620命令テンプレートとを区別する。メモリアクセス操作はメモリヒエラルキーを読みおよび/またはメモリヒエラルキーに書き込むが(或る場合には、レジスタ内の値を用いてソースおよび/またはデスティネーションアドレスを指定する)、メモリアクセス無し操作はそうはしない(例えば、ソースおよびデスティネーションはレジスタである)。一実施形態では、このフィールドはメモリアドレス計算を行う3つの異なる仕方のうちからの選択も行うが、代替実施形態は、メモリアドレス計算を行うもっと多くの、もっと少ない、あるいは様々な仕方をサポートすることができる。
増補操作フィールド1650 − その内容は、ベース操作の他に多様な操作のうちのどの1つを実行するべきかを識別する。このフィールドはコンテキスト特有である。本発明の一実施形態では、このフィールドはクラスフィールド1668、アルファフィールド1652、およびベータフィールド1654に分割される。増補操作フィールド1650は、2個、3個、または4個の命令ではなくて単一の命令で共通のグループの操作を実行することを可能にする。
スケールフィールド1660 − その内容は、メモリアドレス生成のための(例えば、2scale*index+baseを使用するアドレス生成のための)インデックスフィールドの内容のスケーリングに備える。
ディスプレースメントフィールド1662A − その内容は、メモリアドレス生成の一部として使用される(例えば2scale*index+base+displacementを使用するアドレス生成のために)。
ディスプレースメントファクタフィールド1662B(ディスプレースメントファクタフィールド1662Bの直ぐ上にディスプレースメントフィールド1662Aが並置されていることは、一方または他方が使用されることを示す) − その内容はアドレス生成の一部として使用され、メモリアクセスのサイズ(N)だけ調整されるべきディスプレースメントファクタを明示し、ここでNはメモリアクセス内のバイトの数である(例えば、2scale*index+base+scaled displacementを使用するアドレス生成のための)。冗長な下位ビットは無視されるので、実効アドレスを計算するときに使用されるべき最終のディスプレースメントを生成するためにディスプレースメントファクタフィールドの内容にメモリオペランドの合計サイズ(N)が掛けられる。Nの値は、フルオペコードフィールド1674(本明細書において後に記載される)とデータ処理フィールド1654Cとに基づいて実行時にプロセッサハードウェアによって決定される。ディスプレースメントフィールド1662Aおよびディスプレースメントファクタフィールド1662Bは、この両者がメモリアクセス無し1605命令テンプレートのためには使用されずおよび/または様々な実施形態がこの両者のうちの1つだけを使用するかまたはそのいずれをも使用しなくてよいという意味において、任意的である。
データエレメント幅フィールド1664 − その内容は数個のデータエレメント幅のうちのどの1つが使用されるべきかを識別する(或る実施形態では全ての命令のために、他の命令においては一部の命令だけのために)。このフィールドは、唯一のデータエレメント幅がサポートされおよび/またはオペコードの何らかの局面を用いて複数のデータエレメント幅がサポートされるならばこのフィールドは不要であるという意味において、任意的である。
ライトマスクフィールド1670 − その内容は、データエレメント位置に応じて、デスティネーションベクトルオペランド内でのそのデータエレメント位置がベース操作および増補操作の結果を反映するかどうかを制御する。クラスA命令テンプレートはマージングライトマスキングをサポートし、クラスB命令テンプレートはマージングライトマスキングとゼロイングライトマスキングとの両方をサポートする。マージングの時には、ベクトルマスクはデスティネーション内のエレメントの任意のセットを任意の操作(ベース操作および増補操作により指定される)の実行中にアップデートされないように保護することを可能にし、他の1つの実施形態においては、対応するマスクビットが0を有するデスティネーションの各エレメントの古い値を保存する。対照的に、ゼロイング時には、ベクトルマスクは任意の操作(ベース操作および増補操作により指定される)の実行中にデスティネーション内のエレメントの任意のセットがゼロ化されることを可能にし、一実施形態では、デスティネーション内のエレメントは、対応するマスクビットが0値を有するときには0にセットされる。この機能性の1つのサブセットは、実行されている操作のベクトル長を制御する能力であるが(すなわち、最初のエレメントから最後のエレメントまでの、エレメントの範囲が、改変される)、改変されるエレメントが連続している必要はない。このように、ライトマスクフィールド1670は、ロード、ストア、算術、論理などを含む部分的ベクトル操作に配慮している。ライトマスクフィールド1670の内容が数個のライトマスクレジスタのうちの、使用されるべきライトマスクを包含する1つを選択する(従ってライトマスクフィールド1670の内容が、その実行されるべきマスキングを間接的に特定する)実施形態が記載されたが、代替実施形態は、その代わりにあるいはそれに加えて、マスクライトフィールド1670の内容が実行されるべきマスキングを直接指定することを可能にする。
イミディエイトフィールド1672 − その内容は、イミディエイトの指定に備える。このフィールドは、イミディエイトをサポートしない一般的ベクトルフレンドリフォーマットの実装の中には存在しなくて、イミディエイトを使用しない命令の中には存在しないという意味において、任意的である。
クラスフィールド1668 − その内容は、命令の様々なクラスを区別する。図16A〜16Bを参照すると、このフィールドの内容はクラスAおよびクラスB命令のうちから選択をする。図16A〜16Bにおいては、特定の値がフィールド内に存在することを示すために角の丸い四角形が使用されている(例えば、図16A〜16Bにおいてクラスフィールド1668に対してそれぞれクラスA 1668AおよびクラスB 1668B)。
クラスAの命令テンプレート クラスAのメモリアクセス無し1605命令テンプレートの場合、アルファフィールド1652はRSフィールド1652Aと解釈され、その内容は様々な増補操作タイプのうちのどの1つが実行されるべきかを識別し(例えば、丸め1652A.1とデータ変換1652A.2とは、それぞれ、メモリアクセス無し、丸めタイプ操作1610命令テンプレートとメモリアクセス無し、データ変換タイプ操作1615命令テンプレートとのために指定される)、ベータフィールド1654は、指定されたタイプの操作のうちのどれが実行されるべきかを識別する。メモリアクセス無し1605命令テンプレートにおいては、スケールフィールド1660、ディスプレースメントフィールド1662A、およびディスプレースメントスケールフィールド1662Bは存在しない。
メモリアクセス無し命令テンプレート − 完全丸め制御タイプ操作 メモリアクセス無し完全丸め制御タイプ操作1610命令テンプレートにおいては、ベータフィールド1654は丸め制御フィールド1654Aと解釈され、その1つまたは複数の内容は静的丸めを提供する。記載される実施形態においては丸め制御フィールド1654Aは全浮動小数点例外抑制(SAE(suppress all floating point exceptions))フィールド1656と丸め操作制御フィールド1658とを含むが、代替実施形態は、これらのコンセプトの両方をサポートすることができ同じフィールドにコード化することができ、あるいはこれらのコンセプト/フィールドのうちの一方だけを持つことができる(例えば、丸め操作制御フィールド1658だけを持つことができる)。
SAEフィールド1656 − その内容は例外イベント報告を無効にするべきかどうかを識別する。抑制が使用可能にされていることをSAEフィールド1656の内容が示しているならば、所与の命令は、どんな種類の浮動小数点例外フラグも報告せず、どんな浮動小数点例外ハンドラも起動しない。
丸め操作制御フィールド1658 − その内容は1群の丸め操作のうちのどれを実行するべきかを識別する(例えば、切り上げ、切り捨て、ゼロへの丸めおよび最も近い整数への丸め)。このように、丸め操作制御フィールド1658は、命令に従っての丸めモードの変更に備えている。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の一実施形態では、丸め操作制御フィールドの1650の内容はそのレジスタ値をオーバーライドする。
メモリアクセス無し命令テンプレート − データ変換タイプ操作 メモリアクセス無しデータ変換タイプ操作1615命令テンプレートにおいて、ベータフィールド1654はデータ変換フィールド1654Bと解釈され、その内容は、数個のデータ変換のうちのどの1つが実行されるべきかを識別する(例えば、データ変換無し、スウィズル、ブロードキャスト)。
クラスAのメモリアクセス1620命令テンプレートの場合、アルファフィールド1652はエビクションヒントフィールド1652Bと解釈され、その内容は、エビクションヒントのうちのどの1つが使用されるべきかを識別し(図16Aでは、一時的1652B.1および非一時的1652B.2がそれぞれメモリアクセス、一時的1625命令テンプレートおよびメモリアクセス、非一時的1630命令テンプレートのために指定される)、ベータフィールド1654はデータ処理フィールド1654Cと解釈され、その内容は、数個のデータ処理操作(プリミティブとしても知られている)のうちのどの1つが実行されるべきかを識別する(例えば、処理無し、ブロードキャスト、ソースのアップコンバート、デスティネーションのダウンコンバート)。メモリアクセス1620命令テンプレートはスケールフィールド1660を含むとともに、任意にディスプレースメントフィールド1662Aまたはディスプレースメントスケールフィールド1662Bを含む。
ベクトルメモリ命令は、変換サポートを用いてメモリからのベクトルロードおよびメモリへのベクトルストアを実行する。正規のベクトル命令に関してと同じく、ベクトルメモリ命令はデータエレメント関連の仕方でデータをメモリから/メモリへ転送し、実際に転送されるエレメントは、ライトマスクとして選択されたベクトルマスクの内容によって規定される。
メモリアクセス命令テンプレート − 一時的 一時的データとは、キャッシングから利益を得るために十分早く再使用されると見込まれるデータである。しかし、この見込みはヒントであって、様々なプロセッサが、そのヒントを完全に無視することを含めて、様々な仕方でこのキャッシングを実装することができる。
メモリアクセス命令テンプレート − 非一時的 非一時的データとは、第1レベルのキャッシュでのキャッシングから利益を得るのに十分早くに再使用されるとは見込まれないデータであり、優先的にエビクションされる権利を与えられるべきである。しかし、この見込みはヒントであり、様々なプロセッサが、そのヒントを完全に無視することを含めて、様々な仕方でこのキャッシングを実装することができる。
クラスBの命令テンプレート クラスBの命令テンプレートの場合、アルファフィールド1652はライトマスク制御(Z)フィールド1652Cと解釈され、その内容は、ライトマスクフィールド1670により制御されるライトマスキングがマージングであるべきかゼロイングであるべきかを識別する。
クラスBのメモリアクセス無し1605命令テンプレートの場合、ベータフィールド1654の一部はRLフィールド1657Aと解釈され、その内容は様々な増補操作タイプのうちのどの1つが実行されるべきかを識別し(例えば、メモリアクセス無し、ライトマスク制御、部分的丸め制御タイプ操作1612命令テンプレートとメモリアクセス無し、ライトマスク制御、VSIZEタイプ操作1617命令テンプレートとのために丸め1657A.1とベクトル長(VSIZE)1657A.2とがそれぞれ指定される)、ベータフィールド1654の残りの部分は、指定されたタイプの操作のうちのどれが実行されるべきかを識別する。メモリアクセス無し1605命令テンプレートにおいては、スケールフィールド1660、ディスプレースメントフィールド1662A、およびディスプレースメントスケールフィールド1662Bは存在しない。
メモリアクセス無し、ライトマスク制御、部分的丸め制御タイプ操作1612命令テンプレートにおいては、ベータフィールド1654の残りの部分は丸め操作フィールド1659Aと解釈され、例外イベント報告は無効にされる(所与の命令はどんな種類の浮動小数点例外フラグも報告せず、どんな浮動小数点例外ハンドラも起動しない)。
丸め操作制御フィールド1659A − 丸め操作制御フィールド1658と全く同様に、その内容は1群の丸め操作のうちのどの1つが実行されるべきかを識別する(例えば、切り上げ、切り捨て、ゼロへの丸めおよび最も近い整数への丸め)。このように、丸め操作制御フィールド1659Aは、命令に従っての丸めモードの変更に備えている。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の一実施形態では、丸め操作制御フィールドの1650の内容はそのレジスタ値をオーバーライドする。
メモリアクセス無し、ライトマスク制御、VSIZEタイプ操作1617命令テンプレートにおいては、ベータフィールド1654の残りの部分はベクトル長フィールド1659Bと解釈され、その内容は数個のデータベクトル長のうちのどの1つが実行されるべきかを識別する(例えば、128、256、または512バイト)。
クラスBのメモリアクセス1620命令テンプレートにおいては、ベータフィールド1654の一部はブロードキャストフィールド1657Bと解釈され、その内容はブロードキャストタイプのデータ処理操作が実行されるべきか否かを識別し、ベータフィールド1654の残りの部分はベクトル長フィールド1659Bと解釈される。メモリアクセス1620命令テンプレートは、スケールフィールド1660を含むとともに、任意にディスプレースメントフィールド1662Aまたはディスプレースメントスケールフィールド1662Bを含む。
一般的ベクトルフレンドリ命令フォーマット1600に関して、フォーマットフィールド1640、ベース操作フィールド1642、およびデータエレメント幅フィールド1664を含むフルオペコードフィールド1674が示されている。フルオペコードフィールド1674がこれらのフィールドの全てを含んでいる一実施形態が示されているが、これらの全てをサポートするわけではない実施形態ではフルオペコードフィールド1674はこれらのフィールドの一部だけを含む。フルオペコードフィールド1674は、操作コード(オペコード)を提供する。
増補操作フィールド1650、データエレメント幅フィールド1664、およびライトマスクフィールド1670は、一般的ベクトルフレンドリ命令フォーマットにおいてこれらの特徴事項が命令通りに指定されることを可能にする。
ライトマスクフィールドとデータエレメント幅フィールドとの組み合わせは、これらのフィールドが様々なデータエレメント幅に基づいてマスクが適用されることを可能にするという点で、類別された命令を生み出す。
クラスAおよびクラスBの中に見出される種々の命令テンプレートは、様々な状態において有利である。或る実施形態では、様々なプロセッサまたはプロセッサ内の様々なコアは、クラスAだけ、クラスBだけ、または両方のクラスをサポートすることができる。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダーコアはクラスBだけをサポートすることができ、主にグラフィクスおよび/または科学(スループット)コンピューティング向けのコアはクラスAだけをサポートすることができ、両方向けのコアは両方をサポートすることができる(もちろん、両方のクラスのテンプレートおよび命令の何らかの混合物を有するが両方のクラスのテンプレートおよび命令の全ては有しないコアは本発明の範囲内にある)。さらに、単一のプロセッサは複数のコアを含むことができ、その全てが同じクラスをサポートするかまたは異なるコアが異なるクラスをサポートする。例えば、別々のグラフィクスコアと汎用コアとを有するプロセッサにおいて、主にグラフィクスおよび/または科学コンピューティング向けのグラフィクスコアのうちの1つはクラスAだけをサポートすることができ、汎用コアのうちの1つまたは複数の汎用コアは、クラスBだけをサポートする汎用コンピューティング向けのアウトオブオーダー実行およびレジスタリネーミングを行う高性能汎用コアであり得る。独立のグラフィクスコアを持っていない別のプロセッサは、クラスAおよびクラスBの両方をサポートするもう1つの汎用インオーダーまたはアウトオブオーダーコアを含み得る。もちろん、一方のクラスの特徴事項は様々な実施形態において他方のクラスに実装されることもできる。高レベル言語で書かれたプログラムは、1)実行のためのターゲットプロセッサによりサポートされる1つまたは複数のクラスの命令だけを有する形、または2)全てのクラスの命令の様々な組み合わせを用いて書かれた代替ルーチンを有するとともに、現在そのコードを実行しているプロセッサによりサポートされる命令に基づいて実行するルーチンを選択する制御フローコードを有する形、を含む多様な実行可能の形に変換(例えばジャストインタイムにコンパイルされまたは静的にコンパイル)されるであろう。
典型的な特定ベクトルフレンドリ命令フォーマット 図17Aは、一実施形態による典型的な特定ベクトルフレンドリ命令フォーマットを示すブロック図である。図17Aは、フィールドの位置、サイズ、解釈、および順序、ならびにこれらのフィールドのうちの或るものの値を明示するという意味において特定的である特定ベクトルフレンドリ命令フォーマット1700を示す。特定ベクトルフレンドリ命令フォーマット1700はx86命令セットを拡張するために使用されることができ、従って、そのフィールドのうちの或るものは既存のx86命令セットおよびそのエクステンション(例えば、AVX)に使用されるフィールドと類似するかまたは同一である。このフォーマットは、エクステンションを有する既存のx86命令セットのプレフィックスコード化フィールド、実オペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、ディスプレースメントフィールド、およびイミディエイトフィールドと依然として矛盾しない。図17Aのフィールドが対応する図16Aまたは16Bのフィールドが具体的に説明される。
説明を目的として一般的ベクトルフレンドリ命令フォーマット1600と関連して特定ベクトルフレンドリ命令フォーマット1700について実施形態が記載されるけれども、本発明は特許請求の範囲に記載される場合を除いて特定ベクトルフレンドリ命令フォーマット1700に限定されないということが理解されるべきである。例えば、一般的ベクトルフレンドリ命令フォーマット1600は種々のフィールドについて多様なサイズが可能であると考えているが、特定ベクトルフレンドリ命令フォーマット1700は特定のサイズのフィールドを有するものとして示されている。特定の例を挙げると、データエレメント幅フィールド1664は特定ベクトルフレンドリ命令フォーマット1700において1ビットのフィールドとして図示されているが、本発明はそのようには限定されない(すなわち、一般的ベクトルフレンドリ命令フォーマット1600はデータエレメント幅フィールド1664の他のサイズを考慮している)。
一般的ベクトルフレンドリ命令フォーマット1600は、以下にリストされている次のフィールドを、図17Aに示されている順に含む。
EVEXプレフィックス(バイト0〜3)1702 − 4バイトの形にコード化される。
フォーマットフィールド1640(EVEXバイト0、ビット[7:0]) − 第1バイト(EVEXバイト0)は、フォーマットフィールド1640であり、0x62(本発明の一実施形態においてベクトルフレンドリ命令フォーマットを識別するために使用される一意の値)を含む。
第2バイト〜第4バイト(EVEXバイト1〜3)は、特定の機能を提供する数個のビットフィールドを含む。
REXフィールド1705(EVEXバイト1、ビット[7〜5]) − EVEX.Rビットフィールド(EVEXバイト1、ビット[7]〜R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]〜X)、および1657BEXバイト1、ビット[5]〜B)から成る。EVEX.R、EVEX.X、およびEVEX.Bビットフィールドは対応するVEXビットフィールドと同じ機能を提供し、1の補数の形を用いてコード化される、すなわち、ZMM0は1111Bにコード化され、ZMM15は0000Bにコード化される。命令の他のフィールドはレジスタインデックスの下位3ビットを当該技術において知られている通りにコード化するので(rrr、xxx、およびbbb)、Rrrr、Xxxx、およびBbbbはEVEX.R、EVEX.X、およびEVEX.Bを加えることにより形成され得る。
REX'フィールド1610 − これは、REX'フィールド1610の第1部分であり、拡張32レジスタセットの上位16または下位16をコード化するために使用されるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]〜R')である。本発明の一実施形態では、このビットは、以下に示される他のビットと共に、その実オペコードバイトが62であるBOUND命令から(よく知られているx86の32ビットモードで)区別するためにビット反転フォーマットで格納されるけれども、MOD R/Mフィールド(以下に記載される)においてMODフィールドにおける11という値を認めず、代替実施形態は、このビットと以下に示される他のビットとを反転フォーマットで格納しない。1という値は下位16個のレジスタをコード化するために使用される。換言すれば、R'RrrrはEVEX.R'、EVEX.R、および他のフィールドからの他のRRRを結合させることによって形成される。
オペコードマップフィールド1715(EVEXバイト1、ビット[3:0]〜mmmm) − その内容は、暗に示された先頭のオペコードバイト(0F、0F38、または0F3)をコード化する。
データエレメント幅フィールド1664(EVEXバイト2、ビット[7]〜W) − EVEX.Wという表記で表される。EVEX.Wは、データタイプのグラニュラリティ(サイズ)(32ビットのデータエレメントまたは64ビットのデータエレメント)を定義するために使用される。
EVEX.vvvv1720(EVEXバイト2、ビット[6:3]〜vvvv) − EVEX.vvvvの役割は、次のものを含み得る、すなわち、1)EVEX.vvvvは、反転(1の補数)形で明示される、第1ソースレジスタオペランドをコード化し、2つ以上のソースオペランドを有する命令のために有効である、2)EVEX.vvvvは、一定のベクトルシフトのために1の補数の形で明示される、デスティネーションレジスタオペランドをコード化する、または3)EVEX.vvvvはいかなるオペランドもコード化せず、このフィールドはリザーブされて1111bを含むべきである。EVEX.vvvvフィールド1720は、反転(1の補数)形で格納された第1ソースレジスタ指定子の4個の下位ビットをコード化する。命令に応じて、指定子サイズを32レジスタまで拡張するために余分の異なるEVEXビットフィールドが使用される。
EVEX.U1668クラスフィールド(EVEXバイト2、ビット[2]〜U) − もしEVEX.U=0ならば、それはクラスAまたはEVEX.U0を示し、もしEVEX.U=1ならば、それはクラスBまたはEVEX.U1を示す。
プレフィックスコード化フィールド1725(EVEXバイト2、ビット[1:0]〜pp − ベース操作フィールドのために追加のビットを提供する。EVEXプレフィックスフォーマットのレガシーSSE命令のためにサポートを提供するほかに、このフィールドはSIMDプレフィックスを圧縮するという長所を有する(SIMDプレフィックスを表現するために1バイトを必要とするのではなくて、EVEXプレフィックスは2ビットを必要とするだけである)。一実施形態では、SIMDプレフィックス(66H、F2H、F3H)をレガシーフォーマットおよびEVEXプレフィックスフォーマットの両方で使用するレガシーSSE命令をサポートするために、これらのレガシーSIMDプレフィックスは、SIMDプレフィックスコード化フィールドにコード化され、実行時に、デコーダのPLAに提供される前に(PLAがこれらのレガシー命令のレガシーフォーマットおよびEVEXフォーマットの両方を修正なしに実行できるように)レガシーSIMDプレフィックスに拡張される。より新しい命令はEVEXプレフィックスコード化フィールドの内容を直接オペコードエクステンションとして使用できるであろうけれども、或る実施形態は整合性を目的として同様の仕方で拡大するが、これらのレガシーSIMDプレフィックスによってさまざまな意味が明示されることを見越している。代替実施形態は、2ビットSIMDプレフィックスコード化をサポートし、従ってそのような拡大を必要としないようにPLAを設計し直すであろう。
アルファフィールド1652(EVEXバイト3、ビット[7]〜EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control、およびEVEX.Nとも称され、αを用いても図示される) − 前述のように、このフィールドはコンテキスト特有である。
ベータフィールド1654(EVEXバイト3、ビット[6:4]〜SSS、EVEX.S2−0、EVEX.r2−0、EVEX.rr1、EVEX.LL0、EVEX.LLBとも称され、βββを用いても図示される) − 前述のように、このフィールドはコンテキスト特有である。
REX'フィールド1710 − これはREX'フィールドの残りであり、拡張された32レジスタセットの上位16個または下位16個をコード化するために使用され得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]〜V')である。このビットはビット反転フォーマットで格納される。1の値は下位16個のレジスタをコード化するために使用される。換言すれば、EVEX.V'、EVEX.vvvvを結合させることによってV'VVVVが形成される。
ライトマスクフィールド1670(EVEXバイト3、ビット[2:0]〜kkk) − その内容は、前述のようにライトマスクレジスタのうちのレジスタのインデックスを指定する。本発明の一実施形態では、特定の値EVEX.kkk=000は特定の命令のためにライトマスクが使用されないことを暗に示す特別の挙動を有する(この挙動は、オール1に配線されたライトマスク、またはマスキングハードウェアを迂回するハードウェアの使用を含む様々な仕方で実装され得る)。
実オペコードフィールド1730(バイト4)は、オペコードバイトとも称される。オペコードの一部はこのフィールドで明示される。
MOD R/Mフィールド1740(バイト5)は、MODフィールド1742、Regフィールド1744、およびR/Mフィールド1746を含む。前述のように、MODフィールド1742の内容はメモリアクセス操作とメモリアクセス無し操作とを区別する。Regフィールド1744の役割は2つの事態、すなわち、デスティネーションレジスタオペランドもしくはソースレジスタオペランドをコード化するという事態、または、オペコードエクステンションとして扱われていかなる命令オペランドをコード化するためにも使用されないという事態、に要約され得る。R/Mフィールド1746の役割は、メモリアドレスを参照する命令オペランドをコード化すること、または、デスティネーションレジスタオペランドもしくはソースレジスタオペランドをコード化することを含み得る。
スケール(Scale)、インデックス(Index)、ベース(Base)(SIB)バイト(バイト6) − 前述のように、スケールフィールド1650の内容は、メモリアドレス生成のために使用される。SIB.xxx1754およびSIB.bbb1756 − これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関して前に言及されている。
ディスプレースメントフィールド1662A(バイト7〜10) − MODフィールド1742が10を含むとき、バイト7〜10はディスプレースメントフィールド1662Aであり、レガシー32ビットディスプレースメント(disp32)と同様に働いてバイトグラニュラリティで働く。
ディスプレースメントファクタフィールド1662B(バイト7) − MODフィールド1742が01を含むとき、バイト7はディスプレースメントファクタフィールド1662Bである。このフィールドの位置は、バイトグラニュラリティで働くレガシーx86命令セット8ビットディスプレースメント(disp8)の位置と同じである。disp8は符号拡張されるので−128と127バイトの間のオフセットでアドレス指定することができるに過ぎず、64バイトキャッシュラインに関してはdisp8は4つの真に有益な値−128、−64、0、および64、にセットされ得るにすぎない8ビットを使用し、もっと大きな範囲がしばしば必要なのでdisp32が使用されるが、disp32は4バイトを必要とする。disp8およびdisp32とは対照的に、ディスプレースメントファクタフィールド1662Bはdisp8の再解釈であり、ディスプレースメントファクタフィールド1662Bを使用するときには実際のディスプレースメントはメモリオペランドアクセスのサイズ(N)を掛けられたディスプレースメントファクタフィールドの内容によって決まる。このタイプのディスプレースメントはdisp8*Nと称される。このタイプのディスプレースメントは平均命令長を小さくする(ディスプレースメントのために単一バイトが、もっとはるかに大きな範囲を伴って、使用される)。このような圧縮されたディスプレースメントは、実際のディスプレースメントはメモリアクセスのグラニュラリティの倍数であり、従ってアドレスオフセットの冗長な下位ビットをコード化する必要はないという想定に基づいている。換言すれば、ディスプレースメントファクタフィールド1662Bはレガシーx86命令セットの8ビットディスプレースメントに取って代わる。従ってディスプレースメントファクタフィールド1662Bは、disp8がdisp8*Nに多重定義されることを唯一の例外として、x86命令セットの8ビットディスプレースメントと同様にコード化される(従ってModRM/SIBコード化規則に変更はない)。換言すれば、ハードウェアによるディスプレースメント値の解釈における変更(これはバイト単位のアドレスオフセットを得るためにディスプレースメントをメモリオペランドのサイズだけスケーリングすることを必要とする)を除けばコード化規則やコード化長における変更はない。
イミディエイトフィールド1672は、前述のように働く。
フルオペコードフィールド 図17Bは、本発明の一実施形態による、フルオペコードフィールド1674を構成する特定ベクトルフレンドリ命令フォーマット1700のフィールドを示すブロック図である。具体的には、フルオペコードフィールド1674は、フォーマットフィールド1640、ベース操作フィールド1642、およびデータエレメント幅(W)フィールド1664を含む。ベース操作フィールド1642は、プレフィックスコード化フィールド1725、オペコードマップフィールド1715、および実オペコードフィールド1730を含む。
レジスタインデックスフィールド 図17Cは、本発明の一実施形態によるレジスタインデックスフィールド1644を構成する特定ベクトルフレンドリ命令フォーマット1700のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド1644は、REXフィールド1705、REX'フィールド1710、MODR/M.regフィールド1744、MODR/M.r/mフィールド1746、VVVVフィールド1720、xxxフィールド1754、およびbbbフィールド1756を含む。
増補操作フィールド 図17Dは、本発明の一実施形態による増補操作フィールド1650を構成する特定ベクトルフレンドリ命令フォーマット1700のフィールドを示すブロック図である。クラス(U)フィールド1668が0を含むとき、それはEVEX.U0(クラスA 1668A)を意味し、このフィールドが1を含むとき、それはEVEX.U1(クラスB 1668B)を意味する。U=0でMODフィールド1742が11を含むとき(メモリアクセス無し操作を意味する)、アルファフィールド1652(EVEXバイト3、ビット[7]〜EH)はrsフィールド1652Aと解釈される。rsフィールド1652Aが1を含むとき(丸め1652A.1)、ベータフィールド1654(EVEXバイト3、ビット[6:4]〜SSS)は丸め制御フィールド1654Aと解釈される。丸め制御フィールド1654Aは、1ビットSAEフィールド1656および2ビット丸め制御フィールド1658を含む。rsフィールド1652Aが0を含むとき(データ変換1652A.2)、ベータフィールド1654(EVEXバイト3、ビット[6:4]〜SSS)は3ビットデータ変換フィールド1654Bと解釈される。U=0でMODフィールド1742が00、01、または10を含むとき(メモリアクセス操作を意味する)、アルファフィールド1652(EVEXバイト3、ビット[7]〜EH)はエビクションヒント(EH)フィールド1652Bと解釈されベータフィールド1654(EVEXバイト3、ビット[6:4]〜SSS)は3ビットデータ処理フィールド1654Cと解釈される。
U=1であるとき、アルファフィールド1652(EVEXバイト3、ビット[7]〜EH)はライトマスク制御(Z)フィールド1652Cと解釈される。U=1でMODフィールド1742が11を含むとき(メモリアクセス無し操作を意味する)、ベータフィールド1654の一部(EVEXバイト3、ビット[4]〜S0)はRLフィールド1657Aと解釈され、RLフィールドが1を含むとき(丸め1657A.1)ベータフィールド1654の残り(EVEXバイト3、ビット[6〜5]〜S2〜1)は丸め操作フィールド1659Aと解釈され、RLフィールド1657Aが0を含むとき(VSIZE1657A.2)ベータフィールド1654の残り(EVEXバイト3、ビット[6〜5]〜S2〜1)はベクトル長フィールド1659B(EVEXバイト3、ビット[6〜5]〜L1〜0)と解釈される。U=1でMODフィールド1742が00、01、または10を含むとき(メモリアクセス操作を意味する)、ベータフィールド1654(EVEXバイト3、ビット[6:4]〜SSS)はベクトル長フィールド1659B(EVEXバイト3、ビット[6〜5]〜L1〜0)およびブロードキャストフィールド1657B(EVEXバイト3、ビット[4]〜B)と解釈される。
典型的レジスタアーキテクチャ 図18は、本発明の一実施形態によるレジスタアーキテクチャ1800のブロック図である。図示されている実施形態では、512ビット幅である32個のベクトルレジスタ1810があり、これらのレジスタはzmm0からzmm31までとして参照される。下位16個のレジスタの下位256ビットはレジスタymm0〜16にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)はレジスタxmm0〜15にオーバーレイされる。特定ベクトルフレンドリ命令フォーマット1700は、下記の表4に示されているように、これらのオーバーレイされたレジスタファイル上で動作する。
換言すれば、ベクトル長フィールド1659Bは最大長および1つまたは複数の他のもっと短い長さのうちから選択をし、そのようなもっと短い長さの各々は先行する長さの半分であり、ベクトル長フィールド1659Bを有しない命令テンプレートは最大べクトクル長で作用する。さらに、一実施形態では、特定ベクトルフレンドリ命令フォーマット1700のクラスB命令テンプレートはパックドまたはスカラーの単精度/倍精度浮動小数点データおよびパックドまたはスカラーの整数データに対して作用する。スカラー演算はzmm/ymm/xmmレジスタにおいて最下位データエレメント位置に対して行われる演算であり、より高位のデータエレメント位置は、実施形態に依存してその命令の前にそれらのデータ位置があったのと同じままにされるかまたはゼロイングされる。
ライトマスクレジスタ1815 − 図示されている実施形態では、各々64ビットのサイズのライトマスクレジスタ(k0からk7まで)が8個ある。1つの代替実施形態では、ライトマスクレジスタ1815のサイズは16ビットである。前に記載されたように、本発明の一実施形態では、ベクトルマスクレジスタk0はライトマスクとしては使用され得ず、通常k0を示すコード化がライトマスクのために使用されるときには、そのコード化は0xFFFFのハードワイヤードライトマスクを選択して、その命令のためのライトマスキングを実際上無効にする。
汎用レジスタ1825 − 図示されている実施形態では、メモリオペランドをアドレス指定する既存のx86アドレス指定モードと共に使用される64ビットの汎用レジスタが16個ある。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8からR15までという名前で参照される。
MMXパックド整数フラットレジスタファイル1850がその上でエイリアシングされるスカラー浮動小数点スタックレジスタファイル(x87スタック)1845 − 図示されている実施形態では、x87スタックはx87命令セットエクステンションを用いて32/64/80−ビット浮動小数点データに対してスカラー浮動小数点演算を行うために使用される8エレメントのスタックであり、MMXレジスタは、64ビットのパックド整数データに対して演算を行うためにも、MMXレジスタおよびXMMレジスタの間で行われる幾つかの演算のためにオペランドを保持するためにも使用される。
代替実施形態は、もっと幅の広いまたは狭いレジスタを使用することができる。さらに、代替実施形態は、もっと多い、少ない、または異なるレジスタファイルおよびレジスタを使用することができる。
前述の明細書において、本発明はその特定の典型的実施形態と関連して記載されている。しかし、添付されている特許請求の範囲において明らかにされる発明のもっと広い趣旨および範囲から逸脱せずにそれらの実施形態に対して種々の改変および変更を加え得ることは明らかであろう。従って、明細書および図面は、限定的意味においてではなくて例示的意味において評価されるべきである。
本明細書に記載されているのは、特定の操作または動作を、それらの動作をシステムに行わせるべくソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせをシステムに組み込んだおかげで、行うように構成され得る1つまたは複数のコンピュータのシステムである。一実施形態では、処理装置は、第1の命令を、第1オペランドを含むデコード済み第1命令にデコードするデコード論理と、プレディケートレジスタスタック上のプレディケート値にアクセスするためにそのデコード済み第1命令を実行する実行ユニットとを含む。
一実施形態では、機械可読媒体は、少なくとも1つの機械により実行されるとその少なくとも1つの機械に、命令をデコード済み第1命令にデコードすること、プレディケートレジスタスタックから第1プレディケート値を取り出すこと、およびその第1プレディケート値に基づいてデコード済み第1命令を条件付きで実行することを含む操作を実行する少なくとも1つの集積回路を製造させるデータを格納する。
一実施形態では、プロセッサは、第1オペランドを有する命令をデコード済み第1命令にデコードすること、1つまたは複数のプレディケート値を含む第1オペランド値を取り出すこと、およびその1つまたは複数のプレディケート値をスタックの頂部識別子により示されるプレディケートスタック内の位置へプッシュすることを含む方法をこのプロセッサに実行させる命令を実行する。
本明細書に記載されている命令は、一定の操作を実行するように構成されているかまたは所定の機能性を有する特定用途向け集積回路(ASIC)などのハードウェアの特定の構成に関連している。そのような電子デバイスは、通例、1つまたは複数のストレージデバイス(非一時的機械可読記憶媒体)、ユーザ入力/出力デバイス(例えば、キーボード、タッチスクリーン、および/またはディスプレイ)、およびネットワークコネクションなどの1つまたは複数の他のコンポーネントに結合された1つまたは複数のプロセッサのセットを含む。プロセッサのセットと他のコンポーネントとの結合は、通例、1つまたは複数のバスおよびブリッジ(バスコントローラとも称される)による。ストレージデバイスとネットワークトラフィックを伝える信号とは、それぞれ、1つまたは複数の機械可読記憶媒体と機械可読通信媒体とを代表する。従って、所与の電子デバイスのストレージデバイスは、通例、その電子デバイスの1つまたは複数のプロセッサのセット上での実行のためのコードおよび/またはデータを格納する。
この詳細な記載の全体にわたって、説明の目的上、本発明の完全な理解を提供するために多数の具体的な細部が明らかにされた。しかし、これらの具体的細部の幾つかが無くても本発明を実施し得ることは明らかであろう。或る場合には、本発明の主題を不明瞭にするのを避けるために周知の構造および機能は精密には記載されなかった。従って、本発明の範囲および趣旨は、以下の特許請求の範囲の見地から判断されるべきである。
本願によれば、以下の各項目もまた開示される。
[項目1]
第1命令を、第1オペランドを含むデコード済み第1命令にデコードするデコード論理と、
プレディケートレジスタスタック上のプレディケート値にアクセスするために上記デコード済み第1命令を実行する実行ユニットと、
を含む処理装置。
[項目2]
上記第1命令は上記プレディケートレジスタスタック上のプレディケートレジスタの論理識別子を含む第1オペランドを含む、項目1に記載の処理装置。
[項目3]
上記プレディケートレジスタスタック上の上記プレディケートレジスタの上記論理識別子はスタックの頂部識別子に関する、項目2に記載の処理装置。
[項目4]
上記実行ユニットは、上記論理識別子により示されるプレディケート値を読み出して上記プレディケート値に基づいて上記デコード済み第1命令を条件付きで実行するものである、項目3に記載の処理装置。
[項目5]
上記実行ユニットは、上記論理識別子により示されるプレディケート値を読み出して上記プレディケート値に基づいて上記デコード済み第1命令を条件付きでコミットするものである、項目3または4に記載の処理装置。
[項目6]
上記論理識別子を物理的レジスタ識別子にリネームするレジスタリネーム論理をさらに含む、項目3から5のいずれか1項に記載の処理装置。
[項目7]
上記レジスタリネーム論理は、上記物理的レジスタ識別子を計算する算術論理ユニットと、上記スタックの頂部識別子を格納するためのスタックの頂部レジスタとを含む、項目6に記載の処理装置。
[項目8]
上記スタックの頂部識別子を格納するための1つまたは複数のシャドウスタックの頂部レジスタをさらに含む、項目7に記載の処理装置。
[項目9]
上記実行ユニットは、さらに、上記デコード済み第1命令の実行中に生成済みプレディケート値を生成して上記生成済みプレディケート値を上記プレディケートレジスタスタックへプッシュするものである、項目1から8のいずれか1項に記載の処理装置。
[項目10]
上記実行ユニットは、さらに、上記生成済みプレディケート値の上記プッシュの後にスタックの頂部インジケータを前進させるものである、項目9に記載の処理装置。
[項目11]
少なくとも1つの機械により実行されると、上記少なくとも1つの機械に、
命令をデコード済み第1命令にデコードすることと、
プレディケートレジスタスタックから第1プレディケート値を取り出すことと、
上記第1プレディケート値に基づいて上記デコード済み第1命令を条件付きで実行することと、
を実行させるための、コンピュータプログラム。
[項目12]
上記プレディケートレジスタスタックはスタックの頂部識別子を含み、上記プレディケートレジスタスタックから上記第1プレディケート値を取り出すことは上記スタックの頂部識別子からのオフセットに基づいて上記プレディケートレジスタスタックにおける論理位置を判定することを含む、項目11に記載のコンピュータプログラム。
[項目13]
上記少なくとも1つの機械に、
プレディケートレジスタリネーム論理を介して上記プレディケートレジスタスタックにおける上記論理位置の物理レジスタIDを判定することをさらに実行させるための、項目12に記載のコンピュータプログラム。
[項目14]
上記少なくとも1つの機械に、
少なくとも部分的に第2プレディケート値に基づいて投機的分岐実行を行うことをさらに実行させるための、項目11から13のいずれか1項に記載のコンピュータプログラム。
[項目15]
上記少なくとも1つの機械に、
上記プレディケートレジスタスタック上の第3プレディケート値を読み出すことと、上記第3プレディケート値に基づいて投機的分岐実行をアボートすることとをさらに実行させるための、項目14に記載のコンピュータプログラム。
[項目16]
上記少なくとも1つの機械に、
上記投機的分岐実行を行う前にスタックの頂部識別子をシャドウスタックの頂部レジスタに格納することをさらに実行させるための、項目14または15に記載のコンピュータプログラム。
[項目17]
上記少なくとも1つの機械に、
分岐投機ミスからの回復後に上記プレディケートレジスタスタックのための上記スタックの頂部識別子をシャドウスタックの頂部レジスタから復元することをさらに実行させるための、項目16に記載のコンピュータプログラム。
[項目18]
項目11から17のいずれか1項に記載のコンピュータプログラムを格納する、コンピュータ可読記録媒体。
[項目19]
第1オペランドを有する命令をデコード済み第1命令にデコードすることと、
1つまたは複数のプレディケート値を含む第1オペランド値を取り出すことと、
スタックの頂部識別子により示されるプレディケートスタック内の位置へ上記1つまたは複数のプレディケート値をプッシュすることと、
を含むプロセッサ実行される方法。
[項目20]
上記第1オペランドを上記1つまたは複数のプレディケート値にデコードすることをさらに含む、項目19に記載の方法。
[項目21]
上記命令は第1命令であり、上記スタックの頂部識別子は上記1つまたは複数のプレディケート値をプッシュした後に前進させられる、項目19または20に記載の方法。
[項目22]
上記命令は第2命令であり、上記スタックの頂部識別子は、上記1つまたは複数のプレディケート値を上記プレディケートスタックへプッシュした後に、前進させられない、項目19から21のいずれか1項に記載の方法。
[項目23]
上記命令は、上記第2命令をデコードする前に部分的に上記スタックの頂部識別子の位置に基づいて上記スタックの頂部識別子を改変する第3命令である、項目22に記載の方法。
[項目24]
上記第3命令は、上記第2命令によりプッシュされた上記1つまたは複数のプレディケート値のうちの最後のものに基づいて上記スタックの頂部識別子を改変するものである、項目23に記載の方法。
[項目25]
項目19から24のいずれか1項に記載の方法を実行するための手段を含む処理システム。