(57)【要約】プロセッサ（１００）は、オペレーションを発行するように構成されたスケジューラ（１１８）と、スケジューラによって発行されたメモリオペレーションを実行するように構成された読出し／書き込みユニット（１２６Ｃ）とを含み得る。この読出し／書き込みユニット（１２６Ｃ）は、読出し／書き込みユニット（１２６Ｃ）に発行されたメモリオペレーションを識別する情報を記録するように構成される。読出し／書き込みユニット（１２６Ｃ）は、発行されたメモリオペレーションの１つに関するデータ投機が誤っているとの検出を受けて、スケジューラ（１１８）に指示を送ることによって、発行されたメモリオペレーションの少なくとも１つをリプレイするように構成される。スケジューラ（１１８）は、読出し／書き込みユニット（１２６Ｃ）によって識別されたメモリオペレーションを応答可能に再発行するように構成される。
2008512769.tif 000002
【特許請求の範囲】
【請求項１】
オペレーションを発行するように構成されたスケジューラ（１１８）と、
前記スケジューラ（１１８）によって発行されたメモリオペレーションを受信するように結合され、前記メモリオペレーションを実行するように構成された読出し／書き込みユニット（１２６Ｃ）と、を有し、
前記読出し／書き込みユニット（１２６Ｃ）はさらに、
所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測し、
前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測を受けて、前記それ以前の書込みオペレーションのアドレスが計算される前に前記所与の読出しオペレーションを実行し、
前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測の後に、前記所与の読出しオペレーションが予測ミスしたたかどうかを検出し、
前記所与の読出しオペレーションが予測ミスしたことの検出に応答して、前記読出しオペレーションを再発行しなければならないことを示すリプレイ指示を前記スケジューラに送る、
ように構成されているマイクロプロセッサ（１００）。
【請求項２】
前記読出し／書き込みユニット（１２６Ｃ）は、複数のローカルプレディクタエントリ（３３５）を備えたローカルプレディクタ（３３０）を含み、前記複数のローカルプレディクタエントリ（３３５）の各々は、依存予測値（３３７）を含み、前記読出し／書込みユニット（１２６Ｃ）はさらに、前記所与の読出しオペレーションに対応する所与のローカルプレディクタエントリ（３３５）にアクセスし、前記所与のローカルプレディクタエントリ（３３５）に含まれる所与の依存予測値（３３７）を評価することで前記所与の読出しオペレーションが前記それ以前の書込みオペレーションに依存しているかどうかを予測するように構成されている、請求項１に記載のマイクロプロセッサ（１００）。
【請求項３】
前記読出し／書き込みユニット（１２６Ｃ）は、グローバルヒストリレジスタ（３４２）と複数のグローバルプレディクタエントリ（３４５）とを含むグローバルヒストリレジスタ（３４２）を含み、前記グローバルヒストリレジスタ（３４２）は、実行された複数の読出しオペレーションに対応する複数の各々の依存値を記録するように構成され、前記複数のグローバルプレディクタエントリ（３４５）の各々は依存予測値（３４７）を含み、前記読出し／書き込みユニット（１２６Ｃ）はさらに、前記グローバルヒストリレジスタ（３４２）に対応する所与のグローバルプレディクタエントリ（３４５）にアクセスし、前記所与のグローバルプレディクタエントリ（３４５）に含まれる所与の依存予測値（３４７）を評価することで、前記所与の読出しオペレーションが前記それ以前の書込みオペレーションに依存しているかどうかを予測するように構成される、請求項１に記載のマイクロプロセッサ（１００）。
【請求項４】
前記読出し／書き込みユニット（１２６Ｃ）は、
各々が依存予測値（３３７）を含む複数のローカルプレディクタエントリ（３３５）を備えたローカルプレディクタ（３３０）と、
グローバルヒストリレジスタ（３４２）および複数のグローバルプレディクタエントリ（３４５）を備えたグローバルプレディクタ（３４０）を含み、前記グローバルヒストリレジスタ（３４２）は、実行された複数の読出しオペレーションに対応する複数の各々の依存予測値を記録するように構成され、前記複数のグローバルプレディクタエントリ（３４５）の各々は、依存予測値（３４７）を含み、
前記読出し／書き込みユニット（１２６Ｃ）はさらに、
前記所与の読出しオペレーションが動的な読出しオペレーションであるかどうかを判定し、
前記所与の読出しオペレーションが動的な読出しオペレーションでないという前記判定を受けて、前記所与の読出しオペレーションに対応する所与のローカルプレディクタエントリ（３３５）にアクセスし、前記所与のローカルプレディクタエントリ（３３５）に含まれるローカル依存予測値（３３７）を評価し、かつ、
前記所与の読出しオペレーションが動的読出しオペレーションであるという前記判定を受けて、前記グローバルヒストリレジスタ（３４２）に対応する所与のグローバルプレディクタエントリ（３４５）にアクセスし、前記所与のグローバルプレディクタエントリ（３４５）に含まれるグローバル依存予測値を評価する、
ことによって前記所与の読出しオペレーションが前記それ以前の書込みオペレーションに依存しているかどうかを予測するように構成されている、請求項１に記載のマイクロプロセッサ（１００）。
【請求項５】
前記読出し／書き込みユニット（１２６Ｃ）に結合されたメモリファイル（１３２）をさらに含むとともに、第１のアドレス指定パターン（２０６）と第１タグ（２０８）とを記録するように構成されたエントリ（２２０）を含み、前記メモリファイル（１３２）は、前記エントリ（２２０）に含まれる前記第１のアドレス指定パターン（２０６）を前記所与の読出しオペレーションに対応する第２のアドレス指定パターンと比較するように構成されており、前記第２アドレス指定パターンが前記エントリ（２２０）に記録されたアドレス指定パターンと一致すれば、前記メモリファイル（１３２）は、前記第１タグ（２０８）によって識別されたデータ値を前記所与の読出しオペレーションの投機的結果にリンクするように構成されており、前記所与の読出しオペレーションが前記それ以前の書込みオペレーションに依存しているかどうかを予測するステップは、前記所与の読出しオペレーションに対応するリンクが存在するかどうかを検出するステップを含む、請求項１に記載のマイクロプロセッサ（１００）。
【請求項６】
読出しオペレーションを受信するステップと、
前記読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測するステップと、
前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測を受けて、前記それ以前の書込みオペレーションのアドレスが計算される前に前記読出しオペレーションを実行するステップと、
前記読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測の後に、前記読出しオペレーションが予測ミスしたかどうかを検出するステップと、
前記読出しオペレーションが予測ミスしたという検出を受けて、前記読出しオペレーションを再発行しなければならないことを示すリプレイ指示をスケジューラ（１１８）に送るステップ、を含む方法。
【請求項７】
前記読出しオペレーションが前記それ以前の書込みオペレーションに依存しているかどうかを予測するステップは、前記読出しオペレーションに対応するローカルプレディクタエントリ（３３５）にアクセスするステップ、および、前記ローカルプレディクタエントリ（３３５）に含まれる依存予測値（３３７）を評価するステップを含む、請求項６に記載の方法。
【請求項８】
前記読出しオペレーションが前記それ以前の書込みオペレーションに依存しているかどうかを予測するステップは、グローバルヒストリレジスタ（３４２）に対応するグローバルプレディクタエントリ（３４５）にアクセスし、前記グローバルプレディクタエントリ（３４５）に含まれる依存予測値（３４７）を評価するステップを含み、前記グローバルヒストリレジスタ（３４２）は、実行された複数の読出しオペレーションに対応する複数の各々の依存値を記録するように構成される、請求項６に記載の方法。
【請求項９】
前記読出しオペレーションが前記それ以前の書込みオペレーションに依存しているかどうかを予測するステップは、
前記読出しオペレーションが動的な読出しオペレーションであるかどうかを判定するステップを含み、
前記読出しオペレーションが動的な読出しオペレーションではないという前記判定を受けて、前記読出しオペレーションに対応するローカルプレディクタエントリ（３３５）にアクセスし、前記ローカルプレディクタエントリ（３３５）に含まれるローカル依存予測値（３３７）の評価を行うとともに、
前記読出しオペレーションが動的な読出しオペレーションであるという前記判定を受けて、グローバルヒストリレジスタ（３４２）に対応するグローバルプレディクタエントリ（３４５）にアクセスし、前記グローバルプレディクタエントリ（３４５）に含まれるグローバル依存予測値（３４７）を評価し、前記グローバルヒストリレジスタ（３４２）は、実行された複数の読出しオペレーションに対応する複数の各々の依存値を記録するように構成される、請求項６に記載の方法。
【請求項１０】
メモリ（２００）と、
前記メモリ（２００）に結合されたプロセッサ（１００）と、を含み、前記プロセッサ（１００）は、
オペレーションを発行するように構成されたスケジューラ（１１８）、および、
前記スケジューラ（１１８）によって発行されたメモリオペレーションを受信するように結合され、前記メモリオペレーションを実行するように構成された読出し／書き込みユニット（１２６Ｃ）を含み、
前記読出し／書き込みユニット（１２６Ｃ）はさらに、
所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測し、
前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているとの予測を受けて、前記それ以前の書込みオペレーションのアドレスが計算される前に前記所与の読出しオペレーションを実行し、
前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測の後に、前記所与の読出しオペレーションが予測ミスしたかどうかを検出し、
前記所与の読出しオペレーションが予測ミスしたことの検出を受けて、前記読出しオペレーションを再発行しなければならないことを示すリプレイ指示を前記スケジューラ（１１８）に送るように構成されている、コンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサの分野に関し、より詳細には、プロセッサにおいてデータの投機的実行を行うことに関する。
【背景技術】
【０００２】
スーパースカラプロセッサは、複数の命令を同時に実行し、その設計に適合する最短のクロックサイクルを使用することで高性能を達成している。
しかし、命令間におけるデータと制御のフロー依存性により、所定の時間に発行可能な命令の数が制限されてしまう。
この結果、一部のプロセッサでは、更なるパフォーマンスゲイン（性能向上）を図るために投機的実行をサポートしている。
【０００３】
このような投機あるいはスペキュレーションの１つのタイプとして、コントロールフロー投機(control flow speculation)が挙げられる。
コントロールフロー投機は、プログラム制御が進行する方向を予測する。例えば、分岐が発生するかどうかを予測するために分岐予測が用いられる。様々なタイプの分岐予測が利用可能であり、単純に毎回同じ予測を行う方法から、履歴に基づいた予測を行うために、プログラム中の過去の分岐の詳細な履歴を維持する方法まである。
【０００４】
分岐予測は、ハードウェアの最適化、コンパイラの最適化、またはこの両方によって容易になる。
分岐予測機構によって提供される予測に基づいて、命令は投機的にフェッチされ、実行され得る。
分岐命令が最終的に評価されるときに、分岐予測を検証することができる。予測が誤っていれば、誤った予測に基づいて投機的に実行された全ての命令は破棄され得る。
【０００５】
別の投機のタイプとしては、データ値を予測するデータ投機がある。すでに提案されたデータ投機の形式は、メモリオペレーション用にアドレスを投機的に生成し、コンピュータオペレーションで使用するためにデータ値を投機的に生成する。
コントロール投機と同様に、投機的に値を生成するために使用された根本的な条件を最終的に評価し、投機を検証済みとするか、あるいは投機を実行しないようにする。
【発明の開示】
【発明が解決しようとする課題】
【０００６】
投機を行うことで、投機条件がわかるまで待機することなく実行を進めることができるので、正しい投機によって得られる性能が、誤投機による性能損失を超えていれば、大幅な性能向上を図ることができる。
従って、誤った投機に起因するパフォーマンスペナルティを減らすことが望ましい。
【課題を解決するための手段】
【０００７】
データ投機プロセッサにおいて、（プログラム順序で）それ以前の（より古い）書込みオペレーションへの、読出しオペレーションの依存性を予測する方法およびシステムの様々な実施形態が開示される。
一実施形態では、プロセッサはオペレーションを発行するように構成されたスケジューラと、スケジューラによって発行されたメモリオペレーションを受信するように結合され、メモリオペレーションを実行するように構成された読出し／書き込みユニットを含み得る。
読出し／書き込みユニットはさらに、所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測し、その所与の読出しオペレーションがそれ以前の書込みオペレーションから独立しているという予測に応答してそれ以前の書込みオペレーションのアドレスが計算される前に所与の読出しオペレーションを実行し、所与の読出しオペレーションがそれ以前の書込みオペレーションから独立しているという予測の後に、所与の読出しオペレーションが予測ミスしたかどうかを検出し、かつ、所与の読出しオペレーションが予測ミスしたことの検出を受けて、スケジューラに読出しオペレーションを再発行しなければならないことを示すリプレイ指示を与えるよう構成できる。
【０００８】
１つの特定の実施形態では、読出し／書き込みユニットは複数のローカルプレディクタエントリからなるローカルプレディクタを含むことができる。
複数のローカルプレディクタエントリの各々は、依存予測値を含んでもよく、読出し／書き込みユニットはさらに、所与の読出しオペレーションに対応する所与のローカルプレディクタにアクセスし、所与のローカルプレディクタエントリに含まれる所与の依存予測値を評価することによって、所与の読出しオペレーションがそれ以前の読出しオペレーションに依存しているかどうかを予測するように構成することができる。
【０００９】
別の特定の実施形態では、読出し／書き込みユニットは、グローバルヒストリレジスタおよび複数のグローバルプレディクタエントリを含むグローバルプレディクタを含んでもよい。
このグローバルヒストリレジスタは、実行された複数の読出しオペレーションに対応する複数の各々の依存値を記録するように構成されてもよい。
複数のグローバルプレディクタエントリの各々は、依存予測値を含むことができる。
読出し／書き込みユニットはさらに、グローバルヒストリレジスタに対応する所与のグローバルプレディクタエントリにアクセスし、この所与のグローバルプレディクタエントリに含まれる所与の依存予測値を評価することで、所与のロードオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測するように構成されてもよい。
【００１０】
さらに別の特定の実施形態では、読出し／書き込みユニットは、ローカルプレディクタとグローバルプレディクタとを含むことができる。ローカルプレディクタは、各々が依存予測値を含み得る複数のローカルプレディクタエントリを備える。グローバルプレディクタは、グローバルヒストリレジスタと複数のグローバルプレディクタエントリとを備える。このグローバルヒストリレジスタは、実行された複数の読出しオペレーションに対応する複数の各々の依存値を記録するように構成することができ、この複数のグローバルプレディクタエントリの各々は、依存予測値を含み得る。
読出し／書き込みユニットはさらに、所与の読出しオペレーションが動的な読出しオペレーションであるかどうかを判定することでそれ以前の書込みオペレーションに依存しているかどうかを予測するように構成されてもよい。
所与の読出しオペレーションが動的な読出しオペレーションではないという判定を受けて、読出し／書き込みユニットは、所与の読出しオペレーションに対応する所与のローカルプレディクタにアクセスし、この所与のローカルプレディクタエントリに含まれるローカル依存予測値を評価することができる。
所与の読出しオペレーションが動的な読出しオペレーションであるという判定にを受けて、読出し／書き込みユニットは、グローバルヒストリレジスタに対応する所与のグローバルプレディクタエントリにアクセスし、この所与のグローバルプレディクタエントリに含まれるグローバル依存予測値を評価することができる。
【発明を実施するための最良の形態】
【００１１】
添付の図面と併せて下記の詳細な説明を読めば、本発明をさらに理解することができる。本発明は、様々に変形することができ、他の形態を取り得るが、その特定の実施形態を、例として図面に図示し、かつ本明細書に詳細に記載する。しかし、図面およびその詳細な説明は、開示の形態に本発明を限定することを意図するものではなく、本発明が、添付の特許請求の範囲によって規定される本発明の趣旨ならびに範囲に含まれるすべての変形例、均等物および代替例を含むことを意図することが理解されるべきである。
本明細書中に使用されている見出しは、分類のみを意図しており、本明細書または特許請求の範囲を限定するものではない。
さらに、本願にわたり「し得る、してもよい(may)」との用語は許容の意味（すなわち、可能性があること、できること）に用いられ、義務的な意味[すなわち必須(must)]の意味には用いられていない点に留意されたい。「含む、備える」との用語ならびにその派生語は、「含むがこれに限定されない」ことを意味する。
「接続されている」との用語は、「直接的または間接的に接続されている」ことを意味し、「結合されている」との用語は、「直接的または間接的に結合されている」ことを意味する。
【００１２】
図１は、プロセッサ１００の一実施形態のブロック図である。プロセッサ１００は、システムメモリ２００に記録された命令を実行するように構成されている。これらの命令の多くは、システムメモリ２００に記録されたデータを操作するものである。
システムメモリ２００はコンピュータシステム全体に物理的に配置可能であり、１つ以上のプロセッサ１００からアクセスできる点に留意されたい。
【００１３】
プロセッサ１００は、命令キャッシュ１０６とデータキャッシュ１２８とを含み得る。プロセッサ１００は、命令キャッシュ１０６に結合されたプリフェッチユニット１０８を含み得る。ディスパッチユニット１０４は、命令キャッシュ１０６から命令を受信して、スケジューラ１１８にオペレーション（operation）を発するように構成され得る。１以上のスケジューラ１１８はディスパッチユニット１０４から発送されたオペレーションを受信し、１以上の実行コア１２４にオペレーションを発行するように結合できる。実行コア１２４はそれぞれ、データキャッシュ１２８に対するアクセスを実行するように構成された読出し／書込みユニットを含み得る。
実行コア１２４によって生成された結果は、結果バス１３０に出力され得る。これらの結果は、続いて発行される命令のためのオペランド値として使用可能であり、および／または、レジスタファイル１１６に記録される。リタイアキュー１０２は、スケジューラ１１８およびディスパッチユニット１０４に結合することができる。このリタイアキュー１０２は、発行されたオペレーションのそれぞれがいつリタイア可能であるかを決定するように構成することができる。一実施形態では、プロセッサ１００は、ｘ８６アーキテクチャと互換性を持つように設計されてもよい。プロセッサ１００はその他多くの要素を含み得る点に留意されたい。例えば、プロセッサ１００は、分岐予測ユニット（図示せず）を含むことができる。
【００１４】
命令キャッシュ１０６は、ディスパッチユニット１０４が命令を受信する前に命令を一時的に記録することができる。命令コードは、システムメモリ２００からプリフェッチユニット１０８を介してコードをプリフェッチすることにより、命令キャッシュ１０６に供給できる。命令キャッシュ１０６は、様々な構成で実施可能である（例えば、セットアソシエーティブ、フルアソシアティブ、またはダイレクトマッピング）。ある実施形態では、命令キャッシュ１０６および／あるいはデータキャッシュ１２８の多数レベルがあり得る。いくつかのレベルのキャッシュは、図示しているように、プロセッサ１００と一体化してもよく、一方、他のレベルのキャッシュはプロセッサの外部に拡張してもよい。
【００１５】
プリフェッチユニット１０８は、命令キャッシュ１０６に記録するために命令コードをシステムメモリ２００からプリフェッチすることができる。一実施形態では、プリフェッチユニット１０８は、システムメモリ２００から命令キャッシュ１０６にコードをバースト転送させるように構成してもよい。プリフェッチユニット１０８は様々な特定のコードプリフェッチ技術およびアルゴリズムを採用することができる。
【００１６】
ディスパッチユニット１０４は、オペランドのアドレス情報、即値データおよび／または変位データに加えて、実行コア１２４が実行可能なビットエンコードされたオペレーションを含む信号を出力可能である。ある実施形態では、ディスパッチユニット１０４は、ある特定の命令を実行コア１２４内で実行可能なオペレーションにデコードするためのデコード回路（図示せず）を含むことができる。単純な命令は、単一のオペレーションに対応する。ある実施形態では、より複雑な命令は複数のオペレーションに対応する。オペレーションがレジスタの更新を伴う場合、投機レジスタ状態を記録するためにレジスタファイル１１６内のレジスタ位置が予約される（別の実施形態では、リオーダーバッファが各レジスタに対する１以上の投機レジスタ状態を記録するために用いられる）。ある実施形態では、ディスパッチユニット１０４は、レジスタのリネームを容易にするために、ソースおよび目的オペランドの論理レジスタ名を物理レジスタ名に変換可能なレジスタマップを実装してもよい。このようなレジスタマップは、レジスタファイル１１６内のどのレジスタが現在割り当てられているのかを追跡することができる。
【００１７】
図１のプロセッサ１００は、アウトオブオーダー実行をサポートする。リタイアキュー１０２は、レジスタの読出しオペレーションおよび書込みオペレーションのために元のプログラムシーケンスの記録を行い、投機的命令実行および分岐予測ミスからの復帰を許可し、正確な例外処理を容易にする。リタイアキュー１０２は、有効になったオペレーションがバッファの”ボトム”に移動し、それによって待ち行列の”トップ”に新しいエントリのための空きを作る、先入れ先出し構造で実装されてもよい。
リタイアキュー１０２は、オペレーションが実行を完了したことに応答してオペレーションを停止し、プログラムオーダーでそのオペレーションを含むオペレーションまでのいずれのオペレーションに対して実行されたいずれのデータおよび制御スペキュレーションが照合すなわちベリファイされる。リタイアキュー１０２は、物理レジスタで値を生成したオペレーションが停止した場合に、プロセッサ１００のアーキテクチャ状態に対する物理レジスタの投機的状態のコミットメントを行う。ある実施形態においては、リタイアキュー１０２はリオーダバッファの一部として実装されてもよい。
そのようなリオーダバッファは、レジスタのリネーミングをサポートするために、投機レジスタ状態のデータ値記録部を提供してもよい。他の形態では、リタイアキュー１０２は、データ値記録部を提供しなくてもよい点に留意されたい。これに代えて、オペレーションが停止すると、リタイアキュー１０２は、投機レジスタ状態を記録する必要がなくなったレジスタファイル１１６内のレジスタの割当てを解除し、現在空いているレジスタを示す信号をレジスタマップ１３４に送る。
レジスタファイル１１６内（他の実施形態では、リオーダバッファ内）の投機レジスタ状態を、それらの状態を生成したオペレーションが有効になるまで維持することによって、分岐予測が間違っていた場合に、予測ミスされたパスに従って投機的に実行されたオペレーションの結果をレジスタファイル１１６内で無効とすることができる。
【００１８】
特定のオペレーションの所要のオペランドがレジスタ位置の場合、レジスタのアドレス情報をレジスタマップ１３４（またはリオーダバッファ）に転送することができる。例えば、ｘ８６アーキテクチャでは、８つの３２ビット論理レジスタ（例えばＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＢＰ、ＥＳＩ、ＥＤＩおよびＥＳＰ）が存在する。物理レジスタファイル１１６（またはリオーダバッファ）は、これらの論理レジスタの内容を変更した結果を記録するストレージを備えており、これによりアウトオブオーダー実行が可能となる。レジスタファイル１１６の物理レジスタは、各論理レジスタのうち１つの内容を変更すると判定された各オペレーションの結果を記録するよう割り当てられてもよい。
このため、ある特定のプログラムを実行している間の任意の時点で、レジスタファイル１１６（または別の実施形態ではリオーダバッファ）は、投機的に実行された所与の論理レジスタの内容を含むレジスタを１つ以上有し得る。
【００１９】
レジスタマップ１３４は、オペレーションの目的オペランドとして指定されたある特定の論理レジスタに物理レジスタを割り当ててもよい。
【００２０】
ディスパッチユニット１０４は、レジスタファイル１１６が、ある所与のオペレーションでソースオペランドとして指定された論理レジスタに割当てられた、すでに割当て済みの１つ以上の物理レジスタを有するという判定をし得る。レジスタマップ１３４は、その論理レジスタに最も最近に割り当てられた物理レジスタのためのタグを供給することができる。このタグは、レジスタファイル１１６内のオペランドのデータ値にアクセスするために使用してもよく、あるいは、結果バス１３０上の結果転送を介してデータ値を受信するために使用してもよい。
このオペランドがメモリ位置に対応している場合、このオペランド値は、読出し／書込みユニット１２６Ｃを介して結果バスに供給される（結果転送および／またはレジスタファイル１１１１８への記録のため）。このオペレーションがスケジューラ１１８のうちの１つによって発行されると、オペランドデータ値が実行コア１２４に供給される。別の実施形態では、オペレーションが発送されると、オペランド値が対応するスケジューラ１１８に供給されてもよい点に留意されたい（オペレーションが発行されたときに、対応する実行コア１２４に供給する代わりに）。
【００２１】
ディスパッチユニット１０４の出力で与えられたビット符号化されたオペレーションおよび即値データを１以上のスケジューラ１１８にルーティングしてもよい。本文に使用しているように、スケジューラとは、オペレーションの実行の準備ができたことを検出して、１以上のファンクショナルユニットに準備オペレーションを発行するデバイスであるという点に留意されたい。例えば、予約ステーションは、スケジューラである。スケジューラあるいはスケジューラのグループにおけるオペレーションは、命令またはオペレーションウインドウまたはスケジューリングウインドウとしても称され得る。
各スケジューラ１１８は、実行コア１２４への発行を待ついくつかのペンディングオペレーションに関するオペレーション情報（例えば、オペランド値、オペランドタグおよび／または即値データの他に、ビット符号化された実行ビット）を保持することができる。ある実施形態においては、各スケジューラ１１８は、オペランド値を記録することはできない。その代わりに、オペランド値がファンクショナルユニットによって（例えば、レジスタファイルあるいは結果バスから）読出し可能となる時点を判定するために、各スケジューラは、レジスタファイル１１６において利用可能な発行済みオペレーションおよび結果を監視することができる。
ある実施形態では、各スケジューラ１１８は、専用のファンクショナルユニットに関連付けられてもよい。別の実施形態では、１つのスケジューラ１１８が、１つ以上のファンクショナルユニット１２６にオペレーションを発行してもよい。
【００２２】
スケジューラ１１８は、実行コア１２４によって実行されるオペレーション情報を一時的に記録するために提供されてもよい。前述のように、各スケジューラ１１８は、ペンディング中のオペレーションのためにオペレーション情報を記録することができる。さらに、各スケジューラは、すでに実行済みであるが再発行される可能性のあるオペレーションのためのオペレーション情報を記録することができる。オペレーションは、必要な任意のオペランドの値が実行に間に合うように利用可能になると、実行のため実行コア１２４に発行される。
このため、オペレーションの実行順序は、元のプログラム命令のシーケンスの順序と一致しないことがある。データ投機を伴うオペレーションを非投機的になるまでスケジューラ１１８にとどめ、データ投機が誤っていれば再発行することができる。
図１に例示しているように、読出し／書込みユニット１２６Ｃは、スケジューラ１１８に再発行される１つ以上のオペレーションを識別するリプレイ指示を供給することができる。例えば、一実施形態では、そのようなリプレイ指示は、リプレイされる各オペレーションのタグを含むことができる。別の実施形態では、そのようなリプレイ指示は、特定のビットが対応のリプレイされるオペレーションを識別できるよう、対応するビットをスケジューラ１１８内の各読出し／書込みオペレーションに含むことができる。スケジューラ１１８はリプレイ指示によって識別されたオペレーションを応答可能なように再発行し得る。
【００２３】
一実施形態では、実行コア１２４のそれぞれはいくつかのファンクショナルユニット１２６（例、図１に示すファンクショナルユニット１２６Ａ〜１２６Ｃ）を含んでもよい。例えば、１２６Ａのようないくつかのファンクショナルユニットは、シフト、ローテート、論理オペレーション、及び分岐オペレーションの他に加算及び減算の整数演算オペレーションを実行するように構成されてもよい。例えば、１２８Ｂのような他のファンクショナルユニットは、浮動小数点オペレーションに対応できるように構成されてもよい。例えば、１２６Ｃのようなファンクショナルユニットによって実行される読出し／書込みオペレーション用のアドレスを生成するために、一つあるいはそれ以上のファンクショナルユニットが構成されてもよい。
一実施形態では、１２６Ｃのようなファンクショナルユニットは、ペンディング中の読出しおよび／または書込みに関するデータ及びアドレス情報のためのいくつかのストレージロケーションを備えた読出し／書込みバッファで構成されてもよい。本文中では、ファンクショナルユニット１２６Ｃは読出し／書込みユニットとも称され得る。
【００２４】
一つあるいはそれ以上のファンクショナルユニット１２６が分岐予測ユニットに条件付き分岐命令の実行に関する情報も与えることができ、それによってもし分岐予測ミスが発生したときに、分岐予測ユニットが命令プロセッシングパイプラインに入力された予測ミスした分岐に後続する命令をフラッシュすることができ、プリフェッチユニット１０６にリダイレクトすることができるようにする。このリダイレクトされたプリフェッチユニット１０６は、次に命令キャッシュ１０６またはシステムメモリ２００から正しい命令セットのフェッチを開始する。そのような状況では、投機的に実行され、レジスタファイル１１６に一時的に記録されたものを含む、予測ミスした分岐命令の後に発生した元のプログラムシーケンスにおける命令の結果は廃棄される。
【００２５】
実行コア１２４内のファンクショナルユニット１２６によって生成された結果は、レジスタの値が更新されていれば、結果バス１３０においてレジスタファイル１１６に対して出力される。メモリ位置の内容が変更されていれば、実行コア１２４内で生成された結果は、読出し／書込みユニット１２６Ｃに供給され得る。データキャッシュ１２８は、実行コア１２４とシステムメモリ２００との間で転送されたデータを一時的に記録するために提供されるキャッシュメモリである。上述の命令キャッシュ１０６と同様に、データキャッシュ１２８はセットアソシアティブ構成を含む、様々な特定のメモリ構成において実装可能である。さらに、ある実施形態では、データキャッシュ１０６および命令キャッシュ１２８は、一体化されたキャッシュに実装可能である。
【００２６】
ある実施形態では、プロセッサ１００は、一体化されたメモリコントローラ１６０を含んでもよく、これによりプロセッサはシステムメモリ２００に直接インターフェース接続できる。他の実施形態では、メモリコントローラ１６０は、プロセッサ１００をシステムメモリ２００に間接的に結合するバスブリッジに含まれてもよい。
依存予測
本文に記載しているように、データ値の誤りが見つけられ、結果として再計算される可能性があれば、データ値は投機的であるとする。投機的なデータ値とは正しいか誤っているかを確定的に識別できないものである。データ値が、いくつかのデータ投機が実行されたことに対するオペレーションの結果である場合、あるいはデータ値が他の投機的データ値に依存する場合（例えば、このデータ値が、１つ以上の投機的なオペランドを有するオペレーションの結果として生成される場合）、このデータ値を再計算してもよい。非投機的な値とは、いずれのデータ投機にも依存しない値である（しかし、そのような値はなおもコントロール投機に影響され得る）。
【００２７】
マイクロプロセッサ１００における各種メカニズムはデータ投機を実行することができる。例えば、一実施形態では、読出し／書込みユニット１２６Ｃは、書込みアドレスが計算される前に、所与の読出しが以前の書込みオペレーションに依存しているかどうかを予測できる。以前の書込みから独立していると予測された読出しは、書込みオペレーションに対して自由にスケジュールでき、投機的に実行できる。このタイプのデータ投機は、本文では依存予測と称される。
依存予測の別の例では、１つのオペレーションの結果を他のオペレーション用の投機的なオペランドとして使用可能であることをディスパッチユニット１０４が検出することができる。例えば、読出しオペレーションが先行の書込みオペレーションによってデータキャッシュ１２８に記録されたデータにアクセスすることをディスパッチユニット１０４が予測することができる。ディスパッチユニット１０４は、書き込みオペレーションのソースとして使用されたレジスタに記録されたデータ値を、読み出しオペレーションの投機結果として応答可能に識別できる。
読出しオペレーションの結果をオペランドとして特定するオペレーション用の投機的オペランドソースとして書込みオペレーションのソースをリンクすることによって、依存予測をディスパッチユニット１０４に拡張してもよい。
【００２８】
いくつかの投機的結果を生成するために、タイプの異なる複数のデータ投機を行ってもよい。例えば、整数オペレーションの投機的結果は、予測したデータ値を使用して生成可能である。この投機的結果はその後、書込みオペレーションによって記録することができる。ある読出しオペレーションは依存予測を通じてこの書込みに依存するように予測され得、よって、この読出しオペレーションの投機的結果は、整数オペレーションの投機的結果となる。
【００２９】
データ投機が行われたオペレーションの結果に依存したオペレーションは、投機的結果を生成する場合もある。例えば、アドレス予測が読出しオペレーションの投機的結果を生成するように使用されれば、オペランドとして読出しの投機的結果を使用して実行する任意の依存オペレーションは投機的結果を生成することができ、次にこれを他の依存オペレーションによってオペランドとして使用することも可能である。従って、読出しオペレーションにおいて基礎となる投機が誤りであると決定されれば、依存オペレーションの結果も誤っている可能性がある。このため、正確な結果を生成するために、この読出しに依存するオペレーションの全体的な依存チェーンを再実行することが求められる。他方では、基礎となる投機が正確であると判れば、（これらの結果がどのような投機的値にも基づかないものと仮定して）依存オペレーションの結果は正しいであろう。
【００３０】
データ投機が実行された多くのオペレーションは、ファンクショナルユニットによってこれらのオペレーションが実行されるときにベリファイ、すなわち検証することができる。例えば、あるオペレーションの結果を投機的に生成するように使用されたデータ予測は、ファンクショナルユニット１２６によって検証可能であり、このファンクショナルユニット１２６は、実際のオペレーションの結果と投機的結果を比較することでこのオペレーションを実行する。
【００３１】
正確な結果がすでに利用可能であるので、データ投機が誤っていてもオペレーションを再実行する必要はない。他のオペレーションは、完全に実行されなくても検証可能である。例えば、未計算のアドレスで読出しが早期書込み結果を転送した場合（例えば、依存予測またはアドレス予測に起因して）、読出しの投機結果は、読出しアドレスが計算されるときに検証可能である。データ投機が誤っていれば、正しい結果を生成するためにそのようなオペレーションを（少なくとも一部）再実行することが求められる。
データ投機が実行されたオペレーションとそれに依存するオペレーションとを再実行する必要があることから、リタイアキュー１０２は、基礎となるデータ投機が解決されたオペレーションをリタイアするためだけに構成することができる。
【００３２】
依存予測（メカニズム）を備えた読出し／書込みユニット
上述したように、データの投機的実行をサポートするプロセッサでは、読出し／書込みユニット１２６Ｃは、読出しオペレーションが以前の書込みオペレーションに依存しているかどうかを予測するために構成することができる。また、この読出し／書込みユニット１２６Ｃは、独立していると予測された読出しオペレーションが書込みオペレーションに対して自由にスケジュールすることを可能にする。
さらに、読出し／書込みユニット１２６Ｃは、検証メカニズムを備えることができる。この検証メカニズムは  誤った依存予測を検出し、誤って予測したオペレーションをリプレイしなければならないことをスケジューラに知らせ、その後、スケジューラが読出し／書込みユニット１２６Ｃにこれらのオペレーションを再発行させる。
本文中で用いられているように、その他のオペレーションより古いもしくは新しい読出しオペレーションまたは書込みオペレーションについての言及は、比較されるオペレーションのプログラム順序に関連する点に留意されたい。つまり、プログラム順序で第２オペレーションよりも早くに現れる第１オペレーションは第２オペレーションよりも古いオペレーションと呼ばれ、第２オペレーションは第１オペレーションよりも新しいオペレーションと呼ばれ得る。
【００３３】
図２は、読出しオペレーションのために依存予測を実行するように構成された読出し／書込みユニット１２６Ｃの一実施形態を例示する。例示的実施形態では、読出し／書込みユニット１２６Ｃは依存予測ロジック３０３と依存検証ロジック３０５とを含み、各回路は相互に結合されているとともに、オペレーションストレージ(operation storage)３０７に結合されている。
【００３４】
依存予測ロジック３０３は、読出し／書込みユニット１２６Ｃに発行された読出しオペレーションの依存予測を実行するように構成してもよい。図３〜図３Ｃの説明と併せて以下に詳細を説明しているように、依存予測ロジック３０３は、読出しオペレーションに対応する依存予測値を記録するように構成されたローカルおよび／またはグローバル予測データ構造を含むことができる。依存予測ロジック３０３は、オペレーションストレージ３０７内に記録された所与の読出しオペレーションに対応する依存予測値にアクセスするように構成してもよい。この対応する依存予測値が、所与の読出しオペレーションが以前の書込みオペレーションから独立していると予測されることを示せば、読出し／書込み書込みユニット１２６Ｃは、この所与の読出しオペレーションを、１以上の以前の書込みオペレーションが計算される前に実行させることができる。
以下に詳述しているように、依存検証ロジック３０５は、依存予測ロジック３０３にてって実行されたデータ投機を検証するように構成してもよい。
【００３５】
依存検証ロジック３０５はまた、プロセッサ１００の他の部分によって実行されたデータ投機を検証するようにを構成することもできる。例えば、ディスパッチユニット１０４が依存予測を実行するように（読出しの結果を早期書込みのソースに投機的にリンクすることで）構成されれば、その依存予測を検証するように依存検証ロジック３０５を構成してもよい。
【００３６】
オペレーションストレージ３０７は、（例えば、スケジューラ１１８によって）読出し／書込みユニット１２６Ｃに発行済みであるが、実行が未完了のオペレーションを記録するように構成してもよい。データの投機が実行済みの読出し／書込みユニットに発行されたオペレーションは、そのオペレーションが依存検証ロジック３０５によって検証されるまでは停止できない。オペレーションストレージ３０７は、読出し／書き込みユニット１２６Ｃ内の未処理の全オペレーションをトラッキングつまり追跡可能である。オペレーションストレージ３０７は、未処理の読出しおよび書込みのそれぞれについてエントリ３１０を含むことができる。
【００３７】
エントリ３１０はまた、エントリが読出しまたは書込みに割り当てされたかどうかを示すｌｄ／ｓｔ情報３１３を含むことができる（あるいは、ある実施形態では、あるエントリは、そのエントリがメモリアドレスから読出された値でオペレーションを行い、メモリアドレスにその結果を記録するオペレーションに対応すれば、そのエントリは読出しおよび書込み両方を含むことを示し得る）。加えて、エントリ３１０は、タグ３１５（例えば、プロセッサ１００内のオペレーションとその結果を識別する）、アドレス３１７、および／あるいはデータ３１９を含む。ある実施形態では、タグ３１５はメモリオペレーションに対応するプログラムカウンタ値を含んでもよい（例えば、ｘ８６アーキテクチャを実装する実施形態ではＥＩＰ値）。
ある実施形態では、各エントリのデータフィールド３１９は、投機的データおよび非投機的データ双方のためのストレージを含み得る。同様に、ある実施形態では、アドレスフィールド３１７はある１つのオペレーションのアドレスの複数の値（例えば、アドレス予測によって生成された投機的なアドレスとオペレーションの実行により生成された新しいアドレス値）のためのストレージを含むことができる。
ある実施形態では、エントリは、データ投機としてオペレーションおよび／あるいはオペランドを識別するよう追加のフィールドを含むことができる。例えば、フラグ３２１は、ある特定の読出しオペレーションが以前の書込みから独立していると予測されることを示し得る。さらに、以下に詳述しているように、フラグ３２１は、ある特定のオペレーションが動的に予測可能であるかどうかを示し得る。
エントリ３１０は、オペレーションを読出し／書込みユニット１２６Ｃに発行するスケジューラ１１８に応じて割り当てられ、このオペレーションの実行を完了する読出し／書込みユニット１２６Ｃに応じて割り当て解除される。
【００３８】
依存検証ロジック３０５は、オペレーションの投機的結果をオペレーションの実際の結果と比較することによって、依存予測のある種の形式を検証することができる。例えば、読出しオペレーションの投機結果は、オペレーションストレージ３０７内の読出しのエントリ３１０に記録できる。この読出しオペレーションの実際の結果がデータキャッシュ１２８から受信されると、依存検証ロジックは実際の結果をオペレーションストレージ３０７に記録された投機的結果と比較し得る。
【００３９】
依存検証ロジック３０５は、オペレーションのアドレスを１つ以上のより早期のオペレーションのアドレスと比較することによって、依存予測の別の形式を検証可能である。例えば、依存検証ロジック３０５は、専用の依存検証コンパレータ（図示せず）を備えてもよく、あるいは、読出し／書込みユニット１２６Ｃのある実施形態に実装された書込みから読出しへの（store-to-load）転送コンパレータを使用してもよい。一実施形態では、ある読出しは、１以上の以前のアドレスが計算される前に、依存予測ロジック３０３によって以前の書込みから独立していると予測され得る。１以上の以前の書込みのアドレスが利用可能になると、コンパレータは、独立していると予測された読出しオペレーションのアドレスに対して、以前の書込みアドレスを比較するように構成することもできる。
任意の以前の書込みのアドレスが、独立していると予測された読出しオペレーションのアドレスと一致すれば、依存検証ロジック３０５は、その読出しオペレーションが予測ミスされたことを示し得る。ある実施形態では、依存検証ロジック３０５は、独立していると予測された読出しオペレーションだけを監視し検証するように構成されてもよい（例えば、そのような予測を示すフラグ値３２１を有するオペレーションストレージ３０７に記録された読出しオペレーション）。他の実施形態では、依存していると予測された読出しオペレーションが実際にはそれ以前の書込みオペレーションから独立しているかどうかを検出するように依存検証ロジック３０５を構成してもよい。
【００４０】
依存検証ロジック３０５は、予測ミスした読出しオペレーションの依存性の検出に応じて、予測ミスした読出しオペレーション（および、ある実施形態では、予測ミスした読出しオペレーションに依存したオペレーションあるいは予測ミスした読出しオペレーションよりも新しいオペレーション）をリプレイさせるとともに、依存予測ロジック３０３が更新されるようにする。以下に詳細を記載する。
あるオペレーションは、そのオペレーションを識別するリプレイ信号をスケジューラ１１８に送ることによってリプレイされ得る。スケジューラ１１８は、そのような信号に応答して、リプレイに関するオペレーションのマーキングを行うことができる（例えば、そのオペレーションがリプレイされなければならないことを示すようにそのオペレーションに関連付けられたステート情報を変更することによって）。一実施形態では、依存検証ロジック３０５は、オペレーションをリプレイしなければならないことを示すフラグとともにオペレーションのタグをスケジューラ１１８に提供することでオペレーションをリプレイさせることができる。
依存していると予測された読出しオペレーションの予測ミスを検出する実施形態では、依存検証ロジック３０５は、予測ミスした読出しオペレーションをリプレイせずに依存予測回路３０３の更新だけを行ってよい。その理由は、読出しオペレーションの依存性を誤って予測することで、計算を間違えるのではなく、単にパフォーマンスが低下するに過ぎないからである。
さらに、以下にさらに詳述するように、依存予測ロジック３０３が予測履歴を提供するように構成されたカウンタを備えている実施形態において、依存検証ロジック３０５は、予測が正確な場合だけでなく予測ミスした場合にも依存予測ロジック３０３を更新するように構成してもよい。
【００４１】
ある実施形態では、依存性が予測ミスされた読出しオペレーションの正確な結果がすでに利用可能であり得る。例えば、独立していると予測された読出しオペレーションは、実際には書込みオペレーションに依存している可能性もあり、また、例えば、その書込みオペレーションに対応するエントリ３１０のデータ３１９などで書込みデータが利用可能である。
誤って投機された読出しオペレーションの正確な結果がすでに利用可能である場合、ある実施形態では、依存検証ロジック３０５は、読出し／書き込みユニット１２６Ｃに、誤って投機された読出しオペレーションの正確な結果をプロセッサの他の要素に送信させることができ、それにより、正確な値を使用してプロセッサの他の部分中の依存オペレーションを再実行できる。そのような実施形態では、データ投機検証ロジック３０５は、誤って投機されたそのような読出しオペレーションをリプレイさせない。
読出し／書込みユニット１２６Ｃは、たとえこのオペレーションをリプレイされたとしても、未処理のオペレーションの実行を完了可能であることに留意されたい。
【００４２】
依存予測ロジック３０３は、所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測するように構成された、各種のデータ構造を実装することができる。各種実施形態において、依存予測のためにローカルプレディクタ、グローバルプレディクタ、および、ハイブリッドプレディクタを用いることができる。
【００４３】
図３Ａはローカルプレディクタデータ構造を含む依存予測ロジックの一実施形態を例示する。例示の実施形態において、依存予測ロジック３０３は、複数のプレディクタエントリ３３５を含むローカルプレディクタ３３０を含む。各ローカルプレディクタエントリ３３５は、インデックスタグ３３６と依存予測値３３７とを含む。例示の実施形態では、各ローカルプレディクタエントリ３３５はまた、カウンタ３３８を含む。しかし、以下に詳述しているように、ある実施形態ではこのカウンタを省いてもよい。
カウンタ３３８は、カウンタの最大値と最小値において飽和するように構成されたマルチビットカウンタを含むことができる。
【００４４】
各ローカルプレディクタエントリ３３５は、ある所与の読出しオペレーションに対応する依存予測情報を記録するように構成されてもよい。ある所与のローカルプレディクタエントリ３３５は、インデックスタグ３３６によって指し示されてもよく、このローカルプレディクタエントリ３３５は、一実施形態では、対応する読出しオペレーションのプログラムカウンタ値を含んでもよい。
その他の実施形態では、インデックスタグ３３６は、プログラムカウンタ値以外の、対応する読出しオペレーションを識別する値、例えば、目的タグ値あるいはロードアドレス値、を含んでもよい。インデックスタグ３３６は、対応するローカルプレディクタエントリ３３５が有効である（つまり、所与の読出しオペレーションに割り当てられている）という表示を含むことができる。
【００４５】
読出しオペレーションに対応する識別情報、例えば、そのプログラムカウンタ値は、読出しオペレーションが読出し／書込みユニット１２６Ｃに発行されると依存予測ロジック３０３に提供され得る。例示した実施形態では、ローカルプレディクタ３３０は、コンテンツアドレッサブルメモリ（ＣＡＭ：Content Addressable Memory）のオペレーションに類似したアソシアティブな、あるいは連携的な方法で、読出しの識別情報を各ローカルプレディクタエントリのインデックスタグ３３６と比較し、読出しオペレーションに対応する有効なプレディクタエントリが存在するかどうかを判定する。
有効なプレディクタエントリが存在する場合、それに対応する依存予測値３３７（カウンタ値３３８が存在する場合は、カウンタ値３３８も同様に）が読み出され、オペレーションストレージ３０７の読出しオペレーションに対応するエントリ３１０内に記録され得る。有効なプレディクタエントリが存在せずに、利用可能なフリーローカルプレディクタエントリ３３５がある場合、このフリーエントリは読出しオペレーションと、このフリーエントリのインデックスタグ３３６に記録された読出しの識別情報とに割り当てられる。さらに、デフォルト予測値がこのフリーエントリの依存予測値３３７に記録されてもよい。
例えば、読出しオペレーションは、デフォルト設定では以前の書込みから独立していると予測され得る。よって、この場合、独立していると予測されたことを示す予測値を記録できる。
【００４６】
読出し／書込みユニット１２６Ｃは、ローカルプレディクタ３３０から読み出された依存予測値情報を評価することができ、これにより、独立していると予測された読出しオペレーションを、それ以前の書込みオペレーションのアドレスが計算される前に実行できる。
上述したように、依存検証ロジック３０５は、所与の読出しオペレーションの依存予測が誤りであることを検出することができる。この場合、依存検証ロジック３０５は、予測ミスした読出しオペレーションに対応するローカルプレディクタエントリ３３５を更新させることができる。
例えば、上述の方法に類似した方法で、依存検証ロジック３０５はまず、読出しオペレーションの識別情報を提供することによって、対応するローカルプレディクタエントリ３３５をローカルプレディクタ３３０内にアクセスさせることができる。適切なローカルプレディクタエントリ３３５が選択されると、依存検証ロジック３０５は、予測ミスを反映するよう対応の依存予測値３３７を更新させることができる。
【００４７】
カウンタ３３８が実装されない実施形態では、依存予測値３３７は、依存検証ロジック３０５によって決定された正確な依存情報を記録するように更新されてもよい。カウンタ３３８を含む実施形態では、カウンタ値は予測ミスの場合に減少し、正しい予測の場合に増加する可能性がある。また、依存予測値３３７は、対応するカウンタ３３８が最小値のときだけ予測ミスを更新することができる。
そのような実施形態では、カウンタ３３８は、依存予測に対して履歴を提供することができ、これにより、１つの正確な予測あるいは誤った予測に応じて依存予測を急峻に変化させないようにする。そのような実施形態では、カウンタ３３８は依存予測の強さを示してもよい（例えば、カウンタ値がより大きければ、より強い予測を、カウンタ値がより小さければ、より弱い予測を示し得る）。
【００４８】
直前に記載したように、一実施形態において、ローカルプレディクタ３３０は依存しているあるいは独立していると予測された読出しオペレーションに対応するエントリを含むことができる。
しかし、別の実施形態では、ローカルプレディクタ３３０は依存していると予測された読出しオペレーションに対してだけにエントリの割り当てを行うように構成されてもよい。そのような実施形態では、所与の読出しオペレーションが読出し／書き込みユニット１２６Ｃに発行されたときに、この所与の読出しオペレーションの識別情報がローカルプレディクタ３３０の任意のエントリと一致しなければ、この読出しオペレーションはデフォルト設定によって独立していると予測されてよい。続いて、依存検証ロジック３０５が、そのようなデフォルト設定の予測が誤りであることを検出すれば、依存検証ロジック３０５は正確な予測を伴ってローカルプレディクタ３３０にエントリを割り当てさせる。
同様に、ある実施形態では、依存検証ロジック３０５が、依存していると予測された読出しオペレーションが実際にはそれ以前の書込みオペレーションから独立していることを検出すれば、依存検証ロジック３０５は予測ミスした読出しオペレーションに対応するローカルプレディクタエントリ３３５の割り当て解除を行うように構成されてもよい。ローカルプレディクタ３３０が、依存していると予測されたロードオペレーションに対してだけにエントリを割り当てるように構成された実施形態では、依存予測値３３７は各ローカルプレディクタエントリ３３５から省いてもよい。
【００４９】
ローカルプレディクタ３３０は、特定の読出しオペレーションを予測するときにその特定の読出しオペレーションの過去の動作だけに依存し、その他の読出しオペレーションの過去の動作には依存しない。よって、読出しプレディクタ３３０は、動作が相対的に静的な読出しオペレーションに関する依存性を予測する場合に実効的である。
しかし、場合によっては、ある所与の読出しオペレーションの依存動作は、その他の読出しオペレーションの動作によって変化する可能性がある（つまり、所与の読出しオペレーションの依存動作は動的である）。
例えば、所与の読出しオペレーションが発行されるが、この所与の読出しオペレーションは、発行された読出しオペレーションのうち一回おきのもののみを以前の書込みオペレーションに依存するようにしてもよく、これは、個々の読出しオペレーションの動作によって決定される。そのような場合、ある所与の読出しオペレーションの動作を予測するときにいくつかの読出しオペレーションの動作を考慮するグローバルプレディクタは、より正確な予測を行うことができる。
【００５０】
図３Ｂは、グローバルプレディクタデータ構造を含む依存予測ロジックの一実施形態を例示する。例示の実施形態では、依存予測ロジック３０３は、グローバルプレディクタ３４０を含む。このグローバルプレディクタ３４０は、コンビネーションロジック３４６を介して複数のグローバルプレディクタエントリ３４５に結合されたグローバルヒストリレジスタ３４２を含む。各グローバルプレディクタエントリ３４５は、グローバル依存値３４７とグローバルカウンタ３４８とを含む。グローバルカウンタ３４８はカウンタの最大値と最小値において飽和するように構成されたマルチビットカウンタを含んでもよい。
【００５１】
グローバルヒストリレジスタ３４２は、複数のビットを記録するように構成されたシフトレジスタであってもよく、このレジスタにおいて、各ビットは実行された各々の読出しオペレーションの依存動作に対応する。
一実施形態では、依存動作は実行された各々の読出しオペレーションの実際の依存動作に対応し得る。つまり、実行された各々の読出しオペレーションが、実際にはそれ以前の書込みオペレーションから独立していたか、それ以前の書込みオペレーションに依存していたか、である。
別の実施形態では、依存動作は、実行された各々の読出しオペレーションの、予測した依存動作に対応し得る。この予測した依存動作は実際の依存動作よりも早く利用できる。グローバルヒストリレジスタ３４２に記録されたビット数と、そのグローバルヒストリレジスタ３４２に示される実行された読出しオペレーション数とは、各種実施形態で変化してよい。一実施形態では、グローバルヒストリレジスタ３４２は、プログラム可能幅シフトレジスタ(programmable-width shift register)として実装することができる。
【００５２】
一実施形態では、読出しオペレーションを実行するたびにグローバルヒストリレジスタ３４２を更新してもよい。更新後、新たに実行された読出しオペレーションの依存動作をグローバルヒストリレジスタ３４２の最下位ビット位置にシフトし、グローバルヒストリレジスタ３４２の残った全てのビット位置を１ビット位置左にシフトし、グローバルヒストリレジスタ３４２の最上位ビットを破棄する。
別の実施形態では、グローバルヒストリレジスタ３４２は、右シフトレジスタとして実装することができる。この形態において、新たに実行された読出しオペレーションの依存動作を最上位ビット位置にシフトし、最小位ビットを破棄する。ある実施形態では、グローバルヒストリレジスタ３４２は、同時に実行している複数の読出しオペレーションに適応するよう、一度に１以上のビット位置をシフトしてもよい。
【００５３】
所与のグローバルプレディクタエントリ３４５のグローバル依存予測値３４７は、依存あるいは独立していると予測された、対応する読出しオペレーションの依存予測を示すことができる。
グローバルプレディクタカウンタ３４８は、所与の読出しオペレーションに対して、対応するグローバル依存予測値３４７の強度を示す値を記録するように構成することもできる。
ある実施形態では、グローバルプレディクタカウンタ３４８は、ローカルプレディクタ３３０に関して上述した方法と類似した方法で、誤った予測あるいは正確な予測が検出されたときに依存検証ロジック３０５によって更新され得る。
【００５４】
コンビネーションロジック３４６は、所与の読出しオペレーションが読出し／書き込みユニット１２６Ｃに発行されたときに、グローバルヒストリレジスタ３４２に含まれる値を所与の読出しオペレーションの識別情報と組合せてインデックス値を生成するように構成することもできる。その後、生成されたインデックス値は、特定のグローバルプレディクタエントリ３４５にアクセスするために使用することができる。また、対応するグローバル依存予測値３４７が読み出され、オペレーションストレージ３０７の読出しオペレーションに対応するエントリ３１０に記録される。このエントリにおいて、生成されたインデックス値(it)は、ローカルプレディクタ３３０に関して上述した方法に類似した方法で、読出しオペレーションのスケジューリングを変更するように使用することができる。
ある実施形態では、グローバルプレディクタエントリ３４５は、信頼性即ちバリディティ情報を含むことができる。その理由は、グローバルプレディクタ３４０内の割当て解除されたエントリにアクセスする読出しオペレーションがデフォルト予測を受信できるようにするためである。
【００５５】
コンビネーションロジック３４６は、グローバルヒストリレジスタ３４２内に含まれる値（複数の、最近実行した読出しオペレーションの依存履歴を示す）を、予測が所望される所与の読出しオペレーションのいくつかの特定の識別情報と組合わせるように構成することができる。例えば、一実施形態では、所与の読出しオペレーションに対応するプログラムカウンタ値を使用してもよく、別の実施形態では、目的タグや読出しアドレスなどの識別情報を使用することができる。コンビネーションロジック３４６によって実行される精密なコンビネーションの機能は、各種実施形態において異なってもよい。
一実施形態では、コンビネーションロジック３４６は、グローバルヒストリレジスタ３４２の値を、論理的排他的ＯＲ（ＸＯＲ）機能を使用した所与の読出し命令のプログラムカウンタ値からなる選択されたビット（最下位ビットなど）と組合せて、特定のグローバルプレディクタエントリ３４５を選択するために使用され得るインデックス値を生成するように構成することができる。
別の実施形態では、インデックス値は、グローバルヒストリレジスタ３４２の全ての値あるいは一部の値を、所与の読出し命令のプログラムカウンタ値からなる選択されたビットと連結することで生成することができる。
【００５６】
グローバルプレディクタ３４０は、１以上の読出しオペレーションの依存履歴を含んでいることから、グローバルプレディクタ３４０は読出しオペレーションの結果を動的な依存履歴を使ってより正確に予測することができる。
しかし、実施形態によっては、環境が違えば、ローカルプレディクタ３３０はグローバルプレディクタ３４０よりも優れた予測正確性を示す可能性があり、また、グローバルプレディクタ３４０はローカルプレディクタ３３０よりも優れた予測正確性を示す可能性がある。
このため、ある実施形態では、ローカルタイプとグローバルタイプ両方のプレディクタを使用したハイブリッドプレディクタを使用してもよい。
【００５７】
図３Ｃは、ハイブリッドプレディクタデータ構造を含む依存予測ロジックの一実施形態を例示する。例示の実施形態では、依存予測ロジック３０３は、ハイブリッドプレディクタ３５０を含む。このハイブリッドプレディクタ３５０には、各々がセレクタ３５５に結合されたローカルプレディクタ３３０とグローバルプレディクタ３４０とを含む。このローカルプレディクタ３３０およびグローバルプレディクタ３４０の構造および動作はそれぞれ、図３Ａおよび図３Ｂとともに上述したようなものであってよい。
【００５８】
一実施形態では、ローカルプレディクタ３３０は、デフォルトプレディクタとして構成することができる。このデフォルトプレディクタの予測は、所与の読出しオペレーションが動的読出しオペレーションであると判定されない限りは選択されてよい。
他の実施形態では、ある読出しは、ローカルプレディクタ３３０がある特定の回数その読出しを予測ミスしたような場合、依存検証ロジック３０５によって動的な読出しオペレーションとされてよい。他の実施形態では、他のファンクショナルユニットは動的な読出し状態を示すことができる。例えば、実施形態によっては、ある読出しは、そのオペランドあるいはアドレス指定パターンに基づいたオペレーションデコードステージにおいて、動的であるとされてもよい。
【００５９】
一実施形態では、読出し／書込みユニット１２６Ｃのオペレーションストレージ３０７に記録された読出しオペレーションは、その読出しが、例えば所与のエントリ３１０のフラグフィールド３２１に記録された動的な読出しオペレーションであるかどうかについて、対応の表示（indication)を含むことができる。そのような実施形態では、動的な読出しの表示は、セレクタ３５５を構成でき、その読出しが静的あるいは動的であると示されれば、ローカルプレディクタ３３０あるいはグローバルプレディクタ３４０の出力をそれぞれ選択する。さらに、そのような実施形態において、未使用のプレディクタは、選択されたプレディクタがアクセスされる間は静止状態であってよく、これによりハイブリッドプレディクタ３５０の電力消費を減らすことができる。
【００６０】
他の実施形態では、動的な読出し状態の表示は、この動的な読出しオペレーションに対応するローカルプレディクタエントリ３３５内に記録することができる。例えば、各ローカルプレディクタエントリ３３５は、動的な読出し状態を示す追加のフィールド（図示せず）を示すように構成してもよい。そのような実施形態の１つのバージョンでは、ローカルプレディクタ３３０およびグローバルプレディクタ３４０の双方は、所与の読出しオペレーションに対して同時にアクセスされてもよい。また、対応するローカルプレディクタエントリ３３５に記録された動的な読出し状態表示は、適切なプレディクタの出力を選択するようにセレクタ３５５を構成することができる。そのような実施形態の別のバージョンでは、グローバルプレディクタ３４０は対応するローカルプレディクタエントリ３５５に記録された動的な読出し状態表示の値に応じてアクセスされてもよい。
【００６１】
メモリファイルおよび依存予測
プロセッサ１００のある実施形態では、メモリファイルは、読出しと書込み命令間の、依存性の表示を容易にするように実装することができる。そのような実施形態では、メモリファイルオペレーションの結果は、読出しオペレーションの依存予測を実行するように使用してもよい。
【００６２】
図４Ａは、ディスパッチユニット１０４の一実施形態を示す。この実施形態では、ディスパッチユニット１０４は、レジスタマップ１３４とメモリファイル１３２を備える。図１の説明とあわせて上述したように、レジスタマップ１３４は、レジスタのリネーミングを行うように構成することができる。レジスタマップ１３４は、各ソースオペランドおよび目的オペランドの論理レジスタ名を受け取り、その論理レジスタに最後に割り当てられた物理レジスタの物理レジスタ名を出力することができる。メモリファイル１３２は、メモリファイルコントローラ２０２とメモリファイルストレージ２０４とを備える。
【００６３】
メモリファイルストレージ２０４は、１つ以上のエントリ２２０を含む。各エントリ２２０は、アドレス指定パターン２０６と、エントリ２２０のアドレス指定パターンに関連付けられたタグ２０８を含むことができる。各タグは、データ値が生成されるときに、そのデータ値を記録する場所（リオーダバッファ内またはレジスタファイル１１６内など）を示すことで、データ値を識別することができる。例えば、例示した実施形態に示すように、各タグは、レジスタマップ１３４によって示された、そのデータ値を記録するために割り当てられた物理レジスタを識別することができる。
各アドレス指定パターンは、オペレーション内のアドレスを指定するための情報を少なくとも一部有し得る。例えば、図４Ｂを手短に参照すると、例示的なアドレス指定パターン２０６が示される。この実施形態では、アドレス指定パターン２０６は、ベース論理レジスタ名２１０、インデックス論理レジスタ名２１２、および変位２１４を有する。一部のアドレス指定パターン２０６は、メモリ内の特定のセグメントを識別するレジスタのセグメント論理レジスタ名を含んでもよい。ある実施形態では、メモリファイルストレージ２０４は、数個のレジスタ、ラッチ、フリップフロップ、あるいはその他のクロック動作するストレージから実施されてよい。別の実施形態では、メモリファイルストレージ２０４は、１つ以上のランダムアクセスメモリ（ＲＡＭ：Random Access Memory）セルを含むことができる。
【００６４】
ある実施形態では、メモリファイルストレージ２０４に記録されたアドレス指定パターン２０６は、オペレーション用に指定された全てのアドレス指定情報よりも少なくてもよい点に留意されたい。例えば、メモリファイルストレージ２０４内のエントリが記録しているビット数は、変位フィールド２１４中において変位の指定に用いられる全ビットよりも少なくてもよい。別の実施形態では、メモリファイルコントローラ２０２は、メモリファイルのエントリが、特定のオペレーション用のアドレス指定情報をすべて記録できるかどうかに応じて、メモリファイルストレージ２０４のエントリを割り当てるかどうかを選択的に選択してもよい。例えば、メモリファイルストレージ２０４の各エントリは変位情報を最大で１６ビット記録でき、ある特定のオペレーション用のアドレス指定情報が２４ビットの変位情報を含む場合、メモリファイルコントローラ２０２は、そのオペレーションのアドレス指定情報にメモリファイルエントリを割り当てないこともある。
【００６５】
メモリファイルコントローラ２０２は、未発送のオペレーションにおいて指定されているアドレス指定パターンと、メモリファイルストレージ２０４のエントリに記録されているアドレス指定パターンとを比較することができる。オペレーションのアドレス指定パターンが、メモリファイルストレージ２０４に現在記録されているどのエントリのアドレス指定パターンとも一致しなければ（すなわち、オペレーションのアドレス指定パターンが、メモリファイルストレージでヒットしなければ）、メモリファイルコントローラ２０２は、メモリファイルストレージ２０４に新しいエントリを割り当て、そのオペレーションのアドレス指定パターンの全てあるいは一部を記録することができる。割り当てに使用できる空きのエントリがメモリファイルストレージ２０４内に存在しない場合、メモリファイルコントローラ２０２は、ＬＲＵ（最低使用頻度法）、ＦＩＦＯ（先入れ先出し法）、ランダム置換などの置き換え方式を使用して、上書きするエントリを選択できる。
【００６６】
メモリファイルコントローラ２０２は、割り当てたエントリにオペレーションのアドレス指定パターンを記録するほか、そのオペレーションのアドレス指定パターンによって識別されたメモリ位置から読出ししようとしているか、またはそこに書込みしようとしている値を識別するタグを含み得る物理レジスタ名２０８（物理レジスタの名前など）も記録できる。例えば、メモリからデータを読出しする読出しオペレーションが処理されようとしている場合、その読出しオペレーションを受けて割り当てられるエントリは、その読出しオペレーションの結果を記録するために割り当てられる物理レジスタの名前を記録できる。メモリ位置にデータを書き込む書込みオペレーションが処理されようとしている場合、メモリファイルコントローラ２０２は、その書込みのソース値が記録されているレジスタの物理レジスタ名をメモリファイルストレージ２０４に記録できる。
【００６７】
オペレーションのアドレス指定パターン（またはそのパターンの一部）がメモリファイル２０４内のエントリに既に記録されていれば（すなわち、オペレーションのアドレス指定パターンがメモリファイルストレージでヒットする）場合、メモリファイルコントローラ２０２は、一致したアドレス指定パターンを含むエントリを使用するか変更できる。読出しオペレーション（特定のアドレスからレジスタに値を読出しするオペレーション）が処理されようとしている場合、メモリファイルコントローラ２０２は、一致するエントリに記録されている物理レジスタ名２０８を出力できる。書込みオペレーション（レジスタから特定のアドレスに値を書込みするオペレーション）が処理されようとしている場合、メモリファイルコントローラ２０２は、一致するエントリに記録されているタグ（例えば、物理レジスタ名２０８など）を、書込みしようとしているデータのタグで上書きできる。
読出しオペレーションが処理されようとしており、この読出しオペレーションがメモリファイルストレージ２０４でヒットすれば、メモリファイルコントローラ２０２によって出力されるタグは、このタグによって識別された記録された値を、その読出しオペレーションの投機的な結果にリンクするために使用することができる。
例えば、ある実施形態では、読出しオペレーションがスケジューラ１１８にディスパッチされると、メモリファイル１３２によって出力されるタグはスケジューラにも（例えば、投機的なソースオペランドのタグとして）提供されてよい。スケジューラ１１８は、このタグによって識別される値が（例えば、レジスタファイル１１６内、または結果バス１３０上で）利用可能になると、読出しオペレーションを発行することができる。実行コア１２４は、この読出しオペレーションを実行し、その結果、リンクされている値が、読出しオペレーションの投機的な結果として結果バス１３０に送信される（ある実施形態では、読出しの結果として生成されるデータ値にフラグを設定したり、あるいはこの値を投機的な値として識別しなくてもよい点に留意されたい）。別の実施形態では、データ値は、タグを投機マップに記録することで読出しオペレーションの投機的な結果にリンクされてもよい。
【００６８】
リンクが確立されたことで、タグによって識別されるデータ値は、投機的結果を使用して依存したオペレーションを実行できるよう、このデータ値が（例えば、レジスタファイル１１６内、または結果バス１３０上で）利用可能になると、読出しの投機的結果として転送されてもよい。これにより、多くの場合、読出しオペレーションの投機的な結果を使用して依存関係したオペレーションを実行できるようになり、読出しオペレーションの非投機的な結果が利用可能になるまで待たされる場合よりもオペレーションを早く実行できるようになる。
【００６９】
さらに、上述したように、読出しオペレーションがデータ値とリンクされる場合、メモリファイル１３２は、リンクの表示を読出しオペレーションのオペランドタグ情報とともにスケジューラ１１８に運ぶように構成されてもよい（例えば、メモリファイル１３２はリンクを示す状態の追加のビットを送ることができる）。読出しオペレーションがリンクされているという表示とともに、読出しオペレーションが読出し／書込みユニット１２６Ｃへ発行されると、読出しオペレーションに割り当てられたエントリ３１０のフラグ３２１は、この読出しオペレーションが依存していると予測されたものであることを示すように構成することができる。一実施形態では、依存予測ロジック３０３は、リンクの状態を検出し、それに応じて依存度の予測を示すことができる。しかし、別の実施形態では、依存予測ロジック３０３と依存度検証ロジック３０５とは、読出し／書き込みユニット１２６Ｃから省いてもよい。そのような実施形態では、メモリファイル１３２は、読出しオペレーションに関する依存予測だけを表示し得る。
【００７０】
図５は、所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測する方法の一実施形態を例示する。図１から図４Ｂを総合的に参照すると、オペレーションはブロック５００において開始し、このブロック５００では、読出しオペレーションが読出し／書込みユニット１２６Ｃにおいて発行される。依存予測ロジック３０３は、発行される読出しオペレーションを受けて、読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測するように構成することができる（ブロック５０２）。
例えば、一実施形態では、依存予測ロジック３０３は、読出しの依存性を予測するよう、ローカルプレディクタ３３０にアクセスするように構成されてもよく、別の実施形態では、グローバルプレディクタ３４０あるいはハイブリッドプレディクタ３５０が使用されてもよい。あるいは、メモリファイル１３２などのその他のユニットから依存予測情報を受け取ることもできる。
【００７１】
読出し／書込みユニット１２６は、その予測に応じて、予測の種類を判定するように構成することができる（ブロック５０４）。読出しオペレーションが依存していると予測されれば、読出し／書き込みユニット１２６Ｃは、その読出しオペレーションよりも以前の書込みオペレーションのアドレスが計算されるまではその読出しオペレーションを実行させないように構成することができる。読出しオペレーションが独立していると予測されれば、読出し／書き込みユニット１２６Ｃは、１つ以上のそれ以前の書込みオペレーションのアドレスが計算される前にその読出しオペレーションを実行可能とするように構成することができる。
【００７２】
読出しオペレーションが独立していると予測されたものであるとの判定後、読出し／書き込みユニット１２６Ｃは、この読出しオペレーションが予測ミスをしたかどうかを検出するように構成することができる（ブロック５１０）。例えば、一実施形態では、読出し／書き込みユニット１２６Ｃは、独立していると予測されたt読出しオペレーションのアドレスが、それ以前の書込みオペレーションのアドレスと一致するかどうかを検出するように構成された、書込みから読出しへの転送コンパレータ(store-to-load forwarding comparator)を含んでもよい。予測ミスがなければ、この読出しオペレーションは、読出しオペレーションが終わると停止することができる（ブロック５１２）。
予測ミスが検出されれば、読出し／書き込みユニット１２６Ｃは、その予測ミスを受けて、スケジューラ１１８に独立していると予測された読出しオペレーションを将来的に再発行しなければならないことを示すリプレイ指示を供給するように構成することができる（ブロック５１４）。
【００７３】
読出し／書き込みユニット１２６Ｃの特徴として、ローカルプレディクタおよびグローバルプレディクタの様々な組合せを含む依存予測ロジック３０３の各種実施形態を説明してきたが、ある実施形態では、これらの依存予測ロジック３０３の変形をディスパッチユニット１０４などのマイクロプロセッサ１００の別のユニット内に設けてもよい点に留意されたい。さらに、図３Ａから図４までの実施形態を各種組合せることもできる。
例えば、ローカルプレディクタあるいはグローバルプレディクタがあってもなくても、メモリファイル１３４から生じる依存予測を実装することができる。
例示的コンピュータシステム
【００７４】
図６は、バスブリッジ９０２を介して様々なシステムコンポーネントに結合されたプロセッサ１００を含むコンピュータシステム９００の一実施形態のブロック図を示す。プロセッサ１００は、上述のように読出し／書込みユニットの一実施形態を含み得る。
コンピュータシステムのその他の実施形態も可能であり、考察される。図中のシステムにおいて、メインメモリ２００は、メモリバス９０６を介してバスブリッジ９０２に結合され、グラフィックコントローラ９０８は、ＡＧＰバス９１０を介してバスブリッジ９０２に結合される。ＰＣＩバス９１４を介して複数のＰＣＩデバイス９１２Ａ〜９１２Ｂがバスブリッジ９０２に結合される。
ＥＩＳＡ／ＩＳＡバス９２０を介して１台以上のＥＩＳＡデバイスまたはＩＳＡデバイス９１８を電気的に接続できるように、セカンダリバスブリッジ９１６を設けてもよい。この例では、プロセッサ１００は、ＣＰＵバス９２４を介してバスブリッジ９０２に結合されるともに、任意のＬ２キャッシュ９２８にも結合されている。ある実施形態では、プロセッサ１００は、一体化されたＬ１キャッシュ（図示せず）を含むことができる。
【００７５】
バスブリッジ９０２は、プロセッサ１００、メインメモリ２００、グラフィックコントローラ９０８、およびＰＣＩバス９１４に取り付けられたデバイス間にインタフェース接続を行う。バスブリッジ９０２に接続されたデバイスの１つからオペレーションを受信すると、バスブリッジ９０２はこのオペレーションのターゲットを識別する（例えば、特定のデバイス、あるいは、ＰＣＩバス９１４の場合、ターゲットはＰＣＩバス９１４上にある）。バスブリッジ９０２は、このオペレーションをターゲットのデバイスに転送する。バスブリッジ９０２は通常、ソースデバイス又はバスによって使用されるプロトコルから、ターゲットのデバイス又はバスによって使用されるプロトコルにオペレーションを変換する。
【００７６】
セカンダリバスブリッジ４１６は、ＰＣＩバス９１４に対してＩＳＡ／ＥＩＳＡバスに電気的接続を供給すると共に、追加の機能を有することができる。セカンダリバスブリッジ９１６の外部に設けるか、セカンダリバスブリッジ９１６に内蔵した入出力コントローラ（図示せず）をコンピュータシステム９００に設けて、キーボードおよびマウス９２２、および、各種シリアルポートおよびパラレルポートの動作をサポートしてもよい。
他の実施形態では、プロセッサ１００とバスブリッジ９０２間のＣＰＵバス９２４に、外部のキャッシュユニット（図示せず）を結合してもよい。他の形態では、外部キャッシュをバスブリッジ９０２に結合してもよく、この外部キャッシュのためのキャッシュ制御ロジックをバスブリッジ９０２に搭載してもよい。Ｌ２キャッシュ９２８は、プロセッサ１００のバックサイド構成(backside configuration)として図示されている。
Ｌ２キャッシュ９２８は、プロセッサ１００から独立していても、プロセッサ１００とともにカートリッジ（例えば、スロット１又はスロットＡ）と一体化されていても、あるいは、プロセッサ１００とともに半導体基板上に搭載されていてもよいという点に留意されたい。
【００７７】
メインメモリ２００はアプリケーションプログラムの書込み先であるとともに、プロセッサ１００が主な実行先のメモリである。適合可能なメインメモリ２００は、ＤＲＡＭ（Dynamic Random Access Memory）有する。例えば、複数バンク構成のＳＤＲＡＭ（同期ＤＲＡＭ）あるいはラムバスＤＲＡＭ （ＲＤＲＡＭ）が適切であり得る。
【００７８】
ＰＣＩデバイス９１２Ａおよび９１２Ｂの例に、ネットワークインターフェースカード、ビデオアクセラレータ、オーディオカード、ハードあるいはフロッピイディスクドライブあるいはドライブコントローラ、ＳＣＳＩ（Small Computer System Interface）アダプタ、およびテレフォニーカードのような多様な周辺機器がある。同様に、ＩＳＡデバイス９１８の例には、モデム、サウンドカードなどの様々なタイプの周辺機器のほか、種々のデータ取得カード（ＧＰＩＢあるいはフィールドバスインターフェースカード等）などがある。
【００７９】
グラフィックスコントローラ９０８は、ディスプレイ９２６上の文字及び画像の表示を制御するために設けられる。グラフィックスコントローラ９０８は、メインメモリ２００内外へ効果的にシフトできる３次元データ構造をレンダリングする、当該技術分野で通常知られる代表的なグラフィックスアクセラレータを具体化してもよい。したがって、グラフィックスコントローラ９０８は、バスブリッジ９０２内のターゲットインターフェースへのアクセスを要求するとともに受取り、これによりメインメモリ２００へのアクセスを取得可能であるという点でＡＣＰバス９１０のマスタであり得る。
専用のグラフィックスバスによって、メインメモリ２００から高速にデータを取得することが可能となる。グラフィックコントローラ９０８はさらに、特定のオペレーションのために、ＡＧＰバス９１０上でＰＣＩプロトコルを生成するように構成されてもよい。このため、バスブリッジ９０２のＡＧＰインターフェースは、ＡＧＰプロトコルのトランザクションと、ＰＣＩプロトコルターゲットトランザクションおよびイニシエータトランザクションとの両方をサポートする機能を備えることができる。
ディスプレイ９２６は、画像あるいは文字を表示可能な任意の電子ディスプレイである。適切なディスプレイ９２６には、陰極線管（“ＣＲＴ；Cathode Ray Tube”）ディスプレイや液晶ディスプレイ（“ＬＣＤ；Liquid Crystal Display”）等がある。
【００８０】
上記の説明においてＡＧＰ、ＰＣＩ、およびＩＳＡバスあるいはＥＩＳＡバスを例として採り上げたが、必要に応じて任意のバスアーキテクチャを代用してもよいという点に留意されたい。さらに、コンピュータシステム９００は、追加のプロセッサ（コンピュータシステム９００の任意の構成要素として示したプロセッサ１００ａなど）を備えたマルチプロセッシングコンピュータシステムであってもよいという点に留意されたい。プロセッサ１００ａはプロセッサ１００と類似のものであってもよい。より詳細には、プロセッサ１００ａは、プロセッサ１００と全く同一であってもよい。
プロセッサ１００ａは、（図６に示すように）独立したバスを介してバスブリッジ９０２に結合されていても、プロセッサ１００との間でＣＰＵバス９２４を共用してもよい。さらに、プロセッサ１００ａは、Ｌ２キャッシュ９２８と類似した任意のＬ２キャッシュ９２８ａと結合することができる。
【００８１】
図７を参照すると、前述の読出し／書き込みユニットの実施形態を有するプロセッサ１００を備え得るコンピュータシステム９００の別の実施形態が示される。他の実施形態も可能であり、考察される。図７の実施形態では、コンピュータシステム９００は、複数の処理ノード１０１２Ａ、１０１２Ｂ、１０１２Ｃ、１０１２Ｄを備える。各処理ノードは、処理ノード１０１２Ａ〜１０１２Ｄにそれぞれ設けられているメモリコントローラ１０１６Ａ〜１０１６Ｄを介して各々のメモリ２００Ａ〜２００Ｄに結合されている。
さらに、処理ノード１０１２Ａ〜１０１２Ｄは、処理ノード１０１２Ａ〜１０１２Ｄ間の通信に使用するインタフェースロジックを備える。例えば、処理ノード１０１２Ａは、処理ノード１０１２Ｂと通信するためのインタフェースロジック１０１８Ａと、処理ノード１０１２Ｃと通信するためのインタフェースロジック１０１８Ｂと、さらに別の処理ノード（図示せず）と通信するための第３のインタフェースロジック１０１８Ｃとを備える。
同様に、処理ノード１０１２Ｂは、インタフェースロジック１０１８Ｄ、１０１８Ｅ、１０１８Ｆを備え、処理ノード１０１２Ｃは、インタフェースロジック１０１８Ｇ、１０１８Ｈ、１０１８Ｉを備え、処理ノード１０１２Ｄは、インタフェースロジック１０１８Ｊ、１０１８Ｋ、１０１８Ｌを備える。処理ノード１０１２Ｄは、インタフェースロジック１０１８Ｌを介して複数の入出力デバイス（例えば、デイジーチェーン構成のデバイス１０２０Ａ〜１０２０Ｂ）と通信するように結合される。
その他の処理ノードも、同様にその他のＩ／Ｏデバイスと通信してもよい。
【００８２】
処理ノード１０１２Ａ〜１０１２Ｄは、処理ノード間で通信を行うためにパケットベースのリンクを実施している。この実施形態では、このリンクは、一方向のラインのセットとして実装される（例えば、ライン１０２４Ａは、処理ノード１０１２Ａから処理ノード１０１２Ｂにパケットを送信するために使用され、ライン１０２４Ｂは、処理ノード１０１２Ｂから処理ノード１０１２Ａにパケットを送信するために使用される）。ラインのその他のセット１０２４Ｃ〜１０２４Ｈは、図７に示すように、その他の処理ノード間でパケットを送信するために使用される。
一般に、ライン１０２４の各セットは、１本以上のデータラインと、このデータラインに対応する１本以上のクロックラインと、伝達するパケットの種類を示す１本以上の制御ラインとを含み得る。このリンクは、処理ノード間の通信ではキャッシュコヒーレントな方法で動作するか、処理ノードとＩ／Ｏデバイス間の通信（あるいは、バスブリッジから、ＰＣＩバスまたはＩＳＡバスなどの従来の構成のＩ／Ｏバスへの通信）で非コヒーレントな方法で動作し得る。また、図に示すように、このリンクは、Ｉ／Ｏデバイス間のデイジーチェーン構成を使用して、非コヒーレントな方法で動作することもできる。
１つの処理ノードから別の処理ノードに送信されるパケットが、１つ以上の中間ノードを通過し得る点に留意されたい。例えば、図７に示すように、処理ノード１０１２Ａによって処理ノード１０１２Ｄに送信されるパケットは、処理ノード１０１２Ｂか処理ノード１０１２Ｃのいずれかを通過し得る。適したルーティングアルゴリズムであれば、どのようなものでも使用することができる。
コンピュータシステム９００の別の実施形態では、処理ノードの数が、図７に示した実施形態よりも上下してもよい。
【００８３】
一般に、パケットは、ノード間のライン１０２４を伝わる１つ以上のビットタイミング（bit time）で送信できる。ビットタイミングは、対応するクロックラインを伝わるクロック信号の立ち上がりまたは立ち下がりエッジとすることができる。パケットには、トランザクションを開始するためのコマンドパケット、キャッシュコヒーレンシを維持するためのプローブパケット、プローブおよびコマンドに応答する応答パケットなどがある。
【００８４】
処理ノード１０１２Ａ〜１０１２Ｄは、メモリコントローラおよびインタフェースロジックに加えて、１つ以上のプロセッサを有していてもよい。概して、処理ノードは、少なくとも１つのプロセッサを備えており、必要に応じてメモリおよびその他のロジックと通信するためのメモリコントローラを任意に備えていてもよい。より詳細には、各処理ノード１０１２Ａ〜１０１２Ｄは、プロセッサ１００のコピーを１つ以上備えていてもよい。外部インタフェースユニットは、メモリコントローラ１０１６のほかに、ノード内にインタフェースロジック１０１８を備え得る。
【００８５】
メモリ２００Ａ〜２００Ｄは任意の好適なメモリ素子を含んでいてもよい。例えば、メモリ２００Ａ〜２００Ｄは、１つ以上のラムバスＤＲＡＭ（ＲＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、スタティックＲＡＭなどを含んでいてもよい。コンピュータシステム９００のアドレス空間は、メモリ２００Ａ〜２００Ｄに分割されている。各処理ノード１０１２Ａ〜１０１２Ｄは、アドレスとメモリ２００Ａ〜２００Ｄとの対応関係、すなわち、特定のアドレスについてメモリ要求を転送すべき処理ノード１０１２Ａ〜１０１２Ｄの決定に用いるメモリマップを備えていてもよい。
一実施形態では、コンピュータシステム９００内のアドレスのコヒーレンシポイント（coherency point）は、そのアドレスに対応しているバイトを記録しているメモリに結合されたメモリコントローラ１０１６Ａ〜１０１６Ｄである。換言すれば、メモリコントローラ１０１６Ａ〜１０１６Ｄは、対応するメモリ２００Ａ〜２００Ｄへの各メモリアクセスが、キャッシュコヒーレントな方法で行われることを保証する責任を負っている。メモリコントローラ１０１６Ａ〜１０１６Ｄは、メモリ２００Ａ〜２００Ｄとインタフェース接続するための制御回路を備え得る。さらに、メモリコントローラ１０１６Ａ〜１０１６Ｄは、メモリ要求を待ち行列に入れるための要求キューを備えていてもよい。
【００８６】
インタフェースロジック１０１８Ａ〜１０１８Ｌは、リンクからパケットを受信すると共に、リンクに送信するパケットをバッファするための各種バッファを備え得る。コンピュータシステム９００は、パケットを送信するための任意の適切なフロー制御メカニズムを使用することができる。例えば、一実施形態では、各インタフェースロジック１０１８は、そのインタフェースロジックに接続されているリンクの反対側にある受信装置内の各種バッファの数のカウントを記録している。インタフェースロジックは、パケットを記録するための空きバッファが受信側のインタフェースロジックになければパケットを送信しない。パケットを前方にルーティングしたことで受信側のバッファに空きが生ずると、受信側のインタフェースロジックは、バッファに空きが生じたことを知らせるメッセージを、送信側のインタフェースロジックに送信する。このようなメカニズムは、「クーポンベースの」システムと呼ぶことができる。
【００８７】
Ｉ／Ｏデバイス１０２０Ａ〜１０２０Ｂは、適したＩ／Ｏデバイスであれば、どのようなものであってもよい。例えば、Ｉ／Ｏデバイス１０２０Ａ〜１０２０Ｂは、別のコンピュータシステムに結合され、そのコンピュータシステムと通信するための装置（ネットワークインタフェースカードやモデムなど）を含んでいてもよい。また、Ｉ／Ｏデバイス１０２０Ａ〜１０２０Ｂは、ビデオアクセラレータ、オーディオカード、ハードディスクドライブもしくはフロッピーディスクドライブまたはドライブコントローラ、ＳＣＳＩ（Small Computer Systems Interface）アダプタ、テレフォニーカード、サウンドカード、およびＧＰＩＢインタフェースカードまたはフィールドバスインタフェースカードなどの様々なデータ収集カードを含んでいてもよい。本明細書において、「Ｉ／Ｏデバイス」との用語と「周辺機器」との用語は同義であるとされる点に留意されたい。
【００８８】
本明細書中で使用されるように、「クロックサイクル」との用語は、命令処理パイプラインの各種ステージがタスクを完了する時間間隔を指す。クロックサイクルを定義しているクロック信号に従って、命令および計算値がメモリ素子（レジスタまたはアレイなど）によって取得される。例えば、メモリ素子が、クロック信号の立ち上がりまたは立ち下がりエッジに従って値を取得し得る。
これまでに述べてきた考察は、信号を“アサートされた（asserted）”ものとして説明するものである。ある信号が、情報のある特定の一部を示す値を伝送する場合、その信号は“アサートされる”として定義することができる。特定の信号がバイナリ１の値を伝送する場合、あるいは他の形態では、バイナリ０の値を伝送する場合、その特定の信号は“アサートされる”として定義することができる。
【００８９】
上記の開示を完全に理解できれば、当業者にとって数多くの変形例および変更例が明らかとなるであろう。添付の特許請求の範囲は、このような変形例および変更例を全て包含するものと解釈されることが意図される。
【産業上の利用可能性】
【００９０】
概して、本発明はプロセッサの分野に応用可能である。
【図面の簡単な説明】
【００９１】
【図１】一実施形態によるプロセッサを例示したブロック図。
【図２】一実施形態による読出し／書き込みユニットを例示したブロック図。
【図３Ａ】ローカルプレディクタデータ構造を含む依存予測ロジックの一実施形態を例示したブロック図。
【図３Ｂ】グローバルプレディクタデータ構造を含む依存予測ロジックの一実施形態を例示したブロック図。
【図３Ｃ】ハイブリッドプレディクタデータ構造を含む依存予測ロジックの一実施形態を例示したブロック図。
【図４Ａ】ディスパッチユニットの一実施形態を例示したブロック図。
【図４Ｂ】一実施形態による例示的アドレス指定パターンを例示したブロック図。
【図５】所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測する方法の一実施形態を例示したフローチャート。
【図６】一実施形態による例示的コンピュータシステムを例示したブロック図。
【図７】別の実施形態による例示的コンピュータシステムを例示したブロック図。
【図１】
2008512769.tif 000003
【図２】
2008512769.tif 000004
【図３Ａ】
2008512769.tif 000005
【図３Ｂ】
2008512769.tif 000006
【図３Ｃ】
2008512769.tif 000007
【図４Ａ】
2008512769.tif 000008
【図４Ｂ】
2008512769.tif 000009
【図５】
2008512769.tif 000010
【図６】
2008512769.tif 000011
【図７】
2008512769.tif 000012
【手続補正書】
【提出日】平成18年8月31日(2006.8.31)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
オペレーションを発行するように構成されたスケジューラ（１１８）と、
前記スケジューラ（１１８）によって発行されたメモリオペレーションを受信するように結合され、前記メモリオペレーションを実行するように構成された読出し／書込みユニット（１２６Ｃ）と、を含み、
前記読出し／書込みユニット（１２６Ｃ）は、グローバルヒストリレジスタ（３４２）と複数のグローバルプレディクタエントリ（３４５）とを備えたグローバルプレディクタ（３４０）を含み、前記グローバルヒストリレジスタ（３４２）は、実行された複数の読出しオペレーションに対応する複数の各々の依存値を記録するように構成され、前記複数のグローバルプレディクタエントリ（３４５）の各々は、前記実行された複数の読出しオペレーションの２つ以上に応じて決定された依存予測値（３４７）を含み、  前記読出し／書込みユニット（１２６Ｃ）はさらに、
前記グローバルヒストリレジスタ（３４２）に応じて、所与の読出しオペレーションに対して所与のグローバルプレディクタエントリ（３４５）を選択し、
前記所与のグローバルプレディクタエントリ（３４５）に応じて、前記所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測し、
前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測を受けて、前記それ以前の書込みオペレーションのアドレスが計算される前に前記所与の読出しオペレーションを実行し、
前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測の後に、前記所与の読出しオペレーションが予測ミスしたかどうかを検出し、
前記所与の読出しオペレーションが予測ミスしたとの検出に応答して、前記読出しオペレーションを再発行しなければならないことを示すリプレイ指示を前記スケジューラに送るように構成されている、マイクロプロセッサ（１００）。
【請求項２】
前記読出し／書込みユニット（１２６Ｃ）は、複数のローカルプレディクタエントリ（３３５）を備えたローカルプレディクタ（３３０）を含み、前記複数のローカルプレディクタエントリ（３３５）の各々は、依存予測値（３３７）を含み、前記読出し／書込みユニット（１２６Ｃ）はさらに、前記所与の読出しオペレーションに対応する所与のローカルプレディクタエントリ（３３５）にアクセスし、前記所与のローカルプレディクタエントリ（３３５）に含まれる所与の依存予測値（３３７）を評価することで前記所与の読出しオペレーションが前記それ以前の書込みオペレーションに依存しているかどうかを予測するように構成されている、請求項１に記載のマイクロプロセッサ（１００）。
【請求項３】
前記読出し／書込みユニット（１２６Ｃ）は、
各々が依存予測値（３３７）を含む複数のローカルプレディクタエントリ（３３５）を備えたローカルプレディクタ（３３０）を含み、
前記読出し／書込みユニット（１２６Ｃ）はさらに、
前記所与の読出しオペレーションが動的な読出しオペレーションであるかどうかを判定し、
前記所与の読出しオペレーションが動的な読出しオペレーションでないという前記判定を受けて、前記所与の読出しオペレーションに対応する所与のローカルプレディクタエントリ（３３５）にアクセスし、前記所与のローカルプレディクタエントリ（３３５）に含まれるローカル依存予測値（３３７）を評価し、かつ、
前記所与の読出しオペレーションが動的読出しオペレーションであるという前記判定を受けて、前記グローバルヒストリレジスタ（３４２）に応じて、前記所与の読出しオペレーションに対して所与のグローバルプレディクタエントリ（３４５）を選択するとともに前記所与のグローバルプレディクタエントリ（３４５）に含まれるグローバル依存予測値を評価する、
ことで、前記所与の読出しオペレーションが前記それ以前の書込みオペレーションに依存しているかどうかを予測するように構成されている、請求項１に記載のマイクロプロセッサ（１００）。
【請求項４】
読出しオペレーションを受信するステップと、
前記読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを予測するステップと、
前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測を受けて、前記それ以前の書込みオペレーションのアドレスが計算される前に前記読出しオペレーションを実行するステップと、
前記読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測の後に、前記読出しオペレーションが予測ミスしたかどうかを検出するステップと、
前記読出しオペレーションが予測ミスしたという検出を受けて、前記読出しオペレーションを再発行しなければならないことを示すリプレイ指示をスケジューラ（１１８）に送るステップ、とを含み、
前記読出しオペレーションが前記より以前の書込みオペレーションに依存しているかどうかを予測するステップは、グローバルヒストリレジスタ（３４２）に応じて前記読み出しオペレーションに対するグローバルプレディクタエントリ（３４５）を選択するステップと、前記グローバルプレディクタエントリ（３４５）に含まれる依存予測値（３４７）を評価するステップとを含み、前記グローバルヒストリレジスタ（３４２）は、実行された複数の読出しオペレーションに対応する各々の複数の依存値を記録するように構成されており、かつ、前記実行された複数の読出しオペレーションの２つ以上に応じて前記依存予測値（３４７）が決定される、方法。
【請求項５】
前記読出しオペレーションが前記それ以前の書込みオペレーションに依存しているかどうかを予測するステップは、
前記読出しオペレーションが動的な読出しオペレーションであるかどうかを判定するステップを含み、
前記読出しオペレーションが動的な読出しオペレーションではないという前記判定を受けて、前記読出しオペレーションに対応するローカルプレディクタエントリ（３３５）にアクセスし、前記ローカルプレディクタエントリ（３３５）に含まれるローカル依存予測値（３３７）の評価を行うとともに、
前記読出しオペレーションが動的な読出しオペレーションであるという前記判定を受けて、前記グローバルヒストリレジスタ（３４２）に依存したグローバルグローバルプレディクタエントリ（３４５）を選択し、前記グローバルプレディクタエントリ（３４５）に含まれるグローバル依存予測値（３４７）を評価し、前記実行された複数の読出しオペレーションの２つ以上に応じて前記依存予測値が決定される、請求項４に記載の方法。
【請求項６】
メモリ（２００）と、
前記メモリ（２００）に結合されたプロセッサ（１００）と、を含み、前記プロセッサ（１００）は、
オペレーションを発行するように構成されたスケジューラ（１１８）、および、
前記スケジューラ（１１８）によって発行されたメモリオペレーションを受信するように結合され、前記メモリオペレーションを実行するように構成された読出し／書込みユニット（１２６Ｃ）を含み、
前記読出し／書込みユニット（１２６Ｃ）はグローバルヒストリレジスタ（３４２）および複数のグローバルプレディクタエントリ（３４５）を備えたグローバルプレディクタ（３４０）を含み、前記グローバルヒストリレジスタ（３４２）は実行された複数の読出しオペレーションに対応する各々の複数の依存値を記録するように構成されており、前記複数のグローバルプレディクタエントリ（３４５）の各々は、前記実行された複数の読出しオペレーションの２つ以上に応じて決定された依存予測値（３４７）を含み、
前記読出し／書込みユニット（１２６Ｃ）はさらに、
前記グローバルヒストリレジスタ（３４２）に応じて所与の読出しオペレーションに対して所与のグローバルプレディクタエントリ（３４５）を選択し、
所与の読出しオペレーションがそれ以前の書込みオペレーションに依存しているかどうかを前記所与のグローバルプレディクタエントリに応じて予測し、
前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているとの予測を受けて、前記それ以前の書込みオペレーションのアドレスが計算される前に前記所与の読出しオペレーションを実行し、
前記所与の読出しオペレーションが前記それ以前の書込みオペレーションから独立しているという予測の後に、前記所与の読出しオペレーションが予測ミスしたかどうかを検出し、
前記所与の読出しオペレーションが予測ミスしたことの検出を受けて、前記読出しオペレーションを再発行しなければならないことを示すリプレイ指示を前記スケジューラ（１１８）に送るように構成されている、コンピュータシステム。
【手続補正書】
【提出日】平成19年1月12日(2007.1.12)
【手続補正１】
【補正対象書類名】図面
【補正対象項目名】図３Ｂ
【補正方法】変更
【補正の内容】
【図３Ｂ】
2008512769.tif 000013
【国際調査報告】
2008512769.tif 000014
2008512769.tif 000015
2008512769.tif 000016
2008512769.tif 000017
2008512769.tif 000018