(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6208084
(24)【登録日】2017年9月15日
(45)【発行日】2017年10月4日
(54)【発明の名称】誤予測された分岐のためにフラッシュするセグメント化パイプライン
(51)【国際特許分類】
G06F 9/38 20060101AFI20170925BHJP
【FI】
G06F9/38 330K
G06F9/38 310F
【請求項の数】13
【外国語出願】
【全頁数】13
(21)【出願番号】特願2014-121814(P2014-121814)
(22)【出願日】2014年6月12日
(62)【分割の表示】特願2012-133878(P2012-133878)の分割
【原出願日】2008年1月24日
(65)【公開番号】特開2014-211881(P2014-211881A)
(43)【公開日】2014年11月13日
【審査請求日】2014年7月14日
【審判番号】不服2016-5633(P2016-5633/J1)
【審判請求日】2016年4月15日
(31)【優先権主張番号】11/626,443
(32)【優先日】2007年1月24日
(33)【優先権主張国】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】595020643
【氏名又は名称】クゥアルコム・インコーポレイテッド
【氏名又は名称原語表記】QUALCOMM INCORPORATED
(74)【代理人】
【識別番号】100108855
【弁理士】
【氏名又は名称】蔵田 昌俊
(74)【代理人】
【識別番号】100109830
【弁理士】
【氏名又は名称】福原 淑弘
(74)【代理人】
【識別番号】100158805
【弁理士】
【氏名又は名称】井関 守三
(74)【代理人】
【識別番号】100112807
【弁理士】
【氏名又は名称】岡田 貴志
(72)【発明者】
【氏名】マイケル・スコット・マクイルバイン
(72)【発明者】
【氏名】ジェームズ・ノリス・ディーフェンダーファー
(72)【発明者】
【氏名】トマス・アンドリュー・サートリウス
(72)【発明者】
【氏名】ロドニー・ウェイン・スミス
【合議体】
【審判長】
石井 茂和
【審判官】
高木 進
【審判官】
須田 勝巳
(56)【参考文献】
【文献】
米国特許第5586278(US,A)
【文献】
米国特許第5812839(US,A)
【文献】
米国特許第5627985(US,A)
【文献】
特表2010−517183(JP,A)
【文献】
中森章,コンピュータアーキテクチャ その直感的アプローチ4 並行処理の基本,スーパースカラ,OH!X2001年春号,ソフトバンクパブリッシング株式会社、2001年3月1日、256頁〜275頁
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/00
(57)【特許請求の範囲】
【請求項1】
(a1)順不同実行を可能とするパイプライン化されたプロセッサにおいて命令を実行する方法であって、
(a2)分岐命令誤予測を検出すると、命令がプログラム順序を外れることができるポイントより前の、上位パイプラインを直ちにフラッシュすることを備え、
(a3)前記誤予測された分岐命令の実行を妨げるパイプライン・ハザードがないこと、および、より古い命令全ての実行を妨げるパイプライン・ハザードがないことをコンファーム後に、前記誤予測された分岐命令を実行のためにコミットすること、および前記命令がプログラム順序を外れることができるポイントより後の、下位パイプラインからコミットされていない命令全てをフラッシュすること、
(a4)命令をコンファームする際に、当該命令が、誤予測された分岐命令である場合には、命令順序付けメカニズムにおいて、コンファームした命令が誤予測された分岐命令であることを示す誤予測された分岐(MPB)命令フラグまたはビットフィールドをセットすること、及び
(a5)前記コミットされていない命令全てを下位パイプラインからフラッシュすることは、前記誤予測された分岐命令が、コミットされた最も新しい命令である場合、コミットされていない命令全てを前記下位パイプライン全てからフラッシュし、前記誤予測された分岐命令よりも古いコミットされた命令をフラッシュしないこと、
により特徴付けられる上記方法。
【請求項2】
前記プロセッサは2つ以上のパイプラインを含み、分岐命令を実行する各パイプラインは、前記命令順序付けメカニズムにおける誤予測された分岐命令インジケータを設定するように動作可能なコンファーム・ステージを含む請求項1に記載の方法。
【請求項3】
前記上位パイプラインのフラッシュ後、正しい分岐ターゲット・アドレスから命令をフェッチすることを更に備えた請求項1に記載の方法。
【請求項4】
前記上位パイプラインのフラッシュ後、コミットされていない命令全てが前記下位パイプラインからフラッシュされるまで、正しい分岐命令ターゲット・アドレスからフェッチされた命令が、命令が順序を外れることができるポイントより後の、下位パイプラインに進むことを阻止することを更に備えた請求項3に記載の方法。
【請求項5】
推測的に割り当てられたリソースが、レジスタ再命名リソースを含む請求項4に記載の方法。
【請求項6】
コミットされていない命令を前記下位パイプラインからフラッシュすると、コミットされていない命令に推測的に割り当てられたリソースの割当を解除することを更に備えた請求項1に記載の方法。
【請求項7】
コミットされていない命令に推測的に割り当てられたリソースの割当を解除することは、コミット済レジスタ再命名テーブルの内容を、推測的レジスタ再命名テーブルにコピーすることを含む請求項6に記載の方法。
【請求項8】
制御論理と、
命令がプログラム順序を外れることができるポイントより前の上位パイプラインと、命令がプログラム順序を外れることができるポイントより後の1つ又は複数の下位パイプラインとを備えた、セグメント化された命令実行パイプラインとを備え、
前記制御論理は、誤予測された分岐を検出すると、前記上位パイプラインから全ての命令を直ちにフラッシュするように動作可能であり、前記制御論理は更に、前記誤予測された分岐命令の実行を妨げるパイプライン・ハザードがないこと、および、より古い命令全ての実行を妨げるパイプライン・ハザードがないことをコンファーム後に、前記誤予測された分岐命令を実行のためにコミットすること、コミットされていない命令全てを前記下位パイプラインからフラッシュするように動作可能であることを特徴とし、
ここにおいて、命令をコンファームする際に、当該命令が、誤予測された分岐命令である場合には、命令順序付けメカニズムにおいて、コンファームした命令が誤予測された分岐命令であることを示す誤予測された分岐(MPB)命令フラグまたはビットフィールドをセットすること、及び、命令をコンファームする際に、当該命令が、誤予測された分岐命令である場合には、命令順序付けメカニズムにおいて、コンファームした命令が誤予測された分岐命令であることを示す誤予測された分岐命令インジケータをセットすることを更に備え、前記制御論理は、前記下位パイプラインにおける各命令に関し、何れの命令がコンファームされた状態であり、および何れの命令がコミットされた状態であるかをトラックするように動作可能な命令順序付けメカニズムを含み、および前記誤予測された分岐命令が、コミットされた最も新しい命令である場合、コミットされていない命令全てを前記下位パイプラインからフラッシュするように更に動作可能な命令順序付けメカニズムを含む、プロセッサ。
【請求項9】
前記制御論理は更に、前記上位パイプラインをフラッシュした後のサイクルにおいて、正しい分岐ターゲット・アドレスから命令をフェッチするように動作可能である請求項8に記載のプロセッサ。
【請求項10】
前記制御論理は更に、前記上位パイプラインのフラッシュ後、前記上位パイプラインの終点に保留を設置し、コミットされていない命令全てを前記下位パイプラインからフラッシュすると、前記保留を除去するように動作可能である請求項9に記載のプロセッサ。
【請求項11】
前記命令順序付けメカニズム内の各エントリは、関連付けられた命令が、誤予測された分岐命令であるか否かを示すインジケーションを含む請求項8に記載のプロセッサ。
【請求項12】
分岐命令を実行する下位パイプラインの各々は、分岐命令が誤予測されたと判定された場合、誤予測された分岐インジケーションを、前記命令順序付けメカニズム内に設定するように動作可能なコンファーム・ステージを含む請求項11に記載のプロセッサ。
【請求項13】
汎用レジスタ(GPR)論理識別子を物理レジスタに動的に関連付けるように動作可能なGPRファイルを更に備え、前記GPRファイルは、
複数の物理レジスタと、
現在のGPR論理識別子全ての物理レジスタへのマッピングを含む推測的再命名テーブル(SRT)と、
コミットされた命令のみについて、GPR論理識別子の物理レジスタへのマッピングを含むコミット済再命名テーブル(CRT)とを備え、
前記制御論理は、コミットされていない命令全てを前記下位パイプラインからフラッシュすると、前記CRTの内容を前記SRTにコピーするように動作可能である請求項8に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、パイプライン化されたプロセッサにおける分岐予測に関し、特に、性能を最大化し、誤予測された分岐命令を効率的に訂正するために、同じパイプラインの2つのセグメントを異なる時間に個々にフラッシュするシステム及び方法に関する。
【背景技術】
【0002】
現代のプロセッサは、各々が複数の実行ステップを有する連続命令が、実行中オーバラップされる、パイプライン化されたアーキテクチャを用いる。最大性能のために、命令は、パイプラインを絶え間なくフローしなければならない。しかし、命令はしばしば、例えば命令間のデータ依存、メモリ・アクセスに関する遅延、十分なパイプライン・リソースを命令に割り当てることの不可能性等のような様々な理由によってパイプライン内でストール状態となる。パイプラインのストールを最小化し、それらを効率的に解決することが、改善されたプロセッサ性能を達成するための重要要件である。
【0003】
現代の現実世界プログラムは、条件付分岐命令を含み、その実際の分岐挙動は、命令がパイプラインの深部で評価されるまで知られない。昨今のプロセッサは、条件付分岐命令の分岐挙動がパイプライン内で早期に予測され、分岐予測に基づいて、プロセッサが命令をフェッチしてそれを推測的に実行し、それらに推測的にパイプライン・リソースを割り当てる、様々な形式の分岐予測を用いる。実際の分岐挙動が決定されると、分岐が誤予測されていた場合、推測的にフェッチされた命令はパイプラインからフラッシュされなければならず、推測的に割り当てられたリソースは割当を解除され、分岐予測以前の状態に戻されなければならず、新たな命令が正しい分岐ターゲット・アドレスからフェッチされなければならない。
【0004】
一方では、正しい命令がフェッチされ、パイプライン内にランチされ、分岐誤予測によって生じる遅延が最小化されるように、パイプラインは理想的には、誤予測を検出すると直ちにフラッシュされるべきである。他方では、誤った分岐経路からフェッチされた命令は、推測的実行の様々なステージにあり、様々なプロセッサ・リソースを推測的に割り当てられていることがある。リソースを分岐予測前の状態に復元するために、これらの割当を直ちに「解く」ことは困難であり、多くのプロセッサ・サイクルをもたらし、及び/又は、推測的に割り当てられたリソースの多くの複写コピーを必要としうる。パイプラインを直ちにフラッシュすることによって生じるペナルティは、例えばスーパースカラ・プロセッサのような、順不同命令実行をサポートするプロセッサにおいて、関連する命令エイジ(instruction age)のトラッキングという更なる試練によって更に悪化する。この命令エイジのトラッキングは、(プログラム順序において)誤予測された分岐命令より後にフェッチされた命令のみがフラッシュされることと、(プログラム順序において)分岐命令より前の命令は、それらがパイプライン内で分岐命令より後であっても全て実行されることとを確実にする必要がある。
【発明の概要】
【0005】
分岐誤予測を判定すると、プロセッサは、(理想的には)数サイクルしか通常の実行を継続しないことによって、誤ってフェッチされ推測的に実行された命令を自身のパイプラインからフラッシュし、例外のイベントにおいてパイプラインのフラッシュを処理する既存のハードウェアを用いるタスクを容易にすることができる。この処理は、分岐誤予測に応じてパイプラインをフラッシュすることの複雑さ及びコストを劇的に低減することができる。しかし、それによって生じる更なる遅延は、パイプラインを直ちにフラッシュし、正しい分岐ターゲット・アドレスから迅速に命令をフェッチするという目標に反する。
【0006】
1つ又は複数の実施形態によると、(プログラム順序を外れる命令より前の)上位パイプラインは、分岐命令が誤予測されたことを検出すると直ちにフラッシュされ、正しい分岐ターゲット・アドレスから命令を直ちにフェッチすることを可能とする。パイプラインの下位部分の各々は、誤予測された分岐命令がコンファームするまで実行を継続することができ、その時点で、コミットされていない命令全てが下位パイプラインからフラッシュされる。既存の例外パイプライン・フラッシュ・メカニズムは、誤予測された分岐識別子を追加することによって、下位パイプラインをフラッシュすることの複雑さ及びハードウェア・コストを低減することができる。
【0007】
1つの実施形態は、順不同実行を可能とする、パイプライン化されたプロセッサにおいて命令を実行する方法に関する。分岐誤予測を検出すると、上位パイプライン、すなわち、命令がプログラム順序を外れることができるポイントより前の部分のパイプラインがフラッシュされる。誤予測された分岐命令を実行のためにコミットすると、コミットされていない命令全てが、下位パイプライン、すなわち、命令がプログラム順序を外れることができるポイントより後の部分のパイプラインからフラッシュされる。
【0008】
別の実施形態は、プロセッサに関する。このプロセッサは、命令が順不同となりうるポイントより前の上位パイプライン、及び命令が順不同となりうるポイントを越えた1つ又は複数の下位パイプラインを備えたセグメント化命令実行パイプラインと、制御論理とを含む。制御論理は、誤予測された分岐を検出すると、上位パイプラインから全ての命令をフラッシュするように動作可能であり、更に、誤予測された分岐命令を実行のためにコミットすると、コミットされていない命令全てを下位パイプラインからフラッシュするように動作可能である。
【図面の簡単な説明】
【0009】
【
図1】
図1は、分岐誤予測のためにフラッシュするセグメント化されたパイプラインを有する、パイプライン化されたスーパースカラ・プロセッサの1つの実施形態の機能ブロック図である。
【
図2】
図2は、
図1のプロセッサにおける命令実行の方法のフロー図である。
【0010】
図1は、分岐誤予測のためにフラッシュするセグメント化されたパイプラインを有するプロセッサ10の機能ブロック図を示す。プロセッサ10は、命令順序付けメカニズム(IOM)13を含む制御論理11に従って、命令実行パイプライン12内の命令を実行する。パイプライン12は、本明細書において更に詳細に説明されるように、上位部分14と下位部分16とに論理的に分割される。パイプライン12は、複数の並行な下位パイプライン16a、16bを有するスーパースカラ設計であることができる。パイプライン14、16は、パイプ・ステージ内に構成された様々なレジスタすなわちラッチ18、及び、例えば算術論理演算ユニット(ALU)(図示せず)のような論理回路及び計算回路を含む。汎用レジスタ(GPR)ファイル20は、メモリ階層の最上位を備えるレジスタを提供する。本明細書で説明されるように、GPR20は、GPRリソースを推測的に命令に割り当てるための推測的再命名テーブル(Speculative Renaming Table)(SRT)22及びコミット再命名テーブル(Committed Renaming Table)(CTR)24を含むことができる。
【0011】
上位パイプライン14は、命令側変換索引バッファ(ITLB)28によって管理されるメモリ・アドレス指定及び許可によって、命令キャッシュ(Iキャッシュ、すなわちI$)26から命令をフェッチする。データは、主要変換索引バッファ(TLB)32によって管理されるメモリ・アドレス指定及び許可によって、データ・キャッシュ(Dキャッシュ、すなわちD$)30からアクセスされる。様々な実施形態において、ITLB28は、TLB32の一部のコピーを備えることができる。あるいは、ITLB28及びTLB32は統合されうる。同様に、プロセッサ10の様々な実施形態において、Iキャッシュ26及びDキャッシュ30は一体化されうる。
【0012】
Iキャッシュ28及び/又はDキャッシュ30は、メモリ・インタフェース36の制御下で、主(オフチップ)メモリ34へのアクセスをもたらす(図示されないが、プロセッサ10と主メモリ34との間に他のキャッシュが挿入されうる)。プロセッサ10は、入力/出力(I/O)インタフェース38を含み、様々な周辺デバイス40、42へのアクセスを制御することができる。当業者は、プロセッサ10の多くの変形例が可能であることを理解するであろう。例えばプロセッサ10は、Iキャッシュ26及びDキャッシュ30の何れか又は両方について、第2レベル(L2)キャッシュを含むことができる。更に、プロセッサ10内に示された機能ブロックのうちの1つ又は複数が、特定の実施形態から省略されうる。
【0013】
上位パイプライン14と、1つ又は複数の下位パイプライン16とへのパイプライン12の論理分割は、命令の順序とは無関係に、何れの命令が上位パイプライン14から直ちにフラッシュされうるかによる確実性によって決定される。特に、上位パイプライン14は、命令がプログラム順序を外れる時点より前に、パイプライン12の一部として定められる。同様に、下位パイプライン16は、上位パイプライン14の後に、パイプライン12の一部として定められる。順不同実行をサポートするプロセッサにおいて、下位パイプライン16内の命令は、それらのプログラム順序以外でパイプ・ステージへディスパッチされうる。ほとんどの実施形態において、上位パイプライン14は、フェッチ・ステージ及び復号ステージ全てを備え、下位パイプライン16は、(スーパースカラ・パイプラインの場合)命令発行ステージ及び1つ又は複数の実行パイプラインを含むであろう。
【0014】
パイプライン12の論理分割によって、分岐誤予測が検出されると上位パイプライン14が直ちにフラッシュされ、正しい分岐ターゲット・アドレスから命令をフェッチするために必要な時間を最小化することが可能となる。更に、下位パイプライン14は実行を継続するので、誤予測された分岐より後に推測的にフェッチされた命令全てを下位パイプライン14から効率的にフラッシュするという利点を、既存の例外フラッシュ・メカニズムに対して有することも可能となる。
【0015】
上位パイプライン14のフラッシュは簡単である。上位パイプライン14は、命令がプログラム順序を外れる時点より前に定められ、誤予測された分岐の判定は、下位パイプライン16内の実行ステージにおいて起こるので、誤予測判定の時点では、上位パイプライン40内の命令は全て、誤予測された分岐命令よりも新しいことが知られる。すなわち、それらは全て分岐予測を信頼してフェッチされており、誤予測された分岐の検出後のサイクルにおけるように、全て安全にフラッシュされうる。これにより、プロセッサ10は、可能な限り早く正しい分岐ターゲット・アドレスからの命令のフェッチを開始することができ、パイプライン・ストール持続時間は最小化される。
【0016】
下位パイプライン16のフラッシュは問題を含む。命令はプログラム順序外で実行しているので、パイプライン内の誤予測された分岐より後の命令は全て、誤予測された分岐命令より新しく、安全にフラッシュすることを想定することができない。例えば、以下の命令LD、ADD、BRを考慮されたい。ここでLDはADDのためのオペランドを提供するが、BRは何れからも独立している。LDの動作は、メモリ・アクセスを必要とし、これは特にDキャッシュ30のミスの場合、パイプライン16をストールさせる可能性がある。ADDは無論、LDが完了するのを待たなければならない。しかし、独立したBR命令は、LD及びADDより前に、実行のために下位パイプライン16内へディスパッチされうる。BR条件評価が、それが誤予測されたことを検出すると、プロセッサは、BR命令より後に下位パイプライン16を単純にフラッシュすることができない。プロセッサは、何れもプログラム順序がBRより前であり実行されなければならないLD及びADDをフラッシュするであろう。
【0017】
多くのスーパースカラ・プロセッサ10は、命令順序付けマネージャ(IOM)をパイプライン制御論理11の一部として含む。IOMは、例えばサーキュラ・バッファ、FIFO等におけるように、真のプログラム順序での命令の表現を保持することによって、パイプラインを通した命令実行の順序、つまり、どの命令が、与えられた命令よりも古いか、又は新しいかをトラックする。命令表現に関連するフラグ又は属性によって、IOMは更に、命令依存性をトラックし、例外処理における手段となる。1つ又は複数の実施形態によると、プロセッサ10内のIOM13は、誤予測された分岐命令が発見されると、下位パイプラインを効率的にフラッシュすることを容易にする追加の回路及び論理を含む。例外処理におけるIOM13の役割の簡略な概観は、本明細書において開示され主張された実施形態に従う下位パイプライン16の誤予測された分岐のフラッシュを明らかにするであろう。
【0018】
例外は、パイプ・ステージが、自身の命令ステップの実行を完了することが不可能である場合常に生じる。例えば、メモリにデータを書き込む格納命令は、TLB32のルックアップが、メモリ・ページが読取専用であることを示した場合、例外をもたらしうる。他のタイプの例外は、当該技術において周知である。例外が発生すると、プロセッサ10は、パイプライン12内の、例外より前、すなわち古い命令全てを実行し、例外の原因である命令及び新たな命令全てをパイプライン12からフラッシュし、その後、割込み処理コードを実行しなければならない。IOM13は、何れの命令が「コンファーム(confirm)」され、何れの命令が「コミット(commit)」されたかをトラックすることによって、この処理を支援する。
【0019】
命令は、自身の実行を妨げるパイプライン・ハザードがない、すなわち、命令がストールしないであろうことが判定された場合、コンファームされる。例えば、算術又は論理演算を実行する命令は、どちらのオペランドも、前の命令から生成されているか、メモリからフェッチされたか、又はそうでない場合利用可能である、と知られている場合、コンファームされうる。命令は、その命令(及びそれより古い命令全て)がコンファームされた場合、コミットされる。コミットされた命令は、(その命令自身がコンファームされた場合)その命令、又は(それより古い命令全てがコンファームされた場合)それより前の任意の命令の何れかを妨げるパイプライン・ハザードがないので、実行を完了することができることを知られる。コミットされた命令は全て、実行しなければならない。
【0020】
例外処理中の従来のルールは、例外の原因である命令が「コミットされていない最後の命令」である場合、コミットされていない命令全てがパイプライン12からフラッシュされることである。すなわち、例外の原因である命令より前の命令全てが実行のためにコミットされているが、例外の原因である命令及びそれより新しい命令全てはコミットされていない。(例外の原因である命令を含む)コミットされていない命令がフラッシュされ、コミットされた命令は実行を継続する。新たな命令が、割込みハンドラ・アドレスからフェッチされる。
【0021】
例外の原因である命令とは異なり、誤予測された分岐命令は、実行されなければならず、フラッシュされてはならない。誤っているのは分岐予測のみであり、分岐命令自体は実行しなければならず、プログラム・フローを適切な分岐ターゲット・アドレスへ向けなければならない。従って、誤予測された分岐命令が「コミットされた最も新しい命令」である場合、コミットされていない命令は全て、下位パイプライン16a、16bからフラッシュされる。すなわち、誤予測された分岐命令及びそれより前の命令は全て実行のためにコミットされているが、(誤予測された分岐ターゲット・アドレスからフェッチされた)分岐より後の命令は全てコミットされていない。コミットされていない命令はフラッシュされ、(誤予測された分岐命令を含む)コミットされた命令は、実行を継続する。
【0022】
1つ又は複数の実施形態において、IOM13内の各エントリは、IOM13のエントリが生成されるとアサートされていない状態に初期化される、誤予測された分岐(MPB)フラグ又はビット・フィールドを含む。分岐命令は通常、他のデータ依存を有さないので、自身の分岐評価の直後にコンファームするであろう。コンファーム・パイプ・ステージは、分岐命令が実行される、各パイプライン16a、16b内の分岐条件評価ステージに後続し、コンファームされたフラグをIOM13内にセットする。コンファーム・パイプ・ステージは更に、分岐評価と自身の予測された値とを比較し、分岐が誤予測された場合、MPBフラグをIOM13内にセットする。実行のために命令をコミットしている時、MPBフラグに遭遇すると、IOM13及び関連する制御論理11は、上述された「コミットされた最も新しい命令」のルールに従って、下位パイプライン16のフラッシュを実施することができる。
【0023】
IOM13において、誤予測の検出から、誤予測された分岐命令のコンファーム及びコミットまでの遅延は通常、ほんの数サイクルしかかからないはずである。一方、上位パイプライン14の瞬時のフラッシュは、正しい分岐ターゲット・アドレスからの命令のフェッチが既に開始したことを意味する。例えば上述したLD、ADD、BRの例のようないくつかの場合、分岐誤予測の検出と、分岐命令のコンファームとの間には、下位パイプライン16のフラッシュを可能とする著しい遅延がありうる。下位パイプライン16のフラッシュが、例えば上位パイプライン14の深部といった、その後の更なるサイクルを要する可能性に対する予防措置として、上位パイプライン14と下位パイプライン16との境界に、あるいはそれより前に、パイプライン保留が構成されうる。下位パイプライン16のフラッシュが完了すると除去されるこの保留は、正しい分岐ターゲット・アドレスからフェッチされた任意の命令を誤ってフラッシュすることを防ぐ。条件付パイプラインの保留は当該技術において周知であり、本明細書における更なる説明なしでも当業者によって容易に実施されうる。
【0024】
下位パイプライン16をフラッシュすることの別の困難性は、フラッシュ後に推測的に割り当てられたプロセッサ・リソースの正しい状態を再格納することである。例えばレジスタの再命名は、論理GPR識別子(r0、r1、r2・・・)が、再命名テーブル内のマッピングを介して物理レジスタの大きなセットに動的にマップされる、GPR20管理の周知の方法である。レジスタ再命名システムは、順不同命令実行に内在するデータ・ハザードの多くを回避する。動作中、GPR20レジスタに書き込む命令毎に、新たな物理レジスタが割り当てられ、新たな論理対物理「再命名」が再命名テーブル内に記録される。GPR20を読み取る命令は、再命名テーブルのルックアップを介して、自身の論理GPR識別子を物理レジスタ番号に変換する。物理レジスタ番号は、パイプライン16を介して、自身の保持期間(tenure)中ずっと、レジスタ読取命令に関連付けられたままである。
【0025】
レジスタ再命名システムにおいて、GPR20は、同一の論理GPR識別子に書き込まれた前の値を「損なう(corrupt)」ことがない。この書込みは、新たな未使用の物理レジスタに向けられる。プログラム順序において書込み命令より後の命令は、新たな物理レジスタへ向けられ、書き込まれた値を取得する。プログラム順序において書込み命令より前の命令は、再命名テーブルによって(再命名動作前に)異なる物理レジスタへマップされており、その物理レジスタにアクセスし続けるであろう。従って、与えられたGPR識別子を書き込む命令は、そのGPR識別子から前の値を読み取る命令(読取ハザード後の書込み、すなわちWaR)、あるいはそのGPR識別子へ前の結果を書き込む命令(書込みハザード後の書込み、すなわちWaW)より前に実行されうる。このように、WaRデータ・ハザード及びWaWデータ・ハザードが回避される。
【0026】
論理GPR識別子の物理レジスタへの再命名は、プロセッサ・リソースの推測的な割当である。命令は順不同で実行することができるので、プログラム順序において書き込み命令より前の別の命令の実行より前に、論理GPR識別子を書き込むことができる(そして、新たな物理レジスタを割り当てられうる)。他の命令が例外をもたらすか、又は誤予測された分岐命令であった場合、書き込み命令はパイプライン16からフラッシュされることができ、その物理レジスタは割当を解除される。一方、書込み命令より前のレジスタ再命名は、保存されなければならない。
【0027】
任意の時間に(例えば誤予測された分岐を検出すると直ちに)下位パイプライン16をフラッシュし、復元することができるように、論理GPR識別子が物理レジスタに再命名される度に、すなわち、レジスタ書込み命令がパイプライン16内にランチする度に、再命名テーブルの別々のコピーが生成されなければならず、そのコピーは、レジスタ書込み命令が実行のためにコミットするまで保持されなければならない。これらのレジスタ・テーブルはその後、何れの命令がパイプライン16からフラッシュされるかに基づいて選択的に破棄されうる。このアプローチは、再命名テーブルの多数のコピーを保持することにおいても、パイプライン16をフラッシュすると再命名テーブルが破棄されなければならない論理トラッキングにおいても高価である。
【0028】
1つ又は複数の実施形態において、推測的再命名テーブル(SRT)22及びコミット済再命名テーブル(CRT)24の再命名テーブルの2つのコピーのみが保持される。SRT22は、論理GPR識別子が新たな物理レジスタに再命名される度に更新される。CRT24におけるレジスタ再命名マッピングは、関連するレジスタ書込み命令が実行のためにコミットされた場合しか更新されない。下位パイプライン16が、誤予測された分岐によってフラッシュされた場合、誤予測された分岐命令はコミットされた最も新しい命令であるので、(プログラム順序において)分岐より前にコミットされたレジスタ書込み命令は全て、CRT24に記録された自身のレジスタ再命名マッピングを有することが知られる。更に、(プログラム順序において)誤予測された分岐命令より後のレジスタ書込み命令によって実行された任意のレジスタ再命名は、SRT22にしか記録されず、CRT24には記録されないことが知られる。これらのレジスタ再命名は破棄されなければならず、下位パイプライン16の一部として割当を解除された関連する物理レジスタはフラッシュする。
【0029】
1つ又は複数の実施形態において、誤予測された分岐命令がコミットされた最も新しい命令である場合、誤予測された分岐によって下位パイプライン16がフラッシュされると、CRT24はSRT22へコピーされる。これにより、SRT22は、誤予測された分岐命令の時点での正しい状態となり、フラッシュされたレジスタ書込み命令に推測的に割り当てられた物理レジスタは割当を解除される。2つの再命名テーブルのみを保持し、誤予測された分岐命令がコミットするまで下位パイプライン16のフラッシュを遅延させることによって、推測的に割り当てられたプロセッサ・リソースの割当を解除するタスクは格段に簡略化される。
【0030】
図2は、1つ又は複数の実施形態に従う、順不同実行を可能とするパイプライン化されたプロセッサ10において命令を実行する方法を示す。関連する方法は、プロセッサ10が誤予測された分岐(MPB)を検出すると開始する(ブロック100)。これは通常、下位パイプライン16a、16b内の実行(EXE)ステージにおいて起こるであろう。MPBを検出すると直ちに、プロセッサ10は、後続するサイクルにおけるように、上位パイプライン14をフラッシュし(102)、正しい分岐ターゲット・アドレスからの命令のフェッチを開始する(ブロック114)。プロセッサ10はその後、下位パイプライン16がフラッシュされるまで上位パイプライン14を保留する(ブロック116)。この保留が解除されると、通常のプロセッサ10の実行が継続する(ブロック118)。
【0031】
同時に、プロセッサ10は、MPB命令がコンファームするまで下位パイプライン16において実行を継続する(ブロック120)。このコンファームは通常、分岐誤予測の検出の直後、パイプ・ステージ内で起こるであろう。MPB命令がコンファームすると(ブロック120)、コンファームされたフラグ及びMPBフラグがIOM13内に設定される(ブロック122)。通常の処理が、MPB命令がコミットするまで継続する。MPB命令が、コミットされた最も新しい命令である場合(ブロック124)、IOM13は、コミットされていない命令全ての下位パイプライン16からのフラッシュをトリガする(ブロック126)。プロセッサ10はその後、CRT24をSRT22へコピーし、通常の実行を継続する(ブロック118)。
【0032】
このように、実施形態は、上位パイプライン14を直ちにフラッシュすることによって、正しい分岐ターゲット・アドレスから命令をフェッチする際における遅延を最小化することと、下位パイプライン16を効率的にフラッシュすることによって、誤った分岐ターゲット・アドレスからフェッチされた命令のみを正しくフラッシュし、それらに推測的に割り当てられたプロセッサ・リソースの割当を解除するための複雑な計算及び重複したハードウェアを回避することとの両方を達成する。実施形態は本明細書において例外のフラッシュを実施するIOM13に関して説明されたが、本発明はそれらの実施形態に限定されない。特に、本明細書で説明された、誤予測された分岐命令がコミットされた最も新しい命令となる場合、コミットされていない命令全てを下位パイプライン16からフラッシュする命令トラッキング・メカニズムは、例外のフラッシュを実行する必要はない。更に、プロセッサ・リソース10の推測的割当は本明細書においてレジスタ再命名スキームに関連して説明されたが、例えば再命名バッファ等のようなその他多くの形式の推測的リソース割当が当該技術において周知である。
【0033】
本発明は、本発明の本質的特徴から逸脱することなく、本明細書に具体的に記載された方法以外の方法で実行されることができる。本実施形態は、全ての観点において、限定的ではなく例示的であるように見なされ、特許請求の範囲の意味および均等物の範囲内で実現する変形例全ては、特許請求の範囲に包含されることが意図される。
なお、以下に、出願当初の特許請求の範囲に記載された発明を付記する。
[発明1]
順不同実行を可能とするパイプライン化されたプロセッサにおいて命令を実行する方法であって、
分岐命令誤予測を検出すると、命令がプログラム順序を外れる時点より前に、上位パイプラインをフラッシュすることと、
前記誤予測された分岐命令を実行のためにコミットすると、前記命令がプログラム順序を外れる時点より後に、コミットされていない命令全てを下位パイプラインからフラッシュすることと
を備えた方法。
[発明2]
前記誤予測された分岐命令をコンファームすると、前記誤予測された分岐命令を、命令順序付けメカニズムにおけるように示すことを更に備えた発明1に記載の方法。
[発明3]
前記コミットされていない命令全てを下位パイプラインからフラッシュすることは、前記誤予測された分岐命令が、コミットされた最も新しい命令である場合、前記命令順序付けメカニズムにおける誤予測された分岐命令インジケータに応答して命令をフラッシュすることを備えた発明2に記載の方法。
[発明4]
前記プロセッサは2つ以上のパイプラインを含み、分岐命令を実行する各パイプラインは、前記命令順序付けメカニズムにおける誤予測された分岐命令インジケータを設定するように動作可能なコンファーム・ステージを含む発明2に記載の方法。
[発明5]
前記上位パイプラインのフラッシュ後、正しい分岐ターゲット・アドレスから命令をフェッチすることを備えた発明1に記載の方法。
[発明6]
前記上位パイプラインのフラッシュ後、コミットされていない命令全てが前記下位パイプラインからフラッシュされるまで、命令がプログラム順序を外れる時点以前の上位パイプラインを停止することを更に備えた発明5に記載の方法。
[発明7]
推測的に割り当てられた前記リソースが、レジスタ再命名リソースを含む発明6に記載の方法。
[発明8]
コミットされていない命令を前記下位パイプラインからフラッシュすると、コミットされていない命令に推測的に割り当てられたリソースの割当を解除する発明1に記載の方法。
[発明9]
コミットされていない命令に推測的に割り当てられたリソースの割当を解除することは、コミット済レジスタ再命名テーブルの内容を、推測的レジスタ再命名テーブルにコピーすることを含む発明8に記載の方法。
[発明10]
制御論理と、
命令がプログラム順序を外れることができるポイントより前の上位パイプラインと、前記命令が順序を外れることができるポイントより後の1つ又は複数の下位パイプラインとを備えた、セグメント化された命令実行パイプラインとを備え、
前記制御論理は、誤予測された分岐を検出すると、前記上位パイプラインから全ての命令をフラッシュするように動作可能であり、更に、前記誤予測された分岐命令を実行のためにコミットすると、コミットされていない命令全てを前記下位パイプラインからフラッシュするように動作可能であるプロセッサ。
[発明11]
前記制御論理は更に、前記上位パイプラインをフラッシュした後のサイクルにおいて、正しい分岐ターゲット・アドレスから命令をフェッチするように動作可能である発明10に記載のプロセッサ。
[発明12]
前記制御論理は更に、前記上位パイプラインのフラッシュ後、前記上位パイプラインの終点に保留を設置し、コミットされていない命令全てを前記下位パイプラインからフラッシュすると、前記保留を除去するように動作可能である発明11に記載のプロセッサ。
[発明13]
前記制御論理は、コンファーム及びコミットされた状態の命令をトラックするように動作可能な命令順序付けメカニズムであり、前記誤予測された分岐命令が、コンファームされた最も新しい命令である場合、コミットされていない命令全てを前記下位パイプラインからフラッシュするように更に動作可能な命令順序付けメカニズムを含む発明10に記載のプロセッサ。
[発明14]
前記命令順序付けメカニズム内の各エントリは、関連付けられた命令が、誤予測された分岐命令であるかを示すインジケーションを含む。
[発明15]
分岐命令を実行する下位パイプラインの各々は、分岐命令が誤予測されたと判定されると、誤予測された分岐インジケーションを前記命令順序付けメカニズム内に設定するように動作可能なコンファーム状態を含む発明14に記載のプロセッサ。
[発明16]
汎用レジスタ(GPR)論理識別子を物理レジスタに動的に関連付けるように動作可能なGPRを更に備え、前記GPRは、
複数の物理レジスタと、
現在のGPR論理識別子全ての物理レジスタへのマッピングを含む推測的再命名テーブル(SRT)と、
コミットされた命令のみについて、GPR論理識別子の物理レジスタへのマッピングを含むコミット済再命名テーブル(発明RT)とを備え、
前記制御論理は、コミットされていない命令全てを前記下位パイプラインからフラッシュすると、前記発明RTの内容を前記SRTにコピーするように動作可能である発明10に記載のプロセッサ。