JP3830651B2 - ループとストライドの一方または両方の予測を行うロードターゲットバッファを具現するマイクロプロセッサ回路、システム、および方法 - Google Patents
ループとストライドの一方または両方の予測を行うロードターゲットバッファを具現するマイクロプロセッサ回路、システム、および方法 Download PDFInfo
- Publication number
- JP3830651B2 JP3830651B2 JP03191698A JP3191698A JP3830651B2 JP 3830651 B2 JP3830651 B2 JP 3830651B2 JP 03191698 A JP03191698 A JP 03191698A JP 3191698 A JP3191698 A JP 3191698A JP 3830651 B2 JP3830651 B2 JP 3830651B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- pointer
- stride
- address
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title description 84
- 239000000872 buffer Substances 0.000 title description 13
- 230000004044 response Effects 0.000 claims description 68
- VLCQZHSMCYCDJL-UHFFFAOYSA-N tribenuron methyl Chemical compound COC(=O)C1=CC=CC=C1S(=O)(=O)NC(=O)N(C)C1=NC(C)=NC(OC)=N1 VLCQZHSMCYCDJL-UHFFFAOYSA-N 0.000 description 295
- 230000008569 process Effects 0.000 description 27
- 108700012361 REG2 Proteins 0.000 description 17
- 101150108637 REG2 gene Proteins 0.000 description 17
- 101100120298 Rattus norvegicus Flot1 gene Proteins 0.000 description 17
- 101100412403 Rattus norvegicus Reg3b gene Proteins 0.000 description 17
- 238000012545 processing Methods 0.000 description 15
- 230000003442 weekly effect Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 10
- 238000013519 translation Methods 0.000 description 8
- 230000014616 translation Effects 0.000 description 8
- 230000008901 benefit Effects 0.000 description 7
- 238000013459 approach Methods 0.000 description 6
- 238000013500 data storage Methods 0.000 description 6
- 238000001514 detection method Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 5
- 230000008859 change Effects 0.000 description 5
- 230000007423 decrease Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 102100023882 Endoribonuclease ZC3H12A Human genes 0.000 description 2
- 101710112715 Endoribonuclease ZC3H12A Proteins 0.000 description 2
- 238000007792 addition Methods 0.000 description 2
- RWYFURDDADFSHT-RBBHPAOJSA-N diane Chemical compound OC1=CC=C2[C@H]3CC[C@](C)([C@](CC4)(O)C#C)[C@@H]4[C@@H]3CCC2=C1.C1=C(Cl)C2=CC(=O)[C@@H]3CC3[C@]2(C)[C@@H]2[C@@H]1[C@@H]1CC[C@@](C(C)=O)(OC(=O)C)[C@@]1(C)CC2 RWYFURDDADFSHT-RBBHPAOJSA-N 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007667 floating Methods 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- QGVYYLZOAMMKAH-UHFFFAOYSA-N pegnivacogin Chemical compound COCCOC(=O)NCCCCC(NC(=O)OCCOC)C(=O)NCCCCCCOP(=O)(O)O QGVYYLZOAMMKAH-UHFFFAOYSA-N 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 108091058543 REG3 Proteins 0.000 description 1
- 102100027336 Regenerating islet-derived protein 3-alpha Human genes 0.000 description 1
- 238000010420 art technique Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000011017 operating method Methods 0.000 description 1
- 230000003134 recirculating effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/34—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
- G06F9/345—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
- G06F9/3455—Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/383—Operand prefetching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3848—Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Description
【発明の属する技術分野】
本発明はマイクロプロセッサに関するものであり、更に詳しくはループとストライドの一方または両方の予測を行うロードターゲットバッファを具現するマイクロプロセッサ回路、システム、および方法に関するものである。
【0002】
【従来の技術】
マイクロプロセッサ技術は早いペースで進歩し続けており、設計のすべての側面に考慮が払われている。性能については、種々の関連および非関連のマイクロプロセッサ回路の速度および動作を改善することによりマイクロプロセッサ全体の、より早い速度が達成されている。たとえば、動作効率が改善されている一つの領域は、並列と故障命令の実行を行えるようにすることによって行われる。もう一つの例として、命令、データの一方または両方を含む情報に対して、より早く、より大きなアクセスが行えるようにすることによっても、動作効率は改善される。本発明は主としてこのアクセス能力を目指しており、更に詳しくはデータロード動作またはデータ記憶動作に応答してこのようなデータをプリフェッチすることによりデータに対するアクセスを改善することを目指している。
【0003】
情報に対するアクセス時間を改善することを目指している最新式のコンピュータシステムでの非常に一般的な一つのアプローチは、システムの中に一つ以上のレベルのキャッシュレベルを含めることである。たとえば、キャッシュメモリをマイクロプロセッサ上に直接形成すること、マイクロプロセッサが外部キャッシュメモリにアクセスすること、の一方または両方を行えるようにする。通常、最低のレベルのキャッシュ(すなわち、アクセスすべき最初のキャッシュ)は、階層構造でそれより上のキャッシュ(一つまたは複数)より小さく、早く、そして与えられたメモリの階層構造の中のキャッシュ数は変わり得る。いずれにしても、キャッシュ階層構造を使用するとき、情報アドレスが発せられるとき、アドレスを通常、最低レベルのキャッシュ宛てとすることにより、そのアドレスに対応する情報がそのキャッシュに記憶されているか、すなわちそのキャッシュに「ヒット」があるか調べる。ヒットが起きると、アドレス指定された情報がキャッシュから検索され、メモリ階層構造の中でより高位のメモリにアクセスする必要は無い。ここで、より高位のメモリはヒットキャッシュメモリに比べて多分アクセスが遅い。これに反して、キャッシュヒットが生じなかった場合には、キャッシュミスが生じたと言われる。次にこれに応じて、問題のアドレスが次の、より高位のメモリ構造に呈示される。この次の、より高位のメモリ構造がもう一つのキャッシュである場合には、もう一度ヒットまたはミスが生じ得る。各キャッシュでミスが生じた場合には、結局プロセスはシステム内の最高位のメモリ構造に達し、その点で、そのメモリからアドレス指定された情報を検索することができる。
【0004】
【発明が解決しようとする課題】
キャッシュシステムが存在するとした場合、速度を増大するためのもう一つの従来技術の手法では、キャッシュシステムと組み合わせて、情報のプリフェッチが行われる。プリフェッチとは、投機的検索、または情報検索の準備であって、情報が外部メモリのような高位のメモリシステムから検索されてキャッシュに入り、次の後続のクロックサイクル後のある点で、予想される事象に対してマイクロプロセッサが検索された情報を必要とするものと想定している。この点で、ロードの場合の方が多分、検索に関連してより多く考えられるが、プリフェッチはデータの記憶にも関連し得る。更に詳しく述べると、検索されたデータをマイクロプロセッサが使用し得るように特定のデータが検索される場合に、ロードが行われる。しかし、記憶動作では、まず一群のデータが検索され、その群の一部が上書きされる。更に、記憶質問のようないくつかの記憶動作は、実際にデータを検索することはしないで、近づいている事象に対してマイクロプロセッサの外部のリソースを用意する。この事象が情報をそのリソースに記憶する。この「従来の技術」および後に続く「発明の実施の形態」の目的のため、これらの各場合をプリフェッチの型と考えるべきである。いずれにしても、データを投機的に検索してオンチップキャッシュに入れるプリフェッチの場合に、プリフェッチを生じた予想された事象が実際に生じると、プリフェッチされた情報は既にキャッシュに入っているので、キャッシュからフェッチすることができ、高位のメモリシステムからそれを捜し求める必要は無い。換言すれば、実際のフェッチが必要になった場合、プリフェッチによりキャッシュミスの危険性が低下する。また、命令がループ状になっているループ動作を予測し、ルーピング形式で使用されるべきデータをプリフェッチして、キャッシュミスを最少限とすることが望まれる。
【0005】
【課題を解決するための手段】
上記の手法のもとで、本発明者はマイクロプロセッサの中に、プリフェッチのためのアドレスとして使用すべきデータのアドレスを予測するロードターゲットバッファ(LTB)を設ける。更に本発明では、比較的簡単なものからかなり複雑なデータパターンまでの範囲の種々の異なる型のデータパターンを識別した後に、予測する。したがって以下、これらに対処する種々の実施例、および熟練した当業者が確かめ得る他の考慮を示す。
【0006】
一実施例では、ロードターゲット回路が提供される。ロードターゲット回路には、複数のエントリが含まれる。ロードターゲット回路の中の複数のエントリの各々には、行をデータフェッチ命令に対応させるための値が含まれる。更に、各ロードターゲット回路行には複数のポインタも含まれる。複数のポインタの各々は、データフェッチ命令の生起に対応するターゲットデータアドレスを記憶するためのものである。他の回路、システム、および方法も開示され、特許請求される。
【0007】
【発明の実施の形態】
図1には、全体が10で表された本発明の実施例によるマイクロプロセッサに基づくシステムのブロック図を示す。システム10にはマイクロプロセッサ12が含まれており、マイクロプロセッサ12はバスBをそなえている。図12に関連して後で説明するように、バスBは種々の外部装置に接続され得る。しかし、実施例に対する状況を与える目的で、外部メモリ14だけがバスBに接続されるものとして示されている。付加的な品目については後で説明する。マイクロプロセッサ12はマイクロプロセッサ構造の種々の異なる型を表すことができることに注意すべきである。熟練した当業者は、多数のこのような構造を知っているか、確認することができる。しかし、この点で、図1の構成要素に関連する以外のこのようなマイクロプロセッサに関連する詳細は、説明を簡略にするために図示も、説明もしない。
【0008】
図1のブロックでマイクロプロセッサ12には、当業者に知られている仕方のメモリ階層構造、すなわち最低位の記憶システムから始まって、より高位の記憶システムに向かうデータを読み書きする階層構造が含まれている。このようなシステムの最低レベルには、0レベルのデータキャッシュ回路があり、これは図1ではL0データキャッシュ16として示されている。「L0」表示は当業者には知られているようにメモリ階層構造の事柄を示す。詳しく述べると、低い数字が表示されたキャッシュ回路は一般に、後で説明するL1およびL2のデータキャッシュ回路のようなより高い数字の名称をそなえたキャッシュ回路に比べて(後で説明する)マイクロプロセッサパイプラインの実行ユニットにより近い。更にキャッシュの数字名称は、キャッシュから読んだり書いたりするときにキャッシュが通常アクセスされる上がっていく順番の表示を与える。このように、このようなアクセスはまずL0キャッシュに対して行われ、そのキャッシュに対してキャッシュミスが生じた場合には、L1キャッシュに対するアクセスが続いて行われるというようにメモリ階層構造を通っていき、ついにキャッシュまたは他のメモリ構造にヒットが見出される。本実施例ではL0データキャッシュ16は、16バイトのブロックで合計1Kバイトのデータを記憶するように動作することができる4個の部分からなるセット対応の(4−way set associative)キャッシュであり、各部分は一度に64ビット(すなわち、8バイト)を出力するように動作できることが好ましい。
【0009】
マイクロプロセッサ12には更にL1データキャッシュ18が含まれている。L1データキャッシュ18はバス19を介してL0データキャッシュ16に接続される。この場合も、「L1」という名称はこのキャッシュがメモリ階層構造でL0データキャッシュ16に比べて高位にあるということを必ず示す。本実施例ではL1データキャッシュ18は、32バイトのブロックで合計8Kバイトのデータを記憶するように動作することができる2個の部分からなるセット対応のキャッシュであり、各部分は一度に128ビット(すなわち、16バイト)を出力するように動作できることが好ましい。
【0010】
システム10には、L2統合キャッシュ20も含まれている。L2統合キャッシュ20は、32バイトのサブブロックをそなえた64バイトのブロックで合計64Kバイトのデータを記憶するように動作することができる4個の部分からなるセット対応のキャッシュであり、各部分は一度に256ビット(すなわち、32バイト)を出力するように動作できることが好ましい。L2キャッシュを統合キャッシュと呼ぶのは、データを記憶する他に他の情報も記憶するということを意味するということに注意すべきである。詳しく述べると、後で示すように、L2統合キャッシュ20はアドレス変換情報の他に、命令も記憶する。しかし、代替実施例では、情報の型(一つまたは複数)が変わり得るということに注意すべきである。いずれにしてもこのときデータに対して、L0データキャッシュ16からL1データキャッシュ18に、そしてL2統合キャッシュ20へとメモリ階層構造が形成されるということに注意すべきである。したがって、L2統合キャッシュ20のアドレス指定を生じ得る第一の発生源は、L1データキャッシュ18のミスに応答するL1データキャッシュ18である。L1データキャッシュ18のミスはL0データキャッシュ16のミスから生じる。更にキャッシュミスを生じた各フェッチの場合、この階層構造の次の、より高いレベルでデータが捜し求められる。したがって、L2統合キャッシュ20でミスが生じた場合には、データは外部メモリ14からアドレス指定される。L2統合キャッシュ20にはアクセス制御器22も含まれていることにも注意すべきである。後で詳細に説明するように、アクセス制御器22はL2統合キャッシュ20にアクセスするようにという要求を受ける。ここでそれらの要求は、L2統合キャッシュ20から情報をフェッチまたはプリフェッチするためのものである。
【0011】
L2統合キャッシュ20に関連する図1に示された他の情報径路について説明する前に、バスBに向かう上向きの図1の説明を完了するものとして、L2統合キャッシュ20は更にバス24を介してバスインタフェースユニット(BIU)26に接続され、BIU26はバスBに接続される。前に示唆したように、バスBによりマイクロプロセッサ12からの外部アクセスが可能となり、したがってマイクロプロセッサ12と外部メモリ14等のマイクロプロセッサ外部の他の要素との間の通信を制御し、遂行することができる。熟練した当業者には明らかなように、外部メモリ14はメモリ階層構造でL2統合キャッシュ20より高位である(そしてもちろん、L1データキャッシュ18およびL0データキャッシュ16よりも高位である)。もう一つの例として、バスBと主メモリ14との間に外部キャッシュを接続してもよい。このようにして、マイクロプロセッサ12はこのような外部キャッシュと通信することができる。更にもう一つの例として、マイクロプロセッサ12は多マイクロプロセッサシステムで他のマイクロプロセッサと通信してもよい。たとえば、それらの他のマイクロプロセッサのオンチップメモリと通信してもよい。いずれにしても、これらの外部装置は例としてのものであり、この点で、マイクロプロセッサ12の外部の付加的な要素は簡単さのため詳細に説明しない。このような要素の例は熟練した当業者は知っていたり、確かめることができる。
【0012】
上記のように、L2統合キャッシュ20も命令を記憶する。これについては、L2統合キャッシュ20のアドレス指定を生じ得る第二の発生源はL1命令キャッシュ28である。詳しく述べると、L1命令キャッシュ28はバス30を介してL2統合キャッシュ20に接続される。その名前が示すように、L1命令キャッシュ28は(L1データキャッシュ18にデータが記憶されるのに対して)命令を記憶する。実施例では、L1命令キャッシュ28はL1データキャッシュ18と同様の構成と大きさになっており、したがって合計8Kバイトの情報を記憶するように動作することができる2個の部分からなるセット対応のキャッシュであることが好ましい。ここでは、情報は32バイトのブロックの命令であり、各部分は一度に128命令ビット(すなわち、16バイト)を出力するように動作することができる。
【0013】
L2統合キャッシュ20のアドレス指定を生じ得る第三の発生源はトランスレーション・ルックアサイド・バッファ(TLB)32である。詳しく述べると、TLB32はバス34を介してL2統合キャッシュ20に接続されている。実施例では、マイクロプロセッサの分野では普通に行われているように、論理命令アドレスは対応する物理的アドレスに翻訳(translate)される。このような状況においてTLB32はいくつかの既存の翻訳のテーブルを記憶しているので、後続の時点にこのような翻訳にアクセスすることができ、翻訳を再計算する必要は無い。更に、TLB32の探索にミスがあった場合には、TLB32に結合されたハードウェアは主メモリのページテーブルを通るテーブルウォークを開始することにより、アドレス翻訳を決定する。これらの主メモリページテーブルは一部または全部をL2統合キャッシュ20に記憶してもよい。実施例では、TLB32は256エントリ、4個の部分からなるセット対応のものであり、各行が単一の翻訳を記憶するような大きさになっていることが好ましい。
【0014】
図1に示すように異なるレベルのキャッシュがあるが、このようなキャッシュは各々、仲裁回路36にも接続される。仲裁回路36は、低位のキャッシュのミスに基づいて各キャッシュへの相次ぐアクセスの一般的な動作を示すために含まれる。たとえば、上記のように、L0データキャッシュ16へのキャッシュアクセスがキャッシュミスになった場合、L1データキャッシュ18がアクセスされ、次にL2統合キャッシュ20がアクセスされというようにして、以下同様に行われる。したがって仲裁回路36は、動作に対する仲裁制御を表し、熟練した当業者は種々のやり方でこれを具現することができる。仲裁回路36はL2統合キャッシュ20のアクセス制御器22にも接続されていることに注意すべきである。このようにして、より低レベルのキャッシュのミスに基づいてL2統合キャッシュ20に対するアクセス要求が示されたとき、仲裁回路36はこのアクセス要求をアクセス制御器22に与える。しかし、後で詳しく説明するように、アクセス制御器22は付加的な制御レベルも表し、これによりこれらの要求は順位をつけて表に並べられ、優先順位に基づいてL2統合キャッシュ20に再送出される。
【0015】
L2統合キャッシュ20のアドレス指定を生じ得る第四の発生源は、L2統合キャッシュ20にスヌーブ(snoop)要求を出す任意の回路である。当業者には知られているように、スヌープはメモリ階層構造の異なるレベルを通してメモリの一貫性を確実にする機能である。スヌープ要求はマイクロプロセッサの内部または外部で発生することができる。通常、スヌーブは、メモリシステムの一つ以上のレベルに対するアドレスを示すことにより行われる。図1でこの機能は、BIU26から仲裁回路36へのスヌープアドレス入力として示されている。仲裁回路36は図1のキャッシュ構造のいずれかにスヌープアドレスを示すことができる。各キャッシュには、一貫性プロトコルを具現するというような当業者には知られている要因に応じて種々の仕方でスヌープアドレスに応答するように指示することができる。たとえば、スヌープアドレスに対応する情報を記憶しているか確かめることだけを行うようにキャッシュに指示することができる。もう一つの例として、スヌープアドレスに対応する情報をそなえていれば、このような情報を出力するようにキャッシュに指示することができる。更にもう一つの例として、スヌープアドレスに対応する情報をそなえていれば、このような情報を無効にするようにキャッシュに指示することができる。いずれにしてもスヌープアドレスは、L2統合キャッシュ20に対する更にもう一つの潜在的なアドレスとなる。
【0016】
マイクロプロセッサ12のアドレス指定可能なメモリ階層構造の種々の構成要素を示したか、次に、メモリ階層構造からのアドレス指定可能な情報を必要とするマイクロプロセッサの構成要素について説明する。これについては、マイクロプロセッサ12には全体を38で表したパイプラインが含まれる。パイプライン38を使用して、複合命令セットコンピュータ(CISC:complex instruction set computer)で命令を受けて、処理することができる。パイプライン38は40から50までの偶数の参照番号を付した6段階をそなえるものとして例示されている。40から50までの各段階は、いくつかの点において、当業者には知られている段階(一つまたは複数)を表しており、異なる構成の中では名前や機能が異なることがあり得る。したがって、以下の説明は例を示すものであり、発明の実施例を限定するものではない。パイプライン38について一般的に注意すべきことは命令を開始段で受けるということである。本例では、開始段は命令フェッチ段40である。命令フェッチ段40には、ブランチターゲットバッファ(BTB)41が含まれる。ブランチターゲットバッファ(BTB)41は、当業者には知られているようにブランチ命令の状況で命令のフェッチを助ける。段40による命令フェッチは、上記のようなL1命令キャッシュ28からの第一のレベルで行われる。命令フェッチによっては、特にメモリ階層構造システムのより遅い構成要素にアクセスするために、1クロックサイクルより長い間、パイプラインを停止させることがあり得るということに注意すべきである。代表的には、受信された命令はその後、一つ以上の復号段42で復号される。したがって、パイプラインには整数個の復号段が含まれ得るが、パイプライン38には例としてこのような復号段42が一つしか含まれていない。通常、復号プロセスは多段(ずなわち、多クロック)プロセスであることは理解されるはずである。復号段42(一つ以上の段)はより複雑な命令を伸長して、本明細書でマイクロオペレーションコードと呼ぶ一つ以上の簡単なオペレーンョンとする。これらのマイクロオペレーションコードは、代表的には単一の実行クロックで実行させることができる。マイクロオペレーションコードは構成や製造者により異なる名前が付けられていることに注意すべきである。たとえば、テキサスインスツルメント社の規格では、マイクロオペレーションコードはアトミックオペレーション(AOp)と呼ばれる。これらのAOpは全体として完成すれば、そのオプコードとオペランドがある場合にはそれらを含む命令セット命令の完成と卒業を表す。AOpはいくつかのRISC命令とほぼ同等であるので、マイクロプロセッサの種々の部分に接続されて、復号された命令の実行を次に開始するコードであることに注意すべきである。したがって、AOpは他の構成でROp、μOp、またはRISC86命令と呼ばれるものと同等である。
【0017】
復号段42からマイクロオペレーションコードが発生すると、スケジュール段44がマイクロプロセッサの対応する適当な実行ユニットに対してそれらのコードを指定する。いくつかの協定では、スケジュール段は各マイクロオペレーションコードのそれの実行ユニットへの発行と呼ばれる。たとえば、マイクロプロセッサに三つの実行ユニット(たとえば、演算ユニット、ロード/記憶ユニット、および浮動小数点ユニット)が含まれている場合には、対応する各実行ユニットは3個以内のマイクロオペレーションコードの群を形成して、単一のクロックサイクルでの実行に対して割り当てることができる。実際には、たとえば、演算ユニットが1個より多く、ロード/記憶ユニットが1個より多いというようにして、マイクロプロセッサが3個より多い実行ユニットを含むことがあり得る。このような場合には、単一のクロックサイクルで実行すべきマイクロオペレーションコードの数をそれに応じて増大することができる。本明細書で使用する用語として、マイクロオペレーションコードの群はその大きさにかかわらず、「マシンワード」と呼ばれる。このようなマシンワードが実行リソース当たり50ビット以上を必要とすることもまれでないので、三つの実行ユニットをそなえたマイクロプロセッサは幅が150ビットのオーダのマシンワードに応答して動作することがあり得る。
【0018】
スケジュール段44に続く段の説明をする前に、マシンワードは上記の代わりとして異なる発生源から、すなわちマイクロプログラムメモリ52から来ることがあるということにも注意すべきである。マイクロプログラムメモリはこの分野ではマイクロROMと呼ばれることが多い。マイクロプログラムメモリ52は一般に、マシンワードの種々の列(thread)で予めプログラミングされたROMである。マイクロプログラムメモリ52の出力は、スケジュール段44の出力と同様にマルチプレクサ54の入力として接続される。その結果として、ここでは詳細に説明する必要のない種々の制御信号に応答してマルチプレクサ54は、スケジュール段44からのマシンワードではなくてマイクロプログラムメモリ52からのマシンワードを次の後続の段に与える。更に詳しく述べると、マイクロプログラムメモリ52に対するエントリポイントアドレスを発生することができる。この場合、このような列の最初のマシンワードが出力され、次に後続の各クロックサイクルの間に列の中の後続のマシンワードを出力することができる。したがって、このブロセスを繰り返すことにより、マイクロプログラムメモリ52からの全体の列の中の一つの列がパイプライン38の残りに送られる。パイプライン38の残りは次にマイクロプログラムメモリの列の中の各マシンワードを実行し、完了することができる。
【0019】
マルチプレクサ54の後のオペランドフェッチ段46は、現在発せられているマシンワードの中のマイクロオペレーションコードのいずれか一つ以上を実行するために必要な任意のデータをフェッチする。代表的にはこのデータには、レジスタまたはメモリからフェッチされたオペランドが含まれる。メモリからデータを検索する状況で、段46はL0データキャッシュ16に接続され、そのキャッシュからデータを捜す。この場合も、そのキャッシュレベルでミスが生じると、熟練した当業者には明らかなように、より高位のレベル、たとえばL1データキャッシュ18、L2統合キャッシュ20、または外部メモリ14からデータを捜す。命令フェッチと同様に、いくつかのデータフェッチも1クロックサイクルより長くパイプラインを停止させることがある。
【0020】
実行段48には、一つ以上の演算ユニット、一つ以上のロード/記憶ユニット、および浮動小数点ユニットのような多数の実行ユニットが含まれる。このような各ユニットに対して、ユニットはマシンワードのそれに対応する部分を実行する。すなわち、各実行ユニットはそれに割り当てられたマイクロオペレーションコードでそれに対応する機能を遂行する。実行段48の一つ以上の実行ユニットがデータにアクセスすることもある。したがって、段48はL0データキャッシュ16にも接続され、その接続により、マイクロプロセッサ12のメモリ階層構造でそのキャッシュより高位の付加的なデータ記憶構造だけでなく、そのキャッシュにもアクセスする。
【0021】
最後に、段50は命令を卒業する。これは命令を完了し、マイクロプロセッサの構成された状態に対して、もしあればその命令の影響を及ぼすということを意味する。更に、命令の結果があれば、それがレジスタファイルのようなある記憶装置に書き込まれる。この最後の動作は一般にライトバック(write back)と呼ばれ、ときにはパイプラインの最終段の一部でないが、命令の卒業と同時に生じる機能と考えられる。
【0022】
以上の説明から熟練した当業者には明らかなように、マイクロプロセッサ12にはそのメモリ階層構造からの情報にアクセスできる種々の回路が含まれ、その情報はデータ、命令、またはアドレス翻訳テーブルのいずれであってもよい。ここまで説明したアクセスはこのような情報の実際のフェッチを処理する。すなわち、その情報がパイプライン38に直接フェッチされる情報の検索を処理する。代表的には、フェッチされた情報は、それがフェッチされたサイクルの直後のクロックサイクルで作用を受ける。たとえば、命令フェッチ段40により第一のクロックサイクルでフェッチされた命令は、第一のクロックサイクルに続く次のクロックサイクルに復号段42により復号することができる。もう一つの例として、第一のクロックサイクルにデータフェッチ段46によりフェッチされるデータは、第一のクロックサイクルに続く次のクロックサイクルに、実行段48の実行ユニットが使用することができる。最後に、注意すべきことは、上記のアクセスの型は説明のためのものであり、アクセスの他の型も熟練した当業者は確かめることができる。たとえば、ある命令は、パイプラインの種々の異なる段階のいずれかにあるとき、メモリの階層構造にアクセスして、情報をパイプラインにフェッチすることができる。更に、上記のパイプライン38の説明は単に例示のためのものである。したがって当業者には知られているように、他の型のパイプライン構成の種々のパイプライン段を通るときに、命令は情報をパイプラインにフェッチすることができる。
【0023】
フェッチによる情報のアクセスについて説明してきたが、システム10には、フェッチではなくてプリフェッチを必要とする情報アクセスに関する種々の回路および方法も含まれる。プリフェッチがフェッチと異なるのは、プリフェッチされた情報は受信するとすぐに情報に作用する必要が実際にあるので、検索されるのではなくて投機的に検索されるという点である。本実施例では、後で説明するようにシステム10のメモリ階層構造を通る実効アクセス時間を短縮するためにプリフェッチが使用される。更に、上記の「従来の技術」で説明したように、プリフェッチはロード、データ記憶、または記憶質問のような場合に関係し得る。いずれにしてもこの点で、後の実施例の理解を容易にするため、前置きの説明を行う。前に述べたように、外部メモリ14に記憶される情報は種々のキャッシュにも記憶され、異なるキャッシュを特徴付けているのは、一部はメモリ階層構造の中でのそれらの位置と、与えられたキャッシュが記憶する情報の型である。プリフェッチの場合、マイクロプロセッサ12の中の種々の回路(それらの回路については後で説明する)の中の一つがプリフェッチを希望すると、要求する回路は所望の情報に対応するプリフェッチ要求を発する。後で詳細に述べるように、プリフェッチ要求には少なくとも所望の情報のアドレスと所望の情報の大きさについての何らかの表示(たとえば、バイト数)が含まれることが好ましい。実施例ではプリフェッチ要求が、より低レベルのキャッシュ構造ではなくて、L2統合キャッシュ20に直接結合されることに注意すべきである。換言すれば、フェッチ要求と異なりプリフェッチ要求は、その要求により捜される特定の型の情報を記憶しているかも知れない最低レベル(一つまたは複数)のキャッシュにはアクセスしない。このアプローチが行われる理由は、実施例ではL2統合キャッシュ20はその情報が下方包括的であるからである。換言すれば、L2統合キャッシュ20より下位のキャッシュ内のどの情報もL2統合キャッシュ20にも記憶されているからである。たとえば、L1データキャッシュ18が情報のキャッシュ列を記憶する場合には、その同じ情報がL2統合キャッシュ20にも記憶される。したがって、プリフェッチ動作がL2統合キャッシュ20に発せられてキャッシュミスになった場合、それより低位のキャッシュはどれも要求された情報を記憶していないこともわかるので、プリフェッチ動作を続行して、チップ上の情報をL2統合キャッシュ20に入れることが有益である。一旦情報がチップ上にもたらされると、その後、その情報が必要になった場合、より容易にアクセスできる(すなわち、少なくともL2統合キャッシュ20でアクセスできる)ので、外部アクセスは必要でない。したがって、これに関して注意すべきことは、プリフェッチの利点のほとんどはプリフェッチされたデータをオンチップで持ってくることにより行われる。換言すれば、プリフェッチが無くて、その情報に対するフェッチが後で発せられ、その情報をオフチップで検索しなければならない場合には、このアクセスのために多数のクロックサイクルが必要になると思われる。しかし、情報をオンチップでプリフェッチすることにより、オンチップキャッシュの中の少なくとも1個から情報を入手することができる。したがって、その情報にアクセスするための時間は、オフチップアクセスで必要とされる時間に比べてかなり短くなる。更に、プリフェッチ動作がL2統合キャッシュ20に発せられてキャッシュヒットになった場合、情報はL2統合キャッシュ20から入手でき、L2統合キャッシュ20に比べて階層構造でより低位のキャッシュからさえも入手できることがわかっている。したがって、いずれの位置でも、オフチップリソースから情報を検索しなければならない場合に比べて比較的短い期間内に、情報にアクセスすることができる。この好ましい動作の付加的な利点については、後で説明する。いずれにしても、付加的な介在無しに、一旦プリフェッチ要求がL2統合キャッシュ20に示されると、L2統合キャッシュ20がその情報を記憶していることを一般的に確かめることができるか、またはその情報をより高位のレベルのメモリから検索してL2統合キャッンュ20に入れることができる。代替案として、プリフェッチされた情報をマイクロプロセッサ12の中の何か他のリソースに、たとえば一群のプリフェッチバッファの中に記憶してもよい。ここで、それらのバッファはL2統合キャッシュ20の一部であるか、または別個の構造である。いずれにしても、一旦情報がプリフェッチされれば、そして投機的プリフェッチが正しければ、すなわち、その情報がその後実際のフェッチに必要であれば、これはキャッシュ(L2統合キャッシュ20)または他のオンチップリソースからアクセス可能であるので、情報に対する実効アクセス時間が最小化される。
【0024】
プリフェッチの上記の説明で更に注意すべきことは、次のような、本実施例が扱う二つの考慮すべき問題が生じるということである。第一に、どの回路がプリフェッチを発するかという考慮すべき問題がある。第二に、プリフェッチ情報のアクセスは付加的な介在無しに上記のようにしてL2統合キャッシュ20に対して進むと前に述べたが、後で詳しく説明するように本実施例は場合によってはプリフェッチ機能で介在する回路および方法を提供する。
【0025】
上記したように、実施例では種々の回路がプリフェッチを発し得る。これに関してまず注意すべきことは、実際のフェッチを発し得る上記の回路のいくつかはプリフェッチ要求も発し得るということである。たとえば、実行段48はデータに対するプリフェッチ要求を、たとえばそれの一つ以上のロード/記憶ユニットの動作により発することができる。もう一つの例として、当業者にはBTBは命令に対する実際のフェッチを発する(すなわち、直ちに復号等を行うためパイプラインに配置するために実際のフェッチを発する)ことが知られているが、本実施例では命令フェッチ段40のBTB(ブランチターゲットバッファ)41もプリフェッチ要求を発することができるので、一つ以上の命令がL2統合キャッシュ20にプリフェッチされる。これについては、本発明と出願人が同じで、 に出願され、ここに引用されている米国特許出願第 号、「マイクロプロセッサにおけるブランチ予測とキャッシュプリフェッチの組み合わせ」(Combined Branch Prediction And Cache Prefetch In A Microprocessor)(代理人処理番号TI−24154)を参照できる。マイクロプロセッサ12には、プリフェッチ要求を発することができる付加的な回路が含まれる。詳しく述べるとマイクロプロセッサ12には更に、L2統合キャッシュ20に接続されたロードターゲットバッファ(LTB)56も含まれる(ただし代替実施例では、それが発するプリフェッチ要求はどこか他の所に、たとえば、より低レベルのキャッシュ(一つまたは複数)に接続することができる)。この点で、そして前置きとして注意すべきことはLTB56に、あるデータフェッチ命令のアドレス、およびそれらの命令により将来、どのデータが使用されるかに基づくマイクロプロセッサ12による予測が含まれる。このようにして、一旦データフェッチ命令自身がパイプライン38にフェッチされると、LTB56を使用してデータフェッチ命令に対応するエントリをそなえているか判定する。そうであれば、その予測および多分、データフェッチ命令に対応する他の情報に基づいて、LTB56はL2統合キャッシュ20にプリフェッチ要求を発することができる。他の介在無しに、L2統合キャッシュ20から始まってメモリ階層構造を通って上向きに伝搬するプリフェッチ動作によりプリフェッチ要求に応答するので、データが現在オンチップである(そのキャッシュの一つの中にある)と確認されるか、またはそれがプリフェッチ要求に応答してマイクロプロセッサ上に検索することができる。したがって、一旦検索された場合、命令がパイプライン38を通るときにデータフェッチ命令がデータを要求すれば、データは後続の使用に利用できる。他の介在が無い場合にプリフェッチ要求に応答してプリフェッチ動作が行われるということを少し前に説明した。しかし、これについては場合によって、要求に応答するプリフェッチ動作は他のシステムパラメータに基づいて抑制または変形することができる。このようなシステムの更に詳しい情報については、本発明と出願人が同じで、本発明と同じ日に出願され、ここに引用されている米国特許出願第 号、「マイクロプロセッサに基づくシステムでプリフェッチ処理のための回路、システム、および方法」(Circuits,Systems,And Methods For Prefetch Handling In A Microprocessor−Based System)(代理人処理番号TI−24153)を参照できる。
【0026】
LTB56はデータフェッチ命令によってフェッチすべきデータのアドレスを予測する。説明の目的で、このデータをターゲットデータと呼び、そのアドレスをターゲットデータアドレスと呼ぶことにする。LTB56の予測に応答して、データフェッチ命令が実行される前に、ターゲットデータアドレスのターゲットデータをマイクロプロセッサチップ上のキャッシュ(たとえば、L2統合キャッシュ20)または他のメモリ構造にプリフェッチすることができる。したがって、その後データフェッチ命令がデータを要求すると、何か外部記憶装置からデータをフェッチしないで、オンチップキャッシュまたはメモリ構造からデータをフェッチすることができる。換言すれば、このようにしてプリフェッチすることにより、キャッシュミスのコストが低減されるので、マイクロプロセッサの効率が向上する。しかし、プリフェッチの利点があるとして、この利点が実現されるのは、LTBが与えられたデータフェッチ命令に対するデータパターンを正確に予測できる場合だけである。後で詳細に説明するように、本実施例は種々の複雑なデータパターンに対して正確な予測を与えることにより従来の技術を改善する。
【0027】
少なくとも現在の出版物は科学分野のソフトウェアを対象とした簡単なロードターゲットの予測について論じており、したがって、このようなソフトウェアでしばしば出会うデータ構造を対象としている。これと異なり、本発明者は業務のためのデータレコード処理ソフトウェアは科学および技術のソフトウェアと異なる、かなり異なる型のデータ構造を含むことを認識した。したがって、現在のLTBはこのような異なるデータ構造に対して良好に適合していない。したがって本発明者は本明細書で、データレコード処理ソフトウェアに対して特に有益なターゲットデータのプリフェッチを許容する種々の実施例を示す。レコード処理ソフトウェアとはレコード集約的なプログラムを表わそうとしている。レコードのファイル内の各レコードに対して、命令のループが繰り返されることが多い。この概念を更に導入するために、図2aは全体を60で表した簡単なレコードを示しており、このレコードには例として60aから60eまでの5個のフィールドが含まれている。もちろん、これより少ない数またはより多い数のフィールドを使用してもよく、それらのフィールドの主題は非常に変化してもよい。図2aの例は、後の説明のために一般的な状況を示している。レコード60の最初のフィールド60aはEMPLOYEE NAME(従業員の氏名)を表し、残りのフィールドはその従業員の属性を指定する。詳しく述べると、第二のフィールド60bはその従業員のI.D.NUMBER(ID番号)を表し、第三のフィールド60cはその従業員のHOURLY WAGE(時給)を表し、第四のフィールド60dはその従業員のHOURS WORKED FOR THE PAST MONTH(先月の労働時間)(以後HOURS WORKED(労働時間)と略す)数を表す。第五のフィールド60eは、後でより良く理解できるように、フィールド60cおよび60dに基づくその従業員に対するPAY DUE(支払い賃金)を表す。
【0028】
後の説明に対する背景を示すため、図2bは4個のレコード62、64、66、および68を示す。これらは図2aのレコード60のフォーマットに従っている。しかし、この場合も後の説明のための例を示すため、レコード62、64、66、および68の各々に対して特定の情報が与えられている。たとえば、レコード62には、EMPLOYEE NAME(従業員氏名)としてアベ・アダムス(Abe Adams)、そのI.D.NUMBER(ID番号)として123、そのHOURLY WAGE(時給)として6.50ドル、そのHOURSWORKED(労働時間)数として185、そのPAY DUE(支払い賃金)として1202.50ドルがリストされている。熟練した当業者は、各フィールドのデータについて再度説明しなくても、レコード64、66、および68の各々に対してどのようにこのデータが示されているか理解できるはずである。また、レコード62、64、66、および68に示された実際の情報フィールドは虚構で作成されたデータに過ぎず、したがって、生死にかかわらず、いかなる個人をも反映したものではない。
【0029】
本実施例がLTB技術に関連するものであるとして、LTB56の予測が充分な回数、正確である場合には、LTB56の使用はマイクロプロセッサの効率を改善する。これに関して、レコードフォーマットを導入し、本発明者はデータレコードを処理するためのある公知の手法の環境で予測が充分に許容できるようにするためのLTB56の構成の仕方を理解した。図3はこのような手法の一つを紹介するものである。詳しく述べると、データレコード処理ソフトウェアにより普通に使用される一つの手法では、三つの別々のメモリエリアを使用して、三つの異なるデータレコードの処理が重なり合えるようにする。このプロセスを示すため、図3にはAREA1、AREA2、AREA3と名付けられた三つの、このようなメモリエリアが示されている。代表的には、図3に関連して説明したやり方で使用されるAREAはメモリ内の別々のページであるが、メモリエリアを供するための他の手法を使用してもよい。いずれにしても、三つのAREAの中の各エリアの位置は、その開始アドレスによりソフトウェアにはわかる。説明のための例を示すため、AREA1はメモリのアドレス1200で始まり、AREA2はメモリのアドレス2200で始まり、AREA3はメモリのアドレス5200で始まるものとする。例示のため、種々のAREAのアドレスは熟練した当業者には理解されるように16進数である。
【0030】
一旦、図3のAREAの位置がわかれば、各AREAはすぐ後に説明するようにレコードファイルのレコードの中の一つのレコードに対する一時的な作業スペースとして使用される。例として図2bのレコードを使用すると、各メモリAREAは相次ぐレコードのために使用される。更に、このようなAREAの使用は次のように重なり合う。図3でt1と示された第一の時点に、AREA1の開始アドレスである1200から始まって、データレコードがAREA1にフェッチされる。したがって本例では、図2bからのレコード62がAREA1にフェッチされる。第五のフィールド(すなわち、PAY DUE(支払い賃金))が図3に示されているが、その値は最初はレコードの中に無くて、後で説明するように、後で計算されて、メモリに書き込まれることに注意すべきである。また注意すべきことは、このようなレコード62の入力は代表的には、別個のダイレクトメモリアクセス制御器(DMA)等を使用するなどして、中央処理装置(CPU:Central processing unit)に負担をかけることなく行われるということである。このようにして、t1の間に、DMAを使用して、ディスク記憶装置のようなある記憶装置からレコード62がフェッチされ、AREA1の開始アドレスである1200から始まってAREA1に入力される。図3でt2で示される第二の時点には、データレコードがAREA2の開始アドレスである2200から始まってAREA2にフェッチされる。したがって本例では、図2bからのレコード64がDMAを介してAREA2に入力される。しかしt2の間で更に注意すべきことは、レコード64がAREA2に入力されている間に、AREA1のレコード62がCPUによって処理されつつあるということである。すなわち、レコード62のフィールドは、それらのフィールドのどれかを読み出すため、そしてそれらのフィールドに情報を書き込むためにプログラムコードが利用できる。その後、図3でt3で示される第三の時点には、データレコードがAREA3の開始アドレスである5200から始まってAREA3にフェッチされる。したがって本例では、図2bからのレコード66がDMAを介してAREA3に入力される。しかし、AREA1とAREA2の両方が既にレコードを受けているので、t3の間で更に注意すべきことは、DMAを介してレコード66がAREA3に入力されている間に、AREA2のレコード64が処理されつつあり、AREA1のレコード62が出力されつつあるということである。AREA1のレコード62について更に詳しく述べると、注意すべきことは、これもDMA等を使用することによりCPUに負担をかけることなくディスク記憶装置に出力されるということである。
【0031】
AREA1からAREA3のフォーマットが与えられているが、それらのAREAに記憶されたレコードの処理を続ける前に注意すべきことは、エリア当たり一つのレコードの上記のフォーマットは例示のためのものであるということである。したがって、代替案として、この性質のAREAに対する、ある入力/出力はブロック状レコードによって行われる。この用語は当業者には知られている。ブロック状レコードは、複数のレコードが単一のエリアに配置される場合を示す。ここで、それらの複数のレコードはブロックと呼ばれる。たとえば、図3で、レコード62および64をAREA1に記憶し、レコード66および68をAREA2に記憶することができる。このように、以下に教示される種々の概念から理解されるように、本実施例により異なるデータパターンが実現され、収容することができる。
【0032】
AREA1からAREA3の各AREAが上記のようにしてレコードを受けた後、注意すべきことは、レコードのファイルの中の各レコードを処理しなければならないので、手順が続行されるということである。このようにして、t4で、レコードファイルの中の次のレコードがAREA1に入力される。図3には示されていないか、t4の間に、図2bのレコード68がAREA1に入力される。更に、この同じt4の間に、レコード64がAREA2から出力され、AREA3のレコード66が処理される。この手順が与えられると、熟練した当業者には理解できるように、相次ぐレコードをメモリ内で効率的に処理できるとともに、ディスク記憶装置からの、そしてディスク記憶装置へのそれらのレコードのアクセス時間を短縮できる。換言すれば、三つのメモリエリアでなく、単一のメモリエリアだけを使用する場合には、単一のレコードがそのエリアに入力され、処理された後、そのエリアから出力され、その後、次の単一レコードについて同様のことが行われ、以下同様に進められる。この後者の手順では、一つのレコードの入力の時間、もう一つのレコードの処理の時間、更にもう一つのレコードの出力の時間に重なりが無いので、多数のレコードを処理するためには、かなり、より長い時間が必要とされる。したがって、要するに、図3に示す手法はレコード処理効率を改善する。しかし、更に、後で説明するように、図3の手順がどのようにして検出されてLTB56に記録される予測可能性のレベルを生じるかということも本発明者は理解した。上記のプロセスと組み合わせてプリフェッチを使用することにより、マイクロプロセッサの効率を更に改善することができる。
【0033】
本実施例の説明を更に進める。次の表1は、図2bのレコードを処理するための簡単な擬似コードプログラムを示す。
【表1】
LTB56の構成の説明を進める前に、表1の擬似コードに関連した付加的な注釈を加えることは有用である。まず注意すべきことは、擬似コードとして表1のコードは単なる一例に過ぎず、コードにより示される機能を遂行するためにマイクロプロセッサが使用する実際のコードは、形式、複雑さの一方または両方が異なり得るということである。いずれにしても、表1が示そうとしていることは、種々のプログラムコード行がメモリの中のどこかに記憶されるということと、プログラム行が図2bのレコードファイルの中の各レコードに対して種々の動作を行うということである。プログラムコードのメモリ記憶について注意すべきことは、表1は各プログラム行に対するメモリアドレスをリスト表示したものであり、アドレスはアドレス10から始まり、相次ぐ命令毎に1づつ大きくなる。したがって、この点以降、このような各命令は表1のそのアドレスで表す。コードにより行われる動作に対して表1の例は、各従業員が先月かせいだ金額を計算するものである。すなわち、表1の例は図2aに示されたPAY DUE(支払い賃金)フィールドを計算するものである。詳しく述べるとPAY DUE(支払い賃金)は、各従業員のHOURLY WAGE(時給)にその従業員のHOURS WORKED(労働時間)を乗算することにより計算される。更に詳しく述べると、命令11および12はこれらの乗数の各々をそれぞれのレジスタにロードし、命令13はそれらのレジスタの乗算を行い、積を第三のレジスタに記憶する。最後に、命令13は結果を対応するレコードに対するPAY DUE(支払い賃金)フィールドに記憶させる。もちろん、種々の付加的な動作を行うことはできるが、本例は下記の原理を説明するのに充分なはずである。
【0034】
本発明者は次に、図3のメモリAREAに関連して観察され、そして本実施例に従ってLTB56により予測され得る動作のルーピングパターンについて説明する。このルーピング手法を説明するために、図2bのレコードの処理段を通って上記の擬似コードをたどってみる。J=1に対する擬似コードについては、レコード62(すなわち、Abe Adams)が処理される。命令11はターゲットデータアドレス1214にあるAbeのHOURLY WAGE(時給)のターゲットデータをロードする。命令12はターゲットデータアドレス1218にあるAbeのHOURS WORKED(労働時間)のターゲットデータをロードする。命令13は、これらの二つの乗数の積を計算し、これをレジスタREG3に記憶させる。最後に命令14は命令13により得られた積を、PAY DUE(支払い賃金)フィールドに対応するメモリAREA位置、すなわちターゲットデータアドレス121Cに記憶さぜる。次に命令15によりJが増大させられ、J=2に対して、同じ命令によりレコード64(すなわち、Barry Barnes)に対するデータが処理される。したがってこの場合も、命令11がターゲットデータアドレス2214にあるBarryのHOURLY WAGE(時給)のターゲットデータをロードする。命令12は、ターゲットデータアドレス2218にあるBarryのHOURS WORKED(労働時間)のターゲットデータをロードする。その後、積が計算され、ターゲットデータアドレス221Cに書き込まれる。再びJが増大させられ、J=3に対して、同じ命令によりレコード66(すなわち、Cindy Cox)に対するデータが処理される。したがってこの場合も、命令11がターゲットデータアドレス5214にあるCindyのHOURLY WAGE(時給)のターゲットデータをロードする。命令12は、ターゲットデータアドレス5218にあるCindyのHOURS WORKED(労働時間)のターゲットデータをロードする。その後、積が計算され、ターゲットデータアドレス521Cに記憶される。
【0035】
ファイルの最初の三つのレコードを処理したとき、前に述べたようにAREA3のレコードが上記の命令によって処理されているとき、AREA1に次のレコードがロードされる。したがって上記の例では、AREA3のCindy Coxに対するレコードが処理されている間、Diane Davisに対するレコード68がAREA1にフェッチされている。したがって、J=4に対して表1からの命令が続行され、同じ命令によりレコード68(すなわち、Diane Davis)に対するデータが処理される。したがってこの場合も、命令11がターゲットデータアドレス1214にあるDianeのHOURLY WAGE(時給)のターゲットデータをロードする。命令12は、ターゲットデータアドレス1218にあるDianeのHOURS WORKED(労働時間)のターゲットデータをロードする。その後、積が計算され、ターゲットデータアドレス121Cに記憶される。最後に、図2bには付加的なデータが示されていないが、熟練した当業者には理解されるように、相次ぐ各レコードに対して命令10から14がメモリAREA毎に繰り返される。したがって、一つのメモリAREAのデータを処理したとき、プロセスはルーピング形式で次のメモリエリアに継続する。すなわち、AREA1から、AREA2に、AREA3に、そして再びAREA1に戻る。
【0036】
上記を想定して、本発明者は次に上記のことからのデータロードの予測可能性についての本発明者の理解について説明する。たとえば、命令11の各生起について考えてみる。J=1の場合、命令11がターゲットアドレス1214からのデータを要求した。J=2の場合、命令11がターゲットアドレス2214からのデータを要求した。J=3の場合、命令11がターゲットアドレス5214からのデータを要求した。最後に、J=4の場合、命令11がターゲットアドレス1214からのデータをもう一度要求した。このようにして、更に付加的なレコードの処理が行われると、ターゲットアドレスのパターン、すなわち1214から2214へ、5214へ、1214に戻るパターンがあり、各レコードに対して繰り返される。したがって、レコードの完全性のため、本発明者はループを予測できるということを理解する。これにより、単一の命令(すなわち、命令11)がルーピング形式で、すなわち第一のアドレスから、第二のアドレスに、第三のアドレスに、そして第一のアドレスに戻る形式でデータを要求する。更に、命令12もこのようにしてループ状となるが、アドレス1218から、2218へ、5218へ、1218に戻り、これが繰り返される。実際、種々のデータレコード処理ソフトウェアプログラムに対して、このプロセスが生じ得ることがわかる。したがって、与えられたデータフェッチ命令に対して、本実施例はこのようなルーピング手法を検出する。更に本実施例は、データフェッチ命令が検出された形式でループ動作を続けるということを更に予測する。最後に、(好ましくはLTB56に記憶されている)予測に基づいて、本実施例はこのルーピング形式で使用されるべきデータをプリフェッチすることができる。これにより、キャッシュミスが最少限となり、後で詳しく説明するようにマイクロプロセッサの効率が改善される。
【0037】
図4は上記のLTB56に示された単一のエントリ561の第一の実施例を示す。実施例ではLTB56に8個の部分からなるセット対応構造で2048個のオーダのエントリを含めることができるが、図4には1個の部分の1エントリだけが示されている。本実施例の残りのエントリは同じフォーマットをそなえることが理解されるはずである。一般にLTB56の各エントリは、異なるデータフェッチ命令に対応する情報を記憶するように動作することができる。したがって後でより良く理解されるように、LTB56で2048個までの異なるデータフェッチ命令を一度に識別することができる。各エントリ特有の形式化については後で詳細に説明するが、ここではLTB56全体の効果を簡単に紹介する。一般に、データフェッチ命令が命令フェッチ段40によってフェッチされたとき、LTB56が探索されて、そのフェッチ命令に対応するエントリをLTB56が記憶しているか判定される。LTB56が記憶していない場合には、後で詳細に説明するようにエントリが作成され、更新される。一旦エントリが作成され、妥当な状態に設定されると、上記のようにそれはデータフェッチ命令によりフェッチされるべきデータのアドレスの一つ以上の予測を与える。換言すれば、データフェッチ命令が命令フェッチ段40によりフェッチされ、LTB56がそのデータフェッチ命令に対応する妥当なエントリをそなえていることが見出されたとする。この場合、データフェッチ命令がまだ命令パイプライン38の相対的に上にある間に、LTB56からの予測を使用して、LTBエントリによって予測されたデータアドレスに対するプリフェッチ要求が発せられる。その結果、この要求に応答して、データをマイクロプロセッサチップ上のキャッシュ等にプリフェッチすることができる。その後、データフェッチ命令がその実行段に達したとき、それはキャッシュから直接データをフェッチすることができ、マイクロプロセッサ外部のメモリからそれにアクセスする必要は無い。このようにして、エントリ561についての以下の詳細な説明からより良く理解されるように、マイクロプロセッサの効率が向上する。
【0038】
エントリ561の最初の三つの値はデータフェッチ命令に一般的なものであり、残りの7個の値はデータフェッチ命令に対応するデータをプリフェッチするための予測に向けられている。これらの値の各々については後で説明する。
【0039】
エントリ561の一般的な値から始めると、その最初の値はADDRESS TAG(アドレスタグ)である。ADDRESS TAGはデータフェッチ命令がメモリのどこに記憶されているかというアドレスをリストしたものである。たとえば、エントリ561が表1の第一のロード命令に対応していれば、ADDRESS TAGは11の値に対応する。エントリ561の第二の値には、データフェッチ命令についてのMISCELLANEOUS CONTROL INFORMATION(雑制御情報)が含まれている。ここでこのような情報は、ブランチ命令に対するBTBにリストされた情報と類似のものとすることができる。たとえば、この値の一部として妥当なインジケータを記憶することができる。これにより、エントリ内の情報が妥当であるか、そしてこのような情報を分析する他の回路が依存できるか、後で判定することができる。他の例については、熟練した当業者は確かめることができる。エントリ561の第三の値は、データフェッチ命令のACCESS TYPE(アクセス型)である。アクセス型の種々の例は前に紹介した。たとえば、もっと単刀直入なアクセス型はフェッチ要求である。この場合、データフェッチ命令はあるメモリ位置から情報を検索する(すなわち、ロードする)ために探索を行う。しかし、もう一つの例として、要求はデータ記憶質問であるかも知れない。この場合、データ記憶質問はあるメモリ構造を準備してデータを検索する要求であるが、実際にはデータは検索されない。かわりに、要求はデータフェッチ記憶質問であるかも知れない。ここで、データ記憶質問と同様に、データフェッチ記憶質問でも、あるメモリ構造を準備してデータを検索する。しかし、この場合は更に、準備の一部として一群のデータが検索されてキャッシュに入る。その群の一部はその群への後続の記憶により上書きされるものと予想されている。更に他の型の要求については、熟練した当業者は確かめることができる。
【0040】
エントリ561の予測に関する値について説明しているが、エントリ561の第四の値はNEXT POINTER(ネクストポインタ)である。これは、対応するデータフェッチ命令に対してフェッチされるべきデータの次の予測として三つの異なるポインタとそれに対応する制御のうちどれを使用するかを示すものである。更に詳しく述べると、エントリ561の残りの6個の値は3個のポインタ(POINTER A、POINTER B、およびPOINTER C)として示されている)とそれらの各ポインタに対する制御値(それぞれA CONTROL、B CONTROL、C CONTROLとして示されている)に対応している。各POINTERはターゲットデータアドレスを記憶することができる。したがって、そのアドレスにおけるデータはエントリ561に結合された命令に対してプリフェッチされるべきターゲットデータの予測を表す。CONTROL情報については後で詳しく説明する。この点で、NEXT POINTER値に戻って説明する。下記の例を使用して示すようにその値は、3個のポインタおよびそれに対応するCONTROLの中のどれが、エントリ561に対するADDRESS TAGで識別されたデータフェッチ命令に対する次のターゲットデータアドレスを予測するかを示す。したがって、NEXT POINTERは2ビットの値であることが好ましい。ここで2ビットの状態は、次の表2に示すように3個のPOINTERとそのCONTROLの中の一つを示す。
【表2】
表2でNEXT POINTERの2進値が00であれば、これは与えられたデータフェッチ命令に対するターゲットデータアドレスに対する予測として使用されるべき次のPOINTERがPOINTER Aであるということを示す。これにより、POINTER Aに対応するCONTROL情報によって制御される。同様に、値01および10はそれぞれPOINTER BおよびPOINTER Cに対応する。最後に、11の値は代替実施例で使用するために取って置かれる。
【0041】
3個のPOINTERの各々に対するCONTROL情報は、POINTERが妥当であるか否かを示すため、そして妥当であれば、それの対応するPOINTERに対するフェッチパターン型を符号化するために使用される。フェッチパターン型については、下記のように本実施例はデータフェッチパターンの異なる型を検出することができる。これらのモードの一つはループモードであり、これは上記の表1の擬似コードと関連して説明した例に対応し、後で更に説明する。他のモードにはストライディング(striding)パターンが含まれるが、これについては後で詳しく説明する。いずれにしても、検出されたパターンはCONTROL情報に符号化される。これまでルーピング(looping)だけが紹介されてきたので、表3にはCONTROL情報の種々の表示が示されている。これらはPOINTERが妥当であるか否か、そして妥当である場合には、それに対応するルーピングの型を3ビットの値で示す。
【表3】
表3で、CONTROLの2進値が000に等しいと、これは対応するPOINTER値が妥当でないということを示す。一方、CONTROLの左端のビットが1に等しければ、CONTROLの右の2ビットは、下記の例で示すように、現在のPOINTERが指定するアドレスからフェッチした後、制御がそれにループを形成すべきPOINTERを指定する。最後に、CONTROLの左端のビットが0に等しく、右側の2ビットの中の1ビットが非0であれば、後で詳しく説明するように代替実施例で使用するための更に付加的なモードが表される。
【0042】
エントリ561の特性と上記の種々の側面を更に示すため、表1に関連してエントリ561の中の値の設定について以下説明する。更に詳しく述べると、以下の説明は表1の命令11に当てはまるが、表1の命令12にも同様に当てはまる。前に述べたように表1のプログラムは、マイクロプロセッサ12がアクセスできるメモリ、たとえば外部メモリ14の中に命令として記憶される。したがって、それらの命令を処理するため、各命令がパイプライン38内にフェッチされ、それを通ってその実行段に向かう。したがって、このプロセスの間に、命令11が初めて(すなわち、命令10のJ=1に対して)命令フェッチ段40によりフェッチされる。この点で当業者には知られた手法により、命令がロード、記憶、記憶質問等のようなデータフェッチ命令であるということが検出される。命令がデータフェッチ命令であると検出されたことに応答して、LTB56はそれのエントリの一つが命令11に対応するか判定するように求められる。現在の例では、これが命令11がフェッチされる最初であるので、LTB56は命令11に対応するエントリをそなえていない。したがって、後で説明するようにエントリが作成される。更に、エントリがLTB56で検出された場合には、命令11に制御タグを付けることもできるので、それがパイプライン38を通るとき、LTB56でそれに対して既に設定されたエントリをそなえるデータフェッチ命令であることがわかる。
【0043】
LTB56内でのエントリの作成にはまず、LTB56のどこでエントリを作成するか決めることが含まれる。これについては、LTB56にまだ未使用の行があれば、それらの行の一つをランダムまたは何か置換アルゴリズムにより選択して、命令11に対応するように使用することができる。これに反して、LTB56の各行が他のデータフェッチ命令に対して既に設定されていれば、既存の各エントリに対応する最古使用(LRU:least recently used)がチェックされ、最古使用であるエントリが立ちのかせられ(すなわち、無効にされ)て、その場所に新しいエントリを形成することができる。LRUを使用してテーブル内のエントリを立ちのかすことについては、キャッシュの使用におけるように当業者には知られており、ここに引用されているパターソンとヘネシー箸「コンピュータ構成の定量的アプローチ」というテキストの第5章に示されている(”Computer Architecture A Quantitative Approach”,Second Edition,by Patterson and Hennessy,Morgan Kaufmann Publishers,Inc.)。二つの手法に構わず、本発明の実施例に戻って、現在の例としてエントリ561の中の命令11のためにエントリが形成されたものとする。エントリ561を選択すると、それのアドレスタグの値が、11に対応するように、すなわち現在のデータフェッチ命令がメモリの中に記憶されているアドレスを表すように、設定される。更に後でより良く理解されるように、NEXT POINTERの値が01に、すなわち、POINTER Bが命令11の次の生起の際に使用されるべき次のポインタであるということを示すように設定される。更に、これは命令11の最初の生起であるので、命令11の次の生起がどのようなデータを必要とするかを予測する情報は一般に充分でない。しかしデフォルトとして、現在のデータフェッチ命令(すなわち、命令11)がループモードの一部である、すなわち上記の表1の擬似コードの例によって示されるように命令の生起毎にルーピング形式でデータが集められるものと予測される。したがって、POINTER AのターゲットアドレスからPOINTER Bのターゲットアドレスに向かってループが形成されると考えられるので、POINTER Aに対応するA CONTROL情報が101に設定される。これにより、次のターゲットアドレスがPOINTER Bにより指示されるループモードが予測される。しかし、この予測を超えて、残りのPOINTER BおよびPOINTER Cに対応するCONTROL情報値が非妥当(すなわち、表3に示す000)に設定される。エントリ561が設定された後、結局、命令11はパイプライン38を通り、それが必要とするデータに対する実際のアドレスを確かめることができる。しかし、この点で、そのアドレスがPOINTER Aの値の中に記憶される。図3に関連して示した例で説明したように、命令11の最初の生起はアドレス1214からのデータを必要とする。したがって、1214のアドレスがPOINTER Aの中に記憶される。
【0044】
表1からの上記の説明を続ける。J=2である次の繰り返しのため、命令14は制御を命令10に戻す。したがって、2回目に、命令11が命令フェッチ段40によってフェッチされる。再び、命令11がデータフェッチ命令であることが検出されるので、LTB56を使用して、それのエントリの一つが命令11であるか判定する。現在の例では、命令11の前の生起のため、そして他のどの介在事象もエントリに影響を及ぼさなかったと仮定しているので、エントリ561のADDRESS TAGが命令11に対応するものとして検出される。これに応答して、エントリ561のNEXT POINTERを使用して、予測されたターゲットデータアドレスのどれが命令11に対応するものか判定する。上記のようにNEXT POINTERはPOINTER Bを示すので、可能性のあるターゲットデータアドレスとしてPOINTER Bの値が調べられる。更に上記のようにPOINTER Bに対応するB CONTROLは現在、非妥当に設定されている。したがって、この点で、命令11の第二の生起に対するターゲットデータアドレスの予測は無い。これに応答して、まずNEXT POINTERの値が10に設定される。すなわち、POINTER Cが、命令11の次の生起時に使用するべき次のポインタであることが示される。更に、再びデフォルトとして、現在のデータフェッチ命令(すなわち、命令11)がループモードの一部となることが予測される。したがって、POINTER BのターゲットデータアドレスからPOINTER Cのターゲットデータアドレスに向かってループが形成されると考えられるので、B CONTROLが110に設定される。これにより、次のターゲットアドレスがPOINTER Cにより指示されるループモードが予測される。その後、再びプロセスは命令11がパイプライン38を通過するのを、それの実際のターゲットデータアドレスが判定されるまで待つ。図3に関連して示した例では、上記のように命令11の第二の生起はアドレス2214からのデータを必要とするので、2214のアドレスがPOINTER Bに記憶される。これまでの例のように二つのターゲットデータアドレスが二つのPOINTER(たとえば、POINTER AおよびPOINTERB)に記憶された後、(または代わりとして、第二のアドレスが記憶されているのと同時に、またはそれが記憶される前に)、後で明らかになる理由により付加的な試験が行われる。詳しく述べると、二つのターゲットデータアドレスが一致するか判定される。しかし、現在の例では、このような一致は無い。したがって、後で詳しく説明するようにループモードの仮定のもとでプロセスが続行される。
【0045】
表1からの上記の例について更に説明を続ける。J=3である次の繰り返しのため、命令14は制御を命令10に戻す。したがって、3回目に、命令11が命令フェッチ段40によってフェッチされる。再び、命令11がデータフェッチ命令であることが検出され、LTB56を使用して、命令11に対応するエントリ561にアクセスする。これに応答して、エントリ561のNEXT POINTER値を使用して、予測されたターゲットデータアドレスのどれが命令11に対応するものか判定する。NEXT POINTERはPOINTER Cを示すので、可能性のあるターゲットデータアドレスとしてPOINTER Cの値が調べられる。しかし、上記のようにPOINTER Cに対応するC CONTROLは現在、非妥当に設定されている。したがって、この点で、命令11の第三の生起に対するターゲットデータアドレスの妥当な予測は無い。これに応答して、まずNEXT POINTERの値が00に設定される。すなわち、POINTER Aが、命令11の次の生起時に使用するべき次のポインタであることが示される。もう一度、デフォルトとして、現在のデータフェッチ命令11がループモードの一部となることが予測される。これにより、POINTER CのターゲットデータアドレスからPOINTER Cのターゲットデータアドレスに向かってルーピングされるので、POINTER Cに対応するC CONTROLが100に設定される。これにより、次のターゲットアドレスがPOINTER Aにより指示されるループモードが予測される。その後、再びプロセスは命令11がパイプライン38を通過するのを、それの実際のターゲットデータアドレスが判定されるまで待つ。図3に関連して示した例では、上記のように命令11の第三の生起はアドレス5214からのデータを必要とするので、5214のアドレスがPOINTER Cに記憶される。これまでの例のように三つのターゲットデータアドレスが三つのすべてのPOINTERに記憶された後、(または代わりとして、第三のアドレスが記憶されているのと同時に、またはそれが記憶される前に)、後で明らかになる理由により付加的な試験が行われる。詳しく述べると、最も最近のターゲットデータアドレス(たとえば、POINTER Cの中にあるターゲットデータアドレス)が最も最古のターゲットデータアドレス(たとえば、POINTER Aの中にあるターゲットデータアドレス)と一致するか判定される。しかし、現在の例では、このような一致は無い。したがって、後で詳しく説明するようにループモードの仮定のもとで、現在説明しているプロセスが続行される。しかし注意すべきことは、後で詳しく説明する代替ブロセスでは、最も最近のターゲットデータアドレス(たとえば、POINTER Cの中にあるターゲットデータアドレス)がPOINTER Bの中にあるターゲットデータアドレスとも一致するかという判定も行われるということである。
【0046】
説明の、この点現在で上記の表1の例をまとめると、命令11が3回処理された例でエントリ561が図5にリストされた値となる。したがって要約すると、まず使用すべきNEXT POINTERはPOINTER Aである。更に、各POINTERに対してループモードが予測される。換言すれば、POINTER Aが第一のターゲットデータアドレス(すなわち、1214)を表し、それに対応するA CONTROLが予測するところによれば、POINTER Aにより指示されるデータが命令11により使用された後、それの次の生起がPOINTER Bのターゲットデータアドレスに対してループとなる。同様に、POINTER Bが第二のターゲットデータアドレス(すなわち、2214)を表し、それに対応するB CONTROLが予測するところによれば、POINTER Bにより指示されるデータが命令11により使用された後、それの次の生起がPOINTER Cのターゲットデータアドレスに対してループとなる。POINTER Cが第三のターゲットデータアドレス(すなわち、5214)を表し、それに対応するC CONTROLが予測するところによれば、POINTER Cにより指示されるデータが命令11により使用された後、それの次の生起がPOINTER Aのターゲットデータアドレスに戻るループを完成する。
【0047】
上記のことから熟練した当業者には明らかなように、命令11の後続の生起毎に、LTBエントリ561はその命令に対するデータフェッチのパターンを正確に予測する。たとえば、データフェッチ命令の第四の生起に対する例を続けると、命令フェッチ段40により命令11がフェッチされ、エントリ561が検出され、使用される。POINTER Aが現在制御しつつあるということをNEXT POINTER値が示し、A CONTROLがループモードを示し、そして命令11のこの第四の生起ではターゲットデータアドレス1214のターゲットデータが必要になるということをPOINTER Aの値が予測する。したがってこの点で、LTB56またはそれと結合された回路によりプリフェッチ要求が発せられ、ターゲットデータアドレス1214のデータのプリフェッチが要求される。したがって図1bおよび図2に戻って、この第四の生起によりプリフェッチ要求が発せられ、Diane Davisに対するHOURLY WAGE(時給)が検索される。このように、データフェッチ命令11がパイプライン38を通るとき、このデータをオンチップキャッシュにプリフェッチすることができる。その後、データフェッチ命令11が実行されるとき、それは代替案のように外部メモリから検索する必要無しにオンチップキャッシュからデータをロードすることができる。この代替案では、はるかに長い時間を要する。
【0048】
データフェッチ命令11の第四の生起と、その命令の後続の各生起を更に使用して、エントリ561が正確であることを保証する。たとえば、第四の生起の間に、データフェッチ命令の実行の前または実行の間に、それの実際のターゲットデータアドレスが判定される。現在の例で、図2bのレコードでは、実際のターゲットデータアドレスは予測されたアドレスと同じ、すなわち、1214のアドレスとなる。その結果、エントリ561はその予測が正しいままとなり、修正する必要は無い。実際、熟練した当業者には理解されるように、データフェッチ命令11の相次ぐ生起毎に、図5の値により示される予測は正確である。これにより、データフェッチ命令11の各生起に対して、メモリアドレス1214、2214、および5214からのデータの連続したプリフェッチを行うことができる。したがって、これらの各場合に、エントリ561の正確さが確かめられ、その中の値は乱されない。
【0049】
三つのアドレスを含むルーピングパターンに対してエントリ561を成功裏に設定する例を示した。命令11の第二の繰り返し(すなわち、J=2)に関連して説明したように、二つのターゲットデータアドレスが一致するかという比較も行われ、上記の例ではこのような一致は無かった。しかし注意すべきことは、本実施例は、ある命令に対するターゲットデータアドレスとして同じデータアドレスが繰り返しアクセスされるデータパターンを検出することもでき、上記の比較はこのような検出を行うための一つの手法である。更に詳しく述べると、代わりの例として、命令11が上記のようにルーピングではなくて、アドレス1214に繰り返しアクセスしたものと仮定する。このようにして、命令11の第二の繰り返し後に、上記の手法を使用してPOINTER AとPOINTER Bの両方が1214に設定される。しかし前に説明したように、POINTER Bが設定された後にPOINTER AとPOINTFR Bの比較も行われる。しかし、現在の例では二つは一致するので、代替予測手法はデータフェッチ命令が同じターゲットデータアドレスに繰り返しアクセスする命令であるということを予測する。これに応答して、NEXT POINTERが01に維持され、これによりPOINTER Bがもう一度NEXT POINTERであることが示される。その結果、命令11の相次ぐ生起毎に、POINTER Bが予測されたターゲットデータアドレスを記憶しているということをNEXT POINTERは連続的に示す。これにより、同じアドレスのループモードが示される。したがって、その点以降、そして予測の誤りが検出されるまで、命令11に対するターゲットデータアドレスとして同じアドレス(たとえば、1214)が使用される。注意すべきことは、POINTER Aがこの同じターゲットデータアドレスを記憶するので、代わりにNEXT POINTERはPOINTER Aを示すものとして維持することにより、アドレスの相次ぐ各生起がターゲットデータアドレスとしてアドレス1214を予測するようにもできる。実際、更にPOINTER AとPOINTER Bの両方が同じアドレスを指示するので、POINTER AとPOINTER Bとの間にループを形成するように制御を設定できる。これにより、実際上、両者が指示する同じアドレス(すなわち、1214)が命令11の相次ぐ生起に対するターゲットデータアドレスとなる。
【0050】
上記の同じアドレスパターンを検出する場合の他に、命令11の3回目の繰り返し(すなわち、J=3)に関連して説明したように、POINTER Cの設定に関連して、それが最古のターゲットデータアドレス(たとえば、、POINTER Aの中のターゲットデータアドレス)と一致するか判定される。上記の例では一致が無かったので、プロセスはループモードの仮定のもとで続行された。しかし、ここで注意すべきことは、本実施例はループに上記のような三つではなくて二つのアドレスだけが含まれるルーピングデータパターンを検出することもできるということである。更に詳しく述べると、代わりの例として、命令11が一つの生起でアドレス1214にアクセスし、次の生起でアドレス2214にアクセスし、次の生起でアドレス1214にループで戻り、以下同様にルーピングパターンを繰り返すものと仮定する。したがって、命令11の3回目の繰り返しの後、上記の手法を使用してPOINTER AとPOINTER Bは1214と2214にそれぞれ設定されるが、POINTER Cも1214に設定される。また上記したように、POINTER Cの設定後に、POINTERAとPOINTER Cとの比較、およびPOINTER BとPOINTER Cとの比較もある(POINTER AとPOINTER Cとが一致すれば、POINTER BとPOINTER Cとを比較する必要は無い。現在の筋書きでは、AがCに等しければ、BはCに等しくないからである(AはBに等しくないと既に判定されたため))。しかし現在の例では、POINTER AとPOINTER Cとが一致するので、代わりの予測手法がデータフェッチ命令はPOINTER B内のアドレスからループでPOINTER A内のアドレスに戻る命令であると予測する(すなわち、POINTER CとPOINTER Aとが同じターゲットデータアドレスを表すから)。これに応答して、NEXT POINTERが01に設定される。これにより、POINTER Bがもう一度NEXT POINTERであるということが示される。更に、A CONTROLが101に設定されることにより次のPOINTERがPOINTER Bであることが示されるとともに、B CONTROLが100に設定されることにより次のPOINTERがPOINTER Aであることが示される。その後、データフェッチ命令の生起毎に、NEXT POINTERがPOINTER AとPOINTER Bとの間に切り換えることができるので、それらの二つのPOINTERによりそれぞれ示される二つのアドレスの間でループが継続される。
【0051】
上記の説明は、データフェッチ命令11の4回目の生起とその命令の後続の各生起がエントリ561の正確な予測を生じる例を示す。しかし他の場合には、問題となっているデータフェッチ命令が三つのターゲットデータアドレスの間にループとなっているように思われるが、データフェッチ命令の付加的な生起により、予測されたループパターンからはずれた実際のターゲットデータアドレスが生じる。この場合、エントリ561はある仕方で修正される。このような修正の一例を後で、ルーピングの前にストライディングを行う実施例に関連して説明する。しかし更に他の修正は、熟練した当業者が確かめることができ、図4の実施例で与えられる種々の値のフォーマットに構成することもできる。
【0052】
これまで説明してきたようにLTB56の実施例によるループモードの構成が与えられた場合、後で説明するようにLTB56の各エントリのフォーマットを拡張することにより、付加的な実施例を実現することができる。この実施例は、上記の場合のようにルーピングを予測するだけでなく、ターゲットデータアドレス後であるが、次のターゲットデータアドレスに対してループを形成する前に、ストライド(stride)を予測する。付加的な実施例に対する紹介として、図6aは図2aのレコード60をもう一度示しているが、そのレコードに付加的な四つのフィールド60fから60iが付加されている。図6aに示すように、これらのフィールドはそれぞれ、今月の第一週から第四週に対するWEEKLYHOURS WORKED(週労働時間)数を表す。したがって、これらのフィールドは加算されると、フィールド62dに示されたHOURS WORKED FOR PAST MONTH(先月の労働時間)を与える。もちろん本例では、与えられた月が4週しかないものと仮定している。この仮定は、本実施例の以後の説明の基礎を与えるとともに、例を簡単にするために行われたものである。いずれにしても、4週を仮定し、そして前には説明しなかったが、フィールド60fから60iを加算し、その結果をフィールド60dに記憶するプログラムによって、フィールド60dの値を書き込むことができる。
【0053】
図6aの概念を更に説明するために、図6bは図2bのレコード62、64、66、および68を示すが、それらのレコードに図6aにより導入された新しいフィールドが付加されている。たとえば、Abe Adamsに対応するレコード62で、フィールド60fから60iはAbeが先月の第一週に40時間働き、先月の第二週に50時間働き、先月の第三週に50時間働き、先月の第四週に45時間働いたということを表す。熟練した当業者には理解されるように、このデータはレコード64、66、および68の各々に対しても与えられる。その中の各フィールドのデータについて再び説明することはしない。
【0054】
図6aおよび6bがあたえられたとき、下の表は図6bのレコードを処理するための簡単な擬似コードプログラムを示す。このプログラムは、各WEEKLYHOURS WORKED(週労働時間)フィールドの和を判定することによりHOURS WORKED FOR THE PAST MONTH(先月労働時間)の各レコードに対する値を与える。
【表4】
【0055】
付加的なLTB56の実施例の説明を進める前に、再び注意すべきことは、表4が擬似コードを表し、したがってコードによって示される機能を果たすためマイクロプロセッサが使用する実際のコードは形式と複雑さの一方または両方が異なることがあり得る。いずれにしても、もう一度、表4のプログラムコードの種々の行がメモリのどこかに記憶され、プログラム行は図6bのレコードファイルの中の各レコードに対して種々の動作を行う。プログラムコードのメモリ記憶装置に対して、上記の表1と同様に、表4はプログラムの各行に対するメモリアドレスをリストしたものである。表4の例に対して、プログラムコードを記憶するメモリアドレスはアドレス20から始まって、相次ぐ命令毎に増大する。この点以降、このような各命令は表4のそれのアドレスによって表される。コードによって行われる動作については、表4の例の命令22から26は、従業員のレコードにリストされた4週の各々に対してWEEKLY HOURS WORKED(週労働時間)を従業員毎に加算することにより、従業員毎のHOURS WORKED FOR THE PAST MONTH(先月の労働時間)を計算する。更に詳しく述べると、命令21がレジスタREG2をクリアした(すなわち、それを0にセットした)後、4回の繰り返しに対して命令23はWEEKLYHOURS WORKED(週労働時間)の四つの値の相次ぐ一つをレジスタREG1にロードする。それらの各々に対して、命令23はロードし、命令24はレジスタREG1とREG2の内容を加算し、結果をレジスタREG2に記憶する。したがって熟練した当業者には理解されるように命令24は、与えられた従業員レコードに対して命令23によりロードされた値の各々の和をレジスタREG2に累積する。四つの週フィールドのすべてに対して加算が完了すると、命令26はHOURS WORKED FOR THE PAST MONTH(先月の労働時間)と名付けられたフィールドに対応するロケーションのレコードに総計を戻して記憶する。もう一度、命令27から29によって更に示されるように、種々の付加的な動作が行われ得る。詳しく述べると、すべての繰り返しの後に命令24がHOURS WORKED FOR THE PAST MONTH(先月の労働時間)の合計を与えると、命令27がその従業員のHOURLY WAGE(時給)をロードする。命令28がこの値にその従業員のHOURS WORKED FOR THE PAST MONTH(先月の労働時間)を乗算する。その結果、そのときレジスタREG2にある積がその従業員に対するPAY DUE(支払い賃金)を表す。したがって命令29により、その値がレコードに書き戻される。最後に、更に付加的な動作が行われ得るが、以下に示す原理を説明するためには本例は充分なはずである。
【0056】
本発明者は次に、ストライディングパターンの後にルーピングパターンが続く動作について説明する。これについては、図3のメモリAREAフォーマットに関連して述べた。メモリAREAフォーマットをより良く示すために、図7は図3のメモリAREAをもう一度示すが、それらのAREAはWEEKLY HOURS WORKED(週労働時間)フィールドの各々に対してターゲットデータアドレスを示すように拡張される。たとえば、AREA1はAbe Adamsに対するWEEKLY HOURS WORKED(週労働時間)をアドレス1221、1224、1227、および122Aに記憶する。同様に、AREA2はBarry Barnesに対するWEEKLY HOURS WORKED(週労働時間)をアドレス2221、2224、2227、および222Aに記憶する。AREA3はCindy Coxに対するWEEKLY HOURSWORKED(週労働時間)をアドレス5221、5224、5227、および522Aに記憶する。
【0057】
次に、ストライディングの後にルーピングが続くパターンについて説明する。図6bのレコードの処理段階により、表4の擬似コードについて説明する。J=1の擬似コードで、レコード62(すなわち、Abe Adams)が処理される。命令21により、合計を記憶しているレジスタREG2がクリアされる。命令22により、レコードに対して四つのWEEKLY HOURS WORKED(週労働時間)フィールドの各々を処理するループが開始される。次に命令23により、1221のターゲットデータアドレスにある、AbeのWEEKLYHOURS WORKED[#1]のターゲットデータ(すなわち、40)がロードされる。次に命令24により、ロードされた値がレジスタREG2の中の値と加算され、その値がレジスタREG2に記憶される。したがって、この点では、レジスタREG2が0にクリアされたので、レジスタREG2には合計40が記憶される。次に、命令25がプログラムを命令23に戻す(すなわち、K=2)。したがって、これは命令23の第二の生起を表す。命令23のこの第二の生起により、1224のターゲットデータアドレスにある、AbeのWEEKLY HOURS WORKED[#2]のターゲットデータ(すなわち、50)がロードされる。次に命令24により、ロードされた値(すなわち、50)がレジスタREG2の中の値(すなわち、40)と加算され、その値(すなわち、90)がレジスタREG2に記憶される。命令23から24の上記の繰り返しは、K=3およびK=4に対して再び行われる。このようにして、命令23の第三の生起により、1227のターゲットデータアドレスにある、AbeのWEEKLY HOURS WORKED[#3]のターゲットデータ(すなわち、50)がロードされる。次に命令24により、ロードされた値(すなわち、50)がレジスタREG2の中の値(すなわち、90)と加算され、その値(すなわち、140)がレジスタREG2に記憶される。更に、命令23の第四の生起により、122Aのターゲットデータアドレスにある、AbeのWEEKLY HOURS WORKED[#4]のターゲットデータ(すなわち、45)がロードされる。次に命令24により、ロードされた値(すなわち、45)がレジスタREG2の中の値(すなわち、140)と加算され、その値(すなわち、185)がレジスタREG2に記憶される。この点で、プログラムは命令26まで継続する。命令26により、レジスタREG2の中の合計(すなわち、185)がAbe Adamsに対するHOURS WORKED FOR THE PAST MONTH(先月の労働時間)に対応するメモリアドレスに記憶される。したがって、185という値がメモリアドレス1218に記憶される。最後に、前記のように命令27から29で、Abe Adamsに対するPAY DUE(支払い賃金)も計算される。
【0058】
上記で単一の繰り返しJ=1は、ストライディングとして知られるデータロードの予測可能性の一つの型を示す。ストライディングはそれだけで、またぐようにして行われるデータフェッチのその後の認識と予測として知られている。しかし、直前の段落に示された例の単一の繰り返しのストライディングについての以下の説明の後に、更に本実施例のもとでストライディングをループ検出とどのように組み合わせることができるかも示される。この組み合わせにより、従来技術に比べて更に付加的な利点が得られる。一般にストライディングとは、一旦初期フェッチ(とそのアドレス)が設定されれば、後続の次のフェッチに対しては「ストライド」と呼ばれる一定距離がとられるように、相次いでデータをフェッチするデータ処理パターンを指す。たとえば、初期フェッチアドレスが10進数1000で、ストライドが10進数10であれば、フェッチに対するアドレス系列は1000、1010、1020、1030等となる。当業者には知られているようにストライディングについて多くの情報を得るためには、次の二つの文書を参照できる。両者ともここに引用されている。(1)アイイーイーイー(IEEE)から文書番号0−8186−3175−9/92,著作権1992として発行されているインテル社のジョン・ダブリュー・シー・フ、およびイリノイ大学のジャナク・エッチ・パテルとボブ・エル・ジャンセン著「スカラプロセッサにおけるストライド指向のプリフェッチ」(”Stride Directed Prefetching in Scalar Processors”,byJohn W.C.Fu of Intel Corp,and Bob L.Janssens of the Center for Reliableand High−Performance Computing at the University of Illinois)、および(2)1995年1月13日付けのミシガン大学のマイケル・ゴールダとトレバー・エヌ・マッジ著「キャッシュ待ち時間のためのハードウェアサポート」(”Hardware Support for Hiding Cache Latency”,by Michael Golder and Trevor N.Mudge of the Advanced Computer Architecture Lab at the University Of Michigan)。
【0059】
前に紹介したように、上記のJ=1の単一の繰り返しはストライディングの例を示す。たとえば、J=1の場合、命令23に対するKの各生起について考えてみる。第一に、J=1でK=1の場合、命令23はターゲットアドレス1221からのデータを要求した。第二に、J=1でK=2の場合、命令2 ターゲットアドレス1224からのデータを要求した。第三に、J=1でK=3の場合、命令23はターゲットアドレス1227からのデータを要求した。最後に、J=1でK=4の場合、命令23はターゲットアドレス122Aからのデータを要求した。したがって、命令23の四つの生起にわたって、そのターゲットデータアドレスは1221、1224、1227、および122Aであった。したがって、ストライディングの状況で、初期フェッチはアドレス1224に対するものであった。次の三つのアクセスの各々に対して、ストライドは3であった。
【0060】
前の段落はストライディングを示すが、表4の例は更にストライディングと組合わされたルーピングも示す。この組合わせを本実施例により検出し、後で詳しく説明するようにLTB56に符号化される。更に詳しく述べると、直前に説明したようにJ=1に対してKが1から4までくりかえされた後、Jが2に増大させられる。ストライディングだけが予測される従来技術では、命令23の次の生起に対して、最後にアクセスされたアドレス(すなわち、122A)に3のストライドが加算される。これにより、命令23のこの次の生起がアドレス122Dのデータを使用するという予測が得られる。しかし、このような予測は不正確である。詳しく述べると、J=2のとき、命令23の第一の生起はレコード64に対するWEEKLY HOURS WORKED(週労働時間)[#1]を要求し、その値が図7のメモリAREA2のアドレス2221に記憶される。しかし、後で詳しく説明するように本実施例では、ストライドからこの変化を正確に予測することができる。これにより、従来技術に比べて更に改善される。
【0061】
表4の命令23の例および図7のメモリAREA内のレコードについての説明を続けることにより、本発明者が認め、本実施例に入れた、ストライドの後、ルーピングを行うというパターンの繰り返しが熟練した当業者に理解されよう。上記の例の説明を続ける。この例のこの点現在で、命令23によりアクセスされるターゲットデータアドレスは1221、1224、1227、および122Aである。ここで、命令23の相次ぐ生起に対するターゲットデータアドレス系列に注意すべきである。したがって、アドレス2221はJ=2でK=1のときアクセスされる。次に、J=2の間のKの残りの3回の繰り返しについて考えてみる。J=2でK=2の場合、命令23はターゲットアドレス2224からのデータを要求する。J=2でK=3の場合、命令23はターゲットアドレス2227からのデータを要求する。J=2でK=4の場合、命令23はターゲットアドレス222Aからのデータを要求する。したがって、J=2であるときの命令23の4回の生起に対して、そのターゲットデータアドレスは2221、2224、2227、および222Aであった。命令23の相次ぐ生起の各々の詳細を説明しなくても熟練した当業者には理解されるように、J=3の場合、命令23の4回の生起はターゲットデータアドレス5221、5224、5227、および522Aからのデータを要求する。しかしこの点で、前に説明したように、AREA3が処理された後、プロセスはループでAREA1に戻る。したがってJ=4の場合、命令23の第一の生起では、ループで戻ってターゲットアドレス1221からのデータを要求する。その後、命令23の次の三つの生起はターゲットアドレス1224、1227、および122Aからのデータを要求する。
【0062】
上記で、ストライディングの後にルーピングの組み合わせを要約する。J=1の場合、命令23は4回実行し、それらの回数の間、3の距離でストライドする(たとえば、アドレス1221、1224、1227、および122A)。しかし、次にJは増大させられるので、命令23の次の実行は3の距離ストライドしない。その代わりに、初期の実施例の仕方でのループの始まりは、命令23がアドレス2221からのデータを要求するときに形成される。その後、命令23は次の三つのアクセスに対して3の距離を再びストライドする。この点で、命令23が次にアドレス5221からのデータを要求したとき、もう一度ループが続く。距離3のストライドを3回行った後、ループが始まる同じアドレス、すなわちアドレス1221からのデータを命令23が次に要求したとき、ループは完了する。したがって、命令23のすべての生起をまとめると、命令23は1221から1224へ、1227へ、122Aへストライドした後、ループで2221に至り、そこから2224へ、2227へ、222Aへストライドした後、ループで5221に至り、そこから5224へ、5227へ、522Aへストライドした後、ループで1221に戻り、命令23のすべての生起に対してこのパターンを連続的に繰り返す。
【0063】
上記で、図8は上記のLTB56で説明された、単一のエントリ561の付加的な実施例を示す。ここでエントリ561には、上記の図4と同じ値が含まれているが、5個の付加的な値も含まれている。それらの値により、本実施例では、単独で、または上記のようなルーピングとの組み合わせで、種々のストライドパターンを予測することができる。エントリ561の最初の10個の値については、前の説明を参照できる。したがって、図8に示された新しく付加された値について集中的に説明する。簡単に述べると、図8に新しく示された値には、STRIDE LENGTH(ストライド長さ)、STRIDE THRESHOLD(ストライド閾値)、STRIDE COUNTER(ストライドカウンタ)、TEMPORARY POINTER SAVER(一時ポインタセーバ)、およびSTRIDE CONTROL(ストライド制御)が含まれる。図8には後で詳しく説明するように3個のPOINTERに共同使用される一組のストライドに関連した値が示されているが、代替実施例では各ポインタとそれに結合されたCONTROLはそれ自身のストライドに関連した値をそなえることができる。したがってこの代替実施例では、より複雑なデータパターンを予測することができる。これにより、単一のデータフェッチ命令の場合、一つのストライド系列に対する長さや閾値は次のストライド系列に対する長さや閾値と異なる。いずれにしても、これらのストライドに関連した値の各々については以下に説明する。
【0064】
図8に示されたストライドに関連した値の情報と動作を示すために、それらの値の各々に対して、まず前置きの説明を行う。上記の表4の命令23の例により、サンプル情報を示す。説明を進める前に、ターゲットデータアドレス1221、1224、1227、および122Aをストライドすることにより命令23がどのように進むかを前に示したことを想起されたい。次に、図8のストライドに関連した値については、STRIVE LENGTH(ストライド長さ)値は相次ぐストライドターゲットデータアドレス相互の間の相違の大きさを表す。したがって現在の例では、STRIDE LENGTHは3に等しい。すなわち、アドレス1221と1224との間のストライドは3、アドレス1224と1227との間のストライドは3などである。STRIDE THRESHOLD(ストライド閾値)は与えられたストライド系列のターゲットアドレスの数である。したがって現在の例では、STRIDE THRESHOLDは4に等しい(すなわち、1221、1224、1227、および122Aの系列には4個のアドレスがある)。次にSTRIDE COUNTER(ストライドカウンタ)は、与えられたストライド系列の中の系列毎に進むカウンタである。進むことにより、相次ぐ各ストライドの跡をたどるようにCOUNTERが増減することを示そうとしている。実施例でこの機能を達成するため、そして後で詳しく説明するように、STRIDE COUNTERには最初、STRIDE THRESHOLDがロードされた後、各ストライドが行われたとき0の値に向かって減らされる。TEMPORARY POINTER SAVER(一時ポインタセーバ)はストライドアドレスの系列の中の初期アドレスを記憶するために使用される。したがって本例では、1221のアドレスはTEMPORARY POINTER SAVERに記憶される。後で詳しく説明するように、ストライド系列の終わりに、このアドレスは最初にそれを与えたPOINTERの一つ(すなわち、A、B、またはC)に戻される。TEMPORARY POINTER SAVERを設ける代わりに、代替実施例ではストライド系列の終わりに初期アドレスを再計算してもよい。この場合、再計算された初期アドレスはそれを与えたPOINTERに戻される。最後に、STRIDE CONTROL(ストライド制御)は、後で更に説明するように単独またはルーピングと組合わされてストライド手法の動作を制御するために熟練した当業者が構成することができる付加的な情報を供給するだけである。
【0065】
図8の種々のストライドに関連した値を紹介したが、前に説明したように、POINTER A、POINTER B、およびPOINTER Cは各々対応するCONTROL値をそなえ、またルーピングに関連するときのそれらの値の内容はルーピングデータパターンに関する限り表3に関連して前に紹介した。しかし、これから紹介し、以下更に詳しく説明するように、図8の実施例には更に種々のストライドに関連したパターンも含まれている。この機能を更に果たすために、各POINTERに対応するCONTROL情報は更にストライドに関連した動作を示し、またこれに関連して下の表5は表3の値を繰り返しているが、種々のストライド動作を入れるように表3の予備値のいくつかについて定義もしている。
【表5】
表5でCONTROL情報の2進値が001、010、または011に等しい場合、これはCONTROLに対応するPOINTERがストライドの作用に関連していることを示している。相違点はストライドの大きさである。特定のストライドの相違点を以下に説明する。
【0066】
表5に示すように、CONTROL情報の2進値が001に等しい場合、これはストライドモードを示す。この場合、LTB56のエントリのSTRIDE LENGTH値にストライドの長さが記憶されている。この側面を示すため、表4のコード例、そして更に詳しくは、LTB56のエントリ561が命令23のストライド動作にどのように関連するかについて以下に説明する。この目的のため、図9はストライド動作の間、命令23に対してデータプリフェッチ予測を可能にするように設定されたときのエントリ561を示している。命令23を設定するためのステップについては後で詳しく説明する。したがって、図9でエントリ561が事前に設定され、表4の擬似コードがフェッチされ、前記のパイプライン38により処理されるべきものであると仮定する。このようにして、命令フェッチ段40は命令23をフェッチし、前記の場合のように、それがデータフェッチ命令であることを検出する。このようにしてLTB56を使用して、それが命令23に対応するエントリを記憶しているか判定する。詳しく述べると、エントリ561の中のアドレスタグフィールドは命令23のアドレスに一致するか判定され、したがってLTB56はこのようなエントリをそなえているか判定される。次に、エントリ561のNEXT POINTER値が使用され、それはPOINTER Aとそれに対応するA CONTROLは命令23に対するターゲットデータアドレスへの現在のプリフェッチ要求があれば、その現在のプリフェッチ要求を制御するはずである。
【0067】
上記に応答して、A POINTER CONTROL INFORMATIONが評価され、それは現在のアクセスがストライドの一部であることを示す(すなわち、001の値)。ここで、ストライドの長さはSTRIDE LENGTH値に記憶されている。この点から先のステップを更に説明するために、図10は全体が70で表された方法を示す。方法70はストライド動作の現在の型に応答する種々の好ましいステップを表す。図示するように、方法70は一般にステップ72で始まる。ステップ72は単に、001に等しいCONTROL情報値に応答して(またはストライドモードの動作を示す他の制御値のいずれかに応答して)方法が始まったことを示すだけである。次に、方法70はステップ74に続く。ステップ74はSTRIDE COUNTERが0に等しいか調べる。方法70の説明が完了すればより良く理解されるように、これが1221、1224、1227、および122Aのストライド系列に対する命令23の第一の生起であるので、STRIDE COUNTERは0にリセットされている。したがって、ステップ74は真であるはずであり、方法70はステップ76に進む。何らかの理由でストライド系列の命令の第一の生起でSTRIDE COUNTERの値が非零であれば、方法70はステップ77に進む。ステップ77は、STRIDE COUNTERの誤った設定に応答するためのエラーハンドラの一例である。
【0068】
ステップ77のエラーハンドリングは二つの動作を行う。第一に、現在のPOINTERに対するCONTROL情報は非妥当に設定される。したがって、現在の例では、A CONTROLが000に設定される。第二に、NEXT POINTER値が後続の次のポインタを指すように進められる。したがって、現在の例では、NEXT POINTERの値が01に設定される。最後に、このエラーハンドリングが完了すると、フローはステップ77からステップ90に進む。後でも述べるようにステップ90は、単にエントリ561の現在の処理に対する方法70の終わりを表すに過ぎない。
【0069】
命令23の現在の例におけるように、ストライディングを開始すべきデータフェッチ命令があるLTB56の妥当なエントリについて当てはまるように、STRIDE COUNTERが0に等しいことがわかった後に、ステップ76に達する。次に、ステップ76は二つのセットアップ動作を行う。第一に、ステップ76は現在のPOINTERの値をTEMPORARY POINTER SAVER(一時ポインタセーバ)にコピーする。したがって現在の例では、POINTER Aに記憶された1221という値がTEMPORARY POINTER SAVERにコピーされる。後でより明らかになる理由により、このTEMPORARY POINTER SAVERから後で検索されて、POINTER Aに入る。第二に、ステップ76はSTRIDE COUNTERにSTRIDE THRESHOLDをロードする。したがって、相次ぐストライドの生起毎に前に述べたようにカウントが減っていく。これについても、後で詳しく説明する。この二つのセットアップ動作の後、方法70はステップ78に続く。
【0070】
ステップ78は、対応するPOINTERによって示されるアドレスで開始するようにプリフェッチ要求を発する。したがって、現在の例では、POINTER Aが問題になっているので、ステップ78は1221のターゲットデータアドレスにプリフェッチ要求を発する。したがって、このプリフェッチ要求が実際のプリフェッチ動作を誘発した場合、前に説明したようにアドレス1221のデータを検索してオンチップキャッシュに入れることができる。したがって、命令23がパイプライン38を通るとき適当な時点に達すると、そのデータはそのキャッシュからフェッチして容易に利用することができる。したがって再び、プリフェッチの利点を実現することができる。ここでは、アドレスのストライド系列の最初の場合にそれが示されている。次に、方法70はステップ80に進む。
【0071】
ステップ80では、STRIDE COUNTERの値を減少させる。現在の例では、図9で説明したように、STRIDE COUNTERはSTRIDETHRESHOLDからの4という値を記憶している。したがってステップ80で、この値を4から3に減らす。後でより良く理解されるように、直前のステップ78によるプリフェッチ要求の相次ぐ発行毎に、ステップ80は再びカウントを減少させる。したがって、最後にカウントは0に達し、与えられたストライドアドレスの系列に対するすべてのストライドの場合が生じたということを示す。次に、方法70はステップ82に進む。
【0072】
ステップ82は再び、STRIDE COUNTERが0に達したか判定する。直前の段落で説明したように、与えられたストライドアドレスの系列に対するすべてのストライドの場合が生じると、カウントが0に達する。STRIDE COUNTERが0に達していない場合には、方法70はステップ84に進む。これに反して、STRIDE COUNTERが0に達した場合には、方法70はステップ86に進む。現在の例では、STRIDE COUNTERは3に等しいので、方法70はステップ84に進む。
【0073】
ステップ84は現在ポインタの値をSTRIDE LENGTHの値だけ増大させる。現在の例では、POINTER Aは1221に等しく、STRIDELENGTHは3に等しい。したがって、ステップ84に応答して、POINTER Aの値が1221から1224に増大される。次に、方法70はステップ78に進む。
【0074】
上記の説明で熟練した当業者には理解されるように、方法70がステップ84からステップ78に戻ることにより、一つ以上の付加的なプリフェッチ要求が発せられる。後続の各プリフェッチ要求は前のプリフェッチ要求のアドレスにSTRIDE LENGTHの値を加えたものを発する。たとえば、前に説明したように、ステップ78の第一の場合に1221のプリフェッチ要求が発せられ、そしてその後、POINTER Aの値がSTRIDE LENGTHの3だけ大きくされて1224の値となる。したがって次に、ステップ78はもう一度プリフェッチ要求を発するが、ここではアドレス1224で行われる。更にステップ80で再びSTRIDE COUNTERが減らされるが、ここでは3から2に減らされる。後に続くステップ82が制御をステップ84に移し、POINTER Aが増大させられ、このようにして続行される。したがって、このプロセスで1221、1224、1227、および122Aの系列に対するプリフェッチ要求を発する。しかし、アドレス122Aでプリフェッチ要求を発行した後、ステップ80は再びSTRIDE COUNTERを減少させる。したがって、この点で、STRIDE COUNTERは1から0に減少させられる。その結果、ステップ82は制御をステップ86に渡す。したがって、制御のこの変化が生じるのは、ストライド系列(すなわち、1221、1224、1227、および122A)のすべてのアドレスがプリフェッチ要求の対象となった後である。
【0075】
ストライディングアドレスの系列に対応するすべてのプリフェッチ要求が発せられた後にステップ86で、TEMPORARY POINTER SAVERからの値が現在のPOINTERにコピーされて戻される。現在の例では、前に説明したようにステップ86の前に、POINTER Aの値はアドレス122A、すなわち、ストライドアドレスの系列1221、1224、1227、および122Aの最後のアドレスに等しい。しかし、ステップ86でTEMPORARY POINTER SAVERからのコピーバックにより、現在POINTERの値がストライドアドレスの系列の初めにあった値に戻される。したがって現在の例では、前に(ステップ76で)TEMPORARY POINTER SAVERに記憶された1221という値が今POINTER Aに戻される。したがって熟練した当業者には理解されるように、POINTER Aに基づくプリフェッチ要求の次の場合には、その要求はもう一度、ストライド系列の終わりではなくてストライド系列の初めのアドレスに向けられる。更に、そしてTEMpORARY POINTER SAVERの紹介と関連して前に説明したように、そのSAVERを使用する代わりに、別の方法でSAVERに記憶された初期アドレスを再循環させることによりステップ76の結果を達成することができる。たとえば、1221の終了アドレスの場合、STRIDE LENGTHに(STRIDE THRESHOLD−1)の値を乗算することができ、その積を終了アドレスから減算することができる。これにより、POINTER Aを再記憶するための初期アドレスが与えられる。
【0076】
ステップ86の後、方法70はステップ88に進む。ステップ88は、問題になっているLTB56のエントリに対するNEXT POINTERインジケータを進める。現在の例では、図9について説明したようにNEXT POINTERの値は現在00に設定されている。すなわち、NEXT POINTERは表2に示された値によりPOINTER Aを指す。したがって、ステップ88はNEXT POINTER値を01に進める。これにより、POINTER Bが、行561が使用される次の場合に対して使用されるべき次のPOINTERであるということが示される。換言すれば、フェッチ段40によりフェッチされることに応答して次回に命令23が検出されたとき、行561が再び使用されるが、そのときはステップ88によるNEXT POINTERの現在の前進に基づいてPOINTER BとB CONTROLが制御を行う。更に注意すべきことは、NEXT POINTERのこの前進はルーピング形式でエントリ561の相次ぐ各ポインタに対して続行される。換言すれば、ステップ86に達したときNEXT POINTERがPOINTER Cを示すように設定されると、その場合にNEXT POINTERを前進させたとき、NEXT POINTERは次のPOINTERとしてPOINTER Aを指す。このようにして、円形形式がPOINTER AからPOINTER Bに、POINTER
Cに、POINTER Aに戻る等のように形成される。
【0077】
今説明したステップ88の動作の他に、ストライドを完了させ、円形の順序の次のPOINTER以外のPOINTERに対するループを形成できるようにすることにより、本発明の範囲内で更にもう一つの実施例を作成することができる。換言すれば、前の段落では、NEXT POINTERをPOINTER CからPOINTER Aに進める場合について説明した。これにより、POINTER Cに関連するストライド系列が完了した後、円形ルーピング形式が維持される。換言すれば、表5に与えられたストライド制御値で、前の段落が示唆するところによれば、ストライド系列が完了した後、NEXT POINTERを単に増大させる。これにより、今完了したストライド系列に関連して使用されたばかりのPOINTERに円形順序で続くPOINTERにより、次のターゲットデータアドレスが示される。しかし、代替実施例として、ストライド系列が完了した後、異なるPOINTERがNEXT POINTERとなるように、更に付加的な制御を行うこともできる。たとえば、各LTBエントリに付加的な値を含めることができる。またはCONTROL内のビット数を増やすことができる。いずれにしても付加的な機能により、ストライド系列の完了後に、今使用したばかりのPOINTERに円形状に続かないPOINTERが指定される。たとえば、POINTER Aがストライド系列を支配した上記の例で、この付加的な制御によってNEXT POINTERを10に変えることができる。これにより、(上記の例のようなPOINTER Bではなくて)POINTER Cが、データフェッチ命令の次の生起に対して使用すべき次のPOINTERであるということが示される。このように各LTBエントリで、上記のものより更にもっと複雑なデータパターンを検出し、示すことができる。
【0078】
ステップ88の後、方法70はステップ90に達する。前に説明したように、ステップ77のエラーハンドリングの後にも、ステップ90に達することがあり得る。いずれにしても、ステップ90は単に、LTB56の中の、ストライドモードの動作に基づく与えられたエントリに対する方法70の終わりを表しているに過ぎない。したがって、ステップ90の後、方法70は多数の付加的な回数繰り返すことができる。それらの回数はフェッチされた命令とLTB56の中のエントリとが一致したことに応答してもう一度開始される。ここで、一致するLTBエントリはストライドモードを示すために設定された適当なCONTROL情報値をそなえており、ストライドの長さはSTRIDE LENGTH値に示されている。
【0079】
上記の説明から熟練した当業者には理解されるように、図8の実施例では、プリフェッチ要求をストライディングアドレスの系列に発することができる。実際、本例を継続することにより、熟練した当業者には理解されるように図8の実施例では、ストライディングアドレス相互の間にルーピングも行うことができる。更に詳しく述べると、図9を再び参照することにより、POINTER Bがアドレス2221を表すことがわかる。前に説明したように、上記の例のステップ88は、NEXT POINTERを変更して、行561が使用される次の場合に使用されるべき次のPOINTERとしてPOINTER Bを示す。このように、本例を続けて説明する。フェッチ段40によりフェッチされることに応答して命令23が次に検出されたとき、フェッチを予測するために行561が再び使用されるが、この点BではB CONTROLとPOINTER Bが使用される。更に注意すべきことは、B CONTROLはルーピングモードを示すということである。したがって、命令23のこの場合に対して、再びプリフェッチ要求がアドレス2221に対して発せられるが、その後に命令23の次の三つの生起の各々に対する三つのストライドが続く。すなわち、次の三つのこのような生起はアドレス2224、2227、および222Aに対するプリフェッチ要求を生じる。更に、プリフェッチ要求の一部としてアドレス222Aが発せられると、再びNEXT POINTERが増大させられ、今度は次のアクセスのための制御としてPOINTER CおよびそれのC CONTROLが示される。熟練した当業者には理解されるように、命令23の次の4回の生起に対してもう一度アドレスのストライドパターンが生じる。それらのアドレスには5221、5224、5227、および522Aが含まれる。最後に、これが完了したとき、再びNEXT POINTERが増大させられる。今度は次のアクセスのための制御としてPOINTER AおよびそれのA CONTROLを生じるループバックが完成する。このようにして、このパターンは多数回繰り返すことができる。これにより、ストライドの後にループが続く組み合わせ機能が得られる。
【0080】
上記の例では、各POINTERに対してCONTROL情報値が設けられており、CONTROL値は001に等しい。すなわち、ストライドモードが示され、ストライドの大きさがエントリ561のSTRIDE LENGTHに記憶された。しかし、代わりとして010および011に等しいCONTROL値を使用してもよい。それらの値は各々、(表5にLENGTH1およびLENGTH2として示されている)既知の固定長さに対応している。たとえば、LENGTH1は3バイトの値とすることができる。この場合、STRIDE LENGTH値からの値を使用する、前の例は代わりに010のCONTROL値を使用して達成された。そしてそのCONTROL値から、それに対してプリフェッチ要求が発せられる次の予測されたアドレスを計算するとき3というストライド長さを使用することがわかっている。もう一つの例として、LENGTH2は与えられた構成に対する1ワードの大きさとすることができる。したがって、LENGTH2はあるマシンについては4バイトとすることができる。したがって、このような場合には、CONTROL値が011に等しければ、エントリのSTRIDE LENGTH値を使用する必要は無く、代わりに011符号化からわかるような4バイトの固定値を使用して相次ぐストライドアドレスを計算する。上記の他に、更により複雑なストライディングデータパターンに対しては、一つのPOINTERに対応するCONTROLがもう一つのPOINTERに対応するCONTROLとモードが異なってもよい。たとえば、A CONTROLを001、B CONTROLを010、そしてC CONTROLを011とすることができる。このように、各CONTROLはストライドモードに関連するが、ストライド長さが異なっている。更に他の例も、熟練した当業者には理解されよう。
【0081】
上記のアドレスのパターンを背景として、この点までプリフェッチ要求が発せられるということを述べてきた。したがって、要求が実際にプリフェッチ動作を生じるということを肯定的に述べていない。換言すれば、一旦プリフェッチ要求が発せられると、その要求に応答してプリフェッチ動作が実際に行われるか否かは要求している回路にはわからない。プリフェッチ動作が行われれば、多分、要求されたデータはその後、オンチップキャッシュで利用できるので、そのキャッシュから実際のフェッチによってそのデータを使用することができる。しかし、場合によっては、プリフェッチ要求にサービスしない、すなわち、プリフェッチ要求に応答したプリフェッチ動作を許さないことが望ましいこともある。このような場合の二つの例を以下に述べる。
【0082】
プリフェッチ要求は発せられるが、その要求に応答したプリフェッチは生じたり、生じなかったりする場合の第一の例として、本実施例の更にもう一つの側面では、LTB56の各エントリに一つ以上の付加的な値を付加することができる。または上記のエントリにアクセスする、ある付加的な回路を接続することができる。この付加的な回路は、キャッシュ行交差に基づいで過去のプリフェッチ要求と比べて現在のプリフェッチ要求を評価する。更に詳しく述べると、二つのアドレスを評価することにより後続のアドレスが前のアドレスと同じキャッシュ行の中にあるか否かを判定する種々の回路がこの分野では知られている。後続のアドレスが前のアドレスと同じキャッシュ行の中に無ければ、後続のアドレスは前のアドレスに対して行交差であると言われる。すなわち、そのアドレスは一つのキャッシュ行と前のアドレスに対応するもう一つのキャッシュ行との間の境界と交差する。本実施例の状況では、この機能をストライド動作と組み合わせて使用することにより、性能を更に改善する。更に詳しく述べると、プリフェッチ要求の一部として相次ぐ各ストライドアドレスが発せられるにつれて、ストライドアドレスをこのような行交差検出回路に提出することが好ましい。後続のアドレスがキャッシュ行と交差しない場合には、したがって、前のストライドアドレスに関連して多分捜された(かプリフェッチされたかの一方または両方の)データを捜していることになる。したがって、他の考慮が無い場合には、後続のプリフェッチ要求はプリフェッチ動作を生じる必要は無い。というのは、先行アドレスが既にプリフェッチ動作を生じたからであり、またその動作により、後続のプリフェッチ要求で捜されるデータは既にキャッシュの中にあることが保証されたからである。これをより良く説明するため、命令23の例に戻る。前に説明したように、方法20によって取り扱われるとき、命令23は1221、1224、1227、および122Aのストライドアドレスを発した。今、アドレス1221と1224が一つのキャッシュ行の中にそろっており、アドレス1227と122Aが一つのキャッシュ行の中にそろっているものとする。命令23の第一の生起に対しては、アドレス1221に対応してプリフェッチ要求が発せられることが前に示されている。これは系列の中の最初のアドレスであるので、何か他の理由が無ければ、プリフェッチ要求に応答してプリフェッチ動作を行うことができる。このようにして、アドレス1221のデータがオンチップキャッシュ内にプリフェッチされる。しかし、アドレス1224もアドレス1221と同じキャッシュ内にあるので、1221に対するアドレスがこのようにしてプリフェッチされるのと同時にアドレス1224のデータもプリフェッチされる。次に、命令23の第二の生起に対しては、アドレス1224に対応してプリフェッチ要求が発せられることが前に示された。しかし、ここで、キャッシュ行交差検出回路は現在のアドレス1224が先行するアドレス1221と同じキャッシュ行の中にあることを検出する。これに応答して、アドレス1224のデータに対してはプリフェッチ要求が発せられる事が好ましいが、これに応答してこの点ではプリフェッチ動作が行われないことが好ましい。なぜなら、アドレス1221のデータと同時に、捜し求められたデータが既に以前にキャッシュにプリフェッチされていたからである。この例について、説明を続ける。命令23の第三の生起に対しては、アドレス1227に対応してプリフェッチ要求が発せられることが前に示された。ここで、キャッシュ行交差検出回路は現在のアドレス1227が先行するアドレス1224と同じキャッシュ行の中に無いことを検出する。したがって、アドレス1227のデータに対して発せられたプリフェッチ要求に応答して、プリフェッチ動作を行うことができることが好ましい。これにより、アドレス1227(および122A)のデータが異なるキャッシュ行にフェッチされる。これにより、この場合も、そのデータは後でフェッチのためオンチップで利用できる。
【0083】
プリフェッチ要求は発せられるが、その要求に応答したプリフェッチは生じたり、生じなかったりする場合の第二の例として、かなり前に説明したように、付加的なシステムパラメータが、プリフェッチ動作を行うべきか、または異なるが関連した応答性のプリフェッチ動作が行われるように実際に要求を修正するべきかということの有効性に影響を及ぼす。再び、これらの付加的な考慮をするためには、前に引用した米国特許出願第 号、「マイクロプロセッサに基づくシステムでプリフェッチ処理のための回路、システム、および方法」(Circuits,Systems,And Methods For Prefetch Handling In A Microprocessor−Based System)(代理人処理番号TI−24153)を参照できる。
【0084】
図8および9のエントリ561によって行われるストライド動作とそれに続くルーピング動作について説明してきた。それらの図のエントリ561の特性と、前に紹介した種々の側面を更に説明するために、表4の例の命令23と関連して図9のエントリ561の中の値の設定について説明する。前に説明したように、表4のプログラムは、外部メモリ14のような、マイクロプロセッサ12がアクセスできるメモリに命令として記憶される。したがって、それらの命令を処理するために、各命令はパイプライン38内にフェッチされ、それを通ってその実行段48に向かう。したがって、このプロセスの間、命令23が初めて(すなわち、J=1でK=1の場合)命令フェッチ段40によってフェッチされる。この点で当業者には知られた手法により、命令がロード、記憶、記憶質問等のようなデータフェッチ命令であるということが検出される。命令23がデータフェッチ命令であると検出されたことに応答して、図5のエントリ561に関連して説明したように同じ初期ステップが行われる。したがって、それらの詳細をここで再び説明しなくても前の説明を参照して理解し得る。簡単に述べると、前に説明したように、LTB56を使用して、それのエントリの一つが命令23に対応するか判定する。そして、エントリを検証するか、またはLTB56の中の新しい列に(たとえば、LTB56の最も古く使用されたエントリを立ちのかせることにより)エントリを作成する。しかし、更に前に述べたように、図4のエントリはストライドに関連した属性を含んでおらず、デフォルト予測はループが含まれているということだった。したがって、図4のエントリ561に対して、データフェッチ命令を受けて、それのターゲットデータアドレスをエントリに入れた後、NEXT POINTERの値が01に設定される。これにより、POINTERBがデータフェッチ命令の次の生起の際に使用すべき次のポインタであるということが示される。しかし、図8のエントリ561の本実施例では、それに種々の付加的なストライド処理能力が含まれている。その結果、後で更に説明するように、それのデフォルト予測は、アドレス系列がルーピングでなくストライディングを行うということである。したがって、NEXT POINTERの値は00に維持される。すなわち、POINTER Aが命令23の次の生起の際に使用すべき次のポインタであるということが示される。しかし、この点では単一のターゲットデータアドレスしか無いので、それはTEMPORARY POINTER SAVERとPOINTER Aに記憶され、A CONTROLは001に設定される。表5で説明したようにこれは、ストライド長さがSTRIDE LENGTH値に記憶されたストライドモードエントリを示す。更に、POINTER Aの値がストライドアドレスの系列の中の第一のアドレスであると予測されるので、STRIDE COUNTERは1に初期設定される。最後にSTRIDE CONTROLは「不完全」に設定される。換言すれば、本例の現在の点では、ストライド系列が完全であるか否かわからない。したがって、後で理解されるような制御の目的のため、STRIDE CONTROLの中にある値(たとえば、ある2進コード)が設定されて、この不完全なステータスを表示する。
【0085】
命令23の第二の生起により、LTBにヒットが生じる。これに応答して、NEXT POINTERがPOINTER Aであり、POINTER Aに対するCONTROL値が001(すなわち、ストライドモードエントリ))、STRIDE COUNTERが1に設定され、STRIDE CONTROLが「不完全」に設定されているということが判定される。これに応答して、この第二の生起からの実際のターゲットデータアドレスを使用して、その値とPOINTER Aに既に記憶されている値(すなわち、命令23の第一の生起による実際のターゲットデータアドレス)との差が計算される。したがって現在の例では、1221という第一の生起のターゲットデータアドレスが1224という第二の生起のターゲットデータアドレスから減算される。これにより、3という差が得られる。更に、ストライドモードとしてデフォルトモードが予測されるので、次にこの差はエントリ561のSTRIDE LENGTH値に記憶される。更に、デフォルト予測によれば命令23のこの第二の生起は一連のストライドアドレスの中の2番目であるので、STRIDE COUNTERはこのとき1から2に増やされる。更に、現在のターゲットデータアドレス(すなわち、1224)がPOINTER Aに記憶される。最後に、二つの相次ぐアドレスだけが受信、分析されたので、NEXT POINTERは00にとどまってPOINTER Aを示し、A CONTROLは001にとどまり、STRIDE CONTROLは不完全なステータスを表示し続ける。
【0086】
命令23の第三の生起によって、LTBに再びヒットが生じる。これに応答して、対応するエントリに対して再び、NEXT POINTERがPOINTER Aであり、A CONTROLが001に設定されていると判定される。しかし、ここでは、STRIDE COUNTERが1より大きいということも検出される。「不完全な」というSTRIDE CONTROL値と組合わされたこの表示から、ストライド系列が設定されつつあり、まだ完成しておらず、データフェッチ命令の二つの生起しか含んでいないということがわかる。したがって再び、この第三の生起からの実際のターゲットデータアドレスを使用して、その値とPOINTER Aに既に記憶されている値(すなわち、命令23の第二の生起からの実際のターゲットデータアドレス)との差が計算される。したがって、現在の例では、差は3に等しい。次に、この差は既にSTRIDE LENGTHに記憶されている差と比較される。したがって、現在の例では、一致していることが見出されるので、アドレスのストライド系列が継続していると推定される。その結果、(3という)同じ差がSTRIDE LENGTH値にとどまる。更に、現在のターゲットデータアドレス(すなわち、1227)がPOINTER Aに記憶される。更に、STRIDE COUNTERはこのとき2から3に増やされる。
【0087】
命令23の第四の生起により、再びLTB56にヒットが生じ、対応するNEXT POINTERがPOINTER Aに設定され、A CONTROLが001に設定され、STRIDE CONTROLが「不完全」に設定される。しかし、STRIDE COUNTERが2より大きい(たとえば、現在3に等しい)ので、データフェッチ命令のこの第四の生起に対する実際のターゲットデータアドレスはPOINTER Aの値(すなわち、命令の第三の生起による値)とSTRIDE LENGTHに記憶された値との和となるとこのとき予測される。換言すれば、この第四の生起がもう一度、上記の第一から第三の生起で始まった系列のストライドになるということがこのとき予測される。したがって、現在の例では、STRIDE LENGTHの中の3という値がPOINTERAの中の1227の値に加算され、その結果得られる122Aのターゲットデータアドレスを使用してそのアドレスのプリフェッチ要求が発せられる。更に結局、命令のこの第四の生起により、命令はパイプライン38に沿って充分に進むので、実際のターゲットデータアドレスが発せられる。これに応答して、この第四の生起からの実際のターゲットデータアドレスを使用して、その値と前にPOINTER Aに記憶された命令23の第三の生起からの値との差を計算することにより、この第四の生起がもう一度ストライドであったということを確かめる。ここで、差は3に等しいので、STRIDE LENGTHに既に記憶されている値と比較したとき、その結果は一致する。したがって、予測されたターゲットデータアドレスは正確であったことが確かめられるので、更に、アドレスのストライド系列が継続していると推定される。その結果として、同じ差(3)がSTRIDE LENGTH値にとどまり、STRIDE COUNTERがこのとき3から4に増やされる。更に、現在のターゲットデータアドレス(すなわち、122A)がPOINTER Aに記憶される。
【0088】
命令23の第五の生起により、再びLTB56にヒットが生じ、対応するNEXT POINTERがPOINTER Aに設定され、A CONTROLが001に設定され、STRIDE CONTROLが「不完全」に設定される。もう一度、STRIDE COUNTERが2より大きい(たとえば、現在4に等しい)ので、データフェッチ命令のこの第五の生起に対する実際のターゲットデータアドレスはPOINTER Aの値(すなわち、命令の第四の生起による値)とSTRIDE LENGTHに記憶された値との和となるとこのとき予測される。したがって、現在の例では、STRIDE LENGTHの中の3という値がPOINTER Aの中の122Aの値に加算され、その結果得られる122Dのターゲットデータアドレスを使用してそのアドレスのプリフェッチ要求が発せられる。更に結局、命令のこの第五の生起により、命令はパイプライン38に沿って充分に進むので、実際のターゲットデータアドレスが発せられる。これに応答して、この第五の生起からの実際のターゲットデータアドレスを使用して、その値と前にPOINTER Aに記憶された命令23の第四の生起からの値との差を計算することにより、この第五の生起がもう一度ストライドであったということを確かめる。しかし、ここで、図7で説明したように命令23の第五の生起に対する実際のターゲットデータアドレスは2221である。したがって、この第五のアドレスとPOINTER Aに記憶された122Aの値との差はSTRIDE LENGTHに既に記憶されている3という差に等しくない。このように、不一致に応答して、現在の生起までのストライド系列が完了している、すなわち、アドレス1221、1224、1227、および122Aの系列が完了していると判定される。したがって、これに応答して、その系列の第一のアドレスがTEMPORARY POINTER SAVERからPOINTERAに戻される。更に、STRIDE CONTROLの不完全なステータスがこのとき再設定されて、POINTER Aに対するストライド分析が完全であることを示す。したがってSTRIDE LENGTHは、系列内のストライドアドレス相互の間の適当な距離をそなえている。更に、前に説明したように、ストライド糸列のアドレス毎にSTRIDE COUNTERは増やされた。したがって、ストライド系列の検出を終了すると、STRIDE COUNTEらの値がSTRIDE THRESHOLDに移され、STRIDE COUNTERが1に戻される。更に、次にNEXT POINTERが01の値に設定される。これにより、POINTER Bがデータフェッチ命令の次の生起を制御すべきであるということが示される。最後に、命令23の第五の生起による現在のターゲットデータアドレスがPOINTER BとTEMPORARY POINTER SAVERに記憶され、B CONTROLが001に設定される。
【0089】
命令23の第六の生起は種々の点で上記の第二の生起に類似しているが、ここではPOINTER AでなくPOINTER Bに対して動作が行われる。したがって、LTB56内のヒットに応答して、対応するNEXT POINTERがPOINTER Bであり、POINTER Bに対するCONTROL値が001に設定され、STRIDE COUNTERが1に設定され、STRIDE CONTROLが「不完全」に設定される。これに応答して、この第六の生起からの実際のターゲットデータアドレスを使用して、その値とPOINTER Bに既に記憶されている第五の生起の実際のターゲットデータアドレスの値との差が計算される。したがって現在の例では、2221という第五の生起のターゲットデータアドレスが2224という第六の生起のターゲットデータアドレスから減算される。これにより、3という差が得られる。しかしこの点で、前に説明したようにPOINTER Aは既にストライド系列に対応して完全に設定され、また前に説明したように各POINTERは同じストライドリソースを共通使用する。したがって、POINTER Bがストライド系列にも対応できる程度まで、STRIDE LENGTHがPOINTER Aの既に設定されたストライド系列に対するのとPOINTER Bに対するのと同じであることが保証される。したがって、第六および第五の実際のターゲットデータアドレスから計算された3というストライド長さが与えられたとき、この差がSTRIDELENGTH内の値と比較される。ここで、一致が生じるので、ストライド系列に関連したPOINTER Bの設定を続行することができる。しかし注意すべきことは、一致しない場合には代替のステップが行われるということである。たとえば、前に述べた代替実施例では、各POINTERはそれ自身の対応するストライド属性をそなえているので、POINTER Bはストライド系列の異なる型、すなわちSTRIDE LENGTH、STRIDE THRESHOLDの一方または両方が異なる系列に対応するように設定することができる。熟練した当業者は更に他の代替実施例を確かめることができる。いずれにしても、ストライド長さが一致する現在の例に戻ると、STRIDE COUNTERは1から2に増やされる。デフォルト予測によれば、命令23のこの第六の生起はPOINTER Bに対する一連のストライドアドレスで二番目だからである。更に、現在のターゲットデータアドレス(すなわち、2224)がPOINTER Bに記憶される。最後に、二つの相次ぐアドレスだけが受信、分析されたので、NEXT POINTERは01にとどまってPOINTER Bを示し、B CONTROLは001にとどまり、STRIDE CONTROLは不完全なステータスに設定されたままになる。
【0090】
上記で熟練した当業者には理解されるように、命令23の第三、第四、および第五の生起に関連したPOINTER Aの完了と同様にして、命令23の第七、第八、および第九の生起に対して前のステップを繰り返すことによりPOINTER Bに対応する値を完了することもできる。したがって、命令23の第九の生起の後、POINTER BにはTEMPORARY POINTER SAVERからの2221のアドレスが戻され、STRIDE CONTROLは完了ステータスを示すように再設定される。このようにして、一旦次にPOINTER BがNEXT POINTERとして示されると、それはストライド値との組み合わせで一連の4個のストライドアドレスを予測する。それらのストライドアドレスは2221、2224、2227、および222Aである。更に注意すべきことは、第九の生起を使用して現在のストライド系列が完了したと推論されれば、STRIDE COUNTERの値がSTRIDE THRESHOLDの値と比較される。このステップは、多数のPOINTERの間でストライドに関連した値が共通使用されるため、再び必要とされる。換言すれば、この点で、前に説明したようにSTRIDE THRESHOLDは既に1221、1224、1227、および122Aのストライド系列に対して完全に設定されている。したがって、POINTER Bがストライド系列にも対応できる程度まで、STRIDE THRESHOLDがPOINTER Aの既に設定されたストライド系列に対するのとPOINTER Bに対するのと同じであることが保証される。したがって、4というSTRIDE THRESHOLDが与えられたとき、それがSTRIDE COUNTER内の値と比較される。ここで、一致が生じるので、ストライド系列に関連したPOINTER Bの設定が完了する。
【0091】
POINTER BとそのCONTROLがストライドモードを示すように完結した後も、POINTER AとPOINTER Bの値を比較するために付加的なステップを設けることができる。これら二つの値が一致すれば、代替の予測として、命令23が4個のアドレスを通って繰り返しストライド系列を遂行した後、もとの同じアドレス(すなわち、POINTER AとPOINTER Bの両方に記憶されたアドレス)に戻ると予測することができる。換言すれば、POINTER Aに対応する与えられたストライド系列に対して、系列が完了した後、同じ系列の開始アドレスにループで戻ると判定することができる。この場合、更に前に述べたように、ステップ88に関連して代替案を説明した。これにより、ストライドを完了し、その後に円形の順序で次のPOINTER以外のPOINTERへのNEXT POINTER表示を続けることができる。したがって、この現在の段落はこのような代替案から利益を得る。この代替案により、ストライド系列を完了することができ、現在完了しているストライドを支配した同じPOINTERをNEXT POINTERが表すことができる。換言すれば、現在の例に対して、NEXT POINTER値は00に設定されたままになる。したがって、ストライド系列が完了すると、今完了したばかりのストライド系列をも制御したPOINTER Aが再びデータフェッチ命令の次の生起を支配する。
【0092】
最後に、図7の例およびエントリ561の設定に戻って、熟練した当業者には理解されるように、第二組のストライドアドレス(すなわち、2221、2224、2227、および222A)に対する前のステップが命令23の第十から第十三の生起に対して繰り返されることにより、POINTER Cに対応する値が完了する。したがって、命令23の第十三の生起後に、POINTER CにTEMPORARY POINTER SAVERからの5221のアドレスが再記憶され、C CONTROLが001に設定され、STRIDE CONTROLが分析完了を示すように再設定される。このようにして、一旦POINTER CがNEXT POINTERとして示されると、それはストライド値との組み合わせで一連の4個のストライドアドレスを予測する。それらのストライドアドレスは5221、5224、5227、および522Aである。更に、命令23の第十三の生起に対する実際のターゲットデータアドレスを受けた後、熟練した当業者には理解されるように、NEXT POINTERはPOINTER Aを指示する。したがって、第十三の生起の実際のターゲットデータアドレスはPOINTER Aの中のターゲットデータアドレスと一致することが確かめられる。したがって、現在の例では、一致が見出される。これにより、POINTER Cに関連するストライド系列の終わりからPOINTER Aで表されるような次のストライド系列の初めに至るループが完成する。
【0093】
上記で、熟練した当業者には理解されるように、命令23の第十三の生起の後、そのエントリ561が(すなわち、図9に示すように)完成し、上記のようなストライドの後にループが続く系列を正確に予測するように検証される。したがって、図10の方法での使用を容易にするために、エントリ561を更に修正して、命令23の次の生起(すなわち、第十四の生起)とその後の他の生起が図10の方法に従うようにすることが好ましい。したがって、これを達成するため、STRIDE COUNTERにSTRIDE THRESHOLDをロードした後、一回減らすことが好ましい。というのは、命令23の第十三の生起、すなわち、現在のストライド系列の第一の生起は、それのターゲットデータの実際のフェッチが行われたという点で既に処理されているからである。したがって、この点以降、図10の方法は、エントリ561の予測が正確なままである限り、上記のようにプリフェッチ要求を発することができる。
【0094】
上記で、熟練した当業者は本実施例がどのようにデータフェッチ命令に対するルーピングとストライディングの両方のデータパターンを正確に予測できるかを理解するはずである。更に、符号化の種々の例をそれらの予測に対して示し、それらの符号化を設定するための種々の手法を示したが、熟練した当業者は他の代替案を確かめることができる。たとえば、図4の実施例は3個のPOINTER(およびそれらの対応するCONTROLフィールド)をそなえており、これは図2aから図7に紹介されたようなパターンを検出するためには好ましいが、種々のデータパターンに対して代わりの個数のPOINTERを使用してもよい。もう一つの例として、図8の実施例に対する代替実施例を上記し、それによれば各POINTERとそれに結合されたCONTROLはそれ自身のストライドに関連した値の組をそなえているが、更にもう一つの実施例として、ストライドに関連した値のテーブルを設け、LTB56の一つ以上のエントリがそのテーブルを参照し、またはそのテーブルをLTB56の一つ以上のエントリからの一つ以上のPOINTERと結合するようにもできる。換言すれば、ストライド値のリソースプールを異なるLTB56によって共通使用することができるか、または一つ以上のこのようなエントリの中の異なるPOINTERによって共通使用することができる。熟練した当業者は、更に他の例を確かめることができる。
したがって、本実施例を詳細に説明してきたが、特許請求の範囲に規定された発明の範囲を逸脱することなく、上記の説明に対して種々の置き換え、変形、または変更を行うことができる。
【0095】
以上の説明に関して更に以下の項を開示する。
(1)ロードターゲット回路であって、
複数のエントリ
を具備し、前記複数のエントリの各々が、
行をデータフェッチ命令に対応させるための値と、
複数のポインタであって、複数のポインタの各々がデータフェッチ命令の生起に対応するターゲットデータアドレスを記憶するためのものである、複数のポインタと、
を具備する、ロードターゲット回路。
(2)第1項記載のロードターゲット回路であって、前記複数のエントリの各々には更に、前記複数のポインタの中のどの一つがデータフェッチ命令の与えられた生起に対するターゲットデータアドレスを与えるかを表すためのネクストポインタ値も含まれる、ロードターゲット回路。
(3)第1項記載のロードターゲット回路であって、前記複数のエントリの各々には更に複数のコントロール値が含まれ、複数のコントロール値の中の各コントロール値は前記複数のポインタの中の一つのポインタに対応する、ロードターゲット回路。
【0096】
(4)第1項記載のロードターゲット回路であって、
前記複数のエントリの各々が更に、
前記複数のポインタの中のどの一つがデータフェッチ命令の与えられた生起に対するターゲットデータアドレスを与えるかを表すためのネクストポインタ値と、
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
を具備し、そして
前記複数のポインタの各々が論理的に順次かつ円形の順序に配列されており、そして
前記複数のエントリの中の与えられた一つに対して、ループモードを示す前記複数のコントロール値の中の与えられた一つに応答して、前記ネクストポインタが前記複数のコントロール値の中の前記与えられた一つに対応する前記複数のポインタの中の第一のポインタから、前記複数のポインタの中の前記第一のポインタのターゲットデータアドレスに対応するプリフェッチ要求を発した後、順次かつ円形の順序で前記複数のポインタの中の第二のポインタに増やされる、
ロードターゲット回路。
【0097】
(5)第1項記載のロードターゲット回路であって、
前記複数のエントリの各々が更に、
前記複数のポインタの中のどの一つがデータフェッチ命令の与えられた生起に対するターゲットデータアドレスを与えるかを表すためのネクストポインタ値と、
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
を具備し、そして
前記複数のエントリの中の与えられた一つに対して、ループモードを示す前記複数のコントロール値の中の与えられた一つに応答して、前記ネクストポインタが前記複数のコントロール値の中の前記与えられた一つに対応する前記複数のポインタの中の第一のポインタから、前記複数のポインタの中の前記第一のポインタのターゲットデータアドレスに対応するプリフェッチ要求を発した後、前記複数のポインタの中の第二のポインタに調整される、
ロードターゲット回路。
【0098】
(6)第1項記載のロードターゲット回路であって、前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
ストライド系列の中のデータターゲットアドレスの数を示すためのストライドスレッショルド値と、
を具備するロードターゲット回路。
(7)第6項記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路をも具備し、そして
前記複数のエントリの中の各エントリは更に、そのエントリに対応するプリフェッチ要求の系列の中で発せられたデータターゲットアドレスの数を計数するためのストライドカウンタをも具備する、
ロードターゲット回路。
【0099】
(8)第6項記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路をも具備し、
前記複数のエントリの中の与えられた一つに対して、データフェッチ命令の相次ぐ生起に応答して、そして更にストライドモードを示す前記複数のコントロール値の中の一つに応答して、前記プリフェッチ要求を発するための回路が、前記ストライドスレッショルド値によって示されるストライド系列の中のデータターゲットアドレスの数に等しい数のプリフェッチ要求を発する、
ロードターゲット回路。
(9)第1項記載のロードターゲット回路であって、前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
ストライド系列の中の相次ぐデータターゲットアドレスの間のストライド長さを示すためのストライドレングス値と、
を具備するロードターゲット回路。
【0100】
(10)第9項記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路をも具備し、
前記複数のエントリの中の与えられた一つに対して、データフェッチ命令の相次ぐ生起に応答して、そして更にストライドモードを示す前記複数のコントロール値の中の一つに応答して、前記プリフェッチ要求を発するための回路が、相次ぐプリフェッチ要求を発し、
前記相次ぐプリフェッチ要求の各々がデータターゲットアドレスを含み、そして
前記相次ぐプリフェッチ要求の中の第一の要求の後の相次ぐプリフェッチ要求の各々のデータターゲットアドレスは、それ自身と直前のプリフェッチ要求のデータターゲットアドレスとの間の差としてストライドレングスをそなえる、
ロードターゲット回路。
(11)第1項記載のロードターゲット回路であって、前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
ストライド系列の中のデータターゲットアドレスの数を示すためのストライドスレッショルド値と、
ストライド系列の中の相次ぐデータターゲットアドレスの間のストライド長さを示すためのストライドレングス値と、
を具備するロードターゲット回路。
【0101】
(12)第1項記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路をも具備し、そして
前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
ストライド系列の中のデータターゲットアドレスの数を示すためのストライドスレッショルド値と、
ストライド系列の中の相次ぐデータターゲットアドレスの間のストライド長さを示すためのストライドレングス値と、
前記複数のポインタの中のどの一つがデータフェッチ命令の与えられた生起に対するターゲットデータアトレスを与えるかを表すためのネクストポインタ値と、
を具備し、
前記複数のエントリの中の与えられた一つに対して、データフェッチ命令の相次ぐ生起に応答して、そして更にストライドモードを示す前記複数のコントロール値の中の一つに応答して、前記プリフェッチ要求を発するための回路が、前記ストライドスレッショルド値によって示されるストライド系列の中のデータターゲットアドレスの数に等しい数のプリフェッチ要求を発し、そして
前記複数のエントリの中の与えられた一つに対して、ループモードを示す前記複数のコントロール値の中の与えられた一つに応答して、前記ネクストポインタが前記複数のコントロール値の中の前記与えられた一つに対応する前記複数のポインタの中の第一のポインタから、前記複数のポインタの中の前記第一のポインタのターゲットデータアドレスに対応するプリフェッチ要求を発した後、前記複数のポインタの中の第二のポインタに増やされる、
ロードターゲット回路。
【0102】
(13)第1項記載のロードターゲット回路であって、
前記複数のエントリの各々が更に、前記複数のポインタの中のどの一つがデータフェッチ命令の与えられた生起に対するターゲットデータアドレスを与えるかを表すためのネクストポインタ値をも具備し、そして更に
複数のコントロール値の中の各コントロール値が前記複数のポインタの中の一つのポインタに対応するような、複数のコントロール値と、
ネクストポインタ値を一定値に維持することにより、データフェッチ命令の多数回の生起に対して複数のポインタの中の一つを表し、これにより同一アドレスループモードを作成するための回路と、
をも具備するロードターゲット回路。
【0103】
(14)第1項記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路をも具備し、そして
前記複数のエントリの中の与えられた一つに対して、データフェッチ命令の相次ぐ生起に応答して、そして更に同一アドレスループモードに応答して、前記プリフェッチ要求を発するための回路が、同一ターゲットデータアドレスをそなえた相次ぐプリフェッチ要求を発する、
ロードターゲット回路。
(15)第1項記載のロードターゲット回路であって、前記複数のポインタが3個のポインタであるロードターゲット回路。
(16)第1項記載のロードターゲット回路であって、前記データフェッチ命令がロード命令である、ロードターゲット回路。
(17)第1項記載のロードターゲット回路であって、前記データフェッチ命令が記憶命令である、ロードターゲット回路。
【0104】
(18)マイクロプロセッサであって、
命令を受信するための命令パイプラインと、
受信された命令がデータフェッチ命令であるか否かを判定するための回路と、
複数のエントリを含むロードターゲット回路と、
を具備し、そして
前記複数のエントリの各々が、
行をデータフェッチ命令に対応させるための値と、
複数のポインタの各々が前記データフェッチ命令の生起に対応するターゲットデータアドレスを記憶するような複数のポインタと、
を具備する、
マイクロプロセッサ。
【0105】
(19)命令パイプラインをそなえたマイクロプロセッサを動作させる方法であって、
複数の生起の各々がデータフェッチ命令に対する対応する複数の実際のターゲットデータアドレスを生じるような、複数の生起にわたって命令パイプラインでデータフェッチ命令を受信し、
複数の生起の中の第一の生起に応答して、マイクロプロセッサ上のロードターゲットバッファに、データフェッチ命令に対応するエントリを形成し、
複数の生起に応答して、データフェッチ命令に対する対応する複数の実際のターゲットデータアドレスに基づいて、ターゲットデータアドレスの予測をエントリの中で符号化する、
ステップからなり、
予測が第一の予測型と第二の予測型とから選択され、
第一の予測型はループモードであり、ループモードでは複数の実際のターゲットデータアドレスがループ系列を形成し、ループ系列は開始ループターゲットデータアドレスをそなえ、終了ループターゲットデータアドレスに移り、開始ループターゲットデータアドレスに戻ることにより繰り返し、そして
第二の予測型はストライドモードであり、ストライドモードでは複数の実際のターゲットデータアドレスが開始ストライドターゲットデータアドレスから多数の付加的な相次ぐアドレスに移り、相次ぐターケットアドレスの各々のターゲットデータアドレスはそれ自身と直前のターゲットデータアドレスとの間に共通の距離をそなえている、
マイクロプロセッサ動作方法。
【0106】
(20)複数のエントリ(561)をそなえたロードターゲット回路(56)。ロードターゲット回路の中の複数のエントリの各々には、行をデータフェッチ命令に対応させるための値(ADDRESS TAG)が含まれる。更に、各ロードターゲット回路行には複数のポインタ(POINTER A,POINTER B,POINTER C)も含まれる。複数のポインタの各々は、データフェッチ命令の生起に対応するターゲットデータアドレスを記憶するためのものである。
【図面の簡単な説明】
【図1】 多レベルメモリシステムからの情報のフェッチおよびプリフェッチの両方を行うための種々の構成要素がある、その多レベルメモリシステムをそなえたマイクロプロセッサの電気図である。
【図2】 レコードを示す図であって、aはデータ処理ソフトウェアによって処理されるべきレコードの一例のフォーマットを示す図、bはaで示されるフォーマットに従う4個のレコードで使用されるべきデータの一例を示す図である。
【図3】 図2の最初の3個のレコードを記憶する3個のメモリエリアの構成を示し、このメモリエリア構成により、単一の期間の間に、データが記憶装置から第一のエリアに入力され、その間に、データが第二のエリアで処理され、第三のエリアのデータが記憶装置に出力されるというように、相次ぐデータレコードをオーバラップして取り扱うことができる、メモリエリア構成図である。
【図4】 ルーピングデータパターンを収容するための、ロードターゲットバッファ(LTB)の中のエントリの第一の実施例を示す図である。
【図5】 3個の相次ぐアドレス1200、2200、および5200の間のルーピングを示すように、ある値が完了した図4のLTBエントリを示す図である。
【図6】 レコードを示す図であって、aは図2aのレコードに更に付加的なフィールドを付加したフォーマットを示す図、bはaで示されるフォーマットに従う4個のレコードで使用されるべきデータの一例を示す図である。
【図7】 図3の3個のメモリエリアの構成を示すが、図6bに示された付加的なデータをも含むメモリエリアの構成図である。
【図8】 LTBの中のエントリの第二の実施例を示し、ストライディングデータパターン、ルーピングデータパターン、またはストライディングデータパターンとルーピングデータパターンの組み合わせを収容するエントリの第二の実施例を示す図である。
【図9】 3個の相次ぐアドレス1221、2221、および5221の間のルーピング、とともにアドレス1221からアドレス122Aを通るストライディングを示すように、ある値が完了した図8のLTBエントリを示す図である。
【図10】 相次ぐストライドアドレスに対して相次ぐプリフェッチ要求が発せられるように、図8のLTBエントリに応答して動作する方法を示す図である。
【符号の説明】
12 マイクロプロセッサ
38 命令パイプライン
56 ロードターゲットバッファ
561 エントリ
ADDRESS TAG アドレスタグ
CONTROL コントロール
NEXT POINTER ネクストポインタ
POINTER ポインタ
STRIDE LENGTH ストライド長さ
STRIDE THRESHOLD ストライド閾値
Claims (10)
- ロードターゲット回路であって、
複数のエントリを具備し、前記複数のエントリの各々が、
メモリ内に記憶されているデータフェッチ命令のアドレスを記載するアドレスタグと、
複数のポインタであって、複数のポインタの各々がデータフェッチ命令の生起に対応するターゲットデータアドレスを記憶するためのものである、複数のポインタと、
を具備し、
前記複数のエントリの各々は、更に、前記複数のポインタの中のどの一つがデータフェッチ命令の与えられた生起に対するターゲットデータアドレスを与えるかを表すためのネクストポインタ値を含む、
ロードターゲット回路。 - 請求項1に記載のロードターゲット回路であって、前記複数のエントリの各々は更に複数のコントロール値を含み、複数のコントロール値の中の各コントロール値は前記複数のポインタの一つに対応する、ロードターゲット回路。
- 請求項1に記載のロードターゲット回路であって、
前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの一つに対応する、複数のコントロール値と、
を具備し、
前記複数のポインタの各々が論理的に順次かつ循環型順序に配列されており、
前記複数のエントリの中の与えられた一つに対して、ループモードを示す前記複数のコントロール値の中の与えられた一つに応答して、前記ネクストポインタが前記複数のコントロール値の中の前記与えられた一つに対応する前記複数のポインタの中の第一のポインタから、前記複数のポインタの中の前記第一のポインタのターゲットデータアドレスに対応するプリフェッチ要求を発した後、順次かつ循環型順序で前記複数のポインタの中の第二のポインタに増やされる、
ロードターゲット回路。 - 請求項1に記載のロードターゲット回路であって、
前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの一つに対応する、複数のコントロール値と、
を含み、
前記複数のエントリの中の与えられた一つに対して、ループモードを示す前記複数のコントロール値の中の与えられた一つに応答して、前記ネクストポインタが前記複数のコントロール値の中の前記与えられた一つに対応する前記複数のポインタの中の第一のポインタから、前記複数のポインタの中の前記第一のポインタのターゲットデータアドレスに対応するプリフェッチ要求を発した後、前記複数のポインタの中の第二のポインタに調整される、
ロードターゲット回路。 - 請求項1に記載のロードターゲット回路であって、前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの一つに対応する、複数のコントロール値と、
ストライド系列の中のデータターゲットアドレスの数を示すためのストライドスレッショルド値と、
を具備するロードターゲット回路。 - 請求項5に記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路をも具備し、
前記複数のエントリの各エントリは更に、そのエントリに対応するプリフェッチ要求の系列の中で発せられたデータターゲットアドレスの数を計数するためのストライドカウンタを具備する、
ロードターゲット回路。 - 請求項5に記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路を具備し、
前記複数のエントリの中の与えられた一つに対して、データフェッチ命令の連続的生起に応答して、そして更にストライドモードを示す前記複数のコントロール値の一つに応答して、前記プリフェッチ要求を発するための回路が、前記ストライドスレッショルド値によって示されるストライド系列の中のデータターゲットアドレスの数に等しい数のプリフェッチ要求を発する、
ロードターゲット回路。 - 請求項1に記載のロードターゲット回路であって、前記複数のエントリの各々が更に、
複数のコントロール値の各コントロール値が前記複数のポインタの一つに対応する、複数のコントロール値と、
ストライド系列の中の連続するデータターゲットアドレス間のストライド長さを示すためのストライドレングス値と、
を具備するロードターゲット回路。 - 請求項8に記載のロードターゲット回路であって、
更にプリフェッチ要求を発するための回路を具備し、
前記複数のエントリの中の与えられた一つに対して、データフェッチ命令の連続的生起に応答して、そして更にストライドモードを示す前記複数のコントロール値の一つに応答して、前記プリフェッチ要求を発するための回路が、連続プリフェッチ要求を発し、
前記連続プリフェッチ要求の各々がデータターゲットアドレスを含み、そして
前記連続プリフェッチ要求の中の第一の要求の後の前記連続プリフェッチ要求の各々のデータターゲットアドレスは、それ自身と直前のプリフェッチ要求のデータターゲットアドレスとの間の差としてストライドレングスをそなえる、
ロードターゲット回路。 - 請求項1に記載のロードターゲット回路であって、前記複数のエントリの各々が更に、
複数のコントロール値の中の各コントロール値が前記複数のポインタの一つに対応する、複数のコントロール値と、
ストライド系列の中のデータターゲットアドレスの数を示すためのストライドスレッショルド値と、
ストライド系列の中の連続するデータターゲットアドレス間のストライド長さを示すためのストライドレングス値と、
を具備するロードターゲット回路。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US3413196P | 1996-12-31 | 1996-12-31 | |
US034131 | 1996-12-31 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH10207706A JPH10207706A (ja) | 1998-08-07 |
JP3830651B2 true JP3830651B2 (ja) | 2006-10-04 |
Family
ID=21874504
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP03191698A Expired - Fee Related JP3830651B2 (ja) | 1996-12-31 | 1998-01-05 | ループとストライドの一方または両方の予測を行うロードターゲットバッファを具現するマイクロプロセッサ回路、システム、および方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US5953512A (ja) |
EP (1) | EP0855644B1 (ja) |
JP (1) | JP3830651B2 (ja) |
Families Citing this family (57)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3175675B2 (ja) * | 1997-12-04 | 2001-06-11 | 日本電気株式会社 | プリフェッチ制御装置 |
US6430680B1 (en) * | 1998-03-31 | 2002-08-06 | International Business Machines Corporation | Processor and method of prefetching data based upon a detected stride |
JP3439350B2 (ja) * | 1998-10-02 | 2003-08-25 | Necエレクトロニクス株式会社 | キャッシュ・メモリ制御方法及びキャッシュ・メモリ制御装置 |
US6728839B1 (en) * | 1998-10-28 | 2004-04-27 | Cisco Technology, Inc. | Attribute based memory pre-fetching technique |
US7837116B2 (en) | 1999-09-07 | 2010-11-23 | American Express Travel Related Services Company, Inc. | Transaction card |
US7889052B2 (en) | 2001-07-10 | 2011-02-15 | Xatra Fund Mx, Llc | Authorizing payment subsequent to RF transactions |
US7239226B2 (en) | 2001-07-10 | 2007-07-03 | American Express Travel Related Services Company, Inc. | System and method for payment using radio frequency identification in contact and contactless transactions |
US6529983B1 (en) | 1999-11-03 | 2003-03-04 | Cisco Technology, Inc. | Group and virtual locking mechanism for inter processor synchronization |
US6470427B1 (en) | 1999-11-09 | 2002-10-22 | International Business Machines Corporation | Programmable agent and method for managing prefetch queues |
US8429041B2 (en) | 2003-05-09 | 2013-04-23 | American Express Travel Related Services Company, Inc. | Systems and methods for managing account information lifecycles |
US7172112B2 (en) | 2000-01-21 | 2007-02-06 | American Express Travel Related Services Company, Inc. | Public/private dual card system and method |
US8543423B2 (en) | 2002-07-16 | 2013-09-24 | American Express Travel Related Services Company, Inc. | Method and apparatus for enrolling with multiple transaction environments |
US6775765B1 (en) * | 2000-02-07 | 2004-08-10 | Freescale Semiconductor, Inc. | Data processing system having instruction folding and method thereof |
AU2001243473A1 (en) | 2000-03-07 | 2001-09-17 | American Express Travel Related Services Company, Inc. | System for facilitating a transaction |
US6505269B1 (en) | 2000-05-16 | 2003-01-07 | Cisco Technology, Inc. | Dynamic addressing mapping to eliminate memory resource contention in a symmetric multiprocessor system |
US6738836B1 (en) * | 2000-08-31 | 2004-05-18 | Hewlett-Packard Development Company, L.P. | Scalable efficient I/O port protocol |
US7650314B1 (en) | 2001-05-25 | 2010-01-19 | American Express Travel Related Services Company, Inc. | System and method for securing a recurrent billing transaction |
US7725427B2 (en) | 2001-05-25 | 2010-05-25 | Fred Bishop | Recurrent billing maintenance with radio frequency payment devices |
US8548927B2 (en) | 2001-07-10 | 2013-10-01 | Xatra Fund Mx, Llc | Biometric registration for facilitating an RF transaction |
US7762457B2 (en) | 2001-07-10 | 2010-07-27 | American Express Travel Related Services Company, Inc. | System and method for dynamic fob synchronization and personalization |
US7249112B2 (en) | 2002-07-09 | 2007-07-24 | American Express Travel Related Services Company, Inc. | System and method for assigning a funding source for a radio frequency identification device |
US7360689B2 (en) | 2001-07-10 | 2008-04-22 | American Express Travel Related Services Company, Inc. | Method and system for proffering multiple biometrics for use with a FOB |
US7925535B2 (en) | 2001-07-10 | 2011-04-12 | American Express Travel Related Services Company, Inc. | System and method for securing RF transactions using a radio frequency identification device including a random number generator |
US7996324B2 (en) | 2001-07-10 | 2011-08-09 | American Express Travel Related Services Company, Inc. | Systems and methods for managing multiple accounts on a RF transaction device using secondary identification indicia |
US8538863B1 (en) | 2001-07-10 | 2013-09-17 | American Express Travel Related Services Company, Inc. | System and method for facilitating a transaction using a revolving use account associated with a primary account |
US7668750B2 (en) | 2001-07-10 | 2010-02-23 | David S Bonalle | Securing RF transactions using a transactions counter |
US7827106B2 (en) | 2001-07-10 | 2010-11-02 | American Express Travel Related Services Company, Inc. | System and method for manufacturing a punch-out RFID transaction device |
US9024719B1 (en) | 2001-07-10 | 2015-05-05 | Xatra Fund Mx, Llc | RF transaction system and method for storing user personal data |
US7303120B2 (en) | 2001-07-10 | 2007-12-04 | American Express Travel Related Services Company, Inc. | System for biometric security using a FOB |
US8635131B1 (en) | 2001-07-10 | 2014-01-21 | American Express Travel Related Services Company, Inc. | System and method for managing a transaction protocol |
US7805378B2 (en) | 2001-07-10 | 2010-09-28 | American Express Travel Related Servicex Company, Inc. | System and method for encoding information in magnetic stripe format for use in radio frequency identification transactions |
US20040236699A1 (en) | 2001-07-10 | 2004-11-25 | American Express Travel Related Services Company, Inc. | Method and system for hand geometry recognition biometrics on a fob |
US8279042B2 (en) | 2001-07-10 | 2012-10-02 | Xatra Fund Mx, Llc | Iris scan biometrics on a payment device |
US9454752B2 (en) | 2001-07-10 | 2016-09-27 | Chartoleaux Kg Limited Liability Company | Reload protocol at a transaction processing entity |
US7493288B2 (en) | 2001-07-10 | 2009-02-17 | Xatra Fund Mx, Llc | RF payment via a mobile device |
US7119659B2 (en) | 2001-07-10 | 2006-10-10 | American Express Travel Related Services Company, Inc. | Systems and methods for providing a RF transaction device for use in a private label transaction |
US8294552B2 (en) | 2001-07-10 | 2012-10-23 | Xatra Fund Mx, Llc | Facial scan biometrics on a payment device |
US7503480B2 (en) | 2001-07-10 | 2009-03-17 | American Express Travel Related Services Company, Inc. | Method and system for tracking user performance |
US8960535B2 (en) | 2001-07-10 | 2015-02-24 | Iii Holdings 1, Llc | Method and system for resource management and evaluation |
US7746215B1 (en) | 2001-07-10 | 2010-06-29 | Fred Bishop | RF transactions using a wireless reader grid |
US7705732B2 (en) | 2001-07-10 | 2010-04-27 | Fred Bishop | Authenticating an RF transaction using a transaction counter |
US8001054B1 (en) | 2001-07-10 | 2011-08-16 | American Express Travel Related Services Company, Inc. | System and method for generating an unpredictable number using a seeded algorithm |
US9031880B2 (en) | 2001-07-10 | 2015-05-12 | Iii Holdings 1, Llc | Systems and methods for non-traditional payment using biometric data |
US6836823B2 (en) * | 2001-11-05 | 2004-12-28 | Src Computers, Inc. | Bandwidth enhancement for uncached devices |
US20030126591A1 (en) * | 2001-12-21 | 2003-07-03 | Youfeng Wu | Stride-profile guided prefetching for irregular code |
US20030204840A1 (en) * | 2002-04-30 | 2003-10-30 | Youfeng Wu | Apparatus and method for one-pass profiling to concurrently generate a frequency profile and a stride profile to enable data prefetching in irregular programs |
US6805287B2 (en) | 2002-09-12 | 2004-10-19 | American Express Travel Related Services Company, Inc. | System and method for converting a stored value card to a credit card |
JP3934569B2 (ja) | 2003-03-12 | 2007-06-20 | 株式会社東芝 | 信号処理装置、プリフェッチ命令方法及びプリフェッチ命令プログラム |
US7017028B2 (en) * | 2003-03-14 | 2006-03-21 | International Business Machines Corporation | Apparatus and method for updating pointers for indirect and parallel register access |
US20050223172A1 (en) * | 2004-03-31 | 2005-10-06 | Ulrich Bortfeld | Instruction-word addressable L0 instruction cache |
US7318550B2 (en) | 2004-07-01 | 2008-01-15 | American Express Travel Related Services Company, Inc. | Biometric safeguard method for use with a smartcard |
US20060031708A1 (en) * | 2004-08-04 | 2006-02-09 | Desai Kiran R | Method and apparatus for correcting errors in a cache array |
US7426631B2 (en) * | 2005-02-02 | 2008-09-16 | International Business Machines Corporation | Methods and systems for storing branch information in an address table of a processor |
US9164936B2 (en) * | 2012-12-31 | 2015-10-20 | Silicon Laboratories Inc. | System and method for regulating direct memory access descriptor among multiple execution paths by using a link to define order of executions |
US9047173B2 (en) * | 2013-02-21 | 2015-06-02 | Advanced Micro Devices, Inc. | Tracking and eliminating bad prefetches generated by a stride prefetcher |
US9507600B2 (en) * | 2014-01-27 | 2016-11-29 | Texas Instruments Deutschland Gmbh | Processor loop buffer |
GB2572954B (en) * | 2018-04-16 | 2020-12-30 | Advanced Risc Mach Ltd | An apparatus and method for prefetching data items |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1991004536A1 (en) * | 1989-09-20 | 1991-04-04 | Dolphin Server Technology A/S | Instruction cache architecture for parallel issuing of multiple instructions |
US5357618A (en) * | 1991-04-15 | 1994-10-18 | International Business Machines Corporation | Cache prefetch and bypass using stride registers |
US5434985A (en) * | 1992-08-11 | 1995-07-18 | International Business Machines Corporation | Simultaneous prediction of multiple branches for superscalar processing |
US5761706A (en) * | 1994-11-01 | 1998-06-02 | Cray Research, Inc. | Stream buffers for high-performance computer memory system |
US5694568A (en) * | 1995-07-27 | 1997-12-02 | Board Of Trustees Of The University Of Illinois | Prefetch system applicable to complex memory access schemes |
US5752037A (en) * | 1996-04-26 | 1998-05-12 | Hewlett-Packard Company | Method of prefetching data for references with multiple stride directions |
US5778435A (en) * | 1996-05-30 | 1998-07-07 | Lucent Technologies, Inc. | History-based prefetch cache including a time queue |
SE506757C2 (sv) * | 1996-07-02 | 1998-02-09 | Ericsson Telefon Ab L M | Säkringsanordning för en portabel batteridriven elektrisk apparat |
-
1997
- 1997-12-29 US US08/999,087 patent/US5953512A/en not_active Expired - Lifetime
- 1997-12-30 EP EP97310678A patent/EP0855644B1/en not_active Expired - Lifetime
-
1998
- 1998-01-05 JP JP03191698A patent/JP3830651B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
EP0855644B1 (en) | 2011-08-17 |
JPH10207706A (ja) | 1998-08-07 |
EP0855644A2 (en) | 1998-07-29 |
EP0855644A3 (en) | 2000-05-17 |
US5953512A (en) | 1999-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3830651B2 (ja) | ループとストライドの一方または両方の予測を行うロードターゲットバッファを具現するマイクロプロセッサ回路、システム、および方法 | |
US6216219B1 (en) | Microprocessor circuits, systems, and methods implementing a load target buffer with entries relating to prefetch desirability | |
JP3772899B2 (ja) | コンピュータシステム | |
US6748518B1 (en) | Multi-level multiprocessor speculation mechanism | |
US6609192B1 (en) | System and method for asynchronously overlapping storage barrier operations with old and new storage operations | |
US5944815A (en) | Microprocessor configured to execute a prefetch instruction including an access count field defining an expected number of access | |
US7213126B1 (en) | Method and processor including logic for storing traces within a trace cache | |
US6088789A (en) | Prefetch instruction specifying destination functional unit and read/write access mode | |
US6725340B1 (en) | Mechanism for folding storage barrier operations in a multiprocessor system | |
US6728873B1 (en) | System and method for providing multiprocessor speculation within a speculative branch path | |
EP0855645A2 (en) | System and method for speculative execution of instructions with data prefetch |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041227 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041227 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20051209 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20060309 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20060314 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060609 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20060704 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060712 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090721 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100721 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110721 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110721 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120721 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120721 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130721 Year of fee payment: 7 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |