JP3599409B2 - 分岐予測装置 - Google Patents
分岐予測装置 Download PDFInfo
- Publication number
- JP3599409B2 JP3599409B2 JP5697195A JP5697195A JP3599409B2 JP 3599409 B2 JP3599409 B2 JP 3599409B2 JP 5697195 A JP5697195 A JP 5697195A JP 5697195 A JP5697195 A JP 5697195A JP 3599409 B2 JP3599409 B2 JP 3599409B2
- Authority
- JP
- Japan
- Prior art keywords
- branch
- prediction
- instruction
- information
- prediction information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 claims description 107
- 230000007246 mechanism Effects 0.000 claims description 79
- 230000003068 static effect Effects 0.000 claims description 27
- 230000004044 response Effects 0.000 claims description 11
- 239000000284 extract Substances 0.000 claims description 9
- 239000000872 buffer Substances 0.000 description 104
- 238000012545 processing Methods 0.000 description 42
- 238000010586 diagram Methods 0.000 description 40
- 101100534231 Xenopus laevis src-b gene Proteins 0.000 description 36
- 238000004364 calculation method Methods 0.000 description 17
- 230000008569 process Effects 0.000 description 15
- 230000006835 compression Effects 0.000 description 12
- 238000007906 compression Methods 0.000 description 12
- 230000000694 effects Effects 0.000 description 10
- 230000000875 corresponding effect Effects 0.000 description 7
- 230000008859 change Effects 0.000 description 6
- 230000003111 delayed effect Effects 0.000 description 5
- 230000006870 function Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000007796 conventional method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000007430 reference method Methods 0.000 description 2
- 238000004088 simulation Methods 0.000 description 2
- 101100058681 Drosophila melanogaster Btk29A gene Proteins 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000011218 segmentation 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
- 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/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
- G06F9/324—Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
-
- 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
-
- 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
-
- 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/3846—Speculative instruction execution using static prediction, e.g. branch taken strategy
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)
Description
【産業上の利用分野】
この発明はプロセッサにおける分岐予測装置に関し、特に、パイプライン方式のプロセッサにおいて、分岐によるパイプラインの乱れを小さくするための分岐予測装置に関する。
【0002】
【従来の技術】
フェッチ命令の実行を複数のステージに分割し、各命令の1ステージの処理(これはサイクルと呼ぶ)が終了するごとにその命令の次のステージの処理を開始し、同時に次の命令のそのステージの処理を開始することにより、同時に複数の命令を実行していく方式のプロセッサをパイプライン方式のプロセッサと呼ぶ。パイプライン方式を用いた場合、1命令を実行するための時間ごとではなく、それをステージ数で分割した、1ステージの実行に必要な時間ごとに1命令の処理が完了する。したがって、単純に考えれば、パイプライン方式のプロセッサの命令実行能力は、分割のステージ数だけ倍増される。
【0003】
しかし実際のパイプライン方式のプロセッサでは、そのような速度の向上は得られない。その主たる原因は分岐命令である。パイプラインで実行される命令中に分岐命令がある場合、分岐先によっては、既にパイプラインに投入されていた命令をすべて消去し、分岐先のアドレスの命令から実行を再開させる必要が生ずることがある。これをパイプラインの分断と呼ぶ。分岐命令によるパイプラインの分断が生ずると、分岐処理が行なわれるまでにパイプラインに投入された命令が無駄となるために、処理の効率が低下する。
【0004】
そこでパイプライン方式のプロセッサでは、分岐命令によるパイプラインの分断を防ぐために、何らかの予測を行ない、それに従って命令流をパイプラインに連続供給する。この予測の精度が高いほど、分岐によるパイプラインの分断の発生の確率は小さく、パイプラインの乱れは小さくなり性能の低下を抑えることができる。したがって分岐予測の精度はできるだけ高くする必要がある。
【0005】
分岐予測の主な方式として次のようなものがある。
▲1▼ ディレイド・ブランチ方式による静的分岐予測
▲2▼ ブランチターゲットバッファ(BTB、Branch Target Buffer)を用いた動的分岐予測
これについてはたとえば、エス・マクファリングおよびジェイ・エル・ヘネシーによる「リデューシング ザ コスト オブ ブランチーズ」(第13回コンピュータアーキテクチャシンポジウムプロシーディングス、1986年6月、S. McFarling, J.L. Hennessy,“Reducing the cost of branches,”in Proceedings of 13th Annual Symposium on Computer Architecture)の第396頁〜403頁に説明がある。これらの方式は、分岐命令にはその分岐方向に偏りがあること(分岐の偏り)を利用して、過去の実行結果から得られる情報に従って予測を行なっている。
【0006】
ディレイド・ブランチ方式は、分岐確率が高い方のパス(ライクリーパス)上の命令をコンパイラがディレイ・スロットに移動させて分岐ペナルティを抑える。ディレイ・スロットとは、分岐命令のフェッチから、分岐命令の分岐先命令のフェッチまでの間にパイプラインに投入される命令をいう。この間に複数の命令が投入される場合、分岐命令の直後に投入される命令を第1スロット、次に投入される命令を第2スロット、などと呼ぶ。ディレイド・ブランチ方式で使用される分岐確率は、コンパイルまでに、サンプルプログラムなどを実行することにより得られた分岐の実行結果に基づいて決定される。つまり、プログラムの実行履歴をもとに分岐命令の分岐予測を行なっている。
【0007】
ディレイド・ブランチ方式の予測ヒット率、つまり、ディレイ・スロットが有効な命令で埋められる確率として、第1スロットの場合約70%、第2のスロットの場合は25%以下となるデータがある。
【0008】
BTB方式は、分岐命令の実行時の結果に基づいて分岐予測を行なう。BTB方式による予測手順の概要を図を参照して説明する。
【0009】
図35を参照してBTB方式の分岐予測装置は、プロセッサの命令パイプライン322と命令キャッシュ320とに接続され、BTB324と分岐予測機構326とを含む。命令キャッシュ320は、図示されない主メモリなどに接続されており、分岐予測機構326から与えられるフェッチアドレスの命令を命令パイプライン322に与える。命令キャッシュ320に、与えられたフェッチアドレスの命令が存在しない場合には、命令キャッシュ320はメインメモリから該当アドレスの命令を読出し、格納すると同時に命令パイプライン322に供給する。
【0010】
BTB324は、分岐命令の過去の履歴や、分岐先情報からなる分岐予測情報を格納する。BTB324には、分岐予測機構326からフェッチアドレスが、命令パイプライン322から予測ミス情報などが与えられる。
【0011】
分岐予測機構326は、命令のフェッチと同時にBTB324のアクセスを行ない、分岐予測情報を読出し、得られた履歴情報をある予測アルゴリズムに当てはめて予測を行ない、その結果がtaken 予測(分岐成立方向に予測)であれば分岐先情報から生成した分岐先アドレスを次サイクルのフェッチアドレスとして命令キャッシュ320に供給する。
【0012】
BTB方式による分岐予測の流れを図36に示す。図36を参照して、サイクルnで命令iをフェッチし、同時にBTBリードを行なう。サイクルnの後半で分岐予測を行ない、サイクルn+1で命令i+1のフェッチとBTBリードを行なう。サイクルn+1で命令iの分岐が解決され、予測ミスであればサイクルn+2で命令i+2がフェッチされかつBTBが更新される。
【0013】
図37を参照して、分岐予測機構326は、BTB324(図35)からの履歴情報により分岐がtaken 分岐か否かを予測するための予測回路330と、予測回路330の予測結果と、命令パイプラインから与えられる予測ミス情報(予測ミス時の再フェッチアドレスなど)と、BTB324(図35)からの分岐先アドレスと、直前に自己が出力したフェッチアドレスとに基づいて、次命令のフェッチアドレスを選択するためのフェッチアドレス選択回路332とを含む。
【0014】
予測回路330は、前述のとおり履歴情報をある予測アルゴリズムに当てはめて分岐予測を行ない、その結果がtaken 予測かどうかを示す予測信号を出力する。フェッチアドレス選択回路322は基本的には、予測信号がtaken 予測であれば分岐先アドレスを選択し、さもなければ直前に出力したフェッチアドレスの次のフェッチアドレスを選択する。
【0015】
以上のBTB方式は、過去数回の履歴をもとに分岐予測を行なう。何回の履歴をもとにするかは、BTBが保持する履歴情報のビット数による。
【0016】
BTB方式の予測ヒット率は、2ビット履歴、256エントリ(BTB内のエントリ数)の場合で、77%というシミュレート結果が得られている。この場合予測の正確さが83%、BTBのヒット率が93%というシミュレート結果であり、予測ヒット率はその積である。
【0017】
【発明が解決しようとする課題】
このように従来の2方式はそれほど高い予測ヒット率を有していない。したがって、より高い予測ヒット率を得られる分岐予測方式が望ましい。この場合、ループを形成する条件分岐命令である後方分岐(backward branch )は、約90%が分岐する(たとえばジェイ・エル・ヘネシー、ディ・エイ・パターソンによる「コンピュータアーキテクチャ:定量的アプローチ」(J. L. Hennesy, D. A. Patterson, “Computer Architecture: A Quantitative Approach, ”の第108頁)ので、過去の実行結果に基づいた履歴による予測は有効である。しかし、前方分岐(forward branch)では、分岐する確率は約40%と、偏りがない。
【0018】
一般的にプログラムではループを形成する条件分岐命令で処理を繰り返し行なうことが多いので、後方分岐命令を有効に予測できればある程度の効果があると考えられている。しかし、実際にはそのループ内での条件文を前方分岐が形成していることが多い。そうした条件文は、ループが実行される回数と同じ回数だけ実行されるので、ループを形成する条件分岐命令と少なくとも同じ回数だけ実行される。したがって、パイプラインの動作効率を高めるためには、後方分岐のみを有効に予測するだけでは足りず、前方分岐についても有効な予測を行なう必要がある。こうした前方分岐では、前述のように分岐する確率に偏りがないので、履歴による分岐予測は有効ではない。
【0019】
したがって、前方分岐のように分岐に偏りがない場合でも有効に分岐予測を行なうことができる分岐予測方式が求められている。
【0020】
この点につき特開昭63−231627号公報には、アドレス計算が不要でかつコンディションコードを設定する命令を実行する際に、使用されていないアドレス計算回路で、その命令の実行と同時に演算を行なってコンディションコードの予測値を求め、そのコンディションコードを用いて処理すべき内容を決定する後続の命令に対して、アドレス計算回路で計算したコンディションコードの予測値を渡すことにより、処理すべき内容の決定を早期に実行させる先行制御方式が開示されている。このような方式では、コンディションコードを設定する命令が使用するデータと同じデータを用いて並列にコンディションコードの予測値を求めるので、過去の履歴のみに基づく場合と比べ、コンディションコードが正しく求められる確率が高くなると思われる。
【0021】
しかし、この特開昭63−231627号公報の方式は、単にコンディションコードの予測値を求めるのみであり、これを分岐予測に適用するとすれば、得られたコンディションコードの予測値を用いて、後続の命令により分岐予測を行なうことになる。この場合次のような問題が生ずる。
【0022】
図38を参照して、この特開昭63−231627号公報に開示された先行技術制御方式を予測分岐方式に用いた場合、まずサイクル1でコンディションコードを設定するセット命令がフェッチされ、サイクル2でこのセット命令がデコードされる。同時にサイクル2で後続の分岐命令がフェッチされる。サイクル3でセット命令が実行されると同時にコンディションコードの予測値の計算も行なわれ、サイクル3の途中で後続の分岐命令に渡される。
【0023】
ところが、サイクル3では、分岐命令の後続する命令のフェッチが行なわれる。そのため、サイクル3の途中で分岐命令にコンディションコードが渡されたとしても、そのコンディションコードを用いて分岐予測をしても、分岐命令の直後にフェッチする命令のアドレスを予測することはできない。したがって、分岐予測の結果は、さらにその後に後続する命令をフェッチするときに使用される。このフェッチはサイクル4で行なわれる。
【0024】
しかし、図38に示されるような命令実行サイクルを有するパイプライン方式では、分岐命令の分岐の実行はサイクル4の前半に終了するので、サイクル4でフェッチする命令は、実際の分岐結果に基づいてフェッチできる。サイクル3で予測した結果を使用することはなく、分岐予測そのものが無駄である。したがってこの特開昭63−231627号公報の先行制御方式をそのままで分岐予測に使用することはできない。
【0025】
以上から、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる新規な分岐予測装置を提供することが望まれている。その場合、過大なハードウェアを追加する必要がない方が好ましい。たとえば、既存の資源を利用できればそれを利用すべきである。また分岐予測の計算も、できるだけ多様な方法で行なえる方がよいし、また、高速に分岐予測を実行できた方が好ましい。分岐予測を高速で行なうために、分岐予測の正確性をある程度犠牲にしてもよいと思われるが、もちろんできるだけ正確に行なえる方がより好ましい。
【0026】
また、分岐命令の分岐の条件を設定するための命令の位置は、それらが使用する資源にもあまり影響されずに分岐予測を行なえればより好ましい。たとえば、分岐命令の直前に実行される命令によって分岐の条件が設定される場合であって、かつその設定にパイプラインの演算結果を保持する、レジスタなどの手段が使用されるために、分岐の条件を分岐命令のフェッチに先立って入手できない場合などである。
【0027】
また、プログラムカウンタ相対やレジスタ参照による分岐先アドレスの決定をする分岐命令を含む多くの種類の分岐命令に対してそうした分岐予測を行なえた方がよい。たとえば、分岐命令の分岐の傾向が過去の実行結果と相関がある、なしにかかわらず、また分岐命令の最初の実行時も含めて有効な分岐予測を行なうことができる方がよい。また、分岐予測の正確性を上げるために既存の命令セットを変更してもよいが、変更することなく、または少しの変更のみで、有効な分岐予測が行なえればより好ましく、また命令のスケジューリングの制限もできるだけない方がよい。
【0039】
それゆえに、請求項1に記載の発明の目的は、過大なハードウェアを追加することなく、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することである。
【0040】
請求項2に記載の発明の目的は、過大なハードウェアを追加することなく、既存の資源を有効に利用して、過去の実行結果と相関がない分岐命令に対しても、有効な分岐予測を行なうこができる分岐予測装置を提供することである。
【0041】
請求項3に記載の発明の目的は、過大なハードウェアを追加することなく、かつ既存の命令セットを変更することなく、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することである。
【0042】
請求項4に記載の発明の目的は、過大なハードウェアを追加することなく、かつ既存の命令セットを生かして、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することである。
【0043】
請求項5に記載の発明の目的は、過大なハードウェアを追加することなく、分岐命令の最初の実行時も含めて、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することである。
【0049】
【課題を解決するための手段】
請求項1に記載の発明に係る分岐予測装置は、演算結果を格納する手段を有するパイプライン方式のプロセッサにおける分岐予測装置であって、分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給するための予測情報供給手段と、予測情報供給手段により供給された予測情報に従って、必要であれば演算結果を格納する手段から分岐予測に必要な情報を読出し、遅くともある分岐命令のフェッチサイクルの完了までにある分岐命令の分岐予測を行なって、分岐予測信号を出力するための分岐予測手段とを含み、命令体系を、分岐の予測情報を含み得るように構成し、予測情報供給手段は、命令から予測情報を取出して供給する手段を含む。
【0062】
請求項2に記載の発明に係る分岐予測装置は、請求項1に記載の分岐予測装置であって、命令に、通常の命令フィールドと、次に実行する分岐命令の予測情報を保持するための予測情報フィールドとを設け、予測情報供給手段は、通常の命令フィールドの内容をパイプラインに投入するとともに、命令の予測情報フィールドから予測情報を取出して分岐予測手段に供給する。
【0063】
請求項3に記載の発明に係る分岐予測装置は、請求項1に記載の分岐予測装置であって、予測情報供給手段は、連続する2つ以上の命令を一度にフェッチして、フェッチした最後の命令が分岐予測命令であることに応答して、フェッチした2つ以上の命令から分岐予測情報を得て、分岐予測手段に与えるための手段を含む。
【0064】
請求項4に記載の発明に係る分岐予測装置は、請求項1に記載の分岐予測装置であって、命令体系に、分岐予測情報を保持するための分岐予測情報保持命令を設け、予測情報供給手段は、分岐予測情報保持命令から分岐予測情報を取出して供給するための手段を含む。
【0065】
請求項5に記載の発明に係る分岐予測装置は、演算結果を格納する手段を有するパイプライン方式のプロセッサにおける分岐予測装置であって、分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給するための予測情報供給手段と、予測情報供給手段により供給された予測情報に従って、必要であれば演算結果を格納する手段から分岐予測に必要な情報を読出し、遅くともある分岐命令のフェッチサイクルの完了までにある分岐命令の分岐予測を行なって、分岐予測信号を出力するための分岐予測手段とを含み、静的な分岐予測機構をさらに含む。各命令は、次に実行される分岐命令に対して行なわれる分岐の予測方式を特定するための予測方式特定情報を含む。予測情報供給手段は、フェッチされた命令から、予測方式特定情報を取出して供給する。分岐予測装置はさらに、分岐予測手段の出力と、静的な分岐予測機構の出力とのいずれか一方を、予測方式特定情報に応答して選択するための方式選択手段とを含む。
【0071】
【作用】
請求項1に記載の分岐予測装置によれば、分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給し、その予測情報に従って分岐予測が行なわれる。予測のための時間に余裕があるので、必要であれば演算結果を格納する手段から分岐予測に必要な情報、たとえば実際に分岐命令が分岐を行なう際に参照する情報を読出して分岐予測に用いることができる。
また、予測情報供給手段は、命令から予測情報を取出すことができる。予測情報を格納しておくためのハードウェアを準備する必要がない。また分岐予測をより的確にするために、格納しておく予測情報の量を増加させる必要もない。
【0084】
請求項2に記載の分岐予測装置では、請求項1に記載の分岐予測装置の作用に加え、予測情報供給手段は、命令中に含まれる通常の命令フィールドの内容をパイプラインに投入するとともに、命令の予測情報フィールドから予測情報を取出して分岐予測手段に供給する。予測情報を格納しておくためのハードウェアを準備する必要がない。また、分岐予測に必要な情報が、必要なときは常に命令から間違いなく供給されるため、分岐予測は的確なものになる。
【0085】
請求項3に記載の分岐予測装置は、請求項1に記載の分岐予測装置の作用に加え、連続する2つ以上の命令を一度にフェッチして、フェッチした最後の命令が分岐予測命令である場合、フェッチした2つ以上の命令から分岐予測情報を得て、分岐予測が行なわれる。命令中に、分岐予測のための特別なフィールドを設けたり、新たな命令を設けたり、命令長を増加したりすることが不要で、命令体系を変更することなく、的確な分岐予測を行なえる。
【0086】
請求項4に記載の分岐予測装置では、請求項1に記載の分岐予測装置の作用に加え、命令体系に、分岐予測情報を保持するための分岐予測情報保持命令を設け、この分岐予測情報を取出して分岐予測に用いる。既存の命令を変更することなく、新たな命令を追加することのみで、余分なハードウェアを追加することもなく的確な分岐予測が行なえる。
【0087】
請求項5に記載の分岐予測装置によれば、分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給し、その予測情報に従って分岐予測が行なわれる。予測のための時間に余裕があるので、必要であれば演算結果を格納する手段から分岐予測に必要な情報、たとえば実際に分岐命令が分岐を行なう際に参照する情報を読出して分岐予測に用いることができる。
また、分岐予測手段の出力と、静的な分岐予測機構の出力とのいずれか一方が予測方式特定情報に応答して選択される。分岐命令の種類により、より適した予測方式を使用して分岐予測を行なえるので、分岐予測がより的確になる。
【0093】
【実施例】
以下この発明のいくつかの実施例を図面を参照して説明する。なお以下の実施例の各図面においては図示されていないが、命令キャッシュは主メモリに接続されており、命令の一部を常に保持しており、フェッチアドレスに該当する命令がない場合には主メモリから読出してくるものとする。これは従来の技術における命令キャッシュと同様である。
【0094】
[第1の実施例]
図1〜図14は、本発明の第1の実施例に係る分岐予測装置に関する図面である。
【0095】
図1を参照して、この分岐予測装置は、命令キャッシュ60と、命令パイプライン50と、命令パイプライン50の演算結果を格納するレジスタファイル52とに接続されている。分岐予測装置は、命令パイプライン50からの情報から予測情報を生成するための予測情報生成機構54と、分岐予測装置から出力されるフェッチアドレスと予測情報生成機構54からの予測情報とを一時格納するための予測情報バッファ56と、予測情報バッファ56からの予測情報と、レジスタファイル52に格納されている演算結果と、命令パイプライン50からの予測ミス情報とに基づき、分岐予測を行なうための分岐予測機構58とを含む。なお、図1には示されていないが、命令パイプライン50は、予測情報バッファ56の読出/書込制御信号を出力し、予測情報バッファ56に与えている。
【0096】
予測情報とは、分岐を決定するコンディションあるいはそのもとになるデータを保持するレジスタ番号、分岐条件などの分岐情報、分岐先情報などをいう。
【0097】
図1に示される命令パイプライン50は、図2に示されるような命令パイプライン処理を行なうものである。もちろん本発明はこのような命令パイプライン処理を行なうプロセッサのみに限定的に適用可能なわけではなく、他のパイプライン処理を行なうものについても、必要な修正を行なうことにより適用できる。
【0098】
図2に示されるように、ある命令はIFステージと、Dステージと、EXCステージと、MEMステージと、WBステージとに分割される。IFステージの後半およびDステージの前半で命令フェッチが、Dステージの後半でデコード、オペランドフェッチが、EXCステージで演算実行が、MEMステージでメモリアクセスが、Wステージでレジスタ書込がそれぞれ行なわれる。分岐命令の場合にはEXCステージの前半で分岐実行処理が行なわれる。
【0099】
このパイプライン方式では、図3に示されるように、各命令を1ステージずつずらせて実行し、1ステージに要するサイクルタイムごとに1つの命令の実行が終了するようになっている。
【0100】
本実施例では、図3に示されるように、命令i−1がフェッチされる間(IFステージ後半からIDステージ前半)に、分岐命令iに対する予測情報を予測情報バッファ56(図1参照)から読出して分岐予測機構58(図1参照)に与える。分岐予測機構はレジスタファイル52に読出要求を行ない、IDステージの後半でレジスタファイルに格納されていたコンディションコードあるいはそのもとになるデータを読出す。そしてEXCステージ前半で所定の分岐予測計算を行ない、分岐する(taken )/分岐しない(not−taken )の予測を決定する。これは図3のEXCステージ前半の「BP」の部分に相当する。
【0101】
taken 予測の場合には、この予測と並行して生成された分岐先アドレスを、分岐命令の次のサイクルにフェッチすべき命令(命令n+1)のフェッチアドレスとして命令キャッシュに与える。not−taken 予測の場合には、Fall−through命令のアドレスをフェッチアドレスとする。Fall−through命令とは、分岐不成立の場合に実行する命令のことであり、通常は静的に分岐命令の次に位置する命令を指す。
【0102】
すなわち命令iの分岐命令の前の命令i−1で命令iの分岐予測情報を読出して分岐予測を行ない、命令i+1のフェッチアドレスを生成するので、分岐予測に時間的余裕がある。
【0103】
予測情報バッファ56の構成を図12に示す。予測情報バッファ56は、従来技術におけるBTBのようなバッファである。図12を参照して予測情報バッファ56には、複数個のエントリ0〜n−1がある。各エントリ130は、有効フラグ132と、検索アドレス134と、予測情報136と、分岐先情報138とからなる。予測情報バッファ56は一種の連想メモリであり、検索アドレス134としては、分岐命令の1サイクル前にフェッチされる命令(図3における命令i−1)のアドレスを登録する。なお、検索アドレスとして他のアドレスを使用することも考えられる。そうした実施例は後述の第9の実施例に示す。有効フラグ132は、エントリ130に格納されている予測情報、分岐先情報が有効かどうかを示すフラグである。
【0104】
予測情報136および分岐先情報138は次のようにして予測情報バッファに登録される。分岐命令が実行されると、分岐命令と比較命令(必要な場合)のオペレーション、オペランドに基づいて分岐予測機構で予測を行なうのに必要な予測情報を予測情報生成機構54が生成する。この予測情報は図12のエントリ130の予測情報136として予測情報バッファに登録される。このとき分岐先アドレスも分岐先情報138として登録される。
【0105】
参照時には予測情報バッファ56は、フェッチアドレスで命令キャッシュと同時にアクセスされる。予測情報バッファの各エントリの検索アドレスとフェッチアドレスとの比較を行ない、一致するエントリがあればその予測情報と分岐先アドレスとを分岐予測機構58に与える。
【0106】
ところで、条件分岐は▲1▼コンディション生成、▲2▼条件判定、▲3▼分岐先アドレス生成、▲4▼分岐先設定、という4つの一連の動作を行なう必要がある。ただしこの場合分岐先アドレス生成処理は▲1▼および▲2▼と並行して実行することが可能である。条件分岐の処理量はそのため、ALU演算などに比べて多い。しかも、分岐命令のフェッチから、分岐先命令のフェッチまでを短くすることにより分岐ディレイを抑えてミスフェッチ時のペナルティを少なくするためには、他の命令よりも早いステージで条件分岐を終了する必要がある。
【0107】
図3に示される命令パイプラインで条件分岐を1命令で処理するためには、EXCステージの前半で▲1▼▲2▼および▲4▼の処理を行なう必要がある。▲1▼のコンディション生成は大小比較を行なうので、32ビットアーキテクチャの場合には32ビットの減算が要求される。32ビット減算という演算は、ALUが1サイクルかけて行なう処理である。このような処理をたとえば半サイクルで行なうことにすると、バランスがとれたパイプラインを構成できない。
【0108】
そこで通常のRISC(Reduced Instruction Set Computer)プロセッサでは条件分岐処理を比較命令と分岐命令との2つに分割する。比較命令では▲1▼の処理を、分岐命令では▲2▼▲3▼▲4▼の処理を行なう。たとえば既存のあるシステムでは、すべての条件分岐を比較命令と分岐命令とに分割して処理する。一方で、コンディション生成を簡単に行なえる場合に限って▲1▼▲2▼▲3▼▲4▼を処理する分岐命令を用意しているので、比較命令+分岐命令で処理する場合と、分岐命令だけで処理する場合との2つの場合が存在するシステムもある。
【0109】
図58に示される分岐予測機構58は、後者の場合すなわち比較命令+分岐命令で処理する場合と、分岐命令だけで処理する場合との両方に対処できる。もちろんこの実施例は一例であって、比較命令+分岐命令のみを用いて処理するシステムを構成することも容易に行なえる。
【0110】
図4を参照して分岐予測機構58は、予測情報デコーダ70と分岐予測回路72と分岐先生成回路74とフェッチアドレス生成回路76とを含む。
【0111】
予測情報デコーダ70は予測情報を予測情報バッファ56から受取り、分岐予測オペレーション、定数などを分岐予測回路72に、分岐先情報を分岐先生成回路74に与え、アクセスすべきレジスタのレジスタ番号をレジスタファイル52に対して出力することによりアクセス要求を行なう。
【0112】
分岐予測回路72の詳細については図9を参照して後述するが、予測情報デコーダ70により指定されたレジスタ番号のレジスタからのデータ(レジスタ1)と、予測情報デコーダ70から与えられる分岐予測オペレーションおよび定数に従い、分岐方向を予測して分岐予測信号を出力するためのものである。
【0113】
分岐先生成回路74は、予測情報デコーダ70からの分岐先情報と、レジスタから与えられる分岐先アドレスと、フェッチアドレス生成回路76の出力するフェッチアドレスとからtaken 予測時の分岐先アドレスを生成するためのものである。
【0114】
フェッチアドレス生成回路76は、分岐予測回路72からの分岐予測信号に応答し、分岐先生成回路74からの分岐先アドレスと、パイプライン50からの予測ミス情報と、直前のフェッチアドレスとから、次にフェッチすべきであると予測される命令のアドレスを生成するためのものである。
【0115】
以下では、分岐処理に関する命令として以下の処理を行なうコードを考える。ただし以下の説明において$aはaで指定されるレジスタの値を、Labelは分岐先アドレスを示すものとする。またたとえば$0は値0を保持する特定のレジスタの値、すなわち値0を指すものとする。
【0116】
たとえば比較命令sltと、4つの分岐命令beq、ble、bgez、bltzを次のように定める。
【0117】
【表1】
【0118】
この命令コードの場合、条件分岐と処理は以下のように実現できる。
【0119】
【表2】
【0120】
本実施例の分岐予測装置は、分岐処理の命令コードによって、分岐予測回路72(図4)のフェッチするレジスタ値に対して、次のような分岐予測オペレーションを行なって分岐予測を行なう。
【0121】
(1) 分岐処理の命令コードが比較命令+分岐命令の場合(図5)
(i) 比較命令と分岐命令との間が1サイクル以上離れている場合(図5(a))
図10を参照して、比較命令(命令n−m)と、分岐命令(命令n)との間が1サイクル以上離れている場合には、分岐予測機構が比較命令sltの実行結果を参照できる。したがって、比較命令sltで生成されたコンディション$dをそのまま分岐予測に用いることができる。予測フェッチに用いるデータをsrc1、src2、…とすると予測フェッチデータとしてはsrc1=$d、src2=$0、分岐予測オペレーションは「一致比較結果の反転を出力する。」となる。分岐命令がbneではなくbeqであれば分岐予測オペレーションは「一致比較結果を出力する。」となる。
【0122】
(ii) 比較命令が分岐命令の直前にある場合(図5(b))
図5(b)に示されるように、比較命令slt(命令n−1)が分岐命令bne(命令n)の直前にある場合、比較命令sltのソースオペランド($a、$b)を分岐予測に用いる。すなわち、予測フェッチデータsrc1=$a、src2=$bである。このときの分岐予測オペレーションは「大小比較結果を出力する。」となる。ただしこれは分岐命令がbneの場合であって、分岐命令がbeqであれば分岐予測オペレーションは「大小比較結果の反転を出力する。」となる。
【0123】
(2) 分岐命令1つで処理する場合(図6)
(i) 分岐命令とそのオペランドを生成する命令の間が1サイクル以上離れている場合(図6(a))
図6(a)を参照して、分岐命令beq(命令n)が参照するオペランド($d,$c)を分岐予測にも用いることができる。したがって予測フェッチデータsrc1=$d、src2=$cとなり、分岐予測オペレーションは「一致比較結果を出力」となる。この分岐予測オペレーションは分岐命令がbeqの場合であり、分岐命令がbneであれば分岐予測オペレーションは「一致比較結果の反転を出力」となる。
【0124】
(ii) 分岐のオペランドを生成する命令が即値を用いた計算を行なうものであり、かつ分岐命令の直前にあり、分岐命令で使用される比較値が定数の場合(図6(b))
図6(b)を参照して、命令n−1でオペランド$aから即値C1を引いた値をaで指定されるレジスタに格納する。そして命令nではこの$aと分岐の比較値$c(定数C)との一致を判定している。この場合、$aの内容が命令n−1の処理により書換えられるため、命令n−1の段階で$aをフェッチしてそれに基づいて分岐予測を行なっても正しい予測は得られない。そこで次のようにする。
【0125】
分岐の比較値$c(定数C2)から命令n−1の即値C1を引いた値(C2−C1)を分岐予測情報の予測定数として分岐予測情報に登録しておく。そして分岐予測では、この予測定数と分岐命令のソースオペランド($a)とを比較する。よって予測フェッチデータsrc1は$a、src2は予測定数(C2−C1)となり、分岐予測オペレーションは「一致比較結果を出力」となる。この分岐予測オペレーションは分岐命令が「beq」の場合であり、分岐命令が「ble」であれば分岐予測オペレーションは「一致比較結果の反転を出力」となる。
【0126】
なお、無条件分岐の場合には予測フェッチデータとしてsrc1=$0、src2=$0とし、分岐予測オペレーションは「一致比較結果を出力」とする。これにより常にtaken 予測となり無条件に分岐する。
【0127】
さらに、次のような場合について考える。0との大小比較を行なう分岐命令としてbgezおよびbltzの2つが用意されていることについては既に述べた。この命令について図7を参照して問題点を述べる。
【0128】
図7を参照して、0との大小比較を行なう分岐命令、たとえば命令bgez(命令n)が、対応する比較命令を持たず、かつその直前にこの分岐命令の分岐のオペランドを生成する命令があり、かつそのオペランドを生成する命令がレジスタ値を用いる計算を行なう場合には、命令n−1がフェッチされるタイミングで$aを得て分岐予測を行なうことができない。
【0129】
この場合、次のようにすれば命令n−1がフェッチされる時点から分岐予測を開始することが可能である。すなわち図7に示される例の場合、命令n−1で$a=$b+$cを計算し、命令nで$aと0との大小関係を比較している。そこで、$aが生成されるのを待たず、命令n−1がフェッチされるのと同じタイミングで$bおよび$cを得て、$b+$cを計算してそれと0との大小比較を行なうことにより、命令nでの分岐命令の分岐予測を行なうことができる。本実施例では、このような分岐予測も行なうことができる構成となっている。
【0130】
あるいは図8を参照して、対となる比較命令を有さない条件分岐命令beq(命令n)において、分岐のオペランドを生成する命令が分岐命令の直前(命令n−1)にあり、この命令がレジスタ値を用いると、図7の場合と同様に分岐命令の分岐予測を行なうことができない。この問題は次のようにすれば解決できる。
【0131】
図8を参照して、命令n−1で$bと$cとの和を計算して$aとし、命令nでこの$aと$dとの一致を判定している。そこで、命令n−1のフェッチ時に$bと$cとを得て、この和と$dとを比較すれば、命令n−1により$aを計算されるのを待たず、命令nの分岐予測を行なうことができる。本実施例の装置はこのような予測も可能な構成となっている。
【0132】
図9は、以上説明した問題を解決するような構成となっている分岐予測回路72のブロック図である。図9を参照して、分岐予測回路72は、大小比較回路80と、一致比較回路82と、マルチプレクサ84、86および92と、反転回路88および90とを含む。
【0133】
大小比較回路80の2つの入力S1およびS2にはそれぞれ、ソースオペランドsrc1およびsrc2が与えられる。マルチプレクサ84の2つの入力にはソースオペランドsrc1と、大小比較回路80の出力とが与えられる。マルチプレクサ84は、図4に示す予測情報デコーダ70から与えられる分岐予測オペレーションに従って入力の一方を選択して出力する。
【0134】
マルチプレクサ86は3入力である。1つの入力にはソースオペランドsrc2が与えられる。他の1つの入力には図4に示す予測情報デコーダ70からの定数データが与えられる。残りの入力にはソースオペランドsrc3が与えられる。マルチプレクサ86は予測情報デコーダ70からの分岐予測オペレーションに応答して、3つの入力のうちのいずれか1つを選択して出力する。
【0135】
一致比較回路82は2つの入力S1およびS2を有する。入力S1はマルチプレクサ84の出力に接続されている。入力S2はマルチプレクサ86の出力に接続されている。一致比較回路82は、入力S1およびS2が一致しているか否かを示す信号を出力するためのものである。
【0136】
反転回路88および90の入力はそれぞれ大小比較回路80および一致比較回路82の出力に接続されている。
【0137】
マルチプレクサ92は4つの入力を有し、その入力はそれぞれ反転回路88の出力と、大小比較回路80の出力と、一致比較回路82の出力と、反転回路90の出力とに接続されている。マルチプレクサ92は分岐予測オペレーションに応答して、4つの入力のうち1つを選択して出力する。この出力が予測信号であり、0の場合にnot−taken 、1の場合にtaken を示す。
【0138】
なお大小比較回路80は基本的には2つの入力S1およびS2の大小を比較してその符号ビットを出力するためのものであるが、分岐予測オペレーションによって、2つの入力S1およびS2の値を加算して結果を出力するようにも動作できる。その詳細については後述する。大小比較回路80は、もともと減算回路を含むので、このような加算処理も可能となる。なお大小比較回路80の出力として、符号ビットのほかに加算または減算結果の絶対値のデータも含まれるが、それらはマルチプレクサ84に符号ビットとともに与えられる。
【0139】
図10を参照して、大小比較回路80は、加算器100と、反転回路102と、マルチプレクサ104と、0または1の定数データを発生する定数発生回路108と、マルチプレクサ104の出力のLSB(最下位ビット)に定数発生回路108の出力を加算するためのLSB加算器106とを含む。
【0140】
もともと大小比較回路80は、src2の2の補数の最下位ビットに1を加算したものをsrc1に加算することにより、src1−src2を計算している。この「反転して最下位ビットに1を加算する」処理を行なわなければ、src1とsrc2との加算が行なえる。大小比較回路80はそのような機能を含ませることにより、2つの入力src1およびsrc2の間の大小比較のみならず加算処理も行なえるようにしたものである。
【0141】
反転回路102の入力にはsrc2が与えられる。マルチプレクサ104の一方入力には反転回路102の出力が、他方入力にはsrc2がそのまま与えられる。マルチプレクサ104は分岐予測オペレーションに応答して2つの入力のいずれか一方を選択して出力する。
【0142】
定数発生回路108は、分岐予測オペレーションに応答して動作し、大小比較を行なう場合には1を、加算処理を行なう場合には0をそれぞれ出力する。
【0143】
LSB加算器106は、マルチプレクサ104の出力する値の最下位ビットに、定数発生回路108の出力を加算するためのものである。
【0144】
加算器100の一方の入力にはsrc1が、他方入力にはLSB加算器106の出力がそれぞれ与えられている。加算器100はこれら2つの入力を加算して少なくとも符号ビットを出力する。前述のように加算器100により符号ビットのみならず他の演算結果も得られる。符号ビットを調べることにより、src1−src2≧0またはsrc1+src2≧0の判定も行なうことができる。
【0145】
図9および図10に示される分岐予測回路72を用いることにより、図5〜図8に示すような各ケースについて、分岐予測を次のようにして行なうことができる。
【0146】
たとえば図5(a)に示されるケースを考える。src1として$dを、src2として$0をそれぞれ入力する。マルチプレクサ84はsrc1を選択して一致比較回路の入力S1に与える。マルチプレクサ86はsrc2を選択して一致比較回路82の入力S2に与える。一致比較回路82は2つの入力の一致比較結果をマルチプレクサ92および反転回路90に与える。マルチプレクサ92は、分岐予測オペレーションにより反転回路90の出力を選択する。これにより上述の(1)(i)のケースの分岐予測が行なえる。なおこの場合大小比較回路80は使用されない。
【0147】
図5(b)に示されるケースでは次のような動作を行なう。src1としては$aを、src2としては$bをそれぞれ与える。図10を参照して、定数発生回路108は1をLSB加算器106に与える。マルチプレクサ104は反転回路102の出力を選択してLSB加算器106に与える。LSB加算器106はマルチプレクサ104の出力の最下位ビットに1を加算して加算器100に与える。加算器100はsrc1とLSB加算器106の出力とを加算してその符号ビットを図9に示されるマルチプレクサ92および反転回路88の入力に与える。マルチプレクサ92は、分岐予測オペレーションに従って大小比較回路80の出力を選択して予測信号として出力する。これにより上述の(1)(ii)の動作を行なうことができる。なお分岐比較命令がbeqの場合には、マルチプレクサ92により反転回路88の出力を選択させるようにすればよい。
【0148】
図6(a)のケースに対処するためには次のようにする。予測フェッチデータとしてsrc1は$dを、src2は$cをそれぞれ与える。マルチプレクサ84はsrc1、マルチプレクサ86はsrc2を選択する。一致比較回路82の出力をマルチプレクサ92により選択して予測信号とする。これにより図6(a)の分岐予測を行なうことができる。なお、分岐命令がbneであれば反転回路90の出力を選択すればよい。これにより、上述の(2)(i)の処理を行なうことができる。
【0149】
図6(b)のケースは次のように対処する。予測フェッチデータとしてsrc1は$aを、src2は予測定数(C2−C1)を選択する。ただしこの場合src2は予測情報バッファ56(図1参照)からの定数データとして与えられるものとする。図9を参照して、マルチプレクサ84はsrc1を選択する。マルチプレクサ86は定数データを選択する。マルチプレクサ92は一致比較回路82の出力を選択する。もしも分岐命令がbneであれば、マルチプレクサ92には反転回路90の出力を選択させる。これにより上述の(2)(ii)の動作を行なうことができる。
【0150】
無条件分岐の場合には、図9に示されるsrc1とsrc2にはそれぞれ$0を与え、マルチプレクサ84はsrc1を、マルチプレクサ86はsrc2をそれぞれ選択するようにする。マルチプレクサ92は一致比較回路82の出力を選択する。一致比較回路82の2つの入力が常に一致するので、予測信号は常にtaken 予測となる。
【0151】
図7に示されるケースには次のように対処する。src1として$bを、src2として$cを与える。図10を参照して、大小比較回路80のマルチプレクサ104はsrc2を選択してLSB加算器106に与える。定数発生回路108は0を発生してLSB加算器106に与える。LSB加算器106はマルチプレクサ104の出力の最下位ビットに定数0を加算して加算器100に与える。すなわちLSB加算器106の出力はsrc2そのものとなる。加算器100はsrc1とsrc2とを加算して符号ビットと絶対値とを出力する。加算器100の出力する符号ビットを調べることにより、src1+src2≧0の判定を行なうことができる。これにより、図7に示されるようなケースでも、命令n−1の完了を待たずに分岐命令nの分岐予測を行なうことができる。すなわち、分岐のオペランドを生成する命令が分岐命令の直前にありレジスタ値を用いた計算を行なう場合でも、分岐命令が0との大小比較であれば予測を行なうことができる。
【0152】
さらに図8に示されるケースについては次のように対処する。図8のケースでは、$b+$c=$dの判定を行なう必要がある。この場合、図10を参照して、マルチプレクサ104はsrc2を選択し、定数発生回路108は0を発生するようにする。すると上述のように加算器100はsrc1とsrc2との加算結果を出力する。すなわちsrc1として$bを、src2として$cを与えれば、加算器100の出力に$b+$cが得られる。
【0153】
図9を参照して、マルチプレクサ84は大小比較回路80の出力($b+$c)を選択する。src3として$dを与え、マルチプレクサ86がsrc3を選択するようにする。これにより一致比較回路82で$b+$c=$dの判定を行なうことができる。マルチプレクサ92により一致比較回路82の出力を選択すれば分岐命令beqの分岐予測を行なうことができ、マルチプレクサ92により反転回路90の出力を選択するようにすれば、分岐命令bneの分岐予測を行なえる。
【0154】
したがって分岐のオペランドを生成する命令が分岐命令の直前にあり、レジスタ値を用いた計算を行なう場合でも、あらゆる分岐命令に対して予測を行なうことができる。すなわち定数または変数と一致、定数または変数との大小比較による分岐命令に対して予測を行なうことができる。
【0155】
なお、図10は、多くの機能を可能とするための構成であり、一部の機能のみを実現するために他の不要な部分を省略可能であることは、当業者には明らかである。
【0156】
ところで、図1および図12に示される予測情報バッファ56の分岐先情報138として、分岐先アドレスそのものを格納させてもよい。しかし、たとえば32ビットアーキテクチャのプロセッサでは分岐先アドレスのビット数は30ビット程度とかなり大きい。予測ヒット率を向上させるためには予測情報バッファ56のエントリ数を増加させればよいと考えられるが、予測情報バッファに保持させる分岐先アドレスのビット長が大きいとバッファの面積が非常に大きくなってしまうという問題がある。そこで次のようにしてバッファの面積の増加を抑えるようにしている。
【0157】
図11を参照して、分岐先情報として分岐先がPC(プログラムカウンタ)相対で指定されるかレジスタ値で指定されるかを選択する情報と、PC相対のときの加算値となる即値またはレジスタ番号を保持させるようになっている。そして分岐先生成回路70は、フェッチアドレスと、分岐先情報に含まれる即値とを加算するための30ビットの加算器120と、分岐先情報に格納されていたレジスタ番号から読出されたレジスタ値が与えられる入力と、加算器120の出力が与えられる入力とを有し、PC相対/レジスタ値選択情報に応答して2つの入力の一方を選択して分岐先アドレスとして出力するマルチプレクサ122とを含む。
【0158】
選択情報がPC相対を指定しているときには、マルチプレクサ122は加算器120の出力を選択する。一方選択情報がレジスタ値を選択している場合には、マルチプレクサ122はレジスタ値を選択する。なおこのレジスタ値は、図12に示される分岐先情報138に格納されていたレジスタ番号により指定されたレジスタから読出された値である。
【0159】
BTBを用いた分岐予測では、BTB読出と予測分岐先設定とを1サイクル内で行なわなければならないので、加算を行ない分岐先を生成する時間はない。したがってBTB方式では分岐先アドレスをBTBにそのまま保持していた。しかし本発明のような分岐予測方式では、予測情報を得てから予測分岐先設定までに1サイクルの時間があるので、30ビット程度の加算は十分に行なうことができる。またレジスタフェッチもできるため、レジスタ指定の分岐命令の場合でも、その分岐先アドレスをレジスタを参照して生成できる。
【0160】
PC相対のオフセットにせよレジスタ番号にせよ即値として十数ビットで済む。分岐先情報138(図12)が、分岐先アドレスをそのまま保持した場合の30ビットから、即値とオペレーションとを合せた十数ビットに抑えることができるので、バッファの各エントリを小さくすることができる。その結果予測情報バッファ56(図1参照)のハードウェア量を減らすことができる。あるいは、予測ヒット率を上げるためにエントリ数を増加しても、ハードウェアの増加量を小さく抑えることができる。
【0161】
以上のように本実施例の分岐予測方式では、過去の履歴情報を予測に用いるのではなく、これから実行する分岐命令が参照するコンディション、あるいはそのコンディションを生成するためのもとになるデータを予測に用いる。本方式ではこのように、分岐方向決定に実際に使用するデータに基づいて予測を行なうため、過去の実行結果と相関がなく、ランダムに分岐方向が変わる分岐命令についても有効に予測を行なうことができる。
【0162】
本方式を従来の履歴に基づいた方式と区別して、データ参照分岐予測方式と呼ぶ。
【0163】
データ参照分岐予測方式の利点は少なくとも2つある。今述べたように、予測においては、分岐命令が実際に使用するデータに基づいた予測処理が行なわれる。したがって過去の実行結果とは相関がない分岐命令に対しても有効な予測を行なうことができる。もう1つのポイントは、あくまで分岐予測であるため、分岐方向を予測するための条件判定に用いる比較は、分岐命令が参照するデータの完全な比較を行なう必要はなく、その一部でよいということである。つまり、図9に示される大小比較回路80や一致比較回路82などは、データのすべての比較を行なう必要はない。たとえばサイクルタイムを延ばさない範囲で比較できるビット数のみを比較すればよい。たとえば符号ビットと下位7ビットのみを比較することが考えられる。これにより、比較時間が短くなるだけではなく、分岐予測のためにデータを供給する専用レジスタファイルも8ビットで済み、その面積を小さく抑えることができる。
【0164】
マクファーリング(McFarling )らによると、完全な比較が必要なのは全比較回数の8%程度であり、これに対して0と比較すればよい処理は56%に上る。0との比較であれば、符号ビットと下位7ビットとを利用した比較のみで十分である。多くのビットを比較しなければ正確な予測が行なえない場合は少ないと考えられるため、データの一部のみを比較しても、かなり有効な予測が行なえることが期待できる。
【0165】
このように符号ビットと下位の複数ビットのみを使用して比較すれば、サイクルタイムを延ばすことなくかなり有効に予測を行なうことが期待できる。しかし、この方式では、上位ビットが予測結果に全く反映されないという問題点もある。上位ビットも何らかの形で比較に反映できれば、より有効な予測が行なえるだろうと考えられる。しかしこの場合にも、サイクルタイムを延ばさないようにする必要がある。
【0166】
そこで本実施例装置では、分岐予測機構が参照し比較に用いる値を、次のような方式で圧縮して比較に用いる。
【0167】
たとえば10進数で256と16とを計算機で比較する場合を考える。これら値は2進表示では「100000000」と「000010000」となる。仮に前述のように符号ビットとたとえば下位7ビットのみを比較すると、256は「00000000」、16は「00010000」となり、256<16となる。ただし符号ビット0が正を表わす。その結果比較結果が誤ることになり、正しい予測結果を得ることができない。
【0168】
そこで本実施例では、図13に示されるように、レジスタファイル52に書込まれるデータを圧縮するための圧縮部156を設け、併せてレジスタ52の中に、本来のレジスタファイルである第1のレジスタファイル152と、圧縮されたデータを格納するための専用のレジスタファイルである第2のレジスタファイル154とを設け、圧縮部156により圧縮されたデータをレジスタファイル154に格納することにした。
【0169】
図13を参照して、レジスタファイル152および154にはデコーダ150が接続され、併せて制御信号が与えられる。デコーダ150は、レジスタ番号が与えられると、レジスタファイル152および154の該当するレジスタ行をデータ線158に接続する。データ線158は、src1用の32本のデータ線と、src2用の32本のデータ線と、src3用の32本のデータ線とからなる。これらデータ線は分岐して圧縮部入力160となり、圧縮部156への入力となっている。圧縮部156からは圧縮部出力162が出ており、レジスタファイル154の入力に接続されている。レジスタファイル154からの出力は、データ線158の一部のデータ線に出力データ線164を介して接続されている。
【0170】
図13に示されるレジスタファイルは次のように動作する。レジスタファイル152への書込は次のとおりである。デコーダ150にレジスタ番号が与えられる。制御信号により、レジスタファイルの各レジスタセルを、src1、src2、src3のどのデータ線と接続するか、およびデータの入出力のいずれが選択されるかの情報がレジスタファイル152に与えられる。レジスタファイル152の、デコーダ150により選択されたレジスタセル行の各レジスタが、対応のデータ線に接続され、データの入出力が行なわれる。
【0171】
レジスタファイル154へのデータの書込は次のように行なわれる。データ線158上のsrc1、src2、またはsrc3のためのデータ線に、書込のためのデータが出力される。圧縮部156はこのデータを圧縮し、レジスタファイル154に与える。レジスタファイル154の、デコーダ150によって選択されたレジスタセル行の各レジスタセルは、制御信号に従ってsrc1、src2、またはscr3のデータ線に接続され、データを格納する。
【0172】
データの読出では逆に、レジスタファイル154のあるレジスタ行をデコーダ150によって選択し、データ線164を介してデータ線158上に出力する。この場合レジスタファイル154に格納されているデータが圧縮済みのデータであるので、データ線158上に出力されるのも圧縮されたデータである。
【0173】
仮に、予測情報のためのデータを圧縮せずに一部のみをレジスタファイル154に格納するのであれば、圧縮部156は不要である。その場合はたとえばデータの符号ビットと下位7ビットとをレジスタファイル154に導き、レジスタファイル154の出力は同じくデータ線158の符号ビットと下位7ビットのデータ線に導けばよい。もちろん使用されるビットは符号ビットと下位7ビットとには限定されず、他のビットを用いてもよい。
【0174】
この実施例では、レジスタファイル154に格納する前にデータの圧縮を行なっている。これは、分岐予測機構の負荷を軽くし、また分岐予測のために必要なレジスタファイルの容量も減らすためである。もちろん、レジスタファイルには圧縮前のデータをすべて書込み、読出後に圧縮してもよい。その場合には専用のレジスタファイル154を設ける必要はなく、レジスタファイル152に書込めばよいが、分岐予測機構の負荷が重くなるという欠点がある。
【0175】
圧縮の方法としては、図14に示されるような方法が考えられる。図4(a)に示される例では、最上位ビット(ビット31)はそのまま使用し、ビット30〜ビット8については、8ビットごとに論理和をとって1ビットとする。最下位のビット7〜0についてはそのまま使用する。これにより、符号の1ビット+圧縮後の3ビット+最下位8ビットの合計12ビットにデータを圧縮できる。これにより256と16との比較も、256=「000100000000」、16=「000000010000」となり、256>16という正しい結果を得ることができる。
【0176】
このほかにも様々なビット数のまとめ方が存在する。図14(b)〜(d)にその例を示す。いずれの場合も、符号ビット(ビット31)と下位の複数ビットとはそのまま使用し、間のビットについて何ビットかの単位で論理和をとることにより比較結果に反映させる。
【0177】
このようにすることにより、比較するビット数をあまり増やさずに、かつ上位ビットの値もある程度比較結果に反映させることができるので、より高い分岐予測のヒット率を得ることができる。
【0178】
このようなデータ参照予測方式では、レジスタ番号などのハードウェアを指定する情報を分岐予測機構に供給し、分岐予測機構がその情報をもとに実行結果を読出して分岐予測を行なう。この場合予測に必要なハードウェア指定情報を命令によって供給することもできるが、そうした場合には情報を供給する命令の位置を分岐命令に対して固定しなければならない。すなわちスケジューリングに制限を与えてしまう。あるいは、命令に新たなフィールドを設ける必要がある。
【0179】
そこで本実施例では、分岐予測に使用する情報はレジスタファイルなどのハードウェアが保持し、参照すべきデータを保持するそのハードウェアを指定する情報(レジスタ番号など)をバッファが保持することとしている。この方式を間接方式と呼ぶ。これにより、命令の位置を固定したり、命令に新たなフィールドを設けることなく、分岐予測機構に対してハードウェアを指定する情報を供給することができる。
【0180】
こうした問題は履歴による分岐予測を行なう場合でもあり得る。すなわち、分岐先をレジスタ値により設定するレジスタ相対分岐命令の場合、分岐先が変化する。そのため分岐方向の予測が一致していたとしても、分岐予測がミスヒットになってしまう可能性がある。その場合でも、分岐先アドレスをあるハードウェアに格納しておき、そのハードウェアを指定する情報を分岐予測機構に供給することで、分岐先アドレスが変化しても正しい分岐先アドレスを得ることができる。すなわち、このようにハードウェアを指定する情報を分岐予測機構に与えるという考えは、データ参照予測方式のみに適用可能なだけではなく、履歴による分岐予測とも組合わせて使用することができる。
【0181】
[第2の実施例]
第1の実施例に示したデータ参照分岐予測方式は、分岐命令が実際に用いるデータを、分岐命令の前にフェッチされる命令と同じタイミングで得て、そのデータに基づいて分岐予測を行なうので、過去の実行履歴と相関のない分岐命令についても有効な予測を行なうことができる。しかし、予測に用いるデータが予測を行なう時点に間に合わないような条件分岐命令もあり得る。そうした場合にはデータ参照分岐予測方式では有効な予測を行なうこができない。
【0182】
そこでこの第2の実施例では、上述したような命令に対しては、データ参照予測情報の代わりに履歴情報を保持させ、さらに分岐予測機構に履歴による予測を行なうハードウェアを用意して、履歴による予測も行なえるようにしている。
【0183】
図15は、この第2の実施例の分岐予測装置の概略のブロック図である。図15を参照してこの装置は、予測情報バッファ170と、データ参照による分岐予測機構58と、レジスタファイル52と、履歴による分岐予測機構172と、マルチプレクサ174とを含む。データ参照による分岐予測機構58およびレジスタファイル52は、図1に示す第1の実施例の分岐予測機構およびレジスタファイル58および52と同様のものである。
【0184】
履歴による分岐予測機構172は、従来の技術で説明したディレイドスロット方式またはBTB方式による分岐予測機構である。BTBを予測情報バッファ170の中に設けてもよいし、別個に設けてもよい。
【0185】
予測情報バッファ170の各エントリの構成を図16に示す。図16を参照してエントリ180は、図12に示した、第1の実施例の予測情報バッファエントリ130と同様であるが、予測方式ビット182を新たに含む。予測方式ビットは、予測方式を指定するビットである。図15に示されるように、予測情報バッファ170はこの予測方式ビットをマルチプレクサ174に与えることにより、履歴による分岐予測機構172の出力する予測と、データ参照による分岐予測機構58の出力する予測とのいずれか一方を選択する。
【0186】
予測情報バッファ170への登録は次のようにして行なわれる。分岐命令が実行されると、その予測を履歴によるまたはデータ参照による分岐予測機構のいずれで行なうかを決定し、決定結果に従って予測情報バッファの予測情報フィールドに情報の登録を行なう。データ参照予測方式が適用できない場合には予測情報フィールドの予測方式ビットを履歴予測にセットし、分岐の実行結果(履歴情報)を予測情報に登録し、更新する。データ参照予測方式が適用できる場合には、予測方式ビットをデータ参照予測方式にセットし、予測フェッチデータのレジスタ番号、分岐予測オペレーションその他を予測情報として登録、更新する。
【0187】
予測は、次のように行なわれる。命令フェッチの際のアドレスに基づいて予測情報バッファ170から予測情報が読出されると、履歴による分岐予測機構172およびデータ参照による分岐予測機構58がそれぞれ予測を行ない、予測結果をマルチプレクサ174に与える。マルチプレクサ174は予測情報バッファ170から出力される予測方式ビットに従って、いずれかの予測結果を選択する。
【0188】
予測方式ビットと、予測情報バッファとの関係を示したものが図17である。
このようにデータ参照予測方式で対応できない条件分岐に対して、履歴を用いた予測を行なうことによって、分岐予測のヒット率を上げることができる。
【0189】
[第3の実施例]
以上の実施例では、予測情報をバッファにより供給していた。そのため、情報を保持するための専用のハードウェアが必要となる。高い予測ヒット率を得るためには、バッファのヒット率を上げることが有効であるが、そのためにはバッファ内に多数のエントリを準備する必要が生ずる。そのために、予測情報バッファのハードウェア量は多くなる。こうしたハードウェアはできるだけ増加させない方が望ましい。この第3の実施例は、予測情報バッファを用いず予測情報を供給することにより、ハードウェアの増加を回避している点に特徴がある。そのためにこの第3の実施例では、命令中に、通常の命令のほかにその命令の次に実行する分岐命令の予測情報を格納するためのフィールドを設け、それに基づいて分岐予測を行なっている。
【0190】
図18を参照して、この第3の実施例の分岐予測装置は、分岐予測機構58と、レジスタファイル52と、命令キャッシュ184と、命令パイプライン50とを含む。分岐予測機構58と、レジスタファイル52と、命令パイプライン50とは、第1の実施例における対応の参照符号を有する要素と同様のものである。命令キャッシュ184は、命令の中から通常の命令コードのみを命令パイプライン50に与え、命令中の予測情報のフィールド内の情報を予測情報として分岐予測機構58に与えるようになっている。
【0191】
図19を参照して、命令190は、通常の命令フィールド192と予測情報のフィールド194とを含む。
【0192】
予測情報のフィールド194は、予測ビット196と、分岐情報198と、分岐先情報200とからなる。
【0193】
予測ビット196は分岐予測を行なうどうかを示す。分岐情報198は前述したような予測オペレーションの内容、使用するレジスタのレジスタ番号などを示す。分岐先情報200は分岐先アドレスを示す。あるいは分岐先情報200は、PC相対分岐時のオフセットなどの即値を格納していてもよい。
【0194】
予測情報のフィールド194の内容は、プログラムのコンパイル時にコンパイラによって設定される。分岐命令の前の命令(これを「予測を行なう命令」と呼ぶ)に対しては、その予測ビット196をセットし、分岐の処理に従って分岐情報198および分岐先情報200を設定する。予測を行なわない場合には予測ビット196をリセットする。
【0195】
分岐予測機構58では、予測情報内の予測ビット196を参照して、セットされていれば分岐情報に従って予測を行なう。
【0196】
この例では、予測情報のフィールドはすべての命令に設けているものと想定している。しかし本発明はこれには限定されず、予測情報のフィールドを一部の命令に限定して設けてもよい。たとえば比較命令や加算命令の一部などである。その代わりにスケジューリングに制限を与え、分岐命令の前の予測を行なう位置には、それら予測情報のフィールドを設けた命令を配置するようにすることも考えられる。
【0197】
この第3の実施例によれば、分岐予測情報を供給するための余分なハードウェアを設ける必要がないという効果がある。また、予測情報バッファを設けた場合と異なり、予測情報は必ず命令から供給される。したがって、予測情報バッファを用いた実施例において、予測情報バッファのヒット率が100%の場合と同じ的確性で分岐予測を行なうことができるという効果がある。
【0198】
[第4の実施例]
予測情報を予測情報バッファにより供給する方式は、情報を保持するための専用のハードウェアが必要となる。また第3の実施例のように命令内に予測情報のフィールドを設ける場合には、命令セット自体を変える必要がある。また命令のビット幅が多くなる可能性がある。こうしたことはできるだけ避ける方が望ましい。そこでこの第4の実施例では、フェッチアドレスで示される命令のフェッチと同時に次の命令をフェッチし、2番目の命令が分岐命令である場合には、フェッチした2つの命令から分岐予測情報を得て分岐予測を行なうこととしている。フェッチした1番目の命令は通常どおりパイプラインに投入される。
【0199】
図20を参照してこの第4の実施例に係る分岐予測装置は、分岐予測機構212と、レジスタファイル52と、命令パイプライン50と、命令キャッシュ210とを含む。命令パイプライン50およびレジスタファイル52は、第1の実施例における命令パイプライン50とレジスタファイル52と同様のものである。
【0200】
図21を参照して、図20の分岐予測機構212は、命令キャッシュ210から2つの命令を得て、2番目の命令が分岐命令である場合には、フェッチした2つの命令から分岐予測オペレーションと、定数と、分岐先情報となどを生成して出力するための分岐予測情報生成回路222と、分岐予測情報生成回路222の出力に基づき、必要であればレジスタファイル52を参照するためのレジスタ番号を出力し、レジスタファイル52からレジスタ値を得て、さらに命令パイプライン50から予測ミス情報を得て分岐予測を行なうための分岐予測回路部220とを含む。
【0201】
この第4の実施例の分岐予測装置は次のように動作する。各サイクルでフェッチアドレスで示される命令とその次の命令との2つを命令キャッシュ210からフェッチする。最初の命令(命令i)は命令パイプライン50に投入して通常の処理を行なうとともに、分岐予測機構212にも与える。2番目の命令i+1は、命令パイプライン50には投入せずに分岐予測機構212にだけ与える。
【0202】
分岐予測機構212の分岐予測情報生成回路222は、2番目の命令が分岐命令かどうかの判定を行なう。分岐命令であればその分岐の種類、分岐のオペランドと1番目の命令の種類、オペランドの情報などから分岐予測オペレーション、定数データ、分岐先情報などを生成して分岐予測回路部220に与える。分岐予測回路部220は、既に述べた分岐予測回路部と同様の方式で分岐予測を行なう。
【0203】
たとえば図22に示されるような命令コードを実行する場合を考える。サイクルn−2では命令i−2と命令i−1とをフェッチして、命令i−2を命令パイプラインに、命令i−2と命令i−1とを分岐予測機構に投入する。命令i−1が分岐命令ではないので、このサイクルでは予測は行なわない。
【0204】
続いてサイクルn−1では命令i−1と命令iとをフェッチする。命令i−1は命令パイプラインに、命令i−1と命令iとは分岐予測機構に投入される。分岐予測機構内の分岐予測情報生成回路222は、命令iが分岐命令であることを認識し、以下のような予測情報を生成する。なおこの予測情報は、図22に示されるような命令およびオペランドに基づいて生成されるものである。
【0205】
予測フェッチデータとしてはsrc1=$b、src2としては$cが選ばれる。分岐予測オペレーションは「大小比較結果を出力」となる。分岐予測回路部220はこの予測情報に基づいて予測を行なう。
【0206】
この第4の実施例では、予測情報を通常のコードから実行時に生成する。予測情報を保持するための予測情報バッファなど特別のハードウェアを用意する必要がなく、命令コードも従来のものが使用できるという効果がある。
【0207】
[第5の実施例]
第4の実施例では、分岐予測情報を2つの命令から実行時に生成する。しかし、こうした情報は命令のコンパイル時に既に得られるものである。したがって、分岐予測情報を保持する命令を新たに用意して、コンパイル時にその命令を命令コード中の適切な位置に配置することが考えられる。この第5の実施例はそのような方式を用いて分岐予測情報を命令から得て分岐予測を行なう。
【0208】
図23を参照して、分岐予測命令230を新たに設け、オペコード232と、分岐情報234と、分岐先情報236とを含ませる。オペコード232は分岐予測命令を示すコードである。分岐情報234は予測オペレーションやレジスタ番号などを示す。分岐先情報236は分岐先アドレスなどである。
【0209】
コンパイラは、分岐の処理に従ってこの分岐予測命令の予測情報を設定し、予測を行なう位置に分岐予測命令をスケジューリングする。
【0210】
実行時に命令キャッシュから読出された命令は、命令パイプラインと分岐予測機構とに同時に投入される。分岐予測機構では、分岐予測命令を認識すると、その分岐情報に従って予測を行なう。
【0211】
この場合、第4の実施例の図21に示される分岐予測情報生成回路222に代えて、1つの命令から分岐情報および分岐先情報を抽出して分岐予測回路部220に与える回路を設ければよい。
【0212】
この実施例では、命令セット中の従来の命令については変更する必要がなく、新たな命令を追加するだけでよい。命令のビット幅が多くなることもない。また、分岐予測情報を供給する余分なハードウェアを用意する必要もないという効果がある。
【0213】
なお、以上の実施例では分岐予測は命令パイプライン50とは独立した命令予測機構の中で行なわれていた。しかし分岐予測機構の中での演算は、命令パイプライン50を利用しても使用できる。そこでたとえば、複数個の演算処理装置によって並列に演算処理を行なう命令パイプラインであれば、そのうちの使用されていない演算処理装置を利用して分岐予測処理を行なうこともできる。この場合、分岐命令の前にフェッチする命令と、その命令のアドレスで予測情報バッファから得られた予測情報とを同時に命令パイプラインに投入してそれぞれ別個の演算処理装置で演算処理させればよい。
【0214】
[第6の実施例]
予測情報バッファへの登録は分岐命令の実行によりなされる。したがってすべての分岐は、最初にそれらが実行されるときには予測を行なうことはできない。また、予測情報バッファのエントリ数が十分用意されていない場合には、登録されていた分岐の情報が別の分岐の実行によりエントリ置換され、再度分岐が実行されるときに情報が登録されていない事態が生ずる可能性がある。その場合には予測が行なえない。また、分岐命令によっては、予測のために参照するデータが間に合わず、データ参照予測方式では対応できない場合もあると考えられる。
【0215】
この第6の実施例の分岐予測装置では、そうした問題を解決するために、データ参照分岐予測を静的分岐予測と組合わせて用いる。従来、データ参照による分岐予測機構を用いた分岐予測装置は存在しておらず、したがって、このように静的分岐予測機構とデータ参照による分岐予測方式とを組合わせて用いるものについても文献には記載がない。
【0216】
図24を参照して、この第6の実施例の分岐予測装置は、予測情報バッファ240と、静的分岐予測機構242と、データ参照による分岐予測機構58と、レジスタファイル52と、マルチプレクサ174とを含む。データ参照による分岐予測機構58およびレジスタファイル52は、第1の実施例で述べた分岐予測機構58およびレジスタファイル52と同様である。
【0217】
静的分岐予測機構242は、たとえば前述の第3〜第5の実施例で説明した予測方式のいずれかを用いればよい。マルチプレクサ174は、以下に述べるように命令中に準備される予測方式ビットに応答して、静的分岐予測機構242またはデータ参照による分岐予測機構58による予測を選択する。
【0218】
図25を参照して、この第6の実施例で用いられる命令250は、命令フィールド252と予測情報フィールド194とを有する。予測情報フィールド194には、静的予測を行なう場合の予測情報が、予めコンパイラにより設定されている。
【0219】
命令フィールド252は、通常の命令フィールド254と、予測方式選択ビット256と、静的予測ビット258とを含む。
【0220】
予測方式選択ビット256は、静的予測とデータ参照予測とのどちらを行なうかを選択するための情報である。静的予測ビット250は、静的分岐予測を行なうときの情報である。なお、静的予測時の予測分岐先を求めるための分岐先情報は、上述の第3の実施例〜第5の実施例のいずれの方式を用いてもよい。
【0221】
コンパイラが分岐すると予測した分岐命令に対しては、その分岐命令に対するバッファが参照されるタイミングと同時にフェッチされる命令の静的予測ビットに、静的分岐予測を行なうときの情報を設定する。さらに、静的予測をデータ参照予測よりも優先して行なう場合には、その予測方式選択ビットをセットする。
【0222】
この第6の実施例の装置は次のように動作する。
(1)フェッチした命令の予測方式参照ビットがセットされている場合、静的予測ビットに基づいて予測を行なう。
【0223】
(2) 予測方式ビットがリセットされている場合には、バッファに予測情報が登録されているか否かに従って次のような動作を行なう。
【0224】
(i) バッファに予測情報が登録されている場合、データ参照予測方式を用いて分岐予測を行なう。
【0225】
(ii) バッファに予測情報が登録されていない場合、静的予測ビットを参照して、それに基づいて分岐予測を行なう。
【0226】
この第6の実施例の静的分岐予測において、第3の実施例のような予測方式を用いた場合、図19に示される予測情報のフィールド194内の、分岐方向を予測するために使用する分岐情報198(予測オペレーション、レジスタ番号)を、命令からではなく、予測情報バッファを用いたデータ参照方式より得ることができる。したがって、図19の分岐情報198を省略できる。
【0227】
しかしこのためには、これらの情報を分岐命令の実行後に予測情報バッファに登録しておく必要がある。この登録は分岐命令の実行ごとに次のような処理により行なわれる。
【0228】
(1) 予測方式参照ビットがセットされている場合、予測情報バッファへの登録は行なわない。
【0229】
(2) 予測方式参照ビットがリセットされている場合、予測情報を予測情報バッファに登録する。
【0230】
この実施例では、すべての分岐につき、最初に実行されるときも含めて予測を行なうことができる。また、バッファのエントリ数が十分用意されておらず、登録していた分岐の情報がバッファから失われている場合にも、静的予測によりある程度有効な予測ができる。また、データ参照予測方式では対応できないような分岐命令に対する分岐予測もある程度有効に行なえる。その結果、分岐予測のヒット率を向上させることが期待できる。
【0231】
[第7の実施例]
PC(プログラムカウンタ)相対の分岐命令とは、分岐先をPC+即値で計算する分岐命令である。通常の分岐先アドレスは、32ビットアーキテクチャでは30ビット程度である。しかし即値では十数ビットであり、したがってこの即値を使用して分岐予測を行なうことができれば、予測情報バッファの各エントリを小さくすることができ、そのハードウェア量を減らすことができると考えられる。この第7の実施例はそのような分岐先の予測を行なうためのものである。なお、分岐予測は、分岐方向の予測と、分岐先の予測との2つに分けることができ、それぞれの項目は独立している。既に述べたように分岐方向の予測には、履歴方式とデータ参照方式とがある。そのいずれともこの第7の実施例に示される分岐先の予測方式を組合わせて使用することが可能であることに注意されたい。
【0232】
図26を参照して、この分岐予測装置は、予測情報バッファ280と、分岐方向予測機構278と、ラッチ回路280と、マルチプレクサ286と、プログラムカウンタ(PC)288と、インクリメンタ290と、予測分岐先計算器282と、マルチプレクサ284とを含む。
【0233】
予測情報バッファは複数の予測情報エントリ272を含む。各エントリ272は、分岐方向予測情報274と分岐予測情報(即値からなる)276とを含む。
【0234】
マルチプレクサ286には、再フェッチアドレスとマルチプレクサ284の出力である予測フェッチアドレスとが与えられる。マルチプレクサ286は、分岐予測ヒット判定情報に応答して再フェッチアドレスと予測フェッチアドレスとのいずれか一方を選択してPC288に設定する。
【0235】
インクリメンタ290は、PC288の値に通常の命令のビット幅を加算することによりフォールスルーアドレスを計算してマルチプレクサ284に与える。
【0236】
分岐方向予測機構278は、前述のように履歴によるものでも、データ参照によるものでもどちらでもよいが、分岐方向予測情報274に従って分岐方向の予測を行なう。予測方向はマルチプレクサ284の制御入力に与えられる。
【0237】
予測分岐先計算機282は、一旦ラッチ回路280にラッチされた分岐予測情報276の即値とPC288の内容とを加算して予測分岐先アドレスを生成し、マルチプレクサ284の他方の入力に与える。
【0238】
マルチプレクサ284は、与えられた予測方向に従って、分岐する場合には予測分岐先アドレスを、分岐しない場合にはフォールスルーアドレスをそれぞれ選択して予測フェッチアドレスとして出力する。この出力は再びマルチプレクサ286に与えられる。
【0239】
分岐予測情報の即値は、分岐先をPC+即値で計算するPC相対の分岐命令が実行された場合に、登録される。
【0240】
バッファの登録と予測分岐先アドレスの計算方法であるが、予測情報バッファ270を読出すタイミングにより次のような場合に分けられる。
【0241】
(1) バッファ読出と予測分岐先計算が1サイクルで行なえる場合(図27)
この場合、分岐命令と同じタイミングでフェッチされるアドレスを用いてバッファに分岐予測情報の即値を登録する。予測時には、バッファの読出を行なったアドレスは、分岐命令のアドレスと一致している。したがって、バッファ読出後、読出された即値をオフセットとして、PC+オフセットで予測分岐先を求め次の命令をフェッチする。この状態が図27のサイクル2の矢印で示されている。
【0242】
(2) バッファ読出と予測分岐先計算を別のサイクルで行なう必要がある場合(図28)
バッファの読出および予測分岐先生成の加算に時間がかかり、1サイクルで終えることができない場合もある。この場合、予測分岐先アドレスを生成する時間を考慮して、分岐命令よりも1サイクル前にバッファの読出を行なう必要がある。このバッファの読出を図28のサイクル▲1▼に示す。このとき一緒にフェッチされる命令は分岐命令の1つ前(PC−1)のアドレスである。
【0243】
すなわちバッファを読出したアドレスは、分岐命令の前の命令のアドレスである。そしてバッファ読出がサイクル▲2▼の半ばで終了し、このとき分岐命令のフェッチが行なわれる。したがって、サイクル▲2▼の後半で、分岐命令のアドレス(PC)を得て、これに対してバッファから読出された即値を加算して予測分岐先を計算する。この予測分岐先アドレスに従って、サイクル▲3▼の半ばで予測分岐先の命令をフェッチする。
【0244】
上述の場合、プログラムカウンタが変化することを考慮して、分岐計算のタイミングを定めている。しかし別の方法として、予測情報バッファへの即値の登録時に、分岐命令のアドレスとの差を予め即値に加えておいて登録を行なう方法も考えられる。
【0245】
なお、データ参照予測を行なう場合にも、予測情報バッファは分岐命令がフェッチされるよりも早いサイクルで読出される。したがって、データ参照予測を行なう場合には、こうした読出タイミングのずれを考慮して予測分岐先の計算を行なう必要がある。
【0246】
この第7の実施例では、予測情報バッファが保持する分岐先情報が、プログラムカウンタ相対の分岐先計算に使用される即値となる。即値は十数ビットのビット幅であり、通常の32ビットアーキテクチャの分岐先アドレスの30ビット程度と比較してかなり小さくなる。したがって、予測情報バッファの各エントリを小さくすることができ、予測情報バッファ全体のハードウェア量を減らすことができる。あるいは、予測情報バッファのハードウェア量を減らさない場合には、分岐予測のヒット率を高めることが期待できる。
【0247】
[第8の実施例]
第7の実施例に述べたPC相対分岐命令に加え、レジスタから読出したデータを予測分岐先とすることができれば、前に述べた間接方式と同様により便利である。この第8の実施例はPC+即値またはレジスタから読出したデータによって予測分岐先を求めることができる。
【0248】
図29に、予測情報バッファのエントリ300の構成を示す。図29を参照して、各エントリ300は、分岐方向予測情報302と、分岐オペレーションビット304と、即値またはハードウェア指定値(レジスタ番号など)306とを含む。分岐方向予測情報302は、既に述べたとおり分岐方向を予測するための予測オペレーション、レジスタ番号などである。分岐オペレーションビット(1ビット)は、予測分岐先アドレスを計算する際の計算方法を特定するための情報である。この実施例の場合にはPC相対とレジスタ参照との2つの方式であるので、このビットは1ビットでよい。即値またはハードウェア指定値306は、PC相対の分岐命令の場合には即値であり、レジスタ参照の分岐命令の場合には、分岐先アドレスを格納したレジスタ番号である。もちろん分岐先アドレスを格納したハードウェアとしてはレジスタファイル内のレジスタに限らず、ALU内のレジスタなどであってもよい。
【0249】
図30を参照して、この実施例の分岐予測装置は、予測分岐先計算器314とマルチプレクサ316とを含む。予測分岐先計算器314は、プログラムカウンタ310の内容と、即値/ハードウェア指定値306の内容とを加算してマルチプレクサ316に与える。即値/ハードウェア指定値306がハードウェア指定値(レジスタ番号)の場合には、レジスタファイルまたはALU312から、対応するレジスタのレジスタ値がマルチプレクサ316の他方の入力に与えられる。マルチプレクサ316は、分岐オペレーションビット304に応答して予測分岐先計算器314の出力またはレジスタファイルもしくはALU312のレジスタからの出力のいずれか一方を選択して予測分岐先アドレスとして出力する。
【0250】
予測情報バッファへの登録は、分岐命令の実行によって行なわれる。分岐命令がPC相対である場合、分岐先情報として即値を登録し、分岐先オペレーションビットをセットする。分岐命令がレジスタ参照によるものである場合には、分岐先情報としてはレジスタ番号を登録し、分岐先オペレーションビットをリセットする。
【0251】
予測時には、バッファを読出し、図30に示されるように分岐先オペレーションビットがセットされていればPC+即値により、リセットされていればハードウェア指定値306により指定されるレジスタから読出したアドレスを予測分岐先アドレスとする。
【0252】
この第8の実施例によれば、PC+即値によるPC相対の分岐命令だけでなく、レジスタ参照による分岐命令に対しても、分岐先アドレスの予測を行なうことができるという効果がある。
【0253】
[第9の実施例]
以上述べた実施例のうち、分岐先情報として変位を保持する方式における予測情報のバッファ(BTB)のエントリの登録は次のように行なわれている。図31を参照して、たとえば命令キャッシュのアドレスt−1に命令t−1が、アドレスtに分岐命令bが、それぞれ格納されているものとする。分岐命令bの分岐予測に必要な情報は、分岐予測に必要な情報が1サイクルで済むのであれば、分岐命令bのアドレスの1つ前、すなわちアドレスt−1に格納されている。つまり、BTBのアドレスt−1に分岐命令bの分岐予測情報が格納されている。
【0254】
このようにして分岐予測情報がBTBに登録されているので、分岐予測を次のように行なうことができる。命令キャッシュから命令t−1がフェッチされるときに、そのアドレスt−1によってBTBをアドレス指定することにより分岐命令bの情報が読出される。そして分岐命令bの次の命令のフェッチまでに分岐命令bの分岐予測を行なう。
【0255】
もちろん図31に示されるのは、分岐予測に必要な処理が1サイクルで済む場合である。分岐予測に必要な処理が2サイクルかかるのであれば、分岐命令b(アドレスt)の分岐予測情報はBTBのアドレスt−2となる。ところが、このように分岐命令のための分岐予測情報が、その分岐命令のアドレスよりも所定数前のBTBアドレスに静的に登録されている場合、次のような問題が生ずる。
【0256】
図32を参照して、アドレスnに分岐命令aが存在する場合を考える。この分岐命令aの実行の結果制御が分岐命令bに移行するものとする。この場合、分岐命令bの1サイクル前にフェッチされる命令は、命令t−1ではなく分岐命令aである。したがって分岐命令bの1サイクル前に命令がフェッチされるときのBTBアドレスはnとなる。BTBのアドレスnに格納されているのは、上述の方法に従えば、命令キャッシュのアドレスn+1に格納された命令n+1のための分岐予測情報である。この分岐予測情報に従って分岐命令bの分岐予測を行なったとしても、正しい予測結果を得ることはできない。このように、ある分岐命令の分岐先にさらに他の分岐命令がある場合、上述の方法では、2番目の分岐に対する予測情報を得ることができず、その結果正しい分岐予測が行なえないという問題点が生ずる。
【0257】
第9の実施例は、このような問題点を解消するためのものである。
図33を参照して、この第9の実施例の分岐予測装置は、命令パイプライン50と、レジスタファイル52と、予測情報バッファ56と、分岐予測機構58と、命令キャッシュ60とに加え、分岐予測機構から出力される命令フェッチのアドレスを、一時的に、かつ3サイクル分だけ順次記憶して先入れ先出し方式に従って出力するFIFOメモリからなるBTB登録アドレス用レジスタ340と、命令フェッチアドレスと、BTB登録アドレス用レジスタ340との2つが与えられ、命令パイプライン50から与えられる書込/読出制御信号(BTB読出/書込)が予測情報バッファ56の更新要求を示す値になったことに応答して、BTB登録アドレス用レジスタ340の出力を予測情報バッファ56に与え、そうでない場合には現在の命令フェッチのアドレスを予測情報バッファ56に与えるためのセレクタ342とを含む。
【0258】
命令パイプライン50、レジスタファイル52、予測情報バッファ56、分岐予測機構58および命令キャッシュ60は、図1に示す第1の実施例の分岐予測装置に示すものと同様である。したがってここでは、それらについての詳細は繰返さない。図33に示す各ブロックが図1に示すブロックと異なるのは、命令パイプライン50から出力される予測情報が直接予測情報バッファ56に与えられることである。またセレクタ342に与えられる読出/書込制御信号は、命令パイプライン50から予測情報バッファ56に与えられるものと同様である。
【0259】
BTB登録アドレス用レジスタ340の段数は、分岐予測に必要な処理によって異なってくる。たとえば本実施例の場合には、アドレスiにおける分岐命令のフェッチ開始から2サイクルの終りに、その分岐先と予測のヒットまたはミスが判明する。したがってBTB登録アドレス用レジスタ340は3段である。
【0260】
図33に示される分岐予測装置は、次のように動作する。通常の分岐予測ではセレクタ342はフェッチアドレスを選択して予測情報バッファ56に与える。予測情報バッファ56は、与えられたアドレスから予測情報を分岐予測機構58に対して出力する。
【0261】
分岐予測がはずれた場合、セレクタ342はBTB登録アドレス用レジスタ340の出力を選択して予測情報バッファ56に与える。予測情報バッファ56は、命令パイプライン50から与えられる予測情報を、セレクタ342から与えられるアドレスに格納する。BTB登録アドレス用レジスタ340は、分岐予測が行なわれ、かつその分岐予測のヒットまたはミスが判明した分岐命令のアドレスの1つ前にフェッチされた命令のアドレスを出力している。したがって予測情報バッファ56に格納される予測情報のアドレスは、分岐命令の1つ前にフェッチされたアドレスである。すなわち、予測情報バッファ56に格納される予測情報のアドレスは、当該分岐命令の静的に1つ前のアドレスではなく、1つ前に実行された命令のアドレスという意味で動的に1つ前のアドレスとなる。
【0262】
図34を参照してこの場合、次のような効果が生ずる。アドレスnの分岐命令aがフェッチされると同時に、BTBのアドレスnの予測情報もフェッチされる。フェッチされるBTBの内容が、当初は分岐命令bの予測情報とは無関係な情報であるとする。
【0263】
この場合分岐命令aの実行の結果制御が分岐命令bに移行したものとする。分岐命令bの実行の結果、その分岐先がわかる。一方でBTBから読出された予測情報による予測結果のヒットまたはミスも判明する。今述べたような状況では分岐命令bの分岐予測はミスとなる。したがってこの場合、BTBのアドレスnに分岐命令bのための予測情報が書込まれることになる。
【0264】
次に分岐命令aがフェッチされた場合、BTBから同時にフェッチされる情報は、分岐命令bのための予測情報である。分岐命令aの実行の結果制御が分岐命令bに分岐した場合、BTBから読出された予測情報により予測された分岐先がヒットする確率は、分岐命令bの静的に1つ前のアドレスから分岐命令bの予測情報を読出した場合と同様に高くなる。その結果、分岐命令aの分岐先にさらに分岐命令bが存在した場合でも、以後の分岐命令bの分岐予測がヒットする可能性は高くなる。またミスヒットが生ずる度に、分岐命令の動的に1つ前にフェッチされた命令のアドレスにその分岐命令の予測情報が書込まれるので、一旦ミスが生じた後は、当該分岐命令の分岐予測がヒットする確率は上述の実施例に比べて高くなる。特に、動的に1つ前にフェッチされる命令アドレスに従ってBTB登録を行なうため、ある分岐命令の分岐方向に偏りがあり、同じ命令コードが繰返しフェッチされる場合、その分岐先に存在する分岐命令に対しても正しい予測情報を得ることができる。
【0265】
以上この発明を実施例に基づいて説明したが、本発明はこれらの実施例に限定されるわけではなく、特許請求の範囲で規定される範囲内で、種々の変形を行なって実施することが可能である。特に、以上の実施例では1度に1つの命令を実行できるコンピュータにおける分岐予測処理について説明した。しかし本発明はそのようなコンピュータのみに限定される訳ではなく、1度に複数の命令をフェッチできるいわゆるスーパースカラコンピュータでの分岐予測処理にも適用できることは、当業者には自明である。
【0266】
【発明の効果】
以上のように請求項1に記載の発明によれば、分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給し、その予測情報に従って分岐予測が行なわれる。予測のための時間に余裕があるので、必要であれば演算結果を格納する手段から分岐予測に必要な情報、たとえば実際に分岐命令が分岐を行なう際に参照する情報を読出し、または分岐のためのコンディションを設定する命令がその計算に使用する情報を読出して分岐予測に用いることができる。その結果、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
また、予測情報供給手段は、命令から予測情報を取出すことができるので、予測情報を格納しておくためのハードウェアを準備する必要がない。また分岐予測をより的確にするために、格納しておく予測情報の量を増加させる必要もない。その結果、過大なハードウェアを追加することなく、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
【0279】
請求項2に記載の発明では、請求項1に記載の発明の効果に加え、予測情報を格納しておくためのハードウェアを準備する必要がない。また、分岐予測に必要な情報が、必要なときには常に命令から間違いなく供給されるため、分岐予測が的確なものになる。その結果、過大なハードウェアを追加することなく、既存の資源を有効に利用して、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
【0280】
請求項3に記載の発明では、請求項1に記載の発明の効果に加え、命令中に、分岐予測のための特別なフィールドを設けたり、新たな命令を設けたり、命令情報を増加したりすることが不要で、命令体系を変更することなく、的確な分岐予測を行なえる。その結果、過大なハードウェアを追加することなく、かつ既存の命令セットを変更することなく、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
【0281】
請求項4に記載の発明では、請求項1に記載の発明の効果に加え、既存の命令を変更することなく、新たな命令を追加することのみで、余分なハードウェアを追加することもなく的確な分岐予測が行なえる。その結果、過大なハードウェアを追加することなく、かつ既存の命令セットを生かして、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
【0282】
請求項5に記載の発明によれば、分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給し、その予測情報に従って分岐予測が行なわれる。予測のための時間に余裕があるので、必要であれば演算結果を格納する手段から分岐予測に必要な情報、たとえば実際に分岐命令が分岐を行なう際に参照する情報を読出し、または分岐のためのコンディションを設定する命令がその計算に使用する情報を読出して分岐予測に用いることができる。その結果、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
また、分岐命令の種類により、より適した予測方式を使用して分岐予測を行なえるので、分岐予測がより的確になる。その結果、過大なハードウェアを追加することなく、分岐命令の最初の実行時も含めて、過去の実行結果と相関がない分岐命令に対しても有効な分岐予測を行なうことができる分岐予測装置を提供することができる。
【図面の簡単な説明】
【図1】本発明の第1の実施例に係る分岐予測装置およびその周辺の回路のブロック図である。
【図2】第1の実施例のメモリ実行ステージを模式的に示す図である。
【図3】第1の実施例におけるパイプライン処理を模式的に示す図である。
【図4】第1の実施例の分岐予測機構のブロック図である。
【図5】第1の実施例における命令コードの一例を模式的に示す図である。
【図6】第1の実施例における命令コードを模式的に示す図である。
【図7】第1の実施例における命令コードを模式的に示す図である。
【図8】第1の実施例における命令コードを模式的に示す図である。
【図9】第1の実施例の分岐予測回路のブロック図である。
【図10】第1の実施例の大小比較回路のブロック図である。
【図11】第1の実施例の分岐先生成回路のブロック図である。
【図12】第1の実施例の予測情報バッファ56の構成を示す模式図である。
【図13】第1の実施例のレジスタファイルのブロック図である。
【図14】第1の実施例のレジスタファイルに格納されるデータの圧縮の態様を示す模式図である。
【図15】本発明の第2の実施例の分岐予測装置のブロック図である。
【図16】第2の実施例の予測情報バッファのエントリを模式的に示す図である。
【図17】第2の実施例における予測方式ビットと予測情報との関係を模式的に示す図である。
【図18】本発明の第3の実施例の分岐予測装置および周辺回路のブロック図である。
【図19】本発明の第3の実施例における命令の構成を模式的に示す図である。
【図20】本発明の第4の実施例の分岐予測機構および周辺回路のブロック図である。
【図21】本発明の第4の実施例の分岐予測機構のブロック図である。
【図22】第4の実施例における命令コードの一例を示す模式図である。
【図23】本発明の第5の実施例の命令の構成を模式的に示す図である。
【図24】本発明の第6の実施例の分岐予測装置のブロック図である。
【図25】第6の実施例の命令の構成を模式的に示す図である。
【図26】本発明の第7の実施例の分岐予測装置のブロック図である。
【図27】第7の実施例におけるパイプライン処理を模式的に示す図である。
【図28】第7の実施例における他のパイプライン処理を模式的に示す図である。
【図29】本発明の第8の実施例の予測情報バッファのエントリを模式的に示す図である。
【図30】第8の実施例の分岐予測装置の模式的ブロック図である。
【図31】分岐命令の静的に1つ前のアドレスに分岐予測情報を格納した場合の、命令キャッシュおよびBTBの内容を示す模式図である。
【図32】図31において、分岐命令の分岐先に分岐命令がある場合の分岐予測情報のフェッチアドレスを示すための模式図である。
【図33】本発明の第9の実施例の分岐予測装置のブロック図である。
【図34】第9の実施例におけるBTBバッファの予測情報の登録の概要を模式的に示す図である。
【図35】従来のBTB方式を用いた分岐予測装置およびその周辺回路のブロック図である。
【図36】BTB方式による分岐予測の流れを模式的に示す図である。
【図37】図35に示す装置の分岐予測機構のブロック図である。
【図38】従来技術において、コンディションコードを先行して計算する方式の処理の流れを模式的に示す図である。
【符号の説明】
50は命令パイプライン、52はレジスタファイル、54は予測情報生成機構、56、170、240、270は予測情報バッファ、58、212は分岐予測機構、60、184、210は命令キャッシュ、72は分岐予測回路、74は分岐先生成回路、76はフェッチアドレス生成回路、80は大小比較回路、82は一致比較回路、150はデコーダ、156は圧縮部、172は履歴による分岐予測機構、242は静的分岐予測機構、278は分岐方向予測機構、282は予測分岐先計算機、288、310はプログラムカウンタ、314は予測分岐先計算機。
Claims (5)
- 演算結果を格納する手段を有するパイプライン方式のプロセッサにおける分岐予測装置であって、
分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給するための予測情報供給手段と、
前記予測情報供給手段により供給された予測情報に従って、必要であれば前記演算結果を格納する手段から分岐予測に必要な情報を読出し、遅くとも前記ある分岐命令のフェッチサイクルの完了までに前記ある分岐命令の分岐予測を行なって、分岐予測信号を出力するための分岐予測手段とを含み、
命令体系を、分岐の予測情報を含み得るように構成し、
前記予測情報供給手段は、命令から予測情報を取出して供給する手段を含む、分岐予測装置。 - 命令に、通常の命令フィールドと、次に実行する分岐命令の予測情報を保持するための予測情報フィールドとを設け、
前記予測情報供給手段は、通常の命令フィールドの内容をパイプラインに投入するとともに、命令の予測情報フィールドから予測情報を取出して前記分岐予測手段に供給する、請求項1に記載の分岐予測装置。 - 前記予測情報供給手段は、連続する2つ以上の命令を一度にフェッチして、フェッチした最後の命令が分岐予測命令であることに応答して、フェッチした前記2つ以上の命令から分岐予測情報を得て、前記分岐予測手段に与えるための手段を含む、請求項1に記載の分岐予測装置。
- 前記命令体系に、分岐予測情報を保持するための分岐予測情報保持命令を設け、
前記予測情報供給手段は、前記分岐予測情報保持命令から分岐予測情報を取出して供給するための手段を含む、請求項1に記載の分岐予測装置。 - 演算結果を格納する手段を有するパイプライン方式のプロセッサにおける分岐予測装置であって、
分岐命令の分岐予測に関連する予測情報を、ある分岐命令より前にフェッチされる命令のフェッチと同じタイミングで供給するための予測情報供給手段と、
前記予測情報供給手段により供給された予測情報に従って、必要であれば前記演算結果を格納する手段から分岐予測に必要な情報を読出し、遅くとも前記ある分岐命令のフェッチサイクルの完了までに前記ある分岐命令の分岐予測を行なって、分岐予測信号を出力するための分岐予測手段とを含み、
静的な分岐予測機構をさらに含み、
各命令は、次に実行される分岐命令に対して行なわれる分岐の予測方式を特定するための予測方式特定情報を含み、
前記予測情報供給手段は、フェッチされた命令から、予測方式特定情報を取出して供給し、
さらに、前記分岐予測手段の出力と、前記静的な分岐予測機構の出力とのいずれか一方を、前記予測方式特定情報に応答して選択するための方式選択手段とを含む、分岐予測装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP5697195A JP3599409B2 (ja) | 1994-06-14 | 1995-03-16 | 分岐予測装置 |
US08/908,004 US5848269A (en) | 1994-06-14 | 1997-08-11 | Branch predicting mechanism for enhancing accuracy in branch prediction by reference to data |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP13192294 | 1994-06-14 | ||
JP6-131922 | 1994-06-14 | ||
JP5697195A JP3599409B2 (ja) | 1994-06-14 | 1995-03-16 | 分岐予測装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0863356A JPH0863356A (ja) | 1996-03-08 |
JP3599409B2 true JP3599409B2 (ja) | 2004-12-08 |
Family
ID=26397976
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP5697195A Expired - Fee Related JP3599409B2 (ja) | 1994-06-14 | 1995-03-16 | 分岐予測装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US5848269A (ja) |
JP (1) | JP3599409B2 (ja) |
Families Citing this family (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5949995A (en) * | 1996-08-02 | 1999-09-07 | Freeman; Jackie Andrew | Programmable branch prediction system and method for inserting prediction operation which is independent of execution of program code |
KR100240591B1 (ko) * | 1996-11-06 | 2000-03-02 | 김영환 | 분기명령어의 효율적인 처리를 위한 브랜치 타겟 버퍼 및 그를 이용한 분기 예측방법 |
TW380238B (en) * | 1996-12-09 | 2000-01-21 | Matsushita Electric Ind Co Ltd | Information processing apparatus which accurately predicts whether a branch is taken for a conditional branch instruction, using small-scale hardware |
US6282663B1 (en) * | 1997-01-22 | 2001-08-28 | Intel Corporation | Method and apparatus for performing power management by suppressing the speculative execution of instructions within a pipelined microprocessor |
JPH1185515A (ja) * | 1997-09-10 | 1999-03-30 | Ricoh Co Ltd | マイクロプロセッサ |
US7197625B1 (en) | 1997-10-09 | 2007-03-27 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
US5864703A (en) * | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US6230260B1 (en) * | 1998-09-01 | 2001-05-08 | International Business Machines Corporation | Circuit arrangement and method of speculative instruction execution utilizing instruction history caching |
JP2000132390A (ja) * | 1998-10-23 | 2000-05-12 | Toshiba Corp | プロセッサ及び分岐予測器 |
US6341348B1 (en) | 1998-12-03 | 2002-01-22 | Sun Microsystems, Inc. | Software branch prediction filtering for a microprocessor |
US6732259B1 (en) | 1999-07-30 | 2004-05-04 | Mips Technologies, Inc. | Processor having a conditional branch extension of an instruction set architecture |
US7242414B1 (en) | 1999-07-30 | 2007-07-10 | Mips Technologies, Inc. | Processor having a compare extension of an instruction set architecture |
US6427206B1 (en) * | 1999-05-03 | 2002-07-30 | Intel Corporation | Optimized branch predictions for strongly predicted compiler branches |
US6697832B1 (en) | 1999-07-30 | 2004-02-24 | Mips Technologies, Inc. | Floating-point processor with improved intermediate result handling |
US7346643B1 (en) | 1999-07-30 | 2008-03-18 | Mips Technologies, Inc. | Processor with improved accuracy for multiply-add operations |
US6912559B1 (en) | 1999-07-30 | 2005-06-28 | Mips Technologies, Inc. | System and method for improving the accuracy of reciprocal square root operations performed by a floating-point unit |
US6714197B1 (en) | 1999-07-30 | 2004-03-30 | Mips Technologies, Inc. | Processor having an arithmetic extension of an instruction set architecture |
US6631392B1 (en) | 1999-07-30 | 2003-10-07 | Mips Technologies, Inc. | Method and apparatus for predicting floating-point exceptions |
US6996596B1 (en) | 2000-05-23 | 2006-02-07 | Mips Technologies, Inc. | Floating-point processor with operating mode having improved accuracy and high performance |
US7711763B2 (en) | 2001-02-21 | 2010-05-04 | Mips Technologies, Inc. | Microprocessor instructions for performing polynomial arithmetic operations |
US7162621B2 (en) | 2001-02-21 | 2007-01-09 | Mips Technologies, Inc. | Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration |
US7181484B2 (en) | 2001-02-21 | 2007-02-20 | Mips Technologies, Inc. | Extended-precision accumulation of multiplier output |
US7024663B2 (en) * | 2002-07-10 | 2006-04-04 | Micron Technology, Inc. | Method and system for generating object code to facilitate predictive memory retrieval |
US6954836B2 (en) * | 2002-07-11 | 2005-10-11 | Micron Technology, Inc. | System and method for processor with predictive memory retrieval assist |
US7000095B2 (en) * | 2002-09-06 | 2006-02-14 | Mips Technologies, Inc. | Method and apparatus for clearing hazards using jump instructions |
US7831806B2 (en) * | 2004-02-18 | 2010-11-09 | Arm Limited | Determining target addresses for instruction flow changing instructions in a data processing apparatus |
KR101076815B1 (ko) * | 2004-05-29 | 2011-10-25 | 삼성전자주식회사 | 분기 타겟 어드레스 캐쉬를 포함하는 캐쉬 시스템 |
JP4364077B2 (ja) * | 2004-06-30 | 2009-11-11 | 富士通株式会社 | 演算装置及び演算装置の制御方法 |
JP4362096B2 (ja) * | 2004-09-30 | 2009-11-11 | 富士通株式会社 | 情報処理装置,リプレース方法,リプレースプログラム及びリプレースプログラムを記録したコンピュータ読取可能な記録媒体 |
US7234046B2 (en) * | 2004-12-01 | 2007-06-19 | Faraday Technology Corp. | Branch prediction using precedent instruction address of relative offset determined based on branch type and enabling skipping |
US20070186049A1 (en) * | 2006-02-03 | 2007-08-09 | International Business Machines Corporation | Self prefetching L2 cache mechanism for instruction lines |
EP1990714B1 (en) * | 2006-02-28 | 2010-04-07 | Fujitsu Limited | Processing device by predicting branch from compressed address information |
JP2008165589A (ja) * | 2006-12-28 | 2008-07-17 | Fujitsu Ltd | 情報処理装置 |
US7890739B2 (en) * | 2008-02-19 | 2011-02-15 | Oracle America, Inc. | Method and apparatus for recovering from branch misprediction |
KR20100084036A (ko) * | 2009-01-15 | 2010-07-23 | 삼성전자주식회사 | 소프트웨어의 에러 검출 장치 및 방법 |
JP2013250593A (ja) * | 2012-05-30 | 2013-12-12 | Renesas Electronics Corp | 半導体装置 |
US20140258696A1 (en) * | 2013-03-05 | 2014-09-11 | Qualcomm Incorporated | Strided target address predictor (stap) for indirect branches |
US9619230B2 (en) | 2013-06-28 | 2017-04-11 | International Business Machines Corporation | Predictive fetching and decoding for selected instructions |
KR102077753B1 (ko) * | 2013-10-25 | 2020-04-07 | 어드밴스드 마이크로 디바이시즈, 인코포레이티드 | 레벨 1 명령 캐시 및 분기 예측 유닛에서의 대역폭 증가 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4991080A (en) * | 1986-03-13 | 1991-02-05 | International Business Machines Corporation | Pipeline processing apparatus for executing instructions in three streams, including branch stream pre-execution processor for pre-executing conditional branch instructions |
JP2603626B2 (ja) * | 1987-01-16 | 1997-04-23 | 三菱電機株式会社 | データ処理装置 |
JP2503223B2 (ja) * | 1987-03-20 | 1996-06-05 | 富士通株式会社 | 先行制御方式 |
US5265213A (en) * | 1990-12-10 | 1993-11-23 | Intel Corporation | Pipeline system for executing predicted branch target instruction in a cycle concurrently with the execution of branch instruction |
US5507028A (en) * | 1992-03-30 | 1996-04-09 | International Business Machines Corporation | History based branch prediction accessed via a history based earlier instruction address |
US5423011A (en) * | 1992-06-11 | 1995-06-06 | International Business Machines Corporation | Apparatus for initializing branch prediction information |
US5454117A (en) * | 1993-08-25 | 1995-09-26 | Nexgen, Inc. | Configurable branch prediction for a processor performing speculative execution |
GB2285154B (en) * | 1993-12-24 | 1998-04-01 | Advanced Risc Mach Ltd | Branch cache |
-
1995
- 1995-03-16 JP JP5697195A patent/JP3599409B2/ja not_active Expired - Fee Related
-
1997
- 1997-08-11 US US08/908,004 patent/US5848269A/en not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US5848269A (en) | 1998-12-08 |
JPH0863356A (ja) | 1996-03-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3599409B2 (ja) | 分岐予測装置 | |
US5136697A (en) | System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache | |
US5442756A (en) | Branch prediction and resolution apparatus for a superscalar computer processor | |
US5805877A (en) | Data processor with branch target address cache and method of operation | |
KR100270003B1 (ko) | 향상된 분기 예측 기법을 사용하는 프로세서 및그 실행 방법 | |
US7203827B2 (en) | Link and fall-through address formation using a program counter portion selected by a specific branch address bit | |
US6185676B1 (en) | Method and apparatus for performing early branch prediction in a microprocessor | |
US6073215A (en) | Data processing system having a data prefetch mechanism and method therefor | |
US5606682A (en) | Data processor with branch target address cache and subroutine return address cache and method of operation | |
US5530825A (en) | Data processor with branch target address cache and method of operation | |
US5136696A (en) | High-performance pipelined central processor for predicting the occurrence of executing single-cycle instructions and multicycle instructions | |
US6609194B1 (en) | Apparatus for performing branch target address calculation based on branch type | |
US5592634A (en) | Zero-cycle multi-state branch cache prediction data processing system and method thereof | |
US20110320787A1 (en) | Indirect Branch Hint | |
JPH05143336A (ja) | デジタル・コンピユータ及び分岐命令実行方法 | |
KR19990087940A (ko) | 단일클럭사이클내에불연속명령을페치하기위한방법및시스템 | |
JP2004533695A (ja) | 分岐目標を予測する方法、プロセッサ、及びコンパイラ | |
JP2009048633A (ja) | 分岐先アドレス・キャッシュを備えたプロセッサおよびデータを処理する方法 | |
JP2006520964A (ja) | 分岐ターゲットに基づいて分岐予測をするための方法および装置 | |
US5761490A (en) | Changing the meaning of a pre-decode bit in a cache memory depending on branch prediction mode | |
US5964869A (en) | Instruction fetch mechanism with simultaneous prediction of control-flow instructions | |
JP2006520964A5 (ja) | ||
US7069426B1 (en) | Branch predictor with saturating counter and local branch history table with algorithm for updating replacement and history fields of matching table entries | |
JP5335440B2 (ja) | オペランドの早期の条件付き選択 | |
JPH08320788A (ja) | パイプライン方式プロセッサ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20040219 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040309 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040507 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040601 |
|
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: 20040831 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20040914 |
|
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: 20080924 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20080924 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090924 Year of fee payment: 5 |
|
LAPS | Cancellation because of no payment of annual fees |