(57)【要約】  中央処理ユニット（ＣＰＵ）ベースシステムにおいて複数のラストレベルキャッシュ（ＬＬＣ）ラインを使用してメモリ帯域幅圧縮を行うことが開示される。いくつかの態様では、圧縮メモリコントローラ（ＣＭＣ）が、複数のＬＬＣラインを備えるＬＬＣを与え、各々がシステムキャッシュラインと同じサイズの複数のサブラインを与える。単一のＬＬＣライン内に記憶された（１つまたは複数の）システムキャッシュラインのコンテンツは、圧縮され、ＬＬＣラインに対応するメモリサブライン領域内でシステムメモリに記憶される。マスタテーブルが、各ＬＬＣライン内の各サブラインのためのオフセット値と長さ値とを記憶することによって、ＬＬＣラインのための圧縮されたデータがシステムメモリにどのように記憶されるかを示す情報を記憶する。複数のシステムキャッシュラインを一緒に圧縮することと、複数の圧縮されていないシステムラインに通常割り振られる空間に、圧縮されたデータを記憶することとによって、ＣＭＣは、圧縮サイズがシステムメモリのメモリ読取り／書込みグラニュラリティよりも小さくなることを可能にする。
2019513271.tif 000002
【特許請求の範囲】
【請求項１】
システムバスを介してシステムメモリとシステムキャッシュとにアクセスするように構成されたメモリインターフェースを備え、前記システムキャッシュの複数のシステムキャッシュラインに対応する複数のサブラインを記憶するように各々がサイズ決定された複数のラストレベルキャッシュ（ＬＬＣ）ラインを備えるＬＬＣに通信可能に結合された、圧縮メモリコントローラ（ＣＭＣ）であって、
前記ＣＭＣは、
前記システムキャッシュからメモリアドレスを備えるメモリ読取り要求を受信することと、
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちの有効なサブラインに対応するかどうかを決定することと、
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちの有効なサブラインに対応しないと決定したことに応答して、
前記システムメモリ中のマスタテーブルから前記ＬＬＣラインのためのオフセット値と長さ値とを含んでいるマスタテーブルエントリを読み取ることと、
前記メモリアドレスと、前記オフセット値と、前記長さ値とに基づいて、前記システムメモリから１つまたは複数のブロックを検索することと、
前記検索された１つまたは複数のブロックからのデータを前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちのサブラインに記憶することと、
前記検索された１つまたは複数のブロックからの前記データを前記システムキャッシュに返すことと
を行うように構成された、ＣＭＣ。
【請求項２】
前記メモリアドレスが前記複数のＬＬＣライン内の既存のＬＬＣラインのサブラインに対応するかどうかを決定することと、
前記メモリアドレスが前記複数のＬＬＣライン内の既存のＬＬＣラインのサブラインに対応すると決定したことに応答して、前記既存のＬＬＣラインの前記サブラインが有効であるかどうかを決定することと
を行うように構成されることによって、前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちの有効なサブラインに対応するかどうかを決定するように構成された、請求項１に記載のＣＭＣ。
【請求項３】
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちの有効なサブラインに対応すると決定したことに応答して、前記有効なサブラインからのデータを前記システムキャッシュに返すようにさらに構成された、請求項１に記載のＣＭＣ。
【請求項４】
前記長さ値に基づいて、前記検索された１つまたは複数のブロックからの前記データが圧縮されたかどうかを決定することと、
前記検索された１つまたは複数のブロックからの前記データが圧縮されていないと決定したことに応答して、前記検索された１つまたは複数のブロックからの前記データを前記ＬＬＣの前記複数のＬＬＣラインのうちの前記ＬＬＣライン内の前記複数のサブラインのうちの前記サブラインに記憶することと、
前記検索された１つまたは複数のブロックからの前記データが圧縮されたと決定したことに応答して、
前記検索された１つまたは複数のブロックからの前記データを復元することと、
前記復元されたデータを前記ＬＬＣの前記複数のＬＬＣラインのうちの前記ＬＬＣライン内の前記複数のサブラインのうちの前記サブラインに記憶することと
を行うように構成されることによって、前記検索された１つまたは複数のブロックからの前記データを前記ＬＬＣの前記複数のＬＬＣラインのうちの前記ＬＬＣライン内の前記複数のサブラインのうちの前記サブラインに記憶するように構成された、請求項１に記載のＣＭＣ。
【請求項５】
前記検索された１つまたは複数のブロックからの前記データを前記ＬＬＣの前記複数のＬＬＣラインのうちの前記ＬＬＣライン内の前記複数のサブラインのうちの前記サブラインに記憶するより前に、
前記複数のＬＬＣラインのうちのＬＬＣラインをエビクションＬＬＣラインとして選択することと、
前記エビクションＬＬＣラインの前記複数のサブラインからのデータを前記システムメモリに記憶することと、
前記検索された１つまたは複数のブロックからの前記データを前記エビクションＬＬＣライン内の前記複数のサブラインのうちのサブラインに記憶することと
を行うようにさらに構成された、請求項１に記載のＣＭＣ。
【請求項６】
前記エビクションＬＬＣラインの前記複数のサブラインの各対応するサブラインのためのオフセット値と長さ値とを各々が含んでいる複数のマスタテーブルエントリを読み取ることと、
変更されたデータを含んでいる前記エビクションＬＬＣラインの前記複数のサブラインの各サブラインについて、
前記サブラインからのデータを圧縮することと、
前記サブラインからの前記圧縮されたデータに基づいて、前記サブラインのための更新された長さ値を生成することと、
前記サブラインのための前記更新された長さ値が前記サブラインのための前記長さ値とは異なるかどうかを決定することと、
前記サブラインのための前記更新された長さ値が前記サブラインのための前記長さ値とは異ならないと決定したことに応答して、前記サブラインのための前記オフセット値と前記長さ値とに基づいて、前記サブラインのための前記圧縮されたデータを前記システムメモリの１つまたは複数のブロックに書き込むことと、
前記サブラインのための前記更新された長さ値が前記サブラインのための前記長さ値とは異なると決定したことに応答して、
前記サブラインのための更新されたオフセット値を生成することと、
前記サブラインのための前記更新されたオフセット値と前記更新された長さ値とに基づいて、前記サブラインのための前記圧縮されたデータを前記システムメモリの１つまたは複数のブロックに書き込むことと、
前記更新されたオフセット値と前記更新された長さ値とで前記サブラインのためのマスタテーブルエントリを更新することと
を行うように構成されることによって、前記エビクションＬＬＣラインの前記複数のサブラインからの前記データを前記システムメモリに記憶するように構成された、請求項５に記載のＣＭＣ。
【請求項７】
前記圧縮されたデータが、２つ以上のサブラインに対応する前記システムメモリのメモリサブライン領域にまたがることを防ぐことと、前記システムメモリの前記メモリサブライン領域内で、前記圧縮されたデータを整合させることと、前記複数のサブラインのための前記圧縮されたデータをグループ化することとを備える１つまたは複数の割振りルールに基づいて、前記サブラインのための前記更新されたオフセット値を生成するように構成された、請求項６に記載のＣＭＣ。
【請求項８】
前に読み取られたマスタテーブルエントリを記憶するように各々が構成された複数のマスタテーブル（ＭＴ）キャッシュエントリを備えるＭＴキャッシュをさらに備え、
前記ＣＭＣは、前記マスタテーブルエントリを読み取るより前に、前記メモリアドレスが前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちのＭＴキャッシュエントリに対応するかどうかを決定するようにさらに構成され、
前記ＣＭＣは、前記メモリアドレスが前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちのＭＴキャッシュエントリに対応しないと決定したことに応答して、前記マスタテーブル中の前記マスタテーブルエントリを読み取るように構成され、
前記ＣＭＣは、
前記メモリアドレスが前記ＭＴキャッシュの前記複数ＭＴキャッシュエントリのうちのＭＴキャッシュエントリに対応しないと決定したことに応答して、前記マスタテーブルエントリを前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちのＭＴキャッシュエントリに書き込むことと、
前記メモリアドレスが前記ＭＴキャッシュの前記複数ＭＴキャッシュエントリのうちのＭＴキャッシュエントリに対応すると決定したことに応答して、前記ＭＴキャッシュの前記ＭＴキャッシュエントリを読み取ることと
を行うようにさらに構成された、
請求項１に記載のＣＭＣ。
【請求項９】
前記マスタテーブルエントリを前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちの前記ＭＴキャッシュエントリに書き込むより前に、
前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちの現在のＭＴキャッシュエントリがエビクトされるべきであるかどうかを決定することと、
前記現在のＭＴキャッシュエントリがエビクトされるべきであると決定したことに応答して、
前記現在のＭＴキャッシュエントリが更新されたかどうかを決定することと、
前記現在のＭＴキャッシュエントリが更新されたと決定したことに応答して、前記現在のＭＴキャッシュエントリのコンテンツを前記マスタテーブルに書き込むことと
を行うようにさらに構成された、請求項８に記載のＣＭＣ。
【請求項１０】
前記ＬＬＣの前記複数のＬＬＣラインのうちの前記ＬＬＣライン内の前記複数のサブラインのうちの１つまたは複数の残りのサブラインのための１つまたは複数のオフセット値と１つまたは複数の長さ値とを含んでいる１つまたは複数のマスタテーブルエントリを読み取ることと、
前記１つまたは複数のオフセット値と前記１つまたは複数の長さ値とに基づいて、前記システムメモリから前記１つまたは複数のブロックを検索することと、
前記検索された１つまたは複数のブロックからの前記データを前記ＬＬＣの前記複数のＬＬＣラインのうちの前記ＬＬＣライン内の前記複数のサブラインのうちの前記１つまたは複数の残りのサブラインに記憶することと
を行うようにさらに構成された、請求項１に記載のＣＭＣ。
【請求項１１】
集積回路（ＩＣ）に組み込まれる、請求項１に記載のＣＭＣ。
【請求項１２】
セットトップボックスと、エンターテインメントユニットと、ナビゲーションデバイスと、通信デバイスと、固定ロケーションデータユニットと、モバイルロケーションデータユニットと、モバイルフォンと、セルラーフォンと、スマートフォンと、タブレットと、ファブレットと、コンピュータと、ポータブルコンピュータと、デスクトップコンピュータと、携帯情報端末（ＰＤＡ）と、モニタと、コンピュータモニタと、テレビジョンと、チューナーと、無線機と、衛星無線機と、音楽プレーヤと、デジタル音楽プレーヤと、ポータブル音楽プレーヤと、デジタルビデオプレーヤと、ビデオプレーヤと、デジタルビデオディスク（ＤＶＤ）プレーヤと、ポータブルデジタルビデオプレーヤと、自動車とからなるグループから選択されたデバイスに組み込まれる、請求項１に記載のＣＭＣ。
【請求項１３】
システムバスを介してシステムメモリとシステムキャッシュとにアクセスするように構成されたメモリインターフェースを備え、前記システムキャッシュの隣接する複数のシステムキャッシュラインに対応する複数のサブラインを記憶するように各々がサイズ決定された複数のラストレベルキャッシュ（ＬＬＣ）ラインを備えるＬＬＣに通信可能に結合された、圧縮メモリコントローラ（ＣＭＣ）であって、
前記ＣＭＣは、
前記システムキャッシュから書込みデータとメモリアドレスとを備えるメモリ書込み要求を受信することと、
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちのサブラインに対応するかどうかを決定することと、
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちのサブラインに対応しないと決定したことに応答して、
前記ＬＬＣの前記複数のＬＬＣライン内のＬＬＣラインをエビクションＬＬＣラインとして選択することと、
変更されたデータを含んでいる前記エビクションＬＬＣラインの前記複数のサブラインの各サブラインについて、
前記サブラインからのデータを圧縮することと、
前記サブラインからの前記圧縮されたデータに基づいて、前記サブラインのための更新されたオフセット値と更新された長さ値とを生成することと、
前記サブラインのための前記更新されたオフセット値と前記更新された長さ値とに基づいて、前記サブラインのための前記圧縮されたデータを前記システムメモリの１つまたは複数のブロックに記憶することと、
前記更新されたオフセット値と前記更新された長さ値とをマスタテーブル中の前記サブラインのためのマスタテーブルエントリに記憶することと、
前記書込みデータを前記エビクションＬＬＣラインの前記複数のサブラインのうちのサブラインに記憶することと
を行うように構成された、ＣＭＣ。
【請求項１４】
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちのサブラインに対応すると決定したことに応答して、前記書込みデータを前記ＬＬＣラインの前記サブラインに記憶するようにさらに構成された、請求項１３に記載のＣＭＣ。
【請求項１５】
前記圧縮されたデータが、２つ以上のサブラインに対応する前記システムメモリのメモリサブライン領域にまたがることを防ぐことと、前記システムメモリの前記メモリサブライン領域内で、前記圧縮されたデータを整合させることと、前記複数のサブラインのための前記圧縮されたデータをグループ化することとを備える１つまたは複数の割振りルールに基づいて、前記サブラインのための前記更新されたオフセット値を生成するように構成された、請求項１３に記載のＣＭＣ。
【請求項１６】
前記サブラインのための前記更新されたオフセット値と前記更新された長さ値とに基づいて、前記サブラインのための前記圧縮されたデータを前記システムメモリの前記１つまたは複数のブロックに記憶するより前に、前記サブラインのためのオフセット値と長さ値とを読み取ることと、
前記サブラインのための前記更新された長さ値が前記サブラインのための前記長さ値とは異なるかどうかを決定することと、
前記サブラインのための前記更新された長さ値が前記サブラインのための前記長さ値とは異なると決定したことに応答して、
前記サブラインのための前記更新されたオフセット値を生成することと、
前記サブラインのための前記更新されたオフセット値と前記長さ値とに基づいて、前記サブラインのための前記圧縮されたデータを前記システムメモリの１つまたは複数のブロックに記憶することと、
前記更新されたオフセット値と前記長さ値とで前記マスタテーブル中の前記サブラインのための前記マスタテーブルエントリを更新することと
を行うようにさらに構成され、
前記ＣＭＣは、前記サブラインのための前記更新された長さ値が前記サブラインのための前記長さ値とは異ならないと決定したことに応答して、前記サブラインのための前記オフセット値と前記長さ値とに基づいて、前記サブラインのための前記圧縮されたデータを前記システムメモリの前記１つまたは複数のブロックに記憶するように構成された、
請求項１３に記載のＣＭＣ。
【請求項１７】
前に読み取られたマスタテーブルエントリを記憶するように各々が構成された複数のマスタテーブル（ＭＴ）キャッシュエントリを備えるＭＴキャッシュをさらに備え、
前記ＣＭＣは、前記更新されたオフセット値と前記更新された長さ値とを前記マスタテーブル中の前記サブラインのための前記マスタテーブルエントリに記憶するより前に、前記メモリアドレスが前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちのＭＴキャッシュエントリに対応するかどうかを決定するようにさらに構成され、
前記ＣＭＣは、
前記メモリアドレスが前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちのＭＴキャッシュエントリに対応しないと決定したことに応答して、前記更新されたオフセット値と前記更新された長さ値とを前記ＭＴキャッシュのＭＴキャッシュエントリに記憶することと、
前記メモリアドレスが前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちのＭＴキャッシュエントリに対応すると決定したことに応答して、前記更新されたオフセット値と前記更新された長さ値とで前記ＭＴキャッシュの前記ＭＴキャッシュエントリを更新することと
を行うようにさらに構成された、請求項１３に記載のＣＭＣ。
【請求項１８】
前記マスタテーブルエントリを前記ＭＴキャッシュの前記ＭＴキャッシュエントリに書き込むより前に、
前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちの現在のＭＴキャッシュエントリがエビクトされるべきであるかどうかを決定することと、
前記現在のＭＴキャッシュエントリがエビクトされるべきであると決定したことに応答して、
前記現在のＭＴキャッシュエントリが変更されたかどうかを決定することと、
前記現在のＭＴキャッシュエントリが変更された決定したことに応答して、前記ＭＴキャッシュエントリの前記マスタテーブルエントリを前記マスタテーブルに書き込むことと
を行うようにさらに構成された、請求項１７に記載のＣＭＣ。
【請求項１９】
集積回路（ＩＣ）に組み込まれる、請求項１３に記載のＣＭＣ。
【請求項２０】
セットトップボックスと、エンターテインメントユニットと、ナビゲーションデバイスと、通信デバイスと、固定ロケーションデータユニットと、モバイルロケーションデータユニットと、モバイルフォンと、セルラーフォンと、スマートフォンと、タブレットと、ファブレットと、コンピュータと、ポータブルコンピュータと、デスクトップコンピュータと、携帯情報端末（ＰＤＡ）と、モニタと、コンピュータモニタと、テレビジョンと、チューナーと、無線機と、衛星無線機と、音楽プレーヤと、デジタル音楽プレーヤと、ポータブル音楽プレーヤと、デジタルビデオプレーヤと、ビデオプレーヤと、デジタルビデオディスク（ＤＶＤ）プレーヤと、ポータブルデジタルビデオプレーヤと、自動車とからなるグループから選択されたデバイスに組み込まれる、請求項１３に記載のＣＭＣ。
【請求項２１】
メモリ読取り動作のためのメモリ帯域幅圧縮を行うための方法であって、
システムキャッシュから圧縮メモリコントローラ（ＣＭＣ）によって、メモリアドレスを備えるメモリ読取り要求を受信することと、
前記メモリアドレスがラストレベルキャッシュ（ＬＬＣ）の複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちの有効なサブラインに対応するかどうかを決定することと、
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちの有効なサブラインに対応しないと決定したことに応答して、
システムメモリ中のマスタテーブルから前記ＬＬＣラインのためのオフセット値と長さ値とを含んでいるマスタテーブルエントリを読み取ることと、
前記メモリアドレスと、前記オフセット値と、前記長さ値とに基づいて、前記システムメモリから１つまたは複数のブロックを検索することと、
前記検索された１つまたは複数のブロックからのデータを前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちのサブラインに記憶することと、
前記検索された１つまたは複数のブロックからの前記データを前記システムキャッシュに返すことと
を備える、方法。
【請求項２２】
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちの有効なサブラインに対応するかどうかを決定することは、
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちの既存のＬＬＣライン内の前記複数のサブラインのうちのサブラインに対応するかどうかを決定することと、
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちの既存のＬＬＣライン内の前記複数のサブラインのうちのサブラインに対応すると決定したことに応答して、前記既存のＬＬＣラインの前記サブラインが有効であるかどうかを決定することと
を備える、請求項２１方法。
【請求項２３】
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちの有効なサブラインに対応すると決定したことに応答して、前記有効なサブラインからのデータを前記システムキャッシュに返すことをさらに備える、請求項２１に記載の方法。
【請求項２４】
前記検索された１つまたは複数のブロックからの前記データを前記ＬＬＣの前記複数のＬＬＣラインのうちの前記ＬＬＣライン内の前記複数のサブラインのうちの前記サブラインに記憶することは、
前記長さ値に基づいて、前記検索された１つまたは複数のブロックからの前記データが圧縮されたかどうかを決定することと、
前記検索された１つまたは複数のブロックからの前記データが圧縮されていないと決定したことに応答して、前記検索された１つまたは複数のブロックからの前記データを前記ＬＬＣの前記複数のＬＬＣラインのうちの前記ＬＬＣライン内の前記複数のサブラインのうちの前記サブラインに記憶することと、
前記検索された１つまたは複数のブロックからの前記データが圧縮されたと決定したことに応答して、
前記検索された１つまたは複数のブロックからの前記データを復元することと、
前記復元されたデータを前記ＬＬＣの前記複数のＬＬＣラインのうちの前記ＬＬＣライン内の前記複数のサブラインのうちの前記サブラインに記憶することと
を備える、請求項２１に記載の方法。
【請求項２５】
前記検索された１つまたは複数のブロックからの前記データを前記ＬＬＣの前記複数のＬＬＣラインのうちの前記ＬＬＣライン内の前記複数のサブラインのうちの前記サブラインに記憶するより前に、
前記複数のＬＬＣラインのうちのＬＬＣラインをエビクションＬＬＣラインとして選択することと、
前記エビクションＬＬＣラインの前記複数のサブラインからのデータを前記システムメモリに記憶することと、
前記検索された１つまたは複数のブロックからの前記データを前記エビクションＬＬＣライン内の前記複数のサブラインのうちのサブラインに記憶することと
をさらに備える、請求項２１に記載の方法。
【請求項２６】
前記エビクションＬＬＣラインの前記複数のサブラインからの前記データを前記システムメモリに記憶することは、
前記エビクションＬＬＣラインの前記複数のサブラインの各対応するサブラインのためのオフセット値と長さ値とを各々が含んでいる複数のマスタテーブルエントリを読み取ることと、
変更されたデータを含んでいる前記エビクションＬＬＣラインの前記複数のサブラインの各サブラインについて、
前記サブラインからのデータを圧縮することと、
前記サブラインからの前記圧縮されたデータに基づいて、前記サブラインのための更新された長さ値を生成することと、
前記サブラインのための前記更新された長さ値が前記サブラインのための前記長さ値とは異なるかどうかを決定することと、
前記サブラインのための前記更新された長さ値が前記サブラインのための前記長さ値とは異ならないと決定したことに応答して、前記サブラインのための前記オフセット値と前記長さ値とに基づいて、前記サブラインのための前記圧縮されたデータを前記システムメモリの１つまたは複数のブロックに書き込むことと、
前記サブラインのための前記更新された長さ値が前記サブラインのための前記長さ値とは異なると決定したことに応答して、
前記サブラインのための更新されたオフセット値を生成することと、
前記サブラインのための前記更新されたオフセット値と前記更新された長さ値とに基づいて、前記サブラインのための前記圧縮されたデータを前記システムメモリの１つまたは複数のブロックに書き込むことと、
前記更新されたオフセット値と前記更新された長さ値とで前記サブラインのための前記マスタテーブルエントリを更新することと
を備える、請求項２５に記載の方法。
【請求項２７】
前記サブラインのための前記更新されたオフセット値を生成することは、前記圧縮されたデータが、２つ以上のサブラインに対応する前記システムメモリのメモリサブライン領域にまたがることを防ぐことと、前記システムメモリの前記メモリサブライン領域内で、前記圧縮されたデータを整合させることと、前記複数のサブラインのための前記圧縮されたデータをグループ化することとを備える１つまたは複数の割振りルールに基づく、請求項２６に記載の方法。
【請求項２８】
前記マスタテーブル中の前記マスタテーブルエントリを読み取るより前に、前記メモリアドレスがマスタテーブル（ＭＴ）キャッシュの複数のＭＴキャッシュエントリのうちのＭＴキャッシュエントリに対応するかどうかを決定することと、各ＭＴキャッシュエントリが、前に読み取られたマスタテーブルエントリを記憶するように構成された、
前記メモリアドレスが前記ＭＴキャッシュの前記複数ＭＴキャッシュエントリのうちのＭＴキャッシュエントリに対応しないと決定したことに応答して、
前記マスタテーブル中の前記マスタテーブルエントリを読み取ることと、
前記マスタテーブルエントリを前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちのＭＴキャッシュエントリに書き込むことと、
前記メモリアドレスが前記ＭＴキャッシュの前記複数ＭＴキャッシュエントリのうちのＭＴキャッシュエントリに対応すると決定したことに応答して、前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちの前記ＭＴキャッシュエントリを読み取ることと
をさらに備える、請求項２１に記載の方法。
【請求項２９】
前記マスタテーブルエントリを前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちの前記ＭＴキャッシュエントリに書き込むより前に、
前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちの現在のＭＴキャッシュエントリがエビクトされるべきであるかどうかを決定することと、
前記現在のＭＴキャッシュエントリがエビクトされるべきであると決定したことに応答して、
前記現在のＭＴキャッシュエントリが更新されたかどうかを決定することと、
前記現在のＭＴキャッシュエントリが更新されたと決定したことに応答して、前記現在のＭＴキャッシュエントリのコンテンツを前記マスタテーブルに書き込むことと
をさらに備える、請求項２８に記載の方法。
【請求項３０】
前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣラインの前記複数のサブラインのうちの１つまたは複数の残りのサブラインのための１つまたは複数のオフセット値と１つまたは複数の長さ値とを含んでいる１つまたは複数のマスタテーブルエントリを読み取ることと、
前記１つまたは複数のオフセット値と前記１つまたは複数の長さ値とに基づいて、前記システムメモリから１つまたは複数のブロックを検索することと、
前記検索された１つまたは複数のブロックからの前記データを前記ＬＬＣの前記複数のＬＬＣラインのうちの前記ＬＬＣライン内の前記複数のサブラインのうちの前記１つまたは複数の残りのサブラインに記憶することと
をさらに備える、請求項２１に記載の方法。
【請求項３１】
メモリ書込み動作のためのメモリ帯域幅圧縮を行うための方法であって、
システムキャッシュから圧縮メモリコントローラ（ＣＭＣ）によって、書込みデータとメモリアドレスとを備えるメモリ書込み要求を受信することと、
前記メモリアドレスがラストレベルキャッシュ（ＬＬＣ）の複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちのサブラインに対応するかどうかを決定することと、
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちのサブラインに対応しないと決定したことに応答して、
前記ＬＬＣの前記複数のＬＬＣライン内のＬＬＣラインをエビクションＬＬＣラインとして選択することと、
変更されたデータを含んでいる前記エビクションＬＬＣラインの前記複数のサブラインの各サブラインについて、
前記サブラインからのデータを圧縮することと、
前記サブラインからの前記圧縮されたデータに基づいて、前記サブラインのための更新されたオフセット値と更新された長さ値とを生成することと、
前記サブラインのための前記更新されたオフセット値と前記更新された長さ値とに基づいて、前記サブラインのための前記圧縮されたデータをシステムメモリの１つまたは複数のブロックに記憶することと、
前記更新されたオフセット値と前記更新された長さ値とをマスタテーブル中の前記サブラインのためのマスタテーブルエントリに記憶することと、
前記書込みデータを前記エビクションＬＬＣラインの前記複数のサブラインのうちのサブラインに記憶することと
を備える、方法。
【請求項３２】
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちのサブラインに対応すると決定したことに応答して、前記書込みデータを前記ＬＬＣラインの前記サブラインに記憶することをさらに備える、請求項３１に記載の方法。
【請求項３３】
前記サブラインのための前記更新されたオフセット値を生成することは、前記圧縮されたデータが、２つ以上のサブラインに対応する前記システムメモリのメモリサブライン領域にまたがることを防ぐことと、前記システムメモリの前記メモリサブライン領域内で、前記圧縮されたデータを整合させることと、前記複数のサブラインのための前記圧縮されたデータをグループ化することとを備える１つまたは複数の割振りルールに基づく、請求項３１に記載の方法。
【請求項３４】
前記サブラインからの前記圧縮されたデータに基づいて、前記サブラインのための前記更新されたオフセット値と前記更新された長さ値とを生成することは、
前記圧縮されたデータに基づいて、前記サブラインのための前記更新された長さ値を生成することと、
前記サブラインのためのオフセット値と長さ値とを読み取ることと、
前記サブラインのための前記更新された長さ値が前記サブラインのための前記長さ値とは異なるかどうかを決定することと、
前記サブラインのための前記更新された長さ値が前記サブラインのための前記長さ値とは異なると決定したことに応答して、前記圧縮されたデータに基づいて、前記更新されたオフセット値を生成することと、
前記サブラインのための前記更新された長さ値が前記サブラインのための前記長さ値とは異ならないと決定したことに応答して、前記オフセット値を前記更新されたオフセット値として使用することと
を備える、請求項３１に記載の方法。
【請求項３５】
前記更新されたオフセット値と前記更新された長さ値とを前記マスタテーブル中の前記サブラインのための前記マスタテーブルエントリに記憶するより前に、前記メモリアドレスがマスタテーブル（ＭＴ）キャッシュの複数のＭＴキャッシュエントリのうちのＭＴキャッシュエントリに対応するかどうかを決定することと、各ＭＴキャッシュエントリが、前に読み取られたマスタテーブルエントリを記憶するように構成された、
前記メモリアドレスが前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちのＭＴキャッシュエントリに対応しないと決定したことに応答して、
前記更新されたオフセット値と前記更新された長さ値とを前記マスタテーブル中の前記サブラインのための前記マスタテーブルエントリに記憶することと、
前記マスタテーブルエントリを前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちのＭＴキャッシュエントリに書き込むことと、
前記メモリアドレスが前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちのＭＴキャッシュエントリに対応すると決定したことに応答して、前記マスタテーブルエントリで前記ＭＴキャッシュの前記ＭＴキャッシュエントリを更新することと
をさらに備える、請求項３１に記載の方法。
【請求項３６】
前記マスタテーブルエントリを前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちの前記ＭＴキャッシュエントリに書き込むより前に、
前記ＭＴキャッシュの前記複数のＭＴキャッシュエントリのうちの現在のＭＴキャッシュエントリがエビクトされるべきであるかどうかを決定することと、
前記現在のＭＴキャッシュエントリがエビクトされるべきであると決定したことに応答して、
前記現在のＭＴキャッシュエントリが変更されたかどうかを決定することと、
前記現在のＭＴキャッシュエントリが変更されたと決定したことに応答して、前記ＭＴキャッシュエントリのコンテンツを前記マスタテーブルに書き込むことと
をさらに備える、請求項３５に記載の方法。
【請求項３７】
システムキャッシュからメモリアドレスを備えるメモリ読取り要求を受信するための手段と、
前記メモリアドレスがラストレベルキャッシュ（ＬＬＣ）の複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちの有効なサブラインに対応するかどうかを決定するための手段と、
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちの有効なサブラインに対応しないと決定したことに応答して、システムメモリ中のマスタテーブルから前記ＬＬＣラインのためのオフセット値と長さ値とを含んでいるマスタテーブルエントリを読み取るための手段と、
前記メモリアドレスと、前記オフセット値と、前記長さ値とに基づいて、前記システムメモリから１つまたは複数のブロックを検索するための手段と、
前記検索された１つまたは複数のブロックからのデータを前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちのサブラインに記憶するための手段と、
前記検索された１つまたは複数のブロックからの前記データを前記システムキャッシュに返すための手段と
を備える、圧縮メモリコントローラ（ＣＭＣ）。
【請求項３８】
システムキャッシュから書込みデータとメモリアドレスとを備えるメモリ書込み要求を受信するための手段と、
前記メモリアドレスがラストレベルキャッシュ（ＬＬＣ）の複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちのサブラインに対応するかどうかを決定するための手段と、
前記メモリアドレスが前記ＬＬＣの前記複数のＬＬＣラインのうちのＬＬＣライン内の前記複数のサブラインのうちのサブラインに対応しないと決定したことに応答して、前記ＬＬＣの前記複数のＬＬＣライン内のＬＬＣラインをエビクションＬＬＣラインとして選択するための手段と、
変更されたデータを含んでいる前記エビクションＬＬＣラインの前記複数のサブラインの各サブラインからのデータを圧縮するための手段と、
変更されたデータを含んでいる前記エビクションＬＬＣラインの前記複数のサブラインの各サブラインについて、前記サブラインからの前記圧縮されたデータに基づいて、更新されたオフセット値と更新された長さ値とを生成するための手段と、
変更されたデータを含んでいる前記エビクションＬＬＣラインの前記複数のサブラインの各サブラインについて、前記サブラインのための前記更新されたオフセット値と前記更新された長さ値とに基づいて、前記圧縮されたデータをシステムメモリの１つまたは複数のブロックに記憶するための手段と、
変更されたデータを含んでいる前記エビクションＬＬＣラインの前記複数のサブラインの各サブラインについて、前記更新されたオフセット値と前記更新された長さ値とをマスタテーブル中の前記サブラインのためのマスタテーブルエントリに記憶するための手段と、
前記書込みデータを前記エビクションＬＬＣラインの前記複数のサブラインのうちのサブラインに記憶するための手段と
を備える、圧縮メモリコントローラ（ＣＭＣ）。
【発明の詳細な説明】
【技術分野】
【０００１】
優先権出願
[0001]本出願は、その全体が参照により本明細書に組み込まれる、２０１６年３月３１日に出願された、「PROVIDING MEMORY BANDWIDTH COMPRESSION USING MULTIPLE LAST-LEVEL CACHE (LLC) LINES IN A CENTRAL PROCESSING UNIT (CPU)-BASED SYSTEM」と題する米国特許出願第１５／０８６，８１７号の優先権を主張する。
【０００２】
[0002]本開示の技術は、一般に、コンピュータメモリシステムに関し、より詳細には、中央処理ユニット（ＣＰＵ）にメモリへのメモリアクセスインターフェースを与えるためのコンピュータメモリシステム中のメモリコントローラに関する。
【背景技術】
【０００３】
[0003]マイクロプロセッサは、多種多様な適用例（a wide variety of applications）のために計算タスクを実施する。一般的なマイクロプロセッサ適用例は、ソフトウェア命令を実行する１つまたは複数の中央処理ユニット（ＣＰＵ）を含む。ソフトウェア命令は、ＣＰＵに、メモリ中のロケーションからデータをフェッチし、フェッチされたデータを使用して１つまたは複数のＣＰＵ動作を実施し、結果を生成するように命令し得る。その結果は、次いで、メモリに記憶され得る。非限定的な例として、このメモリは、ＣＰＵにとってローカルなキャッシュ、ＣＰＵブロック中のＣＰＵの間の共有ローカルキャッシュ、複数のＣＰＵブロックの間の共有キャッシュ、またはマイクロプロセッサのメインメモリであり得る。
【０００４】
[0004]この点について、図１は、ＣＰＵベースシステム１０２を含む例示的なシステムオンチップ（ＳｏＣ）１００の概略図である。ＣＰＵベースシステム１０２は、この例では複数のＣＰＵブロック１０４（０）〜１０４（Ｎ）を含み、ここにおいて、「Ｎ」は、所望される、ＣＰＵブロック１０４（０）〜１０４（Ｎ）の任意の数に等しい。図１の例では、ＣＰＵブロック１０４（０）〜１０４（Ｎ）の各々は、２つのＣＰＵ１０６（０）、１０６（１）を含んでいる。ＣＰＵブロック１０４（０）〜１０４（Ｎ）は、それぞれ共有レベル２（Ｌ２）キャッシュ１０８（０）〜１０８（Ｎ）をさらに含んでいる。また、システムキャッシュ１１０（たとえば、レベル３（Ｌ３）キャッシュ）が、ＣＰＵブロック１０４（０）〜１０４（Ｎ）のいずれかによって使用されるか、またはそれらの各々の間で共有される、キャッシュされたデータを記憶するために設けられる。ＣＰＵブロック１０４（０）〜１０４（Ｎ）の各々がシステムキャッシュ１１０ならびに他の共有リソースにアクセスすることを可能にするために、内部システムバス１１２が設けられる。内部システムバス１１２を通してＣＰＵブロック１０４（０）〜１０４（Ｎ）によってアクセスされる他の共有リソースは、メイン外部メモリ（たとえば、非限定的な例として、ダブルレートダイナミックランダムアクセスメモリ（ＤＲＡＭ）（ＤＤＲ））にアクセスするためのメモリコントローラ１１４、周辺機器１１６、他のストレージ１１８、エクスプレス周辺構成要素相互接続（ＰＣＩ）（ＰＣＩ−ｅ）インターフェース１２０、ダイレクトメモリアクセス（ＤＭＡ）コントローラ１２２、および／または統合メモリコントローラ（ＩＭＣ）１２４を含み得る。
【０００５】
[0005]図１中のＣＰＵベースシステム１０２中で実行するＣＰＵベースアプリケーションが複雑さおよび性能を増すにつれて、メモリ帯域幅に対する制限がＣＰＵベースシステム１０２に制約を課し得る。外部メモリへのアクセスがメモリ帯域幅限界に達した場合、ＣＰＵベースシステム１０２のメモリコントローラ１１４は、メモリアクセス要求をキューイングすることを強制され得る。メモリアクセス要求のそのようなキューイングはメモリアクセスのレイテンシを増加させ得、これは、ＣＰＵベースシステム１０２の性能を低下させ得る。
【０００６】
[0006]メモリ帯域幅節約は、所与のメモリアクセスよって消費される帯域幅を潜在的に低減するためのメモリ帯域幅圧縮方式を採用することによって実現され得る。しかしながら、ＣＰＵベースシステム１０２のシステムメモリの基礎をなす（underlying）メモリアーキテクチャは、システムメモリに対する読取りおよび書込みを、（本明細書では「メモリ読取り／書込みグラニュラリティ」と呼ばれる）指定された最小サイズを有するメモリグラニュール（granule）に制限し得る。その結果、従来のメモリ帯域幅圧縮方式は、「ビン」または圧縮されたブロックのサイズを、メモリ帯域幅圧縮方式を使用するシステムメモリのメモリ読取り／書込みグラニュラリティと同じサイズに制限する。したがって、たとえば、６４バイトのメモリ読取り／書込みグラニュラリティと１２８バイトのメモリラインサイズとを有するメモリシステムは、各メモリラインについて２つの圧縮メモリサイズ、すなわち、６４バイト（すなわち、１つのビン）または１２８バイト（すなわち、２つのビン）のみを与え得る。
【０００７】
[0007]したがって、より大きい数のビンを効果的に与え得るメモリ帯域幅圧縮機構を提供することが望ましい。
【発明の概要】
【０００８】
[0008]本明細書で開示される態様は、中央処理ユニット（ＣＰＵ）ベースシステムにおいて複数の（multiple）ラストレベルキャッシュ（ＬＬＣ：last-level cache）ラインを使用してメモリ帯域幅圧縮を行うことを含む。一態様では、圧縮メモリコントローラ（ＣＭＣ：compressed memory controller）が、特定のメモリ読取り／書込みグラニュラリティに制限されるメモリで達成可能なライン圧縮比を改善することによってメモリ帯域幅要件を低減するように構成される。ＣＭＣは、特定のシステムキャッシュラインサイズ（たとえば、１２８バイト）を有するシステムキャッシュに通信可能に結合される。いくつかの態様では、システムキャッシュは、非限定的な例として、レベル２（Ｌ２）キャッシュまたはレベル３（Ｌ３）キャッシュを備え得る。ＣＭＣは、複数のＬＬＣラインを備えるＬＬＣにさらに結合され、その各々は、システムキャッシュラインサイズと各々同じサイズである複数のサブラインを与える。各ＬＬＣラインは圧縮されていないデータを記憶し、システムキャッシュラインに対応するＬＬＣラインの１つまたは複数のサブラインは、独立して、有効とマークされ得る。
【０００９】
[0009]単一のＬＬＣライン内に記憶された（１つまたは複数の）システムキャッシュラインのコンテンツは、圧縮され、ＬＬＣラインに対応するメモリサブライン領域内でシステムメモリに記憶される（are compressed and stored in system memory within the memory sub-line region corresponding to the LLC line）。マスタテーブル（および随意に、マスタテーブル（ＭＴ）キャッシュ）が、（たとえば、各ＬＬＣライン内の各サブラインのためのオフセット値と長さ値とを記憶することによって）所与のＬＬＣラインに対応する圧縮されたデータがシステムメモリにどのように記憶されるかを示す情報を記憶するために使用される。１つまたは複数のシステムキャッシュラインを一緒に圧縮することと、複数の圧縮されていないシステムラインに通常割り振られるシステムメモリ中の空間に、圧縮されたデータを記憶することとによって、ＬＬＣとマスタテーブルとによって与えられる帯域幅圧縮機構は、ビンサイズがシステムメモリのメモリグラニュールサイズよりも小さくなることを可能にする。ＣＭＣは、あるサブラインのための圧縮されたデータを、同じＬＬＣライン内の別のサブラインのための圧縮されたデータを検索するときに効果的にプリフェッチすることによって、メモリ帯域幅を改善し得る。ＬＬＣからの複数のサブラインを組み合わせて読み取りおよび／または書き込むことによって、ＣＭＣは、さもなければメモリ読取り／書込みグラニュラリティにより浪費されるであろうメモリアクセス帯域幅を利用することが可能になり得る。
【００１０】
[0010]別の態様では、ＣＭＣが提供される。ＣＭＣは、システムバスを介してシステムメモリとシステムキャッシュとにアクセスするように構成されたメモリインターフェースを備える。ＣＭＣは、複数のＬＬＣラインを備えるＬＬＣに通信可能に結合され、その各々は、システムキャッシュの複数のシステムキャッシュラインに対応する複数のサブラインを記憶するようにサイズ決定される（sized）。ＣＭＣは、システムキャッシュからメモリアドレスを備えるメモリ読取り要求を受信するように構成される。ＣＭＣは、メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちの有効なサブラインに対応するかどうかを決定するようにさらに構成される。ＣＭＣはまた、メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちの有効なサブラインに対応しないと決定したことに応答して、システムメモリ中のマスタテーブルからＬＬＣラインのためのオフセット値と長さ値とを含んでいるマスタテーブルエントリを読み取るように構成される。ＣＭＣは、メモリアドレスと、オフセット値と、長さ値とに基づいて、システムメモリから１つまたは複数のブロックを検索するようにさらに構成される。ＣＭＣは、検索された１つまたは複数のブロックからのデータをＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちのサブラインに記憶するようにさらに構成される。ＣＭＣはまた、検索された１つまたは複数のブロックからのデータをシステムキャッシュに返すように構成される。
【００１１】
[0011]別の態様では、ＣＭＣが提供される。ＣＭＣは、システムバスを介してシステムメモリとシステムキャッシュとにアクセスするように構成されたメモリインターフェースを備える。ＣＭＣは、複数のＬＬＣラインを備えるＬＬＣに通信可能に結合され、複数のＬＬＣラインの各々は、システムキャッシュの隣接する複数のシステムキャッシュラインに対応する複数のサブラインを記憶するようにサイズ決定される。ＣＭＣは、システムキャッシュから書込みデータとメモリアドレスとを備えるメモリ書込み要求を受信するように構成される。ＣＭＣは、メモリアドレスがＬＬＣの複数のＬＬＣライン内のＬＬＣラインの複数のサブラインのうちのサブラインに対応するかどうかを決定するようにさらに構成される。ＣＭＣはまた、メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちのサブラインに対応しないと決定したことに応答して、ＬＬＣの複数のＬＬＣライン内のＬＬＣラインをエビクション（eviction）ＬＬＣラインとして選択するように構成される。ＣＭＣは、変更された（modified）データを含んでいるエビクションＬＬＣラインの複数のサブラインの各サブラインについて、サブラインからのデータを圧縮するようにさらに構成される。ＣＭＣは、サブラインからの圧縮されたデータに基づいて、サブラインのための更新されたオフセット値と更新された長さ値とを生成するようにさらに構成される。ＣＭＣはまた、サブラインのための更新されたオフセット値と更新された長さ値とに基づいて、サブラインのための圧縮されたデータをシステムメモリの１つまたは複数のブロックに記憶するように構成される。ＣＭＣは、更新されたオフセット値と更新された長さ値とをマスタテーブル中のサブラインのためのマスタテーブルエントリに記憶するようにさらに構成される。ＣＭＣは、書込みデータをエビクションＬＬＣラインの複数のサブラインのうちのサブラインに記憶するようにさらに構成される。
【００１２】
[0012]別の態様では、メモリ読取り動作のためのメモリ帯域幅圧縮を行うための方法が提供される。本方法は、システムキャッシュからＣＭＣによって、メモリアドレスを備えるメモリ読取り要求を受信することを備える。本方法は、メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちの有効なサブラインに対応するかどうかを決定することをさらに備える。本方法は、メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちの有効なサブラインに対応しないと決定したことに応答して、システムメモリ中のマスタテーブルからＬＬＣラインのためのオフセット値と長さ値とを含んでいるマスタテーブルエントリを読み取ることをも備える。本方法は、メモリアドレスと、オフセット値と、長さ値とに基づいて、システムメモリから１つまたは複数のブロックを検索することをさらに備える。本方法は、検索された１つまたは複数のブロックからのデータをＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちのサブラインに記憶することをさらに備える。本方法は、検索された１つまたは複数のブロックからのデータをシステムキャッシュに返すことをも備える。
【００１３】
[0013]別の態様では、メモリ書込み動作のためのメモリ帯域幅圧縮を行うための方法が提供される。本方法は、システムキャッシュからＣＭＣによって、書込みデータとメモリアドレスとを備えるメモリ書込み要求を受信することを備える。本方法は、メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちのサブラインに対応するかどうかを決定することをさらに備える。本方法は、メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちのサブラインに対応しないと決定したことに応答して、ＬＬＣの複数のＬＬＣライン内のＬＬＣラインをエビクションＬＬＣラインとして選択することをも備える。本方法は、変更されたデータを含んでいるエビクションＬＬＣラインの複数のサブラインの各サブラインについて、サブラインからのデータを圧縮することをさらに備える。本方法は、サブラインからの圧縮されたデータに基づいて、サブラインのための更新されたオフセット値と更新された長さ値とを生成することをさらに備える。本方法は、サブラインのための更新されたオフセット値と更新された長さ値とに基づいて、サブラインのための圧縮されたデータをシステムメモリの１つまたは複数のブロックに記憶することをも備える。本方法は、更新されたオフセット値と更新された長さ値とをマスタテーブル中のサブラインのためのマスタテーブルエントリに記憶することをさらに備える。本方法は、書込みデータをエビクションＬＬＣラインの複数のサブラインのうちのサブラインに記憶することをさらに備える。
【００１４】
[0014]別の態様では、ＣＭＣが提供される。ＣＭＣは、システムキャッシュからメモリアドレスを備えるメモリ読取り要求を受信するための手段を備える。ＣＭＣは、メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちの有効なサブラインに対応するかどうかを決定するための手段をさらに備える。ＣＭＣは、メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちの有効なサブラインに対応しないと決定したことに応答して、システムメモリ中のマスタテーブルからＬＬＣラインのためのオフセット値と長さ値とを含んでいるマスタテーブルエントリを読み取るための手段をも備える。ＣＭＣは、メモリアドレスと、オフセット値と、長さ値とに基づいて、システムメモリから１つまたは複数のブロックを検索するための手段をさらに備える。ＣＭＣは、検索された１つまたは複数のブロックからのデータをＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちのサブラインに記憶するための手段をさらに備える。ＣＭＣは、検索された１つまたは複数のブロックからのデータをシステムキャッシュに返すための手段をも備える。
【００１５】
[0015]別の態様では、ＣＭＣが提供される。ＣＭＣは、システムキャッシュから書込みデータとメモリアドレスとを備えるメモリ書込み要求を受信するための手段を備える。ＣＭＣは、メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちのサブラインに対応するかどうかを決定するための手段をさらに備える。ＣＭＣは、メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちのサブラインに対応しないと決定したことに応答して、ＬＬＣの複数のＬＬＣライン内のＬＬＣラインをエビクションＬＬＣラインとして選択するための手段をも備える。ＣＭＣは、変更されたデータを含んでいるエビクションＬＬＣラインの複数のサブラインの各サブラインからのデータを圧縮するための手段をさらに（additionally）備える。ＣＭＣは、変更されたデータを含んでいるエビクションＬＬＣラインの複数のサブラインの各サブラインについて、サブラインからの圧縮されたデータに基づいて、更新されたオフセット値と更新された長さ値とを生成するための手段をさらに備える。ＣＭＣは、変更されたデータを含んでいるエビクションＬＬＣラインの複数のサブラインの各サブラインについて、サブラインのための更新されたオフセット値と更新された長さ値とに基づいて、圧縮されたデータをシステムメモリの１つまたは複数のブロックに記憶するための手段をも備える。ＣＭＣは、変更されたデータを含んでいるエビクションＬＬＣラインの複数のサブラインの各サブラインについて、更新されたオフセット値と更新された長さ値とをマスタテーブル中のサブラインのためのマスタテーブルエントリに記憶するための手段をさらに備える。ＣＭＣは、書込みデータをエビクションＬＬＣラインの複数のサブラインのうちのサブラインに記憶するための手段をさらに備える。
【図面の簡単な説明】
【００１６】
【図１】[0016]中央処理ユニット（ＣＰＵ）ベースシステムを含む例示的なシステムオンチップ（ＳｏＣ）の概略図。
【図２】[0017]複数のＣＰＵと、メモリ帯域幅圧縮を行うように構成された圧縮メモリコントローラ（ＣＭＣ）とを有する例示的なＣＰＵベースシステムを含むＳｏＣの概略図。
【図３】[0018]ＣＭＣが、さらに、メモリ帯域幅圧縮を行うために採用され得る随意の内部メモリに通信可能に結合された、図２のＣＭＣのより詳細な概略図。
【図４】[0019]メモリ帯域幅圧縮を行うための、図２および図３のＣＭＣによって実装され得る例示的なメモリ帯域幅圧縮機構を示す図。
【図５】[0020]システムメモリに記憶されるべき圧縮されたデータのためのオフセット値を生成するための、図２のＣＭＣによって適用され得る割振りルールを示すブロック図。
【図６Ａ】[0021]メモリ帯域幅圧縮を使用して図２のＣＭＣによってメモリ読取り動作を実施するための例示的な動作を示すフローチャート。
【図６Ｂ】メモリ帯域幅圧縮を使用して図２のＣＭＣによってメモリ読取り動作を実施するための例示的な動作を示すフローチャート。
【図６Ｃ】メモリ帯域幅圧縮を使用して図２のＣＭＣによってメモリ読取り動作を実施するための例示的な動作を示すフローチャート。
【図６Ｄ】メモリ帯域幅圧縮を使用して図２のＣＭＣによってメモリ読取り動作を実施するための例示的な動作を示すフローチャート。
【図６Ｅ】メモリ帯域幅圧縮を使用して図２のＣＭＣによってメモリ読取り動作を実施するための例示的な動作を示すフローチャート。
【図７】[0022]メモリ読取り動作中に、図２のＣＭＣによって、エビクト（evict）されたラストレベルキャッシュ（ＬＬＣ）ラインのサブラインをシステムメモリに記憶するための例示的な動作を示すフローチャート。
【図８Ａ】[0023]メモリ帯域幅圧縮を使用して図２のＣＭＣによってメモリ書込み動作を実施するための例示的な動作を示すフローチャート。
【図８Ｂ】メモリ帯域幅圧縮を使用して図２のＣＭＣによってメモリ書込み動作を実施するための例示的な動作を示すフローチャート。
【図８Ｃ】メモリ帯域幅圧縮を使用して図２のＣＭＣによってメモリ書込み動作を実施するための例示的な動作を示すフローチャート。
【図８Ｄ】メモリ帯域幅圧縮を使用して図２のＣＭＣによってメモリ書込み動作を実施するための例示的な動作を示すフローチャート。
【図９】[0024]図２のＣＭＣを採用する図１のＳｏＣを含み得る、例示的なプロセッサベースシステムのブロック図。
【発明を実施するための形態】
【００１７】
[0025]次に図面を参照しながら、本開示のいくつかの例示的な態様が説明される。「例示的」という単語は、本明細書では「例、事例、または例示の働きをすること」を意味するために使用される。「例示的」として本明細書で説明されるいかなる態様も、必ずしも他の態様よりも好適または有利であると解釈されるべきであるとは限らない。
【００１８】
[0026]本明細書で開示される態様は、中央処理ユニット（ＣＰＵ）ベースシステムにおいて複数のラストレベルキャッシュ（ＬＬＣ）ラインを使用してメモリ帯域幅圧縮を行うことを含む。いくつかの態様では、圧縮メモリコントローラ（ＣＭＣ）が、メモリ読取り要求および／またはメモリ書込み要求のためのメモリ帯域幅圧縮を行うように構成される。この点について、図２は、図１中のＣＰＵベースシステム１０２と同様の複数のＣＰＵブロック１０４（０）〜１０４（Ｎ）を有するＣＰＵベースシステム２０２を含む、システムオンチップ（ＳｏＣ）２００の概略図である。図２中のＣＰＵベースシステム２０２は、図１中のＣＰＵベースシステム１０２と共通のいくつかの構成要素を含み、それらは、図１と図２との間で共通の要素番号によって示される。簡潔のために、これらの要素は再び説明されないだろう。しかしながら、図２中のＣＰＵベースシステム２０２では、ＣＭＣ２０４が設けられる。ＣＭＣ２０４は、システムメモリ２０６へのアクセスを制御する。システムメモリ２０６は、非限定的な例として、（以下で「ＤＲＡＭ２０８（０）〜２０８（Ｒ）」と呼ばれる）１つまたは複数のダブルデータレート（ＤＤＲ）ダイナミックランダムアクセスメモリ（ＤＲＡＭ）２０８（０）〜２０８（Ｒ）を備え得る。この例におけるＣＭＣ２０４は、本明細書において以下で開示される態様によるメモリ帯域幅圧縮を採用する。図１のＣＰＵベースシステム１０２のメモリコントローラ１１４と同様に、図２中のＣＰＵベースシステム２０２中のＣＭＣ２０４は、内部システムバス１１２を通してＣＰＵブロック１０４（０）〜１０４（Ｎ）によって共有される。
【００１９】
[0027]説明のために、図２中のＣＭＣ２０４の例示的な内部構成要素のより詳細な概略図が、図３に与えられる。この例では、ＣＭＣ２０４は、図２中のＣＰＵブロック１０４（０）〜１０４（Ｎ）を含んでいる半導体ダイ３０２（０）、３０２（１）とは別個の半導体ダイ３００上に設けられる。代替的に、いくつかの態様では、ＣＭＣ２０４は、ＣＰＵブロック１０４（０）〜１０４（Ｎ）と共通の半導体ダイ（図示せず）中に含まれ得る。ダイ構成にかかわらず、ＣＭＣ２０４は、ＣＰＵブロック１０４（０）〜１０４（Ｎ）が、内部システムバス１１２を介してＣＭＣ２０４へのメモリアクセス要求を行い、ＣＭＣ２０４を通してメモリからデータを受信し得るように設けられる。
【００２０】
[0028]引き続き図３を参照すると、ＣＭＣ２０４は、ＤＲＡＭ２０８（０）〜２０８（Ｒ）を備えるものとして図２および図３に示されているシステムメモリ２０６へのメモリアクセスのための動作を制御する。ＣＭＣ２０４は、メモリアクセス要求（図示せず）を処理する（service）ために使用される複数のメモリインターフェース（ＭＥＭ  Ｉ／Ｆ）３０４（０）〜３０４（Ｐ）（たとえば、ＤＤＲ  ＤＲＡＭインターフェース）を含む。この点について、この例におけるＣＭＣ２０４は圧縮コントローラ３０６を含む。圧縮コントローラ３０６は、ＣＰＵブロック１０４（０）〜１０４（Ｎ）からのメモリアクセス要求に応答して、システムメモリ２０６に記憶されたデータの圧縮と、システムメモリ２０６から検索されたデータの復元とを制御する。圧縮コントローラ３０６はまた、内部システムバス１１２を介してＣＰＵブロック１０４（０）〜１０４（Ｎ）に与えられる情報の帯域幅圧縮を実施するように構成され得る。
【００２１】
[0029]以下でより詳細に説明されるように、圧縮コントローラ３０６は、メモリ帯域幅圧縮を行うために、任意の数の圧縮技法およびアルゴリズムを実施することができる。そのような圧縮技法およびアルゴリズムを実施するために圧縮コントローラ３０６によって必要とされるデータ構造および他の情報のためにローカルメモリ３０８が設けられる。この点について、ローカルメモリ３０８は、スタティックランダムアクセスメモリ（ＳＲＡＭ）３１０の形態で設けられる。ローカルメモリ３０８は、圧縮コントローラ３０６が圧縮技法およびアルゴリズムを実施するために必要とされ得るデータ構造および他のデータストレージのために使用されるのに十分なサイズのものである。ローカルメモリ３０８はまた、ＣＭＣ２０４内での内部使用のための追加のキャッシュメモリを与えるために、レベル４（Ｌ４）キャッシュなどのキャッシュを含んでいるように区分され得る。したがって、また、Ｌ４キャッシュへのアクセスを与えるためにＣＭＣ２０４中にＬ４コントローラ３１２が設けられ得る。拡張圧縮技法およびアルゴリズムはより大きい内部メモリを必要とし得る。たとえば、ローカルメモリ３０８は１２８キロバイト（ｋＢ）のメモリを与え得る。
【００２２】
[0030]さらに、図３に示されているように、随意の追加の内部メモリ３１４もＣＭＣ２０４のために設けられ得る。追加の内部メモリ３１４は、一例として、ＤＲＡＭとして設けられ得る。追加の内部メモリ３１４は、ＣＰＵベースシステム２０２のメモリ帯域幅圧縮を増加させるために、ＣＭＣ２０４がメモリ帯域幅圧縮および復元機構を与えるための、追加の、またはローカルメモリ３０８中よりも大きい量の、データ構造および他のデータの記憶を可能にする（facilitate）ことができる。圧縮の際に使用するための追加の内部メモリ３１４へのメモリアクセスを制御するためにＣＭＣ２０４中に内部メモリコントローラ３１６が設けられる。内部メモリコントローラ３１６は、ＣＰＵブロック１０４（０）〜１０４（Ｎ）にとってアクセス可能または閲覧可能ではない。
【００２３】
[0031]上述のように、図３中のＣＭＣ２０４は、いくつかの態様では、０ライン圧縮を含むメモリ帯域幅圧縮を実施し得る。ローカルメモリ３０８は、そのような圧縮のために使用されるより大きいデータ構造を記憶するために使用され得る。以下でより詳細に説明されるように、メモリ帯域幅圧縮は、メモリアクセスレイテンシを低減し、メモリアクセスレイテンシへの影響を最小限に抑えながら、より多くのＣＰＵ１０６（０）、１０６（１）またはそれらのそれぞれのスレッドが同数のメモリチャネルにアクセスすることを可能にし得る。いくつかの態様では、メモリチャネルの数は、そのような圧縮がＣＭＣ２０４によって実施されなかった場合のメモリチャネルのより大きい数と比較して、同様のレイテンシ結果を達成しながら低減され得、これは、システムレベル電力消費の低減を生じ得る。
【００２４】
[0032]ローカルメモリ３０８と追加の内部メモリ３１４とを含む、図３中のＣＭＣ２０４においてメモリ帯域幅圧縮のために設けられるリソースの各々は、リソースおよび面積、電力消費、メモリ容量圧縮による増加されたメモリ容量、ならびにメモリ帯域幅圧縮による増加された性能の間の所望のバランスを達成するために、個々にまたは互いと併せて使用され得る。メモリ帯域幅圧縮は、必要に応じて、有効または無効にされ得る。さらに、ＣＭＣ２０４が使用するための上記で説明されたリソースは、メモリ容量および／または帯域幅圧縮効率、電力消費、ならびに性能の間の所望のトレードオフを達成するために、有効または無効にされ得る。次に、ＣＭＣ２０４にとって利用可能なこれらのリソースを使用する例示的なメモリ帯域幅圧縮技法が説明される。
【００２５】
[0033]この点について、図４は、メモリ帯域幅圧縮を行うために図２および図３のＣＭＣ２０４によって実装され得る例示的なメモリ帯域幅圧縮機構４００を示す。メモリ帯域幅圧縮機構４００では、システムメモリ２０６は、圧縮されたデータを記憶するための複数のメモリグラニュール４０２（０）〜４０２（Ｘ）を含む。メモリグラニュール４０２（０）〜４０２（Ｘ）の各々のサイズは、システムメモリ２０６のメモリ読取り／書込みグラニュラリティ（すなわち、メモリ読取り動作においてシステムメモリ２０６から読み取られ得るか、またはメモリ書込み動作においてシステムメモリ２０６に書き込まれ得る、データの最も小さい量）を表す。たとえば、いくつかの例示的なメモリアーキテクチャでは、メモリグラニュール４０２（０）〜４０２（Ｘ）の各々は６４バイトのデータを備え得る。圧縮されたデータは、メモリグラニュール４０２（０）〜４０２（Ｘ）内のブロック４０４（０）〜４０４（Ｅ）、４０６（０）〜４０６（Ｅ）、および４０８（０）〜４０８（Ｅ）に記憶され得る。ブロック４０４（０）〜４０４（Ｅ）、４０６（０）〜４０６（Ｅ）、および４０８（０）〜４０８（Ｅ）の各々は、システムメモリ２０６のメモリ読取り／書込みグラニュラリティよりも小さいサイズを有する。上記の例では、メモリグラニュール４０２（０）〜４０２（Ｘ）の各々は６４バイトのデータを備え、ブロック４０４（０）〜４０４（Ｅ）、４０６（０）〜４０６（Ｅ）、および４０８（０）〜４０８（Ｅ）の各々は３２バイトのデータを備え得る。
【００２６】
[0034]いくつかの態様は、メモリグラニュール４０２（０）〜４０２（Ｘ）の各々がより多いまたはより少ないバイトのデータを備え得ることを規定し（provide）得る（たとえば、非限定的な例として、２５６バイトまたは６４バイト）。同様に、いくつかの態様によれば、メモリグラニュール４０２（０）〜４０２（Ｘ）内のブロック４０４（０）〜４０４（Ｅ）、４０６（０）〜４０６（Ｅ）、４０８（０）〜４０８（Ｅ）は、利用される圧縮機構の能力に応じて、より大きくまたはより小さくなり得る（たとえば、非限定的な例として、１２８バイトまたは１６バイト）。いくつかの態様では、メモリ読取り動作は、メモリグラニュール４０２（０）〜４０２（Ｘ）の各々のサイズよりも少数のバイト（たとえば、ブロック４０４（０）〜４０４（Ｅ）、４０６（０）〜４０６（Ｅ）、４０８（０）〜４０８（Ｅ）のうちの１つ）を読み取るが、依然として、メモリグラニュール４０２（０）〜４０２（Ｘ）のうちの１つと同じ量のメモリ帯域幅を消費し得る。
【００２７】
[0035]メモリ帯域幅圧縮機構４００は、さらに、複数のシステムキャッシュライン４１０（０）〜４１０（Ｖ）を備えるシステムキャッシュ１１０を与える。複数の（the plurality of）システムキャッシュライン４１０（０）〜４１０（Ｖ）の各々は、システムメモリ２０６の複数の（multiple）メモリグラニュール４０２（０）〜４０２（Ｘ）のコンテンツを記憶するようにサイズ決定され得る。たとえば、メモリグラニュール４０２（０）〜４０２（Ｘ）のサイズが６４バイトである態様では、複数のシステムキャッシュライン４１０（０）〜４１０（Ｖ）の各々はサイズが１２８バイトであり得る。
【００２８】
[0036]メモリ帯域幅圧縮を行う（provide）ために、ＣＭＣ２０４は、システムキャッシュ１１０とシステムメモリ２０６との間の、（メモリアドレス４１６からのメモリ読取り要求４１４などの）メモリ読取り動作と（書込みデータ４２０をメモリアドレス４２２に記憶するためのメモリ書込み要求４１８などの）メモリ書込み動作とを変換する（translating）ために使用されるＬＬＣ４１２（たとえば、レベル４（Ｌ４）キャッシュ）に通信可能に結合される。ＬＬＣ４１２は、複数のＬＬＣライン４２４（０）〜４２４（Ｙ）を備える。複数のＬＬＣライン４２４（０）〜４２４（Ｙ）の各々は、ＬＬＣライン４２４（０）のサブライン４２６（０）〜４２６（Ｘ）およびＬＬＣライン４２４（Ｙ）のサブライン４２８（０）〜４２８（Ｘ）など、複数のサブラインからなる。いくつかの態様では、複数のＬＬＣライン４２４（０）〜４２４（Ｙ）は、各々、２つのサブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）を含み得る。いくつかの態様は、複数のＬＬＣライン４２４（０）〜４２４（Ｙ）内のサブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）の数が２のべき乗であることを規定し得る。サブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）の各々のサイズは、複数のシステムキャッシュライン４１０（０）〜４１０（Ｖ）の各々のサイズに対応する。したがって、たとえば、システムキャッシュライン４１０（０）〜４１０（Ｖ）のサイズが１２８バイトである場合、２つのサブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）を含んでいるＬＬＣライン４２４（０）〜４２４（Ｙ）はサイズが２５６バイトである。
【００２９】
[0037]以下でより詳細に説明されるように、ＣＭＣ２０４は、ＬＬＣ４１２からのＬＬＣライン４２４（０）〜４２４（Ｙ）のエビクション時に、ＬＬＣライン４２４（０）〜４２４（Ｙ）の各々のためのデータを圧縮し、システムメモリ２０６に記憶することによって、メモリ帯域幅圧縮を行い得る。ＬＬＣライン４２４（０）〜４２４（Ｙ）の各々は、システムキャッシュ１１０の複数のシステムキャッシュライン４１０（０）〜４１０（Ｖ）に対応するサブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）を含むので、複数のシステムキャッシュライン４１０（０）〜４１０（Ｖ）のためのデータは、圧縮され、システムメモリ２０６に書き込まれ得る。いくつかの態様では、非限定的な例として、複数のシステムキャッシュライン４１０（０）〜４１０（Ｖ）のためのデータは、随意に、同時に圧縮され、システムメモリ２０６に一緒に書き込まれ得、および／または一緒に読み取られ、同時に復元され（decompressed）得る。
【００３０】
[0038]システムメモリ２０６のメモリ読取り／書込みグラニュラリティにより、サブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）のうちの特定の１つのための圧縮されたデータの後続の読取りが、同じＬＬＣライン４２４（０）〜４２４（Ｙ）内の他のサブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）のためのデータをも返し得る。これは、別個のメモリ読取り動作において他のサブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）を読み取るのと同じほど多くの帯域幅を消費することなしに、同じＬＬＣライン４２４（０）〜４２４（Ｙ）内の他のサブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）内のデータの全部または一部のプリフェッチを効果的に行い得る。
【００３１】
[0039]システムメモリ２０６はまた、複数のマスタテーブルエントリ４３２（０）〜４３２（Ｙ）を含むマスタテーブル４３０を含む。マスタテーブルエントリ４３２（０）〜４３２（Ｙ）の各々は、メモリグラニュール４０２（０）〜４０２（Ｘ）と同じサイズである。図４の例では、マスタテーブルエントリ４３２（０）〜４３２（Ｙ）は、圧縮されたデータが、システムメモリ２０６中のブロック４０４（０）〜４０４（Ｅ）、４０６（０）〜４０６（Ｅ）、４０８（０）〜４０８（Ｅ）に記憶される、サブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）の各々のためのオフセット値４３４（０）〜４３４（Ｗ）、４３６（０）〜４３６（Ｗ）と長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）とを記憶する。いくつかの態様におけるオフセット値４３４（０）〜４３４（Ｗ）、４３６（０）〜４３６（Ｗ）と長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）との数は、図４に示された数よりも大きいまたは小さいことがあることを理解されたい。オフセット値４３４（０）〜４３４（Ｗ）、４３６（０）〜４３６（Ｗ）は、特定のサブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）のための圧縮されたデータが、圧縮されたＬＬＣライン４２４（０）〜４２４（Ｙ）に対応するシステムメモリ２０６中のメモリのメモリライン領域の始まりに対してどこに位置するかを決定するためにＣＭＣ２０４によって使用される。長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）は、サブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）のための圧縮されたデータが記憶されるブロック４０４（０）〜４０４（Ｅ）、４０６（０）〜４０６（Ｅ）、４０８（０）〜４０８（Ｅ）の数を決定するためにＣＭＣ２０４によって使用される。オフセット値４３４（０）〜４３４（Ｗ）、４３６（０）〜４３６（Ｗ）および長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）は、一緒に、システムメモリ２０６において、サブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）のための圧縮されたデータに対する（on）メモリ動作のために、ブロック４０４（０）〜４０４（Ｅ）、４０６（０）〜４０６（Ｅ）、４０８（０）〜４０８（Ｅ）のうちのどのおよびいくつのブロックにアクセスすべきかを決定するためにＣＭＣ２０４によって使用され得る。いくつかの態様では、長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）のうちの１つまたは複数は、対応するサブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）が、指定されたパターンを含んでいることを示す符号化を表し得る。非限定的な例として、値０を有する長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）は、対応するサブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）がすべて０を含んでいることを示し得、したがって、ＣＭＣ２０４は、メモリに対する不要な読取りまたは書込みを回避し得る。
【００３２】
[0040]以下でより詳細に説明されるように、ＣＭＣ２０４は、サブラインプリフェッチングの可能性を増加させるために、１つまたは複数の割振りルールを使用してオフセット値４３４（０）〜４３４（Ｗ）、４３６（０）〜４３６（Ｗ）を生成し得る。システムメモリ２０６に記憶するためのデータを圧縮するときに、ＣＭＣ２０４のいくつかの態様は、更新されたオフセット値４４２および／または更新された長さ値４４４を生成し得る。システムメモリ２０６中の書き込まれるべきロケーションにおいてデータがすでに記憶されている場合、ＣＭＣ２０４は、更新された長さ値４４４を長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）のうちの１つと比較することによって、圧縮されたデータをシステムメモリ２０６にどのように記憶すべきかを決定し得る。
【００３３】
[0041]いくつかの態様では、ＣＭＣ２０４は、さらに、マスタテーブル４３０のマスタテーブルエントリ４３２（０）〜４３２（Ｙ）のサブセットをキャッシュするためのマスタテーブル（ＭＴ）キャッシュエントリ４４８（０）〜４４８（Ｚ）を備えるマスタテーブル（ＭＴ）キャッシュ４４６を含み得る。ＭＴキャッシュ４４６を使用して、ＣＭＣ２０４は、システムメモリ２０６中のマスタテーブル４３０を読み取ることによって招かれ（incurred）得るメモリアクセスレイテンシを低減し得る。
【００３４】
[0042]圧縮されたデータを記憶するためのシステムメモリ２０６の効率的な使用を保証するために図４のＣＭＣ２０４によって適用され得る例示的な割振りルールの効果を説明するために、図５が与えられる。ＣＭＣ２０４は、圧縮されたデータのための、オフセット値４３４（０）などのオフセット値を生成するときに（すなわち、圧縮されたデータが、圧縮されたＬＬＣライン４２４（０）に対応するシステムメモリ２０６中のメモリのメモリライン領域内でどこに記憶されるべきであるかを決定するときに）、１つまたは複数の割振りルールを適用し得る。割振りルールを適用することによって、ＣＭＣ２０４は、１つ（１）または複数のメモリ読取り動作で複数のサブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）をプリフェッチする可能性を最大にし得る。いくつかの態様では、１つまたは複数の割振りルールは、サブライン４２６（０）などのサブラインのための更新された圧縮されたデータブロックが、所与のデータ位置およびサイズをもつサブライン４２６（Ｘ）などの別の既存のサブラインのための圧縮されたデータとともに、どこでシステムメモリ２０６に最適に記憶され得るかを示す割振りテーブル（図示せず）を事前生成するために使用され得る。
【００３５】
[0043]いくつかの態様では、１つまたは複数の割振りルールは、圧縮されたデータが、２つ以上の（more than one）サブラインに対応するシステムメモリ２０６のメモリサブライン領域にまたがること（straddling）を防ぐことを含み得る。たとえば、図５では、各々がＬＬＣ４１２のサブライン４２６（０）〜４２６（Ｘ）、４２８（０）〜４２８（Ｘ）と同じサイズである、システムメモリ２０６の２つの（２）隣接メモリサブライン領域５００（０）および５００（１）が、圧縮されたデータ５０２を記憶するために使用され得る。しかしながら、図５に示されている圧縮されたデータ５０２は、それがメモリサブライン領域５００（０）、５００（１）にまたがるように位置決めされ、圧縮されたデータ５０２を検索するためにメモリサブライン領域５００（０）、５００（１）の両方の読取りを必要とするであろう。したがって、要素５０４によって示されるように、圧縮されたデータ５０２の位置決めは、またがることに関する割振りルールに違反するであろう。
【００３６】
[0044]いくつかの態様は、１つまたは複数の割振りルールが、システムメモリ２０６のメモリサブライン領域内で、圧縮されたデータを整合させることを含むことを規定し得る。図５に見られるように、メモリサブライン領域５０６（０）および５０６（１）は圧縮されたデータ５０８を記憶する。この例における圧縮されたデータ５０８は、メモリサブライン領域５０６（０）の始まりと整合される。対照的に、メモリサブライン領域５１０（０）および５１０（１）は、メモリサブライン領域５１０（０）の始まりまたは終わりのいずれとも整合されない圧縮されたデータ５１２を記憶する。したがって、要素５１４によって示されるように、圧縮されたデータ５１２の位置決めは、整合に関する割振りルールに違反するであろう。
【００３７】
[0045]いくつかの態様によれば、１つまたは複数の割振りルールは、複数のサブラインのための圧縮されたデータをグループ化することを含み得る。たとえば、圧縮されたデータの奇数長さブロックは、データをプリフェッチすることが可能である見込みを増加させるために、可能な場合、メモリサブライン領域内で一緒に配置されるべきである。図５では、たとえば、メモリサブライン領域５１６（０）および５１６（１）は、圧縮されたデータ５１８および５２０を記憶する。圧縮されたデータ５１８および５２０は、両方ともメモリサブライン領域５１６（０）内に記憶され、したがって、その両方は、単一のメモリ読取り動作で読み取られることが可能になる。対照的に、メモリサブライン領域５２２（０）および５２２（１）では、圧縮されたデータ５１８および５２０はグループ化されない。その結果、プリフェッチングのための機会が逃され得る。したがって、要素５２４によって示されるように、メモリサブライン領域５２２（０）および５２２（１）内の圧縮されたデータ５１８および５２０の位置決めは、グループ化に関する割振りルールに違反するであろう。
【００３８】
[0046]図６Ａ〜図６Ｅは、メモリ帯域幅圧縮を使用して図４のＣＭＣ２０４によってメモリ読取り動作を実施するための例示的な動作を示すフローチャートである。明快のために、図６Ａ〜図６Ｅについて説明する際に図４の要素が参照される。図６Ａにおいて、動作は、ＣＭＣ２０４が、システムキャッシュ１１０からメモリアドレス４１６を備えるメモリ読取り要求４１４を受信すること（ブロック６００）から始まる。この点について、ＣＭＣ２０４は、本明細書では「システムキャッシュからメモリアドレスを備えるメモリ読取り要求を受信するための手段」と呼ばれることがある。ＣＭＣ２０４は、メモリアドレス４１６がＬＬＣ４１２の複数のＬＬＣライン４２４（０）〜４２４（Ｙ）のうちのＬＬＣライン４２４（０）内の複数のサブライン４２６（０）〜４２６（Ｘ）のうちの有効なサブライン４２６（０）に対応するかどうかを決定する（ブロック６０２）。したがって、ＣＭＣ２０４は、本明細書では「メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちの有効なサブラインに対応するかどうかを決定するための手段」と呼ばれることがある。いくつかの態様では、メモリアドレス４１６が有効なサブライン４２６（０）に対応するかどうかを決定することは、ＣＭＣ２０４が、メモリアドレス４１６が複数のＬＬＣライン４２４（０）〜４２４（Ｙ）内の既存のＬＬＣライン４２４（０）のサブライン４２６（０）に対応するかどうかを決定することと、対応する場合（if so）、既存の（existing）ＬＬＣライン４２４（０）のサブライン４２６（０）が有効であるかどうかを決定することとによって達成され得る。
【００３９】
[0047]いくつかの態様では、ＣＭＣ２０４が、決定ブロック６０２において、メモリアドレス４１６が有効なサブライン４２６（０）に対応すると決定した場合（すなわち、ＬＬＣ４１２上でのキャッシュヒット）、ＣＭＣ２０４は、有効なサブライン４２６（０）からのデータをシステムキャッシュ１１０に返す（ブロック６０４）。（たとえば、メモリアドレス４１６が既存のＬＬＣライン４２４（０）に対応しないか、またはメモリアドレス４１６が対応するサブライン４２６（０）が無効であるので）メモリアドレス４１６が有効なサブライン４２６（０）に対応しないと決定された場合、いくつかの態様におけるＣＭＣ２０４は、次に、ＭＴキャッシュ４４６が使用されているかどうかを決定する（ブロック６０６）。ＭＴキャッシュ４４６が使用されていない場合、ＣＭＣ２０４は、システムメモリ２０６中のマスタテーブル４３０からＬＬＣライン４２４（０）のためのオフセット値４３４（０）と長さ値４３８（０）とを含んでいるマスタテーブルエントリ４３２（０）を読み取る（ブロック６０８）。ＣＭＣ２０４は、したがって、本明細書では「メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちの有効なサブラインに対応しないと決定したことに応答して、システムメモリ中のマスタテーブルからＬＬＣラインのためのオフセット値と長さ値とを含んでいるマスタテーブルエントリを読み取るための手段」と呼ばれることがある。処理は、次いで、図６Ｃ中のブロック６１０において再開する。
【００４０】
[0048]いくつかの態様では、ＣＭＣ２０４が、決定ブロック６０６において、ＭＴキャッシュ４４６が使用されていると決定した場合、ＣＭＣ２０４は、メモリアドレス４１６がＭＴキャッシュ４４６の複数のＭＴキャッシュエントリ４４８（０）〜４４８（Ｚ）のうちのＭＴキャッシュエントリ４４８（０）に対応するかどうかを決定する（ブロック６１２）。対応しない場合（すなわち、ＭＴキャッシュ４４６上でのキャッシュミス）、処理は、図６Ｂのブロック６１４において再開する。しかしながら、ＣＭＣ２０４が、決定ブロック６１２において、メモリアドレス４１６がＭＴキャッシュエントリ４４８（０）に対応すると決定した場合（すなわち、ＭＴキャッシュ４４６上でのキャッシュミス）、処理は、図６Ｂのブロック６１６において続く。
【００４１】
[0049]次に図６Ｂが参照される。いくつかの態様では、図６Ｂに示された動作のうちの１つまたは複数は、並列に実行され得、および／または図６Ｂに示された順序以外の順序で実行され得ることを理解されたい。図６Ｂに見られるように、ＭＴキャッシュ４４６上でのキャッシュミスに応答して、ＣＭＣ２０４は、ＬＬＣライン４２４（０）のためのマスタテーブル４３０中の、マスタテーブルエントリ４３２（０）などのマスタテーブルエントリを読み取る（ブロック６１４）。ＣＭＣ２０４は、ＭＴキャッシュ４４６の現在のＭＴキャッシュエントリ４４８（０）をエビクトすべきかどうかを決定し得る（ブロック６１８）。エビクトすべきでない場合（If not）、処理は、図６Ｂのブロック６２０において再開する。しかしながら、ＣＭＣ２０４が、決定ブロック６１８において、現在のＭＴキャッシュエントリ４４８（０）がエビクトされるべきであると決定した場合、ＣＭＣ２０４は、（たとえば、現在のＭＴキャッシュエントリ４４８（０）のためのダーティビットを検査することによって）現在のＭＴキャッシュエントリ４４８（０）が更新されたかどうかを決定する（ブロック６２２）。現在のＭＴキャッシュエントリ４４８（０）が更新されていない場合、処理は、図６Ｂのブロック６２０において再開する。ＣＭＣ２０４が、決定ブロック６２２において、現在のＭＴキャッシュエントリ４４８（０）が更新されたと決定した場合、ＣＭＣ２０４は、現在のＭＴキャッシュエントリ４４８（０）のコンテンツをマスタテーブル４３０に書き込む（ブロック６２４）。ＣＭＣ２０４は、次いで、図６Ｂのブロック６１４において読み取られたマスタテーブルエントリ４３２（０）をＭＴキャッシュ４４６のＭＴキャッシュエントリ４４８（０）に書き込む（ブロック６２０）。処理は、次いで、図６Ｃのブロック６１０において再開する。ＣＭＣ２０４が、図６Ａの決定ブロック６１２において、メモリアドレス４１６がＭＴキャッシュ４４６の複数のＭＴキャッシュエントリ４４８（０）〜４４８（Ｚ）のうちのＭＴキャッシュエントリ４４８（０）に対応すると決定した場合、ＣＭＣ２０４は、ＭＴキャッシュ４４６のＭＴキャッシュエントリ４４８（０）を読み取る（ブロック６１６）。処理は、次いで、図６Ｃのブロック６１０において再開する。
【００４２】
[0050]次に図６Ｃを参照すると、ＣＭＣ２０４は、次に、メモリアドレス４１６と、オフセット値４３４（０）と、長さ値４３８（０）とに基づいて、システムメモリ２０６から１つまたは複数のブロック４０４（０）〜４０４（Ｅ）を検索する（ブロック６１０）。この点について、ＣＭＣ２０４は、本明細書では「メモリアドレスと、オフセット値と、長さ値とに基づいて、システムメモリから１つまたは複数のブロックを検索するための手段」と呼ばれることがある。いくつかの態様は、ＣＭＣ２０４が、次いで、（たとえば、システムメモリ２０６から読み取られたデータをＬＬＣ４１２に記憶するために）ＬＬＣ４１２からＬＬＣライン４２４（０）をエビクトすべきかどうかを決定すること（ブロック６２６）を規定し得る。ＣＭＣ２０４が、決定ブロック６２６において、ＬＬＣライン４２４（０）をエビクトすべきでないと決定した場合、処理は、図６Ｄのブロック６２８において再開する。しかしながら、ＣＭＣ２０４が、ＬＬＣライン４２４（０）がエビクトされるべきであると決定した場合、ＣＭＣ２０４は、複数のＬＬＣライン４２４（０）〜４２４（Ｙ）のうちのＬＬＣライン４２４（０）をエビクションＬＬＣライン４２４（０）として選択する（ブロック６３０）。ＣＭＣ２０４は、次いで、エビクションＬＬＣライン４２４（０）の複数のサブライン４２６（０）〜４２６（Ｘ）からのデータをシステムメモリ２０６に記憶する（ブロック６３２）。したがって、ＣＭＣ２０４は、本明細書では「検索された１つまたは複数のブロックからのデータをＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちのサブラインに記憶するための手段」と呼ばれることがある。いくつかの態様では、ＣＭＣ２０４は、複数のサブライン４２６（０）〜４２６（Ｘ）からのデータが変更されたと決定したことに応答して、エビクションＬＬＣライン４２４（０）の複数のサブライン４２６（０）〜４２６（Ｘ）からのデータをシステムメモリ２０６に記憶し得る。非限定的な例として、ＣＭＣ２０４は、複数のサブライン４２６（０）〜４２６（Ｘ）に関連する１つまたは複数のダーティインジケータ（図示せず）を調べ得て、そこに記憶されたデータが変更されたかどうかを決定する。処理は、図６Ｄのブロック６２８において続く。
【００４３】
[0051]いくつかの態様では、図６Ｄに示された動作のうちの１つまたは複数は、並列に実行され得、および／または図６Ｄに示された順序以外の順序で実行され得る。図６Ｄに見られるように、ＣＭＣ２０４は、次に、検索された１つまたは複数のブロック４０４（０）〜４０４（Ｅ）からのデータをＬＬＣ４１２の複数のＬＬＣライン４２４（０）〜４２４（Ｙ）のうちのＬＬＣライン４２４（０）内の複数のサブライン４２６（０）〜４２６（Ｘ）のうちのサブライン４２６（０）に記憶する（ブロック６２８）。いくつかの態様では、データを記憶するためのブロック６２８の動作は、ＣＭＣ２０４が、最初に、検索された１つまたは複数のブロック４０４（０）〜４０４（Ｅ）からのデータが圧縮されたかどうかを決定すること（ブロック６３４）を備え得る。圧縮されていない場合（If not）、ＣＭＣ２０４は、検索された１つまたは複数のブロック４０４（０）〜４０４（Ｅ）からのデータをＬＬＣ４１２の複数のＬＬＣライン４２４（０）〜４２４（Ｙ）のうちのＬＬＣライン４２４（０）内のサブライン４２６（０）に記憶する（ブロック６３６）。しかしながら、ＣＭＣ２０４が、決定ブロック６３４において、検索された１つまたは複数のブロック４０４（０）〜４０４（Ｅ）からのデータが圧縮されたと決定した場合、ＣＭＣ２０４は、検索された１つまたは複数のブロック４０４（０）〜４０４（Ｅ）からのデータを復元する（ブロック６３８）。ＣＭＣ２０４は、次いで、復元されたデータをＬＬＣ４１２の複数のＬＬＣライン４２４（０）〜４２４（Ｙ）のうちのＬＬＣライン４２４（０）内のサブライン４２６（０）に記憶する（ブロック６４０）。処理は、次いで、図６Ｅのブロック６４２において再開する。
【００４４】
[0052]次に図６Ｅを参照すると、ＣＭＣ２０４は、次に、検索された１つまたは複数のブロック４０４（０）〜４０４（Ｅ）からのデータをシステムキャッシュ１１０に返す（ブロック６４２）。したがって、ＣＭＣ２０４は、本明細書では「検索された１つまたは複数のブロックからのデータをシステムキャッシュに返すための手段」と呼ばれることがある。いくつかの態様は、ＣＭＣ２０４が、さらに、検索された１つまたは複数のブロック４０４（０）〜４０４（Ｅ）からのデータと隣接する（that is contiguous with）データを読み取るために「サブラインプリフェッチ」を実施することを規定し得る。そのような態様では、ＣＭＣ２０４は、ＬＬＣライン４２４（０）の複数のサブライン４２６（０）〜４２６（Ｘ）のうちの１つまたは複数の残りのサブライン４２６（Ｘ）のための１つまたは複数のオフセット値４３６（０）〜４３６（Ｗ）と１つまたは複数の長さ値４４０（０）〜４４０（Ｗ）とを含んでいる１つまたは複数のマスタテーブルエントリ４３２（Ｙ）を読み取る（ブロック６４４）。ＣＭＣ２０４は、次いで、１つまたは複数のオフセット値４３６（０）〜４３６（Ｗ）と１つまたは複数の長さ値４４０（０）〜４４０（Ｗ）とに基づいて、システムメモリ２０６から１つまたは複数のブロック４０６（０）〜４０６（Ｅ）を検索する（ブロック６４６）。ＣＭＣ２０４は、検索された１つまたは複数のブロック４０６（０）〜４０６（Ｅ）からのデータをＬＬＣライン４２４（０）の複数のサブライン４２６（０）〜４２６（Ｘ）のうちの１つまたは複数の残りのサブライン４２６（Ｘ）に記憶する（ブロック６４８）。
【００４５】
[0053]メモリ読取り動作中にＣＭＣ２０４によってエビクションＬＬＣライン４２４（０）の複数のサブライン４２６（０）〜４２６（Ｘ）からのデータをシステムメモリ２０６に記憶するための図６Ｃのブロック６３２の例示的な動作を説明するために、図７が与えられる。明快のために、図７について説明する際に図４の要素が参照され得る。図７において、動作は、ＣＭＣ２０４が、エビクションＬＬＣライン４２４（０）の複数のサブライン４２６（０）〜４２６（Ｘ）の各対応するサブライン４２６（０）〜４２６（Ｘ）のためのオフセット値４３４（０）〜４３４（Ｗ）、４３６（０）〜４３６（Ｗ）と長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）とを含んでいる複数のマスタテーブルエントリ４３２（０）〜４３２（Ｙ）のうちのマスタテーブルエントリ４３２（０）〜４３２（Ｙ）を読み取ること（ブロック７００）から始まる。ＣＭＣ２０４は、次いで、変更されたデータを含んでいるエビクションＬＬＣライン４２４（０）の複数のサブライン４２６（０）〜４２６（Ｘ）の各サブライン４２６（０）について一連の命令を行う（ブロック７０２）。ＣＭＣ２０４は、最初に、サブライン４２６（０）からのデータを圧縮する（ブロック７０４）。ＣＭＣ２０４は、次いで、サブライン４２６（０）からの、図５の圧縮されたデータ５０８などの圧縮されたデータに基づいて、サブライン４２６（０）のための更新された長さ値４４４を生成する（ブロック７０６）。ＣＭＣ２０４は、サブライン４２６（０）のための更新された長さ値４４４がサブライン４２６（０）のための長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）とは異なるかどうかを決定する（ブロック７０８）。サブライン４２６（０）のための更新された長さ値４４４がサブライン４２６（０）のための長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）とは異ならない（すなわち、圧縮されたデータが、システムメモリ２０６に前に記憶されたデータと同じサイズである）場合、ＣＭＣ２０４は、サブライン４２６（０）のためのオフセット値４３４（０）〜４３４（Ｗ）、４３６（０）〜４３６（Ｗ）と長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）とに基づいて、サブライン４２６（０）のための圧縮されたデータをシステムメモリ２０６の１つまたは複数のブロック４０４（０）〜４０４（Ｅ）に書き込む（ブロック７１０）。
【００４６】
[0054]しかしながら、ＣＭＣ２０４が、決定ブロック７０８において、サブライン４２６（０）のための更新された長さ値４４４がサブライン４２６（０）のための長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）とは異なると決定した場合、ＣＭＣ２０４は、サブライン４２６（０）のための更新されたオフセット値４４２を生成する（ブロック７１２）。いくつかの態様では、更新されたオフセット値４４２を生成することは、図５に関して上記で説明されたように１つまたは複数の割振りルールに基づき得る。ＣＭＣ２０４は、次いで、サブライン４２６（０）のための更新されたオフセット値４４２と更新された長さ値４４４とに基づいて、サブライン４２６（０）のための圧縮されたデータをシステムメモリ２０６の１つまたは複数のブロック４０４（０）〜４０４（Ｅ）に書き込む（ブロック７１４）。ＣＭＣ２０４は、更新されたオフセット値４４２と更新された長さ値４４４とで（with）サブライン４２６（０）のためのマスタテーブルエントリ４３２（０）を更新する（ブロック７１６）。
【００４７】
[0055]図８Ａ〜図８Ｄは、メモリ帯域幅圧縮を使用して図４のＣＭＣ２０４によってメモリ書込み動作を実施するための例示的な動作を示すフローチャートである。明快のために、図８Ａ〜図８Ｄについて説明する際に図４の要素が参照される。図８Ａにおける動作は、ＣＭＣ２０４が、システムキャッシュ１１０から書込みデータ４２０とメモリアドレス４２２とを備えるメモリ書込み要求４１８を受信すること（ブロック８００）から始まる。この点について、ＣＭＣ２０４は、本明細書では「システムキャッシュから書込みデータとメモリアドレスとを備えるメモリ書込み要求を受信するための手段」と呼ばれることがある。ＣＭＣ２０４は、メモリアドレス４２２がＬＬＣ４１２の複数のＬＬＣライン４２４（０）〜４２４（Ｙ）のうちのＬＬＣライン４２４（０）の複数のサブライン４２６（０）〜４２６（Ｘ）のうちのサブライン４２６（０）に対応するかどうかを決定する（ブロック８０２）。したがって、ＣＭＣ２０４は、本明細書では「メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちのサブラインに対応するかどうかを決定するための手段」と呼ばれることがある。メモリアドレス４２２がＬＬＣライン４２４（０）のサブライン４２６（０）に対応する場合（すなわち、ＬＬＣ４１２上でのヒット）、いくつかの態様におけるＣＭＣ２０４は、書込みデータ４２０をＬＬＣライン４２４（０）のサブライン４２６（０）に記憶する（ブロック８０４）。
【００４８】
[0056]しかしながら、ＣＭＣ２０４が、決定ブロック８０２において、メモリアドレス４２２がＬＬＣライン４２４（０）のサブライン４２６（０）に対応しないと決定した場合（すなわち、ＬＬＣ４１２上でのミス）、ＣＭＣ２０４は、ＬＬＣ４１２の複数のＬＬＣライン４２４（０）〜４２４（Ｙ）内のＬＬＣライン４２４（０）をエビクションＬＬＣライン４２４（０）として選択する（ブロック８０６）。ＣＭＣ２０４は、したがって、本明細書では「メモリアドレスがＬＬＣの複数のＬＬＣラインのうちのＬＬＣライン内の複数のサブラインのうちのサブラインに対応しないと決定したことに応答して、ＬＬＣの複数のＬＬＣライン内のＬＬＣラインをエビクションＬＬＣラインとして選択するための手段」と呼ばれることがある。ＣＭＣ２０４は、次に、変更されたデータを含んでいるエビクションＬＬＣライン４２４（０）の複数のサブライン４２６（０）〜４２６（Ｘ）の各サブライン４２６（０）について（すなわち、複数のサブライン４２６（０）〜４２６（Ｘ）の各々のためのダーティフラグに基づいて）一連の動作を実施する（ブロック８０８）。ＣＭＣ２０４は、最初に、サブライン４２６（０）からのデータを圧縮する（ブロック８１０）。この点について、ＣＭＣ２０４は、本明細書では「変更されたデータを含んでいるエビクションＬＬＣラインの複数のサブラインの各サブラインからのデータを圧縮するための手段」と呼ばれることがある。処理は、次いで、図８Ｂのブロック８１２において続く。
【００４９】
[0057]次に図８Ｂを参照すると、ＣＭＣ２０４は、次に、サブライン４２６（０）からの圧縮されたデータに基づいて、サブライン４２６（０）のための更新されたオフセット値４４２と更新された長さ値４４４とを生成する（ブロック８１２）。したがって、ＣＭＣ２０４は、本明細書では「変更されたデータを含んでいるエビクションＬＬＣラインの複数のサブラインの各サブラインについて、サブラインからの圧縮されたデータに基づいて、更新されたオフセット値と更新された長さ値とを生成するための手段」と呼ばれることがある。いくつかの態様は、更新されたオフセット値４４２が、図５に関して上記で説明されたように１つまたは複数の割振りルールに基づいて生成され得ることを規定し得る。
【００５０】
[0058]いくつかの態様では、更新されたオフセット値４４２と更新された長さ値４４４とを生成するためのブロック８１２の動作は、ＣＭＣ２０４が、圧縮されたデータに基づいて、サブライン４２６（０）のための更新された長さ値４４４を生成すること（ブロック８１４）を含み得る。ＣＭＣ２０４は、次いで、サブライン４２６（０）のためのオフセット値４３４（０）〜４３４（Ｗ）、４３６（０）〜４３６（Ｗ）と長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）とを読み取る（ブロック８１６）。ＭＴキャッシュ４４６が使用されている態様では、ＣＭＣ２０４は、最初に、オフセット値４３４（０）〜４３４（Ｗ）、４３６（０）〜４３６（Ｗ）と長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）とがＭＴキャッシュ４４６から読み取られ得るかどうかを決定し得る。ＭＴキャッシュ４４６を検査したときにミスが発生した場合、ＣＭＣ２０４は、マスタテーブル４３０からオフセット値４３４（０）〜４３４（Ｗ）、４３６（０）〜４３６（Ｗ）と長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）とを読み取り得る。ＭＴキャッシュ４４６が使用されない態様では、ＣＭＣ２０４は、システムメモリ２０６中のマスタテーブル４３０からオフセット値４３４（０）〜４３４（Ｗ）、４３６（０）〜４３６（Ｗ）と長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）とを読み取り得る。ＣＭＣ２０４は、サブライン４２６（０）のための更新された長さ値４４４がサブライン４２６（０）のための長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）とは異なるかどうかを決定する（ブロック８１８）。
【００５１】
[0059]ＣＭＣ２０４が、決定ブロック８１８において、サブライン４２６（０）のための更新された長さ値４４４がサブライン４２６（０）のための長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）とは異なると決定した場合、ＣＭＣ２０４は、圧縮されたデータに基づいて、更新されたオフセット値４４２を生成する（ブロック８２０）。しかしながら、サブライン４２６（０）のための更新された長さ値４４４が長さ値４３８（０）〜４３８（Ｗ）、４４０（０）〜４４０（Ｗ）とは異ならない場合、ＣＭＣ２０４は、オフセット値４３４（０）〜４３４（Ｗ）、４３６（０）〜４３６（Ｗ）を更新されたオフセット値４４２として使用し得る（ブロック８２２）。処理は、次いで、図８Ｃのブロック８２４において再開する。
【００５２】
[0060]次に図８Ｃを参照すると、ＣＭＣ２０４は、サブライン４２６（０）のための更新されたオフセット値４４２と更新された長さ値４４４とに基づいて、サブライン４２６（０）のための圧縮されたデータをシステムメモリ２０６の１つまたは複数のブロック４０４（０）〜４０４（Ｅ）に記憶する（ブロック８２４）。したがって、ＣＭＣ２０４は、本明細書では「変更されたデータを含んでいるエビクションＬＬＣラインの複数のサブラインの各サブラインについて、サブラインのための更新されたオフセット値と更新された長さ値とに基づいて、圧縮されたデータをシステムメモリの１つまたは複数のブロックに記憶するための手段」と呼ばれることがある。いくつかの態様によれば、ＣＭＣ２０４は、次に、ＭＴキャッシュ４４６が使用されているかどうかを決定し得る（ブロック８２６）。ＭＴキャッシュ４４６が使用されていない場合、処理は、図８Ｄのブロック８２８において再開する。ＣＭＣ２０４が、決定ブロック８２６において、ＭＴキャッシュ４４６が使用されていると決定した場合、ＣＭＣ２０４は、メモリアドレス４２２がＭＴキャッシュ４４６の複数のＭＴキャッシュエントリ４４８（０）〜４４８（Ｚ）のうちのＭＴキャッシュエントリ４４８（０）に対応するかどうかを決定する（ブロック８３０）。対応する場合（すなわち、ＭＴキャッシュ４４６上でのヒット）、処理は、図８Ｄのブロック８３２において再開する。
【００５３】
[0061]しかしながら、ＣＭＣ２０４が、決定ブロック８３０において、メモリアドレス４２２が複数のＭＴキャッシュエントリ４４８（０）〜４４８（Ｚ）のうちのＭＴキャッシュエントリ４４８（０）に対応しないと決定した場合（すなわち、ＭＴキャッシュ４４６上でのミス）、ＣＭＣ２０４は、ＭＴキャッシュ４４６の現在のＭＴキャッシュエントリ４４８（０）をエビクトすべきかどうかを決定する（ブロック８３４）。エビクションが必要でない場合、処理は、図８Ｄのブロック８３２において再開する。ＣＭＣ２０４が、決定ブロック８３４において、現在のＭＴキャッシュエントリ４４８（０）がＭＴキャッシュ４４６からエビクトされるべきであると決定した場合、ＣＭＣ２０４は、（たとえば、ＭＴキャッシュエントリ４４８（０）のためのダーティフラグビットに基づいて）現在のＭＴキャッシュエントリ４４８（０）が変更されたかどうかを決定する（ブロック８３６）。ＭＴキャッシュエントリ４４８（０）が変更されていない場合、処理は、図８Ｄのブロック８３２において再開する。ＭＴキャッシュエントリ４４８（０）が変更された場合、ＣＭＣ２０４は、ＭＴキャッシュエントリ４４８（０）のコンテンツをマスタテーブル４３０に書き込む（ブロック８３８）。処理は、次いで、図８Ｄのブロック８３２において再開する。
【００５４】
[0062]次に図８Ｄが参照される。いくつかの態様では、図８Ｄに示された動作のうちの１つまたは複数は、並列に、および／または図８Ｄに示された順序以外の順序で実施され得る。図８Ｄにおいて、ＣＭＣ２０４は、更新されたオフセット値４４２と更新された長さ値４４４とをＭＴキャッシュ４４６のＭＴキャッシュエントリ４４８（０）に記憶する（ブロック８３２）。処理は、次いで、ブロック８４４において再開する。ＣＭＣ２０４が、図８Ｃの決定ブロック８２６において、ＭＴキャッシュ４４６が使用されていないと決定した場合、ＣＭＣ２０４は、更新されたオフセット値４４２と更新された長さ値４４４とをマスタテーブル４３０中のサブライン４２６（０）のためのマスタテーブルエントリ４３２（０）に記憶する（ブロック８２８）。この点について、ＣＭＣ２０４は、本明細書では「変更されたデータを含んでいるエビクションＬＬＣラインの複数のサブラインの各サブラインについて、更新されたオフセット値と更新された長さ値とをマスタテーブル中のサブラインのためのマスタテーブルエントリに記憶するための手段」と呼ばれることがある。ＣＭＣ２０４は、書込みデータ４２０をエビクションＬＬＣライン４２４（０）の複数のサブライン４２６（０）〜４２６（Ｘ）のうちのサブライン４２６（０）に記憶する（ブロック８４４）。したがって、ＣＭＣ２０４は、本明細書では「書込みデータをエビクションＬＬＣラインの複数のサブラインのうちのサブラインに記憶するための手段」と呼ばれることがある。
【００５５】
[0063]本明細書で開示される態様による、ＣＰＵベースシステムにおいて複数のＬＬＣラインを使用してメモリ帯域幅圧縮を行うことは、任意のプロセッサベースデバイスにおいて提供されるか、またはそれに組み込まれ得る。例としては、限定はしないが、セットトップボックス、エンターテインメントユニット、ナビゲーションデバイス、通信デバイス、固定ロケーションデータユニット、モバイルロケーションデータユニット、モバイルフォン、セルラーフォン、スマートフォン、タブレット、ファブレット、サーバ、コンピュータ、ポータブルコンピュータ、デスクトップコンピュータ、携帯情報端末（ＰＤＡ）、モニタ、コンピュータモニタ、テレビジョン、チューナー、無線機、衛星無線機、音楽プレーヤ、デジタル音楽プレーヤ、ポータブル音楽プレーヤ、デジタルビデオプレーヤ、ビデオプレーヤ、デジタルビデオディスク（ＤＶＤ）プレーヤ、ポータブルデジタルビデオプレーヤ、および自動車がある。
【００５６】
[0064]この点について、図９は、図２のＣＭＣ２０４をもつＳｏＣ２００を採用することができるプロセッサベースシステム９００の一例を示す。この例では、プロセッサベースシステム９００は、１つまたは複数のＣＰＵ９０２を含み、各々が、１つまたは複数のプロセッサ９０４を含む。（１つまたは複数の）ＣＰＵ９０２は、一時的に記憶されたデータへの高速アクセスのための、（１つまたは複数の）プロセッサ９０４に結合されたキャッシュメモリ９０６を有し得る。（１つまたは複数の）ＣＰＵ９０２は、システムバス９０８に結合され、プロセッサベースシステム９００中に含まれるデバイスを相互結合する（intercouple）ことができる。よく知られているように、（１つまたは複数の）ＣＰＵ９０２は、システムバス９０８を介してアドレスと、制御と、データ情報とを交換することによって、これらの他のデバイスと通信する。たとえば、（１つまたは複数の）ＣＰＵ９０２は、スレーブデバイスの一例としてのＣＭＣ２０４にバストランザクション要求を通信することができる。図９に示されていないが、複数のシステムバス９０８が設けられ得る。
【００５７】
[0065]他のデバイスがシステムバス９０８に接続され得る。図９に示されているように、これらのデバイスは、例として、メモリシステム９１０と、１つまたは複数の入力デバイス９１２と、１つまたは複数の出力デバイス９１４と、１つまたは複数のネットワークインターフェースデバイス９１６と、１つまたは複数のディスプレイコントローラ９１８とを含むことができる。（１つまたは複数の）入力デバイス９１２は、限定はしないが、入力キー、スイッチ、音声プロセッサなどを含む、任意のタイプの入力デバイスを含むことができる。（１つまたは複数の）出力デバイス９１４は、限定はしないが、オーディオ、ビデオ、他の視覚インジケータなどを含む、任意のタイプの出力デバイスを含むことができる。（１つまたは複数の）ネットワークインターフェースデバイス９１６は、ネットワーク９２０との間のデータの交換を可能にするように構成された任意のデバイスであり得る。ネットワーク９２０は、限定はしないが、ワイヤードまたはワイヤレスネットワーク、プライベートまたは公衆ネットワーク、ローカルエリアネットワーク（ＬＡＮ）、ワイドローカルエリアネットワーク、ワイヤレスローカルエリアネットワーク、ＢＬＵＥＴＯＯＴＨ（登録商標）（ＢＴ）、およびインターネットを含む、任意のタイプのネットワークであり得る。（１つまたは複数の）ネットワークインターフェースデバイス９１６は、所望される任意のタイプの通信プロトコルをサポートするように構成され得る。メモリシステム９１０は、１つまたは複数のメモリユニット９２２（０）〜９２２（Ｎ）を含むことができる。
【００５８】
[0066]（１つまたは複数の）ＣＰＵ９０２はまた、１つまたは複数のディスプレイ９２４に送られる情報を制御するために、システムバス９０８を介して（１つまたは複数の）ディスプレイコントローラ９１８にアクセスするように構成され得る。（１つまたは複数の）ディスプレイコントローラ９１８は、１つまたは複数のビデオプロセッサ９２６を介して表示されるべき情報を（１つまたは複数の）ディスプレイ９２４に送り、１つまたは複数のビデオプロセッサ９２６は、表示されるべき情報を（１つまたは複数の）ディスプレイ９２４に適したフォーマットに処理する。（１つまたは複数の）ディスプレイ９２４は、限定はしないが、陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）、発光ダイオード（ＬＥＤ）ディスプレイ、プラズマディスプレイなどを含む、任意のタイプのディスプレイを含むことができる。
【００５９】
[0067]本明細書で説明されるデバイスは、例として、任意の回路、ハードウェア構成要素、集積回路（ＩＣ）、またはＩＣチップにおいて採用され得る。本明細書で開示されるメモリは、任意のタイプおよびサイズのメモリであり得、所望される任意のタイプの情報を記憶するように構成され得る。この互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップが、上記では概してそれらの機能に関して説明された。そのような機能がどのように実装されるかは、特定の適用例、設計選択、および／または全体的なシステムに課される設計制約に依存する。当業者は、説明された機能を特定の適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、本開示の範囲からの逸脱を生じるものと解釈されるべきではない。
【００６０】
[0068]本明細書で開示される態様に関して説明された様々な例示的な論理ブロック、モジュール、および回路は、プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）または他のプログラマブル論理デバイス、個別ゲートまたはトランジスタ論理、個別ハードウェア構成要素、あるいは本明細書で説明された機能を実施するように設計されたそれらの任意の組合せを用いて実装または実施され得る。プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサは、コンピューティングデバイスの組合せ、たとえば、ＤＳＰとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、ＤＳＰコアと連携する１つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成としても実装され得る。
【００６１】
[0069]また、本明細書の例示的な態様のいずれかにおいて説明された動作ステップは、例および説明を与えるために説明されたことに留意されたい。説明された動作は、図示されたシーケンス以外の多数の異なるシーケンスで実施され得る。さらに、単一の動作ステップで説明された動作は、実際は、いくつかの異なるステップで実施され得る。さらに、例示的な態様において説明された１つまたは複数の動作ステップは組み合わせられ得る。フローチャート図に示された動作ステップは、当業者には容易に明らかになるように、多数の異なる変更を受け得ることを理解されたい。また、情報および信号は様々な異なる技術および技法のいずれかを使用して表され得ることを、当業者は理解されよう。たとえば、上記の説明全体にわたって言及され得るデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁界または磁性粒子、光場または光学粒子、あるいはそれらの任意の組合せによって表され得る。
【００６２】
[0070]本開示についての以上の説明は、いかなる当業者も本開示を作成または使用することができるように与えられる。本開示への様々な変更は当業者には容易に明らかになり、本明細書で定義された一般原理は、本開示の趣旨または範囲から逸脱することなく他の変形形態に適用され得る。したがって、本開示は、本明細書で説明された例および設計に限定されるものではなく、本明細書で開示された原理および新規の特徴に合致する最も広い範囲を与えられるべきである。
【図１】
2019513271.tif 000003
【図２】
2019513271.tif 000004
【図３】
2019513271.tif 000005
【図４】
2019513271.tif 000006
【図５】
2019513271.tif 000007
【図６Ａ】
2019513271.tif 000008
【図６Ｂ】
2019513271.tif 000009
【図６Ｃ】
2019513271.tif 000010
【図６Ｄ】
2019513271.tif 000011
【図６Ｅ】
2019513271.tif 000012
【図７】
2019513271.tif 000013
【図８Ａ】
2019513271.tif 000014
【図８Ｂ】
2019513271.tif 000015
【図８Ｃ】
2019513271.tif 000016
【図８Ｄ】
2019513271.tif 000017
【図９】
2019513271.tif 000018
【国際調査報告】
2019513271.tif 000019
2019513271.tif 000020
2019513271.tif 000021