JP4128878B2 - キャッシュ中のラインを投機的に無効にする方法とシステム - Google Patents

キャッシュ中のラインを投機的に無効にする方法とシステム Download PDF

Info

Publication number
JP4128878B2
JP4128878B2 JP2002589993A JP2002589993A JP4128878B2 JP 4128878 B2 JP4128878 B2 JP 4128878B2 JP 2002589993 A JP2002589993 A JP 2002589993A JP 2002589993 A JP2002589993 A JP 2002589993A JP 4128878 B2 JP4128878 B2 JP 4128878B2
Authority
JP
Japan
Prior art keywords
cache
line
cache line
speculative
request
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.)
Expired - Fee Related
Application number
JP2002589993A
Other languages
English (en)
Other versions
JP2004529435A5 (ja
JP2004529435A (ja
Inventor
タン テイク−チャン
ティー. サンダー ベンジャミン
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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices 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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2004529435A publication Critical patent/JP2004529435A/ja
Publication of JP2004529435A5 publication Critical patent/JP2004529435A5/ja
Application granted granted Critical
Publication of JP4128878B2 publication Critical patent/JP4128878B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

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
    • 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/0891Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using clearing, invalidating or resetting means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/507Control mechanisms for virtual memory, cache or TLB using speculative control

Description

本発明は、キャッシュ、特に、キャッシュ中のラインを無効にすることに関する。
一般的に、メインシステムメモリは速度よりも記録密度に重きをおいて設計されているので、マイクロプロセッサ設計者は、マイクロプロセッサが直接メインメモリにアクセスする必要性を軽減させるために、設計にキャッシュを加えた。
キャッシュは、メインメモリよりもさらに速くアクセスできる、小さなメモリである。コンピュータシステムは、多くの異なるレベルのキャッシュを有している。例えば、コンピュータシステムは、「レベル1(L1)」キャッシュおよび「レベル2(L2)」キャッシュを有している。これらのキャッシュは、マイクロプロセッサに一般的に統合される。
キャッシュは、メインシステムメモリに使用されているメモリ(一般的には、DRAM(dynamic random access memories)またはSDRAM(synchronous dynamic random access memories))よりも速いアクセス時間を有しているSRAM(static random access memories)のような、速いメモリセルから一般的に構成される。
SRAMはより高速であるが、記録密度が低く、またコストが高いので、メインシステムメモリに一般的には使用されない。
また、他の多くのタイプのキャッシングも可能である。
例えば、メインシステムメモリは、そのシステムのより遅いダイレクトアクセス記憶装置(例えば、ハードディスクドライブ)のキャッシュの役割をする。ハードドライブのような他のデバイスもまた、それらの性能を改良するための内部キャッシュを含んでいる。
マイクロプロセッサがメモリからのデータを必要とする場合、マイクロプロセッサは、一般的に、必要なデータがキャッシュに入れられたかどうか確かめるため、まずL1キャッシュをチェックする。L1キャッシュに入れられていない場合、L2キャッシュをチェックする。
同時に、L2キャッシュをミスする場合に備え、そのデータはメモリに対してもリクエストされる。
L2キャッシュがそのデータを格納している場合、L2キャッシュは、一般的にメインシステムメモリよりもはるかに高い速度、またより低いレイテンシで、マイクロプロセッサにそのデータを供給する。また、そのデータがメモリに対してリクエストされていた場合、そのリクエストはキャンセルされる。
データがL1キャッシュまたはL2キャッシュに入れられていない場合(「キャッシュミス」と呼ばれる)、そのデータは、メインシステムメモリまたは色々なタイプの大容量記憶装置(例えば、ハードディスクドライブ)から読み込まれる。
メモリにアクセスすることは、L1キャッシュからデータにアクセスすることに比べて、かなり多くのクロックサイクルを必要とする。同様に、データがメインシステムメモリにない場合に、大容量記憶装置のデータにアクセスすることはさらに多くのサイクルを必要とする。
キャッシュは、一般的にはメモリアクセスの局所性(locality of reference)の原理で動作し、これは、最も最近使用されたデータ(その近くのアドレスのデータ)が、それ以外のデータよりもアクセスされる可能性が高いことを示す。
コンピュータソフトウェアは、一般的に、あらかじめ実行されたコードが再実行されるループおよびブランチを有するので、この法則は有効である。
キャッシュに最近アクセスされた命令およびデータを格納することによって、マイクロプロセッサが命令とデータとがメインメモリから読み込まれるのを待つ必要がないので、システム性能が増加する。
マイクロプロセッサとコンピュータシステムの設計者は、メモリアクセスの局所性の原理をさらに一歩進めて、ブランチ予測のようなテクニックを使用することによって、それらがマイクロプロセッサによって実際に必要とされる前に、先を見越してキャッシュ内に命令およびデータを格納させている。
さらに、命令またはデータのバイトがメモリから読まれる場合、その命令またはデータに続くバイトが追加して読み込まれ、キャッシュに入れられる。
メモリアクセスの局所性の原理は、これらの命令とデータバイトがプロセッサによって必要となる可能性が他のデータや命令よりも一般的に高いことを示す。
キャッシュの中にシステムメモリをマップ(マッピング)するいくつかの異なる方法がある。よくあるアプローチの一つは、nウェイ・セットアソシアティブキャッシュを利用する。このキャッシュは、複数のセットに分割される。各セットは、n個のキャッシュラインを含んでいる。キャッシュラインは、連続するバイトのグループ(例えば、32または64バイト)である。
効率性を上げるために、キャッシュメモリのトランザクションは一般的に、単一のバイト毎というよりキャッシュライン毎に行われる。
メインメモリ中のキャッシュに入れることができるロケーションは、各々、キャッシュラインのセットのうちの1つに割り当てられる。その結果、各ロケーションは、その割り当てられたセット内のn個の場所のうちのどのキャッシュにでも入れることができる。
nウェイ・セットアソシアティブキャッシュの特別なケースの一つは、ダイレクトマップキャッシュである。n=1であるダイレクトマップキャッシュでは、各メモリロケーションがキャッシュ中の単なる一つのロケーションにマップされ得る。
nウェイ・セットアソシアティブキャッシュの他の特別なケースは、フルアソシアティブキャッシュである。このケースでは、n=mであり、mがそのキャッシュ中のラインの数である(つまり、ただ一つのセット」がある)。このケースでは、各メモリロケーションは、そのキャッシュ中の全てのロケーションにもマップされ得る。
キャッシュへの基本的な2つの動作性能の基準は、ヒット率(すなわち、メモリアクセスの合計数に対する、キャッシュで見つかるメモリアクセスの比率)と検索速度(すなわち、どれだけ速くヒットまたはミスの判断ができるか)である。
ダイレクトマップキャッシュでは、検索速度はヒット率を犠牲にして最適化される。
これは、ヒットまたはミスの判断をすることが比較的容易である(メモリロケーションは、単に1つのキャッシュラインへマップするだけなので、そのラインだけをチェックする。)が、複数のメモリロケーションが一つのキャッシュラインへマップするので、高いヒット率を持つのは困難であるからである。
反対に、フルアソシアティブキャッシュは、検索速度を犠牲にする一方、ヒット率を最適化する。
すべてのメモリロケーションをすべてのキャッシュラインにマップすることを許可することは、ヒットする確率を改善するが、各メモリロケーションを探すためにすべてのキャッシュラインを検索しなければならないため、検索の複雑さを大幅に増加させる。
セットアソシアティブキャッシュは、フルアソシアティブキャッシュよりも速い検索速度を提供する一方、ダイレクトマップキャッシュよりも大きなアソシアティビティ(すなわち、より高いヒット率)を提供する意味で、二つのキャッシュ方式の折衷案である。
キャッシュサイズは、多くの要因(ダイサイズ、電力消費およびコストを含む。)によって制限されているため、キャッシュに情報をロードする場合、注意を要する。
新たな命令およびデータのための場所を作るために、キャッシュ中の既存の命令およびデータを上書きするため、または無効にするためのポリシー決定は、設計者の関心が高い分野である。
したがって、n>1であるセットアソシアティブキャッシュ(すなわち、特定のメモリロケーションをキャッシュするためのラインの選択の余地がある)中で、どのキャッシュラインを新しいデータで満たすべきかを決定するための方法が必要である。
よくある解決策は、キャッシュされた各メモリロケーションに対するアクセスの相対的な順位をトラックし、次に、最も少ない使用頻度の命令またはデータを、新しい命令またはデータに取り替えるものである。
この解決策は、最近アクセスされたキャッシュラインが再びアクセスされる可能性があるという法則に基づく。他の解決策は、ランダムな置換およびFIFOテクニックを含む。
平均的には、最低使用頻度(LRU)のキャッシュ置換アルゴリズムは、他のアルゴリズムよりもよい性能を提供する。
しかしながら、nウェイ・セットアソシアティブキャッシュ中の最低使用頻度(LRU)キャッシュラインを決定するための従来のアプローチは、LRUアルゴリズムをインプリメントするために、カウンタおよびnウェイ・マルチプレクサを含む相当量の複雑なハードウェアを必要とする。さらに、各キャッシュエントリのステータスビットは、各エントリの使用量をトラックする。
新しいエントリがセット中でなされる場合、ステータスビットはどのキャッシュラインの使用頻度が最低か、または無効であるかを決定するためにスキャンされる。最低使用頻度ラインまたは無効なラインはその後、新しいエントリに場所を空けるために追い出される。
従来のLRU置換アルゴリズムの欠点は、相当量のハードウェアとアルゴリズムをインプリメントするのに必要なステータスビットの時間を多く必要とするとともに、そのセットに無効なエントリがないかをスキャンするために時間とハードウェアが必要なことである。
一般的に、キャッシュサブシステムの性能を改良することが望ましい。例えば、プロセッサ速度の改良と共に、より多くのデータをより速く供給することができるキャッシュサブシステムを提供することが望ましい。
キャッシュラインを無効にすることは多くの場合有用である。
しかしながら、キャッシュラインの無効(無効処理)は、多くの根本的な要因に依存する可能性がある。多くの状況では、エラーチェックがこれらの根本的な要因が正確だったかどうか断定するために行なわる。これらの要因が正確でない場合、その無効は誤りであるので行なわれるべきではない。
エラーチェックを完了するためには相当量の時間がかかることがあるため、無効リクエストがキャッシュコントローラによって実際に読み込まれるとき、その無効が誤っているかどうかに関する決定は不確定である。その結果、無効リクエストは、キャッシュコントローラが他のペンディング中のタスクに移行するのを防ぐために、エラーチェックが終わるまで待機することをキャッシュコントローラに要求することができる。
同時に、キャッシュラインの無効が誤っていることは稀であるため、エラーチェックが完了するのをキャッシュコントローラが待機する時間が無駄になることが多い。
キャッシュコントローラが投機的にキャッシュラインを無効にするように形成される場合、キャッシュコントローラはエラーチェックの完了を待機する代わりに、無効リクエストに直ちに応答することができる。
キャッシュコントローラはまた、無効が誤っていて行なわれるべきでない稀な状況を処理するために、エラーチェックが完了するまで、投機的に無効にされたキャッシュラインが変更されるのを防ぐことができる。このように、後でその無効が誤っていた場合、投機的な無効をリバースする(覆す)ことができる。
よって、投機的にキャッシュラインを無効にする方法およびシステムの様々な実施例を開示する。
一つの実施例では、コンピュータシステムは、プロセッサ、システムメモリ、キャッシュコントローラ、キャッシュおよびエラー検出ユニットを含む。
キャッシュは、プロセッサに接続され、多くのキャッシュライン記憶領域を含む。キャッシュコントローラは、第1キャッシュラインを無効にする第1リクエストを受け取るために接続される。第1リクエストの受け取りに応じ、キャッシュコントローラは投機的に第1キャッシュラインを無効にするように形成される。
後に、投機的な無効をリバースする必要があるときのために第1キャッシュラインを保存するため、第1キャッシュラインの無効が投機的でなくなるまで、キャッシュコントローラはさらに第1キャッシュライン記憶領域が変更されるのを防ぐように形成される。
エラー検出ユニットは、第1リクエストに対応する少なくとも1つのチェックを行なうように形成される。エラー検出ユニットは、例えばキャッシュコントローラ自体であり、そのチェックは、投機的な無効(例えば、より高いレベルのキャッシュからのフィルリクエストに応じた排他キャッシュでのヒット)に結びついた処理が第1キャッシュラインの状態において適切だったことを確かめるためのチェックを含む。エラー検出ユニットがチェックを行なってエラーを検出しなければ、第1キャッシュラインの無効は投機的でなくなる。
1つの実施例では、キャッシュコントローラは、第1キャッシュラインに関連した有効ビットをトグル(反転)することにより、第1キャッシュラインを投機的に無効にするように形成される。
従って、投機的な無効をリバースすることは、第1キャッシュラインが再び有効なことを示すために再度有効ビットをトグルすることを含んでいてもよい。
さらに、いくつかの実施例では、キャッシュコントローラは第1キャッシュラインのデータまたはその状態に依存するリクエストを、第1キャッシュラインの無効が投機的でなくなるまで受け入れないように形成される。
このように、投機的な無効が投機的ではなくなるかリバースされるまで、これらのリクエストは遅延されることがある。
一般にキャッシュコントローラは、第1キャッシュラインの無効が投機的でなくなるまで、リクエストのタイプに基づく追加のリクエスト、または投機的に無効にされた第1キャッシュラインに依存するか、または投機的に無効にされた第1キャッシュラインを変更するリクエストを受け入れないように、形成される。
例えば、キャッシュコントローラは、追加のリクエスト(第1キャッシュラインをヒットするより高いレベルのキャッシュからのフィルリクエスト、第1キャッシュラインへのプローブ・リクエストまたはステートチェンジ・リクエスト、置換のために第1キャッシュラインを選択するより高いレベルのキャッシュからのコピーバック)を受け入れないように形成されてもよい。
キャッシュコントローラは、第1キャッシュラインのタグの一部と一致する追加のリクエストを受け入れないように形成することもできる。
いくつかの実施例では、投機的な無効の一部として、キャッシュコントローラは、第1キャッシュラインに関連した投機的な無効置換事前状態(例えば、置換のためのラインを選択した状態)を保存し、かつあたかも第1キャッシュラインが無効にされたかのように、第1キャッシュラインの投機的な無効置換事後状態を更新するように形成される。
投機的な無効がその後誤っていると決定された場合、キャッシュコントローラは、投機的な無効をリバースするとき、保存された投機的な無効置換事前状態を回復することができる。
別の実施例では、投機的にキャッシュのラインを無効にする方法が示される。
この方法は、キャッシュのラインが無効にされる結果になるリクエストを受け入れるステップ、その無効が誤っているかどうか決定するチェックを開始するステップ、投機的にラインを無効にするステップを含む。
投機的にラインを無効にするステップは、そのチェックが完了するまで、ラインが無効であることを示すステップ、その後ラインが変更されるのを防ぐステップを含む。
この方法はさらに、上記チェックのうちの一つによってその無効が誤っていると決定された場合、ラインが再び有効であることを示すことによって投機的な無効をリバースするステップを含む。
別の実施例では、排他キャッシュの第1キャッシュラインを投機的に無効にする方法が示される。
この方法は、より高いレベルのキャッシュからのフィルリクエストを受け入れるステップ、フィルリクエストが排他キャッシュの中でヒットするか決定するステップ、そのフィルリクエストが誤って開始されたかどうかのチェックを開始するステップ、そして、フィルリクエストが排他キャッシュの中でヒットした場合、排他キャッシュからより高いレベルのキャッシュに第1キャッシュラインを供給すること、を含み得る。
第1キャッシュラインがより高いレベルのキャッシュに供給される場合、チェックがまだ完了していなければ、第1キャッシュラインは投機的に無効にされる。
投機的に無効にするステップは、第1キャッシュラインが無効であることを示すステップ、チェックが完成するまで第1キャッシュラインがその後変更されるのを防ぐステップを含んでいてもよい。
さらに別の実施例では、キャッシュサブシステムが示される。このキャッシュサブシステムは、キャッシュと、キャッシュコントローラとを含む。
キャッシュコントローラは、投機的に第1キャッシュラインを無効にするように形成される。
投機的な無効が誤っていると検出された場合、キャッシュコントローラは、投機的な無効をリバースするように形成され得る。
キャッシュサブシステムはまた、その無効が投機的でなくなるまで、第1キャッシュラインが変更されるのを防ぐように形成された投機的無効コントローラを含んでいてもよい。
投機的な無効が誤っているかどうかを検出することは、所定のサイクル数を必要とすることがあり、それゆえ投機的な無効は、その所定のサイクル数の後にならないと投機的ではなくならない。
本発明は、様々な修正および代替が可能であるが、この中の特定の実施例を図面に記載した例で示し、詳細に説明する。
しかしながら、図面および詳細な説明は、発明を開示された特別の形式に制限するものではない。それどころか、本発明は添付の請求項によって定義されるような本発明の趣旨およびその範囲内にある変形例、均等物および代替物に及ぶ。
本発明の実施態様
<キャッシュサブシステム>
下記の図6および図7に示されるようなコンピュータシステムは、一般的にはキャッシュサブシステムを使用する。
一般的には、これらのキャッシュサブシステムは、プロセッサに統合されたL1キャッシュおよび統合されていないL2キャッシュを含む。
しかしながら、プロセス技術の進歩によって、半導体デバイスのより高い集積化が可能となるにつれて、マイクロプロセッサ設計者は、性能をより良くする方法として、現在、第2レベル(L2)のキャッシュをチップ上に含めることができる。
L2キャッシュの統合によって、信号ピンを通じて通信する必要がなくなるため、L1とL2のキャッシュ間の転送レイテンシおよび転送帯域幅が改良され得る。
従来のアプローチは、一次キャッシュ(L1)を、付加的なアクセスレイテンシーを負うことなく、できるだけ大きなL1キャッシュを作ることを目標として設計した。
従来、この大きなL1キャッシュは、通常はL1キャッシュと同一またはより大きい大きさであって、通常はL1キャッシュよりも大きいがシステムメモリよりは小さいレイテンシを有するL2キャッシュによって補完される。
L2キャッシュは、統合的(inclusive) 、排他的(exclusive)、またはそのどちらでもないように設計することができる。
理想的な統合的なL2キャッシュは、図1Aのベン図に示すように、L1キャッシュにあるすべてのラインはL2キャッシュにもある。対照的に、理想的な排他的なL2キャッシュでは、図1Bのベン図に示すように、L1キャッシュにあるラインはL2キャッシュにはない。
図1Aまたは図1Bに示すように、いくつかの実施例では、統合的なL2キャッシュおよび排他的なL2キャッシュの両方とも、システムメモリに関しては統合的であり得るため、「排他的な」L2キャッシュはL1キャッシュに関してのみ排他的である。
統合的でも排他的でもないキャッシュシステムでは、L2キャッシュに格納されるラインは、どのラインがL1キャッシュに格納されるかに依存しない。したがってまた、L1キャッシュ中のラインがL2キャッシュの中に存在するか否かに関しての保証はない。
これらの各法則には、利点と欠点の両方がある。一般的には、ほとんどのL2キャッシュは統合的である。統合キャッシュでは、L1からL2へのデータ転送の数は減少する。
L2キャッシュに変更されていないL1ヴィクティム(victim)をコピーバックする必要がないので、この転送数の減少が生じる。ヴィクティムは、再度使用される前に、メインメモリにライトバックされる(書き戻される)データブロックである。
例えば、L1キャッシュフィルが既存のラインの置換を必要とする場合、入ってくるラインに場所を空けるために、既存のラインまたはヴィクティムは、L1キャッシュから放出される。統合キャッシュでは、L1ヴィクティムのコピーは、既にL2キャッシュにある。
したがって、L1キャッシュで、L1ヴィクティムが変更されていない場合、同一のラインが既に存在するので、L2キャッシュにそのラインをコピーする必要はない。
オフチップL2キャッシュについては、L1キャッシュ中のラインがL2キャッシュにあることが保証されるため、L1からL2へのコピーバックする間に外部のL2タグ検査を行なう必要がないので、統合性もまた非常に重要である。さらに、L2キャッシュは、例えば、インラインのL2構成が使用される場合、L1キャッシュ用のスヌープフィルタとなる。
統合キャッシュの主な欠点の一つは、有効なキャッシュのサイズを減少させることである。
L1中のすべてのラインがL2にもあるので、図1Aに示すように、L1キャッシュとL2キャッシュをあわせた有効なキャッシュサイズは、L2キャッシュのサイズとなる。これが、一般的にL2キャッシュがL1キャッシュよりも大きい理由の一つである。
他の欠点は、統合性を維持する必要のためにキャッシュコントローラ設計がより複雑になることである。
例えば、潜在的なL2ヴィクティムが選択されている場合、統合キャッシュコントローラは、L2ヴィクティムがL1キャッシュに現在存在しないことを確かめるためにL1キャッシュをバックプルーブ(back-probe)しなければならない。
潜在的なL2ヴィクティムがL1キャッシュに存在する場合、統合性を維持するために別のヴィクティムを選択しなければならない。
代わりに、他の実施例では、潜在的なL2ヴィクティムがさらにL1キャッシュに存在する場合、統合性は、(別のL2ヴィクティムを選択するのではなく)L1キャッシュの対応するラインを無効にすることによって維持される。
キャッシュは一般的に、記録密度が低くてメモリのコストが高く、特にL2キャッシュが一般的には統合的でL1キャッシュよりも大きいことから、L2キャッシュの統合は、コストおよびチップ上の実際上の面積的な見地の両方から歴史的に好まれない設計選択であった。
図1Bで示すように、排他キャッシュは、統合キャッシュとは対照的に、L1とL2のキャッシュとが結合したサイズと等しい、より大きい有効なキャッシュサイズを提供できる。このより大きな有効なキャッシュサイズは、よりよいヒット率をもたらし得る。さらに、L2ヴィクティムを追い出す場合にL1キャッシュにバックプルーブする必要がないので、L2コントローラの複雑さは減少される。
排他キャッシュを使用する場合、L1キャッシュとL2キャッシュの間の転送数は増加する。
例えば、L1ヴィクティムは、変更されたかどうかにかかわらず、メモリアクセスの局所性の原理に従って、L2キャッシュにコピーされるので、L1からL2へのデータ転送の数は増加することがある。
L1ヴィクティムは、L2キャッシュ中の他のどのラインよりも使用頻度が高い可能性があるので、L2キャッシュにL1ヴィクティムを格納することにより、メモリアクセスの局所性の原理を満足させ得る。
いくつかの例では、増加したL1からL2へのトラヒックは、L1とL2のキャッシュ間の通信リンクに依存して、統合キャッシュをより望ましくすることができる。
排他キャッシュは、さらに他のキャッシング・アプリケーションにおいても有用である。
例えば、グラフィックスシステムまたはハードディスクドライブと共に使用されるマルチレベルキャッシュサブシステムを設計することは有用である。
これらの実施例では、統合キャッシュに必要とされる付加的なキャッシュメモリの量と同じ量のキャッシュメモリを必要とすることなく、キャッシュサブシステムの有効なサイズを増加させるために排他キャッシュを使用することは望ましい。
いくつかの実施例では、排他キャッシュは、より高いレベルのキャッシュとしてそれが同じ基板に統合されていないとしても、実用的な設計選択である。
図2は、実行コア409によって使用されるシステムメモリ425からのデータラインおよび/または命令ラインを格納するように形成されるキャッシュサブシステム407の一実施例である。
実行コア409は、キャッシュサブシステムコントローラ419にアドレスバス411上のアドレスを提示することによって、データを要求する。そのアドレスは、仮想アドレスであってもよい。
この例では、同じキャッシュサブシステムコントローラ419がL1キャッシュおよびL2キャッシュの両方を制御しているが、個別のL1コントローラおよびL2コントローラを他の実施例として使用してもよい。L2キャッシュ423は、統合的、排他的、またはそのどちらでもないものとすることができる。
実行コア409からのアドレスの受信に応答して、キャッシュサブシステムコントローラ419は、L1キャッシュ417にそのアドレスを提供することができる。
いくつかの実施例では、L1キャッシュ417は、線形に、または仮想的にアドレスされ得る。したがって、実行コア409から受け取ったアドレスが仮想アドレスである場合、L1キャッシュ417にそれを提供する前にアドレスを翻訳する必要はない。
対照的に、L2キャッシュ423は、いくつかの実施例で物理的にアドレスされ得る。したがって、L1キャッシュ417にミスが生じた場合、仮想アドレスはL2キャッシュ423への提供の前に翻訳される必要がある。
他の実施例では、両方のキャッシュは同じように(例えば、仮想的にまたは物理的に)アドレスされ得る。
L1のフィルリクエストがL2キャッシュ423をミスした場合、そのラインはシステムメモリ425にリクエストされ得る。そして、L1キャッシュ417の中に導かれる(例えば、L2キャッシュ423が排他的である場合)。またはL2キャッシュとL1キャッシュの双方に導かれる(例えば、L2キャッシュ423が統合的である場合)。
L1キャッシュ417中のリクエストされたラインをフィルするために、L1ヴィクティムが作成され、L2キャッシュ423にコピーバックされ得る(L2キャッシュ423が排他的である場合、L1ヴィクティムがクリーンであるか変更されるかどうかに関わらず、またはL2キャッシュ423が統合的である場合、L1ヴィクティムが変更されるかどうかに関わらず)。
L2キャッシュ423が排他的な場合、このコピーバックは、L2ラインの立ち退きを要求することもある。したがって、L2ヴィクティムが作成される可能性があると共に、ヴィクティムが変更される場合、メモリ425にライトバックされ得る。
L2キャッシュ423が排他的な実施例では、L1キャッシュとL2キャッシュの両方のキャッシュは、一つまたはそれ以上のヴィクティムバッファ421を共有し得る。ヴィクティムバッファ421は、それらが排他的なL2キャッシュ423(それらがL1ヴィクティムである場合)または、システムメモリ425(それらが変更済のL2ヴィクティムである場合)にコピーバックされるヴィクティムラインをバッファリングする。
L1フィルリクエストがL2キャッシュ423でヒットする場合、そのラインはL1キャッシュ417にコピーされ得る。
そのL1リクエストがL2排他キャッシュ423でヒットすれば、排他性を維持することに関連する理由によって、ヒットラインを有効にしておくのではなく、無効にすることが望ましい。たとえば、ラインが無効にされれば、キャッシュサブシステム407にはそのラインのコピーが一つだけある。
このことは、ある瞬間にそのラインのどのコピーがより新しいかをトラックする必要がないので、キャッシュサブシステム407のための制御ロジックを非常に単純化し得る。
さらに、ラインを無効にすることは、排他キャッシュシステムによって提示されたより大きな有効なキャッシュサイズが実現されることを可能にして、L2キャッシュ423中の場所を解放する。
しかしながら、ラインが無効にされる前に、無効に結びつくオペレーション(例えば、L2キャッシュへのフィルリクエストを生成するL1キャッシュのミス)が誤って行なわれたかどうか断定するためのいくつかのチェックを行うことができる。そのチェックによってエラーが露呈する場合、そのオペレーションをキャンセルすると共に/または、後で再試行することができる。
このようにして、これらのチェックが無効を引き起こす条件が誤っていないことを示す場合にのみ、無効化が実行される。
また、統合キャッシュ中で、あるいは排他的でも統合的でもないキャッシュ中で、ラインが無効にされ得る多くの状況がある。
排他キャッシュでの無効のように、これらのチェックは、無効にする命令が誤っていたかどうかを断定する様々なチェックに結局依存する。
例えば、命令がアウトオブオーダー(out of order)で実行されている場合、ある命令は分岐予測の結果、フェッチされることがある。
この分岐予測が正しくないことが判明した場合、フェッチされた命令の実行は取り消される必要があると共に/または、フェッチされた命令の実行の影響はリバースされる必要がある。
あるいはまた、非優先モード中でアウトオブオーダーで実行される命令は、優先命令であり得る。
これらの命令のうちの一つが、キャッシュから実際にラインをフラッシュせずに、キャッシュラインまたはブロックを無効にする命令であり、その命令がL1キャッシュ中のラインを無効にする場合、さらに統合的なL2キャッシュ中のそのラインのコピーを無効にすることは望ましい。
しかしながら、あるチェックが、後に分岐予測の誤りまたは優先違反を発見した場合、一つの例外が生成され得る。また、例外を生成する命令に起因する無効がリバースされる必要がある。
このように、キャッシュの無効は例外チェックに依存する。
他のチェックの例は、コンピュータシステム中のデータの他のバージョンをオーダリング要求に応じるためにチェックすることを含む。
例えば、リクエストされたデータラインの変更済のコピーは、バッファ(例えば、より高いレベルのキャッシュからの書込みバッファあるいはヴィクティムバッファ)に格納される。
この変更済のコピーは、下位レベルのキャッシュに格納されたコピーよりも最近に変更されている可能性がある。よって、そのようなコピーが発見された場合、リクエストしているデバイスがリクエストされたデータの最も直近の変更済のコピーを受け取るように、下位レベルキャッシュへのフィルリクエストは取り消される。
実行される可能性のあるその他のチェックは、エイリアスチェックである。エイリアスチェックは、仮想アドレスキャッシュで生じ得る問題を検索することを含む。仮想記憶システムは、複数の仮想アドレスにメモリの一つの物理ページをマッピングする。
これらの異なる仮想アドレス(すなわち、エイリアス)は、仮想アドレスキャッシュ中の複数の場所にキャッシュされる。
例えば、それが異なるキャッシュラインおよび異なる仮想ページへマップする二つまたは二つ以上の異なる仮想アドレスにマップする場合、単一の物理ページからのデータは、仮想アドレスキャッシュ内の複数の場所に、潜在的にキャッシュされる。
その結果、一つの仮想アドレスを使用して、あるラインをリクエストすることは、たとえヒットを生成する可能性のある異なるエイリアスを使用して同じラインをリクエストしたとしても、ミスを生成する可能性がある。
エイリアスチェックは、仮想アドレスキャッシュ中のエイリアスされたラインに明白なミスが実際にヒットしたことを検出することができる。
例えば、一実施例では、仮想アドレスされたL1キャッシュは、独立した命令およびデータキャッシュを含む。
同じデータのコピーが命令とデータキャッシュの両方に同時に存在するように、L1キャッシュが形成される。L1コントローラは、データキャッシュ中のL1ヴィクティムを選択する場合に、エイリアスされたコピーをチェックするようには形成されない可能性がある。
その結果、L1ヴィクティムは、たとえそのラインのエイリアスされたコピーが、命令キャッシュ(あるいはヴィクティムがその命令キャッシュから選択された場合のデータキャッシュ)にまだ存在していても、排他的なL2キャッシュにコピーバックされる。
その結果、エイリアスチェックが完了する前に、そのデータのためのその後のフィルリクエストはL1でミスする可能性があるが、L2でヒットする可能性がある。
エイリアスチェックによってL1キャッシュのエイリアスされたコピーを発見されるので、そのラインはL2キャッシュ中で無効にされるべきではない。
したがって、以上のような実施例では、排他キャッシュ中の無効は、エイリアスチェックの結果に依存する。
チェックのさらに別の例では、ラインの状態に基づいて、そのラインにアクセスできるかどうかを決定する。多くのシステムが、各ラインのMESIまたはMOESI(Modified, Owned, Exclusive, Shared, Invalid)状態をトラックする。
ライン上であるオペレーションを行なうことが許容できるかどうかは、そのラインの状態による。
例えば、L1命令キャッシュからのフィルリクエストが、L2キャッシュ中の変更済のラインにヒットする場合、変更済のL2ラインがメモリに書き出された後まで、フィルリクエストに対応することは適切ではない(例えば、命令キャッシュがキャッシュコヒーレンシの状態を格納しない場合、そのような制限が使用されてもよい。)。
したがって、あるチェックは、特別のアクセスが、そのラインの現状を考慮に入れて、適切かどうか決めることを含んでいる。
したがって、排他的キャッシュまたは統合キャッシュのどちらにおいても、キャッシュラインは、別のキャッシュのオペレーションの一部として、またはその結果として、無効にされる。
同時にこれらの無効は、完了までに比較的長い時間を要する様々なチェックの結果によってリバースされ得る。
チェックが完了する後までその無効を遅らせるとすると、キャッシュは、チェック待ちに不適当な時間を費やす可能性がある。
キャッシュコントローラが、チェックが完了するまでそのラインを無効にするのを待機する場合、キャッシュは他のオペレーションを行うことができず、それゆえこの遅延は、キャッシュ性能に悪い影響を与える。
あるいはまた、チェックが完成する前に、キャッシュコントローラが無効を実行する場合、その無効がその後誤っていることが明らかになった場合、その無効にされたラインを回復する方法はない。
その結果、チェックを行うことがキャッシュサブシステムの精度を改良するが、この改良された精度は、性能を犠牲にして実現される。
<キャッシュコントローラ>
図2で示されるようなキャッシュサブシステムの性能を改善するために、リクエストの検査が完了していなくても、キャッシュコントローラは命令またはリクエストに応じてキャッシュラインを投機的に無効にするように形成される。
例えば、下位レベルの排他キャッシュのアクセスレイテンシを最小限にするために、ミスがより高いレベルのキャッシュに検出されるとすぐに、フィルリクエスト(このリクエストが排他キャッシュの中でヒットする場合、排他キャッシュのラインを最終的に無効にする。)は、下位レベルの排他キャッシュコントローラへ送られる。
これはエイリアシングおよび、オーダリング要求のような様々なチェックが行なわれる前に、下位レベルの排他キャッシュコントローラへリクエストを送信することを含んでいる。これらのチェックは、完了するまでいくつかのサイクルを要するが、それらが実際に誤っていることは稀である。
したがって、チェックが完了する前に投機的にキャッシュラインを無効にすることは、同時に不要な遅延を回避する一方、一般的に正確な結果を生む。
できる限りより良い効率を提供することに加えて、投機的な無効を行なうためにキャッシュコントローラを形成することに起因し得る利益の一つは、より良いリソースの使用量効率の向上である。
例えば、排他キャッシュコントローラは、各コマンドを別々に実行しなければならない代わりに、単一のコマンドとしてタグ検査および投機的な無効を実行することができる。
実際にチェックに失敗した稀な場合においては、チェックに失敗した問題が変更された後、無効を引き起こす命令またはリクエストは取り消され、遅延され、及び/または、再試行される。
例えば、命令キャッシュからのフィルリクエストが排他的なL2キャッシュの中でヒットする場合、そのリクエストは、L2キャッシュ中のヒットラインが変更済の状態である場合、取り消される。
しかしながら、ヒットラインが投機的に無効にされた場合、チェックが完了する時に無効をリバースすることは不可能なことがあり得る。
この状況を回避するために、投機的な無効を実行するように形成されるキャッシュコントローラは、また、その後そのチェックに失敗した場合に、投機的に無効にされたラインを元に戻すことを可能にする回復方法を提供するように形成される。
一つの実施例では、キャッシュコントローラは、チェックの完了後まで投機的に無効にされたラインが変更されるのを防ぐことによって、そのような回復メカニズムを提供する。
このように、投機的にラインを無効にすることは、キャッシュコントローラが、投機的に無効にされたラインを変更しない他のオペレーションに移すことを可能にする。
例えば、いくつかの実施例では、キャッシュコントローラに、ラインが投機的に無効にされる時間と、チェックが完了する時間との間に、いくつかのリクエストが与えられる。
これらの連続的な命令またはリクエスト、そして投機的な無効の間のコンフリクトを防ぐために(投機的な無効が後にリバースされる場合に備えて)、キャッシュコントローラは潜在的なコンフリクトをもたらすどんなリクエストも受け入れないように形成することができる。
キャッシュコントローラは、それらのリクエストが実際にそのラインを変更しなくても、投機的に無効にされたラインに関係するリクエストを遮るように形成することもできる。
例えば、投機的な無効が結局リバースされる場合(例えば、チェックのうちの一つがエラーを示すため)、チェック完了後まで、これらの変更を行わないリクエストを受け入れないことにより、あたかもそのラインが無効であるかのように、リクエストが誤って処理されるのを防ぐ。
したがって、一つの実施例では、キャッシュコントローラは、投機的に無効にされたラインのタグの一部と一致するタグがあるどんなリクエストあるいは命令も受け入れないように形成される。
わずかにより詳細な実施例では、キャッシュコントローラは、与えられたリクエストまたは命令のタイプによって、及び/または命令の潜在的な影響に基づいてリクエストを受け入れないように形成される。
例えば、キャッシュコントローラは、投機的に無効にされたラインのタグと一致するフィルリクエスト、プローブあるいは状態変更を遮る(screen out)ように形成される。
さらに、キャッシュコントローラは、タグ一致およびそのラインの置換状態の両方に基づいて、投機的に無効にされたラインを置換するコピーバックまたはフィルを受理しないように形成される。
例えば、コピーバックが投機的に無効にされたラインのタグと一致し、そのラインがセット中の最低使用頻度ラインである場合、LRU置換が使用されているとすると、通常、そのラインは、コピーバックと置換される。
あるいはまた、キャッシュコントローラは、コピーバックを受理するが、(現在の置換状態を無視して)投機的に無効にされたラインの代わりに別のラインを置換するように形成される。
投機的に無効にされたラインの置換状態が、コピーバックまたはフィルが、投機的に無効にされたライン(例えば、LRU置換手法が使用されており、投機的に無効にされたラインがLRUラインではない。)に上書きしないであろうことを示す場合、キャッシュコントローラは、リクエストを受け入れるように形成される。
一つの実施例では、図3で示すように、キャッシュコントローラは、アドレスコンフリクト検出ハードウェア500を含む。
アドレスコンフリクト検出ハードウェアは、投機的に無効にされているラインに帰着するリクエストと、ラインが無効にされる時間と、投機的な無効用のチェックが完了する時間の間で受信された後続するリクエストまたは命令との間の、相互作用を検出するように形成され得る。
アドレスコンフリクト検出ハードウェア500は、投機的に無効にされたラインに対応するアドレスの全てまたは一部を格納するように形成されたアドレスレジスタ504を含む。例えば、アドレスレジスタ504は、投機的に無効にされたラインのタグを格納する。
投機的に複数のラインを無効にする能力を提供するために、これらのレジスタ504のいくつかは記憶装置502で提供される。
コンパレータ501は、係属中のリクエストのアドレスを、アドレスレジスタ504および/または記憶装置502の中のアドレスと比較する。
アドレスが一致しない場合、コンパレータ501は、イネーブル信号をアサートする。
キャッシュコントローラは、イネーブル信号の状態に基づいて、係属中のリクエストの受け入れを許可し、または許可しない。
例えば、係属中のリクエストのアドレスが投機的に無効にされたラインに対応するアドレス(またはアドレスの一部)と一致する場合、コンパレータ501は、イネーブル信号をディアサート(deassert)し、その結果キャッシュコントローラに係属中のリクエストを受け入れさせないようにする。
投機的な無効コントローラ506は、いくつかの実施例においてアドレスコンフリクト検出ハードウェア500を制御する。
投機的な無効コントローラ506は、投機的に無効にされたラインのアドレスの一部またはタグの一部を記憶装置502のレジスタ504のうちの一つにロードするように形成される。
投機的な無効コントローラ506は、あるチェックにかかる最大サイクル数の間、投機的に無効にされたラインが変更されるのを防ぐように形成される。
例えば、投機的な無効コントローラ506は、エイリアスチェックが完了するのに必要なサイクル数の間、投機的に無効にされたラインが変更されるのを防ぐように形成される。
別の実施例では、投機的な無効コントローラ506は、例外チェックが完了するのに必要なサイクル数の間、投機的に無効にされたラインが変更されるのを防ぐ。
一つの実施例では、投機的な無効コントローラ506は、レジスタ504に投機的に無効にされたラインのタグの一部またはアドレスの一部をロードし、そのレジスタの値をコンパレータ501によって入ってくるリクエストと比較することにより、あるサイクル数の間、投機的に無効にされたラインが変更されるのを防ぐ。
指定されたサイクル数の後、投機的な無効コントローラ506は、レジスタ504をクリアするか、または、これ以上レジスタ504の値を入って来るリクエストと比較しないようにコンパレーター501に命じる。
投機的な無効コントローラも、変更されるのを防ぐべき投機的に無効にされたラインがない場合、イネーブル信号をアサートすることにより、コンパレータ501をバイパスするように形成される。
一つの実施例では、チェックが完了するまで、アドレスコンフリクト検出ハードウェア500は、それらが投機的に無効にされたラインに関係しない限り、キャッシュコントローラが追加のフィルリクエストを受理することを可能にする。
同様に、それらが投機的に無効にされたラインを含んでいない限り、追加のプルーブまたは状態変更リクエストが受け入れられる。また、置換を行うために投機的に無効にされたラインを選ばない限り、L1からL2へのコピーバックが受け入れられる。
したがって、追加の比較によりあるタイプの命令を検出し、それらの命令だけが、記憶装置502のアドレスレジスタ504の値と比較される。
L1からL2へのコピーバックが投機的に無効にされたラインを選択するかどうか検出するために、アドレスコンフリクト検出ハードウェアは、置換のためにどのラインが選択されるかを検出するための追加ロジックを含む。
例えば、LRU置換を使用するNウェイ・セットアソシアティブキャッシュでは、コピーバックは、通常はセット中の最低使用頻度ラインを置換する。
しかしながら、適切なセット中の最低使用頻度ラインが投機的に無効にされたラインである場合、コピーバックは受理されない。
あるいはまた、コピーバックを受理しない代わりにそのコピーバックは受理されるが、投機的に無効にされたラインを置換する代わりに、コピーバックは、投機的に無効にされたラインのLRU状態を無視して、セット中の別のラインを置換する。
したがって、アドレスコンフリクト検出ハードウェア500は、投機的に無効にされたラインが、ラインまたはラインを含んでいるセットの置換状態(例えば、LRU状態、FIFO等)に依存するコピーバックによって置換されるどうかを決定するロジックを含む。
コピーバックが投機的に無効にされたラインを置換する場合、アドレスコンフリクト検出ハードウェア500は、イネーブル信号をディアサートするか、または別のラインを置換するコピーバックを行う。
図2に戻り、以上のように、チェックが完了するのにかかるサイクルを待つ代わりに、第1リクエストまたは命令に関連するチェックがまだ完了していない場合、キャッシュコントローラ419が、第1リクエストまたは命令に応じて投機的にラインを無効にするように形成される。
キャッシュコントローラは、そのラインが無効であるとマークする(例えば、有効ビットを有効から無効にトグルする)ことによって、投機的にラインを無効にする。
好ましい実施例では、キャッシュコントローラは、いずれかのチェックに失敗した場合にラインが容易に無効にされないように、ラインに格納されたデータに影響を与えることなく、ラインが無効であることを示すことができる。
キャッシュコントローラ419はまた、投機的に無効にされた変更されるのを防ぐために、アドレスコンフリクト検出ハードウェア500のような保護メカニズムを含んでいてもよい。
従って、キャッシュコントローラ419は、投機的にラインを無効にすると共に、保護メカニズムを作動させる。
例えば、図3で示す保護メカニズムが作動させることで、投機的に無効にされたラインに対応するアドレスのすべてあるいは一部は、アドレスレジスタ504にロードされる。
無効に対応するチェックにおいて失敗した場合、キャッシュコントローラ419は、ラインがもう一度有効である(例えば、有効ビットを無効から有効にトグルする。)ことを示すことにより、投機的な無効をリバースする。キャッシュコントローラ419はまた、チェックが完了した後、保護メカニズムをシャットオフするように形成される。
既に記載したように、多くの実施例では、キャッシュコントローラ419は、ある種の置換手法を使用して、キャッシュ中のラインを置換する。
例えば、キャッシュコントローラはLRUまたはFIFOの置換手法を使用する。そのような手法を実行するために、キャッシュコントローラは、各ラインまたはライン群のために置換状態情報を保存できる。
LRU置換手法を実行する実施例では、この置換状態は、キャッシュの各ライン、またはキャッシュの一部(例えば、セットアソシエイティブキャッシュのセット)の相対的な使用量の状態を示してもよい。
あるいはまた、FIFO置換手法を実行する実施例では、置換状態は、各ラインが、どれくらいの時間、キャッシュまたはそのキャッシュの一部の他のラインと関連のあるキャッシュの一部(例えば、セット)にあったかを示してもよい。
ラインが投機的に無効にされる場合、投機的な無効があたかも投機的でない無効のように、キャッシュまたはキャッシュの一部に対応する置換状態が更新される。
しかしながら、投機的な無効がその後取り消される場合、更新された置換状態情報は、ラインのための適切な置換状態を反映しない可能性がある。
これを補償するために、キャッシュコントローラ419は、無効を反映するために置換状態を更新する前に、投機的にラインを無効にする際に先在する置換状態を保存するように形成される。
投機的な無効がその後リバースされる場合、キャッシュコントローラ419は、保存された置換状態を元に戻すように形成される。
このように、いくつかの実施例では、キャッシュコントローラ419は、投機的な無効を行なう場合に置換状態を変更し保存するように形成される。
図4Aおよび図4Bは、排他キャッシュ中の投機的な無効を行なう方法の実施例の一つを示す。
機能ブロックは、記載された実施例において、ある規則で配列されているが、この配置は単なる例であり、この方法が特定の時間的な順序を要求することを意味しないので、他の実施例が機能ブロックの異なる配置を使用する可能性がある。
フィルリクエストは排他キャッシュコントローラによって受け付けられる(ステップ601)。いくつかの実施例では、排他キャッシュは、L2キャッシュであり、排他キャッシュコントローラは、実際にL1キャッシュとL2キャッシュの両方を制御する。
排他キャッシュがリクエストを受け付ける前または受け付けた後のある時点では、チェックは、リクエストしているキャッシュのミス、および/または、リクエストに起因する排他キャッシュ中のヒットによって開始される(ステップ603)。
ステップ601で受け付けられたフィルリクエストが、排他キャッシュでヒットした場合、ステップ605に示すように、排他キャッシュは、リクエストしているキャッシュにデータのリクエストされたラインを供給する。
便宜上、リクエストされたラインは「LineN」として示す。
排他性を維持するために、ステップ607で示されるように、排他キャッシュコントローラは、LineNを無効にすることができる。
しかしながら、ステップ603で開始されたチェックが完了する前にこの無効が生じる可能性があるため、キャッシュコントローラは、無効を投機的に行なう。
チェックに失敗した場合にその無効をリバースするために、ステップ607で、キャッシュコントローラはまた、無効がその置換状態情報に影響する場合にLineNに対応する以前の置換状態情報(例えば、LRU情報またはFIFO情報のような、セットまたはキャッシュ中のどのラインが最初に置換されるかを決定する情報)を保存し、無効を反映するために置換状態情報を更新する。
投機的な無効のための追加要素は、LineNを保護する保護メカニズムを作動させる排他キャッシュコントローラを含んでいてもよい。
したがって、他のリクエストを受け付けるために排他キャッシュコントローラを解放すべくLineNが無効にされている一方、排他キャッシュコントローラは、チェックの完了後までLineNに潜在的に影響するか依存するリクエストを受け入れることを遅延または拒絶することがある。
このように、ステップ611で、新規なリクエストが排他キャッシュに提示され、そのリクエストがLineNに潜在的に影響するか依存する場合、ステップ613で示されるように、キャッシュコントローラはリクエストを受け付けない。例えば、キャッシュコントローラは、LineNを上書きするリクエストを受け付けない。
しかしながら、そのリクエストがLineNに関係がない場合、排他キャッシュはリクエストを受け付けて、ステップ617に示すように、それに従って処理することができる。
いくつかの実施例では、排他キャッシュコントローラは、リクエストのタグがLineNのタグと一致するかどうかチェックすることにより、リクエストが潜在的にLineNに影響するかどうか決めることができる。
一つの実施例では、コピーバックリクエストが提示される場合、排他キャッシュコントローラは、LineNが、現在の置換状態において、コピーバックによって置換されるかどうか決定するロジックをさらに含んでいてもよい。
LineNが置換され得る場合、排他キャッシュコントローラは、コピーバックを受け付けない、あるいはコピーバックを受け付けるが、LineNの代わりに別のラインを置換することを強制する。
ステップ603で開始されたチェックが失敗した場合、排他キャッシュコントローラは、ステップ623で無効をリバースするために、回復メカニズムを使用することができる。
例えば、排他キャッシュコントローラは再びラインを有効であるとマークし(例えば、有効ビットを無効から有効にトグルすることによって)、LineNに対応する前の無効置換状態情報を回復することができる。
代わりに、ステップ603で開始されたチェックをパスした場合、排他キャッシュコントローラは、投機的に無効にされたLineNに潜在的に影響し得るリクエストの遮断を中止する。
一旦チェックをパスすれば、その無効は投機的でない無効として扱うことができ、したがって、置換状態情報がステップ607で保存される場合、一旦チェックが完了すれば、保存された情報はもはや維持されない。
いくつかの実施例では、キャッシュコントローラがステップ601で受け付けられたリクエストを完了する前に、ステップ603で開始されたチェックのうちのいくつかは完了し、これらのチェックのうちのどれかが失敗した場合、ラインが投機的に無効にされる前に、そのリクエストを取り消すことができる。
この状況で、キャッシュコントローラは、ステップ607で示された投機的な無効の実行とは反対に、投機的にラインを無効にしてはならない。
ステップ601で受け付けられたフィルリクエストが、排他キャッシュでミスする場合、ステップ609で示されるように、リクエストしているキャッシュは、まだそのように実行されていなければ、より低いレベルのキャッシュまたはシステムメモリにフィルリクエストを送ることができる。
多くの実施例では、リクエストしているキャッシュは、フィルリクエストが排他キャッシュでミスする際にシステムメモリのレイテンシを最小限にするために、フィルリクエストを排他キャッシュに送るのと同時に、システムメモリにも送る。
フィルリクエストを送った後に、排他キャッシュは、他のリクエストを受信し、それらに応答することができる。
図5では、キャッシュが排他的、統合的、または排他的でも統合的でもないかどうかにかかわらず、キャッシュで投機的な無効を行なう方法の実施例が提供される。
ステップ701で、キャッシュコントローラは、命令またはリクエストを受け付ける。
例えば、受け付けた命令は、フィルリクエスト、コピーバック、プルーブ、状態変更または無効であり得る。
このリクエストを充足するには、結局受け付けられるキャッシュのラインが無効にされることが要求される。
しかしながら、ある種のチェックは、ステップ703で示されるように、命令、リクエスト(例えば、より高いレベルのキャッシュのミス)、または無効に通じるイベント(例えば、排他キャッシュのヒット)の存在下で実行され、これらのチェックに失敗した場合、そのリクエストおよび/または無効は、取り消される。
これらのチェックは、完了するまでにいくつかのサイクルを必要とするので、チェックが完了するまで、キャッシュコントローラが新規なリクエストの受け付けを継続するように、キャッシュコントローラは、投機的にラインを無効にする。
したがって、ステップ707で、キャッシュコントローラは、ラインの有効ビットをトグルすることによってそのラインを投機的に無効にし、その無効が、無効にされたラインに対応する置換状態情報に影響する場合、前の置換状態情報を保存し、かつ、無効を反映するために置換状態情報を更新する。
キャッシュコントローラは、ステップ703で開始されたチェックが完了するまで、投機的に無効にされたラインに影響または依存し得るリクエストを受け付けないことによって、投機的に無効にされたラインが変更されるのを防ぐことができる。
したがって、潜在的に無効にされたラインに関係がある新規なリクエストが示され、チェックが完了していない場合、キャッシュコントローラは、ステップ719に示すように、リクエストを受け付けない。
キャッシュコントローラは、投機的に無効にされたラインへ潜在的に関係がないリクエストを、ステップ717で受け付けることができる。
チェックをパスする場合、無効はもはや投機的ではないので、キャッシュコントローラは、投機的に無効にされたラインが変更されるのを防ぐことを中止する。
しかしながら、チェックに失敗した場合、キャッシュコントローラは、ステップ723で示されるように、それが有効であることを示すために無効にされたラインの有効ビットをトグルし、置換状態情報が保存されている場合には保存された置換状態情報を元に戻すことによって、無効をリバースすることができる。
いくつかの実施例では、キャッシュコントローラが、ステップ701で受け付けられたリクエストを完了する前にいずれかのチェックに失敗すると、ラインを投機的に無効にする前に、そのリクエストを取り消すことができる。
この状況で、キャッシュコントローラは、ステップ707で示された投機的な無効とは反対に、投機的にラインを無効にしてはならない。
<コンピュータシステム>
図6は、バスブリッジ202によって様々なシステムコンポーネントにつながれたプロセッサ10を含むコンピュータシステム200の一実施例を示すブロック図である。
コンピュータシステムの他の実施例は存在し、また想起し得る。
記載されたシステムでは、メインメモリ204は、メモリバス206によって、バスブリッジ202に接続される。また、グラフィックコントローラ208は、AGPバス210によって、バスブリッジ202に接続される。PCIデバイス212Aないし212Bは、PCIバス214によって、バスブリッジ202に接続される。第2バスブリッジ216はまた、EISA/ISAバス220によって、一つ以上のEISAあるいはISAデバイス218に電気的なインタフェースを提供するために採用される。
この例において、プロセッサ10は、CPUバス224によって、バスブリッジ202に接続され、またオプションのL2キャッシュ228に接続される。
いくつかの実施例では、プロセッサ10は、図示しない統合L1キャッシュを含んでいてもよい。
バスブリッジ202は、プロセッサ10、メインメモリ204、グラフィックコントローラ208、およびPCIバス214に付けられたデバイス間の、インタフェースを提供する。
オペレーションが、バスブリッジ202に接続されたデバイスの一つから受信される場合、バスブリッジ202は、オペレーションのターゲットを識別する。
(例えば、特定のデバイスまたはPCIバス214の場合は、そのターゲットは、PCIバス214上にある。)
バスブリッジ202は、目標のデバイスへオペレーションを送る。
バスブリッジ202は、一般的に、オペレーションを、ソースデバイスまたはバスで使用されるプロトコルからターゲットデバイスまたはバスで使用されるプロトコルに翻訳する。
PCIバス214にISA/EISAバスへのインタフェースを提供するのに加えて、第2バスブリッジ216に、追加の機能を組込むことができる。
第2バスブリッジ216から外部の、または第2バスブリッジ216に統合された、図示しないI/Oコントローラはまた、キーボードとマウス222、および様々なシリアルとパラレルのポートの動作をサポートするために、コンピュータシステム200内に含まれていてもよい。
図示しない外部キャッシュユニットはまた、他の実施例においてプロセッサ10とバスブリッジ202の間のCPUバス224に接続されていてもよい。
あるいはまた、外部キャッシュは、バスブリッジ202に接続されていてもよいし、外部キャッシュのためのキャッシュ制御ロジックは、バスブリッジ202に統合されていてもよい。
L2キャッシュ228は、プロセッサ10のバックサイド仕様として示される。
L2キャッシュ228は、プロセッサ10と分離していてもよいし、カートリッジ中でプロセッサ10と統合されていてもよいし(例えば、スロット1またはスロットA)、または、半導体基板上でプロセッサ10と統合されていてもよい。
メインメモリ204は、アプリケーションプログラムが格納されるメモリであって、それからプロセッサ10が主として実行するメモリである。好ましいメインメモリ204は、DRAM(Dynamic Random Access Memory)を含む。
例えば、複数のバンクを有するSDRAM(Synchronous DRAM)またはRambus DRAM(RDRAM)が適切である。
212Aないし212BのPCIデバイスは、ネットワークインターフェースカード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピーディスクドライブ、ドライブコントローラ、SCSI(Small Computer Systems Interface)アダプタ、および電話カードのような、様々な周辺機器を例示したものである。
同様に、ISAデバイス218は、モデム、サウンドカード、そして、GPIB、またはフィールドバスのインターフェースカードのような様々なデータ取得カードのような様々なタイプの周辺機器を例示したものである。
グラフィックコントローラ208は、ディスプレイ226上のテキストおよびイメージのレンダリングを制御するために提供される。
グラフィックコントローラ208は、メインメモリ204へ、およびそのメインメモリ204から効果的にシフトできる三次元のデータ構造をレンダリングするための当該技術分野において一般的なグラフィックアクセラレータを含む。
したがって、グラフィックコントローラ208は、それがバスブリッジ202内のターゲットインタフェースへのアクセスをリクエストし、受け取ることができ、そのためメインメモリ204にアクセスできるという点でAGPバス210のマスターであり得る。
専用のグラフィックスバスは、メインメモリ204からのデータの迅速なリトリーブを提供する。
あるオペレーションについては、グラフィックコントローラ208は、AGPバス210上でPCIプロトコルトランザクションを生成するようにさらに形成され得る。
バスブリッジ202のAGPインタフェースはこのように、PCIプロトコルターゲットおよびイニシエータトランザクションと同様に、AGPプロトコルトランザクションをもサポートする機能を含んでいてもよい。
ディスプレイ226は、イメージまたはテキストを表示できるすべての電子ディスプレイである。適切なディスプレイ226は、陰極線管(CRT)、液晶ディスプレイ(LCD)等を含む。
上述の記載では、例としてAGP、PCIおよびISAまたはEISAバスが使用されているが、所望のどのようなバス構造にでも置換可能である。
さらに、コンピュータシステム200が追加のプロセッサ(例えば、コンピュータシステム200のオプションのコンポーネントとして示されたプロセッサ10a)を含む多重プロセッシングコンピュータシステムであってもよい。プロセッサ10aは、プロセッサ10と同種のものでもよい。
より詳細には、プロセッサ10aは、プロセッサ10と完全同一のコピーであってもよい。
プロセッサ10aは、図6に示すように、独立したバスによってバスブリッジ202に接続されていてもよいし、あるいは、CPUバス224をプロセッサ10と共有していてもよい。
さらに、プロセッサ10aは、L2キャッシュ228と類似するオプションのL2キャッシュ228aに接続されていてもよい。
<マルチノード処理システム>
図7は、コンピュータシステム300の他の実施例を示す。
コンピュータシステムの他の実施例は存在し、また想起し得る。
図7の具体例では、コンピュータシステム300は、いくつかの処理ノード312A,312B,312C,312Dを含む。
各処理ノードは、それぞれ処理ノード312Aないし312Dに含まれた、メモリーコントローラ316Aないし316Dによって、それぞれメモリ314Aないし314Dに接続される。
さらに、処理ノード312Aないし312Dは、処理ノード312Aないし312D間の通信に使用されるインタフェースロジックを含む。
例えば、処理ノード312Aは、処理ノード312Bと通信するためのインタフェースロジック318A、処理ノード312Cと通信するためのインタフェースロジック318B、および図示しないさらに他の処理ノードと通信するための第三のインタフェースロジック318Cを含む。
同様に、処理ノード312Bは、インタフェースロジック318D、318Eおよび318Fを含む。処理ノード312Cは、インタフェースロジック318G、318H、および318Iを含む。そして処理ノード312Dは、インタフェースロジック318J、318Kおよび318Lを含む。
処理ノード312Dは、インタフェースロジック318Lによって多くのI/Oデバイス(例えば、デイジーチェーン構成中のデバイス320Aないし320B)と通信するように接続される。
他の処理ノードは、同様の方法で、他のI/Oデバイスと通信できる。
処理ノード312Aないし312Dは、処理間ノード通信のためのパケットベースのリンクを実現する。
本実施例では、リンクは一方向のラインのセットとして実現される(例えば、ライン324Aは、処理ノード312Aから処理ノード312Bにパケットを送信するために使用され、ライン324Bは、処理ノード312Bから処理ノード312Aにパケットを送信するために使用される)。
ライン324Cないし324Hの他のセットは、図7に示すような他の処理ノード間のパケットを送信するために使用される。
一般に、ライン324の各セットは、一つ以上のデータライン、データラインに対応する一つ以上のクロックライン、および伝達されているパケットのタイプを示す一つ以上の制御ラインを含む。
リンクは、処理ノード間の通信のキャッシュコヒーレント方式において、または処理ノードとI/Oデバイス(またはPCIバスかISAバスのような、従来の構造のI/Oバスへのバスブリッジ)の間の通信の非コヒーレント方式において動作する。
さらにリンクは、示されるようなI/Oデバイス間のデイジーチェーン構造を使用して、非コヒーレント方式で動作してもよい。
ある処理ノードから別のノードに送信されるパケットが、一つ以上の中間ノードを介して通過してもよい。
例えば、処理ノード312Aから処理ノード312Dに送信されたパケットは、図7に示すように、処理ノード312Bまたは処理ノード312Cのいずれかを通過することができる。他のどのような適切なルーティングのアルゴリズムも使用することができる。
コンピュータシステム300の他の実施例は、図7で示す実施例において、より多くの、またはより少数の処理ノードを含んでいてもよい。
パケットは一般的に、ノード間のライン324上の一以上のビットタイミングとして送信される。ビットタイミングは、対応するクロックライン上のクロック信号の立ち上がりエッジまたは立ち下がりエッジである。
パケットは、トランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシを維持するためのプルーブパケット、およびプルーブとコマンドに応答する応答パケット、を含んでいてもよい。
処理ノード312Aないし312Dは、メモリーコントローラとインタフェースロジックに加えて、一つ以上のプロセッサを含んでいてもよい。
広義には、処理ノードは少なくとも1つのプロセッサを含んでおり、必要に応じてメモリおよび他のロジックと通信するためのメモリコントローラを含んでいてもよい。
より詳しくは、各処理ノード312Aないし312Dは、プロセッサ10の一つ以上のコピーを含んでいてもよい。
外部インタフェースユニット18は、メモリコントローラ316とともに、ノード内にインタフェースロジック318を含んでいてもよい。
メモリ314Aないし314Dは、適切などのようなメモリデバイスを含んでいてもよい。例えば、メモリ314Aないし314Dは、一つ以上のラムバスDRAM(RDRAM)、シンクロナスDRAM(SDRAM)、スタティックRAM等を含んでいてもよい。
コンピュータシステム300のアドレス空間は、メモリ314Aないし314D間で分割される。
各処理ノード312Aないし312Dは、どのアドレスがメモリ314Aないし314Dのどのメモリにマッピングされるか、つまり、特別のアドレス用のメモリーリクエストがどの処理ノード312Aないし312Dに送られるべきか、を決定するために使用されるメモリーマップを含んでいる。
一つの実施例では、コンピュータシステム300内のアドレスのコヒーレントポイントは、そのアドレスに対応するバイトを格納するメモリに接続されたメモリコントローラ316Aないし316Dである。
言いかえれば、メモリコントローラ316Aないし316Dは、対応するメモリ314Aないし314Dへの各メモリアクセスが、キャッシュコヒーレントな方法で起こることを保証する。
メモリコントローラ316Aないし316Dは、メモリ314Aないし314Dに接続するための制御回路を含んでいてもよい。
さらに、メモリコントローラ316Aないし316Dは、メモリリクエストをキューするためのリクエストキューを含んでいてもよい。
一般に、インタフェースロジック318Aないし318Lは、リンクからパケットを受け取るために、およびリンクで送信されるパケットをバッファするために、様々なバッファを含む。
コンピュータシステム300は、パケットを送信するのに適切などのようなフロー制御メカニズムも使用することができる。
例えば、一つの実施例では、各インタフェースロジック318は、そのインタフェースロジックが接続されるリンクの他端におけるレシーバ内の各タイプのバッファの数(カウント)を格納する。
受信インタフェースロジックが、パケットを格納するためのフリーバッファを有しないとすれば、インタフェースロジックはパケットを送信しない。
パケットを前方に送ることによって受信バッファが解放されるとともに、受信インタフェースロジックは、バッファが解放されたことを示すため、送信インタフェースロジックにメッセージを送信する。
このようなメカニズムは、「クーポンベースの」システムとして呼ばれる。
I/Oデバイス320Aおよび320Bは、適切なI/Oデバイスであればどのようなものであってもよい。
例えば、I/Oデバイス320Aおよび320Bは、そのデバイスが接続され得る他のコンピュータシステムと通信するためのデバイス(例えば、ネットワークインターフェースカードまたはモデム)を含んでいてもよい。
さらに、I/Oデバイス320Aおよび320Bは、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピーディスクドライブ、ドライブコントローラ、SCSI(スカジー)アダプタ、電話カード、サウンドカード、GPIBまたはフィールドバス・インターフェースカードのような様々なデータ取得カードを含んでいてもよい。
ここでは、「I/Oデバイス」という用語は、「周辺機器」という用語と同じ意味である。
以上の開示が完全に認識されれば、多数の変形例や変更例は当業者に明白になる。このような変形例および変更例をすべて包含するように、請求項は解釈される。
この発明は、キャッシュに、産業上利用することができる。
本発明の一実施例の、統合キャッシュの関係を示すベン図。 本発明の一実施例の、排他キャッシュの関係を示すベン図。 本発明のキャッシュサブシステムの一実施例のブロック図。 図2で示されるようなキャッシュサブシステムと共に使用されるアドレスコンフリクトを検出するハードウェアの一実施例を示す図。 本発明の一実施例による排他的なキャッシュでどのように無効が実行されるかを示すフローチャート。 図4Aのフローチャートの続きを示す図。 キャッシュが統合的であるか排他的であるか、またはそれ以外であるかどうかにかかわらず、投機的にキャッシュ中のラインを無効にする方法の一実施例を示す図。 本発明のコンピュータシステムの一実施例を示すブロック図。 本発明のマルチノード処理システムの一実施例を示す図。

Claims (44)

  1. プロセッサと、
    システムメモリと、
    前記プロセッサと接続されており、複数のキャッシュライン記憶領域を有するキャッシュと、
    第1リクエストを受け取るために接続されており、前記第1リクエストに応じて、第1キャッシュライン記憶領域の第1キャッシュラインを投機的に無効にするように構成されると共に、前記第1キャッシュラインを投機的に無効にすることに応じて、前記第1キャッシュラインの無効が投機的でなくなるまで、前記第1キャッシュラインが変更されるのを防ぐように構成される、キャッシュコントローラと、
    前記第1リクエストに対応する少なくとも一つのチェックを実行するように構成されるエラー検出ユニットとを含み、
    前記チェックが実行され、エラーを検出しない場合、前記第1キャッシュラインの無効は投機的でなくなる、
    コンピュータシステム。
  2. 前記キャッシュコントローラは、前記第1キャッシュラインに関連する有効ビットをトグルすることによって、前記第1キャッシュラインを投機的に無効にするように構成される、請求項1記載のコンピュータシステム。
  3. 前記キャッシュコントローラは、前記チェックが実行され、エラーを検出する場合、前記第1キャッシュラインに関連する前記有効ビットをトグルすることによって、前記投機的な実行をリバースするようにさらに構成される、請求項2記載のコンピュータシステム。
  4. 前記キャッシュコントローラはさらに、前記第1キャッシュラインの無効が非投機的になるまでは、前記第1キャッシュライン中のデータの状態またはデータに依存するリクエストを受け付けないように構成されている、請求項1記載のコンピュータシステム。
  5. 前記キャッシュコントローラは、前記第1キャッシュラインの無効が非投機的になるまで、追加の各リクエストのタイプ、および追加の各リクエストが前記投機的に無効にされた第1キャッシュラインに依存するか、またはそれを変更するかどうかに基づき、追加のリクエストを受け付けないか否かを判断するように構成されている、請求項1記載のコンピュータシステム。
  6. 前記第1キャッシュラインの無効が非投機的になるまで、前記キャッシュコントローラは、
    前記第1キャッシュラインをヒットする上位レベルキャッシュからのフィル・リクエスト、
    前記第1キャッシュラインに対するプローブ・リクエスト、もしくはステートチェンジリクエスト、または
    置換のために前記第1キャッシュラインを選択する上位レベルキャッシュからのコピー・バック
    である追加のリクエストを受け付けないように構成されている、請求項1記載のコンピュータシステム。
  7. 前記キャッシュコントローラは、前記第1キャッシュラインの無効が非投機的になるまでは、前記第1キャッシュラインの第1タグの第1部分に合致する追加のリクエストを受け付けないように構成されている、請求項1記載のコンピュータシステム。
  8. 前記キャッシュコントローラはさらに、前記投機的無効の一部として、前記第1キャッシュラインに関連した投機的無効を行う前の置換状態情報を保存し、前記第1キャッシュラインがすでに無効にされたかのように置換状態情報を更新するように構成されている、請求項1記載のコンピュータシステム。
  9. 前記チェックを実行して、エラーを検出したときに、前記キャッシュコントローラはさらに、前記保存された前記投機的無効を行う前の置換状態情報をリストアするように構成されている、請求項8記載のコンピュータシステム。
  10. 前記キャッシュコントローラはさらに、前記第1キャッシュラインの無効が非投機的になった後に、前記第1キャッシュラインを変更する追加のリクエストを受け付けるように構成されている、請求項1記載のコンピュータシステム。
  11. 前記少なくとも一つのチェックはオーダリングのチェックを含む、請求項1記載のコンピュータシステム。
  12. 前記少なくとも一つのチェックはエイリアスのチェックを含む、請求項1記載のコンピュータシステム。
  13. 前記少なくとも一つのチェックは、アクセスされたキャッシュラインの状態が与えられたときに、前記アクセスされたキャッシュラインへのアクセスが適切かどうかチェックすることを含む、請求項1記載のコンピュータシステム。
  14. 前記キャッシュは互いにデータの重複のない上位レベルキャッシュと排他キャッシュを含み、前記第1リクエストは、上位レベルキャッシュからのフィル・リクエストである、請求項1記載のコンピュータシステム。
  15. キャッシュ中のラインを投機的に無効にする方法であって、
    前記キャッシュ中の前記ラインを無効にするリクエストを受け付けるステップと、
    前記無効が誤っているかどうかを決定するチェックを開始するステップと、
    前記受け付けるステップに応じて、前記ラインを投機的に無効にするステップとを含み
    前記投機的に無効にするステップは、前記ラインが無効であることを示すステップと、前記チェックが完了するまで、前記ラインがその後変更されるのを防ぐ前記ラインを保護するステップとを含み、
    前記受け付けるステップに応答して、前記保護するステップは、前記チェックが完了するまで、前記投機的に無効にされたライン中のデータまたはその状態に依存する追加のリクエストを受け付けないステップをさらに含み、
    前記無効が誤りであることを決定するチェックの一つに応答して、前記ラインが有効であることを示すことによって前記投機的無効をリバースするステップとを含む、方法。
  16. 前記投機的に無効にするステップは、前記ラインに関連する有効ビットをトグルするステップを含む、請求項15記載の方法。
  17. 前記リバースするステップは、前記ラインに関連する有効ビットをトグルするステップを含む、請求項16記載の方法。
  18. 前記保護するステップは、前記投機的に無効にされたラインのタグの第1部分に合致する追加のリクエストを受け付けないステップを含む、請求項15記載の方法。
  19. 前記投機的に無効にするステップは、前記ラインに関連した投機的無効を行う前の置換状態情報を保存するステップと、前記ラインがすでに無効にされたかのように置換状態情報を更新するステップとをさらに含む、請求項15記載の方法。
  20. 前記無効が誤りであることを決定するチェックの一つに応答して、前記保存された前記投機的無効を行う前の置換状態情報をリストアするステップをさらに含む、請求項19記載の方法。
  21. 前記チェックが終了した後に前記保護を停止するステップをさらに含む、請求項15記載の方法。
  22. 互いにデータの重複のない上位レベルキャッシュと排他キャッシュとを含むシステムにおける排他キャッシュ中の第1キャッシュラインを投機的に無効にする方法であって、
    上位レベルキャッシュからのフィル・リクエストを受け付けるステップと、
    前記フィル・リクエストが前記排他キャッシュ中でヒットするかどうかを決定するステップと、
    前記フィル・リクエストが誤って開始されたかどうかを決定するためのチェックを開始するステップと、
    前記排他キャッシュ中で前記フィル・リクエストがヒットすることに応答して、前記第1キャッシュラインを前記排他キャッシュから前記上位レベルキャッシュに供給するステップと、もし前記チェックが未だ完了していないときには、前記排他キャッシュ中の前記第1キャッシュラインを投機的に無効にするステップとを含み
    前記投機的に無効にするステップは、前記第1キャッシュラインが無効であることを示すステップと、前記チェックが完了するまで、前記第1キャッシュラインがその後変更されるのを防ぐ前記第1キャッシュラインを保護するステップとを含み、
    前記フィル・リクエストが誤って開始されたことを決定する前記フィル・リクエストに関連するチェックの一つに応答して、前記第1キャッシュラインの投機的無効をリバースするステップとを含む、方法。
  23. 前記第1キャッシュラインが無効であることを示すステップは、前記第1キャッシュラインに関連する有効ビットをトグルするステップを含む、請求項22記載の方法。
  24. 前記リバースするステップは、前記第1キャッシュラインに関連する有効ビットをトグルするステップを含む、請求項23記載の方法。
  25. 前記投機的に無効にするステップは、前記チェックが完了するまでは、前記第1キャッシュライン中のデータの状態またはデータに依存する追加のリクエストを受け付けないステップをさらに含む、請求項22記載の方法。
  26. 前記保護するステップは、前記投機的に無効にされたラインの第1タグの第1部分に合致する追加のリクエストが受け付けられないようにするステップを含む、請求項22記載の方法。
  27. 前記保護するステップは、上位レベルキャッシュから排他キャッシュへのコピーバックが前記投機的に無効にされたラインを上書きすることを検出するステップと、前記検出するステップに応答して、前記コピーバックが異なったラインを上書きするようにさせるステップとを含む、請求項22記載の方法。
  28. 前記投機的に無効にするステップは、前記ラインに関連した投機的無効を行う前の置換状態情報を保存するステップと、前記ラインがすでに無効にされたかのように置換状態情報を更新するステップとをさらに含む、請求項22記載の方法。
  29. 前記フィル・リクエストが誤って開始されたことを決定するチェックの一つに応答して、前記保存された前記投機的無効を行う前の置換状態情報をリストアするステップをさらに含む、請求項28記載の方法。
  30. 複数のキャッシュライン記憶領域を有するキャッシュと、
    第1リクエストを受け付けるために接続されており、前記第1リクエストの受け付けに応じて、第1キャッシュライン記憶領域中の第1キャッシュラインを投機的に無効にするように形成され、さらに、前記投機的な無効が誤っていることが検出される場合、前記第1キャッシュラインの前記投機的な無効をリバースするように形成され、前記投機的な無効が誤っているかどうかを検出するために複数のサイクルを必要とするキャッシュコントローラと、
    前記キャッシュコントローラが前記第1キャッシュラインを投機的に無効にするのに応じて、前記複数のサイクルの間、前記第1キャッシュラインが変更されるのを防ぐように構成される、投機的無効コントローラとを有し、
    前記投機的な無効は前記複数のサイクルの後に投機的でなくなり、前記投機的無効コントローラはさらに、前記複数のサイクルにおいて、投機的に無効にされた第1キャッシュラインを変更する、またはそれに依存する追加のリクエストの受付を妨げるように構成されている、
    キャッシュサブシステム。
  31. 前記キャッシュコントローラは、前記第1キャッシュラインに関連する有効ビットをトグルすることによって、前記第1キャッシュラインを投機的に無効にするように構成される、請求項30記載のキャッシュサブシステム。
  32. 前記キャッシュコントローラはさらに、前記第1キャッシュラインに関連する前記有効ビットをトグルすることにより、前記投機的な実行をリバースするように構成される、請求項31記載のキャッシュサブシステム。
  33. 前記投機的無効コントローラは、前記キャッシュコントローラが前記第1キャッシュラインを投機的に無効にするのに応答して、前記第1キャッシュラインのタグの第1部分をレジスタにロードするように構成されている、請求項31記載のキャッシュサブシステム。
  34. 前記レジスタに記憶された前記タグの第1部分と前記キャッシュコントローラに送られた追加のリクエスト中の別のタグとを比較するように構成され、それらのタグが一致するとイネーブル信号をディアサートし、前記キャッシュコントローラにイネーブル信号を供給するようにさらに構成され、前記イネーブル信号がディアサートされたとき、受信したリクエストを受け付けないように構成されている比較器をさらに含む、請求項33記載のキャッシュサブシステム。
  35. 前記投機的無効コントローラはさらに、前記投機的無効が非投機的になった後、前記第1キャッシュラインが後から変更されるのを妨げないように構成される、請求項30記載のキャッシュサブシステム。
  36. 前記キャッシュコントローラはさらに、前記投機的無効の一部として、前記第1キャッシュラインに関連した投機的無効を行う前の置換状態情報を保存し、前記第1キャッシュラインがすでに無効にされたかのように置換状態情報を更新するように構成されている、請求項30記載のキャッシュサブシステム。
  37. 前記第1キャッシュラインの投機的無効は誤りであったことの表示の受信に応答して、前記キャッシュコントローラはさらに、前記保存された前記投機的無効を行う前の置換状態情報をリストアするように構成されている、請求項36記載のキャッシュサブシステム。
  38. 前記複数のサイクルは前記第1リクエストを開始したイベントのエイリアスチェックを完了するためのサイクル数を含む、請求項30記載のキャッシュサブシステム。
  39. 前記キャッシュコントローラは、後続のリクエストが前記第1キャッシュラインを上書きすることを検出して、前記第1キャッシュラインを保護し、それに応答して、前記後続のリクエストに異なったキャッシュラインを上書きさせる、請求項30記載のキャッシュサブシステム。
  40. プロセッサと、
    システムメモリと、
    前記プロセッサと接続されており、複数のキャッシュライン記憶領域を有するキャッシュと、
    第1リクエストを受け取るために接続されており、前記第1リクエストに応じて、第1キャッシュライン記憶領域の第1キャッシュラインを投機的に無効にするように構成されると共に、前記第1キャッシュラインを投機的に無効にすることに応じて、前記第1キャッシュラインの無効が投機的でなくなるまで、前記第1キャッシュラインが変更されるのを防ぐように構成される、キャッシュコントローラと、
    前記第1リクエストに対応する少なくとも一つのチェックを実行するように構成され、前記チェックを実行して、エラーを検出しない場合は、前記第1キャッシュラインの無効は非投機的になるエラー検出ユニットとを含み、
    前記キャッシュコントローラは、前記第1キャッシュラインの無効が非投機的になるまでは、前記第1キャッシュライン中のデータの状態またはそのデータに依存するリクエストを受け付けないように構成された、
    コンピュータシステム。
  41. プロセッサと、
    システムメモリと、
    前記プロセッサと接続されており、複数のキャッシュライン記憶領域を有するキャッシュと、
    第1リクエストを受け取るために接続されており、前記第1リクエストに応じて、第1キャッシュライン記憶領域の第1キャッシュラインを投機的に無効にするように構成されると共に、前記第1キャッシュラインを投機的に無効にすることに応じて、前記第1キャッシュラインの無効が投機的でなくなるまで、前記第1キャッシュラインが変更されるのを防ぐように構成される、キャッシュコントローラと、
    前記第1リクエストに対応する少なくとも一つのチェックを実行するように構成され、前記チェックを実行して、エラーを検出しない場合は、前記第1キャッシュラインの無効は非投機的になるエラー検出ユニットとを含み、
    前記キャッシュコントローラは、前記第1キャッシュラインの無効が非投機的になるまで、追加の各リクエストのタイプ、および追加の各リクエストが前記投機的に無効にされた第1キャッシュラインに依存するか、またはそれを変更するかどうかに基づ、追加のリクエストを受け付けないか否かを判断するように構成されている、
    コンピュータシステム。
  42. キャッシュ中のラインを投機的に無効にする方法であって、
    前記キャッシュ中の前記ラインを無効にするリクエストを受け付けるステップと、
    前記無効が誤っているかどうかを決定するチェックを開始するステップと、
    前記受け付けるステップに応じて、前記ラインを投機的に無効にするステップとを含み
    前記投機的に無効にするステップは、前記ラインが無効であることを示すステップと、前記チェックが完了するまで、前記ラインがその後変更されるのを防ぐ前記ラインを保護するステップとを含み、
    前記保護するステップは、前記投機的に無効にされたライン中のタグの第1部分に合致する追加のリクエストを受け付けないステップを含み、
    前記無効が誤りであることを決定するチェックの一つに応答して、前記ラインが有効であることを示すことによって前記投機的無効をリバースするステップとを含む、方法。
  43. 複数のキャッシュライン記憶領域を有するキャッシュと、
    第1リクエストを受け付けるために接続されており、前記第1リクエストの受け付けに応じて、第1キャッシュライン記憶領域中の第1キャッシュラインを投機的に無効にするように形成され、さらに、前記投機的な無効が誤っていることが検出される場合、前記第1キャッシュラインの前記投機的な無効をリバースするように形成され、前記投機的な無効が誤っているかどうかを検出するために複数のサイクルを必要とし、前記複数のサイクルは前記第1リクエストを開始したイベントのエイリアスチェックを完了するためのサイクル数を含むキャッシュコントローラと、
    前記キャッシュコントローラが前記第1キャッシュラインを投機的に無効にするのに応じて、前記複数のサイクルの間、前記第1キャッシュラインが変更されるのを防ぐように構成され、前記投機的な無効は前記複数のサイクルの後に投機的でなくなる投機的無効コントローラとを含む、
    キャッシュサブシステム。
  44. 複数のキャッシュライン記憶領域を有するキャッシュと、
    第1リクエストを受け付けるために接続されており、前記第1リクエストの受け付けに応じて、第1キャッシュライン記憶領域中の第1キャッシュラインを投機的に無効にするように形成され、さらに、前記投機的な無効が誤っていることが検出される場合、前記第1キャッシュラインの前記投機的な無効をリバースするように形成され、前記投機的な無効が誤っているかどうかを検出するために複数のサイクルを必要とし、後続のリクエストが前記第1キャッシュラインを上書きすることを検出して、前記第1キャッシュラインを保護し、それに応答して、前記後続のリクエストに異なったキャッシュラインを上書きさせるキャッシュコントローラと、
    前記キャッシュコントローラが前記第1キャッシュラインを投機的に無効にするのに応じて、前記複数のサイクルの間、前記第1キャッシュラインが変更されるのを防ぐように構成され、前記投機的な無効は前記複数のサイクルの後に投機的でなくなる投機的無効コントローラとを含む、
    キャッシュサブシステム。
JP2002589993A 2001-05-16 2002-03-21 キャッシュ中のラインを投機的に無効にする方法とシステム Expired - Fee Related JP4128878B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/859,290 US6725337B1 (en) 2001-05-16 2001-05-16 Method and system for speculatively invalidating lines in a cache
PCT/US2002/008804 WO2002093385A2 (en) 2001-05-16 2002-03-21 Method and system for speculatively invalidating lines in a cache

Publications (3)

Publication Number Publication Date
JP2004529435A JP2004529435A (ja) 2004-09-24
JP2004529435A5 JP2004529435A5 (ja) 2006-01-05
JP4128878B2 true JP4128878B2 (ja) 2008-07-30

Family

ID=25330505

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002589993A Expired - Fee Related JP4128878B2 (ja) 2001-05-16 2002-03-21 キャッシュ中のラインを投機的に無効にする方法とシステム

Country Status (9)

Country Link
US (1) US6725337B1 (ja)
EP (1) EP1388065B1 (ja)
JP (1) JP4128878B2 (ja)
KR (1) KR100885277B1 (ja)
CN (1) CN1248118C (ja)
AU (1) AU2002248679A1 (ja)
DE (1) DE60222402T2 (ja)
TW (1) TW591384B (ja)
WO (1) WO2002093385A2 (ja)

Families Citing this family (61)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6961827B2 (en) 2001-11-13 2005-11-01 Sun Microsystems, Inc. Victim invalidation
US6842827B2 (en) 2002-01-02 2005-01-11 Intel Corporation Cache coherency arrangement to enhance inbound bandwidth
US20030200386A1 (en) * 2002-04-19 2003-10-23 Seagate Technology Llc Data retention prioritization for a data storage device
US6996678B1 (en) * 2002-07-31 2006-02-07 Cisco Technology, Inc. Method and apparatus for randomized cache entry replacement
US8185602B2 (en) 2002-11-05 2012-05-22 Newisys, Inc. Transaction processing using multiple protocol engines in systems having multiple multi-processor clusters
US7617329B2 (en) * 2002-12-30 2009-11-10 Intel Corporation Programmable protocol to support coherent and non-coherent transactions in a multinode system
US7636837B2 (en) * 2003-05-28 2009-12-22 Fujitsu Limited Apparatus and method for controlling instructions at time of failure of branch prediction
US7225299B1 (en) 2003-07-16 2007-05-29 Transmeta Corporation Supporting speculative modification in a data cache
US7149851B1 (en) 2003-08-21 2006-12-12 Transmeta Corporation Method and system for conservatively managing store capacity available to a processor issuing stores
US20050172076A1 (en) * 2004-01-30 2005-08-04 Gateway Inc. System for managing distributed cache resources on a computing grid
US9727468B2 (en) 2004-09-09 2017-08-08 Intel Corporation Resolving multi-core shared cache access conflicts
US7984248B2 (en) 2004-12-29 2011-07-19 Intel Corporation Transaction based shared data operations in a multiprocessor environment
US20060179231A1 (en) * 2005-02-07 2006-08-10 Advanced Micron Devices, Inc. System having cache memory and method of accessing
US7930484B2 (en) * 2005-02-07 2011-04-19 Advanced Micro Devices, Inc. System for restricted cache access during data transfers and method thereof
US7434007B2 (en) * 2005-03-29 2008-10-07 Arm Limited Management of cache memories in a data processing apparatus
CN100378687C (zh) * 2005-08-25 2008-04-02 北京中星微电子有限公司 一种高速缓存预取模块及其方法
US7577793B2 (en) * 2006-01-19 2009-08-18 International Business Machines Corporation Patrol snooping for higher level cache eviction candidate identification
US7640399B1 (en) 2006-05-10 2009-12-29 Advanced Micro Devices, Inc. Mostly exclusive shared cache management policies
JP4783229B2 (ja) * 2006-07-19 2011-09-28 パナソニック株式会社 キャッシュメモリシステム
US8606998B2 (en) * 2006-08-24 2013-12-10 Advanced Micro Devices, Inc. System and method for instruction-based cache allocation policies
US7702858B2 (en) * 2007-06-05 2010-04-20 Apple Inc. Latency reduction for cache coherent bus-based cache
US8156309B2 (en) * 2007-10-18 2012-04-10 Cisco Technology, Inc. Translation look-aside buffer with variable page sizes
US7996626B2 (en) * 2007-12-13 2011-08-09 Dell Products L.P. Snoop filter optimization
US8464000B2 (en) * 2008-02-29 2013-06-11 Qualcomm Incorporated Systems and methods for cache line replacements
US8489820B1 (en) 2008-03-18 2013-07-16 Netapp, Inc Speculative copying of data from main buffer cache to solid-state secondary cache of a storage server
US8775718B2 (en) * 2008-05-23 2014-07-08 Netapp, Inc. Use of RDMA to access non-volatile solid-state memory in a network storage system
US8239416B2 (en) * 2008-05-30 2012-08-07 Armanta, Inc. System, method, and computer program product for modeling changes to large scale datasets
US20100083247A1 (en) * 2008-09-26 2010-04-01 Netapp, Inc. System And Method Of Providing Multiple Virtual Machines With Shared Access To Non-Volatile Solid-State Memory Using RDMA
US8095831B2 (en) * 2008-11-18 2012-01-10 Freescale Semiconductor, Inc. Programmable error actions for a cache in a data processing system
US8677075B2 (en) 2010-05-18 2014-03-18 Lsi Corporation Memory manager for a network communications processor architecture
US9461930B2 (en) 2009-04-27 2016-10-04 Intel Corporation Modifying data streams without reordering in a multi-thread, multi-flow network processor
US8521961B2 (en) * 2009-08-20 2013-08-27 International Business Machines Corporation Checkpointing in speculative versioning caches
US20110055482A1 (en) * 2009-08-28 2011-03-03 Broadcom Corporation Shared cache reservation
US8713277B2 (en) 2010-06-01 2014-04-29 Apple Inc. Critical word forwarding with adaptive prediction
US8935475B2 (en) * 2012-03-30 2015-01-13 Ati Technologies Ulc Cache management for memory operations
US9311101B2 (en) 2012-06-15 2016-04-12 International Business Machines Corporation Intra-instructional transaction abort handling
US9298631B2 (en) 2012-06-15 2016-03-29 International Business Machines Corporation Managing transactional and non-transactional store observability
US9262320B2 (en) 2012-06-15 2016-02-16 International Business Machines Corporation Tracking transactional execution footprint
US9298469B2 (en) 2012-06-15 2016-03-29 International Business Machines Corporation Management of multiple nested transactions
US9223687B2 (en) * 2012-06-15 2015-12-29 International Business Machines Corporation Determining the logical address of a transaction abort
US9015419B2 (en) 2012-06-15 2015-04-21 International Business Machines Corporation Avoiding aborts due to associativity conflicts in a transactional environment
CN103885890B (zh) * 2012-12-21 2017-04-12 华为技术有限公司 高速缓冲存储器cache中cache块的替换处理方法和装置
US9589606B2 (en) * 2014-01-15 2017-03-07 Samsung Electronics Co., Ltd. Handling maximum activation count limit and target row refresh in DDR4 SDRAM
US9632775B2 (en) 2014-02-11 2017-04-25 Apple Inc. Completion time prediction for vector instructions
US9442734B2 (en) * 2014-02-11 2016-09-13 Apple Inc. Completion time determination for vector instructions
US9672180B1 (en) 2014-08-06 2017-06-06 Sanmina Corporation Cache memory management system and method
US9715428B1 (en) * 2014-09-24 2017-07-25 Sanmina Corporation System and method for cache data recovery
US9760314B2 (en) 2015-05-29 2017-09-12 Netapp, Inc. Methods for sharing NVM SSD across a cluster group and devices thereof
US9952797B2 (en) 2015-07-31 2018-04-24 Netapp, Inc. Systems, methods and devices for addressing data blocks in mass storage filing systems
US10257273B2 (en) 2015-07-31 2019-04-09 Netapp, Inc. Systems, methods and devices for RDMA read/write operations
GB2543745B (en) * 2015-10-15 2018-07-04 Advanced Risc Mach Ltd An apparatus and method for operating a virtually indexed physically tagged cache
US10262721B2 (en) * 2016-03-10 2019-04-16 Micron Technology, Inc. Apparatuses and methods for cache invalidate
TWI611296B (zh) 2017-04-13 2018-01-11 慧榮科技股份有限公司 記憶體控制器與資料儲存裝置
TWI676104B (zh) * 2017-04-13 2019-11-01 慧榮科技股份有限公司 記憶體控制器與資料儲存裝置
US10585734B2 (en) * 2018-01-04 2020-03-10 Qualcomm Incorporated Fast invalidation in peripheral component interconnect (PCI) express (PCIe) address translation services (ATS)
US10528482B2 (en) 2018-06-04 2020-01-07 International Business Machines Corporation Cache management
US11334495B2 (en) * 2019-08-23 2022-05-17 Arm Limited Cache eviction
US11947456B2 (en) * 2021-09-30 2024-04-02 Advanced Micro Devices, Inc. Weak cache line invalidation requests for speculatively executing instructions
US11822479B2 (en) * 2021-10-29 2023-11-21 Advanced Micro Devices, Inc. History-based selective cache line invalidation requests
US11720444B1 (en) * 2021-12-10 2023-08-08 Amazon Technologies, Inc. Increasing of cache reliability lifetime through dynamic invalidation and deactivation of problematic cache lines
CN114726759B (zh) * 2022-02-21 2024-03-22 清华大学 一种本机或远程通信请求延迟异常监控方法和装置

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03154948A (ja) * 1989-11-13 1991-07-02 Toshiba Corp 情報処理装置
US5197144A (en) * 1990-02-26 1993-03-23 Motorola, Inc. Data processor for reloading deferred pushes in a copy-back data cache
DE69219433T2 (de) * 1991-11-04 1997-12-11 Sun Microsystems Inc Virtueller Durchschreibcachespeicher Synonym-Adressierung und Cache-Ungültigkeitserklärungen
JP3013631B2 (ja) * 1992-09-28 2000-02-28 日本電気株式会社 キャッシュメモリ同期方法
JPH06242977A (ja) * 1993-02-16 1994-09-02 Mitsubishi Electric Corp 1チップマイクロプロセッサ
US5717895A (en) 1994-12-01 1998-02-10 Cray Research, Inc. Associative scalar data cache with write-through capabilities for a vector processor
GB9521977D0 (en) * 1995-10-26 1996-01-03 Sgs Thomson Microelectronics Cache memory
JPH09190379A (ja) * 1996-01-10 1997-07-22 Mitsubishi Electric Corp キャッシュシステム
US5835950A (en) * 1996-07-12 1998-11-10 Samsung Electronics Co., Ltd. Self-invalidation method for reducing coherence overheads in a bus-based shared-memory multiprocessor apparatus
JP3083786B2 (ja) * 1996-09-30 2000-09-04 株式会社東芝 メモリ更新履歴保存装置およびメモリ更新履歴保存方法
TW379298B (en) 1996-09-30 2000-01-11 Toshiba Corp Memory updating history saving device and memory updating history saving method
US6175906B1 (en) 1996-12-06 2001-01-16 Advanced Micro Devices, Inc. Mechanism for fast revalidation of virtual tags
US5924118A (en) 1997-04-14 1999-07-13 International Business Machines Corporation Method and system for speculatively sourcing cache memory data prior to upstream cache invalidation within a multiprocessor data-processing system
US6119205A (en) 1997-12-22 2000-09-12 Sun Microsystems, Inc. Speculative cache line write backs to avoid hotspots
JP2001034533A (ja) * 1999-07-21 2001-02-09 Nec Kofu Ltd キャッシュコヒーレンシ制御装置、2次キャッシュメモリ、中央処理装置、マルチプロセッサシステム、プロセッサノード、キャッシュコヒーレンシ制御方法

Also Published As

Publication number Publication date
EP1388065B1 (en) 2007-09-12
DE60222402D1 (de) 2007-10-25
CN1509436A (zh) 2004-06-30
TW591384B (en) 2004-06-11
CN1248118C (zh) 2006-03-29
AU2002248679A1 (en) 2002-11-25
US6725337B1 (en) 2004-04-20
KR100885277B1 (ko) 2009-02-23
EP1388065A2 (en) 2004-02-11
JP2004529435A (ja) 2004-09-24
KR20030097871A (ko) 2003-12-31
WO2002093385A2 (en) 2002-11-21
WO2002093385A3 (en) 2003-10-09
DE60222402T2 (de) 2008-05-29

Similar Documents

Publication Publication Date Title
JP4128878B2 (ja) キャッシュ中のラインを投機的に無効にする方法とシステム
US11803486B2 (en) Write merging on stores with different privilege levels
US8782348B2 (en) Microprocessor cache line evict array
US6366984B1 (en) Write combining buffer that supports snoop request
US7032074B2 (en) Method and mechanism to use a cache to translate from a virtual bus to a physical bus
US6085291A (en) System and method for selectively controlling fetching and prefetching of data to a processor
US5715428A (en) Apparatus for maintaining multilevel cache hierarchy coherency in a multiprocessor computer system
US7383394B2 (en) Microprocessor, apparatus and method for selective prefetch retire
US7237068B2 (en) Computer system employing bundled prefetching and null-data packet transmission
US20110072218A1 (en) Prefetch promotion mechanism to reduce cache pollution
US20140237174A1 (en) Highly Efficient Design of Storage Array Utilizing Multiple Cache Lines for Use in First and Second Cache Spaces and Memory Subsystems
US20090132750A1 (en) Cache memory system
US20070136535A1 (en) System and Method for Reducing Unnecessary Cache Operations
US20060064547A1 (en) Method and apparatus for run-ahead victim selection to reduce undesirable replacement behavior in inclusive caches
JPH0962572A (ja) ストリーム・フィルタ装置及び方法
JP2000250813A (ja) I/oキャッシュ・メモリにおけるデータ管理方法
US7380068B2 (en) System and method for contention-based cache performance optimization
US7165146B2 (en) Multiprocessing computer system employing capacity prefetching
US6976130B2 (en) Cache controller unit architecture and applied method
JP3732397B2 (ja) キャッシュシステム
US7035981B1 (en) Asynchronous input/output cache having reduced latency
GB2401227A (en) Cache line flush instruction and method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20050317

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20051003

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20070508

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20070515

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20070814

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20070821

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20070918

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20070926

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20071015

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20071022

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20071115

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20071211

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20080311

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20080422

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20080515

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110523

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120523

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees