JP2023545134A - 制御独立技法を採用するプロセッサ内で処理される命令について投機的予測を行うために使用される投機的履歴の回復 - Google Patents

制御独立技法を採用するプロセッサ内で処理される命令について投機的予測を行うために使用される投機的履歴の回復 Download PDF

Info

Publication number
JP2023545134A
JP2023545134A JP2023521849A JP2023521849A JP2023545134A JP 2023545134 A JP2023545134 A JP 2023545134A JP 2023521849 A JP2023521849 A JP 2023521849A JP 2023521849 A JP2023521849 A JP 2023521849A JP 2023545134 A JP2023545134 A JP 2023545134A
Authority
JP
Japan
Prior art keywords
instruction
conditional control
prediction
speculative
instructions
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.)
Pending
Application number
JP2023521849A
Other languages
English (en)
Inventor
ナレッシュ,ヴィニヤン レディ コティンティ
シェイク,ラミ モハマド アル
プリヤダルシ,シヴァム
ペライス,アーサー
Original Assignee
マイクロソフト テクノロジー ライセンシング,エルエルシー
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 マイクロソフト テクノロジー ライセンシング,エルエルシー filed Critical マイクロソフト テクノロジー ライセンシング,エルエルシー
Publication of JP2023545134A publication Critical patent/JP2023545134A/ja
Pending legal-status Critical Current

Links

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/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • 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/3834Maintaining memory consistency
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers

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

プロセッサで処理される命令について投機的予測を行うために使用される投機的履歴を回復すること。プロセッサは、その条件が実行中に完全に評価される前に、条件付き制御命令の条件または述部の結果を投機的に予測するように構成され得る。予測は、過去の予測の結果に基づいて更新された、履歴に基づいてプロセッサによって行われる。条件付き制御命令が実行中に誤予測された場合、プロセッサは、命令パイプラインをストールし、命令パイプライン内のより若い命令をフラッシュして、誤予測条件付き制御命令に戻し、そして、次いで、実行のために正しい命令フローパスにおける命令を再フェッチすることによって、誤予測回復を実行することができる。プロセッサは、より若い制御独立(CI)条件付き制御命令に関連付けられた投機的履歴のエントリを回復するように構成することができ、その結果、誤予測回復において再フェッチされていないCI命令に続く、より若いフェッチされた命令は、より正確な投機的履歴を使用する。

Description

本開示の技術は、一般的に、プロセッサの命令パイプラインにおける制御フローコンピュータ命令(「命令(“instructions”)」)の投機的予測に関する。そして、より詳細には、実行時における制御フロー命令の投機的予測(speculative prediction)が誤予測として解決された後の誤予測回復(recovery)に関する。
命令パイプライン化は、プロセッサによって実行されているコンピュータ命令のスループットが、各命令の処理を一連のステップへと分割することによって増加され得る処理技法である。これらのステップは、複数のステージからなる実行パイプラインにおい実行される。最適なプロセッサ性能は、実行パイプライン内の全てのステージが、命令パイプライン(複数可)内で命令が順序付けられる際に命令を同時に、かつ、順次に処理することができる場合に、達成され得る。しかしながら、間違った(incorrect)計算結果をもたらすことなく、次の命令を実行することができない命令パイプラインにおいて、構造的ハザードが発生する可能性がある。例えば、プロセッサにおいて正確な割込みを引き起こす制御フロー命令の実行の結果として、制御ハザードが発生し得る。制御ハザードを引き起こす可能性がある制御フロー命令の一つの例は、条件付き分岐命令(conditional branch instruction)である。条件付き分岐命令といった、条件付き制御命令は、制御分岐命令の条件が実行されるときに評価される条件に基づいて、命令実行のフローパスをリダイレクトすることができる。その結果として、プロセッサは、条件付き制御命令が実行されるまで、追加の命令のフェッチをストールしなければならず、プロセッサパフォーマンス低下および電力消費を結果として生じている。
プロセッサ性能を最大化するための1つのアプローチは、予測回路を利用して、命令実行フローパスを制御する条件の結果を投機的に予測することを含む。例えば、条件付き分岐命令が実行されるか否かの予測は、以前の条件付き分岐命令の分岐予測履歴に基づくことができる。制御フロー命令が最終的に命令パイプラインの実行ステージに到達し、そして、実行されるとき、制御フロー命令の結果として生じるターゲットアドレスは、制御フロー命令がフェッチされたときに、以前に予測されたターゲットアドレスと比較することによって検証される。予測されたものと実際のターゲットアドレスが一致する場合は、正しい予測が行われたことを意味し、命令実行において遅延は生じない。なぜなら、条件付き分岐命令が命令パイプラインの実行ステージに到達したときにターゲットアドレスにおける後続の命令が正しくフェッチされており、そして、命令パイプラインに既に存在しているからである。しかしながら、予測されたものと実際のターゲットアドレスが一致しない場合は、命令パイプラインにおいて誤予測(mispredicted)分岐ハザードが発生し、正確な割込みを引き起こす。その結果として、命令パイプラインがフラッシュ(flush)され、そして、命令パイプラインフェッチユニットは、ターゲットアドレスから始まる新しい命令をフェッチするようにリダイレクトされ、遅延およびパフォーマンス低下を結果として生じる。また、実行パイプライン内のステージは、新たにフェッチされた命令が命令パイプラインを通じて実行ステージに進むまで、ドーマント(domant)のままであり得る。それによって、パフォーマンスが低下する。プロセッサにおける命令の処理における誤予測は、結果として生じる遅延およびパフォーマンス低下の点でコストがかかる。
誤予測ペナルティを低減する1つの方法は、制御独立技法を利用することである。制御独立(control independence、CI)は、命令制御フローパス方向に関係なく実行する命令の領域を指す。別の言葉で言えば、CI命令は、分岐による制御決定から独立している。このことは、フローチャート102の形態で示されている図1の命令ストリーム100の例によって示される。命令ストリーム100は、条件付き分岐命令104を含んでいる。命令実行フローパスは、条件付き分岐命令104内の条件の解決(すなわち、述部(predicate))に応じて、フローパス106(1)またはフローパス106(2)のいずれかをとる。プロセッサは、条件付き分岐命令104が命令パイプライン内の実行ステージに到達する前に、述部の結果を投機的に予測し、そして、先に進み、かつ、予測されたフローパス内の命令を実行されるべき命令パイプラインの中へと挿入して、処理遅延を回避することができる。命令ストリーム100のそれぞれの制御依存(CD)領域110(1)、110(2)における2つのそれぞれの命令制御フローパス106(1)、106(2)のうち1つに存在する命令108(1)、108(2)は、CD命令108(1)、108(2)である。CD命令は、条件付き分岐命令104内の述部の解決に基づいて取られるフローパス106(1)、106(2)に依存してのみ実行される、命令である。命令ストリーム100内のCI領域114内には、他の命令112が存在しており、それらは、命令パイプラインに挿入され、そして、命令制御フローパス106(1)、106(2)のどちらが条件付き分岐命令104からの結果として取られるかにかかわらず実行される。これらの命令112は、また、CI命令112としても知られている。CI命令112は、さらに、それぞれのCD領域110(1)または110(2)において取られたフローパス106(1)、160(2)におけるCD命令108(1)または108(2)に対するそれらのデータ依存性に基づいて、分類され得る。CI命令112(例えば、ロード命令)が、命令ストリーム100のCD領域110(1)または110(2)内のCD命令108(1)または108(2)(例えば、ストア命令)によって生成されたデータに依存する場合に、CI命令112は、CI、データ依存(DD)(CIDD)命令112Dであり、そうでなければ、CI、データ独立(DI)(CIDI)命令112Iである。
図1における命令ストリーム100内の命令を実行するときに実行される制御独立技法は、命令ストリーム100のCI領域114におけるCI命令112の中でCIDD命令112Dを識別する。制御独立技術は、機能の正確さを保証するために誤予測回復の一部として再実行されている、CIDD命令112Dを含む。これは、CI命令112内のCIDD命令112Dが、採用されるフローパス106(1)、106(2)にかかわらず、プロセッサによって実行される命令パイプラインに挿入される一方で、条件付き分岐命令104の投機的予測に基づいて実行されるCD命令108(1)または108(2)は、誤予測回復において実行されないからである。代わりに、条件付き分岐命令104の投機的予測に基づいて以前に実行されなかったCD命令108(1)または108(2)が、誤予測回復において実行される。これは、投機的誤予測に基づいて以前に実行され、そして、CIDD命令112Dによって消費された、CD命令108(1)、108(2)によって生成されたデータが、正確でない可能性があることを意味する。誤予測回復は、誤予測回復において実行される、CD命令108(1)または108(2)からCD生成データを効果的に追加する。従って、誤予測回復は、投機的誤予測に基づいて実行されたCD命令108(1)または108(2)を効果的に「除去(“remove”)」し、よって、それらのCD生成データを効果的に除去している。従って、投機的誤予測に基づいて実行された、任意のロードベースのCIDD命令112Dは、誤予測回復の前に、除去された、保管されたCDデータ、及び/又は、追加された他の保管CDデータに基づいてよい。ロードベース命令は、メモリからレジスタへとデータを取り出すためにロード動作を実行する、任意の命令である。
誤予測回復において後に除去されたCDデータに基づいて実行されてきたCIDD命令112Dの問題に対処するために、プロセッサは、誤予測回復において再実行されるべき全てのロードベースのCI命令112をマークすることができる。このようにして、ロードベースのCIDD命令112Dに影響を及ぼす任意の追加された保管されたCDデータは、誤予測回復におけるロードベースのCIDD命令112Dの再実行において使用される。
ここにおいて開示される例示的な態様は、プロセッサ内で処理された命令について投機的予測を行うために使用される投機的履歴を回復することを含む。プロセッサは、演算に関連付けられた値を投機的に予測するように構成されている。例えば、プロセッサは、その条件が実行中に完全に評価される前に、条件付き制御命令(conditional control instruction)(例えば、条件付き分岐命令)の条件または述部の結果を投機的に予測するように構成され得る。予測は、過去の予測の結果に基づいて更新される予測履歴に基づいて、プロセッサ内の投機的予測回路によって行われる。例えば、条件付き制御命令の条件の結果が投機的に予測され、そして、次いで、その後、実行中に以前に誤予測されたと判定された場合、プロセッサは、命令パイプラインをストールし、命令パイプライン内のより若い命令を誤予測条件付き制御命令にフラッシュし、そして、次いで、実行のために正しい命令フローパス内の命令を再フェッチすることによって、誤予測の回復を実行することができる。プロセッサは、誤予測回復において予測履歴の投機的部分(「投機的履歴(“speculative history”)」)を誤予測条件付き制御命令に戻して回復し、そして、誤予測条件付き制御命令について投機的履歴内の誤予測を訂正するように構成されている。誤予測条件付き制御命令に続く、正しい命令フローパス内のフェッチされた、より若い条件付き制御命令の投機的予測は、投機的履歴を再更新する。投機的履歴の回復は、将来の条件付き制御命令(または、投機的履歴に基づいて行われる他の投機)が正確な予測を提供するための正しい履歴コンテキストを有することを確実にするために実行される。より正確な投機的予測は、より少ない誤予測回復を結果として生じることができ、従って、誤予測回復に関連するフラッシュイベント、オーバーヘッド、および、パイプラインストールを低減する。
誤予測回復における回復時間を改善するために、誤予測条件付き制御命令に続く、全ての若い制御独立(CI)命令をフラッシュする必要性を回避するために、プロセッサは、制御独立技法を使用することができる。例えば、制御独立技法は、誤予測回復において、より若いCI、データ独立(DI)(CIDI)命令を識別すること、および、リプレイすることを含むことができ、そうしたCIDI命令を再フェッチする必要はない。これは、より若いCIID命令が、より古い条件付き制御命令に続く、間違った命令フローパスからフェッチされ、かつ、処理された可能性のある命令について、制御依存でも、データ依存でもないからである。しかしながら、より若いCIDI命令をフラッシュすることを回避するために制御独立技術を使用するプロセッサを用いてさえも、より若いCIDI条件付き制御命令の投機的予測を行うために使用される投機的履歴は、誤予測回復の前に、間違った命令フローパス内の以前に処理された、より若い制御依存(CD)条件付き制御命令に基づいて更新された可能性がある。これは、誤予測回復を用いてさえも、間違った命令フローパス内のCD条件付き制御命令の後に続く、より若いCIID条件付き制御命令が、間違った投機的履歴を用いて予測された可能性があることを意味している。従って、投機的履歴が単純に回復される場合、投機的履歴は、間違った命令フローパスが処理されたときに、誤予測回復の前にCIDI命令に対して以前に行われた予測についての情報を含む。なぜなら、CIDI命令がフラッシュされないからである。
従って、ここにおいて開示される例示的な態様では、誤予測回復における投機的履歴を誤予測条件付き制御命令に戻って回復することに加えて、プロセッサは、また、より若いCI条件付き制御命令に関連付けられた投機的履歴のエントリを回復するようにも構成され得る。全てのCI条件付き制御命令が、プロセッサによって実行される制御独立性技法に従って再フェッチされ、かつ、処理されないことがあるので、より若いCI条件付き制御命令に関連付けられた投機的履歴のエントリが、再更新されない場合がある。従って、より若いCI条件付き制御命令に関連付けられた投機的履歴の回復されたエントリが回復されない場合に、より若いCI条件付き制御命令に関連付けられた投機的履歴のそうしたエントリは、更新されないままであってもよい(例えば、全てが獲得され、または、獲得されなかったとして扱われる)。従って、このインスタンスにおいて、より若いCI条件付き制御命令に関連する投機的履歴のエントリは、回復された投機的履歴の一部として回復されない。このことは、誤予測回復において再フェッチされていない(non-re-fetched)CI条件付き制御命令に続く、誤予測回復後の、より若い、フェッチされた条件付き制御命令が、より古い再フェッチされていないCI条件付き制御命令について回復されていない投機的履歴情報を含む、より精度の低い投機的履歴を使用するようにさせ得る。これは、結果として、投機的予測の精度の低下を生じさせ得る。より若いCI条件付き制御命令に関連付けられた投機的履歴のエントリを回復することによって、誤予測回復において再フェッチされていないCI命令に続く、より若い、フェッチされた条件付き制御命令は、より古い再フェッチされていないCI条件付き制御命令について回復された投機的履歴情報を含む、より正確な投機的履歴を使用する。
他の例示的な態様では、誤予測条件付き制御命令、および、より若いCI命令の投機的履歴を回復することに加えて、プロセッサは、また、より若いCI条件付き制御命令に関連付けられた投機的履歴のエントリを訂正するようにも構成され得る。より若いCI条件付き制御命令に関連付けられた投機的履歴の回復されたエントリは、正確でないことがある。なぜなら、より若いCI条件付き制御命令に関連付けられた投機的履歴のそうしたエントリは、誤った命令フローパス内のより古いCD命令、及び/又は、誤予測回復において再フェッチされ、かつ、再処理されるより古いCI、データ依存(DD)(CIDD)命令からの投機的履歴の以前の更新に基づいていた可能性があるからである。従って、より若いCI条件付き制御命令に関連付けられた投機的履歴の回復されたエントリが、また、回復されることに加えて、訂正もされない場合、誤予測回復における再フェッチされていないCI条件付き制御命令に続く、より若いフェッチされた条件付き制御命令に対する投機的予測は、より古い再フェッチされていないCI条件付き制御命令に対する訂正されていない投機的履歴エントリを含む投機的履歴を使用することができる。このことは、結果として、投機的予測の精度低下を生じ得る。より若いCI条件付き制御命令に関連付けられた投機的履歴のエントリを訂正することによって、誤予測回復において再フェッチされていないCI命令に続く、より若いフェッチされた条件付き制御命令は、より古い再フェッチされていないCI条件付き制御命令についての訂正された投機的履歴情報を含む、正しい投機的履歴を使用する。
この点に関して、例示的な一態様では、プロセッサが提供される。プロセッサは、1つ以上の命令パイプラインを備える命令処理回路を含む。プロセッサは、また、投機的予測履歴インジケータも含んでいる。命令処理回路は、投機的予測履歴インジケータに基づいて、命令パイプラインにおける命令ストリーム内の条件付き制御命令内の条件を投機的に予測するように構成されている。命令処理回路は、また、命令ストリーム内の条件付き制御命令に続く、第1CD命令領域における1つ以上のCD条件付き制御命令の条件を投機的に予測するようにも構成されている。命令処理回路は、また、命令ストリーム内の第1CD命令領域に続く、CI命令領域における1つ以上のCI条件付き制御命令の条件を投機的に予測するようにも構成されている。命令処理回路は、また、CI命令領域における1つ以上のCI条件付き制御命令のそれぞれの投機的予測に基づいて、投機的予測履歴インジケータの1つ以上のCI予測エントリを更新するようにも構成されている。命令処理回路は、また、条件付き制御命令の条件を解決するために、条件付き制御命令を実行するようにも構成されている。投機的予測が条件付き制御命令の実行において解決された条件に一致しないことに応答して、命令処理回路は、また、投機的予測履歴インジケータの1つ以上のCI予測エントリを保管し、条件付き制御命令の解決された条件に基づいて、条件付き制御命令の第2CD命令領域における1つ以上のCD命令をフェッチし、第2CD命令領域における1つ以上のCD条件付き制御命令の条件を投機的に予測し、そして、投機的予測履歴インジケータ内の保管された1つ以上のCI予測エントリを回復する、ようにも構成されている。
別の例示的な態様では、プロセッサにおいて条件付き制御命令について投機的予測を行うために使用される投機的履歴を回復する方法が提供される。本方法は、投機的予測履歴インジケータに基づいて、命令パイプラインにおける命令ストリーム内の条件付き制御命令内の条件を投機的に予測するステップを含む。本方法は、また、命令ストリーム内の条件付き制御命令に続く、第1CD命令領域における1つ以上のCD条件付き制御命令の条件を投機的に予測するステップも含む。本方法は、また、命令ストリーム内の第1CD命令領域に続く、CI命令領域における1つ以上のCI条件付き制御命令の条件を投機的に予測するステップも含む。本方法は、また、CI命令領域における1つ以上のCI条件付き制御命令のそれぞれの投機的予測に基づいて、投機的予測履歴インジケータの1つ以上のCI予測エントリを更新するステップも含む。方法は、また、条件付き制御命令の条件を解決するために、条件付き制御命令を実行するステップも含む。投機的予測が条件付き制御命令の実行において解決された条件に一致しないことに応答して、本方法は、また、投機的予測履歴インジケータの1つ以上のCI予測エントリを保管するステップと、条件付き制御命令の解決された条件に基づいて、条件付き制御命令の第2CD命令領域における1つ以上のCD命令をフェッチするステップと、第2CD命令領域における1つ以上のCD条件付き制御命令の条件を投機的に予測するステップと、投機的予測履歴インジケータ内の保管された1つ以上のCI予測エントリを回復するステップと、を含む。
当業者であれば、添付の図面と関連して、好ましい実施形態に係る以下の詳細な説明を読んだ後に、本開示の範囲を理解し、そして、その追加の態様を認識するだろう。
この明細書に組み込まれ、かつ、明細書の一部を形成する添付の図面は、本開示に係るいくつかの態様を示しており、かつ、説明と一緒に本開示の原理を説明する役割を果たしている。
図1は、フローチャート形式の命令ストリームであり、条件付き分岐命令、条件付き分岐命令の述部の予測または解決(resolution)から取られた命令制御フローパスに依存して実行される、制御依存(control dependent、CD)命令、および、条件付き分岐命令から取られた命令制御フローパスに関係なく実行される、制御独立(control independent、CI)命令、を説明している。 図2は、投機的履歴に基づいて投機的予測を行うように構成された投機的予測回路を含む、例示的な命令処理回路を含む、一つの例示的なプロセッサの図である。ここで、プロセッサは、誤予測回復において、より若いCI条件付き制御命令に関連付けられた投機的履歴のエントリを回復するように構成されている。 図3Aは、例示的な予測分岐回復トレース記録の図であり、図2の命令処理回路によって、命令ストリームとして命令パイプラインにフェッチされる順序での条件付き制御命令、および、各条件付き制御命令について投機的予測回路によって行われる、各条件付き制御命令の条件の投機的予測、を説明している。 図3Bは、例示的な実際の分岐回復トレース記録の図であり、図2の命令処理回路によって、命令ストリームとして命令パイプラインにフェッチされる順序での条件付き制御命令、および、実行中の条件付き制御命令の実際の解決された条件、を説明している。 図3Cは、投機的予測を行うために図2の投機的予測回路によって使用される例示的な非投機的履歴の図である。 図3Dは、投機的予測を行うために図2の条件付き制御命令内の投機的予測回路によって使用される誤予測回復の前の、図3Aおよび図3Bの条件付き制御命令の投機的予測に基づく例示的な投機的履歴、および、誤予測回復から生じる回復された投機的履歴、の図である。 図4は、図2の命令処理回路の例示的なプロセスを説明するフローチャートであり、誤予測回復におけるより若いCI条件付き制御命令に関連付けられた投機的履歴のエントリを回復している。 図5は、誤予測回復前の図2のプロセッサ内の例示的な分岐リオーダバッファ(BRB)回路の図であり、図2の命令処理回路によってフェッチされた順序での条件付き制御命令について、命令ストリーム、および投機的予測、並びに、各条件付き制御命令の実際に解決された条件としてキャプチャされた情報を示している。 図6は、誤予測回復後の図2のプロセッサ内のBRB回路の図であり、命令ストリーム内で命令パイプラインへとフェッチされた条件付き制御命令と比較した、条件付き制御命令の順序違反を示している。 図7Aは、命令ストリームで命令パイプラインへとフェッチされるように条件付き制御命令の適切な順序を維持するために、フラッシュイベントの前後、および、再収束の後、それぞれに、命令パイプラインにおいてフェッチされる命令ストリームにおける次の条件付き制御命令を指し示すためにインデックス付けされるように構成されている、図2のプロセッサにおける別の例示的なBRB回路の図である。 図7Bは、命令ストリームで命令パイプラインへとフェッチされるように条件付き制御命令の適切な順序を維持するために、フラッシュイベントの前後、および、再収束の後、それぞれに、命令パイプラインにおいてフェッチされる命令ストリームにおける次の条件付き制御命令を指し示すためにインデックス付けされるように構成されている、図2のプロセッサにおける別の例示的なBRB回路の図である。 図7Cは、命令ストリームで命令パイプラインへとフェッチされるように条件付き制御命令の適切な順序を維持するために、フラッシュイベントの前後、および、再収束の後、それぞれに、命令パイプラインにおいてフェッチされる命令ストリームにおける次の条件付き制御命令を指し示すためにインデックス付けされるように構成されている、図2のプロセッサにおける別の例示的なBRB回路の図である。 図8Aは、図3Aの予測分岐回復トレース記録の図である。 図8Bは、図3Bの実際の分岐回復トレース記録の図である。 図8Cは、図3Cの非投機的履歴の図である。 図8Dは、投機的予測を行うために図2の条件付き制御命令内の投機的予測回路によって使用される誤予測回復の前の、図8Aおよび図8Bの条件付き制御命令の投機的予測に基づく例示的な投機的履歴、および、誤予測回復から結果として生じる回復され、かつ、正しい投機的履歴の図である。 図9は、プロセッサ、および、実行のためにコンピュータ命令を処理するための1つ以上の命令パイプラインを有する命令処理回路を含む例示的なプロセッサベースのシステムのブロック図である。ここで、プロセッサは、誤予測回復において、より若いCI条件付き制御命令に関連付けられた投機的履歴のエントリを回復するように構成されており、限定されることなく、図2のプロセッサを含んでいる。
ここにおいて開示される例示的な態様は、プロセッサ内で処理された命令について投機的予測を行うために使用される投機的履歴を回復することを含む。プロセッサは、演算に関連付けられた値を投機的に予測するように構成されている。例えば、プロセッサは、その条件が実行中に完全に評価される前に、条件付き制御命令(例えば、条件付き分岐命令)の条件または述部の結果を投機的に予測するように構成され得る。予測は、過去の予測の結果に基づいて更新される予測履歴に基づいて、プロセッサ内の投機的予測回路によって行われる。例えば、条件付き制御命令の条件の結果が投機的に予測され、かつ、次いで、実行中に以前に誤予測と判定されていた場合、プロセッサは、命令パイプラインをストールし、命令パイプライン内のより若い命令を誤予測条件付き制御命令にフラッシュし、そして、次いで、実行のために正しい命令フローパス内の命令を再フェッチすることによって、誤った予測の回復を実行することができる。ここにおいて開示される例示的な態様において、プロセッサは、より若い制御独立(CI)条件付き制御命令に関連付けられた投機的履歴のエントリを回復するように構成され得る。より若いCI条件付き制御命令に関連付けられた投機的履歴のエントリを回復することによって、誤予測回復において再フェッチされていないCI命令に続く、より若いフェッチされた命令は、より古い再フェッチされていないCI命令についての回復された投機的履歴情報を含む、より正確な投機的履歴を使用する。
図3Aで開始してプロセッサ内で処理される命令について投機的予測を行うために使用される投機的履歴を回復する例を説明する前に、プロセッサベースのシステム202における例示的なプロセッサ200について、図2に関して以下で最初に説明する。
この点に関して、図2は、プロセッサベースのシステム202の一部である例示的なプロセッサ200の図である。プロセッサ200は、非限定的な例として、インオーダまたはアウトオブオーダプロセッサ(OoP)であってよい。プロセッサ200は、命令メモリ210から命令208をフェッチするように構成された命令フェッチ回路206を含む、命令処理回路204を含んでいる。命令メモリ210は、一つの例として、プロセッサベースのシステム202におけるシステムメモリ内に、または、その一部として提供され得る。この例における命令フェッチ回路206は、フェッチされた命令208Fとしての命令208を、命令処理回路204において命令ストリーム212として命令パイプラインIPに提供するように構成されており、実行回路216において実行される前に、デコード回路214においてデコーディングされ、そして、デコーディングされた命令208Dとして処理される。デコーディングされた命令208Dを実行することから実行回路216によって生成された生成値は、デコーディングされた命令208Dの宛先によって示される保管場所にコミットされる(すなわち、書き戻される)。この保管場所は、例として、プロセッサベースのシステム202におけるメモリ218、または、物理レジスタファイル(PRF)220における物理的レジスタP0-PXであり得る。
引き続き図2を参照すると、一旦、フェッチされた命令208Fがデコーディングされた命令208Dへとデコーディングされると、デコーディングされた命令208Dは、命令処理回路204におけるリネーム/割り当て回路222に提供される。リネーム/割り当て回路222は、並列処理またはアウトオブオーダ処理を妨げであろう、任意のレジスタ依存性を破壊するために、デコーディングされた命令208D内のいずれかのレジスタ名がリネームされる必要があるか否かを判定するように構成されている。リネーム/割り当て回路222は、また、論理ソースレジスタオペランドをリネームし、かつ/あるいは、デコーディングされた命令208Dの宛先レジスタオペランドをPRF220内の利用可能な物理レジスタP0-PXに書き込むために、レジスタマップテーブル(RMT)224を呼び出すように構成されている。RMT224は、各々が、それぞれの論理レジスタR0-RPにマッピングされた(すなわち、関連付けられた)複数のマッピングエントリを含んでいる。マッピングエントリは、PRF220内の物理レジスタP0-PXを指すアドレスポインタの形で情報を保管するように構成されている。PRF220内の各物理レジスタP0-PXは、デコーディングされた命令208Dのソース及び/又は宛先レジスタオペランドのためのデータを保管するように構成されたデータエントリ226(0)-226(X)を含んでいる。
プロセッサ200は、また、プロセッサ200における演算に関連付けられた値を投機的に予測するように構成された、投機的予測回路228を含んでいる。例えば、投機的予測回路228は、どの命令フローパスにおいて、次の命令208が処理のために命令フェッチ回路206によってフェッチされるかを支配する、条件付き分岐命令といった、条件付き制御命令208の条件を予測するように構成され得る。例えば、条件付き制御命令208が条件付き分岐命令である場合に、投機的予測回路228は、条件付き分岐命令208の条件が後に実行回路216において「成立(“taken”)」または「不成立(“not taken”)」のいずれとして解決されるか否かを予測することができる。この例において、投機的予測回路228は、投機的予測を行うために、予測履歴インジケータ230を調べる(consult)ように構成されている。一つの例として、予測履歴インジケータ230は、以前の予測のグローバル履歴を含んでいる。予測履歴インジケータ230は、予測テーブル回路232への予測インデックスを生成するために、この例において予測されるべき現在の条件付き制御命令208のプログラムカウンタ(PC)でハッシュされる。予測テーブル回路232は、条件付き制御命令208に割り当てられた予測インデックスに基づいて、条件付き制御命令208にマッピング可能な予測値(例えば、カウンタ値)を含んでいる。以下でより詳細に説明されるように、条件付き制御命令208の予測インデックスは、分岐リオーダバッファ(branch reorder buffer、BRB)回路234に保管することができる。予測テーブル回路232内のインデックス付き予測値は、条件付き制御命令208の現在の投機的予測を生成するために使用される。このようにして、新たにフェッチされた条件付き制御命令208Fの予測は、命令処理回路204における条件付き制御命令の最近の解決および過去の解決に基づいている。予測値は、命令フェッチ回路206が、成立命令フローパスまたは不成立命令フローパスにおける条件付き分岐命令208に続く(すなわち、それよりも若い)次の命令208をフェッチするか否かを決定するために使用される。
デコーディングされた投機的に予測された条件付き制御命令208Dの条件の結果が、実行中に誤予測されたと判定された場合に、命令処理回路204は、誤予測回復を実行することができる。この点に関して、この例において、実行回路216は、コミット/フラッシュ回路238に対してフラッシュイベント236を発行する。コミット/フラッシュ回路238は、命令パイプラインIPをストールし、かつ、誤予測条件付き制御命令208よりも若い、命令処理回路204内の命令パイプラインIPにおける命令208F、208Dをフラッシュするように構成されている。この点に関して、コミット/フラッシュ回路238は、フェッチされた命令208Fの命令パイプラインIPへの順序を保管し、かつ、維持する、リオーダバッファ回路240を参照するように構成されている。リネーム/割り当て回路222は、デコーディングされた命令208Dがスケジューラ回路242による実行のためにスケジューリングされる前に、命令処理回路204のインオーダ(in-order)セクションの一部として、デコーディングされた命令208Dをリオーダバッファ回路240におけるエントリへと挿入するように構成されている。スケジューラ回路242は、デコーディングされた命令208Dを、それらの依存関係、および、それらのソースデータがいつ利用可能であるかに基づいて、アウトオブオーダで実行するようにスケジュールすることができる。このようにして、リオーダバッファ回路240は、フラッシュについて誤予測条件付き制御命令208よりも若い命令208を識別するために、コミット/フラッシュ回路238によって使用され得る。次いで、コミット/フラッシュ回路238は、解決された条件に基づいて、条件付き制御命令208について正しい命令フローパスから命令パイプラインIPにおける命令208をフェッチするように、命令フェッチ回路206に指示することができる。
誤予測条件付き制御命令208が解決され、そして、フラッシュイベント236が生成されるとき、命令処理回路204は、また、予測トレーニングの一部として予測履歴インジケータ230およびBRB回路234を更新するように構成されている。これは、誤予測条件付き制御命令208に基づく予測履歴インジケータ230およびBRB回路234の以前の更新が、フラッシング後に誤予測条件付き制御命令208からの正しい命令フローパスを含んでいる条件付き制御命令208の将来の予測に影響を及ぼさないように、本質的に逆転され得るようにするためである。この点に関して、予測履歴インジケータ230は、予測精度を改善するために将来の予測が条件付き制御命令208の解決された条件に基づくように、フラッシュイベント236に応答して更新される。BRB回路234は、また、フラッシュイベント236に応答して更新され、その結果、予測ミスされた条件付き制御命令208を予測するために以前にインデックス付けされ、かつ、アクセスされた予測テーブル回路232における予測インデックスでの予測値が、予測ミスを記録するために更新(すなわち、トレーニング)される。例えば、予測テーブル回路232における予測インデックスでの予測値は、誤予測を示すためにデクリメント(decrement)され得る。予測テーブル回路232における予測インデックスでの予測値は、正しい予測を示すためにインクリメントされ得る。このようにして、予測テーブル回路232における予測インデックスでの予測値を使用して、予測(例えば、成立または不成立)、並びに、予測テーブル回路232における同じ予測インデックスでの予測値にアクセスする、将来の予測に対するそうした予測の信頼度または強度を示すことができる。
図2の投機的予測回路228によって投機的に誤予測条件付き制御命令208に対する誤予測回復をさらに説明するために、図3A-図3Dが提供される。図3Aは、図2の命令処理回路204において予測されるフェッチされた条件付き制御命令208Fの例示的な予測分岐回復トレース記録300の図である。そこに示されているように、図2の命令処理回路204によってフェッチされた第1条件付き制御命令208(1)は、分岐PC(BRPC)0x1015からのものであるとして示されている。投機的予測回路228は、この条件付き制御命令208(1)の条件を不成立(NT)として予測した。この点に関して、投機的予測回路228は、予測履歴インジケータ230を使用して、上述のように図2の予測テーブル回路232への予測インデックスを生成し、BRPC 0x1015で条件付き制御命令208(1)に対するNT予測を行う。図3Cに示されるように、この例において、予測履歴インジケータ230は、非投機的予測履歴インジケータ230NSおよび投機的予測履歴インジケータ230Sから構成されている。非投機的予測履歴インジケータ230NSは、命令処理回路204において以前に実行された条件付き制御命令208の解決された条件のレコードをそれぞれ保管することができる、解決されたエントリ304(例えば、ビット)を有している。例えば、解決されたエントリ304に保管された「0」ビットは、NT解決を示すことができ、そして、解決されたエントリ304に保管された「1」ビットは、成立した(T)解決を示すことができる。投機的予測履歴インジケータ230Sは、また、未だ実行されていない命令処理回路204における予測された条件付き制御命令208について行われた未解決の予測の記録をそれぞれ保管することができる、未解決の予測エントリ306(例えば、ビット)を有するインジケータである。再び、一つの例として、予測エントリ306に保管された「0」ビットはNT予測を示し、そして、予測エントリ306に保管された「1」ビットはT予測を示す。従って、図3Cに示されるように、投機的予測履歴インジケータ230Sにおいて、未解決予測エントリ306内の「010110」の記録されたビットは、NT、T、NT、T、T、NTの連続的な予測履歴を示している(最も左のビットが最も古く、最も右のビットが最も若い)。投機的予測履歴インジケータ230Sにおける最も左の予測エントリ306(1)内の「0」の記録されたビットは、条件付き制御命令208(1)に対するNT予測を表している。投機的予測履歴インジケータ230Sは、条件付き制御命令208の予測を行うために、投機的予測回路228によって使用される予測履歴インジケータ230を形成するように、非投機的予測履歴インジケータ230NSに対して付加される。このようにして、予測履歴インジケータ230は、解決された予測および未解決の予測の両方を含む予測の履歴を反映する。
引き続き図3Aを参照すると、条件付き制御命令208(1)のNT予測の結果として、命令フェッチ回路206は、条件付き制御命令208(1)のためのNT命令フローパスにおける、次の、より若い命令208をフェッチする。予測分岐回復トレース記録300に示されるように、BRPC 0x1022における条件付き制御命令208(2)は、条件付き制御命令208(1)に対するNT命令フローパスにおいて次に出会う(encounter)条件付き制御命令である。図3Aに示されるように、条件付き制御命令208(2)の条件は、投機的予測履歴インジケータ230に基づくTとして、投機的予測回路228によって予測される。投機的予測履歴インジケータ230Sは、図3Cに示されるように、条件付き制御命令208(1)に対するNT予測のために、予測エントリ306(1)内に記録された「0」を有する。投機的予測回路228は、次いで、図3Cに示されるように、予測履歴インジケータ230の投機的予測履歴インジケータ230Sに、条件付き制御命令208(2)の「1」ビットとしてT予測を記録する。これは、将来の予測が、条件付き制御命令208(1)および条件付き制御命令208(2)について記録された予測を含む、更新された投機的予測履歴インジケータ230Sに基づくようにするためである。図3Aの予測分岐回復トレース記録300は、図2の命令処理回路204によって処理された後続のより若い条件付き制御命令208(3)-208(6)、および、投機的予測回路228によって行われたそれらの予測を示している。
図3Bは、実行に基づいて条件付き制御命令208(1)-208(6)の解決された条件を示す、実際の分岐回復トレース記録302を示している。図3Bに示されるように、条件付き制御命令208(1)についてのNT予測は正しいものとして解決されたが、条件付き制御命令208(2)についてのT予測は間違ったものとして解決された。条件付き制御命令208(2)に対する条件の正しい解決はNTであり、そして、投機的予測回路228による条件付き制御命令208(2)に対するこのNTの予測は正しくなかった。これは、図3Aの予測分岐回復トレース記録300で示される、より若い条件付き制御命令208(3)、208(4)が、誤ってフェッチされたことを意味する。これは、条件付き制御命令208(3)、208(4)が、誤予測条件付き制御命令208(2)に制御依存(CD)であるからである。条件付き制御命令208(5)、208(6)は、条件付き制御命令208(2)のマージポイント(merge point)に位置する命令である。従って、条件付き制御命令208(5)、208(6)は、それぞれに、図3Aおよび図3Bの予測分岐回復トレース記録300および実際の分岐回復トレース記録302に示されるように、条件付き制御命令208(2)からの成立T命令フローパスおよび不成立NT命令フローパスの両方に存在するCI命令である。
条件付き制御命令208(2)の誤予測の検出に応答して、図2の実行回路216は、フラッシュイベント236を発行して、条件付き制御命令208(3)、208(4)をフラッシュし、かつ、誤予測回復において条件付き制御命令208(2)からの、正しい、NT命令フローパスにおける命令208をフェッチする。条件付き制御命令208(2)からの、正しい、NT命令フローパスにおけるフェッチされた命令208Fは、実際の分岐回復トレース記録302において、条件付き制御命令208(7)-208(9)、208(5)、および208(6)として示されている。上述のように、新たにフェッチされた条件付き制御命令208Fの予測は、投機的予測履歴インジケータ230Sを含む、予測履歴インジケータ230に基づいて行われる。従って、この例においては、条件付き制御命令208(2)の誤予測に基づいて投機的予測履歴インジケータ230Sが更新されたので、誤予測回復におけるフラッシュイベント236に応答して投機的予測履歴インジケータ230Sも、また、更新されない場合に、投機的予測履歴インジケータ230Sは、予測履歴を正確に反映しない。これは、条件付き制御命令208(2)の予測、並びに、フラッシュされたより若い条件付き制御命令208(3)、208(4)が、そうでなければ、依然として投機的予測履歴インジケータ230S内に存在するためである。投機的予測履歴インジケータ230S内の条件付き制御命令208(2)に対する予測エントリ306(2)は、投機的予測履歴インジケータ230Sが誤予測回復におけるフラッシュイベント236に応答して更新されなかった場合、NT(例えば、「0」ビット)の代わりにT(例えば、「1」ビット)である。また、投機的予測履歴インジケータ230S内の条件付き制御命令208(3)、208(4)に対する予測は、不正確であり得る。なぜなら、条件付き制御命令208(3)、208(4)は、条件付き制御命令208(2)の誤予測のせいでフェッチされただけであり、そして、誤予測回復において命令パイプラインIP内でフラッシュされるからである。
従って、図3Dに示されるように、命令処理回路204は、誤予測回復におけるフラッシュイベント236に応答して、更新された投機的予測履歴インジケータ230S-Uとして、予測履歴インジケータ230の投機的予測履歴インジケータ230Sを更新するように構成され得る。図3Dは、図3Bの実際の分岐回復トレース記録302に従って、それぞれに、条件付き制御命令208(1)-208(2)、208(7)-208(9)、208(5)-208(6)に対する更新された予測を反映するように、予測エントリ306(1)-306(7)においてビット「0000010」(すなわち、NT、NT、NT、NT、NT、T、NT)を記録した、更新された投機的予測履歴インジケータ230S-Uを示している。条件付き制御命令208(2)に対する更新された投機的予測履歴インジケータ230S-U内の更新された予測エントリ306(2)は、今や、NTを意味する「0」であることに留意すること。新たにフェッチされた条件付き制御命令208(7)-208(9)は、条件付き制御命令208(2)に対する誤予測、および、条件付き制御命令208(2)に対する誤命令フローパスにおいてフェッチされた条件付き制御命令208(3)、208(4)に対する予測を含む、以前の投機的予測履歴インジケータ230Sの代わりに、より正確で、更新された投機的予測履歴インジケータ230S-Uに基づいて予測される。
図2のプロセッサ200における命令処理回路204は、また、誤予測回復における全てのCI命令のフラッシュ(flushing)を回避するために、制御独立技法を採用するようにも構成され得る。例えば、制御独立技法は、CI命令208が、CI、データ独立(DI)(CIDI)命令208またはCI、誤予測回復において命令ストリーム212のCI領域におけるデータ依存(DD)(CIDD)命令208であるかを識別する、図2の命令処理回路204を含むことができる。例えば、条件付き制御命令208(5)、208(6)は、図3Aの条件付き制御命令208(2)のためのCI命令領域308内にある。条件付き制御命令208(3)、208(4)は、図3Aの条件付き制御命令208(2)のためのCD命令領域310内にある。図2の命令処理回路204は、誤予測条件付き制御命令208の後に続くCIDD命令208を再フェッチおよび再処理することができ、その結果、そのデータ依存性は、正しい命令フローパスにおいてフェッチされた命令208Fに基づいて正しく解決される。しかしながら、CIDI命令208は、そうしたCIDI命令を再フェッチする必要なしに、誤予測回復における正しい命令フローパスにおける、より古い命令208のフェッチおよび処理に続いて、単純にされ得る(すなわち、命令パイプラインIPにおいて処理される)。これは、CIDI命令208が、誤命令フローパスからフェッチされ、そして、誤予測条件付き制御命令208に続いて処理された、CD命令208に依存する制御でも、データでもないからである。
しかしながら、より若いCIDI命令208をフラッシュすることを回避するための制御独立技術を採用している命令処理回路204を用いてさえ、より若いCIDI条件付き制御命令208の投機的予測を行うために使用される図3Cの予測履歴インジケータ230は、不正確な予測の記録を有し得る。予測履歴インジケータ230は、上述のように、誤予測回復の前に予測された、間違った命令フローパス内のより若いCD条件付き制御命令208からの予測を記録している。これは、誤予測回復を用いてさえも、間違った命令フローパスにおいてCD条件付き制御命令208の後に続く、より若いCIID条件付き制御命令208が、間違った予測履歴インジケータ230を用いて予測され得ることを意味する。
従って、ここにおいて開示される例示的な態様において、命令処理回路204は、誤予測回復におけるそれらのリプレイ中に、より若い、CIDI条件付き制御命令208の条件を再フェッチおよび再予測しないにもかかわらず、投機的予測履歴インジケータ230Sが正確であるように、回復するように構成されている。この点に関して、図2の命令処理回路204は、より若いCIID条件付き制御命令208の投機的予測に基づいて記録された、投機的予測履歴インジケータ230Sにおける予測エントリ306を回復するように構成することができる。これは、より若い、CIID条件付き制御命令208について行われた以前の予測が、図3Dに示されるように、更新された投機的予測履歴インジケータ230S-Uにおける予測エントリ306内に記録されるようにするためである。このようにして、そうしたより新しいCI条件付き制御命令208に続くより新しい条件付き制御命令は、さらに、そうしたより新しいCI条件付き制御命令208を再フェッチおよび再予測する必要なしに、正確な予測履歴インジケータ230に基づいて予測される。この例では、より若いCIDD条件付き制御命令208が再フェッチされ、そして、誤予測回復において再予測されるので、これらのより若い、CIDD条件付き制御命令208について行われた再予測は、図3Dに示されるように、回復なしに更新された投機的予測履歴インジケータ230S-Uに記録される。これらの例示的な技法は、図3A-図3Dの例によって示されおり、そして、図4における例示的なプロセス400で、以下で説明される。
この点に関して、この例において、命令処理回路204の命令フェッチ回路206は、図2の命令パイプラインIPにおける命令ストリーム212内の条件付き制御命令208をフェッチするように構成されている。次いで、命令処理回路204は、投機的予測履歴インジケータ230Sに基づいて、図2の命令パイプラインIPにおける命令ストリーム212内の条件付き制御命令208内の条件を投機的に予測するように構成されている(図4のブロック402)。この一つの例は、図3AのBRPC 0x1022でフェッチされた条件付き制御命令208(2)であり、ここで、条件付き制御命令208(2)の条件は、図2の投機的予測回路228によってTとして投機的に予測される。投機的予測回路228は、条件付き制御命令208(2)の条件の投機的予測に基づいて、投機的予測履歴インジケータ230S内の予測エントリ306(2)を更新するように構成されている。
命令フェッチ回路206は、次いで、条件付き制御命令208の投機的予測に基づいて、条件付き制御命令208の第1CD命令領域310における条件付き制御命令208に対するCD命令208をフェッチするように構成されている。この一つの例が図3Aに示されており、ここで、条件付き制御命令208(2)にフェッチされたCD命令208Fは、条件付き制御命令208(2)のCD命令領域310における条件付き制御CD命令208(3)、208(4)である。命令処理回路204の投機的予測回路228は、命令ストリーム212内の条件付き制御命令208に続く第1CD命令領域310におけるフェッチされたCD条件付き制御命令208Fの条件を投機的に予測するように構成されている(図4のブロック404)。この一つの例が図3Aに示されており、ここで、CD条件付き制御命令208(3)、208(4)の条件は、図2の投機的予測回路228によって、それぞれに、NTおよびTとして投機的に予測される。投機的予測回路228は、次いで、第1CD命令領域310におけるCD条件付き制御命令208のそれぞれの投機的予測に基づいて、投機的予測履歴の予測エントリ306を更新するように構成されている。この一つの例が図3Cに示されており、ここで、予測履歴インジケータ230の投機的予測履歴インジケータ230S内の予測エントリ306(3)、306(4)は、図2の投機的予測回路228によって、それぞれに、CD条件付き制御命令208(3)、208(4)の予測と共にNTおよびTとして記録される。図3Cの投機的予測履歴インジケータ230S内の予測エントリ306(3)、306(4)は、CD予測エントリと称される。なぜなら、予測エントリ306(3)、306(4)がCD条件付き制御命令208(3)、208(4)の予測を記録してからである。
命令フェッチ回路206は、条件付き制御命令208のCI命令領域308における1つ以上のCI命令208をフェッチするように構成されている。この一つの例が図3Aに示されており、ここで、条件付き制御命令208(2)に対するフェッチされたCI命令208Fは、条件付き制御命令208(2)のCI命令領域308における条件付き制御CI命令208(5)、208(6)である。投機的予測回路228は、次いで、命令ストリーム212内の第1CD命令領域310に続くCI命令領域308における1つ以上のCI条件付き制御命令208の条件を投機的に予測するように構成されている(図4のブロック406)。この一つの例が図3Aに示されており、ここで、CI条件付き制御命令208(5)、208(6)の条件は、図2の投機的予測回路228によって、それぞれに、TおよびNTとして投機的に予測される。投機的予測回路228は、次いで、CI命令領域308におけるCI条件付き制御命令208のそれぞれの投機的予測に基づいて、投機的予測履歴インジケータ230SのCI予測エントリ306を更新するように構成されている(図4のブロック408)。この一つの例が図3Cに示されており、ここで、投機的予測履歴インジケータ230S内の予測エントリ306(5)、306(6)は、図2の投機的予測回路228によって、それぞれに、CI条件付き制御命令208(5)、208(6)の予測と共にTおよびNTとして記録される。図3Cの予測履歴インジケータ230内の予測エントリ306(5)、306(6)は、CI予測エントリと称される。なぜなら、予測エントリ306(5)、306(6)が、CI条件付き制御命令208(5)、208(6)の予測を記録しているからである。
この例において、命令処理回路204における実行回路216は、条件付き制御命令208(2)の条件を解決するために条件付き制御命令208(2)を実行するように構成されている(図4のブロック410)。実行回路216は、条件付き制御命令208(2)の条件を解決する。この例において、条件付き制御命令208(2)の解決された条件は、図3Bに示されるようにNTであるが、投機的予測回路228によってTとして以前に予測されたものである。従って、投機的予測履歴インジケータ230S内の予測エントリ306(2)は、「1」ビットによって示される、Tの予測と共に記録されている。
条件付き制御命令208(2)の投機的予測が実行中の条件付き制御命令208(2)の解決された条件に一致しないこと(not matching)に応答して(図4のブロック412)、命令フェッチ回路206は、命令パイプラインIPへの新しい命令208のフェッチをストールするように構成されている。投機的予測回路228は、投機的予測履歴インジケータ230S内のCI命令208に関連付けられた予測エントリ306において予測値を保管するように構成されており、その結果、これらの予測値は、誤予測回復の後で回復することができる(図4のブロック414)。この一つの例が図3Dに示されており、ここで、投機的予測履歴インジケータ230S内の予測エントリ306(5)、306(6)における予測値「10」は、これらの予測値が誤予測回復後に回復され得るように、保管される。命令処理回路204は、次いで、投機的予測履歴インジケータ230S内のCD予測エントリ306を除去する(図4のブロック414)。CD予測エントリ306に関連付けられたCD命令208がフラッシュされるからである。この一つの例が図3Dに示されており、ここでは、投機的予測履歴インジケータ230Sが4ビットだけ右シフトされて、投機的予測履歴インジケータ230S内の誤予測条件付き制御命令208(2)に対する予測エントリ306(2)内の記録された予測値の後に行われた予測について予測エントリ306(3)-306(6)に対する全ての予測値が除去される。
命令フェッチ回路206は、次いで、条件付き制御命令208(2)の解決された条件に基づいて、条件付き制御命令208(2)の正しい命令フローパス内の第2CD命令領域312における1つ以上のCD命令208をストール解除(unstall)し、そして、フェッチする(図4のブロック416)。これは、図3Bの例によって示されており、ここでは、条件付き制御命令208(2)の正しい命令フローパス内の第2CD命令領域312におけるCD条件付き制御命令208(7)-208(9)がフェッチされる。投機的予測回路228は、次いで、第2CD命令領域312における1つ以上のCD条件付き制御命令208の条件を投機的に予測する(図4のブロック418)。これは、図3Bの例によって示されており、ここで、投機的予測回路228は、第2CD命令領域312におけるCD条件付き制御命令208(7)-208(9)の条件を、それぞれに、NT、NT、NTとして、投機的に予測する。投機的予測回路228は、次いで、更新された投機的予測履歴インジケータ230S-Uに示されるように、投機的予測履歴インジケータ230S内のCD条件付き制御命令208(7)-208(9)について予測エントリ306(3)-306(5)を更新する。これは、図3Dの例によって示されており、ここで、予測エントリ306(3)-306(5)は、CD条件付き制御命令208(7)-208(9)に対するNT予測を記録するために「0」ビットで更新される。投機的予測回路228は、次いで、投機的予測履歴インジケータ230Sに対する保管されたCI予測エントリ306を回復するために、投機的予測履歴インジケータ230Sに保管されたCI予測エントリ306を追加するように構成されており、その結果、保管されたCI予測エントリ306に関連付けられたCI条件付き制御命令208の予測は回復され、将来の、より若い予測された条件付き制御命令208について正確な予測履歴インジケータ230が提供される(図4のブロック420)。これは、図3Dの例によって示されており、ここで、保管されたCI予測エントリ306(5)、306(6)は、CI予測エントリ306(6)、306(7)として、更新された投機的予測履歴インジケータ230S-Uに追加される。上述のように、この例では、回復時間を短縮するために、誤予測回復後には、CIDI条件付き制御命令208を再フェッチおよび再予測しないことが望ましい。
図2の命令処理回路204は、誤予測された条件制御命令208よりも若い、CI条件制御命令208を、これらのCI条件制御命令208を再フェッチする必要なく、誤予測回復後にリプレイ(replay)するように構成されている。CI条件付き制御命令208は、誤予測条件付き制御命令208の正しい命令フローパスにおいてフェッチされたCD命令208に続いて、命令パイプラインIPにおいて再処理され、そして、実行され得る。例えば、命令処理回路204は、誤予測回復において誤予測条件付き制御命令208に続く、そうした命令208をリプレイする必要なく、CIDI条件付き構成命令208をリプレイするように構成され得る。命令処理回路204は、また、誤命令フローパス内のCD条件付き制御命令208へのそれらのデータ依存性のせいで、誤予測回復において誤予測条件付き制御命令208に続く、CIDD条件付き構成命令208の条件を再フェッチし、そして、投機的再予測するようにも構成され得る。命令処理回路204は、また、回復された投機的予測履歴インジケータ230Sに基づいて、追加的なより若いCI条件付き制御命令208をフェッチし、そして、投機的に予測し、かつ、より若いCI条件付き制御命令208の投機的予測に基づいて、投機的予測履歴インジケータ230SのCI予測エントリを更新することもできる。
図2の命令処理回路204における誤予測回復について、さらなる例示的な詳細を提供するために、図5および図6が提供されている。図5および図6は、図3Aおよび図3Bの予測された分岐回復トレース記録300および実際の分岐回復トレース記録302に従って、それぞれに、誤予測回復の前および後の図2の例示的なBRB回路234の状態を示している。図5に示されるように、BRB回路234は、命令パイプラインIPにおいてフェッチされ、そして、処理される条件付き制御命令208に関する情報を保管するようにそれぞれ構成されている、複数のBRBエントリ500(1)-500(X)を含んでいる。上述のように、BRB回路234における情報は、投機的予測回路228によって維持される。各BRBエントリ500(1)-500(X)は、条件付き制御命令208のBRPCであり得る、挿入された条件付き制御命令208を識別するために、それぞれの条件付き制御命令識別子502(1)-502(X)を含んでいる。各BRBエントリ500(1)-500(X)は、また、それぞれのヒットテーブルインジケータ504(1)-504(X)、セット数インジケータ506(1)-506(X)、およびエントリタグ508(1)-508(X)を含み、図2の予測テーブル回路232へと予測インデックスを提供する予測アドレスポインタを集合的に提供して、BRBエントリ500(1)-500(X)のそれぞれの条件付き制御命令208の予測を獲得する。上述のように、ヒットテーブルインジケータ504(1)-504(X)、セット数インジケータ506(1)-506(X)、およびエントリタグ508(1)-508(X)は、予測履歴インジケータ230および条件付き制御命令208のPCのハッシュに基づいて、所与の条件付き制御命令208について、投機的予測回路228によって決定され得る。別個のヒットテーブルインジケータ504(1)-504(X)、セット数インジケータ506(1)-506(X)、およびエントリタグ508(1)-508(X)が、この例では、BRBエントリ500(1)-500(X)内に提供される。なぜなら、予測テーブル回路232は、それぞれが異なるセットおよび各セット内のエントリを有する、複数の予測テーブル回路を含み得るからである。従って、この例において、ヒットテーブルインジケータ504(1)-504(X)、セット数インジケータ506(1)-506(X)、およびエントリタグ508(1)-508(X)は、特定の予測テーブル回路232、その特定の予測テーブル回路232内のセット、および、そのセット内のエントリを識別するために、使用することができる。
引き続き図5を参照すると、各BRBエントリ500(1)-500(X)は、また、それぞれの条件付き制御命令208について条件の投機的予測を保管し、かつ、それぞれの条件付き制御命令208の条件の実際の解決を保管するために、それぞれの予測エントリ510(1)-510(X)および実際のエントリ512(1)-512(X)を含んでいる。この情報は、誤予測条件付き制御命令208に応答して、誤予測回復を処理するために、投機的予測回路228によって使用される。各BRBエントリ500(1)-500(X)は、また、それぞれのBRBエントリ500(1)-500(X)が有効であるかを示す、それぞれの有効インジケータ514(1)-514(X)を含んでいる。例えば、BRBエントリ500(1)-500(X)に保管された条件付き制御命令208が解決されるとき、BRBエントリ500(1)-500(X)は、別の処理された条件付き制御命令208のために再使用され得る。有効インジケータ514(1)-514(X)は、それぞれのBRBエントリ500(1)-500(X)が所与の時間に有効でないときは、無効状態(invalid state)に設定され得る。
図5に示されるように、BRBエントリ500(1)-500(6)は、命令処理回路204によってフェッチされた図3Aからの条件付き制御命令208(1)-208(6)についての情報を用いて満たされている。TまたはNTいずれかの投機的予測は、図3Aに示されるように、BRBエントリ500(1)-500(6)内のそれぞれの予測エントリ510(1)-510(6)に記入されている。図5に示されるように、また、BRBエントリ500(2)内の条件付き制御命令208(2)について実際の解決された条件が、図2の実行回路216によってNTであると決定されるとき、BRB回路234における実際のエントリ512(2)は、予測エントリ510(2)内に保管されたTの予測された条件とは異なるNTに更新される。これは、条件付き制御命令208(2)が投機的予測回路228によって誤予測したことを意味する。それに応答して、図6に示されるように、投機的予測回路228は、BRB回路234における誤予測条件付き制御命令208(2)に後続するCD条件付き制御命令208(3)、208(4)のためのBRBエントリ500(3)、500(4)をフラッシュするように構成されている。正しい命令フローパスにおいてフェッチされる条件付き制御命令208は、BRB回路234に示され、かつ、図3Bの例において以前に説明されたように、CD条件付き制御命令208(7)-208(9)である。図3Bに示されるように、BRBエントリ500(3)、500(4)のフラッシングは、誤予測回復において条件付き制御命令208(2)の正しい命令フローパスからフェッチされた新しい条件付き制御命令208を保管するための2つのBRBエントリ500のためだけに余地を残している。しかしながら、この例では、3つの新しいCD条件付き制御命令208(7)-208(9)が誤予測回復においてフェッチされる。BRBエントリ500(7)は、図6に示されるように、CD条件付き制御命令208(9)を保管するために利用可能であるが、順序が狂っている(out of order)。CD条件付き制御命令208(9)は、CI条件付き制御命令208(5)、208(6)よりも古い。条件付き制御命令208は、投機的予測履歴インジケータ230Sが誤予測回復において適切に回復されるように、BRB回路234に順番に保管される必要がある。投機的予測回路228は、BRB回路234における条件付き制御命令208の順序に基づいて、投機的予測履歴インジケータ230Sを更新するように構成されている。この問題を緩和するためには、望ましくない方法でBRB回路234におけるBRBエントリ500(5)-500(7)を並べ替えるために追加的な処理が採用されることを要するであろう。
BRB回路234におけるBRBエントリ500(1)-500(X)を順序付ける必要性を低減するために、図6の例に示されるように、BRB回路234であり得る、代替BRB回路700が提供され、そして、図7Aに示されている。以下で説明されるように、BRB回路700は、BRBエントリを再順序付けする必要なしに、BRBエントリが使用され、そして、フラッシュされることを可能にするために、リンクリスト構造(linked list structure)を促進する。命令処理回路204は、BRB回路700における分岐エントリを再順序付けする必要性を回避するために、BRB回路700の機能を使用するように構成されている。BRB回路700は、図3Aの例示的な条件付き制御命令208(1)-208(6)を使用して、かつ、条件付き制御命令208(2)の誤予測のせいでフラッシュイベントが発生する前に、示されている。この点に関して、BRB回路700は、図5および図6のBRB回路234におけるBRBエントリ500(1)-500(X)と同様な複数のBRBエントリ702(1)-702(X)を含んでいる。しかしながら、BRB回路700におけるBRBエントリ702(1)-702(X)は、また、それぞれのインデックスインジケータ704(1)-704(X)、および、インデックスリンクインジケータ706(1)-706(X)を含んでいる。BRB回路700は、また、ヘッドインデックスインジケータ708も含んでいる。ヘッドインデックスインジケータ708は、BRB回路700における、第1またはヘッド(head)、かつ、最も若い条件付き制御命令208を識別する、BRBエントリ702(1)-702(X)のインデックスを保管するように構成されている。この例において、最も若い条件付き制御命令208は、そのインデックスインジケータ704(1)内に「0」のインデックスを有している、BRBエントリ702(1)内の条件付き制御命令208(1)である。従って、ヘッドインデックスインジケータ708は、この例において、「0」のインデックスを保管している。インデックスリンクインジケータ706(1)-706(X)は、次に最も若い条件付き制御命令208を含む、次のBRBエントリ500(1)-500(X)を指し示すインデックスを保管している。従って、条件付き制御命令208(2)は条件付き制御命令208(1)の後で、次に最も若い条件付き制御命令であるので、インデックスリンクインジケータ706(1)は、インデックス「4」を保管する。これは、インデックス「4」を有するBRBエントリ702(5)が、条件付き制御命令208(2)を保管するからである。インデックスリンクインジケータ706(5)は、次に最も若い条件付き制御命令208(3)を含む、BRBエントリ500(7)を指し示す「6」のインデックスを保管する、等々。フリーリスト710は、新しい条件付き制御命令208を保管するために自由に使用される、BRBエントリ702(1)-702(X)を指し示すインデックスのリストを保管する。CIインデックスインジケータ712は、マージポイントまたはコンバージェンスポイントに続く次の条件付き制御命令208を保管する、BRBエントリ702(1)-702(X)のインデックスを示すために、BRB回路700において提供されている。
図7Bは、CD条件付き制御命令208(3)、208(4)が間違った命令フローパス内にあるものとして除去されるときに、誤予測回復においてフラッシュイベント236が発生した後の図7AにおけるBRB回路700を示している。図7Bに示されるように、条件付き制御命令208(2)の誤予測の結果として、フラッシュされたCD条件付き制御命令208(3)、208(4)に関する情報が保管された、BRBエントリ702(6)、702(7)が除去される。BRBエントリ702(6)、702(7)に対応しているインデックス「5」および「6」は、フリーリスト710内に戻されて、インデックス「5」および「6」でのBRBエントリ702(6)、702(7)が、新たにフェッチされた条件付き制御命令208Fについて情報を自由に保管できることを示す。CIインデックスインジケータ712内のCIインデックスは、この例では、そのインデックスインジケータ704(3)について「2」のインデックスを有しているBRBエントリ702(3)を指し示すように、「2」の値に更新され、誤予測条件付き制御命令208(2)についてのマージまたは収束ポイントに続く第1条件付き制御命令208(5)を識別する。
次いで、図7Cは、CD条件付き制御命令208(7)-208(9)が、条件付き制御命令208(2)のための正しい命令フローパスにおいてフェッチされたとき、再収束の後の図7AにおけるBRB回路700を示している。図7Cに示されるように、図7Bのフリーリスト710によって識別される「1」、「3」、および「6」のインデックスを有するBRBエントリ702(2)、702(4)、702(7)は、条件付き制御命令208(2)のための正しい命令フローパスからフェッチされたCD条件付き制御命令208(7)-208(9)についての情報を保管するために使用され得る。この点に関して、BRBエントリ702(6)内の条件付き制御命令208(2)のためのインデックスリンクインジケータ706(5)は、条件付き制御命令208(2)に続く、次の条件付き制御命令208(7)に関する情報を保管する、BRBエントリ702(2)を指し示すために、「1」のインデックスを有している。BRBエントリ702(2)内の条件付き制御命令208(7)のためのインデックスリンクインジケータ706(2)は、条件付き制御命令208(7)に続く、次の条件付き制御命令208(8)に関する情報を保管する、BRBエントリ702(4)を指し示すために、「3」のインデックスを有している。BRBエントリ702(4)内の条件付き制御命令208(8)のためのインデックスリンクインジケータ706(4)は、条件付き制御命令208(8)に続く、次の条件付き制御命令208(9)に関する情報を保管する、BRBエントリ702(7)を指し示すために「6」のインデックスを有している。BRBエントリ702(4)内の条件付き制御命令208(9)のためのインデックスリンクインジケータ706(7)は、条件付き制御命令208(9)に続く、次の条件付き制御命令208(5)に関する情報を保管する、BRBエントリ702(3)を指し示すために「2」のインデックスを有しており、以下同様である。
図3Cおよび図3Dに関して上記で説明したように、命令処理回路204、及び/又は、その投機的予測回路228は、誤予測回復において、プロセッサ200における投機的予測履歴インジケータ230S内のCI条件付き制御命令208に対する投機的予測を示している、CI予測エントリ306を回復するように構成することができる。これは、より若い条件付き制御命令208が、より正確な予測履歴インジケータ230に基づいて予測されるようにするためである。しかしながら、これらの保管されたCI予測エントリ306は、対応するCI条件付き制御命令208が、投機的予測回路228によって、フェッチされて、かつ、処理されたときに存在した、投機的予測履歴インジケータ230Sに基づいて、以前に決定され、そして、設定されたものである。これは、投機的に予測された予測命令フローパス内の任意の古いCD条件付き制御命令208が、また、より若いCI条件付き制御命令208に関して投機的予測を行うために使用される投機的予測履歴インジケータ230Sに影響を与えたことを意味する。しかしながら、これらのより古いCD条件付き制御命令208は、実行回路216において誤予測されたと後に判定される、より古い条件付き制御命令208から誤ってフェッチされた命令フローパス内に存在した可能性がある。このインスタンスにおいて、対応するCI条件付き制御命令208のために保管され、かつ、回復されたCI予測エントリ306は、誤予測回復においてフラッシュされることになる、より古いCD条件付き制御命令208のための予測に基づいていた。従って、投機的予測履歴インジケータ230S内の回復されたCI予測エントリ306は、CI予測エントリ306が、正しい命令フローパス内のより古いCD条件付き制御命令208によって影響を受けた投機的予測履歴インジケータ230Sからの投機的予測に基づく場合とは同じ予測を示さない可能性がある。
従って、他の例示的な態様では、より若いCI条件付き制御命令208に対応する投機的予測履歴インジケータ230Sを回復することに加えて、命令処理回路204は、また、誤予測回復において、より若いCI条件付き制御命令208に関連付けられた予測テーブル回路232における予測値を訂正するようにも構成され得る。誤予測回復において、命令処理回路204は、正しい命令フローパスにおいてフェッチされたCD条件付き制御命令208に基づいて更新される、投機的予測履歴インジケータ230Sに基づいて、フラッシュされない、より若いCI条件付き制御命令208の条件を投機的に再予測するように構成することができる。誤予測回復において、より若いCI条件付き制御命令208に関連付けられた予測テーブル回路232における予測値を訂正することによって、CI条件付き制御命令208の将来のインスタンスについて、より正確な予測を行うことができる。
従って、別の例では、CI条件付き制御命令208についてより正確な予測履歴を提供するために、命令処理回路204は、また、誤予測回復において、それぞれのヒットテーブルインジケータ504(0)-504(X)、セット数インジケータ506(0)-506(X)、およびエントリタグ508(0)-508(X)によって定義されるBRB回路234における予測アドレスポインタを更新するようにも構成されている。例えば、図6のCI条件付き制御命令208(5)、208(6)に対するBRB回路234における予測アドレスポインタは、誤予測回復において更新することができる。BRB回路234における予測アドレスポインタは、図2の実行回路216においてCI条件付き制御命令208(5)、208(6)の実行によって生成された生成値の実行またはコミットメント時に、非投機的予測履歴インジケータ230NSに基づいて、CI条件付き制御命令208(5)、208(6)について更新される。これにより、非投機的予測履歴インジケータ230NSは、CI条件付き制御命令208(5)、208(6)についてBRB回路234における予測アドレスポインタを更新するために使用されることが可能になる。なぜなら、CI条件付き制御命令208(5)、208(6)が実行され、かつ、コミットされ、その結果、その予測を伴うCI予測エントリ306は、もはや投機的予測履歴インジケータ230S内に無いからである。
次いで、投機的予測回路228は、CI予測エントリ306(5)、306(6)に設定されたCI条件付き制御命令208(5)、208(6)についてのBRB回路234における更新された予測アドレスポインタでの予測テーブル回路232における予測値を、解決された条件CI条件付き制御命令208(5)、208(6)と比較するように構成されている。BRB回路234における更新された予測アドレスポインタでの予測テーブル回路232における予測値が、CI条件付き制御命令208(5)、208(6)の実際の解決された条件と一致する場合、CI条件付き制御命令208(5)、208(6)に対するBRB回路234における更新された予測アドレスポインタでの予測テーブル回路232における予測値は、変更されないままである。しかしながら、BRB回路234における更新された予測アドレスポインタでの予測テーブル回路232における予測値が、CI条件付き制御命令208(5)、208(6)の実際の解決された条件と一致する場合、CI条件付き制御命令208(5)、208(6)に対するBRB回路234における更新された予測アドレスポインタでの予測テーブル回路232における予測値は、変更されないままである。このことは、CI条件付き制御命令208(5)、208(6)に対するCI予測エントリ306(5)、306(6)が、誤予測回復後に古いCD条件付き制御命令208がフェッチされ、かつ、予測されるときに、投機的予測履歴インジケータ230Sの更新に基づいて不正確である場合でさえ、予測テーブル回路232における予測値に対する補正を提供することができる。
この点に関して、誤予測回復における、より若いCI条件付き制御命令208に関連付けられた正しいCI予測エントリ306の一つの例を示すために、図8A-8Dが提供される。図8Aは、図3Aの命令処理回路204において予測される、フェッチされた条件付き制御命令208Fの例示的な予測分岐回復トレース記録300の図である。図8Bは、図3Bの命令処理回路204において予測される、フェッチされた条件付き制御命令208Fの例示的な実際の分岐回復トレース記録302の図である。図8Cは、図3Cに示される非投機的予測履歴インジケータ230NSおよび投機的予測履歴インジケータ230Sを含む、予測履歴インジケータ230を示している。上記の図3A-図3Cに係る以前の説明は、図8A-図8Cに適用可能であり、そして、従って、図8A-図8Cを再度説明する必要はない。
図8Dに示されるように、命令処理回路204は、誤予測回復におけるフラッシュイベント236に応答して、予測履歴インジケータ230の投機的予測履歴インジケータ230Sを更新するように構成されている。CI条件付き制御命令208(5)、208(6)に関連付けられた投機的予測履歴インジケータ230S内のCI予測エントリ306(5)、306(6)におけるTおよびNTの以前の予測(すなわち「10」)を保管および回復する代わりに、命令処理回路204は、誤予測回復後の条件付き制御命令208(2)について正しい命令フローパス内の条件付き制御命令208(7)-208(9)のフェッチおよび投機的予測に基づいて、更新された投機的予測履歴インジケータ230S-U内のCI条件付き制御命令208(5)、208(6)に関連付けられた、訂正された予測を回復するように構成されている。この例において、NT、NT、NT(すなわち、「000」)としての条件付き制御命令208(7)-208(9)の投機的予測は、更新された投機的予測履歴インジケータ230S-Uに影響を及ぼした。CI条件付き制御命令208(5)、208(6)の投機的予測は、正しい命令フローパス内の条件付き制御命令208(7)-208(9)を予測することに応答して、更新された投機的予測履歴インジケータ230S-Uに基づいて、それぞれの予測T、T(すなわち、「11」)を結果として生じた。これらの訂正された予測は、図3Dに示されるように、更新された投機的予測履歴インジケータ230S-U内の予測エントリに追加される、訂正されたCI予測エントリ806(5)、806(6)において提供される。
この、一つの例における、図2の投機的予測回路228は、誤予測回復において、図8Aおよび8BのCI命令領域308におけるCI条件付き制御命令208(5)、208(6)の条件を投機的に予測するように構成されている。予測条件は、図8Dに示されるように、CI予測エントリ806(5)、806(6)を形成する。投機的予測回路228は、次いで、更新された投機的予測履歴インジケータ230S-U内の訂正されたCI予測エントリ306(6)、306(7)を提供するために、CI予測エントリ806(5)、806(6)を用いて、更新された投機的予測履歴インジケータ230S-U内の投機的予測履歴インジケータ230Sを更新するように構成されている。図2の命令処理回路204、及び/又は、その投機的予測回路228は、BRB回路234がフラッシュされ、そして、CD条件付き制御命令208(7)-208(9)が正しい命令フローパスにおいてフェッチされた後で、CI条件付き制御命令208(5)、208(6)の条件を再予測することによって、更新された投機的予測履歴インジケータ230S-Uにおける訂正されたCI予測エントリ806(6)、806(7)を提供するように構成されている。従って、CI条件付き制御命令208(5)、208(6)に対する更新された予測は、CD条件付き制御命令208(7)-208(9)に対する図8DのCD予測エントリ306(3)-306(5)内の更新された予測を含む、更新された投機的予測履歴インジケータ230S-Uに基づいて行われる。
一つの例において、未解決のCI条件付き制御命令208は、精度を高めるために、更新された投機的予測履歴インジケータ230S-Uに基づいて処理される。命令処理回路204は、CI予測エントリ306(5)、806(6)内の未解決のCI条件付き制御命令208に対する再予測が、図8Cの投機的予測履歴インジケータ230SにおけるCI予測エントリ806(5)-306(6)内の、その初期予測と異なっているか、を判定するように構成されている。CI予測エントリ306(5)、806(6)内の未解決のCI条件付き制御命令208に対する再予測が、投機的予測履歴インジケータ230SにおけるCI予測エントリ806(5)、306(6)内の、その初期予測と異なる場合、命令処理回路204は、また、BRB回路234の保守(maintenance)もオーバーライドするように構成されている。そのCI予測エントリ306が、その再予測と一致しない、対応する未解決のCI条件付き制御命令208は、BRB回路234からフラッシュされ、そして、未解決のCI条件付き制御命令208は、再フェッチされ、かつ、処理される。このようにして、再フェッチされた未解決のCI条件付き制御命令208は、CD条件付き制御命令208(7)-208(9)に対する図8DのCD予測エントリ306(3)-306(5)内の更新された予測を含む、更新された投機的予測履歴インジケータ230S-Uに基づいて、再び予測される。BRB回路234における更新された予測アドレスポインタは、それぞれのヒットテーブルインジケータ504(0)-504(X)、セット数インジケータ506(0)-506(X)、およびエントリタグ508(0)-508(X)によって定義され、そして、BRB回路234におけるそれぞれの未解決のCI条件付き制御命令208に対する予測エントリ510(1)-510(X)内の予測値は、未解決のCI条件付き制御命令208に対するBRB回路234における以前の予測アドレスポインタでの予測テーブル回路232内の誤った予測値更新を防止するように更新される。
全ての未解決のCI条件付き制御命令208を再予測するこの技法は、命令処理回路204による、新しく、より若い命令208のフェッチおよび処理を遅延させ得る。しかしながら、予測の改善された精度、および、低減された誤予測回復からの処理時間の節約は、この追加の遅延を上回る可能性がある。
別の例では、全ての未解決のCI条件付き制御命令208を再予測して、新しく、より若い命令208のフェッチが遅延する代わりに、命令処理回路204は、新しく、より若い命令208のフェッチを継続するように構成され得る。投機的予測回路228といった、命令処理回路204における別個の回路は、前述したように、別個のプロセスにおいて、未解決のCI条件付き制御命令208について、それぞれのヒットテーブルインジケータ504(0)-504(X)、セット数インジケータ506(0)-506(X)、およびエントリタグ508(0)-508(X)によって定義されるBRB回路234における更新された予測アドレスポインタを決定することができる。次いで、命令処理回路204は、CI予測エントリ306(5)、306(6)内の未解決のCI条件付き制御命令208に対する再予測が、図8Cの投機的予測履歴インジケータ230SにおけるCI予測エントリ806(5)、806(6)内の、その初期予測と異なるかを判定するために、上述のような誤予測回復後に、未解決のCI条件付き制御命令208を再予測するように構成することができる。CI予測エントリ306(5)、806(6)内の未解決のCI条件付き制御命令208に対する再予測が、投機的予測履歴インジケータ230SにおけるCI予測エントリ806(5)、306(6)内の、その初期予測と異なる場合、命令処理回路204は、また、上述のように、BRB回路234の保守もオーバーライドするように構成されている。
図9は、より若いCI条件付き制御命令を再フェッチする必要性を回避しながら、投機的予測を行うための正確な投機的履歴を提供するために、より若いCI条件付き制御命令208に関連付けられた誤予測回復における投機的履歴を回復するように構成されたプロセッサ902を含む、一つの例示的なプロセッサベースのシステム900のブロック図である。例えば、プロセッサ902は、誤予測回復においてCIDI命令を再フェッチする必要性を回避するために、制御独立技法を採用するように構成され得る。プロセッサ902は、投機的予測履歴インジケータ230SがCI条件付き制御命令の予測履歴を正確に反映するように、より古い条件付き制御命令の誤予測の前に、CI条件付き制御命令208に対して行われた以前の予測を回復することができる。プロセッサ902は、限定することなく、図2のプロセッサ200、および、図2-図8で説明した投機的予測を行うための正確な投機的履歴を提供するために、より若いCI条件付き制御命令に関連付けられた誤予測回復において投機的履歴を回復するための機能のいずれか、を含むことができる。
プロセッサベースのシステム900は、プリント回路基板(PCB)、サーバ、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、携帯情報端末(PDA)、コンピューティングパッド、モバイルデバイス、または任意の他のデバイスといった、電子ボードカードに含まれる1つ以上の回路であってよく、そして、例えば、サーバまたはユーザのコンピュータを表すことができる。この例において、プロセッサベースのシステム900は、プロセッサ902を含んでいる。プロセッサ902は、マイクロプロセッサ、中央処理装置、等といった、1つ以上の汎用処理回路を表している。プロセッサ902は、ここにおいて説明される動作およびステップを実行するために、コンピュータ命令における処理ロジックを実行するように構成されている。この例において、プロセッサ902は、フェッチされた条件付き制御命令の投機的予測を行うための投機的予測回路904を含んでいる。投機的予測回路904は、図2の投機的予測回路228とすることができる。プロセッサ902は、また、命令の一時的で、高速なアクセスメモリストレージのための命令キャッシュ906、および、命令処理回路908を含んでいる。システムバス912を介したシステムメモリ910から、といった、メモリからフェッチされ、または、プリフェッチされた命令は、命令キャッシュ906に保管される。命令処理回路908は、命令キャッシュ906へとフェッチされた命令を処理し、そして、実行のために命令を処理するように構成されている。命令処理回路908は、フェッチされた命令を1つ以上の命令パイプラインへと挿入するように構成されており、次いで、命令パイプラインは実行のために処理される。
プロセッサ902およびシステムメモリ910は、システムバス912に結合されており、そして、プロセッサベースのシステム900に含まれる周辺デバイスを相互結合することができる。よく知られているように、プロセッサ902は、システムバス912を介してアドレス、制御、およびデータ情報を交換することによって、これらの他のデバイスと通信する。例えば、プロセッサ902は、スレーブデバイスの一つの例として、システムメモリ910におけるメモリコントローラ914に対してバストランザクション要求を通信することができる。図9には示されていないが、複数のシステムバス912を備えることができ、ここで、各システムバスは、異なるファブリックを構成している。この例において、メモリコントローラ914は、システムメモリ910におけるメモリアレイ916に対してメモリアクセス要求を提供するように構成されている。メモリアレイ916は、データを保管するための保管ビットセルのアレイから構成されている。システムメモリ910は、非限定的な例として、リードオンリメモリ(ROM)、フラッシュメモリ、シンクロナスDRAM(SDRAM)といった、ダイナミックランダムアクセスメモリ(DRAM)、等、および、スタティックメモリ(例えば、フラッシュメモリ、スタティックランダムアクセスメモリ(SRAM)、等)であり得る。
他のデバイスをシステムバス912に接続することができる。図9に示されるように、これらのデバイスは、例として、システムメモリ910、1つ以上の入力デバイス918、1つ以上の出力デバイス920、モデム922、および、1つ以上のディスプレイコントローラ924を含むことができる。入力デバイス918は、限定されるわけではないが、入力キー、スイッチ、音声プロセッサ、等を含む、任意のタイプの入力デバイスを含むことができる。出力デバイス920は、限定されるわけではないが、オーディオ、ビデオ、他の視覚インジケータ、等を含む、任意のタイプの出力デバイスを含むことができる。モデム922は、ネットワーク926との間(to and from)のデータの交換を可能にするように構成された任意のデバイスであり得る。ネットワーク926は、限定されるわけではないが、ワイヤードまたはワイヤレスネットワーク、プライベートまたはパブリックネットワーク、ローカルエリアネットワーク(LAN)、ワイヤレスローカルエリアネットワーク(WLAN)、ワイドエリアネットワーク(WAN)、BLUETOOTH(登録商標)ネットワーク、および、インターネットを含む、任意のタイプのネットワークであり得る。モデム922は、任意のタイプの所望の通信プロトコルをサポートするように構成することができる。プロセッサ902は、また、1つ以上のディスプレイ928に送られる情報を制御するために、システムバス912を介してディスプレイコントローラ924にアクセスするようにも構成され得る。ディスプレイ928は、限定されるわけではないが、ブラウン管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ、等を含む、任意のタイプのディスプレイを含むことができる。
図9のプロセッサベースのシステム900は、条件付き制御命令を含み得る、一式の命令930を含んでよく、そうした命令をCI命令またはCD命令のいずれかにさせる。命令930は、非一時的コンピュータ可読媒体932の例として、システムメモリ910、プロセッサ902、及び/又は、命令キャッシュ906に保管され得る。命令930は、また、実行の最中に、システムメモリ910内、及び/又は、プロセッサ902内に、完全に又は少なくとも部分的に存在し得る。命令930はさらに、ネットワーク926が非一時的コンピュータ可読媒体932を含むように、モデム922を介してネットワーク926上で送信または受信され得る。
非一時的コンピュータ可読媒体932は、一つの例示的な実施形態において、単一の媒体として示されているが、「コンピュータ可読媒体(“computer-readable medium”)」という用語は、1つ以上の命令セットを保管する、単一の媒体または複数の媒体(例えば、集中型または分散型データベース、及び/又、は関連するキャッシュおよびサーバ)を含むものと解釈されるべきである。「コンピュータ可読媒体」という用語は、また、処理デバイスによる実行のための命令のセットを保管し、エンコーディングし、または、搬送することが可能であり、かつ、ここにおいて開示される実施形態の方法のうちのいずれか1つ以上を処理デバイスに実行させる、任意の媒体を含むものと解釈されるべきであるものとする。「コンピュータ可読媒体」という用語は、従って、これらに限定されるわけではないが、ソリッドステートメモリ、光媒体、および、磁気媒体を含むものと解釈されるべきである。
ここにおいて開示される実施形態は、様々なステップを含んでいる。ここにおいて開示される実施形態のステップは、ハードウェアコンポーネントによって形成されてよく、または、機械実行可能命令で具現化されてもよく、機械実行可能命令は、命令を用いてプログラムされた汎用または専用プロセッサに、ステップを実行させるために使用され得る。代替的に、ステップは、ハードウェアおよびソフトウェアの組み合わせによって実行されてよい。
ここにおいて開示される実施形態は、ここにおいて開示される実施形態に従ったプロセスを実行するようにコンピュータシステム(または、他の電子デバイス)をプログラムするために使用され得る、
命令が保管された機械可読媒体(または、コンピュータ可読媒体)を含み得る、コンピュータプログラム製品またはソフトウェアとして提供され得る。機械可読媒体は、機械(例えば、コンピュータ)によって可読な形態で情報を保管または送信するための任意のメカニズムを含んでいる。例えば、機械可読媒体は、機械可読ストレージ媒体(例えば、ROM、ランダムアクセスメモリ(RAM)、磁気ディスクストレージ媒体、光ストリング媒体、フラッシュメモリデバイス、等)などを含んでいる。
特に明記しない限り、そして、先の説明から明らかなように、説明全体を通して、「処理(“processing”)」、「計算(“computing”)」、「決定(“determining”)」、「表示(“displaying”)」など、といった用語を利用している説明は、コンピュータシステムのレジスタ内の物理(電子)量として表されるデータおよびメモリを操作して、コンピュータシステムメモリ、レジスタ、または、他のそうした情報ストレージ装置、伝送装置、もしくは、表示装置内の物理量として同様に表される他のデータへと変換する、コンピュータシステム、または、同様の電子計算装置の動作およびプロセスを指すことを理解されたい。
ここにおいて提示されるアルゴリズムおよび表示は、任意の特定のコンピュータまたは他の装置に本質的には関連しない。様々なシステムが、ここにおける教示に従ってプログラムと共に使用されてよく、または、必要とされる方法ステップを実行するために、より特化された装置を構築することが好都合であることが判明されてよい。様々なこれらのシステムに必要な構造は、上記の説明から明らかになるだろう。加えて、ここにおいて説明される実施形態は、任意の特定のプログラミング言語を参照して説明されるものではない。ここにおいて説明される実施形態の教示を実装するために、様々なプログラミング言語が使用され得ることが理解されよう。
当業者であれば、ここにおいて開示される実施形態に関して説明する様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムは、電子ハードウェア、メモリまたは別のコンピュータ可読媒体に保管され、かつ、プロセッサまたは他の処理デバイスによって実行される命令、もしくは、両方の組合せとして実装され得ることを、さらに理解する。ここにおいて説明される分散アンテナシステムのコンポーネントは、例として、任意の回路、ハードウェアコンポーネント、集積回路(IC)、または、ICチップにおいて採用され得る。ここにおいて開示されるメモリは、任意のタイプおよびサイズのメモリであってよく、そして、所望の任意のタイプの情報を保管するように構成されてよい。この互換性を明確に示すために、様々な例示的なコンポーネント、ブロック、モジュール、回路、およびステップが、一般的に、それらの機能に関して上記で説明されている。そうした機能がどのように実装されるかは、特定の用途、設計選択、及び/又は、システム全体に課される設計制約に依存する。当業者であれば、説明された機能を特定のアプリケーションごとに様々な方法で実装し得るが、そうした実装の決定は、本実施形態の範囲からの逸脱を引き起こすものとして解釈されるべきではない。
ここにおいて開示される実施形態に関して説明される、様々な例示的な論理ブロック、モジュール、および、回路は、プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または、他のプログラマブル論理デバイス、ディスクリート・ゲートまたはトランジスタ論理、ディスクリート・ハードウェアコンポーネント、もしくは、ここにおいて説明する機能を実行するように設計されたそれらの任意の組合せを用いて、実装され、または、実行され得る。さらに、コントローラは、プロセッサであってよい。プロセッサは、マイクロプロセッサであってよいが、代替として、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または、状態機械であってよい。プロセッサは、また、コンピューティングデバイスの組合せ(例えば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連携する1つ以上のマイクロプロセッサ、または、任意の他のそうした構成)として実装され得る。
ここにおいて開示される実施形態は、ハードウェアにおいて、および、ハードウェアに保管される命令において具現化されてよく、そして、例えば、RAM、フラッシュメモリ、ROM、電気的プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または、当技術分野で知られている任意の他の形態のコンピュータ可読媒体に存在してよい。一つの例示的なストレージ媒体は、プロセッサがストレージ媒体から情報を読み取り、そして、ストレージ媒体に情報を書き込むことができるように、プロセッサに対して結合されている。代替的に、ストレージ媒体は、プロセッサに一体化され得る。プロセッサおよびストレージ媒体は、ASIC内に存在し得る。ASICは、リモート局に存在し得る。代替において、プロセッサおよびストレージ媒体は、リモート局、基地局、またはサーバにおいて個別コンポーネントとして存在し得る。
ここにおける例示的な実施形態のいずれかにおいて説明される動作ステップは、実施例および説明を提供するために説明されることにも留意すること。説明される動作は、図示されたシーケンス以外の、多数の異なるシーケンスで実行され得る。さらに、単一の動作ステップにおいて説明される動作は、実際には、いくつかの異なるステップにおいて実行されてよい。追加的に、例示的な実施形態で説明された1つ以上の動作ステップは、組み合わせることができる。当業者であれば、また、情報および信号が、様々な技術および技法のいずれかを使用して表され得ることを理解するだろう。例えば、上記の説明全体にわたり参照され得る、データ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場、もしくは、粒子、光場もしくは粒子、または、それらの任意の組合せによって表され得る。
特に明記されない限り、ここにおいて明らかにされる任意の方法は、そのステップが特定の順序で行われることを必要とするものと解釈されることは、決して意図されていない。従って、方法の請求項が、そのステップが従うべき順序を実際に列挙していない場合、または、ステップが特定の順序に限定されるべきであることが請求項または説明において別段に具体的に述べられていない場合、任意の特定の順序が推測されることは、決して意図されていない。
本発明の精神または範囲から逸脱することなく、様々な修正および変更を行うことができることは、当業者にとって明らかであろう。当業者にとって、本発明の精神および実体に組み込まれている開示された実施形態の修正、組合せ、部分的組合せ、および、変形が想起され得るので、本発明は、添付の請求項、および、それらの均等物の範囲内の全てを含むものと解釈されるべきである。

Claims (15)

  1. プロセッサであって、
    1つ以上の命令パイプラインを備える命令処理回路と、
    投機的予測履歴インジケータと、を含み、
    前記命令処理回路は、
    前記投機的予測履歴インジケータに基づいて、命令パイプラインにおける命令ストリーム内の条件付き制御命令において、条件を投機的に予測し、
    前記命令ストリーム内の前記条件付き制御命令に続く、第1CD命令領域における1つ以上の制御依存(CD)条件付き制御命令の条件を投機的に予測し、
    前記命令ストリーム内の前記第1CD命令領域に続く、CI命令領域における1つ以上の制御独立(CI)条件付き制御命令の条件を投機的に予測し、
    前記CI命令領域における前記1つ以上のCI条件付き制御命令のそれぞれの投機的予測に基づいて、前記投機的予測履歴インジケータの1つ以上のCI予測エントリを更新し、
    前記条件付き制御命令の前記条件を解決するように、前記条件付き制御命令を実行し、かつ、
    前記投機的予測が、前記条件付き制御命令の実行における前記解決された条件に一致しないことに応答して、
    前記投機的予測履歴インジケータの前記1つ以上のCI予測エントリを保管し、
    前記条件付き制御命令の前記解決された条件に基づいて、前記条件付き制御命令の第2CD命令領域における1つ以上のCD命令をフェッチし、
    前記第2CD命令領域における1つ以上のCD条件付き制御命令の条件を投機的に予測し、かつ、
    前記投機的予測履歴インジケータ内の前記保管された1つ以上のCI予測エントリを回復する、
    ように構成されている、
    プロセッサ。
  2. 前記命令処理回路は、さらに、
    メモリから前記1つ以上の命令パイプラインのうち1つの命令パイプラインへと複数の命令をフェッチし、
    前記条件付き制御命令の前記条件の前記投機的予測に基づいて、前記投機的予測履歴インジケータ内の予測エントリを更新し、
    前記条件付き制御命令の前記投機的予測に基づいて、前記条件付き制御命令の前記第1CD命令領域における前記複数の命令のうち前記1つ以上のCD命令をフェッチし、
    前記第1CD命令領域における前記1つ以上のCD条件付き制御命令のそれぞれの投機的予測に基づいて、前記投機的予測履歴インジケータの1つ以上のCDエントリを更新し、
    前記条件付き制御命令の前記CI命令領域における1つ以上のCI命令をフェッチし、かつ、
    前記投機的予測が、前記条件付き制御命令の実行において前記解決された条件に一致しないことに応答して、
    前記条件付き制御命令の前記解決された条件に基づいて、前記投機的予測履歴インジケータ内の、前記予測エントリを更新し、
    前記投機的予測履歴インジケータの前記1つ以上のCDエントリを除去し、
    前記第2CD命令領域における1つ以上のCD条件付き制御命令の条件を投機的に予測し、かつ、
    前記第2CD命令領域における前記1つ以上のCD条件付き制御命令の前記それぞれの投機的予測に基づいて、前記投機的予測履歴インジケータの前記1つ以上のCDエントリを更新する、
    ように構成されている、請求項1に記載のプロセッサ。
  3. 前記命令処理回路は、さらに、
    前記第1CD命令領域における前記1つ以上のCD条件付き制御命令の前記それぞれの投機的予測に基づいて、前記投機的予測履歴インジケータの1つ以上のCDエントリを更新する、
    ように構成されており、
    前記命令処理回路は、
    前記第2CD命令領域における前記1つ以上のCD条件付き制御命令の前記それぞれの投機的予測に基づいて、前記投機的予測履歴インジケータの前記1つ以上のCD予測エントリが更新された後で、前記投機的予測履歴インジケータの前記保管された1つ以上のCI予測エントリを回復する、
    ように構成されている、
    請求項1に記載のプロセッサ。
  4. 前記投機的予測履歴インジケータ内の前記保管された1つ以上のCI予測エントリを回復する、前記投機的予測に応答して、前記命令処理回路は、さらに、
    前記投機的予測履歴インジケータに基づいて、1つ以上のより若いCI条件付き制御命令の条件を投機的に予測し、かつ、
    前記投機的予測履歴インジケータに基づく、前記1つ以上のCI条件付き制御命令の前記それぞれの投機的予測に基づいて、前記投機的予測履歴インジケータの前記1つ以上のCI予測エントリを更新する、
    ように構成されている、
    請求項1に記載のプロセッサ。
  5. 前記投機的予測履歴インジケータ内の前記保管された1つ以上のCI予測エントリを回復する、前記投機的予測に応答して、前記命令処理回路は、さらに、
    前記投機的予測履歴インジケータに基づいて、前記回復された1つ以上のCI予測エントリを用いて、前記1つ以上のCI条件付き制御命令を処理する、
    ように構成されている、
    請求項1に記載のプロセッサ。
  6. 前記プロセッサは、さらに、
    分岐リオーダバッファ(BRB)回路であり、
    条件付き制御命令識別子を保管するように構成された予測エントリと、前記投機的予測履歴インジケータに対する予測インデックスを保管するように構成された予測アドレスポインタと、前記条件付き制御命令について予測インジケータを保管するように構成された予測エントリと、を各々備える、複数の分岐エントリを備含む、
    BRB回路、を含み、
    前記命令処理回路は、
    前記BRB回路における前記複数の分岐エントリのうち1つの分岐エントリに前記条件付き制御命令を保管し、
    前記分岐エントリにおける前記予測アドレスポインタ内の前記投機的予測履歴インジケータに対する前記予測インデックスに基づいて、前記命令ストリームにおける前記条件付き制御命令内の前記条件を投機的に予測し、
    前記第1CD命令領域におけるそれぞれの1つ以上のCD条件付き制御命令を識別する、前記BRB回路における前記複数の分岐エントリのうち1つの分岐エントリ内の前記予測エントリにおいて1つ以上の条件付き制御命令識別子を保管し、
    前記1つ以上のCD条件付き制御命令の前記投機的予測を、それぞれの分岐エントリ内の前記予測エントリにおけるそれぞれの予測インジケータとして保管し、
    前記CI命令領域におけるそれぞれの1つ以上のCI条件付き制御命令を識別する、前記BRB回路における前記複数の分岐エントリのうち1つの分岐エントリ内の前記予測エントリにおいて1つ以上の条件付き制御命令識別子を保管し、かつ、
    前記1つ以上のCI条件付き制御命令の前記投機的予測を、それぞれの分岐エントリ内の前記予測エントリにおけるそれぞれの予測インジケータとして保管する、
    ように構成されている、
    請求項1に記載のプロセッサ。
  7. 前記投機的予測が、前記条件付き制御命令の実行において前記解決された条件に一致しないことに応答して、前記命令処理回路は、さらに、
    前記第1CD命令領域における前記それぞれの1つ以上のCD条件付き制御命令を識別する、前記BRB回路における前記複数の分岐エントリのうち前記分岐エントリ内の前記予測エントリにおける前記1つ以上の条件付き制御命令識別子を除去し、かつ、
    前記第2CD命令領域における前記それぞれの1つ以上のCD条件付き制御命令を識別する、前記BRB回路における前記複数の分岐エントリのうち分岐エントリ内の前記予測エントリ内における1つ以上の条件付き制御命令識別子を保管する、
    ように構成されている、
    請求項6に記載のプロセッサ。
  8. 前記BRB回路における前記複数の分岐エントリのうち各分岐エントリは、さらに、前記複数の分岐エントリのうち次の分岐エントリに対するインデックスリンクを保管するように構成されたインデックスリンクインジケータを備え、
    前記投機的予測が、前記条件付き制御命令の実行において前記解決された条件に一致しないことに応答して、前記命令処理回路は、さらに、
    前記第2CD命令領域における前記それぞれの1つ以上のCD条件付き制御命令を識別する、前記BRB回路における前記複数の分岐エントリのうち各分岐エントリに対する前記インデックスリンク内のインデックスリンクインジケータを、前記第2CD命令領域における前記1つ以上のCD条件付き制御命令内の次のCD条件付き制御命令に対する前記BRB回路における前記複数の分岐エントリのうち次の分岐エントリに、保管する、
    ように構成されている、
    請求項7に記載のプロセッサ。
  9. 前記投機的予測履歴インジケータの前記保管された1つ以上のCI予測エントリを回復することに応答して、前記命令処理回路は、さらに、
    前記CI命令領域における1つ以上のCI条件付き制御命令の条件を投機的に予測し、かつ、
    前記1つ以上のCI条件付き制御命令の前記それぞれの投機的予測に基づいて、前記投機的予測履歴インジケータの前記1つ以上のCI予測エントリを更新する、
    ように構成されている、
    請求項1に記載のプロセッサ。
  10. 前記命令処理回路は、前記投機的予測履歴インジケータに基づいて決定された予測アドレスポインタでの予測テーブル回路における予測値に基づいて、1つ以上のCI条件付き制御命令の前記条件を投機的に予測するように構成されており、
    前記命令処理回路は、さらに、
    前記1つ以上のCI条件付き制御命令の実行に応答して、非投機的予測履歴インジケータに基づいて、前記1つ以上のCI条件付き制御命令について前記予測アドレスポインタを更新し、
    前記1つ以上のCI条件付き制御命令の実行に基づいて、前記1つ以上のCI条件付き制御命令それぞれについて実際の解決された条件を生成し
    前記更新された予測アドレスポインタでの予測テーブル回路における前記1つ以上のCI条件付き制御命令についての前記予測値を、前記1つ以上のCI条件付き制御命令の前記実際の解決された条件と比較し、
    前記1つ以上のCI条件付き制御命令についての前記予測値が、実行時に前記1つ以上のCI条件付き制御命令の前記実際の解決された条件に一致しないことに応答して、前記1つ以上のCI条件付き制御命令についての前記更新された予測アドレスポインタでの、前記予測テーブル回路における前記1つ以上のCI条件付き制御命令についての前記予測値を更新する、
    ように構成されている、
    請求項9に記載のプロセッサ。
  11. 前記命令処理回路は、さらに、
    前記条件付き制御命令の前記解決された条件に基づいて、前記条件付き制御命令の第2CD命令領域における前記1つ以上のCD命令をフェッチした後で、
    前記CI命令領域における1つ以上のCI条件付き制御命令の条件を、投機的に再予測し、かつ、
    前記1つ以上のCI条件付き制御命令の前記それぞれの投機的予測に基づいて、前記投機的予測履歴インジケータの前記1つ以上のCI予測エントリを更新する、
    ように構成されている、
    請求項9に記載のプロセッサ。
  12. 前記命令処理回路は、さらに、
    前記CI命令領域における1つ以上のCI条件付き制御命令の前記投機的に再予測された条件が、前記CI命令領域における1つ以上のCI条件付き制御命令の前記投機的に再予測された条件と一致するかを判定し、かつ、
    1つ以上のCI条件付き制御命令の前記投機的に再予測された条件が、前記CI命令領域における1つ以上のCI条件付き制御命令の前記投機的に再予測された条件に一致しないことに応答して、
    前記更新された1つ以上のCI予測エントリを用いて、前記投機的予測履歴インジケータに基づいて、前記1つ以上のCI条件付き制御命令を再処理する、
    ように構成されている、
    請求項11に記載のプロセッサ。
  13. 前記命令処理回路は、さらに、
    前記1つ以上のCI条件付き制御命令に続く、複数の命令をフェッチし、
    前記CI命令領域における1つ以上のCI条件付き制御命令の条件を投機的に再予測し、かつ、
    前記1つ以上のCI条件付き制御命令の前記それぞれの投機的予測に基づいて、前記投機的予測履歴インジケータの前記1つ以上のCI予測エントリを更新する、
    ように構成されている、
    請求項11に記載のプロセッサ。
  14. プロセッサにおいて、条件付き制御命令の投機的予測を行うために使用される投機的履歴を回復する方法であって、
    投機的予測履歴インジケータに基づいて、命令パイプラインにおける命令ストリーム内の条件付き制御命令において、条件を投機的に予測するステップと、
    前記命令ストリーム内の前記条件付き制御命令に続く、第1CD命令領域における1つ以上の制御依存(CD)条件付き制御命令の条件を投機的に予測するステップと、
    前記命令ストリーム内の前記第1CD命令領域に続く、CI命令領域における1つ以上の制御独立(CI)条件付き制御命令の条件を投機的に予測するステップと、
    前記CI命令領域における前記1つ以上のCI条件付き制御命令のそれぞれの投機的予測に基づいて、前記投機的予測履歴インジケータの1つ以上のCI予測エントリを更新するステップと、
    前記条件付き制御命令の前記条件を解決するように、前記条件付き制御命令を実行するステップと、
    前記投機的予測が、前記条件付き制御命令の実行における前記解決された条件に一致しないことに応答して、
    前記投機的予測履歴インジケータの前記1つ以上のCI予測エントリを保管するステップ、
    前記条件付き制御命令の前記解決された条件に基づいて、前記条件付き制御命令の第2CD命令領域における1つ以上のCD命令をフェッチするステップ、
    前記第2CD命令領域における1つ以上のCD条件付き制御命令の条件を投機的に予測するステップ、および、
    前記投機的予測履歴インジケータ内で、前記投機的予測履歴インジケータの前記保管された1つ以上のCI予測エントリを回復するステップ、
    を含む、方法。
  15. 前記投機的予測履歴インジケータの前記保管された1つ以上のCI予測エントリを回復するステップに応答して、前記方法は、さらに、
    前記CI命令領域における1つ以上のCI条件付き制御命令の条件を投機的に予測するステップと、
    前記1つ以上のCI条件付き制御命令の前記それぞれの投機的予測に基づいて、前記投機的予測履歴インジケータの前記1つ以上のCI予測エントリを更新するステップと、
    を含む、請求項14に記載の方法。

JP2023521849A 2020-10-12 2021-07-13 制御独立技法を採用するプロセッサ内で処理される命令について投機的予測を行うために使用される投機的履歴の回復 Pending JP2023545134A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/068,253 2020-10-12
US17/068,253 US11698789B2 (en) 2020-10-12 2020-10-12 Restoring speculative history used for making speculative predictions for instructions processed in a processor employing control independence techniques
PCT/US2021/041347 WO2022081221A1 (en) 2020-10-12 2021-07-13 Restoring speculative history used for making speculative predictions for instructions processed in a processor employing control independence techniques

Publications (1)

Publication Number Publication Date
JP2023545134A true JP2023545134A (ja) 2023-10-26

Family

ID=77265206

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2023521849A Pending JP2023545134A (ja) 2020-10-12 2021-07-13 制御独立技法を採用するプロセッサ内で処理される命令について投機的予測を行うために使用される投機的履歴の回復

Country Status (6)

Country Link
US (1) US11698789B2 (ja)
EP (1) EP4226241A1 (ja)
JP (1) JP2023545134A (ja)
KR (1) KR20230084140A (ja)
CN (1) CN116324720A (ja)
WO (1) WO2022081221A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11768688B1 (en) * 2022-06-02 2023-09-26 Microsoft Technology Licensing, Llc Methods and circuitry for efficient management of local branch history registers

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5163140A (en) 1990-02-26 1992-11-10 Nexgen Microsystems Two-level branch prediction cache
KR100310581B1 (ko) * 1993-05-14 2001-12-17 피터 엔. 데트킨 분기목표버퍼의추측기록메카니즘
US5454117A (en) 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
US5864697A (en) * 1996-06-28 1999-01-26 Texas Instruments Incorporated Microprocessor using combined actual and speculative branch history prediction
US6502188B1 (en) * 1999-11-16 2002-12-31 Advanced Micro Devices, Inc. Dynamic classification of conditional branches in global history branch prediction
GB2393274B (en) 2002-09-20 2006-03-15 Advanced Risc Mach Ltd Data processing system having an external instruction set and an internal instruction set
US7363477B2 (en) 2003-12-03 2008-04-22 Intel Corporation Method and apparatus to reduce misprediction penalty by exploiting exact convergence
US20080209190A1 (en) 2007-02-28 2008-08-28 Advanced Micro Devices, Inc. Parallel prediction of multiple branches
WO2012037491A2 (en) 2010-09-17 2012-03-22 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
US9858081B2 (en) * 2013-08-12 2018-01-02 International Business Machines Corporation Global branch prediction using branch and fetch group history
US11061683B2 (en) 2019-06-13 2021-07-13 Microsoft Technology Licensing, Llc Limiting replay of load-based control independent (CI) instructions in speculative misprediction recovery in a processor

Also Published As

Publication number Publication date
US20220113976A1 (en) 2022-04-14
WO2022081221A1 (en) 2022-04-21
US11698789B2 (en) 2023-07-11
KR20230084140A (ko) 2023-06-12
EP4226241A1 (en) 2023-08-16
CN116324720A (zh) 2023-06-23

Similar Documents

Publication Publication Date Title
US7660971B2 (en) Method and system for dependency tracking and flush recovery for an out-of-order microprocessor
EP1296229A2 (en) Scoreboarding mechanism in a pipeline that includes replays and redirects
WO2006028555A2 (en) Processor with dependence mechanism to predict whether a load is dependent on older store
JP2001166935A (ja) プロセッサにおける分岐予測方法及びプロセッサ
CN114008587A (zh) 在处理器中的推测性错误预测恢复中限制基于负载的控制无关(ci)指令的重放
EP4241162A1 (en) Predicting load-based control independent (ci) register data independent (di) (cirdi) instructions as ci memory data dependent (dd) (cimdd) instructions for replay in speculative misprediction recovery in a processor
US11061677B1 (en) Recovering register mapping state of a flushed instruction employing a snapshot of another register mapping state and traversing reorder buffer (ROB) entries in a processor
US10877768B1 (en) Minimizing traversal of a processor reorder buffer (ROB) for register rename map table (RMT) state recovery for interrupted instruction recovery in a processor
JP2023545134A (ja) 制御独立技法を採用するプロセッサ内で処理される命令について投機的予測を行うために使用される投機的履歴の回復
US20160170770A1 (en) Providing early instruction execution in an out-of-order (ooo) processor, and related apparatuses, methods, and computer-readable media
US7900027B2 (en) Scalable link stack control method with full support for speculative operations
EP1296228A2 (en) Instruction Issue and retirement in processor having mismatched pipeline depths
US11995443B2 (en) Reuse of branch information queue entries for multiple instances of predicted control instructions in captured loops in a processor
US11983533B2 (en) Control flow prediction using pointers
US11481331B2 (en) Promoting prefetched data from a cache memory to registers in a processor
US11663014B2 (en) Speculatively executing instructions that follow a status updating instruction
US20220398100A1 (en) Processors employing memory data bypassing in memory data dependent instructions as a store data forwarding mechanism, and related methods
WO2024030706A1 (en) An apparatus employing wrap tracking for addressing data overflow
CN114761924A (zh) 基于对废弃寄存器编码指令的处理来废弃存储在处理器中的寄存器中的值