(57)【特許請求の範囲】
【請求項１】
フェッチされたブランチ命令を含む命令ストリームを提供するために命令ソースから命令を、フェッチ・ユニットによりフェッチするステップと、
前記フェッチされたブランチ命令の結果を、ブランチ予測ユニットにより予測するステップであって、前記フェッチされたブランチ命令のための個々のブランチ予測を提供する前記予測するステップと、
前記フェッチされたブランチ命令を、発行ユニットにより、実行のためのブランチ実行ユニットに発行するステップと、
グループとしての、ブランチ命令キュー中の前記フェッチされたブランチ命令が、第１の所定のブランチ予測信頼性閾値よりも低いことを示すなら、前記フェッチ・ユニットによる命令のフェッチングを、フェッチ・スロットル・コントローラによりスロットリングするステップと、
前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が、第２の所定のブランチ予測信頼性閾値よりも低いことを示すなら、命令の前記フェッチングの前記スロットリングを、前記フェッチ・スロットル・コントローラにより禁止するステップとを含む、
プロセッサを動作させる方法。
【請求項２】
前記スロットリングするステップは、前記ブランチ命令キュー中のグループとしての前記フェッチされたブランチ命令が前記第１の所定のブランチ予測信頼性閾値よりも低いことを累積的に示すかを決定するための第１のテストを、前記フェッチ・スロットル・コントローラにより行うステップを含む、請求項１に記載の方法。
【請求項３】
前記禁止するステップは、前記発行ユニットにより現在発行される前記特定のフェッチされたブランチ命令が、前記第２の所定のブランチ予測信頼性閾値よりも低いことを示すかを決定するための第２のテストを、前記フェッチ・スロットル・コントローラにより行うステップを含む、請求項１に記載の方法。
【請求項４】
前記第１のテストが、前記ブランチ命令キュー中の、実行中のブランチ命令上で前記フェッチ・スロットル・コントローラにより行われる、請求項２に記載の方法。
【請求項５】
前記禁止するステップが、所定の期間の窓の間、命令の前記フェッチングの前記スロットリングを、前記フェッチ・スロットル・コントローラにより停止するステップを含む、請求項１に記載の方法。
【請求項６】
前記所定の期間の前記窓の時間経過後に、前記フェッチ・ユニットによりフェッチ・スロットリングに戻すステップを更に含む、請求項５に記載の方法。
【請求項７】
前記ブランチ命令キュー中のフェッチされたブランチ命令毎の個々のブランチ予測信頼性閾値を、信頼性ストレージ・メモリによりストアするステップを更に含む、請求項１に記載の方法。
【請求項８】
命令をストアする命令ソースと、
フェッチされたブランチ命令を含む命令ストリームを提供するため、前記命令ソースからの命令をフェッチするように前記命令ソースに結合されたフェッチ・ユニットと、
前記フェッチされたブランチ命令の結果を予測するブランチ予測ユニットであって、前記フェッチされたブランチ命令のために個々のブランチ予測を提供する前記ブランチ予測ユニットと、
前記フェッチされたブランチ命令を、実行のためのブランチ実行ユニットに発行するように前記フェッチ・ユニットおよび前記ブランチ実行ユニットに結合された発行ユニットと、
グループとしてのブランチ命令キュー中の前記フェッチされたブランチ命令が、第１の所定のブランチ予測信頼性閾値よりも低いことを示すなら、前記フェッチ・ユニットにより命令のフェッチングをスロットルするように、かつ
前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が、第２の所定のブランチ予測信頼性閾値よりも低いことを示すなら、命令の前記フェッチングのスロットリングをフェッチ・スロットル・コントローラが禁止するように、前記フェッチ・ユニットおよび前記発行ユニットに結合された前記フェッチ・スロットル・コントローラとを含む、プロセッサ。
【請求項９】
グループとしての、前記ブランチ命令キュー中のフェッチされたブランチ命令が、前記第１の所定のブランチ予測信頼性閾値よりも低いことを累積的に示すかを決定する第１のテストを行う、請求項８に記載のプロセッサ。
【請求項１０】
フェッチされた命令の前記スロットリングを投機的に禁止する前に、前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が第２の所定のブランチ予測信頼性閾値よりも低いことを示すかを決定するための第２のテストを行う、請求項９に記載のプロセッサ。
【請求項１１】
前記第１のテストが、前記ブランチ命令キュー中の、実行中のブランチ命令上で前記フェッチ・スロットル・コントローラにより行われる、請求項９に記載のプロセッサ。
【請求項１２】
所定の期間の窓の間、命令の前記フェッチングの前記スロットリングを停止することによって、前記フェッチ・スロットル・コントローラが、命令の前記フェッチングの前記スロットリングを投機的に禁止する、請求項８に記載のプロセッサ。
【請求項１３】
所定の期間の前記窓の時間経過後に、前記フェッチ・スロットル・コントローラが、フェッチ・スロットリングに戻る、請求項１２に記載のプロセッサ。
【請求項１４】
前記フェッチ・スロットル・コントローラが前記ブランチ命令キューを含み、かつ前記フェッチ・スロットル・コントローラが、フェッチされたブランチ命令毎の個々のブランチ命令信頼性値をストアする信頼性ストレージ・メモリを更に含む、請求項８に記載のプロセッサ。
【請求項１５】
メモリ、および前記メモリに結合されたプロセッサを含む情報処理システムにおいて、前記プロセッサが、
命令をストアする命令ソースと、
フェッチされたブランチ命令を含む命令ストリームを提供するため、前記命令ソースから命令をフェッチするように前記命令ソースに結合されたフェッチ・ユニットと、
前記フェッチされたブランチ命令の結果を予測するブランチ予測ユニットであって、前記フェッチされたブランチ命令のために個々のブランチ予測を提供する前記ブランチ予測ユニットと、
前記フェッチされたブランチ命令を、実行のためのブランチ実行ユニットに発行するように前記フェッチ・ユニットおよび前記ブランチ実行ユニットに結合された発行ユニットと、
グループとしてのブランチ命令キュー中の前記フェッチされたブランチ命令が、第１の所定のブランチ予測信頼性閾値よりも低いことを示すなら、前記フェッチ・ユニットにより命令のフェッチングをスロットルするように、かつ
前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が、第２の所定のブランチ予測信頼性閾値よりも低いことを示すなら、命令の前記フェッチングのスロットリングをフェッチ・スロットル・コントローラが禁止するように、前記フェッチ・ユニットおよび前記発行ユニットに結合された前記フェッチ・スロットル・コントローラとを含む、
前記情報処理システム。
【請求項１６】
グループとしての、前記ブランチ命令キュー中のフェッチされたブランチ命令が、前記第１の所定のブランチ予測信頼性閾値よりも低いことを累積的に示すかを決定する第１のテストを行う、請求項１５に記載の情報処理システム。
【請求項１７】
フェッチされた命令の前記スロットリングを投機的に禁止する前に、前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が第２の所定のブランチ予測信頼性閾値よりも低いことを示すかを決定するための第２のテストを行う、請求項１６に記載の情報処理システム。
【請求項１８】
前記第１のテストが、前記ブランチ命令キュー中の、実行中のブランチ命令上で前記フェッチ・スロットル・コントローラにより行われる、請求項１６に記載の情報処理システム。
【請求項１９】
所定の期間の窓の間、命令の前記フェッチングの前記スロットリングを停止することによって、前記フェッチ・スロットル・コントローラが、命令の前記フェッチングの前記スロットリングを投機的に禁止する、請求項１５に記載の情報処理システム。
【請求項２０】
所定の期間の前記窓の時間経過後に、前記フェッチ・スロットル・コントローラが、フェッチ・スロットリングに戻る、請求項１９に記載の情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はパイプライン化されたプロセッサに関し、特に情報処理システムにおいて電力を節約するパイプライン化されたプロセッサに関する。
【背景技術】
【０００２】
今日の情報処理システムはかなりの熱量をよく発生するプロセッサを使用する。サーマル・スロットリング（熱絞り）技法というものが存在し、それはプロセッサの温度を感知する。プロセッサの温度が所定の閾値を超えると、そのシステムはプロセッサのクロック速度を絞りもしくは減じて、それに応じてプロセッサの温度を下げる。この態様で、このシステムが不所望の過熱を防止する。代替例では、このシステムがクロック・ゲーティング、すなわちプロセッサの温度を下げるために或る期間プロセッサの論理回路の少なくとも一部のためのプロセッサのクロックを停止させるという技術を採用してもよい。
【０００３】
電力消費は今日のプロセッサの最大の動作周波数に対する大きな貢献要素である。プロセッサの消費する電力量を感知するのに電力スロットリング（絞り）技法が利用できる。消費された電力が所定の電力閾値レベルを超えると、電力スロットリング・システムがプロセッサの動作周波数を減らし、プロセッサの消費電力を下げる。
【特許文献１】共通の出願人を有する、２００７年４月１０日に米国特許出願された米国特許出願１１／７３３，５８９号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ここで必要なのは、情報処理システムにおいてプロセッサによる電力消費を一層少なくする装置および方法である。
【課題を解決するための手段】
【０００５】
従って、一実施例では、プロセッサを動作させる方法が開示される。前記方法は、フェッチされるブランチ命令を含む命令ストリームを提供するために命令ソースからの命令を、フェッチ・ユニットによりフェッチするステップを含む。前記方法は、各々の(前記)フェッチされたブランチ命令の結果を、ブランチ予測ユニットにより予測するステップであって、前記フェッチされたブランチ命令のための個々のブランチ予測を提供する前記予測するステップを更に含む。前記方法は、前記フェッチされたブランチ命令を、発行ユニットにより、実行のためのブランチ実行ユニットに発行するステップを更に含む。前記方法は更にまた、グループとしてのブランチ命令キューにおける前記フェッチされたブランチ命令（の信頼性）が、第１の所定のブランチ予測信頼性閾値よりも低いことを示すなら、前記フェッチ・ユニットによる命令の前記フェッチングを、フェッチ・スロットル・コントローラにより、絞るすなわちスロットリングするステップを更に含む。前記方法はまた、前記フェッチされたブランチ命令を、発行ユニットにより、実行のためのブランチ実行ユニットに発行するステップを更に含む。前記方法はまた、前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が、第２の所定のブランチ予測信頼閾値よりも低いことを示すなら、命令の前記フェッチングの前記スロットリングを、前記フェッチ・スロットル・コントローラにより投機的に禁止するステップを含む。
【０００６】
他の実施例では、命令をストアする命令ソースを含むプロセッサが開示される。このプロセッサはまた、フェッチされたブランチ命令を含む命令ストリームを提供するために、フェッチされるブランチ命令を含む前記命令ソースに結合され、前記命令ソースからの命令をフェッチするフェッチ・ユニットを含む。前記プロセッサは更に個々のフェッチされたブランチ命令の結果を予測するブランチ予測ユニットを含み、こうしてフェッチされたブランチ命令のための個々のブランチ予測を提供する。前記プロセッサは更に、前記フェッチされたブランチ命令を、実行のためのブランチ実行ユニットに発行するように、前記フェッチ・ユニットおよび前記ブランチ実行ユニットに結合された発行ユニットを含む。前記プロセッサはまた、もしグループとしてブランチ命令キュー中の前記フェッチされたブランチ命令が、第１の所定のブランチ予測信頼性閾値よりも低いことを示すなら、前記フェッチ・ユニットにより命令の前記フェッチングをスロットルするように、前記フェッチ・ユニットおよび前記発行ユニットに結合されたフェッチ・スロットル・コントローラを含む。前記フェッチ・スロットル・コントローラは、前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が、第２の所定のブランチ予測信頼性閾値よりも低いことを示すなら、命令の前記フェッチングの前記スロットリングを禁止する。
【発明を実施するための最良の形態】
【０００７】
今日のプロセッサは、このプロセッサの命令効果を増加させるためにブランチ予測を採用する投機的実行技法をよく採用する。プロセッサにおけるフェッチ・ユニットもしくはフェッチ装置がブランチ命令を含む命令のストリームをフェッチする。プロセッサはブランチ予測に応答してブランチ命令後の命令を投機的に実行する。もっと詳細に言えば、命令デコーダが命令ストリームのブランチ命令を解読した後、ブランチ予測回路はブランチ命令が提供するブランチを取るか取らないか予測を行う。このブランチ予測回路がそのブランチを取るか取らないかをブランチ履歴情報、すなわちそのプロセッサが過去において特定のブランチ命令に遭遇するときのブランチ結果を用いて予測する。もしブランチ予測回路がブランチを正しく予測するなら、そのプロセッサはそのブランチ後命令の結果を保持する。しかし、もしブランチ予測が不正確であれば、プロセッサはそのブランチ後命令の結果を破棄しもしくはフラッシュする。プロセッサはそのブランチ命令の正しい目標アドレスに対応する再指向アドレスで命令を実行開始する。
【０００８】
あるプロセッサによる命令の投機的実行はかなりの量の電力を消費する。投機的な実行アクティビティがプロセッサのパフォーマンスないし性能に実質的なインパクトを生じない態様で消費する電力を最小限にすることが望ましい。電力消費を少なくする一つの方法は、ブランチ予測に関して低い信頼性を累積的に示すとプロセッサが決定するようなブランチ命令のグループにプロセッサが遭遇するとき命令のフェッチング・スロットリングによる。プロセッサは、命令ストリームからのブランチ命令のグループを、ストアされるブランチ命令ごとの機密情報とともに含むブランチ命令キュー（ＢＩＱ）を含む。このＢＩＱは「実行中（in-flight）」の命令ストリームのこれらのブランチ、すなわちそのプロセッサが未だ決着できなかった命令をストアする。このＢＩＱにおける低信頼性のブランチの数が所定の信頼性閾値よりも大きいなら、これらの低いブランチ予測信頼性状態の下で電力消費を下げるようにプロセッサが命令フェッチ・スロットリングを行う。このようなフェッチ・スロットリング電力節約方法は、Bose et al による「Method andApparatus for Conserving Power by Throttling Instruction Fetching When aProcessor Encounters Low Confidence Branches in an Information Handling System（情報処理システムにおいて低信頼性のブランチにプロセッサが遭遇するときスロットリング命令のフェッチングにより電力を節約する方法および装置）」と題する特許文献１に開示されている。電力を節約する間、この方法論はプロセッサのパフォーマンスに幾つかの負のインパクトを生じる。そのような電力節約をプロセッサのパフォーマンスに、これまでより少ないマイナスのインパクトを与えるだけで達成することが望ましい。
【０００９】
図１は、プロセッサが消費する電力を減らすため信頼性の低いブランチのグループ上でフェッチ・スロットリングを採用するプロセッサ１００の一実施例を示す。プロセッサ１００は、プロセッサ１００が実行する命令ストリームを含むローカル・キャッシュ・メモリなどのメモリ１０５を含む。実際の実施では、メモリ１０５は、プロセッサが実行する命令ストリームもしくはプログラムを提供する大型の外部システム・メモリ（図示せず）に取付けられる。フェッチ・ユニット１１０は、実行のためにメモリ１０５から命令をフェッチするためにメモリ１０５に結合される。フェッチ・ユニット１１０は命令アドレス・ユニット１１０Ａを含む。デコーダ回路１１５はフェッチ・ユニット１１０から受取る、そのフェッチされた命令を解読するためにフェッチ・ユニット１１０に結合される。そのフェッチされた命令ストリームはＯＰコードおよびオペランドを備えた命令を含む。その命令ストリームのうちの幾つかの命令はブランチ命令である。シーケンサ回路とも称する発行ユニット１１７はレジスタ・リネーミング・ステージ１１６を介してデコーダ１１５に結合される。発行ユニット１１７は、実行のため特定の解読された命令を受取るべき適切な実行ユニットを決定する。発行ユニット１１７は、以下の実行ユニット、すなわち固定小数点実行ユニット（ＦＸＵ）１２０、浮動小数点実行ユニット（ＦＰＵ）１２５、ロード・ストア・ユニット（ＬＳＵ）１３０およびブランチ実行ユニット（ＢＲＵ）１３５に結合される。ＦＸＵ１２０はレジスタ・ファイル１２０Ａを含む。ＦＰＵ１２５はレジスタ・ファイル１２５Ａを含む。
【００１０】
それらの実行ユニットは、解読されたブランチ命令後の命令ストリーム中の命令を投機的に実行する。 ブランチ予測ユニット１４０は、フェッチ・ユニット１１０の命令アドレス・ユニット１１０ＡとＢＲＵ１３５との間に結合する。ブランチ予測ユニット１４０は、以前に実行されたブランチ命令の履歴の結果を追跡するブランチ履歴テーブル（ＢＨＴ）１４２を含む。ブランチ・ユニット（ＢＲＵ）１３５と協働するブランチ予測ユニット１４０は、このブランチ実行履歴情報を用い、ＢＲＵ１３５が現在受取っているブランチ命令のためのブランチ予測を行う。完了ユニット１４５は、それらの実行ユニット、すなわちＦＸＵ１２０、ＦＰＵ１２５、ＬＳＵ１３０およびＢＲＵ１３５の夫々に結合する。もっと具体的には、完了ユニット１４５は、ＦＸＵレジスタ・ファイル（ＲＦ）１２０ＡおよびＦＰＵレジスタ・ファイル（ＲＦ）１２５Ａに結合する。完了ユニット１４５は、投機的に実行される命令を完了させるべきか否かを判定する。もしブランチ予測ユニット１４０がブランチを正しく予測するなら、そのブランチに続く命令は完了すべきである。たとえば、もし ブランチ予測ユニット１４０がブランチを正しく予測するなら、そのブランチに続く固定小数点もしくは整数の命令は 完了すべきである。この場合、完了ユニット１４５はそのブランチの固定小数点の結果を固定小数点レジスタ・ファイル１２０Ａ に書き戻すのを制御する。もし正しく予測されたブランチに続く命令が浮動小数点命令であれば、完了ユニット１４５は浮動小数点命令の結果を浮動小数点レジスタ・ファイル１２５Ａに書き戻すのを制御する。命令が完了すると、それらはもはや投機的ではない。ブランチ実行ユニット（ＢＲＵ）１３５は、特定のブランチ命令が取られるか取られないかを決めるように完了ユニット１４５およびブランチ予測ユニット１４０と協働する。
【００１１】
詳細には、ブランチ履歴テーブル（ＢＨＴ）１４２がこれまでに実行されたブランチ命令の履歴を含む。ＢＨＴ１４２中の各エントリが方向ビットおよび信頼性ビットを含む。特定のブランチ命令に対し、ＢＨＴ１４２中のそのエントリは「採用したブランチ」もしくは「採用しなかったブランチ」を示す方向ビットを含む。一実施例では、方向ビットはそのブランチが最近の回に採用されなかったなら０に等しいか、あるいはそのブランチが最近の回に採用されたなら１に等しくしてもよい。一実施例では、特定のブランチ命令に対し、そのブランチ命令にプロセッサが遭遇する次の回にそのブランチをプロセッサが採用すべきであるか否かを方向ビットが示す。方向ビットはプロセッサがブランチ命令に遭遇した以前の回のそのブランチの方向を必ずしも表さない。しかし、大抵の場合は、そのプロセッサがそのブランチ命令に遭遇した最近の回のそのブランチの方向を示す。特定のブランチ命令に対し、予測が採用されたブランチもしくは採用されなかったブランチにおいて信頼性が低ければ信頼性ビットは１に等しくてよい。予測が採用されたブランチもしくは採用されなかったブランチにおいて信頼性が高ければ信頼性ビットは０に等しくてよい。特定のブランチ予測が低い信頼性を示す一つの理由は、特定のブランチ命令をプロセッサが実行した最近の２回、そのプロセッサが一つの場合はそのブランチを採用し、他の場合はそのブランチを採用しないことである。高い信頼性を表す特定のブランチ予測に対する理由は、その特定のブランチ命令をプロセッサが実行した最近の２回、そのプロセッサが２回ともそのブランチを採用したか２回とも採用しなかったことである。
【００１２】
プロセッサ１００は、ブランチ命令キュー（ＢＩＱ）２０５を備えたスロットル制御回路すなわちフェッチ・スロットル・コントローラ２００を含む。この特定の実施例では、ＢＩＱ２０５が１６個のエントリを含む。すなわちその命令ストリーム中、フェッチ・ユニットがフェッチしたがまだ完了して（成し遂げて）いない１６個までのブランチ命令を含む。ＢＩＱ２０５は、特定のアプリケーションによっては１６個よりも多いかもしくは少ないエントリを含んでもよい。フェッチ・スロットル・コントローラ２００はまたＢＩＱ２０５と関連する信頼性キュー（ＣＱ）２１０もしくは信頼性トラッキング・キューをも含む。ＣＱ２１０は信頼性情報をストアする信頼性情報ストレージ・メモリとして働く。ＢＩＱ２０５のブランチ命令エントリごとに、ＣＱ２１０は個々の信頼性ビットを含む。この特定の実施例では、ＣＱ２１０が１６個のエントリ、すなわち低信頼性ビットを含む。ＢＩＱ２０５における特定のブランチ命令エントリに対し、もしＣＱ２１０中の夫々のＣＱ信頼性ビット・エントリ論理１を表すなら、これはこの特定のブランチ命令のためのブランチ予測の信頼性が低いことを表す。しかし、ＢＩＱ２０５中の特定のブランチ命令エントリに対し、もしＣＱ２１０中の個々のＣＱ信頼性ビット・エントリが論理０を表すなら、このことはこの特定のブランチ命令のためのブランチ予測の信頼性が高いことを表す。フェッチ・スロットル・コントローラ２００はＣＱ２１０中の信頼性ビットの総数において助けとなるようブランチ履歴テーブル（ＢＨＴ）１４２にアクセスする。たとえば、一実施例では、ＢＩＱ２０５がストアする特定のブランチ命令に対し、対応する個々の信頼性ビットをＣＱ２１０に読み込むため、もしブランチ予測ユニット１４０およびＢＲＵ１３５が、そのブランチ命令をそのプロセッサが実行した最近の回のそのブランチ命令を予測ミスしたなら、フェッチ・スロットル・コントローラ２００はＣＱエントリ中に１という信頼性ビットをストアする。しかし、もしブランチ予測ユニット１４０およびＢＲＵ１３５が、そのプロセッサが実行した最近の回のブランチ命令を正しく予測したなら、フェッチ・スロットル・コントローラ２００は０という信頼性ビットをＣＱ中のそのブランチのための個々のエントリに読み込む。一実施例では、ＢＨＴ１４２が個々のブランチ命令の信頼性ビットもしくは信頼性値を保持もしくはストアし、そしてＢＨＴ１４２はブランチ命令が実行するときにそれ自体を更新する。フェッチ・ユニット１１０が特定のブランチ命令をフェッチするとき、ＣＱ２１０はＢＨＴ１４２にアクセスし、その特定のブランチ命令に対応する信頼性ビットを読み出し、ストアする。
【００１３】
代替方法は、１個もしくはそれ以上のビットのブランチ信頼性情報を引き出してもよい。例えば、一つのそのような方法は、ブランチ命令に存在してもよい静的ブランチ予測のヒントから信頼性情報を引き出してもよい。この方法は、ブランチ命令が含む信頼性ビットから信頼性情報を直接にセットするように、これらの静的ブランチ予測のヒントを使用してもよい。代わりに、この方法は、論理式によって信頼性ビットを引き出すようにこれらの静的ブランチ予測のヒントを使用してもよい。例えば、このような方法は、ブランチを取るか取らないかを示す静的なブランチのヒントがブランチ予測ユニット１４０の予測に合致するかを決定してもよい。
【００１４】
代替方法は、ブランチ予測信頼性を推察させるためにブランチの型を使用してもよい。例えば、１個もしくはそれ以上の無条件ブランチ、サブルーティング・ブランチ（Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（商標）におけるｂｌｒ）からの戻り、および負のオフセットと条件的に相関するブランチが、ループを閉じるブランチを典型的には示す。このループを閉じるブランチは、ブランチが高い信頼性を示すことを推察させるのに使用できる。これに比べて、１個もしくはそれ以上の汎用の間接的なブランチ（例えば、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（商標）におけるレジスタをカウントするブランチ)および条件付の相対的ブランチ・フォワードは、ブランチが低い信頼性を示すことを推察させるのに使用可能な条件付のステートメントの評価を典型的には表す。更に他の方法は複数のブランチ予測コンポーネントが一致する（ある「一致条件」）とき、高いブランチ信頼性を推察させるようなトーナメント予測ユニットを採用してもよい。このトーナメント・セレクタ、複数のコンポーネントが一致しない（「不一致条件」）とき、あるいはトーナメント・セレクタが特定のトーナメント予測コンポーネントを選択する上で弱い信頼性しか有しないとき低い信頼性を推察させてもよい。
【００１５】
ブランチ命令キュー（ＢＩＱ）２０５は、図１の実施例の循環キューである。ＢＩＱ２０５は、ヘッド・ポインタ２１５として概念的に示されるヘッド・ポインタおよびテール・ポインタ２２０として概念的に示されるテール・ポインタを含む。ヘッド・ポインタ２１５はＢＩＱ２０５中の最新のブランチ命令をポイントし、テール・ポインタ２２０はＢＩＱ２０５中の最古のブランチ命令をポイントする。ＢＩＱ２０５がフェッチ・ユニット１１０からのブランチ命令を受取るにつれ、その時点でヘッド・ポインタ２１５がＢＩＱ２０５に入るための最新のブランチ命令をポイントするように、またテール・ポインタ２２０がＢＩＱ２０５における最古のブランチ命令を常にポイントするように、ヘッド・ポインタおよびテール・ポインタが一つのブランチ命令エントリだけ移動する。
【００１６】
フェッチ・スロットル・コントローラ２００はまた、ヘッド・ポインタ２１５、テール・ポインタ２２０および信頼性キュー（ＣＱ）２１０に結合する制御論理２２５を含む。制御論理２２５はこうして現在のヘッド・ポインタ、現在のテール・ポインタおよびＣＱ２１０のすべての信頼性ビットを受取る。ヘッド・ポインタは他のブランチ命令がＢＩＱ２０５に入る毎に変化する。テール・ポインタはブランチ命令が完了する毎に変化する。信頼性キュー（ＣＱ）２１０はＢＩＱ２０５のブランチ命令エントリごとに個々の信頼性ビットをストアする。換言すると、ＢＩＱ２０５の各ブランチ命令エントリはＣＱ２１０中に関連付けられて対応する信頼性ビットを有する。制御論理２２５は信頼性ビットの合計値を得るためにＣＱ２１０の信頼性ビットのすべてを合計ないし加算する。この特定の実施例では、ＣＱ２１０が低信頼性ビットをストアするので、制御論理２２５は低い信頼性ビット合計値を決定する。制御論理２２５は、現在の低信頼性ビット合計値が所定の閾値の低信頼性レベルよりも大きいか決定するための第１のテストを行う。もし現在の低信頼性ビット合計値が所定の閾値の低信頼性レベルよりも実際に大きい、すなわち信頼性レベルの欠如を示すと制御論理２２５が決定するならば、フェッチ・スロットル・コントローラ２００はプロセッサ電力消費を減じるためのフェッチ・スロットリングを開始するようにフェッチ・ユニット１１０に命令する。正確なブランチ予測が得られそうもない命令の投機的な実行中にこの態様でフェッチ・スロットリングすることによって、プロセッサ１００は電力消費を減じることができる。しかし、もし現在の低信頼性ビット合計が所定の閾値の信頼性レベルよりも大きくないなら、ブランチ予測が正確である可能性もあり、制御論理２２５はスロットリングをせずに全速での命令のフェッチングおよび投機的な実行を許容する。こうして第１のテストは、ＢＩＱ２０５におけるブランチ命令のグループが一グループの命令として低い信頼性を累積的に示すかを決定する。代替的なアプローチは特定のブランチ命令のために、単一のビットよりももっと多いビットを用いて複数のブランチ予測の信頼性レベルを表す。例えば、「非常に高い」、「高い」、「低い」、「非常に低い」といった信頼性レベルである。これらの複数の信頼性値が複数のブランチを、複数のブランチに関連付けられた複数レベルの信頼性を要約する単一の信頼性値に多様な方法で組み合わせ可能であることを当業者は更に理解できよう。
【００１７】
発行ユニット１１７は、禁止機能を備えたフェッチ・スロットル状態マシーン（ＦＴＳＭＷＩＦ）２３０に結合して、そのＦＴＳＭＷＩＦ２３０に命令発行情報を提供する。この態様でＦＴＳＭＷＩＦ２３０はＦＴＳＭＷＩＦ２３０中の各々の特定のブランチ命令が実行ユニットにいつ発行するかを知る。フェッチ・スロットル・コントローラ２００はプロセッサの有効性および／もしくは性能を増すためにこの発行情報を使用する。前述のとおり、フェッチ・スロットル・コントローラ２００はＢＩＱ２０５のブランチ命令上で一グループとして第１のテストを行う。この第１のテストはＢＩＱ２０５中のそのグループのブランチ予測が、ブランチ予測に関して所定量よりも低い信頼性を累積的に表すかを効果的に決定する。別の言い方をすれば、それらのブランチ予測に関して所定の信頼性閾値よりもより多くの信頼性の欠如をそのグループの複数の命令が一緒になって表すかをその第１のテストが決定する。
【００１８】
フェッチ・スロットル・コントローラ２００はまたＢＩＱ２０５中の各々の個別のブランチ命令上で、発行ユニット１１７がそのブランチ命令を発行するとき第２のテストを行う。この第２のテストは、各々の現在発行されるブランチ命令がその個々のブランチ予測に関する信頼性の所定量よりも低いことを表すかを決定する。ＦＴＳＭＷＩＦ２３０はこの第２のテストを個別のブランチ命令上で行う。これはフェッチ・スロットル・コントローラ２００がＢＩＱ２０５中の有効なブランチ命令のグループ上で行う第１のテストと対照的である。もし所定量のブランチ予測信頼性よりも低い信頼性をＢＩＱ２０５中の特定の現在発行されるブランチ命令が表すとＦＴＳＭＷＩＦ２３０が決定するなら、ブランチの再指向が行われる可能性があり、それに応答してＦＴＳＭＷＩＦ２３０がフェッチ・スロットリングを禁止する。再指向の可能性が高いとき、全速でのフェッチングを行うことが望ましい。こうして、前述の状態下でフェッチ・スロットリングを禁止することもしくは全速でのフェッチングを再度イネーブルすることはプロセッサの効率を高める。しかし、もしＢＩＱ２０５中の特定のブランチ命令が少なくとも第１の所定量のブランチ予測信頼性を表わし、再指向が生じそうもないことをＦＴＳＭＷＩＦ２３０が決定するなら、ＦＴＳＭＷＩＦ２３０フェッチ・スロットリングを禁止しない。換言すると、一グループとしてＢＩＱ２０５中のブランチ命令が低信頼性を累積的に表すときは、第２の所定量のブランチ予測信頼性よりも低い信頼性をその特定の現在発行されているブランチ命令が表さない限り、フェッチ・スロットリングが続行する。
【００１９】
高いファンアウト（論理回路に接続できる出力数）およびセットアップ時間により、ここに開示されたパイプライン・プロセッサは命令フェッチをスロットルし、かつ実際のフェッチ・サイクルの前の幾つかのサイクルで、メモリ構造およびフェッチ論理をクロック・ゲーティングする決定を必要とするかもしれない。こうして、一実施例では、フェッチ論理がクロック・ゲーティングされないように確保するのは、正しい新しいフェッチ・アドレスへの再指向を特定のブランチが実際に生じさせるときのフェッチ・サイクルの利用可能性を確保するために、そのようなブランチが再指向しがちであるという信頼性を含む予測可能な技法に基づく。
【００２０】
開示されたプロセッサの異なる実施例が、フェッチ・スロットリングを禁止するための異なるセッティングを採用してもよい。一実施例は、現在のブランチが正確に１サイクルの間、フェッチ・スロットリングを禁止する。その１サイクルは、現在のブランチが、そのスロットリングがディスエーブルされている代わりに、再指向に対応する第１のフェッチを生じさせるかもしれないときのサイクルに対応する。この開示されたプロセッサの他の実施例は、複数のサイクルの間、フェッチ・スロットリングを禁止する。この複数のサイクルは、第１のフェッチがその禁止するブランチに対応する再指向に応答する第１の再指向サイクルと、第１のフェッチ・サイクルに続くフェッチに対応する次のフェッチ・サイクルに対応する第２のサイクルとを含む。
【００２１】
開示されたプロセッサの更に別の実施例では、デザイナーがデザイン時に複数の信頼性閾値をセットしてもよい。代わりに、ハイパーバイザのようなソフトウエア、オペレーティング・システムもしくはアプリケーションが、プロセッサが動作する間にそのような信頼性閾値をセットしてもよい。第２の閾値のためのひとつの可能な選択は、そのプロセッサがブランチ命令の実行に応答して行う可能な再指向に対応する任意のフェッチ・サイクルの間、フェッチ・スロットリングの禁止を確保する閾値セッティングである。
【００２２】
図２は、図１のフェッチ・スロットル・コントローラ２００の詳細なブロック図である。図２はブランチ命令キュー（ＢＩＱ）２０５、信頼性キュー（ＣＱ）２１０、制御論理２２５および禁止機能付きフェッチ・スロットル状態マシーン（ＦＴＳＭＷＩＦ）２３０を示す。これらは図１に関連してすでに説明したものである。ＢＩＱ２０５は、図２に示すように、１６個のブランチ命令エントリＢＩ−０、ＢＩ−１、…ＢＩ−１５を含む。ＣＱ２１０は０−１５と名づけた１６個の信頼性ビット・エントリを含む。図２ではヘッド・ポインタ２１５およびテール・ポインタ２２０がブランチ命令ＢＩ−０およびＢＩ−２をポイントするが、ヘッド・ポインタ２１５およびテール・ポインタ２２０は新しいブランチ命令がそのフェッチされた命令ストリームからＢＩＱ２０５の中に到来するにつれ移動する。そのＢＩＱ２０５がストアする特定のブランチ命令はそのプロセッサがフェッチし、実行し、そして命令ストリーム中のブランチ命令を完遂する際、一定の束となっている。ＢＩＱ２０５はそのフェッチされた命令ストリームからの１６個の最近フェッチされたブランチ命令をストアする。こうして、或る時点で、ＢＩＱ２０５中のその個々のブランチ命令に関連付けられた信頼性ビットが、一つのグループとしてこれらのブランチ命令のための予測の正しさにおける低い信頼性をフェッチ・スロットル・コントローラ２００が有することを示してもよい。この場合、フェッチ・スロットル・コントローラ２００が電力消費を減らすためにフェッチ・スロットリングを開始する。しかし、他の時点で、ＢＩＱ２０５はもう一つのグループのブランチ命令を読み込む。.この場合に、ＢＩＱ２０５の夫々のブランチ命令に関連付けられた信頼性ビットが、グループとしてフェッチ・スロットル・コントローラ２００がこれらのブランチ命令のための予測の正しさにおいて高い信頼性を有することを示してもよい。こうして、フェッチ・スロットル・コントローラ２００は、フェッチ・スロットリングが電力消費を減らすためにフェッチ・スロットリングを開始しないが、その代わりにフェッチ・ユニット１１０に全速でフェッチするように命令する。しかし、もし特定の現在発行されるブランチ命令が、ブランチの再指向が起こりがちな所定の低信頼性閾値レベルよりも低いブランチ予測信頼性を示すなら、ＦＴＳＭＷＩＦ２３０はフェッチ・スロットリングを禁止し、全速のプロセッサ速度でフェッチングが続行するのを許容する。
【００２３】
制御論理２２５は１６個のライン入力２３５Ａおよび１６個のライン入力２３５Ｂを有するアンド回路２３５を含む。アンド回路入力２３５Ａは、アンド回路２３５がＣＱ２１０から１６個の信頼性ビットを受取るようにＣＱ２１０中の１６個のスロットもしくはストレージ・ロケーションに結合する。ヘッド・ポインタ２１５およびテール・ポインタ２２０は有効ベクトル発生回路２４０に結合する。有効ベクトル発生回路２４０はＢＩＱ２０５の異なるエントリにそのベクトルの各ビットが対応する１６ビット・ベクトルを発生するようにヘッド・ポインタおよびテール・ポインタの情報を使用する。１６ビット・ベクトルの各ビットはＢＩＱ２０５中の対応するブランチ命令エントリが有効か示す。もし１６ビット・ベクトルの特定のビットが論理値の１を示すなら、ＢＩＱ２０５のその対応するブランチ命令エントリが有効であり、そのブランチ命令はまだ処理中である。しかし、もし１６ビット・ベクトルの特定のビットが論理値の０を示すなら、ＢＩＱ２０５のその対応するブランチ命令エントリは有効ではない。有効である、ＢＩＱ２０５のエントリはテール・ポインタ２２０でスタートし、ヘッド・ポインタ２１５まで広がる。例えば、もしヘッド・ポインタ２１５がＢＩ−３にあり、かつテール・ポインタ２２０がＢＩ−７にあるなら、１６ビットの有効ベクトルは０００１１１１１００００００００である。このことはＢＩ−３、ＢＩ−４、ＢＩ−５、ＢＩ−６およびＢＩ−７が有効であり、一方で残りのエントリが無効であることを意味する。もしヘッド・ポインタ２１５がテール・ポインタ２２０の上にあるなら、その有効なベクトルは巻き付いて、不連続になる。例えば、もしヘッド・ポインタ２１５がエントリＢＩ−１４にあり、かつテール・ポインタ２２０がエントリＢＩ−２にあるなら、その有効なベクトルは１１１０００００００００００１１である。このことはエントリＢＩ−０、ＢＩ−１、ＢＩ−２、ＢＩ−１４およびＢＩ−１５が有効であり、一方で残りのエントリが無効である。図２では、有効ベクトル・ボックス２４５が有効ベクトル２４５の１６ビットを表す。
【００２４】
こうして、アンド回路入力２３５Ａで、アンド回路２３５はＣＱ２１０から１６個の低信頼性ビットを受取る一方、ライン入力２３５Ｂで、アンド回路２３５は１６ビットの有効ベクトルを受取る。アンド回路２３５がその１６個の低信頼性ビットを１６個の個々の有効ベクトル・ビットと論理的にアンドすると、その有効ベクトルはアンド回路２３５の出力での１６ビットの結果から、無効な低信頼性ビットを効果的に除去するマスクとして働く。こうして、アンド回路（アンド・ゲート）２３５の出力での１６ビットの結果が、この特定の実施例では有効な低信頼性ビットのみを含む。換言すると、アンド回路２３５の出力での１６個の低信頼性ビットはＢＩＱ２０５における個々の有効なブランチ命令のための低信頼性ビットに対応する。
【００２５】
加算器２５０がアンド回路２３５の出力に結合する。加算器２５０はそれがアンド回路２３５から受取ったその有効な低信頼性ビットを合計して、低信頼性ブランチ合計、すなわち投入カウント（ＰＯＰＣＯＵＮＴ）を加算器２５０の出力で提供する。従ってＰＯＰＣＯＵＮＴは特定の時点でのＢＩＱ２０５における有効な低信頼性ブランチの総数を表す。比較器２５５は加算器２５０に結合する一入力を含み、そこからの低信頼性ブランチ合計、ＰＯＰＣＯＵＮＴを受取る。比較器２５５の残りの入力は、比較器２５５にプログラマブル信頼性閾値を提供するプログラマブル閾値回路２６０に結合する。デザイナーもしくは他のエンティティはこの信頼性閾値を選択する。その結果それは低信頼性レベルを表す。その低信頼性レベルは、もし超えれば、ＢＩＱ２０５中のブランチのための予測における信頼性がフェッチ・スロットリングおよび電力保護を始めなければならないほどに低いレベルである。
【００２６】
比較器２５５の出力は、禁止機能付きフェッチ・スロットル状態マシーン（ＦＴＳＭＷＩＦ）２３０に結合する。もし低信頼性ブランチの総数、ＰＯＰＣＯＵＮＴが所定のプログラマブル閾値を超えるなら、比較器２５５が論理値１をＦＴＳＭＷＩＦ２３０に出力する。これに応答して、ＦＴＳＭＷＩＦ２３０は「スロットル」信号をフェッチ・ユニットの入力１１０Ｂに送り、フェッチ・ユニット１１０に、命令フェッチングの速度を遅くするように指令する。命令フェッチングの速度を遅くするか、もしくはスロットリングするのは、プロセッサ１００が採用されそうもないブランチ、すなわち、低信頼性ブランチを実行する際に消費する電力量を減じる。しかし、もし低信頼性ブランチ、ＰＯＰＣＯＵＮＴが所定のプログラマブル閾値を超えないなら、比較器２５５はＦＴＳＭＷＩＦ２３０に論理値０を出力する。それに応答して、ＦＴＳＭＷＩＦ２３０はスロットル信号をフェッチ・ユニットの入力１１０Ｂに送り、フェッチ・ユニット１１０に命令を全速でフェッチするように命令する。その場合、プロセッサはＢＩＱ２０５のブランチ命令のための予測において高信頼性を示す。こうして、ブランチ命令の投機的実行が全速で進行し、フェッチ・ユニットのスロットリングも電力節約も生じない。しかし、もし任意の時刻にフェッチＦＴＳＭＷＩＦ２３０がスロットリング・モードで動作しているなら、特定の現在発行されるブランチ命令が所定の低信頼性閾値よりも低いブランチ予測信頼性を表し、その結果ブランチ再指向が起こりがちとすれば、ＦＴＳＭＷＩＦ２３０はフェッチ・スロットリングを禁止し、プロセッサ速度を全速にし続けるようフェッチングするのを許容する。
【００２７】
図３は、プロセッサ３００として開示されたプロセッサの単純化した表現を示す。プロセッサ３００はプロセッサ１００中のものに似た多くのエレメントを含む。前述のとおり、その開示された電力節約方法は低信頼性ブランチのグループの処理中、フェッチ・スロットリングにより電力を維持する。フェッチ・スロットリング技法一つで電力を維持するが、それは増加したフェッチ待ち時間の観点からはプロセッサの性能に無視できないほどのマイナスのインパクトを与える。前述のとおり、フェッチ・スロットリングの際の電力節約をなおも達成しながら、プロセッサの性能へのこのマイナスのインパクトを減らすことが望ましい。
【００２８】
ある条件下では、電力の維持に過度のインパクトを与えずにプロセッサの性能を上げるようにフェッチ・スロットリングを禁止することができる。たとえば、もしフェッチされた命令ストリームからの特定の現在発行されるブランチ命令が低信頼性の予測を示すなら、プロセッサ３００は以前にオンにしたフェッチ・スロットリングを切ってもよい。何故ならばＢＩＱ２０５におけるブランチ命令のグループが低信頼性に予測を示すからである。
【００２９】
一実施例では、プロセッサ３００が、複数のパイプライン・ステージを含む同時マルチ・スレッディング（ＳＭＴ）プロセッサである。プロセッサ３００は、キャッシュ・メモリないしＩキャッシュ（ＩＣＡＳＣＨ）３１０を介して外部システムメモリ（図示せず）に結合するフェッチ・ユニット３０５を含む。 Ｉキャッシュ３１０は、Ｉキャッシュ３１０からフェッチされた命令をデコードするデコーダ３１５に結合する。デコーダ３１５はレジスタ・リネーミング回路３２０を介して発行ステージないし発行ユニット３２５に結合する。レジスタ・リネーミング回路３２０はフェッチされた命令の実行を促進するために追加のレジスタを提供する。発行ユニット３２５は、解読された命令を実行するための適切な機能ユニットに送る。プロセッサ３００は、以下の機能ユニットを含む。すなわち整数もしくは固定小数点実行ユニット（ＦＸＵ）３３０、浮動小数点実行ユニット（ＦＰＵ）３３５、ロード／ストア実行ユニット（ＬＳＵ）３４０、ベクトル・メディア実行ユニット（ＶＭＸ）３４５、およびブランチ実行ユニット（ＢＲＵ）３５０を含む。ＦＸＵ３３０およびＦＰＵ３３５は、レジスタ・ファイル３３０Ａおよび３３５Ａを含み、夫々計算結果をストアする。
【００３０】
ブランチ命令実行ユニット（ＢＲＵ）３５０は発行ユニット３２５に結合し、そこから受取るブランチ命令を実行する。ＢＲＵ３５０は、ブランチ予測ユニット３５５およびフェッチ・ユニット３０５の両方に結合する。実行ユニットであるＦＸＵ３３０、ＬＳＵ３４０、ＦＰＵ３３５、ＶＭＸ３４５およびＢＲＵ３５０は、デコードされたブランチ命令後の命令ストリーム中の命令を投機的に実行する。ブランチ予測ユニット３５５は、ブランチ履歴テーブル（ＢＨＴ）３５７を含み、フェッチ・ユニット３０５に結合する。ＢＨＴ３５７は、以前に実行されたブランチ命令の履歴を追跡する。ブランチ・ユニット（ＢＲＵ）５５０はこのブランチ実行の履歴情報を、それが現在受取っているブランチ命令のためのブランチ予測をするために使用する。
【００３１】
完了ユニット３６５は、ＦＸＵ３３０、ＦＰＵ３３５、ＬＳＵ３４０、ＶＭＸ３４５およびＢＲＵ３５０といった各実行ユニットに結合する。もっと具体的には、完了ユニット３６５はＦＸＵレジスタ・ファイル３３０Ａ、ＦＰＵレジスタ・ファイル３３５Ａに結合する。完了ユニット３６５は投機的に実行される命令が完了すべきか否かを決定する。もしブランチ予測ユニット３５５がブランチを正しく予測するなら、そのブランチに続く命令が完了すべきである。例えば、ブランチ予測ユニット３５５がブランチを正しく予測するなら、そのブランチに続く固定小数点もしくは整数の命令が完了すべきである。もし正しく予測されるブランチに続く命令が固定小数点命令であれば、完了ユニット３６５がそのブランチの固定小数点結果を固定小数点レジスタ・ファイル３３０Ａに書き戻すのを制御する。もし正しく予測されたブランチに続く命令が浮動小数点命令であれば、完了ユニット３６５は浮動小数点命令の結果を浮動小数点レジスタ・ファイル３３５Ａに書き戻すのを制御する。命令が完了するとき、それらは最早投機的ではない。ＢＲＵ３５０は、特定のブランチ命令が採用されるか採用されないかを決着するために完了ユニット３６５およびＢＨＴ３６７と協働して動作する。
【００３２】
図３のプロセッサ３００は、図１のフェッチ・スロットル・コントローラ２００に似た態様で一実施例では動作するフェッチ・スロットル・コントローラ３７０を含む。具体的には、一実施例で、フェッチ・スロットル・コントローラ３７０は、ブランチ命令キュー（ＢＩＱ）３７２および信頼性キュー（ＣＱ）３７４を含む。フェッチ・スロットル・コントローラ３７０はまた、フェッチ・ユニット３０５による命令フェッチングのスロットリングを制御するＦＴＳＭＷＩＦ３７６を含む。ブランチ命令キュー（ＢＩＱ）３７２はそれがフェッチ・ユニット３０５から受取るブランチ命令をストアする。ＢＩＱ３７２中のブランチ命令毎に、信頼性キュー３７４はブランチ予測ユニット３５５が提供するブランチの予測の信頼性のレベルを示す個別の信頼性情報をストアする。ＢＩＱ３７２はブランチ命令の有効なのと無効なのとの両方を含んでもよい。無効なブランチ命令は、以前に決着されたがまだＢＩＱ３７２中に残っている投機的に実行されるブランチ命令である。ＢＩＱ３７２中の残りの有効なブランチ命令はまだ「実行中（in flight）」のブランチ命令であって、いわば完了ユニット３６５がまだ決着しなかった投機的に実行されるブランチ命令である。
【００３３】
フェッチ・スロットル・コントローラ３７０は、電力を維持するためにＩキャッシュ３１０からの命令のフェッチングをスロットルするようフェッチ・ユニット３０５に或る所定の条件の下で命令するＦＴＳＭＷＩＦ３７６を含む。もし相互に累積的に取られたＢＩＱ３７２中の有効なブランチ命令が、夫々のブランチ予測における第１の所定量よりも低い信頼性を表すなら、ＦＴＳＭＷＩＦ３７６は電力を節約ようにフェッチ・スロットリングの開始を命令してもよい。しかし、一旦そのようなスロットリングが開始すると、ＢＩＱ３７２中の特定の現在発行されるブランチ命令が第２の所定の量よりも低い信頼性を表すなら、フェッチ・コントローラ３７５は所定の比較的短い時間窓の間、フェッチ・スロットリングを禁止する。
【００３４】
一実施例では、ＦＴＳＭＷＩＦ ３７６が前述の信頼性決定を行うための第１および第２のテストを行う。具体的には、相互に累積的に取られたＢＩＱ３７２中の有効なブランチ命令が第１の所定量の信頼性閾値よりも低い信頼性を表すかを決定するための第１のテストをＦＴＳＭＷＩＦ３７６が行う。もし相互に累積的に取られたＢＩＱ３７２中の有効なブランチ命令が第１の所定量の信頼性閾値よりも低い信頼性を示すなら、ＦＴＳＭＷＩＦ３７６はフェッチ・スロットリングの開始を命令してもよい。ＦＴＳＭＷＩＦ３７６がフェッチ・スロットリングを開始した後、ＦＴＳＭＷＩＦ３７６はＢＩＱ３７２中の特定の現在発行されるブランチ命令上で第２のテストを行う。これはその特定の現在発行されるブランチ命令が第２の所定の量の信頼性値よりも低い信頼性を表すか決定するテストである。もしその特定の現在発行されるブランチ命令が第２の所定量の信頼性値よりも低い信頼性なら、ブランチ再指向という起こりそうなイベントにおける性能を増進するためにフェッチ・スロットリングの禁止をＦＴＳＭＷＩＦ３７６が命令してもよい。
【００３５】
一実施例では、デザイナーは、第２のテストが採用するブランチ命令中の信頼性を、ブランチ命令予測時点で引き出される信頼性値であって、そのブランチのために信頼性キュー３７４がストアする値に対応するものを基にする。他の実施例では、ＦＴＳＭＷＩＦ３７６がこの信頼性情報を特定のブランチの性質など他の命令特性から得る。例えば、間接ブランチもしくはＰＣ相対条件フォワードブランチ（PC-relative conditionforeward branches）は低い信頼性を推察させるのに使用可能である。 これに比べて、無条件ブランチ命令、サブルーチンに経路付けするブランチ命令（例えば、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（商標）におけるリンク・レジスタへのブランチ（ｂｌｒ）命令）からの戻り、およびバックワードＰＣ相対条件付きブランチ命令は、高い信頼性を推察させるのに使用可能である。
【００３６】
一実施例では、プロセッサ３００がＢＩＱ３７２もしくは信頼性キュー３７４の少なくとも一つにおける第２の信頼性テストの間、その信頼性情報をストアしてもよい。他の実施例では、この情報を、プロセッサ３００が、ＢＩＱ３７２もしくは信頼性キュー３７４からの読出し動作を行うという余分の待ち時間を少なくするためにＢＩＱ３７２中のブランチとともにストアしてもよい。
【００３７】
開示されたプロセッサ３００の別異の実施例では、プロセッサがフェッチ・スロットリングを禁止する期間中の所定の時間窓のために異なる時間値もしくは設定を用いてもよい。一実施例では、プロセッサ３００は正確に１サイクルの間、フェッチ・スロットリングを禁止する。フェッチ・スロットリングをそのプロセッサ３００がディスエーブルする代わりに、その１サイクルの間、現在のブランチ命令が再指向に対応する第１のフェッチを生じさせるかもしれない。他の実施例では、プロセッサ３００がフェッチ・スロットリングの複数のサイクルを用いることができる。この複数のサイクルは、第１の再指向サイクルを含む。その禁止するブランチに対応する再指向にその第１のフェッチが応答する。また第２のサイクルを含むが、これは第１のフェッチ再指向サイクルに続くフェッチに対応する次のフェッチ・サイクルに対応する。プロセッサの一実施例は、ハードウエア・デザイン時に第２のテストのために設定する特定の時間窓を決定してもよい。他の実施例では、この時間窓が電力管理ツール、ファームウエア、ハイパーバイザ、オペレーティング・システムもしくはアプリケーションによってプログラム可能である。
【００３８】
図３のフェッチ・スロットル・コントローラ３７０は、ＢＩＱ３７２中の有効なブランチの予測における累積的な信頼性が第１の所定の信頼性レベルよりも低いとき、フェッチ・ユニット３０５による命令のフェッチングをスロットルする。換言すると、フェッチ・スロットル・コントローラ３７０は、ＢＩＱ３７２中の有効なブランチ命令に関係付けられた信頼性キュー３７４中の信頼性ビットが一緒になったものが第１の所定の信頼性レベルよりも低いとき、フェッチ・スロットリングを開始する。この第１の信頼性テストは、「累積信頼性テスト」である。そこではそれはＢＩＱ３７２中のグループとしての複数個の有効なブランチ命令の統合した信頼性を考慮している。開示されたプロセッサは、第１の累積信頼性テストにおいて累積した信頼性のレベルを決定するのに用いるフェッチ・スロットル・コントローラ３７０を使用してもよい。
【００３９】
フェッチ・コントローラ３７０はまた第２の信頼性テスト、すなわち、発行ユニット３２５が発行のために現在選択しているブランチ命令毎の信頼性テストを行う。これは、発行ステージもしくは発行ユニットともいう発行ユニット３２５が発行のために選択するブランチ命令毎にこのテストをフェッチ・スロットル・コントローラ３７０が行うという点で「個別信頼性テスト」である。このテストは特定のブランチ命令が第２の所定の信頼性レベルよりも低いレベルを示すかを決定する。もし特定のブランチ命令が第２の所定の信頼性レベルよりも低いレベルを示すなら、フェッチ・スロットル・コントローラ３７０は所定の期間、フェッチ・スロットリングを禁止、抑制もしくは無効にする。換言すると、これらの条件下では、プロセッサの性能を増進させるため所定の期間、第１の累積信頼性テストにおいて導き出されるフェッチ・スロットリングの指示に関係なく、フェッチ・スロットル・コントローラ３７０が命令フェッチングを再イネーブルする。一実施例では、フェッチ・スロットリングを禁止するため、フェッチ・スロットル・コントローラ３７０がフェッチ・ユニット３０５に命令して、全速でのフェッチング命令を再開するようにする。発行の時点でこの態様でフェッチングを再度イネーブルすることによって、ＢＲＵ３５０はフェッチ・ユニット３０５による使用のため丁度間に合うように再指向アドレスを発生する。この結果、プロセッサ性能の顕著な増進が得られる。この所定の期間後もしくは所定の期間の窓の時間経過後、もしフェッチ・スロットル・コントローラ３７０中の有効なブランチ命令がグループとして第１の所定の信頼性レベルよりも低い信頼性の累積レベルを示すことを、第１の累積信頼性テストが示すなら、フェッチ・スロットル・コントローラ３７０はフェッチ・スロットリングを再開してもよい。フェッチ・スロットリングを禁止することは、フェッチ・スロットリングを無効にすること、終了させることおよび停止させることを含む。一つの代替実施例では、第１の累積信頼性テストがフェッチ・スロットリングの使用を示し、かつそのプロセッサが命令フェッチングを禁止もしくは抑制すべきことを第２の個別信頼性テストが示すとき、プロセッサはそのプロセッサの通常のフェッチ速度よりも下げたフェッチ速度で命令フェッチングを行ってもよい。一実施例では、特定のブランチ命令が第２の所定の信頼性レベルよりも低いことを示すときブランチ再指向が起こりそうなことを予期してフェッチ・スロットリング禁止を行うといったようにフェッチ・スロットリング禁止は投機的である。
【００４０】
図４は、プロセッサの性能を増進するためにプロセッサ３００が採用するフェッチ・スロットリング禁止技法を示すフローチャートである。禁止機能付きフェッチ・スロットル・マシーン（ＦＴＳＭＷＩＦ）３７６は、命令キャッシュ（Ｉキャッシュ）３１０からの命令のフェッチングのスロットリング、および命令のフェッチングのスロットリングの禁止の両方を制御するスロットル信号（THROTTLE）を発生する。プロセスのフローは、プロセッサを初期化するブロック４０５にあるように、プロセッサ３００が初期化するとき開始する。ブロック４１０にあるように、プロセッサ・デザイナー、ユーザーもしくは他のエンティティが、ＦＴＳＭＷＩＦ３７６に適切な入力選択を与えることによって、ＦＴＳＭＷＩＦ３７６をイネーブルもしくはディスエーブルする。判断ブロック４１５にあるように、ＦＴＳＭＷＩＦ３７６がイネーブルされた状態を示すかを決定するテストを行う。もしＦＴＳＭＷＩＦ３７６がイネーブルされた状態を示さないなら、ブロック４２０にあるように、フェッチ・スロットリングなしに、全速でフェッチ命令を続行する。しかし、もしＦＴＳＭＷＩＦ３７６がイネーブルされた状態を示すなら、フェッチ・スロットリングが適切な状態の下で開始してもよい。
【００４１】
もしＦＴＳＭＷＩＦ３７６がイネーブルされた状態を示すなら、フェッチ・ユニット３０５は命令をフェッチし、フェッチ・スロットル・コントローラ３７０がブランチ予測ユニット３５５のブランチ履歴テーブル（ＢＨＴ）３５７を読出して、そのフェッチされたブランチ命令のためのブランチ予測を観察できるようにする（ブロック４２５参照）。フェッチ・ユニット３０５はＢＩＱ３７２へのフェッチされた命令ストリームのためのブランチ命令を与える。ＢＩＱ３７２はそのエントリとして、そのようなフェッチされたブランチ命令を書込む（ブロック４３０参照）。こうしてＢＩＱ３７２は現在「実行中（in-flight）」もしくはまだ決着していない命令ストリーム中のそのようなブランチ命令を含むブランチ命令のグループをストアする。そのような「実行中の」ブランチ命令は有効なブランチ命令である。ＢＩＱ３７２はまた、フェッチ・スロットル・コントローラ３７０が無効なブランチ命令であるとして取り扱うような幾つかの古い決着されたブランチ命令を含む。信頼性キュー３７４は、ＢＩＱ３７２のブランチ命令エントリ毎の信頼性ビットのような信頼性情報をストアする（ブロック４３０参照）。１という信頼性ビットは、ブランチ予測ユニット３５５が個々のブランチ命令のために為すブランチ予測において高信頼性を示す。０という信頼性ビットは、ブランチ予測ユニット３５５が個々のブランチ命令のために為すブランチ予測において低信頼性を示す。
【００４２】
フェッチ・スロットル・コントローラ３７０が、一実施例ではその信頼性ビットと個々の有効ビットとをアンドすることによって、信頼性キュー３７４中の信頼性ビットに資格を与える（ブロック４３５参照）。ＦＴＳＭＷＩＦ３７６が、ブランチ命令キュー（ＢＩＱ）３７２中の有効ブランチ命令のための累積ブランチ命令グループ（ＣＢＩＧ）の信頼性レベルを決定する（ブロック４４０）。一実施例では、ＦＴＳＭＷＩＦ３７６が、ＢＩＱ３７２の個々の有効なブランチ命令のための信頼性キュー３７４中の信頼性ビットもしくは信頼性情報を一緒に加え、累積ブランチ命令グループ（ＣＢＩＧ）信頼性レベルを形成する。ＣＢＩＧ信頼性レベルは、ＢＩＱ３７２が現在ストアする有効なブランチ命令のためブランチ予測における信頼性の量を示す。プロセッサが命令ストリームの命令を実行するとき、ＢＩＱ３７２がストアするブランチ命令が変化するにつれ、この信頼性レベルが変化する。当業者は、図４のステップ４３０、４３５および４４０のうちの１個もしくはそれ以上を適応させ、および／もしくは置き換えることによって、第１の累積ブランチ命令グループ（ＣＢＩＧ）の信頼性レベルを決定するための他の方法と組み合わせるよう、図４に開示されたフェッチ・スロットリング禁止方法を調整しあるいは修正してもよい。
【００４３】
ＦＴＳＭＷＩＦ３７６は、現在の累積ブランチ命令グループ（ＣＢＩＧ）の信頼性レベルが第１の所定の信頼性閾値よりも低いか調べるための第１のテストを行う（ブロック４４５参照）。もしＹＥＳなら、ＢＩＱ３７２中の有効ブランチ命令のための分岐予測が全体として低い信頼性を示す。一実施例では、デザイナーもしくは他のエンティティが第１の所定の信頼性閾値を選択する。この閾値は、もしＣＢＩＧ信頼性レベルが第１の所定の信頼性閾値よりも低ければ、ＢＩＱ３７２中のブランチのためでないよりもブランチ予測ミスとなりそうな閾値である。もし、ＣＢＩＧ信頼性レベルが第１の所定の信頼性閾値よりも低くはないと判断ブロック４４５のテストが決定するならば、フェッチ・スロットル・コントローラ３７０はフェッチ・スロットリングを開始しない（ブロック４５０参照）。ＦＴＳＭＷＩＦ３７６は、フェッチ・ユニット３０５にＩキャッシュ３１０からの命令のフェッチングを全速で続けるように命令するスロットル信号を発生する。プロセスの流れはブロック４２５に戻り、命令フェッチングが全速で続く。
【００４４】
しかし、もしそのＣＢＩＧ信頼性レベルが第１の所定の信頼性閾値よりも現在低いと判断ブロック４４５のテストが決定するなら、フェッチ・スロットル・コントローラ３７０はプロセッサの電力消費を少なくするためにフェッチ・スロットリングを開始する（ブロック４５５参照）。具体的には、フェッチ・ユニット３０５がＩキャッシュ３１０からの命令をフェッチするときの割合ないし速度を減らすようにフェッチ・ユニット３０５に命令するスロットル信号をＦＴＳＭＷＩＦ３７６が発生することによって、フェッチ・スロットリングを賦活する。ＢＩＱ３７２中の有効なブランチ命令のグループに対する全体のブランチ予測信頼性が低いときに電力を節約するために、フェッチ・スロットリングが開始する。幾つかの異なるフェッチ・スロットリング・パターンが異なる量のフェッチ・スロットリングを達成するために可能である。一実施例では、プロセッサが比較的低いＣＢＩＧ信頼性値の場合にはより積極的にスロットルするように、また第１の閾値よりも下で比較的高いＣＢＩＧ信頼性値の場合には控えめにスロットルするように、特定の信頼性値に基づいてフェッチ・スロットル・パターンを適用可能に選択してもよい。
【００４５】
一実施例では、一旦フェッチ・スロットリングが開始すると、ＢＩＱ３７２中の各ブランチ命令をいつ発行するかＦＴＳＭＷＩＦ３７６に知らせる発行ユニットすなわち発行ユニット３２５からの発行情報をＦＴＳＭＷＩＦ３７６が受取る（ブロック４６０参照）。この発行情報は、発行ユニット３２５が、実行のためＢＲＵ３５０に現在発行されるブランチ命令を送ったことをＦＴＳＭＷＩＦ３７６に知らせるブランチ発行情報を含む。ＦＴＳＭＷＩＦ３７６は、発行ユニット３２５がブランチ命令を発行するとき現在発行されるブランチ命令の信頼性キュー３７４における個々の信頼性をチェックする（ブロック４６２参照）。ＢＩＱ３７２中のその特定の現在発行されるブランチ命令のためのブランチ予測における信頼性が第２の所定の信頼性閾値よりも低いか決定するため第２のテストを行う（判断ブロック４６５参照）。
【００４６】
一実施例では、プロセッサ３００は、ブランチ命令予測時点でフェッチ・スロットル・コントローラ３７０が引き出しかつ信頼性キューがストアする信頼性値に対応する信頼性値上の第２のテストで解析されるブランチ予測における信頼性をベースにする。このプロセッサは、特定のブランチ命令の性質など、命令特性からこの信頼性情報を引き出すのでもよい。例えば、間接ブランチ命令もしくはＰＣ相対条件フォワードブランチ命令にはプロセッサが低信頼性を推察することができる。これに比べて、無条件ブランチ命令、サブルーチンに経路付けするブランチ命令（例えば、Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ（商標）におけるリンク・レジスタへのブランチ（ｂｌｒ）命令）からの戻り、およびバックワードＰＣ相対条件付きブランチ命令は、プロセッサが高信頼性を推察することができる。プロセッサの一実施例は、少なくとも１個の信頼性キューにおける第２のテストのために信頼性情報をストアする。例えば、信頼性情報を使用するため、フェッチ・スロットル・コントローラ３７０は信頼性キュー３７４から信頼性情報を取り出す。他の実施例では、ブランチ命令キュー（ＢＩＱ）もしくはＣＱから読出し動作を行う余分の回転待ち時間を減らすためにＢＩＱ中の個々のブランチ命令とともに直接第２のテストのための信頼性情報をプロセッサがストアする。
【００４７】
もし特定の現在発行されているブランチ命令の予測の信頼性が第２の所定の閾値よりも低くはないなら、ＦＴＳＭＷＩＦ３７６はフェッチ・スロットリングを続行するようにフェッチ・ユニット３０５に命令する。その場合は、フローはフェッチ・ブロック４２５に戻って続行する。しかし、もし特定の現在発行されているブランチ命令のための予測の信頼性が第２の所定の閾値よりも低いなら、ＦＴＳＭＷＩＦ３７６は所定の期間の時間窓の間、フェッチ・スロットリングを禁止する（ブロック４７０参照）。一実施例では、このスロットリングを禁止する時間窓は比較的に短い期間を示す。フェッチ・スロットル・コントローラ３７０が命令フェッチ・スロットリングを禁止するこの時間窓について、異なる実施例のプロセッサが異なる期間を用いてもよい。他の実施例は、現在のブランチが正確に１サイクルの間、フェッチ・スロットリングを禁止する。その１サイクルは、現在のブランチが、そのスロットリングが禁止されている代わりに、再指向に対応する第１のフェッチを生じさせるかもしれないときのサイクルに対応する。他の実施例では、プロセッサが複数のサイクルの間、フェッチ・スロットリングを禁止してもよい。この複数のサイクルは、第１のフェッチがその禁止するブランチに対応する再指向に応答する第１の再指向サイクルと、第１のフェッチ・サイクルに続くフェッチに対応する次のフェッチ・サイクルに対応する第２のサイクルとを更に含む。
【００４８】
このスロットリング禁止窓の期間経過後、ＦＴＳＭＷＩＦ３７６は、フェッチされたスロットリングが再開するようにフェッチを禁止しもしくは無視するのを停止する（ブロック４７５参照）。プロセスの流れはフェッチ・ブロック４２５に戻り続ける。累積ブランチ命令グループ（ＣＢＩＧ）の信頼性レベルが判断ブロック４４５での第１の所定の閾値よりも最早低いとき、フェッチ・スロットリングが止まり、全速フェッチングが戻る。
【００４９】
前述の実施例において、ＦＴＳＭＷＩＦ３７６は、ブランチ命令のグループのためのその累積ブランチ命令グループ（ＣＢＩＧ）の信頼性レベルがフェッチ・スロットリングに値するほど低いか決定するためその信頼性レベルをモニタする。等価な実施例では、ブランチ命令のグループのための予測における信頼性レベルの累積的なブランチの欠如をＦＴＳＭＷＩＦ３７６がモニタすることができるが、それはそのような信頼性の欠如がフェッチ・スロットリングに値するほど高いか決定するためである。ＦＴＳＭＷＩＦ３７６はこれらの２つの等価な条件のうちのいずれかを使用してフェッチ・スロットリングを始めるきっかけとしてもよい。
【００５０】
一実施例では、特定の現在発行されるブランチ命令が第２の所定の信頼性閾値よりも低いブランチ予測信頼性を示すのを見出す第２のテストに応答して、フェッチ・スロットル・コントローラ３７０は、特定のブランチがフェッチ・ユニット３０５に、メモリ中の新しいロケーションからフェッチするよう指示するであろう時刻に開始し、そしておそらくはその後も１サイクルもしくはより多くのサイクル、スロットリングを続けるのを再度許容する。換言すると、ＦＴＳＭＷＩＦ３７６は発行ユニット３２５が発行のため低信頼性ブランチ命令を選択するときはいつでもフェッチ・スロットリングを投機的にディスエーブルする。フェッチングをこの時点で再度イネーブリングすることによって、ブランチ・ユニット３５０はフェッチ・ユニット３０５による使用のために丁度間に合うように再指向アドレスを発生する。フェッチ・スロットリングをディスエーブリングすることは、全速でフェッチングを再度イネーブリングすることと等価である。
【００５１】
ＦＴＳＭＷＩＦ３７６がブランチ命令のグループのための累積ブランチ命令グループ（ＣＢＩＧ）の信頼性レベルをモニタして、そのような信頼性レベルがフェッチ・スロットリングに値するほど低い、すなわち第１の所定の閾値より低いか決定する実施例に対するフェッチ・スロットリング禁止をここで要約する。そのような実施例では、特定の現在発行されるブランチ命令が第２の所定の閾値よりも低い信頼性を示すときＦＴＳＭＷＩＦ３７６がフェッチ・スロットリングを禁止する（図４のフローチャートのブロック４６５参照）。
【００５２】
ＦＴＳＭＷＩＦ３７６がブランチ命令のグループのための累積ブランチ命令グループ（ＣＢＩＧ）の信頼性欠如のレベルをモニタして、そのような信頼性欠如のレベルがフェッチ・スロットリングに値するほど高い、すなわち第１の所定の信頼性欠如の閾値より高いか決定する実施例に対するフェッチ・スロットリング禁止をここで要約する。そのような実施例では、特定の現在発行されるブランチ命令が第２の所定の信頼性欠如の閾値よりも高い信頼性欠如を示すときＦＴＳＭＷＩＦ３７６がフェッチ・スロットリングを禁止する。換言すると、ＦＴＳＭＷＩＦ３７６は、図４のフローチャートの判断ブロック４６５を、以下のテストと置き換える。すなわち特定の現在発行されるブランチ命令が、第２の所定の信頼性欠如の閾値よりもそのブランチ予測において高い信頼性欠如をいつ示すかを決定するテストと置き換える。
【００５３】
図５は、プロセッサ１００もしくは３００を用いる情報処理システム（ＩＨＳ）を示す。ＩＨＳは、情報を処理し、転送し、通信し、変形し、ストアし、もしくはディジタル形式、アナログ形式もしくは他の形式で取り扱うシステムである。ＩＨＳ５００は、プロセッサ１００，３００をメモリ・コントローラ５２０およびメモリ・バス５２２を介してシステム・メモリ５１０に結合するバス５０５を含む。ビデオ・グラフィックス・コントローラ５２５がディスプレイ５３０をバス５０５に結合する。不揮発性ストレージ５３５は、ハード・ディスク・ドライブ、ＣＤドライブ、ＤＶＤドライブ、もしくは他の不揮発性ストレージであるが、バス５０５に結合し、ＩＨＳ５００に情報の恒久的なストレージを提供する。オペレーティング・システム５４０は、ＩＨＳ５００の動作を統括するためにメモリ５１０にロードする。Ｉ／Ｏ装置５４５は、キーボードおよびマウス・ポインティング装置などであるが、Ｉ／Ｏコントローラ５５０およびＩ／Ｏバス５５５を介してバス５０５に結合する。１個もしくはそれ以上の拡張バス５６０は、ＵＳＢ、ＩＥＥＥ１３９４バス、ＡＴＡ，ＳＡＴＡ，ＰＣＩ、ＰＣＩＥおよび他のバスであるが、バス５０５に結合して、ＩＨＳ５００に周辺装置および装置を結合するのを促進する。ネットワーク・アダプタ５６５はバス５０５に結合し、ＩＨＳ５００が有線もしくは無線によりネットワークおよび他の情報処理システムに結合するのを可能にする。図５が、プロセッサ１００もしくは３００を用いる一つのＩＨＳを示すが、そのＩＨＳは多くの形態をとることができる。例えば、ＩＨＳ５００は、デスクトップ、サーバー、ポータブル、ラップトップ、ノートブック、もしくは他のフォーム・ファクタのコンピュータまたはデータ処理システムの形態をとることができる。ＩＨＳ５００は、ゲーム装置、パーソナル・ディジタル・アシスタント（ＰＤＡ）、携帯電話装置、通信装置もしくはプロセッサおよびメモリを含む他の装置など、他のフォーム・ファクタをとってもよい。
【００５４】
本発明の変形した代替実施例は本発明のこの記述からみて当業者には明らかであろう。従って、ここでの記述は当業者に本発明を実施する態様を教示し、説明用として構成されることを意図している。図示しまた記述した本発明の形式は本発明の実施例を構成する。当業者は部品の形状、サイズおよび配列に種々の変更を行うことができる。例えば、当業者はここで描きまた記述したエレメントと等価なエレメントを置き換えることができる。更に、本発明のこの記述の利益を受けた後の当業者は、本発明の範囲から逸れずに、本発明の特徴を、他の特徴の使用とは独立に使用してもよい。
【００５５】
添付図面は本発明の実施例のみを示し、従ってその範囲を限定するものではない。本発明の概念がそれ自体を他の等しく効果的な実施例に当て嵌めるからである。
【図面の簡単な説明】
【００５６】
【図１】フェッチ・スロットリングとともに禁止機能を採用する、ここで開示するプロセッサのブロック図である。
【図２】図１のプロセッサが含むフェッチ・スロットル・コントローラのブロック図を示す。
【図３】開示されたプロセッサの単純化したブロック図を示す。
【図４】図３のプロセッサがフェッチ・スロットリング動作を行う際、図３のプロセッサにおけるプロセスの流れを示すフローチャートである。
【図５】図１のプロセッサまたは図３のプロセッサを採用する情報処理システム（ＩＨＳ）のブロック図である。
【符号の説明】
【００５７】
１００  プロセッサ
１０５  メモリ
１１０  フェッチ・ユニット
１１０Ａ  命令アドレス・ユニット
１１０Ｂ  スロットル入力
１１５  デコーダ
１１６  レジスタ・リネーミング・ステージ
１１７  発行ユニット
１２０  固定小数点ユニット（ＦＸＵ）
１２０Ａ  レジスタ・ファイル（ＲＦ）
１２５  浮動小数点ユニット（ＦＰＵ）
１３０  ロード・ストア・ユニット（ＬＳＵ）
１２５Ａ  レジスタ・ファイル（ＲＦ）
１３０  ロード・ストア・ユニット（ＬＳＵ）
１３５  ブランチ・ユニット（ＢＲＵ）
１４０  ブランチ予測ユニット
１４２  ブランチ履歴ユニット（ＢＨＴ）
１４５  完了ユニット
２００  フェッチ・スロットル・コントローラ
２０５  ブランチ命令キュー（ＢＩＱ）
２１０  信頼性キュー（ＣＱ）
２１５  ヘッド・ポインタ
２２０  テール・ポインタ
２２５  制御論理
２３０  禁止機能を備えたフェッチ・スロットル状態マシーン（ＦＴＳＭＷＩＦ）
２３５  アンド回路
２３５Ａ  アンド回路入力
２３５Ｂ  ライン入力 
２４０  有効ベクトル発生回路
２４５  有効ベクトル
２５０  加算器
２５５  比較器
２６０  プログラマブル閾値回路
３００  プロセッサ
３０５  フェッチ・ユニット
３１０  命令キャッシュ（Ｉキャッシュ）
３１５  デコーダ
３２０  レジスタ・リネーミング回路
３２５  発行ユニット
３５０  ブランチ・ユニット（ＢＲＵ）
３５５  ブランチ予測ユニット
３５７  ブランチ履歴ユニット（ＢＨＴ）
３７０  フェッチ・スロットル・コントローラ
３７２  ブランチ命令キュー（ＢＩＱ）  
３７４  信頼性キュー（ＣＱ）
３７６  禁止機能を備えたフェッチ・スロットル状態マシーン（ＦＴＳＭＷＩＦ）
５００  情報処理システム（ＩＨＳ）
５０５  バス
５１０  システム・メモリ
５２０  メモリ・コントローラ
５２５  ビデオ・グラフィックス・コントローラ
５３０  ディスプレイ
５３５  不揮発性ストレージ
５４０  オペレーティング・システム
５４５  Ｉ／Ｏ装置
５５０  Ｉ／Ｏコントローラ
５５５  Ｉ／Ｏバス
５６０  拡張バス
５６５  ネットワーク・インターフェイス
６３０  メモリ・バス
【図１】
0005285408.tif 000002
【図２】
0005285408.tif 000003
【図３】
0005285408.tif 000004
【図４】
0005285408.tif 000005
【図５】
0005285408.tif 000006