(57)【特許請求の範囲】
【請求項１】
マイクロプロセッサ（１００）であって、
１つ又はそれ以上のデータ推測検証ユニットを有し、該データ推測検証ユニットは、オペレーションに対して実行されたデータ推測の検証と、前記１つ又はそれ以上のデータ推測検証ユニットのうちの前記１つのデータ推測検証ユニットによってデータ推測が検証済みである処理中のオペレーションを識別する各推測ポインタの生成と、を行うように構成されており、かつ、
前記１つ又はそれ以上のデータ推測検証ユニットの各々から推測ポインタを受信するように結合され、前記１つ又はそれ以上のデータ推測検証ユニットの各々から受信した前記推測ポインタに依存して、オペレーションを選択的にリタイアさせるように構成されたリタイアキュー（１０２）、を備えたマイクロプロセッサ（１００）。
【請求項２】
前記１つ又はそれ以上のデータ推測検証ユニットのうちの１つを含む読み出し書き込みユニット（１２６）を有し、前記読み出し書き込みユニット（１２６）に含まれる前記データ推測検証ユニットは、依存予測を検証するように構成される、請求項１記載のマイクロプロセッサ（１００）。
【請求項３】
非メモリオペレーションを実行するように構成されるとともに前記１つ又はそれ以上のデータ推測検証ユニットのうちの１つを含むファンクショナルユニット（１２６）を有し、前記ファンクショナルユニット（１２６）に含まれる前記データ推測検証ユニットは、非メモリオペレーションの結果を予測するデータ予測を検証するように構成される、請求項１記載のマイクロプロセッサ（１００）。
【請求項４】
前記１つ又はそれ以上のデータ推測検証ユニットのうちの１つは、前記１つ又はそれ以上のデータ推測検証ユニットのうちの前記１つのデータ推測検証ユニットによって検証されるデータ推測の一つのタイプが実行済みである複数の処理中のオペレーションの各々を識別する情報を受信するように構成されており、かつ、
前記１つ又はそれ以上のデータ推測検証ユニットのうちの前記１つのデータ推測検証ユニットは、前記１つ又はそれ以上のデータ推測検証ユニットのうちの前記１つのデータ推測検証ユニットによってどの処理中のオペレーションが検証済みであるかを識別し、この識別は、データ推測が検証済みである最も新しい処理中のオペレーションよりも若く、かつ前記タイプのデータ推測が実行済みである最も古い処理中のオペレーションよりも若くないオペレーションを識別するように各々の推測ポインタを進めることでなされる、請求項１記載のマイクロプロセッサ（１００）。
【請求項５】
コンピュータシステム（９００）であって、
メモリ（２００）と、
メモリ（２００）に結合されたプロセッサ（１００）と、を有し、
前記プロセッサ（１００）はオペレーションに対して実行されたデータ推測を検証し、前記１つ又はそれ以上のデータ推測検証ユニットのうちの１つによってデータ推測が検証済みである処理中のオペレーションを識別するように各推測ポインタを生成するように構成されており、かつ、
前記プロセッサ（１００）はさらに、前記１つ又はそれ以上のデータ推測検証ユニットの各々から推測ポインタを受信するように結合され、前記１つ又はそれ以上のデータ推測検証ユニットの各々から受信した前記推測ポインタに依存して、オペレーションを選択的にリタイアさせるように構成されたリタイアキュー（１０２）を含むことを特徴とする、コンピュータシステム（９００）。
【請求項６】
前記１つ又はそれ以上のデータ推測検証ユニットのうちの１つを含む読み出し書き込みユニット（１２６）を有し、前記読み出し書き込みユニット（１２６）に含まれる前記データ推測検証ユニットは、依存予測を検証するように構成される、請求項５記載のコンピュータシステム（９００）。
【請求項７】
非メモリオペレーションを実行するように構成されるとともに前記１つ又はそれ以上のデータ推測検証ユニットのうちの１つを含むファンクショナルユニット（１２６）を有し、前記ファンクショナルユニット（１２６）に含まれる前記データ推測検証ユニットは、非メモリオペレーションの結果を予測するデータ予測を検証するように構成される、請求項５記載のコンピュータシステム（９００）。
【請求項８】
オペレーションに対してデータ推測を実施するステップ、
検証ユニットが、前記オペレーションに実行された前記データ推測を検証するステップ、
前記検証ユニットが、前記検証に応答して、前記検証ユニットに対して前記オペレーションはデータ投機的でないことを示す推測ポインタを生成するステップ、及び、
前記検証ユニットに対して前記オペレーションがデータ投機的でないことを示す前記推測ポインタの受信に応答して、リタイアキューが選択的に前記オペレーションをリタイアさせるステップ、を含む、方法。
【請求項９】
他の検証ユニットが、他のオペレーションに対して実行したデータ推測を検証し、前記他の検証ユニットに対して前記他のオペレーションはデータ投機的でないことを示す他の推測ポインタを生成するステップを有し、
前記オペレーションのリタイアは、前記推測ポインタと前記他の推測ポインタとに依存してなされる、請求項８記載の方法。
【請求項１０】
前記検証ユニットに対して前記オペレーションは投機的でないことを示す前記推測ポインタの前記生成ステップは、前記検証ユニットによって検証されるタイプのデータ推測が実行済みである最も若いオペレーションであるオペレーションに依存する、請求項８記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサ技術分野に関し、より具体的には、マイクロプロセッサにおいてデータの推測を行う方法に関する。
【背景技術】
【０００２】
スーパースカラーマイクロプロセッサは、複数の命令を並列に実行し、その設計に適合する最短のクロックサイクルを用いることによって高パフォーマンスを発揮する。しかし、命令と命令の間におけるデータ及びコントロールフローの依存性によって、所定の時間内に発行可能な命令数が制限されてしまう。結果として、ある種のマイクロプロセッサではさらなるパフォーマンスゲイン（性能向上）を図るために投機的実行をサポートしている。
【０００３】
このような投機あるいはスペキュレーションの一つのタイプとして、コントロールフロー推測（control flow speculation）が挙げられる。コントロールフロー推測はプログラム制御が進行する方向を予測する。例えば、分岐が発生するかどうかを予測するために分岐予測が用いられる。様々なタイプの分岐予測が利用可能であり、単純に毎回同じ予測を行う方法から、履歴を基にした予測を行うために、プログラム中の過去の分岐の詳細な履歴を維持する方法まである。分岐予測は、ハードウェアの最適化、コンパイラの最適化、またはその両方によって容易になる。分岐予測機構によって提供される予測に基づいて、命令は投機的にフェッチされ、実行される。分岐命令が最終的に評価されるとき、分岐予測を識別することができる。もし予測が誤っていれば、誤った予測に基づいて投機的に実行されたすべての命令は廃棄される。
【０００４】
他の投機のタイプとしては、データ値を予測するデータ推測がある。すでに提案されたデータ推測の形式は、メモリオペレーション用にアドレスを投機的に生成し、コンピュータオペレーションで使用するためにデータ値を投機的に生成する。コントロール推測にともない、投機的にデータ値を生成するために使用された根本的な条件を最終的に評価し、推測を評価済みとするか、あるいは推測を実行しないようにする。
【発明の開示】
【０００５】
マイクロプロセッサ内の様々な検証ユニットに対してどのオペレーションがデータ投機的であるかを識別する推測ポインタに依存するオペレーションをリタイア、つまり中止させるための方法とシステムの様々な実施形態が開示されている。一実施形態では、マイクロプロセッサはリタイアキューと１つ又はそれ以上のデータ推測検証ユニットを含み得る。データ推測検証ユニットはそれぞれ、オペレーションで実施されるデータ推測を検証するように構成される。各データ推測検証ユニットは、そのデータ推測検証ユニットによってデータ推測が検証されている処理中のオペレーションを識別する各々の推測ポインタを生成する。リタイアキューはデータ推測検証ユニットの各々から受信した推測ポインタに依存するオペレーションを選択的にリタイアさせるように構成される。
【０００６】
一実施形態では、データ推測検証ユニットのうちの１つは読み出し書込みユニットに含まれ得る。そのようなデータ推測検証ユニットは、依存予測、アドレス予測、及び／またはデータ予測などのデータ予測タイプを検証するように構成され得る。例えば、読み出し書き込みユニットに含まれるデータ推測検証ユニットは、より新しい読み出しオペレーションが未計算のアドレスを持つより古い書き込みオペレーションには依存していないことを予測する依存予測を検証するように構成され得る。同様に、読み出し書き込みユニットに含まれるデータ推測検証ユニットは、より新しい読み出しオペレーションの結果はより古い書き込みオペレーションのソースと等しいと予測する依存予測を検証するように構成され得る。
【０００７】
別のデータ推測検証ユニットは、ファンクショナルユニットに含まれ、非メモリオペレーション(non memory operation)を実行するように構成されうる。そのようなデータ推測検証ユニットは非メモリオペレーションの結果を推測するデータ推測を検証するように構成され得る。また別のデータ推測検証ユニットはメモリコントローラに含まれ、メモリ予測を検証するように構成され得る。
【０００８】
一実施形態では、データ推測検証ユニットのうちの１つは、そのデータ推測検証ユニットによって検証されたデータ推測のタイプが実施されている各処理中のオペレーションを識別する情報を受信するように構成され得る。そのデータ推測検証ユニットは、そのタイプのデータ推測が検証されている最も新しい処理中のオペレーションよりも若く、そのタイプのデータ推測が実施されている別の処理中のオペレーションよりも古いオペレーションを識別するように各々の推測ポインタを進めることによって、そのデータ推測検証ユニットによって検証されている処理中のオペレーションを識別するように構成され得る。データ投機的であるとしてそのデータ推測検証ユニットに識別されるオペレーションが現在のところ無い場合、そのデータ推測検証ユニットは、そのデータ推測検証ユニットに対してデータ投機的である処理中のオペレーションは現在のところは無いことを示すように、各々の推測ポインタ値を設定することができる。
【０００９】
リタイアキューがいくつかの推測ポインタを受け取る実施形態では、そのリタイアキューはオペレーションが、全ての推測ポインタによって非データ投機的と識別された最も新しい（若い）オペレーションよりも古いかどうかを判断することによって、そのオペレーションがリタイア可能であるかを判断するように構成され得る。
【００１０】
推測ポインタを生成する１つ又はそれ以上のデータ推測検証ユニットと、その推測ポインタに依存するオペレーションをリタイアさせるリタイアキューを含むマイクロプロセッサはコンピュータシステムに含まれ得る。
【００１１】
いくつかの実施形態では、方法には以下のものを含む。それらは、オペレーションのためにデータ推測を実施するステップ、そのオペレーションのために実施したデータ推測を検証する検証ユニット、この検証ユニットに対して、検証に応答してそのオペレーションがデータ投機的ではないことを示す推測ポインタを生成する検証ユニット、及び、検証ユニットに対してそのオペレーションはデータ投機的でないことを示す推測ポインタに応答して、オペレーションをリタイアさせること、である。
【００１２】
そのような方法はその他のオペレーションで実行されるデータ推測を検証し、その他のオペレーションがこれらの検証ユニットに対してデータ投機的でないことを示すその他の推測ポインタを生成する、１つ又はそれ以上のその他の検証ユニットも含み得る。オペレーションのリタイアは全ての投機ポインタに依存しうる。各検証ユニットは、様々なタイプのデータ推測を検証し得る。
【発明の詳細な説明】
【００１３】
本発明は、添付の図面に関連した以下の詳細な説明を参照することによって、よりよく理解することができる。
本発明は様々な変更や代替形態が可能であるが、本発明の個別の実施形態は、各図面において例示として示されたものであり、ここでは詳細に説明されている。しかしながら、ここで行われている実施形態の説明は、本発明を開示された特定の形態に限定することを意図するものではなく、逆に、本発明は、添付の特許請求の範囲により定義されるような本発明の精神や範囲の範疇であるすべての変更、等価物、及び代替物を含むものであることは理解すべきである。本明細書中の見出しは文章構成のためのものに過ぎず、本明細書の説明または特許請求の範囲を限定または解釈のために用いるべきものではないことに注意されたい。さらに、本明細書において用いられる「できる“may”」という用語は、許可的な意味合い（つまり、そのような可能性を持つ、または可能である）に用いられ、強制的な意味合いではない（つまり、must；しなければいけない）ことに注意すべきである。「include;含む」という用語およびその派生語は「含むが、それに限定されない」ことを意味する。「接続される」という用語は「直接的または間接的に接続される」ことを意味し、「結合される」という用語は「直接的または間接的に結合される」ことを意味する。
【発明を実施するための最良の形態】
【００１４】
図１は、マイクロプロセッサ１００の一実施形態のブロック図である。マイクロプロセッサ１００はシステムメモリ２００に記録された命令を実行するように構成される。これらの命令の多くはシステムメモリ２００に記録されたデータを操作するものである。システムメモリ２００はコンピュータシステム全体に物理的に配置可能であり、一つ又はそれ以上のマイクロプロセッサ１００からアクセスできる。
【００１５】
マイクロプロセッサ１００は命令（インストラクション）キャッシュ１０６およびデータキャッシュ１２８を含む。マイクロプロセッサ１００は命令キャッシュ１０６に結合されたプリフェッチユニット１０８を含む。ディスパッチユニット１０４は命令キャッシュ１０６から命令を受信して、スケジューラ１１８にオペレーションを発送するように構成される。１以上のスケジューラ１１８はディスパッチユニット１０４から発送されたオペレーションを受信し、１以上の実行コア１２４にオペレーションを発行するように結合できる。実行コア１２４は、データキャッシュ１２８に対するアクセスを実行するように構成された読み出し／書き込みユニットを含む。実行コア１２４によって生成された結果は、結果バス１３０に出力されうる。これらの結果は続いて発行される命令のためのオペランド値として使用可能であり、および／またはレジスタファイル１１６に記録することができる。リタイアキュー（retire queue）１０２はスケジューラ１１８およびディスパッチユニット１０４に結合される。このリタイアキュー１０２は、発行されたオペレーションのそれぞれがいつリタイア可能であるかを決定するように構成される。一実施形態では、マイクロプロセッサ１００はｘ８６型アーキテクチャと互換性を持つように設計される。マイクロプロセッサ１００はその他多くの要素を含んでいてもよいことに注意すべきである。例えば、マイクロプロセッサ１００は分岐予測ユニット（図示せず）を含んでいてもよい。
【００１６】
命令キャッシュ１０６は命令を、ディスパッチユニット１０４がそれらを受信する前に、一時的に記録することができる。命令コードは、システムメモリ２００からプリフェッチユニット１０８を介してコードをプリフェッチすることにより、命令キャッシュ１０６に供給される。命令キャッシュ１０６は様々な構成で実装可能である（例えば、セットアソシアティブ、フルアソシアティブ、またはダイレクトマッピング）。幾つかの実施形態では、命令キャッシュ１０６及び／又はデータキャッシュ１２８の多数レベルがあり得る。幾つかのレベルのキャッシュは、図示されるようにマイクロプロセッサ１００と統合され得、一方、他のレベルのキャッシュはマイクロプロセッサの外部に拡張され得る。
【００１７】
プリフェッチユニット１０８は命令キャッシュ１０６に記録するためにシステムメモリ２００から命令コードをプリフェッチすることができる。一実施形態では、プリフェッチユニット１０８はシステムメモリ２００から命令キャッシュ１０６にコードをバースト転送するように構成することができる。プリフェッチユニット１０８は様々な特定のコードプリフェッチ技術およびアルゴリズムを採用することができる。
【００１８】
ディスパッチユニット１０４は、オペランドアドレス情報、即値データ（immediate data）および／または変位データ（displacement data）とともに、実行コア１２４が実行可能なビットエンコードされたオペレーションを含む信号を出力する。ある実施形態では、ディスパッチユニット１０４はある種の命令を実行コア１２４内で実行可能なオペレーションにデコードするためのデコード回路（図示せず）を含んでいてもよい。単純な命令は単一のオペレーションに対応する。ある実施形態では、より複雑な命令は複数のオペレーションに対応する。オペレーションがレジスタの更新を含む場合、レジスタファイル１１６中のあるレジスタ位置が推測レジスタ状態を記録するために予約される（別の実施形態では、リオーダバッファが各レジスタに対する一以上の推測レジスタ状態を記録するために用いられる）。レジスタマップは、レジスタのリネームを容易にするために、ソースおよび目的オペランドの論理レジスタ名を物理レジスタ名に変換することができる。レジスタマップは、レジスタファイル１１６内のどのレジスタが現在割り当てられているかを追跡できる。
【００１９】
図１のマイクロプロセッサ１００はアウトオブオーダー実行をサポートする。リタイアキュー１０２はレジスタ読み出しおよび書き込みオペレーションのためにオリジナルのプログラムシーケンスの記録、つまりトラッキングを行い、投機的命令実行および分岐予測ミスからの復帰を許可し、精密な例外処理を容易にする。リタイアキュー１０２は、有効になったオペレーションがバッファのボトムに移動し、それによって待ち行列のトップに新しいエントリのための空きを作る、先入れ先出し構造として実装される。リタイアキュー１０２は、オペレーションが実行を完了したことに応答してオペレーションをリタイアし、全てのオペレーションに対して実行された全ての制御スペキュレーション及びデータが、そのオペレーションを含みそのオペレーションまでに実行されたプログラムに関して、照合すなわちベリファイがなされる。リタイアキュー１０２は、物理レジスタの、マイクロプロセッサ１００のアーキテクチャ状態に対する投機的状態について、その物理レジスタでその値を生成したオペレーションがリタイアした場合に、コミットメントを行う。ある実施形態においては、リタイアキュー１０２はリオーダバッファの一部として実装される。このようなリオーダバッファは、レジスタリネーミングをサポートするために、推測レジスタ状態のデータ値の記録部を提供するように構成することもできる。他の形態では、リタイアキュー１０２は、何らデータ値の記録部を提供しないようにすることもできる。また、これに代えて、オペレーションがリタイアする際に、リタイアキュー１０２は、推測レジスタ状態を記録する必要がなくなったレジスタファイル１１６内のレジスタの割り当てを取り消し、レジスタマップに対してどのレジスタが現在空いているのかを示す信号を供給する。レジスタファイル１１６内（または、他の実施形態では、リオーダバッファ内）の推測レジスタ状態をそれらの状態を生成したオペレーションが有効になるまで維持することによって、分岐予測が間違っていた場合、予測ミスされたパスに従った投機的に実行されたオペレーションの結果がレジスタファイル１１６内で無効化される。
【００２０】
特定のオペレーションにおける要求されているオペランドがレジスタの位置であるときは、レジスタアドレス情報がレジスタマップ（またはリオーダバッファ）に送られる。例えば、ｘ８６アーキテクチャにおいては、８つの３２ビット論理レジスタがある（例えば、ＥＡＸ，ＥＢＸ，ＥＣＸ，ＥＤＸ，ＥＢＰ，ＥＳＩ，ＥＤＩおよびＥＳＰ）。物理レジスタファイル１１６（またはリオーダバッファ）はこれらの論理レジスタの内容を変更する結果のための記録装置を含み、アウトオブオーダー実行を許可する。レジスタファイル１１６内の物理レジスタは、デコード時に論理レジスタの一つの内容を修正するために決定される各オペレーションの結果を記録するために割り当てられる。従って、特定のプログラムを実行している間の任意の時点において、レジスタファイル１１６（または、他の実施形態では、リオーダバッファ）は、与えられた論理レジスタの投機的に実行された内容を含む１以上のレジスタを持つ。
【００２１】
レジスタマップは物理レジスタをあるオペレーションの目的オペランドとして指定された特定の論理レジスタに割り当てる。ディスパッチユニット１０４は、レジスタファイル１１６が、所与のオペレーションにおいてソースオペランドとして指定された論理レジスタに割り当てられた、既に割り当てられた１以上の物理レジスタを持つことを決定する。このレジスタマップはその論理レジスタに最近に割り当てられた物理レジスタのためのタグを供給することができる。このタグは、レジスタファイル１１６内のオペランドのデータ値にアクセスするために用いることができ、または結果バス１３０において転送される結果を介してデータ値を受信することができる。もしオペランドがメモリ位置に対応するならば、そのオペランド値は読み出し／書き込みユニット２２２を介して結果バスに供給される（結果転送および／またはレジスタファイル１１８への記録のため）。スケジューラ１１８のひとつからオペレーションが発行されると、オペランドデータ値が実行コア１２４に供給される。他の実施形態においては、オペレーションが発送されると、オペランド値が対応するスケジューラ１１８に供給される（そのオペレーションが発行されたときに対応する実行コア１２４に供給する代わりに）。
【００２２】
ディスパッチユニット１０４の出力で与えられたビット符号化されたオペレーションと即値データ（immediate data）は、一つ又はそれ以上のスケジューラ１１８にルーティングされ得る。本文に記載されたように、スケジューラはオペレーションの実行の準備ができたことを検出し、一つ又はそれ以上のファンクショナルユニットに準備オペレーションを発行するデバイスである。例えば、予約ステーションはスケジューラである。スケジュール又はスケジューラのグループにおけるオペレーションは命令又はオペレーションウィンドー又はスケジューリングウィンドーにおけるオペレーションとして称され得る。各スケジューラ１１８は、実行コア１２４への発行を待つ幾つかのペンディング中のオペレーションに関するオペレーション情報（例、オペランド値、オペランドタグ、及び／即値データと同様のビット符号化された実行ビット）を保持することができる。ある種の実施形態では、各スケジューラ１１８は、オペランド値を記録することはできない。その代わりに、オペランド値がファンクショナルユニット１２６によって（レジスタファイル１１６又は結果バス１３０から）読み出し可能となる時点を判定するために、レジスタファイル１１６において利用可能な発行されたオペレーション及び結果を各スケジューラが監視し得る。幾つかの実施形態では、各スケジューラ１１８は専用のファンクショナルユニット１２６に関連付けられ得る。他の実施形態では、シングルスケジューラ１１８が１つ以上のファンクショナルユニット１２６にオペレーションを発行し得る。
【００２３】
スケジューラ１１８は、実行コア１２４によって実行されるオペレーション情報を一時記録するために提供されうる。上述のとおり、各スケジューラ１１８はペンディング中のオペレーションのためにオペレーション情報を記録することができる。さらに、各スケジューラは、すでに実行済みであるが再発行される可能性のあるオペレーションのためのオペレーション情報を記録することができる。実行のために利用可能となった任意の必要とされるオペランドの値に応答して、オペレーションが、実行コア１２４で実行されるよう発行される。従って、オペレーションが実行される順番は、元のプログラム命令シーケンスの順番とは同じでない可能性がある。データ推測を含むオペレーションを、非投機的になるまで、スケジューラ１１８にとどめ、データ推測が誤っていれば再発行することができる。
【００２４】
一実施形態では、実行コア１２４のそれぞれは幾つかのファンクショナルユニット１２６（例えば、図１に示されるファンクショナルユニット１２６Ａ〜１２６Ｃ）を含み得る。例えば、１２６Ａのような幾つかのファンクショナルユニットは、シフト、ローテート、論理演算、及び分岐オペレーションと同様に加算及び減算の整数演算オペレーションも実行するように構成され得る。例えば、１２８Ｂのような他のファンクショナルユニットは、浮動小数点も含めることができるように構成され得る。例えば、１２６Ｃのようなファンクショナルユニットによって実行される読み出し／書き込みメモリオペレーション用のアドレス生成を行うように、例えば１２６Ａなどの、一つ又はそれ以上のファンクショナルユニットが構成され得る。ファンクショナルユニットはデータキャッシュ１２８及び／又はシステムメモリに記録されたデータにアクセスする読み出し／書き込みオペレーションを実行する。一実施形態では、そのようなファンクショナルユニット１２６Ｃはペンディング中の読み出し及び／又は書き込みに関するデータ及びアドレス情報の幾つかのストレージロケーションを備えた読み出し／書き込みバッファで構成され得る。
【００２５】
一つ又はそれ以上のファンクショナルユニット１２６が分岐予測ユニットに条件付き分岐命令の実行に関する情報も与えることができ、それによってもし分岐予測ミスが発生したときに、分岐予測ユニットが命令プロセッシングパイプラインに入力された予測を誤った分岐に後続する命令をフラッシュすることができ、プリフェッチユニット１０６にリダイレクトすることができるようにする。このリダイレクトされたプリフェッチユニット１０６は、次に命令キャッシュ１０６又はシステムメモリ２００から正しい命令セットのフェッチを開始する。そのような状況では、予測誤りのあった分岐命令の後に発生した元のプログラムシーケンスにおける命令の結果は廃棄され、投機的に実行され、レジスタファイル１１６に一時的に記録されたものを含む。
【００２６】
実行コア１２４内のファンクショナルユニット１２６によって生成された結果は、レジスタの値が更新されていれば、結果バス１３０においてレジスタファイル１１６に対して出力される。メモリ位置の内容が変更されていれば、実行コア１２４内で生成された結果は、読み出し／書き込みユニット１２６Ｃに対して供給される。
【００２７】
データキャッシュ１２８は、実行コア１２４とシステムメモリ２００との間で転送されたデータを一時的に記録するために提供されるキャッシュメモリである。上述の命令キャッシュ１０６と同様に、データキャッシュ１２８はセットアソシアティブ構成を含む、様々な特定のメモリ構成において実装可能である。さらに、データキャッシュ１０６および命令キャッシュ１２８は、ある実施形態においては統一されたキャッシュとして実装可能である。
【００２８】
幾つかの実施形態では、マイクロプロセッサ１００は、マイクロプロセッサがシステムメモリ２００に直接インターフェースすることを可能にする統合されたメモリコントローラ１６０を含む。他の実施形態では、メモリコントローラ１６０はマイクロプロセッサ１００をシステムメモリ２００に間接的に結合するバスブリッジに含まれ得る。
［データ推測］
【００２９】
本明細書では、データ値の誤りが見つけられ、結果として再計算される可能性があれば、データ値は投機的であるとする。投機的なデータ値とは正しいか又は誤っているかを確定的に識別できないものである。このデータ値は、幾つかのデータ推測が実行されたことに関するオペレーションの結果であるか、あるいはこのデータ値が他の投機的データ値に依存すれば（例えば、データ値が一つ又はそれ以上の投機的なオペランドを有するオペレーションの結果を生成する場合）、データ値は再計算することができる。
【００３０】
マイクロプロセッサ１００における様々な機構はデータ推測を実行することができる。例えば、ディスパッチユニット１０４、メモリコントローラ１６０、及び／又は、１つ又はそれ以上のファンクショナルユニット１２６の各々が特定的なオペレーションに関するデータ推測を実行できる。１つのオペレーションの結果が他のオペレーション用の投機的なオペランドとして使用可能であることをディスパッチユニット１０４が検出することができる。例えば、読み出しオペレーションが先行の書き込みオペレーションによってデータキャッシュ１２８に記録されたデータにアクセスすることをディスパッチユニットが予測することができる。書き込みオペレーションのソースとして使用されたレジスタに記録されたデータ値を、ディスパッチユニット１０４が応答可能なように読み出しオペレーションの推測結果として識別することができる。データ推測のこの形式は依存予測として本文において称される。読み出しオペレーションの結果をオペランドとして特定するオペレーション用の推測オペランドソースとして書き込みオペレーションのソースをリンクすることによって、依存予測がディスパッチユニット１０４に拡張され得る。まだアドレスが未計算である書き込みに関してロード即ち読み出しをバイパスすることを可能にすることによって、即ち、より若い、つまりより新しい読み出しは比較的早期の書き込みには依存しない、と予測することによって、他のタイプの依存予測が読み出し／書き込みユニット１２６Ｃにおいて実行することができる。
【００３１】
マルチプロセッサシステムにおいて、メモリコントローラ１６０がキャッシュコヒーレンシーを維持するようにコヒーレンシー検査を実行可能である。他のマイクロプロセッサのキャッシュとのコヒーレンシー検査を終了する前に、メモリコントローラ１６０がシステムメモリ２００からのキャッシュラインのコピーを投機的に戻し得る。検索するキャッシュラインの正しいコピーが他のプロセッサキャッシュに目下のところ記録されていることを後続的にコヒーレンシー検査が決定すれば、システムメモリ２００から投機的に検索されたキャッシュラインのコピーは非有効化できる。従って、そのキャッシュラインにアクセスすることによって生成されたどの読み出しオペレーションもコヒーレンシー検査が終了するまで投機的である。この推測の形式は、本文でメモリ予測として称される。
【００３２】
ディスパッチユニット１０４は、オペレーションの結果を予測することによってデータ推測を実行することができる。例えば、ある種のオペレーションは同じ結果を生成し得る傾向があり、それ故、それらのオペレーションの各々が処理される毎に、ファンクショナルユニット１２６によるオペレーションの実際の実行が行われる前にディスパッチユニット１０４によって結果が投機的に生成され得る。このデータ推測の形式は、データ予測として本文に称される。データ予測はマイクロプロセッサの他の部分においても（例えば、読み出し／書き込みユニット１２６Ｃにおいて）実行可能であることに注目されたい。
【００３３】
読み出し／書き込みユニット１２６Ｃはアドレスを投機的に生成し得、この投機的アドレスに基づき、比較的早期に処理された読み出しのパターンに基づきアドレスがまだ未計算の読み出し命令の結果を投機的に生成し得る。例えば、前のＮロードオペレーションが、連続したオフセットＣによって相互に間隙をあけるアドレスＡ１〜ＡＮ（例、Ａ１；Ａ２＝Ａ１＋Ｃ、．．．、ＡＮ＝Ａ（Ｎ＋１）＋Ｃ）をターゲットにしたとすれば、読み出し／書き込みユニット１２６Ｃは、読み出しオペレーションの結果として最新にアクセスされたアドレスＡＮ＋連続するオフセットＣでデータを投機的に戻し得る。このデータ投機の形式は、本文においてアドレス予測として称される。アドレス予測の他の形式が多くの実施形態に使用可能であることに注目されたい。
【００３４】
データ推測が実行されたオペレーションの結果に依存するオペレーションも投機的な結果を生成し得る。例えば、アドレス予測が読み出しオペレーションの投機的な結果を生成するように使用されれば、オペランドとして読み出しの推測結果を用いて実行する全ての依存オペレーションは推測結果を生成することができ、これは次に他の依存オペレーションによってオペランドとして使用することが可能である。従って、読み出しオペレーションにおいて根本となる推測が誤っていると決定されれば、依存オペレーションの結果も誤っている可能性があり、それ故、この読み出しに依存するオペレーションの全体的な依存チェーンが正しい結果を生成するために再度実行されることが求められる。それに対し、根本となる推測が正しいと決定されれば、（これらの結果が他の投機的な値の何れにも基づかないと仮定して）依存オペレーションの結果は正しいことが分かる。
【００３５】
データ推測が実行される多くのオペレーションは、ファンクショナルユニットによってこれらのオペレーションが実行されるときにベリファイ、即ち検証することができる。例えば、あるオペレーション結果を投機的に生成するよう使用されたデータ予測はファンクショナルユニット１２６によって検証することができ、このファンクショナルユニット１２６は実際のオペレーションの結果と投機的な結果を比較することによってこのオペレーションを実行する。正しい結果が既に利用可能であるのでデータ推測が誤っていれば、そのようなオペレーションは再実行されることが求められる。他のオペレーションは、完全に実行されなくとも検証可能である。例えば、未計算のアドレスで読み出しが比較的早期の書き込みの結果を（例えば、依存予測又はアドレス予測に起因して）転送した場合、読み出しの推測結果は、読み出しアドレスが計算されるとき検証可能である。データ推測が誤っていれば、そのようなオペレーションは、正しい結果を生成するために（少なくとも一部）再実行されることが求められる。
【００３６】
データ推測が実行されたオペレーションと、それに従属するオペレーションを再実行することが求められるので、リタイアキュー１０２は根本となるデータ推測が解決された（resolved）オペレーションをリタイアするためのみに構成することができる。図１に示すように、データ推測を検証する各手段（本実施形態では、メモリコントローラ１６０及びファンクショナルユニット１２６）は、データ推測が検証済みのオペレーションを示す推測ポインタとともにリタイアキュー１０２を提供するように構成可能である。各推測ポインタは、その検証手段によって検証される最も新しいオペレーションのタグと等しい値を有することによって、特定の検証手段に対してデータ推測が検証済みであるオペレーションを識別する。リタイアキュー１０２はどのオペレーションがリタイアされ得るか、つまりオペレーションをリタイアさせ得るかを識別するように推測ポインタを使用する。一つ又はそれ以上のタイプのデータ推測を検証するように構成されたマイクロプロセッサ１００内のさまざまなコンポーネントは、データ推測検証ユニットとして本文において称される。
【００３７】
各推測ポインタは、特定のマイクロプロセッサの部位に対して、根本となる命令ストリームのどのポイントが非投機的であるかを識別し得る。例えば、メモリコントローラ１６０により生成される推測ポインタＤは、メモリ予測を検証するメモリコントローラ１６０に対する、最も新しい非投機的オペレーションを識別し得る。一実施形態では、メモリコントローラ１６０はメモリ予測が実行された、最も最近に検証されたオペレーションをポイントするように推測ポインタＤを生成し得る。他の実施形態では、メモリコントローラ１６０はメモリ予測が実行済みである最も古い未検証のオペレーションの直前のオペレーションをポイントするように推測ポインタＤを生成し得る。一般に推測ポインタＤは、メモリコントローラ１６０から見て、もはや投機的ではないオペレーションをリタイアキュー１０２へ示す。
【００３８】
一実施形態では、ファンクショナルユニット１２６Ａ及び１２６Ｂはそれぞれ整数及び浮動小数点演算を行う。ファンクショナルユニット１２６Ａ及び１２６Ｂはそれぞれデータ予測を検証できる。図１に例示した実施形態において、推測ポインタＡ及びＢは各々、ファンクショナルユニット１２６Ａ及び１２６Ｂによってどのオペレーションが検証済みであるかを識別する。推測ポインタＣは読み出し書込みユニット１２６Ｃによってどのオペレーションが検証済みであるかを識別する。ファンクショナルユニット１２６Ｃはアドレス、データ、及び／又は依存予測を検証するように構成可能である。
【００３９】
上述のように、各推測ポインタの値は、各々のデータ推測検証ユニットによってどのオペレーションが検証済みであるかに依存する。ある実施形態では、マイクロプロセッサ１００の検証部位が生成する推測ポインタの値は、データ推測が実行済みのオペレーションを識別する情報にも依存する。例えば、一実施形態では、メモリコントローラ１６０はメモリ予測が実行済みの各オペレーションをトラッキングする。メモリコントローラ１６０が各オペレーションを検証する際、メモリコントローラ１６０は、メモリ予測が実行された２番目に新しいオペレーションまでの全てのオペレーションがメモリコントローラ１６０に対して非データ投機的であると示すように、推測ポインタＤを進める。一実施形態では、メモリコントローラ１６０によってトラッキングされる２番目に新しい投機的オペレーションをポイントするよう推測ポインタＤを進めることによって、メモリコントローラ１６０はこれらのオペレーションを識別し得る。同様に、その他のタイプのデータ推測を実行する機構（例えば、ディスパッチユニット１０４及び／または読み出し及び書き込みオペレーションを実施するファンクショナルユニット１２６Ｃ）は、データ推測が実行済みのオペレーションのトラッキングも行う。ある実施形態では、これらのデータ推測機構のうちの少なくともいくつかは、そのタイプのデータ推測を検証するように構成されているデータ推測検証ユニット（例えば、読み出し書込みユニット１２６Ｃ及び／または１つ又はそれ以上のその他の機能ユニット１２６）へこの情報を送る。データ推測検証ユニットのうちの特定のデータ推測検証ユニットにより検証されるデータ投機的オペレーションが現在のところ無い場合、その検証ユニットによって生成された推測ポインタは、特定の検証ユニットに対して処理中のオペレーション全てが非データ投機的であることを示す値に設定される。
【００４０】
リタイアキュー１０２は推測ポインタによって識別されたオペレーションストリームの部分を比較することによって、どのオペレーションがリタイアされ得るかを識別する。全ての推測ポインタによって非投機的であるとして識別された最も古いオペレーションは、リタイアキュー１０２によってリタイア可能な最も古いオペレーションであり得る。例えば、ディスパッチユニット１０４がオペレーション０−１０をディスパッチ（発送）していると仮定する（オペレーション０はプログラムオーダーにおいて最も古いオペレーションであり、オペレーション１０はプログラムオーダーにおいて最も新しいオペレーションであり、プログラムオーダーはマイクロプロセッサ１００内でリオーダリング又はアウトオブオーダー処理するいずれのオペレーションが実行される前に実行される、プログラムにおける命令の順番のことである）。オペレーション６までのオペレーションは非データ投機的であることを推測ポインタＡが示し、推測ポインタＢはオペレーション５までのオペレーションは非投機的であると示し、推測ポインタＣは、オペレーション３までのオペレーションが非投機的であると示し、また、推測ポインタＤは、処理中の全オペレーションが非データ投機的であると示す（例えば、いずれのオペレーション０−１０に対してメモリ予測は実施されていないという理由から）場合、リタイアキュー１０２は、リタイアし得るオペレーションのセットとしてオペレーション３までのオペレーションを識別する。オペレーションのリタイアメント（オペレーションの停止）は、ファンクショナルユニット１２６によってこれらのオペレーションが既に実行されているかどうか、また、これらのオペレーションに影響を及ぼすコントロール予測がうまく解決されているかどうか、などの、一般的なリタイアメント制限によっても変わることに注目されたい。例えば、データ投機的オペレーションが誤りであり、再実行する必要があると判断されると、そのオペレーションは１つ又はそれ以上の推測ポインタによって非投機的と識別され得るが、そのオペレーションが再実行されるまではリタイアさせることはできない。どのオペレーションが実行され、どのオペレーションが実行されていないか、又は必要に応じて再実行されたかについての情報は、ある実施形態ではスケジューラ１１８によってリタイアキュー１０２へ提供される。
【００４１】
図２Ａは推測ポインタを生成するために用いられる方法の一実施形態を例示している。そのような方法は少なくとも一部が、メモリコントローラ１６０及びファンクショナルユニット１２６などのデータ推測検出ユニットのうちの１つによって実装されうる。２０１において、オペレーションに対するデータ推測が実施される。この２０１におけるデータ推測は、ある実施形態でデータ推測を検証するマイクロプロセッサの同じ部位で実行され得る。２０３においてそのデータ推測が検証済みとなると、推測ポインタは２０５に示しているように、２０１においてデータ推測が実行されたオペレーションが非投機的であると示すように進められる。
【００４２】
一実施形態では、２０５において推測ポインタを進めることには、最も最近に検証されたオペレーションを検出するように推測ポインタを進めるステップと、それまでのオペレーションとそのオペレーションを含む全てのオペレーションがデータ推測を検証するための特定の方法に対して非データ投機的であることを示すステップとを含む。他の実施形態では、２０５において推測ポインタを進めるステップには、その特定の検証手段によって検証される次のデータ投機的オペレーションの直前のオペレーションを識別するように、プログラムオーダーで、推測ポインタを進めることを含む。例えば、読み出し書き込みユニット１２６は、読み出し書き込みユニットがデータ推測を実行済みのオペレーションに対してトラッキングし得る。読み出し書込みユニット１２６がこれらのデータ推測オペレーションのうちの１つを検証する度に、読み出し書込みユニット１２６は、データ推測を実行した読み出し書き込みユニットに対する次のオペレーションまでの全オペレーションは読み出し書込みユニットに対して非データ投機的であると示すように、その推測ポインタを進める。他の実施形態は別の方法でポインタを進める。例えば、ファンクショナルユニットはディスパッチユニットによって実行されたデータ推測のタイプを検証する。ある実施形態では、ファンクショナルユニットはディスパッチユニットがそのタイプのデータ推測を実行済みの、処理中のオペレーションセットの総数を認識してはいない。その代わりに、ファンクショナルユニットはそのファンクショナルユニット内で現在処理中のオペレーションのうちどれがデータ投機的であることかのみを識別する。従って、特定のオペレーションに対するデータ推測の検証に応答して、ファンクショナルユニット内で処理中の最も古いデータ投機的オペレーション（もしあれば）の直前のオペレーションを識別するように、ファンクショナルユニットは推測ポインタを進めることができる。そのファンクショナルユニット内で現在は処理中のオペレーションのどれもがデータ投機的でない場合、そのファンクショナルユニットに対して現在はデータ投機的な処理中のオペレーションがないことを示すように、ファンクショナルユニットはその推測ポインタの値を更新し得る。
【００４３】
図２Ｂは処理中のオペレーションをリタイアさせる方法の一実施形態のフローチャートを例示している。２１１において、１つ又はそれ以上の推測ポインタが受信される。複数の推測ポインタが受信される場合は、各推測ポインタは、非データ投機的である処理中のオペレーションの別の部位を識別する。推測ポインタのいずれかが、特定のオペレーションがまだデータ投機的であると示す場合は、そのオペレーションは２１３において示すように、リタイアされない。しかし、オペレーションがデータ投機的である可能性をどの推測ポインタも示さない場合は、そのオペレーションのリタイアメントに対する全ての他の必要条件が満たされたと仮定して、２１３−２１５に示すように、そのオペレーションはリタイアされる。
［一般的なコンピュータシステム］
【００４４】
図３は、バスブリッジ９０２を介して様々なシステムコンポーネントに結合されたプロセッサ１００を含むコンピュータシステム９００の一実施形態のブロック図を示す。プロセッサ１００は、上述したように推測ポインタを生成するように構成された１つ又はそれ以上のデータ検証ユニットと、非データ投機的であるとして推測ポインタによって識別されたオペレーションをリタイアするように構成されたリタイアキューを含み得る。コンピュータシステムの他の実施形態が、可能であり、また考えられる。図示されたシステムにおいて、メインメモリ２００は、メモリバス９０６を介してバスブリッジ９０２に結合され、画像コントローラ９０８は、ＡＧＰバス９１０を介してバスブリッジ９０２に結合される。いくつかのＰＣＩデバイス９１２Ａ〜９１２Ｂは、ＰＣＩバス９１４を介してバスブリッジ９０２に結合される。第２バスブリッジ９１６も、ＥＩＳＡ／ＩＳＡバス９２０を介してＥＩＳＡ又はＩＳＡデバイス９１８のうちの１つ又はそれ以上に電気的インターフェースを適用するように供給されることが可能である。この実施例では、プロセッサ１００は、ＣＰＵバス９２４と任意のＬ２キャッシュ９２８を介してバスブリッジ９０２に結合される。ある実施形態では、プロセッサ１００は統合されたＬ１キャッシュ（図示せず）を含むことが可能である。
【００４５】
バスブリッジ９０２は、プロセッサ１００、メインメモリ２００、画像コントローラ９０８と、ＰＣＩバス９１４に接合されたデバイス間のインターフェースを与える。オペレーションがバスブリッジ９０２に接続されたデバイスの１つから受信されると、バスブリッジ９０２はこのオペレーションの目標（例えば、特定のデバイスもしくはＰＣＩバス９１４の場合、目標がＰＣＩバス９１４上にあるデバイス）を識別する。バスブリッジ９０２がオペレーションを目標となるデバイスに伝送する。バスブリッジ９０２は通常、ソースデバイス又はバスによって使用されるプロトコル、あるいはターゲットデバイス又はバスによって使用されるプロトコルからのオペレーションを変換する。
【００４６】
ＰＣＩバス９１４のためにＩＳＡ／ＥＩＳＡバスにインターフェースを供給することに加えて、第２バスブリッジ９１６は、更なる機能性を内蔵し得る。第２バスブリッジ９１６の外部あるいは第２バスブリッジに統合されているうちの何れかである入力／出力コントローラ（図示せず）は、コンピュータシステム９００内に含むことができ、キーボード及びマウス９２２と様々なシリアル及びパラレルポートに関するオペレーショナルサポートを提供する。他の実施形態では、外部のキャッシュユニット（図示せず）は、プロセッサ１００とバスブリッジ９０２間のＣＰＵバス９２４にも結合され得る。他の形態では、外部のキャッシュはバスブリッジ９０２に結合することができ、外部のキャッシュのキャッシュコントロールロジックは、バスブリッジ９０２に統合可能である。Ｌ２キャッシュ９２８はプロセッサ１００の裏面の構成に示される。Ｌ２キャッシュ９２８は、プロセッサ１００から分離し得、プロセッサ１００でカートリッジ（例、スロット１又はスロットＡ）内に統合可能であり、あるいはプロセッサ１００で半導体基板上にも統合可能である。
【００４７】
メインメモリ２００はアプリケーションプログラムが記録され、プロセッサ１００が主に実行するメモリである。適合可能なメインメモリ２００は、ＤＲＡＭ（Dynamic Random Access Memory）を含み得る。例えば、複数のＳＤＲＡＭ（同期ＤＲＡＭ）あるいはＲａｍｂｕｓ  ＤＲＡＭ （ＲＤＲＡＭ；Rambus 社開発のＤＲＡＭ）が適合可能であり得る。
【００４８】
ＰＣＩデバイス９１２Ａ〜９１２Ｂは、ネットワークインターフェースカード、ビデオアクセラレータ、オーディオカード、ハードあるいはフロッピーディスクドライブあるいはドライブコントローラ、ＳＣＳＩ（Small Computer System Interface）アダプタ及びテレフォニーカードのような多様な周辺デバイスを示す。同様に、ＩＳＡデバイス９１８はモデム、サウンドカード、及びＧＰＩＢあるいはフィールドバスインターフェースカードのような周辺デバイスの様々な形式を表す。
【００４９】
グラフィックスコントローラ９０８は、モニタ９２６上のテキスト及び画像のレンダリングをコントロールするよう提供される。グラフィックスコントローラ９０８は、メインメモリ２００に、及びメインメモリ２００から実効的にシフト可能である３次元データ構造を表現する技術分野で通常、知られる一般的なグラフィックスアクセラレータを実施可能である。それ故、グラフィックスコントローラ９０８は、バスブリッジ９０２内のターゲットインターフェースへのアクセスを要求可能であり、又受信可能であり、それによってメインメモリ２００へのアクセスを入手するＡＧＰバス９１０のマスターであり得る。専用のグラフィックスバスは、メインメモリ２００からのデータの高速検索に対応する。ある種のオペレーションに関して、グラフィックスコントローラ９０８は、ＡＧＰバス９１０上にＰＣＩプロトコルトランザクションを生成するよう更に構成可能である。それ故、バスブリッジ９０２のＡＧＰインターフェースは、ＰＣＩプロトコルターゲットとイニシエータトランザクションと同様にＡＧＰプロトコルトランザクションの双方を支援するよう機能性を含み得る。モニタ９２６は、画像あるいはテキストが表示可能である電気的モニタの全てである。適切なモニタ９２６は、ブラウン管（“ＣＲＴ；Cathode Ray Tube”）、液晶モニタ（“ＬＣＤ；Liquid Crystal Display”）を含む。
【００５０】
ＡＧＰ、ＰＣＩ及びＩＳＡ又はＥＩＳＡバスは、上述した記載の例として使用されており、所望に応じて全てのバスアーキテクチャが上書きされることに注目される。コンピュータシステム９００が追加のプロセッサ（例えば、コンピュータシステム９００の任意のコンポーネントとして示されるプロセッサ１００ａ）を含むマルチプロセッシングコンピュータシステムであることが更に注目される。プロセッサ１００ａは、プロセッサ１００と同様であり得る。より具体的には、プロセッサ１００ａは、プロセッサ１００の同一のコピーであり得る。プロセッサ１００ａは、独立したバスを介して（図３に示されるように）バスブリッジ９０２に接続されるか、あるいはプロセッサ１００とＣＰＵバス９２４を共有することができる。更に、プロセッサ１００ａは、Ｌ２キャッシュ９２８と同様の任意のＬ２キャッシュ９２８ａに結合することができる。
【００５１】
図４を参照すると、上述したように推測ポインタと、この推測ポインタに依存するオペレーションをリタイアするリタイアキューを生成するように構成された、１つ又はそれ以上のデータ推測検出ユニットを備えたプロセッサ１００を含むコンピュータシステム９００の他の実施形態が示される。他の実施形態が可能であり、考えられる。図４の実施形態においては、コンピュータシステム９００はいくつかのプロセッシングノード１０１２Ａ、１０１２Ｂ、１０１２Ｃ及び１０１２Ｄを含む。各プロセッシングノードは、各プロセッシングノード１０１２〜１０１２Ｄ内に含まれるメモリコントローラ１０１６Ａ〜１０１６Ｄを介して各メモリ２００Ａ〜２００Ｄに結合される。加えて、プロセッシングノード１０１２Ａ〜１０１２Ｄは、プロセッシングノード１０１２Ａ〜１０１２Ｄ間を通信するように使用されるインターフェースロジックを含む。例えば、プロセッシングノード１０１２Ａは、プロセッシングノード１０１２Ｂと通信するためのインターフェースロジック１０１８Ａ、プロセッシングノード１０１２Ｃと通信するためのインターフェースロジック１０１８Ｂ、及び更なる他のプロセッシングノード（図示せず）と通信するための第３インターフェースロジック１０１８Ｃを含む。同様に、プロセッシングノード１０１２Ｂは、インターフェースロジック１０１８Ｄ、１０１８Ｅ及び１０１８Ｆを含み、プロセッシングノード１０１２Ｃは、インターフェースロジック１０１８Ｇ、１０１８Ｈ、及び１０１８Ｉを含み、プロセッシングノード１０１２Ｄは、インターフェースロジック１０１８Ｊ、１０１８Ｋ、及び１０１８Ｌを含む。プロセッシングノード１０１２Ｄは、インターフェースロジック１０１８Ｌを介して複数の入力／出力デバイス（例、デイジーチェーン構成におけるデバイス１０２０Ａ〜１０２０Ｂ）と通信するよう結合される。他のプロセッシングノードは、同様の方法で他のＩ／Ｏデバイスと通信し得る。
【００５２】
プロセッシングノード１０１２Ａ〜１０１２Ｄは、インタープロセッシングノード通信用にパケットベースのリンクを実装する。本実施形態において、リンクが単方向ライン（ユニディレクタルライン）のセット（例えば、ライン１０２４Ａがプロセッシングノード１０１２Ａからプロセッシングノード１０１２Ｂへパケットを伝送するように使用され、ライン１０２４Ｂは、プロセッシングノード１０１２Ｂからプロセッシングノード１０１２Ａにパケットを伝送するように使用される）として実装される。その他のライン１０２４Ｃ−１０２４Ｈのセットは、図４に例示しているように、その他のプロセッシングノード間にパケットを伝送するように使用される。一般的に、ライン１０２４の各セットは、１つ又はそれ以上のデータラインを含み、このデータラインに応じた１つ又はそれ以上のクロックラインを含み、伝送されるパケット形式を示す１つ又はそれ以上のコントロールラインを含む。リンクは、プロセッシングノード間の通信用にキャッシュコヒーレントに、あるいはプロセッシングノードとＩ／Ｏデバイス（あるいはＰＣＩバス又はＩＳＡバスのような従来の構造のＩ／Ｏバスへのバスブリッジ）間の通信用には非コヒーレントに動作させてもよい。更に、リンクは、図示されるようにＩ／Ｏデバイス間のデイジーチェーン構造を使用して非コヒーレントに動作され得る。１つのプロセッシングノードから別のプロセッシングノードに伝送されるパケットは、１つ又はそれ以上の中間ノードを通じて伝送し得る。例えば、プロセッシングノード１０１２Ａによってプロセッシングノード１０１２Ｄまで伝送されたパケットは、図４に示すプロセッシングノード１０１２Ｂあるいはプロセッシングノード１０１２Ｃの何れかを介して伝送し得る。全ての適合可能なルーティングアルゴリズムが使用され得る。コンピュータシステム９００の他の実施形態は、図４に示す実施形態より多いか、あるいは少ないプロセッシングノードを含み得る。
【００５３】
通常、パケットはノード間のライン１０２４に１つ又はそれ以上のビット時間として伝送され得る。ビット時間は、対応するクロックラインのクロック信号の立ち上がり又は立ち下がりエッジであり得る。パケットはトランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシーを維持するためのプローブパケット、及びプローブとコマンドに応答するための応答パケットを含み得る。
【００５４】
メモリコントローラとインターフェースロジックに加えて、プロセッシングノード１０１２Ａ〜１０１２Ｄは、１つ又はそれ以上のプロセッサを含み得る。大まかに言って、プロセッシングノードは少なくとも１プロセッサを含み、所要に応じて任意的にメモリと他の論理と通信するためのメモリコントローラを含み得る。より具体的には、各プロセッシングノード１０１２Ａ〜１０１２Ｄは、１つ又はそれ以上のプロセッサ１００のコピーを含み得る。外部のインターフェースユニットは、メモリコントローラ１０１６と同様にノード内にインターフェースロジック１０１８を含み得る。
【００５５】
メモリ２００Ａ〜２００Ｄは、適合可能な全てのメモリデバイスを含み得る。例えば、メモリ２００Ａ〜２００Ｄは、１つ又はそれ以上のＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ），静的ＲＡＭ等を含み得る。コンピュータシステム９００のアドレススペースは、メモリ２００Ａ〜２００Ｄ間に分割される。各プロセッシングノード１０１２Ａ〜１０１２Ｄは、何れのアドレスが何れの２００Ａ〜２００Ｄにマップされるかを決定し、従って、プロセッシングノード１０１２Ａ〜１０１２Ｄの何れに特定的なアドレスのメモリ要求が送信されなければならないかのを決定するよう使用されるメモリマップを含み得る。一実施形態において、コンピュータシステム９００におけるアドレスのコヒーレンシーポイントはこのアドレスに対応するバイトを記録するメモリに結合されたメモリコントローラ１０１６Ａ〜１０１６Ｄである。言い換えれば、メモリコントローラ１０１６Ａ〜１０１６Ｄは、対応するメモリ２００Ａ〜２００Ｄへの各アクセスがキャッシュコヒーレントにおいて生じることを確実にする役目を担う。メモリコントローラ１０１６Ａ〜１０１６Ｄは、メモリ２００Ａ〜２００Ｄへインターフェースするためのコントロール回路を含み得る。加えて、メモリコントローラ１０１６Ａ〜１０１６Ｄは、メモリ要求をキューするための要求キューを含み得る。
【００５６】
インターフェースロジック１０１８Ａ〜１０１８Ｌは、リンクからのパケットを受信し、リンク上に伝送されるパケットをバッファリングする様々なバッファを含み得る。コンピュータシステム９００は、パケットを伝送する適合可能なフローコントロール機構の全てを使用し得る。例えば、一実施形態において、各インターフェースロジック１０１８は、インターフェースロジックが接続されるリンクの他の末端におけるレシーバ内のバッファの各形式の数のカウントを記録する。インターフェースロジックは、受信するインターフェースロジックがパケットを記録するための空いているバッファを有さない場合は、パケットを伝送しない。受信するバッファが伝送されるパケットを送信することによって解除されるので、受信するインターフェースロジックが、メッセージを送信インターフェースロジックに伝送し、バッファが解除されたことを示す。そのような機構は、“クーポンベースの”システムと称される。
【００５７】
Ｉ／Ｏデバイス１０２０Ａ〜１０２０Ｂは、適合可能なＩ／Ｏデバイスであり得る。例えば、Ｉ／Ｏデバイス１０２０Ａ〜１０２０Ｂが、これらのデバイスが結合され得る他のコンピュータシステム（例、ネットワークインターフェースカードあるいはモデム）と通信するデバイスを含み得る。更に、Ｉ／Ｏデバイス１０２０Ａ〜１０２０Ｂは、ビデオアクセラレータ、オーディオカード、ハード又はフロッピーディスクドライブ又はドライブコントローラ、ＳＣＳＩ（Small Computer System Interface）アダプタ、及びテレフォニーカード、サウンドカード、及びＧＰＩＢ又はフィールドバスインターフェースカードのような様々なデータ入手カードを含む。用語“Ｉ／Ｏデバイス”と“周辺デバイス”は、同義語として本文に意図される。
【００５８】
ここで使用されるように、“クロックサイクル”の用語は、命令プロセッシングパイプラインの様々なステージがタスクを完了する時間間隔を意味する。命令及び計算された値は、クロックサイクルを定義するクロック信号に従ってメモリ素子（レジスタあるいはアレイなど）によって取得される。例えば、メモリ素子は、クロック信号の立ち上がり又は立ち下がりエッジに従って値を取得することができる。
【００５９】
上述した明細書は信号を“表された（asserted）”ものとして説明するものである。情報の特定的な一部を示す値を伝送するとき、信号は“表された”ものとして定義され得る。特定的な信号では、バイナリ値が「１」の信号を伝送するとき、あるいはバイナリ値が「０」の値を伝送する場合に、「表された」として定義され得る。
【００６０】
これまでの開示を完全に理解したならば、当業者には様々な変形及び変更が可能であることが明白であろう。添付の特許請求の範囲はそのような変形及び変更の全てを包含するように解釈されることを意図したものである。
【産業上の利用可能性】
【００６１】
本発明は、概してマイクロプロセッサの技術分野に利用可能である。
【図面の簡単な説明】
【００６２】
【図１】一実施形態に従ったマイクロプロセッサを示す図。
【図２Ａ】一実施形態に従った推測ポインタがどのように進められるかを例示したフローチャート。
【図２Ｂ】一実施形態に従った現在の推測ポインタのオペレーションリタイアメントを条件付ける方法を例示したフローチャート。
【図３】一実施形態に従った一般的なコンピュータシステムを示した図。
【図４】他の実施形態に従った別の一般的なコンピュータシステムを示した図。
【図１】
0004745960.tif 000002
【図２Ａ】
0004745960.tif 000003
【図２Ｂ】
0004745960.tif 000004
【図３】
0004745960.tif 000005
【図４】
0004745960.tif 000006