(57)【特許請求の範囲】
【請求項１】
命令キャッシュと、前記命令キャッシュのエントリに各々が対応する第１の複数のエントリを備えている第１の疎キャッシュとを備えたマイクロプロセッサであって、
前記第１の疎キャッシュの各エントリは、
第１の数より多くない分岐命令に対して分岐予測情報をストアし、
前記命令キャッシュの対応するエントリが前記第１の数より多い分岐命令を含むか否かの表示をストアするように構成されているマイクロプロセッサ。
【請求項２】
第２の複数のエントリを備えている密キャッシュを更に備え、
前記第２の複数のエントリの各々は、前記第１の数の分岐命令内に含まれない追加的な分岐命令に対して分岐予測情報をストアするように構成されている、請求項１に記載のマイクロプロセッサ。
【請求項３】
前記第１の疎キャッシュの全ての退去させられたエントリをストアするように構成されている第２の疎キャッシュを更に備えた、請求項２に記載のマイクロプロセッサ。
【請求項４】
前記命令キャッシュ内のエントリ及び前記第１の疎キャッシュ内の対応するエントリは同一のアドレスによって選択される、請求項３に記載のマイクロプロセッサ。
【請求項５】
前記第１の疎キャッシュのエントリ内の前記ストアされた表示は、前記密キャッシュ内のエントリを選択するために利用されるビットベクタを備えており、各ビットは前記命令キャッシュのエントリ内の領域に対応している、請求項４に記載のマイクロプロセッサ。
【請求項６】
前記分岐予測情報は前記命令キャッシュのエントリ内の対応する分岐命令のロケーションを表示するエンドポインタを備えている、請求項５に記載のマイクロプロセッサ。
【請求項７】
前記分岐予測情報は分岐命令の種類及び分岐予測ユニットによって利用されるバイアス重み値を表示している、請求項６に記載のマイクロプロセッサ。
【請求項８】
前記分岐予測情報は分岐予測ユニットによって利用される分岐目標アドレスを備えている、請求項７に記載のマイクロプロセッサ。
【請求項９】
分岐予測を改善するための方法であって、
命令キャッシュのエントリ内の第１の数より多くない分岐命令に対して第１の疎キャッシュのエントリ内に分岐予測情報をストアすることと、
前記命令キャッシュの対応するエントリが前記第１の数より多い分岐命令を含むか否かの表示を前記第１の疎キャッシュの前記エントリ内にストアすることとを備えた方法。
【請求項１０】
前記第１の数の分岐命令内に含まれない追加的な分岐命令に対する分岐予測情報を密キャッシュ内にストアすることを更に備えた、請求項９に記載の方法。
【請求項１１】
前記第１の疎キャッシュの退去させられたエントリを第２の疎キャッシュ内にストアすることを更に備えた、請求項１０に記載の方法。
【請求項１２】
前記命令キャッシュ内のエントリ及び前記第１の疎キャッシュ内の対応するエントリを同一のアドレスによって選択することを更に備えた、請求項１１に記載の方法。
【請求項１３】
前記第１の疎キャッシュのエントリ内の前記ストアされた表示は、前記密キャッシュ内のエントリを選択するために利用されるビットベクタを備えており、各ビットは前記命令キャッシュのエントリ内の領域に対応している、請求項１２に記載の方法。
【請求項１４】
前記分岐予測情報内に含まれる対応するエンドポインタによって前記命令キャッシュのエントリ内の分岐命令のロケーションを表示することを更に備えた、請求項１３に記載の方法。
【請求項１５】
分岐命令の種類及び分岐予測ユニットによって利用されるバイアス重み値を前記分岐予測情報内に表示することを更に備えた、請求項１４に記載の方法。
【請求項１６】
前記分岐予測情報は分岐予測ユニットによって利用される分岐目標アドレスを備えている、請求項１５に記載の方法。
【請求項１７】
命令キャッシュのエントリに各々が対応する第１の複数のエントリを備えている第１の疎キャッシュを備えたハイブリッド分岐予測デバイスであって、
前記第１の疎キャッシュの各エントリは、
第１の数より多くない分岐命令に対して分岐予測情報をストアし、
前記命令キャッシュの対応するエントリが前記第１の数より多い分岐命令を含むか否かの表示をストアするように構成されているハイブリッド分岐予測デバイス。
【請求項１８】
第２の複数のエントリを備えている密キャッシュを更に備え、
前記第２の複数のエントリの各々は、前記第１の数の分岐命令内に含まれない追加的な分岐命令に対して分岐予測情報をストアするように構成されている、請求項１７に記載のハイブリッド分岐予測デバイス。
【請求項１９】
前記第１の疎キャッシュの全ての退去させられたエントリをストアするように構成されている第２の疎キャッシュを更に備えた、請求項１８に記載のハイブリッド分岐予測デバイス。
【請求項２０】
前記第１の疎キャッシュのエントリ内の前記ストアされた表示は、前記密キャッシュ内のエントリを選択するために利用されるビットベクタを備えており、各ビットは前記命令キャッシュのエントリ内の領域に対応している、請求項１９に記載のハイブリッド分岐予測デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はマイクロプロセッサに関し、更に詳しくは分岐予測メカニズムに関する。
【背景技術】
【０００２】
最新のマイクロプロセッサは１つ以上のプロセッサコア又はプロセッサを含むであろうし、各プロセッサはソフトウエアアプリケーションの命令を実行することができる。これらのプロセッサは典型的にはパイプライン化され、この場合、これらのプロセッサは１つ以上のデータ処理段階を含み、データ処理段階はこれらの間に位置する記憶要素（レジスタ及びアレイ）と共に直列に接続されている。１つの段階の出力は、クロック周期又は位相を規定するクロックの遷移の間に次の段階の入力とされ、当該遷移は１つのクロックのほんの一瞬である。パイプラインは命令処理の部分部分が実行される任意の数の段階に分割されていてよいが、命令処理は一般的に、命令をフェッチすること(fetching)と、命令を復号化することと、命令を実行することと、実行された結果を命令によって指定される宛先にストアすることとを備えている。
【０００３】
理想的には、クロック周期毎にパイプラインの各段階に対する命令の有用な実行が生み出される。しかし、パイプライン内のストール(stall)が当該パイプライン段階の間に実行されるべき有用なワークを生じさせないことがある。幾つかのストールは数クロック周期を持続させることがあり、そしてプロセッサ性能を著しく低下させ得る。ストールの幾つかの例は、データキャッシュ又は命令キャッシュのミス、命令間のデータ依存性、及び予測を誤った分岐命令のような制御フロー予測ミスを含む。
【０００４】
プロセッサ性能に対するストールのネガティブな影響は、パイプライン段階を重複させることによって低減され得る。更なる技術は命令の順序外実行(out-of-order execution)を可能にすることであり、それによりデータ依存ストールの低減が支援される。また、スーパースケーラアーキテクチャ(superscalar architecture)を伴うコアは、動的なスケジューリングに基きクロック周期毎に変化する数の命令を発行する。しかし、数クロック周期のストールは、それら全てのストール周期を隠すことを妨げるであろう順序どおりのリタイアメント(in-order retirement)に起因して、それでもなおプロセッサの性能を低下させる。そこで、性能損失を低減するための他の方法は、多重周期ストールの発生を低減することである。１つのそのような多重周期ストールは、分岐命令のような制御フロー命令の予測ミスである。
【０００５】
分岐命令は、条件付きの又は無条件の、及び直接の又は間接の、のような多くの種類を備えている。条件付き分岐命令は、命令ストリームをどのパスが取り入れるかの決定を実行する。命令内で符号化されているであろう指定の条件が満たされていないと分岐命令が決定した場合、その分岐命令は取り込まれるべきではないとみなされ、そしてプログラム順序における次のシーケンシャル命令が実行される。一方で、指定の条件が満たされていると分岐命令が決定した場合には、その分岐命令は取り込まれるべきであるとみなされる。その結果、プログラム順序内の次のシーケンシャル命令ではなく、むしろ分岐目標アドレスに配置される命令である後続の命令が実行される。無条件分岐命令は常に取り込まれる条件付き分岐命令とみなされる。試験する命令内には指定の条件はなく、そして後続の命令の実行は常にシーケンシャル順序とは異なるシーケンスで発生する。
【０００６】
また、分岐目標アドレスは、当該分岐命令それ自身内にストアされているであろうオフセットによって、プログラムカウンタ（ＰＣ）レジスタ内にストアされる線形アドレス値に対して指定され得る。この種の分岐目標アドレスは直接的であると称される。分岐目標アドレスはまた、レジスタ又はメモリ内の値によって指定することができ、この場合、レジスタ又はメモリロケーションが分岐命令内にストアされているであろう。この種の分岐目標アドレスは間接的であると称される。更に、間接的分岐命令においては、分岐目標アドレスを指定しているレジスタは異なる値でロードされ得る。
【０００７】
無条件間接的分岐命令の例は、プログラムコード内にサブルーチンを実装するために使用されることができ且つ分岐目標アドレスを供給するためにリターンアドレススタック（ＲＡＳ）を用いることができる手続きコール及びリターンを含む。他の例は、スイッチケース命令文(switch-case statement)を実装するために用いられ得る間接的ジャンプ命令であり、スイッチケース命令文はＣ＋＋及びＪａｖａのようなオブジェクト指向プログラムにおいて一般的である。
【０００８】
条件付き分岐命令の例は、プログラムコード内にループを実装するために用いられ得る分岐命令である（例えば「フォー(for)」及び「ホワイル(while)」構成）。条件付き分岐命令は、取り込まれるとみなされるべき指定の条件を満たす必要がある。満たされた条件の例は、指定のレジスタがその時点でゼロのストア値を保持していることであり得る。指定のレジスタは当該条件付き分岐命令において符号化される。この指定のレジスタは、ソフトウエアアプリケーションコード内の命令によってループ内でデクリメントされるそのストア値を有することができる。指定のレジスタの出力は、専用のゼロ検出組み合わせ論理に入力されるであろう。
【０００９】
また、複数の条件付き分岐命令は互いにいくらかの依存関係を有していることがある。例えば、プログラムは次のような単純なケースを有しているかもしれない。
ｉｆ（ｖａｌｕｅ＝＝０）ｖａｌｕｅ＝＝１；
ｉｆ（ｖａｌｕｅ＝＝１）
【００１０】
上記ケースを実装するために用いられるであろう条件付き分岐命令は、条件を予測する正確性を改善するために用いられ得るグローバル履歴を有しているであろう。１つの形態では、予測は２ビットカウンタによって実装され得る。次に分岐予測を更に詳細に説明する。
【００１１】
最新のマイクロプロセッサは、分岐命令の条件の結末を決定し且つ分岐目標アドレスを決定するために多重化クロック周期を必要とすることがある。特定のパイプライン内で実行中の特定のスレッドに対して、分岐命令が復号化されるまで分岐命令又は後続の命令によっては有用なワークが実行されないことがあり、そして後で条件の結末及び分岐目標アドレスの両方が知られることになる。これらのストール周期はプロセッサの性能を低下させる。
【００１２】
ストールよりもむしろ、予測は命令がフェッチされた直後に条件付き分岐条件及び分岐目標アドレスから作成され得る。いつ予測が整ったかに関する正確な段階は、パイプライン実装に依存している。分岐条件を予測するために、メモリからの、例えば命令キャッシュ（ｉキャッシュ）からの命令をフェッチするために用いられるＰＣは、分岐予測論理を索引付けるために用いられ得る。ＰＣを用いる早期の組み合わせによる予測スキームの１つの例は、スコット・マクファーリン(Scott McFarling)の１９９３年の文献、「組み合わせ分岐予測器」、デジタル・ウエスタン・リサーチ・ラボラトリ・テクニカル・ノートＴＮ−３６("Combining Branch Predictors", Digital Western Research Laboratory Technical Note TN- 36)に記載されているジーセレクト(gselect)分岐予測方法であり、当該文献はその全部を参照のためにここに組み込まれる。ＰＣにストアされる線形アドレスは、ハッシング(hashing)機能におけるグローバル履歴レジスタ内にストアされる値と組み合わされるであろう。ハッシング機能の出力及びＰＣは、パターン履歴テーブル（ＰＨＴ）、分岐目標バッファ（ＢＴＢ）その他の予測テーブルを索引付けるために用いられ得る。取り込まれた又は取り込まれなかった予測よりはむしろ、その時点での分岐命令の分岐目標アドレス情報でのグローバル履歴レジスタの更新は、条件付き分岐方向予測（即ち、取り込まれ又は取り込まれなかった結末予測）及び、ＢＴＢ予測又は間接的目標アレイ予測のような間接的分岐目標アドレス予測の両方の予測精度を高めることができる。多くの異なるスキームが分岐予測メカニズムの種々の形態に含まれ得る。
【００１３】
高い分岐予測精度は、より電力効率が良好で且つより高性能なマイクロプロセッサに貢献する。予測された命令ストリームからの命令は、分岐命令の実行に先立ち投機的に(speculatively)実行されてよく、そしてどんな場合でも分岐命令の実行に先立ちプロセッサのパイプライン内に置かれる。予測された命令ストリームが正しい場合には、クロック周期毎に実行される命令の数は有利に増加させられる。しかし、予測された命令ストリームが正確でない場合（即ち１つ以上の分岐命令が不正確に予測されている場合）には、不正確に予測された命令ストリームからの命令はパイプラインから破棄され、そしてクロック周期毎に実行される命令の数は減少させられる。
【００１４】
多くの場合、分岐予測メカニズムは、特定の分岐命令に対するより正確な挙動をなすために、分岐命令の先行する実行の履歴を備えている。そのような分岐予測履歴は典型的には、分岐命令に対応するデータを記憶装置内に維持している必要がある。また、目標アドレス予測において用いられる全部の又は一部の分岐目標アドレスをストアするために、分岐目標バッファ（ＢＴＢ）が用いられることがある。履歴及びアドレス情報を備えている分岐予測データが記憶装置から退去させられ、あるいは失われた場合には、分岐命令のためのデータを後で再生成する必要があろう。
【００１５】
上述の問題の１つの解決法は、分岐予測記憶装置の規模を大きくすることであろう。しかし、分岐予測記憶装置の規模を大きくすることは、ゲート領域の顕著な増大及び分岐予測メカニズムの規模の顕著な拡大を必要とするであろう。その結果、ゲート領域及び電力消費を減少させるために分岐予測記憶装置の規模を小さくすることによって、分岐の挙動に関する有益なデータは退去させられるかもしれず、そして再生成されなければならない。
【発明の概要】
【発明が解決しようとする課題】
【００１６】
上述に鑑み、ゲート数の顕著な増大又は分岐予測メカニズムの規模の顕著な拡大を必要とせずに分岐予測能力を向上させるための効果的な方法及びメカニズムが要望されている。
【課題を解決するための手段】
【００１７】
マイクロプロセッサにおける分岐予測のためのシステム及び方法が検討される。
【００１８】
１つの実施形態では、マイクロプロセッサ内のハイブリッド分岐予測デバイスが提供される。命令キャッシュ（ｉキャッシュ）の各エントリ内の予め定められた数の分岐に対する分岐予測情報に対して記憶装置を割り当てるよりもむしろ、ハイブリッドデバイスは、命令キャッシュの各エントリ内の通常のより小さい数より多くない分岐に対して第１の記憶装置内に分岐予測情報をストアする。ｉキャッシュラインが追加的な分岐を備えているあまり一般的でない場合に対しては、デバイスは、対応する分岐予測情報を第２の記憶装置内にストアする。
【００１９】
また、疎キャッシュ及び密キャッシュを備えたハイブリッド分岐予測デバイスが検討される。疎キャッシュの各エントリは、命令キャッシュのエントリ又はキャッシュラインに対応する。これらの対応するエントリは、命令フェッチ要求の間にプロセッサから送られる同一のアドレスによって選択されてよい。疎キャッシュのエントリの各々は、命令キャッシュライン内の予め定められた数より多くない分岐命令に対して分岐予測情報をストアする。また、各エントリは、この命令キャッシュラインが追加的な分岐命令を含んでいてよいか否かの表示、例えばビットベクタをストアする。この表示はまた、追加的な分岐に対する分岐予測情報をストアするための密キャッシュ内のエントリを選択するために用いられてよい。ハイブリッド分岐予測デバイスはまた、第１の疎キャッシュから退去させられたエントリをストアするための第２の疎キャッシュを備えている。全てのエントリはストアされ、分岐予測情報は失われずあるいは後で再構築される必要がない。
【図面の簡単な説明】
【００２０】
【図１】図１はプロセッサコアの１つの実施形態の一般化されたブロック図である。
【００２１】
【図２】図２は分岐予測ユニットの１つの実施形態を示す一般化されたブロック図である。
【００２２】
【図３】図３はｉキャッシュ記憶配置の１つの実施形態を示す一般化されたブロック図である。
【００２３】
【図４】図４はハイブリッド分岐予測を伴うプロセッサコアの１つの実施形態を示す一般化されたブロック図である。
【００２４】
【図５】図５は分岐予測ユニットの１つの実施形態を示す一般化されたブロック図である。
【００２５】
【図６】図６は疎キャッシュ記憶配置の１つの実施形態を示す一般化されたブロック図である。
【００２６】
【図７】図７は密分岐キャッシュ記憶配置の１つの実施形態を示す一般化されたブロック図である。
【００２７】
【図８】図８は分岐予測の効果的な改良のための方法の１つの実施形態のフロー図である。
【００２８】
本発明が種々の修正及び代替的な形態を許容し得る一方で、具体的な実施形態が例示の目的で図面に示されており、またここに詳細に説明されている。しかし、図面及びそれに対する詳細な説明は、開示された特定の形態に本発明を限定することを意図しているのではなく、むしろ本発明は、添付の特許請求の範囲により画定されるような本発明の精神及び範囲内にある全ての修正、均等なもの及び代替案を網羅するものであることが理解されるべきである。
【発明を実施するための形態】
【００２９】
以下の説明においては、本発明の完全な理解をもたらすために多くの特定の詳細が示されている。しかし、当業者であれば、これらの特定の詳細なしに本発明を実施し得ることを認識すべきである。幾つかの例では、周知の回路、構造及び技術は、本発明を不明瞭にすることを避けるために、詳細には示されていない。
【００３０】
図１を参照すると、順序外実行を行うプロセッサコア１００の一般化されたブロック図の１つの実施形態が示されている。コア１００は所定の命令セットアーキテクチャ（ＩＳＡ）に従う命令を実行するための回路を含む。例えば、ｘ８６命令セットアーキテクチャが選択されてよい。代替的には、任意の他の命令セットアーキテクチャが選択されてよい。１つの実施形態では、コア１００は単一プロセッサ構成内に含まれていてよい。もう１つの実施形態では、コア１００は多重化プロセッサ構成内に含まれていてよい。他の実施形態では、コア１００は多重化ノードシステムの処理ノード内の多重化コア構成内に含まれていてよい。
【００３１】
命令キャッシュ（ｉキャッシュ）１０２はソフトウエアアプリケーションに対する命令をストアすることができ、またデータキャッシュ（ｄキャッシュ）１１６は命令によって実行される計算で用いられるデータをストアすることができる。一般的に言うと、１つのキャッシュは１つ以上のブロックをストアすることができ、各ブロックは、図示しないシステムメモリ内の対応するアドレスにストアされるデータのコピーである。ここで用いられる「ブロック」は、連続したメモリロケーションにストアされる一連のバイトであり、コヒーレンシ(coherency)目的のための単位として取り扱われる。幾つかの実施形態では、ブロックはキャッシュ内での割り当て及び割り当て解除(allocation and deallocation)の単位でもある。１つのブロック内のバイトの数は、設計上の選択に従って変化してよく、また任意のサイズのものであってよい。例としては、３２バイト及び６４バイトのブロックがよく用いられる。
【００３２】
キャッシュ１０２及び１１６は、図示されるように、プロセッサコア１００内に集積化されていてよい。代替的には、キャッシュ１０２及び１１６は、所望に応じてバックサイドキャッシュ構成又はインライン構成でコア１００と結合されていてよい。更には、キャッシュ１０２及び１１６はキャッシュの階層(hierarchy)として実装されてよい。１つの実施形態では、キャッシュ１０２及び１１６は各々Ｌ１及びＬ２キャッシュ構造を代表する。他の実施形態では、キャッシュ１０２及び１１６は、Ｌ３キャッシュ構造として実装されるもう１つのキャッシュ（図示せず）を共有してよい。代替的には、キャッシュ１０２及び１１６の各々はＬ１キャッシュ構造を代表し、そして共有されるキャッシュ構造はＬ２キャッシュ構造であってよい。所望に応じて他の組み合わせが可能でありまた選択されてよい。
【００３３】
キャッシュ１０２及び１１６並びに任意の共有されるキャッシュの各々は、対応するキャッシュ制御器に結合されるキャッシュメモリを含んでいてよい。コア１００が多重化コアシステム内に含まれている場合には、メモリ制御器（図示せず）は、パケットを経路付け、データ処理のためにパケットを受け取り、そしてコア１００内の論理によって用いられる内部クロックにパケットを同期させるために用いられてよい。また、多重化コアシステムにおいては、多重化プロセッサの多重化キャッシュ内にメモリブロックの多重化コピーが存在してよい。従ってメモリ制御器内には、キャッシュコヒーレンシ回路が含まれていてよい。与えられたブロックは１つ以上のキャッシュ内にストアされていてよく、またキャッシュコピーの１つはメモリシステム内のコピーに対して修正されているであろうから、コンピューティングシステムは多くの場合にキャッシュとメモリシステムの間のコヒーレンシを維持する。コヒーレンシは、所定のコヒーレンシプロトコルに従ってブロックの他のキャッシュコピーによってブロックに対する更新が反映される場合に維持される。種々の具体的なコヒーレンシプロトコルが周知である。
【００３４】
命令フェッチユニット（ＩＦＵ）１０４は、ｉキャッシュミスが無い場合にクロック周期毎にｉキャッシュ１０２から多重化命令をフェッチしてよい。ＩＦＵ１０４は、ｉキャッシュ１０２からフェッチすべき次の命令のアドレスに対するポインタを保持するプログラムカウンタ（ＰＣ）レジスタを含んでいてよい。分岐予測ユニット１２２がＩＦＵ１０４に結合されていてよい。ユニット１２２は、命令ストリームのフローを次のシーケンシャル命令を実行することから変化させる命令の情報を予測するように構成されてよい。予測情報の例は、次のシーケンシャル命令が実行されるべきかあるいは命令ストリームにおける他のロケーション内の命令が次に実行されるべきかを決定する条件が満たされているか否かの予測を備えた１ビット値を含んでいてよい。予測情報の他の例は、次のシーケンシャル命令とは異なる実行すべき次の命令のアドレスであってよい。実際の結末及び予測が正しかったか否かの決定は、後でのパイプライン段階において生じてよい。また、代替的な実施形態においては、ＩＦＵ１０４及びユニット１２２を２つの別のユニットとして実装するよりもむしろ、ＩＦＵ１０４がユニット１２２を備えていてよい。
【００３５】
復号器ユニット１０６は、多重化フェッチ命令のオペコード(opcodes)を復号化する。復号器ユニット１０６は、並べ替えバッファ１１８のような順序どおりのリタイアメントキュー(in-order retirement queue)におけるエントリを予約ステーション１０８内及びロード／ストアユニット１１４内に割り当ててよい。予約ステーション１０８におけるエントリの割り当ては発送(dispatch)とみなされる。予約ステーション１０８は、複数の命令がそれらのオペランドが利用可能になるまで待機する命令キューとして機能することができる。オペランドが利用可能であり且つハードウエア資源も利用可能である場合、命令は予約ステーション１０８から整数及び浮動小数点機能ユニット１１０又はロード／ストアユニット１１４へ順序外(out-of-order)に発行されてよい。機能ユニット１１０は、加算、減算、掛け算、割り算、及び平方根のようなコンピュータ計算のための演算論理ユニット（ＡＬＵ）を含んでいてよい。分岐命令の結末を決定しまた計算された結末を予測された値と比較するための論理が含まれていてよい。一致しない場合には、予測ミスが発生し、そして分岐命令の後の後続の命令は除去される必要があり、また新たなフェッチが正しいＰＣ値で実行される必要がある。
【００３６】
ロード／ストアユニット１１４はメモリアクセス命令を実行するためのキュー及び論理を含んでいてよい。また、正しい最も若いストア命令からの受信され転送されたロード命令データ又はバイパスデータを確保するために、照合論理がロード／ストアユニット１１４内にあってよい。
【００３７】
機能ユニット１１０及びロード／ストアユニット１１４からの結果は、共通データバス１１２上に提示されてよい。結果は並べ替えバッファ１１８に送られてよい。ここで、それ自身の結果を受け取り、リタイアメントに対して標識付けられ、且つ先頭キュー(head-of-the-queue)である命令は、その結果をレジスタファイル１２０へ送ってよい。レジスタファイル１２０は、プロセッサコア１００の汎用レジスタのアーキテクチャ状態を保持することができる。１つの実施形態では、レジスタファイル１２０は３２個の３２ビットレジスタを含んでいてよい。次いで、並べ替えバッファ内の命令は順序どおりにリタイアさせられてよく、そしてその先頭キューポインタは、プログラム順序における後続の命令に対して調節されてよい。
【００３８】
共通データバス１１２上の結果は、結果を待っている命令のオペランドに値を転送するために、予約ステーションへ送られてよい。これらの待機している命令がそれらのオペランドに対する値を有しており且つハードウエア資源が当該命令を実行するために利用可能である場合には、これらの命令は、予約ステーション１０８から機能ユニット１１０又はロード／ストアユニット１１４内の適切なハードウエア資源に対して順序外で発行されてよい。共通データバス１１２上の結果は、制御フロー予測情報及び／又はＰＣ値を更新するために、ＩＦＵ１０４及びユニット１２２へ経路付けられてよい。
【００３９】
図２は分岐予測ユニット２００の１つの実施形態を示している。命令のアドレスはレジスタプログラムカウンタ２１０（ＰＣ２１０）内にストアされる。１つの実施形態では、アドレスは３２ビット又は６４ビット値であってよい。グローバル履歴シフトレジスタ２４０（ＧＳＲ２４０）は、条件付き分岐命令の末尾の予測結果の最新の履歴を含んでいてよい。１つの実施形態では、ＧＳＲ２４０は１エントリ１０ビットシフトレジスタであってよい。他の実施形態では、シフトレジスタＧＳＲ２４０は異なる数のビットを含んでいてよい。ＧＳＲ２４０にストアされている情報は、グローバル履歴を用いることによって、その時点での条件付き分岐命令の条件が満たされているか否かを予測するために用いられてよい。例えば１つの実施形態では、ＧＳＲ２４０は、プログラム実行における最後の１０個の条件付き分岐命令の１ビットの取り込まれた／取り込まれなかった結果を保持する１０ビットシフトレジスタであってよい。１つの実施形態では、論理「１」は取り込まれた結末を示してよく、また論理「０」は取り込まれなかった結末を示してよく、あるいは逆であってもよい。また代替的な実施形態においては、ＧＳＲ２４０は、分岐毎基準(per-branch basis)に対応する又は分岐履歴のテーブル内で結合された分岐履歴に対応する情報を用いてよい。これらの実施形態においては、分岐予測を作成するために用いられるグローバル履歴情報を提供するために、１つ以上の分岐履歴テーブル（ＢＨＴ）が用いられてよい。
【００４０】
十分なアドレスビット（即ちＰＣ２１０にストアされているその時点での分岐命令のＰＣ）がその時点の分岐命令を指定するために用いられる場合には、これらのビットのハッシングは、ＧＳＲ２４０にストアされているブローバル履歴と共に、いずれかの要素単独でよりも有益な予測情報を有することができる。１つの実施形態では、ＰＣの低位の１０ビットはＧＳＲの１０ビットでハッシュされてよい。代替的な実施形態では、ＰＣの低位の１０ビット以外のビット、そして場合によっては非連続のビットがＧＳＲのビットでハッシュされてよい。また、ＧＳＲ２４０の多重化された部分部分はＰＣ２１０で別々にハッシュされてよい。例えば、２６ビットＧＳＲ２４０は、第１のハッシング機能においてＰＣ２１０と組み合わされるその低位の１３ビットと、第２のハッシング機能においてＰＣ２１０と組み合わされる高位の１３ビットとを有していてよい。２つの別々の出力は次いで、予測論理及びテーブル２６０へ伝達されてよい。多くのそのような代替が可能でありまた検討される。
【００４１】
１つの実施形態では、ＰＣビット及びＧＳＲビットのハッシングは、ビットの連結(concatenation)を備えていてよい。代替的な実施形態では、ハッシング機能の結果はＰＣビットのＧＳＲビットとの排他的ＯＲを含んでいてよい。ハッシング論理２５０内で実行される他のハッシング機能は、予測論理２６０内に含まれる１つ以上のパターン履歴テーブル（ＰＨＴ）及び／又は他のテーブルに対する索引を決定するために用いられてよい。１つの実施形態においては、予測論理２６０内でＢＴＢを索引付けるために、ＰＣが単独で用いられてよい。ここで用いられているように、文字が続く参照番号によって参照される要素は、当該番号単独によって集合的に参照されることがある。例えば、予測テーブル２６２ａ〜２６２ｄは集合的に予測テーブル２６２として参照されることがある。
【００４２】
１つの実施形態では、１つの予測テーブル２６２は条件付き分岐のためのＰＨＴであってよく、この場合、ＰＨＴの各エントリは２ビットカウンタを保持してよい。特定の２ビットカウンタは、条件付き分岐命令結果（即ち取り込まれ又は取り込まれていない）の過去の挙動に基いてインクリメント及びデクリメントされてよい。予め定められたスレッショルド値に一旦到達すると、ストアされている予測は、取り込まれた及び取り込まれていないの１ビット予測値の間でフリップしてよい。２ビットカウンタのシナリオでは、ＰＨＴの各エントリは以下の４つの状態、即ち、取り込まれないことを強く予測する、取り込まれないことを予測する、取り込まれることを強く予測する、及び取り込まれることを予測する、のうちの１つを保持することができ、４つの状態において、各状態は１ビットの取り込まれる／取り込まれないの予測値に対応している。
【００４３】
代替的には、１つ以上の予測テーブル２６２は、既に論じられたようにハッシング論理２５０の出力によって索引付けられてよく、そしてこれらのテーブル２６２は、１つの実施形態では学習された(trained)４ビットの重みをストアしてよい。１つの実施形態では、２つのテーブル２６２が同一のクロック周期内で索引付けられてよい。１つの実施形態では、これら２つのテーブル２６２はハッシング論理２５０からの同一の出力によって索引付けられてよい。代替的な実施形態では、これら２つのテーブル２６２は、ハッシング論理２５０内の別個のハッシング機能のそれぞれの出力から索引付けられてよい。読み出される対応する２つの重みは、２ビットによって符号拡張されて(sign-extended)おり、そして予測論理２６０内の論理によって互い加算されてよい。代替的には、これら２つの符号拡張された値はまた、合算されそしてバイアス重みに加えられてよい。バイアス重みもまた２ビットによって符号拡張されており、このバイアス重みは分岐予測記憶装置の読み出しであってよく、これについては後で更に詳細に説明する。条件付き分岐命令の予測された方向を表示するために、合計６ビットの最も重み付けの大きいバイト(most-significant-byte)（ＭＳＢ）が用いられてよい。
【００４４】
１つの実施形態では、これらのテーブル２６２はハッシング論理２５０からの出力によってアクセスされてよく、ハッシング論理２５０からの出力は、論理２５０の入力としての分岐予測記憶装置からの分岐数（例えば１，２，等）を含む。これらの分岐数は、同一クロック周期内で予測されつつある別個の分岐命令を区別するために用いられてよい。例えば、テーブル２６２の行アクセスは、ハッシュされていないＧＳＲ２４０の一部分、例えば１つの実施形態ではＧＳＲ２４０の低位の７ビットを用いてよい。これらのテーブル２６２の出力は、１つ以上のその選択線に対してハッシュ出力を用いるマルチプレクサによって減少され得る。論理２５０内のこのハッシュ機能への入力は、ＰＣ２１０、ＧＳＲ２４０の分離された部分、例えば１つの実施形態では２３乃至７のビット範囲、及び対応する分岐数を含んでいてよい。
【００４５】
予測（例えば、取り込まれる／取り込まれない、又は分岐目標アドレス、あるいは両方）が一旦決定されたならば、その値はＧＳＲ２４０内に投機的にシフトされてよい。１つの実施形態では、取り込まれる／取り込まれないの値だけがＧＳＲ２４０内にシフトされる。他の実施形態では、分岐目標アドレスの一部分がＧＳＲ２４０内に移される。ＧＳＲ２４０をどのように更新するかの決定は、更新論理２３０内で実行される。後のパイプライン段階において予測ミスが決定された場合には、この１つ以上の値は正しい結末で修復されてよい。しかし、このプロセスはまた、その時点でパイプライン内で生じている(in flight)分岐予測ミス及び正しいＰＣからの命令の再フェッチに起因して、フェッチされている命令を終了させることを取り入れている。これらのステップは、プロセッサ性能の妨げになるパイプラインストールを含む。
【００４６】
１つの実施形態では、予測論理及びテーブル２６０内のＰＨＴ又は他の論理からの１ビットの取り込まれる／取り込まれないの予測は、ｉキャッシュを索引付けそして同時にＧＳＲ２４０を更新するのに次のＰＣを用いることを決定するために用いられてよい。例えば１つの実施形態では、予測が取り込まれた場合、分岐目標アドレスが次のＰＣを決定するために用いられてよい。予測が取り込まれなかった場合には、次のシーケンシャルＰＣが次のＰＣを決定するために用いられてよい。
【００４７】
１つの実施形態では、更新論理２３０はＧＳＲ２４０を更新する方法を決定してよい。例えば、条件付き分岐がグローバル履歴更新を要求している場合には、更新論理２３０は、１ビットの取り込まれる／取り込まれないの予測ビットをＧＳＲ２４０の最新の位置にシフトさせることを決定してよい。代替的な実施形態では、分岐はＧＳＲに対する値を提供しなくてよい。他の実施形態では、ＧＳＲ２４０及びＰＣ２１０のハッシュは予測論理２６０内の間接的予測アレイを索引付けるために用いられ得るので、分岐目標アドレスの一部分は、例えば間接的分岐のためにＧＳＲ２４０に入力されてよい。分岐目標アドレスにおける例えば１つの実施形態では４ビットの当該部分は、分岐目標アドレスの中間部分から選択されてよい。分岐目標アドレスの高位のビットは、メモリ内の同様のロケーションに置かれる命令間では頻繁には変化しないであろうし、また低位のビットは、メモリ内の異なる線、ワード、及びバイトへのアクセスに起因して高い頻度で変化する。例えば１つの実施形態では、分岐目標アドレスのビット７乃至４が用いられてよい。
【００４８】
代替的な実施形態では、更新論理２３０はＧＳＲ２４０内へのシフト動作を実行しなくてよく、むしろ分岐目標アドレスの１つ以上のビットとＧＳＲ２４０の１つ以上の選択されたビットとの排他的ＯＲを実行してよい。次いで、ＧＳＲ２４０の選択されたビットは排他的ＯＲの結果で置換される。例えば、分岐目標アドレスの３ビット、例えば分岐目標アドレスのビット７乃至５とＧＳＲ２４０の最新の３ビットとの排他的ＯＲの結果がＧＳＲ２４０の最新の３ビットと置き換わってよい。更新論理２３０の他の実施形態が実装されてよい。いずれの場合にも、間接的な分岐命令の分岐目標アドレスの一部分は、これらの命令の発生をその時点での分岐予測メカニズムと相関付ける試みにおいて、グローバル履歴を更新するために用いられてよい。与えられた分岐又は分岐の種類がＧＳＲに対して価値をもたらすか否かは、設計上の選択である。
【００４９】
更新論理２３０の各実装においては、ＧＳＲ内にストアされた新たなグローバル履歴は、条件付き分岐方向予測（即ち、取り込まれる／取り込まれないの結末予測）及び間接的分岐目標アドレス予測、例えばＢＴＢ予測又は間接的目標アレイ予測の両方の正確性を高めることができる。正確性の向上は、ダイ面積、電力消費、及びクロック周期増大に対して無視し得る影響で達成することができる。
【００５０】
ソフトウエアアプリケーション命令は、図１のｉキャッシュ１０２のような命令キャッシュ内に種々の方法でストアされ得る。例えば、図３は４ウエイセットアソシアティブキャッシュ構成(4-way set associative cache organization)を用いて命令がストアされるｉキャッシュ記憶配置３００の１つの実施形態を示している。ＩＳＡに依存する可変長命令であってよい命令３３８は、４ウエイセットアソシアティブキャッシュ３３０内のキャッシュラインのデータ部分又はブロックデータであってよい。１つの実施形態では、キャッシュラインの命令３３８は６４バイトを備えていてよい。代替的な実施形態では、異なるサイズが選ばれてよい。
【００５１】
命令３３８の連続的なバイト内にストアされていてよい命令は、１つ以上の分岐命令を含んでいてよい。幾つかのキャッシュラインは少しの分岐命令を有していてよく、また他のキャッシュラインは多くの分岐命令を有していてよい。キャッシュライン毎の分岐命令の数には一貫性がない。従って、対応するキャッシュラインのための分岐予測情報の記憶装置は、全ての分岐に対する情報を提供するために、多数の分岐情報がキャッシュライン内にストアされることを前提とする必要があろう。しかし、そのような記憶装置は大きなダイ面積を必要とするであろうし、また電力消費を増大させるであろう。キャッシュライン毎の小さな数であってよい共通ケースの数の分岐命令の情報及び非共通ケースに対するキャッシュライン内の追加的な分岐の表示のための主記憶装置を有するハイブリッド記憶装置は、より効率的であろう。ハイブリッド記憶装置スキーム内には、主記憶装置によって表示される追加的な分岐のための補助記憶装置があってよい。そのようなハイブリッド記憶装置スキームの更なる詳細は後述する。
【００５２】
キャッシュ３３０の４ウエイの各々はまた状態情報３３４を有しており、状態情報３３４はキャッシュラインの有効ビット及び他の状態情報を備えていてよい。例えば、状態フィールドは、ＭＯＥＳＩスキーム内の状態のような対応するキャッシュブロックの状態を特定するために用いられる符号化されたビットを含んでいてよい。また、ブロック状態３３４内のフィールドは、退去(eviction)のための、最後に使用されてから最も長い時間が経過した(Least Recently Used)（ＬＲＵ）情報を表示するために用いられるビットを含んでいてよい。ＬＲＵ情報は、キャッシュセット３３２内のどのエントリが最も長い間参照されなかったのかを表示するために用いることができ、またキャッシュ制御器によって採用されるキャッシュ交換アルゴリズムと併せて用いることができる。
【００５３】
プロセッサコアからキャッシュ３３０に提示されるアドレス３１０は、対応するキャッシュセット３３２を選択するためにブロックインデックス３１８を含んでいてよい。１つの実施形態では、ブロック状態３３４及びブロックタグ３３６が、同一アレイ内の連続したビット内よりはむしろ別個のアレイ内にストアされていてよい。ブロックタグ３３６は、選択されたキャッシュセット３３２内で４キャッシュラインのどれがアクセスされている最中であるかを決定するために用いられてよい。また、アドレス３１０のオフセット３２０がキャッシュライン内の具体的なバイト又はワードを表示するために用いられてよい。
【００５４】
次に図４を参照すると、ハイブリッド分岐予測を伴うプロセッサコア４００の１つの実施形態の一般化されたブロック図が示されている。図１の回路部分に対応する回路部分には同一の番号が付されている。ｉキャッシュサブシステムに対するキャッシュ階層の最初の２つのレベルは、ｉキャッシュ４１０及びキャッシュ４１２として明示的に示されている。キャッシュ４１０及び４１２は、１つの実施形態では、それぞれＬ１キャッシュ構造及びＬ２キャッシュ構造として実装されてよい。１つの実施形態では、キャッシュ４１２は、命令及びデータの両方をストアするスプリット第２レベルキャッシュであってよい。代替的な実施形態では、キャッシュ４１２は、２つ以上のコアの間で共有されるキャッシュであってよく、またメモリ制御器内にキャッシュコヒーレンシ制御回路を必要とする。他の実施形態では、Ｌ３キャッシュ構造がチップ上又はチップ外にあってよく、そしてキャッシュ４１２よりもむしろＬ３キャッシュが多重化コア間で共有されてよい。
【００５５】
前述したように、ｉキャッシュ４１０からフェッチされつつあるアドレスの有益な割合のために、対応するｉキャッシュライン内には少数の分岐命令のみが含まれていてよい。一般的に言って、多くのアプリケーションコードの大きな割合に対して、分岐はｉキャッシュライン内に疎にのみ見出される。従って、特定のｉキャッシュラインに対応する分岐予測情報の記憶は、多数の分岐に対して情報をストアするための回路を割り当てる必要はないであろう。例えば、ハイブリッド分岐予測デバイス４４０は、分岐予測ユニット１２２によって用いられるべき分岐予測情報をストアするためのダイ面積及び回路をより効率的に割り当てることができる。疎分岐キャッシュ４２０は、ｉキャッシュライン毎に予め定められた通常の疎な数の分岐命令に対する分岐予測情報をストアすることができる。ｉキャッシュ４１０内の各キャッシュラインは、対応するエントリを疎分岐キャッシュ４２０内に有していてよい。１つの実施形態では、通常の疎な数の分岐は、ｉキャッシュ４１０内の各６４バイトキャッシュラインに対して２分岐であってよい。ｉキャッシュ４１０内の各ラインのための疎な数の分岐に対してのみ予測情報をストアすることによって、ｉキャッシュ４１０内の各ラインに対して予め定められた最大数の分岐に対する情報を含む記憶装置において、キャッシュ４２０のサイズを大幅に低減することができる。ダイ面積要求、容量性負荷、及び電力消費が各々低減され得る。
【００５６】
１つの実施形態では、ｉキャッシュ４１０は４ウエイセットアソシアティブキャッシュとして組織化されてよい。疎分岐キャッシュ４２０は直接マッピングされたキャッシュとして組織化されてよい。疎分岐キャッシュ４２０内の各エントリはｉキャッシュ４１０内のキャッシュラインに対応していてよい。疎分岐キャッシュ４２０の各エントリは、ｉキャッシュ４１０の対応するライン内の予め定められた疎な数の分岐命令、例えば１つの実施形態では２分岐、に対応する分岐予測情報を備えていてよい。分岐予測情報は後で更に詳細に説明される。代替的な実施形態では、異なる数の分岐命令が疎であると決定されてよく、またｉキャッシュ４１０内のラインのサイズは異なるサイズであってよい。キャッシュ４２０は、ＩＦＵ１０４からｉキャッシュ４１０へ送られるのと同じ線形アドレスによって索引付けられてよい。ｉキャッシュ４１０及びキャッシュ４２０は両方とも、キャッシュライン境界に対応する線形アドレス内のビットのサブセットによって索引付けられてよい。例えば１つの実施形態では、線形アドレスはリトルエンディアン(little-endian)バイト順序での３２ビットを備えていてよく、またｉキャッシュ４１０内のラインは６４バイトを備えていてよい。従って、キャッシュ４１０及び４２０は各々、ビット６で終了する線形アドレスの同一部分によって索引付けられてよい。
【００５７】
疎分岐キャッシュ４２２は、キャッシュ４２０から退去させられたラインをストアするためにコア４００において利用されてよい。キャッシュ４２２はキャッシュ４２０と同じキャッシュ構成を有していてよい。ｉキャッシュ４１０からラインが退去させられてキャッシュ４１２内に置かれた場合、その対応するキャッシュ４２０内のエントリは、キャッシュ４２０から退去させられてキャッシュ４２２内にストアされてよい。このように、先に退去させられたキャッシュラインがキャッシュ４１２からキャッシュ４１０に戻った場合には、このキャッシュライン内の分岐に対する対応する分岐予測情報もまた、キャッシュ４２２からキャッシュ４２０へと戻される。従って、対応する分岐予測情報が再構築される必要はない。分岐予測情報を再構築するためのプロセスの不在により、プロセッサ性能が向上し得る。
【００５８】
より密に詰め込まれた分岐情報を含むアプリケーションコード内の領域に対しては、ｉキャッシュ４１０内のキャッシュラインは、疎な数の分岐より多くを含んでいてよい。疎分岐キャッシュ４２０の各エントリは、ｉキャッシュ４１０内の疎な数の分岐を超えた追加的な分岐の表示をストアしていてよい。追加的な分岐が存在する場合には、対応する分岐予測情報は密分岐キャッシュ４３０内にストアされてよい。
【００５９】
密分岐キャッシュ４３０の各エントリは、ｉキャッシュ４１０内のラインの一部分に対応していてよい。例えば、ｉキャッシュ４１０は６４バイトのラインを有していてよく、また密分岐キャッシュ４３０の各エントリは６４バイトラインの８バイト部分に対応していてよい。疎分岐キャッシュ４２０の各エントリは、対応する６４バイトラインのどの８バイト部分が追加的な分岐を有していてよいかを指定するベクタのビット(vector of bits)を有していてよく、この場合、その６４バイトラインは通常の疎な数の分岐より多くを有していてよい。ベクタビットの数及びｉキャッシュラインの提示された部分の対応するサイズは、アプリケーションコード内に密に詰め込まれた分岐の領域の挙動を効率的に捕捉するために選択されてよい。
【００６０】
１つの実施形態では、密分岐キャッシュ４３０は４ウエイセットアソシアティブキャッシュとして組織化されてよい。従って密分岐キャッシュ４３０は、６４バイトラインの８バイト部分毎に４つの分岐命令に対する分岐予測情報をストアすることができる。６４バイトライン内の８つの８バイト部分でもって、密分岐キャッシュ４３０は、単一の６４バイトライン内の３２個の分岐命令に対する分岐予測情報をストアすることができる。この実施形態では、疎分岐キャッシュ４２０と密分岐キャッシュ４３０のハイブリッドな組み合わせが、ｉキャッシュ４１０内の６４バイトラインに対する３４個の分岐命令の分岐予測情報をストアすることができる（２つの疎分岐と３２個の密分岐）。キャッシュ４１０、４１２、４２０、４２２、及び４３０のサイズ、結合性(associativity)、及び密度は、対象とするアーキテクチャ上で動作することになるアプリケーションに対する性能と電力消費の間での最良のトレードオフをもたらすように選択されてよい。
【００６１】
図５を参照すると、分岐予測ユニット５００の一般化されたブロック図の１つの実施形態が示されている。図２の回路部分に対応する回路部分には同一の番号が付されている。ここでは、ストアされたハイブリッド分岐予測情報は、予測論理及びテーブル２６０とハッシング論理２５０へ伝達されてよい。１つの実施形態では、ハイブリッド分岐予測情報は、疎分岐キャッシュ４２０及び４２２並びに密分岐キャッシュ４３０のようなｉキャッシュとは別のキャッシュ内にストアされてよい。１つの実施形態では、この情報は、同じクロック周期内で予測されつつある分岐命令を区別するための分岐数、特定の条件付き分岐命令の種類その他を表示する分岐種類情報、テーブル２６０内のテーブルエントリと合算されるべき重み情報、対応するキャッシュライン内の分岐命令の最終バイトに対するポインタのような付加的なアドレス情報、及び対応する分岐目標アドレス情報を含んでいてよい。
【００６２】
既に論じられたように、ストアされたハイブリッド分岐情報からのバイアス重み情報が、論理及びテーブル２６０内のテーブルからの２つの対応する符号拡張重み値と合算されてよい。このバイアス重みもまた合算に先立ち符号拡張されていてよく、そして６ビット合計の最も重み付けの大きいバイト（ＭＳＢ）は、条件付き分岐命令の予測された方向を表示するために用いられてよい。
【００６３】
図６は分岐予測情報がストアされる疎キャッシュ記憶配置６００の１つの実施形態を示している。１つの実施形態では、キャッシュ６３０は直接マッピングされたキャッシュとして組織化されてよい。予め定められた疎な数のエントリ６３４は、直接マッピングされたキャッシュ６３０内のキャッシュラインのデータ部分内にストアされてよい。１つの実施形態では、疎な数は２であると決定されてよい。各エントリ６３４は、ｉキャッシュ４１０の対応するライン内の特定の分岐に対する分岐予測情報をストアしてよい。対応するライン内に疎な数の分岐を超えて追加的な分岐が存在してよいことの表示が、密分岐表示６３６内にストアされる。
【００６４】
１つの実施形態では、各エントリ６３４は、有効ビットを備えている状態フィールド６４０と他の状態情報とを備えていてよい。エンドポインタフィールド６４２は、ｉキャッシュ４１０のライン内の対応する分岐命令の最後のバイトに対する表示をストアしていてよい。例えば、対応する６４バイトのｉキャッシュラインに対して、エンドポインタフィールド６４２は、６４バイトのいずれかを指し示すために６ビットを備えていてよい。このポインタ値は、ｉキャッシュ４１０及び疎分岐キャッシュ４２０の両方を索引付けるために用いられる線形アドレス値に添付されていてよく、また全体のアドレス値は分岐予測ユニット５００へ送られてよい。
【００６５】
予測情報フィールド６４４は、分岐予測ユニット５００内で用いられるデータを備えていてよい。例えば、特定の分岐命令が直接的のなものであり、間接的なものであり、条件付きなものであり、無条件なものであり、又は他のものであることを表示するために、分岐種類情報が伝達されてよい。また、予測論理及びテーブル２６０における重みテーブル内の重みと合算されてよいバイアス重みがストアされてよい。分岐予測ユニット５００に関して既に論じられたように、１つの実施形態では、４ビットの重みは、予測テーブル２６０内の２つの別々のテーブルからの読み出しであってよい。これらのテーブルは、ＰＣ２１０及びＧＳＲ２４０を結合するハッシング機能の出力によって索引付けられてよい。読み出される対応する２つの重みは、２ビットによって符号拡張され、そして同じく２ビットにより符号拡張されているフィールド６４４からのバイアス重みに加えられてよい。６ビット合計の最も重み付けの大きいバイト（ＭＳＢ）は、条件付き分岐命令の予測された方向を示すために用いられてよい。
【００６６】
対応する部分的分岐目標アドレス値がアドレスフィールド６４６内にストアされてよい。通常の場合、分岐命令それ自身と同じページ内に分岐目標が置かれていることが見出されるであろうから、部分的分岐目標アドレスのみが必要とされてよい。１つの実施形態では、１ページは４ＫＢを備えていてよく、そして１２ビットの分岐目標アドレスがフィールド６４６内に記憶される必要があるだけである。より小さいフィールド６４６は、ダイ面積、容量負荷、及び電力消費を低減することを更に支援する。フィールド６４６にストアされているのに対して付加的なビットを必要とする分岐目標のためには、別個のページ外アレイが利用されてよい。
【００６７】
密分岐表示フィールド６３６はビットベクタを備えていてよく、この場合、当該ベクタの各ビットは、ｉキャッシュ４１０の対応するライン内の一部分に対して追加的な分岐が存在する可能性を表示する。例えば、フィールド６３６は８ビットベクタを備えていてよい。各ビットはｉキャッシュ４１０の６４バイトライン内の別個の８バイト部分に対応していてよい。１つの実施形態では、最初のビットはｉキャッシュ４１０の対応するライン内の最初の８バイトのデータに対応していてよい。ベクタ内の各次に続くビットは、キャッシュライン内の次の連続する８バイトに対応していてよい。１つの実施形態では、フィールド６３６内の１つ以上のセットビットは、疎な数の分岐を超えて追加的な分岐が６４バイトキャッシュライン内に存在し得ることを表示してよい。フィールド６３６内の特定のセットビットは、８バイトの対応するグループ内に追加的な分岐が存在することを示してよい。この場合、密分岐キャッシュ４３０が索引付けられる。１つの実施形態では、密分岐キャッシュ４３０は疎分岐キャッシュ４２０と並行して索引付けられてよいが、電力を節約するために、フィールド６３６内でセットビットが見出される場合にのみキャッシュ４３０が索引付けられてもよい。
【００６８】
図７は密分岐キャッシュ記憶配置７００の１つの実施形態を示している。１つの実施形態では、４ウエイセットアソシアティブキャッシュ構成を用いて追加的な分岐予測情報がストアされる。キャッシュ７３０のキャッシュセット７３２内の４つのキャッシュラインの各々は、ｉキャッシュ４１０の６４バイトキャッシュライン内の８バイト領域に対応していてよい。キャッシュ７３０の４ウエイの各々は状態情報７３４を有していてよく、状態情報７３４は、有効ビットと、対応するキャッシュラインの他の状態情報とを備えていてよい。
【００６９】
プロセッサコアからキャッシュ７３０に提示されるアドレス３１０は、対応するキャッシュセット７３２を選択するために、ブロックインデックス３１８及び、オフセット３２０の一部分を伝達してよい。密分岐キャッシュ４３０は、ｉキャッシュ４１０及び疎分岐キャッシュ４２０とは異なるアドレス可能な境界を利用してよい。例えば１つの実施形態では、キャッシュ４１０及び４２０は６４バイト境界を伴うデータにアドレスすることができ、また密分岐キャッシュ４３０は８バイト境界を伴うデータにアドレスすることができる。従って、オフセット３２０の一部分、例えば合計６ビットのうちの３ビットがキャッシュ７３０を索引付けるために追加的に必要になるであろう。１つの実施形態では、ブロック状態７３４及びブロックタグ７３６は、同一のアレイ内の連続するビット内よりはむしろ、別個のアレイ内にストアされてよい。ブロックタグ７３６は、選択されたキャッシュセット７３２内で４つのキャッシュラインのどれがアクセスされている最中であるかを決定するために用いられてよい。分岐予測情報はブロックデータ７３８の連続するビット内にストアされてよい。
【００７０】
１つの実施形態では、各ブロックデータ７３８は、ｉキャッシュ４１０のライン内の対応する分岐命令の最後のバイトに対する表示をストアするエンドポインタフィールド７４０を備えていてよい。例えば、対応する６４バイトのｉキャッシュラインに対して、エンドポインタフィールド７４０は、対応する８バイト領域内の任意のバイトを指し示すために３ビットを備えていてよい。このポインタ値は、ｉキャッシュ４１０及び疎分岐キャッシュ４２０の両方を索引付けるために用いられる線形アドレス値に添付されていてよく、また全体のアドレス値は分岐予測ユニット５００へ送られてよい。
【００７１】
１つの実施形態では、予測情報フィールド７４２は、疎キャッシュ４２０内の分岐予測フィールド６４４と同様のデータを備えていてよい。この情報は分岐予測ユニット５００内で用いられてよい。特定の分岐命令が直接的のなものであり、間接的なものであり、条件付きなものであり、無条件なものであり、又は他のものであることを示すために、分岐種類情報が伝達されてよい。また、予測論理及びテーブル２６０における重みテーブル内の重みと合算されてよいバイアス重みがストアされてよい。同様に、分岐目標アドレスフィールド７４４は、疎キャッシュ４２０内のアドレスフィールド６４６と同様のデータを備えていてよい。通常の場合、分岐命令それ自身と同じページ内に分岐目標が置かれていることが見出されるであろうから、部分的分岐目標アドレスのみが必要とされてよい。１つの実施形態では、１ページは４ＫＢを備えていてよく、そして全部で３２ビットではなく１２ビットの分岐目標アドレスがフィールド７４４内に記憶される必要があるだけである。より小さいフィールド７４４は、ダイ面積、容量負荷、及び電力消費を低減することを更に支援する。フィールド７４４にストアされているのに対して付加的なビットを必要とする分岐目標のためには、別個のページ外アレイが利用されてよい。
【００７２】
図８は分岐予測の効果的な改良のための方法８００を示している。方法８００は、代替的な実施形態を導き出すために当業者によって修正されてよい。また、この実施形態におけるステップは逐次的な順序で示されている。しかし、幾つかのステップは図示されているのとは異なる順序で起こってよく、幾つかのステップは同時に実行されてよく、幾つかのステップは他のステップと組み合わされてよく、そして幾つかのステップは他の実施形態ではなくてよい。図示される実施形態では、プロセッサはブロック８０２において命令をフェッチする。プログラムカウンタ内にストアされる線形アドレスは、命令データの連続するバイトをフェッチするためにｉキャッシュ４１０へ伝達されてよい。ｉキャッシュ４１０内のキャッシュラインのサイズに応じて、プログラムカウンタの全部の内容がｉキャッシュ４１０へ伝達されなくてもよい。またブロック８０４において、同じアドレスが疎分岐キャッシュ４２０へ伝達されてよい。
【００７３】
Ｌ１疎分岐キャッシュ４２０においてキャッシュヒットがない場合（条件ブロック８０６）には、対応するキャッシュラインがブロック８０８においてＬ２疎分岐キャッシュから検索され(retrieved)てよい。ミスが発生した場合には、ｉキャッシュ４１０内の対応するキャッシュラインはどこにもないであろうから、第２レベルキャッシュ４１２から検索される必要がある。一旦Ｌ１疎分岐キャッシュ４２０内の要求されたラインがアクセスされると、条件ブロック８１０において、疎分岐エントリが有効エントリに対して照合される。１つの実施形態では、疎分岐エントリはコード実行の間に順次埋められてよい。従って、疎分岐キャッシュ４２０内の有効エントリ間には無効エントリの「ギャップ」はないであろう。無効エントリが検出されると、ｉキャッシュ４１０の対応するライン内にはもはや分岐命令がないことを表示してよい。無効エントリが発見されない場合には、ｉキャッシュ４１０内の対応するラインは、少なくとも最大数の疎分岐命令を有しているであろう。この対応するｉキャッシュライン内の予め定められた数の疎分岐よりも多くの分岐命令がある場合には、疎分岐キャッシュ４２０内にストアされている密分岐表示６３６内のビットベクタが当該表示をもたらすことができる。
【００７４】
有効な疎分岐エントリがない場合（条件ブロック８１０）には、ｉキャッシュ４１０のライン内にいずれの分岐命令もないか、あるいはコード実行の間に分岐命令が未だ検出されていないことになる。この場合には、フロー制御はブロック８０２へ戻る。他の場合には、最初の疎分岐エントリが照合される。疎分岐エントリは順次埋められ且つ少なくとも１つのエントリは有効であるから、最初の疎分岐エントリは有効である必要がある。疎分岐エントリは並行して照合されてよく、例えば各疎分岐エントリの状態フィールド６４０内の有効ビットがセットされているか否かが検出される。ここでフローを逐次的に説明する。その時点での疎分岐エントリは、その時点でのエントリが有益な分岐予測情報を有しているかどうか（条件ブロック８１２）を決定するために照合されるその対応する有効ビットを有している。有益な情報がストアされていると有効ビットが表示している場合には、ブロック８１４において、疎分岐キャッシュ４２０は、エンドポインタフィールド６４２、分岐予測情報フィールド６４４、及び分岐目標アドレスフィールド６４６内にストアされている対応する情報をプロセッサに伝達してよい。次いで、次の疎分岐エントリがその有効ビットを照合される。
【００７５】
予め定められた疎な数の分岐エントリの全てが未だ照合されていない場合（条件ブロック８１６）には、方法８００のための制御フローはブロック８１２へ戻る。他の場合には、密分岐表示フィールド６３６内の密ビットベクタがセットビットに対して照合されてよい（条件ブロック８１８）。このベクタ内に１つ以上のビットがセットされている場合には、ブロック８２０において、密分岐キャッシュ４３０は、ｉキャッシュ４１０及び疎分岐キャッシュ４２０にアクセスするために用いられたよりもっと下位のビットでプログラムカウンタ値の一部分によって索引付けられてよい。このことは、密分岐表示フィールド６３６内の各ビットが例えば６４バイトのｉキャッシュラインより小さい８バイトのような領域に対応するであろうから、より細かい精度によってアドレス可能な密キャッシュに起因し得る。
【００７６】
密分岐キャッシュ４３０がセットアソシアティブである場合には、アドレスのタグフィールド及び密分岐キャッシュのフィールド７３４内の有効ビットは、プロセッサへ送るべき対応するキャッシュラインを決定するために用いられてよい。このキャッシュラインは、エンドポインタフィールド７４０、分岐予測情報フィールド７４２、及び分岐目標アドレスフィールド７４４内にストアされている情報を備えていてよい。方法８００の制御フローは次いでブロック８０２へ戻る。同一クロック周期内で並行して予測される分岐命令の数は、分岐予測ユニット５００内の回路に依存するであろう。例えば１つの実施形態では、疎分岐キャッシュ４２０は、１クロック周期において２つの疎分岐命令に対する分岐予測情報を分岐予測ユニット５００へ送ることが可能であろう。密分岐キャッシュ４３０からの分岐予測情報は、後続のクロック周期において送られてよい。クロック周期毎に分岐予測情報によって示される密分岐の数、及びクロック周期毎に予測される密分岐の数は、選択される実施形態に依存する。
【００７７】
上述の実施形態はかなり詳細に説明されてきたが、上述の開示を完全に理解するならば、多くの変形及び修正が当業者にとって明らかであろう。後述の特許請求の範囲は、そのような全ての変形及び修正を包含するものとして解釈されることが意図されている。
【図１】
0005255701.tif 000002
【図２】
0005255701.tif 000003
【図３】
0005255701.tif 000004
【図４】
0005255701.tif 000005
【図５】
0005255701.tif 000006
【図６】
0005255701.tif 000007
【図７】
0005255701.tif 000008
【図８】
0005255701.tif 000009