以下の説明では、多数の具体的な詳細が述べられている。しかしながら、本発明の実施形態は、これらの具体的な詳細なしに実施され得ることを理解されたい。他の例では、この説明の理解を曖昧にしないために、よく知られている回路、構造、および技法は詳細には示されていない。
明細書において「1つの実施形態(one embodiment)」、「一実施形態(an embodiment)」、「例示的な実施形態(an example embodiment)」などに言及することは、説明された実施形態が特定の特徴、構造、または特性を含むことができるが、すべての実施形態がその特定の特徴、構造、または特性を必ずしも含まなくてもよいことを示す。さらに、そのような句は必ずしも同じ実施形態を参照しているわけではない。さらに、ある実施形態に関連して特定の特徴、構造、または特性が説明されるとき、明示的に説明されているか否かによらず、他の実施形態に関連してそのような特徴、構造、または特性に影響を与えることは、当業者の知識の範囲内であると考えられる。
コンピュータなどの情報を処理するための装置は、1つまたは複数のプロセッサコアを備え得る。各プロセッサコアは、様々な回路、ハードウェア、構造、および他の特徴を有することができ、それぞれ単独で、または任意の数を組み合わせて特徴と呼ぶことができる。特徴は、様々な方法で実装および/または構成され、様々な技法を使用し、パフォーマンス、電力消費、および/または他の特性(例えば、該当する基準のほんのいくつかを挙げると、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数(IPC)、単位時間当たりの実行命令数、サービス品質、時間および/またはメモリ効率の向上)の様々な組み合わせで所望のレベルを達成することを試みる様々な方法の実行に関与する。
本発明の実施形態は、本明細書で説明されている特徴のうち1つまたは複数を含み得る。本明細書の図面および説明において、本発明を実施することができるアーキテクチャおよびシステムの一部の例を提供する。
本発明を実施することができるプロセッサコアは、異なる方法で、異なる目的で、そして異なるプロセッサで実装することができる。例えば、そのようなコアの実装形態としては、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主としてグラフィックスおよび/または科学技術(スループット)コンピューティング向けの専用コア、を挙げることができる。異なるプロセッサの実装形態としては、1)汎用コンピューティング向けの1つまたは複数の汎用インオーダコア、および/または汎用コンピューティング向けの1つまたは複数の汎用アウトオブオーダコアを備える中央処理装置(CPU)と、2)主としてグラフィックスおよび/または科学技術(スループット)コンピューティング向けの1つまたは複数の専用コアを備えるコプロセッサと、を挙げることができる。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、異なるコンピュータシステムアーキテクチャとしては、1)CPUとは別のチップ上のコプロセッサと、2)CPUと同じパッケージ内の別のダイ上のコプロセッサと、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、統合グラフィックスおよび/もしくは科学技術計算(スループット)ロジックなどの専用ロジック、または専用コアと呼ばれることもある)と、4)上記のCPU(アプリケーションコア(単数または複数)またはアプリケーションプロセッサ(単数または複数)と呼ばれることもある)、上記のコプロセッサ、および追加の機能を同じダイ上に含み得るシステムオンチップ(SoC)と、を挙げることができる。
例示的なコアアーキテクチャを次に説明し、その後に例示的なプロセッサおよびコンピュータアーキテクチャの説明を続ける。各プロセッサは1つまたは複数のコアを備えることができ、各コアおよび/またはコアの組み合わせは、様々なときに1つまたは複数のスレッド、プロセス、または他の命令シーケンスを実行するように設計(architected)および設計(designed)され得る。コアアーキテクチャおよび設計技法は、同時(または対称)マルチスレッディング(SMT)として知られる種類の手法のいずれか、または任意の他の手法に従って、複数のスレッドの同時実行を提供および/またはサポートすることができる。従って、以下に例として説明されるプロセッサコアを含む、本発明が実施され得るプロセッサコアは、後述され得るように、SMTをサポートするように設計(architected)および設計(designed)された様々な新規な特徴、および/またはSMTをサポートするように様々な新規な方法で修正された様々な既知の機能を含み得る。説明を容易にするために、本明細書におけるSMTという用語の意味は、マルチスレッディングに対する他の任意の手法(例えば、タイムスライシング)と組み合わせたSMTを含み得る。
上で言及され、以下でより詳細に説明されるように、本開示の実施形態は、例えば、該当する基準のほんのいくつかを挙げると、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数(IPC)、単位時間当たりの実行命令数、サービス品質、時間および/またはメモリ効率の向上を含む、様々な理由から望ましい場合がある。上に列挙され本明細書で説明される望ましい基準は例示的なものであり、本明細書で説明するように、本開示は、個別にまたは組み合わせて、上に列挙した理由のうちのいずれかのために望ましい場合があり、上で具体的に列挙されていない追加の理由のためにさらに望ましい場合がある。
さらに、上で言及され、以下でより詳細に説明されるように、本開示の実施形態は、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ(例えば、セキュリティコプロセッサ)、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワーキングアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含む、任意の種類のプロセッサまたは処理要素に適用され得る。1つまたは複数のプロセッサは、1つまたは複数のチップ上に実装することができる。1つまたは複数のプロセッサ3600は、例えば、BiCMOS、CMOS、またはNMOSなどのいくつかのプロセス技術のいずれかを使用して、1つまたは複数の基板の一部であってもよい、および/または1つまたは複数の基板の上に実装されてもよい。上に列挙され本明細書で説明されるプロセッサおよび処理装置は例示的なものであり、本明細書で説明するように、本開示は、任意のプロセッサまたは処理装置に適用可能である。
さらに、上で言及され、以下でより詳細に説明されるように、本開示の実施形態は、例えば、x86命令セット(場合により、新しいバージョンで追加された拡張を含む)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEONなどの任意の追加の拡張を伴う)、IBMの「Power」命令セット、またはRISCおよびCISCの両方の命令セットを含む他の任意の命令セットを含む、多種多様な命令セットおよび命令セットアーキテクチャを使用して、プロセッサまたは処理要素に適用できる。上に列挙され本明細書で説明される命令セットおよび命令セットアーキテクチャは例示的なものであり、本明細書で説明するように、本開示は、任意の命令セットおよび命令セットアーキテクチャに適用可能である。
例示的なコアアーキテクチャ
インオーダおよびアウトオブオーダコアのブロック図
図1Aは、本発明の実施形態による、例示的なインオーダパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインと、の両方を示すブロック図である。図1Bは、本発明の実施形態による、プロセッサに含まれる、インオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアと、の両方を示すブロック図である。図1A〜図1B中の実線のボックスは、インオーダパイプラインおよびインオーダコアを示すが、オプションで追加されている破線のボックスは、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様はアウトオブオーダの態様のサブセットであると仮定して、アウトオブオーダの態様について説明する。
図1Aでは、プロセッサパイプライン100は、フェッチステージ102と、長さデコードステージ104と、デコードステージ106と、割り当てステージ108と、リネーミングステージ110と、スケジューリング(ディスパッチまたは発行としても知られる)ステージ112と、レジスタ読み取り/メモリ読み取りステージ114と、実行ステージ116と、ライトバック/メモリ書き込みステージ118と、例外処理ステージ122と、コミットステージ124と、を含む。
図1Bは、実行エンジンユニット150に結合されたフロントエンドユニット130を備えるプロセッサコア190を示し、フロントエンドユニット130および実行エンジンユニット150は両方ともメモリユニット170に結合されている。コア190は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってよい。さらなる別のオプションとして、コア190は、例えば、ネットワークコアまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィック処理ユニット(GPGPU)コア、グラフィックコアなどの専用コアであってよい。例えば、上で説明したように、コア190は、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ(例えば、セキュリティコプロセッサ)、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワーキングアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含むセットの任意のメンバであり得る。
フロントエンドユニット130は、マイクロopキャッシュ133および命令キャッシュユニット134に結合された分岐予測ユニット132を有し、命令キャッシュユニット134は、命令トランスレーションルックアサイドバッファ(TLB)136に結合され、TLB 136は、命令フェッチユニット138に結合され、命令フェッチユニット138は、デコードユニット140に結合される。デコードユニット140(またはデコーダ)は、命令をデコードし、元の命令からデコードされた、または元の命令を反映する、または元の命令から導出された、1つまたは複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成し得る。マイクロオペレーション、マイクロコードエントリポイント、マイクロ命令などは、少なくともマイクロopキャッシュ133に格納され得る。デコードユニット140は、様々な異なるメカニズムを使用して実装され得る。
好適なメカニズムの例としては、限定はされないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコード読み出し専用メモリ(ROM)などが挙げられる。1つの実施形態では、コア190は、特定のマクロ命令のためのマイクロコードを(例えば、デコードユニット140に、またはそうでなければフロントエンドユニット130内部に)格納するマイクロコードROMまたは他の媒体を備える。マイクロopキャッシュ133およびデコードユニット140は、実行エンジンユニット150内のリネーミング/アロケータユニット152に結合されている。様々な実施形態において、133などのマイクロopキャッシュは、追加的または代替的に、opキャッシュ、u−opキャッシュ、uopキャッシュ、またはμopキャッシュと呼ばれる場合があり、マイクロオペレーションは、マイクロop、u−op、uop、およびμopと呼ばれる場合がある。
実行エンジンユニット150は、リタイアメントユニット154および1つまたは複数のスケジューラユニット(単数または複数)156のセットに結合されたリネーミング/アロケータユニット152を有する。スケジューラユニット(単数または複数)156は、リザベーションステーション、中央命令ウィンドウなどを含む、任意の数の異なるスケジューラを表す。スケジューラユニット(単数または複数)156は、物理レジスタファイル(単数または複数)ユニット(単数または複数)158に結合される。物理レジスタファイル(単数または複数)ユニット158のそれぞれは、1つまたは複数の物理レジスタファイルを表し、それらのうちの異なる1つ1つが、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態(例えば、次に実行される命令のアドレスである命令ポインタ)などの1つまたは複数の異なるデータタイプを格納する。1つの実施形態では、物理レジスタファイル(単数または複数)ユニット158は、ベクトルレジスタユニットと、書き込みマスクレジスタユニットと、スカラレジスタユニットと、を含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。レジスタリネーミングおよびアウトオブオーダ実行が(例えば、リオーダバッファ(単数または複数)およびリタイアメントレジスタファイル(単数または複数)を使用する、将来のファイル(単数または複数)、履歴バッファ(単数または複数)およびリタイアメントレジスタファイル(単数または複数)を使用する、レジスタマップおよびレジスタプールを使用するなどして)実装され得る様々な方法を示すために、物理レジスタファイル(単数または複数)ユニット(単数または複数)158には、リタイアメントユニット154が重なっている。リタイアメントユニット154および物理レジスタファイル(単数または複数)ユニット(単数または複数)158は、実行クラスタ(単数または複数)160に結合される。実行クラスタ(単数または複数)160は、1つまたは複数の実行ユニット162のセットおよび1つまたは複数のメモリアクセスユニット164のセットを含む。実行ユニット162は、様々なオペレーション(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に行うことができる。一部の実施形態が特定の機能または機能のセットに専用に割り当てられたいくつかの実行ユニットを含んでもよい一方で、他の実施形態は、1つのみの実行ユニットを含んでもよいし、それらすべてがすべての機能を実行する複数の実行ユニットを含んでもよい。スケジューラユニット(単数または複数)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つまたは複数の命令セット(例えば、x86命令セット(新しいバージョンで追加されたなんらかの拡張を含む)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEONなどの任意の追加の拡張を伴う)、IBMの「Power」命令セット、またはRISCおよびCISCの両方の命令セットを含む他の任意の命令セット)をサポートすることができる。1つの実施形態では、コア190は、パックドデータ命令セット拡張(例えば、AVX、AVX2、AVX−512)をサポートするためのロジックを備え、それにより、多くのマルチメディアアプリケーションによって使用されるオペレーションがパックドデータを使用して実行されることを可能にする。
コアは、マルチスレッディング(2つ以上の並列なオペレーションまたはスレッドのセットの実行)をサポートすることができ、タイムスライスマルチスレッディング、SMT(例えば、単一の物理コアは、物理コアが同時にマルチスレッディングを行うスレッドのそれぞれに対し、論理コアを提供する)、またはこれらの組み合わせ(例えば、タイムスライスフェッチおよびデコード、ならびにインテル(登録商標)ハイパースレッディング技術などのそれら以降のSMT)を含む様々な方法でこれを実行してよいことを理解されたい。
レジスタリネーミングは、アウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングは、インオーダアーキテクチャで使用され得ることを理解されたい。図示されたプロセッサの実施形態はまた、別個の命令キャッシュユニット134およびデータキャッシュユニット174ならびに共有L2キャッシュユニット176を有するが、代替的な実施形態は、命令およびデータの両方のための例えば、レベル1(L1)内部キャッシュなどの単一の内部キャッシュまたは複数のレベルの内部キャッシュを有してもよい。一部の実施形態では、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュと、の組み合わせを備えてもよい。あるいは、キャッシュ(単数または複数)のすべてが、コアおよび/またはプロセッサの外部にあってもよい。
具体的な例示的なコアアーキテクチャ
図2Aおよび図2Bは、より具体的な例示的コアアーキテクチャのブロック図を示す。このコアは、チップ内の(同じタイプおよび/または異なるタイプの他のコアを含む)いくつかの論理ブロックのうちの1つである。論理ブロックは、用途に応じて、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を介して、一部の固定機能ロジック、メモリI/Oインターフェース、および他の必要なI/Oロジックと通信する。
図2Aは、本発明の実施形態による、オンダイ相互接続ネットワーク202への接続とレベル2(L2)キャッシュ204のローカルサブセットとを伴う、シングルプロセッサコアのブロック図である。1つの実施形態では、命令デコーダ200は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ206は、スカラユニットおよびベクトルユニットにメモリをキャッシュする低レイテンシアクセスを可能にする。(設計を簡略化するための)1つの実施形態では、スカラユニット208およびベクトルユニット210は、別個のレジスタセット(それぞれ、スカラレジスタ212およびベクトルレジスタ214)を使用し、それらの間で転送されたデータはメモリに書き込まれた後、レベル1(L1)キャッシュ206からリードバックされるが、本発明の代替的な実施形態は、異なる手法を使用し得る(例えば、単一のレジスタセットを使用する、またはデータが書き込みおよびリードバックされることなく、2つのレジスタファイル間で転送されることを可能にする通信パスを含む)。
L2キャッシュのローカルサブセット204は、1つのプロセッサコアにつき1つのローカルサブセットとして別個のローカルサブセットに分割される、グローバルL2キャッシュの一部である。各プロセッサコアは、プロセッサコア自身のL2キャッシュのローカルサブセット204へのダイレクトアクセスパスを有する。プロセッサコアによって読み出されたデータは、そのL2キャッシュサブセット204に格納され、かつ他のプロセッサコアがそれ自身のローカルL2キャッシュサブセットにアクセスするのと並列に迅速にアクセス可能である。プロセッサコアによって書き込まれたデータは、自身のL2キャッシュサブセット204に格納され、必要な場合、他のサブセットからフラッシュされる。リングネットワークは、共有データのためのコヒーレンシを確保する。リングネットワークは、プロセッサコア、L2キャッシュ、および他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能にするように双方向である。各リングデータパスは、一方向当たり1012ビット幅である。
図2Bは、本発明の実施形態による、図2Aのプロセッサコアの一部の拡大図である。図2Bは、L1キャッシュ206のL1データキャッシュ206A部分、ならびにベクトルユニット210およびベクトルレジスタ214に関するさらなる詳細を含む。具体的には、ベクトルユニット210は、16ビット幅ベクトル処理ユニット(VPU)(16ビット幅ALU 228を参照)であり、整数命令、単精度浮動命令、および倍精度浮動命令のうちの1つまたは複数を実行する。VPUは、スウィズルユニット220を用いるレジスタ入力のスウィズル、数値変換ユニット222A〜Bを用いる数値変換、およびメモリ入力での複製ユニット224を用いる複製をサポートする。書き込みマスクレジスタ226は、結果として得られるベクトル書き込みのプレディケートを可能にする。
具体的な例示的なアウトオブオーダコアアーキテクチャ
図3は、本発明の実施形態による、プロセッサに含まれ得る例示的なアウトオブオーダ発行/実行プロセッサコアのブロック図である。図3では、プロセッサコア300は、フロントエンドユニット310と、整数ユニット320と、FPユニット330と、ロードストアユニット340と、レベル2(L2)キャッシュユニット350と、を備える。図3は、例示の目的で提示したものであり、そのため、本発明の実施形態により可能となる多くの手法のうちの1つに従って構成および命名された様々なユニットを示す。任意の1つまたは複数の実施形態を、1つまたは複数の方法で例示することができる。図3に示される各ユニットは、実施形態の他の表現における他のユニットに含まれ得る回路および/または構造を含み得る。例えば、フロントエンドユニット310は、図4のフェッチユニット400などのフェッチユニットと、図5のデコードユニット500などのデコードユニットと、を有するものとして追加的または代替的に図示および説明されてもよいし、整数ユニット320、FPユニット330、およびロードストアユニット340のいずれかまたはすべてが、追加的または代替的に、1つまたは複数の実行ユニットとして別々にまたはまとめて図示および説明されてもよい、などである。さらに、コア300内の様々なユニットは様々な方法で結合することができ、従って、便宜上、異なる図では、異なるより大きなユニット内にユニットが示されることがあり、例えば、特定のユニットは、第1の図では第1のより大きいユニット内に、第2の図では第2のより大きいユニット内に示される場合がある。
図3では、フロントエンドユニット310は、分岐予測ユニット311と、マイクロオペレーションキャッシュ(opキャッシュ)ユニット312と、命令キャッシュ(iキャッシュ)ユニット313と、デコードユニット314と、マイクロオペレーション(マイクロop)キューユニット315と、を有する。分岐予測ユニット311は、平均分岐遅延を低減するために、分岐ターゲットバッファ(BTB)などの分岐予測回路を含み、opキャッシュユニット312およびiキャッシュユニット313に結合されている。opキャッシュユニット312は、命令に関連するマイクロopをキャッシュするopキャッシュを含む。iキャッシュ313ユニットは、一実施形態では64K、4ウェイのiキャッシュであり得る、命令をキャッシュするためのiキャッシュを含む。iキャッシュユニット313は、デコード対象のキャッシュされた命令を提供するためにデコードユニット314に結合される。デコードユニット314は、命令デコーダなどの、命令をデコードするためのデコード回路を含む。一実施形態では、1クロックサイクルにつき最大4つの命令が、フロントエンドユニット310によってフェッチされ、デコードユニット314によってデコードされ得る。opキャッシュユニット312およびデコードユニット314は、マイクロopキューユニット315にそれぞれ結合されて、マイクロopをマイクロopキューユニット315にロードするための2つの経路を提供する。マイクロopキュー315はマイクロopキューを含み、マイクロopキューは、一実施形態では、1サイクル当たり6つのマイクロopを1つまたは複数の実行ユニットにディスパッチすることができる。
また図3において、整数ユニット320は、整数リネーミングユニット321と、整数スケジューラユニット322A、322B、322C、322D、322E、および322F(まとめて、整数スケジューラユニット322)と、整数物理レジスタファイル323と、算術論理ユニット(ALU)324A、324B、324C、および324D(まとめてALU 324)と、アドレス生成ユニット(AGU)325Aおよび325B(まとめて、AGU 325)と、を有する。整数リネーミングユニット321は、マイクロopキューユニット315に結合されて、ALU 324および/またはAGU 325のうちの1つまたは複数によって全体的または部分的に実行される1つまたは複数のマイクロopを受信する。整数リネーミングユニット321はレジスタリネーミング回路を含み、整数スケジューラユニット322にも結合され、整数スケジューラユニット322は整数物理レジスタファイル323に結合されて、整数レジスタリネーミングを提供する。整数スケジューラユニット322は、ALU 324および/またはAGU 325のうちの1つまたは複数によって全体的にまたは部分的に実行されるマイクロopをスケジューリングするためのスケジューリング回路を含む。整数物理レジスタファイル323は、一実施形態において168個の物理整数レジスタを含み得る物理整数レジスタのファイルを含む。ALU 324およびAGU 325のそれぞれが、マイクロopの実行において入力として使用される値を受信する、および/またはマイクロopの実行の出力としての値を提供するために、物理レジスタファイル323に結合される。
また図3において、FPユニット330は、FPリネーミングユニット331と、FPスケジューラユニット332と、FPレジスタファイル333と、FP乗算器334Aおよび334B(まとめて、FP乗算器334)と、FP加算器335Aおよび335B(まとめて、FP加算器335)と、を有する。FPリネーミングユニット331は、マイクロopキューユニット315に結合されて、FP乗算器334および/またはFP加算器335のうちの1つまたは複数によって全体的または部分的に実行される1つまたは複数のマイクロopを受信する。FPリネーミングユニット331はレジスタリネーミング回路を含み、FPスケジューラユニット332にも結合され、FPスケジューラユニット332はFPレジスタファイル333に結合されて、FPレジスタリネーミングを提供する。FPスケジューラユニット332は、FP乗算器334および/またはFP加算器335のうちの1つまたは複数によって全体的にまたは部分的に実行されるマイクロopをスケジューリングするためのスケジューリング回路を含む。FP乗算器334およびFP加算器335のそれぞれが、マイクロopの実行において入力として使用される値を受信する、および/またはマイクロopの実行の出力としての値を提供するために、FPレジスタファイル333に結合される。
また図3において、ロードストアユニット340は、ロードストアキューユニット341と、データキャッシュ(dキャッシュ)ユニット342と、を有する。ロードストアキューユニット341は、ロードオペレーションおよび/またはストアオペレーションのためのメモリアドレスを受信するためにAGU 325に結合された、任意の数のロードキューおよび/またはストアキューを含むことができ、一実施形態では1クロックサイクル当たり2回のロードおよび1回のストアを提供する。dキャッシュユニット342は、一実施形態において、マイクロopの実行によって生成され、マイクロopの実行に使用されるデータを受信して提供するために、整数物理レジスタファイル323、FPレジスタファイル333、およびロードストアキューユニット341に結合された、一実施形態では32K、8ウェイのレベル1(L1)dキャッシュであり得る、データをキャッシュするためのdキャッシュを含む。
また図3において、L2キャッシュユニット350は、一実施形態では512K、8ウェイのキャッシュであり得る、命令およびデータをキャッシュするためのL2キャッシュを含む。
図4は、本発明の実施形態による、図3のコア300などのプロセッサコアおよび/またはプロセッサに含まれ得る例示的なフェッチユニットのブロック図である。図4において、フェッチユニット400は、次プログラムカウント(PC)ユニット410と、トランスレーションルックアサイドバッファ(TLB)ユニット420と、ハッシュパーセプトロンユニット430と、BTBリターンスタック間接ターゲットアレイ(ITA)ユニット440と、物理要求キューユニット450と、マイクロタグユニット460と、iキャッシュユニット470と、を含む。
図5は、本発明の実施形態による、図3のコア300などのプロセッサコアおよび/またはプロセッサに含まれ得る例示的なデコードユニットのブロック図である。図5において、デコードユニット500は、命令バイトバッファユニット510と、ピックユニット520と、デコードユニット530と、opキャッシュユニット540と、マイクロopキューユニット550と、マイクロコード読み出し専用メモリ(ROM)ユニット560と、スタックエンジンメモリファイル(memfile)ユニット570と、ディスパッチユニット580と、を含む。
図6は、本発明の実施形態による、図3のコア300などのプロセッサコアおよび/またはプロセッサに含まれ得る例示的な整数実行ユニットのブロック図である。図6において、整数実行ユニット600は、マップユニット610と、リタイアキューユニット620と、算術論理キュー(ALQ)ユニット630A、630B、630C、および630D(まとめて、ALQ 630)と、アドレス生成キュー(AGQ)ユニット640Aおよび640B(まとめて、AGQ 640)と、物理レジスタファイルユニット650と、転送マルチプレクサ(mux)ユニット660と、ALU 670A、670B、670C、および670D(まとめて、ALU 670)と、AGU 680Aおよび680B(まとめて、AGU 680)と、ロードストアユニット690と、を含む。
図7は、本発明の実施形態による、図3のコア300などのプロセッサコアまたはプロセッサに含まれ得る例示的なFP実行ユニットのブロック図である。図7において、FP実行ユニット700は、非スケジューリング可能マイクロopキューユニット710と、スケジューリング可能マイクロopキューユニット720と、リタイアキューユニット730と、FP変換ユニット740と、FP物理レジスタファイル750と、転送muxユニット760と、FP乗算器770Aおよび770B(まとめて、FP乗算器770)と、FP加算器780Aおよび780B(まとめて、FP加算器780)と、を含む。
図8は、本発明の実施形態による、図3のコア300などのプロセッサコアまたはプロセッサに含まれ得る例示的なロード/ストアユニットのブロック図である。図8において、ロード/ストアユニット800は、ロードキューユニット810と、ロードパイプピックユニット811Aおよび811B(まとめて、ロードピックユニット811)と、TLBユニット812Aおよび812B(まとめて、TLBユニット812)と、データパイプユニット813Aおよび813B(まとめて、データパイプユニット813)と、ストアキューユニット820と、プリフェッチユニット821と、ストアパイプピックユニット822と、ストアパイプユニット823と、ストアコミットユニット824と、L1/L2 TLBおよびデータキャッシュタグアレイ830と、L1データキャッシュ840と、メモリアドレスバッファ850と、書き込み結合バッファ860と、を含む。
図9は、本発明の実施形態による、プロセッサにおけるSMTをサポートする、図3のコア300などの例示的なアウトオブオーダ発行/実行プロセッサコアのブロック図である。図9において、プロセッサコア900は、フロントエンドユニット910と、整数ユニット920と、FPユニット930と、ロードストアユニット940と、L2キャッシュユニット950と、リタイアユニット960と、を備える。フロントエンドユニット910は、分岐予測ユニット911と、opキャッシュユニット912と、iキャッシュユニット913と、デコードユニット914と、マイクロopキューユニット915と、命令TLBユニット916と、を有する。整数ユニット920は、整数リネーミングユニット921と、整数スケジューラユニット922と、整数物理レジスタファイル923と、ALU 924と、AGU 925と、を有する。FPユニット930は、FPリネーミングユニット931と、FPスケジューラユニット932と、FPレジスタファイル933と、FP乗算器934Aおよび934B(まとめて、FP乗算器934)と、FP加算器935Aおよび935B(まとめて、FP加算器935)と、を有する。ロードストアユニット940は、ロードキューユニット941Aおよびストアキューユニット941B(まとめて、ロードストアキューユニット941)と、データキャッシュ(dキャッシュ)ユニット942と、TLBユニット943と、を有する。リタイアユニット960はリタイアキューを有する。
SMT機能
本発明の実施形態によるプロセッサコアは、SMTをサポートするための様々な機能を含み得る。いくつかのそのような機能は、以下の非限定的な例を用いて別々に説明されるが、実施形態はそのような機能の任意の組み合わせを含み得る。
リソースの静的分割
一部の例示的な実施形態によれば、プロセッサコアは、SMT静的分割機能をサポートし得る。スレッドは、同時マルチスレッディングパイプラインにおいて静的に共有される使用可能なリソースに割り当てられ得る。一部の実施形態では、パフォーマンスおよび効率を向上させるために、パターンベースのアルゴリズムなどの技法を用いてスレッドを使用可能なリソースに割り当てることができる。一部の実施形態では、この機能は、静的に共有されたリソースについてスレッド間でより効率的なリソース共有を提供することによってコンピュータシステムを改善することができる。この機能はまた、本来であればSMT静的分割のために未使用のままである、使用可能なリソースを使用し得る。
例えば、パイプライン内のリソースを、2つのスレッド間で、例えば50%−50%で、静的に共有して、両方のスレッドに等しいリソースを提供してもよい。一部の実施形態では、例えばワークロードパターンに基づいて、異なるパーセンテージの使用可能なリソースを各スレッドに割り当てることができる。例えば、一方のスレッドが他方のスレッドよりも長時間ストールしていて、他方のスレッドに使用可能な空のエントリがある場合は、静的に共有されたリソースにおいて使用可能なエントリを空のままにするのではなく、ストールしているスレッドに割り当てることができる。
一部の実施形態では、複数のスレッドが同様のパターンを有することができる。そのような場合、スレッドどうしが同順位の場合に、優先順位方式を使用してリソースを割り当てることができる。同順位における順位付けは、例えば、ランダムな選択、低い番号のスレッドを選択すること、高い番号のスレッドを選択すること、および/または交互にスレッドを選択することによって実行されてもよい。
図10は、一部の実施形態による、プロセッサに含まれ得るSMT静的分割機能を示すブロック図である。SMT静的分割機能は、例示的な実施形態によるパターン検出ブロック1001を含み得る。第1のリソースおよび第2のリソースは、スレッドT0およびスレッドT1に静的に割り当てられ得る。ルックアップパターンベーステーブルが、スレッドT1が長いストール時間を有すると判定し得る。すると、パターン検出ブロックは、パターン入力に基づいて、静的に割り当てられたリソースを調整できる。例えば、T1に静的に割り当てられていた第2のリソースをT0に割り当てることができる。
一部の実施形態では、動的分割が、命令トランスレーションルックアサイドバッファ(ITLB)などの他の静的に分割されたリソースに適用され得る。
図11は、一部の実施形態による、プロセッサによって実行され得るSMT静的分割機能のための方法を示す流れ図である。一部の実施形態では、本方法は、ボックス1101に示すように、パイプライン内の静的に共有されたリソースについてスレッドのストールなどのパターンを検出するステップを含み得る。本方法は、ボックス1102に示すように、共有を調整すること(例えば、50−50での共有)をさらに含み得る。本方法の調整するステップは、例えば、ストールの長さまたは他のなんらかの同様のイベントに基づき得る。
一部の実施形態のまとめ
一実施形態は、第1および第2の静的に分割されたリソースのうちの少なくとも一方に関するパターンを検出し、第1および第2の静的に分割されたリソースのうちの少なくとも一方の割り当てを調整する、ように構成されたプロセッサを含み得る。
一部の実施形態では、以下のうちの1つまたは複数が当てはまる。パイプラインの第1および第2の静的に分割されたリソースは、同時マルチスレッディングパイプラインのリソースであり得る。第1および第2の静的に分割されたリソースは、第1および第2のスレッドの間で割り当てられてもよい。プロセッサは、パターンベースのアルゴリズムに基づいて、第1および第2のリソースを割り当てるようにさらに構成され得る。プロセッサは、1つまたは複数のワークロードパターンに基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるようにさらに構成され得る。プロセッサは、第1および第2のスレッドのうちの少なくとも一方が他方よりも長い期間ストールしているか否かの判定に基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるようにさらに構成され得る。プロセッサは、使用可能な第1および第2のリソースのうちの少なくとも一方に関連付けられた空のエントリがあるか否かの判定に基づいて、第1および第2のリソースのうちの少なくとも一方を割り当て、使用可能な第1および第2のリソースのうちの少なくとも一方に第1および第2のスレッドのうちの少なくとも一方を割り当てる、ようにさらに構成され得る。プロセッサは、優先順位方式に基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるようにさらに構成され得る。プロセッサは、ルックアップパターンベーステーブルに基づいて、ストールが発生したか否かを判定するようにさらに構成され得る。第1および第2の静的に分割されたリソースは、命令トランスレーションルックアサイドバッファ(ITLB)のリソースであり得る。
一実施形態は、第1および第2の静的に分割されたリソースに関するパターンのうちの少なくとも一方を検出するステップと、第1および第2の静的に分割されたリソースのうちの少なくとも一方の割り当てを調整するステップと、を含む方法を含み得る。
一部の実施形態では、以下のうちの1つまたは複数が当てはまる。第1および第2の静的に分割されたリソースは、同時マルチスレッディングパイプラインのリソースであり得る。第1および第2の静的に分割されたリソースは、第1および第2のスレッドの間で割り当てられてもよい。本方法は、パターンベースのアルゴリズムに基づいて、第1および第2のリソースを割り当てるステップをさらに含み得る。本方法は、1つまたは複数のワークロードパターンに基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるステップをさらに含み得る。本方法は、第1および第2のスレッドのうちの少なくとも一方が他方よりも長い期間ストールしているか否かの判定に基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるステップをさらに含み得る。本方法は、使用可能な第1および第2のリソースのうちの少なくとも一方に関連付けられた空のエントリがあるか否かの判定に基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるステップと、使用可能な第1および第2のリソースのうちの少なくとも一方に第1および第2のスレッドのうちの少なくとも一方を割り当てるステップと、をさらに含み得る。本方法は、優先順位方式に基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるステップをさらに含み得る。本方法は、ルックアップパターンベーステーブルに基づいて、ストールが発生したか否かを判定するステップをさらに含み得る。第1および第2の静的に分割されたリソースは、命令トランスレーションルックアサイドバッファ(ITLB)のリソースであり得る。
一実施形態は、プロセッサによって実行された場合にプロセッサに方法を実行させる少なくとも1つの命令を格納する非一時的機械可読媒体であって、方法が、第1および第2の静的に分割されたリソースに関するパターンのうちの少なくとも一方を検出するステップと、第1および第2の静的に分割されたリソースのうちの少なくとも一方の割り当てを調整するステップと、を含む、非一時的機械可読媒体を含み得る。
一部の実施形態では、以下のうちの1つまたは複数が当てはまる。第1および第2の静的に分割されたリソースは、同時マルチスレッディングパイプラインのリソースであり得る。第1および第2の静的に分割されたリソースは、第1および第2のスレッドの間で割り当てられてもよい。本方法は、パターンベースのアルゴリズムに基づいて、第1および第2のリソースを割り当てるステップをさらに含み得る。本方法は、1つまたは複数のワークロードパターンに基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるステップをさらに含み得る。本方法は、第1および第2のスレッドのうちの少なくとも一方が他方よりも長い期間ストールしているか否かの判定に基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるステップをさらに含み得る。本方法は、使用可能な第1および第2のリソースのうちの少なくとも一方に関連付けられた空のエントリがあるか否かの判定に基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるステップと、使用可能な第1および第2のリソースのうちの少なくとも一方に第1および第2のスレッドのうちの少なくとも一方を割り当てるステップと、をさらに含み得る。本方法は、優先順位方式に基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるステップをさらに含み得る。本方法は、ルックアップパターンベーステーブルに基づいて、ストールが発生したか否かを判定するステップをさらに含み得る。第1および第2の静的に分割されたリソースは、命令トランスレーションルックアサイドバッファ(ITLB)のリソースであり得る。
一実施形態は、メモリとプロセッサとを有するシステムであって、プロセッサが、第1および第2の静的に分割されたリソースのうちの少なくとも一方に関するパターンを検出し、第1および第2の静的に分割されたリソースのうちの少なくとも一方の割り当てを調整する、ように構成される、システムを含み得る。
一部の実施形態では、以下のうちの1つまたは複数が当てはまる。第1および第2の静的に分割されたリソースは、同時マルチスレッディングパイプラインのリソースであり得る。第1および第2の静的に分割されたリソースは、第1および第2のスレッドの間で割り当てられてもよい。プロセッサは、パターンベースのアルゴリズムに基づいて、第1および第2のリソースを割り当てるようにさらに構成され得る。プロセッサは、1つまたは複数のワークロードパターンに基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるようにさらに構成され得る。プロセッサは、第1および第2のスレッドのうちの少なくとも一方が他方よりも長い期間ストールしているか否かの判定に基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるようにさらに構成され得る。プロセッサは、使用可能な第1および第2のリソースのうちの少なくとも一方に関連付けられた空のエントリがあるか否かの判定に基づいて、第1および第2のリソースのうちの少なくとも一方を割り当て、使用可能な第1および第2のリソースのうちの少なくとも一方に第1および第2のスレッドのうちの少なくとも一方を割り当てる、ようにさらに構成され得る。プロセッサは、優先順位方式に基づいて、第1および第2のリソースのうちの少なくとも一方を割り当てるようにさらに構成され得る。プロセッサは、ルックアップパターンベーステーブルに基づいて、ストールが発生したか否かを判定するようにさらに構成され得る。第1および第2の静的に分割されたリソースは、命令トランスレーションルックアサイドバッファ(ITLB)のリソースであり得る。
リソースの競合的共有
本発明の実施形態によれば、プロセッサコアは、リソースの競合的共有によってSMTをサポートすることができる。コア内の回路、構造、または他のリソースは、スレッドが優先順位を争うというポリシーに基づいて、複数のスレッドによって共有され得る。図9の実施形態では、競合ポリシーに基づいて、スレッドどうしまたはスレッド間で以下のリソース、すなわち、分岐予測ユニット911と、opキャッシュユニット912と、iキャッシュユニット913と、デコードユニット914と、命令TLBユニット916と、整数リネーミングユニット921と、整数スケジューラユニット922と、整数物理レジスタファイル923と、ALU 924と、AGU 925と、FPリネーミングユニット931と、FPスケジューラユニット932と、FPレジスタファイル933と、FP乗算器934Aおよび934Bと、FP加算器935Aおよび935Bと、ロードキューユニット941Aと、dキャッシュユニット942と、TLBユニット943と、のそれぞれを共有することができる。
整数リネーミングユニット921、整数スケジューラユニット922、FPリネーミングユニット931、FPスケジューラユニット932、またはロードキューユニット941A内のバッファなどのこれらのリソースの一部は、エントリ、サブユニット、または別々にスレッドに割り当てられ得る他の部分を有し得る。便宜上、このタイプのリソースは、分割可能リソースを呼ぶことがあり、このタイプの割り当てを部分割り当てと呼ぶことがある。ALU 924の各個々のALU、AGU 925の各個々のAGU、FP乗算器934A、FP乗算器934B、FP加算器935A、またはFP加算器935Bなどの他のものは、特定のクロックサイクル、オペレーションを完了するための連続したクロックサイクルセット、またはオペレーションの他の時間または期間に対して完全に割り当てられるだけでよい。便宜上、このタイプのリソースを分割不可能リソースと呼ぶことがあり、このタイプの割り当てを完全割り当てと呼ぶことがある。
図12は、本発明の実施形態による、プロセッサに含まれ得るリソースアロケータ1200を示すブロック図である。リソースアロケータ1200は、コア回路、構造、ユニット、もしくはリソース、またはそれらの任意の部分を特定のスレッドに割り当てるための回路、構造、および/またはハードウェアを含み得る。実施形態では、リソースアロケータ1200は、単一のリソースおよび/または複数のリソースを割り当てるように実装され得る。いずれの場合も、プロセッサまたはプロセッサコアは、リソースアロケータ1200の1つまたは複数の実施形態の複数の例を含み、それぞれが、任意の1つまたは複数のリソースを割り当てるためであり、それぞれが、図12に示されるブロックのうちの任意の1つまたは複数を含み、それぞれが、任意の1つまたは複数のリソース割り当てポリシー、またはリソース割り当てポリシーの組み合わせを実装するためであり得る。
リソースアロケータ1200は、トラッカ回路1210と、ポリシー回路1220と、決定回路1230と、アロケータ回路1240と、を含み得る。トラッカ回路は、パフォーマンス履歴回路1212と、使用履歴回路1214と、スレッド状態回路1216と、のうちの1つまたは複数を含み得る。ポリシー回路1220は、電力ポリシー回路1222と、公平性ポリシー回路1224と、パフォーマンス保証ポリシー回路1226と、スループットポリシー回路1228と、のうちの1つまたは複数を含み得る。実施形態は、割り当てられるリソースの種類および数、ならびに所望のポリシーに従って、様々な方法でこれらの回路のそれぞれを含み、組み合わせ、および/または実装することができる。
パフォーマンス履歴回路1212は、1つまたは複数の方法でスレッドのパフォーマンスを監視、追跡、記録、および/または報告するための回路、構造、および/またはハードウェアを含み得る。一実施形態では、パフォーマンス履歴回路1212は、スレッドごとに1つまたは複数のパフォーマンスの尺度、例えばある時間または期間の尺度ごとにリタイアされた命令などをカウントするために、スレッドごとに1つまたは複数のハードウェアカウンタ1212Aを含み得る。例えば、時間または期間の尺度は、クロックサイクルのウィンドウであり得、(例えば、文字「N」によって表される)ウィンドウのサイズは、固定(例えば、ハードワイヤード)、(例えば、ハードウェアまたはファームウェアによって)構成可能、および/または(例えば、ソフトウェアによって)プログラム可能であり得る。一実施形態では、Nは1024であり得る。
パフォーマンス履歴回路1212はまた、カウンタ1212Aによって測定された、スレッドのパフォーマンスを1つまたは複数の他のスレッドと比較するための1つまたは複数のハードウェア比較器1212Bを含み得る。例えば、N回のクロックサイクルの各ウィンドウの終わりに、ハードウェア比較器1212Bは、ウィンドウの間に第1のスレッドによってリタイアされた命令の数を第2のスレッドによってリタイアされた命令の数と比較することができ、カウンタ1212Aは、次のウィンドウのためにリセットされ得る。その次のウィンドウの間、前のウィンドウからの比較の結果は、後述するように、ポリシー回路1220および/または決定回路1230によって使用され得る。実施形態では、比較結果は、スレッドのランク付け(例えば、どのスレッドがより多くの命令をリタイアしたか)であり得、比較結果は、比率(例えば、第2のスレッドによってリタイアされた命令の数に対する、第1のスレッドによってリタイアされた命令の数の比率の計算または近似計算)、および/または他の任意の測定値または計算であり得る。
実施形態は、スレッドごとに複数のカウンタを含み得る。例えば、スレッドごとに2つの別々のカウンタ、すなわち、「電力を大量消費する」と識別された命令を追跡するための第1のカウンタ(例えば、その実行は、通常、他の命令よりも多くの電力を消費する)と、他の(すなわち、電力を消費しない)命令をカウントするための第2のカウンタと、を設けることができる。例えば、AVX−512 FMA命令(下記で定義)は、電力を大量消費するものとして識別され、別のカウンタを使用して(場合によっては、他の電力を大量消費する命令と共に)追跡され得る。
使用履歴回路1214は、スレッドによるリソースの使用を監視、追跡、記録、および/または報告するための回路、構造、および/またはハードウェアを含み得る。一実施形態では、使用履歴回路1214は、スレッドごとにリソースの使用量をカウントするための1つまたは複数のハードウェアカウンタ1214Aと、スレッド間でリソースの使用量を比較するための1つまたは複数のハードウェア比較器1214Bと、を含み得る。カウンタ1214Aおよび/または比較器1214Bからの1つまたは複数の結果は、後述するように、ポリシー回路1220および/または決定回路1230によって使用され得る。
例えば、バッファなどの分割可能なリソースの場合、カウンタは、スレッドによって占有されているエントリの数をカウントすることができる。さらなる計算および/または割り当ての決定に使用されるカウントは、任意の時点で報告または直接使用される現在のカウントであり得る、および/またはウィンドウ(例えば、上記のようなサイズNのウィンドウ)にわたって平均された平均カウントであり得る。分割不可能なリソースの場合、さらなる計算および/または割り当ての決定に使用されるカウントは、時間平均カウントまたは時間加重カウントであり得る(例えば、ある時間ウィンドウ内でスレッドがリソースを使用した回数であり、カウントが各時間ウィンドウの終わりでリセットされ得る、またはカウントが各時間ウィンドウの終わりに(2のべき乗で除算されるように)右にシフトされ得る)。これらのカウントのいずれかに基づく結果は、カウント自体、スレッドごとのカウントのランキング、および/またはスレッド間のカウントの比率などである。
スレッド状態回路1216は、スレッドの状態を監視、追跡、記録、および/または報告するための回路、構造、および/またはハードウェアを含み得る。例えば、スレッド状態回路1216は、長いレイテンシのL2/L3または他のキャッシュミスなどに起因してスレッドが現在ストールしているか否かを報告することができる。
トラッカ回路1210によって報告された履歴情報および現在の情報は、ポリシー回路1220によって指定されたポリシーに従って、リソース割り当ての計算および決定において使用され得る。これらのポリシーは、電力消費、公平性、最低保証パフォーマンス、およびスループットの考慮自己を含む、任意の優先順位による、任意の組み合わせの任意の種類のポリシーを含み得る。
電力ポリシー回路1222は、1つまたは複数の電力ポリシーを実装するため、かつ/または1つまたは複数のポリシーに基づいてスレッドを優先もしくは選択するための回路、構造、および/またはハードウェアを含み得る。これらのポリシーは、任意の優先順位で、任意の組み合わせの任意の種類の電力ポリシーを含み得る。例えば、電力を大量消費する命令の使用が少ないスレッドまたは進行が遅いスレッドを、優先または選択することができる。
公平性ポリシー回路1224は、1つまたは複数の公平性ポリシーを実装するため、かつ/または1つまたは複数のポリシーに基づいてスレッドを優先もしくは選択するための回路、構造、および/またはハードウェアを含み得る。例えば、最近のパフォーマンスが低い、分割可能なリソースの占有率が低い、および/または分割不可能なリソースの最近の使用量が少ないスレッドを優先または選択することができる。
パフォーマンス保証ポリシー回路1226は、1つもしくは複数の最低保証パフォーマンスポリシーを実装するため、かつ/または1つまたは複数のポリシーに基づいてスレッドを優先もしくは選択するための回路、構造、および/またはハードウェアを含み得る。例えば、特定の最小閾値未満で進行しているスレッドは、パフォーマンス保証ポリシーに基づいて優先または選択され得る。
スループットポリシー回路1228は、1つまたは複数のスループットポリシーを実装するため、かつ/または1つもしくは複数のポリシーに基づいてスレッドを優先もしくは選択するための回路、構造、および/またはハードウェアを含み得る。例えば、他のスレッドよりも相対的に多いまたは速い進行をしているスレッドが優先または選択され得る。
電力ポリシー回路1222、公平性ポリシー回路1224、パフォーマンス保証ポリシー回路1226、スループットポリシー回路1228、および/または他の任意のポリシー回路のいずれかまたはすべては、ポリシーを有効にする、修正する(例えば、ポリシーまたはポリシーによって使用される1つまたは複数の基準もしくは尺度の重要性を強める、または弱める)、または他の方法でポリシーに動的に影響する、情報および/または基準を格納する個々の格納場所またはレジスタを含み得る。
実施形態は、追加的または代替的に、この情報のための中央または共有の格納場所またはレジスタを含み得る。個々またはグループの格納場所のうちの任意の1つまたは複数が、ポリシーレジスタ1220Aとして表される。実施形態では、任意のそのような格納場所またはレジスタは、(例えば、ハードウェアまたはファームウェアによって)構成可能または(例えば、ソフトウェアによって)プログラム可能であり得る。
決定回路1230は、トラッカ回路1210からの情報、結果、および/または信号、ならびにポリシー回路1220からの情報、基準、および/または信号を受信して、使用、重み付け、優先順位付け、フィルタリング、比較、結合、オーバーライド、または他の方法で処理して、リソースを割り当てるスレッドを選択することになり得る、および/またはその決定に関する1つまたは複数の指示または信号を選択することになり得る情報を生成するための回路、構造、および/またはハードウェアを含み得る。例えば、スループットポリシーおよび最低保証パフォーマンスを含む実施形態では、スループットポリシーは、第1のスレッドを優先することができるが、決定回路1230は、その優先をオーバーライドし、第2のスレッドを選択して、第2のスレッドの最低保証パフォーマンスを満たすのを助け得る。実施形態では、リソースアロケータ1200は、決定回路1230の1つまたは複数の実施形態の複数の例を含むことができ、それぞれが、任意のリソースまたはリソースのグループに関し、それぞれが、任意の1つまたは複数のリソース割り当てポリシーまたはリソース割り当てポリシーの組み合わせを実装するためであり、それぞれが、後述の任意の1つまたは複数の手法または手法の組み合わせを実装するためであり、それぞれが、任意の手法または手法の組み合わせに従ってスレッドを選択するように構成またはプログラムされ得る(例えば、ポリシー回路1220の別個の各ポリシー回路から受信した情報に異なる重みを割り当ててもよい)。
分割不可能なリソースを含む実施形態では、決定回路1230は、分割不可能なリソースの動的完全割り当てに関してどのスレッドを優先するかを決定し得る。分割可能なリソースを含む実施形態では、決定回路1230は、分割可能なリソースおよび/もしくは分割可能なリソースの一部の動的部分割り当てに関してどのスレッドを優先するか、ならびに/または分割可能なリソースのうちのどのくらいを(例えば、バッファエントリの数)スレッドに割り当てるかを決定し得る。
一実施形態では、決定回路1230は、1つまたは複数の情報、決定結果、インジケータ、および/または信号を、例えば、アロケータ回路1240によってアクセス可能な1つまたは複数の格納場所に格納すること、および/またはアロケータ回路1240に直接送信することによって、生成または提供することができ、これにより、任意の数の他のスレッドよりも優先される単一のスレッドを識別することができる、または2つ以上のスレッドの優先順位ランキングを指定することができる。
アロケータ回路1240は、決定回路1230からの情報、決定結果、インジケータ、および/または信号を受信して、例えば第1のスレッドが第2のスレッドよりも優先されるという決定回路1230からの決定に応答することによって、リソース割り当て決定に対して、作用、確定、および/または実施して、リソース(例えば、リソース1250)の割り当ての全部または一部をそのスレッドに向けるように1つまたは複数の信号を送信するための回路、構造、および/またはハードウェアを含み得る。そうするために、アロケータ回路1240は、特定のスレッドが分割不可能なリソースを使用することを可能にする、または分割可能なリソースの1つまたは複数の部分を使用することを可能にする、ディスパッチまたは他の回路に、1つまたは複数の信号(例えば、「go」信号1240C)を送信し得る。
実施形態では、アロケータ回路1240はまた、リソースを使用するための1つまたは複数の要求(例えば、要求1240Aおよび1240B)を受信し得る。要求は、信号、ならびに/あるいはスレッドから、リソースから、および/またはスレッドもしくはリソースに関連する任意の種類のディスパッチ回路からの任意の他の種類の指示であり得る。実施形態では、アロケータ回路1240は、例えば決定回路1230からの情報、決定結果、インジケータ、および/または信号を使用して、スレッド要求どうしまたはスレッド要求間で選択または調停して、どのスレッドにリソースを割り当てるかを決定することができる。
実施形態では、アロケータ回路1240は、追加の情報または制約に従うかまたはそれらに基づいて、決定回路1230からの割り当て決定に作用するための回路、構造、および/またはハードウェアを含み得る。例えば、アロケータ回路1240は、各スレッドに専用である分割可能なリソースの部分の数(例えば、バッファのエントリの数)を示す、スレッドごとに1つのレジスタを有する、固定、構成可能、またはプログラム可能な格納場所またはレジスタのセット1242と、各スレッドによって現在使用されている各部分の数を追跡するための、スレッドごとに1つのカウンタのセット1244と、スレッドがその全割り当てを使用しているか否かをチェックするための、スレッドごとに1つの比較器のセット1246と、を含み得る。アロケータ回路1240は、比較器1246からの結果を使用して、決定回路1230からの割り当て決定を受け入れるか拒否することができる。代替的または追加的に、一実施形態は、どのスレッド(または複数のスレッド)がリソースのその部分を使用することを許可されているかを示すために、分割可能なリソースの各部分(例えば、バッファ内の各エントリのビットまたはフィールド)についてインジケータのための格納場所を含むことができ、アロケータ回路1240は、決定回路1230から割り当て決定を受け入れるか拒否するために、格納されたインジケータを使用することができる。
一部の実施形態のまとめ
本発明の一実施形態は、トラッカ回路、ポリシー回路、決定回路、およびアロケータ回路を含む、リソースアロケータおよびリソースを備えるプロセッサを含み得る。トラッカ回路は、リソースのパフォーマンス履歴、リソースの使用履歴、およびスレッド状態のうちの少なくとも1つを追跡することができる。ポリシー回路は、リソース割り当てポリシーを実施するためのポリシー情報を提供することができる。決定回路は、トラッカ回路の出力およびポリシー情報に基づいて、スレッドを選択することができる。アロケータ回路は、決定回路の出力を使用して、リソースをスレッドに割り当てることができる。
リソースのアルゴリズム的な競合的共有
プロセッサコアは、実施形態による、アルゴリズム的なSMT機能をサポートし得る。一部の実施形態では、この機能は、パイプライン内で競合的に共有されている使用可能なリソースへのスレッド割り当ての問題を解決する。一部の実施形態では、この問題は優先順位アルゴリズムを使用して解決される。一部の実施形態では、パイプライン内の分岐予測ブロックは、競合的に共有されてもよく、効率的なエントリ割り当てのために優先順位アルゴリズムを使用することができる。一部の実施形態では、優先順位アルゴリズムは、ハードウェアおよび/またはソフトウェアで実装することができる。一部の実施形態では、スレッド割り当ては、2つ以上のスレッドを用いて実行され得る。一部の実施形態では、スレッド割り当ては、最も効率的なスレッドをパイプライン内の使用可能なリソースに割り当てて、最も高いクロック当たりの命令数(IPC)および/またはパイプラインスループットを達成することができる。一部の実施形態では、この機能は、使用可能なリソースへのスレッド割り当てを優先順位付けするための最もよく知られているアルゴリズムを提供することができる。スレッドの数が増える、および/またはスレッド間のコンテキストの切り替わりが増えるのに伴って、リソースを効率的に割り当てることで、この機能はさらなる利益をもたらし得る。
図13は、実施形態による、プロセッサ1300に含まれ得るアルゴリズム的なSMT機能を示すブロック図である。優先順位アルゴリズムハードウェアは、例えば、動的挙動に基づく管理を含み得る。優先順位ハードウェアは、イベント検出ブロック1301と、パフォーマンスカウンタフラグブロック1302と、デッドロック防止ブロック1303と、命令タイプ/クラスブロック1304と、のうちの少なくとも1つを含み得る。イベント検出ブロック1301は、例えば、削除(nuke)、クリアの頻度(例えば、JEClearおよびCRClear)、BRの頻度、割り込み、およびキャッシュミスなどの1つまたは複数のイベントを検出することができる。パフォーマンスカウンタフラグブロック1302は、例えば、以下、すなわち、リタイアされた命令、コードミス、L2/L3ミスのうちの1つまたは複数をカウントすることができる。デッドロック防止ブロック1303は、デッドロック状態を防止することができる。命令タイプ/クラスブロック1304は、例えば、浮動小数点命令をリタイアさせることを可能にし得る。一部の実施形態では、上記のうちの1つまたは複数をソフトウェアおよび/またはファームウェアで実装することができる。加えて、一部の実施形態では、ソフトウェアは、オペレーティングシステム(OS)および/または仮想マシンマネージャ(VMM)が優先順位を設定することを可能にし得る。
一部の実施形態では、優先順位アルゴリズムは、機械学習などの学習機能を有することができる。学習機能は、よりインテリジェントなスレッド選択を提供することができ、例えば収集されている履歴データおよび/またはパターンに基づいて適応的であり得る。
一部の実施形態では、同様のイベントを伴う複数のスレッドがあり得る。一部の実施形態では、スレッド間で同順位がある場合に優先順位方式を使用することができる。同順位における順位付けは、例えば、ランダムな選択、低い番号のスレッドを選択すること、高い番号のスレッドを選択すること、および/または交互にスレッドを選択することによって実行されてもよい。
図14は、実施形態による、プロセッサによって実行され得るアルゴリズム的なSMT機能のための方法を示す流れ図である。本方法は、1401に示すように、パイプライン内の競合的共有リソースが使用可能か否かを判定するステップを含み得る。本方法は、1402に示すように、スレッドに優先順位付けするステップをさらに含み得る。例えば、複数のイベントがある場合、スレッドが優先順位付けされ得る。本方法は、1403に示すように、最も優先順位の高いイベントまたはフラグを選ぶステップをさらに含み得る。例えば、最も優先順位の高いイベントまたはフラグは、割り当てられたアルゴリズムに基づいて選択され得る。本方法は、1404に示すように、リソースをスレッドに割り当てるステップをさらに含み得る。例えば、優先順位アルゴリズムに基づいてリソースを最も望ましいスレッドに割り当てることができる。
図15は、実施形態による、プロセッサに含まれ得るアルゴリズム的なSMT機能を示すブロック図である。図15は、アルゴリズム的な優先順位ブロックに基づく競合的に共有されるリソースへのスレッド、例えばスレッドT0の割り当てを示す。例えば、機能は、例えば図14のボックス1401に従って、競合的に共有されているリソース1501が使用可能であると判定することができる。アルゴリズム的な優先順位ブロック1502は、例えば図14のボックス1402に従って、複数のイベント、例えばイベントEvt1およびEvt2がある場合に、優先順位付けすることができる。アルゴリズム的な優先順位ブロック1502はまた、例えば図14のボックス1403に従って、割り当てられたアルゴリズムに基づいて、最も優先順位の高いイベントまたはフラグを選ぶことができる。アルゴリズム的な優先順位ブロック1502はまた、優先順位アルゴリズムに基づいて、リソース、例えばリソース1501を最も無効なスレッド、例えばスレッドT0に割り当てることができる。
一部の実施形態では、優先順位アルゴリズムは、整数リネーミングおよび/または浮動小数点リネーミングアルゴリズムを含み得る。優先順位アルゴリズムは、削除、クリア、および割り込みなどのイベントに基づくイベントベースの判定を含むことができる。優先順位アルゴリズムは、パフォーマンスカウンタを含むことができ、パフォーマンスカウンタは、リタイアされた命令およびコードミスなどの出現をカウントすることができる。優先順位アルゴリズムは、物理レジスタを制限すること、デッドロック防止を使用すること、および/またはキャッシュミスを判定することを含み得る。優先順位アルゴリズムは、命令タイプおよびクラスを判定することを含み得る。優先順位アルゴリズムは、レジスタを割り当てること、例えば、より多くの浮動小数点レジスタを浮動小数点ワード線に割り当てることを含み得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。例えば、優先順位アルゴリズムは、オペレーティングシステムおよび/または仮想マシンマネージャが優先順位を提供することを可能にし得る。優先順位アルゴリズムは、例えば動的挙動に基づくハードウェアによって管理された優先順位を含み得る。
一部の実施形態では、優先順位アルゴリズムは、分岐予測アルゴリズムを含み得る。一部の実施形態では、分岐予測アルゴリズムは、以下、すなわち、クリアの頻度(例えば、JEClearおよびCRClear)、分岐の頻度(例えば、すべて、成立、不成立)、分岐以外の特性(例えば、リタイアされた命令、L2/L3ミス)のうちの1つまたは複数に基づいて、分岐ターゲットバッファ(BTB)の動作を制御し得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。例えば、優先順位アルゴリズムは、オペレーティングシステムおよび/または仮想マシンマネージャが優先順位を提供することを可能にし得る。優先順位アルゴリズムは、例えば動的挙動に基づくハードウェアによって管理された優先順位を含み得る。図16は、例示的な実施形態による分岐予測優先順位アルゴリズムを実施するブロック図を示す。分割ロジック1602は、クリアの頻度(例えば、JEClearおよびCRClear)、分岐の頻度(例えば、すべて、成立、不成立)、分岐以外の特性(例えば、リタイアされた命令、L2/L3ミス)などの入力1603を受信し得る。分割ロジック1602は、入力1603に基づいて、分岐ターゲットバッファ(BTB)1601のエントリを割り当てることができる。
一部の実施形態のまとめ
一実施形態は、使用可能な競合的に共有されるリソースを識別し、優先順位アルゴリズムに少なくとも部分的に基づいてスレッドを選択し、選択されたスレッドを使用可能な競合的に共有されるリソースに割り当てる、ように構成されたプロセッサを含み得る。
一部の実施形態では、以下のうちの1つまたは複数が当てはまる。一部の実施形態では、プロセッサは、分岐予測を競合的に共有し、エントリ割り当てのために優先順位アルゴリズムを使用する、ようにさらに構成され得る。一部の実施形態では、プロセッサは、優先順位アルゴリズムに基づいて、第2のスレッドを割り当てるようにさらに構成され得る。一部の実施形態では、プロセッサは、1クロック当たりの命令(IPC)およびパイプラインスループットのうちの少なくとも1つを高めるように、パイプライン内の使用可能なリソースに最も効率的なスレッドを割り当てるようにさらに構成され得る。一部の実施形態では、プロセッサは、使用可能なリソースへのスレッド割り当てを優先順位付けするための最もよく知られたアルゴリズムを提供するようにさらに構成され得る。一部の実施形態では、プロセッサは、2つ以上のイベントが検出された場合に優先順位付けするようにさらに構成され得る。一部の実施形態では、プロセッサは、割り当てられたアルゴリズムに基づいて、最も優先順位の高いイベントおよびフラグのうちの少なくとも1つを選択するようにさらに構成され得る。
一部の実施形態では、プロセッサは、イベント検出ブロックと、パフォーマンスカウンタフラグブロックと、デッドロック防止ブロックと、命令タイプ/クラスブロックと、を含み得る。一部の実施形態では、イベント検出ブロックは、削除、クリアの頻度、BRの頻度、割り込み、およびキャッシュミスのうちの少なくとも1つを検出することができる。一部の実施形態では、パフォーマンスカウンタフラグブロックは、リタイアされた命令、コードミス、およびL2/L3ミスのうちの少なくとも1つをカウントすることができる。一部の実施形態では、デッドロック防止ブロックは、デッドロック状態を防止することができる。一部の実施形態では、命令タイプ/クラスブロックは、浮動小数点命令をリタイアさせることを可能にし得る。一部の実施形態では、プロセッサは、オペレーティングシステム(OS)および仮想マシンマネージャ(VMM)のうちの少なくとも1つが優先順位を設定することを可能にするようにさらに構成され得る。一部の実施形態では、優先順位アルゴリズムは、少なくとも1つの学習機能を有し得る。一部の実施形態では、少なくとも1つの学習機能は、履歴データおよびワークロードパターンのうちの少なくとも1つに基づいて適応的であり得る。
一部の実施形態では、優先順位アルゴリズムは、整数リネーミングアルゴリズムおよび浮動小数点リネーミングアルゴリズムのうちの少なくとも一方を含み得る。優先順位アルゴリズムは、イベントベースの判定を含むことができる。イベントベースの判定は、削除、クリア、および割り込みのうちの1つまたは複数を含むことができる。優先順位アルゴリズムは、パフォーマンスカウンタを含むことができる。パフォーマンスカウンタは、出現数をカウントし得る。出現は、リタイアされた命令、およびコードミスのうちの1つまたは複数であり得る。優先順位アルゴリズムは、物理レジスタを制限することと、デッドロック防止を使用することと、キャッシュミスを判定することと、のうちの1つまたは複数を含み得る。優先順位アルゴリズムは、命令タイプおよびクラスを判定することを含み得る。優先順位アルゴリズムは、レジスタを割り当てることを含み得る。レジスタを割り当てることは、より多くの浮動小数点レジスタを浮動小数点ワード線に割り当てることを含み得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの1つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に基づき得る。
一部の実施形態では、優先順位アルゴリズムは、分岐予測アルゴリズムを含み得る。一部の実施形態では、分岐予測アルゴリズムは、以下、すなわち、クリアの頻度、分岐の頻度、分岐以外の特性のうちの1つまたは複数に少なくとも部分的に基づいて、分岐ターゲットバッファ(BTB)の動作を制御し得る。クリアは、JEClearおよびCRClearのうちの1つまたは複数を含むことができる。分岐の頻度は、すべて、成立、不成立のうちの1つまたは複数を含むことができる。分岐以外の特性は、リタイアされた命令、L2/L3ミスのうちの1つまたは複数を含むことができる。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの1つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に少なくとも部分的に基づき得る。優先順位アルゴリズムは、入力を受信するために分割ロジックを使用することを含み得る。入力は、クリアの頻度、分岐の頻度、分岐以外の特性のうちの1つまたは複数を含むことができる。分割ロジックは、入力に基づいて、分岐ターゲットバッファ(BTB)のエントリを割り当てることができる。
一実施形態は、使用可能な競合的に共有されるリソースを識別するステップと、優先順位アルゴリズムに少なくとも部分的に基づいてスレッドを選択するステップと、選択されたスレッドを使用可能な競合的に共有されるリソースに割り当てるステップと、を含む方法を含み得る。
一部の実施形態では、以下のうちの1つまたは複数が当てはまる。一部の実施形態では、本方法は、分岐予測を競合的に共有するステップと、エントリ割り当てのために優先順位アルゴリズムを使用するステップと、をさらに含み得る。一部の実施形態では、本方法は、優先順位アルゴリズムに基づいて、第2のスレッドを割り当てるステップをさらに含み得る。一部の実施形態では、本方法は、1クロック当たりの命令(IPC)およびパイプラインスループットのうちの少なくとも1つを高めるように、パイプライン内の使用可能なリソースに最も効率的なスレッドを割り当てるステップをさらに含み得る。一部の実施形態では、本方法は、使用可能なリソースへのスレッド割り当てを優先順位付けするための最もよく知られたアルゴリズムを提供するステップをさらに含み得る。一部の実施形態では、本方法は、2つ以上のイベントが検出された場合に優先順位付けするステップをさらに含み得る。一部の実施形態では、本方法は、割り当てられたアルゴリズムに基づいて、最も優先順位の高いイベントおよびフラグのうちの少なくとも1つを選択するステップをさらに含み得る。
一部の実施形態では、本方法は、イベント検出ブロックと、パフォーマンスカウンタフラグブロックと、デッドロック防止ブロックと、命令タイプ/クラスブロックと、を使用するステップをさらに含み得る。一部の実施形態では、本方法は、イベント検出ブロックを使用して、削除、クリアの頻度、BRの頻度、割り込み、およびキャッシュミスのうちの少なくとも1つを検出する、ステップをさらに含み得る。一部の実施形態では、本方法は、パフォーマンスカウンタフラグブロックを使用して、リタイアされた命令、コードミス、およびL2/L3ミスのうちの少なくとも1つをカウントする、ステップをさらに含み得る。一部の実施形態では、本方法は、デッドロック防止ブロックを使用して、デッドロック状態を防止する、ステップをさらに含み得る。一部の実施形態では、本方法は、命令タイプ/クラスブロックを使用して、浮動小数点命令をリタイアさせることを可能にする、ステップをさらに含み得る。一部の実施形態では、本方法は、オペレーティングシステム(OS)および仮想マシンマネージャ(VMM)のうちの少なくとも1つが優先順位を設定することを可能にするステップをさらに含み得る。一部の実施形態では、優先順位アルゴリズムは、少なくとも1つの学習機能を有し得る。一部の実施形態では、少なくとも1つの学習機能は、履歴データおよびワークロードパターンのうちの少なくとも1つに基づいて適応的であり得る。
一部の実施形態では、優先順位アルゴリズムは、整数リネーミングアルゴリズムおよび浮動小数点リネーミングアルゴリズムのうちの少なくとも一方を含み得る。優先順位アルゴリズムは、イベントベースの判定を含むことができる。イベントベースの判定は、削除、クリア、および割り込みのうちの1つまたは複数を含むことができる。優先順位アルゴリズムは、パフォーマンスカウンタを含むことができる。パフォーマンスカウンタは、出現数をカウントし得る。出現は、リタイアされた命令、およびコードミスのうちの1つまたは複数であり得る。優先順位アルゴリズムは、物理レジスタを制限することと、デッドロック防止を使用することと、キャッシュミスを判定することと、のうちの1つまたは複数を含み得る。優先順位アルゴリズムは、命令タイプおよびクラスを判定することを含み得る。優先順位アルゴリズムは、レジスタを割り当てることを含み得る。レジスタを割り当てることは、より多くの浮動小数点レジスタを浮動小数点ワード線に割り当てることを含み得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの1つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に基づき得る。
一部の実施形態では、優先順位アルゴリズムは、分岐予測アルゴリズムを含み得る。一部の実施形態では、分岐予測アルゴリズムは、以下、すなわち、クリアの頻度、分岐の頻度、分岐以外の特性のうちの1つまたは複数に少なくとも部分的に基づいて、分岐ターゲットバッファ(BTB)の動作を制御し得る。クリアは、JEClearを含むことができる。分岐の頻度は、すべて、成立、不成立のうちの1つまたは複数を含むことができる。分岐以外の特性は、リタイアされた命令、L2/L3ミスのうちの1つまたは複数を含むことができる。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの1つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に少なくとも部分的に基づき得る。優先順位アルゴリズムは、入力を受信するために分割ロジックを使用することを含み得る。入力は、クリアの頻度、分岐の頻度、分岐以外の特性のうちの1つまたは複数を含むことができる。分割ロジックは、入力に基づいて、分岐ターゲットバッファ(BTB)のエントリを割り当てることができる。
一実施形態は、プロセッサによって実行された場合にプロセッサに方法を実行させる少なくとも1つの命令を格納する非一時的機械可読媒体であって、方法が、使用可能な競合的に共有されるリソースを識別するステップと、優先順位アルゴリズムに少なくとも部分的に基づいてスレッドを選択するステップと、選択されたスレッドを使用可能な競合的に共有されるリソースに割り当てるステップと、を含む、非一時的機械可読媒体を含み得る。
一部の実施形態では、以下のうちの1つまたは複数が当てはまる。一部の実施形態では、本方法は、分岐予測を競合的に共有するステップと、エントリ割り当てのために優先順位アルゴリズムを使用するステップと、をさらに含み得る。一部の実施形態では、本方法は、優先順位アルゴリズムに基づいて、第2のスレッドを割り当てるステップをさらに含み得る。一部の実施形態では、本方法は、1クロック当たりの命令(IPC)およびパイプラインスループットのうちの少なくとも1つを高めるように、パイプライン内の使用可能なリソースに最も効率的なスレッドを割り当てるステップをさらに含み得る。一部の実施形態では、本方法は、使用可能なリソースへのスレッド割り当てを優先順位付けするための最もよく知られたアルゴリズムを提供するステップをさらに含み得る。一部の実施形態では、本方法は、2つ以上のイベントが検出された場合に優先順位付けするステップをさらに含み得る。一部の実施形態では、本方法は、割り当てられたアルゴリズムに基づいて、最も優先順位の高いイベントおよびフラグのうちの少なくとも1つを選択するステップをさらに含み得る。
一部の実施形態では、本方法は、イベント検出ブロックと、パフォーマンスカウンタフラグブロックと、デッドロック防止ブロックと、命令タイプ/クラスブロックと、を使用するステップをさらに含み得る。一部の実施形態では、本方法は、イベント検出ブロックを使用して、削除、クリアの頻度、BRの頻度、割り込み、およびキャッシュミスのうちの少なくとも1つを検出する、ステップをさらに含み得る。一部の実施形態では、本方法は、パフォーマンスカウンタフラグブロックを使用して、リタイアされた命令、コードミス、およびL2/L3ミスのうちの少なくとも1つをカウントする、ステップをさらに含み得る。一部の実施形態では、本方法は、デッドロック防止ブロックを使用して、デッドロック状態を防止する、ステップをさらに含み得る。一部の実施形態では、本方法は、命令タイプ/クラスブロックを使用して、浮動小数点命令をリタイアさせることを可能にする、ステップをさらに含み得る。一部の実施形態では、本方法は、オペレーティングシステム(OS)および仮想マシンマネージャ(VMM)のうちの少なくとも1つが優先順位を設定することを可能にするステップをさらに含み得る。一部の実施形態では、優先順位アルゴリズムは、少なくとも1つの学習機能を有し得る。一部の実施形態では、少なくとも1つの学習機能は、履歴データおよびワークロードパターンのうちの少なくとも1つに基づいて適応的であり得る。
一部の実施形態では、優先順位アルゴリズムは、整数リネーミングアルゴリズムおよび浮動小数点リネーミングアルゴリズムのうちの少なくとも一方を含み得る。優先順位アルゴリズムは、イベントベースの判定を含むことができる。イベントベースの判定は、削除、クリア、および割り込みのうちの1つまたは複数を含むことができる。優先順位アルゴリズムは、パフォーマンスカウンタを含むことができる。パフォーマンスカウンタは、出現数をカウントし得る。出現は、リタイアされた命令、およびコードミスのうちの1つまたは複数であり得る。優先順位アルゴリズムは、物理レジスタを制限することと、デッドロック防止を使用することと、キャッシュミスを判定することと、のうちの1つまたは複数を含み得る。優先順位アルゴリズムは、命令タイプおよびクラスを判定することを含み得る。優先順位アルゴリズムは、レジスタを割り当てることを含み得る。レジスタを割り当てることは、より多くの浮動小数点レジスタを浮動小数点ワード線に割り当てることを含み得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの1つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に基づき得る。
一部の実施形態では、優先順位アルゴリズムは、分岐予測アルゴリズムを含み得る。一部の実施形態では、分岐予測アルゴリズムは、以下、すなわち、クリアの頻度、分岐の頻度、分岐以外の特性のうちの1つまたは複数に少なくとも部分的に基づいて、分岐ターゲットバッファ(BTB)の動作を制御し得る。クリアは、JEClearおよびCRClearのうちの1つまたは複数を含むことができる。分岐の頻度は、すべて、成立、不成立のうちの1つまたは複数を含むことができる。分岐以外の特性は、リタイアされた命令、L2/L3ミスのうちの1つまたは複数を含むことができる。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの1つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に少なくとも部分的に基づき得る。優先順位アルゴリズムは、入力を受信するために分割ロジックを使用することを含み得る。入力は、クリアの頻度、分岐の頻度、分岐以外の特性のうちの1つまたは複数を含むことができる。分割ロジックは、入力に基づいて、分岐ターゲットバッファ(BTB)のエントリを割り当てることができる。
一実施形態は、メモリとプロセッサとを有するシステムであって、プロセッサが、使用可能な競合的に共有されるリソースを識別し、優先順位アルゴリズムに少なくとも部分的に基づいてスレッドを選択し、選択されたスレッドを使用可能な競合的に共有されるリソースに割り当てる、ように構成され得る、システムを備え得る。
一部の実施形態では、優先順位アルゴリズムは、整数リネーミングアルゴリズムおよび浮動小数点リネーミングアルゴリズムのうちの少なくとも一方を含み得る。優先順位アルゴリズムは、イベントベースの判定を含むことができる。イベントベースの判定は、削除、クリア、および割り込みのうちの1つまたは複数を含むことができる。優先順位アルゴリズムは、パフォーマンスカウンタを含むことができる。パフォーマンスカウンタは、出現数をカウントし得る。出現は、リタイアされた命令、およびコードミスのうちの1つまたは複数であり得る。優先順位アルゴリズムは、物理レジスタを制限することと、デッドロック防止を使用することと、キャッシュミスを判定することと、のうちの1つまたは複数を含み得る。優先順位アルゴリズムは、命令タイプおよびクラスを判定することを含み得る。優先順位アルゴリズムは、レジスタを割り当てることを含み得る。レジスタを割り当てることは、より多くの浮動小数点レジスタを浮動小数点ワード線に割り当てることを含み得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの1つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に基づき得る。
一部の実施形態では、優先順位アルゴリズムは、分岐予測アルゴリズムを含み得る。一部の実施形態では、分岐予測アルゴリズムは、以下、すなわち、クリアの頻度、分岐の頻度、分岐以外の特性のうちの1つまたは複数に少なくとも部分的に基づいて、分岐ターゲットバッファ(BTB)の動作を制御し得る。クリアは、JEClearおよびCRClearのうちの1つまたは複数を含むことができる。分岐の頻度は、すべて、成立、不成立のうちの1つまたは複数を含むことができる。分岐以外の特性は、リタイアされた命令、L2/L3ミスのうちの1つまたは複数を含むことができる。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの1つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に少なくとも部分的に基づき得る。優先順位アルゴリズムは、入力を受信するために分割ロジックを使用することを含み得る。入力は、クリアの頻度、分岐の頻度、分岐以外の特性のうちの1つまたは複数を含むことができる。分割ロジックは、入力に基づいて、分岐ターゲットバッファ(BTB)のエントリを割り当てることができる。
一部の実施形態では、以下のうちの1つまたは複数が当てはまる。一部の実施形態では、プロセッサは、分岐予測を競合的に共有し、エントリ割り当てのために優先順位アルゴリズムを使用する、ようにさらに構成され得る。一部の実施形態では、プロセッサは、優先順位アルゴリズムに基づいて、第2のスレッドを割り当てるようにさらに構成され得る。一部の実施形態では、プロセッサは、1クロック当たりの命令(IPC)およびパイプラインスループットのうちの少なくとも1つを高めるように、パイプライン内の使用可能なリソースに最も効率的なスレッドを割り当てるようにさらに構成され得る。一部の実施形態では、プロセッサは、使用可能なリソースへのスレッド割り当てを優先順位付けするための最もよく知られたアルゴリズムを提供するようにさらに構成され得る。一部の実施形態では、プロセッサは、2つ以上のイベントが検出された場合に優先順位付けするようにさらに構成され得る。一部の実施形態では、プロセッサは、割り当てられたアルゴリズムに基づいて、最も優先順位の高いイベントおよびフラグのうちの少なくとも1つを選択するようにさらに構成され得る。
一部の実施形態では、プロセッサは、イベント検出ブロックと、パフォーマンスカウンタフラグブロックと、デッドロック防止ブロックと、命令タイプ/クラスブロックと、を含み得る。一部の実施形態では、イベント検出ブロックは、削除、クリアの頻度、BRの頻度、割り込み、およびキャッシュミスのうちの少なくとも1つを検出することができる。一部の実施形態では、パフォーマンスカウンタフラグブロックは、リタイアされた命令、コードミス、およびL2/L3ミスのうちの少なくとも1つをカウントすることができる。一部の実施形態では、デッドロック防止ブロックは、デッドロック状態を防止することができる。一部の実施形態では、命令タイプ/クラスブロックは、浮動小数点命令をリタイアさせることを可能にし得る。一部の実施形態では、プロセッサは、オペレーティングシステム(OS)および仮想マシンマネージャ(VMM)のうちの少なくとも1つが優先順位を設定することを可能にするようにさらに構成され得る。一部の実施形態では、優先順位アルゴリズムは、少なくとも1つの学習機能を有し得る。一部の実施形態では、少なくとも1つの学習機能は、履歴データおよびワークロードパターンのうちの少なくとも1つに基づいて適応的であり得る。
一部の実施形態では、優先順位アルゴリズムは、整数リネーミングアルゴリズムおよび浮動小数点リネーミングアルゴリズムのうちの少なくとも一方を含み得る。優先順位アルゴリズムは、イベントベースの判定を含むことができる。イベントベースの判定は、削除、クリア、および割り込みのうちの1つまたは複数を含むことができる。優先順位アルゴリズムは、パフォーマンスカウンタを含むことができる。パフォーマンスカウンタは、出現数をカウントし得る。出現は、リタイアされた命令、およびコードミスのうちの1つまたは複数であり得る。優先順位アルゴリズムは、物理レジスタを制限することと、デッドロック防止を使用することと、キャッシュミスを判定することと、のうちの1つまたは複数を含み得る。優先順位アルゴリズムは、命令タイプおよびクラスを判定することを含み得る。優先順位アルゴリズムは、レジスタを割り当てることを含み得る。レジスタを割り当てることは、より多くの浮動小数点レジスタを浮動小数点ワード線に割り当てることを含み得る。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの1つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に基づき得る。
一部の実施形態では、優先順位アルゴリズムは、分岐予測アルゴリズムを含み得る。一部の実施形態では、分岐予測アルゴリズムは、以下、すなわち、クリアの頻度、分岐の頻度、分岐以外の特性のうちの1つまたは複数に少なくとも部分的に基づいて、分岐ターゲットバッファ(BTB)の動作を制御し得る。クリアは、JEClearおよびCRClearのうちの1つまたは複数を含むことができる。分岐の頻度は、すべて、成立、不成立のうちの1つまたは複数を含むことができる。分岐以外の特性は、リタイアされた命令、L2/L3ミスのうちの1つまたは複数を含むことができる。優先順位アルゴリズムは、ソフトウェアを介して優先順位を管理することを含み得る。優先順位アルゴリズムは、オペレーティングシステムおよび仮想マシンマネージャのうちの1つまたは複数が優先順位を提供することを可能にし得る。優先順位アルゴリズムは、ハードウェアによって管理された優先順位を含み得る。ハードウェアによって管理された優先順位は、動的挙動に少なくとも部分的に基づき得る。優先順位アルゴリズムは、入力を受信するために分割ロジックを使用することを含み得る。入力は、クリアの頻度、分岐の頻度、分岐以外の特性のうちの1つまたは複数を含むことができる。分割ロジックは、入力に基づいて、分岐ターゲットバッファ(BTB)のエントリを割り当てることができる。
スレッド切り替え
プロセッサコアは、本発明の実施形態によるSMTスレッド切り替え機能をサポートすることができる。共有リソースを用いてSMTを実装するプロセッサコアでは、SMTは、プロセッサ発行/実行パイプラインの様々なステージで2つ以上のスレッドのうちのどれを選択するかを選択することを含み得る。SMTスレッド切り替え機能を含む本発明の実施形態は、パフォーマンス、公平性、および他の要因の間の優先順位によって影響されるようにこの選択を提供することが望ましい場合がある(例えば、該当する基準のほんのいくつかを挙げると、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数(IPC)、単位時間当たりの実行命令数、サービス品質、時間および/またはメモリ効率の向上)。例えば、プロセッサコア900の発行/実行パイプラインでは、分岐予測装置911が予測を開始するスレッド、i−TLB 916で予測を検索するスレッド、iキャッシュ913でi−TLB変換を検索するスレッド、デコーダ914内のiキャッシュ913からのバイトをデコードするスレッド、opキャッシュ912から読み取るスレッド、マイクロopキュー915から読み取るスレッドなどを選択するために調停を使用することができる。
図17は、本発明の実施形態による、プロセッサに含まれ得るSMTスレッド切り替え機能のための調停回路1700を示すブロック図である。調停回路1700は、プロセッサ発行/実行パイプラインの様々なステージのうちのいずれかで、2つ以上のスレッドのうちのどれを進めるために選択するかを選択するための回路、構造、および/またはハードウェアを含み得る。プロセッサまたはプロセッサコアは、調停回路1700の1つまたは複数の実施形態の複数の例を含み、それぞれが、任意の1つまたは複数のパイプラインステージまたはリソースのためであり、それぞれが、図17に示されるブロックのうちの任意の1つまたは複数を含み、それぞれが、以下に説明する任意の1つまたは複数の手法または手法の組み合わせを実装し得る。さらに、調停回路1700の任意の例の全部または一部は、リソース割り当て、スケジューリング、または共有回路など、プロセッサまたはプロセッサコアの他の回路、構造、および/またはハードウェアに含まれる、一体化される、または組み込まれ得る。
調停回路1700は、任意の他のラウンドロビンまたは他の方式(単数または複数)を実装するための任意の他の回路と共に、単純なラウンドロビン回路1710と、高スループットラウンドロビン回路1720と、動的ラウンドロビン回路1730と、ソフトウェア制御可能ラウンドロビン回路1740と、を含み得る。
単純なラウンドロビン回路1710は、スレッドを選択するために単純なラウンドロビン方式を実行するための回路、構造、および/またはハードウェアを含み得る。例えば、単純なラウンドロビン回路1710は、選択が絶えず選択肢の間で交替する方式、すなわち、スレッド0、次にスレッド1、次にスレッド0、次にスレッド1というように続く、または、スレッド0、スレッド1、スレッド2、スレッド0、スレッド1、スレッド2などの方式を実装し得る。
高スループットラウンドロビン回路1720は、他の可能性のある要因(公平性など)よりもスループットを優先したいという要望に基づいてスレッドを選択するために修正されたラウンドロビン方式を実行するための回路、構造、および/またはハードウェアを含み得る。例えば、高スループットラウンドロビン回路1720は、各スレッドがスレッド切り替え点で使用可能な作業を有する限り、それは(例えば、上記のような)単純なラウンドロビン方式を実装してもよく、そうでなければ、高スループットラウンドロビン回路1720は、使用可能な作業を有するスレッドを選択してもよい。選択すべきスレッドが3つ以上の実施形態では、高スループットラウンドロビン回路1720は、使用可能な作業のないあらゆるスレッドを単純なラウンドロビン方式から外すことができる。
動的ラウンドロビン回路1730は、スレッドの動的挙動に基づいて、スレッドを選択するために動的に修正可能なラウンドロビン方式を実行するための回路、構造、および/またはハードウェアを含み得る。動的ラウンドロビン回路1730は、決定の基礎となる情報(例えば、ヒューリスティック)を提供するために、パフォーマンスカウンタ、他のハードウェアカウンタ、または他の構造(それらのうちのいずれかが1732として表される)を含み得る、および/または使用し得る。スレッドを優先するためのスレッド選択の基準となる比率または他の基準、ならびにどの動的挙動尺度が使用されるべきかの指示は、固定(例えば、ハードワイヤード)、構成可能(例えば、ハードウェアまたはファームウェアによって)、またはプログラム可能(例えば、ソフトウェアによる)であり得る。例えば、第1のスレッドは、2対1の比率で第2のスレッドよりも優先または選択され得る(例えば、スレッド0、スレッド0、スレッド1、スレッド0、スレッド0、スレッド1など)。あるスレッドが別のスレッドよりも優先されると判断するための要因または基準の例としては、予測ミス率、1サイクル当たりの命令数、キャッシュミス率などがある。
ソフトウェア制御可能ラウンドロビン回路1740は、ソフトウェア(例えば、オペレーティングシステムまたは仮想マシンモニタ)によって提供される優先順位に基づいて、スレッドを選択するために修正されたラウンドロビン方式を実行するための回路、構造、および/またはハードウェアを含むことができ、これは、本来ソフトウェアで使用可能であるより多くの望ましいシステムの挙動についての情報を有し得る。どちらを優先するかの比率を伴う指示、および/またはどのスキームを使用するか、もしくはその実装方法に関する任意の他の情報(例えば、ソフトウェア制御可能ラウンドロビンと動的および/または修正可能ラウンドロビンを組み合わせるかどうか、またその方法はどうするか)は、調停回路1700内、または調停回路1700にアクセスすることができる、プログラム可能な格納場所またはレジスタ1742に設けられ得る。
実施形態では、手法の組み合わせが可能である。例えば、ソフトウェアは(例えば、ソフトウェア制御可能ラウンドロビンのための回路および/または技法を使用して)、どのスレッドを優先するかに関するヒントを提供することができ、ハードウェア(例えば、動的ラウンドロビンの回路または技法)は、スレッドの挙動および/または発見的方法に基づいて、そのスレッドを優先するための比率を判定することができる。
一部の実施形態のまとめ
本発明の一実施形態は、調停回路を備えるプロセッサを含み得る。調停回路は、第1のラウンドロビン回路と第2のラウンドロビン回路とを含むことができる。第1のラウンドロビン回路は、単純なラウンドロビンスレッド切り替え方式を実施するようにされ得る。第2のラウンドロビン回路は、動的に修正されたラウンドロビンスレッド切り替え方式を実施するようにされ得る。
デッドロック回避
プロセッサコアは、本発明の実施形態によるSMTデッドロック回避機能をサポートすることができる。リソースの共有は、一部の状況では、1つまたは複数のリソースが枯渇したためにスレッドの進行が遅くなり、先に進むことができないためにスレッドが進行しなくなり(例えば、命令をリタイアする)、および/または他のデッドロックタイプの状況につながる可能性があり得る。その結果、ユーザエクスペリエンスは、著しく遅いパフォーマンス、またはエラー、失敗、もしくはクラッシュが含まれる可能性があり得る。デッドロック回避機能を含む本発明の実施形態は、デッドロックタイプの状況を低減し、ユーザエクスペリエンスを向上させるために望ましい場合がある。これらの実施形態の他の利点としては、例えば、該当する基準のほんのいくつかを挙げると、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数(IPC)、単位時間当たりの実行命令数、サービス品質、時間および/またはメモリ効率の向上を含み得る。
図18は、本発明の実施形態による、プロセッサに含まれ得るデッドロック回避ハードウェア1800を示すブロック図である。デッドロック回避ハードウェア1800は、デッドロックタイプの状況の発生を減らすために、コア回路、構造、ユニット、およびリソース、ならびにそれらの部分の割り当ておよび使用に影響を及ぼすための回路、構造、および/またはハードウェアを含み得る。実施形態では、デッドロック回避ハードウェア1800は、単一のリソースおよび/または複数のリソース含むデッドロックを回避するように実装され得る。いずれの場合も、プロセッサまたはプロセッサコアは、デッドロック回避ハードウェア1800の1つまたは複数の実施形態の複数の例を含み、それぞれが、任意の1つまたは複数のリソースのためであり、それぞれが、図18に示されるブロックのうちの任意の1つまたは複数を含み、それぞれが、任意の1つまたは複数の手法、または手法の組み合わせを実装し得る。さらに、デッドロック回避ハードウェア1800の任意の例の全部または一部は、リソース割り当て、スケジューリング、または共有回路など、プロセッサまたはプロセッサコアの他の回路、構造、および/またはハードウェアに含まれる、一体化される、または組み込まれ得る。
デッドロック回避ハードウェア1800は、リソースをスレッドに割り当てるための回路、構造、および/またはハードウェアを含み得るアロケータ回路1810を含み得る。アロケータ回路1810の一実施形態または一実施形態の例は、図12のアロケータ回路1240の一実施形態または一実施形態の例を表し得る、またはこれに対応し得る。
デッドロック回避ハードウェア1800、アロケータ回路1810、および/またはプロセッサもしくはプロセッサコアの任意の他の部分は、アロケータ回路1810が、任意の1つまたは複数の特定のスレッドにリソースまたは分割可能なリソースの一部を割り当てることを動的に無効にする、ブロックする、または防止するための回路、構造、および/またはハードウェアを含み得る。例えば、スレッド要求どうしまたはスレッド要求間で選択または調停するための、上述したものなどの任意の種類のラウンドロビン方式を含む実施形態では、特定のスレッドがリソースを使用しないようにブロックすることは、そのスレッドをラウンドロビン方式から一時的にドロップすることによって達成され得る。実施形態は、1つの入力としてスレッド要求信号(例えば、1240A、1240B)と、スレッドブロック信号(例えば、後述するようにリソース使用量カウンタ1820に基づいて回路によって生成されるスレッドブロック信号、または任意の他の情報、状態、もしくは信号)の補数と、を有して、ANDゲートの出力が、スレッドにリソースが割り当てられるべきか、リソースが割り当てられるべき候補とみなされるべきかを示すことができるようにする、ANDゲートを含み得る。
デッドロック回避ハードウェア1800はまた、リソース使用量カウンタ1820を含み得る。一実施形態では、リソース使用量カウンタ1820は、特定のスレッドによって占有または使用されている分割可能なリソース(例えば、バッファ、キュー、スケジューラ、リザベーションステーション)の部分(例えば、エントリ)の数をカウントするためのスレッドごとのハードウェアカウンタであり得る。特定のリソースについて、特定のスレッドに関するリソース使用量カウンタ1820の例は、アロケータ回路1810がそのスレッドにエントリを割り当てるのに応じてインクリメントされ、エントリが割り当て解除または削除されるのに応じてデクリメントされ、リソースがフラッシュされるのに応じてクリアされ得る。アロケータ回路1810は、(例えば、上述のように)そのスレッドのカウントが閾値に達するかそれを超えることに応じて、そのエントリをそのスレッドに割り当てることを動的に無効にするかまたはブロックすることができる。
閾値は、デッドロックタイプの状況になり得る、単一スレッドがすべてのエントリを同時に使用することを防ぐように、リソース内のエントリの総数より少なくなるように選択され得る。閾値はまた、デッドロックタイプの状況に近づくことに対する許容度および/またはスループットもしくは他のパフォーマンスの尺度もしくは要因を優先順位付けしたいという要求を含む他の要因もしくは基準に基づいて選択または調整されてもよい。閾値は、固定(例えば、ハードワイヤード)、(例えば、ハードウェアまたはファームウェアによって)構成可能または(例えば、ソフトウェアによって)プログラム可能であり得る。
一実施形態では、分割可能なリソースは、特定のスレッドおよびスレッドのグループに対して論理的に分割されてもよい。例えば、N個のエントリのセットを有する分割可能なリソースでは、N1個のエントリのサブセット(N1はNより小さい)は、第1のスレッドのみによる使用のために予約することができ、N2個のエントリのサブセット(N2はNより小さい)は、第2のスレッドのみによる使用のために予約することができ、残りのN−(N1+N2)個のエントリのサブセットは、いずれかのスレッドに割り当てられてもよい。実施形態では、この手法は、アロケータ回路1810の1つまたは複数の例によって実施され得る。
ロードの完了がキャッシュからデータを読み取ることに依存する実施形態では、各キャッシュエントリは、そのエントリからのロードを含むスレッドによってそのエントリがロックされていることを示すためのビットを含むことができる。そのインジケータビットが設定されたエントリの置換は、ロードの完了に関連してビットがクリアされるか、またはスレッドがパイプラインフラッシュイベント(例えば、予測ミス分岐)を経験するまで防止され得る。実施形態では、この手法は、アロケータ回路1810の1つまたは複数の例によって実施され得る。
一実施形態では、リソース使用量カウンタ1820は、特定のスレッドに関するリタイアキュー内の最も古いエントリについて、そのスレッド(ストールされたスレッド)が分割不可能なリソースへの対応するディスパッチを待機していた、クロックサイクルの数をカウントするためのスレッドごとのハードウェアカウンタであり得る(スレッドにはディスパッチスロットおよびライトバックスロットが必要であるため、この条件にはリタイアキューが含まれる)。アロケータ回路1810は、ストールされたスレッドのカウントが閾値に達するかそれを超えると、分割不可能のリソースのためのスケジューラに異なるスレッドからのオペレーションを割り当てることを(例えば、上述のように)動的に無効にするかブロックすることができる。あるいは、分割不可能なリソースへのあらゆるオペレーションのディスパッチは、所与の数のクロックサイクルの間無効にされるかまたはブロックされ得る。
これらの手法は、ある範囲のクロックサイクルを消費する異なるオペレーションを実行し得る実行ユニットなどの分割不可能なリソースの使用に関するデッドロックタイプの状況を防ぐことができる。例えば、単一サイクルで完了することができるオペレーションが、本来連続した複数サイクルのオペレーションを完了することによってビジー状態に保たれ得るリソースを使用することを可能にすることができる。
閾値は、固定(例えば、ハードワイヤード)、(例えば、ハードウェアまたはファームウェアによって)構成可能または(例えば、ソフトウェアによって)プログラム可能であり得る。閾値は、スループットに関連するものや公平性に関連するものなどを含む、様々な要因または基準に基づいて選択および/または動的に調整され得る。例えば、公平性が優先される場合は、閾値を徐々に下げて、各スレッドをより積極的に進行させることができ、スループットが優先される場合は、閾値を徐々に上げて、進行中のスレッドを中断することなく継続的に続行できるようにすることができる。
一部の実施形態のまとめ
本発明の一実施形態は、デッドロック回避ハードウェアおよびリソースを備えるプロセッサを含み得る。デッドロック回避ハードウェアは、アロケータ回路とリソース使用量カウンタとを含み得る。アロケータ回路は、リソース使用量カウンタからの出力に基づいて、リソースをスレッドに割り当てるべきか否かを判定することができる。
データパス機能
本発明の実施形態によるプロセッサコアは、命令セットアーキテクチャ(ISA)によって提供されるよりも狭いデータパスを有するISAをサポートするための様々な機能を含み得る。いくつかのそのような機能は、以下の非限定的な例を用いて別々に説明されるが、実施形態はそのような機能の任意の組み合わせを含み得る。
プロセッサコアは、より大きなサイズのオペランドに対するオペレーション(例えば、サイズが256ビットのオペランドに対するロード/ストア/算術演算)を可能にする機能を、より小さいオペランドを操作する複数のマイクロオペレーション(μop)(例えば、サイズが128ビットの値を操作する複数のμop)に分割することによって、これらのオペレーションをサポートし得る。そのような機能は、様々な理由で望ましい場合があり、例えば、プロセッサは、より大きいオペランドサイズを含む命令セットアーキテクチャをサポートし得るが、より小さいオペランドサイズに基づくマイクロアーキテクチャを使用し得る。追加的または代替的に、プロセッサは、より大きいオペランドサイズを含む命令セットアーキテクチャをサポートし、かつこのより大きいサイズのレジスタを含むレジスタファイルを有し得るが、より小さいチャンクのデータしか処理できない実行ユニットを含む場合がある。追加的または代替的に、プロセッサは、より大きなサイズのレジスタファイル、実行ユニット、およびロード/ストアポートを有することができるが、より小さいサイズのオペランドを使用してμopを実行することが、例えば節電またはスケジューリング目的のために望ましい場合がある。下記の機能を含むプロセッサの他の潜在的な利点には、限定するものではないが、該当する基準のほんのいくつかを挙げると、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数(IPC)、単位時間当たりの実行命令数、サービス品質、ならびに時間および/またはメモリ効率の向上を含む。
256〜128ビットデータパスのロードおよびストア
本発明の実施形態によれば、プロセッサコアは、128ビットマイクロオペレーション(μop)を使用して256ビットロードおよびストアを可能にする機能をサポートすることができる。一部の実施形態では、プロセッサは、256ビット命令セットアーキテクチャをサポートし得るが、128ビットレジスタファイルを含む128ビットマイクロアーキテクチャを使用し得る。他の実施形態では、プロセッサは、256ビット命令セットアーキテクチャおよび256ビットレジスタファイルを有することができるが、128ビットチャンクのデータしか処理できないロードポートおよび/またはストアポートを含み得る。
図19は、一部の実施形態による、128ビットμopペアを使用する256ビットレジスタファイルへの256ビットロードを示す図である。メモリ1901は、メモリロケーション1902に格納されている値などの一連の256ビット値を含む。第1のマイクロop1903は、メモリロケーション1902に格納されている値の下半分を読み出し、第2のマイクロop1904は、メモリロケーション1902に格納されている値の上半分を読み出す。メモリロケーション1902に格納された値の2つの半分が一緒にブレンドされ(1905)、ブレンドオペレーションの結果が256ビットレジスタファイル1906に入れられる。
図20は、一部の実施形態による、図19を参照して上述したプロセスを表す流れ図である。命令をデコードするプロセス(2001)の間に256ビットロードが検出された場合に、第1のロードμop、第2のロードμop、およびブレンドμopを含む3つのμopが生成される(ボックス2002)。μopは実行されるようにスケジューリングされ、各μopについて、プロセッサは、ロード/ブレンドされるデータが準備されるまで待機し得る(2003)。第1のロードμopが実行されると、ボックス2004に示すように、プロセッサは、メモリロケーション1902に格納されている値の下半分を読み出すことができる。第2のロードμopが実行されると、ボックス2004に示すように、プロセッサは、メモリロケーション1902に格納されている値の上半分を読み出すことができる。ブレンドμopが実行されると、ボックス2004に示されるように、メモリロケーション1902に格納された値の読み出された2つの半分が結合されて256ビットレジスタファイルに入れられる。最後に、ボックス2005に示すように、デコードされた命令は完了時にリタイアされる。
一部の実施形態では、値は、128ビットμopを使用して256ビットレジスタファイルからメモリに格納され得る。図21は、このプロセスを説明する図である。256ビットレジスタファイル2101は、レジスタ2102などの256ビット幅のレジスタを含む。第1のストアμop 2103は、レジスタ2102に格納されている値の下半分を読み出し、これをメモリロケーション2104の下半分に格納する。第2のストアμop 2105は、レジスタ2102に格納されている値の上半分を読み出し、これをメモリロケーション2104の上半分に格納する。
図22は、一部の実施形態による、図21を参照して上述したプロセスを表す流れ図である。命令をデコードするプロセス(2201)の間に256ビットストアが検出された場合に、第1のストアμopおよび第2のストアμopを含む2つのμopが生成される(ボックス2202)。μopは実行されるようにスケジューリングされ、各μopについて、プロセッサは、ストアされるデータが準備されるまで待機し得る(2203)。第1のストアμopが実行されると、ボックス2204に示すように、プロセッサは、レジスタ2102に格納されている値の下半分を読み出し、これをメモリロケーション2104の下半分に書き込むことができる。第2のストアμopが実行されると、ボックス2204に示すように、プロセッサは、レジスタ2102に格納されている値の上半分を読み出し、これをメモリロケーション2104の上半分に書き込むことができる。最後に、ボックス2205に示すように、デコードされた命令は完了時にリタイアされる。
一部の実施形態では、256ビットロード命令は、2つのμop、すなわち、256ビット値の下半分を第1の128ビットレジスタにロードするための第1のμopと、256ビット値の上半分を第2の128ビットレジスタにロードするための第2のμopと、を実行することによって、256ビット値を2つの128ビットレジスタにロードすることができる。
一部の実施形態では、ロードは、「ダブルパンプト(double−pumped)」される、すなわち2回実行される、すなわち、メモリから値の下半分をロードするのが1回目であり、メモリから値の上半分をロードするのが2回目である、単一のμopを用いて達成される。一部の実施形態では、ストアは、「ダブルパンプト(double−pumped)」される、すなわち、レジスタの下半分をメモリにストアするために1回実行され、レジスタの上半分をメモリにストアするために1回実行される、単一のμopを用いて達成される。一部の実施形態では、256ビットロードおよび/またはストアを実装するために使用されるμopは、ベクトルスケジューリングアルゴリズムに従ってスケジューリングされ得る。一部の実施形態では、ギャングスケジューリング技法を使用して、ロードおよび/またはストアに含まれる複数のμopを別々の実行ユニットで実行するようにスケジューリングすることができる。
上記のロード/ストア機能は、いかなる特定のサイズのメモリ、ロードポート、またはレジスタファイルを使用してロードおよび/またはストアを実行することにも限定されない。例えば、上記の技法は、一度に256ビットで動作する基礎となるハードウェアを使用して、512ビットロードおよび/またはストアを実行するために使用されてもよい。
256〜128ビットデータパスのレーン内実行
本発明の実施形態によれば、プロセッサコアは、128ビットマイクロオペレーション(μop)を使用して256ビット算術演算を可能にする機能をサポートすることができる。一部の実施形態では、プロセッサは、256ビット命令セットアーキテクチャをサポートし得るが、128ビットレジスタファイルを含む128ビットマイクロアーキテクチャを使用し得る。他の実施形態では、プロセッサは、256ビット命令セットアーキテクチャおよび256ビットレジスタファイルを有することができるが、128ビットチャンクのデータしか処理できない実行ユニットを含み得る。一部の実施形態では、プロセッサは、256ビットレジスタファイル、実行ユニット、およびロード/ストアポートを有することができるが、複数の128ビットμopを使用して256ビット算術演算を実施することが、例えば節電またはスケジューリング目的のために望ましい場合がある。
図23は、一部の実施形態によるこのプロセスを示す。256ビット命令2301は、これを2つの128ビット命令2302および2303に分割することによってデコードされ、これらは次に、1つまたは複数の128ビット実行ユニット2304、2305上での実行のために独立してスケジューリングされる。図23に示す実施形態によれば、第1の128ビットμop 2302は、256ビット算術命令に提供された256ビットオペランドの下半分を使用して、命令を実行することができ、次いで、プロセッサは、その結果を256ビットデスティネーションレジスタの下半分に格納することができる。第2の128ビットμop 2303は、256ビット算術命令に提供された256ビットオペランドの上半分を使用して、命令を実行することができ、次いで、プロセッサは、その結果を256ビットデスティネーションレジスタの上半分に格納することができる。
一部の実施形態によれば、256ビット命令を1対の128ビットμopに分割することは、結果の下半分が256ビット命令のオペランドの下半分にのみ基づいており、結果の上半分が256ビット命令のオペランドの上半分にのみ基づいている(すなわち、「レーン内」オペレーション)。これらのレーン内シナリオでは、256ビット命令の結果は2つの別々の128ビットμopの2つの独立した結果として表すことができるため、2つの128ビットμopは互いに独立してスケジューリングされ得る。
一部の実施形態では、128ビットμopのそれぞれは、同じ命令(例えば、ADD命令)を表し、256ビット命令は、「ダブルパンプト(double−pumped)」される、すなわち、結果の下半分を計算するために1回実行され、結果の上半分を計算するために1回実行される、単一の128ビットのμopを用いて実装され得る。一部の実施形態では、256ビット命令は、2つの異なるμopに「分割」することができ、2つの異なるμopは、独立してスケジューリングされ、1つまたは複数の実行ユニット上で実行される。一部の実施形態では、256ビット命令は、それぞれが128ビットμopを実行する2つの実行ユニットを同時に使用して実行することができる(この手順は、場合によっては「ギャングスケジューリング」として当技術分野で知られている)。
上記のレーン内実行機能は、いかなる特定のサイズのメモリ値、ロードポート、実行ユニット、またはレジスタファイルを使用して命令を実行することにも限定されない。例えば、上記の技法は、一度に256ビットで動作する基礎となるハードウェアを使用して、512ビットオペレーションを実行するために使用されてもよいし、一度に512ビットで動作する基礎となるハードウェアを使用して、1024ビットオペレーションを実行するために使用されてもよい。
256〜128ビットデータパスのレーン間実行
一部の実施形態では、実行される256ビット命令は、結果の下半分がオペランドの上半分に格納された値に依存する、および/または結果の上半分がオペランドの下半分に格納された値に依存する(つまり、「レーン間」オペレーション)ため、2つの完全に独立した128ビットμopに分割することができない。
一時的格納領域を使用して部分的な結果を格納し、それを次に最終的な結果に結合してデスティネーションレジスタに格納することによって、レーン間オペレーションを実施することができる。図24は、この機能の一部の実施形態によるこのプロセスを示す。レーン間256ビット命令2401は、これを2つの128ビット命令2402および2403に分割することによってデコードされ、これらは次に、1つまたは複数の128ビット実行ユニット2406、2407上での実行のために独立してスケジューリングされる。一時的格納領域2404は、μop 2402および2403によって生成された一部の結果をストアするために使用される。これらの一時的な結果は、最終結果を生成するために第3のμop 2405によって使用される。
一部の実施形態では、128ビットμop 2402および2403のそれぞれは、同じ命令を表し、「ダブルパンプト(double−pumped)」される、すなわち、一時的格納領域2404に格納される第1の部分的な結果を計算するために1回実行され、一時的格納領域2404に格納される第2の部分的な結果を計算するために1回実行される、単一の128ビットμopを用いて実装され得る。一部の実施形態では、256ビット命令は、2つの異なるμopに「分割」することができ、2つの異なるμopは、独立してスケジューリングされ、1つまたは複数の実行ユニット上で実行され、その結果の一部は一時的格納領域に格納される。一部の実施形態では、256ビット命令は、それぞれが128ビットμopを実行する2つの実行ユニットを同時に使用して実行することができる(この手順は、場合によっては「ギャングスケジューリング」として当技術分野で知られている)。一部の実施形態では、256ビットμopは、256ビットの能力を有する「特別な」実行ユニットを使用して実行されて、一時的格納領域(例えば一時的格納領域2404)の必要性を排除することができる。
上記のレーン間実行機能は、いかなる特定のサイズのメモリ値、ロードポート、実行ユニット、またはレジスタファイルを使用して命令を実行することにも限定されない。例えば、上記の技法は、一度に256ビットで動作する基礎となるハードウェアを使用して、512ビットオペレーションを実行するために使用されてもよいし、一度に512ビットで動作する基礎となるハードウェアを使用して、1024ビットオペレーションを実行するために使用されてもよい。
追加の独立した組み合わせ可能な機能
本発明の実施形態によるプロセッサコアは、性能の向上および/または電力消費の低減をサポートするための様々な追加の機能を含み得る。いくつかのそのような機能は、以下の非限定的な例を用いて別々に説明されるが、実施形態はそのような機能の任意の組み合わせを含み得る。
マイクロopキャッシュ
実施形態によれば、プロセッサコアは、マイクロopキャッシュ機能をサポートし得る。一部の実施形態では、マイクロopキャッシュ機能は、割り当て、置き換えポリシー、および異なる構造タイプ(例えば、物理的、仮想的など)を含み得る。マイクロopキャッシュ機能におけるインテリジェントな割り当ては、単純な命令に対して、ループストリームまたはマイクロコードシーケンサ(MS)フローを伴う複合命令などのタイプの命令を検出し、それに従って割り当てることができる。マイクロopキャッシュ機能はまた、将来の潜在的な再使用のために、および/またはキャッシュラインごとに割り当てるマイクロオペレーションの数を判定するために、犠牲キャッシュを追加することを含み得る。一部の実施形態では、マイクロopキャッシュは、後でデコードされた命令を再利用するために、マイクロopバッファ内にデコードされた命令(マイクロop)を保存するために使用されてもよい。一部の実施形態では、マイクロopバッファの使用は、命令キャッシュルックアップおよびデコードステージの複数(例えば、少なくとも2つ)のサイクルを回避することによってパイプラインを短くすることができる。既に使用可能であり、マイクロopバッファにおいてデコードされたマイクロopバッファを使用することによって電力の節約もできる。一部の実施形態では、類似のイベント(例えば、マイクロopタイプ、マイクロopデコードの困難さ、マイクロop使用パターン)を有する複数のスレッドが存在する可能性があり、優先順位方式は、マイクロopキャッシュにリソースを割り当てるために、スレッド間で同順位がある場合に使用され得る。一部の実施形態では、マイクロopキャッシュ機能は、パイプラインにおいて最高のIPCおよび/または命令スループットを達成するために、マイクロopキャッシュのためのインテリジェントな割り当て、置換ポリシー、および/または構成を提供することができる。
図25は、実施形態による、プロセッサに含まれ得るマイクロopキャッシュ機能を示すブロック図である。マイクロopキャッシュ機能は、命令デコーダ2501と、インテリジェントアロケーションおよび置換ブロック2502と、マイクロopキャッシュ2503と、のうちの1つまたは複数を含み得る。インテリジェントアロケーションおよび置換ブロック2502は、命令デコーダ2501からの命令を受信することができる。命令デコーダ2501は省略することもでき、インテリジェントアロケーションおよび置換ブロック2502は、既にデコードされた命令を受信することができる。インテリジェントアロケーションおよび置換ブロック2502は、複合命令(例えば、MSフローを伴う)、ループストリームなど、どのタイプの命令を割り当てるべきかをアルゴリズム的に判定することができる。インテリジェントアロケーションおよび置換ブロック2502は、マイクロopキャッシュ2503内のどこに命令を割り当てるべきかを判定し、判定された場所にその命令を割り当てることができる。一部の実施形態では、インテリジェントアロケーションおよび置換ブロック2502は、例えば、命令の使用パターン履歴、使用の頻度、デコードの困難さ、およびデコード時間のうちの1つまたは複数に基づいて、どのタイプの命令を割り当てるかをアルゴリズム的に判定することができる。インテリジェントアロケーションおよび置換ブロックは、例えば、以下のパラメータ、すなわち、最も長い間使われていない命令情報、命令の使用パターン履歴、使用の頻度、デコードの困難さ、命令はループの一部であるか否か、ループからの他の命令が格納されているか否か、およびマイクロopキャッシュに格納されている命令のデコード時間のうちの1つまたは複数に基づいて、命令をマイクロopキャッシュのどこに格納するかを判定することができる。これらのパラメータは、例えば、インテリジェントアロケーションおよび置換ブロック内、マイクロopキャッシュ内、および/または他の場所(例えば、別のテーブル内)に格納することができる。
図26は、実施形態による、プロセッサによって実行され得るマイクロopキャッシュ機能のための方法を示す流れ図である。本方法は、ボックス2601に示すように、命令を受信するステップを含み得る。本方法は、ボックス2602に示すように、複合命令、ループストリームなどのどのタイプの命令を割り当てるべきかをアルゴリズム的に判定するステップをさらに含み得る。本方法は、ボックス2603に示すように、マイクロopキャッシュのどこに命令を割り当てるべきかを判定するステップをさらに含み得る。本方法は、ボックス2604に示すように、マイクロopキャッシュの判定された場所に命令を割り当てるステップをさらに含み得る。
図27は、実施形態による、プロセッサに含まれ得るマイクロopキャッシュ機能を示すブロック図である。マイクロopキャッシュ機能は、分岐予測ユニット(BPU)2701と、命令キャッシュタグ2702と、マイクロopタグ2703と、命令キャッシュ2704と、マイクロopキャッシュ2705と、デコーダ2706と、マイクロopキュー2707のうちの1つまたは複数を含み得る。BPU 2701は、(例えば、条件付きオペレーションを実行するか否かを判定するために)分岐予測を実行することができる。図27の左側に示すように、命令キャッシュタグ2702は、例えば、BPU 2701からの命令タグを受信し、その命令タグに関連する命令を判定することができる。命令は、命令キャッシュ2704から読み出され、デコーダ2706によってデコードされてもよい。次いで、マイクロopキュー2707は、デコーダ2706からのデコードされた命令を受信することができる。図28の右側に示すように、マイクロopタグ2703は、BPU 2701からの命令タグを受信し、関連するマイクロopタグを判定することができる。次いで、マイクロop2705をチェックして、マイクロopタグに関連付けられたマイクロopがマイクロopキャッシュ2705に格納されているか否かを判定し、マイクロop2705からマイクロopを取り出すことができる。マイクロopは、例えば、図25および図26に関連して上述したように、デコードされ、マイクロopキャッシュ2705に格納され得る。マイクロopキャッシュ機能は、物理的および/または仮想的であり得る。マイクロopキャッシュ機能は、パイプラインを短縮することを含み得る。例えば、図27に示されるように、マイクロopが以前にデコードされてマイクロopキャッシュに格納されている場合、デコードオペレーションは、マイクロopがマイクロopキャッシュに既に格納されている場合に実行される必要がない場合があるため、右側のパイプラインは左側のパイプラインより短い。マイクロopキャッシュ機能は、マイクロopキャッシュ2705内の次ライン予測を含み得る。マイクロopキャッシュ機能は、マイクロopキャッシュ2705にMSフローを格納し得る。マイクロopキャッシュ機能は、どのマイクロopをキャッシュに格納するか、およびどのマイクロopを新しいマイクロopと交換するかを判定するために置換ポリシーを使用することができる。マイクロopキャッシュ機能は、ループストリームおよび/または複合命令など、マイクロopキャッシュ2705に割り当てる命令の種類を判定することができる。マイクロopキャッシュ機能は、マイクロオペレーションを優先順位付けし得る。マイクロopキャッシュ機能は、犠牲キャッシュ(図示せず)を含むことができる。犠牲キャッシュは、デコードするのが困難であった命令など、潜在的な再使用のための命令を格納することができる。
図28は、実施形態による、プロセッサに含まれ得るマイクロopキャッシュ機能を示すブロック図である。マイクロopキャッシュ機能は、物理マイクロopキャッシュ2801および仮想マイクロopキャッシュ2802のうちの1つまたは複数を含み得る。物理マイクロopキャッシュ2801は、例えば、物理アドレス空間を使用してマイクロopを物理メモリに格納することができる。仮想マイクロopキャッシュは、例えば、仮想アドレス空間を使用して仮想メモリにマイクロopを格納することができる。物理マイクロopキャッシュ2801および/または仮想マイクロopキャッシュ2802は、例えばコンテキストおよび/またはモード切り替え時にフラッシュされてもよい。物理マイクロopキャッシュ2801および/または仮想マイクロopキャッシュ2802は競合的に共有されてもよい。
一部の実施形態のまとめ
一実施形態は、マイクロopキャッシュに割り当てる命令のタイプをアルゴリズム的に判定し、判定されたタイプの命令をマイクロopキャッシュに割り当てる場所を判定し、判定された場所に命令を割り当てる、ように構成されたプロセッサを含み得る。
一部の実施形態では、以下のうちの1つまたは複数が当てはまる。一部の実施形態では、プロセッサは、インテリジェントアロケーションおよび置換ブロックに、命令デコーダからの命令を受信させるようにさらに構成される。一部の実施形態では、判定された命令タイプは、複合命令およびループストリームのうちの少なくとも1つである。一部の実施形態では、プロセッサは、分岐予測ユニット(BPU)と、命令キャッシュタグと、マイクロopタグと、命令キャッシュと、マイクロopキャッシュと、デコーダと、マイクロopキューのうちの1つまたは複数を含み得る。一部の実施形態では、マイクロopキャッシュ機能は、次ライン予測を含み得る。一部の実施形態では、プロセッサは、マイクロopキャッシュにMSフローを格納するように構成される。一部の実施形態では、プロセッサは、マイクロオペレーションを優先順位付けするように構成される。一部の実施形態では、プロセッサは、犠牲キャッシュを含む。一部の実施形態では、マイクロopキャッシュは、物理マイクロopキャッシュおよび仮想マイクロopキャッシュのうちの少なくとも1つを含む。一部の実施形態では、物理マイクロopキャッシュおよび仮想マイクロopキャッシュのうちの少なくとも1つは競合的に共有されてもよい。一部の実施形態では、マイクロopキャッシュにどのタイプの命令を割り当てるかの判定は、使用パターン履歴、使用の頻度、デコードの困難さ、およびデコード時間のうちの1つまたは複数に少なくとも部分的に基づき得る。一部の実施形態では、判定されたタイプの命令をマイクロopキャッシュに格納する場所の判定は、最も長い間使われていない命令情報、命令の使用パターン履歴、使用の頻度、デコードの困難さ、ループステータス情報、およびマイクロopキャッシュに格納された命令のデコード時間のうちの1つまたは複数に基づき得る。
一実施形態は、マイクロopキャッシュに割り当てる命令のタイプをアルゴリズム的に判定するステップと、判定されたタイプの命令をマイクロopキャッシュに割り当てる場所を判定するステップと、判定された場所に命令を割り当てるステップと、を含む方法を含み得る。
一部の実施形態では、以下のうちの1つまたは複数が当てはまる。一部の実施形態では、本方法は、インテリジェントアロケーションおよび置換ブロックに、命令デコーダからの命令を受信させるステップをさらに含み得る。一部の実施形態では、判定された命令タイプは、複合命令およびループストリームのうちの少なくとも1つである。一部の実施形態では、本方法は、分岐予測ユニット(BPU)と、命令キャッシュタグと、マイクロopタグと、命令キャッシュと、マイクロopキャッシュと、デコーダと、マイクロopキューのうちの1つまたは複数を使用するステップをさらに含み得る。一部の実施形態では、マイクロopキャッシュ機能は、次ライン予測を含み得る。一部の実施形態では、本方法は、マイクロopキャッシュにMSフローを格納するステップをさらに含み得る。一部の実施形態では、本方法は、マイクロオペレーションを優先順位付けするステップをさらに含み得る。一部の実施形態では、方法は、犠牲キャッシュを使用するステップをさらに含み得る。一部の実施形態では、マイクロopキャッシュを使用するステップは、物理マイクロopキャッシュおよび仮想マイクロopキャッシュのうちの少なくとも1つを使用するステップを含む。一部の実施形態では、本方法は、物理マイクロopキャッシュおよび仮想マイクロopキャッシュのうちの少なくとも1つを競合的に共有するステップをさらに含み得る。一部の実施形態では、マイクロopキャッシュにどのタイプの命令を割り当てるかの判定は、使用パターン履歴、使用の頻度、デコードの困難さ、およびデコード時間のうちの1つまたは複数に少なくとも部分的に基づき得る。一部の実施形態では、判定されたタイプの命令をマイクロopキャッシュに格納する場所の判定は、最も長い間使われていない命令情報、命令の使用パターン履歴、使用の頻度、デコードの困難さ、ループステータス情報、およびマイクロopキャッシュに格納された命令のデコード時間のうちの1つまたは複数に基づき得る。
一実施形態は、プロセッサによって実行された場合にプロセッサに方法を実行させる少なくとも1つの命令を格納する非一時的機械可読媒体を含み得、本方法は、マイクロopキャッシュに割り当てる命令のタイプをアルゴリズム的に判定するステップと、判定されたタイプの命令をマイクロopキャッシュに割り当てる場所を判定するステップと、判定された場所に命令を割り当てるステップと、を含む。
一部の実施形態では、以下のうちの1つまたは複数が当てはまる。一部の実施形態では、本方法は、インテリジェントアロケーションおよび置換ブロックに、命令デコーダからの命令を受信させるステップをさらに含み得る。一部の実施形態では、判定された命令タイプは、複合命令およびループストリームのうちの少なくとも1つである。一部の実施形態では、本方法は、分岐予測ユニット(BPU)と、命令キャッシュタグと、マイクロopタグと、命令キャッシュと、マイクロopキャッシュと、デコーダと、マイクロopキューのうちの1つまたは複数を使用するステップをさらに含み得る。一部の実施形態では、マイクロopキャッシュ機能は、次ライン予測を含み得る。一部の実施形態では、本方法は、マイクロopキャッシュにMSフローを格納するステップをさらに含み得る。一部の実施形態では、本方法は、マイクロオペレーションを優先順位付けするステップをさらに含み得る。一部の実施形態では、方法は、犠牲キャッシュを使用するステップをさらに含み得る。一部の実施形態では、マイクロopキャッシュを使用するステップは、物理マイクロopキャッシュおよび仮想マイクロopキャッシュのうちの少なくとも1つを使用するステップを含む。一部の実施形態では、本方法は、物理マイクロopキャッシュおよび仮想マイクロopキャッシュのうちの少なくとも1つを競合的に共有するステップをさらに含み得る。一部の実施形態では、マイクロopキャッシュにどのタイプの命令を割り当てるかの判定は、使用パターン履歴、使用の頻度、デコードの困難さ、およびデコード時間のうちの1つまたは複数に少なくとも部分的に基づき得る。一部の実施形態では、判定されたタイプの命令をマイクロopキャッシュに格納する場所の判定は、最も長い間使われていない命令情報、命令の使用パターン履歴、使用の頻度、デコードの困難さ、ループステータス情報、およびマイクロopキャッシュに格納された命令のデコード時間のうちの1つまたは複数に基づき得る。
一実施形態は、メモリとプロセッサとを有するシステムを備え、プロセッサが、マイクロopキャッシュに割り当てる命令のタイプをアルゴリズム的に判定し、判定されたタイプの命令をマイクロopキャッシュに割り当てる場所を判定し、判定された場所に命令を割り当てる、ように構成される。
一部の実施形態では、以下のうちの1つまたは複数が当てはまる。一部の実施形態では、プロセッサは、インテリジェントアロケーションおよび置換ブロックに、命令デコーダからの命令を受信させるようにさらに構成される。一部の実施形態では、判定された命令タイプは、複合命令およびループストリームのうちの少なくとも1つである。一部の実施形態では、プロセッサは、分岐予測ユニット(BPU)と、命令キャッシュタグと、マイクロopタグと、命令キャッシュと、マイクロopキャッシュと、デコーダと、マイクロopキューのうちの1つまたは複数を含み得る。一部の実施形態では、マイクロopキャッシュ機能は、次ライン予測を含み得る。一部の実施形態では、プロセッサは、マイクロopキャッシュにMSフローを格納するように構成される。一部の実施形態では、プロセッサは、マイクロオペレーションを優先順位付けするように構成される。一部の実施形態では、プロセッサは、犠牲キャッシュを含む。一部の実施形態では、マイクロopキャッシュは、物理マイクロopキャッシュおよび仮想マイクロopキャッシュのうちの少なくとも1つを含む。一部の実施形態では、物理マイクロopキャッシュおよび仮想マイクロopキャッシュのうちの少なくとも1つは競合的に共有されてもよい。一部の実施形態では、マイクロopキャッシュにどのタイプの命令を割り当てるかの判定は、使用パターン履歴、使用の頻度、デコードの困難さ、およびデコード時間のうちの1つまたは複数に少なくとも部分的に基づき得る。一部の実施形態では、判定されたタイプの命令をマイクロopキャッシュに格納する場所の判定は、最も長い間使われていない命令情報、命令の使用パターン履歴、使用の頻度、デコードの困難さ、ループステータス情報、およびマイクロopキャッシュに格納された命令のデコード時間のうちの1つまたは複数に基づき得る。
ムーブの排除
プロセッサコアは、本発明の実施形態によるムーブの排除機能をサポートすることができる。多くのプロセッサにおいて、ムーブ命令を実行することは、通常、あるレジスタから別のレジスタへ値を移動すること、または即値をレジスタへ移動することを含む。そのようなムーブ命令の頻度のために、ムーブ命令が効率的に処理される場合、プロセッサのパフォーマンスは向上し得る。
ほとんどの命令は、いくつかのソースオペランドを操作し、結果を生成する。命令は、明示的に、または間接的に、値の読み書きが行われる、読み出し元の場所および書き込み先の場所を指定する(name)。指定先(name)は、論理(アーキテクチャ)レジスタまたはメモリ内の場所のいずれかであり得る。
通常、プロセッサに使用可能な物理レジスタの数は論理レジスタの数を超えているので、レジスタリネーミングを利用してパフォーマンスを向上させることができる。特に、アウトオブオーダプロセッサの場合、レジスタリネーミングにより、元のプログラムの順序から外れて命令を実行することができる。よって、多くのアウトオブオーダプロセッサでは、元のムーブ命令で指定されている論理レジスタが物理レジスタにリネーミングされるようにムーブ命令がリネーミングされる。
論理レジスタをリネーミングすることは、論理レジスタを物理レジスタにマッピングすることを含む。これらのマッピングは、レジスタエイリアステーブル(RAT)に格納され得る。RATは、各論理レジスタの最新のマッピングを維持する。RATは、論理レジスタによってインデックス付けされ、対応する物理レジスタへのマッピングを提供する。
図29に示すのは、3つの構造、すなわち、RAT 2900、アクティブリスト(AL)2902、およびフリーリスト(FL)2904を含むレジスタリネーミングおよび依存関係追跡方式である。リネーミングされた命令によって指定された各論理レジスタに対して、FL 2904からの未使用の物理レジスタが割り当てられ、RAT 2900は、この新しいマッピングで更新される。物理レジスタは、現在の命令ウィンドウ内の命令によって参照されなくなると、再び自由に使用(つまり、再生)できる。
図29に示すデータ構造に基づいて、レジスタ再生のための1つの方法は、RAT 2900からそれを追い出した命令、すなわち、物理レジスタへの新しいマッピングを作成した命令がリタイアしたときにのみ物理レジスタを再生することである。その結果、新しいマッピングがRAT 2900を更新するたびに、追い出された古いマッピングがAL 2902にプッシュされる。(ALエントリは、命令ウィンドウ内の各命令に関連付けられている。) 命令がリタイアすると、もしあれば、AL 2902に記録された古いマッピングの物理レジスタが再生され、FL 2904にプッシュされる。このサイクルが図29に示されている。
多くの命令では、ソースレジスタの1つがデスティネーションレジスタとしても使用される。このソースレジスタに格納された値が(プログラムの順序で)後続の命令によって必要とされる場合、レジスタムーブ命令を後続の命令の前に挿入して、ソースレジスタ内のソースオペランドを別の論理位置にコピーして、後続の命令がアクセスできるようにすることができる。
レジスタ−ムーブ命令を挿入するもう1つの理由は、手続き呼び出しの前にパラメータ値を適切なレジスタに設定するためである。
その結果、レジスタムーブ命令の数がかなり多くなり得る。従って、効率的なレジスタリネーミングおよび再生方式を用いてレジスタムーブ命令の効率的な実行を提供することが望ましい場合がある。
図1Bでは、レジスタリネーミング機能ユニットは、リネーミング/アロケータユニット152として示され、物理レジスタは、物理レジスタファイルユニット158として示されている。図3では、レジスタリネーミング機能ユニットは、整数リネーミングユニット321およびFPリネーミングユニット331として示され、物理レジスタは、整数物理レジスタファイル323およびFPレジスタファイル333によって示されている。すべての論理レジスタは、物理レジスタへのマッピングを有し、マッピングはエントリとしてRAT 2900に格納される。RAT 2900内のエントリは、論理レジスタによってインデックス付けされ、物理レジスタへのポインタを含む。
命令のリネーミング中に、RAT内の現在のエントリは、命令のソース論理レジスタ(単数または複数)をリネーミングするために必要なマッピングを提供し、新しいマッピングが命令のデスティネーション論理レジスタに対して作成される。この新しいマッピングは、RAT内の古いマッピングを追い出し、RATは、新しいマッピングで更新される。
表1は、レジスタリネーミングの一例を示す。表1では、元のプログラムの順序の4つの命令が第1列に提供されている。リネーミングされた命令が第2列に示されている。各リネーミングされた命令の隣には、命令のリネーミング後のRAT内の現在のエントリがある。最後の列は、命令のリネーミングによって追い出されたマッピングを提供している。簡単のために、3つの論理レジスタ、LRa、LRb、およびLRbのみを考える。物理レジスタはPRiで表され、iは整数である。表1の最初のエントリは、最初にリストされている命令がリネーミングされる前のRATの現在の状態を提供している。
例えば、表1では、第1の命令LRa+2→LRa(即値2が論理レジスタLRaの値に加算され、その結果が論理レジスタLRaに格納されることを示している)がPR1+2→PR2にリネーミングされ、物理レジスタPR2が使用可能であると仮定している。この命令では、新しいマッピングLRa→PR2が作成され、古いマッピングLRa→PR1がRATから追い出される。
第1の命令に対する第2および第4の命令の真の依存関係、および第2の命令に対する第3の命令の真の依存関係があることに留意されたい。しかしながら、レジスタリネーミングにより、第2の命令と第4の命令との間の出力依存関係、ならびに第3の命令と第4の命令と間の反依存関係が取り除かれ、その結果、実行順序が様々な真の依存関係に従うという条件で、第2、第3、および第4の命令が順不同で実行され得る。
リネーミングされた命令は、命令ウィンドウバッファに配置される。命令ウィンドウバッファ内のエントリは、リネーミングされた命令のオペコード、および後述する他のフィールドを含む。この実施形態では、命令の結果は命令ウィンドウバッファに格納されず、物理レジスタファイルに存在する。
命令ウィンドウバッファは、元のプログラムの順序で命令をリタイアすることを可能にする。複合命令セットコンピュータ(CISC)アーキテクチャの場合、複合命令を構成するすべてのマイクロ命令が一緒にリタイアされると、複合命令はリタイアされる。命令ウィンドウバッファは循環バッファとして作用し、第1のポインタはリタイアされる次の命令を指し、第2のポインタは新たにデコードされた命令に対して次に使用可能なエントリを指す。ポインタのインクリメントは、モジュロN演算で行われ、Nはバッファ内の使用可能なエントリの数である。命令がリタイアすると、第1のポインタがインクリメントされる。ポインタは、縮小命令セットコンピュータ(RISC)アーキテクチャにおいてデコードされた各命令に対して1つずつインクリメントされ、CISCアーキテクチャに対しては2つ以上でインクリメントされ得る。
結果をメモリロケーションに書き込むストア命令の場合、データキャッシュは命令のリタイアに更新される。結果を論理レジスタに書き込む命令では、論理レジスタ専用のレジスタがないため、リタイア時に書き込みを行う必要はない。そのような命令の場合、物理レジスタファイルは、命令のリネーミングされたときにデスティネーション論理レジスタがマッピングされていた物理レジスタ内にリタイア命令の結果を有する。
スケジューラは、実行のために実行ユニットに対して命令をスケジューリングする。スケジューリング機能は、例えば、Tomasuloのアルゴリズム(またはその変形)を実施するリザベーションステーションによって実現することができる。実行ユニットは、実行される命令(またはマイクロ命令)に応じて、データキャッシュまたは物理レジスタファイルからデータを取り出し、またはデータキャッシュまたは物理レジスタファイルにデータを送信することができる。
本発明の他の実施形態では、物理レジスタファイルおよび命令ウィンドウバッファのデータ構造に含まれる情報内容は、異なる機能ユニットによって実現され得る。例えば、リオーダバッファは、命令ウィンドウバッファと物理レジスタファイルとを置き換えることができ、それにより、結果は、リオーダバッファに格納され、さらに、レジスタファイル内のレジスタは論理レジスタとして専用にされる。このタイプの実施形態では、論理レジスタへの書き込みを指定する命令の結果は、命令のリタイア時に論理レジスタに書き込まれる。
ここで、2つのタイプのムーブ命令、すなわち、レジスタ間ムーブと、即値−レジスタ間ムーブと、を識別する。レジスタ間ムーブでは、あるレジスタ、すなわちソース論理レジスタから別のレジスタ、すなわちデスティネーション論理レジスタに値が移動される。即値−レジスタ間ムーブでは、即値が論理レジスタに移動される。
本発明の実施形態では、ムーブ命令は、複数の論理レジスタを同じ物理レジスタにマッピングすることによって実行される。レジスタ間ムーブ命令の実行は、ムーブ命令のデスティネーション論理レジスタを、ムーブ命令のソース論理レジスタによってマッピングされた物理レジスタにマッピングすることによって実行される。
即値−レジスタ間ムーブ命令の実行は、値照合キャッシュにアクセスすることによって実行することができる。値照合キャッシュ内のエントリは値によってインデックス付けされ、キャッシュエントリは、値を、その値を格納する物理レジスタに関連付ける。値照合キャッシュは、物理レジスタの数よりも少ないエントリを有し得る。値照合キャッシュにヒットがある場合、ムーブ命令のデスティネーション論理レジスタは、値照合キャッシュによって示される物理レジスタにマッピングされる。ヒットがなければ、ムーブの実行は従来技術のアーキテクチャにおけるように実行され、値照合キャッシュが更新される。
物理レジスタファイルはそれ自体、値照合キャッシュが不要であるように、値照合キャッシュの機能を果たすことができる。この場合、レジスタファイルは、並列なタグ照合を実行するために追加のポートを必要とし、タグは物理レジスタに格納されている値である。
上述のように、レジスタ間ムーブ命令および即値−レジスタ間ムーブ命令(後者のタイプのムーブについては値照合キャッシュにヒットした場合)は、複数の論理レジスタが同じ物理レジスタにマッピングされる複数のマッピングを作成することによって実行される。実質的に、そのようなムーブ命令は、それらがもはや実行ユニットによって実行されないという意味で「排除」される。代わりに、ムーブの排除がリネーミングステージにおいて実行される。これらの命令は、命令バッファウィンドウに残り、リタイアされる準備ができている。このようなムーブ命令に依存する命令は実際の製作者に直接依存するようにされるため(依存関係はリダイレクトされるため)、依存グラフは破綻する。また、物理レジスタの要件が減り、レジスタファイルへの書き込みが少なくなる可能性がある。
イディオム排除メカニズムも同様に、命令操作を従来のアウトオブオーダパイプラインに渡さずに命令操作に影響を与える。イディオムは、多くの場合、明示的な命令と比較してより最適化された方法で、特定の効果を達成するためにコーディングされた汎用命令の例である。ムーブイディオムは、R1=ADD R0、#0などの、他の効果なしにソースレジスタの内容をデスティネーションレジスタに入れるように構成された任意の命令を含む。ゼロイディオムも同様に、R0=XOR R0、R0などの、レジスタをゼロに設定するようにコード化された汎用命令である。No−op(NOP)は、明示的なNOPオペコードおよびR0=ADD R0、#0などのNOPイディオムを含む、アーキテクチャの状態に影響を与えないように定義された命令である。
本発明の実施形態は、マイクロopのリネーミング/割り当て帯域幅の節約、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数(IPC)、単位時間当たりの実行命令数、サービス品質、時間および/またはメモリ効率の向上、ならびにムーブ排除の範囲のさらなる命令タイプへの拡大によって、既存のムーブ排除およびイディオム排除技法を改善することが望ましい場合がある。
実施形態では、命令ストリーム上でのオンザフライムーブ排除およびイディオム排除オペレーションの結果は、マイクロopキャッシュ133または312などのデコードされたマイクロopキャッシュにキャッシュされてもよい。従って、必要な条件を再発見し、元の命令をパイプラインから削除するオペレーションを繰り返すことを避けることができる。
排除された命令は、排除された命令と同じ効果を達成するマイクロopキャッシュに格納されたメタデータと置き換えられてもよい。マイクロopキャッシュが書き込まれる場合、マイクロopがマイクロopキャッシュから削除され、従って配信されたマイクロopストリームから最適化されるように、ムーブ排除またはイディオム排除の結果がメタデータに変換される。オンザフライ命令排除メカニズムが機会を識別するための作業を既に行っているため、マイクロopキャッシュビルドは、影響を受けたマイクロopをスキャンして除去するように修正されてもよい。メタデータには、リネーミングオペレーションの実行に必要な情報に加えて、イベントバウンダリの存在やパフォーマンス監視カウンタの影響など、関連するアーキテクチャ情報が含まれている。例えば、メタデータは、いくつの命令が排除されたかを示し得る、および/または、CISCアーキテクチャの場合に、各命令ごとにいくつのマイクロopが排除されたかを示し得る、および/または排除された命令の後にマクロ終了命令が発生したことを示し得る。メタデータは、排除されたマイクロopの前および/または後にマイクロopのためのエントリ内のフィールドに格納されてもよい。
一実施形態では、ムーブの排除は、ゼロ拡張および符号拡張オペレーションを含むように拡張することができる。例えば、R0=MOV.ZE R1は、単純なムーブではなくてもムーブを排除することができる。
一実施形態では、RAT 3000は、図30に示すように、ゼロイディオム、符号拡張、およびゼロ拡張を含むように拡張することができる。RATは、次の3つのビットで拡張される、すなわち、設定時、RATエントリの残りの部分は無視され、論理レジスタはゼロとして扱われるZと、設定時、論理レジスタの値がエントリに格納されている物理レジスタファイル識別子(PRF ID)の符号拡張バージョンである、SEと、設定時、論理レジスタの値がエントリに格納されているPRF IDのゼロ拡張バージョンである、ZEと、で拡張される。
次いで、図31に示すように、Z、SE、およびZEビットは、レジスタリネーミング中に読み出され、レジスタを読み出したマイクロopによりパイプラインに渡される。ビットは、正しい結果を生成するためにALU 3120の動作の前に解釈される。図31において、左側のソース経路は、マルチプレクサ3110によるZ、SE、およびZEビットの解釈を含むように概念的に拡張されている。これらのビットに基づいて、ソースは、バイパスネットワークまたは物理レジスタファイルから修正されずに使用される、またはゼロに置き換えられる、または符号拡張後に使用される、またはゼロ拡張後に使用される。
一部の実施形態のまとめ
本発明の一実施形態は、複数のエントリ位置を有するマイクロオペレーションキャッシュを備えるプロセッサを含み得る。少なくとも1つのエントリ位置が、第1のフィールドと第2のフィールドとを含み得る。第1のフィールドは、第1のマイクロオペレーションを格納するためであり得る。第2のフィールドは、命令のストリームからデコードされるべきマイクロオペレーションのストリームからの第2のマイクロオペレーションの排除を示すメタデータを格納するためのものであり、第2のマイクロオペレーションは、ムーブ命令のデコードから生じ得る。
本発明の一実施形態は、複数のエントリを有するレジスタエイリアステーブルを備えるプロセッサを含み得る。少なくとも1つのエントリが、ゼロインジケータ、符号拡張インジケータ、およびゼロ拡張インジケータのうちの1つを格納するためのフィールドを含み得る。ゼロインジケータは、ソースオペランドがゼロに置き換えられることを示すためのものである。符号拡張インジケータは、ソースオペランドが符号拡張の後に使用されることを示すためのものである。ゼロ拡張インジケータは、ソースオペランドがゼロ拡張の後に使用されることを示すためのものである。
仮想レジスタリネーミング
実施形態によれば、プロセッサコアは、仮想レジスタリネーミング機能をサポートし得る。一部の実施形態では、256ビットオペランドymmiを128ビットレジスタファイルに格納することができる。256ビットオペランドの上半分は、128ビットオペランドymmihighとして128ビットレジスタファイルに格納されてもよい。256ビットオペランドの下半分を仮想的にリネーミングすることによって、256ビットオペランドの下半分を128ビットオペランドxmmi(ymmilow)として128ビットレジスタファイルに格納することができる。一部の実施形態において、この機能は、好都合にも、命令の半分をリネーミングすることによって、より広いISAをより小さな物理レジスタに実装することを可能にする。一部の実施形態では、より小さな物理レジスタの使用は、例えば命令の一部に個別にアクセスすることができるので、より高い柔軟性、省電力、およびより良いパフォーマンスを提供することによってコンピュータシステムを改善する。一部の実施形態では、他のサイズの命令およびレジスタを(例えば、512ビットオペランドを256ビットレジスタで)使用することができる。一部の実施形態では、オペランドは、より小さな断片、例えば3分の1、4分の1、8分の1、16分の1に分割されてもよい。例えば、仮想レジスタリネーミング機能は、例えば、64ビットレジスタファイルに格納される8つの部分として512ビットオペランドを維持するために使用され得る。
図32は、実施形態による、プロセッサに含まれ得る仮想レジスタリネーミング機能を示すブロック図である。仮想レジスタリネーミング機能は、256ビットオペランドymmiなどのオペランド3201を含むことができる。仮想レジスタリネーミング機能は、128ビットレジスタファイル3201をさらに含むことができる。256ビットオペランドymmi 3201は、128ビットレジスタファイル3202に格納することができる。256ビットオペランド3201の上半分は、128ビットオペランドymmihighとして128ビットレジスタファイル3202に格納されてもよい。256ビットオペランドの下半分を仮想的にリネーミングすることによって、256ビットオペランド3201の下半分を128ビットオペランドxmmi(ymmilow)として128ビットレジスタファイル3202に格納することができる。
図33は、実施形態による、プロセッサによって実行され得る仮想レジスタリネーミング機能のための方法を示す流れ図である。本方法は、3301に示すように、オペランドの下半分をレジスタファイルに格納するステップを含む。本方法は、3302に示すように、オペランドの上半分を仮想的にリネーミングするステップをさらに含む。本方法は、仮想的にリネーミングされたオペランドの上半分をレジスタファイルに格納するステップをさらに含む。さらなる実施形態では、他の修正が可能である。例えば、仮想的に上半分をリネーミングする代わりに、またはそれに加えて、オペランドの下半分を仮想的にリネーミングすることができる。加えて、オペレーションは異なる順序で実行されてもよい。例えば、仮想的にリネーミングされていない半分の格納は、仮想的にリネーミングするステップ、および/または仮想的にリネーミングされた半分を格納するステップの前または後に実行されてもよい。加えて、仮想的にリネーミングされた半分は、仮想的にリネーミングされてから格納されてもよいし、またはその逆であってもよい。
一部の実施形態のまとめ
一実施形態は、オペランドの第1の半分をレジスタファイルに格納し、オペランドの第2の半分を仮想的にリネーミングし、仮想的にリネーミングされたオペランドの第2の半分をレジスタファイルに格納する、ように構成されたプロセッサを含み得る。一部の実施形態では、以下のうちの1つまたは複数が当てはまる。オペランドは、256ビットオペランドであり得る。レジスタファイルは128ビットレジスタファイルであり得る。
一実施形態は、オペランドの第1の半分をレジスタファイルに格納するステップと、オペランドの第2の半分を仮想的にリネーミングするステップと、仮想的にリネーミングされたオペランドの第2の半分をレジスタファイルに格納するステップと、を含む方法を含み得る。一部の実施形態では、以下のうちの1つまたは複数が当てはまる。オペランドは、256ビットオペランドであり得る。レジスタファイルは128ビットレジスタファイルであり得る。
一実施形態は、プロセッサによって実行された場合にプロセッサに方法を実行させる少なくとも1つの命令を格納する非一時的機械可読媒体を含み得、本方法は、オペランドの第1の半分をレジスタファイルに格納するステップと、オペランドの第2の半分を仮想的にリネーミングするステップと、仮想的にリネーミングされたオペランドの第2の半分をレジスタファイルに格納するステップと、を含む。一部の実施形態では、以下のうちの1つまたは複数が当てはまる。オペランドは、256ビットオペランドであり得る。レジスタファイルは128ビットレジスタファイルであり得る。
一実施形態は、メモリとプロセッサとを有するシステムを備え、プロセッサが、オペランドの第1の半分をレジスタファイルに格納し、オペランドの第2の半分を仮想的にリネーミングし、仮想的にリネーミングされたオペランドの第2の半分をレジスタファイルに格納する、ように構成される。一部の実施形態では、以下のうちの1つまたは複数が当てはまる。オペランドは、256ビットオペランドであり得る。レジスタファイルは128ビットレジスタファイルであり得る。
FMA分離および融合
プロセッサコアは、本発明の実施形態による、乗算加算命令および演算の分離および融合をサポートすることができる。様々な実施形態において、プロセッサコアは、FP値を操作するために、任意の1つまたは複数の加算命令、乗算命令、融合乗算加算(FMAD)命令、および/または融合積和(FMAC)命令(FMADおよび/またはFMACはFMAと呼ばれ得る)を有する命令セットをサポートし得る。そのようなコアは、これらの命令に応じFP加算演算、乗算演算、および/またはFMA演算を実行するための加算器回路、乗算器回路、および/またはFMA回路のうちの任意の1つまたは複数を備え得る。整数値(例えば、FMAC)およびFP値(例えば、FMAD)を操作するために別々の命令および/または回路を設けることができ、実施形態は、一方または他方(整数またはFP)に関して説明され得るが、本発明の様々な実施形態は、一方または両方を含み得る。
本発明の実施形態は、命令発行/実行パイプライン内の様々なステージ間において、および/または命令発行/実行パイプライン内の様々なステージ内において、FMA命令/演算を加算命令/演算と乗算命令/演算との対に変換すること(分離)、ならびに/または加算命令/演算と乗算命令/演算との対をFMA命令/演算に変換することを提供する。この機能は、一般に、FMA分離/融合または動的FMA分離/融合と呼ばれ得る。
FMAの分離/融合を含む本発明の実施形態は、加算器回路および乗算器回路を有するがFMA回路は持たないコアにおいて、FMA命令を実行および/またはFMA演算を実行する能力を提供することと、1つまたは複数のコアリソースを介してスループットを向上させるために、FMA演算を使用して、乗算命令および加算命令を実行する能力を提供することと、ループ内のクリティカルパスを減らし、サイクル当たりの命令を増やすために、FMA命令または演算を乗算演算と加算演算とに動的に分割する能力を提供することと、パフォーマンス、複雑性、および電力の所望の組み合わせ(例えば、該当する基準のほんのいくつかを挙げると、パフォーマンスの向上、消費電力の削減、省電力機能の実装、公平性、最低保証パフォーマンス、スループット、クロック当たりの実行命令数(IPC)、単位時間当たりの実行命令数、サービス品質、時間および/またはメモリ効率の向上)に関して、FMA対応パイプラインをステージ単位で最適化する可能性を提供することと、を含む多くの理由で望ましい場合がある。
図34は、本発明の実施形態による、FMA分離/融合機能をサポートするプロセッサコアに実装され得る発行/実行パイプライン3400を示すブロック図である。図34では、パイプライン3400は、命令フェッチステージ3401と、命令デコードステージ3402と、リネーミング/割り当てステージ3403と、スケジューリングステージ3404と、実行ステージ3405と、リタイア/コミットステージ3406と、を含む。パイプライン3400は、例示目的で提供されており、本発明の様々な実施形態において様々な方法で実装および/または修正することができる。従って、パイプライン3400の以下の説明は、本明細書で説明されている他の図に示されている様々なブロックを参照することがある。
例えば、命令フェッチステージ3401は、(例えば、次PCレジスタ410を使用して)フェッチされる命令または命令のメモリロケーションを識別し、iキャッシュ(例えば、134、313、470、913)または他のメモリロケーションからその命令をフェッチするために、命令フェッチ回路(例えば、138、400)を使用することを含むことができ、命令デコードステージ3402は、(例えば、デコーダ530を使用して)命令をデコードするために、命令デコード回路(例えば140、314、500、914)を使用することを含むことができ、リネーミング/割り当てステージ3403は、レジスタオペランドをリネーミングし、かつ/またはレジスタリネーミングのために格納場所および/またはタグを割り当てるために、リネーミング/アロケータ回路(例えば、152、331、931)を使用することを含むことができ、スケジューリングステージ3404は、(例えば、デコーダ140、314、530、もしくは614、またはマイクロopキャッシュ133、312、540、もしくは912からの)実行のための命令に関連するオペレーションおよび/またはマイクロopをスケジューリングするために、スケジューラ回路(例えば、156、332、932)を使用することを含むことができ、実行ステージ3405は、(例えば、デコーダ140、314、530、もしくは614、またはマイクロopキャッシュ133、312、540、もしくは912からの)実行のための命令に関連するオペレーションおよび/またはマイクロop実行するために、実行回路(例えば、162、334、335、770、780、934、935)を使用することを含むことができ、リタイア/コミットステージ3406は、命令をリタイアし、かつ/またはその結果を物理レジスタファイル(例えば、158、333、750、933)またはメモリにコミットするために、リタイアメント回路(例えば、154、730、960)を使用することを含むことができる。図34に示す各ステージは、様々な実施形態において、1つまたは複数のステージおよび/またはクロックサイクルを表すことができる。
図34はまた、融合経路3410および分割経路3420を示し、それぞれがパイプライン3400を通る経路の一実施形態を表す。例示的な実施形態を使用して後述するように、融合経路3410は、FMA命令、オペレーション、および/またはマイクロopを、融合命令、演算、および/またはマイクロopとして処理、実行(perform)、および/または実行(execute)するための回路、構造、および/またはハードウェアを含み得る。例示的な実施形態を使用して後述するように、分割経路3420は、乗算および加算の命令、演算、および/またはマイクロopを、別々の命令、演算、および/またはマイクロopとして処理、実行(perform)、および/または実行(execute)するための回路、構造、および/またはハードウェアを含み得る。さらに、分割経路3420は、FMA命令、演算、および/またはマイクロopを、乗算および加算の命令、演算、および/またはマイクロopとして処理、実行(perform)、および/または実行(execute)するための回路、構造、および/またはハードウェアを含むことができ、融合経路3410は、乗算および加算の命令、演算、および/またはマイクロopを、融合命令、演算、および/またはマイクロopとして処理、実行(perform)、および/または実行(execute)するための回路、構造、および/またはハードウェアを含むことができる。
従って、図34は、融合された、および/または別々の乗算および加算の命令、演算、およびマイクロオペレーションを処理、実行(perform)、および/または実行(execute)するために使用され得るコアリソースのセットを概念的に示している。以下でさらに説明されるように、様々な実施形態は、様々な機能をサポートするためにこれらのリソースの様々なサブセットを含み得る。また、実装形態は、本発明の様々な実施形態を実施するために提供および/または構成され得る、図34に示されていない様々な追加のリソースを含み得る。
図34はまた、FMA分離/融合コントローラ3430を示し、FMA分離/融合コントローラ3430は、融合経路3410および/または分割経路3420を介して、および/または融合経路3410および/または分割経路3420の間において、命令、演算、マイクロop、オペランド、値、および/または他のデータを、方向付けるための制御信号を生成するために、1つまたは複数の制御回路および/またはソフトウェアプログラム可能またはハードウェア構成レジスタを含む、プログラム可能、構成可能、またはハードワイヤードコントローラまたは制御構造を表し得る。これらの制御信号は、融合経路3410および分割経路3420内のリソースの組み合わせを含む、パイプライン3400を通る1つまたは複数の経路を提供することができる。これらの制御信号は、FMA命令、演算、および/もしくはマイクロopを、第1の条件に応じて、融合命令、演算、および/もしくはマイクロopとして、第2の条件に応じて、別々の乗算および加算の命令、演算、および/もしくはマイクロopとして、処理、実行、および/もしくは実行させることによって、ならびに/または別々の乗算および加算の命令、演算、および/もしくはマイクロopを、第3の条件に応じて、融合した命令、演算、および/もしくはマイクロopとして、第4の条件に応じて、別々の乗算および加算の命令、演算、および/もしくはマイクロopとして、処理、実行、および/もしくは実行させることによって、動的FMA分離/融合を提供し得る。
例えば、FMA命令は、融合経路3410内のハードウェアによってフェッチされてもよく、コントローラ3430は、命令を2つの別々のマイクロop、すなわち乗算マイクロopおよび加算マイクロopにデコードするために、分割経路3420内のハードウェアに命令を送るための1つまたは複数の制御信号を生成してもよい。コントローラ3430は、図34では独立したブロックとして示されているが様々な実施形態において、プロセッサコア内の別の制御構造内に一体化される、または含まれる場合もあるし、(例えば、例を後述する、コアが可能な経路を1つのみ提供する実施形態では)完全に省略される場合もある。
図34では、融合経路3410は、フェッチャ3411と、デコーダ3412と、リネーマ3413と、スケジューラ3414と、融合乗算加算器3415と、リオーダバッファ/リタイアキュー(ROB/RQ)3416と、を含み、分割経路3420は、フェッチャ3421と、デコーダ3422と、リネーマ3423と、スケジューラ3424と、乗算器3425Aおよび加算器3425Bと、リオーダバッファ/リタイアキュー(ROB/RQ)3426と、を含む。
フェッチャ3411は、FMA命令(例えば、VFMADD132PS、VFMADD213PS、VFMADD231PS、VFMADD132PD、VFMADD213PD、VFMADD231PD、VFMADD132SS、VFMADD213SS、VFMADD231SS、VFMADD132SD、VFMADD213SD、VFMADD231SD、VFMSUB132PS、VFMSUB213PS、VFMSUB231PS、VFMSUB132PD、VFMSUB213PD、VFMSUB231PD、VFMSUB132SS、VFMSUB213SS、VFMSUB231SS、VFMSUB132SD、VFMSUB213SD、VFMSUB231SD、VFNMADD132PS、VFNMADD213PS、VFNMADD231PS、VFNMADD132PD、VFNMADD213PD、VFNMADD231PD、VFNMADD132SS、VFNMADD213SS、VFNMADD231SS、VFNMADD132SD、VFNMADD213SD、VFNMADD231SD、VFNMSUB132PS、VFNMSUB213PS、VFNMSUB231PS、VFNMSUB132PD、VFNMSUB213PD、VFNMSUB231PD、VFNMSUB132SS、VFNMSUB213SS、VFNMSUB231SS、VFNMSUB132SD、VFNMSUB213SD、VFNMSUB231SD,VFMADDSUB132PS、VFMADDSUB213PS、VFMADDSUB231PS、VFMADDSUB132PD、VFMADDSUB213PD、VFMADDSUB231PD、VFMSUBADD132PS、VFMSUBADD213PS、VFMSUBADD231PS、VFMSUBADD132PD、VFMSUBADD213PD、またはVFMSUBADD231PDなどの(以下に定義される)AVX命令)をフェッチするための回路および/または構造を含むことができる。
フェッチャ3411によってフェッチされたFMA命令は、3つのオペランドを有し得る。例えば、VFMADD231PS命令には、第1のオペランド(xmm1またはymm1)と、第2のオペランド(xmm2またはymm2)と、第3のオペランド(xmm3またはymm3)とを有することができ、これらのオペランドによって指定され得るxmmレジスタおよびymmレジスタについては以下で説明する。これらのレジスタは、スカラ値またはパックド値を保持することができ、一実施形態の便宜上の説明のために、文字「d」を使用して、ソース/デスティネーションレジスタもしくはxmmlオペランドによって指定されるレジスタの一部、および/またはこのレジスタもしくはこのレジスタの一部に格納された、もしくは格納される値を指す場合があり、文字「a」を使用して、ソースレジスタもしくはxmm2オペランドによって指定されるレジスタの一部、および/またはこのレジスタもしくはこのレジスタの一部に格納された、もしくは格納される値を指す場合があり、文字「b」を使用して、ソースレジスタもしくはxmm3オペランドによって指定されるレジスタの一部、および/またはこのレジスタもしくはこのレジスタの一部に格納された、もしくは格納される値を指す場合がある。従って、a、b、およびdはオペランドとも呼ばれ得る、VFMADD231PS命令に応じて実行される演算の概念的な表現は、d=a*b+dとなる。さらに、この説明はオペランドをレジスタとして言及しているが、実施形態は、任意のまたはすべてのオペランドについてレジスタの代わりにメモリロケーションを使用することができる。
フェッチャ3421は、乗算命令(例えば、MULPS、MULPD、MULSS、またはMULSDなどのSSE(ストリーミング単一命令−複数データ拡張)命令)および加算命令(例えば、ADDPS、ADDPD、ADDSS、またはADDSDなどのSSE命令)であって、乗算命令と加算命令とのそれぞれが2つのオペランドを有する命令をフェッチするための回路、構造、および/またはハードウェアを含み得る。例えば、MULPS命令は、第1のオペランド(xmm1)と第2のオペランド(xmm2)とを有することができ、ADDPS命令は、第1のオペランド(xmm1)と第2のオペランド(xmm2)と、を有することができ、一般に、MULPS xmm1、MULPS xmm2、ADDPS xmm1、およびADDPS xmm2の各オペランドは異なるレジスタであり得る。しかしながら、本発明の一実施形態では、フェッチャ3421は、ADDPS命令がMULPS命令に依存すると判定された場合(すなわち、MULPSの結果がADDPSへの入力である場合)、MULPS命令をADDPS命令とペアにすることができる。例えば、MULPS xmmlオペランドとして「a」、MULPS xmm2オペランドとして「b」を使用すると、対応する乗算演算a=a*bであり、次にaがADDPS xmm2オペランドとして使用される場合に、ADDPS xmmlオペランドとして「d」を使用すると、対応する加算演算はd=d+aであり、フェッチャ3421は、MULPS命令とADDPS命令をペアにすることができる。実施形態では、ペアリングすること、および/またはペアリングの条件が満たされるか否かを判定することは、コントローラ3430からの制御信号に応じて実行され得る。
フェッチャ3411は、矢印3432Aによって表されるように、デコーダ3412に、および/または矢印3432Bによって表されるように、デコーダ3422に結合または接続され得る。フェッチャ3421は、矢印3432Cによって表されるように、デコーダ3412に、および/または矢印3432Dによって表されるように、デコーダ3422に結合または接続され得る。様々な実施形態において、結合もしくは接続、および/またはデコーダ動作は、静的(例えば、ハードワイヤード)または動的(例えば、3430からの制御信号に応じて)であり得る。
デコーダ3412は、フェッチャ3411から受信したFMA命令を、3つのオペランド(例えば、d、a、およびb)を有するFMAマイクロopにデコードするための回路、構造、および/またはハードウェアを含み得る。代替的または追加的に、デコーダ3412は、フェッチャ3421から受信したペアにされた乗算および加算命令を、3つのオペランド(例えば、d、a、およびb)を有するFMAマイクロopにデコードするための回路、構造、および/またはハードウェアを含み得る。
デコーダ3422は、フェッチャ3411から受信したFMA命令を、2つのオペランドを有する乗算マイクロopと2つのオペランドを有する加算マイクロopとにデコードするための回路、構造、および/またはハードウェアを含み得る。代替的または追加的に、デコーダ3422は、フェッチャ3421からのペアにされた乗算および加算命令を、2つのオペランドを有する乗算マイクロopと2つのオペランドを有する加算マイクロopとにデコードするための回路、構造、および/またはハードウェアを含み得る。例えば、乗算マイクロopはt=a*bとして表すことができ、加算マイクロopはd=d+tとして表すことができ、新しいオペランド「t」が乗算演算のデスティネーションおよび加算演算のソースとして働くために導入され得る。
デコーダ3412は、矢印3433Aによって表されるように、リネーマ3413に、および/または矢印3433Bによって表されるように、リネーマ3423に結合または接続され得る。デコーダ3422は、矢印3433Cによって表されるように、リネーマ3413に、および/または矢印3433Dによって表されるように、リネーマ3423に結合または接続され得る。様々な実施形態において、結合もしくは接続、および/またはリネーマ動作は、静的(例えば、ハードワイヤード)または動的(例えば、3430からの制御信号に応じて)であり得る。
リネーマ3413および/または3423は、レジスタオペランドをリネーミングするために、ならびに/またはレジスタリネーミングのために記憶場所および/もしくはタグを割り当てるために、リオーダバッファなどの回路、構造、および/またはハードウェアを含み得る。実施形態では、レジスタの競合(例えば、a、b、t、および/またはdについて)を排除するために、リネーマ3413は、FMA演算についてのオペランドを(例えば、a'、b'、および/またはd'として)リネーミングし得る、および/またはリネーマ3423は、乗算演算についてのオペランドを(例えばa'および/またはb'として)リネーミングし、加算演算についてのオペランドを(例えばt'および/またはd'として)リネーミングし得る。
リネーマ3413は、矢印3434Aによって表されるように、スケジューラ3414に、および/または矢印3434Bによって表されるように、スケジューラ3424に結合または接続され得る。リネーマ3423は、矢印3434Cによって表されるように、スケジューラ3414に、および/または矢印3434Dによって表されるように、スケジューラ3424に結合または接続され得る。様々な実施形態において、結合もしくは接続、および/またはスケジューラ動作は、静的(例えば、ハードワイヤード)または動的(例えば、3430からの制御信号に応じて)であり得る。
スケジューラ3414および/または3424は、実行のためにオペレーションおよび/またはマイクロopをスケジューリングするために、リザベーションステーションなどの回路、構造、および/またはハードウェアを含み得る。実施形態では、スケジューラ3414は、FP実行回路のためのリザベーションステーションにおいて、オペランドa、b、およびdにより実行されるFMA演算をスケジューリングすることができる、および/またはスケジューラ3424は、FP実行回路のためのリザベーションステーションにおいて、オペランドa、bにより実行される乗算演算と、オペランドt、dにより実行される加算演算と、をスケジューリングすることができる。
スケジューラ3414は、矢印3435Aによって表されるように、融合乗算/加算器3415に、および/または矢印3435Bによって表されるように、乗算器3425Aもしくは乗算器3425Aと加算器3425Bとの両方に結合または接続され得る。スケジューラ3424は、矢印3434Cによって表されるように、融合乗算/加算器3415に、および/または矢印3434Dによって表されるように、乗算器3425Aもしくは乗算器3425Aと加算器3425Bとの両方に結合または接続され得る。様々な実施形態において、結合もしくは接続、および/またはスケジューラ動作は、静的(例えば、ハードワイヤード)または動的(例えば、3430からの制御信号に応じて)であり得る。
融合乗算/加算器3415、乗算器3425A、および加算器3425Bは、それぞれ、融合乗算加算演算、乗算演算、および加算演算を実行するための回路、構造、および/またはハードウェアを含み得る。一実施形態では、乗算器3425Aは、乗算演算のために2つの入力(例えば、aおよびb)を受信するためにリザベーションステーションに結合され、その出力(例えばt)を、加算演算のための2つの入力(例えば、tおよびd)のうちの1つとして使用されるように提供するために加算器3425Bに結合され得る。この実施形態では、(例えば、IEEE規格754による)専用の融合乗算加算器の精度は、丸めていない乗算結果を加算器に送信することによって得ることができる。別の実施形態では、乗算器3425Aは、出力(例えば、t)を生成する乗算演算のために2つの入力(例えば、aおよびb)を受信するためにリザベーションステーションに結合され、加算器3425Aは、加算演算のための2つの入力(例えば、tおよびd)を受信するためにリザベーションステーションに結合され得る。この実施形態では、専用の融合乗算加算器の精度は、中間結果(例えば、t)の内部記憶場所の幅を広げることによって、または特別な処理を提供するためにマイクロコードアシストまたはトラップを使用することによって得ることができる。
融合乗算加算器3415は、矢印3436Aによって表されるように、ROB/RQ 3416に、および/または矢印3436Bによって表されるように、ROB/RQ 3426に結合または接続され得る。加算器3425Bは、矢印3436Cによって表されるように、ROB/RQ 3416に結合または接続され得る、および/または、加算器3425B、または乗算器3425Aと加算器3425Bとの両方は、矢印3436Dによって表されるように、ROB/RQ 3426に結合または接続され得る。様々な実施形態において、結合もしくは接続、および/またはスケジューラ動作は、静的(例えば、ハードワイヤード)または動的(例えば、3430からの制御信号に応じて)であり得る。
ROB/RQ 3416および/またはROB/RQ 3426は、命令をリタイアする、および/または結果をコミットするために、リオーダバッファおよび/またはリタイアメントキューなどの回路、構造、および/またはハードウェアを含み得る。一実施形態では、ROB/RQ 3416は、FMA命令をリタイアし、その結果(例えば、xmm1)をコミットすることができる。一実施形態では、ROB/RQ 3426は、乗算命令および加算命令をリタイアし、それらの結果をコミットすることができる(例えば、それぞれMULPS xmm1、ADDPS xmm1)。一実施形態では、ROB/RQ 3416は、別個の乗算演算の結果が望まれない限り(例えば、命令セットアーキテクチャに従って予想される)、別個の乗算命令と別個の加算命令との融合によって作成されたFMA演算の結果をコミットすることができる。一実施形態では、ROB/RQ 3426は、FMA命令の結果として、FMA命令の分離によって作成された加算演算の結果をコミットすることができる。本発明の実施形態によるプロセッサコアでは、加算命令の結果は、対応するFMA命令の結果と同じになる。
図34に示すように、実施形態は、発行/実行パイプラインの様々なステージでFMAの分離または融合を提供することができる。一実施形態では、デコードステージ3402での分離は、専用の融合乗算加算器なしでコアで実行される融合乗算加算命令を提供することができる。一実施形態では、デコードステージ3402、リネーミング/割り当てステージ3403、スケジューリングステージ3404、実行ステージ3405、および/またはリタイアステージ3406における融合は、ハードウェアリソース(2つの命令/演算/マイクロopではなく1つの命令/演算/マイクロop)を通してより大きなスループットを提供し得る。一実施形態では、リネーミング/割り当てステージ3403での分離は、オペランドの数を3つではなく2つに制限することによって、リネーミングハードウェアの複雑さを軽減することができる。一実施形態では、リネーミング/割り当てステージ3403および/またはスケジューリングステージ3404での融合は、リネーミング、リオーダリング、および/またはスケジューリングのストレージにおいて使用されるエントリをより少なくして、より深いアウトオブオーダ実行ウィンドウおよび/またはより大きな命令レベルの並列処理の発見を可能にし得る。一実施形態では、スケジューリングステージ3404での分離は、アウトオブオーダウェイクアップソースの数をエントリごとに3つではなく2つに制限することによって、ハードウェアの複雑さを軽減することができる。一実施形態では、スケジューリングステージ3404および/または実行ステージ3405での分離は、FMA演算の別々の部分を異なる時間に実行して、クリティカルパスを2つの部分の合計ではなく最も遅い部分のクリティカルパスに制限できるようにすることによって、レイテンシの短縮をもたらす。一実施形態では、実行ステージ3405での融合は、専用の融合乗算加算器を使用することによって、パフォーマンスの向上、精度の向上、および/または電力の低減をもたらすことができる。
図35は、本発明の実施形態による、プロセッサによって実行され得るFMA分離/融合のための方法を示す流れ図である。図35の方法3500のブロック3510において、命令フェッチ回路(例えば、138、400)は、iキャッシュ(例えば、134、313、470、913)または他のメモリロケーションから命令をフェッチすることができる。例えば、命令は、第1のオペランド(「d」)、第2のオペランド(「a」)、および第3のオペランド(「b」)を有する、VFMADD231PSなどのFMA命令の例であり得、これに応じて、プロセッサは、FMA演算を実行する(例えば、d=a*b+d)。
ブロック3520において、FMA命令の分離を実行するようにハードワイヤード、構成、またはプログラムされている命令デコード回路またはデコーダ(例えば、140、314、500、914)は、命令を複数の別々のマイクロop、すなわち乗算マイクロopおよび加算マイクロopにデコードすることができる。デコーダは、FMA命令および/もしくは別のマイクロopからの特定のオペランドを選択すること、それらのうちの1つまたは複数を別々のマイクロopのうちの1つまたは複数に割り当てること、ならびに/または別々のマイクロopのうちの1つまたは複数のための新しいオペランドを作成することを行い得る。例えば、FMA命令の「a」および「b」のオペランドを、デコーダは、乗算マイクロopのためのソースオペランドとして選択し、乗算マイクロopのためのデスティネーションオペランドとして「t」のオペランドを作成し、これに応じて、プロセッサは、乗算演算t=a*bを実行することができ、デコーダは、FMA命令の「d」のオペランドおよび乗算マイクロopの「t」オペランドを、加算マイクロopのためのソースオペランドとして選択し、FMA命令の「d」のオペランドを、加算マイクロopのためのデスティネーションオペランドとして選択し、これに応じて、プロセッサは、加算演算d=d*tを実行することができる。
ブロック3530において、レジスタリネーミング回路(例えば、152、331、931)は、オペランドのいずれかをリネーミングすること、(例えば、リオーダバッファにおける)レジスタリネーミングのために記憶場所および/もしくはタグを割り当てること、ならびに/または乗算マイクロopの出力(例えば、「t」)を加算マイクロop入力として割り当てることを実施すること、を行うことができる。
ブロック3540において、スケジューラ回路(例えば、156、332、932)は、例えばFPユニットのためのリザベーションステーションにおいて、実行のために別々のマイクロopをスケジューリングすることができる。一実施形態では、命令の同じインスタンスからデコードされた複数の別々のマイクロop(例えば、FMA命令からデコードされた乗算および加算マイクロop)は、指定された順序でディスパッチするためにリザベーションステーションでスケジューリングルされる(例えば、加算マイクロopは、複数のマイクロopのディスパッチおよび/または完了の後にのみ、ディスパッチのためにスケジューリングされ得る)。
ブロック3550において、実行回路(例えば、162、334、770、934)は、別々のマイクロopのうちの一方を実行することができる。例えば、FP乗算器334A、334B、770A、770B、934A、または934Bが乗算マイクロopを実行してもよい。
ブロック3552において、実行回路(例えば、162、335、780、935)は、別々のマイクロopのうちの他方を実行することができる。例えば、FP加算器335A、335B、780A、780B、935A、または935Bが加算マイクロopを実行してもよい。
ブロック3560において、リタイア回路(例えば、154、730、960)は、命令をリタイアし、かつ/またはその結果を物理レジスタファイル(例えば、158、333、750、933)またはメモリにコミットすることができる。一実施形態では、ブロック3560は、命令からデコードされた別々のマイクロopのうちの1つのみのリタイアを含むことができる。例えば、FMA命令は、リオーダバッファから対応する加算マイクロopをリタイアし、その結果(例えば、d)をコミットすることにより、リタイアおよび/またはその結果がコミットされてもよい。
一部の実施形態のまとめ
本発明の一実施形態は、パイプラインに配置された複数の回路を備えるプロセッサを含み得る。複数の回路は、融合乗算加算命令を少なくとも2つの別々のマイクロオペレーションにデコードするためのデコーダを有し得る。複数の回路はまた、2つの別々のマイクロオペレーションのうちの第1のマイクロオペレーションに対して動作する乗算器と、2つの別々のマイクロオペレーションのうちの第2のマイクロオペレーションに対してで動作する加算器と、を有し得る。
具体的なプロセッサアーキテクチャ
図36は、本発明の実施形態による、複数のコアを有することができ、統合メモリコントローラを有することができ、統合グラフィックを有することができる、プロセッサ3600のブロック図である。図36の実線のボックスは、シングルコア3602A、システムエージェント3610、1つまたは複数のバスコントローラユニット3616のセットを有するプロセッサ3600を示すが、任意の追加される破線のボックスは、複数のコア3602A〜N、システムエージェントユニット3610における1つまたは複数の統合メモリコントローラユニット(単数または複数)3614のセット、および専用ロジック3608を有する代替的なプロセッサ3600を示す。
よって、プロセッサ3600の異なる実装は、1)統合グラフィックおよび/または科学技術計算(スループット)ロジック(1つまたは複数のコアを含み得る)である専用ロジック3608と、1つまたは複数の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら2つの組み合わせ)であるコア3602A〜Nと、を有するCPU、2)主にグラフィックおよび/または科学技術計算(スループット)のための多数の専用コアであるコア3602A〜Nを有するコプロセッサ、ならびに3)多数の汎用インオーダコアであるコア3602A〜Nを用いるコプロセッサを含み得る。よって、プロセッサ3600は、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ(例えば、セキュリティコプロセッサ)、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置であり得る。プロセッサは、1つまたは複数のチップ上に実装することができる。プロセッサ3600は、例えば、BiCMOS、CMOS、またはMOSなどのいくつかのプロセス技術のいずれかを使用して、1つまたは複数の基板の一部であってもよい、および/または1つまたは複数の基板の上に実装されてもよい。
メモリ階層は、コア内の1つまたは複数のレベルのキャッシュ、1セットもしくは1つまたは複数の共有キャッシュユニット3606、および統合メモリコントローラユニット3614のセットに結合された外部メモリ(図示せず)を含む。共有キャッシュユニット3606のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)などの1つまたは複数の中間レベルのキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせを含み得る。1つの実施形態では、リングベースの相互接続ユニット3612は、統合グラフィックロジック3608(統合グラフィックロジック3608は、専用ロジック一例であり、本明細書で専用ロジックとも呼ばれる)、共有キャッシュユニット3606のセット、およびシステムエージェントユニット3610/統合メモリコントローラユニット(単数または複数)3614を相互接続するが、代替的な実施形態は、そのようなユニットを相互接続するための任意の数の周知の技法を用いることができる。1つの実施形態では、コヒーレンシは、1つまたは複数のキャッシュユニット3606とコア3602A〜Nとの間で保持される。
いくつかの実施形態では、コア3602A〜Nのうちの1つまたは複数はマルチスレッディング可能である。システムエージェント3610は、コア3602A〜Nを調整および動作させるコンポーネントを含む。システムエージェントユニット3610は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含み得る。PCUは、コア3602A〜Nおよび統合グラフィックロジック3608の電力状態を調整するのに必要とされるロジックおよびコンポーネントであるか、またはこれらを含み得る。ディスプレイユニットは、1つまたは複数の外部接続ディスプレイを駆動するためのものである。
コア3602A〜Nは、アーキテクチャ命令セットの観点からは同種または異種であり得る。すなわち、コア3602A〜Nのうちの2つ以上が、同じ命令セットを実行することができる場合があるが、他のものは、この命令セットまたは異なる命令セットのサブセットのみを実行することができる場合がある。
図37は、本発明の実施形態による、プロセッサに含まれ得る例示的な中央処理装置(CPU)複合体のブロック図である。一実施形態では、L3キャッシュは、4コアモジュール(CPU複合体またはCCXと呼ばれる)上に分割された8MBの16ウェイキャッシュであり、コア当たり2MBの「スライス」のL3キャッシュを提供する。しかしながら、CCXにおけるL3キャッシュスライスは、L3キャッシュが共有キャッシュになるように実装されている。複数のCCXを単一のプロセッサに含めることができる(例えば、2つのCCXが16MBのL3キャッシュを形成する)。各CCXの8MBキャッシュは別々のものであるため、データが必要か否かを判定するために他のL3キャッシュへの適切なフックと共に4コアモジュールごとの最終レベルのキャッシュとして機能する(L3キャッシュ設計に含まれるプロトコルにより、各コアが他の各コアのL3キャッシュにアクセスできる)。従って、これらのL1、L2、およびL3キャッシュはコヒーレントキャッシュであり、CCX内およびCCX間のL3キャッシュスライスはキャッシュコヒーレントインターコネクト(キャッシュコヒーレントファブリックとも呼ばれる)によって接続されている。
図38は、本発明の実施形態による、プロセッサに含まれ得る例示的なキャッシュ階層のブロック図である。図38では、キャッシュ階層3800は、L1 iキャッシュ3810AおよびL1 dキャッシュ3810B(まとめてL1キャッシュ3810)と、L2命令およびデータキャッシュ3820と、レベル3(L3)の命令およびデータキャッシュ3830と、を含む。一実施形態では、L1キャッシュ3810とL2キャッシュ3820との両方がプライベート/ローカルライトバックキャッシュである一方、L3キャッシュ3830は犠牲キャッシュである。一実施形態では、L1 iキャッシュ3810Aは64KBの4ウェイキャッシュであり、L1 dキャッシュ3810Bは32KBの8ウェイキャッシュであり、L2キャッシュ3820は512KBの8ウェイキャッシュであり、レベル3(L3)キャッシュ3830は、8MBの16ウェイキャッシュである。
メモリ構成機能
本発明の実施形態によるプロセッサコア、プロセッサ、およびシステムは、メモリの構成および使用に関連する様々な機能を含み得る。いくつかのそのような機能は、以下の非限定的な例を用いて別々に説明されるが、実施形態はそのような機能の任意の組み合わせを含み得る。
キャッシュラインゼロ化
一部の実施形態は、実行することにより、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こす命令を含む。そのような命令は、キャッシュラインゼロ化命令、CLZERO命令、CLZEROING命令、キャッシュライン初期化命令、CLINIT命令などと呼ばれ得る。1つの実施形態では、キャッシュラインゼロ化命令は、コア190および/またはコア5300などのコアによって実行されるマクロ命令である。具体的には、デコーダ140および/またはデコーダ5314は、そのようなマクロ命令を、メモリアクセスユニット(単数または複数)164および/またはアドレス生成ユニット(単数または複数)325/ロードストアユニット340にそれぞれオペレーションを実行させる1つまたは複数の比較的低レベルの命令または制御信号(例えば、1つまたは複数のマイクロ命令、マイクロオペレーション(マイクロop)、マイクロコードエントリポイント、デコードされた命令または制御信号)にデコードするように実装される。
キャッシュラインゼロ化命令は、オーナーシップ要求(request for ownership)(RFO)オペレーションを使用する必要がない、または少なくともデータを返送または戻す必要がないので、キャッシュラインをゼロ化するためのより速くより決定的な方法であるという利点を有する。RFOオペレーションは、キャッシュコヒーレンシプロトコルにおける、読み出しとインバリデートブロードキャストとを組み合わせたオペレーション(そのメモリアドレスへの書き込みを目的とした読み取りオペレーション)であり、従って、他のすべてのコヒーレントキャッシュに、そのようなキャッシュラインの状態を「無効」のキャッシュコヒーレンシプロトコル状態へ設定させる。例えば、RFOオペレーションは、典型的には、MESIプロトコルの共有状態(S)または無効状態(I)にあるキャッシュラインに書き込もうとしているプロセッサによって発行される。MESIプロトコルは、「修正状態」、「排他状態」、「共有状態」、および「無効状態」のキャッシュコヒーレンシプロトコル状態を使用する。対照的に、キャッシュラインゼロ化命令の実装は、キャッシュラインゼロ化命令がデータをゼロ化しているため、ラインが読み出されて発行エージェントに返されることを必要とせず、実際、一部の実施形態では、発行エージェントはデータのオーナーシップを有する必要はない。
異なる実施形態は、異なる方法でメモリアドレスを示すようにキャッシュラインゼロ化命令を実装し得る。例えば、キャッシュラインゼロ化命令は、アドレス情報を明示的に(例えば、即値を介しての1つまたは複数のフィールド)、間接的に(例えば、アドレス情報が格納される1つまたは複数のレジスタを指定することにより)、および/または黙示的に(例えば、1つまたは複数の指定されたレジスタ)示すように実装され得る。メモリアドレス情報は、メモリアドレスであり得る、またはメモリアドレスを生成するために他の情報(例えば、セグメントレジスタからの情報など)と組み合わせて使用される情報であり得る。一部の実施形態ではメモリアドレスがキャッシュライン境界上にアラインされているが、代替的な実施形態はまた、キャッシュライン境界間にあり、それらの境界間のキャッシュラインを示すものとして扱われるメモリアドレスをサポートし得る。アドレス情報は、絶対メモリアドレス情報または相対メモリアドレス情報のいずれかを表すことができ、相対メモリアドレス情報は、ベースメモリアドレスまたは他のメモリロケーションに対するメモリロケーションを示し得る。加えて、異なる間接メモリアドレッシングモードを場合により使用することができる。1つの具体的な例として、命令は、メモリアドレスを識別するために使用される最終メモリアドレスを生成するために、別の黙示的なレジスタに格納された追加のメモリアドレス情報(例えば、コード、データ、または拡張セグメントレジスタ)と組み合わされ得る相対的なメモリアドレス情報を格納するために使用されるレジスタ(例えば、汎用レジスタ)を黙示的に示し得る。これはほんの一例である。他の形式のアドレス情報も可能である。
異なる実施形態は異なるサイズのキャッシュライン(例えば、32バイト、64バイト)を実装してもよい、および/または所与の実施形態が複数のキャッシュラインサイズを実装してもよい。例えば、実施形態は、1)特定のキャッシュラインサイズに対して実施される(従って、キャッシュラインサイズを指定する必要がない)か、2)異なる種類のコアが異なるキャッシュラインサイズを有する場合、現在のキャッシュサイズを使用するように実装される(例えば、現在のキャッシュサイズはレジスタ内の値を介して示され得る)か、3)キャッシュラインサイズを示すフィールドを持つように実装される、キャッシュラインゼロ化命令をサポートすることができる。一部の実施形態では、命令は、1つまたは複数のキャッシュライン(すなわち、キャッシュラインサイズの倍数)を示すサイズパラメータの指示を可能にする。一部の実施形態では、追加的または代替的に、ゼロ命令があり、ゼロ命令は、ソフトウェアがキャッシュラインサイズを知らないようにできるため、キャッシュラインサイズに結び付けられないサイズパラメータ(例えば、単にバイト数を示す)の指示を可能にする(サイズがキャッシュラインサイズの倍数でない場合(例えば、キャッシュラインサイズが64バイトであってもバイト数で指定され、バイト数は112である)、実施形態は、キャッシュラインまでゼロにするか、その最後のラインの残りのデータだけにRFOを発行することができる)。
一部の実施形態では、キャッシュラインゼロ化命令はアトミックである。よって、ゼロのキャッシュライン全体がその全体で格納されるか、その一部だけではなくそのどれも格納されないかのいずれかである(すなわち、完了アトミック性保証)。アトミック性はまた、キャッシュラインゼロ化命令によって書き込まれたゼロが他のストアによって格納されたデータとインターリーブされないことを保証することもできる。アトミック性は、他のアクセスに関して、そのようなアクセスが、全体が格納されているデータのすべてを観察するか、格納されているデータを一部分だけではなくどれも観察しないかのいずれかであるようであり得る。アトミック性は、停電、システムクラッシュ、再起動、または他のそのようなイベントに関して、たとえそのようなイベントに際したとしても、すべてのゼロが格納されるか、一部分だけではなくなんらゼロを格納しないかのいずれかであるようであり得る。このようなアトミック操作には様々な可能な使用法がある。そのような使用法の1つの例は、データベース内のデータを自動的に更新することである。そのような使用法の別の例は、マルチプロセッシング環境で共有データを自動的に更新することである。そのような使用法のさらに別の例は、ロック、セマフォを置き換えるため、共有変数を更新するため、同期するため、調整するなどのための場所にデータを自動的に格納することである。そのようなアトミックストア操作のさらに他の使用法が企図されており、本開示の利益を有する当業者には明らかであるはずである。
例示的なメモリ階層
図39は、本発明の実施形態による、キャッシュラインゼロ化命令を実装することができるメモリ階層を示すブロック図である。図示のメモリ階層は、様々なプロセッサコア、コアクラスタ、CCX、プロセッサ、コンピュータアーキテクチャなどと共に実施することができる。具体的な実施形態として、図3、図8、図38、および図37のコア/CCXと共に図39のメモリ階層を参照してキャッシュゼロ化命令の実装を説明する。これは例示を目的としたものであり、キャッシュゼロ化命令は、異なるメモリ階層で、および/または異なるコア、コアクラスタなどと共に、実施することができる。
図39は、コヒーレントエージェント3900およびコヒーレントエージェント3901、ならびに「…」および破線のボックスを使用したコヒーレントエージェント3902によって表される他のコヒーレントエージェントの可能性を示す。図39のメモリ階層は、コヒーレントキャッシュ3904Aと、インターコネクト3920と、ダウンストリームメモリ3930と、を含む。異なる実施形態は、コヒーレントキャッシュ3904Aの一部として異なる数のキャッシュおよびキャッシュレベルを実装し得る。コヒーレントエージェントおよびコヒーレントキャッシュは、キャッシュコヒーレンシがキャッシュコヒーレンシプロトコル(例えば、「修正状態」、「排他状態」、「共有状態」、および「無効状態」のキャッシュコヒーレンシプロトコル状態を使用するMESIプロトコル、「転送状態」のキャッシュコヒーレンシプロトコル状態を追加したMESIFプロトコル、「転送状態」ではなく「所有状態」のキャッシュコヒーレンシプロトコル状態を追加したMOESIプロトコル、および他のそのようなキャッシュコヒーレンシプロトコル)を使用して維持されるキャッシュコヒーレンスドメインの一部である。
コヒーレントエージェント3900は、1つまたは複数のキャッシュを介して引き続くより下位レベルのキャッシュ階層でインターコネクト3920に結合される。キャッシュ階層は、キャッシュ階層の最上位レベルにあり、コヒーレントエージェント3900に結合されているキャッシュと、キャッシュ階層の最下位レベルにあり、インターコネクト3920に結合されているキャッシュ(例えば、L3キャッシュ3915)(従って、このキャッシュは、最下位レベルキャッシュまたは最終レベルキャッシュ(LLC)と呼ばれる)と、より上位レベルのキャッシュのうちの1つおよびより下位レベルのキャッシュのうちの1つに結合された、キャッシュ階層の中間レベル(単数または複数)にある0個以上のキャッシュ(例えば、L2キャッシュ3910)と、を含む(例えば、図39は、L1キャッシュ3905に結合されたコヒーレントエージェント3900を示しており、L1キャッシュ3905はL2キャッシュ3910に結合され、L2キャッシュ3910はL3キャッシュ3915に結合され、L3キャッシュ3915はインターコネクト3920に結合されている)。
コヒーレントエージェント3901もまた、1つまたは複数のレベルのキャッシュを介してインターコネクトに結合される。図39は、任意のL1キャッシュ3906に結合されたコヒーレントエージェント3901を示しており、任意のL1キャッシュ3906は任意のL2キャッシュ3911に結合され、任意のL2キャッシュ3911はL3キャッシュ3915に結合されている。加えて、図39はまた、任意のコヒーレントエージェント3902がインターコネクト3920に直接結合され得ることを示している(すなわち、いかなるコヒーレントキャッシュも持たない)。
連続するレベルのキャッシュを介してインターコネクト3920に結合されているコヒーレントエージェントを含む接続に加えて、またはその代わりに、特定の実施形態は、直接的またはより直接的な通信を可能にする他の接続を実装する(例えば、それぞれ破線3935、3936、3937、および3938によって示すように、コヒーレントエージェント3900をインターコネクト3920に直接結合する、コヒーレントエージェント3900をL2キャッシュ3910に直接結合する、L1キャッシュ3905をインターコネクト3920に直接結合する、および/またはL2キャッシュ3910をインターコネクト3920に直接結合する)。
インターコネクト3920は、(例えば、1つまたは複数のメモリコントローラ(図示せず)のセットを介して)ダウンストリームメモリ3930に結合される。ダウンストリームメモリ3930は、コヒーレントキャッシュ3904よりも下位レベルのメモリ階層にあり、1つまたは複数のタイプのメモリおよび/またはメモリの階層を含むことができる(例えば、揮発性メモリおよび/または不揮発性メモリ、メインメモリ、メモリマップ入出力(MMIO)、メモリサイドキャッシュ、2レベルメモリ(2LM)、DRAM、フラッシュ、相変化メモリ、3D Xpoint(登録商標))。
インターコネクト3920(キャッシュコヒーレントインターコネクト、ファブリック、インターコネクト、アンコア、相互接続ネットワークの一部、相互接続ユニット(単数または複数)とも呼ばれる)は、コヒーレントキャッシュ3904にスヌープを発行し、そこからの任意の応答を受信するための、スヌープコントローラ3925を含む。スヌープコントローラ3925は、スヌープを発行するためのスヌープジェネレータ3926と、一部の実施形態において、任意の応答を受信するためのスヌープレスポンダ3927と、を含む。加えて、特定の実施形態におけるスヌープコントローラ3925は、(キャッシュラインサイズのオールゼロの書き込みを実質的に生成するための)ライトジェネレータ3929および/または(スヌープに応答して受信されたデータのキャッシュラインを実質的にすべてゼロへ変換するための)ライトコンバータ3928を含む。加えて、1つの実施形態では、インターコネクト3920は、L3キャッシュ3915とダウンストリームメモリ3930との間にあるとして示されているが、代替的な実施形態は、インターコネクト3920を別の場所に実装することができる(例えば、ダウンストリームメモリ3930に対する1つまたは複数のメモリコントローラのセットが(例えば、ホームエージェントとして)インターコネクト3920から離れた状態、または1つまたは複数のメモリコントローラのセットがL3キャッシュ3915とダウンストリームメモリ3930との間にある状態のいずれかで、L2キャッシュとL3キャッシュとの間に実装することができる)。(例えば、スヌープコントローラ3925の一部としての)インターコネクト3920は、スヌープフィルタ(図示せず)などの他のアイテムを含み得る。
異なる実施形態が、異なる数のコヒーレントエージェントを用いて、汎用コア(中央処理装置(CPU)としても知られる)として実施され得る。例えば、一部の実施形態では、コヒーレントエージェント3900はコアであり、コヒーレントエージェント3901はコアであり、コアであるゼロ以上の追加のコヒーレントエージェントがあり、他の種類のエージェントであるゼロ以上の追加のコヒーレントエージェントがある(例えば、いくつか例を挙げると、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、セキュリティコプロセッサなどのコプロセッサ、高スループットMICプロセッサ、GPGPUのコプロセッサ、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置)。
一部の実施形態では、コヒーレントエージェントおよびコヒーレントキャッシュ3904は、図38および図37のように実装される。例えば、CCXには、コアである4つのコヒーレントエージェント、コアごとのプライベート/ローカルL1キャッシュ、コアごとのプライベート/ローカルL2キャッシュ、および共有L3キャッシュがあり、単一のプロセッサに複数のCCXを結合することもできる。L1キャッシュおよびL2キャッシュはライトバックキャッシュであり、L2キャッシュは包括的キャッシュであり、L3キャッシュは犠牲キャッシュである。加えて、L3キャッシュ3915は、モジュール(CCX)内の複数のコヒーレントエージェント(例えば、4コアにわたってコア当たり2MB、合計8MB)間、また場合により1つまたは複数のそのようなモジュール(例えば、16MBのL3キャッシュを形成する、各8MBの2つのCCX)間でスライスに分割される。図39は、コヒーレントエージェント3900のL3キャッシュスライス3916とコヒーレントエージェント3901のL3キャッシュスライス3917とを用いてこれを示している。インターコネクト3920は、例えば、1)CCX内のインターコネクトのみ、2)CCX内およびCCX間のインターコネクト、3)異なるCCX内の別個のインターコネクト、およびCCX間のインターコネクト(単数または複数)を表すことができる。異なる実施形態は、リング、複数のリング、ポイントツーポイントリンク、共有バス(単数または複数)などのうちの1つまたは複数を含み、インターコネクト3920を異なるように実装することができる。ホームエージェントおよびキャッシュエージェントを実装する実施形態では、インターコネクト3920はキャッシュエージェントを含むと考えられる。
図39の1つまたは複数の、またはすべてのコヒーレントエージェントは、キャッシュラインゼロ化命令を実行するように実装され得る(コヒーレントエージェント3900、3901、および3902のいずれかとして識別される、可能なキャッシュラインゼロ化命令発行エージェント3903を参照)。キャッシュラインゼロ化命令を現在実行しているコヒーレントエージェントは、「発行エージェント」、「発行コヒーレントエージェント」、または「第1のエージェント」であり、そのキャッシュは、発行エージェントのLxキャッシュと呼ばれる(xは、1、2、または3であり得る。L3キャッシュは、これがスライスで実装されている場合、発行エージェントのL3キャッシュスライスである)。以下の説明では、これはコヒーレントエージェント3900となる。キャッシュラインゼロ化命令を現在実行していないコヒーレントエージェントは、「コヒーレントだが発行していないエージェント」、「非発行エージェント」、「非発行コヒーレントエージェント」、または「第2のエージェント」と呼ばれ(上述のように、複数の第2のエージェントがあってもよいが、簡単にするために1つが以下に説明される)、そのキャッシュは、第2のエージェントのLxキャッシュと呼ばれる(xは、1、2、または3であり得る。L3キャッシュは、これがスライスで実装されている場合、第2のエージェントのL3キャッシュスライスである)。以下の説明では、これはコヒーレントエージェント3901となる。
例示的なキャッシュアーキテクチャ
図40は、本発明の実施形態による、キャッシュラインゼロ化命令を実装するプロセッサにおけるキャッシュを示すブロック図である。図40は、Lxキャッシュ4050を含み、xはキャッシュ階層のレベル(例えば、1、2、3)を示す。Lxキャッシュ4050は、ヒット/ミスを検出すること、キャッシュラインに書き込み/読み出しさせること、スヌープを受信することなどを含む、キャッシュのオペレーションを制御するためのキャッシュコントローラ4051を含む(従って、一部の実施形態では、キャッシュコントローラ4051は、スヌープインターフェースを含み、一部の実施形態、スヌープコントローラ4043を含む)。キャッシュコントローラは、(「タグ状態」とも呼ばれる場合があるものを含む)エントリ4060を有するタグアレイ4055を含み、Lxキャッシュ4050は、対応するキャッシュライン4070を有するデータアレイ4056を含む。エントリ4060のそれぞれは、所与のアドレスが、キャッシュライン4070のうちの対応する1つのキャッシュライン4070におけるデータにヒットするかミスするかを判定するために使用されるタグを格納するためのタグフィールド4061を含む。加えて、エントリ4060のそれぞれは、キャッシュライン4070のうちの対応する1つのキャッシュライン4070に格納されているデータの属性を格納するための1つまたは複数の属性フィールド(単数または複数)4062(「タグ状態」と呼ばれることもある)のセットを含む。属性フィールド(単数または複数)4062は、キャッシュライン4070のうちの対応する1つのキャッシュライン4070に格納されているデータの現在のキャッシュコヒーレンシプロトコル状態を示す値を格納するためのキャッシュコヒーレンシプロトコル状態フィールド4065を含む。属性フィールド(単数または複数)4062は、場合により、ゼロラインフィールド4066、ポイズンフィールド4067、誤り訂正符号フィールド(図示せず)などの他のフィールドを含み得る。図40は、タグアレイである属性フィールド(単数または複数)4062を示しているが、代替的な実施形態は、これらのフィールド(単数または複数)を別個の状態アレイ(図示せず)で実装してもよい。1つの実施形態では、所与のキャッシュラインは、ポイズンフィールド4067内に複数のポイズン指示(例えば、64バイトのキャッシュラインの2つの32バイトチャンクについて1つ)を有することができる。図40は別個のポイズンフィールド4067を示しているが、代替的な実施形態は、ポイズン指示を別のフィールド(例えば、誤り訂正符号(ECC)フィールドまたはキャッシュコヒーレンシプロトコル状態フィールド)に符号化してもよい。
キャッシュにおけるヒットに応答して(例えば、タグフィールド4061内のタグに基づいて)、キャッシュコントローラ4051は、そのヒットに対して、キャッシュコヒーレンシプロトコル状態フィールド4056(例えば、タグが照合されたタグフィールド4061に対応するキャッシュコヒーレンシプロトコル状態フィールド4056)におけるキャッシュコヒーレンシプロトコル状態に応答するための回路(例えば、キャッシュコヒーレンシプロトコル状態回路または他の回路)を含む。この応答は、実施形態間で異なり、様々な要因(例えば、ライトコマンド、リードコマンド、スヌープ(および場合によりスヌープのタイプ)に応答してキャッシュルックアップが開始されたか否か)に基づいて異なる。例えば、一部の実施形態では、以下でより詳細に説明するように、応答は、キャッシュコヒーレンシプロトコル状態が、ライトコマンドおよび/または特定のタイプのスヌープに応答してキャッシュラインを修正するキャッシュ権限(例えば、「修正状態」または「排他状態」)を与えるものであるか否かを判定するためのものである。一部の実施形態では、キャッシュコントローラ4051は、1)コマンド(例えば、ライトコマンド、リードコマンド、スヌープコマンド)に応答してキャッシュにヒットまたはミスがあるか否かを判定するためのヒットミス回路(図示せず)と、2)スヌープを受信し、スヌープに対する応答メッセージを送信する、スヌープインターフェース(図示せず)に結合されたスヌープコントローラ4043と、3)キャッシュライン読み出し回路(図示せず)およびキャッシュライン書き込み回路(図示せず)と、を含む。
すべてゼロを示すようにキャッシュラインを構成する技法
一部の実施形態は、ゼロでキャッシュライン内のデータを上書きすることによってすべてゼロを示すようにキャッシュラインを構成するように実施されるが(第1の技法)、代替的な実施形態は、他の技法を用いてすべてゼロを示すようにキャッシュラインを構成し得る(以下に説明する第2〜第4の技法は例である)。そのような他の技法は、キャッシュラインのサイズがコア内のいくつかのバス/構造の幅(例えば、ロードキュー810、ストアキュー820、書き込み結合バッファ(WCB)860などの中間バッファのうちの1つまたは複数)の幅よりも一般に大きい、および/またはゼロでキャッシュライン内のデータを上書きすることは、電力を消費し、キャッシュの複雑さを増大させる、などの様々な理由で実施され得る。
第2の技法は、キャッシュラインが現在存在しているキャッシュのウェイにあるキャッシュラインを無効化し、そのキャッシュの異なるウェイにゼロのキャッシュラインを書き込むことである。
第3および第4の技法は、データアレイ4056内のデータではなくタグ状態を変更することを含み、これらは、キャッシュレベルのうちの1つまたは複数のレベルにおいて、および/またはインターコネクトにおいて使用され得る。第3の技法は、(例えば、属性フィールド(単数または複数)4062内の)キャッシュラインのそれぞれについてフィールド(ゼロラインフィールド4066と呼ばれる)を実装することであり、このフィールド内の値(1ビットであり得る)は、1)キャッシュラインが、そのキャッシュラインに格納されているデータの値を有するものとして扱われるべきであるか、2)キャッシュラインが、(そのキャッシュラインに格納されている実際のデータに関係なく)すべてゼロであるとして扱われるべきであるかを示す。そのような実施形態では、そのキャッシュラインの読み出し(エビクションを含む)は、そのようなゼロラインフィールドをサポートする別の構造にゼロラインフィールド4066の値を渡すか、データをゼロに変換するかのいずれかを行う。データはまた、読み出し時にコヒーレントエージェントのうちの1つ(例えば、コヒーレントエージェント3900)によって使用される前に変換される。一部のそのような実施形態では、データはダウンストリームメモリ3930に書き込まれる前にも変換されるが、代替的な実施形態はまた、ダウンストリームメモリ3930またはメモリコントローラによって管理される代替的なメモリ構造におけるゼロラインフィールドを実施する。
第4の技法は、第3の技法と似ているが、別個のフィールドを実装するのではなく、属性フィールド(単数または複数)のうちの既存の1つの属性フィールドに新しいエンコーディングを実装する(例えば、キャッシュコヒーレンシプロトコル状態フィールドまたは誤り訂正符号(ECC)シンドロームフィールドの新しいエンコーディング)。
特定の実施形態は、すべてゼロを示すようにキャッシュラインを構成することの一部として、キャッシュラインのキャッシュコヒーレンシプロトコル状態を「修正状態」または「所有状態」に修正し(またはキャッシュコヒーレンシ状態フィールドに新しいエンコーディングを使用する場合、ゼロライン、次いでゼロライン状態を示し)、ポイズン指示(単数または複数)を無視(データがポイズニングされなくなった)またはクリアさせる、ようにキャッシュを実装し得る。よって、キャッシュラインゼロ化命令の別の利点は、それがポイズニングされたラインを一貫してクリアするために使用され得ることである。
関連する留意事項として、キャッシュラインをゼロにさせるメカニズムは、特定のキャッシュレベル(例えば、L1キャッシュのみでありL2またはL3キャッシュではないなど、L1キャッシュ、L2キャッシュ、およびL3キャッシュのサブセット)でのみ実装することができ、そのようなメカニズムを欠く所与のキャッシュレベルは、このメカニズムを有する異なるキャッシュレベルに送ることによって、すべてゼロを示すようにこのキャッシュラインを構成するように実装され得る(例えば、ゼロ化を行うことができるより下位のキャッシュレベル(例えば、L2キャッシュ)にデータを追い出すことによって、より上位のキャッシュレベル(例えば、L1キャッシュ)がすべてゼロを示すようにキャッシュラインを構成するように実装され、ゼロ化を行うことができるより上位レベルのキャッシュ(例えば、L1キャッシュ)に転送することによって、より下位のキャッシュレベル(例えば、L2キャッシュ)がすべてゼロを示すようにキャッシュラインを構成するように実装される)。以下により詳細に説明されるように、異なる実施形態は、書き込みおよび/またはスヌープに応答してキャッシュラインのゼロ化を実施することができる。書き込みおよびスヌープの両方に応答してキャッシュラインのゼロ化を実装する実施形態では、所与のキャッシュレベルを書き込みまたはスヌープの一方のみに(ただし両方ではない)応答してゼロ化を行うように実装でき、書き込みおよびスヌープのどちらか他方に応答してゼロ化を行うことができる下位または上位レベルのキャッシュに、データをプッシュ/追い出す、または転送することができる。
すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガする
すべてゼロを示すようにキャッシュラインを構成するためにキャッシュに実装される技法に関係なく(上記参照)、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガすることは、発行エージェント単独で、またはインターコネクトから送信されたメッセージに応答する発行エージェントによって、インターコネクトからキャッシュのうちの1つに送信されるメッセージに応答し得る。
発行エージェントが(単独で、またはインターコネクトからのメッセージに応答して)、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガする場合、異なる実施形態は、キャッシュラインが、発行エージェントのネイティブにサポートされているデータ幅(例えば、32ビット、64ビット、128ビット、256ビット、512ビット、1024ビット)よりも広い(例えば、32バイト、64バイト)場合に、アトミックであるキャッシュラインゼロ化命令を実装する技法を含む異なる技法を使用し得る。ネイティブにサポートされているデータ幅は、異なる実施形態においては異なる方法で現れ得る。一部の実施形態では、ネイティブにサポートされているデータ幅は、最も広いレジスタのセットのビット幅、および/または命令によって操作されるオペランド(単数または複数)の幅を表し得る。一部の実施形態では、ネイティブにサポートされているデータ幅は、算術演算ユニットおよび/または論理実行ユニットの幅を表し得る(例えば、オペランドの複数の部分が順次引き出され(ダブルパンプトまたはそれ以上)ないように命令によって示されるオペランドの幅が同じである場合)。一部の実施形態では、ネイティブにサポートされているデータ幅は、バス(例えば、ロードパイプ)の幅を表し得る。アトミックに格納することができるデータ量は、発行エージェントの1つまたは複数の内部構造(例えば、バス、中間バッファ)の幅によって制限され得る。
よって、(単独で、またはインターコネクトからのメッセージに応答して)発行エージェントが(すべてゼロを示すようにキャッシュラインを構成するようにキャッシュの)トリガを行う一部の実施形態では、発行エージェントは、1)中間バッファのうちの1つまたは複数の中間バッファ(例えば、ストアキュー820および書き込み結合バッファ(WCB)860)などの他の構造内のゼロラインフィールドを実装すること、または2)ゼロのキャッシュラインを運ばないが、中間バッファ(例えば、ストアキュー820および書き込み結合バッファ(WCB)860)を通過することができる、キャッシュラインサイズのゼロの書き込みを示す、新しいコマンド(例えば、マイクロop、制御信号、マイクロ命令)を実装することのいずれかを実行する。そのため、キャッシュラインサイズが発行エージェントのネイティブにサポートされているデータ幅よりも広い場合(例えば、32バイト、64バイト)、ゼロのキャッシュラインをこれらのより狭い構造で表すことができる。ゼロのラインへの変換は、(ゼロラインフィールドまたは新しいコマンド/マイクロopで示される)ゼロのラインが、メモリ階層の下位であり、かつゼロラインフィールドまたは新しいコマンドをサポートしていない構造に送信されている場合に実行される(例えば、ゼロのラインへの変換は、ゼロラインが、(上記の技法のうちの別のものを行い得る)データキャッシュ840に送信される、書き込み結合バッファ8600から送信される、L3キャッシュによってインターコネクトに送信される、またはインターコネクトによって(例えば、メモリコントローラを介して)ダウンストリームメモリに送信される、場合に実行され得る)。
別の例として、(単独で、またはインターコネクトからのメッセージに応答して)発行エージェントが(すべてゼロを示すようにキャッシュラインを構成するようにキャッシュの)トリガを行う一部の実施形態では、発行エージェントは、スヌープに応答せず(またはチャンクが書き込まれている間はスヌープに応答せず)、かつチャンクが同時に書き込まれるように(それ以前ではなく)キャッシュラインのサイズに等しい十分なチャンクが書き込まれたことに応答してエビクションされる中間バッファ(例えば、ストアキュー820、書き込み結合バッファ(WCB)860、別個のステージングバッファ(図示せず))に、より小さいチャンク(例えば、一度に16バイト、一度に32バイト)のゼロを順次書き込み、それにより、キャッシュラインゼロ化命令をアトミックに実施する。
他の態様
異なる実施形態は、異なるオーダリング(例えば、弱いオーダリング、強いオーダリング、弱いオーダリングより弱いオーダリング、強いオーダリングより強いオーダリング)でキャッシュラインゼロ化命令を実装することができる。弱いオーダリングのキャッシュラインゼロ化命令の場合、実施形態は、命令が自動エビクションされるように命令を実装することができる。
キャッシュラインゼロ化命令は、その命令のリタイアの前に、すべてゼロを示すようにキャッシュラインを構成しないように実施されてもよい。そのような実施形態では、キャッシュラインゼロ命令が完了し、キャッシュラインがすべてのリーダに対してすべてゼロを示すように構成されていることを確保するメカニズムがある(例えば、フェンス命令、ロック命令、アーキテクチャ的な直列化(serializing)命令、より新しいストアがGOである(強くオーダリングされている)、より新しいロードがGOである(強くオーダリングされているよりも厳密である)のうちの1つまたは複数)。
キャッシュラインゼロ化命令は、ページテーブルウォーク(仮想化テーブル(例えば、拡張ページテーブル(EPT)(ここではAビットおよびDビットが更新される)、シャドーページテーブル)を含む)の目的でストアのように扱われることができ、書き込み不可の場合は機能しない。
スヌープを使用する前に最初に発行エージェントのキャッシュへの書き込みを試みる実施形態 図41は、スヌープを使用する前に、最初に発行元エージェントのキャッシュへの書き込みを試みる、本発明の実施形態を示す流れ図である。上述のように、第1のエージェント3900は、実行するとメモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こすためのものである命令をデコードして実行する(ブロック4110)。命令のデコードおよび実行に応答して、第1のエージェントは、第1のエージェントに結合されたコヒーレントキャッシュのうちの1つ(例えば、L1キャッシュ3905)に、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するためのライトコマンドを発行する(この場合、第1のエージェントは発行エージェントとも呼ばれる)(ブロック4112)。一部の実施形態では、第1のエージェントは、実行するとメモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こすためのものである命令をデコードするためのデコードユニット(例えば、デコーダ140、デコーダ314)を含む。第1のエージェントはまた、デコーダユニットに応答して、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するコマンドを発行するための実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)を含む。
コマンドが発行されたキャッシュ(例えば、L1キャッシュ3905)のキャッシュラインについてヒットがあり(ブロック4114)、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態が、他のキャッシュにブロードキャストせずにキャッシュラインを修正する権限をキャッシュに与えるもの(例えば、「修正状態」または「排他状態」)である(ブロック4116)場合、そのキャッシュは、すべてゼロを示すようにキャッシュラインを構成し、スヌープを抑制する(ブロック4118)。異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる。一部の実施形態では、コマンドが発行されたキャッシュ(例えば、L1キャッシュ3905)のキャッシュラインについてヒットがある(ブロック4114)場合、キャッシュラインは、1つまたは複数の他のキャッシュコヒーレンシプロトコル状態(例えば、「所有状態」、「転送状態」、または「共有状態」のうちの1つまたは複数)に対して依然としてゼロにされる。これが行われるあらゆる状態において、制御はブロック4119へ進み、これが行われないあらゆる状態において、制御はブロック4120に進む。よって、「修正状態」、「排他状態」、および「無効状態」ではないあらゆる状態において制御がブロック4119に進む実施形態では、ブロック4120は実施されず、その逆も同様である。ただし、状態に応じて制御がブロック4119または4120に進む実施形態を実施することができる。ブロック4119において、そのキャッシュは、すべてゼロを示すようにキャッシュラインを構成し、ブロック4119から、制御は(本明細書において後でより詳細に説明される)ブロック4122に進み、そこでキャッシュは、インターコネクトに向けて(実施形態に応じて、次のキャッシュレベルに、またはスヌープ(例えば、ライトアップデートスヌープ(ライトゼロスヌープまたはライトアンドゼロスヌープとも呼ばれる)、ライトインバリデートスヌープ(インバリデートイーブンイフモディファイドスヌープとも呼ばれる)、または無効化してライトバックすることを示すスヌープ(ライトバックアンドインバリデートスヌープとも呼ばれる))を発行するためにインターコネクトに)ライトコマンドを発行する。次のキャッシュレベルまたはインターコネクトに進んだライトコマンドが、「修正状態」または「排他状態」以外の状態のラインがすべてゼロを示すように構成されたことを示すことが可能である。この修正されたライトコマンドの1つの使用法は、「共有状態」のラインがすべてゼロに構成され、その状態が「修正状態」または「所有状態」に変更された場合、ライトアップデートスヌープが送信されないようにすることである。その状況では、インターコネクトは、異なるスヌープタイプ(例えば、ライトインバリデートスヌープまたはライトバックアンドインバリデートスヌープ)を発行し得る。ブロック4120において、キャッシュは、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態を「無効状態」に変更し、制御はブロック4122に進む。キャッシュミスがある(ブロック4114)場合、制御はブロック4122に進む。
転送状態または所有状態に関する具体的な例として、発行エージェントのキャッシュが転送状態または所有状態のキャッシュラインを有する場合、そのキャッシュラインは共有状態の他のキャッシュにあり得る。そのため、キャッシュラインがブロック4119でゼロ化されると、スヌープが送信されて、共有状態にある他のキャッシュラインを無効にする、または共有状態にある他のキャッシュラインをすべてゼロを示すように構成する。あるいは、転送状態または所有状態のキャッシュラインを無効化(またはクリーンエビクションおよび無効化)(ブロック4120)し、修正状態かつゼロ化状態、または所有状態かつゼロ化状態の新しいラインを作成することができる。ゼロ化されたその新しいラインは、転送状態または所有状態(例えば、そのキャッシュの異なるセットまたはウェイ)で見出されたキャッシュラインと同じキャッシュに挿入(書き込み)され得る、または異なるキャッシュに挿入され得る(例えば、キャッシュラインが転送状態または所有状態でL2キャッシュまたはL3キャッシュ内で見出された場合、キャッシュラインは無効化され、修正状態かつゼロ化状態または所有状態かつゼロ化状態の新しいラインがL1キャッシュ内に作成され得る)。
ブロック4122において、キャッシュは、インターコネクトに向けてライトコマンドを発行する。このライトコマンドは、インターコネクト3920に直接発行されてもよいし、第1のエージェントの1つまたは複数の下位レベルキャッシュに送信されてもよい。例として、1)一部の実施形態では、ライトコマンドは、インターコネクトに直接発行され(すなわち、例えば、L1キャッシュ3905から直接インターコネクト3920まで、キャッシュ階層の下位レベルにある任意のキャッシュをスキップする。あらゆる下位レベルのキャッシュ(例えば、L2キャッシュ3910、L3キャッシュ3915)をスキップする。この場合、ライトコマンドは、第1のエージェントのデータL1キャッシュに使用され、一方、スヌープ(次に説明する)が、第1のエージェントの命令L1キャッシュ、L2キャッシュ、およびL3キャッシュ(より具体的には、実装されている場合はL3キャッシュスライス3916)、ならびに第2のエージェントのキャッシュに使用される)、2)一部の実施形態では、ライトコマンドは、上記を繰り返すL2キャッシュ3910に発行され、それがすべてゼロを示すようにキャッシュラインを構成しない場合、ライトコマンドをインターコネクト3920に直接発行し、この場合、ライトコマンドは、第1のエージェントのL1キャッシュおよびL2キャッシュに使用され、その際、スヌープ(次に説明する)が、第1のエージェントのL3キャッシュ(より具体的には実装されている場合はL3キャッシュスライス3916)、および第2のエージェントのキャッシュに使用され、3)一部の実施形態では、ライトコマンドは、上記を繰り返すL2キャッシュ3910に発行され、すべてゼロを示すようにキャッシュラインを構成しない場合、ライトコマンドをL3キャッシュ3915(より具体的には、実装されている場合はL3キャッシュスライス3916)に発行し、すべてゼロを示すようにキャッシュラインを構成しない場合、ライトコマンドをインターコネクト3920に発行し、この場合、ライトコマンドは、第1のエージェントのキャッシュに使用され、その際、スヌープ(次に説明する)が第2のエージェントのキャッシュに使用される。特定の実施形態では、ライトコマンドが発行されるキャッシュは、上述のライトコマンドに応答して、キャッシュヒットがあるか否かを判定し、すべてゼロを示すようにキャッシュラインを構成し(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、キャッシュミスの場合、インターコネクトに向けてライトコマンドを発行するように実装されたキャッシュコントローラを含む。1つの具体的な例では、修正状態、排他状態、および/または所有状態である、(発行エージェントの)L2キャッシュ3910において、キャッシュラインヒットに応答して、L2キャッシュは、タスクをL1キャッシュに転送することによって、すべてゼロを示すようにキャッシュラインを構成するように実装される。
インターコネクト3920のスヌープコントローラ3925は、ライトコマンドに応答して、キャッシュラインを格納している可能性がある任意のキャッシュを見つけるためにスヌーピングプロセス(ブロック4190)を開始するように実装される。スヌーピングプロセス4190を実施するために、(例えば、スヌープジェネレータ3926を介して)スヌープコントローラ3925が実装されて、キャッシュラインを格納している可能性があるコヒーレントキャッシュ(換言すれば、ヒットがあるか否かを決定する必要があるコヒーレントキャッシュ)にスヌープを発行する(ブロック4126)。一部の実施形態では、キャッシュラインを格納している可能性があるコヒーレントキャッシュは、1)ライトコマンドが以前に発行されていないコヒーレントキャッシュ、および2)キャッシュがラインを含む可能性がある(すなわち、スヌープフィルタがスヌープを抑制しない)ことを示すスヌープフィルタ(図示せず)をインターコネクト3920内に実装する実施形態におけるコヒーレントキャッシュである。これは、第2のエージェント3901をインターコネクト3920に結合する1つまたは複数のレベルのキャッシュ(例えば、L1キャッシュ3906、L2キャッシュ3911、L3キャッシュ3915)、ならびに第1のエージェント3900(発行エージェント)をインターコネクト3920に結合し、ライトコマンドを受け取らず(すなわち、スキップされたキャッシュ)、インターコネクト3920内にスヌープフィルタ(図示せず)を実装する実施形態において、ラインを含むことができるとスヌープフィルタが示す(すなわち、スヌープフィルタがスヌープを抑制しない)キャッシュのうちのいずれか(例えば、L2キャッシュ3910、L3キャッシュ3915)を含み得る。第1のエージェントをインターコネクトに結合するキャッシュのうちの1つまたは複数のキャッシュにスヌープが発行される実施形態では、そのような各スヌープはまた、バックスヌープと呼ばれ得る。スヌーピングプロセス4190の一部として、状況に応じて異なる複数のタイプのスヌープを発行するか、またはただ1つのタイプのスヌープを発行するために、異なる実施形態を実装することができる。本明細書で後により詳細に説明するように、使用され得る様々な可能なスヌープタイプがある(例えば、ライトアップデートスヌープ(ライトゼロスヌープまたはライトアンドゼロスヌープとも呼ばれる)、ライトインバリデートスヌープ(インバリデートイーブンイフモディファイドスヌープとも呼ばれる)、無効化してライトバックすることを示すスヌープ(ライトバックアンドインバリデートスヌープとも呼ばれる)、ヒットしたキャッシュラインを書き出すが、第1のエージェントにデータを返送せず、データがダウンストリームメモリから読み出されることにならないスヌープ、すなわち従来技術のスヌープ(例えば、RFO))。 具体的には、ライトアップデートスヌープが使用される場合、スヌープコントローラ3925はまた、スヌーピングプロセス4190の一部としてライトアップデートスヌープのうちの1つに応答して、キャッシュのうちの1つによって、キャッシュラインサイズの書き込みが実行されたか否かを判定する(破線のブロック4128として示す)ために実装され、書き込みが実行された場合、プロセスは完了し(ブロック4130)、そうでなければ、制御はブロック4132に進む。ブロック4128は、他の種類のスヌープがスヌープ処理4190に使用されるときには使用されないので破線で示されている。
ライトコマンドおよびスヌープは、キャッシュのうちの1つまたは複数にゼロ化されるべきデータを含むキャッシュラインがある場合を処理するように動作する。キャッシュラインサイズのゼロの書き込みは、(上述のように)ライトコマンドに応答してキャッシュのうちの1つによって実行されていてもよいし、ライトアップデートスヌープを発行する実施形態では、以下で詳しく説明するように、ライトアップデートスヌープのうちの1つに応答してキャッシュのうちの1つによって実行されていてもよい。キャッシュラインサイズのゼロの書き込みがキャッシュのいずれによっても実行されていない場合、ブロック4132において、(例えば、スヌープコントローラ3925のライトジェネレータ3929を介して)インターコネクト3920、またはインターコネクト3920からのメッセージに応答して第1のエージェント(発行エージェント)は、コヒーレントキャッシュ(例えば、L1キャッシュ3905、L2キャッシュ3910、L3キャッシュ3915)のうちの1つまたは複数におけるキャッシュラインをすべてゼロを示すように構成させる(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、またはメモリアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませる。上記のように、また下記でさらに詳細に示されるように、特定の実施形態では、スヌープコントローラ3925は、この動作を担当するスヌープレスポンダ3927(および場合によりライトコンバータ3928およびライトジェネレータ3929)を含む。特定の実施形態では、(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)または他のハードウェア構造を介して)第1のエージェントは、この動作においてその役割を(もしあれば)実行する。代替的な実施形態では、インターコネクト3920は、ダウンストリームメモリへゼロの書き込みをするようにメモリコントローラに命令する。
「すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガする」と題するセクションで既に述べたように、異なる実施形態は、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガさせる発行エージェントを別様に実装し得る(例えば、キャッシュラインが発行エージェントのネイティブにサポートされているデータ幅より広い場合(例えば、32バイト、64バイト)に、アトミック性を確保するために、他の構造(例えば、中間バッファ)にゼロラインフィールドを実装する、中間バッファを通過することができる(ゼロのキャッシュラインを運ばないが、キャッシュラインサイズのゼロの書き込みを示す)新しいコマンドを実装する、またはスヌープに応答せず(またはチャンクが書き込まれている間はスヌープに応答せず)、かつチャンクが同時に書き込まれるように(それ以前ではなく)キャッシュラインのサイズに等しい十分なチャンクが書き込まれたことに応答してエビクションされる中間バッファ(例えば、ストアキュー8200、書き込み結合バッファ(WCB)8600、別個のステージングバッファ(図示せず))に、より小さいチャンク(例えば、一度に16バイト、一度に32バイト)のゼロの順次書き込みを実装する)。
コヒーレントキャッシュのスヌープに依拠する実施形態 図42は、コヒーレントキャッシュのスヌープに依存する、本発明の実施形態を示す流れ図である(最初に発行エージェントのキャッシュへの書き込みを試みることはしない)。上述のように、第1のエージェント3900は、実行することにより、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こすためのものである命令をデコードして実行する(ブロック4210)。命令のデコードおよび実行に応答して、第1のエージェントは、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するコマンドを、インターコネクト3920に発行する(この場合、第1のエージェントは、発行エージェントとも呼ばれる)(ブロック4212)。一部の実施形態では、第1のエージェントは、実行するとメモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こすためのものである命令をデコードするためのデコードユニット(例えば、デコーダ140、デコーダ314)を含む。第1のエージェントはまた、デコーダユニットに応答して、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するコマンドを発行するための実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)を含む。
第1のエージェント/発行エージェント3900からのコマンドは、インターコネクト3920に発行され(ブロック4212)、インターコネクト3920は、コマンドに応答して、キャッシュラインを格納している可能性がある任意のキャッシュを見つけるためにスヌーピングプロセス(ブロック4290)を開始するように実装される。スヌーピングプロセス4290を実施するために、(例えば、スヌープコントローラ3925を介して)インターコネクト3920が(例えば、スヌープジェネレータ3926を介して)実装されて、キャッシュラインを格納している可能性があるコヒーレントキャッシュ(換言すれば、ヒットがあるか否かを決定する必要があるコヒーレントキャッシュ)にスヌープを発行する(ブロック4226)。一部の実施形態では、キャッシュラインを格納している可能性があるコヒーレントキャッシュは、1)インターコネクト3920内にスヌープフィルタ(図示せず)を実装しない実施形態におけるコヒーレントキャッシュのいずれか(例えば、L1キャッシュ3905、L2キャッシュ3910、L1キャッシュ3906、L2キャッシュ3911、L3キャッシュ3915)、または2)インターコネクト3920内のスヌープフィルタ(図示せず)が、そのようなスヌープフィルタを実装する実施形態においてキャッシュがラインを含む可能性がある(すなわち、スヌープフィルタがスヌープを抑制しない)ことを示すコヒーレントキャッシュである。第1のエージェントをインターコネクトに結合するキャッシュのうちの1つまたは複数のキャッシュにスヌープが発行される実施形態では、そのような各スヌープはまた、バックスヌープと呼ばれ得る。上述のように、スヌーピングプロセス4290の一部として、異なる実施形態が、状況に応じて異なるタイプのスヌープを発行するか、またはただ1つのタイプのスヌープを発行することができる。本明細書で後により詳細に説明するように、使用され得る様々な可能なスヌープタイプがある(例えば、ライトアップデートスヌープ(ライトゼロスヌープまたはライトアンドゼロスヌープとも呼ばれる)、ライトインバリデートスヌープ(インバリデートイーブンイフモディファイドスヌープとも呼ばれる)、無効化してライトバックすることを示すスヌープ(ライトバックアンドインバリデートスヌープとも呼ばれる)、ヒットしたキャッシュラインを書き出すが、第1のエージェントにデータを返送せず、データがダウンストリームメモリから読み出されることにならないスヌープ、すなわち従来技術のスヌープ(例えば、RFO))。具体的には、ライトアップデートスヌープが使用される場合、スヌープコントローラ3925はまた、スヌーピングプロセス4290の一部として、ライトアップデートスヌープのうちの1つに応答して、キャッシュのうちの1つによって、キャッシュラインサイズの書き込みが実行されたか否かを判定する(破線のブロック4228として示す)ために実装され、書き込みが実行された場合、プロセスは完了し(ブロック4230)、そうでなければ、制御はブロック4232に進む。ブロック4228は、他の種類のスヌープがスヌープ処理4290に使用されるときには使用されないので破線で示されている。
代替的な実施形態では、ブロック4212は、キャッシュラインを格納している可能性があるコヒーレントキャッシュにスヌープコマンドを発行するように実装されている第1のエージェントに置き換えられる(この場合、ブロック4226は存在せず、フローは、ライトアップデートスヌープを使用する実施形態ではブロック4228に進み、そうでなければブロック4232に進む)。
スヌープは、キャッシュのうちの1つまたは複数にゼロ化されるべきデータを含むキャッシュラインがある場合を処理するように動作する。ライトアップデートスヌープを発行する実施形態では、キャッシュラインサイズのゼロの書き込みは、キャッシュのうちの1つまたは複数によって実行されている場合がある。キャッシュラインサイズのゼロの書き込みがキャッシュのいずれによっても実行されていない場合、ブロック4232において、(例えば、ライトジェネレータ3929を介して)第1のエージェント単独、インターコネクト3920、またはインターコネクト3920からのメッセージに応答して第1のエージェントは、キャッシュ(例えば、L1キャッシュ3905、L2キャッシュ3910、L3キャッシュ3915)のうちの1つまたは複数におけるキャッシュラインをすべてゼロを示すように構成させる(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、またはアドレスにおいてダウンストリームメモリにキャッシュラインサイズのゼロを書き込ませる。上記のように、また下記でさらに詳細に示されるように、特定の実施形態では、スヌープコントローラ3925は、この動作においてその役割を(もしあれば)を実行するスヌープレスポンダ3927(および場合によりライトコンバータ3928およびライトジェネレータ3929)を含む。特定の実施形態では、(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)または他のハードウェア構造を介して)第1のエージェントは、この動作においてその役割を(もしあれば)実行する。代替的な実施形態では、インターコネクト3920は、ダウンストリームメモリへゼロの書き込みをするようにメモリコントローラに命令する。
「すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガする」と題するセクションで既に述べたように、異なる実施形態は、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガさせる発行エージェントを別様に実装し得る(例えば、キャッシュラインが発行エージェントのネイティブにサポートされているデータ幅より広い場合(例えば、32バイト、64バイト)に、アトミック性を確保するために、他の構造(例えば、中間バッファ)にゼロラインフィールドを実装する、中間バッファを通過することができる(ゼロのキャッシュラインを運ばないが、キャッシュラインサイズのゼロの書き込みを示す)新しいコマンドを実装する、またはスヌープに応答せず(またはチャンクが書き込まれている間はスヌープに応答せず)、かつチャンクが同時に書き込まれるように(それ以前ではなく)キャッシュラインのサイズに等しい十分なチャンクが書き込まれたことに応答してエビクションされる中間バッファ(例えば、ストアキュー8200、書き込み結合バッファ(WCB)8600、別個のステージングバッファ(図示せず))に、より小さいチャンク(例えば、一度に16バイト、一度に32バイト)のゼロの順次書き込みを実装する)。
異なるタイプのスヌープ 上述のように、スヌーピングプロセス4190またはスヌーピングプロセス4290の一部として、異なる実施形態が、状況に応じて異なる複数のタイプのスヌープを発行するか、またはただ1つのタイプのスヌープを発行することができる。使用され得る様々な可能なスヌープタイプがある(例えば、ライトアップデートスヌープ(ライトゼロスヌープまたはライトアンドゼロスヌープとも呼ばれる)、ライトインバリデートスヌープ、無効化してライトバックすることを示すスヌープ(インバリデートイーブンイフモディファイドスヌープとも呼ばれる)、ヒットしたキャッシュラインを書き出すが、第1のエージェントにデータを返送せず、データがダウンストリームメモリから読み出されることにならないスヌープ、従来技術のスヌープ(例えば、RFO))。上述のように、これらの異なる種類のスヌープのうちのいずれか1つを、図41および図42に関して説明した上記の実施形態のいずれかと共に使用することができる。ここで、異なる種類のスヌープに関するさらなる詳細を説明する。
ライトアップデートスヌープ。図43は、スヌーププロセス4190または4290を実施するためにライトアップデートスヌープ(ライトゼロスヌープまたはライトアンドゼロスヌープとも呼ばれる)を使用する、本発明の実施形態を示す流れ図である。図41および図42に関連して、フローは、それぞれブロック4124またはブロック4212からブロック4326に進み、ブロック4326は、ライトアップデートスヌープを用いてブロック4126または4226を実行する。(例えば、スヌープコントローラ3925のスヌープジェネレータ3926を介して)インターコネクト3920は、キャッシュラインを格納している可能性があるコヒーレントキャッシュ(換言すれば、ヒットがあるか否かを決定する必要があるコヒーレントキャッシュ)にライトアップデートスヌープを発行するように実装される(ブロック4326)。ライトアップデートスヌープが発行されるキャッシュ(例えば、第1のエージェントのL1キャッシュ、L2キャッシュ、および/またはL3キャッシュスライス、ならびに第2のエージェントのL1キャッシュ、L2キャッシュ、およびL3キャッシュスライス)のキャッシュラインについてヒットがあった場合(ブロック4340)、そのキャッシュは、1)ヒットするキャッシュラインのキャッシュコヒーレンシプロトコル状態が「修正状態」(および一部の実施形態では、「転送状態」、「排他状態」、「所有状態」、および/または「共有状態」のうちの1つまたは複数)である場合(ブロック4342)、すべてゼロを示すようにキャッシュラインを構成し(ブロック4344)(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、ゼロ化を示す応答メッセージをインターコネクト3920に発行し(共有状態にあるヒットするキャッシュラインのゼロ化をサポートする一部の実施形態では、応答メッセージは、修正状態かつゼロ化状態または所有状態かつゼロ化状態対共有状態かつゼロ化状態(後者は、元の状態が「共有状態」であり、キャッシュがすべてゼロを示すようにキャッシュラインを構成したが、その状態は依然として「共有状態」であることを示す)など、キャッシュラインの状態も識別し、共有状態のキャッシュラインのゼロ化をサポートする代替的な実施形態では、元の状態が「共有状態」であり、キャッシュがすべてゼロを示すようにキャッシュラインを構成したが、その状態は依然として「共有状態」である場合に、(ブロック4350のように)ゼロ化されてないことを示す応答メッセージが送信される)(4346)、2)そうでなければ、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態を「無効状態」に構成し(ブロック4328)、インターコネクトに対してゼロ化されていないことを示す応答メッセージを発行する(ブロック4350)。ライトアップデートスヌープが発行されたキャッシュのキャッシュラインについてヒットがない場合(ブロック4340)、キャッシュは、インターコネクトに対してゼロ化にされていないことを示す応答メッセージを発行する(ブロック4350)。よって、一部の実施形態では、コヒーレントキャッシュは、修正状態、所有状態、排他状態、および転送状態のいずれかのキャッシュラインにヒットするライトコマンドまたはライトアンドゼロスヌープがキャッシュにキャッシュラインをゼロにするように構成させる(そしてその状態を修正状態(修正状態かつゼロ化状態)または所有状態(所有状態かつゼロ化状態)に修正させる)ように実装され得る。代替的な実施形態では、そのようなキャッシュがそのように実装されるのは、修正状態、所有状態、排他状態、および転送状態のサブセットについてのみであり得る。その場合、修正状態、所有状態、排他状態、または転送状態にあり、修正状態かつゼロ化状態または所有状態かつゼロ化状態に変更されていないヒットしたキャッシュラインは、ライトアンドゼロスヌープに応答して、無効状態に変更される。そのため、一部の実施形態では、コヒーレントキャッシュのすべてまたはサブセットは、修正状態、排他状態、所有状態、または転送状態のすべてまたはサブセットについて、そのキャッシュ内でヒットするライトコマンドまたはライトアンドアップデート(別称ライトアンドゼロ)スヌープに応答して、キャッシュラインをゼロにする(かつその状態が修正状態(修正状態かつゼロ状態)または所有状態(所有状態かつゼロ化状態)に変わる)ように実装される。共有状態にあるヒットするキャッシュラインのゼロ化およびそれを共有状態のままにすることをサポートする実施形態は、他のキャッシュでヒットした修正状態、排他状態、所有状態、または転送状態のラインが、修正状態かつゼロ化状態に変更されるのではなく、所有状態かつゼロ化状態に変更されるか、または無効化されたときにのみ行われる。特定の実施形態では、ライトアップデートスヌープに応答するように実装されたキャッシュは、ライトアップデートスヌープに応答してキャッシュヒットがあるか否かを判定し、すべてゼロを示すようにヒットしたキャッシュラインを構成し(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、応答メッセージをインターコネクト3920に発行するための、(例えば、スヌープコントローラ4053を介して)キャッシュコントローラ4051を含む。
ライトアップデートスヌープを発行した後、(例えば、スヌープコントローラ3925のスヌープレスポンダ3927を介して)インターコネクト3920は、それぞれの応答メッセージの受信を追跡するように実施される(ブロック4352)(例えば、1つの実施形態では、スヌープジェネレータ3926は、スヌープレスポンダ3927に、スヌープレスポンダ3927がそれぞれの応答メッセージの受信を追跡するための情報を示す)。ブロック4352から、図41の実施形態が実施されているか図42の実施形態が実施されているかに応じて、制御はブロック4128またはブロック4228のいずれかに進む。キャッシュラインサイズのゼロの書き込みは、ライトアップデートスヌープのうちの1つに応答してキャッシュのうちの1つによって実行された可能性がある(しかしながら、「共有状態」のキャッシュラインのゼロ化を実装し、所有状態かつゼロ化状態または修正状態かつゼロ化状態であるキャッシュラインのうちの1つを応答メッセージのどれも反映しない実施形態では、キャッシュラインのゼロの書き込みは、ライトアップデートスヌープのうちの1つに応答してキャッシュのうちの1つによって実行されたとは考えられない)。キャッシュラインサイズのゼロの書き込みがキャッシュのいずれによっても実行されていない場合(ブロック4128およびブロック4228)(すべての応答メッセージがゼロ化されていないと示す、または「共有状態」にあるキャッシュラインのゼロ化を実装し、所有状態かつゼロ化状態または修正状態かつゼロ化状態であるキャッシュラインの1つを応答メッセージのどれも反映しない実施形態では)、ブロック4132またはブロック4232が実行される、すなわち、(例えば、スヌープコントローラ3925のライトジェネレータ3929を介して)インターコネクト3920、またはインターコネクト3920からのメッセージに応答して(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)または他のハードウェア構造を通して)第1のエージェントは、キャッシュ(例えば、L1キャッシュ、L2キャッシュ、L3キャッシュ)のうちの1つにおけるキャッシュラインをすべてゼロを示すように構成させる(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、またはアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませる。
上述のように、RFOオペレーションの使用とは対照的に、ライトアップデートスヌープの使用は、ラインが読み取られて発行エージェントに戻されることを必要とせず、データのオーナーシップを発行エージェントに与えることが要求されるという点で有利である(4340および4342の条件が満たされると、ライトアップデートスヌープにより、別のコヒーレントエージェントのキャッシュ内のキャッシュラインがゼロにされる)。よって、ライトアップデートスヌープを使用する実施形態の利点は、それらが別のエージェント(例えば、第2のエージェント/非発行エージェント)のローカルキャッシュを直接更新できることである。例えば、これにより、他のエージェントが操作している変数を更新することなど、比較的高速な通信が可能になる。
上述のように、ライトアップデートスヌープは、図41および図42の実施形態と併せて使用することができる。例として、図41からの実施形態のうちの1つにおいてライトアップデートスヌープを実施する1つの具体的な実施形態が説明される。この具体的な実施形態では、発行エージェント3900は最初に発行エージェント3900のL1キャッシュ3905への書き込みを試み、スヌープが要求される場合、インターコネクト3920は、上述のようにキャッシュラインを格納している可能性があるコヒーレントキャッシュにライトアップデートスヌープを発行する。よって、L1キャッシュは、上述のようにライトコマンドに応答するように実装され、L1キャッシュ、L2キャッシュ、およびL3キャッシュ(より具体的には、実装されている場合はL3キャッシュスライス)は、上述のようにライトアップデートスヌープに応答するように実装され、インターコネクト3920は、上述のように、(例えば、スヌープコントローラ3925のスヌープジェネレータ3926を介して)ライトコマンドに応答してライトアップデートスヌープを発行し、(例えば、スヌープコントローラ3925のスヌープレスポンダ3927を介して)応答メッセージに応答するように実装され、(例えば、スヌープコントローラ3925のライトジェネレータ3929を介して)インターコネクト3920、またはインターコネクトからのメッセージに応答して(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)または他のハードウェア構造を通して)第1のエージェントは、キャッシュ(例えば、第1のエージェントのL1キャッシュ3905、L2キャッシュ3910、またはL3キャッシュ3915(より具体的には、実装されている場合はL3キャッシュスライス3916))のうちの1つにおけるキャッシュラインをすべてゼロを示すように構成させる(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、またはメモリアドレスにおいてダウンストリームメモリにキャッシュラインサイズのゼロを書き込ませるように実装される。
ライトインバリデートスヌープ。図44は、スヌーププロセス4190または4290を実施するためにライトインバリデートスヌープ(インバリデートイーブンイフモディファイドスヌープとも呼ばれる)を使用する、本発明の実施形態を示す流れ図である。図41および図42に関連して、フローは、それぞれブロック4124またはブロック4212からブロック4426に進み、ブロック4426は、ライトインバリデートスヌープを用いてブロック4126または4226を実行する。(例えば、スヌープコントローラ3925のスヌープジェネレータ3926を介して)インターコネクト3920は、キャッシュラインを格納している可能性があるコヒーレントキャッシュ(換言すれば、ヒットがあるか否かを決定する必要があるコヒーレントキャッシュ)にライトインバリデートスヌープを発行するように実装される(ブロック4426)。ライトインバリデートスヌープが発行されたキャッシュ(例えば、第1のエージェントのL1キャッシュ、L2キャッシュ、および/またはL3キャッシュスライス、ならびに第2のエージェントのL1キャッシュ、L2キャッシュ、およびL3キャッシュスライス)のキャッシュラインについてヒットがある(ブロック4440)場合、そのキャッシュは、キャッシュコヒーレンシプロトコル状態を「無効状態」を示すようにし(現在の状態では「修正状態」であっても)(ブロック4448)、キャッシュは、すべてゼロを示すようにキャッシュラインを構成する必要はない(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、またはインバリデートが一定時間内に完了した場合、インターコネクトへ応答メッセージを発行する必要はない(インバリデートが一定時間内に完了しない場合、1つの実施形態は、スヌープが完了したことを示す応答メッセージをスヌープされたキャッシュに送信させる)。ライトインバリデートスヌープが発行されたキャッシュのキャッシュラインについてヒットがない場合(4440)、そのキャッシュは、1つの実施形態では、何もしない(ブロック4430)。
加えて、図41および図42に関連して、フローは、それぞれブロック4124またはブロック4212からブロック4132または4232に進む(ブロック4128および4228は、ライトインバリデートスヌープが使用されるときは実施されない)。ブロック4132または4232において、第1のエージェント(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)または他のハードウェア構造を介して)単独、(例えば、スヌープコントローラ3925のライトジェネレータ3929を介して)インターコネクト3920、またはインターコネクトからのメッセージに応答して(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)または他のハードウェア構造を介して)第1のエージェントは、キャッシュ(例えば、第1のエージェントのL1キャッシュ3905、L2キャッシュ3910、またはL3キャッシュ3915(より具体的には、実装される場合L3キャッシュスライス3916))のうちの1つにおけるキャッシュラインをすべてゼロを示すように構成させる(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、またはアドレスにおいてダウンストリームメモリにキャッシュラインサイズのゼロを書き込ませる。
上述のように、RFOオペレーションの使用とは対照的に、ライトインバリデートスヌープの使用は、発行エージェントがデータをゼロ化するため、キャッシュラインが読み取られて発行エージェントに戻されることを必要としないという点で有利である。
上述のように、ライトインバリデートスヌープは、図41および図42の実施形態と併せて使用することができる。例として、図41からの実施形態のうちの1つにおいてライトインバリデートスヌープを実施する1つの具体的な実施形態が説明される。この具体的な実施形態では、発行エージェント3900は最初に発行エージェント3900のL1キャッシュ3905への書き込みを試み、スヌープが要求される場合、インターコネクト3920は、上述のようにキャッシュラインを格納している可能性があるコヒーレントキャッシュにライトインバリデートスヌープを発行する。よって、L1キャッシュは、上述のようにライトコマンドに応答するように実装され、L1キャッシュ、L2キャッシュ、およびL3キャッシュ(より具体的には、実装されている場合はL3キャッシュスライス)は、上述のようにライトインバリデートスヌープに応答するように実装され、インターコネクト3920は、ライトコマンドに応答してライトインバリデートスヌープを発行するように実装され、第1のエージェント(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)または他のハードウェア構造を介して)単独、(例えば、スヌープコントローラQO25のライトジェネレータ3929を介して)インターコネクト3920、またはインターコネクトからのメッセージに応答して(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)または他のハードウェア構造を通して)第1のエージェントは、キャッシュ(例えば、第1のエージェントのL1キャッシュ3905、L2キャッシュ3910、またはL3キャッシュ3915(より具体的には、実装されている場合はL3キャッシュスライス3916))のうちの1つにおけるキャッシュラインをすべてゼロを示すように構成させる(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、またはメモリアドレスにおいてダウンストリームメモリにキャッシュラインサイズのゼロを書き込ませるように実装される。
無効化およびライトバックするスヌープ。
図45は、スヌーププロセス4190または4290を実施するために、無効化およびライトバックするスヌープ(「ライトバックアンドインバリデートスヌープ」とも呼ばれる)を使用する、本発明の実施形態を示す流れ図である。図41および図42に関連して、フローは、それぞれブロック4124またはブロック4212からブロック4526に進み、ブロック4526は、ライトバックアンドインバリデートスヌープ(無効化およびライトバックするスヌープ)を用いてブロック4126または4226を実行する。(例えば、スヌープコントローラ3925のスヌープジェネレータを介して)インターコネクト3920は、キャッシュラインを格納している可能性があるコヒーレントキャッシュ(換言すれば、ヒットがあるか否かを決定する必要があるコヒーレントキャッシュ)にライトバックアンドインバリデートスヌープを発行するように実装される(ブロック4526)。そのようなスヌープが発行されるキャッシュ(例えば、第1のエージェントのL1キャッシュ、L2キャッシュ、および/またはL3キャッシュスライス、ならびに第2のエージェントのL1キャッシュ、L2キャッシュ、およびL3キャッシュスライス)のキャッシュラインについてヒットがあった場合(ブロック4540)、そのキャッシュは、1)キャッシュラインのキャッシュコヒーレンシプロトコル状態が「修正状態」(および一部の実施形態では「クリーンエビクト状態」)である場合(ブロック4542)、キャッシュラインをインターコネクト3920にライトバックし(ブロック4544)、ともかく2)キャッシュラインのキャッシュコヒーレンシプロトコル状態を「無効状態」を示すようにする(ブロック4548)(キャッシュはキャッシュラインをすべてゼロを示すように構成する必要はない)。スヌープが発行されたキャッシュのキャッシュラインについてヒットがない場合(ブロック4540)、キャッシュは、1つの実施形態では、何もしない(制御はブロック4552に進む)。特定の実施形態では、そのようなスヌープに応答するように実装されたキャッシュは、そのようなスヌープに応答して、キャッシュヒットがあるか否かを判定し、修正されたキャッシュライン(例えば、ヒットして「修正状態」のキャッシュコヒーレンシプロトコル状態を有するもの)をインターコネクト3920にライトバックし、キャッシュラインのキャッシュコヒーレンシプロトコル状態を「無効状態」に修正するためのキャッシュコントローラ4051を含む。
ライトアップデートスヌープを発行した後、(例えば、スヌープコントローラ3925のスヌープレスポンダ3927を介して)インターコネクト3920は、あらゆるそれぞれの応答メッセージの受信を追跡するように実施される(ブロック4552)(例えば、1つの実施形態では、スヌープジェネレータ3926は、スヌープレスポンダ3927に、スヌープレスポンダ3927があらゆるそれぞれの応答メッセージの受信を追跡するための情報を示す)。応答メッセージがデータ(すなわち、修正されたキャッシュラインからのデータ)と共に受信された場合(ブロック4560)、インターコネクト3920は、場合により、(例えば、スヌープコントローラ3925のライトコンバータ3928を介して)データをゼロに実質的に変換するように実装される(ブロック4562)。そうでなければ、インターコネクト3920は、場合により、(例えば、スヌープコントローラ3925のライトジェネレータ3929を介して)ゼロラインを実質的に生成するようめに実装される(ブロック4564)。図41の実施形態が実施されているか図42の実施形態が実施されているかに応じて、制御はブロック4562および4564からブロック4132またはブロック4232のいずれかに進む(ブロック4128および4228は無効化およびライトバックするスヌープが使用される場合は実施されない)。ブロック4132または4232において、第1のエージェント(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)または他のハードウェア構造を介して)単独、(例えば、スヌープコントローラ3925を介して)インターコネクト3920、またはインターコネクト3920からのメッセージに応答して(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)または他のハードウェア構造を介して)第1のエージェントは、キャッシュ(例えば、L1キャッシュ、L2キャッシュ、L3キャッシュ)のうちの1つにおけるキャッシュラインをすべてゼロを示すように構成させる(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、またはアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませる。1つの実施形態では、ブロック4560および4562は実施されず、ブロック4564は常に実行される。別の実施形態では、ブロック4562は実行されず、ライトバックされたデータが第1のエージェントに送信され、第1のエージェントはデータをゼロ化する。別の実施形態では、ブロック4560、4562、および4564は実行されず、第1のエージェントはデータをゼロ化する。
上述のように、RFOオペレーションの使用とは対照的に、無効化およびライトバックするスヌープの使用は、発行エージェントがデータをゼロ化するため、キャッシュラインが読み取られて発行エージェントに戻されることを必要としないという点で有利である。
上述のように、キャッシュライン境界にアラインされたアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するコマンドを発行する第1のエージェントに応答して上記が開始される(例えば、ブロック4112または4212)。上述のように、このコマンドは、ライトコマンドの形をとることができる(例えば、ブロック4112または4212)。他の実施形態では、このコマンドはリードコマンドであり得る(例えば、ブロック4212)。この場合、キャッシュのうちの1つ(例えば、L1キャッシュ、L2キャッシュ、L3キャッシュ)におけるキャッシュラインは、1)インターコネクト3920(例えば、スヌープコントローラ3925)が、ゼロライン(そのラインのそのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態に設定される)を示す第1のエージェントに応答して、第1のエージェントからのリードコマンドに応答するように実装されていることと、2)第1のエージェントが、そのリードコマンドの結果をキャッシュに入れて、キャッシュ(例えば、L1キャッシュ3905)に、すべてゼロを示すようにキャッシュラインを構成させるが(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、第1のエージェントのアーキテクチャレジスタファイルには入れないように実装されていることと、によってすべてゼロを示すように構成させられる。
上述のように、無効化およびライトバックするように示すスヌープは、図41および図42の実施形態と併せて使用することができる。例として、図41からの実施形態のうちの1つにおいてそのようなスヌープを実施する1つの具体的な実施形態が説明される。この具体的な実施形態では、発行エージェント3900は最初に発行エージェント3900のL1キャッシュ3905への書き込みを試み、スヌープが要求される場合、インターコネクト3920は、上述のようにキャッシュラインを格納している可能性があるコヒーレントキャッシュにスヌープを発行する。よって、L1キャッシュは、上述のようにライトコマンドに応答するように実装され、L1キャッシュ、L2キャッシュ、およびL3キャッシュ(より具体的には、実装されている場合はL3キャッシュスライス)は、上述のようにスヌープに応答するように実装され、インターコネクト3920は、ライトコマンドに応答してスヌープを発行するように実装され、場合により、(例えば、スヌープコントローラ3925のライトコンバータ3928を介して)スヌープに応答してあらゆる受信データをゼロに実質的に変換するように実装され、場合により、スヌープに応答してデータが(例えば、スヌープコントローラ3925の書き込みジェネレータ3929)受信されない場合、ゼロラインを実質的に生成するように実装され、第1のエージェント(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)または他のハードウェア構造を介して)単独、(例えば、スヌープコントローラ3925を介して)インターコネクト3920、またはインターコネクトからのメッセージに応答して(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)または他のハードウェア構造を通して)第1のエージェントは、キャッシュ(例えば、第1のエージェントのL1キャッシュ3905、L2キャッシュ3910、またはL3キャッシュ3915(より具体的には、実装されている場合はL3キャッシュスライス3916))のうちの1つにおけるキャッシュラインをすべてゼロを示すように構成させる(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、またはメモリアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませるように実装される。
ヒットしたキャッシュラインを書き出すが、第1のエージェントにデータを返送せず、データがダウンストリームメモリから読み出されることにならないスヌープ、すなわち従来技術のスヌープ(例えば、RFO)。図46は、ヒットするが、第1のエージェントにデータを送り返さず、スヌーププロセス4190または4290を実施するためにデータがダウンストリームメモリから読み出されることにならない、あらゆるキャッシュラインを書き出すスヌープ(すなわちラインを正常に書き出す従来技術のスヌープ、例えばRFOオペレーション)を使用する、本発明の実施形態を示す流れ図である。図41および図42に関連して、フローは、それぞれブロック4124またはブロック4212からブロック4526に進み、ブロック4526は、そのようなスヌープを用いてブロック4126または4226を実行する。(例えば、スヌープコントローラ3925のスヌープジェネレータを介して)インターコネクト3920は、キャッシュラインを格納している可能性があるコヒーレントキャッシュ(換言すれば、ヒットがあるか否かを決定する必要があるコヒーレントキャッシュ)にそのようなスヌープを発行するように実装される(ブロック4626)。そのようなスヌープが発行されるキャッシュ(例えば、第1のエージェントのL1キャッシュ、L2キャッシュ、および/またはL3キャッシュスライス、ならびに第2のエージェントのL1キャッシュ、L2キャッシュ、およびL3キャッシュスライス)のキャッシュラインについてヒットがあった場合(ブロック4640)、そのキャッシュは、スヌープに応答する(4644)。一部の実施形態では、キャッシュは、従来技術のキャッシュが通常応答するように、実装されたキャッシュコヒーレンシプロトコルに従って、そのようなスヌープに応答するように実装される。一部の実施形態では新しいタイプのスヌープが使用されるが、他の実施形態では、従来技術のスヌープ(例えば、RFOオペレーション)が使用され、その場合、既存のプロセッサ設計にキャッシュラインゼロ化命令を組み込むことは、依存するキャッシュになんら修正を必要としない、またはわずかな修正しか必要としない(上記の「すべてゼロを示すようにキャッシュラインを構成するようにキャッシュをトリガする」と題するセクションを参照)。スヌープが発行されたキャッシュのキャッシュラインについてヒットがない場合(4640)、キャッシュは、1つの実施形態では、何もしない(制御はブロック4652に進む)。
ライトアップデートスヌープを発行した後、(例えば、スヌープコントローラ3925のスヌープレスポンダ3927を介して)インターコネクト3920は、あらゆるそれぞれの応答メッセージの受信を追跡するように実施される(例えば、1つの実施形態では、スヌープジェネレータ3926は、スヌープレスポンダ3927に、スヌープレスポンダ3927があらゆるそれぞれの応答メッセージの受信を追跡するための情報を示す)。応答メッセージがデータ(例えば、修正されたキャッシュラインからのデータ)と共に受信された場合(ブロック4660)、インターコネクト3920は、(例えば、スヌープコントローラ3925のスヌープレスポンダ3927を介して)発行エージェントまたは発行エージェントのいずれのキャッシュにもデータを送信しないように実装される(ブロック4662)。データを伴う応答メッセージが受信されない場合(4660)、インターコネクト3920は、(例えば、スヌープコントローラ3925のスヌープレスポンダ3927を介して)必要がないため、ダウンストリームメモリからのデータを読み出さないように実装される(ブロック4664)。
図41の実施形態が実施されているか図42の実施形態が実施されているかに応じて、制御はブロック4662および4664からブロック4132または4232のいずれかに進む(ブロック4128および4228はそのようなスヌープが使用される場合は実施されない)。ブロック4132または4232において、第1のエージェント(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)を介して)単独(ブロック4232のみ)、(例えば、スヌープコントローラQO25を介して)インターコネクト3920、またはインターコネクト3920からのメッセージに応答して(例えば、実行ユニット(例えば、メモリアクセスユニット(単数または複数)164、ロードストアユニット340)または他のハードウェア構造を介して)第1のエージェントは、キャッシュ(例えば、L1キャッシュ、L2キャッシュ、L3キャッシュ)のうちの1つにおけるキャッシュラインをすべてゼロを示すように構成させる(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、またはアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませる。ブロック4662が実行されない(データが第1のエージェントに返送される)および/またはブロック4664が実行されない(ダウンストリームメモリがアクセスされ、データが第1のエージェントに返される)実施形態では、第1のエージェントはデータをゼロ化する。
上述のように、たとえRFOオペレーションが使用されたとしても、例示された実施形態は、それらがRFOオペレーションをサポートする既存のキャッシュ設計と共に、修正をまったくまたはほとんど伴わずに動作するという点で有利である。
上述のように、これらのタイプのスヌープは、図41および図42の実施形態と併せて使用することができる。例として、図42からの実施形態のうちの1つにおいてそのようなスヌープを実施する1つの具体的な実施形態が説明される。この具体的な実施形態では、発行エージェント3900は、(発行エージェント/第1のエージェントのキャッシュをスキップして)直接インターコネクト3920にメモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するコマンドを発行し、(例えば、スヌープコントローラ3925のスヌープジェネレータ3926を介して)インターコネクト3920は、上述したようにキャッシュラインを格納している可能性があるコヒーレントキャッシュにスヌープを発行するように実施され、応答メッセージがデータ(すなわち、修正されたキャッシュラインからのデータ)と共に受信された場合、インターコネクト3920は、場合により、発行エージェントまたは発行エージェントのいかなるキャッシュにもデータを送信しないように(例えば、スヌープコントローラ3925のスヌープレスポンダ3927を介して)実装され、データを有する応答メッセージが受信されない場合、(例えば、スヌープコントローラ3925のスヌープレスポンダ3927を介して)インターコネクト3920は、場合により、必要ではないため、ダウンストリームメモリからのデータを読み出さないように実施され、発行エージェント(第1のエージェント)単独、またはインターコネクトからのメッセージに応答して第1のエージェントは、キャッシュ(例えば、L1キャッシュ、L2キャッシュ、L3キャッシュ)のうちの1つにおけるキャッシュラインをすべてゼロを示すように構成させる(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、またはアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませる。よって、特定の実施形態では、L1キャッシュ、L2キャッシュ、およびL3キャッシュ(より具体的には、実装されている場合はL3キャッシュスライス)は、上述のようにスヌープに応答するように実装され、インターコネクト3920は、上述のように、(例えば、スヌープコントローラ3925のスヌープジェネレータ3926を介して)コマンドに応答してスヌープを発行し、(例えば、スヌープコントローラ3925のスヌープレスポンダ3927を介して)キャッシュからの応答メッセージに応答するように実装され、発行エージェントは、直接インターコネクト3920にメモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するコマンドを送信するように実装され、発行エージェント(第1のエージェント)単独、またはインターコネクトからのメッセージに応答して第1のエージェントは、キャッシュ(例えば、L1キャッシュ、L2キャッシュ、L3キャッシュ)のうちの1つにおけるキャッシュラインをすべてゼロを示すように構成させる(異なる実施形態は、「すべてゼロを示すようにキャッシュラインを構成する技法」と題するセクションで既に述べたように、すべてゼロを示すようにキャッシュラインを構成するようにキャッシュを実装することができる)、またはアドレスにおいてダウンストリームメモリへキャッシュラインサイズのゼロを書き込ませる。1つの実施形態では、発行エージェント(第1のエージェント)単独が、キャッシュ(例えば、L1キャッシュ、L2キャッシュ、L3キャッシュ)のうちの1つにおけるキャッシュラインをすべてゼロを示すように構成させる。
複数のソケット
上述のように、インターコネクト3920は、例えば、1)CCX内のインターコネクトのみ、2)CCX内およびCCX間のインターコネクト、3)異なるCCX内の別個のインターコネクト、およびCCX間のインターコネクト(単数または複数)を表すことができる。本明細書で論じるように、システムは、(それぞれ1つまたは複数のCCXを含む)上記プロセッサのうちの1つまたは複数で実装され得る(以下の「例示的なコンピュータアーキテクチャ」と題するセクションを参照)。そのようなシステムは、機械的接続および電気的接続を提供する1つまたは複数の機械的コンポーネントをそれぞれ有する1つまたは複数のソケット(CPUソケットまたはCPUスロットとして知られる)を備え得る。複数のソケットを有するシステム(例えば、サーバ)では、ソケットは、1つまたは複数のインターコネクトのセット(ソケット間インターコネクトとも呼ばれる)によって接続される。異なる実施形態は、リング、複数のリング、ポイントツーポイントリンク(例えば、クイックパスインターコネクト(QPI)、ウルトラパスインターコネクト(UPI)、ハイパートランスポート(HP)などのポイントツーポイントリンク)、共有バス(単数または複数)などのうちの1つまたは複数を含み、ソケット間インターコネクトのセットを異なるように実装することができる。このソケット間インターコネクトのセットは、実施形態に応じて、インターコネクト3920の一部として、または別々のものとして見ることができる。一部の実施形態では、このインターコネクトのセットは、インターコネクト3920に関して上述したのと同じ通信(ライトコマンド、スヌープ、応答メッセージなど)をサポートするように実装され、ソケット間インターコネクトを介して送信される場合、これらの通信のそれぞれが、同じフォーマットを有してもよいし異なるフォーマットを有してもよい。他の実施形態では、これらの通信のうちの1つまたは複数(例えば、スヌープタイプおよび/または応答メッセージのうちの1つまたは複数)は、ソケット間で送信されるときに変換される。例えば、一部の実施形態は、単一ソケット内のプロセッサ(単数または複数)内でライトアップデートスヌープを使用することができるが、そのようなスヌープが別のソケットに送信される場合、ライトインバリデートまたはライトバックアンドインバリデートスヌープに変換することができる。そのような実施形態の利点は、新しいゼロ化キャッシュラインを生成するか否かの決定がソケット内のみであることである(従って、他のソケットからの「ゼロ化」または「ゼロ化しない」指示の必要がない)。
一部の実施形態のまとめ
本発明の1つの実施形態は、第1のコヒーレントエージェントと、第2のコヒーレントエージェントと、およびインターコネクトと、を備えるプロセッサを含み得る。第1のエージェントは、第1のエージェントのキャッシュを介してインターコネクトに結合されている。第2のエージェントは、第2のエージェントのキャッシュを介してインターコネクトに結合されている。第1のエージェントは、実行することにより、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こす命令をデコードして実行する。
第1のエージェントは、第1のエージェントのキャッシュに対して、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するためのライトコマンドを発行する。第1のエージェントのキャッシュは、ライトコマンドの受信に応答してキャッシュラインについてヒットがあり、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態である場合、すべてゼロを示すようにそのキャッシュラインを構成する。第1のエージェントのキャッシュは、ライトコマンドの受信に応答してキャッシュミスがある場合、インターコネクトにライトコマンドを発行する。インターコネクトは、ライトコマンドの受信に応答して、第2のエージェントのキャッシュにスヌープを発行する。インターコネクト、またはインターコネクトからのメッセージに応答する第1のエージェントは、ライトコマンドおよびスヌープがキャッシュラインにゼロの書き込みを実行させなかった場合に、第1のエージェントのキャッシュ内のキャッシュラインをすべてゼロを示すように構成させる。
加えて、以下が適用され得る。一部の実施形態では、第1のエージェントのキャッシュは、ライトコマンドの受信に応答してキャッシュラインについてヒットがあり、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態ではない場合、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態を無効状態にし、インターコネクトに向けてライトコマンドを発行する。
本発明の別の実施形態は、キャッシュラインをゼロ化するための命令をデコードするためのデコーダを備えるプロセッサを含み得る。プロセッサはまた、デコーダに結合され、命令のデコードに応答して、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを開始するためのライトコマンドを発行する、実行ユニットを備える。プロセッサはまた、実行ユニットに結合され、ライトコマンドを受信し、ライトコマンドに応答してコヒーレントキャッシュにヒットがあるか否かを判定し、ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態であるか否かを判定し、キャッシュコヒーレンシプロトコル状態が修正状態または排他状態の場合にすべてゼロを示すようにキャッシュラインを構成し、ライトコマンドの受信に応答してミスがある場合、インターコネクトに向けてライトコマンドを発行する、コヒーレントキャッシュを備える。インターコネクトは、ライトコマンドの受信に応答して、ヒットがあるか否かを判定する必要がある他の複数のコヒーレントキャッシュのそれぞれにスヌープを発行する。インターコネクト、またはインターコネクトからのメッセージに応答する実行ユニットは、ライトコマンドおよびスヌープがキャッシュラインにゼロの書き込みを実行させなかった場合に、コヒーレントキャッシュのうちの1つのキャッシュラインをすべてゼロを示すように構成させる。
加えて、以下が適用され得る。一部の実施形態では、コヒーレントキャッシュはまた、そのキャッシュラインのキャッシュコヒーレンシプロトコル状態を無効状態にし、ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が修正状態または排他状態ではない場合にインターコネクトに向けてライトコマンドを発行する。一部の実施形態では、デコーダおよび実行ユニットは第1のコアの一部であり、複数のコヒーレントキャッシュは第2のコアのコヒーレントキャッシュを含む。
本発明の別の実施形態は、キャッシュラインゼロ化命令の実行に応答してライトコマンドを発行するための第1のコアを備えるプロセッサを含み得る。第1のコアはまた、ライトコマンドを受信し、ライトコマンドに応答してキャッシュにヒットがあるかミスがあるかを判定し、ヒットに応答して、ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が、他のキャッシュにブロードキャストせずにキャッシュラインを修正する権限をキャッシュに与えるものであるか否かを判定する、結合されたレベル1(L1)キャッシュを備える。L1キャッシュはまた、ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が、他のキャッシュにブロードキャストせずにキャッシュラインを修正する権限をキャッシュに与えるものである場合、ヒットに応答して、すべてゼロを示すようにキャッシュラインを構成する。L1キャッシュは、ミスに応答してインターコネクトに向けてライトコマンドを発行する。インターコネクトは、第1のコアに結合され、ライトコマンドに応答して、ヒットがあるか否かを判定する必要がある他の複数のキャッシュにスヌープを発行する。第1のコア、インターコネクト、またはインターコネクトからのメッセージに応答する第1のコアは、ライトコマンドおよびスヌープがキャッシュラインにゼロの書き込みを実行させなかった場合に、キャッシュまたは複数の他のキャッシュのうちの1つにおけるキャッシュラインをすべてゼロを示すように構成させる。
加えて、以下が適用され得る。一部の実施形態では、L1キャッシュはまた、キャッシュコヒーレンシプロトコル状態を無効状態にし、ヒットに応答して、ヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が他のキャッシュにブロードキャストせずにキャッシュラインを修正する権限をキャッシュに与えるものではない場合に、インターコネクトに向けてライトコマンドを発行する。一部の実施形態では、複数の他のキャッシュのうちのそれぞれが、スヌープに応答して、その他のキャッシュにヒットがあるかミスがあるかを判定し、ヒットに応答して、その他のキャッシュにおけるヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が、他のキャッシュにブロードキャストせずにキャッシュラインを修正する権限をキャッシュに与えるものであるか否かを判定するように実装され得る。複数の他のキャッシュのそれぞれは、そのキャッシュにおいてヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が、他のキャッシュにブロードキャストせずにそのキャッシュにおいてヒットしたキャッシュラインを修正する権限をキャッシュに与えるものである場合、ヒットに応答して、すべてゼロを示すようにそのキャッシュにおけるキャッシュラインを構成し、ゼロ化を示す応答メッセージを発行し、ミスに応答して、またはそのキャッシュにおけるヒットしたキャッシュラインのキャッシュコヒーレンシプロトコル状態が、そのキャッシュにおけるヒットしたキャッシュラインを修正する権限をキャッシュに与えるものではない場合、ヒットに応答して、ゼロ化されていないことを示す応答メッセージを発行する。インターコネクトは、スヌープによって複数の他のキャッシュのうちの1つがすべてゼロを示すように構成されたか否かを判定するために、応答メッセージの受信を追跡する。
本発明の別の実施形態は、第1のコヒーレントエージェントと、第2のコヒーレントエージェントと、およびインターコネクトと、を備えるプロセッサを含み得る。第1のエージェントは、第1のエージェントのキャッシュを介してインターコネクトに結合されている。第2のエージェントは、第2のエージェントのキャッシュを介してインターコネクトに結合されている。第1のエージェントは、実行することにより、メモリアドレスにおいてキャッシュラインサイズのゼロの書き込みを引き起こす命令をデコードして実行する。第1のエージェントは、インターコネクトに対してコマンドを発行する。インターコネクトは、コマンドの受信に応答して、第1のエージェントのキャッシュおよび第2のエージェントのキャッシュにスヌープを発行する。第1のエージェント、インターコネクト、またはインターコネクトからのメッセージに応答する第1のエージェントは、スヌープがキャッシュラインにゼロの書き込みを実行させなかった場合に、第1のエージェントのキャッシュ内のキャッシュラインをすべてゼロを示すように構成させる。
本発明の別の実施形態は、キャッシュラインをゼロ化するための命令をデコードするためのデコーダを備えるプロセッサを含み得る。プロセッサはまた、デコーダに結合され、命令のデコードに応答して、コマンドを発行する、実行ユニットを備える。インターコネクトは、コマンドの受信に応答して、ヒットがあるか否かを判定する必要がある複数のコヒーレントキャッシュのそれぞれにスヌープを発行する。実行ユニット単独、インターコネクト、またはインターコネクトからのメッセージに応答する実行ユニットは、スヌープがキャッシュラインにゼロの書き込みを実行させなかった場合に、実行ユニットに結合された複数のコヒーレントキャッシュのうちの1つのキャッシュラインをすべてゼロを示すように構成させる。
本発明の別の実施形態は、キャッシュラインゼロ化命令の実行に応答してコマンドを発行するための第1のコアを備えるプロセッサを含み得る。プロセッサはまた、共有されるレベル3(L3)キャッシュに結合されたインターコネクトと、第1のコアのレベル2(L2)キャッシュと、第1のコアのレベル1(L1)キャッシュと、を備えて、コマンドに応答して、ヒットがあるか否かを決定しなければならない複数のコヒーレントキャッシュのスヌープを発行する。一部の実施形態では、複数のコヒーレントキャッシュは、第1のコアのL1キャッシュと、第1のコアのL2キャッシュと、L3キャッシュと、第2のコアのL1キャッシュと、第2のコアのL2と、を含む。第1のコア単独、インターコネクト、またはインターコネクトからのメッセージに応答する第1のコアは、第1のコアに結合された複数のコヒーレントキャッシュのうちの1つのキャッシュラインをすべてゼロを示すように構成させる。
PTEコアレッシング
プロセッサコアは、一部の例示的な実施形態によるページテーブルコアレッシング機能をサポートすることができ、これにより、複数のより小さいメモリページを単一のより大きい有効メモリページにコアレッシングすることができる。一部の実施形態では、例えば、8つの4KBのメモリページを単一の32KBのメモリページにコアレッシングさせることができる。他の実施形態では、16個の4KBのメモリページを単一の64KBのメモリページにコアレッシングさせることができる。
現在のコンピュータアーキテクチャは、様々なサイズの仮想メモリページを可能にする。例えば、x86アーキテクチャは、4KB、2MB、および1GBのページを可能にし得る。このようなアーキテクチャを実装するプロセッサは、これらのページサイズのそれぞれに対してトランスレーションルックアサイドバッファ(TLB)を提供して、仮想アドレスから物理アドレスへのマッピングを提供することができる。仮想アドレスを物理アドレスに変換しようと試みる場合、プロセッサは、適用可能なTLBのそれぞれを検索して、それらのいずれかが仮想アドレスに対応するエントリを含むか否かを判定することができる。エントリが見つかった場合(すなわち、「TLBヒット」)、エントリは、それが見つかったTLBから読み出され、仮想アドレスから物理アドレスへの変換が進行する。
仮想アドレスに対応するエントリがプロセッサ上に存在するTLBのいずれにも見つからない場合(すなわち、「TLBミス」)、プロセッサは、仮想アドレスに対応するページテーブル内のエントリを見つけようと試みることができる。エントリが見つかると(すなわち、「ページテーブルヒット」)、そのエントリは、ページテーブルから読み出され、適切なTLBに挿入される。次いで、仮想アドレスから物理アドレスへの変換が再試行され、TLBヒットを得る。
仮想アドレスに対応するエントリがページテーブルに見つからない場合(すなわち、「ページテーブルミス」)、提供された仮想アドレスに対応する物理アドレスがメモリ内に現在存在しないことを示し得る。この場合、プロセッサは、仮想アドレスに対応するページを他の記憶装置(例えば、ディスク)から特定の物理アドレスにおいてメモリにロードさせることができ、提供された仮想アドレスからこの物理アドレスへのマッピングをページテーブルに挿入することができる。その後、提供された仮想アドレスを変換しようと試みると、ページテーブルヒットとなり、それによって、対応するエントリが適切なTLBに追加される。
現在の一部のプロセッサアーキテクチャの問題点は、許容ページサイズの粒度が不足していることである。例えば、上で説明したように、一部のプロセッサアーキテクチャは、4KB、2MB、および1GBのページを可能にし、ページサイズ間で比較的「粗い」広がりを提供する。
一部の実施形態によれば、この問題には、複数のより小さいページをコアレッシングして、例えば4KBより大きく2MBより小さい中間のページサイズをもたらすことによって対処することができる。一部の実施形態では、これは、特定の条件下で、例えば8つの4KBのページを、可能な範囲でコアレッシングして単一の32KBの有効ページを作成することによって達成することができる。一部の実施形態では、8つの4KBのページは32KBのアドレス境界にアラインされなければならない。
一部の実施形態では、8つの4KBのページは、(a)仮想アドレス空間または(b)物理アドレス空間の一方または両方において連続していなければならない。例えば、一部の実施形態は、仮想アドレスVAおよび物理アドレスPAのビット12〜14が互いに等しいことを要求し得る。すなわち、一部の実施形態では、小さいページのそれぞれについて、VA[14:12]==PA[14:12]の場合に限り、小さいページが大きいページにコアレッシングされる。
一部の実施形態では、小さいページのそれぞれが同じ許可ビットを有する場合にのみ、小さいページが大きいページにコアレッシングされる。一部の実施形態では、より小さいページがより大きいページにコアレッシングされる場合、オペレーティングシステムは、例えばすべての小さいページのアクセスされたビット/ダーティビットに対して論理OR演算を実行することによって、より小さいページのそれぞれに対応するアクセスされたビット/ダーティビットを単一の値に組み合わせることができる。一部の実施形態では、より小さいページがより大きいページにコアレッシングされる場合、オペレーティングシステムは、適切な4KBのページのダーティビット/アクセスされたビットのみを設定し、それにより、より大きいページのどの部分がアクセスされた、および/またはダーティであるかを追跡する。
図47は、一部の実施形態による、プロセッサに含まれ得るページコアレッシング機能を示すブロック図である。ブロック4700は、8つのエントリ4701〜4708を含むページテーブルの一部を表し、それぞれ、4KBのサイズのページに対応する。図47に示すように、8つのエントリ4701〜08は連続したアドレスを有し、8つのアドレスのビット12〜14は連続した値000、001、010、011、100、101、110、および111をとる。一部の実施形態によれば、図47に示すように、これらの8つの4KBのページは32KBの有効ページ4709に結合され得る。
一部の実施形態では、32KBの有効ページ4709は、各ページテーブルエントリ(PTE)に追加のビットを含めることによって示され、8個の4KBのページが32KBの有効ページとして扱われるべきであることを示し得る。一部の実施形態では、32KBの有効ページ4709は、ページテーブルエントリ4701〜08に対応するページディレクトリエントリにおける追加のビットによって示され、8個の4KBのページが32KBの有効ページとして扱われるべきであることを示し得る。一部の実施形態では、8つの4KBのページのうちの1つにアクセスするたびに、8つの4KBのページの連続してアラインされたアドレスがハードウェアによって検出され、32KBの有効ページとして扱われ得る。
複数のより小さいページがより大きい有効ページにコアレッシングするための基準を満たすか否かを検出することは、様々な方法を使用して達成され得る。例えば、図48は、ページテーブルエントリを単一の有効ページにコアレッシングするための方法を示す流れ図である。ボックス4801に示すように、全TLB(例えば、すべての4KB、32KB、2MB、および1GBのTLB)におけるTLBミスの場合、プロセッサは、ボックス4802に示すように、ページディレクトリの階層構造に従ってページテーブルをウォークすることができる(例えば、x86ページテーブル定義を使用)。適切なページテーブルエントリの位置を判定すると、プロセッサは、複数のページテーブルエントリを含むキャッシュラインを読み出すことができる(ボックス4803)。例えば、一部の実施形態では、プロセッサは、キャッシュライン内の8つのページテーブルエントリを読み出すことができる。
キャッシュライン内の複数のページテーブルエントリを読み出すと、プロセッサは、4804に示すように、ページテーブルエントリがコアレッシングの要件を満たすページに対応するか否かをテストすることができる。例えば、プロセッサは、ページのアドレスが仮想メモリおよび/または物理メモリ内で連続しているか否かをテストすることができる。一部の実施形態では、プロセッサは、ページの許可ビットの値が同じであるか否かをさらにテストすることができる。一部の実施形態では、プロセッサは、ページのアドレスが32KBの境界にアラインされているか否かを判定することができる。
キャッシュライン内の複数ページテーブルエントリが、単一の結合ページ(例えば、32KBの有効ページ)へコアレッシングするための基準を満たす場合、ボックス4805に示されるように、結合ページに対応するエントリは、適切なTLB(例えば、32KB TLB)に配置されてもよく、単一のエントリに結合されたキャッシュライン内のエントリは無効化される。複数のページテーブルエントリが単一の結合ページにコアレッシングするための基準を満たさない場合、ボックス4806に示すように、仮想−物理アドレス変換は、より小さい(例えば、4KB)TLBに対応するTLB内にエントリを割り当てることによって通常通り継続することができる。
一部の実施形態では、プロセッサは、関連するTLBの内容に基づいて複数のより小さいページをコアレッシングするか否かを判定することができる。例えば、4KBのTLBミスの後、プロセッサは、対応する4KBのページが、TLBに存在する追加のエントリ(例えば、4KBのページに対応する他の7つのTLBエントリ)とコアレッシングすることができるか否かを検出することができる。提供されたアドレスに対応するエントリを他のものと結合してより大きい有効なページ(例えば、32KBの有効ページ)を作成することができる場合、結合される既存のTLBエントリは無効化され、より大きい有効ページに対応するエントリが適切なTLB(例えば、32KBのページに対応するTLB)に作成される。一部の実施形態では、結合された有効ページサイズに対応する別個のTLBは使用されず、代わりに、結合ページに対する仮想−物理アドレス変換に関する情報が、より小さいページサイズに対応するTLBに格納される(例えば、4KBのページTLB)。一部の実施形態では、この情報は、その目的のために予約された追加のビットを使用して、より小さいページサイズに対応するTLB内に符号化され得る。
一部の実施形態では、上記の機能は、上記のようにページコアレッシングのために最適化されたアルゴリズムを使用してページを割り当てるオペレーティングシステムと併せて使用され得る。既存のオペレーティングシステムは、例えば、4KB、2MB、および/または1GBのページを割り当てるために設計されたアルゴリズムを有する。一部の実施形態と共に使用され得るオペレーティングシステムは、結合ページ(例えば、32KBの有効ページ)を割り当てるように設計されている追加のアルゴリズムを使用することができる。
上述のページコアレッシング機能は、特定のサイズの特定の数のページを結合することに限定されず、様々なサイズの異なる数のページをコアレッシングさせるために使用されてもよい。例えば、一部の実施形態は、16個の4KBのページをコアレッシングして、64KBの有効結合ページを形成することができる。一部の実施形態は、複数のサイズの有効結合ページ(例えば、32KBおよび64KBの結合ページ)をさらにサポートすることができる。一部の実施形態では、複数のサイズのページ(例えば、4KBおよび32KBのページ)を単一の有効ページ(例えば、64KBの有効ページ)に結合することができる。
例示的なコンピュータアーキテクチャ
図49〜図52は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタルシグナルプロセッサ(DSP)、汎用プロセッサ、サーバ用の当技術分野で知られている他のシステム設計および構成。サーバ環境で使用するためのプロセッサまたは処理要素、コプロセッサ(例えば、セキュリティコプロセッサ)ハイスループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータ、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータなど)(またはコンピュータビジョンアクセラレータ)、フィールドプログラマブルゲートアレイ、または他の任意のプロセッサまたは処理装置、グラフィック装置、ビデオゲーム装置、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルド装置、および他の様々な電子デバイスも適している。一般に、本明細書で開示されているプロセッサおよび/または他の実行ロジックを組み込むことができる多種多様なシステムまたは電子デバイスが、概ね好適である。
ここで図49を参照すると、本発明の1つの実施形態によるシステム4900のブロック図が示されている。システム4900は、1つまたは複数のプロセッサ4910、4915を含み得、これらは、コントローラハブ4920に結合される。1つの実施形態では、コントローラハブ4920は、グラフィックメモリコントローラハブ(GMCH)4990および入出力ハブ(IOH)4950(別個のチップ上にあり得る)を含み、GMCH 4990は、メモリコントローラおよびグラフィックコントローラを含み、これらにメモリ4940およびコプロセッサ4945が結合され、IOH 4950は、入出力(I/O)デバイス4960をGMCH 4990に結合する。
あるいは、メモリおよびグラフィックコントローラの一方または両方が(本明細書に説明される)プロセッサ内に集積され、メモリ4940およびコプロセッサ4945は、プロセッサ4910と、IOH 4950を有する単一のチップのコントローラハブ4920とに直接に結合される。
追加のプロセッサ4915の任意の性質が図49に破線で示されている。各プロセッサ4910、4915は、本明細書で説明される処理コアのうちの1つまたは複数を含み得、プロセッサ3600の一部の変形であり得る。
メモリ4940は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこれら2つの組み合わせであってもよい。少なくとも1つの実施形態では、コントローラハブ4920は、フロントサイドバス(FSB)などのマルチドロップバス、QuickPathインターコネクト(QPI)などのポイントツーポイントインターフェース、または類似の接続4995を介してプロセッサ4910、4915と通信する。
1つの実施形態では、コプロセッサ4945は、(例えば、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、セキュリティコプロセッサなどのコプロセッサ、高スループットMICプロセッサ、GPGPUのコプロセッサ、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含む)専用プロセッサである。1つの実施形態では、コントローラハブ4920は、統合グラフィックアクセラレータを含み得る。
物理リソース4910と物理リソース4915との間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性などを含む幅広い価値基準に関して様々な違いが存在し得る。
1つの実施形態では、プロセッサ4910は、一般なタイプのデータ処理オペレーションを制御する命令を実行する。コプロセッサ命令は、命令中に埋め込まれ得る。プロセッサ4910は、取り付けられたコプロセッサ4945によって実行されるべきタイプとしてこれらのコプロセッサ命令を認識する。従って、プロセッサ4910は、コプロセッサバスまたは他のインターコネクト上でこれらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ4945に発行する。コプロセッサ(単数または複数)4945は、受信したコプロセッサ命令を受け入れて実行する。
ここで図50を参照すると、本発明の一実施形態によるより具体的な例示的な第1のシステム5000のブロック図が示されている。図50に示すように、マルチプロセッサシステム5000はポイントツーポイント相互接続システムであり、ポイントツーポイントインターコネクト5050を介して結合される第1のプロセッサ5070および第2のプロセッサ5080を含む。プロセッサ5070および5080のそれぞれは、プロセッサ3600の一部の変形であり得る。本発明の1つの実施形態では、プロセッサ5070および5080はそれぞれ、プロセッサ4910および4915であるが、コプロセッサ5038は、コプロセッサ4945である。別の実施形態では、プロセッサ5070および5080はそれぞれ、プロセッサ4910およびコプロセッサ4945である。
統合メモリコントローラ(IMC)ユニット5072および5082をそれぞれ含むプロセッサ5070および5080が示されている。プロセッサ5070は、そのバスコントローラユニットの一部としてポイントツーポイント(P−P)インターフェース5076および5078も含む。同様に、第2のプロセッサ5080は、P−Pインターフェース5086および5088を含む。プロセッサ5070、5080は、ポイントツーポイント(P−P)インターフェース回路5078、5088を用いて、P−Pインターフェース5050を介して情報を交換し得る。図50に示すように、IMC 5072および5082は、プロセッサをそれぞれのメモリ、すなわち、メモリ5032およびメモリ5034に結合し、それぞれのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。
プロセッサ5070、5080はそれぞれ、ポイントツーポイントインターフェース回路5076、5094、5086、5098を用いて、個々のP−Pインターフェース5052、5054を介してチップセット5090と情報を交換し得る。チップセット5090は、場合により、高性能インターフェース5092を介してコプロセッサ5038と情報を交換し得る。一実施形態では、コプロセッサ5038は、例えば高スループットMICプロセッサ、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、組み込みプロセッサなどの専用プロセッサである。
共有キャッシュ(図示せず)は、どちらかのプロセッサに含まれ得る、または両方のプロセッサの外部にあり得るが、プロセッサが低電力モードにされた場合に、どちらかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、P−Pインターコネクトを介してプロセッサと依然として接続され得る。
チップセット5090は、インターフェース5096を介して第1のバス5016に結合され得る。1つの実施形態では、第1のバス5016は、ペリフェラルコンポーネントインターコネクト(PCI)バス、またはPCI Expressバスなそのバス、または別の第3世代I/O相互接続バスであり得るが、本発明の範囲はそのように限定されない。
図50に示すように、様々なI/Oデバイス5014が、第1のバス5016を第2のバス5020に結合するバスブリッジ5018と共に、第1のバス5016に結合され得る。1つの実施形態では、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、セキュリティコプロセッサなどのコプロセッサ、高スループットMICプロセッサ、GPGPUのコプロセッサ、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置などの、1つまたは複数の追加のプロセッサ(単数または複数)5015は、第1のバス5016に結合されている。1つの実施形態では、第2のバス5020は、低ピンカウント(LPC)バスであり得る。1つの実施形態では、例えば、キーボードおよび/またはマウス5022、通信デバイス5027、ならびに命令/コードおよびデータ5030を含み得るディスクドライブもしくは他の大容量ストレージデバイスなどのストレージユニット5028を含む、様々なデバイスが第2のバス5020に結合され得る。さらに、オーディオI/O 5024が、第2のバス5020に結合され得る。他のアーキテクチャが可能であることに留意されたい。例えば、図50のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してもよい。
ここで図51を参照すると、本発明の一実施形態によるより具体的な例示的な第2のシステム5100のブロック図が示されている。図50および図51の同様の要素は、同一の参照符合を有し、図51の他の態様を不明瞭にするのを避けるために、図50の特定の態様は、図51から省略されている。
図51は、プロセッサ5070、5080が統合メモリおよびI/O制御ロジック(「CL」)5072および5082をそれぞれ含み得ることを示す。よって、CL 5072、5082は、統合メモリコントローラユニットを含み、I/O制御ロジックを含む。図51は、メモリ5032、5034のみがCL 5072、5082に結合されているのではなく、I/Oデバイス5114も制御ロジック5072、5082に結合されていることを示す。レガシI/Oデバイス5115は、チップセット5090に結合される。
ここで図52を参照すると、本発明の一実施形態によるSoC5200のブロック図が示されている。図36における類似の要素は、同一の参照符合を有する。また、破線のボックスは、より高度なSoCの任意の特徴である。図52において、相互接続ユニット(単数または複数)5202は、キャッシュユニット3604A〜Nを含む1つまたは複数のコア3602A〜Nのセットおよび共有キャッシュユニット3606を含むアプリケーションプロセッサ5210と、システムエージェントユニット3610と、バスコントローラユニット(単数または複数)3616と、統合メモリコントローラユニット(単数または複数)3614と、統合グラフィックロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサ、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、セキュリティコプロセッサ、高スループットMICプロセッサ、GPGPUのコプロセッサ、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワークアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含み得る1つまたは複数のコプロセッサ5220のセットと、スタティックランダムアクセスメモリ(SRAM)ユニット5230と、ダイレクトメモリアクセス(DMA)ユニット5232と、1つまたは複数の外部ディスプレイに結合するためのディスプレイユニット5240と、に結合される。1つの実施形態では、コプロセッサ(単数または複数)5220は、例えば、ネットワークプロセッサもしくは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサなどの専用プロセッサを含む。
本明細書に開示されるメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装手法の組み合わせで実装され得る。
本発明の実施形態は、例えば、汎用プロセッサ、サーバプロセッサもしくはサーバ環境で使用するための処理要素、コプロセッサ(例えば、セキュリティコプロセッサ)、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット、暗号化アクセラレータ、固定機能アクセラレータ、機械学習アクセラレータ、ネットワーキングアクセラレータ、またはコンピュータビジョンアクセラレータなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサもしくは処理装置を含む少なくとも1つのプロセッサと、ストレージシステム(揮発性および不揮発性メモリ、ならびに/またはストレージ要素を含む)と、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスと、を備える、プログラマブルシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装され得る。
図50に示されるコード5030などのプログラムコードは、本明細書で説明される機能を実行して出力情報を生成するために、入力命令に適用され得る。出力情報は、既知の様式で1つまたは複数の出力装置に適用され得る。本出願の目的のために、処理システムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、高水準手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装されて、処理システムと通信し得る。所望であれば、プログラムコードは、アセンブリ言語または機械語でも実装され得る。実際には、本明細書で説明されるメカニズムは、範囲においていずれの特定のプログラミング言語にも限定されない。いずれの場合においても、言語は、コンパイル型言語またはインタープリタ型言語であってもよい。
少なくとも1つの実施形態の1つまたは複数の態様は、プロセッサ内の様々なロジックを表す、機械可読媒体上に格納された表現する命令により実装され得、命令は、機械により読み出されると、その機械に本明細書で説明される技法を実行するためのロジックを生成させる。「IPコア」として知られるそのような表現は、有形の機械可読媒体上に格納され、様々な顧客または製造設備に供給され、ロジックまたはプロセッサを実際に作成する製造機械にロードされ得る。
そのような機械可読記憶媒体としては、ハードディスクなどのストレージ媒体、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、および光磁気ディスクを含む任意の他のタイプのディスク、読み出し専用メモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブル読み出し専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブル読み出し専用メモリ(EEPROM)、相変化メモリ(PCM)などの半導体デバイス、磁気もしくは光カード、または電子命令を格納するのに好適な任意の他のタイプの媒体を含む、機械またはデバイスにより製造または形成される、非一時的で有形な構成の物品を挙げることができるが、これらに限定されない。
従って、本発明の実施形態は、命令を含む、または本明細書で説明される構造、回路、装置、プロセッサ、および/またはシステム機能を定義するハードウェア記述言語(HDL)などの設計データを含む、非一時的で有形の機械可読媒体も含む。そのような実施形態は、プログラム製品とも呼ばれ得る。
本発明の実施形態によるプロセッサコアによって実行される命令は、以下に詳述する「汎用ベクトルフレンドリ命令フォーマット」で実施され得る。他の実施形態では、そのようなフォーマットは利用されず、別の命令フォーマットが使用されるが、書き込みマスクレジスタ、様々なデータ変換(スウィズル、ブロードキャストなど)、アドレッシングなどの以下の説明は、一般に上記の命令(単数または複数)の実施形態の説明に適用され得る。加えて、例示的なシステム、アーキテクチャ、およびパイプラインを以下に詳述する。命令は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行することができるが、詳述されるものに限定されない。
命令セット
命令セットは、1つまたは複数の命令フォーマットを含み得る。特定の命令フォーマットは、とりわけ、実行されるオペレーション(例えば、オペコード)ならびにその演算が実行されるオペランド(単数または複数)および/または他のデータフィールド(単数または複数)(例えば、マスク)を指定するための様々なフィールド(例えば、ビット数、ビット位置)を定義し得る。一部の命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義を通して、さらに細分化されている。例えば、特定の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてもよく(含まれるフィールドは、典型的には、同一順序であるが、少なくとも一部は、含まれるフィールドの数がより少ないために、異なるビット位置を有する)、および/または、異なって解釈される特定のフィールドを有するように定義されてもよい。よって、ISAの各命令は、特定の命令フォーマットを使用して(また、定義される場合には、その命令フォーマットの命令テンプレートのうちの特定の1つにおいて)表現され、オペレーションおよびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコードならびにそのオペコードを指定するためのオペコードフィールドおよびオペランド(ソース1/デスティネーションおよびソース2)を選択するためのオペランドフィールドを含む命令フォーマットを有し、命令ストリーム内にこのADD命令が発生すると、特定のオペランドを選択するオペランドフィールド内に特定の内容を有することになる。アドバンストベクトル拡張(AVX、AVX2、およびAVX−512)と称され、ベクトル拡張(VEX)コーディングスキームを使用する、SIMD拡張のセットが、リリースおよび/または公開されている(例えば、2014年9月のインテル(登録商標)64 and IA−32 Architectures Software Developer's Manual、2014年10月のインテル(登録商標)Advanced Vector Extensions Programming Reference、ならびに2016年10月のインテル(登録商標)Architecture Instruction Set Extensions Programming Referenceを参照)。
例示的な命令フォーマット
本明細書で説明される命令(単数または複数)の実施形態は、異なるフォーマットで実施され得る。加えて、例示的なシステム、アーキテクチャ、およびパイプラインを以下に詳述する。命令(単数または複数)の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行することができるが、詳述されるものに限定されない。
汎用ベクトルフレンドリ命令フォーマット
ベクトルフレンドリ命令フォーマットは、ベクトル命令に適した命令フォーマットである(例えば、ベクトル演算に特有の特定のフィールドが存在する)。ベクトルフレンドリ命令フォーマットを介してベクトル演算とスカラ演算との双方がサポートされる実施形態を説明するが、代替的な実施形態はベクトルフレンドリ命令フォーマットを介してベクトル演算のみを使用する。
図53A〜図53Bは、本発明の実施形態によるジェネリックベクトルフレンドリ命令フォーマットおよびその命令テンプレートを示すブロック図である。図53Aは、本発明の実施形態によるジェネリックベクトルフレンドリ命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図であり、図53Bは、本発明の実施形態によるジェネリックベクトルフレンドリ命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。
具体的には、汎用ベクトルフレンドリ命令フォーマット5300に対し、クラスA命令テンプレートおよびクラスB命令テンプレートが定義され、クラスA命令テンプレートおよびクラスB命令テンプレートは両方とも、メモリアクセスなし5305命令テンプレートおよびメモリアクセス5320命令テンプレートを含む。ベクトルフレンドリ命令フォーマットの文脈における汎用(generic)いう用語は、いかなる具体的な命令セットにも関連付けられない命令フォーマットを指す。
以下に説明する本発明の実施形態において、ベクトルフレンドリ命令フォーマットがサポートするのは、32ビット(4バイト)もしくは64ビット(8バイト)のデータ要素幅(すなわちサイズ)を有する64バイトのベクトルオペランド長(すなわちサイズ)(従って、64バイトのベクトルは16個の2倍長ワードサイズの要素もしくは8個の4倍長ワードサイズの要素で構成される)と、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バイトのベクトルオペランド)をサポートしてもよい。
図53AのクラスA命令テンプレートは、1)メモリアクセスなし5305命令テンプレート内に示された、メモリアクセスなし全丸め制御型オペレーション5310命令テンプレートおよびメモリアクセスなしデータ変換型オペレーション5315命令テンプレートと、2)メモリアクセス5320命令テンプレート内に示された、メモリアクセス一時5325命令テンプレートおよびメモリアクセス非一時5330命令テンプレートと、を含んでいる。図53BのクラスB命令テンプレートは、1)メモリアクセスなし5305命令テンプレート内に示された、メモリアクセスなし書き込みマスク制御部分丸め制御型オペレーション5312命令テンプレートおよびメモリアクセスなし書き込みマスク制御vサイズ(vsize)型オペレーション5317命令テンプレートと、2)メモリアクセス5320命令テンプレート内に示された、メモリアクセス書き込みマスク制御5327命令テンプレートと、を含んでいる。
汎用ベクトルフレンドリ命令フォーマット5300は、図53A〜図53Bに示す順序で以下に挙げるフィールドを含む。
フォーマットフィールド5340−このフィールド内の具体的な値(命令フォーマット識別子の値)は、ベクトルフレンドリ命令フォーマット、ひいては、命令ストリーム内でのベクトルフレンドリ命令フォーマットの命令の出現を一意に識別する。そのため、このフィールドは、汎用ベクトルフレンドリ命令フォーマットのみを有する命令セットには不要であるという意味において任意である。
ベースオペレーションフィールド5342−その内容が、異なるベースオペレーションを識別する。
レジスタインデックスフィールド5344−その内容が、直接またはアドレス生成を介して、レジスタ内であってもメモリ内であってもソースオペランドおよびデスティネーションオペランドの場所を指定する。これらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)レジスタファイルからN個のレジスタを選択するための十分なビット数を含む。1つの実施形態において、Nは最大3つのソースレジスタおよび1つのデスティネーションレジスタであり得るが、代替的な実施形態は、それより多いまたは少ないソースレジスタおよびデスティネーションレジスタをサポートし得る(例えば、最大2つのソースをサポートし、これらのソースのうちの1つがデスティネーションとしても動作してもよいし、最大3つのソースをサポートし、これらのソースのうちの1つがデスティネーションとしても動作してもよいし、最大2つのソースおよび1つのデスティネーションをサポートしてもよい)。
修飾子フィールド5346−その内容が、汎用ベクトル命令フォーマットにおける、メモリアクセスを指定する命令の出現を、メモリアクセスを指定しないものから識別する、すなわち、メモリアクセスなし5305命令テンプレートとメモリアクセス5320命令テンプレートとを識別する。メモリアクセスオペレーションはメモリ階層に対し、読み出しおよび/または書き込みを行う(場合によっては、レジスタ内の値を使用してソースアドレスおよび/またはデスティネーションアドレスを指定する)が、メモリアクセスなしオペレーションはそれを行わない(例えば、ソースおよびデスティネーションはレジスタである)。1つの実施形態では、このフィールドはまた、メモリアドレス計算を実行するための3つの異なる方法の中で選択をする一方で、代替的な実施形態は、メモリアドレス計算を実行するためのより多い、より少ないまたは異なる方法をサポートしてもよい。
拡張オペレーションフィールド5350−その内容が、ベース演算に加え、様々な異なるオペレーションのうちどれが実行されるべきかを識別する。このフィールドは、コンテキスト固有である。本発明の1つの実施形態において、このフィールドは、クラスフィールド5368、アルファフィールド5352およびベータフィールド5354に分割される。拡張オペレーションフィールド5350は、2つ、3つ、または4つの命令ではなく、単一の命令において共通のオペレーショングループが実行されることを可能にする。
スケールフィールド5360−その内容が、メモリアドレス生成(例えば、2スケール*インデックス+ベースを使用するアドレス生成について)のためのインデックスフィールドの内容のスケーリングを可能にする。
変位フィールド5362A−その内容が、メモリアドレス生成(例えば、2スケール*インデックス+ベース+変位を使用するアドレス生成について)の一部として使用される。
変位係数フィールド5362B(変位係数フィールド5362B上に直接、変位フィールド5362Aが並置されていることで、一方または他方が使用されることを示すことに留意されたい)−その内容が、アドレス生成の一部として使用され、メモリアクセスのサイズ(N)によってスケーリングされるべき変位係数を指定し、Nは、メモリアクセス(例えば、2スケール*インデックス+ベース+スケールされた変位を使用するアドレス生成について)におけるバイト数である。冗長下位ビットは無視され、従って、変位係数フィールドの内容は、有効アドレスの計算に使用される最終的な変位を生成するために、メモリオペランドの合計サイズ(N)によって乗算される。Nの値は、フルオペコードフィールド5374(本明細書で後述)およびデータ操作フィールド5354Cに基づいて、ランタイムでプロセッサハードウェアによって判定される。変位フィールド5362Aおよび変位係数フィールド5362Bは、それらがメモリアクセスなし5305命令テンプレートには使用されない、および/または、異なる実施形態がそれら2つのうちの一方のみを実装してよい、またはいずれも実装しなくてよいという意味において任意である。
データ要素幅フィールド5364−その内容が、(一部の実施形態では、すべての命令に対し、他の実施形態では、命令の一部のみに対し)複数のデータ要素幅のうちどれが使用されるべきかを識別する。1つのデータ要素幅のみがサポートされる、および/または、オペコードのいくつかの態様を使用して複数のデータ要素幅がサポートされる場合、このフィールドは不要であるという意味において、このフィールドは任意である。
書き込みマスクフィールド5370−その内容が、データ要素位置単位で、デスティネーションベクトルオペランド内のそのデータ要素位置が、ベースオペレーションおよび拡張オペレーションの結果を反映するか否かを制御する。クラスA命令テンプレートは、マージ−書き込みマスクをサポートする一方で、クラスB命令テンプレートは、マージ−書き込みマスクおよびゼロ化−書き込みマスクの両方をサポートする。マージの場合、ベクトルマスクは、(ベースオペレーションおよび拡張オペレーションによって指定される)任意のオペレーションの実行中、デスティネーション内のあらゆる要素セットが更新されないように保護されることを可能にし、他の1つの実施形態では、対応するマスクビットが0を有する場合、デスティネーションの各要素の古い値が保持される。これとは対照的に、ゼロ化の場合、ベクトルマスクは、(ベースオペレーションおよび拡張オペレーションによって指定される)任意のオペレーションの実行中、デスティネーション内のあらゆる要素セットがゼロ化されることを可能にし、1つの実施形態では、対応するマスクビットが0値を有する場合、デスティネーションの要素は0に設定される。この機能のサブセットは、実行されるオペレーションのベクトル長(すなわち、要素のスパンが第1のものから最後のものへと修正される)を制御できるが、修正される要素が連続的である必要はない。よって、書き込みマスクフィールド5370は、ロード、ストア、算術、論理等を含む部分的なベクトル演算を可能にする。書き込みマスクフィールド5370の内容が、複数の書き込みマスクレジスタのうち使用されるべき書き込みマスクを含むものを選択(従って、書き込みマスクフィールド5370の内容は、実行されるべきマスキングを間接的に識別する)する、本発明の実施形態が説明されているが、代替的な実施形態は、代替的または追加的に、マスク書き込みフィールド5370の内容が、実行されるべきマスキングを直接指定することを可能にする。
即値フィールド5372−その内容が、即値の指定を可能にする。このフィールドは即値をサポートしない汎用ベクトルフレンドリフォーマットの実装には存在せず、このフィールドは即値を使用しない命令内には存在しないという意味において、このフィールドは、任意である。
クラスフィールド5368−その内容が、異なるクラスの命令間を識別する。図53Aおよび図53Bを参照すると、このフィールドの内容が、クラスA命令とクラスB命令との間で選択する。図53Aおよび図53B中、特定値がフィールド内に存在することを示すために、隅が丸められた四角が使用されている(例えば、図53Aおよび図53B中、クラスフィールド5368に対し、それぞれクラスA 5368AおよびクラスB 5368B)。
クラスAの命令テンプレート
クラスAのメモリアクセスなし5305命令テンプレートの場合、アルファフィールド5352はRSフィールド5352Aとして解釈され、RSフィールド5352Aの内容が、異なる拡張オペレーションタイプのうちどれが実行されるべきか(例えば、丸め5352A.1およびデータ変換5352A.2がそれぞれ、メモリアクセスなし丸め型オペレーション5310命令テンプレートおよびメモリアクセスなしデータ変換型オペレーション5315命令テンプレートに対し指定される)を識別する一方で、ベータフィールド5354は指定されるタイプのオペレーションのうちどれが実行されるべきかを識別する。メモリアクセスなし5305命令テンプレートには、スケールフィールド5360、変位フィールド5362A、および変位スケールフィールド5362Bは存在しない。
メモリアクセスなし命令テンプレート−全丸め制御型オペレーション
メモリアクセスなしの全丸め制御型オペレーション5310命令テンプレートでは、ベータフィールド5354は、丸め制御フィールド5354Aとして解釈され、丸め制御フィールド5354Aの内容は静的丸めを提供する。説明されている本発明の実施形態では、丸め制御フィールド5354Aは、全浮動小数点例外抑制(suppress all floating point exceptions、SAE)フィールド5356および丸め演算制御フィールド5358を含むが、代替的な実施形態は、これらのコンセプトの両方を同じフィールドに符号化することができる、またはこれらのコンセプト/フィールドのうちの一方もしくは他方のみを有することができる(例えば、丸め演算制御フィールド5358のみを有することができる)。
SAEフィールド5356−その内容は例外イベント報告を無効にするか否かを識別する。SAEフィールド5356の内容が、抑制が有効であることを示す場合、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、かついかなる浮動小数点例外ハンドラも起動させない。
丸め演算制御フィールド5358−その内容は、丸め演算のグループのうちのどれ(例えば、切り上げ、切り捨て、ゼロへの丸め、最近接への丸め)を実行するかを識別する。よって、丸め演算制御フィールド5358は、命令ごとの丸めモードの変更を可能にする。プロセッサが丸めモードを指定する制御レジスタを含む本発明の1つの実施形態では、丸め演算制御フィールドの5350の内容はそのレジスタ値をオーバーライドする。
メモリアクセスなし命令テンプレート−データ変換型オペレーション
メモリアクセスなしデータ変換型オペレーション5315命令テンプレートでは、ベータフィールド5354は、データ変換フィールド5354Bとして解釈され、データ変換フィールド5354Bの内容は、複数のデータ変換(例えば、データ変換なし、スウィズル(swizzle)、ブロードキャスト)のうちのどれが実行されるべきかを識別する。
クラスAのメモリアクセス5320命令テンプレートでは、アルファフィールド5352は、エビクションヒント(eviction hint)フィールド5352Bとして解釈され、その内容は、エビクションヒントのうちのどれが使用されるべきかを識別する(図53Aでは、一時5352B.1および非一時5352B.2がそれぞれ、メモリアクセス、一時5325命令テンプレートおよびメモリアクセス、非一時5330命令テンプレートに対して指定される)。一方で、ベータフィールド5354は、データ操作フィールド5354Cとして解釈され、その内容は、複数のデータ操作オペレーション(プリミティブとしても知られる)のうちのどれ(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)が実行されるべきかを識別する。メモリアクセス5320命令テンプレートは、スケールフィールド5360、ならびに場合により、変位フィールド5362Aまたは変位スケールフィールド5362Bを含む。
ベクトルメモリ命令は、変換サポートを使用して、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素単位の様式でメモリからのデータ/メモリへのデータを転送し、実際に転送される要素は、書き込みマスクとして選択されるベクトルマスクの内容により規定される。
メモリアクセス命令テンプレート−一時
一時データは、キャッシュすることから恩恵を得るのに十分に速やかに再利用される可能性が高いデータである。しかしながら、これはヒントであり、様々なプロセッサが、そのヒントを完全に無視することを含めて、それを様々な方法で実装することができる。
メモリアクセス命令テンプレート−非一時
非一時データは、第1のレベルのキャッシュにおいて、キャッシュすることから恩恵を得るのに十分に速やかに再利用される可能性が低いデータであり、エビクションが優先されるべきである。しかしながら、これはヒントであり、様々なプロセッサが、そのヒントを完全に無視することを含めて、それを様々な方法で実装することができる。
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド5352は、書き込みマスク制御(Z)フィールド5352Cとして解釈され、その内容は、書き込みマスクフィールド5370により制御される書き込みマスキングがマージであるべきかまたはゼロ化であるべきかを識別する。
クラスBのメモリアクセスなし5305命令テンプレートの場合、ベータフィールド5354の一部はRLフィールド5357Aとして解釈され、その内容は、様々な拡張オペレーション型のうちのどれが実行されるべきかを識別する(例えば、丸め5357A.1およびベクトル長(VSIZE)5357A.2がそれぞれ、メモリアクセスなし書き込みマスク制御、部分丸め制御型オペレーション5312命令テンプレートおよびメモリアクセスなし書き込みマスク制御、VSIZE型オペレーション5317命令テンプレートに対して指定される)一方で、ベータフィールド5354の残りは、指定された型のオペレーションのうちのどれが実行されるべきかを識別する。メモリアクセスなし5305命令テンプレートには、スケールフィールド5360、変位フィールド5362A、および変位スケールフィールド5362Bは存在しない。
メモリアクセスなし書き込みマスク制御、部分丸め制御型オペレーション5310命令テンプレートでは、残りのベータフィールド5354は、丸め演算フィールド5359Aとして解釈され、例外イベント報告が無効化される(所与の命令がいかなる種類の浮動小数点例外フラグも報告せず、かついかなる浮動小数点例外ハンドラも起動させない)。
丸め演算制御フィールド5359A−丸め演算制御フィールド5358と同様に、その内容は、丸め演算のグループのうちのどれ(例えば、切り上げ、切り捨て、ゼロへの丸め、最近接への丸め)を実行するかを識別する。よって、丸め演算制御フィールド5359Aは、命令ごとの丸めモードの変更を可能にする。プロセッサが丸めモードを指定する制御レジスタを含む本発明の1つの実施形態では、丸め演算制御フィールドの5350の内容はそのレジスタ値をオーバーライドする。
メモリアクセスなし書き込みマスク制御、VSIZE型オペレーション5317命令テンプレートでは、残りのベータフィールド5354は、ベクトル長フィールド5359Bとして解釈され、その内容は、複数のデータベクトル長のうちのどれ(例えば、128、256、または512バイト)が実行されるべきかを識別する。
クラスBのメモリアクセス5320命令テンプレートの場合、ベータフィールド5354の一部は、ブロードキャストフィールド5357Bとして解釈され、その内容は、ブロードキャスト型データ操作オペレーションが実行されるべきか否かを識別するが、残りのベータフィールド5354は、ベクトル長フィールド5359Bとして解釈される。メモリアクセス5320命令テンプレートは、スケールフィールド5360、ならびに場合により、変位フィールド5362Aまたは変位スケールフィールド5362Bを含む。
汎用ベクトルフレンドリ命令フォーマット5300に関連して、フォーマットフィールド5340、基本オペレーションフィールド5342、およびデータ要素幅フィールド5364を含むフルオペコードフィールド5374が示される。フルオペコードフィールド5374がこれらのフィールドのすべてを含む1つの実施形態が示されているが、それらのすべてをサポートしない実施形態では、フルオペコードフィールド5374は、これらのフィールドのうち、すべてより少ないフィールドを含む。フルオペコードフィールド5374はオペレーションコード(オペコード)を提供する。
拡張オペレーションフィールド5350、データ要素幅フィールド5364、および書き込みマスクフィールド5370は、汎用ベクトルフレンドリ命令フォーマットにおいてこれらの機能が命令ごとに指定されることを可能にする。
書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、それらが様々なデータ要素幅に基づいてマスクが適用されることを可能にするという点で、型付き命令を生成する。
クラスAおよびクラスB内に見られる様々な命令テンプレートは様々な状況で有益である。本発明の一部の実施形態では、様々なプロセッサまたはプロセッサ内の様々なコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートすることができる。例えば、汎用計算向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートすることができ、主にグラフィックおよび/または科学技術計算(スループット)計算向けのコアはクラスAのみをサポートすることができ、両方向けのコアは両方をサポートすることができる(当然のことながら、両方のクラスからのテンプレートおよび命令の一部の混合を有しているが、両方のクラスからのすべてのテンプレートおよび命令を有するわけではないコアは、本発明の範囲内である)。また、単一のプロセッサは複数のコアを含むことができ、コアのすべては同じクラスをサポートする、または、異なるコアは異なるクラスをサポートする。例えば、別個のグラフィックコアおよび汎用コアを有するプロセッサにおいて、主にグラフィックおよび/または科学技術計算向けのグラフィックコアのうちの1つは、クラスAのみをサポートすることができるが、汎用コアのうちの1つまたは複数は、クラスBのみをサポートする汎用計算向けの、アウトオブオーダ実行およびレジスタリネーミングを有する高性能汎用コアとすることができる。別個のグラフィックスコアを持たない別のプロセッサは、クラスAおよびクラスBの両方をサポートするもう1つの汎用インオーダまたはアウトオブオーダコアを含むことができる。当然のことながら、1つのクラスからの機能はまた、本発明の様々な実施形態において、他のクラスに実装され得る。高級言語で記述されるプログラムは、1)実行のために対象プロセッサによってサポートされるクラス(単数または複数)の命令のみを有する形式、または2)全クラスの命令の様々な組み合わせを使用して記述される代替的なルーチンを有し、コードを現在実行しているプロセッサによってサポートされる命令に基づいて実行するためにルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能な形式にされる(例えば、ジャストインタイムでコンパイルされるまたは静的にコンパイルされる)。
例示的な具体的なベクトルフレンドリ命令フォーマット
図54Aは、本発明の実施形態による例示的な具体的なベクトルフレンドリ命令フォーマットを示すブロック図である。図54Aは、フィールドの場所、サイズ、解釈、および順序、ならびにそれらのフィールドのうちの一部の値を指定するという意味で具体的である具体的なベクトルフレンドリ命令フォーマット5400を示す。具体的なベクトルフレンドリ命令フォーマット5400は、x86命令セットを拡張するのに使用することができ、従って、フィールドの一部は、既存のx86命令セットおよびそれらの拡張(例えば、AVX)に使用されるものと同様または同じである。このフォーマットは、拡張を有する既存のx86命令セットのプレフィックス符号化フィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドとの一貫性を維持する。図54Aのフィールドが対応付ける図53A〜図53Bのフィールドが示されている。
本発明の実施形態が、例示的な目的で汎用ベクトルフレンドリ命令フォーマット5300の文脈で、具体的なベクトルフレンドリ命令フォーマット5400に関連して説明されているが、本発明は、特許請求の範囲を除き、具体的なベクトルフレンドリ命令フォーマット5400に限定されるものではないことを理解されたい。例えば、汎用ベクトルフレンドリ命令フォーマット5300は、様々なフィールドについて様々な可能なサイズを意図しているが、具体的なベクトルフレンドリ命令フォーマット5400は特定のサイズのフィールドを有するものとして示されている。具体的な例として、データ要素幅フィールド5364は具体的なベクトルフレンドリ命令フォーマット5400で1ビットフィールドとして示されるが、本発明はそのように限定されるものではない(つまり、汎用ベクトルフレンドリ命令フォーマット5300はデータ要素幅フィールド5364の他のサイズを企図している)。
汎用ベクトルフレンドリ命令フォーマット5300は、図54Aに示す順序で以下に挙げるフィールドを含む。
EVEXプレフィックス(バイト0〜3)5402−4バイトの形式で符号化される。
フォーマットフィールド5340(EVEXバイト0、ビット[7:0])− 第1のバイト(EVEXバイト0)はフォーマットフィールド5340であり、0x62(本発明の1つの実施形態では、ベクトルフレンドリ命令フォーマットを識別するために使用される固有の値)を保持する。
第2〜第4のバイト(EVEXバイト1〜3)は、特定の機能を提供する複数のビットフィールドを含む。
REXフィールド5405(EVEXバイト1、ビット[7〜5])−EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)、および5357BEXバイト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'フィールド5310−これは、REX'フィールド5310の第1の部分であり、拡張32レジスタセットの上位16または下位16のいずれかを符号化するのに使用されるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本発明の1つの実施形態では、このビットは、以下に示されるように他のものと共に、BOUND命令から(周知のx86の32ビットモードで)区別するために、ビット反転形式で格納され、そのリアルオペコードバイトは、62であるが、(以下に説明される)MOD R/MフィールドにおいてMODフィールドにおける11の値を受け入れず、本発明の代替的な実施形態は、これおよび以下に示される他のビットを反転形式で格納しない。1の値は下位16のレジスタを符号化するのに使用される。換言すれば、R'Rrrrは、EVEX.R'、EVEX.R、および他のフィールドからの他のRRRを組み合わせて形成される。
オペコードマップフィールド5415(EVEXバイト1、ビット[3:0]−mmmm)−その内容は、黙示される先頭のオペコードバイト(0F、0F 38、または0F 3)を符号化する。
データ要素幅フィールド5364(EVEXバイト2、ビット[7]−W)−EVEX.Wという表記によって表される。EVEX.Wは、データ型(32ビットのデータ要素または64ビットのデータ要素のいずれか)の粒度(サイズ)を定義するのに使用される。
EVEX.vvvv 5420(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は、1)EVEX.vvvvは、反転(1の補数)の形式で指定される第1のソースレジスタオペランドを符号化し、2つ以上のソースオペランドを有する命令に有効であること、2)EVEX.vvvvは、特定のベクトルシフトに対して1の補数形式で指定されるデスティネーションレジスタオペランドを符号化すること、または、3)EVEX.vvvvはいかなるオペランドも符号化せず、フィールドはリザーブされ、1111bを保持すべきであること、を含むことができる。よって、EVEX.vvvvフィールド5420は、反転(1の補数)形式で格納される第1のソースレジスタ指定子の4つの下位ビットを符号化する。命令に応じて、追加の異なるEVEXビットフィールドが指定子サイズを32レジスタに拡張するのに使用される。
EVEX.U 5368クラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.U=0の場合、クラスAまたはEVEX.U0を示し、EVEX.U=1の場合、クラスBまたはEVEX.U1を示す。
プレフィックス符号化フィールド5425(EVEXバイト2、ビット[1:0]−pp)−基本オペレーションフィールドに対して追加のビットを提供する。EVEXプレフィックスフォーマットでのレガシSSE命令に対するサポートを提供することに加えて、これは、SIMDプレフィックスをコンパクトにするという利点も有する(SIMDプレフィックスを表すのに1バイトを必要とするのではなく、EVEXプレフィックスは、2ビットのみを必要とする)。1つの実施形態では、レガシフォーマットおよびEVEXプレフィックスフォーマットの両方でのSIMDプレフィックス(66H、F2H、F3H)を使用するレガシSSE命令をサポートするために、これらのレガシSIMDプレフィックスは、SIMDプレフィックス符号化フィールドに符号化され、デコーダのPLAに提供される前にランタイム時にレガシSIMDプレフィックスに拡張される(それにより、PLAは、修正せずにこれらのレガシ命令のレガシおよびEVEXフォーマットの両方を実行することができる)。より新たな命令は、EVEXプレフィックス符号化フィールドの内容をオペコード拡張として直接使用することができるが、特定の実施形態は、一貫性のために同様の様式で拡張されるが、これらのレガシSIMDプレフィックスにより異なる意味が指定されることを可能にする。代替的な実施形態は、2ビットSIMDプレフィックス符号化をサポートし、従って、拡張を必要としないようにPLAを再設計することができる。
アルファフィールド5352(EVEXバイト3、ビット[7]−EH、また、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.書き込みマスク制御、およびEVEX.Nとしても知られ、αで示される)−前述のように、このフィールドは、コンテキスト固有である。
ベータフィールド5354(EVEXバイト3、ビット[6:4]−SSS、また、EVEX.s2−0、EVEX.r2−0、EVEX.rrl、EVEX.LL0、EVEX.LLBとしても知られ、βββで示される)−前述のように、このフィールドはコンテキスト固有である。
REX'フィールド5310−これは、REX'フィールドの残りの部分であり、拡張32レジスタセットの上位16または下位16のいずれかを符号化するのに使用され得るEVEX.Vビットフィールド(EVEXバイト3、ビット[3]−V)である。このビットはビット反転形式で格納される。1の値は下位16のレジスタを符号化するのに使用される。換言すれば、V'VVVVは、EVEX.V'、EVEX.vvvvを組み合わせることによって形成される。
書き込みマスクフィールド5370(EVEXバイト3、ビット[2:0]−kkk)−前述のように、その内容は、書き込みマスクレジスタにおけるレジスタのインデックスを指定する。本発明の1つの実施形態では、特定の値EVEX.kkk=000は、書き込みマスクが特定の命令に対して使用されないことを示唆する特定の動作を有する(これは、すべて1に配線された書き込みマスクまたはマスクするハードウェアを迂回するハードウェアの使用を含む様々な方式で実装され得る)。
リアルオペコードフィールド5430(バイト4)は、オペコードバイトとしても知られている。オペコードの一部はこのフィールドにおいて指定される。
MOD R/Mフィールド5440(バイト5)は、MODフィールド5442、Regフィールド5444、およびR/Mフィールド5446を含む。上述のように、MODフィールド5442の内容は、メモリアクセスオペレーションとメモリアクセスなしオペレーションとを区別する。Regフィールド5444の役割は、デスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化すること、または、オペコード拡張として扱われ、いずれの命令オペランドを符号化するのにも使用されないことという2つの状況に要約され得る。R/Mフィールド5446の役割は、メモリアドレスを参照する命令オペランドを符号化すること、または、デスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかを符号化することを含むことができる。
スケール、インデックス、ベース(SIB)バイト(バイト6)−上述のように、スケールフィールド5350の内容は、メモリアドレス生成に使用される。SIB.xxx 5454およびSIB.bbb 5456−これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関連して以前に言及されている。
変位フィールド5362A(バイト7〜10)−MODフィールド5442が10を保持する場合、バイト7〜10は変位フィールド5362Aであり、レガシ32ビット変位(disp32)と同じように機能し、バイト粒度で機能する。
変位係数フィールド5362B(バイト7)−MODフィールド5442が01を保持する場合、バイト7は変位係数フィールド5362Bである。このフィールドの場所は、バイト粒度で機能するレガシx86命令セット8ビット変位(disp8)の場所と同じである。disp8は符号拡張されているので、−128から127バイトのオフセットの間のみでアドレス指定することができる。64バイトのキャッシュラインに関して、disp8は、実際に有用な4つの値、すなわち、−128、−64、0、および64のみに設定可能な8ビットを使用する。より広い範囲が必要とされることが多いので、disp32が使用される。しかしながら、disp32は、4バイトを必要とする。disp8およびdisp32とは対照的に、変位係数フィールド5362Bは、disp8の再解釈であり、変位係数フィールド5362Bを使用する場合、実際の変位は、変位係数フィールドの内容にメモリオペランドアクセスのサイズ(N)を乗算することにより決定される。このタイプの変位は、disp8*Nと呼ばれる。これは、平均命令長(変位に使用されるが、はるかに大きい範囲を有する単一のバイト)を低減させる。そのような圧縮された変位は、有効変位がメモリアクセスの粒度の倍数であるという前提に基づくものであり、従って、アドレスオフセットの冗長下位ビットは符号化される必要はない。換言すれば、変位係数フィールド5362Bは、レガシx86命令セット8ビット変位の代わりとなる。よって、変位係数フィールド5362Bは、disp8がdisp8*Nに多重定義されることを唯一の例外として、x86命令セット8ビット変位と同じ方式で符号化される(そのため、ModRM/SIB符号化規則において変更はない)。換言すれば、符号化規則または符号化長に変更はないが、ハードウェアによる変位値の解釈にのみ変更がある(ハードウェアは、バイト単位のアドレスオフセットを得るために、メモリオペランドのサイズにより変位をスケーリングする必要がある)。即値フィールド5372は上述のように作用する。
フルオペコードフィールド
図54Bは、本発明の1つの実施形態による、opコードフィールド全体5374を作り上げる具体的なベクトルフレンドリ命令フォーマット5400のフィールドを示すブロック図である。具体的には、フルオペコードフィールド5374は、フォーマットフィールド5340、基本オペレーションフィールド5342、およびデータ要素幅(W)フィールド5364を含む。基本オペレーションフィールド5342は、プレフィックス符号化フィールド5425、オペコードマップフィールド5415、およびリアルオペコードフィールド5430を含む。
レジスタインデックスフィールド
図54Cは、本発明の1つの実施形態による、レジスタインデックスフィールド5344を作り上げる具体的なベクトルフレンドリ命令フォーマット5400のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド5344は、REXフィールド5405、REX'フィールド5410、MODR/M.regフィールド5444、MODR/M.r/mフィールド5446、VVVVフィールド5420、xxxフィールド5454、およびbbbフィールド5456を含む。
拡張オペレーションフィールド
図54Dは、本発明の1つの実施形態による、拡張オペレーションフィールド5350を作り上げる具体的なベクトルフレンドリ命令フォーマット5400のフィールドを示すブロック図である。クラス(U)フィールド5368は、0を含む場合、EVEX.U0(クラスA 5368A)を表し、1を含む場合、EVEX.U1(クラスB 5368B)を表す。
U=0であり、MODフィールド5442が11を含む(メモリアクセスなしオペレーションを表す)場合、アルファフィールド5352(EVEXバイト3、ビット[7]−EH)はrsフィールド5352Aとして解釈される。rsフィールド5352Aが1を含む場合(丸め5352A.1)、ベータフィールド5354(EVEXバイト3、ビット[6:4]−SSS)は、丸め制御フィールド5354Aとして解釈される。丸め制御フィールド5354Aは、1ビットのSAEフィールド5356および2ビットの丸め演算フィールド5358を含む。rsフィールド5352Aが0を含む場合(データ変換5352A.2)、ベータフィールド5354(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ変換フィールド5354Bとして解釈される。U=0であり、MODフィールド5442が00、01、または10を含む(メモリアクセスオペレーションを表す)場合、アルファフィールド5352(EVEXバイト3、ビット[7]−EH)は、エビクションヒント(EH)フィールド5352Bとして解釈され、ベータフィールド5354(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド5354Cとして解釈される。
U=1の場合、アルファフィールド5352(EVEXバイト3、ビット[7]−EH)は書き込みマスク制御(Z)フィールド5352Cとして解釈される。U=1であり、MODフィールド5442が11を含む(メモリアクセスなしオペレーションを表す)場合、ベータフィールド5354(EVEXバイト3、ビット[4]−S0)の一部は、RLフィールド5357Aとして解釈され、フィールド5357Aが1を含む場合(丸め5357A.1)、残りのベータフィールド5354(EVEXバイト3、ビット[6−5]−S2−1)は丸め演算フィールド5359Aとして解釈される一方で、RLフィールド5357Aが0を含む場合(VSIZE 5357.A2)、残りのベータフィールド5354(EVEXバイト3、ビット[6−5]−S2−1)は、ベクトル長フィールド5359B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。U=1であり、MODフィールド5442が00、01、または10を含む(メモリアクセスオペレーションを表す)場合、ベータフィールド5354(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド5359B(EVEXバイト3、ビット[6−5]−L1−0)およびブロードキャストフィールド5357B(EVEXバイト3、ビット[4]−B)として解釈される。
例示的なレジスタアーキテクチャ
図55は、本発明の1つの実施形態によるレジスタアーキテクチャ5500のブロック図である。図示の実施形態では、512ビット幅の32個のベクトルレジスタ5510が存在し、これらのレジスタは、zmm0からzmm31(zmmレジスタセット)として参照される。他の実施形態は、zmmレジスタセットの代わりに、256ビット幅の16個のベクトルレジスタのセットを含み得る。これらのレジスタは、ymm0からymm15(ymmレジスタセット)として参照される。他の実施形態は、zmmレジスタセットまたはymmレジスタセットの代わりに、128ビット幅の16個のベクトルレジスタのセットを含み得る。これらのレジスタは、xmm0からxmm15(xmmレジスタセット)として参照される。図55では、下位16個のzmmレジスタの下位256ビットは、レジスタymm0〜15上に重ね合わされ、下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0〜15上に重ね合わされている。
具体的なベクトルフレンドリ命令フォーマット5400は、以下の表に示されるように、重ね合わされたこれらのレジスタファイルを操作する。
換言すれば、ベクトル長フィールド5359Bは、最大長と、1つまたは複数の他のより短い長さとの間で選択し、そのようなより短い長さのそれぞれは、直前の長さの半分の長さであり、ベクトル長フィールド5359Bを持たない命令テンプレートは、最大のベクトル長を操作する。さらに、1つの実施形態では、具体的なベクトルフレンドリ命令フォーマット5400のクラスBの命令テンプレートは、パックドまたはスカラ単精度/倍精度浮動小数点データおよびパックドまたはスカラ整数データを操作する。スカラ演算は、zmm/ymm/xmmレジスタ内の最下位のデータ要素位置に対して実行されるオペレーションであり、それより上位のデータ要素位置は、実施形態に応じて、命令前に存在したもののままにされるかまたはゼロ化されるかのいずれかである。
書き込みマスクレジスタ5515−図示の実施形態では、それぞれサイズが64ビットの8個の書き込みマスクレジスタ(k0〜k7)が存在する。代替的な実施形態では、書き込みマスクレジスタ5515は、サイズが16ビットである。本発明の1つの実施形態では、ベクトルマスクレジスタk0は、書き込みマスクとして使用できない。通常k0を示す符号化が書き込みマスクに対して使用される場合、符号化は、0xFFFFに配線された書き込みマスクを選択し、その命令に対して書き込みマスクを実際上無効にする。
汎用レジスタ5525−図示の実施形態では、メモリオペランドをアドレス指定するために既存のx86アドレスモードと共に使用される16個の64ビットの汎用レジスタが存在する。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8〜R15という名称により参照される。
MMXパックド整数フラットレジスタファイル5550がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)5545−図示の実施形態では、x87スタックは、x87命令セット拡張を使用して32/64/80ビットの浮動小数点データに対してスカラ浮動小数点オペレーションを実行するのに使用される8要素スタックである一方、MMXレジスタは、64ビットのパックド整数データに対してオペレーションを実行すると共に、MMXレジスタとXMMレジスタとの間で実行される一部のオペレーション用のオペランドを保持するのに使用される。
本発明の代替的な複数の実施形態は、より広いまたはより狭いレジスタを使用することができる。加えて、本発明の代替的な実施形態は、より多くの、より少ない、または異なるレジスタファイルおよびレジスタを使用することができる。
エミュレーション(バイナリ変換、コードモーフィングなどを含む)
場合によっては、命令変換器は、ソース命令セットからターゲット命令セットへと命令を変換するために用いられ得る。例えば、命令変換器は、命令をコアによって処理されるべき1つまたは複数の他の命令へ、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)変換、モーフィング、エミュレート、または他の方法で変換してもよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェアまたはこれらの組み合わせで実装されてもよい。命令変換器は、プロセッサ上にあってもよく、プロセッサ外にあってもよく、または一部がプロセッサ上かつ一部がプロセッサ外にあってもよい。
図56は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。図示の実施形態では、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの様々な複数の組み合わせで実装されてもよい。図56は、少なくとも1つのx86命令セットコアを有するプロセッサ5616によって本来的に実行され得るx86バイナリコード5606を生成するために、x86コンパイラ5604を用いてコンパイルされ得る高水準言語5602のプログラムを示す。少なくとも1つのx86命令セットコアを有するプロセッサ5616は、少なくとも1つのx86命令セットコアを有するインテル社製プロセッサと実質的に同じ結果を出すために、(1)インテル社製x86命令セットコアの命令セットの大部分、または(2)複数のアプリケーションの複数のオブジェクトコードバージョン、もしくは少なくとも1つのx86命令セットコアを有するインテル社製プロセッサ上で実行することが想定された他のソフトウェアを互換可能に実行または他の方法で処理することにより、少なくとも1つのx86命令セットコアを有するインテル社製プロセッサと実質的に同じ複数の機能を実行可能な任意のプロセッサを表す。x86コンパイラ5604は、さらなるリンク処理の有無に関わらず、少なくとも1つのx86命令セットコアを有するプロセッサ5616上で実行可能なx86バイナリコード5606(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図56は、少なくとも1つのx86命令セットコアを持たないプロセッサ5614(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/またはカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行する複数のコアを有するプロセッサ)によって本来的に実行され得る代替的な命令セットバイナリコード5610を生成するために、代替的な命令セットコンパイラ5608を用いてコンパイルされ得る高水準言語5602のプログラムを示す。命令変換器5612は、x86バイナリコード5606を、x86命令セットコアを持たないプロセッサ5614によって本来的に実行され得るコードに変換するために用いられる。この変換されたコードは、これが可能な命令変換器の製造が難しいため、代替的な命令セットバイナリコード5610と同じとなる可能性は低いが、変換されたコードは、全般的なオペレーションを達成し、代替的な命令セットからの複数の命令により補完される。よって、命令変換器5612は、エミュレーション、シミュレーションまたは任意の他のプロセスを介して、プロセッサまたはx86命令セットプロセッサまたはコアを持たない他の電子デバイスに、x86バイナリコード5606を実行可能とするソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表す。
図57は、様々な実施形態による、本明細書で説明される1つまたは複数の技法を実装し得る、データセンタまたは他のタイプのコンピューティングネットワークを概して表すことができるデータセンタ5700の概念的概要を示す。図57に示すように、データセンタ5700は、一般に、複数のラックを備えることができ、各ラックは、それぞれの物理リソースのセットを含むコンピューティング機器を収容することができる。図57に示す特定の非限定的な例では、データセンタ5700は、4つのラック5702A〜5702Dを備え、ラックは、それぞれの物理リソース(PCR)のセット5705A〜5705Dを含むコンピューティング機器を収容している。この例によれば、データセンタ5700の物理リソースセット全部5706が、ラック5702A〜5702Dの間で分散された様々な物理リソースのセット5705A〜5705Dを含む。物理リソース5706は、例えば、プロセッサ、コプロセッサ、アクセラレータ、フィールドプログラマブルゲートアレイ(FPGA)、メモリ、および記憶装置などの複数のタイプのリソースを含み得る。実施形態はこれらの例に限定されない。
例示的なデータセンタ5700は、多くの点で典型的なデータセンタとは異なる。例えば、例示的な実施形態では、CPU、メモリ、および他のコンポーネントなどのコンポーネントが配置される回路基板(「スレッド(sled)」)は、熱的性能を向上させるように設計されている。特に、例示的な実施形態では、スレッドは、典型的な基板よりも浅い。換言すれば、スレッドは、前面から背面に向かって背が低くなっており、背面に冷却ファンが配置されている。これにより、空気が基板上のコンポーネントを横切って移動しなければならない経路の長さが短くなる。さらに、スレッド上のコンポーネントは、典型的な回路基板よりもさらに間隔を空けて配置され、コンポーネントは、通気の妨げ(shadowing)(すなわち、あるコンポーネントが別のコンポーネントの空気流路内にあること)を低減または排除するように配置される。例示的な実施形態では、プロセッサなどの処理コンポーネントは、スレッドの上面に配置される一方で、DIMMなどのニアメモリは、スレッドの下面に配置される。この設計によって提供される強化された空気流の結果として、コンポーネントは、典型的なシステム内よりも高い周波数および電力レベルで動作することができ、それによってパフォーマンスが向上する。
さらに、スレッドは、各ラック5702A、5702B、5702C、5702D内の電力ケーブルおよびデータ通信ケーブルとブラインド嵌合するように構成されており、迅速に取り外し、アップグレード、再取り付け、および/または交換する能力が強化されている。同様に、プロセッサ、アクセラレータ、メモリ、データストレージドライブなどの、スレッド上に配置される個々のコンポーネントは、互いの間隔が広がるため、アップグレードが容易になるように構成されている。例示的な実施形態では、コンポーネントは、それらの真正性を証明するためのハードウェア認証機能をさらに含む。
さらに、例示的な実施形態では、データセンタ5700は、イーサネット(登録商標)およびOmni−Pathを含む複数の他のネットワークアーキテクチャをサポートする単一のネットワークアーキテクチャ(「ファブリック」)を利用する。例示的な実施形態では、スレッドは光ファイバを介してスイッチに結合され、これにより、典型的なツイストペアケーブル(例えば、カテゴリ5、カテゴリ5e、カテゴリ6など)よりも高い帯域幅および低いレイテンシが提供される。高帯域幅、低レイテンシのインターコネクト、およびネットワークアーキテクチャのおかげで、データセンタ5700は、使用中に、メモリ、アクセラレータ(例えば、グラフィックアクセラレータ、FPGA、ASICなど)、およびデータストレージドライブなどの、物理的にはばらばらのリソースをプールすることができ、必要に応じてそれらをコンピューティングリソース(例えば、プロセッサ)に提供し、コンピューティングリソースが、プールされたリソースがあたかもローカルであるかのように、プールされたリソースにアクセスできるようにする。例示的なデータセンタ5700は、さらに、様々なリソースの使用情報を受信し、過去のリソース使用量に基づいて異なるタイプのワークロードのリソース使用量を予測し、この情報に基づいてリソースを動的に再割り当てする。
データセンタ5700のラック5702A、5702B、5702C、5702Dは、様々な種類のメンテナンス作業の自動化を容易にする物理的設計機能を含むことができる。例えば、データセンタ5700は、ロボットによってアクセスされるように、そしてロボットによって操作可能なリソーススレッドを受け入れて収容するように設計されているラックを使用して実装され得る。
さらに、例示的な実施形態では、ラック5702A、5702B、5702C、5702Dは、電源に典型的なものよりも大きい電圧を受ける統合電源を含む。電圧を大きくすることにより、電源は各スレッド上のコンポーネントに追加の電力を供給することが可能となり、コンポーネントは典型的な周波数よりも高い周波数で動作することが可能となる。図58は、データセンタ5700のラック5802の例示的な論理構成を示す。図58に示すように、ラック5802は、一般に、複数のスレッドを収容することができ、各スレッドは、それぞれ物理リソースのセットを含むことができる。図58に示される特定の非限定的な例では、ラック5802は、それぞれの物理リソースのセット5805−1〜5805−4を含むスレッド5804−1〜5804−4を収容し、物理リソースのセット5805−1〜5805−4のそれぞれが、ラック5802に含まれる物理リソースのセット全体5806の一部を構成する。図58に関して、ラック5802が、例えばラック5702Aを表す場合、物理リソース5806はラック5702Aに含まれる物理リソース5705Aに対応し得る。よって、この例の文脈では、物理リソース5705Aは、ラック5802のスレッド5804−1〜5804−4に含まれる、物理ストレージリソース5805−1、物理アクセラレータリソース5805−2、物理メモリリソース5805−3、および物理コンピューティングリソース5805−4を含む、物理リソースのそれぞれのセットから構成され得る。実施形態はこの例に限定されない。各スレッドは、物理リソースの様々なタイプ(例えば、コンピューティング、メモリ、アクセラレータ、記憶装置)のそれぞれのプールを含むことができる。ばらばらのリソースを有する、ロボットでアクセス可能でありロボットで操作可能なスレッドを持つことにより、リソースの各タイプは互いに独立に、自らの最適化されたリフレッシュレートでアップグレードされ得る。
図59は、様々な実施形態による、本明細書で説明される1つまたは複数の技法が実装され得るものを概して表すことができるデータセンタ5900の例である。図59に示す特定の非限定的な例では、データセンタ5900はラック5902−1〜5902−32を有する。様々な実施形態において、データセンタ5900のラックは、様々なアクセス経路を画定する、および/または受け入れるような仕方で構成され得る。例えば、図59に示すように、データセンタ5900のラックは、アクセス経路5911A、5911B、5911C、および5911Dを画定する、および/または受け入れるような仕方で構成され得る。一部の実施形態では、そのようなアクセス経路の存在は、一般に、ロボットメンテナンス機器などの自動化されたメンテナンス機器が、データセンタ5900の様々なラックに収容されたコンピューティング機器に物理的にアクセスし、自動化されたメンテナンス作業を実行する(例えば、故障したスレッドを交換する、スレッドをアップグレードする)ことを可能にし得る。様々な実施形態において、アクセス経路5911A、5911B、5911C、および5911Dの寸法、ラック5902−1〜5902−32の寸法、ならびに/またはデータセンタ5900の物理的なレイアウトの1つまたは複数の他の態様は、そのような自動化されたオペレーションを容易にするように選択され得る。実施形態はこの文脈に限定されない。
図60は、様々な実施形態による、本明細書で説明される1つまたは複数の技法が実装され得るものを概して表すことができるデータセンタ6000の例である。図60に示すように、データセンタ6000は光ファブリック6012を備え得る。光ファブリック6012は、一般に、(光ケーブルなどの)光学的信号伝達媒体と、光学的スイッチングインフラストラクチャと、を有することができ、これらを介して、データセンタ6000における任意の特定のスレッドが、データセンタ6000における他のスレッドのそれぞれに信号を送信し、データセンタ6000における他のスレッドのそれぞれから信号を受信できる。光ファブリック6012が任意の所与のスレッドに提供する信号伝達接続は、同じラック内の他のスレッドと他のラック内のスレッドとの両方への接続を含み得る。図60に示す特定の非限定的な例では、データセンタ6000は、4つのラック6002A〜6002Dを有する。ラック6002A〜6002Dは、それぞれのスレッドのペア6004A−1および6004A−2、6004B−1および6004B−2、6004C−1および6004C−2、ならびに6004D−1および6004D−2を収容する。よって、この例では、データセンタ6000は、全部で8つのスレッドを有する。光ファブリック6012を介して、そのような各スレッドが、データセンタ6000における他の7つのスレッドのそれぞれとの信号伝達接続を有し得る。例えば、光ファブリック6012を介して、ラック6002Aにおけるスレッド6004A−1は、ラック6002Aにおけるスレッド6004A−2、ならびにデータセンタ6000の他のラック6002B、6002C、および6002Dの間で分散されている6つの他のスレッド6004B−1、6004B−2、6004C−1、6004C−2、6004D−1、および6004D−2と信号伝達接続を有し得る。実施形態はこの例に限定されない。
図61Aは、図57、図59、および図60の例示的なデータセンタ5700、5900、および6000のいずれかなどの、データセンタの様々なスレッドの間で一部の実施形態において確立され得るリンク層接続を概して表すことができる接続スキーム6100Aの概要を示す。接続スキーム6100Aは、デュアルモード光スイッチングインフラストラクチャ6114を備える光ファブリックを使って実装され得る。デュアルモード光スイッチングインフラストラクチャ6114は、一般に、光学的信号伝達媒体の同じ統一されたセットを介して複数のリンク層プロトコルに従って通信を受信し、そのような通信を適正にスイッチングすることができるスイッチングインフラストラクチャを有し得る。様々な実施形態において、デュアルモード光スイッチングインフラストラクチャ6114は、1つまたは複数のデュアルモード光スイッチ6115を用いて実装され得る。様々な実施形態において、デュアルモード光スイッチ6115は、一般に、高基数(high−radix)スイッチを有し得る。一部の実施形態では、デュアルモード光スイッチ6115は、4層(four−ply)スイッチなどの多層(multi−ply)スイッチを有し得る。様々な実施形態において、デュアルモード光スイッチ6115は、従来のスイッチングデバイスに比べて著しく短縮されたレイテンシで通信をスイッチできるようにする集積シリコンフォトニクスを備え得る。一部の実施形態では、デュアルモード光スイッチ6115は、1つまたは複数のデュアルモード光スパインスイッチ6120をさらに含む、リーフ−スパインアーキテクチャのリーフスイッチ6130を構成し得る。
様々な実施形態において、デュアルモード光スイッチは、インターネットプロトコル(IPパケット)を運ぶイーサネット(登録商標)プロトコル通信と、第2の高性能コンピューティング(HPC)リンク層プロトコル(例えば、インテル(登録商標)のOmni−Pathアーキテクチャ、Infiniband)による通信と、の両方を、光ファブリックの光学的信号伝達媒体を介して受信可能であり得る。よって、図61Aに反映されているように、光ファブリックへの光学的信号伝達接続を有する任意の特定のスレッドのペア6104Aおよび6104Bに関し、接続スキーム6100は、イーサネット(登録商標)リンクおよびHPCリンクの両方を介したリンク層接続のサポートを提供し得る。よって、イーサネット(登録商標)通信およびHPC通信の両方が、単一の高帯域幅、低レイテンシのスイッチファブリックによってサポートされ得る。実施形態はこの例に限定されない。
図61Bは、一部の実施形態による、図57〜図60に示すラックの任意の特定の1つのアーキテクチャを表すことができるラックアーキテクチャ6100Bの概要を示す。図61Bに反映されているように、ラックアーキテクチャ6100Bは、一般に、スレッドが挿入され得る複数のスレッドスペースを備えることができ、そのそれぞれがラックアクセス領域6101を介してロボットでアクセス可能であり得る。図61Bに示す特定の非限定的な例では、ラックアーキテクチャ6100Bは、5つのスレッドスペース6103−1〜6103−5を備える。スレッドスペース6103−1〜6103−5は、それぞれの多目的コネクタモジュール(MPCM)6116−1〜6116−5を備える。図61Cは、図61Bのラックアーキテクチャ6100Bの一部の詳細図である。図61Cに示すように、スレッドがスレッドスペース6103−1〜6103−5のうちの任意の所与の1つに挿入されると、対応するMPCM(例えば、MPCM 6116−3)は、挿入されたスレッドの相手側MPCM 6120と結合し得る。この結合は、挿入されたスレッドに、それが収容されているラックの信号伝達インフラストラクチャと電力インフラストラクチャとの両方への接続を提供することができる。
ラックアーキテクチャ6100Bによって収容されるタイプのスレッドに含まれるのは、拡張機能を備える1つまたは複数のタイプのスレッドであり得る。図62は、そのようなタイプのスレッドを表すことができるスレッド6204の例を示している。図62に示すように、スレッド6204は、物理リソース6205のセット、およびスレッド6204が図61Bのスレッドスペース6103−1〜6103−5のいずれかなどのスレッドスペースに挿入されるときに相手側MPCMと結合するよう設計されたMPCM 6216を有し得る。
スレッド6204はまた、拡張コネクタ6217を備え得る。拡張コネクタ6217は、一般に、拡張スレッド6218などの1つまたは複数のタイプの拡張モジュールを受け入れることのできるソケット、スロットまたは他のタイプの接続要素を有し得る。拡張スレッド6218上の相手方コネクタと結合することによって、拡張コネクタ6217は、物理リソース6205に、拡張スレッド6218にある補足コンピューティングリソース6205Bへのアクセスを提供し得る。実施形態はこの文脈に限定されない。
図63は、図62のスレッド6204などの拡張機能を備えるスレッドのサポートを提供するために実装され得るラックアーキテクチャを表すことができるラックアーキテクチャ6300の例を示す。図63に示す特定の非限定的な例では、ラックアーキテクチャ6300は、7つのスレッドスペース6303−1〜6303−7を備え、これはそれぞれMPCM 6316−1〜6316−7を備える。スレッドスペース6303−1〜6303−7は、それぞれの主要領域6303−1A〜6303−7Aおよびそれぞれの拡張領域6303−1B〜6303−7Bを含む。そのような各スレッドスペースに関し、対応するMPCMが、挿入されたスレッドの、相手側MPCMと結合されたる場合、主要領域は、一般に、挿入されたスレッドを物理的に受け入れるスレッドスペースの領域を構成し得る。拡張領域は、一般に、挿入されたスレッドが図62の拡張スレッド6218のような拡張モジュールにより構成される場合に、図62の拡張スレッド6218などの拡張モジュールを物理的に受け入れることのできるスレッドスペースの領域を構成し得る。
図64は、一部の実施形態による、図63のラックアーキテクチャ6300により実装されるラックを表すことができるラック6402の例を示す。図64に示す特定の非限定的な例では、ラック6402は7つのスレッドスペース6403−1〜6403−7を含み、これらは、それぞれの主要領域6403−1A〜6403−7Aおよびそれぞれの拡張領域6403−1B〜6403−7Bを含む。様々な実施形態において、ラック6402における温度制御は、空気冷却システムを使用して実装され得る。例えば、図64に反映されているように、ラック6402は、一般に様々なスレッドスペース6403−1〜6403−7内の空気冷却を提供するよう構成される複数のファン6419を備え得る。一部の実施形態では、スレッドスペースの高さは、従来の「1U」サーバの高さより高い。そのような実施形態では、ファン6419は、一般に、従来のラック構成で使われるファンに比べて、比較的遅い、大きな直径の冷却ファンを有し得る。より低速でより大きな直径の冷却ファンを稼働させることは、より高速で稼働するより小さな直径の冷却ファンに比べて、同じ程度の冷却を提供しながら、ファン寿命を延ばすことができる。スレッドは、従来のラック寸法より物理的に浅い。さらに、各コンポーネントは、熱的遮蔽を低減するように各スレッド上に配置される(すなわち、空気流の方向に直列に配置されない)。結果として、より幅広く、より浅いスレッドは、冷却が改善されたこと(すなわち、熱的遮蔽なし、装置間のスペースがより広い、より大きなヒートシンクのためのより多くの余地など)により、より高い熱設計枠(例えば、250W)で装置を動作させることができるため、装置パフォーマンスを高めることができる。
MPCM 6416−1〜6416−7は、挿入されたスレッドに、それぞれの電力モジュール6420−1〜6420−7を電源とする電力へのアクセスを提供するよう構成され得る。各電源は外部電源6421から電力を引き出してもよい。様々な実施形態において、外部電源6421は、交流(AC)電力をラック6402に送達してもよく、電力モジュール6420−1〜6420−7は、そのようなAC電力を、挿入されたスレッドに提供される直流(DC)電力に変換するよう構成されてもよい。一部の実施形態では、例えば、電力モジュール6420−1〜6420−7は、277ボルトのAC電力を、それぞれのMPCM 6416−1〜6416−7を介して、挿入されたスレッドに提供するための、12ボルトのDC電力に変換するよう構成されてもよい。実施形態はこの例に限定されない。
MPCM 6416−1〜6416−7はまた、挿入されたスレッドに、図61Aのデュアルモード光スイッチングインフラストラクチャ6114と同じまたは同様であり得るデュアルモード光スイッチングインフラストラクチャ6414への光学的信号伝達接続を提供するように構成され得る。様々な実施形態において、MPCM 6416−1〜6416−7に含まれる光コネクタは、挿入されたスレッドのMPCMに含まれる相手側光コネクタと結合して、そのようなスレッドに、それぞれの長さの光ケーブル6422−1〜6422−7を介したデュアルモード光スイッチングインフラストラクチャ6414への光学的信号伝達接続を提供するように設計され得る。一部の実施形態では、そのような各長さの光ケーブルは、その対応するMPCMから、ラック6402のスレッドスペースの外部である光相互接続ルーム(loom)6423まで延びてもよい。様々な実施形態において、光相互接続ルーム6423は、ラック6402の支柱または他のタイプの荷重支持要素を通って配置され得る。実施形態はこの文脈に限定されない。挿入されたスレッドがMPCMを介して光スイッチングインフラストラクチャに接続するため、新たに挿入されたスレッドを受け入れるためにラックケーブルを手動で構成することに典型的に費やされるリソースが節約できる。
図65は、一部の実施形態による、図64のラック6402と併せて使うために設計されたスレッドを表すことができるスレッド6504の例を示す。スレッド6504は、光コネクタ6516Aおよび電源コネクタ6516Bを含み、スレッドスペースへのMPCM 6516の挿入と共に、スレッドスペースの、相手側MPCMと結合するように設計されている、MPCM 6516を備え得る。そのような相手側MPCMとのMPCM 6516との結合により、電力コネクタ6516を相手側MPCMに含まれる電力コネクタと結合させることができる。これにより、一般に、スレッド6504の物理リソース6505が、電力コネクタ6516と電力コネクタ6516を物理リソース6505に導電結合する電力伝送媒体6524とを介して、外部電源から電力供給を受けることが可能になり得る。
スレッド6504はまた、デュアルモード光ネットワークインターフェース回路6526を含み得る。デュアルモード光ネットワークインターフェース回路6526は、一般に、図64のデュアルモード光スイッチングインフラストラクチャ6414によってサポートされる複数のリンク層プロトコルのそれぞれに従って、光学的信号伝達媒体を通じて通信することのできる回路を含み得る。一部の実施形態では、デュアルモード光ネットワークインターフェース回路6526は、イーサネット(登録商標)プロトコル通信と、第2の高性能プロトコルによる通信との両方が可能であり得る。様々な実施形態において、デュアルモード光ネットワークインターフェース回路6526は、1つまたは複数の光送受信機モジュール6527を含んでいてもよく、そのそれぞれが、1つまたは複数の光チャネルのそれぞれを通じて光信号を送受信可能であり得る。実施形態はこの文脈に限定されない。
MPCM 6516を所与のラックにあるスレッドスペースの相手側MPCMと結合することにより、光コネクタ6516Aを、相手側MPCMに含まれる光コネクタと結合させ得る。これは、一般に、光チャネルのセット6525のそれぞれを介した、スレッドの光ケーブルとデュアルモード光ネットワークインターフェース回路6526との間の光接続を確立し得る。デュアルモード光ネットワークインターフェース回路6526は、電気的信号伝達媒体6528を介して、スレッド6504の物理リソース6505と通信し得る。図64を参照して上述したような、冷却を改善し、比較的より高い熱設計枠(例えば、250W)での動作を可能にするためのスレッドの寸法およびスレッド上でのコンポーネントの配置に加えて、一部の実施形態では、スレッドは、物理リソース6505によって生成される熱を散逸させるように構成されたヒートパイプおよび/またはヒートシンクなどの、空気冷却を容易にするための1つまたは複数の追加の特徴を含み得る。図65に示す例示的なスレッド6504は拡張コネクタを備えていないが、スレッド6504の設計要素を備える任意の所与のスレッドはまた、一部の実施形態による拡張コネクタを備えていてもよいことに留意されたい。実施形態はこの文脈に限定されない。
図66は、様々な実施形態による、本明細書で説明される1つまたは複数の技法が実装され得るものを概して表すことができるデータセンタ6600の例である。図66に反映されているように、物理インフラストラクチャ管理フレームワーク6650Aは、データセンタ6600の物理インフラストラクチャ6600Aの管理を容易にするように実装され得る。様々な実施形態において、物理インフラストラクチャ管理フレームワーク6650Aの1つの機能は、物理インフラストラクチャ6600A内のコンピューティング機器にサービスするロボットメンテナンス機器の使用などの、データセンタ6600内での自動メンテナンス機能を管理することであり得る。一部の実施形態では、物理インフラストラクチャ6600Aは、物理インフラストラクチャ6600Aのリモートの自動管理をサポートするために十分なロバスト性を有するテレメトリ報告を実行する高度なテレメトリシステムを備え得る。様々な実施形態において、そのような高度なテレメトリシステムによって提供されるテレメトリ情報は、障害予測/防止機能および容量計画機能などの機能をサポートし得る。一部の実施形態では、物理インフラストラクチャ管理フレームワーク6650Aは、ハードウェア認証技法を使って物理インフラストラクチャコンポーネントの真正性確認を管理するよう構成され得る。例えば、設置される各コンポーネントに関連付けられている無線周波数識別(RFID)タグから収集された情報を解析することによって、設置前にコンポーネントの真正性をロボットが検証してもよい。実施形態はこの文脈に限定されない。
図66に示されるように、データセンタ6600の物理インフラストラクチャ6600Aは、デュアルモード光スイッチングインフラストラクチャ6614を含み得る光ファブリック6612を有し得る。光ファブリック6612およびデュアルモード光スイッチングインフラストラクチャ6614は、図60の光ファブリック6012および図61Aのデュアルモード光スイッチングインフラストラクチャ6114とそれぞれ同じまたは同様であってもよく、データセンタ6600のスレッドの間で、高帯域幅、低レイテンシの複数プロトコル接続を提供し得る。上で論じたように、図57を参照すると、様々な実施形態において、そのような接続を使用できることにより、アクセラレータ、メモリ、および記憶装置などのリソースをばらばらにし、動的にプールすることを実現可能にし得る。一部の実施形態では、例えば、1つまたは複数のプールされたアクセラレータスレッド6630がデータセンタ6600の物理インフラストラクチャ6600Aのうちに含められてもよく、そのそれぞれが、光ファブリック6612およびデュアルモード光スイッチングインフラストラクチャ6614を介して、他のスレッドにグローバルにアクセス可能であるアクセラレータリソース、例えばコプロセッサおよび/またはFPGAなどのプールを含み得る。
別の例では、様々な実施形態において、1つまたは複数のプールされた記憶装置スレッド6632がデータセンタ6600の物理インフラストラクチャ6600Aのうちに含められてもよく、そのそれぞれが、光ファブリック6612およびデュアルモード光スイッチングインフラストラクチャ6614を介して、他のスレッドにグローバルにアクセス可能である記憶装置リソースのプールを含み得る。一部の実施形態では、そのようなプールされた記憶装置スレッド6632は、ソリッドステートドライブ(SSD)などのソリッドステート記憶装置のプールを含み得る。様々な実施形態において、1つまたは複数の高性能処理スレッド6634がデータセンタ6600の物理インフラストラクチャ6600Aのうちに含められてもよい。一部の実施形態では、高性能処理スレッド6634は、高性能プロセッサのプールおよび最大250Wまたはそれ以上のより高い熱設計枠を与えるよう空気冷却を高める冷却機能を含み得る。様々な実施形態において、任意の所与の高性能処理スレッド6634は、その高性能処理スレッド6634にローカルに利用可能なファーメモリがプロセッサから分離され、ニアメモリがそのスレッド上に備わるように、ファーメモリ拡張スレッドを受け入れることのできる拡張コネクタ6617を備えていてもよい。一部の実施形態では、そのような高性能処理スレッド6634は、低レイテンシのSSD記憶装置を有する拡張スレッドを使用してファーメモリにより構成されてもよい。光インフラストラクチャは、あるスレッド上のコンピューティングリソースが、同じラックまたはデータセンタ内の他の任意のラックに位置するスレッド上に分離されているリモートのアクセラレータ/FPGA、メモリおよび/またはSSDリソースを利用することを可能にする。リモートのリソースは、図61A〜図61Cを参照して上述したスパイン−リーフ型ネットワークアーキテクチャにおいて1スイッチジャンプまたは2スイッチジャンプ離れて配置され得る。実施形態はこの文脈に限定されない。
様々な実施形態において、ソフトウェア定義インフラストラクチャ6600Bなどの仮想インフラストラクチャを定義するために、抽象化の1つまたは複数の層が、物理インフラストラクチャ6600Aの物理リソースに適用され得る。一部の実施形態では、ソフトウェア定義インフラストラクチャ6600Bの仮想コンピューティングリソース6636は、クラウドサービス6640の提供をサポートするために割り当てられ得る。様々な実施形態において、仮想コンピューティングリソース6636の特定のセットは、SDIサービス6638の形でクラウドサービス6640に提供するためにグループ化され得る。クラウドサービス6640の例としては、限定するものではないが、SaaS(software as a service)サービス6642、PaaS(platform as a service)サービス6644およびIaaS(infrastructure as a service)サービス6646を挙げることができる。
一部の実施形態では、ソフトウェア定義インフラストラクチャ6600Bの管理は、仮想インフラストラクチャ管理フレームワーク6650Bを使用して実施され得る。様々な実施形態において、仮想インフラストラクチャ管理フレームワーク6650Bは、仮想コンピューティングリソース6636および/またはSDIサービス6638のクラウドサービス6640への割り当てを管理するのと併せて、ワークロードフィンガープリンティング技法および/または機械学習技法を実装するよう設計され得る。一部の実施形態では、仮想インフラストラクチャ管理フレームワーク6650Bは、そのようなリソース割り当ての実行に併せて、テレメトリデータを使用/参照し得る。様々な実施形態において、クラウドサービス6640についてのQoS管理機能を提供するために、アプリケーション/サービス管理フレームワーク6650Cが実装され得る。実施形態はこの文脈に限定されない。
流れ図におけるオペレーションは、他の図の例示的な実施形態を参照して説明されている場合がある。しかしながら、流れ図のオペレーションは、他の図を参照して説明された以外の本発明の実施形態により実行可能であり得、他の図を参照して説明される本発明の実施形態は、流れ図を参照して説明されたものとは異なるオペレーションを実行可能であり得ることを理解されたい。さらに、図中の流れ図は、本発明の特定の実施形態によって実行される特定のオペレーション順序を示しているが、そのような順序は例示であることを理解されたい(例えば代替的な実施形態は異なる順序でオペレーションを実行したり、特定のオペレーションを組み合わせたり、特定のオペレーションを重ねたりできる)。
本発明の実施形態の1つまたは複数の部分は、ソフトウェア、ファームウェア、および/またはハードウェアの異なる組み合わせを使用して実施することができる。実施形態は、機械可読記憶媒体(例えば、磁気ディスク、光ディスク、読み出し専用メモリ(ROM)、フラッシュメモリ装置、相変化メモリ)および機械可読伝送媒体(搬送波とも呼ばれる)など(例えば、電気、光、無線、音響、または搬送波、赤外線信号などの他の形式の伝播信号)の機械可読媒体(コンピュータ可読媒体とも呼ばれる)を用いて、(ソフトウェア命令で構成され、コンピュータプログラムコードまたはコンピュータプログラムと呼ばれることもある)コードおよび/またはデータを(内部的におよび/またはネットワークを介して他の電子デバイスと共に)格納および伝送する電子デバイスを使用して実装され得る。よって、電子デバイス(例えば、コンピュータ)は、プロセッサのセット上で実行するためのコードを格納する、および/またはデータを格納するために、1つまたは複数の機械可読記憶媒体に結合された1つまたは複数のプロセッサのセットなどのハードウェアおよびソフトウェアを含むことができる。例えば、電子デバイスは、不揮発性メモリは、電子デバイスがオフにされたとき(電源が切られたとき)でもコード/データを持続させることができるため、コードを含む不揮発性メモリを含むことができ、電子デバイスがオンにされている間、その電子デバイスのプロセッサ(単数または複数)によって実行されるコードの一部は、典型的には、電子デバイスの低速の不揮発性メモリから揮発性メモリ(例えば、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM))にコピーされる。典型的な電子デバイスはまた、(伝播信号を使用してコードおよび/またはデータを送信および/または受信するために)他の電子デバイスとのネットワーク接続を確立するための1つまたは複数の物理ネットワークインターフェース(単数または複数)のセットを含む。
本発明をいくつかの実施形態に関して説明してきたが、当業者であれば、本発明が説明した実施形態に限定されず、添付の特許請求の範囲の趣旨および範囲内で修正および変更を加えて実施できることを認識するはずである。従って、説明は限定的ではなく例示的とみなされるべきである。