(57)【特許請求の範囲】
【請求項１】
フロントエンドユニットを備えるプロセッサであって、
前記フロントエンドユニットは、
ターゲットアドレスを予測するように構成されたレベル１分岐ターゲットバッファと、
プログラムカウンタとグローバル履歴とに基づいて予測を生成するように構成されたレベル１分岐ターゲットバッファインデックス予測器であって、前記予測が、投機的部分ターゲットアドレスと、グローバル履歴値と、グローバル履歴シフト値と、ウェイ予測と、を含む、レベル１分岐ターゲットバッファインデックス予測器と、
分岐命令が成立するか否かを予測するように構成されたレベル１ハッシュパーセプトロンと、
前記レベル１分岐ターゲットバッファインデックス予測器からの前記投機的部分ターゲットアドレスと、前記レベル１分岐ターゲットバッファからの前記ターゲットアドレスとを比較するように構成された第１コンパレータと、
前記レベル１ハッシュパーセプトロンからの分岐成立／分岐不成立の予測に基づいてグローバル履歴シフト値を生成するように構成されたグローバル履歴シフタと、
前記レベル１分岐ターゲットバッファインデックス予測器からの前記グローバル履歴シフト値と、前記グローバル履歴シフタからの前記グローバル履歴シフト値とを比較するように構成された第２コンパレータと、
前記第１コンパレータの出力と、前記第２コンパレータの出力とに基づいて一致信号を生成するように構成された論理ゲートであって、前記一致信号が、前記レベル１分岐ターゲットバッファインデックス予測器が正しい予測を行ったか否かを示す、論理ゲートと、を含む、
プロセッサ。
【請求項２】
前記レベル１分岐ターゲットバッファインデックス予測器からの前記投機的部分ターゲットアドレスは、前記レベル１分岐ターゲットバッファのインデックスを予測するための前記レベル１分岐ターゲットバッファによる予測、及び、前記レベル１ハッシュパーセプトロンのインデックスを予測するための前記レベル１ハッシュパーセプトロンによる予測の直後に用いられる、請求項１のプロセッサ。
【請求項３】
命令タグ（ＩＴ）パイプラインと、
前記ＩＴパイプラインと通信する命令キャッシュ（ＩＣ）パイプラインと、を含み、
前記ＩＴパイプライン及び前記ＩＣパイプラインが互いに独立して動作できるように、前記ＩＣパイプラインが前記ＩＴパイプラインから分離している、請求項１のプロセッサ。
【請求項４】
プロセッサにおいて分岐予測を実行するための方法であって、
前記プロセッサは、レベル１分岐ターゲットバッファと、レベル１ハッシュパーセプトロンと、レベル１分岐ターゲットバッファインデックス予測器と、を含み、
前記レベル１分岐ターゲットバッファ及び前記レベル１分岐ターゲットバッファインデックス予測器においてルックアップを実行するために用いられるインデックスを生成することと、
ターゲットアドレスを予測するために前記インデックスを用いて前記レベル１分岐ターゲットバッファにおいてルックアップを実行することと、
投機的部分ターゲットアドレスを予測するために前記インデックスを用いて前記レベル１分岐ターゲットバッファインデックス予測器においてルックアップを実行することと、
次のフローのための前記インデックスを生成するために、前記レベル１分岐ターゲットバッファからの前記ターゲットアドレスと、前記レベル１分岐ターゲットバッファインデックス予測器からの前記投機的部分ターゲットアドレスと、を用いることと、
分岐が成立するか否かを予測するために前記インデックスを用いて前記レベル１ハッシュパーセプトロンにおいてルックアップを実行することと、
分岐成立予測又は分岐不成立予測に基づいてグローバル履歴を更新することと、
前記インデックスを用いて前記レベル１分岐ターゲットバッファインデックス予測器においてルックアップを実行することによって、予測されたグローバル履歴シフトを生成することと、
前記分岐成立予測又は前記分岐不成立予測を用いて前記レベル１ハッシュパーセプトロンにおいてグローバル履歴シフトを生成することと、
第１一致信号を生成するために、前記レベル１分岐ターゲットバッファインデックス予測器からの前記予測されたグローバル履歴シフトと、前記レベル１ハッシュパーセプトロンからの前記グローバル履歴シフトとを比較することと、
第２一致信号を生成するために、前記レベル１分岐ターゲットバッファからの前記ターゲットアドレスと、前記レベル１分岐ターゲットバッファインデックス予測器からの前記投機的部分ターゲットアドレスとを比較することと、
前記レベル１分岐ターゲットバッファインデックス予測器が正しい予測を行ったか否かを判断するために、前記第１一致信号と前記第２一致信号とを比較することと、を含む、
方法。
【請求項５】
前記レベル１分岐ターゲットバッファにおいてルックアップを実行することは、
想定アドレスのセットを生成するために前記インデックスを用いることと、
想定アドレスの前記セットから前記ターゲットアドレスを選択することと、を含む、請求項４の方法。
【請求項６】
前記レベル１分岐ターゲットバッファによって用いられるウェイを予測することであって、前記予測が、前記インデックスを用いて前記レベル１分岐ターゲットバッファインデックス予測器においてルックアップすることによって実行される、こと、
をさらに含む、請求項４の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１３年１０月２５日に出願された米国仮特許出願番号第６１／８９５，６２４号の利益を主張するものであり、その内容は引用により完全に説明されるように本明細書に組み込まれる。
【０００２】
開示された実施形態は、概して、プロセッサを対象とし、特にプロセッサ内の分岐予測ユニット及びレベル１命令キャッシュを対象とする。
【背景技術】
【０００３】
中央演算処理装置（ＣＰＵ）及びグラフィックスプロセシングユニット（ＧＰＵ）を含むプロセッサは、多様な用途で活用されている。標準的な構成は、プロセッサを、例えばキャッシュ、システムメモリ等の記憶装置に接続することである。プロセッサは、必要に応じて、記憶装置から命令をフェッチするためのフェッチオペレーションを実行し得る。プロセッサパイプラインは、命令を処理するためのいくつかの段（ｓｔａｇｅ）を含む。１つの実装例では、４段パイプラインが使用されてよく、フェッチ段、復号段、実行段及びライトバック段を含む。命令は、順番にパイプライン段を通って進行する。
【０００４】
プロセッサのオペレーションをスピードアップするためには、完全なパイプラインを有することが望ましい。パイプラインを充填する１つの方法は、前の命令が処理されている間に後続の命令をフェッチすることである。いくつかの命令の前にフェッチできるようにするために、分岐予測器が使用されてもよい。分岐予測器は、分岐命令がパイプラインの実行段に達する前に、分岐命令の方向（つまり、成立又は不成立）と、分岐ターゲットアドレスと、を予測する。
【０００５】
これは、命令の「プリフェッチング」及び命令の「投機的実行」として知られている。命令は、分岐命令が実行段に達するまで予測が正しいか否か分からないため、投機的に実行される。分岐命令の実際の方向を知らずに命令をプリフェッチングして投機的実行すると、命令処理がスピードアップすることがあるが、逆効果を有する場合があり、分岐命令の予測を誤ったときにパイプラインを遅れさせる場合がある。分岐の予測ミスが起こると、パイプラインをフラッシュする必要があり、正しい分岐方向からの命令が実行される。これは、システムの性能に大きな影響を及ぼし得る。
【０００６】
いくつかの異なるタイプの分岐予測器が用いられてきた。バイモーダル予測器は、特定の分岐の実行の最近の履歴に基づいて予測を行い、成立又は不成立の予測を提供する。グローバル予測器は、単に関心のある特定の分岐だけではなく、全ての分岐の実行の最近の履歴に基づいて予測を行う。グローバルに共有される履歴バッファ、パターン履歴テーブル及び追加のローカル飽和カウンタを有する２レベル適応予測器が使用されてよく、これにより、ローカル予測器及びグローバル予測器の出力が互いに排他的論理和されて、最終的な予測が提供される。複数の予測機構が同時に使用されてもよく、最終的な予測は、どの予測器が過去に最善の予測を行ったのかを記憶するメタ予測器、又は、奇数の異なる予測器に基づく多数決機能に基づいて行われる。
【０００７】
図１は、従来のレベル１分岐予測器１００のブロック図である。分岐予測器１００は、第１予測器（Ｐ１）１０２と、第２予測器（Ｐ２）１０４と、マルチプレクサ（ｍｕｘ）１０６と、チューザー１０８と、を含む。プログラムカウンタ１１０（予測される分岐のアドレス）及び他の入力１１２は、第１予測器１０２及び第２予測器１０４の両方によって評価され、各予測器が独自の予測を行う。
【０００８】
また、プログラムカウンタ１１０は、どの予測器（第１予測器１０２又は第２予測器１０４）がより正確であるかを判断するために、プログラムカウンタ１１０を使用するチューザー１０８に対する入力として供給される。チューザー１０８は、マルチプレクサ１０６に対してセレクタとして供給される予測選択１１４を生成する。選択された予測器の出力は、分岐予測器１００の予測１１６として用いられる。
【０００９】
図２は、別の従来のレベル１分岐予測器２００のブロック図である。１つの実装例では、レベル１予測器２００は、ＭｃＦａｌｉｎｇハイブリッド予測器であってもよい。分岐予測器２００は、構造において分岐予測器１００と類似しているが、いくつかのコンポーネントについては異なる実装を有する。分岐予測器２００は、（バイモーダルカウンタのアレイとして実装される）第１予測器２０２と、（バイモーダルカウンタのアレイとして実装される）第２予測器２０４と、マルチプレクサ（ｍｕｘ）２０６と、バイモーダルチューザー２０８と、を含む。各予測器２０２，２０４は独自の予測を行う。第２予測器２０４は、ＸＯＲユニット２１０と、バイモーダルカウンタ２１２のアレイと、を含む。
【００１０】
プログラムカウンタ２２０（分岐アドレス）は、第１予測器２０２、第２予測器２０４及びチューザー２０８への入力として供給される。第１予測器２０２は、プログラムカウンタ２２０の下位アドレスビットによってインデックスが付された飽和バイモーダル２ビットカウンタに基づいて、予測を行う。
【００１１】
グローバル履歴２２２は、（分岐アドレスによってインデックスが付された）最も最近のＮ個の分岐の分岐方向の履歴を保持し、第２予測器２０４への入力として供給される。ＸＯＲユニット２１０は、プログラムカウンタ２２０及びグローバル履歴２２２に対して排他的論理和演算を実行し、これにより、アレイ２１２へのインデックスとして用いられるハッシュを生成する。
【００１２】
チューザー２０８は、どの予測器（第１予測器２０２又は第２予測器２０４）がより正確であるかをテーブル内でルックアップするために、プログラムカウンタ２２０を使用する。チューザー２０８は、マルチプレクサ２０６に対してセレクタとして供給される予測選択２２４を生成する。選択された予測器は、分岐予測器２００のレベル１予測２２６として用いられる。
【００１３】
図３は、ハッシュ化されたパーセプトロン３００として知られている従来のレベル２分岐予測器のブロック図である。ハッシュ化されたパーセプトロン３００は、バイアス重みアレイ３０２と、複数の重みアレイ３０４１、３０４２、…、３０４ｎと、加算器３０６と、を含む。プログラムカウンタ３１０は、バイアス重みアレイ３０２と、重みアレイ３０４１〜３０４ｎと、への入力として供給される。
【００１４】
バイアス重みアレイ３０２は重みのアレイであり、各重みはビット数（例えば、４又は８）である。バイアス重みアレイ３０２は、加算器３０６に供給される重み値を得るために、プログラムカウンタ３１０又はプログラムカウンタ３１０のハッシュを用いてインデックスが付される。
【００１５】
各重みアレイ３０４１〜３０４ｎは、重み値を得るために、プログラムカウンタ３１０のハッシュと、グローバル履歴３１２の異なるビットと、によってインデックスが付される。各重みアレイ３０４１〜３０４ｎは、プログラムカウンタ３１０と、グローバル履歴３１２の一部と、に対して排他的論理和演算を実行することによってハッシュを生成するために、ＸＯＲユニット３１４を含む。グローバル履歴は、分岐の成立可否に関わりなく、現在の分岐を含まない全ての分岐の過去の結果のリストである。グローバル履歴の最下位ビットは、遭遇した最も最近の分岐についての情報を含む。一方、グローバル履歴の最上位ビットは、遭遇したより古い分岐についての情報を含む。
【００１６】
加算器３０６は、合計値を得るために、バイアス重みアレイ３０２及び重みアレイ３０４１〜３０４ｎの各々から得られた重みを加算する。合計値の最上位ビット（ＭＳＢ）は予測３１６である。例えば、合計値のＭＳＢが「１」である場合、結果予測は「分岐不成立」であり、合計値のＭＳＢが「０」である場合、結果予測は「分岐成立」である。
【００１７】
ハッシュ化されたパーセプトロン３００の１つの実装例では、全ての重み値が加算前に符号拡張され、正しくない予測を生じさせ得る加算器３０６のオーバフローを防ぐことが留意される。ハッシュ関数を用いてバイアス重みアレイ３０２及び重みアレイ３０４１〜３０４ｎの各々にインデックスを生成すると、プログラムカウンタ３１０及びグローバル履歴３１２の各々が多数のビットを含む場合があるので、（インデックスを構成するビット数に関して）小さいインデックスが生成される。
【００１８】
分岐予測器は、通常、大きくて複雑な構造である。結果として、分岐予測器は、大量のパワーを消費し、分岐を予測するためのレーテンシペナルティを生じさせる。よりよい分岐予測は、プロセッサの性能及びパワー効率に影響を与えることから、よりよい分岐予測を有することが望ましい。
【発明の概要】
【課題を解決するための手段】
【００１９】
いくつかの実施形態は、フロントエンドユニットを含むプロセッサを提供する。フロントエンドユニットは、レベル１分岐ターゲットバッファ（ＢＴＢ）と、ＢＴＢインデックス予測器（ＢＩＰ）と、レベル１ハッシュパーセプトロン（ＨＰ）と、を含む。ＢＴＢは、ターゲットアドレスを予測するように構成されている。ＢＩＰは、プログラムカウンタ及びグローバル履歴に基づいて予測を生成するように構成されており、予測は、投機的部分ターゲットアドレス、グローバル履歴値、グローバル履歴シフト値及び向き予測を含む。ＨＰは、分岐命令が成立するか否かを予測するように構成されている。
【００２０】
いくつかの実施形態は、プロセッサにおいて分岐予測を実行するための方法を提供する。プロセッサは、レベル１分岐ターゲットバッファ（ＢＴＢ）と、ＢＴＢインデックス予測器（ＢＩＰ）と、を含む。インデックスは、ＢＴＢ及びＢＩＰに対するルックアップに用いるために生成される。ルックアップは、ターゲットアドレスを予測するために、インデックスを用いてＢＴＢにおいて実行される。ルックアップは、投機的部分ターゲットアドレスを予測するために、インデックスを用いてＢＩＰにおいて実行される。ＢＴＢからのターゲットアドレスと、ＢＩＰからの投機的部分ターゲットアドレスとは、次のフローのためのインデックスを生成するために用いられる。
【００２１】
いくつかの実施形態は、プロセッサにおいて分岐予測を実行するために汎用コンピュータによって実行される命令のセットを記憶する非一時的なコンピュータ可読記憶媒体を提供する。プロセッサは、レベル１分岐ターゲットバッファ（ＢＴＢ）と、ＢＴＢインデックス予測器（ＢＩＰ）と、を含む。命令のセットは、生成コードセグメントと、第１実行コードセグメントと、第２実行コードセグメントと、使用コードセグメントと、を含む。生成コードセグメントは、ＢＴＢ及びＢＩＰに対するルックアップに用いるためにインデックスを生成する。第１実行コードセグメントは、ターゲットアドレスを予測するために、インデックスを用いて、ＢＴＢにおいてルックアップを実行する。第２実行コードセグメントは、投機的部分ターゲットアドレスを予測するために、インデックスを用いて、ＢＩＰにおいてルックアップを実行する。使用コードセグメントは、次のフローのためのインデックスを生成するために、ＢＴＢからのターゲットアドレスと、ＢＩＰからの投機的部分ターゲットアドレスと、を用いる。
【００２２】
より詳細な理解は、添付図面と併せて一例として示された以下の説明から得られる。
【図面の簡単な説明】
【００２３】
【図１】従来のレベル１分岐予測器のブロック図である。
【図２】別の従来のレベル１分岐予測器のブロック図である。
【図３】従来のレベル２分岐予測器（ハッシュ化されたパーセプトロン）のブロック図である。
【図４】１つ以上の開示された実施形態が実装され得る例示的な装置のブロック図である。
【図５】ＢＴＢインデックス予測器（ＢＩＰ）及びＢＴＢウェイ予測器のブロック図である。
【図６】ＢＩＰにおける単一のエントリの図である。
【図７】ＢＰ一致信号を生成するためにＢＩＰを用いる方法のフローチャートである。
【図８】命令タグ（ＩＴ）パイプライン及び命令キャッシュ（ＩＣ）パイプラインのブロック図である。
【発明を実施するための形態】
【００２４】
図４は、１つ以上の開示された実施形態が実装され得る例示的な装置４００のブロック図である。装置４００は、例えば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含み得る。装置４００は、プロセッサ４０２と、メモリ４０４と、記憶装置４０６と、１つ以上の入力装置４０８と、１つ以上の出力装置４１０と、を含む。また、装置４００は、任意に、入力ドライバ４１２及び出力ドライバ４１４を含んでもよい。装置４００は、図４に図示されていない追加のコンポーネントを含んでもよいことが理解される。
【００２５】
プロセッサ４０２は、中央演算処理装置（ＣＰＵ）、グラフィックスプロセシングユニット（ＧＰＵ）、同じダイに位置するＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサコアを含んでもよく、各プロセッサコアは、ＣＰＵ又はＧＰＵであってもよい。メモリ４０４は、プロセッサ４０２と同じダイに位置してもよいし、プロセッサ４０２から分離して位置してもよい。メモリ４０４は、揮発性メモリ又は不揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ若しくはキャッシュ等Ｉを含んでもよい。
【００２６】
記憶装置４０６は、例えばハードディスクドライブ、ソリッドステートドライブ、光ディスク又はフラッシュドライブ等の固定記憶装置又はリムーバブル記憶装置を含んでもよい。入力装置４０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／又は受信用の無線ローカルエリアネットワークカード）を含んでもよい。出力装置４１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバック装置、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号の送信及び／又は受信用の無線ローカルエリアネットワークカード）を含んでもよい。
【００２７】
入力ドライバ４１２は、プロセッサ４０２及び入力装置４０８と通信し、プロセッサ４０２は、入力装置４０８からの入力を受信できる。出力ドライバ４１４は、プロセッサ４０２及び出力装置４１０と通信し、プロセッサ４０２が出力装置４１０に対して出力を送信できるようにする。入力ドライバ４１２及び出力ドライバ４１４は、オプションのコンポーネントであり、装置４００は、入力ドライバ４１２及び出力ドライバ４１４が存在しない場合には、各ドライバと同様に動作することが留意される。
【００２８】
プロセッサ内のフロントエンドユニット（ＦＥ）は、命令をフェッチし、復号ユニット（ＤＥ）に命令を送信することを担当する。ＦＥは、２つのサブユニット（つまり、分岐予測（ＢＰ）及び命令キャッシュ（ＩＣ））を含む。ＢＰサブユニットは、各アドレスでフェッチするために、フェッチアドレス及び特定のバイトのシーケンスを予測する。ＩＣサブユニットは、ページ変換を実行し、キャッシュ階層から特定のバイトをフェッチする。ＦＥは、他のサブユニット及び機能を含むが、係る機能は本開示と関連性がなく、本明細書においてさらに説明されないことに留意されたい。
【００２９】
ＦＥには、３つの主要なパイプライン（つまり、ＢＰパイプライン、命令タグ（ＩＴ）パイプライン及びＩＣパイプライン）が存在する。ＢＰパイプラインと、ＢＰパイプライン及び命令フェッチ（ＩＴ／ＩＣ）パイプラインを切り離すＩＴ／ＩＣパイプラインとの間には、予測待ち行列（ＰＲＱ）がある。ＢＰパイプラインは、予測アドレスを生成し、ＰＲＱは、ＩＴ／ＩＣパイプラインがアドレスを処理できるようになるまでアドレスを保持する。ＰＲＱは、フェッチアドレスのインオーダーキューである。ＰＲＱは、ＩＴ／ＩＣパイプラインによって読み取られ、更新される。
【００３０】
サイクル毎に、予測されたバーチャルフェッチアドレス（プログラムカウンタ、ＰＣ）及び最近の分岐挙動（グローバル履歴、ＧＨｉｓｔ）を表すベクトルが、ＢＰパイプラインをフローする。各フローは、フェッチされる次の６４のバイトまで発見できる。ＰＣは、分岐ターゲットバッファ（ＢＴＢ）においてエントリをルックアップするために用いられる。ＢＴＢエントリは、分岐を識別し、そのターゲットを予測する。ＰＣ及びＧＨｉｓｔは、ハッシュパーセプトロン（ＨＰ）テーブルにアクセスするために用いられる。ＨＰテーブルは、条件分岐の方向（つまり、成立又は不成立）を予測するために用いられる。
【００３１】
戻り及び可変（ｒｅｔｕｒｎｓ  ａｎｄ  ｖａｒｉａｂｌｅ）ターゲット分岐は、予測においてサポートするのに用いられる追加的な構造を有する。成立した分岐が呼出しであることをＢＴＢが示す場合には、呼出し後の命令のアドレスがスタックにプッシュされる。関連付けられた戻り命令は、ＢＴＢからの予測されたターゲットを用いる代わりに、スタックから当該アドレスをポップアップする。分岐が可変ターゲットを有することをＢＴＢが示す場合には、間接ターゲットアレイ（ＩＴＡ）のアドレスをルックアップするために、フェッチアドレス及びグローバル履歴が用いられる。
【００３２】
ＢＴＢ構造及びＨＰ構造の両方は２レベル構造として実装される。レベル１（Ｌ１）ＢＴＢ及びＬ１  ＨＰから予測されるフェッチ方向の変更（リダイレクト）は、ＢＰパイプラインに１つのバブル（例えば、「ノーオペレーション」）を挿入する。分岐が、Ｌ１  ＢＴＢに存在するが、可変ターゲットを有しており、Ｌ２  ＢＴＢで見つけられる場合、又は、Ｌ２  ＨＰがＬ１予測器からの直接的な予測を無効にする場合には、３つのバブルがＢＰパイプラインに挿入される。最終的に、可変ターゲットを有するＬ２  ＢＴＢの分岐は、４つのバブルをＢＰパイプラインに挿入する。
【００３３】
これらの主要な予測器に加えて、ＦＥの効率を高めるように設計された２つの構造が存在する。上述したように、典型的なケースでは、成立した分岐又は成立しなかった分岐は、ＢＰパイプラインにバブルをもたらす。ＢＴＢ及びＨＰにアクセスするのに並行して、ＰＣ及びＧＨｉｓｔは、ＢＴＢインデックス予測器（ＢＩＰ）からエントリを読み取るために用いられる。このエントリは、ＢＴＢ及びＨＰのアレイインデックスを予測するために用いられ、次のサイクルにおいてこれらの構造にアクセスするのに使用される。ＢＩＰが次の命令のインデックスを正しく予測すると、バルブが潰される。ループの繰り返しを見つけようとするために、予測されたアドレスストリームを絶えずスキャンしているループ予測器が存在する。ループ予測器は、ループ上でロックすると、大きな予測アレイをオフにすることができる。予測は、このより小さい構造の中から、１サイクル当たり最大１つの分岐が行われるレートで行われてよい。
【００３４】
アドレスが予測されると、アドレスは３つの異なる構造に書き込まれる。各アドレスは、分岐及び履歴の情報とともに分岐ステータスレジスタ（ＢＳＲ）に書き込まれる。これは、分岐が発見され、予測を誤り、又は、リタイアされる場合に、予測構造を訓練するのに用いられる。各アドレスがＰＲＱに書き込まれることにより、ＩＣパイプラインは、関連付けられたデータをフェッチできる。最後に、各アドレスは、ＤＥユニットの先入先出（ＦＩＦＯ）待ち行列（ＦａＦｉｆｏ）のフェッチアドレスに書き込まれる。
【００３５】
サイクル毎に、ＰＲＱから予測された仮想フェッチアドレス（ＶＡ）は、ＩＴパイプラインをフローする。ＩＴパイプラインは、ＶＡを物理アドレス（ＰＡ）に変換しようとして、命令トランスレーションルックアサイドバッファ（ＩＴＬＢ）の２つのレベルのうち第１レベルにアクセスする。成功した場合には、ＩＴパイプラインは、この物理アドレスを取得し、これを用いてＩＣにアクセスする。ＩＴＬＢルックアップと並行して、ＩＣマイクロタグ（ｕＴａｇ）へのアクセスが開始される。このルックアップは、ＩＴＬＢからＰＡが得られると終了する。マイクロタグは、ＩＣデータアレイの何れのウェイがアクセスされるべきか（キャッシュラインが何れに位置してよいか）を予測する。データアクセスと並行して、完全なタグルックアップが、マイクロタグヒット信号を限定するために実行される。このフロー（ＩＴＬＢヒット、部分ＰＡ、ＩＣヒット、ＩＣウェイ）の結果は、ＰＲＱにライトバックされる。
【００３６】
Ｌ１  ＩＴＬＢミスがある場合には、トランスレーションルックアサイドバッファ（ＴＬＢ）ミスアドレスバッファ（ＭＡＢ）が割り当てられ、Ｌ２  ＩＴＬＢのルックアップが試行される。Ｌ２  ＩＴＬＢにミスがある場合にも、ロード／記憶ユニット（ＬＳ）に対するページウォーク要求が開始される。Ｌ２  ＩＴＬＢヒットエントリ及びページウォーク要求の結果の何れかが、Ｌ１  ＩＴＬＢにインストールされる。命令キャッシュにミスがある場合には、ＩＣメモリアドレスバッファ（ＭＡＢ）が割り当てられ、ミッシングラインについてのＬ２  ＩＴＬＢに対する充填要求が送信される。特定のＰＡが、（ページウォークの属性によって示されるように）キャッシュ可能である場合には、データが戻ると、当該データがＩＣに書き込まれる。特定のＰＡがキャッシュ不可である場合には、プロセスは、アドレスがＰＲＱにおいて最も古くなるのを待機し、結果として生じるフェッチデータをＤＥに直接転送する。
【００３７】
ミスがある場合には、ＰＲＱにおいてより若いエントリが、処理されるために続行される。これは、ミスをした古いフェッチよりも若いフェッチのキャッシュラインをプリフェッチする試みである。
【００３８】
ＩＣパイプラインは、１サイクル当たり３２バイトの命令データをフェッチできる３段パイプラインである。ＰＲＱの各アドレスは、６４バイト予測ウィンドウ内の予測された開始位置及び終了位置に応じており、全てのデータをＤＥに転送するために、ＩＣパイプラインを流れる１つ又は２つのフローを必要とする。最も古いＰＲＱエントリが待機している、リターンするＬ２キャッシュミスは、当該エントリに対してＩＣパイプラインをウェークアップすることができ、Ｌ２充填データは、データアレイが更新されている間に、ＤＥに直接的にバイパスできる。
【００３９】
全ての予測、タグ及びキャッシュパイプラインは、スレッド優先順位付けアルゴリズムに基づいて２つのスレッドからアクセスをインタリーブすることによって、同時マルチスレディング（ＳＭＴ）を処理する。概して、スレッドスケジューリングは、ラウンドロビン技術を用いて、ＢＴパイプライン、ＩＴパイプライン及びＩＣパイプライン内で独立して実行される。所定のサイクルにおいて、１つのスレッドがブロックされ、他のスレッドがピックされるために利用可能な場合には、他のスレッドは、当該サイクルにおいてピックされる。
【００４０】
図５は、ＢＴＢインデックス予測器及びＢＴＢウェイ予測器のブロック図である。図５は、ＢＴＢインデックス予測器及びＢＴＢウェイ予測器を実装するプロセッサ５００の一部を示す。明確にするために、図５に示されていないプロセッサ５００の他の要素が存在する。図５の下部にあるラベル（図においてＢＰ０，ＢＰ１，ＢＰ２）は、異なるコンポーネントがＢＰパイプラインの何れのサイクルで動作するのかを示している。
【００４１】
プログラムカウンタ（ＰＣ）５０２及びグローバル履歴（ＧＨｉｓｔ）５０４は、入力として提供される。第１マルチプレクサ５１０は、ＰＣ５０２及びターゲットＰＣ（Ｔａｒｇｅｔ＿ＢＰ２）５１２を受信し、選択信号５１４は、ＰＣ５０２及びターゲットＰＣ５１２の何れかを、選択ＰＣ（ＰＣ＿ＢＰ０）５１６として選択する。選択信号５１４は、実行（ＥＸ）ユニット若しくは復号（ＤＥ）ユニットからのリダイレクト、又は、ＢＰパイプラインにおける後からのより高い優先順位予測に基づく。選択信号５１４はプロセッサ５００の別の部分から得られるが、選択信号５１４の潜在的なソースへのコネクションラインは、明確にするために図示されていないことに留意されたい。
【００４２】
選択ＰＣ５１６及び予測ターゲットＰＣ（ＰｒｅｄＴａｒｇｅｔ＿ＢＰ１）５１８は、第２マルチプレクサ５２０に入力として供給され、選択信号５２２は、選択ＰＣ５１６及び予測ターゲットＰＣ５１８の何れかを、予測ＰＣ（ＰｒｅｄＰＣ＿ＢＰＯ）５２４として選択する。選択信号５２２は、ＥＸユニット又はＤＥユニットからのリダイレクトに基づいており、ＢＰパイプラインにおける後からのより高い優先順位予測に基づいており、又は、（予測されたターゲットＰＣ５１８に価値がない（つまり、選択ＰＣ５１６が選択されることを示す））ＢＩＰミス予測を有するＢＰ２サイクルにおいて有効なｏｐが存在する場合に基づく。選択信号５２２はプロセッサ５００の別の部分から得られるが、選択信号５２２の潜在的なソースへのコネクションラインは、明確にするために図示されていないことに留意されたい。
【００４３】
予測ＰＣ５２４は、想定アドレス（ｐｏｓｓｉｂｌｅ  ａｄｄｒｅｓｓｅｓ）５２８のセットを生成するＬ１  ＢＴＢ５２６に対して入力（インデックス）として供給される。想定アドレス５２８のセットは、第３マルチプレクサ５３０への入力として供給され、選択信号５３２（以下に説明される分岐成立信号／分岐不成立信号）は、想定アドレス５２８のセットのうち１つの想定アドレスをターゲットＰＣ５１２として選択する。また、ターゲットＰＣ５１２は、第１マルチプレクサ５１０にフィードバックされ、第１コンパレータ５３４にフィードフォワードされる。
【００４４】
Ｌ１  ＢＴＢ５２６は、セットアソシエイティブ構造であり、これによりルックアップが実行される。アドレスのいくつかのビットは、構造を読み取るために用いられ、アドレスのいくつかのハッシュ化されたビットは、アドレスとの一致があるか否かを判断するためにタグと比較するのに用いられる。いくつかの「ウェイ」（いくつかの起こり得る異なる結果）間のタグ比較及び選択には、通常の２サイクルルックアップでは多くの時間を要する。
【００４５】
サイクル毎に、Ｌ１  ＢＴＢ５２６は、ターゲットＰＣ５１２を予測するために読み取られる。ターゲットＰＣ５１２は、次のターゲットＰＣを予測するために、インデックスを生成してＬ１  ＢＴＢを再び読み取るために次のフローにおいて用いられる。これは、同じキャッシュライン、又は、分岐成立に続く任意の非シーケンシャルキャッシュラインとなるだろう。第１フローからターゲットＰＣを生成するには時間がかかるので、次のフローのためのＬ１  ＢＴＢの読取りが遅延する。このバブルを潰すために、ＢＴＢインデックス予測器（ＢＩＰ）が、以下に説明されるように用いられる。
【００４６】
典型的な予測は、２つのサイクル毎に１つの分岐成立を予測する。各分岐は、Ｌ１  ＢＴＢ５２６を通過する。次のサイクル（ＢＰ２）では、ターゲットＰＣ５１２が決定される必要があり、ターゲットＰＣ５１２は、Ｌ１  ＢＴＢ５２６の前部にて、マルチプレクサ５１０，５２０内へ（ＢＰ０まで）２サイクル分フローバックする。要約すれば、想定アドレス５２８はＬ１  ＢＴＢ５２６から得られ、想定アドレスのセットのうち１つの想定アドレスが（ターゲットＰＣ５１２として）ピックされ、ピックされたアドレスがフローバックする。
【００４７】
予測ＰＣ５２４のいくつかのビットと、ＧＨｉｓｔのいくつかのビットと、の組合せは、ＢＴＢインデックス予測器（ＢＩＰ）５３６に供給される。１つの実装例では、この組合せは、予測ＰＣ５２４ビットとＧＨｉｓｔビットとの排他的論理和である。ＢＩＰ５３６は、第２マルチプレクサ５２０にフィードバックされ、第１コンパレータ５３４にフィードフォワードされる予測ターゲットアドレス（Ｐｒｅｄ＿Ｔａｒｇｅｔ  ＢＰ＿１）５１８と、第１ＧＨｉｓｔシフタ５４０及び第２コンパレータ５４２に供給される予測グローバル履歴シフト値（Ｐｒｅｄ  ＧＨｉｓｔ  ｓｈｉｆｔ＿ＢＰ１）５３８と、を生成する。
【００４８】
ＢＩＰ５３６は、Ｌ１  ＢＴＢ５２６に並行してアクセスされる。Ｌ１  ＢＴＢ５２６は、（次のフローのＢＴＢ／ハッシュパーセプトロン（ＨＰ）インデックスを構築するために用いられる）現在のフローの分岐ターゲットを予測する。一方、ＢＩＰ５３６は、インデックスを生成してＬ１  ＢＴＢ５２６及びＬ１  ＨＰ５６０内へのルックアップを実行するのに用いられる投機的部分ターゲットアドレスを、（ＶＡ［１９：１］及びＧＨｉｓｔの両方の関数として）予測する。ＢＩＰ５３６は、直接マッピングされ、仮想アドレスのハッシュ及びグローバル履歴によってインデックスが付される。このことは、Ｌ１  ＢＴＢ５２６及びＬ１  ＨＰ５６０を、直接続くサイクルで予測されたインデックスとともに読み取ることを可能にする。ＢＩＰ予測が正しい場合、分岐成立バブル及び分岐不成立バブルが潰される。
【００４９】
Ｌ１  ＢＴＢ５２６の実装（サイズ及び配置）と、タイミング制約が加えられたＬ１  ＢＴＢ読取りとは、Ｌ１  ＢＴＢ予測を、１つおきのサイクルだけ最後のＬ１  ＢＴＢリダイレクトに基づいて生成して読み取ることを可能にする。このことは、Ｌ１  ＢＴＢリダイレクト毎に、連続するＬ１  ＢＴＢ読取り間のバブルサイクルを生じさせる。１つおきのサイクルで実行する２つのスレッドであって、連続するサイクルでＬ１  ＢＴＢを占有する２つのスレッドが存在する理想的な状況では、この問題は発生しない。アクティブなスレッドが１つしかない場合、又は、連続して同じスレッド割当てがあった場合には、１サイクルおきにバブルが存在し、このことが性能に損害を与える。
【００５０】
１つの実装例では、ＢＩＰ５３６は、直接マッピングされた２５６エントリ構造であり、エントリは競争的に共有される。ＢＩＰ５３６はインデックス入力が提示され、値はＢＩＰから得られ、この値は正しいと仮定される。この時点では、追加の比較又は制限が必要とされない。次のサイクルでは、ＢＩＰ５３６の結果が用いられ、次いで、ＢＩＰ５３６の結果がその状況で使用するための正しい結果であったか否かが分かる（ＢＩＰ５３６の結果は、それが正しいか否かが分かる前に用いられる）。プロセッサの物理的なレイアウトの１つの実装例では、ＢＩＰ５３６は、Ｌ１  ＢＴＢ５２６及びＬ１  ＨＰ５６０の近くに位置する。
【００５１】
図６は、ＢＩＰ５３６の単一のエントリ６００の内容を示す図である。エントリ６００は、投機的インデックス６０２と、グローバル履歴６０４の最下位ビット（ＬＳＢ）と、グローバル履歴シフト値６０６と、ウェイ予測６０８と、を含む。
【００５２】
投機的インデックス６０２の長さは１９ビットであってもよく、投機的インデックス６０２は下位ＶＡビット１９：１を含む。ＢＩＰ５３６、Ｌ１  ＢＴＢ５２６及びＬ１  ＨＰ５６０は、次のサイクルフローのための読取りインデックスを生成するために、これらのビットを必要とする。
【００５３】
グローバル履歴６０４のＬＳＢの長さは２ビットであってもよく、ＬＳＢは、読取りインデックスを生成するためにＢＩＰ５３６、Ｌ１  ＢＴＢ５２６及びＬ１  ＨＰ５６０によって必要とされる、次のサイクルの投機的グローバル履歴値を予測するのに用いられる。
【００５４】
グローバル履歴シフト値６０６の長さは２ビットであってもよく、グローバル履歴シフト値６０６は、グローバル履歴テーブルの構築に役立つとともに、グローバル履歴のＬＳＢを０．１ビット分シフトするか２ビット分シフトするかの何れかを示す。グローバル履歴シフト値６０６がゼロより大きい場合には、シフト量及びシフトインされる値が供給される。各条件分岐は、分岐の成立又は不成立に応じてグローバル履歴テーブル内に０又は１をシフトインする。例えば、１つの分岐不成立が発生した場合には、０がシフトインされる。１つの分岐成立が発生した場合には、１がシフトインされる等である。
【００５５】
ウェイ予測６０８の長さは４ビットであってもよく、ウェイ予測６０８は、次のフローのために必要とされる情報（ＶＡ、ＧＨｉｓｔ、ウェイ）を記憶する可能性が最も高いＬ１  ＢＴＢウェイ（ワンホット）を予測するために用いられる。ウェイ予測６０８の４つ全てのビットが設定されると、ＢＴＢミスを確認するためにＬ１  ＢＴＢ及びＬ２  ＢＴＢの全てのウェイが読み取られる。
【００５６】
図５を参照し直すと、ＢＩＰインデックス予測を使用して、サイクル毎に、１つの分岐成立が予測される。ＢＩＰ５３６は、インデックスを取得し、Ｌ１  ＢＴＢ５２６がルックアップされるのと同様にルックアップされる。ルックアップの結果（予測ターゲットＰＣ５１８）は、直ちに、（マルチプレクサ５２０を介して）入力に多重化して戻され、次のサイクルでＬ１  ＢＴＢ５２６の別のルックアップを可能にする。予測ターゲットＰＣ５１８は、Ｌ１  ＢＴＢ５２６から得られるターゲットＰＣ５１２ほど正確ではないが、予測ターゲットＰＣ５１８が正しい場合には、サイクル毎に１つの予測を行うことができる。次のサイクルでは、予測毎に、ＢＩＰ５３６から得られた「迅速な」予測が、この迅速な予測が正しいか否かを判断するためにチェックされる。迅速な予測が正しい場合には、迅速な予測が捨てられる必要がない。迅速な予測が正しくない場合には、（マルチプレクサ５２０から迅速な予測を選択しないことによって）迅速な予測を捨て、２サイクル毎に１つの分岐を予測するという従前の挙動に戻る。
【００５７】
（例えば、分岐のないコードのセクションでの）連続予測に伴い存在する潜在的な「問題」であって、処理が依然としてＢＩＰの試行する予測を条件とするという潜在的な「問題」は、分岐を予測する必要がなくても２つのサイクルを得ることによって処理を減速させることであろう。しかし、全体的には、最終的な性能の向上がある。
【００５８】
Ｌ１  ＢＴＢ５２６は、フェッチされているアドレスのハッシュ化されたバージョンのビットでインデックスが付される。Ｌ１  ＨＰ５６０は、フェッチされているアドレスと、予測された最後のいくつかの分岐の履歴と、の組合せでハッシュされる。ＢＩＰ５３６がアドレスビット及び履歴ビットの組合せでハッシュ化されるという点において、ＢＩＰ５３６は、むしろハッシュパーセプトロンに近い。使用される履歴ビットの最適な数は少なく、例えば、上述したように、２つの履歴ビットが１つの実装例で使用される。履歴ビットをハッシュ化して結果とすることは、単にアドレスビットを使用することよりも優れた予測を得るのに役立つ。
【００５９】
ＢＩＰ５３６から得られる予測ターゲットＰＣ５１８は、（単なるアドレスの代わりに）次のアクセスのためにＢＩＰ５３６及びＬ１  ＢＴＢ５２６に即時にフィードバックされるインデックスである。予測されたインデックスは、ＢＩＰ５３６から読み出され、想定アドレス５２８が、Ｌ１  ＢＴＢ５２６から読み出される。両情報とも次のサイクルに送られ、ターゲットアドレス（ターゲットＰＣ５１２）及び結果として生じるインデックスが、予測されたインデックス（予測ターゲットＰＣ５１８）に一致するか否かを判断するために、（第１のコンパレータ５３４で）比較が行われる。
【００６０】
ＢＩＰ５３６の一般的なトレーニングは、予測パイプラインで行われる。予測ターゲットＰＣ５１８が得られると、それからインデックスが計算され、予測ターゲットＰＣ５１８が当該インデックスでＢＩＰ５３６にライトバックされる。実行フローが（例えば同じ最近の履歴に基づいて）コード内の同じスポットに戻る場合には、ＢＩＰ５３６から読み出されることは、（コードがこのポイントにあった前回の）その瞬間における知識を反映する。分岐がＢＩＰ５３６によって予測されるときから、分岐がトレーニングのためにＢＩＰに書き込まれるときへは、かなり迅速な切替えがある。これは、このような投機的な構造であり、投機的な構造が正確であったのか否かが直ちに確認できるため、迅速なトレーニングの否定的な側面は大きくない。
【００６１】
ＧＨｉｓｔ５０４及びターゲットシフトＧＨｉｓｔ（ターゲットＧＨｉｓ＿ＢＰ２）５４４は、第４マルチプレクサ５４６に供給され、選択信号５４８は、ＧＨｉｓｔ５０４及びターゲットシフトＧＨｉｓｔ５４４の何れかをグローバル履歴予測（ＧＨｉｓｔ＿ＢＰ０）５５０として選択するために用いられる。選択信号５４８は、ＥＸユニット若しくはＤＥユニットからのリダイレクト、又は、ＢＰパイプラインでの後からのより高い優先順位予測に基づいている。選択信号５４８がプロセッサ５００の別の部分から引き出されるが、選択信号５４８の潜在的なソースへのコネクションラインは、明確にするために図示されていないことに留意されたい。
【００６２】
第１ＧＨｉｓｔシフタ５４０は、グローバル履歴をシフトするために予測ＧＨｉｓｔシフト５３８を適用して、予測ターゲットグローバル履歴（Ｐｒｅｄ  Ｔａｒｇｅｔ  ＧＨｉｓｔ＿ＢＰ１）５５２を生成する。ＧＨｉｓｔ予測５５０及び予測ターゲットＧＨｉｓｔ５５２は、第５マルチプレクサ５５４に供給され、選択信号５５６は、ＧＨｉｓｔ予測５５０及び予測ターゲットＧＨｉｓｔ５５２の何れかを予測グローバル履歴（Ｐｒｅｄ  ＧＨｉｓｔ＿ＢＰ０）５５８として選択するために用いられる。選択信号５５６は、ＥＸユニット若しくはＤＥユニットからのリダイレクト、ＢＰパイプラインの後からのより高い優先順位予測、又は、ＢＩＰ予測ミスを有するＢＰ２サイクルでの有効なｏｐがある場合に基づいている。選択信号５５６は、プロセッサ５００の別の部分から引き出されるが、選択信号５５６の潜在的なソースへのコネクションラインは、明確にするために図示されないことに留意されたい。
【００６３】
予測ＧＨｉｓｔ５５８は、分岐成立／分岐不成立信号５３２を生成するＬ１ハッシュパーセプトロン（ＨＰ）５６０に供給される。分岐成立／分岐不成立信号５３２は、第３マルチプレクサ５３０に対して分岐成立／分岐不成立信号５３２を転送する分岐成立／分岐不成立ＧＨｉｓｔシフタ５６２であって、第２コンパレータ５４２及び第２ＧＨｉｓｔシフタ５６６に対してグローバル履歴シフト値（ＧＨｉｓｔ  ｓｈｉｆｔ＿ＢＰ２）５６４を生成する分岐成立／分岐不成立ＧＨｉｓｔシフタ５６２に提供される。第２ＧＨｉｓｔシフタ５６６は、ターゲットＧＨｉｓｔ５４４を生成するためにＧＨｉｓｔシフト値５６４を使用し、ターゲットＧＨｉｓｔ５４４を第４マルチプレクサ５４６に転送する。
【００６４】
第１コンパレータ５３４は、ターゲットＰＣ５１２及び予測ターゲットＰＣ５１８を比較して、ターゲットＰＣ５１２及び予測ターゲットＰＣ５１８が一致するか否かを判断し、ＡＮＤゲート５７０に対して一致値５６８を出力する。第２コンパレータ５４２は、予測ＧＨｉｓｔシフト値５３８及びＧＨｉｓｔシフト値５６４を比較して、予測ＧＨｉｓｔシフト値５３８及びＧＨｉｓｔシフト値５６４が一致するか否かを判断し、ＡＮＤゲート５７０に対して一致信号５７２を出力する。ＡＮＤゲート５７０は、ＢＩＰ一致信号５７４を出力する。
【００６５】
両コンパレータ５３４，５４２が一致を示す場合には、ＢＩＰ一致信号５７４は正の一致（ＢＩＰ５３６が正しい予測を行ったこと）を示しており、パイプラインから何もフラッシュされる必要がない。両コンパレータ５３４，５４２が一致を示さない場合には、ＢＩＰ一致信号５７４はＢＩＰ予測が正しくなかったことを示しており、パイプラインからフローを流し出し、ＢＰ２サイクルからＢＰ０マルチプレクサ５１０にターゲットアドレス５１２をフィードバックする。
【００６６】
これは、スループットの大幅な改善である。ＢＩＰ５３６を使用しないと、パイプラインにバブルが生じる。分岐予測器のフロントエンドがマシンのスループットを制限している場合には、サイクル毎にバブルが存在するであろう。ＢＩＰ５３６を使用するとホールが塞がり、これによって命令の連続的な流れが存在し、フロントエンドバブルがより少なくなる。マシンは、マシンを最大限に保つように役立つことによって、サイクル毎により多くの命令を処理しようと試みるので、マシンがより幅広くなるにつれ、ＢＩＰを使用することの価値が高まる。
【００６７】
図７は、ＢＰ一致信号を生成するためにＢＩＰを使用する方法７００のフローチャートである。ＢＴＢ、ＢＩＰ及びＨＰにおいてルックアップを実行するのに用いられるインデックスが生成される（ステップ７０２）。続くステップ（７０４，７１０，７１２）を並列で実行できるが、説明のために別々に説明されていることに留意されたい。
【００６８】
インデックスは、想定アドレスのセットを生成するために、ＢＴＢにおいてルックアップを実行するのに用いられる（ステップ７０４）。ターゲットＰＣは、想定アドレスから選択される（ステップ７０６）。ターゲットＰＣは、次のフローで用いられるインデックスを生成するために用いられ（ステップ７０８）、方法７００の当該部分は、新たなフロー用のインデックスを生成するために、ステップ７０２に戻る。
【００６９】
また、インデックスは、予測ターゲットＰＣ及びグローバル履歴（ＧＨｉｓｔ）シフトを生成するためにＢＩＰでルックアップを実行するのに用いられる（ステップ７１０）。インデックス及びＧＨｉｓｔは、ＨＰでルックアップを実行して、分岐成立／不成立信号を生成するために用いられる（ステップ７１２）。ＧＨｉｓｔは、分岐成立／不成立信号に基づいて更新され（ステップ７１４）、更新されたＧＨｉｓｔは、ＨＰの以降のルックアップにおいて用いられる。また、分岐成立／不成立信号は、ＧＨｉｓｔシフトを生成するのにも用いられる（ステップ７１６）。
【００７０】
ＢＴＢからのターゲットＰＣ及びＢＩＰからの予測ターゲットＰＣは、第１一致信号を生成するために比較される（ステップ７１８）。ＢＩＰからのＧＨｉｓｔシフト及びＨＰからのＧＨｉｓｔシフトは、第２一致信号を生成するために比較される（ステップ７２０）。第１一致信号及び第２一致信号は、ＢＰ一致信号を生成するために互いに論理積がとられ（ステップ７２２）、方法が終了する（ステップ７２４）。
【００７１】
（Ｌ１  ＢＴＢウェイ予測器）
また、ＢＩＰ５３６は、インデックス予測に類似した方法で、上述したようにＬ１  ＢＴＢウェイを予測するのにも用いられる。ＢＩＰ５３６（ウェイ予測６０８）の出力部分は、ヒット結果についてどの「ウェイ」を見るのかを知らせる。予測されたＬ１  ＢＴＢウェイ以外の全てのウェイは、Ｌ１  ＢＴＢに対する読取りパワーを節約するためにオフにされる。Ｌ２  ＢＴＢ（図５には図示されていない）ウェイも、Ｌ２  ＢＴＢパワーを節約するためにオフにされる。
【００７２】
ＢＩＰウェイ予測６０８が「１１１１」を予測する場合には、Ｌ１  ＢＴＢウェイの全てを読み取ることに加えて、Ｌ２  ＢＴＢが強化されて読み取られる。これにより、ＢＴＢミスケースも予測できるようになる。
【００７３】
Ｌ１  ＢＴＢヒットがなく、「１１１１」組合せが予測されず、このため全ての想定されるＢＴＢ位置で検索される場合には、ＢＴＢミスが存在することを確実にするために、ＢＩＰリフローが実行される。ターゲットＰＣにリダイレクトする代わりに、このケースは、それ自体を取り消し、Ｌ１リダイレクトをそれ自体に戻すが、Ｌ１  ＢＴＢ全体及びＬ２  ＢＴＢ全体を読み取らせる強制的な読取り条件を伴う。
【００７４】
ＢＩＰのこの部分のトレーニングは、より複雑である。現在のフローからのインデックスが取得され、次のフローに送られる。ＢＴＢは、インデックスとともに読み取られ、次のフローがＢＴＢでどのウェイにヒットするのかが判断され、そのウェイが読み出されるウェイである。
【００７５】
パイプラインの最後で、この予測に使用されるインデックスと、次の予測のターゲット又はインデックスとが収集される。次の予測のインデックスはＢＩＰに入れられ、次のフローのＢＴＢヒット情報が（それがどのウェイでヒットするのかを確かめるために）収集され、この情報は、この予測とともにＢＩＰに書き込まれる。
【００７６】
第１の例では、コードがループに存在し、所定の分岐がＢＴＢのウェイ３に存在する。ＢＩＰは、そのインデックス及び及びウェイ３を指し示すようにトレーニングされる。次いで、ループを通る反復毎に、その結果を探すためにＢＴＢの４つ全てのウェイを読み取る代わりに、ウェイ３だけが読み取られる必要がある。予測が正しい場合には、予測は、ヒットがあることを予測するのでパワーを節約し、ヒットがあるウェイを予測し、予測されていないウェイをパワーオフできる。Ｌ１  ＢＴＢにヒットがあることによってＬ２  ＢＴＢが必要とされないことが分かっているため、Ｌ２  ＢＴＢ構造を完全にオフにすることができる。
【００７７】
第２の例では、ＢＴＢのミスが予想される場合（アドレスがＢＴＢに記憶されていない、連続フェッチ等）に、ＢＩＰは、４つのウェイ全てを読み取るようにトレーニングされる。４つのウェイ全てがＢＴＢから読み出される場合には、ヒットが存在しなかったことが確認でき、このことは、ＢＩＰウェイ予測が役立ったことを示している。
【００７８】
そのＢＩＰが「ウェイ３」を読み取ることを示し、ミスがある（分岐が他のウェイのうち１つのウェイにあった可能性があることを意味する）場合には、そのフローは、全てのウェイでその分岐を探すために再度行われる必要があるため、不都合な点がある。通常、ＢＩＰ予測が正しくないウェイを有する場合、ＢＩＰ予測は、正しくないインデックスを有し、これにより、フローは、ＢＩＰインデックス一致機構によって時間の大半がフラッシュされたであろう。
【００７９】
ＢＩＰウェイ予測器は、本明細書で説明されるように、基本的にキャッシュウェイ予測器とは異なる。ＢＩＰの予測は、むしろインデックス予測器の継続部に近い。つまり、インデックス予測器は、Ｍビットのインデックスを提供し、ウェイ予測器は、これを特定のウェイで増補する。ＢＩＰの１つのルックアップは、ハードウェアの次のＢＴＢルックアップを指示する。したがって、ＢＩＰウェイ予測を用いる１つのフローは、読み取る１つ以上のＢＴＢウェイを指す１つのＢＩＰエントリを読み取るであろう。他方、キャッシュウェイ予測器は、データ及びタグと連続してルックアップされるエントリを、キャッシュのエントリ毎に有する。Ｎウェイ設定関連キャッシュの場合、このルックアップの結果が、キャッシュ自体にＮ個未満のエントリがあることを示すのを目的として、Ｎ個のエントリがウェイ予測器でルックアップされる。
【００８０】
（ＩＴパイプ及びＩＣパイプの分離）
図８は、プロセッサ８００の一部での命令タグ（ＩＴ）パイプライン及び命令キャッシュ（ＩＣ）パイプラインのブロック図である。図８は、ＩＴパイプライン及びＩＣパイプラインを実装するプロセッサ８００の部分のみを示す。明確にするために、図８には示されていないプロセッサ８００の他のコンポーネントが存在する。図８の下部に示した符号ＩＴ０，ＩＴ１，ＩＴ２，ＩＣ０，ＩＣ１は、ＩＴパイプライン及びＩＣパイプラインの何れのサイクルで異なるコンポーネントが動作するのかを示している。
【００８１】
予測ＰＣ８０２は、Ｌ１  ＩＴＬＢ８０４と、ｕＴａｇルックアップ装置８０６と、に供給される。Ｌ１  ＩＴＬＢにヒットがある場合に、Ｌ１  ＩＴＬＢは、物理アドレス（ＰＡ）８０８を出力する。ＰＡ８０８は、第１コンパレータ８１０と、選択ＰＡ装置８１２と、タグルックアップ装置８１４と、第２コンパレータ８１６と、に供給される。
【００８２】
ｕＴａｇルックアップ装置８０６は、第１コンパレータ８１０に供給されるｕＴａｇ８１８を生成するために、予測ＰＣ８０２を使用する。ｕＴａｇルックアップは、ＩＴ０サイクルで開始され、ＩＴ１サイクルで終了する。第１コンパレータ８１０は、ＰＡ８０８及びｕＴａｇ８１８を比較して一致信号８２０を生成する。一致信号８２０は、タグルックアップ装置８１４と、選択向き装置８２２と、に供給される。
【００８３】
選択ウェイ装置８２２は、命令キャッシュ８２６でウェイ８２４を選択するために、予測ＰＣ８０２及び一致信号８２０を使用する。第１コンパレータ８１０からのヒット情報は、ウェイ８２４が、役に立つデータを有する可能性のあるＩＣ８２６のウェイであることを示し、ヒットは、そのキャッシュエントリのタグビットの部分集合に基づいている。選択ＰＡ装置８１２は、選択ＰＡ８２８を生成するために、予測ＰＣ８０２及びＰＡ８０８を使用する。命令キャッシュ８２６は、処理用の命令８３０を選択するために、ウェイ８２４及び選択ＰＡ８２８を使用する。
【００８４】
タグルックアップ装置８１４は、第２コンパレータ８１６に供給されるタグ８３２を選択するために、ＰＡ８０８及び一致信号８２０を使用する。第２コンパレータ８１６は、ヒット信号８３４を生成するために、ＰＡ８０８及びタグ８３２を使用する。
【００８５】
ＩＴ２サイクルでは、タグルックアップが終了する。部分一致がある全てについて、タグの残りは、完全な一致があることを確認するために読み出される。その結果、キャッシュ内のこの位置が、探されているデータを有する位置であることが確かに分かるであろう。通常、部分ヒットは、キャッシュからデータを読み取ることを制御するために使用可能な十分な情報を有する。部分タグが複数のヒットを生じさせる場合には、ウェイ毎に読み出されるタグの残りは、次のサイクルでの完全な限定されたヒット信号を得るために完全アドレスと比較できる（これが、ＩＴパイプライン及びＩＣパイプラインが結合された場合に行われる必要のあることである）。この後で、データアレイ（命令キャッシュ）は、正しいエントリを読み取るために、再度読み取られることができる。
【００８６】
ＩＴパイプラインの最後にて、ヒットがある場合には、その情報（アドレス、及び、アドレスが見つかったウェイ）をＰＲＱに記憶する。後に、そのデータをキャッシュから読み出す必要があり、完全なタグルックアップが実行される必要がない。インデックス及び以前にヒットオンしたウェイだけがＰＲＱから読み出される必要があり、その情報は、データアレイにアクセスするのに使用できる。したがって、タグパイプライン及びタグアクセスは、データアレイがアクセスされるときから分割され得る。
【００８７】
キャッシュミス、又は、キャッシュラインの半分以上を得るフェッチ（つまり、長いフェッチ）では、タグパイプラインは、各アドレス（予測ＰＣ８０２）がＢＰパイプラインから現れるとすぐに実行する。次いで、ＩＣパイプラインは、（１つの代わりに）フェッチ毎に２つの選択を行わなくてはならず、このため、ＩＣパイプラインが独自に選択できる場合であっても、ＩＣパイプラインはＩＴパイプラインに後れを取る。
【００８８】
（ＩＴパイプライン及びＩＣパイプラインに続く）ＤＥパイプラインが一杯になっても、タグルックアップは、ＤＥパイプラインにデータを送信するためにデータアレイを強化することなく、（ヒット又はミスを判断するために）依然として実行できる。
【００８９】
ＩＴパイプラインがＩＣパイプラインよりも数フェッチ前方にある場合には、利点がある。現在キャッシュミスがある場合には、このことはＩＴパイプラインで学習される。要求がＬ２キャッシュに送信されることで、ＩＣパイプラインが追いつき、そのデータの使用を希望する場合には、当該データは、Ｌ２キャッシュから戻る（ＩＴパイプラインがフローすることを望む位置と合うことがある）ことが考えられる。言い換えると、より多くのプリフェッチ挙動が取得されてもよい。
【００９０】
ＩＴパイプライン及びＩＣパイプラインを分離する影響は、マシンの他の部分で行われることに類似している。すなわち、パイプラインを分離することは、バブルを隠す、又は、バブルの影響を削減する。（それぞれ独立した理由から遅れることのある）２つの異なるパイプラインが存在するため、バブルの影響が蓄積するのは望ましくない。分離することなく、一方のパイプラインにバブルがある場合には、バブルは、当該パイプラインを通って、他方の従属するパイプラインまで進む。
【００９１】
ＩＣパイプラインが、ＩＴパイプラインとともに直ぐに選択される場合には、そうでない場合と比較して、データキャッシュのより多くのウェイを強化する必要があり、このことは常に行われなければならないであろう。タグパイプラインがデータパイプラインを追い越すと直ぐに、データパイプラインは、データパイプラインがデータを読み出す必要のある命令キャッシュデータアレイの一部をより正確に強化できる。
【００９２】
分離することの副作用は、インデックス、及び、ヒットオンがあった可能性のあるウェイを記憶するためにＰＲＱを使用することである。キャッシュからラインを削除する動作がある場合、ＰＲＱでのヒット表示が「ヒットしない」に変更される必要がある。このようにＰＲＱを使用することは、このレコードが維持される必要があるため、（ＩＴパイプラインからの情報がＰＲＱに記憶される）何等かのレコード管理オーバヘッドを含むであろう。タグエントリが無効にされる場合には、ＰＲＱのエントリも無効にされなければならないであろう。
【００９３】
多くの変形が本明細書の開示に基づいて可能であることが理解されるべきである。特徴及び要素を特定の組合せで上述したが、各特徴又は要素は、他の特徴及び要素なしで単独で使用されてもよいし、他の特徴及び要素を有する、若しくは、他の特徴及び要素のない多様な組合せで使用されてもよい。
【００９４】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実装されてよい。適切なプロセッサは、一例として、汎用プロセッサ、特殊プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアと関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、任意の他の種類の集積回路（ＩＣ）、及び／又は、状態機械を含む。係るプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令の結果、及び、ネットリスト（コンピュータ可読媒体上に記憶可能な当該命令）を含む他の中間データを使用し、製造プロセスを構成することによって製造されてよい。係る処理の結果は、実施形態の態様を実装するプロセッサを製造するために、半導体製造プロセスにおいて使用されるマスクワークであってよい。
【００９５】
本明細書で提供される方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的コンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実装されてよい。非一時的コンピュータ可読記憶媒体の例は、読出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体記憶装置、内部ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、並びに、ＣＤ−ＲＯＭディスク及びデジタル多用途ディスク等の光媒体を含む。
【００９６】
（追加の実施形態）
１．命令タグ（ＩＴ）パイプラインと、ＩＴパイプラインと通信する命令キャッシュ（ＩＣ）パイプラインと、を含むプロセッサであって、ＩＴパイプライン及びＩＣパイプラインが互いに独立して動作できるように、ＩＣパイプラインがＩＴパイプラインから分離している、プロセッサ。
【００９７】
２．ＩＴパイプラインは、予測されたアドレスを受け取り、物理アドレスを出力するように構成されたレベル１命令トランスレーションルックアサイドバッファ（ＩＴＬＢ）と、予測されたアドレスを受け取り、マイクロタグを出力するように構成されたマイクロタグルックアップ装置と、を含む、実施形態１のプロセッサ。
【００９８】
３．ＩＴパイプラインは、ＩＴＬＢからの物理アドレスと、マイクロタグルックアップ装置からのマイクロタグと、の比較に基づいて一致信号を生成するように構成された第１コンパレータをさらに含む、実施形態２のプロセッサ。
【００９９】
４．ＩＣパイプラインは、予測されたアドレスと、第１コンパレータからの一致信号と、に基づいて命令キャッシュにおいてウェイを選択するように構成された選択ウェイ装置を含む、実施形態３のプロセッサ。
【０１００】
５．ＩＣパイプラインは、予測されたアドレスと、ＩＴＬＢからの物理アドレスと、に基づいて物理アドレスを選択するように構成された選択物理アドレス装置をさらに含む、実施形態４のプロセッサ。
【０１０１】
６．命令キャッシュは、選択物理アドレス装置からの選択物理アドレスと、選択ウェイ装置からの選択ウェイと、に基づいて命令を選択するように構成されている、実施形態５のプロセッサ。
【０１０２】
７．ＩＴパイプラインは、予測されたアドレスと、第１コンパレータからの一致信号と、に基づいてタグを選択するように構成されたタグルックアップ装置をさらに含む、実施形態３のプロセッサ。
【０１０３】
８．ＩＴパイプラインは、ＩＴＬＢからの物理アドレスと、タグルックアップ装置からの選択タグと、に基づいてヒット信号を生成するように構成された第２コンパレータをさらに含む、実施形態７のプロセッサ。
【図１】
0006523274.tif 000002
【図２】
0006523274.tif 000003
【図３】
0006523274.tif 000004
【図４】
0006523274.tif 000005
【図５】
0006523274.tif 000006
【図６】
0006523274.tif 000007
【図７】
0006523274.tif 000008
【図８】
0006523274.tif 000009