(57)【特許請求の範囲】
【請求項１】
ロードターゲット回路であって、
複数のエントリを具備し、前記複数のエントリの各々が、
メモリ内に記憶されているデータフェッチ命令のアドレスを記載するアドレスタグと、
複数のポインタであって、複数のポインタの各々がデータフェッチ命令の生起に対応するターゲットデータアドレスを記憶するためのものである、複数のポインタと、
を具備し、
前記複数のエントリの各々は、更に、前記複数のポインタの中のどの一つがデータフェッチ命令の与えられた生起に対するターゲットデータアドレスを与えるかを表すためのネクストポインタ値を含む、
ロードターゲット回路。
【請求項２】
請求項１に記載のロードターゲット回路であって、前記複数のエントリの各々は更に複数のコントロール値を含み、複数のコントロール値の中の各コントロール値は前記複数のポインタの一つに対応する、ロードターゲット回路。
【請求項３】
請求項１に記載のロードターゲット回路であって、
前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの一つに対応する、複数のコントロール値と、
を具備し、
前記複数のポインタの各々が論理的に順次かつ循環型順序に配列されており、
前記複数のエントリの中の与えられた一つに対して、ループモードを示す前記複数のコントロール値の中の与えられた一つに応答して、前記ネクストポインタが前記複数のコントロール値の中の前記与えられた一つに対応する前記複数のポインタの中の第一のポインタから、前記複数のポインタの中の前記第一のポインタのターゲットデータアドレスに対応するプリフェッチ要求を発した後、順次かつ循環型順序で前記複数のポインタの中の第二のポインタに増やされる、
ロードターゲット回路。
【請求項４】
請求項１に記載のロードターゲット回路であって、
前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの一つに対応する、複数のコントロール値と、
を含み、
前記複数のエントリの中の与えられた一つに対して、ループモードを示す前記複数のコントロール値の中の与えられた一つに応答して、前記ネクストポインタが前記複数のコントロール値の中の前記与えられた一つに対応する前記複数のポインタの中の第一のポインタから、前記複数のポインタの中の前記第一のポインタのターゲットデータアドレスに対応するプリフェッチ要求を発した後、前記複数のポインタの中の第二のポインタに調整される、
ロードターゲット回路。
【請求項５】
請求項１に記載のロードターゲット回路であって、前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの一つに対応する、複数のコントロール値と、
ストライド系列の中のデータターゲットアドレスの数を示すためのストライドスレッショルド値と、
を具備するロードターゲット回路。
【請求項６】
請求項５に記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路をも具備し、
前記複数のエントリの各エントリは更に、そのエントリに対応するプリフェッチ要求の系列の中で発せられたデータターゲットアドレスの数を計数するためのストライドカウンタを具備する、
ロードターゲット回路。
【請求項７】
請求項５に記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路を具備し、
前記複数のエントリの中の与えられた一つに対して、データフェッチ命令の連続的生起に応答して、そして更にストライドモードを示す前記複数のコントロール値の一つに応答して、前記プリフェッチ要求を発するための回路が、前記ストライドスレッショルド値によって示されるストライド系列の中のデータターゲットアドレスの数に等しい数のプリフェッチ要求を発する、
ロードターゲット回路。
【請求項８】
請求項１に記載のロードターゲット回路であって、前記複数のエントリの各々が更に、
複数のコントロール値の各コントロール値が前記複数のポインタの一つに対応する、複数のコントロール値と、
ストライド系列の中の連続するデータターゲットアドレス間のストライド長さを示すためのストライドレングス値と、
を具備するロードターゲット回路。
【請求項９】
請求項８に記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路を具備し、
前記複数のエントリの中の与えられた一つに対して、データフェッチ命令の連続的生起に応答して、そして更にストライドモードを示す前記複数のコントロール値の一つに応答して、前記プリフェッチ要求を発するための回路が、連続プリフェッチ要求を発し、
前記連続プリフェッチ要求の各々がデータターゲットアドレスを含み、そして
前記連続プリフェッチ要求の中の第一の要求の後の前記連続プリフェッチ要求の各々のデータターゲットアドレスは、それ自身と直前のプリフェッチ要求のデータターゲットアドレスとの間の差としてストライドレングスをそなえる、
ロードターゲット回路。
【請求項１０】
請求項１に記載のロードターゲット回路であって、前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの一つに対応する、複数のコントロール値と、
ストライド系列の中のデータターゲットアドレスの数を示すためのストライドスレッショルド値と、
ストライド系列の中の連続するデータターゲットアドレス間のストライド長さを示すためのストライドレングス値と、
を具備するロードターゲット回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はマイクロプロセッサに関するものであり、更に詳しくはループとストライドの一方または両方の予測を行うロードターゲットバッファを具現するマイクロプロセッサ回路、システム、および方法に関するものである。
【０００２】
【従来の技術】
マイクロプロセッサ技術は早いペースで進歩し続けており、設計のすべての側面に考慮が払われている。性能については、種々の関連および非関連のマイクロプロセッサ回路の速度および動作を改善することによりマイクロプロセッサ全体の、より早い速度が達成されている。たとえば、動作効率が改善されている一つの領域は、並列と故障命令の実行を行えるようにすることによって行われる。もう一つの例として、命令、データの一方または両方を含む情報に対して、より早く、より大きなアクセスが行えるようにすることによっても、動作効率は改善される。本発明は主としてこのアクセス能力を目指しており、更に詳しくはデータロード動作またはデータ記憶動作に応答してこのようなデータをプリフェッチすることによりデータに対するアクセスを改善することを目指している。
【０００３】
情報に対するアクセス時間を改善することを目指している最新式のコンピュータシステムでの非常に一般的な一つのアプローチは、システムの中に一つ以上のレベルのキャッシュレベルを含めることである。たとえば、キャッシュメモリをマイクロプロセッサ上に直接形成すること、マイクロプロセッサが外部キャッシュメモリにアクセスすること、の一方または両方を行えるようにする。通常、最低のレベルのキャッシュ（すなわち、アクセスすべき最初のキャッシュ）は、階層構造でそれより上のキャッシュ（一つまたは複数）より小さく、早く、そして与えられたメモリの階層構造の中のキャッシュ数は変わり得る。いずれにしても、キャッシュ階層構造を使用するとき、情報アドレスが発せられるとき、アドレスを通常、最低レベルのキャッシュ宛てとすることにより、そのアドレスに対応する情報がそのキャッシュに記憶されているか、すなわちそのキャッシュに「ヒット」があるか調べる。ヒットが起きると、アドレス指定された情報がキャッシュから検索され、メモリ階層構造の中でより高位のメモリにアクセスする必要は無い。ここで、より高位のメモリはヒットキャッシュメモリに比べて多分アクセスが遅い。これに反して、キャッシュヒットが生じなかった場合には、キャッシュミスが生じたと言われる。次にこれに応じて、問題のアドレスが次の、より高位のメモリ構造に呈示される。この次の、より高位のメモリ構造がもう一つのキャッシュである場合には、もう一度ヒットまたはミスが生じ得る。各キャッシュでミスが生じた場合には、結局プロセスはシステム内の最高位のメモリ構造に達し、その点で、そのメモリからアドレス指定された情報を検索することができる。
【０００４】
【発明が解決しようとする課題】
キャッシュシステムが存在するとした場合、速度を増大するためのもう一つの従来技術の手法では、キャッシュシステムと組み合わせて、情報のプリフェッチが行われる。プリフェッチとは、投機的検索、または情報検索の準備であって、情報が外部メモリのような高位のメモリシステムから検索されてキャッシュに入り、次の後続のクロックサイクル後のある点で、予想される事象に対してマイクロプロセッサが検索された情報を必要とするものと想定している。この点で、ロードの場合の方が多分、検索に関連してより多く考えられるが、プリフェッチはデータの記憶にも関連し得る。更に詳しく述べると、検索されたデータをマイクロプロセッサが使用し得るように特定のデータが検索される場合に、ロードが行われる。しかし、記憶動作では、まず一群のデータが検索され、その群の一部が上書きされる。更に、記憶質問のようないくつかの記憶動作は、実際にデータを検索することはしないで、近づいている事象に対してマイクロプロセッサの外部のリソースを用意する。この事象が情報をそのリソースに記憶する。この「従来の技術」および後に続く「発明の実施の形態」の目的のため、これらの各場合をプリフェッチの型と考えるべきである。いずれにしても、データを投機的に検索してオンチップキャッシュに入れるプリフェッチの場合に、プリフェッチを生じた予想された事象が実際に生じると、プリフェッチされた情報は既にキャッシュに入っているので、キャッシュからフェッチすることができ、高位のメモリシステムからそれを捜し求める必要は無い。換言すれば、実際のフェッチが必要になった場合、プリフェッチによりキャッシュミスの危険性が低下する。また、命令がループ状になっているループ動作を予測し、ルーピング形式で使用されるべきデータをプリフェッチして、キャッシュミスを最少限とすることが望まれる。
【０００５】
【課題を解決するための手段】
上記の手法のもとで、本発明者はマイクロプロセッサの中に、プリフェッチのためのアドレスとして使用すべきデータのアドレスを予測するロードターゲットバッファ（ＬＴＢ）を設ける。更に本発明では、比較的簡単なものからかなり複雑なデータパターンまでの範囲の種々の異なる型のデータパターンを識別した後に、予測する。したがって以下、これらに対処する種々の実施例、および熟練した当業者が確かめ得る他の考慮を示す。
【０００６】
一実施例では、ロードターゲット回路が提供される。ロードターゲット回路には、複数のエントリが含まれる。ロードターゲット回路の中の複数のエントリの各々には、行をデータフェッチ命令に対応させるための値が含まれる。更に、各ロードターゲット回路行には複数のポインタも含まれる。複数のポインタの各々は、データフェッチ命令の生起に対応するターゲットデータアドレスを記憶するためのものである。他の回路、システム、および方法も開示され、特許請求される。
【０００７】
【発明の実施の形態】
図１には、全体が１０で表された本発明の実施例によるマイクロプロセッサに基づくシステムのブロック図を示す。システム１０にはマイクロプロセッサ１２が含まれており、マイクロプロセッサ１２はバスＢをそなえている。図１２に関連して後で説明するように、バスＢは種々の外部装置に接続され得る。しかし、実施例に対する状況を与える目的で、外部メモリ１４だけがバスＢに接続されるものとして示されている。付加的な品目については後で説明する。マイクロプロセッサ１２はマイクロプロセッサ構造の種々の異なる型を表すことができることに注意すべきである。熟練した当業者は、多数のこのような構造を知っているか、確認することができる。しかし、この点で、図１の構成要素に関連する以外のこのようなマイクロプロセッサに関連する詳細は、説明を簡略にするために図示も、説明もしない。
【０００８】
図１のブロックでマイクロプロセッサ１２には、当業者に知られている仕方のメモリ階層構造、すなわち最低位の記憶システムから始まって、より高位の記憶システムに向かうデータを読み書きする階層構造が含まれている。このようなシステムの最低レベルには、０レベルのデータキャッシュ回路があり、これは図１ではＬ０データキャッシュ１６として示されている。「Ｌ０」表示は当業者には知られているようにメモリ階層構造の事柄を示す。詳しく述べると、低い数字が表示されたキャッシュ回路は一般に、後で説明するＬ１およびＬ２のデータキャッシュ回路のようなより高い数字の名称をそなえたキャッシュ回路に比べて（後で説明する）マイクロプロセッサパイプラインの実行ユニットにより近い。更にキャッシュの数字名称は、キャッシュから読んだり書いたりするときにキャッシュが通常アクセスされる上がっていく順番の表示を与える。このように、このようなアクセスはまずＬ０キャッシュに対して行われ、そのキャッシュに対してキャッシュミスが生じた場合には、Ｌ１キャッシュに対するアクセスが続いて行われるというようにメモリ階層構造を通っていき、ついにキャッシュまたは他のメモリ構造にヒットが見出される。本実施例ではＬ０データキャッシュ１６は、１６バイトのブロックで合計１Ｋバイトのデータを記憶するように動作することができる４個の部分からなるセット対応の（４−ｗａｙ  ｓｅｔ  ａｓｓｏｃｉａｔｉｖｅ）キャッシュであり、各部分は一度に６４ビット（すなわち、８バイト）を出力するように動作できることが好ましい。
【０００９】
マイクロプロセッサ１２には更にＬ１データキャッシュ１８が含まれている。Ｌ１データキャッシュ１８はバス１９を介してＬ０データキャッシュ１６に接続される。この場合も、「Ｌ１」という名称はこのキャッシュがメモリ階層構造でＬ０データキャッシュ１６に比べて高位にあるということを必ず示す。本実施例ではＬ１データキャッシュ１８は、３２バイトのブロックで合計８Ｋバイトのデータを記憶するように動作することができる２個の部分からなるセット対応のキャッシュであり、各部分は一度に１２８ビット（すなわち、１６バイト）を出力するように動作できることが好ましい。
【００１０】
システム１０には、Ｌ２統合キャッシュ２０も含まれている。Ｌ２統合キャッシュ２０は、３２バイトのサブブロックをそなえた６４バイトのブロックで合計６４Ｋバイトのデータを記憶するように動作することができる４個の部分からなるセット対応のキャッシュであり、各部分は一度に２５６ビット（すなわち、３２バイト）を出力するように動作できることが好ましい。Ｌ２キャッシュを統合キャッシュと呼ぶのは、データを記憶する他に他の情報も記憶するということを意味するということに注意すべきである。詳しく述べると、後で示すように、Ｌ２統合キャッシュ２０はアドレス変換情報の他に、命令も記憶する。しかし、代替実施例では、情報の型（一つまたは複数）が変わり得るということに注意すべきである。いずれにしてもこのときデータに対して、Ｌ０データキャッシュ１６からＬ１データキャッシュ１８に、そしてＬ２統合キャッシュ２０へとメモリ階層構造が形成されるということに注意すべきである。したがって、Ｌ２統合キャッシュ２０のアドレス指定を生じ得る第一の発生源は、Ｌ１データキャッシュ１８のミスに応答するＬ１データキャッシュ１８である。Ｌ１データキャッシュ１８のミスはＬ０データキャッシュ１６のミスから生じる。更にキャッシュミスを生じた各フェッチの場合、この階層構造の次の、より高いレベルでデータが捜し求められる。したがって、Ｌ２統合キャッシュ２０でミスが生じた場合には、データは外部メモリ１４からアドレス指定される。Ｌ２統合キャッシュ２０にはアクセス制御器２２も含まれていることにも注意すべきである。後で詳細に説明するように、アクセス制御器２２はＬ２統合キャッシュ２０にアクセスするようにという要求を受ける。ここでそれらの要求は、Ｌ２統合キャッシュ２０から情報をフェッチまたはプリフェッチするためのものである。
【００１１】
Ｌ２統合キャッシュ２０に関連する図１に示された他の情報径路について説明する前に、バスＢに向かう上向きの図１の説明を完了するものとして、Ｌ２統合キャッシュ２０は更にバス２４を介してバスインタフェースユニット（ＢＩＵ）２６に接続され、ＢＩＵ２６はバスＢに接続される。前に示唆したように、バスＢによりマイクロプロセッサ１２からの外部アクセスが可能となり、したがってマイクロプロセッサ１２と外部メモリ１４等のマイクロプロセッサ外部の他の要素との間の通信を制御し、遂行することができる。熟練した当業者には明らかなように、外部メモリ１４はメモリ階層構造でＬ２統合キャッシュ２０より高位である（そしてもちろん、Ｌ１データキャッシュ１８およびＬ０データキャッシュ１６よりも高位である）。もう一つの例として、バスＢと主メモリ１４との間に外部キャッシュを接続してもよい。このようにして、マイクロプロセッサ１２はこのような外部キャッシュと通信することができる。更にもう一つの例として、マイクロプロセッサ１２は多マイクロプロセッサシステムで他のマイクロプロセッサと通信してもよい。たとえば、それらの他のマイクロプロセッサのオンチップメモリと通信してもよい。いずれにしても、これらの外部装置は例としてのものであり、この点で、マイクロプロセッサ１２の外部の付加的な要素は簡単さのため詳細に説明しない。このような要素の例は熟練した当業者は知っていたり、確かめることができる。
【００１２】
上記のように、Ｌ２統合キャッシュ２０も命令を記憶する。これについては、Ｌ２統合キャッシュ２０のアドレス指定を生じ得る第二の発生源はＬ１命令キャッシュ２８である。詳しく述べると、Ｌ１命令キャッシュ２８はバス３０を介してＬ２統合キャッシュ２０に接続される。その名前が示すように、Ｌ１命令キャッシュ２８は（Ｌ１データキャッシュ１８にデータが記憶されるのに対して）命令を記憶する。実施例では、Ｌ１命令キャッシュ２８はＬ１データキャッシュ１８と同様の構成と大きさになっており、したがって合計８Ｋバイトの情報を記憶するように動作することができる２個の部分からなるセット対応のキャッシュであることが好ましい。ここでは、情報は３２バイトのブロックの命令であり、各部分は一度に１２８命令ビット（すなわち、１６バイト）を出力するように動作することができる。
【００１３】
Ｌ２統合キャッシュ２０のアドレス指定を生じ得る第三の発生源はトランスレーション・ルックアサイド・バッファ（ＴＬＢ）３２である。詳しく述べると、ＴＬＢ３２はバス３４を介してＬ２統合キャッシュ２０に接続されている。実施例では、マイクロプロセッサの分野では普通に行われているように、論理命令アドレスは対応する物理的アドレスに翻訳（ｔｒａｎｓｌａｔｅ）される。このような状況においてＴＬＢ３２はいくつかの既存の翻訳のテーブルを記憶しているので、後続の時点にこのような翻訳にアクセスすることができ、翻訳を再計算する必要は無い。更に、ＴＬＢ３２の探索にミスがあった場合には、ＴＬＢ３２に結合されたハードウェアは主メモリのページテーブルを通るテーブルウォークを開始することにより、アドレス翻訳を決定する。これらの主メモリページテーブルは一部または全部をＬ２統合キャッシュ２０に記憶してもよい。実施例では、ＴＬＢ３２は２５６エントリ、４個の部分からなるセット対応のものであり、各行が単一の翻訳を記憶するような大きさになっていることが好ましい。
【００１４】
図１に示すように異なるレベルのキャッシュがあるが、このようなキャッシュは各々、仲裁回路３６にも接続される。仲裁回路３６は、低位のキャッシュのミスに基づいて各キャッシュへの相次ぐアクセスの一般的な動作を示すために含まれる。たとえば、上記のように、Ｌ０データキャッシュ１６へのキャッシュアクセスがキャッシュミスになった場合、Ｌ１データキャッシュ１８がアクセスされ、次にＬ２統合キャッシュ２０がアクセスされというようにして、以下同様に行われる。したがって仲裁回路３６は、動作に対する仲裁制御を表し、熟練した当業者は種々のやり方でこれを具現することができる。仲裁回路３６はＬ２統合キャッシュ２０のアクセス制御器２２にも接続されていることに注意すべきである。このようにして、より低レベルのキャッシュのミスに基づいてＬ２統合キャッシュ２０に対するアクセス要求が示されたとき、仲裁回路３６はこのアクセス要求をアクセス制御器２２に与える。しかし、後で詳しく説明するように、アクセス制御器２２は付加的な制御レベルも表し、これによりこれらの要求は順位をつけて表に並べられ、優先順位に基づいてＬ２統合キャッシュ２０に再送出される。
【００１５】
Ｌ２統合キャッシュ２０のアドレス指定を生じ得る第四の発生源は、Ｌ２統合キャッシュ２０にスヌーブ（ｓｎｏｏｐ）要求を出す任意の回路である。当業者には知られているように、スヌープはメモリ階層構造の異なるレベルを通してメモリの一貫性を確実にする機能である。スヌープ要求はマイクロプロセッサの内部または外部で発生することができる。通常、スヌーブは、メモリシステムの一つ以上のレベルに対するアドレスを示すことにより行われる。図１でこの機能は、ＢＩＵ２６から仲裁回路３６へのスヌープアドレス入力として示されている。仲裁回路３６は図１のキャッシュ構造のいずれかにスヌープアドレスを示すことができる。各キャッシュには、一貫性プロトコルを具現するというような当業者には知られている要因に応じて種々の仕方でスヌープアドレスに応答するように指示することができる。たとえば、スヌープアドレスに対応する情報を記憶しているか確かめることだけを行うようにキャッシュに指示することができる。もう一つの例として、スヌープアドレスに対応する情報をそなえていれば、このような情報を出力するようにキャッシュに指示することができる。更にもう一つの例として、スヌープアドレスに対応する情報をそなえていれば、このような情報を無効にするようにキャッシュに指示することができる。いずれにしてもスヌープアドレスは、Ｌ２統合キャッシュ２０に対する更にもう一つの潜在的なアドレスとなる。
【００１６】
マイクロプロセッサ１２のアドレス指定可能なメモリ階層構造の種々の構成要素を示したか、次に、メモリ階層構造からのアドレス指定可能な情報を必要とするマイクロプロセッサの構成要素について説明する。これについては、マイクロプロセッサ１２には全体を３８で表したパイプラインが含まれる。パイプライン３８を使用して、複合命令セットコンピュータ（ＣＩＳＣ：ｃｏｍｐｌｅｘ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｅｒ）で命令を受けて、処理することができる。パイプライン３８は４０から５０までの偶数の参照番号を付した６段階をそなえるものとして例示されている。４０から５０までの各段階は、いくつかの点において、当業者には知られている段階（一つまたは複数）を表しており、異なる構成の中では名前や機能が異なることがあり得る。したがって、以下の説明は例を示すものであり、発明の実施例を限定するものではない。パイプライン３８について一般的に注意すべきことは命令を開始段で受けるということである。本例では、開始段は命令フェッチ段４０である。命令フェッチ段４０には、ブランチターゲットバッファ（ＢＴＢ）４１が含まれる。ブランチターゲットバッファ（ＢＴＢ）４１は、当業者には知られているようにブランチ命令の状況で命令のフェッチを助ける。段４０による命令フェッチは、上記のようなＬ１命令キャッシュ２８からの第一のレベルで行われる。命令フェッチによっては、特にメモリ階層構造システムのより遅い構成要素にアクセスするために、１クロックサイクルより長い間、パイプラインを停止させることがあり得るということに注意すべきである。代表的には、受信された命令はその後、一つ以上の復号段４２で復号される。したがって、パイプラインには整数個の復号段が含まれ得るが、パイプライン３８には例としてこのような復号段４２が一つしか含まれていない。通常、復号プロセスは多段（ずなわち、多クロック）プロセスであることは理解されるはずである。復号段４２（一つ以上の段）はより複雑な命令を伸長して、本明細書でマイクロオペレーションコードと呼ぶ一つ以上の簡単なオペレーンョンとする。これらのマイクロオペレーションコードは、代表的には単一の実行クロックで実行させることができる。マイクロオペレーションコードは構成や製造者により異なる名前が付けられていることに注意すべきである。たとえば、テキサスインスツルメント社の規格では、マイクロオペレーションコードはアトミックオペレーション（ＡＯｐ）と呼ばれる。これらのＡＯｐは全体として完成すれば、そのオプコードとオペランドがある場合にはそれらを含む命令セット命令の完成と卒業を表す。ＡＯｐはいくつかのＲＩＳＣ命令とほぼ同等であるので、マイクロプロセッサの種々の部分に接続されて、復号された命令の実行を次に開始するコードであることに注意すべきである。したがって、ＡＯｐは他の構成でＲＯｐ、μＯｐ、またはＲＩＳＣ８６命令と呼ばれるものと同等である。
【００１７】
復号段４２からマイクロオペレーションコードが発生すると、スケジュール段４４がマイクロプロセッサの対応する適当な実行ユニットに対してそれらのコードを指定する。いくつかの協定では、スケジュール段は各マイクロオペレーションコードのそれの実行ユニットへの発行と呼ばれる。たとえば、マイクロプロセッサに三つの実行ユニット（たとえば、演算ユニット、ロード／記憶ユニット、および浮動小数点ユニット）が含まれている場合には、対応する各実行ユニットは３個以内のマイクロオペレーションコードの群を形成して、単一のクロックサイクルでの実行に対して割り当てることができる。実際には、たとえば、演算ユニットが１個より多く、ロード／記憶ユニットが１個より多いというようにして、マイクロプロセッサが３個より多い実行ユニットを含むことがあり得る。このような場合には、単一のクロックサイクルで実行すべきマイクロオペレーションコードの数をそれに応じて増大することができる。本明細書で使用する用語として、マイクロオペレーションコードの群はその大きさにかかわらず、「マシンワード」と呼ばれる。このようなマシンワードが実行リソース当たり５０ビット以上を必要とすることもまれでないので、三つの実行ユニットをそなえたマイクロプロセッサは幅が１５０ビットのオーダのマシンワードに応答して動作することがあり得る。
【００１８】
スケジュール段４４に続く段の説明をする前に、マシンワードは上記の代わりとして異なる発生源から、すなわちマイクロプログラムメモリ５２から来ることがあるということにも注意すべきである。マイクロプログラムメモリはこの分野ではマイクロＲＯＭと呼ばれることが多い。マイクロプログラムメモリ５２は一般に、マシンワードの種々の列（ｔｈｒｅａｄ）で予めプログラミングされたＲＯＭである。マイクロプログラムメモリ５２の出力は、スケジュール段４４の出力と同様にマルチプレクサ５４の入力として接続される。その結果として、ここでは詳細に説明する必要のない種々の制御信号に応答してマルチプレクサ５４は、スケジュール段４４からのマシンワードではなくてマイクロプログラムメモリ５２からのマシンワードを次の後続の段に与える。更に詳しく述べると、マイクロプログラムメモリ５２に対するエントリポイントアドレスを発生することができる。この場合、このような列の最初のマシンワードが出力され、次に後続の各クロックサイクルの間に列の中の後続のマシンワードを出力することができる。したがって、このブロセスを繰り返すことにより、マイクロプログラムメモリ５２からの全体の列の中の一つの列がパイプライン３８の残りに送られる。パイプライン３８の残りは次にマイクロプログラムメモリの列の中の各マシンワードを実行し、完了することができる。
【００１９】
マルチプレクサ５４の後のオペランドフェッチ段４６は、現在発せられているマシンワードの中のマイクロオペレーションコードのいずれか一つ以上を実行するために必要な任意のデータをフェッチする。代表的にはこのデータには、レジスタまたはメモリからフェッチされたオペランドが含まれる。メモリからデータを検索する状況で、段４６はＬ０データキャッシュ１６に接続され、そのキャッシュからデータを捜す。この場合も、そのキャッシュレベルでミスが生じると、熟練した当業者には明らかなように、より高位のレベル、たとえばＬ１データキャッシュ１８、Ｌ２統合キャッシュ２０、または外部メモリ１４からデータを捜す。命令フェッチと同様に、いくつかのデータフェッチも１クロックサイクルより長くパイプラインを停止させることがある。
【００２０】
実行段４８には、一つ以上の演算ユニット、一つ以上のロード／記憶ユニット、および浮動小数点ユニットのような多数の実行ユニットが含まれる。このような各ユニットに対して、ユニットはマシンワードのそれに対応する部分を実行する。すなわち、各実行ユニットはそれに割り当てられたマイクロオペレーションコードでそれに対応する機能を遂行する。実行段４８の一つ以上の実行ユニットがデータにアクセスすることもある。したがって、段４８はＬ０データキャッシュ１６にも接続され、その接続により、マイクロプロセッサ１２のメモリ階層構造でそのキャッシュより高位の付加的なデータ記憶構造だけでなく、そのキャッシュにもアクセスする。
【００２１】
最後に、段５０は命令を卒業する。これは命令を完了し、マイクロプロセッサの構成された状態に対して、もしあればその命令の影響を及ぼすということを意味する。更に、命令の結果があれば、それがレジスタファイルのようなある記憶装置に書き込まれる。この最後の動作は一般にライトバック（ｗｒｉｔｅ  ｂａｃｋ）と呼ばれ、ときにはパイプラインの最終段の一部でないが、命令の卒業と同時に生じる機能と考えられる。
【００２２】
以上の説明から熟練した当業者には明らかなように、マイクロプロセッサ１２にはそのメモリ階層構造からの情報にアクセスできる種々の回路が含まれ、その情報はデータ、命令、またはアドレス翻訳テーブルのいずれであってもよい。ここまで説明したアクセスはこのような情報の実際のフェッチを処理する。すなわち、その情報がパイプライン３８に直接フェッチされる情報の検索を処理する。代表的には、フェッチされた情報は、それがフェッチされたサイクルの直後のクロックサイクルで作用を受ける。たとえば、命令フェッチ段４０により第一のクロックサイクルでフェッチされた命令は、第一のクロックサイクルに続く次のクロックサイクルに復号段４２により復号することができる。もう一つの例として、第一のクロックサイクルにデータフェッチ段４６によりフェッチされるデータは、第一のクロックサイクルに続く次のクロックサイクルに、実行段４８の実行ユニットが使用することができる。最後に、注意すべきことは、上記のアクセスの型は説明のためのものであり、アクセスの他の型も熟練した当業者は確かめることができる。たとえば、ある命令は、パイプラインの種々の異なる段階のいずれかにあるとき、メモリの階層構造にアクセスして、情報をパイプラインにフェッチすることができる。更に、上記のパイプライン３８の説明は単に例示のためのものである。したがって当業者には知られているように、他の型のパイプライン構成の種々のパイプライン段を通るときに、命令は情報をパイプラインにフェッチすることができる。
【００２３】
フェッチによる情報のアクセスについて説明してきたが、システム１０には、フェッチではなくてプリフェッチを必要とする情報アクセスに関する種々の回路および方法も含まれる。プリフェッチがフェッチと異なるのは、プリフェッチされた情報は受信するとすぐに情報に作用する必要が実際にあるので、検索されるのではなくて投機的に検索されるという点である。本実施例では、後で説明するようにシステム１０のメモリ階層構造を通る実効アクセス時間を短縮するためにプリフェッチが使用される。更に、上記の「従来の技術」で説明したように、プリフェッチはロード、データ記憶、または記憶質問のような場合に関係し得る。いずれにしてもこの点で、後の実施例の理解を容易にするため、前置きの説明を行う。前に述べたように、外部メモリ１４に記憶される情報は種々のキャッシュにも記憶され、異なるキャッシュを特徴付けているのは、一部はメモリ階層構造の中でのそれらの位置と、与えられたキャッシュが記憶する情報の型である。プリフェッチの場合、マイクロプロセッサ１２の中の種々の回路（それらの回路については後で説明する）の中の一つがプリフェッチを希望すると、要求する回路は所望の情報に対応するプリフェッチ要求を発する。後で詳細に述べるように、プリフェッチ要求には少なくとも所望の情報のアドレスと所望の情報の大きさについての何らかの表示（たとえば、バイト数）が含まれることが好ましい。実施例ではプリフェッチ要求が、より低レベルのキャッシュ構造ではなくて、Ｌ２統合キャッシュ２０に直接結合されることに注意すべきである。換言すれば、フェッチ要求と異なりプリフェッチ要求は、その要求により捜される特定の型の情報を記憶しているかも知れない最低レベル（一つまたは複数）のキャッシュにはアクセスしない。このアプローチが行われる理由は、実施例ではＬ２統合キャッシュ２０はその情報が下方包括的であるからである。換言すれば、Ｌ２統合キャッシュ２０より下位のキャッシュ内のどの情報もＬ２統合キャッシュ２０にも記憶されているからである。たとえば、Ｌ１データキャッシュ１８が情報のキャッシュ列を記憶する場合には、その同じ情報がＬ２統合キャッシュ２０にも記憶される。したがって、プリフェッチ動作がＬ２統合キャッシュ２０に発せられてキャッシュミスになった場合、それより低位のキャッシュはどれも要求された情報を記憶していないこともわかるので、プリフェッチ動作を続行して、チップ上の情報をＬ２統合キャッシュ２０に入れることが有益である。一旦情報がチップ上にもたらされると、その後、その情報が必要になった場合、より容易にアクセスできる（すなわち、少なくともＬ２統合キャッシュ２０でアクセスできる）ので、外部アクセスは必要でない。したがって、これに関して注意すべきことは、プリフェッチの利点のほとんどはプリフェッチされたデータをオンチップで持ってくることにより行われる。換言すれば、プリフェッチが無くて、その情報に対するフェッチが後で発せられ、その情報をオフチップで検索しなければならない場合には、このアクセスのために多数のクロックサイクルが必要になると思われる。しかし、情報をオンチップでプリフェッチすることにより、オンチップキャッシュの中の少なくとも１個から情報を入手することができる。したがって、その情報にアクセスするための時間は、オフチップアクセスで必要とされる時間に比べてかなり短くなる。更に、プリフェッチ動作がＬ２統合キャッシュ２０に発せられてキャッシュヒットになった場合、情報はＬ２統合キャッシュ２０から入手でき、Ｌ２統合キャッシュ２０に比べて階層構造でより低位のキャッシュからさえも入手できることがわかっている。したがって、いずれの位置でも、オフチップリソースから情報を検索しなければならない場合に比べて比較的短い期間内に、情報にアクセスすることができる。この好ましい動作の付加的な利点については、後で説明する。いずれにしても、付加的な介在無しに、一旦プリフェッチ要求がＬ２統合キャッシュ２０に示されると、Ｌ２統合キャッシュ２０がその情報を記憶していることを一般的に確かめることができるか、またはその情報をより高位のレベルのメモリから検索してＬ２統合キャッンュ２０に入れることができる。代替案として、プリフェッチされた情報をマイクロプロセッサ１２の中の何か他のリソースに、たとえば一群のプリフェッチバッファの中に記憶してもよい。ここで、それらのバッファはＬ２統合キャッシュ２０の一部であるか、または別個の構造である。いずれにしても、一旦情報がプリフェッチされれば、そして投機的プリフェッチが正しければ、すなわち、その情報がその後実際のフェッチに必要であれば、これはキャッシュ（Ｌ２統合キャッシュ２０）または他のオンチップリソースからアクセス可能であるので、情報に対する実効アクセス時間が最小化される。
【００２４】
プリフェッチの上記の説明で更に注意すべきことは、次のような、本実施例が扱う二つの考慮すべき問題が生じるということである。第一に、どの回路がプリフェッチを発するかという考慮すべき問題がある。第二に、プリフェッチ情報のアクセスは付加的な介在無しに上記のようにしてＬ２統合キャッシュ２０に対して進むと前に述べたが、後で詳しく説明するように本実施例は場合によってはプリフェッチ機能で介在する回路および方法を提供する。
【００２５】
上記したように、実施例では種々の回路がプリフェッチを発し得る。これに関してまず注意すべきことは、実際のフェッチを発し得る上記の回路のいくつかはプリフェッチ要求も発し得るということである。たとえば、実行段４８はデータに対するプリフェッチ要求を、たとえばそれの一つ以上のロード／記憶ユニットの動作により発することができる。もう一つの例として、当業者にはＢＴＢは命令に対する実際のフェッチを発する（すなわち、直ちに復号等を行うためパイプラインに配置するために実際のフェッチを発する）ことが知られているが、本実施例では命令フェッチ段４０のＢＴＢ（ブランチターゲットバッファ）４１もプリフェッチ要求を発することができるので、一つ以上の命令がＬ２統合キャッシュ２０にプリフェッチされる。これについては、本発明と出願人が同じで、 に出願され、ここに引用されている米国特許出願第 号、「マイクロプロセッサにおけるブランチ予測とキャッシュプリフェッチの組み合わせ」（Ｃｏｍｂｉｎｅｄ  Ｂｒａｎｃｈ  Ｐｒｅｄｉｃｔｉｏｎ  Ａｎｄ  Ｃａｃｈｅ  Ｐｒｅｆｅｔｃｈ  Ｉｎ  Ａ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ）（代理人処理番号ＴＩ−２４１５４）を参照できる。マイクロプロセッサ１２には、プリフェッチ要求を発することができる付加的な回路が含まれる。詳しく述べるとマイクロプロセッサ１２には更に、Ｌ２統合キャッシュ２０に接続されたロードターゲットバッファ（ＬＴＢ）５６も含まれる（ただし代替実施例では、それが発するプリフェッチ要求はどこか他の所に、たとえば、より低レベルのキャッシュ（一つまたは複数）に接続することができる）。この点で、そして前置きとして注意すべきことはＬＴＢ５６に、あるデータフェッチ命令のアドレス、およびそれらの命令により将来、どのデータが使用されるかに基づくマイクロプロセッサ１２による予測が含まれる。このようにして、一旦データフェッチ命令自身がパイプライン３８にフェッチされると、ＬＴＢ５６を使用してデータフェッチ命令に対応するエントリをそなえているか判定する。そうであれば、その予測および多分、データフェッチ命令に対応する他の情報に基づいて、ＬＴＢ５６はＬ２統合キャッシュ２０にプリフェッチ要求を発することができる。他の介在無しに、Ｌ２統合キャッシュ２０から始まってメモリ階層構造を通って上向きに伝搬するプリフェッチ動作によりプリフェッチ要求に応答するので、データが現在オンチップである（そのキャッシュの一つの中にある）と確認されるか、またはそれがプリフェッチ要求に応答してマイクロプロセッサ上に検索することができる。したがって、一旦検索された場合、命令がパイプライン３８を通るときにデータフェッチ命令がデータを要求すれば、データは後続の使用に利用できる。他の介在が無い場合にプリフェッチ要求に応答してプリフェッチ動作が行われるということを少し前に説明した。しかし、これについては場合によって、要求に応答するプリフェッチ動作は他のシステムパラメータに基づいて抑制または変形することができる。このようなシステムの更に詳しい情報については、本発明と出願人が同じで、本発明と同じ日に出願され、ここに引用されている米国特許出願第 号、「マイクロプロセッサ��基づくシステムでプリフェッチ処理のための回路、システム、および方法」（Ｃｉｒｃｕｉｔｓ，Ｓｙｓｔｅｍｓ，Ａｎｄ  Ｍｅｔｈｏｄｓ  Ｆｏｒ  Ｐｒｅｆｅｔｃｈ  Ｈａｎｄｌｉｎｇ  Ｉｎ  Ａ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ−Ｂａｓｅｄ  Ｓｙｓｔｅｍ）（代理人処理番号ＴＩ−２４１５３）を参照できる。
【００２６】
ＬＴＢ５６はデータフェッチ命令によってフェッチすべきデータのアドレスを予測する。説明の目的で、このデータをターゲットデータと呼び、そのアドレスをターゲットデータアドレスと呼ぶことにする。ＬＴＢ５６の予測に応答して、データフェッチ命令が実行される前に、ターゲットデータアドレスのターゲットデータをマイクロプロセッサチップ上のキャッシュ（たとえば、Ｌ２統合キャッシュ２０）または他のメモリ構造にプリフェッチすることができる。したがって、その後データフェッチ命令がデータを要求すると、何か外部記憶装置からデータをフェッチしないで、オンチップキャッシュまたはメモリ構造からデータをフェッチすることができる。換言すれば、このようにしてプリフェッチすることにより、キャッシュミスのコストが低減されるので、マイクロプロセッサの効率が向上する。しかし、プリフェッチの利点があるとして、この利点が実現されるのは、ＬＴＢが与えられたデータフェッチ命令に対するデータパターンを正確に予測できる場合だけである。後で詳細に説明するように、本実施例は種々の複雑なデータパターンに対して正確な予測を与えることにより従来の技術を改善する。
【００２７】
少なくとも現在の出版物は科学分野のソフトウェアを対象とした簡単なロードターゲットの予測について論じており、したがって、このようなソフトウェアでしばしば出会うデータ構造を対象としている。これと異なり、本発明者は業務のためのデータレコード処理ソフトウェアは科学および技術のソフトウェアと異なる、かなり異なる型のデータ構造を含むことを認識した。したがって、現在のＬＴＢはこのような異なるデータ構造に対して良好に適合していない。したがって本発明者は本明細書で、データレコード処理ソフトウェアに対して特に有益なターゲットデータのプリフェッチを許容する種々の実施例を示す。レコード処理ソフトウェアとはレコード集約的なプログラムを表わそうとしている。レコードのファイル内の各レコードに対して、命令のループが繰り返されることが多い。この概念を更に導入するために、図２ａは全体を６０で表した簡単なレコードを示しており、このレコードには例として６０ａから６０ｅまでの５個のフィールドが含まれている。もちろん、これより少ない数またはより多い数のフィールドを使用してもよく、それらのフィールドの主題は非常に変化してもよい。図２ａの例は、後の説明のために一般的な状況を示している。レコード６０の最初のフィールド６０ａはＥＭＰＬＯＹＥＥ  ＮＡＭＥ（従業員の氏名）を表し、残りのフィールドはその従業員の属性を指定する。詳しく述べると、第二のフィールド６０ｂはその従業員のＩ．Ｄ．ＮＵＭＢＥＲ（ＩＤ番号）を表し、第三のフィールド６０ｃはその従業員のＨＯＵＲＬＹ  ＷＡＧＥ（時給）を表し、第四のフィールド６０ｄはその従業員のＨＯＵＲＳ  ＷＯＲＫＥＤ  ＦＯＲ  ＴＨＥ  ＰＡＳＴ  ＭＯＮＴＨ（先月の労働時間）（以後ＨＯＵＲＳ  ＷＯＲＫＥＤ（労働時間）と略す）数を表す。第五のフィールド６０ｅは、後でより良く理解できるように、フィールド６０ｃおよび６０ｄに基づくその従業員に対するＰＡＹ  ＤＵＥ（支払い賃金）を表す。
【００２８】
後の説明に対する背景を示すため、図２ｂは４個のレコード６２、６４、６６、および６８を示す。これらは図２ａのレコード６０のフォーマットに従っている。しかし、この場合も後の説明のための例を示すため、レコード６２、６４、６６、および６８の各々に対して特定の情報が与えられている。たとえば、レコード６２には、ＥＭＰＬＯＹＥＥ  ＮＡＭＥ（従業員氏名）としてアベ・アダムス（Ａｂｅ  Ａｄａｍｓ）、そのＩ．Ｄ．ＮＵＭＢＥＲ（ＩＤ番号）として１２３、そのＨＯＵＲＬＹ  ＷＡＧＥ（時給）として６．５０ドル、そのＨＯＵＲＳＷＯＲＫＥＤ（労働時間）数として１８５、そのＰＡＹ  ＤＵＥ（支払い賃金）として１２０２．５０ドルがリストされている。熟練した当業者は、各フィールドのデータについて再度説明しなくても、レコード６４、６６、および６８の各々に対してどのようにこのデータが示されているか理解できるはずである。また、レコード６２、６４、６６、および６８に示された実際の情報フィールドは虚構で作成されたデータに過ぎず、したがって、生死にかかわらず、いかなる個人をも反映したものではない。
【００２９】
本実施例がＬＴＢ技術に関連するものであるとして、ＬＴＢ５６の予測が充分な回数、正確である場合には、ＬＴＢ５６の使用はマイクロプロセッサの効率を改善する。これに関して、レコードフォーマットを導入し、本発明者はデータレコードを処理するためのある公知の手法の環境で予測が充分に許容できるようにするためのＬＴＢ５６の構成の仕方を理解した。図３はこのような手法の一つを紹介するものである。詳しく述べると、データレコード処理ソフトウェアにより普通に使用される一つの手法では、三つの別々のメモリエリアを使用して、三つの異なるデータレコードの処理が重なり合えるようにする。このプロセスを示すため、図３にはＡＲＥＡ１、ＡＲＥＡ２、ＡＲＥＡ３と名付けられた三つの、このようなメモリエリアが示されている。代表的には、図３に関連して説明したやり方で使用されるＡＲＥＡはメモリ内の別々のページであるが、メモリエリアを供するための他の手法を使用してもよい。いずれにしても、三つのＡＲＥＡの中の各エリアの位置は、その開始アドレスによりソフトウェアにはわかる。説明のための例を示すため、ＡＲＥＡ１はメモリのアドレス１２００で始まり、ＡＲＥＡ２はメモリのアドレス２２００で始まり、ＡＲＥＡ３はメモリのアドレス５２００で始まるものとする。例示のため、種々のＡＲＥＡのアドレスは熟練した当業者には理解されるように１６進数である。
【００３０】
一旦、図３のＡＲＥＡの位置がわかれば、各ＡＲＥＡはすぐ後に説明するようにレコードファイルのレコードの中の一つのレコードに対する一時的な作業スペースとして使用される。例として図２ｂのレコードを使用すると、各メモリＡＲＥＡは相次ぐレコードのために使用される。更に、このようなＡＲＥＡの使用は次のように重なり合う。図３でｔ１と示された第一の時点に、ＡＲＥＡ１の開始アドレスである１２００から始まって、データレコードがＡＲＥＡ１にフェッチされる。したがって本例では、図２ｂからのレコード６２がＡＲＥＡ１にフェッチされる。第五のフィールド（すなわち、ＰＡＹ  ＤＵＥ（支払い賃金））が図３に示されているが、その値は最初はレコードの中に無くて、後で説明するように、後で計算されて、メモリに書き込まれることに注意すべきである。また注意すべきことは、このようなレコード６２の入力は代表的には、別個のダイレクトメモリアクセス制御器（ＤＭＡ）等を使用するなどして、中央処理装置（ＣＰＵ：Ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）に負担をかけることなく行われるということである。このようにして、ｔ１の間に、ＤＭＡを使用して、ディスク記憶装置のようなある記憶装置からレコード６２がフェッチされ、ＡＲＥＡ１の開始アドレスである１２００から始まってＡＲＥＡ１に入力される。図３でｔ２で示される第二の時点には、データレコードがＡＲＥＡ２の開始アドレスである２２００から始まってＡＲＥＡ２にフェッチされる。したがって本例では、図２ｂからのレコード６４がＤＭＡを介してＡＲＥＡ２に入力される。しかしｔ２の間で更に注意すべきことは、レコード６４がＡＲＥＡ２に入力されている間に、ＡＲＥＡ１のレコード６２がＣＰＵによって処理されつつあるということである。すなわち、レコード６２のフィールドは、それらのフィールドのどれかを読み出すため、そしてそれらのフィールドに情報を書き込むためにプログラムコードが利用できる。その後、図３でｔ３で示される第三の時点には、データレコードがＡＲＥＡ３の開始アドレスである５２００から始まってＡＲＥＡ３にフェッチされる。したがって本例では、図２ｂからのレコード６６がＤＭＡを介してＡＲＥＡ３に入力される。しかし、ＡＲＥＡ１とＡＲＥＡ２の両方が既にレコードを受けているので、ｔ３の間で更に注意すべきことは、ＤＭＡを介してレコード６６がＡＲＥＡ３に入力されている間に、ＡＲＥＡ２のレコード６４が処理されつつあり、ＡＲＥＡ１のレコード６２が出力されつつあるということである。ＡＲＥＡ１のレコード６２について更に詳しく述べると、注意すべきことは、これもＤＭＡ等を使用することによりＣＰＵに負担をかけることなくディスク記憶装置に出力されるということである。
【００３１】
ＡＲＥＡ１からＡＲＥＡ３のフォーマットが与えられているが、それらのＡＲＥＡに記憶されたレコードの処理を続ける前に注意すべきことは、エリア当たり一つのレコードの上記のフォーマットは例示のためのものであるということである。したがって、代替案として、この性質のＡＲＥＡに対する、ある入力／出力はブロック状レコードによって行われる。この用語は当業者には知られている。ブロック状レコードは、複数のレコードが単一のエリアに配置される場合を示す。ここで、それらの複数のレコードはブロックと呼ばれる。たとえば、図３で、レコード６２および６４をＡＲＥＡ１に記憶し、レコード６６および６８をＡＲＥＡ２に記憶することができる。このように、以下に教示される種々の概念から理解されるように、本実施例により異なるデータパターンが実現され、収容することができる。
【００３２】
ＡＲＥＡ１からＡＲＥＡ３の各ＡＲＥＡが上記のようにしてレコードを受けた後、注意すべきことは、レコードのファイルの中の各レコードを処理しなければならないので、手順が続行されるということである。このようにして、ｔ４で、レコードファイルの中の次のレコードがＡＲＥＡ１に入力される。図３には示されていないか、ｔ４の間に、図２ｂのレコード６８がＡＲＥＡ１に入力される。更に、この同じｔ４の間に、レコード６４がＡＲＥＡ２から出力され、ＡＲＥＡ３のレコード６６が処理される。この手順が与えられると、熟練した当業者には理解できるように、相次ぐレコードをメモリ内で効率的に処理できるとともに、ディスク記憶装置からの、そしてディスク記憶装置へのそれらのレコードのアクセス時間を短縮できる。換言すれば、三つのメモリエリアでなく、単一のメモリエリアだけを使用する場合には、単一のレコードがそのエリアに入力され、処理された後、そのエリアから出力され、その後、次の単一レコードについて同様のことが行われ、以下同様に進められる。この後者の手順では、一つのレコードの入力の時間、もう一つのレコードの処理の時間、更にもう一つのレコードの出力の時間に重なりが無いので、多数のレコードを処理するためには、かなり、より長い時間が必要とされる。したがって、要するに、図３に示す手法はレコード処理効率を改善する。しかし、更に、後で説明するように、図３の手順がどのようにして検出されてＬＴＢ５６に記録される予測可能性のレベルを生じるかということも本発明者は理解した。上記のプロセスと組み合わせてプリフェッチを使用することにより、マイクロプロセッサの効率を更に改善することができる。
【００３３】
本実施例の説明を更に進める。次の表１は、図２ｂのレコードを処理するための簡単な擬似コードプログラムを示す。
【表１】
0003830651.tif 000002
ＬＴＢ５６の構成の説明を進める前に、表１の擬似コードに関連した付加的な注釈を加えることは有用である。まず注意すべきことは、擬似コードとして表１のコードは単なる一例に過ぎず、コードにより示される機能を遂行するためにマイクロプロセッサが使用する実際のコードは、形式、複雑さの一方または両方が異なり得るということである。いずれにしても、表１が示そうとしていることは、種々のプログラムコード行がメモリの中のどこかに記憶されるということと、プログラム行が図２ｂのレコードファイルの中の各レコードに対して種々の動作を行うということである。プログラムコードのメモリ記憶について注意すべきことは、表１は各プログラム行に対するメモリアドレスをリスト表示したものであり、アドレスはアドレス１０から始まり、相次ぐ命令毎に１づつ大きくなる。したがって、この点以降、このような各命令は表１のそのアドレスで表す。コードにより行われる動作に対して表１の例は、各従業員が先月かせいだ金額を計算するものである。すなわち、表１の例は図２ａに示されたＰＡＹ  ＤＵＥ（支払い賃金）フィールドを計算するものである。詳しく述べるとＰＡＹ  ＤＵＥ（支払い賃金）は、各従業員のＨＯＵＲＬＹ  ＷＡＧＥ（時給）にその従業員のＨＯＵＲＳ  ＷＯＲＫＥＤ（労働時間）を乗算することにより計算される。更に詳しく述べると、命令１１および１２はこれらの乗数の各々をそれぞれのレジスタにロードし、命令１３はそれらのレジスタの乗算を行い、積を第三のレジスタに記憶する。最後に、命令１３は結果を対応するレコードに対するＰＡＹ  ＤＵＥ（支払い賃金）フィールドに記憶させる。もちろん、種々の付加的な動作を行うことはできるが、本例は下記の原理を説明するのに充分なはずである。
【００３４】
本発明者は次に、図３のメモリＡＲＥＡに関連して観察され、そして本実施例に従ってＬＴＢ５６により予測され得る動作のルーピングパターンについて説明する。このルーピング手法を説明するために、図２ｂのレコードの処理段を通って上記の擬似コードをたどってみる。Ｊ＝１に対する擬似コードについては、レコード６２（すなわち、Ａｂｅ  Ａｄａｍｓ）が処理される。命令１１はターゲットデータアドレス１２１４にあるＡｂｅのＨＯＵＲＬＹ  ＷＡＧＥ（時給）のターゲットデータをロードする。命令１２はターゲットデータアドレス１２１８にあるＡｂｅのＨＯＵＲＳ  ＷＯＲＫＥＤ（労働時間）のターゲットデータをロードする。命令１３は、これらの二つの乗数の積を計算し、これをレジスタＲＥＧ３に記憶させる。最後に命令１４は命令１３により得られた積を、ＰＡＹ  ＤＵＥ（支払い賃金）フィールドに対応するメモリＡＲＥＡ位置、すなわちターゲットデータアドレス１２１Ｃに記憶さぜる。次に命令１５によりＪが増大させられ、Ｊ＝２に対して、同じ命令によりレコード６４（すなわち、Ｂａｒｒｙ  Ｂａｒｎｅｓ）に対するデータが処理される。したがってこの場合も、命令１１がターゲットデータアドレス２２１４にあるＢａｒｒｙのＨＯＵＲＬＹ  ＷＡＧＥ（時給）のターゲットデータをロードする。命令１２は、ターゲットデータアドレス２２１８にあるＢａｒｒｙのＨＯＵＲＳ  ＷＯＲＫＥＤ（労働時間）のターゲットデータをロードする。その後、積が計算され、ターゲットデータアドレス２２１Ｃに書き込まれる。再びＪが増大させられ、Ｊ＝３に対して、同じ命令によりレコード６６（すなわち、Ｃｉｎｄｙ  Ｃｏｘ）に対するデータが処理される。したがってこの場合も、命令１１がターゲットデータアドレス５２１４にあるＣｉｎｄｙのＨＯＵＲＬＹ  ＷＡＧＥ（時給）のターゲットデータをロードする。命令１２は、ターゲットデータアドレス５２１８にあるＣｉｎｄｙのＨＯＵＲＳ  ＷＯＲＫＥＤ（労働時間）のターゲットデータをロードする。その後、積が計算され、ターゲットデータアドレス５２１Ｃに記憶される。
【００３５】
ファイルの最初の三つのレコードを処理したとき、前に述べたようにＡＲＥＡ３のレコードが上記の命令によって処理されているとき、ＡＲＥＡ１に次のレコードがロードされる。したがって上記の例では、ＡＲＥＡ３のＣｉｎｄｙ  Ｃｏｘに対するレコードが処理されている間、Ｄｉａｎｅ  Ｄａｖｉｓに対するレコード６８がＡＲＥＡ１にフェッチされている。したがって、Ｊ＝４に対して表１からの命令が続行され、同じ命令によりレコード６８（すなわち、Ｄｉａｎｅ  Ｄａｖｉｓ）に対するデータが処理される。したがってこの場合も、命令１１がターゲットデータアドレス１２１４にあるＤｉａｎｅのＨＯＵＲＬＹ  ＷＡＧＥ（時給）のターゲットデータをロードする。命令１２は、ターゲットデータアドレス１２１８にあるＤｉａｎｅのＨＯＵＲＳ  ＷＯＲＫＥＤ（労働時間）のターゲットデータをロードする。その後、積が計算され、ターゲットデータアドレス１２１Ｃに記憶される。最後に、図２ｂには付加的なデータが示されていないが、熟練した当業者には理解されるように、相次ぐ各レコードに対して命令１０から１４がメモリＡＲＥＡ毎に繰り返される。したがって、一つのメモリＡＲＥＡのデータを処理したとき、プロセスはルーピング形式で次のメモリエリアに継続する。すなわち、ＡＲＥＡ１から、ＡＲＥＡ２に、ＡＲＥＡ３に、そして再びＡＲＥＡ１に戻る。
【００３６】
上記を想定して、本発明者は次に上記のことからのデータロードの予測可能性についての本発明者の理解について説明する。たとえば、命令１１の各生起について考えてみる。Ｊ＝１の場合、命令１１がターゲットアドレス１２１４からのデータを要求した。Ｊ＝２の場合、命令１１がターゲットアドレス２２１４からのデータを要求した。Ｊ＝３の場合、命令１１がターゲットアドレス５２１４からのデータを要求した。最後に、Ｊ＝４の場合、命令１１がターゲットアドレス１２１４からのデータをもう一度要求した。このようにして、更に付加的なレコードの処理が行われると、ターゲットアドレスのパターン、すなわち１２１４から２２１４へ、５２１４へ、１２１４に戻るパターンがあり、各レコードに対して繰り返される。したがって、レコードの完全性のため、本発明者はループを予測できるということを理解する。これにより、単一の命令（すなわち、命令１１）がルーピング形式で、すなわち第一のアドレスから、第二のアドレスに、第三のアドレスに、そして第一のアドレスに戻る形式でデータを要求する。更に、命令１２もこのようにしてループ状となるが、アドレス１２１８から、２２１８へ、５２１８へ、１２１８に戻り、これが繰り返される。実際、種々のデータレコード処理ソフトウェアプログラムに対して、このプロセスが生じ得ることがわかる。したがって、与えられたデータフェッチ命令に対して、本実施例はこのようなルーピング手法を検出する。更に本実施例は、データフェッチ命令が検出された形式でループ動作を続けるということを更に予測する。最後に、（好ましくはＬＴＢ５６に記憶されている）予測に基づいて、本実施例はこのルーピング形式で使用されるべきデータをプリフェッチすることができる。これにより、キャッシュミスが最少限となり、後で詳しく説明するようにマイクロプロセッサの効率が改善される。
【００３７】
図４は上記のＬＴＢ５６に示された単一のエントリ５６１の第一の実施例を示す。実施例ではＬＴＢ５６に８個の部分からなるセット対応構造で２０４８個のオーダのエントリを含めることができるが、図４には１個の部分の１エントリだけが示されている。本実施例の残りのエントリは同じフォーマットをそなえることが理解されるはずである。一般にＬＴＢ５６の各エントリは、異なるデータフェッチ命令に対応する情報を記憶するように動作することができる。したがって後でより良く理解されるように、ＬＴＢ５６で２０４８個までの異なるデータフェッチ命令を一度に識別することができる。各エントリ特有の形式化については後で詳細に説明するが、ここではＬＴＢ５６全体の効果を簡単に紹介する。一般に、データフェッチ命令が命令フェッチ段４０によってフェッチされたとき、ＬＴＢ５６が探索されて、そのフェッチ命令に対応するエントリをＬＴＢ５６が記憶しているか判定される。ＬＴＢ５６が記憶していない場合には、後で詳細に説明するようにエントリが作成され、更新される。一旦エントリが作成され、妥当な状態に設定されると、上記のようにそれはデータフェッチ命令によりフェッチされるべきデータのアドレスの一つ以上の予測を与える。換言すれば、データフェッチ命令が命令フェッチ段４０によりフェッチされ、ＬＴＢ５６がそのデータフェッチ命令に対応する妥当なエントリをそなえていることが見出されたとする。この場合、データフェッチ命令がまだ命令パイプライン３８の相対的に上にある間に、ＬＴＢ５６からの予測を使用して、ＬＴＢエントリによって予測されたデータアドレスに対するプリフェッチ要求が発せられる。その結果、この要求に応答して、データをマイクロプロセッサチップ上のキャッシュ等にプリフェッチすることができる。その後、データフェッチ命令がその実行段に達したとき、それはキャッシュから直接データをフェッチすることができ、マイクロプロセッサ外部のメモリからそれにアクセスする必要は無い。このようにして、エントリ５６１についての以下の詳細な説明からより良く理解されるように、マイクロプロセッサの効率が向上する。
【００３８】
エントリ５６１の最初の三つの値はデータフェッチ命令に一般的なものであり、残りの７個の値はデータフェッチ命令に対応するデータをプリフェッチするための予測に向けられている。これらの値の各々については後で説明する。
【００３９】
エントリ５６１の一般的な値から始めると、その最初の値はＡＤＤＲＥＳＳ  ＴＡＧ（アドレスタグ）である。ＡＤＤＲＥＳＳ  ＴＡＧはデータフェッチ命令がメモリのどこに記憶されているかというアドレスをリストしたものである。たとえば、エントリ５６１が表１の第一のロード命令に対応していれば、ＡＤＤＲＥＳＳ  ＴＡＧは１１の値に対応する。エントリ５６１の第二の値には、データフェッチ命令についてのＭＩＳＣＥＬＬＡＮＥＯＵＳ  ＣＯＮＴＲＯＬ  ＩＮＦＯＲＭＡＴＩＯＮ（雑制御情報）が含まれている。ここでこのような情報は、ブランチ命令に対するＢＴＢにリストされた情報と類似のものとすることができる。たとえば、この値の一部として妥当なインジケータを記憶することができる。これにより、エントリ内の情報が妥当であるか、そしてこのような情報を分析する他の回路が依存できるか、後で判定することができる。他の例については、熟練した当業者は確かめることができる。エントリ５６１の第三の値は、データフェッチ命令のＡＣＣＥＳＳ  ＴＹＰＥ（アクセス型）である。アクセス型の種々の例は前に紹介した。たとえば、もっと単刀直入なアクセス型はフェッチ要求である。この場合、データフェッチ命令はあるメモリ位置から情報を検索する（すなわち、ロードする）ために探索を行う。しかし、もう一つの例として、要求はデータ記憶質問であるかも知れない。この場合、データ記憶質問はあるメモリ構造を準備してデータを検索する要求であるが、実際にはデータは検索されない。かわりに、要求はデータフェッチ記憶質問であるかも知れない。ここで、データ記憶質問と同様に、データフェッチ記憶質問でも、あるメモリ構造を準備してデータを検索する。しかし、この場合は更に、準備の一部として一群のデータが検索されてキャッシュに入る。その群の一部はその群への後続の記憶により上書きされるものと予想されている。更に他の型の要求については、熟練した当業者は確かめることができる。
【００４０】
エントリ５６１の予測に関する値について説明しているが、エントリ５６１の第四の値はＮＥＸＴ  ＰＯＩＮＴＥＲ（ネクストポインタ）である。これは、対応するデータフェッチ命令に対してフェッチされるべきデータの次の予測として三つの異なるポインタとそれに対応する制御のうちどれを使用するかを示すものである。更に詳しく述べると、エントリ５６１の残りの６個の値は３個のポインタ（ＰＯＩＮＴＥＲ  Ａ、ＰＯＩＮＴＥＲ  Ｂ、およびＰＯＩＮＴＥＲ  Ｃ）として示されている）とそれらの各ポインタに対する制御値（それぞれＡ  ＣＯＮＴＲＯＬ、Ｂ  ＣＯＮＴＲＯＬ、Ｃ  ＣＯＮＴＲＯＬとして示されている）に対応している。各ＰＯＩＮＴＥＲはターゲットデータアドレスを記憶することができる。したがって、そのアドレスにおけるデータはエントリ５６１に結合された命令に対してプリフェッチされるべきターゲットデータの予測を表す。ＣＯＮＴＲＯＬ情報については後で詳しく説明する。この点で、ＮＥＸＴ  ＰＯＩＮＴＥＲ値に戻って説明する。下記の例を使用して示すようにその値は、３個のポインタおよびそれに対応するＣＯＮＴＲＯＬの中のどれが、エントリ５６１に対するＡＤＤＲＥＳＳ  ＴＡＧで識別されたデータフェッチ命令に対する次のターゲットデータアドレスを予測するかを示す。したがって、ＮＥＸＴ  ＰＯＩＮＴＥＲは２ビットの値であることが好ましい。ここで２ビットの状態は、次の表２に示すように３個のＰＯＩＮＴＥＲとそのＣＯＮＴＲＯＬの中の一つを示す。
【表２】
0003830651.tif 000003
表２でＮＥＸＴ  ＰＯＩＮＴＥＲの２進値が００であれば、これは与えられたデータフェッチ命令に対するターゲットデータアドレスに対する予測として使用されるべき次のＰＯＩＮＴＥＲがＰＯＩＮＴＥＲ  Ａであるということを示す。これにより、ＰＯＩＮＴＥＲ  Ａに対応するＣＯＮＴＲＯＬ情報によって制御される。同様に、値０１および１０はそれぞれＰＯＩＮＴＥＲ  ＢおよびＰＯＩＮＴＥＲ  Ｃに対応する。最後に、１１の値は代替実施例で使用するために取って置かれる。
【００４１】
３個のＰＯＩＮＴＥＲの各々に対するＣＯＮＴＲＯＬ情報は、ＰＯＩＮＴＥＲが妥当であるか否かを示すため、そして妥当であれば、それの対応するＰＯＩＮＴＥＲに対するフェッチパターン型を符号化するために使用される。フェッチパターン型については、下記のように本実施例はデータフェッチパターンの異なる型を検出することができる。これらのモードの一つはループモードであり、これは上記の表１の擬似コードと関連して説明した例に対応し、後で更に説明する。他のモードにはストライディング（ｓｔｒｉｄｉｎｇ）パターンが含まれるが、これについては後で詳しく説明する。いずれにしても、検出されたパターンはＣＯＮＴＲＯＬ情報に符号化される。これまでルーピング（ｌｏｏｐｉｎｇ）だけが紹介されてきたので、表３にはＣＯＮＴＲＯＬ情報の種々の表示が示されている。これらはＰＯＩＮＴＥＲが妥当であるか否か、そして妥当である場合には、それに対応するルーピングの型を３ビットの値で示す。
【表３】
0003830651.tif 000004
表３で、ＣＯＮＴＲＯＬの２進値が０００に等しいと、これは対応するＰＯＩＮＴＥＲ値が妥当でないということを示す。一方、ＣＯＮＴＲＯＬの左端のビットが１に等しければ、ＣＯＮＴＲＯＬの右の２ビットは、下記の例で示すように、現在のＰＯＩＮＴＥＲが指定するアドレスからフェッチした後、制御がそれにループを形成すべきＰＯＩＮＴＥＲを指定する。最後に、ＣＯＮＴＲＯＬの左端のビットが０に等しく、右側の２ビットの中の１ビットが非０であれば、後で詳しく説明するように代替実施例で使用するための更に付加的なモードが表される。
【００４２】
エントリ５６１の特性と上記の種々の側面を更に示すため、表１に関連してエントリ５６１の中の値の設定について以下説明する。更に詳しく述べると、以下の説明は表１の命令１１に当てはまるが、表１の命令１２にも同様に当てはまる。前に述べたように表１のプログラムは、マイクロプロセッサ１２がアクセスできるメモリ、たとえば外部メモリ１４の中に命令として記憶される。したがって、それらの命令を処理するため、各命令がパイプライン３８内にフェッチされ、それを通ってその実行段に向かう。したがって、このプロセスの間に、命令１１が初めて（すなわち、命令１０のＪ＝１に対して）命令フェッチ段４０によりフェッチされる。この点で当業者には知られた手法により、命令がロード、記憶、記憶質問等のようなデータフェッチ命令であるということが検出される。命令がデータフェッチ命令であると検出されたことに応答して、ＬＴＢ５６はそれのエントリの一つが命令１１に対応するか判定するように求められる。現在の例では、これが命令１１がフェッチされる最初であるので、ＬＴＢ５６は命令１１に対応するエントリをそなえていない。したがって、後で説明するようにエントリが作成される。更に、エントリがＬＴＢ５６で検出された場合には、命令１１に制御タグを付けることもできるので、それがパイプライン３８を通るとき、ＬＴＢ５６でそれに対して既に設定されたエントリをそなえるデータフェッチ命令であることがわかる。
【００４３】
ＬＴＢ５６内でのエントリの作成にはまず、ＬＴＢ５６のどこでエントリを作成するか決めることが含まれる。これについては、ＬＴＢ５６にまだ未使用の行があれば、それらの行の一つをランダムまたは何か置換アルゴリズムにより選択して、命令１１に対応するように使用することができる。これに反して、ＬＴＢ５６の各行が他のデータフェッチ命令に対して既に設定されていれば、既存の各エントリに対応する最古使用（ＬＲＵ：ｌｅａｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ）がチェックされ、最古使用であるエントリが立ちのかせられ（すなわち、無効にされ）て、その場所に新しいエントリを形成することができる。ＬＲＵを使用してテーブル内のエントリを立ちのかすことについては、キャッシュの使用におけるように当業者には知られており、ここに引用されているパターソンとヘネシー箸「コンピュータ構成の定量的アプローチ」というテキストの第５章に示されている（”Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ａ  Ｑｕａｎｔｉｔａｔｉｖｅ  Ａｐｐｒｏａｃｈ”，Ｓｅｃｏｎｄ  Ｅｄｉｔｉｏｎ，ｂｙ  Ｐａｔｔｅｒｓｏｎ  ａｎｄ  Ｈｅｎｎｅｓｓｙ，Ｍｏｒｇａｎ  Ｋａｕｆｍａｎｎ  Ｐｕｂｌｉｓｈｅｒｓ，Ｉｎｃ．）。二つの手法に構わず、本発明の実施例に戻って、現在の例としてエントリ５６１の中の命令１１のためにエントリが形成されたものとする。エントリ５６１を選択すると、それのアドレスタグの値が、１１に対応するように、すなわち現在のデータフェッチ命令がメモリの中に記憶されているアドレスを表すように、設定される。更に後でより良く理解されるように、ＮＥＸＴ  ＰＯＩＮＴＥＲの値が０１に、すなわち、ＰＯＩＮＴＥＲ  Ｂが命令１１の次の生起の際に使用されるべき次のポインタであるということを示すように設定される。更に、これは命令１１の最初の生起であるので、命令１１の次の生起がどのようなデータを必要とするかを予測する情報は一般に充分でない。しかしデフォルトとして、現在のデータフェッチ命令（すなわち、命令１１）がループモードの一部である、すなわち上記の表１の擬似コードの例によって示されるように命令の生起毎にルーピング形式でデータが集められるものと予測される。したがって、ＰＯＩＮＴＥＲ  ＡのターゲットアドレスからＰＯＩＮＴＥＲ  Ｂのターゲットアドレスに向かってループが形成されると考えられるので、ＰＯＩＮＴＥＲ  Ａに対応するＡ  ＣＯＮＴＲＯＬ情報が１０１に設定される。これにより、次のターゲットアドレスがＰＯＩＮＴＥＲ  Ｂにより指示されるループモードが予測される。しかし、この予測を超えて、残りのＰＯＩＮＴＥＲ  ＢおよびＰＯＩＮＴＥＲ  Ｃに対応するＣＯＮＴＲＯＬ情報値が非妥当（すなわち、表３に示す０００）に設定される。エントリ５６１が設定された後、結局、命令１１はパイプライン３８を通り、それが必要とするデータに対する実際のアドレスを確かめることができる。しかし、この点で、そのアドレスがＰＯＩＮＴＥＲ  Ａの値の中に記憶される。図３に関連して示した例で説明したように、命令１１の最初の生起はアドレス１２１４からのデータを必要とする。したがって、１２１４のアドレスがＰＯＩＮＴＥＲ  Ａの中に記憶される。
【００４４】
表１からの上記の説明を続ける。Ｊ＝２である次の繰り返しのため、命令１４は制御を命令１０に戻す。したがって、２回目に、命令１１が命令フェッチ段４０によってフェッチされる。再び、命令１１がデータフェッチ命令であることが検出されるので、ＬＴＢ５６を使用して、それのエントリの一つが命令１１であるか判定する。現在の例では、命令１１の前の生起のため、そして他のどの介在事象もエントリに影響を及ぼさなかったと仮定しているので、エントリ５６１のＡＤＤＲＥＳＳ  ＴＡＧが命令１１に対応するものとして検出される。これに応答して、エントリ５６１のＮＥＸＴ  ＰＯＩＮＴＥＲを使用して、予測されたターゲットデータアドレスのどれが命令１１に対応するものか判定する。上記のようにＮＥＸＴ  ＰＯＩＮＴＥＲはＰＯＩＮＴＥＲ  Ｂを示すので、可能性のあるターゲットデータアドレスとしてＰＯＩＮＴＥＲ  Ｂの値が調べられる。更に上記のようにＰＯＩＮＴＥＲ  Ｂに対応するＢ  ＣＯＮＴＲＯＬは現在、非妥当に設定されている。したがって、この点で、命令１１の第二の生起に対するターゲットデータアドレスの予測は無い。これに応答して、まずＮＥＸＴ  ＰＯＩＮＴＥＲの値が１０に設定される。すなわち、ＰＯＩＮＴＥＲ  Ｃが、命令１１の次の生起時に使用するべき次のポインタであることが示される。更に、再びデフォルトとして、現在のデータフェッチ命令（すなわち、命令１１）がループモードの一部となることが予測される。したがって、ＰＯＩＮＴＥＲ  ＢのターゲットデータアドレスからＰＯＩＮＴＥＲ  Ｃのターゲットデータアドレスに向かってループが形成されると考えられるので、Ｂ  ＣＯＮＴＲＯＬが１１０に設定される。これにより、次のターゲットアドレスがＰＯＩＮＴＥＲ  Ｃにより指示されるループモードが予測される。その後、再びプロセスは命令１１がパイプライン３８を通過するのを、それの実際のターゲットデータアドレスが判定されるまで待つ。図３に関連して示した例では、上記のように命令１１の第二の生起はアドレス２２１４からのデータを必要とするので、２２１４のアドレスがＰＯＩＮＴＥＲ  Ｂに記憶される。これまでの例のように二つのターゲットデータアドレスが二つのＰＯＩＮＴＥＲ（たとえば、ＰＯＩＮＴＥＲ  ＡおよびＰＯＩＮＴＥＲＢ）に記憶された後、（または代わりとして、第二のアドレスが記憶されているのと同時に、またはそれが記憶される前に）、後で明らかになる理由により付加的な試験が行われる。詳しく述べると、二つのターゲットデータアドレスが一致するか判定される。しかし、現在の例では、このような一致は無い。したがって、後で詳しく説明するようにループモードの仮定のもとでプロセスが続行される。
【００４５】
表１からの上記の例について更に説明を続ける。Ｊ＝３である次の繰り返しのため、命令１４は制御を命令１０に戻す。したがって、３回目に、命令１１が命令フェッチ段４０によってフェッチされる。再び、命令１１がデータフェッチ命令であることが検出され、ＬＴＢ５６を使用して、命令１１に対応するエントリ５６１にアクセスする。これに応答して、エントリ５６１のＮＥＸＴ  ＰＯＩＮＴＥＲ値を使用して、予測されたターゲットデータアドレスのどれが命令１１に対応するものか判定する。ＮＥＸＴ  ＰＯＩＮＴＥＲはＰＯＩＮＴＥＲ  Ｃを示すので、可能性のあるターゲットデータアドレスとしてＰＯＩＮＴＥＲ  Ｃの値が調べられる。しかし、上記のようにＰＯＩＮＴＥＲ  Ｃに対応するＣ  ＣＯＮＴＲＯＬは現在、非妥当に設定されている。したがって、この点で、命令１１の第三の生起に対するターゲットデータアドレスの妥当な予測は無い。これに応答して、まずＮＥＸＴ  ＰＯＩＮＴＥＲの値が００に設定される。すなわち、ＰＯＩＮＴＥＲ  Ａが、命令１１の次の生起時に使用するべき次のポインタであることが示される。もう一度、デフォルトとして、現在のデータフェッチ命令１１がループモードの一部となることが予測される。これにより、ＰＯＩＮＴＥＲ  ＣのターゲットデータアドレスからＰＯＩＮＴＥＲ  Ｃのターゲットデータアドレスに向かってルーピングされるので、ＰＯＩＮＴＥＲ  Ｃに対応するＣ  ＣＯＮＴＲＯＬが１００に設定される。これにより、次のターゲットアドレスがＰＯＩＮＴＥＲ  Ａにより指示されるループモードが予測される。その後、再びプロセスは命令１１がパイプライン３８を通過するのを、それの実際のターゲットデータアドレスが判定されるまで待つ。図３に関連して示した例では、上記のように命令１１の第三の生起はアドレス５２１４からのデータを必要とするので、５２１４のアドレスがＰＯＩＮＴＥＲ  Ｃに記憶される。これまでの例のように三つのターゲットデータアドレスが三つのすべてのＰＯＩＮＴＥＲに記憶された後、（または代わりとして、第三のアドレスが記憶されているのと同時に、またはそれが記憶される前に）、後で明らかになる理由により付加的な試験が行われる。詳しく述べると、最も最近のターゲットデータアドレス（たとえば、ＰＯＩＮＴＥＲ  Ｃの中にあるターゲットデータアドレス）が最も最古のターゲットデータアドレス（たとえば、ＰＯＩＮＴＥＲ  Ａの中にあるターゲットデータアドレス）と一致するか判定される。しかし、現在の例では、このような一致は無い。したがって、後で詳しく説明するようにループモードの仮定のもとで、現在説明しているプロセスが続行される。しかし注意すべきことは、後で詳しく説明する代替ブロセスでは、最も最近のターゲットデータアドレス（たとえば、ＰＯＩＮＴＥＲ  Ｃの中にあるターゲットデータアドレス）がＰＯＩＮＴＥＲ  Ｂの中にあるターゲットデータアドレスとも一致するかという判定も行われるということである。
【００４６】
説明の、この点現在で上記の表１の例をまとめると、命令１１が３回処理された例でエントリ５６１が図５にリストされた値となる。したがって要約すると、まず使用すべきＮＥＸＴ  ＰＯＩＮＴＥＲはＰＯＩＮＴＥＲ  Ａである。更に、各ＰＯＩＮＴＥＲに対してループモードが予測される。換言すれば、ＰＯＩＮＴＥＲ  Ａが第一のターゲットデータアドレス（すなわち、１２１４）を表し、それに対応するＡ  ＣＯＮＴＲＯＬが予測するところによれば、ＰＯＩＮＴＥＲ  Ａにより指示されるデータが命令１１により使用された後、それの次の生起がＰＯＩＮＴＥＲ  Ｂのターゲットデータアドレスに対してループとなる。同様に、ＰＯＩＮＴＥＲ  Ｂが第二のターゲットデータアドレス（すなわち、２２１４）を表し、それに対応するＢ  ＣＯＮＴＲＯＬが予測するところによれば、ＰＯＩＮＴＥＲ  Ｂにより指示されるデータが命令１１により使用された後、それの次の生起がＰＯＩＮＴＥＲ  Ｃのターゲットデータアドレスに対してループとなる。ＰＯＩＮＴＥＲ  Ｃが第三のターゲットデータアドレス（すなわち、５２１４）を表し、それに対応するＣ  ＣＯＮＴＲＯＬが予測するところによれば、ＰＯＩＮＴＥＲ  Ｃにより指示されるデータが命令１１により使用された後、それの次の生起がＰＯＩＮＴＥＲ  Ａのターゲットデータアドレスに戻るループを完成する。
【００４７】
上記のことから熟練した当業者には明らかなように、命令１１の後続の生起毎に、ＬＴＢエントリ５６１はその命令に対するデータフェッチのパターンを正確に予測する。たとえば、データフェッチ命令の第四の生起に対する例を続けると、命令フェッチ段４０により命令１１がフェッチされ、エントリ５６１が検出され、使用される。ＰＯＩＮＴＥＲ  Ａが現在制御しつつあるということをＮＥＸＴ  ＰＯＩＮＴＥＲ値が示し、Ａ  ＣＯＮＴＲＯＬがループモードを示し、そして命令１１のこの第四の生起ではターゲットデータアドレス１２１４のターゲットデータが必要になるということをＰＯＩＮＴＥＲ  Ａの値が予測する。したがってこの点で、ＬＴＢ５６またはそれと結合された回路によりプリフェッチ要求が発せられ、ターゲットデータアドレス１２１４のデータのプリフェッチが要求される。したがって図１ｂおよび図２に戻って、この第四の生起によりプリフェッチ要求が発せられ、Ｄｉａｎｅ  Ｄａｖｉｓに対するＨＯＵＲＬＹ  ＷＡＧＥ（時給）が検索される。このように、データフェッチ命令１１がパイプライン３８を通るとき、このデータをオンチップキャッシュにプリフェッチすることができる。その後、データフェッチ命令１１が実行されるとき、それは代替案のように外部メモリから検索する必要無しにオンチップキャッシュからデータをロードすることができる。この代替案では、はるかに長い時間を要する。
【００４８】
データフェッチ命令１１の第四の生起と、その命令の後続の各生起を更に使用して、エントリ５６１が正確であることを保証する。たとえば、第四の生起の間に、データフェッチ命令の実行の前または実行の間に、それの実際のターゲットデータアドレスが判定される。現在の例で、図２ｂのレコードでは、実際のターゲットデータアドレスは予測されたアドレスと同じ、すなわち、１２１４のアドレスとなる。その結果、エントリ５６１はその予測が正しいままとなり、修正する必要は無い。実際、熟練した当業者には理解されるように、データフェッチ命令１１の相次ぐ生起毎に、図５の値により示される予測は正確である。これにより、データフェッチ命令１１の各生起に対して、メモリアドレス１２１４、２２１４、および５２１４からのデータの連続したプリフェッチを行うことができる。したがって、これらの各場合に、エントリ５６１の正確さが確かめられ、その中の値は乱されない。
【００４９】
三つのアドレスを含むルーピングパターンに対してエントリ５６１を成功裏に設定する例を示した。命令１１の第二の繰り返し（すなわち、Ｊ＝２）に関連して説明したように、二つのターゲットデータアドレスが一致するかという比較も行われ、上記の例ではこのような一致は無かった。しかし注意すべきことは、本実施例は、ある命令に対するターゲットデータアドレスとして同じデータアドレスが繰り返しアクセスされるデータパターンを検出することもでき、上記の比較はこのような検出を行うための一つの手法である。更に詳しく述べると、代わりの例として、命令１１が上記のようにルーピングではなくて、アドレス１２１４に繰り返しアクセスしたものと仮定する。このようにして、命令１１の第二の繰り返し後に、上記の手法を使用してＰＯＩＮＴＥＲ  ＡとＰＯＩＮＴＥＲ  Ｂの両方が１２１４に設定される。しかし前に説明したように、ＰＯＩＮＴＥＲ  Ｂが設定された後にＰＯＩＮＴＥＲ  ＡとＰＯＩＮＴＦＲ  Ｂの比較も行われる。しかし、現在の例では二つは一致するので、代替予測手法はデータフェッチ命令が同じターゲットデータアドレスに繰り返しアクセスする命令であるということを予測する。これに応答して、ＮＥＸＴ  ＰＯＩＮＴＥＲが０１に維持され、これによりＰＯＩＮＴＥＲ  Ｂがもう一度ＮＥＸＴ  ＰＯＩＮＴＥＲであることが示される。その結果、命令１１の相次ぐ生起毎に、ＰＯＩＮＴＥＲ  Ｂが予測されたターゲットデータアドレスを記憶しているということをＮＥＸＴ  ＰＯＩＮＴＥＲは連続的に示す。これにより、同じアドレスのループモードが示される。したがって、その点以降、そして予測の誤りが検出されるまで、命令１１に対するターゲットデータアドレスとして同じアドレス（たとえば、１２１４）が使用される。注意すべきことは、ＰＯＩＮＴＥＲ  Ａがこの同じターゲットデータアドレスを記憶するので、代わりにＮＥＸＴ  ＰＯＩＮＴＥＲはＰＯＩＮＴＥＲ  Ａを示すものとして維持することにより、アドレスの相次ぐ各生起がターゲットデータアドレスとしてアドレス１２１４を予測するようにもできる。実際、更にＰＯＩＮＴＥＲ  ＡとＰＯＩＮＴＥＲ  Ｂの両方が同じアドレスを指示するので、ＰＯＩＮＴＥＲ  ＡとＰＯＩＮＴＥＲ  Ｂとの間にループを形成するように制御を設定できる。これにより、実際上、両者が指示する同じアドレス（すなわち、１２１４）が命令１１の相次ぐ生起に対するターゲットデータアドレスとなる。
【００５０】
上記の同じアドレスパターンを検出する場合の他に、命令１１の３回目の繰り返し（すなわち、Ｊ＝３）に関連して説明したように、ＰＯＩＮＴＥＲ  Ｃの設定に関連して、それが最古のターゲットデータアドレス（たとえば、、ＰＯＩＮＴＥＲ  Ａの中のターゲットデータアドレス）と一致するか判定される。上記の例では一致が無かったので、プロセスはループモードの仮定のもとで続行された。しかし、ここで注意すべきことは、本実施例はループに上記のような三つではなくて二つのアドレスだけが含まれるルーピングデータパターンを検出することもできるということである。更に詳しく述べると、代わりの例として、命令１１が一つの生起でアドレス１２１４にアクセスし、次の生起でアドレス２２１４にアクセスし、次の生起でアドレス１２１４にループで戻り、以下同様にルーピングパターンを繰り返すものと仮定する。したがって、命令１１の３回目の繰り返しの後、上記の手法を使用してＰＯＩＮＴＥＲ  ＡとＰＯＩＮＴＥＲ  Ｂは１２１４と２２１４にそれぞれ設定されるが、ＰＯＩＮＴＥＲ  Ｃも１２１４に設定される。また上記したように、ＰＯＩＮＴＥＲ  Ｃの設定後に、ＰＯＩＮＴＥＲＡとＰＯＩＮＴＥＲ  Ｃとの比較、およびＰＯＩＮＴＥＲ  ＢとＰＯＩＮＴＥＲ  Ｃとの比較もある（ＰＯＩＮＴＥＲ  ＡとＰＯＩＮＴＥＲ  Ｃとが一致すれば、ＰＯＩＮＴＥＲ  ＢとＰＯＩＮＴＥＲ  Ｃとを比較する必要は無い。現在の筋書きでは、ＡがＣに等しければ、ＢはＣに等しくないからである（ＡはＢに等しくないと既に判定されたため））。しかし現在の例では、ＰＯＩＮＴＥＲ  ＡとＰＯＩＮＴＥＲ  Ｃとが一致するので、代わりの予測手法がデータフェッチ命令はＰＯＩＮＴＥＲ  Ｂ内のアドレスからループでＰＯＩＮＴＥＲ  Ａ内のアドレスに戻る命令であると予測する（すなわち、ＰＯＩＮＴＥＲ  ＣとＰＯＩＮＴＥＲ  Ａとが同じターゲットデータアドレスを表すから）。これに応答して、ＮＥＸＴ  ＰＯＩＮＴＥＲが０１に設定される。これにより、ＰＯＩＮＴＥＲ  Ｂがもう一度ＮＥＸＴ  ＰＯＩＮＴＥＲであるということが示される。更に、Ａ  ＣＯＮＴＲＯＬが１０１に設定されることにより次のＰＯＩＮＴＥＲがＰＯＩＮＴＥＲ  Ｂであることが示されるとともに、Ｂ  ＣＯＮＴＲＯＬが１００に設定されることにより次のＰＯＩＮＴＥＲがＰＯＩＮＴＥＲ  Ａであることが示される。その後、データフェッチ命令の生起毎に、ＮＥＸＴ  ＰＯＩＮＴＥＲがＰＯＩＮＴＥＲ  ＡとＰＯＩＮＴＥＲ  Ｂとの間に切り換えることができるので、それらの二つのＰＯＩＮＴＥＲによりそれぞれ示される二つのアドレスの間でループが継続される。
【００５１】
上記の説明は、データフェッチ命令１１の４回目の生起とその命令の後続の各生起がエントリ５６１の正確な予測を生じる例を示す。しかし他の場合には、問題となっているデータフェッチ命令が三つのターゲットデータアドレスの間にループとなっているように思われるが、データフェッチ命令の付加的な生起により、予測されたループパターンからはずれた実際のターゲットデータアドレスが生じる。この場合、エントリ５６１はある仕方で修正される。このような修正の一例を後で、ルーピングの前にストライディングを行う実施例に関連して説明する。しかし更に他の修正は、熟練した当業者が確かめることができ、図４の実施例で与えられる種々の値のフォーマットに構成することもできる。
【００５２】
これまで説明してきたようにＬＴＢ５６の実施例によるループモードの構成が与えられた場合、後で説明するようにＬＴＢ５６の各エントリのフォーマットを拡張することにより、付加的な実施例を実現することができる。この実施例は、上記の場合のようにルーピングを予測するだけでなく、ターゲットデータアドレス後であるが、次のターゲットデータアドレスに対してループを形成する前に、ストライド（ｓｔｒｉｄｅ）を予測する。付加的な実施例に対する紹介として、図６ａは図２ａのレコード６０をもう一度示しているが、そのレコードに付加的な四つのフィールド６０ｆから６０ｉが付加されている。図６ａに示すように、これらのフィールドはそれぞれ、今月の第一週から第四週に対するＷＥＥＫＬＹＨＯＵＲＳ  ＷＯＲＫＥＤ（週労働時間）数を表す。したがって、これらのフィールドは加算されると、フィールド６２ｄに示されたＨＯＵＲＳ  ＷＯＲＫＥＤ  ＦＯＲ  ＰＡＳＴ  ＭＯＮＴＨ（先月の労働時間）を与える。もちろん本例では、与えられた月が４週しかないものと仮定している。この仮定は、本実施例の以後の説明の基礎を与えるとともに、例を簡単にするために行われたものである。いずれにしても、４週を仮定し、そして前には説明しなかったが、フィールド６０ｆから６０ｉを加算し、その結果をフィールド６０ｄに記憶するプログラムによって、フィールド６０ｄの値を書き込むことができる。
【００５３】
図６ａの概念を更に説明するために、図６ｂは図２ｂのレコード６２、６４、６６、および６８を示すが、それらのレコードに図６ａにより導入された新しいフィールドが付加されている。たとえば、Ａｂｅ  Ａｄａｍｓに対応するレコード６２で、フィールド６０ｆから６０ｉはＡｂｅが先月の第一週に４０時間働き、先月の第二週に５０時間働き、先月の第三週に５０時間働き、先月の第四週に４５時間働いたということを表す。熟練した当業者には理解されるように、このデータはレコード６４、６６、および６８の各々に対しても与えられる。その中の各フィールドのデータについて再び説明することはしない。
【００５４】
図６ａおよび６ｂがあたえられたとき、下の表は図６ｂのレコードを処理するための簡単な擬似コードプログラムを示す。このプログラムは、各ＷＥＥＫＬＹＨＯＵＲＳ  ＷＯＲＫＥＤ（週労働時間）フィールドの和を判定することによりＨＯＵＲＳ  ＷＯＲＫＥＤ  ＦＯＲ  ＴＨＥ  ＰＡＳＴ  ＭＯＮＴＨ（先月労働時間）の各レコードに対する値を与える。
【表４】
0003830651.tif 000005
【００５５】
付加的なＬＴＢ５６の実施例の説明を進める前に、再び注意すべきことは、表４が擬似コードを表し、したがってコードによって示される機能を果たすためマイクロプロセッサが使用する実際のコードは形式と複雑さの一方または両方が異なることがあり得る。いずれにしても、もう一度、表４のプログラムコードの種々の行がメモリのどこかに記憶され、プログラム行は図６ｂのレコードファイルの中の各レコードに対して種々の動作を行う。プログラムコードのメモリ記憶装置に対して、上記の表１と同様に、表４はプログラムの各行に対するメモリアドレスをリストしたものである。表４の例に対して、プログラムコードを記憶するメモリアドレスはアドレス２０から始まって、相次ぐ命令毎に増大する。この点以降、このような各命令は表４のそれのアドレスによって表される。コードによって行われる動作については、表４の例の命令２２から２６は、従業員のレコードにリストされた４週の各々に対してＷＥＥＫＬＹ  ＨＯＵＲＳ  ＷＯＲＫＥＤ（週労働時間）を従業員毎に加算することにより、従業員毎のＨＯＵＲＳ  ＷＯＲＫＥＤ  ＦＯＲ  ＴＨＥ  ＰＡＳＴ  ＭＯＮＴＨ（先月の労働時間）を計算する。更に詳しく述べると、命令２１がレジスタＲＥＧ２をクリアした（すなわち、それを０にセットした）後、４回の繰り返しに対して命令２３はＷＥＥＫＬＹＨＯＵＲＳ  ＷＯＲＫＥＤ（週労働時間）の四つの値の相次ぐ一つをレジスタＲＥＧ１にロードする。それらの各々に対して、命令２３はロードし、命令２４はレジスタＲＥＧ１とＲＥＧ２の内容を加算し、結果をレジスタＲＥＧ２に記憶する。したがって熟練した当業者には理解されるように命令２４は、与えられた従業員レコードに対して命令２３によりロードされた値の各々の和をレジスタＲＥＧ２に累積する。四つの週フィールドのすべてに対して加算が完了すると、命令２６はＨＯＵＲＳ  ＷＯＲＫＥＤ  ＦＯＲ  ＴＨＥ  ＰＡＳＴ  ＭＯＮＴＨ（先月の労働時間）と名付けられたフィールドに対応するロケーションのレコードに総計を戻して記憶する。もう一度、命令２７から２９によって更に示されるように、種々の付加的な動作が行われ得る。詳しく述べると、すべての繰り返しの後に命令２４がＨＯＵＲＳ  ＷＯＲＫＥＤ  ＦＯＲ  ＴＨＥ  ＰＡＳＴ  ＭＯＮＴＨ（先月の労働時間）の合計を与えると、命令２７がその従業員のＨＯＵＲＬＹ  ＷＡＧＥ（時給）をロードする。命令２８がこの値にその従業員のＨＯＵＲＳ  ＷＯＲＫＥＤ  ＦＯＲ  ＴＨＥ  ＰＡＳＴ  ＭＯＮＴＨ（先月の労働時間）を乗算する。その結果、そのときレジスタＲＥＧ２にある積がその従業員に対するＰＡＹ  ＤＵＥ（支払い賃金）を表す。したがって命令２９により、その値がレコードに書き戻される。最後に、更に付加的な動作が行われ得るが、以下に示す原理を説明するためには本例は充分なはずである。
【００５６】
本発明者は次に、ストライディングパターンの後にルーピングパターンが続く動作について説明する。これについては、図３のメモリＡＲＥＡフォーマットに関連して述べた。メモリＡＲＥＡフォーマットをより良く示すために、図７は図３のメモリＡＲＥＡをもう一度示すが、それらのＡＲＥＡはＷＥＥＫＬＹ  ＨＯＵＲＳ  ＷＯＲＫＥＤ（週労働時間）フィールドの各々に対してターゲットデータアドレスを示すように拡張される。たとえば、ＡＲＥＡ１はＡｂｅ  Ａｄａｍｓに対するＷＥＥＫＬＹ  ＨＯＵＲＳ  ＷＯＲＫＥＤ（週労働時間）をアドレス１２２１、１２２４、１２２７、および１２２Ａに記憶する。同様に、ＡＲＥＡ２はＢａｒｒｙ  Ｂａｒｎｅｓに対するＷＥＥＫＬＹ  ＨＯＵＲＳ  ＷＯＲＫＥＤ（週労働時間）をアドレス２２２１、２２２４、２２２７、および２２２Ａに記憶する。ＡＲＥＡ３はＣｉｎｄｙ  Ｃｏｘに対するＷＥＥＫＬＹ  ＨＯＵＲＳＷＯＲＫＥＤ（週労働時間）をアドレス５２２１、５２２４、５２２７、および５２２Ａに記憶する。
【００５７】
次に、ストライディングの後にルーピングが続くパターンについて説明する。図６ｂのレコードの処理段階により、表４の擬似コードについて説明する。Ｊ＝１の擬似コードで、レコード６２（すなわち、Ａｂｅ  Ａｄａｍｓ）が処理される。命令２１により、合計を記憶しているレジスタＲＥＧ２がクリアされる。命令２２により、レコードに対して四つのＷＥＥＫＬＹ  ＨＯＵＲＳ  ＷＯＲＫＥＤ（週労働時間）フィールドの各々を処理するループが開始される。次に命令２３により、１２２１のターゲットデータアドレスにある、ＡｂｅのＷＥＥＫＬＹＨＯＵＲＳ  ＷＯＲＫＥＤ［＃１］のターゲットデータ（すなわち、４０）がロードされる。次に命令２４により、ロードされた値がレジスタＲＥＧ２の中の値と加算され、その値がレジスタＲＥＧ２に記憶される。したがって、この点では、レジスタＲＥＧ２が０にクリアされたので、レジスタＲＥＧ２には合計４０が記憶される。次に、命令２５がプログラムを命令２３に戻す（すなわち、Ｋ＝２）。したがって、これは命令２３の第二の生起を表す。命令２３のこの第二の生起により、１２２４のターゲットデータアドレスにある、ＡｂｅのＷＥＥＫＬＹ  ＨＯＵＲＳ  ＷＯＲＫＥＤ［＃２］のターゲットデータ（すなわち、５０）がロードされる。次に命令２４により、ロードされた値（すなわち、５０）がレジスタＲＥＧ２の中の値（すなわち、４０）と加算され、その値（すなわち、９０）がレジスタＲＥＧ２に記憶される。命令２３から２４の上記の繰り返しは、Ｋ＝３およびＫ＝４に対して再び行われる。このようにして、命令２３の第三の生起により、１２２７のターゲットデータアドレスにある、ＡｂｅのＷＥＥＫＬＹ  ＨＯＵＲＳ  ＷＯＲＫＥＤ［＃３］のターゲットデータ（すなわち、５０）がロードされる。次に命令２４により、ロードされた値（すなわち、５０）がレジスタＲＥＧ２の中の値（すなわち、９０）と加算され、その値（すなわち、１４０）がレジスタＲＥＧ２に記憶される。更に、命令２３の第四の生起により、１２２Ａのターゲットデータアドレスにある、ＡｂｅのＷＥＥＫＬＹ  ＨＯＵＲＳ  ＷＯＲＫＥＤ［＃４］のターゲットデータ（すなわち、４５）がロードされる。次に命令２４により、ロードされた値（すなわち、４５）がレジスタＲＥＧ２の中の値（すなわち、１４０）と加算され、その値（すなわち、１８５）がレジスタＲＥＧ２に記憶される。この点で、プログラムは命令２６まで継続する。命令２６により、レジスタＲＥＧ２の中の合計（すなわち、１８５）がＡｂｅ  Ａｄａｍｓに対するＨＯＵＲＳ  ＷＯＲＫＥＤ  ＦＯＲ  ＴＨＥ  ＰＡＳＴ  ＭＯＮＴＨ（先月の労働時間）に対応するメモリアドレスに記憶される。したがって、１８５という値がメモリアドレス１２１８に記憶される。最後に、前記のように命令２７から２９で、Ａｂｅ  Ａｄａｍｓに対するＰＡＹ  ＤＵＥ（支払い賃金）も計算される。
【００５８】
上記で単一の繰り返しＪ＝１は、ストライディングとして知られるデータロードの予測可能性の一つの型を示す。ストライディングはそれだけで、またぐようにして行われるデータフェッチのその後の認識と予測として知られている。しかし、直前の段落に示された例の単一の繰り返しのストライディングについての以下の説明の後に、更に本実施例のもとでストライディングをループ検出とどのように組み合わせることができるかも示される。この組み合わせにより、従来技術に比べて更に付加的な利点が得られる。一般にストライディングとは、一旦初期フェッチ（とそのアドレス）が設定されれば、後続の次のフェッチに対しては「ストライド」と呼ばれる一定距離がとられるように、相次いでデータをフェッチするデータ処理パターンを指す。たとえば、初期フェッチアドレスが１０進数１０００で、ストライドが１０進数１０であれば、フェッチに対するアドレス系列は１０００、１０１０、１０２０、１０３０等となる。当業者には知られているようにストライディングについて多くの情報を得るためには、次の二つの文書を参照できる。両者ともここに引用されている。（１）アイイーイーイー（ＩＥＥＥ）から文書番号０−８１８６−３１７５−９／９２，著作権１９９２として発行されているインテル社のジョン・ダブリュー・シー・フ、およびイリノイ大学のジャナク・エッチ・パテルとボブ・エル・ジャンセン著「スカラプロセッサにおけるストライド指向のプリフェッチ」（”Ｓｔｒｉｄｅ  Ｄｉｒｅｃｔｅｄ  Ｐｒｅｆｅｔｃｈｉｎｇ  ｉｎ  Ｓｃａｌａｒ  Ｐｒｏｃｅｓｓｏｒｓ”，ｂｙＪｏｈｎ  Ｗ．Ｃ．Ｆｕ  ｏｆ  Ｉｎｔｅｌ  Ｃｏｒｐ，ａｎｄ  Ｂｏｂ  Ｌ．Ｊａｎｓｓｅｎｓ  ｏｆ  ｔｈｅ  Ｃｅｎｔｅｒ  ｆｏｒ  Ｒｅｌｉａｂｌｅａｎｄ  Ｈｉｇｈ−Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｉｎｇ  ａｔ  ｔｈｅ  Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ｉｌｌｉｎｏｉｓ）、および（２）１９９５年１月１３日付けのミシガン大学のマイケル・ゴールダとトレバー・エヌ・マッジ著「キャッシュ待ち時間のためのハードウェアサポート」（”Ｈａｒｄｗａｒｅ  Ｓｕｐｐｏｒｔ  ｆｏｒ  Ｈｉｄｉｎｇ  Ｃａｃｈｅ  Ｌａｔｅｎｃｙ”，ｂｙ  Ｍｉｃｈａｅｌ  Ｇｏｌｄｅｒ  ａｎｄ  Ｔｒｅｖｏｒ  Ｎ．Ｍｕｄｇｅ  ｏｆ  ｔｈｅ  Ａｄｖａｎｃｅｄ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｌａｂ  ａｔ  ｔｈｅ  Ｕｎｉｖｅｒｓｉｔｙ  Ｏｆ  Ｍｉｃｈｉｇａｎ）。
【００５９】
前に紹介したように、上記のＪ＝１の単一の繰り返しはストライディングの例を示す。たとえば、Ｊ＝１の場合、命令２３に対するＫの各生起について考えてみる。第一に、Ｊ＝１でＫ＝１の場合、命令２３はターゲットアドレス１２２１からのデータを要求した。第二に、Ｊ＝１でＫ＝２の場合、命令２    ターゲットアドレス１２２４からのデータを要求した。第三に、Ｊ＝１でＫ＝３の場合、命令２３はターゲットアドレス１２２７からのデータを要求した。最後に、Ｊ＝１でＫ＝４の場合、命令２３はターゲットアドレス１２２Ａからのデータを要求した。したがって、命令２３の四つの生起にわたって、そのターゲットデータアドレスは１２２１、１２２４、１２２７、および１２２Ａであった。したがって、ストライディングの状況で、初期フェッチはアドレス１２２４に対するものであった。次の三つのアクセスの各々に対して、ストライドは３であった。
【００６０】
前の段落はストライディングを示すが、表４の例は更にストライディングと組合わされたルーピングも示す。この組合わせを本実施例により検出し、後で詳しく説明するようにＬＴＢ５６に符号化される。更に詳しく述べると、直前に説明したようにＪ＝１に対してＫが１から４までくりかえされた後、Ｊが２に増大させられる。ストライディングだけが予測される従来技術では、命令２３の次の生起に対して、最後にアクセスされたアドレス（すなわち、１２２Ａ）に３のストライドが加算される。これにより、命令２３のこの次の生起がアドレス１２２Ｄのデータを使用するという予測が得られる。しかし、このような予測は不正確である。詳しく述べると、Ｊ＝２のとき、命令２３の第一の生起はレコード６４に対するＷＥＥＫＬＹ  ＨＯＵＲＳ  ＷＯＲＫＥＤ（週労働時間）［＃１］を要求し、その値が図７のメモリＡＲＥＡ２のアドレス２２２１に記憶される。しかし、後で詳しく説明するように本実施例では、ストライドからこの変化を正確に予測することができる。これにより、従来技術に比べて更に改善される。
【００６１】
表４の命令２３の例および図７のメモリＡＲＥＡ内のレコードについての説明を続けることにより、本発明者が認め、本実施例に入れた、ストライドの後、ルーピングを行うというパターンの繰り返しが熟練した当業者に理解されよう。上記の例の説明を続ける。この例のこの点現在で、命令２３によりアクセスされるターゲットデータアドレスは１２２１、１２２４、１２２７、および１２２Ａである。ここで、命令２３の相次ぐ生起に対するターゲットデータアドレス系列に注意すべきである。したがって、アドレス２２２１はＪ＝２でＫ＝１のときアクセスされる。次に、Ｊ＝２の間のＫの残りの３回の繰り返しについて考えてみる。Ｊ＝２でＫ＝２の場合、命令２３はターゲットアドレス２２２４からのデータを要求する。Ｊ＝２でＫ＝３の場合、命令２３はターゲットアドレス２２２７からのデータを要求する。Ｊ＝２でＫ＝４の場合、命令２３はターゲットアドレス２２２Ａからのデータを要求する。したがって、Ｊ＝２であるときの命令２３の４回の生起に対して、そのターゲットデータアドレスは２２２１、２２２４、２２２７、および２２２Ａであった。命令２３の相次ぐ生起の各々の詳細を説明しなくても熟練した当業者には理解されるように、Ｊ＝３の場合、命令２３の４回の生起はターゲットデータアドレス５２２１、５２２４、５２２７、および５２２Ａからのデータを要求する。しかしこの点で、前に説明したように、ＡＲＥＡ３が処理された後、プロセスはループでＡＲＥＡ１に戻る。したがってＪ＝４の場合、命令２３の第一の生起では、ループで戻ってターゲットアドレス１２２１からのデータを要求する。その後、命令２３の次の三つの生起はターゲットアドレス１２２４、１２２７、および１２２Ａからのデータを要求する。
【００６２】
上記で、ストライディングの後にルーピングの組み合わせを要約する。Ｊ＝１の場合、命令２３は４回実行し、それらの回数の間、３の距離でストライドする（たとえば、アドレス１２２１、１２２４、１２２７、および１２２Ａ）。しかし、次にＪは増大させられるので、命令２３の次の実行は３の距離ストライドしない。その代わりに、初期の実施例の仕方でのループの始まりは、命令２３がアドレス２２２１からのデータを要求するときに形成される。その後、命令２３は次の三つのアクセスに対して３の距離を再びストライドする。この点で、命令２３が次にアドレス５２２１からのデータを要求したとき、もう一度ループが続く。距離３のストライドを３回行った後、ループが始まる同じアドレス、すなわちアドレス１２２１からのデータを命令２３が次に要求したとき、ループは完了する。したがって、命令２３のすべての生起をまとめると、命令２３は１２２１から１２２４へ、１２２７へ、１２２Ａへストライドした後、ループで２２２１に至り、そこから２２２４へ、２２２７へ、２２２Ａへストライドした後、ループで５２２１に至り、そこから５２２４へ、５２２７へ、５２２Ａへストライドした後、ループで１２２１に戻り、命令２３のすべての生起に対してこのパターンを連続的に繰り返す。
【００６３】
上記で、図８は上記のＬＴＢ５６で説明された、単一のエントリ５６１の付加的な実施例を示す。ここでエントリ５６１には、上記の図４と同じ値が含まれているが、５個の付加的な値も含まれている。それらの値により、本実施例では、単独で、または上記のようなルーピングとの組み合わせで、種々のストライドパターンを予測することができる。エントリ５６１の最初の１０個の値については、前の説明を参照できる。したがって、図８に示された新しく付加された値について集中的に説明する。簡単に述べると、図８に新しく示された値には、ＳＴＲＩＤＥ  ＬＥＮＧＴＨ（ストライド長さ）、ＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤ（ストライド閾値）、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲ（ストライドカウンタ）、ＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲ（一時ポインタセーバ）、およびＳＴＲＩＤＥ  ＣＯＮＴＲＯＬ（ストライド制御）が含まれる。図８には後で詳しく説明するように３個のＰＯＩＮＴＥＲに共同使用される一組のストライドに関連した値が示されているが、代替実施例では各ポインタとそれに結合されたＣＯＮＴＲＯＬはそれ自身のストライドに関連した値をそなえることができる。したがってこの代替実施例では、より複雑なデータパターンを予測することができる。これにより、単一のデータフェッチ命令の場合、一つのストライド系列に対する長さや閾値は次のストライド系列に対する長さや閾値と異なる。いずれにしても、これらのストライドに関連した値の各々については以下に説明する。
【００６４】
図８に示されたストライドに関連した値の情報と動作を示すために、それらの値の各々に対して、まず前置きの説明を行う。上記の表４の命令２３の例により、サンプル情報を示す。説明を進める前に、ターゲットデータアドレス１２２１、１２２４、１２２７、および１２２Ａをストライドすることにより命令２３がどのように進むかを前に示したことを想起されたい。次に、図８のストライドに関連した値については、ＳＴＲＩＶＥ  ＬＥＮＧＴＨ（ストライド長さ）値は相次ぐストライドターゲットデータアドレス相互の間の相違の大きさを表す。したがって現在の例では、ＳＴＲＩＤＥ  ＬＥＮＧＴＨは３に等しい。すなわち、アドレス１２２１と１２２４との間のストライドは３、アドレス１２２４と１２２７との間のストライドは３などである。ＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤ（ストライド閾値）は与えられたストライド系列のターゲットアドレスの数である。したがって現在の例では、ＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤは４に等しい（すなわち、１２２１、１２２４、１２２７、および１２２Ａの系列には４個のアドレスがある）。次にＳＴＲＩＤＥ  ＣＯＵＮＴＥＲ（ストライドカウンタ）は、与えられたストライド系列の中の系列毎に進むカウンタである。進むことにより、相次ぐ各ストライドの跡をたどるようにＣＯＵＮＴＥＲが増減することを示そうとしている。実施例でこの機能を達成するため、そして後で詳しく説明するように、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲには最初、ＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤがロードされた後、各ストライドが行われたとき０の値に向かって減らされる。ＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲ（一時ポインタセーバ）はストライドアドレスの系列の中の初期アドレスを記憶するために使用される。したがって本例では、１２２１のアドレスはＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲに記憶される。後で詳しく説明するように、ストライド系列の終わりに、このアドレスは最初にそれを与えたＰＯＩＮＴＥＲの一つ（すなわち、Ａ、Ｂ、またはＣ）に戻される。ＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲを設ける代わりに、代替実施例ではストライド系列の終わりに初期アドレスを再計算してもよい。この場合、再計算された初期アドレスはそれを与えたＰＯＩＮＴＥＲに戻される。最後に、ＳＴＲＩＤＥ  ＣＯＮＴＲＯＬ（ストライド制御）は、後で更に説明するように単独またはルーピングと組合わされてストライド手法の動作を制御するために熟練した当業者が構成することができる付加的な情報を供給するだけである。
【００６５】
図８の種々のストライドに関連した値を紹介したが、前に説明したように、ＰＯＩＮＴＥＲ  Ａ、ＰＯＩＮＴＥＲ  Ｂ、およびＰＯＩＮＴＥＲ  Ｃは各々対応するＣＯＮＴＲＯＬ値をそなえ、またルーピングに関連するときのそれらの値の内容はルーピングデータパターンに関する限り表３に関連して前に紹介した。しかし、これから紹介し、以下更に詳しく説明するように、図８の実施例には更に種々のストライドに関連したパターンも含まれている。この機能を更に果たすために、各ＰＯＩＮＴＥＲに対応するＣＯＮＴＲＯＬ情報は更にストライドに関連した動作を示し、またこれに関連して下の表５は表３の値を繰り返しているが、種々のストライド動作を入れるように表３の予備値のいくつかについて定義もしている。
【表５】
0003830651.tif 000006
表５でＣＯＮＴＲＯＬ情報の２進値が００１、０１０、または０１１に等しい場合、これはＣＯＮＴＲＯＬに対応するＰＯＩＮＴＥＲがストライドの作用に関連していることを示している。相違点はストライドの大きさである。特定のストライドの相違点を以下に説明する。
【００６６】
表５に示すように、ＣＯＮＴＲＯＬ情報の２進値が００１に等しい場合、これはストライドモードを示す。この場合、ＬＴＢ５６のエントリのＳＴＲＩＤＥ  ＬＥＮＧＴＨ値にストライドの長さが記憶されている。この側面を示すため、表４のコード例、そして更に詳しくは、ＬＴＢ５６のエントリ５６１が命令２３のストライド動作にどのように関連するかについて以下に説明する。この目的のため、図９はストライド動作の間、命令２３に対してデータプリフェッチ予測を可能にするように設定されたときのエントリ５６１を示している。命令２３を設定するためのステップについては後で詳しく説明する。したがって、図９でエントリ５６１が事前に設定され、表４の擬似コードがフェッチされ、前記のパイプライン３８により処理されるべきものであると仮定する。このようにして、命令フェッチ段４０は命令２３をフェッチし、前記の場合のように、それがデータフェッチ命令であることを検出する。このようにしてＬＴＢ５６を使用して、それが命令２３に対応するエントリを記憶しているか判定する。詳しく述べると、エントリ５６１の中のアドレスタグフィールドは命令２３のアドレスに一致するか判定され、したがってＬＴＢ５６はこのようなエントリをそなえているか判定される。次に、エントリ５６１のＮＥＸＴ  ＰＯＩＮＴＥＲ値が使用され、それはＰＯＩＮＴＥＲ  Ａとそれに対応するＡ  ＣＯＮＴＲＯＬは命令２３に対するターゲットデータアドレスへの現在のプリフェッチ要求があれば、その現在のプリフェッチ要求を制御するはずである。
【００６７】
上記に応答して、Ａ  ＰＯＩＮＴＥＲ  ＣＯＮＴＲＯＬ  ＩＮＦＯＲＭＡＴＩＯＮが評価され、それは現在のアクセスがストライドの一部であることを示す（すなわち、００１の値）。ここで、ストライドの長さはＳＴＲＩＤＥ  ＬＥＮＧＴＨ値に記憶されている。この点から先のステップを更に説明するために、図１０は全体が７０で表された方法を示す。方法７０はストライド動作の現在の型に応答する種々の好ましいステップを表す。図示するように、方法７０は一般にステップ７２で始まる。ステップ７２は単に、００１に等しいＣＯＮＴＲＯＬ情報値に応答して（またはストライドモードの動作を示す他の制御値のいずれかに応答して）方法が始まったことを示すだけである。次に、方法７０はステップ７４に続く。ステップ７４はＳＴＲＩＤＥ  ＣＯＵＮＴＥＲが０に等しいか調べる。方法７０の説明が完了すればより良く理解されるように、これが１２２１、１２２４、１２２７、および１２２Ａのストライド系列に対する命令２３の第一の生起であるので、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲは０にリセットされている。したがって、ステップ７４は真であるはずであり、方法７０はステップ７６に進む。何らかの理由でストライド系列の命令の第一の生起でＳＴＲＩＤＥ  ＣＯＵＮＴＥＲの値が非零であれば、方法７０はステップ７７に進む。ステップ７７は、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲの誤った設定に応答するためのエラーハンドラの一例である。
【００６８】
ステップ７７のエラーハンドリングは二つの動作を行う。第一に、現在のＰＯＩＮＴＥＲに対するＣＯＮＴＲＯＬ情報は非妥当に設定される。したがって、現在の例では、Ａ  ＣＯＮＴＲＯＬが０００に設定される。第二に、ＮＥＸＴ  ＰＯＩＮＴＥＲ値が後続の次のポインタを指すように進められる。したがって、現在の例では、ＮＥＸＴ  ＰＯＩＮＴＥＲの値が０１に設定される。最後に、このエラーハンドリングが完了すると、フローはステップ７７からステップ９０に進む。後でも述べるようにステップ９０は、単にエントリ５６１の現在の処理に対する方法７０の終わりを表すに過ぎない。
【００６９】
命令２３の現在の例におけるように、ストライディングを開始すべきデータフェッチ命令があるＬＴＢ５６の妥当なエントリについて当てはまるように、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲが０に等しいことがわかった後に、ステップ７６に達する。次に、ステップ７６は二つのセットアップ動作を行う。第一に、ステップ７６は現在のＰＯＩＮＴＥＲの値をＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲ（一時ポインタセーバ）にコピーする。したがって現在の例では、ＰＯＩＮＴＥＲ  Ａに記憶された１２２１という値がＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲにコピーされる。後でより明らかになる理由により、このＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲから後で検索されて、ＰＯＩＮＴＥＲ  Ａに入る。第二に、ステップ７６はＳＴＲＩＤＥ  ＣＯＵＮＴＥＲにＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤをロードする。したがって、相次ぐストライドの生起毎に前に述べたようにカウントが減っていく。これについても、後で詳しく説明する。この二つのセットアップ動作の後、方法７０はステップ７８に続く。
【００７０】
ステップ７８は、対応するＰＯＩＮＴＥＲによって示されるアドレスで開始するようにプリフェッチ要求を発する。したがって、現在の例では、ＰＯＩＮＴＥＲ  Ａが問題になっているので、ステップ７８は１２２１のターゲットデータアドレスにプリフェッチ要求を発する。したがって、このプリフェッチ要求が実際のプリフェッチ動作を誘発した場合、前に説明したようにアドレス１２２１のデータを検索してオンチップキャッシュに入れることができる。したがって、命令２３がパイプライン３８を通るとき適当な時点に達すると、そのデータはそのキャッシュからフェッチして容易に利用することができる。したがって再び、プリフェッチの利点を実現することができる。ここでは、アドレスのストライド系列の最初の場合にそれが示されている。次に、方法７０はステップ８０に進む。
【００７１】
ステップ８０では、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲの値を減少させる。現在の例では、図９で説明したように、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲはＳＴＲＩＤＥＴＨＲＥＳＨＯＬＤからの４という値を記憶している。したがってステップ８０で、この値を４から３に減らす。後でより良く理解されるように、直前のステップ７８によるプリフェッチ要求の相次ぐ発行毎に、ステップ８０は再びカウントを減少させる。したがって、最後にカウントは０に達し、与えられたストライドアドレスの系列に対するすべてのストライドの場合が生じたということを示す。次に、方法７０はステップ８２に進む。
【００７２】
ステップ８２は再び、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲが０に達したか判定する。直前の段落で説明したように、与えられたストライドアドレスの系列に対するすべてのストライドの場合が生じると、カウントが０に達する。ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲが０に達していない場合には、方法７０はステップ８４に進む。これに反して、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲが０に達した場合には、方法７０はステップ８６に進む。現在の例では、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲは３に等しいので、方法７０はステップ８４に進む。
【００７３】
ステップ８４は現在ポインタの値をＳＴＲＩＤＥ  ＬＥＮＧＴＨの値だけ増大させる。現在の例では、ＰＯＩＮＴＥＲ  Ａは１２２１に等しく、ＳＴＲＩＤＥＬＥＮＧＴＨは３に等しい。したがって、ステップ８４に応答して、ＰＯＩＮＴＥＲ  Ａの値が１２２１から１２２４に増大される。次に、方法７０はステップ７８に進む。
【００７４】
上記の説明で熟練した当業者には理解されるように、方法７０がステップ８４からステップ７８に戻ることにより、一つ以上の付加的なプリフェッチ要求が発せられる。後続の各プリフェッチ要求は前のプリフェッチ要求のアドレスにＳＴＲＩＤＥ  ＬＥＮＧＴＨの値を加えたものを発する。たとえば、前に説明したように、ステップ７８の第一の場合に１２２１のプリフェッチ要求が発せられ、そしてその後、ＰＯＩＮＴＥＲ  Ａの値がＳＴＲＩＤＥ  ＬＥＮＧＴＨの３だけ大きくされて１２２４の値となる。したがって次に、ステップ７８はもう一度プリフェッチ要求を発するが、ここではアドレス１２２４で行われる。更にステップ８０で再びＳＴＲＩＤＥ  ＣＯＵＮＴＥＲが減らされるが、ここでは３から２に減らされる。後に続くステップ８２が制御をステップ８４に移し、ＰＯＩＮＴＥＲ  Ａが増大させられ、このようにして続行される。したがって、このプロセスで１２２１、１２２４、１２２７、および１２２Ａの系列に対するプリフェッチ要求を発する。しかし、アドレス１２２Ａでプリフェッチ要求を発行した後、ステップ８０は再びＳＴＲＩＤＥ  ＣＯＵＮＴＥＲを減少させる。したがって、この点で、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲは１から０に減少させられる。その結果、ステップ８２は制御をステップ８６に渡す。したがって、制御のこの変化が生じるのは、ストライド系列（すなわち、１２２１、１２２４、１２２７、および１２２Ａ）のすべてのアドレスがプリフェッチ要求の対象となった後である。
【００７５】
ストライディングアドレスの系列に対応するすべてのプリフェッチ要求が発せられた後にステップ８６で、ＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲからの値が現在のＰＯＩＮＴＥＲにコピーされて戻される。現在の例では、前に説明したようにステップ８６の前に、ＰＯＩＮＴＥＲ  Ａの値はアドレス１２２Ａ、すなわち、ストライドアドレスの系列１２２１、１２２４、１２２７、および１２２Ａの最後のアドレスに等しい。しかし、ステップ８６でＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲからのコピーバックにより、現在ＰＯＩＮＴＥＲの値がストライドアドレスの系列の初めにあった値に戻される。したがって現在の例では、前に（ステップ７６で）ＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲに記憶された１２２１という値が今ＰＯＩＮＴＥＲ  Ａに戻される。したがって熟練した当業者には理解されるように、ＰＯＩＮＴＥＲ  Ａに基づくプリフェッチ要求の次の場合には、その要求はもう一度、ストライド系列の終わりではなくてストライド系列の初めのアドレスに向けられる。更に、そしてＴＥＭｐＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲの紹介と関連して前に説明したように、そのＳＡＶＥＲを使用する代わりに、別の方法でＳＡＶＥＲに記憶された初期アドレスを再循環させることによりステップ７６の結果を達成することができる。たとえば、１２２１の終了アドレスの場合、ＳＴＲＩＤＥ  ＬＥＮＧＴＨに（ＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤ−１）の値を乗算することができ、その積を終了アドレスから減算することができる。これにより、ＰＯＩＮＴＥＲ  Ａを再記憶するための初期アドレスが与えられる。
【００７６】
ステップ８６の後、方法７０はステップ８８に進む。ステップ８８は、問題になっているＬＴＢ５６のエントリに対するＮＥＸＴ  ＰＯＩＮＴＥＲインジケータを進める。現在の例では、図９について説明したようにＮＥＸＴ  ＰＯＩＮＴＥＲの値は現在００に設定されている。すなわち、ＮＥＸＴ  ＰＯＩＮＴＥＲは表２に示された値によりＰＯＩＮＴＥＲ  Ａを指す。したがって、ステップ８８はＮＥＸＴ  ＰＯＩＮＴＥＲ値を０１に進める。これにより、ＰＯＩＮＴＥＲ  Ｂが、行５６１が使用される次の場合に対して使用されるべき次のＰＯＩＮＴＥＲであるということが示される。換言すれば、フェッチ段４０によりフェッチされることに応答して次回に命令２３が検出されたとき、行５６１が再び使用されるが、そのときはステップ８８によるＮＥＸＴ  ＰＯＩＮＴＥＲの現在の前進に基づいてＰＯＩＮＴＥＲ  ＢとＢ  ＣＯＮＴＲＯＬが制御を行う。更に注意すべきことは、ＮＥＸＴ  ＰＯＩＮＴＥＲのこの前進はルーピング形式でエントリ５６１の相次ぐ各ポインタに対して続行される。換言すれば、ステップ８６に達したときＮＥＸＴ  ＰＯＩＮＴＥＲがＰＯＩＮＴＥＲ  Ｃを示すように設定されると、その場合にＮＥＸＴ  ＰＯＩＮＴＥＲを前進させたとき、ＮＥＸＴ  ＰＯＩＮＴＥＲは次のＰＯＩＮＴＥＲとしてＰＯＩＮＴＥＲ  Ａを指す。このようにして、円形形式がＰＯＩＮＴＥＲ  ＡからＰＯＩＮＴＥＲ  Ｂに、ＰＯＩＮＴＥＲ
Ｃに、ＰＯＩＮＴＥＲ  Ａに戻る等のように形成される。
【００７７】
今説明したステップ８８の動作の他に、ストライドを完了させ、円形の順序の次のＰＯＩＮＴＥＲ以外のＰＯＩＮＴＥＲに対するループを形成できるようにすることにより、本発明の範囲内で更にもう一つの実施例を作成することができる。換言すれば、前の段落では、ＮＥＸＴ  ＰＯＩＮＴＥＲをＰＯＩＮＴＥＲ  ＣからＰＯＩＮＴＥＲ  Ａに進める場合について説明した。これにより、ＰＯＩＮＴＥＲ  Ｃに関連するストライド系列が完了した後、円形ルーピング形式が維持される。換言すれば、表５に与えられたストライド制御値で、前の段落が示唆するところによれば、ストライド系列が完了した後、ＮＥＸＴ  ＰＯＩＮＴＥＲを単に増大させる。これにより、今完了したストライド系列に関連して使用されたばかりのＰＯＩＮＴＥＲに円形順序で続くＰＯＩＮＴＥＲにより、次のターゲットデータアドレスが示される。しかし、代替実施例として、ストライド系列が完了した後、異なるＰＯＩＮＴＥＲがＮＥＸＴ  ＰＯＩＮＴＥＲとなるように、更に付加的な制御を行うこともできる。たとえば、各ＬＴＢエントリに付加的な値を含めることができる。またはＣＯＮＴＲＯＬ内のビット数を増やすことができる。いずれにしても付加的な機能により、ストライド系列の完了後に、今使用したばかりのＰＯＩＮＴＥＲに円形状に続かないＰＯＩＮＴＥＲが指定される。たとえば、ＰＯＩＮＴＥＲ  Ａがストライド系列を支配した上記の例で、この付加的な制御によってＮＥＸＴ  ＰＯＩＮＴＥＲを１０に変えることができる。これにより、（上記の例のようなＰＯＩＮＴＥＲ  Ｂではなくて）ＰＯＩＮＴＥＲ  Ｃが、データフェッチ命令の次の生起に対して使用すべき次のＰＯＩＮＴＥＲであるということが示される。このように各ＬＴＢエントリで、上記のものより更にもっと複雑なデータパターンを検出し、示すことができる。
【００７８】
ステップ８８の後、方法７０はステップ９０に達する。前に説明したように、ステップ７７のエラーハンドリングの後にも、ステップ９０に達することがあり得る。いずれにしても、ステップ９０は単に、ＬＴＢ５６の中の、ストライドモードの動作に基づく与えられたエントリに対する方法７０の終わりを表しているに過ぎない。したがって、ステップ９０の後、方法７０は多数の付加的な回数繰り返すことができる。それらの回数はフェッチされた命令とＬＴＢ５６の中のエントリとが一致したことに応答してもう一度開始される。ここで、一致するＬＴＢエントリはストライドモードを示すために設定された適当なＣＯＮＴＲＯＬ情報値をそなえており、ストライドの長さはＳＴＲＩＤＥ  ＬＥＮＧＴＨ値に示されている。
【００７９】
上記の説明から熟練した当業者には理解されるように、図８の実施例では、プリフェッチ要求をストライディングアドレスの系列に発することができる。実際、本例を継続することにより、熟練した当業者には理解されるように図８の実施例では、ストライディングアドレス相互の間にルーピングも行うことができる。更に詳しく述べると、図９を再び参照することにより、ＰＯＩＮＴＥＲ  Ｂがアドレス２２２１を表すことがわかる。前に説明したように、上記の例のステップ８８は、ＮＥＸＴ  ＰＯＩＮＴＥＲを変更して、行５６１が使用される次の場合に使用されるべき次のＰＯＩＮＴＥＲとしてＰＯＩＮＴＥＲ  Ｂを示す。このように、本例を続けて説明する。フェッチ段４０によりフェッチされることに応答して命令２３が次に検出されたとき、フェッチを予測するために行５６１が再び使用されるが、この点ＢではＢ  ＣＯＮＴＲＯＬとＰＯＩＮＴＥＲ  Ｂが使用される。更に注意すべきことは、Ｂ  ＣＯＮＴＲＯＬはルーピングモードを示すということである。したがって、命令２３のこの場合に対して、再びプリフェッチ要求がアドレス２２２１に対して発せられるが、その後に命令２３の次の三つの生起の各々に対する三つのストライドが続く。すなわち、次の三つのこのような生起はアドレス２２２４、２２２７、および２２２Ａに対するプリフェッチ要求を生じる。更に、プリフェッチ要求の一部としてアドレス２２２Ａが発せられると、再びＮＥＸＴ  ＰＯＩＮＴＥＲが増大させられ、今度は次のアクセスのための制御としてＰＯＩＮＴＥＲ  ＣおよびそれのＣ  ＣＯＮＴＲＯＬが示される。熟練した当業者には理解されるように、命令２３の次の４回の生起に対してもう一度アドレスのストライドパターンが生じる。それらのアドレスには５２２１、５２２４、５２２７、および５２２Ａが含まれる。最後に、これが完了したとき、再びＮＥＸＴ  ＰＯＩＮＴＥＲが増大させられる。今度は次のアクセスのための制御としてＰＯＩＮＴＥＲ  ＡおよびそれのＡ  ＣＯＮＴＲＯＬを生じるループバックが完成する。このようにして、このパターンは多数回繰り返すことができる。これにより、ストライドの後にループが続く組み合わせ機能が得られる。
【００８０】
上記の例では、各ＰＯＩＮＴＥＲに対してＣＯＮＴＲＯＬ情報値が設けられており、ＣＯＮＴＲＯＬ値は００１に等しい。すなわち、ストライドモードが示され、ストライドの大きさがエントリ５６１のＳＴＲＩＤＥ  ＬＥＮＧＴＨに記憶された。しかし、代わりとして０１０および０１１に等しいＣＯＮＴＲＯＬ値を使用してもよい。それらの値は各々、（表５にＬＥＮＧＴＨ１およびＬＥＮＧＴＨ２として示されている）既知の固定長さに対応している。たとえば、ＬＥＮＧＴＨ１は３バイトの値とすることができる。この場合、ＳＴＲＩＤＥ  ＬＥＮＧＴＨ値からの値を使用する、前の例は代わりに０１０のＣＯＮＴＲＯＬ値を使用して達成された。そしてそのＣＯＮＴＲＯＬ値から、それに対してプリフェッチ要求が発せられる次の予測されたアドレスを計算するとき３というストライド長さを使用することがわかっている。もう一つの例として、ＬＥＮＧＴＨ２は与えられた構成に対する１ワードの大きさとすることができる。したがって、ＬＥＮＧＴＨ２はあるマシンについては４バイトとすることができる。したがって、このような場合には、ＣＯＮＴＲＯＬ値が０１１に等しければ、エントリのＳＴＲＩＤＥ  ＬＥＮＧＴＨ値を使用する必要は無く、代わりに０１１符号化からわかるような４バイトの固定値を使用して相次ぐストライドアドレスを計算する。上記の他に、更により複雑なストライディングデータパターンに対しては、一つのＰＯＩＮＴＥＲに対応するＣＯＮＴＲＯＬがもう一つのＰＯＩＮＴＥＲに対応するＣＯＮＴＲＯＬとモードが異なってもよい。たとえば、Ａ  ＣＯＮＴＲＯＬを００１、Ｂ  ＣＯＮＴＲＯＬを０１０、そしてＣ  ＣＯＮＴＲＯＬを０１１とすることができる。このように、各ＣＯＮＴＲＯＬはストライドモードに関連するが、ストライド長さが異なっている。更に他の例も、熟練した当業者には理解されよう。
【００８１】
上記のアドレスのパターンを背景として、この点までプリフェッチ要求が発せられるということを述べてきた。したがって、要求が実際にプリフェッチ動作を生じるということを肯定的に述べていない。換言すれば、一旦プリフェッチ要求が発せられると、その要求に応答してプリフェッチ動作が実際に行われるか否かは要求している回路にはわからない。プリフェッチ動作が行われれば、多分、要求されたデータはその後、オンチップキャッシュで利用できるので、そのキャッシュから実際のフェッチによってそのデータを使用することができる。しかし、場合によっては、プリフェッチ要求にサービスしない、すなわち、プリフェッチ要求に応答したプリフェッチ動作を許さないことが望ましいこともある。このような場合の二つの例を以下に述べる。
【００８２】
プリフェッチ要求は発せられるが、その要求に応答したプリフェッチは生じたり、生じなかったりする場合の第一の例として、本実施例の更にもう一つの側面では、ＬＴＢ５６の各エントリに一つ以上の付加的な値を付加することができる。または上記のエントリにアクセスする、ある付加的な回路を接続することができる。この付加的な回路は、キャッシュ行交差に基づいで過去のプリフェッチ要求と比べて現在のプリフェッチ要求を評価する。更に詳しく述べると、二つのアドレスを評価することにより後続のアドレスが前のアドレスと同じキャッシュ行の中にあるか否かを判定する種々の回路がこの分野では知られている。後続のアドレスが前のアドレスと同じキャッシュ行の中に無ければ、後続のアドレスは前のアドレスに対して行交差であると言われる。すなわち、そのアドレスは一つのキャッシュ行と前のアドレスに対応するもう一つのキャッシュ行との間の境界と交差する。本実施例の状況では、この機能をストライド動作と組み合わせて使用することにより、性能を更に改善する。更に詳しく述べると、プリフェッチ要求の一部として相次ぐ各ストライドアドレスが発せられるにつれて、ストライドアドレスをこのような行交差検出回路に提出することが好ましい。後続のアドレスがキャッシュ行と交差しない場合には、したがって、前のストライドアドレスに関連して多分捜された（かプリフェッチされたかの一方または両方の）データを捜していることになる。したがって、他の考慮が無い場合には、後続のプリフェッチ要求はプリフェッチ動作を生じる必要は無い。というのは、先行アドレスが既にプリフェッチ動作を生じたからであり、またその動作により、後続のプリフェッチ要求で捜されるデータは既にキャッシュの中にあることが保証されたからである。これをより良く説明するため、命令２３の例に戻る。前に説明したように、方法２０によって取り扱われるとき、命令２３は１２２１、１２２４、１２２７、および１２２Ａのストライドアドレスを発した。今、アドレス１２２１と１２２４が一つのキャッシュ行の中にそろっており、アドレス１２２７と１２２Ａが一つのキャッシュ行の中にそろっているものとする。命令２３の第一の生起に対しては、アドレス１２２１に対応してプリフェッチ要求が発せられることが前に示されている。これは系列の中の最初のアドレスであるので、何か他の理由が無ければ、プリフェッチ要求に応答してプリフェッチ動作を行うことができる。このようにして、アドレス１２２１のデータがオンチップキャッシュ内にプリフェッチされる。しかし、アドレス１２２４もアドレス１２２１と同じキャッシュ内にあるので、１２２１に対するアドレスがこのようにしてプリフェッチされるのと同時にアドレス１２２４のデータもプリフェッチされる。次に、命令２３の第二の生起に対しては、アドレス１２２４に対応してプリフェッチ要求が発せられることが前に示された。しかし、ここで、キャッシュ行交差検出回路は現在のアドレス１２２４が先行するアドレス１２２１と同じキャッシュ行の中にあることを検出する。これに応答して、アドレス１２２４のデータに対してはプリフェッチ要求が発せられる事が好ましいが、これに応答してこの点ではプリフェッチ動作が行われないことが好ましい。なぜなら、アドレス１２２１のデータと同時に、捜し求められたデータが既に以前にキャッシュにプリフェッチされていたからである。この例について、説明を続ける。命令２３の第三の生起に対しては、アドレス１２２７に対応してプリフェッチ要求が発せられることが前に示された。ここで、キャッシュ行交差検出回路は現在のアドレス１２２７が先行するアドレス１２２４と同じキャッシュ行の中に無いことを検出する。したがって、アドレス１２２７のデータに対して発せられたプリフェッチ要求に応答して、プリフェッチ動作を行うことができることが好ましい。これにより、アドレス１２２７（および１２２Ａ）のデータが異なるキャッシュ行にフェッチされる。これにより、この場合も、そのデータは後でフェッチのためオンチップで利用できる。
【００８３】
プリフェッチ要求は発せられるが、その要求に応答したプリフェッチは生じたり、生じなかったりする場合の第二の例として、かなり前に説明したように、付加的なシステムパラメータが、プリフェッチ動作を行うべきか、または異なるが関連した応答性のプリフェッチ動作が行われるように実際に要求を修正するべきかということの有効性に影響を及ぼす。再び、これらの付加的な考慮をするためには、前に引用した米国特許出願第 号、「マイクロプロセッサに基づくシステムでプリフェッチ処理のための回路、システム、および方法」（Ｃｉｒｃｕｉｔｓ，Ｓｙｓｔｅｍｓ，Ａｎｄ  Ｍｅｔｈｏｄｓ  Ｆｏｒ  Ｐｒｅｆｅｔｃｈ  Ｈａｎｄｌｉｎｇ  Ｉｎ  Ａ  Ｍｉｃｒｏｐｒｏｃｅｓｓｏｒ−Ｂａｓｅｄ  Ｓｙｓｔｅｍ）（代理人処理番号ＴＩ−２４１５３）を参照できる。
【００８４】
図８および９のエントリ５６１によって行われるストライド動作とそれに続くルーピング動作について説明してきた。それらの図のエントリ５６１の特性と、前に紹介した種々の側面を更に説明するために、表４の例の命令２３と関連して図９のエントリ５６１の中の値の設定について説明する。前に説明したように、表４のプログラムは、外部メモリ１４のような、マイクロプロセッサ１２がアクセスできるメモリに命令として記憶される。したがって、それらの命令を処理するために、各命令はパイプライン３８内にフェッチされ、それを通ってその実行段４８に向かう。したがって、このプロセスの間、命令２３が初めて（すなわち、Ｊ＝１でＫ＝１の場合）命令フェッチ段４０によってフェッチされる。この点で当業者には知られた手法により、命令がロード、記憶、記憶質問等のようなデータフェッチ命令であるということが検出される。命令２３がデータフェッチ命令であると検出されたことに応答して、図５のエントリ５６１に関連して説明したように同じ初期ステップが行われる。したがって、それらの詳細をここで再び説明しなくても前の説明を参照して理解し得る。簡単に述べると、前に説明したように、ＬＴＢ５６を使用して、それのエントリの一つが命令２３に対応するか判定する。そして、エントリを検証するか、またはＬＴＢ５６の中の新しい列に（たとえば、ＬＴＢ５６の最も古く使用されたエントリを立ちのかせることにより）エントリを作成する。しかし、更に前に述べたように、図４のエントリはストライドに関連した属性を含んでおらず、デフォルト予測はループが含まれているということだった。したがって、図４のエントリ５６１に対して、データフェッチ命令を受けて、それのターゲットデータアドレスをエントリに入れた後、ＮＥＸＴ  ＰＯＩＮＴＥＲの値が０１に設定される。これにより、ＰＯＩＮＴＥＲＢがデータフェッチ命令の次の生起の際に使用すべき次のポインタであるということが示される。しかし、図８のエントリ５６１の本実施例では、それに種々の付加的なストライド処理能力が含まれている。その結果、後で更に説明するように、それのデフォルト予測は、アドレス系列がルーピングでなくストライディングを行うということである。したがって、ＮＥＸＴ  ＰＯＩＮＴＥＲの値は００に維持される。すなわち、ＰＯＩＮＴＥＲ  Ａが命令２３の次の生起の際に使用すべき次のポインタであるということが示される。しかし、この点では単一のターゲットデータアドレスしか無いので、それはＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲとＰＯＩＮＴＥＲ  Ａに記憶され、Ａ  ＣＯＮＴＲＯＬは００１に設定される。表５で説明したようにこれは、ストライド長さがＳＴＲＩＤＥ  ＬＥＮＧＴＨ値に記憶されたストライドモードエントリを示す。更に、ＰＯＩＮＴＥＲ  Ａの値がストライドアドレスの系列の中の第一のアドレスであると予測されるので、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲは１に初期設定される。最後にＳＴＲＩＤＥ  ＣＯＮＴＲＯＬは「不完全」に設定される。換言すれば、本例の現在の点では、ストライド系列が完全であるか否かわからない。したがって、後で理解されるような制御の目的のため、ＳＴＲＩＤＥ  ＣＯＮＴＲＯＬの中にある値（たとえば、ある２進コード）が設定されて、この不完全なステータスを表示する。
【００８５】
命令２３の第二の生起により、ＬＴＢにヒットが生じる。これに応答して、ＮＥＸＴ  ＰＯＩＮＴＥＲがＰＯＩＮＴＥＲ  Ａであり、ＰＯＩＮＴＥＲ  Ａに対するＣＯＮＴＲＯＬ値が００１（すなわち、ストライドモードエントリ））、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲが１に設定され、ＳＴＲＩＤＥ  ＣＯＮＴＲＯＬが「不完全」に設定されているということが判定される。これに応答して、この第二の生起からの実際のターゲットデータアドレスを使用して、その値とＰＯＩＮＴＥＲ  Ａに既に記憶されている値（すなわち、命令２３の第一の生起による実際のターゲットデータアドレス）との差が計算される。したがって現在の例では、１２２１という第一の生起のターゲットデータアドレスが１２２４という第二の生起のターゲットデータアドレスから減算される。これにより、３という差が得られる。更に、ストライドモードとしてデフォルトモードが予測されるので、次にこの差はエントリ５６１のＳＴＲＩＤＥ  ＬＥＮＧＴＨ値に記憶される。更に、デフォルト予測によれば命令２３のこの第二の生起は一連のストライドアドレスの中の２番目であるので、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲはこのとき１から２に増やされる。更に、現在のターゲットデータアドレス（すなわち、１２２４）がＰＯＩＮＴＥＲ  Ａに記憶される。最後に、二つの相次ぐアドレスだけが受信、分析されたので、ＮＥＸＴ  ＰＯＩＮＴＥＲは００にとどまってＰＯＩＮＴＥＲ  Ａを示し、Ａ  ＣＯＮＴＲＯＬは００１にとどまり、ＳＴＲＩＤＥ  ＣＯＮＴＲＯＬは不完全なステータスを表示し続ける。
【００８６】
命令２３の第三の生起によって、ＬＴＢに再びヒットが生じる。これに応答して、対応するエントリに対して再び、ＮＥＸＴ  ＰＯＩＮＴＥＲがＰＯＩＮＴＥＲ  Ａであり、Ａ  ＣＯＮＴＲＯＬが００１に設定されていると判定される。しかし、ここでは、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲが１より大きいということも検出される。「不完全な」というＳＴＲＩＤＥ  ＣＯＮＴＲＯＬ値と組合わされたこの表示から、ストライド系列が設定されつつあり、まだ完成しておらず、データフェッチ命令の二つの生起しか含んでいないということがわかる。したがって再び、この第三の生起からの実際のターゲットデータアドレスを使用して、その値とＰＯＩＮＴＥＲ  Ａに既に記憶されている値（すなわち、命令２３の第二の生起からの実際のターゲットデータアドレス）との差が計算される。したがって、現在の例では、差は３に等しい。次に、この差は既にＳＴＲＩＤＥ  ＬＥＮＧＴＨに記憶されている差と比較される。したがって、現在の例では、一致していることが見出されるので、アドレスのストライド系列が継続していると推定される。その結果、（３という）同じ差がＳＴＲＩＤＥ  ＬＥＮＧＴＨ値にとどまる。更に、現在のターゲットデータアドレス（すなわち、１２２７）がＰＯＩＮＴＥＲ  Ａに記憶される。更に、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲはこのとき２から３に増やされる。
【００８７】
命令２３の第四の生起により、再びＬＴＢ５６にヒットが生じ、対応するＮＥＸＴ  ＰＯＩＮＴＥＲがＰＯＩＮＴＥＲ  Ａに設定され、Ａ  ＣＯＮＴＲＯＬが００１に設定され、ＳＴＲＩＤＥ  ＣＯＮＴＲＯＬが「不完全」に設定される。しかし、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲが２より大きい（たとえば、現在３に等しい）ので、データフェッチ命令のこの第四の生起に対する実際のターゲットデータアドレスはＰＯＩＮＴＥＲ  Ａの値（すなわち、命令の第三の生起による値）とＳＴＲＩＤＥ  ＬＥＮＧＴＨに記憶された値との和となるとこのとき予測される。換言すれば、この第四の生起がもう一度、上記の第一から第三の生起で始まった系列のストライドになるということがこのとき予測される。したがって、現在の例では、ＳＴＲＩＤＥ  ＬＥＮＧＴＨの中の３という値がＰＯＩＮＴＥＲＡの中の１２２７の値に加算され、その結果得られる１２２Ａのターゲットデータアドレスを使用してそのアドレスのプリフェッチ要求が発せられる。更に結局、命令のこの第四の生起により、命令はパイプライン３８に沿って充分に進むので、実際のターゲットデータアドレスが発せられる。これに応答して、この第四の生起からの実際のターゲットデータアドレスを使用して、その値と前にＰＯＩＮＴＥＲ  Ａに記憶された命令２３の第三の生起からの値との差を計算することにより、この第四の生起がもう一度ストライドであったということを確かめる。ここで、差は３に等しいので、ＳＴＲＩＤＥ  ＬＥＮＧＴＨに既に記憶されている値と比較したとき、その結果は一致する。したがって、予測されたターゲットデータアドレスは正確であったことが確かめられるので、更に、アドレスのストライド系列が継続していると推定される。その結果として、同じ差（３）がＳＴＲＩＤＥ  ＬＥＮＧＴＨ値にとどまり、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲがこのとき３から４に増やされる。更に、現在のターゲットデータアドレス（すなわち、１２２Ａ）がＰＯＩＮＴＥＲ  Ａに記憶される。
【００８８】
命令２３の第五の生起により、再びＬＴＢ５６にヒットが生じ、対応するＮＥＸＴ  ＰＯＩＮＴＥＲがＰＯＩＮＴＥＲ  Ａに設定され、Ａ  ＣＯＮＴＲＯＬが００１に設定され、ＳＴＲＩＤＥ  ＣＯＮＴＲＯＬが「不完全」に設定される。もう一度、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲが２より大きい（たとえば、現在４に等しい）ので、データフェッチ命令のこの第五の生起に対する実際のターゲットデータアドレスはＰＯＩＮＴＥＲ  Ａの値（すなわち、命令の第四の生起による値）とＳＴＲＩＤＥ  ＬＥＮＧＴＨに記憶された値との和となるとこのとき予測される。したがって、現在の例では、ＳＴＲＩＤＥ  ＬＥＮＧＴＨの中の３という値がＰＯＩＮＴＥＲ  Ａの中の１２２Ａの値に加算され、その結果得られる１２２Ｄのターゲットデータアドレスを使用してそのアドレスのプリフェッチ要求が発せられる。更に結局、命令のこの第五の生起により、命令はパイプライン３８に沿って充分に進むので、実際のターゲットデータアドレスが発せられる。これに応答して、この第五の生起からの実際のターゲットデータアドレスを使用して、その値と前にＰＯＩＮＴＥＲ  Ａに記憶された命令２３の第四の生起からの値との差を計算することにより、この第五の生起がもう一度ストライドであったということを確かめる。しかし、ここで、図７で説明したように命令２３の第五の生起に対する実際のターゲットデータアドレスは２２２１である。したがって、この第五のアドレスとＰＯＩＮＴＥＲ  Ａに記憶された１２２Ａの値との差はＳＴＲＩＤＥ  ＬＥＮＧＴＨに既に記憶されている３という差に等しくない。このように、不一致に応答して、現在の生起までのストライド系列が完了している、すなわち、アドレス１２２１、１２２４、１２２７、および１２２Ａの系列が完了していると判定される。したがって、これに応答して、その系列の第一のアドレスがＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲからＰＯＩＮＴＥＲＡに戻される。更に、ＳＴＲＩＤＥ  ＣＯＮＴＲＯＬの不完全なステータスがこのとき再設定されて、ＰＯＩＮＴＥＲ  Ａに対するストライド分析が完全であることを示す。したがってＳＴＲＩＤＥ  ＬＥＮＧＴＨは、系列内のストライドアドレス相互の間の適当な距離をそなえている。更に、前に説明したように、ストライド糸列のアドレス毎にＳＴＲＩＤＥ  ＣＯＵＮＴＥＲは増やされた。したがって、ストライド系列の検出を終了すると、ＳＴＲＩＤＥ  ＣＯＵＮＴＥらの値がＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤに移され、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲが１に戻される。更に、次にＮＥＸＴ  ＰＯＩＮＴＥＲが０１の値に設定される。これにより、ＰＯＩＮＴＥＲ  Ｂがデータフェッチ命令の次の生起を制御すべきであるということが示される。最後に、命令２３の第五の生起による現在のターゲットデータアドレスがＰＯＩＮＴＥＲ  ＢとＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲに記憶され、Ｂ  ＣＯＮＴＲＯＬが００１に設定される。
【００８９】
命令２３の第六の生起は種々の点で上記の第二の生起に類似しているが、ここではＰＯＩＮＴＥＲ  ＡでなくＰＯＩＮＴＥＲ  Ｂに対して動作が行われる。したがって、ＬＴＢ５６内のヒットに応答して、対応するＮＥＸＴ  ＰＯＩＮＴＥＲがＰＯＩＮＴＥＲ  Ｂであり、ＰＯＩＮＴＥＲ  Ｂに対するＣＯＮＴＲＯＬ値が００１に設定され、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲが１に設定され、ＳＴＲＩＤＥ  ＣＯＮＴＲＯＬが「不完全」に設定される。これに応答して、この第六の生起からの実際のターゲットデータアドレスを使用して、その値とＰＯＩＮＴＥＲ  Ｂに既に記憶されている第五の生起の実際のターゲットデータアドレスの値との差が計算される。したがって現在の例では、２２２１という第五の生起のターゲットデータアドレスが２２２４という第六の生起のターゲットデータアドレスから減算される。これにより、３という差が得られる。しかしこの点で、前に説明したようにＰＯＩＮＴＥＲ  Ａは既にストライド系列に対応して完全に設定され、また前に説明したように各ＰＯＩＮＴＥＲは同じストライドリソースを共通使用する。したがって、ＰＯＩＮＴＥＲ  Ｂがストライド系列にも対応できる程度まで、ＳＴＲＩＤＥ  ＬＥＮＧＴＨがＰＯＩＮＴＥＲ  Ａの既に設定されたストライド系列に対するのとＰＯＩＮＴＥＲ  Ｂに対するのと同じであることが保証される。したがって、第六および第五の実際のターゲットデータアドレスから計算された３というストライド長さが与えられたとき、この差がＳＴＲＩＤＥＬＥＮＧＴＨ内の値と比較される。ここで、一致が生じるので、ストライド系列に関連したＰＯＩＮＴＥＲ  Ｂの設定を続行することができる。しかし注意すべきことは、一致しない場合には代替のステップが行われるということである。たとえば、前に述べた代替実施例では、各ＰＯＩＮＴＥＲはそれ自身の対応するストライド属性をそなえているので、ＰＯＩＮＴＥＲ  Ｂはストライド系列の異なる型、すなわちＳＴＲＩＤＥ  ＬＥＮＧＴＨ、ＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤの一方または両方が異なる系列に対応するように設定することができる。熟練した当業者は更に他の代替実施例を確かめることができる。いずれにしても、ストライド長さが一致する現在の例に戻ると、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲは１から２に増やされる。デフォルト予測によれば、命令２３のこの第六の生起はＰＯＩＮＴＥＲ  Ｂに対する一連のストライドアドレスで二番目だからである。更に、現在のターゲットデータアドレス（すなわち、２２２４）がＰＯＩＮＴＥＲ  Ｂに記憶される。最後に、二つの相次ぐアドレスだけが受信、分析されたので、ＮＥＸＴ  ＰＯＩＮＴＥＲは０１にとどまってＰＯＩＮＴＥＲ  Ｂを示し、Ｂ  ＣＯＮＴＲＯＬは００１にとどまり、ＳＴＲＩＤＥ  ＣＯＮＴＲＯＬは不完全なステータスに設定されたままになる。
【００９０】
上記で熟練した当業者には理解されるように、命令２３の第三、第四、および第五の生起に関連したＰＯＩＮＴＥＲ  Ａの完了と同様にして、命令２３の第七、第八、および第九の生起に対して前のステップを繰り返すことによりＰＯＩＮＴＥＲ  Ｂに対応する値を完了することもできる。したがって、命令２３の第九の生起の後、ＰＯＩＮＴＥＲ  ＢにはＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲからの２２２１のアドレスが戻され、ＳＴＲＩＤＥ  ＣＯＮＴＲＯＬは完了ステータスを示すように再設定される。このようにして、一旦次にＰＯＩＮＴＥＲ  ＢがＮＥＸＴ  ＰＯＩＮＴＥＲとして示されると、それはストライド値との組み合わせで一連の４個のストライドアドレスを予測する。それらのストライドアドレスは２２２１、２２２４、２２２７、および２２２Ａである。更に注意すべきことは、第九の生起を使用して現在のストライド系列が完了したと推論されれば、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲの値がＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤの値と比較される。このステップは、多数のＰＯＩＮＴＥＲの間でストライドに関連した値が共通使用されるため、再び必要とされる。換言すれば、この点で、前に説明したようにＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤは既に１２２１、１２２４、１２２７、および１２２Ａのストライド系列に対して完全に設定されている。したがって、ＰＯＩＮＴＥＲ  Ｂがストライド系列にも対応できる程度まで、ＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤがＰＯＩＮＴＥＲ  Ａの既に設定されたストライド系列に対するのとＰＯＩＮＴＥＲ  Ｂに対するのと同じであることが保証される。したがって、４というＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤが与えられたとき、それがＳＴＲＩＤＥ  ＣＯＵＮＴＥＲ内の値と比較される。ここで、一致が生じるので、ストライド系列に関連したＰＯＩＮＴＥＲ  Ｂの設定が完了する。
【００９１】
ＰＯＩＮＴＥＲ  ＢとそのＣＯＮＴＲＯＬがストライドモードを示すように完結した後も、ＰＯＩＮＴＥＲ  ＡとＰＯＩＮＴＥＲ  Ｂの値を比較するために付加的なステップを設けることができる。これら二つの値が一致すれば、代替の予測として、命令２３が４個のアドレスを通って繰り返しストライド系列を遂行した後、もとの同じアドレス（すなわち、ＰＯＩＮＴＥＲ  ＡとＰＯＩＮＴＥＲ  Ｂの両方に記憶されたアドレス）に戻ると予測することができる。換言すれば、ＰＯＩＮＴＥＲ  Ａに対応する与えられたストライド系列に対して、系列が完了した後、同じ系列の開始アドレスにループで戻ると判定することができる。この場合、更に前に述べたように、ステップ８８に関連して代替案を説明した。これにより、ストライドを完了し、その後に円形の順序で次のＰＯＩＮＴＥＲ以外のＰＯＩＮＴＥＲへのＮＥＸＴ  ＰＯＩＮＴＥＲ表示を続けることができる。したがって、この現在の段落はこのような代替案から利益を得る。この代替案により、ストライド系列を完了することができ、現在完了しているストライドを支配した同じＰＯＩＮＴＥＲをＮＥＸＴ  ＰＯＩＮＴＥＲが表すことができる。換言すれば、現在の例に対して、ＮＥＸＴ  ＰＯＩＮＴＥＲ値は００に設定されたままになる。したがって、ストライド系列が完了すると、今完了したばかりのストライド系列をも制御したＰＯＩＮＴＥＲ  Ａが再びデータフェッチ命令の次の生起を支配する。
【００９２】
最後に、図７の例およびエントリ５６１の設定に戻って、熟練した当業者には理解されるように、第二組のストライドアドレス（すなわち、２２２１、２２２４、２２２７、および２２２Ａ）に対する前のステップが命令２３の第十から第十三の生起に対して繰り返されることにより、ＰＯＩＮＴＥＲ  Ｃに対応する値が完了する。したがって、命令２３の第十三の生起後に、ＰＯＩＮＴＥＲ  ＣにＴＥＭＰＯＲＡＲＹ  ＰＯＩＮＴＥＲ  ＳＡＶＥＲからの５２２１のアドレスが再記憶され、Ｃ  ＣＯＮＴＲＯＬが００１に設定され、ＳＴＲＩＤＥ  ＣＯＮＴＲＯＬが分析完了を示すように再設定される。このようにして、一旦ＰＯＩＮＴＥＲ  ＣがＮＥＸＴ  ＰＯＩＮＴＥＲとして示されると、それはストライド値との組み合わせで一連の４個のストライドアドレスを予測する。それらのストライドアドレスは５２２１、５２２４、５２２７、および５２２Ａである。更に、命令２３の第十三の生起に対する実際のターゲットデータアドレスを受けた後、熟練した当業者には理解されるように、ＮＥＸＴ  ＰＯＩＮＴＥＲはＰＯＩＮＴＥＲ  Ａを指示する。したがって、第十三の生起の実際のターゲットデータアドレスはＰＯＩＮＴＥＲ  Ａの中のターゲットデータアドレスと一致することが確かめられる。したがって、現在の例では、一致が見出される。これにより、ＰＯＩＮＴＥＲ  Ｃに関連するストライド系列の終わりからＰＯＩＮＴＥＲ  Ａで表されるような次のストライド系列の初めに至るループが完成する。
【００９３】
上記で、熟練した当業者には理解されるように、命令２３の第十三の生起の後、そのエントリ５６１が（すなわち、図９に示すように）完成し、上記のようなストライドの後にループが続く系列を正確に予測するように検証される。したがって、図１０の方法での使用を容易にするために、エントリ５６１を更に修正して、命令２３の次の生起（すなわち、第十四の生起）とその後の他の生起が図１０の方法に従うようにすることが好ましい。したがって、これを達成するため、ＳＴＲＩＤＥ  ＣＯＵＮＴＥＲにＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤをロードした後、一回減らすことが好ましい。というのは、命令２３の第十三の生起、すなわち、現在のストライド系列の第一の生起は、それのターゲットデータの実際のフェッチが行われたという点で既に処理されているからである。したがって、この点以降、図１０の方法は、エントリ５６１の予測が正確なままである限り、上記のようにプリフェッチ要求を発することができる。
【００９４】
上記で、熟練した当業者は本実施例がどのようにデータフェッチ命令に対するルーピングとストライディングの両方のデータパターンを正確に予測できるかを理解するはずである。更に、符号化の種々の例をそれらの予測に対して示し、それらの符号化を設定するための種々の手法を示したが、熟練した当業者は他の代替案を確かめることができる。たとえば、図４の実施例は３個のＰＯＩＮＴＥＲ（およびそれらの対応するＣＯＮＴＲＯＬフィールド）をそなえており、これは図２ａから図７に紹介されたようなパターンを検出するためには好ましいが、種々のデータパターンに対して代わりの個数のＰＯＩＮＴＥＲを使用してもよい。もう一つの例として、図８の実施例に対する代替実施例を上記し、それによれば各ＰＯＩＮＴＥＲとそれに結合されたＣＯＮＴＲＯＬはそれ自身のストライドに関連した値の組をそなえているが、更にもう一つの実施例として、ストライドに関連した値のテーブルを設け、ＬＴＢ５６の一つ以上のエントリがそのテーブルを参照し、またはそのテーブルをＬＴＢ５６の一つ以上のエントリからの一つ以上のＰＯＩＮＴＥＲと結合するようにもできる。換言すれば、ストライド値のリソースプールを異なるＬＴＢ５６によって共通使用することができるか、または一つ以上のこのようなエントリの中の異なるＰＯＩＮＴＥＲによって共通使用することができる。熟練した当業者は、更に他の例を確かめることができる。
したがって、本実施例を詳細に説明してきたが、特許請求の範囲に規定された発明の範囲を逸脱することなく、上記の説明に対して種々の置き換え、変形、または変更を行うことができる。
【００９５】
以上の説明に関して更に以下の項を開示する。
（１）ロードターゲット回路であって、
複数のエントリ
を具備し、前記複数のエントリの各々が、
行をデータフェッチ命令に対応させるための値と、
複数のポインタであって、複数のポインタの各々がデータフェッチ命令の生起に対応するターゲットデータアドレスを記憶するためのものである、複数のポインタと、
を具備する、ロードターゲット回路。
（２）第１項記載のロードターゲット回路であって、前記複数のエントリの各々には更に、前記複数のポインタの中のどの一つがデータフェッチ命令の与えられた生起に対するターゲットデータアドレスを与えるかを表すためのネクストポインタ値も含まれる、ロードターゲット回路。
（３）第１項記載のロードターゲット回路であって、前記複数のエントリの各々には更に複数のコントロール値が含まれ、複数のコントロール値の中の各コントロール値は前記複数のポインタの中の一つのポインタに対応する、ロードターゲット回路。
【００９６】
（４）第１項記載のロードターゲット回路であって、
前記複数のエントリの各々が更に、
前記複数のポインタの中のどの一つがデータフェッチ命令の与えられた生起に対するターゲットデータアドレスを与えるかを表すためのネクストポインタ値と、
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
を具備し、そして
前記複数のポインタの各々が論理的に順次かつ円形の順序に配列されており、そして
前記複数のエントリの中の与えられた一つに対して、ループモードを示す前記複数のコントロール値の中の与えられた一つに応答して、前記ネクストポインタが前記複数のコントロール値の中の前記与えられた一つに対応する前記複数のポインタの中の第一のポインタから、前記複数のポインタの中の前記第一のポインタのターゲットデータアドレスに対応するプリフェッチ要求を発した後、順次かつ円形の順序で前記複数のポインタの中の第二のポインタに増やされる、
ロードターゲット回路。
【００９７】
（５）第１項記載のロードターゲット回路であって、
前記複数のエントリの各々が更に、
前記複数のポインタの中のどの一つがデータフェッチ命令の与えられた生起に対するターゲットデータアドレスを与えるかを表すためのネクストポインタ値と、
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
を具備し、そして
前記複数のエントリの中の与えられた一つに対して、ループモードを示す前記複数のコントロール値の中の与えられた一つに応答して、前記ネクストポインタが前記複数のコントロール値の中の前記与えられた一つに対応する前記複数のポインタの中の第一のポインタから、前記複数のポインタの中の前記第一のポインタのターゲットデータアドレスに対応するプリフェッチ要求を発した後、前記複数のポインタの中の第二のポインタに調整される、
ロードターゲット回路。
【００９８】
（６）第１項記載のロードターゲット回路であって、前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
ストライド系列の中のデータターゲットアドレスの数を示すためのストライドスレッショルド値と、
を具備するロードターゲット回路。
（７）第６項記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路をも具備し、そして
前記複数のエントリの中の各エントリは更に、そのエントリに対応するプリフェッチ要求の系列の中で発せられたデータターゲットアドレスの数を計数するためのストライドカウンタをも具備する、
ロードターゲット回路。
【００９９】
（８）第６項記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路をも具備し、
前記複数のエントリの中の与えられた一つに対して、データフェッチ命令の相次ぐ生起に応答して、そして更にストライドモードを示す前記複数のコントロール値の中の一つに応答して、前記プリフェッチ要求を発するための回路が、前記ストライドスレッショルド値によって示されるストライド系列の中のデータターゲットアドレスの数に等しい数のプリフェッチ要求を発する、
ロードターゲット回路。
（９）第１項記載のロードターゲット回路であって、前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
ストライド系列の中の相次ぐデータターゲットアドレスの間のストライド長さを示すためのストライドレングス値と、
を具備するロードターゲット回路。
【０１００】
（１０）第９項記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路をも具備し、
前記複数のエントリの中の与えられた一つに対して、データフェッチ命令の相次ぐ生起に応答して、そして更にストライドモードを示す前記複数のコントロール値の中の一つに応答して、前記プリフェッチ要求を発するための回路が、相次ぐプリフェッチ要求を発し、
前記相次ぐプリフェッチ要求の各々がデータターゲットアドレスを含み、そして
前記相次ぐプリフェッチ要求の中の第一の要求の後の相次ぐプリフェッチ要求の各々のデータターゲットアドレスは、それ自身と直前のプリフェッチ要求のデータターゲットアドレスとの間の差としてストライドレングスをそなえる、
ロードターゲット回路。
（１１）第１項記載のロードターゲット回路であって、前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
ストライド系列の中のデータターゲットアドレスの数を示すためのストライドスレッショルド値と、
ストライド系列の中の相次ぐデータターゲットアドレスの間のストライド長さを示すためのストライドレングス値と、
を具備するロードターゲット回路。
【０１０１】
（１２）第１項記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路をも具備し、そして
前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
ストライド系列の中のデータターゲットアドレスの数を示すためのストライドスレッショルド値と、
ストライド系列の中の相次ぐデータターゲットアドレスの間のストライド長さを示すためのストライドレングス値と、
前記複数のポインタの中のどの一つがデータフェッチ命令の与えられた生起に対するターゲットデータアトレスを与えるかを表すためのネクストポインタ値と、
を具備し、
前記複数のエントリの中の与えられた一つに対して、データフェッチ命令の相次ぐ生起に応答して、そして更にストライドモードを示す前記複数のコントロール値の中の一つに応答して、前記プリフェッチ要求を発するための回路が、前記ストライドスレッショルド値によって示されるストライド系列の中のデータターゲットアドレスの数に等しい数のプリフェッチ要求を発し、そして
前記複数のエントリの中の与えられた一つに対して、ループモードを示す前記複数のコントロール値の中の与えられた一つに応答して、前記ネクストポインタが前記複数のコントロール値の中の前記与えられた一つに対応する前記複数のポインタの中の第一のポインタから、前記複数のポインタの中の前記第一のポインタのターゲットデータアドレスに対応するプリフェッチ要求を発した後、前記複数のポインタの中の第二のポインタに増やされる、
ロードターゲット回路。
【０１０２】
（１３）第１項記載のロードターゲット回路であって、
前記複数のエントリの各々が更に、前記複数のポインタの中のどの一つがデータフェッチ命令の与えられた生起に対するターゲットデータアドレスを与えるかを表すためのネクストポインタ値をも具備し、そして更に
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
ネクストポインタ値を一定値に維持することにより、データフェッチ命令の多数回の生起に対して複数のポインタの中の一つを表し、これにより同一アドレスループモードを作成するための回路と、
をも具備するロードターゲット回路。
【０１０３】
（１４）第１項記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路をも具備し、そして
前記複数のエントリの中の与えられた一つに対して、データフェッチ命令の相次ぐ生起に応答して、そして更に同一アドレスループモードに応答して、前記プリフェッチ要求を発するための回路が、同一ターゲットデータアドレスをそなえた相次ぐプリフェッチ要求を発する、
ロードターゲット回路。
（１５）第１項記載のロードターゲット回路であって、前記複数のポインタが３個のポインタであるロードターゲット回路。
（１６）第１項記載のロードターゲット回路であって、前記データフェッチ命令がロード命令である、ロードターゲット回路。
（１７）第１項記載のロードターゲット回路であって、前記データフェッチ命令が記憶命令である、ロードターゲット回路。
【０１０４】
（１８）マイクロプロセッサであって、
命令を受信するための命令パイプラインと、
受信された命令がデータフェッチ命令であるか否かを判定するための回路と、
複数のエントリを含むロードターゲット回路と、
を具備し、そして
前記複数のエントリの各々が、
行をデータフェッチ命令に対応させるための値と、
複数のポインタの各々が前記データフェッチ命令の生起に対応するターゲットデータアドレスを記憶するような複数のポインタと、
を具備する、
マイクロプロセッサ。
【０１０５】
（１９）命令パイプラインをそなえたマイクロプロセッサを動作させる方法であって、
複数の生起の各々がデータフェッチ命令に対する対応する複数の実際のターゲットデータアドレスを生じるような、複数の生起にわたって命令パイプラインでデータフェッチ命令を受信し、
複数の生起の中の第一の生起に応答して、マイクロプロセッサ上のロードターゲットバッファに、データフェッチ命令に対応するエントリを形成し、
複数の生起に応答して、データフェッチ命令に対する対応する複数の実際のターゲットデータアドレスに基づいて、ターゲットデータアドレスの予測をエントリの中で符号化する、
ステップからなり、
予測が第一の予測型と第二の予測型とから選択され、
第一の予測型はループモードであり、ループモードでは複数の実際のターゲットデータアドレスがループ系列を形成し、ループ系列は開始ループターゲットデータアドレスをそなえ、終了ループターゲットデータアドレスに移り、開始ループターゲットデータアドレスに戻ることにより繰り返し、そして
第二の予測型はストライドモードであり、ストライドモードでは複数の実際のターゲットデータアドレスが開始ストライドターゲットデータアドレスから多数の付加的な相次ぐアドレスに移り、相次ぐターケットアドレスの各々のターゲットデータアドレスはそれ自身と直前のターゲットデータアドレスとの間に共通の距離をそなえている、
マイクロプロセッサ動作方法。
【０１０６】
（２０）複数のエントリ（５６１）をそなえたロードターゲット回路（５６）。ロードターゲット回路の中の複数のエントリの各々には、行をデータフェッチ命令に対応させるための値（ＡＤＤＲＥＳＳ  ＴＡＧ）が含まれる。更に、各ロードターゲット回路行には複数のポインタ（ＰＯＩＮＴＥＲ  Ａ，ＰＯＩＮＴＥＲ  Ｂ，ＰＯＩＮＴＥＲ  Ｃ）も含まれる。複数のポインタの各々は、データフェッチ命令の生起に対応するターゲットデータアドレスを記憶するためのものである。
【図面の簡単な説明】
【図１】  多レベルメモリシステムからの情報のフェッチおよびプリフェッチの両方を行うための種々の構成要素がある、その多レベルメモリシステムをそなえたマイクロプロセッサの電気図である。
【図２】  レコードを示す図であって、ａはデータ処理ソフトウェアによって処理されるべきレコードの一例のフォーマットを示す図、ｂはａで示されるフォーマットに従う４個のレコードで使用されるべきデータの一例を示す図である。
【図３】  図２の最初の３個のレコードを記憶する３個のメモリエリアの構成を示し、このメモリエリア構成により、単一の期間の間に、データが記憶装置から第一のエリアに入力され、その間に、データが第二のエリアで処理され、第三のエリアのデータが記憶装置に出力されるというように、相次ぐデータレコードをオーバラップして取り扱うことができる、メモリエリア構成図である。
【図４】  ルーピングデータパターンを収容するための、ロードターゲットバッファ（ＬＴＢ）の中のエントリの第一の実施例を示す図である。
【図５】  ３個の相次ぐアドレス１２００、２２００、および５２００の間のルーピングを示すように、ある値が完了した図４のＬＴＢエントリを示す図である。
【図６】  レコードを示す図であって、ａは図２ａのレコードに更に付加的なフィールドを付加したフォーマットを示す図、ｂはａで示されるフォーマットに従う４個のレコードで使用されるべきデータの一例を示す図である。
【図７】  図３の３個のメモリエリアの構成を示すが、図６ｂに示された付加的なデータをも含むメモリエリアの構成図である。
【図８】  ＬＴＢの中のエントリの第二の実施例を示し、ストライディングデータパターン、ルーピングデータパターン、またはストライディングデータパターンとルーピングデータパターンの組み合わせを収容するエントリの第二の実施例を示す図である。
【図９】  ３個の相次ぐアドレス１２２１、２２２１、および５２２１の間のルーピング、とともにアドレス１２２１からアドレス１２２Ａを通るストライディングを示すように、ある値が完了した図８のＬＴＢエントリを示す図である。
【図１０】  相次ぐストライドアドレスに対して相次ぐプリフェッチ要求が発せられるように、図８のＬＴＢエントリに応答して動作する方法を示す図である。
【符号の説明】
１２  マイクロプロセッサ
３８  命令パイプライン
５６  ロードターゲットバッファ
５６１  エントリ
ＡＤＤＲＥＳＳ  ＴＡＧ  アドレスタグ
ＣＯＮＴＲＯＬ  コントロール
ＮＥＸＴ  ＰＯＩＮＴＥＲ  ネクストポインタ
ＰＯＩＮＴＥＲ  ポインタ
ＳＴＲＩＤＥ  ＬＥＮＧＴＨ  ストライド長さ
ＳＴＲＩＤＥ  ＴＨＲＥＳＨＯＬＤ  ストライド閾値
【図１】
0003830651.tif 000007
【図２】
0003830651.tif 000008
【図３】
0003830651.tif 000009
【図４】
0003830651.tif 000010
【図５】
0003830651.tif 000011
【図６】
0003830651.tif 000012
【図７】
0003830651.tif 000013
【図８】
0003830651.tif 000014
【図９】
0003830651.tif 000015
【図１０】
0003830651.tif 000016