JP2004533695A - 分岐目標を予測する方法、プロセッサ、及びコンパイラ - Google Patents
分岐目標を予測する方法、プロセッサ、及びコンパイラ Download PDFInfo
- Publication number
- JP2004533695A JP2004533695A JP2003509305A JP2003509305A JP2004533695A JP 2004533695 A JP2004533695 A JP 2004533695A JP 2003509305 A JP2003509305 A JP 2003509305A JP 2003509305 A JP2003509305 A JP 2003509305A JP 2004533695 A JP2004533695 A JP 2004533695A
- Authority
- JP
- Japan
- Prior art keywords
- branch
- branch target
- predicting
- key information
- processor
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 39
- 239000000872 buffer Substances 0.000 claims description 14
- 230000006870 function Effects 0.000 description 25
- 230000006837 decompression Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 229920006395 saturated elastomer Polymers 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30054—Unconditional branch instructions
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30061—Multi-way branch instructions, e.g. CASE
-
- 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/32—Address formation of the next instruction, e.g. by incrementing the instruction counter
- G06F9/322—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative 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)
Abstract
Description
【0001】
本発明は、動的分岐予測における分岐目標を予測するための方法、プロセッサ、及びコンパイラに関する。
【背景技術】
【0002】
高性能スーパスカラ・プロッセサの発行速度及びパイプライン深度が増加するにつれ、発行される推論的作業の量もまた増加する。推論的作業は、分岐ミス予測の場合に捨てなければならないので、深くパイプライン化されたプロセッサは、性能の潜在能力を効果的に活用するために、正確な分岐予測器を採用しなければならない。
【0003】
プログラムの分岐は、条件付の又は無条件の、及び直接の又は間接の、というように、分類され得る。無条件分岐が常に命令ストリームを目標に向け直すのに対して、条件付の分岐は、条件付で、命令ストリームを目標に向け直す。間接分岐が、プログラムの如何なる数の位置も示す、動的に特定された目標を有するのに対し、直接分岐は、プログラムの中の、たった一つの位置を示す、静的に特定された目標を有する。間接分岐は、現代の実行形プログラミング言語から生じる4つのタイプに分類され得る。これら4つのタイプは、関数リターン、スイッチから生じるテーブル・ジャンプ、仮想関数呼出、及び関数ポインタを介しての関数呼出である。
動的分岐予測は、一般に、分岐が存在する場合に、命令の安定したストリームを命令パイプラインに供給するために使用される。安定した命令の流れを達成するために、プロセッサのフェッチ・フェーズは分岐を検出し、分岐の方向(分岐成立又は分岐不成立)を予測し、分岐目標を提供しなければならない。分岐目標バッファ(BTB)は、一般に、分岐目標を提供するために使用される。分岐が解明されるとき、すなわち分岐の方向及び分岐目標が分かるときはいつでも、その分岐目標は、本質的に命令アドレスによって索引付けられた分岐目標のキャッシュであるBTBに入れられる。BTBは、命令キャッシュをアクセスするために使用されるものと同一のアドレスによって、パイプラインのフェッチ・フェーズでアクセスされる。もし、BTBがヒットすると、命令キャッシュからフェッチされた命令は分岐であるはずであり、BTBによって返された分岐目標は、該分岐の目標であると予想される。この予測は、目標アドレスが静的である直接分岐、すなわち、即値オペランドにより特定される目標をともなう分岐、にとっては、正しくなるだろう。
【発明の開示】
【発明が解決しようとする課題】
【0004】
しかしながら、BTBによって成される目標予測は、間接分岐、すなわち分岐目標アドレスが動的でありレジスタによって特定された目標を有する分岐、にとっては、しばしば適切でない。間接分岐は、直接分岐よりも使用頻度は低いが、間接分岐は予測が非常に困難であるので重要である。シミュレーションの結果は、間接分岐のより良い予測が、大幅に精度を向上させることを示す。
【0005】
間接分岐のための目標予測器は、ポ・ヤン・チャン等によって、「間接ジャンプのための目標予測」、第24回コンピュータ・アーキテクチャ国際シンポジューム会報、デンバー、1997年6月、及び、カレル・ドライセン等によって、「正確な間接分岐予測」、第25回コンピュータ・アーキテクチャ国際シンポジューム年報、バルセロナ、スペイン、1998年6月、の中で提案されている。これらの予測器は、BTBが分岐のアドレスに基づいてのみ目標を提供するのに対し、分岐のアドレス及び分岐へと導く実行経路に基づいて目標を提供する。これらの予測器の背景の考え方は、間接分岐へと導く経路と該間接分岐の目標との間に存在する相関関係を使用するということである。この技術の結果は、間接分岐毎に多くの目標が記憶されるということである。
【0006】
更に、動的分岐予測が統合されたコンパイラ(CD-DBP)プロシージャは米国特許明細書第5857104号で知られており、コンパイラは、動的に計算された値を分岐予測器に伝達し、これが分岐予測器に予測を向上させることを許す。しかしながら、知られているCS-DBPプロシージャは、単に、分岐の方向又は分岐方向と相関する値が予測される、蓋然論のアプローチを提供する。
【0007】
ゆえに、間接分岐の予測精度が向上され得る分岐予測のための方法、プロセッサ及びコンパイラを提供することが、本発明の目的である。
【課題を解決するための手段】
【0008】
本発明の目的は、請求項1で規定されるような予測方法、請求項11で規定されるようなプロセッサ、及び請求項14で規定されるようなコンパイラ、によって達成される。
【0009】
本発明によれば、やがて現れる間接分岐について、前記分岐予測を暗示するオペレーションが提供され、間接分岐の分岐目標のテーブルも、コンパイラの決定も、間接分岐の予測精度を向上させるために使用され得る。特に、暗示は、やがて現れる間接分岐について、ハードウェアに与えられ、そこで、前記分岐の前記目標に関連するキー情報が導き出される。
【0010】
この技術の適用は、ある方向への前記分岐の最初の実行を除いて、間接分岐の前記目標予測精度を大幅に向上させる。よって、十分大きな分岐目標バッファ又はテーブルが備えられた、正しい目標へ導く目標予測のほとんど全てが提供される。
【0011】
前記コンパイラは、関数ポインタから生じる間接分岐の予測に有益である。この場合、該コンパイラによって決定された分岐目標は、ちょうど良いときに利用できる。
【0012】
前記キー情報は、前記分岐の起因となるスイッチ文のスイッチの値から導き出されても良い。更に、前記キー情報は、前記分岐の起因となる仮想関数呼出の仮想関数テーブルのアドレスから導き出されても良い。分岐の殆ど全ては関数リターン及びスイッチ文から生じているという事実のために、効率の良い、かつ正確な分岐予測が適用され得る。もし、前記プロセッサ(例えばVLIWプロセッサ)のロード・レイテンシがフロントエンド・パイプライン・ステージの数と等しくなるように選択されると、前記暗示オペレーションは該ロード処理と平行してスケジュールされる。望ましくは、前記暗示オペレーションは、前記プログラムの前記予め定められた位置で提供されることが良く、該予め定められた位置は、前記対応する分岐命令が、前記命令実行サイクルのフェッチ・フェーズにあるときに、当該暗示オペレーションが命令実行サイクルの実行フェーズにあるように選択されている。従って、前記暗示オペレーションは、前記間接分岐がフェッチされるときに、前記プロセッサの前記実行ステージに到達するだろう。それによって、前記フェッチ・ステージにおける前記分岐予測への直接フィードバックが与えられ得る。
【0013】
前記キー情報は、前記分岐目標テーブルをアクセスするために使用される索引を得るために、前記分岐命令又は前記暗示オペレーションを組み込んでいる前記命令の前記アドレスでハッシュされても良い。前記分岐目標テーブルは、間接分岐のための分岐目標を有している間接分岐目標バッファであっても良い。前記分岐目標テーブルに記憶された前記分岐目標は、ジャンプ・テーブル及び/又は仮想関数テーブルの、一番最近使用されたエントリであれば良い。それによって、前記データキャッシュへの長いアクセスの場合に、時間的優位が達成され得る。
【0014】
前記プロセッサのアクセス手段は、該プロセッサの実行ステージ又はフェッチ・ステージのアドレスで前記キー情報をハッシングするハッシング手段を有していても良い。それによって、前記間接分岐目標バッファをアクセスするために使用される索引は、簡単かつ素早い方法で生成され得る。
【発明を実施するための最良の形態】
【0015】
以下に、本発明の好適な実施例が、添付している図面を参照しながら、非常に詳細に開示されるだろう。
【実施例1】
【0016】
好適な実施例は、ここで、図1に示されているような、VLIW(超長命令語)プロセッサのアーキテクチャを基本として、説明されるだろう。
【0017】
図1から判断され得るように、分岐決定機能50はプロセッサの実行ステージに提供され、プログラム・カウンタ生成ステージのマルチプレクサ10へ正しい分岐目標を供給するよう、構成されている。マルチプレクサ10は、ネクスト・プログラム・カウンタ機能性70により生成される次の連続したプログラム・カウンタ、及び分岐予測器100によって生成される予測された分岐目標が供給される。更に、割り込みベクタ又は他の例外ベクタは、前記マルチプレクサ10に供給され得、その際、フェッチ・ステージの命令キャッシュメモリ20へ供給されるべき選択されたプログラム・カウンタを出力する。前記プログラム・カウンタは、更に、前記分岐予測器100に供給される。前記プログラム・カウンタに基づいて、前記命令キャッシュ20は、命令語を生成するために、解凍ステージの解凍器30へ供給される圧縮された命令を出力する。前記解凍ステージは、VLIWプロセッサ内に提供されるべき必要は無い。前記命令ステージは、それから、デコード・ステージの命令デコーダ40に供給され、そこで、前記VLIW命令はデコードされ、かつ分岐決定ユニットに供給される。更に、前記実行ステージは、前記分岐予測器100内に提供される分岐目標バッファを更新するための、キュー更新ユニット60を有する。この更新は、前記分岐予測器100からの予測器更新情報出力信号を基礎として実行される。更に、前記分岐予測器100は、前記実行ステージの前記分岐決定ユニット50へ供給される予測分岐成立情報を出力する。
【0018】
好適な実施例によれば、暗示オペレーションは、やがて現れる間接分岐について、プロセッサ・ハードウェアへキーを渡すために、命令に加えられ又は命令に組み込まれる。そして、間接分岐がフェッチされ、かつ分岐の目標が予測されなければならないとき、キー情報が分岐予測器100へ供給されるので、暗示オペレーションは実行ステージで有効である又は有効になる。図1に示されているように、デコードされた命令の一部は、デコードされた命令から分岐予測器100の入力部fへ向いている矢印によって示されているように、分岐予測器100に供給される。このように、分岐予測器100は、対応する分岐目標バッファをアクセスするために、間接分岐への暗示が与えられることに気づいても良いし、供給されるキー情報を受け取っても良い。
【0019】
図2は、図1で示されている分岐予測器100の概略ブロック図を示す。図2によれば、分岐予測器100は、命令アドレスが分岐目標と関連付けられているキャッシュである分岐目標バッファ(BTB)108を有している。もし、命令アドレスがBTB108でヒットしたら、該アドレスが分岐命令に関連しており、予測が目標選択器114を経由して生成され出力されるであろうことが分かる。
【0020】
更に、分岐履歴テーブル(110)が備えられ、それは分岐の方向を予測する。BHT110は、条件付分岐の方向、すなわち分岐が分岐成立か否か、を予測する。これは、典型的に、プログラム・カウンタの下位によって指し示された2ビットの飽和型カウンタのテーブルによって実現される。このようなカウンタは、決定された分岐が分岐成立のときに増やされ、分岐が分岐不成立のときに減らされる。分岐は、もし、関連する2ビットカウンタの最も重要なビットがセットされていたら、分岐成立として予測される。2ビットカウンタは、分岐予測器100に履歴現象の幾つかの型を伝えるために、弱い及び強い状態を有していても良い。ある方向の状態にある分岐が誤って予測されるときはいつでも、予測を変更する前に、2度目の機会が与えられる。これは、強いから弱い状態へ移行することによって達成されるが、同一の予測を維持する。分岐が、再び誤って予測されると、予測は変更される。正しい予測の場合には、状態は、強い状態へ戻される。BHT110がタグなしテーブルであるという事実のために、同一のカウンタへの複数の分岐のマッピングのコンフリクトは検出されない。図1の解凍ステージによって予測が許可されたときは、アンドゲート112は、予測分岐成立情報を出力するためにオープンする。
【0021】
加えて、関数リターンの予測は、リターンアドレススタック(RAS)106を維持することによって、改善され得る。関数呼出分岐はリターンアドレスをRAS106にプッシュし、関数リターン分岐はRAS106の値をポップする。フェッチ・ステージで、関数リターンを検出するために必要な分岐の型を決定するために、BTB108は、通常、型情報を命令アドレスに関連付ける。代替として、型情報は、命令キャッシュ20で、予め符号化されることが可能である。
【0022】
好適な実施例では、もし、暗示オペレーションがデコード・ステージで検出されると、暗示検出情報は、分岐予測器100の入力部fへ加えられる。暗示検出情報は、分岐予測器100に備えられている追加の間接分岐目標バッファ(IBTB)104の出力信号を選択するように、分岐予測器100の目標選択器114へ供給される。更に、暗示オペレーションから導き出されるキー情報は、分岐予測器100の入力部fに供給され、そこから内部ハッシュユニット102へ供給され、該キー情報は、入力部b経由でフェッチ・ステージから供給される現在のプログラム・カウンタでハッシュされる。そのため、やがて現れる間接分岐は、分岐の目標に関連するキーにより暗示される。スイッチ文に関連する命令の場合、キーは、スイッチ文のスイッチ値であれば良い。更に、仮想関数呼出に関連する命令の場合、キーは、仮想関数呼出の仮想関数テーブルのアドレスであれば良い。キー情報又はキーは、その後、IBTB104の分岐目標のタグなしテーブルで索引を得るために、暗示オペレーションを有する命令のアドレス(プログラム・カウンタ)により、ハッシュユニット102でハッシュされる。
【0023】
IBTB104は、分岐決定ユニット50の出力信号に基づいた実行ステージの更新キューユニット60、及び分岐予測器100から出力されるIBTB索引を有する予測更新情報によって更新されても良い。
【0024】
図3及び図4は、スイッチ文及び仮想関数呼出が、どのように実装されているのかを示す。両方の場合で、「bphint」と呼ばれる操作が、やがて現れる間接分岐について、キーをハードウェアに渡すために使用される。図3について言えば、一般的な表現「ld32x a,i → v」は、「v=a[i]」を意味し、図4について言えば、一般的な表現「ld32d(0)a → v」は、「v=a[0]」を意味する。間接分岐「pjmpt」がフェッチされ、その目標が、分岐予測器100によって予測されなければならないとき、bphint操作は、図5に示すように、実行ステージにあり、VLIWプロセッサの連続するステージの同一時の内容は、正しいテンポで、異なる位置における縦の列で示されている。
【0025】
分岐予測器100は、入力部fにおける信号によって、間接分岐がフェッチされたことを知らされ、そして、前記導き出されたキー情報は、IBTB104をアクセスするための索引を生成するためにハッシュされ、それは、目標選択器114経由の分岐目標及び分岐予測器100の出力信号aを生成し、出力するためである。IBTB索引は、出力部c経由で出力され、フェッチ・ステージから、IBTB104を更新するために使用される実行ステージへ、パイプラインを通って渡される。
【0026】
図3及び図4では、各行は、一つのVLIW命令に対応し、図3のスイッチ文は、間接分岐によって続けられるテーブル・ルック・アップで構成されており、図4の仮想関数呼出実装は、このテーブル及び間接分岐からメソッドへのメソッド・ポインタによって続けられる仮想関数テーブルポインタのロードで構成されている。
【0027】
図5は、図4の仮想関数呼出に関連しており、その結果、間接分岐のための改善された分岐予測を提供するために、情報が、どのように、実行ステージの暗示オペレーションからフェッチ・ステージに渡されるのかということを、矢印は示している。図5では、各ラインは、図5の左側に示されている命令の連続する処理ステージを示しており、ラインのずれは、命令のパイプライン処理を示している。bphintオペレーションを有するロード命令が最初の実行ステージに配置されたとき、pjmpt分岐命令は、フェッチ・ステージに配置される。
【0028】
開示される技術は、関数ポインタから生じる間接分岐の予測のためにもまた、有益であり得る、ということに留意されたい。この場合、コンパイラは、正しいテンポで有効にするための、決定され又は計算された分岐目標に基づいて、キーとして使用される値を検出しなければならない。特に、コンパイラは、検出された暗示オペレーションから、キー情報を導き出す(例えば、抽出する又はデコードする)。導き出されたキー情報は、分岐目標を決定するために、コンパイラによって直接使用されても良い。代替として、コンパイラは、分岐目標を得るために、IBTB104をアクセスしても良い。
【0029】
もし、ロード・レイテンシがVLIWプロセッサのフロントエンド・パイプライン・ステージの数と等しければ、前述したように、暗示オペレーションは、ロード処理と平行してスケジュールされることができる。暗示オペレーションは、間接分岐がフェッチされたときに実行ステージに到達する。ロード・レイテンシがパイプラインのフロント・エンドより長い場合、暗示オペレーションは、ロード処理よりも後にスケジュールされることができる。ロード・レイテンシがフロントエンドステージの数より短い場合、間接分岐は、暗示オペレーションによって提供されるキーを使用することを可能とするために、後でスケジュールされなければならないだろう。後のスケジュールは、命令総数を増やすだろうし、従って、暗示する処理の有用性を減らす。
【0030】
代替としては、提案された技術は、ジャンプ・テーブル及び仮想関数テーブルのエントリのためにキャッシュとして実装されても良い。従って、これらのテーブルの、一番最近使用されたエントリがIBTB104に記憶される。そのようなキャッシュ機能は、もし通常のデータキャッシュへのアクセスが時間を食うのであれば、有用であるかもしれない。
【0031】
従って、冒頭で説明した、知られているCS−DBT技術と比較して、本発明は、分岐目標を予測し、分岐目標に直接関連する分岐予測器へキーを提供することを提唱する。その結果、決定論アプローチが成し遂げられる。
【0032】
如何なる種類の暗示オペレーションも、索引又は間接分岐目標バッファ若しくは他の目標テーブルへの他の種類のアクセス、を提供するためにふさわしい如何なる種類のキー情報、を導くためにも提供され得る、ということに留意されたい。更に、如何なる種類のハッシング・スキームが、キー情報から索引情報を生成するために使用されても良い。幾つかの種類のタグなし間接目標キャッシュが実装され得る。それらキャッシュは、キー情報及び命令アドレス情報が、IBTB104にハッシュされるという態様とは異なっても良い。その結果として、本発明は、前述した好適な実施例に制限されず、分岐予測機能を有するいずれのプロッセッサ構成にも適用可能である。本発明は、添付した請求項の範囲内における、如何なる変形をもカバーすることを意図している。
【図面の簡単な説明】
【0033】
【図1】図1は、好適な実施例によるプロセッサの概略ブロック図を示す。
【図2】図2は、好適な実施例による、プロセッサ内に備えられる分岐予測器の概略ブロック図を示す。
【図3】図3は、暗示オペレーションを有するスイッチ文の実行を示す。
【図4】図4は、暗示オペレーションを有する仮想関数呼出の実行を示す。
【図5】図5は、暗示オペレーションを有するロードオペレーションの、パイプライン化された実行、及び間接分岐操作を示す。
Claims (15)
- プログラムの分岐目標を予測する方法であって、
複数の分岐目標を有する分岐目標テーブルを準備するステップと、
キー情報を導き出すために、前記プログラムにおいて、暗示オペレーションを使用するステップと、
前記キー情報に基づいて、前記分岐目標テーブルから前記分岐目標を選択するステップと、
を有する分岐目標を予測する方法。 - 前記請求項1に記載の分岐目標を予測する方法であって、
前記キー情報は、前記分岐の原因となるスイッチ文のスイッチ値から導き出されること、
を特徴とする分岐目標を予測する方法。 - 前記請求項1又は請求項2に記載の方法であって、
前記キー情報は、前記分岐の原因となる仮想関数呼出の仮想関数テーブルのアドレスから導き出されること、
を特徴とする分岐目標を予測する方法。 - 前記請求項1から請求項3のいずれか一項に記載の方法であって、
前記暗示オペレーションは、VLIW命令に組み込まれていること、
を特徴とする分岐目標を予測する方法。 - 前記請求項1から請求項4のいずれか一項に記載の方法であって、
前記キー情報は、前記分岐目標テーブルへアクセスするために使用する索引を得るために、前記分岐命令又は前記暗示オペレーションを組み込んだ命令のアドレスによりハッシュされること、
を特徴とする分岐目標を予測する方法。 - 前記請求項1から請求項5のいずれか一項に記載の方法であって、
前記分岐目標テーブルは、間接分岐のための分岐目標を有する間接分岐目標バッファであること、
を特徴とする分岐目標を予測する方法。 - 前記請求項1から請求項6のいずれか一項に記載の方法であって、
前記暗示オペレーションは、前記プログラムの予め定められた位置に設けられ、
該予め定められた位置は、
前記対応する分岐命令が、命令実行サイクルのフェッチ・フェーズにあるときに、前記暗示オペレーションが命令実行サイクルの実行フェーズにあるように選択されること、
を特徴とする分岐目標を予測する方法。 - 前記請求項1から請求項7のいずれか一項に記載の方法であって、
前記予測方法は、関数ポインタから生じる間接分岐の分岐目標を予測するために使用されること、
を特徴とする分岐目標を予測する方法。 - 前記請求項1から請求項8のいずれか一項に記載の方法であって、
更に、前記分岐目標テーブルに、ジャンプ・テーブル及び/又は仮想関数テーブルの、一番最近使用したエントリを記憶するステップを有すること、
を特徴とする分岐目標を予測する方法。 - 前記請求項1から請求項9のいずれか一項に記載の方法であって、
前記予測方法は、コンパイラに統合された動的分岐予測方法であること、
を特徴とする分岐目標を予測する方法。 - プログラムの分岐目標を予測するプロセッサであって、
複数の分岐目標を記憶する分岐目標バッファ手段と、
前記プログラムの暗示オペレーションを検出し、該暗示オペレーションからキー情報を導き出すデコード手段と、
前記分岐目標を選択するために、前記キー情報を使用して前記分岐目標バッファ手段にアクセスするアクセス手段と、
を有するプロセッサ。 - 前記請求項11に記載のプロセッサであって、
前記分岐目標バッファ手段は、間接分岐目標を記憶するよう構成されており、
更に、分岐目標バッファ手段は、直接分岐目標を記憶するために設けられること、
を特徴とするプロセッサ。 - 前記請求項11又は請求項12に記載のプロセッサであって、
前記アクセス手段は、前記プロセッサの実行ステージ又はフェッチ・ステージのアドレスで、前記キー情報をハッシュするハッシング手段を有すること、
を特徴とするプロセッサ。 - プログラムの暗示オペレーションを検出し、
該暗示オペレーションからキー情報を導き出し、
該キー情報に基づいて該分岐目標を決定するよう構成される、
プログラムの分岐目標を予測するコンパイラ。 - 前記請求項14に記載のコンパイラであって、
前記分岐目標は、関数ポインタの間接分岐から生じること、
を特徴とするコンパイラ。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP01202499 | 2001-06-29 | ||
PCT/IB2002/002473 WO2003003195A1 (en) | 2001-06-29 | 2002-06-20 | Method, apparatus and compiler for predicting indirect branch target addresses |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004533695A true JP2004533695A (ja) | 2004-11-04 |
JP3805339B2 JP3805339B2 (ja) | 2006-08-02 |
Family
ID=8180556
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003509305A Expired - Fee Related JP3805339B2 (ja) | 2001-06-29 | 2002-06-20 | 分岐目標を予測する方法、プロセッサ、及びコンパイラ |
Country Status (6)
Country | Link |
---|---|
US (1) | US20040172524A1 (ja) |
EP (1) | EP1405174A1 (ja) |
JP (1) | JP3805339B2 (ja) |
KR (1) | KR20040014988A (ja) |
CN (1) | CN1265286C (ja) |
WO (1) | WO2003003195A1 (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010134330A1 (ja) * | 2009-05-19 | 2010-11-25 | パナソニック株式会社 | 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体 |
JP2013016192A (ja) * | 2008-03-24 | 2013-01-24 | Nvidia Corp | 同期並列スレッドプロセッサにおける間接的な関数呼び出し命令 |
Families Citing this family (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7302380B2 (en) * | 2002-12-12 | 2007-11-27 | Matsushita Electric, Industrial Co., Ltd. | Simulation apparatus, method and program |
US20050273559A1 (en) | 2004-05-19 | 2005-12-08 | Aris Aristodemou | Microprocessor architecture including unified cache debug unit |
US7409535B2 (en) * | 2005-04-20 | 2008-08-05 | International Business Machines Corporation | Branch target prediction for multi-target branches by identifying a repeated pattern |
WO2007049150A2 (en) | 2005-09-28 | 2007-05-03 | Arc International (Uk) Limited | Architecture for microprocessor-based systems including simd processing unit and associated systems and methods |
US20070088937A1 (en) * | 2005-10-13 | 2007-04-19 | International Business Machines Corporation | Computer-implemented method and processing unit for predicting branch target addresses |
US8935517B2 (en) | 2006-06-29 | 2015-01-13 | Qualcomm Incorporated | System and method for selectively managing a branch target address cache of a multiple-stage predictor |
US20080010635A1 (en) * | 2006-07-07 | 2008-01-10 | O'brien John Kevin | Method, Apparatus, and Program Product for Improving Branch Prediction in a Processor Without Hardware Branch Prediction but Supporting Branch Hint Instruction |
US8909907B2 (en) * | 2008-02-12 | 2014-12-09 | International Business Machines Corporation | Reducing branch prediction latency using a branch target buffer with a most recently used column prediction |
US20110078425A1 (en) * | 2009-09-25 | 2011-03-31 | Shah Manish K | Branch prediction mechanism for predicting indirect branch targets |
US8612731B2 (en) | 2009-11-06 | 2013-12-17 | International Business Machines Corporation | Branch target buffer for emulation environments |
US20110320787A1 (en) * | 2010-06-28 | 2011-12-29 | Qualcomm Incorporated | Indirect Branch Hint |
CN102163143B (zh) * | 2011-04-28 | 2013-05-01 | 北京北大众志微系统科技有限责任公司 | 一种实现值关联间接跳转预测的方法 |
CN102156636B (zh) * | 2011-04-28 | 2013-05-01 | 北京北大众志微系统科技有限责任公司 | 一种实现值关联间接跳转预测的装置 |
US9477478B2 (en) * | 2012-05-16 | 2016-10-25 | Qualcomm Incorporated | Multi level indirect predictor using confidence counter and program counter address filter scheme |
US20130346727A1 (en) * | 2012-06-25 | 2013-12-26 | Qualcomm Incorporated | Methods and Apparatus to Extend Software Branch Target Hints |
GB201300608D0 (en) * | 2013-01-14 | 2013-02-27 | Imagination Tech Ltd | Indirect branch prediction |
US20140250289A1 (en) * | 2013-03-01 | 2014-09-04 | Mips Technologies, Inc. | Branch Target Buffer With Efficient Return Prediction Capability |
US9442736B2 (en) | 2013-08-08 | 2016-09-13 | Globalfoundries Inc | Techniques for selecting a predicted indirect branch address from global and local caches |
CN104572024A (zh) * | 2014-12-30 | 2015-04-29 | 杭州中天微系统有限公司 | 一种用于函数返回地址预测的装置及方法 |
US10185731B2 (en) | 2016-03-31 | 2019-01-22 | Arm Limited | Indexing entries of a storage structure shared between multiple threads |
CN105867880B (zh) * | 2016-04-01 | 2018-12-04 | 中国科学院计算技术研究所 | 一种面向间接跳转分支预测的分支目标缓冲器及设计方法 |
US20180004627A1 (en) * | 2016-06-29 | 2018-01-04 | Centipede Semi Ltd. | Sequential monitoring and management of code segments for run-time parallelization |
US10884747B2 (en) | 2017-08-18 | 2021-01-05 | International Business Machines Corporation | Prediction of an affiliated register |
US10884745B2 (en) * | 2017-08-18 | 2021-01-05 | International Business Machines Corporation | Providing a predicted target address to multiple locations based on detecting an affiliated relationship |
US11150904B2 (en) | 2017-08-18 | 2021-10-19 | International Business Machines Corporation | Concurrent prediction of branch addresses and update of register contents |
US11150908B2 (en) | 2017-08-18 | 2021-10-19 | International Business Machines Corporation | Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence |
US10908911B2 (en) | 2017-08-18 | 2021-02-02 | International Business Machines Corporation | Predicting and storing a predicted target address in a plurality of selected locations |
US10719328B2 (en) | 2017-08-18 | 2020-07-21 | International Business Machines Corporation | Determining and predicting derived values used in register-indirect branching |
US10884746B2 (en) | 2017-08-18 | 2021-01-05 | International Business Machines Corporation | Determining and predicting affiliated registers based on dynamic runtime control flow analysis |
US10534609B2 (en) | 2017-08-18 | 2020-01-14 | International Business Machines Corporation | Code-specific affiliated register prediction |
US10819736B2 (en) * | 2017-11-29 | 2020-10-27 | Arm Limited | Encoding of input to branch prediction circuitry |
US11126714B2 (en) | 2017-11-29 | 2021-09-21 | Arm Limited | Encoding of input to storage circuitry |
GB2573119A (en) | 2018-04-24 | 2019-10-30 | Advanced Risc Mach Ltd | Maintaining state of speculation |
US11301251B2 (en) * | 2020-03-30 | 2022-04-12 | SiFive, Inc. | Fetch stage handling of indirect jumps in a processor pipeline |
US20220197657A1 (en) * | 2020-12-22 | 2022-06-23 | Intel Corporation | Segmented branch target buffer based on branch instruction type |
CN117008979B (zh) * | 2023-10-07 | 2023-12-26 | 北京数渡信息科技有限公司 | 一种分支预测器 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4860199A (en) * | 1987-07-31 | 1989-08-22 | Prime Computer, Inc. | Hashing indexer for branch cache |
EP0463973A3 (en) * | 1990-06-29 | 1993-12-01 | Digital Equipment Corp | Branch prediction in high performance processor |
DE4211222B4 (de) * | 1991-04-05 | 2009-05-28 | Kabushiki Kaisha Toshiba, Kawasaki | Abzweigungs-Vorhersage-Vorrichtung und Abzweigungs-Vorhersage-Verfahren für einen Super-Skalar-Prozessor |
US5790845A (en) * | 1995-02-24 | 1998-08-04 | Hitachi, Ltd. | System with reservation instruction execution to store branch target address for use upon reaching the branch point |
US5857104A (en) * | 1996-11-26 | 1999-01-05 | Hewlett-Packard Company | Synthetic dynamic branch prediction |
JP3570855B2 (ja) * | 1997-05-29 | 2004-09-29 | 株式会社日立製作所 | 分岐予測装置 |
US6035118A (en) * | 1997-06-23 | 2000-03-07 | Sun Microsystems, Inc. | Mechanism to eliminate the performance penalty of computed jump targets in a pipelined processor |
US6185676B1 (en) * | 1997-09-30 | 2001-02-06 | Intel Corporation | Method and apparatus for performing early branch prediction in a microprocessor |
US6178498B1 (en) * | 1997-12-18 | 2001-01-23 | Idea Corporation | Storing predicted branch target address in different storage according to importance hint in branch prediction instruction |
US6314493B1 (en) * | 1998-02-03 | 2001-11-06 | International Business Machines Corporation | Branch history cache |
US7219217B1 (en) * | 1998-10-16 | 2007-05-15 | Intel Corporation | Apparatus and method for branch prediction utilizing a predictor combination in parallel with a global predictor |
US6601161B2 (en) * | 1998-12-30 | 2003-07-29 | Intel Corporation | Method and system for branch target prediction using path information |
US6499101B1 (en) * | 1999-03-18 | 2002-12-24 | I.P. First L.L.C. | Static branch prediction mechanism for conditional branch instructions |
US6324643B1 (en) * | 1999-10-01 | 2001-11-27 | Hitachi, Ltd. | Branch prediction and target instruction control for processor |
-
2002
- 2002-06-20 US US10/482,014 patent/US20040172524A1/en not_active Abandoned
- 2002-06-20 WO PCT/IB2002/002473 patent/WO2003003195A1/en not_active Application Discontinuation
- 2002-06-20 EP EP02738525A patent/EP1405174A1/en not_active Withdrawn
- 2002-06-20 KR KR10-2003-7002969A patent/KR20040014988A/ko not_active Application Discontinuation
- 2002-06-20 JP JP2003509305A patent/JP3805339B2/ja not_active Expired - Fee Related
- 2002-06-20 CN CNB028128931A patent/CN1265286C/zh not_active Expired - Fee Related
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013016192A (ja) * | 2008-03-24 | 2013-01-24 | Nvidia Corp | 同期並列スレッドプロセッサにおける間接的な関数呼び出し命令 |
US9639365B2 (en) | 2008-03-24 | 2017-05-02 | Nvidia Corporation | Indirect function call instructions in a synchronous parallel thread processor |
WO2010134330A1 (ja) * | 2009-05-19 | 2010-11-25 | パナソニック株式会社 | 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体 |
CN102099781A (zh) * | 2009-05-19 | 2011-06-15 | 松下电器产业株式会社 | 分支预测装置、其分支预测方法、编译器、其编译方法及分支预测程序记录介质 |
JP5347023B2 (ja) * | 2009-05-19 | 2013-11-20 | パナソニック株式会社 | 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体 |
US8694760B2 (en) | 2009-05-19 | 2014-04-08 | Panasonic Corporation | Branch prediction using a leading value of a call stack storing function arguments |
Also Published As
Publication number | Publication date |
---|---|
US20040172524A1 (en) | 2004-09-02 |
EP1405174A1 (en) | 2004-04-07 |
CN1520547A (zh) | 2004-08-11 |
JP3805339B2 (ja) | 2006-08-02 |
KR20040014988A (ko) | 2004-02-18 |
WO2003003195A1 (en) | 2003-01-09 |
CN1265286C (zh) | 2006-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3805339B2 (ja) | 分岐目標を予測する方法、プロセッサ、及びコンパイラ | |
EP1851620B1 (en) | Suppressing update of a branch history register by loop-ending branches | |
US6263427B1 (en) | Branch prediction mechanism | |
US6550004B1 (en) | Hybrid branch predictor with improved selector table update mechanism | |
US7437543B2 (en) | Reducing the fetch time of target instructions of a predicted taken branch instruction | |
US7278012B2 (en) | Method and apparatus for efficiently accessing first and second branch history tables to predict branch instructions | |
EP0938044B1 (en) | Method and apparatus for reducing interference in a branch history table of a microprocessor | |
US20060218385A1 (en) | Branch target address cache storing two or more branch target addresses per index | |
US8572358B2 (en) | Meta predictor restoration upon detecting misprediction | |
JP2008532142A5 (ja) | ||
JP2011100466A5 (ja) | ||
US20070266228A1 (en) | Block-based branch target address cache | |
EP2024820B1 (en) | Sliding-window, block-based branch target address cache | |
US5935238A (en) | Selection from multiple fetch addresses generated concurrently including predicted and actual target by control-flow instructions in current and previous instruction bundles | |
US5964869A (en) | Instruction fetch mechanism with simultaneous prediction of control-flow instructions | |
JP2006520964A (ja) | 分岐ターゲットに基づいて分岐予測をするための方法および装置 | |
KR101048258B1 (ko) | 가변 길이 명령 세트의 브랜치 명령의 최종 입도와 캐싱된 브랜치 정보의 관련 | |
US6289444B1 (en) | Method and apparatus for subroutine call-return prediction | |
KR101026978B1 (ko) | 리턴 스택을 운용하는 방법 및 장치 | |
JPH08320788A (ja) | パイプライン方式プロセッサ | |
US20030131345A1 (en) | Employing value prediction with the compiler |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050617 |
|
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: 20060411 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060509 |
|
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: 20090519 Year of fee payment: 3 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090519 Year of fee payment: 3 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100519 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100519 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110519 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110519 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120519 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130519 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130519 Year of fee payment: 7 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130519 Year of fee payment: 7 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |