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