(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-18
(54)【発明の名称】キャッシュラインコヒーレンス状態ダウングレード
(51)【国際特許分類】
G06F 12/0815 20160101AFI20241010BHJP
G06F 12/0895 20160101ALI20241010BHJP
【FI】
G06F12/0815
G06F12/0895 110
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024523438
(86)(22)【出願日】2022-10-17
(85)【翻訳文提出日】2024-05-21
(86)【国際出願番号】 US2022046911
(87)【国際公開番号】W WO2023076063
(87)【国際公開日】2023-05-04
(32)【優先日】2021-10-29
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ポール ジェイ. モイヤー
【テーマコード(参考)】
5B205
【Fターム(参考)】
5B205KK14
5B205NN43
5B205NN53
5B205PP03
5B205PP22
5B205VV02
(57)【要約】
キャッシュ動作を実行するための技術が提供される。本技術は、メモリアクセスクラスについて、キャッシュ内の排他状態にあるキャッシュラインが変更状態になることなく無効状態又は共有状態に変更されるインスタンスの閾値数を検出することと、検出することに応じて、メモリアクセスクラスのキャッシュラインに対する第1のコヒーレンス状態非依存要求を、共有状態にあるキャッシュラインに対する要求として処理することと、メモリアクセスクラスのリセットイベントを検出することと、リセットイベントを検出することに応じて、メモリアクセスクラスのキャッシュラインに対する第2のコヒーレンス状態非依存要求を、コヒーレンス状態非依存要求として処理することと、を含む。
【選択図】
図5
【特許請求の範囲】
【請求項1】
メモリアクセスクラスについて、キャッシュ内の排他状態にあるキャッシュラインが変更状態になることなく無効状態又は共有状態に変更されるインスタンスの閾値数を検出することと、
前記検出することに応じて、前記メモリアクセスクラスのキャッシュラインに対する第1のコヒーレンス状態非依存要求を、共有状態にあるキャッシュラインに対する要求として処理することと、
前記メモリアクセスクラスのリセットイベントを検出することと、
前記リセットイベントを検出することに応じて、前記メモリアクセスクラスのキャッシュラインに対する第2のコヒーレンス状態非依存要求を、コヒーレンス状態非依存要求として処理することと、を含む、
方法。
【請求項2】
キャッシュ内の排他状態にあるキャッシュラインが変更状態になることなく無効状態又は共有状態に変更されるインスタンスの数のカウントを維持することを含む、
請求項1の方法。
【請求項3】
前記リセットイベントに応じて、前記カウントを0にリセットすることを含む、
請求書2の方法。
【請求項4】
前記リセットイベントは、前記メモリアクセスクラスについて、排他状態のキャッシュラインが共有状態のキャッシュラインに変換されたことを検出することを含む、
請求項1の方法。
【請求項5】
ロード命令及びプリフェッチ動作のうち1つ以上に応じて、キャッシュラインを排他状態で前記キャッシュに記憶することを含む、
請求項1の方法。
【請求項6】
前記メモリアクセスクラスは、メモリアクセスタイプとスレッド識別子との組み合わせとして定義される、
請求項1の方法。
【請求項7】
前記メモリアクセスクラスのキャッシュラインに対する第1のコヒーレンス状態非依存要求を、共有状態にあるキャッシュラインに対する要求として処理することは、キャッシュラインを前記キャッシュに挿入するためのコヒーレンス状態非依存要求に応じて、前記キャッシュラインを共有状態で前記キャッシュに記憶することを含む、
請求項1の方法。
【請求項8】
異なるメモリアクセスクラスについて、キャッシュ内の排他状態にあるキャッシュラインが変更状態になることなく無効状態又は共有状態に変更される異なる数のインスタンスを追跡することを含む、
請求項1の方法。
【請求項9】
複数の異なるメモリアクセスクラスについて、キャッシュ内の排他状態にあるキャッシュラインが変更状態になることなく無効状態又は共有状態に変更されるインスタンスの数に従って、キャッシュラインに対する要求に独立して応答することを含む、
請求項8の方法。
【請求項10】
キャッシュと、
キャッシュコントローラと、を備え、
前記キャッシュコントローラは、
メモリアクセスクラスについて、キャッシュ内の排他状態にあるキャッシュラインが変更状態になることなく無効状態又は共有状態に変更されるインスタンスの閾値数を検出することと、
前記検出することに応じて、前記メモリアクセスクラスのキャッシュラインに対する第1のコヒーレンス状態非依存要求を、共有状態にあるキャッシュラインに対する要求として処理することと、
前記メモリアクセスクラスのリセットイベントを検出することと、
前記リセットイベントを検出することに応じて、前記メモリアクセスクラスのキャッシュラインに対する第2のコヒーレンス状態非依存要求を、コヒーレンス状態非依存要求として処理することと、
を行うように構成されている、
システム。
【請求項11】
前記キャッシュコントローラは、
キャッシュ内の排他状態にあるキャッシュラインが変更状態になることなく無効状態又は共有状態に変更されるインスタンスの数のカウントを維持するように構成されている、
請求項10のシステム。
【請求項12】
前記キャッシュコントローラは、
前記リセットイベントに応じて、前記カウントを0にリセットするように構成されている、
請求項11のシステム。
【請求項13】
前記リセットイベントは、前記メモリアクセスクラスについて、排他状態のキャッシュラインが共有状態のキャッシュラインに変換されたことを検出することを含む、
請求項10のシステム。
【請求項14】
前記キャッシュコントローラは、
ロード命令及びプリフェッチ動作のうち1つ以上に応じて、キャッシュラインを排他状態で前記キャッシュに記憶するように構成されている、
請求項10のシステム。
【請求項15】
前記メモリアクセスクラスは、メモリアクセスタイプとスレッド識別子との組み合わせとして定義される、
請求項10のシステム。
【請求項16】
前記メモリアクセスクラスのキャッシュラインに対する第1のコヒーレンス状態非依存要求を、共有状態にあるキャッシュラインに対する要求として処理することは、キャッシュラインを前記キャッシュに挿入するためのコヒーレンス状態非依存要求に応じて、前記キャッシュラインを共有状態で前記キャッシュに記憶することを含む、
請求項10のシステム。
【請求項17】
前記キャッシュコントローラは、異なるメモリアクセスクラスについて、キャッシュ内の排他状態にあるキャッシュラインが変更状態になることなく無効状態又は共有状態に変更される異なる数のインスタンスを追跡するように構成されている、
請求項10のシステム。
【請求項18】
前記キャッシュコントローラは、複数の異なるメモリアクセスクラスについて、キャッシュ内の排他状態にあるキャッシュラインが変更状態になることなく無効状態又は共有状態に変更されるインスタンスの数に従って、キャッシュラインに対する要求に独立して応答するように構成されている、
請求項17のシステム。
【請求項19】
プロセッサと、
キャッシュと、
キャッシュコントローラと、を備え、
前記キャッシュコントローラは、
メモリアクセスクラスについて、キャッシュ内の排他状態にあるキャッシュラインが変更状態になることなく無効状態又は共有状態に変更されるインスタンスの閾値数を検出することと、
前記検出することに応じて、前記メモリアクセスクラスのキャッシュラインに対する前記プロセッサの第1のコヒーレンス状態非依存要求を、共有状態にあるキャッシュラインに対する要求として処理することと、
前記メモリアクセスクラスのリセットイベントを検出することと、
前記リセットイベントを検出することに応じて、前記メモリアクセスクラスのキャッシュラインに対する前記プロセッサの第2のコヒーレンス状態非依存要求を、コヒーレンス状態非依存要求として処理することと、
を行うように構成されている、
システム。
【請求項20】
前記キャッシュコントローラは、
キャッシュ内の排他状態にあるキャッシュラインが変更状態になることなく無効状態又は共有状態に変更されるインスタンスの数のカウントを維持するように構成されている、
請求項19のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2021年10月29日に出願された米国特許出願第17/514,776号の利益を主張するものであり、その内容は、参照により本明細書に組み込まれる。
【背景技術】
【0002】
最新のマイクロプロセッサは、高スループットのための幅広い機能を実装する。キャッシュ性能は、性能にとって特に重要である。このような技術に対する改良が絶えず行われている。
【0003】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解が可能になる。
【図面の簡単な説明】
【0004】
【
図1】本開示の1つ以上の実施形態を実装することができる例示的なデバイスのブロック図である。
【
図2】
図1のプロセッサ内に配置された命令実行パイプラインのブロック図である。
【
図3】一例による、コンピュータシステムのブロック図である。
【
図5】一例による、キャッシュ動作を実行するための方法のフロー図である。
【発明を実施するための形態】
【0005】
キャッシュ動作を実行するための技術が提供される。本技術は、メモリアクセスクラスのために、キャッシュ内の排他状態(exclusive state)にあるキャッシュラインが、変更(修正)状態(modified state)になることなく無効状態(invalid state)又は共有状態(shared state)に変更されるインスタンスの閾値数を検出することと、検出することに応じて、メモリアクセスクラスのためのキャッシュラインに対するコヒーレンス状態非依存要求(coherence state agnostic requests)を、共有状態にあるキャッシュラインに対する要求として処理する(扱う)ことと、メモリアクセスクラスのためのリセットイベントを検出することと、リセットイベントを検出することに応じて、メモリクラスのためのキャッシュラインに対するコヒーレンス状態非依存要求を、コヒーレンス状態非依存要求として処理することと、を含む。
【0006】
図1は、本開示の態様が実装されている例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含む。デバイス100は、1つ以上のプロセッサ102、メモリ階層104、記憶装置106、1つ以上の入力デバイス108、及び、1つ以上の出力デバイス110を含む。また、デバイス100は、オプションで、入力ドライバ112及び出力ドライバ114を含んでもよい。デバイス100は、
図1に示されていない追加の構成要素を含んでもよいことを理解されたい。
【0007】
1つ以上のプロセッサ102は、中央処理装置(CPU)、画像処理装置(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つ以上のランダムアクセスメモリ(random access memory、RAM)を含んでもよい。
【0009】
いくつかの例では、メモリ階層104の要素は、1つ以上のプロセッサ102の要素を含む階層に配置される。そのような配置の例は、
図3及び
図4A~
図4Dに提供されている。
【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】
図3は、一例による、コンピュータシステム300のブロック図である。いくつかの例では、コンピュータシステム300は、
図1のコンピュータシステム100である。コンピュータシステム300は、プロセッサセット302、1つ以上のシステムレベルメモリ304、システムメモリコントローラ306、及び、他のシステム要素308を含む。
【0017】
プロセッサセット302は、1つ以上のプロセッサチップ310を含む。各プロセッサチップ310は、プロセッサチップレベルキャッシュ312、及び、1つ以上のプロセッサコア314を含む。各プロセッサコア314は、関連するコアレベルキャッシュ316を有する。プロセッサコア314のそれぞれは、
図2の命令実行パイプライン200等の1つ以上の実行パイプラインを含む。
【0018】
図3に示すキャッシュ及びメモリは並列に動作し、したがって、データの一貫性を保証するためにコヒーレンスプロトコルを使用する。そのようなプロトコルの一例は、変更-排他-共有-無効(MESI)プロトコルである。各キャッシュラインは、変更、排他、共有又は無効の4つの状態のうち何れかであり得る。各キャッシュラインは、これら4つの状態のうち何れかのインジケーションを含む。このインジケーションは、キャッシュラインが、上記の4つの状態のうち何れの状態にあるのかを示す。変更状態は、特定のキャッシュに存在するキャッシュラインのコピーが、バッキングメモリに存在するコピーに対して変更され、したがって、キャッシュラインが追い出される場合にキャッシュラインをバッキングメモリに書き込まなければならないことを示す。排他状態は、キャッシュラインが特定のキャッシュにあり、階層の同じレベルの他のキャッシュにはないことを示す。排他とマークされたキャッシュラインを、階層のより高いレベルに配置することができるということに留意されたい。例えば、排他状態のレベル0キャッシュにあるキャッシュラインは、レベル0キャッシュのすぐ上のレベル1キャッシュにあることもできる。共有状態は、キャッシュラインが、階層の同じレベルの複数のキャッシュにあることを示す。無効状態は、キャッシュラインが無効とマークされている特定のキャッシュ内では、そのキャッシュラインが有効でない(ただし、別のキャッシュは、そのキャッシュラインの有効なコピーを有することができる)ということを示す。
【0019】
各プロセッサコア314は、関連するコアレベルキャッシュ316を有する。プロセッサコア314がロード動作又は記憶動作等のメモリ動作を実行すると、プロセッサコア314は、メモリ動作のためのデータを有するキャッシュラインが、プロセッサコア314に関連付けられたコアレベルキャッシュ316内に配置されているかどうかを判定する。そのようなキャッシュラインがコアレベルキャッシュ316内に配置されていない場合、その後、コアレベルキャッシュ316は、プロセッサチップレベルキャッシュ312等の上位レベルのキャッシュから、そのコアレベルキャッシュ316内に、そのキャッシュラインをフェッチしようと試みる。プロセッサチップレベルキャッシュ312は、より高いレベルのキャッシュメモリと、プロセッサチップレベルキャッシュ312及び同じプロセッサチップ310内の全てのコアレベルキャッシュ316について、コヒーレンスプロトコルを管理するコントローラと、の両方としての役割を果たす。したがって、プロセッサチップレベルキャッシュ312は、要求されているキャッシュラインを要求しているプロセッサコア314に提供する目的で、そのキャッシュラインがそれ自体に存在しているかどうかを判定するために自身をチェックする。プロセッサチップレベルキャッシュ312は、それ自体の内容から、又は、上位の階層のメモリから一旦フェッチされたものの何れかから、要求しているコア314にキャッシュラインを提供する。
【0020】
プロセッサチップレベルキャッシュ312は、コアレベルのキャッシュ316に対するコヒーレンスプロトコルを管理する。概して、プロセッサチップレベルキャッシュ312は、コアレベルキャッシュ316内のキャッシュラインのプロトコル状態を管理して、任意のキャッシュラインが特定のコアレベルキャッシュ316内で排他状態にある場合、他のコアレベルキャッシュ316は、無効状態を除く任意の状態にそのキャッシュラインを有しない。複数のコアレベルのキャッシュ316は、キャッシュラインを共有状態にすることが許可される。
【0021】
プロトコルは、レベルごとに機能する。より具体的には、メモリ階層の各レベルにおいて、そのレベル内の各要素は、プロトコルの状態のいくつかのサブセットにキャッシュラインを有することが許可される。一例では、プロセッサセット302のレベルでは、各チップ310(したがって、各プロセッサチップレベルキャッシュ312)は、共有状態又は排他状態等の状態の何れかにキャッシュラインを有することが許可される。階層の特定のレベルのコントローラは、そのレベルでプロトコルを管理する。したがって、プロセッサセットメモリ320は、プロセッサチップレベルキャッシュ312の状態を管理する。任意の特定のプロセッサチップ310のプロセッサチップレベルキャッシュ312は、コアレベルキャッシュ316の状態を管理し、システムメモリコントローラ306は、特定のキャッシュラインを有し得るプロセッサセット302及び他のシステム要素308の状態を管理する。
【0022】
上述したように、キャッシュコントローラは、キャッシュラインのためのコヒーレンス状態を制御する。ロード及び記憶等の様々なメモリアクセス命令タイプは、これらのコヒーレンス状態に関連する異なる挙動をもたらす。概して、プロセッサコア314が特定の状況においていくつかのタイプの命令を実行する場合、プロセッサコア314は、ターゲットとなるキャッシュライン(すなわち、メモリアクセス命令によってアクセスされるデータを含むキャッシュライン)を、特定のコヒーレンス状態にある、関連付けられたキャッシュ(例えば、コアレベルキャッシュ316)内に存在させるトラフィックを生成する。いくつかの例では、メモリアクセス命令は、コアレベルキャッシュ316等のキャッシュ内に現在存在しないキャッシュラインをターゲットにし、したがって、キャッシュミスをもたらす。したがって、キャッシュコントローラ又は他のエンティティは、特定のコヒーレンス状態を有するキャッシュラインをキャッシュ(例えば、コアレベルキャッシュ316)に記憶することによって、この要求に対処する。いくつかのメモリアクセス要求について、ミスに対処することの一部は、プロセッサコア314が、コヒーレンス状態に依存しない方法でキャッシュラインがキャッシュに配置される要求を行うことを含む。一例では、プロセッサコア314は、キャッシュがキャッシュラインを有していないと判定し、キャッシュに任意のコヒーレンス状態のキャッシュラインを取得するように要求する。
【0023】
いくつかの状況においては、キャッシュコントローラは、あるキャッシュラインに対するコヒーレンス状態非依存要求に、そのキャッシュラインを共有状態のキャッシュに入れることによって対処する。他の状況においては、キャッシュコントローラは、あるキャッシュラインに対するコヒーレンス状態非依存要求に、そのキャッシュラインを排他状態のキャッシュに入れることによって対処する。いくつかの例では、このアクティビティは、そのキャッシュラインに対する競合がないとキャッシュコントローラが判定する場合(例えば、他のプロセッサコア314又は他の要素が、そのキャッシュラインへのアクセスを必要としない場合)に発生する。いくつかの状況においては、これは著しい非効率性を結果としてもたらす。例えば、キャッシュラインが排他状態において実際に必要とされることはないが、その後、異なるプロセッサコア314によって必要とされる場合、コヒーレンス状態を、排他状態から無効又は共有等の別の状態に変更することに関連付けられる作業が無駄であると見なされ得る。例えば、1つのコアレベルキャッシュ316内の排他状態にあるキャッシュラインが、共有状態にある別のプロセッサコア314によって要求される場合、その別のプロセッサコア314(又は関連付けられたキャッシュコントローラ)は、キャッシュラインが共有状態にあるべきであるということを示すために、キャッシュラインを記憶するキャッシュにプローブを送信する。プローブに応じて、キャッシュは、キャッシュラインを共有状態に変換する。このプローブ及びキャッシュライン状態変換は、そのキャッシュラインが元々状態非依存要求に応じて共有状態のキャッシュに入っていた状況と比較して、追加の不要な作業を表す。
【0024】
少なくとも上記の理由のために、本明細書では、キャッシュラインに対するコヒーレンス状態非依存要求を生成する予定のメモリアクセスが、その代わりに、共有状態のキャッシュラインに対する要求を、そのような要求が排他状態のそのようなキャッシュラインを必要としないと予測される状況において生成するインスタンスを低減するための技術が提示される。概して、本技術は、メモリアクセスの「クラス」(「メモリアクセスクラス」と呼ばれることもある)を追跡するメモリアクセスメタデータ317を維持することを含む。キャッシュコントローラは、メモリアクセスメタデータ317を使用して、あるキャッシュラインへのアクセスのためのメタデータ状態非依存要求を、共有状態にあるそのキャッシュラインのための要求に変更するかどうかを判定する。
【0025】
キャッシュコントローラは、メモリアクセスメタデータ317を維持し、メモリアクセスの複数の「クラス」に関する情報を格納する。各クラスは、メモリアクセスのタイプを表す。クラスの定義は、アクセスタイプ及びスレッドIDのうち1つ以上と、オプションで他の情報と、を含む。アクセスタイプは、その実行がメモリアクセス要求をもたらした動作のタイプを示す。動作タイプのいくつかの例は、命令タイプを含み、命令タイプは、ロードの1つ以上のタイプ、記憶の1つ以上のタイプ、プリフェッチの1つ以上のタイプ、アトミック動作の1つ以上のタイプ、又は、他のタイプを含むことができる。動作タイプのいくつかの他の例は、ハードウェア開始プリフェッチ動作等のハードウェアベースの動作を含む。任意の他の技術的に実行可能な動作タイプは、可能なアクセスタイプである。また、クラスの定義は、特定のプロセッサ実行スレッドを識別するスレッド識別子(ID)を含む。当業者によって理解されるように、プロセッサコア314等のシステム100のプロセッサは、その各々が、独立制御フローを有するソフトウェアプログラム又はソフトウェアプログラムの一部を表す、異なる実行スレッドを実行することが可能である。アクセスタイプとスレッドIDとの組み合わせがクラスを定義する。いくつかの実施形態では、クラスの定義は、1つ以上の他の特徴も含む。
【0026】
キャッシュコントローラは、クラスごとに、要求ダウングレード決定係数を維持することによって、メモリアクセスメタデータ317を維持する。要求ダウングレード決定係数は、キャッシュコントローラが、コアレベルキャッシュ316内にキャッシュラインを挿入するためのコヒーレンス状態非依存要求を、共有状態のコアレベルキャッシュ316内にキャッシュラインを挿入するための要求に変更すべきかどうかを示す。いくつかの例では、ダウングレード決定係数は、キャッシュラインが排他状態にあり、一度も変更状態に変更されることなく共有状態又は無効状態にされる回数を数えるカウントである。
【0027】
一例では、プロセッサコア314によって実行されるメモリアクセス命令は、プロセッサコア314が、キャッシュラインをキャッシュに入れるようにキャッシュコントローラに要求するコヒーレンス状態非依存要求を生成することを結果としてもたらす。キャッシュコントローラは、メモリアクセス命令に関連付けられたクラスについてのメモリアクセスメタデータ317を検査し、そのクラスのためのキャッシュラインについてのメタデータ状態非依存要求が、共有状態のキャッシュラインについての要求にダウングレードされるべきであると判定する。この判定に応じて、キャッシュコントローラは、キャッシュラインを共有状態のコアレベルキャッシュ316に入れる。
【0028】
別の一例では、プロセッサコア314によって実行されるメモリアクセス命令は、プロセッサコア314が、キャッシュラインをキャッシュに入れるようにキャッシュコントローラに要求するコヒーレンス状態非依存要求を生成することを結果としてもたらす。キャッシュコントローラは、関連付けられたクラスが、コヒーレンス状態非依存要求が共有状態要求にダウングレードされるべきであるというインジケーションを有していないと判定する。これに応じて、キャッシュコントローラは、コヒーレンス状態に依存しない方法でキャッシュラインをキャッシュに入れる。これは、キャッシュコントローラが、キャッシュラインを共有状態又は排他状態(又はコヒーレンスプロトコルが許容する場合には潜在的に他の状態)に自由にすることができるということを意味する。
【0029】
上述したように、キャッシュコントローラは、様々な異なるクラスについて、コヒーレンス状態非依存要求アクセスを共有アクセス要求に変換するかどうかのインジケーションを示す、メタデータメモリ317を維持する。これを行うために、キャッシュコントローラは、様々な異なるクラスに対して、キャッシュラインを不必要に排他状態のキャッシュに入れてしまうインスタンスを監視する。キャッシュコントローラが、所定のクラス又はクラスのグループについての閾値よりも大きい数のそのようなインスタンスがあったと見なす場合、キャッシュコントローラは、メタデータメモリ317に、キャッシュラインをキャッシュに入れるためのコヒーレンス状態非依存要求が、キャッシュラインを共有状態のキャッシュに入れるための要求に変換されるべきであるということを示させる。
【0030】
いくつかの例では、キャッシュラインを特定のクラスのための排他状態のキャッシュに不必要に入れてしまうインスタンスは、キャッシュラインが排他状態にされるが、次いで、キャッシュラインが書き込まれる前に除去されるか又は共有状態に変換されるという場合に生じる。いくつかの例では、キャッシュコントローラは、キャッシュラインが排他状態のキャッシュラインにされ、次いで、変更状態に変換される前に、(例えば、異なる並列キャッシュに関連付けられたプロセッサコア314による読取りに起因して)共有状態に変換されるか(例えば、別のプロセッサコア314が排他若しくは共有状態のキャッシュラインを要求することに起因して、又は、キャッシュからの容量追い出し(エビクト)に起因して)無効状態に変換される場合に、そのような発生を検出する。
【0031】
いくつかの例では、メタデータメモリ317は、可能なクラスごとにエントリを含む。各エントリは、エントリが関連付けられているクラスを明示的に示すか(例えば、数値ラベルを介して)、又は、エントリが関連付けられているクラスを暗示的に示す(例えば、メタデータメモリ317内の位置に基づいて)。いくつかの例では、エントリは、各クラスについてのカウント(決定係数)を含むが、そのカウントは、キャッシュラインを排他状態のキャッシュに不必要に入れてしまうインスタンスが、その関連するクラスについて発生する回数を示す。キャッシュコントローラは、キャッシュラインを不必要に排他状態のキャッシュに入れてしまうインスタンスが発生した場合、クラスのカウントをインクリメントする。カウントが閾値を上回る場合、エントリは、そのクラスについて、コヒーレンス状態非依存要求が共有状態要求にダウングレードされるべきであるというインジケーションを含むと見なされる。カウントが閾値を上回らない場合、エントリは、そのようなインジケーションを含まないと見なされる。特定の情報を記憶するメタデータメモリ317の特定の構成が説明されるが、そのクラスについて、コヒーレンス状態非依存要求が、キャッシュラインを共有状態にする要求にダウングレードされるべきかどうかの、クラスごとのインジケーションを含む、様々な構成の任意のものが可能であることを理解されたい。
【0032】
特定のユニットが特定の動作を実行するものとして説明されているが、多くの変形が可能であるということを理解されたい。いくつかの例では、プロセッサコア314又は別のユニットが、キャッシュラインをキャッシュに挿入する要求を結果としてもたらすメモリアクセスを生成する。いくつかの例では、キャッシュラインが挿入されるキャッシュは、コアレベルキャッシュ316である。他の例では、階層内の異なるキャッシュは、キャッシュラインが存在するキャッシュである。いくつかの例では、
図3に示されていないキャッシュコントローラは、メタデータメモリを監視及び更新するユニットであり、且つ、プロセッサコア314によって生成された要求をダウングレードするユニットである。いくつかの例では、キャッシュコントローラは、コアレベルキャッシュ316のためのコントローラ、プロセッサチップレベルキャッシュ312のためのキャッシュコントローラ、又は、異なるキャッシュコントローラ若しくはユニットである。いくつかの例では、メタデータメモリ317は、各コアレベルキャッシュ316と共に記憶される。いくつかの例では、メタデータメモリ317は、各プロセッサチップレベルキャッシュ312と共に記憶される。他の例では、メタデータメモリ317は、任意の他の場所に記憶される。いくつかの例では、キャッシュコントローラは、本明細書で説明する動作を実行するように構成されたハードウェア回路、プロセッサ上で実行されるソフトウェア、又は、それらの組み合わせである。
【0033】
メタデータメモリ317は、クラス単位で情報を維持するが、キャッシュライン単位では維持しないということに留意されたい。したがって、同じキャッシュについての異なるキャッシュラインに対する動作は、特定のクラスについての要求をダウングレードするかどうかのインジケーションに影響を及ぼす。例えば、上述した閾値が5であり、5つの異なるキャッシュラインが排他から共有に変化するコヒーレンス状態を有する場合、その後、キャッシュコントローラは、メタデータメモリ317に、そのクラスについて要求がダウングレードされるべきであるということを示させる。
【0034】
図4A~
図4Dは、キャッシュラインについての要求をダウングレードすることに関連する動作を示す。
図4Aは、コヒーレンス状態非依存要求に応じて、キャッシュラインが排他状態のキャッシュ406に入れられる例示的な動作を示す。プロセッサコア314は、メモリアクセス動作401を実行し、その結果、キャッシュ406においてキャッシュミスが生じる。その後、プロセッサコア314は、コヒーレンス状態非依存要求をキャッシュコントローラ402に送信して、キャッシュラインをキャッシュ406に入れる。この要求に応じて、キャッシュコントローラ402は、キャッシュ406内のキャッシュラインを排他状態にする。キャッシュコントローラ402が、他のコヒーレンス状態でキャッシュラインをキャッシュ406に入れることは可能であるが、図示されたインスタンスでは、キャッシュラインは排他状態でキャッシュ406に入れられるということに留意されたい。
【0035】
図4Bは、キャッシュラインをキャッシュ406に挿入するためのコヒーレンス状態非依存要求がキャッシュラインを共有状態のキャッシュ406に挿入するための要求にダウングレードされるべきであるということを示すために、メタデータメモリ404があるクラスについて更新される例示的な動作を示す。
図4Bにおいて、プロセッサコア314は、キャッシュコントローラ402にキャッシュラインの状態を排他状態から共有状態又は無効状態に変更させる閾値数の要求を行う。この閾値数の要求は、単一のクラスに対して発生する。この閾値数は、1つ以上のプロセッサコア314又は他のエンティティによって実行される多くの動作に応じて、経時的に発生し得るということを理解されたい。閾値数に応じて、キャッシュコントローラ402は、キャッシュ406にキャッシュラインをフェッチするための特定のクラス(閾値数の要求が発生するクラス)に対するコヒーレンス状態非依存要求が、共有状態のキャッシュにキャッシュラインをフェッチするための要求にダウングレードされるべきであるというインジケーションを、メタデータメモリ404に含める。
【0036】
いくつかの例では、キャッシュコントローラ402が、あるクラスのキャッシュラインが変更されることなく共有又は無効になると判定する毎に、キャッシュコントローラ402は、そのクラスのメタデータメモリ404内のカウンタをインクリメントする。カウンタが閾値を上回る場合、キャッシュコントローラ402は、そのカウンタを、コヒーレンス状態非依存要求を共有状態のキャッシュラインに対する要求にダウングレードするためのインジケーションとして解釈する。
【0037】
図4Cは、あるキャッシュラインに対するコヒーレンス状態非依存要求を、共有状態にあるそのキャッシュラインに対する要求にダウングレードするための例示的な動作を示す。メモリアクセス動作403により、キャッシュコントローラ402は、プロセッサコア314等のユニットから特定のクラスに対する要求を受信する。この要求は、キャッシュラインをキャッシュ406に入れるためのコヒーレンス状態非依存要求である。キャッシュコントローラ402は、メタデータメモリ404が、特定のクラスに対するそのような要求がキャッシュラインを共有状態406のキャッシュに入れる要求にダウングレードされるべきであることを示すことを判定する。この判定に応じて、キャッシュコントローラ402は、キャッシュラインを共有状態のキャッシュ406に入れる。
【0038】
図4Dは、排他状態にあるキャッシュラインが変更状態に変換されたことに応じて、特定のクラスのエントリをリセットするための例示的な動作を示す。プロセッサコア314は、メモリアクセス動作405のために、キャッシュラインへの書き込みを実行する。一例では、プロセッサコア314は記憶命令を実行し、その結果、キャッシュラインへの書き込みが行われる。書き込まれるキャッシュラインは排他状態にあり、書き込みは特定のクラス(例えば、スレッドID及びアクセスタイプの特定の組み合わせ)で行われる。キャッシュコントローラ402は、メタデータメモリを更新して、そのクラスについて、キャッシュラインをキャッシュ406に挿入するメタデータ状態非依存要求が、キャッシュラインを共有状態のキャッシュに挿入する要求にダウングレードされるべきではないということを示す。これに続いて、及び、メタデータメモリがこのインジケーションを含む間、キャッシュラインをそのクラスについてキャッシュ406に挿入する要求は、キャッシュラインを排他状態又は共有状態の何れかで記憶することによって満たされる。
【0039】
図5は、一例による、キャッシュ動作を実行するための方法500のフロー図である。
図1~
図4Dのシステムに関して説明したが、当業者は、任意の技術的に実行可能な順序で方法500のステップを実行するように構成された任意のシステムが本開示の範囲内にあるということを理解するであろう。
【0040】
ステップ502において、特定のメモリアクセスクラスについて、キャッシュコントローラは、排他状態にあるキャッシュラインが変更(修正)状態になることなく無効又は共有状態に変更されるインスタンスの閾値数(しきい値数)を検出する。いくつかの例では、キャッシュラインは、ミスに応じてキャッシュに入れられる。いくつかの例では、ミスは、プロセッサコア314によって実行される命令に起因して発生する。いくつかの例では、キャッシュラインは、プリフェッチ要求に応じてキャッシュに入れられる。いくつかの例では、キャッシュラインを排他状態のキャッシュに入れる命令又は動作は、必ずしもそのキャッシュラインを排他状態にする必要はないが、キャッシュコントローラは、キャッシュラインをその状態にする。いくつかの例では、そのようなキャッシュラインが排他状態にあり、キャッシュラインが無効化されるか又は共有状態に変換される場合、キャッシュラインを排他状態にすることは不要と見なされ得る。
【0041】
いくつかの例では、検出は、そのようなインスタンスの数のカウントが、閾値を上回るという検出として起こる。いくつかの例では、このカウントは、メタデータメモリ404に記憶される。キャッシュコントローラは、排他状態にあるキャッシュラインが変更状態になることなく無効状態又は共有状態に変更されることを検出する毎に、カウントをインクリメントする。いくつかの例では、メタデータメモリ404は、クラス毎にそのようなカウントを記憶する。
【0042】
ステップ504において、キャッシュコントローラは、検出に応じて、そのメモリアクセスクラスについて、キャッシュに挿入されるキャッシュラインに対するコヒーレンス状態非依存要求を、共有状態のキャッシュラインに対する要求として処理する(扱う)。いくつかの例では、このステップを実行することは、プロセッサコア314(又は他のエンティティ)がコヒーレンス状態非依存要求を生成する結果となる任意の状況において、キャッシュラインを共有状態のキャッシュに入れることを含む。様々な例では、ロード命令又はプリフェッチは、コヒーレンス状態非依存要求をもたらす。いくつかの例では、そのような動作は、コヒーレンス状態非依存要求を結果としてもたらすが、ステップ502の検出が行われる場合、これらの要求は、共有状態にあるキャッシュラインに対する要求に変換される。
【0043】
ステップ506において、キャッシュコントローラは、そのクラスに対するリセットイベントを検出する。いくつかの例では、リセットイベントは、そのクラスについて、キャッシュラインが排他状態でキャッシュに入れられ、その後に変更されるという検出を含む。ステップ508において、リセットイベントに応じて、キャッシュコントローラは、コヒーレンス状態非依存要求を正常に処理する。一例では、キャッシュコントローラは、共有状態又は排他状態の何れかにおけるそのような要求に応じて、キャッシュラインをキャッシュに自由に入れることができる。したがって、いくつかの例では、このリセットイベントの後(又はステップ502で説明された閾値数のインスタンスの検出の前)、キャッシュコントローラは、状態非依存要求に応じて1つのキャッシュラインを排他状態にし、状態非依存要求に応答して別のキャッシュラインを共有状態にする。
【0044】
本明細書の開示に基づいて、多くの変形が可能であることを理解されたい。特徴及び要素が特定の組み合わせで上述されているが、各特徴又は要素は、他の特徴及び要素を用いずに単独で、又は、他の特徴及び要素を用いて若しくは用いずに他の特徴及び要素との様々な組み合わせで使用されてもよい。
【0045】
図に例示される様々な要素は、ハードウェア(例えば、回路)、プロセッサ上で実行されるソフトウェア、又は、ハードウェアとソフトウェアとの組み合わせとして実装可能である。様々な例では、例えば、プロセッサチップ310、システム要素308、システムレベルメモリ304、システムメモリコントローラ306、プロセッサチップレベルキャッシュ312、プロセッサセットメモリ320、プロセッサコア314、コアレベルキャッシュ316、メタデータメモリ317、キャッシュコントローラ402、メタデータメモリ404、及び、キャッシュ406等の各ブロック、並びに、命令実行パイプライン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)命令及びネットリスト等の他の中間データ(そのような命令は、コンピュータ可読媒体に記憶させることが可能である)の結果を使用して製造プロセスを構成することによって製造され得る。そのような処理の結果はマスクワークとすることができ、このマスクワークをその後の半導体製造プロセスにおいて使用して、実施形態の態様を実施するプロセッサを製造する。
【0046】
本明細書に提供される方法又はフロー図は、汎用コンピュータ又はプロセッサによる実施のために非一時的なコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェア又はファームウェアにおいて実施され得る。非一時的なコンピュータ可読記憶媒体の例としては、読み取り専用メモリ(read only memory、ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、CD-ROMディスク及びデジタル多用途ディスク(digital versatile disk、DVD)等の光学媒体が挙げられる。
【国際調査報告】