(57)【特許請求の範囲】
【請求項１】
プロセッサにおける命令バッファ資源を管理するための方法であって、
ブランチ命令の可能性の高いパスに対応する第１命令ストリームを命令バッファの第１部分に格納するステップと、
ブランチ命令の可能性の低いパスに対応する第２命令ストリームを前記命令バッファの第２部分に格納するステップと、
命令スレッドに対するブランチ予測確度の値を計算するステップと、
前記ブランチ予測確度の値に従って、前記命令バッファの前記第１部分および前記第２部分のサイズを設定するステップと、を含む方法。
【請求項２】
前記ブランチ予測確度の値が所定の閾値を越えるかどうかを決定するステップを更に含み、
前記設定するステップは、前記ブランチ予測確度の値が所定の閾値を越えるという決定に応答して、前記予測されなかったブランチに対して割振られた命令バッファのサイズをゼロに設定する、請求項１に記載の方法。
【請求項３】
前記プロセッサによって実行される命令スレッドに対して前記計算するステップおよび前記設定するステップを反復するステップを更に含み、
それにより、前記ブランチ予測確度の値が変化するに従って、前記命令バッファの前記第２部分のサイズが動的に調節される、請求項１に記載の方法。
【請求項４】
前記プロセッサは複数の命令スレッドに対する命令を実行し、
前記設定するステップは、各々が前記複数の命令スレッドの１つに対応する複数のパーティションに前記命令バッファにおける記憶域を、各対応するスレッドに対するブランチ予測確度の値に従って、前記複数のパーティションにおける第１部分および第２部分に割振る、請求項１に記載の方法。
【請求項５】
前記計算するステップは、各ブランチ命令の前記命令スレッドに対するブランチ予測確度の値を計算し、
前記設定するステップは、次のブランチ命令に対するブランチ予測確度の値に従って前記命令バッファの前記第１部分および前記第２部分のサイズを設定する、請求項１に記載の方法。
【請求項６】
前記計算するステップは、複数のブランチ命令の前記命令スレッドに対するブランチ予測確度の平均値を計算し、
前記設定するステップは、前記ブランチ予測確度の平均値に従って前記命令バッファの前記第１部分および前記第２部分のサイズを設定する、請求項１に記載の方法。
【請求項７】
予測されなかったパスに対応する代替フェッチ・アドレスを格納するステップと、
ブランチ命令に関して実施されたパスを解析するステップと、
前記ブランチ命令が予測誤りされた場合、前記代替フェッチ・アドレスに従って前記第２部分から命令を検索するステップと、を更に含む、請求項１に記載の方法。
【請求項８】
前記検索するステップは、前記予測されなかったブランチに対する格納された多数の命令が空になった後、前記第１部分から命令を検索する、請求項７に記載の方法。
【請求項９】
ブランチ命令を実行するためのブランチ実行ユニットを含み、プログラム命令を実行するための機能的実行ブロックと、
命令バッファと、
前記プログラム命令を前記命令バッファにロードするための命令フェッチ・ユニットと、
ブランチ命令に遭遇したことを決定し、前記ブランチ命令の可能性の高いパスを決定し、前記可能性の高いパスに対応する第１命令ストリームを前記命令バッファの第１部分にロードし、可能性の低いパスに対応する第２命令ストリームを前記命令バッファの第２部分にロードするように前記命令フェッチ・ユニットに指示するためのブランチ処理ユニットと、
前記ブランチ処理ユニットに接続され、前記ブランチ処理ユニットによる決定の確度を測定し、前記測定の結果に従って前記第１部分および前記第２部分のサイズを調節するための制御回路と、を含むプロセッサ。
【請求項１０】
前記制御回路は前記第２部分のサイズをゼロに設定し、
前記ブランチ処理ユニットは、所定の閾値を越える確度を前記処理ユニットが測定したことに応答して、前記第２命令ストリームに関するいずれの命令もロードしない、請求項９に記載のプロセッサ。
【請求項１１】
前記制御回路は前記確度を反復的に測定し、前記プロセッサによって実行された命令スレッドに対して前記命令バッファの前記第２部分のサイズを調節し、
それにより、前記ブランチ処理ユニットによる前記決定の確度が変化するに従って、前記命令バッファの前記第２部分のサイズが動的に調節される、請求項９に記載のプロセッサ。
【請求項１２】
前記プログラム命令は複数の命令スレッドに対するプログラム命令であり、
前記制御回路は、各々が前記複数の命令スレッドの１つに対応する複数のパーティションに前記命令バッファにおける記憶域を、各対応するスレッドに対するブランチ予測確度の値に従って、前記複数のパーティションにおける第１部分および第２部分に割振る、
請求項９に記載のプロセッサ。
【請求項１３】
前記制御回路は、各ブランチ命令の命令スレッドに対するブランチ予測確度の値を計算し、更に、次のブランチ命令に対するブランチ予測確度の値に従って前記命令バッファの前記第１部分および前記第２部分のサイズを設定する、請求項９に記載のプロセッサ。
【請求項１４】
前記制御回路は、複数のブランチ命令の命令スレッドに対するブランチ予測確度の平均値を計算し、更に、前記ブランチ予測確度の平均値に従って前記命令バッファの前記第１部分および前記第２部分のサイズを設定する、請求項９に記載のプロセッサ。
【請求項１５】
前記可能性の高いパスの命令をフェッチするために命令キャッシュに順次アドレスを供給するための命令フェッチ・アドレス・レジスタと、
前記予測されなかったパスに対応する命令キャッシュに代替アドレスを格納するための代替命令フェッチ・アドレス・テーブルと、
前記ブランチ命令が前記可能性の低いパスにブランチするものとして解析されたということを前記制御回路が決定したことに応答して前記代替アドレスを前記命令フェッチ・アドレス・レジスタにロードするための選択回路と、を更に含む、請求項９に記載のプロセッサ。
【請求項１６】
前記命令フェッチ・ユニットは、前記予測されなかったブランチに対する格納された命令が空になった後、前記第１部分から命令を検索する、請求項１５に記載のプロセッサ。
【請求項１７】
プロセッサ・パイプラインのための命令フェッチ回路であって、
次の命令フェッチ・アドレスを命令キャッシュに供給するための命令フェッチ・アドレス・レジスタと、
予測されなかったブランチ・パスのアドレスを格納するための代替命令フェッチ・アドレス・テーブルと、
ブランチ評価回路と、
前記命令フェッチ・アドレス・レジスタの出力および前記代替命令フェッチ・アドレス・テーブルの出力のどちらかを選択するためのセレクタと、
前記ブランチ命令に関する可能性の高いパスを指示するためのブランチ予測ユニットと、
前記命令フェッチ・アドレス・レジスタによって索引付けされ、予測されたブランチ・パスに対応するバッファ部分および予測されなかったブランチ・パスに対応するバッファ部分の２つのバッファ部分を有する命令バッファと、を含み、
前記セレクタは、前記ブランチ評価回路によるブランチ命令の解析に応答して作動し、それによって、前記次の命令フェッチ・アドレスが前記予測されなかったブランチが実施されるということを前記ブランチ命令の解析が示す場合、前記次の命令フェッチ・アドレスが前記予測されなかったブランチ・パスにリダイレクトされ、
前記２つのバッファ部分の相対的サイズが、前記ブランチ予測ユニットによって供給された前記指示における確度の量に従って設定される、命令フェッチ回路。
【請求項１８】
前記セレクタは、複数の命令スレッドのセットの各々に対して１つの複数のセレクタを含み、更に、前記命令フェッチ・アドレス・レジスタに次の値を供給するために前記複数のセレクタの出力のどれかを選択するための第２セレクタを更に含む、請求項１７に記載の命令フェッチ回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、プロセッサおよびコンピューティング・システムに関し、予測されたブランチ（predictedbranch）および予測されなかったブランチ（non-predicted branch）のための命令バッファの深さ（深度）が動的に調節されるブランチ予測機構を有するプロセッサに関するものである。
【背景技術】
【０００２】
現在の高機能マイクロプロセッサは、他のプロセッサ・コア機能ユニットによる実行のために命令をフェッチし、デコードし、そしてディスパッチする命令フェッチ・ユニット（ＩＦＵ）を内蔵している。実行がリダイレクトされるまで、命令ストリームは順次、フェッチされる。そのようなリダイレクトの一般的な例はブランチ命令である。ブランチは、「実施される」、即ち、非順次的フェッチが生じ得るか、或いは、「実施されない」、即ち、命令フェッチがブランチ命令を通り越して継続し得るかである。ブランチ予測プロセッサでは、命令ストリームは、ブランチが「実施される」か、または「実施されない」か、に関する予測に従ってプリフェッチされる。正しいパスがフェッチされることを保証するために、ブランチが実施されるかどうかを決定するための種々の機構が使用されている。ブランチ命令が、「実施される」として予測されるとき、現命令フェッチ・パスは新しいターゲット・アドレスにリダイレクトされ、命令フェッチは新しいターゲット・アドレスから順次、続行する。ブランチ命令が「実施されない」として予測される場合、命令フェッチはリダイレクトされない。
【０００３】
命令がフェッチされるとき、一般に、それらは命令バッファ（ＩＢ）に格納される。その後、命令はＩＢから取り出され、デコードされ、更に、命令ディスパッチ・ユニット（ＩＤＵ）に送られる。ＩＤＵは、プロセッサ内の様々な機能ユニットによる実行のためにその命令をディスパッチする。ブランチ命令が実行されるとき、ブランチ・パスが正しく予測されたかどうかを、ブランチ処理ユニット（ＢＵ）が判断し、その予測が正しかった場合、命令シーケンスの中断は生じない。しかし、ブランチが予測誤りされた場合、現在のフェッチ・パスは放棄されなければならず、実行のシーケンスは、予測されなかったブランチ・パスにリダイレクトされなければならない。命令シーケンスをリダイレクトするために必要な時間、予測誤りされたエントリをフラッシュするために必要な時間、並びに、予測誤りされたパスにおける命令を実行するためにフェッチおよび準備に費やされた電力およびスレッド資源を含む幾つかの損失が生じる。
【０００４】
予測誤りに費やされる資源および処理電力の量は、予測的実行を無効化することおよび各ブランチ命令に関するパイプラインの未解決の解析（pendingresolution）操作を停止することによって縮小することができる。しかし、そのような行為は、ブランチ予測により提供される利点、即ち、大抵の場合、パイプラインが適正に埋め尽くされることによって十分なプロセッサ・パフォーマンスのための十分な命令パイプラインを提供するという利点、を否定的なものにする。
【０００５】
従って、命令パイプラインを、十分な処理パフォーマンスにとって十分なものに保ちながら、ブランチの予測誤りにおいて費やされる資源およびエネルギの量を減らす方法およびマイクロプロセッサを提供することが望ましい。 
【発明の開示】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、ブランチの予測誤りの際に費やされる資源およびエネルギを少なくするプロセッサを提供することであり、その際、ブランチが命令プリフェッチを予測するという利点は保持されるプロセッサおよびそのプロセッサのオペレーション方法を提供することである。
【課題を解決するための手段】
【０００７】
プロセッサは、所与の命令スレッドに関してブランチ予測の質を測定し、予測されたブランチ命令ストリームおよび予測されなかったブランチ命令ストリームの両方を格納する命令バッファ部分のサイズを動的に調節する制御ユニットを含む。命令バッファ部分のサイズは測定されたブランチ予測確度に従って調節されるので、所与の命令スレッドに対するブランチ予測確度が高いとき、予測されなかった命令ストリームのためのバッファ部分は減じられ、高い確度の状態の下ではゼロにセットされることもある。低いブランチ予測確度の期間に遭遇するスレッドに関しては、予測されなかったブランチ・パスに対してより多くのバッファ・スペースが割振られるように、マルチスレッド環境ではバッファ部分の相対的なサイズが個々のスレッドに対して動的に変り得る。
【０００８】
本発明の前述のおよび他の目的、特徴および利点は、下記の説明、特に、添付図面に示されるような本発明の好適な実施例に関する説明から明らかであろう。
【発明を実施するための最良の形態】
【０００９】
本発明は、ブランチ命令パスに関する予測された命令ストリームおよび予測されなかった命令ストリームの両方に対してバッファリングを行う方法およびプロセッサ回路に関するものである。本発明では、予測された命令パスおよび予測されなかった命令パスに対するバッファ・サイズは、ブランチ予測における確度の測定に従って動的に変化する。確度の測定は多くの方法で行われ得るが、一般には、ブランチ予測回路によって行われる「適正な予測」対「適正でない予測」の測定を提供し得る。
【００１０】
次に、図面、特に、図１を参照すると、本発明の実施例によるシステムのブロック図が示される。システムは、複数のマルチスレッド・プロセッサ１０Ａ〜１０Ｄを含むプロセッサ・グループ５を含み、マルチスレッド・プロセッサ１０Ａ〜１０Ｄは、大規模処理システムを形成するようにブリッジ７を介して他のプロセッサ・グループに接続されてもよい。本発明は、同時マルチスレッド化をサポートする単一のプロセッサ、シングル・スレッド・プロセッサ、または、図１に示されるような大規模システム内の複数のプロセッサにおいて実施することが可能である。本発明は、ブランチ命令に後続する予測されなかった命令ストリームにスペースを動的に割振ることによってパフォーマンスの改良を行う。予測されなかった命令ストリームに割振られるスペースの量は、ブランチ予測確度を表すブランチ予測の測定（メトリック）に従って変化する。
【００１１】
プロセッサ・グル−プ５は、サ−ビス・プロセッサ２のほかにＬ３キャッシュ・ユニット６、システム・ローカル・メモリ８、および種々の周辺装置４にも接続される。サ−ビス・プロセッサ２は、障害監視、スタ−トアップ援助、およびテスト機能をプロセッサ・グループ５に提供し得るし、プロセッサ１０Ａ〜１０Ｄの各々に相互接続するほかに他のプロセッサ・グル−プへの専用の相互接続パスを持ち得る。プロセッサ１０Ａ〜１０Ｄは、汎用の処理機能のために命令の実行およびデータ値に関する操作を行う。ブリッジ７およびシステム内の他のブリッジは、ワイド・バスを介して他のプロセッサ・グル−プとのコミュニケーションを行い、バス３５は、プロセッサ１０Ａ〜１０Ｄ、ブリッジ７、周辺装置４、Ｌ３キャッシュ６、およびシステム・ローカル・メモリ８の接続を提供する。すべてのプロセッサ・グル−プによるアクセスのために、ブリッジ７に他のグロ−バル・システム・メモリが外部結合されてもよい。
【００１２】
プロセッサ１０Ａ〜１０Ｄは、複数のスレッドの同時的および推測的な実行が可能な同時マルチスレッド（ＳＭＴ）プロセッサである。プロセッサ１０Ａ〜１０Ｄの各々は、同時実行の複数ストリ−ム、即ち、複数命令スレッドをサポ−トするための実行資源を含み、更に、各命令スレッドに関するブランチ予測の質を決定し、その命令スレッドに対するブランチ予測が効果的に進んでいないということを決定するとき、予測されなかった命令ストリ−ムのために設けられた命令バッファのサイズを変更する、制御回路（ハ−ドウェア）を含む。
【００１３】
次に図２を参照すると、プロセッサ１０Ａ〜１０Ｄと同じ特徴を有するプロセッサ１０の詳細が示される。バス・インタフェース・ユニット２３がプロセッサ１０を他のＳＭＴプロセッサおよび周辺装置に接続し、Ｌ２キャッシュ４２、デ−タ値を格納するためのＬ１Ｄキャッシュ２２、プログラム命令を格納するためのＬ１Ｉキャッシュ２０、およびキャッシュ・インターフェース・ユニット２１を外部のメモリ、プロセッサおよび他の装置に接続する。Ｌ１Ｉキャッシュ２０は、命令フェッチ・ユニット（ＩＦＵ）１６に関連して命令ストリ−ムのローディングを行う。命令フェッチ・ユニット１６は命令をフェッチし、命令バッファ（ＩＢ）２８内に命令ストリ−ムのためのストレージ（記憶域）を含んでいる。ディスパッチ・ユニット１２は、一般的な演算を実行するための固定小数点ユニット（ＦＸＵ）１４および浮動小数点演算を実行するための浮動小数点ユニット（ＦＰＵ）１５のような種々の内部ユニットに発行された命令のシーケンスを制御する。
【００１４】
固定小数点ユニット１４および浮動小数点ユニット１５は、汎用レジスタ（ＧＰＲ）１８Ａ、浮動小数点レジスタ（ＦＰＲ）１８Ｂ、条件レジスタ（ＣＲ）１８Ｃ、リネーム・バッファ１８Ｄのような種々の資源に接続される。ＧＰＲ１８ＡおよびＦＰＲ１８Ｂは、ロ−ド／ストア・ユニット（ＬＳＵ）１９によってＬ１Ｄキャッシュ２２からロ−ドおよびストアされるデ−タ値のためのデ−タ値ストレージを提供する。リネーム・バッファ１８Ｄ（種々の内部実行ユニットに関連したいくつかのリネーム・ユニットを含み得る）は、実行ユニットのためのオペランドおよび結果ストレージを提供する。ＩＦＵ １６は、スレッド優先順位およびスレッドごとの制御情報のようなスレッド実行を管理するための設定を含む指示をプログラム制御ユニット／スレッド・テ−ブル・ユニット（ＴＴＢＬ／ＰＣＵ）２４から受け取る。その結果、ＩＦＵ  １６はプロセッサ１０において実行される複数の命令スレッド間での実行資源の割振りを表わす命令シ−ケンスをロ−ドするように指示され得る。ＴＴＢＬ／ＰＣＵ２４は、スレッド間で命令を順序付けるためにどの特定の方法が使用されるかに従って、どの命令スレッドが最多の処理サイクル、命令フェッチ・サイクル、および／または、実行時間スライスを受け取るかを決定する責任を負う。
【００１５】
プロセッサ１０のような現用のスーパースカラ・プロセッサの命令実行パイプラインは非常に深く（例えば、パイプラインをクリアするための命令に対しては、２５またはそれ以上のクロック・サイクルが必要であることがあり）、便宜上、ブランチ命令が依存する条件レジスタの値が解析済み条件にあることを保証されているとき、そのブランチ状態の解析はパイプラインでは一般に非常に遅れて処理されていた。更に、一般に、ブランチ予測ユニットとブランチ条件を解析するユニットとの間には有限且つ多大の物理的および電気的距離が存在する。従って、条件付きブランチがデコードされるときにブランチ条件が実際にわかっていても、ブランチ処理ユニット２６は、一般に、これまでどおりブランチ履歴テ−ブル２５を使用してブランチの結果を予測し、そのブランチの予測されたパスに後続の命令を推測的にディスパッチする。ブランチ予測が適正でない場合、予測された命令ストリ−ムに割振られたパイプライン資源はフラッシュされなければならず、パイプラインにロ−ドされ、その間違って予測されたブランチ・パスに関連する電力および資源はすべて無駄にされる。本発明では、無駄にされる資源および電力は、予測が低い確度のブランチ（例えば、「ブランチが実施される」確率、および「ブランチが実施されない」確率の両方とも５０％に近いブランチ）に対しては減少する。通常は予測された命令フェッチ・パスのリダイレクトのためにフラッシュされる１つの予測され実施されたブランチの前にフェッチされた命令がその代りに保持されているので、電力消費量の減少および資源保護が生じる。その保持された予測されなかった命令パスは、その予測され実施されたブランチに対して予測誤りが生じるとき、命令フェッチ機構の動作が妨げられないようにする。
【００１６】
上記の目的のために、ＩＦＵ１６はブランチ処理ユニット２６内の制御ロジック（ＣＴＬ）２９から入力を受け取る。ブランチ処理ユニット２６内のブランチ実行ユニット（ＢＸＵ）２７が、ブランチ命令に関連した命令グル−プの実行を管理する。ブランチ履歴テ−ブル（ＢＨＴ）２５が、遭遇した各ブランチ命令に関する情報を（ブランチ・アドレスからのビットのサブセットによって内容アドレスされるそのテ−ブルの記憶域の限度内に）格納し、更に、どのパスがブランチ命令にとって成功可能性の高いパスとして予測されるかを決定するためにＢＸＵ２７によって使用される情報を格納する。ＢＨＴ２５における各エントリは、各ブランチに対して、各ブランチに対する相対的な確度および可能性の高い実行の方向を表すビットを含んでいる。ＢＨＴ２５は、ブランチ命令の実行の時に実際に実施されるブランチ・パスの方向および強さに関して更新される。本発明は、そのブランチ命令および命令スレッドに対するブランチ予測の質に従ってＩＢ２８における命令バッファ部分の相対的なサイズを制御するよう制御ロジック２９に通知するためにＢＨＴ２５の情報を使用する。
【００１７】
次に図３を参照すると、本発明の実施例の方法をサポートするプロセッサ内のプロセッサ命令パイプラインのフローが示され、それはその方法をに対応し、かつ実施例の装置の概略図も提供する。各命令スレッドに対する命令が命令キャッシュ（Ｉキャッシュ）３４からフェッチされる。その命令キャッシュには、すべての実行するスレッドのための命令がロ−ドされ、それらは、例えば、図２におけるキャッシュ・インターフェース・ユニット２１によってＬ１Ｉキャッシュ２０にロードされた命令である。Ｉキャッシュ３４か命令を選択するために使用されるアドレスが、命令フェッチ・アドレス・レジスタ（ＩＦＡＲ）によって提供される。パイプライン・サイクルのサイクル−１において、マルチプレクサＭＵＸ３２がスレッド実行シーケンスに従って多くの実行スレッドの各々に対するアドレスのうちのいずれかを選択し、各スレッドに対する個々のアドレスがマルチプレクサＭＵＸ３０Ａ〜ＭＵＸ３０Ｎから提供される。それらのマルチプレクサは、インクリメンタ（ＩＮＣ）によって生成された次の（順次）アドレスsequential_addr、ブランチによりリダイレクトされたアドレスbranch_redirect_addr、または、代替ＩＦＡＲテーブル３２から提供された代替パス・アドレスと規定されたアドレスalternate_path_addrのうちから選択する。代替パス・アドレスalternate_path_addrは、予測されなかったブランチ・パスを格納するためにその命令スレッドに割振られたＩＢ３８の部分に対応する予測されなかったブランチ・パス命令ストリ−ムの最後の命令に後続する次の命令のアドレスである。ＩＢ３８の主要な部分は、順次パスまたは予測されたブランチ・パスに沿ってフェッチされた命令を格納するために使用され、代替パス命令の選択は、そのブランチ命令が実行された後に決定される。
【００１８】
パイプライン・サイクルのサイクル０において、命令フェッチ・アドレス・レジスタＩＦＡＲからのアドレスがＩキャッシュ３４をアクセスするために、およびブランチ履歴テーブル３６のようなブランチ予測構造体をアクセスするために使用される。Ｉキャッシュ３４から検索されたブランチ予測情報および命令はラッチされ、次のパイプライン・サイクルのサイクル１において使用される。パイプライン・サイクルのサイクル１において、ブランチ走査ロジック３９が、その命令がブランチであるかどうかを決定し、それが肯定される場合、そのブランチが実施されるかまたは実施されないかを決定する。次のサイクルであるサイクル２において、命令が命令バッファ（ＩＢ）３８に格納される。予測されて実施されたブランチに対するブランチ予測が低い確度を有する場合、代替パス命令も命令バッファ３８に格納される。それは、代替パス命令がブランチ命令に後続する順次命令であるためである。代替パス・アドレスが計算され、代替フェッチ・アドレス・レジスタ・テ−ブル３２に送られる。代替パス・アドレスは、予測され実施されたアドレスであるかまたは次の順次アドレスであろう。それらのアドレスは既に格納されており、従って、それら２つのアドレスのどちらかの選択のみが必要とされる。そのブランチが低い確度の予測され実施されなかったブランチである場合、ブランチ宛先アドレスが代替ＩＦＡＲテ−ブル３２にロ−ドされ、従って、アイドル・サイクルが利用可能である場合、代替パスがフェッチされ得る。
【００１９】
その後のサイクルであるサイクル２＋において、代替（予測されなかった）パスは、他のブランチ命令が検出されるか、または代替パスに対して割振られたＩＢ３８の部分が満杯であるか、または代替パスのフェッチに対する命令ルックアヘッドに関する制限に遭遇するまで、メインの（予測された）ブランチ・パスと共に格納される。代替パス・フェッチ・グループの終了時に、次のアドレスが代替ＩＦＡＲテ−ブル３２に書き込まれる。更に、その後の命令フェッチと同時に、命令がデコ−ドされ、発行ユニットにディスパッチされる。一旦ブランチ命令が解析されると、そのブランチが予測誤りされなかった場合、命令スレッドのための命令バッファ３８の代替パス部分がフラッシュされる。ブランチ命令が予測誤りされた場合、メイン・パスの命令を含むＩＢ３８の部分がフラッシュされ、そしてバッファが空になるまで命令が代替パス・バッファから検索される。同時に、代替ＩＦＡＲテ−ブル３２がＩＢ３８のメイン部分に代替パス命令をフェッチするために使用される。それは、予測誤りのペナルティを大幅に縮小することによってパフォ−マンスを改善する。一旦代替パス・バッファが空になると、命令が命令バッファ３８のメイン・パス部分から検索される。
【００２０】
各ブランチ命令がブランチ実行ロジック３７によって解析された後、ブランチ履歴および確度の値が更新され、バッファ部分のサイズがその更新された確度の値に従って調節される。命令バッファ部分のサイズが、特定のブランチ命令（細分度）に対するブランチ予測確度に従って命令スレッドに対する次の各ブランチ命令のために調節され得るか、或いは、命令スレッドに対する全体的なブランチ予測確度に従って調節され得る。本発明は、特に、予測され実施されたが予測誤りされたブランチに対する大規模の改良を提供する。予測され実施されたブランチの場合については、予測されなかったパスがブランチ命令に順次後続し、代替命令フェッチ・バッファは満杯にされ得るが、ＩＦＡＲは新しいブランチ・タ−ゲット・アドレスにリダイレクトされる。アドレス・テ−ブルと、実施されなかったブランチ・パスに対する事前にフェッチされた値とを含むことによって、ブランチ予測誤りによるパイプラインの停止は更に容易に回避され得るか或いは大幅に縮小され得る。予測されなかったパスに割振られたスペ−スの量は、一般に、予測されたパスのバッファ・サイズに関連したブランチ予測確度に依存して０％と５０％との間の値にセットされる。それは、５０％を越えるいずれの値も、更に使用されそうな命令に対して割振られるスペースを制限するためである。更に、ブランチ予測確度が所定の閾値、例えば、９０％を越える命令スレッドに対して、その技術は完全に無効にされ得る。その場合、予測されなかったパス命令をフェッチするために使用される資源は、予測されなかったブランチ・パスをフェッチする際に消費される余分な電力と共に、キャッシュされたアービトレーションおよび他のオーバヘッドのために否定的な結果を生じる。
【００２１】
次に図４を参照すると、本発明の実施例に従って、シングル・スレッド・モードに関する命令バッファの割振りが示される。命令バッファ全体は２つのバッファＩＢ４０ＡおよびＩＢ４０Ｂを含む。それらは両方とも単一実行スレッドのための命令を格納するために使用される。図示のように、ＩＢ４０Ａはすべてメイン・フェッチ・パスのための命令を格納するために使用され、ＩＢ４０Ｂは、メイン・フェッチ・パスおよび代替（予測されなかったブランチ）フェッチ・パスのいずれかに割振られる。図示のように、代替フェッチ・パスに対する割振りは、その代替フェッチ・パスに対する０と１の間のブランチ確度に従って０％と５０％との間の線形の割振りが使用される場合、７０％のブランチ確度レベルに相当し得る約１５％である。図５は、次のブランチ命令に関して異なる確度を有する４つの実行スレッドに対する同じプロセッサ内の割振りを示す。その例では、スレッドＴ３が高いブランチ予測確度を有し、従って、ＩＢ４０ＢのスレッドＴ３の部分はすべてメイン・フェッチ・パスに割振られる。スレッドＴ２は、低いブランチ予測確度を有し、従って、メイン・フェッチ・パスおよび代替フェッチ・パスは等しいバッファ部分サイズを受ける。スレッドＴ０およびＴ１は、スレッドＴ２より高いブランチ予測確度を有するが、代替パスに対するバッファ割振りを使用不可にする（ディセーブルする）閾値よりも上ではない。
【００２２】
次に図６を参照すると、本発明の実施例に従って、プロセッサ１０内で作動するスレッド実行資源を管理するための方法がフローチャートで示される。ブランチの各解析時に（判断ステップ５０）、そのブランチが予測誤りされたと決定される場合（判断ステップ５１）、即ち、ブランチ履歴テ−ブルを使用する前の予測が実際の結果と一致しない場合、低ブランチ確度カウンタがインクリメントされ（ステップ５２）、一方その予測が実際の結果と一致する場合、そのカウンタはデクリメントされる（ステップ５３）。カウンタの値が閾値を越える場合（判断ステップ５４）、代替パス・フェッチ・バッファのサイズがカウント／確度に従ってセットされ（ステップ５５）、一方そのカウンタの値が閾値を越えない場合（判断ステップ５４）、代替フェッチ・バッファは割振られない（ステップ５６）。当初、メイン・フェッチ・パスはすべての命令バッファ・スペ−スを割振られ、従って、代替バッファ・スペースは事実上０である。一旦閾値を越えると、代替パス・バッファ・スペースが割振られ、代替パス・バッファ・サイズが動的に変化する。命令バッファ部分を頻繁に再サイジングしないようにデッドバンド(dead-band)を設けると、ブランチ予測の質は、命令バッファ部分の相対的なサイズを変更するために別の閾値以上に高くなるかまたはそれ以下に低くならなければならないであろう。この方法フロー（スキ−ム）が終了するまで、またはシステムがシャット・ダウンするまで、プロセスは継続する（判断ステップ５７）。
【００２３】
本発明を好適な実施例に関して詳しく示し且つ記述したが、本発明の趣旨および範囲から逸脱することなく形式および細部における上記およびその他の変更が行われ得ることは当業者には明らかであろう。
【図面の簡単な説明】
【００２４】
【図１】本発明の実施例によるシステムのブロック図である。
【図２】本発明の実施例によるプロセッサ１０のブロック図である。
【図３】本発明の実施例に従ってプロセッサ内のプロセッサ・パイプライン命令フローを示す概略図である。
【図４】図２のプロセッサ１０内の例示的な命令バッファ割振りを示す概略図である。
【図５】図２のプロセッサ１０内の例示的な命令バッファ割振りを示す概略図である。
【図６】本発明の実施例による方法を示すフローチャートである。
【図１】
0005270257.tif 000002
【図２】
0005270257.tif 000003
【図３】
0005270257.tif 000004
【図４】
0005270257.tif 000005
【図５】
0005270257.tif 000006
【図６】
0005270257.tif 000007