JP3542020B2 - 複数予測分岐命令にわたる命令フェッチの位置合わせ命令キャッシュ処理を実行するプロセッサ装置およびプロセッサ制御方法 - Google Patents

複数予測分岐命令にわたる命令フェッチの位置合わせ命令キャッシュ処理を実行するプロセッサ装置およびプロセッサ制御方法 Download PDF

Info

Publication number
JP3542020B2
JP3542020B2 JP2000000330A JP2000000330A JP3542020B2 JP 3542020 B2 JP3542020 B2 JP 3542020B2 JP 2000000330 A JP2000000330 A JP 2000000330A JP 2000000330 A JP2000000330 A JP 2000000330A JP 3542020 B2 JP3542020 B2 JP 3542020B2
Authority
JP
Japan
Prior art keywords
sector
fht
instruction
address
aic
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2000000330A
Other languages
English (en)
Other versions
JP2000215056A (ja
Inventor
バララム・シンハロイ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2000215056A publication Critical patent/JP2000215056A/ja
Application granted granted Critical
Publication of JP3542020B2 publication Critical patent/JP3542020B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、一般には、プログラムの実行のためのプロセッサの命令フェッチ速度向上を可能にすることに関する。より詳細には、本発明は、単一のフェッチ・サイクルで複数予測基本ブロックをフェッチするようにメモリ・アクセス命令をプロセッサ実行ハードウェア(命令実行パイプライン処理ハードウェアなど)に配布するための、命令キャッシュと共に直接動作するフェッチ履歴テーブルを生成する。
【0002】
【従来の技術】
本発明を理解するには、すべてのコンピュータ・プログラムの基本ブロック特性を背景として理解する必要がある。プログラムは、プロセッサのメイン・メモリを含む記憶階層に線形に記憶され、それによってその中のすべての命令記憶場所が線形な特性を有するようにする。しかし、これらの命令がプロセッサによって実行されるとき、プロセッサは、プログラム中の分岐命令によって、階層から線形に入手したそれらの同じ命令の非線形順序づけを使用する必要が生じる。したがって、すべてのコンピュータ・プログラムの実行順序は、各プログラムに含まれる分岐命令によって決まる。各プログラムの実行では、プログラムを、それぞれ分岐命令の分岐先命令から始まり、プログラムの命令実行順序で次の基本ブロックを開始するターゲット・アドレスを提供する分岐命令で終わる基本ブロックに分割する。基本ブロックはいずれも、1個の命令(分岐命令)からきわめて多数の命令(数千個の命令など)に至る任意の数の命令を含むことができる。プロセッサは、命令がメモリ内に順次に入れられていれば最も速く命令をフェッチし、命令が分岐のターゲットであって、プロセッサが介在してターゲット・アドレスの計算を行う必要が生じ、処理を大幅に遅らせるページ・フォルトの入手など、その命令を見つけるためにメモリ内のいずれかの場所までしばしば行く必要がある場合にフェッチ速度が最も遅くなる。
【0003】
プログラム中に多数の条件分岐があると、最新のプロセッサの命令フェッチ機構の妨げになる。大幅に増加する1サイクル当たりの命令数に対応するために、将来のマイクロプロセッサは多数の命令の投機フェッチおよび実行をサポートすることが必要になる。本明細書に記載の方法は、コンパイル中または命令キャッシュのロード中の動的マルチレベル分岐予測とコード再編成とに基づいて、各サイクル中に(異なるターゲット・アドレスを持つ)複数の条件分岐にわたって命令を投機的にフェッチすることができる。
【0004】
過去10年間で、マイクロプロセッサのパフォーマンスは年に約60%の割合で向上してきた。このパフォーマンス向上率を維持するには、将来のマイクロプロセッサは1サイクル当たり大幅に増加した数の命令を実行(およびコミット)する必要がある。条件分岐によって非数値ワークロードが課され、それによってスーパースカラ・プロセッサの実施が困難になる。1つの研究では、(RS/6000プラット・フォーム上で)平均的なC言語プログラムはその命令の約18%が条件命令であり、C++プログラムは命令の約11%が条件分岐である。これらによって、基本ブロックのサイズは6〜10命令に制限される。これらによって、基本ブロックを超える投機実行が必要になる。
【0005】
ほとんどのプロセッサは、高度な分岐予測機構を使用して、条件分岐がとる経路とそのターゲット・アドレスを予測する。しかし、これらの機構は、次に実行する条件分岐の結果を予測するために使用されているに過ぎない。基本ブロックのサイズが小さいことと投機の必要の増大により、将来のマイクロプロセッサは1サイクル中に複数の分岐の結果を高い確度で予測する必要があり、1サイクル中にそれらの分岐命令のターゲット・アドレスから命令をフェッチすることができなければならない。
【0006】
わかりやすく言えば、多くの経路ベースの相関動的分岐予測アルゴリズムは、多くの非数値ワークロード(SPECintなど)について97%もの確度で分岐予測を行うことができる。このような高い確度により、4個の連続した条件分岐の結果の予測を88.5%の確度で行うことができる。同様に、3個の連続した条件分岐は91.3%の確度で予測可能であり、2個の連続した条件分岐は94.1%の確度で予測可能である。これは、平均的な基本ブロック・サイズである6命令では、その経路をとることになる投機実行命令の期待数は、(単一レベルの分岐予測では11.8命令に過ぎないのに対して)4レベルの分岐予測では28.3であることを意味する。
【0007】
分岐が実行の現在点から離れるにつれて、予測可能な確度が低下する。多数の命令をフェッチすることができることにより、データ・ハザード、制御ハザード、および構造ハザードの制約内で所与の1サイクル中に実行可能な命令の数を大幅に増やすことができる。
【0008】
各コンピュータ・プログラムは、コンピュータ・システムの永続メモリ内に記憶場所シーケンスで記憶された1組の命令から成り、このシーケンスは、実行のためにそのプログラムをフェッチするプロセッサに対して仮想アドレス・シーケンスで示すこともできる。フェッチされた命令のシーケンスは、プロセッサによって命令実行シーケンスとして解決される。この命令実行シーケンスは通常、プログラム中の分岐命令のためにプログラムの記憶場所シーケンスとはかなり異なる。
【0009】
したがって、プログラムは一般に永続コンピュータ・メモリ(ハード・ディスクなど)に仮想アドレス・シーケンスで記憶され、この仮想アドレス・シーケンスは一般に、プロセッサがプログラムの各部分(ページ単位など)をコンピュータ・システムのランダム・アクセス・メモリに転送するために使用され、その後、プロセッサは、プロセッサによる実行のためにプログラムの仮想アドレスを使用してメモリ内のプログラムの行をフェッチする。
【0010】
したがって、プロセッサ内のプログラムの命令実行シーケンスは、プログラムの命令コンパイル・シーケンスでは現れず、命令実行シーケンスは各プログラム中で実行される分岐命令によって決まり、その結果、プログラムのアーキテクテッド命令実行シーケンスになる。プログラムのアーキテクテッド命令実行シーケンスに従わなければならないある種の複雑なプロセッサに見られるいわゆる順序外れ(アウト・オブ・シーケンス)命令実行は、本発明には関係がない。
【0011】
命令の各プログラム・アーキテクテッド実行シーケンスは、プログラムの特定の実行で使用されるデータに依存し、変化するデータによって命令のプログラム実行シーケンスは予測不能な変化をすることがある。データによって、分岐命令をとるかとらないかがしばしば制御される。不成立分岐命令によって、プログラムの仮想アドレス・シーケンスで次の命令を指すターゲット・アドレスが生成される。成立分岐命令によって、仮想アドレスにある非順次命令を指すターゲット・アドレスが生成される。
【0012】
すべてのプロセッサにおける命令フェッチ機構は、順次命令に仮想アドレス・シーケンスでアクセスしている限り、最も速く動作する。これは、その場合、それぞれの次の命令アドレスが単に現行命令アドレスを増分して次の順次命令アドレスを生成するだけで生成され、この次の順次命令アドレスはプロセッサ・キャッシュ内の同じラインにある次の順次命令である(キャッシュ・ヒット)ことが多く、そこからその命令を実行のためにプロセッサにただちに供給することができるためである。
【0013】
しかし、分岐をとることによって、現在キャッシュにない(キャッシュ・ミス)記憶場所にあるターゲット命令をフェッチしなければならず、それによってターゲット命令を含む別のラインをメモリからキャッシュにコピーするフェッチ・サイクルが開始されるという追加的なオーバーヘッドが生じることがある。プログラム中の命令の仮想アドレス・シーケンスから逸脱した成立分岐命令のために、成立分岐命令がプロセッサでのプログラムの実行に必要な命令のフェッチ速度を低下させることはよく知られている。
【0014】
したがって、分岐命令のターゲット命令が実際のターゲット・アドレスが実際にわかるまでフェッチされず、それによって追加のラインをプロセッサのIキャッシュにフェッチするための遅延が生じる場合、プログラム実行は分岐命令をとることによって遅くなる。したがって、実行パイプラインによってターゲット命令が受け取られるのをプロセッサが待つ間の追加の処理遅延が生じるため、成立分岐命令をプロセッサが処理する際に余分なオーバーヘッドが生じる。このようにして、成立分岐命令の処理により、プログラムの処理が遅くなり、プログラムの実行時間が増大する。
【0015】
従来の技術では、各成立分岐命令によって、プロセッサが1つまたは複数の基本ブロックをフェッチするフェッチ・サイクルが開始される。基本ブロックは、メモリ(実メモリまたは仮想メモリ)内に順次アドレスを有する1つまたは複数の命令から成り、最後の命令が分岐タイプの命令である。分岐タイプの命令は、条件付き分岐または無条件分岐、あるいはリターン命令または呼出し命令である。基本ブロックを終了させる分岐タイプの命令のターゲット・アドレスによって、次の基本ブロックが始まる。
【0016】
従来のコラプシング・バッファ(Collapsing Buffer)手法には、フェッチすべきキャッシュ・ライン内の命令を判断するのにいくつかの欠点がある。第1に、高インタリーブ(Iキャッシュ・ライン内の命令数と同数)分岐ターゲット・バッファ(BTB)を必要とする。第2に、命令をフェッチするキャッシュ・ライン内のすべての分岐について、BTB内に項目を必要とする。第3に、キャッシュ・ライン内からどの命令をフェッチすべきかを示すビット・ベクトルを作成するために、(4個プラス直前の1個の命令アドレスを最後の分岐命令のターゲット・アドレスと比較する)一連のアドレス・コンパレータを有する。連続内のコンパレータの数は、キャッシュ・ライン内の命令の数と等しい。これにより、プロセッサ・クロックが大幅に低下する。
【0017】
各項目に制御フロー・グラフの一部が記憶される、分岐アドレス・キャッシュ(BAC)が提案されている。BACは、BTBを拡張して、単一の分岐ターゲットではなく、複数の分岐のターゲット・アドレスと不成立アドレスを記憶する。BAC内にフェッチ・アドレスの項目がない場合、分岐ターゲットと不整列経路は実行中に埋められる。しかし、分岐のうちのいくつかの分岐が実行されなかったために、項目に穴ができる可能性がある。しかし、この論文では、分岐とそのターゲットとの間の使用されないインタリーブ命令をなくす方法については、十分な説明がなされていない。この目的のために、コラプシング・バッファと類似した手法が必要である。
【0018】
本明細書に記載の手法はこれらの欠陥のいずれも持たない。さらに、コンパイラまたはキャッシュ再ロード論理によって生成されたヒントを使用していくつかの分岐にわたる高帯域幅フェッチを実現する。コンパイラ・ベースの手法の方がより良い結果を出すと予測される。これは、コンパイラはコード生成中にサブプログラム全体を見ることができ、すべてのパス情報のコード化をより正確に入手することができ、したがってフェッチ履歴テーブルで維持されている分岐ターゲット情報に穴がなくなるためである。
【0019】
E.ローテンバーグ(Rotenberg)、S.ベネット(Bennett)、およびJ.スミス(Smith)による「Trace Cache: a Low Latency Approach to High Bandwidth Fetching」(1996年4月11日)という名称の論文で、命令のプロセッサ・フェッチを制御する従来技術の「トレース・キャッシュ」技法が提案されている。このローテンバーグ等の論文では、トレース・キャッシュが、命令キャッシュ(Iキャッシュ)を含む「コア・フェッチ・ユニット」と共に動作する。コア・フェッチ・ユニットは、分岐ターゲット・バッファ(BTB)、BTB論理回路、および複数分岐予測機構も含む。コア・フェッチ・ユニットは、一連のフェッチ・サイクルを使用してメイン・メモリから命令をそのIキャッシュにフェッチする。
【0020】
各フェッチ・サイクルは、分岐予測機構からの現在の予測プログラム経路中に1つまたは複数の基本ブロックを含むことができる。フェッチ・サイクルは、トレースされ、プログラム中の同じプログラム・アドレスに関連づけられたトレース・キャッシュ・ラインに記憶された前の経路と一致する経路内のすべての命令を含む。現行フェッチ・サイクルは、アドレスされたトレース・キャッシュ・ラインに記憶されている経路と不一致のときには常に終了する。現行トレース・キャッシュ・ラインを示す情報が、トレース・キャッシュ・ラインに関連づけられたトレース・タグ・キャッシュ・ディレクトリ項目に記憶される。
【0021】
トレース・タグ・キャッシュは、トレース・バッファと、トレース・タグ・ディレクトリと、トレース・ライン・フィル・バッファおよび論理とから成る。トレース・タグ・ディレクトリには、制御情報が入れられる。
【0022】
トレースの長さは命令数nと基本ブロック数mの2通りの方法で制限され、そのうちnはプロセッサのピーク・ディスパッチ・レートによって制限され、mは1フェッチ・サイクル当たりの分岐予測の平均数によって制限される。トレース・タグ・ディレクトリ内の各項目内の制御情報は、有効ビットと、先頭アドレスが入ったタグ・フィールドと、各ビットが各(成立または不成立)分岐命令の後にたどる経路を示すトレース内の分岐を表す、(m−1)ビットを有する分岐フラグ・フィールドと、(1)関連づけられたトレース内の分岐の数と(2)トレースが分岐で終わるかどうかを示す分岐マスク・フィールドと、分岐が成立しない場合に次のフェッチのアドレスが入れられるトレース不成立アドレス・フィールドと、分岐が成立した場合に次のフェッチ・アドレスが入れられるトレース・ターゲット・アドレス・フィールドとである。
【0023】
ローテンバーグ等のBTB内の16個の項目すべてが、選択されたトレース・タグ・キャッシュ・ライン内の16個の命令と並列して動作して、その中の各命令が分岐命令ではないか調べる。分岐予測回路は、グローバル・アドレス相関分岐予測機構(GAg)と単一パターン履歴テーブルを使用する。BTB論理は、BTBヒット情報を分岐予測と結合して、次のフェッチ・アドレスを生成し、有効命令ビット・ベクトルを生成する。
【0024】
予測論理によって複数分岐予測が行われる間、ローテンバーグ等のトレース・キャッシュ、BTB、および命令キャッシュすべてに並列してアクセスされる。トレース・キャッシュ・ヒットには、現行トレース・ディレクトリ項目について、(1)実フェッチ・アドレスがタグ・フィールドと一致し、(2)分岐予測が分岐フラグ・フィールドと一致する必要がある。トレース・キャッシュ・ミス時、フェッチは通常、トレース・キャッシュ情報を使用せずに、従来の方式でIキャッシュから進められる。しかし、この従来のフェッチ・プロセス中、トレース・キャッシュ項目が生成されてトレース・キャッシュに入れられ、対応するトレース・キャッシュ・ディレクトリ項目が生成される。命令が従来のようにIキャッシュにフェッチされるにつれて、Iキャッシュ・ラインに転送される各基本ブロックが、Iキャッシュからライン・フィル・バッファにも転送され、この転送は、ライン・フィル・バッファにm個の基本ブロックまたはn個の命令(フル・キャッシュ・ラインと等しい)が記憶されるまで行われる。その後、ライン・フィル・バッファの内容が現行フェッチ・アドレスによって入手されたトレース・キャッシュ内の現行ラインに転送される。それと同時に、次のフェッチ・サイクルの必要に応じて、分岐フラグ、分岐マスク、および不成立アドレスまたはターゲット・アドレスの生成によって、対応するトレース・ディレクトリ項目が生成される。
【0025】
単純なトレース・サイクルの不利な点は、各先頭フェッチ・アドレスについて単一のトレース項目しかトレース・キャッシュに記憶することができず、単一の対応する項目がトレース・ディレクトリに記憶される点である。したがって、プログラム中の同じフェッチ・アドレスからの異なる経路に、異なるトレース・キャッシュ項目と異なる対応トレース・ディレクトリ項目が必要になる。その結果、プログラム中の各フェッチ・アドレスごとに多数のトレース項目が生じ、プログラム実行中にそのアドレスから異なる経路がたどられる。プログラムは前に実行された命令に分岐して戻り、その後でプログラム全体を通して反復する際にそこから異なる経路をたどることが多いため、これによって、トレース・キャッシュとトレース・ディレクトリ項目の非効率的な使用によりトレース・キャッシュの効率が大幅に制限される。
【0026】
【発明が解決しようとする課題】
したがって、ローテンバーグ等のシステムは、Iキャッシュと共にトレース・キャッシュを必要とする。本発明は、トレース・キャッシュを使用せず、ローテンバーグ等のものに見られるシステム構成を使用しない。
【0027】
【課題を解決するための手段】
本発明は、(好ましくは複数のキャッシュ・セクタを使用して構造化された)新規な位置合わせIキャッシュと共に機能する新規なフェッチ履歴テーブルを提供する。
【0028】
本発明は、その結果が高度な信頼性の高い分岐予測機構によって予測される複数の分岐のターゲットから命令をフェッチすることができるようにし、セグメント化された命令キャッシュと共に動作する機構を含む。
【0029】
本発明は、命令キャッシュ・セクタ化コントロールを使用して、命令の基本ブロックを整列Iキャッシュ・セクタに位置合わせする機械コードを順序づけし直す。このような命令位置合わせは、実行時に命令キャッシュ再ロード/アクセル論理を使用して処理系依存機能をオブジェクト・コードに組み込むことによって行われる。プログラムは、実行のためにプロセッサが必要とする編成を反映せずにメイン・メモリ内に処理系独立方式で線形に配置され、処理系固有の特徴は実行プロセスのためのプロセッサ操作によって導入される。これによって、異なる内部編成を備えたプロセッサ間のオブジェクト・コード実行互換性が可能になる。本発明は、プログラム中の分岐命令の実行によって生じるプロセッサの時間損失を大幅に低減することができる。
【0030】
本発明が備える新規なハードウェアは、「位置合わせ命令キャッシュ」(AIC)と、AICディレクトリと、「フェッチ履歴テーブル」(FHT)とを含む。この新規なハードウェアは新規な方法を使用して本発明で必要な操作を実現する。
【0031】
AICは、セクタ化命令キャッシュであり、セクタはフェッチされた命令の順次グループを位置合わせする。すなわち、AICに記憶される各基本ブロックは、その最初の命令をセクタ内の最初の命令記憶場所に配置することによってセクタ位置合わせされ、セクタ内の他の命令は同じ基本ブロック中のメモリ内の場所順次アドレスに入れられる。プログラム中の基本ブロックの命令数は大幅に異なることがあるため、基本ブロックは、同じセクタ内のいずれかの命令位置で終わったり、セクタのサイズを超えたりすることがある。基本ブロックが同じセクタ内で終わる場合、その基本ブロックを終了させる分岐命令に続くセクタの命令記憶位置にノーオペレーション(NOP)文字が書き込まれる。基本ブロックがセクタ・サイズを超える場合、基本ブロックはAIC行内の1つまたは複数の連続するセクタ内に続き、いずれかの行で終わることができ、その場合、残りの位置はNOPで埋められる。AIC行内のセクタは、有効な命令が記憶されていなければ使用することができる。
【0032】
AICディレクトリは、関連づけられたAIC行内の各セクタSについて「セクタS先頭アドレス」フィールドを含み、このフィールドには、関連づけられたAICディレクトリ項目でその内容が有効であると示された場合に、関連づけられたセクタS内の最初の命令のメモリ・アドレスが入れられる。各AICディレクトリ項目は、それに関連づけられたAIC行Rのインデックスと同じディレクトリインデックスRに配置することができる。
【0033】
FHTは、直接マップ・テーブルまたはセットアソシアティブ・テーブルとすることができる。直接マップされる場合、FHT項目のインデックスはAIC内の関連づけられた行Rのインデックスから直接計算される。たとえば、任意のFHTセット内の項目のインデックスを、F*R、F*R+1、F*R+2...F*R+(F−1)のように計算することができ、ここでFはFHTセット内のFHT項目の数である。
【0034】
各FHT項目は、関連づけられたAIC行のセクタに記憶された命令のシーケンスについて前の実行履歴を記録するためのきわめて効率の高いフィールドを含み、このフィールドにはプログラムの複数の基本ブロックを入れることができる。フェッチ・サイクル中に本発明によって使用される場合、有効なFHT項目によって、複数のセクタがプロセッサによる実行のために基本ブロック実行の予測順序でただちに出力され、その際、プロセッサは、通常ならそれらの命令をメモリ内の異なる場所からフェッチするのに必要になるはずの必要時間を待たない。
【0035】
本発明の教示によるプロセスは、各プロセッサ命令フェッチ・サイクルが(AICヒットとFHTヒットの両方を見つける)1つの有効FHT項目を使用して、関連づけられたAIC行の有効セクタ内の命令をプログラムが必要とする「任意の」順序で出力することができるようにする。AICヒットおよびFHTヒットは、プログラムが前に実行され、そのFHT項目に記録される履歴を作成した後の時間のほとんどの時間に起こる可能性がある。
【0036】
プロセッサがFHTミスに遭遇した場合、プロセッサはそれにもかかわらず必要な命令を実行すると同時に、その実行の履歴を選択されたFHT項目のフィールドに記録し、その後は、FHT項目が古くなってFHTから除去される(すなわち項目は古くなると無効化される)ことがないだけ頻繁にヒットが起こる限り、それと同じシーケンスの命令が再度実行されるたびにFHTヒットが起こる。
【0037】
有効なFHT項目は、選択されたAIC行R内の選択されたセクタを出力するためにAIC内のセクタのそれぞれの列をつなぐセクタ・ゲートを使用可能にする。セクタ・ゲートは、FHT項目に記録された順序で使用可能にされ、それによって、それぞれのFHT項目で示されているどのような順序でも、選択されたセクタ内の命令のシーケンスをプロセッサによって実行するためにアウトゲートされる。
【0038】
好ましい実施形態は、各FHT項目内に「セクタ配列」フィールドと「セクタ分岐結果」フィールドを有する実施態様においてその実行履歴を効率的に記録し、サブフィールド・インデックスによってこれらのフィールドの履歴内容が関係づけられ、一方のフィールド内のサブフィールドによってセクタが識別され、他方のフィールド内のサブフィールドによって分岐結果(すなわち識別されたセクタに分岐命令が含まれているか否か、含まれている場合はその分岐が成立か不成立か)が示される。好ましい実施態様は2つのフィールドを使用するが、代わりに単一のフィールドを使用して同じ履歴情報を含めることもできることは明らかである。
【0039】
FHT項目に記録された履歴シーケンスは、同じプログラム中の前の実際の実行シーケンスに基づく、何度も繰り返されると予測される命令の予測シーケンスである。
【0040】
本発明は、同じAIC行に記憶された命令の有効セクタについて異なる実行シーケンス履歴を同時に記録することができる。これは、複数のFHT項目に同じAIC行を関連づけることによって行われ、好ましい実施形態では複数のFHT項目から成るセットを各AIC行に関連づけることによって実現される。たとえば、各FHTセットに4つのFHT項目がある場合、4つの項目のそれぞれの項目が異なるセクタ・シーケンス履歴を記録することができ、それによって、同じセット内の4つの異なる項目を使用することにより、同じセクタの命令をそれらのセクタの4つの異なるシーケンスで実行することができる。
【0041】
各FHT項目が単一のシーケンスのセクタ・アウトゲートを記録するため、FHTセットは多くの異なるシーケンスを記録することができる。新たに発生するシーケンスの変形には、FHTセット内の最も長期間使用されなかった有効項目を無効化して置き換えることによって対応することができる。このような置き換えは、FHTセット内の各FHT項目に最長時間不使用(LRU)フィールドを設けて置換選択を可能にすることによって可能になる。
【0042】
プロセッサ動作中に使用するためのFHT項目の選択は、新規なFHT選択プロセスによって行われ、これには、予測ベクトルとFHTセット内のFHT項目中の履歴フィールドとの突き合わせが含まれる。予測ベクトルは、フェッチ・サイクルによってFHT項目に関係づけられる。予測ベクトルは、フェッチ・サイクルの最初に分岐予測機構(従来技術が備えるタイプのものとすることができる)によって生成され、セクタの存在を認識しない。本発明は、このベクトルを、関連づけられたFHTセット内の有効FHT項目に記憶されたセクタ化履歴と突き合わせる新規なプロセスを提供する。FHT項目フィールドに、突き合わせプロセスが、識別されたセクタ内に非分岐命令があることを示すセクタ情報をスキップして、識別されたセクタ内に分岐成立か不成立かを問わず分岐命令があることを示すセクタ情報にのみ焦点を絞ることができる形で情報が記録される。
【0043】
好ましい実施形態は、命令順序づけバッファ(ISB)を使用して、FHT項目選択コントロールと起動コントロールに応答してFHT項目内に記録された履歴シーケンスでIキャッシュから命令を受け取る。しかし、命令は、本発明により、その命令の必要なシーケンスでアウトゲートされ、命令実行パイプラインに直接送るなど、ISBとは異なる他の実行実体にアウトゲートすることができる。
【0044】
本発明では、フェッチ・サイクル完了コントロールを設けて、FHT項目に最後のサブフィールドが記録された時点など、FHT項目が記録可能な順序づけ履歴をすべて記録し終えた時点を示す。
【0045】
FHT記録プロセスの動作は、任意のFHTセット内の最初の項目と、同じセット内の後で生成された項目とでは若干異なる。その理由は、最初の項目は関連づけられたAIC行がプロセッサ・メモリからコピーされた命令(この命令は同時に実行するために迂回することもできる)で一杯になったときに生成されるためである。セット内の他のFHT項目は、後で、同じAIC行内の前に満たされたセクタのために異なる実行シーケンスが発生されたときに生成される。
【0046】
本発明は、任意の選択されたAIC行内のセクタについて任意のシーケンスのアウトゲートをサポートすることができ、特別な状況では、複数のセクタのうちのいずれのセクタが最初にアウトゲートするセクタであるかを示すことが望ましい。これは、各FHT項目内に「先頭命令アドレス」フィールドを設けて、セクタのシーケンス内でどのセクタを最初にアウトゲートすべきであるかを示すことによってサポートされる。
【0047】
(しばしばターゲット分岐の計算などいくつかの処理ステップを回避することによって)記録された履歴シーケンスがアウトゲートされた後で次のAIC行を選択する際の時間を節約するために、本発明は各FHT項目内に「次命令フェッチ・アドレス」フィールドを設け、プロセッサはそこから次の命令が入っている可能性が高い次のAIC行をただちに判断することができる。
【0048】
【発明の実施の形態】
略語の定義:
AIC=位置合わせ命令キャッシュ
FHT=フェッチ履歴テーブル
R=AIC内の選択された行
FHTセット=選択されたAIC行に関連づけられたFHT項目のセット
F=FHTセット内の選択された項目
IFAR=命令フェッチ・アドレス・レジスタ(プロセス中の現行命令の記憶アドレスを含む)
LRU=FHT項目内またはAIC行内の最長時間不使用標識
有効ビット=FHT項目内またはAIC行内のフィールド(その項目または行が有効であり使用可能であることを示す)
ISB=命令順序づけバッファ(AICの出力セクタから実行順序で命令を受け取るバッファ)
MISS=キャッシュまたはテーブル内に検索項目が見つからない。
HIT=キャッシュまたはテーブル内に検索項目が見つかった。
B=ベクトル・ビット・カウント
S=セクタ識別子カウント
C=サブフィールド識別子カウント(FHTセット内で最初の項目が生成された後で、FHT項目のFHT「セクタ配列」フィールドと「セクタ分岐結果」フィールド内のサブフィールドを探し出す)
"m"=各実行順序予測における予測基本ブロックの数
L=AICセクタ内の現行命令数
LT=各AICセクタ内の命令位置の合計数
ST=各AIC行内のセクタ数
NOP=ノー・オペレーション・コード(NOPコードを含む場所には命令が存在しないことを示す)
RT=AIC内の合計行数
FT=各FHTセット内の合計項目数
【0049】
直接マップFHT=各FHTセット内の項目のFHT中の場所を、各AIC行のFHT項目のFT数を使用するなどして、AIC内の対応する行の場所から計算することができる。(すなわち、各FHTセット内の項目のFHT内のインデックスを、AIC内の対応する行RのインデックスRから判断する。たとえば、FHT内の各セットが4個のFHT項目(FT=4)を含む場合、その4個のFHT項目のインデックスは、4*R、4*R+1、4*R+2、および4*R+3となる。)非直接マップFHT(AIC行とFHT項目との間に厳密なインデックスがない)、各FHT項目に「先頭命令アドレス」フィールドが必要な場合がある。
【0050】
AICヒット:IFARアドレスが「I」の場合、512項目の直接マップ位置合わせIキャッシュ内のヒットを判断するには、まず、AIC行番号「R」をI(512を法として)と判断する。AIC項目「R」が有効で、命令がIFARアドレス「I」に入っている場合(この情報はIキャッシュ・ディレクトリに記憶されている)、AICヒットがある。好ましい実施形態では、AICはAIC行へのアクセスを管理するディレクトリを有し、IFARアドレスを使用する必要なAICを選択するために従来の合同クラス・アルゴリズムを使用する。AICはセットアソシアティブであってもなくてもよい。セットアソシアティブの場合、AIC内の各合同クラスは複数の行(一般には2または4行)を有し、そこからIFARアドレスの識別部分(たとえばIFARアドレスの事前定義されたビット位置)と、それぞれの行が記憶され、検証されたときにどのようなIFARアドレスが存在していたかを表す各AIC行内に記憶された対応するアドレス部分とを比較することによって、必要な行を選択する。合同クラス内の行のうちの1つの行について比較−同等条件が見つかった場合、AICヒットになる。アクセスした合同クラス内のすべての行について比較−不等条件が見つかった場合は、AICミスになる。
【0051】
FHTヒット:現在IFARに入っているアドレスを有する命令が入っているAIC行アドレス「R」を判断する。FHTヒットの場合、FHTの行4*R〜4*R+3内の有効なFHT項目を調べる。これらのHFT項目のいずれかにIFARアドレスと一致する「先頭命令アドレス」フィールドがあり、「セクタ分岐結果」フィールドが「結果予測ベクトル」と一致する場合、FHTヒットがある。「セクタ分岐結果」を「結果予測ベクトル」と比較するとき、「セクタ分岐結果」フィールドのサブフィールド内のアスタリスク(「*」)は無視される。(たとえば、「セクタ分岐結果」フィールドが「*0*1」で「結果予測ベクトル」が「0111」の場合、「セクタ分岐結果」は(「*」を無視して)「01」であり、これは「結果予測ベクトル」の接頭部であるため、一致がある。)
【0052】
ハードウェアおよび全般的動作の説明
本発明は、新規なプロセスを使用する新規な装置を有する。本発明は、予測ベクトルを生成し、それを新規なハードウェア・テーブル内の項目を含む新規な履歴と突き合わせて、順序外れ命令シーケンスが位置合わせされる新規なセクタ化命令キャッシュからの順序外れ命令シーケンスの実行のためのアウトゲートを制御する。本発明の動作の結果、単一のフェッチ・サイクルで命令の複数の順序外れシーケンスの基本ブロックを予測的に順序づけすることにより、それらの命令を含むプログラムの実行速度が向上する。
【0053】
本発明は、複数の予測命令ブロックを並列して実行するが、その予測分岐命令を、同じ分岐命令の実際の実行ターゲットと絶えず照合し、実行された予測シーケンスがプログラムが必要とする命令シーケンスから逸脱することがあるかどうかを判断する。本発明は、実行不一致コントロール19を使用して、そのような分岐ターゲットの逸脱を検出し、出力修正信号を生成する。この修正信号は命令ストリームを問題を起こしている命令アドレスから再開させる。実行不一致コントロール19の構造は、当技術分野で周知であり、したがって本明細書では詳細には示さない。
【0054】
図1に、本発明の好ましい実施形態を備えるためにプロセッサにおいて必要なハードウェア要素である、好ましい実施形態のハードウェア構成を示す。これは、「位置合わせ命令キャッシュ」(AIC)11と、AICディレクトリ12と、「フェッチ履歴テーブル」(FHT)14と、「命令フェッチ・アドレス・レジスタ」(IFAR)16と、「分岐予測ユニット」17と、「命令順序づけバッファ」(ISB)18と、実行不一致コントロール19とを含む。図2に、AICディレクトリ項目22を示し、図3にFHT項目をより詳細に示す。AIC行は、AIC内のインデックス0〜511に配置されている。FHT項目はFHT内のインデックス0〜2047に配置されている。AIC内の任意の選択された行のインデックスRを使用して、FHT14内のFHTインデックス4*R、4*R+1、4*R+2、および4*R+3にある4つのFHT項目から成る関連づけられたFHTセットを探し出す。
【0055】
各AIC行が複数のセクタに分割され、図1のAIC内の各行には4つのセクタが図示されている。いずれかのセクタに有効な命令が含まれている場合、それらの命令はプロセッサ・メモリ内で常に順次に配置され、各AICセクタS内の先頭の命令は、関連づけられたAICディレクトリ項目のそのセクタの「セクタS先頭アドレス」フィールドに入っている記憶場所を有する。
【0056】
各AICディレクトリ項目は、4つの「セクタS先頭アドレス」フィールドと、4つのセクタ・アドレス・フィールドのそれぞれについてビットが入れられる「有効」フィールドとを含む5つのフィールドに分割されている。したがって、各セクタ・アドレスには、有効な場合は、関連づけられたAIC行21内の対応するセクタ内の先頭の命令のアドレスが含まれる。
【0057】
図4に、FHT14内の4つのFHT項目24A、24B、24C、および24Dから成るFHTセットを示す。各FHTセットには、AIC行が関連づけられている。任意のセット内の4項目を、FHT(0)、FHT(1)、FHT(2)、およびFHT(3)と呼ぶことができる。またはこれらをそれぞれのFHTインデックスで呼ぶこともできる。
【0058】
IFAR16内のアドレスは、関連づけられたAICディレクトリ項目22によってアドレスされた4つのセクタS(0、1、2、または3)のうちの1つを同時に、探し出し、関連づけ、選択することができ、対応するFHTセットを選択することができる。AIC行21とそれに関連づけられたAICディレクトリ項目22は、そのセクタ・アドレスのうちのいずれかのセクタ・アドレスが選択されると選択されたと見なされる。
【0059】
IFARが最初にFHT14内の4つの項目24から成るセットを選択すると、FHTセット内の最初のFHT項目FHT(0)が最初に選択される。その後、このセット内のFHT項目の選択は、たとえばFHT(0)−FHT(1)−FHT(2)−FHT(3)の順に選択し、FHT(0)に戻るというように、ラウンド・ロビン方式で行われる。FHT14は、そのFHT項目の場所がAIC内の行アドレスRから直接判断されるため、「直接マップ」される。関連づけられたAICディレクトリ項目がディレクトリ内の同じアドレスRにある。すなわち、行Rのインデックスによってそれに関連づけられたディレクトリ項目を直接選択することができ、関連づけられたFHTセット内の関連づけられた各FHT項目のアドレスを直接計算することができる。
【0060】
好ましい実施形態では、AICには512の行21が含まれる。各行21は4個のセクタを含み、各セクタは8個の命令記憶場所を含み、それによって各セクタにはシステム記憶階層(図示せず)内に記憶された命令の任意のラインからフェッチされた最大8個の命令を記憶することができる。FHT12は、512セットに分割された2048個の項目22を含み、各セットはAIC内のそれぞれの行21に関連づけられた4つの項目を含む。各セット内の4つのFHT項目22は、FHT内の、AIC11内の関連づけられた行21のインデックスによって判断されたインデックス位置に配置される。セット内の4つの項目の場所は、AIC内で関連づけられた行が選択されると決定する。選択された行はAIC内のインデックスRを有し、本明細書では行Rと呼ぶ。行RのインデックスRによって、FHT内のインデックス4*R、4*R+1、4*R+2、および4*R+3にそれぞれ配置された4つのFHT項目を含むそれに関連づけられたFHTセットの場所が決まる。好ましい実施形態で使用される規則は、IFARアドレスにハッシュ・アルゴリズム(従来の技術で周知のキャッシュ行選択技法)を適用し、本明細書で使用する行アドレスRを生成してAICディレクトリ内の行Rを選択するものである。この技法は、従来の技術では「合同(congruence)クラス」キャッシュ行選択と呼ばれることがある。
【0061】
システム・メモリ階層からフェッチされ、AICの1つまたは複数の行にコピーされる各基本ブロックのために「セクタ位置合わせ」機能を備える。この位置合わせは、コピーされた各基本ブロックの最初の命令を常にAICセクタの先頭命令位置、たとえばセクタ内の8個の命令記憶位置のうちの位置1に書き込むことによって行われ、本明細書ではこの位置をセクタの左端であるものとする。基本ブロックは、任意の行の4つのセクタのうちのいずれかのセクタの先頭位置から始まることができる。基本ブロックは、任意の数の命令を有することができ、したがって単一のセクタ内の命令位置の数よりも少ないか、等しいか、より多いことがある。基本ブロックが、セクタの8個未満の位置に記憶される場合、セクタ内の基本ブロックによって使用されない各命令記憶域(その基本ブロックを終わらせる分岐命令の右側にある)は、各未使用命令位置に「無命令」(NOP)コードを書き込むことによって埋められる。基本ブロックがセクタ・サイズと等しい(たとえば8命令)場合、その終わりの分岐命令はセクタ内の最後の命令位置に入れられ、そのセクタにはNOPは書き込まれない。しかし、基本ブロックがセクタを超える(たとえば8以上の命令を有する)場合、その基本ブロックの命令は、基本ブロックがいずれかのセクタで終わるまで、同じAIC行の次の各セクタに順次に記憶される。基本ブロックがその行の最後のセクタを超える場合は、AICの別の行内に続き、(別の行に記憶される基本ブロックの最初の命令の)IFARアドレスは、関連づけられた4個のFHT項目のセット内の選択されたFHT項目内の「次IFARアドレス」フィールドに記憶される。基本ブロックは、AIC内の1つまたは複数の行内の任意の数のセクタを占有することができる。また、基本ブロックは1つの命令(分岐)しか持たないこともでき、その命令はセクタの先頭の位置にのみ配置される。
【0062】
「命令順序づけ」バッファ18は、AICから選択的に出力される命令のセクタを受け取る。セクタは、プログラムが必要とするいずれかの順序でISB18に出力され、命令をプロセッサの実行パイプラインに供給するために任意の実行プログラムが必要とするいずれかの順序で、基本ブロックに命令の順序が与えられる。命令は、プログラムのために実行する必要があり、それらの命令がAIC行内に見つからないときに、オン・デマンドでメモリからフェッチされる。AICには多数の行21が含まれ、各行はセクタ0、1、2、および3を含む。各セクタは8個の命令位置を含み、そこに1〜8命令の一連の命令を記憶することができる。
【0063】
「実行不一致コントロール」19は、(いずれかの実行された分岐命令によって供給された)実ターゲット・アドレスが、分岐予測ユニット17によって供給された対応する予測ターゲット・アドレスと不一致か否かを検出する。コントロール19でこのような不一致が検出されると、プロセッサは、ISBを含めて、実行パイプライン内の実行シーケンスをリセットし、それによってプロセッサが、現行の動作に割り込んで正しいアドレスをIFAR16にロードすることによって、プロセッサ命令ストリームが不一致になった実ターゲット・アドレスまでさかのぼるようにする。したがって、各分岐命令のターゲット・アドレスは、予測された分岐ターゲットを、その分岐命令(プログラム中で最後に実行された基本ブロックを終わらせ、次の基本ブロックのターゲット・アドレスを供給する分岐命令)のプロセッサ実行によって生成された対応する実ターゲットと比較することによって検査される。この比較によって、予測ターゲット・アドレスがそれに対応する実ターゲット・アドレスと不一致の場合、プロセッサにおいて非同期割込み信号が供給され、現行フェッチ・サイクルを終了し、IFARに実ターゲット・アドレスをロードし、命令ストリームを修正されたターゲット・アドレスまでさかのぼる動作403からフェッチ・サイクルを再開する。したがって、プロセッサは常に正しい命令・シーケンスを入手する。ただし、プログラムの命令順序づけにおける誤った予測のためにわずかな時間損失の犠牲は払われる。しかし、統計的研究により、このような予測誤りは比較的まれであることがわかっている。
【0064】
図2に、5フィールドAICディレクトリ項目22が示されている。この項目は、AICディレクトリ項目22内の4つの「セクタ・アドレス」フィールドの各フィールドと、関連づけられたAIC行21内のアドレス指定されたセクタとの有効/無効をそれぞれ示す4ビットを含む、「有効ビット」フィールドを有する。1は対応する「セクタ・アドレス」フィールドとそのアドレス指定されたセクタとが有効であることを示し、0は無効であることを示す。最初は、4つの有効ビットすべてが0に設定され、ディレクトリ項目全体とそれに関連づけられたAIC行のすべてのセクタが無効であることを示す。項目22は、4つの「セクタSアドレス」フィールドも有し、それぞれ、関連づけられたAIC行R内の4つのセクタに対応する。各有効「セクタSアドレス」フィールドには、それに関連づけられたセクタS内の最初の命令の仮想アドレス(またはその固有部分)が、IFARが使用できる形で入れられる。
【0065】
図3に、各FHT項目内のフィールドを示す。これは以下の通りである。
(1)有効フィールド:当該項目が有効(=1)か無効(=0)かを示す1ビット。
【0066】
LRUフィールド:4つのFHT項目から成るそのFHTセット内で当該FHT項目がどの程度最近に使用されたかを以下のように示す2ビット。
最も長期間使用されなかったFHT項目 LRUビット=「00」
2番目に最近に使用されたFHT項目 LRUビット=「01」
3番目に最近に使用されたFHT項目 LRUビット=l「10」
最も最近に使用されたFHT項目 LRUビット=「11」
【0067】
先頭命令アドレス:当該FHT項目がそのために作成された命令シーケンスを開始する命令を有する選択されたAIC行内のいずれかのセクタ内の先頭の命令のアドレス。図4に示す例では、「セクタ先頭命令」フィールド内のUが、セクタ配列シーケンス1、2、0によって表された命令シーケンス内の先頭命令アドレスを示す。Uは、当該FHT項目の行に入れられるシーケンス内の先頭の命令のアドレスである。
【0068】
セクタ分岐結果:このフィールドは4つのサブフィールドを有し、各サブフィールドには同じFHT項目の「セクタ配列」フィールド内のそれぞれのサブフィールドが関連づけられている。たとえば、2番目の「セクタ分岐結果」サブフィールドは、同じFHT項目の「セクタ配列」フィールド内の2番目のサブフィールドで識別されているセクタ内の分岐条件を示す。そのために、各「セクタ分岐結果」サブフィールドに1、0、または*が入れられ、1は識別されているセクタが「成立」分岐で終わることを示し、0は「不成立」分岐で終わることを示し、*は識別されたセクタ内に分岐命令が存在しないことを示す。
【0069】
したがって、各サブフィールドは、同じサブフィールド・インデックスを有する同じFHT項目の「セクタ配列」フィールド内の対応するサブフィールド内にセクタ番号によって識別されているセクタ内の分岐条件を示す。すべてのサブフィールドが有効である必要はなく、有効サブフィールドは、関連づけられた「セクタ配列」フィールド内の最後の有効サブフィールドの後(右)の0などの特殊文字によって表される。したがって、任意のFHT項目内で可変数の分岐を扱うことができ、その数はそのFHT項目が生成された時点で用いられた「m」分岐予測における分岐命令の数によって決まる。
【0070】
セクタ配列:このフィールドには4つのサブフィールドがある。各サブフィールドには、0〜4の数字を入れることができ、0〜3はそれぞれのセクタ0〜3の識別子であり、4は無セクタを示す。サブフィールドの左から右の順序は、現行フェッチ・サイクル中に命令順序づけバッファ(ISB)に転送される識別されたセクタのシーケンスを示す。たとえば、このフィールドにセクタ識別子「1、2、0、4」がある場合、セクタ1、2、および0がこの順序でISBに転送される。最後のサブフィールドの4は、現行フェッチ・サイクル中に(4で表された)最後のサブフィールドについて、ISBに転送される命令がないことを示す。他の例を挙げると、「2321」は、単一フェッチ・サイクル中に、セクタ2、3、2の次に1が(この順序で)ISBに転送されることを示す。
【0071】
次IFARアドレス:このフィールドは、次のフェッチ・サイクルで使用されるIFARアドレスを示す。
【0072】
図4で、セクタに「成立」分岐が入っている場合、その成立経路は、別のセクタの先頭にある分岐のターゲット、または別のAIC行への「成立」と書かれた曲がった矢印で示されている。成立経路は実際には同じAIC行内のいずれかのセクタまたは別のAIC行内のいずれかのセクタの先頭に行く。分岐が「不成立」の場合、図4では不成立経路は次の後続セクタへの水平の矢印で示されている。セクタに分岐が入っている場合、そのセクタ内でその分岐に続く実際の命令がなく、その分岐が成立または不成立であって、セクタ内の最後の命令内にない場合、セクタ内の残りの各命令位置はNOPコードで埋められる。
【0073】
本発明によって行われる各フェッチ・サイクルは、そのアドレスがIFAR16に設定されているプログラム中の命令から開始する。プログラムの少なくともIFAR命令を含む部分が前に実行されていることと、プログラムの過去の分岐履歴がIFAR命令から維持されており、それによって分岐予測ユニット17がプログラムによって実行された過去の「m」個の分岐を示す予測ベクトルを供給することができることを前提とする。その後、分岐予測ユニット17は、IFARアドレスを使用して「分岐結果予測ベクトル」を供給することによって、次の「m」個の条件分岐の予測を行う。このベクトルは、最大「m」ビットのうちの各ビットがプログラム中の分岐のシーケンスを表すビット・ストリングであり、各ビットは分岐成立を表す場合は1状態を有し、分岐不成立を表す場合は0状態を有する。これらの分岐は、プログラム中の基本ブロックの終わりで発生する。
【0074】
本発明は、現行「分岐結果予測ベクトル」を、現行IFARアドレスによって判断されたAIC行Rに関連づけられたFHTセットのFHT項目内の「セクタ分岐結果」フィールドと突き合わせる。ベクトルで予測されている分岐のシーケンスが、FHTセット内のいずれかのFHT項目の「セクタ分岐結果」フィールドで識別されている分岐のシーケンスと同じ場合、FHTヒットが得られる。その場合、関連づけられ行内の複数のセクタを選択して、ヒットFHT項目の「セクタ配列」フィールド内の複数のサブフィールドによって指定された順序でISBにアウトゲートすることができる。ISB内の命令のシーケンスがプロセッサによって実行され、プログラムが必要とする順序であるか否かが検査されて予測の正しさが検証される。
【0075】
本発明の結果、プログラムの実行シーケンス中にある非順次配置命令の高速実行が実現される。すなわち、本発明は、命令順序づけ予測が95パーセント以上の確度を有することを利用し、それによって95パーセント以上の時間にわたり、予測されたシーケンスによって最大「m」個の複数の非順次配置基本ブロックの即時実行が可能になり、従来技術のプロセッサでは必要であったように、実行シーケンス中の非順次配置命令の低速フェッチを待つ必要がない。プログラムによって実行された命令のうちのきわめてわずかな割合の命令を、再実行によって修正するだけで済む。
【0076】
たとえば、現行予測ベクトルに、「m」予測における最初の2つの分岐について「01」が入っており、図のFHTセット内の4つの項目の中で突き合わせFHT項目が「セクタ分岐結果」フィールド「0*1」を有することがわかった場合、突き合わせの目的ではアスタリスク*は無視され、一致があることになる。その場合、この項目内の「セクタ配列」によって、関連づけられたAIC行から「命令順序づけバッファ」(ISB)への命令の出力が制御される。ヒットFHT項目内の「セクタ配列」フィールドに「0124」が入っているものとすると、それによってセクタVおよびU内の命令がこの順序でただちに出力され、現行フェッチ・サイクル中にISBに転送されることになり、これは、システム階層記憶域内のどの場所に非順次に入っているか、異なる命令記憶ラインに入っているかには関係がない。ヒットFHT項目内の「次IFAR命令」は、システム記憶内のどこに記憶されているかに関係なく、AIC内のどこで次に必要な命令セクタが実行のためにただちに使用可能であるかを示す。たとえば、「次IFAR命令」フィールドにアドレスYが入っているとする。その場合、Yはプログラム中の次に実行する命令のアドレスであり、従来の低速な方法で入手するのを待たずに、YがIFARにロードされ、次の命令フェッチ・サイクルを開始するためにIFARをセットする。
【0077】
FHTセットの最初のFHT項目は、セクタが関連づけられたAIC行Rに書き込まれる間に生成され、それによって最初のFHT項目は、そのセクタが順次に(すなわち、その「セクタ配列」フィールドで示された0、1、2、3の順)出力されるべきであることを示す特別なセットアップを有することができる。したがって、このような最初のFHT項目がFHTヒットを有する場合、最初のFHT項目は、0、1、2、3の順のセクタ出力順序を制御する。同じセット内の他のHFT項目は、その「セクタ配列」フィールド内の別の順序でセクタ出力を制御することになる。
【0078】
具体的プロセスの説明
図5から図14に、図1に示すハードウェアにおいて好ましい実施形態によって行われる特定のプロセスについて説明する。
【0079】
図5および図6に、初期設定動作と基本FHT制御動作を示す。最初の動作401で、プログラムはプロセッサでの実行を開始する。そのうちの本発明の新規なプロセッサ部分のみを示す。プロセッサの残りの部分は従来技術に見られるように構成され、動作するものとみなすことができる。次に、動作402で、プロセッサの命令フェッチ・アドレス・レジスタ(IFAR)が、プログラム中で最初に実行される命令の仮想アドレスをその中に設定することによってプログラム中の最初の命令アドレスに設定される。
【0080】
次に、プロセッサは、次の動作403でIFARアドレスを使用し、IFARによってアドレス指定された命令から初めて、プログラム中の次の「m」個の分岐の予測を入手する。この予測動作403には、(本明細書で前述した)「分岐結果予測ベクトル」の入手が含まれる。予測とそのベクトルとを入手するプロセスによって、IFAR内の命令アドレスからプログラムの実行シーケンスで予測された最大「m」個の基本ブロック内の命令をフェッチする試みのための本発明の「フェッチ・サイクル」が開始される。
【0081】
各「分岐結果予測ベクトル」(ベクトル)が、対応する「m」分岐予測内の分岐命令のシーケンスの結果にそれぞれ対応するビットのシーケンスとして生成される。ベクトル内の各ビットの部分は、「m」予測内の対応する分岐命令の部分に対応し、ビットの値は分岐におけるプログラム動作の結果、すなわち、対応する分岐命令が成立と不成立のいずれとして予測されているかを示す。各「m」予測内の基本ブロックは、IFARアドレスと予測された次の「m」個の分岐とによって決まる。したがって、「m」分岐予測最初の基本ブロックは、IFARアドレスにある命令から開始し、予測に含まれる分岐命令のターゲット・アドレスを使用して入手された最大「m」個の基本ブロックを含む。本発明の通常の動作では、IFARアドレスは次に最後のフェッチ・サイクルの終わりに入手される。したがって、「ベクトル」はAICまたはFHTを調べる前に生成される。
【0082】
次に、プロセスは動作404に進み、ハッシュ・アルゴリズム(従来のものとすることができる)でこのIFARアドレスを使用して、AICディレクトリ内のドレスを生成し、IFARアドレスに関連づけられた行Rを探し出す。次に、IFARアドレスを、AICディレクトリ項目R内の4つの「セクタ先頭アドレス」の各セクタ先頭アドレスと突き合わせて一致があるか否かを判断する。一致があれば、対応するAIC行Rの突き合わせセクタ内で「AICヒット」が得られ、次の動作406に入る。一致が見つからない場合は、「AICミス」になり、プロセスは図11の入口点F(図11の表記(F)で示す)に進む。
【0083】
AICヒットが発生した場合、新規な動作406によって、本明細書で前述した、選択されたAIC行Rとそれに関連づけられたFHTセットとの新規な関係を使用して、関連づけられたFHTセットにアクセスし、FHTヒットとミスのいずれが見つかったかが判断される。この判断を行うために、動作406では、FHTセット内のFHT項目の「セクタ分岐結果」フィールドに現行「分岐結果予測ベクトル」との一致がないか探索し、FHTヒットがあるかどうかを判断する。「分岐結果ベクトル」には、AIC行内のセクタ数以下の分岐標識のシーケンスが含まれる。しかし、ベクトルの標識には任意のシーケンスのセクタ番号を入れることができる。
【0084】
(予測における各分岐命令のビットを含む)予測ベクトルとセット内の各有効FHT項目内の「セクタ分岐結果フィールド」との相違点は、各「セクタ分岐結果フィールド」には含まれるキャッシュ・セグメント化に関する情報が、ベクトルには含まれないことである。すなわち、予測ベクトルには、予測における分岐命令をそれぞれ表すビットのシーケンスのみが含まれるのに対し、各「セクタ分岐結果フィールド」には、同じAIC行内の、分岐命令を含まないセグメントに関する情報も含まれる。この相違は、この新規なプロセスのうちの次に説明する各動作に示す突き合わせプロセスで対処される。
【0085】
FHT項目は、そのFHT項目の「セクタ配列」フィールド内の単一のAIC行内のセクタの任意のシーケンスを示すことができ、各セクタは順次配置命令のみを含むことができ、行内の異なるセクタはアウト・オブ・シーケンス命令を含む。各FHT項目の「セクタ配列」フィールドでは特定のセクタ出力シーケンスが示されるのに対し、同じFHT項目内の「セクタ分岐結果」フィールドはこれらの同じセクタの各セクタ内で発生する分岐結果状態(成立、不成立、または非分岐)を示す。他方、ベクトルには、分岐命令を含まないセクタ状態に関する情報が含まれない。したがって、この突き合わせプロセスは、各「セクタ分岐結果」フィールドにある各「非分岐」表示を使用して、同じ項目の「セクタ配列」フィールド内の対応するセクタ標識(FHTヒットと判断された場合にセクタからISBへの命令の出力を制御するために使用される)を無視する。
【0086】
次の動作407で、ヒットFHT項目の「セクタ配列」フィールドと「次行アドレス」フィールドを入手する。「セクタ配列」フィールド内で、「セクタ標識」サブフィールドに左から右の順に順次にアクセスする。アクセスされた各「セクタ標識」サブフィールドに格納された各セクタ番号を使用して、現在選択されているAIC行内の指示されたセクタを選択し、フィールド内でリストされている順にアウトゲートする。アウトゲートされたセクタは、そのセクタに含まれている命令をISBに送り、ISBがプロセッサの実行パイプラインに供給する。選択されたAIC行からアウトゲートされるこのFHT順序化セクタによって、AIC行内の基本ブロックを実行のために任意のセクタ順序で出力することができる。セクタのアウトゲートは、「セクタ配列」フィールドのサブフィールドの走査中に終わりまたは特殊文字に達すると停止する。
【0087】
次に、動作408で、FHT項目のLRUフィールド内のLRUビットを、このFHT項目がそのFHTセット内で最も最近に使用された項目であることを示すように調整する。
【0088】
次に、動作409で、IFAR内のアドレスを現行FHT項目の「次IFARアドレス」フィールドに格納し、このプロセスが別のAIC行内で予測実行シーケンス中の次の命令を探し出すことができるようにする。次に、この命令順序づけプロセスは動作403に再び入り、IFAR内に設定された新しい命令アドレスに基づいて次の「m」分岐予測を入手する。
【0089】
選択されたAIC行内のすべてのセクタを、「セクタ配列」フィールドの制御下で任意のシーケンスでアウトゲートすることができるが、行のすべてのセクタより少ない数のセクタをアウトゲートすることもでき、この数は1セクタという少ない数であってもよい。したがって、各「セクタ配列」フィールド中で少なくとも1つの「セクタ標識」サブフィールド(左端)が使用され、最大ですべての「セクタ標識」サブフィールドを使用することができる。「セクタ配列」フィールドの1つまたは複数のサブフィールドに特殊文字をコード化して、アウトゲートしないセクタを示すことができる。したがって、FHT「セクタ配列」フィールド内でアウトゲートに使用される「セクタ標識」フィールドの数は変動可能である。
【0090】
セクタのアウトゲートが完了した後、IFARは「次行アドレス」に格納されているアドレスに設定されてから、プロセスは動作403に戻り、このプログラムのために次に実行する命令を含む別のAIC行からアクセスする。この次IFARアドレスによって、次の「フェッチ制御サイクル」が可能になる。
【0091】
本発明の動作は、前述したような方式で各サイクルが次の「m」予測によって開始される連続したフェッチ制御サイクル中にAICヒットとFHTヒットが発生した場合に最も速くなる。したがって、ヒットのある各フェッチ制御サイクルによって、最速プロセッサ命令実行のために、AICからプロセッサの実行プロセスに複数の命令の非順次配置基本ブロックをただちに供給することができる。
【0092】
動作404でAICミスが発生した場合、プロセスは図7に進み、動作501を実行する。図7の動作501で、セクタ・カウントSを0(ゼロ)に設定して、選択されたAIC行Rの最初のセクタを示す。Sは、現行AIC行R内の先頭(左端)セクタを選択するように、最初は0に設定される。また、ベクトル分岐カウントBも0に設定され、「分岐結果予測ベクトル」内の先頭ビットを指すインデックスを示す。Bのこの最初の設定は、IFAR内の現行アドレスにある命令に続く最初の分岐命令を表すベクトル内の先頭ビットの位置を示す。Bは、分岐成立か不成立かを示すセクタ・サブフィールドと比較されるベクトル・ビットの位置を示すが、このベクトル・ビットは比較プロセスでスキップされる非分岐命令標識を含むセクタ・サブフィールドとは比較されない。
【0093】
次に、動作502で、たとえばハッシュIFARアドレスを使用して、AIC行Rを選択する。また、この動作では、それに関連づけられたFHTセットも選択し、そのセット内の4つのFHT項目がすべて無効化される。
【0094】
次に、動作503で、関連づけられたFHTセット内の最初の項目FHT(0)を現行FHT項目Fとして選択する。次に、動作504で、選択された「最初の」FHT項目Fの「先頭命令アドレス」フィールドにIFARアドレスを格納して、このFHT項目が再び使用される場合にセクタ0が最初にISBに出力されるセクタであることを示す。
【0095】
好ましい実施形態は、AICミス時に、セットのうちの最初のFHT項目であるFHT(0)のみが生成される。FHTミス時に、セット内の他のFHT項目FHT(2)...FHT(FT)のうちのいずれかが生成される。合計FHT項目数FTは、経験に基づいて決定された数であり、FTの値が高いほど、関連づけられたAIC行の各FHTセット内で表すことができる実行シーケンスの数が多く、FHTセット内でいくつかのFHT項目が使用されない可能性も高くなるということを考慮している。FTの値が低いほど、FHTミスが発生する可能性が高くなり、その結果、本発明の使用で得られるプログラム実行効率が低下する。直接マップFHTのFTの値は、FHT項目数をAIC内の行数で割ることによって得ることができる。この場合、FHT内の項目数はAIC内の行数の整数倍である。次に、それぞれのAIC行(AIC内のインデックスRの位置にある)に、FHTインデックスF*R、F*R+1、F*R+2、...F*R+(FT−1)位置に配置されたFHT項目を含むFHTセットを関連づける。これらのFHT項目はFHT項目F(0)、F(1)...F(F)として示すことができる。好ましい実施形態では、FT=4であり、それによってAIC内の各行に4つのFHT項目が関連づけられ、これらはFHT項目FHT(0)、FHT(1)、FHT(2)、およびFHT(3)のFHTインデックス4*R、4*R+1、4*R+2および4*R+3位置に配置される。現在選択されているFHT項目をFHT項目Fと呼ぶ。
【0096】
動作506で、システム・メモリ階層内のメモリ・ラインから、IFAR内のアドレスで位置指定された命令を(IFARアドレスから開始して)順次にフェッチする。フェッチは、分岐命令が検出されるまで、またはラインの終わりに達するまで、そのメモリ・ラインで続けられる。「セクタ分岐制御ビット」HをH=1に設定して現行セクタ内で分岐命令が検出された時を示すことができる。または、セクタ内で分岐命令が検出されなかったときはH=0に設定する。したがって、最大LT(各セクタ内の命令記憶位置の数)がメモリ・ラインから現行セクタにコピーされる。LT数より少ない命令がセクタにコピーされた場合、セクタ内の分岐命令の右側にある残りの各命令場所にNOPコードが書き込まれる。命令カウントLは、セクタ内にコピーされた命令の数をカウントする。NOPはカウントLから実行され、分岐制御ビットHは、セクタに分岐命令が含まれているかいないかを示す。
【0097】
動作508で、フェッチされた命令がISBと、選択されたAIC行R内のS番目のセクタの両方にコピーされる。その際、その先頭セクタ0がフェッチされた最初のブロックを受け入れる。Sが最初のFHT項目を生成するプロセスを通して各反復時に1つずつ増分されるため、セクタはフェッチされた命令をコピーするために0、1、2、3の順に選択される。たとえば、好ましい実施形態では8個の命令位置(LT=8)のセクタ・サイズを有し、1つのセクタに8未満の命令が書き込まれる場合(L<8)、分岐命令とセクタの右側との間のセクタの命令地位にNOP埋込みが行われ、それによって1〜8個の命令から成る命令シーケンスが、常にAICの行内のセクタの左側に位置合わせされるようになる。
【0098】
次に、動作509で、IFARアドレスを選択されたAICディレクトリ項目Rの「セクタ1アドレス」フィールドに格納する。
【0099】
次に、プロセスは図9に進み、関連づけられたFHTセット内の選択されたFHT項目Fを部分的に生成して、現行FHT項目Fで表されるシーケンス内の現行セクタSを表す。
【0100】
動作601で、現行FHT項目Fの「セクタ配列」フィールド内のS番目のサブフィールドにSを格納する。これによって、AIC行のセクタ0内の命令が、このFHT項目によって示される出力シーケンスで出力される最初のセクタとして示される。
【0101】
動作601で、現行セクタ・カウントSを、生成する現行FHT項目の「セクタ配列」フィールドのS番目のサブフィールドに格納する。このセクタ・カウントSは、同じFHTセット内の「セクタ配列」フィールドと「セクタ分岐結果」フィールドの両方でサブフィールド・インデックスとして使用される。いずれのAIC行内でも、命令は、メモリ内にある「場所シーケンス」ではなく、プログラムの基本ブロックの「実行シーケンス」でメモリからフェッチされ、選択されたAIC行のセクタに書き込まれる。行に書き込まれるこのセクタ順序は、その行のFHTセット内の最初のFHT項目の「セクタ配列」フィールドに反映され、それによって、プログラム内の同じシーケンスの後続の実行を最初のFHT項目によって識別することができるようになり、それによってそのシーケンスでISBに迅速に出力することができる。たとえば、好ましい実施形態では、FHTセット内の最初の各FHT項目によって、セクタ出力順序が0、1、2、3として識別される。
【0102】
次に、動作602で、セクタS内に分岐命令が格納されているか否かを判断する。これは、「セクタ分岐制御ビット」Hが、セクタSに分岐命令が格納されていることを示すH=1に設定されているか否かを調べることによって行うことができる。1に設定されている場合、次の動作は604である。したがって、ビットHの状態は、現行セクタSについて分岐命令または非分岐命令が検出されたか否かを示す。
【0103】
Hが1ではないと判断された場合、H=0であり、セクタS内で分岐が検出されなかったことを示し、動作603が行われる。動作604でIFAR内のアドレスにカウントLを加えて新しいIFARアドレスを入手する。
【0104】
動作606(H=0の場合に入る)で、現行FHT項目F内の「セクタ分岐結果」フィールド内のS番目のサブフィールドにアスタリスク(*)を格納する。次に、動作607で、カウントSを1だけ増分してカウントSの次の値を得る。好ましい実施形態では、「セクタ分岐結果」フィールドのサブフィールドにアスタリスク(*)が格納され、同じFHT項目の「セクタ配列」フィールド内の同じサブフィールド・インデックスを有する対応するサブフィールド内のセクタ番号によって識別されているセクタ内に分岐命令が存在しないことを示す。
【0105】
H=1の場合、動作604が行われる。これまでのところ、プロセスはセクタS内に分岐命令が存在することを知っているが、その分岐が成立したか否かはまだ知らない。これは、次に現行「分岐結果予測ベクトル」内の現行インデックスB位置にあるビットを検査することによって判断され、このビットはこの同じ分岐命令の成立状態または不成立状態を表す。インデックスBにあるビットが1状態の場合、分岐は成立と予測され、「セクタ分岐結果」フィールドの現行サブフィールドSに1が格納される。次に、IFARがこの分岐成立命令のターゲット・アドレスに設定される。しかし、インデックスBのビットが0状態の場合、分岐は不成立と予測され、このサブフィールドSに0が格納されて不成立条件が示される。その場合、IFARが現行カウントLだけ増分され、分岐不成立のAIC行内の次の順次セクタから始まる命令のアドレスを得る。
【0106】
Bのビットが使用された後、インデックスBを1だけ増分して次のベクトル・ビットを位置指定する。次に、この行内の次のセクタにアクセスするためにセクタ・カウントSを1だけ増分する。
【0107】
次の動作608で、行内の最後のセクタが使用されたか否かを判断する。各AIC行内には4つのセクタ(すなわちセクタ0、1、2、3)があるため、最上位セクタは3であり、最後のセクタが完了した後で次に高い番号4に増分する。(一般に、STが各行内のセクタの合計数である場合に、最後のセクタが使用された後SがST+1に増分されることになる場合、SがST+1と等しいか否かが検査される。)
【0108】
したがって、Sが4と等しくない場合、行内で少なくとも1つのセクタがまだ使用されておらず、動作611が行われ、IFARアドレスが現在アクセスしている「メモリ・ライン」と照合されて、次のセクタの命令が含まれているか否かを判断する。S=4の場合、このAIC行にはそれ以上セクタが残っておらず、動作612が行われる。
【0109】
動作611で、メモリ・ラインに現行IFARアドレスが入っていない場合、そのIFARアドレスを有する別のメモリ・ラインにアクセスする。次に、プロセスは図8の(入口Cを有する)動作506に戻る。
【0110】
動作612で、現行FHT項目の処理が終わりになり、LRUフィールド内のビットが設定されて、それが最も最近に使用されたFHT項目であることが示される。次に、動作614で、「最初の」FHT項目内の「次IFARアドレス」フィールドを設定し、その「有効」フィールドも設定して、この項目が現在有効状態を有し、したがって図5に示すプロセスで使用できるようになったことを示し、次に入口(C)を有する動作403に入る。
【0111】
図5の動作406で、AICヒットの後にFHTミスが発生した場合、図11および図12のプロセスに入ることによって新しいFHT項目を生成する必要がある。
【0112】
図11の動作701で、IFARによって現在アドレス指定されている命令が入っている現行AIC行に関連づけられたFHTセット内の無効FHT項目を見つける。(関連づけられたFHTセットは、FHT内のインデックス4*R、4*R+1、4*R+2、4*R+3位置にある。この場合4はFHTセット内の項目数である。)この無効FHT項目は次に処理するFHT項目として選択される。FHTセット内に複数の無効FHT項目が存在する場合、それらのうちのいずれでも選択することができるが、ここではラウンド・ロビン選択技法を使用するものとする。FHTセット内に無効FHT項目が存在しない場合、セット内の有効項目のうちの最も長期間使用されなかった(LRU)項目を選択する動作702が行われ、それが選択され、無効化され、その後、新しいFHT項目として生成されるセット内の現在選択されている無効FHT項目Fとして使用される。
【0113】
動作703で、この無効FHT項目を「現行FHT項目F」として選択する。次に、サブフィールド・カウントCを0に設定して、FHT項目内の「セクタ配列」フィールドと「セクタ分岐結果」フィールド内の最初のサブフィールドを位置指定する。また、セクタ・カウントSも0に設定して、関連づけられたAIC行R内の最初のセクタを位置指定する。
【0114】
動作704で、IFARアドレスをFHT項目内の「先頭命令アドレス」フィールドに設定することによって、選択されたFHT項目Fの生成を続ける。また、FHT項目のLRUフィールドも設定して、この項目がそのセット内で最も最近に使用されたことを示す。
【0115】
次に、動作706で、項目内の「セクタ配列」フィールドのC番目のサブフィールドにカウントSを格納する。次の動作707で、AIC行S内のセクタSを選択し、その命令をISBに出力し、セクタSからの出力命令数のカウントLを生成する。
【0116】
動作708から始まる、FHTミス・プロセスにおける後続の動作では、FHT項目にサブフィールドを格納する。動作708、711、712、および714は、前述の図9の動作602、603、606、および604と同様である。
【0117】
次の動作708で、「セクタ分岐制御ビット」Hの状態を検査することによってセクタSに分岐命令が格納されているか否かを判断することができる。このビットHは、現行セクタS内の命令がISBに転送されていたときに分岐命令が検出された場合はH=1に設定されており、分岐命令が検出されない場合はH=0のままである。
【0118】
H=0の場合は、セクタS内に分岐命令が検出されなかったことを示し、動作711でIFARにカウントLを追加して新しいIFARアドレスを得る。
【0119】
H=0の場合、次に動作712に入り、現行FHT項目F内の「セクタ分岐結果」フィールド内のC番目のサブフィールドにアスタリスク(*)を格納する。次に、図13の動作801で、カウントCを1だけ増分してカウントCの次の値を得る。好ましい実施形態では、「セクタ分岐結果」フィールドのサブフィールドにアスタリスク(*)を格納して、同じFHT項目内の同じサブフィールド・インデックスを有する対応する「セクタ配列」サブフィールド内のセクタ番号によって識別されたセクタ内に分岐命令が存在しないことを示す。
【0120】
H=1の場合、動作714が行われる。これまでのところ、プロセスはセクタC内に分岐命令があることは知っているが、その分岐が成立したかどうかはまだ知らない。これを、次に、現行「分岐結果予測ベクトル」内の現行インデックスBにあるビットの検査によって判断し、この予測ビットはその同じ分岐命令の成立状態と不成立状態のいずれかを示す。インデックスBのビットが1状態の場合、分岐は成立すると予測され、「セクタ分岐結果」フィールドの現行サブフィールドCに1が格納される。次に、IFARがこの分岐成立命令のターゲット・アドレスに設定される。しかし、インデックスBのビットが0状態の場合、分岐は不成立と予測され、このサブフィールドCに0が格納されて不成立条件が示される。次に、IFARが現行カウントLだけ増分されて、この不成立分岐のためにAIC行内の次の順次セクタから始まる命令のアドレスが得られる。
【0121】
Bのビットを使用した後、インデックスBを1だけ増分して次のベクトル・ビットを位置指定する。次に、図13の動作801で、現行カウントCを1だけ増分する。Cの値は、FHT項目Fのフィールド内のサブフィールドを位置指定する。関連づけられた行R内のセクタの左から右の順に基本ブロックが実行順序で書き込まれたために、FHTセット内の前に生成された「最初の」FHT項目には、その「セクタ配列」フィールドのサブフィールド内に順次に順序づけされたセクタ番号(1、2、3など)が入っていることに留意されたい。しかし、「後の」各FHT項目は、後のFHT項目によって古くなったことによって最初のFHT項目が無効化されていない限り、関連づけられた同じ行Rの「セクタ配列」フィールドで異なるセクタ・シーケンスを有するように生成されることがある。さらに、「分岐フェッチ・カウント」の現行の設定Bは、FHT項目によって現行行Rの現行セクタSから出力される基本ブロックを終わらせる予測分岐命令の「結果予測ベクトル」内の「成立/不成立」ビットを位置指定する。しかし、ビットBの現行の設定は、関連づけられた行R内のどのセクタに(ある場合)この分岐命令が入っている可能性があるかを示さない。
【0122】
次に、「セクタ配列」フィールドと「セクタ分岐結果」フィールド内の次のC番目のサブフィールドを、増分されたC値を使用して、現在選択されているFHT項目F内のこれらの各フィールド内の次のサブフィールドを位置指定するように準備することになる。ただしこれは、4つのセクタすべてを、このFHT項目Fのセクタの出力シーケンスになっているかどうかについて検査し終わっていることを条件とする。したがって、Cの現行値を検査してCの許容最大数値を超えたかどうか調べる。この最大値は、Cの最初の値がゼロであるため3である。次に、ステップ802で、Cを4と比較する。Cが4に等しい場合、現行AIC行R内のすべてのセクタを調べ終わっており、動作804を行う。しかしCが4に等しくない場合、現行AIC行R内に調べるべきセクタが他に少なくとも1つ残っており、動作803を行う。
【0123】
すべてのセクタを調べ終わった場合、次に動作803を行う。動作803では、AICディレクトリ項目Rにアクセスして、そのディレクトリ項目に現行IFARアドレスを有する「セクタ先頭アドレス」フィールドがあるかどうかを調べる。ディレクトリ項目フィールドのいずれかがIFARアドレスと等しい場合、その「セクタ先頭アドレス」フィールドのセクタ番号は、関連づけられた行R内に見つかる命令の実行可能シーケンスの次のセクタのS値を示す。
【0124】
見つかった場合、動作807で、セクタ・カウントSをステップ803で見つかったSの値に設定し、図11の動作706を行って、このS値を選択されたFHT項目Fの「セクタ配列」フィールド内のC番目のインデックスにある現行サブフィールドに設定し、以下、図11および図12の各動作について前述したのと同様の操作を行う。
【0125】
動作803で、一致する「セクタ先頭アドレス」フィールドが見つからなかった場合、動作806を行い、FHT項目Fの「セクタ配列」フィールドの現行のC番目のサブフィールドに0を格納し、「セクタ分岐結果」フィールド内のC番目のサブフィールドにアスタリスク*を格納する。次に、動作808でCを1だけ増分し、次に、増分されたCを動作809で検査して、最後のサブフィールドCが生成されたかどうかを判断する。生成されていない場合、残りのサブフィールドをアスタリスク*で埋めて、それらのサブフィールドがいかなる動作も行わないことを示す。これは、動作806に戻って、アスタリスクを埋め込むことによって行い、これをステップ809ですべてのサブフィールドが処理されたと判断されるまで続けた後、プロセスは動作811に進む。
【0126】
動作811で、有効ビット・フィールドを1に設定して、現行FHT項目Fの有効状態を示す。また、IFARも、現行FHT項目F内の「次IFARアドレス」フィールドに入っている現行IFARアドレスによって位置指定されている次の命令のアドレスに設定し、それによって、いずれかのAIC行に次に実行する命令(現在IFARによってアドレス指定されている)が含まれている場合に次のAIC行を見つけることができるようにする。
【0127】
FHT項目の生成はこれで完了し、現行フェッチ・サイクルが完了する。次に、プロセスは図5の動作403に戻り、次のフェッチ・サイクルを開始する。プログラム中で次に実行する命令はIFARにある。
【0128】
いずれのFHTセットでもすべてのFHT項目内の「セクタ配列」サブフィールドが同じ先頭セクタ、すなわちセクタ0を有するため、上述の実施形態には順序づけの制約がある。したがって、いずれのセット内でもすべてのFHT項目が、その「セクタ配列」フィールドおよび「セクタ分岐結果」フィールド内の先頭サブフィールド(すなわちC=0の場合)に同じIFARアドレスを使用して同じ先頭セクタを識別するが、任意のセット内のこれらのFHT項目は、先頭サブフィールドの後の他のサブフィールドを指定する際に(すなわち、サブフィールド1、2、および3についてそれぞれC=1、2、または3の場合)、順序づけに完全な柔軟性がある。
【0129】
しかし、完全な順序づけの柔軟性は、好ましい実施形態で示したAIC行ディレクトリの代わりに、またはそれに加えて、セクタ・ディレクトリ(図示せず)を使用する異なる実施形態によって得られる。このようなセクタ・ディレクトリには、好ましくはアドレス順に格納されたすべての「セクタS先頭アドレス」フィールド(AICディレクトリ内のすべての行について示す)が含まれる。セクタ・ディレクトリ内の各アドレスは、AIC内の関連づけられたセクタの記憶域である引数を有する。IFARアドレスは、セクタ・ディレクトリの「セクタS先頭アドレス」フィールドを探索し、等しい条件があればIFARヒットになり、関連づけられたAIC記憶位置を使用してそれをアウトゲートする。
【0130】
まとめとして、本発明の構成に関して以下の事項を開示する。
【0131】
(1)プログラム中の分岐命令および結果の分岐ターゲット命令の実行によって生じる時間損失を低減するプロセッサ装置であって、
前記プロセッサ装置による実行のためにメモリ内の非順次記憶場所からフェッチされた命令ブロックのグループを受け取って格納する命令キャッシュ(Iキャッシュ)と、
前記命令が前記プログラムの前の実行中またはコンパイル中に分岐履歴を入手したときに前記プログラム内でフェッチするためにアドレス指定されている命令の直後の複数の分岐命令の分岐結果を予測する分岐命令予測ユニット(予測ユニット)と、
前記Iキャッシュに格納された命令ブロックの実行履歴シーケンスを記録するFHT項目を含むフェッチ履歴テーブル(FHT)と、
前記FHT項目のうちの1つのFHT項目の制御下で前記命令ブロックを前記Iキャッシュから実行要素に出力し、前記実行要素による実行のために前記記録された履歴シーケンスで前記命令ブロックを供給するゲートとを含むプロセッサ装置。
(2)前記プログラムの実行中に前記予測ユニットへの命令アドレスの入力に応答して、前記予測ユニットによって提供される分岐結果予測ベクトルと、
前記分岐結果予測ベクトルの少なくとも一部と一致する分岐結果フィールドを含む有効FHT項目を選択するFHT項目選択および始動コントロールと、
前記FHT項目選択および始動コントロールに応答して、前記FHT項目に記録された前記履歴シーケンスで前記Iキャッシュから命令を受け取る命令順序づけバッファとをさらに含む、上記(1)に記載のFHTを使用するプロセッサ装置。
(3)前記FHT項目内の前記履歴シーケンスで示されたすべてのブロックが前記命令順序づけバッファに出力された時点を判断して前記プログラムの現行フェッチ・サイクルを終了させるフェッチ・サイクル完了コントロールと、
前記プロセッサ装置の次のフェッチ・サイクルを開始するための次の予測を行うために前記FHT項目の前記履歴シーケンスによって示された最後の分岐命令のターゲット・アドレスを受け取る前記予測ユニットとをさらに含む、上記(2)に記載のFHTを使用するプロセッサ装置。
(4)前記Iキャッシュに格納されたブロックのそれぞれのグループに関連づけられ、前記グループ内の前記ブロックの実行の特定の履歴シーケンスを示す前記FHT内の各FHT項目をさらに含む、上記(3)に記載のFHTを使用するプロセッサ装置。
(5)前記Iキャッシュに格納されたブロックのそれぞれのグループに関連づけられた前記FHT内の複数のFHT項目のセットと、
前記それぞれのグループ内の前記ブロックの実行の異なる履歴シーケンスを示す前記セット内の各FHT項目とをさらに含む、上記(4)に記載のFHTを使用するプロセッサ装置。
(6)前記グループの前記ブロックが前記Iキャッシュに格納されるときにグループ内の前記ブロックの実行のシーケンスを記録する前記セット内の第1のFHT項目と、
ブロックの前記グループが前記Iキャッシュに書き込まれた後で行われる前記プログラム中の前記ブロックの実行の異なる履歴シーケンスを記録する前記グループ内の他の各FHT項目とをさらに含む、上記(5)に記載のFHTを使用するプロセッサ装置。
(7)前記FHT項目内の前記履歴シーケンスを記録するために各FHT項目内に設けられたブロック・シーケンス・フィールドをさらに含む、上記(1)に記載のFHTを使用するプロセッサ装置。
(8)前記Iキャッシュ内に構成され、各セクタが、前記プログラムの全部または一部を含むメモリまたはバッファから受け取ったシーケンスで命令を格納する固定数の記憶位置を含むセクタを含み、
各セクタが前記プログラム内の命令の基本ブロックの全部または一部を記憶する容量を有し、各基本ブロックが、前記Iキャッシュに格納されるときにセクタ内の先頭記憶場所から始まり、前記基本ブロックが同じセクタ内または別のセクタ内の記憶場所で終わり、前記Iキャッシュ内に格納されている基本ブロックが1つまたは複数のセクタ内の任意の数の命令位置を占有し、そのうち、各基本ブロックがセクタの少なくとも最初の命令位置を占有し、それによって前記Iキャッシュに格納された各基本ブロックがセクタの所定の側に位置合わせされる各セクタと、
セクタ内の各未占有命令位置に格納されるノー・オペレーション・コード(nop)であって、それによって前記Iキャッシュが位置合わせ命令キャッシュ(AIC)として構成されるノー・オペレーション・コード(nop)とをさらに含む、上記(1)に記載のFHTを使用するプロセッサ装置。
(9)複数の行として構成された前記Iキャッシュであって、各行が複数の前記セクタを含み、各セクタに前記プログラムの1つの基本ブロックのみの命令が格納され、前記Iキャッシュに格納された各基本ブロックがセクタ内のセクタ位置合わせ記憶場所から始まり、前記基本ブロックが前記セクタを超える場合、前記基本ブロックの終わりに達するまで前記基本ブロックを各セクタ内まで続けさせるが、前記基本ブロックが前記行の終わりを超えて続く必要がある場合は、前記行を超える最初の命令の命令アドレスを使用して別の行を位置指定し、前記基本ブロックが前記Iキャッシュ内のいずれかのセクタ内で終わるまで前記基本ブロックを前記別の行の最初のセクタおよび必要な連続したセクタ内に続ける前記Iキャッシュと、
最後の基本ブロックの終わりに分岐成立命令がある場合はターゲット分岐命令を使用してアクセスされる前記Iキャッシュ内の次のセクタであるが、前記次のセクタは、最後の基本ブロックの終わりに分岐不成立命令があるかまたは現行基本ブロックのためにアクセスされた最後のセクタに分岐命令がない場合は次に続くセクタ場所にあるセクタである次のセクタと、
所定数のセクタ内に前記プログラムの命令の実行シーケンスを含む前記Iキャッシュ内のセクタのシーケンスを示す各FHT項目内に格納されたセクタ配列情報と、
セクタ・アドレス・フィールドを有するディレクトリ項目を含むIキャッシュ・ディレクトリであって、前記セクタ・アドレス・フィールドに前記Iキャッシュ内の前記セクタがそれぞれ関連づけられ、各セクタ・アドレス・フィールドが前記関連づけられたセクタ内に格納されたいずれかの最初の命令のアドレスを受け入れ、前記セクタ・アドレス・フィールドが前記ディレクトリ内に見つかった場合は前記関連づけられたセクタに前記Iキャッシュ内の前記命令が含まれているため、前記Iキャッシュ・ディレクトリ内のいずれかのセクタ・アドレス・フィールに前記プログラム命令アドレスが含まれているか否かを判断することによって、後で使用されるプログラム命令アドレスが前記アドレスを有する前記命令を含むいずれかのセクタを位置指定することができるようにするIキャッシュ・ディレクトリとをさらに含む、上記(1)に記載のFHTを使用するプロセッサ装置。
(10)同じFHT項目の前記セクタ配列情報で示された各セクタの前記分岐結果として「分岐成立」または「分岐不成立」または「セクタ内に分岐命令なし」のうちのいずれか1つを示す各FHT項目内に格納されたセクタ分岐結果情報をさらに含む、上記(9)に記載のFHTを使用するプロセッサ装置。
(11)前記予測ベクトルに現行プログラム実行アドレス(プログラム・アドレス)の直後の前記プログラム中の基本ブロックのシーケンスの分岐結果予測を表す状態を有するビットが含まれている前記プログラム・アドレスにある予測分岐結果ベクトル(予測ベクトル)を生成する前記予測ユニットと、
前記予測ベクトルに分岐命令を含まないセクタに関する情報が含まれていない場合に、検出操作に前記「セクタ内分岐命令なし」の結果標識を無視させることによって前記予測ベクトルの少なくとも最初の部分が前記FHT内のFHT項目内の前記セクタ分岐結果情報と等しいか否かを検出する論理回路と、
前記論理回路が前記FHT項目内の前記セクタ分岐結果情報に等しいものを検出した場合に、前記FHT項目内の前記セクタ配列情報によって示されたシーケンス内の前記FHT項目の前記セクタ配列情報で識別されている各セクタから前記命令を受け取る前記実行要素とをさらに含む、上記(10)に記載のFHTを使用するプロセッサ装置。
(12)前記FHT項目で順次に示された前記セクタから前記命令を受け取り、前記命令を受け取った順序で前記実行ユニットに転送する命令順序づけバッファをさらに含む、上記(11)に記載のFHTを使用するプロセッサ装置。
(13)前記FHT内の各FHT項目内の同じフィールドに格納された前記セクタ配列情報と前記セクタ分岐結果情報とをさらに含む、上記(11)に記載のFHTを使用するプロセッサ装置。
(14)前記FHT内の各FHT項目内の異なるフィールドに格納された前記セクタ配列情報と前記セクタ分岐結果情報とをさらに含む、上記(12)に記載のFHTを使用するプロセッサ装置。
(15)前記Iキャッシュ内の命令を含むセクタのグループの履歴シーケンスを格納する各FHT項目内のセクタ配列フィールドと、
前記FHT項目内の前記セクタ配列フィールドで示された各ブロックについて成立または不成立の条件を含む結果を記録する各FHT項目内に設けられた分岐結果フィールドとをさらに含む、上記(1)に記載のFHTを使用するプロセッサ装置。
(16)各行が所定数のセクタを含み、各行が前記Iキャッシュ内の固有の場所を有する、前記Iキャッシュを構成する複数のIキャッシュ行と、
FHTセット内の各FHT項目が前記Iキャッシュ内の関連づけられたIキャッシュ行の場所によって決定する前記FHT内の場所を有する、前記FHT内に固有に配置されたFHT項目の複数のFHTセットとをさらに含む、上記(12)に記載のFHTを使用するプロセッサ装置。
(17)各FHTセット内に設けられた所定セット数のFHT項目と、
前記所定セット数と前記Iキャッシュ内の関連づけられたIキャッシュ行のインデックスとによって計算される前記FHT内の各FHTセットのインデックスとをさらに含む、上記(16)に記載のFHTを使用するプロセッサ装置。
(18)前記FHT内の各FHT項目内に構成され、前記FHT項目が前記Iキャッシュを制御するために使用可能であることを示す有効フィールドと、
各FHT項目内に構成され、前記セット内のどの項目が最長期間不使用(LRU)であり、次の置換候補であるかを示す置換フィールドとをさらに含む、上記(17)に記載のFHTを使用するプロセッサ装置。
(19)前記関連づけられたFHT項目内の前記シーケンス情報によって示された前記実行シーケンスで最初に出力すべき前記関連づけられたAIC行のセクタ内の最初の命令のアドレスを示す、各有効FHT項目内の先頭命令フィールドをさらに含む、上記(18)に記載のFHTを使用するプロセッサ装置。
(20)前記FHT項目内で示された前記セクタ・シーケンス内の最後の命令の後に続くべき(前記プログラム実行シーケンス中の)命令のアドレスを示す、各有効FHT項目内の次命令アドレス・フィールドをさらに含む、上記(19)に記載のFHTを使用するプロセッサ装置。
(21)プログラムの前の実行の実行履歴を使用して、コンピュータ・システム内に記憶されたプログラムの複数の基本ブロックから入手した命令の実行のために即時に順序づけするプロセッサ方法であって、
各フェッチ・サイクルが前記プログラムの最大「m」個の複数の基本ブロックに含まれる命令を実行のために順序づけすることができる、フェッチ・サイクルを使用して実行のために前記プログラムの命令を順序づけするステップと、
入口アドレスとターゲット・アドレスがそれぞれフェッチ・サイクルのサイクル開始アドレスであり、最初はプログラム内の入口アドレスでありその後は前のフェッチ・サイクル中の最後の分岐命令から入手したターゲット・アドレスである命令アドレスを使用して、プログラム実行が完了するまで各フェッチ・サイクルを開始するステップと、
予測ベクトルが状態ビットのストリングを含み、各状態ビットが前記プログラム実行シーケンス内で次に発生すると予測された「m」個の分岐命令の各分岐命令の成立状態または不成立状態を示す、前記開始アドレスを使用して各フェッチ・サイクルの最初に予測ベクトルを入手するステップと、
位置合わせIキャッシュ(AIC)ディレクトリ内で前記サイクル開始アドレスを探索し、(関連づけられたAIC内の)いずれかのAIC行が前記サイクル開始アドレスを有する命令を含むか否かを判断し、AIC行内のAICセクタ内に前記命令が見つかった場合はAICヒットを示すが、前記AIC内に前記命令が見つからない場合はAICミスを示すステップと、
AICヒットが示された場合、見つかった前記AIC行に関連づけられたFHT内のFHT項目のフェッチ履歴テーブル(FHT)セットを探し出すステップと、
前記予測ベクトルを前記探し出したFHTセットのFHT項目内の「セクタ分岐結果」情報と比較し、FHTヒットを有する前記FHTセット内のいずれかのFHT項目を選択し、前記セット内のいずれのFHT項目にもFHTヒットがない場合にはFHTミスが発生するステップと、
FHTヒットが発生した場合、前記FHT項目の「セクタ配列」情報で示されたシーケンスで前記セクタの出力を制御することによって、前記FHT項目内の前記「セクタ配列」情報で示されたAICセクタ内の命令を実行のために出力するステップとを含むプロセッサ方法。
(22)各AIC行が所定数のセクタを含み、各セクタが所定数の命令記憶位置を有し、AICミスが発生した場合、前記サイクル開始アドレスを使用して前記AICディレクトリ内で前記AIC行に関連づけられたディレクトリ項目を選択するステップと、
前記FHT内で選択された前記AIC行に関連づけられたFHT項目を選択するステップと、
将来の使用のための選択された前記AIC行と選択された前記FHT項目のセットアップに備えて、選択された前記AIC行を無効化し、選択された前記FHT項目を無効化するステップと、
前記コンピュータ・システムの記憶階層内の前記フェッチ・サイクル開始アドレスにある命令を含むメモリ・ラインを探し出すステップと、
前記メモリ・ライン内の前記サイクル開始アドレスにある命令のフェッチを開始し、前記フェッチされた命令を、前記セクタの位置合わせ命令位置から始まって前記行内の最初のセクタ内にコピーし、分岐命令が検出されるか、前記AIC行の終わりに達するか、または前記メモリ・ラインの終わりに達するかいずれかのうち最も早いものに達したときに前記フェッチおよびコピーを終了し、必要な場合には前記AIC行内の連続したセクタ内のフェッチおよびコピーを継続すると同時に、前記フェッチおよびコピーが進むにつれて前記プログラム命令アドレスを更新し、前記行内にコピーされた最初の基本ブロックが前記行のいずれかのセクタ内で終わるステップと、
前記命令がフェッチされコピーされるにつれて前記命令を実行のために出力するステップと、
前記行内の前記最初のセクタを位置指定するために前記AICディレクトリ項目内の「セクタ先頭アドレス」に前記サイクル開始アドレスを格納し、選択された前記FHT項目内の「セクタ配列」フィールド内の最初のセクタ位置に先頭セクタ標識を格納し、選択されたAICディレクトリ項目内のセクタS先頭アドレス・フィールドに、各対応するセクタ内の最初の命令の前記プログラム・アドレスを格納するステップと、
フェッチされた命令を受け入れる各セクタ内に分岐命令がないか検査し、フェッチされた命令を受け入れる各セクタの選択された前記FHT項目のセクタ配列フィールドにセクタ識別子を格納し、前記FHT項目内のセクタ分岐結果フィールドの対応する各セクタ位置にフェッチされた各セクタのセクタ結果標識を格納するステップであって、各セクタ結果標識が、対応する各セクタに非分岐命令、分岐成立命令、または分岐不成立命令のいずれがあるかを示すステップと、
前記AIC行内のすべてのAICセクタに受け取られたフェッチ命令があるか否かを検査して、選択された前記AIC行内に処理すべきセクタが残っていないか否かを判断し、ある場合は次に使用可能なセクタを選択し、前記セクタを現行セクタにするステップと、
前記現行プログラム命令アドレスを更新する(選択された前記AIC行内の最後にコピーされた分岐命令のターゲット・アドレスか、または前記コピーが前記行の終わりに達した場合は前記更新されたプログラム命令アドレスが前記行にコピーされた命令の数だけ増分される)ステップと、
別のセクタが存在する場合、現行プログラム命令アドレスにある命令を含む前記メモリ・ラインを見つけ、前記現行プログラム・アドレスにある前記メモリ・ラインから命令のフェッチを開始し、前記セクタ内の位置合わせ命令位置から始めて実行のためにフェッチされた前記命令の現在選択されているAICセクタ内へのコピーを開始し、分岐命令が検出されるか、AIC行の終わりに達するか、またはメモリ・ラインの終わりに達するか、いずれか最も早いものが発生したときに前記フェッチおよびコピーを終了し、必要な場合には前記フェッチおよびコピーを進めるにつれて前記プログラム命令アドレスを更新しながら、選択された前記AIC行のすべてのセクタの中に命令がコピーされるまで前記AIC行内の連続したセクタ内でフェッチおよびコピーを続けるステップと、
前記AICディレクトリ項目内の前記セクタの「セクタ先頭アドレス」に前記開始プログラム・アドレスを格納するステップと、
前記FHT項目内の前記「セクタ配列」フィールド内の対応するセクタ・サブフィールドに次の各セクタのセクタ識別子を格納するステップと、
コピーされたいずれかの命令を受け取る次の各セクタ内に分岐命令がないか検査し、前記FHT項目内のセクタ分岐結果フィールドの対応する各セクタ位置に、コピーされた各セクタのセクタ結果標識を格納するステップであって、各セクタ結果標識が、対応する各セクタに非分岐命令、分岐成立命令、または分岐不成立命令のいずれがあるかを示すステップと、
前記AIC行内のすべてのAICセクタがコピーされた命令を受け取ったか否か検査して、選択された前記AIC行にすべてのセクタがコピーされたか否かを判断し、次に、選択された前記FHT項目内の置換フィールドを最長期間不使用状態に設定するステップと、
選択された前記FHT項目内の「次プログラム・アドレス」フィールドを現行プログラム・アドレスに設定し、選択された前記FHT項目内の有効フィールドを有効状態に設定するステップとをさらに含む、上記(21)に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ方法。
(23)前記方法を実行するプロセッサの実行パイプラインに前記命令を供給する命令順序づけバッファに出力することによって実行のための出力を行うステップをさらに含む、上記(22)に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ方法。
(24)AICヒットが発生したときにFHTミスが発生した場合、前記FHTセット内の無効なFHT項目を選択し、サブフィールド・インデックスCを現行サブフィールドCを位置指定するように0に設定し、セクタ・インデックスSを現行セクタSを位置指定するように0に設定し、ベクトル・ビット・インデックスBを現行ベクトル・ビットを位置指定するように0に設定するステップと、
前記現行プログラム・アドレスを選択された前記FHT項目内の「先頭命令フィールド」内に設定するステップと、
選択された前記FHT項目内の置換フィールドを指示された最も最近に使用された状態に合わせて調整するステップと、
将来の使用のための前記FHT項目のセットアップに備えて、選択された前記FHT項目内の「セクタ配列」フィールド内のサブフィールドにSを格納するステップと、
選択された前記AIC行の前記セクタS内に含まれたすべての命令を実行のために出力するステップと、
分岐命令セクタSがないか検査し、セクタS内に分岐命令が存在しない場合は、選択された前記FHT項目のサブフィールドCに「無命令」コードを格納し、前記プログラム命令アドレスを実行のためにセクタSから出力された命令の数だけ増分するステップと、
セクタS内に分岐命令が検出された場合は、前記予測ベクトル内の現行ビットBが成立状態か不成立状態かを検査し、成立状態が見つかった場合は、選択された前記FHT項目内の「セクタ分岐結果」フィールドのサブフィールドCに成立標識を格納し、前記プログラム命令アドレスをセクタS内で検出された前記分岐命令のターゲット・アドレスに設定するが、不成立状態が見つかった場合は、選択された前記FHT項目内の前記「セクタ分岐結果」フィールドのサブフィールドCに不成立標識を格納し、前記プログラム命令アドレスを実行のためにセクタSから出力された命令の数だけ増分するステップと、
サブフィールドCを1だけ増分して新しい現行サブフィールドCを入手し、増分された前記値を検査して前記AIC行内のすべてのセクタが処理されたことを示しているか否かを判断し、すべてのセクタが処理された場合は、選択された前記FHT項目内の有効フィールドを有効状態に設定し、現行プログラム命令アドレスを選択された前記FHT項目内の「次プログラム命令アドレス」フィールドから入手した新しい値に設定するステップと、
次に、前記プログラム命令アドレスの新しい前記値を使用して次のフェッチ・サイクルを開始するステップと、
サブフィールドCの増分された前記値の前記検査が、すべてのAICセクタが処理されていないことを示した場合、選択された前記AICディレクトリ項目にアクセスするステップと、
選択された前記AICディレクトリ項目内の「セクタ先頭アドレス」フィールドを探索して現行プログラム命令アドレスと一致するフィールドがないか調べ、前記フィールドのいずれかが一致する場合はセクタ・ヒットが発生し、一致するフィールドが、処理を必要として選択されたAICセクタになる対応するAICセクタ(選択された前記AIC行内のいずれのセクタの場所にあってもよい)を識別し、次に、新たに選択された前記AICセクタのためにフェッチ・サイクルを開始するステップと、
サブフィールドCがすべてのセクタが処理されたことを示す値に達するまで次の各サブフィールドCについて前記処理を繰り返し、次に、選択された前記FHT項目を有効状態に設定し、その置換フィールドを最長期間不使用状態を示すように設定するステップと、
前記AICディレクトリ項目の前記探索中にセクタ・ヒットが見つからない場合は、セクタ・ミスが発生し、選択された前記FHT項目の前記「セクタ配列」フィールドおよび「セクタ分岐結果」フィールド内の残りのサブフィールドにノー・オペレーション文字を書き込むステップと、
前記現行プログラム命令アドレスを前記現行AIC行の前記「次プログラム命令アドレス」フィールドにある値に設定し、次のフェッチ・サイクルを開始するステップとをさらに含む、上記(21)に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ方法。
(25)前記方法を実行するプロセッサの実行パイプラインに前記命令を供給する命令順序づけバッファに出力することによって実行のための出力を行うステップをさらに含む、上記(24)に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ方法。
【図面の簡単な説明】
【図1】本明細書に記載の本発明の好ましい実施形態のハードウェア構成を示す図である。
【図2】「位置合わせ命令キャッシュ」(AIC)を表し、AIC内の各複数セクタ行内のフィールドの例を示す図である。
【図3】「フェッチ履歴テーブル」(FHT)内のFHT項目の例を示す図である。
【図4】AIC行の内容と、項目を含む関連づけられたFHTセット内のFHT項目との関係を示す図である。
【図5】好ましい実施形態により使用される新規な方法の流れ図であり、この方法の初期設定と基本経路を示す図である。
【図6】好ましい実施形態により使用される新規な方法の流れ図であり、この方法の初期設定と基本経路を示す図である。
【図7】好ましい実施形態により使用される新規な方法の流れ図であり、AICミスの発生を処理する、この方法のサブプロセスを示す図である。
【図8】好ましい実施形態により使用される新規な方法の流れ図であり、AICミスの発生を処理する、この方法のサブプロセスを示す図である。
【図9】好ましい実施形態により使用される新規な方法の流れ図であり、AICミスの発生を処理する、この方法のサブプロセスを示す図である。
【図10】好ましい実施形態により使用される新規な方法の流れ図であり、AICミスの発生を処理する、この方法のサブプロセスを示す図である。
【図11】好ましい実施形態により使用される新規な方法の流れ図であり、FHTミスの発生を処理する、この方法のサブプロセスを示す図である。
【図12】好ましい実施形態により使用される新規な方法の流れ図であり、FHTミスの発生を処理する、この方法のサブプロセスを示す図である。
【図13】好ましい実施形態により使用される新規な方法の流れ図であり、FHTミスの発生を処理する、この方法のサブプロセスを示す図である。
【図14】好ましい実施形態により使用される新規な方法の流れ図であり、FHTミスの発生を処理する、この方法のサブプロセスを示す図である。
【符号の説明】
11 位置合わせ命令キャッシュ(AIC)
12 AICディレクトリ
14 フェッチ履歴テーブル
16 命令フェッチ・アドレス・レジスタ
17 分岐予測ユニット
18 命令順序づけバッファ
19 実行不一致コントロール
22 AICディレクトリ項目
24 フェッチ履歴テーブル項目

Claims (24)

  1. プログラム中の分岐命令および結果の分岐ターゲット命令の実行によって生じる時間損失を低減するプロセッサ装置であって、
    前記プロセッサ装置による実行のためにメモリ内の非順次記憶場所からフェッチされた命令ブロックのグループを受け取って格納する命令キャッシュ(Iキャッシュ)と、
    前記命令が前記プログラムの前の実行中またはコンパイル中に分岐履歴を入手したときに前記プログラム内でフェッチするためにアドレス指定されている命令の直後の複数の分岐命令の分岐結果を予測する分岐命令予測ユニット(予測ユニット)と、
    前記Iキャッシュに格納された命令ブロックの実行履歴シーケンスを記録するFHT項目を含むフェッチ履歴テーブル(FHT)と、
    前記FHT項目のうちの1つのFHT項目の制御下で前記命令ブロックを前記Iキャッシュから実行要素に出力し、前記実行要素による実行のために前記記録された履歴シーケンスで前記命令ブロックを供給するゲートと、
    前記プログラムの実行中に前記予測ユニットへの命令アドレスの入力に応答して、前記予測ユニットによって提供される分岐結果予測ベクトルと、
    前記分岐結果予測ベクトルの少なくとも一部と一致する分岐結果フィールドを含む有効FHT項目を選択するFHT項目選択および始動コントロールと、
    前記FHT項目選択および始動コントロールに応答して、前記FHT項目に記録された前記履歴シーケンスで前記Iキャッシュから命令を受け取る命令順序づけバッファとをさらに含む、プロセッサ装置。
  2. 前記FHT項目内の前記履歴シーケンスで示されたすべてのブロックが前記命令順序づけバッファに出力された時点を判断して前記プログラムの現行フェッチ・サイクルを終了させるフェッチ・サイクル完了コントロールと、
    前記プロセッサ装置の次のフェッチ・サイクルを開始するための次の予測を行うために前記FHT項目の前記履歴シーケンスによって示された最後の分岐命令のターゲット・アドレスを受け取る前記予測ユニットとをさらに含む、請求項に記載のFHTを使用するプロセッサ装置。
  3. 前記Iキャッシュに格納されたブロックのそれぞれのグループに関連づけられ、前記グループ内の前記ブロックの実行の特定の履歴シーケンスを示す前記FHT内の各FHT項目をさらに含む、請求項に記載のFHTを使用するプロセッサ装置。
  4. 前記Iキャッシュに格納されたブロックのそれぞれのグループに関連づけられた前記FHT内の複数のFHT項目のセットと、
    前記それぞれのグループ内の前記ブロックの実行の異なる履歴シーケンスを示す前記セット内の各FHT項目とをさらに含む、請求項に記載のFHTを使用するプロセッサ装置。
  5. 前記グループの前記ブロックが前記Iキャッシュに格納されるときにグループ内の前記ブロックの実行のシーケンスを記録する前記セット内の第1のFHT項目と、
    ブロックの前記グループが前記Iキャッシュに書き込まれた後で行われる前記プログラム中の前記ブロックの実行の異なる履歴シーケンスを記録する前記グループ内の他の各FHT項目とをさらに含む、請求項に記載のFHTを使用するプロセッサ装置。
  6. 前記FHT項目内の前記履歴シーケンスを記録するために各FHT項目内に設けられたブロック・シーケンス・フィールドをさらに含む、請求項1に記載のFHTを使用するプロセッサ装置。
  7. 前記Iキャッシュ内に構成され、各セクタが、前記プログラムの全部または一部を含むメモリまたはバッファから受け取ったシーケンスで命令を格納する固定数の記憶位置を含むセクタを含み、
    各セクタが前記プログラム内の命令の基本ブロックの全部または一部を記憶する容量を有し、各基本ブロックが、前記Iキャッシュに格納されるときにセクタ内の先頭記憶場所から始まり、前記基本ブロックが同じセクタ内または別のセクタ内の記憶場所で終わり、前記Iキャッシュ内に格納されている基本ブロックが1つまたは複数のセクタ内の任意の数の命令位置を占有し、そのうち、各基本ブロックがセクタの少なくとも最初の命令位置を占有し、それによって前記Iキャッシュに格納された各基本ブロックがセクタの所定の側に位置合わせされる各セクタと、
    セクタ内の各未占有命令位置に格納されるノー・オペレーション・コード(nop)であって、それによって前記Iキャッシュが位置合わせ命令キャッシュ(AIC)として構成されるノー・オペレーション・コード(nop)とをさらに含む、請求項1に記載のFHTを使用するプロセッサ装置。
  8. 複数の行として構成された前記Iキャッシュであって、各行が複数の前記セクタを含み、各セクタに前記プログラムの1つの基本ブロックのみの命令が格納され、前記Iキャッシュに格納された各基本ブロックがセクタ内のセクタ位置合わせ記憶場所から始まり、前記基本ブロックが前記セクタを超える場合、前記基本ブロックの終わりに達するまで前記基本ブロックを各セクタ内まで続けさせるが、前記基本ブロックが前記行の終わりを超えて続く必要がある場合は、前記行を超える最初の命令の命令アドレスを使用して別の行を位置指定し、前記基本ブロックが前記Iキャッシュ内のいずれかのセクタ内で終わるまで前記基本ブロックを前記別の行の最初のセクタおよび必要な連続したセクタ内に続ける前記Iキャッシュと、
    最後の基本ブロックの終わりに分岐成立命令がある場合はターゲット分岐命令を使用してアクセスされる前記Iキャッシュ内の次のセクタであるが、前記次のセクタは、最後の基本ブロックの終わりに分岐不成立命令があるかまたは現行基本ブロックのためにアクセスされた最後のセクタに分岐命令がない場合は次に続くセクタ場所にあるセクタである次のセクタと、
    所定数のセクタ内に前記プログラムの命令の実行シーケンスを含む前記Iキャッシュ内のセクタのシーケンスを示す各FHT項目内に格納されたセクタ配列情報と、
    セクタ・アドレス・フィールドを有するディレクトリ項目を含むIキャッシュ・ディレクトリであって、前記セクタ・アドレス・フィールドに前記Iキャッシュ内の前記セクタがそれぞれ関連づけられ、各セクタ・アドレス・フィールドが前記関連づけられたセクタ内に格納されたいずれかの最初の命令のアドレスを受け入れ、前記セクタ・アドレス・フィールドが前記ディレクトリ内に見つかった場合は前記関連づけられたセクタに前記Iキャッシュ内の前記命令が含まれているため、前記Iキャッシュ・ディレクトリ内のいずれかのセクタ・アドレス・フィールに前記プログラム命令アドレスが含まれているか否かを判断することによって、後で使用されるプログラム命令アドレスが前記アドレスを有する前記命令を含むいずれかのセクタを位置指定することができるようにするIキャッシュ・ディレクトリとをさらに含む、請求項1に記載のFHTを使用するプロセッサ装置。
  9. 同じFHT項目の前記セクタ配列情報で示された各セクタの前記分岐結果として「分岐成立」または「分岐不成立」または「セクタ内に分岐命令なし」のうちのいずれか1つを示す各FHT項目内に格納されたセクタ分岐結果情報をさらに含む、請求項に記載のFHTを使用するプロセッサ装置。
  10. 前記予測ベクトルに現行プログラム実行アドレス(プログラム・アドレス)の直後の前記プログラム中の基本ブロックのシーケンスの分岐結果予測を表す状態を有するビットが含まれている前記プログラム・アドレスにある予測分岐結果ベクトル(予測ベクトル)を生成する前記予測ユニットと、
    前記予測ベクトルに分岐命令を含まないセクタに関する情報が含まれていない場合に、検出操作に前記「セクタ内分岐命令なし」の結果標識を無視させることによって前記予測ベクトルの少なくとも最初の部分が前記FHT内のFHT項目内の前記セクタ分岐結果情報と等しいか否かを検出する論理回路と、
    前記論理回路が前記FHT項目内の前記セクタ分岐結果情報に等しいものを検出した場合に、前記FHT項目内の前記セクタ配列情報によって示されたシーケンス内の前記FHT項目の前記セクタ配列情報で識別されている各セクタから前記命令を受け取る前記実行要素とをさらに含む、請求項に記載のFHTを使用するプロセッサ装置。
  11. 前記FHT項目で順次に示された前記セクタから前記命令を受け取り、前記命令を受け取った順序で前記実行ユニットに転送する命令順序づけバッファをさらに含む、請求項10に記載のFHTを使用するプロセッサ装置。
  12. 前記FHT内の各FHT項目内の同じフィールドに格納された前記セクタ配列情報と前記セクタ分岐結果情報とをさらに含む、請求項10に記載のFHTを使用するプロセッサ装置。
  13. 前記FHT内の各FHT項目内の異なるフィールドに格納された前記セクタ配列情報と前記セクタ分岐結果情報とをさらに含む、請求項11に記載のFHTを使用するプロセッサ装置。
  14. 前記Iキャッシュ内の命令を含むセクタのグループの履歴シーケンスを格納する各FHT項目内のセクタ配列フィールドと、
    前記FHT項目内の前記セクタ配列フィールドで示された各ブロックについて成立または不成立の条件を含む結果を記録する各FHT項目内に設けられた分岐結果フィールドとをさらに含む、請求項1に記載のFHTを使用するプロセッサ装置。
  15. 各行が所定数のセクタを含み、各行が前記Iキャッシュ内の固有の場所を有する、前記Iキャッシュを構成する複数のIキャッシュ行と、
    FHTセット内の各FHT項目が前記Iキャッシュ内の関連づけられたIキャッシュ行の場所によって決定する前記FHT内の場所を有する、前記FHT内に固有に配置されたFHT項目の複数のFHTセットとをさらに含む、請求項11に記載のFHTを使用するプロセッサ装置。
  16. 各FHTセット内に設けられた所定セット数のFHT項目と、
    前記所定セット数と前記Iキャッシュ内の関連づけられたIキャッシュ行のインデックスとによって計算される前記FHT内の各FHTセットのインデックスとをさらに含む、請求項15に記載のFHTを使用するプロセッサ装置。
  17. 前記FHT内の各FHT項目内に構成され、前記FHT項目が前記Iキャッシュを制御するために使用可能であることを示す有効フィールドと、
    各FHT項目内に構成され、前記セット内のどの項目が最長期間不使用(LRU)であり、次の置換候補であるかを示す置換フィールドとをさらに含む、請求項16に記載のFHTを使用するプロセッサ装置。
  18. 前記関連づけられたFHT項目内の前記シーケンス情報によって示された前記実行シーケンスで最初に出力すべき前記関連づけられたAIC行のセクタ内の最初の命令のアドレスを示す、各有効FHT項目内の先頭命令フィールドをさらに含む、請求項17に記載のFHTを使用するプロセッサ装置。
  19. 前記FHT項目内で示された前記セクタ・シーケンス内の最後の命令の後に続くべき(前記プログラム実行シーケンス中の)命令のアドレスを示す、各有効FHT項目内の次命令アドレス・フィールドをさらに含む、請求項18に記載のFHTを使用するプロセッサ装置。
  20. プログラムの前の実行の実行履歴を使用して、コンピュータ・システム内に記憶されたプログラムの複数の基本ブロックから入手した命令の実行のために即時に順序づけするプロセッサ制御方法であって、
    各フェッチ・サイクルが前記プログラムの最大「m」個の複数の基本ブロックに含まれる命令を実行のために順序づけすることができる、フェッチ・サイクルを使用して実行のために前記プログラムの命令を順序づけするステップと、
    入口アドレスとターゲット・アドレスがそれぞれフェッチ・サイクルのサイクル開始アドレスであり、最初はプログラム内の入口アドレスでありその後は前のフェッチ・サイクル中の最後の分岐命令から入手したターゲット・アドレスである命令アドレスを使用して、プログラム実行が完了するまで各フェッチ・サイクルを開始するステップと、
    予測ベクトルが状態ビットのストリングを含み、各状態ビットが前記プログラム実行シーケンス内で次に発生すると予測された「m」個の分岐命令の各分岐命令の成立状態または不成立状態を示す、前記開始アドレスを使用して各フェッチ・サイクルの最初に予測ベクトルを入手するステップと、
    位置合わせIキャッシュ(AIC)ディレクトリ内で前記サイクル開始アドレスを探索し、(関連づけられたAIC内の)いずれかのAIC行が前記サイクル開始アドレスを有する命令を含むか否かを判断し、AIC行内のAICセクタ内に前記命令が見つかった場合はAICヒットを示すが、前記AIC内に前記命令が見つからない場合はAICミスを示すステップと、
    AICヒットが示された場合、見つかった前記AIC行に関連づけられたFHT内のFHT項目のフェッチ履歴テーブル(FHT)セットを探し出すステップと、
    前記予測ベクトルを前記探し出したFHTセットのFHT項目内の「セクタ分岐結果」情報と比較し、FHTヒットを有する前記FHTセット内のいずれかのFHT項目を選択し、前記セット内のいずれのFHT項目にもFHTヒットがない場合にはFHTミスが発生するステップと、
    FHTヒットが発生した場合、前記FHT項目の「セクタ配列」情報で示されたシーケンスで前記セクタの出力を制御することによって、前記FHT項目内の前記「セクタ配列」情報で示されたAICセクタ内の命令を実行のために出力するステップとを含むプロセッサ制御方法
  21. 各AIC行が所定数のセクタを含み、各セクタが所定数の命令記憶位置を有し、AICミスが発生した場合、前記サイクル開始アドレスを使用して前記AICディレクトリ内で前記AIC行に関連づけられたディレクトリ項目を選択するステップと、
    前記FHT内で選択された前記AIC行に関連づけられたFHT項目を選択するステップと、
    将来の使用のための選択された前記AIC行と選択された前記FHT項目のセットアップに備えて、選択された前記AIC行を無効化し、選択された前記FHT項目を無効化するステップと、
    前記コンピュータ・システムの記憶階層内の前記フェッチ・サイクル開始アドレスにある命令を含むメモリ・ラインを探し出すステップと、
    前記メモリ・ライン内の前記サイクル開始アドレスにある命令のフェッチを開始し、前記フェッチされた命令を、前記セクタの位置合わせ命令位置から始まって前記行内の最初のセクタ内にコピーし、分岐命令が検出されるか、前記AIC行の終わりに達するか、または前記メモリ・ラインの終わりに達するかいずれかのうち最も早いものに達したときに前記フェッチおよびコピーを終了し、必要な場合には前記AIC行内の連続したセクタ内のフェッチおよびコピーを継続すると同時に、前記フェッチおよびコピーが進むにつれて前記プログラム命令アドレスを更新し、前記行内にコピーされた最初の基本ブロックが前記行のいずれかのセクタ内で終わるステップと、
    前記命令がフェッチされコピーされるにつれて前記命令を実行のために出力するステップと、
    前記行内の前記最初のセクタを位置指定するために前記AICディレクトリ項目内の「セクタ先頭アドレス」に前記サイクル開始アドレスを格納し、選択された前記FHT項目内の「セクタ配列」フィールド内の最初のセクタ位置に先頭セクタ標識を格納し、選択されたAICディレクトリ項目内のセクタS先頭アドレス・フィールドに、各対応するセクタ内の最初の命令の前記プログラム・アドレスを格納するステップと、
    フェッチされた命令を受け入れる各セクタ内に分岐命令がないか検査し、フェッチされた命令を受け入れる各セクタの選択された前記FHT項目のセクタ配列フィールドにセクタ識別子を格納し、前記FHT項目内のセクタ分岐結果フィールドの対応する各セクタ位置にフェッチされた各セクタのセクタ結果標識を格納するステップであって、各セクタ結果標識が、対応する各セクタに非分岐命令、分岐成立命令、または分岐不成立命令のいずれがあるかを示すステップと、
    前記AIC行内のすべてのAICセクタに受け取られたフェッチ命令があるか否かを検査して、選択された前記AIC行内に処理すべきセクタが残っていないか否かを判断し、ある場合は次に使用可能なセクタを選択し、前記セクタを現行セクタにするステップと、
    前記現行プログラム命令アドレスを更新する(選択された前記AIC行内の最後にコピーされた分岐命令のターゲット・アドレスか、または前記コピーが前記行の終わりに達した場合は前記更新されたプログラム命令アドレスが前記行にコピーされた命令の数だけ増分される)ステップと、
    別のセクタが存在する場合、現行プログラム命令アドレスにある命令を含む前記メモリ・ラインを見つけ、前記現行プログラム・アドレスにある前記メモリ・ラインから命令のフェッチを開始し、前記セクタ内の位置合わせ命令位置から始めて実行のためにフェッチされた前記命令の現在選択されているAICセクタ内へのコピーを開始し、分岐命令が検出されるか、AIC行の終わりに達するか、またはメモリ・ラインの終わりに達するか、いずれか最も早いものが発生したときに前記フェッチおよびコピーを終了し、必要な場合には前記フェッチおよびコピーを進めるにつれて前記プログラム命令アドレスを更新しながら、選択された前記AIC行のすべてのセクタの中に命令がコピーされるまで前記AIC行内の連続したセクタ内でフェッチおよびコピーを続けるステップと、
    前記AICディレクトリ項目内の前記セクタの「セクタ先頭アドレス」に前記開始プログラム・アドレスを格納するステップと、
    前記FHT項目内の前記「セクタ配列」フィールド内の対応するセクタ・サブフィールドに次の各セクタのセクタ識別子を格納するステップと、
    コピーされたいずれかの命令を受け取る次の各セクタ内に分岐命令がないか検査し、前記FHT項目内のセクタ分岐結果フィールドの対応する各セクタ位置に、コピーされた各セクタのセクタ結果標識を格納するステップであって、各セクタ結果標識が、対応する各セクタに非分岐命令、分岐成立命令、または分岐不成立命令のいずれがあるかを示すステップと、
    前記AIC行内のすべてのAICセクタがコピーされた命令を受け取ったか否か検査して、選択された前記AIC行にすべてのセクタがコピーされたか否かを判断し、次に、選択された前記FHT項目内の置換フィールドを最長期間不使用状態に設定するステップと、
    選択された前記FHT項目内の「次プログラム・アドレス」フィールドを現行プログラム・アドレスに設定し、選択された前記FHT項目内の有効フィールドを有効状態に設定するステップとをさらに含む、請求項20に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ制御方法
  22. 前記方法を実行するプロセッサの実行パイプラインに前記命令を供給する命令順序づけバッファに出力することによって実行のための出力を行うステップをさらに含む、請求項21に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ制御方法
  23. AICヒットが発生したときにFHTミスが発生した場合、前記FHTセット内の無効なFHT項目を選択し、サブフィールド・インデックスCを現行サブフィールドCを位置指定するように0に設定し、セクタ・インデックスSを現行セクタSを位置指定するように0に設定し、ベクトル・ビット・インデックスBを現行ベクトル・ビットを位置指定するように0に設定するステップと、
    前記現行プログラム・アドレスを選択された前記FHT項目内の「先頭命令フィールド」内に設定するステップと、
    選択された前記FHT項目内の置換フィールドを指示された最も最近に使用された状態に合わせて調整するステップと、
    将来の使用のための前記FHT項目のセットアップに備えて、選択された前記FHT項目内の「セクタ配列」フィールド内のサブフィールドCにSを格納するステップと、
    選択された前記AIC行の前記セクタS内に含まれたすべての命令を実行のために出力するステップと、
    分岐命令セクタSがないか検査し、セクタS内に分岐命令が存在しない場合は、選択された前記FHT項目のサブフィールドCに「無命令」コードを格納し、前記プログラム命令アドレスを実行のためにセクタSから出力された命令の数だけ増分するステップと、
    セクタS内に分岐命令が検出された場合は、前記予測ベクトル内の現行ビットBが成立状態か不成立状態かを検査し、成立状態が見つかった場合は、選択された前記FHT項目内の「セクタ分岐結果」フィールドのサブフィールドCに成立標識を格納し、前記プログラム命令アドレスをセクタS内で検出された前記分岐命令のターゲット・アドレスに設定するが、不成立状態が見つかった場合は、選択された前記FHT項目内の前記「セクタ分岐結果」フィールドのサブフィールドCに不成立標識を格納し、前記プログラム命令アドレスを実行のためにセクタSから出力された命令の数だけ増分するステップと、
    サブフィールドCを1だけ増分して新しい現行サブフィールドCを入手し、増分された前記値を検査して前記AIC行内のすべてのセクタが処理されたことを示しているか否かを判断し、すべてのセクタが処理された場合は、選択された前記FHT項目内の有効フィールドを有効状態に設定し、現行プログラム命令アドレスを選択された前記FHT項目内の「次プログラム命令アドレス」フィールドから入手した新しい値に設定するステップと、
    次に、前記プログラム命令アドレスの新しい前記値を使用して次のフェッチ・サイクルを開始するステップと、
    サブフィールドCの増分された前記値の前記検査が、すべてのAICセクタが処理されていないことを示した場合、選択された前記AICディレクトリ項目にアクセスするステップと、
    選択された前記AICディレクトリ項目内の「セクタ先頭アドレス」フィールドを探索して現行プログラム命令アドレスと一致するフィールドがないか調べ、前記フィールドのいずれかが一致する場合はセクタ・ヒットが発生し、一致するフィールドが、処理を必要として選択されたAICセクタになる対応するAICセクタ(選択された前記AIC行内のいずれのセクタの場所にあってもよい)を識別し、次に、新たに選択された前記AICセクタのためにフェッチ・サイクルを開始するステップと、
    サブフィールドCがすべてのセクタが処理されたことを示す値に達するまで次の各サブフィールドCについて前記処理を繰り返し、次に、選択された前記FHT項目を有効状態に設定し、その置換フィールドを最長期間不使用状態を示すように設定するステップと、
    前記AICディレクトリ項目の前記探索中にセクタ・ヒットが見つからない場合は、セクタ・ミスが発生し、選択された前記FHT項目の前記「セクタ配列」フィールドおよび「セクタ分岐結果」フィールド内の残りのサブフィールドにノー・オペレーション文字を書き込むステップと、
    前記現行プログラム命令アドレスを前記現行AIC行の前記「次プログラム命令アドレス」フィールドにある値に設定し、次のフェッチ・サイクルを開始するステップとをさらに含む、請求項20に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ制御方法
  24. 前記方法を実行するプロセッサの実行パイプラインに前記命令を供給する命令順序づけバッファに出力することによって実行のための出力を行うステップをさらに含む、請求項23に記載のプログラムの複数の基本ブロックから入手した命令を実行のために即時に順序づけするプロセッサ制御方法
JP2000000330A 1999-01-22 2000-01-05 複数予測分岐命令にわたる命令フェッチの位置合わせ命令キャッシュ処理を実行するプロセッサ装置およびプロセッサ制御方法 Expired - Fee Related JP3542020B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/235,474 US6247097B1 (en) 1999-01-22 1999-01-22 Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions
US09/235474 1999-01-22

Publications (2)

Publication Number Publication Date
JP2000215056A JP2000215056A (ja) 2000-08-04
JP3542020B2 true JP3542020B2 (ja) 2004-07-14

Family

ID=22885663

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2000000330A Expired - Fee Related JP3542020B2 (ja) 1999-01-22 2000-01-05 複数予測分岐命令にわたる命令フェッチの位置合わせ命令キャッシュ処理を実行するプロセッサ装置およびプロセッサ制御方法

Country Status (4)

Country Link
US (2) US6247097B1 (ja)
JP (1) JP3542020B2 (ja)
KR (1) KR100341431B1 (ja)
TW (1) TW457426B (ja)

Families Citing this family (122)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6339822B1 (en) * 1998-10-02 2002-01-15 Advanced Micro Devices, Inc. Using padded instructions in a block-oriented cache
US6519682B2 (en) * 1998-12-04 2003-02-11 Stmicroelectronics, Inc. Pipelined non-blocking level two cache system with inherent transaction collision-avoidance
US6247097B1 (en) * 1999-01-22 2001-06-12 International Business Machines Corporation Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions
US6481251B1 (en) * 1999-10-25 2002-11-19 Advanced Micro Devices, Inc. Store queue number assignment and tracking
US6523109B1 (en) 1999-10-25 2003-02-18 Advanced Micro Devices, Inc. Store queue multimatch detection
US6438673B1 (en) * 1999-12-30 2002-08-20 Intel Corporation Correlated address prediction
US20020066081A1 (en) * 2000-02-09 2002-05-30 Evelyn Duesterwald Speculative caching scheme for fast emulation through statically predicted execution traces in a caching dynamic translator
US7093236B2 (en) * 2001-02-01 2006-08-15 Arm Limited Tracing out-of-order data
US7024545B1 (en) * 2001-07-24 2006-04-04 Advanced Micro Devices, Inc. Hybrid branch prediction device with two levels of branch prediction cache
US7363467B2 (en) * 2002-01-03 2008-04-22 Intel Corporation Dependence-chain processing using trace descriptors having dependency descriptors
US6996688B2 (en) * 2003-03-11 2006-02-07 International Business Machines Corporation Method, system, and program for improved throughput in remote mirroring systems
EP1484667A1 (en) * 2003-06-05 2004-12-08 Deutsche Thomson-Brandt Gmbh Method for fast verification of sector addresses
US7133969B2 (en) * 2003-10-01 2006-11-07 Advanced Micro Devices, Inc. System and method for handling exceptional instructions in a trace cache based processor
US7555633B1 (en) 2003-11-03 2009-06-30 Advanced Micro Devices, Inc. Instruction cache prefetch based on trace cache eviction
US8069336B2 (en) 2003-12-03 2011-11-29 Globalfoundries Inc. Transitioning from instruction cache to trace cache on label boundaries
US7213126B1 (en) 2004-01-12 2007-05-01 Advanced Micro Devices, Inc. Method and processor including logic for storing traces within a trace cache
US7197630B1 (en) 2004-04-12 2007-03-27 Advanced Micro Devices, Inc. Method and system for changing the executable status of an operation following a branch misprediction without refetching the operation
US20080028189A1 (en) * 2004-05-27 2008-01-31 Koninklijke Philips Electronics N,V, A Corporation Microprocessor and Method of Instruction Alignment
KR101076815B1 (ko) * 2004-05-29 2011-10-25 삼성전자주식회사 분기 타겟 어드레스 캐쉬를 포함하는 캐쉬 시스템
US7365007B2 (en) * 2004-06-30 2008-04-29 Intel Corporation Interconnects with direct metalization and conductive polymer
US20060155961A1 (en) * 2005-01-06 2006-07-13 International Business Machines Corporation Apparatus and method for reformatting instructions before reaching a dispatch point in a superscalar processor
US7376815B2 (en) * 2005-02-25 2008-05-20 Qualcomm Incorporated Methods and apparatus to insure correct predecode
US7225287B2 (en) * 2005-06-01 2007-05-29 Microsoft Corporation Scalable DMA remapping on a computer bus
US20060294443A1 (en) * 2005-06-03 2006-12-28 Khaled Fekih-Romdhane On-chip address generation
US7870369B1 (en) 2005-09-28 2011-01-11 Oracle America, Inc. Abort prioritization in a trace-based processor
US7877630B1 (en) 2005-09-28 2011-01-25 Oracle America, Inc. Trace based rollback of a speculatively updated cache
US7783863B1 (en) 2005-09-28 2010-08-24 Oracle America, Inc. Graceful degradation in a trace-based processor
US8051247B1 (en) 2005-09-28 2011-11-01 Oracle America, Inc. Trace based deallocation of entries in a versioning cache circuit
US8037285B1 (en) 2005-09-28 2011-10-11 Oracle America, Inc. Trace unit
US7937564B1 (en) 2005-09-28 2011-05-03 Oracle America, Inc. Emit vector optimization of a trace
US8019944B1 (en) 2005-09-28 2011-09-13 Oracle America, Inc. Checking for a memory ordering violation after a speculative cache write
US8015359B1 (en) 2005-09-28 2011-09-06 Oracle America, Inc. Method and system for utilizing a common structure for trace verification and maintaining coherency in an instruction processing circuit
US7953961B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Trace unit with an op path from a decoder (bypass mode) and from a basic-block builder
US7949854B1 (en) 2005-09-28 2011-05-24 Oracle America, Inc. Trace unit with a trace builder
US7966479B1 (en) 2005-09-28 2011-06-21 Oracle America, Inc. Concurrent vs. low power branch prediction
US7676634B1 (en) 2005-09-28 2010-03-09 Sun Microsystems, Inc. Selective trace cache invalidation for self-modifying code via memory aging
US8024522B1 (en) 2005-09-28 2011-09-20 Oracle America, Inc. Memory ordering queue/versioning cache circuit
US7747822B1 (en) 2005-10-31 2010-06-29 Oracle America Inc. Maintaining memory coherency with a trace cache
US7568088B1 (en) 2005-10-26 2009-07-28 Sun Microsystems, Inc. Flag management in processors enabled for speculative execution of micro-operation traces
US8370576B1 (en) 2005-09-28 2013-02-05 Oracle America, Inc. Cache rollback acceleration via a bank based versioning cache ciruit
US7953933B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Instruction cache, decoder circuit, basic block cache circuit and multi-block cache circuit
US8032710B1 (en) 2005-09-28 2011-10-04 Oracle America, Inc. System and method for ensuring coherency in trace execution
US7779307B1 (en) 2005-09-28 2010-08-17 Oracle America, Inc. Memory ordering queue tightly coupled with a versioning cache circuit
US8499293B1 (en) 2005-09-28 2013-07-30 Oracle America, Inc. Symbolic renaming optimization of a trace
US7987342B1 (en) 2005-09-28 2011-07-26 Oracle America, Inc. Trace unit with a decoder, a basic-block cache, a multi-block cache, and sequencer
US7814298B1 (en) 2005-09-28 2010-10-12 Oracle America, Inc. Promoting and appending traces in an instruction processing circuit based upon a bias value
US7849292B1 (en) 2005-09-28 2010-12-07 Oracle America, Inc. Flag optimization of a trace
US7681019B1 (en) 2005-11-18 2010-03-16 Sun Microsystems, Inc. Executing functions determined via a collection of operations from translated instructions
US7797517B1 (en) 2005-11-18 2010-09-14 Oracle America, Inc. Trace optimization via fusing operations of a target architecture operation set
US8327115B2 (en) 2006-04-12 2012-12-04 Soft Machines, Inc. Plural matrices of execution units for processing matrices of row dependent instructions in single clock cycle in super or separate mode
US20080126771A1 (en) * 2006-07-25 2008-05-29 Lei Chen Branch Target Extension for an Instruction Cache
US20080215804A1 (en) * 2006-09-25 2008-09-04 Davis Gordon T Structure for register renaming in a microprocessor
US20080077778A1 (en) * 2006-09-25 2008-03-27 Davis Gordon T Method and Apparatus for Register Renaming in a Microprocessor
US8370609B1 (en) 2006-09-27 2013-02-05 Oracle America, Inc. Data cache rollbacks for failed speculative traces with memory operations
US8010745B1 (en) 2006-09-27 2011-08-30 Oracle America, Inc. Rolling back a speculative update of a non-modifiable cache line
US7644233B2 (en) * 2006-10-04 2010-01-05 International Business Machines Corporation Apparatus and method for supporting simultaneous storage of trace and standard cache lines
US7610449B2 (en) * 2006-10-04 2009-10-27 International Business Machines Corporation Apparatus and method for saving power in a trace cache
US8386712B2 (en) * 2006-10-04 2013-02-26 International Business Machines Corporation Structure for supporting simultaneous storage of trace and standard cache lines
US20080250206A1 (en) * 2006-10-05 2008-10-09 Davis Gordon T Structure for using branch prediction heuristics for determination of trace formation readiness
US7934081B2 (en) * 2006-10-05 2011-04-26 International Business Machines Corporation Apparatus and method for using branch prediction heuristics for determination of trace formation readiness
EP2523101B1 (en) 2006-11-14 2014-06-04 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US20080114964A1 (en) * 2006-11-14 2008-05-15 Davis Gordon T Apparatus and Method for Cache Maintenance
US20080250207A1 (en) * 2006-11-14 2008-10-09 Davis Gordon T Design structure for cache maintenance
US20080120468A1 (en) * 2006-11-21 2008-05-22 Davis Gordon T Instruction Cache Trace Formation
US20080235500A1 (en) * 2006-11-21 2008-09-25 Davis Gordon T Structure for instruction cache trace formation
US9032154B2 (en) * 2007-12-13 2015-05-12 Sandisk Technologies Inc. Integration of secure data transfer applications for generic IO devices
US7822954B2 (en) * 2008-02-20 2010-10-26 International Business Machines Corporation Methods, systems, and computer program products for recovering from branch prediction latency
KR101086457B1 (ko) * 2009-12-28 2011-11-25 전남대학교산학협력단 저 전력 트레이스 캐쉬 및 명령어 세트 예측기를 구비한 프로세서 시스템
KR101685247B1 (ko) 2010-09-17 2016-12-09 소프트 머신즈, 인크. 조기 원거리 분기 예측을 위한 섀도우 캐시를 포함하는 단일 사이클 다중 분기 예측
EP2628072B1 (en) 2010-10-12 2016-10-12 Soft Machines, Inc. An instruction sequence buffer to enhance branch prediction efficiency
TWI525541B (zh) * 2010-10-12 2016-03-11 軟體機器公司 輸出可靠可預測指令序列的方法與系統,以及實施識別指令方法的微處理器
EP2689327B1 (en) 2011-03-25 2021-07-28 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
CN108376097B (zh) 2011-03-25 2022-04-15 英特尔公司 用于通过使用由可分割引擎实例化的虚拟核来支持代码块执行的寄存器文件段
KR101966712B1 (ko) 2011-03-25 2019-04-09 인텔 코포레이션 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
CN103649931B (zh) 2011-05-20 2016-10-12 索夫特机械公司 用于支持由多个引擎执行指令序列的互连结构
KR101639853B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 자원들 및 상호접속 구조들의 비집중 할당
WO2013025556A1 (en) 2011-08-12 2013-02-21 Splunk Inc. Elastic scaling of data volume
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
WO2013077876A1 (en) 2011-11-22 2013-05-30 Soft Machines, Inc. A microprocessor accelerated code optimizer
US8935574B2 (en) 2011-12-16 2015-01-13 Advanced Micro Devices, Inc. Correlating traces in a computing system
US8930674B2 (en) 2012-03-07 2015-01-06 Soft Machines, Inc. Systems and methods for accessing a unified translation lookaside buffer
US9916253B2 (en) 2012-07-30 2018-03-13 Intel Corporation Method and apparatus for supporting a plurality of load accesses of a cache in a single cycle to maintain throughput
US9740612B2 (en) 2012-07-30 2017-08-22 Intel Corporation Systems and methods for maintaining the coherency of a store coalescing cache and a load cache
US9229873B2 (en) 2012-07-30 2016-01-05 Soft Machines, Inc. Systems and methods for supporting a plurality of load and store accesses of a cache
US9710399B2 (en) 2012-07-30 2017-07-18 Intel Corporation Systems and methods for flushing a cache with modified data
US8832500B2 (en) 2012-08-10 2014-09-09 Advanced Micro Devices, Inc. Multiple clock domain tracing
US8959398B2 (en) 2012-08-16 2015-02-17 Advanced Micro Devices, Inc. Multiple clock domain debug capability
US9348593B2 (en) * 2012-08-28 2016-05-24 Avago Technologies General Ip (Singapore) Pte. Ltd. Instruction address encoding and decoding based on program construct groups
US9678882B2 (en) 2012-10-11 2017-06-13 Intel Corporation Systems and methods for non-blocking implementation of cache flush instructions
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
WO2014151043A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for emulating a guest centralized flag architecture by using a native distributed flag architecture
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
WO2014151018A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for executing multithreaded instructions grouped onto blocks
US10235176B2 (en) 2015-12-17 2019-03-19 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US10936713B2 (en) 2015-12-17 2021-03-02 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US9715377B1 (en) * 2016-01-04 2017-07-25 International Business Machines Corporation Behavior based code recompilation triggering scheme
US10606599B2 (en) * 2016-12-09 2020-03-31 Advanced Micro Devices, Inc. Operation cache
EP3746925B1 (en) 2018-02-02 2024-09-11 The Charles Stark Draper Laboratory Inc. Systems and methods for policy execution processing
WO2019152792A1 (en) 2018-02-02 2019-08-08 Dover Microsystems, Inc. Systems and methods for policy linking and/or loading for secure initialization
US11416395B2 (en) 2018-02-05 2022-08-16 Micron Technology, Inc. Memory virtualization for accessing heterogeneous memory components
US10782908B2 (en) 2018-02-05 2020-09-22 Micron Technology, Inc. Predictive data orchestration in multi-tier memory systems
US11099789B2 (en) 2018-02-05 2021-08-24 Micron Technology, Inc. Remote direct memory access in multi-tier memory systems
US10880401B2 (en) 2018-02-12 2020-12-29 Micron Technology, Inc. Optimization of data access and communication in memory systems
WO2019213061A1 (en) 2018-04-30 2019-11-07 Dover Microsystems, Inc. Systems and methods for checking safety properties
US10877892B2 (en) * 2018-07-11 2020-12-29 Micron Technology, Inc. Predictive paging to accelerate memory access
TW202022679A (zh) 2018-11-06 2020-06-16 美商多佛微系統公司 用於停滯主處理器的系統和方法
US11841956B2 (en) 2018-12-18 2023-12-12 Dover Microsystems, Inc. Systems and methods for data lifecycle protection
JP7379491B2 (ja) 2019-01-31 2023-11-14 インターナショナル・ビジネス・マシーンズ・コーポレーション 入出力ストア命令をハンドリングする方法、システム、およびプログラム
TWI773959B (zh) 2019-01-31 2022-08-11 美商萬國商業機器公司 用於處理輸入輸出儲存指令之資料處理系統、方法及電腦程式產品
CN113366457B (zh) 2019-01-31 2024-06-14 国际商业机器公司 处理输入/输出存储指令
TWI767175B (zh) 2019-01-31 2022-06-11 美商萬國商業機器公司 用於處理輸入輸出儲存指令之資料處理系統、方法及電腦程式產品
US10852949B2 (en) 2019-04-15 2020-12-01 Micron Technology, Inc. Predictive data pre-fetching in a data storage device
US12079197B2 (en) 2019-10-18 2024-09-03 Dover Microsystems, Inc. Systems and methods for updating metadata
US11915002B2 (en) 2022-06-24 2024-02-27 Microsoft Technology Licensing, Llc Providing extended branch target buffer (BTB) entries for storing trunk branch metadata and leaf branch metadata

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0778735B2 (ja) * 1988-12-05 1995-08-23 松下電器産業株式会社 キャッシュ装置と命令読出し装置
US5136697A (en) * 1989-06-06 1992-08-04 Advanced Micro Devices, Inc. System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache
US5454117A (en) * 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
US5530825A (en) * 1994-04-15 1996-06-25 Motorola, Inc. Data processor with branch target address cache and method of operation
US5634119A (en) * 1995-01-06 1997-05-27 International Business Machines Corporation Computer processing unit employing a separate millicode branch history table
US5669001A (en) 1995-03-23 1997-09-16 International Business Machines Corporation Object code compatible representation of very long instruction word programs
US5699536A (en) 1995-04-13 1997-12-16 International Business Machines Corporation Computer processing system employing dynamic instruction formatting
US6112293A (en) * 1997-11-17 2000-08-29 Advanced Micro Devices, Inc. Processor configured to generate lookahead results from operand collapse unit and for inhibiting receipt/execution of the first instruction based on the lookahead result
US6112299A (en) * 1997-12-31 2000-08-29 International Business Machines Corporation Method and apparatus to select the next instruction in a superscalar or a very long instruction word computer having N-way branching
US6141747A (en) * 1998-09-22 2000-10-31 Advanced Micro Devices, Inc. System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word
US6332191B1 (en) * 1999-01-19 2001-12-18 Advanced Micro Devices, Inc. System for canceling speculatively fetched instructions following a branch mis-prediction in a microprocessor
US6247097B1 (en) * 1999-01-22 2001-06-12 International Business Machines Corporation Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions
US6272624B1 (en) * 1999-04-02 2001-08-07 Compaq Computer Corporation Method and apparatus for predicting multiple conditional branches

Also Published As

Publication number Publication date
KR20000062468A (ko) 2000-10-25
TW457426B (en) 2001-10-01
KR100341431B1 (ko) 2002-06-21
US6247097B1 (en) 2001-06-12
US6449714B1 (en) 2002-09-10
JP2000215056A (ja) 2000-08-04

Similar Documents

Publication Publication Date Title
JP3542020B2 (ja) 複数予測分岐命令にわたる命令フェッチの位置合わせ命令キャッシュ処理を実行するプロセッサ装置およびプロセッサ制御方法
US5790823A (en) Operand prefetch table
US6055621A (en) Touch history table
US7493480B2 (en) Method and apparatus for prefetching branch history information
JP3542021B2 (ja) セット予測によりセット連想キャッシュの遅延を少なくする方法及び装置
EP0227892B1 (en) Updates to branch history table in a pipeline processing system
US4521851A (en) Central processor
EP0381444B1 (en) Branch prediction
KR101059335B1 (ko) 가변 길이 명령 세트 실행 모드들을 가지는 프로세서 내의 bht의 효율적 사용방법
EP0394624B1 (en) Multiple sequence processor system
JPH0334024A (ja) 分岐予測の方法とそのための装置
AU2472392A (en) CPU having pipelined instruction unit and effective address calculation unit with retained virtual address capability
US20030182536A1 (en) Instruction issuing device and instruction issuing method
US6647490B2 (en) Training line predictor for branch targets
US6381691B1 (en) Method and apparatus for reordering memory operations along multiple execution paths in a processor
US10338923B2 (en) Branch prediction path wrong guess instruction
US20040168043A1 (en) Line predictor which caches alignment information
JP2001060152A (ja) 分岐予測を抑止する情報処理装置および方法
WO2000008551A1 (en) Software directed target address cache and target address register
EP0912927B1 (en) A load/store unit with multiple pointers for completing store and load-miss instructions
JP3765111B2 (ja) 分岐登録命令を有するプロセッサ
EP0912929B1 (en) A data address prediction structure and a method for operating the same
WO1998002806A1 (en) A data address prediction structure utilizing a stride prediction method
EP0912930B1 (en) A functional unit with a pointer for mispredicted branch resolution, and a superscalar microprocessor employing the same
JP3558481B2 (ja) データ処理装置

Legal Events

Date Code Title Description
RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20040120

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040127

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20040120

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20040316

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20040317

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040325

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20080409

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20080409

Year of fee payment: 4

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

Free format text: PAYMENT UNTIL: 20090409

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20090409

Year of fee payment: 5

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

Free format text: PAYMENT UNTIL: 20100409

Year of fee payment: 6

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

Free format text: PAYMENT UNTIL: 20110409

Year of fee payment: 7

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

Free format text: PAYMENT UNTIL: 20110409

Year of fee payment: 7

LAPS Cancellation because of no payment of annual fees