(57)【特許請求の範囲】
【請求項１】
データ処理システムにおけるプロセッサによって使用されるデータをプリフェッチするための方法にして、
（ａ）データ・ラインに対する前記プロセッサからのリクエストを受け取るステップと、
（ｂ）前記リクエストに応答してストリームを割り当てるステップと、
（ｃ）前記ストリームにおけるエレメントによって表されたデータ・ラインに対する前記プロセッサからのその後のリクエストを受け取るステップと、
（ｄ）前記ストリームにおけるエレメントによって表されたデータ・ラインに対する前記プロセッサからの前記その後のリクエストに関連して未だリクエストされてないデータ・ラインのプリフェッチの深さを制御するステップと、
を含み、
前記ステップ（ｄ）は、
第１オペレーション・モードにおいて、前記ストリームにおける前記エレメントの１つによって表されたデータ・ラインに対する前記プロセッサからの各リクエストに対して２つのデータ・ラインをプリフェッチするステップと、
第２オペレーション・モードにおいて、前記ストリームにおける前記エレメントの１つによって表されたデータ・ラインに対する前記プロセッサからの各リクエストに対して２つよりも多くのデータ・ラインをプリフェッチするステップと、を含み、
前記第２オペレーション・モードの前に前記第１オペレーション・モードに入り、前記ストリームにおけるエレメントによって表されたデータ・ラインに対する前記プロセッサからの前記その後のリクエストに応じて、前記第２オペレーション・モードに移行するための設定がなされているか否かの判定を行う、
ことを特徴とする方法。
【請求項２】
前記ストリームにおけるエレメントによって表されたデータ・ラインに対する前記プロセッサからの前記その後のリクエストに関連して未だリクエストされてないデータ・ラインのプリフェッチの方向を制御するステップを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記ストリームはストリーム・フィルタに維持されることを特徴とする請求項１に記載の方法。
【請求項４】
１つ又は複数のデータ・ラインが前記プロセッサの外部の１つ又は複数のバッファに投機的にプリフェッチされることを特徴とする請求項３に記載の方法。
【請求項５】
メイン・メモリからストリーム・バッファにキャッシュ・ラインをプリフェッチするためのシステムにして、前記ストリーム・バッファはバスによって前記メイン・メモリに接続されたプロセッサを援助するものにおいて、
ストリーム・フィルタと、
前記プロセッサに接続されたキャッシュと、
第１キャッシュ・ラインに対する前記プロセッサからの第１リクエストを受け取るための手段と、
前記第１リクエストに応答して、前記第１キャッシュ・ラインのアドレスに依存した内容を有するストリームを前記ストリーム・フィルタにおいて割り当てるための手段と、
第２キャッシュ・ラインに対する前記プロセッサからの第２リクエストを受け取るための手段にして、前記第２キャッシュ・ラインのアドレスが前記ストリーム内に含まれるものと、
前記第２リクエストに応答して前記メイン・メモリから前記ストリーム・バッファにＮ個（Ｎはゼロよりも大きい整数）のキャッシュ・ラインを投機的にプリフェッチするための手段にして、前記Ｎ個のプリフェッチされたキャッシュ・ラインのアドレスは前記ストリームに沿って存在するものと、
第３キャッシュ・ラインのための前記プロセッサからの第３リクエストを受け取るための手段にして、前記第３キャッシュ・ラインのアドレスが前記ストリーム内に含まれるものと、
前記第３リクエストに応答して前記メイン・メモリから前記ストリーム・バッファにＭ個（ＭはＮよりも大きい整数）のキャッシュ・ラインを投機的にプリフェッチするための手段にして、前記Ｍ個のプリフェッチされたキャッシュ・ラインのアドレスは前記ストリームに沿って存在するものと、
を含み、
前記Ｎ個のキャッシュ・ラインを投機的にプリフェッチするための手段は前記システムの第１オペレーション・モードと関連し、前記Ｍ個のキャッシュ・ラインを投機的にプリフェッチするための手段は前記システムの第２オペレーション・モードと関連し、
前記第１オペレーション・モードは前記第２オペレーション・モードの前に実施され、前記第１オペレーション・モードにおける前記第２リクエストに応じて、前記第２オペレーション・モードに移行するための設定がなされているか否かの判定を行う判定手段を更に含み、
前記第２オペレーション・モードはディスエーブル可能であること、
を特徴とするシステム。
【請求項６】
前記ストリーム・バッファの１つ又は複数のラインは、前記プロセッサを含むチップの外に含まれることを特徴とする請求項５に記載のシステム。
【請求項７】
プロセッサによってリクエストされたキャッシュ・ラインをメモリから投機的にプリフェッチするための方法にして、
第１キャッシュ・ラインに対するリクエストを前記プロセッサから受け取るためのステップと、
前記第１キャッシュ・ラインが前記プロセッサに接続されたキャッシュ内に含まれているかどうかを決定するステップと、
前記第１キャッシュ・ラインが前記プロセッサに接続されたキャッシュ内に含まれていない場合、前記第１キャッシュ・ラインのアドレスがストリーム・フィルタ内に含まれたアドレスに一致するかどうかを決定するステップと、
前記第１キャッシュ・ラインのアドレスが前記ストリーム・フィルタ内に含まれたアドレスに一致しない場合、前記第１キャッシュ・ラインのアドレスをインクレメントして第１インクレメント・アドレスを作成し、前記第１インクレメント・アドレスを前記ストリーム・フィルタに挿入するステップと、
前記メモリから前記キャッシュに前記第１キャッシュ・ラインをフェッチするステップと、
前記プロセッサから第２キャッシュ・ラインに対するリクエストを受け取るステップにして、前記第２キャッシュ・ラインのアドレスが前記第１インクレメント・アドレスに対応するものと、
前記第２キャッシュ・ラインが前記キャッシュ内に含まれているかどうかを決定するステップと、
前記第２キャッシュ・ラインが前記キャッシュ内に含まれていない場合、前記第１インクレメント・アドレスをインクレメントして第２インクレメント・アドレスを作成し、アドレスのストリームをストリーム・フィルタにおいて割り当てるステップにして、前記ストリームの先頭は前記第２インクレメント・アドレスに対応するアドレスを有するものと、
前記第２キャッシュ・ラインと前記第２インクレメント・アドレスに対応したアドレスを有する第３キャッシュ・ラインを、前記メモリから前記キャッシュにフェッチするステップと、
第３インクレメント・アドレスに対応したアドレスを有する第４キャッシュ・ラインを、前記メモリからストリーム・バッファにおける第１ラインにフェッチするステップにして、前記第３インクレメント・アドレスは前記第２インクレメント・アドレスのインクレメントに対応するものと、
前記第３キャッシュ・ラインに対するリクエストを前記プロセッサから受け取るステップと、
前記ストリームの先頭が前記第３インクレメント・アドレスに対応したアドレスを有するように前記ストリームを更新するステップと、
前記ストリーム・バッファの前記第１ラインから前記キャッシュに前記第４キャッシュ・ラインをフェッチするステップと、
第４インクレメント・アドレスに対応したアドレスを有する第５キャッシュ・ラインを、前記メモリから前記ストリーム・バッファの前記第１ラインにフェッチするステップにして、前記第４インクレメント・アドレスは前記第３インクレメント・アドレスのインクレメントに対応するものと、
ブラスト・モード（前記ストリームにおけるエレメントの１つによって表されたデータ・ラインに対する前記プロセッサからの各リクエストに対して２つよりも多くのデータ・ラインをプリフェッチするオペレーション・モード）である場合に、前記第４キャッシュ・ラインに対応するリクエストを前記プロセッサから受け取るステップと、前記ストリームの先頭が前記第４インクレメント・アドレスに対応したアドレスを有するように前記ストリームを更新するステップと、
前記ストリーム・バッファの前記第１ラインから前記キャッシュに前記第５キャッシュ・ラインをフェッチするステップと、
第５インクレメント・アドレスに対応したアドレスを有する第６キャッシュ・ラインを、前記メモリから前記ストリーム・バッファの前記第１ラインにフェッチするステップにして、前記第５インクレメント・アドレスは前記第４インクレメント・アドレスのインクレメントに対応するものと、
第６インクレメント・アドレスに対応したアドレスを有する第７キャッシュ・ラインを、前記メモリから前記ストリーム・バッファの第２ラインにフェッチするステップにして、前記第６インクレメント・アドレスは前記第５インクレメント・アドレスのインクレメントに対応するものと、
第７インクレメント・アドレスに対応したアドレスを有する第８キャッシュ・ラインを、前記メモリから前記ストリーム・バッファの第３ラインにフェッチするステップにして、前記第７インクレメント・アドレスは前記第６インクレメント・アドレスのインクレメントに対応するものと、
前記第５キャッシュ・ラインに対するリクエストを前記プロセッサから受け取るステップと、
前記ストリームの先頭が前記第５インクレメント・アドレスに対応したアドレスを有するように前記ストリームを更新するステップと、
前記ストリーム・バッファの前記第１ラインから前記キャッシュに前記第６キャッシュ・ラインをフェッチするステップと、
前記ストリーム・バッファの前記第２ラインから前記ストリーム・バッファの前記第１ラインに前記第７キャッシュ・ラインをフェッチするステップと、
前記ストリーム・バッファの前記第３ラインから前記ストリーム・バッファの前記第２ラインに前記第８キャッシュ・ラインをフェッチするステップと、
前記メモリから前記ストリーム・バッファの前記第３ラインに第９キャッシュ・ラインをフェッチするステップと、
を含む方法。
【請求項８】
前記キャッシュは、前記プロセッサに組み合わせられた主キャッシュであることを特徴とする請求項７に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、概して云えば、データ処理システムに関するものであり、詳しく云えば、データ・キャッシュに関してデータの進行的（progressive)プリフェッチを行うためのシステム及び方法に関するものである。
【０００２】
【従来の技術】
現行のプログラム及びデータを高速度でプロセッサ（ＣＰＵ）にとって使用可能にすることによって、データ処理システムにおける処理の速度を増加させるために、特別の非常に高速度のメモリが使用されることが時々ある。そのような高速度のメモリはキャッシュとして知られており、メイン・メモリのアクセス時間とプロセッサ・ロジックとの間の速度差を補償するために、大型のコンピュータシステムにおいて使用されることが時々ある。処理速度はメイン・メモリの速度によって最も制限される結果、プロセッサ・ロジックは、通常、メイン・メモリのアクセス時間よりも速い。オペレーティング・システムの不一致を補償するために使用されるテクニックはＣＰＵとメイン・メモリとの間に極めて速い小型のメモリを使用することである。そのメモリのアクセス・タイムはプロセッサのロジック伝播遅延に近い。それは、ＣＰＵにおいて現在実行されているプログラムのセグメント及び現在の計算において頻繁に使用される一時的データを記憶するために使用される。プログラム（命令）及びデータを高速度で使用可能にすることによって、プロセッサのパフォーマンス・レートを向上させることが可能である。
【０００３】
多数の一般的なプログラムの分析の結果、任意の所与のタイム・インターバルにおけるメモリへの参照は、メモリにおける僅かなローカライズされた領域に制限される傾向があるがわかった。この現象は、「参照の局所性」という特性として知られている。この特性の理由は、一般的なコンピュータ・プログラムは、屡々遭遇するプログラム・ループ及びサブルーチン・コールと共に直線的に流れる。プログラム・ループが実行される時、ＣＰＵは、そのループを構成するメモリ内の命令のセットを繰り返し参照する。所与のサブルーチンが呼び出される時、それの命令セットがメモリからフェッチされる。従って、ループ及びサブルーチンは命令のフェッチのためのメモリへの参照をローカライズする傾向がある。更に低い程度まで、データに対するメモリ参照もローカライズされる傾向がある。テーブル・ルックアップ手順は、そのテーブルが記憶されているメモリ内の部分を繰り返し参照する。反復的手順が共通のメモリ・ロケーションを参照し、多くの数字がメモリのローカル部分内に制限される。これらすべての観察の結果が参照の局所性であり、短期間にわたって一般的なプログラムによって発生される命令のアドレスはメモリの僅かなローカライズされた領域を繰り返し参照し、一方、メモリの残り部分は滅多にアクセスされない。
【０００４】
プログラム及びデータのアクティブナ部分が拘束の小型メモリにおかれる場合、平均的なメモリ・アクセス・タイムは減少し、従って、プログラムの合計実行時間を減少させる。そのような高速の小型メモリは、前述のように、キャッシュ・メモリと呼ばれる。キャッシュ・メモリのアクセス・タイムはメイン・メモリのアクセス・タイムよりも５乃至１０倍も小さいことが多い。キャッシュ・メモリはメモリ・ハイアラーキにおける最高速のコンポーネントであり、ＣＰＵコンポーネントの速度に近い。
【０００５】
キャッシュ機構の基本的な理念は、最も頻繁にアクセスされる命令及びデータを高速度キャッシュ・メモリに保持することによって、平均的なメモリ・アクセス・タイムがキャッシュ・メモリのアクセス・タイムに近づくことである。キャッシュ・メモリはメイン・メモリの数分の１のサイズしかないけれども、メモリ・リクエストの大部分は、プログラムの参照の局所性のために高速度キャッシュ・メモリ内で検出されるであろう。
【０００６】
キャッシュ・メモリの基本的オペレーションは次のようである。ＣＰＵがメモリにおけるワードをアクセスする必要がある時、キャッシュ・メモリが調べられる。そのワードがキャッシュ・メモリにおいて見つかる場合、それはその高速キャッシュ・メモリから読み取られる。ＣＰＵによってアクセスされたワードがキャッシュ・メモリにおいて見つからない場合、そのワードを読み取るためにメイン・メモリがアクセスされる。そこで、そのアクセスされたワードを含むワード・ブロックがメイン・メモリからキャッシュ・メモリに転送される。このように、メイン・メモリへのその後の参照によって必要なワードが高速キャッシュ・メモリにおいて見つかるよう、幾つかのデータがキャッシュ・メモリに転送される。
【０００７】
コンピュータ・システムの平均的メモリ・アクセス・タイムはキャッシュ・メモリの使用によってかなり改善可能である。キャッシュ・メモリのパフォーマンスは「ヒット率」と呼ばれる数値によって測定されることが多い。ＣＰｕがメモリを参照し、キャッシュにおいてそのワードを見つける時、それは「ヒット」を生じたと云われる。そのワードがキャッシュ・メモリにおいて見つからない場合、それはメイン・メモリ内にあり、「ミス」としてカウントされる。殆ど時間、ＣＰＵがメイン・メモリの代わりにキャッシュ・メモリをアクセスするようにヒット率が十分に高い場合、平均的アクセス時間は高速キャッシュ・メモリのアクセス時間に近くなる。例えば、１００ｎｓのキャッシュ・アクセス・タイム、１０００ｎｓのメイン・メモリアクセス・タイム、及び０.９のヒット率を持ったコンピュータは２００ｎｓの平均アクセス・タイムを生じる。これは、キャッシュ・メモリのない同様のコンピュータ（そのアクセス・タイムは１０００ｎｓ）に比べてかなりの改善である。
【０００８】
最近のマイクロプロセッサでは、プロセッサ・サイクル・タイムはテクノロジの発展によって改善し続けている。又、理論的実行、深いパイプライン、多くの実行エレメント等の設計テクニックはマイクロプロセッサのパフォーマンスを改善し続けている。その改善されたパフォーマンスは、マイクロプロセッサに与えるために多くのデータ及び命令を要求するので、メモリ・インターフェースに重い負荷を課する。メモリ待ち時間の現象を援助するために大きなオン・チップ・キャッシュ（Ｌ１キャッシュ）が使用される。それらは、大型のオフ・チップ・キャッシュ（Ｌ２キャッシュ）によって拡張されることが多い。
【０００９】
待ち時間を減少させるのに先立ってメモリ・データをＬ１キャッシュに供給しようとするプリフェッチ・テクニックが実施されることが多い。理想的には、プロセッサが必要とするメモリ・データのコピーがいつもＬ１キャッシュ内にあるよう、プログラムはデータ及び命令を十分に前にプリフェッチするであろう。
【００１０】
問題は、すべての場合において必要とされるデータ・アドレスを明示的に決定するに十分な先回り情報を、マイクロプロセッサ・アーキテクチャが与えないことである。例えば、メモリにおけるデータ・オペランドに対するアドレス自身はメモリ内にあり、メモリ命令によって使用されるべき第１命令によってフェッチされなければならない。そのようなシーケンスの場合、プリフェッチを行うためには、プロセッサは前もってアドレスを持たない。
【００１１】
命令又はデータのプリフェッチはその分野ではよく知られている。しかし、既存のプリフェッチ・テクニックは命令又はデータを早くプリフェッチし過ぎることが多い。プリフェッチしそしてその後そのプリフェッチされた命令又はデータを使用しないという問題は、
（１）プロセッサが必要とするデータをプリフェッチ・データが変位したかもしれないこと、
（２）プリフェッチ・メモリ・アクセスがその後のプロセッサ・キャッシュ再ロードにそのプリフェッチ・アクセスを待たせ、従って、必要なデータの待ち時間を増加させることがあること、
である。これらの影響は両方ともＣＰＵの効率を低下させる。従って、その分野において必要なことは、マイクロプロセッサのパフォーマンスを低下させることなく、キャッシュ・ミスによりＬ１キャッシュへのデータ及び命令アクセスの待ち時間を減少させる改良されたプリフェッチ・テクニックである。
【００１２】
【発明が解決しようとする課題】
本発明の目的は、マイクロプロセッサにおいて、Ｌ１及びＬ２キャッシュと関連してストリーム・フィルタを使用してメモリからプリフェッチされたデータを供給し、マイクロプロセッサ・システムにおけるデータ待ち時間を減少させることにある。
【００１３】
本発明のもう１つの目的は、プリフェッチの深さを制御するためにプリフェッチ・データを同時に且つ進行的にインクレメントする多数のストリームをサポートすることができる独特のストリーム・フィルタ装置を使用することにある。
【００１４】
【課題を解決するための手段】
本発明は３つの進行的プリフェッチ・モード、即ち、正規モード、データ・プリフェッチ（ＤＰ）モード、及びブラスト・モードを利用する。正規モードでは、データはプリフェッチされない。データ・プリフェッチ・モードでは、２つのキャッシュ・ラインがプリフェッチされる。１つのラインはＬ１キャッシュに対するものであり、もう１つのラインはストリーム・バッファに対するものである。本発明の好適な実施例では、ブラスト・モードにおいて４つのラインがプリフェッチされる。そのうちの２つのラインはデータ・プリフェッチ・モードにおけるものと同じであり、２つの追加のラインはストリーム・バッファに対する対するものである。プリフェッチ・バッファはプロセッサ・チップ、キャッシュ・チップ、外部チップ、又はメモリ・カード上にパッケージ可能であり、本発明の範囲内にあるものである。
【００１５】
本発明の別の実施例では、正規モードにおいてはデータはプリフェッチされない。データ・プリフェッチ・モードでは、１つのラインがストリーム・バッファにプリフェッチされる。ブラスト・モードでは、１つのラインがＬ１キャッシュにプリフェッチされ、更なるラインがストリーム・バッファにプリフェッチされる。本発明の１つの実施例では、３つのキャッシュ・ラインがブラスト・モードにおいてストリーム・バッファにプリフェッチされる。
【００１６】
ブラスト・モードの実施例において、１つのストリーム・バッファ・キャッシュ・ラインがプロセッサ・チップ上にバッファされ、同じストリームの他のキャッシュ・ラインが、システム・バスにインターフェースするノード・コントローラ・チップ上にバッファされる。
【００１７】
【発明の実施の形態】
以下の説明では、本発明の十分な理解を与えるために、特定のワード長又はバイト長等のような数多くの特定の細部を説明する。しかし、本発明がそのような特定の細部の説明なしでも実施可能であることは当業者には明らかであろう。他の例では、不必要な詳述で本発明を不明瞭にしないようにするために、周知の回路はブロック図形式で示される。大部分に対して、タイミング事項等に関する詳細については、それが本発明の十分な理解を得るために必要ない限り及び当業者のスキルの範囲にある限り省略した。
【００１８】
図面を参照すると、示されたエレメントは必ずしも縮尺して示されたものではなく、同様の又は同じエレメントはそれらの図面を通して同じ参照番号によって表される。
【００１９】
図１を参照すると、本発明を有利に具体化するデータ処理システムが示される。マルチプロセッサ・システム１００は、システム・バス１２４に動作的に接続された多数のプロセッサ装置１０６、１０８、１１０を含む。システム１００では、任意の数のプロセッサ装置が利用可能であることに注意してほしい。又、システム・バス１２４には、システム・メモリ１０２へのアクセスを制御するメモリ・コントローラ１０４が接続される。メモリ・コントローラ１０４は、Ｉ／Ｏ装置１２８に結合されたＩ／Ｏコントローラ１２６にも接続される。プロセッサ装置１０６、１０８、１１０、Ｉ／Ｏコントローラ１２６、及びＩ／Ｏ装置１２８は、すべて、ここではバス装置と呼ぶこともできる。図示のように、各プロセッサ装置１０６、１０８、１１０は、それぞれ、プロセッサとＬ１キャッシュ１１２、１１４、１１６とを含む。Ｌ１キャッシュはそれぞれのプロセッサと同じチップ上に設置可能である。プロセッサ装置１０６、１０８、１１０には、それぞれ、Ｌ２キャッシュ１１８、１１８、１２０が接続される。これらのＬ２キャッシュは、それが接続されたプロセッサ装置を介してシステム・バス１２４に接続される。
【００２０】
Ｌ１及びＬ２キャッシュの各対は、通常、直列的に関連する。Ｌ１キャッシュはストア・イン或いはライトスルーとして実現可能であり、一方、大型で遅いＬ２キャッシュは書戻しキャッシュとして実現される。Ｌ１及びＬ２キャッシュの両方とも物理的にはプロセッサ装置の一部分として実現され、プロセッサ装置の内部バスを介して接続される。Ｌ２コントローラはチップ外にあってもよく、本発明が依然として適用可能である。
【００２１】
次に、図２を参照すると、本発明に従って動作するように構成可能なデータ処理システム２００が示される。そのシステム２００はシステム１００とは別のアーキテクチャのものである。システム１００及び２００では、プロセッサ及びキャッシュの基本的なオペレーションは同じである。メモリ・コントローラ１０４及びノード・コントローラ２０５の制御及び機能は、本発明に関しては同じである。
【００２２】
システム２００において、プロセッサ２０１は内部Ｌ１キャッシュ２０２を有し、それは外部Ｌ２キャッシュ２０３に接続される。プロセッサ２０１はバス２０４によってノード・コントローラ２０５に接続される。ノード・コントローラ２０５は、プロセッサ２０１とシステム２００の残りの部分との接続に関してその分野では知られた基本的機能を遂行する。ノード・コントローラ２０５はバス２０６によってスイッチ２０７に接続される。スイッチ２０７はクロス・ポイント・スイッチでよく、他のプロセッサ及びＩ／Ｏ装置をバス２０８によってシステム・メモリ２０９に結合することができる。この説明の残り部分はシステム２００に関するものである。しかし、本発明に関する説明も関連しており、それはシステム１００においても実施可能である。
【００２３】
本発明の目的は、プロセッサ２０１がＬ１キャッシュ２０２におけるキャッシュ・ラインにおいてかなりの時間量をヒットし、従ってシステム・メモリ２０９からのアドレス及びデータ情報の検索を最小にする（それはプロセッサ２０１のパフォーマンスを低下させる）ように、キャッシュ・ラインをＬ１キャッシュ２０２にプリフェッチするための効率的且つ正確なテクニックを提供することである。
【００２４】
プロセッサ・オペレーションのパフォーマンスを改善するために設定された１つの従来技術は、キャッシュ・ラインをプリフェッチするためにストリーム・フィルタ及びバッファを利用することであった。図３に示されるように、ストリーム・フィルタ及びストリーム・バッファがその分野では知られている。ストリーム・フィルタは、使用されないデータのプリフェッチの発生を減少させなければならない。これらのフィルタはアドレス及び方向情報を含むヒストリ・バッファである。そのフィルタは、Ｌ１キャッシュにおいてミスしたラインから見て直列的には次に高いラインであるキャッシュ・ラインのアドレスを含む。次に高いそのキャッシュ・ラインへのアクセスが行われる場合、ストリーム状態が検出され、ストリーム・バッファが割り当てられる。フィルタは、ライン・アドレス「Ｘ」へのアクセスがあった場合、ライン・アドレス「Ｘ＋１」を書き込まれるであろう。アドレス「Ｘ＋１」が依然としてストリーム・フィルタに存在する時に次のアクセスがそのアドレス「Ｘ＋１」に対して行われる場合、「Ｘ＋１」がストリームとして割り当てられる。
【００２５】
ストリーム・バッファは、可能性あるキャッシュ・データを保持するプリフェッチ・バッファである。その考えは、そのプロセッサ内で実行中のプログラムがデータ／命令の順次ストリームを実行している場合、更なるラインをストリーム・バッファにプリフェッチすることは有用なことになり得る。従って、その後のキャッシュ・ミスは、ストリーム・バッファにおけるデータを見つけることが可能である。
【００２６】
ストリーム・フィルタ及びストリーム・バッファは、ストリーム・バッファをミスするＬ１キャッシュ・ミスが存在する場合、そのミス・アドレスがストリーム・フィルタに記憶されたアドレスと比較されるように共同する。ストリーム・フィルタにおいてヒットがある（データの直列ラインへの直列的アクセスが存在したことを意味する）場合、次のラインも将来必要となる可能性が高い可能性が存在する。ストリーム・バッファ及びストリーム・フィルタに関する更なる説明に関しては、１９９４年発行のＩＥＥＥの１０６３乃至６８７９ページの S.Palacharla 及び R.Kessler による記事「二次キャッシュ置換としてのストリーム・バッファの評価（Evaluating Stream Buffers as a Secondary Cache Replacement）」等に記載されている。
【００２７】
次に、図４を参照すると、本発明に従って構成されたシステム２００の更に詳細な図及びＣＰＵ２０１通したデータ・フローが示される。命令及びデータに対する別のＬ１キャッシュの使用を含むそのフローの変形がその分野では知られている。Ｌ１キャッシュ２０２は、その分野では知られた任意の置換ポリシを使用してメモリ２０９からのデータの使用されたコピーを頻繁に保持する。大きいＬ２キャッシュ２０３はＬ１キャッシュ２０２よりも多くのデータを保持し、通常は、メモリ・コヒーレンシ・プロトコルを制御する。本発明では、Ｌ１キャッシュ２０２におけるデータはＬ２キャッシュ２０３におけるデータのサブセットでよい。Ｌ１キャッシュ２０２及びＬ２キャッシュ２０３は「ストア・イン」キャッシュである。他の機能的エレメント（Ｉ／Ｏを含む）がその分野で知られたスヌープ・プロトコルを使用してデータを争う。スヌーピングの一例は、米国特許出願第０８/４４２,７４０に開示されている。
【００２８】
ＣＰＵ２０１に対して示された境界はチップ境界及び機能的境界を表し、本発明の技術的範囲に関する制限を意味するものではない。ＰＣＣ４０４はプロセッサ・キャッシュ・コントローラであり、メモリ・サブシステムに対するフェッチ及びストアを制御する。ＰＣＣ４０４は、Ｌ１キャッシュ２０２に対するディレクトリの実施及び実アドレスへの有効アドレスの変換及びその逆の変換のようなその分野では知られた他の機能を有する。プリフェッチ・バッファ（ＰＢＦＲ）４０２は、ＣＰＵ２０１及びＬ１キャッシュ２０２にステージされるべきメモリ・データの或数のラインを保持する。ＰＢＦＲ４０２はストリーム・バッファである。
【００２９】
ＰＣＣ４０４がデータをフェッチする時、それがＬ１キャッシュ２０２にある（Ｌ１ヒットである）場合、それはＰＣＣ４０４に送られる。それがＬ１キャッシュ２０２にない（Ｌ１ミスである）がＬ２キャッシュ２０３にある（Ｌ２ヒットである）場合、Ｌ１キャッシュ２０２のラインがＬ２キャッシュ２０３からのこのデータでもって置換される。この場合、データはＬ１キャッシュ２０２及びＰＣＣ４０４に同時に送られる。同様に、Ｌ２キャッシュ２０３においてミスがある場合、データはメモリ２０９からＢＩＵ４０１にフェッチされ、Ｌ１キャッシュ２０２、Ｌ２キャッシュ２０３、及びＰＣＣ４０４に同時にロードされる。このオペレーションに関する変形はその分野では知られている。データ・ストア・オペレーションは、データがＬ１ラインに記憶されてオペレーションを完了することを除けば、フェッチ・オペレーションと同じである。
【００３０】
以下の説明では、ストリーム・バッファの種々な部分がシステム２００の種々な部分に設けられる。この実施例では、ストリーム・バッファは４つのキャッシュ・ラインをストアする機能を有するが、任意の数のキャッシュ・ラインがそのストリーム・バッファ内で実施可能である。そのストリーム・バッファの１つのキャッシュ・ラインがＬ１キャッシュ２０２において実施される。特に、Ｌ１キャッシュ２０２におけるキャッシュ・ラインの１つが、ストリーム・バッファのキャッシュ・ラインの１つの機能に対して利用される。ストリーム・バッファの第２キャッシュ・ラインはＰＢＦＲ４０２に設けられる。ストリーム・バッファの他の２つのキャッシュ・ラインは、ノード・コントローラ２０５におけるＰＢＦＲ２（４０５）及びＰＢＦＲ３（４０６）に設けられる。ノード・コントローラ２０５は、バス２０４に沿ったＣＰＵ２０１から下流のチップ上に設けることが可能である。メモリ・コントローラ１０４は、システム１００のアーキテクチャが利用される場合、これらのストリーム・バッファ・ラインを含んでもよい。
【００３１】
上記のＩＥＥＥの記事において検討されているように、ストリーム・フィルタ及びストリーム・バッファの基本的なオペレーションはリクエストされたキャッシュ・ラインにおいてＬ１キャッシュ・ミスがある時、そのキャッシュ・ラインのアドレスがインクレメントされ（一般には、１アドレスずつ）、このインクレメントされたアドレスがストリーム・フィルタ４０３に挿入される。Ｌ１キャッシュ２０２におけるキャッシュ・ラインのその後のミスの発生時に、このＬ１キャッシュ・ミスのアドレスがフィルタ４０３に含まれたアドレスに比較される。アドレスの一致が得られた場合、キャッシュ・ラインのストリームがそのストリーム・バッファ内に割り当てられる。
【００３２】
上記のように、キャッシュ・ミスがある時、フィルタ・バッファは次の逐次キャッシュ・ラインのアドレスを書き込まれる。そのフィルタは、そのような事象の「ヒストリ」より成るそのようなアドレスを保持し得る多数のロケーションを含む。それらはＬＲＵベースで置換可能である。キャッシュ・ミスがある時はいつも、フィルタにおけるアドレスがキャッシュ・ライン・ミスのアドレスと比較される。ヒットがある場合、フィルタ・ヒットが存在すると云われ、ストリームが割り当てられる。ストリーム・モードでは、エクストラ・キャッシュ・ラインが、ストリームの一部分としてＬ１キャッシュがそれを必要とすることを期待して、ストリーム・バッファにプリフェッチされる。
【００３３】
図５は、本発明に従ってストリーム・バッファのオペレーションの高レベルの機能的な図を表す。ＣＰＵ２０１は、使用されるアーキテクチャに従って有効アドレス（ＥＡ）を発生する。ＥＡは潜在的にはオフセットを有するプログラム・アドレスである。ＣＰＵ２０１は変換されたアドレス、即ち、そのＥＡに対応した実アドレス（ＲＡ）を発生する。その実アドレスはフィルタ待ち行列５０２によって使用されるが、フィルタ待ち行列がその有効アドレスを代替えとして使用することは本発明の技術的範囲内であろう。ＲＡはフィルタ待ち行列５０２におけるＲＡと一斉に比較される。そのエントリがそれの有効ビット（Ｖ）によって表されるように有効である場合、比較一致はフィルタ・ヒットと呼ばれる。又、フィルタ待ち行列５０２は、予測ストリームがインクレメント或いはデクレメント（＋／−１、又はアップ／ダウン）されるべきことを表す各エントリに対する予測方向インディケータを含む。各フィルタ待ち行列・エントリは、そのアドレスに対応するストリームがあるかどうか及び、それが肯定される場合、そのストリームのストリーム番号を表すフィールドを含む。
【００３４】
よく知られているように、メモリ２０９はサブセクションに論理的に分割されることが多い。特に、メモリ２０９は、オペレーティング・システムによってプログラムに割り当てられたメモリのインクレメントであるページに分割され、ＤＡＳＤ（ダイレクト・アクセス記憶装置）とメモリ２０９の間で「ページング」データを制御するために使用可能である。ページは順次ＥＡに関して非順次的に割り当て可能である。従って、ＥＡがストリーム・データのプリフェッチのために使用される場合、ページ境界を横切った時に変換器（ＸＬＡＴＥ）５０３においてアドレス変換が行われなければならない。それは、そのストリーム・バッファが、前述のように順次的でない実アドレスを含むためである。各ページは、更に、ラインに分割される。キャッシュの実施によってライン・サイズが決定され、それはキャッシュ・ラインにおけるメモリ・データの量に対応する。キャッシュ・ミスの結果、１ラインのデータがキャッシュに変換される。
【００３５】
フィルタ・ヒットがある時、ストリームがストリーム・アドレス待ち行列５０１に割当可能であり、ストリーム・データ・バッファ５０６への対応する割当が行われる。ストリーム・アドレス・エントリは、特定の割り当てられたストリームに対する次のデータ・ラインの予測有効アドレスを含む。もう一度云えば、これは実施選択であり、代替えとして、実アドレスを使用してもよかった。ストリーム・アドレス・エントリは、そのストリームが割り当てられることを表す有効ビット（Ｖ）も含む。ストリームの状態を追跡するために使用される状態フィールドもある。又、予測方向のコピーもストリーム・バッファに保持される。比較器５０５はプロセッサＥＡとストリーム・アドレス待ち行列に含まれたページ及びライン・アドレスとを比較する。一致が生じた場合、それはストリーム・ヒットと呼ばれる。
【００３６】
図５に示された機能性は別の方法でも実施可能であり、それも依然として本発明の技術的範囲内である。
【００３７】
メモリ２０９におけるメモリ・スペースは１２８個のバイト・ラインに分割可能である。各ラインは半分に分割可能であるので、１つのラインの偶数番の半分はアドレス０から６３までであり、奇数番の半分はアドレス６４から１２７までである。前述のように、ＣＰＵ２０１は、メモリにおけるキャッシュ可能なラインに対する実アドレスに変換される論理的アドレス（ＥＡ）を発生する。メモリは２＊Ｎバイトのページに分割される。それらのページはサイズのキャッシュ・エントリに対応するラインに分割される。キャッシュ・ミスがある度に、関連する実アドレスが分析される。その実アドレスがラインの偶数番の半分にある場合、潜在的ストリームはインクレメント１である。待ち行列５０２におけるＬＲＵフィルタ待ち行列は「アップ」の方向をマークされ、ライン・ミスＲＡは「１」だけインクレメントされてそのエントリに保管される。ＲＡがそのラインの奇数側にある場合、待ち行列５０２におけるＲＡエントリは１だけデクレメントされ、「ダウン」がそのエントリにマークされる。
【００３８】
ミスの場合にフィルタ・エントリにＲＡを保管すること及びその後のミスをそのエントリと比較してアップ又はダウンの方向を決定することは、別の実施例として本発明の範囲内である。
【００３９】
ストリームが割り当てられる時、「次の」有効ライン・アドレスがストリーム・アドレス・バッファ５０１に保管される。バッファ５０１は各アクティブ・ストリームに対するエントリを含む。有効ビット「Ｖ」はそのエントリが使用中であることを表し、方向インディケータはそのストリームがアップであるか又はダウンであるか（＋／−）を表す。状態フィールドはそのストリームの状態を表すために使用される。ストリーム・アドレス・バッファ５０１と関連してストリーム・データ・バッファ５０６があり、それはプリフェッチされたデータのラインを保持する。フィルタ待ち行列５０２及びストリーム・バッファ５０１の両方の予測アドレスとも、ページ境界が遭遇する時に終了する。これは、そのような事象が新しい変換を必要とするためである。
【００４０】
Ｌ１キャッシュ２０２及びＬ２キャッシュ２０３のキャッシュ・ミスがある場合、メモリ２０９をアクセスする前にストリーム・バッファが質問される。フィルタ待ち行列５０２及びストリーム・アドレス・バッファ５０１の回路を結合することは本発明の明らかな実施例である。
【００４１】
前述のストリーム・フィルタ及びストリーム・バッファに関する及び前述のＩＥＥＥの記事における従来方法はＬ２キャッシュの代替えとしてストリーム・バッファの効果を分析している。この場合、プリフェッチはいつもインクレメント的なものとして予測される。更に、１ライン又はワードではなく「ストライド」とバッファに保管されたストライド長によってアドレスがインクレメントされるというストライド・フィルタを説明し、図示することにする。ストライド・フィルタの概念は別の実施例として実現され、本発明の技術範囲内であろう。
【００４２】
図６乃至図９を参照すると、本発明の進行的プリフェッチ・モードの流れ図が示される。前述のように、本発明は３つの進行的プリフェッチ・モード、即ち、正規モード、データ・プリフェッチ・モード、及びブラスト・モードを可能にする。正規モードでは、データはプリフェッチされない。データ・プリフェッチ・モードでは、２つのライン、即ち、Ｌ１キャッシュに対する１つのライン及びストリーム・バッファに対する１つのラインがプリフェッチされる。ブラスト・モードでは、２つよりも多くのラインが一時にプリフェッチされる。本発明の好適な実施例では、ブラスト・モードにおいて、４つのライン、即ち、データ・プリフェッチ・モードにおけるような２つのライン及びストリーム・バッファに対する２つの更なるラインがプリフェッチされる。何れのモードにおいても、プリフェッチされたバッファは、プロセッサ・チップ、キャッシュ・チップ、外部チップ、又はメモリ・カード上にパッケージ可能であり、依然として、本発明の技術的範囲内にある。図６乃至図９は、どの方向にストリームが流れるかを予測するための方向がインクレメントする例を示す。デクレメントする例はこの例の明らかな修正となるであろう。図６乃至図９はデータ・プリフェッチ及びブラスト・モードに入る方法を示す。
【００４３】
ステップ６０１において、ＣＰＵ２０１はキャッシュ・ラインＡで開始するデータをアクセスし始める。ステップ６０２において、キャッシュ・ラインＡがＬ１キャッシュ２０２内にあるかどうかの決定が行われる。それが肯定される場合、プロセスはステップ６０３に進む。そこでは、キャッシュ・ラインＡがＣＰＵ２０１に戻され、プロセスはステップ６０４において終了する。
【００４４】
しかし、キャッシュ・ラインＡにおいてミスがある場合、プロセスはステップ６０５に進む。そこでは、キャッシュ・ラインＡのアドレスがストリーム・フィルタ４０３に含まれたすべてのアドレスに比較される。
【００４５】
キャッシュ・ラインＡがフィルタ４０３内に存在しない場合、プロセスはステップ６０６に進み、そこでは、キャッシュ・ラインＡのアドレスが１だけインクレメントされ、フィルタ４０３内に挿入される。しかる後、ステップ６０７において、キャッシュ・ラインＡはＬ２キャッシュ２０３又はメモリ２０９からＬ１キャッシュ２０２にフェッチされる。このステップはその分野ではよく知られている。
【００４６】
図６乃至図９におけるステップ６０７からステップ６０８への破線の矢印は、ステップ６０８がステップ６０７に続いて直ちに生じてもよく、或いは生じなくてもよいことを表す。一般には、ストリーム・フィルタ内に存在するアドレス・エントリの数と同じ数のミスがキャッシュ・ラインＡ＋１に対するリクエストの前に生じることがある。
【００４７】
或時間遅れで、ＣＰＵ２０１はキャッシュ・ラインＡ＋１をリクエストするかもしれない。再び、ＰＣＣ４０４はキャッシュ・ラインＡ＋１がＬ１キャッシュ２０２内に存在するかどうかを決定する（ステップ６０９）。それが肯定される場合、キャッシュ・ラインＡ＋１がステップ６１０においてＣＰＵ２０１に戻され、プロセスはステップ６１１において終了する。キャッシュ・ラインＡ＋１はＬ１キャッシュ２０２内にあるので、ストリーム・フィルタ４０３との比較一致はなく、Ａ＋１エントリは、それがフィルタ置換アルゴリズムによって再試行されるまでフィルタ４０３に留まる。そのフィルタ置換アルゴリズムは、米国特許出願第５１９,０３２号の教示するところに従って遂行可能である。しかし、Ｌ１キャッシュ２０２内のキャッシュ・ラインＡ＋１においてミスがある場合、フィルタ・ヒットが存在し（ステップ６３７）、プロセスをステップ６１２へ進めさせる。そこでは、リクエストされたキャッシュ・ラインＡ＋１のアドレスがフィルタ４０３にあるアドレスＡ＋１と一致した結果フィルタ４０３においてヒットが生じるので、キャッシュＡ＋２でもって始まるキャッシュ・ラインのストリームが割り当てられる。次に、ステップ６１３において、キャッシュ・ラインＡ＋１がＬ２キャッシュ２０３又はメモリ２０９からＬ１キャッシュ２０２にフェッチされる。又、Ｌ１キャッシュ２０２は、キャッシュ・ラインＡ＋２が存在するかどうかを決定するためにチェックされる。それが存在しない場合、キャッシュ・ラインＡ＋２がＬ２キャッシュ２０３又はメモリ２０９からフェッチされる。
【００４８】
しかる後、ステップ６１４において、キャッシュ・ラインＡ＋３がＬ２キャッシュ２０３内に存在するかどうかの決定が行われる。それが存在しない場合、プロセスはステップ６１５に進み、そこでは、キャッシュ・ラインＡ＋３がメモリ２０９からプリフェッチされ、プリフェッチ・バッファ４０２内に挿入される。しかし、キャッシュ・ラインＡ＋３がキャッシュ２０３内に存在する場合、プロセスはステップ６１５をスキップする。
【００４９】
再び、ステップ６１５からステップ６１６への破線矢印は、ステップ６１６がステップ６１５の後直ちには生じないことがあることを表す。
【００５０】
ステップ６１６において、プロセッサ２０１はキャッシュ・ラインＡ＋２にリクエストし、ラインＡ＋２に対してＬ１キャッシュ２０２へのアクセスを生じさせる。ステップ６１３において、キャッシュ・ラインＡ＋２がＬ１キャッシュ２０２へフェッチされたので、Ｌ１キャッシュ２０２はこのキャッシュ・ラインをＣＰＵ２０１に供給することができるであろう。ステップ６１７において、ストリーム・アドレス・バッファ５０１におけるストリーム・アドレスがそのストリームの先頭においてアドレスＡ＋３を有するように更新される。しかる後、ステップ６１８において、Ｌ１キャッシュ２０２は、キャッシュ・ラインＡ＋３が存在するかどうかを決定するためにチェックされる。それが存在しない場合、キャッシュ・ラインＡ＋３がＬ２キャッシュ２０３又はバッファ４０２からＬ１キャッシュ２０２へフェッチされる。次に、ステップ６１９において、キャッシュ・ラインＡ＋４がＬ２キャッシュ２０３又はメモリ２０９からプリフェッチ・バッファ４０２へフェッチされるであろう。
【００５１】
しかる後、ブラスト・モードがシステム２００においてイネーブルされない場合（ステップ６２０）、プロセスはステップ６１６に戻り、ＣＰＵ２０１が図示のようなインクレメント順次態様でキャッシュ・ラインを通してインクレメントし続ける限り、ステップ６１６乃至６２１を通してループする。ステップ６２１は、ステップ６１６において、ラインＡ＋３に対するＬ１キャッシュ・アクセスが存在し得ることを表す。そこで、ステップ６１７において、ストリームはアドレスＡ＋３でもって更新され、ステップ６１８において、ラインＡ＋４がＬ１キャッシュ２０２へフェッチされ、そしてステップ６１９において、キャッシュ・ラインＡ＋４がバッファ４０２へフェッチされる。
【００５２】
次に、データ・プリフェッチ・モードを説明する。ステップ６２０では、ブラスト・モードがシステム２００においてイネーブルされる場合、キャッシュ・ラインＡ＋３に対するＣＰＵ２０１からのリクエストが存在する時、プロセスはステップ６２２へ進むであろう。ステップ６２２において、そのようなリクエストに対して、ＰＣＣ４０４はＬ１キャッシュ２０２内でキャッシュ・ラインＡ＋３を捜すであろう。キャッシュ・ラインＡ＋３がＬ１キャッシュ２０２に存在するので、キャッシュ・ラインＡ＋３がＣＰＵ２０１へ戻されるであろう。しかる後、ステップ６２３において、ストリーム・アドレス・バッファ５０１におけるストリーム・アドレスがＡ＋４に更新される。ステップ６２４において、キャッシュ・ラインＡ＋４が存在するかどうかを決定するためにＬ１キャッシュ２０２がチェックされる。それが存在しない場合、キャッシュ・ラインＡ＋４がバッファ４０２からＬ１キャッシュ２０２において実施されたプリフェッチ・バッファ位置にフェッチされるであろう。
【００５３】
しかる後、ステップ６２５において、キャッシュ・ラインＡ＋５がＬ２キャッシュ２０３に存在するかどうかの決定が行われる。それが存在する場合、プロセスはステップ６２６又は６２７へ進行するであろう。その実施は、ノード・コントローラ２０５がすべてのストリーム・バッファ・アクセスを通知されることを必要とするであろう。次のストリーム・バッファ・ラインがＬ２キャッシュ２０３内になく、従って、フェッチされることを必要とする場合の通知にその通知を限定することはノード・コントローラ・バッファ４０５及び４０６をプロセッサ２０１との同期から一時的に外させるであろう。この設計トレード・オフに利点は、ステップ６２６及び６２７が結合され、ノード・コントローラ２０５に対するアドレス・バス・トラフィックを減少させることができることである。カバーされる主要なケースでは、Ａ、Ａ＋１等のラインはプリフェッチ前にはキャッシュ２０２に全く存在しないので、キャッシュ・ラインＡ＋５は、通常は、Ｌ２キャッシュ２０３にあるとは考えられない。
【００５４】
ステップ６２６及び６２７が上記の理由で結合される時、ステップ６２７の通知はステップ６２６のプリフェッチに加えられた４つの追加制御ビットでもって実施可能である。その４ビットは１ビットの有効プリフェッチ、２ビットのストリーム識別、及び１ビットのプリフェッチ方向である。キャッシュ・ラインＡ＋５及びこれらのビットに対するアドレスを使用して、ノード・コントローラ２０５はキャッシュＡ＋６及びＡ＋７に対してメモリ・リクエストを発生することができる。前述のように、ノード・コントローラ２０５は任意の数のキャッシュ・ラインをプリフェッチするために実施可能である。ステップ６２８において、ノード・コントローラ２０５はキャッシュ・ラインＡ＋６をプリフェッチ・バッファ４０５（ＰＢＦＲ２）にプリフェッチし、キャッシュ・ラインＡ＋７をバッファ４０６（ＰＢＦＲ３）にプリフェッチするであろう。
【００５５】
ステップ６２８及び６２９の間の破線は、キャッシュ・ラインＡ＋４に対するＣＰＵ２０１からのリクエストがステップ６２８に続いて直ちに生じないことがあることを表す。
【００５６】
ステップ６２９において、Ｌ１キャッシュ２０２はＣＰＵ２０１によってリクエストされたキャッシュ・ラインＡ＋４に関してアクセスされる。キャッシュ・ラインＡ＋４はステップ６２４においてＬ１キャッシュ２０２に挿入されたので、キャッシュ・ラインＡ＋４はＣＰＵ２０１へ戻されるであろう。ステップ６３０において、ストリーム・アドレスがインクレメントされてアドレスＡ＋５を先頭にされる。ステップ６３１において、Ｌ１キャッシュ２０２は、キャッシュ・ラインＡ＋５が存在するかどうかを決定するためにチェックする。それが否定される場合、キャッシュ・ラインＡ＋５がＬ２キャッシュ２０３又はバッファ４０２からＬ１キャッシュ２０２にフェッチされる。
【００５７】
しかる後、ステップ６３２において、キャッシュ・ラインＡ＋６はバッファ４０５からバッファ４０２に移動する。ステップ６３３において、キャッシュ・ラインＡ＋７がバッファ４０６からバッファ４０５に移動する。しかる後、ステップ６３４において、ノード・コントローラ２０５はキャッシュ・ラインＡ＋８をプリフェッチするように通知される。この実施では、ステップ６３２におけるキャッシュ・ラインＡ＋６のフェッチは、キャッシュ・ラインＡ＋８をプリフェッチするようにノード・コントローラ２０５へ通知することである。ステップ６３５において、ノード・コントローラ２０５はキャッシュ・ラインＡ＋８をメモリ２０９からバッファ４０６にプリフェッチする。
【００５８】
しかる後、ＣＰＵ２０１がインクレメンタル順次態様でキャッシュ・ラインのアクセスを継続する（即ち、ＣＰＵ２０１がその割り当てられたストリームにおけるキャッシュ・ラインのアクセスを継続する）限り、プロセスはステップ６２９−６３６を通してループ動作をインクレメンタル態様で継続するであろう（ステップ６３６）。
【００５９】
上記の説明において、バス・インターフェース装置（ＢＩＵ）４０１がメモリ２０９からのキャッシュ・ラインのフェッチを遂行してもよい。ノード・コントローラ２０５はスイッチ２０７における一部分であってもよい。
【００６０】
有効アドレスはページ境界に跨って連続的であり、実アドレスはそのように連続的でないので、ストリーム・アドレス・バッファ５０１における２つのアドレスを比較する時に有効アドレスを利用することは有利であることが多い。更に、上記のため、インクレメンタル・アドレスを生じさせるために、カウンタを使用してもよい。
【００６１】
前述のように、ＢＩＵ４０１からメモリ２０９へのフェッチにおいて、それがキャッシュ・ラインをバッファ４０５及び４０６にプリフェッチするためであることをノード・コントローラ２０５に通知するために、制御ビットを利用してもよい。ノード・コントローラ２０５がそれのバッファへのプリフェッチを遂行することをこの特定のライン・リクエストが要求することを、１つのビットがノード・コントローラ２０５に知らせるようにしてもよい。どのストリーム番号がプリフェッチと関連するかを、他の２つのビットがノード・コントローラ２０５に知らせるようにしてもよい。キャッシュ・ラインにおけるどの方向にアドレスが向いているかを、他のビットが表すようにしてもよい。ノード・コントローラ２０５は、プリフェッチを行うように通知される時、ＣＰＵ２０１の動作とは無関係にそのようなプリフェッチを行ってもよい。
【００６２】
Ｌ１キャッシュ２０２及びＬ２キャッシュ２０３に関する組込みを維持する場合、キャッシュ・ラインが上記の手順におけるバッファ４０２からＬ１キャッシュ２０２へ移動する時、同じキャッシュ・ラインがＬ２キャッシュ２０３にも含まれるであろう。
【００６３】
Ｌ１キャッシュ２０２内にストリーム・バッファ・ラインの１つを持つ場合の利点は、Ｌ１キャッシュ２０２におけるそのバッファ・ライン内に含まれた特定のキャッシュ・ラインがプロセッサ２０１によってリクエストされる時、Ｌ１キャッシュ２０２においてヒットが生じ、ミスは生じない。技術的には、たとえリクエストされたキャッシュ・ラインがそのＬ１キャッシュ２０２に接続された別のバッファに含まれていても、ミスは生じるであろう。そのようなミスのために、そのストリーム・バッファ・ラインからＣＰＵ２０１にそのキャッシュ・ラインを検索するために余分のハードウエア及びサイクル・タイムが必要とされるであろう。ストリーム・バッファ・キャッシュラインの１つとして作用するＬ１キャッシュ２０２におけるキャッシュ・ラインは論理的表現をすればプリフェッチ・ストリーム・バッファに含まれる。
【００６４】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００６５】
（１）データ処理システムにおけるプロセッサによって使用されるデータをプリフェッチするための方法にして、
（ａ）データ・ラインに対する前記プロセッサからのリクエストを受け取るステップと、
（ｂ）前記リクエストに応答してストリームを割り当てるステップと、
（ｃ）前記ストリームにおけるエレメントによって表されたデータ・ライン対する前記プロセッサからのその後のリクエストを受け取るステップと、
（ｄ）前記ストリームにおけるエレメントによって表されたデータ・ラインに対する前記プロセッサからの前記その後のリクエストの関数として未だリクエストされてないデータ・ラインのプリフェッチの深さを制御するステップと、
を含む方法。
（２）前記ストリームにおけるエレメントによって表されたデータ・ラインに対する前記プロセッサからの前記その後のリクエストの関数として未だリクエストされてないデータ・ラインのプリフェッチの方向を制御するステップを含むことを特徴とする上記（１）に記載の方法。
（３）前記ステップ（ｄ）は、
第１オペレーション・モードにおいて、前記ストリームにおける前記エレメントの１つによって表されたデータ・ラインに対する前記プロセッサからの各リクエストに対して２つのデータ・ラインをプリフェッチするステップと、
第２オペレーション・モードにおいて、前記ストリームにおける前記エレメントの１つによって表されたデータ・ラインに対する前記プロセッサからの各リクエストに対して２つよりも多くのデータ・ラインをプリフェッチするステップと、
を含み、前記第２オペレーション・モードの前に前記第１オペレーション・モードに入ることを特徴とする上記（１）に記載の方法。
（４）１つ又は複数のデータ・ラインがキャッシュにプリフェッチされること及び
前記ストリームはストリーム・フィルタに維持されることを特徴とする上記（１）に記載の方法。
（５）１つ又は複数のデータ・ラインが前記プロセッサの外部の１つ又は複数のバッファに投機的にプリフェッチされることを特徴とする上記（４）に記載の方法。
（６）メイン・メモリからストリーム・バッファにキャッシュ・ラインをプリフェッチするするためのシステムにして、前記ストリーム・バッファはバスによって前記メイン・メモリに接続されたプロセッサを援助するものにおいて、
ストリーム・フィルタと、
前記プロセッサに接続されたキャッシュと、
第１キャッシュ・ラインのための前記プロセッサからの第１リクエストを受け取るための手段と、
前記第１リクエストに応答して、前記第１キャッシュ・ラインのアドレスに依存した内容を有するストリームを前記ストリーム・フィルタにおいて割り当てるための手段と、
第２キャッシュ・ラインのための前記プロセッサからの第２リクエストを受け取るための手段にして、前記第２キャッシュ・ラインのアドレスが前記ストリーム内に含まれるものと、
前記第２リクエストに応答して前記メモリから前記ストリーム・バッファにＮ個（Ｎはゼロよりも大きい整数）のキャッシュ・ラインを投機的にプリフェッチするための手段にして、前記Ｎ個のプリフェッチされたキャッシュ・ラインのアドレスは前記ストリームに沿って存在するものと、
第３キャッシュ・ラインのための前記プロセッサからの第３リクエストを受け取るための手段にして、前記第３キャッシュ・ラインのアドレスが前記ストリーム内に含まれるものと、
前記第３リクエストに応答して前記メモリから前記ストリーム・バッファにＭ個（ＭはＮよりも大きい整数）のキャッシュ・ラインを投機的にプリフェッチするための手段にして、前記Ｍ個のプリフェッチされたキャッシュ・ラインのアドレスは前記ストリームに沿って存在するものと、
を含むシステム。
（７）前記ストリーム・バッファは前記キャッシュに含まれることを特徴とする上記（６）に記載のシステム。
（８）前記Ｎ個のキャッシュ・ラインを投機的にプリフェッチするための手段は前記システムの第１オペレーション・モードと関連すること、
前記Ｍ個のキャッシュ・ラインを投機的にプリフェッチするための手段は前記システムの第２オペレーション・モードと関連すること、
前記第１オペレーション・モードは前記第２オペレーション・モードの前に実施されること、及び
前記第２オペレーション・モードはディスエーブル可能であること、
を特徴とする上記（６）に記載のシステム。
（９）前記ストリーム・バッファの１つ又は複数のラインは前記プロセッサを含むチップの外に含まれることを特徴とする上記（７）に記載のシステム。
（１０）プロセッサによってリクエストされたリクエストされたキャッシュ・ラインをメモリから投機的にプリフェッチするための方法にして、
第１キャッシュ・ラインに対するリクエストを前記プロセッサから受け取るためのステップと、
前記第１キャッシュ・ラインが前記プロセッサに接続されたキャッシュ内に含まれているかどうかを決定するステップと、
前記第１キャッシュ・ラインが前記プロセッサに接続されたキャッシュ内に含まれていない場合、前記第１キャッシュ・ラインのアドレスがストリーム・フィルタ内に含まれたアドレスに一致するかどうかを決定するステップと、
前記第１キャッシュ・ラインのアドレスが前記ストリーム・フィルタ内に含まれたアドレスに一致しない場合、前記第１キャッシュ・ラインのアドレスをインクレメントして第１インクレメント・アドレスを作成し、前記第１インクレメント・アドレスを前記ストリーム・フィルタに挿入するステップと、
前記メモリから前記キャッシュに前記第１キャッシュ・ラインをフェッチするステップと、
前記プロセッサから第２キャッシュ・ラインに対するリクエストを受け取るステップにして、前記第２キャッシュ・ラインのアドレスが前記第１インクレメント・アドレスに対応するものと、
前記第２キャッシュ・ラインが前記キャッシュ内に含まれているかどうかを決定するステップと、
前記第２キャッシュ・ラインが前記キャッシュ内に含まれていない場合、前記第１インクレメント・アドレスをインクレメントして第２インクレメント・アドレスを作成しアドレスのストリームをストリーム・フィルタにおいて割り当てるステップにして、前記ストリームの先頭は前記第２インクレメント・アドレスに対応するアドレスを有するものと、
前記第２キャッシュ・ライン及び前記インクレメント・アドレスに対応したアドレスを有する第３キャッシュ・ラインを前記メモリから前記キャッシュにフェッチするステップと、
第３インクレメント・アドレスに対応したアドレスを有する第４キャッシュ・ラインを前記メモリからストリームにおける第１ラインにフェッチするステップにして、前記第３インクレメント・アドレスは前記第２インクレメント・アドレスのインクレメントに対応するものと、
前記第３キャッシュ・ラインに対するリクエストを前記プロセッサから受け取るステップと、
前記ストリームの先頭が前記第３インクレメント・アドレスに対応したアドレスを有するように前記ストリームを更新するステップと、
前記ストリーム・バッファの前記第１ラインから前記キャッシュに前記第４キャッシュ・ラインをフェッチするステップと、
第４インクレメント・アドレスに対応したアドレスを有する第５キャッシュ・ラインを前記メモリから前記ストリーム・バッファの前記第１ラインにフェッチするステップにして、前記第４インクレメント・アドレスは前記第３インクレメント・アドレスのインクレメントに対応するものと、
前記第４キャッシュ・ラインに対応するリクエストを前記プロセッサから受け取るステップと、
前記ストリームの先頭が前記第４インクレメント・アドレスに対応したアドレスを有するように前記ストリームを更新するステップと、
前記ストリーム・バッファの前記第１ラインから前記キャッシュに前記第５キャッシュ・ラインをフェッチするステップと、
第５インクレメント・アドレスに対応したアドレスを有する第６キャッシュ・ラインを前記メモリから前記ストリーム・バッファの前記第１ラインにフェッチするステップにして、前記第５インクレメント・アドレスは前記第４インクレメント・アドレスのインクレメントに対応するものと、
第６インクレメント・アドレスに対応したアドレスを有する第７キャッシュ・ラインを前記メモリから前記ストリーム・バッファの前記第２ラインにフェッチするステップにして、前記第６インクレメント・アドレスは前記第５インクレメント・アドレスのインクレメントに対応するものと、
第７インクレメント・アドレスに対応したアドレスを有する第８キャッシュ・ラインを前記メモリから前記ストリーム・バッファの前記第３ラインにフェッチするステップにして、前記第７インクレメント・アドレスは前記第６インクレメント・アドレスのインクレメントに対応するものと、
前記第５キャッシュ・ラインに対するリクエストを前記プロセッサから受け取るステップと、
前記ストリームの先頭が前記第５インクレメント・アドレスに対応したアドレスを有するように前記ストリームを更新するステップと、
前記ストリーム・バッファの前記第１ラインから前記キャッシュに前記第６キャッシュ・ラインをフェッチするステップと、
前記ストリーム・バッファの前記第２ラインから前記ストリーム・バッファの第１ラインに前記第７キャッシュ・ラインをフェッチするステップと、
前記ストリーム・バッファの前記第３ラインから前記ストリーム・バッファの第２ラインに前記第８キャッシュ・ラインをフェッチするステップと、
前記メモリから前記ストリーム・バッファの前記第３ラインに第９キャッシュ・ラインをフェッチするステップと、
を含む方法。
【図面の簡単な説明】
【図１】本発明に従って構成可能なマルチプロセッサ・システムを示す。
【図２】本発明に従って構成可能なデータ処理システムを示す。
【図３】ストリーム・フィルタ及びストリーム・バッファを示す。
【図４】図２に示されたシステムの更に詳細な図を示す。
【図５】本発明に従って機能的な図を示す。
【図６】本発明の流れ図の一部分を示す。
【図７】本発明の流れ図の一部分を示す。
【図８】本発明の流れ図の一部分を示す。
【図９】本発明の流れ図の一部分を示す。
【図１】
0003541998.tif 000002
【図２】
0003541998.tif 000003
【図３】
0003541998.tif 000004
【図４】
0003541998.tif 000005
【図５】
0003541998.tif 000006
【図６】
0003541998.tif 000007
【図７】
0003541998.tif 000008
【図８】
0003541998.tif 000009
【図９】
0003541998.tif 000010