JP3798998B2 - 分岐予測装置および分岐予測方法 - Google Patents
分岐予測装置および分岐予測方法 Download PDFInfo
- Publication number
- JP3798998B2 JP3798998B2 JP2002191277A JP2002191277A JP3798998B2 JP 3798998 B2 JP3798998 B2 JP 3798998B2 JP 2002191277 A JP2002191277 A JP 2002191277A JP 2002191277 A JP2002191277 A JP 2002191277A JP 3798998 B2 JP3798998 B2 JP 3798998B2
- Authority
- JP
- Japan
- Prior art keywords
- branch
- history
- instruction
- prediction
- branch history
- 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 title claims description 43
- 238000010276 construction Methods 0.000 claims description 14
- 238000010586 diagram Methods 0.000 description 10
- 230000000694 effects Effects 0.000 description 3
- 238000007796 conventional method Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000010365 information processing 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/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3848—Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
Description
【発明の属する技術分野】
この発明は、分岐命令のアドレスと該分岐命令の予測分岐先のアドレスとの対応表を有するブランチヒストリを用いて該分岐命令の分岐先を予測する分岐予測装置および分岐予測方法に関し、特に、低コストで精度の高い予測を高速におこなうことができる分岐予測装置および分岐予測方法に関する。
【0002】
【従来の技術】
パイプライン処理手法以降の高度な命令処理手法を採用した情報処理装置においては、一つの命令の実行を待たずに、投機的に後続命令の処理を開始することで性能の向上を図ってきた。
【0003】
しかし、分岐命令を実行する場合には、命令を実行した後でないと次に実行する命令アドレスが判明しないため、後続命令の処理を開始することができない。そこで、次に実行する命令アドレスを予測することによって、分岐命令を実行する前に後続命令の処理の開始を可能とする技術が注目されている。
【0004】
たとえば、特開平6−89173号公報には、ブランチヒストリを用いて次に実行する命令アドレスを予測する技術が開示されている。この従来技術では、過去に実行した分岐命令のアドレスとその分岐先アドレスとを対応させてブランチヒストリに登録し、ブランチヒストリに登録された分岐命令を新たに実行する場合には、その分岐命令に対応する分岐先アドレスを用いて次に実行する命令アドレスを予測している。
【0005】
また、分岐予測の精度を向上するために、分岐命令の過去一回の分岐先だけでなく、各分岐命令の過去の複数回数の分岐履歴や、直前に実行された複数個数の分岐命令の分岐シーケンスも記憶するグローバルヒストリも用いられている。グローバルヒストリを利用すると、過去の分岐の規則性に基づいて次の分岐命令の分岐先を予測することができ、より精度の高い予測が可能となる。
【0006】
しかし、グローバルヒストリでは、登録あるいは更新された分岐履歴や分岐シーケンスがいつ参照されるのかを、登録あるいは更新時には判断できない。ゆえにグローバルヒストリで性能を大きく向上させるためには命令フェッチ要求されうる範囲に対して十分余裕のある数だけ分岐命令を登録できる必要がある。しかしながら、コストの制約から使用できるハードウェア量には限界があるので、登録できる分岐命令の数が限られることとなる。このため、グローバルヒストリとブランチヒストリを併用し、グローバルヒストリに登録されている分岐命令についてはグローバルヒストリに基づいて予測をおこない、グローバルヒストリに登録されていない分岐命令についてはブランチヒストリに基づいて予測をおこなう手法が用いられている。
【0007】
【発明が解決しようとする課題】
しかしながら、グローバルヒストリとブランチヒストリを併用した場合にも、前述のようにコストの制約から、グローバルヒストリの有する高い予測機能を利用できる分岐命令は限られるという問題がある。また、グローバルヒストリは、複雑な予測処理のために処理時間がかかり、ブランチヒストリと併用する場合には、さらに、両方の予測から一つの予測を得るための処理時間が必要となり、分岐予測先の命令フェッチ要求が遅くなるという問題がある。
【0008】
なお、グローバルヒストリに登録する分岐命令の数を増やすために、グローバルヒストリへの分岐先アドレスの登録を省き、分岐方向だけを予測することも考えられる。たとえば、米国特許6,055,629号公報には、各分岐命令の分岐方向の履歴や複数の分岐命令の分岐方向のシーケンスを記憶し、これらの規則性に基づいて分岐方向を予測する技術が開示されている。しかし、かかる場合には、分岐命令をデコードするまで分岐先アドレスが判明せず、命令のフェッチが遅くなり、分岐方向を正しく予想することができても性能向上に結びつかないという問題がある。
【0009】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、低コストで精度の高い予測を高速におこなうことができる分岐予測装置および分岐予測方法を提供することを目的とする。
【0010】
【課題を解決するための手段】
上述した課題を解決し、目的を達成するため、本発明は、分岐命令のアドレスと該分岐命令の予測分岐先のアドレスとの対応表を有するブランチヒストリを用いて該分岐命令の分岐先を予測する分岐予測装置であって、前記分岐命令の過去の複数回の分岐結果を分岐履歴として記憶した分岐履歴記憶手段と、前記分岐履歴記憶手段により記憶された分岐履歴に基づいて前記分岐命令の分岐方向を予測し、該予測した分岐方向に基づいて前記対応表を更新するブランチヒストリ更新手段と、を備え、前記分岐命令の命令フェッチ時には前記ブランチヒストリの索引結果のみを用いて該分岐命令の分岐先を予測することを特徴とする。
【0011】
また、本発明は、分岐命令のアドレスと該分岐命令の予測分岐先のアドレスとの対応表を有するブランチヒストリを用いて該分岐命令の分岐先を予測する分岐予測方法であって、前記分岐命令の過去の複数回の分岐結果を分岐履歴として記憶し、該記憶した分岐履歴を前記分岐命令の処理が完了した時点で該処理の結果に基づいて更新する分岐履歴更新ステップと、前記分岐履歴更新ステップにより更新された分岐履歴に基づいて前記分岐命令の分岐方向を予測し、該予測した分岐方向に基づいて前記対応表を更新するブランチヒストリ更新ステップと、を有し、前記分岐命令の命令フェッチ時には前記ブランチヒストリの索引結果のみを用いて該分岐命令の分岐先を予測することを特徴とする。
【0012】
かかる発明によれば、分岐命令の過去の複数回の分岐結果を分岐履歴として記憶し、記憶した分岐履歴に基づいて分岐命令の分岐方向を予測し、予測した分岐方向に基づいて、分岐命令のアドレスと分岐命令の予測分岐先のアドレスとの対応表を更新し、分岐命令の命令フェッチ時にはブランチヒストリの索引結果のみを用いて分岐命令の分岐先を予測することとしたので、分岐確定時に分岐履歴を用いた予測結果をブランチヒストリに反映し、命令フェッチ要求時には大容量のブランチヒストリに既に予測状況が反映されていることになり、命令フェッチがおこなわれる範囲に対して、十分容量の大きいブランチヒストリがカバーする。ゆえに、分岐履歴を記憶する分岐命令の数は非常に少なくても高精度な予測が可能であり、低コストで精度の高い予測をおこなうことができる。また、このことで命令フェッチ要求時には複雑な予測処理をおこなう必要がなくなり、高速に分岐予測をおこなうことができる。
【0013】
【発明の実施の形態】
以下に添付図面を参照して、この発明に係る分岐予測装置および分岐予測方法の好適な実施の形態を詳細に説明する。
【0014】
まず、本実施の形態に係る分岐予測の原理について説明する。図1は、本実施の形態に係る分岐予測の原理を説明するための説明図である。同図に示すように、この分岐予測では、命令フェッチ部が、命令フェッチアドレス生成部により生成された命令フェッチアドレスを用いて、命令フェッチ要求を出すと同時にブランチヒストリ10を索引する。
【0015】
そして、命令フェッチアドレスに対応する分岐命令がブランチヒストリ10に登録されている場合には、ブランチヒストリ10により予測された分岐先の命令アドレスを読み出し、次の命令フェッチは、この命令アドレスに基づいておこなう。
【0016】
一方、フェッチされた分岐命令は、命令デコーダによりデコードされ、分岐命令制御部によって処理される。そして、分岐命令制御部によって分岐命令の処理が完了すると、分岐の成立不成立などの分岐情報が予測更新部20に渡される。
【0017】
予測更新部20は、各分岐命令の分岐履歴を記憶しており、受け取った分岐情報を用いて対応する分岐命令の分岐履歴を更新する。そして、更新した分岐履歴に基づいて、この分岐命令の次回の分岐方向を予測し、予測した分岐方向に基づいてブランチヒストリ10を更新する。
【0018】
このように、本実施の形態では、予測更新部20は、グローバルヒストリのように分岐履歴を用いて直接分岐先を予測するのではなく、分岐履歴を用いて分岐方向を予測し、その予測結果に基づいてブランチヒストリ10を更新することとしている。
【0019】
このため、この予測更新部20は、分岐確定時に分岐履歴を用いた予測結果をブランチヒストリ10に反映することができる。したがって、命令フェッチ要求時には、命令フェッチがおこなわれる範囲を、十分容量が大きなブランチヒストリ10でカバーすることができ、分岐先アドレスを記憶するグローバルヒストリと比較して、登録できる分岐命令の数が非常に少ない場合でも高精度の予測をおこなうことができる。
【0020】
また、命令フェッチ要求時には、ブランチヒストリ10の索引だけが必要であり、グローバルヒストリとブランチヒストリ10を索引した後に両方の予測から一つの予測を得るための処理を不要とすることができ、ハードウェア量を少なくするとともに、命令フェッチの遅れを防ぐことができる。
【0021】
さらに、この予測更新部20は、命令フェッチ部の設計には影響を与えることなく、従来からのブランチヒストリ10による予測機構を変更することなく使用することができる。
【0022】
次に、本実施の形態に係る分岐予測装置の構成について説明する。図2は、本実施の形態に係る分岐予測装置の構成を示す機能ブロック図である。同図に示すように、この分岐予測装置200は、ブランチヒストリ10と予測更新部20とを有する。
【0023】
ブランチヒストリ10は、過去に実行された分岐命令ごとに、分岐命令アドレスと予測分岐先のアドレスを対応させて記憶した記憶部であり、命令フェッチ部により取り出される命令データに分岐命令が含まれる場合に、その分岐命令の分岐先アドレスを予測するために用いられる。このブランチヒストリ10は、連想記憶であり、命令アドレスから予測分岐先のアドレスを索引することができる。
【0024】
図3は、ブランチヒストリ10のエントリのデータ構造の一例を示す図である。同図に示すように、ブランチヒストリ10のエントリは、分岐命令アドレスと、予測分岐先アドレスとから構成される。
【0025】
分岐命令アドレスは、分岐命令の命令アドレスであり、ブランチヒストリ10の索引として用いられる。また、予測分岐先アドレスは、過去にこの分岐命令が実行された時の分岐先アドレスであり、次にこの分岐命令を実行する場合に、分岐先アドレスの予測値として用いられる。
【0026】
なお、このブランチヒストリ10には、次回の実行で分岐が成立すると予測される分岐命令だけが登録され、分岐が成立しないと予想される分岐命令は登録されない。
【0027】
一方、グローバルヒストリの場合には、次回の分岐予測にかかわらず全ての分岐命令を登録する必要があり、このブランチヒストリ10は、グローバルヒストリの半分のエントリ数で同等の予測をおこなうことができる。
【0028】
予測更新部20は、各分岐命令の分岐履歴に基づいて次回の分岐方向を予測し、この予測結果に基づいてブランチヒストリ10を更新する処理部であり、分岐履歴記憶部21と制御部22とを有する。
【0029】
分岐履歴記憶部21は、過去に実行された分岐命令ごとに、過去の分岐方向の履歴を記憶した記憶部である。なお、分岐履歴記憶部21の詳細については後述する。
【0030】
制御部22は、分岐履歴記憶部21を用いて分岐予測をおこない、その予測結果に基づいてブランチヒストリ10を更新する処理部であり、分岐履歴更新部22aとブランチヒストリ更新部22bとを有する。
【0031】
分岐履歴更新部22aは、分岐命令の処理結果に基づいて、その分岐命令に関する分岐履歴記憶部21の分岐履歴を更新する処理部であり、分岐命令の処理が完了した時点で起動される。
【0032】
ブランチヒストリ更新部22bは、分岐履歴記憶部21に記憶された分岐履歴が更新された分岐命令の次回の分岐方向を予測し、予測した次回の分岐方向に基づいてその分岐命令についてのブランチヒストリ10の情報を更新する処理部である。
【0033】
このブランチヒストリ更新部22bが分岐履歴に基づく分岐予測を用いてブランチヒストリ10を更新することにより、ブランチヒストリ10は、グローバルヒストリを用いた場合と同等の分岐予測をおこなうことができ、分岐予測の精度を向上することができる。
【0034】
次に、分岐履歴記憶部21の詳細について説明する。図4は、分岐履歴記憶部21のエントリのデータ構造の一例を示す図である。同図に示すように、分岐履歴記憶部21のエントリは、I-Address、Taken、N-Taken、Current、Curr.Dirから構成される。
【0035】
I-Addressは、このエントリに対応する分岐命令のアドレスである。ここで、このアドレスは、アドレス全体である必要はなく、このエントリと分岐命令を対応付けることができれば、アドレスの部分ビット列であってもかまわない。
【0036】
Takenは、最近の連続分岐成立の回数であり、N-Takenは、最近の連続分岐不成立の回数である。Curr.Dirは、前回の分岐命令の実行で分岐が成立したか否かを示す1ビットの情報であり、Currentは、Curr.Dirに示す分岐成立または不成立が、前回の分岐命令実行まで連続して発生している回数である。
【0037】
ここで、Taken、N-TakenおよびCurrentについて、具体例を用いて説明する。図5は、Taken、N-TakenおよびCurrentを説明するための説明図である。なお、ここでは、Curr.Dir=0は、前回の分岐命令の実行で分岐が成立しなかったことを示し、Curr.Dir=1は、前回の分岐命令の実行で分岐が成立したことを示している。また、「T」は分岐成立を示し、「N]は分岐不成立を示し、左の方向がより古い分岐履歴を示している。
【0038】
同図(a)は、Curr.Dir=0の場合、すなわち前回の分岐命令の実行で分岐が成立しなかった場合の分岐履歴の一例を示している。同図(a)に示すように、直近の2回は、連続して分岐が成立しなかったためCurrent=2となり、その前の6回は、連続して分岐が成立したためTaken=6となる。また、さらにその前の5回は、連続して分岐が成立しなかったためN-Taken=5となる。
【0039】
同様に、同図(b)は、Curr.Dir=1の場合、すなわち前回の分岐命令の実行で分岐が成立した場合の分岐履歴の一例を示している。同図(b)に示すように、直近の2回は、連続して分岐が成立したためCurrent=2となり、その前の3回は、連続して分岐が成立しなかったためN-Taken=3となる。また、さらにその前の6回は、連続して分岐が成立したためTaken=6となる。
【0040】
このように、過去の分岐結果を全て記憶するのではなく、最近の連続する分岐成立および不成立の回数を分岐履歴として記憶することにより、効率良く分岐履歴を記憶することができ、必要となるハードウェアの量を減らすことができる。
【0041】
次に、図2に示した分岐履歴更新部22aによる分岐履歴更新処理の手順について説明する。図6は、図2に示した分岐履歴更新部22aによる分岐履歴更新処理の手順を示すフローチャートである。なお、この分岐履歴更新処理は、分岐命令の処理が完了した時点で起動される。
【0042】
同図に示すように、この分岐履歴更新部22aは、分岐命令処理の結果、分岐が成立したか否かを調べ(ステップS601)、分岐が成立した場合には、Curr.Dir=1であるか否か、すなわち前回この分岐命令が実行された時に分岐が成立したか否かを調べる(ステップS602)。
【0043】
そして、前回は分岐が成立していなければ、今回新たに分岐成立が始まることになるので、Currentの値、すなわちこれまでの分岐不成立の連続回数を、N-Takenにセットし(ステップS603)、Curr.Dirを分岐成立に変更し(ステップS604)、Currentを1に初期化する(ステップS605)。これに対して、前回も分岐が成立していれば、分岐成立が前回から連続していることになるので、Currentに1を加える(ステップS606)。
【0044】
また、分岐命令処理の結果、分岐が成立しなかった場合には、Curr.Dir=1であるか否か、すなわち前回の分岐が成立したか否かを調べる(ステップS607)。そして、前回も分岐が成立していなければ、分岐不成立が前回から連続していることになるので、Currentに1を加える(ステップS606)。
【0045】
これに対して、前回は分岐が成立していれば、今回新たに分岐不成立が始まることになるので、Currentの値、すなわちこれまでの分岐成立の連続回数を、Takenにセットし(ステップS608)、Curr.Dirを分岐不成立に変更し(ステップS609)、Currentを1に初期化する(ステップS610)。
【0046】
なお、ここでは、分岐命令に対するエントリが分岐履歴記憶部21に既に存在する場合の処理手順について説明したが、分岐命令に対するエントリが分岐履歴記憶部21に存在しない場合には、この分岐履歴更新部22aは、新たなエントリを作成し、分岐履歴記憶部21に登録する。
【0047】
そして、作成される新たなエントリは、Currentが1にセットされ、分岐が成立している場合には、Takenが任意の数に、N-Takenが0に、Curr.Dirが1にセットされ、分岐が成立していない場合には、Takenが0に、N-Takenが任意の数に、Curr.Dirが0にセットされる。
【0048】
また、分岐履歴を用いて分岐予測をおこなう場合、分岐履歴の初期構築段階では履歴データが不十分なために予測がはずれることが多い。したがって、分岐履歴の初期構築段階では、分岐履歴記憶部21の分岐履歴に基づくブランチヒストリ10の更新は避ける必要がある。このため、TakenまたはN-Takenの値が0である場合には、分岐履歴記憶部21の分岐履歴に基づくブランチヒストリ10の更新はおこなわれない。
【0049】
また、この分岐履歴更新部22aは、無条件分岐命令および分岐先が頻繁に変更となる分岐命令は分岐履歴記憶部21に登録しない。その理由は、無条件分岐命令は、分岐方向を予測する必要がなく、分岐先が頻繁に変更となる分岐命令は、分岐方向だけを予測しても分岐先のアドレスが予測できないからである。このため、全ての分岐命令を登録するグローバルヒストリと比較して、分岐履歴記憶部21に登録されるエントリの数を減らすことができ、必要となるハードウェアの量を減らすことができる。
【0050】
次に、図2に示したブランチヒストリ更新部22bによるブランチヒストリ更新処理の手順について説明する。図7は、図2に示したブランチヒストリ更新部22bによるブランチヒストリ更新処理の手順を示すフローチャートである。なお、このブランチヒストリ更新処理は、図6に示した分岐履歴更新処理の直後に起動されるが、同じ分岐命令が次に処理されるまでにブランチヒストリ10を更新できれば、このブランチヒストリ更新処理を別のタイミングで起動することもできる。
【0051】
図7に示すように、このブランチヒストリ更新部22bは、分岐履歴更新部22aの更新処理が完了した分岐命令の分岐履歴が初期構築状態にあるか否か、すなわち、更新処理がおこなわれたエントリのTakenまたはN-Takenの値が0であるか否かを調べ(ステップS701)、TakenまたはN-Takenの値が0である場合には、従来手法によってブランチヒストリ10を更新し(ステップS707)、処理を終了する。
【0052】
これに対して、TakenまたはN-Takenの値が0でない場合には、処理を終了した分岐命令の分岐が成立しかつこれまでの連続分岐成立回数が前回の連続分岐成立回数と一致しているか否か、すなわち、Curr.Dir=1かつCurrent=Takenであるか否かを調べる(ステップS702)。そして、Curr.Dir=1かつCurrent=Takenである場合には、前回はこの分岐命令が次に実行された時に分岐が成立しなかったことになるので、次回の分岐予測を分岐不成立とするようにブランチヒストリ10を更新する(ステップS706)。
【0053】
また、Curr.Dir=1かつCurrent=Takenではない場合には、処理を終了した分岐命令の分岐が不成立でありかつこれまでの連続分岐不成立回数が前回の連続分岐不成立回数と一致しているか否か、すなわち、Curr.Dir=0かつCurrent=N-Takenであるか否かを調べる(ステップS703)。そして、Curr.Dir=0かつCurrent=N-Takenである場合には、前回はこの分岐命令が次に実行された時に分岐が成立したことになるので、次回の予測を分岐成立とするようにブランチヒストリ10を更新する(ステップS705)。
【0054】
これに対して、Curr.Dir=0かつCurrent=N-Takenではない場合には、次回も今回と同じ方向に分岐すると予測することができるので、次の予測を今回の分岐結果と同方向とするようにブランチヒストリ10を更新する(ステップS704)。
【0055】
上述してきたように、本実施の形態では、分岐履歴記憶部21が分岐命令ごとに過去複数回の分岐結果を分岐履歴として記憶し、分岐命令の処理が完了すると分岐履歴更新部22aが処理結果に基づいてその分岐命令に対応する分岐履歴記憶部21の分岐履歴を更新し、ブランチヒストリ更新部22bが更新された分岐履歴に基づいてブランチヒストリ10を更新することとしたので、分岐確定時に分岐履歴を用いた予測結果をブランチヒストリ10に反映することができる。したがって、命令フェッチ要求時には、命令フェッチがおこなわれる範囲を、十分容量が大きなブランチヒストリ10でカバーすることができ、分岐履歴記憶部21に記憶できる分岐命令の数が非常に少ない場合でも高精度の予測が可能となり、低コストで精度の高い予測をおこなうことができる。また、命令フェッチ要求時には複雑な予測処理をおこなう必要がなくなり、高速に分岐予測をおこなうことができる。
【0056】
(付記1)分岐命令のアドレスと該分岐命令の予測分岐先のアドレスとの対応表を有するブランチヒストリを用いて該分岐命令の分岐先を予測する分岐予測装置であって、
前記分岐命令の過去の複数回の分岐結果を分岐履歴として記憶した分岐履歴記憶手段と、
前記分岐履歴記憶手段により記憶された分岐履歴に基づいて前記分岐命令の分岐方向を予測し、該予測した分岐方向に基づいて前記対応表を更新するブランチヒストリ更新手段と、
を備えたことを特徴とする分岐予測装置。
【0057】
(付記2)前記分岐履歴記憶手段により記憶された分岐履歴を、前記分岐命令の処理が完了した時点で該処理の結果に基づいて更新することを特徴とする付記1に記載の分岐予測装置。
【0058】
(付記3)前記分岐履歴記憶手段は、前記分岐命令のアドレスを連想キーとして前記分岐履歴を索引することを特徴とする付記1または2に記載の分岐予測装置。
【0059】
(付記4)前記分岐履歴記憶手段は、無条件分岐命令を前記分岐履歴に記憶する対象としないことを特徴とする付記1または2に記載の分岐予測装置。
【0060】
(付記5)前記分岐履歴記憶手段は、分岐条件が成立するか否かの二者択一分岐命令だけを前記分岐履歴に記憶する対象とすることを特徴とする付記1または2に記載の分岐予測装置。
【0061】
(付記6)前記分岐履歴記憶手段は、前記分岐命令ごとに、最近の連続分岐成立回数および最近の連続分岐不成立回数を記憶し、前記ブランチヒストリ更新手段は、前記最近の連続分岐成立回数および最近の連続分岐不成立回数に基づいて前記分岐命令の分岐成立不成立を予測することを特徴とする付記1または2に記載の分岐予測装置。
【0062】
(付記7)前記ブランチヒストリ更新手段は、前記分岐命令の直近の連続分岐成立回数が最近の連続分岐成立回数に等しい場合には次回は分岐不成立と予測し、前記分岐命令の直近の連続分岐不成立回数が最近の連続分岐不成立回数に等しい場合には次回は分岐成立と予測することを特徴とする付記6に記載の分岐予測装置。
【0063】
(付記8)前記分岐履歴記憶手段により記憶された分岐履歴が初期構築状態にあるか否かを判定する分岐履歴構築段階判定手段をさらに備え、前記ブランチヒストリ更新手段は、前記分岐履歴が初期構築状態にある場合には、前記対応表を更新しないことを特徴とする付記6に記載の分岐予測装置。
【0064】
(付記9)前記分岐履歴構築段階判定手段は、前記最近の連続分岐成立回数または最近の連続分岐不成立回数が0である場合に、前記分岐履歴が初期構築状態にあると判定することを特徴とする付記8に記載の分岐予測装置。
【0065】
(付記10)前記ブランチヒストリ更新手段は、前記分岐命令の分岐予測が不成立である場合には、該分岐命令を前記対応表に登録する対象としないことを特徴とする付記1または2に記載の分岐予測装置。
【0066】
(付記11)分岐命令のアドレスと該分岐命令の予測分岐先のアドレスとの対応表を有するブランチヒストリを用いて該分岐命令の分岐先を予測する分岐予測方法であって、
前記分岐命令の過去の複数回の分岐結果を分岐履歴として記憶し、該記憶した分岐履歴を前記分岐命令の処理が完了した時点で該処理の結果に基づいて更新する分岐履歴更新工程と、
前記分岐履歴更新工程により更新された分岐履歴に基づいて前記分岐命令の分岐方向を予測し、該予測した分岐方向に基づいて前記対応表を更新するブランチヒストリ更新工程と、
を含んだことを特徴とする分岐予測方法。
【0067】
(付記12)前記分岐履歴は、前記分岐命令のアドレスを連想キーとする連想記憶であることを特徴とする付記11に記載の分岐予測方法。
【0068】
(付記13)無条件分岐命令を前記分岐履歴に記憶する対象としないことを特徴とする付記11または12に記載の分岐予測方法。
【0069】
(付記14)分岐条件が成立するか否かの二者択一分岐命令だけを前記分岐履歴に記憶する対象とすることを特徴とする付記11または12に記載の分岐予測方法。
【0070】
(付記15)前記分岐履歴は、前記分岐命令ごとに、最近の連続分岐成立回数および最近の連続分岐不成立回数を記憶し、前記ブランチヒストリ更新工程は、前記最近の連続分岐成立回数および最近の連続分岐不成立回数に基づいて前記分岐命令の分岐成立不成立を予測することを特徴とする付記11または12に記載の分岐予測方法。
【0071】
(付記16)前記ブランチヒストリ更新工程は、前記分岐命令の直近の連続分岐成立回数が最近の連続分岐成立回数に等しい場合には次回は分岐不成立と予測し、前記分岐命令の直近の連続分岐不成立回数が最近の連続分岐不成立回数に等しい場合には次回は分岐成立と予測することを特徴とする付記15に記載の分岐予測方法。
【0072】
(付記17)前記分岐履歴が初期構築状態にあるか否かを判定する分岐履歴構築段階判定工程をさらに含み、前記ブランチヒストリ更新工程は、前期分岐履歴が初期構築状態にある場合には、前記対応表を更新しないことを特徴とする付記15に記載の分岐予測方法。
【0073】
(付記18)前記分岐履歴構築段階判定工程は、前記最近の連続分岐成立回数または最近の連続分岐不成立回数が0である場合に、前記分岐履歴が初期構築状態にあると判定することを特徴とする付記17に記載の分岐予測方法。
【0074】
(付記19)前記ブランチヒストリ更新工程は、前記分岐命令の分岐予測が不成立である場合には、該分岐命令を前記対応表に登録する対象としないことを特徴とする付記11または12に記載の分岐予測方法。
【0075】
【発明の効果】
以上説明したように、本発明によれば、分岐命令の過去の複数回の分岐結果を分岐履歴として記憶し、記憶した分岐履歴に基づいて分岐命令の分岐方向を予測し、予測した分岐方向に基づいて、分岐命令のアドレスと分岐命令の予測分岐先のアドレスとの対応表を更新し、分岐命令の命令フェッチ時にはブランチヒストリの索引結果のみを用いて分岐命令の分岐先を予測するよう構成したので、分岐確定時に分岐履歴を用いた予測結果をブランチヒストリに反映することができ、命令フェッチ要求時には、命令フェッチがおこなわれる範囲を、十分容量が大きなブランチヒストリでカバーすることができ、分岐履歴に記憶する分岐命令の数が非常に少ない場合でも高精度な予測が可能となり、低コストで精度の高い予測をおこなうことができるという効果を奏する。また、命令フェッチ要求時には複雑な予測処理をおこなう必要がなくなり、高速に分岐予測をおこなうことができるという効果を奏する。
【図面の簡単な説明】
【図1】図1は、本実施の形態に係る分岐予測の原理を説明するための説明図である。
【図2】本実施の形態に係る分岐予測装置の構成を示す機能ブロック図である。
【図3】ブランチヒストリのエントリのデータ構造の一例を示す図である。
【図4】分岐履歴記憶部のエントリのデータ構造の一例を示す図である。
【図5】 Taken、N-TakenおよびCurrentを説明するための説明図である。
【図6】図2に示した分岐履歴更新部による分岐履歴更新処理の手順を示すフローチャートである。
【図7】図2に示したブランチヒストリ更新部によるブランチヒストリ更新処理の手順を示すフローチャートである。
【符号の説明】
10 ブランチヒストリ
20 予測更新部
21 分岐履歴記憶部
22 制御部
22a 分岐履歴更新部
22b ブランチヒストリ更新部
200 分岐予測装置
Claims (10)
- 分岐命令のアドレスと該分岐命令の予測分岐先のアドレスとの対応表を有するブランチヒストリを用いて該分岐命令の分岐先を予測する分岐予測装置であって、
前記分岐命令の過去の複数回の分岐結果を分岐履歴として記憶した分岐履歴記憶手段と、
前記分岐履歴記憶手段により記憶された分岐履歴に基づいて前記分岐命令の分岐方向を予測し、該予測した分岐方向に基づいて前記対応表を更新するブランチヒストリ更新手段と、
を備え、
前記分岐命令の命令フェッチ時には前記ブランチヒストリの索引結果のみを用いて該分岐命令の分岐先を予測することを特徴とする分岐予測装置。 - 前記分岐履歴記憶手段は、分岐条件が成立するか否かの二者択一分岐命令だけを前記分岐履歴に記憶する対象とすることを特徴とする請求項1に記載の分岐予測装置。
- 前記分岐履歴記憶手段は、前記分岐命令ごとに、最近の連続分岐成立回数および最近の連続分岐不成立回数を記憶し、前記ブランチヒストリ更新手段は、前記最近の連続分岐成立回数および最近の連続分岐不成立回数に基づいて前記分岐命令の分岐成立不成立を予測することを特徴とする請求項1に記載の分岐予測装置。
- 前記ブランチヒストリ更新手段は、前記分岐命令の直近の連続分岐成立回数が最近の連続分岐成立回数に等しい場合には次回は分岐不成立と予測し、前記分岐命令の直近の連続分岐不成立回数が最近の連続分岐不成立回数に等しい場合には次回は分岐成立と予測することを特徴とする請求項3に記載の分岐予測装置。
- 前記分岐履歴記憶手段により記憶された分岐履歴が初期構築状態にあるか否かを判定する分岐履歴構築段階判定手段をさらに備え、前記ブランチヒストリ更新手段は、前記分岐履歴が初期構築状態にある場合には、前記対応表を更新しないことを特徴とする請求項1に記載の分岐予測装置。
- 前記ブランチヒストリ更新手段は、前記分岐命令の分岐予測が不成立である場合には、該分岐命令を前記対応表に登録する対象としないことを特徴とする請求項1に記載の分岐予測装置。
- 分岐命令のアドレスと該分岐命令の予測分岐先のアドレスとの対応表を有するブランチヒストリを用いて該分岐命令の分岐先を予測する分岐予測方法であって、
前記分岐命令の過去の複数回の分岐結果を分岐履歴として記憶し、該記憶した分岐履歴を前記分岐命令の処理が完了した時点で該処理の結果に基づいて更新する分岐履歴更新ステップと、
前記分岐履歴更新ステップにより更新された分岐履歴に基づいて前記分岐命令の分岐方向を予測し、該予測した分岐方向に基づいて前記対応表を更新するブランチヒストリ更新ステップと、
を有し、
前記分岐命令の命令フェッチ時には前記ブランチヒストリの索引結果のみを用いて該分岐命令の分岐先を予測することを特徴とする分岐予測方法。 - 分岐条件が成立するか否かの二者択一分岐命令だけを前記分岐履歴に記憶する対象とすることを特徴とする請求項7に記載の分岐予測方法。
- 前記分岐履歴は、前記分岐命令ごとに、最近の連続分岐成立回数および最近の連続分岐不成立回数を記憶し、前記ブランチヒストリ更新ステップは、前記最近の連続分岐成立回数および最近の連続分岐不成立回数に基づいて前記分岐命令の分岐成立不成立を予測することを特徴とする請求項7に記載の分岐予測方法。
- 前記ブランチヒストリ更新ステップは、前記分岐命令の分岐予測が不成立である場合には、該分岐命令を前記対応表に登録する対象としないことを特徴とする請求項7に記載の分岐予測方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002191277A JP3798998B2 (ja) | 2002-06-28 | 2002-06-28 | 分岐予測装置および分岐予測方法 |
US10/337,360 US20040003218A1 (en) | 2002-06-28 | 2003-01-07 | Branch prediction apparatus and branch prediction method |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002191277A JP3798998B2 (ja) | 2002-06-28 | 2002-06-28 | 分岐予測装置および分岐予測方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004038323A JP2004038323A (ja) | 2004-02-05 |
JP3798998B2 true JP3798998B2 (ja) | 2006-07-19 |
Family
ID=29774395
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002191277A Expired - Fee Related JP3798998B2 (ja) | 2002-06-28 | 2002-06-28 | 分岐予測装置および分岐予測方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20040003218A1 (ja) |
JP (1) | JP3798998B2 (ja) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4009248B2 (ja) | 2003-12-05 | 2007-11-14 | 富士通株式会社 | 分岐予測装置および分岐予測方法 |
JP4362096B2 (ja) | 2004-09-30 | 2009-11-11 | 富士通株式会社 | 情報処理装置,リプレース方法,リプレースプログラム及びリプレースプログラムを記録したコンピュータ読取可能な記録媒体 |
JP4286768B2 (ja) | 2004-11-30 | 2009-07-01 | 富士通株式会社 | 分岐予測装置およびその制御方法 |
US20060190710A1 (en) * | 2005-02-24 | 2006-08-24 | Bohuslav Rychlik | Suppressing update of a branch history register by loop-ending branches |
US20060253677A1 (en) * | 2005-05-04 | 2006-11-09 | Arm Limited | Data access prediction |
US7725695B2 (en) * | 2005-05-31 | 2010-05-25 | Arm Limited | Branch prediction apparatus for repurposing a branch to instruction set as a non-predicted branch |
WO2007099604A1 (ja) | 2006-02-28 | 2007-09-07 | Fujitsu Limited | コンピュータの分岐予測装置 |
KR100817056B1 (ko) | 2006-08-25 | 2008-03-26 | 삼성전자주식회사 | 분기이력 길이표시기, 분기예측 시스템 및 분기 예측 방법 |
JP5423156B2 (ja) * | 2009-06-01 | 2014-02-19 | 富士通株式会社 | 情報処理装置及び分岐予測方法 |
EP2662767A1 (en) | 2011-01-07 | 2013-11-13 | Fujitsu Limited | Computation processing device and branch prediction method |
US9395984B2 (en) | 2012-09-12 | 2016-07-19 | Qualcomm Incorporated | Swapping branch direction history(ies) in response to a branch prediction table swap instruction(s), and related systems and methods |
JP6273718B2 (ja) * | 2013-08-13 | 2018-02-07 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US9952870B2 (en) * | 2014-06-13 | 2018-04-24 | Wisconsin Alumni Research Foundation | Apparatus and method for bias-free branch prediction |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4894772A (en) * | 1987-07-31 | 1990-01-16 | Prime Computer, Inc. | Method and apparatus for qualifying branch cache entries |
US4943908A (en) * | 1987-12-02 | 1990-07-24 | International Business Machines Corporation | Multiple branch analyzer for prefetching cache lines |
JPH0820950B2 (ja) * | 1990-10-09 | 1996-03-04 | インターナショナル・ビジネス・マシーンズ・コーポレイション | マルチ予測型分岐予測機構 |
US5414822A (en) * | 1991-04-05 | 1995-05-09 | Kabushiki Kaisha Toshiba | Method and apparatus for branch prediction using branch prediction table with improved branch prediction effectiveness |
WO1993017384A1 (en) * | 1992-02-27 | 1993-09-02 | Wang Laboratories, Inc. | Cpu having pipelined instruction unit and effective address calculation unit with retained virtual address capability |
US5454117A (en) * | 1993-08-25 | 1995-09-26 | Nexgen, Inc. | Configurable branch prediction for a processor performing speculative execution |
US5687360A (en) * | 1995-04-28 | 1997-11-11 | Intel Corporation | Branch predictor using multiple prediction heuristics and a heuristic identifier in the branch instruction |
JP3683968B2 (ja) * | 1996-02-09 | 2005-08-17 | 富士通株式会社 | 情報処理装置 |
US5742805A (en) * | 1996-02-15 | 1998-04-21 | Fujitsu Ltd. | Method and apparatus for a single history register based branch predictor in a superscalar microprocessor |
US6601161B2 (en) * | 1998-12-30 | 2003-07-29 | Intel Corporation | Method and system for branch target prediction using path information |
KR100317240B1 (ko) * | 1999-10-21 | 2001-12-22 | 윤종용 | 분기 예측 정확도 히스토리를 이용한 분기 예측기 |
US7165168B2 (en) * | 2003-01-14 | 2007-01-16 | Ip-First, Llc | Microprocessor with branch target address cache update queue |
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 |
-
2002
- 2002-06-28 JP JP2002191277A patent/JP3798998B2/ja not_active Expired - Fee Related
-
2003
- 2003-01-07 US US10/337,360 patent/US20040003218A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20040003218A1 (en) | 2004-01-01 |
JP2004038323A (ja) | 2004-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7493480B2 (en) | Method and apparatus for prefetching branch history information | |
CN110069285B (zh) | 一种检测分支预测的方法及处理器 | |
US5434985A (en) | Simultaneous prediction of multiple branches for superscalar processing | |
KR100411529B1 (ko) | 제2 레벨 분기 예측 테이블을 이용한 분기 예측 방법 및장치 | |
US4763245A (en) | Branch prediction mechanism in which a branch history table is updated using an operand sensitive branch table | |
JP3798998B2 (ja) | 分岐予測装置および分岐予測方法 | |
EP0480193A2 (en) | Multi-prediction branch prediction mechanism | |
EP1271308A2 (en) | Apparatus and method for branch prediction based on history table | |
JP2000215056A (ja) | 複数予測分岐命令にわたる命令フェッチの位置合わせ命令キャッシュ処理 | |
JP5734945B2 (ja) | スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ | |
JP2001243069A (ja) | 分岐予測装置及び分岐予測方法 | |
JP4009248B2 (ja) | 分岐予測装置および分岐予測方法 | |
US5634119A (en) | Computer processing unit employing a separate millicode branch history table | |
JPH0668736B2 (ja) | 2個のシステムクロックサイクルを利用する書込み動作をもったキャッシュメモリユニットを供与する装置及び方法 | |
JP2020501242A (ja) | ストリーム長予測を使用する分岐予測器検索限定 | |
JP5415268B2 (ja) | 分岐先アドレスキャッシュにおけるルックアップの低減方法および装置 | |
WO2001042927A9 (fr) | Dispositif d'acces memoire et methode utilisant une table d'historique des traductions d'adresses | |
US11442727B2 (en) | Controlling prediction functional blocks used by a branch predictor in a processor | |
JP2002229852A (ja) | キャッシュシステムの制御回路 | |
US6678638B2 (en) | Processor having execution result prediction function for instruction | |
JP2001236224A (ja) | 分岐予測テーブル汚染の低減方法 | |
EP0969358A2 (en) | Information processing device and method for performing parallel processing | |
US7036003B1 (en) | Instruction processing device and method for controlling branch instruction accompanied by mode change | |
TWI231450B (en) | Processor including fallback branch prediction mechanism for far jump and far call instructions | |
JP2629613B2 (ja) | 分岐予測装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20041026 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20060117 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060124 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060327 |
|
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: 20060418 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060421 |
|
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: 20090428 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100428 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110428 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110428 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120428 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130428 Year of fee payment: 7 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140428 Year of fee payment: 8 |
|
LAPS | Cancellation because of no payment of annual fees |