分岐予測器及びプロセッサ
【課題】破壊的競合を緩和して分岐予測の精度を向上させる。
【解決手段】分岐予測器1は、分岐命令の分岐正否の予測を行う第1分岐予測部10と、第1分岐予測部による分岐予測ミスの数が閾値に達した分岐命令を記憶する記憶部20と、記憶部20に記憶された分岐命令それぞれについて個別に分岐正否の予測を行う第2分岐予測部30と、を備えている。予測の対象となる分岐命令が記憶部20に記憶されている場合には、第2分岐予測部30による予測を行う。
【解決手段】分岐予測器1は、分岐命令の分岐正否の予測を行う第1分岐予測部10と、第1分岐予測部による分岐予測ミスの数が閾値に達した分岐命令を記憶する記憶部20と、記憶部20に記憶された分岐命令それぞれについて個別に分岐正否の予測を行う第2分岐予測部30と、を備えている。予測の対象となる分岐命令が記憶部20に記憶されている場合には、第2分岐予測部30による予測を行う。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、分岐予測器及びプロセッサに関するものである。
【背景技術】
【0002】
分岐予測は、分岐命令を投機的に実行することにより制御依存を回避する技術であり、高精度の予測を行うことにより、大幅な性能向上が実現される。しかし、分岐予測に失敗したときは、分岐命令以降の実行命令をフラッシュし、正しい分岐先命令を新たにフェッチするため性能が低下する。これは分岐予測ミスペナルティと呼ばれている。
【0003】
近年の高性能プロセッサでは、パイプライン段数の増加、命令発行幅の増加により高い命令レベル並列性を抽出しており、これに伴い分岐予測ミスペナルティは増加傾向にある。このため、分岐予測精度の更なる向上はプロセッサの性能向上にとって不可欠な課題である。
【0004】
分岐予測ミスペナルティを減少させるため、様々な分岐予測器が提案されている。1981年に最初に提案されたBimodal予測器(非特許文献1参照)では、各分岐命令の挙動を2bit飽和カウンタで保持し、その値に基づき分岐方向を予測する。飽和型カウンタはPHT(Pattern History Table)として構成され、分岐命令アドレスの下位ビットをインデクスとしてアクセスされる。
【0005】
現在多くのプロセッサで用いられているGshare予測器(非特許文献2参照)は、分岐命令のグローバル履歴と分岐命令アドレスの排他的論理和をインデクスとしてPHTにアクセスして分岐予測を行う予測器である。これは分岐命令のグローバル履歴により分岐命令間の相関を利用した予測方法である。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】J.E.Smith. "A Study of Branch Prediction Strategies", ISCA 1981, pp.135-148, 1981
【非特許文献2】S.McFarling. "Combining Branch Predictors", Technical report TN-36, Digital Western Research Laboratory, 1993
【発明の概要】
【発明が解決しようとする課題】
【0007】
これらの分岐予測器における予測ミスの主要な要因として破壊的競合がある。これは、図9に示すように、異なる分岐命令が同じPHTのエントリに分岐結果を登録することにより生じる競合である。現在の主流の分岐予測器では、Gshare予測器のように、分岐命令アドレスとグローバル分岐履歴を用いてPHTをアクセスするため、破壊的競合はより複雑な様相となり、本質的には避けられない。
【0008】
そこで、本発明は、破壊的競合を緩和して分岐予測の精度を向上させることを目的とする。
【課題を解決するための手段】
【0009】
(1)本発明は、分岐命令の分岐正否の予測を行う第1分岐予測部と、前記第1分岐予測部による分岐予測ミスの数が閾値に達した分岐命令を記憶する記憶部と、前記記憶部に記憶された分岐命令それぞれについて個別に分岐正否の予測を行う第2分岐予測部と、を備え、予測の対象となる分岐命令が前記記憶部に記憶されている場合には、前記第2分岐予測部による予測を行うことを特徴とする分岐予測器である。
【0010】
(2)前記記憶部は、前記記憶部に記憶された分岐命令それぞれについて、前記第1分岐予測部と比較した前記第2分岐予測部による予測の有効性を示す有効性情報を記憶し、前記有効性情報に基づいて前記第2分岐予測部による予測が有効でないと判断された分岐命令を、前記記憶部から削除するのが好ましい。
【0011】
(3)前記記憶部は、前記記憶部に記憶されている分岐命令の数が、記憶可能な分岐命令の数の上限に達した場合には、LRUロジックに基づいて、前記記憶部に記憶されている分岐命令のうち最も最近使用されていない分岐命令に、前記第1分岐予測部による分岐予測ミスの数が前記閾値に達した新たな分岐命令を上書きすることで、前記新たな分岐命令を記憶し、前記LRUロジックでは、前記第2分岐予測部が正しく予測できた場合に、分岐命令が使用されたものとみなすのが好ましい。
【0012】
(4)前記LRUロジックでは、第2分岐予測部が正しく予測でき、かつ、第1分岐予測部が正しく予測できなかった場合に、分岐命令が使用されたものとみなすのが好ましい。
【0013】
(5)前記第1分岐予測部による分岐予測ミスの数を分岐命令毎にカウントするカウンタを備え、前記カウンタの値が前記閾値に達した分岐命令が前記記憶部に記憶されるとともに、前記カウンタの値が前記閾値に達すると前記カウンタがリセットされるのが好ましい。
【0014】
(6)前記記憶部は、前記記憶部に記憶された分岐命令それぞれの分岐結果の履歴を示す履歴情報を記憶するのが好ましい。
【0015】
(7)前記第2分岐予測部は、分岐命令の分岐結果の履歴に基づいて分岐予測を行うためのPHT(Pattern History Table)を、前記記憶部に記憶された分岐命令毎に有しているのが好ましい。
【0016】
(8)前記第1分岐予測部の予測結果と前記第2分岐予測部の予測結果とを選択的に出力するセレクタを備えているのが好ましい。
【0017】
(9)前記記憶部に記憶された分岐命令それぞれについて、前記第2分岐予想部による予測の信頼性を示す信頼性情報を記憶する信頼性情報記憶部を備え、前記信頼性情報は、前記第2分岐予測器の予測が成功した数に基づく情報であり、前記セレクタは、前記信頼性情報に基づいて、前記第1分岐予測部の予測結果及び前記第2分岐予測部の予測結果のいずれを出力するかを決定するのが好ましい。
【0018】
(10)他の観点からみた本発明は、前記(1)〜(9)のいずれか1項に記載の分岐予測器によって分岐命令の分岐予測を行うプロセッサである。
【発明の効果】
【0019】
本発明によれば、破壊的競合を緩和して分岐予測の精度を向上させることができる。
【図面の簡単な説明】
【0020】
【図1】(a)はCombining予測器によける予測ミスの偏りを示し、(b)はBimode予測器における予測ミスの偏りを示す図である。
【図2】分岐予測器のブロック図である。
【図3】Combiningにおける予測ミス削減率を示す図である。
【図4】Bimodeにおける予測ミス削減率を示す図である。
【図5】Bimode−Plusにおける予測ミス削減率を示す図である。
【図6】Agreeにおける予測ミス削減率を示す図である。
【図7】Hybridにおける予測ミス削減率を示す図である。
【図8】MPKI結果を示す表である。
【図9】複数の命令が同一のPHTエントリにアクセスすることを示す図である。
【発明を実施するための形態】
【0021】
以下、本発明の好ましい実施形態について添付図面を参照しながら説明する。
【0022】
[1.予測ミスの偏り]
本発明者らは、分岐命令の予測ミスに偏りがあることを新たに見出した。ここでは、従来の分岐予測器において、予測ミスが少数の分岐命令に集中して発生することを示す。
【0023】
予測ミスの偏りの度合いを評価するため、まず、SimpleScalar Tool Set(D.Burger, T.M.Austin. "The SimpleScalar ToolSet , Version2.0", Technical Report, University of Wisconsin-Madison Computer Sciences Dpt, July 1997)を用いて、Combining予測器とBimode予測器を実行して評価を行う。ベンチマークには、SPECint2000(The Standard Performance Evaluation Corporation)から、bzip, gcc, gzip, mcf, parser, twolf, vpr, vortexの8本を使用する。
【0024】
評価に用いたプロセッサの使用を表1に示す。命令セットは、SimpleScalar PISAを用いる。
【表1】
【0025】
これらのベンチマークにおいて、最も多く予測ミスが発生する上位8個と上位16個の分岐命令を抽出し、これらの予測ミスが全体の予測ミスに占める割合を調べる。
【0026】
図1(a)は、Combining予測器において、予測ミスが最も多い上位8個と16個の分岐命令の予測ミスが全体の予測ミスに占める割合を示し、図1(b)は、Bimode予測器において、予測ミスが最も多い上位8個と16個の分岐命令の予測ミスが全体の予測ミスに占める割合を示す。
なお、予測ミスはプログラムの実行状況に応じて変化するため、調べ方については、20M命令ごとに最もミスの多い上位8個(あるいは16個)の分岐命令を抽出し、それらの予測ミスが全体の予測ミスに占める割合を調べ、これを5回繰り返して100M命令まで評価する。
【0027】
予測器のハードウェア量は、8KB、16KB、32KBの3種類について評価を行う。非特許文献2では、Gshare予測器のサイズがBimode予測器のサイズの2倍になるとき、より良い性能が得られると報告されている。そのため、Combining予測器では、Bimode予測器とSelectorのエントリ数を8K,16K,32K、Gshare予測器のエントリ数を16K,32K,64Kと設定する。Bimode予測器については、Gshare予測器のエントリ数を8K,16K,32Kとし、ChoicePHTのエントリ数を16K,32K,64Kと設定する。
【0028】
図1(a)(b)横軸は実行命令数であり、縦軸はミスの多い分岐命令の予測ミスが全体の予測ミスに占める割合である。また、「8−8KB」「8−16K」「8−32K」は、それぞれ、予測器のハードウェア量が8KB、16KB、32KBである場合について、予測ミスが最も多い上位8個の分岐命令の予測ミスが全体の予測ミスに占める割合を示している。「16−8KB」「16−16K」「16−32K」は、それぞれ、予測器のハードウェア量が8KB、16KB、32KBである場合について、予測ミスが最も多い上位8個の分岐命令の予測ミスが全体の予測ミスに占める割合を示している。
【0029】
図1(a)(b)より、Combining予測器とBimode予測器では、8個の分岐命令の予測ミスが、全体のミスの70%以上を占めることが分かる。さらに、16個の分岐命令の予測ミスが、全体のミスの80%以上を占めることが分かる。
【0030】
[2.実施形態に係る分岐予測器及びプロセッサ]
本実施形態に係るプロセッサは、スーパースカラプロセッサであり、分岐予測器1を備えている。図1は、プロセッサが有する分岐予測器1を示している。この分岐予測器1は、予測ミスが少数の分岐命令に偏るという特性を利用したものである。つまり、予測ミスの多い特定の分岐命令については、破壊的競合が生じないように、予測ミスの多い特定の分岐命令毎の履歴(ローカル履歴)を用いて分岐予測を行う。
【0031】
図1に示すように、分岐予測器1は、第1分岐予測部であるベース予測器(Base Predictor)10と、MBP(Miss Bias Predictor)20と、予測ミスの多い特定の分岐命令について分岐予測を行う第2分岐予測部であるLHBP(Local History Branch predictor)30と、セレクタ40と、を備えている。
【0032】
[2.1 ベース予測器(第1予測器)の構成]
ベース予測器10は、分岐予測の必要な全ての分岐命令について分岐予測を行う。
ベース予測器(第1分岐予測部)10としては、分岐命令の分岐成否の予測(分岐予測)を行う従来の分岐予測器が用いられている。ベース予測器10としては、例えば、Combining予測器、Bimode予測器、Bimod-Plus予測器、Agree予測器、Hybrid予測器、Gshare予測器など、破壊的競合の起こり得る予測器を採用することができる。
ベース予測器10として、GBH(Global Branch History;グローバル分岐履歴)を用いる予測器を採用した場合、ベース予測器10には、GBHが与えられ、プログラムカウンタ(PC)2が示すアドレスの分岐命令について、分岐予測の結果を出力し、セレクタ30に与える。
【0033】
[2.2 MBPの構成]
MBP20は、分岐予測ミスの多い分岐命令を検出して、その分岐命令を、ローカル分岐履歴などの情報とともに記憶するためのものである。MBP20は、拡張されたBTB(Branch Target Buffer)機構であるEBTB(Extended BTB)21と、予測ミスの多い分岐命令を記憶するMBB(Miss Bias Buffer)22と、を有している。
【0034】
[2.2.1 EBTBの構成]
EBTBの基礎となるBTB機構は、分岐先予測(Branch Target Prediction)のために予測アドレス(Target Address)を得るための機構であり、分岐命令のアドレスの一部を格納するTagと、各分岐命令のアドレスに対応する予測アドレス(分岐アドレス)を格納するTaddrと、を有している。
【0035】
EBTB21は、上記BTB機構を利用して、分岐予測ミスの多い分岐命令を検出するための検出部として機能する。
BTBを拡張したEBTB21は、従来のBTBと同じように、Tag21aと、Taddr21cと、を備え、さらに、各エントリには、飽和カウンタによって構成されたMCT(Miss Counter)21bを備えている。
【0036】
分岐命令のアドレスの下位ビットi〜0に対応するエントリのTag21aには、当該分岐命令のnビットアドレスの上位ビットn−1〜i+1が格納される。プログラムカウンタ(PC)2から、分岐命令のアドレスの下位ビットi〜0が、EBTBのエントリに与えられると、分岐命令のアドレスの下位ビットi〜0に対応するエントリのTag21aに格納されているビット列が、判定部21dに出力される。判定部21dは、プログラムカウンタ2から、当該分岐命令のアドレスの上位ビットn−1〜i+1のビット列も与えられる。
【0037】
判定部21dは、EBTB21から出力されたビット列とプログラムカウンタ2から出力されたビット列とが一致するか否かの判定を行い、一致の場合は、ヒットとなる。なお、EBTB2を通常のBTBとしても用いる場合、判定部21の結果がヒットであると、分岐命令のアドレスの下位ビットi〜0に対応するエントリのTaddr21cが予測アドレスとして出力される。
【0038】
MCT21bは、ベース予測器10の分岐正否の分岐予測ミスの数カウントするためのものである。MCT21bは、EBTB21の各エントリに設けられているため、EBTB21では、Tag21aにアドレス(の一部)が格納されている分岐命令毎に、分岐予測ミスの数がカウントされることになる。
なお、MCT21bのサイズは、例えば、4bit程度あれば足りる。
また、EBTB21のエントリ数は、2i個である。
【0039】
[2.2.2 MBB(記憶部)の構成]
予測ミスの多発する分岐命令を格納するMBB(記憶部)22は、Addr22aと、LH22bと、U22cと、FR22dと、を備えている。
Addr22aは、予測ミスの多発する分岐命令のアドレス(nビット)が格納される領域であり、分岐命令アドレスの格納により、分岐命令が記憶されていることになる。
LH(Local branch History)22bは、分岐命令のローカル分岐履歴を記憶する領域であり、mビットのシフトレジスタによって構成され、過去m回の分岐正否を各ビットの0/1で記憶する。
【0040】
U(Use bit)22cは、該当するエントリが使用されているかどうかを示すビットであり、1が使用中を示し、0が未使用を示す。
FR(Trace Failure Rate)22dは、7bitの飽和カウンタであり、第2分岐予測部であるLHBP30の分岐予測ミスの数と、第1分岐予測部であるベース予測器10の分岐予測ミスの数と、の差を有効性情報として保持する。
【0041】
有効性情報は、ベース予測器(第1分岐予測部)10と比較したLHBP(第2分岐予測部)30の有効性を示す情報である。MBB22に(アドレスが)記憶されている分岐命令それぞれの有効性情報に基づいて、有効でないと判断された分岐命令は、MBB22から削除される(U22cが未使用を示す0にセットされる)。
【0042】
MBB22のエントリ数が多いほど、分岐予測ミスの多発する分岐命令(のアドレス)を、MBB22に多く格納することができる。ただし、本発明者らの実験の結果、MBB22のエントリ数を多くしても、分岐予測ミスの減少は僅かであったことから、MBB22のエントリ数(MBB22に記憶できる分岐命令数)は、8個又は16個程度でよい。
【0043】
[2.3 LHBP(第2分岐予測部)の構成]
第2分岐予測部であるLHBP30は、ベース予測器10にて分岐予測がなされる分岐命令の一部について、分岐成否の予測を行う。具体的には、LHBP30は、MBB22に記憶されている分岐命令(EBTB21によって分岐予測ミスが多いことが検出された分岐命令)について、分岐予測を行う。つまり、LHBP30にて分岐予測がなされる分岐命令につては、ベース予測器10とLHBP30の双方で分岐予測がなされることになる。
【0044】
LHBP30は、MBB22に記憶されている分岐命令毎に個別の分岐履歴(ローカル分岐履歴)に基づいて分岐予測を行う複数のLPHT(Local Pattern History Table)31,32,・・・を備えている。
【0045】
LPHT31,32,・・・は、それぞれ、分岐命令の分岐結果の履歴(ローカル分岐履歴)に基づいて分岐予測を行うためのPHT(Pattern History Table)として構成されている。
LPHT31,32,・・・は、それぞれ、NTCT(2bit Taken Not Taken saturating CounTer)31a,32aと、CF(ConFidence)31b,32bと、を有している。
【0046】
NTCT31a,32aは、一般的なPHTと同様に、2ビット飽和カウンタによって構成され、分岐の成否について予測される4つの状態(Strongly NotTaken, Weakly NotTaken, Weakly Taken, Strongly Taken)を保持している。NTCT31a,32aは、対応する分岐命令のみの分岐結果によって、インクリメント又はデクリメントされ、他の分岐命令の分岐結果によってはインクリメント又はデクリメントされない。
【0047】
CF31b,32bは、同一エントリのNTCT31a,32aによる予測の信頼性を示す信頼性情報を記憶する領域(信頼性情報記憶部)である。CF31a,32aは、2ビットMiss Resetting Counterとして構成されており、同一エントリのNTCT31a,32aによる予測が成功した場合には、CFがインクリメントされ、予測ミスの場合にはリセットされる。
【0048】
LPHT31,32・・・の個数は、MBB22のエントリ数(分岐予測ミスの多い分岐命令を記憶可能な数)と同じである。例えば、MBB22の一番目のエントリの分岐命令は、「LPHT1」31を用いて分岐予測がなされる。また、MBB22の二番目のエントリの分岐命令は、「LPHT2」32を用いて分岐予測がなされる。これにより、LHBP20においては、MBB22に格納されている分岐命令同士での破壊的競合は生じない。
また、MBB22に格納されている分岐命令の数は、ベース予測器(第1分岐予測部)10によって分岐予測がなされる分岐命令全体のうちのごく一部であるから、LHBP(第2分岐予測部)30を別途も受けても、ハードウェア量の増加は少ない。
【0049】
LPHT31,32・・・のエントリ数は、使用する分岐履歴(ローカル分岐履歴)の長さにより決まる。すなわち、LPHT31,32・・・は、それぞれ、分岐命令のローカル分岐履歴を記憶するLH22bのビット数mに対して、2mのエントリ数を持つ。LPHTのエントリ数は、例えば、512に設定することができる。
【0050】
[2.4 MBPによる予測ミスの多発する分岐命令の発見に関する処理]
[2.4.1 EBTBに関する動作(予測ミスの多発する分岐命令の発見)]
MBP20は、岐命令がコミットされるときに、分岐命令のアドレスを用いてEBTB21の検索を行う。つまり、分岐命令が実行されてベース分岐予測器10による分岐正否の結果が判明し、コミット状態になると、プログラムカウンタ2が示す当該分岐命令のアドレスを用いて、EBTB21を検索する。
EBTB21の検索の結果、検索対象の分岐命令アドレスがTag21aに格納されており、判定部21dの判定結果がヒットになり、かつ、当該分岐命令に対するベース予測器10による分岐予測が予測ミスであった場合には、対応するMCT21bがインクリメントされる。なお、判定部21dの判定結果がヒットになっても、予測ミスでない場合は、対応するMCT21bは変化しない。
【0051】
EBTB21の検索の結果、検索対象の分岐命令アドレスがTag21aに格納されておらず、判定部21dの判定結果がヒットにならない場合は、従来のBTBと同じように、Tag21aの更新を行い、当該分岐命令に対するベース予測器10による分岐予測が予測ミスであった場合には、MCTを1にセットし、予測成功であった場合には、MCTを0にセットする。
このようにして、EBTB21には、予測ミスの生じた分岐命令と、それぞれの分岐命令の予測ミスの数が保持される。
【0052】
いずれかのEBTBエントリのMCT21bが第1閾値に達すると、当該エントリの分岐命令に予測ミスが多発しているものとみなす。このようにして、EBTB21は、予測ミスの多い分岐命令を検出することができる。
【0053】
[2.4.2 MBBへの登録]
MCT21bが第1閾値に達した分岐命令は、そのアドレスが、MBB22のAddr22aに登録される。そして、該当するEBTB21のエントリのMCT21bがリセットされる。第1閾値に一旦達した分岐命令のMCT21bがリセットされることで、当該分岐命令の予測ミス数が再度カウント可能となり、当該分岐命令が、再度、MBB22に登録される機会が得られ易くなる。
【0054】
MBB22への登録は、以下のように行われる。まず、登録しようとした分岐命令のアドレスが、MBB22のAddr22aに存在するかどうかをチェックされる。このアドレスがMBB22に存在しない場合には、U22cが0(未使用)のエントリが存在するならば、そのエントリに、そのアドレスを登録し、U22cを1(使用)にする。
【0055】
もし、MBB22のU22cがすべて1(使用)の場合、すなわち、MBB22に記憶されている分岐命令の数が、MBB22に記憶可能な分岐命令の数(例えば、8個又は16個)の上限に達している場合、MBB22は、LRU(Least Recently Used)ロジックを利用して、最も最近使用されていないエントリを選択し、そのエントリのAddr22aに、そのアドレスを上書き登録する。また、そのエントリのFR22dもリセットされる。
【0056】
なお、本実施形態では、上記LRUロジックにおいては、LHBP(第2分岐予測部)30が正しく分岐予測でき、かつ、ベース予測器(第1分岐予測部)10が正しく予測できなかった場合に、分岐命令が使用されたものとみなす。
分岐命令が単に実行された場合に使用されたものとみなすのではなく、LHBP(第2分岐予測部)30が正しく分岐予測できた場合に、分岐命令が使用されたものとみなすことで、分岐予測ミスであった分岐命令は、MBB22から削除され易くなる。
また、ベース予測器(第1分岐予測部)10が正しく予測できなかった場合であることも使用の条件に加えることで、ベース予測器10の方が有用である分岐命令が、MBB22から削除され易くなる。
【0057】
[2.4.3 MBBの更新]
分岐命令がコミットされるとき、当該分岐命令が既にMBB22に登録されているならば、MBB22の更新が行われる。
当該分岐命令に対応するエントリのLH22bについては、ローカル履歴が更新される。つまり、シフトレジスタからなるLH22bに対して、当該分岐命令の実行結果(分岐正否の結果)としての0/1の入力によるシフトがなされる。
【0058】
FR22dの更新については、LHBP(第2分岐予測部)30での予測が失敗し、かつ、ベース予測器(第1分岐予測部)10の予測が成功の場合は、FR22dがインクリメントされる。一方、LHBP30での予想が成功、かつ、ベース予測器10の予測が失敗の場合は、デクリメントする。これにより、FR22dには、ベース予測器10と比較したLHBP30による予測の有効性情報として、ベース予測器10とLHBP30の予測の差を格納できる。
【0059】
FR22dの値が、第2閾値になると、LHBP30による予測ミスが、ベース予測器10よりも多く発生するために、LHBP30による予測が有効でないと判断し、MBB22は、当該エントリにおける各領域22a,22b,22c,22dをリセットする。これにより、LHBP30による予測が有効でないと判断された分岐命令が、MBB22から削除される。
【0060】
[2.4.4 LPHTの更新]
分岐命令がコミットされるときに、当該分岐命令のアドレスを用いて、MBB22を検索する。当該分岐命令のアドレスが、MBB22のいずれかのエントリのAddr22aに存在する場合には、そのAddr22aと同一エントリにあるLH22bのローカル分岐履歴を利用して、LPHTを更新する。
具体的には、当該分岐命令のアドレスに対応するAddr22aと同一エントリにあるLH22bが示すローカル履歴(mbitのビット列)に対応するLPHTエントリのNTCT32aを、当該LH22bが占めるローカル履歴の情報で更新する。
さらに、CF31b、32bの更新も行われる。すなわち、予測が成功した場合はインクリメントされ、予測ミスの場合はリセットされる。
【0061】
[2.5 LHBPによる分岐予測]
分岐命令がフェッチされるときに、フェッチされた分岐命令のアドレスを用いて、MBB22を検索する。当該アドレスが、MBB22のAddr22aに存在する場合には、そのAddr22aと同一エントリにあるLH22bに対応するLPHTのエントリのNTCTとCFの値を得る。
得られたNTCTを用いて、フェッチされた分岐命令のLHBP(第2分岐予測部)30による分岐予測結果(Taken 又は Not Taken)が出力され、CFの値とともにセレクタ40の取得部41に与えられる。
【0062】
取得部41は、LHBP30の分岐予測結果を、セレクタ本体42に与える。セレクタ本体42には、フェッチされた当該分岐命令のベース予測器(第1分岐予測部)10による分岐予測結果も与えられる。
セレクタ本体42は、取得部41からCFの値を得て、ベース予測器10による分岐予測結果とLHBP30による分岐予測結果とを選択的に出力する。具体的には、セレクタ本体42は、CF(信頼性情報)の値が第3閾値に達している場合に、LHBP30の分岐予測結果を出力し、その他の場合はベース予測器10の分岐予測結果を、出力する。
【0063】
CFの値は、予測ミスがあるとリセットされるため、CFの値が第3閾値に達するまで連続して予測に成功しないと、LHBP30の予測結果は使用されず、ベース予測器10による予測結果が使用される。これにより、ローカル履歴のみを用いたLHBP30による分岐予測の誤動作を緩和することができる。
【0064】
[3.評価]
[3.1 予測ミスの削減率の評価]
ベース予測器10として、Combining予測器、Bimode予測器、Bimode-Plus予測器、Agree予測器、Hybrid予測器の5種類を用いる。ベース予測器10であるCombining、Bimode、Bimode-Plus、Agreeのサイズを、8KB、16KB,32KB,64KBの4種類とし、Hybrid予測器のサイズは、10.5KB,17.75KB,30KB,60.5KBと設定する。
【0065】
図3〜図7は、それぞれ、分岐予測器1における予測ミスの削減率の評価結果を、ベンチマーク毎に示している。図3〜図7において、横軸はベンチマークであり、縦軸は、本実施形態に係る分岐予測器1の、ベース分岐予測器に対する予測ミス削減率である。
なお、ベンチマークとしては、CommBenchから、drr, reed_dec, reed_enc, rtr, zip_enc の5種類を用い、SPECint2000から、bzip, gcc, gzip, mcf, parser, twolf, vortex, vpr の8種類を用いた。
【0066】
図3〜図5に示すように、ベース予測器10として、Combining, Bimode, Bimode-Plusを用いた分岐予測器1は、SPECint2000において、最大40%以上、平均10%以上の予測ミスを減らすことができ、CommBenchにおいて、最大30%、平均6%以上の予測ミスを減らすことができた。
図6に示すように、ベース予測器10として、Agreeを用いた分岐予測器1は、SPECint2000において、最大23%以上、平均10%以上の予測ミスを減らすことができ、CommBenchにおいて、最大30%、平均6%程度の予測ミスを減らすことができた。
図7に示すように、ベース予測器10として、Hybridを用いた分岐予測器1は、SPECint2000において、最大45%以上、平均7%以上の予測ミスを減らすことができ、CommBenchにおいて、最大20%、平均3%程度の予測ミスを減らすことができた。
【0067】
[3.2 ハードウェア規模の検討]
実施形態に係る分岐予測器1のうち、EBTB21に関しては、BTBが持つ検索ポートを利用するために、BTBを拡張したEBTB21には、検索用のポートを追加する必要がない。また、EBTB21に含まれるMCT21bは4bitのため、EBTB21のエントリ数が、64個であれば、BTBを拡張してEBTB21にするために必要なメモリ量は、1KBである。
【0068】
MBB22について、Addr22aが32bit、LH22bが9bit、U22cが1bit、FR22dが7bitであると、各エントリそれぞれについての語長は49ビットとなる。したがって、MBB22のエントリ数を8とすると、MBB22のために必要なメモリ量は392bitのCAMとなる。
【0069】
LPHT31,32,・・・については、個数が8個、それぞれのエントリ数が512、NTCTが2bit、CFが2bitとすると、語長は4bitとなり、必要なメモリ量は2KBである。
【0070】
したがって、本実施形態に係る分岐予測器1は、従来の分岐予測器(ベース予測器のみ)に対して、3KB程度、ハードウェア量が増加する。
【0071】
図8は、予測器のサイズとそれらのMPKI(Miss-prediction Per Kilo Instruction)の関係を示す。予測器の各欄は、対応するサイズでのMPKIである。図8に示すように、例えば、8KBのCombining予測器と、8KBのCombining予測器をベース予測器10として有する分岐予測器1とを比較すると、MPKIの値が低下している。8KBのCombining予測器をベース予測器10として有する分岐予測器1は、64KBのCombining予測器と同等以上の性能になる。これは、Bimode、Bimode-Plus、Agreeについても同様である。
これらのことより、本実施形態の分岐予測器1は、従来の分岐予測器のエントリー数の増加以上の効果が得られる。
【0072】
[4.付記]
なお、上記において開示した事項は、例示であって、本発明を限定するものではなく、様々な変形が可能である。
【符号の説明】
【0073】
1 分岐予測器
10 第1分岐予測部(ベース予測器)
20 記憶部(MBB)
30 第2分岐予測部(LHBP)
40 セレクタ
【技術分野】
【0001】
本発明は、分岐予測器及びプロセッサに関するものである。
【背景技術】
【0002】
分岐予測は、分岐命令を投機的に実行することにより制御依存を回避する技術であり、高精度の予測を行うことにより、大幅な性能向上が実現される。しかし、分岐予測に失敗したときは、分岐命令以降の実行命令をフラッシュし、正しい分岐先命令を新たにフェッチするため性能が低下する。これは分岐予測ミスペナルティと呼ばれている。
【0003】
近年の高性能プロセッサでは、パイプライン段数の増加、命令発行幅の増加により高い命令レベル並列性を抽出しており、これに伴い分岐予測ミスペナルティは増加傾向にある。このため、分岐予測精度の更なる向上はプロセッサの性能向上にとって不可欠な課題である。
【0004】
分岐予測ミスペナルティを減少させるため、様々な分岐予測器が提案されている。1981年に最初に提案されたBimodal予測器(非特許文献1参照)では、各分岐命令の挙動を2bit飽和カウンタで保持し、その値に基づき分岐方向を予測する。飽和型カウンタはPHT(Pattern History Table)として構成され、分岐命令アドレスの下位ビットをインデクスとしてアクセスされる。
【0005】
現在多くのプロセッサで用いられているGshare予測器(非特許文献2参照)は、分岐命令のグローバル履歴と分岐命令アドレスの排他的論理和をインデクスとしてPHTにアクセスして分岐予測を行う予測器である。これは分岐命令のグローバル履歴により分岐命令間の相関を利用した予測方法である。
【先行技術文献】
【非特許文献】
【0006】
【非特許文献1】J.E.Smith. "A Study of Branch Prediction Strategies", ISCA 1981, pp.135-148, 1981
【非特許文献2】S.McFarling. "Combining Branch Predictors", Technical report TN-36, Digital Western Research Laboratory, 1993
【発明の概要】
【発明が解決しようとする課題】
【0007】
これらの分岐予測器における予測ミスの主要な要因として破壊的競合がある。これは、図9に示すように、異なる分岐命令が同じPHTのエントリに分岐結果を登録することにより生じる競合である。現在の主流の分岐予測器では、Gshare予測器のように、分岐命令アドレスとグローバル分岐履歴を用いてPHTをアクセスするため、破壊的競合はより複雑な様相となり、本質的には避けられない。
【0008】
そこで、本発明は、破壊的競合を緩和して分岐予測の精度を向上させることを目的とする。
【課題を解決するための手段】
【0009】
(1)本発明は、分岐命令の分岐正否の予測を行う第1分岐予測部と、前記第1分岐予測部による分岐予測ミスの数が閾値に達した分岐命令を記憶する記憶部と、前記記憶部に記憶された分岐命令それぞれについて個別に分岐正否の予測を行う第2分岐予測部と、を備え、予測の対象となる分岐命令が前記記憶部に記憶されている場合には、前記第2分岐予測部による予測を行うことを特徴とする分岐予測器である。
【0010】
(2)前記記憶部は、前記記憶部に記憶された分岐命令それぞれについて、前記第1分岐予測部と比較した前記第2分岐予測部による予測の有効性を示す有効性情報を記憶し、前記有効性情報に基づいて前記第2分岐予測部による予測が有効でないと判断された分岐命令を、前記記憶部から削除するのが好ましい。
【0011】
(3)前記記憶部は、前記記憶部に記憶されている分岐命令の数が、記憶可能な分岐命令の数の上限に達した場合には、LRUロジックに基づいて、前記記憶部に記憶されている分岐命令のうち最も最近使用されていない分岐命令に、前記第1分岐予測部による分岐予測ミスの数が前記閾値に達した新たな分岐命令を上書きすることで、前記新たな分岐命令を記憶し、前記LRUロジックでは、前記第2分岐予測部が正しく予測できた場合に、分岐命令が使用されたものとみなすのが好ましい。
【0012】
(4)前記LRUロジックでは、第2分岐予測部が正しく予測でき、かつ、第1分岐予測部が正しく予測できなかった場合に、分岐命令が使用されたものとみなすのが好ましい。
【0013】
(5)前記第1分岐予測部による分岐予測ミスの数を分岐命令毎にカウントするカウンタを備え、前記カウンタの値が前記閾値に達した分岐命令が前記記憶部に記憶されるとともに、前記カウンタの値が前記閾値に達すると前記カウンタがリセットされるのが好ましい。
【0014】
(6)前記記憶部は、前記記憶部に記憶された分岐命令それぞれの分岐結果の履歴を示す履歴情報を記憶するのが好ましい。
【0015】
(7)前記第2分岐予測部は、分岐命令の分岐結果の履歴に基づいて分岐予測を行うためのPHT(Pattern History Table)を、前記記憶部に記憶された分岐命令毎に有しているのが好ましい。
【0016】
(8)前記第1分岐予測部の予測結果と前記第2分岐予測部の予測結果とを選択的に出力するセレクタを備えているのが好ましい。
【0017】
(9)前記記憶部に記憶された分岐命令それぞれについて、前記第2分岐予想部による予測の信頼性を示す信頼性情報を記憶する信頼性情報記憶部を備え、前記信頼性情報は、前記第2分岐予測器の予測が成功した数に基づく情報であり、前記セレクタは、前記信頼性情報に基づいて、前記第1分岐予測部の予測結果及び前記第2分岐予測部の予測結果のいずれを出力するかを決定するのが好ましい。
【0018】
(10)他の観点からみた本発明は、前記(1)〜(9)のいずれか1項に記載の分岐予測器によって分岐命令の分岐予測を行うプロセッサである。
【発明の効果】
【0019】
本発明によれば、破壊的競合を緩和して分岐予測の精度を向上させることができる。
【図面の簡単な説明】
【0020】
【図1】(a)はCombining予測器によける予測ミスの偏りを示し、(b)はBimode予測器における予測ミスの偏りを示す図である。
【図2】分岐予測器のブロック図である。
【図3】Combiningにおける予測ミス削減率を示す図である。
【図4】Bimodeにおける予測ミス削減率を示す図である。
【図5】Bimode−Plusにおける予測ミス削減率を示す図である。
【図6】Agreeにおける予測ミス削減率を示す図である。
【図7】Hybridにおける予測ミス削減率を示す図である。
【図8】MPKI結果を示す表である。
【図9】複数の命令が同一のPHTエントリにアクセスすることを示す図である。
【発明を実施するための形態】
【0021】
以下、本発明の好ましい実施形態について添付図面を参照しながら説明する。
【0022】
[1.予測ミスの偏り]
本発明者らは、分岐命令の予測ミスに偏りがあることを新たに見出した。ここでは、従来の分岐予測器において、予測ミスが少数の分岐命令に集中して発生することを示す。
【0023】
予測ミスの偏りの度合いを評価するため、まず、SimpleScalar Tool Set(D.Burger, T.M.Austin. "The SimpleScalar ToolSet , Version2.0", Technical Report, University of Wisconsin-Madison Computer Sciences Dpt, July 1997)を用いて、Combining予測器とBimode予測器を実行して評価を行う。ベンチマークには、SPECint2000(The Standard Performance Evaluation Corporation)から、bzip, gcc, gzip, mcf, parser, twolf, vpr, vortexの8本を使用する。
【0024】
評価に用いたプロセッサの使用を表1に示す。命令セットは、SimpleScalar PISAを用いる。
【表1】
【0025】
これらのベンチマークにおいて、最も多く予測ミスが発生する上位8個と上位16個の分岐命令を抽出し、これらの予測ミスが全体の予測ミスに占める割合を調べる。
【0026】
図1(a)は、Combining予測器において、予測ミスが最も多い上位8個と16個の分岐命令の予測ミスが全体の予測ミスに占める割合を示し、図1(b)は、Bimode予測器において、予測ミスが最も多い上位8個と16個の分岐命令の予測ミスが全体の予測ミスに占める割合を示す。
なお、予測ミスはプログラムの実行状況に応じて変化するため、調べ方については、20M命令ごとに最もミスの多い上位8個(あるいは16個)の分岐命令を抽出し、それらの予測ミスが全体の予測ミスに占める割合を調べ、これを5回繰り返して100M命令まで評価する。
【0027】
予測器のハードウェア量は、8KB、16KB、32KBの3種類について評価を行う。非特許文献2では、Gshare予測器のサイズがBimode予測器のサイズの2倍になるとき、より良い性能が得られると報告されている。そのため、Combining予測器では、Bimode予測器とSelectorのエントリ数を8K,16K,32K、Gshare予測器のエントリ数を16K,32K,64Kと設定する。Bimode予測器については、Gshare予測器のエントリ数を8K,16K,32Kとし、ChoicePHTのエントリ数を16K,32K,64Kと設定する。
【0028】
図1(a)(b)横軸は実行命令数であり、縦軸はミスの多い分岐命令の予測ミスが全体の予測ミスに占める割合である。また、「8−8KB」「8−16K」「8−32K」は、それぞれ、予測器のハードウェア量が8KB、16KB、32KBである場合について、予測ミスが最も多い上位8個の分岐命令の予測ミスが全体の予測ミスに占める割合を示している。「16−8KB」「16−16K」「16−32K」は、それぞれ、予測器のハードウェア量が8KB、16KB、32KBである場合について、予測ミスが最も多い上位8個の分岐命令の予測ミスが全体の予測ミスに占める割合を示している。
【0029】
図1(a)(b)より、Combining予測器とBimode予測器では、8個の分岐命令の予測ミスが、全体のミスの70%以上を占めることが分かる。さらに、16個の分岐命令の予測ミスが、全体のミスの80%以上を占めることが分かる。
【0030】
[2.実施形態に係る分岐予測器及びプロセッサ]
本実施形態に係るプロセッサは、スーパースカラプロセッサであり、分岐予測器1を備えている。図1は、プロセッサが有する分岐予測器1を示している。この分岐予測器1は、予測ミスが少数の分岐命令に偏るという特性を利用したものである。つまり、予測ミスの多い特定の分岐命令については、破壊的競合が生じないように、予測ミスの多い特定の分岐命令毎の履歴(ローカル履歴)を用いて分岐予測を行う。
【0031】
図1に示すように、分岐予測器1は、第1分岐予測部であるベース予測器(Base Predictor)10と、MBP(Miss Bias Predictor)20と、予測ミスの多い特定の分岐命令について分岐予測を行う第2分岐予測部であるLHBP(Local History Branch predictor)30と、セレクタ40と、を備えている。
【0032】
[2.1 ベース予測器(第1予測器)の構成]
ベース予測器10は、分岐予測の必要な全ての分岐命令について分岐予測を行う。
ベース予測器(第1分岐予測部)10としては、分岐命令の分岐成否の予測(分岐予測)を行う従来の分岐予測器が用いられている。ベース予測器10としては、例えば、Combining予測器、Bimode予測器、Bimod-Plus予測器、Agree予測器、Hybrid予測器、Gshare予測器など、破壊的競合の起こり得る予測器を採用することができる。
ベース予測器10として、GBH(Global Branch History;グローバル分岐履歴)を用いる予測器を採用した場合、ベース予測器10には、GBHが与えられ、プログラムカウンタ(PC)2が示すアドレスの分岐命令について、分岐予測の結果を出力し、セレクタ30に与える。
【0033】
[2.2 MBPの構成]
MBP20は、分岐予測ミスの多い分岐命令を検出して、その分岐命令を、ローカル分岐履歴などの情報とともに記憶するためのものである。MBP20は、拡張されたBTB(Branch Target Buffer)機構であるEBTB(Extended BTB)21と、予測ミスの多い分岐命令を記憶するMBB(Miss Bias Buffer)22と、を有している。
【0034】
[2.2.1 EBTBの構成]
EBTBの基礎となるBTB機構は、分岐先予測(Branch Target Prediction)のために予測アドレス(Target Address)を得るための機構であり、分岐命令のアドレスの一部を格納するTagと、各分岐命令のアドレスに対応する予測アドレス(分岐アドレス)を格納するTaddrと、を有している。
【0035】
EBTB21は、上記BTB機構を利用して、分岐予測ミスの多い分岐命令を検出するための検出部として機能する。
BTBを拡張したEBTB21は、従来のBTBと同じように、Tag21aと、Taddr21cと、を備え、さらに、各エントリには、飽和カウンタによって構成されたMCT(Miss Counter)21bを備えている。
【0036】
分岐命令のアドレスの下位ビットi〜0に対応するエントリのTag21aには、当該分岐命令のnビットアドレスの上位ビットn−1〜i+1が格納される。プログラムカウンタ(PC)2から、分岐命令のアドレスの下位ビットi〜0が、EBTBのエントリに与えられると、分岐命令のアドレスの下位ビットi〜0に対応するエントリのTag21aに格納されているビット列が、判定部21dに出力される。判定部21dは、プログラムカウンタ2から、当該分岐命令のアドレスの上位ビットn−1〜i+1のビット列も与えられる。
【0037】
判定部21dは、EBTB21から出力されたビット列とプログラムカウンタ2から出力されたビット列とが一致するか否かの判定を行い、一致の場合は、ヒットとなる。なお、EBTB2を通常のBTBとしても用いる場合、判定部21の結果がヒットであると、分岐命令のアドレスの下位ビットi〜0に対応するエントリのTaddr21cが予測アドレスとして出力される。
【0038】
MCT21bは、ベース予測器10の分岐正否の分岐予測ミスの数カウントするためのものである。MCT21bは、EBTB21の各エントリに設けられているため、EBTB21では、Tag21aにアドレス(の一部)が格納されている分岐命令毎に、分岐予測ミスの数がカウントされることになる。
なお、MCT21bのサイズは、例えば、4bit程度あれば足りる。
また、EBTB21のエントリ数は、2i個である。
【0039】
[2.2.2 MBB(記憶部)の構成]
予測ミスの多発する分岐命令を格納するMBB(記憶部)22は、Addr22aと、LH22bと、U22cと、FR22dと、を備えている。
Addr22aは、予測ミスの多発する分岐命令のアドレス(nビット)が格納される領域であり、分岐命令アドレスの格納により、分岐命令が記憶されていることになる。
LH(Local branch History)22bは、分岐命令のローカル分岐履歴を記憶する領域であり、mビットのシフトレジスタによって構成され、過去m回の分岐正否を各ビットの0/1で記憶する。
【0040】
U(Use bit)22cは、該当するエントリが使用されているかどうかを示すビットであり、1が使用中を示し、0が未使用を示す。
FR(Trace Failure Rate)22dは、7bitの飽和カウンタであり、第2分岐予測部であるLHBP30の分岐予測ミスの数と、第1分岐予測部であるベース予測器10の分岐予測ミスの数と、の差を有効性情報として保持する。
【0041】
有効性情報は、ベース予測器(第1分岐予測部)10と比較したLHBP(第2分岐予測部)30の有効性を示す情報である。MBB22に(アドレスが)記憶されている分岐命令それぞれの有効性情報に基づいて、有効でないと判断された分岐命令は、MBB22から削除される(U22cが未使用を示す0にセットされる)。
【0042】
MBB22のエントリ数が多いほど、分岐予測ミスの多発する分岐命令(のアドレス)を、MBB22に多く格納することができる。ただし、本発明者らの実験の結果、MBB22のエントリ数を多くしても、分岐予測ミスの減少は僅かであったことから、MBB22のエントリ数(MBB22に記憶できる分岐命令数)は、8個又は16個程度でよい。
【0043】
[2.3 LHBP(第2分岐予測部)の構成]
第2分岐予測部であるLHBP30は、ベース予測器10にて分岐予測がなされる分岐命令の一部について、分岐成否の予測を行う。具体的には、LHBP30は、MBB22に記憶されている分岐命令(EBTB21によって分岐予測ミスが多いことが検出された分岐命令)について、分岐予測を行う。つまり、LHBP30にて分岐予測がなされる分岐命令につては、ベース予測器10とLHBP30の双方で分岐予測がなされることになる。
【0044】
LHBP30は、MBB22に記憶されている分岐命令毎に個別の分岐履歴(ローカル分岐履歴)に基づいて分岐予測を行う複数のLPHT(Local Pattern History Table)31,32,・・・を備えている。
【0045】
LPHT31,32,・・・は、それぞれ、分岐命令の分岐結果の履歴(ローカル分岐履歴)に基づいて分岐予測を行うためのPHT(Pattern History Table)として構成されている。
LPHT31,32,・・・は、それぞれ、NTCT(2bit Taken Not Taken saturating CounTer)31a,32aと、CF(ConFidence)31b,32bと、を有している。
【0046】
NTCT31a,32aは、一般的なPHTと同様に、2ビット飽和カウンタによって構成され、分岐の成否について予測される4つの状態(Strongly NotTaken, Weakly NotTaken, Weakly Taken, Strongly Taken)を保持している。NTCT31a,32aは、対応する分岐命令のみの分岐結果によって、インクリメント又はデクリメントされ、他の分岐命令の分岐結果によってはインクリメント又はデクリメントされない。
【0047】
CF31b,32bは、同一エントリのNTCT31a,32aによる予測の信頼性を示す信頼性情報を記憶する領域(信頼性情報記憶部)である。CF31a,32aは、2ビットMiss Resetting Counterとして構成されており、同一エントリのNTCT31a,32aによる予測が成功した場合には、CFがインクリメントされ、予測ミスの場合にはリセットされる。
【0048】
LPHT31,32・・・の個数は、MBB22のエントリ数(分岐予測ミスの多い分岐命令を記憶可能な数)と同じである。例えば、MBB22の一番目のエントリの分岐命令は、「LPHT1」31を用いて分岐予測がなされる。また、MBB22の二番目のエントリの分岐命令は、「LPHT2」32を用いて分岐予測がなされる。これにより、LHBP20においては、MBB22に格納されている分岐命令同士での破壊的競合は生じない。
また、MBB22に格納されている分岐命令の数は、ベース予測器(第1分岐予測部)10によって分岐予測がなされる分岐命令全体のうちのごく一部であるから、LHBP(第2分岐予測部)30を別途も受けても、ハードウェア量の増加は少ない。
【0049】
LPHT31,32・・・のエントリ数は、使用する分岐履歴(ローカル分岐履歴)の長さにより決まる。すなわち、LPHT31,32・・・は、それぞれ、分岐命令のローカル分岐履歴を記憶するLH22bのビット数mに対して、2mのエントリ数を持つ。LPHTのエントリ数は、例えば、512に設定することができる。
【0050】
[2.4 MBPによる予測ミスの多発する分岐命令の発見に関する処理]
[2.4.1 EBTBに関する動作(予測ミスの多発する分岐命令の発見)]
MBP20は、岐命令がコミットされるときに、分岐命令のアドレスを用いてEBTB21の検索を行う。つまり、分岐命令が実行されてベース分岐予測器10による分岐正否の結果が判明し、コミット状態になると、プログラムカウンタ2が示す当該分岐命令のアドレスを用いて、EBTB21を検索する。
EBTB21の検索の結果、検索対象の分岐命令アドレスがTag21aに格納されており、判定部21dの判定結果がヒットになり、かつ、当該分岐命令に対するベース予測器10による分岐予測が予測ミスであった場合には、対応するMCT21bがインクリメントされる。なお、判定部21dの判定結果がヒットになっても、予測ミスでない場合は、対応するMCT21bは変化しない。
【0051】
EBTB21の検索の結果、検索対象の分岐命令アドレスがTag21aに格納されておらず、判定部21dの判定結果がヒットにならない場合は、従来のBTBと同じように、Tag21aの更新を行い、当該分岐命令に対するベース予測器10による分岐予測が予測ミスであった場合には、MCTを1にセットし、予測成功であった場合には、MCTを0にセットする。
このようにして、EBTB21には、予測ミスの生じた分岐命令と、それぞれの分岐命令の予測ミスの数が保持される。
【0052】
いずれかのEBTBエントリのMCT21bが第1閾値に達すると、当該エントリの分岐命令に予測ミスが多発しているものとみなす。このようにして、EBTB21は、予測ミスの多い分岐命令を検出することができる。
【0053】
[2.4.2 MBBへの登録]
MCT21bが第1閾値に達した分岐命令は、そのアドレスが、MBB22のAddr22aに登録される。そして、該当するEBTB21のエントリのMCT21bがリセットされる。第1閾値に一旦達した分岐命令のMCT21bがリセットされることで、当該分岐命令の予測ミス数が再度カウント可能となり、当該分岐命令が、再度、MBB22に登録される機会が得られ易くなる。
【0054】
MBB22への登録は、以下のように行われる。まず、登録しようとした分岐命令のアドレスが、MBB22のAddr22aに存在するかどうかをチェックされる。このアドレスがMBB22に存在しない場合には、U22cが0(未使用)のエントリが存在するならば、そのエントリに、そのアドレスを登録し、U22cを1(使用)にする。
【0055】
もし、MBB22のU22cがすべて1(使用)の場合、すなわち、MBB22に記憶されている分岐命令の数が、MBB22に記憶可能な分岐命令の数(例えば、8個又は16個)の上限に達している場合、MBB22は、LRU(Least Recently Used)ロジックを利用して、最も最近使用されていないエントリを選択し、そのエントリのAddr22aに、そのアドレスを上書き登録する。また、そのエントリのFR22dもリセットされる。
【0056】
なお、本実施形態では、上記LRUロジックにおいては、LHBP(第2分岐予測部)30が正しく分岐予測でき、かつ、ベース予測器(第1分岐予測部)10が正しく予測できなかった場合に、分岐命令が使用されたものとみなす。
分岐命令が単に実行された場合に使用されたものとみなすのではなく、LHBP(第2分岐予測部)30が正しく分岐予測できた場合に、分岐命令が使用されたものとみなすことで、分岐予測ミスであった分岐命令は、MBB22から削除され易くなる。
また、ベース予測器(第1分岐予測部)10が正しく予測できなかった場合であることも使用の条件に加えることで、ベース予測器10の方が有用である分岐命令が、MBB22から削除され易くなる。
【0057】
[2.4.3 MBBの更新]
分岐命令がコミットされるとき、当該分岐命令が既にMBB22に登録されているならば、MBB22の更新が行われる。
当該分岐命令に対応するエントリのLH22bについては、ローカル履歴が更新される。つまり、シフトレジスタからなるLH22bに対して、当該分岐命令の実行結果(分岐正否の結果)としての0/1の入力によるシフトがなされる。
【0058】
FR22dの更新については、LHBP(第2分岐予測部)30での予測が失敗し、かつ、ベース予測器(第1分岐予測部)10の予測が成功の場合は、FR22dがインクリメントされる。一方、LHBP30での予想が成功、かつ、ベース予測器10の予測が失敗の場合は、デクリメントする。これにより、FR22dには、ベース予測器10と比較したLHBP30による予測の有効性情報として、ベース予測器10とLHBP30の予測の差を格納できる。
【0059】
FR22dの値が、第2閾値になると、LHBP30による予測ミスが、ベース予測器10よりも多く発生するために、LHBP30による予測が有効でないと判断し、MBB22は、当該エントリにおける各領域22a,22b,22c,22dをリセットする。これにより、LHBP30による予測が有効でないと判断された分岐命令が、MBB22から削除される。
【0060】
[2.4.4 LPHTの更新]
分岐命令がコミットされるときに、当該分岐命令のアドレスを用いて、MBB22を検索する。当該分岐命令のアドレスが、MBB22のいずれかのエントリのAddr22aに存在する場合には、そのAddr22aと同一エントリにあるLH22bのローカル分岐履歴を利用して、LPHTを更新する。
具体的には、当該分岐命令のアドレスに対応するAddr22aと同一エントリにあるLH22bが示すローカル履歴(mbitのビット列)に対応するLPHTエントリのNTCT32aを、当該LH22bが占めるローカル履歴の情報で更新する。
さらに、CF31b、32bの更新も行われる。すなわち、予測が成功した場合はインクリメントされ、予測ミスの場合はリセットされる。
【0061】
[2.5 LHBPによる分岐予測]
分岐命令がフェッチされるときに、フェッチされた分岐命令のアドレスを用いて、MBB22を検索する。当該アドレスが、MBB22のAddr22aに存在する場合には、そのAddr22aと同一エントリにあるLH22bに対応するLPHTのエントリのNTCTとCFの値を得る。
得られたNTCTを用いて、フェッチされた分岐命令のLHBP(第2分岐予測部)30による分岐予測結果(Taken 又は Not Taken)が出力され、CFの値とともにセレクタ40の取得部41に与えられる。
【0062】
取得部41は、LHBP30の分岐予測結果を、セレクタ本体42に与える。セレクタ本体42には、フェッチされた当該分岐命令のベース予測器(第1分岐予測部)10による分岐予測結果も与えられる。
セレクタ本体42は、取得部41からCFの値を得て、ベース予測器10による分岐予測結果とLHBP30による分岐予測結果とを選択的に出力する。具体的には、セレクタ本体42は、CF(信頼性情報)の値が第3閾値に達している場合に、LHBP30の分岐予測結果を出力し、その他の場合はベース予測器10の分岐予測結果を、出力する。
【0063】
CFの値は、予測ミスがあるとリセットされるため、CFの値が第3閾値に達するまで連続して予測に成功しないと、LHBP30の予測結果は使用されず、ベース予測器10による予測結果が使用される。これにより、ローカル履歴のみを用いたLHBP30による分岐予測の誤動作を緩和することができる。
【0064】
[3.評価]
[3.1 予測ミスの削減率の評価]
ベース予測器10として、Combining予測器、Bimode予測器、Bimode-Plus予測器、Agree予測器、Hybrid予測器の5種類を用いる。ベース予測器10であるCombining、Bimode、Bimode-Plus、Agreeのサイズを、8KB、16KB,32KB,64KBの4種類とし、Hybrid予測器のサイズは、10.5KB,17.75KB,30KB,60.5KBと設定する。
【0065】
図3〜図7は、それぞれ、分岐予測器1における予測ミスの削減率の評価結果を、ベンチマーク毎に示している。図3〜図7において、横軸はベンチマークであり、縦軸は、本実施形態に係る分岐予測器1の、ベース分岐予測器に対する予測ミス削減率である。
なお、ベンチマークとしては、CommBenchから、drr, reed_dec, reed_enc, rtr, zip_enc の5種類を用い、SPECint2000から、bzip, gcc, gzip, mcf, parser, twolf, vortex, vpr の8種類を用いた。
【0066】
図3〜図5に示すように、ベース予測器10として、Combining, Bimode, Bimode-Plusを用いた分岐予測器1は、SPECint2000において、最大40%以上、平均10%以上の予測ミスを減らすことができ、CommBenchにおいて、最大30%、平均6%以上の予測ミスを減らすことができた。
図6に示すように、ベース予測器10として、Agreeを用いた分岐予測器1は、SPECint2000において、最大23%以上、平均10%以上の予測ミスを減らすことができ、CommBenchにおいて、最大30%、平均6%程度の予測ミスを減らすことができた。
図7に示すように、ベース予測器10として、Hybridを用いた分岐予測器1は、SPECint2000において、最大45%以上、平均7%以上の予測ミスを減らすことができ、CommBenchにおいて、最大20%、平均3%程度の予測ミスを減らすことができた。
【0067】
[3.2 ハードウェア規模の検討]
実施形態に係る分岐予測器1のうち、EBTB21に関しては、BTBが持つ検索ポートを利用するために、BTBを拡張したEBTB21には、検索用のポートを追加する必要がない。また、EBTB21に含まれるMCT21bは4bitのため、EBTB21のエントリ数が、64個であれば、BTBを拡張してEBTB21にするために必要なメモリ量は、1KBである。
【0068】
MBB22について、Addr22aが32bit、LH22bが9bit、U22cが1bit、FR22dが7bitであると、各エントリそれぞれについての語長は49ビットとなる。したがって、MBB22のエントリ数を8とすると、MBB22のために必要なメモリ量は392bitのCAMとなる。
【0069】
LPHT31,32,・・・については、個数が8個、それぞれのエントリ数が512、NTCTが2bit、CFが2bitとすると、語長は4bitとなり、必要なメモリ量は2KBである。
【0070】
したがって、本実施形態に係る分岐予測器1は、従来の分岐予測器(ベース予測器のみ)に対して、3KB程度、ハードウェア量が増加する。
【0071】
図8は、予測器のサイズとそれらのMPKI(Miss-prediction Per Kilo Instruction)の関係を示す。予測器の各欄は、対応するサイズでのMPKIである。図8に示すように、例えば、8KBのCombining予測器と、8KBのCombining予測器をベース予測器10として有する分岐予測器1とを比較すると、MPKIの値が低下している。8KBのCombining予測器をベース予測器10として有する分岐予測器1は、64KBのCombining予測器と同等以上の性能になる。これは、Bimode、Bimode-Plus、Agreeについても同様である。
これらのことより、本実施形態の分岐予測器1は、従来の分岐予測器のエントリー数の増加以上の効果が得られる。
【0072】
[4.付記]
なお、上記において開示した事項は、例示であって、本発明を限定するものではなく、様々な変形が可能である。
【符号の説明】
【0073】
1 分岐予測器
10 第1分岐予測部(ベース予測器)
20 記憶部(MBB)
30 第2分岐予測部(LHBP)
40 セレクタ
【特許請求の範囲】
【請求項1】
分岐命令の分岐正否の予測を行う第1分岐予測部と、
前記第1分岐予測部による分岐予測ミスの数が閾値に達した分岐命令を記憶する記憶部と、
前記記憶部に記憶された分岐命令それぞれについて個別に分岐正否の予測を行う第2分岐予測部と、
を備え、
予測の対象となる分岐命令が前記記憶部に記憶されている場合には、前記第2分岐予測部による予測を行う
ことを特徴とする分岐予測器。
【請求項2】
前記記憶部は、前記記憶部に記憶された分岐命令それぞれについて、前記第1分岐予測部と比較した前記第2分岐予測部による予測の有効性を示す有効性情報を記憶し、
前記有効性情報に基づいて前記第2分岐予測部による予測が有効でないと判断された分岐命令を、前記記憶部から削除する
請求項1記載の分岐予測器。
【請求項3】
前記記憶部は、前記記憶部に記憶されている分岐命令の数が、記憶可能な分岐命令の数の上限に達した場合には、LRUロジックに基づいて、前記記憶部に記憶されている分岐命令のうち最も最近使用されていない分岐命令に、前記第1分岐予測部による分岐予測ミスの数が前記閾値に達した新たな分岐命令を上書きすることで、前記新たな分岐命令を記憶し、
前記LRUロジックでは、前記第2分岐予測部が正しく予測できた場合に、分岐命令が使用されたものとみなす
請求項1又は2記載の分岐予測器。
【請求項4】
前記LRUロジックでは、第2分岐予測部が正しく予測でき、かつ、第1分岐予測部が正しく予測できなかった場合に、分岐命令が使用されたものとみなす
請求項3記載の分岐予測器。
【請求項5】
前記第1分岐予測部による分岐予測ミスの数を分岐命令毎にカウントするカウンタを備え、
前記カウンタの値が前記閾値に達した分岐命令が前記記憶部に記憶されるとともに、前記カウンタの値が前記閾値に達すると前記カウンタがリセットされる
請求項1〜4のいずれか1項に記載の分岐予測器。
【請求項6】
前記記憶部は、前記記憶部に記憶された分岐命令それぞれの分岐結果の履歴を示す履歴情報を記憶する
請求項1〜5のいずれか1項に記載の分岐予測器。
【請求項7】
前記第2分岐予測部は、分岐命令の分岐結果の履歴に基づいて分岐予測を行うためのPHT(Pattern History Table)を、前記記憶部に記憶された分岐命令毎に有している
請求項1〜6のいずれか1項に記載の分岐予測器。
【請求項8】
前記第1分岐予測部の予測結果と前記第2分岐予測部の予測結果とを選択的に出力するセレクタを備えている
請求項1〜7のいずれか1項に記載の分岐予測器。
【請求項9】
前記記憶部に記憶された分岐命令それぞれについて、前記第2分岐予想部による予測の信頼性を示す信頼性情報を記憶する信頼性情報記憶部を備え、
前記信頼性情報は、前記第2分岐予測器の予測が成功した数に基づく情報であり、
前記セレクタは、前記信頼性情報に基づいて、前記第1分岐予測部の予測結果及び前記第2分岐予測部の予測結果のいずれを出力するかを決定する
請求項1〜8のいずれか1項に記載の分岐予測器。
【請求項10】
請求項1〜9のいずれか1項に記載の分岐予測器によって分岐命令の分岐予測を行うプロセッサ。
【請求項1】
分岐命令の分岐正否の予測を行う第1分岐予測部と、
前記第1分岐予測部による分岐予測ミスの数が閾値に達した分岐命令を記憶する記憶部と、
前記記憶部に記憶された分岐命令それぞれについて個別に分岐正否の予測を行う第2分岐予測部と、
を備え、
予測の対象となる分岐命令が前記記憶部に記憶されている場合には、前記第2分岐予測部による予測を行う
ことを特徴とする分岐予測器。
【請求項2】
前記記憶部は、前記記憶部に記憶された分岐命令それぞれについて、前記第1分岐予測部と比較した前記第2分岐予測部による予測の有効性を示す有効性情報を記憶し、
前記有効性情報に基づいて前記第2分岐予測部による予測が有効でないと判断された分岐命令を、前記記憶部から削除する
請求項1記載の分岐予測器。
【請求項3】
前記記憶部は、前記記憶部に記憶されている分岐命令の数が、記憶可能な分岐命令の数の上限に達した場合には、LRUロジックに基づいて、前記記憶部に記憶されている分岐命令のうち最も最近使用されていない分岐命令に、前記第1分岐予測部による分岐予測ミスの数が前記閾値に達した新たな分岐命令を上書きすることで、前記新たな分岐命令を記憶し、
前記LRUロジックでは、前記第2分岐予測部が正しく予測できた場合に、分岐命令が使用されたものとみなす
請求項1又は2記載の分岐予測器。
【請求項4】
前記LRUロジックでは、第2分岐予測部が正しく予測でき、かつ、第1分岐予測部が正しく予測できなかった場合に、分岐命令が使用されたものとみなす
請求項3記載の分岐予測器。
【請求項5】
前記第1分岐予測部による分岐予測ミスの数を分岐命令毎にカウントするカウンタを備え、
前記カウンタの値が前記閾値に達した分岐命令が前記記憶部に記憶されるとともに、前記カウンタの値が前記閾値に達すると前記カウンタがリセットされる
請求項1〜4のいずれか1項に記載の分岐予測器。
【請求項6】
前記記憶部は、前記記憶部に記憶された分岐命令それぞれの分岐結果の履歴を示す履歴情報を記憶する
請求項1〜5のいずれか1項に記載の分岐予測器。
【請求項7】
前記第2分岐予測部は、分岐命令の分岐結果の履歴に基づいて分岐予測を行うためのPHT(Pattern History Table)を、前記記憶部に記憶された分岐命令毎に有している
請求項1〜6のいずれか1項に記載の分岐予測器。
【請求項8】
前記第1分岐予測部の予測結果と前記第2分岐予測部の予測結果とを選択的に出力するセレクタを備えている
請求項1〜7のいずれか1項に記載の分岐予測器。
【請求項9】
前記記憶部に記憶された分岐命令それぞれについて、前記第2分岐予想部による予測の信頼性を示す信頼性情報を記憶する信頼性情報記憶部を備え、
前記信頼性情報は、前記第2分岐予測器の予測が成功した数に基づく情報であり、
前記セレクタは、前記信頼性情報に基づいて、前記第1分岐予測部の予測結果及び前記第2分岐予測部の予測結果のいずれを出力するかを決定する
請求項1〜8のいずれか1項に記載の分岐予測器。
【請求項10】
請求項1〜9のいずれか1項に記載の分岐予測器によって分岐命令の分岐予測を行うプロセッサ。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【公開番号】特開2013−58135(P2013−58135A)
【公開日】平成25年3月28日(2013.3.28)
【国際特許分類】
【出願番号】特願2011−196973(P2011−196973)
【出願日】平成23年9月9日(2011.9.9)
【新規性喪失の例外の表示】特許法第30条第1項適用申請有り 情報処理学会 電子図書館 情報学広場のトップページ及び当該トップページから先進的計算基板システムシンポジウム2011のインデックスを表示させたページのプリントアウト2011年5月18日掲載
【出願人】(593006630)学校法人立命館 (359)
【Fターム(参考)】
【公開日】平成25年3月28日(2013.3.28)
【国際特許分類】
【出願日】平成23年9月9日(2011.9.9)
【新規性喪失の例外の表示】特許法第30条第1項適用申請有り 情報処理学会 電子図書館 情報学広場のトップページ及び当該トップページから先進的計算基板システムシンポジウム2011のインデックスを表示させたページのプリントアウト2011年5月18日掲載
【出願人】(593006630)学校法人立命館 (359)
【Fターム(参考)】
[ Back to top ]