(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-09-26
(54)【発明の名称】命令を投機的に実行するための弱いキャッシュライン無効化要求
(51)【国際特許分類】
G06F 12/0815 20160101AFI20240918BHJP
G06F 9/38 20180101ALI20240918BHJP
G06F 12/0808 20160101ALI20240918BHJP
G06F 12/0811 20160101ALI20240918BHJP
【FI】
G06F12/0815
G06F9/38 350Y
G06F12/0808
G06F12/0811
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024518281
(86)(22)【出願日】2022-08-24
(85)【翻訳文提出日】2024-05-02
(86)【国際出願番号】 US2022041420
(87)【国際公開番号】W WO2023055504
(87)【国際公開日】2023-04-06
(32)【優先日】2021-09-30
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ポール ジェイ. モイヤー
【テーマコード(参考)】
5B013
5B205
【Fターム(参考)】
5B013CC20
5B205KK14
5B205MM03
5B205PP03
5B205PP22
5B205UU31
(57)【要約】
キャッシュラインを無効化するための技術が提供される。本技術は、メモリ階層の第1のレベルに対して、投機的に実行されるストア命令のための弱い排他的読み出し要求を発行することと、1つ以上のメモリ内のストア命令に関連付けられた1つ以上のキャッシュラインを無効化するかどうかを判定することと、弱い無効化要求をメモリ階層の追加のレベルに対して発行することと、を含む。
【選択図】
図5
【特許請求の範囲】
【請求項1】
方法であって、
メモリ階層の第1のレベルに対して、投機的に実行されるストア命令のための弱い排他的読み出し要求を発行することと、
1つ以上のメモリ内の前記ストア命令に関連付けられた1つ以上のキャッシュラインを無効化するかどうかを判定することと、
前記弱い排他的読み出し要求を前記メモリ階層の追加のレベルに対して発行することと、を含む、
方法。
【請求項2】
前記判定することは、前記1つ以上のメモリのうち1つ以上が、前記ストア命令に関連付けられたキャッシュラインを無効化すると判定することを含む、
請求項1の方法。
【請求項3】
前記1つ以上のメモリのうち1つ以上が、前記ストア命令に関連付けられたキャッシュラインを無効化することを含む、
請求項1の方法。
【請求項4】
弱い無効化要求を前記メモリ階層の追加のレベルに対して発行することは、前記無効化要求を、前記メモリ階層の第1のレベルよりも高い前記メモリ階層の第2のレベルに対して発行することを含む、
請求項1の方法。
【請求項5】
前記メモリ階層の第2のレベルが、前記メモリ階層の第1のレベルにおける複数のメモリ要素のうち何れのメモリ要素を無効化するかを判定することを含む、
請求項4の方法。
【請求項6】
前記判定することは、前記1つ以上のメモリのうち1つ以上が、前記ストア命令に関連付けられたキャッシュラインを無効化しないと判定することを含む、
請求項1の方法。
【請求項7】
前記ストア命令が非投機的になることに応じて、強い排他的読み出し要求を発行することを含む、
請求項1の方法。
【請求項8】
第2の命令を非投機的に実行することと、
前記第2の命令のための強い排他的読み出し要求を発行することと、を含む、
請求項1の方法。
【請求項9】
前記1つ以上のメモリ内の前記ストア命令に関連付けられた1つ以上のキャッシュラインを無効化するかどうかを判定することは、前記メモリ階層の第1のレベルにおけるメモリの数と、前記1つ以上のキャッシュラインを無効化することに関連付けられたコストと、のうち1つ以上に基づいて、前記1つ以上のキャッシュラインを無効化するかどうかを判定することを含む、
請求項1の方法。
【請求項10】
デバイスであって、
メモリ階層の第1のレベルに対して、投機的に実行されるストア命令のための弱い排他的読み出し要求を発行するように構成された処理要素を備え、
前記メモリ階層の第1のレベルは、
1つ以上のメモリ内の前記ストア命令に関連付けられた1つ以上のキャッシュラインを無効化するかどうかを判定することと、
前記弱い排他的読み出し要求を前記メモリ階層の追加のレベルに対して発行することと、
を行うように構成されている、
デバイス。
【請求項11】
前記判定することは、前記1つ以上のメモリのうち1つ以上が、前記ストア命令に関連付けられたキャッシュラインを無効化すると判定することを含む、
請求項10のデバイス。
【請求項12】
前記1つ以上のメモリは、前記ストア命令に関連付けられたキャッシュラインを無効化するように構成されている、
請求項10のデバイス。
【請求項13】
弱い無効化要求を前記メモリ階層の追加のレベルに対して発行することは、前記無効化要求を、前記メモリ階層の第1のレベルよりも高い前記メモリ階層の第2のレベルに対して発行することを含む、
請求項10のデバイス。
【請求項14】
前記メモリ階層の第2のレベルは、前記メモリ階層の第1のレベルにおける複数のメモリ要素のうち何れのメモリ要素を無効化するかを判定するように構成されている、
請求項13のデバイス。
【請求項15】
前記判定することは、前記1つ以上のメモリのうち1つ以上が、前記ストア命令に関連付けられたキャッシュラインを無効化しないと判定することを含む、
請求項10のデバイス。
【請求項16】
前記処理要素は、前記ストア命令が非投機的になることに応じて、強い排他的読み出し要求を発行するように構成されている、
請求項10のデバイス。
【請求項17】
前記処理要素は、
第2の命令を非投機的に実行することと、
前記第2の命令のための強い排他的読み出し要求を発行することと、
を行うように構成されている、
請求項10のデバイス。
【請求項18】
前記1つ以上のメモリ内の前記ストア命令に関連付けられた1つ以上のキャッシュラインを無効化するかどうかを判定することは、前記メモリ階層の第1のレベルにおけるメモリの数と、前記1つ以上のキャッシュラインを無効化することに関連付けられたコストと、のうち1つ以上に基づいて、前記1つ以上のキャッシュラインを無効化するかどうかを判定することを含む、
請求項10のデバイス。
【請求項19】
デバイスであって、
プロセッサ-メモリ階層を備え、
前記プロセッサ-メモリ階層は、複数の1次プロセッサ-メモリ階層レベルを含み、
各1次プロセッサ-メモリ階層レベルは、1つ以上の処理要素を含み、
前記1つ以上の処理要素のうち何れかの処理要素は、前記複数の1次プロセッサ-メモリ階層レベルのうち何れかの1次プロセッサ-メモリ階層レベルに対して、投機的に実行されるストア命令のための弱い排他的読み出し要求を発行するように構成されており、
前記1次プロセッサ-メモリ階層レベルは、
1つ以上のメモリ内の前記ストア命令に関連付けられた1つ以上のキャッシュラインを無効化するかどうかを判定することと、
前記弱い排他的読み出し要求を前記メモリ階層の追加のレベルに対して発行することと、
を行うように構成されている、
デバイス。
【請求項20】
前記判定することは、前記1つ以上のメモリのうち1つ以上が、前記ストア命令に関連付けられたキャッシュラインを無効化すると判定することを含む、
請求項19のデバイス。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2021年9月30日に出願された米国特許出願第17/490,910号の利益を主張し、その内容は、参照によって、本明細書に十分に記載されているように組み込まれる。
【背景技術】
【0002】
最新のマイクロプロセッサは、高スループットのための多様な特徴を実装する。いくつかのそのような特徴は、高度並列アーキテクチャを有することと、投機的に実行を行うことと、を含む。そのような技術に対する改善が絶えず行われている。
【0003】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
【図面の簡単な説明】
【0004】
【
図1】本開示の1つ以上の特徴を実装することができる例示的なデバイスのブロック図である。
【
図2】
図1のプロセッサ内に配置された命令実行パイプラインのブロック図である。
【
図3】一例による、コンピュータシステムのブロック図である。
【
図4】別の例による、弱い排他的読み出し(weak exclusive read)を実行することができるコンピュータシステムのブロック図である。
【
図5】一例による、弱い排他的読み出し動作のための動作を示す図である。
【
図6】一例による、弱い排他的読み出し動作を実行するための方法のフロー図である。
【発明を実施するための形態】
【0005】
キャッシュラインを無効化するための技術が提供される。本技術は、メモリ階層の第1のレベルに対して、投機的に実行されるストア命令のための弱い排他的読み出し要求を発行することと、1つ以上のメモリ内のストア命令に関連付けられた1つ以上のキャッシュラインを無効化するかどうかを判定することと、弱い無効化要求をメモリ階層の追加のレベルに対して発行することと、を含む。
【0006】
図1は、本開示の態様が実装されている例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含む。デバイス100は、1つ以上のプロセッサ102、メモリ階層104、記憶装置106、1つ以上の入力デバイス108、及び、1つ以上の出力デバイス110を含む。また、デバイス100は、オプションで、入力ドライバ112及び出力ドライバ114を含んでもよい。デバイス100は、
図1に示されていない追加の構成要素を含んでもよいことを理解されたい。
【0007】
1つ以上のプロセッサ102は、中央処理装置(central processing unit、CPU)、グラフィック処理ユニット(graphics processing unit、GPU)、同じダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUである。いくつかの例では、1つ以上のプロセッサ102は、任意の数のプロセッサを含む。いくつかの例では、1つ以上のプロセッサ102は、1つ以上のプロセッサチップを含む。いくつかの例では、各プロセッサチップは、1つ以上のプロセッサコアを含む。
【0008】
メモリ階層104の一部又は全てが、1つ以上のプロセッサ102のうち1つ以上と同じダイ上に配置されてもよいし、1つ以上のプロセッサ102とは部分的に又は完全に別個に配置されてもよい。メモリ階層104は、例えば、1つ以上のキャッシュ、1つ以上の揮発性メモリ、1つ以上の不揮発性メモリ、及び/又は、他のメモリを含み、1つ以上のタイプの1つ以上のランダムアクセスメモリ(RAM(random access memory))を含み得る。
【0009】
いくつかの例では、メモリ階層104の要素は、1つ以上のプロセッサ102の要素を含む階層に配置されている。そのような配置の例が
図3及び
図4に提供されている。
【0010】
記憶装置106は、固定又はリムーバブル記憶装置(例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク、フラッシュドライブ)を含む。入力デバイス108は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体認証スキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信のための無線ローカルエリアネットワークカード)を含む。出力デバイス110は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上の光、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/又は受信のための無線ローカルエリアネットワークカード)を含む。
【0011】
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114は、オプションの構成要素であること、並びに、デバイス100は、入力ドライバ112及び出力ドライバ114が存在しない場合に、同じ方式で動作することに留意されたい。
【0012】
図2は、
図1の1つ以上のプロセッサ102内に配置された命令実行パイプライン200のブロック図である。様々な例では、
図1の1つ以上のプロセッサ102のプロセッサコアの何れかは、
図2に示されるように実装される。
【0013】
命令実行パイプライン200は、メモリから命令を取り出して命令を実行し、データをメモリに出力し、レジスタファイル218内のレジスタ等の命令実行パイプライン200内の要素の状態を変更する。
【0014】
命令実行パイプライン200は、命令キャッシュ202を介してシステムメモリ(メモリ104等)から命令をフェッチするように構成された命令フェッチユニット204と、フェッチされた命令をデコードするように構成されたデコーダ208と、命令を処理するための計算を実行するように構成された機能ユニット216と、データキャッシュ220を介してシステムメモリからデータをロードするか又はシステムメモリにデータを記憶するロードストアユニット214と、命令のための作業データを記憶するレジスタを含むレジスタファイル218と、を含む。リオーダバッファ210は、現在インフライトである命令を追跡し、インフライト中のアウトオブオーダ実行を可能にするにもかかわらず、命令のインオーダリタイアを保証する。「インフライト」命令は、リオーダバッファ210によって受信されたが、プロセッサのアーキテクチャ状態にコミットされた結果(例えば、レジスタファイルに書き込まれた結果等)を未だ有していない命令を指す。リザベーションステーション212は、インフライト命令を維持し、命令オペランドを追跡する。全てのオペランドが特定の命令の実行の準備ができると、リザベーションステーション212は、実行のために機能ユニット216又はロード/記憶ユニット214に命令を送信する。完了した命令は、リオーダバッファ210内でリタイアのためにマークされ、リオーダバッファキュー210の先頭にある場合にリタイアされる。リタイアとは、命令の結果をプロセッサのアーキテクチャ状態にコミットさせる動作を指す。例えば、加算結果を加算命令によってレジスタに書き込むこと、ロードされた値をロード命令によってレジスタに書き込むこと、又は、命令フローを分岐命令によって新しい位置にジャンプさせることは、全て命令のリタイアの例である。
【0015】
命令実行パイプライン200の様々な要素は、共通データバス222を介して通信を行う。例えば、機能ユニット216及びロード/記憶ユニット214は、共通データバス222に結果を書き込み、この結果は、依存命令の実行のためにリザベーションステーション212によって、及び、実行を終了したインフライト命令の最終処理結果としてリオーダバッファ210によって読み出されてもよい。また、ロード/記憶ユニット214は、共通データバス222からデータを読み出す。例えば、ロード/記憶ユニット214は、完了した命令からの結果を共通データバス222から読み出し、この結果を、記憶命令用のデータキャッシュ220を介してメモリに書き込む。
【0016】
命令実行パイプライン200は、いくつかの命令を投機的に実行する。投機的実行とは、命令実行パイプライン200が命令の実行のために少なくともいくつかの動作を実行するが、命令が誤って実行された場合にそのような実行の効果を反転する能力を維持することを意味する。
【0017】
一例では、命令実行パイプライン200は、分岐予測を実行することができる。分岐予測は、命令フェッチユニット204が、実行が流れていく制御フローパスを予測し、且つ、そのパスから命令をフェッチする動作である。予測を行う多くの方法があり、いくつかは、グローバルな又はアドレス固有の分岐経路履歴(例えば、分岐が行われるか否か、及び/又は、そのような分岐のターゲットの履歴)を維持することと、そのような履歴を用いて様々な動作を実行することと、を伴う。実行パイプライン(例えば、機能ユニット216)は、実際に分岐を実行して、そのような分岐の正しい結果を判定する。予測された実行経路からの命令が実行されているが、そのような命令が実際に実行されるべきでない可能性があるため、機能ユニット216が正しい実行経路を実際に判定する前に、そのような命令は、投機的に実行されているとみなされる。命令が投機的に実行され得る多くの他の理由がある。
【0018】
ストア命令を投機的に実行することが可能である。投機的実行は、命令のための様々な動作を実行するが、命令が非投機的になるまでそのような動作をコミットしないことによって行われる。一例では、ストア命令を投機的に実行することは、命令をロード/記憶ユニット214に配置することと、記憶するデータを判定することと、データを記憶するアドレスを判定すること(アドレス計算及びアドレス変換を伴い得る)と、を含む。この時間中、リオーダバッファ210は、ストア命令を保持し、ストア命令が非投機的に実行されるようになるまで、命令がリタイアする(結果をコミットする)ことを許可しない。
【0019】
命令は、予測された分岐制御フローパスで実行される等の種々の理由のために、又は、種々の他の理由のために投機的に実行され得る。ストア命令の実行の一部は、記憶されるデータをキャッシュに書き込むことを伴う。これを行うために、キャッシュコントローラは、適切なキャッシュラインへの排他的アクセス権を獲得し、次いで、指定されたデータをそのキャッシュラインに書き込む。適切なキャッシュラインへの排他的アクセス権を獲得することは、他のキャッシュ(例えば、全ての他のキャッシュ)にそれらのキャッシュラインコピーを無効化させることを伴う。これを行うことは、そのキャッシュラインのデータの競合するバージョンが、異なるキャッシュメモリに存在することを防止する。MESI(modified,exclusive,shared,invalid)プロトコルでは、ストアを実行する命令実行パイプライン200が、キャッシュラインへの排他的アクセス権を獲得し、他のユニットは、それらのキャッシュラインコピーが無効化されるように設定される。
【0020】
命令実行パイプライン200は、命令の様々な動作を早期に実行しようと試みるアウトオブオーダ実行パイプラインである。そのような動作の一例は、上述した無効化である。具体的には、ストア命令の実行のために、命令実行パイプライン200は、ストア命令の実行の早い段階でキャッシュラインの他のメモリのコピーの無効化を要求することが許可され、しばしば要求し、その結果、ストア命令が、関連付けられたデータを書き込む準備ができると、命令実行パイプライン200は、仮に無効化が後で行われる場合ほど長く待つ必要がない。しかしながら、ストア命令の投機的実行が行われる場合に問題が生じる。具体的には、上述したように、命令実行パイプライン200が、ストア命令を投機的に実行するためにキャッシュラインの無効化を要求し、且つ、実質的にストア命令がデータを書き込む準備ができる前に、そのような要求を行うことが可能である。しかしながら、ストア命令の投機的実行が実際には正しくない可能性がある。例えば、ストア命令が、誤って予測された制御フローパス上で実行されていた可能性がある(分岐が実際には成立する分岐不成立ポイントを過ぎる等)。この場合、関与するキャッシュラインの様々なコピーを様々なメモリに対して無効化する行為が無駄になり、それらの様々なメモリは、共有状態又は排他状態にあるそれらのキャッシュラインを再獲得する必要があり得る。
【0021】
少なくともこの理由で、「弱い排他的読み出し要求(weak exclusive read request)」と呼ばれる動作が本明細書で説明される。弱い排他的読み出し要求は、キャッシュラインを無効化する要求であるが、様々なメモリ又はメモリコントローラが無効化を実行することを拒否することが可能である。様々なメモリ又はメモリコントローラが要求された検証を実行するかどうかを判定する際に様々な要因を考慮に入れることが可能である。そのような要因のいくつかの例は、キャッシュラインが存在するメモリ、したがって、キャッシュラインが無効化されるメモリの数と、無効化を実行するための「コスト」と、を含み、コストは、ストア命令が誤って投機的に実行された場合に無駄になる、キャッシュラインを再獲得するために実行される追加の作業の程度を表す。コストのいくつかの例示的な尺度は、キャッシュラインを再取得するための待ち時間、無効化メッセージの待ち時間制限若しくは帯域幅制限、又は、他の要因を含む。弱い排他的読み出し要求は、全てのメモリが実際に従う強い排他的読み出し要求(strong exclusive read request)とは対照的である。いくつかの例では、強い排他的読み出し要求は、投機的に実行されていないストア命令と、投機的に実行されていたが非投機的に実行されるようになるストア命令(分岐後の予測された制御フローパスが正しい制御フローパスであると判定されることが確認される場合等)と、に対して行われる。要約すれば、命令実行パイプライン200がストア命令を投機的に実行するいくつかの例では、命令実行パイプライン200は、ストア命令が書き込まれるキャッシュラインを含む様々なメモリに対して弱い排他的読み出し要求を発行する。様々なメモリの何れか又は全ては、1つ以上の要因に基づいて、弱い排他的読み出し要求に従うか又は従わない。ストア命令の実行が投機的でなくなった場合等の後の時点で、命令実行パイプライン200は、ストア命令を実行する命令実行パイプライン200が、適切なデータを書き込むために排他状態にあるキャッシュラインを獲得することができるように、キャッシュラインを記憶しているメモリにそのキャッシュラインを無効化させる強い排他的読み出し要求を発行する。追加の詳細をここで提供する。
【0022】
図3は、一例による、コンピュータシステム300のブロック図である。いくつかの例では、コンピュータシステム300は、
図1のコンピュータシステム100である。コンピュータシステム300は、プロセッサセット302、1つ以上のシステムレベルメモリ304、システムメモリコントローラ306、及び、他のシステム要素308を含む。
【0023】
プロセッサセット302は、1つ以上のプロセッサチップ310を含む。各プロセッサチップ310は、プロセッサチップレベルキャッシュ312及び1つ以上のプロセッサコア314を含む。各プロセッサコア314は、関連付けられたコアレベルキャッシュ316を有する。プロセッサコア314の各々は、
図2の命令実行パイプライン200等の1つ以上の実行パイプラインを含む。
【0024】
図3に示されるキャッシュ及びメモリは、並列に動作し、したがって、データコヒーレンスを保証するためのコヒーレンスプロトコルを使用する。そのようなプロトコルの一例は、変更-排他-共有-無効(MESI)プロトコルである。各キャッシュラインは、これら4つの状態のうち何れかの指標を含む。変更状態は、特定のキャッシュに記憶されたキャッシュラインのコピーが、バッキングメモリに記憶されたコピーに対して変更されていること、したがって、キャッシュラインに追い出しが行われる場合にキャッシュラインがバッキングメモリに書き込まれなければならないことを示す。排他状態は、キャッシュラインが特定のキャッシュに記憶されており、階層の同じレベルにある他のキャッシュにも記憶されていないことを示す。排他とマークされたキャッシュラインを、階層のより高いレベルに記憶することができることに留意されたい。例えば、排他状態でレベル0キャッシュに記憶されたキャッシュラインを、レベル0キャッシュの直上のレベル1キャッシュに記憶することもできる。共有状態は、キャッシュラインが階層の同じレベルにある複数のキャッシュに記憶されていることを示す。無効状態は、キャッシュラインが無効とマークされている特定のキャッシュ内ではキャッシュラインが有効でないことを示す(ただし、別のキャッシュがそのキャッシュラインの有効なコピーを記憶することができる)。
【0025】
各プロセッサコア314は、関連付けられたコアレベルキャッシュ316を有する。プロセッサコア314がロード動作又はストア動作等のメモリ動作を実行する場合に、プロセッサコア314は、メモリ動作のためにデータを記憶するキャッシュラインがプロセッサコア314に関連付けられたコアレベルキャッシュ316内に配置されているかどうかを判定する。そのようなキャッシュラインがコアレベルキャッシュ316内に配置されていない場合に、コアレベルキャッシュ316は、プロセッサチップレベルキャッシュ312等のより高いレベルのキャッシュからそのキャッシュラインをそのコアレベルキャッシュ316にフェッチしようと試みる。プロセッサチップレベルキャッシュ312は、より高いレベルのキャッシュメモリと、プロセッサチップレベルキャッシュ312及び同じプロセッサチップ310内の全てのコアレベルキャッシュ316についてコヒーレンスプロトコルを管理するコントローラと、の両方としての役割を果たす。したがって、プロセッサチップレベルキャッシュ312は、そのキャッシュラインを要求側プロセッサコア314に提供する目的で、要求されたキャッシュラインがプロセッサチップレベルキャッシュ312に記憶されているかどうかを判定するために、それ自体をチェックする。プロセッサチップレベルキャッシュ312は、独自の内容から又は階層においてより高位にあるメモリからフェッチされた後に、キャッシュラインを要求側コア314に提供する。
【0026】
プロセッサチップレベルキャッシュ312は、コアレベルキャッシュ316についてコヒーレンスプロトコルを管理する。概して、プロセッサチップレベルキャッシュ312は、コアレベルキャッシュ316内のキャッシュラインのプロトコル状態を管理し、特定のコアレベルキャッシュ316において何れかのキャッシュラインが排他状態にある場合に、他のコアレベルキャッシュ316が、無効以外の何れかの状態にあるそのキャッシュラインを有しないようにする。複数のコアレベルキャッシュ316は、共有状態にあるキャッシュラインを有することが許可される。
【0027】
プロトコルは、レベルごとに動作する。より具体的には、メモリ階層の各レベルにおいて、そのレベル内の各要素は、プロトコルの状態のいくつかのサブセットにキャッシュラインを有することが許可される。一例では、プロセッサセット302のレベルにおいて、各チップ310(したがって、各プロセッサチップレベルキャッシュ312)は、共有状態又は排他状態等の状態のうち何れかにあるキャッシュラインを有することが許可される。階層の特定のレベルに対するコントローラが、そのレベルにおけるプロトコルを管理する。したがって、プロセッサセットメモリ320は、プロセッサチップレベルキャッシュ312の状態を管理する。任意の特定のプロセッサチップ310のプロセッサチップレベルキャッシュ312は、コアレベルキャッシュ316の状態を管理し、システムメモリコントローラ306は、特定のキャッシュラインを記憶し得るプロセッサセット302及び他のシステム要素308の状態を管理する。
【0028】
プロセッサコア314がストア命令を実行する場合に、プロセッサコア314は、書き込まれるデータを含むキャッシュラインが、排他状態にある関連付けられたコアレベルキャッシュ316内に配置されることを要求する。この要求を満たすことの一部は、全ての他のキャッシュ(コアレベルキャッシュ316の「直上」のキャッシュ以外)がそのキャッシュラインのコピーを無効化するのを要求することを含む。ストア命令が投機的に実行される場合、コアレベルキャッシュ316は、弱い排他的読み出しを発行する。各キャッシュは、この弱い排他的読み出しを無視する、したがって、キャッシュラインのコピーを無効化しない、ことが許可される。他の箇所で述べられるように、ストア命令が投機的に実行されなくなっている場合に、プロセッサコア314は、強い排他的読み出しを発行し、他のキャッシュは、その強い排他的読み出しに応じて、コピーを無効化する。
【0029】
いくつかの実施形態では、弱い排他的読み出しは、メモリ階層の異なるレベルによって個々に処理される。より具体的には、弱い排他的読み出しは、階層中を上方に伝搬し、各レベルにおいて、そのレベルに対するコントローラ(例えば、プロセッサチップレベルキャッシュ312、プロセッサセットメモリ320又はシステムメモリコントローラ306)が、その階層内のメモリについて、要求を満たすか満たさないかに関する判定を行う。次いで、コントローラは、判定に基づいて、要求を満たすように又は要求を満たさないように、それらのメモリを制御する。各レベルは、この要求を個々に満たすかどうかを判定することができるため、1つのレベルのメモリが、適切なキャッシュラインを無効化することによって要求を満たすことが可能である一方、異なるレベルのメモリが、適切なキャッシュラインを無効化しない。一例では、要求側コア314と同じプロセッサチップ310のコアレベルキャッシュ316は、それらのキャッシュラインを無効化するが、他のプロセッサチップ310のコアレベルキャッシュ316の何れもそれらのキャッシュラインを無効化せず、他のシステム要素308の何れもそれらのキャッシュラインを無効化しない。
【0030】
図4は、別の例による、弱い排他的読み出しを実行することができるコンピュータシステム400のブロック図である。システム400は、階層の1つ以上の最下レベル(1次プロセッサ-メモリ階層レベル402)と、一階層に配置された1つ以上の次の上位レベルの2次プロセッサ-メモリ階層レベル404と、1つ以上の3次プロセッサ-メモリ階層レベル406と、オプションで、示されていない追加の階層レベル408と、を含む。
【0031】
最下レベルにおいて、1次プロセッサ-メモリ階層レベル402は、プロセッサ-メモリ要素410のうち1つ以上を含む。各プロセッサ-メモリ要素410は、処理要素412及び処理要素固有メモリ414を含む。処理要素412は、ソフトウェアを実行する過程で、ストア命令を投機的に実行し、対応する弱い排他的読み出し動作を発行する。また、処理要素412は、ストア命令が投機的に実行されない場合に、強い排他的読み出し動作を発行する。
【0032】
階層の各レベルは、弱い排他的読み出し動作にどのように応答するかを判定するレベル固有メモリ(例えば、1次メモリ416、2次メモリ418及び3次メモリ420)を含む。本明細書の他の箇所で述べられるように、各レベルのメモリは、要求が受信された場合に有効状態にあるキャッシュラインをいくつのメモリが記憶するか、特定のメモリ内のキャッシュラインを無効化するための「コスト」がどうなるか、及び/又は、他の要因等の要因を考慮に入れた判定に基づいて、そのレベル固有メモリの「子(children)」の対応するキャッシュラインを無効化するか、又は、それらのキャッシュラインを無効化しないことによって、弱い排他的読み出し動作を実行又は拒否することの何れかが許可される(いくつかの実施形態では、「拒否する」は、弱い排他的読み出し動作を実行せず、そのような実行することの拒否を要求者に通知することを意味する)。
【0033】
図3のシステム300は、
図4のシステム400の一例である。したがって、
図3は、コア、チップ等のような特定のタイプの階層レベル要素を示しているが、
図4の階層レベルは、必ずしも同様の要素又は要素のグループ化を含まない。処理要素412は、プロセッサコア又はプロセッサコアのグループのような1つ以上のプロセッサのセットであり、各メモリ階層レベルは、そのようなプロセッサの階層グループ化である。
【0034】
図3のシステム300は、
図4のシステム400の一例である。プロセッサコア314は、処理要素412の一例である。コアレベルキャッシュ316は、処理要素固有メモリ414の一例である。プロセッサチップ310は、1次プロセッサメモリ階層レベル402の一例であり、プロセッサチップレベルキャッシュ312は、1次レベル固有メモリブロック416の一例である。プロセッサセット302は、2次プロセッサ-メモリ階層レベル404の一例であり、プロセッサセットメモリ320は、2次レベル固有メモリブロック418の一例である。コンピュータシステム300は、3次プロセッサ-メモリ階層レベル406の一例であり、システムメモリコントローラ306は、他のシステム要素308及びプロセッサセット302の内部メモリとともに、3次レベル固有メモリブロック420の一例である。追加の階層レベル408は、コンピュータシステム300にネットワーク接続された追加のコンピュータシステムに対応することができる。
図3のシステム300は、
図4のシステム400の一例であるが、
図4のシステム400は、
図3のシステム300の何れの特定の詳細にも限定されないことを当然に理解されたい。
【0035】
図5は、一例による、弱い排他的読み出し動作のための動作を示す図である。図の左下のプロセッサ-メモリ要素410は、ストア命令を投機的に実行し、したがって、排他的所有権を求める弱い要求を1次レベル固有メモリブロック402に対して発行する。1次レベル固有メモリブロック402は、キャッシュラインを無効化するように、1次レベル固有メモリブロック402のコマンドで他のプロセッサメモリ要素410に命令するかどうかに関する決定を行う。1次レベル固有メモリブロック402(又は任意のメモリブロック)が、その直接コマンドを受けた要素(例えば、1次レベル固有メモリブロック402に対するプロセッサメモリ要素410、2次レベル固有メモリブロック418に対する1次プロセッサ-メモリ階層レベル402、3次レベル固有メモリブロック420に対する2次プロセッサ-メモリ階層レベル404等)のうち何れもが、問題のキャッシュラインを無効化すべきであるか否かをそれぞれに判定することが可能である。例えば、1次レベル固有メモリブロック402が、ある処理要素固有メモリ414はキャッシュラインのコピーを無効化すべきである一方、別の処理要素固有メモリ414はキャッシュラインのコピーを無効化すべきでないと判定することが可能である。ユニットは、例えば、キャッシュラインを再獲得するために必要とされる作業量又は時間、キャッシュラインを実際に記憶する直接コマンドを受けた要素の数、又は、他の要因等のような特定の性能要因を考慮することによる等の任意の技術的に実行可能な様態で、この判定を行う。また、任意のレベルのメモリブロック(例えば、2次レベル固有メモリブロック404)が、これらの判定を個々に行うことも可能である。
【0036】
加えて、排他的アクセス権を獲得することは、任意の最低レベルキャッシュ内のそのキャッシュラインの単一のコピーのみを含むので、1次レベル固有メモリブロック402は、更なる分配のために階層の上方に別の要求を送信する。具体的には、1次レベル固有メモリブロック402は、排他的所有権を求めて弱い要求を2次レベル固有メモリブロック404に送信する。2次レベル固有メモリブロック404は、本明細書の他の箇所で説明されるもの等の種々の要因の何れかに基づいて、2次レベル固有メモリブロック404の直接コマンドで1つ以上の1次レベル固有メモリブロック402の何れかに対してキャッシュライン無効化コマンドを発行するかどうかに関する判定を行い、そのようなコマンドを送信するか又は送信しない。また、2次レベル固有メモリブロック404は、同様の様態で、排他的所有権を求める弱い要求を追加の階層レベル(例えば、第3のレベル)に送信する。階層内のより高いブロックから排他的所有権を求める弱い要求を受信するレベル固有メモリブロックの場合、レベル固有メモリブロックは、本明細書で説明される要因に基づいて、そのような無効化コマンドをブロック(プロセッサメモリ要素410又はレベル固有メモリブロック)に対して発行するかどうかを判定する。
【0037】
図6は、一例による、弱い排他的読み出し動作を実行するための方法600のフロー図である。
図1~
図5のシステムに関して説明されているが、当業者は、任意の技術的に実現可能な順序で方法600のステップを実行するように構成された任意のシステムが本開示の範囲に含まれることを理解するであろう。
【0038】
ステップ602において、処理要素412は、1次レベル固有メモリブロック402等のメモリブロックに対して弱い排他的読み出し要求を発行する。いくつかの例では、処理要素412は、ストア命令を投機的に実行することに応じて又は実行する過程で、弱い排他的読み出し動作を発行する。ステップ604において、いくつかの例ではプロセッサコア間で共有されるキャッシュである1次レベル固有メモリブロック402は、1次レベル固有メモリブロック402の直接コマンドで、ストア命令が記憶されるアドレスを含むキャッシュラインを無効化するコマンドをプロセッサ-メモリ要素410に対して発行するか否かに関する判定を行う。プロセッサ-メモリ要素410は、これらのコマンドに従い、コマンドによって指定されたキャッシュラインを無効化する。ステップ606において、1次レベル固有メモリブロック402は、本明細書の他の箇所で説明されるような処理のために、弱い排他的読み出し要求をメモリ階層のより高いレベルに送信する。
【0039】
いくつかの例では、ストア命令が非投機的になることに応じて、ストア命令を実行する処理要素412は、メモリ階層に対して強い排他的読み出し要求を発行する。この要求に応じて、処理要素412の直上のメモリ階層の部分にないキャッシュラインのコピーを記憶している各キャッシュは、キャッシュラインを無効化する。一例では、処理要素412の直上のメモリ階層の部分は、処理要素412に関連付けられたL0キャッシュ、そのL0キャッシュの直上のL1キャッシュ、そのL1キャッシュの直上のL2キャッシュ等を含む。無効化の目的は、キャッシュラインの直接使用されるコピーではなく、並列コピーを無効化することであるため、これらのメモリは、キャッシュラインのコピーを無効化しない。
【0040】
処理要素412が、投機的に実行されるストア命令が非投機的に実行されるようにならない、言い換えれば、ストア命令の実行が正しくない(例えば、分岐予測ミスに起因して)と判定する場合、処理要素412は、強い排他的読み出し要求を発行しない。この場合、キャッシュラインを無効化しなかったメモリは、ストア命令の実行が正しくなかったキャッシュラインを再獲得する必要がなかった。
【0041】
本明細書で説明されるメモリの各々において、行われる無効化は、ストア命令が書き込むデータを含むキャッシュラインに対して行われることを理解されたい。
【0042】
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに他の特徴及び要素との様々な組み合わせで使用されてもよい。
【0043】
図に示される様々な要素は、ハードウェア(例えば、回路)、プロセッサ上で実行されるソフトウェア、又は、ハードウェアとソフトウェアの組み合わせとして実装可能である。様々な例では、プロセッサ-メモリ要素410、処理要素412、メモリ414、メモリ416、メモリ418、プロセッサチップ310、システム要素308、システムレベルメモリ304、システムメモリコントローラ306、並びに、命令実行パイプライン200及びコンピュータシステム100の例示されるユニット等の各ブロックは、ハードウェア、ソフトウェア又はそれらの組み合わせとして実装可能である。提供される方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施され得る。好適なプロセッサとしては、例として、汎用プロセッサ、専用プロセッサ、従来型プロセッサ、デジタルシグナルプロセッサ(digital signal processor、DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、フィールドプログラマブルゲートアレイ(Field Programmable Gate Array、FPGA)回路、任意の他のタイプの集積回路(integrated circuit、IC)、及び/又は、状態マシンが挙げられる。そのようなプロセッサは、処理されたハードウェア記述言語(hardware description language、HDL)命令及びネットリスト等の他の中間データ(そのような命令は、コンピュータ可読媒体に記憶させることが可能である)の結果を使用して製造プロセスを構成することによって製造され得る。そのような処理の結果はマスクワークとすることができ、このマスクワークをその後の半導体製造プロセスにおいて使用して、実施形態の態様を実施するプロセッサを製造する。
【0044】
本明細書に提供される方法又はフロー図は、汎用コンピュータ又はプロセッサによる実施のために非一時的なコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェア又はファームウェアにおいて実施され得る。非一時的なコンピュータ可読記憶媒体の例としては、読み取り専用メモリ(read only memory、ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(digital versatile disk、DVD)等の光学媒体が挙げられる。
【国際調査報告】