近年のマイクロプロセッサは、命令発行幅の増大による命令レベル並列性の利用と命令パイプライン長の増大による動作周波数の向上により高い性能を達成している。このことは、プロセッサ内で処理されている命令の数が増加する傾向にあることを示している。このため、無駄となる不要な仕事(ペナルティ)の量が増加する傾向にある。このようなペナルティの発生する1要因として、分岐命令がある。
分岐命令によるペナルティを軽減するために、予め分岐する方向を予測し、予測に基づいたアドレスの命令をパイプラインに詰めるようにする。このように分岐する方向を予測することは、一般に分岐予測などと称され、そのような分岐予測を行う装置は、分岐予測器などと称されることがある。高性能のプロセッサを実現する1要因として、精度の高い分岐予測器を用いることがある。
分岐予測器の精度を向上させるために、様々な分岐予測器が提案されている。例えば、図1に示すような構成を有するGshare予測器が提案されている(非特許文献1参照)。Gshare予測器は、プログラムカウンタ(Program Counter)11、BHR(Branch History Register)12、XOR(exclusive OR)回路13、PHT(Pattern History Table)14を備える構成とされている。
プログラムカウンタ11は、分岐命令のアドレスを発生し、そのアドレスをXOR回路13に供給する。BHR12は、グローバル分岐履歴レジスタなどと称され、最近の分岐の実行結果の履歴を保持し、プログラムカウンタ11から分岐命令のアドレスがXOR回路13に供給されるタイミングで、その保持している履歴をXOR回路13に供給する。
XOR回路13は、供給されたプログラムカウンタと履歴のデータとの排他的論理和を演算する。XOR回路13により演算された排他的論理和の値は、PHT(パターン履歴表)へのインデックスとして用いられる。PHT14は、2ビット飽和型カウンタのテーブルであり、分岐が成立しやすいか、または、分岐が成立しづらいかを示すデータ(カウンタ値)を保持している。Gshare予測器では、インデックスによりPHT14から選択された2ビット飽和型カウンタのカウンタ値により分岐方向が予測される。
しかしながら、Gshare予測器では、破壊的競合が発生する可能性が高く、その可能性を低くするために、Bimode予測器というのが提案されている(非特許文献2参照)。図2は、Bimode予測器の構成を示す図である。Bimode予測器は、プログラムカウンタ21、BHR22、XOR回路23、Choice PHT24、Taken PHT25、Untaken PHT26、および、選択部27を備える構成とされている。
このように、Bimode予測器は、Choice PHT24、Taken PHT25、Untaken PHT26という3つのテーブルを備えることを特徴とし、これらの3つのパターン履歴表を利用して予測を行う。
Choice PHT24は、2ビット飽和型カウンタのテーブルであり、プログラムカウンタ21が発生する分岐命令のアドレスが用いられて参照される。プログラムカウンタ21が発生するアドレスと、BHR22が発生するアドレスは、共にXOR回路23に供給され、XOR回路23により算出された排他的論理和がインデックスとされ、Taken PHT25とUntaken PHT26が参照される。Taken PHT25とUntaken PHT26は、それぞれ2ビット飽和型カウンタで構成されている。
Taken PHT25とUntaken PHT26からそれぞれ読み出されたカウンタ値は、選択部27に供給される。選択部27は、Choice PHT24から供給されたカウンタ値が分岐成立の予測を示している場合には、Taken PHT25から供給されたカウンタ値を出力し、Choice PHT24から供給されたデータが分岐不成立の予測を示している場合には、Untaken PHT26から供給されたカウンタ値を出力する。
Bimode予測器は、選択部27から出力されたデータを用いて予測を行う。図2に示したBimode予測器のChoice PHT24、Taken PHT25、Untaken PHT26という3つの履歴表のエントリは、2ビット飽和型カウンタで構成されている。この2ビット飽和型カウンタの状態遷移と予測の関係について図3を参照して説明する。
2ビットの飽和型カウンタの場合、カウンタ値として、0,1,2,3(2進数では表すと、00,01,10,11)のいずれかが設定される。図3においては、カウンタ値を()内に示している。またここでは、カウンタ値が0の場合、Strongly Untaken(強不成立)とし、カウンタ値が2の場合、Likely Untaken(不成立)とし、カウンタ値が2の場合、Likely Taken(成立)とし、カウンタ値が3の場合、Strongly Taken(強成立)として説明する。
予測が成立の場合、カウンタ値はインクリメント(increment)され、不成立の場合、カウンタ値はデクリメント(decrement)される。例えば、Likery Taken(カウンタ値は2)の状態のときに、予測が成立した場合、Strongly Takenの状態に移行されるため、カウンタ値は、3にインクリメントされる。逆に、例えば、Likery Taken(カウンタ値は2)の状態のときに、予測が不成立であった場合、Likery Untakenの状態に移行されるため、カウンタ値は、2にデクリメントされる。
また、飽和型カウンタであるため、例えば、Strongly Taken(カウンタ値は3)の状態のときに、予測が成立した場合、Strongly Takenの状態が維持され、カウンタ値は3のままである。同様に、Strongly Untaken(カウンタ値は0)の状態のときに、予測が不成立した場合、Strongly Untakenの状態が維持され、カウンタ値は0のままである。
このように、カウンタ値(状態)が、予測の成立、不成立に対応して変化する。Bimode予測器では、このようにカウンタ値が変化する2ビットの飽和型カウンタのカウンタ値が、2以上のとき(すなわち、Strongly Taken(3)またはLikery Taken(2)のとき)に分岐成立と予測され、1以下のとき(すなわち、Strongly Untaken(0)またはLikery Untaken(1)のとき)に分岐不成立と予測される。
プロセッサなどに組み込まれる予測器として、上記したようなGshare予測器やBimode予測器が提案されている。
S.McFarling.Combining Branch Predictors. Technical report, WRL Technical Note TN-36, Digital Equipment Corporation, 1993
Chih-Chieh Lee, I-Cheng K.Chen, and Trevor N.Mudge.The bi-mode branch predictor.In Proceedings of the 30th annual ACM/IEEE international symposium on Microarchitecture, pages 4-13, 1997.
以下に本発明の最良の形態を説明するが、開示される発明と実施の形態との対応関係を例示すると、次のようになる。明細書中には記載されているが、発明に対応するものとして、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その発明に対応するものではないことを意味するものではない。逆に、実施の形態が発明に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その発明以外の発明には対応しないものであることを意味するものでもない。
さらに、この記載は、明細書に記載されている発明の全てを意味するものではない。換言すれば、この記載は、明細書に記載されている発明であって、この出願では請求されていない発明の存在、すなわち、将来、分割出願されたり、補正により出現し、追加されたりする発明の存在を否定するものではない。
本発明の不安定状態を利用する予測器は、命令毎に成立/不成立の状況を履歴として記憶する第一のパターン履歴記憶手段(例えば、図6のChoice PHT214)と、成立と予測された場合における成立/不成立の状況を履歴として記憶する第二のパターン履歴記憶手段(例えば、図6のTaken PHT215)と、不成立と予測された場合における成立/不成立の状況を履歴として記憶する第三のパターン履歴記憶手段(例えば、図6のUntaken PHT216)と、第二のパターン履歴記憶手段からの出力又は第三のパターン履歴記憶手段からの出力に対応して、第二のパターン履歴記憶手段又は第三のパターン履歴記憶手段からの出力により、あるいは第二のパターン履歴記憶手段と第三のパターン履歴記憶手段と第一のパターン履歴記憶手段とからの出力により、成立/不成立の予測の決定を行う決定手段とを有することを特徴とする。
前記決定手段は、第一のパターン履歴記憶手段からの出力に基づいて、第二のパターン履歴記憶手段からの出力又は第三のパターン履歴記憶手段からの出力のいずれか一方を選択する第一の選択手段(例えば、図6の選択部217)と、第一のパターン履歴記憶手段、第二のパターン履歴記憶手段及び第三のパターン履歴記憶手段からの出力を用いて演算を行う演算手段(例えば、図6の選択部218)と、第一の選択手段からの出力に基づいて、選択手段により選択された出力又は演算手段により演算された出力のいずれか一方を選択する第二の選択手段(例えば、図6の選択部219)とを有するようにすることができる。
前記第一の選択手段からの出力が、所定の範囲内の値である場合、不安定状態であると判断し、所定の範囲内の値ではない場合、安定状態であると判断する判断手段(例えば、図6の選択部219)をさらに備えるようにすることができる。
本発明のプロセッサは、命令毎に成立/不成立の状況を履歴として記憶する第一のパターン履歴記憶手段(例えば、図6のChoice PHT214)と、成立と予測された場合における成立/不成立の状況を履歴として記憶する第二のパターン履歴記憶手段(例えば、図6のTaken PHT215)と、不成立と予測された場合における成立/不成立の状況を履歴として記憶する第三のパターン履歴記憶手段(例えば、図6のUntaken PHT216)と、第二のパターン履歴記憶手段からの出力又は第三のパターン履歴記憶手段からの出力に対応して、第二のパターン履歴記憶手段又は第三のパターン履歴記憶手段からの出力により、あるいは第二のパターン履歴記憶手段と第三のパターン履歴記憶手段と第一のパターン履歴記憶手段とからの出力により、成立/不成立の予測の決定を行う決定手段(例えば、図6の選択部219)と、決定手段により予測の決定に基づく処理を実行する実行手段(例えば、図4のインストラクションキャッシュ62)とを有することを特徴とする。
以下に、本発明の実施の形態について図面を参照して説明する。
[プロセッサの内部構成例]
図4は、本発明を適用するプロセッサの一実施の形態の構成を示す図である。以下の説明においては、本発明をプロセッサに適用した場合を例に挙げて説明するが、本発明がプロセッサのみに適用できるということを限定しているものではない。また、以下の説明においては、本発明が、プロセッサ内で分岐予測を行う予測器に適用された場合を例に挙げて説明するが、予測器以外にも本発明を適用できる。
図4に示したプロセッサ50は、フェッチ(Fetch)部51、キュー(queue)部52、リネーム(Rename)部53、発行(Issue)部54、レジスタリード(Register Read)部55、実行(Execute)部56、記憶部(Memory)57、および出力部(Interface)58から構成されている。図4に示したプロセッサ50は、このような構成を有し、パイプライン処理を実行する。
フェッチ部51は、予測部61とインストラクションキャッシュ(Instruction Cache)62を含む構成とされている。予測部61は、例えば、図5を参照して後述するような構成を有し、分岐予測を行う。予測部61による予測結果は、必要に応じ、インストラクションキャッシュ62に供給される。インストラクションキャッシュ62は、必要の応じ、予測結果を用い、インストラクションをフェッチする(命令を読み出す)。
読み出されたインストラクションは、キュー部52を介して、リネーム部53に供給される。リネーム部53は、整数レジスタリネーミング(Integer Register Rename)部71と浮動小数点レジスタリネーミング(Floating Point Register Rename)部72を含む構成とされている。読み出されたインストラクションは、キュー部52により、整数キューと浮動小数点キューに関連付けられたスロットに割り当てられる。そして、整数キューに割り当てられたインストラクションは整数レジスタリネーミング部71に供給され、浮動小数点キューに割り当てられたインストラクションは、浮動小数点レジスタリネーミング部72に供給される。
整数レジスタリネーミング部71と浮動小数点レジスタリネーミング部72は、それぞれ供給されたインストラクションに対し、仮想レジスタを、内部の物理レジスタにマッピングすることにより、インストラクションの結果を格納するのために新しい物理レジスタを割り当てる。その割り当てに従って、インストラクションは、発行部54に対応する部分に供給される。
発行部54は、整数発行部(Integer Issue Queue)81と浮動小数点発行部(Floating Point Issue Queue)82を含む構成とされている。整数発行部81と浮動小数点発行部82は、インストラクションを発行するために設けられている。この発行部54により発行されたインストラクションは、レジスタリード部55を介して実行部56に供給される。
レジスタリード部55は、整数レジスタファイル(Integer Register File)部91と浮動小数点レジスタファイル(Floating Point Register file)部92を含む構成とされている。また、実行部56は、整数演算(Integer Execution)部101と浮動小数点演算(Floating Point Multiply/Add Execution)部102を含む構成とされている。なお、例えば、整数レジスタファイル部91などは、同様な処理を行う複数の部分から構成される。他の部分も必要に応じ、同様な処理を行う複数の部分から構成される。
発行部54、レジスタリード部55、および、実行部56は、実行待ちのインストラクションのリストを管理し、命令依存、オペランド依存が発生した場合には、その依存関係が解決するまで命令の実行を保留し、依存関係が無い命令は、記述順序を飛び越えて先行実行するように構成されている。
例えば、整数発行部81により発行された命令(インストラクション)は、一旦、整数レジスタファイル91に蓄えられる(バッファリングされる)とともに、既にバッファリングされている命令のオペランドの依存関係と整数演算部101の空き具合が1クロック毎に検査される。そして、依存関係に問題がない命令から整数演算部101に割り当てられ、処理される。処理された命令は記憶部57のキャッシュ111に供給され、キャッシュ111から出力部58としてのインタフェース121を介してプロセッサ50の外部に出力される。
このようにしてプロセッサ50においては、命令に対して処理がなされる。命令の中には、分岐命令がある。例えば、パイプライン処理において、ジャンプ(無条件分岐)の命令をパイプラインに詰める前に、ジャンプ命令の次のアドレスの命令を1命令分誤ってパイプラインに詰めてしまったような場合、この処理は無効であり、結果として1命令分のパイプラインの無駄(ペナルティ)が生じることになる。
このようなペナルティを軽減するために、予め分岐する方向を予測し、予測に基づいたアドレスの命令をパイプラインに詰めるようにする。このような分岐する方向を予測することは一般に分岐予測などと称され、図4においては、予測部61が行う。予測部61の予測は、無駄な処理が実行されない(処理の高速化を妨げるようなことを防ぐ)ためには、精度良く行われることが望ましい。
精度良く予測を行うために、本実施の形態においては、予測部61を、図5や図6に示すような構成とする。
[予測部の構成例]
以下の説明において予測部61は、分岐予測を行う場合を例に挙げて説明するため、例えば、Branch History Register(BHR:分岐履歴レジストリ)212(図6)とするが、後述するように、予測部61の構成、動作は、分岐予測のみに、その構成、動作が限定されることを示しているのではない。
図5は、予測部61の機能を示す図である。予測部61のインデックス供給部201は、テーブル保持部202に保持されているテーブルを参照するためのインデックス(アドレス)を発行し、テーブル保持部202に供給する。ここでは、インデックスは、予測部61により発行(生成)されるとして説明するが、インデックス自体は、予測部61以外の部分から供給され、予測部61自体は、その供給されるインデックスを取得(入力)するような構成にすることも勿論可能である。またここでは、インデックスと表記するが、その意味は、テーブルを参照するためのデータ(情報、アドレスなどを含む意味)であるとする。
テーブル保持部202は、複数のテーブルを保持し、それらのテーブルから供給されたインデックスに対応するデータを、不安定状態検知部203、予測結果候補生成部204、および、選択部205にそれぞれ供給する。
テーブル保持部202に保持される複数のテーブルは、例えば、2ビットの飽和型カウンタで構成される。また各テーブルが、飽和型カウンタで構成される場合、それらのテーブルから読み出されるデータは、カウンタ値である。
不安定状態検知部203は、テーブル保持部202から供給された複数のデータ(カウンタ値)から、そのカウンタ値が示す状態が、安定状態を示しているか、または、不安定状態を示しているかを判断し、その判断結果(検知結果)を、選択部205に供給する。予測結果候補生成部204は、予測結果として外部に出力される候補となるデータを、テーブル保持部202から供給されるデータから複数生成し、選択部205に供給する。
選択部205は、予測結果候補生成部204から供給された複数のデータから、不安定状態検知部203の検知結果に基づく1つのデータを選択し、出力する。
ここで、不安定状態検知部203が検知する不安定状態について説明を加える。図3を参照して説明したように、テーブル保持部202が保持しているテーブルが、2ビットの飽和型カウンタで構成されている(2ビットで示されるカウンタ値を保持している)場合、カウンタ値として、0,1,2,3のいずれかが設定される。
カウンタ値が0の場合、Strongly Untaken(強不成立)とし、カウンタ値が1の場合、Likely Untaken(不成立)とし、カウンタ値が2の場合、Likely Taken(成立)とし、カウンタ値が3の場合、Strongly Taken(強成立)として説明する。
予測が成立の場合、カウンタ値は1だけ加算され、不成立の場合、カウンタ値は1だけ減算される。このように、カウンタ値(状態)が、予測の成立、不成立に対応して変化する。従来では、このようにカウンタ値が変化する2ビットの飽和型カウンタのカウンタ値が、2以上のとき(すなわち、Strongly Taken(3)またはLikery Taken(2)のとき)に分岐成立と予測され、1以下のとき(すなわち、Strongly Untaken(0)またはLikery Untaken(1)のとき)に分岐不成立と予測されるように構成されていた。
Strongly Takenのような飽和型カウンタのカウンタ値が閾値より遠い値の状態の場合、予測結果は分岐成立という同一の結果になるが、Likely Takenのような飽和型カウンタのカウンタ値が閾値より近い値の状態の場合、予測結果は分岐成立または分岐不成立という異なる結果が出ることになる。このようなことは、Likely Untakenの状態やStrongly Untakenの状態のときにも同一にいえることである。
このようなことを換言すれば、カウンタ値が閾値に遠い状態の場合、状態が変化しにくく、予測結果が変化しにくい安定した状態(安定状態)であり、カウンタ値が閾値に近い状態の場合、状態が変化しやすく、予測結果が変化しやすい不安定な状態(不安定状態)であるといえる。安定状態のときの予測精度と、不安定状態のときの予測精度は、必ずしも同じではなく、安定状態のときの予測精度の方が、不安定状態のときの予測精度よりも高いという傾向にあった。
そこで、本実施の形態においては、不安定状態検知部203を設け、不安定状態検知部203が、不安定状態、すなわち、2ビットの飽和型カウンタを用いた場合、カウンタ値が1または2の状態を検知する(カウンタ値が1または2であるか否かを判断する)ように予測部61を構成することにより、予測精度を向上させるようにする。
なお、ここでは2ビットの飽和型カウンタを用いた例を挙げて説明するが、2ビット以外の飽和型カウンタを用いた場合にも本発明は適用でき、そのような場合を含めて不安定状態を定義すると、閾値から所定の範囲内に存在するカウンタ値のときと定義することができる。例えば、カウンタ値が、0乃至9の範囲で変化し、閾値が5と設定されているような場合、そして所定の範囲内として3が設定されているようなときには、5を中心とする前後3つのカウンタ値、2、3、4、5、6、7、8のカウンタ値のときは、不安定状態として扱うようにする。
そして、2ビット(またはそれ以外)の飽和型カウンタが用いられる場合、不安定状態のときには、カウンタ値が閾値以上であっても、従来のように単に分岐成立であると判断するのではなく、後述するような処理を行うことにより、分岐成立、または場合により分岐不成立と判断されるようにする。このように、不安定状態のときには、たとえ、カウンタ値が閾値以上であっても、処理の結果により、分岐不成立と判断されるようにすることにより、不安定状態のときの予測精度を安定状態のときの予測精度と同程度、または、それ以上に高めることが可能となる。
図6は、予測部61の内部構成例を示す図である。予測部61は、プログラムカウンタ(Program Counter)211、BHR(Branch History Register)212、XOR(exclusive OR)回路213、Choice PHT(Pattern History Table)214、Taken PHT215、Untaken PHT216、選択部217、選択部218、および、選択部219を備える構成とされている。
図5に示した機能ブロック図と、図6に示した内部構成例の対応関係を説明するに、インデックス供給部201は、プログラムカウンタ211とBHR212から構成される。テーブル保持部202は、Choice PHT214、Taken PHT215、およびUntaken PHT216から構成される。不安定状態検知部203は、選択部217から構成される。予測結果候補生成部204は、選択部217と選択部218から構成される(従って、このような構成にした場合、選択部217は、不安定状態検知部203と予測結果候補生成部204を兼ねた構成とされている)。選択部205は、選択部219から構成される。
プログラムカウンタ211は、分岐命令のアドレスを発生し、そのアドレスをXOR回路213に供給する。BHR212は、グローバル分岐履歴レジスタなどと称され、最近の分岐の実行結果の履歴を保持し、プログラムカウンタ211から分岐命令のアドレスがXOR回路213に供給されるタイミングで、その保持している履歴をXOR回路213に供給する。
XOR回路213は、供給されたプログラムカウンタと履歴のデータとの排他的論理和を演算する。XOR回路213により演算された排他的論理和の値は、Choice PHT(Pattern History Table)214、Taken PHT215、Untaken PHT216へのインデックスとして用いられる。
Choice PHT214、Taken PHT215、Untaken PHT216は、それぞれ2ビット飽和型カウンタのテーブルであり、XOR回路23により算出された排他的論理和の値がインデックスとされて参照されることにより、カウンタ値を、選択部217と選択部218にそれぞれ供給する。選択部217は、Choice PHT214から供給されたカウンタ値が分岐成立の予測を示している場合には、Taken PHT215から供給されたカウンタ値を選択部219に出力する。また選択部217は、Choice PHT214から供給されたカウンタ値が分岐不成立の予測を示している場合には、Untaken PHT216から供給されたカウンタ値を選択部219に出力する。
選択部219には、選択部217から2つの同一のカウンタ値が供給される。一方は、予測結果を示すカウンタ値として用いられ、他方は、不安定状態であるか否かを示すカウンタ値として用いられる。選択部217からのカウンタ値が不安定状態を示すカウンタ値として用いられる場合、そのカウンタ値が1または2のとき、不安定な状態を示すカウンタ値であるとして扱われる。
選択部218は、例えば、多数決回路で構成される。そして、選択部218は、Choice PHT214、Taken PHT215、Untaken PHT216からそれぞれ供給されるカウンタ値の多数決を採り、その結果を、選択部219に供給する。すなわち選択部218は、Choice PHT214、Taken PHT215、Untaken PHT216からそれぞれ供給される分岐成立を示すカウンタ値と分岐不成立を示すカウンタ値のうち、どちらを示すカウンタ値が多いかを判断する(この場合、3つのカウンタ値が供給されるので、そのうち2つ以上のカウンタ値が示す情報は分岐成立か分岐不成立かを判断する)。
このようにして、選択部218は、多数決により、不安定状態のときの予測結果の候補を生成する。
なお、ここでは、選択部218は、多数決を採ることにより予測結果の候補を生成するとして説明するが、例えば、供給されるカウンタ値を加算したり乗算したりといった演算を行い、その演算結果に基づき予測結果の候補を生成する、供給されたカウンタ値に重み付けを行うなど、多数決以外の他の方法により、予測結果の候補を生成するような構成としても良い。いずれの方法によっても、選択部218は、供給された複数のカウンタ値(データ)に基づき、1つの予測結果の候補を生成(選択)する構成とされる。
選択部219には、このようにして、選択部217からの結果と選択部218からの結果が供給される。選択部219は、選択部217から供給された不安定状態であるか否かを示すデータが、不安定状態ではない(安定状態である)ことを示す場合、選択部217からのデータを選択して外部の装置(この場合、図4のインストラクションキャッシュ62)に供給し、不安定状態であることを示す場合、選択部218からのデータ(この場合、多数決の結果)を選択し、外部の装置に供給する。
[予測部の予測に関する動作]
次に、図5,6に示した予測部61が行う予測に関する処理について、図7のフローチャートを参照して説明する。ステップS11において、インデックス供給部201(図5)(Program Counter211、BHR212、および、XOR回路213(図6))は、インデックスA,B,Cを計算(生成)する。
インデックスAは、テーブル保持部202が保持するテーブルのうち、Choice PHT214のカウンタ値を参照するためのものであり、インデックスBは、Taken PHT215のカウンタ値を参照するためのものであり、インデックスCは、Untaken PHT216のカウンタ値を参照するためのものである。
ステップS12において、インデックスAが用いられてChoice PHT214が参照される。同様に、ステップS13において、インデックスBが用いられてTaken PHT215が参照され、ステップS14において、インデックスCが用いられてUntaken PHT216が参照される。
それぞれのテーブルが参照されることにより読み出されたカウンタ値は、不安定状態検知部203(図5)(選択部217(図6))と、予測結果候補生成部204(図5)(選択部217と選択部218)に供給される。
ステップS15において、予測結果候補生成部204(選択部217)は、Choice PHT214から読み出されたカウンタ値は、閾値よりも大きいか否か(カウンタ値≧閾値の関係を満たすか否か)を判断する。ステップS15において、Choice PHT214から読み出されたカウンタ値は、閾値よりも大きいと判断された場合、ステップS16に処理が進められる。ステップS16において、選択部217は、Taken PHT215からのカウンタ値を、選択部219に出力する。
一方、ステップS15において、Choice PHT214から読み出されたカウンタ値は、閾値よりも小さいと判断された場合、ステップS17に処理が進められる。ステップS17において、選択部217は、Untaken PHT216から読み出されたカウンタ値を、選択部219に出力する。このようにして、選択部219には、Taken PHT215から読み出されたカウンタ値か、または、Untaken PHT216から読み出されたカウンタ値の、どちらか一方のカウンタ値が、Choice PHT214から読み出されたカウンタ値に応じて供給される。
選択部219は、選択部217からのカウンタ値を入力すると、ステップS18において、その入力されたカウンタ値は、安定状態を示しているか否かを判断する。上記したように、安定状態とは、2ビットの飽和型カウンタが用いられている場合、カウンタ値の値が、3または0のときである。ステップS18の処理を換言すれば、供給されたカウンタ値は、3または0であるか否かを判断する処理である。勿論、不安定状態(カウンタ値が2または1)であるか否かが判断されるようにしても良い。
ステップS18において、供給されたカウンタ値は、安定状態を示していると判断された場合、ステップS19に処理が進められる。ステップS19において、選択部219は、選択部217から供給されたカウンタ値を、予測結果を示すカウンタ値として決定する。ステップS20において、予測結果を示すカウンタ値として決定されたカウンタ値は、閾値よりも大きいか否かが判断される。ステップS20において、カウンタ値は閾値よりも大きいと判断された場合、ステップS21において、分岐は成立するという最終的な予測結果が、選択部219からインストラクションキャッシュ62(図4)に出力される。
一方、ステップS20において、カウンタ値は閾値よりも小さいと判断された場合、ステップS22において、分岐は不成立するという最終的な予測結果が、選択部219からインストラクションキャッシュ62(図4)に出力される。このように、安定状態のときには、選択部217から供給されるカウンタ値が、予測結果を示すカウンタ値として採用される。
一方、不安定状態であると判断された場合、すなわちこの場合、ステップS18において、選択部219が、選択部217から供給されたカウンタ値は、不安定状態を示していると判断した場合、ステップS23に処理が進められる。ステップS23において、選択部218(予測結果候補生成部204(図5))は、Choice PHT214、Taken PHT215、および、Untaken PHT216からそれぞれ供給されたカウンタ値を用いた演算を行う。ここでは、その演算は、カウンタ値の多数決(カウンタ値が示す予測結果の多数決)を採ることにより行われるとする。
各PHTから供給されたカウンタ値は、分岐成立、または、分岐不成立を示しているわけであるが、選択部218は、分岐成立を示しているカウンタ値が多いか、または、分岐不成立を示しているカウンタ値が多いか否かを判断することにより、多数決を採る。選択部218による多数決の結果は、選択部219に供給される。また、選択部219に供給される演算結果は、予測結果を示すカウンタ値として決定される。
決定されたカウンタ値は、ステップS20において、閾値より大きいか否かが判断される。このステップS20以下の処理については、既に説明したので、ここではその説明を省略する。
このように、不安定状態のときには、選択部218から供給されるカウンタ値が、予測結果を示すカウンタ値として採用される。この不安定状態のときに採用されるカウンタ値は、3つのテーブルから読み出されたカウンタ値が考慮されたものである。よって、上記したように、不安定状態のときには、安定状態のときと比べて、予測精度が低下する恐れがあったが、不安定状態のときには3つのテーブルからのカウンタ値を考慮して予測を行うことにより、不安定状態のときであっても、予測精度を低下させることなく、分岐予測を行うことが可能となる。
[効果]
予測部61を、上記したような構成、動作することにより、従来と比較し、以下のような差異があり、その差異のために、以下のような効果がある。
従来(例えば、予測部61が図2示すような構成とされていた場合)、個々の予測結果を生成する際、Taken PHT215(図2のTaken PHT25に対応)からのカウンタ値か、Untaken PHT216(図2のUntaken PHT26に対応)からのカウンタ値のどちらか一方を選択するためだけに、Choice PHT214(図2のChoice PHT24に対応)からのカウンタ値が用いられていた。しかしながら、図6に示したように、選択部217と選択部219(不安定状態検知部203(図5))により不安定状態を検知し、不安定状態であると検知されたときには、Choice PHT214、Taken PHT215、Untaken PHT216からそれぞれ読み出されるデータが用いられて予測結果の候補が生成されるため、Choice PHT214からのデータも、予測結果の候補の生成に反映されることになる。
また従来(例えば、予測部61が図2示すような構成とされていた場合)、Taken PHT215からのデータが予測結果として採用されるときには、Untaken PHT216からのデータは、参照されることがなく、逆に、Untaken PHT216からのデータが予測結果として採用されるときには、Taken PHT215からのデータは、参照されることがなかった。このことは、予測結果として採用されるデータは、予測結果として採用されないデータに影響されることはないということを示していた。
しかしながら、不安定状態と判定された場合、例えば、Untaken PHT216からのデータが不安定状態で分岐成立と予測されたとき、短い時間の後に、Taken PHT215からのデータが予測結果として採用される可能性は高かった。このため、不安定状態の場合には、Taken PHT215のデータとUntaken PHT216のデータの両方のパターン履歴表に、当該分岐命令の情報が格納されている確率が高いと考えられる。
すなわち、このことを換言すれば、予測結果として採用されるデータは、予測結果として採用されないデータに影響されることがあるということが示されている。
このようなことを考慮し、本実施の形態における予測部61は、上記したように、不安定状態であると判断されるときには、Choice PHT214、Taken PHT215、Untaken PHT216からのデータが用いられて予測結果の候補が生成される。予測結果の候補は、上記したように、Choice PHT214、Taken PHT215、Untaken PHT216からのデータが示す予測結果において、2つ以上のパターン履歴表から生成した出力とされるようにしたので、各PHTから読み出されるデータを考慮した(互いに影響が与えられた)予測結果が生成される。
よって、複数のテーブルのデータを効率良く利用し、精度良く予測結果を生成することが可能となる。特に不安定状態のときの予測結果を高めることが可能となり、安定状態も含めた予測結果全体の精度を高めることが可能となる。
[予測部61の予測精度について]
ここで、上記したような処理を行う予測部61によれば、不安定状態のときでも予測精度が低下せず、そのために、安定状態、不安定状態にかかわらず、常に予測精度を高めることが可能になるということを、図8を参照して実証する。
図8は、従来手法のBimode予測器(例えば、図2の構成を有する予測器)と、上記した予測部61との予測精度を比較したときのグラフである。図8のグラフは、ベンチマークとして、SpecINTの5本を利用し、それらの平均により予測精度を計算した結果を示している。図8において縦軸は、1000命令当たりの予測ミスの回数(Mispredictions Per Kilo Instructions)を示し、図中下の方ほど性能が高くなることを示している。図8において横軸は、ハードウェア量を示す。
図8の結果より、全てのハードウェア量の構成において、本発明を適用した予測部61の方が、従来手法のBimode予測器よりも、予測精度が高いことがわかる。Bimode予測器と予測部61を比較すると、予測部61を用いることにより、Bimode予測器よりも、3KBと6KBのハードウェア量の構成において1.5%程度の予測ミスを削減することが可能となることがわかる。また、同様に、12KB、24KB、48KBの構成では、それぞれ0.9%、1.5%。1.3%の予測ミスを削減することが可能となることがわかる。
このように、本発明を適用すれば、予測部61の予測精度を高くすることができるということが実証される。
[カウンタ値の更新について]
上記した予測部61は、2ビットの飽和型カウンタを用い、図3に示すように状態遷移(カウンタ値が変化)するとして説明した。図9のフローチャートを参照し、予測部61の飽和型カウンタのカウンタ値の更新に係わる処理について説明する。
ステップS41において、インデックスA,B,Cが計算される。このステップS41におけるインデックスの計算は、図7のフローチャートのステップS11におけるインデックスの計算と同様に行われる。ステップS42においてインデックスAが用いられ、Choice PHT214(図6)のカウンタ値が参照される。その参照されたカウンタ値が閾値よりも大きいか否かが、ステップS43において判断される。
ステップS43において、Choice PHT214から参照されたカウンタ値は、閾値よりも大きいと判断された場合、ステップS44において、インデックスBが用いられ、Taken PHT215のカウンタ値が更新される。一方、ステップS43において、Choice PHT214から参照されたカウンタ値は、閾値よりも小さいと判断された場合、ステップS45において、インデックスCが用いられ、Untaken PHT216のカウンタ値が更新される。
このように、Choice PHT214から参照されたカウンタ値が閾値よりも大きいと判断された場合、すなわち、分岐予測は成立する傾向にあると判断された場合、Taken PHT215のカウンタ値が更新され、Choice PHT214から参照されたカウンタ値が閾値よりも小さいと判断された場合、すなわち、分岐予測は成立しない傾向にあると判断された場合、Untaken PHT216のカウンタ値が更新される。
このようにして、Taken PHT215またはUntaken PHT216のどちらか一方のカウンタ値が更新されると、ステップS46において、インデックスAが用いられて、Choice PHT214のカウンタ値が更新される。このようにして、各PHTのカウンタ値が更新される。
[他の構成例]
図10は、予測部61の他の構成例を示す図である。予測部61を構成する各部は、図6に示した予測部61を構成する各部と同様であり、図10においては、同一の符号を付し、そのことを示している。図6に示した予測部61と図10に示した予測部61の差異は、Choice PHT214を参照するためのインデックスが、図6においては、XOR回路213から供給されているが、図10においては、Program Counter211から供給されている。
このように、Choice PHT214を参照するインデックスは、Program Counter211からのデータとBHR212からのデータの排他的論理和でも良いし(図6の構成)、プログラムカウンタ211からのデータをそのまま用いても良い(図10の構成)。また、予測部61を、図10のように構成した場合においても、その動作は、図7や図9のフローチャートを参照して説明した場合と同様に行われるため、その説明は省略する。
予測部61の構成として、どちらの構成を採用するかは、適宜設計の段階などで考慮されれば良い。
なお、上述した実施の形態においては、予測部61は、分岐予測を行うとして説明したが、本発明は、分岐予測を行う予測部(予測器)のみに適用が限定されることを示したのではない。例えば、本発明は、データをロード(LOAD)するとき、そのデータがキャッシュ(Cache)内に存在する(Hit)か存在しない(miss)かを判断する際などに適用することも可能である。
また、上述した実施の形態においては、2ビットの飽和型カウンタが用いられる場合を例に挙げて説明したが、Nビットの飽和型カウンタが用いられた場合にも、本発明を適用することは可能である。Nビットの飽和型カウンタが用いられて、例えば、図6に示した予測部61の各PHTが構成されている場合、不安定状態の範囲を示す上限または下限の値と、選択されたNビット飽和型カウンタからのカウンタ値が比較されるように構成されれば良い。
本発明は、供給または生成されたインデックスにより、所定のテーブル(履歴テーブル)が参照されることにより、0か1かなどの選択的な決定(予測)を行う際に適用することが可能である。
61 予測部, 201 インデックス供給部, 202 テーブル保持部, 203 不安定状態検知部, 204 予測結果候補生成部, 205 選択部, 211 Program Counter, 212 BHR, 213 XOR回路, 214 Choice PHT, 215 Taken PHT, 216 Untaken PHT, 217乃至S219 選択部