JP2000215056A - 複数予測分岐命令にわたる命令フェッチの位置合わせ命令キャッシュ処理 - Google Patents

複数予測分岐命令にわたる命令フェッチの位置合わせ命令キャッシュ処理

Info

Publication number
JP2000215056A
JP2000215056A JP330A JP2000000330A JP2000215056A JP 2000215056 A JP2000215056 A JP 2000215056A JP 330 A JP330 A JP 330A JP 2000000330 A JP2000000330 A JP 2000000330A JP 2000215056 A JP2000215056 A JP 2000215056A
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.)
Granted
Application number
JP330A
Other languages
English (en)
Other versions
JP3542020B2 (ja
Inventor
Shinharoi Bararamu
バララム・シンハロイ
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

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/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/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
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

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)

Abstract

(57)【要約】 【課題】 命令のアウト・オブ・シーケンス・ブロック
をその中に記録することができる複数の命令キャッシュ
・セクタを含む位置合わせ命令キャッシュ(AIC)。 【解決手段】 命令の基本ブロックが、プログラム実行
時にAICセクタ内で位置合わせされる。AICディレ
クトリが現行命令アドレスを使用してAICディレクト
リ項目と、複数のセクタを含むAIC内の関連づけられ
た行とを選択する。AICディレクトリ項目は、複数の
AICセクタにそれぞれ関連づけられた複数の「セクタ
S先頭アドレス」フィールドを含み、これらの各ディレ
クトリ・フィールドには、その内容が有効な場合には関
連づけられたAICセクタS内の最初の命令のアドレス
が入れられる。「フェッチ履歴テーブル」(FHT)
に、4つの項目から成るFHTセットに編成された、関
連づけられた各AIC行ごとの4つのFHT項目が含ま
れる。

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】従来のコラプシング・バッファ(Collapsi
ng 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 Ba
ndwidth Fetching」(1996年4月11日)という名
称の論文で、命令のプロセッサ・フェッチを制御する従
来技術の「トレース・キャッシュ」技法が提案されてい
る。このローテンバーグ等の論文では、トレース・キャ
ッシュが、命令キャッシュ(Iキャッシュ)を含む「コ
ア・フェッチ・ユニット」と共に動作する。コア・フェ
ッチ・ユニットは、分岐ターゲット・バッファ(BT
B)、BTB論理回路、および複数分岐予測機構も含
む。コア・フェッチ・ユニットは、一連のフェッチ・サ
イクルを使用してメイン・メモリから命令をそのIキャ
ッシュにフェッチする。
【0020】各フェッチ・サイクルは、分岐予測機構か
らの現在の予測プログラム経路中に1つまたは複数の基
本ブロックを含むことができる。フェッチ・サイクル
は、トレースされ、プログラム中の同じプログラム・ア
ドレスに関連づけられたトレース・キャッシュ・ライン
に記憶された前の経路と一致する経路内のすべての命令
を含む。現行フェッチ・サイクルは、アドレスされたト
レース・キャッシュ・ラインに記憶されている経路と不
一致のときには常に終了する。現行トレース・キャッシ
ュ・ラインを示す情報が、トレース・キャッシュ・ライ
ンに関連づけられたトレース・タグ・キャッシュ・ディ
レクトリ項目に記憶される。
【0021】トレース・タグ・キャッシュは、トレース
・バッファと、トレース・タグ・ディレクトリと、トレ
ース・ライン・フィル・バッファおよび論理とから成
る。トレース・タグ・ディレクトリには、制御情報が入
れられる。
【0022】トレースの長さは命令数nと基本ブロック
数mの2通りの方法で制限され、そのうちnはプロセッ
サのピーク・ディスパッチ・レートによって制限され、
mは1フェッチ・サイクル当たりの分岐予測の平均数に
よって制限される。トレース・タグ・ディレクトリ内の
各項目内の制御情報は、有効ビットと、先頭アドレスが
入ったタグ・フィールドと、各ビットが各(成立または
不成立)分岐命令の後にたどる経路を示すトレース内の
分岐を表す、(m−1)ビットを有する分岐フラグ・フ
ィールドと、(1)関連づけられたトレース内の分岐の
数と(2)トレースが分岐で終わるかどうかを示す分岐
マスク・フィールドと、分岐が成立しない場合に次のフ
ェッチのアドレスが入れられるトレース不成立アドレス
・フィールドと、分岐が成立した場合に次のフェッチ・
アドレスが入れられるトレース・ターゲット・アドレス
・フィールドとである。
【0023】ローテンバーグ等のBTB内の16個の項
目すべてが、選択されたトレース・タグ・キャッシュ・
ライン内の16個の命令と並列して動作して、その中の
各命令が分岐命令ではないか調べる。分岐予測回路は、
グローバル・アドレス相関分岐予測機構(GAg)と単
一パターン履歴テーブルを使用する。BTB論理は、B
TBヒット情報を分岐予測と結合して、次のフェッチ・
アドレスを生成し、有効命令ビット・ベクトルを生成す
る。
【0024】予測論理によって複数分岐予測が行われる
間、ローテンバーグ等のトレース・キャッシュ、BT
B、および命令キャッシュすべてに並列してアクセスさ
れる。トレース・キャッシュ・ヒットには、現行トレー
ス・ディレクトリ項目について、(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ディレクトリは、関連づけられたA
IC行内の各セクタSについて「セクタS先頭アドレ
ス」フィールドを含み、このフィールドには、関連づけ
られたAICディレクトリ項目でその内容が有効である
と示された場合に、関連づけられたセクタS内の最初の
命令のメモリ・アドレスが入れられる。各AICディレ
クトリ項目は、それに関連づけられたAIC行Rのイン
デックスと同じディレクトリインデックスRに配置する
ことができる。
【0033】FHTは、直接マップ・テーブルまたはセ
ットアソシアティブ・テーブルとすることができる。直
接マップされる場合、FHT項目のインデックスはAI
C内の関連づけられた行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から除去される(すなわち項目は古くなると無効
化される)ことがないだけ頻繁にヒットが起こる限り、
それと同じシーケンスの命令が再度実行されるたびにF
HTヒットが起こる。
【0037】有効なFHT項目は、選択されたAIC行
R内の選択されたセクタを出力するためにAIC内のセ
クタのそれぞれの列をつなぐセクタ・ゲートを使用可能
にする。セクタ・ゲートは、FHT項目に記録された順
序で使用可能にされ、それによって、それぞれのFHT
項目で示されているどのような順序でも、選択されたセ
クタ内の命令のシーケンスをプロセッサによって実行す
るためにアウトゲートされる。
【0038】好ましい実施形態は、各FHT項目内に
「セクタ配列」フィールドと「セクタ分岐結果」フィー
ルドを有する実施態様においてその実行履歴を効率的に
記録し、サブフィールド・インデックスによってこれら
のフィールドの履歴内容が関係づけられ、一方のフィー
ルド内のサブフィールドによってセクタが識別され、他
方のフィールド内のサブフィールドによって分岐結果
(すなわち識別されたセクタに分岐命令が含まれている
か否か、含まれている場合はその分岐が成立か不成立
か)が示される。好ましい実施態様は2つのフィールド
を使用するが、代わりに単一のフィールドを使用して同
じ履歴情報を含めることもできることは明らかである。
【0039】FHT項目に記録された履歴シーケンス
は、同じプログラム中の前の実際の実行シーケンスに基
づく、何度も繰り返されると予測される命令の予測シー
ケンスである。
【0040】本発明は、同じAIC行に記憶された命令
の有効セクタについて異なる実行シーケンス履歴を同時
に記録することができる。これは、複数のFHT項目に
同じAIC行を関連づけることによって行われ、好まし
い実施形態では複数のFHT項目から成るセットを各A
IC行に関連づけることによって実現される。たとえ
ば、各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記録プロセスの動作は、任意のFH
Tセット内の最初の項目と、同じセット内の後で生成さ
れた項目とでは若干異なる。その理由は、最初の項目は
関連づけられたAIC行がプロセッサ・メモリからコピ
ーされた命令(この命令は同時に実行するために迂回す
ることもできる)で一杯になったときに生成されるため
である。セット内の他のFHT項目は、後で、同じAI
C行内の前に満たされたセクタのために異なる実行シー
ケンスが発生されたときに生成される。
【0046】本発明は、任意の選択されたAIC行内の
セクタについて任意のシーケンスのアウトゲートをサポ
ートすることができ、特別な状況では、複数のセクタの
うちのいずれのセクタが最初にアウトゲートするセクタ
であるかを示すことが望ましい。これは、各FHT項目
内に「先頭命令アドレス」フィールドを設けて、セクタ
のシーケンス内でどのセクタを最初にアウトゲートすべ
きであるかを示すことによってサポートされる。
【0047】(しばしばターゲット分岐の計算などいく
つかの処理ステップを回避することによって)記録され
た履歴シーケンスがアウトゲートされた後で次のAIC
行を選択する際の時間を節約するために、本発明は各F
HT項目内に「次命令フェッチ・アドレス」フィールド
を設け、プロセッサはそこから次の命令が入っている可
能性が高い次のAIC行をただちに判断することができ
る。
【0048】
【発明の実施の形態】略語の定義: AIC=位置合わせ命令キャッシュ FHT=フェッチ履歴テーブル R=AIC内の選択された行 FHTセット=選択されたAIC行に関連づけられたF
HT項目のセット 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から判断する。たとえば、F
HT内の各セットが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はセットアソシアティブであっ
てもなくてもよい。セットアソシアティブの場合、AI
C内の各合同クラスは複数の行(一般には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と、「分岐予測ユニット」1
7と、「命令順序づけバッファ」(ISB)18と、実
行不一致コントロール19とを含む。図2に、AICデ
ィレクトリ項目22を示し、図3にFHT項目をより詳
細に示す。AIC行は、AIC内のインデックス0〜5
11に配置されている。FHT項目はFHT内のインデ
ックス0〜2047に配置されている。AIC内の任意
の選択された行のインデックスRを使用して、FHT1
4内の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セットを選択することができる。A
IC行21とそれに関連づけられたAICディレクトリ
項目22は、そのセクタ・アドレスのうちのいずれかの
セクタ・アドレスが選択されると選択されたと見なされ
る。
【0059】IFARが最初にFHT14内の4つの項
目24から成るセットを選択すると、FHTセット内の
最初のFHT項目FHT(0)が最初に選択される。そ
の後、このセット内のFHT項目の選択は、たとえばF
HT(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は、F
HT内の、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を選択する
ものである。この技法は、従来の技術では「合同(cong
ruence)クラス」キャッシュ行選択と呼ばれることがあ
る。
【0061】システム・メモリ階層からフェッチされ、
AICの1つまたは複数の行にコピーされる各基本ブロ
ックのために「セクタ位置合わせ」機能を備える。この
位置合わせは、コピーされた各基本ブロックの最初の命
令を常にAICセクタの先頭命令位置、たとえばセクタ
内の8個の命令記憶位置のうちの位置1に書き込むこと
によって行われ、本明細書ではこの位置をセクタの左端
であるものとする。基本ブロックは、任意の行の4つの
セクタのうちのいずれかのセクタの先頭位置から始まる
ことができる。基本ブロックは、任意の数の命令を有す
ることができ、したがって単一のセクタ内の命令位置の
数よりも少ないか、等しいか、より多いことがある。基
本ブロックが、セクタの8個未満の位置に記憶される場
合、セクタ内の基本ブロックによって使用されない各命
令記憶域(その基本ブロックを終わらせる分岐命令の右
側にある)は、各未使用命令位置に「無命令」(NO
P)コードを書き込むことによって埋められる。基本ブ
ロックがセクタ・サイズと等しい(たとえば8命令)場
合、その終わりの分岐命令はセクタ内の最後の命令位置
に入れられ、そのセクタにはNOPは書き込まれない。
しかし、基本ブロックがセクタを超える(たとえば8以
上の命令を有する)場合、その基本ブロックの命令は、
基本ブロックがいずれかのセクタで終わるまで、同じA
IC行の次の各セクタに順次に記憶される。基本ブロッ
クがその行の最後のセクタを超える場合は、AICの別
の行内に続き、(別の行に記憶される基本ブロックの最
初の命令の)IFARアドレスは、関連づけられた4個
のFHT項目のセット内の選択されたFHT項目内の
「次IFARアドレス」フィールドに記憶される。基本
ブロックは、AIC内の1つまたは複数の行内の任意の
数のセクタを占有することができる。また、基本ブロッ
クは1つの命令(分岐)しか持たないこともでき、その
命令はセクタの先頭の位置にのみ配置される。
【0062】「命令順序づけ」バッファ18は、AIC
から選択的に出力される命令のセクタを受け取る。セク
タは、プログラムが必要とするいずれかの順序でISB
18に出力され、命令をプロセッサの実行パイプライン
に供給するために任意の実行プログラムが必要とするい
ずれかの順序で、基本ブロックに命令の順序が与えられ
る。命令は、プログラムのために実行する必要があり、
それらの命令が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アドレ
ス」フィールドも有し、それぞれ、関連づけられたAI
C行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つの
サブフィールドを有し、各サブフィールドには同じFH
T項目の「セクタ配列」フィールド内のそれぞれのサブ
フィールドが関連づけられている。たとえば、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では不成立経路は次の後続セクタへの水平
の矢印で示されている。セクタに分岐が入っている場
合、そのセクタ内でその分岐に続く実際の命令がなく、
その分岐が成立または不成立であって、セクタ内の最後
の命令内にない場合、セクタ内の残りの各命令位置はN
OPコードで埋められる。
【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行から「命令順序づけバッファ」(I
SB)への命令の出力が制御される。ヒットFHT項目
内の「セクタ配列」フィールドに「0124」が入って
いるものとすると、それによってセクタVおよびU内の
命令がこの順序でただちに出力され、現行フェッチ・サ
イクル中にISBに転送されることになり、これは、シ
ステム階層記憶域内のどの場所に非順次に入っている
か、異なる命令記憶ラインに入っているかには関係がな
い。ヒットFHT項目内の「次IFAR命令」は、シス
テム記憶内のどこに記憶されているかに関係なく、AI
C内のどこで次に必要な命令セクタが実行のためにただ
ちに使用可能であるかを示す。たとえば、「次IFAR
命令」フィールドにアドレスYが入っているとする。そ
の場合、Yはプログラム中の次に実行する命令のアドレ
スであり、従来の低速な方法で入手するのを待たずに、
YがIFARにロードされ、次の命令フェッチ・サイク
ルを開始するためにIFARをセットする。
【0077】FHTセットの最初のFHT項目は、セク
タが関連づけられたAIC行Rに書き込まれる間に生成
され、それによって最初のFHT項目は、そのセクタが
順次に(すなわち、その「セクタ配列」フィールドで示
された0、1、2、3の順)出力されるべきであること
を示す特別なセットアップを有することができる。した
がって、このような最初のFHT項目がFHTヒットを
有する場合、最初のFHT項目は、0、1、2、3の順
のセクタ出力順序を制御する。同じセット内の他のHF
T項目は、その「セクタ配列」フィールド内の別の順序
でセクタ出力を制御することになる。
【0078】具体的プロセスの説明 図5から図14に、図1に示すハードウェアにおいて好
ましい実施形態によって行われる特定のプロセスについ
て説明する。
【0079】図5および図6に、初期設定動作と基本F
HT制御動作を示す。最初の動作401で、プログラム
はプロセッサでの実行を開始する。そのうちの本発明の
新規なプロセッサ部分のみを示す。プロセッサの残りの
部分は従来技術に見られるように構成され、動作するも
のとみなすことができる。次に、動作402で、プロセ
ッサの命令フェッチ・アドレス・レジスタ(IFAR)
が、プログラム中で最初に実行される命令の仮想アドレ
スをその中に設定することによってプログラム中の最初
の命令アドレスに設定される。
【0080】次に、プロセッサは、次の動作403でI
FARアドレスを使用し、IFARによってアドレス指
定された命令から初めて、プログラム中の次の「m」個
の分岐の予測を入手する。この予測動作403には、
(本明細書で前述した)「分岐結果予測ベクトル」の入
手が含まれる。予測とそのベクトルとを入手するプロセ
スによって、IFAR内の命令アドレスからプログラム
の実行シーケンスで予測された最大「m」個の基本ブロ
ック内の命令をフェッチする試みのための本発明の「フ
ェッチ・サイクル」が開始される。
【0081】各「分岐結果予測ベクトル」(ベクトル)
が、対応する「m」分岐予測内の分岐命令のシーケンス
の結果にそれぞれ対応するビットのシーケンスとして生
成される。ベクトル内の各ビットの部分は、「m」予測
内の対応する分岐命令の部分に対応し、ビットの値は分
岐におけるプログラム動作の結果、すなわち、対応する
分岐命令が成立と不成立のいずれとして予測されている
かを示す。各「m」予測内の基本ブロックは、IFAR
アドレスと予測された次の「m」個の分岐とによって決
まる。したがって、「m」分岐予測最初の基本ブロック
は、IFARアドレスにある命令から開始し、予測に含
まれる分岐命令のターゲット・アドレスを使用して入手
された最大「m」個の基本ブロックを含む。本発明の通
常の動作では、IFARアドレスは次に最後のフェッチ
・サイクルの終わりに入手される。したがって、「ベク
トル」はAICまたはFHTを調べる前に生成される。
【0082】次に、プロセスは動作404に進み、ハッ
シュ・アルゴリズム(従来のものとすることができる)
でこのIFARアドレスを使用して、AICディレクト
リ内のドレスを生成し、IFARアドレスに関連づけら
れた行Rを探し出す。次に、IFARアドレスを、AI
Cディレクトリ項目R内の4つの「セクタ先頭アドレ
ス」の各セクタ先頭アドレスと突き合わせて一致がある
か否かを判断する。一致があれば、対応するAIC行R
の突き合わせセクタ内で「AICヒット」が得られ、次
の動作406に入る。一致が見つからない場合は、「A
ICミス」になり、プロセスは図11の入口点F(図1
1の表記(F)で示す)に進む。
【0083】AICヒットが発生した場合、新規な動作
406によって、本明細書で前述した、選択されたAI
C行Rとそれに関連づけられたFHTセットとの新規な
関係を使用して、関連づけられたFHTセットにアクセ
スし、FHTヒットとミスのいずれが見つかったかが判
断される。この判断を行うために、動作406では、F
HTセット内の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】セクタのアウトゲートが完了した後、IF
ARは「次行アドレス」に格納されているアドレスに設
定されてから、プロセスは動作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で、たとえばハッシュI
FARアドレスを使用して、AIC行Rを選択する。ま
た、この動作では、それに関連づけられたFHTセット
も選択し、そのセット内の4つのFHT項目がすべて無
効化される。
【0094】次に、動作503で、関連づけられたFH
Tセット内の最初の項目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項目F
HT(0)、FHT(1)、FHT(2)、およびFH
T(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で、フェッチされた命令がIS
Bと、選択された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行内でも、命令は、メモリ内にある「場所シーケ
ンス」ではなく、プログラムの基本ブロックの「実行シ
ーケンス」でメモリからフェッチされ、選択されたAI
C行のセクタに書き込まれる。行に書き込まれるこのセ
クタ順序は、その行の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がS
T+1と等しいか否かが検査される。)
【0108】したがって、Sが4と等しくない場合、行
内で少なくとも1つのセクタがまだ使用されておらず、
動作611が行われ、IFARアドレスが現在アクセス
している「メモリ・ライン」と照合されて、次のセクタ
の命令が含まれているか否かを判断する。S=4の場
合、このAIC行にはそれ以上セクタが残っておらず、
動作612が行われる。
【0109】動作611で、メモリ・ラインに現行IF
ARアドレスが入っていない場合、その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によって
現在アドレス指定されている命令が入っている現行AI
C行に関連づけられたFHTセット内の無効FHT項目
を見つける。(関連づけられたFHTセットは、FHT
内のインデックス4*R、4*R+1、4*R+2、4
*R+3位置にある。この場合4はFHTセット内の項
目数である。)この無効FHT項目は次に処理するFH
T項目として選択される。FHTセット内に複数の無効
FHT項目が存在する場合、それらのうちのいずれでも
選択することができるが、ここではラウンド・ロビン選
択技法を使用するものとする。FHTセット内に無効F
HT項目が存在しない場合、セット内の有効項目のうち
の最も長期間使用されなかった(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)に記載のF
HTを使用するプロセッサ装置。 (5)前記Iキャッシュに格納されたブロックのそれぞ
れのグループに関連づけられた前記FHT内の複数のF
HT項目のセットと、前記それぞれのグループ内の前記
ブロックの実行の異なる履歴シーケンスを示す前記セッ
ト内の各FHT項目とをさらに含む、上記(4)に記載
のFHTを使用するプロセッサ装置。 (6)前記グループの前記ブロックが前記Iキャッシュ
に格納されるときにグループ内の前記ブロックの実行の
シーケンスを記録する前記セット内の第1のFHT項目
と、ブロックの前記グループが前記Iキャッシュに書き
込まれた後で行われる前記プログラム中の前記ブロック
の実行の異なる履歴シーケンスを記録する前記グループ
内の他の各FHT項目とをさらに含む、上記(5)に記
載のFHTを使用するプロセッサ装置。 (7)前記FHT項目内の前記履歴シーケンスを記録す
るために各FHT項目内に設けられたブロック・シーケ
ンス・フィールドをさらに含む、上記(1)に記載のF
HTを使用するプロセッサ装置。 (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)に記載のF
HTを使用するプロセッサ装置。 (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)に記載のFH
Tを使用するプロセッサ装置。 (19)前記関連づけられたFHT項目内の前記シーケ
ンス情報によって示された前記実行シーケンスで最初に
出力すべき前記関連づけられたAIC行のセクタ内の最
初の命令のアドレスを示す、各有効FHT項目内の先頭
命令フィールドをさらに含む、上記(18)に記載のF
HTを使用するプロセッサ装置。 (20)前記FHT項目内で示された前記セクタ・シー
ケンス内の最後の命令の後に続くべき(前記プログラム
実行シーケンス中の)命令のアドレスを示す、各有効F
HT項目内の次命令アドレス・フィールドをさらに含
む、上記(19)に記載のFHTを使用するプロセッサ
装置。 (21)プログラムの前の実行の実行履歴を使用して、
コンピュータ・システム内に記憶されたプログラムの複
数の基本ブロックから入手した命令の実行のために即時
に順序づけするプロセッサ方法であって、各フェッチ・
サイクルが前記プログラムの最大「m」個の複数の基本
ブロックに含まれる命令を実行のために順序づけするこ
とができる、フェッチ・サイクルを使用して実行のため
に前記プログラムの命令を順序づけするステップと、入
口アドレスとターゲット・アドレスがそれぞれフェッチ
・サイクルのサイクル開始アドレスであり、最初はプロ
グラム内の入口アドレスでありその後は前のフェッチ・
サイクル中の最後の分岐命令から入手したターゲット・
アドレスである命令アドレスを使用して、プログラム実
行が完了するまで各フェッチ・サイクルを開始するステ
ップと、予測ベクトルが状態ビットのストリングを含
み、各状態ビットが前記プログラム実行シーケンス内で
次に発生すると予測された「m」個の分岐命令の各分岐
命令の成立状態または不成立状態を示す、前記開始アド
レスを使用して各フェッチ・サイクルの最初に予測ベク
トルを入手するステップと、位置合わせIキャッシュ
(AIC)ディレクトリ内で前記サイクル開始アドレス
を探索し、(関連づけられたAIC内の)いずれかのA
IC行が前記サイクル開始アドレスを有する命令を含む
か否かを判断し、AIC行内のAICセクタ内に前記命
令が見つかった場合はAICヒットを示すが、前記AI
C内に前記命令が見つからない場合はAICミスを示す
ステップと、AICヒットが示された場合、見つかった
前記AIC行に関連づけられたFHT内のFHT項目の
フェッチ履歴テーブル(FHT)セットを探し出すステ
ップと、前記予測ベクトルを前記探し出したFHTセッ
トのFHT項目内の「セクタ分岐結果」情報と比較し、
FHTヒットを有する前記FHTセット内のいずれかの
FHT項目を選択し、前記セット内のいずれのFHT項
目にもFHTヒットがない場合にはFHTミスが発生す
るステップと、FHTヒットが発生した場合、前記FH
T項目の「セクタ配列」情報で示されたシーケンスで前
記セクタの出力を制御することによって、前記FHT項
目内の前記「セクタ配列」情報で示されたAICセクタ
内の命令を実行のために出力するステップとを含むプロ
セッサ方法。 (22)各AIC行が所定数のセクタを含み、各セクタ
が所定数の命令記憶位置を有し、AICミスが発生した
場合、前記サイクル開始アドレスを使用して前記AIC
ディレクトリ内で前記AIC行に関連づけられたディレ
クトリ項目を選択するステップと、前記FHT内で選択
された前記AIC行に関連づけられたFHT項目を選択
するステップと、将来の使用のための選択された前記A
IC行と選択された前記FHT項目のセットアップに備
えて、選択された前記AIC行を無効化し、選択された
前記FHT項目を無効化するステップと、前記コンピュ
ータ・システムの記憶階層内の前記フェッチ・サイクル
開始アドレスにある命令を含むメモリ・ラインを探し出
すステップと、前記メモリ・ライン内の前記サイクル開
始アドレスにある命令のフェッチを開始し、前記フェッ
チされた命令を、前記セクタの位置合わせ命令位置から
始まって前記行内の最初のセクタ内にコピーし、分岐命
令が検出されるか、前記AIC行の終わりに達するか、
または前記メモリ・ラインの終わりに達するかいずれか
のうち最も早いものに達したときに前記フェッチおよび
コピーを終了し、必要な場合には前記AIC行内の連続
したセクタ内のフェッチおよびコピーを継続すると同時
に、前記フェッチおよびコピーが進むにつれて前記プロ
グラム命令アドレスを更新し、前記行内にコピーされた
最初の基本ブロックが前記行のいずれかのセクタ内で終
わるステップと、前記命令がフェッチされコピーされる
につれて前記命令を実行のために出力するステップと、
前記行内の前記最初のセクタを位置指定するために前記
AICディレクトリ項目内の「セクタ先頭アドレス」に
前記サイクル開始アドレスを格納し、選択された前記F
HT項目内の「セクタ配列」フィールド内の最初のセク
タ位置に先頭セクタ標識を格納し、選択された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)内のFH
T項目の例を示す図である。
【図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 (25)

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

Applications Claiming Priority (2)

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

Publications (2)

Publication Number Publication Date
JP2000215056A true JP2000215056A (ja) 2000-08-04
JP3542020B2 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 (121)

* 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
EP1754142B1 (en) * 2004-05-27 2008-05-28 Nxp B.V. 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
US7937564B1 (en) 2005-09-28 2011-05-03 Oracle America, Inc. Emit vector optimization of a trace
US7747822B1 (en) 2005-10-31 2010-06-29 Oracle America Inc. Maintaining memory coherency with a trace cache
US7949854B1 (en) 2005-09-28 2011-05-24 Oracle America, Inc. Trace unit with a trace builder
US8032710B1 (en) 2005-09-28 2011-10-04 Oracle America, Inc. System and method for ensuring coherency in trace execution
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
US7779307B1 (en) 2005-09-28 2010-08-17 Oracle America, Inc. Memory ordering queue tightly coupled with a versioning cache circuit
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
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
US7849292B1 (en) 2005-09-28 2010-12-07 Oracle America, Inc. Flag optimization of a trace
US7877630B1 (en) 2005-09-28 2011-01-25 Oracle America, Inc. Trace based rollback of a speculatively updated cache
US7953933B1 (en) 2005-09-28 2011-05-31 Oracle America, Inc. Instruction cache, decoder circuit, basic block cache circuit and multi-block cache circuit
US7546420B1 (en) * 2005-09-28 2009-06-09 Sun Microsystems, Inc. Efficient trace cache management during self-modifying code processing
US7783863B1 (en) 2005-09-28 2010-08-24 Oracle America, Inc. Graceful degradation in a trace-based processor
US8370576B1 (en) 2005-09-28 2013-02-05 Oracle America, Inc. Cache rollback acceleration via a bank based versioning cache ciruit
US7870369B1 (en) 2005-09-28 2011-01-11 Oracle America, Inc. Abort prioritization in a trace-based processor
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
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
US8499293B1 (en) 2005-09-28 2013-07-30 Oracle America, Inc. Symbolic renaming optimization of a trace
US7568088B1 (en) 2005-10-26 2009-07-28 Sun Microsystems, Inc. Flag management in processors enabled for speculative execution of micro-operation traces
US8019944B1 (en) 2005-09-28 2011-09-13 Oracle America, Inc. Checking for a memory ordering violation after a speculative cache write
US7966479B1 (en) 2005-09-28 2011-06-21 Oracle America, Inc. Concurrent vs. low power branch prediction
US8024522B1 (en) 2005-09-28 2011-09-20 Oracle America, Inc. Memory ordering queue/versioning cache circuit
US7797517B1 (en) 2005-11-18 2010-09-14 Oracle America, Inc. Trace optimization via fusing operations of a target architecture operation set
US7681019B1 (en) 2005-11-18 2010-03-16 Sun Microsystems, Inc. Executing functions determined via a collection of operations from translated instructions
WO2007143278A2 (en) 2006-04-12 2007-12-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US20080126771A1 (en) * 2006-07-25 2008-05-29 Lei Chen Branch Target Extension for an Instruction Cache
US20080077778A1 (en) * 2006-09-25 2008-03-27 Davis Gordon T Method and Apparatus for Register Renaming in a Microprocessor
US20080215804A1 (en) * 2006-09-25 2008-09-04 Davis Gordon T Structure for register renaming in a microprocessor
US8010745B1 (en) 2006-09-27 2011-08-30 Oracle America, Inc. Rolling back a speculative update of a non-modifiable cache line
US8370609B1 (en) 2006-09-27 2013-02-05 Oracle America, Inc. Data cache rollbacks for failed speculative traces with memory operations
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
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
EP2122461A4 (en) 2006-11-14 2010-03-24 Soft Machines Inc DEVICE AND METHOD FOR PROCESSING COMMUNICATIONS IN A MULTITHREAD ARCHITECTURE WITH CONTEXT CHANGES
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 전남대학교산학협력단 저 전력 트레이스 캐쉬 및 명령어 세트 예측기를 구비한 프로세서 시스템
EP2616928B1 (en) 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
US9678755B2 (en) 2010-10-12 2017-06-13 Intel Corporation Instruction sequence buffer to enhance branch prediction efficiency
EP3306466B1 (en) * 2010-10-12 2020-05-13 INTEL Corporation An instruction sequence buffer to store branches having reliably predictable instruction sequences
US9274793B2 (en) 2011-03-25 2016-03-01 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
EP2689327B1 (en) 2011-03-25 2021-07-28 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
TWI548994B (zh) 2011-05-20 2016-09-11 軟體機器公司 以複數個引擎支援指令序列的執行之互連結構
KR101639853B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 자원들 및 상호접속 구조들의 비집중 할당
WO2013025556A1 (en) 2011-08-12 2013-02-21 Splunk Inc. Elastic scaling of data volume
EP2783281B1 (en) 2011-11-22 2020-05-13 Intel Corporation A microprocessor accelerated code optimizer
KR101842550B1 (ko) 2011-11-22 2018-03-28 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
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
US9710399B2 (en) 2012-07-30 2017-07-18 Intel Corporation Systems and methods for flushing a cache with modified data
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
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
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
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
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
EP2972845B1 (en) 2013-03-15 2021-07-07 Intel Corporation A method for executing multithreaded instructions grouped onto blocks
CN105247484B (zh) 2013-03-15 2021-02-23 英特尔公司 利用本地分布式标志体系架构来仿真访客集中式标志体系架构的方法
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
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
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
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
WO2019152772A1 (en) 2018-02-02 2019-08-08 The Charles Stark Draper Laboratory, Inc. Systems and methods for policy execution processing
US20210042100A1 (en) 2018-02-02 2021-02-11 Dover Microsystems, Inc. System and method for translating mapping policy into code
US11416395B2 (en) 2018-02-05 2022-08-16 Micron Technology, Inc. Memory virtualization for accessing heterogeneous memory components
US11099789B2 (en) 2018-02-05 2021-08-24 Micron Technology, Inc. Remote direct memory access in multi-tier memory systems
US10782908B2 (en) 2018-02-05 2020-09-22 Micron Technology, Inc. Predictive data orchestration 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
US11797398B2 (en) 2018-04-30 2023-10-24 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
WO2020097179A1 (en) 2018-11-06 2020-05-14 Dover Microsystems, Inc. Systems and methods for stalling host processor
US11841956B2 (en) 2018-12-18 2023-12-12 Dover Microsystems, Inc. Systems and methods for data lifecycle protection
DE112020000146T5 (de) 2019-01-31 2021-09-09 International Business Machines Corporation Handhabung einer eingabe-/ausgabe-speicheranweisung
TWI773959B (zh) 2019-01-31 2022-08-11 美商萬國商業機器公司 用於處理輸入輸出儲存指令之資料處理系統、方法及電腦程式產品
CN113366438A (zh) 2019-01-31 2021-09-07 国际商业机器公司 处理输入/输出存储指令
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
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
US6247097B1 (en) 2001-06-12
US6449714B1 (en) 2002-09-10
TW457426B (en) 2001-10-01
JP3542020B2 (ja) 2004-07-14
KR100341431B1 (ko) 2002-06-21

Similar Documents

Publication Publication Date Title
JP3542020B2 (ja) 複数予測分岐命令にわたる命令フェッチの位置合わせ命令キャッシュ処理を実行するプロセッサ装置およびプロセッサ制御方法
US7493480B2 (en) Method and apparatus for prefetching branch history information
US4521851A (en) Central processor
EP0227892B1 (en) Updates to branch history table in a pipeline processing system
JP3542021B2 (ja) セット予測によりセット連想キャッシュの遅延を少なくする方法及び装置
US5790823A (en) Operand prefetch table
US6055621A (en) Touch history table
US7441110B1 (en) Prefetching using future branch path information derived from branch prediction
US4679141A (en) Pageable branch history table
EP0107449B1 (en) Computer with multiple operating systems
EP0381444A2 (en) Branch prediction
EP0480193A2 (en) Multi-prediction branch prediction mechanism
US6883086B2 (en) Repair of mis-predicted load values
US6052776A (en) Branch operation system where instructions are queued until preparations is ascertained to be completed and branch distance is considered as an execution condition
US5297281A (en) Multiple sequence processor system
JPS6341093B2 (ja)
JPH096611A (ja) データ処理システムにおけるデータをバッファリングする方法およびシステム
US20050204120A1 (en) Effective delayed, minimized switching, BTB write via recent entry queue that has the ability to delay decode
US20100287358A1 (en) Branch Prediction Path Instruction
US5893146A (en) Cache structure having a reduced tag comparison to enable data transfer from said cache
JP2596712B2 (ja) 近接した分岐命令を含む命令の実行を管理するシステム及び方法
JP2001060152A (ja) 分岐予測を抑止する情報処理装置および方法
EP0912927B1 (en) A load/store unit with multiple pointers for completing store and load-miss instructions
EP0912929B1 (en) A data address prediction structure and a method for operating the same
EP0912928A1 (en) A data address prediction structure utilizing a stride prediction method

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