JP2008535063A - インデックス当り2つ以上の分岐ターゲットアドレスを記憶する分岐ターゲットアドレスキャッシュ - Google Patents
インデックス当り2つ以上の分岐ターゲットアドレスを記憶する分岐ターゲットアドレスキャッシュ Download PDFInfo
- Publication number
- JP2008535063A JP2008535063A JP2008503255A JP2008503255A JP2008535063A JP 2008535063 A JP2008535063 A JP 2008535063A JP 2008503255 A JP2008503255 A JP 2008503255A JP 2008503255 A JP2008503255 A JP 2008503255A JP 2008535063 A JP2008535063 A JP 2008535063A
- Authority
- JP
- Japan
- Prior art keywords
- branch
- instruction
- address
- cache
- branch target
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 claims abstract description 21
- 241001522296 Erithacus rubecula Species 0.000 claims abstract description 4
- 238000011156 evaluation Methods 0.000 claims description 12
- 230000004044 response Effects 0.000 claims description 2
- 230000006870 function Effects 0.000 description 7
- 238000013461 design Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000013519 translation Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000013475 authorization Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 101000603407 Homo sapiens Neuropeptides B/W receptor type 1 Proteins 0.000 description 1
- 101000603411 Homo sapiens Neuropeptides B/W receptor type 2 Proteins 0.000 description 1
- 102100038847 Neuropeptides B/W receptor type 1 Human genes 0.000 description 1
- 102100038843 Neuropeptides B/W receptor type 2 Human genes 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3848—Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
Abstract
分岐ターゲットアドレスキャッシュ(BTAC)は、各キャッシュライン中に少なくとも2つの分岐ターゲットアドレスを記憶する。BTACは、切り捨てられた命令アドレスによりインデックス付けされる。分岐ターゲットアドレスのどれが予測分岐ターゲットアドレスとしてとられるかを、分岐予測オフセットテーブルから取得されるオフセットが決定する。いくつかの方法でオフセットテーブルをインデックス付けしてもよく、それらの方法は、分岐履歴によるもの、分岐履歴のハッシュおよび分岐命令アドレスの一部によるもの、gshare値によるもの、ランダムによるもの、ラウンドロビン順序によるもの、または他の方法によるものを含んでもよい。
【選択図】 図2
【選択図】 図2
Description
本発明は、一般にプロセッサの領域に関し、詳細には、インデックス当り2つ以上の分岐ターゲットアドレスを記憶する分岐ターゲットアドレスキャッシュに関する。
マイクロプロセッサは、広範囲のさまざまなアプリケーション中で計算タスクを実行する。強化されたソフトウェアを通して、より速い動作および/または増加された機能を実現することにより製品の改良をするために、プロセッサの性能を向上させることは永遠の設計目標である。ポータブル電子デバイスのような多くの組み込まれたアプリケーションにおいて、節電することおよびチップサイズを減少させることは、一般にプロセッサの設計および実現における目標である。
多くの最近のプロセッサはパイプラインアーキテクチャを使用し、パイプラインアーキテクチャでは、複数の実行ステップをそれぞれ有するシーケンシャルな命令が、実行においてオーバーラップされている。シーケンシャルな命令ストリーム中の命令間で並列処理を活用するこの能力は、プロセッサの性能の向上に大いに貢献することができる。ある条件下で、いくつかのプロセッサは、実行サイクルごとに命令を完了することができる。
命令間のデータ依存(データハザード)、分岐のような制御依存(制御ハザード)、プロセッサリソース割当てコンフリクト(構造ハザード)、割り込み、キャッシュミス、およびこれらに類するものを含むさまざまな要因のため、実際にはこのような理想的な条件はほとんど実現されない。したがって、プロセッサ設計の共通の目標はこれらのハザードを回避し、パイプラインを“フル”に保持することである。
実世界のプログラムは一般に条件分岐命令を含み、命令がパイプライン中で深く評価されるまで、条件分岐命令の実際の分岐ふるまいは分からないかもしれない。分岐命令の次にどの命令をフェッチすればよいのかがプロセッサに分からず、条件分岐命令が評価されるまで分からないため、この分岐の不確実性はパイプラインをストールする制御ハザードを発生させることがある。一般に最新のプロセッサはさまざまな形態の分岐予測を使用し、それによって条件分岐命令の分岐ふるまいはパイプライン中で早期に予測され、分岐予測に基づいてプロセッサは推論的に命令をフェッチして実行し、この結果パイプラインをフルに保持する。予測が正しい場合、性能は最大化され、電力消費は最小化される。分岐命令が実際に評価されるときに、分岐が誤って予測された場合、推論的にフェッチされた命令をパイプラインからフラッシュして、正しい分岐ターゲットアドレスから新しい命令をフェッチしなければならない。誤って予測された分岐はプロセッサの性能および電力消費に悪影響を与える。
通常の分岐予測には2つの構成要素があり、それは条件評価および分岐ターゲットアドレスである。条件評価は2分決定であり、それは、分岐が、異なるコードシーケンスに実行をジャンプさせる分岐成立か、または分岐不成立かのどちらかであり、分岐不成立のケースにおいては、分岐命令に続く次のシーケンシャルな命令をプロセッサは実行する。分岐が成立するとして評価される場合、分岐ターゲットアドレスは次の命令のアドレスである。いくつかの分岐命令は、命令演算コード中に分岐ターゲットアドレスを含み、またはそれによって分岐ターゲットアドレスを容易に計算することができるオフセットを含む。他の分岐命令に対しては、(分岐が成立するとして条件評価が予測される場合)分岐ターゲットアドレスを予測しなければならない。
分岐ターゲットアドレス予測の1つの知られている技術は、分岐ターゲットアドレスキャッシュ(BTAC)である。BTACは一般に、完全に連想キャッシュであり、分岐命令アドレス(BIA)によりインデックス付けされ、それぞれのデータ位置(すなわちキャッシュ“ライン”)が単一の分岐ターゲットアドレス(BTA)を含んでいる。パイプライン中で分岐が成立するとして分岐命令が評価されて、その実際のBTAが計算されるとき、BIAおよびBTAが(例えば、ライトバックパイプラインステージ中に)BTACに対して書き込まれる。新しい命令をフェッチするとき、BTACは命令キャッシュ(すなわち、I−キャッシュ)と並列にアクセスされる。命令アドレスがBTAC中でヒットする場合、その命令が分岐命令であることをプロセッサは知り(これはI−キャッシュからフェッチされた命令がデコードされるより前である)、予測されたBTAが提供され、それは分岐命令の以前の実行の実際のBTAである。分岐が成立するとして分岐予測回路が分岐を予測する場合、命令フェッチは予測されたBTAから始まる。分岐が成立しないとして分岐を予測する場合、命令フェッチはシーケンシャルに継続する。用語BTACはまた、飽和カウンタをBIAと関係付けるキャッシュを示すために技術的に使用されるということに注意すべきであり、したがって条件評価予測(すなわち、分岐が成立、または分岐が不成立)だけを提供する。
高性能プロセッサは、I−キャッシュから一時に1つより多い命令をフェッチするかもしれない。例えば、例えば4つの命令を含むかもしれない全体のキャッシュラインは、命令フェッチバッファにフェッチされてもよく、命令フェッチバッファは、パイプラインにそれらの命令をシーケンシャルに送る。4つすべての命令に関する分岐予測のためにBTACを使用することは、BTAC上に4つの読み取り部分を必要とする。これは、大規模で複雑なハードウェアを必要とし、電力消費を非常に増大させるであろう。
分岐ターゲットアドレスキャッシュ(BTAC)は、各キャッシュライン中に少なくとも2つの分岐ターゲットアドレスを記憶する。BTACは、切り捨てられた命令アドレスによりインデックス付けされる。分岐ターゲットアドレスのどれが予測分岐ターゲットアドレスとしてとられるかを、分岐予測オフセットテーブルから取得されるオフセットが決定する。いくつかの方法でオフセットテーブルをインデックス付けしてもよく、それらの方法は、分岐履歴によるもの、分岐履歴のハッシュおよび分岐命令アドレスの一部によるもの、gshare値によるもの、ランダムによるもの、ラウンドロビン順序によるもの、または他の方法によるものを含んでもよい。
1つの実施形態は、分岐命令に対して分岐ターゲットアドレスを予測する方法に関係する。命令アドレスの少なくとも一部が記憶される。少なくとも2つの分岐ターゲットアドレスが、記憶された命令アドレスに関係付けられる。分岐命令をフェッチする際に、分岐ターゲットアドレスのうちの1つが、分岐命令に対する予測ターゲットアドレスとして選択される。
別の実施形態は分岐ターゲットアドレスを予測する方法に関係する。n個のシーケンシャルな命令のブロックがフェッチされ、最初の命令アドレスから始まる。n個までの分岐ターゲットアドレスが最初の命令アドレスの一部によりインデックス付けされるように、分岐が成立するとして評価される、ブロック中の各分岐命令に対する分岐ターゲットアドレスがキャッシュ中に記憶される。
別の実施形態はプロセッサに関係する。命令アドレスの一部によりインデックス付けされる分岐ターゲットアドレスキャッシュをプロセッサは含み、プロセッサはキャッシュライン当り2つ以上の分岐ターゲットアドレスを記憶するように動作する。複数のオフセットを記憶するように動作する分岐予測オフセットテーブルをプロセッサはさらに含む。命令アドレスによりキャッシュにインデックス付けし、オフセットテーブルから得られるオフセットに応答して、インデックス付けされたキャッシュラインから分岐ターゲットアドレスを選択するように動作する命令実行パイプラインをプロセッサはさらに含む。
図1は、プロセッサ10の機能のブロック図を描写する。制御ロジック14にしたがって命令実行パイプライン12中で、プロセッサ10は命令を実行する。いくつかの実施形態において、パイプライン12は、複数の並列パイプラインを有するスーパースケーラ設計であってもよい。パイプステージ中に構成されるさまざまなレジスタまたはラッチ16、および1つ以上の算術ロジックユニット(ALU)18をパイプライン12は含む。汎用目的レジスタ(GPR)ファイル20は、メモリ階層構造のトップを構成するレジスタを提供する。
命令サイド変換ルックアサイドバッファ(ITLB)24により管理されるメモリアドレス変換および許可により、パイプライン12は、命令キャッシュ(I−キャッシュ)22から命令をフェッチする。並行して、パイプライン12は、分岐ターゲットアドレスキャッシュ(BTAC)25に対して命令アドレスを提供する。命令アドレスがBTAC25中でヒットする場合、BTAC25はI−キャッシュ22に対して分岐ターゲットアドレスを提供して、予測分岐ターゲットアドレスからの命令フェッチを直ちに開始してもよい。以下でより完全に記述するように、複数の潜在的予測分岐ターゲットアドレスのうちのどれがBTAC25により提供されるかは、分岐予測オフセットテーブル(BPOT)23からのオフセットにより決定される。BPOT23への入力は、1つ以上の実施形態において、分岐履歴と分岐命令アドレスと他の制御入力とを含むハッシュ関数21を含んでもよい。分岐履歴が分岐履歴レジスタ(BHR)26により提供されてもよく、分岐履歴レジスタ(BHR)26は、複数の分岐命令に対する分岐条件評価結果(例えば、分岐が成立、または分岐が不成立)を記憶する。
主変換ルックアサイドバッファ(TLB)28により管理されるメモリアドレス変換および許可により、データがデータキャッシュ(D−キャッシュ)26からアクセスされる。さまざまな実施形態において、ITLBはTLBの一部のコピーを含んでいてもよい。代わりに、ITLBとTLBとを統合してもよい。同様に、プロセッサ10のさまざまな実施形態において、I−キャッシュ22とD−キャッシュ26とを統合、または一体化してもよい。メモリインターフェイス30の制御の下、I−キャッシュ22および/またはD−キャッシュ26におけるミスは、メイン(オフチップ)メモリ32に対するアクセスを生じさせる。
さまざまな周辺デバイス36に対するアクセスを制御する入力/出力(I/O)インターフェイス34を、プロセッサ10は含んでいてもよい。プロセッサ10の多数のバリエーションが可能であることを当業者は認識するだろう。例えば、IおよびDキャッシュ22、26のどちらかまたは両方に対して、プロセッサ10は2次(L2)キャッシュを含んでもよい。さらに、プロセッサ10中に描写される1つ以上の機能のブロックを、特定の実施形態から省略してもよい。
条件分岐命令は、ほとんどのコードにおいて共通であり、ある評価によると5つの命令中1つ程度が分岐であるかもしれない。しかしながら、分岐命令は一様に分散されない傾向がある。むしろ、if−then−else決定パス、parallel(“case”)分岐、およびこれに類するもののような論理構造体を実現するために、それらは集中発生することが多い。例えば、次のコード断片は2つのレジスタのコンテンツを比較し、比較の結果に基づいてターゲットPまたはQに分岐する。
CMP r7、r8 GPR7とGPR8とのコンテンツを比較して、比較の結果を反映する条件コードまたはフラグをセットする
BEQ P コードラベルPに等しい場合分岐する
BNE Q コードラベルQに等しくない場合分岐する
高性能プロセッサ10はI−キャッシュ22から一時に複数の命令をフェッチすることが多く、コード内に集中発生する分岐命令の傾向のため、所定の命令フェッチが分岐命令を含む場合、それはまた付加的な分岐命令を含む確率が高い。1つ以上の実施形態にしたがうと、分岐ターゲットアドレスキャッシュ(BTAC)25中に複数の分岐ターゲットアドレス(BTA)が記憶され、単一の命令アドレスに関係付けられる。BTAC25中でヒットする命令フェッチの際に、さまざまな方法でインデックス付けすることができる分岐予測オフセットテーブル(BPOT)23により提供されるオフセットにより、BTAのうちの1つが選択される。
BEQ P コードラベルPに等しい場合分岐する
BNE Q コードラベルQに等しくない場合分岐する
高性能プロセッサ10はI−キャッシュ22から一時に複数の命令をフェッチすることが多く、コード内に集中発生する分岐命令の傾向のため、所定の命令フェッチが分岐命令を含む場合、それはまた付加的な分岐命令を含む確率が高い。1つ以上の実施形態にしたがうと、分岐ターゲットアドレスキャッシュ(BTAC)25中に複数の分岐ターゲットアドレス(BTA)が記憶され、単一の命令アドレスに関係付けられる。BTAC25中でヒットする命令フェッチの際に、さまざまな方法でインデックス付けすることができる分岐予測オフセットテーブル(BPOT)23により提供されるオフセットにより、BTAのうちの1つが選択される。
図2は、さまざまな実施形態にしたがった、BTAC25およびBPOT23の機能のブロック図を描写する。BTAC25中の各のエントリは、インデックスまたは命令アドレス領域40を含む。各エントリはまた、2つ以上のBTA領域(図2はBTA0−BTA3と示された4つを描写する)を包含するキャッシュライン42を含む。I−キャッシュ22からフェッチされている命令アドレスがBTAC25中でヒットするとき、キャッシュライン42の複数のBTA領域のうちの1つが、マルチプレクサ44として図2中で機能的に描写されているオフセットにより選択される。さまざまな実施において、選択機能はBTAC25に対して内部、またはマルチプレクサ44により描写するように外部にあってもよいことに注意すべきである。オフセットはBPOT23により提供される。以下でより完全に記述するように、状況の特定の設定の下で最後に分岐が成立したBTAを、キャッシュライン42のうちのどのBTA領域が含むかに関するインジケータをBPOT23は記憶してもよい。
特に、図2中で描写したBTAC25の状態は、以下の例示的なコード(ここで、A−Cは切り捨てられた命令アドレスであり、T−Zは分岐ターゲットアドレスである)のさまざまな繰り返しから生じてもよい。
BEQ Z
ADD r1、r3、r4
A:
BNE Y
ADD r6、r3、r7
BEQ X
BNE W
B:
BGE V
B U
CMP r12、r4
BNE T
C:
ADD r3、r8、r9
AND r2、r3、r6
命令アドレスから1つ以上のLSBを切り捨てることにより、コードは論理的にn個の命令ブロック(描写した例においては、n=4)に分割される。ブロック中のいずれかの分岐命令が、分岐が成立するとして評価される場合、BTAC25のエントリが書き込まれ、切り捨てられた命令アドレスがインデックス領域40中に記憶され、 “分岐が成立する”分岐命令のBTAがキャッシュライン42の対応するBTA領域中に記憶される。例えば、図2を参照すると、さまざまな時間において、切り捨てられたアドレスAを有する4つの命令のブロックが実行された。それぞれの分岐は少なくとも1度分岐が成立するとして評価され、実際のそれぞれのBTAはキャッシュライン42に対して書き込まれ、命令アドレスのLSBを使用してBTAn領域(例えば、BTA0およびBTA2)が選択される。領域BTA1とBTA3とに対応する命令は分岐命令ではないので、キャッシュライン42のそれらの領域に記憶されるデータはない(例えば、これらの領域に関係付けられる“有効”ビットは0でもよい)。それぞれのBTAがBTAC25に対して書き込まれる時に(例えば、分岐が成立するとして評価された、対応する分岐命令のライトバックパイプステージにおいて)、BPOT23が更新されて、キャッシュライン42の関連するBTA領域を示すオフセットが記憶される。この例においては、BEQ Z分岐が実行されたとき0の値が記憶され、BNE Y分岐が実行されたとき2の値が記憶された。以下でより完全に記述するように、その時のプロセッサの状態により決定されるBPOT23内の位置に、これらのオフセット値が記憶されてもよい。
ADD r1、r3、r4
A:
BNE Y
ADD r6、r3、r7
BEQ X
BNE W
B:
BGE V
B U
CMP r12、r4
BNE T
C:
ADD r3、r8、r9
AND r2、r3、r6
命令アドレスから1つ以上のLSBを切り捨てることにより、コードは論理的にn個の命令ブロック(描写した例においては、n=4)に分割される。ブロック中のいずれかの分岐命令が、分岐が成立するとして評価される場合、BTAC25のエントリが書き込まれ、切り捨てられた命令アドレスがインデックス領域40中に記憶され、 “分岐が成立する”分岐命令のBTAがキャッシュライン42の対応するBTA領域中に記憶される。例えば、図2を参照すると、さまざまな時間において、切り捨てられたアドレスAを有する4つの命令のブロックが実行された。それぞれの分岐は少なくとも1度分岐が成立するとして評価され、実際のそれぞれのBTAはキャッシュライン42に対して書き込まれ、命令アドレスのLSBを使用してBTAn領域(例えば、BTA0およびBTA2)が選択される。領域BTA1とBTA3とに対応する命令は分岐命令ではないので、キャッシュライン42のそれらの領域に記憶されるデータはない(例えば、これらの領域に関係付けられる“有効”ビットは0でもよい)。それぞれのBTAがBTAC25に対して書き込まれる時に(例えば、分岐が成立するとして評価された、対応する分岐命令のライトバックパイプステージにおいて)、BPOT23が更新されて、キャッシュライン42の関連するBTA領域を示すオフセットが記憶される。この例においては、BEQ Z分岐が実行されたとき0の値が記憶され、BNE Y分岐が実行されたとき2の値が記憶された。以下でより完全に記述するように、その時のプロセッサの状態により決定されるBPOT23内の位置に、これらのオフセット値が記憶されてもよい。
同様に、切り捨てられた命令アドレスBを共有する4つの命令のブロック−このケースにおいてそれぞれの命令は分岐命令である−も多数回実行された。それぞれの分岐は少なくとも1度分岐が成立するとして評価され、切り捨てられたアドレスBによりインデックス付けされた、キャッシュライン42の対応するBTA領域に対して、最近の実際のBTAが書き込まれた。キャッシュライン42の4つのBTA領域のすべてが有効であり、それぞれがBTAを記憶する。BPOT23中のエントリはそれに応じて、関連するBTAC25のBTA領域を示すように更新された。別の例として、図2はBTAC25中に記憶された、切り捨てられたアドレスCとBTAであるTとを描写し、これは例示的なコードのブロックC中のBNE T命令に対応する。n個の命令のこのブロックは、分岐命令から始まらないことに注意すべきである。
これらの例が実証するように、1からnまでのBTAをBTAC25中に記憶させてもよく、それらは単一の切り捨てられた命令アドレスによりインデックス付けされる。次の命令フェッチにおいて、BTAC25中でヒットすると、予測BTAとしてn個までのBTAのうちの1つが選択されなければならない。さまざまな実施形態にしたがうと、所定のキャッシュライン42に対するn個までのBTAのうちの1つを選択するオフセットのテーブルをBPOT23は維持する。BTAがBTAC25に対して書き込まれるのと同時に、オフセットがBPOT23に対して書き込まれる。オフセットが書き込まれるBPOT23内の位置は、オフセットが書き込まれる時のプロセッサの現在のおよび/または最近の過去の、条件または状態に依存してもよく、ロジック回路21およびその入力により決定される。ロジック回路21およびその入力は、いくつかの形態をとってもよい。
1つの実施形態において、プロセッサは分岐履歴レジスタ(BHR)26を維持する。BHR26は、簡単な形態において、シフトレジスタを構成していてもよい。条件分岐命令がパイプライン12中で評価されるときに、条件分岐命令の条件評価をBHRは記憶する。すなわち、分岐命令が、分岐が成立した(T)であるか、または分岐が成立しなかった(N)であるかをBHR26は記憶する。BHR26のビット幅は、維持される分岐評価履歴の時間的な長さを決める。
1つの実施形態にしたがうと、BPOT23はBHR26の少なくとも一部により直接インデックス付けされてオフセットが選択される。すなわち、この実施形態において、BHR26だけがロジック回路21に対する入力であり、ロジック回路21は単に“通過”回路である。例えば、ブロックA中の分岐命令BEQが実際に分岐が成立するとして評価され、Zの実際のBTAが発生した時に、BHR26はNNN(すなわち、以前の3つの条件分岐がすべて“分岐不成立”と評価された)の(少なくともLSBビット位置における)値を含んでいた。このケースにおいて、切り捨てられた命令アドレスAによりインデックス付けされたキャッシュライン42の領域BTA0に対応する0は、BPOT23中の対応する位置(図2中で描写した例において最上の位置)に書き込まれた。同様に、分岐命令BNEが実行されたとき、BHR26は値NNTを含んでいて、(切り捨てられた命令アドレスAによりインデックス付けされたキャッシュライン42のBTA2領域に書き込まれたBTAのYに対応する)BPOT23の第2の位置に対して2が書き込まれた。
Aブロック中のBEQ命令が次にフェッチされるとき、それはBTAC中でヒットするだろう。その時のBHR26の状態がNNNである場合、オフセット0がBPOT23により提供され、キャッシュライン42のBTA0領域のコンテンツは−BTAのZであり−予測BTAとして提供される。代わりに、フェッチの時にBHR26がNNTである場合、BPOT23は2のオフセットを提供し、BTA2のコンテンツすなわちYが予測BTAになるだろう。後者のケースはエイリアシングの例であり、エイリアシングでは、最近の分岐履歴が、異なる分岐命令に対するBTAが書き込まれたときに実在するものと偶然一致するとき、誤ったBTAが1つの分岐命令に対して予測される。
別の実施形態において、ロジック回路21はハッシュ関数を含んでもよく、ハッシュ関数はBHR26の出力の少なくとも一部を命令アドレスの少なくとも一部と結合させて、エイリアシングを防ぎ、または減少させる。これは、BPOT23のサイズを増加させるだろう。1つの実施形態において、命令アドレスビットをBHR26の出力と連結して、分岐条件評価予測に関連するとして技術的に知られているgselect予測器に類似したBPOT23インデックスを発生させてもよい。別の実施形態において、命令アドレスビットをBHR26の出力と排他的論理和演算してもよく、これは、結果としてgshareタイプのBPOT23インデックスとなる。
1つ以上の実施形態において、ロジック回路21に対する1つ以上の入力は、分岐履歴または命令アドレスに対して無関係であってもよい。例えば、BPOT23に対してインクリメント的にインデックス付けして、ラウンドロビンインデックスを発生させてもよい。代わりに、インデックスはランダムであってもよい。例えば、パイプライン制御ロジック14により発生される1つ以上のこれらのタイプの入力は、上述したインデックスを発生させる1つ以上の技術と組み合わされてもよい。
ここで記述した1つ以上の実施形態にしたがって、BTAC25キャッシュライン42中のBTAn領域の数をI−キャッシュ22キャッシュライン中の命令の数と一致させることにより、BTAC25に対するアクセスが、I−キャッシュからの命令フェッチと歩調が合うようにしてもよい。予測BTAとして、n個までの起こり得るBTAのうちの1つを選択するために、最近の分岐履歴のようなプロセッサの条件と、BTAがBTAC25中に書き込まれた時に実在するものとを比較してもよい。BTAの選択用のオフセットを発生させるためにBPOT23にインデックス付けするさまざまな実施形態は、ツールの豊富なセットを提供し、ツールの豊富なセットは特定のアーキテクチャまたはアプリケーションに対して最適化してもよい。
本発明は、特定の機能、観点および実施形態に関してここで記述したが、多数のバリエーション、修正、および他の実施形態が本発明の広い範囲内で可能であり、したがって、あらゆるバリエーション、修正および実施形態が本発明の範囲内のものであると考えるべきことが明らかであろう。それゆえに本実施形態は、すべての観点において実例的なものであって限定的なものでないとして解釈すべきであり、添付した特許請求の範囲の意味および均等の範囲内に入るすべての変更は、その中に包含すべきであることが意図されている。
Claims (19)
- 分岐命令に対する分岐ターゲットアドレスを予測する方法において、
命令アドレスの少なくとも一部を記憶することと、
少なくとも2つの分岐ターゲットアドレスを、前記記憶された命令アドレスと関係付けることと、
分岐命令をフェッチする際に、前記分岐命令に対する予測ターゲットアドレスとして前記分岐ターゲットアドレスのうちの1つを選択することとを含む方法。 - 命令アドレスの少なくとも一部を記憶することは、キャッシュ中のインデックスとして前記命令アドレスの少なくとも一部を書き込むことを含む請求項1記載の方法。
- 少なくとも2つの分岐ターゲットアドレスを命令アドレスと関係付けることは、前記少なくとも2つの分岐命令のそれぞれを実行する際に、前記インデックスによりインデックス付けされたキャッシュライン中のデータとして、前記各分岐命令の前記分岐ターゲットアドレスを書き込むことを含む請求項2記載の方法。
- 分岐予測オフセットテーブルにアクセスしてオフセットを取得することをさらに含み、
前記予測ターゲットアドレスとして分岐ターゲットアドレスのうちの1つを選択することは、前記オフセットに対応する前記分岐ターゲットアドレスを選択することを含む請求項1記載の方法。 - 分岐予測オフセットテーブルにアクセスすることは、分岐履歴により前記分岐予測オフセットテーブルにインデックス付けすることを含む請求項4記載の方法。
- 分岐予測オフセットテーブルにアクセスすることは、分岐履歴と前記命令アドレスとのハッシュ関数により前記分岐予測オフセットテーブルにインデックス付けすることを含む請求項4記載の方法。
- 分岐予測オフセットテーブルにアクセスすることは、前記分岐予測オフセットテーブルにランダムにインデックス付けすることを含む請求項4記載の方法。
- 分岐予測オフセットテーブルにアクセスすることは、前記分岐予測オフセットテーブルにインクリメント的にインデックス付けして、ラウンドロビン選択を発生させることを含む請求項4記載の方法。
- 分岐命令評価が分岐成立のとき前記分岐予測オフセットテーブルに対するオフセットを書き込むことをさらに含み、
前記オフセットは、前記少なくとも2つの分岐ターゲットアドレスのどれが前記分岐成立した分岐命令と関係付けられているかを示す請求項4記載の方法。 - 命令アドレスの少なくとも一部を記憶することは、少なくとも1つのビットだけ前記命令アドレスを切り捨て、それにより前記切り捨てられた命令アドレスがn個の命令のブロックを参照することを含む請求項1記載の方法。
- 分岐ターゲットアドレスを予測する方法において、
切り捨てられた命令アドレスにより参照されたn個のシーケンシャルな命令のブロックをフェッチすることと、
評価が分岐成立である前記ブロック中の各分岐命令に対する分岐ターゲットアドレスをキャッシュ中に記憶させ、それによりn個までの分岐ターゲットアドレスが、前記切り捨てられた命令アドレスによりインデックス付けされることとを含む方法。 - 前記ブロック中の分岐命令のうちの1つをその後フェッチする際に、前記キャッシュから分岐ターゲットアドレスを選択することをさらに含む請求項11記載の方法。
- 前記キャッシュから分岐ターゲットアドレスを選択することは、
オフセットテーブルからオフセットを取得することと、
前記切り捨てられた命令アドレスにより前記キャッシュにインデックス付けすることと、
前記オフセットにしたがって、前記n個までの分岐ターゲットアドレスのうちの1つを選択することとを含む請求項12記載の方法。 - オフセットテーブルからオフセットを取得することは、分岐履歴により前記オフセットテーブルにインデックス付けすることを含む請求項13記載の方法。
- プロセッサにおいて、
切り捨てられた命令アドレスによりインデックス付けされ、キャッシュライン当り2つ以上の分岐ターゲットアドレスを記憶するように動作する分岐ターゲットアドレスキャッシュと、
複数のオフセットを記憶するように動作する分岐予測オフセットテーブルと、
切り捨てられた命令アドレスにより前記キャッシュにインデックス付けし、前記オフセットテーブルから取得されたオフセットに応答して前記インデックス付けされたキャッシュラインから分岐ターゲットアドレスを選択するように動作する命令実行パイプラインとを具備するプロセッサ。 - n個の命令の命令フェッチ帯域幅を有する命令キャッシュをさらに具備し、前記切り捨てられた命令アドレスは、n個の命令のブロックをアドレス指定する請求項15記載のプロセッサ。
- 前記分岐ターゲットアドレスは、キャッシュライン当りn個までの分岐ターゲットアドレスを記憶するように動作する請求項16記載のプロセッサ。
- 複数の条件分岐命令の条件評価の表示を記憶するように動作する分岐履歴レジスタをさらに具備し、前記分岐履歴レジスタのコンテンツが前記分岐予測オフセットテーブルにインデックス付けして、前記インデックス付けされたキャッシュラインから分岐ターゲットアドレスを選択するためのオフセットを取得する請求項15記載のプロセッサ。
- 前記分岐履歴レジスタのコンテンツは、前記分岐予測オフセットテーブルにインデックス付けする前に前記切り捨てられた命令アドレスと結合される請求項18記載のプロセッサ。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/089,072 US20060218385A1 (en) | 2005-03-23 | 2005-03-23 | Branch target address cache storing two or more branch target addresses per index |
PCT/US2006/010952 WO2006102635A2 (en) | 2005-03-23 | 2006-03-23 | Branch target address cache storing two or more branch target addresses per index |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008535063A true JP2008535063A (ja) | 2008-08-28 |
Family
ID=36973923
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008503255A Pending JP2008535063A (ja) | 2005-03-23 | 2006-03-23 | インデックス当り2つ以上の分岐ターゲットアドレスを記憶する分岐ターゲットアドレスキャッシュ |
Country Status (8)
Country | Link |
---|---|
US (1) | US20060218385A1 (ja) |
EP (1) | EP1866748A2 (ja) |
JP (1) | JP2008535063A (ja) |
KR (1) | KR20070118135A (ja) |
CN (1) | CN101176060A (ja) |
BR (1) | BRPI0614013A2 (ja) |
IL (1) | IL186052A0 (ja) |
WO (1) | WO2006102635A2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019526873A (ja) * | 2016-08-30 | 2019-09-19 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated | 分岐ターゲットバッファの圧縮 |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6886093B2 (en) * | 2001-05-04 | 2005-04-26 | Ip-First, Llc | Speculative hybrid branch direction predictor |
US7707397B2 (en) * | 2001-05-04 | 2010-04-27 | Via Technologies, Inc. | Variable group associativity branch target address cache delivering multiple target addresses per cache line |
US7237098B2 (en) * | 2003-09-08 | 2007-06-26 | Ip-First, Llc | Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence |
US7437543B2 (en) * | 2005-04-19 | 2008-10-14 | International Business Machines Corporation | Reducing the fetch time of target instructions of a predicted taken branch instruction |
US20070266228A1 (en) * | 2006-05-10 | 2007-11-15 | Smith Rodney W | Block-based branch target address cache |
JP5145809B2 (ja) * | 2007-07-31 | 2013-02-20 | 日本電気株式会社 | 分岐予測装置、ハイブリッド分岐予測装置、プロセッサ、分岐予測方法、及び分岐予測制御プログラム |
US8131982B2 (en) * | 2008-06-13 | 2012-03-06 | International Business Machines Corporation | Branch prediction instructions having mask values involving unloading and loading branch history data |
US8078849B2 (en) * | 2008-12-23 | 2011-12-13 | Juniper Networks, Inc. | Fast execution of branch instruction with multiple conditional expressions using programmable branch offset table |
US10338923B2 (en) * | 2009-05-05 | 2019-07-02 | International Business Machines Corporation | Branch prediction path wrong guess instruction |
US8539204B2 (en) * | 2009-09-25 | 2013-09-17 | Nvidia Corporation | Cooperative thread array reduction and scan operations |
US20110093658A1 (en) * | 2009-10-19 | 2011-04-21 | Zuraski Jr Gerald D | Classifying and segregating branch targets |
CN102109975B (zh) * | 2009-12-24 | 2015-03-11 | 华为技术有限公司 | 确定函数调用关系的方法、装置及系统 |
US8521999B2 (en) * | 2010-03-11 | 2013-08-27 | International Business Machines Corporation | Executing touchBHT instruction to pre-fetch information to prediction mechanism for branch with taken history |
CN103984525B (zh) * | 2013-02-08 | 2017-10-20 | 上海芯豪微电子有限公司 | 指令处理系统及方法 |
US9823932B2 (en) * | 2015-04-20 | 2017-11-21 | Arm Limited | Branch prediction |
US20170083333A1 (en) * | 2015-09-21 | 2017-03-23 | Qualcomm Incorporated | Branch target instruction cache (btic) to store a conditional branch instruction |
KR102420588B1 (ko) * | 2015-12-04 | 2022-07-13 | 삼성전자주식회사 | 비휘발성 메모리 장치, 메모리 시스템, 비휘발성 메모리 장치의 동작 방법 및 메모리 시스템의 동작 방법 |
US10353710B2 (en) * | 2016-04-28 | 2019-07-16 | International Business Machines Corporation | Techniques for predicting a target address of an indirect branch instruction |
US20170371669A1 (en) * | 2016-06-24 | 2017-12-28 | Qualcomm Incorporated | Branch target predictor |
CN106406823B (zh) * | 2016-10-10 | 2019-07-05 | 上海兆芯集成电路有限公司 | 分支预测器和用于操作分支预测器的方法 |
US10747539B1 (en) | 2016-11-14 | 2020-08-18 | Apple Inc. | Scan-on-fill next fetch target prediction |
US20210373896A1 (en) * | 2020-06-01 | 2021-12-02 | Advanced Micro Devices, Inc. | Merged branch target buffer entries |
TWI768547B (zh) * | 2020-11-18 | 2022-06-21 | 瑞昱半導體股份有限公司 | 管線式電腦系統與指令處理方法 |
US11650821B1 (en) | 2021-05-19 | 2023-05-16 | Xilinx, Inc. | Branch stall elimination in pipelined microprocessors |
US20230214222A1 (en) * | 2021-12-30 | 2023-07-06 | Arm Limited | Methods and apparatus for storing instruction information |
CN114780146B (zh) * | 2022-06-17 | 2022-08-26 | 深流微智能科技(深圳)有限公司 | 资源地址查询方法、装置、系统 |
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 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07262006A (ja) * | 1994-02-04 | 1995-10-13 | Motorola Inc | 分岐ターゲットアドレスキャッシュを備えたデータプロセッサ |
US5530825A (en) * | 1994-04-15 | 1996-06-25 | Motorola, Inc. | Data processor with branch target address cache and method of operation |
US20020194462A1 (en) * | 2001-05-04 | 2002-12-19 | Ip First Llc | Apparatus and method for selecting one of multiple target addresses stored in a speculative branch target address cache per instruction cache line |
JP2003005956A (ja) * | 2001-06-20 | 2003-01-10 | Fujitsu Ltd | 分岐予測装置、プロセッサ、及び分岐予測方法 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3494736B2 (ja) * | 1995-02-27 | 2004-02-09 | 株式会社ルネサステクノロジ | 分岐先バッファを用いた分岐予測システム |
JPH10133874A (ja) * | 1996-11-01 | 1998-05-22 | Mitsubishi Electric Corp | スーパスカラプロセッサ用分岐予測機構 |
KR100872293B1 (ko) * | 2000-07-21 | 2008-12-05 | 엔엑스피 비 브이 | 데이터 프로세서 및 이에 의한 인스트럭션 실행 방법 |
US8285976B2 (en) * | 2000-12-28 | 2012-10-09 | Micron Technology, Inc. | Method and apparatus for predicting branches using a meta predictor |
US7124287B2 (en) * | 2003-05-12 | 2006-10-17 | International Business Machines Corporation | Dynamically adaptive associativity of a branch target buffer (BTB) |
US20040250054A1 (en) * | 2003-06-09 | 2004-12-09 | Stark Jared W. | Line prediction using return prediction information |
US20050228977A1 (en) * | 2004-04-09 | 2005-10-13 | Sun Microsystems,Inc. | Branch prediction mechanism using multiple hash functions |
JP2006048132A (ja) * | 2004-07-30 | 2006-02-16 | Fujitsu Ltd | 分岐予測装置、分岐予測装置の制御方法、情報処理装置 |
-
2005
- 2005-03-23 US US11/089,072 patent/US20060218385A1/en not_active Abandoned
-
2006
- 2006-03-23 JP JP2008503255A patent/JP2008535063A/ja active Pending
- 2006-03-23 CN CNA200680016497XA patent/CN101176060A/zh active Pending
- 2006-03-23 EP EP06739633A patent/EP1866748A2/en not_active Withdrawn
- 2006-03-23 WO PCT/US2006/010952 patent/WO2006102635A2/en active Application Filing
- 2006-03-23 BR BRPI0614013-0A patent/BRPI0614013A2/pt not_active IP Right Cessation
- 2006-03-23 KR KR1020077024395A patent/KR20070118135A/ko not_active Application Discontinuation
-
2007
- 2007-09-18 IL IL186052A patent/IL186052A0/en unknown
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH07262006A (ja) * | 1994-02-04 | 1995-10-13 | Motorola Inc | 分岐ターゲットアドレスキャッシュを備えたデータプロセッサ |
US5530825A (en) * | 1994-04-15 | 1996-06-25 | Motorola, Inc. | Data processor with branch target address cache and method of operation |
US20020194462A1 (en) * | 2001-05-04 | 2002-12-19 | Ip First Llc | Apparatus and method for selecting one of multiple target addresses stored in a speculative branch target address cache per instruction cache line |
JP2003005956A (ja) * | 2001-06-20 | 2003-01-10 | Fujitsu Ltd | 分岐予測装置、プロセッサ、及び分岐予測方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019526873A (ja) * | 2016-08-30 | 2019-09-19 | アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドAdvanced Micro Devices Incorporated | 分岐ターゲットバッファの圧縮 |
Also Published As
Publication number | Publication date |
---|---|
CN101176060A (zh) | 2008-05-07 |
WO2006102635A3 (en) | 2007-02-15 |
WO2006102635A2 (en) | 2006-09-28 |
IL186052A0 (en) | 2008-02-09 |
US20060218385A1 (en) | 2006-09-28 |
EP1866748A2 (en) | 2007-12-19 |
BRPI0614013A2 (pt) | 2011-03-01 |
KR20070118135A (ko) | 2007-12-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2008535063A (ja) | インデックス当り2つ以上の分岐ターゲットアドレスを記憶する分岐ターゲットアドレスキャッシュ | |
KR101059335B1 (ko) | 가변 길이 명령 세트 실행 모드들을 가지는 프로세서 내의 bht의 효율적 사용방법 | |
EP1851620B1 (en) | Suppressing update of a branch history register by loop-ending branches | |
KR100973951B1 (ko) | 오정렬 메모리 액세스 예측 | |
JP5255701B2 (ja) | 疎及び密予測を伴うハイブリッド分岐予測デバイス | |
JP5231403B2 (ja) | スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ | |
US9367471B2 (en) | Fetch width predictor | |
US20070266228A1 (en) | Block-based branch target address cache | |
US8959320B2 (en) | Preventing update training of first predictor with mismatching second predictor for branch instructions with alternating pattern hysteresis | |
KR101048258B1 (ko) | 가변 길이 명령 세트의 브랜치 명령의 최종 입도와 캐싱된 브랜치 정보의 관련 | |
US6766442B1 (en) | Processor and method that predict condition register-dependent conditional branch instructions utilizing a potentially stale condition register value | |
US6678820B1 (en) | Processor and method for separately predicting conditional branches dependent on lock acquisition |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20101026 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20110322 |