(57)【特許請求の範囲】
【請求項１】
‐プログラムを実行するプロセッサと、
‐前記プロセッサによるアクセスに対するキャッシュデータのためのキャッシュメモリと、
‐前記プロセッサによってアクセスされるアドレス中のアドレスのストリームについての情報を保持し、かつそのデータが前記ストリームからの特定アドレスに対応しているか否かに依存して、前記キャッシュメモリ内のデータの格納を管理するように構成されているキャッシュ管理ユニットとを有し、
前記キャッシュ管理ユニットが、前記プログラムの実行の進捗に応じて前記ストリームに対する現在のアドレスを更新する、データ処理回路において、
前記キャッシュ管理ユニットが、前記キャッシュメモリ内の選択された格納位置を再使用可能とするように構成されていて、
前記特定アドレスに対応する前記データに対して使用されている前記キャッシュメモリの格納位置が、前記現在のアドレスに対する前記特定アドレスの位置に依存して、再使用可能にされることを特徴とするデータ処理回路。
【請求項２】
前記キャッシュ管理ユニットが、前記ストリームに対する距離パラメータを保持し、前記特定アドレスが、前記現在のアドレスから当該距離分より大きく離れているときに、前記キャッシュ管理ユニットが、当該格納位置を再使用可能にする請求項1のデータ処理回路。
【請求項３】
前記プロセッサが、当該距離パラメータを設定するための一つまたは複数の命令を含む命令セットを有している請求項2のデータ処理回路。
【請求項４】
前記キャッシュ管理ユニットが、前記プロセッサによって前記キャッシュメモリに書き込まれた書込みデータを識別し、前記プロセッサが、書込みデータが格納されている前記キャッシュメモリ位置を再利用する前に、前記キャッシュ管理ユニットが、あるアドレスで書き込まれた書込みデータを前記キャッシュメモリからメインメモリに書き戻すべきか否かを知らせるための命令を含む命令セットを有している請求項1のデータ処理回路。
【請求項５】
前記キャッシュ管理ユニットが、前記プロセッサによって発行されたデータアドレスが前記ストリームの次に期待されるデータアドレスに等しくなる時を検知し、かつ当該検知に応じて前記現在のアドレスを更新するように構成されている請求項1のデータ処理回路。
【請求項６】
前記キャッシュ管理ユニットが、また、当該ストリームを使用して、前記ストリームに属しているデータアドレスから前記キャッシュメモリにデータを先取りする請求項1のデータ処理回路。
【請求項７】
前記キャッシュ管理ユニットが、前記プロセッサによってアクセスされる前記アドレスの中のアドレスの複数のストリームについての情報を保持するように構成されていて、前記キャッシュ管理ユニットが、前記プログラムの実行の進捗に応じて、各特定ストリームの各現在のアドレスを独立に更新し、特定ストリーム内の特定アドレスに対応する前記データに使用される前記キャッシュメモリ内の格納位置が、その特定ストリームの前記現在のアドレスに対する前記特定アドレスの位置に応じて、再使用可能にされる請求項1〜6の何れかのデータ処理回路。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
本発明は、請求項1のプリアンブルに記載のデータ処理回路に関する。このようなデータ処理回路は、米国特許第5,649,144号により既知である。
【０００２】
【従来の技術】
キャッシュメモリは、プロセッサ速度とメインメモリ速度間のギャップを橋渡しする装置として知られている。メインメモリからのデータのコピーが、キャッシュメモリに保たれているので、プロセッサは、このようなコピーにアクセスするために、遅いメインメモリではなく速いキャッシュメモリにのみアクセスすれば良い。
【０００３】
米国特許第5,649,144号は、プロセッサによってこのデータが実際に読み込まれる前に、データのコピーをキャッシュに先取りするキャッシュ管理ユニットを開示している。このキャッシュ管理ユニットは、アドレスストリームの概念を用い、そしてストリームのアドレスから、個別にまたは先取りされたデータブロックの一部としてデータを先取りする。各ストリームは、例えば、ベースアドレスとストライド値によって記載されていて、これらは、ベースアドレスで開始させそしてストライド値でそれを繰り返しインクリメントさせることにより得られるアドレスのシリーズを定義する。ベースアドレスとストライドは、両者とも調整可能で、ストライドは、1をプラスあるいはマイナスした値、またはより大きい値をプラスあるいはマイナスした値を取ることができる。
【０００４】
アドレスストリームを使用することの背後にある観念は、プロセッサによって実行される典型的プログラムが、ストリームによって定義されるアドレスから読みこまれる命令を含むであろうと言うことである。一旦データがストリームからの1アドレスでアクセスされると、近い将来、プログラムが、多分そのストリームに属していない他のアドレスからの読み込みの後、そのアドレスにストライド値を加えることによって得られる新たなアドレスでデータにアクセスすることが必要になるであろう。データに対する必要性を新たなアドレスから予期するために、キャッシュ管理ユニットは、新たなアドレスからデータをキャッシュメモリに先取りする。この結果、プロセッサは、それが必要となると、新たなアドレスで格納されているデータを即座にフェッチすることができる。
【０００５】
1つのアドレスとそのストリームからの新たなアドレスとを読み込む間、プロセッサは、異なったストリームの一部またはいかなるストリームにも関係ない、異なったアドレスから読み込むことが出来る。キャッシュ管理ユニットは、プロセッサによってプログラムの実行の進行をフォロウし、プロセッサによって実行されるプログラムが、短い通知で特定ストリームからの新たなアドレスにそれが期待されるまで進むたびに、特定ストリームから、データを先取りする。
【０００６】
キャッシュ管理ユニットは、また、プロセッサが必要とするいかなるデータも格納するキャッシュ位置を選択しなければならない。そのデータには、ストリームに属しているアドレスに格納されているデータと他のデータの両方が含まれる。キャッシュは、再使用を可能とするキャッシュ位置を選択する置換戦略を使用する。良く使用される置換戦略の一例は、最低使用頻度データ項目（またはデータブロック）によって占められるキャッシュメモリ位置を選択する、LRU（最低使用頻度）戦略である。
【０００７】
特定キャッシュメモリ位置が再使用可能にされると、その特定キャッシュメモリに以前に格納されていたデータは、低速メモリからしかフェッチ出来ない。したがって、置換戦略は、プログラムの実行効率とプロセッサをメインメモリに接続するバスの使用効率に影響を与えるであろう。LRU戦略は、例えば、このような方法でプロセッサとバス使用の効率を減小させることもできる。
【０００８】
【課題を解決するための手段】
本発明の目的は、とりわけ、プロセッサがより能率的にキャッシュメモリを使用することができるプリアンブルに記載のデータ処理回路を提供することである。
【０００９】
本発明のデータ処理回路は、請求項1の特徴部を特徴とする。本発明によると、アドレスストリームは、再使用可能となるキャッシュメモリ位置を選択するために使用される。プロセッサがストリームに沿ってストライドを進めることをキャッシュ管理ユニットが検知すると、そのストリームに対応するキャッシュの「古い」データは、再使用のために犠牲にされる。キャッシュメモリ位置は、個々に、または一度にブロックで再使用可能にさせることができる。
【００１０】
従って、再使用可能にされるキャッシュメモリ位置は、必ずしも最低使用頻度キャッシュメモリ位置にはならない。例えば、あるストリームが、速い遷移で膨大なデータ量にアクセスする時、そのデータに対して使用されるキャッシュメモリ位置は、このストリームの一部ではなくかつこのストリームが進む周波数よりはるかに低い周波数で使用される他のデータに対して使用されるキャッシュメモリ位置より、より速く再使用可能とさせることができる。そのキャッシュメモリ位置が再使用可能とされた後に、ストリームからのデータがアクセスされないならば、これはキャッシュ失敗の数を減らす。
【００１１】
一般に、キャッシュ内に分布する位置は、使用可能にさせることができる。例えば、ストライドが、プラスまたはマイナス１でない場合、このようにして使用可能とされる連続した位置は、隣接していない。原理的には、再使用可能にされるキャッシュメモリ位置は、通常、使用可能となるであろう：それは、同じストリーム、他のストリーム、またはいかなるストリームにも属しないデータに対して使用することができる。
【００１２】
（例えば、本発明のテクニックが、特定プログラムに対し再使用可能となるキャッシュメモリ位置を充分提供しない場合には）、キャッシュメモリ位置を再使用可能にさせる本発明のテクニックを、それらの位置を再使用可能にさせるキャッシュメモリ位置を選択するいかなる全体置換戦略とも、組み合わせて使用することができる。本発明のテクニックを使用すれば、より多くのキャッシュメモリ位置が使用可能となるので、このような全体置換戦略を使用する必要性は減少するであろう。
【００１３】
本発明は、プログラムにおけるそのデータの必要性に応じてデータをキャッシュ内に保存する。ストリームに対するデータを指定された時間保持することによって、プログラムが再びそのデータを必要とするときにすでにそのデータがキャッシュから除去されてしまっていると言うことがないようにすることができる。また、そのデータがもはや必要でなくなったときに、データを適切な時期にストリームから棄てることにより、キャッシュの再使用に対して充分なスペースを生成することができるので、プロセッサがまだ使用することができるキャッシュから他のデータを取り除く必要性はより少なくさせることができる。
【００１４】
それが、ストリーム内で最も最近に使用された新たなアドレスの後から一定のストライド数を超えるまで、キャッシュ管理ユニットは、キャッシュ内にストリームに対応するデータを保つことが好ましい。これにより、再使用可能にさせるキャッシュメモリ位置と多様なメモリー位置へのアクセスとの間の関係を、容易に調整可能にすることが出来る。
【００１５】
ストライドが相対的に大きい場合、非常に離れているアドレスはキャッシュに保持されるが、ストライドが相対的に小さい場合、最も最近に使用されたアドレスに非常に近接しているアドレスは、再利用させることができる。同様に、プロセッサが、そのストリームに対応しているアドレスからストリームデータに沿って相対的に頻繁には進まない場合には、それを、プロセッサが相対的に頻繁に進むストリームに対応するアドレスからのデータに比較してより長く保持することが出来る。
【００１６】
ストリームが、データを先取りするためにも使用される場合、これは、データが、アドレスの各「スライドするウィンドウ」（各ウィンドウは各ストリームに属する）からキャッシュ内に保持される結果をもたらす。
【００１７】
本発明の一実施例の場合、プロセッサは、データが各ストリームに対して独立してキャッシュに保持される距離をプログラムする命令を有する。これは、例えば、次のように使用することができる。所定のプログラムに対し、ストリーム内の局所的位置の環境が計算に対してどの程度大きい必要があるかと言う点は、既知であるので、各ストリームに対し、どれだけ多くのデータをプログラム用にキャッシュに保持しておかなければならないのか、かつデータをどれだけの距離でキャッシュから除去することができるかと言う点を、決定することが可能となる。したがって、プログラムによりこの距離をそれらの必要性に適応させることができる。この距離は、さまざまな方法、例えば、ストライドの数として、またはアドレスの差として、特定することが出来る（1つの命令が、1つのストリームに対するまたはいくつかのストリームに対する距離を特定するかもしれない）。
【００１８】
ストリームに沿ったプログラムの前進は、プロセッサがストリームの次のアドレスに対応するアドレスを有する読み込み命令を発行するか否かの検知、またはプログラムの明確な命令、または指定された命令アドレスにより決められる任意の命令の実行の検知等の、いくつかの方法により検知することができる。読み込み命令のアドレスを使用する場合、プロセッサの部分を取り扱っている命令とデータの先取りは独立して設計することができる（プログラムカウンタ値のような情報は、データ先取りには不必要である）。
【００１９】
【発明を実施するための形態】
本発明のデータ処理回路のこれらのそして他の有利な観点は、以下の説明と図の使用により詳細に示される。
【００２０】
処理回路は、プロセッサ10、キャッシュメモリ12、メインメモリ14およびキャッシュ管理ユニット16を含む。プロセッサ10は、キャッシュメモリ12とキャッシュ管理ユニット16に結合されているアドレス出力端を有する。キャッシュメモリ12は、メインメモリ14に結合されているアドレス出力端を有する。プロセッサ10とキャッシュメモリ12は、データ接続を有する。キャッシュメモリ12とメインメモリ14も、データ接続を有する。
【００２１】
プロセッサ10は、また、命令を格納する命令メモリ（図示せず）と命令キャッシュ（図示せず）を使用することが好ましいが、命令を、メインメモリ14および／またはキャッシュメモリ12にフェッチしそして格納することも可能である。本発明は、一般に、データキャッシュに関するもので、命令キャッシュに関するものではないので、一般に、このことは本発明に影響を及ぼさない。しかし、命令がキャッシュメモリ12にも格納される場合、本発明により、命令のフェッチに対しキャッシュメモリー空間をより効率的に使用することが可能になる。
【００２２】
動作中、プロセッサ10は、プロセッサにデータをメモリから読み込みおよび／またはメモリに書込ませう命令を含むプログラムを実行する。プロセッサ10が、読み込み命令を実行すると、それはキャッシュメモリ12に読み込みアドレスを発行する。そのアドレスに対応するデータがキャッシュメモリ12に格納されている場合、キャッシュメモリ12は、そのデータをプロセッサ10へのデータ接続上に出力する。読み込みアドレスに対応するデータがキャッシュメモリ12に格納されていない場合、キャッシュメモリは、データの、またはその読み込みアドレスを含む（例えば、64バイトの）データブロックの読み込みアドレスをメインメモリ14に出力する。これに応答して、メインメモリ14は、そのデータ（またはそのデータを含むデータブロック）をそのデータ（またはデータブロック）を格納するキャッシュメモリ12に渡し、かつそのデータをプロセッサ10に渡す。
【００２３】
プロセッサ10が書込み命令を実行する場合、コピーバックまたはライトスルーのような多様なテクニックを使用することができる。使用されるテクニックにより書込み命令からのデータがキャッシュメモリ12に格納される場合、書込みは、その書込まれたデータが属するデータブロックをコピーするためのメインメモリ14からの読み込みにも関係する。それゆえ、メモリからのフェッチは、プロセッサ10から命令を読み込むことには限定されない。
【００２４】
キャッシュメモリ12は、メインメモリ14より速いが、容量は小さい。したがって、キャッシュメモリ12は、通常、メインメモリ14に格納することができる全てのデータを同時に格納することはできない。これに対処するために、キャッシュメモリ12内の各記憶場所は、メインメモリ14の異なった位置からのデータを格納するために択一的に使用することができる。フルアソシアイティブキャッシュ、セットアソシエイティブキャッシュ等のような、これを実現させる多様なテクニックは、周知である。（このようなテクニックは、如何なるものでも本発明と組み合わせて使用することができる）。
【００２５】
データが、以前に他のデータが格納されていたキャッシュメモリ12内の位置に格納されている場合、この位置は再利用されていると言える。再利用された位置で以前に格納されていたデータは、上書きされているので、再使用の後、キャッシュメモリ12から得ることは出来ない。上書きされたデータは、プロセッサ10がそれを新たに読み込むことが可能となる前に、メインメモリ14から検索されなければならない。
【００２６】
キャッシュ管理ユニット16は、上書きされたデータが再び使用される可能性が最も低いデータとなる、再使用に対するキャッシュメモリ位置を選択する戦略を使用する。キャッシュ管理ユニット16は、プロセッサが再び必要とする可能性のあるキャッシュからのデータが再使用により除去されてしまう確率を減らすように、再使用可能となるキャッシュメモリ12の位置を選択する。
【００２７】
本発明によると、キャッシュ管理ユニット16は、キャッシュ位置の再使用を管理するストリームの概念を使用する。この背後にある観念は、プロセッサ10により発行されるアドレスの中には、変更アドレスの予測可能なパターンを有するアドレスの一つまたは複数のストリームが存在すると言うことである。プロセッサ10がこれらのストリームに沿って進むとき、このストリーム内のより古いアドレスからのデータを、もはや不必要とすることができるので、キャッシュ管理ユニットは、キャッシュメモリ12内のこのデータに使用される記憶位置を、再使用可能にさせることができる。これらのキャッシュメモリ位置を再使用可能にさせることによって、キャッシュ管理ユニット16が、プロセッサ10がいまなお必要とするデータを含む他のキャッシュメモリ位置を、再使用可能としなければならない状況を避けることができる。
【００２８】
図2は、メモリーアドレス空間20とこのような多くのストリームの一具体例を示す。第一ストリームは、連続したアドレス20a-dを含む。第二ストリームは連続したアドレス23a-cを含み、第三ストリームは連続したアドレス25a-dを含む。第一ストリーム20a-dの連続した位置は、連続したアドレスの各対間に大きいストライドで増大していくアドレスを有する。第二ストリーム23a-cの連続した位置も、増大していくアドレスを有するが、ストライドはより小さい。第三ストリーム25a-dの連続した位置は、減少していくアドレスを有する。
【００２９】
アドレスのこのような遷移は、例えば、数のマトリックス内のアドレスに対応させることができる。このようなマトリックスは、連続したメモリー位置内の一行の連続した要素により、行順でメモリ内に格納させることができる。このようなマトリックスを使用するプログラムは、行ごとまたは列ごとにこのようなマトリックスにアクセスすることができる。第一の場合、アドレスのストリームは、次のアドレスにいたるごとに1増大し、第二の場合、アドレスのストリームは、1行を格納するために必要な格納空間に対応するストライド分増大する。プログラムが、いくつかのマトリックス中を同時に進むか、または1つのマトリックスにいくつかの方向でアクセスする場合、これは多重ストリームを生じるであろう。
【００３０】
例えば、マトリックス中の数を空間的にフィルタリングする実際的なプログラムは、このようなストリームからの最も最近のアドレスからフェッチされた数を将来使用する必要が、さらにストリームにおける以前のいくつかのアドレスからフェッチされた以前の数を使用する必要があろう。しかし、ストリーム内のそれ以上に戻る数は、もはや必要ではない。したがって、このようないくつかの以前の数は、キャッシュメモリ内に保持することが好ましく、そしてより古い数「更にオン(further on)」に対するキャッシュメモリ位置を再使用可能にすることができる。
【００３１】
プログラマは、以前の数がどれだけ多く必要であるかを示す文をプログラムに含ませることができる。また、コンパイラが、プログラムからこのような以前の数がどの程度必要であるかを決定することも出来る。これから、ストリームのアドレスから先取りされた数を保持しなければならない、最も最近にアクセスされたアドレスからの距離を示すために、キャッシュ管理ユニット16に対する命令を、生成させることができる。
【００３２】
本発明の一実施例の場合、キャッシュ管理ユニット16は、多くのストリームを使用し、そして各ストリームに対して各エントリ（CURRENT_ADDRESS、STRIDE、DISTANCE）を有するテーブルと実効的に同一なものを維持する。キャッシュ管理ユニット16は、プロセッサ10がキャッシュメモリ12に発行するデータアドレスを監視する。各データアドレスは、ストリームのCURRENT_ADDRESSエントリと比較される。プロセッサ10が発行したデータアドレスが、特定ストリームのCURRENT_ADDRESSエントリに等しい場合、その特定ストリームに対してストリームヒットが発生したと言える。この場合、この特定ストリームに対するCURRENT_ADDRESSエントリはSTRIDEエントリ内の値分増大し、そしてキャッシュ管理ユニット16は、アドレスCURRENT_ADDRESSDISTANCE*STRIDEに対応するデータを格納するキャッシュメモリ位置を再使用可能にする。
【００３３】
テーブルエントリ（CURRENT_ADDRESS、STRIDE、DISTANCE）は、（CURRENT_ADDRESS、STRIDE、DISTANCE、OLDEST_ADDRESS）に拡大させることができる（ここで、OLDEST_ADDRESSエントリは、いまなお使用可能であるストリームからの最も古いアドレスを示す）。
【００３４】
最初、ストリームが始まるとき、OLDEST_ADDRESSは、CURRENT_ADDRESSとなるように設定される。OLDEST_ADDRESSが、CURRENT_ADDRESSとCURRENT_ADDRESSDISTANCE*STRIDEの間には無いようになるまでCURRENT_ADDRESSが変化すると、キャッシュ管理ユニット16は、OLDEST_ADDRESSに対応するキャッシュメモリー位置を再使用可能にし、OLDEST_ADDRESSをOLDEST_ADDRESS +STRIDEに変更する。
【００３５】
プロセッサ10によって実行されるプログラムは、キャッシュ管理ユニット16にストリームのプロパティを送ることが好ましい。この目的に対し、プロセッサ10の命令セットは、テーブルにエントリを入れる命令を含むことが好ましい。このような命令は、ストリーム数、STRIDE、DISTANCEおよびCURRENT_ADDRESSの初期値を特定することができる。
【００３６】
キャッシュ管理ユニット16は、キャッシュメモリー位置が再使用可能となった事実を多様な方法で記録することができる。好適な一実施例の場合、キャッシュ管理ユニット16は、有効ビットのテーブル、キャッシュメモリ12の各ブロック（例えば、64バイト）ごとのテーブルを維持する。ブロックの有効ビットは、そのブロックが「有効である」か否か、すなわち、そのブロックが、プロセッサ10からの読み込みに応答して復帰することができるデータを含むか否かを示す。最初、有効ビットは、どのブロックも有効でないことを示し、そしてブロックが（プレ）フェッチされるたびに、そのブロックに対して有効ビットが設定される。メモリーブロックからのデータが、メインメモリ14からキャッシュメモリ12にフェッチされる場合、キャッシュ管理ユニット16は、有効ビットが設定されていない適切なブロックを検索しそしてフェッチされたデータをそのブロックに配置する。有効ビットが設定されていない適切なブロックが得られない場合、キャッシュ管理ユニット16は、その置換戦略によりブロックを選択し、そしてフェッチされたデータをそのブロックにロードする。
【００３７】
この好適な実施例の場合、キャッシュ管理ユニット16は、再使用可能とされるブロックに対する有効ビットをクリアする。何故ならば、そのブロックが、そこに格納されているデータを越えて、定義距離よりはるかに進んだストリームからのデータを含むからである。したがって、後に、キャッシュ管理ユニット16は、その通常の置換戦略に頼ることなくフェッチされたデータを格納するそのブロックを選択することが出来る。
【００３８】
しかしながら、本発明は、キャッシュメモリー位置を再使用可能とするこのテクニックに限られない。例えば、代替として、キャッシュ管理ユニットが、その関連したキャッシュメモリー位置またはブロックが、再使用可能であることを示すために、そのキャッシュメモリー位置またはブロックに対して「再使用可能」ビットを保持することができる。この「再使用可能ビット」は、最初に設定される。データがキャッシュメモリー位置に格納されている場合、その「再使用可能」ビットはクリアされ、そしてストリームが進むと、キャッシュ管理ユニット16は、そのアドレスが、CURRENT ADDRESSから指定されたDISTANCE離れているキャッシュメモリー位置に対して「再使用可能」ビットを再び設定する。キャッシュ管理ユニット16が、メインメモリ14からフェッチされたデータを格納する使用可能であるキャッシュメモリー位置を検索する場合、それは「再使用可能」ビットが設定されているキャッシュメモリー位置を選択するのが好ましい。このような位置が使用可能でない場合しか、通常の置換戦略は、使用する必要はない。
【００３９】
もちろん、本発明は、他の多くの方法により実施することができる。ほんの少しの例を挙げれば：例えば、DISTANCEを、ストライドの数ではなくCURRENT_ADDRESSと使用可能にされるアドレスとの間の距離として表示する；DISTANCEの代わりに、（CURRENT-ADDRESSDISTANCE*STR.IDEに等しい）別個のDISTANT_ADDRESSを使用しかつキャッシュ管理ユニット16によって維持する；DISTANCEによって特定されるキャッシュメモリの再使用を可能とする前か後に、CURRENT_ADDRESSを変更する等々。ストリーム内のアドレスのより複雑な予測を使用することもできる。例えば、1行が全て先取りされた時、マトリックスの次の行に移動するために、例えば、CURRENT_ADDRESSをストライドの指定された数の後に指定された値分戻るように設定することが出来る。プロセッサは、このようなより複雑な予測を特定する命令を提供することができる。キャッシュ管理ユニット16に（例えば、指定されたストライドの数の後に）ストリームの終端を検知させるメカニズムを使用して、キャッシュ管理ユニット16が、先取りがストリームの終端に到達する時、先取りを停止させ、そしてその後ストリームの終端が再使用可能にされるまで全てのキャッシュメモリ位置を再使用させることを停止させることが出来る。ストリームを特定する命令は、ストリームがいつ終わるべきかを特定するパラメータを含むことができ、またストリームを終了させる明確な命令を使用することができる。
【００４０】
データアドレスの発行は、発行されたデータアドレスからではなく命令カウンタから検知することができる。この場合、キャッシュ管理ユニット16には、プロセッサ10がストリームに沿って進む時実行される命令の命令位置が知らされる。プロセッサの命令ポインタがその位置に至ると、キャッシュ管理ユニット16は、CURRENT_ADDRESSの発行が検知される時点まで進む。
【００４１】
加えて、ストリームを、データをキャッシュに先取りするために使用することができる。ストリームヒットがCURRENT_ADDRESSのアドレスで発生する時、キャッシュ管理ユニット16は、キャッシュメモリ12にCURRENT_ADDRESS +STRIDEで格納されているデータを先取りさせる。したがって、この位置に格納されているデータは、それがプロセッサ12によって実際にアクセスされる前に先取りされるであろう。別の実施例の場合、先のストライドのより大きい数Nでのデータ（アドレス：CURRENT_ADDRESS +N*STRIDE）を、それがプロセッサによって実際に必要となる前に、低速メモリ14がこのデータを生成するのに充分な時間を有するように、事前に先取りさせることができる。Nの値はプログラムの必要性に適応させることができるので、プロセッサで必要となる前にデータがキャッシュメモリ内にあるように、先取りははるか前に発生する。
【００４２】
このような先取り自体は、従来技術から既知である。本発明は、キャッシュの再使用に関するが、ストリームについての情報を維持するいかなる既知の従来技術メカニズムも本発明と組み合わせて使用することができる。
【００４３】
図3は、キャッシュ管理ユニット16の動作を記載するフローチャートを示す。第一ステップ30において、プロセッサ10が発行したデータアドレスが受信される。第二ステップ32において、このアドレスが、あるストリームのCURRENT_ADDRESS値と比較される。発行されたアドレスがストリームのCURRENT_ADDRESSに等しくない場合、キャッシュ管理ユニット16は、プロセッサにより発行された次のデータアドレスに対するフローチャートを繰り返す。発行されたアドレスがCURRENT ADDRESSに等しい場合、キャッシュ管理ユニット16は、第三ステップ34を実行し、CURRENT ADDRESSをインクリメントする。次いで、メインメモリーアドレスCURRENT_ADDRESS-DISTANCE*STRIDEに使用されるキャッシュ記憶位置を使用可能にし、かつオプションとして新たなCURRENT_ADDRESSの内容の先取りを行わせる第四と第五のステップ36、38が実行される。その後、フローチャートは第一ステップから繰り返す。キャッシュ管理ユニット16は、異なったストリームに対してまたはシーケンシャルに異なったストリームに対して、並列にこれらのステップを実行することができる。
【００４４】
「OLDEST ADDRESS」が使用される場合、OLDEST ADDRESSが、CURRENT_ADDRESSとCURRENT_ADDRESS-DISTANCE*STRIDEとの間にあると、第四ステップ36は、OLDEST_ADDRESSを再使用可能にし、かつOLDEST_ADDRESSをOLDEST_ADDRESS+STRIDEに変更する。必要に応じ、これは、OLDEST_ADDRESSが、CURRENT_ADDRESSとCURRENT ADDRESS-DISTANCE*STRIDEとの間に来るまで繰り返される。
【００４５】
データがプロセッサ10からキャッシュメモリ12に書き込まれている時、そのデータを格納するキャッシュメモリ位置が、他のメインメモリ位置からのデータを格納するために再利用される場合には、そのデータをメインメモリ14にコピーバックする必要があるかもしれない。この目的に対して、キャッシュ管理ユニット16は、各キャッシュメモリー位置またはキャッシュメモリー位置のブロックに対する「汚れた(dirty)」ビットの表を維持することができる。通常、これらのビットはクリアされるが、プロセッサ10がキャッシュメモリー位置にデータを書き込むと、その関連した汚れたビットが設定される。キャッシュメモリー位置が再利用されかつその汚れたビットが設定されている場合、キャッシュメモリー位置のデータは、それが上書きされる前にメインメモリにコピーされる。
【００４６】
ここまで、どの程度のキャッシュメモリー位置が、アドレスのストリームを使用して、再使用可能とすることができるかと言う点を述べた。加えて、ストリームは、キャッシュメモリ12からメインメモリ14へのデータのライトバックを防ぐことにも使用できる。これは、プロセッサ10によってキャッシュメモリ12に書き込まれた、書込みデータと呼ばれるデータに関する。通常、書込みデータは、このような書込みデータに対して使用されるキャッシュメモリ12の記憶場所が再利用可能となる前に、メインメモリ14にライトバックされなければならない。
【００４７】
しかしながら、特定書込みデータが、プロセッサ10によって実行されるプログラムにおいて一時的にしか使用されず、それ以後二度と使用されない場合も有り得る。この場合、キャッシュ管理ユニット16が、このデータに「ライトバック不要」ステータスを与えるべきである、すなわち、ストリームが、そのメモリー位置を再使用可能とするこのデータから十分に進んだら、メインメモリ14にそのデータをライトバックする必要が無いことを示す情報をキャッシュ管理ユニット16が、保持すべきであることを、プログラムは知らせることが出来る。
【００４８】
「ライトバック不要」データに対して使用されるキャッシュメモリ12内の記憶位置が再利用される場合、キャッシュメモリ12からの書込みデータはライトバックされない。しかしながら、例えば、キャッシュメモリー位置が再使用可能とされる前に、進行中のストリームの理由により、実行されないプログラムの他の部分においてその書込みデータが必要であると言う理由から、または書込みデータに対して使用されるキャッシュメモリー位置が再利用されなければならない時に、そのストリームがまだ十分に進んでいないという理由から、書込みデータに「ライトバック不要」ステータスが与えられていない場合、書込みデータは、ライトバックされる。
【００４９】
「ライトバック不要」ステータスを実現させるために、ストリームの現在のアドレスがデータのアドレスを越えて十分に進んでいるので、キャッシュ管理ユニット16が、望ましくは、そのデータに対しキャッシュメモリー位置を再使用可能とする時に、キャッシュ管理ユニット16が、プログラムによるこのデータの最後の使用後に、例えば、「汚れた」ビットをクリアすることができる。
【００５０】
したがって、キャッシュ管理ユニット16は、その特定ストリームからのデータに「ライトバック不要」ステータスが与えらているか否かを示す各特定ストリームに対する情報も保持していることが好ましい。そして、プロセッサ10の命令セットは、そのストリームに対応しているデータに「ライトバック不要」ステータスが与えられているか否かを各ストリームごとに示す命令を含むことが好ましいく、これに対しては、様々な形の命令を使用することができる。例えば、ライトバックステータスを、ストリームを定義するまたは開始させる命令または別個の命令に含ませることができる。デフォルトステータス（ライトバックまたはライトバック不要）を、このような命令が存在しない状態で使用することもできる。
【図面の簡単な説明】
【図１】処理回路を示す。
【図２】メモリーアドレス空間を示す。
【図３】キャッシュ管理ユニットの動作を記載するフローチャートを示す。
【符号の説明】
10  プロセッサ
12  キャッシュメモリ
14  メインメモリ
16  キャッシュ管理ユニット
20  メモリアドレス空間
【図１】
0004427187.tif 000002
【図２】
0004427187.tif 000003
【図３】
0004427187.tif 000004