JP3541998B2 - データ・キャッシュ・システム及び方法 - Google Patents

データ・キャッシュ・システム及び方法 Download PDF

Info

Publication number
JP3541998B2
JP3541998B2 JP18580696A JP18580696A JP3541998B2 JP 3541998 B2 JP3541998 B2 JP 3541998B2 JP 18580696 A JP18580696 A JP 18580696A JP 18580696 A JP18580696 A JP 18580696A JP 3541998 B2 JP3541998 B2 JP 3541998B2
Authority
JP
Japan
Prior art keywords
cache
stream
address
line
processor
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
JP18580696A
Other languages
English (en)
Other versions
JPH0962573A (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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH0962573A publication Critical patent/JPH0962573A/ja
Application granted granted Critical
Publication of JP3541998B2 publication Critical patent/JP3541998B2/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/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6022Using a prefetch buffer or dedicated prefetch cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6026Prefetching based on access pattern detection, e.g. stride based prefetch

Description

【0001】
【発明の属する技術分野】
本発明は、概して云えば、データ処理システムに関するものであり、詳しく云えば、データ・キャッシュに関してデータの進行的(progressive)プリフェッチを行うためのシステム及び方法に関するものである。
【0002】
【従来の技術】
現行のプログラム及びデータを高速度でプロセッサ(CPU)にとって使用可能にすることによって、データ処理システムにおける処理の速度を増加させるために、特別の非常に高速度のメモリが使用されることが時々ある。そのような高速度のメモリはキャッシュとして知られており、メイン・メモリのアクセス時間とプロセッサ・ロジックとの間の速度差を補償するために、大型のコンピュータシステムにおいて使用されることが時々ある。処理速度はメイン・メモリの速度によって最も制限される結果、プロセッサ・ロジックは、通常、メイン・メモリのアクセス時間よりも速い。オペレーティング・システムの不一致を補償するために使用されるテクニックはCPUとメイン・メモリとの間に極めて速い小型のメモリを使用することである。そのメモリのアクセス・タイムはプロセッサのロジック伝播遅延に近い。それは、CPUにおいて現在実行されているプログラムのセグメント及び現在の計算において頻繁に使用される一時的データを記憶するために使用される。プログラム(命令)及びデータを高速度で使用可能にすることによって、プロセッサのパフォーマンス・レートを向上させることが可能である。
【0003】
多数の一般的なプログラムの分析の結果、任意の所与のタイム・インターバルにおけるメモリへの参照は、メモリにおける僅かなローカライズされた領域に制限される傾向があるがわかった。この現象は、「参照の局所性」という特性として知られている。この特性の理由は、一般的なコンピュータ・プログラムは、屡々遭遇するプログラム・ループ及びサブルーチン・コールと共に直線的に流れる。プログラム・ループが実行される時、CPUは、そのループを構成するメモリ内の命令のセットを繰り返し参照する。所与のサブルーチンが呼び出される時、それの命令セットがメモリからフェッチされる。従って、ループ及びサブルーチンは命令のフェッチのためのメモリへの参照をローカライズする傾向がある。更に低い程度まで、データに対するメモリ参照もローカライズされる傾向がある。テーブル・ルックアップ手順は、そのテーブルが記憶されているメモリ内の部分を繰り返し参照する。反復的手順が共通のメモリ・ロケーションを参照し、多くの数字がメモリのローカル部分内に制限される。これらすべての観察の結果が参照の局所性であり、短期間にわたって一般的なプログラムによって発生される命令のアドレスはメモリの僅かなローカライズされた領域を繰り返し参照し、一方、メモリの残り部分は滅多にアクセスされない。
【0004】
プログラム及びデータのアクティブナ部分が拘束の小型メモリにおかれる場合、平均的なメモリ・アクセス・タイムは減少し、従って、プログラムの合計実行時間を減少させる。そのような高速の小型メモリは、前述のように、キャッシュ・メモリと呼ばれる。キャッシュ・メモリのアクセス・タイムはメイン・メモリのアクセス・タイムよりも5乃至10倍も小さいことが多い。キャッシュ・メモリはメモリ・ハイアラーキにおける最高速のコンポーネントであり、CPUコンポーネントの速度に近い。
【0005】
キャッシュ機構の基本的な理念は、最も頻繁にアクセスされる命令及びデータを高速度キャッシュ・メモリに保持することによって、平均的なメモリ・アクセス・タイムがキャッシュ・メモリのアクセス・タイムに近づくことである。キャッシュ・メモリはメイン・メモリの数分の1のサイズしかないけれども、メモリ・リクエストの大部分は、プログラムの参照の局所性のために高速度キャッシュ・メモリ内で検出されるであろう。
【0006】
キャッシュ・メモリの基本的オペレーションは次のようである。CPUがメモリにおけるワードをアクセスする必要がある時、キャッシュ・メモリが調べられる。そのワードがキャッシュ・メモリにおいて見つかる場合、それはその高速キャッシュ・メモリから読み取られる。CPUによってアクセスされたワードがキャッシュ・メモリにおいて見つからない場合、そのワードを読み取るためにメイン・メモリがアクセスされる。そこで、そのアクセスされたワードを含むワード・ブロックがメイン・メモリからキャッシュ・メモリに転送される。このように、メイン・メモリへのその後の参照によって必要なワードが高速キャッシュ・メモリにおいて見つかるよう、幾つかのデータがキャッシュ・メモリに転送される。
【0007】
コンピュータ・システムの平均的メモリ・アクセス・タイムはキャッシュ・メモリの使用によってかなり改善可能である。キャッシュ・メモリのパフォーマンスは「ヒット率」と呼ばれる数値によって測定されることが多い。CPuがメモリを参照し、キャッシュにおいてそのワードを見つける時、それは「ヒット」を生じたと云われる。そのワードがキャッシュ・メモリにおいて見つからない場合、それはメイン・メモリ内にあり、「ミス」としてカウントされる。殆ど時間、CPUがメイン・メモリの代わりにキャッシュ・メモリをアクセスするようにヒット率が十分に高い場合、平均的アクセス時間は高速キャッシュ・メモリのアクセス時間に近くなる。例えば、100nsのキャッシュ・アクセス・タイム、1000nsのメイン・メモリアクセス・タイム、及び0.9のヒット率を持ったコンピュータは200nsの平均アクセス・タイムを生じる。これは、キャッシュ・メモリのない同様のコンピュータ(そのアクセス・タイムは1000ns)に比べてかなりの改善である。
【0008】
最近のマイクロプロセッサでは、プロセッサ・サイクル・タイムはテクノロジの発展によって改善し続けている。又、理論的実行、深いパイプライン、多くの実行エレメント等の設計テクニックはマイクロプロセッサのパフォーマンスを改善し続けている。その改善されたパフォーマンスは、マイクロプロセッサに与えるために多くのデータ及び命令を要求するので、メモリ・インターフェースに重い負荷を課する。メモリ待ち時間の現象を援助するために大きなオン・チップ・キャッシュ(L1キャッシュ)が使用される。それらは、大型のオフ・チップ・キャッシュ(L2キャッシュ)によって拡張されることが多い。
【0009】
待ち時間を減少させるのに先立ってメモリ・データをL1キャッシュに供給しようとするプリフェッチ・テクニックが実施されることが多い。理想的には、プロセッサが必要とするメモリ・データのコピーがいつもL1キャッシュ内にあるよう、プログラムはデータ及び命令を十分に前にプリフェッチするであろう。
【0010】
問題は、すべての場合において必要とされるデータ・アドレスを明示的に決定するに十分な先回り情報を、マイクロプロセッサ・アーキテクチャが与えないことである。例えば、メモリにおけるデータ・オペランドに対するアドレス自身はメモリ内にあり、メモリ命令によって使用されるべき第1命令によってフェッチされなければならない。そのようなシーケンスの場合、プリフェッチを行うためには、プロセッサは前もってアドレスを持たない。
【0011】
命令又はデータのプリフェッチはその分野ではよく知られている。しかし、既存のプリフェッチ・テクニックは命令又はデータを早くプリフェッチし過ぎることが多い。プリフェッチしそしてその後そのプリフェッチされた命令又はデータを使用しないという問題は、
(1)プロセッサが必要とするデータをプリフェッチ・データが変位したかもしれないこと、
(2)プリフェッチ・メモリ・アクセスがその後のプロセッサ・キャッシュ再ロードにそのプリフェッチ・アクセスを待たせ、従って、必要なデータの待ち時間を増加させることがあること、
である。これらの影響は両方ともCPUの効率を低下させる。従って、その分野において必要なことは、マイクロプロセッサのパフォーマンスを低下させることなく、キャッシュ・ミスによりL1キャッシュへのデータ及び命令アクセスの待ち時間を減少させる改良されたプリフェッチ・テクニックである。
【0012】
【発明が解決しようとする課題】
本発明の目的は、マイクロプロセッサにおいて、L1及びL2キャッシュと関連してストリーム・フィルタを使用してメモリからプリフェッチされたデータを供給し、マイクロプロセッサ・システムにおけるデータ待ち時間を減少させることにある。
【0013】
本発明のもう1つの目的は、プリフェッチの深さを制御するためにプリフェッチ・データを同時に且つ進行的にインクレメントする多数のストリームをサポートすることができる独特のストリーム・フィルタ装置を使用することにある。
【0014】
【課題を解決するための手段】
本発明は3つの進行的プリフェッチ・モード、即ち、正規モード、データ・プリフェッチ(DP)モード、及びブラスト・モードを利用する。正規モードでは、データはプリフェッチされない。データ・プリフェッチ・モードでは、2つのキャッシュ・ラインがプリフェッチされる。1つのラインはL1キャッシュに対するものであり、もう1つのラインはストリーム・バッファに対するものである。本発明の好適な実施例では、ブラスト・モードにおいて4つのラインがプリフェッチされる。そのうちの2つのラインはデータ・プリフェッチ・モードにおけるものと同じであり、2つの追加のラインはストリーム・バッファに対する対するものである。プリフェッチ・バッファはプロセッサ・チップ、キャッシュ・チップ、外部チップ、又はメモリ・カード上にパッケージ可能であり、本発明の範囲内にあるものである。
【0015】
本発明の別の実施例では、正規モードにおいてはデータはプリフェッチされない。データ・プリフェッチ・モードでは、1つのラインがストリーム・バッファにプリフェッチされる。ブラスト・モードでは、1つのラインがL1キャッシュにプリフェッチされ、更なるラインがストリーム・バッファにプリフェッチされる。本発明の1つの実施例では、3つのキャッシュ・ラインがブラスト・モードにおいてストリーム・バッファにプリフェッチされる。
【0016】
ブラスト・モードの実施例において、1つのストリーム・バッファ・キャッシュ・ラインがプロセッサ・チップ上にバッファされ、同じストリームの他のキャッシュ・ラインが、システム・バスにインターフェースするノード・コントローラ・チップ上にバッファされる。
【0017】
【発明の実施の形態】
以下の説明では、本発明の十分な理解を与えるために、特定のワード長又はバイト長等のような数多くの特定の細部を説明する。しかし、本発明がそのような特定の細部の説明なしでも実施可能であることは当業者には明らかであろう。他の例では、不必要な詳述で本発明を不明瞭にしないようにするために、周知の回路はブロック図形式で示される。大部分に対して、タイミング事項等に関する詳細については、それが本発明の十分な理解を得るために必要ない限り及び当業者のスキルの範囲にある限り省略した。
【0018】
図面を参照すると、示されたエレメントは必ずしも縮尺して示されたものではなく、同様の又は同じエレメントはそれらの図面を通して同じ参照番号によって表される。
【0019】
図1を参照すると、本発明を有利に具体化するデータ処理システムが示される。マルチプロセッサ・システム100は、システム・バス124に動作的に接続された多数のプロセッサ装置106、108、110を含む。システム100では、任意の数のプロセッサ装置が利用可能であることに注意してほしい。又、システム・バス124には、システム・メモリ102へのアクセスを制御するメモリ・コントローラ104が接続される。メモリ・コントローラ104は、I/O装置128に結合されたI/Oコントローラ126にも接続される。プロセッサ装置106、108、110、I/Oコントローラ126、及びI/O装置128は、すべて、ここではバス装置と呼ぶこともできる。図示のように、各プロセッサ装置106、108、110は、それぞれ、プロセッサとL1キャッシュ112、114、116とを含む。L1キャッシュはそれぞれのプロセッサと同じチップ上に設置可能である。プロセッサ装置106、108、110には、それぞれ、L2キャッシュ118、118、120が接続される。これらのL2キャッシュは、それが接続されたプロセッサ装置を介してシステム・バス124に接続される。
【0020】
L1及びL2キャッシュの各対は、通常、直列的に関連する。L1キャッシュはストア・イン或いはライトスルーとして実現可能であり、一方、大型で遅いL2キャッシュは書戻しキャッシュとして実現される。L1及びL2キャッシュの両方とも物理的にはプロセッサ装置の一部分として実現され、プロセッサ装置の内部バスを介して接続される。L2コントローラはチップ外にあってもよく、本発明が依然として適用可能である。
【0021】
次に、図2を参照すると、本発明に従って動作するように構成可能なデータ処理システム200が示される。そのシステム200はシステム100とは別のアーキテクチャのものである。システム100及び200では、プロセッサ及びキャッシュの基本的なオペレーションは同じである。メモリ・コントローラ104及びノード・コントローラ205の制御及び機能は、本発明に関しては同じである。
【0022】
システム200において、プロセッサ201は内部L1キャッシュ202を有し、それは外部L2キャッシュ203に接続される。プロセッサ201はバス204によってノード・コントローラ205に接続される。ノード・コントローラ205は、プロセッサ201とシステム200の残りの部分との接続に関してその分野では知られた基本的機能を遂行する。ノード・コントローラ205はバス206によってスイッチ207に接続される。スイッチ207はクロス・ポイント・スイッチでよく、他のプロセッサ及びI/O装置をバス208によってシステム・メモリ209に結合することができる。この説明の残り部分はシステム200に関するものである。しかし、本発明に関する説明も関連しており、それはシステム100においても実施可能である。
【0023】
本発明の目的は、プロセッサ201がL1キャッシュ202におけるキャッシュ・ラインにおいてかなりの時間量をヒットし、従ってシステム・メモリ209からのアドレス及びデータ情報の検索を最小にする(それはプロセッサ201のパフォーマンスを低下させる)ように、キャッシュ・ラインをL1キャッシュ202にプリフェッチするための効率的且つ正確なテクニックを提供することである。
【0024】
プロセッサ・オペレーションのパフォーマンスを改善するために設定された1つの従来技術は、キャッシュ・ラインをプリフェッチするためにストリーム・フィルタ及びバッファを利用することであった。図3に示されるように、ストリーム・フィルタ及びストリーム・バッファがその分野では知られている。ストリーム・フィルタは、使用されないデータのプリフェッチの発生を減少させなければならない。これらのフィルタはアドレス及び方向情報を含むヒストリ・バッファである。そのフィルタは、L1キャッシュにおいてミスしたラインから見て直列的には次に高いラインであるキャッシュ・ラインのアドレスを含む。次に高いそのキャッシュ・ラインへのアクセスが行われる場合、ストリーム状態が検出され、ストリーム・バッファが割り当てられる。フィルタは、ライン・アドレス「X」へのアクセスがあった場合、ライン・アドレス「X+1」を書き込まれるであろう。アドレス「X+1」が依然としてストリーム・フィルタに存在する時に次のアクセスがそのアドレス「X+1」に対して行われる場合、「X+1」がストリームとして割り当てられる。
【0025】
ストリーム・バッファは、可能性あるキャッシュ・データを保持するプリフェッチ・バッファである。その考えは、そのプロセッサ内で実行中のプログラムがデータ/命令の順次ストリームを実行している場合、更なるラインをストリーム・バッファにプリフェッチすることは有用なことになり得る。従って、その後のキャッシュ・ミスは、ストリーム・バッファにおけるデータを見つけることが可能である。
【0026】
ストリーム・フィルタ及びストリーム・バッファは、ストリーム・バッファをミスするL1キャッシュ・ミスが存在する場合、そのミス・アドレスがストリーム・フィルタに記憶されたアドレスと比較されるように共同する。ストリーム・フィルタにおいてヒットがある(データの直列ラインへの直列的アクセスが存在したことを意味する)場合、次のラインも将来必要となる可能性が高い可能性が存在する。ストリーム・バッファ及びストリーム・フィルタに関する更なる説明に関しては、1994年発行のIEEEの1063乃至6879ページの S.Palacharla 及び R.Kessler による記事「二次キャッシュ置換としてのストリーム・バッファの評価(Evaluating Stream Buffers as a Secondary Cache Replacement)」等に記載されている。
【0027】
次に、図4を参照すると、本発明に従って構成されたシステム200の更に詳細な図及びCPU201通したデータ・フローが示される。命令及びデータに対する別のL1キャッシュの使用を含むそのフローの変形がその分野では知られている。L1キャッシュ202は、その分野では知られた任意の置換ポリシを使用してメモリ209からのデータの使用されたコピーを頻繁に保持する。大きいL2キャッシュ203はL1キャッシュ202よりも多くのデータを保持し、通常は、メモリ・コヒーレンシ・プロトコルを制御する。本発明では、L1キャッシュ202におけるデータはL2キャッシュ203におけるデータのサブセットでよい。L1キャッシュ202及びL2キャッシュ203は「ストア・イン」キャッシュである。他の機能的エレメント(I/Oを含む)がその分野で知られたスヌープ・プロトコルを使用してデータを争う。スヌーピングの一例は、米国特許出願第08/442,740に開示されている。
【0028】
CPU201に対して示された境界はチップ境界及び機能的境界を表し、本発明の技術的範囲に関する制限を意味するものではない。PCC404はプロセッサ・キャッシュ・コントローラであり、メモリ・サブシステムに対するフェッチ及びストアを制御する。PCC404は、L1キャッシュ202に対するディレクトリの実施及び実アドレスへの有効アドレスの変換及びその逆の変換のようなその分野では知られた他の機能を有する。プリフェッチ・バッファ(PBFR)402は、CPU201及びL1キャッシュ202にステージされるべきメモリ・データの或数のラインを保持する。PBFR402はストリーム・バッファである。
【0029】
PCC404がデータをフェッチする時、それがL1キャッシュ202にある(L1ヒットである)場合、それはPCC404に送られる。それがL1キャッシュ202にない(L1ミスである)がL2キャッシュ203にある(L2ヒットである)場合、L1キャッシュ202のラインがL2キャッシュ203からのこのデータでもって置換される。この場合、データはL1キャッシュ202及びPCC404に同時に送られる。同様に、L2キャッシュ203においてミスがある場合、データはメモリ209からBIU401にフェッチされ、L1キャッシュ202、L2キャッシュ203、及びPCC404に同時にロードされる。このオペレーションに関する変形はその分野では知られている。データ・ストア・オペレーションは、データがL1ラインに記憶されてオペレーションを完了することを除けば、フェッチ・オペレーションと同じである。
【0030】
以下の説明では、ストリーム・バッファの種々な部分がシステム200の種々な部分に設けられる。この実施例では、ストリーム・バッファは4つのキャッシュ・ラインをストアする機能を有するが、任意の数のキャッシュ・ラインがそのストリーム・バッファ内で実施可能である。そのストリーム・バッファの1つのキャッシュ・ラインがL1キャッシュ202において実施される。特に、L1キャッシュ202におけるキャッシュ・ラインの1つが、ストリーム・バッファのキャッシュ・ラインの1つの機能に対して利用される。ストリーム・バッファの第2キャッシュ・ラインはPBFR402に設けられる。ストリーム・バッファの他の2つのキャッシュ・ラインは、ノード・コントローラ205におけるPBFR2(405)及びPBFR3(406)に設けられる。ノード・コントローラ205は、バス204に沿ったCPU201から下流のチップ上に設けることが可能である。メモリ・コントローラ104は、システム100のアーキテクチャが利用される場合、これらのストリーム・バッファ・ラインを含んでもよい。
【0031】
上記のIEEEの記事において検討されているように、ストリーム・フィルタ及びストリーム・バッファの基本的なオペレーションはリクエストされたキャッシュ・ラインにおいてL1キャッシュ・ミスがある時、そのキャッシュ・ラインのアドレスがインクレメントされ(一般には、1アドレスずつ)、このインクレメントされたアドレスがストリーム・フィルタ403に挿入される。L1キャッシュ202におけるキャッシュ・ラインのその後のミスの発生時に、このL1キャッシュ・ミスのアドレスがフィルタ403に含まれたアドレスに比較される。アドレスの一致が得られた場合、キャッシュ・ラインのストリームがそのストリーム・バッファ内に割り当てられる。
【0032】
上記のように、キャッシュ・ミスがある時、フィルタ・バッファは次の逐次キャッシュ・ラインのアドレスを書き込まれる。そのフィルタは、そのような事象の「ヒストリ」より成るそのようなアドレスを保持し得る多数のロケーションを含む。それらはLRUベースで置換可能である。キャッシュ・ミスがある時はいつも、フィルタにおけるアドレスがキャッシュ・ライン・ミスのアドレスと比較される。ヒットがある場合、フィルタ・ヒットが存在すると云われ、ストリームが割り当てられる。ストリーム・モードでは、エクストラ・キャッシュ・ラインが、ストリームの一部分としてL1キャッシュがそれを必要とすることを期待して、ストリーム・バッファにプリフェッチされる。
【0033】
図5は、本発明に従ってストリーム・バッファのオペレーションの高レベルの機能的な図を表す。CPU201は、使用されるアーキテクチャに従って有効アドレス(EA)を発生する。EAは潜在的にはオフセットを有するプログラム・アドレスである。CPU201は変換されたアドレス、即ち、そのEAに対応した実アドレス(RA)を発生する。その実アドレスはフィルタ待ち行列502によって使用されるが、フィルタ待ち行列がその有効アドレスを代替えとして使用することは本発明の技術的範囲内であろう。RAはフィルタ待ち行列502におけるRAと一斉に比較される。そのエントリがそれの有効ビット(V)によって表されるように有効である場合、比較一致はフィルタ・ヒットと呼ばれる。又、フィルタ待ち行列502は、予測ストリームがインクレメント或いはデクレメント(+/−1、又はアップ/ダウン)されるべきことを表す各エントリに対する予測方向インディケータを含む。各フィルタ待ち行列・エントリは、そのアドレスに対応するストリームがあるかどうか及び、それが肯定される場合、そのストリームのストリーム番号を表すフィールドを含む。
【0034】
よく知られているように、メモリ209はサブセクションに論理的に分割されることが多い。特に、メモリ209は、オペレーティング・システムによってプログラムに割り当てられたメモリのインクレメントであるページに分割され、DASD(ダイレクト・アクセス記憶装置)とメモリ209の間で「ページング」データを制御するために使用可能である。ページは順次EAに関して非順次的に割り当て可能である。従って、EAがストリーム・データのプリフェッチのために使用される場合、ページ境界を横切った時に変換器(XLATE)503においてアドレス変換が行われなければならない。それは、そのストリーム・バッファが、前述のように順次的でない実アドレスを含むためである。各ページは、更に、ラインに分割される。キャッシュの実施によってライン・サイズが決定され、それはキャッシュ・ラインにおけるメモリ・データの量に対応する。キャッシュ・ミスの結果、1ラインのデータがキャッシュに変換される。
【0035】
フィルタ・ヒットがある時、ストリームがストリーム・アドレス待ち行列501に割当可能であり、ストリーム・データ・バッファ506への対応する割当が行われる。ストリーム・アドレス・エントリは、特定の割り当てられたストリームに対する次のデータ・ラインの予測有効アドレスを含む。もう一度云えば、これは実施選択であり、代替えとして、実アドレスを使用してもよかった。ストリーム・アドレス・エントリは、そのストリームが割り当てられることを表す有効ビット(V)も含む。ストリームの状態を追跡するために使用される状態フィールドもある。又、予測方向のコピーもストリーム・バッファに保持される。比較器505はプロセッサEAとストリーム・アドレス待ち行列に含まれたページ及びライン・アドレスとを比較する。一致が生じた場合、それはストリーム・ヒットと呼ばれる。
【0036】
図5に示された機能性は別の方法でも実施可能であり、それも依然として本発明の技術的範囲内である。
【0037】
メモリ209におけるメモリ・スペースは128個のバイト・ラインに分割可能である。各ラインは半分に分割可能であるので、1つのラインの偶数番の半分はアドレス0から63までであり、奇数番の半分はアドレス64から127までである。前述のように、CPU201は、メモリにおけるキャッシュ可能なラインに対する実アドレスに変換される論理的アドレス(EA)を発生する。メモリは2*Nバイトのページに分割される。それらのページはサイズのキャッシュ・エントリに対応するラインに分割される。キャッシュ・ミスがある度に、関連する実アドレスが分析される。その実アドレスがラインの偶数番の半分にある場合、潜在的ストリームはインクレメント1である。待ち行列502におけるLRUフィルタ待ち行列は「アップ」の方向をマークされ、ライン・ミスRAは「1」だけインクレメントされてそのエントリに保管される。RAがそのラインの奇数側にある場合、待ち行列502におけるRAエントリは1だけデクレメントされ、「ダウン」がそのエントリにマークされる。
【0038】
ミスの場合にフィルタ・エントリにRAを保管すること及びその後のミスをそのエントリと比較してアップ又はダウンの方向を決定することは、別の実施例として本発明の範囲内である。
【0039】
ストリームが割り当てられる時、「次の」有効ライン・アドレスがストリーム・アドレス・バッファ501に保管される。バッファ501は各アクティブ・ストリームに対するエントリを含む。有効ビット「V」はそのエントリが使用中であることを表し、方向インディケータはそのストリームがアップであるか又はダウンであるか(+/−)を表す。状態フィールドはそのストリームの状態を表すために使用される。ストリーム・アドレス・バッファ501と関連してストリーム・データ・バッファ506があり、それはプリフェッチされたデータのラインを保持する。フィルタ待ち行列502及びストリーム・バッファ501の両方の予測アドレスとも、ページ境界が遭遇する時に終了する。これは、そのような事象が新しい変換を必要とするためである。
【0040】
L1キャッシュ202及びL2キャッシュ203のキャッシュ・ミスがある場合、メモリ209をアクセスする前にストリーム・バッファが質問される。フィルタ待ち行列502及びストリーム・アドレス・バッファ501の回路を結合することは本発明の明らかな実施例である。
【0041】
前述のストリーム・フィルタ及びストリーム・バッファに関する及び前述のIEEEの記事における従来方法はL2キャッシュの代替えとしてストリーム・バッファの効果を分析している。この場合、プリフェッチはいつもインクレメント的なものとして予測される。更に、1ライン又はワードではなく「ストライド」とバッファに保管されたストライド長によってアドレスがインクレメントされるというストライド・フィルタを説明し、図示することにする。ストライド・フィルタの概念は別の実施例として実現され、本発明の技術範囲内であろう。
【0042】
図6乃至図9を参照すると、本発明の進行的プリフェッチ・モードの流れ図が示される。前述のように、本発明は3つの進行的プリフェッチ・モード、即ち、正規モード、データ・プリフェッチ・モード、及びブラスト・モードを可能にする。正規モードでは、データはプリフェッチされない。データ・プリフェッチ・モードでは、2つのライン、即ち、L1キャッシュに対する1つのライン及びストリーム・バッファに対する1つのラインがプリフェッチされる。ブラスト・モードでは、2つよりも多くのラインが一時にプリフェッチされる。本発明の好適な実施例では、ブラスト・モードにおいて、4つのライン、即ち、データ・プリフェッチ・モードにおけるような2つのライン及びストリーム・バッファに対する2つの更なるラインがプリフェッチされる。何れのモードにおいても、プリフェッチされたバッファは、プロセッサ・チップ、キャッシュ・チップ、外部チップ、又はメモリ・カード上にパッケージ可能であり、依然として、本発明の技術的範囲内にある。図6乃至図9は、どの方向にストリームが流れるかを予測するための方向がインクレメントする例を示す。デクレメントする例はこの例の明らかな修正となるであろう。図6乃至図9はデータ・プリフェッチ及びブラスト・モードに入る方法を示す。
【0043】
ステップ601において、CPU201はキャッシュ・ラインAで開始するデータをアクセスし始める。ステップ602において、キャッシュ・ラインAがL1キャッシュ202内にあるかどうかの決定が行われる。それが肯定される場合、プロセスはステップ603に進む。そこでは、キャッシュ・ラインAがCPU201に戻され、プロセスはステップ604において終了する。
【0044】
しかし、キャッシュ・ラインAにおいてミスがある場合、プロセスはステップ605に進む。そこでは、キャッシュ・ラインAのアドレスがストリーム・フィルタ403に含まれたすべてのアドレスに比較される。
【0045】
キャッシュ・ラインAがフィルタ403内に存在しない場合、プロセスはステップ606に進み、そこでは、キャッシュ・ラインAのアドレスが1だけインクレメントされ、フィルタ403内に挿入される。しかる後、ステップ607において、キャッシュ・ラインAはL2キャッシュ203又はメモリ209からL1キャッシュ202にフェッチされる。このステップはその分野ではよく知られている。
【0046】
図6乃至図9におけるステップ607からステップ608への破線の矢印は、ステップ608がステップ607に続いて直ちに生じてもよく、或いは生じなくてもよいことを表す。一般には、ストリーム・フィルタ内に存在するアドレス・エントリの数と同じ数のミスがキャッシュ・ラインA+1に対するリクエストの前に生じることがある。
【0047】
或時間遅れで、CPU201はキャッシュ・ラインA+1をリクエストするかもしれない。再び、PCC404はキャッシュ・ラインA+1がL1キャッシュ202内に存在するかどうかを決定する(ステップ609)。それが肯定される場合、キャッシュ・ラインA+1がステップ610においてCPU201に戻され、プロセスはステップ611において終了する。キャッシュ・ラインA+1はL1キャッシュ202内にあるので、ストリーム・フィルタ403との比較一致はなく、A+1エントリは、それがフィルタ置換アルゴリズムによって再試行されるまでフィルタ403に留まる。そのフィルタ置換アルゴリズムは、米国特許出願第519,032号の教示するところに従って遂行可能である。しかし、L1キャッシュ202内のキャッシュ・ラインA+1においてミスがある場合、フィルタ・ヒットが存在し(ステップ637)、プロセスをステップ612へ進めさせる。そこでは、リクエストされたキャッシュ・ラインA+1のアドレスがフィルタ403にあるアドレスA+1と一致した結果フィルタ403においてヒットが生じるので、キャッシュA+2でもって始まるキャッシュ・ラインのストリームが割り当てられる。次に、ステップ613において、キャッシュ・ラインA+1がL2キャッシュ203又はメモリ209からL1キャッシュ202にフェッチされる。又、L1キャッシュ202は、キャッシュ・ラインA+2が存在するかどうかを決定するためにチェックされる。それが存在しない場合、キャッシュ・ラインA+2がL2キャッシュ203又はメモリ209からフェッチされる。
【0048】
しかる後、ステップ614において、キャッシュ・ラインA+3がL2キャッシュ203内に存在するかどうかの決定が行われる。それが存在しない場合、プロセスはステップ615に進み、そこでは、キャッシュ・ラインA+3がメモリ209からプリフェッチされ、プリフェッチ・バッファ402内に挿入される。しかし、キャッシュ・ラインA+3がキャッシュ203内に存在する場合、プロセスはステップ615をスキップする。
【0049】
再び、ステップ615からステップ616への破線矢印は、ステップ616がステップ615の後直ちには生じないことがあることを表す。
【0050】
ステップ616において、プロセッサ201はキャッシュ・ラインA+2にリクエストし、ラインA+2に対してL1キャッシュ202へのアクセスを生じさせる。ステップ613において、キャッシュ・ラインA+2がL1キャッシュ202へフェッチされたので、L1キャッシュ202はこのキャッシュ・ラインをCPU201に供給することができるであろう。ステップ617において、ストリーム・アドレス・バッファ501におけるストリーム・アドレスがそのストリームの先頭においてアドレスA+3を有するように更新される。しかる後、ステップ618において、L1キャッシュ202は、キャッシュ・ラインA+3が存在するかどうかを決定するためにチェックされる。それが存在しない場合、キャッシュ・ラインA+3がL2キャッシュ203又はバッファ402からL1キャッシュ202へフェッチされる。次に、ステップ619において、キャッシュ・ラインA+4がL2キャッシュ203又はメモリ209からプリフェッチ・バッファ402へフェッチされるであろう。
【0051】
しかる後、ブラスト・モードがシステム200においてイネーブルされない場合(ステップ620)、プロセスはステップ616に戻り、CPU201が図示のようなインクレメント順次態様でキャッシュ・ラインを通してインクレメントし続ける限り、ステップ616乃至621を通してループする。ステップ621は、ステップ616において、ラインA+3に対するL1キャッシュ・アクセスが存在し得ることを表す。そこで、ステップ617において、ストリームはアドレスA+3でもって更新され、ステップ618において、ラインA+4がL1キャッシュ202へフェッチされ、そしてステップ619において、キャッシュ・ラインA+4がバッファ402へフェッチされる。
【0052】
次に、データ・プリフェッチ・モードを説明する。ステップ620では、ブラスト・モードがシステム200においてイネーブルされる場合、キャッシュ・ラインA+3に対するCPU201からのリクエストが存在する時、プロセスはステップ622へ進むであろう。ステップ622において、そのようなリクエストに対して、PCC404はL1キャッシュ202内でキャッシュ・ラインA+3を捜すであろう。キャッシュ・ラインA+3がL1キャッシュ202に存在するので、キャッシュ・ラインA+3がCPU201へ戻されるであろう。しかる後、ステップ623において、ストリーム・アドレス・バッファ501におけるストリーム・アドレスがA+4に更新される。ステップ624において、キャッシュ・ラインA+4が存在するかどうかを決定するためにL1キャッシュ202がチェックされる。それが存在しない場合、キャッシュ・ラインA+4がバッファ402からL1キャッシュ202において実施されたプリフェッチ・バッファ位置にフェッチされるであろう。
【0053】
しかる後、ステップ625において、キャッシュ・ラインA+5がL2キャッシュ203に存在するかどうかの決定が行われる。それが存在する場合、プロセスはステップ626又は627へ進行するであろう。その実施は、ノード・コントローラ205がすべてのストリーム・バッファ・アクセスを通知されることを必要とするであろう。次のストリーム・バッファ・ラインがL2キャッシュ203内になく、従って、フェッチされることを必要とする場合の通知にその通知を限定することはノード・コントローラ・バッファ405及び406をプロセッサ201との同期から一時的に外させるであろう。この設計トレード・オフに利点は、ステップ626及び627が結合され、ノード・コントローラ205に対するアドレス・バス・トラフィックを減少させることができることである。カバーされる主要なケースでは、A、A+1等のラインはプリフェッチ前にはキャッシュ202に全く存在しないので、キャッシュ・ラインA+5は、通常は、L2キャッシュ203にあるとは考えられない。
【0054】
ステップ626及び627が上記の理由で結合される時、ステップ627の通知はステップ626のプリフェッチに加えられた4つの追加制御ビットでもって実施可能である。その4ビットは1ビットの有効プリフェッチ、2ビットのストリーム識別、及び1ビットのプリフェッチ方向である。キャッシュ・ラインA+5及びこれらのビットに対するアドレスを使用して、ノード・コントローラ205はキャッシュA+6及びA+7に対してメモリ・リクエストを発生することができる。前述のように、ノード・コントローラ205は任意の数のキャッシュ・ラインをプリフェッチするために実施可能である。ステップ628において、ノード・コントローラ205はキャッシュ・ラインA+6をプリフェッチ・バッファ405(PBFR2)にプリフェッチし、キャッシュ・ラインA+7をバッファ406(PBFR3)にプリフェッチするであろう。
【0055】
ステップ628及び629の間の破線は、キャッシュ・ラインA+4に対するCPU201からのリクエストがステップ628に続いて直ちに生じないことがあることを表す。
【0056】
ステップ629において、L1キャッシュ202はCPU201によってリクエストされたキャッシュ・ラインA+4に関してアクセスされる。キャッシュ・ラインA+4はステップ624においてL1キャッシュ202に挿入されたので、キャッシュ・ラインA+4はCPU201へ戻されるであろう。ステップ630において、ストリーム・アドレスがインクレメントされてアドレスA+5を先頭にされる。ステップ631において、L1キャッシュ202は、キャッシュ・ラインA+5が存在するかどうかを決定するためにチェックする。それが否定される場合、キャッシュ・ラインA+5がL2キャッシュ203又はバッファ402からL1キャッシュ202にフェッチされる。
【0057】
しかる後、ステップ632において、キャッシュ・ラインA+6はバッファ405からバッファ402に移動する。ステップ633において、キャッシュ・ラインA+7がバッファ406からバッファ405に移動する。しかる後、ステップ634において、ノード・コントローラ205はキャッシュ・ラインA+8をプリフェッチするように通知される。この実施では、ステップ632におけるキャッシュ・ラインA+6のフェッチは、キャッシュ・ラインA+8をプリフェッチするようにノード・コントローラ205へ通知することである。ステップ635において、ノード・コントローラ205はキャッシュ・ラインA+8をメモリ209からバッファ406にプリフェッチする。
【0058】
しかる後、CPU201がインクレメンタル順次態様でキャッシュ・ラインのアクセスを継続する(即ち、CPU201がその割り当てられたストリームにおけるキャッシュ・ラインのアクセスを継続する)限り、プロセスはステップ629−636を通してループ動作をインクレメンタル態様で継続するであろう(ステップ636)。
【0059】
上記の説明において、バス・インターフェース装置(BIU)401がメモリ209からのキャッシュ・ラインのフェッチを遂行してもよい。ノード・コントローラ205はスイッチ207における一部分であってもよい。
【0060】
有効アドレスはページ境界に跨って連続的であり、実アドレスはそのように連続的でないので、ストリーム・アドレス・バッファ501における2つのアドレスを比較する時に有効アドレスを利用することは有利であることが多い。更に、上記のため、インクレメンタル・アドレスを生じさせるために、カウンタを使用してもよい。
【0061】
前述のように、BIU401からメモリ209へのフェッチにおいて、それがキャッシュ・ラインをバッファ405及び406にプリフェッチするためであることをノード・コントローラ205に通知するために、制御ビットを利用してもよい。ノード・コントローラ205がそれのバッファへのプリフェッチを遂行することをこの特定のライン・リクエストが要求することを、1つのビットがノード・コントローラ205に知らせるようにしてもよい。どのストリーム番号がプリフェッチと関連するかを、他の2つのビットがノード・コントローラ205に知らせるようにしてもよい。キャッシュ・ラインにおけるどの方向にアドレスが向いているかを、他のビットが表すようにしてもよい。ノード・コントローラ205は、プリフェッチを行うように通知される時、CPU201の動作とは無関係にそのようなプリフェッチを行ってもよい。
【0062】
L1キャッシュ202及びL2キャッシュ203に関する組込みを維持する場合、キャッシュ・ラインが上記の手順におけるバッファ402からL1キャッシュ202へ移動する時、同じキャッシュ・ラインがL2キャッシュ203にも含まれるであろう。
【0063】
L1キャッシュ202内にストリーム・バッファ・ラインの1つを持つ場合の利点は、L1キャッシュ202におけるそのバッファ・ライン内に含まれた特定のキャッシュ・ラインがプロセッサ201によってリクエストされる時、L1キャッシュ202においてヒットが生じ、ミスは生じない。技術的には、たとえリクエストされたキャッシュ・ラインがそのL1キャッシュ202に接続された別のバッファに含まれていても、ミスは生じるであろう。そのようなミスのために、そのストリーム・バッファ・ラインからCPU201にそのキャッシュ・ラインを検索するために余分のハードウエア及びサイクル・タイムが必要とされるであろう。ストリーム・バッファ・キャッシュラインの1つとして作用するL1キャッシュ202におけるキャッシュ・ラインは論理的表現をすればプリフェッチ・ストリーム・バッファに含まれる。
【0064】
まとめとして、本発明の構成に関して以下の事項を開示する。
【0065】
(1)データ処理システムにおけるプロセッサによって使用されるデータをプリフェッチするための方法にして、
(a)データ・ラインに対する前記プロセッサからのリクエストを受け取るステップと、
(b)前記リクエストに応答してストリームを割り当てるステップと、
(c)前記ストリームにおけるエレメントによって表されたデータ・ライン対する前記プロセッサからのその後のリクエストを受け取るステップと、
(d)前記ストリームにおけるエレメントによって表されたデータ・ラインに対する前記プロセッサからの前記その後のリクエストの関数として未だリクエストされてないデータ・ラインのプリフェッチの深さを制御するステップと、
を含む方法。
(2)前記ストリームにおけるエレメントによって表されたデータ・ラインに対する前記プロセッサからの前記その後のリクエストの関数として未だリクエストされてないデータ・ラインのプリフェッチの方向を制御するステップを含むことを特徴とする上記(1)に記載の方法。
(3)前記ステップ(d)は、
第1オペレーション・モードにおいて、前記ストリームにおける前記エレメントの1つによって表されたデータ・ラインに対する前記プロセッサからの各リクエストに対して2つのデータ・ラインをプリフェッチするステップと、
第2オペレーション・モードにおいて、前記ストリームにおける前記エレメントの1つによって表されたデータ・ラインに対する前記プロセッサからの各リクエストに対して2つよりも多くのデータ・ラインをプリフェッチするステップと、
を含み、前記第2オペレーション・モードの前に前記第1オペレーション・モードに入ることを特徴とする上記(1)に記載の方法。
(4)1つ又は複数のデータ・ラインがキャッシュにプリフェッチされること及び
前記ストリームはストリーム・フィルタに維持されることを特徴とする上記(1)に記載の方法。
(5)1つ又は複数のデータ・ラインが前記プロセッサの外部の1つ又は複数のバッファに投機的にプリフェッチされることを特徴とする上記(4)に記載の方法。
(6)メイン・メモリからストリーム・バッファにキャッシュ・ラインをプリフェッチするするためのシステムにして、前記ストリーム・バッファはバスによって前記メイン・メモリに接続されたプロセッサを援助するものにおいて、
ストリーム・フィルタと、
前記プロセッサに接続されたキャッシュと、
第1キャッシュ・ラインのための前記プロセッサからの第1リクエストを受け取るための手段と、
前記第1リクエストに応答して、前記第1キャッシュ・ラインのアドレスに依存した内容を有するストリームを前記ストリーム・フィルタにおいて割り当てるための手段と、
第2キャッシュ・ラインのための前記プロセッサからの第2リクエストを受け取るための手段にして、前記第2キャッシュ・ラインのアドレスが前記ストリーム内に含まれるものと、
前記第2リクエストに応答して前記メモリから前記ストリーム・バッファにN個(Nはゼロよりも大きい整数)のキャッシュ・ラインを投機的にプリフェッチするための手段にして、前記N個のプリフェッチされたキャッシュ・ラインのアドレスは前記ストリームに沿って存在するものと、
第3キャッシュ・ラインのための前記プロセッサからの第3リクエストを受け取るための手段にして、前記第3キャッシュ・ラインのアドレスが前記ストリーム内に含まれるものと、
前記第3リクエストに応答して前記メモリから前記ストリーム・バッファにM個(MはNよりも大きい整数)のキャッシュ・ラインを投機的にプリフェッチするための手段にして、前記M個のプリフェッチされたキャッシュ・ラインのアドレスは前記ストリームに沿って存在するものと、
を含むシステム。
(7)前記ストリーム・バッファは前記キャッシュに含まれることを特徴とする上記(6)に記載のシステム。
(8)前記N個のキャッシュ・ラインを投機的にプリフェッチするための手段は前記システムの第1オペレーション・モードと関連すること、
前記M個のキャッシュ・ラインを投機的にプリフェッチするための手段は前記システムの第2オペレーション・モードと関連すること、
前記第1オペレーション・モードは前記第2オペレーション・モードの前に実施されること、及び
前記第2オペレーション・モードはディスエーブル可能であること、
を特徴とする上記(6)に記載のシステム。
(9)前記ストリーム・バッファの1つ又は複数のラインは前記プロセッサを含むチップの外に含まれることを特徴とする上記(7)に記載のシステム。
(10)プロセッサによってリクエストされたリクエストされたキャッシュ・ラインをメモリから投機的にプリフェッチするための方法にして、
第1キャッシュ・ラインに対するリクエストを前記プロセッサから受け取るためのステップと、
前記第1キャッシュ・ラインが前記プロセッサに接続されたキャッシュ内に含まれているかどうかを決定するステップと、
前記第1キャッシュ・ラインが前記プロセッサに接続されたキャッシュ内に含まれていない場合、前記第1キャッシュ・ラインのアドレスがストリーム・フィルタ内に含まれたアドレスに一致するかどうかを決定するステップと、
前記第1キャッシュ・ラインのアドレスが前記ストリーム・フィルタ内に含まれたアドレスに一致しない場合、前記第1キャッシュ・ラインのアドレスをインクレメントして第1インクレメント・アドレスを作成し、前記第1インクレメント・アドレスを前記ストリーム・フィルタに挿入するステップと、
前記メモリから前記キャッシュに前記第1キャッシュ・ラインをフェッチするステップと、
前記プロセッサから第2キャッシュ・ラインに対するリクエストを受け取るステップにして、前記第2キャッシュ・ラインのアドレスが前記第1インクレメント・アドレスに対応するものと、
前記第2キャッシュ・ラインが前記キャッシュ内に含まれているかどうかを決定するステップと、
前記第2キャッシュ・ラインが前記キャッシュ内に含まれていない場合、前記第1インクレメント・アドレスをインクレメントして第2インクレメント・アドレスを作成しアドレスのストリームをストリーム・フィルタにおいて割り当てるステップにして、前記ストリームの先頭は前記第2インクレメント・アドレスに対応するアドレスを有するものと、
前記第2キャッシュ・ライン及び前記インクレメント・アドレスに対応したアドレスを有する第3キャッシュ・ラインを前記メモリから前記キャッシュにフェッチするステップと、
第3インクレメント・アドレスに対応したアドレスを有する第4キャッシュ・ラインを前記メモリからストリームにおける第1ラインにフェッチするステップにして、前記第3インクレメント・アドレスは前記第2インクレメント・アドレスのインクレメントに対応するものと、
前記第3キャッシュ・ラインに対するリクエストを前記プロセッサから受け取るステップと、
前記ストリームの先頭が前記第3インクレメント・アドレスに対応したアドレスを有するように前記ストリームを更新するステップと、
前記ストリーム・バッファの前記第1ラインから前記キャッシュに前記第4キャッシュ・ラインをフェッチするステップと、
第4インクレメント・アドレスに対応したアドレスを有する第5キャッシュ・ラインを前記メモリから前記ストリーム・バッファの前記第1ラインにフェッチするステップにして、前記第4インクレメント・アドレスは前記第3インクレメント・アドレスのインクレメントに対応するものと、
前記第4キャッシュ・ラインに対応するリクエストを前記プロセッサから受け取るステップと、
前記ストリームの先頭が前記第4インクレメント・アドレスに対応したアドレスを有するように前記ストリームを更新するステップと、
前記ストリーム・バッファの前記第1ラインから前記キャッシュに前記第5キャッシュ・ラインをフェッチするステップと、
第5インクレメント・アドレスに対応したアドレスを有する第6キャッシュ・ラインを前記メモリから前記ストリーム・バッファの前記第1ラインにフェッチするステップにして、前記第5インクレメント・アドレスは前記第4インクレメント・アドレスのインクレメントに対応するものと、
第6インクレメント・アドレスに対応したアドレスを有する第7キャッシュ・ラインを前記メモリから前記ストリーム・バッファの前記第2ラインにフェッチするステップにして、前記第6インクレメント・アドレスは前記第5インクレメント・アドレスのインクレメントに対応するものと、
第7インクレメント・アドレスに対応したアドレスを有する第8キャッシュ・ラインを前記メモリから前記ストリーム・バッファの前記第3ラインにフェッチするステップにして、前記第7インクレメント・アドレスは前記第6インクレメント・アドレスのインクレメントに対応するものと、
前記第5キャッシュ・ラインに対するリクエストを前記プロセッサから受け取るステップと、
前記ストリームの先頭が前記第5インクレメント・アドレスに対応したアドレスを有するように前記ストリームを更新するステップと、
前記ストリーム・バッファの前記第1ラインから前記キャッシュに前記第6キャッシュ・ラインをフェッチするステップと、
前記ストリーム・バッファの前記第2ラインから前記ストリーム・バッファの第1ラインに前記第7キャッシュ・ラインをフェッチするステップと、
前記ストリーム・バッファの前記第3ラインから前記ストリーム・バッファの第2ラインに前記第8キャッシュ・ラインをフェッチするステップと、
前記メモリから前記ストリーム・バッファの前記第3ラインに第9キャッシュ・ラインをフェッチするステップと、
を含む方法。
【図面の簡単な説明】
【図1】本発明に従って構成可能なマルチプロセッサ・システムを示す。
【図2】本発明に従って構成可能なデータ処理システムを示す。
【図3】ストリーム・フィルタ及びストリーム・バッファを示す。
【図4】図2に示されたシステムの更に詳細な図を示す。
【図5】本発明に従って機能的な図を示す。
【図6】本発明の流れ図の一部分を示す。
【図7】本発明の流れ図の一部分を示す。
【図8】本発明の流れ図の一部分を示す。
【図9】本発明の流れ図の一部分を示す。

Claims (8)

  1. データ処理システムにおけるプロセッサによって使用されるデータをプリフェッチするための方法にして、
    (a)データ・ラインに対する前記プロセッサからのリクエストを受け取るステップと、
    (b)前記リクエストに応答してストリームを割り当てるステップと、
    (c)前記ストリームにおけるエレメントによって表されたデータ・ラインに対する前記プロセッサからのその後のリクエストを受け取るステップと、
    (d)前記ストリームにおけるエレメントによって表されたデータ・ラインに対する前記プロセッサからの前記その後のリクエストに関連して未だリクエストされてないデータ・ラインのプリフェッチの深さを制御するステップと、
    を含み、
    前記ステップ(d)は、
    第1オペレーション・モードにおいて、前記ストリームにおける前記エレメントの1つによって表されたデータ・ラインに対する前記プロセッサからの各リクエストに対して2つのデータ・ラインをプリフェッチするステップと、
    第2オペレーション・モードにおいて、前記ストリームにおける前記エレメントの1つによって表されたデータ・ラインに対する前記プロセッサからの各リクエストに対して2つよりも多くのデータ・ラインをプリフェッチするステップと、を含み、
    前記第2オペレーション・モードの前に前記第1オペレーション・モードに入り、前記ストリームにおけるエレメントによって表されたデータ・ラインに対する前記プロセッサからの前記その後のリクエストに応じて、前記第2オペレーション・モードに移行するための設定がなされているか否かの判定を行う、
    ことを特徴とする方法。
  2. 前記ストリームにおけるエレメントによって表されたデータ・ラインに対する前記プロセッサからの前記その後のリクエストに関連して未だリクエストされてないデータ・ラインのプリフェッチの方向を制御するステップを含むことを特徴とする請求項1に記載の方法。
  3. 前記ストリームはストリーム・フィルタに維持されることを特徴とする請求項1に記載の方法。
  4. 1つ又は複数のデータ・ラインが前記プロセッサの外部の1つ又は複数のバッファに投機的にプリフェッチされることを特徴とする請求項3に記載の方法。
  5. メイン・メモリからストリーム・バッファにキャッシュ・ラインをプリフェッチするためのシステムにして、前記ストリーム・バッファはバスによって前記メイン・メモリに接続されたプロセッサを援助するものにおいて、
    ストリーム・フィルタと、
    前記プロセッサに接続されたキャッシュと、
    第1キャッシュ・ラインに対する前記プロセッサからの第1リクエストを受け取るための手段と、
    前記第1リクエストに応答して、前記第1キャッシュ・ラインのアドレスに依存した内容を有するストリームを前記ストリーム・フィルタにおいて割り当てるための手段と、
    第2キャッシュ・ラインに対する前記プロセッサからの第2リクエストを受け取るための手段にして、前記第2キャッシュ・ラインのアドレスが前記ストリーム内に含まれるものと、
    前記第2リクエストに応答して前記メイン・メモリから前記ストリーム・バッファにN個(Nはゼロよりも大きい整数)のキャッシュ・ラインを投機的にプリフェッチするための手段にして、前記N個のプリフェッチされたキャッシュ・ラインのアドレスは前記ストリームに沿って存在するものと、
    第3キャッシュ・ラインのための前記プロセッサからの第3リクエストを受け取るための手段にして、前記第3キャッシュ・ラインのアドレスが前記ストリーム内に含まれるものと、
    前記第3リクエストに応答して前記メイン・メモリから前記ストリーム・バッファにM個(MはNよりも大きい整数)のキャッシュ・ラインを投機的にプリフェッチするための手段にして、前記M個のプリフェッチされたキャッシュ・ラインのアドレスは前記ストリームに沿って存在するものと、
    を含み、
    前記N個のキャッシュ・ラインを投機的にプリフェッチするための手段は前記システムの第1オペレーション・モードと関連し、前記M個のキャッシュ・ラインを投機的にプリフェッチするための手段は前記システムの第2オペレーション・モードと関連し、
    前記第1オペレーション・モードは前記第2オペレーション・モードの前に実施され、前記第1オペレーション・モードにおける前記第2リクエストに応じて、前記第2オペレーション・モードに移行するための設定がなされているか否かの判定を行う判定手段を更に含み、
    前記第2オペレーション・モードはディスエーブル可能であること、
    を特徴とするシステム。
  6. 前記ストリーム・バッファの1つ又は複数のラインは、前記プロセッサを含むチップの外に含まれることを特徴とする請求項5に記載のシステム。
  7. プロセッサによってリクエストされたキャッシュ・ラインをメモリから投機的にプリフェッチするための方法にして、
    第1キャッシュ・ラインに対するリクエストを前記プロセッサから受け取るためのステップと、
    前記第1キャッシュ・ラインが前記プロセッサに接続されたキャッシュ内に含まれているかどうかを決定するステップと、
    前記第1キャッシュ・ラインが前記プロセッサに接続されたキャッシュ内に含まれていない場合、前記第1キャッシュ・ラインのアドレスがストリーム・フィルタ内に含まれたアドレスに一致するかどうかを決定するステップと、
    前記第1キャッシュ・ラインのアドレスが前記ストリーム・フィルタ内に含まれたアドレスに一致しない場合、前記第1キャッシュ・ラインのアドレスをインクレメントして第1インクレメント・アドレスを作成し、前記第1インクレメント・アドレスを前記ストリーム・フィルタに挿入するステップと、
    前記メモリから前記キャッシュに前記第1キャッシュ・ラインをフェッチするステップと、
    前記プロセッサから第2キャッシュ・ラインに対するリクエストを受け取るステップにして、前記第2キャッシュ・ラインのアドレスが前記第1インクレメント・アドレスに対応するものと、
    前記第2キャッシュ・ラインが前記キャッシュ内に含まれているかどうかを決定するステップと、
    前記第2キャッシュ・ラインが前記キャッシュ内に含まれていない場合、前記第1インクレメント・アドレスをインクレメントして第2インクレメント・アドレスを作成し、アドレスのストリームをストリーム・フィルタにおいて割り当てるステップにして、前記ストリームの先頭は前記第2インクレメント・アドレスに対応するアドレスを有するものと、
    前記第2キャッシュ・ラインと前記第2インクレメント・アドレスに対応したアドレスを有する第3キャッシュ・ラインを、前記メモリから前記キャッシュにフェッチするステップと、
    第3インクレメント・アドレスに対応したアドレスを有する第4キャッシュ・ラインを、前記メモリからストリーム・バッファにおける第1ラインにフェッチするステップにして、前記第3インクレメント・アドレスは前記第2インクレメント・アドレスのインクレメントに対応するものと、
    前記第3キャッシュ・ラインに対するリクエストを前記プロセッサから受け取るステップと、
    前記ストリームの先頭が前記第3インクレメント・アドレスに対応したアドレスを有するように前記ストリームを更新するステップと、
    前記ストリーム・バッファの前記第1ラインから前記キャッシュに前記第4キャッシュ・ラインをフェッチするステップと、
    第4インクレメント・アドレスに対応したアドレスを有する第5キャッシュ・ラインを、前記メモリから前記ストリーム・バッファの前記第1ラインにフェッチするステップにして、前記第4インクレメント・アドレスは前記第3インクレメント・アドレスのインクレメントに対応するものと、
    ブラスト・モード(前記ストリームにおけるエレメントの1つによって表されたデータ・ラインに対する前記プロセッサからの各リクエストに対して2つよりも多くのデータ・ラインをプリフェッチするオペレーション・モード)である場合に、前記第4キャッシュ・ラインに対応するリクエストを前記プロセッサから受け取るステップと、前記ストリームの先頭が前記第4インクレメント・アドレスに対応したアドレスを有するように前記ストリームを更新するステップと、
    前記ストリーム・バッファの前記第1ラインから前記キャッシュに前記第5キャッシュ・ラインをフェッチするステップと、
    第5インクレメント・アドレスに対応したアドレスを有する第6キャッシュ・ラインを、前記メモリから前記ストリーム・バッファの前記第1ラインにフェッチするステップにして、前記第5インクレメント・アドレスは前記第4インクレメント・アドレスのインクレメントに対応するものと、
    第6インクレメント・アドレスに対応したアドレスを有する第7キャッシュ・ラインを、前記メモリから前記ストリーム・バッファの第2ラインにフェッチするステップにして、前記第6インクレメント・アドレスは前記第5インクレメント・アドレスのインクレメントに対応するものと、
    第7インクレメント・アドレスに対応したアドレスを有する第8キャッシュ・ラインを、前記メモリから前記ストリーム・バッファの第3ラインにフェッチするステップにして、前記第7インクレメント・アドレスは前記第6インクレメント・アドレスのインクレメントに対応するものと、
    前記第5キャッシュ・ラインに対するリクエストを前記プロセッサから受け取るステップと、
    前記ストリームの先頭が前記第5インクレメント・アドレスに対応したアドレスを有するように前記ストリームを更新するステップと、
    前記ストリーム・バッファの前記第1ラインから前記キャッシュに前記第6キャッシュ・ラインをフェッチするステップと、
    前記ストリーム・バッファの前記第2ラインから前記ストリーム・バッファの前記第1ラインに前記第7キャッシュ・ラインをフェッチするステップと、
    前記ストリーム・バッファの前記第3ラインから前記ストリーム・バッファの前記第2ラインに前記第8キャッシュ・ラインをフェッチするステップと、
    前記メモリから前記ストリーム・バッファの前記第3ラインに第9キャッシュ・ラインをフェッチするステップと、
    を含む方法。
  8. 前記キャッシュは、前記プロセッサに組み合わせられた主キャッシュであることを特徴とする請求項7に記載の方法。
JP18580696A 1995-08-24 1996-07-16 データ・キャッシュ・システム及び方法 Expired - Fee Related JP3541998B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US519031 1995-08-24
US08/519,031 US5664147A (en) 1995-08-24 1995-08-24 System and method that progressively prefetches additional lines to a distributed stream buffer as the sequentiality of the memory accessing is demonstrated

Publications (2)

Publication Number Publication Date
JPH0962573A JPH0962573A (ja) 1997-03-07
JP3541998B2 true JP3541998B2 (ja) 2004-07-14

Family

ID=24066484

Family Applications (1)

Application Number Title Priority Date Filing Date
JP18580696A Expired - Fee Related JP3541998B2 (ja) 1995-08-24 1996-07-16 データ・キャッシュ・システム及び方法

Country Status (5)

Country Link
US (1) US5664147A (ja)
EP (1) EP0762288B1 (ja)
JP (1) JP3541998B2 (ja)
KR (1) KR100240911B1 (ja)
DE (1) DE69616465T2 (ja)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2307072B (en) 1994-06-10 1998-05-13 Advanced Risc Mach Ltd Interoperability with multiple instruction sets
US5897654A (en) * 1995-02-10 1999-04-27 International Business Machines Corporation Method and system for efficiently fetching from cache during a cache fill operation
US5809529A (en) * 1995-08-23 1998-09-15 International Business Machines Corporation Prefetching of committed instructions from a memory to an instruction cache
US6085291A (en) * 1995-11-06 2000-07-04 International Business Machines Corporation System and method for selectively controlling fetching and prefetching of data to a processor
US5829028A (en) * 1996-05-06 1998-10-27 Advanced Micro Devices, Inc. Data cache configured to store data in a use-once manner
US5796605A (en) * 1996-07-02 1998-08-18 Sun Microsystems, Inc. Extended symmetrical multiprocessor address mapping
US5805839A (en) * 1996-07-02 1998-09-08 Advanced Micro Devices, Inc. Efficient technique for implementing broadcasts on a system of hierarchical buses
US6092149A (en) * 1997-05-28 2000-07-18 Western Digital Corporation Disk drive cache system using a dynamic priority sequential stream of data segments continuously adapted according to prefetched sequential random, and repeating types of accesses
US5958040A (en) * 1997-05-28 1999-09-28 Digital Equipment Corporation Adaptive stream buffers
US5909694A (en) * 1997-06-12 1999-06-01 International Business Machines Corporation Multiway associative external microprocessor cache
US6260116B1 (en) 1998-07-01 2001-07-10 International Business Machines Corporation System and method for prefetching data
US6625697B1 (en) 1998-11-25 2003-09-23 Siemens Aktiengesellschaft Cache-storage device with a buffer storing prefetch data
JP3506024B2 (ja) * 1998-12-10 2004-03-15 日本電気株式会社 情報処理装置
US6542968B1 (en) * 1999-01-15 2003-04-01 Hewlett-Packard Company System and method for managing data in an I/O cache
US6473864B1 (en) * 1999-07-29 2002-10-29 Picoturbo, Inc. Method and system for providing power management to a processing system
US6446167B1 (en) * 1999-11-08 2002-09-03 International Business Machines Corporation Cache prefetching of L2 and L3
US6535962B1 (en) * 1999-11-08 2003-03-18 International Business Machines Corporation System and method for prefetching data using a hardware prefetch mechanism
US6567894B1 (en) * 1999-12-08 2003-05-20 International Business Machines Corporation Method and apparatus to prefetch sequential pages in a multi-stream environment
US6901500B1 (en) * 2000-07-28 2005-05-31 Silicon Graphics, Inc. Method and apparatus for prefetching information and storing the information in a stream buffer
US6662273B1 (en) 2000-09-29 2003-12-09 Intel Corporation Least critical used replacement with critical cache
US6760816B1 (en) * 2000-09-29 2004-07-06 Intel Corporation Critical loads guided data prefetching
US6782469B1 (en) 2000-09-29 2004-08-24 Intel Corporation Runtime critical load/data ordering
US7039766B1 (en) * 2000-10-12 2006-05-02 International Business Machines Corporation Prescheduling sequential data prefetches in a preexisting LRU cache
US6883066B2 (en) * 2001-09-14 2005-04-19 Seagate Technology Llc Method and system for cache management algorithm selection
US7093077B2 (en) 2001-11-30 2006-08-15 Intel Corporation Method and apparatus for next-line prefetching from a predicted memory address
US6675280B2 (en) 2001-11-30 2004-01-06 Intel Corporation Method and apparatus for identifying candidate virtual addresses in a content-aware prefetcher
US6954840B2 (en) 2001-11-30 2005-10-11 Intel Corporation Method and apparatus for content-aware prefetching
US7260704B2 (en) 2001-11-30 2007-08-21 Intel Corporation Method and apparatus for reinforcing a prefetch chain
US7162588B2 (en) 2002-08-23 2007-01-09 Koninklijke Philips Electronics N.V. Processor prefetch to match memory bus protocol characteristics
US7190367B2 (en) * 2003-03-25 2007-03-13 Mitsubishi Electric Research Laboratories, Inc. Method, apparatus, and system for rendering using a progressive cache
US7055005B2 (en) * 2003-04-07 2006-05-30 Hewlett-Packard Development Company, L.P. Methods and apparatus used to retrieve data from memory into a RAM controller before such data is requested
US7051162B2 (en) * 2003-04-07 2006-05-23 Hewlett-Packard Development Company, L.P. Methods and apparatus used to retrieve data from memory before such data is requested
US7487296B1 (en) * 2004-02-19 2009-02-03 Sun Microsystems, Inc. Multi-stride prefetcher with a recurring prefetch table
US20070186050A1 (en) * 2006-02-03 2007-08-09 International Business Machines Corporation Self prefetching L2 cache mechanism for data lines
WO2007099582A1 (ja) * 2006-02-28 2007-09-07 Fujitsu Limited プリフェッチ制御装置
US20070239939A1 (en) * 2006-04-06 2007-10-11 Goodman Benjiman L Apparatus for Performing Stream Prefetch within a Multiprocessor System
US8756404B2 (en) 2006-12-11 2014-06-17 International Business Machines Corporation Cascaded delayed float/vector execution pipeline
US7917701B2 (en) * 2007-03-12 2011-03-29 Arm Limited Cache circuitry, data processing apparatus and method for prefetching data by selecting one of a first prefetch linefill operation and a second prefetch linefill operation
US9390018B2 (en) * 2012-08-17 2016-07-12 Advanced Micro Devices, Inc. Data cache prefetch hints
US9348753B2 (en) 2012-10-10 2016-05-24 Advanced Micro Devices, Inc. Controlling prefetch aggressiveness based on thrash events

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4980823A (en) * 1987-06-22 1990-12-25 International Business Machines Corporation Sequential prefetching with deconfirmation
US5146578A (en) * 1989-05-01 1992-09-08 Zenith Data Systems Corporation Method of varying the amount of data prefetched to a cache memory in dependence on the history of data requests
US5317718A (en) * 1990-03-27 1994-05-31 Digital Equipment Corporation Data processing system and method with prefetch buffers
DE69128741T2 (de) * 1990-05-18 1998-07-16 Koninkl Philips Electronics Nv Mehrstufiger Befehlscachespeicher und Verwendungsverfahren dafür
SE469402B (sv) * 1991-05-02 1993-06-28 Swedish Inst Of Computer Scien Foerfarande foer att haemta data till ett cache-minne
JP2881049B2 (ja) * 1991-07-30 1999-04-12 株式会社日立製作所 プリフェッチバッファ
US5353419A (en) * 1992-01-09 1994-10-04 Trustees Of The University Of Pennsylvania Memory-side driven anticipatory instruction transfer interface with processor-side instruction selection
US5371870A (en) * 1992-04-24 1994-12-06 Digital Equipment Corporation Stream buffer memory having a multiple-entry address history buffer for detecting sequential reads to initiate prefetching
IL102083A (en) * 1992-06-03 1997-01-10 Laser Ind Ltd Laser beam delivery system
US5381539A (en) * 1992-06-04 1995-01-10 Emc Corporation System and method for dynamically controlling cache management
US5410653A (en) * 1992-06-16 1995-04-25 International Business Machines Corporation Asynchronous read-ahead disk caching using multiple disk I/O processes and dynamically variable prefetch length
US5566324A (en) * 1992-12-24 1996-10-15 Ncr Corporation Computer apparatus including a main memory prefetch cache and method of operation thereof
DE69327981T2 (de) * 1993-01-21 2000-10-05 Advanced Micro Devices Inc Kombinierte Speicheranordnung mit einem Vorausholungspuffer und einem Cachespeicher und Verfahren zur Befehlenversorgung für eine Prozessoreinheit, das diese Anordnung benutzt.
US5586294A (en) * 1993-03-26 1996-12-17 Digital Equipment Corporation Method for increased performance from a memory stream buffer by eliminating read-modify-write streams from history buffer
US5588128A (en) * 1993-04-02 1996-12-24 Vlsi Technology, Inc. Dynamic direction look ahead read buffer
US5388247A (en) * 1993-05-14 1995-02-07 Digital Equipment Corporation History buffer control to reduce unnecessary allocations in a memory stream buffer
US5490113A (en) * 1994-06-15 1996-02-06 Digital Equipment Corporation Memory stream buffer

Also Published As

Publication number Publication date
JPH0962573A (ja) 1997-03-07
EP0762288A3 (en) 1997-03-19
KR100240911B1 (ko) 2000-01-15
US5664147A (en) 1997-09-02
KR970012167A (ko) 1997-03-29
EP0762288A2 (en) 1997-03-12
DE69616465D1 (de) 2001-12-06
DE69616465T2 (de) 2002-05-02
EP0762288B1 (en) 2001-10-31

Similar Documents

Publication Publication Date Title
JP3541998B2 (ja) データ・キャッシュ・システム及び方法
US6085291A (en) System and method for selectively controlling fetching and prefetching of data to a processor
US5737565A (en) System and method for diallocating stream from a stream buffer
US5758119A (en) System and method for indicating that a processor has prefetched data into a primary cache and not into a secondary cache
US5740399A (en) Modified L1/L2 cache inclusion for aggressive prefetch
EP1388065B1 (en) Method and system for speculatively invalidating lines in a cache
US6105111A (en) Method and apparatus for providing a cache management technique
US7493452B2 (en) Method to efficiently prefetch and batch compiler-assisted software cache accesses
USRE45078E1 (en) Highly efficient design of storage array utilizing multiple pointers to indicate valid and invalid lines for use in first and second cache spaces and memory subsystems
US8725987B2 (en) Cache memory system including selectively accessible pre-fetch memory for pre-fetch of variable size data
US5170476A (en) Data processor having a deferred cache load
US20080155226A1 (en) Prefetch mechanism based on page table attributes
US20060179174A1 (en) Method and system for preventing cache lines from being flushed until data stored therein is used
JP2000250813A (ja) I/oキャッシュ・メモリにおけるデータ管理方法
JPH07129471A (ja) 主メモリ・プリフェッチ・キャッシュを含むコンピュータ装置とその作動方法
KR100234647B1 (ko) 인스트럭션 프리페치 방법 및 데이터 처리 시스템
US6959363B2 (en) Cache memory operation
EP2115598B1 (en) Hardware triggered data cache line pre-allocation
US20060179173A1 (en) Method and system for cache utilization by prefetching for multiple DMA reads
JPH10320285A (ja) キャッシュメモリ及び情報処理システム
KR20040047398A (ko) 캐쉬 메모리를 이용한 데이터 억세스 방법
GB2454808A (en) Cache which prefetches data at a second address when an access matches a first address
GB2401227A (en) Cache line flush instruction and method

Legal Events

Date Code Title Description
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: 20040316

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20040317

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040325

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: 20080409

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20080409

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20090409

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20090409

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20100409

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20110409

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20110409

Year of fee payment: 7

LAPS Cancellation because of no payment of annual fees