(57)【要約】第１アドレッシングパターン（２０６）および第１タグ（２０８）を記憶するように構成されたエントリ（２２０）を含むメモリファイル（１３２）と、前記メモリファイルに結合される実行コア（１２４）とを含むシステムである。メモリファイルは、エントリに含まれる第１アドレッシングパターンをロード操作の第２アドレッシングパターンと比較するように構成される。第２アドレッシングパターンがエントリに記憶されている第１アドレッシングパターンに合致するとき、メモリファイルは第１タグによって指定されるデータ値をロード操作の推定結果にリンクするように構成される。実行コアはロード操作に依存する第２操作を実行するときに推測結果にアクセスするように構成される。
2005532613.tif 000002
【特許請求の範囲】
【請求項１】
第１アドレッシングパターン（２０６）および第１タグ（２０８）を記憶するように構成されたエントリ（２２０）を含み、前記エントリ内に含まれる前記第１アドレッシングパターンをロード操作の第２アドレッシングパターンと比較するように構成され、もし前記第２アドレッシングパターンが前記エントリに記憶されている前記第１アドレッシングパターンに合致するときは前記第１タグによって指定されるデータ値を前記ロード操作の推定結果にリンクするように構成されているメモリファイル（１３２）と、
前記メモリファイルに結合され、前記ロード操作に依存する第２操作を実行するときは、前記推測結果にアクセスするように構成される実行コア（１２４）とを備えるシステム。
【請求項２】
前記第１タグを前記第２操作のための推測オペランドソースタグとして転送する手段をさらに備える、請求項１記載のシステム。
【請求項３】
前記データ値を結果バスに転送し、前記データ値は前記ロード操作の前記結果であることを示すための手段をさらに含む、請求項１記載のシステム。
【請求項４】
前記メモリファイルは、前記第１タグを前記ロード操作のための推測ソースオペランドタグとして出力することにより、前記第１タグによって指定された前記データ値を前記ロード操作の結果に投機的にリンクするように構成されている、請求項１記載のシステム。
【請求項５】
前記第１アドレッシングパターンはストア操作のアドレッシングパターンの一部であり、前記ストア操作は前記ロード操作よりも早いプログラム順序で発生する、請求項１記載のシステム。
【請求項６】
前記ロード操作の前記推測結果が前記第１タグによって指定される前記データ値に正しくリンクされているかどうかの表示を出力するように構成されたロード／ストアユニットをさらに備える、請求項１記載のシステム。
【請求項７】
前記ロード／ストアユニットは、結果バス（１３０）に前記ロード操作の結果タグ出力することにより、前記ロード操作の前記推測結果が前記データ値に誤ってリンクされていることの表示を出力するように構成されている、請求項６記載のシステム。
【請求項８】
前記メモリファイルは、前記エントリに含まれる前記第１アドレッシングパターンをストア操作の第３アドレッシングパターンと比較するように構成され、もし前記第３アドレッシングパターンが前記第１アドレッシングパターンに合致するときは、前記メモリファイルは前記第１タグを前記ストア操作のソースオペランドを指定するのに用いた第２タグで置換するように構成されている、請求項１記載のシステム。
【請求項９】
第１操作の第１アドレッシングパターンを第２操作の第２アドレッシングパターンと比較するステップであって、前記第２操作は前記第１操作よりも早いプログラム順序において発生するステップと、
前記第１アドレッシングパターンが前記第２アドレッシングパターンに合致するときに、前記第２操作のためのオペランドのタグによって指定されるデータ値を前記第１操作の推測結果にリンクするステップと、
前記第１操作の結果に応じて、オペランドソースを有する第３操作を実行するステップとを含み、
前記実行するステップは前記タグによって指定される前記データ値にアクセスするステップを含む方法。
【請求項１０】
システムメモリ（２００）と、
前記システムメモリに結合されたマイクロプロセッサ（１００）とを備えたコンピュータシステムであって、前記マイクロプロセッサは、
第１アドレッシング（２０６）パターンおよび第１タグを記憶するように構成されたエントリ（２２０）を含み、前記エントリ内に含まれる前記第１アドレッシング（２０８）パターンをロード操作の第２アドレッシングパターンと比較するように構成され、もし前記第２アドレッシングパターンが前記エントリに記憶されている前記第１アドレッシングパターンに合致するときは前記第１タグによって指定されるデータ値を前記ロード操作の推定結果にリンクするように構成されているメモリファイル（１３２）と、
前記メモリファイルに結合され、前記ロード操作に依存する第２操作を実行するときは、前記推測結果にアクセスするように構成される実行コア（１２４）とを含む、コンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマイクロプロセッサに関し、さらに詳細にはマイクロプロセッサにおける投機的実行の実施に関する。
【背景技術】
【０００２】
スーパースカラーマイクロプロセッサは、複数の命令を並列に実行し、その設計に一致した最小限のメモリサイクルを用いることによって、高い性能を発揮する。しかしながら、命令と命令の間のデータおよび制御フローの依存性によって、所定の時間内に発行可能な命令数が制限されてしまう。結果として、ある種のプロセッサではさらなる性能向上を図るために投機的実行（speculative execution）をサポートしている。
【０００３】
投機の１タイプは制御フロー推測（speculation）である。制御フロー推測はプログラム制御が進行する方向を予測する。例えば、分岐が発生するかどうかを予測するために分岐予測が用いられる。様々なタイプの分岐予測が利用可能であり、単純に毎回同じ予測を行う方法から、履歴を基にした予測を行うために、プログラム中の過去の分岐の詳細な履歴を維持する方法まである。分岐予測は、ハードウェアの最適化、コンパイラの最適化、またはその両方によって容易になる。分岐予測機構によって提供される予測に基づいて、命令は投機的にフェッチされ、実行される。分岐命令が最終的に評価されるとき、分岐予測を検証することができる。もし予測が誤っていれば、誤った予測に基づいて投機的に実行されたすべての命令は廃棄される。
【０００４】
すでに提案されている投機の別のタイプはデータ推測（speculation）である。例えば、データ項目の値を予測する値予測（value prediction）は、データのパターンを監視して、それらのパターンの予測に基づいている（例えば、インデックスカウンタの変数値はその変数の過去の値がどのように増加したか、または減少したかを監視することによって予測可能である。アドレス予測はデータの場所の予測を含む。さらに別のデータ推測のタイプは、メモリシステムオプティミズム（memory system optimism）と呼ばれる。マルチプロセッサシステムでは、コヒーレンシチェックが完了する前に、プロセッサがそのプロセッサのローカルキャッシュからのデータを用いて命令を投機的に実行するときに、メモリシステムオプティミズムが生じる。同様に、他のタイプのデータ推測では、ロードが実行される時点で未だ計算されていないアドレスを持つストアの前に、たとえロードによってアクセスされるアドレスと同じアドレスに対してそのストアがデータをストアする可能性があるとしても、ロードを投機的に実行することを許可する。これらのデータ推測のすべてのタイプにおいて、根源的な条件を最終的に評価し、推測を検証するか、または失敗する。もし、最終的に推測が不正確であった場合、推測データを用いて実行された命令は再実行される（例えば、更新された、および／または非推測データを用いる）。
【０００５】
投機的実行（speculation）は、依存性チェックの完了を待たずに命令の実行を進めることができるので、正しい推測によって得られる効率が不正確な推測によって失われる効率を超えていれば、大幅な性能の向上が達成できる。従って、マイクロプロセッサにおいてデータ推測を実行し、誤推測に対する効率的な復旧機構を提供できるようになることが望ましい。
【発明の開示】
【発明の概要】
【０００６】
ロード操作（オペレーション）の推測結果をレジスタ値にリンクするための方法およびシステムの様々な実施形態が実現可能である。一実施形態では、システムは第１アドレッシングパターンおよび第１タグを記憶するように構成されたエントリを含むメモリファイルと、当該メモリファイルに結合された実行コアとを含む。メモリファイルは、エントリに含まれる第１アドレッシングパターンをロード操作の第２アドレッシングパターンと比較するように構成される。第２アドレッシングパターンがエントリに記憶されている第１アドレッシングパターンに合致するときは、メモリファイルは第１タグによって指定されるデータ値をロード操作の推測結果にリンクするように構成されている。実行コアは、ロード操作に依存する第２操作を実行するときに、推測結果にアクセスするように構成されている。
【０００７】
一実施形態の方法は、第１操作の第１アドレッシングパターンを第２操作の第２アドレッシングパターンと比較するステップを含む。第２操作はプログラムの順序において第１操作よりも早く発生する。第１アドレッシングパターンが第２アドレッシングパターンに合致するならば、第２操作についてのオペランドのタグによって指定されるデータ値は第１操作の推測結果にリンクされる。第１操作の結果に依存するオペランドソースを持つ第３操作はそのタグによって指定されるデータ値を用いて実行される。
【０００８】
本発明は、添付の図面に関連した以下の詳細な説明を参照することによって、よりよく理解することができる。
本発明は様々な変更や代替形態が可能であるが、本発明の個別の実施形態は、各図面において例示として示されたものであり、ここでは詳細に説明されている。しかしながら、ここで行われている実施形態の説明は、本発明を開示された特定の形態に限定することを意図するものではなく、逆に、本発明は、添付の特許請求の範囲により定義されるような本発明の精神や範囲の範疇であるすべての変更、均等物、及び代替物を含むものであることは理解すべきである。本明細書中の見出しは文章構成のためのものに過ぎず、本明細書の説明または特許請求の範囲を限定または解釈のために用いるべきものではないことに注意されたい。さらに、本明細書において用いられる「できる」という用語は、許可的な意味合い（つまり、そのような可能性を持つ、または可能である）に用いられ、強制的な意味合いではない（つまり、しなければいけない）ことに注意すべきである。「含む」という用語およびその派生語は「含むが、それに限定されない」ことを意味する。「接続される」という用語は「直接的または間接的に接続される」ことを意味し、「結合される」という用語は「直接的または間接的に結合される」ことを意味する。
【発明を実施するための最良の形態】
【０００９】
図１は、マイクロプロセッサ１００の一実施形態のブロック図である。マイクロプロセッサ１００はシステムメモリ２００に記憶された命令を実行するように構成される。これらの命令の多くはシステムメモリ２００に記憶されたデータを操作するものである。システムメモリ２００はコンピュータシステム全体に物理的に配置可能であり、１以上のマイクロプロセッサ１００からアクセスできる。
【００１０】
マイクロプロセッサ１００は命令（インストラクション）キャッシュ１０６およびデータキャッシュ１２８を含む。マイクロプロセッサ１００は命令キャッシュ１０６に結合されたプリフェッチユニット１０８を含む。ディスパッチユニット１０４は命令キャッシュ１０６から命令を受信して、スケジューラ１１８に操作（オペレーション）を発送するように構成される。１以上のスケジューラ１１８はディスパッチユニット１０４から発送された操作を受信し、１以上の実行コア１２４に操作を発行するように結合できる。実行コア１２４は、データキャッシュ１２８に対するアクセスを実行するように構成されたロード／ストアユニット１２６を含む。実行コア１２４によって生成された結果は、結果バス１３０に出力されうる。これらの結果は続いて発行される命令のためのオペランド値として使用可能であり、および／またはレジスタファイル１１６に記憶することができる。リタイアキュー（retire queue）１０２はスケジューラ１１８およびディスパッチユニット１０４に接続される。このリタイアキューは、発行された操作のそれぞれがいつリタイア可能であるかを決定するように構成される。一実施形態では、マイクロプロセッサ１００はｘ８６アーキテクチャと互換性を持つように設計される。マイクロプロセッサ１００はその他多くの要素を含んでいてもよいことに注意すべきである。例えば、マイクロプロセッサ１００は分岐予測ユニット（図示せず）を含んでいてもよい。
【００１１】
命令キャッシュ１０６は命令を、ディスパッチユニット１０４がそれらを受信する前に、一時的に記憶することができる。命令コードは、システムメモリ２００からプリフェッチユニット１０８を介してコードをプリフェッチすることにより、命令キャッシュ１０６に供給される。命令キャッシュ１０６は様々な構成で実装可能である（例えば、セットアソシアティブ、フルアソシアティブ、またはダイレクトマッピング）。
【００１２】
プリフェッチユニット１０８は命令キャッシュ１０６に記憶するためにシステムメモリ２００から命令コードをプリフェッチすることができる。一実施形態では、プリフェッチユニット１０８はシステムメモリ２００から命令キャッシュ１０６にコードをバースト転送するように構成することができる。プリフェッチユニット１０８は様々な特定のコードプリフェッチ技術およびアルゴリズムを採用することができる。
【００１３】
ディスパッチユニット１０４は、オペランドアドレス情報、即値データ（immediate data）および／または変位データ（displacement data）とともに、実行コア１２４が実行可能なビットエンコードされた操作を含む信号を出力する。ある実施形態では、ディスパッチユニット１０４はある種の命令を実行コア１２４内で実行可能な操作にデコードするためのデコード回路（図示せず）を含んでいてもよい。単純な命令は単一の操作に対応する。ある実施形態では、より複雑な命令は複数の操作に対応する。レジスタの更新を含む操作をデコードすると、レジスタファイル１１６中のあるレジスタ位置が推測レジスタ状態を記憶するために予約される（別の実施形態では、再整理バッファが各レジスタに対する一以上の推測レジスタ状態を記憶するために用いられる。レジスタマップ１３４は、レジスタのリネームを容易にするために、ソースおよび目的オペランドの論理レジスタ名を物理レジスタ名に変換することができる。レジスタマップ１３４は、レジスタファイル１１６内のどのレジスタが現在割り当てられているか、割り当てられていないかを追跡可能である。
【００１４】
図１のマイクロプロセッサ１００はアウトオブオーダー実行をサポートする。リタイアキュー１０２はレジスタ読み出しおよび書き込み操作のためにオリジナルのプログラムシーケンスの追跡を維持し、投機的命令実行および分岐予測ミスからの復帰を許可し、精確な例外処理を容易にする。ある実施形態では、リタイアキュー１０２は、推測レジスタ状態に対するデータ値の記憶を提供することにより、レジスタのリネームをもサポートする。多くの実施形態では、リタイアキュー１０２は再整理バッファと同じように機能する。しかしながら、典型的な再整理バッファとは異なり、リタイアキュー１０２はなんらのデータ値記憶をも提供しない。ある実施形態では、リタイアキュー１０２は、有効になった操作がバッファのボトムに移動し、それによって待ち行列の「一番上」に新しいエントリのための空きを作る、先入れ先出し構造として実装される。操作がリタイアすると、リタイアキュー１０２が推測レジスタ状態を記憶する必要がなくなったレジスタファイル１１６内のレジスタの割り当てを取り消し、レジスタマップ１３４に対してどのレジスタが現在空いているのかを示す信号を供給する。レジスタファイル１１６内（他の実施形態では、再整理バッファ内）の推測レジスタ状態をそれらの状態を生成した操作が有効になるまで維持することによって、分岐予測が間違っていたときに、予測ミスされたパスに従った投機的に実行された操作の結果がレジスタファイル１１６内で無効化される。
【００１５】
特定の操作をデコードして、もし要求されているオペランドがレジスタの位置であるときは、レジスタアドレス情報がレジスタマップ１３４（または再整理バッファ）に送られる。例えば、ｘ８６アーキテクチャにおいては、８つの３２ビット論理レジスタがある（例えば、ＥＡＸ，ＥＢＸ，ＥＣＸ，ＥＤＸ，ＥＢＰ，ＥＳＩ，ＥＤＩおよびＥＳＰ）。物理レジスタファイル１１６（または再整理バッファ）はこれらの論理レジスタの内容を変更する結果のための記憶装置を含み、アウトオブオーダー実行を許可する。レジスタファイル１１６内の物理レジスタは、デコード時に論理レジスタの一つの内容を修正するために決定される各操作の結果を記憶するために割り当てられる。従って、特定のプログラムを実行している間の様々な時点において、レジスタファイル１１６（または、他の実施形態では、再整理バッファ）は、与えられた論理レジスタの投機的に実行された内容を含む１以上のレジスタを持つ。
【００１６】
レジスタマップ１３４は物理レジスタをある操作の目的オペランドとして指定された特定の論理レジスタに割り当てる。ディスパッチユニット１０４は、レジスタファイル１１６が、所与の操作においてソースオペランドとして指定された論理レジスタに割り当てられた、既に割り当てられた１以上の物理レジスタを持つことを決定する。このレジスタマップ１３４はその論理レジスタに最も最近に割り当てられた物理レジスタのためのタグを供給することができる。このタグは、レジスタファイル１１６内のオペランドのデータ値にアクセスするために用いることができ、または結果バス１３０において転送される結果を介してデータ値を受信することができる。もしオペランドがメモリ位置に対応するならば、そのオペランド値はロード／ストアユニット２２２を介して結果バスに供給される（結果転送、および／またはレジスタファイル１１８への記憶のため）。スケジューラ１１８のひとつから操作が発行されると、オペランドデータ値が実行コア１２４に供給される。他の実施形態においては、操作が発送されると、オペランド値が対応するスケジューラ１１８に供給される（その操作が発行されたときに、対応する実行コア１２４に供給する代わりに）。
【００１７】
ディスパッチユニット１０４の出力において供給されるビットエンコードされた操作および即値データは１以上のスケジューラ１１８に送られる。ここでは、スケジューラとは操作がいつ実行可能かを検出し、１以上の実行ユニットに対して準備完了操作（ready operation）を発行する装置である。例えば、予約装置（reservation station）はスケジューラである。各スケジューラ１１８は、実行コア１２４への発行待ちのいくつかの係属中の操作のための操作情報（例えば、オペランド値、オペランドタグ、および／または即値データとともにビットエンコードされた実行ビット）を保持することができる。ある実施形態では、スケジューラのそれぞれはオペランド値の記憶を提供しない。代わりに、各スケジューラは、いつオペランド値が実行コア１２４によって読み出し可能になるか（レジスタファイル１１６または結果バス１３０から）を決定するために、発行された操作およびレジスタファイル１１６において利用可能な結果を監視する。ある実施形態においては、各スケジューラ１１８は専用実行コア１２４と関係付けられる。他の実施形態においては、単一のスケジューラ１１８が２以上の実行コア１２４に対して操作を発行する。
【００１８】
スケジューラ１１８は実行コア１２４によって実行される操作情報を一時記憶するために提供されうる。上述のとおり、各スケジューラ１１８は係属中の操作のために操作情報を記憶することができる。さらに、各スケジューラはすでに実行済みであるが、再発行される可能性のある操作のための操作情報を記憶することができる。実行のためにその時に利用可能にされた任意の必要とされるオペランドの値に応答して、操作が実行のために実行コア１２４に対して発行される。従って、操作が実行される順番は、もともとのプログラム命令シーケンスの順番とは同じでない可能性がある。データ推測を含む操作を、それらが非投機的になるまでスケジューラ１１８内にとどめ、データ推測が間違っていたときに再発行可能にすることができる。
【００１９】
一実施形態では、実行コア１２４のそれぞれは、シフト、ローテート、論理演算、および分岐操作と同様に、加算および減算の整数数値演算も実行するように構成された部分を含む。浮動小数点ユニットも浮動小数点演算を提供にするために含めることができる。実行コア１２４の一以上がロード／ストアユニット１２６によって実行されるロードおよびストアメモリ操作のためのアドレス生成を実行するように構成可能である。
【００２０】
さらに実行コア１２４は分岐予測ユニットに対して条件分岐命令の実行に関する情報を提供することができ、それによってもし分岐予測ミスが発生したときに、分岐予測ユニットは命令処理パイプラインおよびリダイレクトプリフェッチユニット１０６に入力された、予測を誤った分岐に続く命令をフラッシュすることができるようにする。このリダイレクトプリフェッチユニット１０６は、次に命令キャッシュ１０６またはシステムメモリ２００から正しい命令セットのフェッチを開始する。そのような状況では、予測誤りのあった分岐命令の後に発生したもともとのプログラムシーケンス中の命令の結果は廃棄され、それらには投機的に実行され、レジスタファイル１１６に一時的に記憶されているものも含まれる。実行コア１２４内の部品によって生成された結果は、もしレジスタの値が更新されていれば、結果バス１３０においてレジスタファイル１１６に対して出力される。もしメモリ位置の内容が変更されていれば、実行コア１２４内で生成された結果はロード／ストアユニット１２６に対して供給される。
【００２１】
ロード／ストアユニット１２６は実行コア１２４とデータキャッシュ１２８との間のインターフェイスを提供する。一実施形態では、ロード／ストアユニット１２６は、係属中のロードおよびストアに関するデータおよびアドレス情報のためのいくつかの記憶位置を持つロード／ストアバッファを持つように構成される。さらに、このロード／ストアユニット１２６は、データコヒーレンシが維持されていることを保証するために、係属中のストア命令に対するロード命令の依存性チェックを実行することができる。
【００２２】
データキャッシュ１２８はロード／ストアユニット１２６とシステムメモリ２００との間で転送されるデータを一時的に記憶するために提供されるキャッシュメモリである。上述の命令キャッシュ１０６と同様に、データキャッシュ１２８はセットアソシアティブ構成を含む、様々な特定のメモリ構成において実装可能である。さらに、データキャッシュ１０６および命令キャッシュ１２８は、ある実施形態においては統一されたキャッシュとして実装可能である。
【００２３】
図２Ａは、ディスパッチユニット１０４の一実施形態を示す。この実施形態では、ディスパッチユニット１０４はレジスタマップ１３４およびメモリファイル１３２を含む。上述のとおり、レジスタマップ１３４はレジスタリネームを提供するように構成することができる。レジスタマップ１３４は各ソースおよび目的オペランドについての論理レジスタ名を受信して、その論理レジスタに直近に割り当てられた物理レジスタの物理レジスタ名を出力する。メモリファイル１３２はメモリファイルコントローラ２０２およびメモリファイル記憶装置２０４を含む。
【００２４】
メモリファイル記憶装置２０４は１以上のエントリ２２０を含む。各エントリ２２０は、アドレッシングパターン２０６と、そのエントリのアドレッシングパターンに関連するタグ２０８とを含む。各タグは、データ値を、それが生成されたときにそのデータ値がどこに記憶されているか（例えば、再整理バッファ内、またはレジスタファイル１１６内）を示すことにより特定する。例えば、例示の実施形態に示すように、それぞれのタグはレジスタマップ１３４によって指示されるように、そのデータ値を記憶するために割り当てられた物理レジスタを特定することができる。各アドレッシングパターンは、ある操作中のアドレスを特定するために用いられる情報のすべてまたは一部を含む。例えば、図２Ｂを概観すると、例示としてのアドレッシングパターン２０６が示されている。この実施形態では、アドレッシングパターン２０６はベース論理レジスタ名２１０、インデックス論理レジスタ名２１２、および変位２１４を含む。あるアドレッシングパターン２０６は、メモリ内の特別のセグメントを特定するレジスタのセグメント論理レジスタ名を含む。多くの実施形態では、メモリファイル記憶装置２０４に記憶されるアドレッシングパターン２０６はある操作について指定されたアドレッシング情報の全部は含まないことに注意する必要がある。例えば、メモリファイル記憶装置２０４内のエントリは変位フィールド２１４内の変位を指定するのに用いられる全部のビットの一部しか記憶しない。他の実施形態では、メモリファイルコントローラ２０２は、メモリファイル中のエントリが特定の操作のためのアドレッシング情報のすべてを記憶できるか否かに応じて、メモリファイル記憶装置２０４にエントリを割り当てるかどうかを選択的に選択する。例えば、もしメモリファイル記憶装置２０４中の各エントリが２４ビットの変位情報を含む特定の操作についての１６ビットの変位情報およびアドレッシング情報まで記憶できるならば、メモリファイルコントローラ２０２はその操作のアドレッシング情報に対してメモリファイルエントリを割り当てない。メモリファイル記憶装置２０４は、いくつかのレジスタ、ラッチ、フリップフロップ、またはある種の実施形態では他のクロック駆動される記憶装置によって実現可能である。別の実施形態では、メモリファイル記憶装置２０４は、１以上のＲＡＭ（ランダムアクセスメモリ）セルを含む。
【００２５】
メモリファイルコントローラ２０２は発送されていない操作中の指定されたアドレッシングパターンをメモリファイル記憶装置２０４内のエントリに記憶されたそれらに対して比較する。もしある操作のアドレッシングパターンがメモリファイル記憶装置２０４内のエントリに現在記憶されているどのアドレッシングパターンにも合致しないときは（つまり、その操作のアドレッシングパターンがメモリファイル記憶装置をミスした）、メモリファイルコントローラ２０２はその操作のアドレッシングパターンのすべてまたは一部を記憶するためにメモリファイル記憶装置２０４に新しいエントリを割り当てることができる。もしメモリファイル記憶装置２０４内に割り当てられる空きのエントリがない場合には、メモリファイルコントローラ２０２は、ＬＲＵ（Least Recently Used）、ＦＩＦＯ（先入れ、先出し）、ランダム置換などの置換技術を用いて上書きするエントリを選択する。割り当てられたエントリ内の操作のアドレッシングパターンの記憶に加えて、メモリファイルコントローラ２０２はさらに、その操作のアドレッシングパターンによって指定されたメモリ位置からロードされ、またはそのメモリ位置にストアされた値を特定するタグ（例えば、物理レジスタの名前）を記憶することができる。例えば、もしメモリからデータをロードする操作が処理されているならば、その操作に応答して割り当てられたエントリはそのロード操作の結果を記憶するために割り当てられた物理レジスタの名前を記憶することができる。もしあるメモリ位置へデータをストアする操作が処理されているならば、メモリファイルコントローラ２０２はメモリファイル記憶装置２０４にそのストア操作によってストアされる値を記憶するレジスタの物理レジスタ名を記憶することができる。
【００２６】
もしある操作のアドレッシングパターン（またはそのパターンの一部）がすでにメモリファイル記憶装置２０４内のエントリにすでに記憶されていたとすると（つまり、その操作のアドレッシングパターンがメモリファイル記憶装置でヒットした）、メモリファイルコントローラ２０２は合致するアドレッシングパターンを含むエントリを使用し、または変更することができる。もしロード操作（特定のアドレスからレジスタに対して値をロードする操作）が処理されているなら、メモリファイルコントローラ２０２は合致するエントリ内に記憶された物理レジスタ名２０８を出力することができる。もしストア操作（レジスタから特定のアドレスに対して値をストアする操作）が処理されているなら、メモリファイルコントローラ２０２は記憶されているデータのタグとともに合致するエントリに記憶されているタグ（例えば、物理レジスタ名２０８）を上書きすることができる。
【００２７】
もしロード操作を処理中で、そのロード操作がメモリファイル記憶装置２０４をヒットしたときは、メモリファイルコントローラ２０２から出力されたタグは、そのタグによって指定された記憶されている値をそのロード操作の推測結果に結びつけるために用いることができる。例えば、ある種の実施形態では、ロード操作がスケジューラ１１８に対して発送されたとき、メモリファイル１３２によって出力されたタグもそのスケジューラに供給される（例えば、推測ソースオペランドタグとして）。スケジューラ１１８はそのタグによって指定された値の利用可能性に応じて（例えば、レジスタファイル１１６において、または結果バス１３０において）、操作を発行する。実行コア１２４はロード操作を実行して、結びつけられた値が結果バス１３０上にそのロード操作の推測結果としてブロードキャストされるようにすることができる（ある実施形態では、ロードの結果として生成されたデータ値はそれ自身がフラグされることはなく、または推測値として指定されることに注意すべきである）。他の実施形態では、以下に述べるように、そのデータ値は推測マップにタグを記憶することによって、ロード操作の投機的結果に結びつけることができる。
【００２８】
この結びつけの結果、このタグによって指定されたデータ値は、推測結果を用いた依存的操作の実行を可能にするために、ロードの推測結果として、データ値が（例えば、レジスタファイル１１６内において、または結果バス１３０において）利用可能になりしだい転送される。多くの場合、これによりロード操作の推測結果を用いた依存的操作を、それらの実行がロード操作の非推測結果が利用可能になるまで遅延するよりも早く、実行することができる。ある実施形態では、ロード操作を実行することによって、データ値がロード操作の推測結果として結果バス１３０に出力されるように、データ値を転送することができる。例えば、一実施形態では、非推測ロードを実行するために３サイクルを費やす代わりに（ロードがデータキャッシュ１２８でヒットしたと仮定して）、データ値およびこのデータ値をロード結果として指定するタグを出力して、このロードを１サイクルで実行することができる。他の実施形態では、メモリファイルコントローラ２０２がこのタグ出力を発送の際に推測オペランドソースとして依存的操作（ロード操作によって生成されたオペランドを持つ操作）に直接供給することによって、このデータ値をより間接的な方法で転送することができる。このデータ値を転送する手段は、ロード操作を推測レジスタ対レジスタＭＯＶＥ操作として実行する、またはタグを推測オペランドソースタグとして依存的操作に供給するに変更するように構成されたディスパッチユニット、結びつけられた（リンクされた）データ値の利用可能性に応じて変更されたロードおよび／または依存的操作を発行するように構成されているスケジューラ、および結びつけられたデータ値をロードの結果として出力するか、または結びつけられたデータ値を用いて依存的操作を実行するように構成された実行コアのうちの一つ以上を含む。
【００２９】
ロード／ストアユニット１２６（または、マイクロプロセッサ１００内のリンクを検証するための他の手段）は、メモリファイル１３２によって指定された物理レジスタ内に記憶された値のリンクをロード操作の推測結果に対して検証する。もしリンクが間違っているならば、ロード／ストアユニット１２６そのロードを再発行させるか、および／または結果バス１３０にそのロード操作の正しい結果をブロードキャストする。ロードの再発行によって、ロードの推測結果を用いて実行したすべての依存的操作は再発行され、更新された、非推測値を用いて実行される。他の実施形態では、もしリンクが誤っていれば、プロセッサ１００は推測誤りの後に発生した操作をフラッシュして、ロード操作の正しい結果を用いてそれらの操作の実行を再開する。
【００３０】
図示するように、メモリファイル１３２は、データキャッシュ１２８（またはシステムメモリ２００）内のデータにアクセスする操作中のアドレッシングパターンを追跡する。結果として、物理レジスタに記憶されるレジスタ値はメモリ中の特定のアドレスに記憶された値に結びつけられる（リンクされる）。
【００３１】
メモリファイル１３２の操作をさらに説明するために、ディスパッチユニット１０４によって処理されるべき操作シーケンスが以下の操作を含むものと仮定する。
ＭＯＶＥ  ＥＢＸ，［ＥＤＸ＋ＥＡＸ−変位Ａ］  （ロード１）
ＭＯＶＥ  ＥＣＸ，［ＥＤＸ＋ＥＡＸ−変位Ａ］  （ロード２）
ＭＯＶＥ［ＥＤＸ＋ＥＡＸ−変位Ａ］，ＥＡＸ    （ストア１）
これらの操作のそれぞれはプログラム順序における１以上の介在操作によって分離することができる。図示するように、これら３つの操作のそれぞれは、ＥＤＸ＋ＥＡＸ−変位Ａという同じアドレッシングパターンを含む。
【００３２】
ロード１のアドレッシングパターンがメモリファイル１３２に供給されるとき、メモリファイルコントローラ２０２はメモリファイル記憶装置２０４においてロード１のアドレッシングパターンに合致するアドレッシングパターンを検索する。メモリファイル記憶装置２０４においてそのアドレッシングパターンはミスしたと仮定すると、メモリファイルコントローラ２０２は、ロード操作のアドレッシングパターンおよびレジスタマップ１３４から提供されるロード操作の目的物理レジスタの物理レジスタ名のすべてまたは一部を記憶するために、エントリを割り当てる（割り当てられていないエントリを用いて、またはすでに割り当てられているエントリに上書きすることによって）。ロード操作はメモリファイル記憶装置でミスしているので、メモリファイルコントローラ２０２はそのロード操作に対するタグを出力しない。
【００３３】
続いてロード２がメモリファイル１３２によって処理されるとき、そのアドレッシングパターンはロード１に応答して割り当てられたエントリ内のアドレッシングパターンに合致している（ロード１のエントリが介在する操作に応答して上書きされていないものと仮定する）。ロード２のアドレッシングパターンのメモリファイル記憶装置２０４でのヒットに応答して、メモリファイルコントローラ２０２は、ロード１の結果を記憶するために割り当てられた物理レジスタの物理レジスタ名を出力することができる。この物理レジスタ名を、ロード１によってロードされたデータ値をロード２の推測結果に対して結びつけるために用いることができる。
【００３４】
ストア１がメモリファイル１３２によって処理されるとき、そのアドレッシングパターンはロード１に応答して割り当てられたエントリにおいてヒットしうる（ここでも、介在する操作がこのエントリを上書きしていないと仮定する）。しかしながら、ロード１の結果を記憶するために割り当てられた物理レジスタの物理レジスタ名を出力する（ロード２について実行したように）代わりに、メモリファイルコントローラ２０２は、そのエントリに記憶されている物理レジスタ名２０８を、ストア１によってストアされたデータを含むレジスタの物理レジスタ名で上書きする。従って、後続のロード操作がこのエントリでヒットしたときは、メモリファイルコントローラ２０２は、ロード１の目的レジスタの物理レジスタ名を出力する代わりに、ストア１のソース物理レジスタの物理レジスタ名を出力する。
【００３５】
メモリファイル１３２は推測構造として使用されているので、メモリファイル記憶装置２０４に記憶されている情報の正確性は、マイクロプロセッサ１００の正確な動作にとって決定的なものではない（例えば、メモリファイル１３２における予測誤りは、マイクロプロセッサ１００の出力にエラーを生じさせない）。しかしながら、ロード操作の推測結果を物理レジスタ内に記憶された値に正確に結びつけることによって得られる利益を増大させ、および／または予測を誤った推測リンクによって生じる性能低下を減らすために、メモリファイル１３２の正確性を向上させることが望ましい。ある実施形態では、メモリファイル１３２の正確性は、アドレスを指定するのに用いられるレジスタの更新が検出されたときに、メモリファイル記憶装置２０４内のエントリを無効にすることで向上する。例えば、各アドレッシングパターンは、アドレス計算のためのベースおよびインデックスを特定するために用いられる１以上の論理レジスタ識別子を含みうる。もし後続の操作があるエントリのアドレッシングパターン２０６の一部として指定された論理レジスタの一つを変更するならば、そのエントリは無効にされうる。従って、図２Ａに示すように、エントリの無効化を実行するために、各操作の目的レジスタの論理レジスタ名をメモリファイル１３２に入力することができる。
【００３６】
さらに、ある実施形態では、特定のアドレスにおけるデータに書き込みアクセスする権限を得た他の装置を詮索するのに応じて、メモリファイル記憶装置２０４内のエントリは無効にされうる。同様に、推測誤りの検出に応じて、エントリは無効化されうる。一般的に、メモリファイル記憶装置２０４内のエントリの正確性に影響を与えうるような多くの条件が監視され、いつエントリを無効にするかを決定するために用いられる。しかしながら、メモリファイル１３２は推測構造であるため、もしある種の監視方法を実装するための追加のハードウェアコストが、メモリファイルの正確性の潜在的な改良を上回るならば、いくつかの実施形態ではこれらの監視方法のいくつかを実装しない。
【００３７】
メモリファイル１３２は、レジスタ値を推測ロード結果に結びつけるために使用されるべき操作ストリームにおいて互いに相対的に切り離された操作と操作の間の依存性を許容していることに注意する必要がある。従って、メモリファイルは、いくつかの介在操作によって分離可能な操作と操作の間の依存履歴を供給することができる。
【００３８】
図３は、ロード操作の推測結果をレジスタ値に結びつける方法の一実施形態の流れ図である。ステップ３０１において、タグがアドレッシングパターンに関連付けられ、両者が同じデータ値を記憶している可能性が高いことを示す。タグおよびアドレッシングパターンの両者は第１ロードまたはストア操作に対して指定される。例えば、第１操作がロード操作であるとすると、タグはそのロードの結果を記憶するために割り当てられた物理レジスタを指定し、アドレッシングパターンはそのロードのためのアドレスを計算するために用いられる。もし代わりに第１操作がストア操作であったとすると、このアドレッシングパターンはストアの目的アドレスを指示し、タグはそのストア操作によって記憶されるデータを指定する。ある実施形態では、このタグおよびアドレッシングパターンは、両方をメモリファイル中のあるエントリに記憶することによって関連付けられる。
【００３９】
もしロード操作のアドレッシングパターンが第１操作のアドレッシングパターンに合致すると、そのロードの推測値は、ステップ３０３−３０５に示すように、その第１操作について指定されたタグによって特定されるデータ値に結びつけられる。もしロード操作のアドレッシングパターンが第１操作のそれに合致しない場合は、そのロードのアドレッシングパターンおよびロードの目的についてのタグは、ステップ３０３−３１１に示すように、関連付けられる（例えば、両者をメモリファイルのあるエントリに記憶することによって）。さらに、ステップ３１３に示すように、ロードは通常データキャッシュにアクセスすることによって実行される。一実施形態では、ロード操作のアドレッシングパターンは２以上の過去の操作のアドレッシングパターンに対して比較される。例えば、ロードのアドレッシングパターンを、メモリファイルに現在記憶されているアドレッシングパターンのそれぞれに対して比較する。
【００４０】
もしロードの推測結果がタグによって指定されたデータ値に結びつくならば、ステップ３０７に示すように、そのデータ値は、ロード操作の推測結果として１以上の依存的操作に転送される。このデータ値は結果転送を介して、または以下で詳細に説明するように、依存的操作がデータ値を推測オペランドソースとして使用する指示を転送することによって、転送することができる。一実施形態では、もしそのデータ値が結果転送を介して転送されるならば、そのデータを生成した操作の実行を完了した１サイクル後に、依存的な操作は転送されたデータを用いて実行される。もしそのデータ値が、依存的操作が物理的レジスタを推測オペランドソースとして用いる指示を介して、転送されるならば、依存的操作はそのデータ値を生成した操作が実行を完了した後すぐに発行される。ステップ３０９に示すように、この推測結果は推測結果が検証される前に転送される。この推測結果はデータキャッシュにアクセスすることなく転送可能である（つまり、推測結果は、データキャッシュにアクセスすることによって生成される非推測結果よりも早く転送可能である）。
【００４１】
もし、推測結果がステップ３０９において正しいと検証されると、ロード操作はデータキャッシュのアクセスを実行することなく完了する。しかしながら、ステップ３０９においてもし推測結果が誤りであると判定されると、正しい結果を得るために（図示せず）データキャッシュへのアクセスが実行される。その場合、ロードの推測結果を用いて実行されたすべての依存的操作はロードされた正しい結果を用いて再実行される。ある状況においては、検証（ステップ３０９）が、結びつけられたデータ値がロードの推測結果として転送される（ステップ３０７）前に実行されることに注意してほしい。そのような状況では、ロードが普通に実行され、結びつき（リンク）が正しいと判定されると、そのデータ値がロード操作の非推測結果として転送される。
【００４２】
様々な実施形態において、ロード操作の推測結果をレジスタのデータ値に多くの異なった方法で結びつける。ある実施形態では、値はあるオペランドに対して２つのソース、推測ソースおよび非推測ソースを指定することによって結びつけられる。この推測ソースは結びつけられたデータ値であってもよい。推測ソースは、ロードの推測結果に結びつけられたデータ値を示すために、ロード操作に対して提供される。ある実施形態では、推測ソースはそのようなロード操作に依存する操作のために提供してもよい。従って、ある種のオペランドは２つのタグ、推測ソースを指定するタグと非推測ソースを指定するタグを持つ。そのような実施形態では、図４に示すように、各スケジューラ１１８は推測オペランドおよび非推測オペランドの両方に対してタグ記憶を提供する。
【００４３】
図４は、マイクロプロセッサ１００のなかに含まれるスケジューラ１１８の一実施形態を示す。例示の実施形態では、スケジューラ１１８はスケジューラコントローラ５０２および操作記憶部５０４を含む。ディスパッチユニットが操作を発送するのに応答して、スケジューラコントローラ５０２は、その操作に対応する情報を記憶するために、操作記憶部５０４内にエントリを割り当てる。例えば、操作記憶部５０４内のエントリ５２２は、ｏｐｃｏｄｅ（操作符号）フィールド５１０、１以上のオペランドフィールド、および結果フィールド５１６を含む。結果フィールド５１６は、そのエントリの操作結果が記憶される物理レジスタを指定するタグを記憶することができる。操作が発行されるとき、このタグは１以上のタグバス５２０のうちの一つによって各スケジューラ１１８に転送される。各スケジューラは、係属中の操作について、係属中の操作のオペランドがいつ利用可能になるかを決定するために、タグバス５２０において転送されたタグをオペランドタグ（以下で説明するように、推測および非推測の両方）と比較する。従って、そのソースオペランドタグがタグバス５２０に現れるのに応答して、操作が発行される（または発行準備完了としてマーキングされる）。
【００４４】
各オペランドフィールドは、推測オペランドソースを指定する推測タグおよび非推測オペランドソースを指定する非推測タグのための記憶を含む。例示のエントリ５２２には、オペランド１の２つのソースは非推測タグ５１２と推測タグ５１４とで指定されている。スケジューラ１１８は操作のオペランドが利用可能になる一以上の表示に応答して、操作を発行するように構成されている。オペランドは、もしそれが推測ソースまたは非推測ソースのどちらかから利用可能であれば、利用可能である。もしあるオペランドが推測ソースおよび非推測ソースの両方から利用可能であるならば、非推測ソースからの利用可能な値を用いて操作を実行する。ある実施形態では、スケジューラ１１８は、推測オペランドソースのみが利用可能である操作に対して、その非推測オペランドソースが優先的に利用可能になるように、操作の発行に順位付けを行う。
【００４５】
操作には、推測ソースを持つオペランドと推測ソースを持たない他のオペランドとが含まれうることに注意すべきである。さらに、ある種のソースは１つの操作については推測ソースとなり、他の操作については非推測ソースとなりうることに注意すべきである。ある実施形態では、ある操作が実行されるとき、各オペランドに対して一つのデータ値のみを読み出すことができる（例えば、実行コア１２４は推測オペランドソースまたは非推測オペランドソースのどちらかを読み出すことができる。しかし、両方を読み出すことはできない）。このことによって、レジスタファイル１１６に追加ポートを付加することが不必要になる。推測ソースおよび物理的ソースは同じ記憶位置（例えば、レジスタファイル１１６内）に記憶することができ、推測ソースにフラグすることはできず、またはある実施形態では推測ソースとして指定される。
【００４６】
多くの実施形態では、スケジューラ１１８は操作に割り当てられたエントリを、それらの操作が実行コア１２４に発行された後も維持するように構成される。１以上の推測オペランドの利用可能性に応じて、スケジューラ１１８から操作が発行されるとき、スケジューラはその操作に割り当てられたエントリ５２２を維持して、もし推測リンクが誤りであったときに操作を再発行できるようにすることが可能である。ある実施形態では、ロード／ストアユニットが、推測ロード結果が物理レジスタに記憶されているデータ値に結びつけられているときに生じる推測リンクを検証するように構成してもよい。もしその結びつけが正しいならば、正しい結果がリンクを介してすでに利用可能であるため、ロード／ストアユニットがそのロードの非推測結果をブロードキャストしないように構成可能である。その場合には、もしその操作に対する非推測オペランドソースを指定するタグが結果バス１３０にブロードキャストされるならば、スケジューラ１１８は操作を再発行するように構成可能である。
【００４７】
別の実施形態では、ロード／ストアユニットは、ブロードキャストをマスクするか、または推測リンクは正しく、そのロードを再発行するべきではないことを示す追加の状態ビットとともにその記憶結果をブロードキャストする。しかしながら、もし推測リンクが誤っているならば、ロード／ストアユニットは、そのロードの正しい結果を取得し、そのロードの結果をブロードキャストするために、データキャッシュおよび／またはメモリアクセスを実行する。結果が常にブロードキャストされる実施形態では、追加的な状態ビットが推測リンクが誤っていることを示す。従って、多くの実施形態では、マイクロプロセッサにおいて常に利用可能な同一のタグおよび結果バスを用いて、推測リンクが誤っていることを示すことができる。他の実施形態では、別の表示機構（例えば、予測誤りを示すために分離した結果バス１３０および／または結果タグバス５２０を用いる）を実装可能である。
【００４８】
図５は、推測オペランドソースおよび非推測オペランドソースの両方を持つ操作を発行し、再発行する方法の一実施形態の流れ図である。もしある操作の推測オペランドソースが利用可能であるならば、ステップ８０１−８０３に示すように、その操作は発行可能である。あるデータ値がレジスタファイル内の特定のレジスタに存在しているとき、またはそのデータ値が結果バスに出力されているとき、ある操作の推測オペランドソースは利用可能になる。ある状況において、同じオペランドについての操作の非推測オペランドソースは推測オペランドソースの前に利用可能であることに注意する必要がある。そのような状況では、推測オペランドソースが利用可能になる前に操作を発行することができるある実施形態では、推測ソースのその後の利用可能性によって操作の再発行を引き起こすことはない。
【００４９】
ステップ８０５に示すように、発行された操作は推測オペランドソースによって供給されるデータ値を用いて発行された操作を実行することができ、ステップ８０７に示すように、その操作の結果はブロードキャストされる。操作の結果をブロードキャストすることによって依存的操作が実行可能になる。
【００５０】
もし後の時点で推測ソースが誤りであったと判定されたときは（例えば、推測ソースから供給されたデータ値と非推測ソースから供給されたデータ値とが同じでない、または推測ソースのタグを生成するのに使用した推測リンクが誤りであった）、非推測ソースのタグを推測ソースの値が誤りであることの表示としてブロードキャストすることができる。非推測ソースのタグのブロードキャストには、それに応答してスケジューラが操作を再発行するような方法でのタグのブロードキャストが含まれる。例えば、ある実施形態では、スケジューラはタグがブロードキャストされ、そのタグに関連する状態フラグがある値に設定されているときに応答する。その他の実施形態では、関連する状態フラグは存在せず、スケジューラは非推測タグがブロードキャストされたときはいつでも操作を再発行するように構成することができる。
【００５１】
図６は、ディスパッチユニット１０４がマイクロプロセッサ１００に含まれる別の実施形態を示す。この実施形態では、ディスパッチユニット１０４はレジスタマップ１３４、メモリファイル１３２、および推測レジスタマップ８００を含む。レジスタマップ１３４と同様に、推測レジスタマップ８００は、論理レジスタ名を物理レジスタ名に変換する。しかしながら、推測レジスタマップ８００は論理レジスタ名を物理レジスタ名に投機的にマッピングすることができる（例えば、メモリファイル１３２が物理レジスタに記憶されている値をロード操作の推測結果に結びつけるのに対応して）。推測レジスタマップ８００は、レジスタデータ値に結びつけられるべきアドレッシングパターンを含まない操作についての推測オペランド値を許可する。例えば、もし論理レジスタＥＡＸについての有効な推測マップがあるならば、ＥＡＸをソースオペランドとして操作は２つのソースタグ、レジスタマップ１３４から供給される非推測タグと推測レジスタマップ８００から供給される推測タグとを持つ。操作はその推測ソースが利用可能になるとすぐに発行されるので、推測レジスタマップ８００は、介在するすべてのロードおよびストアをバイパスして、推測オペランドタグを介してデータ消費者をデータ生成者に直接結びつける。実施形態によっては（例えば、推測レジスタ状態についての記憶部を含む再整理バッファを持つような実施形態）、推測マッピングは物理レジスタ名以外のタグを記憶することがあることに注意すべきである。
【００５２】
推測レジスタマップ８００は、推測レジスタマップコントローラ８０２および推測レジスタマップ記憶部８０４を含む。推測レジスタマップ記憶部は一以上のエントリ８２０を含む。エントリ８２０のそれぞれは特定の論理レジスタと関連付けられ、その論理レジスタが現在投機的にマッピングされている物理レジスタの物理レジスタ識別子８１２を示す。各推測レジスタマップエントリ８２０は、そのエントリが現在有効か否かに関する表示（図示せず）をさらに含む。一実施形態では、推測レジスタマップ記憶部８０４は各論理レジスタについてのエントリを含む。他の実施形態では、推測レジスタマップ８０４は論理レジスタの数よりも少ないエントリを含む。そのような実施形態では、各エントリ８２０は、そのエントリが現在対応している論理レジスタの表示を含む。
【００５３】
推測レジスタマップコントローラ８０２は、ロード操作の推測結果が特定の物理レジスタ名で指定されるデータ値に結びつけられていることの表示に応答して、エントリ８２０を更新するように構成できる。例示の実施形態では、この表示はメモリファイル１３２から供給される。更新するエントリ８２０は、ロード操作の目的として指定される論理レジスタのためのエントリである。このエントリは、そのロード操作のためにメモリファイル１３２によって出力される物理レジスタ識別子を含むように更新することができる。他の実施形態では、メモリファイル１３２によって供給されるもの以外の表示に応答して推測レジスタマップエントリが生成される（これら実施形態のうちのあるものでは、ディスパッチユニット１０４はメモリファイルを含まない）。例えば、ディスパッチユニット１０４は条件付きＭＯＶＥ命令、ＣＭＯＶ  ＥＡＸ，ＥＢＸ  ｉｆＺを検出し、それに応答して、ＥＡＸに対する推測レジスタマップエントリが現在ＥＢＸにマッピングされている物理レジスタを指定するべきであることを示す。一般的に、推測レジスタマップエントリは、論理レジスタが特定の物理レジスタに投機的にマッピングされるべきであることを示す任意の予測機構に応答して生成することができる。
【００５４】
ある実施形態では、操作は、それらがレジスタマップ１３４に供給されるのと同じサイクルにおいて、推測レジスタマップ８００に供給される。レジスタマップ１３４がある操作のために非推測レジスタリネームを実行するときに、推測レジスタマップ８００は操作の推測ソースオペランドの一つを記憶するものとして指定されている論理レジスタのいずれかがある特定の物理レジスタにリンクされているかどうかを表示することができる。もし操作の論理レジスタソースの一つについて推測レジスタマップ記憶部８０４内に有効なエントリが存在するならば、推測レジスタマップコントローラ８０２はその論理レジスタのエントリに記憶されている物理レジスタ名を出力することができる。ディスパッチユニット１０４は、この操作がスケジューラ１１８に発送されるときに、この推測物理レジスタ名を推測ソースとして出力する。従って、もしＡＤＤ操作が推測レジスタマップ８００に供給され、ＡＤＤのソースの一つが推測レジスタマップ記憶部８０４に有効なエントリを持つならば、そのエントリ内で指定された物理レジスタのタグは推測ソースオペランドタグとしてスケジューラ１１８に供給されうる。上述のとおり、このスケジューラは推測および非推測オペランドタグの両方を記憶するように構成することができ、実施形態によっては、結果バスにブロードキャストされる非推測タグに応答して、操作を再発行（もしすでに発行されていれば）するように構成することができる。
【００５５】
特定の論理レジスタについてのデータ値が変更されるとの表示に応答して、推測マップ内のエントリは無効化される。例えば、もし操作ＡＤＤ  ＥＡＸ，ＥＣＸがディスパッチユニット１０４によって処理されているならば、ＡＤＤ操作はそのレジスタ値を変更するので、推測レジスタマップコントローラ８０２は現在ＥＡＸに割り当てられている推測マップエントリを無効にすることができる。
【００５６】
一般的に、推測オペランドタグは、一つの操作の推測結果があるレジスタデータ値にリンクされているときはいつでも、スケジューラ１１８に供給されうる。実施形態によっては、メモリファイル１３２およびいくつかのサイクルにわたって依存性を追跡するその他の構造（例えば、以下で説明するような推測レジスタマップ）が推測結果をレジスタ値に結びつけるために使用可能である。例えば、ディスパッチユニット１０４は、メモリファイル１３２がリンクを指定するのに応答して、操作のための推測タグを生成する。実施形態によっては、推測タグはそのような推測マップを用いることなく生成される。例えば、命令のシーケンスは、
ＡＤＤ  ＥＢＸ，ＥＢＸ  （加算１）
ＭＯＶＥ  ［アドレッシングパターンＡ］，ＥＢＸ  （ストア１）
ＡＤＤ  ［アドレッシングパターンＡ］，ＥＣＸ    （加算２）
を含む。
これらの命令は隣接した命令であってもよい（例えば、プログラムの順番においてそれらが相互に連続していてもよい）。これらの命令は、実行コア１２４での実行のために、次の要素の操作に分離することができる（物理アドレスに変換された論理アドレスとともに示す）。
ＡＤＤ  ＰＲ２，ＰＲ２，ＰＲ１  （加算１）
ＭＯＶＥ［アドレッシングパターンＡ］，ＰＲ２  （ストア１）
ＭＯＶ  ＰＲ３，［アドレッシングパターンＡ］  （加算１へのロード）
ＡＤＤ  ＰＲ４，ＰＲ３，ＰＲ５    （加算２への加算）
ＭＯＶ［アドレッシングパターンＡ］，ＰＲ４  （加算２に対するストア）
要素ロード、加算（add）および加算２のストア操作が発送される前に、ディスパッチユニット１０４は推測結果へのリンクを許しうるシーケンス中のいずれかの要素操作相互になんらかの依存性がないかを検出することができる。さらに、ストア１によって記憶されたデータはロードの推測結果に結びつけることができる（例えば、メモリファイルによって）。介在する操作が存在しないので、ディスパッチユニットは、同じ発送サイクルにおけるロード操作と加算操作（両方の操作は同じ命令から導かれる）の間の依存性を検出するのに必要なすべての情報を持つことができる。これら２つの依存性に基づいて、ディスパッチユニット１０４はストア１、ＰＲ２によって記憶されたデータのタグを加算２の一部として実行されたロード操作の推測結果に結びつけることができる。それによって、この推測リンクは、ディスパッチユニットが加算２の一部として実行された加算演算のソースをＰＲ２で記憶された値に結びつけることを可能にする。従って、ディスパッチユニットは、ＰＲ２がその加算のためのオペランドの一つのソースとして投機的に用いられていること、しかしそのＰＲ３はそのオペランドに対しては非推測ソースであることの表示を出力することができる。従って、一実施形態では、ディスパッチユニットから出力される操作およびオペランド識別子は次のように指定される。
ＡＤＤ  ＰＲ２，ＰＲ２，ＰＲ１  （加算１）
ＭＯＶ［アドレッシングパターンＡ］，ＰＲ２  （ストア１）
ＭＯＶ  ＰＲ３，［アドレッシングパターンＡ］  （加算２のためのロード）
ＡＤＤ  ＰＲ４，ＰＲ２＊，ＰＲ３，ＰＲ５  （加算２についての加算、ＰＲ２はＥＣＸについての推測ソース、ＰＲ３はＥＣＸについての非推測ソース）
ＭＯＶ［アドレッシングパターンＡ］，ＰＲ４  （加算２についての記憶）
【００５７】
他の実施形態では、ディスパッチユニット１０４は、ロード操作に依存する操作のための推測ソースオペランドを特定するようには構成されていない。代わりに、ディスパッチユニット１０４は、推測ロード結果を依存的操作に供給するために、ロード操作をレジスタ対レジスタＭＯＶＥ操作を含む１以上の操作に変換するように構成された、操作コンバータ（変換部）１８０を含む。ロード操作の変換は、ロード操作の推測結果と特定の物理レジスタ名によって指定されるデータ値との間にリンクが存在するとの表示に応答して実行できる。この表示はリンクディテクタ（検出部）１８２によって供給され、ある実施形態ではそれはメモリファイル１３２を含む。他の実施形態では、上述のとおり、リンクディテクタ１８２は、条件MOVE操作などの操作に応じて、データ値とデータ値を結びつける（リンクする）ように構成されるロジックを含みうる。
【００５８】
一実施形態では、操作コンバータはある操作についての入力ｏｐｃｏｄｅを、その操作についてレジスタ値とその操作の推測結果との間にリンクが検出されたかどうかの表示とともに受信する。もし操作がロードで、推測リンクが検出されると、操作コンバータはレジスタ対レジスタＭＯＶＥ操作のためにｏｐｃｏｄｅを出力する。ディスパッチユニット１０４は、リンクディテクションユニットからレジスタ対レジスタＭＯＶＥのためのソースオペランドタグとして出力されたタグを用いて、レジスタ対レジスタＭＯＶＥ操作を発送する。
【００５９】
実施形態によっては、操作コンバータは結果としてのレジスタ対レジスタＭＯＶＥを発送して、スケジューラがレジスタ対レジスタＭＯＶＥおよびそのレジスタ対レジスタＭＯＶＥ操作に割り当てられたエントリ内のもともとのロード操作に必要なオペランドタグを記憶するように構成される。これによって、もしレジスタ対レジスタのＭＯＶＥ操作の推測結果が誤りであることが検出されたときには、その操作をもともとのロード操作として再発行することを可能にする。これを実装するために、追加のソースオペランドを、ロード操作の変更から生じた各レジスタ対レジスタＭＯＶＥ操作に対して追加することができる（または、他の実施形態では、これを実装するために、すでに存在するソースオペランドを変更することもできる）。実施形態によっては、もともとのロードのためのアドレス計算を実行することにより、および／またはリンクされたデータ値を実際のロード結果データ値と比較することにより、レジスタ対レジスタＭＯＶＥ操作の推測結果を検証することができる。もし推測結果が誤りならば、正しいロード結果を得るために、データキャッシュがアクセスする。正しいロード結果を再ブロードキャストすることで、スケジューラに誤った値を用いて実行されたすべての依存的操作を再発行させることができる。
【００６０】
実施形態によっては、操作コンバータ１８０は、ロード操作を２面性（dual nature）操作に変換するように構成される。ロード操作のように、この２面性操作はアドレス計算とデータ移動とを含む。ロードとは異なり、２面性操作によって実行されるデータ移動はレジスタからレジスタへの移動（ＭＯＶＥ）である。さらに、この２面性操作によって実行されるデータ移動はアドレス計算が完了する前に始まる。このアドレス計算は推測リンクが正しいかどうかを検証するために用いられる。もし推測リンクが誤っていれば、この二重目的操作が通常のロード操作として再発行され、データキャッシュアクセスの完了したときにその結果が従属的操作に対して再ブロードキャストされる。
【００６１】
以下は、異なった実施形態においてこの操作シーケンスの例がどのように変換されるかを示す例である。
ＡＤＤ  ＰＲ２，ＰＲ１，ＰＲ１  （加算１）
ＳＴＯＲＥ［アドレッシングパターンＡ］，ＰＲ２  （ストア１）
ＬＯＡＤ  ＰＲ３，［アドレッシングパターンＡ］  （ロード１）
ＡＤＤ  ＰＲ４，ＰＲ３，ＰＲ３  （加算２）
このシーケンスでは、指定された操作を１以上の介在操作によって分離することが可能である。しかしながら、どの介在操作もアドレッシングパターンＡにおいて使用される値を変更せず、またはアドレッシングパターンＡから計算されたアドレスおよびＰＲ２に記憶されているデータ値を変更しないことが明らかであると仮定すると、ＰＲ２に記憶されているデータ値とアドレッシングパターンＡから計算されたアドレスに記憶されたデータ値との間に推測リンクが検出される。
【００６２】
一実施形態では、推測リンクディテクタ１８２による推測リンクの検出に応答して、操作コンバータ１８０はＬＯＡＤ１を二重目的ＭＯＶＥ操作、ＭＯＶ  ＰＲ３，ＰＲ２に変換する。レジスタソースと目的地（destination）とを指定することに加えて、この二重目的ＭＯＶＥ操作はさらにアドレッシングパターンＡをも指定することができ、それによってＬＯＡＤ１についてのアドレス計算が実行できる。しかしながら、二重目的ＭＯＶＥ操作のＭＯＶＥ部分はＥＣＸが利用可能になるとすぐに発行される。二重目的ＭＯＶＥ操作のＭＯＶＥ部分の結果がブロードキャストされるとすぐに、ＭＯＶＥ操作の推測結果をオペランドとして用いて加算２（ＡＤＤ２）が発行される。アドレス計算が実行されるとき、推測リンクが検証される。もし推測リンクが誤っていれば、ロード／ストアユニットはスケジューラに対して、スケジューラに二重目的ＭＯＶＥ操作をロード操作として再発行させる表示を供給する。ロード操作の結果はブロードキャストされ、ＭＯＶＥの推測結果を使用して実行された、加算２（ＡＤＤ２）などのすべての依存的操作を再発行させる。この二重目的操作は単一のスケジューラエントリを用いてスケジューリングされ、スケジューラ１１８はこの二重目的操作を２回、ロードのアドレス計算に１回、レジスタからレジスタへのＭＯＶＥのために１回、発行するために選択可能であることに注意すべきである。
【００６３】
他の実施形態では、操作コンバータ１８０は、推測リンクの検出に応答して、ＬＯＡＤ１を２つのリンクされた操作、ＬＯＡＤ  ＰＲ３,［アドレッシングパターンＡ］とＭＯＶ  ＰＲ３，ＰＲ２に変換する。二重目的操作を含む前の例とは異なり、これらのリンクされた操作はそれぞれ、単一のスケジューラエントリを共有するのではなく、スケジューラ１１８内のエントリを確保する。レジスタからレジスタへのＭＯＶＥ操作が発行されたとき、加算２などの依存的な操作が、ＰＲ３の推測値をオペランド値として用いて発行される。このＬＯＡＤ操作は特別なタイプのロード操作としてタグ付けされ、それによって、もし推測リンクが正しいと決定されたならば、ロードの結果タグはブロードキャストされない（または、ＭＯＶＥ結果は正しく、依存的操作を再発行すべきでないとの表示とともにブロードキャストされる）。さらに、もしロードおよびＭＯＶＥ操作の両方がそれらの結果を同じサイクルでブロードキャストしたならば、そのロード結果がＭＯＶＥの結果の代わりに依存的操作に用いられるように表示が供給される。実施形態によっては、どのタグにスケジューラが応答しなければならないかを示す追加のビットをマイクロプロセッサ１００内の各タグバスに追加することによってこれが生じる。もし、推測リンクが誤りであるなら（例えば、ロードの結果タグのブロードキャストによって示されるように）、ＭＯＶＥ操作はキャンセルされる（例えば、そのＭＯＶＥ操作をスケジューリングしたスケジューラ１１８が、現在レジスタからレジスタへのＭＯＶＥを割り当てているスケジューラのエントリの割り当てを取り消すことによって、その操作は再発行できない）。多くの実施形態では、スケジューラは、結果バスに再度現れるロード結果タグに応答して、推測ロード結果を用いて実行された任意の依存的操作を再発行するように構成されうる。
【００６４】
図８は、ロード操作が推測レジスタ間ＭＯＶＥ操作を含むように変換する方法の一実施形態を示す。図示するように、ステップ１４０１で、もし特定のタグによって指定されたデータ値とロード操作の推測結果との間のリンクが検出されると（例えば、メモリファイルによって）、ステップ１４０３に示すように、そのロード操作は、推測ロード結果にリンクされたデータ値のタグに等しいソースオペランドタグを持つレジスタからレジスタへのＭＯＶＥ操作を含むように変更される。レジスタからレジスタへのＭＯＶＥ操作の実行には、ステップ１４０５において、ロード結果のタグとともに、そのタグによって指定されたデータ値を結果バスに出力することを含む。
【００６５】
ステップ１４０９において、推測結果は検証される（例えば、もともとのロードについてアドレス計算を実行することにより）。もし推測結果が正しければ、そのロード結果は結果バスに再ブロードキャストされない（または、代わりに、そのロード結果を、その再ブロードキャストされた結果に応答して依存的操作を再発行すべきでないとの表示とともに再ブロードキャストする）。もし、推測結果が誤りであれば、正しいロード結果を取り出すためにデータキャッシュにアクセスし、正しいロード結果を結果バスにブロードキャストする。これによって次に、推測結果値を用いて発行された任意の依存的操作の再発行を行う。状況によっては、推測結果の検証を、レジスタからレジスタへのＭＯＶＥ操作の実行前に行ってもよいことに注意すべきである。もし推測結果が誤りならば、レジスタからレジスタへのＭＯＶＥ操作は実行されない。
【００６６】
もしロード操作の推測結果とレジスタデータ値との間にリンクが検出されなければ（例えば、そのロードのアドレッシングパターンがメモリファイルにおいてミスした）、そのロードは変更されない。ステップ１４１７および１４１９に示すように、そのロードは普通に実行され、データキャッシュにアクセスし、その結果を結果バスにブロードキャストする。
【００６７】
図９は、コンピュータシステム４００の一実施形態のブロック図である。コンピュータシステム４００は、バスブリッジ４０２を介して、システムの様々な構成要素に結合されたプロセッサ１００を含む。プロセッサ１００は、これまでに説明したディスパッチユニット１０４、メモリファイル１３２、スケジューラ１１８および／または推測レジスタマップ８００の一実施形態を含む。コンピュータシステムの他の実施形態も可能であり、考慮される。図示されたシステムでは、メインメモリ２００がメモリバス４０６を介してバスブリッジ４０２に結合され、グラフィクスコントローラ４０８がＡＧＰバス４１０を介してバスブリッジ４０２に結合されている。いくつかのＰＣＩデバイス４１２Ａ−４１２ＢがＰＣＩバス４１４を介してバスブリッジ４０２に結合される。セカンダリバスブリッジ４１６が、ＥＩＳＡ／ＩＳＡバス４２０を介して１以上のＥＩＳＡまたはＩＳＡデバイス４１８に対する電気的インターフェイスを提供するために設けられる。この例では、プロセッサ１００はＣＰＵバス４２４を介してバスブリッジ４０２に結合され、選択的なＬ２キャッシュ４２８に結合される。実施形態によっては、プロセッサ１００は統合Ｌ１キャッシュ（図示せず）を含んでいてもよい。
【００６８】
バスブリッジ４０２は、プロセッサ１００と、メインメモリ４０４と、グラフィクスコントローラ４０８と、ＰＣＩバス４１４に接続されたデバイス群との間のインターフェイスを提供する。バスブリッジ４０２に接続されたデバイス群の一つからある操作を受信したとき、バスブリッジ４０２はその操作の目標（target）を特定する（例えば、特定のデバイス、またはＰＣＩバス４１４の場合にはＰＣＩバス４１４上の目標）。バスブリッジ４０２はその操作を目標デバイスに発送する。バスブリッジ４０２は一般的にソースデバイスまたはバスによって使用されるプロトコルからの操作を目標のデバイスまたはバスによって使用されるプロトコルに変換する。
【００６９】
ＩＳＡ／ＥＩＳＡバスにＰＣＩバス４１４に対するインターフェイスを提供することに加え、セカンダリバスブリッジ４１６は追加の機能を含みうる。セカンダリバスブリッジ４１６の外部に設けられるか、またはそれに統合される入出力コントローラ（図示せず）はコンピュータシステム４００に含めることができ、キーボードおよびマウス４２２ならびに様々なシリアルおよびパラレルポートのための動作サポートを提供する。別の実施形態では、プロセッサ１００とバスブリッジ４０２との間のＣＰＵバス４２４に外部キャッシュユニット（図示せず）を接続可能である。他の実施形態では、外部キャッシュはバスブリッジ４０２に結合され、その外部キャッシュのためのキャッシュコントロールロジックをバスブリッジ４０２に統合することができる。Ｌ２キャッシュ４２８はプロセッサ１００のバックサイド構成として示している。Ｌ２キャッシュ４２８はプロセッサ１００とは分離することも、プロセッサ１００のカートリッジ（例えば、スロット１またはスロットＡ）に統合することも、またはプロセッサ１００の半導体基板に統合することも可能である。
【００７０】
メインメモリ２００はアプリケーションプログラムが記憶され、プロセッサ１００がそこから第１に実行するメモリである。好適なメインメモリ２００はＤＲＡＭ（ダイナミックランダムアクセスメモリ）である。例えば、ＳＤＲＡＭ（シンクロナスＤＲＡＭ）またはラムバスＤＲＡＭ（ＲＤＲＡＭ）の複数バンクが適当である。
【００７１】
ＰＣＩデバイス４１２Ａ−４１２Ｂは、様々な周辺装置、例えばネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピーディスクドライブまたはドライブコントローラ、ＳＣＳＩ（Small Computer Systems Interface）アダプタ、および電話カードの例示である。同様に、ＩＳＡデバイス４１８は、例えばモデム、サウンドカード、ＧＰＩＢなどの様々なデータ取得カードまたはフィールドバスインターフェイスカードなどの様々な周辺装置の例示である。
【００７２】
グラフィクスコントローラ４０８はディスプレイ４２６上のテキストおよびイメージのレンダリングを制御するために提供される。グラフィクスコントローラ４０８は、メインメモリ２００へ、またはそこから効果的にシフトできる３次元データ構造をレンダリングする、当該技術分野で一般的に知られている典型的なグラフィクスアクセラレータを実装する。従って、グラフィクスコントローラ４０８はＡＧＰバス４１０のマスタとなり、バスブリッジ４０２内の目標インターフェイスに対するアクセスを要求し、受信することができるので、それによってメインメモリ２００へのアクセスが可能になる。専用のグラフィクスバスによって、メインメモリ４０４からの迅速なデータ取得を可能にする。ある種の操作に対しては、グラフィクスコントローラ４０８はさらにＡＧＰバス４１０上でＰＣＩプロトコルトランザクションを生成するように構成可能である。従って、バスブリッジ４０２のＡＧＰインターフェイスは、ＰＣＩプロトコル目標とともに、ＡＧＰプロトコルトランザクションおよび開始（initiator）トランザクションの両方をサポートする機能を含めることができる。ディスプレイ４２６はイメージまたはテキストを表示できる電気的表示装置である。適切なディスプレイ４２６はカソードレイチューブ（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）などである。
【００７３】
上の説明ではＡＧＰ、ＰＣＩおよびＩＳＡまたはＥＩＳＡバスが例として取り上げられているが、どのようなバスアーキテクチャでも必要に応じて置き換え可能であることに注意すべきである。さらに、コンピュータシステム４００は追加のマイクロプロセッサ（例えば、コンピュータシステム４００の選択的な要素として示すプロセッサ１００ａ）を含むマルチプロセッサコンピュータシステムであってもよいことに注意してもらいたい。プロセッサ１００ａはプロセッサ１００と同様のものでよい。さらに詳細には、プロセッサ１００ａは、プロセッサ１００の完全な複製であってもよい。プロセッサ１００ａは独立したバス（図９に示すように）を介してバスブリッジ４０２に接続してもよいし、プロセッサ１００とＣＰＵバス２２４を共有してもよい。さらに、プロセッサ１００ａは、Ｌ２キャッシュ４２８に類似した選択的なＬ２キャッシュ４２８ａに結合することも可能である。
【００７４】
図１０は、上述のディスパッチユニット１０４、メモリファイル１３２、スケジューラ１１８および／または推測レジスタマップ８００を備えるコンピュータシステム４００の別実施形態を示す。他の実施形態も可能であり、考慮される。図１０の実施形態では、コンピュータシステム４００は、いくつかのプロセッシングノード６１２Ａ，６１２Ｂ，６１２Ｃおよび６１２Ｄを含む。各プロセッシングノードは、各プロセッシングノード６１２Ａ−６１２Ｄに内蔵されたメモリコントローラ６１６Ａ−６１６Ｄを介して対応するメモリ６１４Ａ−６１４Ｄに結合される。さらに、プロセッシングノード６１２Ａ−６１２Ｄは、プロセッシングノード６１２Ａ−６１２Ｄ間の通信に用いられるインターフェイスロジックを備える。例えば、プロセッシングノード６１２Ａはプロセッシングノード６１２Ｂと通信するためのインターフェイスロジック６１８Ａと、プロセッシングノード６１２Ｃと通信するためのインターフェイスロジック６１８Ｂと、さらに他のプロセッシングノード（図示せず）と通信するための第３インターフェイスロジック６１８Ｃとを備える。同様に、プロセッシングノード６１２Ｂはインターフェイスロジック６１８Ｄ，６１８Ｅ，６１８Ｆを備え、プロセッシングノード６１２Ｃはインターフェイスロジック６１８Ｇ，６１８Ｈおよび６１８Ｉを備え、プロセッシングノード６１２Ｄはインターフェイスロジック６１８Ｊ，６１８Ｋおよび６１８Ｌを備える。プロセッシングノード６１２Ｄは、インターフェイスロジック６１８Ｌを介して、複数の入出力デバイス（例えば、ディジーチェイン構成のデバイス６２０Ａ−６２０Ｂ）と通信するように結合される。他のプロセッシングノードも同様の方法で他のＩ／Ｏデバイスと通信可能である。
【００７５】
プロセッシングノード６１２Ａ−６１２Ｄは、プロセッシングノード間通信のためにパケットベースのリンクを実装する。本実施形態では、リンクは単一方向信号線の組として実装される（例えば、信号線６２４Ａはプロセッシングノード６１２Ａからプロセッシングノード６１２Ｂへパケットを送信するのに用いられ、信号線６２４Ｂはプロセッシングノード６１２Ｂからプロセッシングノード６１２Ｃへパケットを送信するのに用いられる）。その他の信号線組６２４Ｃ−６２４Ｈは、図１０に示すように、他のプロセッシングノード間でパケットを送信するために用いられる。一般的に、信号線の組６２４のそれぞれは、１以上のデータ線、データ線に対応した１以上のクロック線、転送されるパケットのタイプを示す１以上の制御線を備える。このリンクはプロセッシングノード間の通信ではキャッシュコヒーレント形式で動作し、プロセッシングノードとＩ／Ｏデバイス間の（または、バスブリッジからＰＣＩバスまたはＩＳＡバスのような従来型の構成のＩ／Ｏバス）通信では非コヒーレント形式で動作する。さらに、このリンクは図示するようなＩ／Ｏデバイス間のディジーチェイン構成を用いて非コヒーレント形式で動作する。あるプロセッシングノードから他のプロセッシングノードへ送信されるパケットは１以上の介在ノードを通過する可能性があることに注意する必要がある。例えば、プロセッシングノード６１２Ａからプロセッシングノード６１２Ｄに送信されるパケットは、図１０に示すように、プロセッシングノード６１２Ｂまたはプロセッシングノード６１２Ｃを通過する。任意の適切なルーティングアルゴリズムを用いることができる。コンピュータシステム４００の他の実施形態では、図１０に示した実施形態よりも多くのプロセッシングノードを備えていてもよいし、より少ないプロセッシングノードを備えていてもよい。
【００７６】
一般的に、パケットはノード間の信号線６２４において１以上のビット時間として送信される。１ビット時間は、対応するクロック線上のクロック信号の立ち上がりエッジ、または立ち下がりエッジである。パケットには、トランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシを維持するためのプローブパケット、およびプローブおよびコマンドに応答する応答パケットが含まれる。
【００７７】
メモリコントローラおよびインターフェイスロジックに加えて、プロセッシングノード６１２Ａ−６１２Ｄは１以上のプロセッサを含みうる。おおざっぱに言えば、プロセッシングノードは少なくとも１つのプロセッサを含み、必要に応じてメモリおよび他のロジックと通信するためのメモリコントローラを選択的に含む。さらに詳細には、各プロセッシングノード６１２Ａ−６１２Ｄはプロセッサ１００の１以上の複製を含みうる。外部インターフェイスユニット１８は、メモリコントローラ６１６とともに、ノード内にインターフェイスロジック６１８を含む。
【００７８】
メモリ６１４Ａ−６１４Ｄは任意の適切なメモリ装置を含む。例えば、メモリ６１４Ａ−６１４Ｄは、１以上のラムバスＤＲＡＭ（ＲＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）スタティックＲＡＭなどを含みうる。コンピュータシステム４００のアドレス空間は、メモリ６１４Ａ−６１４Ｄにわたって分割される。各プロセッシングノード６１２Ａ−６１２Ｄはどのアドレスがメモリ６１４Ａ−６１４Ｄのうちのどれにマッピングされているか、ゆえに特定のアドレスに対するメモリ要求がどのプロセッシングノード６１２Ａ−６１２Ｄにルーティングされるべきかを決定するために用いられるメモリマップを備える。一実施形態では、コンピュータシステム４００内のアドレスについてのコヒーレンシポイントは、そのアドレスに対応するバイトを記憶するメモリに結合されたメモリコントローラ６１６Ａ−６１６Ｄである。言い換えれば、メモリコントローラ６１６Ａ−６１６Ｄは、対応するメモリ６１４Ａ−６１４Ｄに対する各メモリアクセスがキャッシュコヒーレントな方法で生じることを保証する責任がある。メモリコントローラ６１６Ａ−６１６Ｄは、メモリ６１４Ａ−６１４Ｄにインターフェイス接続するための制御回路を備える。さらに、メモリコントローラ６１６Ａ−６１６Ｄは、メモリ要求をキューするための要求待ち行列（request queue）を含む。
【００７９】
インターフェイスロジック６１８Ａ−６１８Ｌは、リンクからのパケットを受信し、リンクにおいて送信されるべきパケットをバッファリングするための様々なバッファを備える。コンピュータシステム４００は、パケット送信のための任意の適切なフロー制御機構を採用する。例えば、一実施形態では、各インターフェイスロジック６１８は、そのインターフェイスロジックが接続されるリンクの他端にある受信機内のバッファのタイプ別の数を記憶する。このインターフェイスロジックは、受信するインターフェイスロジックにパケットを記憶する空きのバッファがない限り、パケットを送信しない。パケットを前方にルーティングすることで受信バッファに空きができると、受信側のインターフェイスロジックは送信側のインターフェイスロジックにバッファが空いたことを示すメッセージを送信する。そのような機構は、「クーポンベース」システムと呼ばれる。
【００８０】
Ｉ／Ｏデバイス６２０Ａ−６２０Ｂは適切な任意のＩ／Ｏデバイスでよい。例えば、Ｉ／Ｏデバイス６２０Ａ−６２０Ｂは、そのデバイスが結合された他のコンピュータシステムと通信するためのデバイス（例えば、ネットワークインターフェイスカード、またはモデム）を含む。さらに、Ｉ／Ｏデバイス６２０Ａ−６２０Ｂは、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピーディスクドライブまたはドライブコントローラ、ＳＣＳＩ（Small Computer Systems Interface）アダプタ、および電話カード、サウンドカード、およびＧＰＩＢなどの様々なデータ取得カードまたはフィールドバスインターフェイスカードを含む。ここでは、「Ｉ／Ｏデバイス」という用語、および「周辺装置」という用語は同義に用いられていることに注意すべきである。
【００８１】
ここで、「クロックサイクル」または「クロック」という用語は、命令処理パイプラインの様々なステージがそれらのタスクを完了する時間間隔を意味する。命令および計算された値は、クロックサイクルを定義するクロック信号にしたがって、メモリ素子（レジスタまたはアレイなど）によって取得される。例えば、メモリ素子はクロック信号の立ち上がりまたは立ち下がりエッジに従って値を取得する。
【００８２】
これまでの開示を完全に理解したならば、当業者には様々な変形および変更が明白になるであろう。添付の特許請求の範囲はそのような変形および変更のすべてを包含するように解釈されることを意図したものである。
【産業上の利用性】
【００８３】
本発明は、一般的にマイクロプロセッサの分野で適用可能である。
【図面の簡単な説明】
【００８４】
【図１】マイクロプロセッサの一実施形態を示す図。
【図２Ａ】ディスパッチユニットの一実施形態のブロック図。
【図２Ｂ】一実施形態で使用されるメモリファイル記憶エントリの例を示す図。
【図３】ロード操作の推測結果を特定タグによって指定されたデータ値にリンクする方法の一実施形態を示す流れ図。
【図４】スケジューラの一実施形態のブロック図。
【図５】操作を発行し、データ推測が誤りであったとの表示に応答して操作を再発行する方法の一実施形態の流れ図。
【図６】ディスパッチユニットの別実施形態のブロック図。
【図７】ディスパッチユニットのさらに別の実施形態のブロック図。
【図８】推測データ値とともに操作を発行し、推測誤りから復帰する他の方法を示す流れ図。
【図９】コンピュータシステムの一実施形態を示す図。
【図１０】コンピュータシステムの別実施形態を示す図。
【図１】
2005532613.tif 000003
【図２Ａ】
2005532613.tif 000004
【図２Ｂ】
2005532613.tif 000005
【図３】
2005532613.tif 000006
【図４】
2005532613.tif 000007
【図５】
2005532613.tif 000008
【図６】
2005532613.tif 000009
【図７】
2005532613.tif 000010
【図８】
2005532613.tif 000011
【図９】
2005532613.tif 000012
【図１０】
2005532613.tif 000013
【手続補正書】
【提出日】平成16年7月2日(2004.7.2)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１アドレッシングパターン（２０６）および第１タグ（２０８）を記憶するように構成されたエントリ（２２０）を含み、前記エントリ（２２０）内に含まれる前記第１アドレッシングパターン（２０６）をロード操作の第２アドレッシングパターンと比較するように構成され、もし前記第２アドレッシングパターンが前記エントリ（２２０）に記憶されている前記第１アドレッシングパターン（２０６）に合致するときは前記第１タグ（２０８）によって指定されるデータ値を前記ロード操作の推定結果にリンクするように構成され、前記エントリ（２２０）内に含まれる前記第１アドレッシングパターン（２０６）と前記ロード操作の前記第２アドレッシングパターンとの比較は前記ロード操作の非推測結果の判定の前に発生する、メモリファイル（１３２）と、
前記メモリファイル（１３２）に結合され、前記ロード操作に依存する第２操作を実行するときは、前記推測結果にアクセスするように構成される実行コア（１２４）とを備えるシステム。
【請求項２】
前記第１タグ（１２８）を前記第２操作のための推測オペランドソースタグとして転送する手段をさらに備える、請求項１記載のシステム。
【請求項３】
前記データ値を結果バスに転送し、前記データ値は前記ロード操作の前記結果であることを示すための手段をさらに含む、請求項１記載のシステム。
【請求項４】
前記メモリファイル（１３２）は、前記第１タグ（２０８）を前記ロード操作のための推測ソースオペランドタグとして出力することにより、前記第１タグ（２０８）によって指定された前記データ値を前記ロード操作の結果に投機的にリンクするように構成されている、請求項１記載のシステム。
【請求項５】
前記第１アドレッシングパターン（２０６）はストア操作のアドレッシングパターンの一部であり、前記ストア操作は前記ロード操作よりも早いプログラム順序で発生する、請求項１記載のシステム。
【請求項６】
前記ロード操作の前記推測結果が前記第１タグ（２０８）によって指定される前記データ値に正しくリンクされているかどうかの表示を出力するように構成されたロード／ストアユニット（１２６）をさらに備える、請求項１記載のシステム。
【請求項７】
前記ロード／ストアユニット（１２６）は、結果バス（１３０）に前記ロード操作の結果タグ出力することにより、前記ロード操作の前記推測結果が前記データ値に誤ってリンクされていることの表示を出力するように構成されている、請求項６記載のシステム。
【請求項８】
前記メモリファイル（１３２）は、前記エントリ（２２０）に含まれる前記第１アドレッシングパターン（２０６）をストア操作の第３アドレッシングパターンと比較するように構成され、もし前記第３アドレッシングパターンが前記第１アドレッシングパターン（２０６）に合致するときは、前記メモリファイル（１３２）は前記第１タグ（２０８）を前記ストア操作のソースオペランドを指定するのに用いた第２タグで置換するように構成されている、請求項１記載のシステム。
【請求項９】
第１操作の第１アドレッシングパターン（２０６）を第２操作の第２アドレッシングパターンと比較するステップであって、前記第２操作は前記第１操作よりも早いプログラム順序において発生し、前記比較するステップは前記第１操作の非推測結果の判定の前に発生するステップと、
前記第１アドレッシングパターン（２０６）が前記第２アドレッシングパターンに合致するときに、前記第２操作のためのオペランドのタグによって指定されるデータ値を前記第１操作の推測結果にリンクするステップと、
前記第１操作の結果に応じて、オペランドソースを有する第３操作を実行するステップとを含み、
前記実行するステップは前記タグによって指定される前記データ値にアクセスするステップを含む方法。
【請求項１０】
システムメモリ（２００）と、
前記システムメモリに結合されたマイクロプロセッサ（１００）とを備えたコンピュータシステムであって、前記マイクロプロセッサは請求項１記載のシステムを含む、コンピュータシステム。
【国際調査報告】
2005532613.tif 000014
2005532613.tif 000015