(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-09
(45)【発行日】2024-09-18
(54)【発明の名称】キャッシュシステムにおける書き込みミスキャッシングを容易にするための方法及び装置
(51)【国際特許分類】
G06F 12/0897 20160101AFI20240910BHJP
【FI】
G06F12/0897 110
(21)【出願番号】P 2021569842
(86)(22)【出願日】2020-05-26
(86)【国際出願番号】 US2020034560
(87)【国際公開番号】W WO2020243098
(87)【国際公開日】2020-12-03
【審査請求日】2023-05-24
(32)【優先日】2020-05-22
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2019-05-24
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】507107291
【氏名又は名称】テキサス インスツルメンツ インコーポレイテッド
(74)【代理人】
【識別番号】230129078
【氏名又は名称】佐藤 仁
(73)【特許権者】
【識別番号】390020248
【氏名又は名称】日本テキサス・インスツルメンツ合同会社
(72)【発明者】
【氏名】ナヴィーン ボリア
(72)【発明者】
【氏名】ティモシー デヴィッド アンダーソン
(72)【発明者】
【氏名】ピート マイケル ヒプルハウザー
【審査官】田名網 忠雄
(56)【参考文献】
【文献】特開2006-260378(JP,A)
【文献】特開平05-342107(JP,A)
【文献】特表2013-536526(JP,A)
【文献】国際公開第2018/048748(WO,A1)
【文献】特開2018-133038(JP,A)
【文献】特表2006-501563(JP,A)
【文献】米国特許出願公開第2015/0006820(US,A1)
【文献】米国特許第05577227(US,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/08-12/128
(57)【特許請求の範囲】
【請求項1】
装置であって、
第1のキャッシュストレージと、
前記第1のキャッシュストレージから退出されるデータのセットを格納するように動作可能な第1の部分と書き込みミス情報を格納するように動作可能な第2の部分とを含む第2のキャッシュストレージと、
前記第1のキャッシュストレージと前記第2のキャッシュストレージとに結合されるキャッシュコントローラであって、
書き込み動作を受け取り、
前記書き込み動作が前記第1のキャッシュストレージにおけるミスに関連することを判定し、
前記第1のキャッシュストレージにおけるミスに応答して、書き込みデータを含む第1の書き込みミス情報のセットを前記第2のキャッシュストレージの第2の部分に格納させ、
前記書き込みデータに向けられる読み出し動作を受信し、
前記第2のキャッシュストレージの第2の部分に格納された前記書き込みデータを用いて前記読み出し動作を使用可能にし、
前記第1のキャッシュストレージに格納されるべき第2のデータのセットに応答して前記第1のキャッシュストレージから第1のデータのセットを退出させ、
前記第1のデータのセットを前記第2のキャッシュストレージの第1の部分に前記第1のデータのセットを格納する、
ように動作可能である、前記キャッシュコントローラと、
を含む、装置。
【請求項2】
請求項1に記載の装置であって、
前記第1のキャッシュストレージと前記第2のキャッシュストレージと前記キャッシュコントローラとが第1のキャッシュレベルに関連し、
前記キャッシュコントローラが、
前記第2のキャッシュストレージの第2の部分
の利用を閾値と比較し、
前記第2の部分
の利用が前記閾値を超えることに基づいて、前記書き込みミス情報を第2のキャッシュ
レベルに送信させる、
ように
更に動作可能である、装置。
【請求項3】
請求項2に記載の装置であって、
前記閾値が
、インタフェースの帯域幅に対応する、装置。
【請求項4】
請求項2に記載の装置であって、
前記閾値が、前記第2の部分のサイズに対応する、装置。
【請求項5】
請求項1に記載の装置であって、
前記キャッシュコントローラが、前記第2のキャッシュストレージが前記第1の書き込みミス情報
のセットに対応するメモリアドレスに対する第2の書き込みミス情報
のセットを含む場合に、前記第1のキャッシュストレージから前記第2のキャッシュストレージに前記第1の書き込みミス情報
のセットを提供しない
ように更に動作可能である、装置。
【請求項6】
請求項1に記載の装置であって、
前記第1のキャッシュストレージ
と前記第2のキャッシュストレージ
とが、中央処理装置に並列に接続される、装置。
【請求項7】
請求項1に記載の装置であって、
前記
キャッシュコントローラが、前記第1のキャッシュストレージからの前記第1の書き込みミス情報
のセットの第1のメモリアドレスが前記第2の部分に格納された第2の書き込みミス情報
のセットの第2のメモリアドレスと一致
するときに、前記第1の書き込みミス情報
のセットを前記第2の書き込みミス情報
のセットとマージするように
更に動作可能である、装置。
【請求項8】
請求項7に記載の装置であって、
前記キャッシュコントローラが、(a)前記第1の書き込みミス情報
のセットの第1の書き込み情報を維持すること、又は、(b)前記
第2の書き込みミス情報のセットの第2の書き込み情報が前記第1の書き込みミス情報
のセットと同じ1つ又はそれ以上のバイトに対応する場合に前記第2の書き込みミス情報
のセットの第2の書き込み情報を破棄すること、の少なくとも1つによって、前記第1の書き込みミス情報
のセットを前記第2の書き込みミス情報
のセットとマージする
ように更に動作可能である、装置。
【請求項9】
請求項1に記載の装置であって、
前記第2の部分がバイトイネーブルレジスタを含み、
前記キャッシュコントローラが、前記書き込みミス情報に基づいて前記バイトイネーブルレジスタに値を格納する
ように更に動作可能である、装置。
【請求項10】
請求項9に記載の装置であって、
前記値が、書き込まれる前記書き込みミス情報の要素に対応する、装置。
【請求項11】
システムであって、
メモリアドレスに対応する書き込みコマンドを出力するように動作可能である中央処理装置と、
主要キャッシュストレージであって、
前記主要キャッシュストレージに格納されるべき第2のデータのセットに応答して第1のデータのセットを出力し、
前記主要キャッシュストレージにおけるミスに関連する前記書き込みコマンドに基づいて、書き込みデータを含む
第1の書き込みミス情報のセットを出力する、
ように動作可能である、前記主要キャッシュストレージと、
前記主要キャッシュストレージから退出されるデータのセットを格納するように動作可能な第1の部分と、書き込みミス情報のセットを格納するように動作可能な第2の部分とを含む犠牲キャッシュストレージであって、
前記主要キャッシュストレージから退出される前記第1のデータのセットに基づいて前記第1の部分に前記第1のデータのセットを格納し、
前記主要キャッシュストレージにおけるミスに関連する前記書き込みコマンドに基づいて前記第2の部分に前記
第1の書き込みミス情報のセットを格納し、
前記
第1の書き込みミス情報のセットの書き込みデータに向けられる前記中央処理装置からの第2のコマンドを利用可能にする、
ように動作可能である、前記犠牲キャッシュストレージと、
を含む、システム。
【請求項12】
請求項11に記載のシステムであって、
前記主要キャッシュストレージと前記犠牲キャッシュストレージとが第1のキャッシュレベルに関連し、
前記
犠牲キャッシュストレージが、前記
犠牲キャッシュストレージの第2の部分が書き込みミス情報の閾値量より多くを有するとき
に、前記書き込みミス情報を第2のキャッシュ
レベルに出力する
ように更に動作可能である、システム。
【請求項13】
請求項12に記載のシステムであって、
前記閾値
量が、前記第2のキャッシュ
レベルへのインタフェースの帯域幅に対応する、システム。
【請求項14】
請求項12に記載のシステムであって、
前記閾値
量が、前記第2の部分のサイズに対応する、システム。
【請求項15】
請求項11に記載のシステムであって、
前記犠牲キャッシュストレージが、前記
犠牲キャッシュストレージが前記中央処理装置からの前記
第1の書き込みミス情報
のセットと同じメモリアドレスに対応する第2の書き込み
ミス情報のセットを含む場合
に、前記
主要キャッシュストレージからの前記
第1の書き込みミス情報
のセットを前記第2の部分に格納しない
ように更に動作可能である、システム。
【請求項16】
請求項11に記載のシステムであって、
前記
主要キャッシュストレージ
と前記
犠牲キャッシュストレージ
とが、前記中央処理装置に並列に接続される、システム。
【請求項17】
請求項11に記載のシステムであって、
コントローラ
であって、前記
主要キャッシュストレージからの前記第1の書き込みミス情報
のセットの第1のメモリアドレスが前記第2の部分に格納された第2の書き込みミス情報
のセットの第2のメモリアドレスと一致するとき
に、前記第1の書き込みミス情報
のセットを前記第2の書き込みミス情報
のセットとマージする
ように動作可能である、
前記コントローラを更に含む、システム。
【請求項18】
請求項17に記載のシステムであって、
前記コントローラが、(a)前記第1の書き込みミス情報
のセットの第1の書き込み情報を維持すること、又は、(b)前記
第2の書き込みミス情報のセットの第2の書き込み情報が前記第1の書き込みミス情報
のセットと同じ1つ又はそれ以上のバイトに対応する場合に前記第2の書き込みミス情報
のセットの第2の書き込み情報を破棄すること、の少なくとも1つによって、前記第1の書き込みミス情報
のセットを前記第2の書き込みミス情報
のセットとマージする
ように更に動作可能である、システム。
【請求項19】
方法であって、
プロセッサから書き込み動作を受け取ることと、
前記書き込み動作が
第1のキャッシュレベルの第1のキャッシュストレージにおいてミスを生成する
こと
を判定することと、
前記第1のキャッシュストレージにおけるミスに応答して、
前記第1のキャッシュレベルの第2の
キャッシュストレージに前記書き込み動作に関連する書き込みミス情報
のセットを
格納することであって、前記第2のキャッシュストレージ
が、
前記第1のキャッシュストレージから退出され
る第1のデータのセットを格納する
第1の部分と、前記書き込みミス情報のセットを格納する第2の部分と
を含む、前記書き込みミス情報のセットを格納することと、
前記プロセッサから第2の動作を受信することと、
前記第2のキャッシュストレージに格納された前記書き込みミス情報のセットを用いて前記第2の動作を使用可能にし、
前記第1のキャッシュストレージに格納されるべき第2のデータのセットに応答して、前記第2のデータのセットのための余裕をつくるために前記第1のキャッシュストレージから前記第1のデータのセットを退出させることと、
前記第2のキャッシュストレージの第1の部分に前記第1のデータのセットを格納することと、
を含む、方法。
【請求項20】
請求項19に記載の方法であって、
前記第2のキャッシュストレージの第2の部分
の利用を閾値と比較することと、
前記第2の部分
の利用が前記閾値を超えることに基づいて前記書き込みミス情報
のセットを第2のキャッシュ
レベルに出力することと、
を更に含む、方法。
【発明の詳細な説明】
【技術分野】
【0001】
本記載は、概してコンピュータアーキテクチャに関し、より詳細には、データキャッシュを実装するための方法及び装置に関する。
【背景技術】
【0002】
コンピューティングシステムには、メモリに格納されたデータにアクセスすることによって命令を実行するための1つ又はそれ以上の処理コアが含まれる。ただし、処理コアがメモリからのデータにアクセスするのにかかる時間量は、かなりの量となり得る。従って、ほとんどのコンピューティングシステムは、将来、処理コアによってアクセスされる可能性が高い、メモリからのかなりの量のデータ(例えば、メモリ内のデータの総量よりも小さいことが多い)を格納するキャッシュを含む。従って、処理コアがデータを呼び出すとき、キャッシュは、処理コアがメモリからデータを検索するよりも速く処理コアにデータを提供することができ、それによって、コンピューティングシステムの速度及び効率を向上させる。
【図面の簡単な説明】
【0003】
【
図1】本明細書において説明される例に関連して説明される例示のコンピューティングシステムである。
【0004】
【
図2】
図1の例示のコンピューティングシステムの例示のレベル1キャッシュのブロック図である。
【0005】
【
図3A】
図1の例示のコンピューティングシステムのレベル1キャッシュの例示の回路実装を図示する。
【
図3B】
図1の例示のコンピューティングシステムのレベル1キャッシュの例示の回路実装を図示する。
【
図3C】
図1の例示のコンピューティングシステムのレベル1キャッシュの例示の回路実装を図示する。
【
図3D】
図1の例示のコンピューティングシステムのレベル1キャッシュの例示の回路実装を図示する。
【0006】
【0007】
【
図4B】
図3A~
図4Aのメインキャッシュストアキューに関連して実装される例示のデータ転送論理の例示の回路実装である。
【0008】
【
図4C】メインキャッシュストアキュー及び/又は犠牲キャッシュストアキューの付加的な例示の回路実装である。
【0009】
【
図4D】
図4Aのマージ回路の例示のハードウェア実装である。
【0010】
【
図5】
図3A~
図3Dのレベル1キャッシュの例示の犠牲キャッシュベースのセクションを図示する。
【0011】
【
図6】
図3A~
図3D及び
図5の例示の置換ポリシー構成要素を実装するための例示の第1の表及び例示の第2の表を図示する。
【0012】
【
図7A】犠牲キャッシュストアキュー及び犠牲ストレージを含む、例示のカプセル化されたデータキャッシュシステムを図示する。
【0013】
【
図7B】メインキャッシュストアキュー及びメインストレージを含む、別の例示のカプセル化されたデータキャッシュシステムを図示する。
【0014】
【
図7C】例示の犠牲キャッシュバンク構造を図示する。
【0015】
【
図7D】例示のメインキャッシュバンク構造を図示する。
【0016】
【
図7E】例示の統合されたキャッシュバンク構造を図示する。
【0017】
【
図8A】犠牲キャッシュタグ・ランダムアクセスメモリの例示の実装の概略図を図示する。
【0018】
【
図8B】
図8Aの例示の犠牲キャッシュタグ・ランダムアクセスメモリの例示の実装の別の概略図を図示する。
【0019】
【0020】
【
図10A-1】例示のデータキャッシュシステムを図示する。
【
図10A-2】例示のデータキャッシュシステムを図示する。
【0021】
【
図10B-1】第2の例示のデータキャッシュシステムを図示する。
【
図10B-2】第2の例示のデータキャッシュシステムを図示する。
【0022】
【0023】
【
図11B-1】例示の統合されたキャッシュストアキューの例示の回路実装である。
【
図11B-2】例示の統合されたキャッシュストアキューの例示の回路実装である。
【0024】
【
図12】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図13】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図14】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図15】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図16】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図17】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図18A】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図18B】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図19】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図20】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図21】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図22】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図23】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図24】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図25】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図26】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図27】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図28】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図29A】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図29B-1】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図29B-2】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図30】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図31】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図32】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【
図33】
図1~
図3Dのレベル1キャッシュを実装するために実行され得る機械可読命令を表すフローチャートである。
【0025】
【
図34】
図1~
図3Dのレベル1キャッシュを実装するために
図3A~
図3Dの命令を実行するように構成された、例示の処理プラットフォームのブロック図である。
【発明を実施するための形態】
【0026】
図面は一定の縮尺ではない。そうではなく、図面において層又は領域の厚みが拡大されている場合がある。一般に、同じ参照番号は、図面及び添付の記載全体にわたって同じ又は類似の部分を参照するために用いられる。本特許において用いられるように、任意のパーツ(例えば、層、膜、エリア、領域、又はプレート)が、任意の方式で別のパーツ上にあること(例えば、別のパーツ上に配置される、上に位置する、又は上に形成されるなど)を説明することは、参照されたパーツが他のパーツと接触しているか、又は、参照されたパーツが他のパーツの上にあり、1つ又は複数の中間パーツがそれらの間に配置されることを示す。接続の参照(例えば、取り付けられる、結合される、接続される、及び接合される)は、広義に解釈されるべきであり、特に指示がない限り、要素の集まり間の中間部材、及び要素間の相対的動きを含み得る。従って、接続の参照は、必ずしも、2つの要素が、直接接続され、互いに固定された関係にあることを示唆するわけではない。任意のパーツが別のパーツと「接触」していると述べることは、2つのパーツの間に中間パーツがないことを意味する。図は明確な線及び境界で各層及び領域を示しているが、これらの線及び/又境界の幾つか又は全部は理想化されている場合がある。実際には、境界及び/又は線が、観察不可能である、混合されている、及び/又は不規則である場合もある。
【0027】
用語「結合する」の様々な形態が本明細書全体を通して用いられる。これらの用語は、本明細書の記載と一貫した機能的関係を可能にする、接続、通信、又は信号経路を包含し得る。例えば、デバイスAが或る作用を実施するためにデバイスBを制御するための信号を生成する場合、第1の例示のデバイスでは、Aが直接接続によってデバイスBに結合され、又は、第2の例示のデバイスでは、介在構成要素CがデバイスAとデバイスBとの間の機能的関係を変更しない場合、Aが介在構成要素Cを介してデバイスBに結合されて、デバイスAによって生成された制御信号を介してデバイスBがデバイスAによって制御されるようにする。
【0028】
この記載と一貫して、「~するように構成される」という用語は、1つ又は複数の有形の非一時的構成要素の構造的及び機能的特徴を説明する。例えば、或る機能を実施「するように構成された」デバイスは、そのデバイスが、或る機能を実施するために設計又は専用とされた特定の構成を有することを意味する。デバイスは、そのようなデバイスが特定の機能を実施するためにイネーブルされ、アクティブ化され、又は電力供給され得る有形の非一時的構成要素を含む場合、その特定の機能を実施「するように構成される」。「~するように構成される」という用語は構成可能であることを包含し得るが、この用語はこのような狭い定義に限定されない。そのため、或るデバイスを説明するために用いられる場合、「~するように構成される」という用語は、説明されたデバイスが任意の所与の時点で構成可能であることを要求しない。
【0029】
また、「例」という用語は、本明細書では、事例、例示などの働きをすることを意味するために用いられ、必ずしも有利であるとは限らない。また、本記載は1つ又は複数の実装に関して示され、説明されているが、本明細書及び添付の図面を読んで理解することによって同等の変更及び変形が明らかになるであろう。そのような変形及び変更は全て、本記載によって完全にサポートされ、以下の特許請求の範囲によってのみ限定される。特に、上述の構成要素(例えば、要素、リソースなど)によって実施される種々の機能に関して、そのような構成要素を説明するために用いられる用語は、特に指示がない限り、説明された構造と構造的に同等ではない場合でも、説明された構成要素の特定された機能を実施する(例えば、機能的に同等である)任意の構成要素に対応する。また、記載の或る特定の特徴を幾つかの実装のうちの1つのみに関して説明しているが、そのような特徴は任意の所与の又は特定の応用例に対して所望され有利であり得るように、他の実装の1つ又は複数の他の特徴と組み合わせることができる。
【0030】
本明細書は多くの詳述を含むが、これらは、特許請求され得る範囲に対する限定として解釈されるべきではなく、むしろ、特定の実施例に特有であり得る特徴の説明として解釈されるべきである。個別の実施例の文脈で本明細書において説明される幾つかの特徴を、単一の実施例において組み合わせて実装することもできる。逆に、単一の実施例の文脈において説明される様々な特徴を、複数の実施例において個別に、又は任意の適切な副次的組み合わせで実装することもできる。また、特徴は、或る組み合わせで作用するものとして上記で説明され得、そのようなものとしてまず特許請求され得るが、特許請求される組み合わせからの1つ又は複数の特徴を、場合によってはその組み合わせから省くこともでき、特許請求される組み合わせは、副次的組み合わせ又は副次的組み合わせの変形を対象とし得る。
【0031】
同様に、動作は、例示の特定の順序で図面に示されているが、これは、そのような順序が1つ又は複数の特許請求の範囲に列挙されていない限り、望ましい結果を達成するために、そのような動作が、図示された例示の特定の順序で又は逐次的な順序で実施されること、又は、図示された全ての動作が実施されることを必要としない。幾つかの状況において、マルチタスク及び並列処理が有利であり得る。また、上述の実施例における様々なシステム構成要素の分離は、全ての実施例におけるそのような分離を必要とはしない。
【0032】
「第1の」、「第2の」、「第3の」などの記述子は、本明細書では、別々に参照され得る複数の要素又は構成要素を識別するときに用いられる。特に指定されない限り又は使用の文脈に基づいて理解されない限り、そのような記述子は、優先順位、リスト内の物理的順序又は配置、又は時間的順序付けのいかなる意味を有するものでもなく、単に、説明される例の理解を助けるために複数の要素又は構成要素を別々に参照するためのラベルとして用いられるに過ぎない。幾つかの例において、記述子「第1の」が、詳細な説明における或る要素を参照するために用いられ得、一方、同じ要素が、請求項において、「第2の」又は「第3の」などの異なる記述子を用いて参照され得る。このような場合、このような記述子は、単に複数の要素又は構成要素を参照し易くするために用いられている。
【0033】
中央処理装置(CPU)は、プログラム又はワークロードを構成する命令を実行する電子回路である。CPUは、メインメモリ(例えば、拡張メモリ)からデータにアクセスすることによって命令を実行するために、1つ又はそれ以上のプロセッサコアを含み得る。メインメモリからデータにアクセスするのに時間がかかるため、この1つ又はそれ以上のプロセッサコアが、メモリからデータを取得し、それをローカルメモリ(データキャッシュなど)に局所的に格納する場合がある。ローカルメモリはメインメモリよりも小さく高速である。このようにして、プロセッサコアは、メインメモリとインタフェースするのではなく、データを局所的に使用及び/又は操作することができる。キャッシュにアクセスするときに、データの読み出し及び/又は書き込みのための待ち時間(例えば、メモリへの/からのデータの読み出し及び/又は書き込みに必要な時間量)が一層小さいので、拡張メモリからのデータをキャッシュに格納することで、コンピューティングシステムの速度及び効率が向上される。
【0034】
幾つかのローカルメモリデバイス(キャッシュなど)には、1つ又はそれ以上の犠牲キャッシュが含まれる。犠牲キャッシュは、キャッシュに含まれるかキャッシュに接続される付加的なストレージである。犠牲キャッシュは、対応するキャッシュから最近退去されたデータを格納することにより、キャッシュミス率を改善(例えば低減)し、特に競合ミスを低減する。犠牲キャッシュの付加は、キャッシュ性能に対する同様の影響を有する場合がある。ダイレクトマップキャッシュ(direct mapped cache)は比較的高い競合ミス率を有するため、ダイレクトマップキャッシュに犠牲キャッシュが付加される場合、利点が最も顕著である。
【0035】
本明細書において説明される幾つかの例は、全体的なキャッシュ待ち時間を低減する、改善されたデータキャッシュ及び犠牲キャッシュアーキテクチャを含む。幾つかの代替キャッシュ設計では、犠牲キャッシュがキャッシュコントローラの末尾にある。ラインがキャッシュコントローラから退去される(例えば、追加データのための余地をつくるために除去される)と、データラインを除去し、退去されたデータラインを、格納すべき次のレベルキャッシュ(例えば、L2)まで送るのではなく、犠牲キャッシュは、容量やその他の理由で退去される理由ができるまで、退去されたデータライン(例えば、犠牲データ)を保持する。このようなシステムでは、対応するキャッシュ(例えば、L1キャッシュ)において後続のミスが発生すると、犠牲キャッシュは、そのミスを処理し得、そのラインを対応するキャッシュに、及びそれによって要求プロセッサコアに戻すことができ、その結果、読み出しミスの待ち時間が減少する。しかしながら、幾つかの例示のシステムはメインキャッシュと直列に犠牲キャッシュを含むので、犠牲キャッシュは、犠牲キャッシュにメモリアドレスが格納されているかどうかを犠牲キャッシュが判定する前に、メインキャッシュが、CPU(例えば、読み出し動作、命令、要求、及び/又はトランザクション、書き込み動作、命令、要求、及び/又はトランザクション、読み出し・変更・書き込み動作、命令、要求、及び/又はトランザクション、アトミック操作、命令、及び/又はトランザクション、ヒストグラム演算、命令、要求、及び/又はトランザクションなど)からメモリ動作(本明細書ではメモリ命令、メモリ要求、及び/又はメモリトランザクションとも呼ぶ)に対応するデータを持たないとメインキャッシュが判定するのを待機しなければならない。本明細書において説明される例は、待ち時間を減少させる(例えば、速度を増加させる)、書き込み動作、アトミック操作(例えば、増分、減分、他のデータとスワップするなどのために、或るロケーションに格納されたデータを操作すること)、及び/又はヒストグラム演算(例えば、キャッシュライン内の各値の総数を判定すること)を実施するサイクル数を減少させる、並びに/又は、キャッシュを含むコンピューティングシステムの効率を増加させる、キャッシュシステムを含む。
【0036】
図1は、例示のコンピュータシステム100を示す。例示のコンピューティングシステム100は、例示のCPU102、例示の処理コア104a~104n、例示の拡張メモリ106、及び例示のデータキャッシュ108を含む。例示のデータキャッシュ108は、例示のレベル1(L1)キャッシュ110、例示のレベル2(L2)キャッシュ112、及び例示のレベル3(L3)キャッシュ114を含む。
図1の例示のコンピューティングシステム100は、N個の処理コア及び3レベルのキャッシュを含むが、例示のコンピューティングシステム100は、任意の数の処理コア及び/又はレベルのキャッシュを含み得る。また、コンピューティングシステム100の例示の構成要素のうちの1つ又は複数を、同じチップ及び/又は異なるチップ内の同じダイ及び/又は異なるダイ上に実装することもできる。
【0037】
図1の例示のCPU102は、例示の処理コア104a~104nを含む。処理コア104a~104nは、同じダイに組み込まれてもよいし、別個のダイに組み込まれてもよい(例えば、1つ又はそれ以上のインタフェースを介して接続されてもよい)。CPU102は、1つ又はそれ以上のインタフェースを介して例示のデータキャッシュ108に接続する。例えば、例示のCPU102の例示のコア104aは、スカラーインタフェース(例えば、64ビット幅の双方向インタフェース及び/又は一方向インタフェース)及び/又はベクトルインタフェース(例えば、512ビット幅のインタフェース)を介して、データキャッシュ108に接続され得る。スカラーインタフェースとベクトルインタフェースの使用は、インタフェースの使用率、データサイズ、及び/又は他の考慮事項に基づき得る。例えば、スカラー読み出し動作が、スカラーデータを介して送信され得、一方、スカラー読み出しに対応するデータは、ベクトルインタフェースを介して送信され得る。また、他のインタフェースがビジーの場合は、スカラーインタフェース又はベクトルインタフェースのいずれか又はその両方が用いられることがある。幾つかの例において、CPU102は、異なる数及び/又は異なるタイプのインタフェースを用いて、データキャッシュ108に接続され得る。
【0038】
図1の処理コア104a~104nは、例示の拡張メモリ106及び/又は例示のデータキャッシュ108に格納された命令を実行するため、例示の拡張メモリ106及び/又は例示のデータキャッシュ108からのデータにアクセスする。例示のコア104a~104nは、同時に異なるプロセスを実行して、コンピューティングシステム100のタスク(例えば命令)の実行を迅速化することができる。例えば、コア104a~104nは、拡張メモリ106及び/又はデータキャッシュ108へデータを書き込むこと及び/又はそこからデータを読み出すことによって、或るアプリケーションのワークロードから命令を実行し得る。データキャッシュ108は、例示の拡張メモリ106に格納されたデータの幾つかの複製を含んでいるため、例示のコア104aの1つが拡張メモリ106からのデータにアクセスする(例えば、読み出す及び/又は書き込む)必要があるとき、例示のコア104aは、読み出し及び/又は書き込み命令を例示のデータキャッシュ108に送信する。後述するように、データキャッシュ108がコア104aからの命令に対応する(例えば、キャッシュヒットに対応する)データを含む場合、データキャッシュ108は、処理コア104aからの要求及び/又は命令を履行する。データキャッシュ108がコア104aからの命令に対応する(例えば、キャッシュミスに対応する)データを含まない場合、データキャッシュ108は、コア104aからのトランザクションを実施するために、拡張メモリ106とインタフェースする。
【0039】
図1の例示の拡張メモリ106は、インタフェース(例えば、1024ビット幅の拡張メモリインタフェース)を介して例示のデータキャッシュ108に接続される。しかしながら、異なる数及び/又は異なるタイプのインタフェースが、付加的に又は代替として用いられてもよい。例示の拡張メモリ106は、コンピューティングシステム100のためにアクセスされ得る全てのデータを格納する。例示の拡張メモリ106は、コンピューティングシステム100内に組み込まれ得、及び/又は、コンピューティングシステム100の外部にあるメモリ(例えば、オフチップメモリ)であってもよい。幾つかの例において、拡張メモリ108が最上位キャッシュのコントローラ(例えば、例示のL3キャッシュ114)と相互作用し、最上位キャッシュ(例えば、L3キャッシュ114)は、次の最上位キャッシュ(例えば、例示のL2キャッシュ112)と相互作用し、以下同様である。このような例では、CPU102は、メモリ動作を例示のL1キャッシュ110に送信し、メモリ動作がL1キャッシュ110によって処理され得ない場合、L1キャッシュ110は、メモリ動作をL2キャッシュ112に送信し、以下同様である。
図1の例では、L3キャッシュ114(例えば、最高レベルキャッシュ)が読み出し又は書き込みトランザクションを実施できない場合(例えば、メモリアドレスがL3キャッシュ114のローカルストレージに位置していないため)、L3キャッシュ114は、拡張メモリ106と相互作用して、対応するデータをメモリアドレスに読み出し又は書き込みする。拡張メモリ106は、オンチップ又はオフチップメモリ(例えば、DDR)であってもよく、拡張メモリへのインタフェースは、2
Nビットであってもよく、ここで、Nは用いられる拡張メモリのタイプに依存する。幾つかの例において、CPU102が任意の命令を実行する前にキャッシュに局所的に格納されるべき問題の実行前に、例示の拡張メモリ106からデータをプルすることができるデータキャッシュのうちの任意のものの中にプリフェッチャ及び/又はプリロード機構が存在し得、メモリ106は、メモリに格納されたデータの複製を、例示のデータキャッシュ108に提供する。データキャッシュ108は、CPU102からの命令に基づいて、周期的に、非周期的に、及び/又はトリガに基づいて、拡張メモリ106内の格納されたデータを調整するように、付加的な情報を要求及び/又は拡張メモリ106に指令し得る。
【0040】
図1の例示のデータキャッシュ108は、例示の拡張メモリ106からのデータのブロック(例えば、拡張メモリ106に格納されたデータのキャッシュされたサブセット)を格納して、キャッシュされたサブセットに例示のCPU102がアクセスするのに必要な時間を短縮し、それによってシステム性能を改善する。最良の性能を得るために、データキャッシュ108内のデータが、CPU102によって用いられる可能性が最も高いデータに対応するように試みがなされる。データキャッシュ108は、キャッシュヒットの間(例えば、要求されたデータがデータキャッシュ108に格納されるとき)にCPU102によって呼び出されると、キャッシュされたデータへのアクセスを提供する。CPU102が、データキャッシュ108に含まれないデータ(例えば、キャッシュミス)を要求する場合、データキャッシュ108は、拡張メモリ106から対応するデータを検索する。例えば、CPU102が、拡張メモリ106の特定のアドレスに対応するための読み出し動作を送信する場合、データキャッシュ108は、拡張メモリ106の特定のアドレスに対応するデータがデータキャッシュ108にキャッシュされるか否かを判定する。データキャッシュ108が、データがキャッシュされていると判定した場合、データキャッシュ108は、読み出されるべきデータをCPU102に提供する。データキャッシュ108が、データがキャッシュされていないと判定した場合、データキャッシュ108は、拡張メモリ106からデータを取得し、そのデータをCPU102に返す。また、例示のデータキャッシュ108は、キャッシュされたデータをキャッシュミスに基づいて更新することができる(例えば、将来のキャッシュミスを軽減するため)。CPU102からの書き込みトランザクションの場合、例示のデータキャッシュ108は、拡張メモリ106に格納された古いデータを更新するように提供する前に、対応するデータを一時的に格納することができる。
【0041】
例示のデータキャッシュ108は、例示のL1キャッシュ110、例示のL2キャッシュ112、及び例示のL3キャッシュ114を含む。キャッシュのレベルは、速度及び/又はサイズに基づき得る。例えば、例示のL1キャッシュ110は、最も速いキャッシュであり最も小さく、その後、L2 112(例えば、L1 110より遅いがより大きい)、及びL3 114(例えば、L2 112より遅いがより大きい)が続く。しばしば、最も一般的に用いられるデータがL1 110に格納され、続いて、L2 112及びL3 114に格納される。従って、CPU102が書き込み又は読み出しを行うアドレスを呼び出すと、CPU102からの命令が、まずL1キャッシュ110に送られ、対応するデータがL1キャッシュ110に格納されていない場合、その命令はL2キャッシュ112に送られる。対応するデータがL2キャッシュ112に格納されていない場合、命令はL3キャッシュ114に送られる。対応するデータがL3キャッシュ114に格納されていない場合、例示のデータキャッシュ108は、拡張メモリ106からのデータにアクセスする。
【0042】
以下に更に説明されるように、
図1の例示のL1キャッシュ110は、CPU102からの命令を実行するため、メインキャッシュと犠牲キャッシュを並列に含む。犠牲キャッシュは、犠牲データ(例えば、拡張メモリ106の他のアドレスロケーションに対応する新たなデータのための余地をつくるためにメインキャッシュから退去されたデータ)を格納する。このように、L1レベルでキャッシュミスがあるとき、メインL1キャッシュは、キャッシュミスを引き起こしたトランザクションに対応するデータの第2のセットのための余地をつくるために、データの第1のセット(例えば、犠牲データ)を退去させる。次に、犠牲キャッシュは、メインキャッシュから除去されたデータの第1のセットを格納して、メインキャッシュ内のデータの第2のセットのための余地をつくる。
【0043】
図2は、
図1の例示のL1キャッシュ110の例示のブロック図である。例示のL1キャッシュ110は、例示のCPUインタフェース202、例示のタグRAM(ランダムアクセスメモリ)アクセス204、206、例示のタグRAM208、210、例示のメインキャッシュストアキュー212、例示のメインストレージ214(メインキャッシュストレージ又はメインキャッシュとも呼ばれる)、例示の犠牲キャッシュストアキュー216、例示の犠牲ストレージ218(犠牲キャッシュストレージ又は犠牲キャッシュとも呼ばれる)、例示のキャッシュコントローラ220、例示のメインキャッシュコントローラ222、例示の犠牲キャッシュコントローラ224、及び例示のL2インタフェース228を含む。
【0044】
CPUインタフェース202は、CPU102(例えば、CPU102のコア104a~104n)を、L1キャッシュ110の構成要素に接続する。CPUインタフェース202は、タグRAMアクセス204、206及びキャッシュコントローラ220に接続される。例示のCPUインタフェース202は、例示のCPU102の例示のコア104a~104nから命令を受け取る。命令は、読み出し命令、書き込み命令、読み出し・変更・書き込み命令、アトミック命令などを含み得る。CPUインタフェース202が、特定のアドレスに格納された特定のデータに対応する命令を取得すると、CPUインタフェース202は、キャッシュコントローラ220及びメインタグRAMアクセス204とインタフェースして、トランザクションを実施するために、対応するデータがメインストレージ214及び/又は犠牲ストレージ218に格納されているか否かを判定する。また、或る種のトランザクション(例えば、読み出しトランザクション)について、例示のCPUインタフェース202は、対応するデータを例示のCPU102に戻す。また、CPUインタフェース202が、特定のアドレスのデータに対応する命令を取得すると、メイン構成要素(例えば、例示のメインタグRAMアクセス204、例示のタグRAM208、例示のメインキャッシュストアキュー212、例示のメインストレージ214、及び例示のメインキャッシュコントローラ222)と、犠牲構成要素(例えば、例示のタグRAMアクセス206、例示のタグRAM210、例示の犠牲キャッシュストアキュー216、例示の犠牲ストレージ218、及び例示の犠牲キャッシュコントローラ224)が、並列に(例えば、同時に)動作して、対応するアドレスからのデータがメインストレージ214及び/又は犠牲ストレージ218に格納されるかどうかを判定する。
【0045】
図1の例示のメインタグRAMアクセス204は、タグRAM208及びキャッシュコントローラ220に結合される。犠牲タグRAMアクセス206は、タグRAM210及びキャッシュコントローラ220に結合される。メインタグRAMアクセス204は、CPU102からの命令に対応するメモリアドレスからのデータがメインストレージ214内に存在するか否かを判定するために、タグRAM208にアクセスする。例示の犠牲タグRAMアクセス206は、タグRAM210にアクセスして、CPU102からの命令に対応するメモリアドレスからのデータが、メインタグRAMアクセス204と並行して犠牲ストレージ218内に存在するか否かを判定する。幾つかの例において、メインタグRAMアクセス204はタグRAM208内に実装され、犠牲タグRAMアクセス206はタグRAM210内に実装される。メインタグRAMアクセス204及び/又は犠牲タグRAMアクセス206が、CPU102からの命令に対応するアドレスがそれぞれのタグRAM208、210内に存在すると判定すると、メインタグRAMアクセス204及び/又は犠牲タグRAMアクセス206は、結果(例えば、判定及び/又は任意の対応するデータ)を例示のキャッシュコントローラ220に送信する。
【0046】
幾つかの例において、メインストレージは直接マップされる。従って、このような例では、特定のCPUメモリアドレスが、メインストレージ214の特定のロケーションにおいてのみ格納され得る。そのため、例示のタグRAM208は、CPU命令のための固定メモリアドレスを潜在的に有することができる。直接マップされるキャッシュでは、所与のアドレスが、タグRAM208の特定のロケーションに格納される。
【0047】
図2の例示のタグRAM208は、例示のキャッシュコントローラ220及び例示のメインストレージ214に結合される。例示のタグRAM208は、拡張メモリ106内のメモリアドレスに対応する例示のメインストレージ214内のエントリを記録する表を格納する。このようにして、例示のメインタグRAMアクセス204は、CPU102からの命令に対応するデータがメインストレージ214内で利用可能であるかどうかを判定するために表をレビューすることができる。例示のタグRAM210は、例示のキャッシュコントローラ220及び例示の犠牲ストレージ218に結合される。例示のタグRAM210は、例示の犠牲ストア218内のエントリを記録する表を格納する。このようにして、例示の犠牲タグRAMアクセス206は、CPU102からの命令に対応するデータが犠牲ストレージ218内で利用可能であるかどうかを判定するために表をレビューすることができる。メインストレージ214のデータが更新されると、例示のタグRAM208は、エントリに対するいかなる変更も反映するように表を更新し得る。例えば、メインストレージ214が、拡張メモリ106内の第1のメモリアドレスに対応するデータの第1のセットを除去し、それを拡張メモリ106内の第2のメモリアドレスに対応するデータの第2のセットで置換した場合、例示のタグRAM208は、第1のメモリアドレスのデータの第1のセットがメインストレージ214にもはや格納されなくなり、今度は第2のメモリアドレスのデータの第2のセットがメインストレージ214に格納されるように、表を更新する。同様に、犠牲ストレージ218の第1のアドレスロケーションからのデータが第2のアドレスロケーションからのデータに変更されると、例示のタグRAM210は、エントリに対するあらゆる変更を反映するように表を更新し得る。
【0048】
例示の犠牲側タグRAM210は、コンテンツアドレス指定可能メモリであってもよい。幾つかの例において、犠牲ストレージ218は、フルアソシアティブである(例えば、犠牲ストレージ218の任意のロケーションを用いて、任意のCPUアドレスからのデータを格納することができる)。そのため、例示のCPU102が例示のL1キャッシュ110にメモリアドレスを提供すると、例示の犠牲タグRAM210は、提供されたメモリアドレスをタグRAM210の全てのエントリと比較する。提供されたアドレスとタグRAM210に格納されたエントリとの間に一致がある場合、犠牲ストレージ218内の対応するロケーションのアドレスがタグRAM210によって出力される。このアドレスは、CPU命令に対応するデータを犠牲ストレージ218から取得するために用いられる。
【0049】
図2の例示のメインキャッシュストアキュー212は、例示のメインストレージ214及び例示のキャッシュコントローラ220に結合される。例示のメインキャッシュストアキュー212は、CPU104がストア動作(例えば、書き込み動作、アトミック比較及びスワップ、アトミック操作など)を発行するときに用いられる。例示のメインキャッシュストアキュー212は、読み出し・変更・書き込み機能を実装することができる。読み出し・変更・書き込み機能には、エラー訂正符号データの更新を含む理由でメインストレージ214に既に存在する、書き込まれているデータの古いバージョンを最初に読み出す必要があるローカルストレージにデータを格納することが含まれる。このようにして、読み出し動作がメインストレージ214から古いデータの複製を取得するために実施されている間に、CPU102からの読み出し・変更・書き込み・トランザクションの書き込み部分に含まれる新しいビットは、メインキャッシュストアキュー212においてバッファされる。古いデータが利用可能であるとき、CPU102が上書きしている新しいビットのみがストアキューバッファにおいて更新され、更新された(例えば、マージされた)データがメインストレージ214に書き戻される。例えば、CPU102が、対応するメモリアドレスを含む読み出し・変更・書き込み・トランザクションの書き込み部分から(例えば、CPU102から)上書きしている新しいビットは、対応する書き込み(例えば、ストア)命令の古いデータがメインストレージ214から読み出されるまで、メインキャッシュストアキュー212においてバッファされる。読み出し・変更・書き込み・トランザクションの書き込み部分に含まれる新しいビットがメインストレージ214からの古いデータとマージされると、更新された(例えば、マージされた)データが、メインストレージ214に書き戻される。メインキャッシュストアキュー212によって提供されるストア命令のための追加のパイプライン化は、先行するストア命令がメインストレージ214からのロードデータが利用可能になるのを待っているときに、CPU104からの命令の実行継続を可能にする。幾つかの例において、セクション5及び16に関連して以下で更に説明されるように、メインストレージ214がSRAMを含む。例示のメインキャッシュストアキュー212について、
図3A、
図3B、及び
図4に関連して以下で更に説明される。
【0050】
図2の例示の犠牲キャッシュストアキュー216は、例示の犠牲ストレージ218及び例示のキャッシュコントローラ220に結合される。例示の犠牲キャッシュストアキュー216は、例示の犠牲ストレージ218に格納されるべきデータをバッファする。例えば、対応するメモリアドレス及び/又はストアデータを含むストア命令からの(例えば、キャッシュコントローラ220からの)犠牲値は、対応するストア命令の以前の値又は古い値が犠牲ストレージ218から読み出されるまで、犠牲キャッシュストアキュー216においてバッファされる。格納されたバイトが犠牲ストレージ218からの以前の/古いデータとマージされると、値は犠牲ストレージ218に書き戻される。犠牲キャッシュストアキュー216は、リタイアメントポイントが満たされたこと(例えば、1つ又はそれ以上のキャッシュラインがL1キャッシュ110からL2キャッシュ112に除去されたとき)に応答して送信されたキャッシュコントローラ220からの読み出し、変更、及び/又は書き込み動作を処理し得るが、本明細書において説明される他の例において、犠牲キャッシュストアキュー216は、CPU102から直接送信されたキャッシュコントローラ220からの読み出し、変更、及び/又は書き込み動作を処理してもよい。例示の犠牲キャッシュストアキュー216は、以下に更に記載される。
【0051】
図2の例示のメインストレージ214は、例示のタグRAM208、例示のメインキャッシュストアキュー212、及び例示のキャッシュコントローラ220に結合される。例示のメインストレージ214は、拡張メモリ106内のメモリアドレスロケーション内のデータに対応するデータ(例えば、エントリ)を格納する。メインストレージ214は、例示のCPU102によって呼び出される可能性が高いデータを格納する。格納されたデータは、例えば、CPU102が例示のメインストレージ214にキャッシュされていないデータへのアクセス(例えば、読み出し、書き込みなど)を試みたときに更新され得る。例示のメインストレージ214は、スタティックRAM(SRAM)及び/又は格納されたデータへの単一サイクルアクセスを提供する他の任意のタイプのストレージであってもよいし、それらを含んでいてもよい。
【0052】
図2の例示の犠牲ストレージ218は、例示のタグRAM210、例示の犠牲キャッシュストアキュー216、及び例示のキャッシュコントローラ220に結合される。例示の犠牲ストレージ218は、CPU102がより最近アクセスした又はよりアクセスする蓋然性のある他のアドレスロケーションからのデータのための余地をつくるために、例示のメインストレージ214から取り除かれたメモリアドレスロケーションに対応するデータ(例えば、エントリ)を格納する。例示の犠牲ストレージ218は、レジスタファイル、スタティックRAM(SRAM)、及び/又は任意の他のタイプのストレージとすることができ又はそれらを含み得る。
【0053】
動作において、まず、例示のメインストレージ214は、使用の尤度に基づいて、例示の拡張メモリ106内の異なるアドレスからのデータを格納する。例示のCPU102が、メインストレージ214に格納されているメモリアドレスに対応する命令を送る場合、例示のキャッシュコントローラ220は、そのトランザクションを実施する構成要素を制御する。例えば、キャッシュコントローラ220は、後続の処理及びメインストレージ214への格納のために、メインキャッシュストアキュー212に命令を送信し得る。例示のCPU102が、メインストレージに格納されていない(例えば、犠牲ストレージ218に格納されている)メモリアドレスに対応する命令を送信した場合、例示のメインストレージ214は、データが別のストレージから検索された後、対応するメモリアドレスにデータを格納し得る。データのための余地をつくるために、メインストレージ214は、1つ又はそれ以上のメモリアドレスロケーションに対応する何らかのデータを除去する。除去されたデータ及び対応するメモリアドレスロケーションは、犠牲(victims)又は退去されたラインと呼ばれる。どのデータを犠牲にするかの選択は、置換ポリシーに従った様々なパラメータに基づく。メインストレージ214から除去された後、犠牲は、例示の犠牲ストレージ218に格納される。犠牲ストレージ218がいっぱいである場合、犠牲ストレージ218は、メインストレージ214から犠牲を格納するための余地をつくるために、データ(例えば、第2の犠牲)を除去する。犠牲ストレージ218から第2の犠牲が除去された後、第2の犠牲は、ストレージのためにL2キャッシュ112に送信される。
【0054】
図1の例示のL1キャッシュ110は、対応するメインストレージ214を有する1つのメインキャッシュストアキュー212と、対応する犠牲ストレージ218を有する1つの例示の犠牲キャッシュストアキュー216とを含むが、例示のメインキャッシュストアキュー212及び/又は例示の犠牲キャッシュストアキュー216は、複数のストレージに対応する複数のストアキューを含み得る。例えば、メインストレージ214及び/又は犠牲ストレージ218は、複数の独立してアドレス指定可能なバンクに(例えば、任意の数のライン幅、行などを有する、任意の数のストレージに)分割され得、個々のバンクは、それ自体の対応するストアキューを有し得る。例えば、各行が1024ビットのライン幅を有する256行で構成されるメインストレージ214を、特定のバンクにおいて行当たり64ビットを有する16個のメインストレージ(例えば、バンク)に分割することができ、各バンクは、それ自体のメインストアキューを有し得る。このような例では、L1キャッシュ110にヒットする読み出し及び/又は書き込み要求のベクトルデータが512ビット幅である場合、キャッシュコントローラ220は、8つのバンクに対する8つの並列書き込み及び/又は読み出しとして要求を処理し得る。このようなマルチバンクセットアップでは、読み出し及び/又は書き込み動作が並列にバンクに送られ得、バンクは、読み出し及び/又は書き込み動作に応答して、自身のプロセスを調停する。独立して動作することによって、マルチバンク手法の動作は、複雑さ及び/又はパーツを犠牲にして、(例えば、要求が受け取られたときにキャッシュライン全体がロックアップされず、そのような要求を受け取ったバンクに割り当てられたキャッシュラインの一部のみがロックされるので)単一のメインストレージよりも効率的である。
【0055】
図2の例示のキャッシュコントローラ220は、例示のストレージ214、216においてどのようにデータが読み出し及び/書き込みされるか、及び/又は、例示のストレージ214、218においてどのようにデータが更新されるかを制御するために、L1の構成要素に結合される。例えば、読み出し要求、書き込み要求、アトミック要求、読み出し・変更・書き込み要求等が例示のCPUインタフェース202で受け取られると、キャッシュコントローラ220は、その要求を取得し、それに応じて他の構成要素に指令する。例えば、拡張メモリ106の特定のロケーションのデータの読み出し要求の間、例示のキャッシュコントローラ220は、読み出し要求からの拡張メモリ106のロケーションに対応するデータをメインストレージ214が格納しているか否かを判定するためにタグRAM208にアクセスするように、メインタグRAMアクセス204に指令する。メインタグRAMアクセス204が、エントリがメインストレージ214に位置する(例えば、キャッシュヒット)と判定した場合、キャッシュコントローラ220は、タグRAM208内のデータに基づいて特定のエントリのロケーションを判定し、メインキャッシュストアキュー212とインタフェースして例示のメインストレージ214から値を読み出し、CPUインタフェース202を介してCPU102に値を返す。例示のキャッシュコントローラ220は、メインキャッシュ構成要素(例えば、メインタグRAMアクセス204、例示のタグRAM208、例示のメインキャッシュストアキュー212、及び例示のメインストレージ214)を制御するためのメインキャッシュコントローラ222と、メインキャッシュ構成要素のメインキャッシュコントローラ222制御と並行して、犠牲キャッシュ構成要素(例えば、例示の犠牲タグRAMアクセス206、例示のタグRAM210、例示の犠牲キャッシュストアキュー216、及び例示の犠牲ストレージ218)を制御するための例示の犠牲キャッシュコントローラ224とを含む。幾つかの例において、キャッシュコントローラ222、224は、別個のコントローラであってもよく、及び/又は、単一のコントローラで動作するように組み合わされてもよい。
【0056】
図2の例示のキャッシュコントローラ220は、例示のL2インタフェース228とインタフェースして、例示のメインストレージ214に格納されるべきデータを取得する(例えば、まず、キャッシュミスヒットの後など)。また、例示のキャッシュコントローラ220は、新たなデータが書き込まれたとき(例えば、古いデータが上書きされたとき)に、メインストレージ214及び/又は犠牲ストレージ218のデータに対する更新をL2キャッシュ112に送信し得、その結果、CPU102からの読み出し命令は、L2インタフェース228を介してL2キャッシュ112に伝搬される。例示のキャッシュコントローラ220は、L2キャッシュ112及び/又はL3キャッシュ114から(例えば、直接、又は、L2キャッシュ112を介して)データを送信及び/又は受け取るために、例示のL2インタフェース228とインタフェースする。例えば、メインストレージ214及び犠牲ストレージ218が、CPU102からの命令に対応するデータ(例えば、キャッシュミスに対応する)のためのメモリアドレスロケーションを含まない場合、例示のキャッシュコントローラ220は、L2インタフェース228を介して、命令を例示のL2キャッシュ112に送信する。キャッシュコントローラ220は、データがL2キャッシュ112又はL3キャッシュ114に格納されている場合、L2インタフェース228を介してL2キャッシュ112から対応するデータを受け取ってもよい。このような例では、キャッシュコントローラ220は、L2キャッシュ112からの対応する情報をメインストレージ214に格納することができる。幾つかの例において、犠牲ストレージ218が、メインストレージ214からの新たな犠牲のための余地をつくるために特定のロケーション(例えば、古い犠牲)のためのデータを除去しなければならないとき、例示のキャッシュコントローラ220は、L2キャッシュに格納されるように、L2インタフェース228を介して古い犠牲をL2キャッシュ112に送信してもよい。
【0057】
図3A~
図3Dは、
図1の例示のコンピューティングシステム100のL1キャッシュ110の例示の回路実装を図示する。
図3A~
図3Dの例示の実装は、
図2の例示のCPUインタフェース202、例示のタグRAM208、210、例示のメインキャッシュストアキュー212、例示のメインストレージ214、例示の犠牲キャッシュストアキュー216、例示の犠牲ストレージ218、及び例示のキャッシュコントローラ220を含む。
図3A~
図3Dの例示の実装は、例示の変更・排他的・共有・無効(MESI)RAM300、例示のアドレス処理構成要素302a~c、例示のバンク処理論理303、例示のヒット/ミス比較論理304、306、例示の置換ポリシー構成要素308、例示のフラッシュエンジン309、例示のエラー訂正符号(ECC)論理310、312、例示のデータマルチプレクサ(MUX)回路314、316、例示のMUX318、320、及び例示のラッチ322を更に含む。
【0058】
図3A~
図3Dの例示の実装では、例示のCPUインタフェース202が、2つのインタフェース(例えば、1つのスカラーインタフェース及び1つのベクトルインタフェースであり、いずれのインタフェースも2つの部分を有し、1つがCPU102からの入力データ用であり、もう1つがCPU102への出力データ用である)を含む。
図3A~
図3Dの入力CPUインタフェース202は、ペンディングのCPU命令がエラスティックバッファにある場合にエラスティックバッファからのバッファされたデータと、エラスティックバッファキューが空の場合にCPU102から送られる命令との間で選択するためのマルチプレクサと含み、入力命令を、対応するアドレス、動作(例えば、読み出し、書き込みなど)、及び書き込みデータ(例えば、命令が書き込み動作に対応する場合)に分割する。
図3A~
図3Dの出力CPUインタフェース202は、CPU102にデータを送り返す。
【0059】
図3A~
図3Dの例示のメインキャッシュストアキュー212は、メインキャッシュストアキュー212の動作に対応するブロックを含む。例えば、メインキャッシュストアキュー212は、読み出し・変更・書き込み動作、書き込みマージ、書き込みデータ転送、書き込み動作、完全なパリティブロック書き込みデータ、重み付きヒストグラム演算、負荷及び増分動作、並びに、比較及びスワップ動作を実装するためのブロックを含む。例示のメインキャッシュストアキュー212は、
図4Aに関連して更に以下に説明される。例示のメインキャッシュストアキュー212は、例示のメインストレージ214に関連して動作する。
図3A~
図3Dの例では、メインストレージ214はデータRAM(DRAM)である。
【0060】
図3A~
図3Dの例示の犠牲キャッシュストアキュー216は、犠牲キャッシュストアキュー216の動作に対応するブロックを含む。例えば、犠牲キャッシュストアキュー216は、読み出し・変更・書き込み動作、書き込みマージ、書き込みデータ転送、書き込み動作、完全なパリティブロック書き込みデータ、負荷及び増分動作、及び比較及びスワップ動作を実装するためのブロックを含む。例示の犠牲キャッシュストアキュー216は、
図5に関連して以下で更に説明される。例示の犠牲キャッシュストアキュー216は、例示の犠牲ストレージ218に関連して動作する。
図3A~
図3Dの例では、メインストレージ214はレジスタファイルである。
【0061】
図3A~
図3Dの例示のMESI RAM300は、例示のCPUインタフェース202及び例示のDRAM214のコマンドラインに接続される。例示のMESI RAM300は、CPU102からのコマンドに基づいて、例示のメインストレージ214内のデータの状態を追跡する。例えば、MESI RAM300は、キャッシュラインを、変更されている、排他的である、共有されている、又は無効であるとしてマーキングすることによって、キャッシュラインの状態を追跡する。変更されている又はダーティである状態は、キャッシュラインが、他の同様のレベルキャッシュに格納されていないデータを含み、そのデータがメインメモリ内の値から変更されたときに対応する(例えば、そのため、拡張メモリ106内のデータの読み出しにフラグが立てられるか、又はそれが最新でないか有効でないために許可される)。排他的である状態は、キャッシュラインが、他の同様のレベルキャッシュに格納されていないデータを含み、そのデータがクリーンである(例えば、拡張メモリ106内のデータと一致する)場合である。共有されている状態は、他のキャッシュに格納されている可能性がありクリーンであるデータがキャッシュラインに含まれていることを示す(例えば、別のキャッシュに存在するため、ラインが破棄され得る)。無効である状態は、キャッシュラインが無効であるか又は未使用であることを示す。MESI RAM300は、メインストレージ214及び/又は拡張メモリ106への更新時に呼び出されてもよい。犠牲キャッシュのための例示のMESI RAM300は、例示のタグRAM210に関連して実装される。
【0062】
図3A~
図3Dの例示のMESI RAM300は、追跡、ラベル付け、マーキングなどによってシステムにコヒーレンシーを付与する。メモリアドレスの状態は、異なるレベルのキャッシュでデータの不一致が生じないように、特定の時間でのデータ書き込みを妨げる可能性がある。MESI RAM300によって追跡される状態は、より高いレベルのキャッシュが、そのメモリアドレスにおけるデータが何のために用いられるかを理解するように、キャッシュミスヒットと共に送信され得る。例えば、L1キャッシュが読み出し動作のためにキャッシュミスを送る場合、キャッシュミスは共有状態を含み、データは読み出されるが操作されないことを高レベルキャッシュに知らせる。L1キャッシュ110が書き込み動作のためにキャッシュミスを送る場合、キャッシュミスは、データが変更されることをより高いレベルキャッシュに知らせるために排他的状態を含む。例示のメインストレージ214及び/又は犠牲ストレージ218が犠牲を退去させるとき、例示のMESI RAM300からの状態を用いて、退去させる方法を把握することができる。例えば、データが共有されている場合、メインストレージ214及び/又は犠牲ストレージ218は、(例えば、メモリアドレスにおけるデータが、既に高キャッシュに位置するので)単に破棄することができる。データが排他的であるか又は変更される場合、キャッシュコントローラ220は、インタフェース228に、(例えば、メモリアドレスについてのデータが、より高いレベルのキャッシュに位置していないか、より高いレベルのキャッシュに位置しているが古いため)犠牲をより高いレベルのキャッシュに送信するように指令する。
【0063】
図3A~
図3Dの例示の処理構成要素302a~cは、CPUインタフェース202、例示のメインストレージ214、(例えば、MUX318を介して)例示のメインキャッシュストアキュー212、(例えば、例示のMUX320を介して)例示の犠牲ストレージ218に、及び相互に接続される。例示のアドレス処理構成要素302a~cは、例示の第1のアドレス処理構成要素302a、第2のアドレス処理構成要素302b、及び第3のアドレス処理構成要素302cを含む。第1のアドレス処理構成要素302aはアドレス変換を実施し、第2のアドレス処理構成要素302bはデータ回転を実施し、第3のアドレス処理構成要素302cは、バンク編成を促進する。代替として、第1のアドレス処理構成要素302a、第2のアドレス処理構成要素302b、及び第3のアドレス処理構成要素302cのうちの1つ又は複数を、同じハードウェア、論理回路、集積チップなどに含めることができる。例示のアドレス処理構成要素302a~cは、データが正しく格納されることを保証するために、特定のストレージプロトコルに従って、例示のメインストレージ214及び犠牲ストレージ218に書き込まれるデータを編成する。例えば、マルチバンクの例(例えば、メインキャッシュストアキュー212、メインストレージ214、犠牲キャッシュストアキュー216、及び犠牲ストレージ218が、複数のバンクに分割される場合)では、アドレス処理構成要素302a~cは、メインキャッシュストアキュー212、メインストレージ214、犠牲キャッシュストアキュー216、及び犠牲ストレージ218のどのバンクが所与のCPU動作のために必要とされる複数のバンクに分割されるかを判定するために、CPU動作からのメモリアドレスを用いることができる。
【0064】
例示のバンク処理論理303は、CPUインタフェース202、例示のメインストレージ214、(例えば、MUX318を介して)例示のメインキャッシュストアキュー212、及び、(例えば、例示のMUX320を介して)例示の犠牲ストレージ218に結合される。動作において、バンク処理論理303は、CPUインタフェース202からの読み出し、変更、及び/又は書き込み命令を解析するように構成される。このようにして、バンク処理論理303は、効率的な部分的バンク読み出し、変更、及び/又は書き込み命令を容易にするために、読み出し、変更、及び/又は書き込み命令の性質を判定するように構成される。本明細書において説明する例では、バンク処理論理303は、入ってくる書き込み命令がバンク全体の書き込みを示すか、又は部分的バンクの書き込みを示すかを検出する。このようにして、バンク処理論理303は、読み出し命令の送信を無効にしながら、読み出し・変更・書き込み動作を動作させるか否かを示すことができる。バンク処理論理303の動作の例示の説明は、以下に記載される。
【0065】
図3A~
図3Dの例示のヒット/ミス比較論理304は、入力CPUインタフェース202、タグRAM208、メインストレージ214、メインキャッシュストアキュー212、キャッシュコントローラ220、及び/又は、例示のMUX回路314に(例えば、データ転送ラッチを介して)接続される。ヒット/ミス比較論理304は、タグRAM208からのアドレスと、CPU102からの命令のアドレスとを取得し、これら2つを比較して(例えば、排他的論理又は(XNOR)論理を用いて)、命令からのアドレスがヒットしたか又はミスしたか(例えば、アドレスに対応するデータが例示のDRAM214に格納されているか否か)を判定する。例示のヒットミス比較論理304は、比較の結果を、例示のメインキャッシュストアキュー212、例示のキャッシュコントローラ220、及び/又は、例示のMUX回路314に出力するためのTAG比較論理を含む。
【0066】
図3A~
図3Dの例示のヒット/ミス比較論理306は、入力CPUインタフェース202、タグRAM210、犠牲キャッシュストアキュー216、及び/又は、例示の置換ポリシー構成要素308に接続される。ヒット/ミス比較論理306は、タグRAM210から犠牲キャッシュのエントリ番号(例えばロケーション)と、CPUインタフェース202からの命令からのアドレスとを取得し、その2つを比較して、アクセス(例えば、CPUインタフェース202からの命令)がヒットか又はミスか(例えば、アドレスに対応するデータが例示の犠牲ストレージ218に格納されているか否か)を判定する。例示のヒットミス比較論理306は、結果を置換ポリシー構成要素308、アドレスエンコーダ326、マルチプレクサ330、及び/又は犠牲キャッシュストアキュー216に出力する。
【0067】
図3A~
図3Dのアドレスエンコーダ326は、(ヒット/ミス比較論理306を介して)タグRAM210及びマルチプレクサ330に接続される。アドレスエンコーダ326は、タグRAM210のアドレスを、犠牲ストレージ218によって解釈可能な形式に符号化する。例えば、タグRAM210は16ビットメモリアドレスを格納し得、一方、犠牲ストレージ218は16ビットメモリアドレスに対応する4ビットメモリアドレスを格納する。そのため、アドレスエンコーダ326は、16ビットメモリアドレスを4ビットメモリアドレスに変換して、犠牲ストレージ218内の対応するメモリアドレスを位置特定及び/又は入力することができる。付加的に及び/又は代替として、アドレスエンコーダ326は、メモリアドレスを任意のビット値に符号化する。アドレスエンコーダ326は、アドレスエンコーダ326が、符号化されたアドレスをマルチプレクサ330に供給するように、例示のマルチプレクサ330に結合される。
【0068】
図3A~
図3Dの例示の置換ポリシー構成要素308は、ヒットミス比較論理306及び置換アドレスエンコーダ328に接続される。幾つかの例において、置換ポリシー構成要素308がタグRAM210に接続される。例示の置換ポリシー構成要素308は、例示の犠牲ストレージ218に格納されたデータの置換ポリシー(例えば、新しい犠牲が犠牲ストレージ218に格納されるべき場合に、どのデータを犠牲キャッシュから移動させるか)を制御する。幾つかの例において、例示のメインストレージ214のための置換ポリシー構成要素があってもよい。しかしながら、置換ポリシーは、ダイレクトマップキャッシュには要求されない(例えば、特定のアドレスが1つのロケーションにしか行かないので例示のメインストレージ214が直接マップされる場合)。例示のフラッシュエンジン(例えば、フラッシュエンジン構成要素)309は、置換ポリシー308に結合される。幾つかの例において、フラッシュエンジン309は、所定の周期性で犠牲ストレージ218内に格納された書き込みミスをフラッシュアウトするために用いられる及び/又は他の方式で呼び出される。
【0069】
図3A~
図3Dの置換アドレスエンコーダ328は、置換アドレスエンコーダ328が、符号化された置換アドレスをマルチプレクサ330に提供するように、マルチプレクサ330に結合される。置換アドレスエンコーダ328は、置換ポリシー構成要素308によって選択されたアドレスを符号化する。例えば、置換ポリシー構成要素308は、16ビット置換メモリアドレスを置換アドレスエンコーダ328に出力し、置換アドレスエンコーダ328は、16ビット置換メモリアドレスを4ビット置換メモリアドレスに変換する。付加的に及び/又は代替として、置換アドレスエンコーダ328は、置換メモリアドレスを任意のビット値に符号化する。
【0070】
図3A~
図3Dのマルチプレクサ330は、ヒット/ミス比較論理306、アドレスエンコーダ326、置換アドレスエンコーダ328、及びアドレス読み出し332に接続される。マルチプレクサ330は、ヒット/ミス比較論理306の結果に基づいて(例えば、アクセスがヒットであったかミスであったかに基づいて)、符号化されたアドレスを選択する。マルチプレクサ330は、選択されたメモリアドレスを、犠牲ストレージ218に読み込まれるべきアドレス読み出し332に供給する。例えば、マルチプレクサ330は、CPU命令が、書き込み命令の場合にデータを読み出すか又はデータを格納するために用いることができる犠牲ストレージ218のロケーションを出力する。
【0071】
図3A~
図3Dの例示のエラー訂正符号(ECC)論理310は、ラッチ322を介して例示のメインストレージ214に、及びマルチプレクサ314に接続される。例示のL1キャッシュ110がECCメモリをサポートする場合、例示のメインストレージ214は、ブロックに対応するECCシンドロームビットのセットと共に、ブロック内にデータを格納する。読み出し動作が受け取られると、例示のメインストレージ214は、格納されたデータブロック及び対応するECCシンドロームビットをECC論理310に提供し得る。例示のECC論理310は、メインストレージ214から読み出されたデータブロックに基づいてECCシンドロームビットを再生成し、再生成されたECCシンドロームビットを以前に格納されたビットと比較し得る。例示のECC論理310は、齟齬があるときにデータブロックが正確に読み出されていないと判定し、データブロック内のエラーを訂正し得る。
【0072】
図3A~
図3Dの例示のエラー訂正符号(ECC)論理312は、ラッチ324を介して例示の犠牲ストレージ218に、及びマルチプレクサ316に接続される。例示のECC論理312は、例示のECC論理310と同様の方式でECC訂正論理を実施する。しかしながら、例示のECC論理312は、例示の犠牲ストレージ218に関してECCシンドロームビット比較を実施する。
【0073】
図3A~
図3Dの例示のメインデータMUX回路314は、メインキャッシュストアキュー212、ECC論理310、(例えば、ラッチを介して)ヒット/ミス比較論理304の出力、(例えば、例示のラッチ322を介して)例示の出力CPUインタフェース202、例示の犠牲データMUX316、及び例示のキャッシュコントローラ220に接続される。例示のメインデータMUX回路314は、例示のCPU102に送信されるべきデータアドレス内のデータを変換するために、例示のアドレス処理構成要素302a~cの逆の動作を有する。例示のMUX回路314内のMUXは、それぞれの選択入力を介してキャッシュコントローラ220によって制御される。
【0074】
図3A~
図3Dの例示の犠牲データMUX回路316は、犠牲キャッシュストアキュー216、ECC論理312、例示のメインデータMUX回路314、(例えば、ラッチを介して)L2キャッシュ112、及び例示のキャッシュコントローラ220に接続される。例示のメインデータMUX回路314は、例示のCPU102に送信されるべきデータアドレス内のデータを変換するために、例示のアドレス処理構成要素302a~cの逆の動作を有する。例示のMUX回路316内のMUXは、それぞれの選択入力を介してキャッシュコントローラ220によって制御される。
【0075】
図3A~
図3Dの例示のMUX318は、L2キャッシュ112に、ラッチを介して例示のCPUインタフェース202に、アドレス処理構成要素302a~c、メインキャッシュストアキュー212、メインストレージ214、キャッシュコントローラ220に接続される。例示のキャッシュコントローラ220は、(例えば、ダイレクトメモリアクセス(DMA)、スヌープトランザクション(例えば、L2キャッシュ112がL1キャッシュ110からのデータを望むとき)、メインキャッシュストアキュー212、読み出しヒットバッファ等を介して)例示のメインストレージ214にデータを書き込んだり例示のメインストレージ214からデータを読み取ったりし得る全ての方式を制御するように、MUX318を制御する。例示のMUX320は、(例えば、犠牲を格納するための退去ラインを介して)例示のメインストレージ214、(例えば、書き込みストリーム及び/又はCPUロードを介して)アドレス処理構成要素302a~c、(例えば、L2W及び/又はスヌープラインを介して)例示のL2キャッシュ112、犠牲ストレージ218、及び/又はキャッシュコントローラ220に接続される。例示のキャッシュコントローラ220は、データが(例えば、L2キャッシュ112などを介して、ダイレクトメモリアクセス(DMA)、スヌープトランザクション、犠牲キャッシュストアキュー216、例示のメインストレージ214からの退去を介して)例示の犠牲ストレージ218に書き込まれたり例示の犠牲ストレージ218から読み出されたりする全ての方式を制御するように、MUX320を制御する。例示のMUX318、320は、それぞれの選択入力を介して例示のキャッシュコントローラ220によって制御される。
【0076】
図3A及び
図3Bの要素は、トランザクション処理の流れを表すように配置される。時間要素は、ステージE1~E5によって表される。各ステージは個別の時間期間を表し、幾つかの例において、各ステージがクロックサイクル又は整数個のクロックサイクルを表す。
【0077】
L1データキャッシュにおける書き込みミスキャッシュ
【0078】
動作において、例示のCPU102は命令を送信する(例えば、読み出し動作に基づいてデータを返し、特定のメモリロケーションにデータを書き込む)。例示のCPU102が最初に特定のメモリアドレスのデータを要求する際、メモリアドレスのためのデータがメインストレージ214に格納されていない場合、タグRAM208は読み出しミスを出力し、L1キャッシュは、処理されるべき読み出しミス情報を(例えば、L2キャッシュ112、L3キャッシュ114、及び/又は拡張メモリ106に)送出する(例えば、CPU102からの要求のアドレスに対応するデータを返す)。次に、L1キャッシュ110は、読み出し割り当て(read allocate)を実施し得る。読み出し割り当てとは、L1キャッシュ110がメインストレージ214にデータを格納する際、タグRAM208等を更新して、アドレスのためのデータが現在メインデータストレージに格納されていることを識別することである。L1キャッシュ110はCPU102にデータを返し得、及び/又は、CPU102が同じアドレスに対する後続の読み出し要求を送出するのを待機し得る。CPU102が同じアドレスに対する後続の読み出し要求を送出する場合、タグRAM208はアドレスに対するデータが現在メインストレージ214に存在することを識別し、それによって読み出しヒットをもたらす。CPU102が同じアドレスへの書き込みを行う場合、タグRAM208は、アドレスがメインストレージ214に格納されているので、書き込みヒットを識別する。書き込みヒットの場合、CPU102は書き込むデータを供給し、L1キャッシュ110は、そのアドレスに対応するメインストレージ214にそのデータを書き込む。
【0079】
CPU102からの初期アクション(又はCPU102からの後続のアクション)によって書き込みミスとなった場合(例えば、CPU102が書き込もうとしているメモリアドレスが例示のメインストレージに格納されていない場合)、L1キャッシュ110は、書き込みミスを実施し得る。書き込みミスの間、L1キャッシュ110は書き込みミスをより高レベルのキャッシュ(例えば、L2キャッシュ112、L3キャッシュ114など)及び/又は拡張メモリ106に送り、メモリアドレスからデータを検索し、データをメインストレージ214に格納し、その後、そのメモリアドレスに対応するロケーションでメインストレージ214内のCPU102からデータを書き込む。
【0080】
しかし、CPU102は、書き込み動作を行うとき、それが直ちに書き込んだ情報を必要としないことが多い。従って、幾つかの例示のキャッシュシステムは、(例えば、データを書き込む前に、より高いキャッシュからメモリアドレスをロードしようとすることによって)CPUがストールするのを防ぐために、CPUからの書き込み命令を格納するための書き込みバッファを含んでいた。このように、CPUは、L1キャッシュがより高いレベルキャッシュとインタフェースして、バッファ内の書き込み命令に対応するメモリアドレス内のデータを取得し、そのデータをメインストレージに格納し、CPUからの後続の命令と並行してデータ(例えば、書き込みバッファに格納された)を書き込む一方で、命令を送信し続けることができる。しかしながら、CPUは書き込み命令毎に数バイトしか書き込むことができず、L1キャッシュとより高いレベルキャッシュ及び/又は拡張メモリとの間のインタフェースは、より多くのバイト数(例えば、64バイト帯域幅)を送ることが可能である。従って、大きいバイトインタフェース上でのサイクル当たり数バイトの送信は非効率的である。
【0081】
図3A~
図3Dのシステムでは、書き込みバッファを実装する代わりに、犠牲ストレージ218の或るセクションが書き込みミス情報専用である。従って、例示の犠牲ストレージ218は、犠牲キャッシュ及び書き込みミスバッファである。犠牲ストレージのセクションは書き込みミスキャッシュと呼ばれる。幾つかの例において、書き込みミスキャッシュは、メインストレージ214において付加的に又は代替として実装されてもよい。幾つかの例において、書き込みミスキャッシュは128バイトのキャッシュラインである。書き込みミスキャッシュは、書き込みミスキャッシュが満杯になるまで、及び/又はより高いレベルキャッシュ及び/又は拡張メモリに送信され得るバイトの第1の閾値数を超えるまで、全ての書き込みミスデータを格納する。書き込みミスキャッシュが満杯になるか、又は書き込みミスデータの第1の閾値量が書き込みミスキャッシュに追加されると、犠牲ストレージ218は、書き込みミスキャッシュ内の書き込みミスデータの第2の閾値量を、より高いレベルキャッシュ(例えば、L2キャッシュ112)及び/又は拡張メモリ106に格納されたアドレスに書き込まれるべき、より高いレベルキャッシュに(例えば、例示のL2インタフェース228を介して)送られる1つの信号に結合する。このようにして、インタフェースの帯域幅の大部分又は全部を特定のサイクルで利用し得る。第2の閾値は、第1の閾値と同じであっても異なっていてもよい。また、書き込みデータは、メインストレージ214又は犠牲ストレージ218に局所的に格納される。従って、書き込み動作がより高いキャッシュ(例えば、L2キャッシュ112、例示のL3キャッシュ114など)及び/又は拡張メモリ106に渡される前に、付加的な読み出し又は書き込み動作がCPU102から送られる場合、キャッシュコントローラ220は、より高いレベルのキャッシュ及び/又は拡張メモリ106に送信される前に、書き込みミスキャッシュ内の対応するアドレスにデータを読み出し及び/又は書き込みし得る。
【0082】
幾つかの例において、犠牲ストレージ218内の書き込みミスキャッシュの構造は、書き込みミス情報の値バイト(例えば、書き込まれるべきバイト)を表すバイトイネーブルレジスタファイルを含む。例えば、メモリアドレスの第1のバイト及び第3のバイトの書き込みデータに対応する書き込みミスが書き込みミスキャッシュに格納されている場合、犠牲ストレージ218は、メモリアドレスに関連して第1のバイト及び第3のバイトの書き込みミスデータを格納し、バイトイネーブルレジスタファイルの対応するエントリに、第1のバイト及び第3のバイトに対応するエントリの要素に対する第1の値(例えば、「1」)と、エントリの残りの要素に対する第2値(例えば、「0」)とを追加(populate)する。このように、書き込みミスデータがより高いレベルキャッシュに送信されると、エントリのバイトイネーブルビットが送信に含まれ、より高いレベルキャッシュは、どのデータが有効であるか(例えば、どのバイトに書き込むべきか)、どのデータが無効であるか(例えば、どのバイトに書き込むべきでないか)を知ることができる。
【0083】
場合によっては、書き込み又は読み出し要求がメインストレージ214においてヒットである場合、犠牲ストレージ218の結果は無視されてもよい。メインストレージ214が一方向アソシアティブキャッシュとして構成されている場合、複数のデータ経路とのキャッシュ要求の競合は明快である。データ経路は、実行されるか及び/又はその他の方式で呼び出されたときに、ソースからアドレスへのデータ(例えば、論理信号、ビットベクトルなど)の送信又は配信を達成する1つ又は複数の論理回路である。複数のデータ経路からのキャッシュ要求競合は、犠牲ストレージ218がフルアソシアティブであり、キャッシュエントリと同様に書き込みミスエントリを格納することができる、犠牲ストレージ218の問題となる可能性がある。2つのデータ経路についてのキャッシュ要求の競合は、下記の例において説明するように処理され得る。以下の例では、キャッシュ動作は特定のデータ経路の文脈で記載されている。ただし、これらの例は特定のキャッシュ動作の組み合わせに向けられており、特定のキャッシュ動作がどのデータ経路で実施されているかは関係ない。
【0084】
第1の例では、2つの異なるメモリアドレスを有する、第1のデータ経路についてのキャッシュ読み出しミスと第2のデータ経路についてのキャッシュ書き込みヒットがある。犠牲ストレージ218がフルアソシアティブである場合、キャッシュ要求は犠牲ストレージ218内の任意のロケーションに行くことができる。
図3A~
図3Dを参照すると、犠牲ストレージ218内の或るロケーションのアドレス生成が、犠牲キャッシュタグRAM210内のアドレスルックアップテーブルと共にE2パイプステージで生じ、従って、キャッシュ要求のアドレスがヒットかミスかが分かる前に、犠牲キャッシュ内のロケーションについてアドレス生成が行われる。コントローラ220がメインストレージ214上に読み出しミスがあると判定した後、読み出し要求のメモリアドレスを取得する要求がより高いレベルのキャッシュ又はメモリに発行される。メインストレージ214が一方向アソシアティブである場合、第1のデータ経路の読み出し要求のメモリアドレスは、メインストレージ214内の単一のロケーションにマップされる。単一のロケーションに既にキャッシュされたデータがある場合、既にキャッシュされたデータは、メインストレージ214から犠牲ストレージ218へ、犠牲ストレージ218内の予め生成されたロケーションへ退去される。この事前生成されたロケーションが、第2のデータ経路のキャッシュ書き込みがヒットするのと同じロケーションである場合、競合が生じる。この競合はキャッシュコントローラ220によって検出され得る。上述したように、犠牲ストレージ218内の或るロケーションに対するアドレス生成は、キャッシュ要求のアドレスがヒットであるかミスであるかが分かる前に行われ、従って、キャッシュ書き込みがヒットであると判定する前の第2のデータ経路のキャッシュ書き込みに対して犠牲ストレージ218内の第2のロケーションに対して生成されたアドレスがある。競合の検出に基づいて、犠牲キャッシュ内のこの第2のロケーションを用いて、読み出しミスによってメインストレージ214から退去されたデータを格納し得る。
【0085】
別の例において、第1の例と同様に、第1のデータ経路についてキャッシュ読み出しミスがあり、第2のデータ経路についてキャッシュ書き込みヒットがある場合がある。この例では、読み出しミスに起因して、書き込み要求のメモリアドレスを取得する要求が、より高いレベルのキャッシュ又はメモリに対して発行され、既にキャッシュされたデータが犠牲ストレージ214から犠牲ストレージ218に、犠牲ストレージ218内の事前に生成されたロケーション、ここではロケーションA、に退去される。この例では、第2のデータ経路のキャッシュ書き込みも、犠牲ストレージ218内のロケーションAにヒットし、その結果、セット競合が生じる。このような競合に対する1つの可能な解決策は、要求された読み出しミスをより高いレベルのキャッシュ又はメモリから別個のロケーションの犠牲キャッシュに直接ロードすることである。競合に対する別の解決策は、キャッシュコントローラ220が、第2のデータ経路のロケーションAへのキャッシュ書き込みが完了し、ロケーションAがより高いレベルのキャッシュ又はメモリに退去されるまで、既にキャッシュされたデータが犠牲ストレージ218に退去されないように、読み出しミスをストールすることである。場合によっては、より高いレベルのキャッシュ又はメモリが読み出しミスデータを返すのを待機している間にストールが発生することがある。
【0086】
別の例として、犠牲ストレージ218のための第1のデータ経路上で第1のキャッシュ書き込みが受け取られ、犠牲ストレージ218のための第2のデータ経路上でも第2のキャッシュ書き込みが受け取られる。第1のキャッシュ書き込みと第2のキャッシュ書き込みが異なるメモリアドレスにアドレス指定される場合、両方のキャッシュ書き込みが犠牲ストレージ218に並行して進行し得る。第1のキャッシュ書き込みと第2のキャッシュ書き込みの両方が同じメモリアドレスにアドレス指定され、両方がキャッシュミスである場合、犠牲キャッシュコントローラ224は、割り当てられた犠牲キャッシュ書き込みミスメモリ内の単一のロケーションを割り当て、第1のキャッシュ書き込みと第2のキャッシュ書き込みを犠牲キャッシュストアキュー216においてマージする。マージされたデータは、マージされたバイトイネーブル、優先順位、及びカラータグ情報とともに、犠牲キャッシュ書き込みミスメモリに書き込まれ得る。第1のキャッシュ書き込みと第2のキャッシュ書き込みの両方が同じメモリアドレスにアドレス指定され、両方がキャッシュヒットである場合、第1のキャッシュ書き込みと第2のキャッシュ書き込みの両方が、ヒットロケーションにおいてキャッシュにマージされる。
【0087】
別の例として、犠牲ストレージ218のための第1のデータ経路でキャッシュ読み出しが受け取られ得、犠牲ストレージ218のための第2のデータ経路でキャッシュ書き込みが受け取られ得る。キャッシュ読み出しがヒットであり、キャッシュ書き込みが犠牲ストレージ218内の異なるロケーションへのヒットである場合、キャッシュ読み出し及びキャッシュ書き込みは、競合することなく並列に進行する。キャッシュ読み出しがヒットであり、キャッシュ書き込みが犠牲ストレージ218内の異なるロケーションへのミスである場合、キャッシュ読み出し及びキャッシュ書き込みも競合なしに並列に進行する。キャッシュ読み出しがミスであり、キャッシュ書き込みが犠牲ストレージ218内の異なるロケーションへのヒットである場合、キャッシュ読み出しは、上述したように、犠牲ストレージ218内のロケーションに対して生成されたアドレスをキャッシュ書き込みに用いてもよい。キャッシュ読み出しがミスであり、キャッシュ書き込みが犠牲ストレージ218内の異なるロケーションへのミスである場合、キャッシュ読み出しとキャッシュ書き込みの両方が、犠牲ストレージ218内のロケーションに対して生成されたアドレスを使用する。
【0088】
別の例において、犠牲ストレージ218のための第1のデータ経路でキャッシュ読み出しを受け取り、犠牲ストレージ218のための第2のデータ経路でキャッシュ書き込みを受け取り得る。或るケースでは、キャッシュ読み出しは、犠牲ストレージ218に格納されたアドレスのセットの第1のアドレスに対するヒットであり得る。キャッシュ書き込みは、犠牲ストレージ218に格納された同じアドレスのセットの第2のアドレスに対するヒットであってもよい。このような場合、キャッシュ読み出し及びキャッシュ書き込みが、競合なく並行して進行し得る。別のケースでは、キャッシュ読み出しは、犠牲ストレージ218に格納されたアドレスのセットの第1のアドレスに対するヒットであり得る。キャッシュ書き込みは、犠牲ストレージ218に格納された同じアドレスのセットの第2のアドレスに対するミスであり得る。このような場合、キャッシュ読み出しとキャッシュ書き込みが、競合なく並行して進行し得る。別のケースでは、キャッシュ読み出しは、犠牲ストレージ218に格納されたアドレスのセットの第1のアドレスに対するミスであり得る。キャッシュ書き込みは、犠牲ストレージ218に格納された同じアドレスのセットの第2のアドレスに対するヒットであり得る。このような場合、上述したものと同様に、キャッシュ読み出しは、犠牲ストレージ218内のロケーションへの第2のデータ経路のキャッシュ書き込みが完了し、より高いレベルのキャッシュ又はメモリに退去されるまでストールされ得る。次に、キャッシュ読み出しは、より高いレベルのキャッシュ又はメモリから犠牲ストレージ218にアドレスのセットを読み出すために進行する。別のケースでは、キャッシュ読み出しは、犠牲ストレージ218に格納されたアドレスのセットの第1のアドレスに対するミスであり得る。キャッシュ書き込みは、犠牲ストレージ218に格納された同じアドレスのセットの第2のアドレスに対するミスであり得る。このような場合、キャッシュ読み出しとキャッシュ書き込みが競合なく並行して進行し得る。
【0089】
別の例において、犠牲ストレージ218のための第1のデータ経路でキャッシュ読み出しを受け取り、犠牲ストレージ218のための第2のデータ経路でキャッシュ書き込みを受け取り得る。場合によっては、キャッシュ読み出しは犠牲ストレージ218に格納されたアドレスに対するヒットであり得る。キャッシュ書き込みは、犠牲ストレージ218に格納された同じアドレスに対するヒットであり得る。このような場合、キャッシュ読み出しが最初に進行し得、キャッシュ読み出しが完了するまでキャッシュ書き込みがストールされ得る。代替として、キャッシュ書き込み及びキャッシュ読み出しの順は、キャッシュ書き込み及びキャッシュ読み出しが受け取られるデータ経路に基づき、より低い(又はより高い)番号のデータ経路に到達したキャッシュ動作は、他のキャッシュ動作の前に完了し得る。場合によっては、キャッシュ読み出しは犠牲ストレージ218に格納されたアドレスに対するミスであり得る。キャッシュ書き込みは、犠牲ストレージ218に格納された同じアドレスに対するミスであり得る。このような場合、キャッシュ書き込み動作はより高いレベルのキャッシュ又はメモリに転送され得、キャッシュ読み出しは、犠牲ストレージ218への格納のためのキャッシュ書き込み動作が完了した後に、より高いレベルのキャッシュ又はメモリからデータを取得し得る。
【0090】
別の例において、犠牲ストレージ218のための第1のデータ経路上で第1のキャッシュ読み出しを受け取り、犠牲ストレージ218のための第2のデータ経路上で第2のキャッシュ読み出しを受け取り得る。第1のキャッシュ読み出しと第2のキャッシュ読み出しが異なるメモリアドレスに対するものである場合、ヒットとミスのどちらにも競合は発生しない。或るケースでは、第1のキャッシュ読み出しはアドレスのセットの第1のアドレスに対するミスであり得る。第2のキャッシュ読み出しは、同じアドレスのセットの第2のアドレスのミスでもあり得る。第1のキャッシュ読み出しと第2のキャッシュ読み出しの優先順位レベルが異なる場合、異なる優先順位レベルの高い方に基づいて、より高いレベルのキャッシュ又はメモリにアクセスする。そうでない場合、より高いレベルのキャッシュ又はメモリがアクセスされ、犠牲ストレージ218に格納するために得られたメモリアドレスのセットがアクセスされる。第1のキャッシュ読み出しと第2のキャッシュ読み出しが同じアドレスに対するものである場合も同様に処理される。
【0091】
L1データキャッシュにおける書き込みミスキャッシングを容易にするための例示の方法、装置、システム、及び製品が、本明細書において記載される。また、その幾つかの例及び組み合わせには、下記が含まれる。例1は、第1のキャッシュストレージと、第2のキャッシュストレージと、キャッシュコントローラとを含む装置を含む。第2のキャッシュストレージは、第1のキャッシュストレージから退去されたデータの第1のセットを格納するように動作可能な第1の部分と、第2の部分とを含む。キャッシュコントローラは、第1のキャッシュストレージ及び第2のキャッシュストレージに結合され、書き込み動作を受け取り、書き込み動作が第1のキャッシュストレージにおいてミスを生成すると判定し、第1のキャッシュストレージにおけるミスに応答して、第2の部分に格納するための第2のキャッシュストレージに書き込み動作に関連する書き込みミス情報を提供するように動作可能である。
【0092】
例2は、例1の装置を含み、キャッシュコントローラは、第2のキャッシュストレージの第2の部分を閾値と比較し、第2の部分が閾値を超えることに基づいて、書き込みミス情報を第2のキャッシュに送信させるように動作可能である。
【0093】
例3は、閾値がインタフェースの帯域幅に対応する、例2の装置を含む。
【0094】
例4は、閾値が第2の部分のサイズに対応する、例2の装置を含む。
【0095】
例5は、例1の装置を含み、書き込みミス情報は、第1の書き込みミス情報であり、第2のキャッシュストレージに対して動作可能なキャッシュコントローラは、第2のキャッシュストレージが第1の書き込みミス情報に対応するメモリアドレスに対する第2の書き込みミス情報を含む場合に、第1のキャッシュストレージから第2のキャッシュストレージへ第1の書き込みミス情報を提供しないためのものである。
【0096】
例6は、例1の装置を含み、第1のキャッシュストレージと第2のキャッシュストレージは並列に中央処理装置に接続される。
【0097】
例7は、例1の装置を含み、書き込みミス情報は、第1の書き込みミス情報であり、キャッシュコントローラは、第1のキャッシュストレージからの第1の書き込みミス情報の第1のメモリアドレスが第2の部分に格納された第2の書き込みミス情報の第2のメモリアドレスと一致するとき、第1の書き込みミス情報を第2の書き込みミス情報とマージするように動作可能である。
【0098】
例8は、例7の装置を含み、キャッシュコントローラは、(a)第1の書き込みミス情報の第1の書き込み情報を維持すること、又は(b)第2の書き込み情報が第1の書き込みミス情報と同じ1つ又はそれ以上のバイトに対応するときに、第2の書き込みミス情報の第2の書き込み情報を破棄することのうちの少なくとも1つによって、第1の書き込みミス情報を第2の書き込みミス情報とマージするためのものである。
【0099】
例9は、例1の装置を含み、第2の部分はバイトイネーブルレジスタを含み、キャッシュコントローラは、書き込みミス情報に基づいて、バイトイネーブルレジスタに値を格納するためのものである。
【0100】
例10は、値が、書き込まれる書き込みミス情報の要素に対応する、例9の装置を含む。
【0101】
例11は、メモリアドレスに対応する書き込みコマンドを出力するための中央処理装置と、第1のキャッシュストレージがメモリアドレスのためのデータを格納しないときに第1のストレージから第2のストレージに書き込みミス情報を出力するための第1のキャッシュストレージと、第2のキャッシュストレージとを含むシステムを含む。第2のキャッシュストレージは、第1のキャッシュストレージから退去されたデータの第1のセットを格納するように動作可能な第1の部分と第2の部分とを含み、第2のキャッシュストレージは、書き込みミス情報を第2のストレージの専用セクションに格納するためのものであり、専用セクションが書き込みミス情報に専用である。
【0102】
例12は、例11のシステムを含み、第2のキャッシュストレージは、専用セクションが閾値量より多い書き込みミス情報を有するとき、書き込みミス情報を第2のキャッシュに出力するためのものである。
【0103】
例13は、例12のシステムを含み、閾値は、第2のキャッシュに対するインタフェースの帯域幅に対応する。
【0104】
例14は、閾値が第2の部分のサイズに対応する、例12のシステムを含む。
【0105】
例15は、例11のシステムを含み、第2のキャッシュストレージは、第2のキャッシュストレージが、中央処理装置からの書き込みミス情報と同じメモリアドレスに対応する第2の書き込み命令を含む場合に、第1のストレージからの書き込みミス情報を第2の部分に格納しないためのものである。
【0106】
例16は、例11のシステムを含み、第1のキャッシュストレージと第2のキャッシュストレージは並列に、中央処理装置に接続される。
【0107】
例17は、例11のシステムを含み、書き込みミス情報は第1の書き込みミス情報であり、このシステムは、コントローラを更に含み、コントローラは、第1のキャッシュストレージからの第1の書き込みミス情報の第1のメモリアドレスが第2の部分に格納された第2の書き込みミス情報の第2のメモリアドレスと一致したときに、第1の書き込みミス情報を第2の書き込みミス情報とマージするためのものである。
【0108】
例18は、例17のシステムを含み、キャッシュコントローラは(a)第1の書き込みミス情報の第1の書き込み情報を維持すること、又は(b)第2の書き込み情報が第1の書き込みミス情報と同じ1つ又はそれ以上のバイトに対応するときに、第2の書き込みミス情報の第2の書き込み情報を破棄することのうちの少なくとも1つによって、第1の書き込みミス情報を第2の書き込みミス情報とマージするためのものである。
【0109】
例19は方法を含み、この方法は、書き込み動作を受け取ることと、書き込み動作が第1のキャッシュストレージにおいてミスを生成すると判定することと、第1のキャッシュストレージにおけるミスに応答して、第2の部分にストアするために、書き込み動作に関連する書き込みミス情報を、第1の部分と第2の部分とを備える第2のキャッシュストレージ要素に提供することとを含み、第1の部分は、第1のキャッシュストレージから退去されたデータの第1のセットを格納する。
【0110】
例20は、例19の方法を含み、この方法は更に、第2のキャッシュストレージの第2の部分を閾値と比較することと、第2の部分が閾値を超えていることに基づいて、書き込みミス情報を第2のキャッシュに出力することとを含む。
【0111】
図4Aは、
図2及び/又は
図3の例示のメインキャッシュストアキュー212の例示の回路実装である。
図4Aでは、メインキャッシュストアキュー212が、例示のラッチ402a、402b、402c、402d、402e、例示のマージ回路403a~c、例示の演算構成要素404、例示のアトミック比較構成要素406、例示の読み出し・変更・書き込み・マージ構成要素408、例示の選択マルチプレクサ410、及び例示のECC生成器412、例示の調停マネージャ414、例示のペンディングストアアドレスデータストア416、例示の優先順位マルチプレクサ418、例示の読み出しポート424、及び例示の書き込みポート426を含む。例示のマージ回路403a~dは、例示のコンパレータ420、及び例示のスイッチ422を含む。
図4Aの例は、メインキャッシュストアキュー212の単一のパイプラインを図示する。しかしながら、メインストレージ要素214は、破線のボックス400によって示されるように、異なるバンクに関してパイプラインの2つ以上の独立した複製をサポートするように構成されてもよい。従って、
図4Aのパイプラインは、以下で更に説明されるように、異なるバンクに対して複数回再現され得る。
【0112】
図4Aでは、例示のラッチ402a、402b、402c、402d、402eは、メインキャッシュストアキュー212によって得られた情報(例えば、バイト、ビットなど)を格納するように構成される電子デバイスである。例示のラッチ402a~cは、書き込みデータと、書き込みデータが、演算ユニット404、アトミックユニット406、及び/又は、RMWマージ構成要素408内のECC論理310からの、読み出され、訂正されたデータと結合される必要があるかどうかに対応する情報とを渡す。
図4Aの例では、ラッチ402aは、読み出し、書き込み、及び/又は変更命令を取得するために、キャッシュコントローラ220に通信可能に結合される。このような読み出し、変更、及び/又は書き込み命令は、CPU102から発生し得、キャッシュコントローラ220を介してラッチ402aに転送され得る。ラッチ402aは、ラッチ402b、タグRAM208、調停マネージャ414、及びペンディングのストアアドレスデータストア416に結合されて、キャッシュコントローラ220の後続のクロックサイクルに応答して、そのような読み出し、変更、及び/又は書き込み命令を、ラッチ402b、タグRAM208、調停マネージャ414、及びペンディングのストアアドレスデータストア416に送信する。
【0113】
図4Aの例では、ラッチ402bが、ラッチ402a、ペンディングのストアアドレスデータストア416、ラッチ402c、優先順位マルチプレクサ418、及びコンパレータ420に結合されて、キャッシュコントローラ220の後続のクロックサイクルに応答して、得られた読み出し、変更、及び/又は書き込み命令を送信する。このようにして、読み出し、変更、及び/又は書き込み命令から得られた値(例えば、バイト値、ビット値など)は、メインキャッシュストアキュー212を介して伝搬する。
【0114】
ラッチ402cの例は、ラッチ402b、優先順位マルチプレクサ418、演算構成要素404、アトミック比較構成要素406、及び読み出し・変更・書き込み・マージ構成要素408に結合されている。この結合により、ラッチ402cは、キャッシュコントローラ220の後続のクロックサイクルに応じて、読み出し、変更、及び/又は書き込み命令から得られた値(例えば、バイト値、ビット値など)を、演算構成要素404、アトミック比較構成要素406、及び/又は読み出し・変更・書き込み・マージ構成要素408に送信し得る。本明細書において説明する幾つかの例において、ラッチ402cは、読み出し、変更、及び/又は書き込み命令から得られた値(例えば、バイト値、ビット値など)を、演算構成要素404、アトミック比較構成要素406、及び/又は読み出し・変更・書き込み・マージ構成要素408のうちの1つ又は複数に送信し得る。例えば、キャッシュコントローラ220が、或るビットを現在格納されているワードに書き込む命令を送信した場合、ラッチ402cは、読み出し、変更、及び/又は命令(例えば、バイト値、ビット値等)から得られた値を読み出し・変更・書き込み・マージ構成要素408に送信し得る。本明細書において説明する他の例において、キャッシュコントローラ220は、ビットを現在格納されているワードに書き込む命令を送信し得るが、ラッチ402cは、読み出し、変更、及び/又は書き込み命令から得られた値(例えば、バイト値、ビット値など)を、演算構成要素404、アトミック比較構成要素406、及び/又は読み出し・変更・書き込み・マージ構成要素408に送信し得る。
【0115】
例示のラッチ402dは、第1のマルチプレクサ410、ECC生成器412、及びラッチ402eに結合される。この結合により、ラッチ402dは、キャッシュコントローラクロック220の後続のクロックサイクルに応答して、第1のマルチプレクサ410から得られた値をECC生成器412及び/又はマージ回路403aに転送し得る。
【0116】
例示のラッチ402eは、優先順位マルチプレクサ418に、及び
図3及び/又は
図4のMUX回路314に結合される。この結合により、ラッチ402eは、キャッシュコントローラ220の後続のクロックサイクルに応答して、優先順位マルチプレクサ418から得られた値をMUX回路314に転送し得る。例えば、メインストレージ要素214にヒットしたアドレスへのCPU102による読み出し動作では、同じアドレスへの以前の書き込みが依然としてインフライト(inflight)(例えば、メインストレージ要素214に完全には書込まれていない)可能性がある。このような例では、ラッチ402eは、書き込まれていないデータバイトを収集し、それをMUX314に提供し、MUX314は最終的にCPU102に送り戻させる。
【0117】
例示のマージ回路403aは、ラッチ402d、マージ回路403b、演算構成要素404、アトミック比較構成要素406、及び読み出し・変更・書き込み・マージ構成要素408に結合されている。例示のマージ回路403bは、マージ回路403a、優先順位マルチプレクサ418、及びマージ回路403cに結合されている。例示のマージ回路403cは、マージ回路403b及びラッチ402bに結合されている。例示のマージ回路403a~cは以下で更に説明されるように、メインキャッシュストアキュー212の異なるセクションにおける読み出し動作の比較を促進して、同じメモリアドレスロケーションに対応する書き込み動作とマージされる書き込み動作を潜在的に再配路する。
図4Aの例は3つのマージ回路403a~cを含むが、メインキャッシュストアキュー212の他のセクションからの書き込み動作をマージするための付加的なマージ回路(例えば、ラッチ402dの出力をラッチ402b及び/又はラッチ402aの出力に結合するマージ回路など)があり得る。幾つかの例において、マージングされた回路403a~cは、異なるラッチ402b~dからの書き込み動作を比較し、任意の2つ又はそれ以上の異なるラッチ402b~dのいずれかにおけるマッチングメモリアドレスに基づいて再配路する、単一の回路に結合される。
【0118】
図4Aに示す例では、演算構成要素404が、ラッチ402c、第1のマルチプレクサ410、及びECC論理310に結合されて、メインストレージ214からのデータに対して演算動作(例えば、増分、減分など)を実施する。また、演算構成要素404は、メインストレージ214に格納されたデータに対してヒストグラム演算を行う。
図4Aの図示される例の例示の演算構成要素404は、例えばハードウェアプロセッサなどの論理回路によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。例示の演算構成要素404の動作は、以下で更に説明される。
【0119】
図4Aに示す例では、アトミック比較構成要素406は、ラッチ402c、第1のマルチプレクサ410、及びECC論理310に結合されて、メモリアドレスにおけるデータを鍵と比較し、メモリアドレスのデータが鍵と一致する場合にはデータを置換する。
図4Aの図示される例の例示のアトミック比較構成要素406は、例えばハードウェアプロセッサなどの論理回路によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。例示のアトミック比較構成要素406の動作は、以下で更に説明される。
【0120】
図4Aに図示されている例では、読み出し・変更・書き込み・マージ構成要素408は、キャッシュコントローラ220によって送られる、読み出し、変更、及び/又は書き込み命令を容易にするために、ラッチ402c、第1のマルチプレクサ410、及びECC論理310に結合されている。例えば、読み出し・変更・書き込み・マージ構成要素408は、読み出し、変更、及び/又は書き込み命令の影響を受ける現在格納されているワードを取得するために、ECC論理310に結合される。例示の書き込み動作では、読み出し・変更・書き込み・マージ構成要素408は、ECC論理310から取得された現在格納されているワードを、ラッチ402cから取得された新しいビット、バイトなどで更新するように構成される。読み出し・変更・書き込み・マージ構成要素408の付加的な記載は、以下に説明される。
図4Aの図示される例の例示の読み出し・変更・書き込み・マージ構成要素408は、例えば、ハードウェアプロセッサなどの論理によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。
【0121】
例示の第1のマルチプレクサ410は、キャッシュコントローラ220からの指示(indication)に基づいて、演算構成要素404、アトミック比較構成要素406、又は読み出し・変更・書き込み・マージ構成要素408のいずれかの出力をラッチ402dに送信するために、演算構成要素404、アトミック比較構成要素406、及び読み出し・変更・書き込み・マージ構成要素408に結合される。例えば、キャッシュコントローラ220が書き込み機能を実施することを示す場合(例えば、キャッシュ制御がラッチ402bに書き込み要求を送信する場合)、ラッチ402dに送信されるべき読み出し・変更・書き込み・マージ構成要素408に接続された入力を選択するために、キャッシュコントローラ220によって第1のマルチプレクサ410に指示が送信される。
図4Aの図示される例の例示の第1のマルチプレクサ410は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。
【0122】
図4Aにおいて図示される例では、ECC生成器412は、ラッチ402dに格納されている値(例えば、バイト、ビット等)におけるエラーの検出及び訂正を容易にするために、ラッチ402d及びマージ回路403に結合されている。例えば、ECC生成器412はECC値を再生成する(例えば、エラー検出符号を生成する)ように構成され、ECC値は、データ(例えば、読み出し・変更・書き込み・マージ構成要素1108からのマージされたワード)と共に格納される。ECC値は、上述したように、エラー検出及び訂正回路によって用いられて、読み出し及び/又は書き込み動作中にエラーが発生したかどうかを判定する。
図4Aに図示される例の例示のECC生成器412は、例えば、ハードウェアプロセッサなどの論理によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。
【0123】
図4Aでは、例示の調停マネージャ414が、ラッチ402a、ラッチ402b、ペンディングのストアアドレスデータストア416、及びメインストレージ214に結合されて、キャッシュコントローラ220から得られる、読み出し、変更、及び/又は書き込み命令を容易にする。例えば、書き込み命令がキャッシュコントローラ220から受け取った場合、調停マネージャ414は、現在格納されている対応するワードの読み出し命令をメインストレージ214に送信するように構成される。また、調停マネージャ414は、メインストレージ214に結合されて、メインストレージ214の競合するアクセス間の調停を行う。同じサイクルにおいて複数の動作がメインストレージ214にアクセスしようと試みるとき、調停マネージャ414は、或る優先順位方式に従って、どの動作がメインストレージ214にアクセスすることを許可されるかを選択し得る。適切な優先順位方式は以下でより詳細に説明されるが、一例では、調停は、メインキャッシュストアキュー212内にある書き込みデータがメインストレージ214に書き込まれる前であっても、後続の動作による使用のために利用可能であるため、書き込み動作よりも読み出し動作の方が優先される。従って、書き込みデータがメインキャッシュストアキュー212内で待機できるようにすることにおいて、性能への影響は最小限である。しかしながら、メインキャッシュストアキュー214がまだ書き戻されていない書き込みデータで満たされると、書き込み動作の優先度は、競合する読み出し動作よりも優先されるまで増加し得る。
【0124】
図4Aに図示される例の例示の調停マネージャ414は、例えばハードウェアプロセッサなどの論理回路によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。
【0125】
図4Aの例では、ペンディングのストアアドレスデータストア416は、キャッシュコントローラ220から取得された、読み出し、変更、及び/又は書き込み命令のアドレスを格納するように構成されている。このようにして、ペンディングのストアアドレスデータストア416は、ラッチ402a、402b、402c、402d、402e、及び/又はマージ回路403a、403b、及び/又は403cのいずれかに格納された各値に関連するアドレスのログを維持する。
図4Aの図示される例の例示のペンディングのストアアドレスデータストア416は、例えば、フラッシュメモリ、磁気媒体、光媒体などの、データを格納するための任意のデバイスによって実装され得る。また、ペンディングのストアアドレスデータストア416に格納されるデータは、バイナリデータ、カンマ区切りデータ、タブ区切りデータ、構造化問い合わせ言語(SQL)構造などの任意のデータフォーマットであり得る。
【0126】
例示の優先順位マルチプレクサ418は、ラッチ402b、ラッチ402c、ラッチ402d、及びマージ回路403aに結合されており、ラッチ402b、ラッチ402c、ラッチ402d、又はマージ回路403aのいずれかが書き込み命令に対応する値を格納している場合の読み出し動作を容易にする。例えば、キャッシュコントローラは、アドレスA3、A2、A1、及びA0を有する4バイトワードに関する次の4つの書き込み命令を開始し得る。アドレスA0にバイト0x11を書き込み、アドレスA1にバイト0x22を書き込み、アドレスA3にバイト0x23を書き込み、アドレスA0にバイト0x44を書き込む。このような例では、キャッシュコントローラ220が4バイトワード全体を読み出すための読み出し命令を開始した場合、優先順位マルチプレクサ418は、マージ回路403aに格納されたバイト値0x11、ラッチ402dに格納されたバイト値0x22、ラッチ402cに格納されたバイト値0x23、及びラッチ402bに格納されたバイト値0x22を取得するように構成される。また、ペンディングのストアアドレスデータストア416は、ラッチ402b、ラッチ402c、ラッチ402d、及びマージ回路403aに格納されたバイト値にどのアドレス値が関連付けられているかを示す命令を、優先順位マルチプレクサ418に送信する。このような例では、ラッチ402bに格納されたバイト値がアドレスA0に関連付けられ、マージ回路403aに格納されたバイト値もアドレスA0に関連付けられるので、優先順位マルチプレクサ418は、アドレスA0が0x44(例えば、アドレスA0に関連付けられた最新の書き込み命令)であり、アドレスA1が0x22であり、アドレスA3が0x23であることを示すパケットをラッチ402eに送信するように構成される。
【0127】
このようにして、MUX回路314は、現在格納されているワードの値を、優先順位マルチプレクサ418から得られたバイト値で更新するように構成される。このような動作により、書き込み命令がメインキャッシュストアキュー212を完全に伝搬していない場合でも、メインキャッシュストアキュー212によって送信される読み出し命令が潜在的に正しいワードを示すことが保証される。
【0128】
例示の読み出し経路(例えば、タグRAM208への読み出し入力)が、メインキャッシュストアキュー212と並行して実行し得る。読み出し動作(例えば、読み出し命令)が、まだ完了していない可能性がある書き込み動作(例えば、書き込み命令)内のデータを参照する可能性があるため、メインキャッシュストアキュー212は、まだメインストレージ214に書き戻されていないメインキャッシュストアキュー212からのデータを読み出し経路が取得することを可能にする、書き込み転送機能を含み得る。一例では、メインキャッシュストアキュー212は、メインキャッシュストアキュー212の各ステージにおける動作のアドレスを記録するペンディングのストアアドレスデータストア416と、転送のためにメインキャッシュストアキュー212のステージ(例えば、ラッチ)のうちの1つからデータを選択する優先順位マルチプレクサ418と、(エラー検出及び訂正回路310を介して)メインストレージ214の出力とデータ優先順位マルチプレクサ418から転送されたメインキャッシュストアキュー212のデータとの間で選択するMUX回路314とを含む。
【0129】
代替として、読み出し動作(例えば、読み出し命令、読み出し命令など)が、まだ完了していない可能性のある書き込み動作(例えば、書き込み命令、書き込みコマンドなど)のデータを犠牲にすること(退去させること)を指す可能性があるため、メインキャッシュストアキュー212は、インフライトのデータ(例えば、メインストレージ要素214にまだ格納されていないストアキュー212のデータ)を犠牲ストレージ要素214及び/又はL2キャッシュ212に転送し、ストアキュー212に残っているインフライトのデータを無効にする読み出し無効化機能を含む。
【0130】
例示の読み出しポート424は、読み出し経路及びデータストア416に結合される。読み出しポート424は、読み出しミスが発生するたびにメインキャッシュコントローラ222とインタフェースするインタフェースによって実装され得る。例えば、読み出しポート424は、メインキャッシュコントローラ222から犠牲アドレス及び読み出し無効化コマンドを受け取るために利用される。読み出しポート424は、データストア416に格納されたペンディングアドレスと比較されるように、犠牲アドレスをデータストア416に送るためのものである。
【0131】
例示の書き込みポート426は、書き込み経路及びラッチ402aに結合される。書き込みポート426は、書き込み命令を取得するために、メインキャッシュコントローラ222(例えば、キャッシュコントローラ220)とインタフェースするインタフェースによって実装され得る。例えば、書き込みポート426は、書き込みのためにキャッシュコントローラ220からアドレス及び値を受け取るために用いられる。
【0132】
図4Aの要素は、トランザクション処理の流れを表す様式で配置される。時間要素は、ステージE1~E5によって表される。各ステージは個別の時間期間を表し、幾つかの例において、各ステージが、或るクロックサイクル又は整数個のクロックサイクルを表す。
【0133】
次に、メインキャッシュストアキュー212を介した読み出し動作の例示のフローについて説明する。第1のサイクルにおいて、ステージElに対応し、L1データキャッシュ110が、読み出し動作のアドレスに関連する記録をタグRAM208から検索して、データがメインストレージ214に格納されているか否かを判定する。直接マップの例では、L1データキャッシュ110は、メインストレージ214からデータを要求する前にタグRAM208の比較を待つ必要はなく、従って、タグRAM208の、読み出し動作のアドレスとキャッシュされたアドレスの記録との比較は、第2又は第3のクロックサイクルに延びてもよい。
【0134】
ステージE2に対応する第2のサイクルにおいて、L1データキャッシュ110は、調停マネージャ414が許可する場合、メインストレージ214からデータ及びECCシンドロームビットを要求し得る。このサイクルにおいて、L1データキャッシュ110はまた、読み出しアドレスをペンディングのストアアドレスデータストア416と比較することによって、より新たなデータがメインキャッシュストアキュー212内で利用可能かどうかを判定してもよい。もしそうであれば、優先順位マルチプレクサ418は、適切なデータをメインキャッシュストアキュー212から転送するように設定される。
【0135】
データ及びECCは、ステージE3に対応する第3のサイクルにおいて、メインキャッシュストレージ214によって提供されてもよい。しかしながら、このデータは、L1データキャッシュ110がキャッシュのメインストレージ214内の同じエントリに複数の拡張メモリアドレスを割り当てることがあるので、読み出し動作によって特定されるメモリアドレスに対応することも、対応しないこともある。従って、第3のサイクルにおいて、L1データキャッシュ110は、タグRAM208記録の比較に基づいて、メインストレージ214から提供されたデータ及びECCが読み出し動作におけるメモリアドレスに対応する(例えば、キャッシュヒット)か否かを判定する。キャッシュヒットの場合、データ及びECCビットはエラー検出及び訂正回路310によって受け取られ、エラー検出及び訂正回路310は、ステージE4に対応する第4のサイクルにおいてデータ内のエラーを訂正する。
【0136】
上述したように、メインストレージ214にまだ書き込まれていない新たなデータは、メインキャッシュストアキュー212に存在し得、優先順位マルチプレクサ418によってメインキャッシュストアキュー212から転送され得る。もしそうであれば、MUX回路314は、メインストレージ214からの訂正されたデータ上で転送されたデータを選択する。
【0137】
メインストレージ214からの訂正データ又はメインキャッシュストアキュー212からの転送データのいずれかが、ステージE5に対応する第5のサイクルにおいてL1データキャッシュ110に提供される。このようにして、コントローラ220は、約5サイクルでキャッシュヒットが発生した場合に、完全にECCチェック及び訂正されたデータに提供し得る。
【0138】
データ及びECCビットがメインストレージ214内に存在しない場合(例えば、キャッシュミス)、メインキャッシュストアキュー212は、データが拡張メモリ106及び/又は犠牲ストレージ218のいずれかから検索されるまでストールし得、その時点で、データがメインストレージに書き込まれ、タグRAM208が更新されてもよい。
【0139】
ストアキュー及びデータ転送を用いてレベル1データキャッシュにおける完全にパイプライン化された読み出し・変更・書き込みのサポートを容易にするための方法及び装置
【0140】
本明細書において説明する例では、タンデムに動作する2つのキャッシュシステム(例えば、メインストレージ214及び犠牲キャッシュストレージ218)がある。本明細書において説明される例では、メインストレージ214は、ダイレクトマップキャッシュ要素であり、犠牲キャッシュストレージ218はフルアソシアティブキャッシュストレージである。直接マップされたメインストレージ214とフルアソシアティブ犠牲キャッシュストレージ218はいずれも、エラー訂正符号(ECC)によって保護される。この場合、例示の応用例には、メインストレージ214からラインを読み出すこと、及び/又はメインストレージ214からラインを移動することが含まれる。従って、ECC論理は、キャッシュラインを訂正し、ECCシンドロームを再生成し、次いで、ラインを犠牲キャッシュストレージ218に書き込む。そのような応用例は、CPUの2つの付加的なクロックサイクル(例えば、ECC論理によるエラー訂正のための1つのクロックサイクルと、ECCシンドローム再生のための別のクロックサイクル)を利用し得る。この待ち時間を低減するために、本明細書において説明する例は、メインストレージ214と犠牲キャッシュストレージ218との間で同じパリティ・ブロックサイズを利用することを含む。従って、メインストレージ214及び犠牲キャッシュストレージ218の両方が、32ビット境界上のパリティを計算及び/又は他の方式で判定する。このようにして、L1キャッシュ110は、少ない待ち時間でキャッシュラインをメインストレージ214から犠牲キャッシュストレージ218に直接移動し得る。
【0141】
本明細書において説明される例では、L1データキャッシュ110は、キャッシュからデータを読み出しそれを書き換える前にデータに変更を加える多数の動作をサポートする。例えば、L1データキャッシュ110は、読み出し・変更・書き込み動作を支援し得る。読み出し・変更・書き込み動作が、存在するデータを読み出し、そのデータの少なくとも一部を上書きする。ECC実施例では、フルバンク幅未満を書き込むとき(例えば、32ビット、4バイトワード未満を書き込むとき)に読み出し・変更・書き込み動作が実施されてもよい。上書きされないバンク内のデータの一部が依然としてECCシンドロームビットに寄与するので、読み出し・変更・書き込みの読み出し機能が用いられる。
【0142】
読み出し・変更・書き込み動作は、書き込み動作と読み出し動作とに分割され得、メインキャッシュストアキュー212は、読み出し経路における読み出し動作がメインキャッシュストアキュー212における書き込み動作と同期したままになるように構造化されてもよい。読み出し動作と書き込み動作は、読み出し・変更・書き込み・マージ構成要素408が読み出しデータの少なくとも一部を書き込みデータで上書きしてマージされたデータを生成するまで、同期されたままである。マージされたデータは、マージされたデータのための新しいECCシンドロームビットを生成するECC生成器412に提供され、次いで、マージされたデータ及びECCシンドロームビットは、メインストレージ214に格納するために調停マネージャ414に提供され得る。
【0143】
例示の読み出し・変更・書き込み動作では、
図2及び/又は
図3のキャッシュコントローラ220が書き込まれるワードのバイトのサブセット、又はワード全体(例えば、データの第1のセット)を示す書き込み要求を送信する。このような例では、キャッシュコントローラ220によって送信された書き込み要求は、書き込まれるバイトのアドレス値と、示されたバイトに書き込むデータとを含む。例えば、
図2及び/又は
図3のメインストレージ214は、アドレスA3、A2、A1、A0に関連する4バイトワード0x12345678を含み得る。このような例では、アドレスA3はバイト0x12に対応し、アドレスA2はバイト0x34に対応し、アドレスA1はバイト0x56に対応し、アドレスA0は格納されたワードのバイト0x78に対応する。そのような例示の動作において、キャッシュコントローラ220がアドレスA3をバイト0x33で置換し、アドレスA1をバイト0x22で置換し、アドレスA0を現在格納されているワード12345678のバイト0x11で置換するための書き込み要求を送信し得る。またそのような例では、格納されたワードのアドレスA3をバイト0x33で置換するための第1の書き込み要求が、格納されたワードを0x33345678にし、格納されたワードのアドレスA1をバイト0x22で置換するための第2の書き込み要求は、格納されたワードを0x33342278にし、格納されたワードのアドレスA0をバイト0x11で置換するための第3の書き込み要求は、格納されたワードを0x33342211にする。
【0144】
このような要求を処理するために、L1データキャッシュ110は読み出し動作のアドレスをタグRAM208の記録と比較し、L1データキャッシュは、メインストレージ214及び/又はメインキャッシュストアキュー212からデータ及びECCシンドロームビットを要求する。読み出し・変更・書き込み動作はデータを変更するので、メインストレージ214内のエントリのMESI(変更(Modify)、排他(Exclusive)、共有(Shared)、及び無効(Invalid))状態を追跡する例では、変更状態又は排他的状態のいずれでもないキャッシュヒットはキャッシュミスと見なされ得る。データが適切な状態で取得され、エラーが訂正されると、それは読み出し・変更・書き込み・マージ構成要素408に提供される。この同じサイクルにおいて、読み出し・変更・書き込み・マージ構成要素408は、訂正されたデータの少なくとも一部を書き込みデータで上書きして、マージされたデータを生成してもよい。ECC生成器412は、マージされたデータのための新しいECCシンドロームビットを生成する。
【0145】
本明細書において説明する例では、ECC生成器412がワード粒度に応じて動作する。従って、ECC生成器412は、データのブロックに対するECCシンドロームを計算する。本明細書において記載される例では、データのブロックは4バイト(例えば、ワード)とし得る。メインキャッシュストアキュー212は、(例えば、アドレスA3をバイト0x33で置換する第1の書き込み要求と競合するために)第1の例示のサイクルにおいて書き込み命令を処理するが、これはECC生成器412がワード粒度(例えば、4バイト又は32ビット・ワード)に応じて動作するためであり、キャッシュコントローラ220は、現在格納されているワードのアドレスA3における現在格納されているバイトの読み出し要求を開始する。この例では、第1の書き込み要求(例えば、0x33及びA3)のバイト及びアドレスがラッチ402bに格納される。また、キャッシュコントローラ220は、現在格納されているワード全体の読み出し要求をメインストレージ214に送信する。従って、第1のサイクルの終わりにおいて、現在格納されているワード全体の読み出し要求がメインストレージ214に送信され、バイト0x33が第1のラッチ402bに格納される。
【0146】
例示の第2のサイクルでは(例えば、アドレスA1をバイト0x22で置換する第2の書き込み要求を完了するために)、第1の書き込み要求からのバイトがラッチ402cに送信され、現在格納されているワード全体がメインストレージ214からECC論理310に送信され、第2の書き込み要求(例えば、アドレスA1をバイト0x22で置換するため)がキャッシュコントローラ220によって送信されてラッチ402bに格納される。第2のサイクルの間に、読み出し・変更・書き込み・マージ構成要素408は、ラッチ402cに格納されたバイトと、ECC論理310によって送信された現在格納されているワード全体とを取得する。このようにして、読み出し・変更・書き込み・マージ構成要素408は、更新される現在格納されているワード内のバイトのアドレスを識別する。読み出し・変更・書き込み・マージ構成要素408が、(a)ラッチ402cからの更新される現在格納されているワードの一部の値(例えば、バイト値、ビット値など)と、(b)ECC論理310からの現在格納されているワードとを識別及び/又はその他の方式で取得すると、読み出し・変更・書き込み・マージ構成要素408は、現在格納されているワードの一部を、ラッチ402cから取得された現在格納されているワードの一部の値に書き込む(例えば、置換する、マージするなど)。例えば、読み出し・変更・書き込み・マージ構成要素408は、ワードの一部の値を、ワード内のワードの一部に対応するアドレス値に書き込む。読み出し・変更・書き込み・マージ構成要素408によって出力されるこのような例示の書き込まれた部分は、本明細書ではマージされたワードと呼ぶことがある。本明細書において記載される幾つかの例において、そのようなマージされたワードが、犠牲ストレージ218に書き込むために読み出し・変更・書き込み・マージ構成要素1108によって提供される。
【0147】
これに応じて、例示の読み出し・変更・書き込み動作の書き込み部分を開始するために、選択マルチプレクサ410は、読み出し・変更・書き込み・マージ構成要素408からのマージされたワードを送信して、ラッチ402dに格納させる。後続のクロックサイクルにおいて、ECC生成器412はラッチ402dからマージされたワードを取得し、対応するECCシンドロームビットを生成する。同じクロックサイクル又は後続のクロックサイクルのいずれかで、ECC生成器412はマージ回路403a、403b、及び403cを介してマージされたワードを送信し、これは、調停マネージャ414によって処理されてメインストレージ214に格納される。
【0148】
しかしながら、上述したこのような例では、3つの連続した書き込み命令が、メインストレージ214に格納された同じワードに対応するキャッシュコントローラ220によって送信されたので、読み出し・変更・書き込み・マージ構成要素408は、現在格納されているワードに3つの書き込み命令の3つの値を書き込むときに、これら3つの書き込み命令を1つのトランザクションにマージし得る。例えば、メインストレージ212に第1の書き込み命令からのマージされたワードを格納する前に、メインストアキュー212は、後続の第2の書き込み命令で使用するために、マージされたワードをフィードバックする(例えば、送信する)。
【0149】
図4Bは、
図3A~
図4Aのメインキャッシュストアキュー212に関連して実装される例示のデータ転送論理460の例示の回路実装である。
図4Bは、メインキャッシュストアキュー212に関連して実装される例示のデータ転送論理460として説明されるが、本明細書において説明される他の例において、
図4Bに記載される例のいずれかが、犠牲キャッシュストアキュー216に関連して実装されてもよい。
【0150】
図4Bの例では、例示のアドレスライン462(RD_ADDR)がキャッシュコントローラ220に結合されて、CPU102から例示の読み出し命令が得られる。
図4Bの例では、このような例示のアドレスライン462が、メインキャッシュストアキュー212に対する読み出し命令を取得する。このようにして、メインキャッシュストアキュー212は、CPU102読み出し命令を実行するときに、インフライトの書き込みトランザクションから任意のデータを転送し得る。メインキャッシュストアキュー212において、CPU102からの命令(例えば、読み出し命令及び/又はその他のトランザクション、及び/又は書き込み命令及び/又はその他のトランザクション)は、アドレス、バイトイネーブル(byten)、及び関連データを含む。
図4Bのトポロジーは、例示のアドレスストア464a(例えば、
図4のペンディングのストアアドレスデータストア416)、例示のbytenストア464b(例えば、バイトイネーブルストア)、及び例示のデータストア464c(例えば、ラッチ402a、402b、402cなどのいずれか)を含む。
図4Bにおいて、アドレスストア464aのaddr0は、メインキャッシュストアキュー212における最も古い読み出し及び/又は書き込み命令に対応し、アドレスストア464aのaddr3は、メインキャッシュストアキュー212における最新の読み出し及び/又は書き込み命令に対応する。
【0151】
アドレスライン462を介する入来アドレス(例えば、読み出し命令)は、例示の比較論理466によって、アドレスストア464a内の全てのアドレス(例えば、addr0、addr1、addr2、及びaddr3)と比較される。本明細書において記載される例では、比較論理466は、アドレスaddr0、addr1、addr2、及びaddr3が完全に又は部分的に同等(例えば、同じ)であり得るので、読み出し命令のアドレスを任意の数のエントリと比較し得る。このようにして、比較論理回路466の例示の出力は4ビット信号である。このような4ビット信号は、bytenストア464bの対応するバイトイネーブル信号に基づいて生成される。そのような4ビット信号は任意の値(例えば、全て0、全て1、部分的に0、及び部分的に1など)を有し得る。
【0152】
例示の動作において、アドレストア464aの4つのアドレスには、1つ又はそれ以上の有効バイト(例えば、論理高のバイト)が含まれ得る。本明細書において説明される例では、メインキャッシュストアキュー212は64ビット(例えば、8バイト)であり、従って、メインキャッシュストアキュー212は、1から8などの任意の数のバイトに対して書き込みを実施してもよい。
【0153】
比較論理466が、bytenストア464b内のバイトイネーブルに基づいて含まれるべきアドレスストア464aのアドレスを識別することに応答して、例示の出力ライン468は、アドレスストア464a内の各アドレスに対して8ビットの結果を送信する。本明細書において説明する例では、4つの出力ライン468(例えば、dram_hit_DP0[0][7:0])、dram_hit_dp0[l][7:0]、dram_hit_dp0[2][7:0]、及びdram_hit_dp0[3][7:0])がある。動作において、出力ライン468のいずれかにおいて論理高(例えば、1)に設定されたビットは、アドレスストア464aの対応するアドレスの対応するバイトが、転送されるべき有効データを有することを示す。例えば、出力ライン468の第1の出力ラインがdram_hit_dp0[0]を含む場合、対応する読み出し命令のためのバイト値は、アドレスストア464a内のアドレスのいずれかから取得され得る。
【0154】
図4Bの例は、例示の選択論理470及び例示の選択ライン472を含む。本明細書において説明する例では、選択ライン472が8つの2バイト出力を含む。従って、バイトストア464cの対応するバイトイネーブルの各々に対して選択信号の1つの選択信号が存在する。例示の動作において、読み出し命令が、複数の有効バイトを有する複数のアドレスを読み出すことを示す場合、例示の選択論理720は最新のデータを選択する。選択論理470(例えば、選択ライン472)のそのような出力は、それぞれ、例示のマルチプレクサ474a~474h(マルチプレクサ474e~hは図示せず)を制御する。
図4Bの例では、マルチプレクサ474a~hが、8個の1バイト入力端子を含む。動作において、マルチプレクサ474a~hは、データストア464cの各々のどのバイトを転送すべきかを示す選択ライン472のそれぞれの選択ラインを取得する。このようにして、メインキャッシュストアキュー212は、アドレス比較(例えば、コンパレータ466によって実施された比較)と、bytenストア464bの対応するバイトイネーブルと、メインキャッシュストアキュー212が発行された順序(例えば、選択論理470によって実施された比較)とに基づいて、異なるインフライトのストア(例えば、データストア464cのいずれか)からのデータを転送し得る。
【0155】
本明細書において記載される例では、アドレスライン462、アドレスストア464a、bytenストア464b、データストア464c、比較論理466、出力ライン468、選択論理470、選択ライン472、及び/又はマルチプレクサ474a~hのいずれかが、犠牲キャッシュストアキュー216において実装され得る。
図4Bでは、マルチプレクサ474a~hの出力端子が例示のキャッシュマルチプレクサ476に結合される。
図4Bの例では、キャッシュマルチプレクサ476も、犠牲キャッシュストアキュー216に関連してこのように実装される同様のマルチプレクサに結合される。動作において、キャッシュマルチプレクサ476は、読み出し命令を送信したキャッシュコントローラ(例えば、メインキャッシュコントローラ222又は犠牲キャッシュコントローラ224)から選択信号を取得する。このようにして、キャッシュマルチプレクサ476は、CPU102へのデータ転送を促進する。
【0156】
幾つかの例において、
図4Bのトポロジーは、メインキャッシュストアキュー212の例示の書き込みデータ転送構成要素、犠牲キャッシュストアキュー216の書き込みデータ転送構成要素、及びMUX回路314、316に対応し得る。このような例では、キャッシュマルチプレクサ476は、例示のMUX回路314、316によって実装され得る。また、このような例では、アドレスライン462、アドレスストア464a、bytenストア464b、データストア464c、比較論理466、出力ライン468、選択論理470、選択ライン472、及び/又はマルチプレクサ474a~hのいずれかを、メインキャッシュストアキュー212の例示の書き込みデータ転送構成要素によって実装され得、アドレスライン462、アドレスストア464a、bytenストア464b、データストア464c、比較論理466、出力ライン468、選択論理470、選択ライン472、及び/又はマルチプレクサ474a~hが、犠牲ストレージ216に関連して実装されるように、犠牲キャッシュストアキュー216の例示の書き込みデータ転送構成要素によって実装され得る。
【0157】
幾つかの例において、
図4Bのトポロジーは、ペンディングのストアアドレスデータストア418及び例示の優先順位マルチプレクサ418に対応し得る。例えば、アドレスストア464a、bytenストア464b、及び/又はデータストア464cは、例示のペンディングのストアアドレスデータストア416によって実装され得る。更なる例では、アドレスライン462、比較論理466、出力ライン468、選択論理470、選択ライン472、及び/又はマルチプレクサ474a~hのいずれかが、例示の優先順位マルチプレクサ418によって実装され得る。
【0158】
本明細書において記載される例では、
図4Bのトポロジーは、メインストレージ214及び犠牲ストレージ218の各バンクに対して利用される。例えば、メインストレージ214が8つのバンクを有する場合、
図4Bのトポロジーは、各バンクに1つずつ、8回複製される。
【0159】
ストアキュー及びデータ転送を用いて、レベル1データキャッシュにおいて完全にパイプライン化された読み出し・変更・書き込みのサポートを容易にするための例示の方法、装置、システム、及び製品が、本明細書において記載される。更なる例及びそれらの組み合わせには、以下のものが含まれる。
【0160】
例1は、第1のストレージと、第2のストレージと、第1のストレージ及び第2のストレージに結合されるストアキューとを含む。ストアキューは、第1のデータのセットを特定する第1のメモリ動作を受け取り、第1のデータのセットを第1のストレージ及び第2のストレージの少なくとも1つに格納するための第1のメモリ動作を処理し、第2のメモリ動作を受け取り、第1のデータのセットを第1のストレージ及び第2のストレージの少なくとも1つに格納する前に、第2のメモリ動作で使用するために第1のデータのセットをフィードバックするように動作可能である。
【0161】
例2は、例1の装置を含み、第2のメモリ動作は、読み出し・変更・書き込み動作であり、データの第2のセットを特定し、ストアキューは、第1のストレージと第2のストレージの少なくとも1つに第1のデータのセットを格納する前に、第1のデータのセットとデータの第2のセットをマージしてデータの第3のセットを生成し、第1のストレージと第2のストレージの少なくとも1つに格納するためのデータの第3のセットを提供するように動作可能である。
【0162】
例3は、例2の装置を含み、データの第3のセットを読み出すことを示す第3のメモリ動作を受け取ることを更に含む。
【0163】
例4は、例1の装置を含み、第2のストレージが第1のストレージの犠牲ストレージとして構成される。
【0164】
例5は、例1の装置を含み、ストアキューは、データの第1のセットの第1のアドレス値を格納するように構成されたデータストアを更に含む。
【0165】
例6は、例1の装置を含み、ストアキューは、エラー検出符号を生成するためのエラー符号訂正生成器を更に含む。
【0166】
例7は、例6の装置を含み、エラー符号訂正生成器は、第1のメモリ動作を処理することに応答してエラー検出符号を生成するためのものである。
【0167】
例8は方法を含み、この方法は、第1のデータのセットを特定する第1のメモリ動作を受け取ることと、第1のデータのセットを第1のストレージ及び第2のストレージの少なくとも1つに格納するための第1のメモリ動作を処理することと、第2のメモリ動作を受け取ることと、第1のデータのセットを第1のストレージ及び第2のストレージの少なくとも1つに格納する前に、第2のメモリ動作で使用するために第1のデータのセットを送信することとを含む。
【0168】
例9は、例8の方法を含み、第2のメモリ動作は、読み出し・変更・書き込み動作であり、データの第2のセットを特定し、この方法は更に、第1のストレージと第2のストレージの少なくとも1つにデータの第1のセットを格納する前に、データの第3のセットを生成するためにデータの第1のセットとデータの第2のセットをマージすることと、第1のストレージと第2のストレージの少なくとも1つに格納するためのデータの第3のセットを提供することとを含む。
【0169】
例10は、例9の方法を含み、データの第3のセットを読み出すことを示す第3のメモリ動作を受け取ることを更に含む。
【0170】
例11は、例8の方法を含み、第2のストレージが第1のストレージの犠牲ストレージとして構成される。
【0171】
例12は、例8の方法を含み、データの第1のセットの第1のアドレス値を格納することを更に含む。
【0172】
例13は、例8の方法を含み、エラー検出符号を生成することを更に含む。
【0173】
例14は、例13の方法を含み、第1のメモリ動作を処理することに応答して、エラー検出符号を生成することを更に含む。
【0174】
例15はシステムを含み、このシステムは、第1のメモリ動作及び第2のメモリ動作を送信するように構成される中央処理装置と、中央処理装置に結合される第1のストレージと、中央処理装置に結合される第2のストレージと、第1のストレージ、第2のストレージ、及び中央処理装置に結合されるストアキューとを含む。ストアキューは、データの第1のセットを特定するための第1のメモリ動作を受け取り、データの第1のセットを第1のストレージ及び第2のストレージの少なくとも1つに格納するために第1のメモリ動作を処理し、第2のメモリ動作を受け取り、データの第1のセットを第1のストレージ及び第2のストレージの少なくとも1つに格納する前に、格納第2のメモリ動作で使用するためにデータの第1のセットをフィードバックするように動作可能である。
【0175】
例16は、例15のシステムを含み、第2のメモリ動作は、読み出し・変更・書き込み動作であり、データの第2のセットを特定し、ストアキューは、データの第1のセットを第1のストレージ及び第2のストレージのうちの少なくとも1つに格納する前に、データの第1のセット及びデータの第2のセットをマージしてデータの第3のセットを生成し、データの第1のストレージ及び第2のストレージのうちの少なくとも1つに格納するためのデータの第3のセットを提供するように動作可能である。
【0176】
例17は、例16のシステムを含み、データの第3のセットを読み出すことを示す第3のメモリ動作を受け取ることを更に含む。
【0177】
例18は、例15のシステムを含み、第2のストレージが第1のストレージの犠牲ストレージとして構成される。
【0178】
例19は、例15のシステムを含み、ストアキューは、データの第1のセットの第1のアドレス値を格納するように構成されたデータストアを更に含む。
【0179】
例20は、例15の装置を含み、ストアキューは、第1のメモリ動作を処理することに応答してエラー検出符号を生成するためのエラー符号訂正生成器を更に含む。
【0180】
整合されていない書き込みのための読み出し・変更・書き込みサイクルを低減するための方法及び装置
【0181】
マルチバンクストレージに書き込み命令を発行する場合、このような書き込み命令の完全な読み出し・変更・書き込み・サイクルを実施しようとすると、そのような書き込み命令は、書き込み命令のサイズに関係なく、対応する読み出し命令とともに送信される可能性がある。例えば、このような応用例では、書き込み命令が、第1のメモリバンクのアドレスA0で始まる2つの64ビットメモリバンクにわたって128ビットを書き込むことを示すCPUによって得ることができる。このような例では、両方の例示のメモリバンクの全体が書き込まれているが、このような応用例は2つの例示のメモリバンクに現在格納されているデータを読み出すための読み出し命令を維持する。しかしながら、そのようなアプローチは処理能力の2倍(例えば、書き込み及び読み出し命令)が用いられるので、非効率的である。また、このようなアプローチは、書き込み命令を解析するための制御論理及び/又は処理回路要素を提供しない。
【0182】
図4Aにおいて図示される例では、メインストレージ214及び/又は犠牲ストレージ218がマルチバンクストレージであり得る。例えば、メインストレージ214は、各々が64ビット幅の16個のメモリバンク(例えば、16個のサブRAM)を含み得る。このような例では、キャッシュコントローラ220が書き込み命令を送信してメインストレージ214の第1のバンクの全ての64ビットを書き込む(例えば、第1のバンクの第1アドレスで始まる64ビットワードを書き込む)場合、書き込み命令は読み出し命令を開始することなく実施し得る。例えば、バンク処理論理303はバンク全体のこのような書き込みが実施されることを検出し得、従って、読み出し命令の送信を無効にして、読み出し・変更・書き込み動作を開始することをキャッシュコントローラ220に示すことができる。
【0183】
同様に、キャッシュコントローラ220が書き込みポート426に書き込み命令を送信して、メインストレージ214の第1のバンクの全128ビット及び第2のバンクを書き込む場合(例えば、第1のバンクの第1のアドレスで始まり、第2のバンクの最後のアドレスで終わる128ビットワードを書き込むことを示す書き込み命令)、読み出し命令を開始することなく、書き込み命令が実装され得る。例えば、バンク処理論理303は多数のバンク全体のそのような書き込みが実施されるべきであることを検出し得、従って、読み出し・変更・書き込み動作を開始するようにキャッシュコントローラ220に示し得、読み出し命令の送信を無効にし得る。
【0184】
しかしながら、本明細書において説明される幾つかの例において、キャッシュコントローラ220は、130ビットのデータを書き込むための書き込み命令(又はメモリバンクのサブセットに書き込むことを示す任意の書き込み命令)を送信してもよい。130ビットのデータのうち、64ビットのデータを第1のバンクに書き込み得、64ビットのデータを第2のバンクに書き込み得、2ビットのデータをメインストレージの第3のバンクに書き込み得る(例えば、130ビットワードを書き込むことを示す書き込み命令が、第1のバンクの第1のアドレスで始まり、第3のバンクの第2のアドレスで終わる)。このような例では、バンク処理論理303は、メインストレージ214の第1のバンク及び第2のバンクの全てのアドレスが完全に書き込まれるべきであることを検出し、従って、メインストレージの第1のバンク及び第2のバンクのための読み出し・変更・書き込み動作を開始するようにキャッシュコントローラに示し得、読み出し命令の送信を無効にする。このような例では、バンク処理論理303は、メインストレージ214のメモリバンクのサブセット(例えば、メモリストレージの第3のバンク)が部分的に書き込まれるべきである(例えば、64個のアドレスのうちの2個のアドレスが書き込まれるべきである)ことを検出(例えば、判定)し得、従って、メインストレージ214の第3のバンクのフル読み出し・変更・書き込み動作を開始することをキャッシュコントローラ220に示すことができる。本明細書において説明する例では、バンク処理論理303は、書き込みを行う複数のメモリバンクのサブセット内の幾つかのアドレスが閾値を満たすかどうかに基づいて、書き込み動作に応答して読み出し動作を実施させるかどうか(例えば、フル読み出し・変更・書き込み動作を開始させるかどうか)を判定する。本明細書において説明する例では、複数のメモリバンクのサブセット内のアドレスの数が、0よりも多く及び/又はメモリバンク内のアドレスの数よりも少ない場合、閾値は満たされない。この例では、バンク処理論理303は、フル読み出し・変更・書き込み・トランザクションとして書き込み命令を実行するCPU102への指示を生成する。本明細書において説明される例では、閾値は、複数のメモリバンクのサブセット内のアドレスの数が、この例ではnであるメモリバンク内のアドレスの数と等しい場合に満たされ、バンク処理論理303は、部分的な読み出し・変更・書き込み・トランザクション(例えば、読み出しの無効化)として書き込み命令を実行するためのCPU102への指示を生成する。読み出し・変更・書き込み動作の例示の記載は上述されている。
【0185】
非整合書き込みのための読み出し・変更・書き込み・サイクルを低減するための例示の方法、装置、システム、及び製品が本明細書に記載されている。更なる例及びそれらの組み合わせには、以下のものが含まれる。
【0186】
例1は装置を含み、装置は、複数のメモリバンクを含むメモリと、中央処理ユニットに結合されるように構成されたインタフェースであって、中央処理ユニットから書き込み動作を取得するためのインタフェースであって、書き込み動作が、複数のメモリバンクのサブセットを書き込むことであるインタフェースと、インタフェース及びメモリに結合されるバンク処理論理とを含むメモリを含む。バンク処理論理は、書き込み動作に基づいて書き込みする複数のメモリバンクのサブセットを判定し、書き込みする複数のメモリバンクのサブセット内の幾つかのアドレスが閾値を満たすかどうかに基づいて、書き込み動作に応答して読み出し動作を実施させるかどうかを判定するためのものである。
【0187】
例2は、例1の装置を含み、複数のメモリバンクのうちの少なくとも1つのメモリバンクの全てのアドレスが書き込み動作に含まれる場合に閾値が満たされる。
【0188】
例3は、例1の装置を含み、バンク処理論理は、書き込みを行う複数のメモリバンクのうちの少なくとも1つのメモリバンクのアドレスの数が閾値を満たさないときに、読み出し動作を発行することにより、複数のメモリバンクのうちの少なくとも1つへの書き込み動作を行うために、中央処理ユニットへの第2の指示を生成するためのものである。
【0189】
例4は、例1の装置を含み、バンク処理論理は、書き込み動作に含まれるアドレスの総数を判定し、アドレスの総数に含まれるアドレスを有することに基づいて複数のメモリバンクの数を判定することによって、書き込み動作に基づいて書き込む複数のメモリバンクの数を判定する。
【0190】
例5は、例1の装置を含み、書き込み動作は、書き換える複数のメモリバンクの数を示す。
【0191】
例6は、例1の装置を含み、複数のメモリバンクが16個のメモリバンクである。
【0192】
例7は、例1の装置を含み、メモリが犠牲ストレージである。
【0193】
例8はシステムを含み、システムは、複数のメモリバンクのサブセットに書き込むことを示す書き込み動作を生成するように構成される中央処理装置と、複数のメモリバンクを含む犠牲ストレージと、中央処理装置及び犠牲ストレージに結合されるバンク処理論理とを含み、バンク処理論理は、書き込み動作に基づいて書き込む複数のメモリバンクのサブセットを判定し、書き込む複数のメモリバンクのサブセット内の幾つかのアドレスが閾値を満たすかどうかに基づいて、書き込み動作に応答して読み出し動作を実施させるかどうかを判定するためのものである。
【0194】
例9は、例8のシステムを含み、複数のメモリバンクのうちの少なくとも1つのメモリバンクの全てのアドレスが書き込み動作に含まれる場合に、閾値が満たされる。
【0195】
例10は、例8のシステムを含み、バンク処理論理は、書き込みを行う複数のメモリバンクのうちの少なくとも1つのメモリバンクのアドレスの数が閾値を満たさないときに、読み出し動作を発行することにより、複数のメモリバンクのうちの少なくとも1つへの書き込み動作を行うために、中央処理装置への第2の指示を生成するためのものである。
【0196】
例11は、例10の動作を含み、中央処理動作は、第2の指示に応答して、複数のメモリバンクのうちの少なくとも1つによって実施される読み出し・変更・書き込み動作を更に生成するためのものである。
【0197】
例12は、例8のシステムを含み、バンク処理論理は、書き込み動作に含まれるアドレスの総数を判定し、アドレスの総数に含まれるアドレスを有することに基づいて複数のメモリバンクの数を判定することによって、書き込み動作に基づいて書き込むべき複数のメモリバンクの数を判定する。
【0198】
例13は方法を含み、この方法は、書き込み動作に基づいて、書き込むメモリの複数のメモリバンクのサブセットを判定することと、書き込む複数のメモリバンクのサブセット内の複数のアドレスが閾値を満たすかどうかに基づいて、書き込み動作に応答して読み出し動作を実施させるかどうかを判定することとを含む。
【0199】
例14は、例13の方法を含み、閾値が満たされたことに応答して中央処理装置に指示を送信することを更に含む。
【0200】
例15は、例13の方法を含み、複数のメモリバンクのうちの少なくとも1つのメモリバンクのアドレスの全てが書き込み動作に含まれる場合に、閾値が満たされる。
【0201】
例16は、例13の方法を含み、書き込む複数のメモリバンクのうちの少なくとも1つのメモリバンクのアドレスの数が閾値を満たさない場合に、読み出し動作を発行することで、複数のメモリバンクのうちの少なくとも1つへの書き込み動作を行うための第2の指示を生成することを更に含む。
【0202】
例17は、例13の方法を含み、書き込み動作に含まれるアドレスの総数を判定し、アドレスの総数に含まれるアドレスを有することに基づいて複数のメモリバンクの数を判定することによって、書き込む複数のメモリバンクの数を判定する。
【0203】
例18は、例13の方法を含み、書き込み動作は、書き換えるべき複数のメモリバンクの数を示す。
【0204】
例19は、例14の方法を含み、中央処理装置から書き込み動作を取得することを更に含み、書き込み動作は、書き込むべき複数のメモリバンクの数を示す。
【0205】
例20は、例14の方法を含み、メモリが犠牲ストレージである。
【0206】
バンク圧力を減らすための積極的な書き込みマージ
【0207】
図4Aの例では、例示のメインキャッシュストアキュー212が、メインキャッシュストアキュー212の異なるセクション(例えば、例示のラッチ402a~e)における幾つかの書き込み動作を格納する。例えば、CPU102が1行に3つの別々の書き込み動作を送信する場合、CPU102が提供した第1の書き込み動作は、第1のラッチ402bに格納され、第1のラッチ402bで第2の動作が受け取られると第2のラッチ402cに移動される。従って、3つの書き込み動作が受け取られた後、第1のラッチ402bは、時間に関して最後の書き込み動作(例えば、メインストレージ214に最後に格納されたもの)を格納及び/又は出力し、第2のラッチ402cは、第2の書き込み動作(例えば、メインストレージ214に2番目に格納されたもの)を有し、第3のラッチ402dは、第1の書き込み動作(例えば、例示のメインストレージ214に最初に格納されたもの)を有し得る。メインキャッシュストアキュー212内のデータが次にメインストレージ214に格納されるときはいつでも、例示の調停マネージャ414は、例示のメインストレージ214に書き込まれるべきデータのためのサイクルを確保する。従って、確保されたサイクルの間、メインストレージ214は、読み出し動作を実施するために利用可能ではない場合がある。しかしながら、ラッチ402b、402c、402dのうちの2つ又はそれ以上に格納されたデータ動作が同じメモリアドレスに対応する場合、そのデータは、2回又は3回ではなく、1回でメインストレージ214のメモリアドレスにデータを書き込むためにマージされ得る。例えば、ラッチ402dに格納された書き込み動作がメモリアドレスのバイトの書き込みに対応し、ラッチ402cに格納された書き込み動作がメモリアドレスへの同じバイトの書き込みに対応する場合、第2の書き込みは第1の書き込みを上書きし得る。
【0208】
メインキャッシュストアキュー212は、後続のサイクルにおいて上書きされる第1のバイトをメインストレージ214に書き込むためのサイクルを確保する代わりに、2つの書き込みを1つの書き込みにマージして、第2のトランザクションを書き込むために1つのサイクルのみが用いられるようにする(例えば、第1の書き込みのためのサイクルを確保しないようにする)。このような積極的なマージは、書き込み動作のために確保されるサイクルの数を減少させる。このようにして、メインストレージ214は読み出し動作を行うための余分なサイクルを有し、それによってシステム全体の待ち時間を減少させる。
【0209】
同じメモリアドレスへの書き込み動作の積極的なマージを可能にするために、例示のラッチ402b~402dの出力は、例示のマージ回路403a~403cに結合される。例えば、第3のラッチ402dの出力はマージ回路403aに結合され得、第2のラッチ402cの出力はマージ回路403bに結合され得、第1のラッチ402bの出力はマージ回路403cに結合され得る。マージ回路403aの出力は、付加的に、第2のラッチ402c及びマージ回路403bの出力に結合され得、マージ回路403bはマージ回路403cに結合され得、マージ回路403cは第1のラッチ402bの入力に結合され得る。付加的に又は代替として、ラッチの異なるセットの出力を比較する付加的なコンパレータ回路(例えば、ラッチ402bの出力をラッチ402dの出力と比較するコンパレータ回路)が存在してもよい。例示のマージ回路403a~cは、例示のコンパレータ420と例示のスイッチ422を含む。
【0210】
コンパレータ420は、それぞれのラッチ402b~402dに格納される各書き込み動作のメモリアドレスロケーションを比較して、例示のストアキューにおける書き込み動作のいずれかが同じメモリアドレスに対応するか否かを判定する。例示のコンパレータ420は、ラッチ402b~402dの書き込み動作の全てを比較するための1つのコンパレータであり得又は別個のコンパレータ420であり得、ラッチ402b~dのうちの2つを比較する(例えば、ラッチ402bのメモリアドレスとラッチ402cのメモリアドレスとの第1のコンパレータ、402bのメモリアドレスとラッチ402dのメモリアドレスとの第2のコンパレータ等)。コンパレータ420は、比較の結果を(例えば、1つ又は複数の比較に対応する1つ又は複数の信号で)、例示のスイッチ422及び/又は調停マネージャ414に出力する。例示の調停マネージャ414が一致を示す信号を受信した場合、調停マネージャ414は、第1の書き込み動作のためにサイクルを確保せず、第1の書き込み動作は、(例えば、他のキャッシュ動作のためのサイクルを解放するために)同じメモリロケーションへの第2の書き込み動作とマージされる。
【0211】
例示のスイッチ422は、比較に基づいて例示のラッチ402b~402d内の書き込み動作を再配路する。例えば、例示のラッチ402dに格納された書き込み動作のメモリアドレスがラッチ402cに格納されたメモリアドレスと同じである場合、例示のスイッチ422は、例示の調停マネージャ414に配路する代わりに、ラッチ402dの出力をラッチ402cに再配路することを可能及び/又は不可能にする。このようにして、2つの書き込み動作が組み合わされ、2つの書き込み動作の代わりに単一の書き込み動作として後続のサイクルにおいてメインストレージ214に書き込まれる。スイッチ422は、電気スイッチ、トランジスタ(例えば、MOSFET)、デマルチプレクサ、及び/又は回路内の信号を再配路し得る任意の他の構成要素とし得る。
【0212】
マージ回路403a~cのうちの1つのMUXが再配路された書き込み動作を受け取ると、MUXは、最新の書き込み動作を優先する1つ又は複数の再配路された書き込み動作のためのマージプロトコルを実施する。例えば、コンパレータ420が、例示のラッチ402cに格納された書き込み動作が例示のラッチ402dに格納された書き込み動作と同じメモリアドレスに対応すると判定した場合、コンパレータ420のMUXは、(
図4Dに関連して更に記載されるように)データをマージし、スイッチ422は、例示のラッチ402dに格納されたマージされた書き込み動作をラッチ402cに再配路する。このような例では、例示のラッチ402cにおける書き込み動作がメモリアドレスのバイト0及びバイト2へのデータの書き込みに対応し、ラッチ404dからの書き込み動作がバイト0及びバイト1へのデータの書き込みに対応する場合、例示のマージ回路403aはラッチ402cに格納された書き込みデータ(例えば、バイト0及びバイト2への書き込み)を保持し、重ならないラッチ402dからの書き込みデータ(例えば、バイト2)を含むように、これら2つの書き込み動作をマージする。この例では、ラッチ404dからのバイト0で書き込まれるべきデータがラッチ402cの書き込み命令によって上書きされるので、マージ回路403aは、マージ動作の一部として、ラッチ404dからのバイト0の書き込みデータを破棄する。従って、上記の例では、マージされたデータがラッチ402cからのバイト0のための書き込みデータ、ラッチ404dからのバイト1のための書き込みデータ、及びラッチ402cからのバイト2のための書き込みデータに対応する。後続の書き込み動作がメインキャッシュストアキュー212に追加されると、ラッチ402cからのマージされた書き込みデータは、(例えば、例示のブロック404、406、408のうちの1つを介して)操作され、及び/又は、後続のサイクル中に例示のメインストレージ214に格納される次のラッチ402dに送られ得る。マージプロトコルの例示のハードウェア実装は、
図4Dに関連して以下で更に記載される。
【0213】
図4Dは(例えば、ラッチ402dからラッチ402cにデータをマージするための)
図4Aのマージ回路402c及び/又は
図11Aの1102cのハードウェア実装を図示する。任意の2つのラッチ間でデータをマージするために、同様のハードウェアセットアップを実装し得る。
図4Dの例は、
図4Aのコンパレータ420及びスイッチ422のための例示のラッチ(例えば、ストア)402b~402d及びハードウェア構成要素を含む。例示のコンパレータ回路420は、コンパレータ及び/又は論理ゲート480a~480fを含み、スイッチ回路422は、ORゲート482及びMUX484を含む。
図4Aに関連して記載したが、
図11Aの犠牲キャッシュストアキュー216に関連して記載した場合、
図11Aのラッチ1102a~d、例示のコンパレータ1120、及び例示のスイッチ322を使用し得る。
【0214】
図4Dの例では、例示のラッチ402dは、格納されたデータを例示のストレージ(例えば、調停マネージャ414、1114を介したメインストレージ214又は犠牲ストレージ218)に出力し、これが第1サイクルの間バンクをロックする。
図4Dは、同じアドレスへの新しい書き込みデータを含む別のストア/ラッチが古いデータに先行する場合の、ストレージのバンク内の古いデータをロックする書き込みマージを示す。
図4Cの例は、例示のラッチ402dと例示のラッチ402cとの間のマージを示しているが、ラッチ402a~402dのいずれかの間のデータをマージするために同様の構造が用いられ得る。例えば、ラッチ402dにおけるデータのアドレスがラッチ402bにおけるデータのアドレスと一致する場合、ラッチ402は、そのデータをラッチ402bにおけるデータとマージすることができる。また、3つ又はそれ以上のラッチにおけるデータが同じアドレスに対応する場合、その3つ又はそれ以上のラッチにおけるデータは単一のラッチにマージされ得る。上述したように、特定のラッチにおけるデータがデータ及び先行ラッチとマージされる場合、特定のラッチにおけるデータは無効である(例えば、無効にされた値に対応するビットを設定することによって)か、又は破棄され、その結果、ストレージ内のバンクにロックされるべきそのデータに対して調停は実施されない。
【0215】
動作において、例示のコンパレータ480bは、ラッチ402dにおけるデータのアドレスを、ラッチ403cにおけるデータのアドレスと比較する。コンパレータ480bの出力は、ラッチ402c及び402dの両方が、有効に設定されたビットを含む場合にのみ有効である。従って、例示のコンパレータ480aは、ラッチ402c、402dからの有効ビットを比較して、ビットが両方とも有効であることを保証する。このようにして、例示のコンパレータ480dは、ラッチ402cにおけるアドレスとラッチ402dにおけるアドレスとが同じであり、両方のラッチ402c、402dの有効ビットが有効である場合にのみ、値(例えば、「1」)を出力する。そうでない場合、例示のコンパレータ480dは第2の値(「0」)を出力する。コンパレータ480dの出力は、スイッチ422のMUX484の選択ラインに入力される。そのため、ラッチ402c、402dのアドレスが同じ値である場合、コンパレータ480dはスイッチ422のMUX484を制御して、マージされたデータを(例えば、スイッチ422のORゲート482から)出力する。
【0216】
例示のADDゲート480cは、(例えば、NOTゲートを用いて)ラッチ402cのbytenではなくラッチ402dのbytenとの論理AND機能を実施する。例示のADDゲート480cの出力は、ラッチ402c及び402dの両方によって書き込まれているバイトがある場合、ラッチ402cがCPU102によって発行された最新のストアを有するので、ラッチ402cが保持されラッチ402dが無視されることを確実にする。従って、例示のコンパレータ480fは、CPU102が発行した最新のストアのみを、ストアキューにあるアドレスに対して出力する。コンパレータ480fの出力はdram_mrg_data_sel[7:0]に対応し、これは、バイト単位で論理ゲート402dと論理ゲート402cとの間の最終的なマージされたデータを選択するために用いられる信号である。同様のマージ論理が、ラッチ402cとラッチ402dのbytenをマージする際にも存在する。上記のように、(1)とマーキングされた信号は、store_byten又は(store_4_bytenとマージされたstore3_byten)の間で選択するために用いられる。
【0217】
バンク圧力を低減するための積極的な書き込みマージを容易にするための例示の方法、装置、システム、及び製品が本明細書に記載される。また、更なる例及びそれらの組み合わせは下記を含む。例1は装置を含み、この装置は、第1のキャッシュストレージと、第2のキャッシュストレージと、第1のキャッシュストレージ及び第2のキャッシュストレージの少なくとも1つに結合されるストアキューとを含み、ストアキューは、第1のメモリ動作を受け取り、第1のキャッシュストレージと第2のキャッシュストレージの少なくとも1つにデータの第1のセットを格納するための第1のメモリ動作を処理し、第2のメモリ動作を受け取り、データの第1のセットを第1のキャッシュストレージと第2のキャッシュストレージの少なくとも1つに格納する前に、第1のメモリ動作と第2のメモリ動作をマージするように動作可能である。
【0218】
例2は、例1の装置を含み、第1のメモリ動作はデータの第1のセットを特定し、第2のメモリ動作はデータの第2のセットを特定し、ストアキューは、第1のキャッシュストレージ及び第2のキャッシュストレージの少なくとも1つにデータの第1のセットを格納する前に、データの第3のセットを生成するためにデータの第1のセットとデータの第2のセットをマージし、第1のキャッシュストレージ及び第2のキャッシュストレージの少なくとも1つに格納するためのデータの第3のセットを提供するように動作可能である。
【0219】
例3は、例2の装置を含み、ストアキューは、第1のキャッシュストレージ又は第2のキャッシュストレージの少なくとも1つにデータの第3のセットを1サイクルで格納するためのものである。
【0220】
例4は、例1の装置を含み、ストアキューは、第1のメモリ動作の或る部分をキャンセルすることによって、第1のメモリ動作と第2のメモリ動作とをマージするように動作可能である。
【0221】
例5は、例4の装置を含み、第1のメモリ動作の部分は、第2のメモリ動作が書き込むバイトである。
【0222】
例6は、例4の装置を含み、部分は第1の部分であり、ストアキューは、第1のメモリ動作の第2の部分を維持することによって、第1のメモリ動作と第2のメモリ動作とをマージするように動作可能である。
【0223】
例7は、例6の装置を含み、第1のメモリ動作の第2の部分は、第2のメモリ動作が書き込みを行わないバイトである。
【0224】
例8は、例1の装置を含み、第1のキャッシュストレージはメインキャッシュストレージであり、第2のキャッシュストレージは犠牲キャッシュストレージである。
【0225】
例9はシステムを含み、システムは、第1のキャッシュストレージと第2のキャッシュストレージとに並列に結合される中央処理装置と、第1のキャッシュストレージと第2のキャッシュストレージの少なくとも1つに結合されるストアキューとを含む。ストアキューは、中央処理装置からの第1のメモリ動作を処理することであって、第1のメモリ動作が、第1のキャッシュストレージと第2のキャッシュストレージの少なくとも1つにデータの第1のセットを格納するためのものである、第1のメモリ動作を処理するため、及び、データの第1のセットを第1のキャッシュストレージと第2のキャッシュストレージの少なくとも1つに格納する前に、第1のメモリ動作と、同じメモリアドレスに対応する第2のメモリ動作とをマージするためのものである。
【0226】
例10は、例9のシステムを含み、第1のメモリ動作はデータの第1のセットを特定し、第2のメモリ動作はデータの第2のセットを特定し、ストアキューは、第1のキャッシュストレージ及び第2のキャッシュストレージの少なくとも1つにデータの第1のセットを格納する前に、データの第3のセットを生成するためにデータの第1のセットとデータの第2のセットをマージして、第1のキャッシュストレージ及び第2のキャッシュストレージの少なくとも1つに格納するためのデータの第3のセットを提供するように動作可能である。
【0227】
例11は、例10の装置を含み、第1のキャッシュストレージ又は第2のキャッシュストレージの少なくとも1つにデータの第3のセットを1サイクルで格納するストアキューを更に含む。
【0228】
例12は、例9のシステムを含み、ストアキューは、第1のメモリ動作の或る部分をキャンセルすることによって、第1のメモリ動作と第2のメモリ動作とをマージするように動作可能である。
【0229】
例13は、例12のシステムを含み、第1のメモリ動作の部分は、第2のメモリ動作が書き込むバイトである。
【0230】
例14は、例12のシステムを含み、部分は第1の部分であり、ストアキューは、第1のメモリ動作の第2の部分を維持することによって、第1のメモリ動作と第2のメモリ動作とをマージするように動作可能である。
【0231】
例15は、例14のシステムを含み、第1のメモリ動作の第2の部分は、第2のメモリ動作が書き込みを行わないバイトである。
【0232】
例16は、例9のシステムを含み、第1のキャッシュストレージはメインキャッシュストレージであり、第2のキャッシュストレージは犠牲キャッシュストレージである。
【0233】
例17は方法を含み、この方法は、第1のメモリ動作を取得することと、プロセッサを用いて命令を実行することによって、第1のキャッシュストレージ及び第2のキャッシュストレージの少なくとも1つにデータの第1のセットを格納するために第1のメモリ動作を処理することと、第2のメモリ動作を取得することと、第1のキャッシュストレージ及び第2のキャッシュストレージの少なくとも1つにデータの第1のセットを格納する前に、プロセッサを用いて命令を実行することによって、第1のメモリ動作及び第2のメモリ動作をマージすることとを含む。
【0234】
例18は、例17の方法を含み、第1のメモリ動作はデータの第1のセットに対応し、第2のメモリ動作はデータの第2のセットに対応し、この方法は更に、第1のキャッシュストレージ及び第2のキャッシュストレージの少なくとも1つにデータの第1のセットを格納する前に、データの第3のセットを生成するためにデータの第1のセットとデータの第2のセットをマージすることと、第1のキャッシュストレージ及び第2のキャッシュストレージの少なくとも1つに格納するためのデータの第3のセットを提供することとを含む。
【0235】
例19は、例18の方法を含み、更に、第1のキャッシュストレージ又は第2のキャッシュストレージの少なくとも1つにデータの第3のセットを1サイクルで格納することを含む。
【0236】
例20は、例17の方法を含み、更に、第1のメモリ動作の或る部分をキャンセルすることによって第1のメモリ動作と第2のメモリ動作とをマージすることを含む。
【0237】
L1キャッシュにおける最適化アトミック操作とヒストグラム演算サポート
【0238】
アトミック操作は、マルチパートメモリ動作の更なる例である。例えば、アトミック比較及びスワップ動作は、或るメモリロケーションに格納された既存の値の比較の結果に基づいて、そのメモリロケーションに格納された値を操作する。例えば、CPU102は、L1キャッシュ110に格納された既存の値が特定の値と一致する場合に、L1キャッシュ110に格納されたデータを新しい値で置換したい場合がある。
【0239】
幾つかの例示のシステムでは、CPUがアトミック操作を実施したい場合、CPUは、メモリアドレスに読み出し動作を送信し、読み出されたデータに対して操作を実施した後、操作されたデータを格納するために同じメモリアドレスに対して書き込み動作を実行していた。また、このような例示のシステムにおいて、L1キャッシュは、アトミック操作が完了するまで(例えば、アトミック操作中のアトミック操作に対応するメモリアドレスの操作を回避するため)、他のデバイス(例えば、CPUの他のコア、より高レベルのキャッシュ、拡張メモリなど)からのトランザクションを一時停止、拒否、ブロック、及び/又は停止していた。従って、このような例示の手法は、CPUに代わって多くの労力と、待ち時間を増加させる多くの確保済みサイクルを必要としていた。
【0240】
図4Aの例では、例示のメインキャッシュストアキュー212は、読み出し・変更・書き込み構造に関連してアトミック操作を扱う。このようにして、例示のCPU102は、単一のアトミック操作をL1キャッシュ110に送ることができ、メインキャッシュストアキュー212は、アトミックデータ操作及び書き込み動作を処理する。従って、CPU102は、アトミック操作を実行するために単一のサイクルを利用し、他の機能を実施するために他のサイクル(例えば、幾つかの例示のアトミックプロトコルにおいて用いられる)を使用し得、それによって、コンピューティングシステム100全体の待ち時間を低減する。
【0241】
動作において、例えば、CPU102がアトミック操作及び/又はアトミック比較及びスワップ動作を送信して、メモリアドレスのデータを例えば1の値だけ増分及び/又はスワップすると、アトミック命令がラッチ402aによって受け取られたタグRAM208は、メモリアドレスが例示のメインストレージ214に格納されているかどうかを検証する。メモリアドレスが例示のメインストレージ214に格納されている場合、タグRAM208は、アトミック命令が例示のラッチ402bに渡されている一方で、例示のメインストレージ214に、メモリアドレスにおけるデータを出力するように指令する。メインストレージ214がラッチ322aにデータを出力する間、例示のラッチ402bは、アトミック操作をラッチ402cに出力する。この時点で、ECC論理310は上述のようにエラー検出及び/又は訂正プロトコルを実施し、メモリアドレスロケーションからのデータは、例示の演算構成要素404(例えば、アトミック操作のため)又はアトミック比較構成要素406(例えば、アトミック比較及びスワップ演算のため)に転送される。演算構成要素404はアトミック操作(例えば、データを操作する方式を識別するためのデータを含む)を取得し、及び/又は、アトミック比較及びスワップ406は、アトミック比較及びスワップ動作(例えば、鍵が出データと一致した場合に書込む鍵及びデータを含む)をラッチ402cから取得し、対応するメモリアドレスからのデータをECC論理310の出力から取得する。演算構成要素404は、データに対する操作を実施し(例えば、データを1だけ増分する)、及び/又は、アトミック比較構成要素406は、スワップを実施し(読み出されたデータが鍵と一致する場合にデータを置換するなど)、また、対応するメモリアドレス(例えば、アトミック結果)に関する増分されたデータ及び/又はスワップインされたデータを、例示のMUX410を介して例示のラッチ402dに出力し得る。(例えば、これは、キャッシュコントローラ220を介して有効にされる)。ラッチ402dは、ECCビットを生成するためにメモリアドレスに対応する新たなデータをECC生成器412に出力し、調停マネージャ414は、新たなデータ(例えば、アトミック結果及び/又はアトミック比較及びスワップ結果)を、例示のメインストレージ214内のECCビットと共にメモリアドレスに書き込む。付加的に又は代替として、EDD論理412からの訂正された値は、CPU102に戻される。従って、アトミック操作はCPU102からの1つの命令のみで実施される。
【0242】
アトミック比較構成要素406及び/又は演算構成要素404は、幾つかの入力を有する。例えば、アトミック構成要素406は、実施するアトミック操作のタイプ(例えば、アトミック比較及びスワップ、又はアトミックスワップ)、キャッシュ310から読み出されたECC訂正済みデータ、及びアトミック操作中に操作されるべきデータのサイズ(例えば、32ビット又は64ビット)を受け取る(例えば、取得する)。
図4Bの例示の回路実装450では、アトミック比較構成要素406はアトミック比較及びスワップ動作を受け取り、演算構成要素404はアトミック操作を受け取る。アトミック比較構成要素406は、CPU102によって提供された比較値(例えば、鍵)をECCデータ310と比較する。一致すると、新たなデータが、古いデータ(例えば、ECCデータ310)の代わりにスワップされ、MUX410に出力される。スワップインされる新たなデータのサイズは、cas_acc_sz入力(32ビットや64ビットなど)によって決まる。
図4Cの回路実装450の例では、アトミック比較構成要素406がアトミックスワップ動作を受け取ることもできる。アトミック比較構成要素406は、比較結果に関わらずECCデータ310を置換する新たなデータをスワップインし、新しい値をmux410に出力し、アドレスからの古いデータが、メインストレージ214から読み出され、CPU102に戻される。スワップインされる新たなデータのサイズは、cas_acc_sz入力(32ビットや64ビットなど)によって決まる。
図4Cの回路実装450の例では、演算構成要素404がアトミック操作を受け取ってもよい。演算構成要素404は、ECCデータ310を操作し、操作されたデータをメインストレージ要素214に格納する。スワップインされる新たなデータのサイズは、cas_acc_sz入力(32ビットや64ビットなど)によって決まる。
図4Cの例示の回路450はメインストアキューに関連して上述されているが、回路450は、
図11Aに関連して以下で更に記載されるように、犠牲ストアキューに関連して説明することもできる。
【0243】
図4Cは、
図4Aのメインキャッシュストアキュー212の一部及び/又は
図11Aの犠牲キャッシュストアキュー216の一部の例示の回路図を図示する。
図4Cは、演算ユニット404、1104の詳細な回路図を図示する。
【0244】
演算ユニット404は、ヒストグラム演算などの他のタイプのメモリトランザクションに使用し得る。ヒストグラム演算は、ヒストグラムのビンを表し得るメモリに格納されている値を取得し、ヒストグラム演算は、値を変更してから、同じメモリアドレス又は代替アドレスに格納する。一例では、第1のデータセットは値[0、0、2、0、0、3]を含み、データの第2のセットには、第1のデータセット内のそれぞれの値の出現回数を表すビンが含まれている。演算ユニット404を持たない幾つかの例示のシステムでは、ヒストグラム機能を実施するために、CPUは、第1のデータセット内の各々を読み出し、各値に対してデータの第2のセットを増分する。例えば、10バイトのデータセットに格納されている0の数を判定するために、CPUは10回の読み出しを実施し得る。次に、同じデータセット内にある1の数を判定するために、CPUは更に10回の読み出しを実施する。従って、ヒストグラム演算を実施するために、このようなシステムは(N)(M)回の読み出しを実施する必要がある場合があり得、ここで、Nは読み出されるメモリのセクションのサイズ(例えば、10バイト)であり、Mは、各バイトに格納され得る値の数である。アトミック操作と同様に、L1 SRAMは、ヒストグラム演算が完了するまで、他の全ての読み出し及び/又は書き込み動作をブロックし、一時停止し、停止し、廃棄しなければならない場合がある。これに対し、演算ユニット404は、CPUからの単一のトランザクションで同じ動作を行うために用いられ得る。
【0245】
演算ユニット404、1104は、ヒストグラムのタイプ(例えば、重み付け又は増分、符号付き又は符号なし)、ヒストグラムサイズ(例えば、バイト、ハーフワード、又はワード)、ヒストグラム重み(例えば、重み付けヒストグラムの選択されたビン毎に加算される符号付き重み、通常ヒストグラムで1に等しい重み)、ヒストグラム符号(例えば、既存のbig符号付き又は符号なし)、及びヒストグラム飽和イネーブルを含む幾つかの入力を有する。
【0246】
図4Cの構成要素451は、
図4Cに図示するバンクのためのECC構成要素310から読み出されたビンを選択する。構成要素452は、CPU102によって提供される重みのベクトルからビンに加算される重みを選択する。Cnt_valueは、構成要素451からのビン値とCPU102によって与えられる重みとの和である。構成要素453、構成要素454、及び構成要素458は、飽和回路の一部として用いられる。構成要素453は、ヒストグラムサイズ(バイト、ハーフワード、又はワード)及びカウント値(構成要素451、452の出力の合計)を受け取り、符号付きビンが飽和するかどうかを判定する。構成要素454は、ヒストグラムサイズ(バイト、ハーフワード、又はワード)及びカウント値(構成要素451、452の出力の合計)を受け取り、符号なしビンが飽和するかどうかを判定する。構成要素453及び454の出力は、選択されたビンの種類(例えば、符号付き又は符号なし)に基づいて、符号付き飽和値を用いるか符号なし飽和値を用いるかを選択するMUXに送られる。構成要素458は、MUXの出力と、ヒストグラム飽和イネーブルと、ヒストグラムのタイプ(例えば、符号付き又は符号なし)と、ビンの符号ビットと、重みの符号ビットとを受け取り、(例えば、上記の表1に基づいて)選択された飽和の種類に対して調整された更新されたCnt_valueを出力する。構成要素455、456、457は、新たなデータバンクを正しいビンに書き込むために、得られたcnt_valueと正しいビット位置におけるバイトイネーブルとを位置決めするために用いられる。
【0247】
図4Aの例では、CPU102がメインストレージ214にヒストグラム演算を実施するよう指令する。これにより、CPU102が動作のために確保しなければならないサイクル数を(N)×(M)から1に変更する。また、アトミック操作プロトコルは既にストアキューにおいて実装されているので、ヒストグラム演算は、メモリのNサイズに対してN個の読み出しを実施し、例示のメインキャッシュストアキュー212内の各値に対してカウントを増分することによって、演算構成要素404を用いて実施され得、これにより、読み出し動作の数を(N)×(M)動作からN個の動作に減らすことができる。
【0248】
動作において、CPU102がメインストレージ214のセクション(例えば、SRAMライン)に対応するヒストグラム演算を送信すると、ヒストグラム演算は、例示のラッチ402aに格納され、一方、タグRAM208は、ヒストグラム演算に対応するメモリアドレスがメインストレージ214において利用可能であるかどうかを検証する。例示のキャッシュコントローラ220は、ヒストグラム演算において識別されるセクションの各バイトに対する読み出し動作を容易にする(例えば、同時に最大128バイトを読み出すことによってヒストグラムビンが並列にアクセスされる)。利用可能であれば、タグRAM208は、ヒストグラム演算が例示のラッチ402aによって例示のラッチ402bに出力される一方で、メインストレージ214のセクションの第1のバイトにおけるデータを出力するように、メインストレージ214に指令する。例示のメインストレージ214がメモリアドレスから読み出したデータを例示のラッチ322aに出力すると、ラッチ402bはヒストグラム演算をラッチ例402cに出力する。ECC論理310がエラー検出及び訂正機能を実施した後、バイトで読み出されたデータは、例示の演算構成要素404に送られる。
【0249】
ECC論理310から読み出し値を受け取り、ラッチ402cからヒストグラム命令を受け取った後、演算構成要素404は、ヒストグラムを表すデータを開始する。例えば、演算構成要素404は、メインストレージのバイトに格納され得る各可能な値に対して初期値(例えば、ゼロ)を有するベクトル(例えば、ヒストグラムを表す)を開始し得る。演算構成要素404は、ECC論理310による出力(例えば、読み出しバイト)に基づいてベクトルの値を増分する。例えば、バイトの読み出し値が0である場合、演算構成要素404は、ベクトル内の0に対応する値を増分する。
【0250】
各ベクトルは並列に増分されるので、結果のベクトルは、SRAMの対応するセクションにおいて並列に読み出された値のヒストグラムに対応する。ヒストグラムの値は各ビットに対して増分されるので、結果のベクトルは、CPU102からのヒストグラム演算で識別されるメモリのセクションに格納された値のヒストグラムである。幾つかの例において、演算構成要素404は、何らかの重み付けされた値(例えば、1.5)だけ並列に増分し得る。完了すると、例示のヒストグラムは、例示のラッチ402eを介してMUX314に入力されるように、例示のMUX418(例えば、例示のペンディングのストアアドレステーブル416によって制御される)に入力される。動作が完了すると、例示のキャッシュコントローラ220は、最終的なヒストグラムベクトルを例示のラッチ322bを介して例示のCPUインタフェース202に出力するようにMUX314を制御し、それによってヒストグラム演算を終了する。
【0251】
幾つかの例において、L1キャッシュ110は、ヒストグラムビンがビンサイズの閾値制限(例えば、バイト、ハーフワード、ワードなど)を超えた後にヒストグラムビンが飽和し得る機能性をサポートする。下記の表1は飽和値の例を示す。この機能性を用いると、ヒストグラムビン値は、最大値に達するとロールオーバーしない。
【0252】
最適化されたアトミック操作及びヒストグラム演算を容易にするための例示の方法、装置、システム、及び製品が、本明細書において記載される。更なる例及びそれらの組み合わせは以下を含む。例1がシステムを含み、システムは、演算構成要素に結合されるキャッシュストレージと、キャッシュストレージに結合されるキャッシュコントローラとを含み、キャッシュコントローラは、データのセットを特定するメモリ動作を受け取り、キャッシュストレージからデータのセットを検索し、演算構成要素を利用して、データのセット内のそれぞれの値のカウントのセットを判定し、カウントのセットを表すベクトルを生成し、ベクトルを提供するように動作可能である。
【0253】
例2は、例1のシステムを含み、キャッシュコントローラは、キャッシュストレージに格納するためのベクトルを提供するように動作可能である。
【0254】
例3は、例1のシステムを含み、キャッシュコントローラは、プロセッサにベクトルを提供するように動作可能である。
【0255】
例4は、例1のシステムを含み、キャッシュコントローラに結合されるストアキューを更に含み、ストアキューは演算構成要素を含む。
【0256】
例5は、例1のシステムを含み、キャッシュストレージは、メインキャッシュストレージ又は犠牲キャッシュストレージの少なくとも1つである。
【0257】
例6は、例1のシステムを含み、演算構成要素は、(a)エラー検出及び訂正回路を介してキャッシュストレージからデータのセットを取得し、(b)ラッチを介して中央処理装置からメモリ動作を取得するためのものである。
【0258】
例7は、例1のシステムを含み、キャッシュコントローラは、単一サイクルで中央処理装置からの単一命令に基づいて中央処理装置にベクトルを提供するように動作可能である。
【0259】
例8はシステムを含み、システムは、キャッシュストレージと、キャッシュストレージと演算構成要素とに結合されるキャッシュコントローラとを含み、キャッシュコントローラは、データの第1のセットと演算動作とを特定するメモリ動作を受け取り、キャッシュストレージからデータの第1のセットを検索し、演算構成要素を利用してデータの第1のセットに対して演算動作を実施してデータの第2のセットを生成し、データの第2のセットを提供するように動作可能である。
【0260】
例9は、例8のシステムを含み、キャッシュコントローラは、キャッシュストレージに格納するためのデータの第2のセットを提供するように動作可能である。
【0261】
例10は、例8のシステムを含み、キャッシュコントローラは、データの第2のセットをプロセッサに提供するように動作可能である。
【0262】
例11は、例8のシステムを含み、キャッシュコントローラに結合されるストアキューを更に含み、ストアキューは演算構成要素を含む。
【0263】
例12は、例8のシステムを含み、キャッシュストレージは、メインキャッシュストレージ又は犠牲キャッシュストレージの少なくとも1つである。
【0264】
例13は、例8のシステムを含み、演算構成要素は、(a)エラー検出及び訂正回路を介してキャッシュストレージから第1のセットのデータを取得し、(b)ラッチを介して中央処理装置からメモリ動作を取得するためのものである。
【0265】
例14は、例8のシステムを含み、キャッシュコントローラは、単一サイクルで中央処理装置からの単一命令に基づいて、データの第2のセットを中央処理装置に提供するように動作可能である。
【0266】
例15は方法を含み、この方法は、データのセットを特定するメモリ動作を取得することと、キャッシュストレージからデータのセットを取得することと、データのセット内のそれぞれの値のカウントのセットを判定することと、カウントのセットを表すベクトルを生成することと、ベクトルを提供することとを含む。
【0267】
例16は、例15の方法を含み、ベクトルはキャッシュストレージに提供される。
【0268】
例17は、例15の方法を含み、ベクトルはプロセッサに提供される。
【0269】
例18は、例15の方法を含み、キャッシュストレージは、メインキャッシュストレージ又は犠牲キャッシュストレージの少なくとも1つである。
【0270】
例19は、例15の方法を含み、更に、(a)エラー検出及び訂正回路を介してキャッシュストレージからデータのセットを取得することと、(b)ラッチを介して中央処理装置からメモリ動作を取得することとを更に含む。
【0271】
例20は、例15の方法を含み、ベクトルを中央処理装置に提供することは、単一サイクルでの中央処理装置からの単一命令に基づく。
【0272】
コヒーレントシステムのためのL1キャッシュにおけるアトミック比較及びスワップサポート
【0273】
アドレスからのデータがL1キャッシュ110に格納される場合、同じアドレスのためのデータは他のキャッシュ(例えば、L2キャッシュ112、及び/又はL3キャッシュ114)にもキャッシュされ得る。従って、メモリアドレスは、1つのキャッシュ内のデータに対するいかなる変更も、他のキャッシュ(例えば、L2キャッシュ112及びL3キャッシュ114)に識別、追跡、及び/又は反映されることを保証するために追跡及び/又は監視される必要がある。
図3A~
図3Dに関連して上述したように、例示のMESI RAM300は、メインストレージ214に格納されたデータの状態を追跡して、同じメモリアドレスに対応する異なるキャッシュ内の不一致データに関する問題を回避し得る。例えば、CPU102が読み出し動作を送信する場合、メモリアドレス内のデータは操作されないため、例示のMESI RAM300はメモリアドレスの状態を共有に変更する。CPU102が書き込み動作を送信する場合、例示のMESI RAM300は、メモリアドレス内のデータが操作され、メインストレージ214がアドレスに対する書き込み許可を必要とするため、メモリアドレスの状態を排他的に変更する。メモリアドレス内のデータがメインストレージ214に書き込まれた後、MESI RAM300は、メモリアドレスの状態を変更済に更新する(例えば、メモリアドレスが変更されたことを示す)。
【0274】
上述したように、アトミック及び/又はヒストグラムプロトコルの間に、メモリアドレスからのデータは、メインストレージ214から読み出され、メインキャッシュストアキュー212に供給されて、更新され(例えば、増分され)、メインストレージ214に書き戻される。しかしながら、MESI RAM300が、共有状態のように対応するメモリアドレスの状態を識別した場合、アトミックプロトコルの書き込み動作は他のレベルのキャッシュに問題を引き起こす可能性がある(例えば、書き込みが、異なるキャッシュ内のデータの不一致を引き起こすため)。
【0275】
アトミック操作(例えば、アトミック比較及びスワップを含む)の間のこのようなデータの不一致を回避するため、例示のキャッシュコントローラ220は、共有状態に対応するキャッシュヒットをキャッシュミスとしてマーキングする。このようにして、キャッシュコントローラ220は、L2インタフェース228に、キャッシュミスを、排他的状態要求を有するより高いレベルキャッシュに送るように命令し得る。このようにして、より高いレベルキャッシュは、排他的状態をL1キャッシュ110に許可し得、L1キャッシュ110は、認められた排他的状態を受け取ったことに応答して、アトミック操作の一部として読み出し及び書き込み動作を行い得る。
【0276】
排他的要求を有するキャッシュミスがより高いレベルキャッシュに送られ、より高いレベルキャッシュが書き込みデータ及び排他的応答で応答した後、例示のアトミック操作論理406は、変更済としてデータにタグを付けるようにMESI RAM300に指令する。L2キャッシュ112から受け取られたデータは、メインキャッシュストアキュー212に送信されてメインストレージ214に格納される。動作はアトミック操作(例えば、通常のアトミック操作又はアトミック比較及びスワップ)又はヒストグラムプロトコルであったので、より高レベルのキャッシュからのデータは、操作のために例示の演算構成要素404及び/又は、例示のアトミック比較構成要素406によって操作され、例示のECC生成器412及び例示の調停マネージャ414を介して例示のメインストレージ215に格納される。
【0277】
アトミック比較及びスワップを容易にするための例示の方法、装置、システム、及び製品が本明細書において記載される。更なる例及びそれらの組み合わせには、以下のものが含まれる。例1は、システムを含み、システムは、キャッシュストレージと、キャッシュストレージに結合されるキャッシュコントローラとを含み、キャッシュコントローラは、鍵を特定するメモリ動作と、メモリアドレスと、データの第1のセットとを受け取り、メモリアドレスに対応するデータの第2のセットを検索し、データの第2のセットを鍵と比較し、鍵に対応するデータの第2のセットに基づいて、データの第1のセットをメモリアドレスに格納させ、データの第2のセットが鍵に対応しないことに基づいて、メモリアドレスにデータの第1のセットを格納させずにメモリ動作を完了させるように動作可能である。
【0278】
例2は、例1のシステムを含み、例1のシステムは、キャッシュストレージのためのストアキューであって、キャッシュストレージからデータの第2のセットを検索するためにタグ・ランダムアクセスメモリ(RAM)とインタフェースするラッチを含むストアキューと、アトミック比較構成要素であって、キャッシュコントローラがアトミック比較構成要素にデータの第2のセットを鍵と比較させ、鍵がデータの第2のセットと一致しない場合、データの第1のセットを破棄させるアトミック比較構成要素と、調停マネージャであって、鍵がデータの第2のセットと一致する場合、そのメモリアドレスにおけるデータの第1のセットをキャッシュストレージに格納する調停マネージャとを更に含む。
【0279】
例3は、例1のシステムを含み、キャッシュストレージがメインキャッシュストレージ又は犠牲キャッシュストレージの少なくとも1つである。
【0280】
例4は、例2のシステムを含み、ラッチは第1のラッチであり、アトミック比較構成要素は、(a)エラー検出及び訂正回路を介してキャッシュストレージからデータの第2のセットを取得し、(b)第2のラッチを介して第1のラッチからのアトミック比較及びスワップコマンドを取得するためのものである。
【0281】
例5は、例1のシステムを含み、キャッシュコントローラは、単一サイクルで中央処理装置からの単一命令に基づいてメモリ動作を完了するように動作可能である。
【0282】
例6は、例1のシステムを含み、このシステムは、メモリ動作のメモリアドレスの状態を判定するための、変更・排他的・共有・無効(MESI)構成要素を更に含み、キャッシュコントローラは、メモリ動作のメモリアドレスが共有状態に対応する場合、別のキャッシュにミス命令を提供するよう動作可能であり、ミス命令が排他的状態要求を含む。
【0283】
例7は、例6のシステムを含み、キャッシュコントローラは、調停マネージャに、第1のデータが鍵に一致する場合、排他的状態要求が他のキャッシュから認められた後に、そのメモリアドレスにおけるデータの第1のセットをキャッシュストレージに格納させるためのものである。
【0284】
例8は、例6のシステムを含み、キャッシュコントローラは、排他的状態要求が他のキャッシュから認められた後、タグRAMに、キャッシュストレージからのデータの第2のセットをメモリアドレスから検索させる。
【0285】
例9は、キャッシュストレージのためのストレージキューを含み、ストレージキューは、鍵と、メモリアドレスと、データの第1のセットと、メモリアドレスとを検索し、メモリアドレスに対応するデータの第2のセットを検索するためのラッチと、データの第2のセットを鍵と比較して、データの第2のセットが鍵に対応することに基づいて、データの第1のセットをメモリアドレスに格納させ、データの第2のセットが鍵に対応しないことに基づいて、データの第1のセットをメモリアドレスに格納させることなくメモリ動作を完了させるアトミック比較構成要素とを含む。
【0286】
例10は、例9のストレージキューを含み、キャッシュストレージは、メインキャッシュストレージ又は犠牲キャッシュストレージの少なくとも1つである。
【0287】
例11は、例9のストレージキューを含み、ラッチが第1のラッチであり、アトミック比較構成要素が、(a)エラー検出及び訂正回路を介してキャッシュストレージからデータの第2のセットを取得し、(b)第2のラッチを介して第1のラッチからアトミック比較及びスワップコマンドを取得するためのものである。
【0288】
例12は、例9のストレージキューを含み、第1のデータが鍵と一致する場合、ストレージキューは、中央処理装置からの単一命令に基づいて、アトミック比較及びスワップコマンドを単一サイクルで実施する。
【0289】
例13は、例9のストレージキューを含み、メモリ動作のメモリアドレスの状態を判定するために、変更・排他的・共有・無効(MESI)構成要素と、メモリ動作のメモリアドレスが共有状態に対応する場合、別のキャッシュにミス命令を提供するためのインタフェースとを更に含み、ミス命令が排他的状態要求を含む。
【0290】
例14は、例13のストレージキューを含み、第1のデータが鍵に一致する場合に、排他的状態要求が他のキャッシュから認められた後に、データの第1のセットをメモリアドレスにストアする調停マネージャを更に含む。
【0291】
例15は、例13のストレージキューを含み、ラッチは、排他的状態要求が他のキャッシュから認められた後にデータの第2のセットを読み出すために、タグRAMとインタフェースするためのものである。
【0292】
例16は方法を含み、この方法は、鍵と、メモリアドレスと、データの第1のセットとを特定するメモリ動作を受け取ることと、メモリアドレスに対応するデータの第2のセットを検索することと、データの第2のセットとを鍵と比較することと、データの第2のセットが鍵に対応することに基づいて、データの第1のセットをメモリアドレスに格納させることと、データの第2のセットが鍵に対応しないことに基づいて、メモリアドレスにデータの第1のセットを格納させずにメモリ動作を完了させることとを含む。
【0293】
例17は、例16の方法を含み、データの第2のセットをキャッシュストレージから検索するためにタグ・ランダムアクセスメモリ(RAM)とインタフェースし、データの第2のセットを鍵と比較し、鍵がデータの第2のセットと一致しない場合にはデータの第1のセットを破棄し、鍵がデータの第2のセットと一致する場合、そのメモリアドレスにおけるデータの第1のセットをキャッシュストレージに格納することを更に含む。
【0294】
例18は、例17の方法を含み、(a)エラー検出及び訂正回路を介したデータの第2のセットと、(b)中央処理装置からのメモリ動作とを更に含む。
【0295】
例19は、例16の方法を含み、メモリ動作の完了が単一サイクルでの中央処理装置からの単一命令に基づく。
【0296】
例20は、例16の方法を含み、メモリ動作のメモリアドレスの状態を判定することと、メモリ動作のメモリアドレスが共有状態に対応する場合にミス命令を別のキャッシュに提供することとを更に含み、ミス命令は排他的状態要求を含む。
【0297】
ストアキュー内のペンディング書き込みのインフライトデータ転送及び無効化のための方法及び装置
【0298】
本明細書において説明される例において、CPU102が読み出し動作を発行すると、タグRAMアクセス204、206は、読み出し動作がメインストレージ要素214及び/又は犠牲ストレージ要素218にヒットするかミスするかを判定する。タグRAMアクセス204、206が、読み出しコマンドがメインストレージ要素214と犠牲ストレージ要素214の両方をミスすると判定する例において、キャッシュコントローラ220は犠牲を作成するために(例えば、退去させるメインストレージ要素214内のラインを判定するために)動作をメインストレージ要素214に送る。幾つかの例において、メインストレージ要素214が、未処理の書き込みに対応するラインを退去させるときに、問題が生じ得る。例えば、ストアキュー212によってデータが書き込まれているメインストレージ要素214内のラインは、ラッチ402a~dのいずれかに位置する未処理の書き込みを有し得る。幾つかの例において、退去されたメインストレージ要素214内のラインを新たなアドレスが置換して、ストアキュー212が以前の書き込み動作から同じラインにデータを書き込もうとしているときに、エラーが生じ得る。
【0299】
本明細書において説明される例は、キャッシュコントローラ220が読み出し動作が読み出しミスであると判定したときに、ストアキュー212に発行される読み出し無効化動作を含む。キャッシュコントローラ220は、メインストレージ要素214が犠牲を作成するときに、読み出し無効化動作をストアキュー212に送る。読み出し無効化動作は、犠牲のアドレスをラッチ402a~dに格納された全てのアドレスと比較するようにストアキュー212に通知する。ラッチ402a~d内のアドレスのいずれかが犠牲のアドレスと一致する場合、優先順位マルチプレクサ418は、一致するアドレス内のデータをラッチ402eに送ってデータをMUX回路314に送る。このような動作は、インフライトデータのデータ転送と呼ぶことがある。例えば、優先順位マルチプレクサ418が、犠牲に対応するデータをラッチ402eを介してMUX回路314に送ると、MUX回路314は、犠牲のデータを犠牲ストレージ要素218及び/又はL2キャッシュ112に転送する。また、読み出し無効化動作は、ラッチ402a~dが犠牲に対応するアドレスを含むとき、ラッチ402a~dに格納されたデータを無効化する。例えば、ラッチ402a~dの各々は有効タグを含む。有効タグは、データがメインストレージ要素214に格納されるべきかどうかをラッチ402a~dに示す。読み出し無効化動作が有効タグを無効化すると、ラッチ402a~dは、メインストレージ要素214への無効データの書き込みを中止する。
【0300】
例示の動作において、CPU102は書き込み動作を発行する。幾つかの例において、書き込み動作はアドレスAに対応する。例えば、下記のとおりである。
【0301】
書き込み動作=書き込み(アドレスA):データ1 ∥ アドレスAに対応するキャッシュラインにデータ1を書き込む
【0302】
ストアキュー212は、書き込み動作を取得し、メインストア要素214のアドレスAにデータを書き込むプロセスを開始する。幾つかの例において、アドレスAはメインストレージ要素214内のキャッシュライン1に対応する。続いて、CPU102は読み出し動作を発行する。幾つかの例において、読み出し動作はアドレスBに対応する。例えば、下記のとおりである。
【0303】
読み出し動作=読み出し(アドレスB) ∥ アドレスBに対応するキャッシュラインのデータ2を読み出す
【0304】
例示のタグRAMアクセス204、206は、タグRAM208及びタグRAM210内のアドレスをチェックし、タグRAM208、210のいずれもアドレスBを含んでいないと判定する。キャッシュコントローラ220は、タグRAMアクセス204、206から読み出しミス結果を取得し、犠牲ストレージ要素218及び/又はL2キャッシュ112に退去させるために、メインストレージ要素214内の犠牲を判定するための割り当て動作を発行する。キャッシュコントローラ220が犠牲に対応する応答を取得すると、キャッシュコントローラ220は、ストアキュー212に対して読み出し無効化動作を発行する。
【0305】
ストアキュー212の読み出しポート424は、読み出し無効化動作を取得し、犠牲のアドレスを取得する。読み出しポート424は、犠牲のアドレスをデータストア416に送り、これらはラッチ402a~dに格納されたアドレスの全てと比較される。データストア416が、ラッチ402a~dに格納されたアドレスのいずれかが犠牲のアドレスと一致すると判定した場合、データストア416は、犠牲アドレスに対応するデータをラッチ402eに送るために、優先順位マルチプレクサ418に動作を出力する。ラッチ402eは、データをMUX回路314に転送して、犠牲ストレージ要素218及び/又はL2キャッシュ112に送る。
【0306】
また、ラッチ402a~dに格納されたアドレスが犠牲アドレスに一致することに応答して、ラッチ402a~dは、犠牲アドレスに対応するデータを無効化する。例えば、ラッチ402a~d内の有効タグは、犠牲アドレスに対応するラッチ内のデータが無効であることを示すように更新される。この例では、ストアキュー212は、退去された前のアドレスに対応するキャッシュラインにそのデータを書き込もうとしない。
【0307】
インフライトデータ転送及び無効化のための例示の方法、装置、システム、及び製品が本明細書において記載される。更なる例及びそれらの組み合わせには、以下のものが含まれる。
【0308】
例1は装置を含み、この装置は、キャッシュストレージと、キャッシュストレージに結合されるキャッシュコントローラとを含み、キャッシュコントローラは、第1のメモリ動作を受け取り、第1のメモリ動作がキャッシュストレージ内の読み出しミスに対応すると判定し、読み出しミスに応答して退去されるキャッシュストレージ内の犠牲アドレスを判定し、犠牲アドレスを特定する読み出し無効化コマンドを発行し、犠牲アドレスを、キャッシュコントローラによって処理されているメモリ動作のセットに関連するアドレスのセットと比較し、犠牲アドレスが、メモリ動作のセットの第2のメモリ動作に対応するアドレスのセットの第1のアドレスと一致することに応答して、第2のメモリ動作に関連するデータを提供するように動作可能である。
【0309】
例2は、例1の装置を含み、キャッシュコントローラは、タグ・ランダムアクセスメモリアクセスが読み出しミスを発行したときに、読み出し無効化コマンドを発行するためのものである。
【0310】
例3は、例1の装置を含み、キャッシュコントローラは、第3のメモリ動作のデータのための余地をつくるためにキャッシュストレージから退去させる犠牲アドレスを判定するためのものである。
【0311】
例4は、例1の装置を含み、キャッシュコントローラは、キャッシュストレージにおける第2のメモリ動作に関連するデータの書き込みを中止するように動作可能である。
【0312】
例5は、例1の装置を含み、装置は、第1のラッチ、第2のラッチ、第3のラッチ、及び第4のラッチを更に含み、第1のラッチ、第2のラッチ、第3のラッチ、又は第4のラッチは、犠牲アドレスのためのデータを格納するためのものである。
【0313】
例6は、例5の装置を含み、第1のラッチ、第2のラッチ、第3のラッチ、及び第4のラッチは、第1のラッチ、第2のラッチ、第3のラッチ、又は第4のラッチのいずれかが犠牲アドレスのためのデータを格納するときに無効に更新される有効タグを含む。
【0314】
例7は、例1の装置を含み、読み出しポートが読み出し無効化コマンドと犠牲アドレスを取得するときに、犠牲アドレスと、キャッシュコントローラによって処理されているメモリ動作のセットに関連するアドレスのセットとの間の比較を開始する読み出しポートを更に含む。
【0315】
例8は書き込み動作を無効にするための方法を含み、この方法は、第1のメモリ動作を受け取ることと、第1のメモリ動作がキャッシュストレージ内の読み出しミスに対応すると判定することと、読み出しミスに応答して退去されるキャッシュストレージ内の犠牲アドレスを判定することと、犠牲アドレスを特定する読み出し無効化コマンドを発行することと、犠牲アドレスを、キャッシュコントローラによって処理されているメモリ動作のセットに関連するアドレスのセットと比較することと、犠牲アドレスが、メモリ動作のセットの第2のメモリ動作に対応するアドレスのセットの第1のアドレスと一致することに応答して、第2のメモリ動作に関連するデータを提供することとを含む。
【0316】
例9は、例8の方法を含み、タグ・ランダムランダムアクセスメモリアクセスが読み出しミスを発行するときに読み出し無効化コマンドを発行することを更に含む。
【0317】
例10は、例8の方法を含み、第3のメモリ動作のデータのための余地をつくるためにキャッシュストレージから退去させる犠牲アドレスを判定することを更に含む。
【0318】
例11は、例8の方法を含み、キャッシュストレージにおける第2のメモリ動作に関連するデータの書き込みを中止することを含む。
【0319】
例12は、例8の方法を含み、第1のラッチ、第2のラッチ、第3のラッチ、及び第4のラッチのうちの少なくとも1つに犠牲アドレスに関するデータを格納することを更に含む。
【0320】
例13は、例12の方法を含み、第1のラッチ、第2のラッチ、第3のラッチ、及び第4のラッチのいずれかが犠牲アドレスのデータを格納するときに、第1のラッチ、第2のラッチ、第3のラッチ、又は第1のラッチの有効タグを無効に更新することを更に含む。
【0321】
例14は、例8の方法を含み、読み出しポートが読み出し無効化コマンドと犠牲アドレスを取得するときに、犠牲アドレスと、キャッシュコントローラによって処理されているメモリ動作のセットに関連するアドレスのセットとの間の比較を開始することを更に含む。
【0322】
例15はシステムを含み、このシステムは、第1のメモリ動作を出力する中央処理装置と、中央処理装置に結合され、キャッシュストレージを含むキャッシュと、キャッシュストレージと結合されるキャッシュコントローラとを含み、キャッシュコントローラは、第1のメモリ動作を受け取り、第1のメモリ動作がキャッシュストレージ内の読み出しミスに対応すると判定し、読み出しミスに応答して、キャッシュストレージ内の犠牲アドレスを退去させるべきと判定し、犠牲アドレスを特定する読み出し無効化コマンドを発行し、犠牲アドレスを、キャッシュコントローラによって処理されているメモリ動作のセットに関連するアドレスのセットと比較し、犠牲アドレスが、メモリ動作のセットの第2のメモリ動作に対応するアドレスのセットの第1のアドレスと一致することに応答して、第2のメモリ動作に関連するデータを提供し第2のメモリ動作を無効化するように動作可能である。
【0323】
例16は、例15のシステムを含み、キャッシュは第1のキャッシュであり、第1のキャッシュは、キャッシュストレージが第1のメモリ動作に関連するデータを含まないことに応答して、第2のキャッシュから第1のメモリ動作に関連するデータを検索するように動作可能である。
【0324】
例17は、例15のシステムを含み、キャッシュは、第2のメモリ動作の書き込みデータを複数のクロックサイクルでキャッシュストレージに格納するためのストアキューを含み、各クロックサイクルは、第2のメモリ動作に関連するデータの少なくとも1つの部分をキャッシュストレージに書き込む。
【0325】
例18は、例17のシステムを含み、キャッシュは第1のキャッシュであり、キャッシュコントローラは、第2のメモリ動作が無効化されたときに、ストアキューに残っているデータの一部をストアするための第2のキャッシュに提供するように動作可能である。
【0326】
例19は、例15のシステムを含み、キャッシュは未処理の書き込みを格納するためのストアキューを含み、第2のメモリ動作は未処理の書き込みに対応する。
【0327】
例20は、例15のシステムを含み、中央処理装置は、第2のメモリ動作の出力に続いて第1のメモリ動作を出力する。
図5は、
図1及び
図3のレベル1(L1)キャッシュ110の例示の犠牲キャッシュベースのセクションを示す。
図5は、タグRAM210、犠牲ストレージ218、MESI RAM300、例示のヒット/ミス比較論理306a、306b、306c、例示の置換ポリシー308(例えば、置換ポリシー構成要素308)、例示のアドレスエンコーダ326a、326b、326c、例示のマルチプレクサ(MUX)330a、330b、330c、例示のアドレス読み出し332a、332b、332c、例示のスカラーインタフェース502、例示のベクトルインタフェース504、例示のスヌープアドレス構成要素506、及び例示の応答マルチプレクサ508を含む。
図5は、デュアルデータ経路及びコヒーレンシーパイプラインをサポートする犠牲キャッシュシステムを図示する。
【0328】
図5において、例示のスカラーインタフェース502は、
図1のデータキャッシュ108のL1キャッシュ110を例示の処理コア104aに結合するインタフェースである。幾つかの例において、スカラーインタフェース502は、デュアルデータ経路犠牲キャッシュシステムにおける第1のデータ経路(DP0)に対応するインタフェースである。幾つかの例において、スカラーインタフェース502は、デュアルデータ経路キャッシュシステムにおける第2のデータ経路(DP1)に対応するインタフェースである。例示のスカラーインタフェース502は、64ビット幅の双方向及び/又は一方向インタフェースである。代替として、例示のスカラーインタフェース502は、異なる量のビット(例えば、32ビット、128ビットなど)をサポートしてもよい。幾つかの例において、スカラーインタフェース502は、コア104aからデータを受け取り及び/又は取得する。幾つかの例において、スカラーインタフェース502は、犠牲ストレージ218からのデータをコア104aに送る。例示のスカラーインタフェース502は、例示のタグRAM210、比較論理306に結合されて、CPU102からのアドレスをタグRAM210内のアドレスと比較する。
【0329】
図5において、例示のベクトルインタフェース504は、
図1のデータキャッシュ108のL1キャッシュ110を例示の処理コア104aに結合するインタフェースである。幾つかの例において、ベクトルインタフェース504は、デュアルデータ経路キャッシュシステムにおける第2のデータ経路(DP1)に対応するインタフェースである。幾つかの例において、ベクトルインタフェース504は、デュアルデータ経路キャッシュシステムにおける第1のデータ経路(DP0)に対応するインタフェースである。例示のベクトルインタフェース504は512ビット幅のインタフェースである。代替として、例示のベクトルインタフェース504は、異なる量のビット(例えば、256ビット、1024ビットなど)をサポートしてもよい。幾つかの例において、ベクトルインタフェース504は、コア104aからデータを受取り及び/又は取得する。幾つかの例において、ベクトルインタフェース504は、犠牲ストレージ218からのデータをコア104aに送る。例示のベクトルインタフェース504は、例示のタグRAM210、スヌープアドレス構成要素506、比較論理306bに結合されて、CPU102からのアドレスとタグRAM210からのアドレスとを比較する。幾つかの実施例において、スカラーインタフェース502及びベクトルインタフェース504は、CPUインタフェース202(
図2)によって実装される。例えば、スカラーインタフェース502及びベクトルインタフェース504は、CPUインタフェース202に含めることができる。
【0330】
図5では、例示のタグRAM210は、例示のインタフェース502、504に接続される。しかしながら、幾つかの例において、タグRAM210は、例示の犠牲タグRAMアクセス206(
図2)を介してインタフェース502、504に結合されてもよい。例示のタグRAM210は、デュアルポートのフルアソシアティブな(fully associated)タグRAMであり、デュアル経路(例えば、スカラー経路及びベクトル経路)をサポートする。本明細書において用いられるように、完全に関連付けられたタグRAM210は、各メモリアドレスを強制的に1つの特定のブロックに強いるのではなく、メインストレージ214(
図2)からのデータを任意のキャッシュブロックに格納することを可能にする。幾つかの例において、タグRAM210は完全に関連付けられているので、犠牲ストレージ218も完全に関連付けられる。
【0331】
図5において、比較論理306aは、スカラーインタフェース502、タグRAM210、アドレスエンコーダ326a、及び置換ポリシー構成要素308に接続される。比較論理306bは、ベクトルインタフェース504、タグRAM210、アドレスエンコーダ326b、及び置換ポリシー構成要素308に接続される。比較論理306a、306bは、スカラー及びベクトルデータ経路の両方をサポートする。例えば、比較論理306はスカラーデータをタグRAM210のデータと比較し、及び/又は、ベクトルデータをタグRAM210のデータと比較し得る。比較論理306は、置換ポリシー構成要素308及びアドレスエンコーダ326a、326bにヒット又はミス出力を提供する。幾つかの例において、比較論理306は、ヒット又はミス出力をマルチプレクサ330a、330bに提供する。
【0332】
図5において、例示の置換ポリシー構成要素308は、比較論理306a、306bに結合される。例示の置換ポリシー構成要素308は制御/意思決定論理である。例示の置換ポリシー構成要素308は、複数の入力に基づいて例示の犠牲ストレージ218のエントリ(例えば、データ)を規定(dictate)する。例えば、置換ポリシー構成要素308は、キャッシュコントローラ220(
図2)が犠牲ストレージ218への/からのエントリを除去及び/又は入力すべきかどうかを判定し得る。置換ポリシー構成要素308の制御論理はデータ一貫性が維持されるような様式で、2つのアドレス(例えば、スカラー及びベクトル)間のアドレス競合を解決するように構成される。
図6は、例示の置換ポリシー構成要素308の制御論理を示す。
【0333】
図5において、例示のアドレスエンコーダ326a、326bは、犠牲ストレージ218によって解釈可能な形式にメモリアドレスを符号化する。例えば、アドレスエンコーダ326a、326bは、
図3A~
図3Dのアドレスエンコーダ326と同様に動作し得る。例示のアドレスエンコーダ326a、326bは、符号化されたアドレスをマルチプレクサ330a、330bに出力する。例えば、アドレスエンコーダ326aは符号化されたメモリアドレスをマルチプレクサ330aに出力し得、アドレスエンコーダ326bは、符号化されたメモリアドレスをマルチプレクサ330bに出力し得る。
【0334】
図5において、マルチプレクサ330a、330bは、比較論理306a、306bの実行に応答してアドレスを選択する。例えば、マルチプレクサ330aはヒットに対応する比較論理306aからの入力を取得することができ、従って、アドレスエンコーダ326aからの符号化されたアドレスを選択し得る。付加的に及び/又は代替として、マルチプレクサ330aは、ミスに対応する比較論理306aからの入力を取得し、従って、置換ポリシー構成要素308によって選ばれたメモリアドレスを選択し得る。例示のマルチプレクサ330a、330bは、アドレス読み出し332a、332bに結合される。
【0335】
図5において、例示のアドレス読み出し332a、332bは、マルチプレクサによって選択されたアドレス値を犠牲ストレージ218に読み込む。例えば、アドレス読み出し332a、332bは、犠牲ストレージ218から格納及び/又は撤去されるべきアドレスを識別できる。
【0336】
図5において、例示の犠牲ストレージ218は、フルアソシアティブキャッシュである。例えば、完全に関連付けられた犠牲ストレージ218は、データがメインストレージ214からフェッチされた(例えば犠牲にされた)ときに、キャッシュの任意の未使用ブロックにデータを配置し得る。犠牲ストレージ218内のデータの配置は、置換ポリシー構成要素308に基づく。例えば、置換ポリシー構成要素308は、メインストレージ214からのデータのラインが犠牲ストレージ218にいつどこに配置されるべきかを判定し得る。幾つかの例において、アドレス読み出し332a、332bがデータを犠牲ストレージ218に読み込むと、犠牲ストレージ218は応答を出力する。幾つかの例において、犠牲ストレージ218は、DP0応答、DP1応答、及びL2データキャッシュ112に送信されるべきスヌープ応答を生成する。幾つかの例において、応答はCPU102によって要求されたデータを含む。例えば、アドレス読み出し332a、332bに基づいて、CPU102がこのようなデータを要求した場合には、犠牲ストレージ218はメモリアドレスロケーションからデータを出力し得る。付加的に及び/又は代替として、アドレス読み出し332a、332bに基づいて、置換ポリシー構成要素308が犠牲ストレージ218内のデータを置換している場合、犠牲ストレージ218は、退去データをL2キャッシュ112に出力し得る。
【0337】
図5において、例示のスヌープアドレス構成要素506は、スヌープデータ経路及び/又は他のインタフェースによって実装される。2つのCPUデータ経路(例えば、DP0及びDP1)に加えて、L1キャッシュ110は、L1キャッシュ110にコヒーレンシーを付与するためのスヌープデータ経路を含む。例示のスヌープアドレス構成要素506は、タグRAM210と比較論理306cに接続される。幾つかの例において、スヌープアドレス構成要素506は、読み出されたアドレスをタグRAM210に発行する、より高レベルのデータキャッシュ(例えば、L2データキャッシュ112)によって発行される例示のスヌープ要求アドレスを取得する。例えば、スヌープアドレス構成要素506は、タグRAM210からメモリアドレスを読み取ろうとする。また、スヌープアドレス構成要素506は、読み取ったアドレスを比較論理306cに提供する。スヌープアドレス構成要素506、より一般的にはコヒーレンシーパイプラインは、MESI RAM300内の犠牲ストレージ218内の全てのキャッシュラインのMESI状態を格納するために用いられる。全てのキャッシュラインのMESI状態をMESI RAM300に格納することにより、犠牲キャッシュシステムはコヒーレンシーをサポートする。
【0338】
図5において、例示のメモリRAM300は比較論理306cに接続される。例示のMESI RAM300は、比較論理306cに基づいてキャッシュラインを変更、排他、共有、又は無効とマーキングすることにより、メインストレージ214及び犠牲ストレージ218におけるキャッシュラインの状態を追跡する。例えば、スヌープアドレス構成要素506がタグRAM210に読み出しを発行すると、タグRAM210は、正しいメモリアドレスを戻すか又は戻さない。従って、比較論理306cは、発行されたスヌープ読み出しのメモリアドレスとタグRAM210の結果とを比較してキャッシュラインの状態を判定する。
【0339】
図5に図示される例示のトポロジーでは、応答マルチプレクサ508は、犠牲ストレージ218及び犠牲キャッシュストアキュー216に結合される。このようにして、応答マルチプレクサ508は、犠牲ストレージ214によって取得されたデータ、及び/又は、犠牲キャッシュストアキュー216によって取得されたデータ間で選択して、最新のデータをシステムに送信するように構成される。優先順位マルチプレクサ508の例示の動作説明を以下に説明される。
【0340】
デュアルデータ経路を備えるマルチバンク犠牲キャッシュのための方法及び装置
【0341】
犠牲キャッシュの中には、マルチバンクアーキテクチャをサポートしないものがある。例えば、犠牲キャッシュは、同じクロックサイクルの間に或るプロセッサ(例えば、CPU)による複数のアクセスをサポートしないモノリシックストレージデバイスであり得る。例えば、単一犠牲キャッシュ内のデータにアクセスする要求が、犠牲キャッシュ全体をロックアップできる。このような例では、クロックサイクル毎に1つの完全な犠牲キャッシュラインアクセスをサポートできる単一レジスタファイルがある。このような幾つかの例において、単一レジスタファイルはこのような要求を受け取った犠牲ストレージデータバンクに割り当てられるので、その要求を処理するために、単一犠牲ストレージに関連付けられた犠牲キャッシュライン全体がロックされ得る。
【0342】
本明細書において記載される例は、デュアルデータ経路を備えるマルチバンク犠牲キャッシュを含む。幾つかの記載される例において、
図2の犠牲ストレージ218は、複数のバンクを有し、したがって、マルチバンク状であるか又はマルチバンクデータ又はメモリ構造を有する。有利なことに、犠牲ストレージ218のマルチバンク構造は、クロックサイクル当たり2つ又はそれ以上のアクセス(例えば、CPUアクセス)に対するサポートを達成し得る。有利なことに、犠牲ストレージ218のマルチバンク構造は、2つ又はそれ以上のアクセスが、性能オーバーヘッドなしに処理され及び/又は達成されることを可能にする。
【0343】
幾つかの記載される例において、犠牲ストレージ218が2ポートのフルアソシアティブタグRAM(例えば、
図2のタグRAM210)を有する。幾つかの例において、ヒット/ミス比較が、スカラーアドレスとベクトルアドレスの両方でサポートされている。そのような記載された例において、データ経路(例えば、スカラーデータ経路、ベクトルデータ経路など)の各々に関するヒット/ミス判定に基づいて、犠牲ストレージ218がロックされる。犠牲ストレージ218へのアクセスがヒットである例では、ヒットエントリの位置が選択される。一例において、犠牲ストレージ218へのアクセスがミスである場合、割り当てポリシーは、犠牲ストレージ218の特定のセットについてチェックされる。
【0344】
幾つかの記載される例では、後続のパイプステージにおいて、両方のアドレスについての犠牲ストレージ218の選択されたセットが読み出され、応答がCPUに返される。幾つかの記載された例において、セット選択論理が、データ一貫性が維持されるように、2つのアドレス(例えば、スカラーアドレスとベクトルアドレス)間のアドレス競合を解決する。幾つかの記載される例において、制御論理もアドレス競合を解決する。
【0345】
幾つかの記載される例において、バンク調停論理が、アドレスのそれぞれに必要とされるバンクを計算し及び/又はその他の方式で判定し、バンクの各々上の読み出しを選択する。幾つかの記載される例において、制御論理は、2つのメモリ動作のシリアル化を有効にするために、2つのアドレス間のバンク競合を解決する。両方のデータ経路が同じアドレスにアクセスする幾つかの記載される例において、制御論理は、同じアドレスに対して複数の割り当て要求を発行しないようにし得る。データが犠牲ストレージ218から読み出されると、例示のデータ多重化論理は、データを読み出し応答としてCPUに戻す前に、データを正しいデータレーンに折り畳むことができる。
【0346】
図7Aは、第1の例示のカプセル化されたデータキャッシュシステム700の概略図である。第1のカプセル化されたデータキャッシュシステム700は、
図1のL1キャッシュ110又はその一部、及び/又はより一般的には、
図1のデータキャッシュ108又はその一部の例示の回路実装とし得る。第1のカプセル化されたデータキャッシュシステム700は、統合されたストレージビューを外部システム(例えば、1つ又はそれ以上のCPU、1つ又はそれ以上のプロセッサ、外部ハードウェアなど)に提供するためにカプセル化される。例えば、第1のカプセル化されたデータキャッシュシステム700は、ファームウェア、ソフトウェア、ハードウェア論理等、及び/又はそれらの組合せを用いてカプセル化され得、リードアフターライト(RAW)ハザード、ライトアフターライト(WAW)ハザード、データ転送等に関連する全ての複雑性をカプセル化及び/又はその他の方式で一般化し得る。有利なことに、
図7Aの例に示されたマージアーキテクチャは、対象のデータの最新バージョンへのアクセスを取得することを単純化するために、外部装置(例えば、中央処理装置102)への別個のポートを提供し得る。
【0347】
図7Aの例において、第1のカプセル化されたデータキャッシュシステム700は、
図2の犠牲キャッシュストアキュー216と
図2の犠牲ストレージ218とを含む。
図7Aでは、犠牲キャッシュストアキュー216は、複数の第1の例示の独立してアドレス指定可能なバンク(例えば、データバンク、ストアバンク、データストアバンクなど)702を含む。例えば、第1の独立してアドレス指定可能なバンク702は、バンクキュー、バンクサブキューなどであり得る。そのような例では、バンクキュー、バンクサブキューなどは、
図7C及び/又は
図7Eに後述するように、複数のストレージ要素を含み得る。第1の独立してアドレス指定可能なバンク702は、犠牲キャッシュストアキューバンク(例えば、犠牲キャッシュストアキューデータバンク、犠牲キャッシュバンクキュー、犠牲キャッシュバンクサブキューなど)である。
図7Aでは、犠牲キャッシュストアキュー216は、16個の犠牲キャッシュストアキューバンク702を含む。代替として、犠牲キャッシュストアキューバンク702の事例が16個より少なくても多くてもよい。
【0348】
図7Aでは、犠牲ストレージ218は、複数の第2の例示の独立してアドレス指定可能なバンク(例えば、データバンク、ストアバンク、データストアバンクなど)704を含む。第2の独立してアドレス指定可能なバンク704は犠牲ストレージバンク(例えば、犠牲ストレージデータバンク)である。
図7Aにおいて、犠牲ストレージ218は、16個の犠牲ストレージバンク704を含む。代替として、犠牲格納バンク704の事例は、16個より少なくても多くてもよい。例えば、犠牲キャッシュストアキュー216は、第1のバンクキュー又は第1のバンクサブキュー(例えば、犠牲キャッシュストアキュー:BANK1)を含む複数のバンクキュー又はバンクサブキューを含み得、犠牲ストレージ218は、第1のデータバンク(例えば、犠牲ストレージ:BANK1)を含む複数のデータバンクを含み得る。
【0349】
幾つかの例において、犠牲キャッシュストアキュー216及び犠牲ストレージ218は、各々256行を有し、各行は1024ビットのライン幅を有するが、
図7Aに示されるように、所与のバンク内の行当たり64ビットを有する16のバンクに分割されている。幾つかの例において、犠牲キャッシュストアキュー216及び犠牲ストレージ218が各々384行を有し、各行は1024ビットのライン幅を有するが、
図7Aに示すように所与のバンクでは行当たり64ビットである16個のバンクに分割される。もちろん、上記の例で記載したキャッシュサイズは2つの例にすぎず、本記載は、いかなる特定のキャッシュライン幅、バンクの数、又は行などに限定されない。
図7Aに示すように、第1のバンク702の各々は第2のバンク704の1つに対応する。例えば、犠牲キャッシュストアキュー216の第1のバンク(BANK1)は、犠牲ストレージ218の第1のバンク(BANK1)と回路状態にあり、したがって、犠牲ストレージ218の第1のバンクに対応する。
【0350】
有利にも、犠牲キャッシュストアキュー216、犠牲ストレージ218、及び/又はより一般的には、第1のカプセル化されたデータキャッシュシステム700のマルチバンク構造は、並列にバンクに送られる読み出し及び書き込み動作を処理し得る。幾つかの例において、各バンクは、読み出し及び/又は書き込み動作に応答して、それ自体のプロセスを調停する。第1のカプセル化されたデータキャッシュシステム700の各バンクが独立して動作できるようにすることにより、要求が受け取られたときにキャッシュライン全体がロックアップされないので、第1のカプセル化されたデータキャッシュシステム700の動作がより効率的になる。そうではなく、このような要求を受け取ったバンクに割り当てられたキャッシュラインの一部のみがロックされる。
【0351】
図7Cは、例示の犠牲キャッシュマルチバンク構造720を図示する。幾つかの例において、
図1のL1キャッシュ110、L2キャッシュ112、及び/又はL3キャッシュ114は、犠牲キャッシュバンク構造720を有し得る。幾つかの例において、
図2の犠牲キャッシュストアキュー216及び/又は
図2の犠牲ストレージ218は、犠牲キャッシュマルチバンクストラクチャ720を有し得る。例えば、犠牲キャッシュマルチバンク構造720は、犠牲キャッシュストアキュー216及び/又は犠牲ストレージ218の例示の実装とし得る。
【0352】
犠牲キャッシュマルチバンク構造720は、16個の例示のバンク(バンク0~15)722を含むデータ又はメモリ構造であり、バンク722の各々は64バイト(例えば、バイト0~7)のデータ幅を有する。バンク722の各々は16個の例示の行(行0~15)724を含み、行724の各々は128バイトのデータ幅を有する(例えば、128バイト=8バイト/バンク×16バンク)。
図7Cでは、バンク722の各々が128バイト(例えば、128バイト=8バイト/行×16行)を格納し得る。
図7Cにおいて、犠牲キャッシュマルチバンク構造720は、2048バイト(例えば、2048バイト=128バイト/バンク×16バンク)を格納し得る。犠牲キャッシュマルチバンク構造720は、バンクによって独立してアドレス指定可能である。例えば、行724の第1の行は、開始行アドレス0及び終了行アドレス127を有し、行724の第2の行は、開始行アドレス128及び終了行アドレス255を有する。
【0353】
幾つかの例において、キャッシュラインは、メモリ(例えば、DRAM)又はストレージユニット(例えば、メインストレージ214、犠牲ストレージ218等)の幅に収まる128バイトのデータであり得る。
図7Cの例では、或るキャッシュラインが、犠牲キャッシュバンク構造720の行全体を消費し得る。例えば、キャッシュラインは16バンクの行724のうちの1つを使用し得、各バンクは8バイト幅である。有利にも、犠牲キャッシュバンク構造720は、そこに格納されたデータにアクセスするために、16の異なるキャッシュラインをイネーブルにし得る。
【0354】
図8Aは、例示の犠牲キャッシュタグ(VCT)ランダムアクセスメモリ(RAM)800の概略図を示す。VCT RAM800は、
図2のタグRAM210の例示の実装とし得る。例えば、VCT RAM800は、
図2の犠牲キャッシュストアキュー216、犠牲ストレージ218等に格納されたデータのアドレスを格納し得る。VCT RAM800は、マルチバンクVCT RAMである。例えば、VCT RAM800は、16バンクなどの複数のバンク(例えば、データバンク、メモリバンクなど)を含み得るが、VCT RAM800は異なる数のバンクを有し得る。
【0355】
VCT RAM800は、第1の例示の割り当てポート(AP0)802と、第2の例示の割り当てポート(AP1)804と、第3の例示の割り当てポート(AP2)806とを含む、例示の割り当てポート802、804、806を含む。VCT RAM800は、第1の例示の読み出しポート(RP0)808、第2の例示の読み出しポート(RP1)810、及び第3の例示の読み出しポート(RP2)812を含む、例示の読み出しポート808、810、812を含む。VCT RAM800は、例示のLRU読み出しポート814を含む。VCT RAM800は、第1の例示の出力ポート(OP0)816と、第2の例示の出力ポート(OP1)818と、第3の例示の出力ポート(OP2)820と、第4の例示の出力ポート(OP3)822とを含む、例示の出力ポート816、818、820、822を含む。代替として、VCT RAM800は、
図8Aに示されているものより少ないか又は多い割り当てポート、読み出しポート、LRU読み出しポート、及び/又は出力ポートを有し得る。
【0356】
VCT RAM800は、犠牲ストレージ218を充填するための割り当てポート802、804、806を含む。例えば、割り当てポート802、804、806は、犠牲ストレージ218にデータを格納するために、外部ハードウェア(例えば、CPU102、メインストレージ214等)からの要求を受け取るように構成され得る。第1の割り当てポート802は、第1の例示のデータ824を受け取るように構成される。例えば、第1の割り当てポート802は、スカラーデータ経路(DP0)に関連する書き込み状態機械から第1のデータ824を受け取り得る。第1のデータ824は、
図2のCPUインタフェース202から生成された制御信号(例えば、スカラーデータ経路(DP0))を表すことができるWRM_TAG_UPDATE0データを含む。制御信号は、CPUインタフェース202がCPUインタフェース202から犠牲ストレージ218に移動されるキャッシュラインを有し、そのがめ、CPUインタフェース202がCPUインタフェース202からタグRAM210に移動されるアドレスを有することをVCT RAM800に知らせるために生成され得る。第1のデータ824はVTAG_WR_TAG0データを含み、これは犠牲キャッシュ218に格納されるべきデータのアドレスに対応し得るVCT RAM800のアドレス(例えばタグアドレス)を表すことができる。第1のデータ824は、データを格納する場所の犠牲キャッシュ218のアドレス(例えば、DP0に対する犠牲キャッシュタグ)を表すことができるVTAG_WR_SET0データを含む。
【0357】
第2の割り当てポート804は、第2の例示のデータ826を受け取るように構成される。例えば、第2の割り当てポート804は、ベクトルデータ経路(DP1)に関連する書き込み状態機械から第2のデータ826を受け取り得る。第2のデータ826は、
図2のCPUインタフェース202から生成された制御信号(例えば、ベクトルデータ経路(DP1))を表すことができるWRM_TAG_UPDATE1データを含む。制御信号は、CPUインタフェース202がCPUインタフェース202から犠牲ストレージ218に移動されるキャッシュラインを有し、そのため、CPUインタフェース202がCPUインタフェース202からタグRAM210に移動されるアドレスを有することをVCT RAM800に知らせるために生成され得る。第2のデータ826はVTAG_WR_TAG1データを含み、これは犠牲キャッシュ218に格納されるべきデータのアドレスに対応し得るVCT RAM800のアドレス(例えばタグアドレス)を表すことができる。第2のデータ826は、データを格納する場所の犠牲キャッシュ218のアドレス(例えば、DP1のための犠牲キャッシュタグ)を表すことができるVTAG_WR_SET1データを含む。
【0358】
第3の割り当てポート806は、第3の例示のデータ828を受け取るように構成される。第3のデータ828はARB_EVT_TAG_UPDATEデータを含み、これは、メインストレージ214から生成された制御信号を表すことができる。制御信号は、調停(ARB)退去(EVT)タグ更新制御信号であり、これは、メインストレージ214がメインストレージ214から犠牲ストレージ218に移動されるべきキャッシュラインを有し、そのため、メインストレージ214がタグRAM208からタグRAM210に移動されるべきアドレスを有することをVCT RAM800に知らせるために生成され得る。第3のデータ828はADP_EVT_WR_TAGデータを含み、これは犠牲キャッシュ218に格納されるべきデータのアドレスに対応し得るVCT RAM800のアドレス(例えばタグアドレス)を表し得る。第3のデータ828はADP_EVT_WR_SETデータを含み、これは、データを格納する場所の犠牲キャッシュ218のアドレス(例えば、メインキャッシュから犠牲キャッシュに移動されたラインの犠牲キャッシュタグ)を表すことができる。例えば、ADP_EVT_WR_TAG及びADP_EVT_WR_SETデータは、アドレスデータ経路(ADP)データと呼ぶことができる。第1のデータ824、第2のデータ826、及び/又は第3のデータ828は、1つ又は複数のデータパケット、通信プロトコル(例えば、集積回路間(I2C)プロトコル)に基づく1つ又は複数の信号などとし得る。
【0359】
VCT RAM800は読み出しポート808、810、812を含み、外部ハードウェア(例えば、CPU102)が、犠牲ストレージ218に格納されたデータの読み出し及び/又は他の方式でのアクセスを要求できるインタフェースを提供する。第1の読み出しポート808は、第4の例示のデータ830を受け取るように構成される。例えば、第1の読み出しポート808は、CPU102のスカラーインタフェース502から第4のデータ830を受け取り得る。第4のデータ830はADP_ADDR_E2_DP0データを含み、これは、スカラーインタフェース502がアクセスを要求する犠牲ストレージ218のアドレスを表すことができる。
【0360】
第2の読み出しポート810は、第5の例示のデータ832を受け取るように構成される。例えば、第2の読み出しポート810は、CPU102のベクトルインタフェース504から第5のデータ832を受け取り得る。第5のデータ832は、ベクトルインタフェース504がアクセスを要求する犠牲ストレージ218のアドレスを表すことができるADP_ADDR_E2_DP1データを含む。
【0361】
第3の読み出しポート812は、第6の例示のデータ834を受け取るように構成される。
例えば、第3の読み出しポート812は、
図5のスヌープアドレス構成要素506(例えば、スヌープインタフェース)から第6のデータ834を受け取り得る。第6のデータ834はSNP_ADDR_E2_DP0データを含み、これは、スヌープアドレス構成要素506がアクセスを要求する犠牲ストレージ218のアドレスを表すことができる。
【0362】
LRU読み出しポート814は、7番目の例示のデータ836を受け取るように構成される。例えば、LRU読み出しポート814は、
図3A~
図3Dの置換ポリシー構成要素308から第7のデータ836を受け取り得る。第7のデータ836は、LRU_SET_DP0及びLRU_SET_DP1を含み、これらは、犠牲ストレージ218のLRU(least recently used)キャッシュラインに関連するそれぞれのアドレスを表すことができる。例えば、LRU読み出しポート814は、置換ポリシー構成要素308からLRUデータを受け取るように構成された犠牲LRU(VLRU)読み出しポートとし得る。
【0363】
VCT RAM800は、犠牲ストレージ218に関連する読み出し要求又は書き込み要求(例えば割り当て要求)に応答して出力を外部ハードウェア(例えば、CPU102、メインストレージ214等)に送信するために、出力ポート816、818、820、822を含む。第1の出力ポート816は、第1の例示の出力データ838を送信するように構成される。例えば、第1の出力ポート816は、第1の出力データ838をスカラーインタフェース502に送信し得る。第1の出力データ838はVTAG_HIT_DP0データを含み、これは、スカラーインタフェース502によって要求されたデータが犠牲ストレージ218に格納されていることを示すことができる。第1の出力データ838は、スカラーインタフェース502によって要求されたデータは、犠牲ストレージ218に格納されていないことを示すことができるVTAG_MISS_DP0データを含む。第1の出力データ838はVTAG_SET_DP0データを含み、これは、スカラーインタフェース502によって要求されたデータが格納される犠牲ストレージ218内のアドレスを表すことができる。
【0364】
第2の出力ポート818は、第2の例示の出力データ840を送信するように構成される。例えば、第2の出力ポート818は、第2の出力データ840をベクトルインタフェース504に送信し得る。第2の出力データ840はVTAG_HIT_DP1データを含み、これは、ベクトルインタフェース504によって要求されたデータが犠牲ストレージ218に格納されていることを示すことができる。第2の出力データ840はVTAG_MISS_DP1データを含み、これは、ベクトルインタフェース504によって要求されたデータが犠牲ストレージ218に格納されていないことを示すことができる。第2の出力データ840はVTAG_SET_DP1データを含み、これは、ベクトルインタフェース504によって要求されたデータが格納される犠牲ストレージ218内のアドレスを表すことができる。
【0365】
第3の出力ポート820は、第3の例示の出力データ842を送信するように構成される。例えば、第3の出力ポート820は、第3の出力データ842を置換ポリシー構成要素308に送信し得る。第3の出力データ842はVTAG_ADDR_DP0データを含み、これは、LRU読み出しポート814で受け取られた置換ポリシー構成要素308による要求LRU_SET_DP0に関連付けられた犠牲ストレージ218のアドレスを表すことができる。
【0366】
第4の出力ポート822は、第4の例示の出力データ844を送信するように構成される。例えば、第4の出力ポート822は、第4の出力データ844を置換ポリシー構成要素308に送信し得る。第4の出力データ844はVTAG_ADDR_DP1データを含み、これは、LRU読み出しポート814で受け取られた置換ポリシー構成要素308による要求LRU_SET_DP1に関連付けられた犠牲ストレージ218のアドレスを表すことができる。
【0367】
図8Bは、
図8AのVCT RAM800の例示の実装の別の概略図を示す。例えば、
図8Bは、
図5のL1キャッシュ110の犠牲キャッシュベースのセクション又はその一部に対応し得る。
【0368】
図8Bは、
図8AのVCT RAM800の別の例示の実装を示す。
図8Bにおいて、VCT RAM800は、16個のセット846の例を含む。例えば、セット846は、第1のセットVCT_ADDR[0]、第2のセットVCT_ADDR[1]等を含む。代替として、VCT RAM800は、16個以下又はそれ以上のセット846を含み得る。
【0369】
VCT RAM800は、セット846に対応するアドレス(例えば、タグアドレス)を格納するように構成された犠牲キャッシュタグストレージである。セット846の各々は、第1の例示のコンパレータ850のそれぞれ1つ及び第2の例示のコンパレータ852のそれぞれ1つに結合される。第1のコンパレータ850は、
図3及び/又は
図5の比較論理306aの例示の実装とし得る。第2のコンパレータ852は、
図3及び/又は
図5の比較論理306bの例示の実装とし得る。第1のセットVCT_ADDR[0]は、第1のコンパレータ850のうちの第1の1つ及び第2のコンパレータ852のうちの第1の1つに結合され、第2のセットVCT_ADDR[1]は、第1のコンパレータ850のうちの第2の1つ及び第2のコンパレータ852のうちの第2の1つに結合される。
【0370】
第1のコンパレータ850及び第2のコンパレータ852は、第1の例示のアドレスエンコーダ論理回路854及び第2の例示のアドレスエンコーダ論理回路856を含むそれぞれの例示のアドレスエンコーダ論理回路854、856に結合される。第1のコンパレータ850は、第1のアドレスエンコーダ論理回路854に結合される。第2のコンパレータ852は、第2のアドレスエンコーダ論理回路856に結合される。
【0371】
アドレスエンコーダ論理回路854、856は、
図3及び/又は
図5のアドレスエンコーダ326a、326bの例示の実装とし得る。例えば、第1のアドレスエンコーダ論理回路854は、アドレスエンコーダ326aの例示の実装とし得る。他の例において、第2のアドレスエンコーダ論理回路856は、アドレスエンコーダ326bの例示の実装であり得る。
【0372】
第1の例示のマルチプレクサ858Aが、第1のアドレスエンコーダ論理回路854に結合される。第1のアドレスエンコーダ論理回路854は、第1の例示のデコーダ860Aと、第1の例示のインバータ(例えば、論理ゲート、反転論理ゲート等)862Aと、第1の例示のANDゲート(例えば、論理ゲート、AND論理ゲート等)864Aと、第1の例示のORゲート(例えば、論理ゲート、OR論理ゲート等)866Aと、第1の例示のエンコーダ868Aと、第3の例示のコンパレータ870Aと、第4の例示のコンパレータ872Aとを含む。
【0373】
図8Bは、明瞭にするために、第1のANDゲート864A、第1のORゲート866A、第3のコンパレータ870A、及び第4のコンパレータ872Aの各1つの事例のみを示す。しかしながら、第1のANDゲート864A、第1のORゲート866A、第3のコンパレータ870A、及び第4のコンパレータ872Aの各々は、これらの構成要素の16個の事例を表すことができる。例えば、第1のANDゲート864Aは、第1のANDゲート864Aの16個の事例を表すことができ及び/又は他の方式で実装し得、第1のORゲート866Aは、第1のORゲート866Aの16個の事例を表すことができ及び/又は他の方式で実装し得る。
【0374】
第1のマルチプレクサ858Aは、ADP_ADDR_E2_DP0を受け取るための第1の入力を有し、これは、
図3A~
図3DのE2調停ステージからDP0インタフェースによって要求されたアドレスを表す。第1のマルチプレクサ858Aは、SNP_ADDR_E2_DP0を受け取るための第2の入力を有し、これは、
図3A~
図3DのE2調停ステージからスヌープインタフェースによって要求されたスヌープアドレスを表す。第1のマルチプレクサ858Aは、SNP_ADDR_EN_DP0を受け取るための選択入力を有し、これは、アサートされると、第1のマルチプレクサ858Aを呼び出して第2の入力を選択し得るスヌープインタフェースからのイネーブル信号を表す。第1のマルチプレクサ858Aの出力が、第1のコンパレータ850の入力に結合される。例えば、第1のコンパレータ850の各々は、第1のマルチプレクサ858Aの出力からのアドレスを、VCT RAM800のセットのうちの対応する1つと比較し得る。このような例では、第1のコンパレータ850のうちの第1のコンパレータが、ADP_ADDR_E2_DP0に含まれるアドレスをVCT_ADDR[0]に格納されたアドレスと比較し得る。幾つかのそのような例では、第1のコンパレータ850のうちの第1のコンパレータは、第1のマルチプレクサ858Aからのアドレスが、VCT_ADDR[0]に格納されたアドレスに一致することに応答して、論理1を出力及び/又は他の方式で生成され得る。
【0375】
第1のマルチプレクサ858Aの出力は、第3のコンパレータ870Aの第1の入力に結合される。例示のDP0読み出し有限状態機械(FSM)(READ_FSM_DP0)873の出力及び/又は、例示のDP0書き込み有限状態機械(WRITE_FSM_DP0)874の出力が、第3のコンパレータ870Aの第2の入力に結合される。DP0読み出し有限状態機械873及びDP0書き込み有限状態機械874は、
図5のスカラーインタフェース502からのデータに対して論理を実行するハードウェア実装有限状態機械である。例えば、DP0読み出し有限状態機械873及び/又はDP0書き込み有限状態機械874は、WRM_TAG_UPDATE0、VTAG_WR_TAG0、及びVTAG_WR_SET0のうちの1つ又は複数を第3のコンパレータ870A及び/又は第4のコンパレータ872Aに送信し得る。DP0読み出し有限状態機械873及び/又はDP0書き込み有限状態機械874は、VTAG_WR_TAG0を、第2のアドレスエンコーダ論理回路856に含まれる第6の例示のコンパレータ872Bに送信し得る。WRM_TAG_UPDATE0、VTAG_WR_TAG0、及びVTAG_WR_SET0は、
図8Aに関連して上述されている。
【0376】
第1のデコーダ860Aは、4×16デコーダである。第1のデコーダ860AはVTAG_WR_SET0データを受け取るための入力を有し、VTAG_WR_SET0データは、スカラーインタフェース502から犠牲ストレージ218へのインフライトアドレスを表すことができる。第1のデコーダ860Aは、第1のインバータ862Aの入力に結合される出力を有する。第1のデコーダ860Aはインフライトアドレスをビットベクトルに変換し得、各ビットは、第1のインバータ862Aの16個の事例のうちの1つによって反転される。第1のインバータ862Aの出力が、第1のANDゲート864Aの第1の入力に結合される。第1のANDゲート864Aの第2の入力が、セット0(例えば、VCT_ADDR[0])を有する第1のコンパレータ850からのタグ比較の結果ビットと、第1のマルチプレクサ858Aの出力とに結合される。例えば、第1のANDゲート864Aの第2の入力は16ビットベクトルを表すことができるHIT_DP0データを受け取るように構成し得、各ビットはADP_ADDR_E2_DP0データが犠牲ストレージ218内でヒット(例えば、1のビット値)であるかミス(例えば、0のビット値)であるかに対応し得る。
【0377】
第1のANDゲート864Aの出力が、第1のORゲート866Aの第1の入力に結合される。第3のコンパレータ870Aの出力が、第1のORゲート866Aの第2の入力に結合される。第4のコンパレータ872Aの出力が、第1のORゲート866Aの第3の入力に結合される。第1のORゲート866Aの出力が、第1のエンコーダ868Aの入力に結合される。第1のエンコーダ868Aは、16×4エンコーダである。例えば、第1のエンコーダ868Aは、
図8AのVTAG_SET_DP0を表すことができるHIT_ADDR0データを生成し得る。このような例では、HIT_ADDR0が
図8Aの第1の出力データ838に対応し得る。
【0378】
第2のアドレスエンコーダ論理回路856は第2の例示のデコーダ860Bと、第2の例示のインバータ(例えば、論理ゲート、反転論理ゲート等)862Bと、第2の例示のANDゲート(例えば、論理ゲート、AND論理ゲート等)864Bと、第2の例示のORゲート(例えば、論理ゲート、OR論理ゲート等)866Bと、第2の例示のエンコーダ868Bと、第5の例示のコンパレータ870Bと、第6の例示のコンパレータ872Bとを含む。
【0379】
図8Bは、明瞭にするために、第2のANDゲート864B、第2のORゲート866B、第5のコンパレータ870B、及び第6のコンパレータ872Bの各1つの事例のみを示す。しかしながら、第2のANDゲート864B、第2のORゲート866B、第5のコンパレータ870B、及び第6のコンパレータ872Bの各々は、これらの構成要素の16個の事例を表すことができる。例えば、第2のANDゲート864Bは第2のANDゲート864Bの16個の事例を表すことができ、及び/又は他の方式で実装し得、第2のORゲート866Bは第2のORゲート866Bの16個の事例を表し得、及び/又は他の方式で実装し得る、などである。
【0380】
第2のアドレスエンコーダ論理回路856は、ADP_ADDR_E2_DP1を受け取る第1の入力を有し、ADP_ADDR_E2_DP1は、
図3A~
図3DのE2調停ステージからDP1インタフェースによって要求されたアドレスを表す。ADP_ADDR_E2_DP1は、第2のコンパレータ852の入力に結合される。例えば、第2のコンパレータ852の各々は、ADP_ADDR_E2_DP1に含まれるアドレスをVCT RAM800のセットの対応する1つと比較し得る。このような例では、第2のコンパレータ852のうちの第1のコンパレータが、ADP_ADDR_E2_DP1に含まれるアドレスをVCT_ADDR[0]に格納されたアドレスと比較し得る。このような幾つかの例において、第2のコンパレータ852の第1のコンパレータは、ADP_ADDR_E2_DP1に含まれるアドレスがVCT_ADDR[0]に格納されたアドレスに一致することに応答して、論理1を出力及び/又は生成し得る。
【0381】
ADP_ADDR_E2_DP1は、第5のコンパレータ870Bの第1の入力に結合される。例示のDP1読み出し有限状態機械(READ_FSM_DP1)875の出力及び/又は、例示のDP1書き込み有限状態機械(WRITE_FSM_DP1)876の出力が、第5のコンパレータ870Bの第2の入力に結合される。DP1読み出し有限状態機械875及びDP1書き込み有限状態機械876は、
図5のベクトルインタフェース504からのデータに対して論理を実行するハードウェア実装有限状態機械である。例えば、DP1読み出し有限状態機械875及び/又はDP1書き込み有限状態機械876は、WRM_TAG_UPDATE1、VTAG_WR_TAG1、及びVTAG_WR_SET1のうちの1つ又は複数を、第5のコンパレータ870B及び/又は第6のコンパレータ872Bに送信し得る。DP1読み出し有限状態機械875及び/又はDP1書き込み有限状態機械876は、VTAG_WR_TAG1を、第1のアドレスエンコーダ論理回路854に含まれる第4のコンパレータ872Aに送信し得る。WRM_TAG_UPDATE1、VTAG_WR_TAG1、及びVTAG_WR_SET1は、
図8Aに関連して上述されている。
【0382】
第2のデコーダ860Bは、4×16デコーダである。第2のデコーダ860BはVTAG_WR_SET1データを受け取るための入力を有し、VTAG_WR_SET1データは、ベクトルインタフェース504から犠牲ストレージ218へのインフライトアドレスを表すことができる。第2のデコーダ860Bは、第2のインバータ862Bの入力に結合される出力を有する。第2のデコーダ860Bはインフライトアドレスをビットベクトルに変換し得、各ビットは、第2のインバータ862Bの16個の事例のうちの1つによって反転される。第2のインバータ862Bの出力が、第2のANDゲート864Bの第1の入力に結合される。第2のANDゲート864Bの第2の入力が、セット0(例えば、VCT_ADDR[0])及びADP_ADDR_E2_DP1を有する第2のコンパレータ852からのタグ比較の結果ビットに結合される。例えば、第2のANDゲート864Bの第2の入力は、16ビットベクトルを表すことができるHIT_DP1データを受け取るように構成され得、各ビットはADP_ADDR_E2_DP1データが犠牲ストレージ218内でヒット(例えば、1のビット値)であるかミス(例えば、0のビット値)であるかに対応し得る。
【0383】
第2のANDゲート864Bの出力が、第2のORゲート866Bの第1の入力に結合される。第5のコンパレータ870Bの出力が、第2のORゲート866Bの第2の入力に結合される。第6のコンパレータ872Bの出力が、第2のORゲート866Bの第3の入力に結合される。第2のORゲート866Bの出力が、第2のエンコーダ868Bの入力に結合される。第2のエンコーダ868Bは、16×4エンコーダである。例えば、第2のエンコーダ868Bは、
図8AのVTAG_SET_DP1を表すことができるHIT_ADDR1データを生成し得る。このような例では、HIT_ADDR1が
図8Aの第2の出力データ840に対応し得る。
【0384】
例示の動作条件において、第1のアドレスエンコーダ論理回路854は、
図1のCPU102によって要求されたストア命令のための第1の読み出しアドレス(例えば、ADP_ADDR_E2_DP0)を受け取り得、第1の読み出しアドレスは
図3A~
図3DのE2パイプラインステージ(ARBITRATION)から受け取られる。第1のマルチプレクサ858Aが第1の入力を選択することに応答して、第1のマルチプレクサ858Aは、第1の読み出しアドレスを第1のコンパレータ850に送信し得る。第1のコンパレータ850は、読み出しアドレスをセット846のそれぞれ1つと比較し得る。第1のコンパレータ850のうちの第1のコンパレータが読み出しアドレスがセット846のうちの対応する1つに格納されたアドレスと一致すると判定した場合、第1のコンパレータ850のうちの第1のコンパレータは論理1をアサート及び/又は他の方式で出力し得、そうでない場合、第1のコンパレータ850のうちの第1のコンパレータは、論理0を出力する。したがって、第1のコンパレータ850は、比較に応答して、16ビットデータバス上に16ビット・ベクトルとしてHIT_DP0を生成し得る。例えば、16ビットベクトルはビットベクトルを表す信号の列(例えば、パルス列)の実装であり得る。第1のコンパレータ850は、HIT_DP0を第1のANDゲート864Aに送信し得る。
【0385】
第1のアドレスエンコーダ論理回路854及び/又は第2のアドレスエンコーダ論理回路856の一部は、キャッシュヒットミス変換論理である。例えば、第1のANDゲート864A、第3のコンパレータ870A、及び/又は第4のコンパレータ872Aは、キャッシュヒットミス変換論理の例示の実装とし得る。そのような例では、第2のANDゲート864B、第5のコンパレータ870B、及び/又は第6のコンパレータ872Bはキャッシュヒットミス変換論理の例示の実装とし得る。
【0386】
第1のANDゲート864Aはヒット(例えば、キャッシュヒット)をミス(例えば、キャッシュミス)に変換するかどうかを判定するように構成される。例えば、新たなアドレス(VTAG_WR_SET0)は、第1の読み出しアドレスがE2パイプラインステージ中に処理されている一方で、
図3A~
図3DのE3パイプラインステージ中に犠牲ストレージ218に書き込まれ得る。このような例では、第1のデコーダ860Aが新しいアドレスを16ビットの値に変換し得、これは第1のインバータ862Aによって反転され得る。第1のインバータ862Aは、反転された16ビット値を第1のANDゲート864Aの第1の入力に送信し得る。第1のANDゲート864Aは、VTAG_WR_SET0がHIT_DP0内のアドレスに一致しないことに応答して論理1をアサートし得、そのため、キャッシュヒットをキャッシュミスに変換しない。他の例において、第1のANDゲート864Aは、VTAG_WR_SET0がHIT_DP0におけるアドレスと一致することに応答して論理ゼロを出力し得、そのため、ADP_ADDR_E2_DP0で要求されたアドレスが上書きされてそのアドレスでもはや利用できないので、キャッシュヒットをキャッシュミスに変換し得る。
【0387】
例示の動作条件において、第3のコンパレータ870A及び第5のコンパレータ870Bは、キャッシュミスをキャッシュヒットに変換するように構成され得る。例えば、第3のコンパレータ870Aは、E2パイプラインステージ中に要求されたVCT RAM800内の第1の読み出しアドレス(ADP_ADDR_E2_DP0)が、VTAG_WR_TAG0によって表されるE3パイプラインステージに書き込まれていることを判定し得る。そのような例では、第3のコンパレータ870Aは、ADP_ADDR_E2_DP0がVTAG_WR_TAG0に一致することに応答して論理1をアサートし得、そのため、キャッシュミスをキャッシュヒットに変換し得、ADP_ADDR_E2_DP0アドレスがE3パイプラインステージ中に読み出されるときにデータが利用可能になるので、HIT_ADDR0がVTAG_WR_SET0で更新され得る。
【0388】
例示の動作条件において、第4のコンパレータ872A及び第6のコンパレータ872Bがキャッシュミスをキャッシュヒットに変換するように構成され得る。例えば、第4のコンパレータ872Aは、E2パイプラインステージ中に要求されたVCT RAM800内の第1の読み出しアドレス(ADP_ADDR_E2_DP0)が、VTAG_WR_TAG1によって表されるベクトルインタフェース504によってE3パイプラインステージに書き込まれていることを判定し得る。このような例では、第4のコンパレータ872Aは、ADP_ADDR_E2_DP0がVTAG_WR_TAG1に一致することに応答して論理1をアサートし得、そのため、キャッシュミスをキャッシュヒットに変換し、ADP_ADDR_E2_DP0アドレスがE3パイプラインステージ中に読み出されるときにデータが利用可能になるので、HIT_ADDR0がVTAG_WR_SET1で更新され得る。
【0389】
例示の動作条件において、第1のORゲート866A及び第2のORゲート866Bが、第1のエンコーダ868A又は第2のエンコーダ868Bのうちの対応する1つへの出力を生成するように構成され得る。例えば、第1のORゲート866Bは、キャッシュミス(例えば、0の16ビット値)又はキャッシュヒット(例えば、キャッシュヒットのアドレスの16ビット値)を表す16ビットのベクトルを送信し得る。そのような例では、第1のエンコーダ868Aは、第1のORゲート866Aからの16ビット値を4ビットアドレスとして符号化し得、そのため、HIT_ADDR0を生成し得る。このような例示の動作は、第2のORゲート866B、第2のエンコーダ868B、及び/又はより一般的には第2のアドレスエンコーダ論理回路856に適用可能である。
【0390】
デュアルデータ経路を備えるマルチバンク犠牲キャッシュのための例示の方法、装置、システム、及び製品が本明細書で記載されている。更なる例及びそれらの組み合わせには、以下のものが含まれる。
【0391】
例1はキャッシュシステムを含み、キャッシュシステムは、データを格納するように動作可能なバンクと、メモリ動作を並列に受け取るように動作可能なポートとを含むストレージ要素を含み、メモリ動作の各々はそれぞれのアドレスを有し、複数のコンパレータは、コンパレータの各々が、ポートのそれぞれのポートとバンクのそれぞれのバンクとに結合され、それぞれのポートによって受け取られたそれぞれのメモリ動作のそれぞれのアドレスがそれぞれのバンクに格納されたデータに対応するかどうかを判定するように動作可能であるように、結合される。
【0392】
例2は、例1のキャッシュシステムを含み、犠牲キャッシュデータを含む犠牲キャッシュを更に含み、データは、犠牲キャッシュデータに対応するタグデータである。
【0393】
例3は、例1のキャッシュシステムを含み、メモリ動作は、キャッシュデータを含むキャッシュを更に含む第1のメモリ動作を含み、データはキャッシュデータに対応するタグデータであり、複数のコンパレータの第1のコンパレータは、ストレージ要素内のデータに対応する第1のメモリ動作に関連する第1のデータに基づいてキャッシュヒットを検出することに応答して信号を生成する。
【0394】
例4は、例1のキャッシュシステムを含み、複数のコンパレータが複数の第1のコンパレータである。このキャッシュシステムは更に、デコーダ入力とデコーダ出力とを有するデコーダを含むアドレスエンコーダ論理回路であって、デコーダ入力が、中央処理装置のスカラーインタフェースに関連する第1の有限状態機械に結合されている、アドレスエンコーダ論理回路と、それぞれのインバータ入力とそれぞれのインバータ出力とを有する複数のインバータであって、インバータ入力がデコーダ出力に結合されている、複数のインバータと、それぞれの第1の入力とそれぞれの第2の入力とを有する複数のAND論理ゲートであって、第1の入力のそれぞれがインバータ出力のそれぞれに結合されており、第2の入力のそれぞれが複数の第1のコンパレータのそれぞれの出力の1つに結合されている、複数のAND論理ゲートと、複数の第1のコンパレータの出力のそれぞれと第1の有限状態機械とに結合される複数の第2のコンパレータと、複数の第1のコンパレータのそれぞれの出力と中央処理装置のベクトルインタフェースに関連する第2の有限状態機械とに結合される複数の第3のコンパレータとを含む。
【0395】
例5は、例4のキャッシュシステムを含み、複数のAND論理ゲートのうちの第1のAND論理ゲートは、スカラーインタフェースに関連する第1のアドレスが、キャッシュヒットに関連する第2のアドレスに一致することに応答して、キャッシュヒットをキャッシュミスに変換するために論理行信号を出力する。
【0396】
例6は、例4のキャッシュシステムを含み、複数の第2のコンパレータのうちの第1のコンパレータは、スカラーインタフェースに関連する第1のアドレスが、キャッシュミスに関連する第2のアドレスに一致することに応答して、キャッシュミスをキャッシュヒットに変換するために論理高信号を出力する。
【0397】
例7は、例4のキャッシュシステムを含み、複数の第3のコンパレータのうちの第1のコンパレータは、ベクトルインタフェースに関連する第1のアドレスが、キャッシュミスに関連する第2のアドレスに一致することに応答して、キャッシュミスをキャッシュヒットに変換するために論理高信号を出力する。
【0398】
例8は、例4のキャッシュシステムを含み、アドレスエンコーダ論理回路がそれぞれの第3の入力と、それぞれの第4の入力と、それぞれの第5の入力とを有する複数のOR論理ゲートであって、第3の入力が複数のAND論理ゲートの出力のそれぞれ1つに結合され、第4の入力が複数の第2のコンパレータの出力のそれぞれ1つに結合され、第5の入力が複数の第3のコンパレータの出力のそれぞれ1つに結合される、複数のOR論理ゲートと、エンコーダ入力及びエンコーダ出力を有するエンコーダとを含み、エンコーダ入力は複数のOR論理ゲートの出力に結合され、エンコーダ出力はマルチプレクサの入力に結合される。
【0399】
例9は、例1のキャッシュシステムを含み、複数のコンパレータが複数の第1のコンパレータである。このキャッシュシステムは更に、デコーダ入力とデコーダ出力とを有するデコーダ論理回路であって、デコーダ入力が中央処理装置のベクトルインタフェースに関連する第1の有限状態機械に結合されるデコーダ論理回路と、それぞれのインバータ入力とそれぞれのインバータ出力とを有する複数のインバータであって、インバータ入力がデコーダ出力に結合される、複数のインバータと、それぞれの第1の入力とそれぞれの第2の入力とを有する複数のAND論理ゲートであって、第1の入力のそれぞれ1つがインバータ出力のそれぞれ1つに結合され、第2の入力のそれぞれ1つが複数の第1のコンパレータの出力のそれぞれ1つに結合される、複数のAND論理ゲートと、複数の第1のコンパレータの出力のそれぞれと第1の有限状態機械とに結合される複数の第2のコンパレータと、複数の第1のコンパレータのそれぞれの出力と中央処理装置のベクトルインタフェースに関連する第2の有限状態機械とに結合される複数の第3のコンパレータとを含む。
【0400】
例10は犠牲キャッシュシステムを含み、犠牲キャッシュシステムは、第1のデータバンクを含む犠牲キャッシュストアキューと、犠牲キャッシュストアキューに結合される犠牲ストレージとを含み、犠牲ストレージは、第1のデータバンクとは異なる第2のデータバンクを含む。
【0401】
例11は、例10の犠牲キャッシュシステムを含み、第1のデータバンク又は第2のデータバンクのうちの少なくとも1つが16個のデータバンクを含む。
【0402】
例12は、例10の犠牲キャッシュシステムを含み、第1のデータバンクは、各々が1バイトのデータ幅を有する8つのアドレスを有する第1のデータバンクを含み、第1のデータバンクは、64ビットを格納するように構成される。
【0403】
例13は、例10の犠牲キャッシュシステムを含み、第2のデータバンクは、各々が1バイトのデータ幅を有する8つのアドレスを有する第2のデータバンクを含み、第2のデータバンクは、64ビットを格納するように構成される。
【0404】
例14は、例10の犠牲キャッシュシステムを含み、第1のデータバンクのそれぞれ1つが第2のデータバンクのそれぞれ1つに結合される。
【0405】
例15は、犠牲キャッシュ内のキャッシュヒットを識別する方法を含み、この方法は、プロセッサの第1のインタフェースから第1の読み出しアドレスを受け取ることと、プロセッサの第2のインタフェースから第2の読み出しアドレスを受け取ることと、第1の読み出しアドレスと第2の読み出しアドレスとをマルチバンク犠牲キャッシュタグメモリのデータバンクと比較することと、第1の読み出しアドレス又は第2の読み出しアドレスの少なくとも一方をデータバンクの第1のデータバンクにマップすることに応答して、キャッシュヒットを識別することと、犠牲キャッシュに格納されたキャッシュデータの犠牲キャッシュアドレスを表すキャッシュヒットアドレスを出力することとを含む。
【0406】
例16は、例15の方法を含み、第1のインタフェースはスカラーインタフェースであり、第2のインタフェースはベクトルインタフェースである。
【0407】
例17は、例15の方法を含み、キャッシュヒットアドレスを識別することに応答して、キャッシュヒットアドレスを、第1のインタフェースに関連する有限状態機械から受け取られた第1のアドレスと比較することであって、第1のアドレスが、前のパイプラインステージで犠牲キャッシュに書き込まれたアドレスを表す、比較することと、キャッシュヒットアドレスが第1のアドレスに一致することに応答して、キャッシュヒットをキャッシュミスに変換することとを更に含む。
【0408】
例18は、例15の方法を含み、キャッシュヒットを識別することに応答して、キャッシュヒットアドレスを、第2のインタフェースに関連する有限状態機械から受け取られた第1のアドレスと比較することであって、第1のアドレスが、前のパイプラインステージで犠牲キャッシュに書き込まれたアドレスを表す、比較することと、キャッシュヒットアドレスが第1のアドレスに一致することに応答して、キャッシュヒットをキャッシュミスに変換することとを更に含む。
【0409】
例19は、例15の方法を含み、第1の読み出しアドレス又は第2の読み出しアドレスの少なくとも1つをデータバンクのいずれかにマップしないことに応答して、キャッシュミスを識別することと、第1の読み出しアドレスを、第1のインタフェースに関連する有限状態機械から受け取られた第1のアドレスと比較することであって、第1のアドレスが、後続のパイプラインステージで犠牲キャッシュに書き込まれるアドレスを表す、比較することと、第1の読み出しアドレスが第1のアドレスに一致することに応答して、キャッシュミスをキャッシュヒットに変換することを更に含む。
【0410】
例20は、例15の方法を含み、第1の読み出しアドレス又は第2の読み出しアドレスの少なくとも1つをデータバンクのいずれかにマップしないことに応答して、キャッシュミスを識別することと、第2の読み出しアドレスを、第2のインタフェースに関連する有限状態機械から受信した第1のアドレスと比較することであって、第1のアドレスが、後続のパイプラインステージで犠牲キャッシュに書き込まれるアドレスを表す、比較することと、第2の読み出しアドレスが第1のアドレスに一致することに応答して、キャッシュミスをキャッシュヒットに変換することを更に含む。
【0411】
例21は、例15の方法を含み、第1の読み出しアドレス及び第2の読み出しアドレスをマルチバンク犠牲キャッシュタグメモリのデータバンクと比較することが、実質的に並列に実行される。
【0412】
犠牲キャッシュシステムにおける割り当てのための方法及び装置
【0413】
犠牲キャッシュシステムを含むデータキャッシュアーキテクチャは、メインキャッシュが犠牲を作成する必要があるときに、メインキャッシュ(例えば、メインストレージ214)が、犠牲キャッシュ(例えば、犠牲ストレージ218)にデータを割り当てることを可能にする。例えば、入来する命令が読み出しミスであるとき、メインキャッシュは、読み出しミスのデータのための余裕をつくる必要がある。メインキャッシュは、読み出しミスのアドレスによって示される1つのロケーションにのみ読み出しミスを格納できるように、ダイレクトマップキャッシュであり得る。メインキャッシュは、データがダーティであるとき、犠牲キャッシュに移動される読み出しミスロケーションのデータを割り当て得、そのロケーションのデータがクリーンであるとき、より高いレベルのメモリロケーションに送出されるべき読み出しミスロケーションのデータを退出させ得る。例えば、メインキャッシュコントローラは、犠牲にされるべきメインストレージ内の変更された(例えば、ダーティである)ラインと、退去されるべきメインストレージ内の変更されていない(例えば、クリーンである)ラインとを選択し得る。ダーティである及び/又は変更されたデータラインは、CPU102によって更新されたデータである。例えば、メインストレージ214内のキャッシュラインが、現在の状態にのみ存在し、メインメモリ内の値から変更された場合(例えば、拡張メモリ106内のデータの読み出しにフラグが立てられるか、又はそれが最新でないか有効でないために許可されるように)、キャッシュラインはダーティであり及び/又は変更され、従って、割り当ての候補となる(例えば、犠牲化)。例示のMESI RAM300は、キャッシュライン状態(例えば、クリーン、ダーティ、共有、排他的など)を格納及び/又は追跡し、従って、メインストレージ214内のダーティラインの識別をイネーブルにし及び/又は可能にする。
【0414】
メインストレージの割り当てポリシーが、メモリアドレスのためのデータが、より高いレベルのキャッシュに配置されていないため、代替として、より高いレベルのキャッシュに配置されているが古いために、変更されたラインを犠牲にすることを選択するようにメインキャッシュコントローラに指令する場合がある。このような割り当てポリシーは、メインキャッシュコントローラに、メインストレージ内のクリーンなライン及び/又は共有ラインを割り当てない/犠牲にしないように命令してもよい。なぜなら、そのラインは、既により高いレベルのキャッシュに配置されているメモリアドレス(例えば、L2キャッシュ、L3キャッシュ、拡張メモリなど)のデータを含むからである。
【0415】
しかしながら、このような割り当てポリシーは、L1キャッシュ110内にダーティであり及び/又は変更されたラインを割り当てるだけの場合に、待ち時間(例えば、要求されたデータをCPUが検索するのに要する時間の増加)を生成する。この待ち時間は、より高いレベルのメモリから取得するために余分なクロックサイクルを使用した結果である。例えば、メインストレージ214と犠牲ストレージ218との並列接続のために、より高いレベルのストレージからデータを検索することは、犠牲ストレージ218からデータを検索することよりも多くの時間を要する。
【0416】
本明細書において説明する例では、割り当てポリシーが、メインキャッシュ(例えば、メインストレージ214)から犠牲キャッシュ(例えば、犠牲ストレージ218)にキャッシュラインを割り当てる待ち時間を低減する。例えば、L1キャッシュ110のアーキテクチャ(例えば、メインストレージ214と犠牲ストレージ218との間の並列接続)に起因して、割り当てポリシーは、メインキャッシュコントローラ222がメインストレージ214内の任意のキャッシュライン(例えば、クリーン及び/又はダーティ)を犠牲ストレージ218に割り当てることを可能にする。メインストレージ214及び犠牲ストレージ218を並列に構成することにより、犠牲ストレージ218は、メインストレージ214の拡張として働くことができる。したがって、犠牲ストレージ218は、犠牲ラインを格納するためのロケーションを提供することに加えて、任意のキャッシュライン(例えば、クリーン及び/又はダーティ)をメインストレージ214から犠牲ストレージ214に移動させることによって、メインストレージ214に付加的な連想度を提供することもできる。例えば、犠牲ストレージ218とメインストレージ214は、CPU102によって並列に(例えば、同時に)アクセスされるので、クリーンなラインがアクセスされるべきであり、それが犠牲ストレージ218に割り当てられた場合、データのクリーンラインにアクセスするための待ち時間は影響を受けない。
【0417】
例示の動作において、メインキャッシュコントローラ222は、CPUインタフェース202(例えば、スカラーインタフェース502及び/又はベクトルインタフェース504)から命令(例えば、メモリ動作)を取得する。メインキャッシュコントローラ222は、命令に対応するメインタグRAMアクセス204から結果を取得する。例えば、メインタグRAMアクセス204は、命令内のアドレスがタグRAM208内のアドレスと一致するか否かを判定し、その結果をメインキャッシュコントローラ222に提供する。幾つかの例において、メインキャッシュコントローラ222は、メインタグRAMアクセス204からの命令及び結果に基づいて、メインストレージ214が、データを犠牲にすべきである及び/又はデータを犠牲ストレージ218に割り当てるべきであると判定する。例えば、メインキャッシュコントローラ222は、命令が読み出し動作であるか否か、及び読み出し動作がミスであるか否かを判定する(例えば、メインタグRAMアクセス204の結果に基づいて判定される)。読み出し動作がミスである場合、メインキャッシュコントローラ222は、メインストレージ214が犠牲ストレージ218における割り当てのためにデータのライン、ウェイ、ブロック、スロット等を割り当てる必要があると判定する。
【0418】
幾つかの例において、メインキャッシュコントローラ222は、読み出しミス動作のアドレスに対応するラインを割り当てる。例えば、読み出し動作がアドレスAからデータを読み出したいが、メインストレージ214がそのアドレスロケーションに対して異なるデータ(例えば、アドレスA’)を格納する場合、メインキャッシュコントローラ222は、アドレスAのデータをメインストレージ214の1つのロケーション(例えば、アドレスA)にのみ格納し得るので、アドレスA’のデータを除去しなければならない。メインキャッシュコントローラ222は、アドレスA’にマップされ、アドレスA’のデータを犠牲ストレージ218に割り当てる、ダイレクトマップキャッシュ(例えば、メインストレージ214)内のロケーションを識別する。したがって、読み出し動作は、アドレスAのデータをメインストレージ214に格納し得る。
【0419】
データを割り当てるための製造の例示の方法、装置、システム、及び製品が本明細書において記載される。更なる例及びそれらの組み合わせには、以下のものが含まれる。
【0420】
例1は装置を含み、この装置は、第1のキャッシュストレージと、第2のキャッシュストレージと、第1のキャッシュストレージと第2のキャッシュストレージとに結合されるキャッシュコントローラとを含み、キャッシュコントローラは、アドレスを特定するメモリ動作を受け取り、アドレスに基づいて、メモリ動作が、第1のキャッシュストレージからのデータの第1のセットを退去させるべきと判定し、データの第1のセットが拡張メモリに対して変更されていないと判定し、データの第1のセットを第2のキャッシュストレージに格納させるように動作可能である。
【0421】
例2は、例1の装置を含み、キャッシュコントローラは、アドレスの直接マップされたロケーションに対応する第1のキャッシュストレージ内の部分を識別するためのものである。
【0422】
例3は、例1の装置を含み、キャッシュコントローラは、第2のメモリ動作のデータのための空間をつくるために、データの第1のセットを第2のキャッシュストレージに割り当てるためのものである。
【0423】
例4は、例1の装置を含み、キャッシュコントローラは、第2のアドレスを特定する第2のメモリ動作を受け取り、第2のアドレスに基づいて、第2のメモリ動作が第1のキャッシュストレージからデータの第2のセットを退去させるべきと判定し、データの第2のセットが拡張メモリに対して変更されていると判定し、データの第2のセットを第2のキャッシュストレージに格納させるためのものである。
【0424】
例5は、例1の装置を含み、キャッシュコントローラは、退去中に、データの第1のセット上のストアキューの未処理トランザクションを実施する。
【0425】
例6は、例1の装置を含み、第2のキャッシュストレージは、第2のキャッシュストレージがデータの第1のセットを格納するとき、第1のキャッシュストレージに連想度を提供するためのものである。
【0426】
例7は、例1の装置を含み、第2のキャッシュストレージは犠牲キャッシュストレージである。
【0427】
例8は方法を含み、この方法は、アドレスを特定するメモリ動作を受け取ることと、アドレスに基づいて、メモリ動作が第1のキャッシュストレージからのデータの第1のセットを退去させるべきと判定することと、データの第1のセットが拡張メモリに対して変更されていないと判定することと、データの第1のセットを第2のキャッシュストレージに格納させることとを含む。
【0428】
例9は、例8の方法を含み、更に、アドレスの直接マップされたロケーションに対応する第1のキャッシュストレージ内の部分を識別することを含む。
【0429】
例10は、例8の方法を含み、更に、第2のメモリ動作のデータのための空間をつくるためにデータの第1のセットを第2のキャッシュストレージに割り当てることを含む。
【0430】
例11は、例8の方法を更に含み、第2のアドレスを特定する第2のメモリ動作を受け取ることと、第2のアドレスに基づいて、第2のメモリ動作が第1のキャッシュストレージからのデータの第2のセットを退去させるべきと判定することと、データの第2のセットが拡張メモリに対して変更されていると判定することと、データの第2のセットを第2のキャッシュストレージに格納させることとを含む。
【0431】
例12は、例8の方法を含み、更に、退去の間に、データの第1のセット上のストアキューの未処理トランザクションを実施することを含む。
【0432】
例13は、例8の方法を含み、第1のキャッシュストレージから割り当てられたデータの第1のセットを格納することは、第1のキャッシュストレージに連想度を提供することを含む。
【0433】
例14は、例8の方法を含み、第2のキャッシュストレージは犠牲キャッシュストレージである。
【0434】
例15はシステムを含み、このシステムは、アドレスを特定するメモリ動作を出力する中央処理装置と、中央処理装置に結合されるキャッシュとを含み、キャッシュは、中央処理装置からメモリ動作を取得するために動作可能であり、第1のキャッシュストレージと、第2のキャッシュストレージと、第2のキャッシュストレージと、キャッシュコントローラとを更に含み、キャッシュコントローラは、メモリ動作のアドレスに基づいて、メモリ動作が第1のキャッシュストレージからデータの第1のセットを退去させるべきと判定し、データの第1のセットが拡張メモリに対して変更されていないと判定し、データの第1のセットを第2のキャッシュストレージに格納させるためのものである。
【0435】
例16は、例15のシステムを含み、キャッシュは更に、中央処理ユニット、第1のキャッシュストレージ、及びキャッシュコントローラに接続される第1のタグ・ランダムアクセスメモリと、中央処理ユニット、第2のキャッシュストレージ、及びキャッシュコントローラに接続される第2のタグ・ランダムアクセスメモリとを含む。
【0436】
例17は、例15のシステムを含み、キャッシュコントローラは、第2のメモリ動作の第2のアドレスに基づいて、第2のメモリ動作が第1のキャッシュストレージからのデータの第2のセットを退去させるべきと判定し、データの第2のセットが拡張メモリに対して変更されていると判定し、データの第2のセットが第2のキャッシュストレージに格納されるようにするものである。
【0437】
例18は、例15のシステムを含み、キャッシュコントローラは、退去中に、データの第1のセット上のストアキューの未処理トランザクションを実施するためのものである。
【0438】
例19は、例15のシステムを含み、第1のキャッシュストレージと第2のキャッシュストレージは並列に、中央処理装置に接続される。
【0439】
例20は、例15のシステムを含み、第1のキャッシュストレージは、ダイレクトマップキャッシュであり、第2のキャッシュストレージは、フルアソシアティブキャッシュであり、ダイレクトマップキャッシュとフルアソシアティブキャッシュは並列に中央処理装置に結合される。
【0440】
並列データ経路を有するコヒーレント犠牲キャッシュにおける読み出し・変更・書き込みサポートを容易にするための方法及び装置
【0441】
メモリとコヒーレントに動作するメモリシステムを容易にするため、従って、各処理要素のための対応するメモリロケーションが同じ格納データを含むメモリシステムを容易にするために、犠牲ストレージを含むことを防止する幾つかの例示のシステムがある。本明細書において説明する例は、犠牲ストレージ(例えば、犠牲ストレージ218)がシステム内のメモリコヒーレンス動作で動作し得る完全にコヒーレントなメモリシステムを容易にすることによって、この課題を克服する。
【0442】
データキャッシュ108上でコヒーレンシーを提供するために、例示のスカラーインタフェース502(例えば、64ビット幅のインタフェース)と例示のベクトルインタフェース504(例えば、512ビット幅のインタフェース)は、L1キャッシュ110の犠牲ストレージ218に含まれる。このようにして、L1キャッシュ110の犠牲ストレージ218は、CPU102からの2つのデータ経路を処理し得る。
【0443】
本明細書において説明する幾つかの例において、スヌープアドレス構成要素506が、MESI RAM300内の犠牲ストレージ218内の全てのキャッシュラインのMESI状態を格納するために用いられる。各キャッシュラインのMESI状態をMESI RAM300に格納することにより、犠牲キャッシュシステムはコヒーレンシーをサポートする。
【0444】
また、例示のスヌープアドレス構成要素506は、より高いレベルのメモリキャッシュメモリ(例えば、L2データキャッシュ112)から例示のスヌープ要求を取得し、このようなスヌープ要求をタグRAM210及び比較論理306cに送信する。幾つかの例において、スヌープアドレス構成要素506は、タグRAM210へのアドレス読み出し命令をトリガする。例えば、L2データキャッシュ112がCPU102からの読み出し要求で要求されたデータを識別できない場合、L2データキャッシュ112は、タグRAM210内のメモリアドレスの読み出し要求を実行しようと試みるために、スヌープアドレス構成要素506を下位レベルのL1データキャッシュ110に送信する。また、スヌープアドレス構成要素506は、読み取ったアドレスを比較論理306cに提供する。ミスが識別された場合(例えば、タグRAM210に発行された読み出しがミスを返す場合)、読み出しが失敗したことを示す適切なスヌープ応答が、生成され、スヌープアドレス構成要素506を生成したより高いレベルのデータキャッシュ(例えば、L2データキャッシュ112)に送信される。
【0445】
代替として、ヒットが識別された場合(例えば、タグRAM210に発行された読み出しがヒットを戻す場合)、MESI RAM300内の対応するラインの状態が読み出され、例示のアドレスエンコーダ326cは、データを取得する際に犠牲ストレージ218が使用するためのアドレス値を生成する。したがって、読み出し要求が成功したことを示す適切な応答が、生成され、スヌープ応答としてスヌープアドレス構成要素506(例えば、L2データキャッシュ112)を生成したより高いレベルのデータキャッシュに戻される。本明細書において説明する例では、スヌープ応答は、タグRAM210内のアドレスに対応する犠牲ストレージ218内のデータを含む。
【0446】
例示の動作において、対応するストアキュー(例えば、犠牲キャッシュストアキュー216)は、スヌープアドレスを介して読み出されているアドレスへの書き込み命令を処理していてもよい。したがって、犠牲ストレージ218がスヌープ要求を処理している間(例えば、スヌープアドレス構成要素506がスヌープ要求を取得したことに応答してスヌープ要求が処理されている間)、犠牲キャッシュストアキュー216は、犠牲キャッシュストアキュー216からのデータ(例えば、ラッチ402eに格納されたデータ)を応答マルチプレクサ508に転送する。このようにして、スヌープアドレス、及び犠牲キャッシュストアキュー216から取得された任意の最近更新されたアドレスに起因する、ベクトルインタフェース504によって取得された任意の状態変化が、より高いレベルのデータキャッシュ(例えば、L2データキャッシュ112)に転送される。
【0447】
図5に図示されるトポロジーでは、このようなスヌープ応答及び/又は後続のCPU102動作がより高いレベルのメモリコントローラに発行された場合に、犠牲キャッシュコントローラ224が、あり得るスヌープ応答及び/又は後続のCPU102動作を適切に順序付けるのに充分な時間を提供するために、コヒーレンシーパイプラインは犠牲キャッシュパイプラインよりも長い。
【0448】
本明細書において説明される例では、L1データキャッシュ110の犠牲ストレージ218は、キャッシュラインの追跡が要求された場合に、より高いレベルのキャッシュコントローラにタグ更新を発行し得る。このようにして、犠牲ストレージ218は、キャッシュラインの追跡を容易にして、排他的キャッシュ要素と変更されたキャッシュ要素とを区別し得る。
【0449】
本明細書において説明する例では、L1データキャッシュ110の犠牲ストレージ218は、グローバル・コヒーレンス動作がフルアソシアティブキャッシュ上で処理することを可能にし、セットに基づいてタグRAM208にわたって反復することによって、グローバル・コヒーレンス動作をサポートする。
【0450】
上述の動作はL1データキャッシュ110に関連して説明されるが、上述の動作及び/又は要素のいずれかが、L2データキャッシュ112、L3データキャッシュ114、及び/又は、データキャッシュ108内の任意の付加的なレベルデータキャッシュのいずれか上で実装され得る。
【0451】
並列データ経路を有するコヒーレント犠牲キャッシュにおける読み出し・変更・書き込みのサポートを容易にするための例示の方法、装置、システム、及び製品が本明細書において記載される。更なる例及びそれらの組み合わせには、以下のものが含まれる。
【0452】
例1は装置を含み、装置は、第1のインタフェース及び第2のインタフェースを介して中央処理装置に結合されるように構成されるランダムアクセスメモリであって、スヌープインタフェースを介して読み出すための第1のアドレスを示す読み出し要求を取得するように構成されるランダムアクセスメモリと、ランダムアクセスメモリに結合されるアドレスエンコーダであって、ランダムアクセスメモリが読み出し要求のヒットを示すときに、第1のアドレスに基づいて犠牲キャッシュに対応する第2のアドレスを生成するアドレスエンコーダと、犠牲キャッシュの第2のアドレスから取得されたデータを含む応答を送信するために犠牲キャッシュに結合されるマルチプレクサとを含む。
【0453】
例2は、例1の装置を含み、読み出し要求はレベル2データキャッシュによって送信される。
【0454】
例3は、例1の装置を含み、マルチプレクサは犠牲キャッシュストレージキューに結合されるように構成され、マルチプレクサは第2のアドレスに書き込まれる値を示す入力データを犠牲キャッシュストレージキューから取得する。
【0455】
例4は、例3の装置を含み、マルチプレクサは、犠牲キャッシュストレージキューからの入力データを含む応答を送信するように構成される。
【0456】
例5は、例1の装置を含み、ランダムアクセスメモリは、タグ・ランダムアクセスメモリである。
【0457】
例6は、例1の装置を含み、犠牲キャッシュはマルチバンクメモリである。
【0458】
例7は、例1の装置を含み、第1のインタフェースはスカラーインタフェースであり、第2のインタフェースはベクトルインタフェースである。
【0459】
例8は、例7の装置を含み、スカラーインタフェースは64ビット幅のインタフェースであり、ベクトルインタフェースは512ビット幅のインタフェースである。
【0460】
例9はシステムを含み、このシステムは、コントローラと、第1のメモリと、第1のメモリからスヌープ要求を取得するように構成される第2のメモリとを含み、第2のメモリは、スヌープ要求に応答してランダムアクセスメモリの読み出し要求を実行し、ランダムアクセスメモリが読み出し要求のヒットを示すとき、犠牲キャッシュに対応する、犠牲キャッシュ読み出しに用いられるアドレスを生成し、犠牲キャッシュのアドレスから取得されたデータを含む応答を第2のメモリに送信するように構成される。
【0461】
例10は、例9のシステムを含み、第1のメモリはレベル2キャッシュメモリであり、第2のメモリはレベル1キャッシュメモリである。
【0462】
例11は、例9のシステムを含み、第2のメモリは、犠牲キャッシュストレージキューに結合されるように構成されるマルチプレクサを含み、マルチプレクサは、第2のメモリ内の犠牲キャッシュのアドレスに書き込まれる値を示す入力データを犠牲キャッシュストレージキューから取得するためのものである。
【0463】
例12は、例11のシステムを含み、マルチプレクサは、犠牲キャッシュストレージキューからの入力データを含む応答を送信するように構成される。
【0464】
例13は、例9のシステムを含み、第2のメモリは、スカラーインタフェース及びベクトルインタフェースを介してコントローラに結合され、第2のメモリは、スヌープインタフェースを介して第1のメモリに結合される。
【0465】
例14は、例13のシステムを含み、スカラーインタフェースは64ビット幅のインタフェースであり、ベクトルインタフェースは512ビット幅のインタフェースである。
【0466】
例15は、例13のシステムを含み、コントローラは中央処理装置である。
【0467】
例16は方法を含み、この方法は、スヌープインタフェースを介して読み出す第1のアドレスを示す読み出し要求を取得することと、読み出し要求がヒットであるとき、第1のアドレスに基づいて犠牲キャッシュに対応する第2のアドレスを生成し、犠牲キャッシュの第2のアドレスから取得したデータを含む応答を生成することとを含む。
【0468】
例17は、例16の方法を含み、レベル2データキャッシュから読み出し要求を送信することを更に含む。
【0469】
例18は、例16の方法を含み、第2のアドレスに書き込まれるべき値を示す入力データを犠牲キャッシュストレージキューから得ることを更に含む。
【0470】
例19は、例18の方法を含み、犠牲キャッシュストレージキューからの入力データを含む応答を送信することを更に含む。
【0471】
例20は、例16の方法を含み、犠牲キャッシュがマルチバンクメモリである。
【0472】
デュアルデータ経路犠牲キャッシュシステムにおける退出のための方法及び装置
【0473】
犠牲キャッシュシステムにおいて、メインキャッシュ(例えば、メインストレージ214)は、メインキャッシュが新たなデータを格納する必要があるとき、キャッシュラインを犠牲キャッシュ(例えば、犠牲ストレージ218)に犠牲に(例えば、割り当て)する。メインキャッシュが犠牲を作成するとき、置換ポリシー(例えば、置換ポリシー構成要素308)は、その犠牲が犠牲キャッシュ(例えば、犠牲ストレージ218)のどこに格納され得るかを判定する。幾つかの例において、犠牲キャッシュは満杯であり、そのため、データをより高いレベルのキャッシュメモリ(例えば、L2キャッシュ112、L3キャッシュ114、拡張メモリ106)に退出させる必要がある。犠牲キャッシュ(例えば、犠牲ストレージ218)はまた、書き込みミスが発生すると、データをより高いレベルのキャッシュメモリに退出させる。例えば、犠牲ストレージ218は、書き込みミスデータをバッファする書き込みミスバッファを含む。置換ポリシーでは、固定方式を用いて、犠牲キャッシュから退出させるデータを判定し得る。例えば、FIFO(First In First Out)方式、ランダム方式、LRU(Least Recently Used)方式などの退出方式である。しかしながら、このような退出方式は、2つ又はそれ以上のデータ経路がある場合に、犠牲キャッシュからのデータの退出を効率的に管理するようには構成されていない。
【0474】
例えば、FIFO方式は、犠牲キャッシュに最長時間存在していたデータのブロック(例えば、退出が初めて発生した場合はスロット0のデータ)を退出させる。デュアルデータ経路犠牲キャッシュシステム(例えば、
図5に示される犠牲キャッシュセクション)では、2つの入来CPUアクセス(例えば、命令)が両方ともミスであり及び/又は両方が命令を割り当てているとき、FIFO方式は機能しない。このような例では、犠牲キャッシュからの2セットが推論的にロックされておらず読み込まれていない場合、付加的なストールがつくられる。
【0475】
別の例において、メインストレージ214はアドレスAを格納し、犠牲ストレージ218はアドレスBを格納する。CPU102は2つの要求を送る。即ち、CPU102は、DP0を利用してアドレスA’のデータを読み出すように要求し、CPU102は、DP1を利用してアドレスBからデータを読み出すように要求する。アドレスA’のデータは、メインストレージ214内のアドレスAと同じロケーションにマップされる。従って、第1のデータ経路DP0は、アドレスAにおけるデータを犠牲ストレージ218に割り当てる(例えば、アドレスA’のデータをメインストレージ214に割り当てる)必要がある。通常のFIFO方式では、アドレスAは犠牲ストレージ218のスロット0に割り当てられる。しかしながら、スロット0はアドレスBによって占有され、CPU102はアドレスA’への読み出し命令のデータを割り当てるための要求と並列に、アドレスBにアクセスするよう要求している。したがって、データ経路DP0がスロット0からアドレスBを退出させた場合、退出されたデータをより高いレベルのキャッシュから後で検索するために、ストール(例えば、メモリアクセスを待つためにCPU102がストールされる、サイクル又はサイクルの数)がつくられる。
【0476】
本明細書において記載される例は、デュアルデータ経路犠牲キャッシュシステム内の犠牲ストレージ218からデータを効率的に退出させる退出方式を含む。例示の退出方式は、
図3及び
図5の置換ポリシー構成要素308によって実装される。例えば、置換ポリシー構成要素308は、入力を解析し出力を生成する論理を含む。例えば、置換ポリシー構成要素308は、ヒットミス比較論理306a及び306bから入力を取得し、犠牲ストレージ218内のどのロケーションが、メインストレージ214からのデータによって置換されるべきか及び/又は書き込みミス命令からのデータによって置換されるべきかを判定する。本明細書において説明する例では、置換ポリシー構成要素308は、退出ロケーションに対応する犠牲ストレージ218内のエントリ(例えば、ウェイ、セット、キャッシュラインなど)を確保する。例えば、置換ポリシー構成要素308は、特に退出のための第1及び第2の犠牲キャッシュライン(例えば、セット)を推論的にロックする(例えば、確保する)。第1及び第2の犠牲キャッシュラインは、特定のデータ経路に対してロックされる場合がある(例えば、DP0に対してロックされた第1の犠牲キャッシュラインと、DP1に対してロックされた第2の犠牲キャッシュライン)。置換ポリシー構成要素308によって実装される退出論理は、
図6に関連して以下で更に詳細に記載される。
【0477】
図6を参照すると、例示の第1の表602及び例示の第2の表604が示されている。例示の第1及び第2の表602、604は、例示の置換ポリシー構成要素308の論理を説明する。例示の置換ポリシー構成要素308は、LRU値を利用する。本明細書において用いられるように、LRU値は、犠牲ストレージ218内の直近の使用が最も古い部分(least recently used portion)であるウェイに対応する。幾つかの例において、LRU値は、第1又は第2のデータ経路によって最近アクセスされていない犠牲ストレージ要素218内のロケーションに対応する。完全に関連付けられたキャッシュ(例えば、犠牲ストレージ218)において、アドレスは、キャッシュ内の任意の「ウェイ」にマップし得る。したがって、1つのウェイは、データを格納し、タグを含むキャッシュ内のブロックである。幾つかのLRU方式では、犠牲キャッシュがデータを退出させる必要があるとき、LRU値によって示されるロケーション内のデータ(例えば、犠牲ストレージ218内で最近アクセスされなかった部分内のデータ)が退出される。例えば、3ウェイキャッシュにおいて、アドレスA、アドレスB、アドレスCは、3つの全てのウェイ(例えば、ブロック、スロットなど)を占有する。この例では、アドレスAがCPU102によって最近アクセスされ、アドレスBはアドレスAアクセスの直前にアクセスされ、アドレスCはアドレスBより前にアクセスされている。したがって、アドレスCは直近の使用が最も古いアドレスであり、アドレスCにマップされた部分は、LRU値に等しいロケーションを有する。
【0478】
図6の例示の第1の表602は、第1のデータ経路シナリオ606、第2のデータ経路シナリオ608、及び第3のデータ経路シナリオ610を含む。例示のデータ経路シナリオ606、608、610は、
図5のDP0及びDP1上のトランザクション(例えば、アクセス)の有効性に対応する。トランザクションの有効性は、CPU102が有効な命令をL1キャッシュ110に送るか否かに対応する。第1のデータ経路DP0上の有効な命令及び第2のデータ経路DP1上の無効な命令は、処理コアが、第1のデータ経路DP0上の命令を送り、第2のデータ経路DP1をアイドルのままにするときに対応する。幾つかの例において、特定のクロックサイクルの間、第1のデータ経路DP0は無効命令を含む。幾つかの例において、特定のクロックサイクルの間、第2のデータ経路DP1は無効命令を含む。付加的に及び/又は代替として、データ経路DP0及びDP1の両方が、有効な命令を含み得及び/又は無効命令を含み得る。
【0479】
例示の第1の表602では、第1のデータ経路シナリオ606が、
図5の両方のデータ経路(DP0、DP1)が同じクロックサイクルにおいて有効トランザクション(DP0_valid=1、DP1_valid=1)を含む場合に対応する。幾つかの例において、置換ポリシー構成要素308は、両方のデータ経路DP0、DP1から結果及び/又は命令を取得する。
【0480】
第1の表602の例では、第2のデータ経路シナリオ608が、有効トランザクション(DP0有効=1)を含む第1のデータ経路(DP0)と、無効トランザクション(DP1有効=0)を含む第2のデータ経路(DP1)とに対応する。このような例では、置換ポリシー構成要素308は、DP1のトランザクションが無効命令を含むと判定する。
【0481】
第1の表602の例では、第3のデータ経路シナリオ610が、無効トランザクション(DP0有効=0)を含む第1のデータ経路(DP0)と、有効トランザクション(DP1有効=1)を含む第2のデータ経路(DP1)とに対応する。幾つかの例において、置換ポリシー構成要素308は、DP0のトランザクションが無効命令を含むと判定する。
【0482】
例示の第1の表602における例示の第1のデータ経路シナリオ606は、例示のヒット‐ヒットアクション612、例示のミス‐ヒットアクション614、例示のヒット‐ミスアクション616、及び例示のミス‐ミスアクション618を含む。例示のヒット‐ヒット‐アクション612は、DP0上のアドレスとDP1上のアドレスがタグRAM208、210のいずれかのアドレスにヒットしたこと(例えば、一致したこと)を示す。言い換えれば、例示のヒット‐ヒット‐アクション612は、DP0上のアドレス及びDP1上のアドレスがメインストレージ214、犠牲ストレージ218、及び/又は書き込みミスキャッシュ(
図3A~
図3Dに関連して上述した)内のアドレスにヒットすることを示す。例示のミスヒット‐アクション614は、DP0上のアドレスがメインストレージ214、犠牲ストレージ218、及び/又は書き込みミスキャッシュ内のアドレスと一致せず、DP1上のアドレスがメインストレージ214、犠牲ストレージ218、及び/又は書き込みミスキャッシュ内のアドレスにヒットすることを示す。幾つかの例において、ミスヒット‐アクション614のミス部分が、DP0がメインストレージ214から犠牲ストレージ218にキャッシュラインを割り当てるためのものであり、そのため、メインストレージ214のキャッシュラインのための余地をつくるために犠牲ストレージ218からデータを退出させていることを示す。例示のヒット‐ミスアクション616は、DP0上のアドレスが犠牲ストレージ218及び/又は書き込みミスキャッシュ内のアドレスにヒットすること、及び、DP1上のアドレスが犠牲ストレージ218及び/又は書き込みミスキャッシュ内のアドレスに一致しないことを示す。幾つかの例において、ヒット‐ミスアクション616のミス部分は、DP1がメインストレージ214から犠牲ストレージ218にキャッシュラインを割り当てるためのものであり、そのため、メインストレージ214のキャッシュラインのための余地をつくるために犠牲ストレージ218からデータを退出させていることを示す。例示のミスミスアクション618は、DP0とDP1の両方のアドレスが犠牲ストレージ218及び/又は書き込みミスキャッシュ内に一致を有さないことを示す。幾つかの例において、ミス‐ミスアクション618は、データ経路DP0及びDP1の両方がメインストレージ214から犠牲ストレージ218にデータを割り当てるためのものであることを示す。付加的に及び/又は代替として、ミスは、書き込みミスが犠牲ストレージ218内の書き込みミスバッファにデータを書き込むためのものであることを示す。
【0483】
例示の第1の表602における例示の第2のデータ経路シナリオ608は、例示のDP0ヒットアクション620及び例示のDP0ミスアクション622を含む。第2の経路シナリオ608では、第1のデータ経路DP0は有効トランザクションを含み、第2のデータ経路DP1は無効トランザクションを含む。幾つかの例において、第2のデータ経路DP1が命令を含まないので、置換ポリシー構成要素308は第2のデータ経路DP1を無視する。
【0484】
例示の第1の表602における例示の第3のデータ経路シナリオ610は、例示のDP1ヒットアクション624及び例示のDP1ミスアクション626を含む。例示のDP1ヒットアクション624は、第2のデータ経路DP1のアドレスが犠牲ストレージ218及び/又は書き込みミスキャッシュ内のアドレスに一致したときに置換ポリシー構成要素308が取るアクションに対応する。例示のDP1ミスアクション624は、第2のデータ経路DP1のアドレスが犠牲ストレージ218及び/又は書き込みミスキャッシュ内のアドレスと一致しないときに置換ポリシー構成要素308が取るアクションに対応する。例示の第2のデータ経路シナリオ608の下の例示のDP0ヒットアクション620及びDP0ミスアクション622と同様に、例示の置換ポリシー構成要素308は、例示の第3のデータ経路シナリオ610における第1のデータ経路DP0のトランザクションを無視する。これは、そのトランザクションが無効であるためである。
【0485】
第1の表602の例では、DP0 Hit Wayは、命令がヒットしたときに第1のデータ経路DP0によってアクセスされるべき犠牲ストレージ218及び/又は書き込みミスキャッシュの一部を示す(例えば、読み出し、退出、書き込みなど)。第1の表602の例では、DP1 Hit Wayは、命令がヒットしたときに第2のデータ経路DP1によってアクセスされるべき犠牲ストレージ218及び/又は書き込みミスキャッシュ内の部分である。
【0486】
例示の第1の表602では、可変「Y」が、LRUとして選択された現在のウェイのロケーションを示し、第1のデータ経路DP0がデータを取り除くべきロケーションを示す変数である。幾つかの例において、YがDP0ポインタに割り振られる。例えば、DP0が犠牲ストレージ218内の一部を退出させる必要がある場合、DP0ポインタは退出のためにロケーションY(例えば、LRUウェイ)を指す。幾つかの例において、置換ポリシー構成要素308は、DP0によって置換されるべき犠牲ストレージ218のLRU ウェイのインジケータを格納するためのものである。例えば、置換ポリシー構成要素308は、キャッシュコントローラ220によってアクセスされ得、最近アクセスされなかった特定のウェイが第1のデータ経路DP0による退出のために利用可能であることを示すインジケータを保持する。本明細書において用いられるように、用語「ポインタ」及び「インジケータ」は互換的に用いられ得る。
【0487】
例示の第1の表602では、変数「Y+U」が、第2のデータ経路DP1がデータを取り除くべき次のLRU ウェイのロケーションを示す。幾つかの事例では、「Y+1」がDP1ポインタに割り振られる。例えば、第2のデータ経路DP1が犠牲ストレージ218内の一部を退出させる必要がある場合、DP1ポインタは退出のためにロケーションY+1(例えば、次のLRUウェイ)を指す。幾つかの例において、置換ポリシー構成要素308は、DP1によって置換されるべき犠牲ストレージ218のLRUウェイのインジケータを格納するためのものである。例えば、置換ポリシー構成要素308は、キャッシュコントローラ220によってアクセスされ得、最近アクセスされなかった特定のウェイが第1のデータ経路DP0による退出のために利用可能であることを示すインジケータを保持する。
【0488】
置換ポリシー構成要素308の第1の例示の動作において、両方のデータ経路(DP0及びDP1)が、有効トランザクション(例えば、第1のデータ経路シナリオ606に示される)を含み、両方のデータ経路(DP0及びDP1)が、例示の犠牲ストレージ要素218内のアドレスに一致するアドレス(例えば、ヒットヒットアクション612)を含む。例えば、比較論理306a及び306bは、DP0及びDP1のアドレスを例示のタグRAM210のアドレスと比較し、置換ポリシー構成要素308にヒット結果を提供する。両方のデータ経路が有効であり、両方のデータ経路がヒットであるので、DP0 Hit Wayは、データ経路DP0に対応するヒット/マッチングデータを含む犠牲ストレージ218内の部分(例えば、ウェイ)を指し、DP1 Hit Wayは、データ経路DP1に対応するヒット/マッチングデータを含むウェイを指す。犠牲ストレージ218は、要求されたデータで応答する。LRUウェイのロケーションは、増分せず、ロケーションYに留まる。
【0489】
置換ポリシー構成要素308の第2の例示の動作において、両方のデータ経路(DP0及びDP1)が有効トランザクション(例えば、第1のデータ経路シナリオ606に示される)を含み、第1のデータ経路DP0がミスであり、第2のデータ経路DP1が犠牲ストレージ218にヒットする(例えば、ミス‐ヒットアクション614)。例えば、第1の比較論理306aは、「ミス」結果を置換ポリシー構成要素308に返し、第2の比較論理306bは、「ヒット」結果を置換ポリシー構成要素308に返す。DP1 Hit Wayは、ヒット/マッチングデータ(例えば、Hit Way)を含む犠牲ストレージ218内の部分(例えば、ウェイ)を指す。幾つかの例において、第1のデータ経路DP0は、犠牲ストレージ218内の一部(例えば、ウェイ)からデータを退出させるためのものである。したがって、DP0ポインタは、退出されるべき犠牲ストレージ218内のロケーションYを指す。
【0490】
退出が成される前に、置換ポリシー構成要素308は、DP1 Hit WayがLRUウェイのアドレス(例えば、ロケーションY)と一致するかどうかを判定する。DP1 Hit WayがYと同じロケーションを有さない場合、DP0ポインタは、ロケーションYに等しいロケーションを有するウェイ(例えば、LRUウェイ)を指す。DP1HitWayがLRUウェイのアドレスと一致しない場合、DP0ポインタはDP1ポインタのロケーション(Y+1)を指すので、DP0は、DP1 Hit Wayと競合することなくデータを退出できる。
【0491】
第2の例示のシナリオ614では、LRU値及び次のLRU値が、どのロケーションが退出されたかに基づいて増分される。例えば、DP0がロケーションY+1からデータを退出させる(例えば、DP1 Hit WayがDP0ポインタのロケーションと一致する)場合、LRU値が2回増分され、次のLRU値が2回増分される。そうではなく、DP0がロケーションYからデータを退出させた場合(例えば、DP1 Hit WayがDP0ポインタのロケーションと一致しなかった場合)、LRU値が1回増分され、次のLRU値が1回増分される。
【0492】
置換ポリシー構成要素308の第3の例示の動作において、両方のデータ経路(DP0及びDP1)が有効トランザクション(例えば、第1のデータ経路シナリオ606に示される)を含み、第1のデータ経路DP0がヒットであり、第2のデータ経路DP1がミスである(例えば、ヒット‐ミスアクション616)。例えば、第1の比較論理306aは、「ヒット」結果を置換ポリシー構成要素308に返し、第2の比較論理306bは、「ミス」結果を置換ポリシー構成要素308に返す。DP0 Hit Wayは、ヒット/マッチングデータを含む犠牲ストレージ218内のウェイを指す。幾つかの例において、ミスは、第2のデータ経路DP1に、犠牲ストレージ218内に空間をつくるためのウェイを退出させる。したがって、DP1ポインタは、退出されるべき犠牲ストレージ218内のロケーションY+1を指す。
【0493】
退出が行われる前に、置換ポリシー構成要素308は、DP0 Hit Wayが次のLRUウェイのアドレス(例えば、ロケーションY+1)と一致するかどうかを判定する。置換ポリシー構成要素308がDP0 Hit Wayが次のLRUウェイのアドレス(例えば、Y+1)と一致すると判定した場合、DP1ポインタはDP0 Hit Wayと競合することなくDP1がデータを退出させることができるように、DP0ポインタのロケーション(例えば、ロケーションY)を指す。DP0 Hit Wayが次のLRUウェイのアドレスと一致しない場合、DP1はロケーションY+Lからデータを退出させる。
【0494】
第3の例示のシナリオ616では、LRU値及び次のLRU値がどのロケーションが退出されたかに基づいて増分される。例えば、DP1がロケーションYからデータを退出させる(例えば、DP0 Hit WayがDP1ポインタのロケーションと一致する)場合、LRU値が1回増分され、次のLRU値が1回増分される。そうではなく、DP1がロケーションY+1からデータを退出させる場合(例えば、DP0 Hit WayがDP1ポインタのロケーションと一致しなかった場合)、LRU値が2回増分され、次のLRU値が2回増分される。
【0495】
置換ポリシー構成要素308の第4の例示の動作において、両方のデータ経路(DP0及びDP1)が有効トランザクション(例えば、第1のデータ経路シナリオ606に示される)を含み、両方のデータ経路はミスとしてフラグが立てられる(例えば、列618)。例えば、比較論理306a及び306bは、データ経路DP0及びDP1内の両方のアドレスが見つからない場合、及び/又はタグRAM208、210内のアドレスと一致しない場合、「ミス」結果を置換ポリシー構成要素308に返す。第4の動作では、データ経路DP0及びDP1の両方が犠牲ストレージ218内のウェイを退出させるためのものである。したがって、DP0ポインタはロケーションYを指し、DP1ポインタはロケーションY+Lを指す。
【0496】
両方の退出動作が完了すると、LRU値は2だけ増分され(例えば、Y+2)、次のLRU値は2だけ増分される(例えば、(Y+1)+2)。後続の動作では、DP0及びDP1がミスである場合、DP0ウェイは新しいLRU値(例えば、Y+2)を指し、DP1ウェイは次のLRU値(例えば、(Y+1)+2)を指す。
【0497】
置換ポリシー構成要素308の第5の例示の動作において、第1のデータ経路DP0は有効トランザクションであり、第2のデータ経路DP1は無効トランザクションである(例えば、第2のデータ経路シナリオ608で示される)。第5の例示の動作において、第1のデータ経路DP0はヒットである(例えば、DP0ヒットアクション620に示される)。例えば、比較論理306aは、「ヒット」結果を置換ポリシー構成要素308に返す。DP0 Hit Wayは、マッチングデータを含む犠牲ストレージ218内のウェイを指す。LRU値(Y)は、クロックサイクルにおいて退出されるべきデータがないため、同じままである。
【0498】
置換ポリシー構成要素308の第6の例示の動作において、第1のデータ経路DP0は有効トランザクションであり、第2のデータ経路DP1は無効トランザクションである(例えば、第2のデータ経路シナリオ608で示される)。第6の例示の動作において、第1のデータ経路DP0はミスである(例えば、DP0ミスアクション622で示される)。例えば、比較論理306aは、「ミス」結果を置換ポリシー構成要素308に返す。この例では、第1のデータ経路DP0は、犠牲ストレージ218からデータを退出させるためのものである。例示のDP0ポインタはロケーションY(例えば、LRUウェイ)を指す。退出の後、LRU値は増分される(例えば、Y+1)。
【0499】
置換ポリシー構成要素308の第7の例示の動作において、第1のデータ経路DP0は無効トランザクションであり、第2のデータ経路DP1は有効トランザクションである(例えば、第3のデータ経路シナリオ610で示される)。第7の例示の動作において、第2のデータ経路DP1はヒットである(例えば、DP1ヒットアクション624に示される)。例えば、比較論理306bは、「ヒット」結果を置換ポリシー構成要素308に返す。DP1 Hit Wayは、マッチングデータを含む犠牲ストレージ218内のウェイを指す。LRU値(Y)は、クロックサイクルにおいて退出されるべきデータがないため、同じままである。
【0500】
置換ポリシー構成要素308の第8の例示の動作において、第1のデータ経路DP0は無効トランザクションであり、第2のデータ経路DP1は有効トランザクションである(例えば、第3のデータ経路シナリオ610で示される)。第8の例示の動作において、第2のデータ経路DP1はミスである(例えば、DP1ミスアクション626で示される)。例えば、比較論理306bは、「ミス」結果を置換ポリシー構成要素308に返す。この例では、第2のデータ経路DP1が犠牲ストレージ218からデータを退出させるためのものである。DP1ポインタはロケーションY(例えば、LRUウェイ)を指す。DP1ポインタは、DP0の無効トランザクションのため、ロケーションY+1を指していない。そうでない場合、両方のトランザクションが有効であるとき、DP1は常にY+1を指す(例えば、DP0 Hit WayがY+1と一致するときに切り替えられない限り)。第2のデータ経路DP1がロケーションYからデータを退出させた後、LRU値が増分される(例えば、Y+1)。
【0501】
第2の表604を参照すると、第2の表604は、第1のデータ経路DP0及び/又は第2のデータ経路DP1がデータを犠牲ストレージ218に割り振っているときのLRU値の増分を図示する。例えば、読み出しミスが発生した場合、メインストレージ214は、データ経路のうちの1つを利用して、データラインを犠牲ストレージ218に割り当てる。第2の表604は、第1の有効列626、第2の有効列628、第1の割り当て列630、第2の割り当て列632、第1のLRU干渉634、第2のLRU干渉636、及びLRU増分列638を含む。
【0502】
第2の表604において、例示の第1の有効列626は、第2のデータ経路トランザクションの有効性に対応する。例えば、ゼロはDP1トランザクションが無効であることを示し、1はDP1トランザクションが有効であることを示す。例示の第2の有効列は、第1のデータ経路トランザクションの有効性に対応する。例えば、ゼロはDP0トランザクションが無効であることを示し、1はDP0トランザクションが有効であることを示す。
【0503】
第2の表604では、例示の第1の割り当て列630が第2のデータ経路DP1の割り当て状態を示す。割り当て状態は、クロックサイクルにおけるメインストレージ214から犠牲ストレージ218へのデータの割り当てに対応する。例えば、ゼロは第2のデータ経路DP1が犠牲ストレージ218にデータを割り当てていないことを示し、1は、第2のデータ経路DP1が犠牲ストレージ218にデータを割り当てていることを示す。例示の第2の割り当て列632は、第1のデータ経路DP0の割り当て状態を示す。例えば、ゼロは第1のデータ経路DP0が犠牲ストレージ218にデータを割り当てていないことを示し、1は、第1のデータ経路DP0が犠牲ストレージ218にデータを割り当てていることを示す。データ経路がデータを犠牲ストレージ218に割り当てているとき、データ経路は割り当てられているデータのための空間をつくるために、ウェイ(例えば、スロット、ブロックなど)を退出させる。幾つかの例において、メインストレージ214で読み出しミスが発生したときにデータは犠牲ストレージ218に割り当てられる。
【0504】
第2の表604では、第1のLRU干渉列634は、第1のデータ経路DP0が第2のデータ経路割り当てポインタのロケーションと同じ犠牲ストレージ218内のロケーションにヒットするかどうかを示す。例えば、第1のデータ経路DP0のアドレスは、犠牲ストレージ218の直近の使用が最も古いロケーションに位置する。第1のLRU干渉列634は、第1のデータ経路DP1ヒットロケーションが第2のデータ経路DP1割り当てポインタのロケーションに等しいことを示すため1を含む。
【0505】
第2のLRU干渉列636は、第2のデータ経路DP1が第2のデータ経路割り当てポインタのロケーションと同じ犠牲ストレージ218内のロケーションにヒットするかどうかを示す。例えば、第2のデータ経路DP1のアドレスは、犠牲ストレージ218の直近の使用が最も古いロケーションに位置する。第2のLRU干渉列636は、第2のデータ経路DP1ヒットロケーションが第1のデータ経路割り当てポインタのロケーションに等しいことを示すため1を含む。本明細書において用いられるように、第1のデータ経路割り当てポインタは、DP0が割り当てられるときにロケーションY(LRU値)を指し、第2のデータ経路割り当てポインタは、DP1が割り当てられるときにロケーションY+1(次のLRU値)を指す。幾つかの例において、ポインタは、犠牲ストレージ218の一部をより高いレベルキャッシュ(例えば、L2112、L3114、拡張メモリ106)に退出させるようにキャッシュコントローラ220に通知する。例示の置換ポリシー構成要素308は、第1の経路割り当てポインタを、ロケーションY(LRU部分)を指すように初期化し、第2の経路割り当てポインタをY+1(次のLRU部分)を指すように初期化し得る。
【0506】
第2の表604では、LRU増分列628がLRU値Yの増分を示し、例えば、置換ポリシー構成要素308は、LRU値を、1だけ(例えば、Y+1)、2だけ増分(例えば、Y+2)するか、又は何も(例えば、Y)増分しない。幾つかの例において、LRU値の増分は、データ経路DP0及びDP1の状態に依存する。
【0507】
例示の動作において、第1のデータ経路DP0と第2のデータ経路DP1の両方が有効トランザクションを含む。例示の置換ポリシー構成要素308は、いずれかのデータ経路が割り当てられているかどうかを判定する。例えば、キャッシュコントローラ220はメインストレージ214がデータを割り当てる必要があるときに、置換ポリシー構成要素308に情報を送る。
【0508】
第1のデータ経路DP0がデータを割り当てている(例えば、メインストレージ214から犠牲ストレージ218にデータを移動している)場合、第1のデータ経路DP0は犠牲ストレージ214からデータ(例えば、第1のデータ経路割り当てポインタによって示される)を退出させる。データを退出させるために、置換ポリシー構成要素308は、第2のデータ経路DP1がヒットであったかどうか、及びヒットロケーションがどこにあるかを判定する。例えば、置換ポリシー構成要素308は、第2のデータ経路DP1のアドレスのロケーションを解析し、そのロケーションが第1の経路割り当てポインタのロケーションと一致するか否かを判定する。
【0509】
第2の経路ヒットロケーションが第1の経路割り当てポインタの位置と等しい場合(例えば、DP1ヒットロケーション=Y)、置換ポリシー構成要素308は、第1の経路割り当てポインタを次のLRU値(Y+1)を指すように更新する(例えば、次のLRU値のデータを退出させるようにキャッシュコントローラ220に通知する)。このようにして、第2のデータ経路DP1はヒットロケーションYから読み出し/書き込みを行い、第1のデータ経路DP0はLRUロケーションY+Lのデータを退出させる。この動作により、第1のデータ経路DP0はDP1の読み出し/書き込みデータを退出させることはない。退出が発生した後(例えば、犠牲ストレージ218内のY+1からのデータの退出)、置換ポリシー構成要素308は第1の経路割り当てポインタを2だけ増分し、第2の経路割り当てポインタを2だけ増分する。例えば、置換ポリシー構成要素308は、LRU値(Y)を2だけ増分し、次のLRU値(Y+1)を2だけ増分するが、これは、DP0がロケーションY+1を退出させたばかりであり、そのため、新しいLRU値はY+2になるからである。この動作は行640に図示されている。
【0510】
第2のデータ経路ヒットロケーションが第1のデータ経路割り当てポインタのロケーションと等しくない(例えば、DP1ヒットロケーションがYと等しくない)場合、置換ポリシー構成要素308は、キャッシュコントローラ220に、ロケーションYが退出されることを通知する。このようにして、キャッシュコントローラ220は、犠牲ストレージ218内のロケーションYからデータを退出させる。退出が発生した後(例えば、犠牲ストレージ218内のYからのデータの退出)、置換ポリシー構成要素308は、第1の経路割り当てポインタを1だけ増分し、第2の経路割り当てポインタを1だけ増分する。例えば、置換ポリシー構成要素308は、LRU値(Y)を1だけ増分し、次のLRU値(Y+1)を1だけ増分するが、これは、DP0がロケーションYを退出させたばかりであり、そのため、新しいLRU値はY+Lになるからである。この動作は行642に図示されている。
【0511】
別の動作において、第2のデータ経路DP1は、データを割り当てており(例えば、メインストレージ214から犠牲ストレージにデータを移動させている)、第2のデータ経路DP1は犠牲ストレージ214からデータ(例えば、第2のデータ経路割り当てポインタによって示される)を退出させる。データを退出させるために、置換ポリシー構成要素308は、第1のデータ経路DP0がヒットであったかどうか、及びヒットロケーションがどこにあるかを判定する。例えば、置換ポリシー構成要素308は第1のデータ経路DP0のアドレスのロケーションを解析し、そのロケーションが第2の経路割り当てポインタのロケーションと一致するか否かを判定する。
【0512】
第1の経路ヒットロケーションが第2の経路割り当てポインタのロケーションと等しい場合(例えば、DP0ヒットロケーション=Y+1)、置換ポリシー構成要素308は、第2の経路割り当てポインタを、LRU値(Y)を指すように更新する(例えば、LRU値のデータを退出させるようにキャッシュコントローラ220に通知する)。このように、第1のデータ経路DP0はヒットロケーションY+1からの読み出し/書き込みを行い、第2のデータ経路DP1はLRUロケーションYのデータを退出させる。この動作により、第2のデータ経路DP1は、DP0の読み出し/書き込みデータを退出させない。退出が発生した後(例えば、犠牲ストレージ218内のYからのデータの退出)、置換ポリシー構成要素308は、第1の経路割り当てポインタを1だけ増分し、第2の経路割り当てポインタを1だけ増分する。例えば、置換ポリシー構成要素308はLRU値(Y)を1だけ増分し、次のLRU値(Y+1)を1だけ増分するが、これは、DP1がロケーションYを退出させたばかりであり、そのため、新しいLRU値はY+Lになるからである。この動作は行644に図示されている。
【0513】
第1のデータ経路ヒットロケーションが第2のデータ経路割り当てポインタのロケーションと等しくない場合(例えば、DP0ヒットロケーションは、Y+1と等しくない)、置換ポリシー構成要素308は、キャッシュコントローラ220に、ロケーションY+1が退出されることを通知する。このようにして、キャッシュコントローラ220は、犠牲ストレージ218内のロケーションY+1からデータを退出させる。退出が発生した後(例えば、犠牲ストレージ218内のY+1からのデータの退出)、置換ポリシー構成要素308は、第1の経路割り当てポインタを2だけ増分し、第2の経路割り当てポインタを2だけ増分する。例えば、置換ポリシー構成要素308は、LRU値(Y)を2だけ増分し、次のLRU値(Y+1)を2だけ増分するが、これはDP1がロケーションY+1を退出させたばかりであり、そのため、新しいLRU値はY+2になるからである。この動作は行646に図示されている。
【0514】
犠牲ストレージにおける退出のための例示の方法、装置、システム、及び製品が本明細書において記載される。更なる例及びそれらの組み合わせには、以下のものが含まれる。
【0515】
例1は装置であって、この装置は、キャッシュストレージと、第1のメモリ動作と第2のメモリ動作とを同時に受け取るように動作可能なキャッシュコントローラと、キャッシュストレージ内で第1及び第2のメモリ動作が失われたかどうかを識別するために動作可能な比較論理と、第1及び第2のメモリ動作の少なくとも1つがキャッシュストレージ内のミスに対応する場合に、第1及び第2のメモリ動作に基づいて退出させるためにキャッシュストレージ内のエントリを確保するように動作可能な置換ポリシー構成要素とを含む。
【0516】
例2は、例1の装置を含み、置換ポリシー構成要素は、退出のためキャッシュストレージ内のエントリを推測的にロックするためのものである。
【0517】
例3は、例1の装置を含み、置換ポリシー構成要素は、置換されるべきキャッシュストレージの第1のウェイのインジケータを格納し、第1のメモリ動作がキャッシュストレージにおいてミスしており第2のメモリ動作がキャッシュストレージにおいてヒットしていることに応答して、そのインジケータによって示されたキャッシュストレージの第1のウェイにメモリ動作が向けられているか否かを判定し、第2のメモリ動作がキャッシュストレージの第1のウェイに向けられていることに基づいてキャッシュストレージの第2のウェイを示すためにインジケータを増分して、第1のメモリ動作と増分されたインジケータとに基づいてキャッシュストレージの第2のウェイを退出させるように動作可能である。
【0518】
例4は、例1の装置を含み、置換ポリシー構成要素は、置換されるべきキャッシュストレージの第2のウェイのインジケータを格納し、第2のメモリ動作がキャッシュストレージ内でミスしており第1のメモリ動作がキャッシュストレージ内でヒットしていることに応答して、そのインジケータによって示されたキャッシュストレージの第2のウェイに第1のメモリ動作が向けられているか否かを判定し、第1のメモリ動作がキャッシュストレージの第2のウェイに向けられていることに基づいてキャッシュストレージの第1のウェイを示すためにインジケータを減分して、第2のメモリ動作と増分されたインジケータに基づいてキャッシュストレージの第1のウェイを退出させるように動作可能である。
【0519】
例5は、例1の装置を含み、置換ポリシー構成要素は、置換されるべきキャッシュストレージの第1のウェイの第1のインジケータと第2のウェイの第2のインジケータを格納し、キャッシュストレージの第1のメモリ動作がキャッシュストレージにおいてミスしており第2のメモリ動作がキャッシュストレージにおいてミスしていることに応答して、第1のメモリ動作に基づいてキャッシュストレージの第1のウェイを退出させ、第2のメモリ動作に基づいてキャッシュストレージの第2のウェイが退出させるように動作可能である。
【0520】
例6は、例5の装置を含み、置換ポリシー構成要素は、キャッシュストレージの第1のウェイ及び第2のウェイが退出された後に、第1のインジケータを2つのロケーションだけ増分し、第2のインジケータを2つのロケーションだけ増分するように動作可能である。
【0521】
例7は、例1の装置を含み、キャッシュストレージは犠牲キャッシュストレージである。
【0522】
例8は、例1の装置を含み、更に、第1のインタフェースと第2のインタフェースとを含み、第1のインタフェースは、中央処理装置から第1のメモリ動作を取得するためのものであり、第2のインタフェースは、中央処理装置から第2のメモリ動作を取得するためのものであり、第1のインタフェースと第2のインタフェースは、比較論理及びキャッシュコントローラに結合されている。
【0523】
例9は、例8の装置を含み、第1のインタフェースはベクトルインタフェースであり、第2のインタフェースはスカラーインタフェースである。
【0524】
例10は方法を含み、この方法は、第1のメモリ動作と第2のメモリ動作とを同時に受信することと、キャッシュストレージ内で第1及び第2のメモリ動作がミスしているかどうかを識別することと、第1及び第2のメモリ動作の少なくとも1つがキャッシュストレージ内のミスに対応するとき、第1及び第2のメモリ動作に基づいて退出させるためにキャッシュストレージ内のエントリを確保することとを含む。
【0525】
例11は、例10の方法を含み、更に、退出のためにキャッシュストレージ内のエントリを推論的にロックすることを含む。
【0526】
例12は、例10の方法を含み、更に、置換されるべきキャッシュストレージの第1のウェイのインジケータを格納することと、第1のメモリ動作がキャッシュストレージにおいてミスしていること及び第2のメモリ動作がキャッシュストレージにおいてヒットしていることに応答して、インジケータによって示されたキャッシュストレージの第1のウェイに第2のメモリ動作向けられているか否かを判定することと、第2のメモリ動作がキャッシュストレージの第1のウェイに向けられていることに基づいてキャッシュストレージの第2のウェイを示すためにインジケータを増分して、第1のメモリ動作と増分されたインジケータに基づいてキャッシュストレージの第2のウェイを退出させることとを含む。
【0527】
例13は、例10の方法であって、置換されるべきキャッシュストレージの第2のウェイのインジケータを格納することと、第2のメモリ動作がキャッシュストレージ内でミスしていること及び第1のメモリ動作がキャッシュストレージ内でヒットしていることに応答して、インジケータによって指示されたキャッシュストレージの第2のウェイに第1のメモリ動作が向けられているかどうかを判定することと、第1のメモリ動作がキャッシュストレージの第2のウェイに向けられていることに基づいてインジケータを減分して、キャッシュストレージの第1のウェイに、第2のメモリ動作と増分されたインジケータとに基づいてキャッシュストレージの第1のウェイを退出させることとを更に含む。
【0528】
例14は、例10の方法を含み、置換されるべきキャッシュストレージの第1のウェイの第1のインジケータと第2のウェイの第2のインジケータを格納することと、第1のメモリ動作がキャッシュストレージにおいてミスており第2のメモリ動作がキャッシュストレージにおいてミスしていることに応答して、第1のメモリ動作に基づいてキャッシュストレージの第1のウェイを退出させ、第2のメモリ動作に基づいてキャッシュストレージの第2のウェイを退出させることとを更に含む。
【0529】
例15は、例14の方法を含み、キャッシュストレージの第1のウェイ及び第2のウェイが退出された後に、第1のインジケータを2つのロケーションによって増分し、第2のインジケータを2つのロケーションによって増分することを更に含む。
【0530】
例16はシステムを含み、このシステムは、第1のメモリ動作と第2のメモリ動作とを同時に出力する中央処理装置、及び、中央処理装置に結合されるキャッシュを含み、キャッシュは更に、キャッシュストレージと、第1のメモリ動作と第2のメモリ動作とを同時に受け取るように動作可能なキャッシュコントローラと、キャッシュストレージ内で第1及び第2のメモリ動作がミスしているかどうかを識別するために動作可能な比較論理と、第1及び第2のメモリ動作の少なくとも1つがキャッシュストレージ内のミスに対応する場合に、第1及び第2のメモリ動作に基づいて退出させるためにキャッシュストレージ内のエントリを確保するように動作可能な置換ポリシー構成要素とを含む。
【0531】
例17は、例16のシステムを含み、キャッシュストレージは第1のキャッシュストレージであり、キャッシュは、第1のキャッシュストレージと並列に結合される第2のキャッシュストレージを更に含む。
【0532】
例18は、例16のシステムを含み、キャッシュストレージは犠牲キャッシュストレージである。
【0533】
例19は、例16のシステムを含み、キャッシュは更に、第1のインタフェースと第2のインタフェースとを含み、第1のインタフェースは64ビット幅の双方向スカラーインタフェースであり、第2のインタフェースは512ビット幅のベクトルインタフェースである。
【0534】
例20は、例16のシステムを含み、置換ポリシー構成要素は、1)第1及び第2のメモリ動作の有効性、2)キャッシュストレージが第1及び第2のメモリ動作のためのデータを格納するかどうか、及び3)第1及び第2のメモリ動作がキャッシュストレージにデータを割り当てるか又はキャッシュストレージにデータを書き込むかどうかに基づいて、キャッシュストレージ内のエントリ確保を調整するように動作可能である。
図11Aは、
図2及び/又は
図3の犠牲キャッシュストアキュー216の例示の回路実装である。
図11Aでは、犠牲キャッシュストアキュー216は、例示のラッチ1102a、1102b、1102c、1102d、1102e、例示のマージ回路1103a~c、例示の演算構成要素1104、例示のアトミック比較構成要素1106、例示の読み出し・変更・書き込み・マージ構成要素1108、例示の選択マルチプレクサ1110、及び例示のECC生成器1112、例示の調停マネージャ1114、例示のペンディングのストアアドレスデータストア1116、例示の優先順位マルチプレクサ1118、及び例示の書き込みポート1126を含む。例示のマージ回路1103a~dは、例示のコンパレータ1120及び例示のスイッチ1122を含む。
図11Aの例は、犠牲キャッシュストアキュー216の単一のパイプラインを図示する。しかしながら、犠牲ストレージ要素216は、破線のボックス1100によって示されるように、異なるバンクに関してパイプラインの2つ又はそれ以上の独立した複製をサポートするように構成され得る。したがって、
図11Aのパイプラインは、以下で更に説明されるように、異なるバンクについて複数回再生され得る。
【0535】
バンク調停のためのマルチバンクデータRAMキャッシュにおける読み出し・変更・書き込み・サポートのための方法及び装置
【0536】
幾つかのモノリシックストレージデバイスは、同じクロックサイクルの間、プロセッサ(例えば、CPU)による複数のアクセスをサポートしない。例えば、単一のメインストレージ内のデータにアクセスする要求では、単一のメインストレージ全体をロックアップできる。このような例では、クロックサイクル毎に1つのフルキャッシュラインアクセスをサポートできる1つのレジスタファイルがある。このような幾つかの例において、単一のレジスタファイルがこのような要求を受け取ったストレージデータバンクに割り当てられるので、単一のメインストレージに関連付けられたキャッシュライン全体をロックして要求を処理し得る。
【0537】
本明細書において記載される例には、バンク調停のためのマルチバンクデータRAMキャッシュが含まれる。幾つかの記載される例において、
図2のメインキャッシュストアキュー212は、複数のバンク(例えば、ストレージバンク、ストレージデータバンク、メモリバンクなど)を有し、そのため、マルチバンクであるか、又はマルチバンクデータ又はメモリ構成を有する。幾つかの記載される例において、
図2のメインストレージ214は、複数のバンクを有し、そのため、マルチバンクであるか、又はマルチバンクデータ又はメモリ構造を有する。有利にも、メインキャッシュストアキュー212及び/又はメインストレージ214のマルチバンク構造は、クロックサイクル毎に2つ又はそれ以上のアクセス(例えば、CPUアクセス)のサポートをもたらすことができる。有利にも、メインキャッシュストアキュー212及び/又はメインストレージ214のマルチバンク構造により、性能のオーバーヘッドなしに2つ又はそれ以上のアクセスの処理及び/又は実現が可能になる。
【0538】
幾つかの記載された例では、調停論理は、バンクアクセスの競合を解決するための配置で、メインキャッシュストアキュー212及び/又はメインストレージ214に結合される。例えば、メインキャッシュストアキュー212は、16個の独立してアドレス指定可能なバンクに分割され得る。そのような例では、調停論理は、16セットの調停論理を含み得、調停論理の各組は16個の独立してアドレス指定可能なバンクのうちの対応する1つと回路状態にある。有利にも、調停論理は、16個のバンクのうちの第1のバンクのバンクアクセス競合を、16個のバンクのうちの第2のバンクとは独立して解決し得る。
【0539】
図7Bは、第2の例示のカプセル化されたデータキャッシュシステム710の概略図である。第2のカプセル化されたデータキャッシュシステム710は、
図1のL1キャッシュ110又はその一部、及び/又はより一般的には、
図1のデータキャッシュ108又はその一部の例示の回路実装とし得る。第2のカプセル化されたデータキャッシュシステム710は、統合されたストレージビューを外部システム(例えば、1つ又はそれ以上のCPU、1つ又はそれ以上のプロセッサ、外部ハードウェアなど)に提供するためにカプセル化される。例えば、第2のカプセル化されたデータキャッシュシステム710は、ファームウェア、ソフトウェア、ハードウェア論理等、及び/又はそれらの組合せを用いてカプセル化され得、リードアフターライト(RAW)ハザード、ライトアフターライト(WAW)ハザード、データ転送等に関連する全ての複雑さをカプセル化及び/又はその他の方式で一般化し得る。有利なことに、
図7Bの例に示される統合アーキテクチャは、対象の最新バージョンへのアクセスを取得することを単純化するために、外部システム(例えば、中央処理装置102)に別個のポートを提供し得る。
【0540】
図7Bの例示の実装では、第2のカプセル化されたデータキャッシュシステム710は、
図2のメインキャッシュストアキュー212と、
図2のメインストレージ214とを含む。
図7Bでは、メインキャッシュストアキュー212は、複数の第1の例示の独立してアドレス指定可能なバンク(例えば、データバンク、ストアバンク、データストアバンクなど)712を含む。例えば、第1の独立してアドレス指定可能なバンク712は、バンクキュー、バンクサブキューなどであり得る。そのような例では、バンクキュー、バンクサブキューなどは、
図7D及び/又は
図7Eに後述するように、複数のストレージ要素を含み得る。第1の独立してアドレス指定可能なバンク712は、メインキャッシュストアキューバンク(例えば、メインキャッシュストアキューデータバンク、メインキャッシュバンクキュー、メインキャッシュバンクサブキュー等)である。
図7Bにおいて、メインキャッシュストアキュー212は、16個のメインキャッシュストアキューバンク712を含む。代替として、メインキャッシュストアキューバンク712の事例は16個より少なくても多くてもよい。
【0541】
図7Bでは、メインストレージ214は、複数の独立してアドレス指定可能な第2の例示のバンク(例えば、データバンク、ストアバンク、データストアバンクなど)714を含む。第2の独立してアドレス指定可能なバンク714は、メインストレージバンク(例えば、メインストレージデータバンク)である。
図7Bにおいて、メインストレージ214は、16個のメインストレージバンク714を含む。代替として、メインストレージバンク714の事例は16個より少なくても多くてもよい。例えば、メインキャッシュストアキュー212は、第1のバンクキュー又は第1のバンクサブキュー(例えば、メインキャッシュストアキュー:バンク1)を含む複数のバンクキュー又はバンクサブキューを含み得、メインストア214は第1のデータバンク(例えば、メインストア:バンク1)を含む複数のデータバンクを含み得る。
【0542】
幾つかの例において、メインキャッシュストアキュー212及びメインストレージ214は、それぞれ256行を有し、各行は1024ビットのライン幅を有するが、
図7Bに図示するように16個のバンクに分割され、所与のバンクにおいて行当たり64ビットである。幾つかの例において、メインキャッシュストアキュー212及びメインストレージ214は、それぞれ384行を有し、各行は1024ビットのライン幅を有するが、
図7Bに示すように16個のバンクに分割され、所与のバンクにおいて行当たり64ビットである。もちろん、上記の例で記載したキャッシュサイズは2つの例にすぎず、本記載は、任意の特定のキャッシュライン幅、バンクの数、又は行などに限定されない。
図7Bに示すように、第1のバンク712の各々は、第2のバンク714の1つに対応する。例えば、メインキャッシュストアキュー212の第1のバンク(BANK1)は、メインストレージ214の第1のバンク(BANK1)と回路状態にあり、そのため、メインストレージ214の第1のバンクに対応する。
【0543】
有利にも、メインキャッシュストアキュー212、メインストレージ214、及び/又はより一般的には第2のカプセル化されたデータキャッシュシステム710のマルチバンク構造は、並列にバンクに送られる読み出し及び書き込み動作を処理し得る。幾つかの例において、各バンクが読み出し及び/又は書き込み動作に応答して、それ自体のプロセスを調停する。第2のカプセル化されたデータキャッシュシステム710の各バンクが独立して動作できるようにすることにより、要求が受け取られたときにキャッシュライン全体がロックアップされないので、第2のカプセル化されたデータキャッシュシステム710の動作がより効率的になる。そうではなく、このような要求を受け取ったバンクに割り当てられたキャッシュラインの一部のみがロックされる。
【0544】
図7Dは、例示のメインキャッシュマルチバンク構造730を示す。幾つかの例示の実装において、
図1のL1キャッシュ110、L2キャッシュ112、及び/又はL3キャッシュ114は、メインキャッシュマルチバンク構造730を有し得る。幾つかの例において、
図2のメインキャッシュストアキュー212及び/又は
図2のメインストレージ214は、メインキャッシュマルチバンク構造730を有し得る。例えば、メインキャッシュマルチバンク構造730は、メインキャッシュストアキュー212及び/又はメインストレージ214の例示の実装とし得る。
【0545】
メインキャッシュマルチバンク構造730は、16個の例示のバンク(バンク0~15)732を含むデータ又はメモリ構造であり、バンク732の各々は64バイト(例えば、バイト0~7)のデータ幅を有する。バンク732の各々は16個の例示のロー(ロー0~15)734を含み、各ロー734は128バイトのデータ幅を有する(例えば、128バイト=8バイト/バンク×16バンク)。
図7Dでは、バンク732の各々が128バイト(例えば、128バイト=8バイト/行×16行)を格納し得る。
図7Dでは、メインキャッシュマルチバンク構造730は、2048バイト(例えば、2048バイト=128バイト/バンク×16バンク)を格納し得る。メインキャッシュマルチバンク構造730は、バンクによって独立してアドレス指定可能である。例えば、ロー734の第1のローは、開始ローアドレス0及び終了ローアドレス127を有し、ロー734の第2のローは、開始ローアドレス128及び終了ローアドレス255を有する。
【0546】
幾つかの例において、キャッシュラインがメモリ(例えば、DRAM)又はストレージユニット(例えば、メインストレージ214、犠牲ストレージ218等)の幅に収まる128バイトのデータであり得る。
図7Dの例では、キャッシュラインがメインキャッシュバンク構造730の行全体を消費し得る。例えば、キャッシュラインは16バンクのロー734のうちの1つを使用し得、各バンクは8バイト幅である。有利にも、メインキャッシュバンク構造730は、そこに格納されたデータにアクセスするために、16の異なるキャッシュラインをイネーブルにし得る。
【0547】
図7Eは、例示の統合されたキャッシュマルチバンク構造740を示す。幾つかの例において、
図1のL1キャッシュ110、L2キャッシュ112、及び/又はL3キャッシュ114は、統合されたキャッシュバンク構造740を有し得る。幾つかの例において、
図2のメインキャッシュストアキュー212、
図2のメインストレージ214、
図2の犠牲キャッシュストアキュー216、及び/又は
図2の犠牲ストレージ218は、統合されたキャッシュマルチバンク構造740を有し得る。例えば、統合されたキャッシュマルチバンク構造740は、メインキャッシュストアキュー212、メインストレージ214、犠牲キャッシュストアキュー216、及び/又は犠牲ストレージ218の例示の実装とし得る。
【0548】
統合されたキャッシュマルチバンク構造740は、16個の例示のバンク(バンク0~15)742を含むデータ又はメモリ構造であり、バンク742の各々は64バイト(例えば、バイト0~7)のデータ幅を有する。バンク742の各々は16個の例示のロー(ロー0~15)744を含み、ロー744の各々は128バイトのデータ幅を有する(例えば、128バイト=8バイト/バンク×16バンク)。
図7Eでは、バンク742の各々が128バイト(例えば、128バイト=8バイト/行×16行)を格納し得る。
図7Eでは、統合されたキャッシュマルチバンク構造740が2048バイト(例えば、2048バイト=128バイト/バンク×16バンク)を格納し得る。統合されたキャッシュマルチバンク構造740は、バンクによって独立してアドレス指定可能である。例えば、ロー744の第1のローは、開始ローアドレス0及び終了ローアドレス127を有し、ロー744の第2のローは、開始ローアドレス128及び終了ローアドレス255を有する。
【0549】
図9は、メインキャッシュコントローラ222、犠牲キャッシュコントローラ224、及び/又はより一般的には
図2のキャッシュコントローラ220、及び/又はより一般的には
図1及び/又は
図2のL1キャッシュ110によって実行され得る、例示の命令処理ワークフロー900、910、920を示す。例えば、命令処理ワークフロー900、910、920は、
図2のメインキャッシュストアキュー212、メインストレージ214、犠牲キャッシュストアキュー216、又は犠牲ストレージ218の少なくとも1つに関連して実行され得る。命令処理ワークフロー900、910、920は、第1の例示の命令処理ワークフロー900、第2の例示の命令処理ワークフロー910、及び第3の例示の命令処理ワークフロー920を含む。
【0550】
第1の命令処理ワークフロー900は、第1の例示のストア命令902を受け取ることに応答して実行される。第1のストア命令902は、アドレス(Addr)0に64バイトを書き込むCPU書き込み動作又はコマンドである。
図3A~
図3Dのアドレス処理構成要素302a~cは、第1のストア命令902に含まれる第1のデータ(CPU‐Write Data)を回転させ及び/又は他の方式で編成して、第1の回転又は整合されたデータ(Write‐Data Aligned)904を生成し得る。
【0551】
図3A~
図3Dのアドレス処理構成要素302a~cは、ストア命令からのメモリアドレスを用いて、
図2のメインキャッシュストアキュー212、メインストレージ214、犠牲キャッシュストアキュー216、及び/又は犠牲ストレージ218のバンクが第1ストア命令902に必要であると判定し得る。例えば、アドレス処理構成要素302a~cは、第1ストア命令902のAddr0が読み出し及び書き込みを行うべき8つのバンク全体(例えば
図7Cのバンク722のうち8つ)を示すと判定し得る。このような例では、アドレス処理構成要素302a~cが読み出すバンクの数又は量が0x00FFであり、書き込むバンクの数又は量が0x00FFであると判定し得る。例えば、アドレス処理構成要素302a~cは
図7Cのバンク0~7がアクセスされる必要があると判定し得、バンクの各々は対応するビット(例えば、バンク7のための第1のビット、バンク6のための第2のビット、バンク5のための第3のビットなど)を有する。バンクの読み出し又は書き込みを行う場合、対応するビット位置はビット値1、それ以外の場合はビット値0になる。このような例では、アドレス処理構成要素302a~cは、第1のストア命令902のためにアクセスされる必要があるそれぞれのバンクを示す1つの値(例えば、バンク7は1であり、バンク6は1であるなど)を有するバンク0~7のためのビットの各々に基づいて、バイナリで11111111である0x00FFの読み出されたバンクの数のためのアドレスを生成し得る。
【0552】
幾つかの例において、
図3A~
図3Dのバンク処理論理303は、第1のストア命令902などの入来ストア命令が、バンク全体の書き込み又は部分的バンクの書き込みを示すかどうかを検出する。第1の命令処理ワークフロー900では、必要とされるバンクの全てが完全に上書きされるべきであるので、バンク処理論理303は、バンクのいずれも最初に読み出される必要がないと判定し得る。例えば、バンク処理論理303は、読み出されるバンクの数が0x0000であり、バイナリで000000000であり、読み出される必要のないバンクの各々を示すと判定し得る。有利なことに、バンク処理論理303は、キャッシュシステムの以前の実装と比較して少ない読み出し動作を行うことによって、メインキャッシュストアキュー212、メインストレージ214、及び/又はより一般的には、
図7のカプセル化されたデータキャッシュシステム700から読み出されるバンクの数を低減し、そのためそれらの動作の効率を改善し、及び/又はその他の方式でその動作を最適化し得る。
【0553】
第2の命令処理ワークフロー910は、第2の例示のストレージ命令912を受け取ることに応答して実行される。第2のストア命令912は、Addr3において64バイトを書き込むCPU書き込み動作又はコマンドである。アドレス処理部302a~cは、第2ストア命令912に含まれる第2のデータ(CPU‐Write Data)を回転させ及び/又は他の方式で編成して、第2の例示の回転又は整合されたデータ(Write‐Data Aligned)914を生成し得る。例えば、アドレス処理構成要素302a~cは、L1キャッシュ110などのキャッシュメモリに関連する正しいレーンに第2のデータを置くように第2のデータをシフトし得る。
【0554】
アドレス処理構成要素302a~cは、第2のストア命令912のAddr3が読み書きされる8つのバンク全体(例えば、
図7のバンク702のうちの8つ)を示すと判定し得る。このような例では、アドレス処理構成要素302a~cは、読み出すバンクの数又は量が0x01FFであり、書き込むバンクの数又は量が0x01FFであることを判定し得る。例えば、アドレス処理構成要素302a~cは、
図7のバンク0~8がアクセスされる必要があると判定し得、バンクの各々は対応するビット(例えば、バンク8のための第1のビット、バンク7のための第2のビット、バンク6のための第3のビット等)を有する。このような例では、アドレス処理構成要素302a~cは、第2のストア命令912のためにアクセスされる必要があるそれぞれのバンクを示す1値(例えば、バンク8は1であり、バンク7は1であるなど)を有するバンク0~8のためのビットの各々に基づいて、バイナリで111111111である、0x01FFの読み出されたバンクの数のためのアドレスを生成し得る。
【0555】
幾つかの例において、
図3A~
図3Dのバンク処理論理303は、第3のストア命令922がバンク全体の書き込みを示すか、又は部分的バンクの書き込みを示すかを検出する。第2の命令処理ワークフロー910において、バンク処理論理303は、バンク0及び8が完全に上書きされるべきときを判定し得、そのため、バンク0及び8が最初に読み出される必要がない。例えば、バンク処理論理303は、読み出されるバンクの数が0x0101であり、これは、バイナリで100000001であり、バンク0及び8が読み出される必要がないことを示す。有利なことに、バンク処理論理303は、キャッシュシステムの以前の実装と比較して少ない読み出し動作を行うことによって、メインキャッシュストアキュー212、メインストレージ214、及び/又はより一般的には、
図7のカプセル化されたデータキャッシュシステム700から読み出されるバンクの数を低減し、そのためそれらの動作の効率を改善し、及び/又はその他の方式でその動作を最適化し得る。
【0556】
第3の命令処理ワークフロー920は、第3の例示のストア命令922を受け取ることに応答して実行される。第3のストア命令922は、Addr113に64バイトを書き込むためのCPU書き込み動作又はコマンドである。アドレス処理構成要素302a~cは、第3のストア命令922に含まれる第2のデータ(CPU‐Write Data)を回転させ及び/又は他の方式で編成して、第3の例示の回転又は整合されたされたデータ(Write‐Data Aligned)924を生成し得る。例えば、アドレス処理構成要素302a~cは、第3のデータを、L1キャッシュ110などのキャッシュメモリに関連する正しいレーンに第3のデータを置くようにシフトし得る。
【0557】
アドレス処理構成要素302a~cは、第3のストア命令922のAddr113が読み書きされる8つのバンク全体(例えば、
図7のバンク722のうちの8つ)を示すと判定し得る。このような例では、アドレス処理構成要素302a~cは、読み出すバンクの数又は量が0xC07Fであり、書き込むバンクの数又は量が0xC07Fであることを判定し得る。例えば、アドレス処理構成要素302a~cは、
図7のバンク0~6及び14~15がアクセスされる必要があると判定し得、ここで、バンクの各々は対応するビット(例えば、バンク15のための第1のビット、バンク14のための第2のビット、バンク6のための第3のビットなど)を有する。このような例では、アドレス処理構成要素302a~cは、第3のストア命令922のためにアクセスされる必要があるそれぞれのバンクを示す1値(例えば、バンク15が1であり、バンク14が1であり、バンク6が1であるなど)を有するバンク0~6及び14~15のビットのそれぞれに基づいて、バイナリで1100000001111111である、0xC07Fのバンク読み出し数のアドレスを生成し得る。
【0558】
幾つかの例において、
図3A~
図3Dのバンク処理論理303は、第3のストア命令922がバンク全体の書き込みを示すか、又は部分的バンクの書き込みを示すかを検出する。第3の命令処理ワークフロー920では、バンク処理論理303は、バンク6及び14~15が完全に上書きされるべきであり、バンク6及び14~15は最初に読み出される必要がないと判定し得る。例えば、バンク処理論理303は、読み出されるバンクの数が0xC080であり、これはバイナリで1100000010000000であり、バンク6及び14~15から読み出される必要がないことを示す。有利なことに、バンク処理論理303はキャッシュシステムの以前の実装と比較して少ない読み出し動作を行うことによって、メインキャッシュストアキュー212、メインストレージ214、及び/又はより一般的には、
図7のカプセル化されたデータキャッシュシステム700から読み出されるバンクの数を低減し、そのためそれらの動作の効率を改善し、及び/又はその他の方式でその動作を最適化し得る。
【0559】
図10Aは、例示のデータキャッシュシステム1000の概略図である。データキャッシュシステム1000は、
図1、
図2、及び/又は
図3のL1キャッシュ110、又はその一部の例示の実装とし得る。データキャッシュシステム1000は、
図7Bのカプセル化されたデータキャッシュシステム700の第1の例示のバンク(ENCAPSULATED DATA CACHE SYSTEM BANK[i])1002を含む。例えば、第1のバンク1002は、
図7Bのメインキャッシュストレージキュー:バンク1及びメインストレージ:バンク1に対応し得る。第1のバンク1002は、
図2のメインキャッシュストアキュー212の第1の例示のメインキャッシュストアキューバンク1004を含み、これは、
図7Bのメインキャッシュストアキュー:バンク1の例示の実装であり得る。第1のバンク1002は、
図2のメインストレージ214の第1の例示のメインストレージバンク1006を含み、これは、
図7Bのメインストレージ:バンク1の例示の実装とし得る。
【0560】
データキャッシュシステム1000は、第1の例示のアドレス処理論理1001と第2の例示のアドレス処理論理1003とを含む。第1のアドレス処理論理1001及び第2のアドレス処理論理1003は、
図3A~
図3Dのアドレス処理構成要素302a~c及び/又は
図3A~
図3Dのバンク処理論理303の例示の実装であり得る。第1のアドレス処理論理1001は、
図3A~Dの第1のアドレス処理構成要素302a、第2のアドレス処理構成要素302b、又は第3のアドレス処理構成要素302cのうちの少なくとも1つの例示の実装であり得る。第2のアドレス処理論理1001は、
図3A~
図3Dの第1のアドレス処理構成要素302a、第2のアドレス処理構成要素302b、又は第3のアドレス処理構成要素302cのうちの少なくとも1つの例示の実装とし得る。
【0561】
データキャッシュシステム1000は、例示の調停論理1008、1010、及び例示のマルチプレクサ論理1012、1014、1016を含む。調停論理1008、1010は、第1の例示の調停論理(例えば、第1のアービタ)1008及び第2の例示の調停論理(例えば、第2のアービタ)1010を含む。第1の調停論理1008は、メインストレージ読み出し/書き込みアービタ(MS R/W ARB[i])であり、第2の調停論理1010は、メインキャッシュストアキュー(STQ WRITE ARB[i])である。
図10Aの図示される例の例示の調停論理1008、1010は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。
図10Aに図示される例の例示のマルチプレクサ論理1012、1014、1016は、例えばハードウェアプロセッサなどの論理回路によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。
【0562】
マルチプレクサ論理1012、1014、1016は、第1の例示のマルチプレクサ(MUX1[i])(例えば、第1のマルチプレクサ論理回路)1012と、第2の例示のマルチプレクサ(MUX2[i](例えば、第2のマルチプレクサ論理回路)1014と、第3の例示のマルチプレクサ(MUX3[i])(例えば、第3のマルチプレクサ論理回路)1016とを含む。マルチプレクサ1012、1014、1016は、選択入力(SEL[i])、データ入力(1~3)、及び出力を有する。
【0563】
マルチプレクサ1012、1014、1016の第1のデータ入力(データ入力1)は、第1のアドレス処理論理1001及び第2のアドレス処理論理1003に結合される。マルチプレクサ1012、1014、1016の第2のデータ入力(データ入力2)は、第1のアドレス処理論理1001及び第2のアドレス処理論理1003に結合される。マルチプレクサ1012、1014、1016の第3のデータ入力(データ入力3)は、第1のアドレス処理論理1001及び第2のアドレス処理論理1003に結合される。
【0564】
第1のマルチプレクサ1012の選択入力は、第2の調停論理1010の出力に結合される。第2のマルチプレクサ1014の選択入力及び第3のマルチプレクサ1016の選択入力は、第1の調停論理1008の出力に結合される。第1のマルチプレクサ1012の出力は、第1のメインキャッシュストアバンク1004の例示の書き込みポート(WRITE PORT[i])1024に結合される。第2のマルチプレクサ1014の出力は、第1のメインキャッシュストアバンク1004の例示の読み出しポート(READ PORT[i])1026に結合される。第3のマルチプレクサ1016の出力は、第1のメインストレージバンク1006の例示の読み出し/書き込みポート(READ/WRITE PORT[i])1028に結合される。第1の調停論理1008は、第1のアドレス処理論理1001、第2のアドレス処理論理1003、第2の調停論理1010、及び第1のメインキャッシュストアキューバンク1004の出力に結合される。
【0565】
図10AのSTQ[i]は、メインキャッシュストアキュー212のマルチバンク実装の単一バンクを表す。例えば、メインキャッシュストアキュー212は、16個のバンクを有するメインキャッシュストアキュー212を表すSTQ[0]~STQ[15]を有し得る。このような例では、STQ[0]~STQ[15]の各々が64ビット(すなわち、8バイト)を格納し得る。このような幾つかの例において、STQ[0]~STQ[15]及び/又はより一般的にはメインキャッシュストアキュー212は、24,576ビット(すなわち、3072バイト)を格納し得る。代替として、STQ[0]~STQ[15]の各々が異なる量のビットを格納し得、そのため、メインキャッシュストアキューは異なる量のビットを格納し得る。
【0566】
第1のバンク1002を含む複数のバンクは、カプセル化されて、カプセル化されたデータキャッシュシステム1034を形成及び/又は生成し得る。例えば、カプセル化されたデータキャッシュシステム1034は、
図7Bのカプセル化されたデータキャッシュシステム700の例示の実装とし得る。有利にも、メインキャッシュストアキュー212及びメインストレージ214の各対応するバンクは、外部システムと相互作用するときに簡略化のために、例示のカプセル化されたデータキャッシュバンク1036を形成及び/又は生成するために共にカプセル化され得る。カプセル化されたデータキャッシュバンク1036の各々は、例示のカプセル化された書き込みポート(WRITE PORT(STQ[i]))438、例示のカプセル化された読み出しポート(READ PORT(STQ[i]))1040、及び例示のカプセル化された読み出し/書き込みポート(READ/WRITE PORT MS[i])1042を含む。
【0567】
第1のアドレス処理論理1001及び/又は第2のアドレス処理論理1003は、
図1のCPU102の
図1のインタフェースの1つから、例示のストア命令1018、1020、1022を取得することができる。ストア命令1018、1020、1022は、WDATA、ADDR、BYTEN、SIZE、及びR/Wなどの例示のデータを含む。WDATAは、メインキャッシュストアキュー212又はメインストレージ214の少なくとも1つに書き込まれる及び/又は他の方式で格納されるデータ(例えば、64ビットのデータ)に対応する。ADDRは、メインキャッシュストアキュー212又はメインストレージ214の少なくとも1つに関連するデータアドレスに対応する。BYTENは、バイトイネーブルデータに対応する。SIZEは、データアクセス動作(例えば、読み出し動作、書き込み動作、変更動作など、及び/又はそれらの組み合わせ)のデータサイズに対応する。R/Wは、ストア命令が読み出し動作であるか書き込み動作であるかに対応する。
【0568】
ストア命令1018、1020、1022は、第1の例示のストア命令(SCALAR_DP(DP0))1018、第2の例示のストア命令(DMA)1020、及び第3の例示のストア命令(VECTOR_DP(DP1))1022を含む。第1のストア命令1018は、
図1のスカラーインタフェース(例えば、
図2のCPUインタフェース202)から送信され、そのため、データキャッシュシステム1000のスカラーデータ経路(SCALAR_DP(DP1))に対応する。第2のストア命令1020は、ダイレクトメモリアクセス(DMA)インタフェースなどの
図1のメモリインタフェースから送信され、そのためDMAデータ経路に対応する。第3のストア命令1022は、
図1のベクトルインタフェース(例えば、
図2のCPUインタフェース202)から送信され、そのため、データキャッシュシステム1000のベクトルデータ経路(VECTOR_DP(DP1))に対応する。
【0569】
第1のアドレス処理論理1001及び/又は第2のアドレス処理論理1003は、メインキャッシュストアキュー212又はメインストレージ214の少なくとも1つに関連するデータアクセス動作を実行するために用いられ得るトランザクションデータ(TRANSACTION_DP0[i]、TRANSACTION DMA[i]、TRANSACTION DP1[i])を生成する。第1のアドレス処理論理1001は、ストア命令1018、1020、1022のそれぞれ1つ(又は複数)からWDATAを抽出し得、幾つかの例において回転し得、抽出された及び/又は回転されたWDATAをマルチプレクサ1012、1014、1016のそれぞれの第1の入力に送信し得る。例えば、第1のアドレス処理論理1001は、第1のストア命令1018から第1のWDATAを抽出し得、回転させ得、第1の抽出され回転させられたWDATAを、第1のマルチプレクサ1012の第1の入力、第2のマルチプレクサ1014の第1の入力、及び第3のマルチプレクサ1016の第1の入力に送信し得る。
【0570】
第2のアドレス処理論理1003は、ストアキュー212又はメインストレージ214の少なくとも1つの16バンクのうちの1つ又は複数のバンクのアドレス(MS/STQ_ADDR[i])を判定し得る。アドレスは、ストア命令1018、1020、1022に含まれるADDRデータに基づき得る。第2のアドレス処理論理1003は、ストア命令1018、1020、1022に含まれるBYTENデータに基づいて、バンク毎のバイトイネーブル値(BYTEN/BANK[i])を判定し得る。第2のアドレス処理論理1003は、ストア命令1018、1020、1022に含まれるR/Wデータに基づいて、書き込みバンク要求(WR_BANK_REQ[i])及び/又は読み出しバンク要求(RD_BANK_REQ[i])を判定し得る。
【0571】
第1のアドレス処理論理1001及び/又は第2のアドレス処理論理1003は、ストア命令1018、1020、1022のそれぞれの1つのためのトランザクションデータを判定し得る。トランザクションデータは、回転されたWDATAデータ、MS/STQ_ADDR[i]、及びBYTEN/BANK[i]を含み得、例えば、第1のアドレス処理論理1001及び/又は第2のアドレス処理論理1003は、第1のストア命令1018に基づいて第1のトランザクションデータ(TRANSACTION_DP0[i])、第2のストア命令1020に基づいて第2のトランザクションデータ(TRANSACTION_DMA[i])、及び第3のストア命令1022に基づいて第3のトランザクションデータ(TRANSACTION_DP1[i])を生成し得る。このような例では、第1のアドレス処理論理1001及び/又は第2のアドレス処理論理1003は、第1のトランザクションデータをマルチプレクサ1012、1014、1016の第1の入力に、第2のトランザクションデータをマルチプレクサ1012、1014、1016の第2の入力に、第3のトランザクションデータをマルチプレクサ1012、1014、1016の第3の入力に送信し得る。
【0572】
例示の動作条件において、第1のアドレス処理論理1001及び第2のアドレス処理論理1003は、ストア命令1018、1020、1022を取得する。第1のアドレス処理論理1001及び第2のアドレス処理論理1003は、ストア命令1018、1020、1022のそれぞれに基づいて、第1から第3のトランザクションデータを生成する。第1のアドレス処理論理1001及び第2のアドレス処理論理1003は、第1~第3のトランザクションデータをマルチプレクサ1012、1014、1016に送信する。第2のアドレス処理論理1003は、ストア命令1018、1020、1022の各々に対応する読み出しバンク要求又は書き込みバンク要求のいずれかを送信する。
【0573】
例示の動作条件において、第1の調停論理1008は、ストア命令1018、1020、1022のうちの1つ(又は複数)がメインキャッシュストアキュー212の1つ又は複数のバンクを読み出すこと、又はメインストレージ214の1つ又は複数のバンクに書き込むことを要求しているかどうかを判定する。例示の動作条件において、第1の調停論理1008は、書き込み動作よりも読み出し動作を優先させる。例示の動作条件において、ストアキュー212のバンクは、ストアキュー212が満たされたことに応答して、ストアキューフル信号(FULL_SIG[i])1030の例を生成し得る。例示の動作条件において、ストアキュー212のバンクは、完全データ書き込み信号例(COMLETE_DATA_WR_SIG[i])1032を生成し得る。
【0574】
例えば、第1のストア命令1018はバンク0~4の書き込み動作に対応し得、第2のストア命令1020はバンク5~9の読み出し動作に対応し得、第3のストア命令1022は、バンク10~14の読み出し動作に対応し得る。第2の調停論理1010は、バンク0~4の書き込みポート1024に第1のトランザクションデータを送信するためにDP0を割り振ることができる(例えば、WRITE PORT[0]、WRITE PORT[l]、WRITE PORT[2]など)。これは、他のデータ経路は、処理されるべき書き込み動作を要求していないためである。第2の調停論理1010は、第1のトランザクションデータを選択するように第1のマルチプレクサ1012に命令する信号(SEL[i])を生成することによってDP0を割り振ることができる。第1の調停論理1008は、第2のトランザクションデータをバンク5~9の読み出しポート1026(例えば、READ PORT[4]、READ PORT[5]、READ PORT[6]など)に送信するようにDMAを割り振ることができる。これは他のデータ経路がバンク5~9に関連して処理されるべき読み出し動作を要求していないからである。第1の調停論理1008は、第2のトランザクションデータを選択するように第2のマルチプレクサ1014に命令する信号(SEL[i])を生成することによってDMAを割り振ることができる。第1の調停論理1008は、第3のトランザクションデータをバンク10~14の読み出しポート1026(例えば、READ PORT[9]、READ PORT[10]、READ PORT[11]など)に送信するようにDP1を割り振ることができる。これは他のデータ経路がバンク10~14に関連して処理されるべき読み出し動作を要求していないからである。第1の調停論理1008は、第3のトランザクションデータを選択するように第3のマルチプレクサ1016に命令する信号(SEL[i])を生成することによってDP1を割り振ることができる。このような例では、バンク15はデータ経路のいずれにも割り当てられない。
【0575】
例示の動作条件において、第1のストア命令1018が分割されたバンク0~4の書き込み動作に対応する場合、第1の調停論理1008は、書き込み動作を遅延させ及び/又はそうでなければストールさせ得る。例えば、書き込み動作の第1の部分がメインキャッシュストアキュー212への書き込みに関連付けられ、書き込み動作の第2の部分がメインストレージ214からの読み出しに関連付けられている場合、第1の調停論理1008は第2の調停論理1010に対して、書き込みポート1024に第1のトランザクションデータを処理しない及び/又は他の方式で割り振らないように命令し得る。
【0576】
例示の動作条件において、第1のストア命令1018が分割されたバンク0~4に対する書き込み動作に対応する場合、メインキャッシュストアキュー212は、完全なデータが書き込みのためにアセンブルされたときに、第1の調停論理408に書き込み動作を処理するように指令し得る。例えば、書き込み動作の第1の部分がメインキャッシュストアキュー212への書き込みに関連付けられ、書き込み動作の第2の部分がメインキャッシュストアキュー212又はメインストレージ214の少なくとも1つからの読み出しに関連付けられている場合、第1の調停論理1008は、読み出し/書き込みポート1028に第1のトランザクションデータを割り振るのを待機することができる。このような例では、メインキャッシュストアキュー212内の第2の部分に関連するデータの位置特定に応答して、メインキャッシュストアキュー212は配置されたデータをメインストレージ214に搬送し得る。メインストレージ214へのデータの搬送に応答して、メインキャッシュストアキュー212は、書き込み動作に必要なデータの完全なセットが読出され及び/又は処理のためにアセンブルされているので、書き込み動作を処理するように第1の調停論理1010に命令するCOMPLETE_DATA_WR_SIG[i]のための信号(例えば、論理高信号をアサートする)を生成し得る。
【0577】
図10Bは、例示のデータキャッシュシステム1000bの概略図である。データキャッシュシステム1000bは、
図1、
図2、及び/又は
図3のL1キャッシュ110、又はその一部の例示の実装とし得る。データキャッシュシステム1000bは、
図7Aのカプセル化されたデータキャッシュシステム700の第1の例示のバンク(ENCAPSULATED DATA CACHE SYSTEM BANK[i])1002bを含む。例えば、第1のバンク1002bは、
図7AのVICTIM CACHE STORE QUEUE:BANK1及びVICTIM STORAGE:BANK1に対応し得る。第1のバンク1002bは、
図2の犠牲キャッシュストアキュー216の第1の例示の犠牲キャッシュストアキューバンク1004bを含み、これは、
図7AのVICTIM CACHE STORE QUEUE:BANK1の例示の実装とし得る。第1のバンク1002bは
図2の犠牲ストレージ218の第1の例示の犠牲ストレージバンク1006bを含み、これは、
図7AのVICTIM STORAGE:BANK1の例示の実装とし得る。
【0578】
データキャッシュシステム1000bは、第1の例示のアドレス処理論理1001b、第2の例示のアドレス処理論理1003b、例示の調停論理1008b、1010b、及び例示のマルチプレクサ論理1012b、1014b、1016bを含む。調停論理1008b、1010bは、第1の例示の調停論理(例えば、第1のアービタ)1008bと、第2の例示の調停論理(例えば、第2のアービタ)1010bとを含む。第1の調停論理1008bは、犠牲ストレージ読み出し/書き込みアービタ(VS R/W ARB[i])であり、第2の調停論理1010bは、犠牲キャッシュストアキュー(STQ_V WRITE ARB[i])である。
図10Bの図示される例の例示の調停論理1008b、1010bは、例えば、ハードウェアプロセッサなどの論理回路によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。
図10Bの図示される例の例示のマルチプレクサ論理1012b、1014b、1016bは、例えばハードウェアプロセッサなどの論理回路によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。
【0579】
マルチプレクサ論理1012b、1014b、1016bは、第1の例示のマルチプレクサ(MUX1[i])(例えば第1のマルチプレクサ論理回路)1012bと、第2の例示のマルチプレクサ(MUX2[i](例えば第2のマルチプレクサ論理回路)1014bと、第3の例示のマルチプレクサ(MUX3[i])(例えば第3のマルチプレクサ論理回路)1016b)とを含む。マルチプレクサ1012b、1014b、1016bは、選択入力(SEL[i])、データ入力(1~3)、及び出力を有する。
【0580】
マルチプレクサ1012b、1014b、1016bの第1のデータ入力(データ入力1)は、アドレス処理論理1001b、1003bに結合される。マルチプレクサ1012b、1014b、1016bの第2のデータ入力(データ入力2)は、アドレス処理論理1001b、1003bに結合される。マルチプレクサ1012b、1014b、1016bの第3のデータ入力(データ入力3)は、アドレス処理論理1001b、1003bに結合される。
【0581】
第1のマルチプレクサ1012bの選択入力は、第2の調停論理1010bの出力に結合される。第2のマルチプレクサ1014bの選択入力及び第3のマルチプレクサ1016bの選択入力は、第1の調停論理1008bの出力に結合される。第1のマルチプレクサ1012bの出力は、第1の犠牲キャッシュストアバンク1004bの例示の書き込みポート(WRITE PORT[i])1024bに結合される。第2のマルチプレクサ1014bの出力は、第1の犠牲キャッシュストアバンク1004bの例示の読み出しポート(READ PORT[i])1026bに結合される。第3のマルチプレクサ1016bの出力は、第1の犠牲ストレージバンク1006bの例示の読み出し/書き込みポート(READ/WRITE PORT[i])1028bに結合される。第1の調停論理1008bは、アドレス処理論理1001b、1003b、第2の調停論理1010b、及び第1の犠牲キャッシュストアキューバンク1004bの出力に結合される。
【0582】
図10BのSTQ_V[i]は、犠牲キャッシュストアキュー216のマルチバンク実装の単一バンクを表す。例えば、犠牲キャッシュストアキュー216は、16バンクを有する犠牲キャッシュストアキュー216を表すSTQ_V[0]~STQ_V[15]を有し得る。このような例では、STQ_V[0]~STQ_V[15]の各々に64ビット(すなわち8バイト)を格納し得る。このような幾つかの例において、STQ_V[0]~STQ_V[15]、及び/又は、より一般的には犠牲キャッシュストアキュー216は、24,576ビット(すなわち、3072バイト)を格納し得る。代替として、STQ_V[0]~STQ_V[15]の各々が異なる量のビットを格納し得、そのため、犠牲キャッシュストアキュー216は異なる量のビットを格納し得る。
【0583】
第1のバンク1002bを含む複数のバンクは、カプセル化されて、カプセル化されたデータキャッシュシステム1034bを形成及び/又は生成し得る。例えば、カプセル化されたデータキャッシュシステム1034bは、
図7Aのカプセル化されたデータキャッシュシステム700の例示の実装とし得る。有利にも、犠牲キャッシュストアキュー216及び犠牲ストレージ218の各対応するバンクは、外部システムと相互作用するときに簡略化のために、例示のカプセル化されたデータキャッシュバンク1036bを形成及び/又はその他の方式で生成するために共にカプセル化し得る。カプセル化されたデータキャッシュバンク1036bの各々は、例示のカプセル化された書き込みポート(WRITE PORT(STQ_V[i])1038b、例示のカプセル化された読み出しポート(READ PORT(STQ_V[i])1040b)、及び例示のカプセル化された読み出し/書き込みポート(READ/WRITE PORT MS[i])1042bを含む。
【0584】
アドレス処理論理1001b、1003bは、
図1のCPU102の
図1のインタフェースの1つから、例示のストア命令1018b、1020b、1022bを取得し得る。ストア命令1018b、1020b、1022bは、WDATA、ADDR、BYTEN、SIZE、及びR/Wなどの例示のデータを含む。WDATAは、犠牲キャッシュストアキュー216又は犠牲ストア218のうちの少なくとも1つに書き込まれ及び/又はその他の方式で格納されるデータ(例えば、64ビットのデータ)に対応する。ADDRは、犠牲キャッシュストアキュー216又は犠牲ストレージ218の少なくとも1つに関連するデータアドレスに対応する。BYTENは、バイトイネーブルデータに対応する。SIZEは、データアクセス動作(例えば、読み出し動作、書き込み動作、変更動作など、及び/又はそれらの組み合わせ)のデータサイズに対応する。R/Wは、ストア命令が読み出し動作であるか書き込み動作であるかに対応する。
【0585】
ストア命令1018b、1020b、1022bは、第1の例示のストア命令(SCALAR_DP(DP0))1018b、第2の例示のストア命令(DMA)1020b、及び第3の例示のストア命令(VECTOR_DP(DP1))1022bを含む。第1のストア命令1018bは、
図1のスカラーインタフェース(例えば、
図2のCPUインタフェース202)から送信され、そのため、データキャッシュシステム1000bのスカラーデータ経路(SCALAR_DP(DP1))に対応する。第2のストア命令1020bは、ダイレクトメモリアクセス(DMA)インタフェースなどの
図1のメモリインタフェースから送信され、そのため、DMAデータ経路に対応する。第3のストア命令1022bは、
図1のベクトルインタフェース(例えば、
図2のCPUインタフェース202)から送信され、そのため、データキャッシュシステム1000bのベクトルデータ経路(VECTOR_DP(DP1))に対応する。
【0586】
アドレス処理論理1001b、1003bは、犠牲キャッシュストアキュー216又は犠牲ストレージ218の少なくとも1つに関連するデータアクセス動作を実行するために用いられ得るトランザクションデータ(TRANSACTION_DP0[i]、TRANSACTION DMA[i]、TRANSACTION DP1[i])を生成し得る。第1のアドレス処理論理1001bは、ストア命令1018b、1020b、1022bのそれぞれ1つ(又は複数)からWDATAを抽出し得、幾つかの例において回転し得、抽出された及び/又は回転されたWDATAを、マルチプレクサ1012b、1014b、1016bのそれぞれの第1の入力に送信し得る。例えば、第1のアドレス処理論理1001bは、第1のストア命令1018bから第1のWDATAを抽出し得、回転させ得、第1の抽出され回転させられたWDATAを、第1のマルチプレクサ1012bの第1の入力、第2のマルチプレクサ1014bの第1の入力、及び第3のマルチプレクサ1016bの第1の入力に送信し得る。
【0587】
第2のアドレス処理論理1003bは、犠牲キャッシュストアキュー216又は犠牲ストレージ218の少なくとも1つの16個のバンクのうちの1つ又は複数のバンクのアドレス(MS/STQ_V_ADDR[i])を判定し得る。アドレスは、ストア命令1018b、1020b、1022bに含まれるADDRデータに基づき得る。第2のアドレス処理論理1003bは、ストア命令1018b、1020b、1022bに含まれるBYTENデータに基づいて、バンク毎のバイトイネーブル値(BYTEN/BANK[i])を判定し得る。第2のアドレス処理論理1003bは、ストア命令1018b、1020b、1022bに含まれるR/Wデータに基づいて、書き込みバンク要求(WR_BANK_REQ[i])及び/又は読み出しバンク要求(RD_BANK_REQ[i])を判定し得る。
【0588】
アドレス処理論理1001b、1003bは、ストア命令1018b、1020b、1022bのそれぞれについて、トランザクションデータを判定し得る。トランザクションデータには、回転されたWDATAデータ、MS/STQ_V_ADDR[i]、及びBYTEN/BANK[i]を含み得る。例えば、アドレス処理論理1001b、1003bは、第1のストア命令1018bに基づいて第1のトランザクションデータ(TRANSACTION_DP0[i])を、第2のストア命令1020bに基づいて第2のトランザクションデータ(TRANSACTION_DMA[i])を、及び第3のストア命令1022bに基づいて第3のトランザクションデータ(TRANSACTION_DP1[i])を生成し得る。このような例では、アドレス処理論理1001b、1003bは、第1のトランザクションデータをマルチプレクサ1012b、1014b、1016bの第1の入力に送信し、第2のトランザクションデータをマルチプレクサ1012b、1014b、1016bの第2の入力に送信し、第3のトランザクションデータをマルチプレクサ1012b、1014b、1016bの第3の入力に送信し得る。
【0589】
例示の動作条件において、アドレス処理論理1001b、1003bは、ストア命令1018b、1020b、1022bを取得する。アドレス処理論理1001b、1003bは、ストア命令1018b、1020b、1022bのそれぞれに基づいて、第1から第3のトランザクションデータを生成する。アドレス処理論理1001b、1003bは、第1から第3のトランザクションデータをマルチプレクサ1012b、1014b、1016bに送信する。第2のアドレス処理論理1003bは、ストア命令1018b、1020b、1022bのそれぞれに対応する読み出しバンク要求又は書き込みバンク要求のいずれかを送信する。
【0590】
例示の動作条件において、第1の調停論理1008bは、ストア命令1018b、1020b、1022bのうちの1つ(又は複数)が犠牲キャッシュストアキュー216の1つ又は複数のバンクを読み出すこと又は犠牲ストレージ218の1つ又は複数のバンクに書き込むことを要求しているかどうかを判定する。例示の動作条件において、第1の調停論理1008bは、書き込み動作よりも読み出し動作を優先させる。例示の動作条件において、犠牲キャッシュストアキュー216のバンクは、犠牲キャッシュストアキュー216がいっぱいになったことに応答して、例示のストアキューフル信号(FULL_SIG[i])1030bを生成し得る。例示の動作条件において、犠牲キャッシュストアキュー216のバンクは、例示の完全データ書き込み信号(COMLETE_DATA_WR_SIG[i])1032bを生成し得る。
【0591】
例えば、第1のストア命令1018bはバンク0~4の書き込み動作に対応し得、第2のストア命令1020bはバンク5~9の読み出し動作に対応し得、第3のストア命令1022bは、バンク10~14の読み出し動作に対応し得る。第2の調停論理1010bは、第1のトランザクションデータをバンク0~4の書き込みポート1024b(例えば、WRITE PORT[0]、WRITE PORT[1]、WRITE PORT[2]など)に送信するようにDP0を割り振ることができる。第2の調停論理1010bは、第1のトランザクションデータを選択するように第1のマルチプレクサ1012bに命令する信号(SEL[i])を生成することによってDP0を割り振ることができる。第1の調停論理1008bは、第2のトランザクションデータをバンク5~9の読み出しポート1026b(例えば、READ PORT[4]、READ PORT[5]、READ PORT[6]など)に送信するようにDMAを割り振ることができる。これは他のデータ経路がバンク5~9に関連して処理されるべき読み出し動作を要求していないからである。第1の調停論理1008bは、第2のトランザクションデータを選択するように第2のマルチプレクサ1014bに命令する信号(SEL[i])を生成することによってDMAを割り振ることができる。第1の調停論理1008bは、バンク10~14の読み出しポート1026b(例えば、READ PORT[9]、READ PORT[10]、READ PORT[11]など)に第3のトランザクションデータを送信するようにDP1を割り振ることができる。これはバンク10~14に関連して処理されるべき読み出し動作を要求する他のデータ経路がないためである。第1の調停論理1008bは、第3のトランザクションデータを選択するように第3のマルチプレクサ1016bに命令する信号(SEL[i])を生成することによってDP1を割り振ることができる。このような例では、バンク15はデータ経路のいずれにも割り当てられない。
【0592】
例示の動作条件において、第1のストア命令1018bが分割されたバンク0~4の書き込み動作に対応する場合、第1の調停論理1008bは、書き込み動作を遅延させ及び/又はそうでなければストールさせ得る。例えば、書き込み動作の第1の部分が犠牲キャッシュストアキュー216への書き込みに関連し、書き込み動作の第2の部分が犠牲ストレージ218からの読み出しに関連する場合、第1の調停論理1008bは、第2の調停論理1010bに、第1のトランザクションデータを処理しないように及び/又はその他の方式で第1のトランザクションデータを書き込みポート1024bに割り振らないように命令し得る。
【0593】
例示の動作条件において、第1のストア命令1018bが分割されたバンク0~4の書き込み動作に対応する場合、犠牲キャッシュストアキュー216は、完全なデータが書き込みのためにアセンブルされたときに、書き込み動作を処理するように第1の調停論理1008bに命令し得る。例えば、書き込み動作の第1の部分が犠牲キャッシュストアキュー216への書き込みに関連付けられ、書き込み動作の第2の部分が犠牲キャッシュストアキュー216又は犠牲ストレージ218の少なくとも1つからの読み出しに関連付けられている場合、第1の調停論理1008bは、読み出し/書き込みポート1028bに第1のトランザクションデータを割り振るのを待機することができる。このような例では、犠牲キャッシュストアキュー216内の第2の部分に関連するデータの位置を特定することに応答して、犠牲キャッシュストアキュー216は位置決めされたデータを犠牲ストレージ218に搬送し得る。犠牲ストレージ218へのデータの搬送に応答して、犠牲キャッシュストアキュー216は、COMPLETE_DATA_WR_SIG[i]のための信号(例えば、論理高信号をアサートする)を生成し得、書き込み動作に必要なデータの完全なセットが読出され及び/又は処理のためにアセンブルされているので、書き込み動作を処理するように第1の調停論理1010bに命令する。
【0594】
図11Aでは、例示のレース1102a、1102b、1102c、1102d、1102eが、犠牲キャッシュストアキュー216によって取得された情報(例えば、バイト、ビットなど)を格納するように構成される電子デバイスである。例示のラッチ1102a~cは、書き込みデータと、書き込みデータが、演算構成要素404、アトミックユニット406、及び/又はRMWマージ構成要素408内のECC論理310からの読み出され訂正されたデータと結合される必要があるかどうかに対応する情報とを渡す。
図11Aの例では、ラッチ1102aが読み出し、書き込み、及び/又は変更命令を取得するために、キャッシュコントローラ220に通信可能に結合される。このような読み出し、変更、及び/又は書き込み命令は、CPU102から発せられ、キャッシュコントローラ220を介してラッチ1102aに送信される。ラッチ1102aは、ラッチ1102b、タグRAM210、調停マネージャ1114、及びペンディングのストアアドレスデータストア1116に結合されて、キャッシュコントローラ220の後続のクロックサイクルに応答して、そのような読み出し、変更、及び/又は書き込み命令を、ラッチ1102b、タグRAM210、調停マネージャ1114、及びペンディングのストアアドレスデータストア1116に送信する。
【0595】
図11Aの例では、ラッチ1102bが、ラッチ1102a、保留中ストアアドレスデータストア1116、ラッチ1102c、優先順位マルチプレクサ1118、及びコンパレータ1120に結合され、キャッシュコントローラ220の後続のクロックサイクルに応答して、取得された読み出し、変更、及び/又は書き込み命令を送信する。このようにして、読み出し、変更、及び/又は書き込み命令から得られた値(例えば、バイト値、ビット値など)は、犠牲キャッシュストアキュー216を介して伝搬する。
【0596】
例示のラッチ1102cは、ラッチ1102b、優先順位マルチプレクサ1118、演算構成要素1104、アトミック比較構成要素1106、及び読み出し・変更・書き込み・マージ構成要素1108に結合されている。この結合により、ラッチ1102cは、キャッシュコントローラ220の後続のクロックサイクルに応答して、読み出し、変更、及び/又は書き込み命令から得られた値(例えば、バイト値、ビット値など)を、演算構成要素1104、アトミック比較構成要素1106、及び/又は読み出し・変更・書き込み・マージ構成要素1108に送信し得る。本明細書において説明する幾つかの例において、ラッチ1102cが読み出し、変更、及び/又は書き込み命令から得られた値(例えば、バイト値、ビット値など)を、演算構成要素1104、アトミック比較構成要素1106、及び/又は読み出し・変更・書き込み・マージ構成要素1108のうちの1つ又は複数に送信し得る。例えば、キャッシュコントローラ220が現在格納されているワードにビットを書き込む命令を送信する場合、ラッチ1102cは、読み出し、変更、及び/又は書き込み命令から得られた値(例えば、バイト値、ビット値など)を読み出し・変更・書き込み・マージ構成要素1108に送信し得る。本明細書において説明する他の例において、キャッシュコントローラ220は、ビットを現在格納されているワードに書き込む命令を送信し得るが、ラッチ1102cは、読み出し、変更、及び/又は書き込み命令から得られた値(例えば、バイト値、ビット値など)を、演算構成要素1104、アトミック比較構成要素1106、及び/又は読み出し・変更・書き込み・マージ構成要素1108に送信し得る。
【0597】
例示のラッチ1102dは、第1のマルチプレクサ1110、ECC生成器1112、及びラッチ1102eに結合されている。この結合により、ラッチ1102dは、キャッシュコントローラ220の後続のクロックサイクルに応答して、第1のマルチプレクサ1110から得られた値をECC生成器1112及び/又はラッチ1102fに転送し得る。
【0598】
例示のラッチ1102eは、優先順位マルチプレクサ1118、及び
図3及び/又は
図11AのMUX回路316に結合されている。この結合により、ラッチ1102eは、キャッシュコントローラ220の後続のクロックサイクルに応答して、優先順位マルチプレクサ1118から得られた値をMUX回路316に転送し得る。例えば、犠牲ストレージ要素218にヒットするアドレスへのCPU102による読み出し動作では、同じアドレスへの以前の書き込みが依然としてインフライトである(例えば、犠牲ストレージ要素218に完全には書込まれていない)可能性がある。このような例では、ラッチ1102は、書き込まれていないデータバイトを収集し、それをMUX316に提供し、最終的にCPU102に送り戻される。
【0599】
例示のマージ回路1103aは、ラッチ1102d、マージ回路1103b、演算構成要素1104、アトミック比較構成要素1106、及び読み出し・変更・書き込み・マージ構成要素1108に結合されている。例示のマージ回路1103bは、マージ回路1103a、優先順位マルチプレクサ1118、及びマージ回路1103cに結合されている。例示のマージ回路1103cは、マージ回路1103b及びラッチ1102bに結合されている。例示のマージ回路1103a~cにより、後に詳述するように、犠牲キャッシュキュー216の異なるセクションでの読み出し動作の比較が容易になり、同じメモリアドレスロケーションに対応する書き込み動作とマージされるべき書き込み動作を再配路し得る。
図11Aの例は3つのマージ回路1103a~cを含むが、犠牲キャッシュストアキュー216の他のセクションからの書き込み動作をマージするための付加的なマージ回路(例えば、ラッチ1102dの出力をラッチ1102b及び/又はラッチ1102aの出力に結合するマージ回路など)があり得る。幾つかの例において、マージ回路1103a~cは、異なるラッチ1102b~dからの書き込み動作を比較し、異なるラッチ1102b~dのうちの任意の2つ又はそれ以上における一致するメモリアドレスに基づいて再配路する単一の回路に結合される。
【0600】
図11Aに図示される例では、演算構成要素1104は、ラッチ1102c、第1のマルチプレクサ1110、及びECC論理312に結合されて、犠牲ストレージ218からのデータに対して演算動作(例えば、増分、減分など)を実施する。また、演算構成要素1104は、犠牲ストレージ218に格納されたデータに対してヒストグラム演算を行う。
図11Aに図示される例の例示の演算構成要素1104は、例えばハードウェアプロセッサなどの論理回路によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。例示の演算構成要素1104の動作は、以下で更に記載される。
【0601】
図11Aに図示される例では、アトミック比較構成要素1106は、ラッチ1102c、第1のマルチプレクサ1110、及びECC論理312に結合されて、メモリアドレスのデータを鍵と比較し、メモリアドレスのデータが鍵と一致する場合にはデータを置換する。
図11Aに図示される例の例示のアトミック比較構成要素1106は、例えば、ハードウェアプロセッサなどの論理回路によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。例示のアトミック比較構成要素1106の動作は、以下で更に記載される。
【0602】
図11Aに図示されている実施形態では、読み出し・変更・書き込み・マージ構成要素1108は、キャッシュコントローラ220によって送られる読み出し、変更、及び/又は書き込み命令を容易にするために、ラッチ1102c、第1のマルチプレクサ1110、及びECC論理312に結合されている。例えば、読み出し・変更・書き込み・マージ構成要素1108は読み出し、変更、及び/又は書き込み命令の影響を受ける現在格納されているワードを取得するために、ECC論理312に結合される。例示の書き込み動作では、読み出し・変更・書き込み・マージ構成要素1108は、ECC論理312から取得された現在格納されているワードを、ラッチ1102cから取得された新しいビット、バイトなどで更新するように構成される。読み出し・変更・書き込み・マージ構成要素1108の更なる記載は、以下で記載されている。
図11Aに図示される例の例示の読み出し・変更・書き込み・マージ構成要素1108は、例えば、ハードウェアプロセッサなどの論理によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。
【0603】
例示の第1のマルチプレクサ1110は、キャッシュコントローラ220からの指示に基づいて、演算構成要素1104、アトミック比較構成要素1106、又は読み出し・変更・書き込み・マージ構成要素1108のいずれかの出力をラッチ1102dに送信するために、演算構成要素1104、アトミック比較構成要素1106、及び読み出し・変更・書き込み・マージ構成要素1108に結合される。例えば、キャッシュコントローラ220が書き込み機能を実施することを示す(例えば、キャッシュ制御がラッチ1102bに書き込み要求を送信する)場合、キャッシュコントローラ220によって第1のマルチプレクサ1110に指示が送信されて、ラッチ1102dに送信される読み出し変更書き込みマージ構成要素1108に接続された入力が選択される。
図11Aに図示される例の例示の第1のマルチプレクサ1110は、例えばハードウェアプロセッサなどの論理回路によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。
【0604】
図11Aに図示される例では、ECC生成器1112は、ラッチ1102d及びラッチ1102fに結合されて、ラッチ1102dに格納された値(例えば、バイト、ビットなど)のエラー検出及び訂正を容易にする。例えば、ECC生成器1112は、データ(例えば、読み出し・変更・書き込み・マージ構成要素1108からのマージされたワード)と共に格納されるECC値を再生成する(例えば、エラー検出符号を生成する)ように構成される。ECC値は、上述したように、エラー検出及び訂正回路によって用いられて読み出し及び/又は書き込み動作中にエラーが発生したかどうかを判定する。
図11Aに図示される例の例示のECC生成器1112は、例えば、ハードウェアプロセッサなどの論理によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。
【0605】
図11Aでは、例示の調停マネージャ1114は、ラッチ1102a、ラッチ1102b、ペンディングのストアアドレスデータストア1116、及び犠牲ストレージ218に結合されて、キャッシュコントローラ220から取得された読み出し命令、変更命令、及び/又は書き込み命令を容易にする。例えば、キャッシュコントローラ220から書き込み命令が受け取られた場合、調停マネージャ1114は、現在格納されている対応するワードの読み出し命令を犠牲ストレージ218に送信するように構成される。更に、調停マネージャ1114は、犠牲ストレージ218に結合されて、犠牲ストレージ218の競合するアクセス間の調停を行う。複数の動作が同じサイクルで犠牲ストレージ218にアクセスしようと試みるとき、調停マネージャ1114は、優先順位スキームに従って、1つ又は複数のどの動作が犠牲ストレージ218にアクセスすることを許可されるかを選択し得る。適切な優先順位方式は以下でより詳細に説明されるが、一例では、犠牲キャッシュストアキュー216内にある書き込みデータが犠牲ストレージ218に書き込まれる前であっても、後続の動作によって使用可能であるため、調停は書き込み動作よりも読み出し動作を優先する。したがって、書き込みデータを犠牲キャッシュストアキュー216内で待機させることにおいて、性能への影響は最小限である。しかしながら、犠牲キャッシュストアキュー216は、まだ書き込みされていない書き込みデータでいっぱいになると、競合する読み出し動作よりも優先されるまで、書き込み動作の優先順位が高くなる可能性がある。
【0606】
図11Aに図示される例の例示の調停マネージャ1114は、例えばハードウェアプロセッサなどの論理回路によって実装される。しかしながら、例えば、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、フィールドプログラマブル論理デバイス(FPLD)、デジタル信号プロセッサ(DSP)など、任意の他のタイプの回路を付加的に又は代替として用いてもよい。
【0607】
図11Aの例では、ペンディングのストアアドレスデータストア1116は、キャッシュコントローラ220から取得された読み出し、変更、及び/又は書き込み命令のアドレスを格納するように構成されている。このようにして、ペンディングのストアアドレスデータストア1116は、ラッチ1102a、1102b、1102c、1102d、1102e、1102f、1102g、及び/又は1102hのいずれかに格納された各値に関連するアドレスのログを維持する。
図11Aの図示される例の例示のペンディングのストアアドレスデータストア1116は、例えば、フラッシュメモリ、磁気媒体、オプティカル媒体など、データを格納するための任意のデバイスによって実装され得る。また、ペンディングのストアアドレスデータストア1116に格納されるデータは、バイナリデータ、カンマ区切りデータ、タブ区切りデータ、構造化問い合わせ言語(SQL)構造などの任意のデータフォーマットであり得る。
【0608】
例示の優先順位マルチプレクサ1118は、ラッチ1102b、ラッチ1102c、ラッチ1102d、及びラッチ1102fに結合されて、ラッチ1102b、ラッチ1102c、ラッチ1102d、又はラッチ1102fのいずれかが書き込み命令に対応する値を格納している場合の読み出し動作を容易にする。例えば、キャッシュコントローラは、アドレスA3、A2、A1、及びA0を有する4ビット・ワードに関する以下の4つの書き込み命令を開始し得る。即ち、バイト0x11を有する書き込みアドレスA0、バイト0x22を有する書き込みアドレスA1、バイト0x23を有する書き込みアドレスA3、及びバイト0x44を有する書き込みアドレスA0である。このような例では、キャッシュコントローラ220は、4ビットワード全体を読み出すための読み出し命令を開始する場合、優先順位マルチプレクサ1118は、ラッチ1102fに格納されたバイト値0x11、ラッチ1102dに格納されたバイト値0x22、ラッチ1102cに格納されたバイト値0x23、及びラッチ1102bに格納されたバイト値0x22を取得するように構成される。また、ペンディングのストアアドレスデータストア1116は、どのアドレス値がラッチ1102b、ラッチ1102c、ラッチ1102d、及びラッチ1102fに格納されたバイト値に関連付けられているかを示す命令を優先順位マルチプレクサ1118に送信する。このような例では、ラッチ1102bに格納されたバイト値がアドレスA0に関連付けられ、ラッチ1102fに格納されたバイト値もアドレスA0に関連付けられるので、優先順位マルチプレクサ1118は、アドレスA0が0x44(例えば、アドレスA0に関連付けられたもっとも最近の書き込み命令)であり、アドレスA1が0x22であり、アドレスA3が0x23であることを示すパケットをラッチ1102eに送信するように構成される。
【0609】
このようにして、MUX回路316は、現在格納されているワードの値を、優先順位マルチプレクサ1118から得られたバイト値で更新するように構成される。このような動作は、書き込み命令が犠牲キャッシュストアキュー216を通して完全に伝搬されていなくても、犠牲キャッシュストアキュー216によって送信された読み出し命令が潜在的に正しいワードを示すことを保証する。
【0610】
例示の読み出し経路(例えば、タグRAM210への読み出し入力)は、犠牲キャッシュストアキュー216と並行して存在し得る。読み出し動作(例えば、読み出し命令)はまだ完了していない可能性がある書き込み動作(例えば、書き込み命令)内のデータを参照する可能性があるため、犠牲キャッシュストアキュー216は、読み出し経路が犠牲ストレージ218にまだ書き戻されていないデータを犠牲キャッシュストアキュー216から取得することを可能にする書き込み転送機能を含み得る。一例では、犠牲キャッシュストアキュー216は、犠牲キャッシュストアキュー216の各ステージにおける動作のアドレスを記録するペンディングのストアアドレスデータストア1116、犠牲キャッシュストアキュー216のステージ(例えば、ラッチ)のうちの1つからのデータを転送のために選択する優先順位マルチプレクサ1118、及び、犠牲ストア218の出力(エラー検出及び訂正回路312による)と、データ優先順位マルチプレクサ1118からの転送された犠牲キャッシュストアキュー216のデータとの間で選択するMUX回路316を含む。
【0611】
例示の書き込みポート1126は、書き込み経路及びラッチ1102aに結合される。書き込みポート1126は書き込み命令を取得するために、犠牲キャッシュコントローラ224(例えば、キャッシュコントローラ220)とインタフェースするインタフェースによって実装され得る。例えば、書き込みポート1126は、書き込みのためにキャッシュコントローラ220からアドレス及び値を受け取るために利用される。
【0612】
次に、犠牲キャッシュストアキュー216を介した読み出し動作の例示のフローについて説明する。第1のサイクルにおいて、L1データキャッシュ110は、読み出し動作のアドレスに関連する記録をタグRAM210から検索して、データが犠牲ストレージ218に格納されているか否かを判定する。直接マップされる例では、L1データキャッシュ110は、犠牲ストレージ218からデータを要求する前にタグRAM210の比較を待つ必要がなく、そのため、タグRAM210の読み出し動作のアドレスとキャッシュされたアドレスの記録との比較は第2又は第3のクロックサイクルに延びてもよい。
【0613】
第2のサイクルにおいて、L1データキャッシュ110は、調停マネージャ1114が許可する場合、犠牲ストレージ218からデータ及びECCシンドロームビットを要求し得る。このサイクルにおいて、L1データキャッシュ110はまた、読み出しアドレスをペンディングのストアアドレスデータストア1116と比較することによって、より新しいデータが犠牲キャッシュストアキュー216内で利用可能であるかどうかを判定してもよい。その場合、優先順位マルチプレクサ1118は、犠牲キャッシュストアキュー216から適切なデータを転送するように設定される。
【0614】
データ及びECCは、第3のサイクルにおいて犠牲ストレージ218によって提供され得る。しかしながら、このデータは、L1データキャッシュ110がキャッシュの犠牲ストレージ218内の同じエントリに複数の拡張メモリアドレスを割り当てる可能性があるので、読み出し動作によって特定されるメモリアドレスに対応する場合もそうでない場合もある。したがって、第3のサイクルにおいて、L1データキャッシュ110は、タグRAM210記録の比較に基づいて、犠牲ストレージ218からの提供されたデータ及びECCが読み出し動作におけるメモリアドレスに対応するか否か(例えばキャッシュヒット)を判定する。キャッシュヒットの場合、データ及びECCビットは、エラー検出及び訂正回路312によって受け取られ、エラー検出及び訂正回路312は第4のサイクルにおいてデータのエラーを訂正する。
【0615】
上述したように、犠牲ストレージ218にまだ書き込まれていないより新しいデータが、犠牲キャッシュストアキュー216内に存在してもよく、優先順位マルチプレクサ1118によって犠牲キャッシュストアキュー216から転送されてもよい。もしそうであれば、MUX回路316は、犠牲ストレージ218からの訂正されたデータにわたって、転送されたデータを選択する。
【0616】
犠牲ストレージ218からの訂正されたデータ又は犠牲キャッシュストアキュー216から転送されたデータのいずれかが、第5のサイクルでL1データキャッシュ110に提供される。このようにして、コントローラ220は、約5サイクルでキャッシュヒットが発生した場合に、完全なECCチェック及び訂正をデータに提供し得る。
【0617】
データ及びECCビットが犠牲ストレージ218内に存在しない場合(例えば、キャッシュミス)、犠牲キャッシュストアキュー216は、データが拡張メモリ106及び/又は犠牲ストレージ218のいずれかから検索されるまでストールし得、その時点でデータが犠牲ストレージに書き込まれ、タグRAM210が更新され得る。
【0618】
図11Bは、例示の統合されたキャッシュストアキュー1124の概略図である。
図11Bに図示される例では、統合されたキャッシュストアキュー1124は、例示のメインキャッシュストアキュー212及び/又は犠牲キャッシュストアキュー216を実装し得る。このように、このトポロジーは、例示のメインキャッシュ読み出し及び書き込み入力1128と、例示の犠牲キャッシュ読み出し及び書き込み入力1130とを図示する。例えば、メインキャッシュ読み出し及び書き込み入力1128は、
図2及び/又は
図4の例示のメインキャッシュストアキュー212の例示の読み出し及び書き込み入力を実装し得、犠牲キャッシュ読み出し及び書き込み入力1130は、
図2及び/又は
図11Aの犠牲キャッシュストアキュー216の例示の読み出し及び書き込み入力を実装し得る。
図11Bの例では、メインキャッシュ読み出し及び書き込み入力1128は、犠牲キャッシュ読み出し及び書き込み入力1130とは別にパイプライン処理される。したがって、動作において、メインキャッシュ読み出し及び書き込み入力1128及び/又は犠牲キャッシュ読み出し及び書き込み入力1130は、CPU102から読み出し及び/又は書き込み命令を取得するように構成される。本明細書において説明される幾つかの例において、メインキャッシュ読み出し及び書き込み入力1128及び犠牲キャッシュ読み出し及び書き込み入力1130は、統合されたキャッシュストアキュー1124の入力と称される場合がある。
【0619】
統合されたキャッシュストアキュー1124は、例示の第1のパイプステージ(E2)1132、例示の第2のパイプステージ(E3)1134、及び例示の第4のパイプステージ(E4)1136を含む。このようにして、統合されたキャッシュストアキュー1124は、例示のデータパイプステージ1138及び1140並びに
図2のメインストレージ214及び犠牲ストレージ218を介して、第1のパイプステージ(E2)1132に結合される。
【0620】
動作において、CPU102は読み出し及び/又は書き込み命令を送信し、これは、第1のパイプステージ(E2)1132を介して、統合されたキャッシュストアキュー1124に入る。本明細書において説明される他の例において、統合されたキャッシュストアキュー1124は、キャッシュコントローラ220を介してCPU102から読み出し及び/又は書き込み命令を取得することができる。この時点で、例示のL1キャッシュ110は、入来読み出し及び/又は書き込み命令のアドレスを、メインキャッシュタグRAM208及び犠牲キャッシュタグRAM210と比較する。また、読み出し及び/又は書き込み命令がメインストレージ214又は犠牲ストレージ218のために意図されているかどうかの判定は、統合されたキャッシュストレージキュー1124にはまだ知られていない。
【0621】
CPU102又はキャッシュコントローラ202の後続のクロックサイクルに応答して、読み出し及び/又は書き込み命令が第3のパイプステージ(E3)1134に送信される。この時点で、L1キャッシュ110は、読み出し及び/又は書き込み命令がメインストレージ214又は犠牲ストレージ218のために意図されているかどうかを判定するか又は判定し終わっている。このような判定は、ヒット及び/又はミス信号として統合されたキャッシュストアキュー1124に送信される。
【0622】
図11Bでは、メインストレージ214の物理アドレスがCPU102アドレスの関数である。CPU102アドレスは、直接マップされたメインストレージ214のどのセットがCPU102アドレスにマップするかを判定する。
図11Bでは、メインストレージ214のサイズは32キロバイト(KB)であり、キャッシュラインサイズは128バイトであり、合計256セットである。そのため、CPU102の物理アドレスは、アドレスA0からアドレスA255までの範囲であり得る。
【0623】
図11Bにおいて、犠牲ストレージ216の物理アドレスは、以下の論理に基づく。まず、CPU102アドレスが、犠牲ストレージ216の16個のエントリ全てと比較される。CPU102アドレスが犠牲ストレージ216内のヒットに対応する場合、CPU102トランザクションがヒットするエントリの位置が物理アドレスである。
【0624】
しかしながら、CPU102アドレスがヒットに対応しない場合(例えば、ミスに対応する場合)、置換ポリシーは、犠牲ストレージ216内の位置を選択する。犠牲ストレージ216の物理アドレスは16個あるので、CPU102アドレスはA0からA15の範囲であり得る。
【0625】
図11Bの例では、CPU102アドレスがヒットであるかミスであるかに対応する情報が、統合されたキャッシュストアキュー1124に送られる。この情報に基づいて、CPU102によって取得された読み出し及び/又は書き込み命令は、統合されたキャッシュストアキュー1124のメインキャッシュストアキュー212又は統合されたキャッシュストアキュー1124の犠牲キャッシュストアキュー216のいずれかに入る。
【0626】
バンク調停のためのマルチバンクデータRAMキャッシュにおける読み出し・変更・書き込みのサポートのための例示の方法、装置、システム、及び製品が、本明細書において記載される。更なる例及びそれらの組み合わせには、以下のものが含まれる。
【0627】
例1はデータキャッシュシステムを含み、データキャッシュシステムは、複数のバンクキューを含むストアキューであって、複数のバンクキューが第1のバンクキューを含み、第1のバンクキューが書き込みポート及び読み出しポートを有し、書き込みポートが書き込み動作を受け取るように構成されるストアキューと、ストアキューに結合されるストレージであって、ストレージが複数のデータバンクを含み、複数のデータバンクが第1のデータバンクを含み、第1のデータバンクが書き込み動作又は読み出し動作を受け取るように構成されるストレージと、第1の選択入力及び第1の出力を有し、第1の出力が書き込みポートに結合される第1のマルチプレクサと、第2の選択入力及び第2の出力を有し、第2の出力が読み出しポートに結合される第2のマルチプレクサと、第3の選択入力及び第3の出力を有し、第3の出力が第1のポートに結合される第3のマルチプレクサと、複数の第1のアービタ及び複数の第2のアービタを含むバンク調停論理とを含み、複数の第1のアービタが1つの第1のアービタを含み、複数の第2のアービタが1つの第2のアービタを含み、第1のアービタが、第2のアービタ、第2の選択入力、及び第3の選択入力に結合され、第2のアービタが第1の選択入力に結合される。
【0628】
例2は、例1のデータキャッシュシステムを含み、第1のアービタの第1の入力に結合される第1のアドレス制御論理と、第2のアービタの第1の入力と、第1のマルチプレクサの第1の入力と、第2のマルチプレクサの第1の入力と、第3のマルチプレクサの第1の入力と、第3のマルチプレクサの第1の入力と、第1のアービタの第2の入力に結合される第2のアドレス制御論理と、第2のアービタの第2の入力と、第1のマルチプレクサの第2の入力と、第2のマルチプレクサの第2の入力と、第3のマルチプレクサの第2の入力と、第1のアービタの第3の入力に結合される第3のアドレス制御論理と、第1のマルチプレクサの第3の入力と、第2のマルチプレクサの第3の入力と、第3のマルチプレクサの第3の入力とを更に含む。
【0629】
例3は、例2のデータキャッシュシステムを含み、第1のアドレス制御論理の入力に結合される第1のインタフェースであって、スカラー経路に結合される第1のインタフェースと、第2のアドレス制御論理の入力に結合される第2のインタフェースであって
、ダイレクトメモリアクセス経路に結合される第2のインタフェースと、第3のアドレス制御論理の入力に結合される第3のインタフェースであって、ベクトル経路に結合される第3のインタフェースとを更に含む。
【0630】
例4は、例3のデータキャッシュシステムを含み、第1のインタフェースと第1のマルチプレクサの第1の入力と第2のマルチプレクサの第1の入力と第3のマルチプレクサの第1の入力とに結合される第1の書き込みデータ回転論理と、第2のインタフェースと第1のマルチプレクサの第2の入力と第2のマルチプレクサの第2の入力と第3のマルチプレクサの第2の入力とに結合される第2の書き込みデータ回転論理と、第3のインタフェースと第1のマルチプレクサの第3の入力と第2のマルチプレクサの第3の入力と第3のマルチプレクサの第3の入力とに結合される第3の書き込みデータ回転論理とを更に含む。
【0631】
例5は、例1のデータキャッシュシステムを含み、第1のバンクキューの第1の出力は、第1のアービタの第1の入力及び第2のアービタの第1の入力に結合される。
【0632】
例6は、例1のデータキャッシュシステムを含み、複数のバンクキューが第1の量であり、複数のデータバンクが第2の量であり、第1の量が第2の量と同じである。
【0633】
例7は、例1のデータキャッシュシステムを含み、ストレージはダイナミックランダムアクセスメモリであり、複数のデータバンクが16個のデータバンクを有し、16個のデータバンクの各々が64バイトのデータ幅を有する。
【0634】
例8は、カプセル化されたデータキャッシュシステムを含む。カプセル化されたデータキャッシュシステムは、それぞれの読み出しポートとそれぞれの書き込みポートとを有する複数のバンクキューと、読み出し動作又は書き込み動作を受け取るように構成されるそれぞれの第1のポートを有する複数のデータバンクとを含むカプセル化されたメモリと、カプセル化されたメモリに結合される読み出しポートであって、バンクキューのそれぞれの読み出しポートを表し、バンクキューの1つ又はそれ以上に格納された第1のデータを読み出すように構成される読み出しポートと、カプセル化されたメモリに結合される書き込みポートであって、バンクキューのそれぞれの書き込みポートを表し、データバンクの1つ又はそれ以上に第2のデータを書き込むように構成される書き込みポートと、カプセル化されたメモリに結合される第2のポートであって、データバンクのそれぞれの第1のポートを表し、データバンクの1つ又はそれ以上から第3のデータを読み出すか又は第4のデータを1つ又はそれ以上のデータバンクに書き込むように構成される第2のポートとを含む。
【0635】
例9は、例8のカプセル化されたデータキャッシュシステムを含み、選択入力と第1の出力とを有するマルチプレクサであって、第1の出力が読み出しポートに結合されるマルチプレクサと、選択入力に結合される調停論理とを更に含む。調停論理は、複数のインタフェースの第1のインタフェースをバンクキューの第1のバンクキュー及びデータバンクの第1のデータバンクに割り当てるためものであり、第1のインタフェースは、第1のインタフェースから読み出しポートにトランザクションデータを送信して、読み出しポートを呼び出して、第1のバンクキューからの第1のデータ又は第1のデータバンクからの第3のデータの少なくとも1つを読み出すためのものである。
【0636】
例10は、例9のカプセル化されたデータキャッシュシステムを含み、更に、第1のインタフェース及び調停論理に結合されるアドレス処理論理を含み、アドレス処理論理は、トランザクションデータに含まれるアドレスデータに基づいて第1のバンクキューを識別するためのものである。
【0637】
例11は、例9のカプセル化されたデータキャッシュシステムを含み、マルチプレクサは第1のマルチプレクサであり、選択入力は第1の選択入力であり、トランザクションデータは第1のトランザクションデータであり、更に、第2の選択入力と第2の出力とを有する第2のマルチプレクサを含み、第2の出力は第2のポートに結合され、調停論理は第2の選択入力に結合され、調停論理は、複数のインタフェースの第2のインタフェースをバンクキューの第2のバンクキュー及びデータバンクの第2のデータバンクに割り当てるためのものであり、第2のインタフェースは、第2のトランザクションデータを第2のインタフェースから第2のポートに送信して、第2のバンクキューからの第1のデータ又は第2のデータバンクからの第3のデータの少なくとも1つを読み出すためのものである。
【0638】
例12は、例11のカプセル化されたデータキャッシュシステムを含み、第2のポートは、第1の時間の間、第2のバンクキュー及び第2のデータバンクからデータを読み出すためのものであり、読み出しポートは、第1の時間の間、第1のバンクキューから第1のデータ又は第1のデータバンクからの第3のデータの少なくとも1つを読み出すためのものである。
【0639】
例13は、例9のカプセル化されたデータキャッシュシステムを含み、マルチプレクサは第1のマルチプレクサであり、選択入力は第1の選択入力であり、トランザクションデータは第1のトランザクションデータであり、調停論理は第1の調停論理であり、更に、第2の選択入力と第2の出力とを有する第2のマルチプレクサを含み、第2の出力は書き込みポートに結合され、第2の調停論理は第2の選択入力に結合され、第2の調停論理は、第1の調停論理が第2のインタフェースをデータバンクの第2のデータバンクに割り振らないことに応答して、複数のインタフェースの第2のインタフェースをバンクキューの第2のバンクキューに割り振らないためのものである。
【0640】
例14は、例8のカプセル化されたデータキャッシュシステムを含み、書き込みポートに結合される第1の調停論理と、読み出しポート、第1のポート、及び第1の調停論理に結合される第2の調停論理とを更に含み、第2の調停論理は、バンクキューが第2のデータを格納する容量を有することに応答して、書き込みポートに、第2のデータを1つ又はそれ以上のバンクキューに書き込ませるように、第1の調停論理に命令するためのものである。
【0641】
例15は、例8のカプセル化されたデータキャッシュシステムを含み、更に、書き込みポートに結合される第1の調停論理と、読み出しポート、第1のポート、及び第1の調停論理に結合される第2の調停論理とを含む。第2の調停論理は、1つ又はそれ以上のバンクキューから検索された第1のデータ又は1つ又はそれ以上のデータバンクから検索された第3のデータの少なくとも1つに応答して、書き込みポートに、第2のデータを1つ又はそれ以上のバンクキューに書き込ませるように第1の調停論理に命令するためのものである。
【0642】
例16は或る方法を含み、この方法は、プロセッサからの第1の命令に基づいて第1のトランザクションデータを、及び、プロセッサからの第2の命令に基づいて第2のトランザクションデータを生成することであって、第1のトランザクションデータが、第1のデータにアクセスするための第1の量のデータバンクを示し、第2のトランザクションデータが、第2のデータにアクセスするための第2の量を示す、第1のトランザクションデータ及び第2のトランザクションデータを生成することと、ストアキュー又はストレージのうちの少なくとも1つの、第1のデータバンク内の第1のデータアクセス動作のための第1のデータの位置特定することことと、ストアキュー又はストレージのうちの少なくとも1つの、第2のデータバンク内の第2のデータアクセス動作のための第2のデータの位置特定することことと、第1のデータバンクが第2のデータバンクとは異なることに応答して、第1のトランザクションデータを、第1のデータバンクに送信すべき第1のトランザクションデータと、第2のデータバンクに送信すべき第2のトランザクションデータとを割り振ることとを含む。
【0643】
例17は、例16の方法を含み、更に、第1のデータバンクが第2のデータバンクと同じであることに応答して、第1のデータアクセス動作又は第2のデータアクセス動作が読み出しデータ動作であるか書き込みデータ動作であるかを判定することと、第1のデータアクセス動作が読み出しデータ動作であり、第2のデータアクセス動作が書き込みデータ動作であることに応答して、第1のデータバンクに送信されるべき第1のトランザクションデータを割り振り、第2のトランザクションデータを送信されるよう割り振らないこととを含む。
【0644】
例18は、例16の方法を含み、第1のデータアクセス動作が、第1のデータバンクの1つ又は複数から第1のデータの第1の部分を読み出すことと、第1のデータの第2の部分を第2のデータバンクの1つ又は複数に書き込むこととを含み、第1のデータバンクは、第1のデータバンクのうちの1つ又は複数、或いは、第2のデータバンクのうちの1つ又は複数に含まれ、この方法は更に、ストアキューの第1のデータバンク内の第1の部分の位置特定に応答して、ストアキューの第1の部分をストアキューからストレージに送信することと、ストアキューから、ストレージに結合されている調停論理に制御信号を送信することと、調停論理が制御信号を取得することに応答して、第1の部分及び第2の部分をストレージに書き込むこととを含む。
【0645】
例19は、例16の方法を含み、第1のデータバンクはストアキューに含まれ、ストアキューが満杯であることに応答して、第1の送信されるべきトランザクションを第1のデータバンクに割り振らないように、ストアキューに結合される調停論理に命令することを更に含む。
【0646】
例20は、例16の方法を含み、第1の命令に基づいてデータアクセス動作データサイズを判定することと、第1の命令に基づいてデータストレージアドレスを判定することと、データアクセス動作データサイズ及びデータストレージアドレスを、アクセスされるべき第1の量のデータバンクにマップすることであって、第1の量のデータバンクが第1のデータバンク及び第2のデータバンクを含む、マップすることと、データアクセス動作が第1のデータバンクからの第1のデータの第1の部分を読み出すこと及び第1のデータの第2の部分を第2のデータバンクに書き込むことを含むと判定することとを更に含む。
【0647】
犠牲キャッシュにおける読み出し・変更・書き込み・サポートを容易にするための方法及び装置
【0648】
本明細書において説明する例では、犠牲ストレージ218が複数のメモリバンクを含み、各バンクは64ビット幅である。犠牲ストレージ218は、メインストレージ214と並列に結合されている。また、犠牲ストレージ218内のバンクは、2つの32ビットパリティブロックを含む。本明細書において記載される例では、ECCシンドロームの7ビットが32ビット当事者ブロックの各々に対して格納される。従って、全体的なバンク幅は118ビットである。本明細書において説明する他の例において、任意の適切なバンク幅を利用し得る。
【0649】
例示の動作において、キャッシュコントローラ220が犠牲事象ストレージ218に書き込み命令を送信する場合、及び、書き込み命令が犠牲事象ストレージ218上のパリティブロックと整合されていない場合、キャッシュコントローラ220は、読み出し・変更・書き込み動作を行うように犠牲キャッシュストアキュー216に示す。
【0650】
本明細書において説明する例では、連携して(in tandem)動作する2つのキャッシュシステム(例えば、メインストレージ214及び犠牲キャッシュストレージ218)がある。本明細書において説明される例では、メインストレージ214は、ダイレクトマップキャッシュ要素であり、犠牲キャッシュストレージ218は、フルアソシアティブキャッシュストレージである。エラー訂正符号(ECC)によって、直接マップされたメインストレージ214とフルアソシアティブ犠牲キャッシュストレージ218の両方が保護される。これにより、例示の応用例はメインストレージ214からラインを読み出すことを含み、ECC論理は、キャッシュラインを訂正し、ECCシンドロームを再生成し、次いで、ラインを犠牲キャッシュストレージ218に書き込み得る。そのような応用例は、CPUの2つの付加的なクロックサイクル(例えば、ECC論理によるエラー訂正のための1つのクロックサイクルと、ECCシンドローム再生のための別のクロックサイクル)を利用し得る。この待ち時間を低減するために、本明細書において説明する例は、メインストレージ214と犠牲キャッシュストレージ218との間で同じパリティ・ブロックサイズを利用することを含む。そのため、メインストレージ214及び犠牲キャッシュストレージ218の両方が、32ビット境界上のパリティを計算及び/又は他の方式で判定する。このようにして、L1キャッシュ110は、少ない待ち時間でキャッシュラインをメインストレージ214から犠牲キャッシュストレージ218に直接移動し得る。
【0651】
本明細書において説明される例では、L1データキャッシュ110は、キャッシュからデータを読み出し、それを書き換える前にデータに変更を加える多数の動作をサポートする。例えば、L1データキャッシュ110は、読み出し・変更・書き込み動作を支援し得る。読み出し・変更・書き込み動作は、存在するデータを読み出し、そのデータの少なくとも一部を上書きする。ECCの実施形態では、読み出し・変更・書き込み動作は、フルバンク幅未満を書き込むときに実施され得る。上書きされないバンク内のデータの一部が依然としてECCシンドロームビットに寄与するので、読み出し・変更・書き込みの読み出し機能が用いられる。
【0652】
読み出し・変更・書き込み動作は、書き込み動作と読み出し動作とに分割され得、犠牲キャッシュストアキュー216は、読み出し経路における読み出し動作が犠牲キャッシュストアキュー216における書き込み動作と同期し続けるように構造化され得る。読み出し動作と書き込み動作は、読み出し・変更・書き込み・マージ構成要素1108が読み出しデータの少なくとも一部を書き込みデータで上書きしてマージされたデータを生成するまで同期されたままである。マージされたデータは、マージされたデータのための新しいECCシンドロームビットを生成するECC生成器1112に提供され、次いで、マージされたデータ及びECCシンドロームビットは、犠牲ストレージ218に格納するために調停マネージャ1114に提供され得る。
【0653】
例示の読み出し動作において、L1データキャッシュ110は、読み出し動作のアドレスをタグRAM210の記録と比較し、L1データキャッシュは、犠牲ストレージ218及び/又は犠牲キャッシュストアキュー216からデータ及びECCシンドロームビットを要求する。読み出し・変更・書き込み動作はデータを変更するので、犠牲ストレージ218内のエントリのMESI状態(変更、排他、共有、及び無効)を追跡する例では、変更状態又は排他的状態のいずれでもないキャッシュヒットがキャッシュミスと見なされ得る。データが適切な状態で取得され、エラーが訂正されると、それは読み出し・変更・書き込み・マージ構成要素1108に提供される。この同じサイクルで、読み出し・変更・書き込み・マージ構成要素1108は、訂正されたデータの少なくとも一部を書き込みデータで上書きして、マージされたデータを生成してもよい。ECC生成器1112は、マージされたデータのための新しいECCシンドロームビットを生成する。
【0654】
例示の書き込み動作では、
図2及び/又は
図3のキャッシュコントローラ220は、再書き込みされるべきワードのバイト又はワード全体を示す書き込み要求を送信する。このような例では、キャッシュコントローラ220によって送信される書き込み要求は、バイトのアドレス値とバイト値(例えば、データのセット)とを含む。例えば、
図2及び/又は
図3の犠牲ストレージ218は、アドレスA3、A2、A1、A0に関連する4ビットワード0x12345678を含み得る。このような例では、アドレスA3はバイト0x12に対応し、アドレスA2はバイト0x34に対応し、アドレスA1はバイト0x56に対応し、アドレスA0は格納されたワードのバイト0x78に対応する。そのような例示の動作において、キャッシュコントローラ220は、アドレスA3をバイト0x33で置換し、アドレスA1をバイト0x22で置換し、アドレスA0を現在格納されているワード12345678のバイト0x11で置換するための書き込み要求を送信し得る。更にそのような例では、格納されたワードのアドレスA3をバイト0x33で置換するための第1の書き込み要求は、0x33345678となる格納されたワードとなり、格納されたワードのアドレスA1をバイト0x22で置換するための第2の書き込み要求は、0x33342278となる格納されたワードとなり、格納されたワードのアドレスA0をバイト0x11で置換するための第3の書き込み要求は、0x33342211となる格納されたワードとなる。
【0655】
このような要求を調整するために、第1の例示のサイクルで(例えば、アドレスA3をバイト0x33で置換する第1の書き込み要求と競合するために)、ECC生成器1112はワード粒度に応じて動作するので、キャッシュコントローラ220は現在格納されているワードのアドレスA3に現在格納されているバイトの読み出し要求(例えば、犠牲ストレージ218に格納されているデータの第2のセットの読み出し要求)を開始する。この例では、第1の書き込み要求(例えば、0x33及びA3)内のバイト及びアドレスは、ラッチ1102bに格納される。また、キャッシュコントローラ220は、現在格納されているワード全体の読み出し要求を犠牲ストレージ218に送信する。したがって、第1のサイクルの終わりに、現在格納されているワード全体の読み出し要求が犠牲ストレージ218に送信され、バイト0x33が第1のラッチ1102bに格納される。
【0656】
例示の第2のサイクル(例えば、アドレスA1をバイト0x22で置換する第2の書き込み要求を完了するために)では、第1の書き込み要求からのバイトがラッチ1102cに送信され、現在格納されているワード全体が犠牲ストレージ218からECC論理312に送信され、第2の書き込み要求(例えば、アドレスA1をバイト0x22で置換するための)が、キャッシュコントローラ220によって送信されてラッチ1102bに格納される。第2のサイクルの間、読み出し・変更・書き込み・マージ構成要素1108は、ラッチ1102cに格納されたバイトと、ECC論理312によって送信された現在格納されているワード全体とを取得する。このようにして、読み出し・変更・書き込み・マージ構成要素1108は、更新されるべき現在格納されているワード内のバイトのアドレスを識別する。読み出し・変更・書き込み・マージ構成要素1108が、(a)ラッチ1102cからの更新されるべき現在格納されているワードの一部の値(例えば、バイト値、ビット値など)と、(b)ECC論理312からの現在格納されているワードとを識別及び/又はその他の方式で取得すると、読み出し・変更・書き込み・マージ構成要素1108は、現在格納されているワードの一部(例えば、データの第2のセット)を、ラッチ1102cから取得された現在格納されているワードの一部の値(例えば、データの第1のセット)で書き込む(例えば、置換する、マージするなど)。例えば、読み出し・変更・書き込み・マージ構成要素1108は、ワードの一部の値を、ワード内のワードの一部に対応するアドレス値に書き込む。本明細書において説明する幾つかの例において、そのようなマージされたデータセットが、犠牲ストレージ218に書き込むために読み出し・変更・書き込み・マージ構成要素1108によって提供される。
【0657】
犠牲キャッシュにおける読み出し・変更・書き込みのサポートを容易にするための例示の方法、装置、システム、及び製品が、本明細書において記載される。更なる例及びそれらの組み合わせには、以下のものが含まれる。
【0658】
例1は装置を含み、この装置は、コントローラに結合される第1のストレージと、コントローラに結合され、第1のストレージに並列に結合される第2のストレージと、第1のストレージ、第2のストレージ、及びコントローラに結合されるストレージキューとを含む。ストレージキューは、アドレスとデータの第1のセットとを示すメモリ動作をコントローラから取得し、第1のストレージ及び第2のストレージの少なくとも1つからアドレスに関連するデータの第2のセットを取得し、データの第1のセットとデータの第2のセットをマージしてデータの第3のセットを生成し、第1のストレージ及び第2のストレージの少なくとも1つに書き込むためのデータの第3のセットを提供するためのものである。
【0659】
例2は、例1の装置を含み、メモリ動作は、第1のストレージと第2のストレージの少なくとも1つからアドレスに関連するデータの第2のセットを読み出すことを示す読み出しメモリ動作である。
【0660】
例3は、例2の装置を含み、ストレージキューは、データの第1のセットとデータの第2のセットとをマージする前に、読み出しメモリ動作を取得するように構成される。
【0661】
例4は、例1の装置を含み、ストアキューは、エラー訂正符号シンドロームビットを生成するように構成されたエラー訂正符号生成器を含む。
【0662】
例5は、例1の装置を含み、第1のストレージがメインストレージであり、第2のストレージが犠牲ストレージであり、メインストレージ及び犠牲ストレージがレベル1キャッシュ内に位置する。
【0663】
例6は、例1の装置を含み、コントローラは、中央処理装置からメモリ動作を取得するために中央処理装置インタフェースに結合されるように構成されたキャッシュコントローラである。
【0664】
例7はシステムを含み、このシステムは、メモリ動作を生成するように構成される中央処理装置と、中央処理装置に結合される第1のストレージと、中央処理装置に結合され、第1のストレージに並列に結合される第2のストレージと、第1のストレージ、第2のストレージ、及び中央処理装置に結合されるストレージキューとを含む。ストレージキューは、アドレス及びデータの第1のセットを示すメモリ動作を中央処理装置から取得し、第1のストレージ及び第2のストレージのうちの少なくとも1つからアドレスに関連付けられたデータの第2のセットを取得し、データの第1のセット及びデータの第2のセットをマージして、データの第3のセットを生成し、第1のストレージ及び第2のストレージのうちの少なくとも1つに書き込むためのデータの第3のセットを提供するためのものである。
【0665】
例8は、例7のシステムを含み、メモリ動作は、第1のストレージ及び第2のストレージのうちの少なくとも1つから、アドレスに関連するデータの第2のセットを読み出すことを示す読み出しメモリ動作である。
【0666】
例9は、例8のシステムを含み、ストレージキューはデータの第1のセットとデータの第2のセットをマージする前に、読み出しメモリ動作を取得するように構成される。
【0667】
例10は、例8の装置を含み、ストアキューは、エラー訂正符号シンドロームビットを生成するように構成されたエラー訂正符号生成器を含む。
【0668】
例11は、例10のシステムの装置を含み、エラー訂正符号生成器は、データの第1のセットとデータの第2のセットとをマージすることに応答して、エラー訂正符号シンドロームビットを生成する。
【0669】
例12は、例8のシステムを含み、第1のストレージはメインストレージであり、第2のストレージは犠牲ストレージであり、メインストレージと犠牲ストレージはレベル1キャッシュ内に位置する。
【0670】
例13は、例8のシステムを含み、中央処理装置からメモリ動作を取得するために、インタフェースを介して、ストアキュー、第1のストレージ、第2のストレージ、及び中央処理装置に結合されるように構成されるキャッシュコントローラを更に含む。
【0671】
例14は或る方法を含み、この方法は、アドレス及びデータの第1のセットを示すメモリ動作をコントローラから取得することと、第1のストレージ及び第2のストレージのうちの少なくとも1つからアドレスに関連付けられたデータの第2のセットを取得することと、データの第1のセット及びデータの第2のセットをマージしてデータの第3のセットを生成することと、第1のストレージ及び第2のストレージのうちの少なくとも1つに書き込むためにデータの第3のセットを提供することとを含む。
【0672】
例15は、例14の方法を含み、メモリ動作が第1のメモリ動作であり、アドレスが第1のアドレスであり、更に、第2のアドレスとデータの第4のセットとを示す第2のメモリ動作を取得することと、データの第4のセットをデータの第3のセットとマージしてデータの第5のセットを生成することとを含む。
【0673】
例16は、例15の方法を含み、第1のアドレス及び第2のアドレスをデータストアに格納することを更に含む。
【0674】
例17は、例15の方法を含み、第1のストレージがメインストレージであり、第2のストレージが犠牲ストレージである。
【0675】
例18は、例14の方法を含み、更に、データの第3のセットに基づいてエラー検出符号を生成することを含み、エラー検出符号がデータの第3のセットと共に格納される。
【0676】
例19は、例14の方法を含み、データの第2のセットを読み出すことを示す読み出しメモリ動作を取得することを更に含む。
【0677】
例20は、例14の方法を含み、コントローラは、中央処理装置からメモリ動作を取得するために中央処理装置インタフェースに結合されるように構成されたキャッシュコントローラである。
【0678】
犠牲キャッシュ内の非整合書き込みのための読み出し・変更・書き込み・サイクルを低減するための方法及び装置
【0679】
マルチバンクストレージに書き込み命令を発行する場合、このような書き込み命令の完全な読み出し・変更・書き込み・サイクルを実行しようと試みると、そのような書き込み命令は、書き込み命令のサイズに関係なく、対応する読み出し命令とともに送信され得る。例えば、このような応用例では、書き込み命令は、第1のメモリバンクのアドレスA0で始まる2つの64ビットメモリバンクにわたって128ビットを書き込むことを示すCPUによって得ることができる。このような例では、両方の例示のメモリバンクの全体が書き込まれているが、このような応用例は2つの例示のメモリバンクに現在格納されているデータを読み出すための読み出し命令を維持する。しかしながら、そのようなアプローチは、処理能力の2倍(例えば、書き込み及び読み出し命令)が必要とされるので、非効率的である。また、このようなアプローチは、書き込み命令を解析するための制御論理及び/又は処理回路要素を提供しない。
【0680】
図11Aに図示される例では、メインストレージ214及び/又は犠牲ストレージ218は、マルチバンクストレージとし得る。例えば、犠牲ストレージ218は、各々が64ビット幅の16個のメモリバンク(例えば、16個のサブRAM)を含み得る。このような例では、キャッシュコントローラ220が、犠牲ストレージ218の第1のバンクの全ての64ビットを書き込む(例えば、第1のバンクの第1のアドレスで始まる64ビットのワードを書き込む)書き込み命令を送信する場合、書き込み命令は、読み出し命令を開始することなく実行され得る。例えば、バンク処理論理303は、バンク全体のこのような書き込みが実施されることを検出し得、そのため、読み出し命令の送信を取り消して、読み出し・変更・書き込み動作を開始することをキャッシュコントローラ220に示し得る。
【0681】
同様に、キャッシュコントローラ220が、第1のバンクの128ビット全てと犠牲ストレージ218の第2のバンクを書き込むための書き込み命令(例えば、第1のバンクの第1のアドレスで始まり、第2のバンクの最後のアドレスで終わる128ビットワードを書き込むことを示す書き込み命令)を送信する場合、書き込み命令は、読み出し命令を開始することなく実装され得る。例えば、バンク処理論理303は、多数のバンク全体のそのような書き込みが実施されるべきであることを検出し、そのため、読み出し命令の送信を取り消して、読み出し・変更・書き込み動作を開始するようにキャッシュコントローラ220に示し得る。
【0682】
しかしながら、本明細書において説明する幾つかの例において、キャッシュコントローラ220は、犠牲ストレージの第1のバンク、第2のバンク、及び第3のバンクの130ビットを書き込むための書き込み命令(例えば、第1のバンクの第1のアドレスで始まり、第3のバンクの第2のアドレスで終わる130ビットワードを書き込むことを示す書き込み命令)を送信し得る。このような例では、バンク処理論理303は、が犠牲ストレージ218の第1のバンク及び第2のバンクの全てのアドレスが完全に書き込まれるべきであることを検出し、そのため、読み出し命令の送信を取り消して、犠牲ストレージの第1のバンク及び第2のバンクのための読み出し・変更・書き込み動作を開始するようにキャッシュコントローラに示し得る。このような例では、バンク処理論理303は、犠牲ストレージ218の第3のバンクが部分的に書き込まれるべきである(例えば、64個のアドレスのうちの2つのアドレスが書き込まれるべきである)ことを検出し、そのため、犠牲ストレージ218の第3のバンクのフル読み出し・変更・書き込み動作を開始することをキャッシュコントローラ220に示し得る。読み出し・変更・書き込み動作の例示の説明は上述されている。
【0683】
犠牲キャッシュにおけるバンク圧力を低減するための積極的な書き込みマージ
【0684】
図11Aの例では、例示の犠牲キャッシュストアキュー216は、犠牲キャッシュストアキュー216の異なるセクション(例えば、例示のラッチ1102a~e)において幾つかの書き込み動作を格納する。例えば、CPU102が1行に3つの別々の書き込み動作を送信する場合、CPU102が提供した第1の書き込み動作は、第1のラッチ1102bに格納され、第2の動作が第1のラッチ1102bで受け取られるとき第2のラッチ1102cに移動される。したがって、3つの書き込み動作が受け取られた後、第1のラッチ1102bは、時間に関する最後の書き込み動作(例えば、これは、犠牲ストレージ218に最後に格納される)を格納及び/又は出力し、第2のラッチ1102cは第2の書き込み動作(例えば、これはメインストレージ214に2番目に格納される)を有し、第3のラッチ1102dは第1の書き込み動作(例えば、これは、例示の犠牲ストレージ218に最初に格納される)を有し得る。犠牲キャッシュストアキュー216内のデータが次に犠牲ストレージ218に格納されるときはいつでも、例示の調停マネージャ1114は、例示の犠牲ストレージ218に書き込まれるべきデータのためのサイクルを確保する。したがって、確保されたサイクルの間、犠牲ストレージ218は利用可能でない可能性があり、読み出し動作を実施し得ない。しかし、ラッチ1102b、1102c、1102dのうちの2つ又はそれ以上に格納されたデータ動作が同じメモリアドレスに対応する場合、データは、2回又は3回ではなく、犠牲ストレージ218のメモリアドレスにデータを1回書き込むためにマージされ得る。例えば、ラッチ1102dに格納された書き込み動作がメモリアドレスのバイトの書き込みに対応し、ラッチ1102cに格納された書き込み動作がメモリアドレスへの異なるバイトの書き込みに対応する場合、第2の書き込みは第1の書き込みを上書きする。
【0685】
犠牲キャッシュストアキュー216は、後続のサイクルで上書きされるであろう第1のバイトを犠牲ストレージ218に書き込むためのサイクルを確保する代わりに、2つの書き込みを1つの書き込みにマージして、第2のトランザクションを書き込むために1つのサイクルのみが用いられるようにする(例えば、第1の書き込みのために或るサイクルを確保しないようにするため)。このような積極的なマージは、書き込み動作のために確保されるサイクルの数を減少させる。このようにして、犠牲ストレージ218は読み出し動作を行うための余分なサイクルを有し得、それによって、システム全体の待ち時間を減少させる。
【0686】
同じメモリアドレスへの書き込み動作の積極的なマージを可能にするために、例示のラッチ1102b~1102dの出力は、例示のマージ回路1103a~403cに結合される。例えば、第3のラッチ1102dの出力はマージ回路1103aに結合され得、第2のラッチ1102cの出力はマージ回路1103bに結合され得、第1のラッチ1102bの出力はマージ回路1103cに結合され得る。マージ回路1103aの出力は第2のラッチ1102c及びマージ回路1103bの出力に付加的に結合され得、マージ回路1103bはマージ回路1103cに結合され得、マージ回路1103cは第1のラッチ1102bの入力に結合され得る。付加的に又は代替として、異なるラッチのセットの出力を比較する付加的なコンパレータ回路(例えば、ラッチ1102bの出力をラッチ1102dの出力と比較するためのコンパレータ回路)が存在してもよい。例示のマージ回路1103a~cは、例示のコンパレータ1120及び例示のスイッチ1122を含む。
【0687】
コンパレータ1120は、それぞれのラッチ1102b~1102dに格納されている各書き込み動作のためのメモリアドレス位置を比較して、例示のストアキュー内の書き込み動作のいずれかが同じメモリアドレスに対応するかどうかを判定する。例示のコンパレータ1120は、ラッチ1102b~1102dの全ての書き込み動作を比較するための1つのコンパレータであってもよく、又は別個のコンパレータ1120であってもよく、ラッチ1102b~dの2つを比較するためのものであり得る(例えば、ラッチ1102bのメモリアドレスをラッチ1102cのメモリアドレスと比較する第1のコンパレータ、ラッチ1102dのメモリアドレスを示す1102bのメモリアドレスと比較する第2のコンパレータなど)。コンパレータ1120は、(例えば、1つ又は複数の比較に対応する1つ又は複数の信号との)比較の結果を、例示のスイッチ1122及び/又は調停マネージャ1114に出力する。例示の調停マネージャ1114が一致を示す信号を受信した場合、調停マネージャ1114は、第1の書き込み動作のためのサイクルを確保せず、一方、第1の書き込み動作は、同じメモリ位置への第2の書き込み動作とマージされる(例えば、他のキャッシュ動作のためにサイクルを解放するため)。
【0688】
例示のスイッチ1122は、比較に基づいて例示のラッチ1102b~1102d内の書き込み動作を再配路する。例えば、例示のラッチ1102dに格納された書き込み動作のメモリアドレスが、ラッチ1102cに格納されたメモリアドレスと同じである場合、例示のスイッチ1122は、例示の調停マネージャ1114に配路する代わりに、ラッチ1102dの出力をラッチ1102cに再配路することを可能及び/又は不可能にする。このようにして、2つの書き込み動作が組み合わされ、2つの書き込み動作の代わりに単一の書き込み動作として後続のサイクルで犠牲ストレージ218に書き込まれる。スイッチ1122は、電気スイッチ、トランジスタ(例えば、MOSFET)、デマルチプレクサ、及び/又は、回路内の信号を再配路し得る任意の他の構成要素とし得る。
【0689】
ラッチが再配路された書き込み動作を受け取ると、(例えば、
図4Dに関連して上述したように)マージ回路403a~cのうちの1つのMUXが、最新の書き込み動作を優先する1つ又は複数の再配路された書き込み動作のためのマージプロトコルを実施する。例えば、コンパレータ1120が例示のラッチ1102cに格納された書き込み動作が例示のラッチ1102dに格納された書き込み動作と同じメモリ アドレスに対応すると判定した場合、スイッチ1122は、例示のラッチ1102dに格納された書き込み動作をラッチ1102cに再配路する。このような例では、例示のラッチ1102cにおける書き込み動作がメモリアドレスのバイト0及びバイト2へのデータの書き込みに対応し、ラッチ1104dからの書き込み動作がバイト0及びバイト1へのデータの書き込みに対応する場合、例示のマージ回路1103aは、2つの書き込み動作をマージして、書き込みデータ(例えば、バイト0及びバイト2への書き込み)をラッチ1102cに格納されたままにし、重ならないラッチ1102dからの書き込みデータ(例えば、バイト2)を含むようにする。この例では、ラッチ1104dからのバイト0で書き込まれるべきデータがラッチ1102cの書き込み命令によって上書きされるので、ラッチ1104dからのバイト0の書き込みデータは破棄される。したがって、上記の例では、マージされたデータは、ラッチ1102cからのバイト0の書き込みデータ、ラッチ1104dからのバイト1の書き込みデータ、及びラッチ1102cからのバイト2の書き込みデータに対応する。後続の書き込み動作が犠牲キャッシュストアキュー216に追加されると、ラッチ1102cからのマージされた書き込みデータは、後続のサイクル中に例示の犠牲ストレージ218に格納されるように、(例えば、例示のブロック1104、1106、1108のうちの1つを介して)操作され得及び/又は次のラッチ1102dに送られ得る。マージプロトコルの例示のハードウェア実装は、
図4Cに関連して上記で更に記載されている。
【0690】
犠牲キャッシュのL1における最適化アトミック操作とヒストグラム演算のサポート
【0691】
アトミック操作は、マルチパートメモリ動作の更なる例である。例えば、アトミック比較及びスワップ動作は、メモリロケーションに格納された既存の値の比較の結果に基づいて、メモリロケーションに格納された値を操作する。例えば、CPU102は、L1キャッシュ110に格納された既存の値が特定の値と一致する場合に、L1キャッシュ110に格納されたデータを新しい値で置換したい場合がある。
【0692】
幾つかの例示のシステムでは、CPUがアトミック操作を実施したい場合、CPUはメモリアドレスに読み出し動作を送信し、読み出したデータに対して操作を実行した後、操作されたデータを格納するために同じメモリアドレスに対して書き込み動作を実行していた。また、そのようなシステムでは、L1キャッシュは、アトミック操作が完了するまで(例えば、アトミック操作中のアトミック操作に対応するメモリアドレスの操作を回避するために)、他のデバイス(例えば、CPUの他のコア、高レベルキャッシュ、拡張メモリなど)からの任意のトランザクションを一時停止、拒絶、阻止、及び/又は停止する必要がある場合がある。したがって、このような例示の手法は、CPUに代わって多くの労力を必要とし、待ち時間を増大させる多くの確保済みサイクルを必要とし得る。
【0693】
図11Aの例では、例示の犠牲キャッシュストアキュー216が、読み出し・変更・書き込み構造に関連してアトミック操作を扱う。このように、例示のCPU102は単一のアトミック操作をL1キャッシュ110に送ることができ、犠牲キャッシュストアキュー216は、アトミックデータ動作及び書き込み動作を扱う。従って、CPU102は、アトミック操作を行うために単一のサイクルを利用し、他の機能を実施するために(例えば、アトミックプロトコルにおいて用いられる)他のサイクルを使用することがで、それによって、コンピューティングシステム100全体の待ち時間を低減する。
【0694】
動作において、CPU102がアトミック操作及び/又はアトミック比較及びスワップ動作を送信してメモリアドレスにおけるデータを例えば1の値だけ増分及び/又はスワップすると、アトミック命令がラッチ1102aによって受け取られ、タグRAM210は、メモリアドレスが例示の犠牲ストレージ218に格納されているかどうかを検証する。メモリアドレスが例示の犠牲ストレージ218に格納されている場合、タグRAM210は、アトミック命令が例示のラッチ1102bに渡されている一方で、例示の犠牲ストレージ218に、そのメモリアドレスにおけるデータを出力するように指令する。犠牲ストレージ218がラッチ324aにデータを出力する間、例示のラッチ1102bはラッチ1102cにアトミック操作を出力する。この時点で、ECC論理312は上述したようにエラー検出及び/又は訂正プロトコルを実施し、メモリアドレスロケーションからのデータは、例示の演算構成要素1104(例えば、アトミック操作の場合)又はアトミック比較構成要素1106(例えば、アトミック比較及びスワップ動作の場合)に転送される。演算構成要素1104が、アトミック操作(例えば、データをどのように操作するかを識別するデータを含む)を取得し、及び/又は、アトミック比較及びスワップ1106が、アトミック比較及びスワップ動作(例えば、鍵、及び、鍵が読み出しデータと一致する場合に書き込まれるデータを含む)をラッチ1102cから取得し、ECC論理312の出力からの対応するメモリアドレスからデータを取得する。演算構成要素1104はデータに対する操作(例えば、データを1だけ増分する)を実施し、及び/又は、アトミック比較構成要素1106は、スワップを実施し(読み出されたデータが鍵と一致する場合にデータを置換するなど)、増分された及び/又はスワップインされたデータを出力し、対応するメモリアドレス(例えば、アトミック結果)に関する増分されたデータを、例示のMUX1110を介して例示のラッチ1102dに出力し得る。(例えば、キャッシュコントローラ220を介してイネーブルされる)。ラッチ1102dは、ECCビットを生成するために、メモリアドレスに対応する新たなデータをECC生成器1112に出力し、調停マネージャ1114は、新たなデータ(例えば、アトミック結果及び/又はアトミック比較及びスワップ結果)を、例示の犠牲ストレージ218内のECCビットに関連してメモリアドレスに書き込む。付加的に又は代替として、ECC論理1112からの訂正された値がCPU102に戻される。そのため、アトミック操作は、CPU102からの1つの命令のみで実施される。
【0695】
アトミック比較構成要素1106及び/又は演算構成要素1104は、幾つかの入力を有する。例えば、アトミック構成要素1106は、実施するアトミックのタイプ(例えば、アトミック比較及びスワップ、又はアトミックスワップ)、スワップインする新たなデータ、キャッシュ310から読み出されたECC訂正済みデータ、及び、アトミック操作中に操作されるべきデータのサイズ(例えば、32ビット又は64ビット)を受け取る(例えば、取得する)。
図4Bの例示の回路実装450では、アトミック比較構成要素1106は、アトミック比較及びスワップ動作を受け取り、演算構成要素1104はアトミック操作を受け取る。アトミック比較構成要素1106は、CPU102によって提供された比較値(例えば、鍵)をECCデータ310と比較する。一致すると、新たなデータが、古いデータ(例えば、ECCデータ310)の代わりにスワップされ、MUX1110に出力される。スワップインされる新たなデータのサイズは、cas_acc_sz入力(32ビットや64ビットなど)によって決まる。
図4Cの例示の回路実装450では、アトミック比較構成要素1106がアトミックスワップ動作を受け取ることもできる。アトミック比較構成要素1106は、比較結果に関わらずECCデータ310を置換して新たなデータをスワップインし、新しい値をmux1110に出力し、アドレスからの古いデータは、メインストレージ214から読み出され、CPU102に戻される。スワップインされる新たなデータのサイズは、cas_acc_sz入力(32ビットや64ビットなど)によって決まる。
図4Cの例示の回路実装450では、演算構成要素1104がアトミック操作を受け取ってもよい。演算構成要素1104は、ECCデータ310を操作し、操作されたデータをメインストレージ要素214に格納し得る。スワップインされる新たなデータのサイズは、cas_acc_sz入力(32ビットや64ビットなど)によって決まる。ヒストグラム演算は、CPU102が、各値の多くが格納されたビンの値が犠牲ストレージ218のセクション(例えば、犠牲ストレージ218のSRAM部分からのSRAMライン)に存在することを知りたい場合である。例えば、SRAMラインが6つのビンを有し、第1のビンが0を格納し、第2のビンが0を格納し、第3のビンが2を格納し、第4のビンが0を格納し、第5のビンが0を格納し、第6のビンが3を格納する場合、SRAMラインのヒストグラムは、[0,0,2,0,0,3]に対応し得る。代替として、ヒストグラムは、異なる方式(例えば、[3,0,0,2,0,0])で構造化されてもよい。幾つかの例示のシステムにおいて、ヒストグラム機能を実施するために、CPUは、各値の個々の値と増分を読み取らなければならない。例えば、10バイトのSRAMラインに格納されている0の数を判定するために、CPUは10回の読み出しを行う。次に、10ビンの同じ10バイトSRAMラインにある1の数を判定するために、CPUは更に10回の読み出しを行う。そのため、ヒストグラム演算を行うために、このようなシステムは(N)(M)読み出しを行う必要があり得、ここで、Nは読み出されるメモリのセクションのサイズ(例えば、10バイト)であり、Mは、各バイトに格納し得る値の数である。アトミック操作と同様に、L1 SRAMは、ヒストグラム演算が完了するまで、他の全ての読み出し及び/又は書き込み動作を阻止、一時停止、停止、廃棄しなければならない場合がある。
【0696】
図11(a)の例では、CPU102は、犠牲ストレージ218にヒストグラム演算を指令する。これにより、CPU102が動作のために確保しなければならないサイクル数を(N)(M)から1に変更する。また、アトミック操作プロトコルは既にストアキューにおいて実装されているので、ヒストグラム演算は、メモリのNサイズに対してN回の読み出しを行い、例示の犠牲SRAMストアキュー216内の各値に対するカウントを増分することによって、演算構成要素1104を用いて行われ得、それによって、(N)(M)回の動作からN回の動作まで読み出し動作の数を低減する。
【0697】
動作において、CPU102が犠牲ストレージ218の或るセクション(例えば、SRAMライン)に対応するヒストグラム演算を送信すると、その動作は、例示のラッチ1102aに格納され、一方、タグRAM210は、ヒストグラム演算に対応するメモリアドレスが犠牲ストレージ218において利用可能であるかどうかを検証する。例示のキャッシュコントローラ220は、ヒストグラム演算において識別されるセクションの各バイトに対する読み出し動作を促進する(例えば、同時に最大128バイトを読み出すことによってヒストグラムビンが並列にアクセスされる)。利用可能である場合、タグRAM210は、ヒストグラム演算が例示のラッチ1102aによって例示のラッチ1102bに出力される一方で、犠牲ストレージ218に、犠牲ストレージ218のセクションの第1のバイトにおけるデータを出力するように指令する。例示の犠牲ストレージ218がメモリアドレスから読み出されたデータを例示のラッチ324aに出力すると、ラッチ1102bはヒストグラム演算を例示のラッチ1102cに出力する。ECC論理312がエラー検出及び訂正機能を実施した後、バイトで読み出されたデータは、例示の演算構成要素1104に送られる。
【0698】
ECC論理312から読み出し値を受け取り、ラッチ1102cからヒストグラム命令を受け取った後、演算構成要素1104は、ヒストグラムを表すデータを開始する。例えば、演算構成要素1104は、犠牲ストレージのバイトに格納され得る可能な値毎に初期値(例えば、ゼロ)を有するベクトル(例えば、ヒストグラムを表す)を開始し得る。演算構成要素1104は、ECC論理312による出力(例えば、読み出しバイト)に基づいてベクトルの値を増分する。例えば、バイトの読み出し値が0である場合、演算構成要素1104は、ベクトル内の0に対応する値を増分する。
【0699】
各ベクトルは並列に増分されるので、結果として得られるベクトルは、SRAMの対応するセクションにおいて並列に読み出された値のヒストグラムに対応する。ヒストグラムの値はビット毎に増分されるので、結果のベクトルは、CPU102からのヒストグラム演算で識別されるメモリのセクションに格納された値のヒストグラムである。幾つかの例において、演算構成要素1104は、何らかの重み付けされた値(例えば、1.5)だけ並列に増分し得る。完了すると、例示のヒストグラムは、例示のラッチ1102eを介してMUX316に入力されるように、例示のMUX418に入力される(例えば、例示のペンディングのストアアドレステーブル1116によって制御される)。動作が完了すると、例示のキャッシュコントローラ220は、マルチプレクサ回路314及び例示のラッチ322bを介して例示のCPUインタフェース202に最終ヒストグラムベクトルを出力するようにMUX316を制御し、それによってヒストグラム演算を終了する。
【0700】
幾つかの例において、L1キャッシュ110は、ヒストグラムビンがビンサイズの閾値制限(例えば、バイト、ハーフワード、ワードなど)を超えた後にヒストグラムビンが飽和し得る機能性をサポートする。上記の表1は、例示の飽和値を示す。この機能性を用いると、ヒストグラムビン値は、最大値に達するとロールオーバーしない。
【0701】
犠牲キャッシュ及びアトミック操作を容易にするための例示の方法、装置、システム、及び製品が本明細書において記載される。更なる例には以下のものが含まれる。例1はシステムを含み、このシステムは、データの第1のセットを格納するための第1のキャッシュストレージと、第1のキャッシュストレージから退出されたデータの第2のセットを格納するための第2のキャッシュストレージと、第1のキャッシュストレージ及び第2のキャッシュストレージに結合されるストレージキューとを含む。ストレージキューは、メモリ動作に応答して第2のキャッシュストレージからデータの第2のセットを受け取り、データの第3のセットを生成するためにデータの第2のセットに対して演算動作を行うための演算構成要素と、第2のキャッシュストレージにデータの第3のセットを格納するための調停マネージャとを含む。
【0702】
例2は、例1のシステムを含み、第1のキャッシュストレージはメインストレージであり、第2のキャッシュストレージは犠牲ストレージである。
【0703】
例3は、例1のシステムを含み、演算構成要素は、(a)エラー検出及び訂正回路を介して第2のキャッシュストレージからデータの第2のセットを取得し、(b)ラッチを介して中央処理装置からメモリ動作を取得するためのものである。
【0704】
例4は、例1のシステムを含み、データの第3のセットは、単一サイクルで中央処理装置からの単一の命令によって第2のキャッシュストレージに格納される。
【0705】
例5は、例1のシステムを含み、メモリ動作に含まれるメモリアドレスの状態を判定するための変更、排他的、共用、無効(MESI)構成要素と、メモリ動作に含まれるメモリアドレスが共用状態に対応する場合に、ミス命令を別のキャッシュに送信するためのインタフェースとを更に含み、ミス命令が排他的状態要求を含む。
【0706】
例6は、例5のシステムを含み、調停マネージャは、排他的状態要求が他のキャッシュから認められた後に、そのメモリアドレスにおけるデータの第3のセットを第2のキャッシュストレージに格納するためのものである。
【0707】
例7は、例5のシステムを含み、演算構成要素は、排他的状態要求が他のキャッシュから認められた後に、第2のキャッシュストレージからデータの第2のセットを受け取るためのものである。
【0708】
例8は、例5のシステムを含み、第2のキャッシュストレージと第1のキャッシュストレージは、中央処理装置に並列に接続される。
【0709】
例9は、例5のシステムを含み、メモリ動作がアトミック操作である。
【0710】
例10はストレージキューを含み、ストレージキューは、メモリ動作に応答してキャッシュストレージからデータの第2のセットを受信し、データの第2のセットに対して演算動作を実施してデータの第3のセットを生成する演算構成要素と、データの第3のセットをキャッシュストレージに格納する調停マネージャとを含む。
【0711】
例11は、例10のストレージキューを含み、キャッシュストレージが犠牲キャッシュストレージであり、メインキャッシュストレージから除去されたデータを格納する犠牲キャッシュストレージである。
【0712】
例12は、例11のストレージキューを含み、犠牲キャッシュストレージとメインキャッシュストレージは、中央処理装置に並列に接続される。
【0713】
例13は、例10のストレージキューを含み、演算構成要素は、(a)エラー検出及び訂正回路を介してキャッシュストレージからデータの第2のセットを取得し、(b)ラッチを介して中央処理装置からメモリ動作を取得するためのものである。
【0714】
例14は、例10のストレージキューを含み、データの第3のセットは、中央処理装置からの単一の命令によって単一サイクルでキャッシュストレージに格納される。
【0715】
例15は、例10のストレージキューを含み、調停マネージャは別の他のキャッシュから排他的状態要求が与えられた後に、メモリアドレスにおけるデータの第3のセットをキャッシュストレージに格納するためのものである。
【0716】
例16は、例15のストレージキューを含み、演算構成要素は、排他的状態要求が他のキャッシュから認められた後に、キャッシュストレージからデータの第2のセットをメモリアドレスから受け取るためのものである。
【0717】
例17は、例10のストレージキューを含み、メモリ動作がアトミック操作である。
【0718】
例18は方法を含み、この方法は、メモリ動作に応答してキャッシュストレージからデータの第2のセットを取得することと、データの第2のセットに対して演算動作を実施してデータの第3のセットを生成することと、データの第3のセットをキャッシュストレージに格納することとを含む。
【0719】
例19は、例18の方法を含み、キャッシュストレージが犠牲キャッシュストレージであり、メインストレージから除去されたデータを格納する犠牲キャッシュストレージである。
【0720】
例20は、例19の方法を含み、更に、他のキャッシュから排他的状態要求が許可された後に、メモリアドレスにおけるデータの第3のセットをキャッシュストレージに格納することを含む。
【0721】
コヒーレントシステムのための犠牲キャッシュ内のL1におけるアトミック比較及びスワップサポート
アドレスからのデータがL1キャッシュ110に格納される場合、同じアドレスのためのデータも他のキャッシュ(例えば、L2キャッシュ112、及び/又はL3キャッシュ114)にキャッシュされ得る。したがって、メモリアドレスは、1つのキャッシュ内のデータに対するいかなる変更も、他のキャッシュ(例えば、L2キャッシュ112及びL3キャッシュ114)に識別、追跡、及び/又は反映されることを保証するために、追跡及び/又は監視される必要がある。
図3A~
図3Dに関連して上述したように、例示のMESI RAM300は、犠牲ストレージ218に格納されたデータの状態を追跡して、同じメモリアドレスに対応する異なるキャッシュ内の不一致データに関する問題を回避し得る。例えば、CPU102が読み出し動作を送信する場合、メモリアドレス内のデータは操作されないため、例示のMESI RAM300はメモリアドレスの状態を共有に変更する。CPU102が書き込み動作を送信する場合、例示のMESI RAM300は、メモリアドレス内のデータが操作され、犠牲ストレージ218がアドレスに対する書き込み許可を必要とするため、メモリアドレスの状態を排他的に変更する。メモリアドレス内のデータが犠牲ストレージ218に書き込まれた後、MESI RAM300は、メモリアドレスの状態を変更に更新する(例えば、メモリアドレスが変更されたことを示す)。
【0722】
上述したように、アトミック及び/又はヒストグラムプロトコルの間、メモリアドレスからのデータは、犠牲ストレージ218から読み出され、更新され(例えば、増分され)、犠牲ストレージ218に書き戻されるように、犠牲キャッシュストアキュー216に提供される。しかしながら、MESI RAM300が、共有状態のように対応するメモリアドレスの状態を識別した場合、アトミックプロトコルの書き込み動作は、他のレベルのキャッシュに問題を引き起こす可能性がある(例えば、その書き込みが、異なるキャッシュ内のデータの不一致を引き起こすため)。
【0723】
アトミック操作(例えば、アトミック比較及びスワップを含む)中のこのようなデータの不一致を回避するために、例示のキャッシュコントローラ220は、共有状態に対応するキャッシュヒットをキャッシュミスとしてマーキングする。このようにして、キャッシュコントローラ220は、L2インタフェース228に、キャッシュミスを排他的状態要求でより高いレベルキャッシュに送るように命令し得る。このようにして、より高いレベルキャッシュは排他的状態をL1キャッシュ110に許可し得、L1キャッシュ110は、認められた排他的状態の受信に応答して、アトミック操作の一部として読み出し及び書き込み動作を行い得る。
【0724】
排他的要求を有するキャッシュミスがより高いレベルキャッシュに送信され、より高いレベルキャッシュが書き込みデータ及び排他的応答で応答した後、例示のアトミック操作論理1106は、変更済としてデータにタグを付けるようにMESI RAM300に指令する。L2キャッシュ112から受け取ったデータは、犠牲キャッシュストアキュー216に送信され、犠牲ストレージ218に格納される。動作はアトミック操作(例えば、通常のアトミック操作又はアトミック比較及びスワップ)又はヒストグラムプロトコルであったので、より高レベルのキャッシュからのデータは、操作のために例示の演算構成要素1104及び/又は、例示のアトミック比較構成要素1106によって操作され、例示のECC生成器1112及び例示の調停マネージャ1114を介して例示の犠牲ストレージ218に格納される。
【0725】
図1のL1データキャッシュ110を実装する例示の方法が
図2~
図5及び/又は
図10~
図11に示されているが、
図2~
図5及び/又は
図10~
図11に示されている要素、プロセス、及び/又はデバイスのうちの1つ又は複数が、任意の他の様式で、組み合わされ、分割され、再配置され、省略され、除去され、及び/又は実装されてもよい。更に、例示のCPUインタフェース202、例示のタグRAMアクセス204、206、例示のタグRAM208、210、例示のメインキャッシュストアキュー212、例示のメインストレージ214、例示の犠牲キャッシュストアキュー216、例示の犠牲ストレージ218、例示のキャッシュコントローラ220、例示のメインキャッシュコントローラ222、例示の犠牲キャッシュコントローラ224、例示のL2インタフェース228、例示のMESI RAM300、例示のアドレス処理構成要素302a~c、例示のバンク処理論理303、例示のヒット‐ミス比較論理304、306、例示の置換ポリシー構成要素208、例示のECC論理310、例示のMUX回路314、316、318、320、330、330a~c、410、418、508、例示のラッチ322a、324a、402a~d、1102a~d、例示のアドレスエンコーダ326、326a、326b、328、328a、328b、例示のアドレス読み出し332、例示のマージ回路403a~c、1103a~c、例示の演算構成要素404、1104、例示のアトミック比較構成要素406、1106、例示のRMW構成要素408、1108、例示のECC生成器412、1112、例示の調停マネージャ414、1114、例示のペンディングのストアアドレスデータベース416、1116、例示のコンパレータ420、1120、例示のスイッチ422、1122、例示のポート424、426、1124、1126、インタフェース502、504、例示のアドレス506、及び/又はより一般的には、
図2~
図5及び/又は
図10~
図11のL1データキャッシュ110は、ハードウェア、ソフトウェア、ファームウェア、及び/又はハードウェア、ソフトウェア、及び/又はファームウェアの任意の組み合わせによって実装され得る。そのため、例えば、例示のCPUインタフェース202、例示のタグRAMアクセス204、206、例示のタグRAM208、210、例示のメインキャッシュストアキュー212、例示のメインストレージ214、例示の犠牲キャッシュストアキュー216、例示の犠牲ストレージ218、例示のキャッシュコントローラ220、例示のメインキャッシュコントローラ222、例示の犠牲キャッシュコントローラ224、例示のL2インタフェース228、例示のMESI RAM300、例示のアドレス処理構成要素302a~c、例示のバンク処理論理303、例示のヒット‐ミス比較論理304、306、例示の置換ポリシー構成要素208、例示のECC論理310、例示のMUX回路314、316、318、320、330、330a~c、410、418、508、例示のラッチ322a、322b、324a、322b、402a~d、1102a~d、例示のアドレスエンコーダ326、326a、326b、328、328a、328b、例示のアドレス読み出し332、例示のマージ回路403a~c、1103a~c、例示の演算構成要素404、1104、例示のアトミック比較構成要素406、1106、例示のRMW構成要素408、1108、例示のECC生成器412、1112、例示の調停マネージャ414、1114、例示のペンディングのストアアドレスデータベース416、1116、例示のコンパレータ420、1120、例示のスイッチ422、1122、例示のポート424、426、1124、1126、インタフェース502、504、例示のアドレス506、及び/又はより一般的には、
図2~
図5及び/又は
図10~
図11のL1データキャッシュ110は、1つ又は複数のアナログ又はデジタル回路、論理回路、プログラマブルプロセッサ、プログラマブルコントローラ、グラフィックス処理ユニット(GPU)、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、プログラマブル論理デバイス(PLD)、及び/又はフィールドプログラマブル論理デバイス(FPLD)によって実装され得る。本特許の装置又はシステムクレームの任意のものを、純粋にソフトウェア及び/又はファームウェア実装を包含するように読むと、例示のCPUインタフェース202、例示のタグRAM204、206、例示のタグRAM208、210、例示のメインキャッシュストアキュー212、例示のメインストレージ214、例示の犠牲キャッシュストアキュー216、例示の犠牲ストレージ218、例示のキャッシュコントローラ220、例示のメインキャッシュコントローラ222、例示の犠牲キャッシュコントローラ224、例示のL2インタフェース228、例示のMESI RAM300、例示のアドレス処理構成要素302a~c、例示のバンク処理論理303、例示のヒット‐ミス比較論理304、例示の置換ポリシー構成要素208、例示のECC論理310、例示のMUX回路314、316、318、320、330、330a~c、410、418、508、例示のラッチ322a、322b、324a、324b、402a~d、1102~d、例示のアドレスエンコーダ326、326a、326b、328、328a、328b、例示のアドレス読み出し332、例示のマージ回路403a~c、1103a~c、例示の演算構成要素404、1106、例示のアトミック比較構成要素406、1108、例示のRMW構成要素408、1108、例示のECC生成器412、1112、例示の調停マネージャ414、1114、例示のペンディングのストアアドレスデータベース416、1116、例示のコンパレータ420、1120、例示のスイッチ422、1122、例示のポート424、426、1124、1124、1126、インタフェース502、504、例示のアドレス506、及び/又は、より一般的には、
図2~
図5及び/又は
図10~
図11のL1データキャッシュ110は、ここでは、メモリ、デジタル多用途ディスク(DVD)、コンパクトディスク(CD)、ソフトウェア、及び/又はファームウェアを含む非一時的コンピュータ読み出し可能なストレージデバイス又はストレージディスクなどを含むように明確に定義されている。更に、
図1の例示のL1データキャッシュ110は、
図2~
図5及び/又は
図10~
図11に示されるものに加えて又はその代わりに、1つ又は複数の要素、プロセス、及び/又はデバイスを含み得、及び/又は示される要素、プロセス、及びデバイスのいずれか又は全てのうちの2つ又はそれ以上を含み得る。本願において用いられるように、「通信して」という表現は、その変形例も含め、直接的な通信、及び/又は、1つ又は複数の介在構成要素を介した間接的な通信を包含し、直接の物理的(例えば、有線)通信及び/又は一定の通信を必要とせず、周期的間隔、スケジュールされた間隔、非周期的間隔、及び/又は一度限りの事象における選択的通信を付加的に含む。
【0726】
図1~
図5及び/又は
図10~
図11のL1データキャッシュを実装するための例示のハードウェア論理、機械可読命令、ハードウェア実施状態機械、及び/又はそれらの任意の組合せを表すフローチャートが、
図12~
図33に示されている。機械可読命令は、
図34に関連して後述する例のプロセッサプラットフォーム3400に示されるプロセッサ3412などのコンピュータプロセッサによる実行のための1つ又はそれ以上の実行可能プログラム又は実行可能プログラムの一部であり得る。プログラムは、プロセッサ3412と関連する、CD‐ROM、フロッピーディスク、ハードドライブ、DVD、ブルーレイディスク、又はメモリなどの非一時的コンピュータ可読ストレージ媒体に格納されるソフトウェアにおいて具体化され得るが、プログラム全体及び/又はその一部が代替として、プロセッサ3412以外のデバイスによって実行され得、及び/又はファームウェア又は専用ハードウェアにおいて具体化されてもよい。また、例示のプログラムは
図34に図示されるフローチャートを参照して説明されるが、例示のL1キャッシュ110を実装する多くの他の方法が代替的に用いられ得る。例えば、ブロックの実行順が変更され得、及び/又は、記載されるブロックの幾つかが、変更され、なくされ、又は結合され得る。付加的に又は代替として、ブロックの任意のもの又は全てが、ソフトウェア又はファームウェアを実行することなく、対応する動作を行うように構成される1つ又は複数のハードウェア回路(例えば、個別の及び/又は集積されたアナログ及び/又はデジタル回路要素、FPGA、ASIC、コンパレータ、演算増幅器(オペアンプ)、論理回路等)によって実装され得る。
【0727】
本明細書において説明される機械可読命令は、圧縮フォーマット、暗号化フォーマット、断片化フォーマット、コンパイルフォーマット、実行可能フォーマット、パッケージ化フォーマットなどのうちの1つ又はそれ以上に格納され得る。本明細書において記載される機械可読命令は、機械実行可能命令を作成、製造、及び/又は生成するために利用され得るデータ(例えば、命令の一部、符号、符号の表現など)として格納され得る。例えば、機械可読命令は、フラグメント化され、1つ又はそれ以上のストレージデバイス及び/又はコンピューティングデバイス(例えば、サーバー)上に格納され得る。機械可読命令はコンピューティングデバイス及び/又は他の機械によって直接可読、解釈可能、及び/又は実行可能にするために、インストール、変形、適応、更新、結合、補足、構成、解読、伸張、アンパッキング、分配、再割り振り、コンパイルなどのうちの1つ又は複数を必要とすることがある。例えば、機械可読命令は、個別に圧縮され、暗号化され、個別のコンピューティングデバイス上に格納される複数の部分に格納され得、これらの部分は、復号化され、解凍され、組み合わされたときに、本明細書において説明されるようなプログラムを実装する実行可能命令のセットを形成する。
【0728】
別の例において、機械可読命令はコンピュータによって読み出すことができる状態で格納され得るが、特定のコンピューティングデバイス又は他のデバイス上で命令を実行するために、ライブラリ(例えば、ダイナミックリンクライブラリ(DLL))、ソフトウェア開発キット(SDK)、応用例プログラミングインタフェース(API)などの追加を必要とし得る。別の例において、機械可読命令及び/又は対応するプログラムの全体又は一部が実行され得る前に、機械可読命令を構成する必要があり得る(例えば、格納された設定、データ入力、記録されたネットワークアドレスなど)。そのため、記載される機械可読命令及び/又は対応するプログラムは、格納されているか又はその他の方式で休止中又は輸送中の機械可読命令及び/又はプログラムの特定のフォーマット又は状態に関わらず、そのような機械可読命令及び/又はプログラムを包含する。
【0729】
本明細書において記載される機械可読命令は、任意の過去、現在、又は将来の命令言語、スクリプト言語、プログラミング言語などによって表すことができる。例えば、機械可読命令は、C、C++、Java、C#、Perl、Python、JavaScript、Hyper Text Markup Language(HTML)、Structured Query Language(SQL)、Swiftなどのいずれかの言語を用いて表現され得る。
【0730】
上述したように、
図12~
図33の例示のプロセスは、ハードディスクドライブ、フラッシュメモリ、読み出し専用メモリ、コンパクトディスク、デジタル多用途ディスク、キャッシュ、ランダムアクセスメモリ、及び/又は任意の期間(例えば、拡張された時間期間、永久に、短時間、一時的にバッファリングするため、及び/又は、情報のキャッシュのために)情報が格納される他のストレージデバイス又はストレージディスクのような、非一時的コンピュータ及び/又は機械読み出し可能な媒体上に格納された実行可能命令(例えば、コンピュータ及び/又は機械読み出し可能命令)を用いて実装され得る。本願で用いられるように、非一時的コンピュータ可読媒体という用語は、任意のタイプのコンピュータ可読ストレージデバイス及び/又はストレージディスクを含むこと、並びに、伝搬信号を除外すること及び伝達媒体を除外することが明確に定義される。
【0731】
「含む」及び「包含する」(並びにその全ての形態及び時制)は、オープンエンドの用語である。そのため、或る請求項が、「包含する」又は「含む」(例えば、包む、包含する、有するなど)の任意の形態をプリアンブルとして、又は任意の種類の請求項記載事項として用いるときはいつでも、対応する請求項又は記載事項の範囲外となることなく、付加的な要素、用語などが存在し得る。本明細書において用いられるように、語句「少なくとも」は、例えば、請求項のプリアンブルにおける移行句として用いられる場合、用語「包含する」及び「含む」がオープンエンドであるのと同じように、オープンエンドである。用語「及び/又は」は、例えば、A、B、及び/又はCなどの形態で用いられる場合、(1)A単独、(2)B単独、(3)C単独、(4)AとB、(5)AとC、(6)BとC、及び(7)AとBとCなど、A、B、Cの任意の組み合わせ又はサブセットを指す。構造体、構成要素、アイテム、オブジェクト、及び/又は物を説明する文脈において本明細書において用いられるように、語句「A及びBのうちの少なくとも1つ」は、(1)少なくとも1つのA、(2)少なくとも1つのB、及び(3)少なくとも1つのA及び少なくとも1つのBのうちのいずれかを含む実装を指す。同様に、構造、構成要素、アイテム、オブジェクト、及び/又は物を説明する文脈において本明細書において用いられるように、「A又はBのうちの少なくとも1つ」という語句は、(1)少なくとも1つのA、(2)少なくとも1つのB、及び(3)少なくとも1つのA及び少なくとも1つのBのうちのいずれかを含む実装を指す。本明細書では、プロセス、命令、動作、行為、及び/又は工程の実施又は実行を説明する文脈において用いられるように、「A及びBのうちの少なくとも1つ」という語句は、(1)少なくとも1つのA、(2)少なくとも1つのB、及び(3)少なくとも1つのA及び少なくとも1つのBのうちのいずれかを含む実装を指す。同様に、本明細書では、プロセス、命令、動作、行為、及び/又は工程の実施又は実行を説明する文脈において用いられるように、「A又はBのうちの少なくとも1つ」という語句は、(1)少なくとも1つのA、(2)少なくとも1つのB、及び(3)少なくとも1つのA及び少なくとも1つのBのうちのいずれかを含む実装を指す。
【0732】
本明細書において用いられるように、単数形の参照(例えば、「或る」、「第1の」、「第2の」など)は複数を除外しない。用語「或る」エンティティは、本明細書において用いられる場合、そのエンティティの1つ又は複数を指し、用語「或る」、「1つ又は複数」、及び「少なくとも1つ」は、本明細書で互換的に用いられ得る。また、個別に列挙されているが、複数の手段、要素、又は方法動作は、例えば、単一のユニット又はプロセッサによって実装され得る。また、個々の特徴が、異なる例又は特許請求の範囲に含まれ得るが、これらは潜在的に組み合わされ得、異なる例又は特許請求の範囲に含めることが、特徴の組み合わせが実現可能ではなく及び/又は有利ではないことを含意しない。
【0733】
図12は、上述のように例示の犠牲ストレージ218内で書き込みミスキャッシングを実施するために
図1~
図5の例示のL1キャッシュ110によって実行され得る例示の機械可読命令1200を表す例示のフローチャートである。
図12の命令は、
図1~
図5のL1キャッシュ110に関連して記載されているが、命令は、任意のタイプのキャッシュ内の任意のタイプのストレージに関連して説明されてもよい。
【0734】
ブロック1202において、例示のキャッシュコントローラ220は、書き込みミス情報(例えば、書き込みミスキャッシュ)のために犠牲ストレージ218のセクションを割り当てる。上述したように、書き込みミス情報は、CPU102がL1キャッシュ110のストレージ214、218に格納されていないメモリアドレスに、例示のL1キャッシュ110への書き込み命令を送信する場合に対応する(例えば、より高いレベルのキャッシュに書き込み命令が送信されて実行されるようにする)。ブロック1204において、キャッシュコントローラ220は、例示のヒット/ミス論理304、306の出力にアクセスして、CPU102からの現在の書き込み動作(例えば、キャッシュコントローラ220によって受け取られる)が書き込みミスとなったかどうかを判定する(例えば、書き込み動作からのメモリアドレスは、例示のストレージ214、218に格納されない)。幾つかの例において、CPU102からの動作がメインストレージ214をミスしたが犠牲ストレージ218をヒットした場合、ヒット‐ミス比較論理304は、例示の犠牲ストレージ218に書き込みミスを送信し得る。このような例では、犠牲ストレージ218は、動作が犠牲ストレージ218にヒットしたため、書き込みミス情報を破棄する。
【0735】
キャッシュコントローラ220が、例示のタグRAM208、210の1つ又はそれ以上とインタフェースした後、CPU102からの現在の書き込み動作が書き込みミスにならなかったと判定した場合(ブロック1204:NO)、書き込み動作が書き込みミスになるまで、制御はブロック1204に戻る。キャッシュコントローラ220が、CPU102からの現在の書き込み動作が書き込みミスとなると判定した場合(ブロック1204:YES)、例示のキャッシュコントローラ220は、書き込みミス情報が、割り当てられたセクションに既に格納されている書き込みミス情報と同じメモリアドレスに対応するかどうかを判定する(ブロック1206)。例示のキャッシュコントローラ220が、書き込みミス情報が、割り当てられたセクションに書き込みミス情報が既に格納されている任意の書き込みミス情報と同じメモリアドレスに対応すると判定した場合(ブロック1206:YES)、キャッシュコントローラ220は、同じメモリアドレスに対応する格納された書き込みミス情報と書き込みミス情報をマージするように例示の犠牲ストレージ218に指令する(ブロック1208)。例示の犠牲ストレージ218は、最新の書き込みミス情報が古い書き込みミス情報と重複する場合(例えば、同じバイトに対応する場合)に、古い書き込みミス情報を最新の書き込みミス情報で上書きし(例えば、より新しい書き込みミス情報と重複する古い書き込みミス情報を破棄する)、より新しい書き込みミス情報と重複しない古い書き込みミス情報を維持することによって、2つの書き込みミス情報をマージする。
【0736】
例示のキャッシュコントローラ220が、書き込みミス情報、割り当てられたセクションに既に格納された任意の書き込みミス情報と同じメモリアドレスに対応しないと判定した場合(ブロック1206:NO)、キャッシュコントローラ220は、例示の犠牲ストレージ218に、割り当てられたセクションに書き込みミス情報を格納する(ブロック1210)。
【0737】
ブロック1212において、例示のキャッシュコントローラ220は、書き込みミス情報の閾値量を超える量が、割り当てられたセクションに格納されているかどうかを判定する。閾値量は、犠牲キャッシュのサイズ(例えば、割り当てられたセクションが一杯であるときに閾値が満たされる)、L2インタフェース228のサイズ(例えば、L2インタフェースが64バイトの帯域幅を有する場合、閾値は64バイトに設定される)、及び/又は、ユーザ及び/又は製造業者によって設定された他の任意の量に設定され得る。例示のキャッシュコントローラ220が、書き込みミス情報の閾値(例えば、第1の閾値)を超える量が、割り当てられたセクションに格納されていないと判定した場合(ブロック1212:NO)、制御はブロック1204に戻る。
【0738】
例示のキャッシュコントローラ220が、割り当てられたセクションに書き込みミス情報の閾値量を超える量が格納されたと判定した場合(ブロック1212:YES)、キャッシュコントローラ220は、犠牲ストレージ218の割り当てられたセクションから書き込みミス情報の閾値(例えば、第2の閾値)量(例えば、割り当てられたセクションに格納されたN個の最も古い書き込みミス情報であり、Nが閾値に対応する)を選択する(ブロック1214)。第2の閾値は、第1の閾値に対応しても(第1の閾値と同じであっても)よく、及び/又は、L2インタフェース228の帯域幅に対応してもよい(例えば、L2インタフェース228の帯域幅が64バイトである場合、64バイト以下の書き込みミスデータが選択される)。それに加えて又はその代わりに、キャッシュコントローラ220は、閾値時間量が生じたときにブロック1210に進み得る。ブロック1216において、キャッシュコントローラ220は、例示の犠牲ストレージ218に、割り当てられたセクションから、選択された書き込みミス情報を除去させる。ブロック1218において、例示のL2キャッシュインタフェース228は、選択された書き込みミス情報をより高レベルのキャッシュ(例えば、L2キャッシュ112)に送信する。上述のように、L2インタフェース112の帯域幅のより多くを利用するために複数の書き込みミス情報を送ることは、より効率的なシステムをもたらす。
【0739】
図13は、上記のセクション2に関連して、読み出し・変更・書き込み動作を容易にするために、
図1~
図5の例示のL1キャッシュ110によって実行され得る例示の機械可読命令1300を表す例示のフローチャートである。
図13において、メインキャッシュストアキュー212は、再書き込みすべき、ワードのバイト又はワード全体を示す、CPU102によって送信される書き込み命令(例えば、キャッシュコントローラ220を介して送信される)を取得する(ブロック1302)。本明細書において説明する幾つかの例において、書き込みポート426は、CPU102によって送信された書き込み命令を取得し得る。
【0740】
ブロック1304において、メインキャッシュストアキュー212は、書き換えられるべきワードの一部の値をラッチ402bに送信する(ブロック1304)。幾つかの例において、ラッチ402bは、書き換えられるべきワードの一部の値をラッチ402cに送信する。
【0741】
ブロック1306において、メインキャッシュストアキュー212は、書き換えられるべきワードの一部のロケーションに関連するアドレス値を、ペンディングのストアアドレスデータストア416に格納する(ブロック1306)。また、タグRAM208は、現在格納されているワード全体の読み出し命令(例えば、読み出し要求)をメインストレージ214に送信する(ブロック1308)。ブロック1310において、メインキャッシュストアキュー212は、CPU102又はキャッシュコントローラ220の後続のクロックサイクルがあったか否かを判定する(ブロック1310)。本明細書において説明する幾つかの例において、ラッチ402cは、CPU102又はキャッシュコントローラ220の後続のクロックサイクルがあったかどうかを判定する。CPU102又はキャッシュコントローラ220の後続のクロックサイクルが存在しなかったと判定する(例えば、ブロック1310の制御がNOの結果を返す)ことに応答して、プロセスは待機する。
【0742】
代替として、CPU102又はキャッシュコントローラ220の後続のサイクルがあったと判定された(例えば、ブロック1310の制御がYESの結果を返す)ことに応答して、読み出し・変更・書き込み・マージ構成要素408は、ラッチ402cに格納されたワードの一部(例えば、バイト)の値を取得する(ブロック1312)。また、読み出し・変更・書き込み・マージ構成要素408は、ECC論理310によって送信された現在格納されているワード全体を取得する(ブロック1314)。このようにして、読み出し・変更・書き込み・マージ408は、更新されるべき現在格納されているワード内のバイトのアドレスを識別する。読み出し・変更・書き込み・マージ構成要素408が、(a)ラッチ402cからの更新されるべき現在格納されているワードの一部の値(例えば、バイト値、ビット値など)と、(b)ECC論理310からの現在格納されているワードとを識別し及び/又はその他の方式で取得すると、読み出し・変更・書き込み・マージ構成要素408は、現在格納されているワードの一部を、ラッチ402cから取得された現在格納されているワードの一部の値で書き込む(例えば、置換する)(ブロック1316)。
【0743】
【0744】
ブロック1318において、メインキャッシュストアキュー212は、ワード、ワードと共に格納されるエラー検出符号に基づいてエラー検出符号を生成する(ブロック1318)。本明細書において記載される幾つかの例において、ECC生成器412がワードに基づいてエラー検出符号を生成し、エラー検出符号はワードと共に格納される。
【0745】
ブロック1318の制御は、CPU102又はキャッシュコントローラ220の付加的な後続クロックサイクルに応答して実施され得る。
【0746】
これに応答して、メインキャッシュストアキュー212は、付加的な書き込み命令が得られるか否かを判定する(ブロック1322)。メインキャッシュストアキュー212が別の書き込み命令が取得されたと判定した(例えば、ブロック1322の制御がYESの結果を返す)場合、プロセスはブロック1302に戻る。代替として、メインキャッシュストアキュー212が別の書き込み命令が得られないと判定した(例えば、ブロック1322の制御がNOの結果を返す)場合、プロセス1300は閾値タイムアウト期間が発生するまで待機し得、そのため、プロセス1300を終了し得る。
【0747】
図14は、上記のセクション3及び/又は14に関連して、非整合書き込みのための読み出し・変更・書き込み動作を容易にするために、
図1~
図5の例示のL1キャッシュ110によって実行され得る例示の機械可読命令1400を表す例示のフローチャートである。ブロック1402において、
図3A~
図3Dのバンク処理論理303は、CPU102から取得された書き込み命令(例えば、CPUインタフェース202を介して取得された書き込み命令)を解析する。例えば、バンク処理論理303は、書き込み命令の性質を判定するための初期処理回路として動作してもよい。
【0748】
このようにして、バンク処理論理303は、書き込み命令を実行するときに書き込まれるべきメモリバンクの数を判定する(ブロック1404)。例えば、バンク処理論理303は、書き込み命令のアドレスロケーションを判定し、そのため、対応するアドレスロケーションを含むメインストレージ214又は犠牲ストレージ218のいずれかのバンクを判定する。これに応答して、バンク処理論理303は、メモリバンク(例えば、メインストレージ214又は犠牲ストレージ218のいずれかに含まれるメモリバンク)の全てのアドレスを書き換えるべきかどうかを判定する(ブロック1406)。
【0749】
バンク処理論理303が、メモリバンクの全てのアドレス(例えば、メインストレージ214又は犠牲ストレージ218のいずれかに含まれるメモリバンク)を書き換えるべきであると判定した(例えば、ブロック1406の制御がYESの結果を返す)場合、バンク処理論理303はメモリバンクに現在格納されている値を読み出すことなく書き込み命令を実行するようにCPU102又はキャッシュコントローラ220に示す(ブロック1408)。例えば、バンク処理論理303は、アドレスA0~A70が書き換えられるべきであることを識別し得、そのため、第1のメモリバンク(例えば、アドレスA0~A63を有するメモリバンク)が書き換えられるべきであると判定し得る。そのため、このような第1メモリバンクは、現在格納されている値を読み出すことなく書き換えられ得る。
【0750】
代替として、バンク処理論理303が、メモリバンクの全てのアドレスが書き換えられていないと判定した(例えば、ブロック1406の制御がNOの結果を返す)場合、又はブロック1408の制御の実行に応答して、バンク処理論理303は、解析すべき付加的なメモリバンクがあるかどうかを判定する(ブロック1410)。
【0751】
例えば、ブロック1410の制御を実行するために、バンク処理論理303は、書き込み命令によって影響を受けた全てのメモリバンクが解析されたかどうかを判定する。上記の例に従うと、バンク処理論理303は、アドレスA64~A70を含むメモリバンクが解析されていないと判定する。そのため、バンク処理論理303が、解析すべき付加的なメモリバンクがあると判定した(例えば、ブロック1410の制御がYESの結果を返す)場合、プロセス1400はブロック1406に戻る。代替として、バンク処理論理303が、解析すべき付加的なメモリバンクがないと判定した場合(例えば、ブロック1410の制御がNOの結果を返す場合)、バンク処理論理303は別の書き込み命令が取得されたかどうかを判定する(ブロック1412)。
【0752】
本明細書において説明する例では、バンク処理論理303が別の書き込み命令があると判定した場合(例えば、ブロック1412の制御がYESの結果を返す場合)、プロセス1400はブロック1402に戻る。代替として、バンク処理論理303が別の書き込み命令がないと判定した(例えば、ブロック1412の制御がNOの結果を返す)場合、プロセス1400は閾値タイムアウト期間が発生するまで待機してもよく、そのため、プロセス1400を終了し得る。
【0753】
図15は、上記のセクション4及び/又は15に関連して、例示のメインキャッシュストアキュー212及び/又は犠牲キャッシュストアキュー216における積極的な書き込みマージを実施するために、
図1~
図5の例示のL1キャッシュ110によって実行され得る、例示の機械読み出し可能命令1500を表す例示のフローチャートである。
図15の命令は、
図1~
図5のL1キャッシュ110に関連して説明されるが、命令は、任意のタイプのキャッシュ内の任意のタイプのストレージに関連して説明されてもよい。
図15の命令は、メインキャッシュストアキュー212及びメインストレージ214に関連して記載される。しかしながら、
図15の命令は、犠牲キャッシュストアキュー216及び犠牲ストレージ218に関連して同様に用いられ得る。
【0754】
ブロック1502において、例示の例示のマージ回路403a~cの例示のコンパレータ420は、対応するラッチ402b~dから書き込み命令を取得する。上述したように、ラッチ402b~dの各々は、CPU102からの異なる書き込み命令を含む。ブロック1504において、例示の例示のマージ回路403a~cの例示のコンパレータ420は、ラッチ402b~dからの書き込み命令のためのメモリアドレスを比較する。例えば、マージ回路403aのコンパレータ420は、ラッチ402dによって出力された書き込み命令のメモリアドレスを、ラッチ402cによって出力された書き込み命令と比較する。ブロック1506において、例示のコンパレータ420は、ラッチ402b~dによって出力された2つ又はそれ以上の書き込み命令のいずれかが同じメモリアドレスに対応するかどうかを判定する。コンパレータ420が、ラッチ402b~dによって出力された任意の2つ又はそれ以上の書き込み命令が同じメモリアドレスに対応しないと判定した場合(ブロック1506:NO)、制御は以下で更に説明するように、ブロック1520に続く。
【0755】
コンパレータ420が、ラッチ402b~dによって出力された任意の2つ又はそれ以上の書き込み命令が同じメモリアドレスに対応すると判定した場合(ブロック1506:YES)、制御はブロック1508に続く。同じメモリアドレスに対応する書き込み命令の各グループについて(ブロック1508~1514)、同じメモリアドレスに対して書き込み命令を受けた1つ又はそれ以上例示のマージ回路1103a~cは、古い書き込み命令からの同じバイトの書き込みデータと重複する最新の書き込み命令(例えば、CPU102から最近受け取った書き込み命令)のために、バイトの書き込みデータを維持する(ブロック1510)。ブロック1512において、同じメモリアドレスに対する書き込み命令を受け取る1つ又は複数の例示のマージ回路1103aは、最新の書き込み命令からの書き込みデータと重複しない古い書き込み命令からのバイトに対する書き込みデータを更新する。例えば、メモリアドレスのバイト0を書き込むための書き込み命令を格納するマージ回路1103aが、ラッチ402dからの再配路されたデータ、メモリアドレスのバイト0及びバイト1を書き込むための書き込み命令に対応する再配路されたデータを受け取る場合、マージ回路1103aは、バイト0に書き込むための書き込み命令を維持し(例えば、書き込み命令が古いので、ラッチ402dからのバイト0を書き込むための書き込み命令を廃棄し)、ラッチ402bからの命令に対応するバイト1に書き込むための書き込み命令を更新する(例えば、命令が最新の書き込み命令と重ならないため)。ブロック1516において、例示のスイッチ422は、マージされた書き込み命令を、一致するメモリアドレスにも対応する最新の書き込み命令でラッチに再配路する(ブロック1508)。
【0756】
ブロック1518において、マージされるべき書き込み命令を再配路した1つ又はそれ以上のマージ回路402a~cは、再配路されたデータにフラグを立てる。例えば、1つ又は複数のマージ回路403a~cは、例示の調停マネージャ414及び/又はキャッシュコントローラ220に信号を送信し得る。このようにして、調停マネージャ414及び/又はキャッシュコントローラ220は、マージのために先行ラッチに再配路されたデータを書き込むためのサイクルを確保することを回避し得る。ブロック1520において、ラッチ402bは、付加的な書き込み命令が受け取られたかどうかを判定する。ラッチ402dが付加的な命令が受け取られていないと判定した場合(ブロック1520:NO)、制御は、付加的な書き込み命令が受け取られるまでブロック1520に戻る。ラッチ402dが、付加的な命令が受け取られたと判定した場合(ブロック1520:YES)、制御はブロック1504に戻る。
【0757】
図16は、上記のセクション5及び16に関連して上述したように、アトミック操作を行うために、
図1~
図5の例示のL1キャッシュ110によって実行され得る例示の機械可読命令1600を表す例示のフローチャートである。
図16の命令は、
図1~
図5のL1キャッシュ110に関連して説明されるが、命令は、任意のタイプのキャッシュ内の任意のタイプのストレージに関連して説明されてもよい。
図16の命令は、L1キャッシュ110のメインハーフ(例えば、メインキャッシュストアキュー212、メインストレージ214等)に関連して記載される。しかしながら、
図16の命令は、L1キャッシュ110の犠牲側(例えば、犠牲キャッシュストアキュー216、犠牲ストレージ218など)に関連して同様に用いられ得る。
【0758】
ブロック1602において、キャッシュコントローラ220及び/又は、例示のラッチ402aは、CPU102からアトミック操作を取得する。ラッチ402aがアトミック操作を取得すると、キャッシュコントローラ220及び/又は、ラッチ402aは、アトミック操作に対応するデータが例示のメインストレージ214に格納されているかどうかを判定するために、アトミック操作のためのメモリアドレスを例示のタグRAM208に送信する。ブロック1604において、キャッシュコントローラ220は、例示のヒット/ミス論理304とインタフェースして、アトミック操作に対応するメモリアドレスがメインストレージ214に格納されているかどうかを判定する。
【0759】
キャッシュコントローラ220が、アトミック操作に対応するメモリアドレスがメインストレージ214に格納されていないと判定した場合(ブロック1604:NO)、キャッシュコントローラ220は、より高いレベルのキャッシュ(例えば、
図1のL2キャッシュ112)にアトミックミス情報を提示するために、例示のL2キャッシュインタフェース228とインタフェースする(ブロック1606)。このようにして、例示のL2キャッシュ112は、L1キャッシュ110に格納されることに対応するメモリアドレスから対応するデータを戻して、アトミック操作を実行し得る。L2キャッシュ112は、局所的に格納されたメモリアドレスに対応するデータを有してもよく、又は、L3キャッシュ114及び/又は拡張メモリ110から(例えば、L3キャッシュ114を介して)データを取得してもよい。ブロック1608において、例示のメインキャッシュストアキュー212の演算構成要素404は、L2インタフェース228を介してL2キャッシュ112からメモリアドレスに対応するデータを取得する。例えば、データは、例示のメインストレージ214に格納され、読み出され、例示の演算構成要素404に入力され得る。
【0760】
キャッシュコントローラ220が、アトミック操作に対応するメモリアドレスがメインストレージ214に格納されていると判定した場合(ブロック1604:YES)、キャッシュコントローラ220は、例示の演算構成要素404に、アトミック操作のメモリアドレスに対応するデータをメインストレージ214から取得させる(ブロック1610)。ブロック1612において、キャッシュコントローラ220は、アトミック操作に対応するストレージ及び/又はより高いレベルキャッシュからのデータに関連して、例示の演算構成要素404にCPU102からのアトミック操作を実施させる。例えば、ブロック1602~1610が発生している間に、アトミック操作は、ラッチ402aを介してメインキャッシュストアキュー212に送られる。アトミック操作は動作の詳細(例えば、増分、減分等)を含む。したがって、演算構成要素404は、アトミック操作と、アトミック操作のメモリアドレスに対応するデータとを取得する。したがって、演算構成要素404は、取得されたデータ(例えば、アトミック操作のメモリアドレスに対応する)を用いてアトミック操作(例えば、増分、減分など)を実施し得る。ブロック1614において、例示のキャッシュコントローラ220は、演算構成要素404の出力が例示のラッチ402dに出力されることを保証するために、(例えば、選択ラインを介して)MUX410を制御する。したがって、操作されたデータ(例えば、増分されたデータ、減分されたデータなど)は、操作されたデータのためのECC符号を生成するために、例示のECC生成器412に渡され得る(ブロック1616)。
【0761】
ブロック1618において、例示のECC生成器412は、操作されたデータのためのECC符号、操作されたデータ、及びその例へのメモリアドレスロケーションを、例示の調停マネージャ414に出力する。ブロック1620において、キャッシュコントローラ220は、調停マネージャ例414に、アトミック出力(例えば、操作されたデータ)をアトミック操作のメモリアドレスにおけるメインストレージ214に格納させる。
【0762】
図17は、上記のセクション5及び/又は16に関連して、ヒストグラム演算を実施するために
図1~
図5の例示のL1キャッシュ110によって実行され得る例示の機械可読命令1700を表す例示のフローチャートである。
図17の命令は、
図1~
図5のL1キャッシュ110に関連して説明されるが、命令は、任意のタイプのキャッシュ内の任意のタイプのストレージに関連して説明されてもよい。
図17の命令は、L1キャッシュ110のメインハーフ(例えば、メインキャッシュストアキュー212、メインストレージ214等)に関連して記載される。しかしながら、
図17の命令は、L1キャッシュ110の犠牲側(例えば、犠牲キャッシュストアキュー216、犠牲ストレージ218など)に関連して同様に用いられ得る。
【0763】
ブロック1702において、キャッシュコントローラ220及び/又はメインキャッシュストアキュー212の例示のラッチ402b及び/又は、例示のタグRAM208は、CPU102からヒストグラム演算を取得する。上述したように、ヒストグラム演算は、メモリのセクション(例えば、SRAMライン)に格納された各値の総数を判定することを含む。ブロック1704において、キャッシュコントローラ220は、ヒストグラム演算に対応するメモリアドレスがメインストレージ214のSRAMに格納されているかどうかを判定するために、例示のヒット/ミス論理304とインタフェースする。キャッシュコントローラ220が、ヒストグラム演算に対応するメモリアドレスがメインストレージ214のSRAMに格納されていると判定した場合(ブロック1704:YES)、制御はブロック1710に続く。
【0764】
キャッシュコントローラ220が、ヒストグラム演算に対応するメモリアドレスがメインストレージ214のSRAMに格納されていないと判定した場合(ブロック1704:NO)、キャッシュコントローラ220は、読み出しミス情報をより高レベルのキャッシュ(例えば、例示のL2キャッシュ112)に送信するために、例示のL2インタフェース228とインタフェースする(ブロック1706)。ブロック1708において、キャッシュコントローラ220は、例示の調停マネージャ414を用いて、L2インタフェース228を介してより高いレベルキャッシュから読み出しデータを取得し、ヒストグラム演算のメモリアドレスに対応するデータをメインストレージ214のSRAMに格納する。ブロック1710において、キャッシュコントローラ220は、メインストレージ214のSRAMのセクションに格納された値のためのカウントを表す値を有するヒストグラムベクトルを、例示の演算構成要素404に開始させる。
【0765】
ブロック1712において、キャッシュコントローラ220は、メインストレージ214の例示のSRAMに、SRAMのセクションに対応するビンの読み出し値を並列に出力させる。読み出された値は、ECC論理310を介して例示の演算構成要素404に出力される。ブロック1714において、キャッシュコントローラ220は、例示の演算構成要素404を利用して、ビンの読み出し値に基づいてヒストグラム値の要素の1つを増分する。例えば、読み出し値が「01」である場合、演算構成要素404は、「01」カウントに対応する要素を増分する。ブロック1722において、ヒストグラムベクトルは、例示のMUX418及び例示のラッチ402eを介して例示のMUX314に提供され、例示のMUX314は、ラッチ322b及びCPUインタフェース202を介してCPU102にヒストグラムベクトルを出力する(ブロック1722)。幾つかの例において、ヒストグラムベクトルは、付加的に又は代替として、ECC生成器412及び調停マネージャ414を介して、例示のメインストレージ214に格納される。
【0766】
図18A及び
図18Bは、上記のセクション6及び/又は17に関連して、アトミック比較及びスワップ動作を行うために、
図1~
図5の例示のL1キャッシュ110によって実行され得る例示の機械可読命令1800を表す例示のフローチャートを示す。しかし、このフローチャートは、任意のアトミック操作又はヒストグラム演算に関連して説明されてもよい。
図18A及び
図18Bの命令は、
図1~
図5のL1キャッシュ110に関連して説明されるが、これらの命令は、任意のタイプのキャッシュ内の任意のタイプのストレージに関連して説明されてもよい。
図18A及び
図18Bの命令は、L1キャッシュ110のメインハーフ(例えば、メインキャッシュストアキュー212、メインストレージ214など)に関連して記載される。しかしながら、
図18A及び
図18Bの命令は、L1キャッシュ110の犠牲側(例えば、犠牲キャッシュストアキュー216、犠牲ストレージ218など)に関連して同様に用いられ得る。
【0767】
ブロック1802において、例示のメインキャッシュストアキュー212のキャッシュコントローラ220及び/又は、例示のラッチ402bは、例示のCPU102からの鍵とのアトミック比較及びスワップ動作を取得する。上述したように、アトミック比較及びスワップは、メモリアドレスにおけるデータを鍵と比較し、メモリアドレスにおける以前に格納されたデータが鍵と一致する場合には、スワップデータでのメモリアドレスへの書き込みを実施する。ブロック1804において、キャッシュコントローラ220は、例示のMESI RAM300とインタフェースして、アトミック比較及びスワップ動作に対応するメモリアドレスの状態を判定する。
図3A~
図3Dに関連して上述したように、MESI RAM300は、メモリアドレスの状態(例えば、共有、変更、イナクティブ、又は排他的)を追跡する。ブロック1806において、キャッシュコントローラ220は、メモリアドレスの状態がイナクティブであるか(例えば、アドレス指定されたメモリがL1キャッシュ110に格納されていないか)、又は共有されているか(例えば、L1キャッシュ110に格納され、別のより高いレベルキャッシュに格納されているか)を判定するために、例示のMESI RAM300とインタフェースする。
【0768】
例示のキャッシュコントローラ220がアトミック比較及びスワップに対応するメモリアドレスの状態が共有のイナクティブであると判定した場合(ブロック1806:YES)、キャッシュコントローラ220は、例示のL2インタフェース228に、排他的状態要求によって、アトミックミス情報を、より高いレベルのキャッシュに提示させる(ブロック1808)。
図4Aに関連して上述したように、メモリアドレスがL1キャッシュ110に格納されて共有されている場合、第2のコアが異なるレベルのキャッシュにおけるデータを読み出す及び/又は書き込むと、データへの書き込みが問題を引き起こす可能性がある。なぜなら、そうすることは、異なるキャッシュ内の同じメモリアドレスに対して不整合なデータをもたらすからである。したがって、例示のL2インタフェース228は、排他的状態要求を送信して、同じメモリアドレスへの異なるキャッシュにおいて異なる書き込みが発生しないように、L1キャッシュ110が複数サイクルに対しそのキャッシュ上で動作を行うであろうことを、より高いレベルキャッシュに知らせる。
【0769】
ブロック1810において、例示のキャッシュコントローラ220は、例示のMESI RAM300に、対応するメモリアドレスの状態を排他的に変更させる。MESI RAM3400は、要求をより高いレベルキャッシュに提示した後、又はより高いレベルキャッシュから応答を受け取った後に、状態を変更してもよい。メモリアドレスの状態がイナクティブであった場合、より高いレベルのキャッシュはメモリアドレスのデータを返し、これは、例示のメインストレージ214に格納され及び/又は、例示のアトミック比較構成要素406に入力され得る。ブロック1812において、例示のキャッシュコントローラ220は、例示のアトミック比較構成要素406に、(例えば、例示のメインストレージ214及び/又はより高いレベルキャッシュから)メモリアドレスに対応するデータを取得させる。
【0770】
例示のキャッシュコントローラ220が、メモリアドレスの状態がアトミック比較に対応せず、スワップがイナクティブ又は共有であると判定した場合(ブロック1806:NO)、例示のアトミック比較構成要素406は、メモリアドレスに対応するデータをメインストレージ214から取得する(ブロック1814)。ブロック1816において、キャッシュコントローラ220は、例示のアトミック比較構成要素406に、(例えば、アトミックスワップ及び比較動作から)取得されたデータが鍵と一致するかどうかを判定させる。例示のアトミック比較構成要素406が取得されたデータが鍵と一致しないと判定した場合(ブロック1816:NO)、キャッシュコントローラ220は、アトミック比較構成要素406に、アトミック比較及びスワップから書き込まれるべきスワップデータ(例えば、取得されたデータが鍵と一致した場合に格納されるべきデータ)を破棄させる(ブロック1818)。幾つかの例において、アトミック比較構成要素406は、取得されたデータを出力して、取得されたデータをメインストレージ214に書き戻す。例示のアトミック比較構成要素406が取得されたデータが鍵と一致すると判定した場合(ブロック1816:YES)、キャッシュコントローラ220は、例示のアトミック比較構成要素406に、(例えば、アトミック比較及びスワップ動作から)メモリアドレスに書き込まれるべきスワップデータを例示のMUX410に出力させる(ブロック1820)。
【0771】
ブロック1822において、例示のキャッシュコントローラ220は、アトミック比較構成要素406の出力が例示のラッチ402dに出力されることを保証するために、(例えば、選択ラインを介して)MUX410を制御する。したがって、スワップされたデータを例示のECC生成器412に渡して、スワップされたデータのECC符号を生成し得る(ブロック1824)。
【0772】
ブロック1826において、例示のECC生成器412は、スワップされたデータのためのECC符号、スワップされたデータ、及びメモリアドレスロケーションを例示の調停マネージャ414に出力する。ブロック1828において、キャッシュコントローラ220は、調停マネージャ例414に、アトミック出力(例えば、操作されたデータ)をアトミック操作のメモリアドレスにおけるメインストレージ214に格納させる。
【0773】
図19は、上記セクション7に関連して、CPU102からのインフライトデータ転送及び書き込み命令の無効化を実行するために、
図1~
図5の例示のL1キャッシュ110によって実行され得る例示の機械可読命令1900を表す例示のフローチャートである。
図19の命令は、
図1~
図5のL1キャッシュ110に関連して説明されるが、これらの命令は、任意のタイプのキャッシュ内の任意のタイプのストレージに関連して説明されてもよい。
【0774】
ブロック1902において、キャッシュコントローラ220は、タグRAMアクセス204、206から読み出しミス動作を取得する。例えば、キャッシュコントローラ220のメインキャッシュコントローラ222は、CPU102がメインストレージ要素214及び/又は犠牲ストレージ要素214内に対応するメモリアドレスを含まない読み出し動作を発行するとき、読み出しミス動作を取得する。キャッシュコントローラ220は、メインストレージ要素214から退出させる犠牲を判定する(ブロック1904)。例えば、キャッシュコントローラ220は、犠牲を作成する。犠牲はデータを除去するためのメインストレージ要素214のメモリアドレス及びメモリロケーション(例えば、キャッシュライン)に対応する。
【0775】
キャッシュコントローラ220は、ストアキュー212に読み出し無効化動作を発行する(ブロック1906)。例えば、キャッシュコントローラ220は、犠牲のメモリアドレスを受け取ることに応答して、ストアキューの読み出しポート424に動作を送る。読み出しポート424は、犠牲に対応するアドレスを取得する(ブロック1908)。例えば、キャッシュコントローラ220は、読み出し無効化動作を発行するときに、犠牲アドレスをストアキュー212に送る。
【0776】
データストア416は、犠牲のアドレスをデータストア416に格納されたアドレスと比較する(ブロック1910)。例えば、データストア416は、ラッチ402a、402b、402c、402d、402eのいずれか、及び/又は、マージ回路403a、403b、及び/又は403gのいずれかに格納された各値に関連するアドレスのログを維持する。また、データストア416は、読み出し/無効化動作に対応する犠牲アドレスを格納する。データストア416は、データストア416内のアドレスのいずれかが犠牲のアドレスと一致するかどうかを判定する(ブロック1912)。例えば、データストア416は、ラッチ402a~dのいずれかが犠牲アドレスに対応する値及び/又はデータを含むかどうかを判定する。幾つかの例において、ラッチ402a~dは、未処理の書き込みアドレスを格納する。未処理の書き込みは、書き込み動作が完了していない(例えば、書き込み動作のデータがメインストレージ要素214に完全に書き込まれていない)ことに対応する。幾つかの例において、ストアキュー212は、犠牲となるように選択された割り当てポリシーがあるメインストレージ要素214内の位置(例えば、キャッシュライン)にデータを書き込む。
【0777】
データストア416内のアドレスのいずれかが犠牲のアドレスと一致するとデータストア416が判定した(例えば、ブロック1912が値YESを返す)場合、優先順位マルチプレクサ418は、一致するアドレスに対応するデータをMUX回路314に転送する(ブロック1914)。例えば、データストア416は、一致するアドレスを優先順位マルチプレクサ418に送る。優先順位マルチプレクサ418は、犠牲アドレスを格納するラッチ402a~dに格納されたデータ及び/又は値を選択する。優先順位マルチプレクサ418は、選択されたデータをラッチ402eに送り、MUX回路314に転送する。MUX回路314は、データを犠牲ストレージ要素214及び/又はL2キャッシュ112に送る。
【0778】
ストアキュー212は、適切なラッチ(例えば、402a~d)内の有効タグを無効に更新する(ブロック1916)。例えば、犠牲アドレスのためのデータを格納するラッチは、データが無効であることを示すために有効タグを変更する。このようにして、ストアキュー212は、そのデータのメインストレージ要素214への書き込みを中止する。したがって、例示の読み出し無効化動作1900は、未処理の書き込みが、もはや書き込み動作アドレスを保持していないキャッシュラインにデータを書き込もうとした場合に発生するエラーを訂正する。
【0779】
図20は、上述したような
図2の犠牲ストレージ218などの犠牲キャッシュにアドレスが格納されているかどうかを判定するために、
図1~
図5の例示のL1キャッシュ110によって実行され得る例示の機械可読命令2000を表す例示のフローチャートである。
図20の命令は、
図1~
図5のL1キャッシュ110に関連して説明されるが、これらの命令は、任意のタイプのキャッシュ内の任意のタイプのストレージに関連して説明されてもよい。
図20の命令は、L1キャッシュ110の犠牲側(例えば、犠牲キャッシュストアキュー216、犠牲ストレージ218など)に関連して記載される。しかしながら、
図20の命令は、L1キャッシュ110のメインハーフ(例えば、メインキャッシュストアキュー212、メインストレージ214など)に関連して同様に用いられ得る。
【0780】
機械可読命令2000は、ブロック2002で始まり、ここでL1キャッシュ110は、インタフェースから読み出しアドレスを受け取る。例えば、L1キャッシュ110は、
図1のCPU102のスカラーインタフェース502からのADP_ADDR_E2_DP0、
図3及び/又は
図5のスヌープインタフェースからのSNP_ADDR_E2_DP0、及び/又は
図8Bに示すようなCPU102のベクトルインタフェース502からのADP_ADDR_E2_DP1を受け取ることができる。
【0781】
ブロック2004において、L1キャッシュ110は、読み出しアドレスをマルチバンク犠牲キャッシュタグ(VCT)ランダムアクセスメモリ(RAM)のセットと比較する。例えば、
図8Bの第1のコンパレータ850は、ADP_ADDR_E2_DP0の第1の読み出しアドレスを、
図8Bのセット846に格納されたそれぞれのアドレスと比較し得る。他の例において、
図8Bの第2のコンパレータ852は、ADP_ADDR_E2_DP1の第2の読み出しアドレスを、セット846に格納されたそれぞれのアドレスと比較し得る。
【0782】
ブロック2006において、L1キャッシュ110は、読み出しアドレスの少なくとも1つがセットの1つにマップされるか否かを判定する。例えば、読み出しアドレスが、第1のコンパレータ850のうちの1つが関連付けられているセット846に一致することに応答して、第1のコンパレータ850のうちの1つが論理1をアサートし得る。他の例において、第2のコンパレータ852が比較に基づいてHIT_DP1を生成し得る。他の例において、読み出しアドレスが、第1のコンパレータ850のうちの1つが対応するセット846に一致しないことに応答して、第1のコンパレータ850のうちの1つが論理低を生成し得る。
【0783】
ブロック2008において、L1キャッシュ110はキャッシュヒットを識別する。例えば、第1のコンパレータ850は、比較に基づいてHIT_DP0を生成し得る。このような例では、第1のコンパレータ850は、HIT_DP0ビットベクトル内の少なくとも1ビットが論理1である(例えば、ビット値が1である)ことに応答して、キャッシュヒットを識別し得る。このような幾つかの例において、第1のコンパレータ850は、HIT_DP0ビットベクトル内のどのビットも論理1でないことに応答して、キャッシュミスを識別し得る。他の例において、第2のコンパレータ852が比較に基づいてHIT_DP1を生成し得る。このような例では、第2のコンパレータ852は、HIT_DP1ビットベクトル内の少なくとも1ビットが論理1であることに応答して、キャッシュヒットを識別し得る。このような幾つかの例において、第2のコンパレータ852は、HIT_DP1ビットベクトル内のどのビットも論理1でないことに応答して、キャッシュミスを識別し得る。
【0784】
ブロック2010において、L1キャッシュ110は、キャッシュヒット‐ミス変換論理を実行する。例えば、第1のアドレスエンコーダ論理回路854は、
図8Bの第1のANDゲート864A、第3のコンパレータ870A、又は第4のコンパレータ872Aのうちの少なくとも1つを呼び出して、例示の動作条件に応答してキャッシュヒットをキャッシュミスに、又はその逆に変換し得る。他の例において、第2のアドレスエンコーダ論理回路856は、
図8Bの第2のANDゲート864B、第5のコンパレータ870B、又は第6のコンパレータ872Bのうちの少なくとも1つを呼び出して、例示の動作条件に応答して、キャッシュヒットをキャッシュミスに、又はその逆に変換し得る。ブロック2010を実装するために用いられ得る例示のプロセスが、
図21に関連して以下において記載される。
【0785】
ブロック2012において、L1キャッシュ110は、キャッシュヒット‐ミス変換論理に基づいてキャッシュヒットアドレスを出力する。例えば、第1のアドレスエンコーダ論理回路854は、キャッシュヒット‐ミス変換論理を実行することに応答して、HIT_ADDR0を出力し得る。他の例において、第2のアドレスエンコーダ論理回路856は、キャッシュヒット‐ミス変換論理を実行することに応答して、HIT_ADDR1を出力し得る。
【0786】
ブロック2014において、L1キャッシュ110は、付加的な読み出しアドレスが受け取られたか否かを判定する。ブロック2014において、L1キャッシュ110が付加的な読み出しアドレスが受け取られたと判定すると、制御はブロック2002に戻り、インタフェースから読み出しアドレスを受け取る。ブロック2014において、L1キャッシュ110が付加的な読み出しアドレスが受け取られていないと判定した場合、
図20の例示の機械可読命令2000は終了する。
【0787】
図21は、上述したようなキャッシュヒット‐ミス変換論理を実行するために、
図1~
図5の例示のL1キャッシュ110によって実行され得る、例示の機械可読命令2100を表す例示のフローチャートである。
図21の例示の機械可読命令2100は、
図20のブロック2010を実装するために実行され得る。
図21の命令は、
図1~
図5のL1キャッシュ110に関連して説明されるが、これらの命令は、任意のタイプのキャッシュ内の任意のタイプのストレージに関連して説明されてもよい。
図21の命令は、L1キャッシュ110の犠牲側(例えば、犠牲キャッシュストアキュー216、犠牲ストレージ218など)に関連して説明される。しかしながら、
図21の命令は、L1キャッシュ110のメインハーフ(例えば、メインキャッシュストアキュー212、メインストレージ214等)に関連して同様に用いられ得る。
【0788】
図21の機械可読命令2100はブロック2102で始まり、ここで、L1キャッシュ110は、第1のインタフェースからの新たなアドレスが後のパイプラインステージで犠牲キャッシュに書き込まれたかどうかを判定する。例えば、第1のデコーダ860Aは、E2パイプラインステージでVTA_WR_SET0を受信し得、これは、E3パイプラインステージで犠牲ストレージ218にアドレスを書き込む
図5のスカラーインタフェース502を表すことができる。
【0789】
ブロック2102において、L1キャッシュ110が、第1のインタフェースからの新たなアドレスが後のパイプラインステージで犠牲キャッシュに書き込まれていると判定した場合、制御はブロック2106に進み、新たなアドレスをキャッシュヒットのアドレスと比較する。ブロック2102において、L1キャッシュ110が、第1のインタフェースからの新たなアドレスが後のパイプラインステージで犠牲キャッシュに書き込まれていないと判定した場合、ブロック2104において、L1キャッシュ110は、第2のインタフェースからの新たなアドレスが後のパイプラインステージで犠牲キャッシュに書き込まれたか否かを判定する。例えば、第2のデコーダ860Bは、E2パイプラインステージでVTAWRSET1を受信し得、これは、E3パイプラインステージで犠牲ストレージ218にアドレスを書き込む
図5のスカラーインタフェース502を表すことができる。
【0790】
ブロック2104において、L1キャッシュ110は、第2のインタフェースからの新たなアドレスが後のパイプラインステージで犠牲キャッシュに書き込まれていないと判定した場合、制御は、キャッシュヒット‐ミス変換論理に基づいてキャッシュヒットアドレスを出力するために、
図20の例示の機械読み出し可能命令2000のブロック2012に戻る。
【0791】
ブロック2104において、L1キャッシュ110が、第2のインタフェースからの新たなアドレスが後のパイプラインステージで犠牲キャッシュに書き込まれていると判定した場合、ブロック2106において、L1キャッシュ110は、新たなアドレスをキャッシュヒットのアドレスと比較する。例えば、第1のゲート864Aは、VTAG_WR_SET0のアドレスがHIT_DP0のアドレスと一致しないことに応答して論理1をアサートし得る。他の例において、第3のコンパレータ870Aが、HIT_DP0のアドレスを、スカラーインタフェース502によって犠牲ストレージ218に書き込まれているアドレスと比較し得る。更に他の例において、第4のコンパレータ872Aが、HIT_DP0のアドレスを、ベクトルインタフェース504によって犠牲ストレージ218に書き込まれているアドレスと比較し得る。
【0792】
ブロック2106で新しいアドレスをキャッシュヒットのアドレスと比較することに応答して、制御はブロック2108に進み、アドレスが一致するか否かを判定する。ブロック2108において、L1キャッシュ110がアドレスが一致しないと判定した場合、制御は、キャッシュヒット‐ミス変換論理に基づいてキャッシュヒットアドレスを出力するために、
図20の例示の機械可読命令2000のブロック2012に戻る。
【0793】
ブロック2108において、L1キャッシュ110がアドレスが一致すると判定した場合、ブロック2110において、L1キャッシュ110は、キャッシュヒット又はキャッシュミスが識別されたか否かを判定する。例えば、第1のANDゲート864A、第3のコンパレータ870A、及び/又は第4のコンパレータ872Aは、HIT_DP0が少なくとも1つのビット値1を含むことに基づいて、犠牲ストレージ218内のADP_ADDR_E2_DP0のアドレスのキャッシュヒットがあると判定し得る。他の例において、第2のANDゲート864B、第5のコンパレータ870B、及び/又は第6のコンパレータ872Bは、HIT_DP1が少なくとも1つのビット値1を含むことに基づいて、犠牲ストレージ218内のADP_ADDR_E2_DP1のアドレスのキャッシュヒットがあると判定し得る。
【0794】
ブロック2110において、キャッシュヒットが識別されるとL1キャッシュ110が判定した場合、ブロック2112において、L1キャッシュ110はキャッシュヒットをキャッシュミスに変換する。例えば、第1のANDゲート864Aは、キャッシュヒットをキャッシュミスに変換するために論理低を出力し得る。他の例において、第2のANDゲート864Bは、キャッシュヒットをキャッシュミスに変換するために論理低を出力し得る。ブロック2112でキャッシュヒットをキャッシュミスに変換することに応答して、制御は、キャッシュヒット‐ミス変換論理に基づいてキャッシュヒットアドレスを出力するために、
図20の例示の機械読み出し可能命令2000のブロック2012に戻る。
【0795】
ブロック2110において、L1キャッシュ110がキャッシュミスが識別されたと判定する場合、制御はブロック2114に進み、新たなアドレスが犠牲キャッシュに割り当てられているインタフェースの1つからの書き込みに一致することに応答して、キャッシュミスをキャッシュヒットに変換する。例えば、第3のコンパレータ870A及び/又は第4のコンパレータ872Aが、ADP_ADDR_E2_DP0がDP0又はDP1のいずれかからの書き込み動作のアドレスに一致することに応答して、キャッシュミスをキャッシュヒットに変換するために論理1をアサートし得る。他の例において、第5のコンパレータ870B及び/又は第6のコンパレータ872Bが、ADP_ADDR_E2_DP1がDP0又はDP1のいずれかからの書き込み動作のアドレスに一致することに応答して、キャッシュミスをキャッシュヒットに変換するため論理1をアサートし得る。ブロック2114でキャッシュミスをキャッシュヒットに変換することに応答して、キャッシュヒット‐ミス変換論理に基づいてキャッシュヒットアドレスを出力するために、制御は、
図20の例示の機械読み出し可能命令2000のブロック2012に戻る。
【0796】
図22は、上記の記載に関連して、メインストレージ214内でデータ割り当てを実施するために、
図1~
図5の例示のL1キャッシュ110によって実行され得る例示の機械可読命令2200を表す例示のフローチャートである。
図22の命令は、
図1~
図5のL1キャッシュ110に関連して説明されるが、これらの命令は、任意のタイプのキャッシュ内の任意のタイプのストレージに関連して説明されてもよい。
【0797】
例示のメインキャッシュコントローラ222(
図2)は、CPUインタフェース202(
図2)から命令を取得する。例えば、CPUインタフェース202は、キャッシュコントローラ220に命令を提供し、キャッシュコントローラ220は、その命令をメインキャッシュコントローラ222に伝搬する。
【0798】
メインキャッシュコントローラ222は、命令が読み出し命令であるか否かを判定する(ブロック2204)。例えば、メインキャッシュコントローラ222は、命令内の要求を解析して、メインキャッシュコントローラ222が、メインストレージ214からデータを読み出し、それをCPUインタフェース202に提供するか、又はCPU102に対して異なるタスクを実行するかを判定する。
【0799】
メインキャッシュコントローラ222が命令が読み出し命令であると判定した(例えば、ブロック2204が値YESを返す)場合、メインキャッシュコントローラ222は、読み出し命令のアドレスを判定する(ブロック2206)。例えば、メインキャッシュコントローラ222は、メインストレージ214内のどこからデータを読み出すかを判定する。幾つかの例において、メインタグRAMアクセス204が読み出し命令のアドレスを判定する。
【0800】
メインキャッシュコントローラ222は、読み出した命令のアドレスがタグRAM208、210内のアドレスと一致するか否かを判定する。例えば、キャッシュコントローラ220は、タグRAMアクセス204、206からヒット/ミス結果を取得し、アドレスがメインストレージ214及び/又は犠牲ストレージ218において利用可能であるか否かを判定し得る。メインキャッシュコントローラ222は、読み出し命令がミスであると判定し(例えば、ブロック2208が値NOを返す)、メインキャッシュコントローラ223は、アドレスに関連するキャッシュラインを識別する(ブロック2210)。例えば、メインキャッシュコントローラ222はダイレクトマップキャッシュであり、読み出し命令のアドレスは、メインストレージ214の1つのロケーション(例えば、1つのキャッシュライン)にのみ格納され得る。
【0801】
メインキャッシュコントローラ222は、キャッシュラインのデータを犠牲ストレージ218に割り当てる(ブロック2212)。例えば、メインキャッシュコントローラ222は、ダイレクトマップキャッシュラインから犠牲ストレージ214にデータを割り当てる。メインキャッシュコントローラ222は、そのデータのMESI状態に関わらず、データを割り当てる。このような割り当ては、メインストレージ214内の任意のラインを犠牲ストレージ218に割り当てることによって、メインキャッシュコントローラ222及び全体的なL1キャッシュ110の待ち時間を減少させる。
【0802】
図23は、上記のセクション10に関連して、スヌープ要求を容易にするために
図1~
図5の例示のL1キャッシュ110によって実行され得る例示の機械可読命令2300を表す例示のフローチャートである。ブロック2302において、スヌープアドレス502(例えば、スヌープインタフェース)は、より高いレベルのデータキャッシュ(例えば、L2データキャッシュ112)からスヌープ要求を取得する(ブロック2302)。これに応答して、スヌープアドレス502は、タグRAM210に読み出し命令を発行する(ブロック2304)。本明細書において説明する例では、スヌープアドレス502を介して要求されたデータを犠牲ストレージ218が含むかどうかを識別するために、読み出し命令がタグRAM210に発行される。
【0803】
ブロック2306において、比較論理306cは、タグRAM210に発行された読み出しがヒットであったかどうかを判定する(ブロック2306)。比較論理306cがタグRAM210に発行された読み出しがヒットでないと判定した場合(例えば、ブロック2306の制御がNOの結果を返す場合)、犠牲ストレージ218は、ミスが発生したことを示すスヌープ応答を生成する(ブロック2308)。また、犠牲ストレージ218は、スヌープ応答をより高いレベルのデータキャッシュ(例えば、L2データキャッシュ112)に送り返す(ブロック2310)。
【0804】
代替として、比較論理306がタグRAM210に発行された読み出しがヒットであると判定した(例えば、ブロック2306の制御がYESの結果を返す)場合、比較論理306cは、MESI RAM300の読み出し命令に関連するアドレスの状態を判定する(ブロック2312)。ブロック2312において、比較論理306は、読み出し命令に応答して識別されたアドレスの状態をMESI RAM300に格納することもできる。
【0805】
ブロック2314において、例示のアドレスエンコーダ326cは、データを取得する際に犠牲ストレージ218によって用いられるアドレス値を生成する(ブロック2314)。アドレスエンコーダ326cは、タグRAM210のアドレスを、犠牲ストレージ218によって解釈可能な形式に符号化する。例えば、タグRAM210は16ビットメモリアドレスを格納し得、一方、犠牲ストレージ218は、16ビットメモリアドレスに対応する4ビットメモリアドレスを格納する。そのため、アドレスエンコーダ326は、16ビット・メモリアドレスを4ビット・メモリアドレスに変換して、犠牲ストレージ218内の対応するメモリアドレスを位置特定及び/又は入力し得る。
【0806】
ブロック2316において、例示の応答マルチプレクサ508は、データ入力が犠牲キャッシュストアキュー216から取得されたかどうかを判定する(ブロック2316)。応答マルチプレクサ508が犠牲キャッシュストアキュー216からデータが入力されていないと判定した場合(例えば、ブロック2316の制御がNOの結果を返す場合)、応答マルチプレクサ508は、アドレスエンコーダ326cによって提供されたアドレスに基づいて識別されたデータを、スヌープ応答として、より高いレベルデータキャッシュ(例えば、L2データキャッシュ112)に出力する(ブロック2320)。
【0807】
代替として、応答マルチプレクサ508が犠牲キャッシュストアキュー216からデータが入力されたと判定した(例えば、ブロック2316の制御がYESの結果を返す)場合、応答マルチプレクサ508は、スヌープ応答において送信されるべきデータとして、データの更新されたバージョンを識別する(ブロック2318)。ブロック2318に示された制御の実行に応答して、応答マルチプレクサ508は、アドレスエンコーダ326cによって提供されたアドレスに基づいて識別されたデータを、より高いレベルデータキャッシュ(例えば、L2データキャッシュ112)にスヌープ応答として出力する(ブロック2320)。
【0808】
ブロック2322において、スヌープアドレス構成要素506(例えば、スヌープインタフェース)は、付加的なスヌープ要求が利用可能か否かを判定する(ブロック2322)。スヌープアドレス構成要素506(例えば、スヌープインタフェース)が付加的なスヌープ要求が利用可能であると判定した(例えば、ブロック2322の制御がYESの結果を返す)場合、プロセス2300はブロック2302に戻る。代替として、スヌープアドレス構成要素506(例えば、スヌープ・インタフェース)が付加的なスヌープ要求が利用可能でないと判定した(例えば、ブロック2322の制御がNOの結果を返す)場合、プロセス2300は停止する。
【0809】
【0810】
図24は、第1及び第2のデータ経路(DP0及びDP1)が有効トランザクションを含むときの、置換ポリシー構成要素308(
図3及び
図5)の例示の第1の動作2400を図示する。
図25は、第1及び第2のデータ経路(DP0及びDP1)が有効トランザクションを含むときの、置換ポリシー構成要素308の例示の第2の動作2500を図示する。
図26は、第1及び第2のデータ経路(DP0及びDP1)が有効トランザクションを含むときの、置換ポリシー構成要素308の例示の第3の動作2600を図示する。
図27は、第1のデータ経路が有効トランザクションであり、第2のデータ経路が無効トランザクションである場合の、置換ポリシー構成要素308の例示の有効/無効動作2700を図示する。
図28は、第1のデータ経路が無効トランザクションであり、第2のデータ経路が有効トランザクションである場合の、置換ポリシー構成要素308の例示の無効‐有効動作2800を図示する。
図29A、
図29B‐1、及び
図29B‐2は、データ経路が犠牲ストレージにデータを割り当てているときの置換ポリシー構成要素308の増分動作2900を図示する。
【0811】
図24を参照すると、例示のスカラーインタフェース502及び例示のベクトルインタフェース504は、第1及び第2のデータ経路が有効トランザクションであるかどうかを判定する(ブロック2402)。例えば、スカラーインタフェース502は、第1のデータ経路DP0が犠牲ストレージ218にアクセスしている(例えば、読み出し又は書き込み動作を要求している)かどうかを判定し、ベクトルインタフェース504は、第2のデータ経路DP1が犠牲ストレージ218にアクセスしているかどうかを判定する。インタフェース502、504が第1及び第2のデータ経路が有効トランザクションであると判定すると(例えば、ブロック2402が値YESを返すと)、置換ポリシー構成要素308は、ヒットミス比較論理306a、306bから結果を取得する(ブロック2404)。例えば、置換ポリシー構成要素308は、第1のデータ経路と第2のデータ経路とがタグRAM210内に一致するアドレスを有するか否かを示す結果を取得する。
【0812】
例示の置換ポリシー構成要素308は、結果が第1のデータ経路と第2のデータ経路の両方のトランザクションがヒットであることを示すかどうかを判定する(ブロック2406)。置換ポリシー構成要素308がDP0及びDP1の両方がヒットであると判定した(例えば、ブロック2406が値YESを返す)場合、LRU(least recently used)値Yは一定のままである(ブロック2408)。例えば、第1のデータ経路と第2のデータ経路のどちらもデータを退出させる必要がないため、LRU値を変更する必要はない。
【0813】
例示の置換ポリシー構成要素308は、新しいクロックサイクル上のトランザクションが受け取られたかどうかを判定する(ブロック2410)。例えば、置換ポリシー構成要素308が先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得した(例えば、ブロック2410が値YESを返す)場合、制御はブロック2402に戻る。置換ポリシー構成要素308が先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得しない(例えば、ブロック2410が値NOを返す)場合、第1の動作2400は終了する。
【0814】
置換ポリシー構成要素308が、結果が第1のデータ経路及び第2のデータ経路の両方のトランザクションがヒットであることを示さないと判定した(例えば、ブロック2406が値NOを返す)場合、置換ポリシー構成要素308は、結果が第1のデータ経路及び第2のデータ経路の両方のトランザクションがミスであることを示すかどうかを判定する(ブロック2412)。例えば、置換ポリシー構成要素308は、第1ヒットミス比較論理306aと第2ヒットミス比較論理306bからの両方の結果が、いずれのアクセスもタグRAM210におけるアドレスと一致していないことを示すか否かを判定する。
【0815】
DP0及びDP1が失われた(例えば、ブロック2412が値YESを返す)場合、置換ポリシー構成要素308は、第1のデータ経路をLRUウェイ(Y)に向ける(ブロック2414)。置換ポリシー構成要素308は、第2のデータ経路を次のLRUウェイ(Y+1)に向ける(ブロック2416)。例えば、犠牲ストレージ218はn個のウェイを含み、各ウェイはロケーション(例えば、スロット1、スロット2、スロットn)を有し、各ウェイはアドレスにマップされ、各ウェイはデータを含む。置換ポリシー構成要素308は、犠牲キャッシュ内で最も最近用いられた方法と等しくなるように値Yを初期化する。例えば、LRUウェイはスロット2であるため、Yはスロット2に等しくなる。置換ポリシー構成要素308が第1のデータ経路をLRUウェイに向けるとき(ブロック2414)、置換ポリシー構成要素308は、犠牲ストレージ218内のYのロケーションを退出のためにDP0に割り振る。同様に、置換ポリシー構成要素308が第2のデータ経路を次のLRUウェイに向けるとき(ブロック2416)、置換ポリシー構成要素308は、犠牲ストレージ218内のY+1のロケーションを退出のためにDP1に割り振る。
【0816】
例示の置換ポリシー構成要素308は、例示のマルチプレクサ330a、330bにポインタ値を提供する(ブロック2418)。例えば、置換ポリシー構成要素308は、犠牲ストレージ218からマルチプレクサ330aにDP0によって退出されるウェイのロケーション(Y)と、DP1によってマルチプレクサ330bに退出されるウェイのロケーション(Y+1)とを提供する。幾つかの例において、マルチプレクサ330a及び330bの選択入力が置換ポリシー構成要素入力を選択し、アドレス読み出し332a及び332bは、置換ポリシー構成要素308の入力を読み出し、ロケーションY及びロケーションY+1によって示されるウェイを退出させる。
【0817】
例示の置換ポリシー構成要素308は、Yを2だけ増分する(ブロック2420)。例えば、置換ポリシー構成要素308は、Yの現在の値から2スロット離れた犠牲ストレージ218内のロケーションにYを割り振る(例えば、Y=スロット1の場合、増分後のY=スロット3)。このようにして、後続のクロックサイクルの間、置換ポリシー構成要素308には、更新された適切なY値が提供される。代替として及び/又は付加的に、置換ポリシー構成要素308は、第1及び第2のデータ経路のインジケータを2だけ増分する。
【0818】
例示の置換ポリシー構成要素308は、新しいクロックサイクル上のトランザクションが受け取られたかどうかを判定する(ブロック2422)。例えば、置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得した(例えば、ブロック2422が値YESを返す)場合、制御はブロック2402に戻る。置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得しない(例えば、ブロック2420が値NOを返す)場合、第1の動作2400は終了する。
【0819】
図25を参照すると、置換ポリシー構成要素308が、結果が第1のデータ経路及び第2のデータ経路の両方がミスではないことを示すと判定した(例えば、ブロック2412が値NOを返す)場合、例示の置換ポリシー構成要素308は、結果が、第1のデータ経路がヒットであり、第2のデータ経路がミスであることを示すかどうかを判定する(ブロック2502)。
【0820】
例示の置換ポリシー構成要素308が、第1のデータ経路がヒットであり、第2のデータ経路がミスであると判定した(例えば、ブロック2502が値YESを返す)場合、置換ポリシー構成要素は、ヒットウェイ(DP0ウェイ)の犠牲ストレージ218内のロケーションを判定する(ブロック2504)。例えば、置換ポリシー構成要素308は、DP0のアドレスを解析し、そのアドレスを含む犠牲ストレージ218内のロケーションを識別する。幾つかの例において、置換ポリシー構成要素308は、犠牲ストレージ218内の要素の更新されたリストを含み得る。他の例において、置換ポリシー構成要素308は、犠牲ストレージ218に格納されたアドレスのロケーションに関する情報をタグRAM210から検索及び/又は取得する。
【0821】
例示の置換ポリシー構成要素308は、ヒットウェイ(DP0 Hit Way)が次のLRU値(Y+1)のロケーションと一致するかどうかを判定する(ブロック2506)。例えば、置換ポリシー構成要素308は、DP0のアドレスを含む Hit Wayのロケーションを、Y+1に割り振られたロケーション値と比較し得る。置換ポリシー構成要素308がこれらのロケーションが一致すると判定した(例えば、ブロック2506が値YESを返す)場合、置換ポリシー構成要素308は、次のLRU値及びLRU値の割り振りを切り替える(ブロック2508)。例えば、第2のデータ経路DP1ポインタは、次のLRU値(例えば、ロケーションY+1)の代わりにLRU値(例えば、ロケーションY)に割り振られるべきである。置換ポリシー構成要素308は、第2のデータ経路DP1がDP0 Hit Wayを退出させることを回避するように割り振りを切り替える。幾つかの例において、置換ポリシー構成要素308は、第2のデータ経路DP1によって退出されるべき犠牲ストレージ214のLRUウェイを示すためにインジケータを減分する。
【0822】
置換ポリシー構成要素308は、第2のデータ経路をLRUウェイ(Y)に向ける(ブロック2510)。例えば、置換ポリシー構成要素308は、Yの値(例えば、LRUウェイのロケーション)を退出のために第2のデータ経路DP1に割り振る。
【0823】
例示の置換ポリシー構成要素308は、マルチプレクサ330a、330bにポインタ値を提供する(ブロック2512)。例えば、置換ポリシー構成要素308は、犠牲ストレージ218からマルチプレクサ330bへDP1によって退出されるウェイのロケーション(Y)を提供する。幾つかの例において、ヒットウェイが次のLRU値のロケーションと一致しない(例えば、ブロック2506が値NOを返す)場合、置換ポリシー構成要素308は、ポインタ値Y+1及びヒットウェイのロケーションをマルチプレクサ330a、330bに提供する。例えば、第2のデータ経路DP1への次のLRU値の元の割り振りは、同じままである。
【0824】
例示の置換ポリシー構成要素308は、退出に基づいてYを増分する(ブロック2514)。例えば、データ経路へのLRU値の割り振りが切り替えられた(例えば、DP1ポインタがLRU値Yに向ける)場合、置換ポリシー構成要素308は、Yを1だけ増分する。そうでない場合、置換ポリシー構成要素308は、Yを2だけ増分する。このようにして、後続のクロックサイクルの間、置換ポリシー構成要素308には、更新されたY値及びY+1値が提供される。代替として及び/又は付加的に、置換ポリシー構成要素308は、退出に基づいて第1及び第2のデータ経路のためのインジケータを増分する。
【0825】
例示の置換ポリシー構成要素308は、新しいクロックサイクル上のトランザクションが受け取られたかどうかを判定する(ブロック2516)。例えば、置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得する(例えば、ブロック2516が値YESを返す)場合、制御は、
図24のブロック2402に戻る。置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得しない(例えば、ブロック2516が値NOを返す)場合、第2の動作2500は終了する。
【0826】
図26を参照すると、置換ポリシー構成要素308が、結果が、第1のデータ経路がヒットではなく第2のデータ経路がミスではないことを示すと判定した(例えば、ブロック2602が値NOを返す)場合、例示の置換ポリシー構成要素308は、結果が、第1のデータ経路がミスであり第2のデータ経路がヒットであることを結果が示すと判定する(ブロック2602)。
【0827】
例示の置換ポリシー構成要素308は、ヒットウェイ(DP1ウェイ)の犠牲ストレージ218内のロケーションを判定する(ブロック2604)。例えば、置換ポリシー構成要素308は、DP1のアドレスを解析し、そのアドレスを含む犠牲ストレージ218内のロケーションを識別する。
【0828】
例示の置換ポリシー構成要素308は、ヒットウェイ(DP1ウェイ)がLRU値(Y)のロケーションと一致するかどうかを判定する(ブロック2606)。例えば、置換ポリシー構成要素308は、DP1のアドレスを含むヒットウェイのロケーションを、Yに割り当てられたロケーション値と比較し得る。置換ポリシー構成要素308が、これらのロケーションが一致すると判定した(例えば、ブロック2606が値YESを返す)場合、置換ポリシー構成要素308は、LRU値及び次のLRU値の割り振りを切り替える(ブロック2608)。例えば、第1のデータ経路DP0ポインタは、LRU値(例えば、ロケーションY)の代わりに次のLRU値(例えば、ロケーションY+1)に割り当てられるべきである。置換ポリシー構成要素308は、第1のデータ経路DP0がDP1 Hit Wayを退出させることを回避するように割り振りを切り替える。幾つかの例において、置換ポリシー構成要素308がインジケータを増分して、第1のデータ経路DP0によって退出されるべき犠牲ストレージ214内の次のLRUウェイを示す。
【0829】
置換ポリシー構成要素308は、第1のデータ経路を次のLRU値(Y+1)に向ける(ブロック2610)。例えば、置換ポリシー構成要素308は、Y+1の値(例えば、次のLRUウェイのロケーション)を、退出のために第1のデータ経路DP0に割り振る。
【0830】
例示の置換ポリシー構成要素308は、マルチプレクサ330a、330bにポインタ値を提供する(ブロック2612)。例えば、置換ポリシー構成要素308は、犠牲ストレージ218からマルチプレクサ330aに、DP0によって退出されるべきウェイのロケーション(Y+1)を提供する。幾つかの例において、ヒットウェイがLRU値のロケーションと一致しない(例えば、ブロック2506が値NOを返す)場合、置換ポリシー構成要素308は、ポインタ値Y及びヒットウェイのロケーションをマルチプレクサ330a、330bに提供する。例えば、第1のデータ経路DP0へのLRU値の元の割り振りは、同じままである。
【0831】
例示の置換ポリシー構成要素308は、退出に基づいてYを増分する(ブロック2614)。例えば、データ経路へのLRU値の割り振りが切り替えられた(例えば、DP0ポインタが次のLRU値Y+1に向ける)場合、置換ポリシー構成要素308は、Yを2だけ増分する。そうでない場合、置換ポリシー構成要素308は、Yを1だけ増分する。このようにして、後続のクロックサイクルの間、置換ポリシー構成要素308には、更新されたY値が提供される。代替として及び/又は付加的に、置換ポリシー構成要素308は、退出に基づいて第1及び第2のデータ経路のためのインジケータを増分する。
【0832】
例示の置換ポリシー構成要素308は、新しいクロックサイクル上のトランザクションが受け取られたかどうかを判定する(ブロック2616)。例えば、置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得する(例えば、ブロック2616が値YESを返す)場合、制御は
図24のブロック2402に戻る。置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得しない(例えば、ブロック2616が値NOを返す)場合、第3の動作2600は終了する。
【0833】
図27を参照すると、例示のスカラーインタフェース502及び例示のベクトルインタフェース504が第1及び第2のデータ経路が有効なトランザクションではないと判定する(例えば、ブロック2402が値NOを返す)場合、例示のスカラーインタフェース502及び例示のベクトルインタフェース504は、第1のデータ経路が有効であり、第2のデータ経路が無効であるかどうかを判定する(ブロック2702)。例えば、スカラーインタフェース502は、第1のデータ経路DP0が犠牲ストレージ218にアクセスしている(例えば、読み出し又は書き込み動作を要求している)かどうかを判定し、ベクトルインタフェース504は、第2のデータ経路DP1が犠牲ストレージ218にアクセスしようとしていないかどうかを判定する。
【0834】
インタフェース502、504が、第1のデータ経路が有効トランザクションであり、第2のデータ経路が無効トランザクションであると判定した(例えば、ブロック2702が値YESを返す)場合、置換ポリシー構成要素308は、ヒットミス比較論理306aから結果を取得する(ブロック2704)。例えば、置換ポリシー構成要素308は、第1のデータ経路アクセスがタグRAM210内に一致するアドレスを有するか、又はタグRAM210内に一致するアドレスを有していないかを示す結果を取得する。例示の置換ポリシー構成要素308は、結果が第1のデータ経路がヒットであることを示すか否かを判定する(ブロック2706)。置換ポリシー構成要素308が、第1のデータ経路DP0のアドレスがタグRAM210内のアドレスにヒットすると判定した(例えば、ブロック2706が値YESを返す)場合、最も最近用いられた値Yは、一定のままである(ブロック2708)。例えば、第1のデータ経路はデータを退出させる必要がないため、LRU値を変更する必要はない。
【0835】
例示の置換ポリシー構成要素308は、新しいクロックサイクル上のトランザクションが受け取られたかどうかを判定する(ブロック2710)。例えば、置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得した(例えば、ブロック2710が値YESを返す)場合、制御は、
図24のブロック2402に戻る。置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得しない(例えば、ブロック2710が値NOを返す)場合、第1の動作2700は終了する。
【0836】
例示の置換ポリシー構成要素308が、結果が第1のデータ経路がヒットであることを示さないと判定した(例えば、ブロック2706が値NOを返す)場合、第1のデータ経路はミスである(ブロック2712)。
【0837】
例示の置換ポリシー構成要素308は、第1のデータ経路をLRUウェイ(Y)に向ける(ブロック2714)。例えば、置換ポリシー構成要素308は、犠牲ストレージ218内のYのロケーションを、退出のためにDP0に割り振る。
【0838】
例示の置換ポリシー構成要素308は、ポインタ値を第1のマルチプレクサ330aに提供する(ブロック2716)。例えば、置換ポリシー構成要素308は、LRUウェイのロケーションを、そのウェイを退出させるために第1のマルチプレクサ330aに提供する。
【0839】
例示の置換ポリシー構成要素308は、Yを増分する(ブロック2718)。例えば、置換ポリシー構成要素308は、犠牲ストレージ218内の次のロケーション(例えば、Y+1)にLRUウェイを更新する。代替として及び/又は付加的に、置換ポリシー構成要素308は、第1及び第2のデータ経路のためのインジケータを増分する。
【0840】
例示の置換ポリシー構成要素308は、新しいクロックサイクル上のトランザクションが受け取られたかどうかを判定する(ブロック2720)。例えば、置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得した(例えば、ブロック2720が値YESを返す)場合、制御は、
図24のブロック2402に戻る。置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得しない(例えば、ブロック2720が値NOを返す)場合、第1の動作2700は終了する。
【0841】
図28を参照すると、例示のスカラーインタフェース502及び例示のベクトルインタフェース504が、第1のデータ経路が有効トランザクションではなく、第2のデータ経路が有効トランザクションであると判定した(例えば、ブロック2702が値NOを返す)場合、例示のスカラーインタフェース502及び例示のベクトルインタフェース504は、第1のデータ経路が無効であり第2のデータ経路が有効であると判定する(ブロック2802)。例えば、スカラーインタフェース502は、第1のデータ経路DP0が犠牲ストレージ218にアクセス(例えば、読み出し又は書き込み動作を要求)していないと判定し、ベクトルインタフェース504は、第2のデータ経路DP1が犠牲ストレージ218にアクセスしているか否かを判定する。
【0842】
置換ポリシー構成要素308は、ヒットミス比較論理306bから結果を取得する(ブロック2804)。例えば、置換ポリシー構成要素308は、第2のデータ経路アクセスが、タグRAM210内に一致するアドレスを有するか、又はタグRAM210内に一致するアドレスを有さないかを示す結果を取得する。
【0843】
例示の置換ポリシー構成要素308は、結果が第2のデータ経路がヒットであることを示すか否かを判定する(ブロック2806)。置換ポリシー構成要素308が、第2のデータ経路DP1のアドレスがタグRAM210内のアドレスにヒットすると判定した(例えば、ブロック2806が値YESを返す)場合、最も最近用いられた値Yは一定のままである(ブロック2808)。例えば、第2のデータ経路はデータを退出させる必要がないため、LRU値を変更する必要はない。
【0844】
例示の置換ポリシー構成要素308は、新しいクロックサイクル上のトランザクションが受け取られたかどうかを判定する(ブロック2810)。例えば、置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得した(例えば、ブロック2810が値YESを返す)場合、制御は、
図24のブロック2402に戻る。置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得しない(例えば、ブロック2810が値NOを返す)場合、第1の動作2700は終了する。
【0845】
例示の置換ポリシー構成要素308が、結果が第2のデータ経路がヒットであることを示さないと判定した(例えば、ブロック2806が値NOを返す)場合、第2のデータ経路はミスである(ブロック2812)。
【0846】
例示の置換ポリシー構成要素308は、第2のデータ経路をLRUウェイ(Y)に向ける(ブロック2814)。例えば、置換ポリシー構成要素308は、犠牲ストレージ218内のYのロケーションを退出のためにDP1に割り振る。
【0847】
例示の置換ポリシー構成要素308は、ポインタ値を第2のマルチプレクサ330bに提供する(ブロック2816)。例えば、置換ポリシー構成要素308は、LRUウェイのロケーションを、そのウェイを退出させるために第2のマルチプレクサ330bに提供する。
【0848】
例示の置換ポリシー構成要素308は、Yを増分する(ブロック2818)。例えば、置換ポリシー構成要素308は、犠牲ストレージ218内の次のロケーション(例えば、Y+1)にLRUウェイを更新する。代替として及び/又は付加的に、置換ポリシー構成要素308は、第1及び第2のデータ経路のためのインジケータを増分する。
【0849】
例示の置換ポリシー構成要素308は、新しいクロックサイクル上のトランザクションが受け取られたかどうかを判定する(ブロック2820)。例えば、置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得した(例えば、ブロック2820が値YESを返す)場合、制御は、
図24のブロック2402に戻る。置換ポリシー構成要素308が、先のアクセスとは異なるトランザクション(例えば、アクセス)に対応するヒットミス結果を取得しない(例えば、ブロック2820が値NOを返す)場合、第1の動作2800は終了する。
【0850】
機械可読命令2400、2500、2600、2700、及び2800は、
図6の第1の表602に対応する。
【0851】
図29A、
図29B‐1、及び
図29B‐2は、上記の記載に関連して、データ経路の割り当て状態に基づいて犠牲ストレージ214内でLRU増分を実施するために、
図1~
図5のL1キャッシュ110によって実行され得る例示の機械可読命令2900を表す例示のフローチャートである。
【0852】
機械可読命令2900は、ブロック2902で始まり、置換ポリシー構成要素308は、第1のデータ経路割り当てポインタをロケーションYに等しくなるよう初期化する。例えば、置換ポリシー構成要素308は、ロケーションYを有する、CPU102によって最近用いられなかった犠牲ストレージ218の一部をLRU値に割り振る。このような例では、第1のデータ経路DP0が割り当てられるとき、犠牲ストレージ218は、LRU値(例えば、ロケーションY)からデータを退出させる。置換ポリシー構成要素308は、第2のデータ経路割り当てポインタを、ロケーションY+1に等しくなるよう初期化する(ブロック2904)。例えば、置換ポリシー構成要素308は、ロケーションY+1を有する、CPU102によって最近用いられなかった犠牲ストレージ218の一部を、次のLRU値に割り振る。このような例では、第2のデータ経路DP1が割り当てられるとき、犠牲ストレージ218は次のLRU値(例えば、ロケーションY+1)からデータを退出させる。
【0853】
置換ポリシー構成要素308は、第1及び第2のデータ経路が有効トランザクションであると判定する(ブロック2906)。例えば、CPU102は、両方のデータ経路上に命令を提供した。
【0854】
置換ポリシー構成要素308は、第1のデータ経路DP0が犠牲ストレージ218におけるヒットであり、第2のデータ経路DP1が割り当てられるかどうかを判定する(ブロック2908)。第1のデータ経路DP0が犠牲ストレージ218にヒットし、第2のデータ経路DP1が犠牲ストレージ218に割り当てられている(例えば、ブロック2908が値YESを返す)場合、置換ポリシー構成要素308は、ヒットロケーション(DP0 Hit Way)の犠牲ストレージ218内のロケーションを判定する(ブロック2910)。例えば、置換ポリシー構成要素308は、DP0のアドレスが犠牲ストレージ218内のどこにあるかを識別する。
【0855】
置換ポリシー構成要素308は、ヒットロケーションが第2のデータ経路割り当てポインタ(Y+1)のロケーションと等しいか否かを判定する(ブロック2912)。例えば、置換ポリシー構成要素308は、DP0のアドレスがY+1のロケーションと一致するかどうかを判定する。これらのロケーションが一致する(例えば、ブロック2912が値YESを返す)場合、置換ポリシー構成要素308は、第2のデータ経路割り当てポインタをロケーションYに等しくなるよう更新する(ブロック2914)。例えば、置換ポリシー構成要素308は、第2のデータ経路割り当てポインタの割り振りをY+1からYに切り替えて、DP0命令上で要求されたデータの退出を回避する。
【0856】
キャッシュコントローラ220は、第1のトランザクションと第2のトランザクションとを実施する(ブロック2916)。例えば、キャッシュコントローラ220は、ロケーションY+1でDP0のデータを読み出し/書き込みし、犠牲ストレージ218内のロケーションYからデータを退出させる。
【0857】
置換ポリシー構成要素308は、第1のデータ経路割り当てポインタを1だけ増分する(ブロック2918)。例えば、キャッシュコントローラ220は、Y+1ではなくロケーションYからデータを退出させるので、置換ポリシー構成要素308は、LRU値を次のLRU値(Y+1)に更新するだけでよい。
【0858】
ヒットロケーションと第2のデータ経路割り当てポインタが一致しない(例えば、ブロック2912が値NOを返す)場合、キャッシュコントローラ220は、第1のトランザクションと第2のトランザクションを実施する(ブロック2920)。例えば、置換ポリシー構成要素308は、Y+1が退出のために利用可能なデータを含み、そのため、第1のデータ経路DP0がヒットロケーションからデータを読み書きする一方で、第2の経路割り当てポインタがその位置からデータを退出させることができると判定する。
【0859】
置換ポリシー構成要素308は、第1のデータ経路割り当てポインタを2だけ増分する(ブロック2922)。例えば、キャッシュコントローラ220は、ロケーションY+1からデータを退出させるので、置換ポリシー構成要素308は、退出されたロケーションの後のロケーション(例えば、LRU値=Y+2及び次のLRU値=Y+3)にLRU値Yを更新する。
【0860】
置換ポリシー構成要素308がブロック2908の条件が真ではないと判定した(例えば、ブロック2908が値NOを返す)場合、置換ポリシー構成要素308は、第1のデータ経路が割り当てられるべきか及び第2のデータ経路がヒットするかどうかを判定する(ブロック2924)。例えば、置換ポリシー構成要素308は、第2のデータ経路が犠牲ストレージ218内のロケーションにヒットするかどうか、及びメインストレージ214が第1のデータ経路DP0上のデータを割り当てているかどうかを判定する。
【0861】
置換ポリシー構成要素308が、第1のデータ経路が割り当てられるべきであり第2のデータ経路がヒットであると判定した(例えば、ブロック2924が値YESを返す)場合、置換ポリシー構成要素308は、ヒットロケーション(DP2 Way)の犠牲ストレージ218内のロケーションを判定する(ブロック2926)。例えば、置換ポリシー構成要素308は、第2のデータ経路が犠牲ストレージ218のどこからデータを読んでいる/書いているかを判定する。
【0862】
図29B‐1を参照すると、置換ポリシー構成要素308は、ヒットロケーションがロケーションYに等しいかどうかを判定する(ブロック2928)。例えば、置換ポリシー構成要素308は、第1のデータ経路割り当てポインタがヒットデータを格納している同じロケーションに向いているかどうかを判定する。
【0863】
置換ポリシー構成要素308がロケーション一致を判定する(例えば、ブロック2928が値YESを返す)場合、置換ポリシー構成要素308は、第1のデータ経路割り当てポインタをロケーションY+1に等しくなるよう更新する(ブロック2930)。例えば、置換ポリシー構成要素308は、第1のデータ経路が犠牲ストレージ218からヒットデータを退出させることを回避するために、LRU値及び次のLRU値の割り振りを切り替える。
【0864】
キャッシュコントローラ220は、第1のトランザクションと第2のトランザクションとを実施する(ブロック2932)。例えば、キャッシュコントローラ220は、ロケーションYからデータを読み出し/書き込みし、ロケーションY+Lのデータを退出さる。置換ポリシー構成要素308は、ポインタYを2ロケーション増分する(ブロック2934)。例えば、置換ポリシー構成要素308は、LRUロケーションを、最も最近退出されたロケーションの後のロケーションに更新する(例えば、この例では、最も最近退出されたロケーションはY+1であり、そのため、LRU値がY+2に等しくなるように2だけ増分される)。
【0865】
置換ポリシー構成要素308が、ヒットロケーションがもともと割り振られていた第1のデータ経路ポインタ(Y)のロケーションと一致しないと判定した(例えば、ブロック2928が値NOを返す)場合、キャッシュコントローラ220は、第1のトランザクション及び第2のトランザクションを実施する(ブロック2936)。例えば、置換ポリシー構成要素308は、Yが退出するために利用可能なデータを含み、そのため、第1の経路割り当てポインタがそのロケーションからデータを退出させることができ、一方、第2のデータ経路DP1がヒットロケーションからデータを読み出す/書き込みすると判定する。
【0866】
置換ポリシー構成要素308は、第1のデータ経路割り当てポインタを1ロケーション増分する(ブロック2938)。例えば、キャッシュコントローラ220は、ロケーションYからデータを退出させるので、置換ポリシー構成要素308は、LRU値Yを、退出されたロケーションの後のロケーションに更新する。このようにして、置換ポリシー構成要素308は、更新されたLRU値、及び後続のクロックサイクルの間に更新された次のLRU値を含む。
【0867】
図29Aのブロック2924の条件が真ではない場合(例えば、第2のデータ経路がヒットであるときに第1のデータ経路が割り当てられない場合、ブロック2924が値NOを返す)、制御は
図29B‐2に移り、置換ポリシー構成要素308は、両方のデータ経路が割り当てられるべきであると判定する(ブロック2940)。例えば、2つの読み出しミスが発生した場合、メインストレージ214は、メインストレージ214から犠牲ストレージ218に2つのラインを割り当てる。
【0868】
このようにして、キャッシュコントローラ220は、第1のトランザクション及び第2のトランザクションを実施する(ブロック2942)。例えば、キャッシュコントローラ220は、第1のデータ経路DP0を利用するLRUロケーション(Y)からデータを退出させ、第2のデータ経路DP1を利用する次のLRUロケーション(Y+1)からデータを退出させる。
【0869】
置換ポリシー構成要素308は、第1のデータ経路割り当てポインタを2だけ増分する(ブロック2944)。例えば、幾つかの例において、データがY+Lから退出されたので、置換ポリシー構成要素308は、ロケーションYを2ロケーション増分する。幾つかの例において、LRU値が或る値だけ増分されるとき、次のLRU値は同じ値だけ同時に増分される。したがって、第1の経路割り当てポインタと第2の経路割り当てポインタは、常に更新された正確な退出ロケーションに向く。
【0870】
機械可読命令2900は、
図6の第2の表604に対応する。
【0871】
図30は、上述したような読み出し、変更、又は書き込み動作を行うために調停論理を実行するため、
図1~
図5の例示のL1キャッシュ110によって実行され得る機械可読命令3000を表す例示のフローチャートである。
図30の命令は、
図1~
図5のL1キャッシュ110に関連して説明されるが、これらの命令は、任意のタイプのキャッシュ内の任意のタイプのストレージに関連して説明されてもよい。
図30の命令は、L1キャッシュ110のメインハーフ(例えば、メインキャッシュストアキュー212、メインストレージ214等)に関連して説明される。しかしながら、
図30の命令は、L1キャッシュ110の犠牲側(例えば、犠牲キャッシュストアキュー216、犠牲ストレージ218など)に関連して同様に用いられ得る。
【0872】
図30の機械可読命令3000は、ブロック3002で始まり、L1キャッシュ110は、ハードウェアに結合されるインタフェースからストア命令を取得する。例えば、
図3A~3Dのアドレス処理構成要素302a~cは、スカラーインタフェースから第1のストア命令1018、メモリインタフェースから第2のストア命令1020、及び/又はベクトルインタフェースから第3のストア命令1022を取得することができる。代替として、
図5のアドレス処理構成要素302a~cは、スカラーインタフェースから第1のストア命令1018b、メモリインタフェースから第2のストア命令1020b、及び/又は
図10Bのベクトルインタフェースから第3のストア命令1022bを取得することができる。
【0873】
ブロック3004において、L1キャッシュ110は、ストア命令に基づいてトランザクションデータを生成する。例えば、
図3A~3Dのアドレス処理構成要素302a~c及び/又はバンク処理論理303は、
図10Aの第1のトランザクションデータ、第2のトランザクションデータ及び/又は第3のトランザクションデータを生成し得る。代替として、
図3A~3Dのアドレス処理構成要素302a~c及び/又はバンク処理論理303は、
図10Bの第1のトランザクションデータ、第2のトランザクションデータ及び/又は第3のトランザクションデータを生成し得る。ブロック3004を実装するために用いられ得る例示のプロセスは、
図31に関連して以下において記載される。
【0874】
ブロック3006において、L1キャッシュ110は、トランザクションデータに基づいて、読み出し動作が識別されるかどうかを判定する。例えば、アドレス処理構成要素302a~cは、第1のストア命令1018、第2のストア命令1020、又は第3のストア命令1022の少なくとも1つが、読み出し動作を処理させる要求を含むと判定し得る(例えば、RD_BANK_REQ[i]の値が、読み出し要求、RD_BANK_REQ[i]に対する論理高信号であることを示す等)。このような例では、読み出し動作要求は、ストア命令1018、1020、1022に含まれるR/Wデータに基づいて判定され得る。代替として、アドレス処理構成要素302a~cは、第1のストア命令1018b、第2のストア命令1020b、又は第3のストア命令1022bの少なくとも1つが、読み出し動作処理させる要求を含むと判定し得る(例えば、RD_BANK_REQ[i]の値が、読み出し要求、RD_BANK_REQ[i]に対する論理高信号を示す等)。このような例では、読み出す動作要求は、
図10Bのストア命令1018b、1020b、1022bに含まれるR/Wデータに基づいて判定され得る。
【0875】
ブロック3006において、L1キャッシュ110がトランザクションデータに基づいて識別される読み出し動作がないと判定した場合、制御はブロック3014に進み、データをストアキューに書き込むため第2の調停論理を呼び出す。ブロック3006において、L1キャッシュ110がトランザクションデータに基づいて識別された少なくとも1つの読み出し動作があると判定した場合、ブロック3008において、L1キャッシュ110は、ストアキュー又はストレージの少なくとも1つに読み出し動作のためのデータを位置特定するために、第1の調停論理を呼び出す。例えば、アドレス処理構成要素302a~cは、第1の調停論理1008を呼び出して、メインキャッシュストアキュー212又はメインストレージ214の少なくとも1つに、読み出し動作のためのデータを位置特定することができる。代替として、アドレス処理構成要素302a~cは第1の調停論理1008bを呼び出して、少なくとも1つの犠牲キャッシュストアキュー216又は犠牲ストレージ218内に、読み出し動作のためのデータを位置特定することができる。ブロック3008を実装するために実行され得る例示のプロセスは、
図20に関連して以下に記載されている。
【0876】
ブロック3010において、L1キャッシュ110は、位置特定されたデータの最新バージョンを識別する。例えば、L1キャッシュ110は、メインキャッシュストアキュー212からの要求されたデータの第1のバージョンを、メインストレージ214からの要求されたデータの第2のバージョンと比較し、比較に基づいて、第1のバージョンが第2のバージョンよりも最近であると判定し得る。代替として、L1キャッシュ110は、犠牲キャッシュストアキュー216からの要求されたデータの第1のバージョンを、犠牲ストレージ218からの要求されたデータの第2のバージョンと比較し、比較に基づいて第1のバージョンが第2のバージョンよりも最近であると判定し得る。
【0877】
ブロック3012において、L1キャッシュ110は、読み出し及び書き込みデータに対して変更動作を実行するために、位置特定されたデータの最新バージョンをストアキューに搬送する。例えば、メインキャッシュストアキュー212は、要求されたデータと書き込まれるべきデータに対して変更動作を実行するために、要求されたデータの第1のバージョンをメインキャッシュストアキュー212に搬送及び/又はその他の様式で送信し得る。代替として、犠牲キャッシュストアキュー216は、要求されたデータと書き込まれるべきデータに対して変更動作を実行するために、要求されたデータの第1のバージョンを犠牲キャッシュストアキュー216に搬送及び/又はその他の様式で送信し得る。
【0878】
ブロック3014において、L1キャッシュ110は、第2の調停論理を呼び出して、データをストアキュー又はストレージに書き込む。例えば、第1の調停論理1008は、WDATA又はその一部をメインキャッシュストアキュー212又はメインストレージ214のうちの少なくとも1つに書き込むための命令を、第2の調停論理1010に送信し得る。代替として、第1の調停論理1008bは、WDATA又はその一部を、
図10Bの犠牲キャッシュストアキュー216又は犠牲ストレージ218のうちの少なくとも1つに書き込むための命令を、第2の調停論理1010bに送信し得る。ブロック3014においてデータをストアキュー又はストレージに書き込むために第2の調停論理を呼び出すことに応答して、
図30の例示の機械可読命令3000が終了する。
【0879】
図31は、上述したようなストア命令に基づいてトランザクションデータを生成するために、
図1~
図5の例示のL1キャッシュ110によって実行され得る例示の機械可読命令3100を表す例示のフローチャートである。
図31のフローチャートは、
図30の機械可読命令3004の例示の実装であり得る。
図31の命令は
図1~
図5のL1キャッシュ110に関連して説明されるが、これらの命令は、任意のタイプのキャッシュ内の任意のタイプのストレージに関連して説明されてもよい。
図31の命令は、L1キャッシュ110のメインハーフ(例えば、メインキャッシュストアキュー212、メインストレージ214等)に関連して記載される。しかしながら、
図31の命令は、L1キャッシュ110の犠牲側(例えば、犠牲キャッシュストアキュー216、犠牲ストレージ218など)に関連して同様に用いられ得る。
【0880】
機械可読命令3100は、ブロック3102で始まり、L1キャッシュ110は、データストレージバンクの数に基づいて、ストア命令から書き込みデータを抽出する。例えば、
図3A~
図3Dのアドレス処理構成要素302a~c及び/又はバンク処理論理303は、メインキャッシュストアキュー212及び/又はメインストレージ214が分割されるデータバンクの量に基づいて、ストア命令1018、1020、1022からWDATAを抽出し得る。このような例では、16個のデータバンクを有するメインキャッシュストアキュー212に応答して、キャッシュラインを64ビットとし得、そのため、WDATAは64ビットチャンクで抽出され得る。代替として、
図3A~
図3Dのアドレス処理構成要素302a~c及び/又はバンク処理論理303は、犠牲キャッシュストアキュー216及び/又は犠牲ストレージ218が分割されるデータバンクの量に基づいて、
図10Bのストア命令1018b、1020b、1022bからWDATAを抽出し得る。このような例では、犠牲キャッシュストアキュー216が16個のデータバンクを有することに応答して、キャッシュラインを64ビットとし得、そのため、WDATAが64ビットチャンクで抽出され得る。
【0881】
ブロック3104において、L1キャッシュ110は、書き込みデータを回転させて、回転された書き込みデータを生成する。例えば、アドレス処理構成要素302a~cは、
図3A~3Dの第1のストア命令902のCPU‐Write Dataを回転させて、
図9の回転データ904を生成し得る。
【0882】
ブロック3106において、L1キャッシュ110は、ストア命令に基づいてバイトイネーブルデータを判定する。例えば、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、ストア命令1018、1020、1022に含まれるBYTENデータに基づいて、
図10AのBYTEN/BANK[i]データを判定し得る。代替として、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、ストア命令1018b、1020b、1022bに含まれるBYTENデータに基づいて、
図10BのBYTEN/BANK[i]データを判定し得る。
【0883】
ブロック3108において、L1キャッシュ110は、ストア命令に基づいてデータアクセス動作データサイズを判定する。例えば、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、ストア命令1018、1020、1022に含まれるSIZEデータに基づいて、読み出し、書き込み、及び/又は変更されるべきデータサイズを判定し得る。代替として、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、ストア命令1018b、1020b、1022bに含まれるSIZEデータに基づいて、読み出し、書き込み、及び/又は変更されるべきデータサイズを判定し得る。
【0884】
ブロック3110において、L1キャッシュ110は、ストア命令に基づいてデータストレージアドレスを判定する。例えば、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、ストア命令1018、1020、1022に含まれるADDRデータに基づいて、メインキャッシュストアキュー212の対応するバンクのMS_ADDR[i]及び/又はメインストレージ214の対応するバンクのSTQ_ADDR[i]アドレスを判定し得る。代替として、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、ストア命令1018b、1020b、1022bに含まれるADDRデータに基づいて、犠牲キャッシュストアキュー216の対応するバンクのVS_ADDR[i]及び/又は犠牲ストレージ218の対応するバンクのSTQ_V_ADDR[i]アドレスを判定し得る。
【0885】
ブロック3112において、L1キャッシュ110は、データアクセス動作データサイズ及びデータストレージアドレスを、読み出し元の第1の量のデータバンクにマップする。例えば、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、
図10AのRD_BANK_REQ[i]を生成するために、データアクセス動作サイズ及びデータストレージアドレスを、メインキャッシュストアキュー212のゼロ又はそれ以上のバンク、メインストレージ214のゼロ又はそれ以上のバンクなどにマップし得る。代替として、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、
図10BのRD_BANK_REQ[i]を生成するために、データアクセス動作サイズ及びデータストレージアドレスを、犠牲キャッシュストアキュー216のゼロ又はそれ以上のバンク、犠牲ストレージ218のゼロ又はそれ以上のバンクなどにマップし得る。
【0886】
ブロック3114において、L1キャッシュ110は、データアクセス動作データサイズ及びデータストレージアドレスを、書き込み先の第2の量のデータバンクにマップする。例えば、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、データアクセス動作サイズ及びデータストレージアドレスを、メインキャッシュストアキュー212のゼロ又はそれ以上のバンク、メインストア装置214のゼロ又はそれ以上のバンクなどにマップして、
図10AのWR_BANK_REQ[i]を生成し得る。代替として、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、
図10BのWR_BANK_REQ[i]を生成するために、データアクセス動作サイズ及びデータストレージアドレスを、犠牲キャッシュストアキュー216のゼロ又はそれ以上のバンク、犠牲ストレージ218のゼロ又はそれ以上のバンクなどにマップし得る。
【0887】
ブロック3116において、L1キャッシュ110は、第1の量、第2の量、バイトイネーブルデータ、又は書き込みデータの少なくとも1つに基づいて、トランザクションデータを生成する。例えば、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、
図10Aの第1のトランザクションデータ(TRANSACTION_DP0[i])、第2のトランザクションデータ(TRANSACTION_DMA[i])、及び第3のトランザクションデータ(TRANSACTION_DP1[i])を生成し得る。代替として、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、
図10Bの第1のトランザクションデータ(TRANSACTION_DP0[i])、第2のトランザクションデータ(TRANSACTION_DMA[i])及び第3のトランザクションデータ(TRANSACTION_DP1[i])を生成し得る。ブロック3116において、第1の量、第2の量、バイトイネーブルデータ、又は書き込みデータのうちの少なくとも1つに基づいてトランザクションデータを生成することに応答して、制御は、
図30の機械可読命令3000のブロック3006に戻り、トランザクションデータに基づいて読み出し動作が識別されるかどうかを判定する。
【0888】
図32は、上記のように、ストアキュー又はストレージの少なくとも1つにおいて読み出し動作のためのデータを位置特定するために、第1の調停論理を呼び出すために、
図1~
図5の例示のL1キャッシュ110によって実行され得る例示の機械読み出し可能命令3200を表す例示のフローチャートである。
図32のフローチャートは、
図30の機械可読命令3008の例示の実装であり得る。
図32の命令は、
図1~
図5のL1キャッシュ110に関連して説明されるが、これらの命令は、任意のタイプのキャッシュ内の任意のタイプのストレージに関連して説明されてもよい。
図32の命令は、L1キャッシュ110のメインハーフ(例えば、メインキャッシュストアキュー212、メインストレージ214等)に関連して記載される。しかしながら、
図32の命令は、L1キャッシュ110の犠牲側(例えば、犠牲キャッシュストアキュー216、犠牲ストレージ218など)に関連して同様に用いられ得る。
【0889】
機械可読命令3200は、ブロック3202で始まり、ここでL1キャッシュ110は、処理するべき対象のデータストレージバンクを選択する。例えば、
図3A~3Dのアドレス処理構成要素302a~c及び/又はバンク処理論理303は、
図10Aの第1のバンク1002を処理するよう選択し得る。代替として、
図3A~3Dのアドレス処理構成要素302a~c及び/又はバンク処理論理303は、
図10Bの第1のバンク1002bを処理するよう選択し得る。
【0890】
ブロック3204において、L1キャッシュ110は、選択されたデータストレージバンクを、インタフェースからの読み出しバンク要求に含まれるデータストレージバンクと比較する。例えば、第1の調停論理回路1008は、スカラーインタフェース、メモリインタフェース、及びベクトルインタフェースからのRD_BANK_REQ[i]のそれぞれにおいて識別されるバンクを、第1のバンク1002(例えば、STQ[0]、MS[i]など)と比較し得る。代替として、第1の調停論理1008bは、スカラーインタフェース、メモリインタフェース、及びベクトルインタフェースからのRD_BANK_REQ[i]のそれぞれにおいて識別されるバンクを、第1のバンク1002b(例えば、STQ_V[0]、VS[i]など)と比較し得る。
【0891】
ブロック3206において、L1キャッシュ110は、少なくとも1つのインタフェースが、選択されたデータストレージへのアクセスを要求するか否かを判定する。ブロック3206において、L1キャッシュ110は、インタフェースのいずれも、選択されたデータバンクへのアクセスを要求しないと判定した場合、制御はブロック3208に進み、選択されたデータストレージバンクが読み出し動作に用いられないと判定する。ブロック3208において、選択されたデータストレージバンクが読み出し動作に用いられていないと判定されたことに応答して、制御はブロック3202に戻り、処理する対象の別のデータストレージバンクを選択する。
【0892】
ブロック3206において、L1キャッシュ110が、少なくとも1つのインタフェースが、選択されたデータバンクへのアクセスを要求すると判定した場合、制御はブロック3210に進み、複数のインタフェースが、選択されたデータストレージバンクへのアクセスを要求するか否かを判定する。ブロック3210において、L1キャッシュ110は、1つのインタフェースのみが、選択されたデータストレージバンクへのアクセスを要求すると判定した場合、制御はブロック3212に進み、第1の調停論理を呼び出して、選択されたデータストレージバンクを、要求インタフェースに割り振る。ブロック3212において、選択されたデータストレージバンクを要求インタフェースに割り振るための第1の調停論理の呼び出しに応答して、制御はブロック3202に戻り、処理するべき対象の別のデータストレージバンクを選択する。
【0893】
ブロック3210において、L1キャッシュ110が、複数のインタフェースが、選択されたデータストレージバンクへのアクセスを要求すると判定した場合、制御はブロック3214に進み、第1の調停論理を呼び出して、選択されたデータストレージバンクを、読み出し動作を必要とする要求インタフェースに割り振る。例えば、第1の調停論理1008は、読み出し動作が書き込み動作よりも優先されるので、読み出し動作を必要とするインタフェースのうちの1つに第1のバンク1002を割り振ることができる。代替として、第1の調停論理1008bは、読み出し動作が書き込み動作よりも優先されるので、読み出し動作を必要とするインタフェースの1つに第1のバンク1002bを割り振ることができる。
【0894】
ブロック3216において、L1キャッシュ110は、第1の調停論理を呼び出して、書き込み動作を必要とする要求インタフェースが、選択されたデータストレージバンクに割り振られていないことを第2の調停論理に通知する。例えば、スカラーデータ経路が書き込み動作及び読み出し動作を要求しており、スカラーデータ経路が読み出し動作のために第1のデータバンク1002に割り振られていない場合、第1の調停論理1008は、第2の調停論理1010に、スカラーデータ経路を第1のデータバンク1002に割り振らないように命令し得、そのため、対応する読み出し動作がクロックサイクル中に完了されないので、ストールし、及び/又はその他の方式で書き込み動作の実行を防止する。代替として、スカラーデータ経路が書き込み動作及び読み出し動作を要求しており、スカラーデータ経路が読み出し動作のために第1のデータバンク1002bに割り振られていない場合、第1の調停論理1008は、第2の調停論理1010bに、スカラーデータ経路を第1のデータバンク1002bに割り振らないように命令し得、そのため、対応する読み出し動作がクロックサイクル中に完了されないので、ストールし、及び/又はその他の方式で書き込み動作の実行を防止する。
【0895】
ブロック3218において、L1キャッシュ110は、処理する対象の別のデータストレージバンクを選択するかどうかを判定する。例えば、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、メインキャッシュストアキュー212及びメインストレージ214の第2バンクを処理するよう選択しすると判定し得る。代替として、アドレス処理構成要素302a~c及び/又はバンク処理論理303は、犠牲キャッシュストアキュー216及び犠牲ストレージ218の第2バンクを処理するよう選択すると判定し得る。ブロック3218において、L1キャッシュ110が処理する対象の別のデータストレージバンクを選択すると判定した場合、制御はブロック3202に戻り、処理する対象の別のデータストレージバンクを選択する。ブロック3218において、L1キャッシュ110が、処理する対象の別のデータストレージバンクを選択しないと判定した場合、制御は、
図30の機械可読命令3000のブロック3010に戻り、位置特定されたデータの最新バージョンを識別する。
【0896】
図33は、上記のセクション13に関連して、犠牲ストレージ216における読み出し・変更・書き込み動作を容易にするために、
図1~
図5の例示のL1キャッシュ110によって実行され得る例示の機械可読命令3300を表す例示のフローチャートである。
図33において、犠牲キャッシュストアキュー216は、再書き込みすべきワードのバイト又はワード全体を示す、CPU102によって送信される書き込み命令(例えば、キャッシュコントローラ220を介して送信される)を取得する(ブロック3302)。本明細書において説明される幾つかの例では、書き込みポート1126が、CPU102によって送信される書き込み命令を取得してもよい
【0897】
ブロック3304において、犠牲キャッシュストアキュー216は、再書き込みされるワードの一部の値をラッチ1102bに送信する(ブロック3304)。幾つかの例において、ラッチ1102bは、再書き込みされるべきワードの一部の値をラッチ1102cに送信する。
【0898】
ブロック3306において、犠牲キャッシュストアキュー216は、再書き込みされるワードの一部のロケーションに関連するアドレス値を、ペンディングのストアアドレスデータストア1116に格納する(ブロック3306)。また、タグRAM210は、現在格納されているワード全体の読み出し命令(例えば、読み出し要求)を犠牲ストレージ218に送信する(ブロック3308)。ブロック3310において、犠牲キャッシュストアキュー216は、CPU102又はキャッシュコントローラ220の後続のクロックサイクルがあったか否かを判定する(ブロック3310)。本明細書において説明する幾つかの例において、ラッチ1102cは、CPU102又はキャッシュコントローラ220の後続のクロックサイクルがあったかどうかを判定する。CPU102又はキャッシュコントローラ220の後続のクロックサイクルが存在しないと判定する(例えば、ブロック3310の制御がNOの結果を返す)ことに応答して、プロセスは待機する。
【0899】
代替として、CPU102又はキャッシュコントローラ220の後続のサイクルがあったと判定された(例えば、ブロック3310の制御がYESの結果を返す)ことに応答して、読み出し・変更・書き込み・マージ構成要素1108は、ラッチ1102cに格納されたワードの一部(例えば、バイト)の値を取得する(ブロック3312)。また、読み出し・変更・書き込み・マージ構成要素1108は、ECC論理312によって送信された現在格納されているワード全体を取得する(ブロック3314)。このようにして、読み出し・変更・書き込み・マージ1108は、更新されるべき現在格納されているワード内のバイトのアドレスを識別する。読み出し・変更・書き込み・マージ構成要素1108が、(a)ラッチ1102cからの更新されるべき現在格納されているワードの一部の値(例えば、バイト値、ビット値など)と、(b)ECC論理312からの現在格納されているワードとを識別及び/又はその他の方式で取得すると、読み出し・変更・書き込み・マージ構成要素1108は、現在格納されているワードの一部を、ラッチ1102cから取得された現在格納されているワードの一部の値で書き込む(例えば、置換する)(ブロック3316)。例えば、読み出し・変更・書き込み・マージ構成要素1108は、ワードの一部の値を、ワード内のワードの一部に対応するアドレス値に書き込む。
【0900】
ブロック3318において、犠牲キャッシュストアキュー216は、ワード、ワードと共に格納されるべきエラー検出符号に基づいて、エラー検出符号を生成する(ブロック3318)。本明細書において記載される幾つかの例において、ECC生成器1112は、ワードに基づいてエラー検出符号を生成し、エラー検出符号はワードと共に格納される。
【0901】
ブロック3318の制御は、CPU102又はキャッシュコントローラ220の付加的な後続のクロックサイクルに応答して実施され得る。
【0902】
これに応答して、犠牲キャッシュストアキュー216は、付加的な書き込み命令が得られるか否かを判定する(ブロック3322)。犠牲キャッシュストアキュー216が別の書き込み命令が得られたと判定した(例えば、ブロック3322の制御がYESの結果を返す)場合、プロセスはブロック3302に戻る。代替として、犠牲キャッシュストアキュー216が別の書き込み命令が得られないと判定した(例えば、ブロック3322の制御がNOの結果を返す)場合、プロセス3300は、閾値タイムアウト期間が発生するまで待機し、そのため、プロセス3300を終了し得る。
【0903】
図34は、
図1~
図5及び
図10~
図11のL1キャッシュ110を実装するために
図12~
図33の命令を実行するように構成される例示のプロセッサプラットフォーム3400のブロック図である。プロセッサプラットフォーム1000は、例えば、サーバー、パーソナルコンピュータ、ワークステーション、自己学習機械(例えば、ニューラルネットワーク)、モバイルデバイス(例えば、携帯電話、スマートフォン、iPad(登録商標)などのタブレット)、PDA(personal digital assistant)、インターネット機器、ゲームコンソール、又は任意の他のタイプのコンピュータデバイスであり得る。
【0904】
図示される例のプロセッサプラットフォーム3400はプロセッサ3412を含む。図示される例のプロセッサ3412はハードウェアである。例えば、プロセッサ3412は、任意の所望のファミリ又は製造業者による1つ又は複数の集積回路、論理回路、マイクロプロセッサ、GPU、DSP、又はコントローラによって実装され得る。ハードウェアプロセッサは、半導体ベースの(例えば、シリコンベースの)デバイスであり得る。この例では、プロセッサは、
図1~
図5及び
図10~11に示すように、例示のL1キャッシュ110の任意の要素を実装する。
【0905】
図示される例のプロセッサ3412は、ローカルメモリ3413(例えば、キャッシュ)を含む。図示される例のプロセッサ3412は、バス3418を介して、揮発性メモリ3414及び不揮発性メモリ3416を含むメインメモリと通信する。不揮発性メモリ3414は、同期ダイナミックランダムアクセスメモリ、ダイナミックランダムアクセスメモリ(DRAM)、RAMBUS(登録商標)ダイナミックランダムアクセスメモリ(RDRAM(登録商標))、及び/又は任意の他のタイプのランダムアクセスメモリデバイスによって実装され得る。不揮発性メモリ3416は、フラッシュメモリ及び/又は任意の他の所望のタイプのメモリデバイスによって実装され得る。メインメモリ3414、3416へのアクセスは、メモリコントローラによって制御される。
【0906】
また、図示される例のプロセッサプラットフォーム3400は、インタフェース回路3420を含む。インタフェース回路3420は、イーサネットインタフェース、USB(ユニバーサルシリアルバス)、Bluetooth(登録商標)インタフェース、近距離無線通信インタフェース、及び/又はPCIエクスプレスインタフェースなどの任意のタイプのインタフェース規格によって実装され得る。
【0907】
図示される例において、1つ又は複数の入力デバイス3422がインタフェース回路3420に接続される。入力デバイス3422により、ユーザは、データ及び/又はコマンドをプロセッサ3412に入力し得る。入力デバイスは、例えば、オーディオセンサ、マイクロフォン、カメラ(スチル又はビデオ)、キーボード、ボタン、マウス、タッチスクリーン、トラックパッド、トラックボール、アイソポイント、及び/又は音声認識システムによって実装され得る。
【0908】
また、1つ又は複数の出力デバイス3424が、図示される例のインタフェース回路3420に接続される。出力デバイス3424は、例えば、表示デバイス(例えば、発光ダイオード(LED)、有機発光ダイオード(OLED)、液晶ディスプレイ(LCD)、陰極線管ディスプレイ(CRT)、インプレーススイッチング(IPS)ディスプレイ、タッチスクリーンなど)、触覚出力デバイス、プリンタ、及び/又はスピーカによって実装され得る。このように、図示される例のインタフェース回路3420は、グラフィクスドライバカード、グラフィクスドライバチップ、及び/又はグラフィクスドライバプロセッサを含む。
【0909】
図示される例のインタフェース回路3420はまた、ネットワーク3426を介した外部機械(例えば、任意の種類のコンピューティングデバイス)とのデータの交換を容易にするために、トランスミッタ、レシーバ、トランシーバ、モデム、レジデンシャルゲートウェイ、ワイヤレスアクセスポイント、及び/又は通信インタフェースなどの通信デバイスを含む。通信は、例えば、イーサネット接続、デジタル加入者線(DSL)接続、電話線接続、同軸ケーブルシステム、衛星システム、見通し内ワイヤレスシステム、携帯電話システム等を介するものであり得る。
【0910】
また、図示される例のプロセッサプラットフォーム3400は、ソフトウェア及び/又はデータをストアするための1つ又は複数の大容量ストレージデバイス3428を含む。そのような大容量ストレージデバイス3428の例には、フロッピーディスクドライブ、ハードディスクドライブ、コンパクトディスクドライブ、ブルーレイディスクドライブ、リダンダントアレイオブインデペンデントディスク(RAID)システム、及びデジタルバーサタイルディスク(DVD)ドライブが含まれる。
【0911】
図12~
図33の機械実行可能命令3432は、大容量ストレージデバイス3428、揮発性メモリ3414、不揮発性メモリ3416、及び/又は、CDやDVDなどの取り外し可能な非一時的コンピュータ可読ストレージ媒体に格納され得る。
【0912】
以上から、キャッシュシステムにおける書き込みミスキャッシングを容易にするための例示の方法、装置、及び製品が記載されていることが理解されよう。記載された方法、装置、及び製品は、コンピューティングシステムの待ち時間を低減するためにデータキャッシュを低減し、コンピュータコア上のストレスを低減するためにコンピュータシステム効率を改善することによって、コンピューティングデバイスを使用する効率を改善する。従って、記載された方法、装置、及び製品は、コンピュータの機能における1つ又は複数の改善をもたらす。
【0913】
本明細書では特定の例示の方法、装置、及び製品を記載してきたが、本特許の適用範囲はそれに限定されない。それどころか、本特許は、本特許の特許請求の範囲内に公正に含まれる全ての方法、装置、及び製造製品を包含する。
【0914】
以下の特許請求の範囲は、参照によってこの詳細な説明に組み込まれ、各請求項はそれ自体が本記載の個別の実施例として存在する。