(57)【要約】【課題】  予測精度を向上させる。【解決手段】  インデックス供給部２０１から供給されるインデックスにより、テーブル保持部２０２に保持されるテーブルが参照される。各テーブルは飽和型カウンタで構成されている。不安定状態検知部２０３は、所定のテーブルからのカウンタ値が、閾値に近い値であるとき、そのような状態は不安定状態であるとして検知する。予測結果候補生成部２０４は、予測結果として複数の選択候補を、各テーブルから読み出されたカウンタ値から生成する。選択部２０５は、不安定状態検知部２０３が、不安定状態を検知した場合、複数のテーブルから読み出されたカウンタ値の多数決が採られた結果を、予測結果として選択し、出力する。本発明は、プロセッサに適用することができる。【選択図】図５
2006163548.tif 000002
【特許請求の範囲】
【請求項１】
命令毎に成立／不成立の状況を履歴として記憶する第一のパターン履歴記憶手段と、
成立と予測された場合における成立／不成立の状況を履歴として記憶する第二のパターン履歴記憶手段と、
不成立と予測された場合における成立／不成立の状況を履歴として記憶する第三のパターン履歴記憶手段と、
前記第二のパターン履歴記憶手段からの出力又は前記第三のパターン履歴記憶手段からの出力に対応して、前記第二のパターン履歴記憶手段又は前記第三のパターン履歴記憶手段からの出力により、あるいは前記第二のパターン履歴記憶手段と前記第三のパターン履歴記憶手段と前記第一のパターン履歴記憶手段とからの出力により、成立／不成立の予測の決定を行う決定手段と
を有することを特徴とする不安定状態を利用する予測器。
【請求項２】
前記決定手段は、
前記第一のパターン履歴記憶手段からの出力に基づいて、前記第二のパターン履歴記憶手段からの出力又は前記第三のパターン履歴記憶手段からの出力のいずれか一方を選択する第一の選択手段と、
前記第一のパターン履歴記憶手段、前記第二のパターン履歴記憶手段及び前記第三のパターン履歴記憶手段からの出力を用いて演算を行う演算手段と、
前記第一の選択手段からの出力に基づいて、前記選択手段により選択された出力又は前記演算手段により演算された出力のいずれか一方を選択する第二の選択手段と
を有することを特徴とする請求項１に記載の不安定状態を利用する予測器。
【請求項３】
前記第一の選択手段からの出力が、所定の範囲内の値である場合、不安定状態であると判断し、所定の範囲内の値ではない場合、安定状態であると判断する判断手段を
さらに有することを特徴とする請求項２に記載の不安定状態を利用する予測器。
【請求項４】
前記第二の選択手段は、
前記判断手段が、安定状態であると判断した場合、前記選択手段からの出力を選択し、前記判断手段が、不安定状態であると判断した場合、前記演算手段からの出力を選択する
ことを特徴とする請求項３の不安定状態を利用する予測器。
【請求項５】
プログラムカウンタと、
全命令の成立／不成立の状況を順次履歴として記憶する履歴レジスタと、
前記プログラムカウンタからの出力及び前記履歴レジスタからの出力に基づいてインデックスを生成する生成手段と
を備え、
前記生成手段により生成されたインデックスに基づいて、前記第一のパターン履歴記憶手段、前記第二のパターン履歴記憶手段及び前記第三のパターン履歴記憶手段からの出力が行われる
ことを特徴とする請求項１から請求項４のいずれか１項に記載の不安定状態を利用する予測器。
【請求項６】
プログラムカウンタと、
全命令の成立／不成立の状況を順次履歴として記憶する履歴レジスタと、
前記プログラムカウンタからの出力及び前記履歴レジスタからの出力に基づいてインデックスを生成する生成手段と
を備え、
前記生成手段により生成されたインデックスに基づいて、前記第二のパターン履歴記憶手段及び前記第三のパターン履歴記憶手段からの出力が行われ、
前記プログラムカウンタからの出力に基づいて、前記第一のパターン履歴記憶手段からの出力が行われる
ことを特徴とする請求項１から請求項４のいずれか１項に記載の不安定状態を利用する予測器。
【請求項７】
前記生成手段は、排他的論理和による演算を行う排他的論理和回路である
ことを特徴とする請求項４又は請求項５に記載の不安定状態を利用する予測器。
【請求項８】
命令毎に成立／不成立の状況を履歴として記憶する第一のパターン履歴記憶手段と、
成立と予測された場合における成立／不成立の状況を履歴として記憶する第二のパターン履歴記憶手段と、
不成立と予測された場合における成立／不成立の状況を履歴として記憶する第三のパターン履歴記憶手段と、
前記第二のパターン履歴記憶手段からの出力又は前記第三のパターン履歴記憶手段からの出力に対応して、前記第二のパターン履歴記憶手段又は前記第三のパターン履歴記憶手段からの出力により、あるいは前記第二のパターン履歴記憶手段と前記第三のパターン履歴記憶手段と前記第一のパターン履歴記憶手段とからの出力により、成立／不成立の予測の決定を行う決定手段と、
前記決定手段により予測の決定に基づく処理を実行する実行手段と
を有することを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不安定状態を利用する予測器、プロセッサに関し、特に、例えば、分岐予測などを行う際に適用して好適な不安定状態を利用する予測器、プロセッサに関する。
【背景技術】
【０００２】
近年のマイクロプロセッサは、命令発行幅の増大による命令レベル並列性の利用と命令パイプライン長の増大による動作周波数の向上により高い性能を達成している。このことは、プロセッサ内で処理されている命令の数が増加する傾向にあることを示している。このため、無駄となる不要な仕事（ペナルティ）の量が増加する傾向にある。このようなペナルティの発生する１要因として、分岐命令がある。
【０００３】
分岐命令によるペナルティを軽減するために、予め分岐する方向を予測し、予測に基づいたアドレスの命令をパイプラインに詰めるようにする。このように分岐する方向を予測することは、一般に分岐予測などと称され、そのような分岐予測を行う装置は、分岐予測器などと称されることがある。高性能のプロセッサを実現する１要因として、精度の高い分岐予測器を用いることがある。
【０００４】
分岐予測器の精度を向上させるために、様々な分岐予測器が提案されている。例えば、図１に示すような構成を有するGshare予測器が提案されている（非特許文献１参照）。Gshare予測器は、プログラムカウンタ（Program Counter）１１、ＢＨＲ（Branch History Register）１２、ＸＯＲ（exclusive OR）回路１３、ＰＨＴ（Pattern History Table）１４を備える構成とされている。
【０００５】
プログラムカウンタ１１は、分岐命令のアドレスを発生し、そのアドレスをＸＯＲ回路１３に供給する。ＢＨＲ１２は、グローバル分岐履歴レジスタなどと称され、最近の分岐の実行結果の履歴を保持し、プログラムカウンタ１１から分岐命令のアドレスがＸＯＲ回路１３に供給されるタイミングで、その保持している履歴をＸＯＲ回路１３に供給する。
【０００６】
ＸＯＲ回路１３は、供給されたプログラムカウンタと履歴のデータとの排他的論理和を演算する。ＸＯＲ回路１３により演算された排他的論理和の値は、ＰＨＴ（パターン履歴表）へのインデックスとして用いられる。ＰＨＴ１４は、２ビット飽和型カウンタのテーブルであり、分岐が成立しやすいか、または、分岐が成立しづらいかを示すデータ（カウンタ値）を保持している。Gshare予測器では、インデックスによりＰＨＴ１４から選択された２ビット飽和型カウンタのカウンタ値により分岐方向が予測される。
【０００７】
しかしながら、Gshare予測器では、破壊的競合が発生する可能性が高く、その可能性を低くするために、Bimode予測器というのが提案されている（非特許文献２参照）。図２は、Bimode予測器の構成を示す図である。Bimode予測器は、プログラムカウンタ２１、ＢＨＲ２２、ＸＯＲ回路２３、Choice PHT２４、Taken PHT２５、Untaken PHT２６、および、選択部２７を備える構成とされている。
【０００８】
このように、Bimode予測器は、Choice PHT２４、Taken PHT２５、Untaken PHT２６という３つのテーブルを備えることを特徴とし、これらの３つのパターン履歴表を利用して予測を行う。
【０００９】
Choice PHT２４は、２ビット飽和型カウンタのテーブルであり、プログラムカウンタ２１が発生する分岐命令のアドレスが用いられて参照される。プログラムカウンタ２１が発生するアドレスと、ＢＨＲ２２が発生するアドレスは、共にＸＯＲ回路２３に供給され、ＸＯＲ回路２３により算出された排他的論理和がインデックスとされ、Taken PHT２５とUntaken PHT２６が参照される。Taken PHT２５とUntaken PHT２６は、それぞれ２ビット飽和型カウンタで構成されている。
【００１０】
Taken PHT２５とUntaken PHT２６からそれぞれ読み出されたカウンタ値は、選択部２７に供給される。選択部２７は、Choice PHT２４から供給されたカウンタ値が分岐成立の予測を示している場合には、Taken PHT２５から供給されたカウンタ値を出力し、Choice PHT２４から供給されたデータが分岐不成立の予測を示している場合には、Untaken PHT２６から供給されたカウンタ値を出力する。
【００１１】
Bimode予測器は、選択部２７から出力されたデータを用いて予測を行う。図２に示したBimode予測器のChoice PHT２４、Taken PHT２５、Untaken PHT２６という３つの履歴表のエントリは、２ビット飽和型カウンタで構成されている。この２ビット飽和型カウンタの状態遷移と予測の関係について図３を参照して説明する。
【００１２】
２ビットの飽和型カウンタの場合、カウンタ値として、０，１，２，３（２進数では表すと、００，０１，１０，１１）のいずれかが設定される。図３においては、カウンタ値を（）内に示している。またここでは、カウンタ値が０の場合、Strongly Untaken（強不成立）とし、カウンタ値が２の場合、Likely Untaken（不成立）とし、カウンタ値が２の場合、Likely Taken（成立）とし、カウンタ値が３の場合、Strongly Taken（強成立）として説明する。
【００１３】
予測が成立の場合、カウンタ値はインクリメント（increment）され、不成立の場合、カウンタ値はデクリメント（decrement）される。例えば、Likery Taken（カウンタ値は２）の状態のときに、予測が成立した場合、Strongly Takenの状態に移行されるため、カウンタ値は、３にインクリメントされる。逆に、例えば、Likery Taken（カウンタ値は２）の状態のときに、予測が不成立であった場合、Likery Untakenの状態に移行されるため、カウンタ値は、２にデクリメントされる。
【００１４】
また、飽和型カウンタであるため、例えば、Strongly Taken（カウンタ値は３）の状態のときに、予測が成立した場合、Strongly Takenの状態が維持され、カウンタ値は３のままである。同様に、Strongly Untaken（カウンタ値は０）の状態のときに、予測が不成立した場合、Strongly Untakenの状態が維持され、カウンタ値は０のままである。
【００１５】
このように、カウンタ値（状態）が、予測の成立、不成立に対応して変化する。Bimode予測器では、このようにカウンタ値が変化する２ビットの飽和型カウンタのカウンタ値が、２以上のとき（すなわち、Strongly Taken（３）またはLikery Taken（２）のとき）に分岐成立と予測され、１以下のとき（すなわち、Strongly Untaken（０）またはLikery Untaken（１）のとき）に分岐不成立と予測される。
【００１６】
プロセッサなどに組み込まれる予測器として、上記したような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.
【発明の開示】
【発明が解決しようとする課題】
【００１７】
上述したように、飽和型カウンタのカウンタ値と、予測される結果には、密接な関係がある。そこで、カウンタ値と、予測（予測値）との関係に注目して説明する。上述した２ビットの飽和型カウンタの例の場合、閾値を１とし、閾値より飽和型カウンタのカウンタ値が大きい場合（上記した例では３または２の場合）、分岐成立と予測され、閾値より飽和型カウンタのカウンタ値が小さい場合（上記した例では１または０の場合）、分岐不成立と予測されるとして説明した。
【００１８】
例えば、カウンタ値が３のStrongly Takenの状態のときに、予測結果が分岐成立であれば、カウンタ値に変化はなく、閾値以上の状態が維持され、Strongly Takenの状態が維持されため、予測結果は、分岐成立の状態が維持されることになる。また、予測結果が分岐不成立であり、カウンタ値が２に変更され、Likely Takenの状態に変更されても、閾値以上の状態が維持されるので、予測結果は、分岐成立の状態が維持されることになる。よって、Strongly Takenの状態のときには、分岐が成立であっても不成立であっても、カウンタ値は閾値以上の状態が維持されるので、予測結果は、分岐成立とされる状態が維持されることになる。
【００１９】
これに対し、カウンタ値が２のLikely Takenの状態のときに、予測結果が分岐成立であれば、カウンタ値が３に変更され、Strongly Takenの状態に変更されるが、閾値以上の状態が維持されるため、予測結果は分岐成立の状態が維持されることになる。しかしながら、Likely Takenの状態のときに、予測結果が分岐不成立であると、カウンタ値は１に変更され、Likely Untakenの状態に変更されるため、閾値以下の状態になり、予測結果が、分岐不成立とされる状態に遷移することになる。このように、Likely Takenの状態のときには、分岐が成立の場合と不成立の場合とで、状態が変化し、閾値をまたぐことになるため、予測結果は、分岐成立または分岐不成立となる。
【００２０】
すなわち、Strongly Takenのような飽和型カウンタのカウンタ値が閾値より遠い値の状態の場合、予測結果は分岐成立という同一の結果になるが、Likely Takenのような飽和型カウンタのカウンタ値が閾値より近い値の状態の場合、予測結果は分岐成立または不成立という異なる結果が出ることになる。このようなことは、Likely Untakenの状態やStrongly Untakenの状態のときにも同一にいえることである。
【００２１】
このようなことを換言すれば、カウンタ値が閾値に遠い状態の場合、状態が変化しにくく、予測結果が変化しにくい安定した状態であり、カウンタ値が閾値に近い状態の場合、状態が変化しやすく、予測結果が変化しやすい不安定な状態である。以下の説明においては、飽和型カウンタのカウンタ値が閾値に遠い値の状態のことを、安定状態と適宜記述し、飽和型カウンタのカウンタ値が閾値に近い値の状態のことを、不安定状態と適宜記述する。
【００２２】
上記したBimode予測器において、安定状態の場合と不安定状態の場合とで、予測精度を測定すると、不安定状態の方が、安定状態のときと比べて、予測精度が低下するということが確認されている。不安定状態のときにも、予測精度が低下しないように改善することは、予測器自体の精度を向上させるために必要であるという課題があった。
【００２３】
本発明はこのような状況に鑑みてなされたものであり、不安定状態を検知し、不安定状態のときでも、安定状態のときと同程度またはそれ以上に精度良く予測を行えるようにすることを目的とする。
【課題を解決するための手段】
【００２４】
本発明の不安定状態を利用する予測器は、命令毎に成立／不成立の状況を履歴として記憶する第一のパターン履歴記憶手段と、成立と予測された場合における成立／不成立の状況を履歴として記憶する第二のパターン履歴記憶手段と、不成立と予測された場合における成立／不成立の状況を履歴として記憶する第三のパターン履歴記憶手段と、第二のパターン履歴記憶手段からの出力又は第三のパターン履歴記憶手段からの出力に対応して、第二のパターン履歴記憶手段又は第三のパターン履歴記憶手段からの出力により、あるいは第二のパターン履歴記憶手段と第三のパターン履歴記憶手段と第一のパターン履歴記憶手段とからの出力により、成立／不成立の予測の決定を行う決定手段とを有することを特徴とする。
【００２５】
前記決定手段は、第一のパターン履歴記憶手段からの出力に基づいて、第二のパターン履歴記憶手段からの出力又は第三のパターン履歴記憶手段からの出力のいずれか一方を選択する第一の選択手段と、第一のパターン履歴記憶手段、第二のパターン履歴記憶手段及び第三のパターン履歴記憶手段からの出力を用いて演算を行う演算手段と、第一の選択手段からの出力に基づいて、選択手段により選択された出力又は演算手段により演算された出力のいずれか一方を選択する第二の選択手段とを有するようにすることができる。
【００２６】
前記第一の選択手段からの出力が、所定の範囲内の値である場合、不安定状態であると判断し、所定の範囲内の値ではない場合、安定状態であると判断する判断手段をさらに備えるようにすることができる。
【００２７】
前記第二の選択手段は、判断手段が、安定状態であると判断した場合、選択手段からの出力を選択し、判断手段が、不安定状態であると判断した場合、演算手段からの出力を選択するようにすることができる。
【００２８】
プログラムカウンタと、全命令の成立／不成立の状況を順次履歴として記憶する履歴レジスタと、プログラムカウンタからの出力及び履歴レジスタからの出力に基づいてインデックスを生成する生成手段とを備え、生成手段により生成されたインデックスに基づいて、第一のパターン履歴記憶手段、第二のパターン履歴記憶手段及び第三のパターン履歴記憶手段からの出力が行われるようにすることができる。
【００２９】
プログラムカウンタと、全命令の成立／不成立の状況を順次履歴として記憶する履歴レジスタと、プログラムカウンタからの出力及び履歴レジスタからの出力に基づいてインデックスを生成する生成手段とを備え、生成手段により生成されたインデックスに基づいて、第二のパターン履歴記憶手段及び第三のパターン履歴記憶手段からの出力が行われ、プログラムカウンタからの出力に基づいて、第一のパターン履歴記憶手段からの出力が行われるようにすることができる。
【００３０】
前記生成手段は、排他的論理和による演算を行う排他的論理和回路であるようにすることができる。
【００３１】
本発明のプロセッサは、命令毎に成立／不成立の状況を履歴として記憶する第一のパターン履歴記憶手段と、成立と予測された場合における成立／不成立の状況を履歴として記憶する第二のパターン履歴記憶手段と、不成立と予測された場合における成立／不成立の状況を履歴として記憶する第三のパターン履歴記憶手段と、第二のパターン履歴記憶手段からの出力又は第三のパターン履歴記憶手段からの出力に対応して、第二のパターン履歴記憶手段又は第三のパターン履歴記憶手段からの出力により、あるいは第二のパターン履歴記憶手段と第三のパターン履歴記憶手段と第一のパターン履歴記憶手段とからの出力により、成立／不成立の予測の決定を行う決定手段と、決定手段により予測の決定に基づく処理を実行する実行手段とを有することを特徴とする。
【００３２】
本発明の不安定状態を利用する予測器、及び、その予測器を含むプロセッサにおいては、命令毎に成立／不成立の状況が記憶され、成立と予測された場合における成立／不成立の状況が記憶され、不成立と予測された場合における成立／不成立の状況が記憶される。そして、それらの記憶されている情報を基に予測の決定が行われる。
【発明の効果】
【００３３】
本発明によれば、分岐予測を行うことができる。
【００３４】
本発明によれば、分岐予測をより精度良く行うことができる。精度良く分岐予測を行えるようにしても、本発明を適用すれば、その予測を行う装置の構成が複雑になるようなことを防ぐことが可能となる。
【発明を実施するための最良の形態】
【００３５】
以下に本発明の最良の形態を説明するが、開示される発明と実施の形態との対応関係を例示すると、次のようになる。明細書中には記載されているが、発明に対応するものとして、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その発明に対応するものではないことを意味するものではない。逆に、実施の形態が発明に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その発明以外の発明には対応しないものであることを意味するものでもない。
【００３６】
さらに、この記載は、明細書に記載されている発明の全てを意味するものではない。換言すれば、この記載は、明細書に記載されている発明であって、この出願では請求されていない発明の存在、すなわち、将来、分割出願されたり、補正により出現し、追加されたりする発明の存在を否定するものではない。
【００３７】
本発明の不安定状態を利用する予測器は、命令毎に成立／不成立の状況を履歴として記憶する第一のパターン履歴記憶手段（例えば、図６のChoice ＰＨＴ２１４）と、成立と予測された場合における成立／不成立の状況を履歴として記憶する第二のパターン履歴記憶手段（例えば、図６のTaken ＰＨＴ２１５）と、不成立と予測された場合における成立／不成立の状況を履歴として記憶する第三のパターン履歴記憶手段（例えば、図６のUntaken ＰＨＴ２１６）と、第二のパターン履歴記憶手段からの出力又は第三のパターン履歴記憶手段からの出力に対応して、第二のパターン履歴記憶手段又は第三のパターン履歴記憶手段からの出力により、あるいは第二のパターン履歴記憶手段と第三のパターン履歴記憶手段と第一のパターン履歴記憶手段とからの出力により、成立／不成立の予測の決定を行う決定手段とを有することを特徴とする。
【００３８】
前記決定手段は、第一のパターン履歴記憶手段からの出力に基づいて、第二のパターン履歴記憶手段からの出力又は第三のパターン履歴記憶手段からの出力のいずれか一方を選択する第一の選択手段（例えば、図６の選択部２１７）と、第一のパターン履歴記憶手段、第二のパターン履歴記憶手段及び第三のパターン履歴記憶手段からの出力を用いて演算を行う演算手段（例えば、図６の選択部２１８）と、第一の選択手段からの出力に基づいて、選択手段により選択された出力又は演算手段により演算された出力のいずれか一方を選択する第二の選択手段（例えば、図６の選択部２１９）とを有するようにすることができる。
【００３９】
前記第一の選択手段からの出力が、所定の範囲内の値である場合、不安定状態であると判断し、所定の範囲内の値ではない場合、安定状態であると判断する判断手段（例えば、図６の選択部２１９）をさらに備えるようにすることができる。
【００４０】
本発明のプロセッサは、命令毎に成立／不成立の状況を履歴として記憶する第一のパターン履歴記憶手段（例えば、図６のChoice ＰＨＴ２１４）と、成立と予測された場合における成立／不成立の状況を履歴として記憶する第二のパターン履歴記憶手段（例えば、図６のTaken ＰＨＴ２１５）と、不成立と予測された場合における成立／不成立の状況を履歴として記憶する第三のパターン履歴記憶手段（例えば、図６のUntaken ＰＨＴ２１６）と、第二のパターン履歴記憶手段からの出力又は第三のパターン履歴記憶手段からの出力に対応して、第二のパターン履歴記憶手段又は第三のパターン履歴記憶手段からの出力により、あるいは第二のパターン履歴記憶手段と第三のパターン履歴記憶手段と第一のパターン履歴記憶手段とからの出力により、成立／不成立の予測の決定を行う決定手段（例えば、図６の選択部２１９）と、決定手段により予測の決定に基づく処理を実行する実行手段（例えば、図４のインストラクションキャッシュ６２）とを有することを特徴とする。
【００４１】
以下に、本発明の実施の形態について図面を参照して説明する。
【００４２】
［プロセッサの内部構成例］
図４は、本発明を適用するプロセッサの一実施の形態の構成を示す図である。以下の説明においては、本発明をプロセッサに適用した場合を例に挙げて説明するが、本発明がプロセッサのみに適用できるということを限定しているものではない。また、以下の説明においては、本発明が、プロセッサ内で分岐予測を行う予測器に適用された場合を例に挙げて説明するが、予測器以外にも本発明を適用できる。
【００４３】
図４に示したプロセッサ５０は、フェッチ（Fetch）部５１、キュー（queue）部５２、リネーム（Rename）部５３、発行（Issue）部５４、レジスタリード（Register Read）部５５、実行（Execute）部５６、記憶部（Memory）５７、および出力部（Interface）５８から構成されている。図４に示したプロセッサ５０は、このような構成を有し、パイプライン処理を実行する。
【００４４】
フェッチ部５１は、予測部６１とインストラクションキャッシュ（Instruction Cache）６２を含む構成とされている。予測部６１は、例えば、図５を参照して後述するような構成を有し、分岐予測を行う。予測部６１による予測結果は、必要に応じ、インストラクションキャッシュ６２に供給される。インストラクションキャッシュ６２は、必要の応じ、予測結果を用い、インストラクションをフェッチする（命令を読み出す）。
【００４５】
読み出されたインストラクションは、キュー部５２を介して、リネーム部５３に供給される。リネーム部５３は、整数レジスタリネーミング（Integer Register Rename）部７１と浮動小数点レジスタリネーミング（Floating Point Register Rename）部７２を含む構成とされている。読み出されたインストラクションは、キュー部５２により、整数キューと浮動小数点キューに関連付けられたスロットに割り当てられる。そして、整数キューに割り当てられたインストラクションは整数レジスタリネーミング部７１に供給され、浮動小数点キューに割り当てられたインストラクションは、浮動小数点レジスタリネーミング部７２に供給される。
【００４６】
整数レジスタリネーミング部７１と浮動小数点レジスタリネーミング部７２は、それぞれ供給されたインストラクションに対し、仮想レジスタを、内部の物理レジスタにマッピングすることにより、インストラクションの結果を格納するのために新しい物理レジスタを割り当てる。その割り当てに従って、インストラクションは、発行部５４に対応する部分に供給される。
【００４７】
発行部５４は、整数発行部（Integer Issue Queue）８１と浮動小数点発行部（Floating Point Issue Queue）８２を含む構成とされている。整数発行部８１と浮動小数点発行部８２は、インストラクションを発行するために設けられている。この発行部５４により発行されたインストラクションは、レジスタリード部５５を介して実行部５６に供給される。
【００４８】
レジスタリード部５５は、整数レジスタファイル（Integer Register File）部９１と浮動小数点レジスタファイル（Floating Point Register file）部９２を含む構成とされている。また、実行部５６は、整数演算（Integer Execution）部１０１と浮動小数点演算（Floating Point Multiply/Add Execution）部１０２を含む構成とされている。なお、例えば、整数レジスタファイル部９１などは、同様な処理を行う複数の部分から構成される。他の部分も必要に応じ、同様な処理を行う複数の部分から構成される。
【００４９】
発行部５４、レジスタリード部５５、および、実行部５６は、実行待ちのインストラクションのリストを管理し、命令依存、オペランド依存が発生した場合には、その依存関係が解決するまで命令の実行を保留し、依存関係が無い命令は、記述順序を飛び越えて先行実行するように構成されている。
【００５０】
例えば、整数発行部８１により発行された命令（インストラクション）は、一旦、整数レジスタファイル９１に蓄えられる（バッファリングされる）とともに、既にバッファリングされている命令のオペランドの依存関係と整数演算部１０１の空き具合が１クロック毎に検査される。そして、依存関係に問題がない命令から整数演算部１０１に割り当てられ、処理される。処理された命令は記憶部５７のキャッシュ１１１に供給され、キャッシュ１１１から出力部５８としてのインタフェース１２１を介してプロセッサ５０の外部に出力される。
【００５１】
このようにしてプロセッサ５０においては、命令に対して処理がなされる。命令の中には、分岐命令がある。例えば、パイプライン処理において、ジャンプ（無条件分岐）の命令をパイプラインに詰める前に、ジャンプ命令の次のアドレスの命令を１命令分誤ってパイプラインに詰めてしまったような場合、この処理は無効であり、結果として１命令分のパイプラインの無駄（ペナルティ）が生じることになる。
【００５２】
このようなペナルティを軽減するために、予め分岐する方向を予測し、予測に基づいたアドレスの命令をパイプラインに詰めるようにする。このような分岐する方向を予測することは一般に分岐予測などと称され、図４においては、予測部６１が行う。予測部６１の予測は、無駄な処理が実行されない（処理の高速化を妨げるようなことを防ぐ）ためには、精度良く行われることが望ましい。
【００５３】
精度良く予測を行うために、本実施の形態においては、予測部６１を、図５や図６に示すような構成とする。
【００５４】
［予測部の構成例］
以下の説明において予測部６１は、分岐予測を行う場合を例に挙げて説明するため、例えば、Branch History Register（ＢＨＲ：分岐履歴レジストリ）２１２（図６）とするが、後述するように、予測部６１の構成、動作は、分岐予測のみに、その構成、動作が限定されることを示しているのではない。
【００５５】
図５は、予測部６１の機能を示す図である。予測部６１のインデックス供給部２０１は、テーブル保持部２０２に保持されているテーブルを参照するためのインデックス（アドレス）を発行し、テーブル保持部２０２に供給する。ここでは、インデックスは、予測部６１により発行（生成）されるとして説明するが、インデックス自体は、予測部６１以外の部分から供給され、予測部６１自体は、その供給されるインデックスを取得（入力）するような構成にすることも勿論可能である。またここでは、インデックスと表記するが、その意味は、テーブルを参照するためのデータ（情報、アドレスなどを含む意味）であるとする。
【００５６】
テーブル保持部２０２は、複数のテーブルを保持し、それらのテーブルから供給されたインデックスに対応するデータを、不安定状態検知部２０３、予測結果候補生成部２０４、および、選択部２０５にそれぞれ供給する。
【００５７】
テーブル保持部２０２に保持される複数のテーブルは、例えば、２ビットの飽和型カウンタで構成される。また各テーブルが、飽和型カウンタで構成される場合、それらのテーブルから読み出されるデータは、カウンタ値である。
【００５８】
不安定状態検知部２０３は、テーブル保持部２０２から供給された複数のデータ（カウンタ値）から、そのカウンタ値が示す状態が、安定状態を示しているか、または、不安定状態を示しているかを判断し、その判断結果（検知結果）を、選択部２０５に供給する。予測結果候補生成部２０４は、予測結果として外部に出力される候補となるデータを、テーブル保持部２０２から供給されるデータから複数生成し、選択部２０５に供給する。
【００５９】
選択部２０５は、予測結果候補生成部２０４から供給された複数のデータから、不安定状態検知部２０３の検知結果に基づく１つのデータを選択し、出力する。
【００６０】
ここで、不安定状態検知部２０３が検知する不安定状態について説明を加える。図３を参照して説明したように、テーブル保持部２０２が保持しているテーブルが、２ビットの飽和型カウンタで構成されている（２ビットで示されるカウンタ値を保持している）場合、カウンタ値として、０，１，２，３のいずれかが設定される。
【００６１】
カウンタ値が０の場合、Strongly Untaken（強不成立）とし、カウンタ値が１の場合、Likely Untaken（不成立）とし、カウンタ値が２の場合、Likely Taken（成立）とし、カウンタ値が３の場合、Strongly Taken（強成立）として説明する。
【００６２】
予測が成立の場合、カウンタ値は１だけ加算され、不成立の場合、カウンタ値は１だけ減算される。このように、カウンタ値（状態）が、予測の成立、不成立に対応して変化する。従来では、このようにカウンタ値が変化する２ビットの飽和型カウンタのカウンタ値が、２以上のとき（すなわち、Strongly Taken（３）またはLikery Taken（２）のとき）に分岐成立と予測され、１以下のとき（すなわち、Strongly Untaken（０）またはLikery Untaken（１）のとき）に分岐不成立と予測されるように構成されていた。
【００６３】
Strongly Takenのような飽和型カウンタのカウンタ値が閾値より遠い値の状態の場合、予測結果は分岐成立という同一の結果になるが、Likely Takenのような飽和型カウンタのカウンタ値が閾値より近い値の状態の場合、予測結果は分岐成立または分岐不成立という異なる結果が出ることになる。このようなことは、Likely Untakenの状態やStrongly Untakenの状態のときにも同一にいえることである。
【００６４】
このようなことを換言すれば、カウンタ値が閾値に遠い状態の場合、状態が変化しにくく、予測結果が変化しにくい安定した状態（安定状態）であり、カウンタ値が閾値に近い状態の場合、状態が変化しやすく、予測結果が変化しやすい不安定な状態（不安定状態）であるといえる。安定状態のときの予測精度と、不安定状態のときの予測精度は、必ずしも同じではなく、安定状態のときの予測精度の方が、不安定状態のときの予測精度よりも高いという傾向にあった。
【００６５】
そこで、本実施の形態においては、不安定状態検知部２０３を設け、不安定状態検知部２０３が、不安定状態、すなわち、２ビットの飽和型カウンタを用いた場合、カウンタ値が１または２の状態を検知する（カウンタ値が１または２であるか否かを判断する）ように予測部６１を構成することにより、予測精度を向上させるようにする。
【００６６】
なお、ここでは２ビットの飽和型カウンタを用いた例を挙げて説明するが、２ビット以外の飽和型カウンタを用いた場合にも本発明は適用でき、そのような場合を含めて不安定状態を定義すると、閾値から所定の範囲内に存在するカウンタ値のときと定義することができる。例えば、カウンタ値が、０乃至９の範囲で変化し、閾値が５と設定されているような場合、そして所定の範囲内として３が設定されているようなときには、５を中心とする前後３つのカウンタ値、２、３、４、５、６、７、８のカウンタ値のときは、不安定状態として扱うようにする。
【００６７】
そして、２ビット（またはそれ以外）の飽和型カウンタが用いられる場合、不安定状態のときには、カウンタ値が閾値以上であっても、従来のように単に分岐成立であると判断するのではなく、後述するような処理を行うことにより、分岐成立、または場合により分岐不成立と判断されるようにする。このように、不安定状態のときには、たとえ、カウンタ値が閾値以上であっても、処理の結果により、分岐不成立と判断されるようにすることにより、不安定状態のときの予測精度を安定状態のときの予測精度と同程度、または、それ以上に高めることが可能となる。
【００６８】
図６は、予測部６１の内部構成例を示す図である。予測部６１は、プログラムカウンタ（Program Counter）２１１、ＢＨＲ（Branch History Register）２１２、ＸＯＲ（exclusive OR）回路２１３、Choice PHT（Pattern History Table）２１４、Taken PHT２１５、Untaken PHT２１６、選択部２１７、選択部２１８、および、選択部２１９を備える構成とされている。
【００６９】
図５に示した機能ブロック図と、図６に示した内部構成例の対応関係を説明するに、インデックス供給部２０１は、プログラムカウンタ２１１とＢＨＲ２１２から構成される。テーブル保持部２０２は、Choice PHT２１４、Taken PHT２１５、およびUntaken PHT２１６から構成される。不安定状態検知部２０３は、選択部２１７から構成される。予測結果候補生成部２０４は、選択部２１７と選択部２１８から構成される（従って、このような構成にした場合、選択部２１７は、不安定状態検知部２０３と予測結果候補生成部２０４を兼ねた構成とされている）。選択部２０５は、選択部２１９から構成される。
【００７０】
プログラムカウンタ２１１は、分岐命令のアドレスを発生し、そのアドレスをＸＯＲ回路２１３に供給する。ＢＨＲ２１２は、グローバル分岐履歴レジスタなどと称され、最近の分岐の実行結果の履歴を保持し、プログラムカウンタ２１１から分岐命令のアドレスがＸＯＲ回路２１３に供給されるタイミングで、その保持している履歴をＸＯＲ回路２１３に供給する。
【００７１】
ＸＯＲ回路２１３は、供給されたプログラムカウンタと履歴のデータとの排他的論理和を演算する。ＸＯＲ回路２１３により演算された排他的論理和の値は、Choice PHT（Pattern History Table）２１４、Taken PHT２１５、Untaken PHT２１６へのインデックスとして用いられる。
【００７２】
Choice PHT２１４、Taken PHT２１５、Untaken PHT２１６は、それぞれ２ビット飽和型カウンタのテーブルであり、ＸＯＲ回路２３により算出された排他的論理和の値がインデックスとされて参照されることにより、カウンタ値を、選択部２１７と選択部２１８にそれぞれ供給する。選択部２１７は、Choice PHT２１４から供給されたカウンタ値が分岐成立の予測を示している場合には、Taken PHT２１５から供給されたカウンタ値を選択部２１９に出力する。また選択部２１７は、Choice PHT２１４から供給されたカウンタ値が分岐不成立の予測を示している場合には、Untaken PHT２１６から供給されたカウンタ値を選択部２１９に出力する。
【００７３】
選択部２１９には、選択部２１７から２つの同一のカウンタ値が供給される。一方は、予測結果を示すカウンタ値として用いられ、他方は、不安定状態であるか否かを示すカウンタ値として用いられる。選択部２１７からのカウンタ値が不安定状態を示すカウンタ値として用いられる場合、そのカウンタ値が１または２のとき、不安定な状態を示すカウンタ値であるとして扱われる。
【００７４】
選択部２１８は、例えば、多数決回路で構成される。そして、選択部２１８は、Choice PHT２１４、Taken PHT２１５、Untaken PHT２１６からそれぞれ供給されるカウンタ値の多数決を採り、その結果を、選択部２１９に供給する。すなわち選択部２１８は、Choice PHT２１４、Taken PHT２１５、Untaken PHT２１６からそれぞれ供給される分岐成立を示すカウンタ値と分岐不成立を示すカウンタ値のうち、どちらを示すカウンタ値が多いかを判断する（この場合、３つのカウンタ値が供給されるので、そのうち２つ以上のカウンタ値が示す情報は分岐成立か分岐不成立かを判断する）。
【００７５】
このようにして、選択部２１８は、多数決により、不安定状態のときの予測結果の候補を生成する。
【００７６】
なお、ここでは、選択部２１８は、多数決を採ることにより予測結果の候補を生成するとして説明するが、例えば、供給されるカウンタ値を加算したり乗算したりといった演算を行い、その演算結果に基づき予測結果の候補を生成する、供給されたカウンタ値に重み付けを行うなど、多数決以外の他の方法により、予測結果の候補を生成するような構成としても良い。いずれの方法によっても、選択部２１８は、供給された複数のカウンタ値（データ）に基づき、１つの予測結果の候補を生成（選択）する構成とされる。
【００７７】
選択部２１９には、このようにして、選択部２１７からの結果と選択部２１８からの結果が供給される。選択部２１９は、選択部２１７から供給された不安定状態であるか否かを示すデータが、不安定状態ではない（安定状態である）ことを示す場合、選択部２１７からのデータを選択して外部の装置（この場合、図４のインストラクションキャッシュ６２）に供給し、不安定状態であることを示す場合、選択部２１８からのデータ（この場合、多数決の結果）を選択し、外部の装置に供給する。
【００７８】
［予測部の予測に関する動作］
次に、図５，６に示した予測部６１が行う予測に関する処理について、図７のフローチャートを参照して説明する。ステップＳ１１において、インデックス供給部２０１（図５）（Program Counter２１１、ＢＨＲ２１２、および、ＸＯＲ回路２１３（図６））は、インデックスＡ，Ｂ，Ｃを計算（生成）する。
【００７９】
インデックスＡは、テーブル保持部２０２が保持するテーブルのうち、Choice PHT２１４のカウンタ値を参照するためのものであり、インデックスＢは、Taken PHT２１５のカウンタ値を参照するためのものであり、インデックスＣは、Untaken PHT２１６のカウンタ値を参照するためのものである。
【００８０】
ステップＳ１２において、インデックスＡが用いられてChoice PHT２１４が参照される。同様に、ステップＳ１３において、インデックスＢが用いられてTaken PHT２１５が参照され、ステップＳ１４において、インデックスＣが用いられてUntaken PHT２１６が参照される。
【００８１】
それぞれのテーブルが参照されることにより読み出されたカウンタ値は、不安定状態検知部２０３（図５）（選択部２１７（図６））と、予測結果候補生成部２０４（図５）（選択部２１７と選択部２１８）に供給される。
【００８２】
ステップＳ１５において、予測結果候補生成部２０４（選択部２１７）は、Choice PHT２１４から読み出されたカウンタ値は、閾値よりも大きいか否か（カウンタ値≧閾値の関係を満たすか否か）を判断する。ステップＳ１５において、Choice PHT２１４から読み出されたカウンタ値は、閾値よりも大きいと判断された場合、ステップＳ１６に処理が進められる。ステップＳ１６において、選択部２１７は、Taken PHT２１５からのカウンタ値を、選択部２１９に出力する。
【００８３】
一方、ステップＳ１５において、Choice PHT２１４から読み出されたカウンタ値は、閾値よりも小さいと判断された場合、ステップＳ１７に処理が進められる。ステップＳ１７において、選択部２１７は、Untaken PHT２１６から読み出されたカウンタ値を、選択部２１９に出力する。このようにして、選択部２１９には、Taken PHT２１５から読み出されたカウンタ値か、または、Untaken PHT２１６から読み出されたカウンタ値の、どちらか一方のカウンタ値が、Choice PHT２１４から読み出されたカウンタ値に応じて供給される。
【００８４】
選択部２１９は、選択部２１７からのカウンタ値を入力すると、ステップＳ１８において、その入力されたカウンタ値は、安定状態を示しているか否かを判断する。上記したように、安定状態とは、２ビットの飽和型カウンタが用いられている場合、カウンタ値の値が、３または０のときである。ステップＳ１８の処理を換言すれば、供給されたカウンタ値は、３または０であるか否かを判断する処理である。勿論、不安定状態（カウンタ値が２または１）であるか否かが判断されるようにしても良い。
【００８５】
ステップＳ１８において、供給されたカウンタ値は、安定状態を示していると判断された場合、ステップS１９に処理が進められる。ステップＳ１９において、選択部２１９は、選択部２１７から供給されたカウンタ値を、予測結果を示すカウンタ値として決定する。ステップＳ２０において、予測結果を示すカウンタ値として決定されたカウンタ値は、閾値よりも大きいか否かが判断される。ステップＳ２０において、カウンタ値は閾値よりも大きいと判断された場合、ステップＳ２１において、分岐は成立するという最終的な予測結果が、選択部２１９からインストラクションキャッシュ６２（図４）に出力される。
【００８６】
一方、ステップＳ２０において、カウンタ値は閾値よりも小さいと判断された場合、ステップＳ２２において、分岐は不成立するという最終的な予測結果が、選択部２１９からインストラクションキャッシュ６２（図４）に出力される。このように、安定状態のときには、選択部２１７から供給されるカウンタ値が、予測結果を示すカウンタ値として採用される。
【００８７】
一方、不安定状態であると判断された場合、すなわちこの場合、ステップＳ１８において、選択部２１９が、選択部２１７から供給されたカウンタ値は、不安定状態を示していると判断した場合、ステップＳ２３に処理が進められる。ステップＳ２３において、選択部２１８（予測結果候補生成部２０４（図５））は、Choice PHT２１４、Taken PHT２１５、および、Untaken PHT２１６からそれぞれ供給されたカウンタ値を用いた演算を行う。ここでは、その演算は、カウンタ値の多数決（カウンタ値が示す予測結果の多数決）を採ることにより行われるとする。
【００８８】
各PHTから供給されたカウンタ値は、分岐成立、または、分岐不成立を示しているわけであるが、選択部２１８は、分岐成立を示しているカウンタ値が多いか、または、分岐不成立を示しているカウンタ値が多いか否かを判断することにより、多数決を採る。選択部２１８による多数決の結果は、選択部２１９に供給される。また、選択部２１９に供給される演算結果は、予測結果を示すカウンタ値として決定される。
【００８９】
決定されたカウンタ値は、ステップＳ２０において、閾値より大きいか否かが判断される。このステップＳ２０以下の処理については、既に説明したので、ここではその説明を省略する。
【００９０】
このように、不安定状態のときには、選択部２１８から供給されるカウンタ値が、予測結果を示すカウンタ値として採用される。この不安定状態のときに採用されるカウンタ値は、３つのテーブルから読み出されたカウンタ値が考慮されたものである。よって、上記したように、不安定状態のときには、安定状態のときと比べて、予測精度が低下する恐れがあったが、不安定状態のときには３つのテーブルからのカウンタ値を考慮して予測を行うことにより、不安定状態のときであっても、予測精度を低下させることなく、分岐予測を行うことが可能となる。
【００９１】
［効果］
予測部６１を、上記したような構成、動作することにより、従来と比較し、以下のような差異があり、その差異のために、以下のような効果がある。
【００９２】
従来（例えば、予測部６１が図２示すような構成とされていた場合）、個々の予測結果を生成する際、Taken PHT２１５（図２のTaken PHT２５に対応）からのカウンタ値か、Untaken PHT２１６（図２のUntaken PHT２６に対応）からのカウンタ値のどちらか一方を選択するためだけに、Choice PHT２１４（図２のChoice PHT２４に対応）からのカウンタ値が用いられていた。しかしながら、図６に示したように、選択部２１７と選択部２１９（不安定状態検知部２０３（図５））により不安定状態を検知し、不安定状態であると検知されたときには、Choice PHT２１４、Taken PHT２１５、Untaken PHT２１６からそれぞれ読み出されるデータが用いられて予測結果の候補が生成されるため、Choice PHT２１４からのデータも、予測結果の候補の生成に反映されることになる。
【００９３】
また従来（例えば、予測部６１が図２示すような構成とされていた場合）、Taken PHT２１５からのデータが予測結果として採用されるときには、Untaken PHT２１６からのデータは、参照されることがなく、逆に、Untaken PHT２１６からのデータが予測結果として採用されるときには、Taken PHT２１５からのデータは、参照されることがなかった。このことは、予測結果として採用されるデータは、予測結果として採用されないデータに影響されることはないということを示していた。
【００９４】
しかしながら、不安定状態と判定された場合、例えば、Untaken PHT２１６からのデータが不安定状態で分岐成立と予測されたとき、短い時間の後に、Taken PHT２１５からのデータが予測結果として採用される可能性は高かった。このため、不安定状態の場合には、Taken PHT２１５のデータとUntaken PHT２１６のデータの両方のパターン履歴表に、当該分岐命令の情報が格納されている確率が高いと考えられる。
【００９５】
すなわち、このことを換言すれば、予測結果として採用されるデータは、予測結果として採用されないデータに影響されることがあるということが示されている。
【００９６】
このようなことを考慮し、本実施の形態における予測部６１は、上記したように、不安定状態であると判断されるときには、Choice PHT２１４、Taken PHT２１５、Untaken PHT２１６からのデータが用いられて予測結果の候補が生成される。予測結果の候補は、上記したように、Choice PHT２１４、Taken PHT２１５、Untaken PHT２１６からのデータが示す予測結果において、２つ以上のパターン履歴表から生成した出力とされるようにしたので、各PHTから読み出されるデータを考慮した（互いに影響が与えられた）予測結果が生成される。
【００９７】
よって、複数のテーブルのデータを効率良く利用し、精度良く予測結果を生成することが可能となる。特に不安定状態のときの予測結果を高めることが可能となり、安定状態も含めた予測結果全体の精度を高めることが可能となる。
【００９８】
［予測部６１の予測精度について］
ここで、上記したような処理を行う予測部６１によれば、不安定状態のときでも予測精度が低下せず、そのために、安定状態、不安定状態にかかわらず、常に予測精度を高めることが可能になるということを、図８を参照して実証する。
【００９９】
図８は、従来手法のBimode予測器（例えば、図２の構成を有する予測器）と、上記した予測部６１との予測精度を比較したときのグラフである。図８のグラフは、ベンチマークとして、SpecINTの５本を利用し、それらの平均により予測精度を計算した結果を示している。図８において縦軸は、１０００命令当たりの予測ミスの回数(Mispredictions Per Kilo Instructions)を示し、図中下の方ほど性能が高くなることを示している。図８において横軸は、ハードウェア量を示す。
【０１００】
図８の結果より、全てのハードウェア量の構成において、本発明を適用した予測部６１の方が、従来手法のBimode予測器よりも、予測精度が高いことがわかる。Bimode予測器と予測部６１を比較すると、予測部６１を用いることにより、Bimode予測器よりも、３ＫＢと６ＫＢのハードウェア量の構成において１．５％程度の予測ミスを削減することが可能となることがわかる。また、同様に、１２ＫＢ、２４ＫＢ、４８ＫＢの構成では、それぞれ０．９％、１．５％。１．３％の予測ミスを削減することが可能となることがわかる。
【０１０１】
このように、本発明を適用すれば、予測部６１の予測精度を高くすることができるということが実証される。
【０１０２】
［カウンタ値の更新について］
上記した予測部６１は、２ビットの飽和型カウンタを用い、図３に示すように状態遷移（カウンタ値が変化）するとして説明した。図９のフローチャートを参照し、予測部６１の飽和型カウンタのカウンタ値の更新に係わる処理について説明する。
【０１０３】
ステップＳ４１において、インデックスＡ，Ｂ，Ｃが計算される。このステップＳ４１におけるインデックスの計算は、図７のフローチャートのステップＳ１１におけるインデックスの計算と同様に行われる。ステップＳ４２においてインデックスＡが用いられ、Choice PHT２１４（図６）のカウンタ値が参照される。その参照されたカウンタ値が閾値よりも大きいか否かが、ステップＳ４３において判断される。
【０１０４】
ステップＳ４３において、Choice PHT２１４から参照されたカウンタ値は、閾値よりも大きいと判断された場合、ステップＳ４４において、インデックスＢが用いられ、Taken PHT２１５のカウンタ値が更新される。一方、ステップＳ４３において、Choice PHT２１４から参照されたカウンタ値は、閾値よりも小さいと判断された場合、ステップＳ４５において、インデックスＣが用いられ、Untaken PHT２１６のカウンタ値が更新される。
【０１０５】
このように、Choice PHT２１４から参照されたカウンタ値が閾値よりも大きいと判断された場合、すなわち、分岐予測は成立する傾向にあると判断された場合、Taken PHT２１５のカウンタ値が更新され、Choice PHT２１４から参照されたカウンタ値が閾値よりも小さいと判断された場合、すなわち、分岐予測は成立しない傾向にあると判断された場合、Untaken PHT２１６のカウンタ値が更新される。
【０１０６】
このようにして、Taken PHT２１５またはUntaken PHT２１６のどちらか一方のカウンタ値が更新されると、ステップＳ４６において、インデックスＡが用いられて、Choice PHT２１４のカウンタ値が更新される。このようにして、各PHTのカウンタ値が更新される。
【０１０７】
［他の構成例］
図１０は、予測部６１の他の構成例を示す図である。予測部６１を構成する各部は、図６に示した予測部６１を構成する各部と同様であり、図１０においては、同一の符号を付し、そのことを示している。図６に示した予測部６１と図１０に示した予測部６１の差異は、Choice PHT２１４を参照するためのインデックスが、図６においては、ＸＯＲ回路２１３から供給されているが、図１０においては、Program Counter２１１から供給されている。
【０１０８】
このように、Choice PHT２１４を参照するインデックスは、Program Counter２１１からのデータとＢＨＲ２１２からのデータの排他的論理和でも良いし（図６の構成）、プログラムカウンタ２１１からのデータをそのまま用いても良い（図１０の構成）。また、予測部６１を、図１０のように構成した場合においても、その動作は、図７や図９のフローチャートを参照して説明した場合と同様に行われるため、その説明は省略する。
【０１０９】
予測部６１の構成として、どちらの構成を採用するかは、適宜設計の段階などで考慮されれば良い。
【０１１０】
なお、上述した実施の形態においては、予測部６１は、分岐予測を行うとして説明したが、本発明は、分岐予測を行う予測部（予測器）のみに適用が限定されることを示したのではない。例えば、本発明は、データをロード（LOAD）するとき、そのデータがキャッシュ（Cache）内に存在する（Hit）か存在しない（miss）かを判断する際などに適用することも可能である。
【０１１１】
また、上述した実施の形態においては、２ビットの飽和型カウンタが用いられる場合を例に挙げて説明したが、Ｎビットの飽和型カウンタが用いられた場合にも、本発明を適用することは可能である。Ｎビットの飽和型カウンタが用いられて、例えば、図６に示した予測部６１の各PHTが構成されている場合、不安定状態の範囲を示す上限または下限の値と、選択されたＮビット飽和型カウンタからのカウンタ値が比較されるように構成されれば良い。
【０１１２】
本発明は、供給または生成されたインデックスにより、所定のテーブル（履歴テーブル）が参照されることにより、０か１かなどの選択的な決定（予測）を行う際に適用することが可能である。
【図面の簡単な説明】
【０１１３】
【図１】Gshare予測器の構成を示す図である。
【図２】Bimode予測器の構成を示す図である。
【図３】状態遷移について説明するための図である。
【図４】プロセッサの内部構成例を示す図である。
【図５】本発明を適用した予測部の一実施の形態の構成を示す図である。
【図６】予測部の内部構成例を示す図である。
【図７】予測部の予測に係わる処理について説明するためのフローチャートである。
【図８】２つの予測器における予測精度を比較した結果を示す図である。
【図９】予測部のカウンタ値の更新に係わる処理について説明するためのフローチャートである。
【図１０】予測部の他の内部構成例を示す図である。
【符号の説明】
【０１１４】
６１  予測部，  ２０１  インデックス供給部，  ２０２  テーブル保持部，  ２０３  不安定状態検知部，  ２０４  予測結果候補生成部，  ２０５  選択部，  ２１１  Program Counter，  ２１２  ＢＨＲ，  ２１３  ＸＯＲ回路，  ２１４  Choice PHT，  ２１５  Taken PHT，  ２１６  Untaken PHT，  ２１７乃至Ｓ２１９  選択部
【図１】
2006163548.tif 000003
【図２】
2006163548.tif 000004
【図３】
2006163548.tif 000005
【図４】
2006163548.tif 000006
【図５】
2006163548.tif 000007
【図６】
2006163548.tif 000008
【図７】
2006163548.tif 000009
【図８】
2006163548.tif 000010
【図９】
2006163548.tif 000011
【図１０】
2006163548.tif 000012