(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-01
(45)【発行日】2023-11-10
(54)【発明の名称】圧縮キャッシュに対するフレキシブルな辞書共有
(51)【国際特許分類】
G06F 12/0895 20160101AFI20231102BHJP
G06F 12/0864 20160101ALI20231102BHJP
【FI】
G06F12/0895 108
G06F12/0864
(21)【出願番号】P 2022510787
(86)(22)【出願日】2020-08-19
(86)【国際出願番号】 US2020047029
(87)【国際公開番号】W WO2021034947
(87)【国際公開日】2021-02-25
【審査請求日】2023-08-04
(32)【優先日】2019-08-19
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】アレクサンダー ブレスロウ
(72)【発明者】
【氏名】ジョン カラマティアノス
【審査官】北村 学
(56)【参考文献】
【文献】特開平07-064765(JP,A)
【文献】米国特許出願公開第2015/0381201(US,A1)
【文献】米国特許第05243341(US,A)
【文献】岡 慶太郎 ほか,データ圧縮に基づくGPU向け高性能キャッシュアーキテクチャの提案,情報処理学会 研究報告 システム・アーキテクチャ(ARC) 2019-ARC-236 [online] ,日本,情報処理学会,2019年06月04日,pp. 1-9
【文献】Biswabandan Panda et al.,Dictionary Sharing: An Efficient Cache Compression Scheme for Compressed Caches,49th Annual IEEE/ACM International Symposium on Microarchitecture,IEEE,2016年10月15日,pp. 1-12
(58)【調査した分野】(Int.Cl.,DB名)
IPC G06F 12/08 - 12/128
(57)【特許請求の範囲】
【請求項1】
キャッシュであって、
複数のセットを含むデータ配列と、
回路を備える制御ロジックと、を備え、
前記回路は、
前記キャッシュ内にキャッシュラインとして割り当てられるデータを受信することと、
前記キャッシュラインがマッピングされる当初のデータ配列セットを決定することと、
前記当初のデータ配列セットを含むデータ配列セットの所定のグループに記憶された複数の辞書のうち何れの辞書が前記キャッシュラインを圧縮するために好ましい辞書であるかを決定することと、
前記好ましい辞書を用いて前記キャッシュラインを圧縮して、圧縮キャッシュラインを生成することと、
前記キャッシュラインのセットマッピングを変更して、前記当初のデータ配列セットの代わりに、前記好ましい辞書を含む所定のデータ配列セットに前記キャッシュラインをマッピングすることと、
前記圧縮キャッシュラインを前記所定のデータ配列セットに記憶することと、
を行うように構成されている、
キャッシュ。
【請求項2】
前記回路は、前記キャッシュラインのセットマッピングを変更するために、
前記キャッシュラインを前記所定のデータ配列セットにマッピングするためにベースインデックスを変更するための所定のオフセットを生成することであって、前記ベースインデックスは、前記キャッシュラインのアドレスのビットのサブセットである、ことと、
前記キャッシュラインに対応するタグ配列エントリに前記所定のオフセットを記憶することと、
を行うように構成されている、
請求項1のキャッシュ。
【請求項3】
前記ベースインデックス自体は、前記キャッシュラインを、前記所定のデータ配列セットとは異なる前記当初のデータ配列セットにマッピングし、
データ配列セットの前記所定のグループは、前記所定のオフセットを用いて前記キャッシュラインをマッピングすることができる複数のデータ配列セットを含む、
請求項2のキャッシュ。
【請求項4】
データ配列セットの前記所定のグループは、前記キャッシュラインに対応するインデックスのオフセットの値を変更することによってアドレス可能なデータ配列セットを含む、
請求項1のキャッシュ。
【請求項5】
前記回路は、前記複数の辞書の中で最も高い圧縮比を達成する前記好ましい辞書を選択するように構成されている、
請求項1のキャッシュ。
【請求項6】
前記好ましい辞書は、前記キャッシュラインの前記データに対して閾値よりも高い圧縮を達成する、
請求項1のキャッシュ。
【請求項7】
前記回路は、
第1のデータ配列セットの第1の辞書が前記複数の辞書の他の辞書よりも高い圧縮を達成すると決定したことに応じて、前記キャッシュラインを
前記第1のデータ配列セットにマッピングするための第1のオフセットを生成することと、
前記第1のデータ配列セットとは異なる第2のデータ配列セットの第2の辞書が前記複数の辞書の他の辞書よりも高い圧縮を達成すると決定したことに応じて、前記キャッシュラインを
前記第2のデータ配列セットにマッピングするための第2のオフセットを生成することと、
を行うように構成されている、
請求項1のキャッシュ。
【請求項8】
方法であって、
キャッシュ内にキャッシュラインとして割り当てられるデータを受信することと、
前記キャッシュラインがマッピングされる当初のデータ配列セットを決定することと、
前記当初のデータ配列セットを含むデータ配列セットの所定のグループに記憶された複数の辞書のうち何れの辞書が前記キャッシュラインを圧縮するために好ましい辞書であるかを決定することと、
前記好ましい辞書を用いて前記キャッシュラインを圧縮して、圧縮キャッシュラインを生成することと、
前記キャッシュラインのセットマッピングを変更して、前記当初のデータ配列セットの代わりに、前記好ましい辞書を含む所定のデータ配列セットに前記圧縮キャッシュラインをマッピングすることと、
前記圧縮キャッシュラインを前記所定のデータ配列セットに記憶することと、を含む、
方法。
【請求項9】
前記方法は、前記キャッシュラインのセットマッピングを変更するために、
前記キャッシュラインを前記所定のデータ配列セットにマッピングするためにベースインデックスを変更するための所定のオフセットを生成することであって、前記ベースインデックスは、前記キャッシュラインのアドレスのビットのサブセットである、ことと、
前記キャッシュラインに対応するタグ配列エントリに前記所定のオフセットを記憶することと、を含む、
請求項8の方法。
【請求項10】
前記ベースインデックス自体は、前記キャッシュラインを、前記所定のデータ配列セットとは異なる前記当初のデータ配列セットにマッピングし、
データ配列セットの前記所定のグループは、前記所定のオフセットを用いて前記キャッシュラインをマッピングすることができる複数のデータ配列セットを含む、
請求項9の方法。
【請求項11】
データ配列セットの前記所定のグループは、前記キャッシュラインに対応するインデックスのオフセットの値を変更することによってアドレス可能なデータ配列セットを含む、
請求項8の方法。
【請求項12】
前記複数の辞書の中で最も高い圧縮比を達成する前記好ましい辞書を選択することをさらに含む、
請求項8の方法。
【請求項13】
前記好ましい辞書は、前記キャッシュラインの前記データに対して閾値よりも高い圧縮を達成する、
請求項8の方法。
【請求項14】
第1のデータ配列セットの第1の辞書が前記複数の辞書の他の辞書よりも高い圧縮を達成すると決定したことに応じて、前記キャッシュラインを
前記第1のデータ配列セットにマッピングする第1のオフセットを生成することと、
前記第1のデータ配列セットとは異なる第2のデータ配列セットの第2の辞書が前記複数の辞書の他の辞書よりも高い圧縮を達成すると決定したことに応じて、前記キャッシュラインを
前記第2のデータ配列セットにマッピングするための第2のオフセットを生成することと、をさらに含む、
請求項8の方法。
【請求項15】
システムであって、
プロセッサと、
キャッシュと、を備え、
前記キャッシュは、
前記プロセッサから、前記キャッシュ内にキャッシュラインとして割り当てられるデータを受信することと、
前記キャッシュラインがマッピングされる当初のデータ配列セットを決定することと、
前記当初のデータ配列セットを含むデータ配列セットの所定のグループに記憶された複数の辞書のうち何れの辞書が前記キャッシュラインを圧縮するために好ましい辞書であるかを決定することと、
前記好ましい辞書を用いて前記キャッシュラインを圧縮して、圧縮キャッシュラインを生成することと、
前記キャッシュラインのセットマッピングを変更して、前記当初のデータ配列セットの代わりに、前記好ましい辞書を含む所定のデータ配列セットに前記圧縮キャッシュラインをマッピングすることと、
前記圧縮キャッシュラインを前記所定のデータ配列セットに記憶することと、
を行うように構成されている、
システム。
【請求項16】
前記キャッシュは、前記キャッシュラインの前記セットマッピングを変更するために、
前記キャッシュラインを前記所定のデータ配列セットにマッピングするためにベースインデックスを変更するための所定のオフセットを生成することと、
前記キャッシュラインに対応するタグ配列エントリに前記所定のオフセットを記憶することと、
を行うように構成されている、
請求項15のシステム。
【請求項17】
前記ベースインデックス自体は、前記キャッシュラインを、前記所定のデータ配列セットとは異なる前記当初のデータ配列セットにマッピングし、
データ配列セットの前記所定のグループは、前記所定のオフセットを用いて前記キャッシュラインをマッピングすることができる複数のデータ配列セットを含む、
請求項16のシステム。
【請求項18】
データ配列セットの前記所定のグループは、前記キャッシュラインに対応するインデックスのオフセットの値を変更することによってアドレス可能なデータ配列セットを含む、
請求項15のシステム。
【請求項19】
前記キャッシュはさらに、前記複数の辞書の中で最も高い圧縮比を達成する前記好ましい辞書を選択するように構成されている請求項15に記載のシステム。
【請求項20】
前記キャッシュは、
第1のデータ配列セットの第1の辞書が前記複数の辞書の他の辞書よりも高い圧縮を達成すると決定したことに応じて、前記キャッシュラインを
前記第1のデータ配列セットにマッピングするための第1のオフセットを生成することと、
前記第1のデータ配列セットとは異なる第2のデータ配列セットの第2の辞書が前記複数の辞書の他の辞書よりも高い圧縮を達成すると決定したことに応じて、前記キャッシュラインを
前記第2のデータ配列セットにマッピングするための第2のオフセットを生成することと、
を行うように構成されている、
請求項15のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
読み出し又は書き込み動作のためのマイクロプロセッサのメモリ内データの要求のレイテンシを減らすために、マイクロプロセッサをキャッシュ階層の1つ以上のレベルに結合する場合がある。コンピューティングシステム内のキャッシュサブシステムには、データのブロックを記憶する高速キャッシュメモリが含まれている。一般的に、キャッシュは1つ以上のブロックを記憶する場合がある。各ブロックは、システムメモリ内の対応するアドレスに記憶されたデータのコピーである。本明細書で用いる場合、「キャッシュライン」又は「キャッシュブロック」は、連続したメモリ位置に記憶されるバイトのセットであり、コヒーレンシを保つために単位として処理される。いくつかの実施形態では、キャッシュラインは、キャッシュ内の割り当て及び割り当て解除の単位となることもできる。キャッシュライン内のバイト数は、デザイン上の選択により変化し、任意のサイズとすることができる。
【0002】
キャッシュ容量は、任意の高性能アーキテクチャデザインにおける重大なリソースである。より大きいキャッシュを用いて、より大きい容量を得ることができるが、このアプローチは、より高いアクセスレイテンシを被り、より多いパワー及び面積を消費する。キャッシュ圧縮技術により、キャッシュのメガバイト(MB)あたりの面積コストが減り、その結果、面積の減少又はキャッシュ容量の増加が可能になる。
【0003】
本明細書で説明する方法及びメカニズムの利点は、添付図面と関連して以下の説明を参照することによってより良好に理解することができる。
【図面の簡単な説明】
【0004】
【
図1】コンピューティングシステムの一実施形態のブロック図である。
【
図2】コンピューティングシステムの一実施形態のブロック図である。
【
図3】辞書を用いてキャッシュラインを圧縮する従来技術の実施形態の図である。
【
図4】セット間のフレキシブルマッピングを用いた圧縮キャッシュの一実施形態のブロック図である。
【
図5】圧縮キャッシュの一実施形態のブロック図である。
【
図6】圧縮キャッシュの一実施形態のブロック図である。
【
図7】圧縮キャッシュの一実施形態のブロック図である。
【
図8】圧縮キャッシュ内でのフレキシブルな辞書共有に対する方法の一実施形態を例示する汎用フロー図である。
【
図9】圧縮キャッシュに対する辞書セレクターユニットを実施するための方法の一実施形態を例示する汎用フロー図である。
【
図10】圧縮キャッシュからの排除(eviction)を処理するための方法の一実施形態を例示する汎用フロー図である。
【
図11】タグエントリ位置を対応するデータエントリ位置にマッピングするための方法の一実施形態を例示する汎用フロー図である。
【
図12】圧縮キャッシュから圧縮キャッシュラインを排除するための方法の一実施形態を例示する汎用フロー図である。
【
図13】逆アドレス変換を行うための方法の一実施形態を例示する汎用フロー図である。
【
図14】圧縮キャッシュ内の辞書オフセットフィールドを用いるための方法の一実施形態を例示する汎用フロー図である。
【発明を実施するための形態】
【0005】
以下の説明では、本明細書で示す方法及びメカニズムの十分な理解が得られるように、多くの具体的な詳細について述べる。しかし、当業者であれば分かるように、これらの具体的な詳細を伴わずに種々の実施形態を実施してもよい。場合によっては、本明細書で説明するアプローチが不明瞭になるのを避けるために、周知の構造、コンポーネント、信号、コンピュータプログラム命令、及び、技術については詳細に示していない。当然のことながら、説明を簡単及び明瞭にするために、図に示す要素は必ずしも一定の比率では描かれていない。例えば、いくつかの要素の寸法は、他の要素に対して誇張されている場合がある。
【0006】
圧縮キャッシュサブシステムに対するフレキシブルな辞書共有技術を実施するためのシステム、装置、及び、方法について本明細書で開示している。圧縮キャッシュは、少なくともキャッシュコントローラと、辞書セレクターユニットと、タグ配列(tag array)と、データ配列(data array)と、を含んでいる。一実施形態では、タグ配列内の各エントリは、メタデータフィールド及びタグフィールドに加えてオフセットフィールドを有している。圧縮キャッシュ内にキャッシュラインを割り当てる場合に、キャッシュラインのアドレスのベースインデックスを用いて、キャッシュラインをタグ配列の対応するエントリにマッピングする。一実施形態では、データ配列の各セットは、潜在的に、セットのキャッシュラインを圧縮するために用いることができる辞書を記憶する。辞書は、典型的に、辞書が十分なキャッシュラインを適切に圧縮してそのコストを相殺することができる場合にのみ割り当てられる。セット内の何れのキャッシュラインも圧縮可能ではない場合、一実施形態では辞書の割り当てが行われない。
【0007】
本明細書で用いる場合、「辞書」という用語は、個別の参照データチャンクエントリのグループとして定義される。各参照データチャンクは、キャッシュラインのサイズの小部分(すなわち、一部)である。典型的に、参照データチャンク内のバイト数は、キャッシュライン内のバイト数の因数(factor)であり、キャッシュラインを、データチャンクのいくつかの整数にパーティション分割することができる。参照データチャンクエントリの数と参照データチャンクのサイズとは、辞書毎に変化する可能性がある。参照データチャンクエントリには、圧縮キャッシュに記憶されたキャッシュライン内で検出される可能性がある一般的に生じるデータパターンが含まれている。例えば、全て0又は全て1は、一般的に生じるデータパターンであり、これらは所定の辞書内の参照データチャンクのうち2つである。キャッシュラインが辞書を用いて圧縮される場合、キャッシュラインの当初のデータの代わりにポインタフィールドが記憶され、各ポインタフィールドは、キャッシュラインの当初のデータのその特定部分にマッチする(辞書内の)参照データチャンクエントリを指し示す。一実施形態では、辞書は、データ配列内の圧縮キャッシュラインとともに記憶され、一方で、別の実施形態では、辞書は、データ配列とは別の構造である辞書テーブル内に記憶される。
【0008】
一実施形態では、セットアソシアティブキャッシュ(set-associative)の各セットには、潜在的に、個々のセット内に記憶されたキャッシュラインを圧縮するための辞書が含まれる(個々のセットに記憶されたキャッシュラインが圧縮可能である場合)。この実施形態では、圧縮キャッシュ内に記憶される新しいデータに対して(例えば、キャッシュミスに続くキャッシュラインフィル(cache line fill)に対して)スペースを割り当てる場合に、制御ロジックは、キャッシュラインのセットマッピングを変更して、新しいデータに対する圧縮の閾値を達成することができる辞書を含む所定のセットにキャッシュラインをマッピングする。一実施形態では、キャッシュラインに対応するアドレスのセットインデックス部分(すなわち、ベースインデックス)にオフセットを加えることによって、キャッシュラインのセットマッピングを変更する。1つの例示的なシナリオでは、アドレスの当初のセットインデックス部分は、圧縮の閾値を達成することができない第1の辞書を用いて、キャッシュラインを第1のセットにマッピングする。このキャッシュラインを第1のセット内に割り当てるのではなく、アドレスのセットインデックス部分にオフセットを加えて、圧縮の閾値を達成することができる第2の辞書を用いて、キャッシュラインを第2のセットにマッピングする。このシナリオでは、キャッシュラインを、第2の辞書を用いて圧縮して、圧縮キャッシュラインを第2のセット内に記憶し、オフセットを圧縮キャッシュラインに対応するタグ配列エントリ内に記憶する。
【0009】
一実施形態では、何れのオフセットをセットインデックス部分(すなわち、ベースインデックス)に加えるかを決定するために、辞書セレクターユニットは、潜在的な候補辞書のサブセットの異なる辞書を用いてキャッシュラインを圧縮することに基づいて、キャッシュラインの圧縮率を調べる。セレクターユニットは、潜在的な候補辞書のサブセットのうち何れが、キャッシュラインを圧縮するための少なくとも閾値圧縮比を達成するかを決定する。そして、選択した辞書を用いてキャッシュラインを圧縮し、セットマッピングを変更して、選択した辞書を記憶するセットにキャッシュラインをマッピングする。
【0010】
タグ配列エントリのオフセットフィールドによって、キャッシュラインのマッピングをデータ配列のセットに変更することができる。対応付けられる辞書が、より良好な圧縮比をもたらすことができる。このアプローチは、セットへのキャッシュラインのマッピングを変更することによってセット内のデータ値局所性(data value locality)を改善することによって、キャッシュライン圧縮率を改善することを目的としている。データ値局所性を利用する能力が限られていた従来のアプローチとは反対に、このアプローチは、冗長性を見出すより大きな機会を形成するより大きい数のキャッシュラインを調べることによって機能する。キャッシュラインセットマッピングの変更は、隣接するキャッシュセットに通常マッピングされる共有データ値の局所性を伴うキャッシュラインが代わりに同じセットにマッピングされるように行われ、したがって、同じ辞書を用いることができる。この辞書共有アプローチがない場合、セット内のキャッシュラインは、ライン間データ値の局所性が小さくなることが予想され、予想される圧縮率がより低く、効果的なキャッシュサイズがより小さくなる。
【0011】
別の実施形態では、圧縮キャッシュは、キャッシュラインを圧縮するための辞書の配列を維持し、配列からの各辞書は、圧縮キャッシュ内の任意のキャッシュラインによって用いられ得る。辞書の配列は、本明細書では「辞書テーブル」と呼ぶこともできる。この実施形態では、辞書テーブル内の各エントリは、異なるセットからの複数のキャッシュライン間で共有することができる辞書である。また、辞書テーブル内の各エントリには、いくつの異なるキャッシュラインがこの辞書を用いているか(すなわち、この辞書を用いて圧縮されているか)を追跡する参照カウントが含まれている。この実施形態では、各タグエントリには、キャッシュラインを圧縮及び復元するために用いられる辞書テーブル内の辞書を指し示す辞書識別子(ID)フィールドが含まれている。この実施形態では、キャッシュラインが圧縮キャッシュ内に割り当てられる場合には、セレクタロジックは、キャッシュラインのデータに基づいて、キャッシュラインを潜在的に圧縮するために辞書テーブルからの何れの辞書を評価するかを決定する。一実施形態では、最も高い圧縮比になる辞書を、キャッシュラインを圧縮するために選択し、そして、この辞書のIDを、対応するタグ配列エントリの辞書IDフィールド内に記憶する。
【0012】
このアプローチの背景にある理論的根拠は、多くの同様のデータ値を伴うキャッシュラインが圧縮キャッシュ内にあるということである。セットのレベルでのみ辞書を共有するのではなく、その代わりに、圧縮キャッシュは、一般に用いるための辞書の配列を維持する。この結果、辞書を、圧縮キャッシュのスライス内の多くのキャッシュライン間で共有することができる。そして、各タグ配列エントリは、辞書IDを記憶する。辞書IDは、対応付けられるデータを復元するために何れの辞書を用いるべきかを指定する。さらに、一実施形態では、圧縮キャッシュには、辞書の参照カウントがゼロになった場合に辞書エントリを解放して再び割り当てるロジックが含まれる。概して言えば、本明細書で説明する技術によって、従来技術と比べてキャッシュラインの圧縮率を増加させることができる。
【0013】
次に、
図1を参照して、コンピューティングシステム100の一実施形態のブロック図を示す。一実施形態では、コンピューティングシステム100は、少なくともプロセッサ(複数可)110と、入出力(I/O)インターフェース120と、メモリサブシステム130と、周辺デバイス(複数可)135と、を含んでいる。他の実施形態では、コンピューティングシステム100は、他のコンポーネントを含むことができ、コンピューティングシステム100は、例示したコンポーネントを省略することができ、及び/又は、コンピューティングシステム100は、別の構成とすることができる。一実施形態では、各プロセッサ110は、キャッシュサブシステム115を含んでいる。キャッシュサブシステム115は、実施形態により変化する可能性がある種々のタイプのキャッシュのうち何れかを伴う任意の数のキャッシュレベルを有している。場合によっては、キャッシュサブシステム115のキャッシュ階層内の1つ以上のキャッシュを、プロセッサ(複数可)110の外部の他の位置に配置することができる。一実施形態では、キャッシュサブシステム115の1つ以上のキャッシュは、圧縮キャッシュであり、これらの圧縮キャッシュには、圧縮キャッシュ内に記憶されたキャッシュラインを圧縮するために用いられるキャッシュ辞書が含まれている。フレキシブルな方法でキャッシュ辞書を利用するために用いる技術についてのより多くの詳細を、本開示の残りの部分の全体にわたって示す。
【0014】
プロセッサ(複数可)110は、任意の数及びタイプの処理ユニット(例えば、中央演算処理装置(CPU)、グラフィックス処理ユニット(GPU)、デジタルシグナルプロセッサ(DSP)、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC))を表している。メモリサブシステム130は、任意の数及びタイプのメモリデバイスを含んでいる。例えば、メモリサブシステム130内のメモリのタイプとしては、広帯域メモリ(HBM)、不揮発性メモリ(NVM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(FeRAM)等を挙げることができる。I/Oインターフェース120は、任意の数及びタイプのI/Oインターフェース(例えば、ペリフェラルコンポーネントインターコネクト(PCI)バス、PCI拡張(PCIX)、PCIE(PCIエクスプレス)バス、ギガビットイーサネット(登録商標)(GBE)バス、ユニバーサルシリアルバス(USB))を表している。種々のタイプの周辺デバイス(複数可)135をI/Oインターフェース120に結合することができる。このような周辺デバイス(複数可)135としては、ディスプレイ、キーボード、マウス、プリンター、スキャナ、ジョイスティック又は他のタイプのゲームコントローラ、メディア記録装置、外部記憶装置、ネットワークインターフェースカード等が挙げられるが、これらに限定されない。
【0015】
種々の実施形態では、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェラブルデバイス、又は、他の種々のタイプのコンピューティングシステム若しくはデバイスである。コンピューティングシステム100のコンポーネントの数は、実施形態毎に変わることに留意されたい。例えば、他の実施形態では、各コンポーネントが
図1に示す数よりも多いか又は少ない数で存在する。また、他の実施形態では、コンピューティングシステム100には、
図1に示されていない他のコンポーネントが含まれている。さらに、他の実施形態では、コンピューティングシステム100は、
図1に示す以外の方法で構成されている。
【0016】
次に、
図2を参照して、コンピューティングシステム200の一実施形態のブロック図を示す。図示するように、システム200は、デスクトップコンピュータ210、ラップトップコンピュータ220、サーバ230、モバイルデバイス240又は他のもののチップ、回路、コンポーネント等を表している。他のデバイスが可能であり、考えられる。例示した実施形態、システム200は、(
図1の)キャッシュサブシステム115の少なくとも1つのインスタンスを含んでいる。
図2に示されていないが、システム200には、任意の数及びタイプの他のコンポーネント(例えば1つ以上のプロセッサ、1つ以上のメモリデバイス、1つ以上の周辺デバイス等)を含めることができる。キャッシュサブシステム115には、そこに記憶されたデータの中で広く用いられるデータパターンを圧縮するためのフレキシブルに共有される辞書を含む任意の数のキャッシュレベルが含まれている。圧縮キャッシュ内の辞書のフレキシブルな共有に関してのより多くの詳細を、本開示の残りの部分の全体にわたって示す。
【0017】
次に、
図3を参照して、キャッシュラインを圧縮するために辞書を用いることを例示する図を示す。
図3の最上部に例示的なキャッシュライン305を示す。当然のことながら、キャッシュライン305のサイズ及びキャッシュライン305の実際のデータは、1つの具体的な実施形態を示している。他の実施形態では、他のサイズのキャッシュラインを用いることができ、及び/又は、他のデータをキャッシュラインに記憶する。
図3に例示した実施形態の場合、キャッシュライン305は、64バイトのデータを有し、16の別個の4バイトチャンクが0~15と示されている。
【0018】
一実施形態では、所定のキャッシュラインに対してキャッシュ内に記憶されるデータの量を減らすために、辞書を用いてキャッシュラインを圧縮する。辞書フォーマット310の一例を
図3の中央に示す。辞書フォーマット310は、辞書フィールド310Aと、ポインタフィールド310Bと、を有し、ポインタフィールド310Bは、キャッシュラインの個々のチャンクに対する辞書エントリを指し示している。一実施形態では、辞書フォーマット310は、8つの別個の4バイトエントリを含み、これらの8つのエントリの各々に対する有効ビットを伴っている。
【0019】
キャッシュライン305のサイズのキャッシュラインの場合、ポインタフィールド310Bは、キャッシュラインの16の4バイトチャンクに対する16の3ビットポインタを有している。各3ビットポインタは、8つの辞書エントリのうち何れかを指し示している。他の実施形態では、他の数のエントリを伴う他の辞書に対して、ポインタあたりのビット数が変わることに留意されたい。例えば、4つのエントリを伴う辞書の場合、各ポインタは2ビットを有する。辞書内のエントリの数は、実施形態によって変わる可能性があることに留意されたい。
【0020】
図3の最下部に、圧縮キャッシュライン315を、実際の辞書315Aと、キャッシュライン305のデータに対するポインタフィールド315Bの実際のポインタ値と、を用いて示す。典型的な辞書には、コンピューティングシステムのキャッシュされたデータ内で見出される可能性がある一般的に生じるパターンに対するエントリが含まれる。実際の辞書315Aのエントリ内に示すパターンは、キャッシュライン305の一般的に生じるパターンの例である。キャッシュライン305のデータは、高圧縮性である。なぜならば、当初のデータの16の4バイトチャンクは、辞書315Aの8つの4バイトエントリにマッピングすることができるからである。しかし、いくつかのキャッシュラインに対しては、データが圧縮可能でない場合があり、これらのキャッシュラインを非圧縮の方法で記憶することができる。キャッシュラインが非圧縮の方法で記憶された場合には、辞書が割り当てられない。
【0021】
次に、
図4を参照して、セット間のフレキシブルマッピングを用いた圧縮キャッシュ400の一実施形態のブロック図を示す。種々の実施形態において、圧縮キャッシュ400は、システムメモリとは別の低レイテンシ、広帯域メモリである。いくつかの実施形態では、圧縮キャッシュ400は、キャッシュメモリサブシステム(例えば、
図1のキャッシュサブシステム115)内のラストレベルキャッシュとして用いられる。他の実施形態では、圧縮キャッシュ400は、キャッシュメモリサブシステム内の別のレベルである。辞書を用いて単一のキャッシュラインを圧縮する例を
図3に示したが、
図4の圧縮キャッシュ400は、単一の辞書を用いて複数のキャッシュラインを圧縮することができる。また、圧縮キャッシュ400には複数の辞書が含まれており、圧縮キャッシュ400がセットアソシアティブキャッシュである少なくとも1つの実施形態では、圧縮キャッシュ400には、各セットに対する辞書が含まれる。場合によっては、セットのデータが圧縮可能でない場合に、セットは、キャッシュラインを非圧縮状態で記憶することができ、辞書を記憶しない。
【0022】
一実施形態では、データ配列404内の各セットには、セットの方法で記憶されたキャッシュラインを圧縮及び復元するために用いられる辞書が含まれる。場合によっては、辞書はキャッシュラインのグループ間で共有され、グループはフルセットよりも小さい。辞書を共有することによって辞書を大きくすることができ、その結果、キャッシュラインあたりの圧縮比が改善され、より多くのキャッシュラインが圧縮されることが多い。このように共有することによって、より多くのキャッシュラインに対して辞書を記憶するコストも償却される。この方式の欠点は、セットのキャッシュライン間で辞書を共有することが、セット内のキャッシュライン間にデータ値局所性が存在することに基づくことである。データ配列404のセット間に存在するデータ値局所性が不十分である場合、この方式は効果的ではない。
【0023】
したがって、データ値局所性を達成する可能性を上げるために、圧縮キャッシュ400に対する例示した方式によって、各キャッシュラインを圧縮する場合に複数の候補辞書の中から最良の辞書を選択することができる。複数の辞書から候補辞書を選択するこのアプローチによって、セットの辞書を単純に用いるアプローチと比較して、改善されたデータ値局所性が形成されることが多く、キャッシュラインがそのアドレスの当初のセットインデックス部分に基づいてマッピングされる。
図4に例示した方式によって、圧縮キャッシュ400に対する圧縮比が改善されることが多い(従来のアプローチに比べて)。なぜならば、この方式によって、より大きい数のキャッシュライン間でデータ局所性を効果的に利用することができるからである。本明細書で用いる場合、「データ値局所性」という用語は、同じ、同様又は数値的にクラスター化されたデータ値を有するアプリケーション内の複数ピースのデータとして定義される。所定のキャッシュラインを圧縮するためにより大きい数の辞書を調べることによって、冗長性を見出す可能性が大きくなる。
【0024】
図4に示すように、タグ配列402のエントリ406には、メタデータ及びタグフィールドに加えてオフセットフィールドがある。一実施形態では、エントリ406内のオフセットフィールドは、セットオフセット及びウェイオフセット(way offset)を記憶する。一実施形態では、セットオフセットをベースインデックスに加えてフルインデックスを生成する。別の実施形態では、排他的論理和OR(XOR)演算をベースインデックスとセットオフセットとの間で行って、フルインデックスを生成する。本明細書で用いる場合、「ベースインデックス」という用語は、仮想又は物理メモリアドレスからのビットの一部として定義される。圧縮キャッシュ400が仮想アドレスインデックス物理アドレスタグ(VIPT)キャッシュである場合、ベースインデックスは仮想メモリアドレスを指し、又は、圧縮キャッシュ400が物理アドレスインデックス物理アドレスタグ(PIPT)キャッシュである場合、ベースインデックスは物理メモリアドレスを指す。フルインデックスを用いて、キャッシュラインをデータ配列404内のセットにマッピングする。オフセットによってキャッシュラインを隣接セットにマッピングすることができ、対応付けられる辞書によって、より良好な圧縮比が得られる。さらに、ウェイオフセットによって、キャッシュラインをセット内で異なる方法でマッピングすることができる。
【0025】
データ配列404内のセット408の一例を
図4の右下に示す。セット408には、辞書、圧縮キャッシュブロック及び各圧縮キャッシュブロックに対するセット(S)及びウェイ(W)オフセットが含まれている。タグ配列402内でタグを記憶する方法が、データ配列404内の対応付けられるキャッシュラインの方法と同じでない場合に、実施形態においてウェイオフセットを用いる。データ配列404から排除する際、対応付けられるタグに対するセット及びアドレス情報の計算を、セット及びウェイオフセットを適用することによって行う。例えば、一実施形態では、セットオフセットとデータ配列セットとのXOR演算を行って、対応付けられるタグのセットを決定する。また、この実施形態では、ウェイオフセットとデータ配列方法とのXOR演算を行って、対応付けられるタグの方法を決定する。他の実施形態では、他のタイプの演算をセットオフセット及びウェイオフセットを用いて行って、対応付けられるタグのセット及びウェイをそれぞれ計算することができる。「キャッシュブロック」及び「キャッシュライン」という用語は、本明細書において交換可能に用いられることに留意されたい。4つの圧縮キャッシュブロックをセット408に示しているが、これは、一実施形態によって単に一例として示していることに留意されたい。他の実施形態では、他の数の圧縮キャッシュブロックをセット408内に記憶することができる。一実施形態では、セット408内の各圧縮キャッシュブロックには、対応する辞書内のエントリを指し示す複数のポインタフィールド(例えば、
図3のポインタフィールド315B)が含まれる。
【0026】
一実施形態では、所定のキャッシュラインを圧縮キャッシュ400内に割り当てる場合、制御ロジック(図示省略)は、所定のキャッシュラインを圧縮するために隣接セットからの複数の異なるキャッシュ辞書を調べる。本明細書で用いる場合、「隣接」又は「隣接する」という用語は、所定のキャッシュラインを、ベースインデックス及びオフセットを含むフルキャッシュラインインデックスのオフセットの値に基づいてマッピングすることができるセットとして定義される。言い換えれば、セットの隣接には、オフセットの値を変えることによってアドレス可能なセットが含まれる。例えば、所定のキャッシュラインのベースインデックスにオフセットを加えるか、オフセットと連結するか、又は、オフセットと排他的論理和を取ることによって、所定の数の、結果として得られるアドレスが、オフセットの値に応じて可能である。これらのアドレスによって、所定の付近のセットが識別される。「付近」のサイズは、オフセット内のビット数によって決定される。例えば、1ビットオフセットは、付近の2セット(すなわち、2つの異なるセットに対応する2つの異なるアドレス)を形成し、2ビットオフセットは、付近の4セットを形成し、3ビットオフセットは、付近の8セットを形成する等である。所定のキャッシュラインのデータの圧縮率は、隣接するセットからのこれらの複数の異なるキャッシュ辞書に対して決定される。そして、所定のキャッシュラインに対してこれらの複数の辞書から最大圧縮を達成するキャッシュ辞書を選択する。代替的に、圧縮の閾値を超える値を達成するキャッシュ辞書を、所定のキャッシュラインに対して選択する。場合によっては、複数の辞書が、圧縮の閾値を超える値を達成する場合があり、制御ロジックは、これらの複数の辞書のうち何れかを選択することができる。場合によって、キャッシュラインのデータが、利用可能な辞書の何れとも良好にマッチしない場合には、制御ロジックは、キャッシュラインを圧縮しないことを選択することに留意されたい。このような場合、キャッシュラインは、非圧縮状態で記憶される。一実施形態では、制御ロジックは、キャッシュラインが辞書にマッチするか否かの判定を、この辞書を用いたキャッシュラインの圧縮バージョンのサイズが閾値よりも小さいか否かに基づいて行う。
【0027】
制御ロジックが、何れかの辞書がキャッシュラインに対して良好にマッチすると判定した場合には、制御ロジックは、この特定の辞書を用いてキャッシュラインを圧縮する。また、セットオフセットの計算は、ベースインデックスにセットオフセットを加えて(又は、XORして)フルインデックスを生成した場合に、フルインデックスが、この特定の辞書を有するセットのキャッシュインデックスとなるように行う。セットオフセットは、任意の数のビットを有することができ、ビット数は、実施形態により変わる。セットオフセット内のビット数を増やすことによって、より多数の辞書及びより広い付近のセットへのマッピングをテストすることができる。しかし、いくつかの実施形態では、電力消費制限、面積予算、並びに、キャッシュ配列及び比較を行うセレクターユニット(複数可)の両方に対するレイテンシの制約に基づいて、各キャッシュラインに対してテストすることができる辞書の数には実際的な制限があり得る。
【0028】
次に、
図5を参照して、圧縮キャッシュ500の一実施形態のブロック図を示す。圧縮キャッシュ500は、辞書をフレキシブルな方法で用いて従来の非フレキシブルなアプローチと比較してより大きな圧縮を達成する別の例を例示している。一実施形態では、圧縮キャッシュ500のコンポーネントは、(
図1の)キャッシュサブシステム115のレベルの1つ以上の中に含まれている。場合によっては、キャッシュ階層のレベルの一部のみを圧縮することに留意されたい。例えば、ハイブリッドキャッシュには、圧縮を用いた容量に対して最適化された第1の部分と、レイテンシに対して最適化された第2の部分と、を含めることができる。この説明のために、キャッシュブロック506を圧縮キャッシュ500内に割り当てると仮定する。したがって、複数の圧縮エンジン508,510がキャッシュブロック506のデータを圧縮して、圧縮キャッシュブロック(例えば、CBi)及びサイズインジケータ(例えば、サイズi)をセレクターユニット504へ送る。当然のことながら、2つの圧縮エンジン508,510を
図5に示しているが、他の実施形態では、他の数の圧縮エンジンがキャッシュブロック506を圧縮して、何れの圧縮エンジンがキャッシュブロック506に対して最大圧縮を達成するかを見つけることができる。
【0029】
一実施形態では、セレクターユニット504が、圧縮エンジン508又は510が用いる辞書のうち何れの辞書が、キャッシュブロック506に対して最大圧縮を達成するかを判定する。そして、セレクターユニット504は、ベースインデックスに加えられた場合に、選択した辞書を記憶するデータ配列512内の適切なセットにキャッシュブロック506がマッピングされるオフセットを生成する。このオフセットを、タグ配列502内のキャッシュブロック506に対するタグエントリ内に記憶する。また、キャッシュブロック506の圧縮バージョンを、選択した辞書を記憶するデータ配列のセット512内のウェイに書き込む。
図5の最上部における関数H()は、ハッシュ関数を用いてデータ配列512内の適切なセットへのベースインデックス及びオフセットのマッピングを行う一実施形態を表す。他の実施形態では、キャッシュブロックのセットマッピングを変更するための他の技術を用いることができる。セレクターユニット504からデータ配列512のセット「j」まで進む破線は、キャッシュブロック506の圧縮バージョン(CBj)を記憶するための選択されたセットであることを示している。この説明のために、セット「j」内の辞書は、セット「i」内の他の辞書よりも高い圧縮を達成したと仮定する。
【0030】
いくつかの実施形態では、キャッシュラインの配置をセット内でさらに変更することができる。例えば、タグは、タグ配列502のウェイ1内に現れることができ、一方で、キャッシュラインは、データ配列512のウェイ2内に現れる。オフセットフィールドと同様のさらなるメタデータフィールドを、タグに対応付けられるメタデータに加えて、この変更を追跡することができる。場合によっては、キャッシュラインは、インストールされたら、セット間を動かない。別の場合では、ある書き込みでキャッシュラインが更新されたときにキャッシュラインが隣接セット間を移動できるように、さらなるワイヤ及びロジックが存在する。キャッシュラインが移動すると、そのタグに対応付けられるオフセットフィールドが更新されて、以降のアクセスでキャッシュラインが取り出せるようにする。キャッシュラインへの書き込みがその既存の辞書を用いた場合にその圧縮率に影響する場合に、セット間でラインを再マッピングすることを行う可能性がある。その場合には、現在のセットからデータを排除して容量の増加に対処するのではなくて、コストベネフィット分析に基づいて、更新されたキャッシュラインを圧縮することに対して、隣接するセットからの辞書が好ましいか否かをキャッシュロジックがチェックする。更新されたキャッシュラインを圧縮することに対して、隣接するセットからの辞書の方が当初の辞書よりも良好な選択であると分析によって判定した場合には、更新されたキャッシュラインを隣接するセットに再マッピングする。一実施形態では、このような再マッピングは、圧縮キャッシュ500のロジック及び複雑さを単純にするために、小さい付近(すなわち、セットの閾値数)に制約される。
【0031】
一実施形態では、圧縮キャッシュ500に対して読み出しを行う場合には、タグ配列502の検索を最初に行って、目標とするキャッシュラインに対応するタグエントリを見つける。タグ配列502に対する検索がヒットした場合に、マッチングエントリからオフセットを取り出す。次に、オフセットをベースインデックスに加えてフルインデックスを生成し、フルインデックスを用いてデータ配列512内の対応するセットを特定する。セットから辞書を取り出し、圧縮ブロックを特定して、対応するウェイから取り出す。そして、辞書を用いて、圧縮ブロックを復元して当初のデータにし、リクエスタに返す。
【0032】
いくつかのシナリオでは、圧縮キャッシュ500内の多くのキャッシュラインが圧縮に適用できない。これらのシナリオでは、圧縮キャッシュ500は、データ配列512内の同じ領域を用いて、データを複数のフォーマットで記憶することができる。圧縮が可能でない場合には、データ配列512は、非圧縮キャッシュラインを記憶する。圧縮が可能である場合には、同じスペースに、辞書とそれに続いて複数の圧縮ブロックを記憶する。したがって、圧縮が達成可能でない場合には、辞書を記憶するコストがかからない。
【0033】
次に、
図6を参照して、圧縮キャッシュ600の一実施形態のブロック図を示す。
図6に、圧縮キャッシュ600内の辞書を用いる別の方法を例示する。一実施形態では、圧縮キャッシュ600のコンポーネントは、(
図1の)キャッシュサブシステム115のレベルの1つ以上の中に含まれている。圧縮キャッシュ600では、アドレスのキャッシュセットインデックス部分を用いて、タグ配列610及びデータ配列620にインデックス付けする。したがって、標準的なキャッシュにおいて見られるように、キャッシュセット及びウェイは、タグ配列610及びデータ配列620の間で同じである。タグ配列エントリ630の例を、タグフィールド、メタデータフィールド及び任意的な辞書オフセットフィールドを用いて示す。タグ配列エントリ630に辞書オフセットフィールドが含まれていない実施形態であっても、データ配列620へのアクセスが依然としてシリアル化され得ることに留意されたい。
【0034】
タグ配列610内のマッチングタグのウェイを用いて、データ配列620内のウェイを特定する。例示的なキャッシュブロックエントリ640を、圧縮ブロックフィールド及び辞書オフセットフィールドを用いて示す。マッチングエントリからの圧縮ブロックを復元器660に与える。辞書オフセットフィールドをキャッシュセットインデックスと組み合わせて、圧縮ブロックを圧縮するために用いた辞書を記憶するデータ配列620内のセットを特定する。一実施形態では、辞書オフセットフィールドをキャッシュセットインデックスとXORして、データ配列620の適切なセットを特定する。他の実施形態では、辞書オフセットフィールドをキャッシュセットインデックスに適用してデータ配列620にインデックス付けする他の方法が可能であり、考えられる。例示的な辞書エントリ650を、辞書フィールド及び参照カウントフィールドを用いて示す。辞書を復元器660に与えて圧縮ブロックを復元する。参照カウントフィールドは、対応する辞書を用いて圧縮された圧縮ブロックの数を追跡する。
【0035】
キャッシュ600を用いて示す例では、データ配列620内の隣接するセット内の辞書を、ローカルセット内のキャッシュブロックを圧縮するために用いることができる。この例では、キャッシュセットインデックスが、タグ配列610とデータ配列620との間で共有される。辞書は、データ圧縮用に辞書を用いる各キャッシュブロックに対してカウントされる参照である。キャッシュアクセスが行われる場合に、キャッシュセットインデックスを用いてタグ配列610及びデータ配列620にインデックス付けする。タグ配列610の検索の結果、マッチした場合には、マッチングタグのウェイがデータ配列620に転送されて、対応付けられる圧縮キャッシュブロックがアクセスされる。データ配列620からの辞書オフセット(圧縮キャッシュブロックと同じ位置に配置される)が、それを圧縮するために用いた辞書を記憶する相対セットを指定する。対応付けられる辞書が適切なセット内でアクセスされる。そして、辞書(又は、そのサブセット)を圧縮ブロックとともに復元器660に与える。次に、復元器660が、対応付けられる復元されたキャッシュブロックを出力する。最適化として、辞書オフセットの冗長コピーをタグ配列610内に記憶することができる。この冗長コピーによって、辞書を含むセットと、圧縮キャッシュブロックを含む他のセットと、に並列にアクセスすることができる。別の実施形態では、辞書オフセットの単一コピーをタグ配列610内に記憶することができ、データ配列620内の辞書オフセットの冗長コピーが存在しない。排除する際、この選択によって、辞書に対応付けられる参照カウントを減少させることが、タグ配列610へのシリアル化された以降のアクセスが生じることによって遅れ得る。
【0036】
次に、
図7を参照して、圧縮キャッシュ700の一実施形態のブロック図を示す。圧縮キャッシュ700は、辞書をフレキシブルな方法で用いて、従来の非フレキシブルなアプローチと比較してより大きな圧縮を達成する別の例を示す。一実施形態では、圧縮キャッシュ700のコンポーネントは、(
図1の)キャッシュサブシステム115のレベルの1つ以上の中に含まれている。圧縮キャッシュ700では、辞書テーブル704は、データ配列706内に記憶されたキャッシュラインを圧縮及び復元するために用いられる辞書を記憶する。次のことに留意されたい。すなわち、圧縮キャッシュ700では、辞書テーブル704は、データ配列706内に記憶されておらず、むしろデータ配列706とは別に記憶されている。
【0037】
辞書テーブル704には任意の数のエントリが含まれ、エントリの数は実施形態毎に変わる。エントリ710には、辞書と、この辞書を用いて圧縮されたデータ配列706内に記憶されたキャッシュラインの数を追跡するための参照カウントと、が含まれている。エントリ710は、一実施形態による辞書テーブルエントリのフォーマットの一例である。また、エントリ710には、任意に、この辞書を用いて圧縮されたキャッシュラインの総数の履歴を追跡する合計カウントフィールドが含まれている。例えば、この辞書を用いて圧縮されたキャッシュラインが圧縮キャッシュ700から排除されるか又は無効化された場合、参照カウントは減るが、合計カウントは減らない。一実施形態では、参照カウントがゼロである複数の辞書エントリが存在する場合に何れの辞書エントリを交換するかを決定する場合に、合計カウントフィールドを用いる。例えば、一実施形態では、全ての利用可能な辞書エントリの中で合計カウントが最も小さい辞書エントリが、交換されるエントリである。したがって、合計カウントフィールドにより辞書エントリをランク付けして、何れの辞書のデータパターンが過去に頻繁に生じているかを判定する。別の実施形態では、辞書の個々のエントリを、圧縮キャッシュライン内のポインタフィールドによってそれらが参照された回数によってランク付けする。この実施形態では、新しい辞書を、交換される予定の複数の異なる辞書(すなわち、参照カウントがゼロである辞書)から最も高くランク付けされた個々のエントリを組み合わせることによって生成する。なお、いくつかの実施形態では、合計カウントの損失が多い概算値を記憶して、面積及びパワーを節約してもよい。
【0038】
圧縮キャッシュ700の検索を行う場合、目標とするアドレスからのアドレスビットのサブセット(すなわち、インデックス)を用いて、タグ配列702内の対応するエントリと、データ配列706内の対応するセットと、を特定する。エントリ708は、一実施形態によるタグ配列エントリのフォーマットの一例である。
図7に示すように、エントリ708には、タグフィールド、メタデータフィールド及び辞書IDフィールドが含まれている。セット712は、データ配列706のセットの一例を表しており、セット712には、任意の数の圧縮キャッシュブロックが含まれている。
【0039】
タグ配列702に対する検索の結果、問い合わせされたタグとエントリ内に記憶されたタグとの間にタグマッチがあった場合に、マッチングエントリから辞書IDを取り出す。そして、辞書IDを用いて、辞書テーブル704から対応する辞書を取り出す。また、タグ配列702のマッチングウェイの識別をデータ配列706に送り、圧縮キャッシュブロックを取り出すウェイを示す。この圧縮キャッシュブロックと取り出した辞書とを復元器707に与える。復元器707は、この辞書を用いて、圧縮キャッシュブロックを復元し、当初のデータを生成する。別の実施形態では、タグ配列702内のタグのグループは、単一の辞書IDフィールドを共有しており、タグあたり1つのこのようなフィールドを有するのではない。この実施形態では、異なるフィールドは、別の配列内に記憶される。例えば、辞書IDは、タグ及びメタデータとは別に記憶される。
【0040】
一実施形態では、キャッシュラインが圧縮キャッシュ700内に割り当てられている場合、制御ロジック(図示省略)は、キャッシュラインを圧縮するために何れの辞書を使うかを決定する。制御ロジック(例えば、セレクターユニット)は、キャッシュラインに対して達成された圧縮の量を比較するために辞書テーブル704から任意の数の辞書を選択する。比較するために選択された辞書の数は、実施形態により変わる可能性がある。セレクターユニットが、キャッシュラインを圧縮するための辞書を選択すると、この辞書の辞書IDをタグ配列702内の対応するエントリの辞書IDフィールドに記憶する。また、参照カウントを、選択した辞書に対応する辞書テーブル704のエントリ内で増加させる。
【0041】
一実施形態では、所定のキャッシュラインが圧縮キャッシュ700から排除されるか又は無効化されると、所定のキャッシュラインを圧縮するために用いた辞書に対するエントリを特定する。そして、この辞書テーブルエントリに対する参照カウントを減少させる。この辞書テーブルエントリに対する参照カウントがゼロに等しい場合には、辞書テーブルエントリをリクレイム(reclaimed)することができる。一実施形態では、テーブル内に新しい辞書を記憶して、参照カウントがゼロに減少したばかりの辞書と交換する。一実施形態では、新しい辞書の生成又は選択を、それに含まれるデータパターンが、圧縮キャッシュ700に書き込まれているキャッシュライン内のデータパターンとマッチする可能性に基づいて行う。いくつかの実施形態では、参照カウントがゼロに等しい辞書テーブルエントリを、後の時点で遅延的にリクレイムする。
【0042】
別の実施形態では、圧縮キャッシュ700には、拡張性を改善してレイテンシを減らすために、圧縮キャッシュ700のサブ領域又はスライスに対する複数の辞書配列が含まれている。加えて、異なる粒度で圧縮を行う複数の辞書を用いることができる。例えば、辞書のある配列は、キャッシュラインの2バイトシーケンスをコードワードと交換する辞書を記憶することができ、辞書の別の配列は、キャッシュラインの16バイトシーケンスをコードワードと交換することができる。いくつかの変形では、複数の辞書配列は、可変長の参照カウンティングフィールドを有する。場合によっては、実際のデータは、通常、非常に歪んでいる(例えば、Zipf分布に従う)ため、いくつかの辞書は、他よりも一層広く用いられる可能性がある。したがって、他よりも多く用いられると予測される辞書を、参照カウンターフィールドがより広いエントリ内に配置する。
【0043】
別の実施形態では、圧縮キャッシュ700は、辞書の配列ではなくて辞書エントリの配列を記憶する。この実施形態では、単一のキャッシュラインを、辞書エントリのいくつかの固定された組み合わせの代わりに辞書エントリの任意の組み合わせを用いて圧縮することができる。この実施形態の場合、各辞書エントリには、このエントリを用いていくつのキャッシュラインチャンクが圧縮されるかを示す参照カウントが含まれている。
【0044】
辞書テーブル704の辞書を複数のキャッシュライン間で共有することができるため、同じアドレス空間に属しないスレッドは、潜在的に、別のスレッドの状態を読み出すか又は変更することができる。したがって、一実施形態では、辞書にアクセスする前又はアクセスしている間に、キャッシュロジックによって、異なるアドレス空間からのスレッドが他のスレッドの辞書を読み出すか又は変更することを防ぐ。ただし、スレッドに適切な許可が与えられている場合は除く。いくつかの実施形態では、所有スレッド又はアドレス空間識別子を所定の辞書に対応付ける。このような実施形態では、所有者によって、辞書に対応付けられる許可が指定される。所有者は、他のスレッドが辞書を共有できることを有効又は無効にすることができ、所有者は共有の性質を指定することができる。対応付けられるキャッシュラインを復元した場合に、任意のスレッドの代わりに辞書に更新を行ってもデータが破損することもデータの回復が禁じられることもないことが、キャッシュロジックによって確実になる。
【0045】
いくつかの実施形態では、1つ以上のアドレス空間識別子をハードウェアスレッド及びその対応付けられる辞書に対応付ける。2つ以上のハードウェアスレッドは、完全に、部分的に、又は、全体として重なっているアドレス空間識別子セットを有することができる。スレッドの代わりにキャッシュロジックが行う各演算に対して、キャッシュロジックは、アドレス空間識別子及び許可セットがアクセスを許すのに十分であることをチェックする。いくつかの実施形態では、異なるアドレス空間からのスレッドが1つ以上の辞書を共有することができる。他の実施形態では、情報漏洩を減らすために、アドレス空間の間での共有を厳しく禁ずることができる。一実施形態では、キャッシュパーティショニングを用いて、異なるアドレス空間からのスレッドを異なるパーティションにマッピングし、パーティション境界間の辞書共有を禁ずる。いくつかの実施形態では、このパーティショニングをオペレーティングシステム又は特権ソフトウェアに任せることが、ページカラーリングを用いることによって又はウェイベース若しくはセットベースのキャッシュパーティショニングを用いることによって、可能である。
【0046】
一実施形態では、辞書テーブル704の内容は、1つ以上のスレッドのハードウェアコンテキストの一部を構成する。アドレス空間識別子を用いない実施形態では、辞書テーブル740は、コンテキストスイッチ上でフラッシュされて、メモリ又は非一時的なハードウェア構造(例えば、専用のキャッシュ又はスクラッチパッド)に書き戻される。スレッドのコンテキストがスイッチバックされると、スレッドの辞書は、辞書テーブル704内に再インストールされる。別の実施形態では、1つ以上のアドレス空間識別子が辞書テーブル704内の各辞書に対応付けられる。この実施形態では、コンテキストスイッチ上で、辞書状態をもはやフラッシュする必要がない。さらなる実施形態では、1つ以上のアドレス空間識別子を、(
図5の)圧縮キャッシュ500のデータ配列512内に記憶された各辞書に対応付ける。この実施形態では、これらの1つ以上のアドレス空間識別子を用いて、コンテキストスイッチ上で圧縮キャッシュをフラッシュする必要を防ぐ。他の実施形態では、コンテキストスイッチ上で圧縮キャッシュ500の辞書を十分又は選択的にフラッシュすることができる。
【0047】
次に、
図8を参照して、圧縮キャッシュ内でのフレキシブルな辞書共有に対する方法800の一実施形態を示す。説明のために、この実施形態におけるステップ及び
図9~
図14を順番に示している。しかし、説明する方法の様々な実施形態において、説明する要素の1つ以上を同時に行ってもよいし、図示した順番とは異なる順番で行ってもよいし、全て省略してもよいことに留意されたい。他のさらなる要素も必要に応じて行う。本明細書で説明する様々なシステム又は装置の何れかは、方法800を実施するように構成されている。
【0048】
圧縮キャッシュがキャッシュラインの割り当てを開始する(ブロック805)。キャッシュラインの割り当ての開始に応じて、圧縮キャッシュは、タグ配列エントリ内の対応するタグを、キャッシュラインのアドレスビットの一部に基づく位置にマッピングして記憶する(ブロック810)。アドレスビットのこの部分は「ベースインデックス」と呼ぶことができる。そして、圧縮キャッシュは、ベースインデックスにオフセットを加えなかった場合に、データ配列の何れのセットにキャッシュラインをマッピングするかを決定する(ブロック815)。次に、圧縮キャッシュは、このベースセットに極めて接近しているセットに対して辞書のグループの各辞書に対するキャッシュラインの圧縮率を評価する(ブロック820)。極めて接近しているグループ内の辞書の数は、実施形態毎に変わる可能性がある。一実施形態では、セットの近接を構成するものの境界は、データ配列へのキャッシュラインのマッピングを調整するために用いられるオフセットのビット数に基づいて決定される。
【0049】
そして、圧縮キャッシュは、辞書のグループから、キャッシュラインを圧縮するために好ましい辞書を選択する(ブロック825)。一実施形態では、好ましい辞書は、1つ以上の制約を受ける辞書のグループの中でキャッシュラインに対する最大圧縮を達成する辞書である。いくつかの実施形態では、好ましい辞書は、キャッシュラインに対する最大圧縮を達成する辞書ではない場合があることに留意されたい。例えば、場合によっては、好ましい辞書は、圧縮を行うために必要なオーバーヘッドと現在の作業負荷との間の所望のバランスに基づいて選択してもよい。一例として、システムの現在の作業負荷を考慮すると、より積極的な圧縮アルゴリズムが現時点では望ましくない場合には、キャッシュラインに対する最大圧縮を達成する辞書ではなくて、キャッシュラインに対する2番目に大きい圧縮を達成する辞書を好ましい辞書として選択してもよい。別の場合では、好ましい辞書を選択する場合に他の要因及び/又はさらなる要因を考慮してもよい。例えば、1つの辞書が、より低いレベルの(例えば、2番目に大きい)圧縮を達成するが、別の指標(例えば、キャッシュヒット率)も改善する場合、様々な実施形態においてその辞書が好ましい辞書として選択される。これら及び他の実施形態が可能であり、考えられる。別の実施形態では、好ましい辞書は、キャッシュラインに対する圧縮の少なくとも閾値を達成する辞書である。閾値は実施形態毎に変わる可能性がある。場合によっては、何れの辞書も、キャッシュラインに対する圧縮の少なくとも閾値を達成しないことに留意されたい。このような場合、方法800を終了することができ、キャッシュラインは非圧縮状態で記憶される。
【0050】
ブロック825の後、圧縮キャッシュは、好ましい辞書を含むデータ配列セットにこのキャッシュラインをマッピングするために、ベースインデックスに何れのオフセットを加えるべきかを決定する(ブロック830)。そして、圧縮キャッシュは、キャッシュラインに対応するタグ配列エントリ内にこのオフセットを記憶する(ブロック835)。次に、圧縮キャッシュは、好ましい辞書を用いてキャッシュラインを圧縮し、好ましい辞書を含むデータ配列セット内に圧縮キャッシュラインを記憶する(ブロック840)。ブロック840の後に、方法800は終了する。
【0051】
次に、
図9を参照して、圧縮キャッシュに対する辞書セレクターユニットを実装するための方法900の一実施形態を示す。圧縮キャッシュがキャッシュラインの割り当てを開始する(ブロック905)。一実施形態では、圧縮キャッシュには、タグ配列、データ配列、及び、辞書セレクターユニットを実施するための制御ロジック(例えば、キャッシュコントローラ)が含まれている。次に、圧縮キャッシュは、キャッシュラインに対するタグ配列内のエントリを割り当てる(ブロック910)。そして、辞書セレクターユニットは、辞書テーブルの複数の辞書の評価を、各辞書がどの程度キャッシュラインを圧縮できるかに基づいて行う(ブロック915)。一実施形態では、辞書セレクターユニットは、何れの辞書がキャッシュラインに対する最大圧縮を達成するかを決定し、そして、辞書セレクターユニットは、キャッシュラインを圧縮するためにこの辞書を選択する。次に、辞書セレクターユニットは、キャッシュラインに対する圧縮の少なくとも閾値を達成する辞書を選択する(ブロック920)。何れの辞書によってもキャッシュラインを特定のサイズに圧縮することができない場合、圧縮キャッシュは、キャッシュラインを圧縮しないことを選択することができ、方法900が終了する。
【0052】
ブロック920の後、圧縮キャッシュは、選択した辞書を用いてキャッシュラインを圧縮し、データ配列内に圧縮キャッシュラインを記憶する(ブロック925)。一実施形態では、圧縮キャッシュは、圧縮キャッシュラインを、キャッシュラインに対するタグ配列内のエントリの位置に対応するセット内のデータ配列内に記憶する。また、圧縮キャッシュは、選択した辞書のIDを、キャッシュラインに対するタグ配列エントリ内に記憶する(ブロック930)。さらにまた、圧縮キャッシュは、辞書テーブル内の選択した辞書の対応するエントリ内の参照カウントフィールドを増加させる(ブロック935)。ブロック935の後に、方法900は終了する。
【0053】
次に、
図10を参照して、圧縮キャッシュからの排除を処理するための方法1000の一実施形態を示す。圧縮キャッシュからの圧縮キャッシュラインの排除を開始する(ブロック1005)。圧縮キャッシュからのキャッシュラインの排除が開始したことに応じて、圧縮キャッシュは、キャッシュラインを圧縮するために用いた辞書のIDを取り出す(ブロック1010)。一実施形態では、圧縮キャッシュは、対応するタグ配列エントリから、キャッシュラインを圧縮するために用いた辞書のIDを取り出す。次に、圧縮キャッシュは、識別した辞書に対する辞書テーブルエントリを特定する(ブロック1015)。そして、エントリから辞書を取り出す(ブロック1020)。次に、圧縮キャッシュは、取り出した辞書を用いて圧縮キャッシュラインのデータを復元する(ブロック1025)。そして、復元したデータを、下位レベルのキャッシュ又はメモリに書き戻すことができる。場合によっては、データを廃棄する場合には、ブロック1025を省略することができる。
【0054】
また、キャッシュコントローラは、識別した辞書の辞書テーブルエントリ内の参照カウントを減少させる(ブロック1030)。減少後に、識別した辞書の辞書テーブルエントリに対する参照カウントがゼロに等しい場合には(条件ブロック1035:yes)、辞書テーブルエントリを交換可能であるとマーキングする(ブロック1040)。次に、キャッシュコントローラは、識別した辞書を新しい辞書と交換する(ブロック1045)。ブロック1040,1045間で経過する時間は、実施形態によって変わる可能性があることに留意されたい。また「新しい」辞書は、実際には、以前に用いた辞書である可能性があることに留意されたい。ブロック1045の後、方法1000は終了する。場合によっては、識別した辞書を用いた新しいキャッシュラインの圧縮が、ブロック1040を行った後だがブロック1045を行う前である場合には、その参照カウントが再び非ゼロとなっているので、辞書テーブルエントリを交換しない。減少後に、識別した辞書の辞書テーブルエントリに対する参照カウントが依然としてゼロよりも大きい場合には(条件ブロック1035:no)、辞書テーブルエントリが有効なままである(ブロック1050)。ブロック1050の後、方法1000は終了する。
【0055】
次に、
図11を参照して、タグエントリ位置を対応するデータエントリ位置にマッピングするための方法1100の一実施形態を示す。制御ロジックは、圧縮キャッシュ内に圧縮キャッシュラインを割り当てる場合に、セットオフセット及びウェイオフセットを用いて、タグ配列内のタグエントリをデータ配列内のデータエントリにマッピングする(ブロック1105)。制御ロジックは、セットオフセット及びウェイオフセットをタグエントリ及びデータエントリ内に記憶する(ブロック1110)。後に、制御ロジックは、圧縮キャッシュラインにアクセスする場合に、タグエントリ内に記憶されたセットオフセット及びウェイオフセットを用いてデータエントリを特定する(ブロック1115)。また、制御ロジックは、圧縮キャッシュラインを排除又は無効化する場合に、データエントリ内に記憶されたセットオフセット及びウェイオフセットを用いてタグエントリを特定する(ブロック1120)。ブロック1120の後、方法1100は終了する。方法1100を用いることによって、制御ロジックは、キャッシュラインを圧縮するための好適な辞書を見出す際のフレキシビリティが高くなる。
【0056】
次に、
図12を参照して、圧縮キャッシュから圧縮キャッシュラインを排除するための方法1200の一実施形態を示す。所定のデータ配列エントリから圧縮キャッシュラインの排除(又は無効化)を開始する(ブロック1205)。所定のデータ配列エントリ内に記憶された辞書を用いて圧縮キャッシュラインを復元する(ブロック1210)。場合によっては、データを廃棄する場合には、ブロック1210を省略することができる。また、所定のデータ配列エントリからセットオフセット及びウェイオフセットを取り出す(ブロック1215)。次に、セットオフセット及びウェイオフセットを用いて逆アドレス変換を行い、圧縮キャッシュラインに対応するタグ配列エントリを特定する(ブロック1220)。セットオフセット及びウェイオフセットを用いて逆アドレス変換を行う一例を(
図13の)方法1300に記載する。そして、特定したタグ配列エントリを無効化する(ブロック1225)。ブロック1225の後、方法1200は終了する。
【0057】
次に、
図13を参照して、逆アドレス変換を行うための方法1300の一実施形態を示す。セットオフセットをフルインデックスとXORして、ベースインデックスを形成する。セットオフセットを、排除(又は、無効化)した圧縮キャッシュラインのデータ配列エントリから取り出す(ブロック1305)。フルインデックスは、排除(又は、無効化)した圧縮キャッシュラインのデータ配列セットのインデックスである。ウェイオフセットを、排除した圧縮キャッシュラインのウェイとXORして、タグ配列ウェイロケータ(tag array way locator)を形成する(ブロック1310)。制御ロジックは、ベースインデックスを用いてタグ配列にインデックス付けして、所定のタグ配列セットを特定する(ブロック1315)。次に、制御ロジックは、タグ配列ウェイロケータを用いて所定のタグ配列セットのウェイを選択する(ブロック1320)。そして、制御ロジックは、選択したウェイにおけるタグを無効化する(ブロック1325)。ブロック1325の後、方法1300は終了する。
【0058】
次に、
図14を参照して、圧縮キャッシュ内の辞書オフセットフィールドを用いるための方法1400の一実施形態を示す。タグ配列内のマッチングタグのウェイを用いて、マッチングタグに対応するデータ配列内のウェイを特定する(ブロック1405)。データ配列内のウェイから辞書オフセットフィールドを取り出す(ブロック1410)。辞書オフセットフィールドをキャッシュセットインデックスと組み合わせて用いて、圧縮ブロックを圧縮するために用いた辞書を記憶するデータ配列セットを特定する(ブロック1415)。一実施形態では、辞書オフセットフィールドをキャッシュセットインデックスとXORして、データ配列にインデックス付けする。次に、特定したデータ配列セットから辞書を取り出して、辞書を用いて圧縮ブロックを復元する(ブロック1420)。また、辞書に対する参照カウントを維持して、辞書によってどのくらいの数のキャッシュブロックが圧縮されたかを追跡する(ブロック1425)。ブロック1425の後、方法1400は終了する。
【0059】
様々な実施形態において、ソフトウェアアプリケーションのプログラム命令を用いて、本明細書で説明する方法及び/又はメカニズムを実施する。例えば、汎用又は専用プロセッサによって実行可能なプログラム命令が考えられる。様々な実施形態では、このようなプログラム命令を、高水準プログラミング言語によって表すことができる。他の実施形態では、プログラム命令を、高水準プログラミング言語からバイナリ、中間又は他の形式にコンパイルすることができる。代替的に、ハードウェアの動作又はデザインを記述するプログラム命令を記述することができる。このようなプログラム命令を、C等の高水準プログラミング言語によって表すことができる。代替的に、Verilog等のハードウェア設計言語(HDL)を用いることができる。様々な実施形態では、プログラム命令を様々な非一時的なコンピュータ可読記憶媒体に記憶する。記憶媒体は、使用中にコンピューティングシステムによってアクセス可能であり、プログラムを実行させるためにコンピューティングシステムにプログラム命令を送る。一般的に、このようなコンピューティングシステムは、少なくとも1つ以上のメモリと、プログラム命令を実行するように構成された1つ以上のプロセッサと、を含む。
【0060】
上述した実施形態は、実施態様の非限定な例に過ぎないことを強調しておきたい。いく上記の開示が十分に理解されれば、多くの変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲はこのような全ての変形及び修正を包含するように解釈されることを意図している。