JP2023531216A - 命令再フェッチを減らすための、プロセッサにおけるハザードに応答した命令パイプライン・フラッシュ後のフェッチ、フラッシュされた命令の再利用 - Google Patents
命令再フェッチを減らすための、プロセッサにおけるハザードに応答した命令パイプライン・フラッシュ後のフェッチ、フラッシュされた命令の再利用 Download PDFInfo
- Publication number
- JP2023531216A JP2023531216A JP2022578982A JP2022578982A JP2023531216A JP 2023531216 A JP2023531216 A JP 2023531216A JP 2022578982 A JP2022578982 A JP 2022578982A JP 2022578982 A JP2022578982 A JP 2022578982A JP 2023531216 A JP2023531216 A JP 2023531216A
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- fetch
- refill
- pdi
- pipeline
- 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
Links
- 230000004044 response Effects 0.000 title claims abstract description 76
- 238000012545 processing Methods 0.000 claims abstract description 107
- 238000000034 method Methods 0.000 claims abstract description 40
- 238000011010 flushing procedure Methods 0.000 claims abstract description 10
- 230000000593 degrading effect Effects 0.000 claims abstract description 6
- 238000001514 detection method Methods 0.000 claims description 68
- 230000008569 process Effects 0.000 abstract description 23
- 238000010586 diagram Methods 0.000 description 8
- 230000001419 dependent effect Effects 0.000 description 7
- 230000006399 behavior Effects 0.000 description 6
- 238000013507 mapping Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000004590 computer program Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000003247 decreasing effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000000116 mitigating effect Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000002245 particle Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013479 data entry Methods 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
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
命令再フェッチを減らすために、プロセッサ内のハザードに応答した命令パイプライン・フラッシュの後に、フェッチされフラッシュされた命令を再利用することが開示される。命令処理回路は、命令パイプラインのフラッシングを引き起こすであろう精密割り込みを引き起こす可能性のある命令パイプライン内の予備実行段において、フェッチされた性能劣化命令(PDI)を検出するように構成される。命令パイプライン内のPDIを検出することに応答して、命令処理回路は、フェッチされたPDIおよび/またはPDIの背後の命令パイプライン内で処理される、その後続の、より若いフェッチされた命令を、パイプライン再充填回路において捕捉するように構成される。命令パイプラインにおけるPDIの後の実行が命令パイプラインのフラッシュを引き起こす場合、命令処理回路は、以前にパイプライン再充填回路から捕捉された、フェッチされたPDIおよび/またはその、より若い命令を、そのような命令が再フェッチされることなく処理されるよう、命令パイプラインに注入することができる。
Description
本開示の技術は、コンピュータ・プロセッサ(「プロセッサ」)、より詳細には、プロセッサにおいて実行されるコンピュータ・プログラム命令のフェッチに関する。
「プロセッサ」としても知られるマイクロプロセッサは、幅広い多様な用途のための計算タスクを実行する。従来のマイクロプロセッサは、「CPUコア」としても知られる一つまたは複数のプロセッサ・コアを含む中央処理装置(CUP)を含む。CPUは、「ソフトウェア命令」としても知られるコンピュータ・プログラム命令(「命令」)を実行して、データに基づいて動作を実行し、生成された値である結果を生成する。プロセッサ内の各命令の処理は、命令パイプライン化として知られる一連の異なるステージまたはステップに分割される。これは、各命令が順次に、次の命令を処理する前に完全に処理されるのとは異なり、複数の命令が異なるステージにおいて同時に処理されることを許容し、命令処理スループットを増加させる。命令パイプライン化ステップは、プロセッサ内の一つまたは複数の命令パイプライン内で実行され、それぞれは複数のプロセス・ステージから構成される。
命令パイプライン内のすべてのパイプライン・ステージがその命令パイプライン内で同時に命令を処理することができる場合、最適なプロセッサ性能が達成できる。しかしながら、命令パイプラインにおいて、正しくない計算結果につながることなく命令を実行することができないハザードが発生する可能性がある。命令パイプラインをフラッシュさせるハザードの一例は、構造的ハザードである。構造的ハザードの例は、満杯であることがありうるロード待ち行列にエントリーをロードすることに失敗するロード命令である。ロード命令が実行できない場合、命令パイプラインにデッドロックが発生する可能性がある。命令パイプラインをフラッシュさせうるハザードの別の例は、プロセッサ内で精密割り込みを引き起こす制御フロー命令の実行から生じる制御ハザードである。制御ハザードを引き起こしうる制御フロー命令の一例は、条件付き分岐命令である。条件付き分岐命令は、命令フローが分岐するか分岐しないかを決定するための命令パイプラインにおける後の実行ステージにおける完全には評価されていない述語条件を含む。条件付き分岐命令が実行される前に後続命令、すなわち条件付き分岐命令の背後にあるより若い命令を命令パイプラインにフェッチすることを停止させる必要がないように、条件付き分岐命令の分岐目標アドレスを投機的に予測する制御フロー予測回路がプロセッサ内に設けられることができる。次いで、プロセッサは、分岐目標アドレスの予測に基づいて、条件付き分岐命令のフェッチに続いて、命令パイプラインの諸フェッチ・ステージにおけるその後の命令を投機的にフェッチすることができる。
実際に解決された分岐目標アドレスが、実行において、予測された分岐アドレスと一致するようと判別される場合、その命令パイプラインでは停止は発生しない。これは、条件付き分岐命令が命令パイプラインのその実行ステージに到達するとき、予測された分岐目標アドレスで始まるその後の命令が、正しくフェッチされており、すでに命令パイプラインに存在するからである。しかしながら、予測された分岐目標アドレスと解決された分岐目標アドレスが一致しない場合、精密割り込みを引き起こすその命令パイプラインにおける誤予測された分岐ハザードが発生する。結果として、命令パイプラインは、命令パイプラインのさまざまなステージにおける、既存の、以前にフェッチされた命令をフラッシュされる。命令パイプラインのフェッチ・ステージは、正しい解決された分岐目標から始まる新しい命令をフェッチするように命令される。よって、命令パイプラインの諸ステージは、新たにフェッチされた命令が命令パイプラインを進んで処理および実行されるまで休止したままであり、それにより命令スループット性能が低下する。
分岐命令を超えて命令を処理するときに遭遇する可能性がある、構造的ハザードを引き起こし、よって命令パイプラインのフラッシュを引き起こす可能性がある他の状況もある。例は、デッドロックや、待ち行列内の利用可能なスペースなどの資源の欠乏のために実行できない命令を含む。
本明細書に開示される例示的側面は、命令の再フェッチを減少させるために、プロセッサ内のハザードに応答した命令パイプライン・フラッシュの後に、フェッチされたフラッシュされた命令を再利用することを含む。プロセッサは、命令パイプライン化の一部として実行ステージにおいて処理され実行されるよう、命令パイプラインに命令をフェッチするように構成された命令処理回路を含む。命令処理回路内の実行回路は、命令を実行する際に、ハザード(たとえば、構造的または制御フロー・ハザード)に遭遇することに応答して、精密割り込みを生成するように構成される。たとえば、精密割り込みは、誤った命令フロー経路からの条件付き分岐命令に対する後続の制御依存命令が、命令パイプライン内にすでにフェッチされている誤予測された条件分岐命令の結果として生成されてもよい。精密割り込みに応答して、命令処理回路は、ハザードを克服するために、命令パイプラインにおける、精密割り込みを引き起こした命令およびその後続のより若い命令をフラッシュするように構成される。これにより、命令パイプラインにおける命令スループットが低下する。これらのすでにフェッチされた命令が、再フェッチされる必要なく、フラッシング後に命令パイプライン化において再利用できる場合、これらのすでにフェッチされた命令は、これらの命令を再フェッチする必要なしに命令パイプライン内に注入され、よって、フラッシングからの減少した命令を緩和することが可能である。
この点に関し、本明細書に開示される例示的な側面において、プロセッサ内の命令処理回路は、命令パイプラインのフラッシングを引き起こすであろう精密割り込みを引き起こしうる、命令パイプライン内の実行前ステージにおける、フェッチされた命令を検出するように構成される。これらの命令は、性能劣化命令(performance degrading instruction、PDI)と呼ばれることがある。たとえば、命令処理回路は、命令パイプラインのデコード・ステージでデコードされた後にPDIを検出するように構成されてもよい。命令パイプライン内のPDIを検出することに応答して、命令処理回路は、パイプライン・フェッチ再充填回路において、フェッチされたPDI(すでに存在しているのでなければ)と、命令パイプライン内でPDIの背後で処理される後続の、より若いフェッチされた命令とを捕捉するように構成される。よって、命令パイプラインにおけるPDIの実行が命令パイプラインのフラッシュ(フラッシュ・イベント)を引き起こす精密割り込みを生じさせる場合、命令処理回路は、検出された命令(すなわち、PDIおよび/または後続命令)がパイプライン・フェッチ再充填回路内に、前に捕捉されたものとして存在するかどうかを判定することができる。検出された命令がパイプライン・フェッチ再充填回路に存在する場合、命令処理回路は、以前にパイプライン・フェッチ再充填回路に捕捉された、検出された命令および後続の、より若い命令を、そのような命令を再フェッチする必要なく、処理されるべく命令パイプラインに注入することができる。このように、命令パイプラインの命令スループットにおいて、これらの命令を再フェッチすることに関連するレイテンシーは発生しない。命令処理回路は、命令パイプライン内のフェッチ・ステージに「フォールスルー(fall-through)」プログラム・カウンタ(PC)を設けて、パイプライン・フェッチ再充填回路から注入されることができないので、フラッシュ・イベントに応答してフェッチされる必要がある命令をどこで再フェッチし始めるかを知ることができる。フォールスルーPCは、パイプライン・フェッチ再充填回路における最後に捕捉された、より若い命令に続く次の命令のPCである。命令処理回路は、捕捉されたPDIに関連するパイプライン・フェッチ再充填回路内のフォールスルーPCを捕捉するように構成されることができる。
他の例示的側面では、命令パイプライン回路はまた、可変命令フロー経路を有するPDIのための命令処理回路内の命令フロー経路情報を捕捉するように構成されることもできる。たとえば、条件付き分岐命令または間接分岐命令の後に取られる命令フロー経路は、そのような命令の分岐挙動の解決に基づいて変化する。このようにして、捕捉されたPDIからの、捕捉された後続の、より若い命令の特定の命令フロー経路が知られる。フラッシュ・イベントに応答する、パイプライン・フェッチ再充填回路におけるPDIの存在の検出および決定に応答して、命令処理回路は、PDIからの捕捉された、より若い制御依存命令が、正しい命令フロー経路からのものとして命令パイプライン内に注入されるべきかどうかを決定することもできる。捕捉された、より若い制御依存命令が、PDIからの正しい解決された命令フロー経路からのものである場合、より若い制御依存命令は、再フェッチされる必要なく、PDIの正しい命令フロー経路からのものであることが知られているものとして、命令パイプラインに注入されることができる。捕捉された、より若い制御依存命令がPDIからの正しい命令フロー経路からのものではないと判断される場合、より若い制御依存命令は無視され、再フェッチされることができる。命令フロー経路情報は、PDIに対して制御独立である、より若い命令については記録される必要がない。制御独立命令はPDIからの解決された命令フロー経路に依存しないからである。
これに関して、ある例示的側面では、プロセッサが提供される。プロセッサは、命令処理回路を有する。命令処理回路は、複数の命令を、複数のフェッチされた命令として、プログラム・コードから、実行されるべく命令パイプラインにフェッチするように構成された命令フェッチ回路を含む。命令処理回路はまた、命令フェッチ回路に結合された実行回路をも有しており、実行回路は、命令パイプラインにおける前記複数のフェッチされた命令のうちのあるフェッチされた命令を実行し、ハザードを生成するPDIを含む前記複数の命令のうちのフェッチされた命令の実行に応答して、命令パイプラインをフラッシュするためのパイプライン・フラッシュ・イベントを生成するように構成される。プロセッサはまた、命令パイプラインに結合された命令フェッチ再利用回路を有する。命令フェッチ再利用回路は、パイプライン・フラッシュ・イベントに応答して、フェッチされた命令のソース識別情報がフェッチ再充填エントリーにおける再充填タグにおけるソース識別情報に、パイプライン・フェッチ再充填回路の複数のフェッチ再充填エントリーのうちのマッチするフェッチ再充填エントリーとして、マッチするかどうかを判定する。フェッチされた命令のソース識別情報がフェッチ再充填エントリーにおける再充填タグにおけるソース識別情報とマッチすることに応答して、命令フェッチ再利用回路は、マッチするフェッチ再充填エントリーにおける一つまたは複数の捕捉された命令を、処理されるよう、命令フェッチ回路の後で、命令パイプラインに挿入するように構成される。
別の例示的側面では、プロセッサにおける命令パイプラインにおけるフェッチされフラッシュされた命令を再利用する方法が提供される。この方法は、複数の命令を複数のフェッチされた命令として、プログラム・コードから、実行されるよう命令パイプラインにフェッチすることを含む。この方法はまた、命令パイプラインにおける前記複数のフェッチされた命令のうちのあるフェッチされた命令を実行することを含む。この方法はまた、PDIとしてハザードを生成する、前記複数の命令のうちのあるフェッチされた命令の実行に応答して、命令パイプラインをフラッシュするためのパイプライン・フラッシュ・イベントを生成することを含む。パイプライン・フラッシュ・イベントに応答して、この方法はまた、検出された命令のソース識別情報が、パイプライン・フェッチ再充填回路の複数のフェッチ再充填エントリーのうちのマッチするフェッチ再充填エントリーとして、フェッチ再充填エントリーにおける再充填タグにおけるソース識別情報とマッチするかどうかを決定することを含む。検出された命令のソース識別情報がフェッチ再充填エントリーにおける再充填タグにおけるソース識別情報にマッチすることに応答して、この方法はまた、マッチするフェッチ再充填エントリーにおける一つまたは複数の捕捉された命令を、実行されるべきフェッチされた命令として命令パイプライン内に挿入することを含む。
当業者は、添付の図面に関連する好ましい実施形態の以下の詳細な説明を読んだ後では、本開示の範囲を理解し、本開示の追加的な諸側面を認識するであろう。
本明細書に組み込まれ、本明細書の一部をなす添付の図面は、本開示のいくつかの側面を例解し、本稿とともに、本開示の原理を説明するのに役立つ。
本明細書に開示される例示的側面は、命令の再フェッチを減少させるために、プロセッサにおけるハザードに応答した命令パイプライン・フラッシュの後に、フェッチされたフラッシュされた命令を再利用することを含む。プロセッサは、命令パイプライン化の一部として実行ステージにおいて処理され実行されるよう、命令パイプラインに命令をフェッチするように構成された命令処理回路を含む。命令処理回路内の実行回路は、命令を実行する際に、ハザード(たとえば、構造的または制御フロー・ハザード)に遭遇することに応答して、精密割り込みを生成するように構成される。たとえば、精密割り込みは、誤った命令フロー経路からの条件付き分岐命令に対する後続の制御依存命令が、命令パイプライン内にすでにフェッチされている誤予測された条件分岐命令の結果として生成されたものであってもよい。精密割り込みに応答して、命令処理回路は、ハザードを克服するために、命令パイプラインにおける、精密割り込みを引き起こした命令およびその後続のより若い命令をフラッシュするように構成される。これにより、命令パイプラインにおける命令スループットが低下する。これらのすでにフェッチされた命令が、再フェッチされる必要なく、フラッシング後に命令パイプライン化において再利用できる場合、これらのすでにフェッチされた命令は、これらの命令を再フェッチする必要なしに命令パイプライン内に注入され、よって、フラッシングからの減少した命令を緩和することが可能である。
この点に関し、本明細書に開示される例示的な側面において、プロセッサ内の命令処理回路は、命令パイプラインのフラッシングを引き起こすであろう精密割り込みを引き起こしうる、命令パイプライン内の実行前ステージにおける、フェッチされた命令を検出するように構成される。これらの命令は、性能劣化命令(performance degrading instruction、PDI)と呼ばれることがある。たとえば、命令処理回路は、命令パイプラインのデコード・ステージでデコードされた後にPDIを検出するように構成されてもよい。命令パイプライン内のPDIを検出することに応答して、命令処理回路は、パイプライン・フェッチ再充填回路において、フェッチされたPDI(すでに存在しているのでなければ)と、命令パイプライン内でPDIの背後で処理される後続の、より若いフェッチされた命令とを捕捉するように構成される。よって、命令パイプラインにおけるPDIの実行が命令パイプラインのフラッシュ(フラッシュ・イベント)を引き起こす精密割り込みを生じさせる場合、命令処理回路は、検出された命令(すなわち、PDIおよび/または後続命令)がパイプライン・フェッチ再充填回路内に、前に捕捉されたものとして存在するかどうかを判定することができる。検出された命令がパイプライン・フェッチ再充填回路に存在する場合、命令処理回路は、以前にパイプライン・フェッチ再充填回路に捕捉された、検出された命令および後続の、より若い命令を、そのような命令を再フェッチする必要なく、処理されるべく命令パイプラインに注入することができる。このように、命令パイプラインの命令スループットにおいて、これらの命令を再フェッチすることに関連するレイテンシーは発生しない。命令処理回路は、命令パイプライン内のフェッチ・ステージに「フォールスルー(fall-through)」プログラム・カウンタ(PC)を設けて、パイプライン・フェッチ再充填回路から注入されることができないので、フラッシュ・イベントに応答してフェッチされる必要がある命令をどこで再フェッチし始めるかを知ることができる。フォールスルーPCは、パイプライン・フェッチ再充填回路における最後に捕捉された、より若い命令に続く次の命令のPCである。命令処理回路は、捕捉されたPDIに関連するパイプライン・フェッチ再充填回路内のフォールスルーPCを捕捉するように構成されることができる。
この点に関して、図1は、プロセッサ102を含む例示的なプロセッサ・ベースのシステム100の概略図である。以下でより詳細に論じられるように、プロセッサ102は、命令の再フェッチを減少させるために、命令パイプラインにおいてフェッチされて存在していて、その後、遭遇したハザードに応答してフラッシュされた、フェッチされた命令を再利用するように構成される。遭遇したハザードに応答して発生するパイプライン・フラッシュに応答した、フェッチされた命令の再利用を論じる前に、まず、プロセッサ102の他の構成要素を以下で論じる。
図1を参照すると、プロセッサ102は、実行のためにコンピュータ命令を処理するための一つまたは複数の命令パイプラインI0~INを含む命令処理回路104を含む。プロセッサ102は、図1に示される順序外プロセッサ(out-of-order processor、OoP)であるが、順序内プロセッサでもよい。命令処理回路104は、命令メモリ110から命令108をフェッチするように構成された命令フェッチ回路106を含む。命令メモリ110は、一例として、プロセッサ・ベースのシステム100内のシステム・メモリにおいて、またはその一部として提供されてもよい。命令フェッチ回路106内のタイミング遅延を低減するために、命令メモリ110からフェッチされた命令108をキャッシュするために、命令キャッシュ112がプロセッサ102内に設けられてもよい。この例における命令フェッチ回路106は、命令108をフェッチされた命令108Fとして、前処理されるべき命令処理回路104内の命令ストリーム114として、前記一つまたは複数の命令パイプラインI0~INに提供するように構成される。その後に、フェッチされた命令108Fが実行される命令108Eとして実行されるべく実行回路116に到達する。命令パイプラインI0~INは、命令処理回路104の異なる処理回路またはステージを横切って提供され、実行回路116によるフェッチされた命令108Fの実行前に、フェッチされた命令112Fを、スループットを増加させるために同時並行して実行できる一連のステップにおいて前処理および処理する。
制御フロー予測回路118(たとえば、制御フロー予測回路)も、図1のプロセッサ102における命令処理回路104に設けられ、命令パイプラインI0~INにおいて処理される命令ストリーム114の命令制御フロー経路に影響を与える、条件付き分岐命令のような、フェッチされた条件付き制御命令108Fの述語の結果を推測または予測する。制御フロー予測回路118の予測は、予測された分岐目標アドレスに基づいて、フェッチするべき次のフェッチされる命令108Fを決定するために、命令フェッチ回路106によって使用されることができる。命令処理回路104はまた、要求される命令タイプおよびアクションを決定するために、命令フェッチ回路106によってフェッチされた、フェッチされた命令108Fをデコードされた命令108Dにデコードするように構成された命令デコード回路120を含む。デコードされた命令108Dにおいてエンコードされている要求される命令タイプおよびアクションはまた、デコードされた命令108Dがどの命令パイプラインI0~INに入れられるべきかを決定するために使用されてもよい。
この例では、デコードされた諸命令108Dは、命令パイプラインI0~INのうちの一つまたは複数に入れられ、次に、命令処理回路104内のリネーム回路122に提供される。リネーム回路122は、並列または順序外れの処理を妨げるレジスタ依存性があればそれを破壊するために、デコードされた命令108Dにおける何らかのレジスタ名がリネームされる必要があるかどうかを判断するように構成される。リネーム回路122は、リネーム・アクセス・テーブル回路124を呼び出して、論理ソース・レジスタ・オペランドをリネームし、および/またはデコードされた命令108Dの宛先レジスタ・オペランドを、物理レジスタ・ファイル(PRF)126内の利用可能な物理レジスタP0、P1、…、PXに書き込むように構成される。リネーム・アクセス・テーブル回路124は、それぞれがそれぞれの論理レジスタR0~RPにマップされた(すなわち関連付けられた)複数のレジスタ・マッピング・エントリー128(0)~128(P)を含む。レジスタ・マッピング・エントリー128(0)~128(P)は、それぞれ、PRF 126内の物理レジスタP0~PXを指す論理レジスタR0~RPに対応するそれぞれのマッピング情報を格納するように構成される。各物理レジスタP0~PXは、デコードされた命令108Dのソースおよび/または宛先レジスタ・オペランドのためのデータ・エントリー130(0)~130(X)を格納するように構成される。
図1のプロセッサ102内の命令処理回路104はまた、発行回路134の前に、命令パイプラインI0~IN内に位置するレジスタ・アクセス回路132を含む。レジスタ・アクセス回路132は、リネーム・アクセス・テーブル回路124内の論理レジスタR0~RPにマップされたレジスタ・マッピング・エントリー128(0)~128(P)に基づいて、PRF 126内の物理レジスタP0~PXにアクセスし、実行回路116内で実行されるデコードされた命令108Dの指名されたソース・レジスタ・オペランドの入力値として使用するように構成される。発行回路134は、デコードされた命令108Dを、それらのそれぞれのソース・レジスタ・オペランドすべてが実行時の消費のために利用可能になるまで、命令パイプラインI0~INにおける予約エントリーに格納するように構成される。発行回路134は、実行される準備ができたデコードされた命令108Dを実行回路116に対して発行する。命令処理回路104にはコミット回路136も設けられ、デコードされた命令108Dの実行によって生成された、生成された値を、PRF 126、キャッシュメモリ、またはシステム・メモリなどのメモリにコミットまたはライトバックする。
図1のプロセッサ102における命令処理回路104における実行回路116は、デコードされた命令108Dを実行する際に、ハザード(たとえば、構造的または制御フロー・ハザード)に遭遇することに応答して、精密割り込みを生成するように構成される。実行されたときにプロセッサ102においてハザードを引き起こす、または引き起こす可能性が高いと判断される命令108Dは、ここでは「性能劣化命令(performance degrading instruction、PDI)」と呼ばれる。実行回路116がPDI 108Dを実行することから前記ハザードに遭遇する時までには、後続の、より若い命令108Dがすでに、命令パイプラインI0~INにフェッチされており、可能性としては、処理されるようにデコードされている。精密割り込みに応答して、命令処理回路104は、フラッシュ・イベント138を生成して、精密割り込みを生じさせた命令108Dと、命令パイプラインI0~IN内にすでにフェッチされている、その後続のより若い命令108Dとをフラッシュさせ、再実行させて前記ハザードを克服するように構成される。PDI 108Dおよびそのより若い後続命令108Dの再フェッチは、命令処理回路104におけるスループットを望ましくない仕方で低下させる。
命令処理回路104によってフラッシュされた、フラッシュされた命令108Dを再フェッチする必要性を回避するために、図1の例における命令処理回路104は、PDI検出回路140および命令フェッチ再利用回路142を含む。PDI検出回路140および命令フェッチ再利用回路142は、命令処理回路104の一部として、または命令処理回路104の外部に含まれることができる。PDI検出回路140および命令フェッチ再利用回路142は、両方とも命令パイプラインI0~INに結合される。以下でより詳細に論じるように、PDI検出回路140は、処理され実行されるよう命令パイプラインI0~INにフェッチされた、フェッチされた命令108DのうちでPDIを検出するように構成される。たとえば、PDI検出回路140は、命令デコード回路120においてデコードされた後にPDI 108Dを検出するように構成されてもよい。PDI検出回路140が、命令パイプラインI0~IN内のPDI 108Dを検出することに応答して、PDI検出回路140は、検出された命令をパイプライン・フェッチ再充填回路144中に捕捉するように構成され、この命令は、検出されたPDI 108Dおよび/または、その後続の、より若いフェッチされた命令108Dであって、PDI 108Dの後ろで命令パイプラインI0~INにおいて処理されるものであってもよい。パイプライン・フェッチ再充填回路144は、複数のフェッチ再充填エントリー146(0)~146(R)を含むテーブル回路であってもよく、各エントリーは、検出されたPDI 108Dおよび後続の、より若いフェッチされた命令108Dに関する情報を格納するように構成される。このように、後に、フラッシュ・イベント138に応答して、命令フェッチ再利用回路142は、検出された命令(すなわち、その実行がフラッシュ・イベント138を引き起こしたPDI 108Dおよび/またはそのより若い後続命令108D)が、前にパイプライン・フェッチ再充填回路144内のフェッチ再充填エントリー146(0)~146(R)において捕捉されているかどうかを判断することができる。検出された命令108Dが、パイプライン・フェッチ再充填回路144内のフェッチ再充填エントリー146(0)~146(R)内に存在する場合、命令フェッチ再利用回路142は、先に捕捉されたPDI 108Dおよび/またはそのより若い、後続のフェッチされた命令108Dを、パイプライン・フェッチ再充填回路144から、処理されるよう、命令パイプラインI0~INに注入することができ、そのようなデコードされた命令108Dを再フェッチする必要はない。
このように、これらの以前にフェッチされた命令108Dを再フェッチすることに関連するレイテンシーは、命令処理回路104の命令スループットにおいて発生しない。命令フェッチ再利用回路142は、命令フェッチ回路106がフラッシュ・イベント138に応答して命令108のフェッチを開始する位置を知るように、命令フェッチ回路106に「フォールスルー」プログラム・カウンタ(PC)148を提供することができる。フォールスルーPC 148は、パイプライン・フェッチ再充填回路144における、その実行がフラッシュ・イベント138を引き起こしたPDI 108Dについての、最後の、前に捕捉された後続のより若い命令108Dに続く次の命令108DのPCである。以下でさらに詳細に説明するように、PDI検出回路140はまた、命令パイプラインI0~INにおける検出されたフェッチされたPDI 108Dおよびそのより若い、後続のフェッチされた命令108Dを捕捉するために割り当てられたフェッチ再充填エントリー146(0)~146(R)において、前記フォールスルーPC 148を記録するようにも構成される。このようにして、命令フェッチ回路106は、命令フェッチ再利用回路142によって命令パイプラインI0~INに注入されない新しい命令108Dを、フェッチし始めることができる。
図2Aは、命令パイプラインI0~IN内のフェッチされたPDI 108Dおよびフェッチされた、より若い命令108Dを検出して、図1のパイプライン・フェッチ再充填回路144内に捕捉する、図1の命令処理回路104の例示的なプロセス200を示すフローチャートである。これは、後に、フラッシュ・イベント138に応答して、捕捉されたフェッチされたPDI 108Dおよびそのフェッチされたより若い命令108Dが再利用され、命令フェッチ再利用回路142によって、再フェッチされる必要なく、命令パイプライン(I0~IN)内に注入されることができるようにするものである。図2Aのプロセス200は、図1のプロセッサ102との関連で後述される。
この点に関し、プロセス200は、複数の命令108を、複数のフェッチされた命令108Fとして、プログラム・コードから、実行されるよう、命令パイプラインI0~INにフェッチすることを含む(図2Aのブロック202)。プロセス200はまた、PDI検出回路140が、命令パイプラインI0~IN内のフェッチされた命令108DがPDI 108Dであるかどうかを検出することを含む(図2Aのブロック204)。PDI検出回路140が、命令パイプラインI0~IN内のフェッチされた命令108DがPDI 108Dであるかどうかを検出できる多くの仕方があり、その例を以下に詳細に説明する。次いで、PDI検出回路140は、任意的に、検出された命令108Dがパイプライン・フェッチ再充填回路144において以前に捕捉されていたかどうかを決定し、それにより、PDI 108Dおよびそのより若い、後続のフェッチされた命令108Dが前にすでに捕捉されているかどうかが決定できる。
一例では、PDI 108Dもフラッシュ・イベント138に応答してフラッシュされ、よって、再フェッチされる必要がある命令のタイプである場合は、命令処理回路104は、検出されたPDI 108Dに応答して、フェッチされたPDI 108D自体をパイプライン・フェッチ再充填回路144に捕捉するように構成される。これは、この捕捉されたフェッチされたPDI 108が、PDI 108を再フェッチする必要なく、フラッシュ・イベント138に応答するなどして、再フェッチされたPDI 108として、命令フェッチ再利用回路142によって後に再利用できるようにするためである。よってフラッシュ・イベント138に応答してフラッシュされ、再実行のために再フェッチされるPDI 108の例は、デッドロックに遭遇したメモリ・ロード命令である。別の例では、PDI 108Dがフラッシュ・イベント138に応答してフラッシュされず、よって再フェッチされる必要がある命令のタイプである場合には、命令処理回路104は、検出されたPDI 108Dに応答して、パイプライン・フェッチ再充填回路144において、フェッチされたPDI 108Dを捕捉するように構成されない。これは、捕捉されたフェッチされたPDIが再実行する必要がないためである。フラッシュ・イベント138に応答してフラッシュされず、よって再実行のために再フェッチされないPDI 108の例は、誤予測された条件付き分岐命令である。
図2Aに戻って参照すると、この例では、PDI検出回路140が、検出された命令としてフェッチされた命令108D(これは、PDI 108Dおよび/または該PDIのより若い後続命令108Dでありうる)を検出すること(図2Aのブロック204)に応答して、PDI検出回路140は、検出された命令108Dのソース識別情報150(たとえば、ソース・アドレス、プログラム・カウンタ(PC))が、パイプライン・フェッチ再充填回路144におけるフェッチ再充填エントリー146(0)~146(R)における再充填タグ152(0)~152(R)内のソース識別情報(たとえば、ソース・アドレス、PC)と一致するかどうかを判断する(図2Aのブロック206)。これは、検出された命令108Dが、PDI検出回路140によってパイプライン・フェッチ再充填回路144内にすでに前に捕捉されているかどうかを判断するためである。検出された命令108Dのソース識別情報150がフェッチ再充填エントリー146(0)~146(R)における再充填タグ152(0)~152(R)におけるソース識別情報とマッチしないこと(図2Aのブロック208)に応答して、PDI検出回路140は、パイプライン・フェッチ再充填回路144における前記複数のフェッチ再充填エントリー146(0)~146(R)のうちの利用可能な再充填エントリー146(0)~146(R)を、後の利用のために、検出された命令108Dに続く一つまたは複数の後続の、より若い命令108を捕捉するために割り当てる(図2Aのブロック210)。上述のように、検出された命令108Dが、フラッシュ・イベント138に応答して再フェッチされる命令である場合、PDI検出回路140は、利用可能なフェッチ再充填エントリー146(0)~146(R)において検出されたPDI 108Dも捕捉する。次いで、PDI検出回路140は、検出された命令108D(これは、検出されたPDI 108Dおよび/またはそのより若い後継命令である)のソース識別情報150を、利用可能なフェッチ再充填エントリー146(0)~146(R)の再充填タグ152(0)~152(R)に格納する(図2Aのブロック212)。次いで、PDI検出回路140は、命令パイプラインI0~IN内の検出された命令108Dに続く、一つまたは複数の後続の、より若いフェッチ命令108Dを、パイプライン・フェッチ再充填回路144における割り当てられたフェッチ再充填エントリー146(0)~146(R)において捕捉する(図2Aのブロック214)。次いで、検出された命令108Dおよびその後続の、より若いフェッチされた命令108Dが実行回路116において処理され、実行される(図2Aのブロック216)。
図2Bは、フラッシュ・イベント138に応答して、PDI検出回路140によってパイプライン・フェッチ再充填回路144内に以前に捕捉されたPDI 108Dおよび/またはフェッチされた、後続のより若い命令108Dであってもよいフェッチされた命令を、命令パイプラインI0~IN中に再利用する、図1の命令フェッチ再利用回路142の例示的なプロセス220を示すフローチャートである。上述したように、その実行がフラッシュ・イベント138を引き起こしたPDI 108Dが以前に捕捉されていた場合、捕捉され、フェッチされたPDI 108Dおよび/またはフェッチされた、後続のより若い命令108Dが、パイプライン・フェッチ再充填回路144から得られ、命令パイプラインI0~INに注入されることができる。これは、これらの命令108Dを命令パイプラインI0~INに再度フェッチする必要を回避する。図2Bのプロセス220は、図1のプロセッサ102との関連で後述される。
この点に関し、プロセス220は、プロセッサ102が、PDI 108Dとしての、ハザードを生成する前記複数の命令108Dのうちのある命令108Dの実行に応答して、命令パイプラインI0~INをフラッシュするパイプライン・フラッシュ・イベント138を生成することを含む(図2Bのブロック222)。パイプライン・フラッシュ・イベント138(図2Bのブロック224)に応答して、命令フェッチ再利用回路142は、フェッチされた命令のソース識別情報150が、パイプライン・フェッチ再充填回路144のマッチするフェッチ再充填エントリー146(0)~146(R)として、フェッチ再充填エントリー146(0)~146(R)における再充填タグ152(0)~152(R)におけるソース識別情報と一致するかどうかを判断する(図2Bのブロック226)。フェッチされた命令108Dのソース識別情報150がマッチするフェッチ再充填エントリー146(0)~146(R)の再充填タグ152(0)~152(R)におけるソース識別情報にマッチすることに応答して、フェッチされた命令108Dのソース識別情報150がマッチするフェッチ再充填エントリー146(0)~146(R)の再充填タグ152(0)~152(R)におけるソース識別情報にマッチすることに応答して、命令フェッチ再利用回路142は、マッチするフェッチ再充填エントリー146(0)~146(R)における一つまたは複数の捕捉されたフェッチされた命令108Dを、実行されるべきフェッチされた命令108Dとして、命令パイプラインI0~INに挿入する(図2Bのブロック228)。次いで、プロセス220は、命令パイプラインI0~INに注入された再利用されたフェッチされた命令108Dを実行することを含む(図2Bのブロック230)。
処理されるべきPDIおよびそのより若い命令を再フェッチする必要を回避するために、捕捉されたPDIの実行によって生じるパイプライン・フラッシュに応答した、命令パイプラインにおける捕捉され、検出された命令の再利用をサポートするために、命令処理回路104に設けられることのできる異なるオプションおよび特徴がある。この点に関し、図3は、図1の命令処理回路104と類似の命令処理回路304を有するプロセッサ302を含む別の例示的なプロセッサ・ベースのシステム300の図である。図1の命令処理回路104と図3の命令処理回路304との間の共通の回路および構成要素は、共通の要素番号で示されており、再説明されていない。
図3に示されるように、命令処理回路304は、図1のPDI検出回路140に類似したPDI検出回路340を含む。図3の命令処理回路304は、図1の命令フェッチ再利用回路142に類似した命令フェッチ再利用回路342を含む。PDI検出回路340は、フェッチされた命令108Dのうち、処理および実行されるよう命令パイプラインI0~INにフェッチされたPDI 108Dを検出するように構成されている。たとえば、PDI検出回路340は、命令デコード回路120内でデコードされた後、PDI 108Dを検出するように構成されてもよい。図3の例におけるPDI検出回路340は、PDI検出回路340がデコードされたPDI 108Dを検出するためにデコードされた命令108Dに関するデコードされた情報を受領することができるように、命令パイプラインI0~INの順序通りのステージ(an in-order stage)において、命令デコード回路120とリネーム回路122との間で命令パイプラインI0~INに結合される。この例におけるPDI検出回路340は、命令パイプラインI0~INの順序どおりのステージにおいて、デコードされた命令108Dを受領するように構成され、それにより、デコードされた命令108DがPDI 108Dとして検出される場合、PDI検出回路340は、命令ストリーム114がそこからフェッチされたプログラム・コード内の検出されたPDI 108Dに続くことが知られている命令パイプラインI0~IN内の後続のデコードされた命令108Dを捕捉するように構成されることができる。
PDI検出回路340が、フェッチされた命令108Fまたはデコードされた命令108DがPDIであるかどうかを検出することができる異なる仕方がある。一例では、デコードされた命令108Dが、条件付き分岐命令、間接分岐命令、または条件付き間接分岐命令のような実行時に解決される分岐挙動を有する分岐命令である場合、PDI検出回路340は、制御フロー予測回路118によって更新される分岐予測器信頼度354を使用するように構成されることができる。分岐予測器信頼度354は、分岐命令の分岐挙動が正確に予測されることができる信頼度の指標である。制御フロー予測回路118は、分岐命令108Dの分岐挙動を予測し、分岐命令108Dが過去において以前に実行されたときに予測された分岐挙動が実行回路116によって決定された分岐挙動の解決に一致するかどうかに基づいて、分岐予測器信頼度354を更新するように構成されてもよい。このように、PDI検出回路340は、分岐命令108DがPDIであるかどうかを予測または判断するために分岐予測器信頼度354を使用することができる。低い分岐予測器信頼度354を有する分岐命令108Dは、誤予測される可能性がより高く、よって、フラッシュ・イベント138を発生させる実行回路116において実行されると、ハザードを引き起こす可能性がより高い。
PDI検出回路340はまた、ロード命令などのメモリ動作命令108DがPDIであるかどうかを判断するように構成されることもできる。メモリ動作命令108Dは、直接メモリ・アドレスまたは間接メモリ・アドレスであってもよい、指定されたメモリ・アドレスでメモリ動作を実行することを含む。実行回路116は、メモリ動作命令108Dが実行されてハザードが発生し、フラッシュ・イベント138が発生したときに、メモリ動作命令108Dに対応するPDIインジケータを格納するように構成されることができる。実行回路116は、複数のPDIインジケータ・エントリー360(0)~360(I)を含むPDIインジケータ回路358内にPDIインジケータを記憶するように構成されてもよい。PDIインジケータ・エントリーには、PDIインジケータがメモリ動作命令に対応して記憶されることができる。PDI検出回路340が、PDIであるかどうかを判断するためにメモリ動作命令108Dを受領すると、PDI検出回路340は、PDIインジケータ回路358を参照して、そのメモリ動作命令108Dについて、PDIインジケータ・エントリー360(0)~360(I)にPDIインジケータが存在するかどうかを判断することができる。PDI検出回路340は、PDIインジケータを使用して、対応するメモリ動作命令108DがPDI検出目的のためにPDIとみなされるべきかどうかを判断することができる。
引き続き図3を参照すると、PDI検出回路340が、命令パイプラインI0~IN内の受領された命令108DをPDIとして検出することに応答して、PDI検出回路340は、パイプラインI0~INにおけるフェッチされたPDI 108Dおよび/またはPDI 108D命令に続くその後続の、より若いフェッチされた命令を、パイプライン・フェッチ再充填回路344において捕捉するように構成される。以下に説明するように、これは、命令フェッチ再利用回路342が、これらのフェッチされた命令108Dを得て、該命令が、検出されたPDI 108Dの後の実行によって生成されるフラッシュ・イベント138に応答して、命令パイプラインI0~INに再利用され注入されることを許容する。パイプライン・フェッチ再充填回路344は、複数のフェッチ再充填エントリー346(0)~346(R)を含むメモリ・テーブル回路であることができ、各フェッチ再充填エントリーは、検出されたPDI 108Dおよび後続の、より若いフェッチされた命令108Dに関する情報を格納するように構成される。図3のパイプライン・フェッチ再充填回路344のより詳細な例が、図4に示され、以下に説明される。
図4は、図3のプロセッサ302における命令パイプラインI0~INに存在する、捕捉されたフェッチされたPDI 108Dおよびそれらのフェッチされたより若い命令を記憶するように構成された、図3の例示的なパイプライン・フェッチ再充填回路344の図である。パイプライン・フェッチ再充填回路344は、複数のフェッチ再充填エントリー346(0)~346(R)を含み、これらはそれぞれ、命令フェッチ再利用回路342によって後で再利用するためにPDI検出回路340によって検出されたPDI 108Dを格納するように割り当てられるように構成されている。パイプライン・フェッチ再充填回路344は、図3のPDI検出回路340の例示的動作を議論すると関連して説明される。
この点に関し、PDI検出回路340が、先に説明したように、命令パイプラインI0~INにおいて処理されている受領されたデコードされた命令108DをPDIとして検出する場合、PDI検出回路340は、まず、パイプライン・フェッチ再充填回路344内のフェッチ再充填エントリー346(0)~346(R)がすでに割り当てられており、PDI 108Dを格納しているかどうかを判断することができる。そうであれば、検出されたPDI 108Dのために、別のフェッチ再充填エントリー346(0)~346(R)を再割り当てする必要はない。この例では、パイプライン・フェッチ再充填回路344内のフェッチ再充填エントリー346(0)~346(R)がすでに割り当てられており、PDI 108Dを記憶しているかどうかを判断するために、PDI検出回路340は、図3内の検出された命令(すなわち、PDI 108Dおよび/またはそのより若い、後続命令108D)のソース識別情報350が、パイプライン・フェッチ再充填回路344内のフェッチ再充填エントリー346(0)~346(R)内のそれぞれの再充填タグ352(0)~352(R)内のソース識別情報362(0)~362(R)と一致するかどうかを判断するように構成される。検出された命令108Dのソース識別情報350は、検出された命令108Dのプログラム・カウンタ(PC)であってもよく、それは、検出された命令が命令処理回路304の命令ストリーム114中にフェッチされるもとになったプログラム・コードにおけるその存在を一意に識別する。検出された命令108Dのソース識別情報350が、パイプライン・フェッチ再充填回路344におけるフェッチ再充填エントリー346(0)~346(R)におけるそれぞれの再充填タグ352(0)~352(R)におけるソース識別情報362(0)~362(R)に含まれている場合、これは、PDI 108Dおよび/またはその後続の、より若い命令108Dが、マッチするソース識別情報362(0)~362(R)を有するそれぞれの再充填タグ352(0)~352(R)を含んでいた、フェッチ再充填エントリー346(0)~346(R)にすでに記憶されていることを意味する。PDI検出回路340は、検出された命令108Dをさらに処理する必要はない。
しかしながら、検出された命令108Dのソース識別情報350が、パイプライン・フェッチ再充填回路344におけるフェッチ再充填エントリー346(0)~346(R)におけるそれぞれの再充填タグ352(0)~352(R)におけるソース識別情報362(0)~362(R)に含まれていない場合、PDI検出回路340は、検出されたPDI 108Dを処理するように構成される。PDI検出回路340は、以下により詳細に説明する命令フェッチ再利用回路342による後の識別のために、検出された命令108Dのソース識別情報350を記憶するために、パイプライン・フェッチ再充填回路344内の利用可能なフェッチ再充填エントリー346(0)~346(R)を割り当てるように構成される。PDI検出回路340はまた、検出された命令108Dのソース識別情報350を、パイプライン・フェッチ再充填回路344内の割り当てられたフェッチ再充填エントリー346(0)~346(R)内のソース識別情報362(0)~362(R)内に格納するようにも構成される。検出されたPDI 108Dが、予測されうるが実行回路116における実行まで解決されない分岐命令フロー経路を有する分岐命令である場合、PDI検出回路340は、命令パイプラインI0~INから受領された分岐命令108Dの再充填経路364(たとえば、条件付き分岐命令について取られたか否か)を、パイプライン・フェッチ再充填回路344内のそれぞれの割り当てられたフェッチ再充填経路346(0)~346(R)内の再充填経路366(0)~366(R)に格納するように構成されることもできる。これにより、命令フェッチ再利用回路342は、フラッシュ・イベント138を引き起こした分岐命令108Eのためのパイプライン・フェッチ再充填回路344内の捕捉された後続命令108Dが、分岐命令108Eからの正しい命令フロー経路内にあるものとして再利用されるべきか否かを知ることができる。
次いで、図3のPDI検出回路340は、図4のパイプライン・フェッチ再充填回路344内の対応する割り当てられたフェッチ再充填エントリー346(0)~346(R)について有効インジケータ368(0)~368(R)を有効な状態に設定するように構成され、それにより、命令フェッチ再利用回路342は、フラッシュ・イベント138を引き起こしたPDI 108Eに対応する、フェッチ再充填エントリー346(0)~346(R)内の、前にフェッチされ、捕捉された命令108Dを再利用するために、マッチするフェッチ再充填エントリー346(0)~346(R)を参照することが有効であることを知る。次いで、PDI検出回路340は、後に可能な再利用のために、検出されたPDI 108Dに続く、命令パイプラインI0~IN内の後続の、より若い命令108Dに関する情報を、図4のパイプライン・フェッチ再充填回路344における割り当てられたフェッチ再充填エントリー346(0)~346(R)において捕捉するように構成される。この点に関し、PDI検出回路340は、割り当てられたフェッチ再充填エントリー346(0)~346(R)内の捕捉された命令372(1)~372(X)として、検出されたPDI 108Dに続く、受領されたその後の後続のより若い命令108Dを格納するように構成される。たとえば、フェッチ再充填エントリー346(0)は、捕捉された命令372(0)(1)~372(0)(X)として、「X」個までのその後の後続の、より若い命令108Dを格納するように構成されることができる。PDI検出回路340はまた、命令フェッチ再利用回路342によって再利用され、命令パイプラインI0~INに再注入された場合に、捕捉された命令372(1)~372(X)の処理を支援するために使用できる情報として、検出されたPDI 108Dに続くそれぞれの捕捉された命令372(1)~372(X)についてのメタデータ374(1)~374(X)を捕捉するように構成される。たとえば、フェッチ再充填エントリー346(0)は、「X」個の捕捉された命令108Dのための「X」個までのメタデータを、メタデータ374(0)(1)~374(0)(X)として格納することができる。メタデータ374(1)~374(X)は、対応する捕捉された命令372(1)~372(X)が、フラッシュ・イベント138を引き起こすその対応するPDI 108Eに応答して後刻、再利用される場合に、ある種の命令パイプラインI0~INをスキップできるかどうかを示す情報を含むことができる。たとえば、捕捉された命令372(1)~372(X)内の条件付き分岐の方向が、メタデータ374(1)~374(X)として格納されることができる。
PDI検出回路340はまた、それぞれの割り当てられたフェッチ再充填エントリー346(0)~346(R)に、フォールスルー・ソース・アドレス(たとえば、PC)370(0)~370(X)を格納するように構成される。これは、命令フェッチ再利用回路342が、そのような情報を使用して、図3の命令フェッチ回路106に、その実行がフラッシュ・イベント138を引き起こしたPDI 108Dについての捕捉された命令372(1)~372(X)の再利用に応答して、新しい命令108のフェッチをどこで開始するかを知らせることができるようにするものである。この点に関し、PDI検出回路340は、それぞれのフォールスルー・ソース・アドレス370(0)~370(R)内の検出されたPDI 108Dについて、それぞれのフェッチ再充填エントリー346(0)~346(R)内に捕捉された、最後に捕捉された命令372(0)~372(X)に続くPCを格納するように構成されることができる。PDI検出回路340は、一例として、命令ストリーム114においてPDI検出回路340が次のPDI 108Dに遭遇したときに、検出されたPDI 108Dについて、フェッチ再充填エントリー346(0)~346(R)内の捕捉された命令372(0)~372(X)における、検出されたPDI 108Dの後の、その後の後続の、より若い命令108Dの捕捉を止めるように構成されることができる。別の例として、PDI検出回路340は、パイプライン・フェッチ再充填回路344がいったん満杯になると、検出されたPDI 108Dについて、フェッチ再充填エントリー346(0)~346(R)内の捕捉された命令372(0)~372(X)における、検出されたPDI 108Dの後の、その後の後続の、より若い命令108Dの捕捉を止めるように構成されることができる。または、もう一つの例として、PDI検出回路340は、次のPDI 108Dに遭遇したとき、またはパイプライン・フェッチ再充填回路344が満杯であるときのいずれか最初に発生した状況において、その後の後続の、より若い命令108Dの捕捉を止めるように構成されることができる。
図4のパイプライン・フェッチ再充填回路344内の各フェッチ再充填エントリー346(0)~346(R)は、それぞれの有用インジケータ376(0)~376(X)を格納するように構成されることもできる。以下により詳細に論議されるように、有用インジケータ376(0)~376(X)は、フェッチ再充填エントリー346(0)~346(R)がどの程度有用であるかを示す有用性を格納するように構成される。有用インジケータ376(0)~376(X)に格納される有用性は、それぞれのフェッチ再充填エントリー346(0)~346(R)に関連するPDI 108Dが、フェッチ再充填エントリー346(0)~346(R)において捕捉された、フェッチされた命令108Dを再利用するために命令フェッチ再利用回路342によって使用される可能性がどれくらいあるかの指標である。有用性はカウント値であってもよく、有用インジケータ376(0)~376(X)は一例としてカウンタであってもよい。有用インジケータ376(0)~376(X)は、将来検出されるPDI 108Dおよびそれらの関連する後続命令108Dが後の再利用のために捕捉される余地を作るための、フェッチ再充填エントリー346(0)~346(R)の割り当て解除を制御する方法として、有用インジケータ376(0)~376(X)に記憶された有用性を別個のプロセスが更新し、監視することを許容する。
図3に戻って参照すると、上述したように、命令フェッチ再利用回路342は、その実行がフラッシュ・イベント138を発生させた実行されたPDI 108Eに対応する、パイプライン・フェッチ再充填回路344におけるフェッチ再充填エントリー346(0)~346(R)における捕捉された命令372(0)~372(X)における以前に捕捉された命令108Dを再利用するように構成される。これに関して、フラッシュ・イベント138に応答して、命令フェッチ再利用回路342は、以前に捕捉された検出された命令(すなわち、PDI 108Dおよび/またはそのより若い後続命令108D)のソース識別情報378を決定するように構成される。たとえば、検出された命令108Dのソース識別情報378は、PDI 108DのPCであってもよい。命令フェッチ再利用回路342は、検出された命令108Dのソース識別情報378が、パイプライン・フェッチ再充填回路344における対応するフェッチ再充填エントリー346(0)~346(R)における対応する再充填タグ352(0)~352(R)におけるソース識別情報362(0)~326(R)とマッチする(すなわち、ヒットする)かどうかを判断するように構成されることができる。そうである場合、命令フェッチ再利用回路342は、検出された命令108Dのソース識別情報378とマッチしたソース識別情報362(0)~326(R)を有する、フェッチ再充填エントリー346(0)~346(R)内の捕捉された命令372(1)~372(X)にアクセスし、それらの捕捉された命令372(1)~372(X)を、処理されるよう命令パイプラインI0~IN内に注入するように構成されることができる。このようにして、捕捉された命令372(1)~372(X)は、命令フェッチ回路106によって再フェッチされる必要はない。命令フェッチ再利用回路342は、捕捉された命令372(1)~372(X)を、命令デコード回路120の後に、たとえばリネーム回路122または命令パイプラインI0~INにおけるより後のステージ、たとえば実行回路116に注入するように構成されることができる。命令フェッチ再利用回路342はまた、マッチするフェッチ再充填エントリー346(0)~346(R)のフォールスルー・ソース・アドレス370(0)~370(X)を命令フェッチ回路106に提供するように構成される。命令フェッチ回路106は、再利用されて命令パイプラインI0~INに注入された捕捉された命令372(1)~372(X)と同じ命令108を再フェッチすることを避けるために、フォールスルー・ソース・アドレス370(0)~370(X)から始めて命令108のフェッチを開始することができる。
しかしながら、命令フェッチ再利用回路342が、その実行がフラッシュ・イベント138を引き起こした検出された命令108Dのソース識別情報378が、パイプライン・フェッチ再利用回路344内の対応するフェッチ再充填エントリー346(0)~346(R)内の対応する再充填タグ352(0)~352(R)内のソース識別情報362(0)~362(R)とマッチしない(すなわち、ミスする)ことを判別する場合、命令フェッチ再利用回路342は、検出された命令108Dを無視することができる。命令フェッチ回路106は、PDI 108Dおよび/またはその後続命令108Dを再フェッチする。命令フェッチ再利用回路342は、命令フェッチ回路106がPDI 108Eおよびその後続命令108Dを再フェッチするように、PDI 108EのPCとして、命令フェッチ回路106にフォールスルー・ソース・アドレス370を提供するように構成されてもよい。
命令フェッチ再利用回路342はまた、対応する捕捉された命令372(1)~372(X)を再利用する前に、PDI 108Dのソース識別情報378とマッチしたソース識別情報362(0)~362(R)を有する、パイプライン・フェッチ再充填回路344内の対応するフェッチ再充填エントリー346(0)~346(R)内の再充填タグ352(0)~352(R)内の再充填経路366(0)~366(R)を確認するように構成されることもできる。これは、たとえば、PDI 108Dが、その実行の解決に依存して異なる命令フロー経路をとることができる分岐命令である場合、命令フェッチ再利用回路342は、マッチしたフェッチ再充填エントリー346(0)~346(R)における捕捉された命令372(1)~372(X)が、PDI 108Dの実行によって解決されたのと同じ命令フロー経路からであることを保証することができるようにするものである。このようにして、命令パイプラインI0~INにおける命令フェッチ再利用回路342による捕捉された命令372(1)~372(X)の注入を通じた捕捉された命令372(1)~372(X)の再利用は、誤った命令フロー経路についてのものではない。対応するマッチしたフェッチ再充填エントリー346(0)~346(R)内の捕捉された命令372(1)~372(X)が、その記録された再充填経路366(0)~366(R)に従った正しい命令フロー経路についてのものでない場合、命令フェッチ再利用回路342は、それらの捕捉された命令372(1)~372(X)を再利用しないことを選択し、代わりに、それらを命令処理回路304によって再フェッチさせることができる。この場合、命令フェッチ再利用回路342は、フラッシュ・イベント138を生じさせた実行されたPDI 108Eのソース識別情報362(0)~362(R)を命令処理回路304に提供するように構成されることができ、次いで、該命令処理回路304がPDI 108Eおよびその後の後続命令108Dを再フェッチさせる。
上述のように、フラッシュ・イベント138を引き起こした、より新しい実行されたPDI 108Eおよびそれらの後続命令108Dを潜在的な再利用のために捕捉するための余地を作るために、パイプライン再充填回路344におけるフェッチ再充填エントリー346(0)~346(R)を割り当て解除する機構を提供することが望ましいことがある。パイプライン・フェッチ再充填回路344におけるいくつかのフェッチ再充填エントリー346(0)~346(R)は、フラッシュ・イベント138を引き起こした、より新しい実行されたPDI 108Eほど有用ではない(すなわち、将来発生する可能性が高くない)PDI 108Dおよび/またはより若い後続命令108Dに割り当てられていることがありうる。
上述のように、命令フェッチ再利用回路342は、PDI 108Dおよび/またはそのより若い後続命令108Dのソース識別情報378が、パイプライン・フェッチ再充填回路344内の有効なフェッチ再充填エントリー346(0)~346(R)にすでに含まれている(すなわち、ソース識別情報378がソース識別情報362(0)~362(R)にマッチする)ことを決定する。PDI 108Dのソース識別情報378および/またはそのより若い後続命令108Dが有効なフェッチ再充填エントリー346(0)~346(R)にすでに含まれている場合、命令フェッチ再利用回路342は、対応するフェッチ再充填エントリー346(0)~346(R)内の対応する有用インジケータ376(0)~376(X)における有用性を増大させるように構成されることができる。たとえば、有用インジケータ376(0)~376(X)がカウンタである場合、命令フェッチ再利用回路342は、一例として、増大した有用性を示すように有用インジケータ376(0)~376(X)をインクリメントするように構成されることができる。しかしながら、実行されたPDI 108Eのソース識別情報378が有効なフェッチ再充填エントリー346(0)~346(R)にすでに含まれているのではなく、新しい有効なフェッチ再充填エントリー346(0)~346(R)を割り当てる必要がある場合、命令フェッチ再利用回路342は、一例として、対応するフェッチ再充填エントリー346(0)~346(R)において、すべての有用インジケータ376(0)~376(X)の有用性を等しく減少させることができる。パイプライン・フェッチ再充填回路344内のフェッチ再充填エントリー346(0)~346(R)の有用インジケータ376(0)~376(X)における有用性が、設定された閾値有用性を下回る場合、命令フェッチ再利用回路342または他の回路は、そのようなフェッチ再充填エントリー346(0)~346(R)を割り当て解除して、新しいPDI 108Eのために再割り当てされるようにそのようなフェッチ再充填エントリー346(0)~346(R)を解放するように構成されることができる。
あるいはまた、パイプライン・フェッチ再充填回路344に対するミスに応答してすぐに対応するフェッチ再充填エントリー346(0)~346(R)において有用インジケータ376(0)~376(X)すべての有用性を等しく低下させる代わりに、検出された命令108D(すなわち、PDI 108Dおよび/またはそのより若い、後続命令108D)のソース識別情報378が有効なフェッチ再充填エントリー346(0)~346(R)にすでに含まれているのでない場合、図3のグローバル割り当て失敗インジケータ380が、インクリメントまたは増大されることができる。次いで、ひとたびグローバル割り当て失敗インジケータ380が閾値グローバル割り当てを超えると、各フェッチ再充填エントリー346(0)~346(R)における有用インジケータ376(0)~376(X)の有用性を低下させることができる。この機構は、各フェッチ再充填エントリー346(0)~346(R)における有用インジケータ376(0)~376(X)の有用性の低下の速度を、ミス・イベント毎に、パイプライン・フェッチ再充填回路344に対応しないように制御する。ここでもまた、パイプライン・フェッチ再充填回路344におけるフェッチ再充填エントリー346(0)~346(R)の有用インジケータ376(0)~376(X)における有用性が、設定された閾値有用性を下回った場合、命令フェッチ再利用回路342または他の回路は、そのようなフェッチ再充填エントリー346(0)~346(R)を割り当て解除し、新しいPDI 108Dおよび/またはそのより若い後続命令108Dに再割り当てされるように、そのようなフェッチ再充填エントリー346(0)~346(R)を解放するように構成されることができる。
別の代替として、パイプライン・フェッチ再充填回路344内のフェッチ再充填エントリー346(0)~346(R)の有用インジケータ376(0)~376(X)における有用性は、命令パイプラインI0~IN内で処理される命令108Dのある数毎に減少されることができる。別の代替として、パイプライン・フェッチ再充填回路344におけるフェッチ再充填エントリー346(0)~346(R)の有用インジケータ376(0)~376(X)における有用性は、PDI検出回路340による、検出されたPDI 108Dのある数毎に減少されることができる。別の代替として、パイプライン・フェッチ再充填回路344におけるフェッチ再充填エントリー346(0)~346(R)の有用インジケータ376(0)~376(X)における有用性は、フラッシュ・イベント138のある数毎に減少されることができる。
図5は、PDIを検出し、該PDIおよび/または該PDIに続く、その後続の、より若い命令であるフェッチされた命令を捕捉し、対応するPDIの実行によって引き起こされるフラッシュ・イベントに応答して、捕捉された命令を再利用するための、PDI検出回路505と命令フェッチ再利用回路506とを含む命令処理回路504を含むプロセッサ502(たとえばマイクロプロセッサ)を含む例示的なプロセッサ・ベースのシステム500のブロック図である。たとえば、図5のプロセッサ502は、図1のプロセッサ102または図3のプロセッサ302であってもよい。別の例として、命令処理回路504は、図1の命令処理回路104または図3の命令処理回路304であってもよい。別の例として、PDI検出回路505は、図1のPDI検出回路140または図3のPDI検出回路340であってもよい。別の例として、命令フェッチ再利用回路506は、図1の命令フェッチ再利用回路142または図3の命令フェッチ再利用回路342であってもよい。
プロセッサ・ベースのシステム500は、プリント回路基板(PCB)、サーバー、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、パーソナルデジタルアシスタント(PDA)、計算パッド、モバイルデバイス、または他の任意のデバイスなどの電子ボードカードに含まれる一つまたは複数の回路であってもよく、たとえば、サーバーまたはユーザーのコンピュータを表すことができる。この例では、プロセッサ・ベースのシステム500は、プロセッサ502を含む。プロセッサ502は、マイクロプロセッサ、中央処理装置等の一つまたは複数の汎用処理回路を表す。より詳細には、プロセッサ502は、EDGE命令セットマイクロプロセッサ、または、生産者命令の実行から生じる生成値を通信するための明示的な消費者命名をサポートする命令セットを実装する他のプロセッサであってもよい。プロセッサ502は、本明細書で議論される動作およびステップを実行するための命令において処理論理を実行するように構成される。この例では、プロセッサ502は、命令処理回路504によってアクセス可能な命令の一時的な高速アクセスメモリ記憶のための命令キャッシュ508を含む。システム・バス512を通じてシステム・メモリ510からなど、メモリからのフェッチまたはプリフェッチされた命令は、命令キャッシュ508に記憶される。命令処理回路504は、命令キャッシュ508内にフェッチされた命令を処理し、実行のための該命令を処理するように構成される。
プロセッサ502およびシステム・メモリ510は、システム・バス512に結合され、プロセッサ・ベースのシステム500に含まれる周辺装置を相互結合することができる。周知のように、プロセッサ500は、システム・バス512を通じてアドレス、制御、およびデータ情報を交換することによって、これらの他の装置と通信する。たとえば、プロセッサ502は、スレーブ装置の一例として、システム・メモリ510内のメモリ・コントローラ514にバス・トランザクション要求を通信することができる。図5には示されていないが、複数のシステム・バス512を設けることができ、各システム・バスは異なるファブリックを構成する。この例では、メモリ・コントローラ514は、システム・メモリ510内のメモリ・アレイ516にメモリアクセス要求を提供するように構成される。メモリ・アレイ516は、データを記憶するための記憶ビット・セルのアレイからなる。システム・メモリ510は、非限定的な例として、読み出し専用メモリ(ROM)、フラッシュメモリ、同期DRAM(SDRAM)などのダイナミックランダムアクセスメモリ(DRAM)、およびスタティックメモリ(たとえば、フラッシュメモリ、スタティックランダムアクセスメモリ(SRAM)など)であってもよい。
他の装置は、システム・バス512に接続されることができる。図5に示されるように、これらの装置は、システム・メモリ510、一つまたは複数の入力装置518、一つまたは複数の出力装置520、モデム522、および一つまたは複数のディスプレイ・コントローラ524を例として含むことができる。入力装置518は、入力キー、スイッチ、音声プロセッサ等を含むがこれらに限定されない任意のタイプの入力装置を含むことができる。出力装置520は、オーディオ、ビデオ、他の視覚インジケータなどを含むがこれらに限定されない任意のタイプの出力装置を含むことができる。モデム522は、ネットワーク526との間でデータの交換を可能にするように構成された任意の装置でありうる。ネットワーク526は、有線または無線ネットワーク、プライベートまたは公衆ネットワーク、ローカルエリアネットワーク(LAN)、無線ローカルエリアネットワーク(WLAN)、ワイドエリアネットワーク(WAN)、BLUETOOTH(商標)ネットワーク、およびインターネットを含むがこれらに限定されない、任意のタイプのネットワークでありうる。モデム522は、所望の任意のタイプの通信プロトコルをサポートするように構成することができる。プロセッサ502はまた、一つまたは複数のディスプレイ528に送られる情報を制御するために、システム・バス512を通じてディスプレイ・コントローラ524にアクセスするように構成されてもよい。ディスプレイ528は、陰極線管(CRT)、液晶ディスプレイ(LCD)、プラズマディスプレイ等を含むがこれらに限定されない任意のタイプのディスプレイを含むことができる。
図5のプロセッサ・ベースのシステム500は、命令に従って望まれる任意のアプリケーションのためにプロセッサ502によって実行される一組の命令530を含んでいてもよい。命令530は、非一時的コンピュータ読み取り可能媒体532の例としてのシステム・メモリ510、プロセッサ502、および/または命令キャッシュ508に記憶されうる。命令530はまた、それらの実行中に、システム・メモリ510内および/またはプロセッサ502内に、完全にまたは少なくとも部分的に存在してもよい。命令530はさらに、モデム522を介してネットワーク526を通じて送信または受信されてもよく、よって、ネットワーク526はコンピュータ読み取り可能媒体532を含む。
コンピュータ読み取り可能媒体532は、例示的な実施形態では単一の媒体であるように示されているが、「コンピュータ読み取り可能媒体」という用語は、前記一つまたは複数の命令セットを記憶する単一の媒体または複数の媒体(たとえば、中央集中型または分散型データベース、および/または関連するキャッシュおよびサーバー)を含むと解釈されるべきである。用語「コンピュータ読み取り可能媒体」はまた、処理装置による実行のための、処理装置に本明細書に開示された実施形態のいずれか一つまたは複数の方法を実行させる命令のセットを記憶、エンコード、または担持することができる任意の媒体を含むものと解釈される。よって、用語「コンピュータ読み取り可能媒体」は、固体メモリ、光学媒体、および磁気媒体を含むがこれらに限定されないと解釈される。
本明細書に開示される実施形態は、さまざまなステップを含む。本明細書に開示される実施形態のステップは、ハードウェア構成要素によって形成されてもよく、または機械実行可能な命令によって具現されてもよく、該命令は、該命令によってプログラムされた汎用または専用プロセッサに前記ステップを実行させるために使用されうる。あるいはまた、ステップは、ハードウェアおよびソフトウェアの組み合わせによって実行されてもよい。
本明細書に開示される実施形態は、命令を記憶している機械読み取り可能媒体(またはコンピュータ読み取り可能媒体)を含むことができ、コンピュータシステム(または他の電子デバイス)を本明細書に開示された実施形態に従ってプロセスを実行するようにプログラムするために使用することができるコンピュータ・プログラム・プロダクトまたはソフトウェアとして提供されてもよい。機械読み取り可能媒体は、機械(たとえば、コンピュータ)によって読み取り可能な形で情報を記憶または伝送するための任意の機構を含む。たとえば、機械読み取り可能媒体は:機械読み取り可能記憶媒体(たとえば、ROM、ランダム・アクセス・メモリ(RAM)、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリ・デバイスなど)などを含む。
特に別段の記載がない限り、前の議論から明らかなように、本稿を通じて、「処理」、「計算」、「決定」、「表示」などのような用語を使用する議論は、コンピュータシステムのレジスタ内の物理的(電子的)量として表されるデータおよびメモリを操作および変換して、コンピュータシステムのメモリまたはレジスタまたは他のそのような情報記憶、伝送、もしくは表示装置内の物理的量として同様に表される他のデータにするコンピュータシステムまたは類似の電子計算装置のアクションおよびプロセスを指すことが理解される。
本明細書に提示されるアルゴリズムおよび表示は、何らかの特定のコンピュータまたは他の装置と本来的に関連するものではない。さまざまなシステムが、本明細書の教示に従ったプログラムとともに使用されてもよく、または、必要とされる方法ステップを実行するためのより特殊化された装置を構築することが便利であると判明することがある。これらの多様なシステムのための必要な構造は、上記の説明から明らかになる。さらに、本明細書に記載される実施形態は、いかなる特定のプログラミング言語を参照して記載されているのでもない。多様なプログラミング言語が、本明細書に記載される実施形態の教示を実施するために使用されうることが理解されるであろう。
当業者は、さらに、本明細書に開示される実施形態に関連して説明されるさまざまな例示的な論理ブロック、モジュール、回路、およびアルゴリズムが、電子ハードウェア、メモリまたは他のコンピュータ読み取り可能媒体に記憶され、プロセッサまたは他の処理装置によって実行される命令、または両方の組み合わせとして実装されうることを理解するであろう。本明細書に記載される分散アンテナシステムの構成要素は、例として、任意の回路、ハードウェア構成要素、集積回路(IC)、またはICチップにおいて使用されうる。本明細書に開示されるメモリは、任意のタイプおよびサイズのメモリであってよく、任意のタイプの所望の情報を記憶するように構成されてもよい。この交換可能性を明確に例解するために、さまざまな例示的な構成要素、ブロック、モジュール、回路、およびステップは、一般に、それらの機能に関して上述した。そのような機能がどのように実装されるかは、具体的な用途、設計上の選択、および/またはシステム全体に課される設計上の制約条件に依存する。当業者は、各特定の用途のためにさまざまな仕方で、記載される機能を実装することができるが、そのような実装決定は、本願の実施形態の範囲から逸脱させるものと解釈されるべきではない。
本明細書に開示される実施形態に関連して説明されるさまざまな例示的な論理ブロック、モジュール、および回路は、プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、または他のプログラマブル論理デバイス、離散的なゲートまたはトランジスタ論理、離散的なハードウェア構成要素、または本明細書に記載される機能を実行するように設計されるそれらの任意の組み合わせを用いて、実装または実行されてもよい。さらに、コントローラはプロセッサであってもよい。プロセッサは、マイクロプロセッサであってもよいが、代替的に、プロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであってもよい。プロセッサはまた、計算装置の組み合わせ(たとえば、DSPとマイクロプロセッサの組み合わせ、複数のマイクロプロセッサ、DSPコアと組み合わせた一つまたは複数のマイクロプロセッサ、または任意の他のそのような構成)として実装されてもよい。
本明細書に開示される実施形態は、ハードウェアおよびハードウェアに記憶されている命令において具現されてもよく、たとえば、RAM、フラッシュメモリ、ROM、電気的にプログラマブルなROM(EPROM)、電気的に消去可能なプログラマブルROM(EEPROM)、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当該技術分野で既知の任意の他の形のコンピュータ読み取り可能媒体に存在することができる。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み出し、記憶媒体に情報を書き込むことができるようにプロセッサに結合される。代替例では、記憶媒体はプロセッサと一体であってもよい。プロセッサと記憶媒体はASIC内に存在してもよい。ASICは、遠隔ステーション内に存在してもよい。代替例では、プロセッサおよび記憶媒体は、遠隔ステーション、基地局、またはサーバー内の離散コンポーネントとして存在してもよい。
また、本明細書の例示的な実施形態のいずれかに記載される動作ステップは、例および議論を提供するために記載されていることに留意されたい。記載した動作は、図示したシーケンス以外の多数の異なるシーケンスで実行されうる。さらに、単一の動作ステップで記述された動作が、実際には、いくつかの異なるステップで実行されてもよい。さらに、例示的な実施形態で説明した一つまたは複数の動作ステップを組み合わせてもよい。当業者は、また、情報および信号が多様な技術および技法の任意のものを用いて表現されうることも理解するであろう。たとえば、上述の説明を通じて言及されうるデータ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場、または粒子、光の場または粒子、またはそれらの任意の組み合わせによって表されうる。
特に明記しない限り、本明細書に記載のいずれの方法も、そのステップが特定の順序で実行されることを要求するものと解釈されることは決して意図されていない。よって、方法クレームが、そのステップが従うべき順序を実際に記載していない場合、または、ステップが特定の順序に限定されるべきであることが請求項または明細書に別段の明確に記載されていない場合、いかなる特定の順序も推論されることは意図されていない。
本発明の精神または範囲から逸脱することなく、さまざまな修正および変形を行うことができることは、当業者に明らかであろう。本発明の精神および内容を組み込む、開示された実施形態の修正、組み合わせ、サブコンビネーションおよびバリエーションが当業者に思い浮かぶことがありうるので、本発明は、添付の特許請求の範囲およびそれらの均等物の範囲内のすべてを含むものと解釈されるべきである。
Claims (15)
- 命令処理回路および命令フェッチ再利用回路を有するプロセッサであって、
前記命令処理回路は:
複数の命令を、複数のフェッチされた命令として、プログラム・コードから、実行されるべく命令パイプラインにフェッチするように構成された命令フェッチ回路と;
前記命令フェッチ回路に結合された実行回路とを有しており、前記実行回路は:
前記命令パイプラインにおける前記複数のフェッチされた命令のうちのあるフェッチされた命令を実行し;
ハザードを生成する性能劣化命令(PDI)を含む前記複数の命令のうちのフェッチされた命令の実行に応答して、前記命令パイプラインをフラッシュするためのパイプライン・フラッシュ・イベントを生成するように構成されており、
前記命令フェッチ再利用回路は、前記命令パイプラインに結合されており、前記命令フェッチ再利用回路は、前記パイプライン・フラッシュ・イベントに応答して:
フェッチされた命令のソース識別情報がフェッチ再充填エントリーにおける再充填タグにおけるソース識別情報に、パイプライン・フェッチ再充填回路の複数のフェッチ再充填エントリーのうちのマッチするフェッチ再充填エントリーとして、マッチするかどうかを判定し;
前記フェッチされた命令のソース識別情報が前記フェッチ再充填エントリーにおける前記再充填タグにおけるソース識別情報とマッチすることに応答して、前記マッチするフェッチ再充填エントリーにおける一つまたは複数の捕捉された命令を、処理されるよう、前記命令フェッチ回路の後で、前記命令パイプラインに挿入するように構成されている、
プロセッサ。 - 前記命令処理回路は、さらに:
前記命令フェッチ回路に結合されたデコード回路を有しており、前記デコード回路は、前記複数のフェッチされた命令を複数のデコードされた命令にデコードするように構成されており;
前記実行回路は、前記命令パイプラインにおける前記複数のデコードされた命令のうちのデコードされた命令を実行し;
前記フェッチされた命令のソース識別情報が前記パイプライン・フェッチ再充填回路の前記フェッチ再充填エントリーにおける前記再充填タグにおけるソース識別情報にマッチすることに応答して:
前記マッチするフェッチ再充填エントリーにおける前記一つまたは複数の捕捉された命令を、処理されるよう、前記命令パイプラインにおいて前記デコード回路と前記実行回路との間に挿入するように構成されている、
請求項1に記載のプロセッサ。 - 前記命令処理回路は、前記フェッチされた命令のソース識別情報が前記フェッチ再充填エントリーにおける前記再充填タグにおけるソース識別情報にマッチすることに応答して:
前記マッチするフェッチ再充填エントリーにおける前記一つまたは複数の捕捉された命令を、実行されるよう、前記命令パイプラインにおいて前記実行回路に挿入するように構成されている、
請求項1に記載のプロセッサ。 - 前記命令フェッチ再利用回路は、前記PDIを含む前記フェッチされた命令の前記ソース識別情報が前記フェッチ再充填エントリーにおける前記再充填タグにおけるソース識別情報とマッチすることに応答して
前記PDIの命令フロー経路が前記マッチするフェッチ再充填エントリーの前記再充填タグにおける再充填経路とマッチするかどうかを判定し;
前記PDIの前記命令フロー経路が前記マッチするフェッチ再充填エントリーの前記再充填タグにおける前記再充填経路とマッチすることに応答して:
前記マッチするフェッチ再充填エントリーにおける前記一つまたは複数の捕捉された命令を、処理されるよう、前記命令フェッチ回路の後で前記命令パイプラインに挿入するように構成されている、
請求項1に記載のプロセッサ。 - 前記命令フェッチ再利用回路は、前記フェッチされた命令のソース識別情報が前記フェッチ再充填エントリーにおける前記再充填タグにおけるソース識別情報にマッチすることに応答して:
前記マッチするフェッチ再充填エントリーにおけるフォールスルー・ソース・アドレスを前記命令フェッチ回路に通信するように構成されており、
前記命令フェッチ回路は、前記フォールスルー・ソース・アドレスを受領することに応答して、前記フォールスルー・ソース・アドレスから始まる命令をフェッチするように構成されている、
請求項1に記載のプロセッサ。 - 前記命令フェッチ再利用回路は、前記フェッチされた命令のソース識別情報が前記フェッチ再充填エントリーにおける前記再充填タグにおけるソース識別情報にマッチすることに応答して:
前記パイプライン・フェッチ再充填回路における前記マッチするフェッチ再充填エントリーにおける、前記マッチするフェッチ再充填エントリーの有用性を示す有用インジケータにおける有用性を増大させるように構成されている、
請求項1に記載のプロセッサ。 - 命令フェッチ再利用回路は、さらに:
前記パイプライン・フェッチ再充填回路における前記複数のフェッチ再充填エントリーのうちのあるフェッチ再充填エントリーにおける前記有用インジケータにおける有用性が、閾値有用性を下回るかどうかを判定し;
前記フェッチ再充填エントリーにおける前記有用インジケータにおける有用性が前記閾値有用性を下回ることに応答して、前記パイプライン・フェッチ再充填回路における前記フェッチ再充填エントリーを割り当て解除するようにさらに構成されている、
請求項6に記載のプロセッサ。 - 前記命令パイプラインに結合されたPDI検出回路をさらに有しており、
前記PDI検出回路は、前記命令パイプラインにおけるフェッチされた命令がPDIであるかどうかを検出するように構成されており;
前記フェッチされた命令をPDIとして検出することに応答して、前記PDI検出回路はさらに:
前記パイプライン・フェッチ再充填回路における前記複数のフェッチ再充填エントリーのうちの利用可能なフェッチ再充填エントリーを割り当て;
PDI命令と後続命令のいずれかを含む検出された命令のソース識別情報を、前記利用可能なフェッチ再充填エントリーの前記再充填タグにおいて格納するように構成されている、
請求項1に記載のプロセッサ。 - 前記PDI検出回路は、前記検出された命令のソース識別情報がフェッチ再充填エントリーにおける再充填タグにおけるソース識別情報とマッチしないことに応答して:
前記パイプライン・フェッチ再充填回路における割り当てられた利用可能なフェッチ再充填エントリーにおいて、前記命令パイプラインにおける前記の検出された命令の後に続く一つまたは複数の後続命令を捕捉するように構成されている、
請求項8に記載のプロセッサ。 - 前記複数の命令は、分岐命令を含み;
前記命令フェッチ回路は、前記分岐命令を、実行されるよう、前記命令パイプラインにフェッチするように構成されており;
前記命令処理回路は、前記分岐命令の命令フロー経路を決定するように構成されており;
前記PDI検出回路は、前記命令パイプラインにおけるフェッチされた分岐命令がPDIであるかどうかを検出するように構成され;
前記PDI検出回路は、前記フェッチされた分岐命令がPDIであることを検出することに応答して、および、検出されたPDIのソース識別情報が、前記フェッチ再充填エントリーにおける再充填タグにおけるソース識別情報とマッチしないことに応答して、さらに:
検出されたPDIの前記命令フロー経路を、前記利用可能なフェッチ再充填エントリーの再充填経路に格納するように構成されている、
請求項8に記載のプロセッサ。 - 前記PDI検出回路は、前記検出された命令のソース識別情報がフェッチ再充填エントリーにおける再充填タグにおけるソース識別情報とマッチしないことに応答して、さらに:
前記一つまたは複数の後続命令のうちのその後の命令がPDIであるかどうかを判定し;
前記その後の命令がPDIであると判定することに応答して:
前記命令パイプラインにおけるPDIであると判定された前記一つまたは複数の後続命令としての前記その後の命令を、前記パイプライン・フェッチ再充填回路における前記割り当てられた利用可能なフェッチ再充填エントリーにおいて捕捉しないように構成されている、
請求項9に記載のプロセッサ。 - プロセッサにおける命令パイプラインにおけるフェッチされフラッシュされた命令を再利用する方法であって:
複数の命令を複数のフェッチされた命令として、プログラム・コードから、実行されるよう命令パイプラインにフェッチする段階と;
前記命令パイプラインにおける前記複数のフェッチされた命令のうちのあるフェッチされた命令を実行する段階と;
性能劣化命令(PDI)としての、ハザードを生成する、前記複数の命令のうちのあるフェッチされた命令の実行に応答して、前記命令パイプラインをフラッシュするためのパイプライン・フラッシュ・イベントを生成する段階と;
前記パイプライン・フラッシュ・イベントに応答して:
検出された命令のソース識別情報が、パイプライン・フェッチ再充填回路の複数のフェッチ再充填エントリーのうちのマッチするフェッチ再充填エントリーとして、フェッチ再充填エントリーにおける再充填タグにおけるソース識別情報とマッチするかどうかを決定する段階と;
前記検出された命令のソース識別情報が前記フェッチ再充填エントリーにおける前記再充填タグにおけるソース識別情報にマッチすることに応答して:
マッチするフェッチ再充填エントリーにおける一つまたは複数の捕捉された命令を、実行されるべきフェッチされた命令として前記命令パイプラインに挿入する段階とを含む、
方法。 - 前記PDIの前記ソース識別情報が前記フェッチ再充填エントリーにおける前記再充填タグにおけるソース識別情報とマッチすることに応答して、前記PDIを含む検出された命令の命令フロー経路が前記マッチするフェッチ再充填エントリーの前記再充填タグにおける再充填経路とマッチするかどうかを判定し;
前記PDIの前記命令フロー経路が前記マッチするフェッチ再充填エントリーの前記再充填タグにおける前記再充填経路とマッチすることに応答して:
前記マッチするフェッチ再充填エントリーにおける前記一つまたは複数の捕捉された命令を、処理されるよう、前記一つまたは複数の捕捉された命令を再フェッチすることなく、前記命令パイプラインに挿入することをさらに含む、
請求項12に記載の方法。 - 前記命令パイプラインにおけるフェッチされた命令がPDIであるかどうかを検出し;
前記フェッチされた命令がPDIであることを検出することに応答して:
前記パイプライン・フェッチ再充填回路における前記複数のフェッチ再充填エントリーのうちの利用可能なフェッチ再充填エントリーを割り当て;
検出されたPDIの後に続く一つまたは複数の後続命令のソース識別情報を、割り当てられた利用可能なフェッチ再充填エントリーの前記再充填タグにおいて格納することをさらに含む、
請求項12に記載の方法。 - 前記フェッチされた命令がPDIであることを検出することに応答して:
検出された命令のソース識別情報を、前記割り当てられた利用可能なフェッチ再充填エントリーの前記再充填タグにおいて格納することをさらに含む、
請求項14に記載の方法。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/907,988 US11360773B2 (en) | 2020-06-22 | 2020-06-22 | Reusing fetched, flushed instructions after an instruction pipeline flush in response to a hazard in a processor to reduce instruction re-fetching |
US16/907,988 | 2020-06-22 | ||
PCT/US2021/029028 WO2021262309A1 (en) | 2020-06-22 | 2021-04-25 | Reusing fetched, flushed instructions after an instruction pipeline flush in response to a hazard in a processor to reduce instruction re-fetching |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2023531216A true JP2023531216A (ja) | 2023-07-21 |
JPWO2021262309A5 JPWO2021262309A5 (ja) | 2024-03-28 |
Family
ID=75919424
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022578982A Pending JP2023531216A (ja) | 2020-06-22 | 2021-04-25 | 命令再フェッチを減らすための、プロセッサにおけるハザードに応答した命令パイプライン・フラッシュ後のフェッチ、フラッシュされた命令の再利用 |
Country Status (6)
Country | Link |
---|---|
US (2) | US11360773B2 (ja) |
EP (1) | EP4168893B1 (ja) |
JP (1) | JP2023531216A (ja) |
KR (1) | KR20230023801A (ja) |
CN (1) | CN115702415A (ja) |
WO (1) | WO2021262309A1 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020121416A1 (ja) * | 2018-12-11 | 2020-06-18 | サンケン電気株式会社 | プロセッサ及びパイプライン処理方法 |
US11847457B1 (en) * | 2022-05-31 | 2023-12-19 | Ceremorphic, Inc. | System for error detection and correction in a multi-thread processor |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5881277A (en) | 1996-06-13 | 1999-03-09 | Texas Instruments Incorporated | Pipelined microprocessor with branch misprediction cache circuits, systems and methods |
US5845103A (en) * | 1997-06-13 | 1998-12-01 | Wisconsin Alumni Research Foundation | Computer with dynamic instruction reuse |
US6076153A (en) | 1997-12-24 | 2000-06-13 | Intel Corporation | Processor pipeline including partial replay |
US6694425B1 (en) | 2000-05-04 | 2004-02-17 | International Business Machines Corporation | Selective flush of shared and other pipeline stages in a multithread processor |
US7165167B2 (en) | 2003-06-10 | 2007-01-16 | Advanced Micro Devices, Inc. | Load store unit with replay mechanism |
US7664936B2 (en) | 2005-02-04 | 2010-02-16 | Mips Technologies, Inc. | Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages |
US7631130B2 (en) | 2005-02-04 | 2009-12-08 | Mips Technologies, Inc | Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor |
US7853777B2 (en) * | 2005-02-04 | 2010-12-14 | Mips Technologies, Inc. | Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions |
US7254700B2 (en) | 2005-02-11 | 2007-08-07 | International Business Machines Corporation | Fencing off instruction buffer until re-circulation of rejected preceding and branch instructions to avoid mispredict flush |
US7152155B2 (en) | 2005-02-18 | 2006-12-19 | Qualcomm Incorporated | System and method of correcting a branch misprediction |
US7949861B2 (en) | 2005-06-10 | 2011-05-24 | Qualcomm Incorporated | Method and apparatus for managing instruction flushing in a microprocessor's instruction pipeline |
US7475232B2 (en) * | 2005-07-19 | 2009-01-06 | International Business Machines Corporation | Performance of an in-order processor by no longer requiring a uniform completion point across different execution pipelines |
US20080148026A1 (en) * | 2006-12-15 | 2008-06-19 | Dhodapkar Ashutosh S | Checkpoint Efficiency Using a Confidence Indicator |
US7779232B2 (en) | 2007-08-28 | 2010-08-17 | International Business Machines Corporation | Method and apparatus for dynamically managing instruction buffer depths for non-predicted branches |
US20190377580A1 (en) | 2008-10-15 | 2019-12-12 | Hyperion Core Inc. | Execution of instructions based on processor and data availability |
US8245018B2 (en) | 2008-12-31 | 2012-08-14 | International Business Machines Corporation | Processor register recovery after flush operation |
US8909908B2 (en) * | 2009-05-29 | 2014-12-09 | Via Technologies, Inc. | Microprocessor that refrains from executing a mispredicted branch in the presence of an older unretired cache-missing load instruction |
US8578139B2 (en) * | 2010-08-05 | 2013-11-05 | Arm Limited | Checkpointing long latency instruction as fake branch in branch prediction mechanism |
US20130318332A1 (en) | 2012-05-22 | 2013-11-28 | Jeffry E. Gonion | Branch misprediction behavior suppression using a branch optional instruction |
US9740496B2 (en) * | 2013-09-06 | 2017-08-22 | International Business Machines Corporation | Processor with memory-embedded pipeline for table-driven computation |
GB2525264B (en) | 2014-04-17 | 2021-06-02 | Advanced Risc Mach Ltd | Power saving by reusing results of identical micro-operations |
US9928075B2 (en) | 2015-02-13 | 2018-03-27 | International Business Machines Corporation | Load queue entry reuse for operand store compare history table update |
US9785538B2 (en) | 2015-09-01 | 2017-10-10 | Nxp Usa, Inc. | Arbitrary instruction execution from context memory |
US10255074B2 (en) | 2015-09-11 | 2019-04-09 | Qualcomm Incorporated | Selective flushing of instructions in an instruction pipeline in a processor back to an execution-resolved target address, in response to a precise interrupt |
US20170139716A1 (en) | 2015-11-18 | 2017-05-18 | Arm Limited | Handling stalling event for multiple thread pipeline, and triggering action based on information access delay |
US11188336B2 (en) * | 2015-12-28 | 2021-11-30 | Qualcomm Incorporated | Replay of partially executed instruction blocks in a processor-based system employing a block-atomic execution model |
US20190155608A1 (en) | 2017-11-17 | 2019-05-23 | Qualcomm Incorporated | Fast pipeline restart in processor with decoupled fetcher |
US10884749B2 (en) | 2019-03-26 | 2021-01-05 | International Business Machines Corporation | Control of speculative demand loads |
-
2020
- 2020-06-22 US US16/907,988 patent/US11360773B2/en active Active
-
2021
- 2021-04-25 CN CN202180044701.3A patent/CN115702415A/zh active Pending
- 2021-04-25 EP EP21725905.0A patent/EP4168893B1/en active Active
- 2021-04-25 JP JP2022578982A patent/JP2023531216A/ja active Pending
- 2021-04-25 WO PCT/US2021/029028 patent/WO2021262309A1/en unknown
- 2021-04-25 KR KR1020237002002A patent/KR20230023801A/ko unknown
-
2022
- 2022-05-27 US US17/827,291 patent/US11726787B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
US11360773B2 (en) | 2022-06-14 |
US20220283816A1 (en) | 2022-09-08 |
KR20230023801A (ko) | 2023-02-17 |
EP4168893B1 (en) | 2024-06-26 |
US11726787B2 (en) | 2023-08-15 |
US20210397453A1 (en) | 2021-12-23 |
WO2021262309A1 (en) | 2021-12-30 |
EP4168893A1 (en) | 2023-04-26 |
CN115702415A (zh) | 2023-02-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108780398B (zh) | 在基于处理器系统中基于负载路径历史使用地址预测表以提供负载地址预测 | |
US9996348B2 (en) | Zero cycle load | |
US7415597B2 (en) | Processor with dependence mechanism to predict whether a load is dependent on older store | |
US7133969B2 (en) | System and method for handling exceptional instructions in a trace cache based processor | |
US11726787B2 (en) | Reusing fetched, flushed instructions after an instruction pipeline flush in response to a hazard in a processor to reduce instruction re-fetching | |
US11068273B2 (en) | Swapping and restoring context-specific branch predictor states on context switches 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 | |
US7979682B2 (en) | Method and system for preventing livelock due to competing updates of prediction information | |
US10719327B1 (en) | Branch prediction system | |
US11061824B2 (en) | Deferring cache state updates in a non-speculative cache memory in a processor-based system in response to a speculative data request until the speculative data request becomes non-speculative | |
US11074077B1 (en) | Reusing executed, flushed instructions after an instruction pipeline flush in response to a hazard in a processor to reduce instruction re-execution | |
US11093401B2 (en) | Hazard prediction for a group of memory access instructions using a buffer associated with branch prediction | |
WO2021055056A1 (en) | Dynamic hammock branch training for branch hammock detection in an instruction stream executing in a processor | |
US11915002B2 (en) | Providing extended branch target buffer (BTB) entries for storing trunk branch metadata and leaf branch metadata | |
EP4193251B1 (en) | Performing flush recovery using parallel walks of sliced reorder buffers (srobs) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20240315 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20240315 |