JP2011100466A - ループ終結分岐により分岐履歴レジスタの更新を抑制すること - Google Patents

ループ終結分岐により分岐履歴レジスタの更新を抑制すること Download PDF

Info

Publication number
JP2011100466A
JP2011100466A JP2010266368A JP2010266368A JP2011100466A JP 2011100466 A JP2011100466 A JP 2011100466A JP 2010266368 A JP2010266368 A JP 2010266368A JP 2010266368 A JP2010266368 A JP 2010266368A JP 2011100466 A JP2011100466 A JP 2011100466A
Authority
JP
Japan
Prior art keywords
branch
branch instruction
loop
instruction
bhr
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.)
Withdrawn
Application number
JP2010266368A
Other languages
English (en)
Other versions
JP2011100466A5 (ja
Inventor
Bohuslav Rychlik
ボヒュースラブ・リシリク
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.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2011100466A publication Critical patent/JP2011100466A/ja
Publication of JP2011100466A5 publication Critical patent/JP2011100466A5/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/325Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for loops, e.g. loop detection or loop counter
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)
  • Radar Systems Or Details Thereof (AREA)
  • Molds, Cores, And Manufacturing Methods Thereof (AREA)
  • Transition And Organic Metals Composition Catalysts For Addition Polymerization (AREA)
  • Debugging And Monitoring (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

【課題】コードループを終了させる条件付分岐命令が検出され、ループ終了分岐評価を記憶するために分岐履歴レジスタ(BHR)が更新される事を防ぐ。
【解決手段】ループの繰り返しを実施する分岐がBHR30からの他の分岐評価履歴を置き換えることを防止する。ループ終了分岐は、特定のタイプの分岐命令を用いてコンパイラーによってまたはループ終結分岐命令の操作コード内のインジケータービットを挿入することにより、静的に検出されてもよい。ループ終了分岐命令は、任意のバックワード(backward)分岐として、またはBHRを更新する際に最後の分岐命令またはいくつかの分岐命令のPCを記憶することにより、および最後の分岐PC(LBPC)レジスタ38(複数の場合もある)に対して分岐命令のPCをチェックすることにより動的に検出されてもよい。分岐PCが一致するならBHRの更新は抑制される。
【選択図】図2

Description

この発明は一般にプロセッサーの分野に関し、特にループ終結分岐命令により分岐履歴レジスタの更新を抑制することにより分岐予測を改良する方法に関する。
マイクロプロセッサーは、多種多様の計算タスクを実行する。改良されたプロセッサー性能は、ソフトウエアが変わることを通じてより高速な動作および/または増大された機能性を可能にするためにほとんどの場合望ましい。ポータブル電子装置のような多くの埋め込まれたアプリケーションにおいて、電力を節約することは、プロセッサーの設計および実施における目標でもある。
多くの最新のプロセッサーはパイプラインアーキテクチャを採用する。この場合、各々が複数の実行ステップを有するシーケンシャル命令は実行においてオーバーラップする。改良された性能のために、命令はパイプラインを介して連続的に流れなければならない。命令をパイプライン内で行き詰らせる任意の状況は、有害に性能に影響を及ぼす可能性がある。命令がパイプラインから消去されその次に再フェッチされるなら、性能と電力消費の両方が劣っている。
ほとんどのプログラムは条件付き分岐命令を含む。分岐命令の実際の分岐動作は、命令がパイプラインにおいて深く評価されるまで知られていない。分岐命令の実際の評価を待つことから生じるであろう行き詰まりを回避するために、最新のプロセッサーはあるフォームの分岐予測を採用してもよい。それにより条件付分岐命令の分岐動作はパイプラインにおいて早期に予測される。予測された分岐評価に基いて、プロセッサーは推論的にフェッチ(プリフェッチ)し、予測されたアドレス、すなわち、(分岐が起きると予測されるなら)分岐先アドレスまたは(分岐が起きないと予測されるなら)分岐命令の後の次のシーケンシャルアドレスからの命令を実行する。実際の分岐動作が決定されると、分岐が予測ミスされるなら、推論的にフェッチされた命令はパイプラインから消去されなければならず、新しい命令が正しい次のアドレスからフェッチされる。誤りのある分岐予測に応答して命令をプリフェッチすることは、プロセッサー性能と電力消費に悪影響を与える。従って分岐予測の性能を改良することは重要な設計目標である。
既知の分岐予測技術は静的予測と動的予測の両方を含む。いくつかの分岐命令の起こり得る動作は、プログラマーおよび/またはコンパイラーにより静的に予測される。分岐予測の1つの例はエラーチェッキングルーチンである。一般にコードは適切に実行し、エラーはまれである。従って、「ブランチオンエラー(branch on error)]機能を実施する分岐命令はほとんどの場合「分岐が起きない」を評価するであろう。そのような命令は、分岐条件の最も起こりそうな結果の知識を用いてプログラマーまたはコンパイラーにより設定された、操作コード内の静的分岐予測ビットを含んでいてもよい。
動的予測は一般に、予測される分岐命令および/または同じコードの他の分岐命令の分岐評価履歴(場合によっては、分岐予測精度履歴)に基いている。実際のコードの詳しい分析は、最近の過去の分岐評価パターンが、将来の分岐命令の評価の良好なインジケーターであるかもしれないことを示す。
図1に描画された動的分岐予測の1つの既知の形式は、分岐履歴レジスタ(BHR)100を利用して過去のnの分岐評価を記憶することである。簡単な実施において、BHR100はシフトレジスタを含む。レジスタ内の最も古い過去の評価が置き換えられて最も最近の分岐評価結果がシフトされる(例えば、1は分岐することを示し、0は分岐しないことを示す)。プロセッサーは各分岐命令に対してローカルなBHR100を維持してもよい。
あるいは(またはさらに)、BHR100は、時々グローバルBHRまたはGHRとして技術的に知られるすべての条件付分岐命令の最近の過去の評価を含んでいてもよい。ここに使用されるように、BHRはローカル分岐履歴レジスタとグローバル分岐履歴レジスタの両方を指す。
図1に描画されるように、BHR100は、分岐予測テーブル(BPT)102をインデックスしてもよい。BPTはこの場合も先と同様にローカルまたはグローバルであってもよい。BHR100はBPT102を直接インデックスしてもよいし、またはBPTインデックスロジック104内の分岐命令のプログラムカウンター(PC)のような他の情報と結合されてもよい。BPTインデックスロジック104への他の入力もさらに利用されてもよい。BPTインデックスロジック104は、入力を連結接続(一般にはgselectとして技術的に知られている)、入力のXOR(gshare)をとってもよいし、ハッシュ関数を実行してもよいし、またはさまざまな方法で入力を結合しまたは変換してもよい。
一例として、BPT102は、複数の飽和カウンターを備えていてもよい。それらのMSBsは、2つのモードを持つ分岐予測器として機能する。例えば、各テーブルエントリは、各々が重み付けされた予測値を割り当てられた4つの状態の1つを担う2ビットカウンターを備えていてもよい。
4つの状態は例えば、
11−分岐が起きるであろうことが強く予測される
10−分岐が起きるであろうことが弱く予測される
01−分岐が起きないであろうことが弱く予測される
00−分岐が起きないであろうことが強く予測される
カウンターは対応する分岐命令が「起きる」ことを評価する毎にインクリメントし、分岐命令が「起きない」ことを評価する毎にデクリメントする。カウンターのMSBは2つのモードを持つ分岐予測器である。それは、潜在する予測の強度または重みに関係なく、分岐が起きるかまたは起きないかを予測するであろう。飽和カウンターはめったに起こらない分岐評価の予測エラーを低減する。一方向を一貫して評価する分岐はカウンターを飽和するであろう。他の方向へのめったに起こらない評価は、カウンター値(および予測の強度)を変更するであろうが、2つのモードを持つ予測値を変更しないであろう。従って、めったに起こらない評価は、2度ではなく一度予測ミスするのみであろう。飽和カウンターのテーブルは説明に役立つ実例に過ぎない。一般に、BHRは、さまざまな分岐予測機構を含むテーブルをインデックスしてもよい。
BPT102において採用された分岐予測機構にも関わらず、BHR100は単独でまたは分岐命令PCのような他の情報と組み合わせてBPT102をインデックスし分岐予測を得る。以前の分岐評価をBHR100に記憶し、分岐予測内の評価を使用することにより、予測される分岐命令が過去の分岐動作、すなわちローカルBHR100の場合に固有の過去の動作およびグローバルBHR100の場合には、他の分岐命令の動作に相互に関連付けられる。この相互関係は、少なくとも非常に繰り返しの多いコードの場合には、正確な分岐予測に対する解決の鍵となるかもしれない。
図1は、BHR100に記憶される分岐評価、すなわち実行パイプステージにおけるように、パイプラインの深くでしか知られていないかもしれない条件付き分岐命令の実際の評価を描画していることに留意する必要がある。これが究極の結果ではあるものの、実際には、多くの高性能プロセッサーは、BPT102からの予測された分岐評価をBHR100に記憶し、予測が誤りであるということが分かったなら、予測ミス回復動作の一部として後でBHR100を訂正する。簡単にするために作図は、このインプリメンテーション特徴を反映していない。
BHR100を採用する分岐予測器の有効性を低減するかもしれない一般的なコード構造はループである。ループは、ループを介して毎回インクリメントされるインデックス変数がループ終了値に到達したかどうかというようなループ終了条件をテストする条件付文型命令で終わる。そうでなければ、別の反復のために、および別のループ終了条件付分岐評価のためにループの始めに実行が分岐する。nビットBHR100に関して、ループに関する3つの興味あるケースがある。ループは実行しない。ループはmの反復を介して実行する。ただしm<n。およびループはm回実行する。但しm>=n。
ループが実行しないなら、ループの開始におけるフォワード分岐はループ本体を介して分岐し、1つの分岐が起きた分岐評価を生じる。BHR100内の過去の分岐評価履歴は、唯一つの分岐評価により置き換えられるので、これはBHR100に対して最小効果を有する((実際には、この分岐評価を有する相互関係により予測精度は改善されるかもしれない)。ループがmの反復、但しm>=nを介して実行するなら、ループ終了分岐命令の「分岐が起こるであろう」逆方向の分岐はBHR100を飽和する。すなわち、ループの終わりにおいて、nビットBHRは、ループ反復から生じ、ループが終了するとき単一の分岐が起こらないであろう評価で終わる数多くの分岐が起こるであろう評価に相当する、単一のゼロにより後続される正確にn−1の「1」を常に含むであろう。これは、(ローカルまたはグローバルBHR100のための)以前の分岐評価を有する全ての相互関係が失われるので、BHR100の有効性を効率的に破壊する。この場合、以前の分岐評価に対する分岐命令の相互関係を反映する分岐予測を含むエントリにマップするよりもむしろ、(BPTインデックスロジック104への他の入力に依存して)所定の分岐命令のための同じBPT102入力にマップする可能性があるであろう。
さらに、飽和されたBHR100はBPT102内のエイリアシング(aliasing)を増加させてもよい。すなわち、多くの反復を有するループに続く全ての分岐命令は、BHR100がBPT102に直接インデックスするなら、同じBPT102エントリにマップするであろう。BHR100が他の情報と結合される場合でも、エイリアシングのチャンスは増加される。これは、ループに続く分岐命令に対してのみならずBPT102内のエントリを指すすべての分岐命令に対して予測精度に悪影響を及ぼす。
ループがmの反復、但しm<nを介して実行するなら、BHR100は飽和されず、ある以前の分岐評価履歴が保持される。しかしながら、以前の分岐評価履歴を表すビットは、mビット位置により置き換えられる。特にmが変化する場合、これは分岐予測に対して2つの悪影響を有する。第1に、分岐命令は、以前の分岐評価を有する同じ相互関係を獲得するためにBPT102内のより大きな数のエントリにマップするであろう。そしてBHR30に影響を及ぼすループ終了分岐なしに必要とするであろうよりも、同じ数の分岐命令に対して同じ精度をサポートするためにより大きなBPT102を必要とする。第2に、BPT102内の分岐予測は、「トレーニング」するために長くかかるであろう。そして、BPT102が正確な分岐予測の供給を開始する前に実行しなければならないコードの量を増加する。
一例として、8ビットBHR100と、分岐命令A−Hを有し、その後にループが続き、次に分岐命令Xが続くコードセグメントを考察する。分岐は、Xは分岐GおよびHの評価履歴と強く相互に関連がある。介在ループの種々の反復は、Xを予測時に、以下の表1に提示されるBHR結果を発生するであろう。
Figure 2011100466
この例において、いずれの場合にも、予測される分岐命令Xと分岐GおよびHの以前の評価との間の所望の相互関係はBHR100内に存在する。しかしながら、それはBHR100内の異なる場所にあり、従って各ケースは異なるBPT102エントリにマップするであろう。これはBPT102スペースを浪費し、分岐予測トレーニングタイムを増加させ、BPT102内のエイリアシングのチャンスを増加させる。これらのすべては予測精度を低減する。
1つ以上の実施形態において、ループを終了させる分岐命令の評価を記憶するという悪影響は、ループ終了分岐命令を識別し、ループ終了命令に応答してBHRの更新を抑圧することにより改善される。ループ終了命令はさまざまな方法で識別される。
一実施形態において、分岐予測方法は、分岐命令の特性が抑制を必要とする場合に分岐命令を実行するとBHRの更新を抑制することを含む。
他の実施形態において、プロセッサーは、条件付分岐命令の評価を予測するように機能的に作用する分岐予測器と、分岐予測器からの予測に基いて命令を推論的にフェッチし実行するように機能的に作用する実行パイプラインとを含む。また、プロセッサーは、条件付分岐命令の評価を記憶するように機能的に作用するBHRと、分岐命令の特性に応答して条件付分岐命令の評価を記憶することを抑制するように機能的に作用する制御回路とを含む。
さらに他の実施形態において、プログラムコードに応答して命令を発生するように機能的に作用するコンパイラーまたはアセンブラーは、コードループを終了する条件付分岐命令を示すために機能的に作用するループを終了させる分岐命令のマーキング機能を含む。
図1は、従来技術の分岐予測回路の機能ブロック図である。 図2は、プロセッサーの機能ブロック図である。 図3は分岐命令を実行する方法のフロー図である。 図4は、1つ以上の最後の分岐PCレジスタを含む分岐予測回路の機能ブロック図である。
図2はプロセッサー10の機能ブロック図を描画する。プロセッサー10は制御ロジック14に従って、命令実行パイプライン12内の命令を実行する。いくつかの実施形態において、パイプライン12は、複数の並列パイプラインを有したスーパースケーラーデザインであってもよい。パイプライン12はパイプステージに組織された種々のレジスタまたはラッチ16、および1つ以上の算術論理演算ユニット(ALU)18を含む。汎用レジスタ(GPR)ファイル20は、メモリヒエラルキーの最上層を含むレジスタを提供する。
パイプライン12は、メモリアドレス変換および命令サイド変換索引バッファー(ITLB)24により管理される許可を用いて命令キャッシュ(Iキャッシュ)22から命令をフェッチする。条件付き分岐命令がパイプライン12において早期にデコードされるとき、分岐予測器26は、分岐動作を予測し、予測を命令プリフェッチユニット28に供給する。命令プリフェッチユニット28は、「分岐が起きるであろう」分岐予測に対してパイプライン12内で計算された分岐目標アドレスまたは「分岐が起きない」と予測された分岐に対して次のシーケンシャルアドレスにおいて、命令キャッシュ22から命令を推論的にフェッチする。いずれの場合においても、プリフェッチされた命令は推論的実行のためにパイプライン12にロードされる。
分岐予測器26は、分岐履歴レジスタ(BHR)30、分岐予測器テーブル(BPT)32、BPTインデックスロジック34、およびBHR更新ロジック36を含む。分岐予測器26はさらに以下により完全に記載される1つ以上の最後の分岐PCレジスタ38を含む。
データは、メモリアドレス変換およびメイン変換索引バッファー(TLB)42を用いてデータキャッシュ(Dキャッシュ)40からアクセスされる。種々の実施形態において、ITLB24は、TLB42の一部のコピーを備えていてもよい。あるいは、ITLB24とTLB42は統合されてもよい。同様に、プロセッサー10の種々の実施形態において、Iキャッシュ22およびDキャッシュ40は統合されてもよいしまたは一体化されてもよい。Iキャッシュ22および/またはDキャッシュ40におけるミスは、メモリインターフェース46の制御のもとにメイン(オフチップ)メモリ44へのアクセスを生じる。
プロセッサー10は、種々の周辺装置50へのアクセスを制御する入力/出力(I/O)インターフェース46を含んでいてもよい。当業者は、プロセッサー10の多くの変形例が可能であることを認識するであろう。例えば、プロセッサー10は、Iキャッシュ22とDキャッシュ40のいずれかまたは両方のための第2レベル(L2)のキャッシュを含んでいてもよい。さらにプロセッサー10内に描画された1つ以上の機能ブロックは、特定の実施形態から省略されてもよい。
1つ以上の実施形態によれば、分岐予測精度は、ループを終了させる分岐が分岐予測器26内の1つ以上のBHRs30を改悪するのを防止することにより改善される。このプロセスは図3のフロー図として描画される。条件付き分岐命令はデコードされる(ブロック52)。分岐がループを終了させる分岐か否かの決定が行われる(ブロック54)。そうでなければ、BHR30は、分岐評価、すなわち、分岐命令が「分岐が起こる」または「分岐が起こらない」として評価されるかどうかを記録するために更新される(ブロック56)。次に、実行は、それぞれ、分岐先アドレスまたは次のシーケンシャルアドレスにおいて継続する(ブロック58)。分岐がループを終了させる分岐でないなら、ループを終了させる分岐命令の分岐評価を記録するためにBHR30を更新することは、(ブロック54からブロック58への経路により示されるように)抑制される。このように、ループを反復させる分岐は、関連する分岐評価履歴を置き換えることによりBHR30の内容を改悪しない。分岐命令をループを終了させる分岐命令として識別する問い合わせ(ブロック54)は、種々の方法により成就されてもよい。
ループは、ループの終わりからループの始めに後方分岐することにより反復する。一実施形態によれば、分岐命令アドレスより小さい分岐先アドレスまたはPCを有したすべての条件付分岐命令、すなわち、バックワード分岐はループ終了分岐命令と見なされ、BHR30を更新するのを防止される。この実施形態は簡単という利点を提供する。BHR30更新時点において、分岐命令が実際にパイプライン内において評価されるとき、分岐命令PCは分岐先アドレス(BTA)と比較される。BTA<PCなら、BHR30は更新されない。分岐目標アドレスが決定されるときそしてまた、ループを終了させる分岐ではないいくつかのバックワード分岐がBHR30に記録された評価を持たないであろうとき、この実施形態は、アドレス比較を必要とする不利益を被る。
ループを終了させる分岐を検出する他の方法は同じ分岐命令の反復された実行を認識することである。図4に描画された一実施形態において、最後の分岐PC(LBPC)レジスタ38はその評価がBHR30に記憶された最後の分岐命令のPCを記憶する。簡単なループの場合に、分岐命令のPCがLBPC38に一致するなら、すなわち、分岐命令が評価された最後の分岐命令であったなら、分岐命令はループを終了させる分岐命令であると見なされ、BHR30のさらなる更新が抑制される。図1に対して上述したように、図4は、任意の与えられた実施において、BHR更新ロジック36内の実際の分岐評価と比較されるLBPC38の内容を描画するけれども、LBPC38は、予測ミスの場合にはBHR30が訂正されて、予測された分岐評価と比較されてもよい。この実施形態は、ループの第1の反復のみを記憶し、BHR30からの唯一の以前の分岐評価のみを置き換える。この実施形態はコンパイラーサポートを必要とせず、分岐の方向はBHR30更新時に決定する必要がない。
ループは1つ以上のネスティングされたループを含んでいてもよいし、またはループ内の他の分岐を含んでいてもよい。この場合、内部ループによるBHR30の飽和は、LBPCアプローチにより抑制されてもよい。しかしながら、外部ループを終了させる分岐は依然としてBHR30に記憶されるであろう。一実施形態において、対応するLBPCレジスタ(LBPC0、LBPC1,...LBPCM)38に記憶された連続的に評価された分岐命令のPCsを有した2以上のLBPCレジスタ38が提供されてもよい。分岐命令のPCがLBPCNレジスタ38のいずれかと一致するなら、BHR30の更新は抑圧されてもよい。
また、ループを終了させる分岐命令は、コンパイラーまたはアセンブラーにより静的にマークされてもよい。一実施形態において、コンパイラーは、ループを終了させる分岐にのみ使用される特定のタイプの分岐命令、例えば「BRLP」を発生する。BRLP命令は認識され、BRPE命令が実行パイプステージ内で評価するとき決して更新されない。他の実施形態において、コンパイラーまたはアセンブラーは、1つ以上のあらかじめ定義されたビットをオペレーションコード内に設定することによるように、ループを終了させる分岐表示を分岐命令内に埋め込んでもよい。ループ終了分岐ビットが検出され、BHR30の更新は、その分岐命令が実行パイプステージにおいて評価するとき抑圧される。ループ終了分岐の静的識別は、ループ終了識別機能をコンパイラーまたはアセンブラーに移動することによりハードウエアを低減し、計算的な複雑さを低減する。
条件付分岐命令は、例えば、分岐命令アドレスまたはPC、命令タイプ、およびオペレーションコード内のインジケータービットの存在または非存在を含む、多くの特性を有する。ここで使用されるように、分岐動作の特性および/または分岐に関連するプログラムの特性は分岐命令の特性と考えられる。例えば、分岐命令PCが1つ以上のLBPCレジスタ38の内容と一致するかどうか、および分岐目標アドレスが分岐命令PCに関してフォワードかバックワードかは分岐命令の特性である。
この発明は特定の特徴、観点および実施形態に対して記載されたけれども、この発明の広い範囲内において多数の変形例、変更および他の実施形態が可能であることは明白であろう。従って、すべての変形例、変更および実施の形態は、この発明の範囲内であるとみなされるべきである。それゆえ、この実施形態は、あらゆる面で実例として解釈されるべきであり、制限されるものではないと解釈されるべきであり、添付されたクレームの意味と等価な範囲内に入る全ての変更はクレーム内に包含されることを意図している。

Claims (22)

  1. 分岐命令の特性に応答して分岐命令の実行時に分岐履歴レジスタ(BHR)の更新を任意に抑圧することを備えた分岐予測方法。
  2. 前記分岐命令の特性は前記分岐がバックワードであるということである、請求項1の方法。
  3. 前記分岐命令の特性は前記分岐がループ終了分岐であるということである、請求項1の方法。
  4. 前記分岐命令のPCは、前記BHRを更新するために最後の分岐命令のPCを記憶する最後の分岐PC(LBPC)レジスタの内容と一致する、請求項3の方法。
  5. 前記分岐命令のPCは、前記BHRを更新するために前記最後の複数の分岐命令のPCsを記憶する複数のLBPCレジスタのいずれかの内容と一致する、請求項4の方法。
  6. 前記分岐命令の特性は、前記分岐命令が分岐を終了するためにコンパイラーにより発生された固有の分岐命令である、請求項3の方法。
  7. 前記分岐命令の特性は、前記分岐命令が、ループ終了分岐命令であることを示す1つ以上のビットを含むことである、請求項3の方法。
  8. 条件付分岐命令の評価を予測するように機能的に作用する分岐予測器と、
    前記分岐予測器からの予測に基いて命令を推論的にフェッチして実行するように機能的に作用する命令実行パイプラインと、
    前記条件付き分岐命令の評価を記憶するように機能的に作用する分岐履歴レジスタ(BHR)と、
    前記分岐命令の特性に応答して前記条件付分岐命令の評価を記憶することを抑圧するように機能的に作用する制御回路と、
    を備えたプロセッサー。
  9. 前記BHRを更新する分岐命令のPCを記憶するように機能的に作用する最後の分岐PC(LBPC)をさらに備え、前記制御回路は、前記分岐命令のPCが前記LBPCレジスタの内容と一致するなら前記条件付分岐命令の評価を記憶することを抑圧するように機能的に作用する、請求項8のプロセッサー。
  10. 前記BHRを更新する複数の分岐命令のPCsを記憶するように機能的に作用する複数のLBPCレジスタをさらに備え、前記制御回路は、前記分岐命令のPCが任意のLBPCレジスタの内容と一致するなら、前記条件付分岐命令の評価を記憶することを抑圧するように機能的に作用する、請求項9の方法。
  11. 前記分岐命令が、ループ終了命令であるという表示を含むなら、前記制御回路は、前記条件付き分岐命令の評価を記憶することを抑圧するように機能的に作用する、請求項8の方法。
  12. 前記分岐命令がループ終了命令であるという表示は命令タイプである、請求項11の方法。
  13. 前記分岐命令目標アドレスが前記分岐命令PCより小さいなら前記制御回路は、前記条件付分岐命令の評価を記憶することを抑圧するように機能的に作用する、請求項8の方法。
  14. プログラムコードに応答して命令を発生するように機能的に作用するコンパイラーまたはアセンブラーと、
    コードループを終了させる条件付分岐命令を示すように機能的に作用するループ終了分岐命令マーキング機能と、
    を備えたコンパイラーまたはアセンブラー。
  15. 前記ループ終了分岐命令マーキング機能は、各ループを終了させるために固有のタイプの分岐命令を発生するように機能的に作用する、請求項14のコンパイラーまたはアセンブラー。
  16. 前記ループ終了分岐命令マーキング機能は、ループを終了させる各条件付分岐命令にループ終了インジケーターを挿入するように機能的に作用する、請求項14のコンパイラーまたはアセンブラー。
  17. 前記ループ終了インジケーターは、前記条件付分岐命令操作コード内の所定のフィールドに挿入された1またはそれ以上のビットを備えた、請求項16のコンパイラーまたはアセンブラー。
  18. 以前の条件付分岐命令の評価を記憶する分岐履歴レジスタ(BHR)を用いた分岐予測の方法において、
    ループ終了分岐を検出することと、
    関連する分岐命令の評価を記憶するであろうBHRの更新を抑圧することと、
    を備えた方法。
  19. ループ終了分岐を検出することは、前記関連する分岐命令のPCと、前記BHRを更新するために最後の分岐命令のPCを記憶する最後の分岐PC(LBPC)レジスタの内容との間に一致を検出することを備えた、請求項18の方法。
  20. ループ終了分岐を検出することは、関連する分岐命令のPCと、BHRを更新するために最後の複数の分岐命令のPCsを記憶する複数のLBPCレジスタのいずれかの内容との間に一致を検出することを備えた、請求項18の方法。
  21. ループ終了分岐を検出することは、分岐を終了させるためにコンパイラーにより発生された固有の分岐命令をデコードすることを備えた、請求項18の方法。
  22. ループ終了分岐を検出することは、ループ終了分岐命令であることを示す関連分岐命令操作コード内に1つまたはそれ以上のビットを検出することを備えた、請求項18の方法。
JP2010266368A 2005-02-24 2010-11-30 ループ終結分岐により分岐履歴レジスタの更新を抑制すること Withdrawn JP2011100466A (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US11/066,508 US20060190710A1 (en) 2005-02-24 2005-02-24 Suppressing update of a branch history register by loop-ending branches

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2007557182A Division JP5198879B2 (ja) 2005-02-24 2006-02-24 ループ末尾に置かれた分岐により分岐履歴レジスタの更新を抑制すること

Related Child Applications (1)

Application Number Title Priority Date Filing Date
JP2014162801A Division JP2015007995A (ja) 2005-02-24 2014-08-08 ループ終結分岐により分岐履歴レジスタの更新を抑制すること

Publications (2)

Publication Number Publication Date
JP2011100466A true JP2011100466A (ja) 2011-05-19
JP2011100466A5 JP2011100466A5 (ja) 2013-07-04

Family

ID=36577533

Family Applications (3)

Application Number Title Priority Date Filing Date
JP2007557182A Expired - Fee Related JP5198879B2 (ja) 2005-02-24 2006-02-24 ループ末尾に置かれた分岐により分岐履歴レジスタの更新を抑制すること
JP2010266368A Withdrawn JP2011100466A (ja) 2005-02-24 2010-11-30 ループ終結分岐により分岐履歴レジスタの更新を抑制すること
JP2014162801A Pending JP2015007995A (ja) 2005-02-24 2014-08-08 ループ終結分岐により分岐履歴レジスタの更新を抑制すること

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2007557182A Expired - Fee Related JP5198879B2 (ja) 2005-02-24 2006-02-24 ループ末尾に置かれた分岐により分岐履歴レジスタの更新を抑制すること

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2014162801A Pending JP2015007995A (ja) 2005-02-24 2014-08-08 ループ終結分岐により分岐履歴レジスタの更新を抑制すること

Country Status (11)

Country Link
US (1) US20060190710A1 (ja)
EP (2) EP2270651A1 (ja)
JP (3) JP5198879B2 (ja)
KR (1) KR100930199B1 (ja)
CN (2) CN101160561B (ja)
AT (1) ATE483198T1 (ja)
DE (1) DE602006017174D1 (ja)
ES (1) ES2351163T3 (ja)
IL (1) IL185362A0 (ja)
MX (1) MX2007010386A (ja)
WO (1) WO2006091778A2 (ja)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8607209B2 (en) * 2004-02-04 2013-12-10 Bluerisc Inc. Energy-focused compiler-assisted branch prediction
JP4393317B2 (ja) * 2004-09-06 2010-01-06 富士通マイクロエレクトロニクス株式会社 メモリ制御回路
US20060190710A1 (en) * 2005-02-24 2006-08-24 Bohuslav Rychlik Suppressing update of a branch history register by loop-ending branches
US8904155B2 (en) * 2006-03-17 2014-12-02 Qualcomm Incorporated Representing loop branches in a branch history register with multiple bits
US7962724B1 (en) * 2007-09-28 2011-06-14 Oracle America, Inc. Branch loop performance enhancement
US7956552B2 (en) * 2008-03-18 2011-06-07 International Business Machiness Corporation Apparatus, system, and method for device group identification
US20090327674A1 (en) * 2008-06-27 2009-12-31 Qualcomm Incorporated Loop Control System and Method
JP5423156B2 (ja) * 2009-06-01 2014-02-19 富士通株式会社 情報処理装置及び分岐予測方法
US20110047357A1 (en) * 2009-08-19 2011-02-24 Qualcomm Incorporated Methods and Apparatus to Predict Non-Execution of Conditional Non-branching Instructions
CN101807145B (zh) * 2010-04-16 2012-12-26 浙江大学 栈式分支预测器的硬件实现方法
US9690583B2 (en) 2011-10-03 2017-06-27 International Business Machines Corporation Exploiting an architected list-use operand indication in a computer system operand resource pool
US8756591B2 (en) 2011-10-03 2014-06-17 International Business Machines Corporation Generating compiled code that indicates register liveness
US9286072B2 (en) 2011-10-03 2016-03-15 International Business Machines Corporation Using register last use infomation to perform decode-time computer instruction optimization
US8612959B2 (en) 2011-10-03 2013-12-17 International Business Machines Corporation Linking code for an enhanced application binary interface (ABI) with decode time instruction optimization
US9697002B2 (en) 2011-10-03 2017-07-04 International Business Machines Corporation Computer instructions for activating and deactivating operands
US10078515B2 (en) 2011-10-03 2018-09-18 International Business Machines Corporation Tracking operand liveness information in a computer system and performing function based on the liveness information
US8615745B2 (en) 2011-10-03 2013-12-24 International Business Machines Corporation Compiling code for an enhanced application binary interface (ABI) with decode time instruction optimization
US9329869B2 (en) 2011-10-03 2016-05-03 International Business Machines Corporation Prefix computer instruction for compatibily extending instruction functionality
US9354874B2 (en) 2011-10-03 2016-05-31 International Business Machines Corporation Scalable decode-time instruction sequence optimization of dependent instructions
US8959320B2 (en) 2011-12-07 2015-02-17 Apple Inc. Preventing update training of first predictor with mismatching second predictor for branch instructions with alternating pattern hysteresis
US9304776B2 (en) 2012-01-31 2016-04-05 Oracle International Corporation System and method for mitigating the impact of branch misprediction when exiting spin loops
US9268569B2 (en) 2012-02-24 2016-02-23 Apple Inc. Branch misprediction behavior suppression on zero predicate branch mispredict
US9858077B2 (en) * 2012-06-05 2018-01-02 Qualcomm Incorporated Issuing instructions to execution pipelines based on register-associated preferences, and related instruction processing circuits, processor systems, methods, and computer-readable media
US20140156978A1 (en) * 2012-11-30 2014-06-05 Muawya M. Al-Otoom Detecting and Filtering Biased Branches in Global Branch History
US10503538B2 (en) * 2014-06-02 2019-12-10 International Business Machines Corporation Delaying branch prediction updates specified by a suspend branch prediction instruction until after a transaction is completed
US10261826B2 (en) 2014-06-02 2019-04-16 International Business Machines Corporation Suppressing branch prediction updates upon repeated execution of an aborted transaction until forward progress is made
US10235172B2 (en) 2014-06-02 2019-03-19 International Business Machines Corporation Branch predictor performing distinct non-transaction branch prediction functions and transaction branch prediction functions
US10289414B2 (en) 2014-06-02 2019-05-14 International Business Machines Corporation Suppressing branch prediction on a repeated execution of an aborted transaction
US10635446B2 (en) * 2015-09-24 2020-04-28 Qualcomm Incorporated Reconfiguring execution pipelines of out-of-order (OOO) computer processors based on phase training and prediction
US9639370B1 (en) * 2015-12-15 2017-05-02 International Business Machines Corporation Software instructed dynamic branch history pattern adjustment
GB2548603B (en) * 2016-03-23 2018-09-26 Advanced Risc Mach Ltd Program loop control
US20180349144A1 (en) * 2017-06-06 2018-12-06 Intel Corporation Method and apparatus for branch prediction utilizing primary and secondary branch predictors
US10613867B1 (en) 2017-07-19 2020-04-07 Apple Inc. Suppressing pipeline redirection indications
CN111177663B (zh) * 2019-12-20 2023-03-14 青岛海尔科技有限公司 编译器的代码混淆改进方法及装置、存储介质、电子装置
US11941403B2 (en) * 2020-06-19 2024-03-26 Arm Limited Selective prediction based on correlation between a given instruction and a subset of a set of monitored instructions ordinarily used to generate predictions for that given instruction
US11113067B1 (en) * 2020-11-17 2021-09-07 Centaur Technology, Inc. Speculative branch pattern update
CN112988234A (zh) * 2021-02-06 2021-06-18 江南大学 一种面向不稳定控制流循环体的分支指令辅助预测器
US11868779B2 (en) * 2021-09-09 2024-01-09 International Business Machines Corporation Updating metadata prediction tables using a reprediction pipeline
US11928474B2 (en) * 2022-06-03 2024-03-12 Microsoft Technology Licensing, Llc Selectively updating branch predictors for loops executed from loop buffers in a processor

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS635442A (ja) * 1986-06-26 1988-01-11 Matsushita Electric Ind Co Ltd プログラムル−プ検出記憶装置
JPS6418841A (en) * 1987-07-14 1989-01-23 Nec Corp Information processor for prefetching instruction
JPH06332699A (ja) * 1993-05-03 1994-12-02 Internatl Business Mach Corp <Ibm> プログラム処理方法及びコンピュータ・システム
JPH10133873A (ja) * 1996-04-29 1998-05-22 Internatl Business Mach Corp <Ibm> 複数の分岐予測方式のうちの選択された1つを使用して条件分岐命令を投機的に実行するためのプロセッサおよび方法
JPH10154098A (ja) * 1996-11-14 1998-06-09 Motorola Inc キャッシュを有するデータ処理システムおよびそのための方法
US6427206B1 (en) * 1999-05-03 2002-07-30 Intel Corporation Optimized branch predictions for strongly predicted compiler branches
JP2003256197A (ja) * 2002-02-20 2003-09-10 Arm Ltd データ処理装置における命令の予測
JP2004038323A (ja) * 2002-06-28 2004-02-05 Fujitsu Ltd 分岐予測装置および分岐予測方法
JP2004078599A (ja) * 2002-08-19 2004-03-11 Handotai Rikougaku Kenkyu Center:Kk 命令スケジューリングのシミュレーション方法とシミュレーションシステム
JP2004326330A (ja) * 2003-04-23 2004-11-18 Kyushu Inst Of Technology キャッシュメモリ、及びキャッシュメモリの電力削減方法

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2555664B2 (ja) * 1987-01-22 1996-11-20 日本電気株式会社 分岐ヒストリテーブル書込制御方式
US5175827A (en) * 1987-01-22 1992-12-29 Nec Corporation Branch history table write control system to prevent looping branch instructions from writing more than once into a branch history table
JPH06243036A (ja) * 1993-02-12 1994-09-02 Hitachi Ltd キャッシュ制御システム
US5404473A (en) * 1994-03-01 1995-04-04 Intel Corporation Apparatus and method for handling string operations in a pipelined processor
JP3494484B2 (ja) * 1994-10-12 2004-02-09 株式会社ルネサステクノロジ 命令処理装置
US6253373B1 (en) * 1997-10-07 2001-06-26 Hewlett-Packard Company Tracking loop entry and exit points in a compiler
JP2001166948A (ja) * 1999-12-07 2001-06-22 Nec Corp プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US7290089B2 (en) * 2002-10-15 2007-10-30 Stmicroelectronics, Inc. Executing cache instructions in an increased latency mode
US20050102659A1 (en) * 2003-11-06 2005-05-12 Singh Ravi P. Methods and apparatus for setting up hardware loops in a deeply pipelined processor
US20060190710A1 (en) * 2005-02-24 2006-08-24 Bohuslav Rychlik Suppressing update of a branch history register by loop-ending branches

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS635442A (ja) * 1986-06-26 1988-01-11 Matsushita Electric Ind Co Ltd プログラムル−プ検出記憶装置
JPS6418841A (en) * 1987-07-14 1989-01-23 Nec Corp Information processor for prefetching instruction
JPH06332699A (ja) * 1993-05-03 1994-12-02 Internatl Business Mach Corp <Ibm> プログラム処理方法及びコンピュータ・システム
JPH10133873A (ja) * 1996-04-29 1998-05-22 Internatl Business Mach Corp <Ibm> 複数の分岐予測方式のうちの選択された1つを使用して条件分岐命令を投機的に実行するためのプロセッサおよび方法
JPH10154098A (ja) * 1996-11-14 1998-06-09 Motorola Inc キャッシュを有するデータ処理システムおよびそのための方法
US6427206B1 (en) * 1999-05-03 2002-07-30 Intel Corporation Optimized branch predictions for strongly predicted compiler branches
JP2003256197A (ja) * 2002-02-20 2003-09-10 Arm Ltd データ処理装置における命令の予測
JP2004038323A (ja) * 2002-06-28 2004-02-05 Fujitsu Ltd 分岐予測装置および分岐予測方法
JP2004078599A (ja) * 2002-08-19 2004-03-11 Handotai Rikougaku Kenkyu Center:Kk 命令スケジューリングのシミュレーション方法とシミュレーションシステム
JP2004326330A (ja) * 2003-04-23 2004-11-18 Kyushu Inst Of Technology キャッシュメモリ、及びキャッシュメモリの電力削減方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
CSNG200401704013; 中田 尚 他: '「高性能マイクロプロセッサの高速シミュレーション」' 先進的計算基盤システムシンポジウム SACSIS2003 論文集 第2003巻, 200305, 89頁〜96頁, 社団法人情報処理学会 *
JPN6011045860; Po-Yung Chang et al.: '"Improving branch prediction accuracy by reducing pattern history table interference"' Proceedings of the 1996 Conference on Parallel Architectures and Compilation Techniques,1996. , 199610, pages:48-57, IEEE *
JPN6013043574; 中田 尚 他: '「高性能マイクロプロセッサの高速シミュレーション」' 先進的計算基盤システムシンポジウム SACSIS2003 論文集 第2003巻, 200305, 89頁〜96頁, 社団法人情報処理学会 *
JPN6014014934; Alex RAMIREZ et al.: '"Branch Prediction Using Profile Data"' Euro-Par 2001 Parallel Processing, 2001 , 2001, pp.386-394, Universitat Politecnica de Catalunya *

Also Published As

Publication number Publication date
US20060190710A1 (en) 2006-08-24
DE602006017174D1 (de) 2010-11-11
ES2351163T3 (es) 2011-02-01
CN103488463B (zh) 2016-11-09
ATE483198T1 (de) 2010-10-15
IL185362A0 (en) 2008-02-09
EP2270651A1 (en) 2011-01-05
JP2015007995A (ja) 2015-01-15
EP1851620B1 (en) 2010-09-29
CN103488463A (zh) 2014-01-01
CN101160561A (zh) 2008-04-09
CN101160561B (zh) 2013-10-16
MX2007010386A (es) 2007-10-18
WO2006091778A2 (en) 2006-08-31
WO2006091778A3 (en) 2007-07-05
EP1851620A2 (en) 2007-11-07
JP5198879B2 (ja) 2013-05-15
KR100930199B1 (ko) 2009-12-07
KR20070105365A (ko) 2007-10-30
JP2008532142A (ja) 2008-08-14

Similar Documents

Publication Publication Date Title
JP5198879B2 (ja) ループ末尾に置かれた分岐により分岐履歴レジスタの更新を抑制すること
JP2008532142A5 (ja)
JP2011100466A5 (ja)
EP2479662B1 (en) Representing loop branches in a branch history register with multiple bits
JP5335946B2 (ja) 電力的に効率的な命令プリフェッチ機構
KR101074621B1 (ko) 프로액티브 브랜치 타겟 어드레스 캐시 관리를 위한 방법들 및 장치
KR101376900B1 (ko) 이력에 의한 다음 인출 예측기 트레이닝
US20110320787A1 (en) Indirect Branch Hint
JP2009530754A5 (ja)
JP2004533695A (ja) 分岐目標を予測する方法、プロセッサ、及びコンパイラ
KR20070118135A (ko) 인덱스당 2개 이상의 분기 타겟 어드레스를 저장하는 분기타겟 어드레스 캐시
US7827392B2 (en) Sliding-window, block-based branch target address cache
KR20090061644A (ko) 명시적 서브루틴 호출의 브랜치 예측 동작을 에뮬레이트하기 위한 방법 및 장치
JP2009536770A (ja) ブロックに基づく分岐先アドレスキャッシュ
KR101048258B1 (ko) 가변 길이 명령 세트의 브랜치 명령의 최종 입도와 캐싱된 브랜치 정보의 관련

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130129

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20130425

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20130501

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130516

A524 Written submission of copy of amendment under article 19 pct

Free format text: JAPANESE INTERMEDIATE CODE: A524

Effective date: 20130516

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130903

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20140408

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140808

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20140814