JP2009540412A - ローカル及びグローバル分岐予測情報の格納 - Google Patents

ローカル及びグローバル分岐予測情報の格納 Download PDF

Info

Publication number
JP2009540412A
JP2009540412A JP2009513671A JP2009513671A JP2009540412A JP 2009540412 A JP2009540412 A JP 2009540412A JP 2009513671 A JP2009513671 A JP 2009513671A JP 2009513671 A JP2009513671 A JP 2009513671A JP 2009540412 A JP2009540412 A JP 2009540412A
Authority
JP
Japan
Prior art keywords
instruction
branch
branch instruction
instructions
local
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.)
Granted
Application number
JP2009513671A
Other languages
English (en)
Other versions
JP5137948B2 (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 JP2009540412A publication Critical patent/JP2009540412A/ja
Application granted granted Critical
Publication of JP5137948B2 publication Critical patent/JP5137948B2/ja
Expired - Fee Related 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/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
    • 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
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • 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/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute

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)

Abstract

【課題】 条件分岐命令を実行し、分岐予測を行なうための、改善された方法及び装置を提供すること。
【解決手段】 本発明の実施形態は、分岐予測情報を格納する方法及び装置を提供する。一実施形態において、この方法は、分岐命令を受信することと、ローカル分岐予測情報についてのローカル予測可能性値を含む、分岐命令についてのローカル分岐予測情報を格納することとを含む。この方法は、ローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、分岐命令についてのグローバル分岐予測情報を格納することをさらに含む。
【選択図】 図4

Description

本発明は、一般に、プロセッサにおける命令の実行に関する。具体的には、本出願は、分岐命令を実行するプロセッサの効率を向上させることに関する。
現代のコンピュータ・システムは、典型的には、コンピュータ・システム内の情報を処理するために使用することができるプロセッサを含む、幾つかの集積回路(IC)を含む。プロセッサで処理されるデータは、プロセッサで実行されるコンピュータ命令、並びにコンピュータ命令を用いてプロセッサで操作されるデータを含むこともできる。典型的には、コンピュータ命令及びデータは、コンピュータ・システム内のメイン・メモリに格納される。
プロセッサは、典型的には、一連の小ステップで命令を実行することによって命令を処理する。場合によっては、プロセッサで処理される命令の数を増加させる(よって、プロセッサの速度を増大させる)ために、プロセッサをパイプライン化することができる。パイプライン化とは、プロセッサ内に、別個のステージ(段、stage)を設け、各々のステージが、命令を実行するのに必要な小ステップのうちの1つ又は複数を行なうことを言う。場合によっては、プロセッサ・コアと呼ばれるプロセッサの部分に、(他の回路に加えて)パイプラインを配置することができる。一部のプロセッサは、複数のプロセッサ・コアを有することができ、場合によっては、各々のプロセッサ・コアが複数のパイプラインを有することができる。プロセッサ・コアが複数のパイプラインを有する場合、命令のグループ(発行グループと呼ばれる)を複数のパイプラインに対して並行して発行し、各々のパイプラインにより並行して実行することができる。
パイプラインにおいて命令を実行することの一例として、第1の命令を受信したとき、第1のパイプライン・ステージは、命令の小部分を処理することができる。第1のパイプライン・ステージがその命令の小部分の処理を終了したとき、第2のパイプライン・ステージは、第1の命令の別の小部分の処理を開始することができ、その間に、第1のパイプライン・ステージは、第2の命令の小部分を受信し、その処理を開始する。したがって、プロセッサは、2つ又はそれ以上の命令を同時に(並行して)処理することができる。
プロセッサは、典型的には、条件が満たされた場合、コンピュータ・プログラムが1つの命令からターゲット命令に分岐する(これにより、もしあれば中間の命令がスキップされる)ことを可能にする条件分岐命令を提供する。条件が満たされない場合、ターゲット命令に分岐することなく、分岐命令の後の次の命令を実行することができる。典型的には、条件分岐命令が実行され、条件がテストされるまで、テストされる条件の結果は未知である。したがって、分岐条件がテストされるまで、条件分岐命令の後に実行される次の命令を知ることはできない。
命令を実行するためにパイプラインが用いられる場合、条件分岐命令がパイプラインの幾つかのステージを通過するまで、条件分岐命令の結果を知ることができない。したがって、条件分岐命令が、分岐条件の結果を判定するのに必要なステージを通過するまで、条件分岐命令の後に実行される次の命令を知ることができない。場合によっては、分岐条件をテストし、実行される次の命令が分かるまで、パイプラインにおける命令の実行をストールすることができる(例えば、命令を実行するために、分岐命令に先行するパイプライン・ステージを用いることはできない)。しかしながら、パイプラインをストールする場合、同数の命令を並行して実行するために、パイプラインは用いられておらず(条件分岐の前の幾つかのステージは、命令を実行していていないので)、パイプラインの利点が減少し、プロセッサ全体の効率が低下する。
場合によっては、プロセッサの効率を改善するために、分岐予測を用いて条件分岐命令の結果を予測することができる。例えば、条件分岐命令に遭遇したとき、プロセッサは、分岐条件の結果が分かった後にどの命令を実行するかを予測することができる。次に、条件分岐命令が発行されたときにパイプラインをストールする代わりに、プロセッサは、予測される次の命令から始まる命令の発行を続行することができる。
しかしながら、場合によっては、分岐予測が正しくないことがある(例えば、プロセッサは、条件分岐命令の1つの結果を予測できるものの、条件分岐命令が実行されたとき、正反対の結果が得られることがある)。条件分岐命令の結果が誤って予測された場合、条件分岐命令の後に引き続いてパイプラインに発行された予測命令をパイプラインから除去し、命令の効果を取り消すことができる(パイプラインのフラッシュと呼ばれる)。次に、パイプラインをフラッシュした後、条件分岐命令についての正しい次の命令をパイプラインに発行し、命令の実行を続行することができる。条件分岐命令の結果が誤って予測され、誤って予測された命令のグループがパイプラインからフラッシュされ、これによりパイプラインによってなされた前の作業が取り消された場合、プロセッサの効率が悪化することがある。
したがって、条件分岐命令を実行し、分岐予測を行なうための、改善された方法及び装置が必要とされる。
本発明の実施形態は、分岐予測情報を格納する方法及び装置を提供する。一実施形態において、この方法は、分岐命令を受信することと、ローカル分岐予測情報についてのローカル予測可能性値を含む、分岐命令についてのローカル分岐予測情報を格納することとを含む。この方法は、ローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、分岐命令についてのグローバル分岐予測情報を格納することをさらに含む。
本発明の実施形態はまた、分岐命令を実行する方法も提供する。一実施形態において、この方法は、分岐命令を受信することと、分岐命令についてのローカル分岐予測情報が格納されるかどうかを判定することとを含む。分岐命令についてのローカル分岐予測情報が格納された場合、ローカル分岐予測情報を用いて分岐命令の結果を予測する。分岐命令についてのローカル分岐予測情報が格納されない場合、分岐命令についてのグローバル分岐予測情報を用いて分岐命令の結果を予測する。分岐命令についてのローカル分岐予測情報のローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、命令についてのグローバル分岐予測情報が格納される。
本発明の実施形態はまた、ローカル分岐予測情報を格納するための第1のテーブルと、グローバル分岐予測情報を格納するための第2のテーブルと、回路とを含む、集積回路デバイスも提供する。一実施形態において、回路は、分岐命令を受信し、分岐命令についてのローカル分岐予測情報を第1のテーブル内に格納するように構成される。ローカル分岐予測情報は、ローカル分岐予測情報のローカル予測可能性値を含む。回路は、ローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、第2のテーブル内に、分岐命令についてのグローバル分岐予測情報を格納するようにさらに構成される。
本発明の上記の特徴、利点及び目的が得られる方法を詳細に理解することができるように、添付の図面に示されている本発明の実施形態を参照することによって、上記で簡潔に要約された本発明のより具体的な説明をなすことができる。
しかしながら、添付の図面は本発明の典型的な実施形態のみを図示するものであり、よって、本発明の範囲を限定するものとみなすべきではなく、本発明は他の等しく有効な実施形態も認め得ることに留意すべきである。
本発明の実施形態は、分岐予測情報を格納するための方法及び装置を提供する。一実施形態において、この方法は、分岐命令を受信することと、ローカル分岐予測情報のローカル予測可能性値を含む分岐命令についてのローカル分岐予測情報を格納することとを含む。この方法は、ローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、分岐命令についてのグローバル分岐予測情報を格納することをさらに含む。
以下において、本発明の実施形態が説明される。しかしながら、本発明は特定の説明される実施形態に限定されるものではないことを理解すべきである。代わりに、本発明を実施し、実行するために、異なる実施形態に関連していても関連していなくても、以下の特徴及び要素の任意の組み合わせが考慮される。さらに、種々の実施形態において、本発明は、従来技術に優る多数の利点を提供する。しかしながら、本発明の実施形態は、他の可能な解決法及び/又は従来技術に優る利点を達成できるものの、所定の実施形態によって特定の利点が達成されるかどうかは、本発明を制限するものではない。したがって、以下の態様、特徴、実施形態及び利点は、例証にすぎず、特許請求の範囲に明示的に列挙される場合を除いて、添付の特許請求の範囲の要素又は制限と考えられない。同様に、「本発明」への言及は、ここで開示されるあらゆる本発明の主題の一般化として解釈されるべきではなく、特許請求の範囲に明示的に列挙され場合を除いて、添付の特許請求の範囲の要素又は制限と考えるべきではない。
以下は、添付の図面に示された本発明の実施形態の詳細な説明である。これらの実施形態は例示的なものであり、本発明を明確に伝えるように詳細なものとなっている。しかしながら、提供された詳細の量は、実施形態の予期される変形物を制限することを意図するものではなく、逆に、本発明は、添付の特許請求の範囲によって定められるような本発明の精神及び範囲内に含まれる全ての修正物、均等物及び代替物を網羅するものである。
本発明の実施形態は、例えば、コンピュータ・システムなどのシステムと共に用いることができ、そのようなシステムに関して本発明の実施形態を以下に説明する。ここで用いられるシステムは、パーソナル・コンピュータ、インターネット・アプライアンス、デジタル・メディア機器、携帯情報端末(portable digital assistant、PDA)、携帯型音楽/映像プレーヤー及びビデオゲーム・コンソールを含む、プロセッサ及びキャッシュ・メモリを使用する任意のシステムを含むことができる。キャッシュ・メモリを用いるプロセッサと同じダイ上にキャッシュ・メモリを配置することができるが、場合によっては、プロセッサとキャッシュ・メモリを異なるダイ(例えば、別個のモジュール内の別個のチップ、又は単一モジュール内の別個のチップ)上に配置することができる。
本発明の実施形態は、各々のプロセッサ・コアが多数のパイプラインを用いて命令を実行する複数のプロセッサ・コアと複数のL1キャッシュとを有するプロセッサに関して以下に説明されるが、単一の処理コアを有するプロセッサを含む、キャッシュを用いる任意のプロセッサで本発明の実施形態を用いることができる。一般に、本発明の実施形態は、任意のプロセッサで用いることができ、いずれかの特定の構成に限定されるものではない。例えば、一般に、実施形態は、カスケード式遅延実行パイプラインを用いるプロセッサに限定されない。さらに、L1命令キャッシュ(L1 I−キャッシュ又はI−キャッシュ)とL1データ・キャッシュ(L1 D−キャッシュ又はD−キャッシュ224)に分割されたL1−キャッシュを有するプロセッサに関して以下に説明されるが、本発明の実施形態は、統合されたL1キャッシュを用いる構成にも用いることができる。また、以下に説明される幾つかの実施形態においては、命令をバッファに入れるためのデュアル命令バッファが説明される。場合によっては、命令をバッファに入れるために、単一の組み合わされたバッファ又は他のバッファ構成を用いることができる。
例示的なシステムの概要
図1は、本発明の一実施形態によるシステム100を示すブロック図である。システム100は、命令及びデータを格納するためのシステム・メモリ102と、グラフィックス処理のためのグラフィックス処理ユニット104と、外部装置と通信するためのI/Oインターフェース(106)と、命令及びデータを長期間格納するための記憶装置108と、命令及びデータを処理するためのプロセッサ110とを含むことができる。
本発明の一実施形態によると、プロセッサ110は、L2キャッシュ112及び複数のL1キャッシュ116を有することができ、各々のL1キャッシュ116は、複数のプロセッサ・コア114のうちの1つで用いられる。一実施形態によると、各々のプロセッサ・コア114をパイプライン化することができ、各々の命令が一連の小ステップで実行され、各々のステップが異なるパイプライン・ステージで実行される。
図2は、本発明の一実施形態によるプロセッサ110を示すブロック図である。簡単にするために、図2には、プロセッサ110の単一のコア114が示されており、これに関して図2を説明する。一実施形態においては、各々のコア114は同一のものであってもよい(例えば、同一のパイプライン・ステージを有する同一のパイプラインを含むことができる)。別の実施形態においては、各々のコア114は異なっていてもよい(例えば、異なるステージを有する異なるパイプラインを含むことができる)。
本発明の一実施形態においては、L2キャッシュは、プロセッサ110で使用される命令及びデータの一部を含むことができる。場合によっては、プロセッサ110は、L2キャッシュ112内に含まれていない命令及びデータを要求することがある。要求された命令及びデータがL2キャッシュ112内に含まれていない場合、要求された命令及びデータを(上位レベルのキャッシュ又はシステム・メモリ102から)取り出し、L2キャッシュ内に配置することができる。プロセッサ・コア114がL2キャッシュ112から命令を要求したとき、まずプリデコーダ及びスケジューラ220(以下で詳述される)によって命令を処理することができる。
本発明の一実施形態において、I−ラインと呼ばれるグループ内のL2キャッシュ112から命令をフェッチすることができる。同様に、D−ラインと呼ばれるグループ内のL2キャッシュ112からデータをフェッチすることができる。図1に示されるL1キャッシュ116を、2つの部分、すなわち、I−ラインを格納するためのL1命令キャッシュ222(I−キャッシュ222)、及び、D−ラインを格納するためのL1データ・キャッシュ224(D−キャッシュ224)に分割することができる。L2アクセス回路210を用いて、L2キャッシュ112からI−ライン及びD−ラインをフェッチすることができる。
本発明の一実施形態においては、L2キャッシュ112から取り出されたI−ラインを、プリデコーダ及びスケジューラ220で処理することができ、I−キャッシュ222内にI−ラインを配置することができる。プロセッサの性能をさらに改善するために、多くの場合、命令がプリデコード(predecode)され、例えば、I−ラインがL2(又はより上位の)キャッシュから取り出される。こうしたプリデコードは、アドレス生成、分岐予測及びスケジューリング(命令を発行すべき順番を決定すること)などの種々の機能を含むことができ、命令の実行を制御するディスパッチ情報(1組のフラグ)としてキャプチャされる。場合によっては、プリデコーダ及びスケジューラ220は、複数のコア114及びL1キャッシュの間で共有することができる。同様に、L2キャッシュ112からフェッチされたD−ラインを、D−キャッシュ224内に配置することができる。各々のI−ライン及びD−ライン内のビットを用いて、L2キャッシュ112内の情報のラインがI−ラインであるか、又はD−ラインであるかを追跡することができる。随意的に、I−ライン及び/又はD−ラインにおいてL2キャッシュ112からデータをフェッチする代わりに、他の方法で、例えば、より少量のデータ、より大量のデータ、又は可変量のデータをフェッチすることなどによって、L2キャッシュ112からデータをフェッチすることができる。
一実施形態において、I−キャッシュ222及びD−キャッシュ224は、どのI−ライン及びD−ラインが現在I−キャッシュ222及びD−キャッシュ224内にあるかを追跡するために、それぞれI−キャッシュ・ディレクトリ223及びD−キャッシュ・ディレクトリ225を有することができる。I−ライン又はD−ラインがI−キャッシュ222又はD−キャッシュ224に付加されたとき、対応するエントリを、I−キャッシュ・ディレクトリ223又はD−キャッシュ・ディレクトリ225内に配置することができる。I−ライン又はD−ラインがI−キャッシュ222又はD−キャッシュ224から除去されたとき、I−キャッシュ・ディレクトリ223又はD−キャッシュ・ディレクトリ225内の対応するエントリを除去することができる。D−キャッシュ・ディレクトリ225を用いるD−キャッシュ224に関して以下に説明されるが、本発明の実施形態は、D−キャッシュ・ディレクトリ225が用いられない場合でも使用することができる。そのような場合、D−キャッシュ224に格納されたデータ自体は、どのD−ラインがD−キャッシュ224内に存在するかを示すことができる。
一実施形態においては、命令フェッチ回路236を用いて、コア114に対する命令をフェッチすることができる。例えば、命令フェッチ回路236は、コア内で実行中の現在の命令を追跡するプログラム・カウンタを含むことができる。コア内の分岐ユニットを用いて、分岐命令に遭遇したときにプログラム・カウンタを変更することができる。I−ライン・バッファ232を用いて、L1 I−キャッシュ222からフェッチされた命令を格納することができる。発行及びディスパッチ回路234を用いて、I−ライン・バッファ232から取り出された命令を命令グループにグループ分けすることができ、以下で説明されるように、命令グループをコア114に対して並行して発行することができる。場合によっては、発行及びディスパッチ回路は、プリデコーダ及びスケジューラ220により与えられる情報を用いて、適切な命令グループを形成することができる。
発行及びディスパッチ回路234から命令を受け取ることに加えて、コア114は、様々な場所からデータを受け取ることができる。コア114がデータ・レジスタからデータを要求する場合、レジスタ・ファイル240を用いて、データを得ることができる。コア114がメモリ位置からデータを要求する場合、キャッシュ・ロード及びストア回路250を用いて、D−キャッシュ224からデータをロードすることができる。こうしたロードが実行される場合、必要なデータ要求をD−キャッシュ224に対して発行することができる。同時に、D−キャッシュ・ディレクトリ225をチェックして、所望のデータがD−キャッシュ224内に配置されているかどうかを判定することができる。D−キャッシュ224が所望のデータを含む場合、D−キャッシュ・ディレクトリ225は、D−キャッシュ224が所望のデータを含み、D−キャッシュ・アクセスをある時間の後に完了することができることを示すことができる。D−キャッシュ224が所望のデータを含まない場合、D−キャッシュ・ディレクトリ225は、D−キャッシュ224が所望のデータを含まないことを示すことができる。D−キャッシュ・ディレクトリ225は、D−キャッシュ224よりも迅速にアクセスすることができるので、D−キャッシュ・ディレクトリ225にアクセスした後、かつ、D−キャッシュ・アクセスが完了する前に、所望のデータ要求を(例えば、L2アクセス回路210を用いて)L2キャッシュ112に対して発行することができる。
場合によっては、コア114内でデータを修正することができる。修正されたデータをレジスタ・ファイルに書き込むことができ、又はメモリに格納することができる。ライトバック(write back)回路238を用いて、データをレジスタ・ファイル240に書き戻す(ライトバックする)ことができる。場合によっては、ライトバック回路238は、キャッシュ・ロード及びストア回路250を用いて、データをD−キャッシュ224に書き戻すことができる。随意的に、コア114は、キャッシュ・ロード及びストア回路250にアクセスして、直接的に格納を実行することができる。場合によっては、以下に説明されるように、ライトバック回路238を用いて、命令をI−キャッシュ222に書き戻すこともできる。
上述のように、発行及びディスパッチ回路234を用いて、命令グループを形成し、形成された命令グループをコア114に発行することができる。発行及びディスパッチ回路234はまた、I−ライン内の命令を回転し、マージ(merge)し、それにより適切な命令グループを形成するための回路を含むことができる。発行グループの形成は、発行グループ内の命令間の依存関係、並びに以下で詳細に説明する命令の順序付けから達成することのできる最適化などの幾つかの考慮事項を考慮に入れることができる。一旦発行グループが形成されると、プロセッサ・コア114に対して発行グループを並行してディスパッチすることができる。場合によっては、命令グループは、コア114内のパイプラインごとに1つの命令を含むことができる。随意的に、命令グループは、より少数の命令とすることができる。
本発明の一実施形態によると、1つ又は複数のプロセッサ・コア114は、カスケード式遅延実行パイプライン構成を用いることができる。図3に示される例では、コア114は、カスケード式構成の4つのパイプラインを含む。随意的に、より少数(2つ又はそれ以上のパイプライン)又はより多数(4より多いパイプライン)をそのような構成において用いることもできる。さらに、図3に示されるパイプラインの物理的レイアウトは例示的なものであり、必ずしもカスケード式遅延実行パイプライン・ユニットの実際の物理的レイアウトを示唆するものではない。
一実施形態においては、カスケード式遅延実行パイプライン構成内の各パイプライン(P0、P1、P2、P3)は、実行ユニット310を含むことができる。実行ユニット310は、所定のパイプラインに対して1つ又は複数の機能を実行する幾つかのパイプライン・ステージを含むことができる。例えば、実行ユニット310は、命令のフェッチ及びデコードの全て又は一部を実行することができる。実行ユニットで実行されたデコードは、プリデコーダ及びスケジューラ220と共有することができ、プリデコーダ及びスケジューラ220は、複数のコア114間で共有され、又は随意的に単一のコア114で使用される。実行ユニットはまた、レジスタ・ファイルからデータを読み取り、アドレスを計算し、整数演算機能を実行し(例えば、演算論理装置すなわちALUを用いて)、浮動小数点演算機能を実行し、命令分岐を実行し、データ・アクセス機能を実行し(例えば、メモリからのロード及びストア)、データをレジスタに戻して格納する(例えば、レジスタ・ファイル240内に)ことができる。場合によっては、コア114は、命令フェッチ回路236、レジスタ・ファイル240、キャッシュ・ロード及びストア回路250、ライトバック回路、並びに他の任意の回路を用いてこれらの機能を使用することができる。
一実施形態においては、各実行ユニット310は、同一の機能を実行することができる。随意的に、各実行ユニット310(又は、異なるグループの実行ユニット)は異なる機能の組を実行することができる。さらに、場合によっては、各コア114内の実行ユニット310は、他のコアにおいて提供される実行ユニット310と同じであってもよく、又は異なるものであってもよい。例えば、あるコアにおいては、実行ユニット310及び310が、ロード/ストア及び演算機能を実行し、実行ユニット310及び310が、演算機能のみを実行することができる。
一実施形態においては、図示されるように、実行ユニット310における実行を、他の実行ユニット310に対して遅延式に実行することができる。図示される構成は、カスケード式遅延構成とも呼ばれることもあるが、図示されるレイアウトは、必ずしも実行ユニットの実際の物理的レイアウトを示すわけではない。そのような構成では、命令グループ内の命令(便宜上、I0、I1、I2、I3と呼ぶ)がパイプラインP0、P1、P2、P3に対して並行して発行され、各々の命令を、各々の他の命令に対して遅延式に実行することができる。例えば、まず、命令I0をパイプラインP0に対する実行ユニット310において実行することができ、2番目に、命令I1をパイプラインP1に対する実行ユニット310において実行することができ、以下同様である。
一実施形態においては、プロセッサ・コア114に発行グループを発行するとき、I0を実行ユニット310において直ちに実行することができる。その後、命令I0が実行ユニット310における実行を終了した後、実行ユニット310は命令I1の実行を開始することができ、以下同様にして、コア114に対して並行して発行された命令が、互いに対して遅延式に実行される。
一実施形態においては、幾つかの実行ユニット310を互いに対して遅延させることができるが、他の実行ユニット310は互いに対して遅延されない。第2の命令の実行が第1の命令の実行に依存する場合、転送パス(forwarding path)312を用いて、第1の命令から第2の命令に結果を転送することができる。図示される転送パス312は例示的なものにすぎず、コア114は、実行ユニット310内の様々な地点から他の実行ユニット310又は同一の実行ユニット310へのより多くの転送パスを含むことができる。
一実施形態においては、実行ユニット310で実行されていない命令(例えば、遅延されている命令)を遅延キュー320又はターゲット遅延キュー330内に保持することができる。遅延キュー320は、実行ユニット310で実行されていない命令グループ内の命令を保持するのに使用することができる。例えば、命令I0が実行ユニット310において実行されている間、命令I1、I2及びI3を遅延キュー320内に保持することができる。命令が遅延キュー320を通じて移動されると、命令を適切な実行ユニット310に対して発行し、実行することができる。ターゲット遅延キュー330は、既に実行ユニット310で実行された命令の結果を保持するのに使用することができる。場合によっては、ターゲット遅延キュー330内の結果を実行ユニット310に転送して処理することができ、又は適切な場合には無効にすることができる。同様に、ある環境においては、以下で説明されるように、遅延キュー320内の命令を無効にすることができる。
一実施形態において、命令グループ内の各命令が遅延キュー320、実行ユニット310及びターゲット遅延キュー330を通じて渡された後、結果(例えば、データ、及び以下で説明されるように、命令)をレジスタ・ファイルに、或いはL1 I−キャッシュ222及び/又はD−キャッシュ224のいずれかに書き戻すことができる。場合によっては、ライトバック回路306を用いて、最後に修正されたレジスタの値(ターゲット遅延キュー330の1つから受け取った)を書き戻し、無効にされた結果を廃棄することができる。
分岐予測情報
本発明の一実施形態において、プロセッサ110は、プロセッサ110によって実行されている条件分岐命令についての分岐予測情報を格納することができる。分岐予測情報は、所定の分岐命令の実行履歴を反映させることができ、及び/又は、実行中の分岐命令の結果を予測するのに有用なものにすることができる。
本発明の一実施形態においては、プロセッサ110を用いて、ローカル分岐履歴情報及び/又はグローバル分岐履歴情報を記録することができる。以下に述べられるように、場合によっては、こうした分岐予測情報を分岐命令に再エンコードすることができる。また、場合によっては、分岐履歴テーブル内に分岐予測情報を格納することもできる。
一実施形態において、ローカル分岐履歴情報を用いて、単一の分岐命令の分岐履歴を追跡することができる。場合によっては、ローカル分岐履歴情報は、以前に分岐条件が成立したか(taken)又は以前に分岐条件が不成立であったか(not taken)を示す単一のビット(分岐履歴ビット、BRH)を含むことができる(例えば、ビットが設定された場合、以前に分岐条件が成立しており、ビットが設定されていない場合、以前に分岐条件が不成立である)。BRHが設定された場合、後の分岐命令の実行中、分岐条件が成立するであろうという予測を行なうことができ、分岐命令の結果が完全に解決される前に、プロセッサ110が、分岐条件成立パス(branch taken path)に関する命令をフェッチし、実行することが可能になる。同様に、BRHが消去される場合、分岐条件が不成立であろうという予測を行なうことができ、プロセッサ110が、分岐条件不成立パス(branch not-taken path)に関する命令をフェッチし、実行することが可能になる。
ローカル分岐履歴情報はまた、分岐命令の結果を予測する際に分岐履歴ビットの信頼性を判断するために用いることができるカウンタ(CNT)を含むこともできる。例えば、分岐の結果(分岐条件が成立する又は分岐条件が不成立である)がBRHの値と合致する度に、カウンタを増分することができ、これによりBRH予測がより信頼できることが示される。幾つかの実施形態においては、カウンタがその最高値に達するとき、カウンタが飽和することがある(例えば、3ビット・カウンタは、7で飽和し得る)。同様に、分岐の結果がBRHの値と合致しない度に、カウンタを減分することができ、BRH予測があまり信頼できないことが示される。カウンタがその最低値(例えば、ゼロ)に達するとき、カウンタが減分を停止することもある。カウンタは、1ビット・カウンタ、2ビット・カウンタ、又は3ビット・カウンタとすることができ、或いは、随意的に、カウンタが、どのような数のビットを含むこともできる。
場合によっては、ローカル分岐履歴情報が分岐命令の結果を正しく予測するかどうか(例えば、分岐命令がローカルに予測可能であるかどうか)を示すローカル分岐履歴情報の別のビット(BPRD)を格納することができる。例えば、CNTがローカル予測可能性の閾値を下回る場合、BPRDを消去し、分岐命令が予測可能でないことを示すことができる。CNTがローカル予測可能性の閾値を上回るか又はこれと等しい場合、BPRDを設定し、分岐命令が予測可能であることを示すことができる。場合によっては、分岐命令がローカルに予測可能であることを示す値に、BPRDを初期化することができる(例えば、BPRDを最初に消去してもよい)。また、場合によっては、一旦BPRDが消去されると、たとえCNTが予測可能性の閾値より上に上昇したとしても、BPRDが消去されたままにし(例えば、BPRDはスティッキー・ビット(sticky bit)とすることができる)、これにより分岐命令がローカルに予測可能でないままであることを示すことができる。随意的に、CNTの値に応じて、BPRDを連続的に更新することができる。
場合によっては、分岐が予測可能であるか又は部分的に予測可能であるかを示す値(例えば、予測可能性の閾値を上回る値、又は「部分的予測可能性」の閾値を上回る値)に、CNTを初期化することができる。また、場合によっては、CNTが予測可能性の閾値を下回るとき、又は、随意的にCNTがゼロのとき、BRHビットを修正し、分岐命令の最新の結果(例えば、分岐される又は分岐されない)を反映させることができる。場合によっては、最新の結果を反映させるようにBRHを修正した場合、BPRDは、CNTが予測可能性の閾値より上に上昇するまで設定されたままであることができる(予測不可能であることを示す)。分岐命令のローカル予測可能性を示す測定値及び/又はビットを維持することによって、分岐命令の結果を予測するためにローカル分岐履歴情報を使用するかどうかの判断を行なうことができる。
グローバル分岐履歴情報を用いて、複数の命令の分岐履歴を追跡することができる。例えば、所定の分岐命令についてのグローバル分岐履歴情報は、現在の分岐命令の前に実行された分岐命令の数(例えば、1、2、3、4、又はそれ以上)を見て、分岐条件が成立したか又は分岐条件が不成立であったかを記録することができる。実行されている分岐命令のアドレスと共に、以前の分岐命令の履歴結果(GBH)を示すビットを分岐履歴テーブルへの索引として用いることができる。分岐履歴テーブル内の各エントリは、分岐の対応する結果が何であったかを示す対応するグローバル分岐履歴ビット(GBRH)(例えば、現在の分岐命令の結果(GBRH)であった、以前の分岐命令の履歴結果(GBH)についての)を含むことができる。
場合によっては、分岐履歴テーブル内の各々のエントリは、上述されたカウンタと類似したグローバル分岐履歴カウンタ(GBCNT)を含むことができる。グローバル分岐履歴GBRHが分岐命令の結果を正しく予測する度に、GBCNTを増分することができ、グローバル分岐履歴エントリが分岐命令の結果を不正確に予測する度に、GBCNTを減分することができる。GBCNTの値を用いて、分岐命令についてのグローバル分岐履歴の信頼性又は予測可能性を求めることができる。
場合によっては、グローバル分岐履歴情報は、BPRDと類似したビットGBPRDを含むことができ、このGBPRDは、GBCNTが予測可能性の閾値を上回るか又はこれと等しい場合に設定され、GBCNTが予測可能性の閾値を下回るときに消去される。したがって、GBPRDを用いて、分岐命令がグローバルに予測可能であるかどうかを判定することができる。場合によっては、GBPRDは、スティッキー・ビットとすることができる(例えば、一旦ビットが消去されると、ビットは消去されたままにすることができる)。随意的に、場合によっては、GBCNTの値に応じて、GBPRDを更新することができる。
分岐予測情報の格納
本発明の一実施形態においては、実行中、ローカル分岐履歴情報を対応する分岐命令又はI−ラインに再エンコードすることができる。ローカル分岐履歴情報を対応する分岐命令に再エンコードすることによって、分岐予測情報を格納するのに用いられる分岐履歴テーブルのサイズを低減させることができ、ローカル分岐履歴情報を本質的に無制限に格納することができる(例えば、分岐命令自体の中に又はこれと共に)。また、本発明の一実施形態においては、ローカル分岐履歴情報が信頼できないものである場合(例えば、確認カウントCNTがローカル予測可能性の所定の閾値を下回る場合)、分岐履歴テーブル内にのみグローバル分岐履歴情報を格納することができる。したがって、場合によっては、分岐命令の結果を予測するためにその命令についてのローカル分岐履歴が許容可能なほど正しくない場合にのみ、所定の分岐命令についてのグローバル分岐履歴情報を格納することができる。
図4は、本発明の一実施形態による、ローカル及びグローバル分岐履歴情報を記録し、格納するためのプロセス400を示す流れ図である。プロセス400は、分岐命令を受信し、実行する、ステップ402で開始することができる。ステップ404において、上述のように、例えば、分岐命令についての分岐予測情報を更新することができる(例えば、分岐履歴ビットを設定又は消去することによって、分岐履歴カウントを増分又は減分することによって)。ステップ406において、更新されたローカル分岐履歴情報(例えば、BRH、CNT、及び/又は他のローカル分岐履歴情報)を分岐命令に再エンコードすることができる。
ステップ408において、ローカル分岐履歴情報が、分岐命令がローカルに予測可能であること(例えば、ローカル分岐履歴だけを用いて分岐が予測可能であること)を示すかどうかについて判定を行なうことができる。上述のように、こうした判定は、CNTが予測可能性の閾値よりも大きいか又はこれと等しいかを判定することを含み得る。ローカル分岐履歴情報が、分岐命令がローカルに予測可能であることを示さない場合には、ステップ410において、分岐命令についてのグローバル分岐履歴情報(例えば、GBRH及び/又はGBCNT)を含む分岐履歴テーブルにエントリを付加することができる。次に、ステップ412において、プロセス400が終了できる。
上述のように、ローカル分岐履歴情報は、命令ビット及び/又はI−ライン・ビットを用いることを含み得る種々の方法で格納することができる。一実施形態において、ローカル分岐履歴情報及び/又はターゲット・アドレスは、分岐命令を含むI−ラインに格納することができる。図5(A)は、本発明の一実施形態による、分岐命令についてのローカル分岐履歴情報及び/又はターゲット・アドレスをI−ライン502内に格納するために用いられる例示的なI−ライン502を示すブロック図である。
図示されるように、I−ラインは、複数の命令(命令1、命令2等)、アドレス(例えば、有効アドレスEA)を格納するために用いられるビット、制御情報(CTL)を格納するために用いられるビットを含むことができる。本発明の一実施形態においては、図5(A)に示される制御ビットCTLを用いて、分岐命令についてのローカル分岐履歴情報(例えば、BRHビット、BPRDビット、CNTビット、及び/又は他のビット)を格納することができる。本発明の一実施形態において、I−ラインは、複数の分岐命令を含むことができ、分岐命令の各々についてローカル分岐履歴情報を格納することができる。
場合によっては、I−ラインにおいてその目的のために割り当てられたビット内にローカル分岐履歴情報を格納することができる。随意的に、本発明の一実施形態においては、ローカル分岐履歴情報は、他の形では用いられないI−ラインのビットに格納することができる。例えば、L2キャッシュ112内の各々の情報ラインは、異なるキャッシュ・レベル間で転送されるデータのエラー訂正のために用い得る追加のデータ・ビット(例えば、転送されたデータが破損されていないことを保証し、実際に起こったいずれかの破損を修復するために用いられるエラー訂正コードECC)を有することができる。場合によっては、各々のレベルのキャッシュ(例えば、L2キャッシュ112及びI−キャッシュ222)は、各々のI−ラインの同一のコピーを含むことができる。各々のレベルのキャッシュが所定のI−ラインのコピーを含む場合には、ECCを用いなくてもよい。代わりに、例えば、キャッシュ間でI−ラインが適切に転送されたかどうかを判定するために、パリティ・ビット(parity bit)を用いることができる。パリティ・ビットが、キャッシュ間でI−ラインが不適切に転送されたことを示した場合には、(キャッシュにそのラインが含まれているため)エラー・チェックを行なう代わりに、転送キャッシュからそのI−ラインを再フェッチすることができ、よって、分岐予測情報を格納する際に用いられるECCビットを除去する。
ローカル分岐履歴情報を他の形では用いられないI−ラインのビットに格納する例として、格納された2ワードごとに、エラー訂正用に11ビットを用いるエラー訂正プロトコルを考える。1つのI−ラインにおいて、2つの命令ごとにパリティ・ビットを格納するために、11ビットのうちの1つを用いることができる(1ワードごとに1つの命令が確認される場合)。残りの命令1つにつき5ビットを、ローカル分岐履歴情報を格納するために用いることができる。
上述のように、場合によっては、命令がデコード及び/又は実行された(ここでは一般に再エンコードと呼ばれる)後で、分岐命令内にローカル分岐履歴情報を格納することができる。図5(B)は、命令の一実施形態による例示的な分岐命令504を示すブロック図である。分岐命令504は、命令のタイプ、1つ又は複数のレジスタ・オペランド(Reg.1)、及び/又はデータを識別するのに用いられるオペレーション・コード(Op−Code)を含むことができる。図示されるように、分岐命令504はまた、BRHビット、BPRDビット、及び/又はCNTビットを格納するために用いられるビットを含むこともできる。
上述のように、例えば、分岐命令504が実行されたとき、ローカル分岐履歴情報を修正することができる。次に、ローカル分岐履歴情報を命令504にエンコードすることができ、その結果、命令が後にデコードされたとき、ローカル分岐履歴情報を用いて分岐命令の結果を予測できるようになる。下記のように、場合によっては、分岐命令504が再エンコードされたとき、その命令を含むI−ラインを変更されたものとしてマーク付けし、再びI−キャッシュ222に書き戻す。
本発明の一実施形態において、ローカル分岐履歴情報がI−ライン又は分岐命令に再エンコードされた場合、システム100において用いられるキャッシュ及び/又はメモリの各レベルは、I−ライン又は分岐命令内に含まれる再エンコードされた情報のコピーを含むことができる。本発明の別の実施形態においては、キャッシュ及び/又はメモリの特定のレベルだけが、命令及び/又はI−ライン内に含まれる再エンコードされた情報を含み得る。当業者には周知のキャッシュ・コヒーレンシ(cache coherency)原理を用いて、キャッシュ及び/又はメモリの各レベルにおけるI−ラインのコピーを更新することができる。
命令キャッシュを用いる従来のシステムにおいて、命令は、典型的には、プロセッサ110によって修正されないことが留意される。したがって、従来のシステムにおいては、I−ラインは、典型的には、L2キャッシュ112に書き戻されるのではなく、しばらく後にI−キャッシュ222からエージ・アウトされる。しかしながら、ここに説明されるように、幾つかの実施形態においては、修正されたI−ライン及び/又は命令をL2キャッシュ112に書き戻すことができ、これにより、ローカル分岐履歴情報(及び/又は、他のタイプの情報/フラグ)をより高いキャッシュ・レベル及び/又はメモリ・レベルに保持することが可能になる。命令情報をより高いキャッシュ・レベルに書き戻すことによって、計算を繰り返す必要なしに、既に計算された命令情報及び結果(例えば、命令のプリデコード及び/又は実行中に計算された情報)を後で再使用することができる。格納された命令情報を再使用し、命令情報の再計算を低減させることによって、後のプリデコード及びスケジューリング中に、命令をプリデコードし、実行するのに消費される電力を低減させることができる。
一例として、I−ライン内のプリデコードされた命令がプロセッサ・コアによって処理されたとき(潜在的にローカル分岐履歴情報が更新される)、I−ラインをI−キャッシュ222内に書き込むことができ(例えば、ライトバック回路238を用いて)、潜在的にI−キャッシュ222に格納されたI−ラインのより古いバージョンを上書きする。一実施形態においては、I−ラインに格納された情報に変更がなされた場合、I−ラインをI−キャッシュ222内に配置することだけ可能である。随意的に、一実施形態においては、I−ラインをI−キャッシュ222に常に書き戻すことができる。
本発明の一実施形態によると、修正されたI−ラインがI−キャッシュ222に書き戻されたとき、変更されたものとしてI−ラインをマーク付けすることができる。I−ラインがI−キャッシュ222に書き戻され、変更されたものとしてマーク付けされた場合、I−ラインは、異なる時間にわたってI−キャッシュ内に残ることができる。例えば、I−ラインがプロセッサ・コア114に頻繁に用いられる場合には、I−ラインは、数回にわたってI−キャッシュ222にフェッチされ、戻され、潜在的には毎回更新される。しかしながら、I−ラインが頻繁に使用されない場合(エージング(ageing)と呼ばれる)、I−ラインをI−キャッシュ222からパージすることができる。I−ラインがI−キャッシュ222からパージされたとき、I−ラインが変更されたものとしてマーク付けされたかどうかの判定をなすことができる。I−ラインが変更されたものとしてマーク付けされた場合、I−ラインをL2キャッシュ112に書き戻すことができる。随意的に、I−ラインをL2キャッシュ112に常に書き戻すことができる。一実施形態においては、I−ラインを随意的に一度に幾つかのキャッシュ・レベルに(例えば、L2キャッシュ112及びI−キャッシュ222に)、又は、I−キャッシュ222以外のレベルに(例えば、直接L2キャッシュ112に)書き戻すことができる。
一実施形態においては、上述のように、命令が実行された後、分岐命令504内のビットを再エンコードすることができる。場合によっては、命令がより高レベルのソース・コードからコンパイルされたとき、ローカル分岐履歴情報を命令にエンコードすることもできる。例えば、一実施形態において、ソース・コードをコンパイルするのに用いられるコンパイラは、分岐命令を認識し、ローカル分岐履歴情報を生成し、そうした情報を分岐命令にエンコードするように設計することができる。
例えば、一旦プログラムのソース・コードが生成されると、ソース・コードを命令にコンパイルすることができ、次に、テスト実行(又は「トレーニング」)中、命令を実行することができる。プログラムにおける分岐命令についてのローカル分岐履歴情報を生成するために、テスト実行及びテスト実行の結果を監視することができる。次に、テスト実行に照らして、分岐命令についてのローカル分岐履歴情報を適切な値に設定するように、ソース・コードを再コンパイルすることができる。場合によっては、プロセッサ110においてテスト実行を行なうことができる。場合によっては、プロセッサ110をテスト実行用のための特別なテスト・モードに置くために、プロセッサ110内の制御ビット又は制御ピンを用いることができる。随意的に、テスト実行を行ない、結果を監視するように設計された特別なプロセッサを用いることができる。
図6は、本発明の一実施形態による、分岐予測情報を格納するための回路を示すブロック図である。場合によっては、プロセッサ・コア114は、分岐実行回路602を利用して、分岐命令を実行し、分岐予測情報を記録することができる。また、分岐実行回路602はを用いて、分岐履歴ストレージ604を制御し、これにアクセスすることができる。分岐履歴ストレージ604は、例えば、分岐履歴テーブル606を含むことができる。
図7は、本発明の一実施形態による分岐履歴テーブル606を示すブロック図である。上述のように、エントリ706を、分岐命令のグローバル分岐履歴(例えば、GBRH、GBCNT、及び/又はGBPRD)を記述する分岐履歴テーブル内に配置することができる。場合によっては、分岐命令がローカルに予測可能でない場合にのみ、こうしたエントリを作製することができる。したがって、分岐履歴テーブル606は、プロセッサ110によって実行されている分岐命令の全てについてのエントリを含むことはできない。分岐命令のアドレス(分岐命令アドレス)及びグローバル分岐履歴を示すビットは、分岐履歴テーブル606への索引704として用いることができる。随意的に、場合によっては、分岐命令アドレスの一部だけ(例えば、グローバル分岐履歴を示す5ビットに加えて8ビットの分岐命令アドレスだけ)を、分岐履歴テーブル606への索引704として用いることができる。
グローバル分岐履歴に索引付けするために、いずれかの適切な数のビットを用いることができる(例えば、1、2、3、4、5、又はそれ以上)。例えば、対応する以前の条件分岐命令により分岐命令が分岐されたか又は分岐されなかったかを、各々のビットが示すことができる(例えば、ビット0のGBHは、以前の分岐命令が分岐された場合にはを設定することができ、又は以前の分岐命令が分岐されなかった場合には消去することができ、ビット1のGBHは、先行する条件分岐命令の結果に応じて設定又は消去することができる、以下同様)。
本発明の一実施形態において、分岐履歴テーブル606内のエントリ706は、対応する条件分岐命令がプロセッサ110(例えば、I−キャッシュ222、L2キャッシュ112、L3キャッシュ、及び/又は他のいずれかのキャッシュ・レベル)のキャッシュに入れられる限り、保持することができる。場合によっては、分岐命令についてのエントリ706は、分岐命令が特定のレベルのキャッシュにある場合にのみ(例えば、分岐命令がI−キャッシュ222又はL2キャッシュ112にあるときにのみ)残されてもよい。随意的に、例えば、エントリ706への最新のアクセスを示すエージ(age)値を用いて、エントリ706を分岐履歴テーブル606からエージ・アウトすることができる。例えば、一旦エントリ706についてのエージ値がエージの閾値を上回り、それによりエントリ706が頻繁に使用されていないことが示されると、分岐履歴テーブル606からエントリ706を除去することができる。随意的に、当業者には周知の他のいずれかのキャッシュ保持技術を用いて、エントリ706を分岐履歴テーブル606内に保持することができる。
場合によっては、エントリ706を分岐履歴テーブル606内に保持するための上述された技術に加えて、分岐命令がローカルに予測可能であることを分岐命令についてのローカル分岐履歴情報が示す場合に、分岐履歴テーブル内のエントリ706を除去することができる。例えば、分岐命令が以前にローカルに予測不可能であり、その結果、グローバル分岐履歴情報が格納された場合、分岐命令が後でローカルに予測可能になる場合、グローバル分岐履歴情報を含むエントリ706を分岐履歴テーブル606から除去することができる。したがって、場合によっては、グローバル分岐履歴情報は、不必要に分岐履歴テーブル606内に格納しなくてもよい。
場合によっては、ローカル分岐履歴情報及びグローバル分岐履歴情報の両方をテーブル(例えば、ローカル分岐履歴テーブルに加えて、グローバル分岐履歴テーブル)内に格納することができ、そこで、分岐命令がローカルに予測不可能であることをローカル分岐履歴テーブル内のエントリが示す場合に限り、エントリがグローバル分岐履歴テーブル内に作製される。また、場合によっては、そうした情報をI−ラインに付加し、及び/又は、そうした情報を命令に再エンコードすることによって、グローバル分岐履歴及びローカル分岐履歴の両方を格納することができる。例えば、一実施形態において、ローカル分岐履歴情報を各々の分岐命令に再エンコードすることができ、分岐についてのグローバル分岐履歴が、分岐命令を含むI−ラインに付加される。一実施形態においては、分岐命令がローカルに予測可能でない場合に限り、所定の命令についてのグローバル分岐履歴を、命令を含むI−ラインに付加することができる。
条件分岐の事前解決(preresolution)
場合によっては、条件分岐命令の結果は、事前に解決可能であり得る(例えば、条件分岐命令をアウト・オブ・オーダー方式(out-of-order)で試験発行(trial issue)し、実行することによって、プログラムの順序に従って分岐命令が実行される前に、条件分岐命令の結果を判定することができる)。条件分岐命令が事前に解決可能である場合には、プロセッサ・コア114において条件分岐命令が実行される前に、条件分岐命令の結果(例えば、分岐される又は分岐されない)を判定することができる。次に、判定された結果を用いて、命令の実行をスケジューリングすることができる(例えば、命令をフェッチし、スケジューリングし、条件分岐命令についての事前解決されたパスに沿ってプロセッサ・コア114に対して発行することによって)。したがって、場合によっては、条件分岐の分岐条件が成立するか又は分岐条件が不成立であるかを判定するために、分岐予測情報(例えば、分岐命令の以前の実行からの情報)を用いることはできない。
図8は、本発明の一実施形態による、条件分岐命令を事前解決するためのプロセス800を示す流れ図である。プロセス800は、実行される条件分岐命令を含むI−ラインがキャッシュから(例えば、L2キャッシュ112又はI−キャッシュ222から)フェッチされるステップ802で開始することができる。ステップ804において、条件分岐命令が事前解決可能であるかどうかの判定を行なうことができる。条件分岐命令が事前解決可能である場合には、ステップ806において、分岐命令をアウト・オブ・オーダー方式でプロセッサ・コア114に試験発行することができる。ステップ808において、条件分岐命令を実行することができ、これにより条件分岐命令の結果(例えば、分岐条件が成立する又は分岐条件が不成立である)が事前解決される。次に、ステップ810において、分岐命令の事前解決の結果を格納することができる。ステップ812において、スケジューリング中、格納された分岐命令の結果を用いて、後続命令の実行をスケジューリングすることができる。次に、ステップ814において、プロセス800が終了することができる。
上述のように、条件分岐命令が事前解決可能であるかどうかの判定を行なうことができる。条件分岐命令は、種々の場合に事前解決可能であり得る。例えば、条件分岐命令は、条件レジスタ(CR)内のビットをチェックして、別の命令に分岐するかどうかを判定することができる。条件レジスタ内のビットが設定されており、分岐命令に先行するいずれの命令によっても(例えば、条件分岐命令がL2キャッシュ112からフェッチされる時刻と条件分岐命令が実行される時刻との間に実行される命令によって)修正されない場合、条件分岐命令を事前解決することができる。先行する命令が条件分岐命令の結果を修正しないことを保証することによって(例えば、先行する命令が条件レジスタにおける値を変更せず、それにより分岐命令の結果が変更されることを保証することによって)、先行する命令を実行することなく、分岐命令(又は、命令の組み合わせ)をアウト・オブ・オーダー方式で試験発行することによって、分岐命令の結果を成功裏に判定することができる。次に、後で使用するために、条件分岐命令の結果を格納することができる。
場合によっては、条件分岐命令の結果を事前解決しようとして、命令の結果を保存せずに、2つ又はそれ以上の命令をアウト・オブ・オーダー方式で試験発行することがある。命令の結果を保存せずに命令をアウト・オブ・オーダー方式で試験発行することによって、典型的にアウト・オブ・オーダー実行(例えば、依存性のチェック)と関連したオーバーヘッドなしに、条件分岐の結果を事前解決することができる(例えば、分岐命令を実際に実行する前に)。例えば、場合によっては、条件レジスタ内のビットに影響を及ぼす、分岐命令に先行する加算命令(add instruction)或いは他の算術又は論理命令を実行することができる。影響されたビットに基づいて、条件分岐命令は、分岐条件が成立するかどうかを判定することができる(付加−分岐の組み合わせと呼ばれる)。付加−分岐の組み合わせを事前解決できる(例えば、分岐命令及び加算命令の結果に影響を及ぼす他の直前の命令を実行する必要がない)場合、加算命令及び分岐命令をアウト・オブ・オーダー方式で試験発行し、これを用いて条件分岐命令の結果を判定し、格納することができる。付加−分岐の組み合わせを試験発行した後、事前解決された条件分岐命令の結果を格納することができ、一方、加算命令(合計)及び分岐命令の結果(プログラム・カウンタを分岐ターゲット・アドレスに変更する)を廃棄することができる。したがって、試験発行及び実行は、命令を実際に実行する前のプリフェッチに類似している。
場合によっては、条件分岐命令の結果を事前解決しようとして、3つ又はそれ以上の命令をアウト・オブ・オーダー方式で試験発行することができる。例えば、データをレジスタにロードするために、ロード命令を用いることができ、次に、比較命令を用いてレジスタ・コンテンツを他のデータと比較することができる。次に、比較命令の結果は、分岐条件が成立するかどうかを判定するために用いられる条件レジスタ内のビットに影響を及ぼすことがある(ロード−比較−分岐の組み合わせと呼ばれる)。ロード−比較−分岐の組み合わせを事前解決することができる(例えば、命令の結果に影響を及ぼす他の直前の命令を実行する必要がない)場合、命令をアウト・オブ・オーダー方式で試験発行し、この命令を用いて、条件分岐命令の結果を判定し、格納することができる。
一実施形態において、条件分岐命令及び他の命令を含むI−ラインの部分を選択し、アウト・オブ・オーダー方式での試験発行を実行することができ、これにより条件分岐命令が事前解決される。I−ラインの部分が選択され、アウト・オブ・オーダー方式で試験発行された場合、I−ラインの部分は、分岐命令、1つ又は複数の先行する命令、及び1つ又は複数の後続命令を含むことができる。条件分岐命令の結果は、スケジューリング及び実行のために格納し、使用することができ、他の命令の結果は廃棄することができる。
上述のように、場合によっては、条件分岐命令の試験発行を行なうことができる。したがって、本発明の一実施形態において、条件分岐命令が1つ又は複数の命令のアウト・オブ・オーダー実行によって事前解決された場合、実行された命令によって変更されたいずれのレジスタ値も格納することなく、アウト・オブ・オーダー方式で実行された命令を実行することができる。例えば、分岐命令が事前解決された場合、上述のように条件分岐命令の結果(分岐条件が成立する又は分岐条件が不成立である)を格納することはできても、事前解決された分岐命令によって、プログラム・カウンタ(通常、分岐命令に影響を受ける)を変えることができない。同様に、事前解決中に、加算命令、ロード命令、比較命令、及び/又はいずれの他の命令が試験発行され、条件分岐命令が事前解決され、分岐結果(分岐条件が成立する又は分岐条件が不成立である)が格納された後、こうした命令の結果を廃棄することができる。さらに、上述の結果は、事前解決されていない他の命令(例えば、イン・オーダーで正常に実行される命令)に転送することができない。場合によっては、事前解決中にアウト・オブ・オーダー方式で試験発行された命令の各々においてビットを設定し、命令の結果がいずれのレジスタにも又は他の命令にも影響を及ぼすべきではないこと、及び、分岐の結果(分岐条件が成立する又は分岐条件が不成立である)の結果を格納すべきであることを示すことができる。
一実施形態において、命令が事前解決可能であることを識別するために、分岐命令内にフラグを設定することができる。例えば、条件分岐命令のプリデコード及びスケジューリング中に、フラグを設定することができる(例えば、プリデコーダ及びスケジューラ回路220によって)。上述のような命令の組み合わせ又はI−ラインの部分に対して、こうしたフラグを設定することもできる。フラグが設定された場合、プロセッサ110がフラグを検出し、これに応答して、条件分岐命令及び事前解決のために必要な他の命令を、アウト・オブ・オーダー方式で試験発行し、事前解決することができる。場合によっては、フラグは、トレーニング・モード(以下に説明される)中に設定することができ、条件分岐命令の後の実行中、設定されたままにすることができる。随意的に、コンパイラによってフラグをコンパイル時刻に設定することができ、フラグを後に使用して、命令を事前解決すべきかどうかを判定することができる。
分岐命令を実行するために、カスケード式遅延実行プロセッサ・ユニット(図3に関して上述された)が用いられる本発明の一実施形態において、事前解決される命令は、最も遅延される実行パイプライン(例えば、図3のパイプラインP3)に試験発行することができる。例えば、最も遅延される実行パイプラインが最も使用されない実行パイプラインである場合には、事前解決された命令を最も遅延される実行パイプラインに試験発行することができる。
場合によっては、事前解決可能な各分岐命令において事前解決を行なうことができる。随意的に、本発明の一実施形態において、条件分岐命令が事前解決可能であり、予測可能でない(例えば、ローカルに及び/又はグローバルに予測可能でない)場合にのみ、事前解決を実行することができる。例えば、条件分岐命令のローカル予測可能性が予測可能性の閾値を下回る場合(例えば、上述されたCNT値によって判定されるように)、使用される場合、条件分岐命令のグローバル予測可能性が予測可能性の閾値を下回る場合、及び条件分岐命令が事前解決可能である場合、ここで述べられるように条件分岐命令を事前解決することができる。随意的に、当業者には周知の条件分岐命令の予測可能性を判定するための何らかのスキームを用いて、条件分岐命令が予測可能であるかどうかを判定することができる。
本発明の一実施形態において、命令がL2キャッシュ112からフェッチされたとき、条件分岐命令を事前解決することができるかどうかの判定を行なうことができる。例えば、I−ラインがL2キャッシュ112からフェッチされたとき、フェッチされたI−ラインが、事前解決すべき条件分岐命令を含むかどうかを判定するために、プリデコーダ及びスケジューラ回路220を用いることができる。I−ラインが事前解決すべき条件分岐命令を含む場合、プリデコーダ及びスケジューラ220は、例えば、他の命令がI−キャッシュ222内に配置される前に、条件分岐命令、及び事前解決するのに必要な他の命令をアウト・オブ・オーダー方式でプロセッサ・コア114に試験発行することができる。
ここから
本発明の一実施形態において、条件分岐命令を含むI−ラインがL2キャッシュ112からプリフェッチされた後、条件分岐命令を事前解決することができる。例えば、フェッチされたI−ラインが、I−ラインの外にある命令に分岐する(これをターゲットとする)「出口分岐命令」を含むとプロセッサ110が判断したとき、I−ラインのプリフェッチを行なうことができる。出口分岐命令のターゲット・アドレスを抽出し(例えば、ターゲット・アドレスを計算すること、又は以前に格納されたターゲット・アドレスを使用することによって)、これを用いて、L2キャッシュ112、より高レベルのキャッシュ、及び/又はメモリから、ターゲットとされた命令を含むI−ラインをプリフェッチすることができる。例えば、I−ライン内の命令をターゲットとした出口分岐命令が実行される前に、及び/又は、I−ライン内の命令をターゲットとするようにプロセッサ110についてのプログラム・カウンタが変更される前に、こうしたプリフェッチを行なうことができる。例えば、分岐予測情報を用いて、出口分岐命令の結果を予測することができる。結果として、出口分岐がなされた場合/時、ターゲットとされたI−ラインがI−キャッシュ222内に既にあってもよく、これによりI−キャッシュ222における費用のかかるミスが回避され、全体的な性能が改善される。
上述のように、出口分岐命令のターゲットとされたI−ラインがプリフェッチされた後、プリフェッチされたI−ラインが事前解決すべき条件分岐命令を含むかどうかの判定を行なうことができる。プリフェッチされたI−ライン内に含まれる条件分岐命令を事前解決することによって、条件分岐命令の結果を早期に判定することができ、それによりプロセッサ110が、命令の実行をより良好にスケジューリングすることが可能になる。さらに、場合によっては、一旦プリフェッチされたI−ライン内の分岐命令の結果が事前解決されると、必要に応じて、事前解決された分岐命令のターゲット・アドレスを用いて、付加的なI−ラインをプリフェッチすることができる。
条件分岐命令がキャッシュからプリフェッチされる一実施形態において、別のI−ライン内の予測可能な条件分岐命令(又は、事前解決された条件分岐命令)に基づいて、プリフェッチが(及び/又は、I−ラインのチェーンがプリフェッチされる場合、他の先行するプリフェッチが)行なわれた場合にのみ、条件分岐命令を事前解決することができる。随意的に、場合によっては、たった1個又は2個の予測不可能な条件分岐命令(例えば、予測不可能な分岐命令に基づいたプリフェッチ、これに続く別の予測不可能な分岐命令に基づいたプリフェッチ)に基づいて先行するプリフェッチが行なわれた場合に限り、条件分岐命令を事前解決することができる。予測不可能な条件分岐命令に基づいて先行するプリフェッチの数を制限することによって、プリフェッチされたI−ライン内の命令を最終的に実行することができない場合(例えば、予測とは正反対の結果を用いて最終的に解決される、予測不可能な分岐命令に基づいた不正確なプリフェッチのために)、事前解決を行なうのに必要なリソースを保存することができる。
図9は、本発明の一実施形態による、L2キャッシュ112からフェッチされた(又は、プリフェッチされた)条件分岐命令を事前解決するための例示的な回路を示すブロック図である。図示されるように、例えば、L2キャッシュ112からフェッチされ、プリデコーダ及びスケジューラ220を介してI−キャッシュ222に中継されるI−ラインに格納された1つ又は複数のアドレスに基づいて、I−ラインのプリフェッチを行なうために、プリフェッチ回路902を用いることができる。また、図示されるように、事前解決可能な分岐及び事前解決可能な分岐命令の組み合わせを検出し、かつ、L2キャッシュ112からフェッチ又はプリフェッチされるI−ラインから命令を選択するために、分岐事前解決検出及び選択回路904を設けることができる。
一実施形態においては、事前解決される命令を、キュー906内に配置することができる。発行及びディスパッチ回路234を用いて、命令をI−ライン・バッファ232又はキュー906から発行するかどうかを判定することができる。場合によっては、プロセッサ・コア114の自由サイクル(例えば、未使用のプロセッサ・サイクル)中、条件分岐命令又は分岐命令の組み合わせを実行することができる。例えば、一実施形態においては、実行中、I−ライン・バッファ232内の命令を優先することができる。I−ライン・バッファ232から実行される命令がストールをもたらす(例えば、キャッシュ・ミスのために)場合、発行/ディスパッチ回路234は、キュー906から命令を試験発行し、これにより、プロセッサ・コア114内の他の命令の実行を妨げることなく、事前解決を実行するために、プロセッサ・コア114が用いることができる。随意的に、一実施形態においては、命令がある閾値時間キュー内にあった後、又はI−ライン・バッファ232からの閾値数の命令が実行された後、キュー906から命令を試験発行することができる(例えば、試験発行された条件分岐命令又は分岐命令の組み合わせごとに、第1の数のスケジューリングされた命令をアウト・オブ・オーダー方式で実行することができる)。
キュー906内の分岐命令/組み合わせを試験発行するための他の実施形態は、当業者には容易に明らかになるはずである。例えば、先行実行命令タグを命令内に配置する、又はキュー906内の命令と共に格納することができ、プログラム・カウンタが先行実行命令タグとほぼ等しいとき(例えば、プログラム・カウンタが命令の実行から1キャッシュ・ライン離れているときなど、プログラム・カウンタが先行実行命令タグから離れた閾値数の命令であるとき)、タグ付けされ命令をキュー906からた取り出し、試験発行することができる。例えば、先行実行命令タグは、試験発行される事前解決命令のより上位のビットだけを提供することができる。先行実行命令タグのより上位のビットは、例えば、試験発行される命令を含む、命令ライン、2つの命令ラインのグループ、又は4つの命令ラインのグループ等を識別することができる。プログラム・カウンタが識別された命令ライン内又はその付近に含まれるとき、タグ付けされた命令を試験発行することができ、上述のような条件分岐命令を実行する際に後で使用するために、事前解決結果を格納することができる。
したがって、プリフェッチされた命令がキュー906内に配置された場合、実行される可能性が高い命令(例えば、プログラム・カウンタとほぼ等しい先行実行命令タグを有し、かつ、事前解決命令付近で分岐し得る先行する分岐命令を有することができない事前解決命令)だけを、キュー906から実際に取り出し、実行することができる。随意的に、キュー906は、キュー内の命令が通過する一定の遅延を有することができる。命令が一定の遅延期間にわたってキュー906内にあった後、命令を試験実行することもできる。
本発明の一実施形態において、条件分岐命令の事前解決された結果を用いて、I−ラインの後のプリフェッチを行なうことができる。例えば、分岐条件が成立するときに条件分岐命令が別のI−ライン内のターゲット命令に分岐する場合、分岐命令の事前解決された結果が、分岐条件が成立することを示す場合には、他のI−ラインをプリフェッチすることができる。事前解決された結果が、分岐条件が不成立であることを示す場合、別の分岐命令のターゲット又は別の後続I−ラインに対して、プリフェッチを用いることができる。
本発明の一実施形態においては、I−キャッシュ222からフェッチ又はプリフェッチされた条件分岐命令又は条件分岐命令の組み合わせを事前解決することができる。例えば、I−キャッシュ222からフェッチされた第1のI−ライン(例えば、プロセッサ・コア114からのデマンド/要求に応答して)は、1つ又は複数のターゲット有効アドレス(或いは、有効アドレスの1つ又は複数の部分、例えば、その部分は、I−キャッシュ222内のI−ラインを識別するのに十分なだけのアドレス・ビットとすることができる)を含むことができる。ターゲット有効アドレスは、例えば、最初にフェッチされたI−ラインにおける命令の後に実行することができる命令を含む後続I−ラインに対応することができる。場合によっては、プリデコード及びスケジューリング(例えば、プリデコーダ及びスケジューラ220による)の際に、フェッチされる一連のI−ラインに対応するターゲット・アドレスを生成し、これをI−ライン内に配置することができる。随意的に、以下に述べられるように、第1のI−ライン内の出口分岐命令についてのターゲット・アドレスを用いることができる。
一実施形態においては、1つ又は複数のターゲット有効アドレスを用いて、I−キャッシュ222から後続I−ラインをプリフェッチすることができる。例えば、第1のI−ラインは、2つのI−ラインを識別する2つの有効アドレスの部分を含むことができ、その各々をプリフェッチすることができる。場合によっては、プリフェッチされるI−ラインがI−キャッシュ222にないという判定が行なわれる場合、L2キャッシュ112からI−ラインをフェッチすることができる。同様に、各々のプリフェッチされたI−ラインについて、後のプリフェッチのために(例えば、一連のプリフェッチを行なうために)プリフェッチされたI−ライン内のターゲット・アドレスを用いることができる。
有効アドレスを用いてL1キャッシュ222からプリフェッチされる各I−ラインを、1つ又は複数のバッファ内に配置することができる。各々のI−ラインについて、I−ラインが事前解決可能な条件分岐命令又は条件分岐命令の組み合わせを含むかどうかの判定を行なうことができる。上述のように、I−ラインが事前解決可能な条件分岐命令又は条件分岐命令の組み合わせを含む場合には、それらをアウト・オブ・オーダー方式で試験発行し、事前解決することができる。
図10は、本発明の一実施形態による、I−キャッシュ222からフェッチされた(又は、プリフェッチされた)条件分岐命令を事前解決するための例示的な回路を示すブロック図である。図示されるように、I−キャッシュ・プリフェッチ回路1002を用いて、I−キャッシュ222からフェッチ又はプリフェッチされたI−ライン内のターゲット・アドレスを検出し、該ターゲット・アドレスに対応するI−ライン要求を発行することができる。次に、プリフェッチされたI−ラインを、4つのI−ライン・バッファ232、1010、1012、1014のうちの1つの中に配置することができる。例えば、第1のI−ライン・バッファ232を用いて、命令をプログラム順に実行することができ(例えば、実行されているプログラムの現在の部分について)、一方、他のI−ライン・バッファ1010、1012、1014を、条件分岐命令/命令の組み合わせのアウト・オブ・オーダー実行のために用いることができる。予測されていない又は事前解決されていない分岐パスをバッファリングするため、又は、以下に述べられる同時マルチスレッド処理などの他の目的のために、他のI−ライン・バッファ1010、1012、1014を用いることもできる。
一旦プリフェッチされたI−ラインからの条件分岐命令/命令の組み合わせがI−ライン・バッファ1010、1012、1014内に配置されると、上述のように、事前解決のために、条件分岐命令/命令の組み合わせをアウト・オブ・オーダー方式で試験発行することができる。場合によっては、(例えば、図9のキュー906を介して)L2キャッシュ112からアウト・オブ・オーダー方式で試験発行された命令に関して上述されたように、プロセッサ・コア114における自由サイクル中、他のバッファ1010、1012、1014からの条件分岐命令/命令の組み合わせだけを試験発行し、実行することができる。
I−キャッシュ222又はL2キャッシュ112からフェッチされた命令の事前解決に関して上述したが、例えば、条件分岐命令がL3キャッシュからフェッチされた後など、他の時刻に事前解決を実行することもできる。
上述のように、事前解決された条件分岐命令の結果(例えば、分岐条件が成立する又は分岐条件が不成立である)を格納し、後続命令のスケジューリングを決定するために後で用いることができる(例えば、後続命令をプロセッサ・コア114に正しく発行し、及び/又はプリフェッチすることを可能にする)。本発明の一実施形態においては、条件分岐命令の結果を、コンテンツ・アドレス可能メモリ(CAM)を用いてアクセスされるビットとして格納することができる。条件分岐命令の事前解決が条件分岐命令がとられることを示す場合には、格納されたビットを設定することができる。さもなければ、事前解決が条件分岐命令がとられないことを示す場合には、格納されたビットを消去することができる。
図11は、本発明の一実施形態による、事前解決された条件分岐情報を格納するための例示的なCAMを示すブロック図である。アドレスがCAM1102に適用されると、CAM1102の出力は、アドレスに対応するエントリがCAM1102内に存在するかどうかを示し、エントリを識別することができる。次に、選択回路1104によってエントリ識別を使用し、例えば、対応する事前解決された分岐データ(例えば、RAMアレイ)のテーブル1106から、エントリ/アドレスと関連したデータを得ることができる。したがって、分岐命令のアドレスをCAM1102への索引として使用し、もしあれば、事前解決された分岐命令の格納された結果を得ることができる。場合によっては、条件分岐命令アドレスの一部だけを用いて、条件分岐命令の結果を格納することができる。実行中、CAM1102をチェックして、分岐命令の結果が事前解決されたかどうかを判定することができ、事前解決された場合には、これに応じて分岐命令及び後続命令の実行をスケジューリングする。さらに、上述のように、場合によっては、事前解決可能であり、予測可能ではない条件分岐命令だけを事前解決することができる。全ての条件分岐命令を事前解決できるわけではないので、これに応じて、条件分岐命令を格納するのに必要なメモリ(例えば、CAM1102及び/又はテーブル1106)のサイズを減少させることができる。
本発明の一実施形態においては、CAM1102及び事前解決された分岐データ・テーブル1106を用いて、1つ又は複数の条件分岐命令についての条件レジスタ・ビット(例えば、条件分岐命令及び/又は他の情報の結果の代わりに、或いはそれに加えて)を格納することができる。条件分岐命令が実行のためにスケジューリングされているとき、条件分岐命令に対応する条件レジスタ・エントリのビットをチェックし、分岐条件が成立するか又は分岐条件が不成立であるかを判定することができる。
例えば、条件レジスタが、プロセッサ110で処理した値がゼロである(ゼロである場合は分岐する、すなわちBRZ)ことを示す場合には、1つのタイプの条件分岐命令の分岐条件が成立し得る。BRZ命令及び後続命令が実行のためにスケジューリングされているとき、プロセッサ110は、CAM1102及びテーブル1106をチェックして、BRZ命令に対応する条件レジスタ・エントリがテーブル1106内にあるかどうかを判定することができる。こうしたエントリが配置されると、条件レジスタ・エントリにおけるゼロ・ビット(Z−ビット)を調べて、条件分岐命令の分岐条件が成立するか(Z−ビットが設定された場合)、又は分岐条件が不成立であるか(Z−ビットが消去される場合)を判定することができる。
本発明の一実施形態においては、複数の条件分岐命令が、事前解決された分岐データ・テーブル1106内の単一の条件レジスタ・エントリを利用してもよい。各々の命令は、条件レジスタ・エントリをチェックして、分岐命令の分岐条件が成立するか又は分岐条件が不成立であるかを判定することができる。例えば、1つの条件分岐命令が、条件レジスタ・エントリについてのZ−ビットをチェックして、前の計算結果がゼロであったかどうかを判定することができる。別の条件分岐は、前の計算結果がオーバーフローをもたらしたか(例えば、計算により、値を格納するのに用いられるカウンタによって保持されるのに大きすぎる値がもたらされたか)を示すオーバーフロー・ビットをチェックすることができる。したがって、場合によっては、各々を複数の分岐命令のために用いることができる条件レジスタ・エントリを格納することによって、事前解決された分岐データ・テーブル1106のサイズを減少させることができる。
場合によっては、条件分岐命令が事前解決された場合でも、条件分岐命令の両方のターゲットをプリフェッチし、及び/又は、バッファに入れることができる。例えば、場合によっては、条件分岐命令は、事前解決が完全に正しいかどうかを判定することなく(例えば、実行時に、プログラム順の条件分岐命令に先行する命令が、事前解決された結果を修正するかどうかを判定することなく)、条件分岐命令を事前解決することがある。このような場合、条件分岐命令の事前解決は、条件分岐命令のパスに後続する「最良の推量(best quess)」とすることができる。一実施形態においては、事前解決されたパスだけを発行しながら、条件分岐命令の両方のパス(事前解決されたパス及び事前解決されていないパス)をバッファに入れることによって、事前解決されたパスが命令の後に続かなかったことを条件分岐命令の実行が示す場合でも、バッファに入れられ事前解決されていないパスを発行することによって、プロセッサ110が迅速に回復することができる。
場合によっては、例えば、条件分岐命令は、条件分岐命令がL2キャッシュ112から取り出された時点で解決することができない条件に依存するので、条件分岐命令は、事前解決可能ではない。条件分岐命令のために事前解決が用いられない場合、他の技術を用いて、分岐命令後の命令の実行をスケジューリングすることができる。
例えば、本発明の一実施形態において、CAM1102をチェックして、条件分岐命令に対応するエントリが存在するかどうかを判定することができる。条件分岐命令についての対応するエントリが存在することをCAM1102が示す場合には、条件分岐命令及び/又は後続命令のスケジューリング及び実行のために、対応するエントリを用いることができる。条件分岐命令についての対応するエントリが存在しないことをCAM1102が示す場合には、条件分岐命令及び/又は後続命令のスケジューリング及び実行のために、別の方法を用いることができる。例えば、分岐予測情報(上述された)を用いて、事前解決可能でない条件分岐命令の結果を予測することができる。随意的に、以下に述べられるように、断定された発行(predicated issue)又はデュアル・パス発行(dual-path issue)を用いて、事前解決可能でない条件分岐命令を実行することができる。随意的に、当業者には周知のいずれかの他の条件分岐解決機構を用いて、条件分岐命令に後続する命令をスケジューリングすることができる。
条件分岐命令のためのデュアル・パス発行
本発明の一実施形態においては、プロセッサ110を用いて、条件分岐命令の(例えば、分岐条件が成立する又は分岐条件が不成立である)複数のパスを同時に実行することができる。例えば、プロセッサ110が条件分岐命令を検出すると、プロセッサ110は、条件分岐命令の分岐条件成立パスからの命令と分岐条件不成立パスからの命令の両方を発行することができる。条件分岐命令を実行し、条件分岐命令の分岐条件が成立するか又は分岐条件が不成立であるかの判定を行なうことができる(例えば、両方の分岐パスが発行された後)。条件分岐命令の分岐条件が成立する場合、分岐条件不成立パスからの命令の結果を廃棄することができる。分岐条件が不成立である場合、分岐条件成立パスからの命令の結果を廃棄することができる。
図12は、本発明の一実施形態による、条件分岐命令の複数のパスを実行するためのプロセス1200を示す流れ図である。図示されるように、プロセス1200は、実行される命令のグループを受信するステップ1202で開始することができる。ステップ1204において、命令のグループは、条件分岐命令を含むかどうかについての判定を行なうことができる。命令のグループが条件分岐命令を含む場合には、ステップ1206において、プロセッサ110は、条件分岐命令の分岐条件成立パス及び分岐条件不成立パスから命令を発行することができる。ステップ1208において、条件分岐命令の分岐条件が成立するか又は分岐条件が不成立であるかについての判定を行なうことができる。条件分岐命令の分岐条件が不成立である場合には、ステップ1210において、分岐条件成立パスからの命令の結果を廃棄することができ、一方、分岐条件不成立パスからの命令の結果を伝搬することができる。しかしながら、条件分岐命令の分岐条件が成立する場合には、ステップ1212において、分岐条件不成立パスからの命令の結果を廃棄することができ、一方、分岐条件成立パスからの命令の結果を伝搬することができる。次に、ステップ1214においてプロセスが終了することができる。
本発明の一実施形態においては、例えばローカル分岐予測及び/又はグローバル分岐予測を用いて条件分岐命令が予測不可能である場合(又は、随意的に、条件分岐命令が完全に予測可能でない場合)、デュアル・パス発行のみを用いることができる。例えば、ローカル分岐予測が用いられる場合に、条件分岐命令がローカルに予測可能である場合には(例えば、CNTが予測可能性の閾値より大きいか又はこれと等しい場合には)、デュアル・パス発行を用いることはできない。条件分岐がローカルに予測不可能である場合には、デュアル・パス発行(又は、随意的に、事前解決又は断定された発行)を用いることができる。ローカル分岐予測及びグローバル分岐予測の両方が用いられる場合に、条件分岐命令がローカルに予測可能であるか又はグローバルに予測可能である場合には、デュアル・パス発行を用いることができない。しかしながら、条件分岐命令がローカルにもグローバルにも予測可能でない場合には、デュアル・パス発行(又は、随意的に別の方法)を用いて、条件分岐命令を実行することができる。さらに、場合によっては、分岐の事前解決が用いられる場合、条件分岐命令が予測可能でも事前解決可能でもない場合にのみ、デュアル・パス発行を用いることができる。
場合によっては、デュアル・パス発行が行われるかどうかは、プロセッサ・コア114において2つのスレッドが同時に実行されるかどうかによって決まり得る。例えば、プロセッサ・コア114において1つのスレッドだけが実行されている場合には、予測不可能な条件分岐命令が検出される場合、又は部分的にのみ予測可能な分岐が検出される場合、デュアル・パス発行を行なうことができる。
場合によっては、デュアル・パス発行が行われるかどうかは、条件分岐命令の予測可能性、及び、2つのスレッドが実行されているかどうかの両方によって決まり得る。例えば、条件分岐命令が実行されており、予測不可能な条件分岐命令が検出された場合、デュアル・パス発行が行なわれる間に別のスレッドが休止されているとしても、デュアル・パス発行を用いることができる。しかしながら、部分的に予測可能な条件分岐命令が検出された場合には、他のスレッドが既に休止される又は実行されていない場合も、デュアル・パス発行のみを用いることができる。こうしたデュアル・パス発行の判定はまた、各々のスレッドと関連した優先順位によっても決まり得る。例えば、場合によっては、上述の条件のいずれかを用いて、デュアル・パス発行を受けるスレッドの優先順位が、実行されている他のスレッドの優先順位よりも大きい場合に限り、デュアル・パス発行を行なうことができる。
本発明の一実施形態においては、条件分岐命令の検出及びデュアル・パス発行の開始は、命令ラインがL2キャッシュ112からフェッチされ(又は、プリフェッチされ)、I−キャッシュ222に送られたときに、プリデコーダ及びスケジューラ回路220によって行なうことができる。場合によっては、プリデコーダ及びスケジューラ220は、所定の命令グループが条件分岐命令を含むかどうかを判定することができる。プリデコーダ及びスケジューラ220を用いて、条件分岐命令がローカル及び/又はグローバルに予測可能であるかどうかを判定することができる。さらに、プリデコーダ及びスケジューラ220を用いて、条件分岐命令の各々のパスについて命令及びI−ラインをフェッチし、プリフェッチし、及び/又はバッファに入れることができる。
一実施形態において、デュアル・パス発行を用いて条件分岐命令を実行できるとプリデコーダ及びスケジューラ220が判断する場合、プリデコーダ及びスケジューラ220は、命令のためにデュアル・パス発行を用い得ることを示すビットを格納することができる(場合によっては、例えば、命令が事前解決可能でなく、予測可能でもないと判断した後で)。ビットは、例えば、命令にエンコードすることができ、さもなければ、ビットを条件分岐命令と関連付ける方法で格納することができる。場合によっては、デュアル・パス発行が適切であるかどうかを判定するのに用いられる電力消費を減少させるために、以下に述べられるトレーニング段階中にのみ、ビットを計算し、格納することができる。ビットが後で検出されたとき、デュアル・パス発行を用いて、条件分岐命令を実行することができる。
本発明の一実施形態において、プロセッサ・コア114は、条件分岐命令について各々のパスを実行するために、同時マルチスレッド処理(SMT)機能を用いることができる。典型的には、同時マルチスレッド処理を用いて、第1及び第2のスレッドを発行し、プロセッサ110において実行することができる。条件分岐命令のデュアル・パス実行のために用いられた場合、条件分岐命令の1つのパスを、プロセッサ110への第1のスレッドとして発行することができ、条件分岐命令の別のパスを、プロセッサ110への第2のスレッドとして発行することができる。条件分岐命令の結果が判定された後、結果(分岐条件が成立する又は分岐条件が不成立である)を用いて、パス/スレッドの一方の実行を続行し、他方のパス/スレッドの結果を廃棄することができる。例えば、条件分岐の分岐条件が成立する場合には、分岐条件成立スレッドが実行を続行することができ、一方、分岐条件不成立スレッド(及び結果)を廃棄することができる。同様に、条件分岐の分岐条件が不成立である場合には、分岐条件不成立スレッドは実行を続行することができ、一方、分岐条件成立スレッド(及び結果)を廃棄することができる。
図13は、本発明の一実施形態による、条件分岐命令のデュアル・パス発行のために用いられる回路を示すブロック図である。図示されるように、場合によっては、各々のスレッドにつき1つの、2つのI−ライン・バッファ1332、1336を設けることができる。同様に、各々のスレッドにつき1つの、2組の発行及びディスパッチ回路1334、1338を設けることができる。1つのスレッドからの命令を他のスレッドとマージし、組み合わせられた発行グループを形成するように、マージ(merge)回路1302を設けることもできる。場合によっては、単一の発行グループが、両方のスレッドからの命令を含むことができる。各々のスレッドには、レジスタ・ファイル240内の別個の組のレジスタ1340、1342を設けることもできる。分岐パス選択回路1304を用いて、スレッドの各々についての条件分岐命令の分岐条件が成立するか又は分岐条件が不成立であるかを判定し、必要に応じて、いずれかのスレッドの結果を伝搬し、又はいずれかのスレッドの結果を廃棄するることができる。
図14は、本発明の一実施形態による、同時マルチスレッド処理を用いて実行される例示的な命令1402を示すブロック図である。図示されるように、命令は、op−コード、1つ又は複数のレジスタ・オペランド(Reg.1、Reg.2)、及び/又はデータを含むことができる。各々の命令及び/又はレジスタ・オペランドについて、命令に用いるために、スレッド・レジスタ1340、1342の組を示す1又はそれ以上のビット(T)を提供することができる。したがって、例えば、スレッド0における命令及びスレッド1における命令の両方が、同じレジスタ(例えば、Reg.1)を用いることができるが、スレッド0における命令はスレッド0のレジスタ1340においてレジスタ1を使用し、一方、スレッド1における命令はスレッド1のレジスタ1342においてレジスタ1を使用することになり、これにより命令間の競合が回避される。
本発明の一実施形態においては、プロセッサ110によりスレッド・バリディティ(validity)ビット(T0V、T1V)を使用し、所定の分岐パスが有効か又は無効かを判定することができる。例えば、両方のビットの組を用いて、条件分岐命令の各パスについて各命令又は命令グループを発行し、両方のスレッドが有効であることを示すことができる。分岐命令の結果を判定した後、後続する分岐パス(例えば、分岐条件が成立する又は分岐条件が不成立である)についてのビットを設定したままにし、一方、後に続かない分岐パスについてのビットを消去することができる。そのスレッド内の命令についてのスレッド・バリディティ・ビットが設定された場合、命令の結果は、例えば、D−キャッシュ224又はレジスタ・ファイル240に転送する又は書き戻すことによって、伝搬し、及び/又は格納することができる。そのスレッド内の命令についてのスレッド・バリディティ・ビットが消去された場合、命令の結果は、廃棄することができ、プロセッサ110によって伝搬することはできない。したがって、スレッド・ビットT0V、T1Vを用いて、後続する分岐パスについてのスレッドの実行を選択し、継続することができる。
本発明の一実施形態においては、スレッド・ビットT及び/又はスレッド・バリディティ・ビットT0V、T1Vは、各々の命令1102に格納する(例えば、エンコードする)ことができる。随意的に、スレッド・ビットT及び/又はスレッド・バリディティ・ビットT0V、T1Vは、例えば、命令1402及びビットを保持するラッチのグループ内など、命令1402の外部に格納してもよい。
本発明の一実施形態においては、プロセッサ・パイプラインに対して各々のパスについての命令を発行するとき、デュアル発行された条件分岐命令の予測パス(predicted path)が好都合であり得る。場合によっては、条件分岐命令がローカル及び/又はグローバルに予測不可能であっても、こうした予測を用いることができる(例えば、「最良の」推量として)。
非予測パス(non-predicted path)よりも予測パスの方が好ましい例として、予測パスについての命令に対する非予測パスについての命令の一定の比率を出すことができる。例えば、発行グループ内に4つの命令が配置された場合、比率は、予測パスからの3つの命令に対して非予測パスからの1つの命令とすることができる。発行グループ内に6つの命令が配置された場合、比率は、予測される分岐について4であるのに対して予測されない分岐について2とすることができる。発行グループ内に8つの命令が配置された場合、比率は、予測パスについて6であるのに対して非予測パスについて2とすることができる(3対1の比率でもある)。
非予測パスよりも予測パスの方が好ましい別の例として、予測パスについての命令に対する非予測パスについての命令の比率は、条件分岐命令の予測可能性のレベルに基づいて変化し得る。条件分岐命令の予測可能性が第1の範囲内にある場合には、第1の比率の命令を発行することができる。例えば、条件分岐命令が中程度に予測不可能である場合には、例えば、3対1といった大きな比率の命令を発行することができる。条件分岐命令の予測可能性が第2の範囲内にある場合には、第2の比率の命令を発行することができる。例えば、条件分岐命令が完全に予測不可能である場合には、例えば、1対1などの等しい比率の命令を発行することができる。
場合によっては、プロセッサ110によって実行されている別のスレッドがストールされた場合にのみ、断定された分岐命令のためのデュアル発行を用いることができる。例えば、プロセッサ110が第1のスレッド及び第2のスレッドを実行しており、第1のスレッドが条件分岐命令を含む場合、プロセッサ110は、例えば、キャッシュ・ミスのために第2のスレッドがストールされている場合に、第1のスレッドのデュアル・パス発行を用いることができる。場合によっては、上述した他の条件を適用することもできる。例えば、第2のスレッドがストールされる場合、及び、条件分岐命令がローカル及び/又はグローバルに予測不可能である場合の両方に、デュアル・パス発行を用いることができる。
デュアル・パス発行がSMT回路を用いる幾つかの場合において、デュアル・パス発行の一方のパスがストールする場合、ストールされたスレッドが実行を再開するまで(例えば、キャッシュ・ミスのために第1のスレッドがストールされる場合には、例えば、L2キャッシュ112から必要なデータが取り出されるまで、第2のスレッドを単独で発行することができる)、或いは、条件分岐命令の結果が解決され、スレッドの一方が廃棄されるまで、発行された唯一のスレッドとすることができる。場合によっては、上述のように、ストールされたスレッドが、予測され、好ましい条件分岐命令のパスである場合でも、他方のスレッドがストールされた場合に一方のスレッドの発行を行なうことができる。
本発明の一実施形態においては、I−ライン・バッファ232及び/又は遅延キュー320が、条件分岐命令の両方のパスからの命令を含むことができる。I−ライン・バッファ232及び遅延キュー320は格納回路であり、処理回路を含まないので、比較的少ないオーバーヘッドで、条件分岐命令の両方のパスを格納し、バッファに入れ、キューに入れることができる。条件分岐命令の結果が解決された後、後に続かない分岐パスについての命令を無効なものとしてマーク付けし(例えば、スレッド・バリディティ・ビットT0V、T1Vを変えることによって)、必要に応じて、I−ライン・バッファ232及び/又は遅延キュー230から廃棄することができる。
場合によっては、制限された処理リソースについて2つの命令が競合している場合、デュアル・パス発行を制限することがある。例えば、両方のパスが、実行のために所定のパイプライン(例えば、パイプラインP0)を必要とする1つ又は複数の命令を含む場合には、分岐パスのデュアル・パス発行が制限されることがある。処理リソースが不十分であるために条件分岐命令のパスについてのデュアル・パス発行が制限される、本発明の一実施においては、条件分岐命令の予測パスを発行し、制限されたリソースを用いて実行することができる。
また、例えば、プロセッサ110におけるリソースの制約/競合のために、条件分岐の一方のパスだけの発行が制限されることがあり、プロセッサ110は、条件分岐命令の両方のパスを発行し、リソースが両方のパスによって共有されるようにすることができる。例えば、第1の分岐パスをストールし、第2の分岐パスがリソースを使用してもよい。次に、第2の分岐がリソースの使用を終了した後、第1の分岐パスが実行を再開し、リソースを使用してもよい。随意的に、リソースの競合が生じないように、分岐パスについての命令のスケジューリングを構成することができる。例えば、こうしたスケジューリングは、リソースを使用する第1の分岐パスに対してイン・オーダー方式で命令を発行しながら、第2の分岐パスに対してアウト・オブ・オーダー方式で命令を発行することを含むことができる。第1の分岐パスがリソースの使用を終了した後、リソースを使用する第2の分岐パスからの命令を発行することができる。
本発明の一実施形態において、条件分岐命令のデュアル発行は、分岐距離が閾値距離を下回る分岐に制限することができる。例えば、場合によっては、プロセッサ110は、プロセッサ・コア114において命令をアドレス指定するために、アドレスの下部のみを用いることができる(例えば、ベース・アドレスに、ベース・アドレスからのオフセットとしての下部を加えたものを用いて、各々の命令をアドレス指定することができる)。例えば、部分的アドレスを格納し、計算するときに減少したプロセッサ・リソースを用いることができるので、こうした部分的アドレス指定を用いることができる。
各々の命令アドレスの下部オフセット部分が、プロセッサ・コア114においてその命令をアドレス指定するために用いられる、一実施形態においては、分岐距離がアドレス部によって提供されるオフセットよりも短い場合にのみ、デュアル・パス発行を用いることができる。こうした場合、デュアル・パス発行についての分岐距離を制限することによって、両方のパスが、命令をアドレス指定するためにプロセッサ・コア114に用いられる同じベース・アドレスを有効に使用することができる。また、一実施形態においては、以下に述べられるように、例えば、分岐距離が条件分岐命令の効率的なデュアル発行の閾値距離より短い場合に、断定された発行を用いて条件分岐命令が実行されるなど、分岐距離上により低い距離閾値を置くことができる。
条件分岐命令の一方のパスだけが発行される幾つかの場合においては、例えば、発行されない分岐パスについて命令をフェッチし、それらの命令をI−キャッシュ222及び/又はI−ライン・バッファ232内に置くことによって、条件分岐命令の他方のパスをバッファに入れることもできる。条件分岐命令の結果が、その発行されたパスが後に続かなかったことを示す場合、発行されなかったパスからのバッファに入れられた命令を、迅速に発行し、プロセッサ110によって実行することができ、これにより、発行されたが、後に続かなかった分岐パスから、発行されなかったが後に来た分岐パスに切り換えるのに必要な待ち時間が低減される。条件分岐命令の両方のパスをバッファに入れ、予測パスだけを発行することによって、条件分岐命令の結果が非予測パスに後続すべきであることを示す場合でも、プロセッサ110は、非予測パスの実行を迅速に開始することができる。
一実施形態においては、分岐が、十分に予測可能であるための閾値を下回るが、部分的に予測可能であるための閾値より大きいか又はこれと等しいことを分岐命令の予測可能性が示す場合には、両方の分岐パスをバッファに入れるものの、一方の分岐パスだけを発行することができる。こうした場合、部分的に予測される条件分岐命令についての予測パスを、プロセッサ110による実行のために、バッファに入れることも発行することもできる。非予測パスをバッファに入れ、発行しないことも可能である。条件分岐命令の結果が、分岐命令が予測され、発行されたパスに後続することを示す場合には、予測され発行されたパスは、実行を継続することができる。条件分岐命令の結果が、予測パスに後続しなかったことを示す場合には、バッファに入れられ発行されなかったパスを発行し、実行することができる。
場合によっては、条件分岐命令の断定された(predicated)発行(以下に述べられる)が効率的でない場合(例えば、中間にある(interceding)命令の数のために)、或いは、断定された発行が可能でない場合(例えば、命令の相互依存性のために)にのみ、デュアル・パス発行を用いることができる。
短い条件分岐命令のための断定された実行
場合によっては、条件分岐命令は、分岐条件が成立する場合、条件分岐命令と条件分岐命令のターゲットとの間に配置された1つ又は複数の中間の命令の上をジャンプすることができる。条件分岐命令の分岐条件が不成立である場合には、中間の命令を実行することができる。こうした分岐命令は、短い条件分岐と呼ぶことができる。
本発明の一実施形態においては、条件分岐命令の結果が分かる前に、短い条件分岐命令と短い条件分岐命令のターゲットとの間の中間の命令を、例えばプロセッサ110によって発行し、実行することができる。条件分岐命令が実行されると、分岐条件が成立するかどうかについての判定を行なうことができる。分岐条件が成立する場合には、発行された中間の命令の結果を廃棄することができる。分岐条件が不成立である場合には、発行された中間の命令の結果を格納することができる。条件分岐命令の結果(例えば、分岐条件が不成立である)について中間の命令の結果の使用及び/又は格納を断定(predicate)できるので、短い条件分岐命令にの中間の命令を発行する技術は、「断定された発行」と呼ぶことができる。断定された発行を用いることによって、プロセッサ110は、条件分岐命令の両方のパスを単一パスとして効率的に実行し(例えば、単一のスレッドを使用し、第2のアクティブ・スレッドを妨げない)、分岐条件が成立する場合に条件分岐命令がジャンプする中間の命令の結果を使用するかどうかを、後で判定することができ、これにより、プロセッサ・コア114内の命令の非効率的なストール又はフラッシュなしに、条件分岐命令が実行される。以下に述べられるように、プロセッサが、中間の命令の結果を用いるべきでないと判断する場合には、例えば、ビット(例えば、バリディティ・ビット)を消去することによって、結果を廃棄することができ、中間の命令の結果が無効であることを示す。
図15は、本発明の一実施形態による、短い条件分岐を実行するためのプロセス1500を示す流れ図である。図示されるように、プロセス1500は、実行される命令のグループを受信するステップ1502で開始することができる。ステップ1504において、命令グループが短い条件分岐命令を含むかどうかの判定を行なうことができる。命令グループが短い条件分岐命令を含む場合には、ステップ1506において、短い条件分岐命令と、短い条件分岐命令と短い条件分岐命令のターゲットとの間にある中間の命令とを、例えばプロセッサ・コア114に発行することができる。ステップ1508において、条件分岐命令の結果が、条件分岐の分岐条件が成立することを示すか又は分岐条件が不成立であることを示すかの判定を行なうことができる。分岐条件が不成立である場合には、ステップ1510において、中間の命令の結果を格納し、プロセッサ110において伝搬することができる。分岐条件が成立する場合には、ステップ1512において、中間の命令の結果を廃棄することができる。ステップ1514において、プロセス1200が終了することができる。
図16(A)−図16(C)は、本発明の一実施形態による、短い条件分岐命令(I)を示すブロック図である。図16(A)に示されるように、条件分岐命令Iの分岐条件が成立する場合、命令は、幾つかの中間の命令(I、I、I)を超えてターゲット命令(I)に分岐することができる。しかしながら、条件分岐命令の分岐条件が不成立である場合には、後続命令(例えば、命令I)が実行される前に、中間の命令(I、I、I)を実行することができる。
上述のように、短い条件分岐命令Iが検出された(例えば、プリデコーダ及びスケジューラ220によって)とき、例えば、分岐条件が成立するか又は不成立であるかに関係なく、条件分岐命令I及び中間の命令I−Iをプロセッサ・コア114に発行することができる。本発明の一実施形態においては、各々の命令は、命令の結果が有効であるかどうかを示すバリディティ・ビット(V)を含むことができる。例えば、所定の命令についてビットが設定された場合、命令は有効とすることができ、命令の結果をメモリ、レジスタ及び他の命令に伝搬することができる。所定の命令についてビットが設定されなかった場合、命令は無効とすることができ、命令の結果を廃棄することができ、伝播することはできない。
したがって、本発明の一実施形態においては、設定されたバリディティ・ビットと共に各々の命令を発行することができ、これにより命令が有効であると推定されることが示される。条件分岐命令が実行された後、分岐条件が不成立であるという判定が行なわれた場合(例えば図16(B)に示されるように)、中間の命令I−Iの各々ついてバリディティ・ビットが設定されたままであってもよく、中間の命令が有効であること、及び、中間の命令の結果を伝搬できることを示す。随意的に、分岐条件が成立するという判定が行なわれた場合(例えば、図16(C)に示されるように)、中間の命令I−Iの各々についてバリディティ・ビットを消去することができ、命令の結果を廃棄すべきであることを示す。
例えば、中間の命令の結果を伝搬するかどうかを判定するために、フォワーディング(forwarding)回路、ライトバック回路238、キャッシュ・ロード及びストア回路250、及び/又はプロセッサ110内の他の回路によって、バリディティ・ビットを調べることができる。バリディティ・ビットが設定された場合には、結果を伝搬することができ(例えば、ライトバック回路238は、中間の命令の結果を書き戻すことができる)、バリディティ・ビットが消去された場合には、結果を廃棄することができる(例えば、ライトバック回路238は、中間の命令の結果を廃棄することができる)。本発明の一実施形態においては、あらゆる命令が、バリディティ・ビットを有することができる。随意的に、一実施形態においては、バリディティ・ビットは、条件分岐命令とターゲット命令との間の中間の命令(I3−5)についてのみ、維持及び/又は修正することができる。
一実施形態においては、断定された発行についてのコスト及び/又は効率(例えば、プロセッサ時間のサイクルにおける)がデュアル発行についてのコスト及び/又は効率を下回る場合にのみ、短い条件分岐命令の断定された発行を用いることができる。中間の命令の数が、効率的なデュアル発行の命令閾値数を下回る場合には、断定された発行を行なうことができる。中間の命令の数が、効率的なデュアル発行の命令閾値数よりも多いか又はそれと等しい場合には、デュアル発行を行なうことができる。
一例として、プロセッサ・コア114が34個の命令を同時に処理できる場合、デュアル発行中、各々の分岐パスからの17個の命令を発行及び/又は実行する(又は、部分的に実行する)ことができる。典型的には、分岐命令によって、デュアル・パスの1つだけの分岐条件が成立するので、分岐条件不成立パスからの17個の命令を無効にし、廃棄することができる。したがって、短い条件分岐についての断定された発行を用いるかどうかを判定する際、断定された発行中に17個の命令を廃棄できるかどうかの判定を行なうことができる。例えば、短い条件分岐と短い条件分岐のターゲットとの間の中間の命令の数が17個より少ない場合には、短い条件分岐が分岐され、中間の命令をスキップする場合には、17個未満の命令(デュアル発行のコスト)が廃棄されるので、断定された命令を用いることができる。
場合によっては、断定された発行を行なうかどうかを判定するために、任意の閾値数の中間の命令を選択することができる(例えば、デュアル発行のコストよりも大きい、これと等しい、又はこれより小さい閾値)。中間の命令数が閾値数よりも少ない場合には、短い条件分岐の断定された発行を用いることができる。中間の命令数が閾値より大きいか又はこれと等しい場合には、別の発行形態(例えば、デュアル発行又は予測情報を用いる発行)を用いることができる。
場合によっては、断定された発行を行なうかどうかを判定するとき、中間の命令にさらなる制限を課すことができる。例えば、本発明の一実施形態においては、断定された発行を行なうために、中間の命令の無効化がターゲット命令に悪影響を及ぼさないように(例えば、無効にされた中間の命令からターゲット命令に正しくないデータを転送することによって)、分岐命令のターゲット命令が中間の命令から独立していることが必要とされ得る。随意的に、場合によっては、条件分岐命令の結果が解決される前に不適切な転送が行なわれず、中間の命令は、有効にされるか又は無効にされるかのいずれかであるように、ターゲット命令後の1つ又は複数の命令もまた中間の命令から独立していることが必要とされ得る。
中間の命令と後に実行される命令との間の競合が短い条件分岐命令の断定された発行を排除する幾つかの場合においては、短い条件分岐に対して、デュアル・パス発行(例えば、SMT機能を有する)を用いることができる。
命令を発行するためのデュアル命令キュー
一実施形態において、分岐命令の複数のパスの実行(例えば、予測パス及び非予測パス)を遅延させることができ、これにより、分岐命令に後続するパスを実行する前に分岐命令の結果を判定することが可能になる。場合によっては、いずれのパスからの命令も実際に実行することなく、分岐命令の両方のパスの実行を遅延させることによって、分岐命令の後続しないパスからの命令を不必要に実行することなく、分岐命令の後続するパスを後で実行することができる。
本発明の一実施形態においては、プロセッサ・コア114は、デュアル命令キューを用いて、条件分岐命令の予測パス及び非予測パスの両方の命令の実行を遅延させることができる。例えば、条件分岐命令の両方のパスについて、発行グループを形成することができる。パスの第1のものについての発行グループは、デュアル命令キューの第1のキューに発行することができる。パスの第2のものについての発行グループは、デュアル命令キューの第2のキューに発行することができる。条件分岐命令の結果を判定した後、判定された結果(予測される又は予測されない)に対応する分岐パスからの命令をデュアル命令キューから取り出し、遅延実行パイプラインの実行ユニットにおいて実行することができる。
図18は、本発明の一実施形態による、デュアル命令キューを用いて分岐命令を実行するためのプロセス1800を示す流れ図である。プロセス1800は、実行される命令のグループを受信するステップ1802で開始することができる。ステップ1804において、命令グループが条件分岐命令を含むかどうかの判定が行なわれる。命令グループが条件分岐命令を含む場合には、ステップ1806において、条件分岐命令を実行のために発行することができる。
ステップ1810において、条件分岐命令の予測パスについての命令を、デュアル命令キューの第1のキューに発行することができ、条件分岐命令の予測されないパスについての命令を、デュアル命令キューの第2のキューに発行することができる。ステップ1812において、条件分岐命令の予測パス及び非予測パスについての命令を、ステップ1814において条件分岐命令の結果が判定されるまで、デュアル発行キューにおいて遅延させることができる。分岐命令の予測パスが後続する場合には、ステップ1816において、デュアル命令キューの第1のキューからの命令(予測パスについての命令)を実行ユニットにおいて実行することができる。分岐命令の非予測パスが後続する場合には、ステップ1818において、デュアル命令キューの第2のキューからの命令(非予測パスについての命令)を実行ユニットにおいて実行することができる。ステップ1820において、プロセス1800が終了することができる。
図19は、本発明の一実施形態による、デュアル命令キュー1900を用いるプロセッサ・コア114を示すブロック図である。図示されるように、デュアル命令キュー1900は、第1のI−キュー1902及び第2のI−キュー1904を含むことができる。第1のI−ライン・バッファ232及び第2のI−ライン・バッファ232を用いて、それぞれ条件分岐命令の予測パス及び非予測パスについてI−キャッシュ222からフェッチされた命令をバッファすることができる(逆もまた同様)。条件分岐命令の各々のパスに対して命令を発行するために、発行及びディスパッチ回路234、234を設けることもできる。
一実施形態においては、分岐実行ユニット1910において条件分岐命令を実行することができる。条件分岐命令の結果を判定する間、条件分岐命令の予測パス及び非予測パスについての命令を、それぞれ、I−ライン・バッファ232、232にバッファに入れ、発行及びディスパッチ回路234、234によって発行し、デュアル命令キュー1900のI−キュー1902、1904において遅延させることができる。本発明の一実施形態においては、デュアルI−キュー1900の深さ1906は、分岐実行ユニット1910を用いて条件分岐命令の結果を判定する間、コア114内の命令の実行をストールすることなく、条件分岐命令の両方のパスをバッファに入れるのを可能にするのに十分なものとすることができる。
分岐実行ユニット1910を用いて条件分岐命令の結果(例えば、分岐条件が成立する又は分岐条件が不成立である)を判定した後、その結果を選択回路1908に与えることができる。次に、選択回路1908は、対応するI−キュー1902、1904からの条件分岐命令の後続するパスについての命令を提供することができる。例えば、I−キュー0 1902において、予測パスについての命令が遅延され、I−キュー1 1904において、非予測パスについての命令が遅延される場合、及び、条件分岐命令が非予測パスに後続する場合、選択回路1908は、実行ユニット310によって実行されるI−キュー1 1904からの命令を選択することができる。随意的に、条件分岐命令の結果が、分岐命令が予測パスに後続することを示す場合、選択回路1908は、実行ユニット310によって実行されるI−キュー0 1902からの命令を選択することができる。
図19においては、パイプラインについての単一のデュアルI−キュー1900に関して示されるが、本発明の実施形態は、遅延型実行を利用する各パイプライン(例えば、図3のパイプラインP1、P2、P3)ごとにデュアルI−キューを提供することができる。
場合によっては、選択回路は、デュアル命令キュー1900に格納されたバリディティ・ビット(例えば、分岐実行ユニット1910からの信号の代わりに)を用いて、どの命令を実行ユニット310に発行するかを決定することができる。一例として、分岐実行ユニット1910は、例えば、デュアル命令キュー1900に格納された各パスごとのパス識別子を用いて、パスの一方が有効であり、他方のパスが無効であることを示すことができる。随意的に、各パス内の各命令について、バリディティ・ビットを提供することができる。バリディティ・ビットは、条件分岐命令の結果に基づいて設定又は消去することができる。
例えば、I−キュー0 1902におけるパスをパス0とし、I−キュー1 1904におけるパスをパス1とすることができる。各パス内の各命令は、1に設定するか又は消去して0にすることができるバリディティ・ビットを有することができる。分岐実行ユニット1910が、分岐命令のどのパスに後続するかを判定した後、後続するパスについてのバリディティ・ビットを1に設定し、そのパスについての命令を実行ユニット310において実行すべきであることを示す。後に続かないパスについてのバリディティ・ビットを0に設定し、そのパスについての命令を実行ユニット310において実行すべきではないことを示すことができる。したがって、選択回路1908により命令を受信したとき、選択回路1908は、バリディティ・ビット(例えば、分岐実行ユニット1910からの信号の代わりに)を用いて、どの命令を実行ユニット310に提供するかを決定することができる。例えば、選択回路1908は、実行のために、設定されたバリディティ・ビットを有する命令だけを実行ユニット310に提供することができる。
一実施形態においては、同時マルチスレッド処理を使用しないプロセッサ・コア114において、デュアル命令キュー1900を用いることができる。したがって、場合によっては、2つのグループの発行回路234、234に対してマージ回路を設けることができる(例えば、予測パス及び非予測パスを同時に実行することはできず、よって、いかなるマージも必要とすることなく、別個の発行グループを生成し、発行することができるので)。
随意的に、本発明の一実施形態において、同時マルチスレッド処理を使用するプロセッサ・コア114において、デュアル命令キュー1900を用いることができる。例えば、デュアル命令キュー1900をマージ回路と共に使用し、第1のスレッドにおける条件分岐命令、及び、第2のスレッドにおける命令についての予測パス及び非予測パスの両方を発行することができる。また、本発明の実施形態は、第1のスレッドの予測パス及び非予測パスについての命令、並びに、第2のスレッドからの命令を保持する3倍幅(triple-width)の命令キューを提供することができる。スレッドの優先順位に応じて、及び/又は、実行されるスレッドの数に応じて、選択回路を用いて、3倍幅の命令キューにおける遅延キュー・パスのいずれか1つから選択することができる。例えば、3倍幅の命令キューから、より優先順位が高いスレッドからの有効な命令を実行することができる。随意的に、3倍幅の命令キューから、休止されていないスレッドからの有効な命令を発行することができる。
本発明の一実施形態においては、デュアル命令キュー1900を用いて、条件分岐命令が予測不可能であるか又は部分的にのみ予測可能である場合に限り、予測パス及び非予測パスを保持することができる。条件分岐命令が予測可能である場合には、予測パスをデュアル命令キュー1900の一方のパス内に保持し、例えば別のスレッドからの他の命令をデュアル命令キュー1900の他方のパス内に保持し、例えば他方のスレッドが休止される場合に発行することができる。
場合によっては、上述のように、複数の遅延実行パイプライン(例えば、P1、P2等)において、複数のデュアル命令キュー1900を用いることができる。随意的に、例えば、最も遅延した実行パイプラインといった単一の実行パイプラインにおいて、デュアル命令キューを用いることができる。複数のデュアル命令キュー1900が用いられる一実施形態においては、条件分岐命令を実行する際にどのデュアル命令キュー1900を用いるべきかの判定を行なうことができる。例えば、条件分岐命令が長期の依存関係を含み、拡張されたプロセッサ・サイクル数にわたって条件分岐命令の結果を判定することができない場合には、最も遅延したデュアル命令キューを用いて、条件分岐命令パスについての命令を遅延させることができる。
予測可能性に従った分岐命令の実行
場合によっては、条件分岐命令を実行するために、上述した方法及び回路の各々を用いることができる。随意的に、本発明の一実施形態においては、条件分岐命令についての予測可能性レベルを計算することができる。条件分岐命令の計算された予測可能性レベルに基づいて、複数の方法の1つを用いて、条件分岐命令を実行することができる。例えば、条件分岐命令が完全に予測可能である、部分的に予測可能である、又は予測不可能であるという判定を行なうことができる。予測可能性レベルに基づいて、条件分岐命令の実行方法を選択することができる。その予測可能性に従って条件分岐命令の実行方法を選択することによって、プロセッサ110の非効率性を最小にしながら、プロセッサ110の全体のリソース使用率を最大にすることができる。
図17(A)−図17(B)は、本発明の一実施形態による、条件分岐命令の予測可能性に応じて条件分岐命令を実行するためのプロセス1700を示す。プロセス1700は、実行される命令のグループを受信するステップ1702(図17(A))で開始することができる。ステップ1704において、命令グループが条件分岐命令を含むかどうかの判定を行なうことができる。命令グループが条件分岐命令を含む場合には、ステップ1706において、分岐がローカルに完全に予測可能であるかどうかの判定を行なうことができる。例えば、そうした判定は、ローカル分岐履歴カウンタCNTがローカル分岐予測可能性の閾値を上回るか又はこれと等しいかを判定することによって行なうことができる。分岐がローカルに完全に予測可能である場合には、ステップ1708において、ローカル分岐予測を用いて、条件分岐命令及び後続命令をスケジューリングし、実行することができる。
ステップ1710において、分岐がローカルに完全に予測可能ではない場合には、グローバル分岐予測情報を追跡し、格納することができる。次に、ステップ1712において、分岐命令がグローバルに完全に予測可能であるかどうかの判定を行なうことができる。こうした判定は、例えば、グローバル分岐履歴カウンタGBCNTがグローバル分岐予測可能性の閾値より大きいか又はこれと等しいかを判定することによって行なうことができる。分岐がグローバルに完全に予測可能である場合には、ステップ1714において、グローバル分岐予測を用いて、条件分岐命令及び後続命令をスケジューリングし、実行することができる。条件分岐命令がローカル又はグローバルに完全に予測可能である、分岐予測を用いることによって、プロセッサ110は、場合によっては、条件分岐命令の事前解決、断定された発行、又はデュアル・パス発行を行なうのに必要なリソースを用いるのを回避することができる。
分岐がローカルにもグローバルにも完全に予測可能でないという判定が行なわれた場合には、ステップ1720において、条件分岐命令が事前解決可能であるかどうかの判定を行なうことができる。条件分岐命令が事前解決可能である場合には、ステップ1722において、条件分岐命令を事前解決することができ、条件分岐命令の事前解決されたパス(例えば、分岐条件が成立する又は分岐条件が不成立である)に基づいて、条件分岐命令及び後続命令をスケジューリングし、発行し、実行することができる。一実施形態においては、事前解決を用いて、プロセッサ110が、条件分岐命令の断定された発行又はデュアル・パス発行を用いるのを回避することが可能であり、このことにより、場合によっては、実行された命令の結果が廃棄され、それにより、プロセッサの効率が低減されることがある。
条件分岐命令が事前解決可能でない場合には、ステップ1730(図17(B))において、条件分岐命令が、断定された発行を用いて実行できる短い条件分岐命令であるかどうかの判定を行なうことができる。こうした判定は、命令の依存性が断定された発行を排除するかどうかを判定すること、及び/又は、デュアル発行が断定された発行より効率的であるかどうかを判定することを含むことができる。条件分岐命令が、断定された発行を用いて実行できる短い条件分岐命令であると判定された場合には、ステップ1732において、上述のように断定された発行を用いて短い条件分岐命令を発行し、実行することができる。
断定された発行を使用できないと判定された場合には、ステップ1740において、条件分岐命令の両方のパスをバッファに入れることができる。条件分岐命令の両方のパスをバッファに入れることによって、プロセッサ110が後で条件分岐命令の結果が誤って予測された場合には、後でより迅速な回復を行なうことができる(例えば、分岐命令の結果が誤って予測された場合には、分岐命令の他方のパスを実行のために容易に利用可能であり得る)。また、条件分岐命令の両方のパスをバッファに入れることによって、必要に応じてデュアル発行を実行することができる。
ステップ1742において、条件分岐命令が中程度に予測可能であるかどうかを判定することができる。こうした判定は、ローカル分岐履歴カウンタCNTが中程度のローカル予測可能性の閾値を上回るかどうかを判定すること、及び/又は、グローバル分岐履歴カウンタGBCNTが中程度のグローバル予測可能性の閾値を上回るかどうかを判定することを含むことができる。ステップ1744において、条件分岐命令が中程度に予測可能であると判定された場合には、I−バッファ232から分岐命令についての予測パスを発行し、実行することができる。上述のように、予測パスが条件分岐命令に後続しなかったという判定が後で行なわれた場合には、分岐命令の予測されずバッファに入れられたパスを発行し、実行することによって、より迅速な回復を行なうことができる。分岐命令の非予測パスをバッファに入れるが実行しないことによって、命令の結果が、予測が不正確であり、命令の非予測パスが後続することを示す場合でも、プロセッサ110は、分岐命令の非予測パスを迅速に回復し、発行することができる。
条件分岐命令がローカルにもグローバルにも中程度に予測可能でない(例えば、分岐が予測不可能である)場合には、ステップ1750において、デュアル・パス実行により、条件分岐命令を実行できるかどうかの判定を行なうことができる。こうした判定は、例えば、プロセッサ110内の別のスレッドがストールされるかどうか(これにより、別個のスレッドにおいて両方のパスを発行することが可能になる)を判定すること、条件分岐命令についての分岐距離を求めること、分岐パスの各々についての命令の依存性を判定すること、及び/又は、デュアル・パス実行に関して上述された他の考慮事項のいずれかを含むことができる。
デュアル・パス発行を用いて条件分岐命令を実行できるという判定が行なわれた場合には、ステップ1754において、例えば上述のようにデュアル・パス発行を用いて、条件分岐命令を発行し、実行することができる。しかしながら、デュアル・パス発行を用いて条件分岐命令を実行できないという判定が行なわれた場合には、条件分岐命令についての最良の予測を用いて、分岐命令及び後続命令をスケジューリングし、発行し、実行することができる。最良の予測は、例えば、どのタイプの予測がより信頼できるかに基づいて、ローカル予測又はグローバル予測のいずれかを用いることを含み得る(例えば、GBCNTがCNTより大きいか又はこれと等しい場合には、ローカル予測の代わりにグローバル予測を用いて、分岐命令を実行することができる)。次に、ステップ1760において、プロセス1700が終了することができる。
分岐予測情報の保持及び更新
本発明の一実施形態において、命令が実行されている間、分岐予測情報及び/又は他の情報を連続的に追跡し、更新することができ、その結果、所定の命令の組が実行されるとき、分岐予測情報及び他の格納された値が時間と共に変化し得る。したがって、例えば、プログラムが実行されるとき、分岐予測情報を動的に修正することができる。
本発明の一実施形態においては、命令の組の最初の実行段階中(例えば、プログラムが実行される最初の「トレーニング(training)」期間中)、分岐予測情報及び/又は他の情報を格納することができる。最初の実行段階は、初期化段階又はトレーニング段階と呼ぶこともできる。トレーニング段階中、例えば上述の基準に従って、分岐予測情報を追跡し、格納することができる(例えば、命令を含むI−ライン内又はシャドウ・キャッシュ内に)。
一実施形態においては、1つ又は複数のビット(例えば、分岐命令を含むI−ライン内又はグローバル分岐履歴テーブル内に格納された)を用いて、トレーニング段階に命令が実行されているかどうか、又は、プロセッサ110がトレーニング段階モードにあるかどうかを示すことができる。例えば、トレーニング段階中、プロセッサ110内のモード・ビット(mode bit)を消去することができる。ビットが消去される間、上述のように、分岐予測情報を追跡し、更新することができる。トレーニング段階が完了すると、ビットを設定することができる。ビットが設定されると、もはや分岐予測情報を更新することができず、トレーニング段階が完了し得る。
一実施形態においては、トレーニング段階は、指定の時間(例えば、ある数のクロック・サイクルが経過するまで、又は所定の命令がある回数実行されるまで)継続することができる。一実施形態においては、指定の時間が経過し、トレーニング段階が終了したとき、最後に格納された分岐予測情報を格納したままにすることができる。また、一実施形態においては、トレーニング段階は、所定のI−ラインが閾値回数だけ実行されるまで継続することができる。例えば、I−ラインが所定のキャッシュ・レベルから(例えば、メイン・メモリ102、L3キャッシュ、又はL2キャッシュ112から)フェッチされたとき、I−ライン内のカウンタ(例えば、2又は3ビット・カウンタ)をゼロにリセットすることができる。カウンタが閾値数のI−ライン実行を下回る間、トレーニング段階は、I−ライン内の命令を継続することができる。I−ラインの各々の実行後、カウンタを増分することができる。閾値数のI−ライン実行後、I−ライン内の命令についてのトレーニング段階を中止することができる。また、場合によっては、実行されているI−ライン内の命令に応じて、異なる閾値を用いることができる(例えば、変化の度合いがより大きい結果を有する命令に対して、より多くのトレーニングを用いることができる)。
本発明の別の実施形態においては、トレーニング段階は、1つ又は複数の出口基準が満たされるまで継続することができる。例えば、最初の実行段階は、分岐命令が予測可能になるまで継続することができる。分岐命令の結果が予測可能になると、I−ラインにおいてロック・ビット(lock bit)を設定することができ、最初のトレーニング段階が完了したこと、及び、分岐命令の後の実行のために、強く予測可能な分岐命令についての分岐履歴ビットを用い得ることを示す。
本発明の別の実施形態においては、断続的なトレーニング段階において、分岐予測情報を修正することができる。例えば、各々のトレーニング段階についての頻度及び持続時間の値を格納することができる。頻度に対応するクロック・サイクル数が経過する度に、トレーニング段階を開始することができ、指定の持続時間値にわたって継続することができる。別の実施形態においては、頻度に対応するクロック・サイクル数が経過する度に、トレーニング段階を開始し、指定の閾値条件が満たされるまで(例えば、上述のように、命令についての指定の予測可能性レベルに達するまで)継続することができる。
カスケード式遅延実行パイプライン・ユニットにおける命令の実行に関し、幾つかの場合において上述したが、本発明の実施形態は、一般に、遅延実行パイプラインを使用しないプロセッサを含むいずれのプロセッサと共に用いることもできる。
上記は本発明の実施形態に向けられているが、本発明の基本的範囲から逸脱することなく、本発明の他の及び更なる実施形態を考えることができ、本発明の範囲は、上記の特許請求の範囲によって定められる。
本発明の一実施形態による、システムを示すブロック図である。 本発明の一実施形態による、コンピュータ・プロセッサを示すブロック図である。 本発明の一実施形態による、プロセッサのコアの1つを示すブロック図である。 本発明の一実施形態による、ローカル及びグローバル分岐履歴情報を記録し、格納するためのプロセスを示す流れ図である。 (A)本発明の一実施形態による、分岐命令についてのローカル分岐履歴情報を命令ライン(I−ライン)内に格納するために用いられる例示的な命令ラインを示すブロック図である。 (B)本発明の一実施形態による、例示的な分岐命令を示すブロック図である。 本発明の一実施形態による、分岐予測情報を格納するための回路を示すブロック図である。 本発明の一実施形態による、分岐履歴テーブルを示すブロック図である。 本発明の一実施形態による、条件分岐命令を事前解決するためのプロセスを示す流れ図である。 本発明の一実施形態による、L2キャッシュからフェッチされた条件分岐命令を事前解決するための例示的な回路を示すブロック図である。 本発明の一実施形態による、I−キャッシュからフェッチされた条件分岐命令を事前解決するための例示的な回路を示すブロック図である。 本発明の一実施形態による、事前解決された条件分岐命令を格納するための例示的なCAMを示すブロック図である。 本発明の一実施形態による、条件分岐命令の複数のパスを実行するためのプロセスを示す流れ図である。 本発明の一実施形態による、条件分岐命令のデュアル・パス発行のために用いられる回路を示すブロック図である。 本発明の一実施形態による、同時マルチスレッド処理を用いて実行される例示的な命令を示すブロック図である。 本発明の一実施形態による、短い条件分岐を実行するためのプロセスを示す流れ図である。 (A)本発明の一実施形態による、短い条件分岐命令を示すブロック図である。 (B)本発明の一実施形態による、短い条件分岐命令を示すブロック図である。 (C)本発明の一実施形態による、短い条件分岐命令を示すブロック図である。 (A)本発明の一実施形態による、条件分岐命令の予測可能性に応じて条件分岐命令を実行するためのプロセスを示す。 (B)本発明の一実施形態による、条件分岐命令の予測可能性に応じて条件分岐命令を実行するためのプロセスを示す。 本発明の一実施形態による、デュアル命令キューを用いて分岐命令を実行するためのプロセスを示す流れ図である。 本発明の一実施形態による、デュアル命令キューを有するプロセッサ・コアを示すブロック図である。

Claims (23)

  1. 分岐予測情報を格納する方法であって、
    分岐命令を受信することと、
    ローカル分岐予測情報についてのローカル予測可能性値を含む、前記分岐命令についてのローカル分岐予測情報を格納することと、
    前記ローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、前記分岐命令についてのグローバル分岐予測情報を格納することと
    を含む方法。
  2. 前記ローカル分岐予測情報は、前記分岐命令の予測結果に対応する予測ビットを含む、請求項1に記載の方法。
  3. 前記分岐命令の前記予測結果は、前記分岐命令の分岐条件が成立すること、及び、前記分岐命令の分岐条件が成立しないことの一方である、請求項2に記載の方法。
  4. 前記グローバル分岐予測情報は、1つ又は複数の他の分岐命令についての1つ又は複数の結果ビットと、前記分岐命令の前記予測結果に対応する、対応する予測ビットとを含む、請求項1に記載の方法。
  5. 前記グローバル分岐予測情報はグローバル予測可能性値を含む、請求項1に記載の方法。
  6. 前記ローカル予測可能性値が前記グローバル予測可能性値より大きい場合、前記ローカル分岐予測情報を用いて、前記分岐命令の結果を予測することと、
    前記グローバル予測可能性値が前記ローカル予測可能性値より大きい場合、前記グローバル分岐予測情報を用いて、前記分岐命令の結果を予測することと
    をさらに含む、請求項5に記載の方法。
  7. 前記ローカル分岐予測情報は第1のテーブル内に格納され、前記グローバル分岐予測情報は第2のテーブル内に格納される、請求項1に記載の方法。
  8. 前記ローカル予測可能性値は、前記分岐命令についての以前の正確な予測の頻度を示す、請求項1に記載の方法。
  9. 分岐命令を実行する方法であって、
    前記分岐命令を受信することと、
    前記分岐命令についてのローカル分岐予測情報が格納されるかどうかを判定することと、
    前記分岐命令についてのローカル分岐予測情報が格納される場合、ローカル分岐予測情報を用いて、前記分岐命令の結果を予測することと、
    前記分岐命令についてのローカル分岐予測情報が格納されない場合、前記分岐命令についてのグローバル分岐予測情報を用いて、前記分岐命令の前記結果を予測することであって、前記命令についての前記グローバル分岐予測情報は、前記分岐命令についての前記ローカル分岐予測情報のローカル予測可能性値が予測可能性の閾値を下回る場合にのみ格納される、ことと
    を含む方法。
  10. 前記分岐命令の前記予測結果は、前記分岐命令の分岐条件が成立すること、及び、前記分岐命令の分岐条件が成立しないことの一方である、請求項9に記載の方法。
  11. 少なくとも1つの命令が、前記分岐命令の前記予測結果を用いてプリフェッチされる、請求項9に記載の方法。
  12. 前記ローカル分岐予測情報は、前記分岐命令の前記予測結果に対応する予測ビットを含む、請求項9に記載の方法。
  13. 前記グローバル分岐予測情報は、1つ又は複数の他の分岐命令についての1つ又は複数の結果ビットと、前記分岐命令の前記予測結果に対応する、対応する予測ビットとを含む、請求項9に記載の方法。
  14. 前記ローカル分岐予測情報は第1のテーブル内に格納され、前記グローバル分岐予測情報は第2のテーブル内に格納される、請求項9に記載の方法。
  15. 前記グローバル分岐予測情報を含む前記第2のテーブルにアクセスするとき、1つ又は複数の他の分岐命令についての1つ又は複数の結果ビットが索引として用いられる、請求項14に記載の方法。
  16. 前記ローカル予測可能性値は、前記分岐命令についての以前の正確な予測の頻度を示す、請求項9に記載の方法。
  17. ローカル分岐予測情報を格納するための第1のテーブルと、
    グローバル分岐予測情報を格納するための第2のテーブルと、
    分岐命令を受信し、
    前記第1のテーブル内に、前記ローカル分岐予測情報についてのローカル予測可能性値を含む前記分岐命令についてのローカル分岐予測情報を格納し、
    前記ローカル予測可能性値が予測可能性の閾値を下回る場合にのみ、前記第2のテーブル内に前記分岐命令についてのグローバル分岐予測情報を格納する、
    ように構成された回路と
    を備える集積回路デバイス。
  18. 前記ローカル分岐予測情報は、前記分岐命令の予測結果に対応する予測ビットを含む、請求項17に記載の集積回路デバイス。
  19. 前記分岐命令の前記予測結果は、前記分岐命令の分岐条件が成立すること、及び、前記分岐命令の分岐条件が成立しないことの一方である、請求項18に記載の集積回路デバイス。
  20. 前記グローバル分岐予測情報は、1つ又は複数の他の分岐命令についての1つ又は複数の結果ビットと、前記分岐命令の前記予測結果に対応する、対応する予測ビットとを含む、請求項17に記載の集積回路デバイス。
  21. 前記グローバル分岐予測情報はグローバル予測可能性値を含む、請求項17に記載の集積回路デバイス。
  22. 前記回路は、
    前記ローカル予測可能性値が前記グローバル予測可能性値より大きい場合、前記ローカル分岐予測情報を用いて前記分岐命令の結果を予測し、
    前記グローバル予測可能性値が前記ローカル予測可能性値より大きい場合、前記グローバル分岐予測情報を用いて前記分岐命令の結果を予測する、
    ようにさらに構成される、請求項21に記載の集積回路デバイス。
  23. 前記ローカル予測可能性値は、前記分岐命令についての以前の正確な予測の頻度を示す、請求項17に記載の集積回路デバイス。
JP2009513671A 2006-06-08 2007-06-05 ローカル及びグローバル分岐予測情報の格納 Expired - Fee Related JP5137948B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/422,927 US7487340B2 (en) 2006-06-08 2006-06-08 Local and global branch prediction information storage
US11/422,927 2006-06-08
PCT/EP2007/055495 WO2007141252A1 (en) 2006-06-08 2007-06-05 Local and global branch prediction information storage

Publications (2)

Publication Number Publication Date
JP2009540412A true JP2009540412A (ja) 2009-11-19
JP5137948B2 JP5137948B2 (ja) 2013-02-06

Family

ID=38283290

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009513671A Expired - Fee Related JP5137948B2 (ja) 2006-06-08 2007-06-05 ローカル及びグローバル分岐予測情報の格納

Country Status (5)

Country Link
US (2) US7487340B2 (ja)
EP (1) EP2035920B1 (ja)
JP (1) JP5137948B2 (ja)
CN (1) CN101449238B (ja)
WO (1) WO2007141252A1 (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010073197A (ja) * 2008-09-19 2010-04-02 Internatl Business Mach Corp <Ibm> 多重プロセッサ・コア・ベクトル・モーフ結合機構
JP2012003771A (ja) * 2010-06-21 2012-01-05 Arm Ltd 推測的に実行される命令のトレーシング
JP2013500539A (ja) * 2009-09-09 2013-01-07 ボード オブ リージエンツ,ユニバーシテイ オブ テキサス システム 分散型プレディケート予測を実現するための方法、システム、およびコンピュータによってアクセス可能な媒体
JP2013058135A (ja) * 2011-09-09 2013-03-28 Ritsumeikan 分岐予測器及びプロセッサ
JP2013545194A (ja) * 2010-11-08 2013-12-19 クアルコム,インコーポレイテッド 分岐命令の中に符号化されたバイモーダル分岐予測子
JP2016507092A (ja) * 2013-01-15 2016-03-07 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 分岐予測のための信頼性閾値ベースの対抗分岐パス実行

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7493607B2 (en) * 2002-07-09 2009-02-17 Bluerisc Inc. Statically speculative compilation and execution
US20050114850A1 (en) 2003-10-29 2005-05-26 Saurabh Chheda Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control
US7996671B2 (en) * 2003-11-17 2011-08-09 Bluerisc Inc. Security of program executables and microprocessors based on compiler-architecture interaction
US8607209B2 (en) 2004-02-04 2013-12-10 Bluerisc Inc. Energy-focused compiler-assisted branch prediction
US20070294181A1 (en) * 2006-05-22 2007-12-20 Saurabh Chheda Flexible digital rights management with secure snippets
US7487340B2 (en) * 2006-06-08 2009-02-03 International Business Machines Corporation Local and global branch prediction information storage
US8301871B2 (en) * 2006-06-08 2012-10-30 International Business Machines Corporation Predicated issue for conditional branch instructions
US20080126766A1 (en) 2006-11-03 2008-05-29 Saurabh Chheda Securing microprocessors against information leakage and physical tampering
US7890739B2 (en) * 2008-02-19 2011-02-15 Oracle America, Inc. Method and apparatus for recovering from branch misprediction
US8127115B2 (en) * 2009-04-03 2012-02-28 International Business Machines Corporation Group formation with multiple taken branches per group
WO2011010184A1 (en) 2009-07-20 2011-01-27 Freescale Semiconductor, Inc. Signal processing system, integrated circuit comprising buffer control logic and method therefor
US10698859B2 (en) 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
CN102117198B (zh) 2009-12-31 2015-07-15 上海芯豪微电子有限公司 一种分支处理方法
WO2011159309A1 (en) 2010-06-18 2011-12-22 The Board Of Regents Of The University Of Texas System Combined branch target and predicate prediction
US9395984B2 (en) 2012-09-12 2016-07-19 Qualcomm Incorporated Swapping branch direction history(ies) in response to a branch prediction table swap instruction(s), and related systems and methods
US9582279B2 (en) 2013-03-15 2017-02-28 International Business Machines Corporation Execution of condition-based instructions
CN104123195B (zh) * 2013-04-23 2018-03-13 华为技术有限公司 一种指令清除方法及装置
US9804846B2 (en) * 2014-03-27 2017-10-31 International Business Machines Corporation Thread context preservation in a multithreading computer system
US10102004B2 (en) 2014-03-27 2018-10-16 International Business Machines Corporation Hardware counters to track utilization in a multithreading computer system
US9921848B2 (en) 2014-03-27 2018-03-20 International Business Machines Corporation Address expansion and contraction in a multithreading computer system
US10180841B2 (en) 2014-12-22 2019-01-15 Centipede Semi Ltd. Early termination of segment monitoring in run-time code parallelization
US9135015B1 (en) * 2014-12-25 2015-09-15 Centipede Semi Ltd. Run-time code parallelization with monitoring of repetitive instruction sequences during branch mis-prediction
US10296350B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences
US10296346B2 (en) 2015-03-31 2019-05-21 Centipede Semi Ltd. Parallelized execution of instruction sequences based on pre-monitoring
US9715390B2 (en) 2015-04-19 2017-07-25 Centipede Semi Ltd. Run-time parallelization of code execution based on an approximate register-access specification
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US11681531B2 (en) 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US10719321B2 (en) 2015-09-19 2020-07-21 Microsoft Technology Licensing, Llc Prefetching instruction blocks
US10678544B2 (en) 2015-09-19 2020-06-09 Microsoft Technology Licensing, Llc Initiating instruction block execution using a register access instruction
US10452399B2 (en) 2015-09-19 2019-10-22 Microsoft Technology Licensing, Llc Broadcast channel architectures for block-based processors
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US10871967B2 (en) 2015-09-19 2020-12-22 Microsoft Technology Licensing, Llc Register read/write ordering
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US10776115B2 (en) 2015-09-19 2020-09-15 Microsoft Technology Licensing, Llc Debug support for block-based processor
US10180840B2 (en) 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US11977891B2 (en) 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US10474462B2 (en) * 2016-02-29 2019-11-12 Qualcomm Incorporated Dynamic pipeline throttling using confidence-based weighting of in-flight branch instructions
CN109101276B (zh) 2018-08-14 2020-05-05 阿里巴巴集团控股有限公司 在cpu中执行指令的方法
US11269642B2 (en) 2019-09-20 2022-03-08 Microsoft Technology Licensing, Llc Dynamic hammock branch training for branch hammock detection in an instruction stream executing in a processor
US11995443B2 (en) 2022-10-04 2024-05-28 Microsoft Technology Licensing, Llc Reuse of branch information queue entries for multiple instances of predicted control instructions in captured loops in a processor

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6502188B1 (en) * 1999-11-16 2002-12-31 Advanced Micro Devices, Inc. Dynamic classification of conditional branches in global history branch prediction
US20040059899A1 (en) * 2002-09-20 2004-03-25 International Business Machines Corporation Effectively infinite branch prediction table mechanism
US6823446B1 (en) * 2000-04-13 2004-11-23 International Business Machines Corporation Apparatus and method for performing branch predictions using dual branch history tables and for updating such branch history tables
JP2005500616A (ja) * 2001-07-24 2005-01-06 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 2レベルの分岐予測キャッシュによる分岐予測
JP2005100403A (ja) * 2003-09-24 2005-04-14 Samsung Electronics Co Ltd 電力消耗を減少させるための分岐予測器および実現方法
US20050216714A1 (en) * 2004-03-25 2005-09-29 Intel Corporation Method and apparatus for predicting confidence and value

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4435756A (en) * 1981-12-03 1984-03-06 Burroughs Corporation Branch predicting computer
US5608886A (en) * 1994-08-31 1997-03-04 Exponential Technology, Inc. Block-based branch prediction using a target finder array storing target sub-addresses
US5949995A (en) * 1996-08-02 1999-09-07 Freeman; Jackie Andrew Programmable branch prediction system and method for inserting prediction operation which is independent of execution of program code
US5838962A (en) * 1997-04-09 1998-11-17 Hewlett-Packard Company Interrupt driven dynamic adjustment of branch predictions
US6151672A (en) * 1998-02-23 2000-11-21 Hewlett-Packard Company Methods and apparatus for reducing interference in a branch history table of a microprocessor
US6115809A (en) * 1998-04-30 2000-09-05 Hewlett-Packard Company Compiling strong and weak branching behavior instruction blocks to separate caches for dynamic and static prediction
US6553488B2 (en) * 1998-09-08 2003-04-22 Intel Corporation Method and apparatus for branch prediction using first and second level branch prediction tables
US6272623B1 (en) * 1999-01-25 2001-08-07 Sun Microsystems, Inc. Methods and apparatus for branch prediction using hybrid history with index sharing
US7404070B1 (en) * 2000-11-28 2008-07-22 Hewlett-Packard Development Company, L.P. Branch prediction combining static and dynamic prediction techniques
US20020073301A1 (en) * 2000-12-07 2002-06-13 International Business Machines Corporation Hardware for use with compiler generated branch information
JP4035600B2 (ja) 2002-05-22 2008-01-23 国立大学法人 東京大学 イマチニブに対する感受性の判定方法
US7487340B2 (en) 2006-06-08 2009-02-03 International Business Machines Corporation Local and global branch prediction information storage
US8301871B2 (en) 2006-06-08 2012-10-30 International Business Machines Corporation Predicated issue for conditional branch instructions
US20070288733A1 (en) 2006-06-08 2007-12-13 Luick David A Early Conditional Branch Resolution
US20070288731A1 (en) 2006-06-08 2007-12-13 Bradford Jeffrey P Dual Path Issue for Conditional Branch Instructions
US20070288734A1 (en) 2006-06-08 2007-12-13 Luick David A Double-Width Instruction Queue for Instruction Execution
US20070288732A1 (en) 2006-06-08 2007-12-13 Luick David A Hybrid Branch Prediction Scheme

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6502188B1 (en) * 1999-11-16 2002-12-31 Advanced Micro Devices, Inc. Dynamic classification of conditional branches in global history branch prediction
US6823446B1 (en) * 2000-04-13 2004-11-23 International Business Machines Corporation Apparatus and method for performing branch predictions using dual branch history tables and for updating such branch history tables
JP2005500616A (ja) * 2001-07-24 2005-01-06 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 2レベルの分岐予測キャッシュによる分岐予測
US20040059899A1 (en) * 2002-09-20 2004-03-25 International Business Machines Corporation Effectively infinite branch prediction table mechanism
JP2005100403A (ja) * 2003-09-24 2005-04-14 Samsung Electronics Co Ltd 電力消耗を減少させるための分岐予測器および実現方法
US20050216714A1 (en) * 2004-03-25 2005-09-29 Intel Corporation Method and apparatus for predicting confidence and value

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010073197A (ja) * 2008-09-19 2010-04-02 Internatl Business Mach Corp <Ibm> 多重プロセッサ・コア・ベクトル・モーフ結合機構
JP2013500539A (ja) * 2009-09-09 2013-01-07 ボード オブ リージエンツ,ユニバーシテイ オブ テキサス システム 分散型プレディケート予測を実現するための方法、システム、およびコンピュータによってアクセス可能な媒体
JP2012003771A (ja) * 2010-06-21 2012-01-05 Arm Ltd 推測的に実行される命令のトレーシング
US8769344B2 (en) 2010-06-21 2014-07-01 Arm Limited Tracing speculatively executed instructions
US9639361B2 (en) 2010-06-21 2017-05-02 Arm Limited Tracing speculatively executed instructions
JP2013545194A (ja) * 2010-11-08 2013-12-19 クアルコム,インコーポレイテッド 分岐命令の中に符号化されたバイモーダル分岐予測子
US9122486B2 (en) 2010-11-08 2015-09-01 Qualcomm Incorporated Bimodal branch predictor encoded in a branch instruction
JP2013058135A (ja) * 2011-09-09 2013-03-28 Ritsumeikan 分岐予測器及びプロセッサ
JP2016507092A (ja) * 2013-01-15 2016-03-07 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 分岐予測のための信頼性閾値ベースの対抗分岐パス実行

Also Published As

Publication number Publication date
US7941654B2 (en) 2011-05-10
CN101449238B (zh) 2015-06-17
US7487340B2 (en) 2009-02-03
JP5137948B2 (ja) 2013-02-06
CN101449238A (zh) 2009-06-03
EP2035920B1 (en) 2012-12-12
US20090138690A1 (en) 2009-05-28
WO2007141252A1 (en) 2007-12-13
EP2035920A1 (en) 2009-03-18
US20070288736A1 (en) 2007-12-13

Similar Documents

Publication Publication Date Title
JP5137948B2 (ja) ローカル及びグローバル分岐予測情報の格納
JP5089186B2 (ja) データ・キャッシュ・ミス予測およびスケジューリング
US20070288733A1 (en) Early Conditional Branch Resolution
US7447879B2 (en) Scheduling instructions in a cascaded delayed execution pipeline to minimize pipeline stalls caused by a cache miss
US7461238B2 (en) Simple load and store disambiguation and scheduling at predecode
JP5357017B2 (ja) 高速で安価なストア−ロード競合スケジューリング及び転送機構
US8812822B2 (en) Scheduling instructions in a cascaded delayed execution pipeline to minimize pipeline stalls caused by a cache miss
US8301871B2 (en) Predicated issue for conditional branch instructions
US20020091915A1 (en) Load prediction and thread identification in a multithreaded microprocessor
US7711934B2 (en) Processor core and method for managing branch misprediction in an out-of-order processor pipeline
EP2064622A2 (en) Methods and apparatus for emulating the branch prediction behavior of an explicit subroutine call
US20070288732A1 (en) Hybrid Branch Prediction Scheme
US20070288731A1 (en) Dual Path Issue for Conditional Branch Instructions
US20080162908A1 (en) structure for early conditional branch resolution
US20070288734A1 (en) Double-Width Instruction Queue for Instruction Execution
US7730288B2 (en) Method and apparatus for multiple load instruction execution
US20080162905A1 (en) Design structure for double-width instruction queue for instruction execution
WO2007084202A2 (en) Processor core and method for managing branch misprediction in an out-of-order processor pipeline
US6948055B1 (en) Accuracy of multiple branch prediction schemes

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100319

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120911

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121009

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: 20121023

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121113

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151122

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees