IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インテル・コーポレーションの特許一覧

特許7537696デュアル空間パターンプリフェッチャについての装置、方法、およびシステム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-08-13
(45)【発行日】2024-08-21
(54)【発明の名称】デュアル空間パターンプリフェッチャについての装置、方法、およびシステム
(51)【国際特許分類】
   G06F 12/0862 20160101AFI20240814BHJP
   G06F 12/0897 20160101ALI20240814BHJP
   G06F 9/38 20180101ALI20240814BHJP
【FI】
G06F12/0862 105
G06F12/0897 110
G06F12/0862 110
G06F9/38 310A
【請求項の数】 25
【外国語出願】
(21)【出願番号】P 2020103671
(22)【出願日】2020-06-16
(65)【公開番号】P2021051724
(43)【公開日】2021-04-01
【審査請求日】2023-06-13
(31)【優先権主張番号】62/903,550
(32)【優先日】2019-09-20
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/729,344
(32)【優先日】2019-12-28
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】ラウル ベラ
(72)【発明者】
【氏名】アナント ヴィサル ノリ
(72)【発明者】
【氏名】スリーニヴァス スブラマネー
【審査官】田中 啓介
(56)【参考文献】
【文献】特表2009-540429(JP,A)
【文献】米国特許出願公開第2018/0329823(US,A1)
【文献】米国特許出願公開第2018/0341591(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F9/38
G06F12/00-12/128
G06F13/16-13/18
(57)【特許請求の範囲】
【請求項1】
メモリおよびキャッシュラインを格納するキャッシュにアクセスするプロセッサコアと、
前記メモリから前記キャッシュへとキャッシュラインをプリフェッチするプリフェッチ回路であって、
シングルアクセスシグネチャのための前記キャッシュへのキャッシュラインアクセスおよびページを追跡し、
複数のページの各ページに対する前記キャッシュラインアクセスに対して、各ページに対する第1のキャッシュラインアクセスにシフトされる空間ビットパターンを生成し、
同一の空間ビットパターンを有する前記空間ビットパターンの各々に対する前記シングルアクセスシグネチャに対するシングル空間ビットパターンを生成して、複数のシングル空間ビットパターンを形成し、
前記複数のシングル空間ビットパターンの論理和演算を実行して、前記シングルアクセスシグネチャに対する第1の変調ビットパターンを生成し、
前記複数のシングル空間ビットパターンの論理積演算を実行して、前記シングルアクセスシグネチャに対する第2の変調ビットパターンを生成し、
前記シングルアクセスシグネチャに対するプリフェッチ要求を受信し、
閾値を超過していない場合に前記第1の変調ビットパターンを使用し、閾値を超過している場合に前記第2の変調ビットパターンを使用して、前記プリフェッチ要求に対するプリフェッチオペレーションを実行する、プリフェッチ回路と、
を備える、装置。
【請求項2】
前記シングルアクセスシグネチャは、シングル命令ポインタ値である、
請求項1に記載の装置。
【請求項3】
前記プリフェッチ要求は、前記キャッシュのデータのミスを有する、
請求項1または2に記載の装置。
【請求項4】
前記閾値は、前記メモリの帯域幅利用率閾値である、
請求項1から3のいずれか一項に記載の装置。
【請求項5】
前記プリフェッチ回路はさらに、前記第1の変調ビットパターンと前記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理和演算の結果によって、前記第1の変調ビットパターンを更新する、
請求項1から4のいずれか一項に記載の装置。
【請求項6】
前記実際のプログラムアクセスビットパターンは、犠牲ページバッファエントリのためのものである、
請求項5に記載の装置。
【請求項7】
前記プリフェッチ回路はさらに、前記第1の変調ビットパターンと前記シングルアクセスシグネチャに対する前記実際のプログラムアクセスビットパターンとの論理積演算の結果によって、前記第2の変調ビットパターンを更新する、
請求項5または6に記載の装置。
【請求項8】
前記プリフェッチ回路はさらに、前記第1の変調ビットパターンと前記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンの論理積演算の結果によって、前記第2の変調ビットパターンを更新する、
請求項1から4のいずれか一項に記載の装置。
【請求項9】
プロセッサにより、キャッシュラインを格納するキャッシュにアクセスする段階と、
シングルアクセスシグネチャに対する前記キャッシュへのキャッシュラインアクセスおよびページを追跡する段階と、
複数のページの各ページに対する前記キャッシュラインアクセスに対して、各ページに対して第1のキャッシュラインアクセスにシフトされる空間ビットパターンを生成する段階と、
同一の空間ビットパターンを有する前記空間ビットパターンの各々に対する前記シングルアクセスシグネチャに対するシングル空間ビットパターンを生成して、複数のシングル空間ビットパターンを形成する段階と、
前記複数のシングル空間ビットパターンの論理和演算を実行して、前記シングルアクセスシグネチャに対する第1の変調ビットパターンを生成する段階と、
前記複数のシングル空間ビットパターンの論理積演算を実行して、前記シングルアクセスシグネチャに対する第2の変調ビットパターンを生成する段階と、
前記シングルアクセスシグネチャに対するプリフェッチ要求を受信する段階と、
閾値を超過していない場合に前記第1の変調ビットパターンを使用し、前記閾値を超過している場合に前記第2の変調ビットパターンを使用して、前記プリフェッチ要求に対するプリフェッチオペレーションを実行して、キャッシュラインをメモリから前記キャッシュへとプリフェッチする段階と、
を備える、方法。
【請求項10】
前記シングルアクセスシグネチャは、シングル命令ポインタ値である、
請求項9に記載の方法。
【請求項11】
前記プリフェッチ要求は、前記キャッシュにおけるデータのミスを含む、
請求項9または10に記載の方法。
【請求項12】
前記閾値を、前記メモリの帯域幅利用率閾値として設定する段階をさらに備える、
請求項9から11のいずれか一項に記載の方法。
【請求項13】
前記第1の変調ビットパターンと前記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理和演算の結果によって、前記第1の変調ビットパターンを更新する段階をさらに備える、
請求項9から12のいずれか一項に記載の方法。
【請求項14】
前記実際のプログラムアクセスビットパターンは、犠牲ページバッファエントリのためのものである、
請求項13に記載の方法。
【請求項15】
前記第1の変調ビットパターンと前記シングルアクセスシグネチャに対する前記実際のプログラムアクセスビットパターンとの論理積演算の結果によって、前記第2の変調ビットパターンを更新する段階をさらに備える、
請求項13または14に記載の方法。
【請求項16】
前記第1の変調ビットパターンと前記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理積演算の結果によって、前記第2の変調ビットパターンを更新する段階をさらに備える、
請求項9から12のいずれか一項に記載の方法。
【請求項17】
プロセッサより実行された場合、前記プロセッサに、
キャッシュラインを格納するキャッシュにアクセスする手順と、
シングルアクセスシグネチャに対する前記キャッシュへのキャッシュラインアクセスおよびページを追跡する手順と、
複数のページの各ページに対する前記キャッシュラインアクセスに対して、各ページの第1のキャッシュラインアクセスにシフトされる空間ビットパターンを生成する手順と、
同一の空間ビットパターンを有する前記空間ビットパターンの各々に対する前記シングルアクセスシグネチャに対するシングル空間ビットパターンを生成して、複数のシングル空間ビットパターンを形成する手順と、
前記複数のシングル空間ビットパターンの論理和演算を実行して、前記シングルアクセスシグネチャに対する第1の変調ビットパターンを生成する手順と、
前記複数のシングル空間ビットパターンの論理積演算を実行して、前記シングルアクセスシグネチャに対する第2の変調ビットパターンを生成する手順と、
前記シングルアクセスシグネチャに対するプリフェッチ要求を受信する手順と、
閾値を超過していない場合に前記第1の変調ビットパターンを使用し、前記閾値を超過している場合に前記第2の変調ビットパターンを使用して、前記プリフェッチ要求に対するプリフェッチオペレーションを実行して、キャッシュラインをメモリから前記キャッシュへとプリフェッチする手順と、
を有する実行させるためのプログラム。
【請求項18】
前記シングルアクセスシグネチャは、シングル命令ポインタ値である、
請求項17に記載のプログラム。
【請求項19】
前記プリフェッチ要求は、前記キャッシュにおけるデータのミスを含む、
請求項17または18に記載のプログラム。
【請求項20】
前記プログラムは、前記閾値を、前記メモリの帯域幅利用率閾値として設定する手順を、前記プロセッサにさらに実行させる、
請求項17から19のいずれか一項に記載のプログラム。
【請求項21】
前記プログラムは、前記第1の変調ビットパターンと前記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理和演算の結果によって、前記第1の変調ビットパターンを更新する手順を、前記プロセッサにさらに実行させる、
請求項17から20のいずれか一項に記載のプログラム。
【請求項22】
前記実際のプログラムアクセスビットパターンは、犠牲ページバッファエントリのためのものである、
請求項21に記載のプログラム。
【請求項23】
前記プログラムは、前記第1の変調ビットパターンと前記シングルアクセスシグネチャに対する前記実際のプログラムアクセスビットパターンとの論理積演算の結果によって、前記第2の変調ビットパターンを更新する手順を、前記プロセッサにさらに実行させる、
請求項21または22に記載のプログラム。
【請求項24】
前記プログラムは、前記第1の変調ビットパターンと前記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理積演算の結果によって、前記第2の変調ビットパターンを更新する手順を、前記プロセッサにさらに実行させる、
請求項17から20のいずれか一項に記載のプログラム。
【請求項25】
請求項17から24のいずれか一項に記載のプログラムを格納するコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
[関連出願の相互参照]
本特許出願は、2019年9月20日に出願され、「デュアル空間パターンプリフェッチャについての装置、方法、およびシステム」という名称の米国仮特許出願第62/903,550号の利益を主張し、当該出願はその全体が参照により本明細書に組み込まれる。
【0002】
本開示は、概してエレクトロニクスに関し、より具体的には、本開示の実施形態は、デュアル空間パターンプリフェッチ回路に関する。
【背景技術】
【0003】
プロセッサまたはプロセッサのセットは、命令セット、例えば、命令セットアーキテクチャ(ISA)からの命令を実行する。命令セットは、プログラミングに関するコンピュータアーキテクチャの一部であり、概して、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込みおよび例外処理、ならびに、外部入力および出力(I/O)を含む。本明細書において命令という用語は、マクロ命令、例えば、実行のためにプロセッサに提供される命令、または、マイクロ命令、例えば、マクロ命令をデコードするプロセッサのデコーダに起因する命令を指し得ることに留意されたい。
【図面の簡単な説明】
【0004】
本開示は、例示の目的で示されており、添付図面の図に限定されるものではなく、図面中、同様の参照符号は、同様の要素を示す。
【0005】
図1】本開示の実施形態に係るプリフェッチ回路をマルチプルコアハードウェアプロセッサのブロックダイアグラムを示す。
【0006】
図2】本開示の実施形態に係る、ローカルおよびグローバルデルタをキャプチャする、トリガアクセスにアンカーされた空間ビットパターンを示す。
【0007】
図3】本開示の実施形態に係る変調ビットパターンを示す。
【0008】
図4A】本開示の実施形態に係るデュアル空間パターンプリフェッチャについてのフローダイアグラムを示す。
【0009】
図4B】本開示の実施形態に係るデュアル空間パターンプリフェッチ回路を示す。
【0010】
図5】本開示の実施形態に係るカバレッジバイアス変調ビットパターン(CovP)および正確性バイアス変調ビットパターン(AccP)を更新する回路を示す。
【0011】
図6】本開示の実施形態に係るカバレッジバイアス変調ビットパターン(CovP)と正確性バイアス変調ビットパターン(AccP)との間で選択するフローダイアグラムを示す。
【0012】
図7】本開示の実施形態に係るデュアル空間パターンプリフェッチャに対するストレージの例示的サイズの表を示す。
【0013】
図8】本開示の実施形態に係るフローダイアグラムである。
【0014】
図9A】本開示の実施形態に係る汎用ベクトルフレンドリ命令フォーマット、およびそれらのクラスAの命令テンプレートを示すブロック図である。
【0015】
図9B】本開示の実施形態に係る汎用ベクトルフレンドリ命令フォーマット、およびそれらのクラスBの命令テンプレートを示すブロック図である。
【0016】
図10A】本開示の実施形態に係る図9Aおよび9Bにおける汎用ベクトルフレンドリ命令フォーマットに対するフィールドを示すブロック図である。
【0017】
図10B】本開示の一実施形態に係るフルオペコードフィールドを作成する図10Aにおける特定のベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【0018】
図10C】本開示の一実施形態に係るレジスタインデックスフィールドを作成する図10Aにおける特定のベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【0019】
図10D】本開示の一実施形態に係る拡張オペレーションフィールド950を作成する図10Aにおける特定のベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【0020】
図11】本開示の一実施形態に係るレジスタアーキテクチャのブロックダイアグラムである。
【0021】
図12A】本開示の実施形態に係る例示的なインオーダパイプラインおよび例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
【0022】
図12B】本開示の実施形態に係るプロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態および例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
【0023】
図13A】本開示の実施形態に係る、オンダイ相互接続ネットワークへのその接続、および、レベル2(L2)キャッシュのローカルサブセットと共に示すシングルプロセッサコアのブロックダイアグラムである。
【0024】
図13B】本開示の実施形態に係る図13Aにおけるプロセッサコアの一部の拡大図である。
【0025】
図14】本開示の実施形態に係る、1より多いコアを有し得る、統合メモリコントローラを有し得る、および、統合グラフィックスを有し得るプロセッサのブロックダイアグラムである。
【0026】
図15】本開示の一実施形態に係るシステムのブロックダイアグラムである。
【0027】
図16】本開示の実施形態に係るより具体的な例示的システムのブロックダイアグラムを示す。
【0028】
図17】本開示の実施形態に係る、第2のより具体的な例示的システムのブロックダイアグラムが示される。
【0029】
図18】本開示の実施形態に係るシステムオンチップ(SoC)のブロックダイアグラムが示される。
【0030】
図19】本開示の実施形態に係るソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比したブロックダイアグラムである。
【発明を実施するための形態】
【0031】
以下の説明において、多くの具体的な詳細が説明される。しかしながら、本開示の実施形態は、これらの具体的な詳細を用いずに実施され得ることが理解される。他の例において、本説明の理解を曖昧にしないように、周知の回路、構造および技術は詳細に示されていない。
【0032】
本明細書における「1つの実施形態」、「一実施形態」、「例示的な実施形態」等への言及は、説明される実施形態が特定の機能、構造、または特性を含んでよいが、全ての実施形態がその特定の機能、構造、または特性を必ずしも含まなくてよいことを示す。更に、そのような文言は必ずしも同一の実施形態を指していない。さらに、ある実施形態に関連して特定の機能、構造、または特性が説明される場合、明示的に説明されているか否かに関わらず、他の実施形態に関連してそのような機能、構造、または特性に影響を与えることは、当業者の知識の範囲内であると考えられる。
【0033】
プロセッサは、データをプリフェッチ、例えば、アクセスアドレスを予測し、(例えば、限定されるものではないが、ダイナミックランダムアクセスメモリ(DRAM)などのメモリから)キャッシュまたは複数のキャッシュにそれらのアドレスに対するデータを運ぶために、プリフェッチャ(例えば、プリフェッチ回路)を使用してよい。
【0034】
高レイテンシアクセス、例えば、DRAMメインメモリからのアクセスは、しばしばプロセッサ(例えば、コア)の命令のインオーダリタイアをストールし、命令レベル並列性(ILP)抽出に対する先見性を減少させる。さらに、DRAMのより新しい世代でメモリ帯域幅が増加する一方で、特定の実施形態において、メモリのレイテンシも同様に増加する。(例えば、低電力ダブルデータレート(LPDDR)DRAMにおける)より狭いチャンネルへの移行はまた、DRAMからの全体レイテンシを増大させる。本明細書の実施形態は、低ストレージコストでプリフェッチカバレッジおよび正確性の両方に対して同時に最適化され、メモリ帯域幅ヘッドルームが増加する場合に提供される性能をスケールアップする、新規なアドレス予測メカニズムを通じて、これらの課題を克服する。
【0035】
性能におけるメモリウォール制限に対する様々なソリューションが存在する。これらのソリューションは、より高いレイテンシに対する許容範囲を付加するプロセッサ深度を増大させること(複雑で高価なアプローチであり、プロセッサ幅も同様に増大させる場合、有効性が低減されるアプローチである)と、低アクセスレイテンシを有するオンダイキャッシュ(キャッシュの容量/面積によって制限される)と、プログラム内のロードにより要求されるアドレスのプリフェッチまたは予測すること(ロードアドレスの大部分を早期に予測する能力により制限される)と、を含む。高性能プロセッサが、これらのソリューションのうちの幾つかまたは全ての組み合わせを使用してよい。
【0036】
本明細書の特定の実施形態は、プロセッサ性能の改善をするためのプリフェッチに焦点を当てる。プリフェッチの主要な基準は、概して以下のようであってよい:
カバレッジ:プリフェッチャにより保存されるプログラムによる高レイテンシアクセスのフラクション(例えば、より高いほどよりよい)、
適時性:プリフェッチにより隠されている高レイテンシアクセスのフラクション(例えば、より高いほどよりよい)、
正確性:プリフェッチャによる、正確に予測されたアドレスのフラクション(例えば、より高いほどよりよい)、および
ストレージ:プリフェッチャのストレージ要求(例えば、より小さいほどよりよい)。
【0037】
特定の実施形態において、プリフェッチャは、低ストレージコストを維持しつつ、カバレッジ、適時性、および正確性に対して同時に最適化することを必要とする。特定のプリフェッチ技術は、これらの最適化を、カバレッジまたは正確性のいずれかに対して、静的によりバイアスさせる。ビットパターンプリフェッチャは、非常に高いストレージ要求(例えば、約100KB)を有し得る。
【0038】
さらに、DRAMのランドスケープおよび技術の進化に伴い、プリフェッチ技術は、帯域幅に動的に適応し、ヘッドルームが存在する場合に予測とカバレッジを高め、特定の実施形態において利用される帯域幅がピークに近い場合に高正確性にスロットルダウンする能力を必要とする。本明細書の実施形態は、より高いDRAM帯域幅ヘッドルームでそれらの性能のスケーリングを可能とする。
【0039】
一実施形態において、指定される要件(低ストレージコスト、および、DRAM帯域幅と共にスケーリングする一方で、カバレッジおよび正確性の両方について動的に最適化すること)の各々は、本明細書に開示されたデュアル空間ビットパターンプリフェッチャの実施形態によって正面から、有効に、かつ効率的に対処される。
【0040】
一実施形態において、デュアル空間(ビット)パターンプリフェッチャは、回転、ビット単位の論理和、およびビット単位の論理積のようなビットオペレーションを使用して、低ストレージコストでカバレッジおよび正確性の両方を動的に向上させ、DRAM帯域幅ヘッドルームによってその性能をスケールする軽量な空間領域プリフェッチャである。
【0041】
特定の実施形態において、デュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)は、以下の技術革新に寄与する:
一実施形態において、デュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)は、カバレッジ、正確性、およびストレージについて同時に最適化するために2つの変調ビットパターンを採用する。ビットパターンは、ページ内のそれらのトリガリングオフセットに対してそれらを回転することにより格納される。これは、トリガリングオフセットから全ての可能なデルタを効果的にキャプチャする。一実施形態において、ビットパターンは、ストレージを低減し、2つのパターンを同時に使用することを可能とするために、より低い(例えば64Bの)粒度ではなく、より高い(例えば、128Bの)粒度で圧縮されて格納される。一実施形態において、カバレッジバイアスパターンは、例えば、単純なビット単位のANDオペレーションを通じて再帰ビットを保持する第2の正確性バイアスパターンと共に、単純なビット単位のORオペレーションの使用を通じてビット/予測を付加する。さらに、一実施形態において、帯域幅を追跡し、カバレッジおよび正確性を測定する方法は、ランタイムにおける最良の予測候補の動的選択を可能とする。
【0042】
本明細書に開示されるようなデュアル空間パターンプリフェッチャの重要な区別として、メモリ帯域幅を増大させることに伴う性能におけるスケーリングがある。これは、従来のプリフェッチャが実現していないと考えられる。
【0043】
本明細書に開示されるデュアル空間パターンプリフェッチャは、以下の実施形態において、アドレスアクセスストリームからより多くのパターンを抽出し(従って、プリフェッチカバレッジを増大させ)、メモリ帯域幅ヘッドルームに動的に適応する。
【0044】
特定の実施形態において、トリガアクセスの周囲にアンカーされる空間ビットパターン表現は、トリガからの全てのデルタ(ローカルおよびグローバル)を効果的にキャプチャし、さもなければ機械内における順序変更により難読化されるパターンをあらわにする。
【0045】
一実施形態において、プリフェッチは、プログラムによりアクセスされる将来のアドレスを予測する投機実行メカニズムである。これらアドレスアクセスパターンは、様々な形態(例えば、フルキャッシュラインアドレス、2KB/4KB領域におけるオフセット、または連続するオフセットの間のデルタなど)で表現されることができ、繰り返しパターンをあらわにする最良のチャンスを有するアドレスアクセスパターンを選択することは、プリフェッチカバレッジおよび性能を向上させるのに役立ち得る。アクセスのグローバルビューまたは累積ビューを使用している場合に明らかなアドレスアクセスにおけるパターンは、連続アクセスの間のデルタの制限された低レベルのビューが利用される場合には、可視ではないかもしれない。
【0046】
図1は、本開示の実施形態に係る、プリフェッチ回路120を有するマルチプルコアハードウェアプロセッサ102のブロックダイアグラム100を示す。任意のプロセッサが、プリフェッチ回路、例えば、以下に論じられるプロセッサを含んでよい。図1は、例えば、キャッシュコヒーレンシ階層における、マルチプルプロセッサコア(コアAおよびコアB)ならびにキャッシュの複数レベル(L1、L2、およびL3)の実施形態を例示する。2つのコアが描写されるが、単一または2つ以上のコアが、利用されてもよい。複数レベルのキャッシュが描写されるが、単一または任意の数のキャッシュが、利用されてもよい。キャッシュは、任意の様式で、例えば物理的または論理的に集中または分散したキャッシュとして構成されてよい。
【0047】
ある実施形態では、プロセッサ、例えば、図面に示されるプロセッサコアを含むプロセッサもしくは複数のプロセッサ、または任意の他のプロセッサなどが、1つまたは複数のキャッシュを含んでもよい。図1は、3つのレベル(例えば、レベル1(L1)、2(L2)、および3(L3))のキャッシュの実施形態を示す。プロセッサは、少なくとも1つのコアおよび少なくとも1つのアンコアを含んでよい。一実施形態において、マルチプルコア(コアAおよびB)は、単一のプロセッサ102のものである。コア(例えば、コアAおよびコア)は、命令を実行すべく、プロセッサのコンポーネントを含んでよい。アンコアは、コアにない全てのロジックを含み得る。プロセッサコア(例えば、コアA)は、例えば、レベル1命令キャッシュ(L1I)108およびレベル1データキャッシュ(L1D)110などの構成要素を含んでよい。コア(例えば、コアA)は、例えば、アドレス生成ユニット(AGU)112、トランスレーションルックアサイドバッファ(TLB)114、およびレベル2キャッシュ(L2)116などの構成要素を含んでよい。コアは、キャッシュを他のコアと共有してよいし、あるいは共有しなくてもよい。例えば、コアAおよびコアBは、レベル3キャッシュ(L3)118を共有し、L2 116またはL1(208、210)を共有しなくてよい。コアは、これらの構成要素の任意の組み合わせを含んでよく、あるいはこれらの構成要素のうちのどれも含まなくてもよい。プロセッサ102(例えば、コアAおよびコアB)は、例えば、矢印によって示されるように、システムメモリ124内のデータにアクセス(例えば、データをロードおよびストア)し得る。一実施形態において、システムメモリ124が、例えば、キャッシュ(例えば、プロセッサ102上のキャッシュ)にアクセスするコアよりも遅いアクセスおよび/またはサイクルタイムにおいて、バスを通じてコアと通信する。システムメモリ124は、例えば、プリフェッチ命令の実行の前にシステムメモリ124にロードされる、多次元アレイ126を含んでよい。
【0048】
アドレス生成ユニット(例えば、AGU112)、例えば、アドレス計算ユニット(ACU)は、例えば、コアが、システムメモリにアクセスすることを可能にするために、メモリ(例えば、システムメモリ124)にアクセスするために使用されるアドレスを計算するプロセッサ(例えば、コア)の内部の実行ユニットを指し得る。一実施形態において、AGUは、アドレスストリーム(例えば、式)を入力として受け取り、そのストリームについての(例えば、仮想)アドレスを出力する。AGU(例えば、回路)は、例えば、それの加算器、乗算器、シフタ、回転器等を利用して、例えば、加算、減算、モジュロ演算、またはビットシフトなどの算術演算を行い得る。
【0049】
トランスレーションルックアサイドバッファ(例えば、TLB114)は、仮想アドレスを、(例えば、システムメモリの)物理アドレスへと変換してよい。TLBは、(例えば、最近使用された)仮想から物理へのメモリアドレス変換を格納するためのデータテーブルを含んでもよい。例えば、その結果、物理メモリアドレスを取得するために、存在する各仮想アドレスについての変換が実行される必要がなくなる。仮想アドレスエントリがTLBにない場合、プロセッサは、仮想から物理へのメモリアドレス変換を判定するために、ページウォークを実行してよい。
【0050】
プリフェッチ回路120は、例えば、コアの機能ユニット(例えば、実行ユニット、算術ロジックユニット(ALU)、AGU、TLB等)を利用しない、別個の機能回路(例えば、ユニット)であってよい。プリフェッチ回路は、プリフェッチ命令により利用されてよい。プリフェッチ回路は、本明細書で論じられるプリフェッチを実行すべく、回路(例えば、ハードウェアロジック回路)を含んでよい。プリフェッチ回路は、(例えば、コアから別個の)プロセッサの一部であってよい。プリフェッチ回路は、例えば、限定されるものではないが、リングネットワークなどの通信リソースを介して、プロセッサのコアと通信し得る。プロセッサ102は、(例えば、プロセッサの一部としての)メモリコントローラおよび/または相互接続を介して、システムメモリ124および/またはキャッシュ(例えば、図1におけるL1、L2、もしくはL3)と通信し得る。プリフェッチ回路120は、システムメモリ124内の多次元アレイ126からキャッシュ(例えば、図1におけるL1、L2、またはL3)にロード(例えば、コピー)されるべき要素の多次元ブロックのシステムメモリアドレスを出力し得る。プリフェッチ回路120は、システムメモリアドレスをプロセッサ102のメモリコントローラ(例えば、図12Bにおけるメモリユニット1270)に出力し得る。
【0051】
図2は、本開示の実施形態に係る、ローカルおよびグローバルデルタをキャプチャする、(円で囲まれたように示される)トリガアクセスにアンカーされた空間ビットパターン206を示す。図2は、空間的領域内の(例えば、各々が一意のアクセスシグネチャを有する)複数セットアクセスおよび様々なフォーマットにおけるそれらの表現の例を示す。領域への第1のアクセスは、「トリガ」アクセスと称され、黒い円でマーク付けされる。例えば、ストリーム202のアクセスストリームAにおける第1エントリ「02」はページAにおけるキャッシュライン2のアクセスを示しており、アクセスストリームAにおける第2エントリ「06」は、ページAにおけるキャッシュライン6のアクセスを示している、等。図2において、ページBからEに対するアクセスセットは、それらの空間的領域において同一のトリガオフセットを有し、異なる時間順序で同一のオフセット全てにタッチする。そのような変動は、キャッシュ/メモリサブシステムにおけるアービトレーションおよびスケジューリングに起因する順序変更のアーチファクトであり得る。アクセスシーケンスがより長いほど、特定の実施形態における変動の確率がより高くなる。特定の実施形態において、連続デルタ204が使用されるが、シングル空間ビットパターンにより表現されることができる場合、これらのアクセスすべては、異なる表現を有する。例えば、トリガオフセット1を有するアクセスセットBおよびアクセスセットC2つのデルタ表現(それぞれ、+4、-1、+7、+1、および+4、+6、-7、+8)を有するが、シングルビットパターン表現BP2(0100 1100 0001 1000)を有する。重要なことに、ビットパターンが回転され(例えば、左に)、「トリガ」オフセットに対してアンカーされている場合、例示の全てのセットは、単一の表現208(1001 1000 0011 0000)に一体化する。そのようなアンカーされたビットパターンは、図2におけるローカルな(連続的な)ものおよびグローバルな(累積的な)ものを含む、トリガアクセスに対する全てのデルタをキャプチャする。
【0052】
特定の実施形態において、一方がカバレッジに対してバイアスされ、他方が正確性に対してバイアスされた2つの空間ビットパターンを変調するために、ビット単位の論理和演算および論理積演算を使用することにより、カバレッジおよび正確性の両方が同時に最適化され得る。
【0053】
プログラムにおける複数のアクセスストリームは、類似している(例えば、ビットセット内で幾つかの交差を有する)が、正確に同一ではないアンカーされたビットパターンを有してよい。本明細書に開示されるようなデュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)は、例えば、一方がカバレッジに対してバイアスされ、他方が正確性に対してバイアスされた、2つの変調されたビットパターンを使用するという新規かつ直観的なアプローチを使用する。カバレッジは、予測されたパターンにビットを追加することにより増大する。これは、2つのビットパターンのビット単位の論理和演算を使用して実現され得る。例えば、パターンにおいて生じる保持ビットのみが正確性を追跡し、これは2つのパターンについてのビット単位の論理積演算を介して実現される。
【0054】
図3は、本開示の実施形態に係る、変調ビットパターン302を示す。図3は、3つの回転されたビットパターン314、316、318にマッピングされる複数の異なるアドレスストリームが、どのようにカバレッジバイアスパターン320(例えば、ビットベクトル)および正確性バイアスパターン322(例えばビットベクトル)に変調され得るかという例を示す。例えば、第1のセットのアクセスに対して第1デルタシーケンスセット306によって、第2のセットのアクセスに対して第2デルタシーケンスセット308によって、さらに第3のセットのアクセスに対して第3デルタシーケンスセット310によって、変調される。一セットのアクセスは、それぞれのアクセスを引き起こしたプログラムカウンタ(PC)(例えば、命令ポインタ)、例えば、それぞれのアクセスを引き起こした命令に対するPCに基づいてグループ化されてよい。一実施形態において、アクセスの各セットは、PCのビットの、同一の真部分集合(例えば、最下位または最上位ビット)、例えば、同一の8ビットを有する。
【0055】
図3において、第1セットのアクセスに対して、第1の回転され、アンカーされた空間ビットパターン314が第1デルタシーケンスセット306から形成され、第2セットのアクセスに対して、第2の回転され、アンカーされた空間ビットパターン316が第2デルタシーケンスセット308から形成され、第3セットのアクセスに対して、第3の回転され、アンカーされた空間ビットパターン318が第3デルタシーケンスセット310から形成され、例えば、図2を参照して論じられるように形成される。
【0056】
図3において、カバレッジに対する変調ビットパターン320(CovP)は、第1の回転され、アンカーされた空間ビットパターン314と、第2の回転され、アンカーされた空間ビットパターン316と、第3の回転され、アンカーされた空間ビットパターン318との(ビット単位の)論理和演算324を実行することにより生成される。図3において、正確性に対する変調ビットパターン322(AccP)は、第1の回転およびアンカーされた空間ビットパターン314、第2の回転およびアンカーされた空間ビットパターン316、ならびに第3の回転およびアンカーされた空間ビットパターン318への(ビット単位の)論理積演算324を実行することにより生成される。
【0057】
特定の実施形態において、これらのビットパターンの動的変調は、これらの基準が互いに不規則であるにもかかわらず、カバレッジおよび正確性の両方に対する同時最適化を可能にする。正確性およびカバレッジの定量的測定に結合された、利用可能なメモリ帯域幅ヘッドルームが、ランタイムにおいて、2つの異なるビットパターン候補(例えば、カバレッジバイアスまたは正確性バイアス)の間で動的に選択するのに使用され得る。
【0058】
特定の実施形態において、{+1}および{-1}は、プログラムにおける2つの最も頻繁に生じるオフセットデルタである。例えば、特定のプログラムにおいて、それらの2つのデルタは、平均して、時間の50%より多くに現れる。従って、各ビットが(例えば、64Bの)キャッシュライン粒度を表すビットパターンを格納することの代わりに、本明細書に開示されるようなデュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)は、各ビットが2つの隣接する(例えば64Bの)キャッシュライン(例えば、128Bの粒度)を表す圧縮されたビットパターンを格納してよい。これはパターンストレージ要求を直接半減させる。これは、理論的には、予測において50%までの不正確性を有する可能性があるが、本明細書に開示されるようなデュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)は、5個のキャッシュライン予測毎に1未満の誤予測を有し得る(例えば、20%未満の不正確性)。
【0059】
特定の実施形態において、物理ページにおけるマルチプルプリフェッチトリガは、プリフェッチカバレッジを増大させる。デュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)の特定の実施形態は、正確性の追跡および予測のスロットルをする尺度を組み込み、従って、フル物理ページ(例えば、4KB)およびハーフ物理ページ(例えば、2KB)の粒度の両方で、動的に予測を行うことができる。カバレッジバイアス(CovP)および正確性バイアス(AccP)パターンに対するより大きな(例えば、64bの)ビットパターンを使用する代わりに、本明細書の特定の実施形態は、それらの各々を2つのより小さな(例えば、32bの)パターンに分割する。
【0060】
一実施形態において、MeasureCovPおよびMeasureAccPと名付けられた、2つの(例えば、スモール2ビット)カウンタが、例えば、各ビットパターンに対するこれらのカウンタの両方を有する、各(例えば、32b)ビットパターンのカバレッジおよび正確性を追跡する。予測選択は、4KBページの2KB(例えば、32b)セグメント毎に作成されてもよい。
【0061】
本明細書に開示されるような、デュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)は、以下の構造を含んでよい:
複数(例えば、64)エントリ-ファーストインファーストアウト(FIFO)構造で、キャッシュ(例えば、L2キャッシュ)内の最も最近アクセスされた(例えば、4KB)ページを追跡するページバッファ(PB)と呼ばれる構造である。一実施形態において、各PBエントリは、(例えば、4KBの)物理ページによりインデックス付けされ、プログラムのロードおよびストアによって見られるキャッシュ(例えば、L2)アクセスを累積する(例えば、64bの)ビットパターン(非圧縮および未加工のアクセスパターン)をページに格納する。シグネチャおよびアンカーアクセスビットパターンを生成するために、(例えば、8bの)ハッシュされプログラムカウンタ(PC)(例えば、命令ポインタ)、および、一つが物理ページの各(例えば、2KB)セグメントに対する、2つの(例えば、6bの)トリガリングオフセットを格納してよく、マルチプル(例えば、256)エントリシグネチャパターンテーブル(SPT)は、シグネチャおよびフォロワビットパターンの間の相関を格納する。特定の実施形態において、SPTは、シグネチャによりインデックス付けされる、直接マッピング構造である。一実施形態において、各SPTエントリは、以下の要素を格納する:
CovP(例えば、32b):カバレッジバイアス圧縮ビットパターン、
AccP(例えば、32b):正確性バイアス圧縮ビットパターン、
2×MeasureCovP(例えば、2×2b):物理ページ内の2KB領域に対するカバレッジフィードバックをそれぞれ追跡する、飽和カウンタ、
2×MeasureAccP(例えば、2×2b):物理ページ内の2KB領域に対する正確性フィードバックをそれぞれ追跡する、飽和カウンタ、
2×ORcount(例えば、2×2b):CovPの2つのセグメントのORオペレーションの数の追跡を維持するための飽和カウンタ、および
プリフェッチバッファ(例えば、16エントリ)―生成され、発行されるプリフェッチに対する2つの(例えば、64bの)ビットベクトルを保持する。
【0062】
図4Aは、本開示の実施形態に係るデュアル空間パターンプリフェッチャに対するフローダイアグラム401を示す。図4Bは、本開示の実施形態に係るデュアル空間パターンプリフェッチ回路400を示す。特定の実施形態において、図4Bにおけるようなプリフェッチ回路400は、例えば、アクセスアドレスを予測し、それらのアドレスに対するデータをキャッシュまたは複数のキャッシュへと(例えば、メモリから)運ぶべく、プリフェッチデータに含まれる。一実施形態において、図4Bにおけるプリフェッチ回路400は、図1におけるプリフェッチ回路120のインスタンスである。一実施形態において、図4Bにおけるプリフェッチ回路400は、図12Bにおけるプリフェッチ回路1278のインスタンスである。
【0063】
以下の例において、すべての所望アクセス403(例えば、L1キャッシュにおけるミスに対するL2キャッシュ所望アクセス)(例えば、プログラムアクセス404)は、物理ページ番号によりページバッファ402(PB)をルックアップ405する(段階1)。対応するエントリが発見される場合、デュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)は、PBエントリにおけるアクセスビットパターン内の適切なビット位置を設定409する。411におけるチェックとして、(例えば、4KBの)ページにおける各(例えば、2KBの)セグメントへの第1のアクセスが、プリフェッチをトリガする適格性を有する(段階2)。トリガリングアクセスではない場合、フローは、実行済421へと進行する。トリガアクセスであれば、このトリガアクセスのアクセスシグネチャ(例えば、プログラムカウンタ)(PC)はPBエントリ内に格納され、CovPおよびAccP予測と、それらの良さの尺度(MeasureCovPおよびMeasureAccPカウンタ)とを413で返すSPT406にインデックスするために使用される(段階3)。(例えば、図5に詳述される)選択フローは、システム帯域幅410および尺度を使用して、プリフェッチのための予測パターン412を(例えば、マルチプレクサ408を介して)選択する(段階4)。特定の実施形態において、この予測パターン412は、プリフェッチを発行する前に、回転された予測パターン416を生成するために、トリガアクセスオフセットに対して整列させるために回転回路414により回転される。417でチェックされたように、PBからのエビクション(段階5)において、各トリガ(例えば、2KBセグメントごと)に対して、格納されたビットパターンがトリガオフセットにアンカーするように回転され、格納されたトリガアクセスシグネチャ(例えば、PC)を使用してSPTにハッシュ化され、パターンおよびカウンタが419で更新される。407においてPBヒットがない場合、415において、新たなPBエントリがページバッファ402に挿入される。
【0064】
一実施形態において、各エントリ(例えば、テーブル-行マトリクス内の行)は、(i)物理ページID番号(例えば、ページバッファをルックアップする場合に、ページの識別のために使用される)、(ii)ページに対する空間ビットパターン(例えば、空間アクセスストリーム情報を表すビットベクトル、例えば、これはアクセスされたキャッシュラインを1、それ以外の場合は0として示す)(例えば、これは、回転され、SPTのCovPおよびAccPパターンを更新するために使用されるであろう、パターンである)、(iii)セグメントへのトリガリング(例えば、第1の)アクセスのプログラムカウンタ(PC)(例えば、SPTへのインデックス付けをするために使用される)、および/または(iv)セグメントへのトリガリング(例えば、第1の)アクセスのキャッシュラインオフセットを含む。表1は、例示の値を有するページバッファにおける2つのエントリと、下線を引かれて示されるトリガアクセスとの例を示す。
【0065】
表1:例示のページバッファフォーマット。
【表1】
【0066】
表2は、シグネチャ予測テーブル(SPT)における単一エントリの例を示す。
【表2】
【0067】
表1および表2を参照したオペレーションの例は、ページ0x65への新たなアクセスを検出することであり、この新しいアクセスは、0x7FFECCAのPCを有する命令からのものであり、それは、ページ内の第4(例えば、0~Nからインデックスされ、Nは1より大きい正の整数である)のキャッシュラインへのものであり、これは、トリガリングアクセス(例えば、ページのこのセグメントへの第1のアクセス)(例えば、表1にアクセスすることから検出されるように)である。次に、PC0x7FF3CCAの(例えば、より下位の真部分集合の)ビットを使用して、SPT(例えば、表2における)において、ルックアップが実行され(例えば、最下位8ビットを使用する場合、SPTのルックアップエントリ0xCA)、SPTルックアップは、CovPおよびAccPパターンの両方をもたらす。例えば、システム帯域幅に基づいて使用するために、それらの1つを取り出す。特定の実施形態において、取り出されるCovPまたはAccPパターンは、トリガアクセスのキャッシュラインオフセット(例えば、下線1で示されるように表1からの例では4である)によりここで右へと回転される。図4Bの特定の実施形態において、プリフェッチ回路400は、回転された予測パターン416を出力する。
【0068】
特定の実施形態において、この回転された予測パターン内のものの位置は、キャッシュラインに対して発行されるプリフェッチである(例えば、ゼロに対応するキャッシュラインに対して発行されるプリフェッチを有しない)。次に、SPTが更新されてよい。
[SPT更新フェーズ]
【0069】
特定の実施形態において、各SPT更新は、3つのビットパターンの情報を有する:
(1)実際のプログラムアクセス(例えば、空間アクセス)ビットパターン(例えば、犠牲PBエントリから来ている)、
(2)SPTエントリ内に格納されるCovP、および
(3)そのSPTエントリ内に格納されるAccP。
【0070】
デュアル空間パターンプリフェッチャの特定の実施形態(例えば、プリフェッチ回路)は、以下の表3に示されるように、(ビットパターン内に設定されたビットの数をカウントする)ポップカウント(PoPCount)の2つの比により、CovPおよびAccPのカバレッジおよび正確性のメトリックを個別に測定する。
【0071】
表3:単純ビットオペレーションを通じたプログラムカバレッジおよび予測正確性の例示の測定。
【表3】
【表4】
【0072】
図5は、本開示の実施形態に係るカバレッジバイアス変調ビットパターン(CovP)502および正確性バイアス変調ビットパターン(AccP)504を更新する回路を示す。デュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)の特定の実施形態は、以下のように、計算された比率に基づいて、格納されたCovPおよびAccPビットパターンを変調する:
CovP変調:CovPは、実際のプログラム(図5におけるPROGRAMパターン514)アクセスパターンを用いて、格納されたCovPパターン(図5におけるCovPパターン510)にビット単位の論理和演算506によりビットを加える。しかしながら、チェックされていない数のORオペレーションは、結果的にパターン内のすべてのビットを設定し得るので、特定の実施形態では、特定の数の(例えば、3の)ORオペレーションに制限する(例えば、2bの飽和カウンタOrCountによって追跡される)。OrCountは、ORオペレーションが予測パターンに任意のビットを加えるたびにインクリメントされる。CovPの良さを定量化すべく、デュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)の特定の実施形態では、CovP予測正確性が閾値AccThr未満であるか、またはCovPからのプログラムカバレッジが閾値CovThr未満である場合にいつでもインクリメントされる(例えば、2b)飽和カウンタMeasureCovPを採用する。これにより、MeasureCovPが飽和され、現在の帯域幅利用率が第1の閾値(例えば、75%)(例えば、最も高い四分位)より上であるか、またはカバレッジがより低い閾値(例えば、50%)未満(例えば、3回までのORオペレーションにもかかわらず)ままであるかのいずれかである場合に、CovPをインカミングプログラムパターンにリセットすることが可能になる。特定の実施形態は、AccThrおよびCovThrの両方に対し、50%四分位の閾値を使用する。従って、特定の実施形態は、カバレッジおよび正確性を同時に最適化するために2つの変調空間ビットパターンを更新する。
AccP変調:実施形態において、正確性バイアスビットパターンは、ビットパターンにおいて再帰ビットを保持することを要求し、これはビット単位の論理積演算508により実現され得る。特定の実施形態において、AccPにおける再帰的なANDオペレーションではなく、更新のたびに、AccPは、インカミングプログラムアクセスビットパターン(図5におけるプログラムパターン514)およびCovP(カバレッジバイアスパターン)(図5におけるCovPパターン510)のビット単位のANDオペレーションにより置き換えられる。これは、ビットパターンの中で連続した再帰カウントを有するビットのみを効果的に保持する。MeasureCovPと同様に、本明細書の特定の実施形態では、AccPの良さを追跡するために(例えば、2bの)飽和カウンタMeasureAccPを使用する。MeasureAccPは、AndP予測正確性が閾値(例えば、50%)未満の場合にインクリメントされ、そうでない場合にデクリメントされる。MeasureAccPは、一実施形態において、帯域幅利用率が高く、不正確性が高い場合に、予測を完全にスロットルダウンするために使用される。
【0073】
図6は、本開示の実施形態に係るカバレッジバイアス変調ビットパターン(CovP)と正確性バイアス変調ビットパターン(AccP)との間で選択するフローダイアグラムを示す。図6は、予測についてCovPおよびAccPの間で使用される例示のフローを示す。602において帯域幅利用率が最も高い四分位(75%)にある場合、デュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)の特定の実施形態では、MeasureAccPが飽和していない場合に604においてAccPを選択する。帯域幅利用率が606において二番目に高い四分位(50%および75%の間)にある場合、デュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)の特定の実施形態では、MeasureCovPが飽和している(例えば、CovPはここでの所望の使用に対して不正確すぎることを意味する)場合には608においてAccPを選択し、そうでない場合にはCovPを選択する。帯域幅利用率が50%未満である場合、デュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)の特定の実施形態では、単にCovPを使用する。これらの数値は例示であり、他の閾値が利用されてもよい。このモードにおけるあらゆる汚染の影響を最小化するために、MeasureCovPが飽和している(CovPが不正確であることを意味する)場合、デュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)の特定の実施形態では、オンダイ(例えば、L2および/またはL3)キャッシュにおいてこれらのプリフェッチを不安定に(例えば、ゼロエイジで)埋める。
【0074】
図7は、本開示の実施形態に係るデュアル空間パターンプリフェッチャに対するストレージの、例示のサイズテーブル700を示す。表700は、例示のページバッファ702(PB)に対するエントリと、例示のシグネチャ予測テーブル704(SPT)とを含む。
【0075】
図8は、本開示の実施形態に係るフローダイアグラム800である。描写されるフロー800は、プロセッサによってキャッシュラインを格納するキャッシュにアクセスすること802と、シングルアクセスシグネチャに対するキャッシュへのキャッシュラインアクセスおよびページを追跡すること804と、複数のページの各ページに対するキャッシュラインアクセスに対して、各ページに対する第1のキャッシュラインアクセスにシフトされた空間ビットパターンを生成すること806と、複数のシングル空間ビットパターンを形成するために、同一の空間ビットパターンを有する空間ビットパターンの各々に対して、シングルアクセスシグネチャに対するシングル空間ビットパターンを生成すること808と、シングルアクセスシグネチャに対する第1の変調ビットパターンを生成するために、複数のシングル空間ビットパターンの論理和演算を実行すること810と、シングルアクセスシグネチャに対する第2の変調ビットパターンを生成するために、複数のシングル空間ビットパターンの論理積演算を実行すること812と、シングルアクセスシグネチャに対するプリフェッチ要求を受信すること814と、閾値を超えていない場合に第1の変調されたビットパターンを使用し、閾値を超えた場合に第2の変調されたビットパターンを使用して、プリフェッチ要求に対して、メモリからキャッシュラインをキャッシュにプリフェッチするプリフェッチオペレーションを実行すること816とを含む。
【0076】
従って、本明細書に開示されるデュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)の実施形態は、別のプリフェッチャに対してプロセッサ性能における大幅な向上を実現するために、利用される帯域幅がピークに近い場合に、カバレッジをブーストして高正確性にスロットルダウンすることにより、メモリ帯域幅の増加に伴って性能をスケールする能力を有する。例えば、増大し続けるメモリ帯域幅を最大限に利用するために性能をスケール(例えば、他のプリフェッチャがそうする能力がない)し、ビット単位オペレーションANDおよびORを通じて2つのビットパターンを変調してカバレッジおよび正確性を同時に最適化し、新規であるが効率的に実装される、帯域幅を追跡し、予測パターンのカバレッジおよび正確性を測定する方法を使用するデュアル空間パターンプリフェッチャ(例えば、プリフェッチ回路)を提供して、ランタイムにおいて最良の予測候補の動的選択を可能にすることによる。
【0077】
上記において使用されている例示的なアーキテクチャ、システム等は、以下に詳述される。
【0078】
開示される技術の少なくとも幾つかの実施形態は、以下の例を鑑みて説明され得る。
【0079】
(例1)
メモリおよびキャッシュラインを格納するキャッシュにアクセスするプロセッサコアと、
上記メモリから上記キャッシュへとキャッシュラインをプリフェッチするプリフェッチ回路であって、
シングルアクセスシグネチャのための上記キャッシュへのキャッシュラインアクセスおよびページを追跡し、
複数のページの各ページに対する上記キャッシュラインアクセスに対して、各ページに対する第1のキャッシュラインアクセスにシフトされる空間ビットパターンを生成し、
同一の空間ビットパターンを有する上記空間ビットパターンの各々に対する上記シングルアクセスシグネチャに対するシングル空間ビットパターンを生成して、複数のシングル空間ビットパターンを形成し、
上記複数のシングル空間ビットパターンの論理和演算を実行して、上記シングルアクセスシグネチャに対する第1の変調ビットパターンを生成し、
上記複数のシングル空間ビットパターンの論理積演算を実行して、上記シングルアクセスシグネチャに対する第2の変調ビットパターンを生成し、
上記シングルアクセスシグネチャに対するプリフェッチ要求を受信し、
閾値を超過していない場合に上記第1の変調ビットパターンを使用し、閾値を超過している場合に上記第2の変調ビットパターンを使用して、上記プリフェッチ要求に対するプリフェッチオペレーションを実行する、プリフェッチ回路と、
を備える、装置。
(例2)
上記シングルアクセスシグネチャは、シングル命令ポインタ値である、
例1に記載の装置。
(例3)
上記プリフェッチ要求は、上記キャッシュのデータのミスを有する(例えば、上記ミスを有する上記キャッシュは第1レベルキャッシュである)、
例1に記載の装置。
(例4)
上記閾値は、上記メモリの帯域幅利用率閾値である、
例1に記載の装置。
(例5)
上記プリフェッチ回路はさらに、上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理和演算の結果によって、上記第1の変調ビットパターンを更新する、
例1に記載の装置。
(例6)
上記実際のプログラムアクセスビットパターンは、犠牲ページバッファエントリのためのものである、
例5に記載の装置。
(例7)
上記プリフェッチ回路はさらに、上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する上記実際のプログラムアクセスビットパターンとの論理積演算の結果によって、上記第2の変調ビットパターンを更新する、
例5に記載の装置。
(例8)
上記プリフェッチ回路はさらに、上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンの論理積演算の結果によって、上記第2の変調ビットパターンを更新する、
例1に記載の装置。
(例9)
プロセッサにより、キャッシュラインを格納するキャッシュにアクセスする段階と、
シングルアクセスシグネチャに対する上記キャッシュへのキャッシュラインアクセスおよびページを追跡する段階と、
複数のページの各ページに対する上記キャッシュラインアクセスに対して、各ページに対して第1のキャッシュラインアクセスにシフトされる空間ビットパターンを生成する段階と、
同一の空間ビットパターンを有する上記空間ビットパターンの各々に対する上記シングルアクセスシグネチャに対するシングル空間ビットパターンを生成して、複数のシングル空間ビットパターンを形成する段階と、
上記複数のシングル空間ビットパターンの論理和演算を実行して、上記シングルアクセスシグネチャに対する第1の変調ビットパターンを生成する段階と、
上記複数のシングル空間ビットパターンの論理積演算を実行して、上記シングルアクセスシグネチャに対する第2の変調ビットパターンを生成する段階と、
上記シングルアクセスシグネチャに対するプリフェッチ要求を受信する段階と、
閾値を超過していない場合に上記第1の変調ビットパターンを使用し、上記閾値を超過している場合に上記第2の変調ビットパターンを使用して、上記プリフェッチ要求に対するプリフェッチオペレーションを実行して、キャッシュラインをメモリから上記キャッシュへとプリフェッチする段階と、
を備える、方法。
(例10)
上記シングルアクセスシグネチャは、シングル命令ポインタ値である、
例9に記載の方法。
(例11)
上記プリフェッチ要求は、上記キャッシュにおけるデータのミスを含む、
例9に記載の方法。
(例12)
上記閾値を、上記メモリの帯域幅利用率閾値として設定する段階をさらに備える、
例9に記載の方法。
(例13)
上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理和演算の結果によって、上記第1の変調ビットパターンを更新する段階をさらに備える、
例9に記載の方法。
(例14)
上記実際のプログラムアクセスビットパターンは、犠牲ページバッファエントリのためのものである、
例13に記載の方法。
(例15)
上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する上記実際のプログラムアクセスビットパターンとの論理積演算の結果によって、上記第2の変調ビットパターンを更新する段階をさらに備える、
例13に記載の方法。
(例16)
上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理積演算の結果によって、上記第2の変調ビットパターンを更新する段階をさらに備える、
例9に記載の方法。
(例17)
機械により実行された場合、上記機械に、
プロセッサにより、キャッシュラインを格納するキャッシュにアクセスする段階と、
シングルアクセスシグネチャに対する上記キャッシュへのキャッシュラインアクセスおよびページを追跡する段階と、
複数のページの各ページに対する上記キャッシュラインアクセスに対して、各ページの第1のキャッシュラインアクセスにシフトされる空間ビットパターンを生成する段階と、
同一の空間ビットパターンを有する上記空間ビットパターンの各々に対する上記シングルアクセスシグネチャに対するシングル空間ビットパターンを生成して、複数のシングル空間ビットパターンを形成する段階と、
上記複数のシングル空間ビットパターンの論理和演算を実行して、上記シングルアクセスシグネチャに対する第1の変調ビットパターンを生成する段階と、
上記複数のシングル空間ビットパターンの論理積演算を実行して、上記シングルアクセスシグネチャに対する第2の変調ビットパターンを生成する段階と、
上記シングルアクセスシグネチャに対するプリフェッチ要求を受信する段階と、
閾値を超過していない場合に上記第1の変調ビットパターンを使用し、上記閾値を超過している場合に上記第2の変調ビットパターンを使用して、上記プリフェッチ要求に対するプリフェッチオペレーションを実行して、キャッシュラインをメモリから上記キャッシュへとプリフェッチする段階と、
を有する方法を実行させるプログラムコードを格納する、
非一時的機械可読媒体。
(例18)
上記シングルアクセスシグネチャは、シングル命令ポインタ値である、
例17に記載の非一時的機械可読媒体。
(例19)
上記プリフェッチ要求は、前記キャッシュにおけるデータのミスを含む、
例17に記載の非一時的機械可読媒体。
(例20)
上記方法は、上記閾値を、上記メモリの帯域幅利用率閾値として設定する段階をさらに有する、
例17に記載の非一時的機械可読媒体。
(例21)
上記方法は、上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理和演算の結果によって、上記第1の変調ビットパターンを更新する段階をさらに有する、
例17に記載の非一時的機械可読媒体。
(例22)
上記実際のプログラムアクセスビットパターンは、犠牲ページバッファエントリのためのものである、
例21に記載の非一時的機械可読媒体。
(例23)
上記方法は、上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する上記実際のプログラムアクセスビットパターンとの論理積演算の結果によって、上記第2の変調ビットパターンを更新する段階をさらに有する、
例21に記載の非一時的機械可読媒体。
(例24)
上記方法は、上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理積演算の結果によって、上記第2の変調ビットパターンを更新する段階をさらに有する、
例17に記載の非一時的機械可読媒体。
【0080】
さらに別の実施形態において、装置は、コードを格納するデータストレージデバイスを備える。コードは、ハードウェアプロセッサによって実行された場合に、本明細書に開示される任意の方法をハードウェアプロセッサに実行させる。装置は、詳細な説明に説明されたものと同様であってよい。方法は、詳細な説明に説明されたものと同様であってよい。
【0081】
命令セットは、1または複数の命令フォーマットを含んでよい。所与の命令フォーマットは、とりわけ、実行されるべきオペレーション(例えば、オペコード)およびそのオペレーションが実行されるべきオペランドを指定する様々なフィールド(例えば、ビットの数、ビットの位置)、ならびに/または他のデータフィールド(例えば、マスク)を定義することができる。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)の定義を通じてさらに細分化される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義され(含まれるフィールドは通常同一の順序であるが、含まれるフィールドが少ないので、少なくともいくつかは異なるビット位置を有する)、かつ/または所与のフィールドが異なって解釈されるように定義されてよい。従って、ISAの各命令は、所与の命令フォーマットを用いて(また、定義されている場合には、当該命令フォーマットの命令テンプレートのうちの所与の1つにおいて)表現され、オペレーションおよびオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと、当該オペコードを指定するためのオペコードフィールドおよびオペランド(ソース1/デスティネーションおよびソース2)を選択するためのオペランドフィールドを含む命令フォーマットとを有する。命令ストリーム内でのこのADD命令の発生は、特定のオペランドを選択するオペランドフィールド内に特定の内容を有することになる。アドバンストベクトル拡張(AVX)(AVX1およびAVX2)と称され、ベクトル拡張(VEX)コーディングスキームを使用する一連のSIMD拡張機能がリリースおよび/または公開されている(例えば、2018年11月のインテル(登録商標)64およびIA-32アーキテクチャソフトウェアデベロッパーズマニュアル並びに2018年10月のインテル(登録商標)アーキテクチャ命令セット拡張プログラミングリファレンスを参照)。
[例示的命令フォーマット]
【0082】
本明細書に説明される命令の実施形態は、異なるフォーマットで具現化され得る。また、例示的なシステム、アーキテクチャ、およびパイプラインが以下に詳述される。命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されてもよいが、詳述されたものに限定されるものではない。
[汎用ベクトルフレンドリ命令フォーマット]
【0083】
ベクトルフレンドリ命令フォーマットは、ベクトル命令のために適した命令フォーマットである(例えば、ベクトルオペレーションに特有の特定のフィールドが存在する)。ベクトルおよびスカラオペレーションの両方がベクトルフレンドリ命令フォーマットによりサポートされる実施形態が説明されるが、代替的な実施形態は、ベクトルフレンドリ命令フォーマットによるベクトルオペレーションのみを用いる。
【0084】
図9A図9Bは、本開示の複数の実施形態に係る汎用ベクトルフレンドリ命令フォーマットおよびこれらの命令テンプレートを示すブロックダイアグラムである。図9Aは、本開示の実施形態に係る汎用ベクトルフレンドリ命令フォーマットおよびそのクラスAの命令テンプレートを示すブロック図であり、図9Bは、本開示の実施形態に係る汎用ベクトルフレンドリ命令フォーマットおよびそのクラスBの命令テンプレートを示すブロック図である。具体的には、クラスAおよびクラスBの命令テンプレート用の汎用ベクトルフレンドリ命令フォーマット900が定義され、それらの両方が非メモリアクセス905命令テンプレートおよびメモリアクセス920命令テンプレートを含まない。ベクトルフレンドリ命令フォーマットの文脈における汎用という用語は、あらゆる特定の命令セットに結び付けられていない命令フォーマットを指す。
【0085】
本開示の実施形態では、ベクトルフレンドリ命令フォーマットが、32ビット(4バイト)または64ビット(8バイト)データ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)(したがって、64バイトのベクトルは、16個のダブルワードサイズの要素または代替的に8クワッドワードサイズの要素のいずれか一方から構成される)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する64バイトのベクトルオペランド長(またはサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する32バイトのベクトルオペランド長(またはサイズ)、および、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)または8ビット(1バイト)データ要素幅(またはサイズ)を有する16バイトのベクトルオペランド長(またはサイズ)をサポートすることが説明される一方、代替的な実施形態より多い、より多い、より少ないまたは異なるデータ要素幅(例えば、128ビット(16バイト)のデータ要素幅)を有する、より多い、より少ないおよび/または異なるベクトルオペランドサイズ(例えば、256バイトのベクトルオペランド)をサポートしてよい。
【0086】
図9AのクラスA命令テンプレートは、以下を含む。1)メモリアクセスなし905命令テンプレート内には、メモリアクセスなし、フルラウンド制御タイプオペレーション910命令テンプレートおよびメモリアクセスなし、データ変換タイプオペレーション915命令テンプレートが示されており、2)メモリアクセス920命令テンプレート内には、メモリアクセス、一時的925命令テンプレートおよびメモリアクセス、非一時的930命令テンプレートが示されている。図9BのクラスB命令テンプレートは、以下を含む。1)メモリアクセスなし905命令テンプレート内には、メモリアクセスなし、書き込みマスク制御、部分ラウンド制御タイプオペレーション912命令テンプレートおよびメモリアクセスなし、書き込みマスク制御、vsizeタイプオペレーション917命令テンプレートが示されており、2)メモリアクセス920命令テンプレート内には、メモリアクセス、書き込みマスク制御927命令テンプレートが示されている。
【0087】
汎用ベクトルフレンドリ命令フォーマット900は、図9A図9Bに示される順序で以下に列挙される次のフィールドを含む。
【0088】
フォーマットフィールド940-このフィールド内の特定の値(命令フォーマット識別子の値)は、ベクトルフレンドリ命令フォーマット、従って命令ストリーム内のベクトルフレンドリ命令フォーマット内の命令の発生を一意に識別する。このように、このフィールドは、汎用ベクトルフレンドリ命令フォーマットのみを有する命令セットに必要ではないという意味で任意選択的である。
【0089】
ベースオペレーションフィールド942-その内容は、異なるベースオペレーションを区別する。
【0090】
レジスタインデックスフィールド944-その内容は、直接またはアドレス生成を通じて、レジスタ内またはメモリ内にあっても、ソースおよびデスティネーションオペランドの位置を指定する。これらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)のレジスタファイルからN個のレジスタを選択するのに十分な数のビットを含む。一実施形態において、Nは最大3つのソースレジスタおよび1つのデスティネーションレジスタであってよく、一方で、代替的な実施形態は、それより多いまたは少ないソースレジスタおよびデスティネーションレジスタをサポートしてよい(例えば、最大2つのソースをサポートしてよく、この場合、これらのソースのうちの1つがデスティネーションとしても動作する。最大3つのソースをサポートしてよく、この場合、これらのソースのうちの1つがデスティネーションとしても動作する。最大2つのソースおよび1つのデスティネーションをサポートしてよい)。
【0091】
修飾子フィールド946-その内容は、メモリアクセスを指定する汎用ベクトル命令フォーマットの命令の発生を、指定しないものから区別する、つまり、メモリアクセスなし905命令テンプレートとメモリアクセス920命令テンプレートとの間で区別する。メモリアクセスオペレーションは、メモリ階層に対して読み込みおよび/または書き込みを行う(場合によってはレジスタ内の値を用いてソースおよび/またはデスティネーションアドレスを指定する)が、メモリアクセスなしオペレーションはこれを行わない(例えば、ソースおよびデスティネーションがレジスタである)。一実施形態において、このフィールドはまた、メモリアドレス計算を実行するために、3つの異なる態様の間から選択する一方、代替的な実施形態では、メモリアドレス計算を実行するために、より多い、より少ないまたは異なる態様をサポートしてよい。
【0092】
拡張オペレーションフィールド950-その内容は、ベースオペレーションに加え、様々な異なるオペレーションのうちどれが実行されるべきかを区別する。このフィールドは、コンテキストに特有である。本開示の一実施形態において、このフィールドは、クラスフィールド968、アルファフィールド952、およびベータフィールド954に分割される。拡張オペレーションフィールド950は、共通グループのオペレーションが2つ、3つ、または4つの命令ではなく、単一の命令で実行されることを可能にする。
【0093】
スケールフィールド960-その内容は、メモリアドレス生成のための(例えば、2scale×インデックス+ベースを用いるアドレス生成のための)インデックスフィールドの内容をスケーリングすることを可能にする。
【0094】
変位フィールド962A-その内容は、メモリアドレス生成の一部として(例えば、2scale×インデックス+ベース+変位を使用するアドレス生成のために)使用される。
【0095】
変位ファクタフィールド962B(変位フィールド962Aが変位ファクタフィールド962Bの直上に並置されているが、これはその一方または他方が用いられることを示すことに留意されたい)-その内容は、アドレス生成の一部として用いられ、メモリアクセスのサイズ(N)によりスケーリングされるべき変位ファクタを指定し、-ここでNは、当該メモリアクセスにおけるバイト数である(例えば、2scale×インデックス+ベース+スケーリングされた変位を用いるアドレス生成について)。冗長下位ビットは無視され、従って、有効アドレスの計算に用いられる最終的な変位を生成するために、変位ファクタフィールドの内容にはメモリオペランドの合計サイズ(N)が乗算される。Nの値は、(本明細書において後述される)フルオペコードフィールド974およびデータ操作フィールド954Cに基づいて、ランタイムにおいてプロセッサハードウェアによって決定される。変位フィールド962Aおよび変位ファクタフィールド962Bは、それらがメモリアクセスなし905の命令テンプレートに用いられないという意味で任意選択的であり、および/または、異なる実施形態では、2つのうちの一方のみを実装してもよいし、どちらも実装しなくてもよい。
【0096】
データ要素幅フィールド964-その内容は、複数のデータ要素幅のうちどれが用いられるべきかを区別する(いくつかの実施形態では全ての命令について、他の実施形態では一部の命令のみについて)。このフィールドは、1つのデータ要素幅のみがサポートされる場合、および/またはオペコードの何らかの態様を使用してデータ要素幅がサポートされる場合には必要とされないという意味で、任意選択的である。
【0097】
書き込みマスクフィールド970-その内容は、データ要素位置に基づいて、デスティネーションベクトルオペランド内のそのデータ要素位置がベースオペレーションおよび拡張オペレーションの結果を反映するか否かを制御する。クラスA命令テンプレートがマージング-書き込みマスキングをサポートする一方で、クラスB命令テンプレートはマージング-書き込みマスキングおよびゼロイング-書き込みマスキングの両方をサポートする。マージングする場合、ベクトルマスクは、任意のオペレーションの実行中、デスティネーションにおける要素の任意のセットが更新されないように保護されることを可能にする(ベースオペレーションおよび拡張オペレーションによって指定される)。他の一実施形態においては、対応するマスクビットが0を有する場合、デスティネーションの各要素の古い値が保持される。これと対照的に、ゼロイングの場合、ベクトルマスクは、任意のオペレーションの実行中、デスティネーションにおける要素の任意のセットがゼロイングされることを可能にする(ベースオペレーションおよび拡張オペレーションによって指定される)。一実施形態においては、対応するマスクビットが0値を有する場合、デスティネーションの要素は0に設定される。この機能のサブセットは、実行されているオペレーションのベクトル長(つまり、修飾されている要素の最初から最後までの範囲)を制御する能力である。しかしながら、修飾された要素が連続している必要はない。従って、書き込みマスクフィールド970は、ロード、ストア、算術、論理等を含む部分的なベクトルオペレーションを可能にする。書き込みマスクフィールド970の内容が用いられる書き込みマスクを含む多数の書き込みマスクレジスタのうちの1つを選択する(したがって、書き込みマスクフィールド970の内容は、実行対象のそのマスキングを間接的に識別する)本開示の実施形態が説明される一方、代替的な実施形態では、代わりにまたは追加的に、マスク書き込みフィールド970の内容が実行されるマスキングを直接指定することを可能にする。
【0098】
即値フィールド972-その内容は、即値の指定を可能にする。このフィールドは即値をサポートしない汎用ベクトルフレンドリフォーマットの実装には存在せず、このフィールドは即値を使用しない命令内には存在しないという意味において、このフィールドは、任意選択的なものである。
【0099】
クラスフィールド968-その内容は、異なるクラスの命令の間を区別する。図9A図9Bを参照すると、このフィールドの内容はクラスAおよびクラスB命令の間の選択を行う。図9A図9Bにおいて、角の丸い四角形を用いて、特定の値がフィールド(例えば、図9A図9Bにおける、クラスフィールド968のそれぞれクラスA 968AおよびクラスB 968B)に存在することを示す。
[クラスAの命令テンプレート]
【0100】
クラスAのメモリアクセスなし905の命令テンプレートの場合、アルファフィールド952はRSフィールド952Aとして解釈され、その内容は、異なる拡張オペレーションタイプのうちどれが実行されるべきかを区別し(例えば、ラウンド952A.1およびデータ変換952A.2がメモリアクセスなし、ラウンドタイプオペレーション910およびメモリアクセスなし、データ変換タイプオペレーション915命令テンプレートに対してそれぞれ指定される)、その一方でベータフィールド954は、指定されたタイプのオペレーションのどれが実行されるべきかを区別する。メモリアクセスなし905命令テンプレートには、スケールフィールド960、変位フィールド962A、および変位スケールフィールド962Bは存在しない。
[メモリアクセスなし命令テンプレート-フルラウンド制御タイプオペレーション]
【0101】
メモリアクセスなし、フルラウンド制御タイプオペレーション910命令テンプレートでは、ベータフィールド954はラウンド制御フィールド954Aとして解釈され、ラウンド制御フィールド954Aの内容は静的ラウンドを提供する。説明される本開示の実施形態において、ラウンド制御フィールド954Aは、全浮動小数点例外抑制(SAE)フィールド956およびラウンドオペレーション制御フィールド958を含み、代替的な実施形態では、これらの概念の両方を同じフィールドにエンコードすることをサポートしてもよく、または、これらの概念/フィールドの一方または他方のみを有してよい(例えば、ラウンドオペレーション制御フィールド958のみを有してよい)。
【0102】
SAEフィールド956-その内容は、例外イベント報告を無効化すべきか否かを区別する。SAEフィールド956の内容が、抑制が可能であることを示す場合、所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、任意の浮動小数点例外ハンドラを立ち上げない。
【0103】
ラウンドオペレーション制御フィールド958-その内容は、ラウンディングオペレーションのグループ(例えば、切り上げ、切り捨て、ゼロへの丸めおよび最近値への丸め)のうちどれが実行されるかを区別する。従って、ラウンドオペレーション制御フィールド958は、命令ベースでラウンドモードを変更することを可能にする。プロセッサがラウンディングモードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンドオペレーション制御フィールド950の内容は、そのレジスタ値をオーバライドする。
[メモリアクセスなし命令テンプレート-データ変換タイプオペレーション]
【0104】
メモリアクセスなし、データ変換タイプオペレーション915命令テンプレートでは、ベータフィールド954はデータ変換フィールド954Bとして解釈され、その内容は、多数のデータ変換のうちどれが実行されるべきかを区別する(例えば、データ変換なし、スウィズル、ブロードキャスト)。
【0105】
クラスAのメモリアクセス920命令テンプレートの場合、アルファフィールド952はエビクションヒントフィールド952Bとして解釈され、その内容は、エビクションヒントのうちどれが使用されるべきかを区別し(図9Aでは、メモリアクセス、一時的925命令テンプレートおよびメモリアクセス、非一時的930命令テンプレートのために一時的952B.1および非一時的952B.2がそれぞれ指定される)、その一方でベータフィールド954はデータ操作フィールド954Cとして解釈され、その内容は、多数のデータ操作オペレーション(プリミティブとしても知られる)のうちどれが実行されるべきかを区別する(例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン)。メモリアクセス920命令テンプレートは、スケールフィールド960、および任意選択的に変位フィールド962Aまたは変位スケールフィールド962Bを含む。
【0106】
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロードおよびメモリへのベクトルストアを実行する。通常のベクトル命令の場合と同様、ベクトルメモリ命令は、データ要素単位でデータをメモリから/メモリへ転送し、実際に転送される要素は、書き込みマスクとして選択されるベクトルマスクの内容によって規定されている。
[メモリアクセス命令テンプレート-一時的]
【0107】
一時的データとは、キャッシュによる利益を受けられるほどすぐに再利用される可能性の高いデータである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、それを異なる方法で実装してよい。
[メモリアクセス命令テンプレート-非一時的]
【0108】
非一時的データとは、第1レベルキャッシュにおけるキャッシュにより利益を受けられるほどすぐに再利用される可能性が低いデータであり、エビクションが優先されるべきである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含め、それを異なる方法で実装してよい。
[クラスBの命令テンプレート]
【0109】
クラスBの命令テンプレートの場合において、アルファフィールド952は、書き込みマスク制御(Z)フィールド952Cとして解釈され、その内容は、書き込みマスクフィールド970によって制御される書き込みマスキングがマージングであるべきかまたはゼロイングであるべきかを区別する。
【0110】
クラスBのメモリアクセスなし905の命令テンプレートの場合、ベータフィールド954の一部はRLフィールド957Aとして解釈され、その内容は、異なる拡張オペレーションタイプのうちどれが実行されるべきかを区別し(例えば、ラウンド957A.1およびベクトル長(VSIZE)957A.2がそれぞれ、メモリアクセスなし、書き込みマスク制御、部分ラウンド制御タイプオペレーション912命令テンプレートおよびメモリアクセスなし、書き込みマスク制御、VSIZEタイプオペレーション917命令テンプレートについて指定される)、一方でベータフィールド954の残りは、指定されたタイプのオペレーションのどれが実行されるべきかを区別する。メモリアクセスなし905命令テンプレートには、スケールフィールド960、変位フィールド962A、および変位スケールフィールド962Bは存在しない。
【0111】
メモリアクセスなし、書き込みマスク制御、部分ラウンド制御タイプオペレーション910命令テンプレートでは、ベータフィールド954の残りはラウンドオペレーションフィールド959Aとして解釈され、例外イベント報告は無効化される(所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、任意の浮動小数点例外ハンドラを立ち上げることもない)。
【0112】
ラウンドオペレーション制御フィールド959A―まさにラウンドオペレーション制御フィールド958と同様に、その内容は、ラウンディングオペレーションのグループ(例えば、切り上げ、切り捨て、ゼロへの丸めおよび最近値への丸め)のうちどれが実行されるかを区別する。従って、ラウンドオペレーション制御フィールド959Aは、命令ベースでラウンドモードの変更を可能にする。プロセッサがラウンディングモードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンドオペレーション制御フィールド950の内容は、そのレジスタ値をオーバライドする。
【0113】
メモリアクセスなし、書き込みマスク制御、VSIZEタイプオペレーション917命令テンプレートでは、ベータフィールド954の残りはベクトル長フィールド959Bとして解釈され、その内容は、多数のデータベクトル長のうちどれが実行されるべきかを区別する(例えば、128、256、または512バイト)。
【0114】
クラスBのメモリアクセス920命令テンプレートの場合、ベータフィールド954の一部はブロードキャストフィールド957Bとして解釈され、その内容は、ブロードキャストタイプのデータ操作オペレーションが実行されるべきか否かを区別し、ベータフィールド954の残りはベクトル長フィールド959Bとして解釈される。メモリアクセス920の命令テンプレートは、スケールフィールド960を含み、任意選択的に、変位フィールド962Aまたは変位スケールフィールド962Bを含む。
【0115】
汎用ベクトルフレンドリ命令フォーマット900に関連して、フォーマットフィールド940、ベースオペレーションフィールド942およびデータ要素幅フィールド964を含む。フルオペコードフィールド974が示されている。フルオペコードフィールド974がこれらのフィールドの全てを含む一実施形態が示されているが、それらの全てをサポートしない実施形態では、フルオペコードフィールド974は、これらのフィールドの全てより少ないフィールドを含む。フルオペコードフィールド974は、オペレーションコード(オペコード)を提供する。
【0116】
拡張オペレーションフィールド950、データ要素幅フィールド964、および書き込みマスクフィールド970は、これらの特徴が汎用ベクトルフレンドリ命令フォーマットにおいて命令ベースで指定されることを可能にする。
【0117】
書き込みマスクフィールドおよびデータ要素幅フィールドの組み合わせは、それらが異なるデータ要素幅に基づいてマスクを適用できるようにするという点で、型付き命令を作成する。
【0118】
クラスAおよびクラスB内で見出される様々な命令テンプレートは、様々な状況で有益である。本開示のいくつかの実施形態において、異なるプロセッサまたはプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートしてよい。例えば、汎用コンピューティング向けの高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよく、主にグラフィックスおよび/または科学的(スループット)コンピューティング向けのコアは、クラスAのみをサポートしてよく、両方向けのコアは、両方をサポートしてよい(勿論、コアは、両方のクラスからの複数のテンプレートおよび命令のいくつかの組み合わせを有するが、両方のクラスからの複数のテンプレートおよび命令の全てが本開示の範囲内にある訳ではない)。また、単一のプロセッサが複数のコアを含んでもよく、それらの全てが同じクラスをサポートするか、または異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックスコアおよび汎用コアをもつプロセッサでは、主としてグラフィックスおよび/または科学コンピューティング向けの複数のグラフィックスコアのうちの1つがクラスAのみをサポートすることができ、汎用コアのうちの1つまたは複数が、クラスBのみをサポートする汎用コンピューティング向けのアウトオブオーダ実行およびレジスタリネーミングを有する高性能汎用コアであってもよい。別個のグラフィクスコアを有しない別のプロセッサは、クラスAおよびクラスBの両方をサポートする1または複数の汎用インオーダまたはアウトオブオーダコアを含んでよい。勿論、1つのクラスからの機能は、本開示の異なる実施形態における他のクラスで実装されてもよい。高レベル言語で書かれたプログラムは、1)実行用のターゲットプロセッサによってサポートされるクラスの命令のみを有する形式、または2)すべてのクラスの命令の異なる組み合わせを使用して書かれた代替ルーチンを有し、現在コードを実行しているプロセッサによってサポートされる命令に基づいて実行するようにルーチンを選択する制御フローコードを有する形式を含む、様々な異なる実行可能形式に入れられる(例えば、ジャストインタイムコンパイルされるか、または静的コンパイルされる)はずである。
[例示的な特定のベクトルフレンドリ命令フォーマット]
【0119】
図10Aおよび図10Bは、本開示の実施形態に係る例示的な特定のベクトルフレンドリ命令フォーマットを示すブロック図である。図10Aおよび図10Bは特定のベクトルフレンドリ命令フォーマット1000を示す。特定のベクトルフレンドリ命令フォーマット1000は、位置、サイズ、解釈およびフィールド順序に加え、これらのフィールドの一部の値を指定するという意味において特定的である。特定のベクトルフレンドリ命令フォーマット1000は、x86命令セットを拡張するために使用されてよく、従って、いくつかのフィールドは、既存のx86命令セットおよびその拡張(例えば、AVX)で使用されるフィールドと類似または同一である。このフォーマットは、拡張を伴う既存のx86命令セットのプレフィクスエンコーディングフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド、および即値フィールドとの整合性を維持する。図9Aおよび図9Bのフィールドが図10Aおよび図10Bのどのフィールドにマッピングされるかが示されている。
【0120】
本開示の複数の実施形態は、例示の目的のため、汎用ベクトルフレンドリ命令フォーマット900の文脈で、特定のベクトルフレンドリ命令フォーマット1000を参照して説明されるが、本開示は、特許請求の範囲に記載されたものを除いて、特定のベクトルフレンドリ命令フォーマット1000に限定されるものではないことを理解されたい。例えば、汎用ベクトルフレンドリ命令フォーマット900は、様々なフィールドに対する様々な可能なサイズを想定するが、特定のベクトルフレンドリ命令フォーマット1000は、特定のサイズのフィールドを有するように示される。具体的な例として、データ要素幅フィールド964は、特定のベクトルフレンドリ命令フォーマット1000において、1ビットフィールドとして示されているが、本開示は、そのように限定されない(すなわち、汎用ベクトルフレンドリ命令フォーマット900は、他のサイズのデータ要素幅フィールド964を想定する)。
【0121】
汎用ベクトルフレンドリ命令フォーマット900は、図10Aに示される順で以下に列挙される次のフィールドを含む。
【0122】
EVEXプレフィクス(バイト0-3)1002―4バイト形式でエンコードされる。
【0123】
フォーマットフィールド940(EVEXバイト0、ビット[7:0])―第1のバイト(EVEXバイト0)は、フォーマットフィールド940であり、それは、0x62(本開示の一実施形態において、ベクトルフレンドリ命令フォーマットを区別するために用いられる特有の値)を含む。
【0124】
第2~第4のバイト(EVEXバイト1~3)は、特定の機能を提供する多数のビットフィールドを含む。
【0125】
REXフィールド1005(EVEXバイト1、ビット[7-5]―EVEX.Rビットフィールド(EVEXバイト1、ビット[7]-R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]-X)、および957BEXバイト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を加算することによって形成されてよい。
【0126】
REX´フィールド910―これはREX´フィールド910の第1の部分であり、拡張された32レジスタセットの上位16または下位16のいずれかをエンコードするのに用いられるEVEX.R´ビットフィールド(EVEXバイト1、ビット[4]-R´)である。本開示の一実施形態において、このビットは、リアルオペコードバイトが62であるBOUND命令と(周知のx86 32ビットモードにおいて)区別するために、以下に示されるような他のものと共にビット反転フォーマットに格納されるが、MOD R/Mフィールド(以下で説明される)では、MODフィールド内の値11を受け入れない。本開示の代替的な実施形態では、このビットおよび以下に示される他のビットを反転フォーマットに格納しない。下位16個のレジスタのエンコードには、1の値を用いる。換言すると、R'Rrrrは、EVEX.R'、EVEX.R、および他のフィールドの他のRRRを組み合わせることにより形成される。
【0127】
オペコードマップフィールド1015(EVEXバイト1、ビット[3:0]-mmmm)―この内容は、暗黙の先頭オペコードバイト(0F、0F38、または0F3)をエンコードする。
【0128】
データ要素幅フィールド964(EVEXバイト2、ビット[7]-W)―EVEX.Wという表記によって表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットデータ要素または64ビットデータ要素のいずれか)を規定するために用いられる。
【0129】
EVEX.vvvv1020(EVEXバイト2、ビット[6:3]-vvvv)―EVEX.vvvvの役割は以下を含んでもよい。1)EVEX.vvvvは、反転(1の補数)形式で指定された最初のソースレジスタオペランドをエンコードし、2つ以上のソースオペランドを有する命令に有効である。2)EVEX.vvvvは、特定のベクトルシフトに対して1の補数形式で指定されるデスティネーションレジスタオペランドをエンコードする。3)EVEX.vvvvはいかなるオペランドもエンコードせず、フィールドは予約され、1111bを含むべきである。従って、EVEX.vvvvフィールド1020は、反転(1の補数)形式で格納される第1のソースレジスタ指定子の4つの下位ビットをエンコードする。命令に応じて、追加の異なるEVEXビットフィールドが使用され、指定子サイズを32個のレジスタに拡張する。
【0130】
EVEX.U968クラスフィールド(EVEXバイト2、ビット[2]-U)―EVEX.U=0の場合、これは、クラスAまたはEVEX.U0を示す。EVEX.U=1の場合、これは、クラスBまたはEVEX.U1を示す。
【0131】
プレフィクスエンコーディングフィールド1025(EVEXバイト2、ビット[1:0]‐pp)―これは、ベースオペレーションフィールドの追加のビットを提供する。EVEXプレフィクスフォーマットにおけるレガシSSE命令のサポートの提供に加え、これはまた、SIMDプレフィクスのコンパクト化の利点を有する(SIMDプレフィクスを表すために1バイトを要求する代わりに、EVEXプレフィクスは2ビットのみを要求する)。一実施形態において、レガシフォーマットおよびEVEXプレフィクスフォーマットの両方においてSIMDプレフィクス(66H、F2H、F3H)を使用するレガシSSE命令をサポートすべく、これらのレガシSIMDプレフィクスは、SIMDプレフィクスエンコーディングフィールドにエンコードされる。これらのレガシSIMDプレフィクスは、デコーダのPLAに提供される前に、ランタイムにおいてレガシSIMDプレフィクスに拡張される(よって、PLAは、変更なしで、これらのレガシ命令のレガシフォーマットおよびEVEXフォーマットの両方を実行できる)。より新しい命令ではEVEXプレフィクスエンコーディングフィールドの内容をオペコード拡張として直接使用できる。しかしながら、特定の実施形態では一貫性をもたせるために同様の方法で拡張するが、これらのレガシSIMDプレフィクスによって異なる意味が指定されることが可能になる。代替的な実施形態は、2ビットSIMDプレフィクスエンコーディングをサポートし、従って、拡張を必要としないようにPLAを再設計することができる。
【0132】
アルファフィールド952(EVEXバイト3、ビット[7]-EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask controlおよびEVEX.Nとしても知られ、また、αを用いて示される)―前述したように、このフィールドはコンテキストに特有である。
【0133】
ベータフィールド954(EVEXバイト3、ビット[6:4]-SSS、EVEX.s2-0、EVEX.r2-0、EVEX.rrl、EVEX.LL0、EVEX.LLBとしても知られ、また、βββを用いて示される)―前述したように、このフィールドは、コンテキストに特有である。
【0134】
REX´フィールド910―これは、REX´フィールドの残りであり、拡張された32個のレジスタセットの上位16または下位16のいずれかをエンコードするのに用いられ得るEVEX.V´ビットフィールド(EVEXバイト3、ビット[3]-V´)である。このビットは、ビット反転フォーマットで格納される。下位16個のレジスタをエンコードするために1の値が使用される。換言すると、EVEX.V'、EVEX.vvvvを組み合わせることにより、V'VVVVが形成される。
【0135】
書き込みマスクフィールド970(EVEXバイト3、ビット[2:0]―kkk)―その内容は、前述したように、書き込みマスクレジスタにおけるレジスタのインデックスを指定する。本開示の一実施形態において、特定の値EVEX.kkk=000は、特定の命令に用いられる書き込みマスクが存在しないことを示唆する特別な挙動を有する(これは、すべてのものに対してハードワイヤード書き込みマスク、または、マスキングハードウェアをバイパスするハードウェアの使用を含む様々な態様で実装され得る)。
【0136】
リアルオペコードフィールド1030(バイト4)は、オペコードバイトとしても知られる。オペコードの一部は、このフィールドにおいて指定される。
【0137】
MOD R/Mフィールド1040(バイト5)は、MODフィールド1042、Regフィールド1044、およびR/Mフィールド1046を含む。前述したように、MODフィールド1042の内容は、メモリアクセスオペレーションおよびメモリアクセスなしのオペレーションを区別する。Regフィールド1044の役割は、デスティネーションレジスタオペランド若しくはソースレジスタオペランドのいずれかをエンコードすること、または、オペコード拡張として扱われ、命令オペランドをエンコードするために使用されないこと、という2つの状況に要約できる。R/Mフィールド1046の役割は、メモリアドレスを参照する命令オペランドをエンコーディングすること、またはデスティネーションレジスタオペランド若しくはソースレジスタオペランドのいずれかをエンコーディングすることを含み得る。
【0138】
スケール、インデックス、ベース(SIB)バイト(バイト6)―前述したように、スケールフィールドの950の内容は、メモリアドレス生成について使用される。SIB.xxx1054およびSIB.bbb1056―これらのフィールドの内容は、レジスタインデックスXxxxおよびBbbbに関連して既に言及された。
【0139】
変位フィールド962A(バイト7-10):MODフィールド1042が10を含む場合、バイト7-10は変位フィールド962Aであり、これは、レガシ32ビット変位(disp32)と同じように機能し、バイト粒度で機能する。
【0140】
変位ファクタフィールド962B(バイト7)―MODフィールド1042が01を含む場合、バイト7は変位ファクタフィールド962Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)の位置と同じである。disp8は符号拡張されているので、-128バイトオフセットと127バイトオフセットとの間のアドレス指定のみしかできず、64バイトのキャッシュラインに関しては、disp8は、4つの本当に有用な値-128、-64、0、および64にのみ設定できる8ビットを使用し、より大きな範囲がしばしば必要とされるので、disp32が使用されるが、disp32は4バイトを必要とする。disp8およびdisp32とは対照的に、変位ファクタフィールド962Bは、disp8の再解釈であり、変位ファクタフィールド962Bを用いる場合、実際の変位は、変位ファクタフィールドの内容をメモリオペランドアクセスのサイズ(N)で乗算したものによって決定される。このタイプの変位は、disp8×Nと称される。これにより、平均命令長(変位に使用される単一バイトであるが、はるかに広い範囲を有する)が短くなる。そのような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であり、従って、アドレスオフセットの冗長下位ビットは、エンコードされる必要がないという仮定に基づく。換言すると、変位ファクタフィールド962Bは、レガシx86命令セットの8ビット変位を置換する。従って、変位ファクタフィールド962Bは、disp8がdisp8×Nにオーバーロードされる点のみを除いては、x86命令セットの8ビット変位と同じ方法でエンコードされる(よって、ModRM/SIBエンコーディングルールの変更はない)。換言すると、エンコーディングルールまたはエンコーディング長には変更がなく、ハードウェアによる変位値の解釈のみに変更がある(バイト単位のアドレスオフセットを得るべく、メモリオペランドのサイズによって変位をスケーリングする必要がある)。即値フィールド972は、前述したように動作する。
[フルオペコードフィールド]
【0141】
図10Bは、本開示の一実施形態に係るフルオペコードフィールド974を作成する特定のベクトルフレンドリ命令フォーマット1000のフィールドを示すブロック図である。具体的には、フルオペコードフィールド974は、フォーマットフィールド940、ベースオペレーションフィールド942、およびデータ要素幅(W)フィールド964を含む。ベースオペレーションフィールド942は、プレフィクスエンコーディングフィールド1025、オペコードマップフィールド1015、およびリアルオペコードフィールド1030を含む。
[レジスタインデックスフィールド]
【0142】
図10Cは、本開示の一実施形態に係るレジスタインデックスフィールド944を作成する特定のベクトルフレンドリ命令フォーマット1000のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド944は、REXフィールド1005、REX'フィールド1010、MODR/M.regフィールド1044、MODR/M.r/mフィールド1046、VVVVフィールド1020、xxxフィールド1054、およびbbbフィールド1056を含む。
[拡張オペレーションフィールド]
【0143】
図10Dは、本開示の一実施形態に係る拡張オペレーションフィールド950を作成する特定のベクトルフレンドリ命令フォーマット1000のフィールドを示すブロック図である。クラス(U)フィールド968が0を含む場合、EVEX.U0(クラスA968A)を意味し、1を含む場合は、EVEX.U1(クラスB968B)を意味する。U=0かつMODフィールド1042が11を含む(メモリアクセスなしのオペレーションを意味する)場合、アルファフィールド952(EVEXバイト3、ビット[7])-EH)は、rsフィールド952Aとして解釈される。rsフィールド952Aが1を含む場合(ラウンド952A.1)、ベータフィールド954(EVEXバイト3、ビット[6:4]-SSS)はラウンド制御フィールド954Aとして解釈される。ラウンド制御フィールド954Aは、1ビットのSAEフィールド956および2ビットのラウンドオペレーションフィールド958を含む。rsフィールド952Aが0を含む場合(データ変換952A.2)、ベータフィールド954(EVEXバイト3、ビット[6:4]‐SSS)は3ビットのデータ変換フィールド954Bとして解釈される。U=0、かつMODフィールド1042が00、01または10を含む(メモリアクセスオペレーションを意味する)場合、アルファフィールド952(EVEXバイト3、ビット[7]-EH)は、エビクションヒント(EH)フィールド952Bとして解釈され、ベータフィールド954(EVEXバイト3、ビット[6:4]-SSS)は、3ビットのデータ操作フィールド954Cとして解釈される。
【0144】
U=1の場合、アルファフィールド952(EVEXバイト3、ビット[7]-EH)は、書き込みマスク制御(Z)フィールド952Cとして解釈される。U=1であり、かつMODフィールド1042が11を含む(メモリアクセスなしのオペレーションを意味する)場合、ベータフィールド954の一部(EVEXバイト3、ビット[4]―S)は、RLフィールド957Aとして解釈される。これが1を含む場合(ラウンド957A.1)、ベータフィールド954の残り(EVEXバイト3、ビット[6‐5]―S2-1)は、ラウンドオペレーションフィールド959Aとして解釈され、一方でRLフィールド957Aが0を含む場合(VSIZE 957.A2)、ベータフィールド954の残り(EVEXバイト3、ビット[6‐5]―S2-1)は、ベクトル長フィールド959B(EVEXバイト3、ビット[6‐5]―L1-0)として解釈される。U=1であり、かつMODフィールド1042が00、01、または10を含む(メモリアクセスオペレーションを意味する)場合、ベータフィールド954(EVEXバイト3、ビット[6:4]―SSS)は、ベクトル長フィールド959B(EVEXバイト3、ビット[6‐5]―L1-0)およびブロードキャストフィールド957B(EVEXバイト3、ビット[4]―B)として解釈される。
[例示的なレジスタアーキテクチャ]
【0145】
図11は、本開示の一実施形態に係るレジスタアーキテクチャ1100のブロックダイアグラムである。示される実施形態において、512ビット幅の32個のベクトルレジスタ1110が存在する。これらのレジスタは、zmm0からzmm31として参照される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0~ymm16に重なっている。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0~xmm15に重なっている。特定のベクトルフレンドリ命令フォーマット1000は、以下の表に示されるようにこれらの重なったレジスタファイルに対して動作する。
【表5】
【0146】
換言すると、ベクトル長フィールド959Bは、最大長から1または複数の他のより短い長さまでの間から選択し、ここで、そのようなより短い長さの各々は、先行する長さの半分の長さであり、ベクトル長フィールド959Bを有しない命令テンプレートは、最大ベクトル長に対して動作する。さらに一実施形態において、特定のベクトルフレンドリ命令フォーマット1000のクラスB命令テンプレートは、パックドまたはスカラ単精度/倍精度浮動小数点データ、およびパックドまたはスカラ整数データに対して動作する。スカラオペレーションは、zmm/ymm/xmmレジスタにおける最下位のデータ要素の位置で実行されるオペレーションである。実施形態に応じて、より上位のデータ要素位置は、命令前と同じままであるか、またはゼロにされるかのいずれかである。
【0147】
書き込みマスクレジスタ1115―示される実施形態において、8個の書き込みマスクレジスタ(k0からk7)が存在し、その各々が64ビットのサイズである。代替的な実施形態において、書き込みマスクレジスタ1115は、16ビットのサイズである。前述したように、本開示の一実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして用いられることができず、通常k0を示すエンコーディングが書き込みマスクに用いられる場合、0xFFFFのハードワイヤード書き込みマスクを選択することで、その命令に対する書き込みマスキングを効果的に無効にする。
【0148】
汎用レジスタ1125―図示される実施形態において、メモリオペランドにアドレスを指定するために、既存のx86アドレス指定モードと共に用いられる16個の64ビット汎用レジスタがある。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8からR15という名称により参照される。
【0149】
MMXパックド整数フラットレジスタファイル1150がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)1145―図示される実施形態において、x87スタックは、x87命令セット拡張を用いて、32/64/80ビットの浮動小数点データに対するスカラ浮動小数点演算を実行するために用いられる8要素スタックであり、一方、MMXレジスタは、64ビットのパックド整数データに対するオペレーションを実行するために用いられ、同様に、MMXとXMMレジスタとの間で実行される一部のオペレーションに対するオペランドを保持するために用いられる。
【0150】
本開示の代替的な実施形態では、より広いまたはより狭いレジスタを使用してよい。さらに、本開示の代替的な実施形態は、より多くの、より少ない、または異なるレジスタファイルおよびレジスタを使用してよい。
[例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ]
【0151】
プロセッサコアは、異なる方法で、異なる目的のために、異なるプロセッサにおいて実装されてよい。例えば、そのようなコアの実装は、1)汎用コンピューティング向けの汎用インオーダコア、2)汎用コンピューティング向けの高性能汎用アウトオブオーダコア、3)主にグラフィックスおよび/または科学的(スループット)コンピューティング向けの特定用途向けコアを含んでよい。異なるプロセッサの実装は、1)汎用コンピューティング向けの1または複数の汎用インオーダコアおよび/または汎用コンピューティング向けの1または複数の汎用アウトオブオーダコアを含むCPU)、および2)主にグラフィックおよび/または科学(スループット)向けの1または複数の特定用途向けコアを含むコプロセッサを含んでよい。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、それは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同一のダイ上のコプロセッサ(この場合、そのようなコプロセッサは、場合によっては、例えば、統合グラフィックスおよび/または科学(スループット)ロジックなどの特定用途ロジックと称され、または、特定用途向けコアと称される)、および、4)説明されたCPUと同一のダイ上に含まれ得るシステムオンチップ(場合によっては、アプリケーションコアまたはアプリケーションプロセッサ、上述のコプロセッサおよび追加的な機能性と称される)を含んでよい。次に例示的なコアアーキテクチャが説明され、続いて例示的なプロセッサおよびコンピュータアーキテクチャが説明される。
[例示的なコアアーキテクチャ]
(インオーダおよびアウトオブオーダコアブロックダイアグラム)
【0152】
図12Aは、本開示の複数の実施形態に係る例示的なインオーダパイプラインと、例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインとの両方を示すブロック図である。図12Bは、本開示の実施形態によるインオーダアーキテクチャコアの例示的な実施形態と、プロセッサに含まれる例示的なレジスタリネーミングアウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。図12A図12Bの実線のボックスはインオーダパイプラインおよびインオーダコアを示し、一方で、破線のボックスの任意選択的な追加は、レジスタリネーミング、アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様はアウトオブオーダ態様のサブセットであると仮定して、アウトオブオーダ態様が説明される。
【0153】
図12Aにおいて、プロセッサパイプライン1200は、フェッチステージ1202、長さデコードステージ1204、デコードステージ1206、割り当てステージ1208、リネーミングステージ1210、スケジューリング(ディスパッチまたは発行としても知られる)ステージ1212、レジスタ読み取り/メモリ読み取りステージ1214、実行ステージ1216、ライトバック/メモリ書き込みステージ1218、例外処理ステージ1222、およびコミットステージ1224を含む。
【0154】
図12Bは、実行エンジンユニット1250に結合されるフロントエンドユニット1230を含むプロセッサコア1290を示し、これらの両方がメモリユニット1270に結合される。コア1290は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替的なコアタイプであってよい。さらに別のオプションとして、コア1290は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コアまたはグラフィックスコア等の特定用途向けコアであってよい。
【0155】
フロントエンドユニット1230には、命令キャッシュユニット1234に結合された分岐予測ユニット1232が含まれ、命令キャッシュユニット1234は命令トランスレーションルックアサイドバッファ(TLB)1236に結合され、TLB1236は命令フェッチユニット1238に結合され、命令フェッチユニット1238はデコードユニット1240に結合される。デコードユニット1240(またはデコーダもしくはデコーダユニット)は、複数の命令(例えばマクロ命令)をデコードし、1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または元の命令から復号され、または他の方法でこれを反映し、またはこれから派生した他の制御信号を、出力として生成してよい。デコードユニット1240は、様々な異なるメカニズムを用いて実装されてよい。適切なメカニズムの例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等を含む。一実施形態において、コア1290は、マイクロコードROM、または、特定のマクロ命令に対するマイクロコードを格納する(例えば、デコードユニット1240において、または、そうでなければフロントエンドユニット1230内の)他の媒体を含む。デコードユニット1240は、実行エンジンユニット1250内のリネーム/アロケータユニット1252へ結合される。
【0156】
実行エンジンユニット1250には、リタイアメントユニット1254と、1または複数のスケジューラユニット1256のセットとに結合された、リネーム/アロケータユニット1252が含まれる。スケジューラユニット1256は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット1256は、物理レジスタファイルユニット1258に結合される。物理レジスタファイルユニット1258の各々は、1つまたは複数の物理レジスタファイルを表す。異なる物理レジスタファイルは、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行される次の命令のアドレスである命令ポインタ)等、1または複数の異なるデータタイプを格納する。一実施形態において、物理レジスタファイルユニット1258は、ベクトルレジスタユニット、書き込みマスクレジスタユニットおよびスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供することができる。物理レジスタファイルユニット1258には、(例えば、リオーダバッファおよびリタイアメントレジスタファイルを使用する、将来ファイル、履歴バッファ、およびリタイアメントレジスタファイルを使用する、レジスタマップおよびレジスタのプールを使用する等して)レジスタリネーミングおよびアウトオブオーダ実行が実装され得る様々な方法を示すためにリタイアメントユニット1254が重ね合わされている。リタイアメントユニット1254および物理レジスタファイルユニット1258は、実行クラスタ1260に結合される。実行クラスタ1260は、1または複数の実行ユニット1262のセット、および、1または複数のメモリアクセスユニット1264のセットを含む。実行ユニット1262は、様々なオペレーション(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行し得る。いくつかの実施形態は、特定の機能または機能のセットに専用の多数の実行ユニットを含み得るが、他の実施形態は、1つのみの実行ユニット、または全てが全ての機能を実行する多数の実行ユニットを含んでもよい。特定の実施形態は特定のタイプのデータ/オペレーションに別個のパイプラインを作成するので(例えば、各々が自身のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリアクセスパイプライン、そして別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット1264を有する特定の実施形態が実装される)、スケジューラユニット1256、物理レジスタファイルユニット1258、および実行クラスタ1260は場合により複数であるように示されている。別個のパイプラインが使用される場合、これらのパイプラインのうち1または複数はアウトオブオーダ発行/実行であってよく、残りはインオーダであってよいことも理解されるべきである。
【0157】
メモリアクセスユニット1264のセットはメモリユニット1270に結合され、メモリユニット1270には、レベル2(L2)キャッシュユニット1276に結合されたデータキャッシュユニット1274に結合されたデータTLBユニット1272が含まれる。例示的な一実施形態において、メモリアクセスユニット1264は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、これらの各々は、メモリユニット1270内のデータTLBユニット1272に結合される。命令キャッシュユニット1234は、メモリユニット1270内のレベル2(L2)キャッシュユニット1276にさらに結合される。L2キャッシュユニット1276は、1または複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【0158】
特定の実施形態において、プリフェッチ回路1278は、例えば、アクセスアドレスを予測し、それらのアドレスに対するデータを(例えば、メモリ1280から)キャッシュまたは複数のキャッシュに運ぶために、プリフェッチデータに含まれる。一実施形態において、プリフェッチ回路1278は、図12Bにおけるプリフェッチ回路のインスタンスである。
【0159】
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン1200を実装することができる。1)命令フェッチ1238がフェッチステージ1202および長さデコーディングステージ1204を実行する。2)デコードユニット1240がデコードステージ1206を実行する。3)リネーム/アロケータユニット1252が割り当てステージ1208およびリネーミングステージ1210を実行する。4)スケジューラユニット1256がスケジュールステージ1212を実行する。5)物理レジスタファイルユニット1258およびメモリユニット1270がレジスタ読み取り/メモリ読み取りステージ1214を実行し、実行クラスタ1260が実行ステージ1216を実行する。6)メモリユニット1270および物理レジスタファイルユニット1258がライトバック/メモリ書き込みステージ1218を実行する。7)様々なユニットが例外処理ステージ1222に関与してもよい。8)リタイアメントユニット1254および物理レジスタファイルユニット1258がコミットステージ1224を実行する。
【0160】
コア1290は、本明細書で説明された命令を含む、1または複数の命令セット(例えば、(より新しいバージョンで追加されたいくつかの拡張を有する)x86命令セット、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM Holdingsの(NEONなどのオプションの追加拡張を有する)ARM命令セット)をサポートすることができる。一実施形態において、一実施形態において、コア1290は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートするロジックを含み、それにより、多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行できるようになる。
【0161】
コアはマルチスレッディング(2つまたはそれより多くの並列セットのオペレーションまたはスレッドを実行)をサポートしてよく、タイムスライスマルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングしているスレッドのそれぞれに対して、単一の物理コアが論理コアを提供する)、またはこれらの組み合わせ(例えば、タイムスライスフェッチおよびデコーディング、ならびにそれ以降のIntel(登録商標)ハイパースレッディング・テクノロジーなどの同時マルチスレッディング)を含む様々な方法でサポートしてよいことが理解されたい。
【0162】
レジスタリネーミングは、アウトオブオーダ実行の文脈で説明しているが、レジスタリネーミングはインオーダ・アーキテクチャで使用されてもよいことは、理解されるべきである。示されたプロセッサの実施形態はまた、別個の命令およびデータキャッシュユニット1234/1274および共有L2キャッシュユニット1276も含むが、代替的な実施形態は、例えばレベル1(L1)内部キャッシュ、または複数のレベルの内部キャッシュなど、命令およびデータの両方のための単一の内部キャッシュを有してもよい。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュの組み合わせを含んでもよい。あるいは、キャッシュのすべてがコアおよび/またはプロセッサの外部にあってもよい。
[具体的な例示的インオーダコアアーキテクチャ]
【0163】
図13A図13Bは、より具体的な例示的インオーダコアアーキテクチャのブロックダイアグラムを示す。当該コアは、チップ内のいくつかのロジックブロック(同じタイプおよび/または異なるタイプの他のコアを含む)のうちの1つであろう。ロジックブロックは、用途に応じて、高帯域幅の相互接続ネットワーク(例えば、リングネットワーク)を通じて、いくつかの固定機能ロジック、メモリ入出力インタフェース、および他の必要な入出力ロジックと通信する。
【0164】
図13Aは、本開示の複数の実施形態に係るシングルプロセッサコアを、そのオンダイ相互接続ネットワーク1302への接続およびそのレベル2(L2)キャッシュのローカルサブセット1304と共に示すブロックダイアグラムである。一実施形態において、命令デコードユニット1300は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1306は、スカラーおよびベクトルユニット内のキャッシュメモリへの低レイテンシアクセスを可能にする。一実施形態において、(設計の単純化のために)スカラユニット1308およびベクトルユニット1310は、別個のレジスタセット(それぞれ、スカラレジスタ1312およびベクトルレジスタ1314)を用いる。これらの間で転送されるデータは、レベル1(L1)キャッシュ1306のメモリに書き込まれてから再読み出しされるが、本開示の複数の代替的な実施形態は、異なるアプローチ(例えば、単一のレジスタセットを用いる、または書き込みおよび再読み出しを行うことなく、2つのレジスタファイル間におけるデータ転送を可能とする通信パスを含む)を用いてよい。
【0165】
L2キャッシュのローカルサブセット1304は、プロセッサコアごとに1つずつの別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、自身のL2キャッシュのローカルサブセット1304への直接アクセスパスを有する。プロセッサコアにより読み込まれたデータは、L2キャッシュサブセット1304に格納され、他のプロセッサコアが自身のローカルL2キャッシュサブセットにアクセスするのと並列的に、高速にアクセスされ得る。プロセッサコアにより書き込まれたデータは、自身のL2キャッシュサブセット1304に格納され、必要な場合、他のサブセットからフラッシュされる。リングネットワークは、共有データのコヒーレンシを保証する。リングネットワークは、プロセッサコア、L2キャッシュ、および他のロジックブロックなどのエージェントがチップ内で互いに通信することを可能にするために、双方向である。各リングデータパスは一方向当たり1012ビット幅である。
【0166】
図13Bは、本開示の複数の実施形態に係る図13Aにおけるプロセッサコアの一部の拡大図である。図13Bは、L1キャッシュ1304のL1データキャッシュ1306A部分、ならびにベクトルユニット1310およびベクトルレジスタ1314に関する更なる詳細を含む。具体的には、ベクトルユニット1310は、16幅ベクトル処理ユニット(VPU)(16幅ALU 1328を参照)であり、整数命令、単精度浮動命令、および倍精度浮動命令のうちの1または複数を実行する。VPUは、スウィズルユニット1320を用いたレジスタ入力のスウィズル、数値変換ユニット1322A-1322Bを用いた数値変換、および、メモリ入力に対する複製ユニット1324を用いた複製をサポートする。書き込みマスクレジスタ1326は、結果としてもたらされるベクトル書き込みをプレディケートすることを可能にする。
【0167】
図14は、本開示の複数の実施形態に係るプロセッサ1400のブロックダイアグラムであり、当該プロセッサは、1つより多くのコアを有してよく、統合メモリコントローラを有してよく、統合グラフィックスを有してよい。図14の実線のボックスは、シングルコア1402A、システムエージェント1410、1または複数のバスコントローラユニット1416のセットを有するプロセッサ1400を示し、その一方で破線のボックスの任意選択的な追加は、複数のコア1402A~1402N、システムエージェントユニット1410内の1または複数の統合メモリコントローラユニット1414のセット、および特定用途ロジック1408を有する代替的なプロセッサ1400を示す。
【0168】
従って、プロセッサ1400の異なる実装は、1)統合グラフィックスおよび/または科学技術(スループット)ロジックである特定用途ロジック1408(1または複数のコアを含んでよい)、および、1または複数の汎用コアであるコア1402A~1402N(例えば、汎用インオーダコア、汎用アウトオブオーダコア、その2つの組み合わせ)を有するCPU、2)グラフィックスおよび/または科学技術(スループット)を主に対象とする多数の特定用途向けコアであるコア1402A~1402Nを有するコプロセッサ、および、3)多数の汎用インオーダコアであるコア1402A~1402Nを有するコプロセッサを含んでよい。従って、プロセッサ1400は、汎用プロセッサ、コプロセッサ、または例えば、ネットワークもしくは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットMIC(many integrated core)コプロセッサ(30以上のコアを含む)、組み込みプロセッサ等の特定用途向けプロセッサであってよい。プロセッサは、1または複数のチップ上に実装されてよい。プロセッサ1400は、例えば、BiCMOS、CMOS、またはNMOSなどのいくつかのプロセス技術のいずれかを使用した1若しくは複数の基板の一部であってよく、かつ/またはその基板上に実装されてもよい。
【0169】
メモリ階層は、コア内にある1または複数のレベルのキャッシュと、共有キャッシュユニット1406のセットあるいは1または複数の共有キャッシュユニット1406と、統合メモリコントローラユニット1414のセットに結合された外部メモリ(不図示)とを含む。共有キャッシュユニットのセット1406は、レベル2(L2)、レベル3(L3)、レベル4(L4)、または他のレベルのキャッシュ等の1または複数の中間レベルキャッシュ、ラストレベルキャッシュ(LLC)、および/またはそれらの組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット1412は、統合グラフィックスロジック1408と、共有キャッシュユニットのセット1406と、システムエージェントユニット1410/統合メモリコントローラユニット1414とを相互接続するが、代替的な実施形態において、そのようなユニットを相互接続するための任意の数の周知技術を用いてよい。一実施形態において、コヒーレンシは、1または複数のキャッシュユニット1406とコア1402A~1402Nとの間で維持される。
【0170】
いくつかの実施形態において、コア1402A~1402Nのうちの1または複数は、マルチスレッディングが可能である。システムエージェント1410は、コア1402A~1402Nを調整および動作させるそれらのコンポーネントを含む。システムエージェントユニット1410は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでよい。PCUは、コア1402A~1402Nおよび統合グラフィックスロジック1408の電力状態を調整するのに必要なロジックおよびコンポーネントであってよく、あるいは当該ロジックおよび当該コンポーネントを含んでもよい。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
【0171】
コア1402A~1402Nは、アーキテクチャ命令セットに関して同種であっても異種であってもよい。すなわち、コア1402A~1402Nのうちの2つ以上は、同じ命令セットを実行可能であってよく、一方で、他のものは、その命令セットのうちの1つのサブセットまたは異なる命令セットのみを実行可能であってもよい。
[例示的なコンピュータアーキテクチャ]
【0172】
図15図18は、例示的なコンピュータアーキテクチャのブロックダイアグラムである。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、携帯型メディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスについて当技術分野で既知の他のシステム設計および構成も適している。一般的には、本明細書で開示されたプロセッサおよび/または他の実行ロジックを組み込むことが可能な多様なシステムまたは電子デバイスが概して適している。
【0173】
ここで図15を参照すると、本開示の一実施形態に係るシステム1500のブロックダイアグラムが示される。システム1500は、1または複数のプロセッサ1510、1515を含んでよく、これらはコントローラハブ1520に結合される。一実施形態において、コントローラハブ1520は、グラフィックスメモリコントローラハブ(GMCH)1590および入/出力ハブ(IOH)1550(別個のチップ上に存在してよい)を含む。GMCH1590は、メモリ1540およびコプロセッサ1545が連結されたメモリコントローラおよびグラフィックスコントローラを含む。IOH1550は、入/出力(I/O)デバイス1560をGMCH1590に連結する。代替的に、メモリコントローラおよびグラフィックスコントローラの一方または両方は、(本明細書で説明されているように)プロセッサ内に集積され、メモリ1540およびコプロセッサ1545は、プロセッサ1510および、IOH1550と共に単一チップ内にあるコントローラハブ1520に直接結合される。メモリ1540は、例えば、実行された場合に、プロセッサに本開示の任意の方法を実行させるためのコードを格納する、プリフェッチャコード1540Aを含んでよい。
【0174】
追加的なプロセッサ1515の任意選択的な性質が、図15において破線で示される。各プロセッサ1510、1515は、本明細書に説明される処理コアのうちの1または複数を含んでよく、何らかのバージョンのプロセッサ1400であってもよい。
【0175】
メモリ1540は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこれら2つの組み合わせであってもよい。少なくとも1つの実施形態について、コントローラハブ1520は、例えば、フロントサイドバス(FSB)などのマルチドロップバス、QuickPath相互接続(QPI)などのポイントツーポイントインタフェースまたは類似の接続1595を介してプロセッサ1510、1515と通信する。
【0176】
一実施形態において、コプロセッサ1545は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ等のような特定用途向けプロセッサである。一実施形態において、コントローラハブ1520は、統合グラフィックアクセラレータを含んでよい。
【0177】
物理リソース1510、1515の間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性、電力消費特性等を含む広範な価値基準の観点から様々な差異が存在し得る。
【0178】
一実施形態において、プロセッサ1510は、一般的なタイプのデータ処理オペレーションを制御する命令を実行する。命令内にコプロセッサ命令が組み込まれていてよい。プロセッサ1510は、これらのコプロセッサ命令を付属のコプロセッサ1545により実行されるべきタイプであるとして認識する。従って、プロセッサ1510は、コプロセッサバスまたは他の相互接続上において、これらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ1545に発行する。コプロセッサ1545は、受信したコプロセッサ命令を受け入れて実行する。
【0179】
ここで図16を参照すると、本開示の実施形態に係る、第1のより具体的な例示的システム1600のブロックダイアグラムが示される。図16に示されるように、マルチプロセッサシステム1600はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1650を介して結合される第1のプロセッサ1670と、第2のプロセッサ1680とを含む。プロセッサ1670および1680の各々は、何らかのバージョンのプロセッサ1400であってよい。本開示の一実施形態において、プロセッサ1670および1680はそれぞれ、プロセッサ1510および1515である。一方、コプロセッサ1638は、コプロセッサ1545である。別の実施形態において、プロセッサ1670および1680はそれぞれ、プロセッサ1510およびコプロセッサ1545である。
【0180】
プロセッサ1670およびプロセッサ1680は、それぞれ、統合メモリコントローラ(IMC)ユニット1672および統合メモリコントローラ(IMC)ユニット1682を含むものとして示されている。プロセッサ1670はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P-P)インタフェース1676および1678を含む。同様に、第2のプロセッサ1680は、P-Pインタフェース1686および1688を含む。プロセッサ1670、1680は、ポイントツーポイント(P-P)インタフェース1650を介し、P-Pインタフェース回路1678、1688を用いて情報を交換してよい。図16に示されるように、IMC1672および1682は、プロセッサをそれぞれのメモリ、すなわちメモリ1632およびメモリ1634に結合する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。
【0181】
プロセッサ1670、1680はそれぞれ、個々のP-Pインタフェース1652、1654を介し、ポイントツーポイントインタフェース回路1676、1694、1686、1698を用いて、チップセット1690と情報を交換することができる。チップセット1690は、任意選択的に、高性能インタフェース1639を介して、コプロセッサ1638と情報を交換してよい。一実施形態において、コプロセッサ1638は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、GPGPU、組み込みプロセッサ等のような特定用途向けプロセッサである。
【0182】
共有キャッシュ(不図示)は、いずれかのプロセッサ内、または両方のプロセッサの外側に含まれ得るが、プロセッサが低電力モードになった場合に一方または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、P-P相互接続を介してプロセッサと接続されてもよい。
【0183】
チップセット1690は、インタフェース1696を介して第1のバス1616に結合されてよい。一実施形態において、第1のバス1616はペリフェラルコンポーネントインターコネクト(PCI)バス、またはPCI Expressバス若しくは別の第3世代入出力相互接続バス等のバスであってよいが、本開示の範囲はそのようには限定されない。
【0184】
図16に示されるように、様々な入出力デバイス1614が、第1のバス1616を第2のバス1620に結合するバスブリッジ1618と共に、第1のバス1616に結合されてよい。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィックスアクセラレータまたはデジタル信号処理(DSP)ユニットなど)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどの1または複数の追加のプロセッサ1615が第1のバス1616に結合される。一実施形態において、第2のバス1620はローピンカウント(LPC)バスであってよい。一実施形態において、例えば、キーボードおよび/またはマウス1622、通信デバイス1627、ならびに命令/コードおよびデータ1630を含み得るディスクドライブまたは他の大容量ストレージデバイスなどのストレージユニット1628を含む、様々なデバイスが第2のバス1620に結合されてよい。さらに、オーディオ入出力1624は第2のバス1620に結合されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図16のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。
【0185】
ここで図17を参照すると、本開示の実施形態に係る第2のより具体的な例示的システム1700のブロックダイアグラムが示される。図16および図17における同様の要素には、同様の参照符号が付され、図16の特定の態様が、図17の他の態様を曖昧にすることを回避するために、図17から省略されている。
【0186】
図17は、プロセッサ1670、1680が、それぞれ統合メモリならびに入出力制御ロジック(「CL」)1672および1682を含んでよいことを示す。従って、CL1672、1682は、統合メモリコントローラユニットおよび入出力制御ロジックを含む。図17は、メモリ1632、1634のみがCL1672、1682に結合されるのではなく、入出力デバイス1714もまた、制御ロジック1672、1682に結合されることを示す。レガシ入出力デバイス1715は、チップセット1690に結合される。
【0187】
ここで図18を参照すると、本開示の実施形態に係るSoC1800のブロックダイアグラムが示される。図14の同様の要素には同様の参照符号が付されている。また、破線のボックスは、より高度なSoCにおける任意選択的な特徴である。図18において、相互接続ユニット1802が、1または複数のコア1402A~1402Nおよび共有キャッシュユニット1406のセットを含むアプリケーションプロセッサ1810と、システムエージェントユニット1410と、バスコントローラユニット1416と、統合メモリコントローラユニット1414と、統合グラフィックスロジック、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得るコプロセッサ1820のセットあるいは1または複数のコプロセッサ1820と、スタティックランダムアクセスメモリ(SRAM)ユニット1830と、ダイレクトメモリアクセス(DMA)ユニット1832と、1または複数の外部ディスプレイに結合するためのディスプレイユニット1840とに結合される。一実施形態において、コプロセッサ1820は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサまたは組み込みプロセッサ等の特定用途向けプロセッサを含む。
【0188】
本明細書に開示される(例えば、機構の)実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせで実装されてよい。本開示の実施形態は、少なくとも1つのプロセッサと、(揮発性メモリおよび不揮発性メモリおよび/またはストレージ要素を含む)ストレージシステムと、少なくとも1つの入力デバイスと、少なくとも1つの出力デバイスと、を備えるプログラマブルシステムで実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
【0189】
図16に示されたコード1630などのプログラムコードは、本明細書で説明された機能を実行し、出力情報を生成するために入力命令に適用されてよい。出力情報は、既知の様式で、1または複数の出力デバイスに適用されてよい。本出願の目的のために、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサのようなプロセッサを有する、任意のシステムを含む。
【0190】
プログラムコードは、処理システムと通信すべく、高レベル手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、所望に応じて、アセンブリ言語または機械言語で実装されてもよい。実際に、本明細書で説明される機構は、いかなる特定のプログラミング言語の範囲にも限定されない。いずれの場合でも、言語は、コンパイラ型言語またはインタプリタ型言語であってよい。
【0191】
少なくとも1つの実施形態の1つまたは複数の態様は、機械によって読み込まれた場合と、本明細書に説明される技術を実行させるためのロジックを機械に組み立てさせる、プロセッサ内の様々なロジックを表す機械可読媒体に格納された代表的な命令によって実装され得る。「IPコア」として知られるそのような表現は、有形の機械可読媒体に格納され、実際にロジックまたはプロセッサを製造する製造機械にロードするために様々な顧客または製造施設に供給されてもよい。
【0192】
そのような機械可読記憶媒体には、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスク読み出し専用メモリ(CD-ROM)、コンパクトディスクリライタブル(CD-RW)、および光磁気ディスクを含む任意の他のタイプのディスク、読み出し専用メモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)などのランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)、磁気カードもしくは光学式カード、または電子命令を格納するのに適した任意の他のタイプの媒体などの記憶媒体を含む、機械またはデバイスによって製造または形成された物品の非一時的有形構成が含まれてもよいが、それらに限定されない。
【0193】
従って、本開示の実施形態は、命令を含む、または、本明細書で説明される構造、回路、装置、プロセッサおよび/若しくはシステムの複数の機能を定義するハードウェア記述言語(HDL)のような設計データを含む、非一時的な有形の機械可読媒体をさらに含む。このような実施形態は、プログラム製品とも称され得る。
[(バイナリ変換、コード、モーフィング等を含む)エミュレーション]
【0194】
場合によっては、ソース命令セットからターゲット命令セットに命令を変換するために、命令コンバータが用いられてよい。例えば、命令コンバータは、命令を、コアによって処理される1または複数の他の命令に(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)変換し、モーフィングし、エミュレートし、または別の方法で変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせで実装されてよい。命令コンバータは、プロセッサ上にあっても、プロセッサ外にあっても、または部分的にプロセッサ上で部分的にプロセッサ外にあってもよい。
【0195】
図19は、本開示の複数の実施形態に係る、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロックダイアグラムである。図示された実施形態において、命令コンバータは、ソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてよい。図19は、高レベル言語1902のプログラムがx86コンパイラ1904を用いてコンパイルされ、少なくとも1つのx86命令セットコアを有するプロセッサ1916によってネイティブに実行され得るx86バイナリコード1906を生成し得ることを示す。少なくとも1つのx86命令セットコアを有するプロセッサ1916は、少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同じ結果を実現するために、(1)Intel(登録商標)x86命令セットコアの命令セットの大部分、または(2)少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサ上で動作することを目的としたオブジェクトコードバージョンのアプリケーションまたは他のソフトウェアを、互換的に実行する、または別の方法で処理することで、少なくとも1つのx86命令セットコアを有するIntel(登録商標)プロセッサと実質的に同じ機能を実行し得る任意のプロセッサを表す。x86コンパイラ1904は、追加のリンケージ処理があってもなくても、少なくとも1つのx86命令セットコアを有するプロセッサ1916上で実行され得るx86バイナリコード1906(例えば、オブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、図19は、高レベル言語1902のプログラムが、代替的な命令セットバイナリコード1910を生成する代替的な命令セットコンパイラ1908を使用してコンパイルされ得ることを示しており、当該代替的な命令セットバイナリコード1910は、少なくとも1つのx86命令セットコアを有しないプロセッサ1914(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/または、カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを持つプロセッサ)によってネイティブに実行されてよい。命令コンバータ1912は、x86バイナリコード1906を、x86命令セットコアを有さないプロセッサ1914によってネイティブに実行可能なコードに変換するために用いられる。この変換されたコードは、代替的な命令セットバイナリコード1910と同じである可能性は低い。なぜなら、これが実現できる命令コンバータを製造するのは難しいからである。しかし、変換されたコードは一般的なオペレーションを実現し、代替的な命令セットの命令で構成される。従って、命令コンバータ1912は、エミュレーション、シミュレーション、または任意の他の処理を通じて、x86命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスがx86バイナリコード1906を実行することを可能にするソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
[他の可能な特許請求の範囲]
以下の特許請求の範囲が可能である。
[項目1]
メモリおよびキャッシュラインを格納するキャッシュにアクセスするプロセッサコアと、
上記メモリから上記キャッシュへとキャッシュラインをプリフェッチするプリフェッチ回路であって、
シングルアクセスシグネチャのための上記キャッシュへのキャッシュラインアクセスおよびページを追跡し、
複数のページの各ページに対する上記キャッシュラインアクセスに対して、各ページに対する第1のキャッシュラインアクセスにシフトされる空間ビットパターンを生成し、
同一の空間ビットパターンを有する上記空間ビットパターンの各々に対する上記シングルアクセスシグネチャに対するシングル空間ビットパターンを生成して、複数のシングル空間ビットパターンを形成し、
上記複数のシングル空間ビットパターンの論理和演算を実行して、上記シングルアクセスシグネチャに対する第1の変調ビットパターンを生成し、
上記複数のシングル空間ビットパターンの論理積演算を実行して、上記シングルアクセスシグネチャに対する第2の変調ビットパターンを生成し、
上記シングルアクセスシグネチャに対するプリフェッチ要求を受信し、
閾値を超過していない場合に上記第1の変調ビットパターンを使用し、閾値を超過している場合に上記第2の変調ビットパターンを使用して、上記プリフェッチ要求に対するプリフェッチオペレーションを実行する、プリフェッチ回路と、
を備える、装置。
[項目2]
上記シングルアクセスシグネチャは、シングル命令ポインタ値である、
項目1に記載の装置。
[項目3]
上記プリフェッチ要求は、上記キャッシュのデータのミスを有する、
項目1に記載の装置。
[項目4]
上記閾値は、上記メモリの帯域幅利用率閾値である、
項目1に記載の装置。
[項目5]
上記プリフェッチ回路はさらに、上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理和演算の結果によって、上記第1の変調ビットパターンを更新する、
項目1に記載の装置。
[項目6]
上記実際のプログラムアクセスビットパターンは、犠牲ページバッファエントリのためのものである、
項目5に記載の装置。
[項目7]
上記プリフェッチ回路はさらに、上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する上記実際のプログラムアクセスビットパターンとの論理積演算の結果によって、上記第2の変調ビットパターンを更新する、
項目5に記載の装置。
[項目8]
上記プリフェッチ回路はさらに、上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンの論理積演算の結果によって、上記第2の変調ビットパターンを更新する、
項目1に記載の装置。
[項目9]
プロセッサにより、キャッシュラインを格納するキャッシュにアクセスする段階と、
シングルアクセスシグネチャに対する上記キャッシュへのキャッシュラインアクセスおよびページを追跡する段階と、
複数のページの各ページに対する上記キャッシュラインアクセスに対して、各ページに対して第1のキャッシュラインアクセスにシフトされる空間ビットパターンを生成する段階と、
同一の空間ビットパターンを有する上記空間ビットパターンの各々に対する上記シングルアクセスシグネチャに対するシングル空間ビットパターンを生成して、複数のシングル空間ビットパターンを形成する段階と、
上記複数のシングル空間ビットパターンの論理和演算を実行して、上記シングルアクセスシグネチャに対する第1の変調ビットパターンを生成する段階と、
上記複数のシングル空間ビットパターンの論理積演算を実行して、上記シングルアクセスシグネチャに対する第2の変調ビットパターンを生成する段階と、
上記シングルアクセスシグネチャに対するプリフェッチ要求を受信する段階と、
閾値を超過していない場合に上記第1の変調ビットパターンを使用し、上記閾値を超過している場合に上記第2の変調ビットパターンを使用して、上記プリフェッチ要求に対するプリフェッチオペレーションを実行して、キャッシュラインをメモリから上記キャッシュへとプリフェッチする段階と、
を備える、方法。
[項目10]
上記シングルアクセスシグネチャは、シングル命令ポインタ値である、
項目9に記載の方法。
[項目11]
上記プリフェッチ要求は、上記キャッシュにおけるデータのミスを含む、
項目9に記載の方法。
[項目12]
上記閾値を、上記メモリの帯域幅利用率閾値として設定する段階をさらに備える、
項目9に記載の方法。
[項目13]
上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理和演算の結果によって、上記第1の変調ビットパターンを更新する段階をさらに備える、
項目9に記載の方法。
[項目14]
上記実際のプログラムアクセスビットパターンは、犠牲ページバッファエントリのためのものである、
項目13に記載の方法。
[項目15]
上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する上記実際のプログラムアクセスビットパターンとの論理積演算の結果によって、上記第2の変調ビットパターンを更新する段階をさらに備える、
項目13に記載の方法。
[項目16]
上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理積演算の結果によって、上記第2の変調ビットパターンを更新する段階をさらに備える、
項目9に記載の方法。
[項目17]
機械により実行された場合、上記機械に、
プロセッサにより、キャッシュラインを格納するキャッシュにアクセスする段階と、
シングルアクセスシグネチャに対する上記キャッシュへのキャッシュラインアクセスおよびページを追跡する段階と、
複数のページの各ページに対する上記キャッシュラインアクセスに対して、各ページの第1のキャッシュラインアクセスにシフトされる空間ビットパターンを生成する段階と、
同一の空間ビットパターンを有する上記空間ビットパターンの各々に対する上記シングルアクセスシグネチャに対するシングル空間ビットパターンを生成して、複数のシングル空間ビットパターンを形成する段階と、
上記複数のシングル空間ビットパターンの論理和演算を実行して、上記シングルアクセスシグネチャに対する第1の変調ビットパターンを生成する段階と、
上記複数のシングル空間ビットパターンの論理積演算を実行して、上記シングルアクセスシグネチャに対する第2の変調ビットパターンを生成する段階と、
上記シングルアクセスシグネチャに対するプリフェッチ要求を受信する段階と、
閾値を超過していない場合に上記第1の変調ビットパターンを使用し、上記閾値を超過している場合に上記第2の変調ビットパターンを使用して、上記プリフェッチ要求に対するプリフェッチオペレーションを実行して、キャッシュラインをメモリから上記キャッシュへとプリフェッチする段階と、
を有する方法を実行させるプログラムコードを格納する、
非一時的機械可読媒体。
[項目18]
上記シングルアクセスシグネチャは、シングル命令ポインタ値である、
項目17に記載の非一時的機械可読媒体。
[項目19]
上記プリフェッチ要求は、前記キャッシュにおけるデータのミスを含む、
項目17に記載の非一時的機械可読媒体。
[項目20]
上記方法は、上記閾値を、上記メモリの帯域幅利用率閾値として設定する段階をさらに有する、
項目17に記載の非一時的機械可読媒体。
[項目21]
上記方法は、上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理和演算の結果によって、上記第1の変調ビットパターンを更新する段階をさらに有する、
項目17に記載の非一時的機械可読媒体。
[項目22]
上記実際のプログラムアクセスビットパターンは、犠牲ページバッファエントリのためのものである、
項目21に記載の非一時的機械可読媒体。
[項目23]
上記方法は、上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する上記実際のプログラムアクセスビットパターンとの論理積演算の結果によって、上記第2の変調ビットパターンを更新する段階をさらに有する、
項目21に記載の非一時的機械可読媒体。
[項目24]
上記方法は、上記第1の変調ビットパターンと上記シングルアクセスシグネチャに対する実際のプログラムアクセスビットパターンとの論理積演算の結果によって、上記第2の変調ビットパターンを更新する段階をさらに有する、
項目17に記載の非一時的機械可読媒体。
図1
図2
図3
図4A
図4B
図5
図6
図7
図8
図9A
図9B
図10A
図10B
図10C
図10D
図11
図12A
図12B
図13A
図13B
図14
図15
図16
図17
図18
図19