JP2000215102A - プロセッサ用の進歩したメモリ階層構造 - Google Patents

プロセッサ用の進歩したメモリ階層構造

Info

Publication number
JP2000215102A
JP2000215102A JP11287163A JP28716399A JP2000215102A JP 2000215102 A JP2000215102 A JP 2000215102A JP 11287163 A JP11287163 A JP 11287163A JP 28716399 A JP28716399 A JP 28716399A JP 2000215102 A JP2000215102 A JP 2000215102A
Authority
JP
Japan
Prior art keywords
cache
write
data
line
state
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP11287163A
Other languages
English (en)
Inventor
Agarwala Sanjive
サンジブ アガルワラ
Patrick W Bosshart
ダブリュ.ボスハート パトリック
Timothy Anderson
アンダーソン ティモシイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Texas Instruments Inc
Original Assignee
Texas Instruments Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Texas Instruments Inc filed Critical Texas Instruments Inc
Publication of JP2000215102A publication Critical patent/JP2000215102A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Communication Control (AREA)

Abstract

(57)【要約】 【課題】 進歩したキャッシュメモリ階層構造を提供す
る。 【解決手段】 本発明の多重レベルキャッシュメモリ階
層構造は、データ用の第1の複数のキャッシュレベル、
命令用の第2の複数のキャッシュレベル、および前記第
1および第2の複数のキャッシュレベルとその他のメモ
リとに接続されて動作する統合されたデータおよび命令
キャッシュレベルを含む。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は一般的にコンピュー
タシステムとプロセッサ用の進歩したメモリ階層とに関
する。
【0002】
【従来の技術】コンピュータ工業界ではコンピュータシ
ステムの性能向上が常に前進する目標である。性能向上
のための技術には、より高速のプロセッサ、より幅広い
バス、およびより深い命令パイプラインが含まれる。プ
ロセッサの性能が向上するにつれて、より高速なメモリ
アクセスに対する需要もまた増大している。メモリの階
層は、より高速のメモリアクセスに対する需要に応える
ための経済的な手段である。一般に、メモリの階層には
異なる速度および寸法のいくつかのメモリが含まれる。
メモリシステムは、プロセッサに近いメモリの各レベル
がより小型で、より高速で、更に通常はより高価である
ように設計される。メモリの各レベルには、通常、それ
より上位のメモリに含まれる情報のサブセットが含まれ
る。メモリ階層の最も下位の、すなわちプロセッサに最
も近い1レベルあるいは複数レベルはキャッシュを含む
のが普通である。キャッシュはデータ、命令、あるいは
その両方のために使用される。最も頻繁に使用されるデ
ータまたは命令を収納することがキャッシュメモリの目
的である。
【0003】各キャッシュブロックには、そのブロック
が所望の情報を含んでいるかどうかを決定するために必
要な情報が付随している。例えば、ほとんどのキャッシ
ュが各ブロックに関するアドレスタグを有しており、そ
れをチェックすればそれがCPUからのアドレスと一致
しているかどうかが決定できるようになっている。更
に、一般には有効ビットを使用して、そのキャッシュブ
ロックが有効な情報を含んでいるかどうかが決定される
ようになっている。
【0004】キャッシュヒット時には、プロセッサはよ
り低速のメモリへアクセスすることなしに、キャッシュ
から情報を得る。キャッシュミス時には、プロセッサは
次のレベルのメモリまたはミスされたキャッシュの下位
のキャッシュへ行って、データを取り出そうと試みなけ
ればならず、次のレベルの先のメモリレベルまで行かな
ければならないこともある。キャッシュミス時には、所
望の情報を含むデータブロックは下位レベルのメモリか
らキャッシュへしばしば転送される。
【0005】情報をキャッシュに配置するやり方は変化
する。キャッシュを直接マッピングしてもよいし、フル
アソシアティブにしても、あるいはセット・アソシアテ
ィブにしてもよい。直接マッピングされたキャッシュで
は、情報の与えられた1ブロックをストアするために1
つの場所しか存在しない。フルアソシアティブキャッシ
ュは、ブロックをキャッシュ内の任意の場所にストアす
ることを許可する。セットアソシアティブキャッシュで
は、キャッシュ内の、セット数に依存するいくつかの場
所のうちの1つにそのブロックをストアしてよい。例え
ば、2ウエイのセットアソシアティブキャッシュでは、
与えられるブロックをストアできる場所は2つ存在す
る。ブロックをストアできる1つの場所または複数の場
所はそのブロックアドレスに依存する。
【0006】キャッシュへの書き込みには一般に2つの
オプションがある。ライトスルーオプションでは、情報
はキャッシュブロックとメインメモリブロックの両方へ
書き込まれる。ライトバックキャッシュオプションで
は、情報はキャッシュブロックのみへ書き込まれ、それ
が置換される時にだけ、そのキャッシュ内の修正された
ブロックがメインメモリへ書き込まれる。汚染(dir
ty)ビットと呼ばれる状態ビットがしばしば用いられ
て、そのブロックが汚染しているかあるいはクリーンで
あるかが表示される。1つのブロックは、もしそれがそ
のキャッシュにある間に修正されていれば汚染している
し、もし修正されていなければクリーンである。
【0007】マルチプロセッサシステムでは、プロセッ
サがデータの最新コピーを使用していること、および一
時に1つ以上のプロセッサがそのデータを修正しないこ
とを保証するために、コヒーレンシプロトコルが必要と
される。一般に使用されるプロトコルは、キャッシュ中
のデータブロックの状態を外部メモリに対比して示すM
ESIプロトコルである。MESIプロトコルは4つの
状態:修正済み、排他的、共用、および無効を利用す
る。
【0008】
【発明の解決しようとする課題】キャッシュの性能は、
ヒット時間、ミス率、およびミスペナルティに依存す
る。ヒット時間はそのキャッシュにアクセスするために
必要な時間である。ミス率はそのキャッシュに見つから
なかったアクセスの割合である。ミスペナルティはキャ
ッシュミスを処理するために要する時間である。もしキ
ャッシュ性能が良好であれば、キャッシュはメモリアク
セスのために要する時間を大幅に削減でき、それによっ
てコンピュータシステム全体の性能を向上できる。
【0009】
【課題を解決するための手段】一般に、そして本発明の
1つの形態として、データ用の第1の複数キャッシュレ
ベル、命令用の第2の複数キャッシュレベル、および前
記第1および第2の複数キャッシュレベルと他のメモリ
とに接続されて動作する統合されたデータおよび命令キ
ャッシュレベルを含む階層構造の多重レベルキャッシュ
メモリサブシステムが提供される。
【0010】本サブシステムの第1の複数キャッシュレ
ベルは好ましくは2である。本サブシステムの第2の複
数キャッシュレベルは好ましくは1である。本サブシス
テムの最下位レベルのデータキャッシュは、処理される
データ実行ユニットの数に等しいポート数に少なくとも
1つの付加的データポートを加えた数に等しいデータポ
ート数を有する。本サブシステムの最下位レベルの命令
キャッシュは、提供される命令デコーダ数に少なくとも
1を加えた数に等しい部品数を有する。
【0011】進歩した多重レベルキャッシュコヒーレン
シプロトコルは、上位キャッシュ中へロードされて以
来、少なくとも部分的に修正されて、その上位キャッシ
ュ中で“修正済み”とマークされた内容を有するキャッ
シュラインを、そのラインに含まれる情報に関して、そ
の上位キャッシュからすぐ下位のキャッシュへ書き込む
こと、その下位キャッシュ中でそのラインを“修正済
み”として同定するようにマークすること、その下位キ
ャッシュ中にあるそのラインの少なくとも一部の内容を
変更すること、およびその下位キャッシュ中のそのライ
ンを上位キャッシュに対して修正済みとしてマークする
ことを含む。
【0012】特に断らない限り、各図面において同じ参
照符号は対応する部品を指す。
【0013】
【発明の実施の形態】図1Aを参照しながら、その中に
本発明の好適実施例が組み込まれた例示スーパースカラ
パイプライン方式のマイクロプロセッサ10を含む例示
データ処理システム2について説明しよう。ここに述べ
るシステム2およびマイクロプロセッサ10のアーキテ
クチャはほんの一例であって、本発明が各種アーキテク
チャのプロセッサに利用できて、特にスーパースカラタ
イプのものに有利であることを理解されるべきである。
従って、当業者は本明細書を参照することによって本発
明をその他のそのようなプロセッサアーキテクチャ中に
実施することが容易に可能であろうことは理解されよ
う。
【0014】図1Aに示されるようなマイクロプロセッ
サ10は、バスBによって他のシステム装置につながれ
る。この例ではバスBは単一バスとして示されている
が、例えば、PCIローカルバスアーキテクチャを採用
するコンピュータ分野で知られているように、異なる速
度およびプロトコルを有する複数のバスを代表している
ことはもちろんである。単一バスBはここに単なる一例
として簡単のために示されているに過ぎない。システム
2は、通信ポート3(それはモデムポートおよびモデ
ム、ネットワークインタフェース、等を含むことができ
る)、グラフィックスディスプレイシステム4(それは
ビデオメモリ、ビデオプロセッサ、グラフィックスモニ
タを含むことができる)、典型的にはダイナミックラン
ダムアクセスメモリ(DRAM)によって実現されるメ
インメモリシステム5、入力装置6(それはキーボー
ド、ポインティングデバイス、およびそれのインタフェ
ース回路を含むことができる)、およびディスクシステ
ム8(それはハードディスクドライブ、フロッピディス
クドライブ、およびCD−ROMドライブを含むことが
できる)のようなサブシステムを含む。従って、図1A
のシステム2は、現在では当該分野で一般的な、ノート
ブックコンピュータ、デスクトップコンピュータ、ある
いはワークステーションに対応する。もちろん、当業者
には認識されるであろうように、マイクロプロセッサ1
0のその他のシステム構成も本発明から利益を得ること
ができる。
【0015】マイクロプロセッサ10は、バスBにつな
がれ、マイクロプロセッサ10とシステム2中のその他
の要素との間の通信を制御および実行するバスインタフ
ェースユニット(BIU)12を含む。BIU12はこ
の機能を実行するために適当な制御およびクロック回路
を含んでおり、それはオペレーション速度を増大するた
めの書き込みバッファと、内部マイクロプロセッサ10
オペレーションの結果をバスBのタイミング制約と同期
化するためのタイミング回路とを含んでいる。マイクロ
プロセッサ10はまた、クロックおよび制御回路20を
含んでおり、それはここの例示マイクロプロセッサ10
では、バスBからのバスクロックに基づいて内部クロッ
ク位相を発生する。内部クロック位相の周波数は、この
例では、バスクロック周波数の倍数として選択的にプロ
グラムされてよい。
【0016】図1Aで明らかなように、マイクロプロセ
ッサ10は内部キャッシュメモリの3つのレベルを有す
る。それらの最上位のものはレベル2(L2)キャッシ
ュ14であり、それはBIU12につながれている。こ
の例で、レベル2キャッシュ14は“統合化”キャッシ
ュ、すなわち、1つがコードとデータの両方をストアし
ており、バスBからBIU12を経由してすべてのキャ
ッシュ可能なデータおよびキャッシュ可能な命令を受信
するように構成されているため、マイクロプロセッサ1
0によって提供されるバストラヒックのほとんどがレベ
ル2キャッシュ14を介して実現されるようになってい
る。もちろん、マイクロプロセッサ10は特定のバス読
み出しおよび書き込みを“キャッシュ可能でない”とし
て取り扱うことによって、キャッシュ14周りのバスト
ラヒックを実現することもできる。図1Aに示されるよ
うに、レベル2キャッシュ14は2つのレベル1キャッ
シュ16につながれている。レベル1データ(L1D)
キャッシュ16dはデータ専用であり、他方、レベル1
命令(L1I)キャッシュ16iは命令専用である。マ
イクロプロセッサ10による電力消費は、レベル1キャ
ッシュ16の適当な1つのキャッシュミス時に、レベル
2キャッシュ14のみにアクセスすることによって最小
化される。更に、データ側では、レベル0(L0)キャ
ッシュ18が設けられており、それはこの例では、完全
に二重ポート化されたキャッシュである。すべてのキャ
ッシュは更に、必要なトランザクションを実行し、コヒ
ーレンシデータのような必要とされるデータを保持する
ための制御回路を含むことができる。
【0017】図1Aに示されるように、そして上で述べ
たように、マイクロプロセッサ10はスーパースカラタ
イプのものである。この例で、マイクロプロセッサ10
の内部には多重実行ユニットが設けられており、4つま
での命令が並行して同時に実行されることが可能となっ
ている。図1Bに示されるそれらの実行ユニット54
は、条件分岐、整数および論理演算を処理するための2
つのALU420、421、浮動小数点ユニット(FP
U)30、2つのロード/ストアユニット400、4
1、およびマイクロコントローラ48を含む。この2
つのロード/ストアユニット40はL0キャッシュ18
への2つのポートを利用して、それへの真に並列的なア
クセスを許容しており、またレジスタファイル39中の
レジスタへのロードおよびストアオペレーションを実行
する。一実施例では、レジスタファイル39はオペラン
ドユニット44中に含まれるかもしれない。マイクロデ
ータ変換検索バッファ(μDTLB)38が設けられ
て、論理データアドレスを物理アドレスへ変換するよう
になっている。
【0018】これらの多重実行ユニット54は、多重の
7ステージパイプラインによって制御される。それらの
ステージは次のようなものである。 F フェッチ:このステージは命令アドレスを発生し
て、命令キャッシュまたはメモリからその命令を読み出
す。 PD0プレデコードステージ0:このステージは3つま
でのフェッチされた命令の長さとスタート位置とを決定
する。 PD1プレデコードステージ1:このステージは命令バ
イトを抽出して、それらをデコード用の固定長フォーマ
ットへ再コード化する。 DC デコード:このステージは命令をアトミックオペ
レーション(AOp)へ変換する。 SC スケジュール:このステージは4つまでのAOp
を適当な実行ユニットに割り当てる。 OP オペランド:このステージはAOpによって表示
されるレジスタオペランドを取り出す。 EX 実行:このステージはAOpおよび取り出したオ
ペランドに従って実行ユニットをランする。 WB ライトバック:このステージは実行の結果をレジ
スタまたはメモリ中へストアする。
【0019】図1Aに戻ると、上で述べたパイプライン
ステージが、マイクロプロセッサ10中の各種関数ブロ
ックによって実行される。フェッチユニット26は、レ
ベル1命令キャッシュ16iに適用するために論理命令
アドレスを物理アドレスへ変換するマイクロ命令変換検
索バッファ(μITLB)22を通して、命令ポインタ
から命令アドレスを発生する。命令キャッシュ16i
フェッチユニット26への命令データの流れを生成し、
後者はそれに従って命令コードを所望のシーケンスでプ
レデコードステージへ供給する。投機的実行(spec
ulativeexecution)は主としてフェッ
チユニット26によって制御される。
【0020】命令のプレデコードはマイクロプロセッサ
10中で2つの部分、すなわちプレデコード0ステージ
28とプレデコード1ステージ32とに分割される。こ
れら2つのステージは別々のパイプラインステージとし
て動作し、また3つまでの命令をロケート(locat
e)しそれらをデコーダ34へ供給するように一緒に動
作する。従って、マイクロプロセッサ10中のパイプラ
インのプレデコードステージは3命令の幅になる。プレ
デコード0ユニット28は上で述べたように、3命令
(それらは可変長でよい)ものサイズと位置とを決定す
るので、3つの命令リコグナイザ(recognize
r)を含んでいる。プレデコード1ユニット32は、デ
コード作業を容易にするように、多重バイトの命令を固
定長フォーマットへ再コード化する。
【0021】デコードユニット34はこの例では4つの
命令デコーダを含んでおり、その各々がプレデコード1
ユニット32から固定長命令を受信して、1から3のア
トミックオペレーション(AOp)を生成することがで
きるようになっている。AOpは本質的にRISC命令
と等価である。4つのデコーダのうちの3つは並列的に
動作して、9までのAOpをデコードユニット34の出
力におけるデコードキューに配置してスケジューリング
待ちとする。4番目のデコーダは特別な場合のために取
っておく。スケジューラ36はデコードユニット34の
出力におけるデコードキューから4つまでのAOpを読
み出して、それらのAOpを適当な実行ユニット54へ
割り当てる。更に、オペランドユニット44は実行のた
めのオペランドを受信して準備する。図1Aに示される
ように、オペランドユニット44はマイクロコントロー
ラ48およびマイクロコードROM46からマルチプレ
クサ45を介して入力を受信し、命令の実行時に使用す
るためのレジスタオペランドをフェッチする。更に、こ
の例に従えば、オペランドユニット44はストアされる
準備のできたレジスタへ結果を送るオペランド転送を実
行する。ロードおよびストアタイプのAOp用のアドレ
ス発生はオペランドユニット44によって行うことがで
きる。あるいは、ロード/ストアユニット40を用いて
ロードおよびストアAOp用のアドレス発生を実行して
もよい。
【0022】マイクロコントローラ48は、マイクロコ
ードROM46と組み合わされて、一般に1つのサイク
ル中で実行すべき最後のAOpであるマイクロコードエ
ントリAOpの実行時に、ALU42およびロード/ス
トアユニット40を制御する。この例で、マイクロコン
トローラ48は、それらのマイクロコード化されたマイ
クロ命令のためのこの制御を実行するために、マイクロ
コードROM46中にストアされたマイクロ命令を順序
付けする。マイクロコード化されたマイクロ命令の例
は、マイクロプロセッサ10用として、複雑または稀に
しか使用されない命令、セグメントを修正したりレジス
タを制御する命令、例外および割り込みを処理する命
令、および多重サイクル命令(REP命令や、すべての
レジスタをPUSHしたりPOPしたりする命令など)
を含む。
【0023】マイクロプロセッサ10はまた、製造の完
了、リセット、およびその他のイベント時に、マイクロ
プロセッサ10のオペレーションの有効性を確認するた
めの特定の組み込み自己試験機能およびJTAGスキャ
ン試験のオペレーションを制御するための回路24を含
む。
【0024】図1Aは新規な多重レベルメモリ階層を利
用するプロセッサを示している。多重レベル階層は、利
用可能なチップ面積の制約のもとで、性能およびパワー
を最適化するように構築できる。図2Aを参照すると、
このメモリ階層56は好ましくは、キャッシュ14、1
6、18、書き込みバッファ60、62、64、変換検
索バッファ(TLB)50、22、38、および分岐タ
ーゲットバッファ(BTB)52を含む。このメモリ階
層56の外部的な振る舞いは、各種の外部システムとの
インタフェースとなるように構成できる。例えば、メモ
リ階層56はペンティアムTMプロセッサと同じ外部的振
る舞いを提供できる。
【0025】本発明の一実施例では、好ましくは4つの
キャッシュモジュール14、16i、16d、18が存在
する。それらをL0D、L1D、L1I、およびL2と
呼ぶことにしよう。2つのタイプのアクセス間の衝突な
しに、データアクセスバンド幅とともにフェッチバンド
幅も大きくするために、下位レベル(データ:L0Dお
よびL1D、命令:L1I)に別々のデータ18、16
d、および命令16iキャッシュが存在することが好まし
い。最上位レベルのキャッシュ14(L2)は、オンチ
ップキャッシュのヒット率を最大化し、それによってピ
ン上での電力消費を最小化して平均メモリアクセス時間
を促進する目的のために、データおよび命令ラインの両
方を保持するために使用されよう。その他のアドレッシ
ング法を使用してもよいが、もしすべてのキャッシュが
物理的にアドレス指定されれば、エイリアスによる仮想
アドレッシングに付随するコヒーレンシの問題は回避さ
れる。
【0026】後続の段落は4つのキャッシュモジュール
を組み込む実施例について述べている。この説明は全体
のサイズ、ラインサイズ、アクセス時間、およびアソシ
アティブのような情報を含んでいる。それらはほんの例
示値にしか過ぎないことに注意されたい。本発明はそれ
らの値が別の実施例では変更できることを考慮に入れて
いる。
【0027】一実施例では、L0Dキャッシュ18は一
般にプロセッササイクルの約1/3という最高速のアク
セス時間を有しており、図1Aに示されるようにロード
/ストアユニット40に最も接近している。L0Dキャ
ッシュ18はデータライン(またはブロック)をストア
し、それの全体のサイズは1kバイトであることが好ま
しい。L0Dラインは各々16バイトで、4ウエイのセ
ットアソシアティブ構成に配置されることが好ましい。
一実施例では、L0D 18は単サイクルの読み出し/
書き込み(r/w)能力を備えるスーパースカラーキャ
ッシュである。L0D 18は従って、単一のクロック
サイクルで、16バイトの整列したライン中で1から4
バイトの読み出し/書き込みを行うことができる。1バ
イトの読み出し/書き込みは1クロックを要する。もし
2から4バイトの読み出し/書き込みが16バイト不整
列であれば、それは2クロックを要する。
【0028】L0D 18で、クロック毎に、バック・
ツー・バックのr/wオペレーションが可能である。図
3の時間図はオペレーションのシーケンスを示してお
り、同じまたは異なるアドレスに対して、3クロックの
間に4読み出しと2書き込み(合計で6オペレーショ
ン)が行えることを示している。rd4およびrd5は
wr2およびwr3と同じアドレスに対して行えること
を注意しておく。従って、1つの書き込みと1つの読み
出しがClk2中に同じ場所に対して実行できるので、
書き込まれたデータは読み出しポートにおいて有効であ
る。
【0029】L1Dキャッシュ16dは次のレベルのデ
ータキャッシュであり、L0D 18からのミスを処理
する。L1D 16dは好ましくは、32バイトライン
と全体のサイズが8Kバイトである2ウエイのセットア
ソシアティブである。この実施例で、L1Dキャッシュ
16dは2ウエイのセットアソシアティブであるため、
それはL1I 16iと同じRAMアレイを使用して組
み込むことができる。L1Dキャッシュ16dはL0D
キャッシュ18を包括しないので、L0D 18中には
ラインが存在するが、L1D 16d中には存在しない
ラインがあろう。L1Dキャッシュ16dのアクセス時
間は1プロセッササイクルであることが好ましい。
【0030】命令キャッシュ16i、L1Iは好ましく
は8Kバイトのサイズで、32バイトラインを有し、2
ウエイのセットアソシアティブである。線形アドレスか
ら物理アドレスへの変換前のx86アーキテクチャ中で
アドレッシング可能な最大のセットサイズは4Kバイト
であるため、もしx86アーキテクチャを使用するので
あれば、L1I 16iは2ウエイのセットアソシアテ
ィブであることが好ましい。線形および物理アドレスの
両方において、4Kバイトの境界内のアドレスビットは
同一である。従って、キャッシュセットのアドレッシン
グ可能性を4Kバイトに制限することによって、L1I
16iへのアクセスはアドレス変換とオーバーラップ
させることができる。L1Iキャッシュ16iのアクセ
ス時間は1プロセッササイクルである。
【0031】L2キャッシュ14は組み合わされたデー
タおよび命令キャッシュである。L1D 16dおよび
L1I 16iのミスは両方ともL2キャッシュ14か
らサービスを受ける。L2キャッシュ14は好ましく
は、64Kバイトの、4ウエイのアソシアティブで、6
4バイトのスーパーラインを有する。各L2スーパーラ
インは2つの32バイトラインを含む。もしペンティア
TMプロセッサの要求との一貫性が望ましければ、外部
メモリコヒーレンスを32バイト細分性(granul
arity)に保持しなければならない。L2キャッシ
ュ14のアクセス時間は3サイクルであり、1つはタグ
検索用、残る2つはデータの読み出しと書き込み用であ
る。L2キャッシュ14のアクセス時間はタグとデータ
の読み出しを同時に行うことによって2サイクルに短縮
できる。タグ検索を最初に行えば、データの存在する正
確なウエイが決定できる。従って、データを含むデータ
ramの部分のみをパワーアップすればよい。もし並列
検索が行われれば、すべてのウエイ、この例では4ウエ
イでデータramを読み出さなければならない。
【0032】L2キャッシュ14はメモリ階層の残りと
外部メモリとの間の機能的インタフェースであり、BI
U12と共同して、メモリ階層との間でデータを出し入
れして外部システムとのコヒーレンスを保持することに
責任がある。L2キャッシュ14はまた、このメモリ階
層中の他のキャッシュモジュール間でコヒーレンスを保
持する。
【0033】多重レベルキャッシュシステムでは、キャ
ッシュ間、および外部メモリとの間でもコヒーレンスを
保持するためのシステムが要求される。コヒーレンシは
また、同一メモリへアクセスするマルチプロセッサシス
テムでも必要である。用語“汚染”は、問題のデータが
高位レベルのキャッシュと比べて異なっていることを表
示するために用いられよう。修正されたという用語は、
データが外部メモリと比べて異なっていることを示すた
めに使用されよう。キャッシュコヒーレンシを保持する
ためのプロトコルについて以下で更に説明しよう。
【0034】一実施例では、L0D 18、L1D 1
d、およびL2 14キャッシュがデータの8バイト
毎に1ビットの汚染ビットを保有している。別の実施例
では、L0D 18とL1D 16dがデータの16バ
イト毎に1つの汚染ビットを保有しており、L2 14
には汚染ビットは保持されない。汚染ビットは、次の上
位レベルのキャッシュまたはメインメモリ5へ書き込む
べきデータチャンクの数(ここに述べる実施例では8ま
たは16バイトチャンク)を、修正されたものだけに
(対応する汚染ビットがセットされる)減らすために用
いられる。この選択的な書き込みは、外部バスBのほ
か、キャッシュへの犠牲(victim)およびスヌー
プのライトバック間の電力を節約する。
【0035】図2Aに示されるように、メモリ階層56
にはBIU12によって制御される3種類の書き込みバ
ッファ60、62、64がある。ライトスルーバッファ
(WTB)60は、キャッシュから外部メモリ5へのラ
イトスルーデータの倍長ワード(dword)分をいく
つか保持するために使用される。置換ライトバックバッ
ファ(RWB)62は好ましくは64バイト幅のバッフ
ァであって、バスBが利用できる時に外部メモリ5へラ
イトバックすべき、L2キャッシュ14から戻された犠
牲データを保持するために使用される。スヌープライト
バックバッファ(SWB)64は好ましくは32バイト
幅のバッファであって、外部スヌープ要求によって外部
メモリ5へライトバックされるL2キャッシュからの3
2バイトのサブラインを保持するために使用される。
【0036】一実施例では、キャッシュ14、16、1
8、メインTLB50、およびBTB52はセットアソ
シアティブとして構成される。好ましくは、メインTL
B50、BTB52、L2キャッシュ14、およびL0
Dキャッシュ18は4ウエイのセットアソシアティブと
して構成され、またL1D 16dおよびL1I 16i
キャッシュは2ウエイのセットアソシアティブとして構
成される。μDTLB38およびμITLB22はフル
アソシアティブであるのが好ましい。各ユニットは複数
のセットを有しており、各セットはウエイ数の等しい数
のラインを有している。
【0037】メモリ階層56は好ましくは、3つのTL
B、メインTLB(TLB)50、マイクロデータTL
B(μDTLB)38、およびマイクロ命令TLB(μ
ITLB)22を含む。メインTLB50は好ましく
は、4Kページの変換用には128のエントリを、また
4Mページの変換用には4つの別々のエントリを含む。
128の4Kエントリは好ましくは4ウエイのセットア
ソシアティブ風に構成され、また4Mページはフルアソ
シアティブのように構成される。
【0038】μDTLB38は好ましくは、L0D 1
8へのデータアクセス間の高速なページ変換用にフルア
ソシアティブな構成で8エントリを含む。それはほんの
4Kページを含む。4Mページは合成された4Kページ
としてストアされる。μDTLB38は好ましくは、プ
ロセッサ10中の2つのロード/ストアユニット40に
対応して読み出し用に二重ポートとなっており、1つの
書き込みポートを有する。メモリアドレス発生、μDT
LB38(ページングが許可された時)を使用しての線
形から物理アドレスへの変換、およびL0D 18アク
セスはすべて1つプロセッササイクル中で完了する。も
し変換要求がμDTLB38中でミスすると、データア
クセスは停止されて、変換要求はメインTLB50へ渡
される。
【0039】μITLB22は命令アクセス用の高速ペ
ージ変換のために使用されて、好ましくはフルアソシア
ティブで4エントリを有する。4Mページは合成された
4Kページとしてストアされる。μITLB22はL1
I 16iと同時にアクセスされ(ページングが許可さ
れた時)、L1Iタグの比較はページ変換が完了した後
で行われる。もし変換要求がμITLB22中でミスす
ると、L1I 16iは停止されて、変換要求はメイン
TLB50へ渡される。
【0040】μDTLB38およびμITLB22から
のミスはメインTLB50によって処理される。メイン
TLB50は、変換テーブル、すなわちメインメモリ5
中のページテーブルエントリ(pte)およびページデ
ィレクトリエントリ(pde)をウオークスルー(wa
lk through)するステートマシンを有する。
しかし、TLB50要求はL2キャッシュ14を通して
送られるので、いくつかのpdeおよびpteが一時に
読み出されてL2キャッシュ14にストアされる。それ
らのエントリへのそれ以上のTLB50ミスに関して
は、それらのエントリはメインメモリ5の代わりにL2
キャッシュ14から得られる。
【0041】図4は一例として、L0Dキャッシュ18
のデータramの論理レイアウトを示す。この例で、キ
ャッシュは4ウエイのセットアソシアティブであり16
セットおよび16バイトラインを備える。図5は図4に
示されるデータramの物理レイアウトの一例を提供す
る。物理ramはメモリの奇数および偶数バンクを含
む。各バンクは2つの隣接するエントリを有し、それら
は論理16バイトラインの2つの奇数/偶数エントリを
含んでいる。各バンクの16バイト出力は(4ウエイの
うちの)各ウエイに対する4バイトに対応する。
【0042】図5に示される構造は、単一のクロックサ
イクル中に16バイトの整列ライン内で1から4の隣接
するバイトの任意のものを、また2クロック中では16
バイトの不整列ラインを読み出し/書き込みする能力を
提供するために使用することができる。以下の説明は、
図4および図5に示され上で説明したような例示L0D
キャッシュ18を使用してこの能力を説明しているが、
以下に述べる技術は、整列あるいは不整列ラインのサブ
セットの読み出しまたは書き込みが必要とされる任意の
メモリにおいて使用できよう。すべてのアドレス/デー
タの意味論は“リトルエンディアン”フォーマット、す
なわち右から左へ増大する順序になっていることに注意
されたい。
【0043】一実施例では、L0D 18へのアクセス
のために32ビットアドレスが使用される。アドレスは
好ましくは次のように分割される。
【0044】
【表1】 ビット31−8=タグヒットを決定するためのタグ比較
のために24ビットタグが使用される。 ビット7−4=16セットへのアクセスを提供する4ビ
ットセットアドレス ビット3−0=16バイトライン中のバイトオフセット
【0045】16バイト整列ライン内の任意の1から4
バイトを抽出するために、単一クロックサイクルが使用
される。これを行う機構は次のようになっている。
【0046】16バイトラインは次のように、4バイト
の奇数/偶数バンクを含むことができる。
【0047】
【表2】
【0048】16バイト整列ライン内で任意の2から4
バイトを読み出すためには、1つの奇数バンクと1つの
偶数バンクとがアクセスされなければならない。奇数/
偶数バンクのこの対から、奇数/偶数対を整列およびシ
フトすることによって、任意のバイト整列した2から4
バイトが抽出できる。従って、それぞれ4バイトの奇数
/偶数対が選ばれ、偶数−奇数または奇数−偶数として
一緒にされて8バイトセグメント(それは整列された4
バイト)を形成する。次にセグメントは下方へ1から3
バイトシフトされて、バイト整列された1から4バイト
の結果が得られる。
【0049】アドレスビット3−0は、16バイト整列
ラインからどのバイトを抽出する必要があるかに関する
情報を運ぶ。アドレスビット1−0は1つの奇数/偶数
対の中でバイトオフセットを制御する。どの奇数/偶数
対を選ぶか、およびそれらをどの順序で配置するか(偶
数−奇数か、奇数−偶数か)の決定は次に示すように行
われる。
【0050】
【表3】
【0051】もし‘奇数バンク選択’が高レベルであれ
ば奇数1が選ばれ、もしそれが低レベルであれば奇数0
が選ばれる。‘偶数バンク選択’が高レベルであれば偶
数1が選ばれ、またそれが低レベルであれば偶数0が選
ばれる。‘上位半分として偶数’が高レベルの時は、選
ばれた奇数および偶数バンクから形成される8バイトの
高位4バイトとして偶数バイトを備えた8バイトチャン
クが形成される。‘上位半分として奇数’が高レベルの
時は、結果は上で述べた‘上位半分として偶数’の逆で
ある。
【0052】以下は上述の方式を実演するための例であ
る。32ビットアドレスが16進数で0x.....5
であり、この番地からスタートする4バイトがアクセス
されると想定する。従って、次のラインから我々はバイ
ト8−5にアクセスしたい。
【0053】
【表4】
【0054】3−0アドレスビットは次のようになる。
【0055】
【表5】
【0056】従って、 偶数バンク選択=A<3>xorA2>=0xor1=
1 奇数バンク選択=A<3>=0 上位半分として偶数=A<2>=1
【0057】この結果、奇数0および偶数1が選択さ
れ、一緒に偶数1−奇数0として配置される。これか
ら、16バイトラインから抽出される8バイトチャンク
は次のようになる。
【0058】
【表6】
【0059】次に、バイト整列したデータを抽出するた
めの右シフトインデックスを決定するためにA<1−0
>が使用される。この例では、A<1−0>=01であ
る。従って、1バイトの右シフトは期待されるバイト整
列したデータを提供しよう。0b0a09080706
0504を1バイト右シフトすると、0b0a0908
070605となり、期待されるデータとして最も右の
4バイトが得られる。
【0060】16バイトの不整列アクセスに対しては、
任意の2から4バイトのデータを抽出するために2クロ
ックが必要である。その機構は、上述の方式と、2クロ
ック中にデータを抽出するためのアドレス算出との組み
合わせを用いる。16バイト不整列アクセスにおいて
は、必要とされるデータは2つの隣接する16バイト整
列ラインに広がっている。例えば、もしアドレス0
x......0eにある4バイトが必要であれば、そ
れらは次のように抽出できる。
【0061】
【表7】
【0062】最初の1から3バイトは、上で説明した整
列方式を用いて、下位の16バイトラインから抽出され
る。次に16(16進数で0x10)がアドレスに加算
されて、この計算結果が次の上位の16バイトラインへ
のアドレスポインタとなる。次に、上述の方式を用い
て、上位の16バイトラインから残りのバイトが抽出さ
れる。上述の工程は2つの4バイト整列したデータチャ
ンクを与える。最初のセグメントからのいくつかのバイ
トと、第2のセグメントからのいくつかのバイトとが選
ばれて期待された連続するデータを形成する。
【0063】例えば、もしアドレス0x.....0e
にある4バイトが必要なら、下位の16バイトからのバ
イト14および15と、上位の16バイトからのバイト
0および1が、11100f0eの結果のために期待さ
れる。
【0064】まず、所望データの最初の半分がセット0
から抽出される。このセットのアドレスは、アドレス0
x....0eのアドレスビットA<7−4>にある。 A<3−0>=1110 偶数バンク選択=A<3>xorA<2>=1xor1
=0 奇数バンク選択=A<3>=1 上位半分として偶数=A<2>=1
【0065】奇数1および偶数0が選ばれて、一緒に偶
数0−奇数1として配置される。従って、8バイトチャ
ンクが16バイトラインから抽出されたことになる。
【0066】
【表8】
【0067】次に、2バイトの右シフトが行われて、下
位の16バイトから4バイト01000f0eが得られ
る。下位の16バイトのバイト0と1が循環することに
注意されたい。
【0068】上位16バイトの該当部分を得るために、
アドレスに対して16(0x10)が加算されて、新し
いアドレス0x.....1eが得られる。A<7−4
>=0x1であるから、このアドレスはセット1を指
す。整列した奇数/偶数選択およびバイトローテーショ
ンが下位の16バイトに対して実行され次に実行され
る。 a<3=0>=1110 偶数バンク選択=A<3>xorA<2>=1xor1
=0 奇数バンク選択=A<3>=1 上位半分として偶数=A<2>=1
【0069】従って、奇数1および偶数0が選ばれ、一
緒に偶数0−奇数1として配置される。これから、16
バイトラインから抽出される8バイトチャンクは次のよ
うになる。
【0070】
【表9】
【0071】次に、2バイトの右シフトが実行されて、
10feの4バイトが得られる。ここでも、上位16バ
イトラインのバイト14および15の循環に注意された
い。2つの計算からの該当するバイトは次に多重化され
る。
【0072】
【表10】
【0073】下位の半分からの‘0f0e’および上位
の半分からの‘1110’が選択されて、その結果、1
6バイトの不整列境界を横切って広がる4バイトが得ら
れる。上述の方法を用いて、それらのバイトは2クロッ
クで抽出できる。
【0074】マイクロプロセッサは一般に、オンチップ
のキャッシュを許可または不許可のいずれかで動作でき
る。ペンティアムTMプロセッサでは、メモリは、ペンテ
ィアムプロセッサTMユーザマニュアルの第1巻に従うペ
ージ変換テーブルにあるCR0.CDビットまたはPC
Dビットを使用することによって、任意のデータまたは
命令ラインをキャッシングすることを妨げられる。キャ
ッシュが禁止される時は、すべてのメモリの読み出しお
よび書き込みはバスを使用して直接的に外部メインメモ
リに対して実行される。しかし、もしいくらかのデータ
がキャッシュにストアされた後でキャッシュが禁止され
たのであれば、キャッシュ禁止であってもキャッシュが
ヒットすることがあり得る。各種のケースについてペン
ティアム TMプロセッサユーザマニュアルの第1巻に述べ
られている。ペンティアムTMでは個々のラインのキャッ
シュ能力は外部ピンKEN#によって制御される。その
ような特徴点についての記述に関しては、ペンティアム
TMプロセッサユーザマニュアルの第1巻を参照された
い。
【0075】メモリ階層56は、ライトスルー(WT)
またはライトバック(WB)のいずれかのモードで動作
することができる。ペンティアムTMでは、WB/WTモ
ードは、ページ変換テーブル(ペンティアムTMプロセッ
サユーザマニュアルの第1巻を参照)のPWTビット、
CR0.NWビット、および、バスのWB/WT#ピン
によって制御される。ライトスルーモードでは、プロセ
ッサ中での書き込みアクセスはすべてバスB上へ通知さ
れる。ライトバックモードでは、キャッシュラインの書
き込みは通常はラインが内部L2キャッシュ14から移
される時だけバスB上に現れるか、あるいは1ラインが
1つのプロセッサによって要求されて、別のプロセッサ
はそのラインの修正されたコピーを有するようになって
いる。
【0076】一実施例では、内部および外部条件がキャ
ッシングを許容する時は、各種の読み出し/書き込みオ
ペレーションは好ましくはメモリ階層56中で次のよう
に進行する。
【0077】命令読み出し:命令フェッチの間、フェッ
チユニットは、命令を含むメモリの16バイト量をL1
Iキャッシュ16iから要求する。もしそれらの16バ
イトがL1I 16i中に存在すれば(L1I中でヒッ
ト)、L1I 16iは直ちにその16バイト量をフェ
ッチユニット26へ供給する。もしそれがミスであれ
ば、L1I 16iはその要求をL2キャッシュ14へ
送り出す。もしその要求がL2 14でヒットすれば、
32バイトの1ラインがL1I 16iへ供給される。
L1I 16iはこのラインをストアして、要求された
16バイト部分をフェッチユニット26へ供給する。も
しその読み出し要求がL2 14でミスすれば、L2
14は、BIU12に対してそのラインを(あるいはそ
のラインを含むスーパーラインを、これはそのスーパー
ライン中にその他のラインが存在するかどうかに依存す
る)メインメモリ5から得るように要求する。BIU1
2はその(それら)ラインを8バイトチャンクでフェッ
チして、準備が整えば、それらをL2 14/L1I
16i/フェッチユニット26へ通過させる。フェッチ
ユニット26は、それらが準備できた時には8バイト部
分を消費する。データの最初の32バイト(L1I 1
iによって要求されたライン)が有効である時は、L
1I 16iがそのラインをストアして、フェッチユニ
ット26からの別の読み出し要求に対処する準備ができ
ている。L2キャッシュ14が外部メモリ5からそのラ
イン(またはスーパーライン)を得た後で、それはその
ライン(またはスーパーライン)をストアして、別の要
求に対処する準備ができている。
【0078】データ読み出し:データフェッチの間に、
ロード/ストアユニット40(L/S0およびL/S
1)はL0Dキャッシュ18へ1/2/4バイトの読み
出し要求をサブミットする。各L/Sユニット40はL
0Dキャッシュ18への専用の読み出しポートを有す
る。従って、L0D 18によって同じサイクル中に多
重読み出し要求が処理できる。もし読み出し要求がL0
D 18でヒットすれば、データが直ちに対応するL/
Sユニット40へ供給される。もしその要求がミスすれ
ば、L0D 18はその要求をL1D 16dへ送る。
(もし両方のL/Sユニット40が読み出し要求を受け
て、両方がミスすれば、L/S0400からの要求が先
に処理される)。もしL1D 16dでヒットすれば、
L1D 16dは16バイトラインをL0D 18へ戻
す。L0D 18はその16バイトラインをストアし
て、その要求しているL/Sユニット40へ供給する。
もしそれがL1D 16dでのミスであれば、その読み
出し要求はL2キャッシュ14へ送られて、L2キャッ
シュ14は、それが命令読み出しを処理する方法と同じ
ように、データ読み出しアクセスを処理する。もし読み
出し要求がキャッシュの1つでミスすれば、そのライン
が次の上位レベルキャッシュまたはメインメモリ5へ供
給されるまではそのキャッシュはブロックされることに
注意されたい。
【0079】データ書き込み:データストアの間に、L
/Sユニット40は1/2/4バイト書き込み要求をL
0D 18へサブミットする。もしそのラインがL0D
18に存在すれば、そこで書き込みが実行される。更
に、もしそのラインがL0D18で既に修正されていな
ければ、その書き込み要求はL1Dキャッシュ16d
も送られる。もしそのラインがL1D 16dに存在す
れば、書き込みがL1D 16dで実行される。更に、
もしそのラインがL1D 16dで既に修正されていな
ければ、その書き込み要求はL2キャッシュ14へも送
信される。L2キャッシュ14中でのそのラインの状態
に関わらず、その書き込みは好ましくはL2 14では
決して実行されない。これは書き込みアクセスの間にL
2キャッシュ14アレイをパワーオンすることを避ける
ために行われる。しかし、L2キャッシュ14はもしそ
れがヒットすれば、そのラインに要求された状態変更を
実行する。更に、もしそれがヒットであれば、そしてそ
の書き込みがメインメモリ5へ書き込まれる必要があれ
ば、その書き込み要求はBIU12へ送られる(これを
ライトスルーと呼ぶ)。もしそのラインがL0D 18
でミスすれば、その書き込み要求はL1D 16dへ送
られて、その後でL0D 18は解放されてL/Sユニ
ット40からの他の要求に応じることができる(L0D
18は書き込みに関してはブロックされない)。もし
そのラインがL1D 16dでミスすれば、その書き込
み要求はL2 14へ送られる。しかし、一実施例で
は、L1D16dは、L0D 18からの別の要求に応
えられる前に、L2 14がそれを手放すまで待つ。も
しこの書き込み要求がL2 14でミスすれば、それは
BIU12へ送られる。BIU12はその書き込み情報
を書き込みバッファ60、62、64の1つにストアし
て、バスBが有効になった時点でそれをバスBに書き込
む。
【0080】書き込み割り当て:キャッシュミスが発生
した時に、もし1つのキャッシュラインが満杯であれ
ば、そのラインは割り当てられるべきといえる。一実施
例では、メモリ階層の一部のみが書き込みミスの時にラ
インを割り当てる。L0D 18は好ましくは、書き込
みミス時にラインを割り当てないので、それは書き込み
に関してブロックしない。L1D 16dは好ましく
は、それがL2 14でヒットした時だけ、書き込みミ
スでそのラインを割り当てる。もしそのアクセスがL2
14でもミスすれば、そのラインは好ましくはL1D
16dでは割り当てられず、L1D 16dは解放され
て他の要求に応じることができる。一般に、そのライン
は好ましくは書き込みミス時にL2キャッシュ14に割
り当てられる。
【0081】犠牲置換およびライトバック:L0D 1
d、L1D 18、またはL2 14キャッシュでミ
スがあった時は、そして対応するキャッシュの中の関連
するセットに空の(無効な)ラインが存在しなければ、
そのセット中のラインの1つが選ばれて、次の上位レベ
ルのキャッシュまたはメモリからフェッチされるべき新
しいラインによって置き換えられる。置換すべきライン
は犠牲と呼ばれる。もし犠牲が対応するキャッシュ中で
汚染(dirty)であれば、それは、新しいラインが
その場所に書き込まれる前に、次のレベルのキャッシュ
またはメモリへライトバックされなければならない。も
し犠牲がそのキャッシュの中で汚染していなければ、そ
れは単にフェッチされる新しいラインによって置き換え
られよう。
【0082】L2キャッシュ14周りのバイパス書き込
み:ロード/ストアユニット40からのデータ書き込み
は好ましくは、L2キャッシュ14中で決して実行され
ない。L0D 18/L1D 16d中でコピーのみが
修正されて、そして/またはそのアクセスはメインメモ
リ5中で実行される。従って、L2キャッシュ14中の
1つのラインのコピーが古いデータを有しているが、メ
インメモリ5およびL0D 18(および/またはL1
D 16d)は同じ最新のデータを有しており、そのラ
インがメモリ階層中で修正済み状態にない可能性があ
る。しかし、このデータの不一致は誤った動作を生じる
ことはないであろう。ラインがL0D 18から置換さ
れる時は、それはL1D 16dへライトバックされ、
同様に、それがL1D 16dから置換される時は、そ
れはL2 14へライトバックされるので、修正された
データがメモリ階層中に保存されて、必要な時にはL/
S40またはフェッチ26ユニットによって使用され
る。
【0083】TLB読み出し:TLB50ミス時に、あ
るいはTLBエントリ中の‘汚染’ビットがセットされ
る必要がある時は、メインTLB50はアンロックされ
た読み出し要求をL2 14へ送る。L2キャッシュ1
4は、それがヒットすれば直ちに、ページテーブルエン
トリまたはページディレクトリエントリをTLB50へ
供給する。ミスの場合には、L2キャッシュ14はメイ
ンメモリ5からそのエントリをフェッチして、そのライ
ン(またはスーパーライン)をストアして、そのエント
リをTLB50へ供給する。注意:TLB50からの書
き込み要求は好ましくはロックされており、そしてロッ
クされたアクセスはキャッシング不可能である。ロック
されたアクセスの間、ローカルバスの制御は、ロックさ
れた要求が完了するまでは別のバスコントローラへ渡さ
れない。
【0084】L0D 18におけるデータアクセスの危
険:ロード/ストアユニット40の両方が同じサイクル
でデータアクセスを必要とすることがあり得る。もし両
方の要求が同じアドレス(同じ16バイトライン)に対
するものであり、少なくともその一方が書き込みアクセ
スであれば、それは危険な状態であって、L0Dキャッ
シュ18はそのデータアクセスを進める前にその危険を
解決する。
【0085】新しいラインをL/Sユニット40へフェ
ッチする時は、もしキャッシュの1つのセットの中に空
きのラインがなければ(すなわち、セット中のすべての
ラインが有効なデータを含んでいる)、そのセットに新
しいラインをストアできる前に、現在のラインの1つを
置き換える必要がある。置換すべきラインは置換アルゴ
リズムによって決定される。それは異なるキャッシュユ
ニット毎に異なる。一実施例では、L1D 16dおよ
びL1I 16iキャッシュはLRU(リースト・リセ
ントリ・ユーズド)アルゴリズムを使用しており、一方
他のユニットは擬似LRU(あるいはツリーLRU)ア
ルゴリズムを使用する。擬似LRUアルゴリズムは、L
RUアルゴリズムにおいてしばしば維持されている詳細
な履歴を保持しないで、最も長時間にわたりアクセスさ
れていないウエイを記録しようとする。
【0086】一実施例では、4ウエイのセットアソシア
ティブキャッシュ用の擬似またはツリーLRUは図6に
示されるように、b0−b2の3ビットを含む。それら
3ビットの値は次にどのウエイを置換するかを表示す
る。各ヒットまたはミスにおいて、2つのビットをウエ
イ経路でフリップし、未使用ビットを運ぶことによって
次のLRUが計算される。ミス時には、ウエイ経路は置
換されたウエイである。どのウエイでもヒットは起こり
える。ヒットが発生すると、2つのウエイ経路ビットが
フリップされて次のLRUが得られる。例えば、もしL
RUの値が000(それぞれb2、b1、およびb0)
であり、読み出しミスがあったとすれば、次のLRU値
は011(ウエイ経路がウエイ0であるため、キャリー
b2、フリップb1、およびフリップb2)となろう。
もし次の動作がウエイ2でのヒットであれば、次のLR
U値は110(ウエイ経路がウエイ2であるため、フリ
ップb2、キャリーb1、およびフリップb0)となろ
う。
【0087】同じキャッシュへ並列的に多数の実行パイ
プラインがアクセスするようなスーパースカラマイクロ
プロセッサでは、キャッシュのコヒーレンシの他に、置
換方式の一貫性を維持する必要がある。一例での置換方
式はLRUである。非スーパースカラ設計では、誤動作
するLRU方式は性能への影響以外に何ら機能的な問題
を引き起こすことはない。しかし、スーパースカラ設計
では、もし同じサイクル中で2つのキャッシュトランザ
クション間のLRU依存性が正しく処理されなければ、
機能的な問題が発生し得る。
【0088】同じサイクル中に2つのパイプライン(パ
イプ)がL0キャッシュ18の異なるセットへアクセス
すれば、それらの間には相互作用はなくて、それらは独
立して進行できる。しかし、2つのパイプが同じサイク
ル中にキャッシュの同じセットへアクセスする時は問題
が発生する。従来の、2つのパイプ間の相互作用を無視
するLRU置換方式は動作に失敗する。
【0089】図7は、スーパースカラアーキテクチャの
2つのパイプP0、P1(p0、p1とも表記される)
がL0キャッシュ18の同じセットへアクセスする時
の、それら2つのパイプ間のヒット/ミス(H/M)相
互作用を示している。P0に対するトランザクションは
同じサイクル中でP1のそれよりも時間的に進んでいる
ことが想定されている。図7の各行はP0およびP1に
対するトランザクションの独特な組み合わせを示す。最
初の列inは各トランザクション組に割り当てられる任
意の番号である。第2の列はP0に対するトランザクシ
ョンがヒットであるかミスであるかを表示する。第4の
列はP1に対するトランザクションがヒットであるかミ
スであるかを表示していた。列2および4に表示される
ヒットまたはミスは読み出しでも書き込みでも構わない
ことに注意されたい。第3列は、読み出しまたは書き込
みミスの場合のP0に対する置換ウエイを表示する。第
5列は、読み出しまたは書き込みミスの場合のP1に対
する置換ウエイを表示する。列6はキャッシュramか
ら読み出されたLRUであり、列7は2つのパイプ中の
トランザクションに基づいてキャッシュramへライト
バックされたLRUである。以下のLRU計算は擬似L
RU置換方式を使用する。しかし、以下で述べる多重実
行パイプラインにサービス提供するキャッシュに関する
置換方式一貫性の概念は多様な置換方式を用いても実現
できる。
【0090】図7では: nl(A)=>現在のLRU値Aに基づく次のLRU nl(B)=>現在のLRU値Bに基づく次のLRU mrg(B,A)=>LRU値BがLRU値Aよりも優
先される場合のマージLRU mrg(nl(B),B)=>NEXT LRU値Bが
LRU値Bよりも優先される場合のマージLRU th_p0/1=>タグヒットp0/1 nl(th_p0/1)=>現在のヒットウエイに基づ
く次のLRU
【0091】以下の関数は、最も最近使用されたウエイ
に基づいて、次のLRUおよびマージLRUの計算を詳
細に示す。
【0092】NXT_LRU(次のLRU)関数は現在
の単一パイプオペレーションに基づいて、LRUram
へライトバックする必要があるLRUを計算する。この
関数は2つのパイプ上での組み合わされた活動に基づい
て最終的なLRU値を決定しようとはしない。この関数
は3つの引数を取る。
【0093】mru_way=>は最も最近使用された
ウエイであり、それはヒットの場合はヒットウエイであ
り、ミスの場合は割り当てウエイである。4ウエイのセ
ットアソシアティブキャッシュではこの値が4ビットで
あり、各ビットが1つのウエイを表すことに注意された
い。
【0094】vhit=>は4ウエイのセットアソシア
ティブキャッシュでは4ビット値であって、各ビットが
1つのウエイに対応する。このビットは対応するウエイ
が有効なデータを有する時にセットされる。
【0095】LRU=>はLRUramから読み出され
る3ビットLRUである。
【0096】NXT_LRU関数は好ましくは、擬似L
RUアルゴリズムに基づいて、最も最近使用されたウエ
イから遠く離れたウエイを指すための次のLRU値を計
算する。しかし、もしそのセットの中に無効な(vhi
tによって決定される)任意のウエイがあれば、次のL
RUはそのウエイを指す。従って、次の割り当てでは、
有効なウエイを置換するのではなく、無効なウエイが使
用される。
【0097】NXT_LRU_WBE(次のLRU書き
込みビット許可)は3ビットのうちのどの2ビットがL
RU更新時に更新されるかを決定する。これは、擬似L
RUアルゴリズムでは3ビットのうちの2ビットだけを
更新する必要があるという事実に基づいている。
【0098】MERGE_LRU(マージLRU)関数
は2つの入力LRU値に基づいてLRU値を計算する。
ここで1つの入力LRU値は出力の3ビットのうちから
2つをインパクトし、残りの出力ビットは他方の入力L
RUから取り出される。この関数は、2つのパイプが同
じセットに対して作用する時に2つのパイプから2つの
次のLRUをマージして、ライトバックすべき最終のL
RUを決定するために使用される。
【0099】図8では、進歩した回路が、mru_wa
y、vhit、およびLRUに基づいて次のLRUおよ
びマージLRUを計算する。
【0100】上述の関数に基づいて、図7は次のように
解析できる。
【0101】図7の行1および2は、P0またはP1の
いずれかで読み出しまたは書き込みヒットが1つだけ存
在する時のLRU更新のケースを示す。LRUramか
らのLRU読み出しはAであり、最も最近使用されたウ
エイはそのヒットウエイである。単一パイプの活動から
これらのパラメータに基づいて次のLRUが計算され
る。従って、次のLRUで変更される2つのビットはヒ
ットウエイによって決定され、また変更のないビットは
現在のLRU値Aから運ばれる。しかし、これと以下の
説明すべてにおいて、もし1以上の無効なウエイがセッ
ト中に存在すれば、次のLRUは次に利用可能な無効な
ウエイである。
【0102】図7の行3は両方のパイプに読み出しまた
は書き込みヒットがある時のケースを示している。この
ケースについて考察する簡単な方法は、単一パイプに対
して2つの並列的なヒットの活動が逐次的に、P1活動
がP0活動よりも時間的に後になるように逐次的に発生
するかのように考えるものである。この効果はマージL
RU関数によって実現される。P0に対する次のLRU
に関する変更されるビットは、P0に対するヒットウエ
イによって決定され、P1に対する次のLRUに関して
変更されるビットはP1に対するヒットウエイによって
決定されよう。これら2つの値が最終的なLRUにマー
ジされる時は、P1に対する次のLRUからの2つの変
更されたビットが用いられて、残りのビットはP0に対
する次のLRUから得られる。
【0103】図7の行4および5は、それぞれP0また
はP1上で読み出しまたは書き込みミスがある時のケー
スを示す。ミス時には、ramから読み出されるLRU
が割り当て/置換のために選ばれたウエイを指す。次の
LRUは現在のLRUから遠く離れたウエイを指すよう
に簡単に計算される。
【0104】図7の行6は、P0にミスがあり、P1に
ヒットがある時のケースを示す。これは特殊なケースで
あり、将来の依存性分析(future depend
ency analysis)が行われるべきである。
現在のLRUがウエイ0を指し、P0上にミスがあっ
て、P1上にヒットがあり、P1が0ウエイのデータに
アクセスしているケースを想定しよう。通常は、P1の
活動に関わらず、P0はウエイ0に割り当てを行い、そ
れによって犠牲として現在のウエイ0のデータを書き出
し、所望の新しいデータを持ち込むであろう。その後
に、P1は以前のウエイ0のデータへアクセスしようと
試みて、ミスを得て、そのためP0オペレーションによ
って犠牲としてちょうど書き出されたデータを引き戻す
かもしれない。この非効率さは、もし割り当てウエイを
決定する前に、両パイプの活動を両方とも考慮すれば回
避できる。従って、P0によって使用される割り当てウ
エイは、ramから読み出された現在のLRUとは単に
逆なように、P1ヒットに基づいて計算された次のLR
Uに基づいている。もしP0用の割り当てウエイがBで
あると決定したら、ramへライトバックされる最終的
なLRUはBの次のLRUとなろう。ライトバックされ
る値は、P1の次のLRU(Bの次のLRU)とP0
(B)の次のLRUのマージである。このマージの結果
はBの次のLRUと同じ値である。
【0105】図7で、行7はP0上にヒットがあり、P
1上にミスがあるケースを示している。これらのオペレ
ーションの実質の効果は、これら2つのオペレーション
が逐次的に発生したのと同じであろう。P0ヒットは、
次のLRU値、例えばBを生じ、P0ヒットウエイから
遠く離れた方向を指す。P1はそれの割り当てウエイを
決定するために、このB LRUを用いて、ライトバッ
クされる最終のLRUはBの次のLRU(mrg(n1
(B),B))である。
【0106】図7の行8はP0とP1の両方にミスがあ
る時のケースを示している。P0はウエイAへ割り当て
る。ここでAはLRUramから読み出された値であ
る。P0の次のLRUはBであり、それはP1による割
り当てのために使用される。ライトバックされる最終の
LRUはBの次のLRUである(mrg(n1(B),
B))。
【0107】この実施例の顕著な特徴および利点は次の
ものを含む:将来の依存性分析および活用(例えば、図
7の行6を参照)、効率的な無効ウエイ回復および使
用、およびセットマッチLRUマージである。次のLR
Uの計算で支配的な制約は、セット中に無効なウエイが
存在する場合にはいつでもLRUがそのウエイを指すと
いうことである。この利点は次の読み出し/書き込みミ
ス割り当てのために無効なウエイを回復する。例えば、
もし両方のパイプがミスを有しており、2以上の無効な
ウエイが存在すれば、P0は第1の無効なウエイを割り
当てられ、P1は次の無効なウエイを割り当てられて、
その結果として効率的な無効ウエイの回復および使用が
できる。関数MERGE_LRUに示されるように、P
1がP0よりも優先される場合に、両方のパイプトラン
ザクションがram中でLRU更新のために使用される
ため、セットマッチLRUマージが実現する。
【0108】メモリ階層56は内部でも外部でも、ペン
ティアムTMプロセッサ中のそれと同一のライトバックま
たはライトスルーMESIキャッシュコヒーレンスプロ
トコルまたは任意のその他所望プロトコルのいずれかを
使用するシステム中で、外部メモリ5およびその他のキ
ャッシュとのコヒーレンスを維持することができる。一
実施例では、メモリ階層56は、MESI状態およびL
2キャッシュ14によって管理される新規な2ビットデ
ィレクトリ方式を使用して、各所部品間で内部コヒーレ
ンスを維持する。
【0109】外部システムがバスB上でスヌープサイク
ル(または照会サイクル)を駆動する時は、その階層中
の他のキャッシュの助けを借りて、要求されるコヒーレ
ンス動作を取ることにL2キャッシュ14が責任を持
つ。外部スヌープによるコヒーレンス動作の例は、もし
存在すればオンチップのキャッシュ中で1ラインを無効
化することであり、および/またはもし内部キャッシュ
中で修正されていればデータを供給して戻すことであ
る。
【0110】一実施例では、外部システム部品とのコヒ
ーレンスは32バイト細分性に維持される。MESIの
ようなコヒーレンスプロトコルは、共有メモリ多重プロ
セッサシステム中でプロセッサ間のコヒーレンスを保証
する。もしMESIプロトコルが使用されれば、メモリ
階層56中の32バイトの1ラインは次の4つの状態
(MESI状態と呼ばれる)のうちの1つにあることが
できる。 ・修正済み(M):メモリ階層56中のコピーがそのシ
ステム中で有効な唯一のコピーである。このコピーは修
正されており、メインメモリ5のコピーはこのコピーと
一致していない。 ・排他(E):メモリ階層56中のコピーがシステム中
の唯一のコピーで、修正されているかもしれない。しか
し、このコピーはメインメモリ5のコピーと一致してい
る。 ・共有(S):メインメモリ5中のコピーはメモリ階層
56中のコピーと一致しており、プロセッサ10の外部
のその他のキャッシュ中に1つのコピーが存在し得る。 ・無効(I):メモリ階層56中のそのラインのコピー
は有効なデータを含まない。
【0111】MESI状態は、それが含むデータの各ラ
イン上の各キャッシュによって維持される。MESI状
態はデータへのアクセスを制御するために使用されるの
で、1つのキャッシュだけが任意の時点で書き込み可能
なコピーを有しており、またプロセッサ10およびその
他のデバイスがデータの最新コピーをキャッシュまたは
メインメモリ5中に配置することができる。
【0112】完全に空のキャッシュから出発して、メモ
リ階層56がライトスルーモードで動作する時、すべて
の書き込みは外部バスBへ直ちに送られ、そのラインは
EまたはM状態へは決してならない。それらの状態はラ
イトバックモードでのみ可能である。
【0113】一実施例では、L2 14またはL1D
16d中のライン(32バイト)は4つの状態、M、
E、S、またはIのすべてを取ることができる。L0D
18中のラインは3つの状態、M、S、およびIだけ
を取ることができる。L1I16i中のラインは2つの
状態、SおよびIのみを取ることができる。L1I16
i中のラインは好ましくは修正されない。しかし、ライ
ンがL2 14中ではM状態にあるが、L1I 16i
中ではS状態にあるということは可能である。このケー
スでは、データキャッシュ(L0D 18/L1D 1
d/L214)中のコピーはL1I 16i中と同じ値
を持たなければならない。
【0114】L2 14ラインは好ましくは64バイト
幅で、32バイトのサブラインを2つ含む。32バイト
サブラインの各々には2ビット状態が付随する。サブラ
インがL2 14中で取ることのできる状態は、修正済
み、排他、共有、および無効(MESI)である。従来
のペンティアムTM信号を使用したライン読み出しおよび
書き込みの間のL2 14中の各種状態間の遷移が図9
および図10に示されている。表10のSからS、また
はSからEへの状態遷移は直ちには起こらない。L2
14は、最終状態へ変わる前にBIU12が要求された
ライトスルーを完了して、WB/WT#状態を戻すまで
待つ。その間に、それら2つのケースでの中間状態はS
であり、L2 14は他の内部の読み出し/書き込み要
求に自由に応えることができる。
【0115】好ましくは、L1D 16d中のラインは
32バイト幅で、各ラインには2ビット状態が付随す
る。L1D 16d中の状態はL2 14のそれと同じ
意味を有する。遷移は図11および図12に示されてい
る。
【0116】好ましくは、L1I 16i中のラインは
32バイト幅で、その各々には1ビットの状態が付随し
ている。Iキャッシュ中のラインの可能な状態はSおよ
びIである。L1I 16iラインは常にS状態でロー
ドされており、L1I 16i中で置換される時、ある
いはL2 14がL1I 16iに対してそのラインを
無効化するように依頼する時に、無効化される。
【0117】好ましくは、L0D 18中のラインは1
6バイト幅で、各々がそれに付随する2ビット状態を有
している。一実施例で、L0D 18中で可能な状態
は、共有、修正済み、および無効である。別の実施例で
は、L0D 18は、E状態も有する。E状態を持たな
いL0D 18用の状態遷移は図13および図14に、
それぞれ読み出しミスおよび書き込みについて示されて
いる。一般に、L0D18中では、SとE状態が似てい
る。というのは、どちらの状態にあっても、L1D 1
dへのライトスルーが行われるためである。従って、
いくつかの実施例では、状態を最小化するために、L0
D 18についてはE状態を除去することができる。
【0118】L2 14は、外部スヌープ要求毎に、そ
のラインがオンチップキャッシュのどれかに存在するか
どうかを決定するためにタグ検索を行う。スヌープまた
は照会サイクルは、オンチップキャッシュを備えるプロ
セッサまたはキャッシュコントローラへ送られて、その
キャッシュに特定のアドレスが存在するかどうかを決定
する。キャッシュの1つにラインが存在する時だけ、下
位レベルのキャッシュへの内部コヒーレンスアクション
が開始される。下位レベルキャッシュにラインが存在す
るかどうか、およびその下位レベルキャッシュ中のライ
ンの状態を知るために、L2キャッシュ14は下位レベ
ルキャッシュに関する包括関係を維持しなければならな
い。一実施例では、L2キャッシュ14中への包括は特
殊な意味を有する:もしLID 16d、L1I 1
i、またはL0D 18中にラインが存在すれば、そ
のラインはL2 14にも存在しており、またもしライ
ンがL1D 16dまたはL0D 18中で修正されて
いれば、L2 14コピー中のデータがL1D 16d
またはL0D 18中のデータと時々異なるかもしれな
いが、L2 14中のそのラインのMESI状態もMで
ある。
【0119】L2キャッシュ14は以下の3つの機構を
使用して上述の包括関係を維持する。まず、キャッシュ
L1D 16d、L1I 16i、およびL0D 18の
1つにミスがあって、更にそのラインがそのキャッシュ
へメインメモリ5から持ち込まれたものであれば、その
ラインはまたL2キャッシュ14中にもストアされる。
第2に、L0D 18/L1D 16dに対して書き込
み要求がなされ、そこではそのラインがM状態になけれ
ば、書き込み要求はL2キャッシュ14に対して可視と
され、それがラインの状態をMへ変える。第3に、ライ
ンがL2キャッシュ14から置換される時は、L1D
16d、L1I 16i、またはL0D18中の任意のコ
ピーは内部コヒーレンス機構を使用して無効化されて、
もしそのラインがメモリ階層56中の外部メモリ5に対
して修正されていれば、それはメインメモリ5へライト
バックされる。
【0120】しかし、L2キャッシュ14は好ましくは
TLB50エントリを包括しない。もしソフトウエアが
ページディレクトリまたはページテーブルエントリのど
れかを修正すれば、TLB50中の対応するエントリを
無効化することはそのソフトウエアの責任である。その
場合には、そのエントリへの後続のアクセスはTLB5
0中でミスとなって、正しいエントリはメモリ階層56
または外部メモリ5によって供給される。
【0121】更に、L1Dキャッシュ16dは好ましく
はL0D 18中のエントリを包括しない。ラインがL
1D 16dから置換される時は、それはL0D 18
中で無効化されない。L0D 18/L1D 16d
組み合わせヒット率は、L1D 16dとL0D 18
との間の包括要求を回避することによって促進される。
しかしもしL2 14における外部スヌープの間にヒッ
トがあれば、L1D16dおよびL0D 18のタグが
両方同時にスイッチオンされて、それら各々の中のライ
ンの状態が決定される。一実施例では、通常のロード/
ストアオペレーションに対するスヌープの干渉を最小化
するために、L0D 18中に別のスヌープタグ用のr
amが存在する。スヌープヒットdoが存在する時の
み、通常のロード/ストアオペレーションを停止しなけ
ればならない。スヌープミス時には、通常のロード/ス
トアオペレーションとの干渉はない。別個のスヌープタ
グramはまた、L1D 16d用にも使用できる。し
かし、一般にL1D16dからL0D 18へのロード
/ストアトラフィックは実行ユニット40からL0D1
8へのロード/ストアトラフィックよりも少ない。
【0122】メモリ階層56中のメモリユニットの各々
に付随して、アドレスタグ、コヒーレンシデータ、およ
び置換データのような情報を保持するタグramがあ
る。各種ユニットのタグramに関するビットフィール
ドが図15−図20に示されている。
【0123】図21を参照すると、一般に、もしキャッ
シュブロックが無効(そのキャッシュに包括されない)
で、そのブロック中のデータの読み出しが発生すれば、
そのキャッシュブロックがロードされ、共有または排他
のいずれかとしてマークされる。そのキャッシュブロッ
クをヒットするそれ以降の読み出しはMESI状態に対
してそれ以上の変化を引き起こさない。もしキャッシュ
ブロックがM状態にあれば、読み出しはMESI状態遷
移を引き起こさない。
【0124】排他状態でなく共有状態へのローディング
を選択することは、データや例えばTLB50、22、
38および入力ピンからのその他の入力を読み出すバス
Bトランザクションのような外部の力の関数である。い
ずれの状態へのローディングも可能であるが、共有状態
へのローディングについて主として説明することにしよ
う。後のオペレーションがどのように働くかは、単にキ
ャッシュブロックの現在の状態の関数であるため、それ
が共有されるか排他的であるか、その機能について以下
で説明する。
【0125】もしキャッシュブロックが共有状態にあっ
て、書き込みが発生すれば、システムバスBへのライト
スルーが発生して、それはその他すべてのキャッシュに
対して、もしかすると修正されたデータのライトバック
の後で、それらのコピーを無効化するように通知する。
それに続いて、そのキャッシュブロックは外部システム
からの入力に依存して、共有状態に留まるかあるいは共
有状態から排他状態へ移行する。バスへのライトスルー
の目的は、そのデータのすべての他の保有者がそのブロ
ックに対して変更があったことを知るようにすることで
ある。もしキャッシュブロックが排他状態にある時に書
き込みが発生すると、そのキャッシュブロックは修正済
み状態へ移行して、キャッシュブロックの汚染ビットが
セットされる。この第2の書き込みはライトスルーでは
なく、ライトバック方式を使用する。修正済み状態にお
いて、書き込みはそれ以上のMESI状態変化を引き起
こさない。
【0126】図22−を参照しながら、書き込み割り当
て方式および書き込み割り当て無し方式を備えたキャッ
シュレベルの各々の状態の一実施例について説明する。
L214において、もし書き込みの割り当てが行われな
ければ、その書き込みは単にバスへ送られる。もし書き
込み割り当て戦略が使用されれば、まずバス上の書き込
みが行われて、次にバーストフィルが続く。ラインの状
態は、図9に示されるような外部因子に依存してI、
S、またはEである。
【0127】L0D 18およびL1D 16dに対し
て、もし方式が書き込み割り当て無しであれば、書き込
みはただ次のレベルへ送られるだけである。もし次のレ
ベルで読み出しヒットが発生すれば、そのデータはその
レベルにおいて書き込まれて、それに従ってキャッシュ
コヒーレンシ状態が更新される。もし方式が書き込み割
り当てであれば、そのキャッシュレベル、例えばL1D
16dは次のレベルのキャッシュ、この例ではL2
14に対してその書き込みについて通知して、L2 1
4からラインフィルを行う。その後、L1D 16d
で関連するバイトが修正される。L1D 16dの最終
のMESI状態は現在のL2 14のMESI状態に依
存する。例えば、もしL2 14がSであれば、L1D
16dはSになろうし、もしL2 14がEであれ
ば、L1D 16dはMとなるし、もしL2 14がM
であれば、L1D 16dはMとなろう。更に、L2
14もそれのMESI状態を更新して、もしL2 14
のMESI状態がSであれば、バス書き込みを行う。も
し状態がSであれば、L2 14に関する最終のMES
I状態は、外部条件に依存してSかEとなろう。もしL
2 14のMESI状態がEまたはMであれば、L2
14に関する最終のMESI状態はMとなろう。
【0128】例えばレベルL0 18、L1D 1
d、およびL2 14を含む多重レベルキャッシュ階
層において、L2キャッシュ14はシステムバスBにつ
ながれ、L1Dキャッシュ16dは好ましくはL2キャ
ッシュ14からロードされ、他方、L0キャッシュ18
は好ましくはL1D 16dからロードされる。以下の
説明で、キャッシュ階層の各レベルに対してMESIま
たはその他のコヒーレンシプロトコルを適用できる。
【0129】もし読み出しミス時にキャッシュに対して
それの上位からローディングが行われれば、ロードされ
るキャッシュブロックの状態は図23に示されるように
なる。キャッシュは上位ブロックの状態を取り上げる
が、例外としてその上位がM状態にある時は、ロードさ
れるブロックはE状態を得て、汚染ビットはセットされ
ない。このことは汚染ビットがセットされない限り、キ
ャッシュブロックはM状態に決してならないであろうと
いう単純さを提供する。ブロックごとに1つだけの汚染
ビットが保持される場合は、そのM状態が汚染の指標と
なり、そのほかに汚染ビットは必要ない。もし1つより
も多い汚染ビットがあれば、それらは汚染状態の詳細な
分解を保持するために使用することができる。
【0130】キャッシュの上位がS状態にある時は、デ
ータは他のキャッシュと共有できるため、ロードされる
キャッシュブロックはこれもその共有の知識を反映する
ためにS状態になければならない。そうでなければ、キ
ャッシュ上位はEまたはM状態にあって、その他にその
データを保有しているものがないことを保証し、そして
ロードされるキャッシュブロックは、他のキャッシュか
らデータをフラッシュアウトするためにライトスルーが
必要ないことを表示するために、それらの状態(S状態
と逆の)の1つへ移行しなければならない。キャッシュ
ブロックがロードされる時、それはその上位と同じデー
タを含むので、その上位に対して修正されていない。こ
のことから、上位がM状態にある場合でも、そのキャッ
シュはE状態にロードされて、汚染ビットがセットされ
ないことを意味する。
【0131】もし書き込みミス時に、キャッシュがそれ
の上位からロードされれば、ロードされるキャッシュブ
ロックの状態は図24に示されるようになる。
【0132】図25を参照すると、もし多重レベルキャ
ッシュ読み出しがすべてのレベルでミスすれば、すべて
のレベルは共有状態へ移行する。最初の書き込みはすべ
てのレベルに対してライトスルーを実行し、システムバ
スBへ出力する。次に、キャッシュのすべてのレベルが
排他状態へ移行する。システムバスBへのライトスルー
は、バスB上の任意の他のキャッシュまたは関連する装
置に対してそれらの内容を無効化するように通知するた
めに必要である。後続の書き込みは最下位レベルのキャ
ッシュをM状態へ移行させる。修正されたブロックが下
位レベルのキャッシュから追い立てられて、それらの汚
染した犠牲ブロックがキャッシュの上位へ書き込まれる
時に、より上位レベルのキャッシュは単にM状態へ移行
する。
【0133】上述のシナリオで、修正済み状態は、その
キャッシュブロックがメインメモリ5に対して修正され
ていることあるいは汚染していることを示す。多重レベ
ルキャッシュ階層において、もし各レベルが上述の規則
に従えば、下位のキャッシュレベルが修正済みの状態に
ある時、それは、メインメモリ5と、それの上位キャッ
シュの両方に対して汚染している。もし多重レベルキャ
ッシュ階層において、すべてのレベルが修正済みとマー
クされれば、それらはすべてメインメモリ5よりもより
最新のデータを含む。しかし、L0D 18のデータは
L1D 16dのものよりも新しく、後者は更にL2
14のものよりも新しい。この最初の実施例は、キャッ
シュブロックがそれの上位に対してだけ汚染しており、
メインメモリ5に対しては汚染していないことを区別す
る能力を提供しないが、別の実施例ではこの目的のため
に付加的な機能が提供される。
【0134】上述の最初の実施例で、共有状態にあるブ
ロックに対する第1の書き込みはバスBに対するライト
スルーを生ずる。しかし、別の実施例では、キャッシュ
階層のすべてのレベルに対するライトスルーは必要な
い。バスBに対するライトスルーはキャッシュコヒーレ
ンシを有利に提供するが、キャッシュ階層内でこの代替
実施例のプロトコル方法および回路は、ブロックが共有
状態にある時には、ライトスルーではなくて、ライトバ
ックを使用する。
【0135】もしすべてのキャッシュレベルL0 1
8、L1D 16d、およびL2 14が共有状態にあ
って、書き込みが発生すれば、そのキャッシュ階層内で
ライトバックが使用される。従って、L0 18はL1
D 16dおよびL2 14に対してローカルに汚染し
ているが、バスBに対してライトスルーが実行されるた
めその他のキャッシュまたは装置中のデータは必要であ
れば無効化できる。この結果、L0キャッシュ18ブロ
ックはL1D 16dおよびL2 14に対して汚染し
ているが、メインメモリ5に対しては汚染していない。
言い換えれば、L0 18はそれの上位に対してローカ
ルに汚染しているが、全体としてのキャッシュシステム
はメインメモリ5と一致している。この代替実施例の利
点は最初のライトスルーが削除できることである。この
結果、L1D 16dおよびL214に対するメモリト
ランザクションが少なくなって、それによって電力が節
約できる。
【0136】この最初の書き込みを実行する時、そして
ライトスルーの代わりにライトバックを実行する時、キ
ャッシュ上位L1D 16dおよびL2 14のMES
I状態は修正されなければならない。このオペレーショ
ンは、ramを通過するアドレス経路が書き込まれない
ことと、L1D 16dおよびL2 14に関連するL
RU状態を更新する必要がないという意味で、タグのラ
イトスルーとして説明できる。上述の代替実施例で、L
1D 16dはSからEへ移行し、タグのライトスルー
をL2 14まで送るため、後者もSからEへ移行す
る。データはメインメモリ5へ書き込まれるが、L1D
16dあるいはL2キャッシュ14へは書き込まれな
い。次の書き込みが発生する時、L0 18はEからM
へ移行する。図26は、上で述べた代替実施例を組み込
んだシステム中で、異なるアクションシリーズに関する
L0 18、L1D 16d、およびL2 14の状態
遷移を示している。
【0137】先に述べた第1システムの実施例で、汚染
ビットはキャッシュブロックがM状態にある時だけセッ
トできた。代替システム実施例では、汚染ビットはキャ
ッシュブロックがS、E、およびM状態にある場合にセ
ットできる。M状態にあるキャッシュブロックは存在す
るが、E状態にあるキャッシュブロックが存在しない場
合に、スヌープが発生する時は、メインメモリ5はその
キャッシュと一致しており、スヌープデータライトバッ
クが発生する必要がない。同時に、すべてのキャッシュ
ブロックの状態はEからSへ変更される。これによっ
て、汚染ビットがセットされたいくつかのキャッシュブ
ロックがS状態に残されるかもしれない。もしスヌープ
ヒットが発生して、いくつかのキャッシュブロックがM
状態にあれば、そのブロックはS状態へ移行する前にメ
インメモリへ書き出される必要がある。更に、部分的な
内部ライトバックを実行することができる。それによっ
て、メインメモリに取って代わるすべてのデータをアセ
ンブルするのにちょうど十分なように内部キャッシュレ
ベルをライトバックし、そしてその後にそれ以上のライ
トバックを停止する。
【0138】ブロックの汚染状態は好ましくはそれのM
ESI状態とは独立している。任意の与えられたキャッ
シュのMESI状態は、そのキャッシュがそのデータの
単独所有者であるか、およびメインメモリ5がそのデー
タと一致しているかを表示する。汚染ビットはキャッシ
ュブロックが“相対的に”汚染していること、すなわ
ち、それの上位キャッシュに対して汚染していること、
あるいはL2 14の場合にはメインメモリ5に対して
汚染していることを表示する。
【0139】ミス時に、もしL0 18、L1D 16
d、およびL2 14キャッシュブロックが排他状態に
ロードされれば、最初のライトスルーは有利に削除され
る。従って、そのキャッシュブロックに対してタグライ
トスルーオペレーションは必要ない。
【0140】このプロトコル方法および回路の付加的な
メリットとして、L1D 16dおよびL2 14キャ
ッシュはバイト書き込みを実行する必要がなく、キャッ
シュブロック全体に書き込むか、あるいはそれに対して
汚染ビットが保持されているものに対応する大きさと等
しいデータの書き込みを実行すればよい。例えば、もし
L1D 16dが32バイトブロックと、8バイトの汚
染状態細分性(ブロック当たり4汚染ビット)を有して
いれば、L2 14は8バイトの細分性で書き込みがで
きる必要がある。
【0141】上で述べた回路および方法はタグのライト
スルーを実行するために使用できるが、データのライト
スルーには利用できないため、キャッシュのコヒーレン
シを維持するためにシステムバスへのライトスルーを実
行しながら、キャッシュ階層内での不必要なライトスル
ーを有利に削除する。
【0142】いったん、キャッシュへ1ラインが読み込
まれて、外部メモリを更新することなしに内部的に修正
されれば、それは必然的にバスBへライトバックされな
ければならない。バスBへキャッシュラインを書き出す
ことはそれが要する時間の点でかなり高価につく。プロ
セッサはキャッシュラインをバスBへ書くために、各々
が64ビットの転送を4回必要とするのが普通である。
標準的なキャッシュアーキテクチャは4個の64ビット
チャンクのどれが実際に修正されたデータを含むかの記
録をつけない。本発明の一実施例は、ライン追い立て時
に64ビット量のどれをライトバックする必要があるか
の記録をつけるキャッシュシステム56、およびもしキ
ャッシュラインの64ビットだけが汚染データを含んで
いれば64ビットの単一の転送を実行し、そうでなけれ
ば256ビットのすべてをライトバックするようなBI
U12を提供する。
【0143】標準的なキャッシュアーキテクチャはキャ
ッシュの状態をライン・バイ・ライン方式で記録する。
この問題に対する解答は、1つのトランザクションとし
てバスBへ書き出すことができるサブラインの部分毎に
状態を記録することである。言い換えれば、もしキャッ
シュラインをライトバックするために4回の転送が必要
であれば、そのラインの4つのセグメントすべてについ
て状態を記録する。この方式を我々の特別な場合に実施
すると、サブラインの4セグメントの各々について状態
の付加的ビットが必要とされる。我々はこれらのビット
を“汚染ビット”と呼んできた。これらのビットは、キ
ャッシュがライトバックモードにある時だけ重要にな
る。キャッシュがバスBへの書き出しを送信しない時
は、キャッシュは4サブラインのどれがその汚染ビット
での書き込みによって影響されたかを記録する。キャッ
シュラインがキャッシュから追い出される時は、それら
の汚染ビットはBIU12へ与えられる。もしそれらの
汚染ビットの1つだけがセットされれば、BIU12は
バス上で単一の64ビット書き込みを実行するであろ
う。もし1よりも多い汚染ビットがセットされれば、標
準的な256ビットのキャッシュラインバーストライト
バックが発生しよう。
【0144】従来のMESIプロトコルの枠組みの中
で、汚染ビット(単数または複数)はM状態でのみ重要
である。しかし、多重レベルキャッシュ階層56では、
“汚染”には複数の概念が存在しよう。例えば、一実施
例では、下位のキャッシュは外部世界に対してはクリー
ンであるが、上位キャッシュに対して汚染しているとい
う概念を採用する。その結果、その状態は共有された汚
染、または排他的な汚染ということになろう。従って、
下位キャッシュの汚染ビットは、上位キャッシュに対し
て汚染しているのと、外部世界に対して汚染しているの
との両方の汚染に関する状態を維持するために有利に使
用できる。下位のキャッシュがSまたはE状態にある時
は、汚染ビットは上位のキャッシュ状態に対する汚染の
記録をつけている。下位キャッシュがM状態にある時
は、汚染ビットは外部世界に対する汚染の記録をつけて
いる。すなわち、下位キャッシュがM状態にあって、そ
れが追い出され、それの上位キャッシュによって吸収さ
れる時は、下位キャッシュからの汚染ビットは上位キャ
ッシュの汚染ビットとマージされる。しかし、下位キャ
ッシュからのラインが追い出される時にSまたはE状態
にあれば、汚染ビットは上位キャッシュに対して汚染し
ているが外部世界に対してはクリーンであることを意味
しているため、汚染ビットは上位キャッシュの汚染ビッ
トとマージされることはないであろう。
【0145】多重レベルコヒーレンシプロトコルの一実
施例では、キャッシュ階層の低レベルから高レベルへ認
識された修正データの不必要な更新は削除される。以下
の説明では、例示のためにMESIプロトコルが使用さ
れている。しかし、以下に述べる実施例は他のコヒーレ
ンシプロトコルでも実行できよう。更に、L0キャッシ
ュ18が以下の例で使用されているが、この概念は多重
レベルキャッシュ階層のすべてのレベルに適用できる。
【0146】先に述べた多重レベルキャッシュシステム
で、L1D 16d(MESI状態はM)中でラインが
修正されており、そのラインがL0 18には存在しな
い状況を考えてみよう。プロセッサパイプラインが同一
ラインから任意のデータを要求する時は、それはL1D
16dからフェッチされて、パイプラインへ供給され
るとともにL0 18へもキャッシュされる。MESI
プロトコルによると、この新しくキャッシュされたL0
18中のラインのMESI状態はM(修正済み)とマ
ークされる。このラインのデータはプロセッサによって
読み書きできて、そのMESI状態はMのままに留ま
る。L0 18中のこのラインを追い出す必要がある時
はいつでも、それがM状態を有するというキャッシュコ
ヒーレンシを維持するためにL1D 16dへそれをコ
ピーバックする必要がある。このラインはM状態でL0
18へ持ち込まれたものであるから、このラインが実
際のL0 18中で修正されたかどうかは分からない。
この問題はキャッシュコヒーレンシプロトコルに新しい
状態を導入することによって解決できる。例えば、ME
SIプロトコルで、その状態はMM(修正済み−修正済
み)と呼ぶことができる。1つのキャッシュレベルにあ
る1つのラインが修正される時はいつでも、それはMで
はなくてMMとマークされて、それによって、ラインが
M状態でキャッシュレベルへ割り当てられたが変更なし
にままであるのとは逆に、1つのキャッシュレベルで実
際に修正されたことを区別するようになっている。この
実施例は、キャッシュ階層中のラインが実際に修正され
たかどうかを有利に区別する。従って、メモリ階層56
中の各種レベルのキャッシュ間で不必要なデータトラフ
ィックが削除されて、より高いスループットおよび電力
節約が可能となる。
【0147】別の実施例では、プロセッサの全体的な停
滞を減らすために、多重レベルキャッシュ階層に対して
条件付の書き込み−割り当て方式が設けられている。1
つのキャッシュ設計では、読み出し/書き込み割り当て
方式は、データのブロック/ラインをオンチップキャッ
シュに常駐させる時点を制御する。もしそのラインが読
み出しミスでキャッシュされれば、そのキャッシュは読
み出し−割り当て方式を有すると言われる。他方で、も
し書き込みがラインをミスした時にそのキャッシュ中へ
ラインが持ち込まれれば、そのキャッシュは書き込み−
割り当てと言われる(フェッチまたは書き込みとも言わ
れる)。もしその書き込みミスがちょうどメインメモリ
へ書き込まれて、その後にフェッチおよび割り当てが続
かなければ、そのキャッシュは書き込み−割り当て無し
であると言われる(ライトアラウンドとも言われる)。
ライトバックまたはライトスルーキャッシュではいずれ
かの書き込みミス方式が使用できる一方で、一般にライ
トバックキャッシュは書き込み−割り当て(そのライン
への後続の書き込みがオンチップキャッシュをヒットす
ることを期待して)を使用し、またライトスルーキャッ
シュはしばしば書き込み−割り当て無し(そのラインへ
の後続の書き込みが更にメインメモリへ行かなければな
らないであろうため)を使用する。
【0148】多重レベルキャッシュ階層では、ライトバ
ック/ライトスルー制御で以って、書き込み−割り当て
あるいは書き込み−割り当て無しのいずれも最適特性を
提供しない。もし書き込み−割り当て無しが使用されれ
ば、より大きいスループットを引き出すために並列に動
作することができた多重オンチップキャッシュの利点は
利用されないことになる。書き込み−割り当てを何もし
なければ、キャッシュヒット率は低下しよう。他方で、
キャッシュのすべてのレベルで書き込み−割り当てが常
時使用されれば、すべてのキャッシュレベルのホールド
が発生するため、利用可能な並列実行は利用できない。
例えば、L0Dレベル18への書き込み−割り当てを幅
広く実行することは書き込みアクセスの間にL0Dキャ
ッシュ18を不必要にホールドし、L/Sユニット40
からの更なるL0Dアクセスを妨害することになろう。
【0149】従って、この実施例では、書き込み有りあ
るいは書き込み−割り当て無しの方式の両方の良い特性
が採用されている。書き込み−割り当て方式では、ライ
ンに対する最初の書き込み時に書き込み停止が発生す
る。書き込み−割り当て無し方式では、より長時間の書
き込み停止はないであろうが(ライトスルーバッファに
よる)、全体的により長時間の書き込みミスペナルティ
が存在する。従って、実行ユニット54の最も近いキャ
ッシュレベル18では、書き込み停止を最小化するため
に好ましくは書き込み−割り当て無しが行われる。メイ
ンメモリ5に最も近いキャッシュレベル14では、後続
の書き込みを吸収してそれによって書き込み停止を減ら
すために好ましくは常に書き込み−割り当てが行われ
る。キャッシュ16dの中間レベルでは、好ましくは条
件付の書き込み−割り当てが行われる。もし中間レベル
16dで書き込みミスが階層中のキャッシュ14の次の
レベルでヒットすれば(実行ユニット54から遠ざか
る)、そのデータは次のレベル14からフェッチされ
て、その書き込みは現在の中間レベル16dで割り当て
られ吸収される。もし現在の中間レベル16dでの書き
込みミスが次のレベル14でミスすれば、好ましくは現
在の中間レベル16dでは書き込み−割り当て無しが行
われ、その書き込みミスは次のレベル14へ送られて、
現在のレベル16dがその書き込みで利用される。
【0150】多重レベルキャッシュの異なるレベルにお
いて異なる書き込み割り当て方式を利用するアプローチ
を使用することによって、キャッシュのすべてのレベル
で同じ割り当て方式を使用する場合よりもより良い全体
的な性能が達成される。このアプローチの結果はシステ
ムスループットの増大とより高い性能である。上述の実
施例は、進歩した特性を与えるために、他の読み出し/
書き込み要求に自由に応えるように最下位レベルのキャ
ッシュ18をしてある。上では一実施例について説明し
たが、書き込みを割り当てられる、あるいは割り当てら
れないレベルは、キャッシュサイズ、アクセス時間など
の変数に依存する。更に、上に述べた概念は任意の多重
レベルキャッシュ階層へ適用できよう。
【0151】マイクロプロセッサ10のような多くのプ
ロセッサアーキテクチャは、1次(オンチップ)から2
次キャッシュ(オフチップ)への包括関係および一貫性
を維持するために照会、バック無効化、およびライトワ
ンス(write−once)方式を利用する。1次キ
ャッシュは単一レベルキャッシュでも多重レベルキャッ
シュ階層のものでもよい。照会およびバック無効化サイ
クルは、包括および一貫性を維持するためにプロセッサ
キャッシュ階層へ外部2次キャッシュによって生成され
るスヌープサイクルである。照会サイクルは、もしその
ラインがプロセッサキャッシュ中で修正済み状態にあれ
ば、ライトバックを引き起こす。バック無効化サイクル
は、もしスヌープされたアドレスがプロセッサキャッシ
ュをヒットすれば、プロセッサキャッシュ中のラインを
無効化するように外部キャッシュによって開始される。
ライトワンス方式は、外部キャッシュが常にプロセッサ
の潜在的な修正されたラインに気づいていることを保証
するために使用される。これは先に述べたように、包括
および一貫性を維持するために必要である。外部キャッ
シュは例えば、プロセッサを強制的にライトワンスモー
ドにするためにMESI状態制御プロセッサ入力信号
(WB/WT#)を利用することができる。
【0152】WB/WT#(ライトバック/ライトスル
ー)信号のような外部信号は、ライン単位でプロセッサ
データキャッシュラインをライトバックまたはライトス
ルーとして定義するために利用できる。その結果、この
信号はプロセッサデータキャッシュ中で、キャッシュラ
インがSまたはEのMESI状態にあることを指示する
ために用いることができる。外部キャッシュは、外部キ
ャッシュ自身がEからM状態へ遷移をするか、あるいは
既にM状態にある場合にだけプロセッサがE状態になる
のを許容する(スヌープ応答待ち時間のため)。プロセ
ッサデータキャッシュ中のS状態ライン上の書き込み
は、一般にライトスルーオペレーションが実行されるよ
うにする。そのラインの最終のMESI状態(Sまたは
E)は、外部書き込みオペレーションの最後に外部キャ
ッシュによって駆動されるWB/WT#入力信号によっ
て決定される。こうして、プロセッサパイプラインは外
部書き込みが完了するまで停止される。
【0153】オンチップ多重レベルキャッシュ階層を備
えるプロセッサに対して、ライトスルーオペレーション
でパイプラインを停止することは好ましくない。本発明
の一実施例では、ここに説明したこの問題に対する解決
は、包括および一貫性のための所望のキャッシュコヒー
レンシ遷移にうまく従って、またプロセッサパイプライ
ンがライトスルーオペレーションで停止することを防止
して、それによりそのシステムからより高いスループッ
トを達成する。
【0154】一実施例は、メモリ階層のすべてのレベル
が外部状態制御信号(WB/WT#)に依存するのと違
って、ライトスルーオペレーション時にメモリ階層の各
レベルに関する最終の状態を決定するための機構をパイ
プライン化する。これは、メモリ階層56の下位レベル
(実行ユニット54により近いもの)が、実行パイプラ
インへの停止信号を解放できる前に、トランザクション
が完了するのを待たなくてもよいようにする。このこと
は、次の命令が実行できる前の待ち時間を排除し、従来
の方法よりも高い動作性能を供与する。
【0155】3レベルのオンチップキャッシュを備える
メモリ階層56用のパイプライン化されたライトワンス
MESIプロトコルについて以下に説明する。しかし、
MESIプロトコルは例示目的のために使用されてお
り、以下で説明する実施例は他のコヒーレンシプロトコ
ルと一緒に実現することもできよう。更に、このアプロ
ーチは、nレベルでmの深さのコヒーレンシプロトコル
パイプライン化を備えるキャッシュへ一般化できる。例
えば、キャッシュL0 18、L1D 16d、および
L2 14を含む3レベルキャッシュ階層56は、外部
パイプライン54へインタフェースされたL0 18
と、バスBへのインタフェースされたL214とを有す
る。一実施例では、ライトスルーオペレーションでのL
0 18の最終のMESI状態は、L1D 16d/L
2 14(上位者)の現在のMESI状態のみに依存し
て、WB/WT#入力信号には依存しない。L1D 1
dおよびL2 14は常に同じMESI状態を有し、
ライトスルーオペレーションのそれらの最終のMESI
状態はそれらの現在のMESI状態、PWT、およびW
B/WT#入力信号に依存する。図27および図28は
関連する状態遷移を詳細に説明する。
【0156】図29は、プロセッサメモリ階層56およ
び外部キャッシュの、プロセッサキャッシュラインが初
期には共有状態であった場合のライトスルーオペレーシ
ョンのシーケンスにおけるパイプラインMESI状態の
変化を要約する因果関係の表である。PWTは0である
と仮定する。線および方向矢印は因果関係を示す。例え
ば、表の行1に示されるように、1番目のライトスルー
はバスB書き込みをもたらす。バスB書き込みの後、外
部キャッシュの最終の状態はEであり、WB/WT#入
力信号は低レベルである。第1のライトスルーオペレー
ション時に、L0キャッシュ18の最終の状態はL1D
16dの現在の状態によって決定される。従って、L
0 18はSd(汚染ビットがセットされた共有状態)
になる。L1D 16dおよびL2 14の最終状態
は、バスB書き込み後にWB/WT#が低レベルである
ため第1番目のライトスルーの後でもS状態に留まる。
2番目のライトスルーでは、L0 18は、L1D 1
dの現在の状態に基づいて、再びSd(共有、汚染し
た)状態に留まる。2番目のバスB書き込みの終わり
で、WB/WT#信号入力が高レベル(1)であるの
で、L1D 16dおよびL2 14はE状態へ遷移す
る。3番目のライトスルー時には、L1D 16dの現
在のE状態に基づいてL0 18はM状態へ遷移し、プ
ロセッサがデータラインの排他的コピーを有しているの
で、バスBでライトスルーが行われる。しかし、L1D
16dおよびL2 14もまた3番目のライトスルー
オペレーションでEからM状態へ遷移する。この解決法
は、メモリ階層56のためのライトスルー時にMESI
プロトコルをパイプライン化するという特色ある概念を
導入する。結果の利点はシステムスループットの増大と
より高い動作性能である。
【0157】プロセッサ10が発生する書き込みはプロ
セッサメモリ階層56でヒットするかもしれないが、
尚、キャッシュコヒーレンシプロトコルの要求によって
2次のオフチップメモリへ書き込まれなければならない
かもしれない。もしこのプロセッサが発生するバスBへ
の書き込みがバス書き込みサイズの中で整列していれ
ば、それは1つのバスオペレーションのみを含むことに
なろう。しかし、プロセッサが発生する書き込みがバス
書き込みサイズ内で整列していなければ、それはバス不
整列データの2つの半分を書き込むための2つのバスオ
ペレーションを含むことになろう。バスサイクルはオン
チップ書き込みよりもかなり大きい電力を消費するの
で、バスBトランザクションを最小化して、それにより
電力消費を削減することが好ましい。更に、システムの
性能を決定する場合に共有バスがボトルネックとなるた
め、バストラフィックの削減はこれもシステムスループ
ットの増大につながろう。以下に説明する実施例は、い
くつかの状況において、バス不整列ライトスルー書き込
みにおいて2つのバスオペレーションの1つを削減す
る。
【0158】本発明は、例えば任意の連続した8バイト
の整列した書き込みを処理できるバスBを提供する。オ
ンチップメモリ階層は、例えば1から4連続バイトの1
6バイトの整列書き込みを処理することができる。この
ように、16バイトの整列した、また4/8バイトの整
列してもいなくてもよい任意の読み出し/書き込みトラ
ンザクションが、プロセッサメモリ階層によって何らペ
ナルティなしで1クロックサイクルで処理できる。これ
は、4バイト境界を横切った2バイトまたは4バイトオ
ペランドを不整列と考えるペンティアムTMプロセッサと
は異なる。更に、ペンティアムTMプロセッサでは8バイ
ト境界を横切る8バイトオペランドが不整列である。ペ
ンティアムTMバスは、8バイト境界で整列したデータの
任意の連続するバイトを1バスサイクルで書き込むこと
ができる。
【0159】一実施例では、プロセッサは4バイト不整
列ワードアクセスを分解して2つの別々のトランザクシ
ョンとすることができて、それによってバスは何ら不整
列な書き込みを見ることがない。更により有利なアプロ
ーチでは、プロセッサオンチップデータキャッシュ階層
ライン(単数また複数)の最終状態は好ましくは外部状
態制御プロセッサ入力信号によって決定される。例え
ば、WB/WT#(ライトバック/ライトスルー)信号
はプロセッサデータキャッシュラインがライン単位での
ライトバックまたはライトスルーとして定義されること
を許容する。この結果、それはキャッシュラインがプロ
セッサキャッシュL2 14中でSまたはE状態のいず
れにあるか決定する。L2キャッシュ14の最終状態が
Sである時、それはアドレス指定されたデータがシステ
ム中の他の資源と共有されて、そのデータがシステムメ
モリ5と一致していることを意味する。E状態は、プロ
セッサがメインメモリ5と一致する、アドレス指定され
たデータの排他的コピーを有することを意味する。
【0160】バスB不整列ライトスルー書き込み時に、
本実施例は、第1サイクルの終わりでのキャッシュライ
ンの最終状態を利用して、バスB不整列書き込みの2番
目を行う必要があるか、あるいはそれを排除するかを判
断する。もし第1のバスB書き込みの終わりでのキャッ
シュラインの最終状態がEであれば、それはこのキャッ
シュが排他的コピーを持っており、外部バスB書き込み
を行わずともそれをローカルに修正できることを意味す
る。従って、2番目の不整列バスB書き込みとなるはず
であったものがローカルなキャッシュデータ修正として
取り扱われて、それによって2番目のバスB書き込みが
排除される。L2キャッシュ14ラインの最終状態は、
2番目の不整列バスB書き込みがローカルなオンチップ
キャッシュ14で吸収されることからE状態ではなくM
状態になる。1番目のバスB書き込みの終わりでのL2
キャッシュラインの最終状態がもしSであれば、それは
そのラインが共有のままに留まる必要があり、そのキャ
ッシュは通常のように、2番目のバスB不整列書き込み
に進むことを意味する。図30は、バス不整列ライトス
ルー書き込みに含まれるバストランザクションの数およ
び状態遷移を要約している。上述のプロセスおよび回路
は、外部バスB書き込みが発生する3つの場合のうちの
1つにおいて、1つのバスサイクルを節約する。この方
法は、バスB不整列ライトスルー書き込みでバスBトラ
ンザクションの数を有利に減らして、その結果、電力を
節約し、バスBトラフィックを削減する。
【0161】一実施例では、図15に示されるL2 1
4タグramは、64バイトのL214ライン当り2ビ
ットのディレクトリ情報を有しており、それは、メモリ
からL2キャッシュ14を経由してデータを得る3つの
ユニットL1D 16d、L1I 16i、およびTLB
50相互間でコヒーレンスを維持するためのものであ
る。L2 14中の2つのディレクトリ(dir)ビッ
トの符号化が図31に示されている。
【0162】L2 14中の次のディレクトリ状態は図
32に示されるように、現在のディレクトリ状態と、T
LB50、L1I 16i、およびL1D 16dからの
読み出し/書き込みアクションに依存する。
【0163】一般に、従来の2ビットディレクトリ方式
は3つの状態(00、10、11)だけを有する。メモ
リ階層56の一実施例では、汚染データはL2 14に
対して下位レベルのキャッシュに対して保存されてい
る。従って、第4の状態(01)が2ビットディレクト
リ方式に追加されて、この能力を提供する。オペレーシ
ョンの詳細は図33に示されている。
【0164】L1D 16dまたはL1I 16dへの内
部コヒーレンス(スヌープ)要求は、L2キャッシュ1
4において特殊なコヒーレンスアクションが要求される
時にディレクトリ状態に基づいてL2 14から生成さ
れる。この特殊なコヒーレンスアクションは、例えば以
下の状況の1つによって要求されよう。 1. 外部スヌープ:バスBから外部スヌープ要求があ
って、そのスヌープアドレスがL2 14中でヒットで
ある時 2. WBINVD/フラッシュ:WBINVD命令ま
たはバスB上のフラッシュ信号によって、マイクロコン
トローラがライトバックおよび無効化を依頼する。 3. ロックされたアクセス:ロックされた読み出しア
クセスの間に、もしそのラインがキャッシュ階層中に存
在すれば、L2 14は下位レベルがコヒーレンスアク
ションを取ることを依頼する。 4. TLB50読み出し:もしTLB50からの読み
出し要求がL2 14中でヒットすれば、下位レベルキ
ャッシュからデータが集められて、TLB50へ供給さ
れる。 5. L2 14置換:もしラインがL2 14から置
換されれば、L2 14は下位レベルでコヒーレンスア
クションを開始する。 6. L1I 16i読み出し:L1I 16iがL2
14に対して読み出し要求をサブミットし、L2 14
がL0D 18/L1D 16dとデータ不一致を有す
る時は、L1D 16dに対して内部スヌープコマンド
が発行されて、それがL1I 16iへ供給される前に
正しいデータが得られる。 7. L1D 16d書き込み:もしあれば、L1I
16i中のコピーが無効化される。
【0165】L1I 16i読み出しがあり、データ側
(L0D 18/L1D 16d/L2 14)に修正
されたコピーが存在する時、あるいはL1D 16d
き込み要求があって、L1I 16iにコピーが存在す
る時は、自己修正コードが実行されるか、あるいはコー
ドおよびデータ間で偽の共有が存在することに注意され
たい。更に、L1D 16dからL2 14への犠牲ラ
イトバック時には、もし各32バイトラインに付随する
ディレクトリ状態が存在すればディレクトリ状態は00
から01へ変更可能である。しかし、もしディレクトリ
状態が64バイトラインのみに対して保持されていれ
ば。L1D 16dからL2 14への犠牲ライトバッ
ク時には、ディレクトリ状態は同じままに留まるべきで
ある。
【0166】L2 14からL1D 16dへのスヌー
プインタフェースは好ましくは、信号L2_to_L1
D_pa、L2_to_L1D_snoop、L2_t
o_L1D_inval、L2_to_L1D_ret
urn_data、L1D_to_L2_done、お
よびL1D_to_L2_snoop_data_re
ady信号を含む。同様に、L1I 16iインタフェ
ースはL2_to_L1I_invalおよびL1I_
to_L2_done信号によって制御される。もしI
キャッシュが修正されたデータを決して保有しなけれ
ば、L1I 16 iに対してsnoopあるいはret
urn_data信号は不要であることに注意された
い。
【0167】もしL2_to_L1I_inval信号
が能動的であれば、L1I 16iはキャッシュライン
の状態をIへ変更して、_done信号を戻す。L1I
16iへの_invalコマンドは、L2 14中の
ディレクトリ状態がそれがコピー(10、11)を有す
ることを示しており、内部スヌープ条件が発生する時
(上の1、2、3、5、および7の状況)だけ与えられ
る。もしディレクトリ状態が64バイト細分性(32バ
イトの代わりに)に維持されていれば、L1I16i
対して2つの無効化コマンドが発行されなければならな
い。
【0168】一実施例で、信号_snoop、_inv
alおよびreturn_dataを通してL1D 1
dへ送られる内部スヌープコマンドが図34に示され
ている。L1D 16dへのスヌープコマンドは、内部
スヌープのための上述の条件の1つ(状況7を除く)が
存在し、L2 14のディレクタビットがL1D 16
dを指す時に生成される。
【0169】L2 14によってL1D 16dに対し
て各種状況について生成されるスヌープコマンドが図3
5に要約されている。スヌープコマンドが110(すな
わち、戻りデータは期待されない)である時は、L1D
16dおよびL0D 18は、2つのプロセッサクロ
ックサイクル内で状態変更が発生することを確実なもの
としなければならない。戻りデータが期待される場合に
ついては、_snoop_data_readyおよび
_done信号を能動的な状態に戻すために使用される
サイクル数に上限はない。図35に示されていない任意
の状況に対して、L2 14からL1D 16dへのス
ヌープコマンドは000となるべきである。
【0170】信頼性のある通信を維持するために、マル
チプロセッサシステムではロックされたアクセスが普通
に使用されている。例えば、1つのプロセッサがデータ
をメインメモリ5へ動かす時、もし他のプロセッサがそ
の時間にそれらのメモリ位置へアクセスしていれば、デ
ータの信頼性には疑問が生じる。メモリオペレーション
の完全性はロックされたアクセスを使用することを通し
て保護される。メモリ階層56中のロックされたアクセ
スの2つのソースは、TLB50からのロックされた読
み出し修正書き込み(r−m−w)要求と、マイクロコ
ントローラ48によって生成されるロックされたアクセ
スである。BIU12はr−m−wサイクルの期間の
間、バスB上のLOCK#信号をアサートする。ロック
されたアクセスはキャッシュ可能でない。しかし、1つ
のメモリ位置がプロセッサ10によってロックなしでア
クセスされ、キャッシュ階層中にストアされた後で、同
じ位置に対してロックされたr−m−wアクセスを開始
することは可能である。この場合に、ロックされた読み
出し部分の間、そのラインは、キャッシング可能でない
読み出し要求がバスB上に与えられる前にキャッシュ階
層から除去(ロック追い出しと呼ばれる)される。ロッ
ク追い出しの間、そのラインはすべてのキャッシュ中で
無効化されて、そしてもしそれがキャッシュの1つで修
正されれば、それはメモリ5へライトバックもされる。
【0171】x86アーキテクチャを採用する一実施例
では、TLB50からのロックされたアクセスにおい
て、メインTLB50は、‘a’ビットまたは‘b’ビ
ットをページディレクトリエントリ(pde)またはペ
ージテーブルエントリ(pte)中にセットする必要の
ある時にそれらの要求を発生する。それらのロックされ
た要求は4バイト整列しており、TLB50によって生
成されたr−m−wアクセス毎に、1つのロックされた
読み出しに続く1つのロックされた書き込みが実行され
る。TLB50によって生成されるロックされたアクセ
スは好ましくはL2キャッシュ14へ直接送られる(そ
れらは下位レベルのキャッシュを通らない)。
【0172】マイクロコントローラ48からのロックさ
れたアクセスにおいて、マイクロコントローラ48は、
セグメント記述子更新を更新する時、およびTSS(タ
スク状態セグメント)記述子試験のために、‘loc
k’の接頭辞の付いた有効な命令、デフォルトでロック
される必要がある命令に対してロックされたr−m−w
アクセスを開始する。マイクロコントローラ48によっ
て生成されるロックされたメモリアクセスは、いくつか
の工程で、好ましくは実行ユニット54を通してL0D
キャッシュ18へサブミットされる。それらの工程は演
算コードと個別オペレーションとの組み合わせを含む。
【0173】第1の工程は追い出しおよびベリファイで
ある。一実施例では、L0Dキャッシュ18はそのロッ
クされたアクセスが32バイト境界を横切って不整列し
ているかどうかをチェックし、またそのアクセスが4K
ページの境界を横切っているかどうかをチェックする。
もしそのアクセスが32バイト境界を横切っていなけれ
ば、L0D 18は好ましくはL1D 16dを通してL
2キャッシュ14へ、ロック追い出し要求をサブミット
する。L2キャッシュ14はその追い出しを実行する。
もしそのアクセスが32バイト境界を横切っていれば、
L0D 18はL2 14へ2サイクルのロック追い出
しを開始する。更に、もしそのアクセスが4Kページ境
界を横切っていれば、L0D 18は更に、第2のロッ
ク追い出しのためのμDTLB38検索を実行する。こ
うして、バスB上のロックされた読み出しに先行して、
0、1、または2の犠牲ライトバックがあることにな
る。この犠牲ライトバックバーストサイクルはバスBに
ロックされていない。もし追い出しおよびベリファイオ
ペレーションが例外なしに完了すれば、後続のロードお
よびストアオペレーションの間に発生できる例外は存在
しない。
【0174】第2の工程はロックされたロードである。
ロック追い出しが完了した後で、マイクロコードは、L
OCK個別(discrete)がセットされたL0D
18へロードオペレーションを送る。一実施例では、
もしロックされたアクセスが8バイト不整列であれば、
BIU12はそれを2つの8バイト整列読み出しアクセ
スに分解する。もしそのアクセスが16バイト不整列で
あれば、L0D 18はその要求を2つの別々のロック
された読み出しに分解してL2 14へサブミットす
る。両方の不整列ケースで、BIU12はバスB上でS
CYC信号(スプリットサイクル:この信号はロックさ
れたオペレーションが不整列であることを示す)を能動
状態へ駆動して、LOCK#信号はその読み出しの間は
能動状態に留まる。
【0175】第3の工程はロックされたストアである。
ロックされたロードに続いて、マイクロコードはストア
を発行する。LOCK個別はそのストアによってリセッ
トされよう。不整列のケースでは、ストアトランザクシ
ョンはロックされたロード工程と同じように分解され
る。
【0176】第4の工程はロックされたサイクルトラン
ザクションの終了である。メモリ階層56はロックされ
たサイクルが終了するまでロックされたオペレーション
の準備を続ける。ロックされたサイクルを終了させるた
めに、マイクロコードは、実行ユニット54へロード実
効アドレス(LEA)演算コードが送られる間にLOC
K個別をリセットする。
【0177】オンチップのキャッシュサイズが増大する
につれて、それがキャッシュフラッシュを実行するため
に要する時間もまた増大する。特定のタイプのオペレー
ションに対しては、プロセッサ10がオンチップキャッ
シュ中でデータを操作して、その後にキャッシュをフラ
ッシュすることによって、外部世界がその結果を見るよ
うにするのが普通である。そのようなタイプのオペレー
ション(一般的な例は画像処理である)に対しては、大
型のキャッシュサイズによる性能劣化は禁止するように
できる。従って、以下に1つの実施例が示されるが、そ
れによってキャッシュのちょうどライトバックの部分だ
けを実行できる。この機構を通して、メモリへ書き込む
必要のあるデータを含むキャッシュの部分だけがキャッ
シュからフラッシュされる。更に、1つの実施例が述べ
られており、その中ではプロセッサ10はメモリブロッ
クの所有権を内部的に変更できるようになっている。そ
の結果、メモリブロック中の修正されたラインは外部世
界へライトバックされるが、それらのラインはキャッシ
ュに保持されている。このことはメモリのエリアをライ
トスルー領域からライトバック領域へ切り替えることを
可能とする。
【0178】多重バス−マスター環境において経験する
別の問題は外部スヌープである。外部スヌープは外部世
界からの特別なキャッシュラインの状態に関する問い合
わせである。プロセッサ10は、プロセッサ10がその
ラインをキャッシュしているかどうかを外部バスBへ伝
えることによって応答するであろう。もしプロセッサ1
0がデータを修正していれば、それはそのラインを外部
システムへライトバックするであろう。しかし、多くの
装置がメモリブロックを扱う。1つの装置がそのメモリ
ブロックの所有権を要求する時は、それはそのブロック
内の各キャッシュラインに対して外部スヌープを実行し
なければならない。別の実施例について以下に述べる
が、それによればメモリの1つのブロック全体をスヌー
プする外部スヌープを、1つのオペレーションだけでも
って実行することができる。
【0179】これらの実施例は2つの独特のキャッシュ
演算コード、“追い出し”および“ライトバック”を利
用する。キャッシュが追い出し演算コードとその付随ア
ドレスを受信する時は、それは、供給されたアドレスが
そのキャッシュに含まれているかを調べるためのチェッ
クを行う。もしそのアドレスが存在すれば、キャッシュ
はそのラインの追い出しを実行する。すなわち、もしそ
のラインが修正済み状態にあれば、そのラインは外部バ
スBへライトバックされて、そのラインはそのキャッシ
ュ中で無効化される。もしそのラインがキャッシュに存
在するが、修正されていなければ、そのラインは単に無
効化される。逆に、キャッシュが“ライトバック”演算
コードを受信する時は、もし参照されたラインが修正済
み状態であればそのラインはバスBへライトバックされ
て、“未修正”とマークされる。もし参照されたライン
がキャッシュ中にあるが、修正済み状態でなければ、そ
のラインはそのキャッシュに留まる。しかし、プロセッ
サはそのラインの所有権を手放すであろう。MESIの
枠組みでは、これらの規則は図36に示される関係へ翻
訳される。
【0180】x86のようないくつかのプロセッサアー
キテクチャでは現在、キャッシュライトバックを実行で
きる命令は命令セットの中に1つしかない。x86アー
キテクチャに関しては、これはWBINVD命令であ
る。この命令は全キャッシュをフラッシュし、その後そ
れを無効化するであろう。従って、WBINVD命令の
後では、そのキャッシュは空になろう。部分的なキャッ
シュフラッシュを実行するためにはいくつかのやり方が
ある。1つの方法は、新しい演算コードを定義すること
である。この演算コードは2つのパラメータ、アドレス
とスカラとをその中に構築されよう。アドレスはメモリ
ブロックの底のアドレスであり、スカラはメモリブロッ
クのサイズである。もし現状のx86命令セットとの一
貫性が望みであれば、標準的な“mod/rm re
g”バイトを使用すべきであり、それによってアドレス
およびスカラ値を記述する。別の可能性は、MSR(マ
シン固有レジスタ)を定義するものであり、それは書き
込まれる時に部分的なキャッシュフラッシュを引き起こ
すであろう。その活動を開始するために使用される機構
がどのようなものであろうと、それは所望のアドレスブ
ロックに対してフラッシュを実行するであろう。このオ
ペレーションは次のように進行しよう(擬似コード
で)。
【0181】ブロックをライトバックおよび無効化する
ために: tmp_addr=initial_address while(tmp_addr<initial_ad
dress+block_size) Evict(tmp_addr) tmp_addr=temp_addr+line_s
ize
【0182】ライトバックするが、ブロックの無効化は
しないために: tmp_addr=initial_address while(tmp_addr<initial_ad
dress+block_size) Writeback(tmp_addr) tmp_addr=temp_addr+line_s
ize
【0183】ブロックスヌープは同様に機能するが、ア
ドレスおよびブロックサイズは外部バスBから供給され
て、外部インタラプトがBIU12によって生成されて
マイクロコントローラ48への命令の流れをインタラプ
トする。これらの機構が図37に示されている。図37
を参照すると、BIU中のレジスタ70は外部スヌープ
のベースアドレスおよびブロックサイズをストアする。
“ブロックスヌープインタラプト要求”ラインが次に取
り上げられて、それは実行パイプライン54にブロック
スヌープマイクロコードを開始させる。ブロックスヌー
プマイクロコードはスヌープのベースアドレスおよびブ
ロックサイズ情報をBIU12から取り出して、次を実
行する。
【0184】tmp_addr=initial_ad
dress while(tmp_addr<initial_ad
dress+block_size) {Evict|Writeback}(tmp_add
r) tmp_addr=temp_addr+line_s
ize
【0185】伝統的なアドレス発生技術のそれよりもよ
り優れた性能を許容する独特のアドレス発生をメモリ階
層56において利用することができる。x86プロセッ
サでのアドレス発生の問題点は、2つの段階に分割され
る。基本的な流れは:実効アドレス―――>線形アドレ
ス――>物理アドレスである。物理アドレスはキャッシ
ュへ送られる最終アドレスである。
【0186】実効アドレスはメモリ場所の抽象的表現で
ある。実効アドレスはセグメントと、“ベース”レジス
タ、“インデックス”レジスタ、“スケール”レジス
タ、および“ディスプレイスメント”の組み合わせとで
定義される。実効アドレスの基本形はSEG:[ベース
+インデックス*スケール+ディスプレイスメント]で
ある。ベース+インデックス*スケール+ディスプレイ
スメントの値はセグメントへの“オフセット”として知
られている。SEGは“セグメント”として知られてお
り、各セグメントは付随する“セグメントベースアドレ
ス”を有し、それは線形アドレス空間でのセグメントの
出発点である。線形アドレスは“セグメントベース”+
“オフセット”として計算される。図38には効率的な
やり方で線形アドレスを発生する回路が示されている。
【0187】線形アドレスから物理アドレスへの変換は
一般にTLBによって実行される。x86アーキテクチ
ャではアドレスは32ビット幅であり、線形アドレスと
物理アドレスで下位12ビットは常に同じである。従っ
て、線形アドレスの上位20ビットだけを20ビット物
理アドレスへ変換しなければならない。
【0188】上でTLBの階層について述べたので、そ
れらを区別する必要がある。好ましくは、μdTLB3
8はL0D 18用の物理アドレスを生成する。物理ア
ドレスを形成するために実際の線形アドレスを要求する
のではなく、図に示される回路は物理アドレスを生成
し、1ビットの“キャリー・イン”信号と、加算された
ときに線形アドレスを生成するはずの2つの数値を必要
とするだけである。例えば、もしa+b+ci=la
で、ここでlaが線形アドレスの上位20ビットで、a
およびbが20ビット信号で、ciが1ビット信号であ
れば、この回路はa、b、およびciを見るだけで20
ビットの物理アドレス変換を決定することができる。利
点は、aおよびb信号が線形アドレスの上位20ビット
よりもずっと早い段階で生成されることと、ciが線形
アドレスの上位20ビットの前少なくとも1ゲート遅延
で生成されることである。
【0189】NエントリでフルアソシアティブなμdT
LB38はN個の物理から線形へのアドレス変換を含
む。従って、それはN個の線形アドレス、そしてN個の
対応する物理アドレスを含むことになろう。もしTLB
がフルアソシアティブであれば、TLBにストアされる
物理アドレスに何も制約はない。別の人気のあるTLB
実施形態はダイレクトマップされたTLBである。この
配置では、TLB中に同時に存在できるアドレスにはい
くつかの制約があるが、アクセス時間は一般にフルアソ
シアティブ実施形態よりもずっと高速である。
【0190】キャリー・セーブ加算器は、3つの数値を
取って2つの数値を作り出す装置であり、それは一緒に
加算された場合に3つの入力数値の和を作り出す。この
ように、図のアドレス発生器からのCSAの出力を用い
てμdTLB38へ信号を送ることができる。μdTL
B38タグ比較回路の動作が図に示されている。この構
成はダイレクトマップされたdTLB38の速度性能
と、フルアソシアティブμdTLB38のアーキテクチ
ャ性能を提供している。図は“キャリー・セーブの連想
メモリ”をどのように構築するかを示している。これは
この概念の、よりハードウエア効率的な実施形態であ
る。
【0191】好適実施例についてこれまで詳細に説明し
てきた。本発明の範囲はここに述べたものと異なる実施
例で請求の範囲内に含まれるものを包含することを理解
されるべきである。例えば、上ではMESI的なキャッ
シュコヒーレンシプロトコルについて述べたが、その他
のキャッシュコヒーレンシプロトコルを使用することも
できる。上では本発明の完全な理解のために、特別な詳
細を用いたが、当業者であれば本発明がそれらの詳細な
しでも実施できることを理解されよう。更に、いくつか
の場合には、本発明を実施するために使用できるよく知
られた手順、方法、部品および回路について説明しなか
った。包含という用語は本発明の範囲について使用され
る場合には、非排他的と解釈されるべきである。本発明
の各種技術は、デジタル信号プロセッサを含むが、それ
に限定されるわけではない任意のタイプのプロセッサに
適用でき、またそれらによって利用される。
【0192】本発明は例示実施例に関連して説明してき
たが、この説明は限定的な意味のものではない。この説
明を参照すれば、本発明の他の実施例とともに例示実施
例に対する各種の修正および組み合わせが当業者には明
らかになろう。従って、特許請求の範囲はそのような修
正や実施例をカバーすることを意図している。
【図面の簡単な説明】
【図1A】例示スーパースカラパイプライン方式のマイ
クロプロセッサ中に本発明のメモリ階層を採用した例示
データ処理システムを示す図。
【図1B】図1Aのマイクロプロセッサ用の例示実行ユ
ニットを示す図。
【図2A】図1Aのマイクロプロセッサ用の本発明の多
重レベルメモリ階層を示す図。
【図2B】図2Aの多重レベルメモリ階層の簡略化した
ブロック図。
【図3A】クロックサイクルの関数としての、レベルゼ
ロデータ(L0D)キャッシュによる各種オペレーショ
ンの図表。
【図3B】クロックサイクルの関数としての、レベルゼ
ロデータ(L0D)キャッシュによる各種オペレーショ
ンの図表。
【図4】L0Dキャッシュデータメモリの論理レイアウ
ト図。
【図5】図4のメモリの物理レイアウト図。
【図6】4ウエイのアソシアティブキャッシュ用の擬似
LRU状態トリー図。
【図7】図1AのマイクロプロセッサのL0Dキャッシ
ュで同一セットにアクセスする2つのパイプ(P0、P
1)間のヒット・オア・ミス相互関係図。
【図8】図7で使用されるような、MRU−way、v
hit、およびLRUから次のLRUおよびマージLR
Uを計算するための回路図。
【図9】読み出しミスおよび書き込み割り当てのため
の、レベル2(L2)キャッシュライン状態遷移図。
【図10】ヒット書き込み用のレベル2(L2)キャッ
シュライン遷移図。
【図11】アンロックされた書き込み用のレベル1(L
1)データキャッシュライン状態遷移図。
【図12】キャッシュ可能な読み出しミス用のL1デー
タキャッシュライン状態遷移図。
【図13】キャッシュ可能な読み出しミス用のL0Dキ
ャッシュライン状態遷移図。
【図14】アンロックされた書き込み用のL0Dキャッ
シュライン状態遷移図。
【図15】好適なL2キャッシュタグ構造図。
【図16】好適なL1データキャッシュタグ構造図。
【図17】好適なL0データキャッシュタグ構造図。
【図18】好適なL1命令キャッシュタグ構造図。
【図19】好適なTLBタグ構造図。
【図20】好適なBTBタグ構造図。
【図21】読み出しの基づくキャッシュラインのための
初期および最終状態図。
【図22】A、B、およびCは書き込みに基づく、1キ
ャッシュラインの初期および最終状態図。
【図23】AおよびBは、読み出しミスに関する、1キ
ャッシュおよびそれの上位キャッシュ中の1ラインの最
終状態図。
【図24】書き込みミスに関する、1キャッシュおよび
それの上位キャッシュ中の1ラインの最終状態図。
【図25】各種オペレーションのための多重レベルキャ
ッシュの第1実施例のラインの最終状態図。
【図26】各種オペレーションのための多重レベルキャ
ッシュの異なる実施例のラインの最終状態図。
【図27】AおよびBはライトスルーに関する、L0D
キャッシュおよびL1/L2キャッシュの1ラインの初
期および最終状態図。
【図28】選ばれた外部制御信号の関数としての、ライ
トスルーに関するL1/L2キャッシュの1ラインの初
期および最終状態図。
【図29】初期の共有状態から出発するライトスルーオ
ペレーションのための、図2Aのメモリ階層に関する状
態変化図。
【図30】バス−位置不整ライトスルーに関する状態遷
移およびバストランザクションを示す図。
【図31】L2キャッシュ中の2つのディレクトリビッ
ト用の例示エンコード方式を示す図。
【図32】各種オペレーションの関数としてディレクト
リ状態を決定するためのステートマシン図。
【図33】第4のディレクトリ状態が提供される時の、
各種オペレーションの関数としてのディレクトリ状態
図。
【図34】内部スヌープコマンドのための符号化と、結
果のキャッシュオペレーションを示す図。
【図35】L1Dキャッシュの各種オペレーションのた
めにL2キャッシュによって生成されるスヌープコマン
ドを示す図。
【図36】キャッシュ演算コードの関数としての、キャ
ッシュ中の初期および最終ライン状態図。
【図37】ブロックスヌープオペレーションを示す、図
1の一部分のブロック図。
【符号の説明】
2 データ処理システム 3 通信ポート 4 グラフィックスディスプレイシステム 5 メインメモリシステム 6 入力装置 8 ディスクシステム 10 マイクロプロセッサ 12 バスインタフェースユニット(BIU) 14 レベル2キャッシュ 16 レベル1データキャッシュ 18 レベル0キャッシュ 20 クロック発生および制御回路 22 マイクロ命令変換検索バッファ 24 制御回路 26 フェッチユニット 28 プレデコード0ステージ 30 浮動小数点ユニット 32 プレデコード1ステージ 34 デコーダ 38 変換検索バッファ 39 レジスタファイル 40 ロード・ストアユニット 42 ALU 44 オペランドユニット 45 マルチプレクサ 46 マイクロコードROM 48 マイクロコントローラ 50 変換検索バッファ 52 分岐ターゲットバッファ 54 多重実行ユニット 56 メモリ階層 60 ライトスルー書き込みバッファ 62 ライトバック書き込みバッファ 64 スヌープライトバック書き込みバッファ 70 レジスタ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 ティモシイ アンダーソン アメリカ合衆国,テキサス,ダラス,アン ゴラ ストリート 9809

Claims (6)

    【特許請求の範囲】
  1. 【請求項1】 階層構造の多重レベルキャッシュメモリ
    サブシステムであって、 データ用の第1の複数のキャッシュレベル、 命令用の第2の複数のキャッシュレベル、および前記第
    1および第2の複数のキャッシュレベルとその他のメモ
    リとにつながれて動作する統合されたデータおよび命令
    キャッシュレベル、を含むサブシステム。
  2. 【請求項2】 請求項1に記載のサブシステムにおい
    て、前記第1の複数のキャッシュレベルが2であるサブ
    システム。
  3. 【請求項3】 請求項1に記載のサブシステムにおい
    て、前記第2の複数のキャッシュレベルが1であるサブ
    システム。
  4. 【請求項4】 請求項1に記載のサブシステムにおい
    て、前記データキャッシュの下位レベルが、処理される
    データ実行ユニットの数に等しいデータポート数に少な
    くとも1つの付加的データポートを加えた数に等しい複
    数のデータポートを有しているサブシステム。
  5. 【請求項5】 請求項1に記載のサブシステムにおい
    て、前記命令キャッシュの下位レベルが、処理される命
    令でコーダの数に少なくとも1を加えた数に等しい複数
    の部品を含んでいるサブシステム。
  6. 【請求項6】 進歩した多重レベルキャッシュコヒーレ
    ンシプロトコルであって、 上位キャッシュ中へロードされて以来、少なくとも部分
    的に修正されて、前記上位キャッシュ中で“修正済み”
    とマークされた内容を有するキャッシュラインを、前記
    ラインに含まれる情報に関して、前記上位キャッシュか
    らすぐ下位のキャッシュへ書き込み、 前記下位キャッシュ中で前記ラインを“修正済み”とし
    て同定するようにマークし、 前記下位キャッシュ中にある前記ラインの少なくとも一
    部の内容を変更し、および前記下位キャッシュ中の前記
    ラインを前記上位キャッシュに対して修正済みとしてマ
    ークする、を含むプロトコル。
JP11287163A 1998-09-01 1999-09-01 プロセッサ用の進歩したメモリ階層構造 Pending JP2000215102A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US9879798P 1998-09-01 1998-09-01
US098797 1998-09-01

Publications (1)

Publication Number Publication Date
JP2000215102A true JP2000215102A (ja) 2000-08-04

Family

ID=22270940

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11287163A Pending JP2000215102A (ja) 1998-09-01 1999-09-01 プロセッサ用の進歩したメモリ階層構造

Country Status (4)

Country Link
EP (1) EP0989496B1 (ja)
JP (1) JP2000215102A (ja)
AT (1) ATE294415T1 (ja)
DE (1) DE69924939T2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022047008A (ja) * 2020-09-11 2022-03-24 株式会社東芝 ライトバックキャッシュ装置

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6944713B2 (en) * 2002-06-18 2005-09-13 Intel Corporation Low power set associative cache
US10002076B2 (en) 2015-09-29 2018-06-19 Nxp Usa, Inc. Shared cache protocol for parallel search and replacement
US20170255569A1 (en) * 2016-03-01 2017-09-07 Qualcomm Incorporated Write-allocation for a cache based on execute permissions
US11620230B2 (en) * 2019-05-24 2023-04-04 Texas Instruments Incorporated Methods and apparatus to facilitate read-modify-write support in a coherent victim cache with parallel data paths

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5671391A (en) * 1994-01-10 1997-09-23 Ncr Corporation Coherent copyback protocol for multi-level cache memory systems
EP0855645A3 (en) * 1996-12-31 2000-05-24 Texas Instruments Incorporated System and method for speculative execution of instructions with data prefetch

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022047008A (ja) * 2020-09-11 2022-03-24 株式会社東芝 ライトバックキャッシュ装置
JP7350699B2 (ja) 2020-09-11 2023-09-26 株式会社東芝 ライトバックキャッシュ装置

Also Published As

Publication number Publication date
ATE294415T1 (de) 2005-05-15
EP0989496A3 (en) 2001-02-28
EP0989496B1 (en) 2005-04-27
DE69924939D1 (de) 2005-06-02
DE69924939T2 (de) 2006-03-09
EP0989496A2 (en) 2000-03-29

Similar Documents

Publication Publication Date Title
US5784590A (en) Slave cache having sub-line valid bits updated by a master cache
US5551001A (en) Master-slave cache system for instruction and data cache memories
EP0734553B1 (en) Split level cache
US5793941A (en) On-chip primary cache testing circuit and test method
US5671444A (en) Methods and apparatus for caching data in a non-blocking manner using a plurality of fill buffers
US5526510A (en) Method and apparatus for implementing a single clock cycle line replacement in a data cache unit
US6122709A (en) Cache with reduced tag information storage
US5826052A (en) Method and apparatus for concurrent access to multiple physical caches
US7032074B2 (en) Method and mechanism to use a cache to translate from a virtual bus to a physical bus
US7389402B2 (en) Microprocessor including a configurable translation lookaside buffer
US6212602B1 (en) Cache tag caching
US20040103251A1 (en) Microprocessor including a first level cache and a second level cache having different cache line sizes
EP1278125A2 (en) Indexing and multiplexing of interleaved cache memory arrays
US6012134A (en) High-performance processor with streaming buffer that facilitates prefetching of instructions
US5835949A (en) Method of identifying and self-modifying code
US20200104259A1 (en) System, method, and apparatus for snapshot prefetching to improve performance of snapshot operations
ZA200205198B (en) A cache line flush instruction and method, apparatus, and system for implementing the same.
US7133975B1 (en) Cache memory system including a cache memory employing a tag including associated touch bits
US5737749A (en) Method and system for dynamically sharing cache capacity in a microprocessor
US8108621B2 (en) Data cache with modified bit array
US20050132139A1 (en) Runtime register allocator
US7251710B1 (en) Cache memory subsystem including a fixed latency R/W pipeline
EP0989496B1 (en) Improved memory hierarchy for processors and coherence protocol therefor
KR100218616B1 (ko) 현재의 트랜잭션동안 다음 어드레스를 제공하기 위한 전송방법 및 시스템
JP2000339221A (ja) 変換装置のエントリを無効化するシステム及び方法