(57)【特許請求の範囲】
【請求項１】
第１のロードメモリ操作のディスパッチの表示を受けるよう結合されるストア−ロード転送（ＳＴＬＦ）プレディクタを備え、前記ＳＴＬＦプレディクタは、前記ＳＴＬＦプレディクタ内に記憶された情報に応答して、第１のストアメモリ操作に対する前記第１のロードメモリ操作のディスパッチについての依存性を示すように構成され、当該情報は、前の実行中に、前記第１のロードメモリ操作の実行に対してさらなるクロックサイクルが加えられることによって、前記第１のストアメモリ操作が前記第１のロードメモリ操作を妨害したことを示し、さらに、
前記ＳＴＬＦプレディクタに結合される実行パイプラインを備え、前記実行パイプラインは、前記依存性に応答して前記第１のストアメモリ操作の前に前記第１のロードメモリ操作の実行を禁止するように構成され、前記実行パイプラインは、前記第１のロードメモリ操作の実行中に前記依存性の欠如を検出するように構成され、前記実行パイプラインは、前記依存性の前記欠如に応答してアントレーン信号を生成するように構成され、
前記ＳＴＬＦプレディクタは、前記アントレーン信号を受けるよう結合され、前記前の実行中に前記第１のストアメモリ操作が前記第１のロードメモリ操作を妨害したことを示さないように、そこに記憶された前記情報を更新するように構成され、
前記実行パイプラインは、ストアキューを備え、前記実行パイプラインは、前記第１のロードメモリ操作について前記ストアキューからのデータの転送が起きていないならば、依存性の前記欠如を検出するように構成される、プロセッサ。
【請求項２】
前記情報は、前記第１のロードメモリ操作に対応する有効表示を含み、
前記ＳＴＬＦプレディクタは、前記有効表示を無効状態にして前記情報を更新するように構成される、請求項１に記載のプロセッサ。
【請求項３】
前記情報は、前記第１のロードメモリ操作に対応する有効表示を含み、前記有効表示は、複数のビットを有するビットベクトルを含み、前記有効表示は、複数のビットのうち少なくとも１ビットが有効状態であるなら有効状態であり、前記ＳＴＬＦプレディクタは、前記複数のビットのうち１つを選択するように構成されるとともに、前記アントレーン信号に応答して当該ビットを無効状態にするように構成され、前記ＳＴＬＦプレディクタは、前記複数のビットのうち１つを選択するように構成されるとともに、前記実行パイプラインからのトレーン信号に応答して当該ビットを有効状態にするように構成され、前記トレーン信号は、前記第１のロードメモリ操作の実行に対してさらなるクロックサイクルが加えられることによって、前記第１のストアメモリ操作が前記第１のロードメモリ操作を妨害したことを示す、請求項１に記載のプロセッサ。
【請求項４】
前記ＳＴＬＦプレディクタは、クロックサイクル毎にインクリメントされるカウンタ回路を含み、前記ＳＴＬＦプレディクタは、前記カウンタ回路の値に応答して前記ビットを選択するように構成される、請求項３に記載のプロセッサ。
【請求項５】
前記実行パイプラインは、スケジューラを含み、前記スケジューラは、前記依存性の前記表示に応答して前記第１のロードメモリ操作を実行のためにスケジュールすることを禁止するように構成され、前記スケジューラは、さらに、前記第１のロードメモリ操作に応答してトレーン表示を記憶するようにさらに構成され、前記トレーン表示は、前記ＳＴＬＦプレディクタが前記第１のロードメモリ操作について前記依存性を示したことを示し、前記実行パイプラインは、前記トレーン表示および前記依存性の前記欠如に応答して前記アントレーン信号を生成するように構成される、請求項１に記載のプロセッサ。
【請求項６】
情報に応答して、第１のストアメモリ操作に対する第１のロードメモリ操作のディスパッチについての依存性を示すステップを備え、当該情報は、前の実行中に、前記第１のロードメモリ操作の実行に対してさらなるクロックサイクルが加えられることによって、前記第１のストアメモリ操作が前記第１のロードメモリ操作を妨害したことを示し、さらに、
前記第１のストアメモリ操作をスケジュールする前に前記第１のロードメモリ操作のスケジュールを禁止するステップと、
前記第１のロードメモリ操作の実行中に前記依存性の欠如を検出するステップとを備え、前記検出するステップは、前記第１のロードメモリ操作についてストアキューからのデータの転送の欠如を検出するステップを備え、さらに、
前記前の実行中に、前記検出するステップに応答して前記第１のストアメモリ操作が前記第１のロードメモリ操作を妨害したことを示さないように、前記前の実行中に、前記第１のストアメモリ操作が前記第１のロードメモリ操作を妨害したことを示す前記情報を更新するステップを備える、方法。
【請求項７】
前記第１のロードメモリ操作が前記第１のストアメモリ操作をスケジュールするより前にスケジュールされ、かつ、前記第１のロードメモリ操作が前記第１のストアメモリ操作に対して依存性を有しているならば、前記第１のストアメモリ操作は前記第１のロードメモリ操作を妨害している、請求項６に記載の方法。
【請求項８】
前記情報は、前記第１のロードメモリ操作に対応する有効表示を含み、前記更新するステップは、前記有効表示を無効状態にするステップを含む、請求項６に記載の方法。
【請求項９】
前記情報は、前記第１のロードメモリ操作に対応する有効表示を含み、前記有効表示は、複数のビットを有するビットベクトルを含み、前記有効表示は、複数のビットのうち少なくとも１ビットが有効状態であるなら有効状態であり、前記依存性を示すステップは、前記ビットベクトルの前記複数のビットのうち少なくとも１ビットが有効状態であるなら実行され、前記更新するステップは、前記複数のビットのうち第１のビットを選択するステップと前記第１のビットを無効状態にするステップとを含み、前記方法はさらに、前記複数のビットのうち第２のビットを選択するステップと、前記第１のロードメモリ操作の実行に対してさらなるクロックサイクルが加えられることによって、前記第１のストアメモリ操作が前記第１のロードメモリ操作を妨害したことの検出に応答して、前記第２のビットを有効状態にするステップとを含む、請求項６に記載の方法。
【請求項１０】
前記選択するステップは、各クロックサイクルごとにカウンタをインクリメントするステップを含み、前記カウンタは、前記第１のビットを示す、請求項９に記載の方法。
【請求項１１】
前記第１のビットは、既に前記無効状態にある、請求項１０に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の背景】
１．技術分野
この発明は、プロセッサの分野に関し、より特定的には、プロセッサ内のストア−ロード転送メカニズムに関する。
【０００２】
２．背景技術
プロセッサはしばしば、実行されてしまっているがまだ投機的であるストアメモリ操作をバッファするためにストアキューを含む。ストアメモリ操作は、それらがリタイアされるまでストアキューに保持され得る。リタイアの後に、ストアメモリ操作は、キャッシュおよび／またはメモリにコミットされ得る。ここで使用されるメモリ操作は、（転送はキャッシュ内で完了され得るが）プロセッサと主メモリとの間のデータの転送を指定する操作である。ロードメモリ操作は、メモリからプロセッサへのデータの転送を指定し、ストアメモリ操作は、プロセッサからメモリへのデータの転送を指定する。メモリ操作は、メモリ操作を含む命令の非明示的部分であってよく、または明示的ロード／ストア命令であってもよい。ロードメモリ操作は、より簡潔にここでは「ロード」と呼ばれ得る。同様に、ストアメモリ操作は、より簡潔に「ストア」と呼ばれ得る。
【０００３】
ストアを投機的に実行しそれらをストアキューに入れることにより、性能が向上し得るが（命令実行パイプラインからストアを除去し、他のその後の命令が実行することを可能にすることによる）、その後のロードは、ストアキュー内のストアによって更新されるメモリ場所にアクセスし得る。プロセッサの性能は必ずしも、ストアをストアキューに入れることにより直接影響を受けるものではないが、ストアキュー内のストアによって更新されたメモリ場所にアクセスすることによりその後のロードが遅延されるならば、性能に影響を与えるかもしれない。しばしば、ストアキューは、ロードがストアキューにヒットするならばそこに記憶されたデータを転送するよう設計される。ここで使用される、ストアメモリ操作を記憶するストアキューエントリは、ストアメモリ操作によって更新される少なくとも１バイトがロードメモリ操作によってアクセスされるならば、ロードメモリ操作によって「ヒット」するという。
【０００４】
性能をさらに向上させるために、より古いストアに対してより新しいロードをアウトオブオーダで実行することが望ましい。より新しいロードは、しばしばより古いストアに対して依存性を有さないことがあり、そのためより古いストアの実行を待つ必要がない。ロードは、依存命令の実行のためのオペランドを与えるので、ロードを実行することにより、さらに他の命令が実行可能となる。しかしながら、より新しいロードがより古いストアに対してアウトオブオーダで実行可能とされているならば、ロードが実行している際にストアキューにヒットを検出するだけでは、正しいプログラム実行を行なわないことがある、なぜなら、ある種の古いストアはまだ実行されていないことがあるからである（したがって、これらのストアのストアアドレスは知られていない可能性があり、ある種のより古いストアに対するロードの依存性は、ロードが実行されている際に検出可能でない可能性がある）。したがって、より新しいロードが依存しているより古いストアの前にその新しいロードが実行するシナリオを検出するためのハードウェアが必要とされ得り、検出に応答して修正アクションが取られ得る。たとえば、命令は、パージされ、何らかの他の好適な態様で再フェッチまたは再実行されてもよい。ここでは、ストアが、ロードによってアクセスされるメモリの少なくとも１バイトを更新し、ロードよりも古く、かつそのバイトを更新するどの他のストアよりも新しければ、ロードはストアに「依存」しているという。残念ながら、ロードをアウトオブオーダで不適切に実行することや、正しい実行を達成するためのその後の修正アクションにより、性能が低下してしまうことがある。
【０００５】
なお、ロード、ストアおよび他の命令操作を、ここでは他の命令操作よりも古いまたは新しいということがある。プログラム順で（すなわち、実行されるプログラム中の命令の順番）第１の命令が第２の命令に先行するならば、第１の命令は第２の命令よりも古い。第１の命令がプログラム順で第２の命令の後に続くのであれば、第１の命令は第２の命令よりも新しい。
ＥＰ−Ａ−０，７０９，７７０は、ロード／ストア命令を制御するための装置を開示し、ストアバリアキャッシュが、前の実行中にプログラム順でストア命令の前にロードが実行したことを示す履歴ビットに基いて、ストアロードコンフリクトを予測し、ロードおよびストア命令は、同じ実アドレスを有する。ストアバリアキャッシュは、ストアメモリ操作に対応する情報を記憶し、ストア命令のディスパッチの際にキャッシュ中のヒットを用いて、違反したストア命令が実行パイプラインの実行段をうまく通り抜けるまで、すべてのロード命令が発行するのを防ぐバリアビットをマークする。
【０００６】
【発明の開示】
上に概略した課題は、ここに記載されるプロセッサによって大部分解決される。プロセッサは、一般的には、より古いストアの前により新しいロードをスケジュールおよび／または実行し得る。さらに、プロセッサは、より古いストアがより新しいロードの実行を妨げるシナリオを検出し修正アクションを行ない得る。プロセッサは、ロードをディスパッチするためにストアに対する依存性を示し得るストア−ロード転送（ＳＴＬＦ）プレディクタを採用する。依存性は、前の実行中にロードの実行を妨害したストアについて示される。依存性がストアについて示されるので、ロードはストアの前にスケジュールおよび／または実行することが妨げられる。ロードとストアとの間の妨害が低減するので、性能が向上し得る。
【０００７】
ＳＴＬＦプレディクタは、ロードおよびストアを実行し妨害を検出することに応答して特定のロードおよびストアのための情報でトレーニング（train）される。さらに、ＳＴＬＦプレディクタは、ロードがＳＴＬＦプレディクタによって特定のストアに依存しているものと示され、依存性が実際に生じていないならば、アントレーニングされ得る（たとえば、特定のロードおよびストアのための情報が削除され得る）。たとえば、ある実施例では、ロードが特定のストアに依存するものと示されるが、ストアデータがロードが実行しているときプロセッサ内でストアキューから転送されないならば、ＳＴＬＦプレディクタはアントレーニング（untrain）される。
【０００８】
ある実現化例では、ＳＴＬＦプレディクタは、ロードを妨害するストアのＰＣの少なくとも一部を、ロードＰＣによってインデックス付けされた第１のテーブルに記録する。第２のテーブルは、最近にディスパッチされたストアを特定するタグとともに、最近にディスパッチされたストアのストアＰＣの対応する部分を維持する。ディスパッチしているロードのＰＣを用いて、第１のテーブルからストアＰＣを選択する。選択されたストアＰＣは、第２のテーブルに記憶されたＰＣと比較される。一致が検出されるならば、対応するタグが、第２のテーブルから読出され、ロードの依存性を示すために用いられる。
【０００９】
別の実現化例では、ＳＴＬＦプレディクタは、ロードに割当てられたタグと、ロードを妨害するストアに割当てられたタグとの差を、ロードＰＣによってインデックス付けされた第１のテーブルに記録する。ディスパッチしているロードのＰＣを用いて、テーブルから差を選択し、差は、ロードに割当てられたタグに付加される。したがって、ストアのタグが生成され得り、ストアに対するロードの依存性が示され得る。
【００１０】
広く言って、ＳＴＬＦプレディクタと、ＳＴＬＦプレディクタに結合された実行パイプラインとを含むプロセッサが企図される。ＳＴＬＦプレディクタは、第１のロードメモリ操作のディスパッチの表示を受けるよう結合され、第１のロードメモリ操作に応答し、ＳＴＬＦプレディクタ内に記憶される情報に応答して、第１のストアメモリ操作に対する第１のロードメモリ操作の依存性を示すよう構成され、情報は、前記ロードメモリ操作に対応し、前の実行中に、第１のストアメモリ操作が第１のロードメモリ操作を妨害したことを示す。実行パイプラインは、依存性に応答して第１のストアメモリ操作の前に第１のロードメモリ操作の実行を禁止するよう構成される。実行パイプラインは、第１のロードメモリ操作の実行中に依存性の欠如を検出するよう構成される。実行パイプラインは、依存性の欠如に応答してアントレーン信号を生成するよう構成され、前の実行中に第１のストアメモリ操作が第１のロードメモリ操作を妨害したことを示さないようにそこに記憶された情報を更新するよう構成される。さらに、プロセッサと、入力／出力（Ｉ／Ｏ）装置とを含むコンピュータシステムが企図され、Ｉ／Ｏ装置は、Ｉ／Ｏ装置が結合可能である別のコンピュータシステムと該コンピュータシステムとの間の通信を行なうよう構成される。
【００１１】
さらに、方法が企図される。第１のロードメモリ操作のディスパッチに応答し、前の実行中に第１のストアメモリ操作が第１のロードメモリ操作を妨害したということを示す情報に応答して、第１のストアメモリ操作に対する第１のロードメモリ操作の依存性が示され、情報は、ストア−ロード転送（ＳＴＬＦ）プレディクタに記憶され、第１のロードメモリ操作に対応する。第１のロードメモリ操作のスケジューリングは、第１のストアメモリ操作をスケジュールする前に禁止される。第１のロードメモリ操作の実行中に依存性の欠如が検出される。前の実行中に、第１のストアメモリ操作が第１のロードメモリ操作を妨害したことを示す情報が更新され、前の実行中に、第１のストアメモリ操作が第１のロードメモリ操作を妨害したことを示さないようにする。更新は依存性の欠如の検出に応答して行なわれる。
【００１２】
この発明の他の目的および利点は、以下の詳細な説明を読み、添付の図面を参照することにより、明らかとなるであろう。
【００１３】
この発明は、さまざまな変形および代替の形を認めるが、その特定の実施例が、図に例として示され、ここに詳細に記載される。しかしながら、図面およびその詳細な説明は、この発明を開示される特定の形に限定するものでなく、反対に、前掲の特許請求の範囲によって規定されるこの発明の精神および範囲内にあるすべての変形、等価および代替を含むことが意図されることが理解されるはずである。
【００１４】
【発明を実施するための態様】
プロセッサ
図１を参照し、プロセッサ１０のある実施例のブロック図が示される。他の実施例が可能であり企図される。図１の実施例では、プロセッサ１０は、ラインプレディクタ１２と、命令キャッシュ（Ｉ−キャッシュ）１４と、整列ユニット１６と、分岐予測／フェッチＰＣ生成ユニット１８と、複数個のデコードユニット２４Ａ〜２４Ｄと、プレディクタミスデコードユニット２６と、マイクロコードユニット２８と、マップユニット３０と、リタイアキュー３２と、アーキテクチャ的リネームファイル３４と、フューチャファイル２０と、スケジューラ３６と、整数レジスタファイル３８Ａと、浮動小数点レジスタファイル３８Ｂと、整数実行コア４０Ａと、浮動小数点実行コア４０Ｂと、ロード／ストアユニット４２と、データキャッシュ（Ｄ−キャッシュ）４４と、外部インターフェイスユニット４６と、ＰＣサイロ４８とを含む。ラインプレディクタ１２は、プレディクタミスデコードユニット２６と、分岐予測／フェッチＰＣ生成ユニット１８と、ＰＣサイロ４８と、整列ユニット１６とに結合される。ラインプレディクタ１２は、Ｉ−キャッシュ１４に結合されてもよい。Ｉ−キャッシュ１４は、整列ユニット１６と、分岐予測／フェッチＰＣ生成ユニット１８とに結合され、分岐予測／フェッチＰＣ生成ユニット１８は、ＰＣサイロ４８にさらに結合される。整列ユニット１６はさらに、プレディクタミスデコードユニット２６と、デコードユニット２４Ａ〜２４Ｄとに結合される。デコードユニット２４Ａ〜２４Ｄはさらに、マップユニット３０に結合され、デコードユニット２４Ｄは、マイクロデコードユニット２８に結合される。マップユニット３０は、リタイアキュー３２と（リタイアキュー３２はアーキテクチャ的リネームファイル３４に結合される）、フューチャファイル２０と、スケジューラ３６と、ＰＣサイロ４８とに結合される。アーキテクチャ的リネームファイル３４は、フューチャファイル２０に結合される。スケジューラ３６は、レジスタファイル３８Ａ〜３８Ｂに結合され、これはさらに互いに、およびそれぞれの実行コア４０Ａ〜４０Ｂに結合される。実行コア４０Ａ〜４０Ｂはさらに、ロード／ストアユニット４２と、スケジューラ３６とに結合される。実行コア４０Ａはさらに、Ｄ−キャッシュ４４に結合される。ロード／ストアユニット４２は、スケジューラ３６と、Ｄ−キャッシュ４４と、外部インターフェイスユニット４６とに結合される。Ｄ−キャッシュ４４は、レジスタファイル３８に結合される。外部インターフェイスユニット４６は、外部インターフェイス５２と、Ｉ−キャッシュ１４とに結合される。後に文字が付された参照番号によってここに参照される要素は、参照番号のみで集合的に参照される。たとえば、デコードユニット２４Ａ〜２４Ｄは、デコードユニット２４として集合的に参照される。
【００１５】
図１の実施例において、プロセッサ１０は、可変バイト長複合命令セット計算（complex instruction set computing）（ＣＩＳＣ）命令セットアーキテクチャを採用する。たとえば、プロセッサ１０は、ｘ８６命令セットアーキテクチャ（ＩＡ−３２ともいう）を採用してもよい。他の実施例は、固定長命令セットアーキテクチャおよびreduced instruction set computing（ＲＩＳＣ）命令セットアーキテクチャを含む他の命令セットアーキテクチャを採用してもよい。図１に示すある特徴は、そのようなアーキテクチャにおいては省略され得る。
【００１６】
分岐予測／フェッチＰＣ生成ユニット１８は、フェッチアドレス（フェッチＰＣ）をＩ−キャッシュ１４、ラインプレディクタ１２およびＰＣサイロに与えるよう構成される。分岐予測／フェッチＰＣ生成ユニット１８は、フェッチアドレスの生成を助けるために使用される好適な分岐予測メカニズムを含んでもよい。フェッチアドレスに応答して、ラインプレディクタ１２は、複数個の命令に対応する整列情報を整列ユニット１６に与え、与えられた命令情報によって特定される命令の後の命令をフェッチするための次のフェッチアドレスを与え得る。次のフェッチアドレスは、所望に応じて、分岐予測／フェッチＰＣ生成ユニット１８に与えられてもよく、またはＩ−キャッシュ１４に直接与えられてもよい。分岐予測／フェッチＰＣ生成ユニット１８は、（トラップが検出されるならば）ＰＣサイロ４８からトラップアドレスを受け得り、トラップアドレスは、分岐予測／フェッチＰＣ生成ユニット１８によって生成されたフェッチＰＣを含み得る。他の態様では、フェッチＰＣは、分岐予測情報およびラインプレディクタ１２からの情報を用いて生成されてもよい。一般的には、ラインプレディクタ１２は、プロセッサ１０によって投機的に前もってフェッチされた情報に対応する情報を記憶する。ある実施例では、ラインプレディクタ１２は、２Ｋエントリを含み、各エントリは、ここでは命令の「ライン」と呼ばれる１つ以上の命令の群を位置付ける。命令のラインは、スケジューラ３６に置かれることによりプロセッサ１０の命令処理パイプラインによって同時に処理され得る。
【００１７】
Ｉ−キャッシュ１４は、命令バイトを記憶するための高速キャッシュメモリである。ある実施例に従えば、Ｉ−キャッシュ１４は、たとえば、１２８Ｋバイトの、６４バイトキャッシュラインを採用する４ウェイセットアソシアティブ構成を含んでもよい。しかしながら、いかなるＩ−キャッシュ構造も好適である（ダイレクトマップト構造を含む）。
【００１８】
整列ユニット１６は、ラインプレディクタ１２からの命令整列情報およびＩ−キャッシュ１４からのフェッチアドレスに対応する命令バイトを受ける。整列ユニット１６は、与えられた命令整列情報に従ってデコードユニット２４Ａ〜２４Ｄの各々への命令バイトを選択する。より特定的には、ラインプレディクタ１２は、各デコードユニット２４Ａ〜２４Ｄに対応する命令ポインタを与える。命令ポインタは、対応するデコードユニット２４Ａ〜２４Ｄに運ばれる、フェッチされた命令バイト内の命令を位置付ける。ある実施例では、ある種の命令は、２つ以上のデコードユニット２４Ａ〜２４Ｄに運ばれてもよい。したがって、図示の実施例では、ラインプレディクタ１２からの命令のラインは、最大で４個の命令を含み得るが、他の実施例は、ライン内のより多いまたはより少ない命令のために設けるべきより多いまたはより少ないデコードユニット２４を含んでもよい。
【００１９】
デコード２４Ａ〜２４Ｄは、これに与えられた命令をデコードし、各デコードユニット２４Ａ〜２４Ｄは、命令に対応する１つ以上の命令操作（またはＲＯＰ）を特定する情報を生成する。ある実施例では、各デコードユニット２４Ａ〜２４Ｄは、１命令当り最大で２個の命令操作を生成し得る。ここで用いられる命令操作（またはＲＯＰ）とは、実行コア４０Ａ〜４０Ｂ内の実行ユニットが単一のエンティティとして実行するよう構成される操作のことである。簡単な命令は単一の命令操作に対応し得るが、より複雑な命令は、複数の命令操作に対応し得る。より複雑な命令操作のあるものは、マイクロコードルーチン（この実施例ではデコードユニット２４Ｄを介してその中のリードオンリメモリからフェッチされる）としてマイクロコードユニット２８内に実現され得る。さらに、他の実施例は、各命令ごとに単一の命令操作を採用し得る（すなわち、命令および命令操作は、そのような実施例では同義であり得る）。
【００２０】
ＰＣサイロ４８は、各命令フェッチごとにフェッチアドレスおよび命令情報を記憶し、例外（プロセッサ１０によって採用される命令セットアーキテクチャによって定義される命令トラップ、分岐予測誤り、および他のマイクロアーキテクチャ的に定義されたトラップなど）の際にフェッチする命令をリダイレクトする役割を担う。ＰＣサイロ４８は、プロセッサ１０内で未実行であり得る命令の複数のラインに対応するフェッチアドレスおよび命令情報を記憶するための円形バッファを含み得る。命令のラインのリタイアに応答して、ＰＣサイロ４８は、対応するエントリを廃棄し得る。例外に応答して、ＰＣサイロ４８は、分岐予測／フェッチＰＣ生成ユニット１８にトラップアドレスを与え得る。リタイアおよび例外情報は、スケジューラ３６によって与えられ得る。ある実施例では、マップユニット３０が、プロセッサ１０内で未実行の命令の順番を特定するために各命令にシーケンス番号（Ｒ♯）を割当てる。スケジューラ３６は、Ｒ♯をＰＣサイロ４８に戻して、例外を経験する命令操作またはリタイアする命令操作を特定し得る。
【００２１】
ラインプレディクタ１２においてミスを検出すると、整列ユニット１６は、対応する命令バイトをＩ−キャッシュ１４からプレディクタミスデコードユニット２６に経路付ける。プレディクタミスデコードユニット２６は命令をデコードし、プロセッサ１０が設計されるように命令のラインに対してあれば制限を課す（たとえば、命令操作の最大数、命令の最大数、分岐命令を終わらせる、など）。ラインを終了すると、プレディクタミスデコードユニット２６は、情報をラインプレディクタ１２に与えて記憶させる。なお、プレディクタミスデコードユニット２６は、命令がデコードされる際にそれらをディスパッチするよう構成され得る。代替的に、プレディクタミスデコードユニット２６は、命令情報のラインをデコードし、それをラインプレディクタ１２に与えて記憶させてもよい。その後、ミスしたフェッチアドレスがラインプレディクタ１２において再試行され得り、ヒットが検出され得る。
【００２２】
ラインプレディクタ１２におけるミスの際命令をデコードすることに加えて、プレディクタミスデコードユニット２６は、ラインプレディクタ１２によって与えられた命令情報が無効であるならば命令をデコードするよう構成され得る。ある実施例では、プロセッサ１０は、ラインプレディクタ１２内の情報とＩ−キャッシュ１４内の命令との整合を取ろうとしない（たとえば、命令がＩ−キャッシュ１４内で置換されるかまたは無効化されるとき、対応する命令情報はアクティブに無効化されないかもしれない）。デコードユニット２４Ａ〜２４Ｄは、与えられた命令情報をベリファイし得り、無効命令情報が検出されたときプレディクタミスデコードユニット２６に信号を与え得る。ある特定の実施例に従えば、以下の命令操作がプロセッサ１０によってサポートされる：整数（算術演算、論理演算、シフト／ローテート演算および分岐演算を含む）、浮動小数点（マルチメディア演算を含む）およびロード／ストア。
【００２３】
デコードされた命令操作ならびにソースレジスタ番号およびディスティネーションレジスタ番号は、マップユニット３０に与えられる。マップユニット３０は、物理レジスタ番号（ＰＲ♯）を各命令操作の各ディスティネーションレジスタオペランドおよびソースレジスタオペランドに割当てることにより、レジスタリネーミングを行なうよう構成される。物理レジスタ番号は、レジスタファイル３８Ａ〜３８Ｂ内のレジスタを特定する。マップユニット３０はさらに、命令操作のソースオペランドに割当てられた各物理レジスタ番号を更新する命令操作のＲ♯を与えることにより各命令操作についての依存性の表示を与える。マップユニット３０は、対応する論理レジスタ番号に基づいて各ディスティネーションレジスタに割当てられた物理レジスタ番号（および対応する命令操作のＲ♯）でフューチャファイル２０を更新する。さらに、マップユニット３０は、ディスティネーションレジスタの論理レジスタ番号、割当てられた物理レジスタ番号、およびリタイアキュー３２内の前もって割当てられた物理レジスタ番号を記憶する。命令がリタイアされると（スケジューラ３６によってマップユニット３０に示される）、リタイアキュー３２は、アーキテクチャ的リネームファイル３４を更新し、もはや使用されなくなったレジスタがあれば解放する。したがって、アーキテクチャ的レジスタファイル３４内の物理レジスタ番号は、プロセッサ１０のコミットしたアーキテクチャ的状態を記憶する物理レジスタを特定し、フューチャファイル２０は、プロセッサ１０の投機的状態を表わす。換言すれば、アーキテクチャ的リネームファイル３４は、各論理レジスタに対応する物理レジスタ番号を記憶し、各論理レジスタごとにコミットしたレジスタ状態を表わす。フューチャファイル２０は、各論理レジスタに対応する物理レジスタ番号を記憶し、各論理レジスタファイルについての投機的レジスタ状態を表わす。
【００２４】
命令操作のライン、ソース物理レジスタ番号およびディスティネーション物理レジスタ番号は、マップユニット３０によって割当てられるＲ♯に従ってスケジューラ３６に記憶される。さらに、特定の命令操作についての依存性は、スケジューラに記憶された他の命令操作に対する依存性として示され得る。ある実施例では、命令操作は、リタイアされるまでスケジューラ３６に留まる。
【００２５】
スケジューラ３６は、各命令操作について示された依存性が満足されるまでその命令操作を記憶する。実行のために特定の命令操作をスケジュールすることに応答して、スケジューラ３６は、その特定の命令操作がレジスタファイル３８Ａ〜３８Ｂをどのクロックサイクルで更新するかを判定し得る。実行コア４０Ａ〜４０Ｂ内の異なった実行ユニットは、異なった数のパイプライン段（およびしたがって異なったレイテンシ）を採用し得る。さらに、ある種の命令は、他のものよりもパイプライン内でより多くのレイテンシを経験し得る。したがって、特定の命令操作についてのレイテンシを（クロックサイクルの数で）測定するカウントダウンが生成される。スケジューラ３６は、（レジスタファイルを読出す依存性命令操作の前にまたは同時に更新が生じるまで）特定数のクロックサイクルを待ち、その特定の命令操作に対して依存する命令操作がスケジュールされ得ることを示す。なお、スケジューラ３６は、その依存性が満足されると命令をスケジュールし得る（すなわち、スケジューラキュー内のその順番についてアウトオブオーダである）。
【００２６】
整数演算およびロード／ストア命令操作は、レジスタファイル３８Ａからソース物理レジスタ番号に従ってソースオペランドを読出し、実行コア４０Ａに運ばれて実行される。実行コア４０Ａは、命令操作を実行し、レジスタファイル３８Ａ内のディスティネーションに割当てられた物理レジスタを更新する。さらに、実行コア４０Ａは、命令操作のＲ♯および命令操作に関する例外情報（もしあれば）をスケジューラ３６に報告する。レジスタファイル３８Ｂおよび実行コア４０Ｂは、浮動小数点命令演算に対して同様の態様で動作し得る（かつ、浮動小数点ストアについてのストアデータをロード／ストアユニット４２に与え得る）。
【００２７】
ある実施例では、実行コア４０Ａは、たとえば、２つの整数ユニット、分岐ユニットおよび２つのアドレス生成ユニット（対応の変換ルックアサイドバッファ、すなわちＴＬＢを備える）を含み得る。実行コア４０Ｂは、浮動小数点／マルチメディア乗算器、浮動小数点／マルチメディア加算器、およびストアデータをロード／ストアユニット４２に引渡すためのストアデータユニットを含み得る。実行ユニットの他の構成が可能である。
【００２８】
ロード／ストアユニット４２は、メモリ操作を行ないかつＤ−キャッシュ４４をミスするメモリ操作についてフィル操作をスケジュールするためのＤ−キャッシュ４４へのインターフェイスを設ける。ロードメモリ操作は、アドレス生成を行ないデータをレジスタファイル３８Ａ〜３８Ｂに（Ｄ−キャッシュ４４またはロード／ストアユニット４２内のストアキューから）転送する実行コア４０Ａによって完了されてもよい。ストアアドレスは、実行コア４０Ａによって生成されると、（実行コア４０ＡとＤ−キャッシュ４４との接続により直接）Ｄ−キャッシュ４４に与えられ得る。ストアアドレスにはストアキューエントリが割当てられる。ストアデータは、設計選択に従って、同時に与えられてもよく、またはその後に与えられてもよい。ストア命令のリタイアで、データは、Ｄ−キャッシュ４４に記憶される（しかし、Ｄ−キャッシュ４４のリタイアと更新との間にいくらかの遅延があり得る）。さらに、ロード／ストアユニット４２は、（外部インターフェイスユニット４６による）その後のキャッシュフィルのためにＤ−キャッシュ４４をミスするロード／ストアアドレスを記憶し、ミスしたロード／ストア操作を再試行するためのロード／ストアバッファを含み得る。ロード／ストアユニット４２はさらに、ロード／ストアメモリ依存性を処理するよう構成される。
【００２９】
Ｄ−キャッシュ４４は、プロセッサ１０によってアクセスされるデータを記憶するための高速キャッシュメモリである。Ｄ−キャッシュ４４は、いかなる好適な構造（ダイレクトマップト構造およびセットアソシアティブ構造を含む）をも含み得るが、Ｄ−キャッシュ４４のある実施例は、１２８Ｋバイトの、６４バイトラインを有する２ウェイセットアソシアティブキャッシュを含み得る。
【００３０】
外部インターフェイスユニット４６は、外部インターフェイス５２を介して他の装置と通信を行なうよう構成される。Ｌ２キャッシュへのインターフェイス、プロセッサ１０を他の装置に接続するための外部バスを含む、いかなる好適な外部インターフェイス５２が使用されてもよい。外部インターフェイスユニット４６は、Ｉ−キャッシュ１６およびＤ−キャッシュ４４のためのフィルをフェッチし、廃棄された更新されたキャッシュラインをＤ−キャッシュ４４から外部インターフェイスに書込む。さらに、外部インターフェイスユニット４６は、プロセッサ１０によって生成されるキャッシュ不能読出および書込も行ない得る。
【００３１】
次に、図２を参照し、プロセッサ１０のある実施例によって採用され得るパイプライン段の例示の組を示す例示のパイプラインの図が示される。他の実施例は、異なったパイプライン、図２に示すパイプラインより多いまたは少ないパイプライン段を含むパイプラインを採用してもよい。図２に示す段は、垂直線によって境界付けられる。各段は、プロセッサ１０内の記憶要素（たとえば、レジスタ、ラッチ、フロップなど）をクロック動作させるために使用されるクロック信号の１クロックサイクルである。
【００３２】
図２に示すように、例示のパイプラインは、ＣＡＭ０段、ＣＡＭ１段、ラインプレディクタ（ＬＰ）段、命令キャッシュ（ＩＣ）段、整列（ＡＬ）段、デコード（ＤＥＣ）段、マップ１（Ｍ１）段、マップ２（Ｍ２）段、書込スケジューラ（ＷＲ  ＳＣ）段、読出スケジューラ（ＲＤ  ＳＣ）段、レジスタファイル読出（ＲＦ  ＲＤ）段、実行（ＥＸ）段、レジスタファイル書込（ＲＦ  ＷＲ）段、およびリタイア（ＲＥＴ）段を含む。いくつかの命令は、実行状態において複数のクロックサイクルを利用する。たとえば、メモリ操作、浮動小数点演算および整数乗算演算は、図２に分解した形で示される。メモリ操作は、アドレス生成（ＡＧＵ）段、変換（ＴＬＢ）段、データキャッシュ１（ＤＣ１）段、およびデータキャッシュ２（ＤＣ２）段を含む。同様に、浮動小数点演算は、最大で４個の浮動小数点実行（ＦＥＸ１〜ＦＥＸ４）段を含み、整数乗算は、最大で４個の（ＩＭ１〜ＩＭ４）段を含む。
【００３３】
ＣＡＭ０段およびＣＡＭ１段の間、ラインプレディクタ１２は、分岐予測／フェッチＰＣ生成ユニット１８によって与えられたフェッチアドレスをそこに記憶されたラインのアドレスと比較する。さらに、フェッチアドレスは、ＣＡＭ０段およびＣＡＭ１段の間に、仮想アドレス（たとえばｘ８６アーキテクチャにおける線形アドレス）から物理アドレスに変換される。ＣＡＭ０段およびＣＡＭ１段の間にヒットを検出することに応答して、対応するライン情報が、ラインプレディクタ段の間にラインプレディクタから読出される。また、Ｉ−キャッシュ１４は、ラインプレディクタ段の間に（物理アドレスを用いて）読出を開始する。読出は、命令キャッシュ段の間に完了する。
【００３４】
なお、図２に示すパイプラインは、フェッチアドレスについてラインプレディクタ１２においてヒットを検出するために２クロックサイクルを採用するが、他の実施例は、この動作を行なうのに単一クロックサイクル（および段）を採用してもよい。また、ある実施例では、ラインプレディクタ１２は、ヒットのためにＩ−キャッシュ１４のための次のフェッチアドレスおよびラインプレディクタ１２における次のエントリを与え、したがってＣＡＭ０段およびＣＡＭ１段は、ラインプレディクタ１２における前のヒットから生じるフェッチについては飛ばされてもよい。
【００３５】
Ｉ−キャッシュ１４によって与えられる命令バイトは、ラインプレディクタ１２からの対応のライン情報に応答して整列段の間に、整列ユニット１６によってデコードユニット２４Ａ〜２４Ｄに対して整列させられる。デコードユニット２４Ａ〜２４Ｄは、与えられた命令をデコードし、命令に対応するＲＯＰおよびオペランド情報をデコード段の間に特定する。マップユニット３０は、マップ１段の間にＲＯＰを与えられた情報から生成し、レジスタリネーミングを行なう（フューチャファイル２０を更新する）。マップ２段の間、ＲＯＰおよび割当てられたリネームは、リタイアキュー３２に記憶される。さらに、各ＲＯＰが依存するＲＯＰが決定される。各ＲＯＰは、フューチャファイルに記録されたように先のＲＯＰにレジスタ依存し得、依存性の他のタイプ（たとえば前の直列化命令に対する依存性）も示し得る。
【００３６】
生成されたＲＯＰは、書込スケジューラ段の間にスケジューラ３６に書込まれる。この段までに、命令の特定のラインによって位置付けられたＲＯＰは、ユニットとしてパイプラインを流れる。しかしながら、スケジューラ３６に書込まれた後、ＲＯＰは、異なったときにリネーミング段を独立して流れてもよい。一般的に、特定のＲＯＰは、スケジューラ３６による実行のために選択されるまで（たとえば、上述のように、特定のＲＯＰが依存するＲＯＰが実行のために選択された後）この段にとどまる。したがって、特定のＲＯＰは、書込スケジューラ書込段と読出スケジュール段との間に１つ以上のクロックサイクルの遅延を経験し得る。読出スケジューラ段の間、特定のＲＯＰは、スケジューラ３６内の選択論理に関係し、実行のために選択され、スケジューラ３６から読出される。そして、特定のＲＯＰは続いて、レジスタファイル読出段において（ＲＯＰのタイプに依存して）レジスタファイル３８Ａ〜３８Ｂの１つからレジスタファイル動作を読出す。
【００３７】
特定のＲＯＰおよびオペランドは対応の実行コア４０Ａまたは４０Ｂに与えられ、命令操作が実行段の間にオペランドに対して行なわれる。上述したとおり、いくつかのＲＯＰは、実行のいくつかのパイプライン段を有する。たとえば、メモリ命令操作（ロードおよびストア）は、（メモリ命令操作によってアクセスされるメモリ場所のデータアドレスが生成される）アドレス生成段と、（アドレス生成段によって与えられた仮想データアドレスが変換される）変換段と、Ｄ−キャッシュ４４がアクセスされる１対のデータキャッシュ段とを通って実行される。浮動小数点演算は、最大で４クロックサイクルの実行を採用し得、整数乗算は同様に最大で４クロックサイクルの実行を採用し得る。
【００３８】
実行段を完了すると、特定のＲＯＰは、レジスタファイル書込段の間、その割当てられた物理レジスタを更新する。最後に、前のＲＯＰの各々が（リタイア段において）リタイアされた後、特定のＲＯＰはリタイアされる。やはり、１つ以上のクロックサイクルが、レジスタファイル書込段とリタイア段との間で特定のＲＯＰについて経過し得る。さらに、特定のＲＯＰは、当該技術において周知であるように、パイプラインストール条件によりいずれかの段でストールされ得る。
【００３９】
ストア−ロード転送
ここで図３を参照し、マップユニット３０、スケジューラ３６、アドレス生成ユニット／変換ルックアサイドバッファ（ＡＧＵ／ＴＬＢ）４０ＡＡおよびロード／ストアユニット４２のある実施例をより詳細に示すブロック図が示される。他の実施例が可能であり企図される。図３の実施例において、スケジューラ３６、ＡＧＵ／ＴＬＢ４０ＡＡおよびロード／ストアユニット４２は、集合的に実行パイプライン７２と呼ばれる。マップユニット３０は、ストア−ロード転送（ＳＴＬＦ）プレディクタ６０と、依存性ユニット６２と、Ｒ♯割当ユニット６４（Ｒ♯を命令操作に割当てる）とを含む。スケジューラ３６は、スケジューラバッファ６６と、物理アドレス（ＰＡ）バッファ７０とを含む。ロード／ストアユニット４２はストアキュー６８を含む。マップユニット３０は、命令操作および対応のプログラムカウンタアドレス（ＰＣ）をデコードユニット２４から、リタイア信号をスケジューラ３６から、およびトレーン／アントレーンインターフェイス（トレーン／アントレーン（Ｔ／ＵＴ）信号、ロードＰＣ（ＬＰＣ）およびストア識別子（ＳＩＤ）を含む）を実行パイプライン７２から受けるよう結合される。マップユニット３０は、命令操作、ＰＣおよび依存性情報をスケジューラ３６に与えるよう結合される。より特定的には、ＳＴＬＦプレディクタ６０は、命令操作、ＰＣ、Ｒ♯割当ユニット６４からのＲ♯、およびトレーン／アントレーンインターフェイスを受け、かつストアに対するロード依存性に関する情報を依存性ユニット６２に与えるよう結合され、依存性ユニット６２も、命令操作およびＲ♯割当ユニット６４からのＲ♯を受けるよう結合される。依存性ユニット６２は、依存性情報をスケジューラ３６に与えるよう結合される。スケジューラ３６は、対応する制御情報とともに、ロードおよびストアをＡＧＵ／ＴＬＢ４０ＡＡに与えるよう結合される。ＡＧＵ／ＴＬＢ４０ＡＡは、レジスタファイル３８Ａから対応のオペランドを受け、かつストアの場合にはストアデータとともに、物理アドレスおよび他の制御情報をストアキュー６８に与えるよう結合される。さらに、ＡＧＵ／ＴＬＢ４０ＡＡは、物理アドレスおよび制御情報をＰＡバッファ７０に与えるよう結合され、ＰＡバッファ７０はスケジューラバッファ６６に結合される。ストアキュー６８は、スケジューラ３６からリタイア信号を受け、かつコミットすべきストアおよびストア転送データをＤ−キャッシュ４４に与えるよう結合される。ある実施例では、ＡＧＵ／ＴＬＢ４０ＡＡは、整数実行コア４０Ａの一部である。
【００４０】
一般的に、命令操作は、デコードユニット２４からマップユニット３０によって受けられる。各ロードメモリ操作ごとに、ＳＴＬＦプレディクタ６０は、前の実行中に、ストアメモリ操作がロードメモリ操作を妨害したかを示す情報を有しているかどうかを判断する。ストアメモリ操作が妨害したならば、ＳＴＬＦプレディクタ６０は、そのストアメモリ操作の表示を依存性ユニット６２に与える。依存性ユニット６２は、（アドレスオペランドに関する依存性などに加えて）そのストアメモリ操作に対するロードメモリ操作の依存性を示し、そのためロードメモリ操作は、ストアメモリ操作の前にスケジュールされない。したがって、ロードメモリ操作の現在の実行中に、ストアメモリ操作は妨害し得ない。他方で、ストアメモリ操作からの妨害に関する情報が特定のロードメモリ操作についてＳＴＬＦプレディクタ６０によって記録されなければ、ＳＴＬＦプレディクタ６０は、依存性を依存性ユニット６２に対して示さない。特定のロードメモリ操作は、ストアメモリ操作についてではなくソースレジスタオペランドについての依存性を受け得る。
【００４１】
ここでは、ストアメモリ操作によりさらなるクロックサイクルがロードメモリ操作の実行に加えられるならば、ストアメモリ操作がロードメモリ操作を「妨害」するという。さらなるクロックサイクルは、パイプラインストールの形で加えられ得、またはロードメモリ操作の再実行により加えられ得る。この開示の残りの部分は、ストアメモリ操作がロードメモリ操作より古く、ロードメモリ操作がストアメモリ操作に対して依存性を有し、かつロードメモリ操作がストアメモリ操作の前にスケジュールおよび／または実行されるならば、ストアメモリ操作がロードメモリ操作を妨害する実施例に焦点を当てる。他の実施例が企図される。たとえば、ロードメモリ操作がストアメモリ操作のアドレス生成の前にスケジュールされないが、ストアデータが与えられる前にスケジュールされ得る実施例が企図される。そのような実施例では、依存性が存在し、ロードメモリ操作が実行するときストアデータが利用可能でないならば、ストアがロードを妨害し得る。
【００４２】
マップユニット３０は命令操作、ＰＣおよび依存性をスケジューラ３６に送り、スケジューラ３６は、命令操作をスケジューラバッファ６６に書込む。スケジューラバッファ６６は複数のエントリを含み、各エントリは、１つの命令操作に関する情報を記憶することができる。有効ビットおよびタイプフィールド（メモリ操作、およびロードまたはストアのいずれか、どちらのタイプのメモリ操作が記憶されるかを記憶するものとしてエントリを特定する）を含む、例示のメモリ操作エントリがスケジューラバッファ６６内に示される。ロードメモリ操作に関し、ロードメモリ操作（ＬＰＣ）のＰＣが記憶される。ロードメモリ操作を妨害するストアメモリ操作に関する情報でＳＴＬＦプレディクタ６０をトレーニングすることを助けるために、さらなる情報が同様に記憶されてもよい。たとえば、ストアＩＤフィールド（ＳＩＤ）が、現在の実行中にロードメモリ操作を妨害したストアメモリ操作の表示を記憶するよう含まれてもよく、再試行表示（Ｒ）が、ロードメモリ操作が再試行され（ストアメモリ操作の妨害による）そのため再実行のために再スケジュールされるべきことを示す。トレーン表示（Ｔ）も、より古いストアに依存しているものとして、スケジューラ３６へのロードのディスパッチの際ＳＴＬＦプレディクタ６０によって、ロードが検出されたことを示すよう記憶される。ある実施例では、再試行表示は、ビットがセットされたとき再試行を示す１ビットであり得る。同様に、トレーン表示は、セットされたとき依存性が検出されたことを示す１ビットであり得る。他の実施例では、反対の意味が使用されてもよく、他の符号化が使用されてもよい。さらにまた、所望に応じてさらなる情報が記憶されてもよく（たとえばサイズ情報、オペランドＰＲ♯など）、エントリの他のタイプ（たとえば、整数、浮動小数点など）が異なったフォーマットを有してもよい。スケジューラ３６は、（ＳＴＬＦプレディクタ６０によって特定される依存性があれば含む）その記録された依存性の各々が満足された後に実行されるメモリ操作をスケジュールし、操作のロード／ストア性質および他の制御情報をＡＧＵ／ＴＬＢ４０ＡＡに運ぶ。
【００４３】
より特定的には、スケジューラ３６は、その記録された依存性の各々が満足されると実行されるメモリ操作をスケジュールし得るので、ＳＴＬＦプレディクタ６０がより古いストアに対するより新しいロードの依存性を示さなければ、より新しいロードがより古いストアの前にスケジュールされ得る。マップユニット３０は、各ソースレジスタオペランド依存性を検出し得るが、より早いストアに対するロード依存性のすべてを検出することができないかもしれない。ストアに対するロードの依存性は、それぞれ、ロードおよびストアの実行中にロードおよびストアのソースオペランドから生成されたロードおよびストアによって影響を受けるメモリアドレスに基づく。ＳＴＬＦプレディクタ６０は、（ここに記載されるように）ストアに対するロードのある種の依存性を検出するが、その他は検出されないかもしれない。したがって、プロセッサ１０は、より古いストアの前にスケジュールされたより新しいストアがより古いストアに依存する場合を検出するために、以下に記載するＰＡバッファ７０を採用する。
【００４４】
ＡＧＵ／ＴＬＢ４０ＡＡは、（スケジューラ３６からのＰＲ♯に応答してレジスタファイル３８Ａから読出された）オペランドおよびメモリ操作を受ける。ＡＧＵ／ＴＬＢ４０ＡＡは、オペランドを付加して仮想アドレスを発生し、ＴＬＢにキャッシュされた変換を用いて仮想アドレスを物理アドレスに変換する。ＡＧＵ／ＴＬＢ４０ＡＡは、物理アドレスおよび他の制御情報をストアキュー６８に与える。操作がストアであるならば、ストアデータも与えられる。ＡＧＵ／ＴＬＢ４０ＡＡによって与えられる制御情報の中には、操作のロードまたはストア性質があり得る。物理アドレスおよび他の制御情報もＡＧＵ／ＴＬＢ４０ＡＡによってＤ−キャッシュ４４およびＰＡバッファ７０に与えられる。
【００４５】
この実施例では、ＰＡバッファ７０は、ロードを妨害するストアを検出するために使用される。ＰＡバッファ７０は複数のエントリを含み、１エントリは、スケジューラバッファ６６の各エントリに対するものである。各エントリは、物理アドレス情報を記憶することができる。ロードが実行されると、ＰＡバッファ７０に与えられた物理アドレスが、ロードを記憶するスケジューラバッファエントリに対応するエントリに記憶される。他方で、ストアが実行されると、物理アドレスが、ＰＡバッファ７０に記憶された物理アドレスと比較される。一致が見出され、対応する命令操作が、ストアよりも新しいロードであるならば、ロードが再試行される。一般的に、スケジューラ３６内の操作の状態が非実行状態にリセットされるならば、メモリ操作は「再試行される」とここでは言う。メモリ操作をその後に再試行することにより、メモリ操作は再スケジュールおよび再実行される。
【００４６】
ＰＡバッファ７０において再試行状況が検出されるならば、対応するスケジューラバッファエントリにおける再試行表示がセットされる。さらに、ストアを特定するためにＳＴＬＦプレディクタ６０によって使用されるストアＩＤが、スケジューラバッファエントリのＳＩＤフィールドに記憶される。ある実施例では、ストアＩＤはストアＰＣであってもよい。別の実施例では、ストアＩＤは、ストアのＲ♯またはストアのＲ♯とロードのＲ♯との差（デルタＲ♯）であってもよい。各ストアＩＤを用いる実施例は、以下により詳細に記載される。その後に、ロードが再スケジュールおよび再実行されると、再試行表示がセットされることにより、実行パイプライン７２は、トレーン／アントレーンインターフェイスを用いてＳＴＬＦプレディクタ６０へのロードおよび対応するストアをトレーニングする（そのため、その後の実行は、ロードをストアに依存させることによりロードの再試行を回避し得る）。より特定的には、インターフェイス内のトレーン信号がアサートされ得、対応するスケジューラエントリからのロードＰＣおよびストアＩＤが同様にＳＴＬＦプレディクタ６０に与えられる。なお、トレーニングは、設計選択に従って、実行パイプライン７２のいずれの段で生じてもよい。
【００４７】
ロードの前の実行中にロードを妨害したストアに対するロードの依存性を示すことにより、ロードのスケジュールは、ストアがスケジュールされる後まで禁止され得る。この態様では、ストアに対するロードの依存性は、ロードメモリ操作の最初の実行中に検出され得、ストアデータは、ロードメモリ操作に応答して転送され得る。したがって、ロードの再スケジュールおよび再実行が回避され得る。ロードの再スケジュールおよび再実行がないため、性能が向上し得る。
【００４８】
他方で、ロードがストアに依存してトレーニングされ、かつ実行中に実際の依存性が存在しなければ、ロードの遅延されたスケジューリングのために性能が失われてしまうことがある。したがって、実行パイプライン７２はこれらの状況も検出し、トレーン／アントレーンインターフェイスを用いてＳＴＬＦプレディクタ６０からのロードおよび対応のストアをアントレーニングし得る。より特定的には、ロードがスケジュールされ、スケジューラバッファ６６におけるそのトレーン表示がセットされるならば、実行パイプライン７２は、ロードがストアキュー６８から転送されたデータを受けるかどうかを判断する。転送が起きていなければ、ストアに対する依存性がロードに対して保証されていなかった可能性がある。したがって、実行パイプライン７２は、アントレーン信号をアサートし、ロードＰＣをＳＴＬＦプレディクタ６０に与え得る。ＳＴＬＦプレディクタ６０は、ロードに対応する情報をアントレーニングし得る。
【００４９】
ここでは「トレーニング」という言葉は、ロードを妨害するストアの発生を特定する情報を記憶することをいい、妨害の反復の可能性を示す情報を更新することを含み得る（たとえば、その状況が過去に繰返し生じたならば、それは再び生じやすくなる可能性がある）。このように、トレーニングは、ロードとストアとの間のより強い相関関係を生成することを含み得る。「アントレーニング」という言葉は、ロードを妨害するストアの発生を特定する情報を削除することをいい、情報を削除する前にロードとストアとの間のより弱い相互関係を生成することを含み得る。
【００５０】
なお、ＳＴＬＦプレディクタ６０のトレーニングおよびアントレーニングは、いずれのパイプライン段から生じてもよく、トレーニングはアントレーニングと異なった段で行われてもよい。たとえば、この実施例では、トレーニングは、ロードが再スケジュールされるとき再試行表示に応答して行なわれ、図２のスケジューラ読出段の後の任意の段で行われ得る。アントレーニングは、トレーン表示およびロードに対するストア転送の欠如に応答して行なわれ、パイプラインにおいて後に生じ得る（たとえば、図２のＤＣ２段）。
【００５１】
メモリ操作の実行に戻って、メモリ操作がストアであるならば、ストアキュー６８は、ＡＧＵ／ＴＬＢ４０ＡＡによって与えられる情報を記憶する。他方で、メモリ操作がロードであるならば、ストアキュー６８は、ロード情報をストアキューエントリの情報と比較する。ストアキューエントリに対するヒットが検出されるならば、対応するストアキューデータが読出されＤ−キャッシュ４４に与えられて転送される（図３のストア転送データ）。
【００５２】
ストアキュー６８は、少なくともストアがスケジューラ３６によってリタイアされるまでそれらを保持する。スケジューラ３６は、１つ以上のストアのリタイアを示すようにリタイア信号によりストアキュー６８に信号を与える。ストアキュー６８は、Ｄ−キャッシュ４４へのストアコミットパスを用いて、順番に、リタイアされたストアを運ぶ。このように、ストアは、Ｄ−キャッシュ４４にコミットされるまでストアキュー６８にとどまり得るが、これはストアのリタイアから遅延され得る。
【００５３】
なお、ＡＧＵおよびＴＬＢのさまざまな組合せが可能である。たとえば、ある実施例では、ロードＡＧＵおよび別個のストアＡＧＵが企図される。ストアＡＧＵは、ストアキュー６８上の書込ポートに結合されてもよく、ロードＡＧＵは、ストアキュー６８上の比較ポートに結合されてもよい。他の実施例は、所望に応じて、ロード、ストアまたはロードおよびストアのための任意の数のＡＧＵを含んでもよい。
【００５４】
なお、図３に示すさまざまなユニットのある詳細が示されるが、ストアキューにおいてのロードヒットの検出に関連しない他の詳細および特徴は、簡単にするために省略されてしまっているかもしれない。たとえば、マップユニット３０は、図１について上述したように、レジスタリネーミングを行ない得る。
【００５５】
ある実施例では、ＳＴＬＦプレディクタ６０は、より早いストアに対するロードの依存性を示すことに関し、図２に示すパイプラインのマップ２段の間に動作する。しかしながら、ＳＴＬＦプレディクタ６０は、さまざまな実施例に従って、実行のためのロードの選択の前にいずれのパイプライン段で動作してもよい。
【００５６】
以上の記載は、ロードの再実行の間のトレーニングを説明する。しかしながら、代替の実施例は異なったときにトレーニングを行なってもよい。たとえば、代替の実施例は、再試行状況を検出することに応答して（たとえば、ロードが依存しているストアの実行中に）トレーニングしてもよい。
【００５７】
ロード（ある実施例ではストア）のＰＣは、ＳＴＬＦプレディクタ６０においてロードおよびストアをトレーニングおよびアントレーニングするという文脈において論じられた。しかしながら、ＰＣの一部のみが、ＳＴＬＦプレディクタ６０においてロードおよびストアをトレーニングおよびアントレーニングするために、いくつかの実施例では使用されてもよいことが注目される。たとえば、ロードＰＣおよびストアＰＣの最下位１０ビットが、以下に記載するＳＴＬＦプレディクタ６０のある実施例では使用され得る。
【００５８】
ここで使用される「ＰＣ」という頭字語は、命令のプログラムカウンタアドレスのことをいうために使用される。ＰＣは、メモリ中の命令のアドレスである。換言すれば、ＰＣは、メモリから命令をフェッチするために使用されるアドレスである。複数の命令操作が１命令に対応し得る実施例では、命令のＰＣは、命令操作の各々（たとえばロードメモリ操作およびストアメモリ操作）のＰＣでもある。
【００５９】
なお、Ｒ♯は、以上に記載したおよび以下に記載するある種の実施例においては、命令操作を特定するために使用される。一般的には、いかなる好適なタグが使用されてもよい。Ｒ♯は、命令操作の相対的なプログラム順序を特定し、命令操作に割当てられたスケジューラバッファ６６内のエントリを特定し得る。他の実施例は、命令操作を特定するためにリオーダバッファタグまたはいかなる他のタグをも採用し得る。さらに、Ｒ♯またはタグは、ＳＴＬＦプレディクタ６０の動作の前にまたは同時にプロセッサ１０のパイプラインの任意の点で割当てられてもよい。
【００６０】
ここで図４を参照し、ＳＴＬＦプレディクタ６０の第１の実施例（ＳＴＬＦプレディクタ６０ａ）のブロック図が示される。他の実施例が可能であり企図される。図４の実施例では、ＳＴＬＦプレディクタ６０ａは、ロード／ストア依存性テーブル８０と、ストアＰＣ／Ｒ♯テーブル８２と、ロード／ストア依存性テーブル（ＬＳＤＴ）制御回路８４と、ＳＴ／ＬＤ依存性回路８６と、ストアテーブル制御回路８８と、ライン内依存性チェック回路９０と、マルチプレクサ（ｍｕｘ）９２とを含む。ロード／ストア依存性テーブル８０は、ディスパッチしている命令操作のＰＣをデコードユニット２４から受けるよう結合され、かつＬＳＤＴ制御回路８４に結合される。さらに、ロード／ストア依存性テーブル８０は、トレーニングのために実行パイプライン７２からロードＰＣおよびストアＰＣを受けるよう結合される。ロード／ストア依存性テーブル８０は、ストアＰＣをライン内依存性チェック回路９０およびストアＰＣ／Ｒ♯テーブル８２に、有効表示をＳＴ／ＬＤ依存性回路８６に与えるよう結合される。ライン内依存性チェック回路９０は、デコードユニット２４から各命令操作のロードまたはストア性質の表示およびディスパッチしている命令操作のＰＣを受けるよう結合され、かつヒット信号をＳＴ／ＬＤ依存性回路８６へ、選択制御をｍｕｘ９２へ与えるよう結合される。ストアＰＣ／Ｒ♯テーブル８２は、ディスパッチしている命令操作のＰＣおよび命令操作に割当てられた対応のＲ♯を受けるよう結合される。ストアＰＣ／Ｒ♯テーブル８２は、ストアＲ♯をｍｕｘ９２へ与えるよう結合され、ｍｕｘ９２はさらに、ディスパッチしている命令操作に割当てられたＲ♯を受け、かつストアＲ♯を依存性ユニット６２に与えるよう結合される。ストアＰＣ／Ｒ♯テーブル８２は、ヒット信号をストアテーブル制御回路８８へ与えるよう結合され、かつストアテーブル制御回路８８から制御情報を受けるよう結合される。ＳＴ／ＬＤ依存性回路８６は、ストアテーブル制御回路８８に結合され、かつ依存性有効信号および全依存（depend all）信号を依存性ユニット６２に与えるよう結合される。ＬＳＤＴ制御回路８４は、実行パイプライン７２からトレーン／アントレーン信号を受けるよう結合される。
【００６１】
一般的に、ロード／ストア依存性テーブル８０は、複数のエントリの１つを選択するようロードＰＣによってインデックス付けされる。エントリは、前の実行中にそのロードを妨害した可能性のあるストアのストアＰＣ（図４のＳＰＣ）および有効表示を記憶する。ストアＰＣ／Ｒ♯テーブルは、そのストアの対応のＲ♯とともに、最近にディスパッチされたストアのストアＰＣを記憶する複数のエントリを含む。ロード／ストア依存性テーブル８０において選択されたエントリからのストアＰＣがストアＰＣ／Ｒ♯テーブル８２においてヒットするならば、ストアに対するロードの依存性が、ロードについて示される。この態様では、ロードは、ストアの前にスケジュール（およびしたがって実行）することが防がれる。したがって、妨害は、この現在の実行中には回避され得る。
【００６２】
より特定的には、命令操作がディスパッチされると、命令操作のＰＣを用いてロード／ストア依存性テーブル８０にインデックス付けする。この議論の残りの部分は、他の態様で記されなければ、１つのディスパッチしている命令操作に対応する１つの入力ＰＣに対するＳＴＬＦプレディクタ６０ａの応答に焦点を当てる。しかしながら、なお、ＳＴＬＦプレディクタ６０ａは、ディスパッチしている命令操作の各々の各ＰＣに並列に応答してもよい。入力ＰＣに応答して、ロード／ストア依存性テーブル８０は、インデックス付けされたエントリから有効表示およびストアＰＣを出力する。ストアＰＣは、ストアＰＣ／Ｒ♯テーブル８２に入力され、ストアＰＣ／Ｒ♯テーブル８２に記憶されたストアＰＣと比較される。たとえば、ストアＰＣ／Ｒ♯テーブル８２は、連想メモリ（ＣＡＭ）を含み得る。ストアＰＣ／Ｒ♯テーブル８２は、各エントリごとにヒット信号を出力し、そのエントリがストアＰＣによってヒットしたかどうかを示す。ストアテーブル制御回路８８は、ヒット信号を受け、ストアＰＣによってヒットしたストアＰＣ／Ｒ♯テーブル８２内に表わされる最も新しいストアを選択する。選択されたエントリは、ストアＲ♯をｍｕｘ９２に出力し、ｍｕｘ９２は一般的には、そのストアＲ♯を選択して依存性ユニット６２に出力する。
【００６３】
さらに、ストアテーブル制御回路８８は、その命令操作についてストアＰＣ／Ｒ♯テーブル８２においてヒットが検出されたかどうかの表示とともにＳＴ／ＬＤ依存性回路８６に信号を与える。ＳＴ／ＬＤ依存性回路８６は、依存性有効信号を依存性ユニット６２に与える。依存性有効信号は、アサートされたならば、依存性ユニット６２が、ｍｕｘ９２によって与えられたストアＲ♯によって特定されるストアに対する命令操作の依存性を記録すべきことを示す。依存性有効信号がデアサートされたならば、信号は、依存性が依存性ユニット６２によって記録されるべきでないことを示す。より特定的には、ある実施例においては、ＳＴ／ＬＤ依存性回路８６は、（ｉ）命令操作がロードであり（デコードユニット２４からのロード／ストア表示から判断される）、（ii）ロード／ストア依存性テーブル８０のインデックス付けされたエントリからの有効表示が有効であることを示し、かつ（iii）インデックス付けされたエントリからのストアＰＣがストアＰＣ／Ｒ♯テーブル８２においてヒットするならば、依存性有効信号をアサートし得る。
【００６４】
図１に示すプロセッサ１０は、１クロックサイクルあたり複数の命令操作をディスパッチすることを試みる。そのため、ロード／ストア依存性テーブル８０から与えられたストアＰＣと一致する最も新しいストアが対応するロードと同時にディスパッチされているということが可能である。したがって、所与の命令操作について、ライン内依存性チェック回路９０は、ロード／ストア依存性テーブル８０からのストアＰＣ出力を、プログラム順で所与の命令操作の前である、同時にディスパッチされた命令操作の各々のＰＣと比較する。前の命令操作のＰＣがロード／ストア依存性テーブル８０からのストアＰＣと一致し、かつ、前の命令操作がストアである（デコードユニット２４によって与えられたロード／ストア表示によって示される）ならば、ライン内依存性チェック回路９０は、（ｉ）対応するロードについてＳＴ／ＬＤ依存性回路８６にヒットを示し、かつ（ii）ヒットが検出される命令操作のＲ♯でストアＰＣ／Ｒ♯テーブル８２によって与えられたストアＲ♯を無効にするようにｍｕｘ９２を制御し得る。この態様では、依存性ユニット６２に出力されるストアＲ♯は、ロードとともに同時にディスパッチされるストアのＲ♯である。さらに、ＳＴ／ＬＤ依存性回路８６は、（ｉ）命令操作がロードであり（デコードユニット２４からのロード／ストア表示から判断される）、（ii）ロード／ストア依存性テーブル８０のインデックス付けされたエントリからの有効表示が有効であることを示し、かつ（ｉｉｉ）ロードについてライン内依存性チェック回路９０からのヒット信号がアサートされるならば、ロードについての依存性有効信号をアサートし得る。
【００６５】
ある実施例では、ＳＴ／ＬＤ依存性回路８６は、命令操作についての全依存信号をさらにアサートし得る。全依存信号は、アサートされるならば、未実行の（ディスパッチされリタイアされていない）ストアの各々に対する命令操作の依存性を記録するよう依存性ユニット６２に示す。全依存信号は、ロードを妨害するストアのストアＰＣで特定のエントリが繰返しトレーニングされる状況に対処するために用いられる。ロード／ストア依存性テーブル８０は、命令操作のＰＣに応答してエントリを選択し、そのエントリが１つのストアＰＣを記憶するので、異なった実行の際に異なったストアが妨害するロードは、ＳＴＬＦプレディクタ６０ａがストアに対する依存性を示していても、なおも妨害され得る。そのような場合によりよく対処するために、ロード／ストア依存性テーブル８０における有効表示は、ビットベクトルであってもよい。エントリが実行パイプライン７２によってトレーニングされるたびに、ビットベクトル中の１ビットが有効状態に置かれ得る（たとえば、設計選択に依存して、セットされるかクリアされる）。ビットの各々が有効状態にあるのであれば、エントリは繰返しトレーニングされ得る、というのもロードがさまざまな実行中に異なったストアによって妨害されるからである。よって、全依存信号は、（ｉ）ビットベクトル中の各ビットが有効状態であり、かつ（ii）命令操作がロードであるならば、アサートされ得る。ビットベクトルおよびビットを無効または有効状態に置くことのある実施例は、以下により詳細に記載される。
【００６６】
以上は、前の実行の際にロードを妨害した可能性のあるストアに対するロードの依存性を示すためのＳＴＬＦプレディクタ６０ａの使用を記載した。さらに、ＳＴＬＦプレディクタ６０ａは、ロードおよびストアに関する情報でトレーニングされ得る。ストアＰＣ／Ｒ♯テーブル８２は、最も最近にディスパッチされたストアのストアＰＣおよびＲ♯を記憶する。そのため、ストアテーブル制御回路８８は、ディスパッチされているストアにストアＰＣ／Ｒ♯テーブル８２のエントリを割当て得る。ストアテーブル制御回路８８は、デコードユニット２４から各命令操作ごとのロード／ストア表示を受け、エントリをディスパッチしているストアの各々に割当てる。割当てられたエントリは、ストアＰＣ（デコードユニット２４から受けられる）および対応するＲ♯（Ｒ♯割当ユニット６４から受けられる）で更新される。ある実施例では、ストアテーブル制御回路８８は、最も最近にディスパッチされたストアの先入れ先出し（ＦＩＦＯ）バッファとしてストアＰＣ／Ｒ♯テーブル８２を動作させ得る。したがって、ストアＰＣ／Ｒ♯テーブル８２がストアで一杯になると、その後にディスパッチされたストアは、ストアＰＣ／Ｒ♯テーブル８２内で最も古いストアに取って代わる。さらに、その後にディスパッチされたストアによりＰＣ／Ｒ♯テーブル８２から削除される前にストアがリタイアし得ることが可能である。したがって、ストアテーブル制御回路８８は、リタイアするストアのＲ♯を受け得り、対応のＲ♯を有するエントリを削除し得る。
【００６７】
ロード／ストア依存性テーブル８０は、実行パイプライン７２からのトレーン／アントレーンインターフェイスに応答してトレーニングされる。より特定的には、トレーン信号が実行パイプライン７２によってアサートされるならば、ＬＳＤ制御回路８４は、ロード／ストア依存性テーブル８０が更新されるようにする。実行パイプライン７２は、トレーニングされるべきロードのＰＣ（図４のＬＰＣ）およびロードを妨害する対応のストアＰＣを入力としてロード／ストア依存性テーブル８０に与える。ロード／ストア依存性テーブル８０は、ストアＰＣでロードＰＣによってインデックス付けされたエントリを更新し、ＬＳＤＴ制御回路８４は、有効表示を有効状態に置く。ある実施例では、有効表示は１ビットであってもよく、有効状態がセット（またはクリア）されてもよく、無効状態がクリア（またはセット）されてもよい。上述のように別の実施例では、有効表示は、ビットベクトルであってもよい。そのような実施例では、ＬＳＤＴ制御回路８４は、トレーニング中、ビットベクトル内の１ビットを選択し、そのビットを有効状態にし得る。
【００６８】
さらに、ＬＳＤＴ制御回路８４は、実行パイプライン７２によるアントレーン信号のアサートに応答してエントリをアントレーニングし得る。やはり、実行パイプライン７２は、アントレーニングされるべきロードのロードＰＣを与え得るが、ストアＰＣは、アントレーニングの場合にはドントケアであり得る。ロード／ストア依存性テーブル８０は、ロードＰＣによって示されるエントリをインデックス付けし、ＬＳＤＴ制御回路８４は、インデックス付けされたエントリの有効表示が無効状態にされるようにする。有効表示として有効ビットを採用する実施例において、ビットは、無効であることを示すようクリア（またはセット）され得る。上述のビットベクトルを採用する実施例では、選択されたビットが、無効状態にされ得る。エントリは、他のビットが有効状態にあるならば、ビットベクトルの場合には有効のままでよい。しかしながら、複数のアントレーン事象により、やがては他のビットの各々も無効となり得る。
【００６９】
図３について上述したように、ＰＣは、ロード／ストア依存性テーブル８０をインデックス付けしロード／ストア依存性テーブル８０およびストアＰＣ／Ｒ♯依存性テーブル８２に記憶されるものと記載されたが、さまざまな実施例は、ＰＣの一部のみでインデックス付けしかつ／または一部のみを記憶し得る。ロード／ストア依存性テーブル８０をインデックス付けするために使用される部分は、テーブル内で採用されるエントリの数によって決定され得る。たとえば、ある特定の実現化例では、ロード／ストア依存性テーブル８０は、１Ｋエントリであり得り、ＰＣの１０ビットをインデックスとして使用し得る（たとえば、最下位１０ビット）。エントリの数は、一般的にはターゲットとされるソフトウェアの負荷について一部にはテーブルの精度に対するテーブルによって占有される面積に基づく設計選択に応じて一般的には選択され得る。ロード／ストア依存性テーブル８０およびストアＰＣ／Ｒ♯依存性テーブル８２に記憶されるストアＰＣのために使用されるビットの数は、インデックスに使用されるビットの数と異なってもよく、やはり、一般的にはターゲットとされるソフトウェアの負荷について一部にはテーブルの精度に対するテーブルによって占有される面積に基づく設計選択に応じて選択され得る。ある特定の実現化例では、ストアＰＣの最下位１０ビットが記憶される。
【００７０】
さらに、ストアＰＣ／Ｒ♯テーブル８２中のエントリの数も、一般的にはターゲットとされるソフトウェアの負荷について一部にはテーブルの精度に対するテーブルによって占有される面積に基づいて、設計選択の問題であり得る。ある特定の実現化例では、８〜１２エントリが使用され得る。
【００７１】
なお、上記実施例は、ディスパッチしている命令操作の各々の各ＰＣに応答し得るが、他の実施例は、ＳＴＬＦプレディクタ６０ａが応答する、同時の命令操作の数を制限してもよい。そのような実施例では、ロードのＰＣのみがロード／ストア依存性テーブル８０に入力され、ストアのＰＣのみがストアＰＣ／Ｒ♯テーブル８２に入力され記憶されるように、ＳＴＬＦプレディクタ６０ａに入力されるＰＣおよびＲ♯は、デコードユニット２４からのロード／ストア表示に応答して多重化（mux）され得る。そのような実施例では、プレディクタミスデコードユニット２６は、ロードおよび／またはストア限界に達すると、命令操作のラインを終了させ得る。
【００７２】
なお、異なった実行の際に異なったストアによって妨害されるロードを処理するための全依存信号および有効表示のために使用されるビットベクトルの代替として、ロード／ストア依存性テーブル８０の各エントリは、複数のストアＰＣおよび対応する有効ビットのための記憶装置を設けてもよい。選択されたエントリからの各ストアＰＣは、ストアＰＣ／Ｒ♯テーブル８２と比較され得り、依存性は、ストアＰＣ／Ｒ♯テーブル８２においてヒットである各ストアに対するロードについて記録されてもよい。
【００７３】
ここで図５を参照し、ＳＴＬＦプレディクタ６０の第２の実施例（ＳＴＬＦプレディクタ６０ｂ）が示される。他の実施例が可能であり企図される。図５の実施例では、ＳＴＬＦプレディクタ６０ｂは、ロード／ストア依存性テーブル１００と、加算器回路１０２と、ロード／ストア依存性テーブル（ＬＳＤＴ）制御回路１０４と、ＳＴ／ＬＤ依存性回路１０６と、オプションのストア有効化回路１０８とを含む。ロード／ストア依存性テーブル１００は、ディスパッチしている命令操作のＰＣをデコードユニット２４から受けるよう結合され、実行パイプライン７２からロードＰＣおよびデルタＲ♯を受けるようさらに結合される。さらに、ロード／ストア依存性テーブル１００は、ＬＳＤＴ制御回路１０４に結合され、有効表示をＳＴ／ＬＤ依存性回路１０６に、デルタＲ♯を加算器回路１０２に与えるよう結合される。加算器回路１０２は、ディスパッチしている命令操作のＲ♯をＲ♯割当ユニット６４から受けるようさらに結合される。加算器回路１０２は、ストアＲ♯を依存性ユニット６２およびストア有効化回路１０８に与えるよう結合され、ストア有効化回路１０８は、依存性ユニット６２から有効ストアＲ♯表示を受けるよう結合される。ストア有効化回路１０８は、ストア有効信号をＳＴ／ＬＤ依存性回路１０６に与えるよう結合され、ＳＴ／ＬＤ依存性回路１０６は、ディスパッチしている命令操作に対応するロード／ストア表示をデコードユニット２４から受けるようにさらに結合される。ＳＴ／ＬＤ依存性回路１０６は、依存性有効信号および全依存信号を依存性ユニット６２に与えるよう結合される。ＬＳＤＴ制御回路は、トレーン／アントレーン信号を実行パイプライン７２から受けるよう結合される。
【００７４】
一般的には、ＳＴＬＦプレディクタ６０ｂは、以下のとおりディスパッチしているロードに応答し得る。ロードＰＣは、ロード／ストア依存性テーブル１００にインデックス付けするために使用され、それにより複数のエントリの１つを選択する。選択されたエントリは、有効表示およびデルタＲ♯を記憶する。有効表示は、ＳＴＬＦプレディクタ６０ｂが、インデックス付けＰＣを有するロードに関する情報内でトレーニングされたかどうか、およびしたがってデルタＲ♯が有効であるかどうかを示す。デルタＲ♯は、ロードのＲ♯と、前の実行中にロードを妨害したストアのＲ♯との差である。命令シーケンスは典型的には実行中に変化しないので、現在の実行中のロードのＲ♯とストアのＲ♯との差は典型的には、前の実行中の差と同じであり得る。加算器回路１０２は、デルタＲ♯を、ディスパッチしているロードに割当てられたＲ♯に加算して、ストアＲ♯を生成し、ストアＲ♯は依存性ユニット６２に与えられる。依存性ユニット６２は次に、ストアに対するロードの依存性を記録し得る。この態様では、ロードは、ストアの前にスケジュール（およびしたがって実行）することが防がれる。したがって、妨害はこの実行中には回避され得る。
【００７５】
より特定的には、命令操作がディスパッチされると、命令操作のＰＣを用いてロード／ストア依存性テーブル１００にインデックス付けする。この議論の残りの部分は、他の態様で記されなければ、１つのディスパッチしている命令操作に対応する１つの入力ＰＣに対するＳＴＬＦプレディクタ６０ｂの応答に焦点を当てる。しかし、なお、ＳＴＬＦプレディクタ６０ｂは、ディスパッチしている命令操作の各々の各ＰＣに並列に応答し得る。ロード／ストア依存性テーブル１００は、選択されたエントリからデルタＲ♯および有効表示を出力する。加算器１０２は、デルタＲ♯をディスパッチしている命令操作に対応するＲ♯に加算し、それによりストアＲ♯を生成し、ストアＲ♯は依存性ユニット６２に運ばれる。なお、加算器回路１０２は、ディスパッチしている命令操作の各々について、ロード／ストア依存性テーブル１００からの対応のデルタＲ♯出力およびＲ♯割当ユニット６４によってそのディスパッチしている命令操作に割当てられたＲ♯を受ける加算器を含んでもよい。
【００７６】
ＳＴ／ＬＤ依存性回路１０６は、デコードユニット２４から命令操作がロードであるかストアであるかの表示および有効表示を受ける。ＳＴ／ＬＤ依存性回路１０６は、上記ＳＴ／ＬＤ依存性有効回路８６と同様に、依存性有効信号を依存性ユニット６２に与える。ＳＴ／ＬＤ依存性回路１０６は、（ｉ）命令操作がロードであり（デコードユニット２４によって与えられるロード／ストア表示から判断される）、かつ（ii）インデックス付けされたエントリからの有効表示が有効であることを示すならば、依存性有効信号をアサートし得る。
【００７７】
さらに、ある実施例では、ＳＴＬＦプレディクタ６０ｂは、ストア有効化回路１０８を採用し得る。ストア有効化回路１０８は、どのＲ♯が未実行のストアに対応するかの表示を依存性ユニット６２から受ける。ある実施例では、表示は、Ｒ♯あたり１ビットを有するビットベクトルであってもよく、Ｒ♯がストアに対応するかどうかを示す。ストア有効化回路１０８は、加算器回路１０２によって生成されたＲ♯がストアに対応するかどうかを判断し、かつストア有効信号でＳＴ／ＬＤ依存性回路１０６に信号を与える。ストア有効信号がアサートされるならば、生成されたＲ♯はストアに対応する。他方で、ストア有効信号がデアサートされるならば、生成されたＲ♯はストアに対応しない。ストア有効化回路１０８を採用する実施例に関しては、ＳＴ／ＬＤ依存性回路１０６が依存性有効信号をアサートするためのさらなる条件は、ストア有効化回路１０８からのストア有効信号がアサートされることである。
【００７８】
やはりＳＴ／ＬＤ依存性回路８６と同様に、ＳＴ／ＬＤ依存性回路１０６は、有効表示がビットベクトルである実施例において全依存信号を与えるよう構成され得る。ＳＴ／ＬＤ依存性回路１０６の動作は、この点についてＳＴ／ＬＤ依存性回路１０６と同様であり得る。
【００７９】
ロード／ストア依存性テーブル１００は、実行パイプライン７２からのトレーン／アントレーンインターフェイスに応答してトレーニングされる。より特定的には、トレーン信号が実行パイプライン７２によってアサートされるならば、ＬＳＤＴ制御回路１０４は、ロード／ストア依存性テーブル１００が更新されるようにする。実行パイプライン７２は、トレーニングされるべきロードのＰＣ（図５のＬＰＧ）および対応のデルタＲ♯を入力としてロード／ストア依存性テーブル１００に与える。ロード／ストア依存性テーブル１００は、デルタＲ♯でロードＰＣによってインデックス付けされたエントリを更新し、ＬＳＤＴ制御回路１０４は、有効表示を有効状態にする。ある実施例では、有効表示は１ビットであってもよく、有効状態はセット（またはクリア）されてもよく、無効状態は、クリア（またはセット）されてもよい。上述したような別の実施例では、有効表示はビットベクトルであり得る。そのような実施例では、ＬＳＤＴ制御回路１０４は、トレーニング中にビットベクトル内の１ビットを選択し、そのビットを有効状態にし得る。
【００８０】
さらに、ＬＳＤＴ制御回路１０４は、実行パイプライン７２によるアントレーン信号のアサートに応答してエントリをアントレーニングし得る。やはり、実行パイプライン７２は、アントレーニングされるべきロードのロードＰＣを与え得るが、デルタＲ♯は、アントレーニングの場合にはドントケアであり得る。ロード／ストア依存性テーブル１００は、ロードＰＣによって示されるエントリをインデックス付けし、ＬＳＤＴ制御回路１０４は、インデックス付けされたエントリの有効表示が無効状態にされるようにする。有効表示として有効ビットを採用する実施例においては、ビットは無効であることを示すためにクリア（またはセット）され得る。上述のビットベクトルを採用する実施例においては、選択されたビットが、無効状態にされ得る。エントリは、他のビットが有効状態のままであるならば、ビットベクトルの場合には有効のままであり得る。しかしながら、複数のアントレーン事象により、やがて他のビットの各々も無効となり得る。
【００８１】
図４に関連して上述したように、ＰＣは、ロード／ストア依存性テーブル１００をインデックス付けするものと記載されたが、さまざまな実施例は、ＰＣの一部のみでインデックス付けし得る。ロード／ストア依存性テーブル１００をインデックス付けするために使用される部分は、テーブル内で採用されるエントリの数によって決定され得る。たとえば、ある特定の実現化例では、ロード／ストア依存性テーブル１００は、１Ｋエントリであってもよく、ＰＣの１０ビットがインデックスとして使用され得る（たとえば最下位１０ビット）。エントリの数は、一般的にはターゲットとされたソフトウェアの負荷について一部にはテーブルの精度に対するテーブルによって占有される面積に基づいて設計選択に応じて一般的には選択され得る。
【００８２】
なお、この実施例では、デルタＲ♯はトレーニング中にＳＴＬＦプレディクタ６０ｂに与えられるが、他の実施例は、ロードおよびストアＲ♯を与えてもよく、デルタＲ♯は、ＳＴＬＦプレディクタ６０ｂにおいて計算されてもよい。さらに、実施例は、ストアのＲ♯を生成するためにデルタＲ♯およびロードのＲ♯を加えるかまたは減じてもよい。さらにまた、ストア有効化回路１０８の代替の構成は、スケジューラ３６内の加算器回路１０２によって生成されたストアＲ♯を参照して命令操作がストアであるかどうかを判断することであってもよい。
【００８３】
ここで図６を参照し、ロードメモリ操作に関する実行パイプライン７２のある実施例の動作を示すフローチャートが示される。他の実施例が可能であり企図される。図６に示すステップは、わかりやすくするために特定の順序で示されるが、いかなる好適な順序が使用されてもよい。特定的には、ステップは、実行パイプライン７２内の組合せ論理によって並列に行なわれてもよい。さらにまた、さまざまなステップが実行パイプライン７２内で異なった状態で行なわれてもよい。他のステップに関する情報は、ステップが行なわれる段にパイプライン化されてもよい。
【００８４】
実行パイプライン７２は、ロードが実行のためにスケジュールされたかどうかを判断する（決定ブロック１１０）。ロードがスケジュールされていなければ、この実施例ではトレーニング動作は可能でない。ロードがスケジュールされているならば、実行パイプライン７２は、物理アドレスバッファ７０におけるヒットのためにロードが再試行されたかどうかを判断する（決定ブロック１１２）。より特定的には、実行パイプライン７２は、ロードに割当てられたスケジューラバッファエントリから再試行表示を調べ得る。ロードが物理アドレスバッファヒットのために再試行されたならば、実行パイプライン７２は、ＳＴＬＦプレディクタ６０に対してトレーン信号をアサートし、ＳＴＬＦプレディクタ６０にトレーニングされるべきロードおよびストアのロードＰＣおよびストアＩＤを与える（ブロック１１４）。
【００８５】
他方で、物理アドレスバッファヒットのためにロードが再試行されなかったならば、実行パイプライン７２は、ＳＴＬＦプレディクタ６０の動作のためにロードがストアに対する依存性を受取ったかどうかを判断する（決定ブロック１１６）。換言すれば、実行パイプライン７２は、ロードに割当てられたスケジューラバッファエントリのトレーン表示が、ロードがトレーニングされたことを示しているかどうかを判断する。ロードがトレーニングされたならば、実行パイプライン７２は、データがロードのためにストアキューから転送されるかどうかを判断する（決定ブロック１１８）。データが転送されないならば、ロードがストアによって妨害されなかった可能性が高い。したがって、この場合には、実行パイプライン７２は、ＳＴＬＦプレディクタ６０に対してアントレーン信号をアサートし、アントレーニングのためにロードのロードＰＣを与え得る（ブロック１２０）。
【００８６】
なお、トレーニングは、再試行によるロードの再実行中ではなく、ロードを妨害するストアの実行中に行なわれてもよい。
【００８７】
ここで図７を参照し、ＬＳＤＴ制御回路１３０のある実施例の一部のブロック図が示される。ＬＳＤＴ制御回路１３０は、さまざまな実施例において、ＬＳＤＴ制御回路８４および／またはＬＳＤＴ制御回路１０４として使用され得る。他の実施例が可能であり企図される。図７の実施例において、ＬＳＤＴ制御回路１３０は、制御回路１３２と、制御回路に結合されるカウンタ回路１３４とを含む。制御回路１３２は、実行パイプライン７２からトレーン信号およびアントレーン信号を受けるよう結合され、Ｓｅｔ＿Ｖ［３：０］信号およびＣｌｅａｒ＿Ｖ［３：０］信号をロード／ストア依存性テーブル８０または１００に与える（実施例に依存して）よう結合される。
【００８８】
ＬＳＤＴ制御回路１３０は、有効表示がビットベクトルである実施例についてトレーニングおよびアントレーニング中にロード／ストア依存性テーブルにおける有効表示を管理するよう構成される。この実施例では、ビットベクトルにおける各ビットは、セットされた場合は有効状態であり、クリアされた場合は無効状態であるが、代替の実施例は、ビットベクトル中に、クリアされた場合は有効状態でありセットされた場合は無効状態である各ビットを有してもよい。さらに他の実施例は、有効状態をビットで符号化してもよい。
【００８９】
エントリがトレーニングされているならば、制御回路１３２は、カウンタ回路１３４によって維持される値に応答してセットすべきビットベクトル中の１ビットを選択する。同様に、エントリがアントレーニングされているならば、制御回路１３２は、カウンタ回路１３４によって維持される値に応答してクリアすべきビットベクトル中の１ビットを選択する。カウンタ回路１３４の各値は、ビットベクトル中のビットの１つを選択する。カウンタ回路１３４は、カウンタレジスタと、カウンタレジスタ中の値をインクリメントするインクリメンタとを含む。このように、カウンタ回路１３４は、各クロックサイクルごとにインクリメントする。したがって、所与のトレーニングまたはアントレーニングについて選択されたビットは、この実施例では擬似ランダムであり得る。
【００９０】
この実施例では、有効表示は４ビットベクトルである。したがって、Ｓｅｔ＿Ｖ［３：０］およびＣｌｅａｒ＿Ｖ［３：０］内の１つの信号が、ベクトル内の各ビットに対応する。エントリがトレーニングされているならば、制御回路１３２は、カウンタ回路１３４に基づいて選択されたビットに対応するＳｅｔ＿Ｖ［３：０］信号をアサートする。これに応答して、ロード／ストア依存性テーブル８０または１００は、インデックス付けされたエントリのビットベクトル内の対応のビットをセットする。他方で、エントリがアントレーニングされているならば、制御回路１３２は、カウンタ回路１３４に基づいて選択されたビットに対応するＣｌｅａｒ＿Ｖ［３：０］信号をアサートする。これに応答して、ロード／ストア依存性テーブル８０または１００は、インデックス付けされたエントリのビットベクトル中の対応のビットをクリアする。制御回路１３２は、所望であれば、インデックス付けされたエントリの更新を可能にするためにライトイネーブル信号を与えてもよい。
【００９１】
各クロックサイクルごとにカウントをインクリメントする代わりに、代替の構成は、所望であれば、各トレーンまたはアントレーン事象の後にカウントをインクリメントしてもよい。さらにまた、代替の構成は、トレーニングの際に有効状態に変えるために無効状態であるビットを選択してもよく、アントレーニングの際に無効状態に変えるために有効状態であるビットを選択してもよい。
【００９２】
ここで図８を参照し、依存性ユニット６２のある実施例の一部のブロック図が示される。他の実施例が可能であり企図される。図８に示す部分は、未実行のストアを示すストアビットベクトルを維持することに関連し得る。他の部分（図示せず）は、命令操作の依存性を記録してスケジューラ３６にディスパッチするよう構成され得る。図８の実施例では、依存性ユニット６２は、制御回路１４０と、制御回路１４０に結合されるビットベクトル記憶装置１４２とを含む。制御回路１４０は、デコードユニット２４からディスパッチしている命令操作のロード／ストア性質の表示を、Ｒ♯割当ユニット６４から割当てられたＲ♯を受けるようさらに結合される。さらに、制御回路１４０は、リタイアされたＲ♯およびアボート表示をスケジューラ３６から受けるよう結合される。ビットベクトル記憶装置１４２からのストアビットベクトルは、ストア有効化回路１０８に運ばれる。
【００９３】
一般的には、命令操作がディスパッチされると、制御回路１４０は、デコードユニット２４からストアメモリ操作の表示を受ける。対応のＲ♯がＲ♯割当ユニット６４から与えられる。ビットベクトル記憶装置１４２中のストアビットベクトルは、各Ｒ♯ごとに１ビットを含む。制御ユニット１４０は、ディスパッチしているストアに対応するストアビットベクトル中のビットをセットする。同様に、ストアがスケジューラ３６によってリタイアされリタイアＲ♯により示されると、制御回路１４０は、ストアビットベクトル中の対応のビットをリセットする。最後に、アボートの信号が与えられるならば、制御回路１４０は、アボートされたストアのビットをリセットする。ある実施例においては、アボートを引起した命令操作がリタイアされるときアボートの信号が与えられてもよい。このように、アボート表示は、ストアビットベクトルをクリアするために使用される信号であり得る。他の実施例では、アボート表示は、アボートする命令のＲ♯を特定してもよく、より新しいストアのみがアボートされてもよい。
【００９４】
ここで使用される「制御回路」という言葉は、上述のとおり出力を発生するために入力に対して動作する回路構成のことを言う。一般的に、制御回路は、組合せ論理（静的または動的）、状態マシン、カスタム回路、およびクロック動作される記憶装置（フロップ、レジスタなど）の任意の組合せを含み得る。
【００９５】
コンピュータシステム
ここで図９を参照し、バスブリッジ２０２を介して種々のシステムコンポーネントに結合されたプロセッサ１０を含むコンピュータシステム２００のある実施例のブロック図が示される。他の実施例が可能であり企図される。図示のシステムでは、主メモリ２０４が、メモリバス２０６によりバスブリッジ２０２に結合され、グラフィックスコントローラ２０８が、ＡＧＰバス２１０によりバスブリッジ２０２に結合される。最後に、複数個のＰＧＩデバイス２１２Ａ〜２１２Ｂが、ＰＣＩバス２１４によりバスブリッジ２０２に結合される。２次バスブリッジ２１６が、ＥＩＳＡ／ＩＳＡバス２２０により１つ以上のＥＩＳＡまたはＩＳＡデバイス２１８への電気的インターフェイスを収容するためにさらに設けられてもよい。プロセッサ１０は、ＣＰＵバス２２４によりバスブリッジ２０２に、および２オプションのＬ２キャッシュ２２８に結合される。ＣＰＵバス２２４およびＬ２キャッシュ２２８へのインターフェイスは共に外部インターフェイス５２を含んでもよい。
【００９６】
バスブリッジ２０２は、プロセッサ１０と、主メモリ２０４とグラフィックスコントローラ２０８と、ＰＣＩバス２１４につながれたデバイスとの間のインターフェイスを設ける。操作が、バスブリッジ２０２に接続されたデバイスの１つから受取られると、バスブリッジ２０２は、操作のターゲットを特定する（たとえば、特定のデバイス、またはＰＣＩバス２１４の場合には、ターゲットはＰＣＩバス２１４上にある）。バスブリッジ２０２は、ターゲットとされたデバイスへ操作を経路付ける。バスブリッジ２０２は、一般的には、ソースデバイスまたはバスによって使用されるプロトコルからターゲットデバイスまたはバスによって使用されるプロトコルに操作を変換する。
【００９７】
ＰＣＩバス２１４のためにＩＳＡ／ＥＩＳＡバスへのインターフェイスを設けることに加えて、２次バスブリッジ２１６は、所望に応じて、さらなる機能をさらに組込んでもよい。所望に応じて、キーボードおよびマウス２２２ならびにさまざまなシリアルポートおよびパラレルポートのオプションのサポートを提供するために、２次バスブリッジ２１６の外部またはこれと統合される、入力／出力コントローラ（図示せず）がコンピュータシステム２００内に含められてもよい。外部キャッシュユニット（図示せず）は、他の実施例では、プロセッサ１０とバスブリッジ２０２との間にＣＰＵバス２２４にさらに結合されてもよい。代替的に、外部キャッシュは、バスブリッジ２０２に結合されてもよく、外部キャッシュのためのキャッシュ制御論理は、バスブリッジ２０２に統合されてもよい。Ｌ２キャッシュ２２８が、プロセッサ１０に対するバックサイド構成でさらに示される。なお、Ｌ２キャッシュ２２８は、プロセッサ１０と別個であっても、プロセッサ１０とともにカートリッジ（たとえばスロット１またはスロットＡ）に統合されても、または、プロセッサ１０とともに半導体基板上に統合されてもよい。
【００９８】
主メモリ２０４は、アプリケーションプログラムが記憶され、プロセッサ１０が主に実行するメモリである。好適な主メモリ２０４は、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）を含む。たとえば、ＳＤＲＡＭ（シンクロナスＤＲＡＭ）またはランバスＤＲＡＭ（ＲＤＲＡＭ）（Ｒ）の複数個のバンクが好適であり得る。
【００９９】
ＰＣＩデバイス２１２Ａ〜２１２Ｂは、たとえば、ネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードまたはフロッピー（R）ディスクドライブまたはドライブコントローラ、ＳＣＳＩ（スモールコンピュータシステムズインターフェイス）アダプタおよびテレフォニカードなどの種々の周辺デバイスを例示するものである。同様に、ＩＳＡデバイス２１８は、モデム、サウンドカード、およびＧＰＩＢまたはフィールドバスインターフェイスカードなどの種々のデータ収集カードなどの種々のタイプの周辺デバイスを例示するものである。
【０１００】
グラフィックスコントローラ２０８は、ディスプレイ２２６上のテキストおよび画像のレンダリングを制御するために設けられる。グラフィックスコントローラ２０８は、主メモリ２０４におよび主メモリ２０４から効果的にシフトされ得る３次元データ構造をレンダリングするために、当該技術に一般的に知られている典型的なグラフィックスアクセラレータを採用してもよい。したがって、グラフィックスコントローラ２０８は、バスブリッジ２０２内のターゲットインターフェイスへのアクセスを要求し受取って主メモリ２０４へのアクセスを獲得することができるという点で、ＡＧＰバス２１０のマスタであり得る。専用グラフィックスバスが、主メモリ２０４からのデータの高速取出を可能とする。ある種の動作については、グラフィックスコントローラ２０８は、ＡＧＰバス２１０上のＰＣＩプロトコルトランザクションを生成するようさらに構成されてもよい。バスブリッジ２０２のＡＧＰインターフェイスは、したがって、ＡＧＰプロトコルトランザクションとＰＣＩプロトコルターゲットおよびイニシエータトランザクションとの両方をサポートする機能を含み得る。ディスプレイ２２６は、画像またはテキストが提示可能である任意の電子ディスプレイである。好適なディスプレイ２２６は、陰極線管（「ＣＲＴ」）、液晶ディスプレイ（「ＬＣＤ」）などを含む。
【０１０１】
なお、ＡＧＰバス、ＰＣＩバスおよびＩＳＡまたはＥＩＳＡバスが上記説明において例として用いられたが、所望に応じていかなるバスアーキテクチャと置換されてもよい。さらになお、コンピュータシステム２００は、さらなるプロセッサ（たとえば、コンピュータシステム２００のオプションのコンポーネントとして示されるプロセッサ１０ａ）を含むマルチプロセッシングコンピュータシステムであってもよい。プロセッサ１０ａは、プロセッサ１０と同様であってもよい。より特定的には、プロセッサ１０ａは、プロセッサ１０の同一のコピーであってもよい。プロセッサ１０ａは、独立バス（図９に示す）によりバスブリッジ２０２に接続されてもよく、または、プロセッサ１０とＣＰＵバス２２４を共有してもよい。さらに、プロセッサ１０ａは、Ｌ２キャッシュ２２８と同様に、オプションのＬ２キャッシュ２２８ａに結合されてもよい。
【０１０２】
ここで図１０を参照し、コンピュータシステム３００の別の実施例が示される。他の実施例が可能であり企図される。図１０の実施例において、コンピュータシステム３００は、いくつかの処理ノード３１２Ａ、３１２Ｂ、３１２Ｃおよび３１２Ｄを含む。各処理ノードは、各それぞれの処理ノード３１２Ａ〜３１２Ｄ内に含まれるメモリコントローラ３１６Ａ〜３１６Ｄによりそれぞれのメモリ３１４Ａ〜３１４Ｄに結合される。さらに、処理ノード３１２Ａ〜３１２Ｄは、処理ノード３１２Ａ〜３１２Ｄ間の通信を行なうために使用されるインターフェイス論理を含む。たとえば、処理ノード３１２Ａは、処理ノード３１２Ｂとの通信を行なうためのインターフェイス論理３１８Ａと、処理ノード３１２Ｃとの通信を行なうためのインターフェイス論理３１８Ｂと、さらに別の処理ノード（図示せず）との通信を行なうための第３のインターフェイス論理３１８Ｃとを含む。同様に、処理ノード３１２Ｂは、インターフェイス論理３１８Ｄ、３１８Ｅおよび３１８Ｆを含み、処理ノード３１２Ｃは、インターフェイス論理３１８Ｇ、３１８Ｈおよび３１８Ｉを含み、処理ノード３１２Ｄは、インターフェイス論理３１８Ｊ、３１８Ｋおよび３１８Ｌを含む。処理ノード３１２Ｄは、インターフェイス論理３１８Ｌにより複数個の入力／出力装置（たとえば、デイジーチェーン構成の装置３２０Ａ〜３２０Ｂ）との通信を行なうよう結合される。他の処理ノードが、同様の態様で他のＩ／Ｏ装置と通信を行なってもよい。
【０１０３】
処理ノード３１２Ａ〜３１２Ｄは、処理ノード間の通信のためにパケットベースのリンクを実現する。この実施例では、リンクは、単一方向のラインの組として実現される（たとえば、ライン３２４Ａは、処理ノード３１２Ａから処理ノード３１２Ｂにパケットを伝送するために使用され、ライン３２４Ｂは、処理ノード３１２Ｂから処理ノード３１２Ａにパケットを伝送するために使用される）。ライン３２４Ｃ〜３２４Ｈの他の組が、図１０に示すように他の処理ノード間でパケットを伝送するために使用される。一般的には、ライン３２４の各組は、１つ以上のデータラインと、データラインに対応する１つ以上のクロックラインと、運ばれるパケットのタイプを示す１つ以上の制御ラインとを含み得る。リンクは、処理ノード間の通信のためにキャッシュコヒーレントの態様で、または、処理ノードとＩ／Ｏ装置（または、ＰＣＩバスまたはＩＳＡバスなどの従来の構成のＩ／Ｏバスへのバスブリッジ）との間の通信のために非コヒーレントの態様で動作し得る。さらに、リンクは、図示のとおりＩ／Ｏ装置間のデイジーチェーン構造を用いて非コヒーレントな態様で動作し得る。なお、ある処理ノードから別のノードに伝送されるべきパケットは、１つ以上の中間ノードを通過してもよい。たとえば、処理ノード３１２Ａによって処理ノード３１２Ｄに伝送されるパケットは、図１０に示すように処理ノード３１２Ｂまたは処理ノード３１２Ｃのいずれかを通過してもよい。いかなる好適なルーチングアルゴリズムが使用されてもよい。コンピュータシステム３００の他の実施例は、図１０に示す実施例よりも多いまたは少ない処理ノードを含んでもよい。
【０１０４】
一般的には、パケットは、ノード間をライン３２４により１つ以上のビット時間として伝送され得る。ビット時間は、対応するクロックライン上のクロック信号の立上がりまたは立下がりエッジであり得る。パケットは、トランザクションを開始するためのコマンドパケットと、キャッシュコヒーレンシを維持するためのプローブパケットと、プローブおよびコマンドに応答する応答パケットとを含み得る。
【０１０５】
処理ノード３１２Ａ〜３１２Ｄは、メモリコントローラおよびインターフェイス論理に加えて、１つ以上のプロセッサを含み得る。広く言って、処理ノードは少なくとも１つのプロセッサを含み、任意で所望に応じてメモリおよび他の論理との通信を行なうためのメモリコントローラを含んでもよい。より特定的には、処理ノード３１２Ａ〜３１２Ｄは、プロセッサ１０を含み得る。外部インターフェイスユニット４６は、ノード内にインターフェイス論理３１８と、メモリコントローラ３１６とを含み得る。
【０１０６】
メモリ３１４Ａ〜３１４Ｄは、いかなる好適なメモリ装置をも含み得る。たとえば、メモリ３１４Ａ〜３１４Ｄは、１つ以上のＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）（Ｒ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、スタティックＲＡＭなどを含み得る。コンピュータシステム３００のアドレス空間は、メモリ３１４Ａ〜３１４Ｄ間で分割される。各処理ノード３１２Ａ〜３１２Ｄは、どのアドレスがどのメモリ３１４Ａ〜３１４Ｄに対応付けられ、かつ特定のアドレスのためのメモリ要求がどの処理ノード３１２Ａ〜３１２Ｄに経路付けられるべきかを判断するために使用されるメモリマップを含み得る。ある実施例においては、コンピュータシステム３００内のアドレスのためのコヒーレンシポイントは、アドレスに対応するバイトを記憶するメモリに結合されるメモリコントローラ３１６Ａ〜３１６Ｄである。換言すれば、メモリコントローラ３１６Ａ〜３１６Ｄは、対応するメモリ３１４Ａ〜３１４Ｄへの各メモリアクセスがキャッシュコヒーレントの態様で生じることを確実にする役割を担う。メモリコントローラ３１６Ａ〜３１６Ｄは、メモリ３１４Ａ〜３１４Ｄにインターフェイスするための制御回路構成を含み得る。さらに、メモリコントローラ３１６Ａ〜３１６Ｄは、メモリ要求を待ち行列に入れるための要求キューを含み得る。
【０１０７】
一般的には、インターフェイス論理３１８Ａ〜３１８Ｌは、リンクからパケットを受信し、リンクにより伝送されるべきパケットをバッファするための種々のバッファを含み得る。コンピュータシステム３００は、パケットを伝送するためのいかなる好適なフロー制御メカニズムをも採用し得る。たとえば、ある実施例では、各インターフェイス論理３１８は、そのインターフェイス論理が接続されるリンクの他方端のレシーバ内にバッファの各タイプの数のカウントを記憶する。インターフェイス論理は、受信するインターフェイス論理がパケットを記憶するために開放バッファを有していなければ、パケットを伝送しない。受信するバッファがパケットを前方に経路付けることにより開放されると、受信するインターフェイス論理は、メッセージを送信インターフェイス論理に伝送して、バッファが開放されたことを示す。そのようなメカニズムは、「クーポンベースの」システムと呼ばれ得る。
【０１０８】
Ｉ／Ｏ装置３２０Ａ〜３２０Ｂは、いかなる好適なＩ／Ｏ装置であってもよい。たとえば、Ｉ／Ｏ装置３２０Ａ〜３２０Ｂは、ネットワークインターフェイスカード、ビデオアクセラレータ、オーディオカード、ハードもしくはフロッピー（R）ディスクドライブまたはドライブコントローラ、ＳＣＳＩ（スモールコンピュータシステムズインターフェイス）アダプタ、およびテレフォニカード、モデム、サウンドカード、ならびにＧＰＩＢまたはフィールドバスインターフェイスカードなどの種々のデータ収集カードを含み得る。
【０１０９】
上記開示を完全に理解すると、当業者には多くの変形および変更が明らかとなるであろう。前掲の特許請求の範囲はそのようなすべての変形および変更を含むものと解釈されるべきである。
【０１１０】
【産業上の適用可能性】
この発明は、プロセッサおよびコンピュータシステムに適用可能であり得る。
【図面の簡単な説明】
【図１】  プロセッサのある実施例のブロック図である。
【図２】  図１に示すプロセッサに採用され得る例示のパイプラインのパイプライン図である。
【図３】  マップユニット、スケジューラ、ＡＧＵ／ＴＬＢおよびロード／ストアユニットのある実施例をより詳細に示すブロック図である。
【図４】  図３に示すストア−ロード転送（ＳＴＬＦ）プレディクタのある実施例のブロック図である。
【図５】  図３に示すＳＴＬＦプレディクタの第２の実施例のブロック図である。
【図６】  図４または５に示すＳＴＬＦプレディクタのある実施例におけるロードのトレーニングおよびアントレーニングを示すフローチャートの図である。
【図７】  図４または図５に示すＳＴＬＦプレディクタに採用され得る制御回路のある実施例を示すブロック図である。
【図８】  図３に示す依存性ユニットのある実施例のブロック図である。
【図９】  図１に示すプロセッサを含むコンピュータシステムのある実施例のブロック図である。
【図１０】  図１に示すプロセッサを含むコンピュータシステムの第２の実施例のブロック図である。
【図１】
0004920156.tif 000002
【図２】
0004920156.tif 000003
【図３】
0004920156.tif 000004
【図４】
0004920156.tif 000005
【図５】
0004920156.tif 000006
【図６】
0004920156.tif 000007
【図７】
0004920156.tif 000008
【図８】
0004920156.tif 000009
【図９】
0004920156.tif 000010
【図１０】
0004920156.tif 000011