JP5285408B2 - プロセッサ、プロセッサを動作させる方法、および情報処理システム - Google Patents

プロセッサ、プロセッサを動作させる方法、および情報処理システム Download PDF

Info

Publication number
JP5285408B2
JP5285408B2 JP2008311299A JP2008311299A JP5285408B2 JP 5285408 B2 JP5285408 B2 JP 5285408B2 JP 2008311299 A JP2008311299 A JP 2008311299A JP 2008311299 A JP2008311299 A JP 2008311299A JP 5285408 B2 JP5285408 B2 JP 5285408B2
Authority
JP
Japan
Prior art keywords
branch
fetch
instruction
unit
branch instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2008311299A
Other languages
English (en)
Other versions
JP2009140502A (ja
Inventor
レイモンド・チュン・ユン
マイケル・カール・ゲシュインド
ロバート・アラン・フィルハワー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2009140502A publication Critical patent/JP2009140502A/ja
Application granted granted Critical
Publication of JP5285408B2 publication Critical patent/JP5285408B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

本発明はパイプライン化されたプロセッサに関し、特に情報処理システムにおいて電力を節約するパイプライン化されたプロセッサに関する。
今日の情報処理システムはかなりの熱量をよく発生するプロセッサを使用する。サーマル・スロットリング(熱絞り)技法というものが存在し、それはプロセッサの温度を感知する。プロセッサの温度が所定の閾値を超えると、そのシステムはプロセッサのクロック速度を絞りもしくは減じて、それに応じてプロセッサの温度を下げる。この態様で、このシステムが不所望の過熱を防止する。代替例では、このシステムがクロック・ゲーティング、すなわちプロセッサの温度を下げるために或る期間プロセッサの論理回路の少なくとも一部のためのプロセッサのクロックを停止させるという技術を採用してもよい。
電力消費は今日のプロセッサの最大の動作周波数に対する大きな貢献要素である。プロセッサの消費する電力量を感知するのに電力スロットリング(絞り)技法が利用できる。消費された電力が所定の電力閾値レベルを超えると、電力スロットリング・システムがプロセッサの動作周波数を減らし、プロセッサの消費電力を下げる。
共通の出願人を有する、2007年4月10日に米国特許出願された米国特許出願11/733,589号
ここで必要なのは、情報処理システムにおいてプロセッサによる電力消費を一層少なくする装置および方法である。
従って、一実施例では、プロセッサを動作させる方法が開示される。前記方法は、フェッチされるブランチ命令を含む命令ストリームを提供するために命令ソースからの命令を、フェッチ・ユニットによりフェッチするステップを含む。前記方法は、各々の(前記)フェッチされたブランチ命令の結果を、ブランチ予測ユニットにより予測するステップであって、前記フェッチされたブランチ命令のための個々のブランチ予測を提供する前記予測するステップを更に含む。前記方法は、前記フェッチされたブランチ命令を、発行ユニットにより、実行のためのブランチ実行ユニットに発行するステップを更に含む。前記方法は更にまた、グループとしてのブランチ命令キューにおける前記フェッチされたブランチ命令(の信頼性)が、第1の所定のブランチ予測信頼性閾値よりも低いことを示すなら、前記フェッチ・ユニットによる命令の前記フェッチングを、フェッチ・スロットル・コントローラにより、絞るすなわちスロットリングするステップを更に含む。前記方法はまた、前記フェッチされたブランチ命令を、発行ユニットにより、実行のためのブランチ実行ユニットに発行するステップを更に含む。前記方法はまた、前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が、第2の所定のブランチ予測信頼閾値よりも低いことを示すなら、命令の前記フェッチングの前記スロットリングを、前記フェッチ・スロットル・コントローラにより投機的に禁止するステップを含む。
他の実施例では、命令をストアする命令ソースを含むプロセッサが開示される。このプロセッサはまた、フェッチされたブランチ命令を含む命令ストリームを提供するために、フェッチされるブランチ命令を含む前記命令ソースに結合され、前記命令ソースからの命令をフェッチするフェッチ・ユニットを含む。前記プロセッサは更に個々のフェッチされたブランチ命令の結果を予測するブランチ予測ユニットを含み、こうしてフェッチされたブランチ命令のための個々のブランチ予測を提供する。前記プロセッサは更に、前記フェッチされたブランチ命令を、実行のためのブランチ実行ユニットに発行するように、前記フェッチ・ユニットおよび前記ブランチ実行ユニットに結合された発行ユニットを含む。前記プロセッサはまた、もしグループとしてブランチ命令キュー中の前記フェッチされたブランチ命令が、第1の所定のブランチ予測信頼性閾値よりも低いことを示すなら、前記フェッチ・ユニットにより命令の前記フェッチングをスロットルするように、前記フェッチ・ユニットおよび前記発行ユニットに結合されたフェッチ・スロットル・コントローラを含む。前記フェッチ・スロットル・コントローラは、前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が、第2の所定のブランチ予測信頼性閾値よりも低いことを示すなら、命令の前記フェッチングの前記スロットリングを禁止する。
今日のプロセッサは、このプロセッサの命令効果を増加させるためにブランチ予測を採用する投機的実行技法をよく採用する。プロセッサにおけるフェッチ・ユニットもしくはフェッチ装置がブランチ命令を含む命令のストリームをフェッチする。プロセッサはブランチ予測に応答してブランチ命令後の命令を投機的に実行する。もっと詳細に言えば、命令デコーダが命令ストリームのブランチ命令を解読した後、ブランチ予測回路はブランチ命令が提供するブランチを取るか取らないか予測を行う。このブランチ予測回路がそのブランチを取るか取らないかをブランチ履歴情報、すなわちそのプロセッサが過去において特定のブランチ命令に遭遇するときのブランチ結果を用いて予測する。もしブランチ予測回路がブランチを正しく予測するなら、そのプロセッサはそのブランチ後命令の結果を保持する。しかし、もしブランチ予測が不正確であれば、プロセッサはそのブランチ後命令の結果を破棄しもしくはフラッシュする。プロセッサはそのブランチ命令の正しい目標アドレスに対応する再指向アドレスで命令を実行開始する。
あるプロセッサによる命令の投機的実行はかなりの量の電力を消費する。投機的な実行アクティビティがプロセッサのパフォーマンスないし性能に実質的なインパクトを生じない態様で消費する電力を最小限にすることが望ましい。電力消費を少なくする一つの方法は、ブランチ予測に関して低い信頼性を累積的に示すとプロセッサが決定するようなブランチ命令のグループにプロセッサが遭遇するとき命令のフェッチング・スロットリングによる。プロセッサは、命令ストリームからのブランチ命令のグループを、ストアされるブランチ命令ごとの機密情報とともに含むブランチ命令キュー(BIQ)を含む。このBIQは「実行中(in-flight)」の命令ストリームのこれらのブランチ、すなわちそのプロセッサが未だ決着できなかった命令をストアする。このBIQにおける低信頼性のブランチの数が所定の信頼性閾値よりも大きいなら、これらの低いブランチ予測信頼性状態の下で電力消費を下げるようにプロセッサが命令フェッチ・スロットリングを行う。このようなフェッチ・スロットリング電力節約方法は、Bose et al による「Method andApparatus for Conserving Power by Throttling Instruction Fetching When aProcessor Encounters Low Confidence Branches in an Information Handling System(情報処理システムにおいて低信頼性のブランチにプロセッサが遭遇するときスロットリング命令のフェッチングにより電力を節約する方法および装置)」と題する特許文献1に開示されている。電力を節約する間、この方法論はプロセッサのパフォーマンスに幾つかの負のインパクトを生じる。そのような電力節約をプロセッサのパフォーマンスに、これまでより少ないマイナスのインパクトを与えるだけで達成することが望ましい。
図1は、プロセッサが消費する電力を減らすため信頼性の低いブランチのグループ上でフェッチ・スロットリングを採用するプロセッサ100の一実施例を示す。プロセッサ100は、プロセッサ100が実行する命令ストリームを含むローカル・キャッシュ・メモリなどのメモリ105を含む。実際の実施では、メモリ105は、プロセッサが実行する命令ストリームもしくはプログラムを提供する大型の外部システム・メモリ(図示せず)に取付けられる。フェッチ・ユニット110は、実行のためにメモリ105から命令をフェッチするためにメモリ105に結合される。フェッチ・ユニット110は命令アドレス・ユニット110Aを含む。デコーダ回路115はフェッチ・ユニット110から受取る、そのフェッチされた命令を解読するためにフェッチ・ユニット110に結合される。そのフェッチされた命令ストリームはOPコードおよびオペランドを備えた命令を含む。その命令ストリームのうちの幾つかの命令はブランチ命令である。シーケンサ回路とも称する発行ユニット117はレジスタ・リネーミング・ステージ116を介してデコーダ115に結合される。発行ユニット117は、実行のため特定の解読された命令を受取るべき適切な実行ユニットを決定する。発行ユニット117は、以下の実行ユニット、すなわち固定小数点実行ユニット(FXU)120、浮動小数点実行ユニット(FPU)125、ロード・ストア・ユニット(LSU)130およびブランチ実行ユニット(BRU)135に結合される。FXU120はレジスタ・ファイル120Aを含む。FPU125はレジスタ・ファイル125Aを含む。
それらの実行ユニットは、解読されたブランチ命令後の命令ストリーム中の命令を投機的に実行する。 ブランチ予測ユニット140は、フェッチ・ユニット110の命令アドレス・ユニット110AとBRU135との間に結合する。ブランチ予測ユニット140は、以前に実行されたブランチ命令の履歴の結果を追跡するブランチ履歴テーブル(BHT)142を含む。ブランチ・ユニット(BRU)135と協働するブランチ予測ユニット140は、このブランチ実行履歴情報を用い、BRU135が現在受取っているブランチ命令のためのブランチ予測を行う。完了ユニット145は、それらの実行ユニット、すなわちFXU120、FPU125、LSU130およびBRU135の夫々に結合する。もっと具体的には、完了ユニット145は、FXUレジスタ・ファイル(RF)120AおよびFPUレジスタ・ファイル(RF)125Aに結合する。完了ユニット145は、投機的に実行される命令を完了させるべきか否かを判定する。もしブランチ予測ユニット140がブランチを正しく予測するなら、そのブランチに続く命令は完了すべきである。たとえば、もし ブランチ予測ユニット140がブランチを正しく予測するなら、そのブランチに続く固定小数点もしくは整数の命令は 完了すべきである。この場合、完了ユニット145はそのブランチの固定小数点の結果を固定小数点レジスタ・ファイル120A に書き戻すのを制御する。もし正しく予測されたブランチに続く命令が浮動小数点命令であれば、完了ユニット145は浮動小数点命令の結果を浮動小数点レジスタ・ファイル125Aに書き戻すのを制御する。命令が完了すると、それらはもはや投機的ではない。ブランチ実行ユニット(BRU)135は、特定のブランチ命令が取られるか取られないかを決めるように完了ユニット145およびブランチ予測ユニット140と協働する。
詳細には、ブランチ履歴テーブル(BHT)142がこれまでに実行されたブランチ命令の履歴を含む。BHT142中の各エントリが方向ビットおよび信頼性ビットを含む。特定のブランチ命令に対し、BHT142中のそのエントリは「採用したブランチ」もしくは「採用しなかったブランチ」を示す方向ビットを含む。一実施例では、方向ビットはそのブランチが最近の回に採用されなかったなら0に等しいか、あるいはそのブランチが最近の回に採用されたなら1に等しくしてもよい。一実施例では、特定のブランチ命令に対し、そのブランチ命令にプロセッサが遭遇する次の回にそのブランチをプロセッサが採用すべきであるか否かを方向ビットが示す。方向ビットはプロセッサがブランチ命令に遭遇した以前の回のそのブランチの方向を必ずしも表さない。しかし、大抵の場合は、そのプロセッサがそのブランチ命令に遭遇した最近の回のそのブランチの方向を示す。特定のブランチ命令に対し、予測が採用されたブランチもしくは採用されなかったブランチにおいて信頼性が低ければ信頼性ビットは1に等しくてよい。予測が採用されたブランチもしくは採用されなかったブランチにおいて信頼性が高ければ信頼性ビットは0に等しくてよい。特定のブランチ予測が低い信頼性を示す一つの理由は、特定のブランチ命令をプロセッサが実行した最近の2回、そのプロセッサが一つの場合はそのブランチを採用し、他の場合はそのブランチを採用しないことである。高い信頼性を表す特定のブランチ予測に対する理由は、その特定のブランチ命令をプロセッサが実行した最近の2回、そのプロセッサが2回ともそのブランチを採用したか2回とも採用しなかったことである。
プロセッサ100は、ブランチ命令キュー(BIQ)205を備えたスロットル制御回路すなわちフェッチ・スロットル・コントローラ200を含む。この特定の実施例では、BIQ205が16個のエントリを含む。すなわちその命令ストリーム中、フェッチ・ユニットがフェッチしたがまだ完了して(成し遂げて)いない16個までのブランチ命令を含む。BIQ205は、特定のアプリケーションによっては16個よりも多いかもしくは少ないエントリを含んでもよい。フェッチ・スロットル・コントローラ200はまたBIQ205と関連する信頼性キュー(CQ)210もしくは信頼性トラッキング・キューをも含む。CQ210は信頼性情報をストアする信頼性情報ストレージ・メモリとして働く。BIQ205のブランチ命令エントリごとに、CQ210は個々の信頼性ビットを含む。この特定の実施例では、CQ210が16個のエントリ、すなわち低信頼性ビットを含む。BIQ205における特定のブランチ命令エントリに対し、もしCQ210中の夫々のCQ信頼性ビット・エントリ論理1を表すなら、これはこの特定のブランチ命令のためのブランチ予測の信頼性が低いことを表す。しかし、BIQ205中の特定のブランチ命令エントリに対し、もしCQ210中の個々のCQ信頼性ビット・エントリが論理0を表すなら、このことはこの特定のブランチ命令のためのブランチ予測の信頼性が高いことを表す。フェッチ・スロットル・コントローラ200はCQ210中の信頼性ビットの総数において助けとなるようブランチ履歴テーブル(BHT)142にアクセスする。たとえば、一実施例では、BIQ205がストアする特定のブランチ命令に対し、対応する個々の信頼性ビットをCQ210に読み込むため、もしブランチ予測ユニット140およびBRU135が、そのブランチ命令をそのプロセッサが実行した最近の回のそのブランチ命令を予測ミスしたなら、フェッチ・スロットル・コントローラ200はCQエントリ中に1という信頼性ビットをストアする。しかし、もしブランチ予測ユニット140およびBRU135が、そのプロセッサが実行した最近の回のブランチ命令を正しく予測したなら、フェッチ・スロットル・コントローラ200は0という信頼性ビットをCQ中のそのブランチのための個々のエントリに読み込む。一実施例では、BHT142が個々のブランチ命令の信頼性ビットもしくは信頼性値を保持もしくはストアし、そしてBHT142はブランチ命令が実行するときにそれ自体を更新する。フェッチ・ユニット110が特定のブランチ命令をフェッチするとき、CQ210はBHT142にアクセスし、その特定のブランチ命令に対応する信頼性ビットを読み出し、ストアする。
代替方法は、1個もしくはそれ以上のビットのブランチ信頼性情報を引き出してもよい。例えば、一つのそのような方法は、ブランチ命令に存在してもよい静的ブランチ予測のヒントから信頼性情報を引き出してもよい。この方法は、ブランチ命令が含む信頼性ビットから信頼性情報を直接にセットするように、これらの静的ブランチ予測のヒントを使用してもよい。代わりに、この方法は、論理式によって信頼性ビットを引き出すようにこれらの静的ブランチ予測のヒントを使用してもよい。例えば、このような方法は、ブランチを取るか取らないかを示す静的なブランチのヒントがブランチ予測ユニット140の予測に合致するかを決定してもよい。
代替方法は、ブランチ予測信頼性を推察させるためにブランチの型を使用してもよい。例えば、1個もしくはそれ以上の無条件ブランチ、サブルーティング・ブランチ(Power Architecture(商標)におけるblr)からの戻り、および負のオフセットと条件的に相関するブランチが、ループを閉じるブランチを典型的には示す。このループを閉じるブランチは、ブランチが高い信頼性を示すことを推察させるのに使用できる。これに比べて、1個もしくはそれ以上の汎用の間接的なブランチ(例えば、Power Architecture(商標)におけるレジスタをカウントするブランチ)および条件付の相対的ブランチ・フォワードは、ブランチが低い信頼性を示すことを推察させるのに使用可能な条件付のステートメントの評価を典型的には表す。更に他の方法は複数のブランチ予測コンポーネントが一致する(ある「一致条件」)とき、高いブランチ信頼性を推察させるようなトーナメント予測ユニットを採用してもよい。このトーナメント・セレクタ、複数のコンポーネントが一致しない(「不一致条件」)とき、あるいはトーナメント・セレクタが特定のトーナメント予測コンポーネントを選択する上で弱い信頼性しか有しないとき低い信頼性を推察させてもよい。
ブランチ命令キュー(BIQ)205は、図1の実施例の循環キューである。BIQ205は、ヘッド・ポインタ215として概念的に示されるヘッド・ポインタおよびテール・ポインタ220として概念的に示されるテール・ポインタを含む。ヘッド・ポインタ215はBIQ205中の最新のブランチ命令をポイントし、テール・ポインタ220はBIQ205中の最古のブランチ命令をポイントする。BIQ205がフェッチ・ユニット110からのブランチ命令を受取るにつれ、その時点でヘッド・ポインタ215がBIQ205に入るための最新のブランチ命令をポイントするように、またテール・ポインタ220がBIQ205における最古のブランチ命令を常にポイントするように、ヘッド・ポインタおよびテール・ポインタが一つのブランチ命令エントリだけ移動する。
フェッチ・スロットル・コントローラ200はまた、ヘッド・ポインタ215、テール・ポインタ220および信頼性キュー(CQ)210に結合する制御論理225を含む。制御論理225はこうして現在のヘッド・ポインタ、現在のテール・ポインタおよびCQ210のすべての信頼性ビットを受取る。ヘッド・ポインタは他のブランチ命令がBIQ205に入る毎に変化する。テール・ポインタはブランチ命令が完了する毎に変化する。信頼性キュー(CQ)210はBIQ205のブランチ命令エントリごとに個々の信頼性ビットをストアする。換言すると、BIQ205の各ブランチ命令エントリはCQ210中に関連付けられて対応する信頼性ビットを有する。制御論理225は信頼性ビットの合計値を得るためにCQ210の信頼性ビットのすべてを合計ないし加算する。この特定の実施例では、CQ210が低信頼性ビットをストアするので、制御論理225は低い信頼性ビット合計値を決定する。制御論理225は、現在の低信頼性ビット合計値が所定の閾値の低信頼性レベルよりも大きいか決定するための第1のテストを行う。もし現在の低信頼性ビット合計値が所定の閾値の低信頼性レベルよりも実際に大きい、すなわち信頼性レベルの欠如を示すと制御論理225が決定するならば、フェッチ・スロットル・コントローラ200はプロセッサ電力消費を減じるためのフェッチ・スロットリングを開始するようにフェッチ・ユニット110に命令する。正確なブランチ予測が得られそうもない命令の投機的な実行中にこの態様でフェッチ・スロットリングすることによって、プロセッサ100は電力消費を減じることができる。しかし、もし現在の低信頼性ビット合計が所定の閾値の信頼性レベルよりも大きくないなら、ブランチ予測が正確である可能性もあり、制御論理225はスロットリングをせずに全速での命令のフェッチングおよび投機的な実行を許容する。こうして第1のテストは、BIQ205におけるブランチ命令のグループが一グループの命令として低い信頼性を累積的に示すかを決定する。代替的なアプローチは特定のブランチ命令のために、単一のビットよりももっと多いビットを用いて複数のブランチ予測の信頼性レベルを表す。例えば、「非常に高い」、「高い」、「低い」、「非常に低い」といった信頼性レベルである。これらの複数の信頼性値が複数のブランチを、複数のブランチに関連付けられた複数レベルの信頼性を要約する単一の信頼性値に多様な方法で組み合わせ可能であることを当業者は更に理解できよう。
発行ユニット117は、禁止機能を備えたフェッチ・スロットル状態マシーン(FTSMWIF)230に結合して、そのFTSMWIF230に命令発行情報を提供する。この態様でFTSMWIF230はFTSMWIF230中の各々の特定のブランチ命令が実行ユニットにいつ発行するかを知る。フェッチ・スロットル・コントローラ200はプロセッサの有効性および/もしくは性能を増すためにこの発行情報を使用する。前述のとおり、フェッチ・スロットル・コントローラ200はBIQ205のブランチ命令上で一グループとして第1のテストを行う。この第1のテストはBIQ205中のそのグループのブランチ予測が、ブランチ予測に関して所定量よりも低い信頼性を累積的に表すかを効果的に決定する。別の言い方をすれば、それらのブランチ予測に関して所定の信頼性閾値よりもより多くの信頼性の欠如をそのグループの複数の命令が一緒になって表すかをその第1のテストが決定する。
フェッチ・スロットル・コントローラ200はまたBIQ205中の各々の個別のブランチ命令上で、発行ユニット117がそのブランチ命令を発行するとき第2のテストを行う。この第2のテストは、各々の現在発行されるブランチ命令がその個々のブランチ予測に関する信頼性の所定量よりも低いことを表すかを決定する。FTSMWIF230はこの第2のテストを個別のブランチ命令上で行う。これはフェッチ・スロットル・コントローラ200がBIQ205中の有効なブランチ命令のグループ上で行う第1のテストと対照的である。もし所定量のブランチ予測信頼性よりも低い信頼性をBIQ205中の特定の現在発行されるブランチ命令が表すとFTSMWIF230が決定するなら、ブランチの再指向が行われる可能性があり、それに応答してFTSMWIF230がフェッチ・スロットリングを禁止する。再指向の可能性が高いとき、全速でのフェッチングを行うことが望ましい。こうして、前述の状態下でフェッチ・スロットリングを禁止することもしくは全速でのフェッチングを再度イネーブルすることはプロセッサの効率を高める。しかし、もしBIQ205中の特定のブランチ命令が少なくとも第1の所定量のブランチ予測信頼性を表わし、再指向が生じそうもないことをFTSMWIF230が決定するなら、FTSMWIF230フェッチ・スロットリングを禁止しない。換言すると、一グループとしてBIQ205中のブランチ命令が低信頼性を累積的に表すときは、第2の所定量のブランチ予測信頼性よりも低い信頼性をその特定の現在発行されているブランチ命令が表さない限り、フェッチ・スロットリングが続行する。
高いファンアウト(論理回路に接続できる出力数)およびセットアップ時間により、ここに開示されたパイプライン・プロセッサは命令フェッチをスロットルし、かつ実際のフェッチ・サイクルの前の幾つかのサイクルで、メモリ構造およびフェッチ論理をクロック・ゲーティングする決定を必要とするかもしれない。こうして、一実施例では、フェッチ論理がクロック・ゲーティングされないように確保するのは、正しい新しいフェッチ・アドレスへの再指向を特定のブランチが実際に生じさせるときのフェッチ・サイクルの利用可能性を確保するために、そのようなブランチが再指向しがちであるという信頼性を含む予測可能な技法に基づく。
開示されたプロセッサの異なる実施例が、フェッチ・スロットリングを禁止するための異なるセッティングを採用してもよい。一実施例は、現在のブランチが正確に1サイクルの間、フェッチ・スロットリングを禁止する。その1サイクルは、現在のブランチが、そのスロットリングがディスエーブルされている代わりに、再指向に対応する第1のフェッチを生じさせるかもしれないときのサイクルに対応する。この開示されたプロセッサの他の実施例は、複数のサイクルの間、フェッチ・スロットリングを禁止する。この複数のサイクルは、第1のフェッチがその禁止するブランチに対応する再指向に応答する第1の再指向サイクルと、第1のフェッチ・サイクルに続くフェッチに対応する次のフェッチ・サイクルに対応する第2のサイクルとを含む。
開示されたプロセッサの更に別の実施例では、デザイナーがデザイン時に複数の信頼性閾値をセットしてもよい。代わりに、ハイパーバイザのようなソフトウエア、オペレーティング・システムもしくはアプリケーションが、プロセッサが動作する間にそのような信頼性閾値をセットしてもよい。第2の閾値のためのひとつの可能な選択は、そのプロセッサがブランチ命令の実行に応答して行う可能な再指向に対応する任意のフェッチ・サイクルの間、フェッチ・スロットリングの禁止を確保する閾値セッティングである。
図2は、図1のフェッチ・スロットル・コントローラ200の詳細なブロック図である。図2はブランチ命令キュー(BIQ)205、信頼性キュー(CQ)210、制御論理225および禁止機能付きフェッチ・スロットル状態マシーン(FTSMWIF)230を示す。これらは図1に関連してすでに説明したものである。BIQ205は、図2に示すように、16個のブランチ命令エントリBI−0、BI−1、…BI−15を含む。CQ210は0−15と名づけた16個の信頼性ビット・エントリを含む。図2ではヘッド・ポインタ215およびテール・ポインタ220がブランチ命令BI−0およびBI−2をポイントするが、ヘッド・ポインタ215およびテール・ポインタ220は新しいブランチ命令がそのフェッチされた命令ストリームからBIQ205の中に到来するにつれ移動する。そのBIQ205がストアする特定のブランチ命令はそのプロセッサがフェッチし、実行し、そして命令ストリーム中のブランチ命令を完遂する際、一定の束となっている。BIQ205はそのフェッチされた命令ストリームからの16個の最近フェッチされたブランチ命令をストアする。こうして、或る時点で、BIQ205中のその個々のブランチ命令に関連付けられた信頼性ビットが、一つのグループとしてこれらのブランチ命令のための予測の正しさにおける低い信頼性をフェッチ・スロットル・コントローラ200が有することを示してもよい。この場合、フェッチ・スロットル・コントローラ200が電力消費を減らすためにフェッチ・スロットリングを開始する。しかし、他の時点で、BIQ205はもう一つのグループのブランチ命令を読み込む。.この場合に、BIQ205の夫々のブランチ命令に関連付けられた信頼性ビットが、グループとしてフェッチ・スロットル・コントローラ200がこれらのブランチ命令のための予測の正しさにおいて高い信頼性を有することを示してもよい。こうして、フェッチ・スロットル・コントローラ200は、フェッチ・スロットリングが電力消費を減らすためにフェッチ・スロットリングを開始しないが、その代わりにフェッチ・ユニット110に全速でフェッチするように命令する。しかし、もし特定の現在発行されるブランチ命令が、ブランチの再指向が起こりがちな所定の低信頼性閾値レベルよりも低いブランチ予測信頼性を示すなら、FTSMWIF230はフェッチ・スロットリングを禁止し、全速のプロセッサ速度でフェッチングが続行するのを許容する。
制御論理225は16個のライン入力235Aおよび16個のライン入力235Bを有するアンド回路235を含む。アンド回路入力235Aは、アンド回路235がCQ210から16個の信頼性ビットを受取るようにCQ210中の16個のスロットもしくはストレージ・ロケーションに結合する。ヘッド・ポインタ215およびテール・ポインタ220は有効ベクトル発生回路240に結合する。有効ベクトル発生回路240はBIQ205の異なるエントリにそのベクトルの各ビットが対応する16ビット・ベクトルを発生するようにヘッド・ポインタおよびテール・ポインタの情報を使用する。16ビット・ベクトルの各ビットはBIQ205中の対応するブランチ命令エントリが有効か示す。もし16ビット・ベクトルの特定のビットが論理値の1を示すなら、BIQ205のその対応するブランチ命令エントリが有効であり、そのブランチ命令はまだ処理中である。しかし、もし16ビット・ベクトルの特定のビットが論理値の0を示すなら、BIQ205のその対応するブランチ命令エントリは有効ではない。有効である、BIQ205のエントリはテール・ポインタ220でスタートし、ヘッド・ポインタ215まで広がる。例えば、もしヘッド・ポインタ215がBI−3にあり、かつテール・ポインタ220がBI−7にあるなら、16ビットの有効ベクトルは0001111100000000である。このことはBI−3、BI−4、BI−5、BI−6およびBI−7が有効であり、一方で残りのエントリが無効であることを意味する。もしヘッド・ポインタ215がテール・ポインタ220の上にあるなら、その有効なベクトルは巻き付いて、不連続になる。例えば、もしヘッド・ポインタ215がエントリBI−14にあり、かつテール・ポインタ220がエントリBI−2にあるなら、その有効なベクトルは1110000000000011である。このことはエントリBI−0、BI−1、BI−2、BI−14およびBI−15が有効であり、一方で残りのエントリが無効である。図2では、有効ベクトル・ボックス245が有効ベクトル245の16ビットを表す。
こうして、アンド回路入力235Aで、アンド回路235はCQ210から16個の低信頼性ビットを受取る一方、ライン入力235Bで、アンド回路235は16ビットの有効ベクトルを受取る。アンド回路235がその16個の低信頼性ビットを16個の個々の有効ベクトル・ビットと論理的にアンドすると、その有効ベクトルはアンド回路235の出力での16ビットの結果から、無効な低信頼性ビットを効果的に除去するマスクとして働く。こうして、アンド回路(アンド・ゲート)235の出力での16ビットの結果が、この特定の実施例では有効な低信頼性ビットのみを含む。換言すると、アンド回路235の出力での16個の低信頼性ビットはBIQ205における個々の有効なブランチ命令のための低信頼性ビットに対応する。
加算器250がアンド回路235の出力に結合する。加算器250はそれがアンド回路235から受取ったその有効な低信頼性ビットを合計して、低信頼性ブランチ合計、すなわち投入カウント(POPCOUNT)を加算器250の出力で提供する。従ってPOPCOUNTは特定の時点でのBIQ205における有効な低信頼性ブランチの総数を表す。比較器255は加算器250に結合する一入力を含み、そこからの低信頼性ブランチ合計、POPCOUNTを受取る。比較器255の残りの入力は、比較器255にプログラマブル信頼性閾値を提供するプログラマブル閾値回路260に結合する。デザイナーもしくは他のエンティティはこの信頼性閾値を選択する。その結果それは低信頼性レベルを表す。その低信頼性レベルは、もし超えれば、BIQ205中のブランチのための予測における信頼性がフェッチ・スロットリングおよび電力保護を始めなければならないほどに低いレベルである。
比較器255の出力は、禁止機能付きフェッチ・スロットル状態マシーン(FTSMWIF)230に結合する。もし低信頼性ブランチの総数、POPCOUNTが所定のプログラマブル閾値を超えるなら、比較器255が論理値1をFTSMWIF230に出力する。これに応答して、FTSMWIF230は「スロットル」信号をフェッチ・ユニットの入力110Bに送り、フェッチ・ユニット110に、命令フェッチングの速度を遅くするように指令する。命令フェッチングの速度を遅くするか、もしくはスロットリングするのは、プロセッサ100が採用されそうもないブランチ、すなわち、低信頼性ブランチを実行する際に消費する電力量を減じる。しかし、もし低信頼性ブランチ、POPCOUNTが所定のプログラマブル閾値を超えないなら、比較器255はFTSMWIF230に論理値0を出力する。それに応答して、FTSMWIF230はスロットル信号をフェッチ・ユニットの入力110Bに送り、フェッチ・ユニット110に命令を全速でフェッチするように命令する。その場合、プロセッサはBIQ205のブランチ命令のための予測において高信頼性を示す。こうして、ブランチ命令の投機的実行が全速で進行し、フェッチ・ユニットのスロットリングも電力節約も生じない。しかし、もし任意の時刻にフェッチFTSMWIF230がスロットリング・モードで動作しているなら、特定の現在発行されるブランチ命令が所定の低信頼性閾値よりも低いブランチ予測信頼性を表し、その結果ブランチ再指向が起こりがちとすれば、FTSMWIF230はフェッチ・スロットリングを禁止し、プロセッサ速度を全速にし続けるようフェッチングするのを許容する。
図3は、プロセッサ300として開示されたプロセッサの単純化した表現を示す。プロセッサ300はプロセッサ100中のものに似た多くのエレメントを含む。前述のとおり、その開示された電力節約方法は低信頼性ブランチのグループの処理中、フェッチ・スロットリングにより電力を維持する。フェッチ・スロットリング技法一つで電力を維持するが、それは増加したフェッチ待ち時間の観点からはプロセッサの性能に無視できないほどのマイナスのインパクトを与える。前述のとおり、フェッチ・スロットリングの際の電力節約をなおも達成しながら、プロセッサの性能へのこのマイナスのインパクトを減らすことが望ましい。
ある条件下では、電力の維持に過度のインパクトを与えずにプロセッサの性能を上げるようにフェッチ・スロットリングを禁止することができる。たとえば、もしフェッチされた命令ストリームからの特定の現在発行されるブランチ命令が低信頼性の予測を示すなら、プロセッサ300は以前にオンにしたフェッチ・スロットリングを切ってもよい。何故ならばBIQ205におけるブランチ命令のグループが低信頼性に予測を示すからである。
一実施例では、プロセッサ300が、複数のパイプライン・ステージを含む同時マルチ・スレッディング(SMT)プロセッサである。プロセッサ300は、キャッシュ・メモリないしIキャッシュ(ICASCH)310を介して外部システムメモリ(図示せず)に結合するフェッチ・ユニット305を含む。 Iキャッシュ310は、Iキャッシュ310からフェッチされた命令をデコードするデコーダ315に結合する。デコーダ315はレジスタ・リネーミング回路320を介して発行ステージないし発行ユニット325に結合する。レジスタ・リネーミング回路320はフェッチされた命令の実行を促進するために追加のレジスタを提供する。発行ユニット325は、解読された命令を実行するための適切な機能ユニットに送る。プロセッサ300は、以下の機能ユニットを含む。すなわち整数もしくは固定小数点実行ユニット(FXU)330、浮動小数点実行ユニット(FPU)335、ロード/ストア実行ユニット(LSU)340、ベクトル・メディア実行ユニット(VMX)345、およびブランチ実行ユニット(BRU)350を含む。FXU330およびFPU335は、レジスタ・ファイル330Aおよび335Aを含み、夫々計算結果をストアする。
ブランチ命令実行ユニット(BRU)350は発行ユニット325に結合し、そこから受取るブランチ命令を実行する。BRU350は、ブランチ予測ユニット355およびフェッチ・ユニット305の両方に結合する。実行ユニットであるFXU330、LSU340、FPU335、VMX345およびBRU350は、デコードされたブランチ命令後の命令ストリーム中の命令を投機的に実行する。ブランチ予測ユニット355は、ブランチ履歴テーブル(BHT)357を含み、フェッチ・ユニット305に結合する。BHT357は、以前に実行されたブランチ命令の履歴を追跡する。ブランチ・ユニット(BRU)550はこのブランチ実行の履歴情報を、それが現在受取っているブランチ命令のためのブランチ予測をするために使用する。
完了ユニット365は、FXU330、FPU335、LSU340、VMX345およびBRU350といった各実行ユニットに結合する。もっと具体的には、完了ユニット365はFXUレジスタ・ファイル330A、FPUレジスタ・ファイル335Aに結合する。完了ユニット365は投機的に実行される命令が完了すべきか否かを決定する。もしブランチ予測ユニット355がブランチを正しく予測するなら、そのブランチに続く命令が完了すべきである。例えば、ブランチ予測ユニット355がブランチを正しく予測するなら、そのブランチに続く固定小数点もしくは整数の命令が完了すべきである。もし正しく予測されるブランチに続く命令が固定小数点命令であれば、完了ユニット365がそのブランチの固定小数点結果を固定小数点レジスタ・ファイル330Aに書き戻すのを制御する。もし正しく予測されたブランチに続く命令が浮動小数点命令であれば、完了ユニット365は浮動小数点命令の結果を浮動小数点レジスタ・ファイル335Aに書き戻すのを制御する。命令が完了するとき、それらは最早投機的ではない。BRU350は、特定のブランチ命令が採用されるか採用されないかを決着するために完了ユニット365およびBHT367と協働して動作する。
図3のプロセッサ300は、図1のフェッチ・スロットル・コントローラ200に似た態様で一実施例では動作するフェッチ・スロットル・コントローラ370を含む。具体的には、一実施例で、フェッチ・スロットル・コントローラ370は、ブランチ命令キュー(BIQ)372および信頼性キュー(CQ)374を含む。フェッチ・スロットル・コントローラ370はまた、フェッチ・ユニット305による命令フェッチングのスロットリングを制御するFTSMWIF376を含む。ブランチ命令キュー(BIQ)372はそれがフェッチ・ユニット305から受取るブランチ命令をストアする。BIQ372中のブランチ命令毎に、信頼性キュー374はブランチ予測ユニット355が提供するブランチの予測の信頼性のレベルを示す個別の信頼性情報をストアする。BIQ372はブランチ命令の有効なのと無効なのとの両方を含んでもよい。無効なブランチ命令は、以前に決着されたがまだBIQ372中に残っている投機的に実行されるブランチ命令である。BIQ372中の残りの有効なブランチ命令はまだ「実行中(in flight)」のブランチ命令であって、いわば完了ユニット365がまだ決着しなかった投機的に実行されるブランチ命令である。
フェッチ・スロットル・コントローラ370は、電力を維持するためにIキャッシュ310からの命令のフェッチングをスロットルするようフェッチ・ユニット305に或る所定の条件の下で命令するFTSMWIF376を含む。もし相互に累積的に取られたBIQ372中の有効なブランチ命令が、夫々のブランチ予測における第1の所定量よりも低い信頼性を表すなら、FTSMWIF376は電力を節約ようにフェッチ・スロットリングの開始を命令してもよい。しかし、一旦そのようなスロットリングが開始すると、BIQ372中の特定の現在発行されるブランチ命令が第2の所定の量よりも低い信頼性を表すなら、フェッチ・コントローラ375は所定の比較的短い時間窓の間、フェッチ・スロットリングを禁止する。
一実施例では、FTSMWIF 376が前述の信頼性決定を行うための第1および第2のテストを行う。具体的には、相互に累積的に取られたBIQ372中の有効なブランチ命令が第1の所定量の信頼性閾値よりも低い信頼性を表すかを決定するための第1のテストをFTSMWIF376が行う。もし相互に累積的に取られたBIQ372中の有効なブランチ命令が第1の所定量の信頼性閾値よりも低い信頼性を示すなら、FTSMWIF376はフェッチ・スロットリングの開始を命令してもよい。FTSMWIF376がフェッチ・スロットリングを開始した後、FTSMWIF376はBIQ372中の特定の現在発行されるブランチ命令上で第2のテストを行う。これはその特定の現在発行されるブランチ命令が第2の所定の量の信頼性値よりも低い信頼性を表すか決定するテストである。もしその特定の現在発行されるブランチ命令が第2の所定量の信頼性値よりも低い信頼性なら、ブランチ再指向という起こりそうなイベントにおける性能を増進するためにフェッチ・スロットリングの禁止をFTSMWIF376が命令してもよい。
一実施例では、デザイナーは、第2のテストが採用するブランチ命令中の信頼性を、ブランチ命令予測時点で引き出される信頼性値であって、そのブランチのために信頼性キュー374がストアする値に対応するものを基にする。他の実施例では、FTSMWIF376がこの信頼性情報を特定のブランチの性質など他の命令特性から得る。例えば、間接ブランチもしくはPC相対条件フォワードブランチ(PC-relative conditionforeward branches)は低い信頼性を推察させるのに使用可能である。 これに比べて、無条件ブランチ命令、サブルーチンに経路付けするブランチ命令(例えば、Power Architecture(商標)におけるリンク・レジスタへのブランチ(blr)命令)からの戻り、およびバックワードPC相対条件付きブランチ命令は、高い信頼性を推察させるのに使用可能である。
一実施例では、プロセッサ300がBIQ372もしくは信頼性キュー374の少なくとも一つにおける第2の信頼性テストの間、その信頼性情報をストアしてもよい。他の実施例では、この情報を、プロセッサ300が、BIQ372もしくは信頼性キュー374からの読出し動作を行うという余分の待ち時間を少なくするためにBIQ372中のブランチとともにストアしてもよい。
開示されたプロセッサ300の別異の実施例では、プロセッサがフェッチ・スロットリングを禁止する期間中の所定の時間窓のために異なる時間値もしくは設定を用いてもよい。一実施例では、プロセッサ300は正確に1サイクルの間、フェッチ・スロットリングを禁止する。フェッチ・スロットリングをそのプロセッサ300がディスエーブルする代わりに、その1サイクルの間、現在のブランチ命令が再指向に対応する第1のフェッチを生じさせるかもしれない。他の実施例では、プロセッサ300がフェッチ・スロットリングの複数のサイクルを用いることができる。この複数のサイクルは、第1の再指向サイクルを含む。その禁止するブランチに対応する再指向にその第1のフェッチが応答する。また第2のサイクルを含むが、これは第1のフェッチ再指向サイクルに続くフェッチに対応する次のフェッチ・サイクルに対応する。プロセッサの一実施例は、ハードウエア・デザイン時に第2のテストのために設定する特定の時間窓を決定してもよい。他の実施例では、この時間窓が電力管理ツール、ファームウエア、ハイパーバイザ、オペレーティング・システムもしくはアプリケーションによってプログラム可能である。
図3のフェッチ・スロットル・コントローラ370は、BIQ372中の有効なブランチの予測における累積的な信頼性が第1の所定の信頼性レベルよりも低いとき、フェッチ・ユニット305による命令のフェッチングをスロットルする。換言すると、フェッチ・スロットル・コントローラ370は、BIQ372中の有効なブランチ命令に関係付けられた信頼性キュー374中の信頼性ビットが一緒になったものが第1の所定の信頼性レベルよりも低いとき、フェッチ・スロットリングを開始する。この第1の信頼性テストは、「累積信頼性テスト」である。そこではそれはBIQ372中のグループとしての複数個の有効なブランチ命令の統合した信頼性を考慮している。開示されたプロセッサは、第1の累積信頼性テストにおいて累積した信頼性のレベルを決定するのに用いるフェッチ・スロットル・コントローラ370を使用してもよい。
フェッチ・コントローラ370はまた第2の信頼性テスト、すなわち、発行ユニット325が発行のために現在選択しているブランチ命令毎の信頼性テストを行う。これは、発行ステージもしくは発行ユニットともいう発行ユニット325が発行のために選択するブランチ命令毎にこのテストをフェッチ・スロットル・コントローラ370が行うという点で「個別信頼性テスト」である。このテストは特定のブランチ命令が第2の所定の信頼性レベルよりも低いレベルを示すかを決定する。もし特定のブランチ命令が第2の所定の信頼性レベルよりも低いレベルを示すなら、フェッチ・スロットル・コントローラ370は所定の期間、フェッチ・スロットリングを禁止、抑制もしくは無効にする。換言すると、これらの条件下では、プロセッサの性能を増進させるため所定の期間、第1の累積信頼性テストにおいて導き出されるフェッチ・スロットリングの指示に関係なく、フェッチ・スロットル・コントローラ370が命令フェッチングを再イネーブルする。一実施例では、フェッチ・スロットリングを禁止するため、フェッチ・スロットル・コントローラ370がフェッチ・ユニット305に命令して、全速でのフェッチング命令を再開するようにする。発行の時点でこの態様でフェッチングを再度イネーブルすることによって、BRU350はフェッチ・ユニット305による使用のため丁度間に合うように再指向アドレスを発生する。この結果、プロセッサ性能の顕著な増進が得られる。この所定の期間後もしくは所定の期間の窓の時間経過後、もしフェッチ・スロットル・コントローラ370中の有効なブランチ命令がグループとして第1の所定の信頼性レベルよりも低い信頼性の累積レベルを示すことを、第1の累積信頼性テストが示すなら、フェッチ・スロットル・コントローラ370はフェッチ・スロットリングを再開してもよい。フェッチ・スロットリングを禁止することは、フェッチ・スロットリングを無効にすること、終了させることおよび停止させることを含む。一つの代替実施例では、第1の累積信頼性テストがフェッチ・スロットリングの使用を示し、かつそのプロセッサが命令フェッチングを禁止もしくは抑制すべきことを第2の個別信頼性テストが示すとき、プロセッサはそのプロセッサの通常のフェッチ速度よりも下げたフェッチ速度で命令フェッチングを行ってもよい。一実施例では、特定のブランチ命令が第2の所定の信頼性レベルよりも低いことを示すときブランチ再指向が起こりそうなことを予期してフェッチ・スロットリング禁止を行うといったようにフェッチ・スロットリング禁止は投機的である。
図4は、プロセッサの性能を増進するためにプロセッサ300が採用するフェッチ・スロットリング禁止技法を示すフローチャートである。禁止機能付きフェッチ・スロットル・マシーン(FTSMWIF)376は、命令キャッシュ(Iキャッシュ)310からの命令のフェッチングのスロットリング、および命令のフェッチングのスロットリングの禁止の両方を制御するスロットル信号(THROTTLE)を発生する。プロセスのフローは、プロセッサを初期化するブロック405にあるように、プロセッサ300が初期化するとき開始する。ブロック410にあるように、プロセッサ・デザイナー、ユーザーもしくは他のエンティティが、FTSMWIF376に適切な入力選択を与えることによって、FTSMWIF376をイネーブルもしくはディスエーブルする。判断ブロック415にあるように、FTSMWIF376がイネーブルされた状態を示すかを決定するテストを行う。もしFTSMWIF376がイネーブルされた状態を示さないなら、ブロック420にあるように、フェッチ・スロットリングなしに、全速でフェッチ命令を続行する。しかし、もしFTSMWIF376がイネーブルされた状態を示すなら、フェッチ・スロットリングが適切な状態の下で開始してもよい。
もしFTSMWIF376がイネーブルされた状態を示すなら、フェッチ・ユニット305は命令をフェッチし、フェッチ・スロットル・コントローラ370がブランチ予測ユニット355のブランチ履歴テーブル(BHT)357を読出して、そのフェッチされたブランチ命令のためのブランチ予測を観察できるようにする(ブロック425参照)。フェッチ・ユニット305はBIQ372へのフェッチされた命令ストリームのためのブランチ命令を与える。BIQ372はそのエントリとして、そのようなフェッチされたブランチ命令を書込む(ブロック430参照)。こうしてBIQ372は現在「実行中(in-flight)」もしくはまだ決着していない命令ストリーム中のそのようなブランチ命令を含むブランチ命令のグループをストアする。そのような「実行中の」ブランチ命令は有効なブランチ命令である。BIQ372はまた、フェッチ・スロットル・コントローラ370が無効なブランチ命令であるとして取り扱うような幾つかの古い決着されたブランチ命令を含む。信頼性キュー374は、BIQ372のブランチ命令エントリ毎の信頼性ビットのような信頼性情報をストアする(ブロック430参照)。1という信頼性ビットは、ブランチ予測ユニット355が個々のブランチ命令のために為すブランチ予測において高信頼性を示す。0という信頼性ビットは、ブランチ予測ユニット355が個々のブランチ命令のために為すブランチ予測において低信頼性を示す。
フェッチ・スロットル・コントローラ370が、一実施例ではその信頼性ビットと個々の有効ビットとをアンドすることによって、信頼性キュー374中の信頼性ビットに資格を与える(ブロック435参照)。FTSMWIF376が、ブランチ命令キュー(BIQ)372中の有効ブランチ命令のための累積ブランチ命令グループ(CBIG)の信頼性レベルを決定する(ブロック440)。一実施例では、FTSMWIF376が、BIQ372の個々の有効なブランチ命令のための信頼性キュー374中の信頼性ビットもしくは信頼性情報を一緒に加え、累積ブランチ命令グループ(CBIG)信頼性レベルを形成する。CBIG信頼性レベルは、BIQ372が現在ストアする有効なブランチ命令のためブランチ予測における信頼性の量を示す。プロセッサが命令ストリームの命令を実行するとき、BIQ372がストアするブランチ命令が変化するにつれ、この信頼性レベルが変化する。当業者は、図4のステップ430、435および440のうちの1個もしくはそれ以上を適応させ、および/もしくは置き換えることによって、第1の累積ブランチ命令グループ(CBIG)の信頼性レベルを決定するための他の方法と組み合わせるよう、図4に開示されたフェッチ・スロットリング禁止方法を調整しあるいは修正してもよい。
FTSMWIF376は、現在の累積ブランチ命令グループ(CBIG)の信頼性レベルが第1の所定の信頼性閾値よりも低いか調べるための第1のテストを行う(ブロック445参照)。もしYESなら、BIQ372中の有効ブランチ命令のための分岐予測が全体として低い信頼性を示す。一実施例では、デザイナーもしくは他のエンティティが第1の所定の信頼性閾値を選択する。この閾値は、もしCBIG信頼性レベルが第1の所定の信頼性閾値よりも低ければ、BIQ372中のブランチのためでないよりもブランチ予測ミスとなりそうな閾値である。もし、CBIG信頼性レベルが第1の所定の信頼性閾値よりも低くはないと判断ブロック445のテストが決定するならば、フェッチ・スロットル・コントローラ370はフェッチ・スロットリングを開始しない(ブロック450参照)。FTSMWIF376は、フェッチ・ユニット305にIキャッシュ310からの命令のフェッチングを全速で続けるように命令するスロットル信号を発生する。プロセスの流れはブロック425に戻り、命令フェッチングが全速で続く。
しかし、もしそのCBIG信頼性レベルが第1の所定の信頼性閾値よりも現在低いと判断ブロック445のテストが決定するなら、フェッチ・スロットル・コントローラ370はプロセッサの電力消費を少なくするためにフェッチ・スロットリングを開始する(ブロック455参照)。具体的には、フェッチ・ユニット305がIキャッシュ310からの命令をフェッチするときの割合ないし速度を減らすようにフェッチ・ユニット305に命令するスロットル信号をFTSMWIF376が発生することによって、フェッチ・スロットリングを賦活する。BIQ372中の有効なブランチ命令のグループに対する全体のブランチ予測信頼性が低いときに電力を節約するために、フェッチ・スロットリングが開始する。幾つかの異なるフェッチ・スロットリング・パターンが異なる量のフェッチ・スロットリングを達成するために可能である。一実施例では、プロセッサが比較的低いCBIG信頼性値の場合にはより積極的にスロットルするように、また第1の閾値よりも下で比較的高いCBIG信頼性値の場合には控えめにスロットルするように、特定の信頼性値に基づいてフェッチ・スロットル・パターンを適用可能に選択してもよい。
一実施例では、一旦フェッチ・スロットリングが開始すると、BIQ372中の各ブランチ命令をいつ発行するかFTSMWIF376に知らせる発行ユニットすなわち発行ユニット325からの発行情報をFTSMWIF376が受取る(ブロック460参照)。この発行情報は、発行ユニット325が、実行のためBRU350に現在発行されるブランチ命令を送ったことをFTSMWIF376に知らせるブランチ発行情報を含む。FTSMWIF376は、発行ユニット325がブランチ命令を発行するとき現在発行されるブランチ命令の信頼性キュー374における個々の信頼性をチェックする(ブロック462参照)。BIQ372中のその特定の現在発行されるブランチ命令のためのブランチ予測における信頼性が第2の所定の信頼性閾値よりも低いか決定するため第2のテストを行う(判断ブロック465参照)。
一実施例では、プロセッサ300は、ブランチ命令予測時点でフェッチ・スロットル・コントローラ370が引き出しかつ信頼性キューがストアする信頼性値に対応する信頼性値上の第2のテストで解析されるブランチ予測における信頼性をベースにする。このプロセッサは、特定のブランチ命令の性質など、命令特性からこの信頼性情報を引き出すのでもよい。例えば、間接ブランチ命令もしくはPC相対条件フォワードブランチ命令にはプロセッサが低信頼性を推察することができる。これに比べて、無条件ブランチ命令、サブルーチンに経路付けするブランチ命令(例えば、Power Architecture(商標)におけるリンク・レジスタへのブランチ(blr)命令)からの戻り、およびバックワードPC相対条件付きブランチ命令は、プロセッサが高信頼性を推察することができる。プロセッサの一実施例は、少なくとも1個の信頼性キューにおける第2のテストのために信頼性情報をストアする。例えば、信頼性情報を使用するため、フェッチ・スロットル・コントローラ370は信頼性キュー374から信頼性情報を取り出す。他の実施例では、ブランチ命令キュー(BIQ)もしくはCQから読出し動作を行う余分の回転待ち時間を減らすためにBIQ中の個々のブランチ命令とともに直接第2のテストのための信頼性情報をプロセッサがストアする。
もし特定の現在発行されているブランチ命令の予測の信頼性が第2の所定の閾値よりも低くはないなら、FTSMWIF376はフェッチ・スロットリングを続行するようにフェッチ・ユニット305に命令する。その場合は、フローはフェッチ・ブロック425に戻って続行する。しかし、もし特定の現在発行されているブランチ命令のための予測の信頼性が第2の所定の閾値よりも低いなら、FTSMWIF376は所定の期間の時間窓の間、フェッチ・スロットリングを禁止する(ブロック470参照)。一実施例では、このスロットリングを禁止する時間窓は比較的に短い期間を示す。フェッチ・スロットル・コントローラ370が命令フェッチ・スロットリングを禁止するこの時間窓について、異なる実施例のプロセッサが異なる期間を用いてもよい。他の実施例は、現在のブランチが正確に1サイクルの間、フェッチ・スロットリングを禁止する。その1サイクルは、現在のブランチが、そのスロットリングが禁止されている代わりに、再指向に対応する第1のフェッチを生じさせるかもしれないときのサイクルに対応する。他の実施例では、プロセッサが複数のサイクルの間、フェッチ・スロットリングを禁止してもよい。この複数のサイクルは、第1のフェッチがその禁止するブランチに対応する再指向に応答する第1の再指向サイクルと、第1のフェッチ・サイクルに続くフェッチに対応する次のフェッチ・サイクルに対応する第2のサイクルとを更に含む。
このスロットリング禁止窓の期間経過後、FTSMWIF376は、フェッチされたスロットリングが再開するようにフェッチを禁止しもしくは無視するのを停止する(ブロック475参照)。プロセスの流れはフェッチ・ブロック425に戻り続ける。累積ブランチ命令グループ(CBIG)の信頼性レベルが判断ブロック445での第1の所定の閾値よりも最早低いとき、フェッチ・スロットリングが止まり、全速フェッチングが戻る。
前述の実施例において、FTSMWIF376は、ブランチ命令のグループのためのその累積ブランチ命令グループ(CBIG)の信頼性レベルがフェッチ・スロットリングに値するほど低いか決定するためその信頼性レベルをモニタする。等価な実施例では、ブランチ命令のグループのための予測における信頼性レベルの累積的なブランチの欠如をFTSMWIF376がモニタすることができるが、それはそのような信頼性の欠如がフェッチ・スロットリングに値するほど高いか決定するためである。FTSMWIF376はこれらの2つの等価な条件のうちのいずれかを使用してフェッチ・スロットリングを始めるきっかけとしてもよい。
一実施例では、特定の現在発行されるブランチ命令が第2の所定の信頼性閾値よりも低いブランチ予測信頼性を示すのを見出す第2のテストに応答して、フェッチ・スロットル・コントローラ370は、特定のブランチがフェッチ・ユニット305に、メモリ中の新しいロケーションからフェッチするよう指示するであろう時刻に開始し、そしておそらくはその後も1サイクルもしくはより多くのサイクル、スロットリングを続けるのを再度許容する。換言すると、FTSMWIF376は発行ユニット325が発行のため低信頼性ブランチ命令を選択するときはいつでもフェッチ・スロットリングを投機的にディスエーブルする。フェッチングをこの時点で再度イネーブリングすることによって、ブランチ・ユニット350はフェッチ・ユニット305による使用のために丁度間に合うように再指向アドレスを発生する。フェッチ・スロットリングをディスエーブリングすることは、全速でフェッチングを再度イネーブリングすることと等価である。
FTSMWIF376がブランチ命令のグループのための累積ブランチ命令グループ(CBIG)の信頼性レベルをモニタして、そのような信頼性レベルがフェッチ・スロットリングに値するほど低い、すなわち第1の所定の閾値より低いか決定する実施例に対するフェッチ・スロットリング禁止をここで要約する。そのような実施例では、特定の現在発行されるブランチ命令が第2の所定の閾値よりも低い信頼性を示すときFTSMWIF376がフェッチ・スロットリングを禁止する(図4のフローチャートのブロック465参照)。
FTSMWIF376がブランチ命令のグループのための累積ブランチ命令グループ(CBIG)の信頼性欠如のレベルをモニタして、そのような信頼性欠如のレベルがフェッチ・スロットリングに値するほど高い、すなわち第1の所定の信頼性欠如の閾値より高いか決定する実施例に対するフェッチ・スロットリング禁止をここで要約する。そのような実施例では、特定の現在発行されるブランチ命令が第2の所定の信頼性欠如の閾値よりも高い信頼性欠如を示すときFTSMWIF376がフェッチ・スロットリングを禁止する。換言すると、FTSMWIF376は、図4のフローチャートの判断ブロック465を、以下のテストと置き換える。すなわち特定の現在発行されるブランチ命令が、第2の所定の信頼性欠如の閾値よりもそのブランチ予測において高い信頼性欠如をいつ示すかを決定するテストと置き換える。
図5は、プロセッサ100もしくは300を用いる情報処理システム(IHS)を示す。IHSは、情報を処理し、転送し、通信し、変形し、ストアし、もしくはディジタル形式、アナログ形式もしくは他の形式で取り扱うシステムである。IHS500は、プロセッサ100,300をメモリ・コントローラ520およびメモリ・バス522を介してシステム・メモリ510に結合するバス505を含む。ビデオ・グラフィックス・コントローラ525がディスプレイ530をバス505に結合する。不揮発性ストレージ535は、ハード・ディスク・ドライブ、CDドライブ、DVDドライブ、もしくは他の不揮発性ストレージであるが、バス505に結合し、IHS500に情報の恒久的なストレージを提供する。オペレーティング・システム540は、IHS500の動作を統括するためにメモリ510にロードする。I/O装置545は、キーボードおよびマウス・ポインティング装置などであるが、I/Oコントローラ550およびI/Oバス555を介してバス505に結合する。1個もしくはそれ以上の拡張バス560は、USB、IEEE1394バス、ATA,SATA,PCI、PCIEおよび他のバスであるが、バス505に結合して、IHS500に周辺装置および装置を結合するのを促進する。ネットワーク・アダプタ565はバス505に結合し、IHS500が有線もしくは無線によりネットワークおよび他の情報処理システムに結合するのを可能にする。図5が、プロセッサ100もしくは300を用いる一つのIHSを示すが、そのIHSは多くの形態をとることができる。例えば、IHS500は、デスクトップ、サーバー、ポータブル、ラップトップ、ノートブック、もしくは他のフォーム・ファクタのコンピュータまたはデータ処理システムの形態をとることができる。IHS500は、ゲーム装置、パーソナル・ディジタル・アシスタント(PDA)、携帯電話装置、通信装置もしくはプロセッサおよびメモリを含む他の装置など、他のフォーム・ファクタをとってもよい。
本発明の変形した代替実施例は本発明のこの記述からみて当業者には明らかであろう。従って、ここでの記述は当業者に本発明を実施する態様を教示し、説明用として構成されることを意図している。図示しまた記述した本発明の形式は本発明の実施例を構成する。当業者は部品の形状、サイズおよび配列に種々の変更を行うことができる。例えば、当業者はここで描きまた記述したエレメントと等価なエレメントを置き換えることができる。更に、本発明のこの記述の利益を受けた後の当業者は、本発明の範囲から逸れずに、本発明の特徴を、他の特徴の使用とは独立に使用してもよい。
添付図面は本発明の実施例のみを示し、従ってその範囲を限定するものではない。本発明の概念がそれ自体を他の等しく効果的な実施例に当て嵌めるからである。
フェッチ・スロットリングとともに禁止機能を採用する、ここで開示するプロセッサのブロック図である。 図1のプロセッサが含むフェッチ・スロットル・コントローラのブロック図を示す。 開示されたプロセッサの単純化したブロック図を示す。 図3のプロセッサがフェッチ・スロットリング動作を行う際、図3のプロセッサにおけるプロセスの流れを示すフローチャートである。 図1のプロセッサまたは図3のプロセッサを採用する情報処理システム(IHS)のブロック図である。
符号の説明
100 プロセッサ
105 メモリ
110 フェッチ・ユニット
110A 命令アドレス・ユニット
110B スロットル入力
115 デコーダ
116 レジスタ・リネーミング・ステージ
117 発行ユニット
120 固定小数点ユニット(FXU)
120A レジスタ・ファイル(RF)
125 浮動小数点ユニット(FPU)
130 ロード・ストア・ユニット(LSU)
125A レジスタ・ファイル(RF)
130 ロード・ストア・ユニット(LSU)
135 ブランチ・ユニット(BRU)
140 ブランチ予測ユニット
142 ブランチ履歴ユニット(BHT)
145 完了ユニット
200 フェッチ・スロットル・コントローラ
205 ブランチ命令キュー(BIQ)
210 信頼性キュー(CQ)
215 ヘッド・ポインタ
220 テール・ポインタ
225 制御論理
230 禁止機能を備えたフェッチ・スロットル状態マシーン(FTSMWIF)
235 アンド回路
235A アンド回路入力
235B ライン入力
240 有効ベクトル発生回路
245 有効ベクトル
250 加算器
255 比較器
260 プログラマブル閾値回路
300 プロセッサ
305 フェッチ・ユニット
310 命令キャッシュ(Iキャッシュ)
315 デコーダ
320 レジスタ・リネーミング回路
325 発行ユニット
350 ブランチ・ユニット(BRU)
355 ブランチ予測ユニット
357 ブランチ履歴ユニット(BHT)
370 フェッチ・スロットル・コントローラ
372 ブランチ命令キュー(BIQ)
374 信頼性キュー(CQ)
376 禁止機能を備えたフェッチ・スロットル状態マシーン(FTSMWIF)
500 情報処理システム(IHS)
505 バス
510 システム・メモリ
520 メモリ・コントローラ
525 ビデオ・グラフィックス・コントローラ
530 ディスプレイ
535 不揮発性ストレージ
540 オペレーティング・システム
545 I/O装置
550 I/Oコントローラ
555 I/Oバス
560 拡張バス
565 ネットワーク・インターフェイス
630 メモリ・バス

Claims (20)

  1. フェッチされたブランチ命令を含む命令ストリームを提供するために命令ソースから命令を、フェッチ・ユニットによりフェッチするステップと、
    前記フェッチされたブランチ命令の結果を、ブランチ予測ユニットにより予測するステップであって、前記フェッチされたブランチ命令のための個々のブランチ予測を提供する前記予測するステップと、
    前記フェッチされたブランチ命令を、発行ユニットにより、実行のためのブランチ実行ユニットに発行するステップと、
    グループとしての、ブランチ命令キュー中の前記フェッチされたブランチ命令が、第1の所定のブランチ予測信頼性閾値よりも低いことを示すなら、前記フェッチ・ユニットによる命令のフェッチングを、フェッチ・スロットル・コントローラによりスロットリングするステップと、
    前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が、第2の所定のブランチ予測信頼性閾値よりも低いことを示すなら、命令の前記フェッチングの前記スロットリングを、前記フェッチ・スロットル・コントローラにより禁止するステップとを含む、
    プロセッサを動作させる方法。
  2. 前記スロットリングするステップは、前記ブランチ命令キュー中のグループとしての前記フェッチされたブランチ命令が前記第1の所定のブランチ予測信頼性閾値よりも低いことを累積的に示すかを決定するための第1のテストを、前記フェッチ・スロットル・コントローラにより行うステップを含む、請求項1に記載の方法。
  3. 前記止するステップは、前記発行ユニットにより現在発行される前記特定のフェッチされたブランチ命令が、前記第2の所定のブランチ予測信頼性閾値よりも低いことを示すかを決定するための第2のテストを、前記フェッチ・スロットル・コントローラにより行うステップを含む、請求項1に記載の方法。
  4. 前記第1のテストが、前記ブランチ命令キュー中の、実行中のブランチ命令上で前記フェッチ・スロットル・コントローラにより行われる、請求項2に記載の方法。
  5. 前記止するステップが、所定の期間の窓の間、命令の前記フェッチングの前記スロットリングを、前記フェッチ・スロットル・コントローラにより停止するステップを含む、請求項1に記載の方法。
  6. 前記所定の期間の前記窓の時間経過後に、前記フェッチ・ユニットによりフェッチ・スロットリングに戻すステップを更に含む、請求項5に記載の方法。
  7. 前記ブランチ命令キュー中のフェッチされたブランチ命令毎の個々のブランチ予測信頼性閾値を、信頼性ストレージ・メモリによりストアするステップを更に含む、請求項1に記載の方法。
  8. 命令をストアする命令ソースと、
    フェッチされたブランチ命令を含む命令ストリームを提供するため、前記命令ソースからの命令をフェッチするように前記命令ソースに結合されたフェッチ・ユニットと、
    前記フェッチされたブランチ命令の結果を予測するブランチ予測ユニットであって、前記フェッチされたブランチ命令のために個々のブランチ予測を提供する前記ブランチ予測ユニットと、
    前記フェッチされたブランチ命令を、実行のためのブランチ実行ユニットに発行するように前記フェッチ・ユニットおよび前記ブランチ実行ユニットに結合された発行ユニットと、
    グループとしてのブランチ命令キュー中の前記フェッチされたブランチ命令が、第1の所定のブランチ予測信頼性閾値よりも低いことを示すなら、前記フェッチ・ユニットにより命令のェッチングをスロットルするように、かつ
    前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が、第2の所定のブランチ予測信頼性閾値よりも低いことを示すなら、命令の前記フェッチングのスロットリングをフェッチ・スロットル・コントローラが禁止するように、前記フェッチ・ユニットおよび前記発行ユニットに結合された前記フェッチ・スロットル・コントローラとを含む、プロセッサ。
  9. グループとしての、前記ブランチ命令キュー中のフェッチされたブランチ命令が、前記第1の所定のブランチ予測信頼性閾値よりも低いことを累積的に示すかを決定する第1のテストを行う、請求項8に記載のプロセッサ。
  10. フェッチされた命令の前記スロットリングを投機的に禁止する前に、前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が第2の所定のブランチ予測信頼性閾値よりも低いことを示すかを決定するための第2のテストを行う、請求項9に記載のプロセッサ。
  11. 前記第1のテストが、前記ブランチ命令キュー中の、実行中のブランチ命令上で前記フェッチ・スロットル・コントローラにより行われる、請求項9に記載のプロセッサ。
  12. 所定の期間の窓の間、命令の前記フェッチングの前記スロットリングを停止することによって、前記フェッチ・スロットル・コントローラが、命令の前記フェッチングの前記スロットリングを投機的に禁止する、請求項8に記載のプロセッサ。
  13. 所定の期間の前記窓の時間経過後に、前記フェッチ・スロットル・コントローラが、フェッチ・スロットリングに戻る、請求項12に記載のプロセッサ。
  14. 前記フェッチ・スロットル・コントローラが前記ブランチ命令キューを含み、かつ前記フェッチ・スロットル・コントローラが、フェッチされたブランチ命令毎の個々のブランチ命令信頼性値をストアする信頼性ストレージ・メモリを更に含む、請求項8に記載のプロセッサ。
  15. メモリ、および前記メモリに結合されたプロセッサを含む情報処理システムにおいて、前記プロセッサが、
    命令をストアする命令ソースと、
    フェッチされたブランチ命令を含む命令ストリームを提供するため、前記命令ソースから命令をフェッチするように前記命令ソースに結合されたフェッチ・ユニットと、
    前記フェッチされたブランチ命令の結果を予測するブランチ予測ユニットであって、前記フェッチされたブランチ命令のために個々のブランチ予測を提供する前記ブランチ予測ユニットと、
    前記フェッチされたブランチ命令を、実行のためのブランチ実行ユニットに発行するように前記フェッチ・ユニットおよび前記ブランチ実行ユニットに結合された発行ユニットと、
    グループとしてのブランチ命令キュー中の前記フェッチされたブランチ命令が、第1の所定のブランチ予測信頼性閾値よりも低いことを示すなら、前記フェッチ・ユニットにより命令のェッチングをスロットルするように、かつ
    前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が、第2の所定のブランチ予測信頼性閾値よりも低いことを示すなら、命令の前記フェッチングのスロットリングをフェッチ・スロットル・コントローラが禁止するように、前記フェッチ・ユニットおよび前記発行ユニットに結合された前記フェッチ・スロットル・コントローラとを含む、
    前記情報処理システム。
  16. グループとしての、前記ブランチ命令キュー中のフェッチされたブランチ命令が、前記第1の所定のブランチ予測信頼性閾値よりも低いことを累積的に示すかを決定する第1のテストを行う、請求項15に記載の情報処理システム。
  17. フェッチされた命令の前記スロットリングを投機的に禁止する前に、前記発行ユニットにより現在発行される特定のフェッチされたブランチ命令が第2の所定のブランチ予測信頼性閾値よりも低いことを示すかを決定するための第2のテストを行う、請求項16に記載の情報処理システム。
  18. 前記第1のテストが、前記ブランチ命令キュー中の、実行中のブランチ命令上で前記フェッチ・スロットル・コントローラにより行われる、請求項16に記載の情報処理システム。
  19. 所定の期間の窓の間、命令の前記フェッチングの前記スロットリングを停止することによって、前記フェッチ・スロットル・コントローラが、命令の前記フェッチングの前記スロットリングを投機的に禁止する、請求項15に記載の情報処理システム。
  20. 所定の期間の前記窓の時間経過後に、前記フェッチ・スロットル・コントローラが、フェッチ・スロットリングに戻る、請求項19に記載の情報処理システム。
JP2008311299A 2007-12-05 2008-12-05 プロセッサ、プロセッサを動作させる方法、および情報処理システム Active JP5285408B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/951112 2007-12-05
US11/951,112 US8006070B2 (en) 2007-12-05 2007-12-05 Method and apparatus for inhibiting fetch throttling when a processor encounters a low confidence branch instruction in an information handling system

Publications (2)

Publication Number Publication Date
JP2009140502A JP2009140502A (ja) 2009-06-25
JP5285408B2 true JP5285408B2 (ja) 2013-09-11

Family

ID=40722887

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008311299A Active JP5285408B2 (ja) 2007-12-05 2008-12-05 プロセッサ、プロセッサを動作させる方法、および情報処理システム

Country Status (4)

Country Link
US (1) US8006070B2 (ja)
JP (1) JP5285408B2 (ja)
CN (1) CN101452378B (ja)
TW (1) TW200939116A (ja)

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7925853B2 (en) * 2008-01-04 2011-04-12 International Business Machines Corporation Method and apparatus for controlling memory array gating when a processor executes a low confidence branch instruction in an information handling system
US8020167B2 (en) * 2008-05-05 2011-09-13 Dell Products L.P. System and method for automatic throttling of resources in an information handling system chassis
US9335980B2 (en) 2008-08-15 2016-05-10 Apple Inc. Processing vectors using wrapping propagate instructions in the macroscalar architecture
US9342304B2 (en) 2008-08-15 2016-05-17 Apple Inc. Processing vectors using wrapping increment and decrement instructions in the macroscalar architecture
US9335997B2 (en) 2008-08-15 2016-05-10 Apple Inc. Processing vectors using a wrapping rotate previous instruction in the macroscalar architecture
US20100332812A1 (en) * 2009-06-24 2010-12-30 Doug Burger Method, system and computer-accessible medium for low-power branch prediction
CN101604235B (zh) * 2009-07-10 2012-03-28 杭州电子科技大学 一种嵌入式处理器分支预测的方法
US9411599B2 (en) 2010-06-24 2016-08-09 International Business Machines Corporation Operand fetching control as a function of branch confidence
US9836304B2 (en) * 2010-11-15 2017-12-05 Advanced Micro Devices, Inc. Cumulative confidence fetch throttling
US9778934B2 (en) * 2010-11-16 2017-10-03 Advanced Micro Devices, Inc. Power efficient pattern history table fetch in branch predictor
EP2691854A1 (en) * 2011-03-30 2014-02-05 Freescale Semiconductor, Inc. A method and apparatus for controlling fetch-ahead in a vles processor architecture
US9389860B2 (en) 2012-04-02 2016-07-12 Apple Inc. Prediction optimizations for Macroscalar vector partitioning loops
US9116686B2 (en) 2012-04-02 2015-08-25 Apple Inc. Selective suppression of branch prediction in vector partitioning loops until dependency vector is available for predicate generating instruction
US9389868B2 (en) * 2012-11-01 2016-07-12 International Business Machines Corporation Confidence-driven selective predication of processor instructions
US11150721B2 (en) * 2012-11-07 2021-10-19 Nvidia Corporation Providing hints to an execution unit to prepare for predicted subsequent arithmetic operations
GB2514956B (en) * 2013-01-21 2015-04-01 Imagination Tech Ltd Allocating resources to threads based on speculation metric
US9489204B2 (en) * 2013-03-15 2016-11-08 Qualcomm Incorporated Method and apparatus for precalculating a direct branch partial target address during a misprediction correction process
US9817663B2 (en) 2013-03-19 2017-11-14 Apple Inc. Enhanced Macroscalar predicate operations
US9348589B2 (en) 2013-03-19 2016-05-24 Apple Inc. Enhanced predicate registers having predicates corresponding to element widths
US10496410B2 (en) * 2014-12-23 2019-12-03 Intel Corporation Instruction and logic for suppression of hardware prefetchers
DE102015208591B4 (de) * 2015-05-08 2016-12-08 Physik Instrumente (Pi) Gmbh & Co. Kg Piezoelektrischer Drehantrieb mit einem als Blattfeder ausgebildeten Spannmittel
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US11755484B2 (en) * 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10061584B2 (en) * 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US10474462B2 (en) 2016-02-29 2019-11-12 Qualcomm Incorporated Dynamic pipeline throttling using confidence-based weighting of in-flight branch instructions
US10331566B2 (en) 2016-12-01 2019-06-25 International Business Machines Corporation Operation of a multi-slice processor implementing adaptive prefetch control
CN108549400B (zh) * 2018-05-28 2021-08-03 浙江工业大学 基于对数增强型双幂次趋近律和快速终端滑模面的四旋翼飞行器自适应控制方法
US10776122B2 (en) 2018-06-14 2020-09-15 International Business Machines Corporation Prioritization protocols of conditional branch instructions
US11507380B2 (en) * 2018-08-29 2022-11-22 Advanced Micro Devices, Inc. Branch confidence throttle
US11216279B2 (en) * 2018-11-26 2022-01-04 Advanced Micro Devices, Inc. Loop exit predictor
US11003454B2 (en) * 2019-07-17 2021-05-11 Arm Limited Apparatus and method for speculative execution of instructions
US11620224B2 (en) * 2019-12-10 2023-04-04 Advanced Micro Devices, Inc. Instruction cache prefetch throttle
US11249764B2 (en) 2020-04-14 2022-02-15 Shanghai Zhaoxin Semiconductor Co., Ltd. Flushing in a microprocessor with multi-step ahead branch predictor and a fetch target queue
CN111459550B (zh) * 2020-04-14 2022-06-21 上海兆芯集成电路有限公司 具高度领先分支预测器的微处理器
US11508124B2 (en) * 2020-12-15 2022-11-22 Advanced Micro Devices, Inc. Throttling hull shaders based on tessellation factors in a graphics pipeline
US11776085B2 (en) 2020-12-16 2023-10-03 Advanced Micro Devices, Inc. Throttling shaders based on resource usage in a graphics pipeline
US11710207B2 (en) 2021-03-30 2023-07-25 Advanced Micro Devices, Inc. Wave throttling based on a parameter buffer
US11972264B2 (en) * 2022-06-13 2024-04-30 Arm Limited Micro-operation supply rate variation

Family Cites Families (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5742805A (en) * 1996-02-15 1998-04-21 Fujitsu Ltd. Method and apparatus for a single history register based branch predictor in a superscalar microprocessor
US5822577A (en) * 1996-05-01 1998-10-13 International Business Machines Corporation Context oriented branch history table
US6411156B1 (en) * 1997-06-20 2002-06-25 Intel Corporation Employing transistor body bias in controlling chip parameters
US6415388B1 (en) 1998-10-30 2002-07-02 Intel Corporation Method and apparatus for power throttling in a microprocessor using a closed loop feedback system
US6233645B1 (en) * 1998-11-02 2001-05-15 Compaq Computer Corporation Dynamically disabling speculative prefetch when high priority demand fetch opportunity use is high
US7035997B1 (en) * 1998-12-16 2006-04-25 Mips Technologies, Inc. Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors
US6272666B1 (en) * 1998-12-30 2001-08-07 Intel Corporation Transistor group mismatch detection and reduction
US6484265B2 (en) * 1998-12-30 2002-11-19 Intel Corporation Software control of transistor body bias in controlling chip parameters
US6393374B1 (en) * 1999-03-30 2002-05-21 Intel Corporation Programmable thermal management of an integrated circuit die
US6363490B1 (en) * 1999-03-30 2002-03-26 Intel Corporation Method and apparatus for monitoring the temperature of a processor
US6625744B1 (en) * 1999-11-19 2003-09-23 Intel Corporation Controlling population size of confidence assignments
US6564328B1 (en) * 1999-12-23 2003-05-13 Intel Corporation Microprocessor with digital power throttle
US6697932B1 (en) * 1999-12-30 2004-02-24 Intel Corporation System and method for early resolution of low confidence branches and safe data cache accesses
US6766441B2 (en) * 2001-01-19 2004-07-20 International Business Machines Corporation Prefetching instructions in mis-predicted path for low confidence branches
US6608528B2 (en) * 2001-10-22 2003-08-19 Intel Corporation Adaptive variable frequency clock system for high performance low power microprocessors
US7032116B2 (en) * 2001-12-21 2006-04-18 Intel Corporation Thermal management for computer systems running legacy or thermal management operating systems
US6931559B2 (en) * 2001-12-28 2005-08-16 Intel Corporation Multiple mode power throttle mechanism
US7281140B2 (en) * 2001-12-28 2007-10-09 Intel Corporation Digital throttle for multiple operating points
TW567408B (en) * 2002-03-29 2003-12-21 Uniwill Comp Corp Apparatus and method for controlling power and clock speed of electronic system
TWI262380B (en) * 2002-04-25 2006-09-21 Quanta Comp Inc Dynamic adjustment method for power consumption of computer system
US20040003215A1 (en) * 2002-06-28 2004-01-01 Evgeni Krimer Method and apparatus for executing low power validations for high confidence speculations
US6934865B2 (en) * 2002-07-09 2005-08-23 University Of Massachusetts Controlling a processor resource based on a compile-time prediction of number of instructions-per-cycle that will be executed across plural cycles by the processor
US6762629B2 (en) * 2002-07-26 2004-07-13 Intel Corporation VCC adaptive dynamically variable frequency clock system for high performance low power microprocessors
US6908227B2 (en) * 2002-08-23 2005-06-21 Intel Corporation Apparatus for thermal management of multiple core microprocessors
US7076672B2 (en) * 2002-10-14 2006-07-11 Intel Corporation Method and apparatus for performance effective power throttling
US7085945B2 (en) * 2003-01-24 2006-08-01 Intel Corporation Using multiple thermal points to enable component level power and thermal management
US7124321B2 (en) * 2003-02-10 2006-10-17 Sun Microsystems, Inc. Adaptive throttling
US7496776B2 (en) * 2003-08-21 2009-02-24 International Business Machines Corporation Power throttling method and apparatus
EP1658560B1 (en) * 2003-08-26 2009-06-10 International Business Machines Corporation Processor with demand-driven clock throttling for power reduction
US7240225B2 (en) * 2003-11-10 2007-07-03 Dell Products L.P. System and method for throttling power in one or more information handling systems
US7363517B2 (en) * 2003-12-19 2008-04-22 Intel Corporation Methods and apparatus to manage system power and performance
CN1270233C (zh) * 2003-12-24 2006-08-16 智慧第一公司 远跳跃及远呼叫指令的退回分支预测机制的处理器及方法
US7194641B2 (en) * 2004-01-22 2007-03-20 International Business Machines Corporation Method and apparatus for managing power and thermal alerts transparently to an operating system in a data processing system with increased granularity in reducing power usage and thermal generation
CN1280713C (zh) * 2004-03-09 2006-10-18 中国人民解放军国防科学技术大学 双栈返回地址预测器设计方法
US7334143B2 (en) * 2004-04-19 2008-02-19 Hewlett-Packard Development Company, L.P. Computer power conservation apparatus and method that enables less speculative execution during light processor load based on a branch confidence threshold value
US7418608B2 (en) * 2004-06-17 2008-08-26 Intel Corporation Method and an apparatus for managing power consumption of a server
US7330988B2 (en) * 2004-06-30 2008-02-12 Sun Microsystems, Inc. Method and apparatus for power throttling in a multi-thread processor
US7392366B2 (en) * 2004-09-17 2008-06-24 International Business Machines Corp. Adaptive fetch gating in multithreaded processors, fetch control and method of controlling fetches
US7478214B2 (en) * 2006-01-04 2009-01-13 Intel Corporation Clock-gated random access memory
US7627742B2 (en) * 2007-04-10 2009-12-01 International Business Machines Corporation Method and apparatus for conserving power by throttling instruction fetching when a processor encounters low confidence branches in an information handling system
US20080263325A1 (en) * 2007-04-19 2008-10-23 International Business Machines Corporation System and structure for synchronized thread priority selection in a deeply pipelined multithreaded microprocessor

Also Published As

Publication number Publication date
TW200939116A (en) 2009-09-16
US8006070B2 (en) 2011-08-23
CN101452378B (zh) 2011-11-23
CN101452378A (zh) 2009-06-10
JP2009140502A (ja) 2009-06-25
US20090150657A1 (en) 2009-06-11

Similar Documents

Publication Publication Date Title
JP5285408B2 (ja) プロセッサ、プロセッサを動作させる方法、および情報処理システム
US7627742B2 (en) Method and apparatus for conserving power by throttling instruction fetching when a processor encounters low confidence branches in an information handling system
US8255669B2 (en) Method and apparatus for thread priority control in a multi-threaded processor based upon branch issue information including branch confidence information
EP3001308B1 (en) Loop predictor-directed loop buffer
JP4811879B2 (ja) 最大パワーを制御するためのマイクロプロセッサ・リソースの相互排除アクティブ化のためのシステム及び方法
US7925853B2 (en) Method and apparatus for controlling memory array gating when a processor executes a low confidence branch instruction in an information handling system
US6282663B1 (en) Method and apparatus for performing power management by suppressing the speculative execution of instructions within a pipelined microprocessor
JP5917616B2 (ja) 事前通知技術を用いる、プログラムのシーケンシャルフローを変更するための方法および装置
KR101174560B1 (ko) 잘못된 추측성 업데이트의 링크 스택 복구
US8667257B2 (en) Detecting branch direction and target address pattern and supplying fetch address by replay unit instead of branch prediction unit
US20120079488A1 (en) Execute at commit state update instructions, apparatus, methods, and systems
EP3039532B1 (en) A data processing apparatus and method for controlling performance of speculative vector operations
US6735687B1 (en) Multithreaded microprocessor with asymmetrical central processing units
EP0901063A2 (en) Power management methods
US11693666B2 (en) Responding to branch misprediction for predicated-loop-terminating branch instruction
US11663007B2 (en) Control of branch prediction for zero-overhead loop
JP5247037B2 (ja) 半導体集積回路及びその制御方法
WO2002029556A2 (en) Incorporating local branch history when predicting multiple conditional branch outcomes

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111021

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130122

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130416

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130514

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130531

R150 Certificate of patent or registration of utility model

Ref document number: 5285408

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150