(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-22
(45)【発行日】2023-12-01
(54)【発明の名称】大規模なキャッシュサイズに適合する領域ベースのディレクトリスキーム
(51)【国際特許分類】
G06F 12/0817 20160101AFI20231124BHJP
【FI】
G06F12/0817
(21)【出願番号】P 2020552670
(86)(22)【出願日】2018-09-19
(86)【国際出願番号】 US2018051765
(87)【国際公開番号】W WO2019125559
(87)【国際公開日】2019-06-27
【審査請求日】2021-09-15
(32)【優先日】2017-12-18
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ヴィドヒャナサン カリヤナスンダラム
(72)【発明者】
【氏名】ケビン エム. リパク
(72)【発明者】
【氏名】アミット ピー. アプテ
(72)【発明者】
【氏名】ガネシュ バラクリシュナン
(72)【発明者】
【氏名】エリック クリストファー モートン
(72)【発明者】
【氏名】エリザベス エム. クーパー
(72)【発明者】
【氏名】ラビンドラ エヌ. バルガバ
【審査官】田名網 忠雄
(56)【参考文献】
【文献】米国特許第08812786(US,B2)
【文献】特開平09-311820(JP,A)
【文献】国際公開第2012/035605(WO,A1)
【文献】特開2005-234854(JP,A)
【文献】特開平08-263374(JP,A)
【文献】米国特許出願公開第2014/0032848(US,A1)
【文献】米国特許出願公開第2010/0191914(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/0817
(57)【特許請求の範囲】
【請求項1】
複数の処理ノードであって、各処理ノードは1つ以上のプロセッサ、及びキャッシュサブシステムを含む、前記複数の処理ノードと、
メモリと、
キャッシュディレクトリと、を備えるシステムであって、
前記キャッシュディレクトリは、
システムのいずれかのキャッシュサブシステムにキャッシュされる少なくとも1つのキャッシュラインを含むメモリの領域ごとにエントリを維持することであって、領域は複数のキャッシュラインを含む、ことと、
領域がプライベートであるか、共有されるかを追跡することであって、共有される領域は、複数のクラスタによって記憶された1つ以上のキャッシュラインを有し、プライベート領域は、単一のクラスタのみによって記憶されたキャッシュラインを有する、ことと、
第一領域のステータスがプライベートから共有に変化したのを検出したことに応じて、前記第一領域に対応する第一エントリの第一フィールドを、前記第一領域のキャッシュラインを記憶するクラスタを示すクラスタ有効フィールドとして解釈することと、
前記第一領域がプライベートであると決定したことに応じて、前記第一エントリの前記第一フィールドを、前記第一領域のキャッシュラインを記憶するクラスタの
処理ノードを示す
プロセッサ有効フィールドとして解釈することと、
を行うように構成されている、システム。
【請求項2】
前記キャッシュディレクトリは、
第一領域の第一キャッシュラインが前記システムの第一キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、第一エントリを前記第一領域に割り振ることと、
前記第一エントリの参照カウントを1に初期化することと、
前記第一領域の第二キャッシュラインが前記システムの第二キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、前記第一エントリの前記参照カウントをインクリメントすることと、
を行うようにさらに構成されている、請求項1に記載のシステム。
【請求項3】
クラスタは、
処理ノードのグループを含む、請求項1に記載のシステム。
【請求項4】
前記キャッシュディレクトリは、
第一アレイを維持して第一粒度でメモリの部分を追跡し、第二アレイを維持して第二粒度でメモリの部分を追跡することであって、前記第二粒度は前記第一粒度よりも細かい粒度であり、前記第一エントリは前記第一アレイ及び前記第二アレイのうち1つに含まれる、ことと、
所与のメモリ要求を受信することに応答して、前記第一アレイ及び前記第二アレイへのルックアップを並行して実行することと、
を行うようにさらに構成されている、請求項1に記載のシステム。
【請求項5】
前記キャッシュディレクトリは、
対応する領域内の複数のキャッシュラインのうち何れかのキャッシュラインがダーティコヒーレンシ状態を有する場合に、前記対応する領域の集約状態をダーティコヒーレンシ状態として維持することと、
前記複数のキャッシュラインのうち何れかのキャッシュラインが共有コヒーレンシ状態を有する場合に、前記対応する領域の集約状態を共有コヒーレンシ状態として維持することと、
を行うようにさらに構成されている、請求項1に記載のシステム。
【請求項6】
前記キャッシュディレクトリは、
第一アレイのエントリと第二アレイのエントリとを含み、前記第一エントリは、前記第一アレイ及び前記第二アレイのうち1つに存在しており、
前記第一アレイ中のエントリの参照カウントフィールドを監視することと、
所与の領域についての参照カウントが閾値を上回ったことを検出することに応答して、前記所与の領域を、以前に追跡したよりも細かい粒度ベースで追跡し始めることと、
前記参照カウントが前記閾値を上回ったことを検出した後に、前記所与の領域を標的とするメモリ要求を受信することに応答して、前記第二アレイ中にエントリを作成することと、
を行うようにさらに構成されている、請求項1に記載のシステム。
【請求項7】
キャッシュディレクトリ中で、複数のキャッシュラインを含むメモリの領域であって、システムのいずれかのキャッシュサブシステムにキャッシュされる少なくとも1つのキャッシュラインを含むメモリの領域ごとにエントリを維持することと、
領域がプライベートであるか、共有されるかを追跡することであって、共有される領域は、複数のクラスタによって記憶された1つ以上のキャッシュラインを有し、プライベート領域は、単一のクラスタのみによって記憶されたキャッシュラインを有する、ことと、
第一領域のステータスがプライベートから共有に変化したのを検出したことに応じて、前記第一領域に対応する第一エントリの第一フィールドを、前記第一領域のキャッシュラインを記憶するクラスタを示すクラスタ有効フィールドとして解釈することと、
前記第一領域がプライベートであると決定したことに応じて、前記第一エントリの前記第一フィールドを、前記第一領域のキャッシュラインを記憶するクラスタの
処理ノードを示す
プロセッサ有効フィールドとして解釈することと、を含む、方法。
【請求項8】
第一領域の第一キャッシュラインが前記システムの第一キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、第一エントリを前記第一領域に割り振ることと、
前記第一エントリの参照カウントを1に初期化することと、
前記第一領域の第二キャッシュラインが前記システムの第二キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、前記第一エントリの前記参照カウントをインクリメントすることと、をさらに含む、請求項7に記載の方法。
【請求項9】
クラスタは、
処理ノードのグループを含む、請求項7に記載の方法。
【請求項10】
前記キャッシュディレクトリは、第一アレイのエントリと第二アレイのエントリとを含み、前記第一エントリは、前記第一アレイ及び前記第二アレイのうち1つに存在しており、
前記方法は、
前記第一アレイを維持して第一粒度でメモリの部分を追跡することと、
前記第二アレイを維持して前記第一粒度よりも細かい粒度である第二粒度でメモリの部分を追跡することと、
所与のメモリ要求を受信することに応答して、前記第一アレイ及び前記第二アレイへのルックアップを並行して実行することと、
前記ルックアップが前記第一アレイ及び前記第二アレイの両方にヒットすることに応答して、前記第二アレイのマッチングするエントリから抽出されるデータのみに基づきプローブを生成することと、をさらに含む、請求項7に記載の方法。
【請求項11】
対応する領域内の複数のキャッシュラインのうち何れかのキャッシュラインがダーティコヒーレンシ状態を有する場合に、前記対応する領域の集約状態をダーティコヒーレンシ状態として維持することと、
前記複数のキャッシュラインのうち何れかのキャッシュラインが共有コヒーレンシ状態を有する場合に、前記対応する領域の集約状態を共有コヒーレンシ状態として維持することと、をさらに含む、請求項7に記載の方法。
【請求項12】
前記キャッシュディレクトリは、第一アレイのエントリと第二アレイのエントリとを含み、前記第一エントリは、前記第一アレイ及び前記第二アレイのうち1つに存在しており、
前記方法は、
前記第一アレイ中のエントリの参照カウントフィールドを監視することと、
所与の領域についての参照カウントが閾値を上回ったことを検出することに応答して、前記所与の領域をより細かい粒度ベースで追跡し始めることと、
前記参照カウントが前記閾値を上回ったことを検出した後に、前記所与の領域を標的とするメモリ要求を受信することに応答して、前記第二アレイ中にエントリを作成することと、をさらに含む、請求項7に記載の方法。
【請求項13】
キャッシュディレクトリを備える装置であって、
前記キャッシュディレクトリは、
複数のキャッシュラインを含むメモリの領域であって、複数のキャッシュサブシステムのいずれかにキャッシュされる少なくとも1つのキャッシュラインを含むメモリの領域ごとにエントリを維持することと、
領域がプライベートであるか、共有されるかを追跡することであって、共有される領域は、複数のクラスタによって記憶された1つ以上のキャッシュラインを有し、プライベート領域は、単一のクラスタのみによって記憶されたキャッシュラインを有する、ことと、
第一領域のステータスがプライベートから共有に変化したのを検出したことに応じて、前記第一領域に対応する第一エントリの第一フィールドを、前記第一領域のキャッシュラインを記憶するクラスタを示すクラスタ有効フィールドとして解釈することと、
前記第一領域がプライベートであると決定したことに応じて、前記第一エントリの前記第一フィールドを、前記第一領域のキャッシュラインを記憶するクラスタの
処理ノードを示す
プロセッサ有効フィールドとして解釈することと、
を行うように構成されている、装置。
【請求項14】
前記キャッシュディレクトリは、
第一領域の第一キャッシュラインが前記装置の第一キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、第一エントリを前記第一領域に割り振ることと、
前記第一エントリの参照カウントを1に初期化することと、
前記第一領域の第二キャッシュラインが前記
装置の第二キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、前記第一エントリの前記参照カウントをインクリメントすることと、
を行うようにさらに構成されている、請求項13に記載の装置。
【請求項15】
クラスタは、
処理ノードのグループを含む、請求項14に記載の装置。
【請求項16】
前記キャッシュディレクトリは、
第一アレイのエントリと第二アレイのエントリとを含み、前記第一エントリは、前記第一アレイ及び前記第二アレイのうち1つに存在しており、
前記第一アレイを維持して第一粒度でメモリの部分を追跡することと、
前記第二アレイを維持して前記第一粒度よりも細かい粒度である第二粒度でメモリの部分を追跡することと、
所与のメモリ要求を受信することに応答して、前記第一アレイ及び前記第二アレイへのルックアップを並行して実行することと、
前記ルックアップが前記第一アレイ及び前記第二アレイの両方にヒットすることに応答して、前記第二アレイのマッチングするエントリから抽出されるデータのみに基づきプローブを生成することと、
を行うようにさらに構成されている、請求項13に記載の装置。
【請求項17】
前記キャッシュディレクトリは、
対応する領域内の複数のキャッシュラインのうち何れかのキャッシュラインがダーティコヒーレンシ状態を有する場合に、前記対応する領域の集約状態をダーティコヒーレンシ状態として維持することと、
前記複数のキャッシュラインのうち何れかのキャッシュラインが共有コヒーレンシ状態を有する場合に、前記対応する領域の集約状態を共有コヒーレンシ状態として維持することと、
を行うようにさらに構成されている、請求項13に記載の装置。
【発明の詳細な説明】
【背景技術】
【0001】
関連技術の説明
コンピュータシステムは、通常は安価で高密度のダイナミックランダムアクセスメモリ(DRAM)チップで形成されるメインメモリを使用する。ただし、DRAMチップは、比較的長いアクセス時間を必要とする。パフォーマンスを向上させるために、データプロセッサは、キャッシュとして知られている少なくとも1つのローカルの、高速メモリを通常含む。マルチコアデータプロセッサでは、各データプロセッサコアは、独自の専用のレベル1(L1)キャッシュを含むことができ、他のキャッシュレベル2(L2)、レベル3(L3)など)は、データプロセッサコアによって共有される。
【0002】
コンピューティングシステム中のキャッシュサブシステムは、データブロックを格納するように設定される高速キャッシュメモリを含む。本明細書に使用される場合、「ブロック」は、隣接しているメモリ位置に格納される1セットのバイトであり、これらは、コヒーレンシ目的のためにユニットとして取り扱われる。本明細書に使用される場合、「キャッシュブロック」、「ブロック」、「キャッシュライン」、及び「ライン」という用語のそれぞれは、置き換えることができる。いくつかの実施形態では、ブロックは、キャッシュ中の割り振り及び割り振り解除のユニットであってもよい。ブロック中のバイト数は、設計上の選択によって異なり、いかなるサイズであってもよい。さらに、「キャッシュタグ」、「キャッシュラインタグ」、及び「キャッシュブロックタグ」という用語のそれぞれは、置き換えることができる。
【0003】
マルチノードコンピュータシステムでは、さまざまな処理ノードによって使用されているデータのコヒーレンシを維持するために、特別な予防策を講じる必要がある。例えば、プロセッサがある特定のメモリアドレスでデータにアクセスしようとする場合、まずメモリが別のキャッシュに格納されていて、変更されているかどうかを判定する必要がある。このキャッシュコヒーレンシプロトコルを実装するために、キャッシュは、システム全体を通してデータコヒーレンシを維持するためにキャッシュラインのステータスを示す複数のステータスビットを通常含む。一般的なコヒーレンシプロトコルの1つは、「MOESI」プロトコルとして知られている。MOESIプロトコルに従って、各キャッシュラインは、キャッシュラインが変更されている(M)こと、キャッシュラインが排他的である(E)、もしくは共有されている(S)こと、またはキャッシュラインが無効である(I)ことを示すビットを含む、ラインがあるMOESI状態を示すステータスビットを含む。所有(O)状態は、ラインが1つのキャッシュ中で変更されていること、他のキャッシュ中に共有されたコピーがある可能性があること、及びメモリ中のデータが無効であることを示す。
【0004】
キャッシュディレクトリは、高性能でスケーラブルなシステム中に構築する重要なブロックである。キャッシュディレクトリを使用して、システムによって現在使用中であるキャッシュラインの追跡を続ける。キャッシュディレクトリは、必要な場合にのみメモリ要求またはプローブ要求を実行することにより、メモリ帯域幅、及びプローブ帯域幅の減少の両方を改善する。論理的には、キャッシュディレクトリは、キャッシュコヒーレンスプロトコルを実施するキャッシュラインのホームノードに存在する。キャッシュディレクトリの動作原理は包括的である(すなわち、中央処理装置(CPU)キャッシュに存在するラインはキャッシュディレクトリに存在する必要がある)。キャッシュラインベースのディレクトリスキームでは、各キャッシュラインは個別に追跡される。その結果、キャッシュディレクトリのサイズは、コンピューティングシステム中のすべてのCPUキャッシュサブシステムの総容量に比例して増加する。時間の経過とともに、CPUキャッシュサイズは、大幅に増大している。この増大の結果として、ラインベースのキャッシュディレクトリを維持することは非常に困難になった。
【0005】
添付図面と共に以下の説明を参照することによって、本明細書で説明される方法及び機構の利点をより良好に理解することができる。
【図面の簡単な説明】
【0006】
【
図1】コンピューティングシステムの一実施形態のブロック図である。
【
図2】コア複合体の一実施形態のブロック図である。
【
図3】マルチCPUシステムの一実施形態のブロック図である。
【
図4】キャッシュディレクトリの一実施形態のブロック図である。
【
図5】キャッシュディレクトリの別の実施形態のブロック図である。
【
図6】キャッシュディレクトリの別の実施形態のブロック図である。
【
図7】キャッシュディレクトリのエントリ内のクラスタ有効フィールドを転用する一実施形態の図解である。
【
図8】領域ベースのキャッシュディレクトリを維持するための方法の一実施形態を示す一般化された流れ図である。
【
図9】コヒーレントスレーブがCPUからの無効化インディケーションを処理するための方法の一実施形態を示す一般化された流れ図である。
【
図10】キャッシュディレクトリがメモリの第一領域へのアクセスを追跡するための方法の一実施形態を示す一般化された流れ図である。
【
図11】異なる粒度レベルでキャッシュディレクトリのアレイを維持するための方法の一実施形態を示す一般化された流れ図である。
【
図12】マルチアレイキャッシュディレクトリを操作するための方法の一実施形態を示す一般化された流れ図である。
【
図13】キャッシュディレクトリが直近に訪問済みのプライベート領域についてのエントリを伴うデータ構造を維持するための方法の一実施形態を示す一般化された流れ図である。
【
図14】異なる粒度レベルでキャッシュディレクトリのアレイを維持するための方法の一実施形態を示す一般化された流れ図である。
【発明を実施するための形態】
【0007】
以下の説明では、本明細書に提示される方法及び機構の完全な理解を提供するために、多くの具体的な詳細が述べられている。しかしながら、当業者は、それらの特定の詳細なしにさまざまな実施形態を実施することができることを認識するべきである。いくつかの例では、本明細書で説明されるアプローチを曖昧にすることを回避するために、公知な構造、コンポーネント、信号、コンピュータプログラム命令、及び技術が詳細には示されていない。例示の簡潔性及び明確さのために、図に示される要素は、必ずしも縮尺通りに描かれていないことが認識されよう。例えば、要素のいくつかの寸法は、他の要素に対して拡張されてもよい。
【0008】
大規模なキャッシュサイズに適合する領域ベースのキャッシュディレクトリスキームを実装するためのさまざまなシステム、装置、方法、及びコンピュータ可読媒体を本明細書に開示する。一実施形態では、システムは、少なくとも複数の処理ノード、メモリ、及びキャッシュディレクトリを含む。各処理ノードは、1つ以上のプロセッサ、及びキャッシュサブシステムを含む。一実施形態では、キャッシュディレクトリは、領域ごとにメモリの部分を追跡するように設定され、各領域は、複数のキャッシュラインを含む。キャッシュディレクトリは、システムのいずれかのキャッシュサブシステムにキャッシュされる少なくとも1つのキャッシュラインを含むメモリの領域ごとにエントリを維持する。また、キャッシュディレクトリは、エントリごとに参照カウントを維持し、参照カウントは、システムのすべてのキャッシュサブシステムにキャッシュされる領域のキャッシュライン数の合計である。キャッシュディレクトリは、所与のエントリについての参照カウントがゼロに達することに応答して、所与のエントリを回収する。
【0009】
一実施形態では、第一領域の第一キャッシュラインがシステムの第一キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、キャッシュディレクトリは第一エントリを第一領域に割り振る。また、キャッシュディレクトリは、新しく割り振られた第一エントリの参照カウントを1に初期化する。キャッシュディレクトリは、第一領域の第二キャッシュラインがシステムの第二キャッシュサブシステムによってキャッシュされているというインディケーションを受信することに応答して、第一エントリの参照カウントを2にインクリメントし、第二キャッシュラインは、必ずしも第一キャッシュラインと物理的に異ならない。キャッシュサブシステムによってキャッシュされる第一領域の後続のキャッシュラインごとに、キャッシュディレクトリは、参照カウントをインクリメントする。
【0010】
一実施形態では、キャッシュディレクトリは、領域がプライベートであるか、共有であるかを追跡する。例えば、キャッシュディレクトリは、第一領域を追跡するための第一エントリを格納する。第一領域がプライベートであるときに、第一エントリの第一フィールドは、1番目の意味を有するものとして解釈される。第一領域が共有されるときに、第一エントリの第一フィールドは、1番目の意味とは異なる2番目の意味を有するものとして解釈される。一実施形態では、第一領域がプライベートであるときに、第一フィールドは、CPU有効フィールドとして解釈され、第一領域が共有されるときに、第一フィールドは、クラスタ有効フィールドとして解釈され、クラスタは、特定のグループのCPUを指す。
【0011】
一実施形態では、キャッシュディレクトリは、第一アレイを維持して第一粒度でメモリの部分を追跡する。キャッシュディレクトリは、第二アレイを維持して第二粒度でメモリの部分を追跡し、第二粒度は、第一粒度よりも細かい粒度である。この実施形態では、キャッシュディレクトリは、所与のメモリ要求を受信することに応答して、第一アレイ及び第二アレイへのルックアップを並行して実行する。キャッシュディレクトリは、ルックアップが第一アレイ及び第二アレイの両方にヒットすることに応答して、第二アレイのマッチングするエントリから抽出されるデータのみに基づき1つ以上のプローブを生成する。
【0012】
一実施形態では、キャッシュディレクトリは、第一アレイ中のエントリの参照カウントフィールドを監視する。一実施形態では、キャッシュディレクトリは、領域がプライベートから共有に移行したことを検出することに応答して、より細かい粒度ごとに所与の領域を追跡し始める。この実施形態では、キャッシュディレクトリは、領域がプライベートから共有に移行したことを検出した後に、所与の領域を標的とするメモリ要求を受信することに応答して、第二アレイにエントリを作成する。別の実施形態では、キャッシュディレクトリは、所与の領域についての参照カウントがプログラム可能な閾値を上回ったことを検出することに応答して、所与の領域をより細かい粒度ごとに追跡し始める。この実施形態では、キャッシュディレクトリは、参照カウントが閾値を上回ったことを検出した後に、所与の領域を標的とするメモリ要求を受信することに応答して、第二アレイ中にエントリを作成する。一実施形態では、第一アレイは、領域ベースのアレイであり、第二アレイは、ラインベースのアレイである。
【0013】
ここで
図1を参照して、コンピューティングシステム100の一実施形態のブロック図を示す。一実施形態では、コンピューティングシステム100は、少なくともコア複合体105A~N、入力/出力(I/O)インタフェース120、バス125、メモリコントローラ(複数可)130、及びネットワークインタフェース135を含む。他の実施形態では、コンピューティングシステム100は、他のコンポーネントを含むことができる、及び/またはコンピューティングシステム100は、異なって配列されてもよい。一実施形態では、各コア複合体105A~Nは、中央処理装置(CPU)などの1つ以上の汎用プロセッサを含む。「コア複合体」は本明細書では「処理ノード」または「CPU」とも称することができることに留意する。いくつかの実施形態では、1つ以上のコア複合体105A~Nは、高度に並列なアーキテクチャを備えるデータ並列プロセッサを含むことができる。データ並列プロセッサの例は、グラフィックスプロセッシングユニット(GPU)、デジタルシグナルプロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)などを含む。コア複合体105A~N内の各プロセッサコアは、1つ以上のレベルのキャッシュを有するキャッシュサブシステムを含む。一実施形態では、各コア複合体105A~Nは、複数のプロセッサコア間で共有されるキャッシュ(例えば、レベル3(L3)キャッシュ)を含む。
【0014】
メモリコントローラ(複数可)130は、コア複合体105A~Nによってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ(複数可)130は、任意の数及びタイプのメモリデバイス(図示せず)に結合される。例えば、メモリコントローラ(複数可)130に結合されるメモリデバイス(複数可)におけるメモリのタイプは、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(FeRAM)、またはその他のものを含むことができる。I/Oインタフェース120は、いずれかの数及びタイプのI/Oインタフェース(例えば、ペリフェラルコンポーネントインターコネクト(PCI)バス、PCI-Extended(PCI-X)、PCIE(PCI Express)バス、ギガビットイーサネット(GBE)バス、ユニバーサルシリアルバス(USB))を表す。さまざまなタイプのペリフェラルデバイスは、I/Oインタフェース120に結合されてもよい。それらのようなペリフェラルデバイスは、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック、または他のタイプのゲームコントローラ、メディア記録デバイス、外部記憶装置、及びネットワークインタフェースカードなどを含む(がそれらに限定されない)。
【0015】
さまざまな実施形態では、コンピューティングシステム100は、サーバ、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、ストリーミングデバイス、ウェアラブルデバイス、またはさまざまな他のタイプのコンピューティングシステムもしくはデバイスのいずれかであってもよい。コンピューティングシステム100のコンポーネントの数は、実施形態ごとに変わってもよいことに留意されよう。
図1に示された数よりも多い、または少ない各コンポーネントが存在してもよい。また、コンピューティングシステム100は、
図1に示されていない他のコンポーネントを含むことができることに留意されよう。加えて、他の実施形態では、コンピューティングシステム100は、
図1に示された以外の方式において構造化されてもよい。
【0016】
ここで
図2を参照して、コア複合体200の一実施形態のブロック図を示す。一実施形態では、コア複合体200は、4つのプロセッサコア210A~Dを含む。他の実施形態では、コア複合体200は、他の数のプロセッサコアを含むことができる。「コア複合体」は本明細書において「処理ノード」または「CPU」とも称することができることに留意する。一実施形態では、コア複合体200のコンポーネントは、コア複合体105A~N(
図1の)内に含まれる。
【0017】
各プロセッサコア210A~Dは、メモリサブシステム(図示せず)から取得されるデータ及びインストラクションを格納するためのキャッシュサブシステムを含む。例えば、一実施形態では、各コア210A~Dは、対応するレベル1(L1)キャッシュ215A~Dを含む。各プロセッサコア210A~Dは、対応するレベル2(L2)キャッシュ220A~Dを含む、またはそれに結合できる。さらに、一実施形態では、コア複合体200は、プロセッサコア210A~Dによって共有されるレベル3(L3)キャッシュ230を含む。L3キャッシュ230は、ファブリック及びメモリサブシステムへのアクセスのためのコヒーレントマスターに結合される。他の実施形態では、コア複合体200が他の数のキャッシュを有する、及び/またはさまざまなキャッシュレベルの他のコンフィグレーションを有する、他のタイプのキャッシュサブシステムを含むことができることに留意する。
【0018】
ここで
図3を参照して、マルチCPUシステム300の一実施形態のブロック図を示す。一実施形態では、システムは、複数のCPU305A~Nを含む。システムあたりのCPUの数は、実施形態ごとに異なることができる。各CPU305A~Nは、任意の数のコア308A~Nをそれぞれ含むことができ、コアの数は、実施形態によって異なる。各CPU305A~Nは、対応するキャッシュサブシステム310A~Nも含む。各キャッシュサブシステム310A~Nは、任意の数のレベルのキャッシュ、及び任意のタイプのキャッシュ階層構造を含むことができる。
【0019】
一実施形態では、各CPU305A~Nは、対応するコヒーレントマスター315A~Nに接続される。本明細書に使用される場合、「コヒーレントマスター」は、相互接続(例えば、バス/ファブリック318)を介して流れるトラフィックを処理し、接続されたCPUについてのコヒーレンシを管理するエージェントとして定義される。コヒーレンシを管理するために、コヒーレントマスターは、コヒーレンシ関連のメッセージ及びプローブを受信して処理し、コヒーレントマスターは、コヒーレンシ関連の要求及びプローブを生成する。本明細書において「コヒーレントマスター」は「コヒーレントマスターユニット」とも称することができることに留意する。
【0020】
一実施形態では、各CPU305A~Nは、対応するコヒーレントマスター315A~N及びバス/ファブリック318を介して1組のコヒーレントスレーブに結合される。例えば、CPU305Aは、コヒーレントマスター315A及びバス/ファブリック318を介してコヒーレントスレーブ320A~Bに結合される。コヒーレントスレーブ(CS)320Aは、メモリコントローラ(MC)330Aに結合され、コヒーレントスレーブ320Bは、メモリコントローラ330Bに結合される。コヒーレントスレーブ320Aは、キャッシュディレクトリ(CD)325Aに結合され、キャッシュディレクトリ325Aは、メモリコントローラ330Aを介してアクセス可能なメモリについてシステム300にキャッシュされるキャッシュラインを有するメモリ領域についてのエントリを含む。キャッシュディレクトリ325A、及び他のキャッシュディレクトリのそれぞれは「プローブフィルタ」とも称することができることに留意する。同様に、コヒーレントスレーブ320Bは、キャッシュディレクトリ325Bに結合され、キャッシュディレクトリ325Bは、メモリコントローラ330Bを介してアクセス可能なメモリについてシステム300にキャッシュされるキャッシュラインを有するメモリ領域についてのエントリを含む。CPUごとに2つのメモリコントローラを有する例が一実施形態を示すに過ぎないことに留意する。他の実施形態では、各CPU305A~Nが2つ以外の他の数のメモリコントローラに接続できることを理解されたい。
【0021】
CPU305Aのコンフィグレーションと同様のコンフィグレーションでは、CPU305Bは、コヒーレントマスター315B及びバス/ファブリック318を介してコヒーレントスレーブ335A~Bに結合される。コヒーレントスレーブ335Aは、メモリコントローラ350Aを介してメモリに結合され、コヒーレントスレーブ335Aは、キャッシュディレクトリ345Aにも結合され、このキャッシュディレクトリ345Aは、メモリコントローラ350Aを介してアクセス可能なメモリに対応するキャッシュラインのコヒーレンシを管理する。コヒーレントスレーブ335Bは、キャッシュディレクトリ345Bに結合され、コヒーレントスレーブ335Bは、メモリコントローラ365Bを介してメモリに結合される。また、CPU305Nは、コヒーレントマスター315N及びバス/ファブリック318を介してコヒーレントスレーブ355A~Bに結合される。コヒーレントスレーブ355A~Bは、それぞれキャッシュディレクトリ360A~Bに結合され、コヒーレントスレーブ355A~Bは、それぞれメモリコントローラ365A~Bを介してメモリに結合される。本明細書に使用される場合、「コヒーレントスレーブ」は、対応するメモリコントローラを標的とする受信した要求及びプローブを処理することによってコヒーレンシを管理するエージェントとして定義される。本明細書において「コヒーレントスレーブ」は「コヒーレントスレーブユニット」とも称することができることに留意する。さらに、本明細書に使用される場合、「プローブ」は、コヒーレンシポイントからコンピュータシステム中の1つ以上のキャッシュにパスされ、キャッシュがデータブロックのコピーを含むかどうかを判定し、任意選択でキャッシュがデータブロックを配置する必要がある状態を示すメッセージとして定義される。
【0022】
コヒーレントスレーブがその対応するメモリコントローラを標的とするメモリ要求を受信するときに、コヒーレントスレーブは、その対応するキャッシュディレクトリへのルックアップを実行して、要求がいずれかのキャッシュサブシステムにキャッシュされる少なくとも1つのキャッシュラインを含む領域を標的とするかどうかを判定する。一実施形態では、システム300中の各キャッシュディレクトリは、メモリの領域を追跡し、領域は、複数のキャッシュラインを含む。追跡されている領域のサイズは、実施形態ごとに異なることができる。キャッシュラインをより細かい粒度で追跡するのではなく、領域の粒度で追跡することにより、各キャッシュディレクトリのサイズは、縮小する。本明細書において「領域」は「ページ」とも称することができることに留意する。要求がコヒーレントスレーブによって受信されるときに、コヒーレントスレーブは、要求によって標的とされる領域を決定する。次に、この領域についてキャッシュディレクトリのルックアップを実行する。ルックアップの結果がヒットをもたらす場合、コヒーレントスレーブは、ヒットエントリ中で識別されるCPU(複数可)にプローブを送信する。コヒーレントスレーブによって生成されるプローブのタイプは、ヒットエントリで指定されるコヒーレンシ状態によって決定する。
【0023】
図3には示されていないが、他の実施形態では、図を不明瞭にすることを回避するために示されていない、バス/ファブリック318から他のコンポーネントへの他の接続があってもよいことを理解されたい。例えば、別の実施形態では、バス/ファブリック318は、1つ以上のI/Oインタフェース、及び1つ以上のI/Oデバイスへの接続を含む。
【0024】
ここで
図4を参照して、キャッシュディレクトリ400の一実施形態のブロック図を示す。一実施形態では、キャッシュディレクトリ400は、制御ユニット405及びアレイ410を含む。アレイ410は、任意の数のエントリを含むことができ、エントリの数は、実施形態によって異なる。一実施形態では、アレイ410の各エントリは、状態フィールド415、セクタ有効フィールド420、クラスタ有効フィールド425、参照カウントフィールド430、及びタグフィールド435を含む。他の実施形態では、アレイ410のエントリは、他のフィールドを含むことができる、及び/または他の適切な方法で配置できる。
【0025】
状態フィールド415は、領域の集約状態を指定する状態ビットを含む。集約状態は、この特定の領域について最も制限的なキャッシュライン状態の反映である。例えば、所与の領域全体について単一のキャッシュラインのみがダーティである場合でも、所与の領域についての状態は、「ダーティ」として格納される。また、所与の領域全体の単一のキャッシュラインのみが共有される場合でも、所与の領域についての状態は、「共有された」として格納される。
【0026】
セクタ有効フィールド420は、領域内のラインのサブグループまたはセクタに対応するビットベクトルを格納して、細粒度の追跡を提供する。領域内のラインのサブグループを追跡することにより、領域無効化プローブを展開している間に生成される不要な通常のコヒーレンシプローブ及び個々のラインプローブの数を減らすことができる。本明細書に使用される場合、「領域無効化プローブ」は、領域エントリがキャッシュディレクトリから追い出されることに応答してキャッシュディレクトリによって生成されるプローブとして定義される。コヒーレントマスターが領域無効化プローブを受信するときに、コヒーレントマスターは、ローカルCPUによってキャッシュされる領域の各キャッシュラインを無効にする。さらに、トラッカー及びセクタの有効ビットを領域無効化プローブに含み、CPUキャッシュでのプローブ増幅を低減する。
【0027】
サブグループの編成、及びセクタ有効フィールド420内のビット数は、実施形態によって異なることができる。一実施形態では、2つのラインは、セクタ有効フィールド420を使用して特定の領域エントリ内で追跡される。別の実施形態では、各領域エントリ内で他の数のラインを追跡することができる。この実施形態では、セクタ有効フィールド420を使用して、領域内で個別に追跡されているパーティションの数を示すことができる。さらに、パーティションは、セクタ有効フィールド420に格納されるオフセットを使用して識別できる。各オフセットは、所与の領域内の所与のパーティションの位置を識別する。セクタ有効フィールド420、またはエントリの別のフィールドは、所与の領域内のパーティションごとに別個のオーナー及び別個の状態を示すこともできる。
【0028】
クラスタ有効フィールド425は、さまざまなCPUキャッシュクラスタにわたる領域の存在を追跡するためのビットベクトルを含む。例えば、一実施形態では、CPUは、CPUのクラスタに一緒にグループ化される。クラスタ有効フィールド425に格納されるビットベクトルを使用して、通常のコヒーレンシプローブ及び領域無効化プローブについてのプローブ宛先を減少させる。
【0029】
参照カウントフィールド430を使用して、システムのどこかにキャッシュされる領域のキャッシュラインの数を追跡する。領域への最初のアクセス時に、エントリは、テーブル410にインストールされ、参照カウントフィールド430は、1に設定される。時間の経過とともに、キャッシュがこの領域からキャッシュラインにアクセスするたびに、参照カウントがインクリメントされる。この領域からキャッシュラインがキャッシュによって追い出される場合、参照カウントは、デクリメントする。最終的に、参照カウントがゼロに達する場合に、エントリは、無効としてマーク付けされ、そのエントリは、別の領域に再利用できる。参照カウントフィールド430を利用することにより、領域無効化プローブの発生を減らすことができる。参照カウントフィールド430により、エントリがアクティブなサブスクライバのない領域に関連付けられている場合に、ディレクトリエントリを回収することが可能である。一実施形態では、参照カウントが閾値を超えると、参照カウントフィールド430は、飽和する可能性がある。通信データについての広く共有されたアクセスパターンを処理するときに、ある程度の精度を犠牲にしながら、プライベートアクセスパターンを処理するのに十分な大きさの値に閾値を設定することができる。タグフィールド435は、特定の領域と関連するエントリを識別するために使用されるタグビットを含む。
【0030】
ここで
図5を参照して、キャッシュディレクトリ500の別の実施形態のブロック図を示す。一実施形態では、キャッシュディレクトリ500は、領域ベースのアレイ510及び補助ラインベースのアレイ515に結合される少なくとも制御ユニット505を含む。領域ベースのアレイ510は、領域ごとにキャッシュされたデータを追跡するためのエントリを含む。一実施形態では、領域ベースのアレイ510の各エントリは、コンピューティングシステム(例えば、
図3のシステム300)のキャッシュサブシステムによってキャッシュされる領域のキャッシュラインへのアクセスの数を計数する参照カウントを含む。一実施形態では、所与の領域についての参照カウントが閾値に達するときに、所与の領域は、補助ラインベースのアレイ515によってラインごとに追跡され始める。
【0031】
したがって、一実施形態では、所与の領域に対してキャッシュされるキャッシュラインの数が閾値に達するときに、補助ラインベースのアレイ515は、所与の領域の個々のラインへのアクセスを追跡し始める。所与の領域から新しいキャッシュラインにアクセスするたびに、キャッシュラインについて新しいエントリを補助ラインベースのアレイ515に作成する。一実施形態では、領域ベースのアレイ510及びラインベースのアレイ515へのルックアップを並行して実行する。
【0032】
一実施形態では、閾値より大きい参照カウントを有する共有領域のみを、補助ラインベースのアレイ515によってキャッシュラインごとに追跡する。共有領域は、少なくとも2つの異なるCPUのキャッシュサブシステムに格納されるキャッシュラインを含む領域を指す。プライベート領域は、単一のCPUによってのみキャッシュされるキャッシュラインを含む領域を指す。したがって、一実施形態では、閾値より大きい参照カウントを有する共有領域について、ラインベースのアレイ515に1つ以上のエントリがある。この実施形態では、プライベート領域について、ラインベースのアレイ515にいかなるエントリもない。
【0033】
ここで
図6を参照して、キャッシュディレクトリ600の別の実施形態のブロック図を示す。一実施形態では、キャッシュディレクトリ600は、N個の直近にアクセスされたプライベートページをキャッシュするために、制御ユニット605、領域ベースのアレイ610、補助ラインベースのアレイ615、及び構造620を含む。Nが実施形態によって異なることができる正の整数であることに留意する。
【0034】
一実施形態では、構造620は、最後のN個の訪問済みプライベートページについてのエントリを一時的にキャッシュするためのストレージ位置を含む。制御ユニット605が構造620中のエントリにマッチングするメモリ要求または無効化要求を受信するときに、制御ユニット605は、参照カウントをインクリメントし、またはデクリメントし、アレイ610及び615の外の、クラスタ有効フィールド及び/またはセクタ有効フィールドなどを変更するように設定される。したがって、アクセスごとにアレイ610及び615中のエントリを読み出し、これらのエントリに書き込まなければならないというよりもむしろ、最近アクセスされたプライベートページ620へのアクセスは、アレイ610及び615へのアクセスをバイパスすることができる。構造620の使用は、これらのプライベートページのためのキャッシュディレクトリ600への更新を迅速化するのを助けることができる。
【0035】
一実施形態では、セクタ有効ビットまたはクラスタ有効ビットを変更しないI/Oトランザクションは、直近にアクセスされたN個のプライベートページをキャッシュするための構造620から利益を得ることができる。通常、I/Oトランザクションは、所与のエントリについて参照カウントのみを変更し、アレイ610または615の読み出し及び書き込みを毎回実行するのではなく、代わりに構造620を更新することができる。
【0036】
したがって、構造620は、キャッシュディレクトリ600への効率的なアクセスを可能にする。一実施形態では、着信要求は、アレイ610及び615へのルックアップを実行する前に、構造620のルックアップを実行する。一実施形態では、着信要求をコヒーレントスレーブ(例えば、
図3のコヒーレントスレーブ320A)の入力キューに割り振っている間、制御ユニット605は、構造620にヒットまたはミスがあるかどうかを判定する。その後、要求がキューの先頭に達したときに、制御ユニット605は、要求が構造620中のヒットであるかどうかをすでに知っている。要求が構造620中のヒットである場合、アレイ610及び615へのルックアップを回避することができる。
【0037】
ここで
図7を参照して、キャッシュディレクトリのエントリ中のクラスタ有効フィールドを転用する一実施形態の図解を示す。一実施形態では、エントリ705Aは、キャッシュディレクトリによって追跡されている共有領域に関連するさまざまなフィールドを含む。ステータスフィールド710Aは、対応する領域が共有されていることを示す、共有エンコーディング715Aを格納する。本明細書に使用される場合、「共有」領域は、複数の異なるCPUクラスタによってキャッシュされるキャッシュラインを有する領域を指す。ステータスフィールド710Aが共有エンコーディング715Aを格納するときに、クラスタ有効フィールド720Aは、CPUクラスタ725A~Nのどれが対応する領域のキャッシュラインをキャッシュしているかを示す、ビットベクトルを格納する。この例では、クラスタ有効フィールド720Aは、CPUを合わせてクラスタ中でグループ化している。一実施形態では、クラスタビット725A~Nを1に設定する場合、これは、CPUのクラスタが領域からの少なくとも1つのキャッシュラインを格納することを示す。その他の場合、クラスタビット725A~Nを0に設定する場合、これは、クラスタ中のいずれのCPUも領域からのキャッシュラインを格納しないことを示す。エントリ705Aは、図を不明瞭にすることを回避するために示されない任意の数の他のフィールドをも含むことができる。
【0038】
クラスタ有効フィールド720Aがプライベート領域でも同じままであった場合、その領域の少なくとも1つのキャッシュラインをキャッシュしていると識別されるクラスタ内のすべてのCPUにプローブを送信する必要がある。むしろ、一実施形態では、領域がプライベートである(すなわち、単一のクラスタによってのみアクセスされる)場合、クラスタ有効フィールドは、オーナー有効フィールドまたはCPU有効フィールドに転用される。これにより、キャッシュディレクトリが特定の1つのCPUをプライベート領域についてプローブすることが可能である。
【0039】
したがって、エントリ705Aによって追跡されている領域が共有領域からプライベート領域に移行する場合、エントリ705Bは、このプライベート領域についてエントリ705Aと比較したフィールドにおける変更を表す。エントリ705Bに示されるように、ここで、ステータス710Bは、領域のプライベートステータスを表すために符号化するプライベート715Bを含む。ステータス710Bがプライベート715Bに変更されたことから、ここで以前のクラスタ有効フィールド720Aは、CPU有効フィールド720Bになる。CPU有効フィールド720Bに格納されるビットベクトルの各ビット735A~Nは、元のクラスタの単一のCPUを表す。このクラスタの所与のCPUが対応する領域の少なくとも1つのキャッシュラインをキャッシュする場合、特定のCPU735A~Nビットを1に設定する。そうでない場合、クラスタの所与のCPUが領域からいかなるキャッシュラインもキャッシュしない場合、対応するCPU735A~Nビットをゼロに設定する。
【0040】
クラスタ有効フィールド720AをCPU有効フィールド720Bに変更することにより、領域からのキャッシュラインを有するCPUのみに標的とされる指向性プローブを送出することができる。これは、キャッシュディレクトリによって生成される不要なプローブの数を減らすのに役立つ。一実施形態では、プライベート領域(エントリ705Bに対応する)を標的とする要求を異なるクラスタから受信する場合、このプライベート領域は、共有領域になる。これが発生するときに、ここで領域が共有されていることから、クラスタ有効フィールド720Aをその通常の動作にリストアする。
【0041】
ここで
図8を参照して、領域ベースのキャッシュディレクトリを維持するための方法800の一実施形態を示す。考察の目的のために、この実施形態及び
図9~13の実施形態におけるステップを順次示す。しかしながら、説明される方法のさまざまな実施形態では、説明される要素のうちの1つ以上は同時に実行され、示されるのとは異なる順序で実行され、または全体的に省略されることに留意する。他の追加の要素も必要に応じて実行される。本明細書に記載されるさまざまなシステムまたは装置のいずれも、方法800を実装するように設定されている。
【0042】
キャッシュディレクトリは、マルチCPUシステムの任意のキャッシュサブシステムにキャッシュされる少なくとも1つのキャッシュラインを有するメモリの領域を追跡し、各領域は、複数のキャッシュラインを含む(ブロック805)。キャッシュディレクトリは、システムのいずれかのキャッシュサブシステムにキャッシュされる少なくとも1つのキャッシュラインを含むメモリの領域ごとにエントリを維持する(ブロック810)。キャッシュディレクトリは、キャッシュディレクトリの各エントリについて参照カウントを維持し、参照カウントは、システムのすべてのキャッシュサブシステムにキャッシュされる領域のキャッシュライン数の合計である(ブロック815)。キャッシュディレクトリは、所与の領域内のキャッシュラインを標的とするメモリ要求を受信することに応答して、所与の領域の任意のキャッシュラインを備える各CPUにプローブを送信する(ブロック820)。キャッシュディレクトリは、対応する領域のキャッシュラインがCPUによってキャッシュされることに応答して、所与のエントリについて参照カウントをインクリメントする(ブロック825)。キャッシュディレクトリは、対応する領域のキャッシュラインがCPUのキャッシュサブシステムから追い出されることに応答して、所与のエントリについて参照カウントをデクリメントする(ブロック830)。ブロック830後、方法800は、終了する。
【0043】
ここで
図9を参照して、コヒーレントスレーブがCPUからの無効化インディケーションを処理するための方法900の一実施形態を示す。コヒーレントスレーブは、所与のCPUが特定のキャッシュラインをもはやキャッシュしていないことを示す無効化インディケーションを所与のCPUから受信する(ブロック905)。無効化インディケーションを受信することに応答して、コヒーレントスレーブは、特定のキャッシュラインの領域を決定する(ブロック910)。次に、コヒーレントスレーブは、識別された領域についてキャッシュディレクトリのエントリを置く(ブロック915)。
【0044】
次いで、コヒーレントスレーブは、識別された領域について置かれたキャッシュディレクトリのエントリ中の参照カウントをデクリメントする(ブロック920)。ここで参照カウントがゼロに等しい(条件ブロック925、「はい」肢部)場合、コヒーレントスレーブは、エントリを無効にする(ブロック930)。キャッシュディレクトリのエントリなしで領域を標的とするメモリ要求を受信するときに、ここでエントリを再利用して新しいエントリを割り振ることができる。参照カウントがまだゼロより大きい(条件ブロック925、「いいえ」肢部)場合、コヒーレントスレーブは、エントリの有効ステータスを維持する(ブロック935)。ブロック930及び935後、方法900は、終了する。
【0045】
ここで
図10を参照して、キャッシュディレクトリがメモリの第一領域へのアクセスを追跡するための方法1000の一実施形態を示す。キャッシュディレクトリは、メモリの第一領域内の第一キャッシュラインへの第一メモリ要求を受信する(ブロック1005)。第一領域がキャッシュディレクトリにエントリを有さないと判定することに応答して、第一領域について新しいエントリをキャッシュディレクトリに割り振り、新しいエントリについての参照カウントを1に初期化する(ブロック1010)。キャッシュディレクトリがいっぱいである場合、キャッシュディレクトリは、既存のエントリを追い出して、新しいエントリを割り振る。キャッシュディレクトリは、任意の適切なエビクションアルゴリズムを利用して、追い出すエントリを決定することができる。次に、キャッシュディレクトリは、メモリの第一領域内の第二キャッシュラインへの第二メモリ要求を受信し、第二キャッシュラインは、必ずしも第一キャッシュラインと物理的に異ならない(ブロック1015)。メモリの第一領域への第二メモリ要求を受信することに応答して、メモリの第一領域に対応するエントリについての参照カウントを2にインクリメントする(ブロック1020)。ブロック1020後、方法1000は、終了する。メモリの第一領域に対応するエントリについての参照カウントが第一領域内の任意のキャッシュラインへの後続のメモリ要求ごとにインクリメントされることに留意する。また、参照カウントは、第一領域からのキャッシュラインがキャッシュサブシステムから追い出されるたびにデクリメントされる。
【0046】
ここで
図11を参照して、異なる粒度レベルでキャッシュディレクトリのアレイを維持するための方法1100の一実施形態を示す。キャッシュディレクトリは、第一アレイにエントリを維持して、第一粒度でメモリのアドレス範囲を追跡する(ブロック1105)。一実施形態では、第一粒度は、メモリのページである。一実施形態では、ページは、4キロバイト(KB)である。他の実施形態では、第一粒度は、他のアドレス範囲のサイズに対応することができる。
【0047】
キャッシュディレクトリは、第一アレイ中のエントリごとに参照カウントを維持して、システム中のどこかにキャッシュされている領域のキャッシュラインの数を追跡する(ブロック1110)。所与のエントリについての参照カウントがプログラム可能な閾値を超える(条件ブロック1115、「はい」肢部)場合、キャッシュディレクトリは、対応するアドレス範囲を第二粒度で追跡し始め、第二粒度は、第一粒度よりも細かい粒度である(ブロック1120)。一実施形態では、第二粒度は、キャッシュラインに対応する。一実施形態では、キャッシュラインは、64バイトを含む。他の実施形態では、他のサイズのキャッシュラインを利用することができる。所与のエントリについての参照カウントがプログラム可能な閾値以下である(条件ブロック1115、「いいえ」肢部)場合、キャッシュディレクトリは、対応するアドレス範囲を第一粒度で追跡し続ける(ブロック1125)。ブロック1125後、方法1100は、ブロック1110に戻る。
【0048】
システムにキャッシュされる対応するアドレス範囲からの新しいキャッシュラインごとに、キャッシュディレクトリは、新しいエントリを第二アレイに割り振り、領域のこの部分を第二粒度で追跡する(ブロック1130)。第二アレイがいっぱいである場合、キャッシュディレクトリは、第二アレイからエントリを追い出して、新しいエントリを割り振る。キャッシュディレクトリは、任意の適切なエビクションアルゴリズムを利用して、追い出すエントリを決定することができる。ブロック1130後、方法1100は、ブロック1110に戻る。
【0049】
ここで
図12を参照して、マルチアレイキャッシュディレクトリを操作するための方法1200の一実施形態を示す。メモリ要求をマルチCPUシステムのマルチアレイキャッシュディレクトリで受信する(ブロック1205)。キャッシュディレクトリは、メモリ要求のために第一及び第二アレイの並列ルックアップを実行する(ブロック1210)。一実施形態では、第一アレイは、第一粒度でアドレス範囲を追跡し、第二アレイは、第二粒度でアドレス範囲を追跡し、第二粒度は、第一粒度よりも細かい粒度である。ルックアップの結果が第一アレイ及び第二アレイの両方についてヒットをもたらす(条件ブロック1215、「はい」肢部)場合、キャッシュディレクトリは、第二アレイからのマッチングするエントリを利用してプローブを生成する(ブロック1220)。ルックアップの結果が第一アレイのみにヒットをもたらす(条件ブロック1225、「はい」肢部)場合、キャッシュディレクトリは、第一アレイからのマッチングするエントリを利用してプローブを生成する(ブロック1230)。ルックアップの結果が第一及び第二アレイの両方へのミスをもたらす(条件ブロック1225、「いいえ」肢部)場合、キャッシュディレクトリは、メモリ要求のアドレス範囲について第一粒度で新しいエントリを第一アレイに割り振る(ブロック1235)。第一アレイがいっぱいである場合、キャッシュディレクトリは、第一アレイから既存のエントリを追い出すことができる。キャッシュディレクトリは、追い出す既存のエントリを決定するために任意の適切な技法を利用することができる。キャッシュディレクトリが第一アレイから既存のエントリを追い出す場合、キャッシュディレクトリは、対応するアドレス範囲のキャッシュラインを有する1つ以上のCPUに無効化プローブを送信する。ブロック1220、1230、及び1235の後、方法1200は、終了する。
【0050】
ここで
図13を参照して、キャッシュディレクトリが直近に訪問済みのプライベート領域についてのエントリを伴うデータ構造を維持するための方法1300の一実施形態を示す。キャッシュディレクトリは、データ構造を維持して、最後のN個のアクセスされたプライベート領域についてエントリをキャッシュする(ブロック1305)。Nの値は、実施形態によって異なることができる。また、キャッシュディレクトリは、マルチCPUシステムの任意のキャッシュサブシステムにキャッシュされるキャッシュラインを有する領域を追跡するためのエントリを備える1つ以上のアレイを維持する(ブロック1310)。
【0051】
次に、メモリ要求をキャッシュディレクトリで受信する(ブロック1315)。メモリ要求を受信することに応答して、キャッシュディレクトリは、最後にアクセスされたN個のプライベート領域についてのエントリを備えるデータ構造へのルックアップを実行する(ブロック1320)。ルックアップの結果がヒットをもたらす(条件ブロック1325、「はい」肢部)場合、キャッシュディレクトリは、マッチングするエントリを利用して1つ以上のキャッシュサブシステムについてプローブを生成する(ブロック1330)。また、キャッシュディレクトリは、メインキャッシュディレクトリのアレイ(複数可)へのルックアップをキャンセルする(ブロック1335)。ルックアップの結果がミスをもたらす(条件ブロック1325、「いいえ」肢部)場合、キャッシュディレクトリは、要求についてメインキャッシュディレクトリのアレイ(複数可)へのルックアップ(複数可)を実行する(ブロック1340)。キャッシュディレクトリは、メインキャッシュディレクトリのアレイへのルックアップを処理するためにいずれかの適切な処理プロシージャを利用することができる。ブロック1335及び1340後、方法1300は、終了する。
【0052】
ここで
図14を参照して、異なる粒度レベルでキャッシュディレクトリのアレイを維持するための方法1400の一実施形態を示す。キャッシュディレクトリは、第一アレイにエントリを維持して、第一粒度でメモリのプライベート領域のアドレス範囲を追跡する(ブロック1405)。一実施形態では、第一粒度は、メモリのページである。一実施形態では、ページは、4KBである。他の実施形態では、第一粒度は、他のアドレス範囲のサイズに対応することができる。
【0053】
キャッシュディレクトリは、プライベート領域のいずれかが共有状態に移行したかどうかを判定する(条件ブロック1410)。プライベート領域のいずれかが共有状態に移行した(条件ブロック1410、「はい」肢部)場合、キャッシュディレクトリは、対応するアドレス範囲を第二粒度で追跡し始め、第二粒度は、第一粒度よりも細かい粒度である(ブロック1415)。一実施形態では、第二粒度は、キャッシュラインに対応する。一実施形態では、キャッシュラインは、64バイトを含む。他の実施形態では、他のサイズのキャッシュラインを利用することができる。いかなるプライベート領域も共有状態に移行しなかった(条件ブロック1410、「いいえ」肢部)場合、キャッシュディレクトリは、対応するアドレス範囲を第一粒度で追跡し続ける(ブロック1420)。ブロック1420後、方法1400は、ブロック1410に戻る。
【0054】
システムにキャッシュされる対応するアドレス範囲からの新しいキャッシュラインごとに、キャッシュディレクトリは、新しいエントリを第二アレイに割り振り、領域のこの部分を第二粒度で追跡する(ブロック1425)。第二アレイがいっぱいである場合、キャッシュディレクトリは、第二アレイからエントリを追い出して、新しいエントリを割り振る。キャッシュディレクトリは、任意の適切なエビクションアルゴリズムを利用して、追い出すエントリを決定することができる。ブロック1425後、方法1400は、ブロック1410に戻る。
【0055】
さまざまな実施形態では、ソフトウェアアプリケーションのプログラムインストラクションを使用して、本明細書に説明される方法及び/またはメカニズムを実装する。例えば、汎用または特殊目的プロセッサによって実行可能なプログラム命令が企図される。さまざまな実施形態では、そのようなプログラム命令は、高レベルプログラミング言語として表されてもよい。他の実施形態では、プログラム命令は、高レベルプログラミング言語から、バイナリ、中間、または他の形式にコンパイルされてもよい。代わりに、ハードウェアの振る舞いまたは設計を記述したプログラム命令が書き込まれてもよい。そのようなプログラム命令は、Cなどの高レベルプログラミング言語によって表されてもよい。代わりに、Verilogなどのハードウェア設計言語(HDL)が使用されてもよい。さまざまな実施形態では、プログラム命令は、さまざまな非一時的コンピュータ可読記憶媒体のいずれかに記憶される。記憶媒体は、プログラム実行のためにプログラム命令をコンピューティングシステムに提供するために使用される間にコンピューティングシステムによってアクセス可能である。一般的に言うと、そのようなコンピューティングシステムは、プログラム命令を実行するように構成された少なくとも1つ以上のメモリ及び1つ以上のプロセッサを含む。
【0056】
上記説明された実施形態が、実装態様の非限定的な例にすぎないことが強調されるべきである。上記の開示を十分に理解したとき、多くの変形形態及び修正形態が、当業者に明らかになるであろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含すると解釈されることが意図される。