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