(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-09
(45)【発行日】2024-09-18
(54)【発明の名称】書き込みミスエントリのドレインをサポートする犠牲キャッシュ
(51)【国際特許分類】
G06F 12/0897 20160101AFI20240910BHJP
G06F 12/0895 20160101ALI20240910BHJP
G06F 12/0855 20160101ALI20240910BHJP
【FI】
G06F12/0897 110
G06F12/0895 112
G06F12/0855
(21)【出願番号】P 2021569843
(86)(22)【出願日】2020-05-26
(86)【国際出願番号】 US2020034557
(87)【国際公開番号】W WO2020243095
(87)【国際公開日】2020-12-03
【審査請求日】2023-05-22
(32)【優先日】2019-05-24
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2020-05-22
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】507107291
【氏名又は名称】テキサス インスツルメンツ インコーポレイテッド
(74)【代理人】
【識別番号】230129078
【氏名又は名称】佐藤 仁
(73)【特許権者】
【識別番号】390020248
【氏名又は名称】日本テキサス・インスツルメンツ合同会社
(72)【発明者】
【氏名】ナヴィーン ボリア
(72)【発明者】
【氏名】ティモシー デヴィッド アンダーソン
(72)【発明者】
【氏名】ピート マイケル ヒプルハウザー
【審査官】田名網 忠雄
(56)【参考文献】
【文献】特開2006-260378(JP,A)
【文献】米国特許出願公開第2015/0006820(US,A1)
【文献】特開2002-163150(JP,A)
【文献】特表2013-536526(JP,A)
【文献】特開2013-069156(JP,A)
【文献】米国特許出願公開第2012/0221774(US,A1)
【文献】特開2013-182356(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/08-12/128
(57)【特許請求の範囲】
【請求項1】
キャッシングシステムであって、
第1のキャッシュであって、
第1のサブキャッシュと、
前記第1のサブキャッシュに並行な第2のサブキャッシュであって、
キャッシュラインのセットと、
前記キャッシュラインのセットの対応するキャッシュラインのラインタイプを指示するように構成されるラインタイプビットであって、第1のラインタイプが、前記キャッシュラインのセットの対応するキャッシュラインが前記第1のサブキャッシュから外へ退避されるデータのラインを記憶するように構成される旨の指示であり、第2のラインタイプが、前記キャッシュラインのセットの対応するキャッシュラインが書き込みミスデータを記憶するように構成される旨の指示である、前記ラインタイプビットと、
前記ラインタイプビットに基づいて記憶された書き込みミスデータをフラッシュするように構成されるエビクションコントローラと、
を含む、前記第2のサブキャッシュと、
を含む、第1のキャッシュと、
第2のキャッシュと、
を含む、キャッシングシステム。
【請求項2】
請求項1に記載のキャッシングシステムであって、
前記第2のサブキャッシュが、
前記記憶された書き込みミスデータに関連付けられるメモリアドレスを記憶するように構成されるタグランダムアクセスメモリ(RAM)と、
前記記憶された書き込みミスデータに関連付けられるバイトイネーブル論理を記憶するように構成されるバイトイネーブルメモリと、
を更に含み、
前記エビクションコントローラが、前記記憶されたメモリアドレスと前記記憶されたバイトイネーブル論理
とに基づいてメモリ書き込み要求をより高レベルのメモリに伝送することによって記憶された書き込みミスデータをフラッシュするように
更に構成される、キャッシングシステム。
【請求項3】
請求項1に記載のキャッシングシステムであって、
プロセッサインターフェースを更に含み、
前記エビクションコントローラが、
前記プロセッサインターフェース上のアクティビティを監視し、
前記監視されたアクティビティに基づいて記憶された書き込みミスデータをフラッシュする、
ように更に構成される、キャッシングシステム。
【請求項4】
請求項3に記載のキャッシングシステムであって、
前記プロセッサインターフェース上のアクティビティを監視することが、前記プロセッサインターフェース上のアイドルアクティビティを検出することを含む、キャッシングシステム。
【請求項5】
請求項4に記載のキャッシングシステムであって、
前記アイドルアクティビティを検出することが、所定数のクロックサイクルの間にメモリ要求が受け取られたかどうかを判定することを含む、キャッシングシステム。
【請求項6】
請求項4に記載のキャッシングシステムであって、
前記エビクションコントローラが、
前記プロセッサインターフェース上のアクティビティが再開されたことを判定し、
前記記憶された書き込みミスデータのフラッシュを取り消す、
ように更に構成される、キャッシングシステム。
【請求項7】
請求項6に記載のキャッシングシステムであって、
前記プロセッサインターフェース上のアクティビティが再開されたことを判定することが、プロセッサからのキャッシュ要求受け取りを検出することを含む、キャッシングシステム。
【請求項8】
データをキャッシングするための方法であって、
第1のキャッシュによってメモリアドレスについて書き込みメモリ要求を受け取ることと、
前記第1のキャッシュの第1のサブキャッシュによって前記第1のサブキャッシュ内に前記メモリアドレスがキャッシュされないことを判定することと、
前記第1のキャッシュの第2のサブキャッシュによって前記第2のサブキャッシュ内に前記メモリアドレスがキャッシュされないことを判定することと、
前記書き込みメモリ要求に関連付けられるデータを前記第2のサブキャッシュ内に記憶することと、
前記記憶されたデータが書き込みミスに対応する旨の指示を前記第2のサブキャッシュのラインタイプビット内に記憶することと、
プロセッサインターフェース上でプロセッサのアクティビティを監視することと、
前記指示と前記プロセッサのアクティビティが閾値以下であることとに基づいて前記記憶されたデータをフラッシュすることと、
を含む、方法。
【請求項9】
請求項8に記載の方法であって、
前記記憶されたデータをフラッシュすることが、前記第2のサブキャッシュによってメモリ書き込み要求をより高いレベルのメモリに伝送することを含む、方法。
【請求項10】
請求項8に記載の方法であって、
前記閾値が、前記プロセッサインターフェース上のアイドルアクティビティである、方法。
【請求項11】
請求項10に記載の方法であって、
前記プロセッサのアクティビティを監視することが、所定数のクロックサイクルの間にメモリ要求が受け取られていないことを判定することを含む、方法。
【請求項12】
請求項10に記載の方法であって、
前記プロセッサインターフェース上でアクティビティが再開したことを判定することと、
前記記憶された書き込みミスデータのフラッシュを取り消すことと、
を更に含む、方法。
【請求項13】
請求項12に記載の方法であって、
前記プロセッサインターフェース上でアクティビティが再開したことを判定することが、キャッシュ要求受け取りを検出することを含む、方法。
【請求項14】
デバイスであって、
第1のキャッシュを含むプロセッサであって、前記第1のキャッシュが、
第1のサブキャッシュと、
前記第1のサブキャッシュに並行な第2のサブキャッシュであって、
キャッシュラインのセットと、
前記キャッシュラインのセットの対応するキャッシュラインのラインタイプを指示するように構成されるラインタイプビットであって、第1のラインタイプが、前記キャッシュラインのセットの対応するキャッシュラインが前記第1のサブキャッシュから外へ退避されるデータのラインを記憶するように構成される旨の指示であり、第2のラインタイプが、前記キャッシュラインのセットの対応するキャッシュラインが書き込みミスデータを記憶するように構成される旨の指示である、前記ラインタイプビットと、
前記ラインタイプビットに基づいて記憶された書き込みミスデータをフラッシュするように構成されるエビクションコントローラと、
を含む、第2のサブキャッシュと、
を含む、前記プロセッサを含む、デバイス。
【請求項15】
請求項14に記載のデバイスであって、
前記第2のサブキャッシュが、
前記記憶された書き込みミスデータに関連付けられるメモリアドレスを記憶するように構成されるタグランダムアクセスメモリ(RAM)と、
前記記憶された書き込みミスデータに関連付けられるバイトイネーブル論理を記憶するように構成されるバイトイネーブルメモリと、
を更に含み、
前記エビクションコントローラが、前記記憶されたメモリアドレスと前記記憶されたバイトイネーブル論理とに基づいて書き込みメモリ要求をより高いレベルのメモリに伝送することによって前記記憶された書き込みミスデータをフラッシュするように
更に構成される、デバイス。
【請求項16】
請求項14に記載のデバイスであって、
プロセッサインターフェースを更に含み、
前記エビクションコントローラが、
前記プロセッサインターフェース上のアクティビティを監視し、
前記監視されたアクティビティに基づいて前記記憶された書き込みミスデータをフラッシュする、
ように更に構成される、デバイス。
【請求項17】
請求項16に記載のデバイスであって、
前記プロセッサインターフェース上のアクティビティを監視することが、前記プロセッサインターフェース上のアイドルアクティビティを検出することを含む、デバイス。
【請求項18】
請求項17に記載のデバイスであって、
前記アイドルアクティビティを検出することが、所定数のクロックサイクルの間にメモリ要求が受け取られたかどうかを判定することを含む、デバイス。
【請求項19】
請求項18に記載のデバイスであって、
前記エビクションコントローラが、
前記プロセッサインターフェース上でアクティビティが再開されたことを判定し、
前記記憶された書き込みミスデータのフラッシュを取り消す、
ように更に構成される、デバイス。
【発明の詳細な説明】
【技術分野】
【0001】
マルチコアコヒーレントシステムにおいて、複数のプロセッサ及びシステム構成要素が、オンチップメモリ及びオフチップメモリなどの、同じメモリリソースを共有する。メモリキャッシュ(例えば、キャッシュ)は、メインメモリに比べて動作上プロセッサの近くに(例えば、近接して)位置する或る量の高速メモリを提供し得る。一般に、キャッシュが動作上プロセッサに近いほどレイテンシは低い、すなわち、メモリ要求を満たすために用いられるプロセッサクロックサイクルは少ない。概して、プロセッサに最も近いキャッシュメモリは、プロセッサと共にしばしばダイ上に直接に存在するレベル1(L1)キャッシュを含む。多くのプロセッサは、より大きなレベル2(L2)キャッシュも含む。このL2キャッシュは、概してL1キャッシュよりも低速であるが、依然としてプロセッサコアと共にダイ上に存在し得る。L2キャッシュは、プロセッサ毎のコアキャッシュであり得るか、又は複数コア全体で共有され得る。しばしば、プロセッサコアには、別々の構成要素としてダイ上に存在するか、又はシステムオンチップ(SoC)の別の部分に存在する、より大きくより低速なL3キャッシュも利用可能である。
【0002】
キャッシュなどのメモリシステムは、例えば、宇宙線、太陽粒子、又は悪意のあるメモリアクセスからの電子又は磁気干渉に起因したデータ破損を受けやすい可能性がある。自動運転車両及び自律システムなどの、クリティカルシステム及び/又は他の障害不耐性システムにおいてプロセッサが用いられることが増えているため、メモリシステムをデータ破損から保護するための技法が、メモリシステムに適用されることが増えている。こうした技法の1つが、メモリ破損を検出及び訂正するための誤り訂正符号(ECC)の使用である。高速キャッシュメモリにおけるECCの実装は、ECCが、考慮する必要のある追加のタイミングオーバーヘッドをもたらす可能性があるため厄介である。例えば、高速キャッシュメモリシステムは、キャッシュ内でメモリアドレスにアクセスされるかどうかを判別するため、及び、キャッシュメモリのコンテンツを取り出すための、5段メモリパイプラインを有し得る。各段には、1GHzで約1ナノ秒である1クロックサイクルかかり得る。キャッシュメモリのコンテンツの誤りチェックは、実質的にフルクロックサイクルかかり得る。障害耐性キャッシュのキャッシュ性能を向上させるための技法が求められている。
【発明の概要】
【0003】
本記載は、キャッシングシステムに関する。より具体的には、本記載の幾つかの態様が、第1のサブキャッシュと、第1のサブキャッシュに並行な第2のサブキャッシュとを含むキャッシングシステムに関し、第2のサブキャッシュは、キャッシュラインのセットと、キャッシュラインのセットのうちの対応するキャッシュラインが書き込みミスデータを記憶するように構成される旨の指示を記憶するように構成されたラインタイプビットと、ラインタイプビットに基づいて記憶された書き込みミスデータをフラッシュするように構成されたエビクションコントローラとを含む。
【0004】
本明細書の別の態様が、データをキャッシングするための方法に関し、この方法は、キャッシングシステムによって、メモリアドレスについての書き込みメモリ要求を受け取ることと、キャッシングシステムの第1のサブキャッシュによって、第1のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することと、キャッシングシステムの第2のサブキャッシュによって、第2のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することと、書き込みメモリ要求に関連付けられたデータを第2のサブキャッシュ内に記憶することと、記憶されたデータが書き込みミスに対応する旨の指示を第2のサブキャッシュのラインタイプビット内に記憶することと、記憶されたデータを指示に基づいてフラッシュすることとを含む。
【0005】
本記載の別の態様が、第1のサブキャッシュと、第1のサブキャッシュに並行な第2のサブキャッシュとを含むデバイスに関し、第2のサブキャッシュは、キャッシュラインのセットと、キャッシュラインのセットのうちの対応するキャッシュラインが書き込みミスデータを記憶するように構成される旨の指示を記憶するように構成されたラインタイプビットと、ラインタイプビットに基づいて記憶された書き込みミスデータをフラッシュするように構成されたエビクションコントローラとを含む。
【0006】
本記載の別の態様が、第1のサブキャッシュと、第1のサブキャッシュに並行な第2のサブキャッシュとを含むキャッシングシステムに関し、第2のサブキャッシュは、キャッシュラインのセットと、キャッシュラインのセットのうちの対応するラインが書き込みミスデータを記憶するように構成される旨の指示を記憶するように構成されたラインタイプビットと、キャッシュラインが完全に書き込まれた旨の指示に基づいて、書き込みミスデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成されたエビクションコントローラとを含む。
【0007】
本記載の別の態様が、キャッシングシステムによって、メモリアドレスについての書き込みメモリ要求を受け取ることと、キャッシングシステムの第1のサブキャッシュによって、第1のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することと、キャッシングシステムの第2のサブキャッシュによって、第2のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することと、書き込みメモリ要求に関連付けられたデータを第2のサブキャッシュ内に記憶することと、記憶されたデータが書き込みミスに対応する旨の指示を第2のサブキャッシュのラインタイプビット内に記憶することと、キャッシュラインが完全に書き込まれた旨の指示に基づいて、書き込みミスを記憶する第2のサブキャッシュのキャッシュラインを追い出すことを含む、データをキャッシングするための方法に関する。
【0008】
本記載の別の態様が、プロセッサ、第1のサブキャッシュと、第1のサブキャッシュに並行な第2のサブキャッシュとを含むデバイスに関し、第2のサブキャッシュは、キャッシュラインのセットと、キャッシュラインのセットのうちの対応するラインが書き込みミスデータを記憶するように構成される旨の指示を記憶するように構成されたラインタイプビットと、キャッシュラインが完全に書き込まれた旨の指示に基づいて、書き込みミスデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成されたエビクションコントローラとを含む。
【0009】
本記載の別の態様が、第1のサブキャッシュと、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュにキャッシュされていない書き込みメモリコマンドを記憶するために、第1のキャッシュに並列に結合された第2のサブキャッシュとを含むキャッシングシステムに関し、第2のサブキャッシュは、書き込みミスデータを記憶する第2のサブキャッシュの対応するキャッシュラインがカラータグに関連付けられる旨の指示を記憶するように構成されたカラータグビットと、キャッシュラインに関連付けられたカラータグに基づいて書き込みミスデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成されたエビクションコントローラとを含む。
【0010】
本記載の別の態様が、データをキャッシングするための方法に関し、この方法は、キャッシングシステムによって、メモリアドレスについての書き込みメモリコマンドを受け取ることと、キャッシングシステムの第1のサブキャッシュによって、第1のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することと、キャッシングシステムの第2のサブキャッシュによって、第2のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することであって、第2のサブキャッシュは、第1のサブキャッシュに並行して、第1のサブキャッシュから追い出されたキャッシュデータと第1のサブキャッシュ内にキャッシュされていない書き込みメモリコマンドとを記憶するように構成される、判定することと、書き込みメモリコマンドに関連付けられたデータを第2のサブキャッシュ内に記憶することと、データに関連付けられたカラータグビットを第2のサブキャッシュ内に記憶することと、カラータグビットに基づいて記憶されたデータを追い出すこととを含む。
【0011】
本記載の別の態様が、プロセッサと、第1のサブキャッシュと、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュにキャッシュされていない書き込みメモリコマンドを記憶するために、第1のサブキャッシュに並列に結合された第2のサブキャッシュとを含むデバイスに関し、第2のサブキャッシュは、書き込みミスデータを記憶する第2のサブキャッシュの対応するキャッシュラインがカラータグに関連付けられる旨の指示を記憶するように構成されたカラータグビットと、キャッシュラインに関連付けられたカラータグに基づいて書き込みミスデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成されたエビクションコントローラとを含む。
【0012】
本記載の別の態様が、キャッシングシステムによってデータをキャッシングするための技法に関し、キャッシングシステムは、第1のサブキャッシュと、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュにキャッシュされていない書き込みメモリコマンドを記憶するために、第1のサブキャッシュに並列に結合された第2のサブキャッシュとを含み、第2のサブキャッシュは、第2のサブキャッシュの対応するラインがカラータグに関連付けられる旨の指示を記憶するように構成されたカラータグビットと、ラインに関連付けられたカラータグに基づいてメモリ書き込みデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成されたエビクションコントローラとを含み、第2のサブキャッシュは更に、メモリアドレスについての第1の書き込みメモリコマンドを受け取ることであって、書き込みメモリコマンドは第1のカラータグに関連付けられる、受け取ることと、第1の書き込みメモリコマンドに関連付けられた第1のデータを第2のサブキャッシュのキャッシュライン内に記憶することと、第1のカラータグを第2のサブキャッシュ内に記憶することと、キャッシュラインについての第2の書き込みメモリコマンドを受け取ることであって、書き込みメモリコマンドは第2のカラータグに関連付けられる、受け取ることと、第2のカラータグを第1のカラータグとマージすることと、マージされたカラータグを記憶することと、マージされたカラータグに基づいてキャッシュラインを追い出すこととを行うように構成される。
【0013】
本記載の別の態様が、データをキャッシングするための方法に関し、この方法は、キャッシングシステムによって、メモリアドレスについての書き込みメモリコマンドを受け取ることであって、書き込みメモリコマンドが第1のカラータグに関連付けられる、受け取ることと、キャッシングシステムの第1のサブキャッシュによって、第1のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することと、キャッシングシステムの第2のサブキャッシュによって、第2のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することであって、第2のサブキャッシュが、第1のサブキャッシュに並行して、第1のサブキャッシュから追い出されたキャッシュデータと第1のサブキャッシュ内にキャッシュされていない書き込みメモリコマンドとを記憶するように構成される、判定することと、第1の書き込みメモリコマンドに関連付けられた第1のデータを第2のサブキャッシュのキャッシュライン内に記憶することと、第1のカラータグを第2のサブキャッシュ内に記憶することと、キャッシュラインについての第2の書き込みメモリコマンドを受け取ることであって、書き込みメモリコマンドは第2のカラータグに関連付けられる、受け取ることと、第2のカラータグを第1のカラータグとマージすることと、マージされたカラータグを記憶することと、マージされたカラータグに基づいてキャッシュラインを追い出すこととを含む。
【0014】
本記載の別の態様が、プロセッサと、第1のサブキャッシュと、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュにキャッシュされていない書き込みメモリコマンドを記憶するために、第1のサブキャッシュに並列に結合された第2のサブキャッシュとを含むデバイスに関し、第2のサブキャッシュは、第2のサブキャッシュの対応するラインがカラータグに関連付けられる旨の指示を記憶するように構成されたカラータグビットと、ラインに関連付けられたカラータグに基づいてメモリ書き込みデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成されたエビクションコントローラとを含み、第2のサブキャッシュは更に、メモリアドレスについての第1の書き込みメモリコマンドを受け取ることであって、書き込みメモリコマンドは第1のカラータグに関連付けられる、受け取ることと、第1の書き込みメモリコマンドに関連付けられた第1のデータを第2のサブキャッシュのキャッシュライン内に記憶することと、第1のカラータグを第2のサブキャッシュ内に記憶することと、キャッシュラインについての第2の書き込みメモリコマンドを受け取ることであって、書き込みメモリコマンドは第2のカラータグに関連付けられる、受け取ることと、第2のカラータグを第1のカラータグとマージすることと、マージされたカラータグを記憶することと、マージされたカラータグに基づいてキャッシュラインを追い出すこととを行うように構成される。
【0015】
本記載の別の態様が、第1のサブキャッシュと、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュにキャッシュされていない書き込みメモリコマンドを記憶するために、第1のサブキャッシュに並列に結合された第2のサブキャッシュとを含むキャッシングシステムに関し、第2のサブキャッシュは、第2のサブキャッシュの対応するキャッシュラインが特権のレベルに関連付けられる旨の指示を記憶するように構成された特権ビットを含み、第2のサブキャッシュは更に、メモリアドレスについての第1の書き込みメモリコマンドを受け取ることであって、第1の書き込みメモリコマンドは第1の特権のレベルに関連付けられる、受け取ることと、第1の書き込みメモリコマンドに関連付けられた第1のデータを第2のサブキャッシュのキャッシュライン内に記憶することと、キャッシュラインに関連付けられた特権のレベルを第2のサブキャッシュ内に記憶することと、キャッシュラインについての第2の書き込みメモリコマンドを受け取ることであって、第2の書き込みメモリコマンドは第2の特権のレベルに関連付けられる、受け取ることと、第1の特権のレベルを第2の特権のレベルとマージすることと、マージされた特権レベルを記憶することと、マージされた特権レベルをキャッシュラインと共に出力することとを行うように構成される。
【0016】
本記載の別の態様が、キャッシングシステムによって、メモリアドレスについての書き込みメモリコマンドを受け取ることであって、第1の書き込みメモリコマンドは第1の特権レベルに関連付けられる、受け取ることと、キャッシングシステムの第1のサブキャッシュによって、第1のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することと、キャッシングシステムの第2のサブキャッシュによって、第2のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することであって、第2のサブキャッシュが、第1のサブキャッシュに並行して、第1のサブキャッシュから追い出されたキャッシュデータと第1のサブキャッシュ内にキャッシュされていない書き込みメモリコマンドとを記憶するように構成される、判定することと、第1の書き込みメモリコマンドに関連付けられた第1のデータを第2のサブキャッシュのキャッシュライン内に記憶することと、第1の特権レベルを第2のサブキャッシュ内に記憶することと、キャッシュラインについての第2の書き込みメモリコマンドを受け取ることであって、第2の書き込みメモリコマンドは第2の特権のレベルに関連付けられる、受け取ることと、第1の特権のレベルを第2の特権のレベルとマージすることと、マージされた特権レベルを記憶することと、マージされた特権レベルをキャッシュラインと共に出力することとを行うように構成される。
【0017】
本記載の別の態様が、プロセッサと、第1のサブキャッシュと、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュにキャッシュされていない書き込みメモリコマンドを記憶するために、第1のサブキャッシュに並列に結合された第2のサブキャッシュとを含むデバイスに関し、第2のサブキャッシュは、第2のサブキャッシュの対応するキャッシュラインが特権のレベルに関連付けられる旨の指示を記憶するように構成された特権ビットを含み、第2のサブキャッシュは更に、メモリアドレスについての第1の書き込みメモリコマンドを受け取ることであって、第1の書き込みメモリコマンドは第1の特権のレベルに関連付けられる、受け取ることと、第1の書き込みメモリコマンドに関連付けられた第1のデータを第2のサブキャッシュのキャッシュライン内に記憶することと、キャッシュラインに関連付けられた特権のレベルを第2のサブキャッシュ内に記憶することと、キャッシュラインについての第2の書き込みメモリコマンドを受け取ることであって、第2の書き込みメモリコマンドが第2の特権のレベルに関連付けられる、受け取ることと、第1の特権のレベルを第2の特権のレベルとマージすることと、マージされた特権レベルを記憶することと、マージされた特権レベルをキャッシュラインと共に出力することとを行うように構成される。
【0018】
本記載の別の態様が、第1のサブキャッシュと、第1のサブキャッシュに並列に結合された第2のサブキャッシュとを含むキャッシングシステムに関し、第2のサブキャッシュは、第2のサブキャッシュの対応するラインが書き込みミスデータを記憶するように構成される旨の指示を記憶するように構成されたラインタイプビットを含む。
【0019】
本記載の別の態様が、データをキャッシングするための方法に関し、この方法は、キャッシングシステムによって、メモリアドレスについての書き込みメモリ要求を受け取ることと、キャッシングシステムの第1のサブキャッシュによって、第1のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することと、キャッシングシステムの第2のサブキャッシュによって、第2のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することであって、第2のサブキャッシュは第1のサブキャッシュに並列に結合される、判定することと、書き込みメモリ要求に関連付けられたデータを第2のサブキャッシュ内に記憶することと、記憶されたデータが書き込みミスに対応する旨の指示を第2のサブキャッシュのラインタイプビット内に記憶することを含む。
【0020】
本記載の別の態様が、プロセッサ、第1のサブキャッシュと、第1のサブキャッシュに並列に結合された第2のサブキャッシュとを含むデバイスに関し、第2のサブキャッシュが、第2のサブキャッシュの対応するラインが書き込みミスデータを記憶するように構成される旨の指示を記憶するように構成されたラインタイプビットを含む。
【0021】
本記載の別の態様が、第1のサブキャッシュと、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュにキャッシュされていない書き込みメモリコマンドを記憶するために、第1のキャッシュに並列に結合された第2のサブキャッシュと、キャッシュコントローラとを含むキャッシングシステムに関し、キャッシュコントローラは、2つ又はそれ以上のキャッシュコマンドを受け取ることと、受け取った2つ又はそれ以上のキャッシュコマンド間に競合が存在すると判定することと、受け取った2つ又はそれ以上のキャッシュコマンド間の競合解決を判定することと、2つ又はそれ以上のキャッシュコマンドを第1のサブキャッシュ及び第2のサブキャッシュに送信することを行うように構成される。
【0022】
本記載の別の態様が、データをキャッシングするための方法に関し、この方法は、2つ又はそれ以上のキャッシュコマンドを受け取ることと、2つ又はそれ以上のキャッシュコマンド間に競合が存在すると判定することと、受け取った2つ又はそれ以上のキャッシュコマンド間の競合解決を判定することと、2つ又はそれ以上のキャッシュコマンドを第1のサブキャッシュ及び第2のサブキャッシュに送信することとを含み、第2のサブキャッシュは、第1のサブキャッシュに並行して、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュにキャッシュされていない書き込みメモリコマンドとを記憶するように構成される。
【0023】
本記載の別の態様が、プロセッサと、第1のサブキャッシュと、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュにキャッシュされていない書き込みメモリコマンドを記憶するために、第1のサブキャッシュに並列に結合された第2のサブキャッシュと、キャッシュコントローラとを含む、デバイスに関し、キャッシュコントローラは、2つ又はそれ以上のキャッシュコマンドを受け取り、2つ又はそれ以上のキャッシュコマンド間に競合が存在すると判定し、受け取った2つ又はそれ以上のキャッシュコマンド間の競合解決を判定し、2つ又はそれ以上のキャッシュコマンドを第1のサブキャッシュ及び第2のサブキャッシュに送信するように構成される。
【0024】
次に、様々な例の詳細な説明のために、添付の図面を参照する。
【図面の簡単な説明】
【0025】
【0026】
【
図2】読み取り要求を処理するための簡略化されたキャッシュメモリパイプラインを示すブロック図である。
【0027】
【
図3】本記載の態様に従った、ストアキューを備えるキャッシュメモリパイプラインのブロック図である。
【0028】
【
図4】犠牲キャッシュを含むキャッシュアーキテクチャを示すブロック図である。
【0029】
【
図5】本記載の態様に従った、並列犠牲キャッシュを含むキャッシュアーキテクチャを示すブロック図である。
【0030】
【
図6】本記載の態様に従った、犠牲キャッシュメモリパイプラインを示すブロック図である。
【0031】
【
図7】本記載の態様に従った、書き込みミスバッファを含む犠牲キャッシュパイプラインを示すブロック図である。
【0032】
【
図8】本記載の態様に従った、MESI RAMのブロック図である。
【0033】
【
図9】本記載の態様に従った、書き込みミスバッファを含むキャッシュシステムのアーキテクチャブロック図である。
【0034】
【
図10】本記載の態様に従った、データをキャッシングするための技法を示すフローチャートである。
【
図11】本記載の態様に従った、データをキャッシングするための技法を示すフローチャートである。
【
図12】本記載の態様に従った、データをキャッシングするための技法を示すフローチャートである。
【
図13】本記載の態様に従った、データをキャッシングするための技法を示すフローチャートである。
【
図14】本記載の態様に従った、データをキャッシングするための技法を示すフローチャートである。
【
図15】本記載の態様に従った、データをキャッシングするための技法を示すフローチャートである。
【
図16】本記載の態様に従った、データをキャッシングするための技法を示すフローチャートである。
【発明を実施するための形態】
【0035】
図1は、コンピュータシステム100のブロック図である。コンピュータシステム100は、レベル1(L1)データキャッシュなどのデータキャッシュ102を含む。データキャッシュ102は、キャッシュされたサブセットにアクセスする(例えば、読み取り及び/又は書き込みの)ために必要な時間を低減させるためのシステムのデータのサブセットを記憶する。最も一般的に用いられるデータを効果的にキャッシングすることによって、データキャッシュ102はシステム性能を著しく向上させ得る。
【0036】
データキャッシュ102は、一つ又は複数の処理リソース104(例えば、プロセッサコア)に及び拡張メモリ106に結合され得る。拡張メモリ106は、L2キャッシュなどの他のレベルのメモリ階層、ストレージデバイスなどを含む。データキャッシュ102は、処理リソース104と同じダイに組み込まれ得る(例えば、オンダイキャッシュ)か、又は別のダイ上にあり得る。いずれの場合も、キャッシュ102は、キャッシュ102と処理リソースとの間でのデータの交換に用いられる一つ又は複数のインターフェースによって、各処理リソース104に結合される。本例において、キャッシュ102は、スカラインターフェース及びベクトルインターフェースによって、各処理リソース104に結合される。複数のインターフェースを備える例において、1つのインターフェースがビジーな場合、コマンドは別のインターフェースを用いて処理され得る。例えば、スカラ読み取りコマンドがスカラインターフェースを介してキャッシュによって受け取られるとき、関連するデータは、インターフェース利用率、データサイズ、及び/又は他の考慮事項に基づいて、ベクトルインターフェースを介して処理リソース104に提供され得る。同様に、キャッシュ102は一つ又は複数のインターフェースによって拡張メモリ106にも結合され得る。複数のインターフェースが存在する場合、利用率、データサイズ、及び/又は他の考慮事項に基づいて、インターフェースが選択され得る。
【0037】
各インターフェースは任意の適切な幅を有し得る。インターフェースの幅は互いに異なり得るが、多くの例において、最も狭いインターフェースの整数倍である。1つのこうした例において、スカラインターフェースは64ビット幅であり、ベクトルインターフェースは512ビット幅であり、拡張メモリインターフェースは1024ビット幅である。
【0038】
インターフェースは双方向性又は単向性であり得る。双方向性インターフェースは、データが同時に送信及び受信できるように、2つの独立した単向性インターフェースを含み得る。1つのこうした例において、ベクトルインターフェースは2つの512ビット単向性バスを含み、1つは処理リソース104からデータ及び動作を受け取るためのものであり、1つはデータを処理リソース104に送信するためのものである。
【0039】
データキャッシュ102は、これらのインターフェースを介して受け取った動作を処理するためのいくつかのパイプラインを含み得る。
図2は、読み取り要求を処理するための簡略化されたキャッシュメモリパイプライン200を示すブロック図である。キャッシュメモリパイプライン200内に示されるように、プロセッサ202はメモリ要求をキャッシュメモリ204に送信する。キャッシュメモリ204はL1キャッシュとの文脈において記述されるが、本明細書で説明される概念は任意のタイプのキャッシュメモリに適用可能である。図示されていないが、場合によっては、メモリ要求はキャッシュ又はメモリコントローラを介して送信され得る。この例において、キャッシュメモリパイプラインは5つの段E1、E2、E3、E4、及びE5を含む。各キャッシュメモリパイプライン段には、完了するために特定数のクロックサイクルが割り当てられ得、いくつかの例では、キャッシュされたデータが、5つのクロックサイクルにおけるE5メモリパイプライン段の後、プロセッサ202に戻され得るように、各段には1つのクロックサイクルが割り当てられる。E1メモリパイプライン段において、キャッシュメモリ204によってメモリ要求が受け取られる。メモリ要求は、取り出されるべきデータのメモリアドレスを含む。E2パイプ段において、どのメモリアドレスが現在キャッシュメモリ内に記憶されているかを判定するために、タグランダムアクセスメモリ(RAM)206が読み取られる。タグRAM206は、メモリ208内のどのエントリが拡張メモリ内のどのメモリアドレスに対応するかを記録するテーブルを記憶する。タグRAMは、メモリアドレスのテーブルを保持するために用いられるバンク又はメモリの一部であり得る。場合によっては、キャッシュは、各キャッシュセットがNラインのメモリアドレスを保持することが可能なNウェイアソシアティブキャッシュであり得る。Nが増加するにつれて、検索されるアドレスの数も増加し、これにより、要求されたメモリアドレスがタグRAM内にあるかどうかを判定するために必要な時間量が増加する。E3メモリパイプライン段において、受け取ったメモリアドレスは、キャッシュヒット又はミスが存在するかどうかを判定するためにタグRAMから読み取られ記憶されたメモリアドレスと比較される。要求されたメモリアドレスに関連付けられたデータがキャッシュ内に記憶されたとき、キャッシュヒットが発生し、要求されたメモリアドレスに関連付けられたデータがキャッシュ内に記憶されないとき、キャッシュミスが発生する。E4メモリパイプライン段において、要求されたメモリアドレスに関連付けられたメモリ208の一部が読み取られ、E5メモリパイプライン段において、要求されたメモリアドレスはプロセッサ202に提供される。メモリ208は、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、レジスタなどの、キャッシュメモリに適した任意のタイプのメモリであり得る。パイプライン段は、どのようにメモリパイプラインが構成可能であるか、したがって、特定のサブステップ及び特徴を省くことが可能であるかを示す。特定の実装において、メモリアクセスなどの特定のアクティビティが行われる段は異なり得る。
【0040】
図3は、本記載の態様に従った、誤り訂正符号ストアキューを備える読み取り修正書き込みをサポートするキャッシュパイプライン300を示すブロック図である。パイプライン300は、(読み取り経路ラッチ302、タグRAM306、メモリ308などを備える)読み取り経路、及び(経路ラッチ304、ストアキュー314などを備える)書き込み経路を含む。
【0041】
読み取り経路に関して、パイプライン300はタグRAM306及びメモリ308(例えば、DRAM又は他の好適なメモリ)を含む。キャッシュは、任意の連想度を有し得、一例において、キャッシュはダイレクトマップキャッシュであり、各拡張メモリアドレスがキャッシュメモリ308内の1つのエントリに確実に対応するようになっている。
【0042】
場合によっては、キャッシュパイプライン300はECCのためのサポートを含み得、メモリ308は誤り検出及び訂正回路310に結合され得る。ECC例において、メモリ308は、ブロックに対応するECCシンドロームビットのセットと共にブロック内にデータを記憶する。読み取り動作が受け取られるとき、メモリ308は記憶されたデータブロック及び対応するECCシンドロームビットを誤り検出及び訂正回路310に提供し得る。誤り検出及び訂正回路310は、メモリ208から読み取られるデータブロックに基づいてECCシンドロームビットを再生成し得、再生成されたECCシンドロームビットを以前に記憶されたものと比較し得る。如何なる矛盾も、データブロックが不正確に読み取られた旨を示し得、ECCシンドロームビットはデータブロック内の誤りを訂正するために用いられ得る。誤りを検出及び訂正する能力により、キャッシュがミッションクリティカルな応用例に適合される。
【0043】
アービトレーションユニット312は、メモリ308の競合するアクセス間を調停するためにメモリ308に結合され得る。複数の動作が同じサイクル内でメモリ308にアクセスを試みるとき、アービトレーションユニット312は、優先方式に従って、どの動作がメモリ308へのアクセスを許可されるかを選択し得る。多くの異なる優先方式が用いられ得る。優先方式の一例として、パイプライン300内にある書き込みデータは、下記でより詳細に説明するように、たとえメモリ308に書き込まれる前であっても、例えばストアキュー314のデータ転送マルチプレクサ318を介して後続の動作によって用いられ得るため、アービトレーションは書き込み動作よりも読み取り動作を優先する。したがって、書き込みデータがパイプライン300内で待機できるようにする際の、性能への影響は最小限である。しかしながら、パイプライン300はまだ書き戻されていない書き込みデータで満たされるため、書き込み動作の優先度は、競合する読み取り動作よりも優先されるまで増加し得る。
【0044】
読み取り経路はストアキュー314と並行であり得る。読み取り動作は、まだ完了していない可能性のある書き込み動作におけるデータを指し得るため、パイプライン300は、読み取り経路が、メモリ308にまだ書き戻されていないストアキュー314からデータを取得できるようにする、書き込み転送機能を含み得る。一例において、パイプライン300は、ストアキュー314の各段において動作のアドレスを記録する保留ストアアドレステーブル316、ストアキュー314の段のうちの1つから転送するためのデータを選択するためのデータ転送マルチプレクサ318、及び、メモリ308の出力とデータ転送マルチプレクサ318から転送されたストアキュー314データとの間で選択するストアキューヒットマルチプレクサ320を含む。
【0045】
次に、パイプライン300を介した読み取り動作の例示のフローを説明する。段E1によって示される第1のサイクルにおいて、キャッシュは、データがキャッシュのメモリ308内に記憶されるかどうかを判定するために、読み取り動作のアドレスに関連付けられた記録をタグRAM306から取り出す。ダイレクトマップ例において、キャッシュは、メモリ308にデータを要求する前にタグRAM比較を待機する必要はなく、したがって、読み取り動作のアドレスとキャッシュされたアドレスの記録との間のタグRAM比較が第2(E2)又は第3(E3)のサイクル内へと拡張する必要はない。
【0046】
第2のサイクル、段E2において、アービトレーションユニット312が許可する場合、キャッシュはメモリ308にデータ及びECCシンドロームビットを要求し得る。このサイクルにおいて、キャッシュは、読み取りアドレスと保留ストアアドレステーブル316とを比較することによって、ストアキュー314でより新しいデータが使用可能であるかどうかを判定することもできる。使用可能である場合、データ転送マルチプレクサ318は、ストアキュー314から適切なデータを転送するように設定される。
【0047】
データ及びECCシンドロームビットは、段E3における第3のサイクルにおいて、メモリ308によって提供され得る。しかしながら、キャッシュは複数の拡張メモリアドレスをキャッシュのメモリ308内の同じエントリに割り当てることができるため、このデータは、読み取り動作によって特定されるメモリアドレスに対応する場合、又は対応しない場合がある。したがって、第3のサイクルにおいて、キャッシュは、メモリ308からの提供されたデータ及びECCが、読み取り動作におけるメモリアドレスに対応する(例えば、キャッシュヒット)かどうかを、タグRAM記録の比較に基づいて判定する。キャッシュヒットの場合、データ及びECCビットは、段E4における第4のサイクルにおいてデータ内の任意の誤りを訂正する誤り検出及び訂正回路310によって受け取られる。
【0048】
前述のように、まだメモリ308に書き込まれていないより新しいデータが、ストアキュー314内に存在し得、データ転送マルチプレクサ318によってストアキュー314から転送され得る。その場合、ストアキューヒットマルチプレクサ320は、メモリ308から訂正されたデータを介して転送されたデータを選択する。
【0049】
メモリ308からの訂正されたデータ、又はストアキュー314からの転送されたデータのいずれかが、段E5における第5のサイクルにおいて要求側プロセッサに提供される。このようにして、例示のキャッシュは、約5サイクルにおけるキャッシュヒットの場合、全ECCチェック及び訂正と共にプロセッサにデータを提供し得る。
【0050】
データ及びECCビットがメモリ308内に存在しない場合(例えば、キャッシュミス)、パイプライン300は、データを拡張メモリから取り出すことができるまで機能停止し得、その時点でデータをメモリ308に書き込み得、タグRAM306は、データの後続の読み取りがキャッシュ内でヒットするように更新され得る。
【0051】
キャッシュは、キャッシュからデータを読み取り、再書き込みする前にデータを変更する、いくつかの動作もサポートし得る。例えば、キャッシュは、読み取り修正書き込み(RMW)動作をサポートし得る。RMW動作は、既存のデータを読み取り、データの少なくとも一部を修正し、データのその部分を上書きする。ECC実施形態において、RMW動作は、フルバンク幅未満の書き込みの場合に実施され得る。書き込みがフルバンク幅ではない場合、書き込まれるデータの一部分のみに対してECC動作を実施する結果、不正確なECCシンドロームが生じ得る。そのため、上書きされることのないバンク内のデータの一部分は依然としてECCシンドロームビットに寄与するので、RWMの読み取り機能が用いられる。
【0052】
RMW動作は、書き込み動作及び読み取り動作に分けられ得、パイプライン300は、読み取り経路における読み取り動作が、ストアキュー314における書き込み動作と同期したままであるように構造化され得る。読み取り修正書き込みマージ回路322が、マージされたデータを作成するために読み取りデータの少なくとも一部を書き込みデータで上書きするまで、読み取り動作及び書き込み動作は同期されたままである。マージされたデータは、マージされたデータについて新しいECCシンドロームビットを生成するECC生成回路324に提供され、その後、マージされたデータ及びECCシンドロームビットは、メモリ308内に記憶するためにアービトレーションユニット312に提供され得る。
【0053】
次に、パイプライン300を介したRMW動作の例示のフローを説明する。動作の読み取り部分は、実質的に、上記の段E1~E4で説明したように進行し、キャッシュは読み取り動作のアドレスをタグRAM306の記録と比較し、キャッシュは、メモリ308及び/又はストアキュー314にデータ及びECCシンドロームビットを要求する。RMW動作はデータを修正するので、メモリ308内のエントリのMESI(修正済み、排他的、共有、及び無効)状態を追跡する例において、修正済み又は排他的状態のどちらでもないキャッシュヒットは、キャッシュミスと見なされ得る。データが適切な状態で取得され、如何なるエラーも訂正されたとき、サイクルE4(又はその後のキャッシュミスの場合)において、読み取り修正書き込みマージ回路322に提供される。この同じサイクルにおいて、読み取り修正書き込みマージ回路322は、マージされたデータを作成するために、訂正されたデータの少なくとも一部を書き込みデータで上書きし得る。ECC生成回路324は、段E5(又はその後のキャッシュミスの場合)において、マージされたデータについて新しいECCシンドロームビットを生成する。マージされたデータ及びECCシンドロームビットは、キャッシュメモリ308に書き込むためにアービトレーションユニット312に提供される。
【0054】
いくつかの例において、同じアドレスを指す順次RMW動作が受け取られる。以前のRMW動作からマージされたデータがメモリ308に書き込まれるのを待機するのではなく、ストアキュー314は、マージされたデータを、後続のRMW動作によって用いるためにストアキュー314の前の段にフィードバックすることができる、書き込み転送のためのアドレス比較器326を含み得る。これは、「ピギーバッキング」と称される。データは、ECC生成回路324の前又は後にフィードバックすることができる。フィードバックはRMW動作を効果的にマージするので、最終のRMW動作は、データ及びECCシンドロームビットの完全なセットを有する。したがって、時間的に前のRMW動作は、それらがメモリ308に書き戻される前に取り消され得る。これによって、旧式データの書き込みによって他の動作が機能停止するのを回避することができる。
【0055】
場合によっては、メモリ308はデータキャッシュの全体を表し得る。単なる例として、こうした実施形態において、データキャッシュ(L1データキャッシュであり得る)は単一ストアキュー構造314に関連付けられる。一例として、データキャッシュは256の行を含み得、各行は行当たり1024ビット(1Kb)を有する。
【0056】
他の例において、キャッシュは複数の独立にアドレス可能なバンクに分割され得、各個別のバンクはそれ独自のそれぞれのストアキュー構造314を有し得る。例えば、前述のデータキャッシュは、各行が1024ビットのライン幅を有する256の行を有するが、所与のバンクにおいて行当たり64ビットを備える16のバンクに分割される、実施形態を考えてみる。こうした実施形態では、データキャッシュの各バンクについて1つ、16のストアキューが存在することになる。したがって、読み取り及び書き込み動作は並行してバンクに送信され得、各バンクは、読み取り及び/又は書き込み動作に応答してそれ自体のプロセスを調停する。マルチバンクキャッシュの各バンクが独立に動作できるようにすることによって、要求が受け取られるときキャッシュライン全体はロックアップされないため、キャッシュの動作はより効率的である。むしろ、こうした要求を受け取ったバンクに割り当てられるキャッシュラインの一部のみがロックされることになる。もちろん、前述のキャッシュサイズは単なる一例であり、本記載は、いずれの特定のキャッシュライン幅、バンク又は行の数などにも限定されない。
【0057】
上記の例は、ベクトルデータの書き込み及び/又は読み取りにも有用である。例えば、ベクトルデータは512ビット幅であってよい。マルチバンクキャッシュの場合、キャッシュ内のヒットであるベクトルデータを含む書き込み要求は、8つのバンクへの8つの並列書き込みとして処理され得る(例えば、8×64ビット=512ビット)。同様に、こうしたマルチバンクキャッシュへの読み取り要求は、8つのバンクからの8つの並列読み取りとして実施可能である。
【0058】
キャッシュシステムの企図される実施形態に存在し得る別の特徴は、インフライト(inflight)転送及び無効化をサポートしている。例えば一例において、キャッシュは2ウェイセットアソシアティブキャッシュであるものと想定される。2ウェイセットアソシアティブ実装において、キャッシュ内の各キャッシュラインは、より高レベルのメモリ(例えば、L2キャッシュ又はメインシステムメモリ)内の2つの異なるアドレスにマッピングされ得る。
【0059】
本例では「ライン1」と称する所与のキャッシュラインが2ウェイセットアソシアティブキャッシュ内のキャッシュラインであり、「アドレスA」及び「アドレスB」と称するメモリ内の2つの異なるアドレスにマッピングする状況を考えてみる。次に、部分書き込み(例えば、フルキャッシュライン未満への書き込み)であり、下記のように、その後に読み取り要求が続く、第1の要求をキャッシュが受け取るものと仮定してみる。
【0060】
書き込み(アドレスA):データ1//データ1をアドレスAに対応するキャッシュラインに書き込む
【0061】
読み取り(アドレスB)// //アドレスBに対応するキャッシュラインに含まれるデータを読み取る
【0062】
本例において、書き込み要求がヒットであり、本例ではライン1であると想定するアドレスAに対応するキャッシュラインがキャッシュ内にあることを意味すると想定してみる。これに応答して、キャッシュシステムは、データ1をライン1に書き込むプロセスを開始することになる。
【0063】
これに続いて、読み取り要求がミスであると想定してみる。言い換えれば、ライン1は、この2ウェイセットアソシアティブキャッシュ内のアドレスA又はアドレスBのいずれかにマッピングされ得るが、この場合、現在はアドレスAにマッピングされている。したがって、アドレスBはタグRAM306内で見つからないため、ミスが発生する。ミスに応答して、キャッシュシステムは、L2キャッシュなどのより高レベルのメモリからデータを取り出そうとすることによってミスを処理し、本例で「データ2」と称するデータが戻されるとき、現在ライン1内のデータはデータ2を記憶するために追い出されることになる。これは、前の書き込みが完了する前に生じ得る。この場合、いずれにしてもライン1が追い出されることになるため、書き込み動作を完了する必要はない。したがって、「インフライト(inflight)」と称する書き込みの完了前に、書き込みを無効化することができる。
【0064】
アトミック比較及び交換などのアトミック動作は、読み取りを含むメモリ動作の更なる例である。アトミック比較及び交換動作は、書き込むべきアドレス、キー値、及び新しいデータのセットを提供することができる。アドレスにおける現在のデータはキーと比較され、それらが一致する場合、アドレスにおける現在のデータは新しいデータによって上書きされる。したがって、いくつかの例において、パイプライン300は、現在のデータがキー値と一致する場合、書き込みのために新しいデータの比較及び転送を実施するためのアトミック比較及び交換回路328を含む。アトミック比較及び交換回路328は、読み取り修正書き込みマージ回路322と並列に結合され得、どの出力がECC生成回路324に提供されるかを判定するために機能マルチプレクサ330が用いられ得る。
【0065】
次に、パイプライン300を介したアトミック比較及び交換動作の例示のフローを説明する。動作の読み取り部分は実質的に、前述のように段E1~E4において進行し、キャッシュは読み取り動作のアドレスをタグRAM306の記録と比較し、キャッシュは、メモリ308及び/又はストアキュー314からのデータ及びECCシンドロームビットを要求する。アトミック比較及び交換動作はデータを修正し得るため、メモリ308内のエントリのMESI状態を追跡する例において、修正済み又は排他的のいずれの状態でもないキャッシュヒットは、キャッシュミスと見なされ得る。データが適切な状態で取得されるとき、それは、段E4(又はその後のキャッシュミスの場合)において、アトミック比較及び交換回路328に提供される。これらのサイクルの間、新しいデータ及びキーは書き込み経路ラッチ304内に記憶され得る。段E4の間、アトミック比較及び交換回路328は訂正された読み取りデータ、キー、及び新しいデータを受け取り得る。訂正された読み取りデータがキーと一致する場合、アトミック比較及び交換回路328は新しいデータをECC生成回路324に提供する。アトミック比較及び交換回路328は、読み取りデータがキーと一致する場合、新しいデータの状態を修正済みに変更することもできる。ECC生成回路324は、段E5(又はその後のキャッシュミスの場合)において、新しいデータについて新しいECCシンドロームビットを生成する。新しいデータ及びECCシンドロームビットは、キャッシュメモリ308に書き込むためにアービトレーションユニット312に提供される。
【0066】
パイプライン300は、順次アトミック比較及び交換動作が受け取られるとき、RMW動作との文脈において説明したものと同様に、アドレス比較器326を用いて書き込み転送も実施し得る。
【0067】
既存のデータを読み取るメモリ動作の更なる例は、ヒストグラム動作を含む。ヒストグラム動作は、既存のデータに追加するか又は既存のデータから差し引くための値を特定し得る。ヒストグラム動作をサポートするために、パイプライン300は、読み取り修正書き込みマージ回路322及び/又はアトミック比較及び交換回路328と並列に結合される演算ユニット332を含み得る。演算ユニット332は、任意のサイズのオペランドをサポートし得、1つのこうした例において、演算ユニット332は64ビットバンクからの16ビット値の加算及び減算をサポートする。マルチプレクサ330は、演算ユニット332、読み取り修正書き込みマージ回路322、及びアトミック比較及び交換回路328間で選択するために用いられ得る。
【0068】
次に、パイプライン300を介したヒストグラム動作の例示のフローについて説明する。動作の読み取り部分は、実質的に、上記の段E1~E4で説明したように進行し、キャッシュは読み取り動作のアドレスをタグRAM306の記録と比較し、キャッシュは、メモリ308及び/又はストアキュー314からのデータ及びECCシンドロームビットを要求する。ヒストグラム動作はデータを修正するため、メモリ308内のエントリのMESI状態を追跡する例において、修正済み又は排他的状態のどちらでもないキャッシュヒットは、キャッシュミスと見なされ得る。データが適切な状態で取得されるとき、それは、段E4(又はその後のキャッシュミスの場合)において、演算ユニット332に提供される。これらのサイクルの間、訂正されたデータに追加されるべき値は、書き込み経路ラッチ304内に記憶され得る。段E4の間、演算ユニット332は、訂正された読み取りデータ、及び、読み取りデータに追加されるか又は読み取りデータから差し引かれるべき値を受け取り得る。演算ユニット332は、特定された加算又は減算を実施し、新しいデータをECC生成回路324に提供する。ECC生成回路324は、段E5(又はその後のキャッシュミスの場合)において、新しいデータについて新しいECCシンドロームビットを生成する。新しいデータ及びECCシンドロームビットは、キャッシュメモリ308への書き込みのためにアービトレーションユニット312に提供される。
【0069】
パイプライン300は、順次ヒストグラム動作が受け取られるとき、RMW動作との文脈において説明したものと同様に、アドレス比較器326を用いて書き込み転送も実施し得る。
【0070】
図3は、ストアキュー314、ラッチ302及び304、誤り検出及び訂正回路310などの単一インスタンスを備える単一パイプライン300を示す。しかしながら、前述のように、メモリ308はパイプライン300の複数の独立した複製をサポートするように配置され得る。したがって、パイプライン300は複数回再生成され得る。1つのこうした例において、メモリ308のエントリは、拡張メモリインターフェースの幅に基づいて1024ビットブロックであり、メモリ308は16の並列バンクに配置され、各1024ビットブロックは、16のバンクの各々における64ビットを含む。この特定の例において、16バンクの各々はそれ自体の独立したパイプライン300を有する。プロセッサからの読み取り又は書き込み動作がいくつかのバンクレベル動作に分割され、それらが同時に処理され得るように、各々がそのそれぞれのパイプライン300に提供される。例えば、512ビットベクトルの読み取り動作は、8つの64ビット読み取り動作に分割され得、並列に処理されるように8つの独立したパイプライン300に提供される。同時に、スカラインターフェース又は別のプロセッサのベクトルインターフェースを介して別の動作が受け取られ、残りのパイプライン300に提供される動作に分割される。したがって、データキャッシュは、複数の独立した動作を同時に処理することができ、各動作にはパイプライン300のサブセットが割り当てられる。
【0071】
場合によっては、キャッシュパイプライン300は犠牲キャッシュに結合され得る。犠牲キャッシュは、競合するミスに起因するものなどのキャッシュミス率を向上させる助けとなり得る。場合によっては、犠牲キャッシュは、Nウェイアソシアティブ数(例えば、キャッシュ連想度)を増加させることと同様に、キャッシュ性能に影響を与えることができる。ダイレクトマップキャッシュはしばしば最高の競合ミス率を有するため、この恩恵は、犠牲キャッシュがダイレクトマップキャッシュに追加される場合に、より明白であり得る。犠牲キャッシュの追加は、キャッシュ全体のヒット率を向上させる助けとなり得る。
【0072】
図4は、犠牲キャッシュを含むキャッシュアーキテクチャ400を示すブロック図である。ここで、キャッシュアーキテクチャ400は犠牲キャッシュ402に結合されたメインキャッシュ404を含み、犠牲キャッシュ402はメインキャッシュ404の後にある。データのラインを次レベルのキャッシュ(例えば、L2)に移動させるのではなく、データのラインがメインキャッシュ404から追い出されるとき、データのラインは犠牲キャッシュ402に移動され、容量又は他の理由に起因するようなこれを追い出す理由があるまで、そこで保持される。こうしたキャッシュアーキテクチャ400において、メインキャッシュ404からのキャッシュミスの場合、犠牲キャッシュ402はミスを処理し、ラインをプロセッサ414に戻すことが可能であり、読み取りミスに対して経験されるレイテンシ全体を減少させる。
【0073】
一例として、プロセッサ414がメインキャッシュ404及び犠牲キャッシュ402内のアドレスAへのアクセスを試行し、キャッシュミスを生じさせるものと想定する。次いでメインキャッシュ404は、メインキャッシュ404からアドレスBを追い出し、犠牲キャッシュ402内に犠牲キャッシュ(アドレスB)ラインを作成することができる。次いで、アドレスAの読み取りミスは、L2キャッシュ、別のキャッシュ、及び/又は他のメモリなどの、処理されるべきより高レベルのメモリ412へと向かう406。アドレスAがアクセスされると、アドレスAのコンテンツは戻され410、メインキャッシュ404内に記憶され得る。
【0074】
アドレスBに対する後続のアクセス試行が発行される場合、メインキャッシュ404はアドレスBがキャッシュされるかどうかを調べるためにチェックされ、結果としてキャッシュミスが生じる。次いで犠牲キャッシュ402が、チェックされ408、アドレスBが、メインキャッシュ404から追い出された後、犠牲キャッシュ402内に記憶された場合、ヒットを戻す。次いでアドレスBは、メインキャッシュ404にリストアされ、結果としてプロセッサ414に戻され得る。こうしたシステムにおける読み取りレイテンシは、より高レベルのメモリ414(例えば、L2キャッシュ、メインメモリなど)からアドレスをフェッチしなければならない場合に比べて高速であるが、メインキャッシュ404においてキャッシュヒットが存在するときのレイテンシに比べて依然として大きい。
【0075】
犠牲キャッシュをメインキャッシュの後に置くキャッシュアーキテクチャにおいて経験されるレイテンシに対処するのを助けるために、場合によっては、犠牲キャッシュをメインキャッシュと並行に置くことができる。
図5は、本記載の態様に従った、並列犠牲キャッシュを含むキャッシュアーキテクチャ500を示すブロック図である。キャッシュアーキテクチャ500は、複数のサブキャッシュを並列に有するものと考えられる。メインキャッシュ502及び犠牲キャッシュ504の各々は、それら自体の独立した連想度を有し、キャッシュシステム500全体は、ハイブリッド式キャッシュシステムの外観を有し得る。場合によっては、メインキャッシュ502又は犠牲キャッシュ504のいずれかがnウェイアソシアティブであり得、他方のキャッシュがフルアソシアティブであり得る。この例では、メインキャッシュ502はダイレクトマップ(1ウェイアソシアティブ)キャッシュであり得、犠牲キャッシュ504はフルアソシアティブであり得る。
【0076】
この例において、プロセッサ514が、メインキャッシュ502でミスするアドレスAに読み取りを発行する場合、ミス要求は処理のために高レベルキャッシュ512へと向かい、ここではアドレスBである犠牲ラインは、犠牲キャッシュ504へと移動される。次に、プロセッサ514はアドレスBの読み取りを望むと想定してみる。この例では、読み取りのアドレスは、メインキャッシュ502及び犠牲キャッシュ504の両方に対して並行してチェックされる。この結果、メインキャッシュ504内に読み取りミスが生じるが、犠牲キャッシュ502内にヒットが生じる。次いで、アドレスBについての読み取り結果は、犠牲キャッシュ504からプロセッサ514へ直接戻され得る。両方のキャッシュは並行してチェックされるため、読み取りレイテンシは、読み取り要求がメインキャッシュ502においてヒットであった場合と同じままである。犠牲キャッシュをメインキャッシュに並行に有することの全体的な効果は、後続のCPUアクセスが犠牲キャッシュをヒットする場合のレイテンシに影響を与えることもなく、キャッシュミス率を減少させる恩恵を得ることである。
【0077】
図6は、本記載の態様に従った、犠牲キャッシュメモリパイプライン600を示すブロック図である。前述のように、犠牲キャッシュはフルアソシアティブキャッシュであり得、マッピングアドレス及びキャッシュラインは存在しないことを意味する。むしろ、犠牲キャッシュのいずれかのキャッシュラインにいずれかのアドレスが記憶され得る。したがって、E1段でブロック602において受け取られるアドレスの場合、E2段で受け取られたアドレスは、犠牲キャッシュタグRAM604において各ロケーションに記憶されたアドレスに照らしてチェックされる。場合によっては、犠牲キャッシュタグRAM604におけるこれらのロケーションは、犠牲キャッシュ606のラインに対応する。例えば、アドレスAがブロック602で受け取られる場合、一致が存在するかどうかを調べるために、アドレスAは犠牲キャッシュタグRAM604におけるアドレスに対して比較される。例えば、犠牲キャッシュタグRAM604のロケーション5がアドレスAに対応する場合、アドレスAに対応するデータは犠牲キャッシュ606のアドレス5に記憶される。このデータは最終的にブロック608でプロセッサに戻される。
【0078】
犠牲キャッシュがメインキャッシュと並行に動作する場合、犠牲キャッシュにとって、ECC及びRMW動作などのメインキャッシュの特定の機能をサポートすることが望ましい場合がある。場合によっては、犠牲キャッシュは、
図3に関連して説明したストアキュー314と同様の様式で、RMW及びECC動作のサポートを助けるためのストアキュー610構造を含むこともできる。
【0079】
場合によっては、キャッシュは書き込みミスバッファを含み得る。書き込みミスは、キャッシュ内にないメモリアドレスに対して、メモリ書き込みがキャッシュに発行されるときに生じる可能性がある。メモリ書き込みはアトミック動作であり得、メモリ書き込みを発行したプロセッサは、メモリ書き込み完了メッセージがプロセッサに戻されるまで機能停止し得る。より高レベルのメモリへの書き込みが完了するまでプロセッサを機能停止させるのではなく、キャッシュは、メモリ書き込みを書き込みミスバッファ内に記憶し得、メモリ書き込みは完了した旨の指示を戻す。書き込みミスバッファはこの情報を、その後、メモリ書き込みをターゲットメモリアドレスに出力(例えば、ドレイン)する。ターゲットメモリアドレスへのメモリ書き込み出力が完了すると、メモリ書き込みは書き込みミスバッファから除去される。メモリ書き込みを出力するために、書き込みミスバッファは、書き込みのためのメモリアドレス、対応するデータ、及びメモリ書き込みのためのバイトイネーブル(byten)マスクの、各メモリ書き込みについての3つの情報を含み得る。概して、バイトイネーブル論理又はマスクは、書き込むべきメモリラインの一部を定義する。しばしば、書き込みミスバッファは、専用バッファ回路要素を先入れ先出し(FIFO)バッファとして用いて実装される。しかしながら、FIFO書き込みミスバッファは、多かれ少なかれ連続的により高レベルのメモリにドレインするように構成されて、書き込みマージングなどの機能はサポートしないことが多い。場合によっては、書き込みミスバッファは、犠牲キャッシュを用いてキャッシュシステム内に割り当てられ得る。
【0080】
図7は、本記載の態様に従った、書き込みミスバッファを含む犠牲キャッシュパイプライン700を示すブロック図である。前述のように、書き込みミスバッファは、書き込みのためのメモリアドレス、書き込むべきデータ、及びbyten論理を記憶することができる。この例示の犠牲キャッシュパイプライン700において、書き込みミスバッファエントリのためのメモリアドレスは、犠牲キャッシュタグRAM704内に記憶され得、対応するデータは犠牲キャッシュRAM706内に記憶され得る。バイトイネーブルメモリ702はまた、書き込みミスバッファラインに関連付けられたbyten論理を記憶するために、犠牲キャッシュに追加され得る。場合によっては、MESI RAM732は、犠牲キャッシュRAM706内のエントリに関連付けられたラインタイプ708を示す追加ビットを含むように修正され得る。ラインタイプ708は、犠牲キャッシュRAM706の特定ラインがキャッシュラインであるか又は書き込みミスバッファラインであるかを示す。場合によっては、ラインタイプ708は、MESI RAM718ではなく犠牲キャッシュタグRAM704などの別のメモリに追加され得る。
【0081】
また、犠牲キャッシュシステムは、例えば
図6に関連して説明したように、犠牲キャッシュ内部の書き込みミスエントリの割り当てに対処するための読み取り及び書き込みミス状態マシン内の制御論理、並びに、犠牲キャッシュ内部の書き込みミスエントリと同じラインへの読み取りなどの場合に、様々なアドレスハザードの扱いをサポートするための論理(選択的書き込みミスフラッシュ)、及び犠牲キャッシュのデータパス内の同じアドレスロード/ストアの解決をサポートするための論理を追加することによって、書き込みミスバッファとして構成され得る。RMWのためのサポート、及び、書き込みミスのためのECCサポートを可能にするために、ストレージキュー710構造も提供され得る。場合によっては、RMWのサポート、及び、書き込みミス動作並びにキャッシュ動作のECCサポートを可能にするためにストレージキュー710を用いることができる。
【0082】
キャッシュにおいて書き込みミスバッファ動作を実施する一例として、書き込みがブロック712で受け取られるとき、書き込みのアドレスは、犠牲キャッシュタグRAM704内の各ロケーションに記憶されたメモリアドレスに照らしてチェックされる。書き込みミスは、書き込みのアドレスが犠牲キャッシュタグRAM704内に見つからないときに発生する。書き込みミスキャッシュとして動作するとき、犠牲キャッシュ内のどこに書き込みミスを記憶するかが判定される。場合によっては、この判定は、犠牲キャッシュタグRAM704内のエントリに基づいて行われ得る。犠牲キャッシュタグRAM704内に空きロケーションがある場合、書き込みミスのアドレスは、空きロケーションにおける犠牲キャッシュタグRAM704内に記憶される。空きロケーションがない場合、書き込みミスバッファスペースを割り当てるために、エビクション方式に基づいてラインが追い出され得る。その他の場合、ラインはあらかじめ書き込みミスバッファ又はキャッシュラインとして用いられている可能性がある。書き込みミスの犠牲キャッシュタグRAM704内のロケーションに対応するラインタイプ708は、ロケーションが書き込みミスバッファとして用いられている旨を示すように更新され得る。例えば、ラインタイプ708における0は、対応するラインがキャッシュエントリである旨を示し得、ラインタイプ708における1は、対応するラインが書き込みミスバッファエントリである旨を示し得る。場合によっては、ラインタイプ708は、MESI RAM732などの別のメモリロケーション内、又はレジスタのセットなどの専用メモリスペース内に記憶され得る。書き込みミスのデータは、用いられる犠牲キャッシュタグRAM704に対応する犠牲キャッシュRAM706のライン内に記憶される。バイトイネーブル論理は、バイトイネーブルメモリ702の対応するスロット内に記憶され得る。場合によっては、バイトイネーブルメモリ702は、バイトイネーブルメモリ702のどの位置が有効であるかを示すビットを含み得る。ラインタイプビットは、犠牲キャッシュRAM706の一部を書き込みバッファ専用とする必要なしに、犠牲キャッシュRAM706のライン内に書き込みミスエントリを記憶できるようにするのを助ける。
【0083】
本記載の態様によれば、例えばエビクションコントローラ714における犠牲キャッシュエビクション論理は、ストアキャッシュエントリに有利に書き込みミスエントリを追い出すことを優先させるために、犠牲キャッシュ内に記憶された書き込みミスエントリを扱うように更新され得る。また、犠牲キャッシュコントローラ734の読み取り及び書き込み状態マシンのための制御論理は、入来する読み取り要求が、書き込みミスを記憶するように構成された犠牲キャッシュのキャッシュラインをヒットする可能性があると判定するように構成され得る。このような場合、犠牲キャッシュコントローラ734は、この読み取りヒットを読み取りミスのように処理し、記憶された書き込みミスコマンドをより高レベルのメモリへと追い出した後、読み取りミスをより高レベルのメモリへ送信するように構成され得る。また、キャッシュシステムはミスで機能停止するように構成されることが多いが、書き込みミスバッファは、プロセッサが書き込みミスをバッファに入れるため、プロセッサを機能停止させないことが多い。この相違に対処するのを助けるために、犠牲キャッシュコントローラ734は、書き込みミスであっても犠牲キャッシュを機能停止させることなく、データを犠牲キャッシュ内に直接記憶することができるように、入来する書き込みデータを推論的に読み取ることによって、CPUを機能停止させずに、犠牲キャッシュに書き込みミスエントリを割り当てるように構成され得る。
【0084】
場合によっては、書き込みミスをキャッシュシステム内に置くことによって、書き込みミスは、それらをより高レベルのメモリへ追い出す要件が存在するまで、キャッシュされたままとし得る。場合によっては、犠牲キャッシュ内に記憶される書き込みミスは、定義された条件に合致するまで、フェンス動作が要求されるまで、又は、特定の書き込みミスエントリを追い出す必要のあるアドレス/ハードウェア競合が存在するまで、キャッシュシステム内にとどまり得る。
【0085】
明示的フェンス動作が要求されるまで書き込みミスバッファを維持することは、動作の終わりにフェンス動作が生じない場合、問題であり得、犠牲キャッシュ内に記憶されるいずれかの書き込みミスが犠牲キャッシュ内から抜け出せなくなる可能性がある。また、フェンス動作のみに応答した書き込みミスバッファストアのフラッシュアウト(例えば、すべての追い出し)は、キャッシュが、記憶された書き込みミスを適切なメモリにドレインした後、戻すための肯定応答を待機する必要があり、遅延を生じさせる可能性があるため、フェンス動作からのレイテンシの問題が存在する可能性もある。場合によっては、犠牲キャッシュ内に記憶された書き込みミスエントリの自動フラッシュ又はドレインが提供され得る。自動フラッシュは、ドレインプロセスにおいて被り得る潜在的レイテンシを減少させながら、犠牲キャッシュからの書き込みミスエントリのドレインを助けるために実装され得る。場合によっては、エビクションコントローラ714がプロセッサインターフェース上のアクティビティを監視し得る。エビクションコントローラ714がプロセッサインターフェース上のアイドルアクティビティを検出した場合、エビクションコントローラ714は、犠牲キャッシュからの書き込みミスエントリのドレインの開始へ進む。例えば、エビクションコントローラ714が、N個のクロックサイクルの間、プロセッサがいずれのコマンドも発行していない旨を検出した場合、エビクションコントローラ714は、犠牲キャッシュ内部にキャッシュされたストアのドレインを開始するための自動フラッシュプロセスを内部で開始し得る。場合によっては、Nは事前に判定され得る。他の場合、Nは構成可能であり得る。場合によっては、自動フラッシュプロセスは、書き込みミスエントリを探し、書き込みミスエントリに対応するエントリをフラッシュする、VTagRAMを進む(例えば、順に検査する)ことができる。他の場合、自動フラッシュプロセスは、FIFO、LRU(least recently used)、ランダム、又はその他のものに基づいて、エントリをフラッシュするための論理を含み得る。
【0086】
書き込みミスエントリの自動フラッシュにおいて、エビクションコントローラ714は、選択された書き込みバッファキャッシュラインについて、エビクショントリガ要求を犠牲キャッシュコントローラ734に送信し得る。犠牲キャッシュコントローラ734は、フラッシュされるべき書き込みバッファキャッシュに対応するストアキュー内にいずれかのエントリが存在するかどうかを調べるために、ストアキューをチェックする。ストアキュー内に対応するエントリが存在する場合、犠牲キャッシュコントローラ734はストアキューが完了するのを待機することができる。ストアキューが空になると、犠牲キャッシュコントローラ734は選択されたキャッシュラインを追い出すことができる。犠牲キャッシュコントローラ734は、より高いレベルのキャッシュ又は他のメモリに送信されるべきストアミスパケットの作成をセットアップする。これらのストアミスパケットは、犠牲キャッシュタグRAM704内に記憶された対応するメモリアドレス、バイトイネーブルメモリ702内のバイトイネーブル論理、及び犠牲キャッシュRAM706内のデータを含み得る。次いで犠牲キャッシュは、例えばより高いレベルのキャッシュ又は他のメモリのキャッシュコントローラに、ストアミスパケットを送信することができる。書き込みミスエントリをフラッシュするとき、書き込みミスパケットを他のメモリに送信し、犠牲キャッシュRAM706、犠牲キャッシュタグRAM704、及びバイトイネーブルメモリ702内の対応するエントリを無効化することができる。書き込みミスパケットは、書き込みミスパケットが他のメモリによって受け入れられる(例えば、肯定応答される)まで、ドレインバッファ716内に一時的に置くことができる。書き込みミスバッファキャッシュラインが無効化されると、エビクションコントローラ714は、追い出すための次の書き込みミスバッファキャッシュラインを選択して、次の書き込みミスバッファキャッシュラインの追い出しに進み得る。続いて、プロセッサインターフェース上でアクティビティが検出された場合、この自動フラッシュ動作は取り消され得る。そのようにすることによって、犠牲キャッシュは、インターフェース上にアクティビティが存在するとき、書き込みミスバッファエントリのドレインを試行することによって、アイドル期間を利用してプロセッサ性能に影響を与えることを回避することができる。
【0087】
場合によっては、キャッシュラインが割り当てられる順序に基づくFIFO、LRU、ランダム、又は他の方式ではなく、特定の書き込みミスを記憶する書き込みミスラインの状態に基づいて、犠牲キャッシュ内に記憶された書き込みミスを追い出すことができる。キャッシュ内のデータをマージするようにキャッシュが構成される場合、プロセッサからメモリラインへのキャッシュ書き込みは、プロセッサがメモリラインの他の部分からの読み取りを必要とすることを示唆しない。更に、プロセッサがメモリラインの半分又はメモリライン全体などのメモリラインの大部分を書き出している場合、プロセッサがメモリラインの小部分のみを書き出している場合に比べて、プロセッサは、メモリラインのその部分に(追加のデータをマージするなど)再度アクセスする必要がある可能性は低い。プロセッサは、半分又はフルの書き込みミスキャッシュラインを書き出した後、所与の書き込みミスキャッシュラインにアクセスする必要がある可能性は低いため、この書き込みミスキャッシュラインは、性能への潜在的影響は少ない状態で追い出され得る。したがって、書き込みミスキャッシュラインが完全に書き込まれるか又は半分書き込まれ、別の書き込みミスキャッシュライン上の犠牲キャッシュ内の次のエントリで書き込みが開始されると、フル又はハーフフルのキャッシュラインを追い出すことができる。これは、プロセッサが集合的に犠牲キャッシュよりも大きいキャッシュ書き込みミスのストリームを発行している場合に対処するのを助ける。また、フル又はハーフフルの書き込みミスキャッシュラインを積極的に追い出すことは、犠牲キャッシュ内に記憶された多数の書き込みミス項目が、動作の終わりのフェンス動作に起因してすべて一度にフラッシュされるときに生じ得る性能の問題を回避するのも助ける。
【0088】
フル又はハーフフルの書き込みミスキャッシュラインの除去をサポートするのを助けるために、バイトイネーブルメモリ702は、ハーフフルラインステータスビット718及びフルラインステータスビット720の、2つのステータスビットを含み得る。バイトイネーブルメモリ702の各ラインは犠牲キャッシュRAM706内のキャッシュラインに対応し、バイトイネーブルメモリ702の各ラインは、ハーフフルラインステータスビット718及びフルラインステータスビット720を含み得る。これらのステータスビットは、書き込みミスバッファとして構成されるキャッシュライン内にビットが書き込まれる各書き込みサイクルで更新され得、ステータスビットは、犠牲キャッシュRAM706の対応するライン内にすでに記憶されたビット、並びに、書き込みサイクル内に犠牲キャッシュRAM706に書き込まれるビットに基づいて計算され得る。場合によっては、この更新は、各サイクルについてバイトイネーブルメモリ702の各キャッシュラインに対して実施され得、書き込みサイクルがない場合、更新は省略され得る。前述のように、バイトイネーブルメモリ702の各ラインは、バイトイネーブルメモリ702のどの位置(例えば、バイト)が有効である(例えば、書き込まれる)かを示す、ビットマスクを含み得る。どのラインがフル又はハーフフルであるかを判定することは、ビットマスクの対応する部分にわたるXORを用いて実施可能である。ハーフフルラインステータスビット718は、所与のキャッシュラインの半分が、最下位ビット又は最上位ビットのいずれかに書き込まれたときに設定され得る。同様に、フルラインステータスビット720は、キャッシュライン全体が書き込まれたときに設定され得る。次いでフル又はハーフフルキャッシュラインを有するアドレスを戻すために判定するために、キャッシュラインを進む(例えば、例えば、順に検査する)ことができる。場合によっては、フルキャッシュラインに対応するアドレスがまず選択され、ハーフフルキャッシュラインに対応するアドレスは、フルキャッシュラインがない場合に戻される。複数のキャッシュラインがフル(又は、フルキャッシュラインがない場合はハーフフル)の場合、キャッシュラインを進むときにフル(又はハーフフル)であることがわかった第1のキャッシュラインが選択され得る。フル又はハーフフルのキャッシュラインがない場合、書き込みミスキャッシュラインは、複数のラインが使用可能な場合にどのキャッシュラインを選択するかを判定するために用いられ得る、FIFO、LRU、又は他の論理に基づいて選択され得る。
【0089】
書き込みミスエントリを追い出すことは、この動作が読み取り又は書き込みミスによって初期化され、ラインが書き込まれた後に実施されるため、追い出されているフル又はハーフフル書き込みミスキャッシュラインに対応するエントリが存在するかどうかを調べるためにストアキューがチェックされないことを除いて、自動フラッシュと同様に動作し得る。フル又はハーフフル書き込みミスキャッシュラインがエビクションのために選択されると、エビクションコントローラ714は、選択されたキャッシュラインを追い出すように犠牲キャッシュコントローラ734に示す。犠牲キャッシュコントローラ734は、より高いレベルのキャッシュ又は他のメモリに送信されるべきストアミスパケットの作成をセットアップする。これらのストアミスパケットは、犠牲キャッシュタグRAM704内に記憶された対応するメモリアドレス、バイトイネーブルメモリ702内のバイトイネーブル論理、及び犠牲キャッシュRAM706内のデータを含み得る。ストアミスパケットは、例えば、より高いレベルのキャッシュ又は他のメモリのキャッシュコントローラに送信され、犠牲キャッシュRAM706、犠牲キャッシュタグRAM704、及びバイトイネーブルメモリ702内の、対応するエントリが無効化され得る。ストアミスパケットは、ストアミスパケットが他のメモリによって受け入れられる(例えば、肯定応答される)まで、一時的にドレインバッファ716内に置かれ得る。
【0090】
書き込みミスキャッシュラインが無効化されると、キャッシュラインのアドレスは、各書き込みサイクルで置換ポリシー論理722に送信され得る。使用可能なキャッシュラインアドレスは、置換アドレスライン726内のmux724内に供給され得る。アドレス生成ライン728は、受け取った書き込み命令に割り振られたアドレスを含み得る。ヒット/ミス論理730が、受け取った書き込み命令のアドレスがヒットであると判定する場合、アドレスは犠牲キャッシュのライン内に既に記憶され、書き込み命令からのデータはラインにマージされる。ヒット/ミス論理730が、受け取った書き込み命令のアドレスがミスであると判定する場合、置換アドレスライン726からのアドレスが、書き込みミスコマンドを犠牲キャッシュ/書き込みミスバッファに書き込むために用いられ得る。犠牲キャッシュ/書き込みミスバッファ内に書き込みミスを割り当てるための空のキャッシュラインがない場合、エビクションプロセスがトリガされ得る。エビクションプロセスにおいて、集約コントローラが、犠牲キャッシュ内に記憶される必要のある書き込みミスが受け取られた旨を検出し得る。集約コントローラは、使用可能なキャッシュラインが存在することを保証するように、犠牲キャッシュコントローラ734に命じることができる。このキャッシュラインは、置換アドレス726又はアドレス生成728のいずれかによって提供されるロケーションに基づき得る。識別されたロケーション内に記憶された書き込みミスが既に存在する場合、書き込みミスは追い出され得る。
【0091】
図8は、本記載の態様に従った、MESI RAM800のブロック図である。MESI RAM800は、対応するキャッシュラインのMESIステータスを追跡するために用いられる、メモリ(例えば、SRAM)、又はレジスタのセット(例えば、レジスタファイル)であり得る。一例として、犠牲キャッシュは、場合によっては、書き込みデータの一部としてキャッシュエントリについて、MESI RAM800内のMESI状態ビット802内のMESI状態を追跡することができる。場合によっては、MESI RAM800は、対応するキャッシュ、ここでは犠牲キャッシュ、の各ラインに対応するラインを含む。メインキャッシュは、対応するMESI RAMを含み得る。場合によっては、単一のMESI RAMは、メインキャッシュ及び犠牲キャッシュの両方によって共有され得る。MESI RAM800は、犠牲キャッシュ内に記憶された各キャッシュラインのMESI状態を追跡するためのビットのセットを有し得る。場合によっては、MESI RAM800は、犠牲キャッシュ内のキャッシュラインの他の状態を追跡するために、追加のビットで拡張され得る。MESI RAM800は、追加の状態についての追加の列を含めることによって、追加の状態を追跡するために拡張され得る。この例において、MESI RAMは、各キャッシュラインについての特権レベル804、赤タグ806、青タグ808、ラインが有効であるかどうか810、及び、ラインが書き込みミスバッファ又は犠牲キャッシュラインであるかどうか812を追跡するために、ビットフィールド内に状態ビットを含めるように拡張されている。MESI RAMの一部として示されているが、状態ビットは、タグRAM704などの他の実施形態における他のメモリ内、又は完全に別のメモリ内に、置かれ得ることに留意されたい。MESI RAMは、ここには示されていない追加の状態を追跡するように構成され得る。
【0092】
場合によっては、犠牲キャッシュ内に記憶された或るタイプのすべての書き込みミスバッファエントリをフラッシュすることが有用であり得る。下記で説明するように、書き込みミスバッファ内のエントリは「カラー」タグに関連付けられ得る。このカラータグは、ビットが書き込みミスバッファエントリに対して設定されるとき、書き込みミスバッファエントリに関連付けられた色は「青」であり得、ビットが設定されていないか又は別のビットが設定されるとき、書き込みミスバッファエントリは「赤」であり得るように、一つ又は複数のビットによって表され得る。タグ付けは、特定の書き込みミスバッファエントリを、プロセッサ上で実行している特定のプロセスに関連付けることを可能にするのを助け、他の書き込みミスバッファエントリは、プロセッサ上で実行している別のプロセスに関連付けられ得る。場合によっては、プロセッサは、特定のプロセス(例えば、選択的フェンス動作)に関連付けられたすべての書き込みミスバッファエントリをフラッシュするが、別のプロセスに関連付けられた書き込みミスバッファエントリはフラッシュしないことを望む場合がある。
【0093】
選択的フェンス動作を実施するために、プロセッサはドレイン信号をアサートし得る。アサートされたドレイン信号と共に、プロセッサは、赤又は青のいずれかのタグをドレインするために、特定のタグを優先させるべきである旨の指示を提供し得る。
図7に戻ると、ドレイン信号はエビクションコントローラ714に渡される。エビクションコントローラ714は、より高いレベルのキャッシュ又はメモリがビジーであるかどうかを調べるために、より高いレベルのキャッシュ又はメモリの可用性をチェックし得る。より高いレベルのキャッシュ又はメモリが使用不可である場合、エビクションコントローラ714はプロセッサの機能を停止し得る。より高いレベルのキャッシュ又はメモリが使用可能である場合、エビクションコントローラ714は、優先タグを示すエビクショントリガ要求を犠牲キャッシュコントローラ734に送信し得る。次いで犠牲キャッシュコントローラ734は、犠牲キャッシュRAM706の任意のバンクに対するストアキュー内の任意の未処理のエントリが存在するかどうかを調べるために、ストアキューをチェックし得る。犠牲キャッシュコントローラ734は、ストアキューのドレインの優先度を上昇させるようにストアキュー710に示すこともできる。例えばストアキュー内に、まだ犠牲キャッシュ内に記憶されていないデータが存在する場合、エビクションコントローラ714は、ストアキュー710が完了するのを待機し得る。ストアキュー710が空になると、エビクションコントローラ714は、選択されたキャッシュラインを追い出すように犠牲キャッシュコントローラに示す。犠牲キャッシュコントローラ734は、より高いレベルのキャッシュ又は他のメモリに送信すべきストアミスパケットの作成をセットアップする。これらのストアミスパケットは、犠牲キャッシュタグRAM704内に記憶された対応するメモリアドレス、バイトイネーブルメモリ702内のバイトイネーブル論理、及び犠牲キャッシュRAM706内のデータを含み得る。次いで犠牲キャッシュは、ストアミスパケットを、例えばより高いレベルのキャッシュ又は他のメモリのキャッシュコントローラに送信することができる。書き込みミスエントリをフラッシュするとき、書き込みミスパケットは他のメモリに送信され得、犠牲キャッシュRAM706、犠牲キャッシュタグRAM704、及びバイトイネーブルメモリ702内の対応するエントリは無効化され得る。書き込みミスパケットは、書き込みミスパケットが他のメモリによって受け入れられる(例えば、肯定応答される)まで、一時的にドレインバッファ716内に置かれ得る。このフラッシングは、プロセッサがドレイン信号のアサートをやめるまで続行する。プロセッサが、示されたカラーのすべての書き込みミスバッファエントリがドレインされる前にドレイン信号のアサートを停止する場合、ドレイン信号がアサートを停止するときにドレインプロセスにおいて犠牲キャッシュがどこにあっても、書き込みミスバッファのドレインは停止する。示されるカラータグのすべての書き込みミスバッファエントリがドレインされると、アイドル信号がプロセッサにアサートバックされる。プロセッサがドレイン信号のアサートを続行する場合、他のカラータグに関連付けられた他の書き込みミスバッファエントリはドレインされ得る。
【0094】
キャッシュシステム内に書き込みミスを置くことは、既にキャッシュシステム内にある書き込みミスに追加の書き込みミスをマージさせるための機会を与えるのを助ける。書き込みミスはキャッシュ内により長くとどまるため、キャッシュは、キャッシュシステム内に既に存在する書き込みミスに任意の将来の書き込みミスをマージさせるための機会を有し、したがって、より高いレベルのメモリへの書き込みミストラフィックは減少する。より高いレベルのメモリに送信される書き込みミスを減少させることで、それらのメモリにかかる圧力を減少させ、全体的な性能を向上させるのを助けることができる。
【0095】
書き込みマージは、ブロック712において、プロセッサが第2の記憶又は書き込みコマンドを特定のアドレスに対して発行するときに発生し得る。犠牲キャッシュがフルアソシアティブである場合、第2の書き込みのアドレスは、ヒット/ミス論理730によって、犠牲キャッシュタグRAM704内の各ロケーションに記憶されたメモリアドレスのセットに照らしてチェックされ得る。並行して、書き込みミスの場合、書き込みトランザクションが割り当てられ得る犠牲キャッシュ内部のロケーションを置換ポリシー722論理が判定する。概して、書き込みミスが犠牲キャッシュ内に記憶されるとき、書き込みミスは、たとえ書き込みミス内のデータがキャッシュライン全体を必要としない場合であっても、キャッシュライン全体が割り当てられる。したがって、メモリアドレスのセットは、書き込みミスにおけるメモリアドレス、並びに、書き込みミスにおけるメモリアドレスの前、後、又は前と後の両方のいずれかのメモリアドレスのセットを含む、犠牲キャッシュ内に記憶された各書き込みミスに関連付けられ得る。第2の書き込みのアドレスは、犠牲キャッシュ内に記憶された書き込みミスに関連付けられたメモリアドレスのセット内にあるものと判定される場合、キャッシュヒットが検出され、ヒット/ミス論理は、書き込みミスが現在記憶されている犠牲キャッシュ内のロケーションを戻す。E3パイプ段において、第2の書き込みに関連付けられたカラータイプ及び特権レベルは、例えば犠牲キャッシュコントローラ734によって、現在記憶されているカラータイプ及び特権レベルとマージされ、MESI RAM732はが更新される。場合によっては、特権レベルをマージすることは、特権マージテーブル736に関連して実施され得る。第2の書き込みのデータは、例えば、犠牲キャッシュコントローラ734によって、第2の書き込みに関連付けられたバイトイネーブル論理に基づいて更新された、犠牲キャッシュRAM706の対応するライン、及びバイトイネーブルメモリ702の対応するエントリにもマージされる。場合によっては、ストアキュー710は書き込みマージの機能性も含み得る。例えば、連続書き込みが同じアドレスに発行されるとき、ストアキュー710は、それらを内部でマージし得、犠牲キャッシュRAM706に発行する書き込みの数を最小限にするのを助ける。
【0096】
場合によっては、書き込みのマージは、特権レベルにわたって実施され得る。特権レベルのマージは、書き込みマージを実施するときに実施され得る。例えば、犠牲キャッシュ内に記憶される第1の書き込みミスが、第1の特権レベルに関連付けられ得る。第2の特権レベルに関連付けられる第2の書き込みが、記憶された第1の書き込みミスとマージされ得る。マージを実施するために、特権レベルもマージされるべきである。場合によっては、特権レベルは、特権レベルを下位レベルの特権レベルにマージすることによって、マージされ得る。例えば一実施形態において、書き込み動作は、ルート/ゲスト-ユーザ/スーパバイザなどの2部分特権レベルと関連付けられ得る。第1の書き込みミスは、ルート-ユーザの特権レベルと共に受け取られ得る。この第1の書き込みミスは、犠牲キャッシュにおける書き込みミスバッファに書き込まれ得る。ゲスト-スーパバイザの特権レベルを伴う第2の書き込みが受け取られ得、第2の書き込みは、第1の書き込みミスに関連付けられたアドレスのセット内のアドレスに向けられる。2つの書き込みの特権レベルをマージするとき、下位の特権レベルが用いられ得、結果としてゲスト-ユーザのマージされた特権レベルが生じる。場合によっては、特権レベルのマージは、複数のデータパスに対してマージが実施されるときと同じように動作し得る。場合によっては、特権レベルのマージは、異なる特権レベルがどのようにマージされ得るかを示す特権マージテーブル736において符号化され得る。場合によっては、特権マージテーブル736は事前に定義され得る。事前に定義される特権マージテーブル736の例が表1に示される。場合によっては、特権マージテーブル736は構成可能であり得る。
【0097】
場合によっては、書き込みマージはカラータグに対して実施され得る。例えば、犠牲キャッシュ内に記憶される第1の書き込みミスが、赤などの第1のカラータグに関連付けられ得る。
図8を参照すると、第1の書き込みミスは、ビットフィールドの赤タグ806内にビットセットを備えるMESI RAM800におけるエントリに関連付けられ得る。第2のカラータグに関連付けられた第2の書き込みが、記憶された第1の書き込みミスとマージされ得る。マージを実施するために、カラータグもマージされるべきである。場合によっては、カラータグは書き込みのカラータグを組み合わせることによってマージされ得る。例えば、両方の書き込みが赤のタグ付けをされる場合、マージされた書き込みは赤のタグ付けがされたままである。同様に、両方の書き込みが青のタグ付けをされる場合、マージされた書き込みは青にタグ付けされることになる。1つの書き込みが赤にタグ付けされ、他方の書き込みが青にタグ付けされる場合、マージされた書き込みは赤及び青の両方にタグ付けされる。したがって、マージされるべき第2の書き込みが青タグに関連付けられる場合、マージされた書き込みは、ビットフィールドの赤タグ806内にビットセットを有し得、ビットフィールドの青タグ808内にビットセットを有し得る。場合によっては、その後、例えば青タグについてドレイン動作が実施される場合、マージされた書き込みはドレインされることになる。同様に、赤タグについてドレイン動作が実施される場合、マージされた書き込みは赤及び青の両方としてタグ付けされるため、マージされた書き込みもドレインされることになる。
【0098】
図9は、本記載の態様に従った、書き込みミスバッファを含むキャッシュシステム900のアーキテクチャブロック図である。図示されるように、キャッシュ902が、プロセッサインターフェース906を介してプロセッサ904からキャッシュ要求を受け取り得る。場合によっては、キャッシュ902は、スカラ又はベクトルデータのいずれか、或いはその両方を扱うように構成され得る。キャッシュ902は、メインキャッシュ908及び犠牲キャッシュ910を含む、並列サブキャッシュに論理的に分割される。単一のメインキャッシュ908及び犠牲キャッシュ910が示されているが、特定の実施形態が、複数のメインキャッシュ908及び犠牲キャッシュ910のペアを含み得る。場合によっては、異なる数のメインキャッシュ908及び犠牲キャッシュ910が存在し得る。メインキャッシュ908に関連して、メインキャッシュタグRAMアクセスコントローラ912はメインキャッシュタグRAM914にアクセスし、メモリアドレスがメインキャッシュ908内に記憶されるかどうかを判定するために、キャッシュ要求に含まれるメモリアドレスに照らしてチェックする。メインキャッシュコントローラ916が、適切な割り当て、エビクション、アービトレーション、マージなどの指示、処理、及びメインキャッシュメモリ918内への読み取り/書き込みを行う。メインキャッシュストアキュー構造920が、
図3に関連して説明したように、RMW、ECC、書き込みマージなどの機能を提供する。
【0099】
犠牲キャッシュ910の全体的なアーキテクチャは、メインキャッシュ908のそれと同様である。例えば、受け取られるメモリ要求について、犠牲キャッシュタグRAMアクセスコントローラ922が、犠牲キャッシュタグRAM924にアクセスし、メモリアドレスが犠牲キャッシュ910内に記憶されるかどうかを判定するために、キャッシュ要求に含まれるメモリアドレスに照らしてチェックする。犠牲キャッシュコントローラ926が、同様に、適切な割り当て、エビクション、アービトレーション、マージなどの指示、処理、及び犠牲キャッシュメモリ928内への読み取り/書き込みを行う。犠牲キャッシュストアキュー930が、
図3に関連して説明したように、RMW、ECC、及び他の特徴を提供する。犠牲キャッシュ論理932は、犠牲キャッシュ910とメインキャッシュ908との間としての動作の調整を助ける。犠牲キャッシュ論理932は独立して示されているが、犠牲キャッシュ論理932は、犠牲キャッシュコントローラ926などの他の要素に統合され得るか、又はその一部であり得る。場合によっては、犠牲キャッシュ910は、犠牲キャッシュ910が書き込みミスバッファの機能性をサポートできるように助ける、特定の要素を含む。例えば、自動フラッシュ論理934は、プロセッサインターフェース906を監視し得、書き込みミスバッファリングのために割り当てられた犠牲キャッシュメモリ928の一部を、例えば、一つ又は複数のメモリインターフェース936を介して、より高いレベルのキャッシュ及びメモリにドレインすることを指示し得る。別の例として、MESI RAM938又は犠牲キャッシュタグRAMは、犠牲キャッシュ910内に記憶された書き込みミスバッファエントリに関する状態情報を記憶するための、一つ又は複数のビットフィールドを含むように構成され得る。
【0100】
場合によっては、犠牲キャッシュ及びメインキャッシュは、プロセッサへの単一のキャッシュとして表れる並列キャッシュとして構成されるが、複数のデータパスを含み得る。各データパスは、他のデータパスと並列に特定のコマンドを扱うように構成される。例えば、第1のデータパス940はメインキャッシュへの読み取りコマンドを扱い得るが、第2のデータパス942は犠牲キャッシュへの書き込みミスを扱う。犠牲キャッシュのための2つのデータパスを備える一実施形態において、第1のデータパス940及び第2のデータパス942についてキャッシュコマンドの4つの組み合わせ、読み取り/読み取り、読み取り/書き込み、書き込み/読み取り、及び書き込み/書き込みが存在し得る。加えて、各コマンド組み合わせは、結果として、キャッシュヒット/ヒット、ヒット/ミス、ミス/ヒット、又はミス/ミスを生じさせる可能性がある。加えて、2つのコマンドは、潜在的に、特権レベル及びカラータグが変動する同じメモリアドレスにアドレス指定され得る。場合によっては、並列キャッシュのコントロールを容易にするために、集約コントローラ944が、メインキャッシュ908と犠牲キャッシュ910との間としての読み取り及び書き込み要求の扱いを調整するのを助け得る。場合によっては、集約コントローラ944は、メインキャッシュ908と犠牲キャッシュ910との間としての調整、並びに、メインキャッシュ908及び犠牲キャッシュ910の、それぞれメインキャッシュコントローラ916及び犠牲キャッシュコントローラ926へのハンドオフタスクを、扱うように構成され得る。集約コントローラ944は、潜在的競合も検出及び扱い得る。例えば、プロセッサから読み取り要求が受け取られた場合、集約コントローラ944は、読み取り要求のアドレス指定されたメモリロケーションが、メインキャッシュ908にも犠牲キャッシュ910にも記憶されておらず、したがって読み取りミスであると判定するために、メインキャッシュ908及び犠牲キャッシュ910をチェックすることができる。集約コントローラ944は、アドレス指定されたメモリロケーションが、書き込みミスとして犠牲キャッシュ910内に記憶されていないか、又は犠牲キャッシュ910からフラッシュされていると判定するために、犠牲キャッシュ910をチェックすることもできる。アドレス指定されたメモリロケーションが書き込みミスとして犠牲キャッシュ910内に記憶されている場合、集約コントローラ944は、アドレス指定されたメモリロケーションをフラッシュするために読み取り要求を機能停止し得る。次いで、集約コントローラ944は、アドレス指定されたメモリロケーションについてより高いレベルのキャッシュ又はメモリに要求を発行し得る。
【0101】
場合によっては、読み取り又は書き込み要求がメインキャッシュ908においてヒットである場合、犠牲キャッシュ910の結果は無視され得る。メインキャッシュ908がワンウェイアソシアティブキャッシュとして構成される場合、複数のデータパスと同様にキャッシュ要求競合は明快である。複数のデータパスからのキャッシュ要求競合は、犠牲キャッシュ910がフルアソシアティブであり、書き込みミスエントリ並びにキャッシュエントリを記憶可能である、犠牲キャッシュ910における問題であり得る。2つのデータパスについてのキャッシュ要求競合は、下記の例で説明するように扱われ得る。特に下記の例において、キャッシュ動作は特定のデータパスとの文脈において説明する。しかしながら、これらの例は特定のキャッシュ動作の組み合わせを対象としており、特定のキャッシュ動作がどのデータパス上であるかは問題ではない。
【0102】
第1の例では、2つの異なるメモリアドレスを含む第1のデータパスについてのキャッシュ読み取りミス、及び第2のデータバスについてのキャッシュ書き込みヒットが存在する。犠牲キャッシュ910がフルアソシアティブである場合、キャッシュ要求は犠牲キャッシュ910内の任意のロケーションに進み得る。
図7を参照すると、犠牲キャッシュ内のロケーションに対するアドレス生成728は、犠牲キャッシュタグRAM704内のアドレスルックアップと共にE2パイプ段において発生し、したがって犠牲キャッシュ内のロケーションに対するアドレス生成728は、キャッシュ要求のアドレスがヒットであるかミスであるかがわかる前に実施される。集約コントローラ944が、メインキャッシュ908上に読み取りミスが存在すると判定すると、読み取り要求のメモリアドレスを取得するための要求が、より高いレベルのキャッシュ又はメモリに発行される。メインキャッシュ908がワンウェイアソシアティブである場合、第1のデータパスの読み取り要求のメモリアドレスは、メインキャッシュ908内の単一のロケーションにマッピングする。単一ロケーション内に既にキャッシュされたデータが存在する場合、既にキャッシュされたデータは、メインキャッシュ908から犠牲キャッシュ910へ、犠牲キャッシュ910内の事前生成されたロケーションへと追い出される。この事前生成されたロケーションが、第2のデータパスのキャッシュ書き込みがヒットであるロケーションと同じである場合、競合が発生する。この競合は、集約コントローラ944によって検出され得る。上記のように、犠牲キャッシュ910内のロケーションに対するアドレス生成は、キッシュ要求のアドレスがヒットであるかミスであるかがわかる前に発生し、したがって、キャッシュ書き込みがヒットであると判定される前に、第2のデータパスのキャッシュ書き込みのために、犠牲キャッシュ910内の第2のロケーションについて生成されるアドレスが存在する。競合の検出に基づいて、犠牲キャッシュ内のこの第2のロケーションは、読み取りミスによってメインキャッシュ908から追い出されるデータを記憶するために用いられ得る。
【0103】
別の例では、第1の例と同様に、第1のデータパスについてのキャッシュ読み取りミス及び第2のデータパスについてのキャッシュ書き込みヒットが存在し得るが、この例では、メインキャッシュ内のキャッシュ読み取りミス及びメインキャッシュ内のキャッシュ書き込みヒットも存在する。場合によっては、メインキャッシュはワンウェイアソシアティブキャッシュ(例えば、ダイレクトマップキャッシュ)であり、特定のメモリアドレスがメインキャッシュ内の特定のロケーションにマッピングされる。ダイレクトマップキャッシュを備えるこの例では、キャッシュ読み取り及びキャッシュ書き込みは、メインキャッシュ内の同じロケーションにマッピングされる。この例において、読み取りミスに起因して、読み取り要求のメモリアドレスを取得するための要求がより高いレベルのキャッシュ又はメモリに発行され、既にキャッシュされたデータはメインキャッシュ908から犠牲キャッシュ910への、犠牲キャッシュ910内の事前生成されたロケーション、ここではロケーションAへと追い出される。この例において、第2のデータパスのキャッシュ書き込みは、追い出されるメインキャッシュ内の同じロケーションにヒットする。こうした競合について可能な1つの解決策は、要求された読み取りミスを、より高いレベルのキャッシュ又はメモリから別のロケーションの犠牲キャッシュへ、直接ロードすることである。競合についての別の解決策は、メインキャッシュ内のロケーションAへの第2のデータパスのキャッシュ書き込みが完了した後、ロケーションAが犠牲キャッシュに追い出されるまで、既にキャッシュされたデータが犠牲キャッシュ910に追い出されないように、集約コントローラ944が読み取りミスを機能停止させることである。場合によっては、機能停止は、メモリ書き込み及びエビクションが完了するのを待機する間に発生し得る。
【0104】
別の例として、第1のキャッシュ書き込みが、犠牲キャッシュ910のための第1のデータパス上で受け取られ得、第2のキャッシュ書き込みが、犠牲キャッシュ910のための第2のデータパス上でも受け取られる。第1のキャッシュ書き込み及び第2のキャッシュ書き込みが異なるメモリアドレスへとアドレス指定される場合、どちらのキャッシュ書き込みも並行して犠牲キャッシュ910に進み得る。第1のキャッシュ書き込み及び第2のキャッシュ書き込みが両方とも同じメモリアドレスにアドレス指定され、両方ともキャッシュミスである場合、犠牲キャッシュコントローラ926は犠牲キャッシュ書き込みミスメモリ928内の単一のロケーションを割り当て、第1のキャッシュ書き込み及び第2のキャッシュ書き込みを犠牲キャッシュストアキュー930にマージする。マージされたデータは、その後、マージされたバイトイネーブル、特権、及びカラータグ情報と共に、犠牲キャッシュ書き込みミスメモリ928に書き込まれ得る。第1のキャッシュ書き込み及び第2のキャッシュ書き込みが両方とも同じメモリアドレスにアドレス指定され、両方ともキャッシュヒットである場合、第1のキャッシュ書き込み及び第2のキャッシュ書き込みは両方とも、ヒットロケーションにおいてキャッシュにマージされる。
【0105】
別の例として、キャッシュ読み取りが犠牲キャッシュ910のための第1のデータパス上で受け取られ得、キャッシュ書き込みが犠牲キャッシュ910のための第2のデータパス上で受け取られ得る。犠牲キャッシュ910における異なるロケーションに対して、キャッシュ読み取りがヒットでありキャッシュ書き込みがヒットである場合、キャッシュ読み取り及びキャッシュ書き込みは、競合なしに並行して進行する。犠牲キャッシュ910における異なるロケーションに対して、キャッシュ読み取りがヒットでありキャッシュ書き込みがミスである場合、キャッシュ読み取り及びキャッシュ書き込みも、競合なしに並行して進行する。犠牲キャッシュ910における異なるロケーションに対して、キャッシュ読み取りがミスでありキャッシュ書き込みがヒットである場合、キャッシュ読み取りは前述のように、キャッシュ書き込みのために犠牲キャッシュ910内のロケーションに対して生成されるアドレスを用い得る。犠牲キャッシュ910における異なるロケーションに対して、キャッシュ読み取りがミスでありキャッシュ書き込みがミスである場合、キャッシュ読み取り及びキャッシュ書き込みはどちらも、犠牲キャッシュ910内のロケーションに対して生成されるアドレスを用いる。
【0106】
別の例において、キャッシュ読み取りがメインキャッシュ908のための第1のデータパス上で受け取られ得、キャッシュ書き込みがメインキャッシュ908のための第2のデータパス上で受け取られ得る。場合によっては、キャッシュ読み取りはメインキャッシュ908のロケーション(例えば、キャッシュライン又はスロット)についてのヒットであり得る。キャッシュ書き込みは、メインキャッシュ908の同じロケーションについてのヒットでもあり得る。こうした場合、キャッシュ読み取りは相対的に迅速に実施され得、また、キャッシュ書き込みはストアキューを介して進行する際にキャッシュ書き込みがメインキャッシュロケーションにアクセスすることが必要になる前に完結し得るため、キャッシュ読み取り及びキャッシュ書き込みは、競合なしに並行して進行し得る。別の場合、キャッシュ読み取りはメインキャッシュ908におけるロケーションについてのヒットであり得る。キャッシュ書き込みは、メインキャッシュ908における同じロケーションについてのミスであり得る。こうした場合、キャッシュ書き込みがキャッシュロケーションへのアクセスを必要とする前に、キャッシュ読み取りが完了し得るため、キャッシュコマンドは通常、並行して進行する。別の場合、キャッシュ読み取りはメインキャッシュ908におけるロケーションについてのミスであり得る。キャッシュ書き込みはメインキャッシュ910における同じロケーションについてのヒットであり得る。こうした場合、前述と同様に、キャッシュ読み取りは、メインキャッシュ908内のロケーションに対する第2のデータパスのキャッシュ書き込みが完了した後、犠牲キャッシュ910に追い出されるまで、機能停止され得る。次いで、キャッシュ読み取りは進行し、より高いレベルのキャッシュ又はメモリからメインキャッシュ908内へアドレスのセットを読み取る。別の場合、キャッシュ読み取りはメインキャッシュ908における第1のロケーションについてのミスであり得る。キャッシュ書き込みも、メインキャッシュ908における同じロケーションについてのミスであり得る。こうした場合、キャッシュ読み取り及びキャッシュ書き込みは、競合なしに並行して進行し得る。
【0107】
別の例において、キャッシュ読み取りが犠牲キャッシュ910のための第1のデータパス上で受け取られ得、キャッシュ書き込みが犠牲キャッシュ910のための第2のデータパス上で受け取られ得る。場合によって、キャッシュ読み取りは犠牲キャッシュ910に記憶されたアドレスについてのヒットであり得る。キャッシュ書き込みも、犠牲キャッシュ910内に記憶された同じアドレスについてのヒットであり得る。こうした場合、キャッシュ読み取りがまず進行し得、キャッシュ書き込みは、キャッシュ読み取りが完了する後まで機能停止され得る。代替として、キャッシュ書き込み及びキャッシュ読み取りの順序は、キャッシュ書き込み及びキャッシュ読み取りが受け取られるデータパスに基づき得、より低い(又はより高い)番号が付けられたデータパスで到達するキャッシュコマンドは、他方のキャッシュコマンドの前に完了する。場合によっては、キャッシュ読み取りは犠牲キャッシュ910内に記憶されるアドレスについてのミスであり得る。キャッシュ書き込みも、犠牲キャッシュ910内に記憶される同じアドレスについてのミスであり得る。こうした場合、キャッシュ書き込みコマンドはより高いレベルのキャッシュ又はメモリに転送され得、次いで、犠牲キャッシュ910内への記憶のためのキャッシュ書き込みコマンドが完了した後、キャッシュ読み取りはより高いレベルのキャッシュ又はメモリからデータを取得し得る。
【0108】
別の例において、第1のキャッシュ読み取りが犠牲キャッシュ910のための第1のデータパス上で受け取られ得、第2のキャッシュ読み取りが犠牲キャッシュ910のための第2のデータパス上で受け取られ得る。第1のキャッシュ読み取り及び第2のキャッシュ読み取りが異なるメモリアドレスに対するものである場合、ヒット又はミスのどちらについての競合も存在しない。場合によっては、第1のキャッシュ読み取りは、アドレスのセットのうちの第1のアドレスについてのミスであり得る。第2のキャッシュ読み取りも、同じアドレスのセットのうちの第2のアドレスについてのミスであり得る。第1のキャッシュ読み取り及び第2のキャッシュ読み取りが異なる優先度レベルを有する場合、異なる優先度レベルのうちの高い方のレベルに基づいて、より高いレベルのキャッシュ又はメモリにアクセスされる。そうでなければ、より高いレベルのキャッシュ又はメモリがアクセスされ、メモリアドレスのセットは犠牲キャッシュ910内の記憶のために取得される。第1のキャッシュ読み取り及び第2のキャッシュ読み取りが同じアドレスについてのものである場合、同等に扱われる。
【0109】
図10は、本記載の態様に従った、データをキャッシングするための技法1000を示すフローチャートである。ブロック1002において、キャッシングシステムがメモリアドレスについての書き込みメモリ要求を受け取る。例えば、L1キャッシュなどのキャッシングシステムが、プロセッサインターフェースを介してプロセッサから書き込み要求を受け取ることができる。ブロック1004において、キャッシングシステムの第1のサブキャッシュが、メモリアドレスは第1のサブキャッシュ内にキャッシュされないと判定する。例えばキャッシングシステムは、2つの並列キャッシュ、メインキャッシュ及び犠牲キャッシュを含み得る。キャッシュ要求のメモリアドレスは、メインキャッシュ及び犠牲キャッシュの両方に照らして並行してチェックされ得る。キャッシングシステム内に含まれないメモリアドレスについての書き込み要求が受け取られるとき、書き込みミスが発生する。ブロック1006において、キャッシングシステムの第2のサブキャッシュが、メモリアドレスは第2のサブキャッシュ内にキャッシュされないと判定する。ブロック1008において、書き込みメモリ要求に関連付けられたデータは、第2のサブキャッシュ内に記憶される。例えば、書き込みメモリ要求のデータは、犠牲キャッシュ内に記憶され得る。また、書き込みメモリ要求に関連付けられたアドレスも、犠牲キャッシュのタグRAM内に記憶され得、書き込みメモリ要求に関連付けられたバイトイネーブル論理は、犠牲キャッシュのバイトイネーブルメモリ内に記憶され得る。ブロック1010において、記憶されたデータは書き込みミスに対応するという指示が、第2のサブキャッシュのラインタイプビット内に記憶される。例えば、犠牲キャッシュは、犠牲キャッシュのラインに関連付けられたラインタイプビットを含む。犠牲キャッシュの特定ラインが書き込みミスを含む旨を示すラインタイプビット内に、ビットが設定され得る。ブロック1012において、記憶されたデータは指示に基づいてフラッシュされ得る。例えば、記憶された書き込みミスは、キャッシュラインのラインタイプビットをチェックすることと、書き込みミスに関連付けられたラインをフラッシュすることとによって、犠牲キャッシュからより高いレベルのメモリへフラッシュされ得る。
【0110】
図11は、本記載の態様に従った、データをキャッシングするための技法1100を示すフローチャートである。ブロック1102において、キャッシングシステムがメモリアドレスについての書き込みメモリ要求を受け取る。例えば、L1キャッシュなどのキャッシングシステムが、プロセッサインターフェースを介してプロセッサから書き込み要求を受け取ることができる。ブロック1104において、キャッシングシステムの第1のサブキャッシュが、メモリアドレスは第1のサブキャッシュ内にキャッシュされないと判定する。例えばキャッシングシステムは、2つの並列キャッシュ、メインキャッシュ及び犠牲キャッシュを含み得る。キャッシュ要求のメモリアドレスは、メインキャッシュ及び犠牲キャッシュの両方に照らして並行してチェックされ得る。キャッシングシステム内に含まれないメモリアドレスについての書き込み要求が受け取られるとき、書き込みミスが発生する。ブロック1106において、キャッシングシステムの第2のサブキャッシュが、メモリアドレスは第2のサブキャッシュ内にキャッシュされないと判定する。ブロック1108において、書き込みメモリ要求に関連付けられたデータは、第2のサブキャッシュ内に記憶される。例えば、書き込みメモリ要求のデータは、犠牲キャッシュ内に記憶され得る。また、書き込みメモリ要求に関連付けられたアドレスも、犠牲キャッシュのタグRAM内に記憶され得、書き込みメモリ要求に関連付けられたバイトイネーブル論理は、犠牲キャッシュのバイトイネーブルメモリ内に記憶され得る。ブロック1110において、記憶されたデータは書き込みミスに対応するという指示が、第2のサブキャッシュのラインタイプビット内に記憶される。例えば、犠牲キャッシュは、犠牲キャッシュのラインに関連付けられたラインタイプビットを含む。犠牲キャッシュの特定ラインが書き込みミスを含む旨を示すビットが、ラインタイプビット内において設定され得る。ブロック1112において、書き込みミスを記憶する第2のサブキャッシュのラインが、ラインは完全に書き込まれた旨の指示に基づいて追い出される。例えば、ビットが、キャッシュラインのバイトのすべて又は半分が書き込みデータで満たされているかどうかを指示する、バイトイネーブル論理に基づいて計算され得る。満たされたか又は半分満たされたキャッシュラインは、ビットに基づいて犠牲キャッシュから追い出され得る。
【0111】
図12は、本記載の態様に従った、データをキャッシングするための技法1200を示すフローチャートである。ブロック1202において、キャッシングシステムがメモリアドレスについての書き込みメモリコマンドを受け取り、書き込みメモリコマンドは第1の特権レベルに関連付けられている。例えば、L1キャッシュなどのキャッシングシステムが、プロセッサインターフェースを介してプロセッサから書き込み要求を受け取ることができる。ブロック1204において、キャッシングシステムの第1のサブキャッシュが、メモリアドレスは第1のサブキャッシュ内にキャッシュされないと判定する。例えば、キャッシングシステムは、2つの並列キャッシュ、メインキャッシュ及び犠牲キャッシュを含み得る。キャッシュ要求のメモリアドレスは、メインキャッシュ及び犠牲キャッシュの両方に照らして並行してチェックされ得る。メインキャッシュにも犠牲キャッシュにも含まれないメモリアドレスについての書き込み要求が受け取られるとき、書き込みミスが発生する。ブロック1206において、キャッシングシステムの第2のサブキャッシュが、メモリアドレスは第2のサブキャッシュ内にキャッシュされないと判定し、第2のサブキャッシュは、第1のサブキャッシュと並行に、第1のサブキャッシュから追い出されたキャッシュデータ、及び、第1のサブキャッシュ内にキャッシュされない書き込みメモリコマンドを記憶するように構成される。ブロック1208において、書き込みメモリコマンドに関連付けられたデータは、第2のサブキャッシュ内に記憶される。ブロック1210において、データに関連付けられたカラータグビットが第2のサブキャッシュ内に記憶される。例えば、カラータグビットが、MESI RAMなどの第2のサブキャッシュのメモリのビットフィールド内に記憶され得る。ブロック1212において、記憶されたデータは、カラータグビットに基づいて追い出される。例えば、プロセッサがドレイン信号及びカラータグ優先度指示をアサートする間に、特定のカラータグビットに関連付けられた書き込みミスデータを記憶するキャッシュラインは追い出され得る。特定のカラータグビットを備えるすべてのキャッシュラインがドレインされた後、キャッシングシステムはアイドル信号をアサートし得る。プロセッサがドレイン信号のアサートを続行する場合、他のカラータグに関連付けられた書き込みミスデータを記憶する他のキャッシュラインも追い出され得る。
【0112】
図13は、本記載の態様に従った、データをキャッシングするための技法1300を示すフローチャートである。ブロック1302において、キャッシングシステムがメモリアドレスについての書き込みメモリコマンドを受け取り、書き込みメモリコマンドは第1のカラータグに関連付けられている。例えば、L1キャッシュなどのキャッシングシステムが、プロセッサインターフェースを介してプロセッサから書き込み要求を受け取ることができる。書き込み要求は、書き込み要求に関連付けられたカラータグの指示を含み得る。ブロック1304において、キャッシングシステムの第1のサブキャッシュが、メモリアドレスは第1のサブキャッシュ内にキャッシュされないと判定する。例えば、キャッシングシステムは、2つの並列キャッシュ、メインキャッシュ及び犠牲キャッシュを含み得る。キャッシュ要求のメモリアドレスは、メインキャッシュ及び犠牲キャッシュの両方に照らして並行してチェックされ得る。キャッシングシステム内に含まれないメモリアドレスについての書き込み要求が受け取られるとき、書き込みミスが発生する。ブロック1306において、キャッシングシステムの第2のサブキャッシュが、メモリアドレスは第2のサブキャッシュ内にキャッシュされないと判定する。ブロック1308において、書き込みメモリコマンドに関連付けられたデータは、第2のサブキャッシュのキャッシュライン内に記憶される。例えば、書き込み要求のデータは、犠牲キャッシュのキャッシュライン内に記憶され得る。また、書き込みメモリ要求に関連付けられたアドレスは犠牲キャッシュのタグRAM内に記憶され得、書き込みメモリ要求に関連付けられたバイトイネーブル論理は犠牲キャッシュのバイトイネーブルメモリ内に記憶され得る。ブロック1310において、第1のカラータグは第2のサブキャッシュ内に記憶される。例えば、カラータグは、MESI RAMなどの第2のサブキャッシュのメモリのビットフィールド内の2つのビットを用いて記憶され得る。ブロック1312において、キャッシュラインについての第2の書き込みメモリコマンドが受け取られ、書き込みメモリコマンドは第2のカラータグに関連付けられている。例えば、第1の書き込み要求と同じキャッシュラインをターゲットとする、メモリアドレスへの第2の書き込み要求が受け取られ得る。第2の書き込み要求は、第2のカラータグに関連付けられている。第2のカラータグは、第1のカラータグと同じであり得るか又は異なり得る。ブロック1314において、第2のカラータグは第1のカラータグとマージされる。例えば、第1のカラータグ及び第2のカラータグが同じ色を表す場合、2つのタグをマージすることはそのカラータグの設定を継続する。2つのカラータグが異なる場合、マージすることは両方のカラータグを設定し得る。ブロック1316において、マージされたカラータグは記憶される。ブロック1318において、キャッシュラインはマージされたカラータグに基づいて追い出され得る。例えば、第1のカラータグ及び第2のカラータグが同じ色を表す場合、エビクションはそのカラータグに基づき得る。2つのカラータグが異なる場合、エビクションはいずれかのカラータグに基づき得る。
【0113】
図14は、本記載の態様に従った、データをキャッシングするための技法1400を示すフローチャートである。ブロック1402において、キャッシングシステムがメモリアドレスについての第1の書き込みメモリコマンドを受け取り、第1の書き込みメモリコマンドは第1の特権レベルに関連付けられている。例えば、L1キャッシュなどのキャッシングシステムが、プロセッサインターフェースを介してプロセッサから書き込み要求を受け取ることができる。ブロック1404において、キャッシングシステムの第1のサブキャッシュが、メモリアドレスは第1のサブキャッシュ内にキャッシュされないと判定する。例えば、キャッシングシステムは、2つの並列キャッシュ、メインキャッシュ及び犠牲キャッシュを含み得る。キャッシュ要求のメモリアドレスは、メインキャッシュ及び犠牲キャッシュの両方に照らして並行してチェックされ得る。メインキャッシュにも犠牲キャッシュにも含まれないメモリアドレスについての書き込み要求が受け取られるとき、書き込みミスが発生する。ブロック1406において、キャッシングシステムの第2のサブキャッシュが、メモリアドレスは第2のサブキャッシュ内にキャッシュされないと判定し、第2のサブキャッシュは、第1のサブキャッシュと並行して、第1のサブキャッシュから追い出されたキャッシュデータ、及び、第1のサブキャッシュ内にキャッシュされない書き込みメモリコマンドを記憶するように構成される。ブロック1408において、第1の書き込みメモリコマンドに関連付けられた第1のデータは、第2のサブキャッシュのキャッシュライン内に記憶される。ブロック1410において、第1の特権レベルは第2のサブキャッシュ内に記憶される。例えば、第1の特権レベルは、ルート/ゲスト-ユーザ/スーパバイザなどの、2部分特権レベルを備え得る。この2部分特権レベルは、MESI RAMなどの第2のサブキャッシュのメモリのビットフィールド内の2つのビットを用いて記憶され得る。ブロック1412において、キャッシュラインについての第2の書き込みメモリコマンドが受け取られ、第2の書き込みメモリコマンドは第2の特権レベルに関連付けられている。例えば、第1の書き込み要求と同じキャッシュラインをターゲットとする、メモリアドレスへの第2の書き込み要求が受け取られ得る。第2の書き込み要求は第2の特権レベルに関連付けられ、第1の書き込み要求と同じであり得るか又は異なり得る。ブロック1414において、第1の特権レベルは第2の特権レベルとマージされる。例えば、特権レベルは、特権マージテーブルに基づいてマージされ得るか、又は、マージされる特権レベルのうちの下位の特権レベルを選択することによってマージされ得る。ブロック1416において、マージされた特権レベルは記憶される。ブロック1418において、マージされた特権レベルはキャッシュラインと共に出力される。例えば、マージされた第1の書き込み要求及び第2の書き込み要求を含むキャッシュラインは、マージされた特権レベルを含むストアミスパケットにおいて、より高いレベルのキャッシュ又はメモリへ追い出され得る。
【0114】
図15は、本記載の態様に従った、データをキャッシングするための技法1500を示すフローチャートである。ブロック1502において、キャッシングシステムがメモリアドレスについての書き込みメモリ要求を受け取る。例えば、L1キャッシュなどのキャッシングシステムが、プロセッサインターフェースを介してプロセッサから書き込み要求を受け取ることができる。ブロック1504において、キャッシングシステムの第1のサブキャッシュが、メモリアドレスは第1のサブキャッシュ内にキャッシュされないと判定する。例えば、キャッシングシステムは、2つの並列キャッシュ、メインキャッシュ及び犠牲キャッシュを含み得る。キャッシュ要求のメモリアドレスは、メインキャッシュ及び犠牲キャッシュの両方に照らして並行してチェックされ得る。キャッシングシステム内に含まれないメモリアドレスについての書き込み要求が受け取られるとき、書き込みミスが発生する。ブロック1506において、キャッシングシステムの第2のサブキャッシュが、メモリアドレスは第2のサブキャッシュ内にキャッシュされないと判定する。ブロック1508において、書き込みメモリ要求に関連付けられたデータは、第2のサブキャッシュ内に記憶される。例えば、書き込みメモリ要求のデータは、犠牲キャッシュ内に記憶され得る。また、書き込みメモリ要求に関連付けられたアドレスも、犠牲キャッシュのタグRAM内に記憶され得、書き込みメモリ要求に関連付けられたバイトイネーブル論理は、犠牲キャッシュのバイトイネーブルメモリ内に記憶され得る。ブロック1510において、記憶されたデータは書き込みミスに対応するという指示が、第2のサブキャッシュのラインタイプビット内に記憶される。例えば、犠牲キャッシュは、犠牲キャッシュのラインに関連付けられたラインタイプビットを含む。犠牲キャッシュの特定ラインが書き込みミスを含む旨を示すビットが、ラインタイプビット内において設定され得る。
【0115】
図16は、本記載の態様に従った、データをキャッシングするための技法1600を示すフローチャートである。ブロック1602において、キャッシングシステムが二つ又はそれ以上のキャッシュコマンドを受け取る。例えば、L1キャッシュなどのキャッシングシステムが、プロセッサインターフェースを介して、例えば二つ又はそれ以上のデータパスを用いて、複数のキャッシュコマンドを受け取ることができる。ブロック1604において、二つ又はそれ以上のキャッシュコマンドの間に存在する競合が判定される。例えば、キャッシュコントローラは、キャッシュ競合が2つのキャッシュコマンド間に存在すると判定し得る。競合は、2つのキャッシュコマンドが同じキャッシュロケーションへの競合する変化を引き起こすときに生じる可能性がある。ブロック1606において、競合解決は、受け取った二つ又はそれ以上のキャッシュコマンド間で判定される。ブロック1608において、二つ又はそれ以上のキャッシュコマンドは第1のサブキャッシュ及び第2のサブキャッシュに送信され、第2のサブキャッシュは、第1のサブキャッシュから追い出されたキャッシュデータ及び第1のサブキャッシュにキャッシュされていない書き込みメモリコマンドを、第1のサブキャッシュと並行して記憶するように構成される。
【0116】
例
【0117】
下記のセクションにおいて、更なる例示の実施形態を提供する。
【0118】
例1は、第1のサブキャッシュと、第1のサブキャッシュに並行な第2のサブキャッシュとを含むキャッシングシステムを含み、第2のサブキャッシュは、キャッシュラインのセットと、キャッシュラインのセットの対応するキャッシュラインが書き込みミスデータを記憶するように構成される旨の指示を記憶するように構成されたラインタイプビットと、記憶された書き込みミスデータをラインタイプビットに基づいてフラッシュするように構成されたエビクションコントローラとを含む。
【0119】
例2は例1のキャッシングシステムを含み、第2のサブキャッシュは、記憶された書き込みミスデータに関連付けられたメモリアドレスを記憶するように構成されたタグランダムアクセスメモリ(RAM)と、記憶された書き込みミスデータに関連付けられたバイトイネーブル論理を記憶するように構成されたバイトイネーブルメモリとを更に含み、エビクションコントローラは、記憶されたメモリアドレス及び記憶されたバイトイネーブル論理に基づいて、書き込みメモリ要求をより高いレベルのメモリに伝送することによって、記憶された書き込みミスデータをフラッシュするように構成される。
【0120】
例3は例1のキャッシングシステムを含み、キャッシングシステムは、プロセッサインターフェースを更に含み、エビクションコントローラは更に、プロセッサインターフェース上のアクティビティを監視するように、及び、記憶された書き込みミスデータを監視されたアクティビティに基づいてフラッシュするように構成される。
【0121】
例4は例3のキャッシングシステムを含み、プロセッサインターフェース上のアクティビティを監視することは、プロセッサインターフェース上のアイドルアクティビティを検出することを含む。
【0122】
例5は例4のキャッシングシステムを含み、アイドルアクティビティを検出することは、所定数のクロックサイクルの間にメモリ要求が受け取られたかどうかを判定することを含む。
【0123】
例6は例4のキャッシングシステムを含み、エビクションコントローラは更に、プロセッサインターフェース上でアクティビティが再開したことを判定するように、及び、記憶された書き込みミスデータのフラッシュを取り消すように構成される。
【0124】
例7は例6のキャッシングシステムを含み、プロセッサインターフェース上でアクティビティが再開したことを判定することが、プロセッサからのキャッシュ要求受け取りを検出することを含む。
【0125】
例8はキャッシングデータのための方法を含み、この方法は、キャッシングシステムによって、メモリアドレスについて書き込みメモリ要求を受け取ることと、キャッシングシステムの第1のサブキャッシュによって、第1のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することと、キャッシングシステムの第2のサブキャッシュによって、第2のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することと、書き込みメモリ要求に関連付けられたデータを第2のサブキャッシュ内に記憶することと、記憶されたデータが書き込みミスに対応する旨の指示を第2のサブキャッシュのラインタイプビット内に記憶することと、記憶されたデータを指示に基づいてフラッシュすることとを含む。
【0126】
例9は例8の方法を含み、記憶されたデータをフラッシュすることは、第2のサブキャッシュによって、書き込みメモリ要求をより高いレベルのメモリに伝送することを含む。
【0127】
例10は例8の方法を含み、この方法は更に、プロセッサインターフェース上のアクティビティを監視することを含み、記憶されたデータをフラッシュすることは更に、監視されるアクティビティに基づく。
【0128】
例11は例10の方法を含み、プロセッサインターフェース上のアクティビティを監視することは、プロセッサインターフェース上のアイドルアクティビティを検出することを含む。
【0129】
例12は例11の方法を含み、アイドルアクティビティを検出することは、所定数のクロックサイクルの間にメモリ要求が受け取られていないと判定することを含む。
【0130】
例13は例11の方法を含み、この方法は更に、プロセッサインターフェース上でアクティビティが再開したことを判定することと、記憶された書き込みミスデータのフラッシュを取り消すこととを含む。
【0131】
例14は例13の方法を含み、プロセッサインターフェース上でアクティビティが再開したことを判定することは、キャッシュ要求受け取りを検出することを含む。
【0132】
例15はデバイスを含み、デバイスは、プロセッサと、第1のサブキャッシュと、第1のサブキャッシュに並行な第2のサブキャッシュとを含み、第2のサブキャッシュは、キャッシュラインのセットと、キャッシュラインのセットのうちの対応するキャッシュラインが書き込みミスデータを記憶するように構成される旨の指示を記憶するように構成されたラインタイプビットと、記憶された書き込みミスデータをラインタイプビットに基づいてフラッシュするように構成されたエビクションコントローラとを含む。
【0133】
例16は例15のデバイスを含み、第2のサブキャッシュは更に、記憶された書き込みミスデータに関連付けられたメモリアドレスを記憶するように構成されたタグランダムアクセスメモリ(RAM)と、記憶された書き込みミスデータに関連付けられたバイトイネーブル論理を記憶するように構成されたバイトイネーブルメモリとを含み、エビクションコントローラは、記憶されたメモリアドレス及び記憶されたイネーブル論理に基づいて、書き込みメモリ要求をより高いレベルのメモリに伝送することによって、記憶された書き込みミスデータをフラッシュするように構成される。
【0134】
例17は例15のデバイスを含み、キャッシングシステムはプロセッサインターフェースを更に含み、エビクションコントローラは更に、プロセッサインターフェース上のアクティビティを監視するように、及び、監視されたアクティビティに基づいて記憶された書き込みミスデータをフラッシュするように構成される。
【0135】
例18は例17のデバイスを含み、プロセッサインターフェース上のアクティビティを監視することは、プロセッサインターフェース上のアイドルアクティビティを検出することを含む。
【0136】
例19は例18のデバイスを含み、アイドルアクティビティを検出することは、所定数のクロックサイクルの間にメモリ要求が受け取られたかどうかを判定することを含む。
【0137】
例20は例18のデバイスを含み、エビクションコントローラは更に、プロセッサインターフェース上でアクティビティが再開したことを判定するように、及び、記憶された書き込みミスデータのフラッシュを取り消すように構成される。
【0138】
例21はキャッシングシステムを含み、キャッシングシステムは、第1のサブキャッシュと、第1のサブキャッシュから追い出されたキャッシュデータ及び第1のサブキャッシュにキャッシュされていない書き込みメモリコマンドを記憶するために、第1のキャッシュと並列に結合された第2のサブキャッシュとを含み、第2のサブキャッシュは、書き込みミスデータを記憶する第2のサブキャッシュの対応するキャッシュラインがカラータグに関連付けられていることの指示を記憶するように構成されたカラータグビット、及び、書き込みミスデータを記憶する第2のサブキャッシュのキャッシュラインを、キャッシュラインに関連付けられたカラータグに基づいて追い出すように構成されたエビクションコントローラを含む。
【0139】
例22は例21のキャッシングシステムを含み、第2のサブキャッシュは、カラータグの状態を記憶するように構成されたビットフィールドを含む。
【0140】
例23は例22のキャッシングシステムを含み、ビットフィールドは各カラータグについての状態を記憶するビットを含む。
【0141】
例24は例23のキャッシングシステムを含み、ビットフィールドは、第2のサブキャッシュにおけるエントリの修正済み、排他的、共有、及び無効(MESI)状態を追跡するメモリ内に記憶される。
【0142】
例25は例24のキャッシングシステムを含み、MESIメモリは、第2のサブキャッシュの対応するキャッシュラインが書き込みミスデータを記憶している旨の指示を記憶するように構成される。
【0143】
例26は例21のキャッシングシステムを含み、キャッシングシステムは更にプロセッサインターフェースを含み、エビクションコントローラは更に、プロセッサインターフェース上でカラータグ優先度指示を受け取るように、及び、受け取ったカラータグ優先度指示に基づいて、書き込みミスデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成される。
【0144】
例27は例26のキャッシングシステムを含み、エビクションコントローラは更に、カラータグ優先度指示に対応するカラータグビットを含みる書き込みミスデータを記憶する第2のサブキャッシュのすべてのキャッシュラインが追い出された後に、プロセッサインターフェース上でアイドル信号をアサートするように構成される。
【0145】
例28はキャッシングデータのための方法を含み、この方法は、キャッシングシステムによってメモリアドレスについての書き込みメモリコマンドを受け取ることと、キャッシングシステムの第1のサブキャッシュによって、メモリアドレスは第1のサブキャッシュ内にキャッシュされないと判定することと、キャッシングシステムの第2のサブキャッシュによって、メモリアドレスは第2のサブキャッシュ内にキャッシュされないと判定することであって、第2のサブキャッシュは、第1のサブキャッシュと並行して、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュ内にキャッシュされない書き込みメモリコマンドとを記憶するように構成される、判定することと、書き込みメモリコマンドに関連付けられたデータを第2のサブキャッシュ内に記憶することと、データに関連付けられたカラータグビットを第2のサブキャッシュ内に記憶することと、記憶されたデータをカラータグビットに基づいて追い出すこととを含む。
【0146】
例29は例28の方法を含み、この方法は更に、プロセッサからカラータグ優先度指示を受け取ることと、プロセッサからドレイン信号を受信することとを含み、記憶されたデータを追い出すことは受け取ったカラータグ優先度指示に基づく。
【0147】
例30は例29の方法を含み、この方法は更に、カラータグ優先度指示に対応するカラータグビットを含む書き込みミスデータを記憶する第2のサブキャッシュのすべてのキャッシュラインが追い出された後に、アイドル信号をアサートすることを含む。
【0148】
例31は例30の方法を含み、この方法は更に、プロセッサからドレイン信号を受信し続けることと、カラータグ優先度指示に対応しないカラータグビットを含む記憶されたデータを追い出すこととを含む。
【0149】
例32は例29の方法を含み、この方法は更に、データを記憶することは完了していないと判定することと、データが記憶されるまで待機することとを含む。
【0150】
例33は例28の方法を含み、この方法は更に、カラータグビットを対応するカラータグビットに関連付けられたビットフィールド内に記憶することを含む。
【0151】
例34はデバイスを含み、デバイスは、プロセッサと、第1のサブキャッシュと、第2のサブキャッシュとを含み、第2のサブキャッシュは、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュ内にキャッシュされない書き込みメモリコマンドとを記憶するために、第1のサブキャッシュに並列に結合され、第2のサブキャッシュは、書き込みミスデータを記憶する第2のサブキャッシュの対応するキャッシュラインがカラータグに関連付けられる旨の指示を記憶するように構成されるカラータグビットと、キャッシュラインに関連付けられたカラータグに基づく書き込みミスデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成されるエビクションコントローラとを含む。
【0152】
例35は例34のデバイスを含み、第2のサブキャッシュは、カラータグの状態を記憶するように構成されたビットフィールドを含む。
【0153】
例36は例35のデバイスを含み、ビットフィールドは、各カラータグについての状態を記憶するヒットを含む。
【0154】
例37は例36のデバイスを含み、ビットフィールドは、第2のサブキャッシュにおけるエントリの修正済み、排他的、共有、及び無効(MESI)状態を追跡するメモリ内に記憶される。
【0155】
例38は例37のデバイスを含み、MESIメモリは、第2のサブキャッシュの対応するキャッシュラインが書き込みミスデータを記憶している旨の指示を記憶するように構成される。
【0156】
例39は例34のデバイスを含み、キャッシングシステムは更にプロセッサインターフェースを含み、エビクションコントローラは更に、プロセッサインターフェース上でカラータグ優先度指示を受け取るように、受け取ったカラータグ優先度指示に基づいて書き込みミスデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成される。
【0157】
例40は例39のデバイスを含み、エビクションコントローラは更に、カラータグ優先度指示に対応するカラータグビットを含む書き込みミスデータを記憶する第2のサブキャッシュのすべてのキャッシュラインが追い出された後に、プロセッサインターフェース上でアイドル信号をアサートするように構成される。
【0158】
例41はキャッシングシステムを含み、キャッシングシステムは、第1のサブキャッシュと、第2のサブキャッシュとを含み、第2のサブキャッシュは、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュ内にキャッシュされない書き込みメモリコマンドとを記憶するために、第1のサブキャッシュに並列に結合され、第2のサブキャッシュは、第2のサブキャッシュの対応するラインがカラータグに関連付けられる旨の指示を記憶するように構成されたカラータグビットと、ラインに関連付けられたカラータグに基づくメモリ書き込みデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成されたエビクションコントローラとを含み、第2のサブキャッシュは更に、メモリアドレスについての第1の書き込みメモリコマンドを受け取ることであって、書き込みメモリコマンドが第1のカラータグに関連付けられている、第1の書き込みメモリコマンドを受け取ることと、第1の書き込みメモリコマンドに関連付けられた第1のデータを第2のサブキャッシュのキャッシュライン内に記憶することと、第1のカラータグを第2のサブキャッシュ内に記憶することと、キャッシュラインについての第2の書き込みメモリコマンドを受け取ることであって、書き込みメモリコマンドが第2のカラータグに関連付けられている、第2の書き込みメモリコマンドを受け取ることと、第2のカラータグを第1のカラータグとマージすることと、マージされたカラータグを記憶することと、マージされたカラータグに基づいてキャッシュラインを追い出すことを行うように構成される。
【0159】
例42は例41のキャッシングシステムを含み、第1のカラータグ及び第2のカラータグは同じカラータグを表す。
【0160】
例43は例41のキャッシングシステムを含み、第1のカラータグ及び第2のカラータグは異なるカラータグを表し、マージされたカラータグは、第1のカラータグを表す第1のビット、及び第2のカラータグを表す第2のビットを含む。
【0161】
例44は例43のキャッシングシステムを含み、第2のサブキャッシュは更に、第1のカラータグに基づいてキャッシュラインを追い出すように構成される。
【0162】
例45は例44のキャッシングシステムを含み、第2のサブキャッシュは更に、第2のカラータグに基づいてキャッシュラインを追い出すように構成される。
【0163】
例46は例41のキャッシングシステムを含み、第1のカラータグ及び第2のカラータグは、第2のサブキャッシュデータにおけるエントリの修正済み、排他的、共有、及び無効(MESI)状態を追跡するメモリ内のビットフィールド内に記憶される。
【0164】
例47は例46のキャッシングシステムを含み、ビットフィールドは各カラータグについての状態を記憶するビットを含む。
【0165】
例48はデータをキャッシングするための方法を含み、この方法は、キャッシングシステムによって、メモリアドレスについての書き込みメモリコマンドを受け取ることであって、書き込みメモリコマンドは第1のカラータグに関連付けられる、受け取ることと、キャッシングシステムの第1のサブキャッシュによって、メモリアドレスが第1のサブキャッシュ内にキャッシュされないと判定することと、キャッシングシステムの第2のサブキャッシュによって、メモリアドレスが第2のサブキャッシュ内にキャッシュされないと判定することであって、第2のサブキャッシュは、第1のサブキャッシュと並行して、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュ内にキャッシュされない書き込みメモリコマンドとを記憶するように構成される、判定することと、第1の書き込みメモリコマンドに関連付けられた第1のデータを第2のサブキャッシュのキャッシュライン内に記憶することと、第1のカラータグビットを第2のサブキャッシュ内に記憶することと、キャッシュラインについての第2の書き込みメモリコマンドを受け取ることであって、書き込みメモリコマンドが第2のカラータグに関連付けられている、受け取ることと、第2のカラータグを第1のカラータグとマージすることと、マージされたカラータグを記憶することと、マージされたカラータグに基づいてキャッシュラインを追い出すこととを含む。
【0166】
例49は例48の方法を含み、第1のカラータグ及び第2のカラータグは同じカラータグを表す。
【0167】
例50は例48の方法を含み、第1のカラータグ及び第2のカラータグは異なるカラータグを表し、マージされたカラータグは、第1のカラータグを表す第1のビット及び第2のカラータグを表す第2のビットを含む。
【0168】
例51は例50の方法を含み、追い出すことが第1のカラータグに基づく。
【0169】
例52は例51の方法を含み、追い出すことが第2のカラータグに基づく。
【0170】
例53は例48の方法を含み、第1のカラータグ及び第2のカラータグは、第2のサブキャッシュデータにおけるエントリの修正済み、排他的、共有、及び無効(MESI)状態を追跡するメモリ内のビットフィールド内に記憶される。
【0171】
例54は例53の方法を含み、ビットフィールドは各カラータグについての状態を記憶するビットを含む。
【0172】
例55はデバイスを含み、デバイスは、プロセッサと、第1のサブキャッシュと、第2のサブキャッシュとを含み、第2のサブキャッシュは、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュ内にキャッシュされない書き込みメモリコマンドとを記憶するために、第1のサブキャッシュに並列に結合され、第2のサブキャッシュは、第2のサブキャッシュの対応するラインがカラータグに関連付けられる旨の指示を記憶するように構成されたカラータグビットと、ラインに関連付けられたカラータグに基づくメモリ書き込みデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成されたエビクションコントローラとを含み、第2のサブキャッシュは更に、メモリアドレスについての第1の書き込みメモリコマンドを受け取ることであって、書き込みメモリコマンドが第1のカラータグに関連付けられている、第1の書き込みメモリコマンドを受け取ることと、第1の書き込みメモリコマンドに関連付けられた第1のデータを第2のサブキャッシュのキャッシュライン内に記憶することと、第1のカラータグを第2のサブキャッシュ内に記憶することと、キャッシュラインについての第2の書き込みメモリコマンドを受け取ることであって、書き込みメモリコマンドが第2のカラータグに関連付けられている、第2の書き込みメモリコマンドを受け取ることと、第2のカラータグを第1のカラータグとマージすることと、マージされたカラータグを記憶することと、マージされたカラータグに基づいてキャッシュラインを追い出すことを行うように構成される。
【0173】
例56は例55のデバイスを含み、第1のカラータグ及び第2のカラータグは同じカラータグを表す。
【0174】
例57は例55のデバイスを含み、第1のカラータグ及び第2のカラータグは異なるカラータグを表し、マージされたカラータグは、第1のカラータグを表す第1のビット及び第2のカラータグを表す第2のビットを含む。
【0175】
例58は例57のデバイスを含み、第2のサブキャッシュは更に、第1のカラータグに基づいてキャッシュラインを追い出すように構成される。
【0176】
例59は例58のデバイスを含み、第2のサブキャッシュは更に、第2のカラータグに基づいてキャッシュラインを追い出すように構成される。
【0177】
例60は例55のデバイスを含み、第1のカラータグ及び第2のカラータグは、第2のサブキャッシュデータにおけるエントリの修正済み、排他的、共有、及び無効(MESI)状態を追跡するメモリ内のビットフィールド内に記憶される。
【0178】
例61はキャッシングシステムを含み、キャッシングシステムは、第1のサブキャッシュと、第2のサブキャッシュとを含み、第2のサブキャッシュは、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュ内にキャッシュされない書き込みメモリコマンドとを記憶するために、第1のサブキャッシュに並列に結合され、第2のサブキャッシュは、第2のサブキャッシュの対応するキャッシュラインが特権レベルに関連付けられる旨の指示を記憶するように構成された特権ビットを含み、第2のサブキャッシュは更に、メモリアドレスについての第1の書き込みメモリコマンドを受け取ることであって、第1の書き込みメモリコマンドが第1の特権レベルに関連付けられている、第1の書き込みメモリコマンドを受け取ることと、第1の書き込みメモリコマンドに関連付けられた第1のデータを第2のサブキャッシュのキャッシュライン内に記憶することと、キャッシュラインに関連付けられた特権レベルを第2のサブキャッシュ内に記憶することと、キャッシュラインについての第2の書き込みメモリコマンドを受け取ることであって、第2の書き込みメモリコマンドが第2の特権レベルに関連付けられている、第2の書き込みメモリコマンドを受け取ることと、第1の特権レベルを第2の特権レベルとマージすることと、マージされた特権レベルを記憶することと、マージされた特権レベルをキャッシュラインと共に出力することを行うように構成される。
【0179】
例62は例61のキャッシングシステムを含み、特権レベル情報は、第2のサブキャッシュデータにおけるエントリの修正済み、排他的、共有、及び無効(MESI)状態を追跡するメモリ内のビットフィールド内に記憶される。
【0180】
例63は例62のキャッシングシステムを含み、特権レベルは2部分特権レベルを含む。
【0181】
例64は例63のキャッシングシステムを含み、ビットフィールドは特権レベルを記憶するための2つのビットを含む。
【0182】
例65は例61のキャッシングシステムを含み、第2のサブキャッシュは特権マージテーブルを含み、特権マージテーブルは、異なる特権レベルがどのようにマージされるかを示す。
【0183】
例66は例65のキャッシングシステムを含み、特権マージテーブルは事前に定義される。
【0184】
例67は例61のキャッシングシステムを含み、第1の特権レベルを第2の特権レベルとマージすることは、下位の特権レベルを選択することを含む。
【0185】
例68はデータをキャッシングするための方法を含み、この方法は、キャッシングシステムによってメモリアドレスについての第1の書き込みメモリコマンドを受け取ることであって、第1の書き込みメモリコマンドが第1の特権レベルに関連付けられている、第1の書き込みメモリコマンドを受け取ることと、キャッシングシステムの第1のサブキャッシュによって、メモリアドレスは第1のサブキャッシュにキャッシュされないと判定することと、キャッシングシステムの第2のサブキャッシュによって、メモリアドレスは第2のサブキャッシュにキャッシュされないと判定することであって、第2のサブキャッシュは、第1のサブキャッシュと並行して、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュ内にキャッシュされない書き込みメモリコマンドとを記憶するように構成される、判定することと、第1の書き込みメモリコマンドに関連付けられた第1のデータを第2のサブキャッシュのキャッシュライン内に記憶することと、第1の特権レベルを第2のサブキャッシュ内に記憶することと、キャッシュラインについての第2の書き込みメモリコマンドを受け取ることであって、第2の書き込みメモリコマンドは第2の特権レベルに関連付けられる、第2の書き込みメモリコマンドを受け取ることと、第1の特権レベルを第2の特権レベルとマージすることと、マージされた特権レベルを記憶することと、マージされた特権レベルをキャッシュラインと共に出力することとを含む。
【0186】
例69は例67の方法を含み、特権レベルは2部分特権レベルを含む。
【0187】
例70は例69の方法を含み、第2のサブキャッシュは特権レベルを記憶するために、ビットフィールド内に2つのビットを含む。
【0188】
例71は例68の方法を含み、マージすることは、異なる特権レベルがどのようにマージされるかを示す特権マージテーブルに基づく。
【0189】
例72は例71の方法を含み、特権マージテーブルは事前に定義される。
【0190】
例73は例68の方法を含み、第1の特権レベルを第2の特権レベルとマージすることは、下位の特権レベルを選択することを含む。
【0191】
例74はデバイスを含み、デバイスは、プロセッサと、第1のサブキャッシュと、第2のサブキャッシュとを含み、第2のサブキャッシュは、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュ内にキャッシュされない書き込みメモリコマンドとを記憶するために、第1のサブキャッシュに並列に結合され、第2のサブキャッシュは、第2のサブキャッシュの対応するキャッシュラインが特権レベルに関連付けられる旨の指示を記憶するように構成された特権ビットを含み、第2のサブキャッシュは更に、メモリアドレスについての第1の書き込みメモリコマンドを受け取ることであって、第1の書き込みメモリコマンドが第1の特権レベルに関連付けられている、第1の書き込みメモリコマンドを受け取ることと、第1の書き込みメモリコマンドに関連付けられた第1のデータを第2のサブキャッシュのキャッシュライン内に記憶することと、キャッシュラインに関連付けられた特権レベルを第2のサブキャッシュ内に記憶することと、キャッシュラインについての第2の書き込みメモリコマンドを受け取ることであって、第2の書き込みメモリコマンドが第2の特権レベルに関連付けられている、第2の書き込みメモリコマンドを受け取ることと、第1の特権レベルを第2の特権レベルとマージすることと、マージされた特権レベルを記憶することと、マージされた特権レベルをキャッシュラインと共に出力することを行うように構成される。
【0192】
例75は例74のデバイスを含み、特権レベル情報は、第2のサブキャッシュデータにおけるエントリの修正済み、排他的、共有、及び無効(MESI)状態を追跡するメモリ内のビットフィールド内に記憶される。
【0193】
例76は例75のデバイスを含み、特権レベルは2部分特権レベルを含む。
【0194】
例77は例76のデバイスを含み、ビットフィールドは特権レベルを記憶するための2つのビットを含む。
【0195】
例78は例75のデバイスを含み、第2のサブキャッシュは特権マージテーブルを含み、特権マージテーブルは、異なる特権レベルがどのようにマージされるかを示す。
【0196】
例79は例78のデバイスを含み、特権マージテーブルは事前に定義される。
【0197】
例80は例75のデバイスを含み、第1の特権レベルを第2の特権レベルとマージすることは、下位の特権レベルを選択することを含む。
【0198】
例81はキャッシングシステムを含み、キャッシングシステムは、第1のサブキャッシュと、第1のサブキャッシュと並列に結合される第2のサブキャッシュとを含み、第2のサブキャッシュは、第2のサブキャッシュの対応するラインが書き込みミスデータを記憶するように構成される旨の指示を記憶するように構成されたラインタイプビットを含む。
【0199】
例82は例81のキャッシングシステムを含み、第2のサブキャッシュは更に、記憶された書き込みミスデータに関連付けられたメモリアドレスを記憶するよう構成されたタグランダムアクセスメモリ(RAM)を含む。
【0200】
例83は例81のキャッシングシステムを含み、第2のサブキャッシュは更に、記憶された書き込みミスデータに関連付けられたバイトイネーブル論理を記憶するように構成されたバイトイネーブルメモリを含む。
【0201】
例84は例83のキャッシングシステムを含み、バイトイネーブルメモリは、第2のサブキャッシュの各キャッシュラインに対応するメモリ位置を含む。
【0202】
例85は例81のキャッシングシステムを含み、記憶される指示は、第2のサブキャッシュの対応するキャッシュラインが書き込みミスエントリ又はキャッシュエントリを記憶しているかどうかを示す。
【0203】
例86は例81のキャッシングシステムを含み、ラインタイプビットは、第2のサブキャッシュにおけるエントリの修正済み、排他的、共有、及び無効(MESI)状態を追跡するメモリ内に記憶される。
【0204】
例87は例81のキャッシングシステムを含み、第1のサブキャッシュは、nウェイセットアソシアティブキャッシュであり、第2のサブキャッシュは、フルアソシアティブキャッシュである。
【0205】
例88はデータをキャッシングするための方法を含み、この方法は、キャッシングシステムによって、メモリアドレスについての書き込みメモリ要求を受け取ることと、キャッシングシステムの第1のサブキャッシュによって、第1のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することと、キャッシングシステムの第2のサブキャッシュによって、第2のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することであって、第2のサブキャッシュは第1のサブキャッシュに並列に結合される、判定することと、書き込みメモリ要求に関連付けられたデータを第2のサブキャッシュ内に記憶することと、記憶されたデータが書き込みミスに対応する旨の指示を第2のサブキャッシュのラインタイプビット内に記憶することとを含む。
【0206】
例89は例88の方法を含み、この方法は更に、記憶された書き込みミスデータに関連付けられたメモリアドレスを、タグランダムアクセスメモリ(RAM)内に記憶することを含む。
【0207】
例90は例88の方法を含み、この方法は更に、記憶された書き込みミスデータに関連付けられたバイトイネーブル論理をバイトイネーブルメモリ内に記憶することを含む。
【0208】
例91は例88の方法を含み、ラインタイプビットは、第2のサブキャッシュにおけるエントリの修正済み、排他的、共有、及び無効(MESI)状態を追跡するメモリ内に記憶される。
【0209】
例92は例88の方法を含み、この方法は更に、第2のサブキャッシュのラインからキャッシュエントリを追い出すことを含み、書き込みメモリ要求に関連付けられたデータを記憶することは、データをライン内に記憶することを含む。
【0210】
例93は例88の方法を含み、記憶される指示は、第2のサブキャッシュの対応するキャッシュラインが書き込みミスエントリ又はキャッシュエントリを記憶しているかどうかを示す。
【0211】
例94。デバイスが、プロセッサと、第1のサブキャッシュと、第1のサブキャッシュと並列に結合される第2のサブキャッシュとを含み、第2のサブキャッシュは、第2のサブキャッシュの対応するラインが書き込みミスデータを記憶するように構成される旨の指示を記憶するように構成されたラインタイプビットを含む。
【0212】
例95は例94のデバイスを含み、第2のサブキャッシュは更に、記憶された書き込みミスデータに関連付けられたメモリアドレスを記憶するように構成されたタグランダムアクセスメモリ(RAM)を含む。
【0213】
例96は例94のデバイスを含み、第2のサブキャッシュは更に、記憶された書き込みミスデータに関連付けられたバイトイネーブル論理を記憶するように構成されたバイトイネーブルメモリを含む。
【0214】
例97は例96のデバイスを含み、バイトイネーブルメモリは、第2のサブキャッシュの各キャッシュラインに対応するメモリ位置を含む。
【0215】
例98は例94のデバイスを含み、記憶される指示は、第2のサブキャッシュの対応するキャッシュラインが書き込みミスエントリ又はキャッシュエントリを記憶しているかどうかを示す。
【0216】
例99は例94のデバイスを含み、ラインタイプビットは、第2のサブキャッシュにおけるエントリの修正済み、排他的、共有、及び無効(MESI)状態を追跡するメモリ内に記憶される。
【0217】
例100は例94のデバイスを含み、第1のサブキャッシュは、nウェイセットアソシアティブキャッシュであり、第2のサブキャッシュは、フルアソシアティブキャッシュである。
【0218】
例101はキャッシングシステムを含み、キャッシングシステムは、第1のサブキャッシュと、第1のサブキャッシュと並行な第2のサブキャッシュとを含み、第2のサブキャッシュは、キャッシュラインのセットと、キャッシュラインのセットのうちの対応するキャッシュラインが書き込みミスデータを記憶するように構成される旨の指示を記憶するように構成されたラインタイプビットと、キャッシュラインは完全に書き込まれた旨の指示に基づいて書き込みミスデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成されたエビクションコントローラとを含む。
【0219】
例102は例101のキャッシングシステムを含み、エビクションコントローラは更に、キャッシュラインの半分が書き込まれた旨の指示に基づいて書き込みミスデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成される。
【0220】
例103は例102のキャッシングシステムを含み、エビクションコントローラは、キャッシュラインの半分が書き込まれた旨の指示に基づいてキャッシュラインを追い出す前に、書き込みミスデータを記憶する第2のサブキャッシュの完全に書き込まれたキャッシュラインがないことを判定するように構成される。
【0221】
例104は例102のキャッシングシステムを含み、第2のサブキャッシュは更に、記憶された書き込みミスデータに関連付けられたバイトイネーブル論理を記憶するように構成されたバイトイネーブルメモリを含み、バイトイネーブルメモリは、キャッシュラインが完全に書き込まれた旨の指示を記憶する第1のビットを含む。
【0222】
例105は例104のキャッシングシステムを含み、バイトイネーブルメモリは、キャッシュラインの半分が書き込まれた旨の指示を記憶する第2のビットを含む。
【0223】
例106は例105のキャッシングシステムを含み、第1及び第2のビットは、記憶された書き込みミスデータに関連付けられたバイトイネーブル論理に基づいて判定される。
【0224】
例107は例106のキャッシングシステムを含み、第1及び第2のビットは、書き込みミスデータが第2のサブキャッシュ内に記憶されるごとに、バイトイネーブル論理に基づいて判定される。
【0225】
例108はデータをキャッシングするための方法を含み、この方法は、キャッシングシステムによって、メモリアドレスについての書き込みメモリ要求を受け取ることと、キャッシングシステムの第1のサブキャッシュによって、第1のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することと、キャッシングシステムの第2のサブキャッシュによって、第2のサブキャッシュ内にメモリアドレスがキャッシュされないと判定することと、書き込みメモリ要求に関連付けられたデータを第2のサブキャッシュ内に記憶することと、記憶されたデータが書き込みミスに対応する旨の指示を第2のサブキャッシュのラインタイプビット内に記憶することと、キャッシュラインが完全に書き込まれた旨の指示に基づいて、書き込みミスを記憶する第2のサブキャッシュのキャッシュラインを追い出すこととを含む。
【0226】
例109は例108の方法を含み、この方法は更に、キャッシュラインの半分が書き込まれた旨の指示に基づいて、書き込みミスデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すことを含む。
【0227】
例110は例109の方法を含み、この方法は更に、キャッシュラインの半分が書き込まれた旨の指示に基づいてキャッシュラインを追い出す前に、書き込みミスデータを記憶する第2のサブキャッシュの完全に書き込まれたキャッシュラインがないことを判定することを含む。
【0228】
例111は例109の方法を含み、この方法は更に、キャッシュラインが第2のサブキャッシュのバイトイネーブルメモリ内に完全に書き込まれた旨を指示する第1のビットを記憶することを含む。
【0229】
例112は例111の方法を含み、この方法は更に、キャッシュラインが第2のサブキャッシュのバイトイネーブルメモリ内に半分書き込まれた旨を指示する第2のビットを記憶することを含む。
【0230】
例113は例112の方法を含み、第1及び第2のビットは、記憶された書き込みミスデータに関連付けられたバイトイネーブル論理に基づいて判定される。
【0231】
例114は例113の方法を含み、第1及び第2のビットは、書き込みミスデータが第2のサブキャッシュ内に記憶されるごとに、バイトイネーブル論理に基づいて判定される。
【0232】
例115はデバイスを含み、デバイスは、プロセッサと、第1のサブキャッシュと、第1のサブキャッシュに並行な第2のサブキャッシュとを含み、第2のサブキャッシュは、キャッシュラインのセットと、キャッシュラインのセットのうちの対応するキャッシュラインが書き込みミスデータとを記憶するように構成される旨の指示を記憶するように構成されたラインタイプビットと、キャッシュラインは完全に書き込まれた旨の指示に基づいて書き込みミスデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成されたエビクションコントローラとを含む。
【0233】
例116は例115のデバイスを含み、エビクションコントローラは更に、キャッシュラインの半分が書き込まれた旨の指示に基づいて書き込みミスデータを記憶する第2のサブキャッシュのキャッシュラインを追い出すように構成される。
【0234】
例117は例116のデバイスを含み、エビクションコントローラは、キャッシュラインの半分が書き込まれた旨の指示に基づいてキャッシュラインを追い出す前に、書き込みミスデータを記憶する第2のサブキャッシュの完全に書き込まれたキャッシュラインがないことを判定するように構成される。
【0235】
例118は例117のデバイスを含み、第2のサブキャッシュは更に、記憶された書き込みミスデータに関連付けられたバイトイネーブル論理を記憶するように構成されたバイトイネーブルメモリを含み、バイトイネーブルメモリは、キャッシュラインが完全に書き込まれた旨の指示を記憶する第1のビットを含む。
【0236】
例119は例118のデバイスを含み、バイトイネーブルメモリは、キャッシュラインの半分が書き込まれた旨の指示を記憶する第2のビットを含む。
【0237】
例120は例119のデバイスを含み、第1及び第2のビットは、記憶された書き込みミスデータに関連付けられたバイトイネーブル論理に基づいて判定される。
【0238】
例121はキャッシングシステムを含み、キャッシングシステムは、第1のサブキャッシュと、第1のサブキャッシュと並列に結合される第2のサブキャッシュであって、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュ内にキャッシュされない書き込みメモリコマンドとを記憶するための第2のサブキャッシュと、キャッシュコントローラとを含み、キャッシュコントローラは、二つ又はそれ以上のキャッシュコマンドを受け取ることと、受け取った二つ又はそれ以上のキャッシュコマンドの間に競合が存在すると判定することと、受け取った二つ又はそれ以上のキャッシュコマンドの間の競合解決を判定することと、二つ又はそれ以上のキャッシュコマンドを第1のサブキャッシュ及び第2のサブキャッシュに送信することとを行うように構成される。
【0239】
例122は例121のキャッシングシステムを含み、キャッシュコマンドは読み取りコマンドであり、キャッシュコントローラは更に、読み取りコマンドのメモリアドレスに基づいて、メモリアドレスは第1のサブキャッシュ内にキャッシュされないと判定し、メモリアドレスに基づいて、メモリアドレスは書き込みメモリコマンドとして第2のサブキャッシュ内に記憶されると判定し、書き込みメモリコマンドが第2のサブキャッシュからドレインされるまで読み取りコマンドを機能停止するように構成される。
【0240】
例123は例121のキャッシングシステムを含み、キャッシュコントローラは更に、二つ又はそれ以上のキャッシュコマンドを並行して受け取るように構成される。
【0241】
例124は例123のキャッシングシステムを含み、二つ又はそれ以上のキャッシュコマンドは読み取りコマンド及び書き込みコマンドを含み、キャッシュコントローラは更に、読み取りコマンドの第1のメモリアドレスに基づいて、第1のサブキャッシュにおける第1のキャッシュロケーションを判定し、第1のメモリアドレスは第1のキャッシュロケーションにおいて第1のサブキャッシュ内にキャッシュされないと判定し、読み取りコマンドに関連付けられた第2のサブキャッシュ内の第2のキャッシュロケーションを受け取り、書き込みコマンドの第2のメモリアドレスに基づいて、第2のメモリアドレスは第2のキャッシュロケーションにおいて第2のサブキャッシュ内に書き込みメモリコマンドとして記憶されると判定し、書き込みコマンドに関連付けられた第2のサブキャッシュ内の第3のキャッシュロケーションを受け取り、キャッシュされたメモリ項目を、第1のサブキャッシュ内の第1のキャッシュロケーションから第2のサブキャッシュ内の第3のキャッシュロケーションに追い出すように構成される。
【0242】
例125は例123のキャッシングシステムを含み、二つ又はそれ以上のキャッシュコマンドは読み取りコマンド及び書き込みコマンドを含み、キャッシュコントローラは更に、読み取りコマンドの第1のメモリアドレスに基づいて、第1のサブキャッシュにおける第1のキャッシュロケーションを判定し、第1のメモリアドレスは第1のキャッシュロケーションにおいて第1のサブキャッシュ内にキャッシュされないと判定し、書き込みコマンドの第2のメモリアドレスに基づいて、第2のメモリアドレスは第1のサブキャッシュ内の第1のロケーションにおいて記憶されると判定し、読み取りコマンドを機能停止し、書き込みコマンドを実施し、実施された書き込みコマンドを第2のサブキャッシュに追い出し、追い出しの後、読み取りコマンドを再開するように構成される。
【0243】
例126は例123のキャッシングシステムを含み、二つ又はそれ以上のキャッシュコマンドは第1の書き込みコマンド及び第2の書き込みコマンドを含み、キャッシュコントローラは更に、第1の書き込みコマンドの第1のメモリアドレスが第1のサブキャッシュ内にキャッシュされないと判定し、第2の書き込みコマンドの第2のメモリアドレスが第1のサブキャッシュ内にキャッシュされないと判定し、第1のメモリアドレス及び第2のメモリアドレスが一致すると判定し、第1の書き込みコマンド及び第2の書き込みコマンドをマージし、マージされたコマンドを第2のサブキャッシュに記憶するように構成される。
【0244】
例127は例123のキャッシングシステムを含み、二つ又はそれ以上のキャッシュコマンドは読み取りコマンド及び書き込みコマンドを含み、キャッシュコントローラは更に、読み取りコマンドの第1のメモリアドレスが第1のサブキャッシュ内にキャッシュされると判定することと、書き込みコマンドの第2のメモリアドレスが第1のサブキャッシュ内にキャッシュされると判定することと、第1のメモリアドレス及び第2のメモリアドレスは一致すると判定することと、読み取りコマンドが完了するまで書き込みコマンドを機能停止することと、書き込みコマンドを再開することとを行うように構成される。
【0245】
例128はデータをキャッシングするための方法を含み、この方法は、二つ又はそれ以上のキャッシュコマンドを受け取ることと、二つ又はそれ以上のキャッシュコマンド間に競合が存在すると判定することと、受け取った二つ又はそれ以上のキャッシュコマンド間の競合解決を判定することと、二つ又はそれ以上のキャッシュコマンドを第1のサブキャッシュ及び第2のサブキャッシュに送信することとを含み、第2のサブキャッシュは、第1のサブキャッシュと並行して、第1のサブキャッシュから追い出されたキャッシュデータと、第1のサブキャッシュにキャッシュされない書き込みメモリコマンドとを記憶するように構成される。
【0246】
例129は例128の方法を含み、キャッシュコマンドは読み取りコマンドであり、この方法は更に、読み取りコマンドのメモリアドレスに基づいて、メモリアドレスが第1のサブキャッシュ内にキャッシュされないと判定することと、メモリアドレスに基づいて、メモリアドレスは第2のサブキャッシュ内に書き込みメモリコマンドとして記憶されると判定することと、書き込みメモリコマンドが第2のサブキャッシュからドレインされるまで、読み取りコマンドを機能停止することとを含む。
【0247】
例130は例128の方法を含み、二つ又はそれ以上のキャッシュコマンドは並行して受け取られる。
【0248】
例131は例130の方法を含み、二つ又はそれ以上のキャッシュコマンドは、読み取りコマンド及び書き込みコマンドを含み、この方法は更に、読み取りコマンドの第1のメモリアドレスに基づいて、第1のサブキャッシュにおける第1のキャッシュロケーションを判定することと、第1のメモリアドレスは第1のキャッシュロケーションにおいて第1のサブキャッシュ内にキャッシュされないと判定することと、読み取りコマンドに関連付けられた第2のサブキャッシュ内の第2のキャッシュロケーションを受け取ることと、書き込みコマンドの第2のメモリアドレスに基づいて、第2のメモリアドレスは第2のキャッシュロケーションにおいて第2のサブキャッシュ内に書き込みメモリコマンドとして記憶されると判定することと、書き込みコマンドに関連付けられた第2のサブキャッシュ内の第3のキャッシュロケーションを受け取ることと、キャッシュされたメモリ項目を、第1のサブキャッシュ内の第1のキャッシュロケーションから第2のサブキャッシュ内の第3のキャッシュロケーションに追い出すこととを含む。
【0249】
例132は例130の方法を含み、二つ又はそれ以上のキャッシュコマンドは読み取りコマンド及び書き込みコマンドを含み、この方法は更に、読み取りコマンドの第1のメモリアドレスに基づいて、第1のサブキャッシュにおける第1のキャッシュロケーションを判定することと、第1のメモリアドレスは第1のキャッシュロケーションにおいて第1のサブキャッシュ内にキャッシュされないと判定することと、書き込みコマンドの第2のメモリアドレスに基づいて、第2のメモリアドレスは第1のサブキャッシュ内の第1のロケーションにおいて記憶されると判定することと、読み取りコマンドを機能停止することと、書き込みコマンドを実施することと、実施された書き込みコマンドを第2のサブキャッシュに追い出すことと、追い出すことの後、読み取りコマンドを再開することとを含む。
【0250】
例133は例130の方法を含み、二つ又はそれ以上のキャッシュコマンドは第1の書き込みコマンド及び第2の書き込みコマンドを含み、この方法は更に、第1の書き込みコマンドの第1のメモリアドレスが第1のサブキャッシュ内にキャッシュされないと判定することと、第2の書き込みコマンドの第2のメモリアドレスが第1のサブキャッシュ内にキャッシュされないと判定することと、第1のメモリアドレス及び第2のメモリアドレスは一致すると判定することと、第1の書き込みコマンド及び第2の書き込みコマンドをマージすることと、マージされたコマンドを第2のサブキャッシュに記憶することとを含む。
【0251】
例134は例130の方法を含み、二つ又はそれ以上のキャッシュコマンドは読み取りコマンド及び書き込みコマンドを含み、この方法は更に、読み取りコマンドの第1のメモリアドレスが第1のサブキャッシュ内にキャッシュされると判定することと、書き込みコマンドの第2のメモリアドレスが第1のサブキャッシュ内にキャッシュされると判定することと、第1のメモリアドレス及び第2のメモリアドレスは一致すると判定することと、読み取りコマンドが完了するまで書き込みコマンドを機能停止することと、書き込みコマンドを再開することとを含む。
【0252】
例135はデバイスを含み、デバイスは、プロセッサと、第1のサブキャッシュと、第1のサブキャッシュと並列に結合される第2のサブキャッシュであって、第1のサブキャッシュから追い出されたキャッシュデータ、及び第1のサブキャッシュ内にキャッシュされない書き込みメモリコマンドを記憶するための第2のサブキャッシュと、キャッシュコントローラとを含み、キャッシュコントローラは、二つ又はそれ以上のキャッシュコマンドを受け取り、受け取った二つ又はそれ以上のキャッシュコマンドの間に競合が存在すると判定し、受け取った二つ又はそれ以上のキャッシュコマンドの間の競合解決を判定し、二つ又はそれ以上のキャッシュコマンドを第1のサブキャッシュ及び第2のサブキャッシュに送信するように構成されるキャッシュコントローラとを含む。
【0253】
例136は例135のデバイスを含み、キャッシュコマンドは読み取りコマンドであり、キャッシュコントローラは更に、読み取りコマンドのメモリアドレスに基づいて、メモリアドレスが第1のサブキャッシュ内にキャッシュされないと判定し、メモリアドレスに基づいて、メモリアドレスは書き込みメモリコマンドとして第2のサブキャッシュ内に記憶されると判定し、書き込みメモリコマンドが第2のサブキャッシュからドレインされるまで読み取りコマンドを機能停止するように構成される。
【0254】
例137は例135のデバイスを含み、キャッシュコントローラは更に、二つ又はそれ以上のキャッシュコマンドを並行して受け取るように構成される。
【0255】
例138は例137のデバイスを含み、二つ又はそれ以上のキャッシュコマンドは読み取りコマンド及び書き込みコマンドを含み、キャッシュコントローラは更に、読み取りコマンドの第1のメモリアドレスに基づいて、第1のサブキャッシュにおける第1のキャッシュロケーションを判定することと、第1のメモリアドレスは第1のキャッシュロケーションにおいて第1のサブキャッシュ内にキャッシュされないと判定することと、読み取りコマンドに関連付けられた第2のサブキャッシュ内の第2のキャッシュロケーションを受け取ることと、書き込みコマンドの第2のメモリアドレスに基づいて、第2のメモリアドレスは第2のキャッシュロケーションにおいて第2のサブキャッシュ内に書き込みメモリコマンドとして記憶されると判定することと、書き込みコマンドに関連付けられた第2のサブキャッシュ内の第3のキャッシュロケーションを受け取ることと、キャッシュされたメモリ項目を、第1のサブキャッシュ内の第1のキャッシュロケーションから第2のサブキャッシュ内の第3のキャッシュロケーションに追い出すこととを行うように構成される。
【0256】
例139は例137のデバイスを含み、二つ又はそれ以上のキャッシュコマンドは読み取りコマンド及び書き込みコマンドを含み、キャッシュコントローラは更に、読み取りコマンドの第1のメモリアドレスに基づいて、第1のサブキャッシュにおける第1のキャッシュロケーションを判定することと、第1のメモリアドレスは第1のキャッシュロケーションにおいて第1のサブキャッシュ内にキャッシュされないと判定することと、書き込みコマンドの第2のメモリアドレスに基づいて、第2のメモリアドレスは第1のサブキャッシュ内の第1のロケーションにおいて記憶されると判定することと、読み取りコマンドを機能停止することと、書き込みコマンドを実施することと、実施された書き込みコマンドを第2のサブキャッシュに追い出すことと、追い出すことの後、読み取りコマンドを再開することとを行うように構成される。
【0257】
例140は例137のデバイスを含み、二つ又はそれ以上のキャッシュコマンドは第1の書き込みコマンド及び第2の書き込みコマンドを含み、キャッシュコントローラは更に、第1の書き込みコマンドの第1のメモリアドレスが第1のサブキャッシュ内にキャッシュされないと判定することと、第2の書き込みコマンドの第2のメモリアドレスが第1のサブキャッシュ内にキャッシュされないと判定することと、第1のメモリアドレス及び第2のメモリアドレスは一致すると判定することと、第1の書き込みコマンド及び第2の書き込みコマンドをマージすることと、マージされたコマンドを第2のサブキャッシュに記憶することとを行うように構成される。
【0258】
「結合する」という用語は、本明細書全体を通じて用いられる。本用語は、本説明の説明に一貫した機能的な関係を可能にする、接続、通信、又は信号経路を包含し得る。例えば、デバイスAが、或る行為を行なうためにデバイスBを制御するための信号を生成する場合、第1の例においてデバイスAがデバイスBに結合され、又は、第2の例において、介在する構成要素CがデバイスAとデバイスBとの間の機能的な関係を実質的に変えない場合に、デバイスAは、介在する構成要素Cを介してデバイスBに結合されて、デバイスBがデバイスAによって生成される制御信号を介してデバイスAによって制御されるようにされる。
【0259】
特許請求の範囲内で、説明された実施形態における改変が可能であり、また他の実施形態が可能である。