(57)【要約】【課題】Ｄキャッシュ・ミス予測およびスケジューリングのための方法および装置を提供すること。【解決手段】一実施形態では、プロセッサでの命令の実行がスケジューリングされる。プロセッサは、共通発行グループ内の命令を互いに対して遅延式に実行する２つ以上の実行パイプラインを有する少なくとも１つのカスケード式遅延実行パイプライン・ユニットを有することができる。この方法は、命令の発行グループを受け取ること、発行グループ内の第１命令が第１命令の以前の実行中にキャッシュ・ミスとなったかどうかを判定すること、および、そうである場合、カスケード式遅延実行パイプライン・ユニット内の別のパイプラインに対して実行が遅延されるパイプラインで実行するように第１命令をスケジューリングすることを含む。【選択図】図１
2007213578.tif 000002
【特許請求の範囲】
【請求項１】
共通発行グループ内の命令を互いに対して遅延式に実行する２つ以上の実行パイプラインを有する少なくとも１つのカスケード式遅延実行パイプライン・ユニットを有するプロセッサでの命令の実行をスケジューリングする方法であって、
命令の発行グループを受け取るステップと、
前記発行グループ内の第１命令が前記第１命令の以前の実行中にキャッシュ・ミスとなったかどうかを判定するステップと、
そうである場合、前記カスケード式遅延実行パイプライン・ユニット内の１つのパイプラインに対して実行が遅延される別のパイプラインで実行するように前記第１命令をスケジューリングするステップと
を含む方法。
【請求項２】
前記発行グループ内の第１命令がキャッシュ・ミスとなったかどうかを判定するステップが、
前記第１命令が前記以前の実行中に前記キャッシュ・ミスとなったかどうかを示すミス予測ビットの値を求めるステップ、
を含む請求項１に記載の方法。
【請求項３】
前記ミス予測ビットが、前記第１命令の前記以前の実行中に前記第１命令の中に符号化される請求項２に記載の方法。
【請求項４】
前記ミス予測ビットの前記値が、初期トレーニング段階中に修正され、前記ミス予測ビットの前記値が、前記初期トレーニング段階の満了後に一定となる請求項２に記載の方法。
【請求項５】
前記発行グループ内の前記第１命令が前記キャッシュ・ミスとなったと判定したことに応答して、前記第１命令が対象とするデータを求める要求がレベル２キャッシュに送られる請求項１に記載の方法。
【請求項６】
前記第１命令が対象とするデータを求める前記要求が、前記データのターゲット・アドレスを含み、前記データの前記ターゲット・アドレスが、前記第１命令の以前の実行中に計算され、前記第１命令を含む命令ラインに付加される請求項５に記載の方法。
【請求項７】
前記発行グループ内の前記第１命令が前記キャッシュ・ミスとなったかどうかについての判定が、前記第１命令がレベル２キャッシュから取り出された後、かつ前記第１命令がレベル１キャッシュ内に配置される前に実施される請求項１に記載の方法。
【請求項８】
共通発行グループ内の命令を互いに対して遅延式に実行する２つ以上の実行パイプラインを有するカスケード式遅延実行パイプライン・ユニットと、
命令の発行グループを受け取り、
前記発行グループ内の第１命令が前記第１命令の以前の実行中にキャッシュ・ミスとなったかどうかを判定し、
そうである場合、前記カスケード式遅延実行パイプライン・ユニット内の１つのパイプラインに対して実行が遅延される別のパイプラインで実行するように前記第１命令をスケジューリングする
ように構成された回路と
を備える集積回路デバイス。
【請求項９】
レベル２キャッシュをさらに備え、
前記回路が、前記発行グループ内の前記第１命令が前記キャッシュ・ミスとなったと判定したことに応答して、前記第１命令が対象とするデータを求める要求をレベル２キャッシュに対して発行するようにさらに構成される請求項８に記載の集積回路デバイス。
【請求項１０】
レベル２キャッシュと、
レベル１キャッシュと
をさらに備え、
前記発行グループ内の前記第１命令が前記キャッシュ・ミスとなったかどうかについての判定が、前記第１命令がレベル２キャッシュから取り出された後、かつ前記第１命令がレベル１キャッシュ内に配置される前に実施される請求項８に記載の集積回路デバイス。
【請求項１１】
共通発行グループ内の命令を互いに対して遅延式に実行する２つ以上の実行パイプラインを有するカスケード式遅延実行パイプライン・ユニットと、
命令の発行グループを受け取り、
前記発行グループ内の第１命令が前記第１命令の以前の実行中にキャッシュ・ミスとなったかどうかを判定し、
そうである場合、
前記カスケード式遅延実行パイプライン・ユニット内の第２パイプラインに対して実行の遅延が小さい第１パイプラインで実行するように前記第１命令をスケジューリングする
ように構成された回路と
を備える集積回路デバイス。
【請求項１２】
前記回路が、前記第１命令に関するデータを前記第１パイプラインから前記第２パイプラインに転送するようにさらに構成される請求項１１に記載の集積回路デバイス。
【請求項１３】
前記データが、前記第１パイプライン内の実行ユニット内のステージから前記第２パイプラインに転送される請求項１２に記載の集積回路デバイス。
【請求項１４】
前記データが、前記第１パイプライン内の遅延ターゲット・キューから第２パイプラインに転送される請求項１３に記載の集積回路デバイス。
【請求項１５】
前記回路が、
前記第１命令が発行されるときに、前記第１命令が要求するデータがレベル１データ・キャッシュ内にあるかどうかを判定し、
そうでない場合、前記第１命令がキャッシュ・ミスとなったことを示すカウンタを増分し、
そうである場合、前記第１命令がキャッシュ・ミスとなったことを示すカウンタを減分する
ようにさらに構成される請求項１１に記載の集積回路デバイス。
【請求項１６】
前記回路が、
前記カウンタがしきい値未満である場合、停止なしで前記第１命令をスケジューリングすることができる場合にのみ、前記第１パイプラインで実行するように前記第１命令をスケジューリングする
ようにさらに構成される請求項１５に記載の集積回路デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般にプロセッサでの命令の実行に関する。詳細には、本願は、キャッシュ・ミスによるプロセッサでのパイプライン停止を最小限に抑えることに関する。
【背景技術】
【０００２】
現代のコンピュータ・システムは通常、コンピュータ・システム内の情報を処理するのに使用することのできるプロセッサを含む、いくつかの集積回路（ＩＣ）を含む。プロセッサで処理されるデータは、プロセッサで実行されるコンピュータ命令、ならびにコンピュータ命令を使用してプロセッサで操作されるデータを含むことができる。コンピュータ命令およびデータは通常、コンピュータ・システム内のメイン・メモリに格納される。
【０００３】
プロセッサは通常、一連の小さいステップで命令を実行することによって命令を処理する。ある場合には、プロセッサで処理される命令の数を増加させる（したがってプロセッサの速度を向上させる）ために、プロセッサがパイプライン化されることがある。パイプライン化とは、プロセッサ内に別々のステージを設け、各ステージが、命令を実行するのに必要な小さいステップのうちの１つまたは複数を実行することを指す。ある場合には、（他の回路に加えて）パイプラインが、プロセッサ・コアと呼ばれるプロセッサの部分に配置されることがある。一部のプロセッサは、複数のプロセッサ・コアを有することがあり、ある場合には、各プロセッサ・コアが複数のパイプラインを有することがある。プロセッサ・コアが複数のパイプラインを有する場合、命令のグループ（発行グループと呼ばれる）を複数のパイプラインに対して並列に発行し、各パイプラインで並列に実行することができる。
【０００４】
パイプラインで命令を実行することの一例として、第１命令が受領されたとき、第１パイプライン・ステージは命令の小部分を処理することができる。第１パイプライン・ステージが命令のその小部分の処理を終了したとき、第２パイプライン・ステージは第１命令の別の小部分の処理を開始することができると共に、第１パイプライン・ステージは、第２命令の小部分を受け取り、その処理を開始する。したがって、プロセッサは、２つ以上の命令を同時に（並列に）処理することができる。
【０００５】
データおよび命令に対するより高速なアクセス、ならびにプロセッサのより良好な利用を実現するために、プロセッサはいくつかのキャッシュを有することがある。キャッシュは、メイン・メモリよりも一般に小さいメモリであり、通常はプロセッサと同じダイ（すなわちチップ）上に製造される。現代のプロセッサは通常、いくつかのレベルのキャッシュを有する。プロセッサのコアに最も近い所に配置される最速のキャッシュは、レベル１キャッシュ（Ｌ１キャッシュ）と呼ばれる。Ｌ１キャッシュに加えて、プロセッサは通常、レベル２キャッシュ（Ｌ２キャッシュ）と呼ばれる第２のより大きなキャッシュを有する。ある場合には、プロセッサは、その他の追加のキャッシュ・レベル（例えばＬ３キャッシュおよびＬ４キャッシュ）を有することがある。
【０００６】
プロセッサのパイプラインの各ステージを埋めるのに十分な命令をプロセッサに供給するために、プロセッサは、Ｌ２キャッシュから、命令ライン（Ｉライン）と呼ばれる複数の命令を含むグループとして命令を取り出すことができる。取り出したＩラインは、Ｌ１命令キャッシュ（Ｉキャッシュ）に配置され、プロセッサのコアがＩライン内の命令にアクセスすることができる。同様に、プロセッサで処理すべきデータのブロック（Ｄライン）をＬ２キャッシュから取り出し、Ｌ１データ・キャッシュ（Ｄキャッシュ）内に配置することができる。
【０００７】
上位キャッシュ・レベルから情報を取り出し、その情報を下位キャッシュ・レベルに配置するプロセスは、フェッチングと呼ばれることがあり、通常は一定量の時間（待ち時間）を必要とする。例えば、プロセッサ・コアが情報を要求し、情報がＬ１キャッシュ内にない場合（キャッシュ・ミスと呼ばれる）、情報をＬ２キャッシュからフェッチすることができる。各キャッシュ・ミスの結果、要求された情報を求めて次のキャッシュ／メモリ・レベルが探索されるときに追加の待ち時間が生じる。例えば、要求された情報がＬ２キャッシュ内にない場合、プロセッサは、Ｌ３キャッシュまたはメイン・メモリ内の情報を探すことがある。
【０００８】
ある場合には、プロセッサは、キャッシュまたはメモリあるいはその両方から命令およびデータが取り出されるよりも高速に命令およびデータを処理することができる。例えば、パイプラインで実行される命令がＤキャッシュ内にないデータにアクセスすることを試みる場合、パイプライン・ステージは、プロセッサが上位レベルのキャッシュまたはメモリからのデータを含むＤラインをフェッチ中に、前の命令を終了することがある。フェッチすべき適切なＤラインの待機中にパイプラインが前の命令の処理を終了したとき、パイプラインには、処理が残っている命令がないことがある（パイプライン停止と呼ばれる）。パイプラインが停止するとき、プロセッサは十分に利用されておらず、パイプライン化プロセッサ・コアが提供する利点が失われる。
【０００９】
命令が実行されるまで所望のデータのアドレスが既知ではない可能性があるので、プロセッサは、命令が実行されるまで、所望のＤラインを探索することができない可能性がある。しかし、一部のプロセッサは、現在アクセス中のデータ・アドレスに近い（近接する）データ・アドレスを含むＤラインのブロックをフェッチすることによってそのようなキャッシュ・ミスを防止するように試みることができる。近接するＤラインをフェッチすることは、Ｄライン内のデータ・アドレスにアクセスしたとき、近接するデータ・アドレスもアクセスされる可能性が高いという仮定に依拠する（この概念は一般に参照の局所性と呼ばれる）。しかし、ある場合には、この仮定が誤っていることがあり、それによって現在のＤライン付近に位置していないＤライン内のデータが命令によってアクセスされ、その結果、キャッシュ・ミスとなり、プロセッサが非効率となる。
【発明の開示】
【発明が解決しようとする課題】
【００１０】
したがって、キャッシュされたメモリを使用するプロセッサで命令を実行し、データを取り出すための改良型の方法および装置が求められている。
【課題を解決するための手段】
【００１１】
本発明の実施形態は、キャッシュされたメモリを使用するプロセッサで命令を実行し、データを取り出す改良型の方法および装置を提供する。一実施形態では、プロセッサの命令の実行がスケジューリングされる。プロセッサは、共通発行グループ内の命令を互いに対して遅延された態様で（以下、「遅延式」という）に実行する２つ以上の実行パイプラインを有する少なくとも１つのカスケード式遅延実行パイプライン・ユニットを有することができる。この方法は、命令の発行グループを受け取り、発行グループ内の第１命令が第１命令の以前の実行中にキャッシュ・ミスとなったかどうかを判定し、そうである場合、カスケード式遅延実行パイプライン・ユニット内の別のパイプラインに対して実行が遅延されるパイプラインで実行するように第１命令をスケジューリングする。
【００１２】
本発明の別の実施形態は、共通発行グループ内の命令を互いに対して遅延式に実行する２つ以上の実行パイプラインを有するカスケード式遅延実行パイプライン・ユニットを備える集積回路デバイスを提供する。この集積回路デバイスは、命令の発行グループを受け取り、発行グループ内の第１命令が第１命令の前の実行中にキャッシュ・ミスとなったかどうかを判定し、そうである場合、カスケード式遅延実行パイプライン・ユニット内の別のパイプラインに対して実行が遅延されるパイプラインで実行するように第１命令をスケジューリングするように構成された回路も含む。
【００１３】
本発明のさらに別の実施形態は、共通発行グループ内の命令を互いに対して遅延式に実行する２つ以上の実行パイプラインを有するカスケード式遅延実行パイプライン・ユニットを備える集積回路デバイスを提供する。この集積回路デバイスは、命令の発行グループを受け取り、発行グループ内の第１命令が第１命令の前の実行中にキャッシュ・ミスとなったかどうかを判定し、そうである場合、カスケード式遅延実行パイプライン・ユニット内の第２パイプラインに対して実行の遅延が小さい第１パイプラインで実行するように第１命令をスケジューリングするように構成された回路も含む。
【００１４】
本発明の上記で列挙した特長、利点、および目的が達成され、それらを詳細に理解できるように、添付の図面に示される本発明の実施形態を参照することによって上記で簡潔に要約した本発明のより具体的な説明を得ることができる。
【００１５】
しかし、本発明は他の等しく有効な実施形態を認めることができるので、添付の図面は本発明の典型的な実施形態を示すに過ぎず、したがって本発明の範囲の限定と見なすべきではない。
【発明を実施するための最良の形態】
【００１６】
本発明は一般に、Ｄキャッシュ・ミス予測およびスケジューリングのための機構を提供する。一実施形態では、プロセッサでの命令の実行をスケジューリングする方法が提供される。プロセッサは、共通発行グループ内の命令を互いに対して遅延式に実行する２つ以上の実行パイプラインを有する少なくとも１つのカスケード式遅延実行パイプライン・ユニットを有することができる。この方法は、命令の発行グループを受け取り、発行グループ内の第１命令が第１命令の前の実行中にキャッシュ・ミスとなったかどうかを判定し、そうである場合、カスケード式遅延実行パイプライン・ユニット内の別のパイプラインに対して実行が遅延されるパイプラインで実行するように第１命令をスケジューリングする。一実施形態では、実行が遅延されるパイプラインに対して第１命令が発行されたとき、命令が対象とするデータへのアクセスをＬ２キャッシュに対して開始することができる。遅延実行パイプライン内の命令を実行し、命令が発行されたときにＬ２キャッシュ・アクセスを開始することにより、必要なら、命令が対象とするデータを、命令の実行を停止することなく、命令がデータを使用するのに間に合うようにＬ２キャッシュから取り出すことができる。
【００１７】
以下では、本発明の実施形態を参照する。しかし、本発明は記載の特定の実施形態に限定されない。むしろ、本発明を実装および実施するのに、異なる実施形態に関係するか否かに関わらず、以下の特徴および要素の任意の組合せが企図される。さらに、様々な実施形態において、本発明は従来技術に勝る多数の利点をもたらす。しかし、本発明の実施形態は他の可能な解決策または従来技術に勝る利点あるいはその両方を達成することができるが、特定の利点が所与の実施形態で達成されるか否かは本発明の制限ではない。したがって、以下の態様、特徴、実施形態、および利点は例示的なものに過ぎず、添付の特許請求の範囲で明示的に列挙される場合を除いて、特許請求の範囲の要素または制限と見なすべきではない。同様に、「本発明」に対する参照は、本明細書で開示される本発明の何らかの主題の一般化と解釈すべきではなく、特許請求の範囲で明示的に列挙される場合を除いて、添付の特許請求の範囲の要素または限定と見なすべきではない。
【００１８】
以下は、添付の図面で示される本発明の実施形態の詳細な説明である。実施形態は例であり、本発明を明確に伝達するような詳細なものである。しかし、提供される詳細の主旨は実施形態の予想される変形形態を限定するものではなく、逆に、添付の特許請求の範囲で定義される本発明の精神および範囲に包含されるすべての修正形態、均等物、代替実施形態を包含することが意図される。
【００１９】
システム、例えばコンピュータ・システムと共に本発明の実施形態を使用することができ、システムに関連して本発明の実施形態を説明する。本明細書では、システムは、パーソナル・コンピュータ、インターネット・アプライアンス、デジタル・メディア・アプライアンス、携帯情報端末（ＰＤＡ）、ポータブル音楽／ビデオ・プレーヤ、およびビデオ・ゲーム・コンソールを含む、プロセッサおよびキャッシュ・メモリを使用する任意のシステムを含むことができる。キャッシュ・メモリを使用するプロセッサと同じダイ上にキャッシュ・メモリを配置することができるが、ある場合には、プロセッサとキャッシュ・メモリが異なるダイ（例えば、別々のモジュール内の別々のチップ、または単一モジュール内の別々のチップ）上に配置されることがある。
【００２０】
以下では、複数のプロセッサ・コアおよび複数のＬ１キャッシュを有し、各プロセッサ・コアが複数のパイプラインを使用して命令を実行するプロセッサに関して説明するが、単一処理コアを有するプロセッサを含む、キャッシュを使用する任意のプロセッサで本発明の実施形態を使用することができる。一般には、任意のプロセッサで本発明の実施形態を使用することができ、本発明の実施形態は特定の構成に限定されない。さらに、以下では、Ｌ１命令キャッシュ（Ｌ１  ＩキャッシュまたはＩキャッシュ）とＬ１データ・キャッシュ（Ｌ１  ＤキャッシュまたはＤキャッシュ２２４）に分割されたＬ１キャッシュを有するプロセッサに関して説明するが、統合Ｌ１キャッシュが使用される構成で本発明の実施形態を使用することができる。
【００２１】
図１は、本発明の一実施形態によるシステム１００を示すブロック図である。システム１００は、命令およびデータを格納するシステム・メモリ１０２と、グラフィックス処理のためのグラフィックス処理装置１０４と、外部装置と通信するＩ／Ｏインターフェース１０６と、命令およびデータを長期格納する記憶装置１０８と、命令およびデータを処理するプロセッサ１１０とを含むことができる。
【００２２】
本発明の一実施形態によれば、プロセッサ１１０は、Ｌ２キャッシュ１１２ならびに複数のＬ１キャッシュ１１６を有することができ、各Ｌ１キャッシュ１１６は複数のプロセッサ・コア１１４のうちの１つで使用される。一実施形態によれば、各プロセッサ・コア１１４をパイプライン化することができ、各命令が一連の小さいステップで実行され、各ステップが異なるパイプライン・ステージで実行される。
【００２３】
図２は、本発明の一実施形態によるプロセッサ１１０を示すブロック図である。話を簡単にするために、図２にはプロセッサの単一コア１１４が示されており、プロセッサ１１０の単一コア１１４に関して図２を説明する。一実施形態では、各コア１１４は同一でよい（例えば、同一のパイプライン・ステージを有する同一のパイプラインを含むことができる）。別の実施形態では、各コア１１４は異なっていてよい（例えば、異なるステージを有する異なるパイプラインを含むことができる）。
【００２４】
本発明の一実施形態では、Ｌ２キャッシュ１１２は、プロセッサ１１０で使用される命令およびデータの一部を含むことができる。ある場合には、プロセッサ１１０は、Ｌ２キャッシュ１１２に含まれていない命令およびデータを要求することがある。要求された命令およびデータがＬ２キャッシュ１１２に含まれていない場合、要求された命令およびデータを（上位レベル・キャッシュまたはシステム・メモリ１０２から）取り出し、Ｌ２キャッシュ１１２内に配置することができる。プロセッサ・コア１１４がＬ２キャッシュ１１２に命令を要求したとき、まずプリデコーダおよびスケジューラ２２０（以下で詳述する）で命令を処理することができる。
【００２５】
本発明の一実施形態では、Ｉラインと呼ばれるグループでＬ２キャッシュ１１２から命令をフェッチすることができる。同様に、Ｄラインと呼ばれるグループでＬ２キャッシュ１１２からデータをフェッチすることができる。図１に示すＬ１キャッシュ１１６を、Ｉラインを格納するＬ１命令キャッシュ２２２（Ｉキャッシュ２２２）ならびにＤラインを格納するＬ１データ・キャッシュ２２４（Ｄキャッシュ２２４）の２つの部分に分割することができる。Ｌ２アクセス回路２１０を使用して、Ｌ２キャッシュ１１２からＩラインおよびＤラインをフェッチすることができる。
【００２６】
本発明の一実施形態では、Ｌ２キャッシュ１１２から取り出されたＩラインをプリデコーダおよびスケジューラ２２０で処理することができ、Ｉキャッシュ２２２内にＩラインを配置することができる。プロセッサ性能をさらに改善するために、しばしば命令が事前復号化され、例えばＩラインがＬ２（またはより上位の）キャッシュから取り出される。そのような事前復号化は、アドレス生成、分岐予測、スケジューリング（命令を発行すべき順序を決定すること）などの様々な機能を含むことができ、命令実行を制御するディスパッチ情報（１組のフラグ）として取り込まれる。ある場合には、複数のコア１１４およびＬ１キャッシュの間でプリデコーダおよびスケジューラ２２０を共有することができる。同様に、Ｌ２キャッシュ１１２からフェッチされるＤラインをＤキャッシュ２２４内に配置することができる。各ＩラインおよびＤライン内のビットを使用して、Ｌ２キャッシュ１１２内の情報のラインがＩラインであるか、それともＤラインであるかを追跡することができる。任意選択で、ＩラインまたはＤラインあるいはその両方でＬ２キャッシュ１１２からデータをフェッチする代わりに、他の方式、例えばより小さい量のデータ、大きい量のデータ、または可変量のデータをフェッチすることによってＬ２キャッシュ１１２からデータをフェッチすることができる。
【００２７】
一実施形態では、Ｉキャッシュ２２２およびＤキャッシュ２２４は、どのＩラインおよびＤラインが現在Ｉキャッシュ２２２およびＤキャッシュ２２４内にあるかを追跡するために、それぞれＩキャッシュ・ディレクトリ２２３およびＤキャッシュ・ディレクトリ２２５を有することができる。ＩラインまたはＤラインがＩキャッシュ２２２またはＤキャッシュ２２４に追加されたとき、対応するエントリをＩキャッシュ・ディレクトリ２２３またはＤキャッシュ・ディレクトリ２２５内に配置することができる。ＩラインまたはＤラインがＩキャッシュ２２２またはＤキャッシュ２２４から除去されたとき、Ｉキャッシュ・ディレクトリ２２３またはＤキャッシュ・ディレクトリ２２５内の対応するエントリを除去することができる。Ｄキャッシュ・ディレクトリ２２５を使用するＤキャッシュ２２４に関して以下で説明するが、本発明の実施形態は、Ｄキャッシュ・ディレクトリ２２５が使用されない場合でも使用することができる。そのような場合、Ｄキャッシュ２２４に格納されたデータ自体は、どのＤラインがＤキャッシュ２２４内に存在するかを示すことができる。
【００２８】
一実施形態では、命令フェッチング回路２３６を使用してコア１１４に対する命令をフェッチすることができる。例えば、命令フェッチング回路２３６は、コアで実行中の現在の命令を追跡するプログラム・カウンタを含むことができる。コア内の分岐ユニットを使用して、分岐命令に遭遇したときにプログラム・カウンタを変更することができる。Ｉライン・バッファ２３２を使用して、Ｌ１  Ｉキャッシュ２２２からフェッチされた命令を格納することができる。発行およびディスパッチ回路２３４を使用して、Ｉライン・バッファ２３２から取り出された命令を命令グループとしてグループ化することができ、次いで、以下で説明するように命令グループをコア１１４に対して並列に発行することができる。ある場合には、発行およびディスパッチ回路２３４は、プリデコーダおよびスケジューラ２２０で与えられる情報を使用して、適切な命令グループを形成することができる。
【００２９】
発行およびディスパッチ回路２３４から命令を受け取ることに加えて、コア１１４は、様々な場所からデータを受け取ることができる。コア１１４がデータ・レジスタにデータを要求する場合、レジスタ・ファイル２４０を使用してデータを得ることができる。コア１１４がメモリ位置にデータを要求する場合、キャッシュ・ロードおよびストア回路２５０を使用して、Ｄキャッシュ２２４からデータをロードすることができる。そのようなロードが実行される場合、必要なデータを求める要求をＤキャッシュ２２４に対して発行することができる。同時に、Ｄキャッシュ・ディレクトリ２２５をチェックして、所望のデータがＤキャッシュ２２４内に配置されているかどうかを判定することができる。Ｄキャッシュ２２４が所望のデータを含む場合、Ｄキャッシュ・ディレクトリ２２５は、Ｄキャッシュ２２４が所望のデータを含み、Ｄキャッシュ・アクセスをある時間の後に完了することができることを示すことができる。Ｄキャッシュ２２４が所望のデータを含まない場合、Ｄキャッシュ・ディレクトリ２２５は、Ｄキャッシュ２２４が所望のデータを含まないことを示すことができる。Ｄキャッシュ・ディレクトリ２２５にはＤキャッシュ２２４よりも迅速にアクセスすることができるので、Ｄキャッシュ・ディレクトリ２２５にアクセスした後、かつＤキャッシュ・アクセスが完了する前に、所望のデータを求める要求を（例えばＬ２アクセス回路２１０を使用して）Ｌ２キャッシュ１１２に対して発行することができる。
【００３０】
ある場合には、コア１１４でデータを修正することができる。修正後データをレジスタ・ファイルに書き込むことができ、またはメモリに格納することができる。ライトバック回路２３８を使用してデータをレジスタ・ファイル２４０にライトバックすることができる。ある場合には、ライトバック回路２３８は、キャッシュ・ロードおよびストア回路２５０を使用して、データをＤキャッシュ２２４にライトバックすることができる。任意選択で、コア１１４は、キャッシュ・ロードおよびストア回路２５０にアクセスして、直接的に格納を実行することができる。ある場合には、以下で説明するように、ライトバック回路２３８を使用して命令をＩキャッシュ２２２にライトバックすることもできる。
【００３１】
上述のように、発行およびディスパッチ回路２３４を使用して、命令グループを形成し、形成した命令グループをコア１１４に対して発行することができる。発行およびディスパッチ回路２３４は、Ｉライン内の命令を回転およびマージし、それによって適切な命令グループを形成するための回路も含むことができる。発行グループの形成は、発行グループ内の命令間の依存関係、ならびに以下で詳細に説明する命令の順序付けから達成することのできる最適化などのいくつかの考慮すべき点を考慮に入れることができる。発行グループを形成した後、プロセッサ・コア１１４に対して発行グループを並列にディスパッチすることができる。ある場合には、命令グループは、コア１１４内のパイプラインごとに１つの命令を含むことができる。任意選択で、命令グループはより少数の命令でよい。
【００３２】
本発明の一実施形態によれば、１つまたは複数のプロセッサ・コア１１４は、カスケード式遅延実行パイプライン構成を使用することができる。図３に示す例では、コア１１４は、カスケード式構成の４つのパイプラインを含む。任意選択で、より少数（２つ以上のパイプライン）またはより多数（５つ以上のパイプライン）をそのような構成で使用することができる。さらに、図３に示すパイプラインの物理的レイアウトは例であって、必ずしもカスケード式遅延実行パイプライン・ユニットの実際の物理的レイアウトを示唆するものではない。
【００３３】
一実施形態では、カスケード式遅延実行パイプライン構成内の各パイプライン（Ｐ０、Ｐ１、Ｐ２、Ｐ３）は、実行ユニット３１０を含むことができる。実行ユニット３１０は、所与のパイプラインに対して１つまたは複数の機能を実行するいくつかのパイプライン・ステージを含むことができる。例えば、実行ユニット３１０は、命令のフェッチングおよび復号化のすべてまたは一部を実行することができる。実行ユニットで実行された復号化は、プリデコーダおよびスケジューラ２２０と共有することができる。プリデコーダおよびスケジューラ２２０は複数のコア１１４間で共有され、または任意選択で、単一コア１１４で使用される。実行ユニットはまた、レジスタ・ファイルからデータを読み取り、アドレスを計算し、（例えば演算論理装置すなわちＡＬＵを使用して）整数演算機能を実行し、浮動小数点演算機能を実行し、命令分岐を実行し、データ・アクセス機能を実行し（例えば、メモリからのロードおよびストア）、データをレジスタに戻す（例えば、レジスタ・ファイル２４０内）。ある場合には、コア１１４は、命令フェッチング回路２３６、レジスタ・ファイル２４０、キャッシュ・ロードおよびストア回路２５０、ライトバック回路、ならびにその他の任意の回路を使用してこれらの機能を使用することができる。
【００３４】
一実施形態では、各実行ユニット３１０は同一の機能を実行することができる。任意選択で、各実行ユニット３１０（または異なるグループの実行ユニット）は異なる機能の組を実行することができる。さらに、ある場合には、各コア１１４内の実行ユニット３１０は、他のコアで提供される実行ユニット３１０と同じでよく、または異なるものでよい。例えば、あるコアでは、実行ユニット３１００および３１０２がロード／ストア機能および算術機能を実行し、実行ユニット３１０１および３１０３が算術機能のみを実行することができる。
【００３５】
一実施形態では、図示するように、実行ユニット３１０での実行を他の実行ユニット３１０に対して遅延式に実行することができる。図示する構成は、カスケード式遅延構成とも呼ばれることがあるが、図示するレイアウトは、必ずしも実行ユニットの実際の物理的レイアウトを示すわけではない。そのような構成では、命令グループ内の命令（便宜上Ｉ０、Ｉ１、Ｉ２、Ｉ３と呼ぶ）がパイプラインＰ０、Ｐ１、Ｐ２、Ｐ３に対して並列に発行され、各命令を、各他の命令に対して遅延式に実行することができる。例えば、まず命令Ｉ０をパイプラインＰ０に対する実行ユニット３１００で実行することができ、２番目に命令Ｉ１をパイプラインＰ１に対する実行ユニット３１０１で実行することができ、以下同様である。
【００３６】
一実施形態では、プロセッサ・コア１１４に発行グループを発行する際、Ｉ０を実行ユニット３１００で直ちに実行することができる。後に、命令Ｉ０が実行ユニット３１００での実行を終了した後、実行ユニット３１０１は命令Ｉ１の実行を開始することができ、以下同様にして、コア１１４に対して並列に発行された命令が互いに対して遅延式に実行される。
【００３７】
一実施形態では、一部の実行ユニット３１０を互いに対して遅延させることができ、一方、他の実行ユニット３１０は互いに対して遅延されない。第２命令の実行が第１命令の実行に依存する場合、転送経路３１２を使用して、第１命令から第２命令に結果を転送することができる。図示する転送経路３１２は例示的なものに過ぎず、コア１１４は、実行ユニット３１０内の様々な地点から他の実行ユニット３１０または同一の実行ユニット３１０へのより多くの転送経路を含むことができる。
【００３８】
一実施形態では、実行ユニット３１０で実行されていない命令（例えば遅延されている命令）を遅延キュー３２０またはターゲット遅延キュー３３０内に保持することができる。遅延キュー３２０は、実行ユニット３１０で実行されていない命令グループ内の命令を保持するのに使用することができる。例えば、命令Ｉ０が実行ユニット３１００で実行中に、命令Ｉ１、Ｉ２、およびＩ３を遅延キュー３２０内に保持することができる。命令が遅延キュー３２０を通じて移動された後、命令を適切な実行ユニット３１０に対して発行し、実行することができる。ターゲット遅延キュー３３０は、既に実行ユニット３１０で実行された命令の結果を保持するのに使用することができる。ある場合には、ターゲット遅延キュー３３０内の結果を実行ユニット３１０に転送して処理することができ、または適切なら無効にすることができる。同様に、ある環境では、以下で説明するように遅延キュー３２０内の命令を無効にすることができる。
【００３９】
一実施形態では、命令グループ内の各命令が遅延キュー３２０、実行ユニット３１０、およびターゲット遅延キュー３３０を通じて渡された後、結果（例えば、データ、および以下で説明するように、命令）をレジスタ・ファイルに、あるいはＬ１  Ｉキャッシュ２２２またはＤキャッシュ２２４あるいはその両方に書き戻すことができる。ある場合に、ライトバック回路２３８を使用して、（ターゲット遅延キュー３３０の１つから受け取った）最後に変更したレジスタの値を書き戻し、無効にされた結果を廃棄することができる。
【００４０】
ロード命令のスケジューリング
本発明の一実施形態によれば、キャッシュ・ミスによるパイプライン停止は、最小遅延パイプライン（例えば、上述の例ではパイプラインＰ０）でロード命令を実行することによって低減することができる。ロード命令がＤキャッシュ・ミスとなった場合、ロード命令の後に発行された命令を無効にすることができ、データを求める要求をＬ２キャッシュ１１２に送ることができる。所望のデータをＬ２キャッシュ１１２からフェッチ中に、実行における遅延が最も大きいパイプライン（例えばパイプラインＰ３）に対してロード命令を再発行することができ、無効にされた命令を、再発行した命令と同じ発行グループ、または後続の発行グループで発行することができる。
【００４１】
上述のようにロード命令を実行することは、少なくとも３つの点で有益である。第１に、実行における遅延が最も小さいパイプラインでロード命令をまず実行することにより、ロード命令がＤキャッシュ・ミスとなったかどうかについての判定を迅速に行うことができる。Ｄキャッシュ・ミスが生じたかどうかを初期に判定することで、パイプラインに対して発行される、無効にされ再発行される命令（例えば、後続の発行グループ内の命令）を少なくすることができる。第２に、発行された命令がＬ１キャッシュ・ミスとなったかどうかを迅速に判定することにより、Ｌ２キャッシュ・アクセスをより迅速に開始することができ、それによってＬ２キャッシュ・アクセスの実施中にパイプラインで生じる停止が低減される。第３に、遅延が最も大きいパイプラインに対してロード命令を再発行することにより、所望のデータのＬ２キャッシュ・アクセスを完了させるためにより多くの時間（例えば、遅延キュー３２０を通じてのロード命令の移動中、かつ命令が実行ユニット３１０で再実行される前）を与えることができ、それによってプロセッサ・コア１１４の停止を防止することになる。
【００４２】
図４〜５に、本発明の一実施形態による遅延実行パイプラインで命令を実行するプロセス４００を示す。プロセス４００はステップ４０２から開始して、ステップ４０４に進むことができ、ステップ４０４では、発行されたグループで実行すべき命令が受領される。
【００４３】
ステップ４０６では、受領された命令がロード命令を含むかどうかについて判定を行うことができる。受領された命令がロード命令を含まない場合、ステップ４１２でロード命令をデフォルト発行グループ内に配置し、プロセッサ・コア１１４に対して発行し、実行することができる。しかし、受領された命令がロード命令を含む場合、ステップ４０８で、命令グループ内で最小遅延パイプラインに対してロード命令を発行することができるかどうかについて判定を行うことができる。例えば、最小遅延パイプラインが、別の命令で必要とされる機能を実行するプロセッサ・コア１１４内の唯一のパイプラインである場合（例えば、最小遅延パイプラインが分岐命令を実行することのできる唯一のパイプラインである場合）、遅延が大きい別のパイプラインに対してロード命令を発行することができる。さらに、ある場合には、ロード命令の実行は、他の実行された命令の結果に依存する可能性がある。例えば、ロード命令が対象とするデータのメモリ・アドレスは、別の命令で実行された計算に依存する可能性がある。ロード命令が同一の発行グループ内の別の命令に依存する場合、例えば実行における遅延が小さいパイプラインを使用して、ロード命令の前にその別の命令を実行することができる。任意選択で、ある場合には、単一の発行グループ内のそのような依存関係を回避するように、（例えば複数の発行グループにわたって命令を分離することによって）発行グループ内の命令をスケジューリングすることができる。
【００４４】
ロード命令を発行グループ内で最小遅延パイプラインに対して発行することができると判定された場合、ステップ４１０で、最小遅延パイプライン（例えばパイプラインＰ０）に対してロード命令を発行するようにスケジューリングすることができる。ステップ４２０では、プロセッサ・コア１１４に対して発行グループを発行することができ、ステップ４２２では、最小遅延パイプラインでロード命令を実行することができる。
【００４５】
ステップ４２４では、ロード命令に関するデータをＤキャッシュ２２４に要求することができ、Ｄキャッシュ・ディレクトリ２２５をチェックして、要求したデータを含むＤラインがＤキャッシュ２２５内に位置しているかどうかを判定することができる。ロード命令が最小遅延パイプラインで実行されるので、より遅延の大きいパイプライン（例えばパイプラインＰ１、Ｐ２、またはＰ３）でロード命令が実行される場合よりも早くキャッシュ・アクセスを開始することができる。
【００４６】
Ｄキャッシュ２２４が要求したデータを含むかどうかについてステップ４２６で判定を行うことができる。この判定は、例えばＤキャッシュ・ディレクトリ２２５で提供される情報に基づくことができる。Ｄキャッシュ２２４が要求したデータを含む場合、ステップ４２８で、要求したデータをＤキャッシュ２２４から受け取ることができ、ステップ４４２で、プロセス４００は命令の実行を続行することができる。
【００４７】
しかし、Ｄキャッシュ２２４が要求したデータを含まない場合、ステップ４３０で、ロード命令の後にプロセッサ・コア１１４に対して発行された命令（例えば、後続の発行グループ内の命令）を無効にすることができる。例えば、ロード命令の結果に依存する可能性のある後の命令の不適切な実行を防ぐために、その後で発行された命令の無効化を実施することができる。一実施形態では、命令の無効化は、プロセッサ・コア１１４でその後に発行される各命令（例えば、実行ユニット３１０または遅延キュー３２０内のその後で発行される命令）についてビットをセットすることによって実施することができる。ビットは、命令によって生成された結果が有効であることを示すことができる。ビットが、例えばライトバック回路２３８で検出されたとき、無効にされた命令によって生成された結果を廃棄することができる。任意選択で、命令を上書きすることによってプロセッサ・コアから命令を除去することができる。一実施形態では、命令（ロード命令を含む）が無効にされた後、キャッシュ・ミスを後でスケジューリングの際に使用するために記録することができ（以下でより詳細に説明する）、無効にされた命令をＩキャッシュ２２２に返すことができ、その結果、プロセッサ・コア１１４に対して命令を再発行することができる。
【００４８】
ステップ４３２では、要求されたデータを求めてＬ２キャッシュに対して要求を発行することができる。例えば、Ｌ２アクセス回路２１０を使用して要求を発行することができる。ある場合には、要求されたデータがＤキャッシュ２２４内にないことをＤキャッシュ・ディレクトリ２２５が示した後、要求を自動的に発行することができる。
【００４９】
ステップ４３４では、最大遅延パイプライン（例えばパイプラインＰ３）に対して発行されるロード命令を含む発行グループを形成することができる。ステップ４３６では、プロセッサ・コア１１４に対して発行グループを発行することができ、ステップ４３８では、遅延キュー（例えば遅延キュー３２０３）で遅延された後、遅延実行パイプラインＰ３でロード命令を実行することができる。上述のように、最大遅延パイプラインに対する命令を実行することにより、命令が実行される前にＬ２キャッシュ・アクセスを完了することができ（例えば、命令が遅延キュー３２０３を通じて移動中にＬ２キャッシュ・アクセスを続行することができる）、ロード命令に対するデータが、ロード命令を実行する「ちょうどその時に」到着することができる。
【００５０】
ステップ４４０では、ロード命令に対するデータをＤキャッシュ２２４に要求することができる。Ｌ２キャッシュ１１２が要求されたデータを含むと仮定して、ステップ４２８では、要求されたデータがＤキャッシュ２２４から受領され、ステップ４４２では、プロセッサ・コア１１４は、命令の実行を続行することができ、ステップ４５０では、プロセス４００は終了することができる。
【００５１】
ある場合には、アクセス要求がＬ２キャッシュ１１２に送られ、最大遅延パイプラインで実行するためにロード命令が再発行された後、Ｌ２キャッシュ１１２は要求されたデータを含まない可能性がある。Ｌ２キャッシュ１１２が要求されたデータを含まない場合、上位レベルのキャッシュ・メモリ（例えばＬ３またはＬ４キャッシュ）またはシステム・メモリ１０２あるいはその両方にアクセス要求が行われる間、プロセッサ・コア１１４は停止することができる。要求されたデータがＤキャッシュから受領されたとき、プロセッサ・コア１１４は、ロード命令と、その後で受領された任意のロード命令の実行を再開することができる。
【００５２】
ある場合には、最小遅延パイプライン（または望むなら、最大遅延パイプライン）は、ロード命令を望み通りに実行するために利用可能ではない可能性がある。一実施形態では、所望の量の遅延を有するパイプラインが利用可能でない場合、「次に良い」パイプラインの選択肢で実行するようにロード命令をスケジューリングすることができる。例えば、最小量の遅延を有するパイプラインＰ０が命令を実行するのに利用可能ではない場合、最小量の遅延を有する次に利用可能なパイプラインで（例えば、選好順に、パイプラインＰ１、Ｐ２、またはＰ３で）実行するように命令をスケジューリングすることができる。
【００５３】
上述のように、最小量の遅延を有するパイプラインでロード命令を実行することにより、ロード命令がキャッシュ・ミスとなった場合に、無効にする命令の数を削減することができる。さらに、キャッシュ・ミスとなったロード命令を、最大遅延パイプラインに対して再発行することにより、キャッシュ・メモリの上位レベルに対するキャッシュ・アクセスが完了するまでキャッシュ・アクセス命令の実行を延期することができる。以下で説明するように、予測および履歴情報を使用して、命令がキャッシュ・ミスを引き起こす可能性があることを予測する場合、命令のスケジューリングおよび実行における他の最適化も実施することができる。
【００５４】
Ｄキャッシュ・ミス予測を使用したロード命令のスケジューリング
ある場合には、キャッシュ・ミス予測および履歴情報を使用して、命令が実行されるようにスケジューリングされる（カスケード式遅延実行パイプライン・コア内の）パイプラインを変更することができる。例えば、一実施形態では、発行すべき１群の命令を受け取ることができる。グループ内の命令が、その命令の以前の実行中にキャッシュ・ミスとなった場合、遅延実行パイプライン・ユニット内の別のパイプラインに対して実行が遅延されるパイプラインで実行するように命令をスケジューリングすることができる。遅延パイプラインで実行するように命令をスケジューリングすることにより、（例えば、Ｄキャッシュ・ミスとなった場合にそれから生じる）上位レベル・キャッシュへのアクセスが実施される間、ロード命令の実行を延期することができる。
【００５５】
図６〜７に、本発明の一実施形態による、Ｄキャッシュ・ミス予測を使用してロード命令の実行をスケジューリングするプロセス５００を示す。プロセス５００はステップ５０２から開始して、ステップ５０４に進むことができ、ステップ５０４では、発行グループで実行すべき命令が受領される。ステップ５０６では、受領された命令がロード命令を含むかどうかについて判定を行うことができる。受領された命令がロード命令を含まない場合、ステップ５１４で、受領された命令をデフォルト発行グループ内に配置し、プロセッサ・コア１１４に対して発行し、実行することができる。
【００５６】
受領された命令がロード命令を含む場合、ステップ５０８で、ロード命令が以前にキャッシュ・ミスを引き起こしたかどうかについて判定を行う。一実施形態では、ロード命令が以前にＤキャッシュ・ミスを引き起こしたかどうかについて、Ｄキャッシュ・ミス情報（例えば、以前のＤキャッシュ・ミスの履歴を記録するビット）を使用して判定を行うことができる。以下で説明するように、命令自体、命令を有する命令ラインの一部、そのような情報を格納する特殊メモリ、またはその他の任意の場所、あるいはそれらの組合せにＤキャッシュ・ミス情報を格納および維持することができる。
【００５７】
受領されたロード命令が以前にＤキャッシュ・ミスを引き起こした場合、ステップ５１０で、最大遅延実行パイプラインで実行するようにロード命令をスケジューリングすることができるかどうかについて判定を行うことができる。上述のように、所与のパイプラインで命令を実行することができるかどうかについての判定は、パイプラインの処理能力、実行される命令の処理の必要性、および発行グループ内に配置される命令の命令間依存関係に依存する可能性がある。さらに、上述のように、ある場合には、最大遅延（または望むなら、最小遅延）パイプラインに対して命令を発行することを可能にするために、別々の発行グループ内の非互換命令を発行することにより、またはどの発行グループがどの命令を実行するかを修正することにより、発行グループを修正することができる。
【００５８】
遅延実行パイプラインで実行するようにロード命令をスケジューリングすることができる場合、ステップ５１２で、遅延実行パイプライン（例えばパイプラインＰ３）に対して発行されるようにスケジューリングされたロード命令を含む発行グループを形成することができる。任意選択で、可能なら、利用可能な最大量の遅延を提供する利用可能なパイプラインで実行するように命令をスケジューリングすることができる。
【００５９】
ステップ５２０では、ロード命令が対象とするデータを求めてＬ２キャッシュ１１２に対して要求を発行することができる。要求は、例えばＬ２キャッシュ・アクセス回路２１０を使用して発行することができる。以下で説明するように、ある場合には、ロード命令を実行する前にＬ２キャッシュ・アクセスを開始することができる。任意選択で、ある場合には、ロード命令の一部を実行することができ（例えば、ロード命令に関するロード有効アドレスを計算することができる）、次いで、ロード・データがＬ２キャッシュ１１２からフェッチされる間、ロード命令の実行を遅延させることができる。
【００６０】
ステップ５２２では、プロセッサ・コア１１４に対して発行グループを発行することができ、ステップ５２４では、最大遅延実行パイプラインでロード命令を実行することができる。ロード命令が実行されるとき、ステップ５２６で、ロード命令が対象とするデータを、Ｄキャッシュ２２４に要求することができる。ステップ５２０でＬ２キャッシュに対して発行された要求が成功した場合、ステップ５２８で、Ｄキャッシュ２２４に要求したデータを受け取ることができる。任意選択で、上述のように、Ｌ２キャッシュ１１２が要求したデータを含まない場合、要求したデータが上位レベルのキャッシュまたはメモリあるいはその両方からフェッチされる間、プロセッサ・コア１１４は停止することができる。しかし、ロード命令の実行が遅延されるので、停止の長さを削減することができる。要求したデータを受領した後、ステップ５３０で、命令を引き続き実行することができ、ステップ５５０で、プロセス５００は終了することができる。
【００６１】
上述のように、ロード命令が以前にキャッシュ・ミスを引き起こしたという判定を行ったとき、利用可能な最大遅延パイプラインに対してロード命令を発行することができ、ロード・データを求めてＬ２キャッシュ１１２に対して要求を発行することができる。ロード命令が（例えば遅延キュー３２０で）遅延される間、ロード命令でアクセスされる時間に間に合うようにロード・データがＤキャッシュ２２４に到着するようにＬ２アクセスを実施することができる。
【００６２】
Ｌ２キャッシュ・アクセスを実施するために、ロード命令の有効アドレスを初期に（例えば、ロード命令を、遅延キュー３２０にロード命令を配置することによって遅延する前に）決定することができる。したがって、一実施形態では、命令がプロセッサ・コア１１４に対して発行される前、または命令が実行される前に、Ｌ２アクセスを開始することができる。例えば、ロード命令がＬ２キャッシュ１１２から取り出されるとき、プリデコーダおよびスケジューラ２２０は、ロード命令が以前にＤキャッシュ・ミスとなったかどうかを判定し、そうである場合、Ｌ２キャッシュ・アクセスを開始することができる。命令が実行される前にＬ２アクセスが開始される場合、Ｌ２アクセスをプリフェッチと呼ぶことがある（対象のデータが命令の実行前にフェッチされるため）。
【００６３】
本発明の一実施形態では、プリデコーダおよびスケジューラ２２０がロード命令を復号化中に、ロード命令によって要求されるデータのターゲット・アドレスを決定することができる。例えば、ターゲット・アドレスを命令の一部として直接提供することができる。任意選択で、例えばプリデコーダおよびスケジューラ２２０またはＬ２キャッシュ・アクセスを開始するのに使用されるその他の回路にとって利用可能な情報を使用して、ターゲット・アドレスを事前解決可能である。別の実施形態では、ロード命令で要求されるデータのターゲット・アドレスを、命令の最初の実行中に計算することができる。次いで、計算したアドレスを格納し、その後でＬ２キャッシュ・アクセスを初期化する際に使用することができる。
【００６４】
一実施形態では、ターゲット・アドレスが格納される場合、要求されたデータのターゲット・アドレス全体を格納することができる。任意選択で、一実施形態では、ターゲット・アドレスが格納される場合、ターゲット・アドレスの一部のみを格納することができる（例えば、要求されたデータを含むＤラインを識別するのに十分なターゲット・アドレスのアドレス・ビット）。例えば、有効アドレスの上位３２ビットだけを使用して、ロード命令の要求されるデータを含むキャッシュされたＤラインを配置することができる場合、Ｄラインをプリフェッチするためにその３２ビットだけをターゲット・アドレスとして保存することができる。
【００６５】
本発明の一実施形態では、ロード命令をプロセッサ・コアに対して発行した後、かつロード命令が遅延キュー３２０内に配置され、または実行ユニット３１０によって完全に実行される前に、ロード・ターゲット・アドレスを計算することができる。例えば、図８に示すように、各パイプラインは、アドレス生成用ステージ（ＡＧＥＮ）６０２０、６０２３を使用することができる。非遅延パイプラインまたは遅延の小さいパイプラインでは、実行ユニット３１００の第１ステージとしてＡＧＥＮステージ６０２０を実行することができる。しかし、最も遅延の大きいパイプラインＰ３（または遅延の大きい他のパイプライン）では、命令が（例えば遅延キュー３２０３で）遅延される前、かつ命令が（例えば実行ユニット３１０３で）実行される前に、パイプラインの先頭でＡＧＥＮステージ６０２３を実行することができる。遅延されたパイプラインの先頭でアドレス生成を実行することにより、ロード命令が遅延キュー３２０で遅延される間に、ロード有効アドレスを迅速に決定することができ、Ｌ２キャッシュ・アクセスを開始および実行することができる。次いで、Ｌ２キャッシュ１１２からのデータが、実行ユニット３１０３でのロード命令の実行を完了するのに間に合うように到着することができる。
【００６６】
上述のように、一実施形態では、Ｄキャッシュ・ミス情報を使用して、ロード命令が以前にＤキャッシュ・ミスを引き起こしたかどうかを判定することができる。命令が以前にＤキャッシュ・ミスを引き起こしたことをＤキャッシュ・ミス情報が示す場合、上述の遅延パイプラインで実行するように命令をスケジューリングすることができる。
【００６７】
一実施形態では、Ｄキャッシュ・ミス情報は、ロード命令がＤキャッシュ・ミスとなったときにそのロード命令に対してセットされる単一ビット（ＭＩＳビット）を含むことができる。当初、命令が実行される前に、ＭＩＳビットをクリアすることができ、それによって命令が以前にＤキャッシュ・ミスを引き起こしていないことが示される。後に、命令が実行されたとき、命令がＤキャッシュ・ミスとなったかどうかについて判定を行うことができる。命令がＤキャッシュ・ミスとなった場合、ＭＩＳビットをセットすることができ、それによって命令が以前にＤキャッシュ・ミスを引き起こしたことが示される。その後でロード命令が実行のために（例えばＬ２キャッシュ１１２から）取り出されるとき、格納されたＭＩＳビットを、例えばプリデコーダおよびスケジューラ２２０を使用して検査することができる。ＭＩＳビットがセットされている場合、プリデコーダおよびスケジューラ２２０は、ロード命令が別のＤキャッシュ・ミスとなることを予測することができる。したがって、図６〜７に関して上記で説明したように、ロード命令のターゲット・アドレスを使用してＬ２キャッシュ・アクセスを開始することができ、利用可能な最大遅延パイプラインで実行するようにロード命令をスケジューリングすることができる。
【００６８】
ある場合には、ロード命令が後で実行され、Ｄキャッシュ・ミスとならない場合、ＭＩＳを０にクリアすることができ、その後でロード命令がＤキャッシュ・ミスとならない可能性があることが示される。任意選択で、ＭＩＳを（例えば、スティッキ・ビットとして）１にセットしたままにすることができ、それによってロード命令が以前にＤキャッシュ・ミスを引き起こしたことがあり、恐らくは別のＤキャッシュ・ミスとなる可能性があることが示される。
【００６９】
ある場合には、ＭＩＳビットがセットされ、要求されたデータがＤキャッシュから首尾よく取り出された場合、どのようにデータがＤキャッシュ内に配置されたかを求めることが有用であることがある。例えば、ある場合には、ＭＩＳビットが使用されてデータがプリフェッチされたのでＤキャッシュ・ミスを回避することができる。任意選択で、ある場合には、データをプリフェッチすることなくＤキャッシュ・ミスを回避することができる（例えば、データが既にＤキャッシュ内にある可能性があり、Ｌ２アクセスが不要である可能性がある）。一実施形態では、セットされたＭＩＳビットに基づくプリフェッチのために（例えばＤライン内の）データがＤキャッシュ２２４内に配置されるかどうかを示すようにビットを格納することができる。プロセッサ１１０でビットを使用して、Ｄキャッシュ・ミスを防ぐ際のプリフェッチの有効性を判定することができる。
【００７０】
任意選択で、プリデコーダおよびスケジューラ２２０（または任意選択でプリフェッチ回路）はまた、プリフェッチが不要であることを判定し、それに応じてＩライン内のＭＩＳビットを変更することができる。例えばプリフェッチされるデータが既にＤキャッシュ２２４内にあるためにプリフェッチが不要である場合、上述のようにＭＩＳビットをクリアすることができる。プリデコーダおよびスケジューラは、例えばＤキャッシュ・ディレクトリ２２５をチェックすることにより、またはフェッチされたデータまたはＤラインあるいはその両方のリストを維持することにより、要求されたデータがＤキャッシュ２２４内にあるかどうかを判定することができる。
【００７１】
本発明の一実施形態では、複数の履歴ビット（ＨＩＳ）を使用して、ロード命令がＤキャッシュ・ミスとなるかどうかを予測し、どのようにロード命令を実行のためにスケジューリングすべきかを判定することができる。例えば、ＨＩＳが２つの２進ビットである場合、００は、Ｄキャッシュ・ミスの予測なしに対応することができ、一方０１、１０、および１１は、それぞれＤキャッシュ・ミスの弱い予測、強い予測、および非常に強い予測に対応することができる。ロード命令がＤキャッシュ・ミスとなるごとに、ＨＩＳを増分して、Ｄキャッシュ・ミスに関する予測レベルを増大させることができる。ＨＩＳが１１であり、後続のＤキャッシュ・ミスが検出されたとき、ＨＩＳは１１のままとどまることができる（例えば、カウンタは００に戻るのではなく、１１で飽和することができる）。ロード命令がＤキャッシュ・ミスとならなかったごとに、ＨＩＳを減分することができる。ある場合には、複数の履歴ビットが使用される場合、複数の履歴ビットを使用して、どのデータ・アドレスを格納すべきかを判定し、かつどのようにロード命令をスケジューリングするかを判定することのどちらにも使用することができる。
【００７２】
上述のように、Ｄキャッシュ・ミス情報およびターゲット・アドレスを使用して、Ｌ２キャッシュ・アクセスを開始するかどうかを判定することができる。ある場合には、Ｄキャッシュ２２４またはＤキャッシュ・ディレクトリ２２５あるいはその両方をまずチェックして、ロード命令が対象とするデータが実際にＤキャッシュ内にあるかどうかを判定することなく、Ｌ２キャッシュ・アクセスを実施することができる。例えば、ある場合には、Ｄキャッシュ・ディレクトリ２５５に対して要求が開始される前にＬ２キャッシュ・アクセスを開始することができる。Ｌ２キャッシュ・アクセスが開始された後、（例えばＬ２キャッシュ・アクセス回路２１０を使用して）Ｄキャッシュ・ディレクトリ２２５に対して要求を発行することができる。Ｄキャッシュ２２４が要求されたデータを含まないとＤキャッシュ・ディレクトリが示す場合、Ｌ２アクセスを続行することができる。Ｌ２キャッシュ・アクセスがまず開始され、その後にＤキャッシュ・ディレクトリ２２５に対して要求が発行された場合、Ｄキャッシュ・ディレクトリ２２５に対する要求に関する結果を待つことなくＬ２アクセスが開始されたので、短い時間でＬ２アクセスを完了することができる。要求されたデータがＤキャッシュ２２４内に含まれることをＤキャッシュ・ディレクトリ２２５が示す場合、要求されたデータがＤキャッシュ２２４を介してアクセスされる間に、Ｌ２キャッシュ・アクセスの結果を廃棄することができる。
【００７３】
任意選択で、ある場合には、プリデコーダおよびスケジューラ２２０がＬ２キャッシュ１１２からＩラインまたはＤラインをプリフェッチすることを試みる前に、プリデコーダおよびスケジューラ２２０（または任意選択で他のプリフェッチ回路）は、要求されたデータを含むＤラインが既にＤキャッシュ２２４に含まれているかどうか、または要求されたＩラインまたはＤラインを求めるプリフェッチ要求が既に発行されているかどうかを判定することができる。例えば、最近フェッチまたはプリフェッチされたＩラインまたはＤライン・アドレスの履歴を含む小さいキャッシュまたはバッファを使用して、ＩラインまたはＤラインに対してプリフェッチ要求が既に発行されているかどうか、または要求されたＩラインまたはＤラインが既にＩキャッシュ２２２またはＤキャッシュ２２４内に存在するかどうかを判定することができる。
【００７４】
要求されたＩラインまたはＤラインが既にＩキャッシュ２２２またはＤキャッシュ２２４内に存在する場合、Ｌ２キャッシュ・プリフェッチは不要であり、したがって実行しなくてよい。上述のように、第２プリフェッチ要求が以前のプリフェッチ要求によって不要となった場合、格納されたＤキャッシュ・ミス情報を修正することができる。例えば、ロード命令のＬ２キャッシュ・プリフェッチおよび修正後スケジューリングが不要であることを示すようにＤキャッシュ・ミス情報を修正することができる。
【００７５】
命令ビット、Ｉライン・ビット、または特殊キャッシュ、あるいはそれらの組合せを用いることを含む様々な方式で、Ｄキャッシュ・ミス情報およびターゲット・アドレスを格納することができる。本発明の一実施形態では、Ｄキャッシュ・ミス情報およびターゲット・アドレス（必要な場合）をロード命令ごとに格納することができる。任意選択で、ある場合には、一部の命令（例えば、Ｄキャッシュ・ミスとなった命令、または同じＩライン内の他の命令よりも頻繁にＤキャッシュ・ミスとなるＩライン内の命令）についてのみＤキャッシュ・ミス情報またはターゲット・アドレスあるいはその両方を格納することができる。
【００７６】
一実施形態では、Ｄキャッシュ・ミス情報またはターゲット・アドレスあるいはその両方を、ロード命令を含むＩラインに格納することができる。図９は、本発明の一実施形態による、Ｉライン７０２内のロード命令に関するＤキャッシュ・ミス情報またはターゲット・アドレスあるいはその両方を格納するのに使用される例示的Ｉライン７０２を示すブロック図である。
【００７７】
図示するように、Ｉラインは、複数の命令（命令１、命令２など）、アドレスを格納するのに使用されるビット（例えば有効アドレスＥＡ）、および制御情報（ＣＴＬ）を格納するのに使用されるビットを含むことができる。本発明の一実施形態では、図９に示す制御ビットＣＴＬを使用して、ロード命令に関するＤキャッシュ・ミス情報（例えばＭＩＳビットまたはＨＩＳビットあるいはその両方）を格納するのに使用することができ、ＥＡビットを使用して、ロード命令で要求されるデータのターゲット・アドレスを格納することができる。
【００７８】
Ｉライン７０２内にＤキャッシュ・ミス情報を格納する一例として、Ｉライン７０２内の命令が実行されるときに、プロセッサ・コア１１４は、Ｉライン内のロード命令がＤキャッシュ・ミスを引き起こしたかどうかを判定することができる。Ｄキャッシュ・ミスを検出した場合、命令に関するターゲット・アドレス（またはその一部）をＥＡに格納することができ、他のミス情報（例えばＭＩＳまたはＨＩＳビット）をＣＴＬビットに格納することができる。ある場合には、Ｉライン７０２内のロード命令の位置をＣＴＬビットに格納することもできる。例えば、各Ｉラインが３２個の命令を含む場合、ＣＴＬビットに格納された（命令位置を識別するのに十分なビットを含む）５ビットの２進ビットを使用して、格納されたＤキャッシュ・ミス情報およびターゲット・アドレスに対応するロード命令を識別することができる。
【００７９】
本発明の一実施形態では、ターゲット・アドレスまたはＤキャッシュ・ミス情報またはその両方がＩラインに格納される場合、システム１００で使用されるキャッシュまたはメモリあるいはその両方の各レベルは、Ｉラインに含まれる情報のコピーを含むことができる。本発明の別の実施形態では、指定のレベルのキャッシュまたはメモリあるいはその両方だけが、命令またはＩラインあるいはその両方に含まれる情報を含むことができる。当業者には周知であるキャッシュ・コヒーレンシ原理を使用して、キャッシュまたはメモリあるいはその両方の各レベルのＩラインのコピー更新することができる。
【００８０】
命令キャッシュを使用する従来のシステムでは、一般に命令がプロセッサ１１０で修正されないことに留意されたい。したがって、従来のシステムでは、一般に、ある時間の後にＩラインがＬ２キャッシュ１１２に書き戻されるのではなく、Ｉキャッシュ２２２からエージアウトされる。しかし、本明細書で述べるように、ある実施形態では、修正後のＩラインまたは命令あるいはその両方をＬ２キャッシュ１１２に書き戻すことができ、それによってプリフェッチ・データを上位のキャッシュ・レベルまたはメモリ・レベルあるいはその両方で維持することが可能となる。
【００８１】
一例を挙げると、Ｉライン内の命令がプロセッサ・コアで処理されたとき（恐らくはターゲット・アドレスまたはＤキャッシュ・ミス情報あるいはその両方が更新される）、（例えばライトバック回路２３８を使用して）ＩラインをＩキャッシュ２２２に書き込むことができ、恐らくはＩキャッシュ２２２に格納されたＩラインの古いバージョンが上書きされる。一実施形態では、格納された情報に対して変更が行われたＩラインだけをＩキャッシュ２２２に配置することができる。任意選択で、一実施形態では、Ｉラインを常にＩキャッシュ２２２に書き戻すことができる。
【００８２】
本発明の一実施形態によれば、修正後ＩラインがＩキャッシュ２２２に書き戻されるとき、Ｉラインに変更済みと印を付けることができる。ＩラインがＩキャッシュ２２２に書き戻され、変更済みと印が付けられた場合、Ｉラインは、様々な時間にわたってＩキャッシュにとどまることができる。例えば、Ｉラインがプロセッサ・コア１１４で頻繁に使用されている場合、何回かＩラインをフェッチし、Ｉキャッシュ２２２に返すことができ、恐らくはその度にＩラインが更新される。しかし、Ｉラインが頻繁に使用されない場合（エージングと呼ばれる）、ＩラインをＩキャッシュ２２２からパージすることができる。ＩラインがＩキャッシュ２２２からパージされるとき、Ｉラインに変更済みと印を付けるかどうかについて判定を行うことができる。Ｉラインに変更済みと印を付ける場合、ＩラインをＬ２キャッシュ１１２に書き戻すことができる。任意選択で、Ｉラインを常にＬ２キャッシュ１１２に書き戻すことができる。一実施形態では、任意選択でＩラインをいくつかのキャッシュ・レベルに（例えば、Ｌ２キャッシュ１１２およびＩキャッシュ２２２に）すぐに書き戻すことができ、またはＩキャッシュ２２２以外のレベルに（例えば、直接的にＬ２キャッシュ１１２に）書き戻すことができる。
【００８３】
一実施形態では、ロード命令で要求されるデータのターゲット・アドレスを、図９に示すＩラインに直接格納する（付加する）ことができる。格納されるターゲット・アドレスＥＡは、有効アドレスまたは有効アドレスの一部（例えば有効アドレスの上位３２ビット）でよい。ターゲット・アドレスＥＡは、ロード命令で要求されるデータを識別することができ、または任意選択で、対象データのアドレスを含むＤラインを識別することができる。一実施形態によれば、Ｉラインは、Ｉライン内のロード命令にそれぞれ対応する複数のアドレスを格納することができる。
【００８４】
ある場合には、ＥＡビットまたはＣＴＬビットあるいはその両方を、Ｉライン内にその目的で割り振られたビットに格納することができる。本発明の一実施形態では、本明細書で述べる有効アドレス・ビットＥＡおよび制御ビットＣＴＬを、普通なら未使用のＩラインのビットに格納することができる。例えば、Ｌ２キャッシュ１１２内の各情報ラインは、異なるキャッシュ・レベル間で転送されるデータの誤り訂正のために使用することのできる余分なデータ・ビット（例えば、転送されたデータが壊れていないことを保証し、生じた破壊を修復するのに使用される誤り訂正コードＥＣＣ）を有することができる。ある場合には、各レベルのキャッシュ（例えばＬ２キャッシュ１１２およびＩキャッシュ２２２）は、各Ｉラインの同一のコピーを含むことができる。各レベルのキャッシュが所与のＩラインのコピーを含む場合、ＥＣＣを使用する代わりに、例えば、パリティ・ビットを使用して、Ｉラインがキャッシュ間で適切に転送されたかどうかを判定することができる。Ｉラインがキャッシュ間で不適切に転送されていることをパリティ・ビットが示す場合、誤りチェックを実施する代わりに、（転送元キャッシュはラインを含むので）転送元キャッシュからＩラインを再フェッチすることができる。
【００８５】
普通なら未使用のＩラインのビットにアドレスおよび制御情報を格納する一例として、格納された２ワードごとに誤り訂正用に１１ビットを使用する誤り訂正プロトコルを考慮する。Ｉラインでは、１１ビットのうちの１つを使用して、２命令ごとにパリティ・ビットを格納することができる（１ワード当たり１命令が格納される場合）。残りの１命令当たり５ビットを使用して、命令ごとの制御ビットまたはアドレス・ビットあるいはその両方を格納することができる。例えば、５ビットのうちの４ビットを使用して、命令に関するＤキャッシュ・ミス情報（ＭＩＳビットまたはＨＩＳビットあるいはその両方など）を格納することができる。Ｉラインが３２個の命令を含む場合、残りの３２ビット（命令ごとに１ビット）を使用して、例えばロード命令のターゲット・アドレスのすべてまたは一部を格納することができる。上述のように、ある場合には、ロード命令ごとのターゲット・アドレスを抽出し、Ｉラインに格納することができる。任意選択で、最も頻繁に実行されるロード命令に関するターゲット・アドレスを抽出し、Ｉラインに格納することができる。
【００８６】
本発明の一実施形態では、Ｉラインは複数のロード命令を含むことができ、Ｄキャッシュ・ミス情報をロード命令ごとに格納することができる。一実施形態では、複数のＤキャッシュ・ミス履歴を追跡することができるが、命令のうち最も頻繁に予測されるＤキャッシュ・ミスに対応する１つのターゲット・アドレスだけをＥＡに格納することができる。任意選択で、Ｄキャッシュ・ミスとなったロード命令ごとのターゲット・アドレスを単一のＩラインに格納することができる。以下で説明するように、（例えば、ロード命令で引き起こされるＤキャッシュ・ミスが予測可能ではなく、または予測に関するしきい値を超えているために）ロード命令に関する有効アドレスが格納されない場合、（例えば図４〜５に関して上記で説明したように）実行のために最小遅延パイプラインに対してロード命令を発行することができ、それによってロード命令のターゲット・アドレスが迅速に解決され、ロード命令がＤキャッシュ・ミスとなるかどうかが判定される。
【００８７】
ある場合には、命令が復号化され、または実行され、あるいはその両方が行われた後に、Ｄキャッシュ・ミス情報をロード命令に格納することができる（再符号化と呼ばれる）。図１０は、本発明の一実施形態による例示的再符号化ロード命令７０４を示すブロック図である。ロード命令７０４は、命令のタイプを識別するのに使用されるＯＰコード、１つまたは複数のレジスタ・オペランド（ＲＥＧ．１、ＲＥＧ．２）、またはデータ、あるいはそれらの組合せを含むことができる。図示するように、ロード命令７０４は、ＭＩＳビットまたはＨＩＳビットあるいはその両方を格納するのに使用されるビットも含むことができる。
【００８８】
ロード命令７０４が実行されるとき、ロード命令がＤキャッシュ・ミスとなるかどうかについて判定を行うことができる。判定の結果、ＭＩＳビットまたはＨＩＳビットあるいはその両方を上述のように修正することができる。次いで、ＭＩＳビットまたはＨＩＳビットあるいはその両方を命令７０４の一部として符号化することができ、それによって、命令がその後で復号化されたとき、例えばプリデコーダおよびスケジューラ２２０でＭＩＳビットまたはＨＩＳビットあるいはその両方を検査することができる。次いで、プリデコーダおよびスケジューラは、Ｌ２キャッシュ・アクセスを開始し、実行のためにロード命令７０４を適宜スケジューリングすることができる。上述のように、ある場合には、ロード命令７０４が再符号化されるとき、その命令を含むＩラインに変更済みと印を付け、Ｉキャッシュ２２２に書き戻すことができる。
【００８９】
一実施形態では、命令を再符号化するために命令７０４の他のビットを使用することもできる。例えば、命令７０４内のビットを使用して、ロード命令が独立か、解決可能か、またはその両方かを記録することができる。さらに、命令７０４内のビットを使用して、所与のパイプライン、例えば最大遅延パイプラインに命令を割り当てることができるかどうかを記録することができる。
【００９０】
一実施形態では、上述のように、命令が実行された後に命令７０４内のビットを再符号化することができる。ある場合には、命令が上位レベル・ソース・コードからコンパイルされるときに、命令内にＤキャッシュ・ミス情報を符号化することもできる。例えば、一実施形態では、ソース・コードをコンパイルするのに使用されるコンパイラを、Ｄキャッシュ・ミスとなる可能性のあるロード命令を認識し、それに応じてロード命令内のＭＩＳビットまたはＨＩＳビットあるいはその両方をセットするように設計することができる。
【００９１】
任意選択で、プログラムのソース・コードを作成した後、ソース・コードを複数の命令にコンパイルすることができ、次いでテスト実行中にそれらの命令を実行することができる。テスト実行およびテスト実行の結果を監視して、どのロード命令がＤキャッシュ・ミスとなったかを判定することができる。次いで、テスト実行に照らしてロード命令に関するＭＩＳビットまたはＨＩＳビットあるいはその両方が適切な値にセットされるようにソース・コードを再コンパイルすることができる。ある場合には、テスト実行をプロセッサ１１０上で実行することができる。ある場合には、プロセッサ１１０内の制御ビットまたは制御ピンを使用して、プロセッサ１１０をテスト実行用の特殊テストモードに設定することができる。任意選択で、テスト実行を実行し、結果を監視するように設計された特殊プロセッサを使用することができる。
【００９２】
本発明の一実施形態では、シャドー・キャッシュと呼ばれる特殊キャッシュにＤキャッシュ・ミス情報（ＭＩＳビットまたはＨＩＳビットあるいはその両方）を格納することができる。例えば、ロード命令がＤキャッシュ・ミスとなったとき、エントリをシャドー・キャッシュに設定することができる。ロード命令のアドレス（または任意選択で、ロード命令を含むＩラインのアドレス）を、シャドー・キャッシュへの索引として使用することができる。ロード命令のターゲット・アドレスを求めるのに使用される情報（例えば、事前復号化中またはロード命令の以前の実行中に計算された有効アドレス）をシャドー・キャッシュで維持することもできる。上述のように、ロード命令を含む発行グループがプロセッサ・コア１１４に対して発行されるとき（またはその他の任意の適切な時間）に、ターゲット・アドレス情報を使用してＬ２キャッシュ・アクセスを開始することができる。
【００９３】
一実施形態では、ロード命令を含むＩラインが（例えばプリデコーダおよびスケジューラ２２０によって）受領されたとき、フェッチされたＩラインに対応するエントリ（例えば、フェッチされたＩラインと同じ有効アドレスを有するエントリ）を求めてシャドー・キャッシュを探索することができる（例えば、シャドー・キャッシュは内容アドレス可能でよい）。対応するエントリが見つかった場合、必要なら、エントリに関連するＤキャッシュ・ミス履歴情報またはターゲット・アドレスあるいはその両方をプリデコーダおよびスケジューラ２２０またはその他の回路で使用して、ロード命令をスケジューリングし、Ｌ２キャッシュを開始することができる。
【００９４】
本発明の一実施形態では、シャドー・キャッシュは、上述の制御ビット（例えばＤキャッシュ・ミス情報）とターゲット・アドレスを共に格納することができる。任意選択で、他の情報がシャドー・キャッシュに格納される間に、Ｉラインまたは個々の命令あるいはその両方に制御ビットを格納することができる。どちらの場合でも、一実施形態では、どのエントリをＩラインに格納すべきかを決定することに関して上記で列挙した原理のいずれかに従ってシャドー・キャッシュ内のエントリを管理することができる。一例を挙げると、強く予測されるＤキャッシュ・ミスとなるロード命令のターゲット・アドレスをシャドー・キャッシュに格納することができ、一方、弱く予測されるＤキャッシュ・ミスに対応するシャドー・キャッシュに格納されたターゲット・アドレスを上書きすることができる。
【００９５】
どのエントリをシャドー・キャッシュに格納するかを決定するための上述の技法を使用することに加えて、一実施形態では、従来のキャッシュ管理技法を排他的に、または上述の技法を含めて使用して、シャドー・キャッシュを管理することができる。例えば、シャドー・キャッシュ内のエントリは、シャドー・キャッシュ内のエントリがアクセスされる頻度を示すエージ・ビットを有することができる。所与のエントリが頻繁にアクセスされる場合、エージ値は小さい（例えば、初期の）ままでよい。しかし、エントリへのアクセスがまれである場合、エージ値を増加することができ、ある場合にはエントリをシャドー・キャッシュから廃棄することができる。
【００９６】
本発明の一実施形態では、命令の実行中にターゲット・アドレスおよびＤキャッシュ・ミス情報を継続的に追跡および更新することができ、それによって、所与の１組の命令が実行されるときにＤキャッシュ・ミス情報および他の格納値が経時的に変化することができる。したがって、例えばプログラムが実行されるときに、ターゲット・アドレスおよびＤキャッシュ・ミス情報を動的に修正することができる。
【００９７】
本発明の別の実施形態では、１組の命令の初期実行段階中（例えば、プログラムが実行される初期「トレーニング」期間中）にターゲット・アドレスおよびＤキャッシュ・ミス情報を格納することができる。初期実行段階は、初期化段階またはトレーニング段階とも呼ばれることがある。トレーニング段階の間、Ｄキャッシュ・ミス情報を追跡することができ、上述の基準に従って１つまたは複数のターゲット・アドレスを（例えば、命令を含むＩラインまたはシャドー・キャッシュに）格納することができる。トレーニング段階が完了したとき、格納されたターゲット・アドレスおよびＤキャッシュ・ミス情報を引き続き使用して、データ・プリフェッチを実行し、ロード命令の実行をスケジューリングすることができる。
【００９８】
一実施形態では、（例えば、ロード命令を含むＩラインあるいは特殊なキャッシュまたはレジスタに格納された）１つまたは複数のビットを使用して、命令がトレーニング段階で実行中であるかどうか、またはプロセッサ１１０がトレーニング段階モードであるかどうかを示すことができる。例えば、トレーニング段階中はプロセッサ１１０内のモード・ビットをクリアすることができる。ビットがクリアされている間、上述のようにＤキャッシュ・ミス情報を追跡することができ、ターゲット・アドレスを更新することができる。トレーニング段階が完了したとき、ビットをセットすることができる。ビットがセットされると、ターゲット・アドレスはもはや更新されず、トレーニング段階を完了することができる。
【００９９】
一実施形態では、トレーニング段階は、指定の期間の間（例えば、いくつかのクロック・サイクルが経過するまで、または所与の命令が数回実行されるまで）継続することができる。一実施形態では、指定の期間が経過し、トレーニング段階を終了するとき、最も新しく格納されたターゲット・アドレスまたはＤキャッシュ・ミス情報あるいはその両方が格納されたままでよい。
【０１００】
本発明の別の実施形態では、トレーニング段階は、１つまたは複数の終了基準が満たされるまで継続することができる。例えば、Ｄキャッシュ・ミス履歴が格納される場合、初期実行段階は、Ｄキャッシュ・ミスが予測可能（または強く予測可能）となるまで継続することができる。ロード命令の結果が予測可能となったとき、初期トレーニング段階が完了したこと、および強く予測可能なロード命令に関するターゲット・アドレスを、命令がＬ２キャッシュ１１２からフェッチされるときに実行される後続のプリフェッチングおよびスケジューリングのために使用することができることを示すロック・ビットをＩラインでセットすることができる。
【０１０１】
本発明の別の実施形態では、ターゲット・アドレスおよびキャッシュ・ミス情報を周期的トレーニング段階で修正することができる。例えば、トレーニング段階ごとの頻度および持続時間値を格納することができる。頻度に対応する数のクロック・サイクルが経過するごとに、トレーニング段階を開始することができ、指定の持続時間値の間継続することができる。別の実施形態では、頻度に対応する数のクロック・サイクルが経過するごとに、トレーニング段階を開始することができ、指定のしきい値条件が満たされるまで（例えば、上述のように、命令に対する指定のレベルのＤキャッシュ・ミス予測可能性に達するまで）継続することができる。
【０１０２】
ある場合には、ＭＩＳビットまたはＨＩＳビットあるいはその両方は、最大遅延実行パイプラインに対して発行することのできるロードに対してのみセットすることができる。任意選択で、命令が独立または事前解決可能あるいはその両方であるかどうかを示す第２ビットを命令の中に再符号化し、ＭＩＳビットまたはＨＩＳビットあるいはその両方と共に使用して、命令の適切なスケジューリングを決定することができる。
【０１０３】
別の実施形態
本発明の一実施形態では、ＭＩＳビットまたはＨＩＳビットあるいはその両方がセットされる場合、ロード命令がＤキャッシュ・ミスとはならないことをＭＩＳビットまたはＨＩＳビットあるいはその両方が予測する場合、あるいはロード命令に対するターゲット・アドレスの計算または格納あるいはその両方を行っていない場合、あるいはそれらの組合せである場合、最小遅延パイプライン（例えばＰ０）で実行するようにロード命令をスケジューリングすることができ、その結果、命令の結果（例えば、命令がＤキャッシュ・ミスまたは命令のターゲット・アドレスあるいはその両方となるかどうか）を迅速に解決することができ、プロセッサ・コア１１４で生じる停止または命令無効化（それが存在する場合）を最小限に抑えることができる。あるいは、Ｄキャッシュ・ミスが予測され、かつ有効なターゲット・アドレスが利用可能である場合、上述のように、最大遅延パイプラインに対して命令を発行することができ、Ｌ２キャッシュ・アクセスを開始することができる。
【０１０４】
図１１〜１３に、本発明の一実施形態による、Ｄキャッシュ・ミス情報を使用してロード命令のスケジューリングを決定するプロセス８００を示す。図示するように、プロセス８００はステップ８０２から開始して、ステップ８０４に進むことができ、ステップ８０４では、発行されたグループで実行すべき命令が受領される。受領された命令がロード命令を含む場合、ステップ８０８で、ロード命令が以前にキャッシュ・ミスを引き起こしたかどうかについて判定を行うことができる。ロード命令が以前にキャッシュ・ミスを引き起こしたかどうかについての判定は、例えばＭＩＳビットをチェックすることによって行うことができる。ＭＩＳビットがセットされている場合、ロード命令が以前にキャッシュ・ミスを引き起こしたことを示している可能性がある。
【０１０５】
ロード命令が以前にキャッシュ・ミスとなった場合、ステップ８１０で、最大遅延実行パイプラインで実行するようにロード命令をスケジューリングすることができるかどうかについて判定を行うことができる。上述のように、最大遅延パイプラインがロード命令が必要とする機能を提供しない場合、最大遅延パイプラインに対して別の命令を発行する必要がある場合、命令に対するターゲット・アドレスが計算されていない場合、またはその他の何らかの理由で、最大遅延パイプラインでロード命令を実行できないことがある。任意選択で、最大遅延パイプラインに対して命令を発行することができない場合、最も遅延の大きい次に利用可能なパイプラインに対して命令を発行するように試みることができる。
【０１０６】
最大遅延パイプラインで実行するようにロード命令をスケジューリングすることができる場合、ステップ８３２で、最大遅延パイプラインに対して発行されるロード命令を含む発行グループを形成することができる。ステップ８３４では、ロード命令の対象とするデータを求めてＬ２キャッシュ１１２に対して要求を発行することができ、ステップ８３６では、発行グループを発行することができる。ステップ８３８では、最大遅延パイプライン（Ｐ３）でロード命令を実行することができる。次いで、ステップ８４０では、ロード命令が対象とするデータをＤキャッシュ２２４に要求することができる。
【０１０７】
ステップ８４２では、要求したデータがＬ２キャッシュ１１２から取り出され、Ｄキャッシュ２２４内に配置されたと仮定して、要求したデータをＤキャッシュ２２４から受領することができる。次いで、ステップ８４４では、プロセッサ・コア１１４が命令の実行を続行することができ、ステップ８５０でプロセス８００は終了することができる。
【０１０８】
ステップ８０８および８１０に戻ると、ロード命令が以前にＤキャッシュ・ミスとならなかった場合、または最大遅延パイプラインで実行するようにロード命令をスケジューリングすることができない場合、プロセス８００は、最小遅延パイプラインに対してロード命令をスケジューリングすることを試みて、ロード命令がＤキャッシュ・ミスとなるかどうかを判定し、またはロード命令のターゲット・アドレスを求め、あるいはその両方を行うことができる。したがって、ステップ８１２では、最小遅延実行パイプラインで実行するようにロード命令をスケジューリングすることができるかどうかについて判定を行うことができる。最小遅延パイプラインでロード命令を実行することができない場合、ステップ８１４で、受領された命令をデフォルト発行グループ内に配置し、それを発行し、実行することができる。
【０１０９】
最小遅延実行パイプラインで実行するようにロード命令をスケジューリングすることができる場合、ステップ８２０で、最小遅延パイプライン（Ｐ０）に対して発行されるロード命令を含む発行グループを形成することができ、ステップ８２２で、発行グループを発行することができる。
【０１１０】
ステップ８２４では、最小遅延パイプラインでロード命令を実行することができる。ステップ８２６では、ロード命令に関するデータをＤキャッシュ２２４に要求することができ、Ｄキャッシュ・ディレクトリ２２５をチェックして、要求したデータがＤキャッシュ２２４内にあるかどうかを判定することができる。次いで、ステップ８２８では、要求したデータがＤキャッシュ２２４内にあることをＤキャッシュ・ディレクトリ２２５が示すかどうかについて判定を行うことができる。要求したデータがＤキャッシュ２２４内にある場合、ステップ８４２で、要求したデータを受領することができ、ステップ８４４で、プロセス８００は命令の実行を続行することができる。
【０１１１】
しかし、Ｄキャッシュ２２４が要求したデータを含まない場合、ステップ８３０で、プロセッサ・コア１１４に対してその後で発行された命令を無効にすることができ、ステップ８３２で、（可能なら）最大遅延実行パイプラインに対して発行されるロード命令を含む発行グループを形成することができる。次いで、上述のように、要求したデータを求めてＬ２キャッシュ１１２に要求を送ることができる。任意選択で、要求したデータがＤキャッシュ２２４内にないことをＤキャッシュ・ディレクトリ２２５が示すとすぐに、ロード命令が対象とするデータを求めてＬ２キャッシュ１１２に要求を自動的に転送することができる。次いで、発行グループを発行し（ステップ８３６）、ロード命令を実行し（ステップ８３８）、Ｄキャッシュ２２４にデータを要求し（ステップ８４０）、Ｄキャッシュ２２４からデータを受領し（ステップ８４２）、命令の実行に進み（ステップ８４４）、ステップ８５０で終了することによって記述されるようにプロセス８００が続行することができる。
【０１１２】
したがって、上述のように、Ｄキャッシュ・ミスとなると予測されるロード命令を最大遅延実行パイプラインに対して発行することにより、ロード命令で要求されるデータが上位レベルのキャッシュまたはメモリあるいはその両方からフェッチされる間にロード命令の実行を遅延させることによってプロセッサ停止を防止または低減することができる。しかし、ロード命令が以前に実行されていない場合、Ｄキャッシュ・ミスを引き起こすことに関してロード命令が予測不能である場合、またはロード命令が対象とするデータを求めることができない場合、最小遅延実行パイプラインに対して命令を発行することができ、それによって、命令の結果を迅速に解決することが可能となり、プロセッサ・コア１１４の停止となることが最小限に抑えられる。
【０１１３】
ある場合には、セットされたＤキャッシュ・ミス・フラグを有するロード命令を、最小遅延パイプラインまたは遅延の小さいパイプラインで実行するようにスケジューリングすることができ、ロード命令の結果を別のパイプライン（例えば、実行が遅延されるパイプライン）に転送することができる。例えば、図１４は、Ｄキャッシュ・ミス情報を使用して、本発明の一実施形態による、ロード命令のスケジューリングを決定するプロセス９００を示す流れ図である。図示するように、プロセス９００は、実行すべきロード命令がメモリから受領されるステップ９０２から開始する。ステップ９０４では、ロード命令を実行することができ、ステップ９０６では、ロード命令がキャッシュ・ミスとなった場合、Ｄキャッシュ・ミスを示すフラグをセットすることができる。
【０１１４】
ステップ９０８では、後続の事前復号化中に、セットされたＤキャッシュ・ミス・フラグを検出することができ、可能な最小遅延実行パイプライン（例えばパイプラインＰ０）で実行するようにロード命令をスケジューリングすることができる。例えば、最小遅延パイプラインが利用可能ではない場合、プロセッサ・コア１１４内の他のパイプラインに対して遅延の小さいパイプライン（例えばパイプラインＰ１、Ｐ２など）で実行するようにロード命令をスケジューリングすることができる。ある場合には、（例えば、第１パイプラインで実行するようにスケジューリングされた他の命令の実行を可能にするために）命令の実行を停止することなくパイプラインに対してロード命令を発行することができる場合にのみ、（例えば、最小遅延パイプラインまたは遅延の小さいパイプラインに対する）そのようなスケジューリングを実施することができる。任意選択で、スケジューリングの結果が停止となった場合であっても、最小遅延実行パイプラインまたは遅延の小さい実行パイプラインで実行するようにロード命令をスケジューリングすることができる。
【０１１５】
ある場合には、確認カウントを記録することができる。以下でより詳細に説明するように、確認カウントを使用して、Ｄキャッシュ・ミス・フラグがＤキャッシュ・ミスとなる可能性のあるロード命令を正確に特定するかどうかを判定することができる。Ｄキャッシュ・ミスとなる可能性のあるロード命令をＤキャッシュ・ミス・フラグが正確に特定しない場合、ある場合には、スケジューリングの目的でフラグを無視することができ、またはロード命令がスケジューリングされる条件を修正することができる。
【０１１６】
したがって、ステップ９１０では、ロード命令の後続の実行中に、Ｌ２キャッシュ・アクセスを実施してロード・データを得ることができるが、Ｄキャッシュ・ディレクトリ２２５をチェックして、ロード・データが既にＤキャッシュ２２４内にあるかどうかをチェックすることができる。（Ｄキャッシュ・ディレクトリ２２５で示されるように）データがＤキャッシュ２２４内にある場合、ステップ９１２で、確認カウントを減少させることができ（カウントがゼロに達したときに停止する）、当該のデータが既にＤキャッシュ２２４に内にあり、Ｄキャッシュ・ミスが発生しなかったことが示される。あるいは、データがＤキャッシュ２２４内にない場合、カウントを増加させることができ（カウンタが飽和するまで）、Ｄキャッシュ・ミスが発生したことが示される。
【０１１７】
ステップ９１４では、ロード・データがＬ２キャッシュ１１２から受領されたとき、実行において遅延の大きいパイプライン（例えば、ロード命令を実行するパイプラインの遅延よりも大きい）にロード・データを転送することができる（転送されるロード・データを受け取るパイプラインで命令を実行するのにそのような転送が必要である場合）。ある場合には、パイプラインの遅延差の量がＬ２キャッシュ・アクセス待ち時間以上でよく、それによって、転送が実施される前に、ロード命令に関するＬ２キャッシュ・アクセスを終了することが可能となる。したがって、遅延が最も小さい実行パイプラインでロード命令を実行することにより、転送され、例えば実行における遅延が大きいパイプラインで実行される他の命令で使用されるのに間に合うようにロード・データを受領することができる。
【０１１８】
図１５は、本発明の一実施形態による、ロード・データを転送することのできるプロセッサ・コア１０１４を示すブロック図である。図示するように、プロセッサ・コアは、複数の遅延実行パイプライン（Ｐ０、Ｐ１、．．．Ｐ５）を含むことができる。ある場合には、ある実行ユニット３１０から他の実行ユニットに転送経路３１２を設けることができる。ある場合には、遅延の小さい実行パイプラインから遅延の大きいパイプラインに転送３１２０−２を設けることができ、そのような転送３１２０−２を使用して、ロード命令の結果を、その結果を使用する別の命令に転送することができる。ある場合には、ある実行ユニットから別の実行ユニットに転送３１２０−２を実施することができる。任意選択で、ある場合には、遅延ターゲット・キュー３３０から実行ユニット３１０に転送３１２０−２を実施することができる。
【０１１９】
上述のように、ある場合には、プロセッサ・コア１１４内の他のパイプラインに対して遅延の小さいいくつかのパイプラインの１つでロード命令を実行すべくスケジューリングすることができる。例えば、図１５に関して、パイプラインＰ０でロード命令をスケジューリングすることにより、パイプラインＰ０から遅延の大きいパイプライン（例えばパイプラインＰ３、Ｐ４、またはＰ５）のいくつかへの転送を実施することが可能となる。しかし、例えば、ロード命令を実行する前に別の命令を実行するために、当該別の命令がパイプラインＰ０で実行されるようにスケジューリングされる場合、コア１１４内の他のパイプラインに対して遅延の小さい別のパイプライン（例えばパイプラインＰ１またはＰ２）にロード命令を配置することができる。遅延の小さいパイプラインにロード命令を配置することにより、遅延のより大きいパイプラインの１つへの転送を実現することができる。例えば、パイプラインＰ１は、パイプラインＰ４またはＰ５への転送を実現することができ、パイプラインＰ２は、パイプラインＰ５への転送を実現することができる。ロード・データをそこから転送することができる複数の遅延の小さいパイプラインを設けることにより、Ｄキャッシュ・ミスとなる可能性のあるロード命令の実行のスケジューリングに関してより高い柔軟性を実現することができる。
【０１２０】
上述のように、確認カウントを使用して、例えばどのようにロード命令を実行するかを決定することができる。例えば、確認カウントが一定のしきい値よりも上である場合（例えば、確認カウントが２または３である場合）、ロード命令が発行中に停止するか否かに関わらず、上述のように、最小遅延パイプラインまたは遅延の小さいパイプラインに対してロード命令を発行することができる。例えば、ある場合には、プログラムは、各ロードが前のロード命令の結果を使用して後続のロードを実行する従属ロードの連鎖を実行することがある。そのような従属ロード連鎖は、プログラムが一連のポインタを使用してデータにアクセスする場合に生じることがある。従属ロード連鎖がプロセッサ１１０で実行するために受領された場合、従属ロード連鎖内の命令（例えば、従属ロード連鎖内の最初の命令）がキャッシュ・ミスとなった場合、第１命令でロードされるデータがフェッチされるまで、各命令を停止することができる。ある場合、そのような停止は、命令実行が停止され、命令が処理されていない間のプロセッサ１１０の消費電力を低くすることができるので有益である。
【０１２１】
確認カウントが上限しきい値と下限しきい値の間の別の範囲内にある場合（例えば、確認カウントが１である場合）、プリデコーダおよびスケジューラ回路２２０は、最小遅延実行パイプラインまたは遅延の小さい実行パイプラインに対してロード命令をスケジューリングすることを試みることができるが、停止することなく、最小遅延実行パイプラインまたは遅延の小さい実行パイプラインに対してロード命令をスケジューリングすることができない場合、プロセッサは、プロセッサ・パイプラインのうちの１つ（例えば、パイプラインＰ３、Ｐ４、またはそれ以上）に対してロード命令を発行し、遅延の小さいパイプラインのうちの１つでのロード命令の実行をやめることができる。
【０１２２】
さらに、確認カウントが所与のしきい値未満（例えば、確認カウントがゼロである場合のように下限しきい値未満）である場合、プリデコーダおよびスケジューラ２２０は、ロード命令がキャッシュ・ミスとならないことを予測することができ、実行のためにデフォルト発行グループ内にロード命令を配置することができる（例えば、ロード命令を普通にスケジューリングすることができる）。さらに、ある場合には、確認カウントがゼロに達した場合、ミス・フラグがいわゆる「スティッキ・ビット」である場合であっても、ロード命令に関するＤキャッシュ・ミス・フラグをクリアすることができる。
【０１２３】
ある場合には、プロセッサ１１０は、ロード連鎖を検出し、従属ロード連鎖を検出したことに応答して、Ｄキャッシュ・ミス情報の記憶を修正することができる。例えば、同一のデータ・ラインにアクセスすることを試みる複数のロード命令がそれぞれキャッシュ・ミスとなる場合、プロセッサはロード命令のグループ内の最初のロード命令だけにキャッシュ・ミスとして印を付けることで十分である。データ・ラインが最初のロード命令でロードされた後、即時実行のために後続のロード命令で同一のデータ・ラインを使用することができるからである。そのような判定は、キャッシュ・ミスとなる複数のロード命令を検出し、複数の検出したロード命令に関するロード・アドレスを比較し、検出したロード命令のうちのどれが同一のロード・アドレスを有するかを判定することを含むことができる。プロセッサ１１０は、どのロード命令が同一のロード・アドレスを有するかを判定したとき、どのロード命令が最も早く実行されたか（例えば第１ロード命令）を判定し、検出した合致するロード命令のグループ内の第１ロード命令についてのみＤキャッシュ・ミス・フラグをセットすることができる。
【０１２４】
一実施形態では、関連する予測レベルをそれぞれ有する複数のロード命令を発行グループが含む場合、命令ごとの予測レベルに従ってスケジューリングの選好を与えることができる。例えば、ロード命令がＤキャッシュ・ミスとなることが強く予測される場合、Ｄキャッシュ・ミスとなることが弱く予測される同一の発行グループ内の命令に優先して、最大遅延パイプラインで実行するように命令をスケジューリングすることができる。任意選択で、発行グループを２つの発行グループに分割することができ、最大遅延実行パイプラインに対して各命令を発行することが可能となる。
【０１２５】
ある場合には、遅延がＬ２キャッシュ・アクセスを完了するのに必要な時間以上となるように、最大遅延実行パイプライン内の遅延量を選択することができ、それによってＬ２キャッシュ・アクセス待ち時間が隠される。例えば、Ｌ１キャッシュが要求されたデータを含まないという判定が行われる時間から、要求されたＬ２キャッシュ１１２から利用可能であるという判定が行われる時間までＬ２キャッシュ・アクセス時間を測定することができる（データを上位レベルのキャッシュまたはメモリあるいはその両方からフェッチする必要がないと仮定する）。言い換えれば、要求されたデータがＤキャッシュ２２４内にないことをＬ１Ｄキャッシュ・ディレクトリ２２５が示した後にＬ２キャッシュ・アクセスを完了するのに７サイクルかかる場合、最大遅延パイプライン内の遅延量を７サイクルにセットすることができ、したがって、最大遅延パイプラインに対して命令を再発行し、遅延キュー３２０３内に保持し、要求されたデータがＬ２キャッシュ１１２から到着したときに実行することが可能となる。最大遅延実行パイプラインに対してそのような遅延を挿入することを、例えばステージ遅延を遅延キュー３２０に挿入することによって実施することができる。
【０１２６】
ある場合には、（例えば、Ｄキャッシュ・ミスとなることが予測されるロード命令について）Ｌ２キャッシュ・アクセスが開始される前に、Ｌ２キャッシュ・アクセス回路２１０は、Ｌ２キャッシュからＤラインをプリフェッチすることができ、Ｌ２キャッシュ・アクセス回路２１０は、まずＤキャッシュ・ディレクトリ２２５を使用して、ロード命令が対象とするデータを含むＤラインが既にＤキャッシュ内に位置しているかどうかを判定することができる。Ｄラインが既にＤキャッシュ内に位置していることをＬ１ディレクトリ２２５が示す場合、Ｌ２プリフェッチは不要であり、Ｌ２プリフェッチ回路は、Ｌ２キャッシュ１１２に対してプリフェッチ要求を発行しなくてよい。ＤラインがまだＤキャッシュ２２４内に位置していないことをＤキャッシュ・ディレクトリ２２５が示す場合、Ｌ２キャッシュ・アクセス回路２１０は、Ｌ２キャッシュ１１２に適切なＤラインを要求することができる。
【０１２７】
ある場合には、ＭＩＳビットがセットされており、命令がＤキャッシュ・ミスとなる可能性が高いとＭＩＳビットが予測する場合、予測の信頼性が低い可能性があり、例えば命令がＤキャッシュ・ミスとはならない可能性がある。そのような状況では、命令の反復実行がＤキャッシュ・ミスとならない場合、ＭＩＳビットを後でクリアすることができる。例えば、カウンタは、ロード命令がＤキャッシュ・ミスとならなかった以前の回数を記録することができる。命令がＤキャッシュ・ミスとなるごとに、カウンタを０にリセットすることができる。命令がＤキャッシュ・ミスとならなかったごとに、カウンタを増分することができる。カウンタが所与のしきい値に達したとき（例えば、４回連続のミスなし）、予測ビットＭＩＳをクリアすることができる。任意選択で、命令がミスとなったごとにカウンタをリセットする代わりに、カウンタを減分することができる。
【０１２８】
ＭＩＳ予測ビットをクリアする機構を提供することにより、プロセッサは、所与のロード命令を最大遅延実行パイプラインに対して不必要にスケジューリングすることを回避することができる。さらに、予測ビットがクリアされる場合、別のビットをセットして、命令がＤキャッシュ・ミスとなるかどうかが予測不能であることを示すことができる。上述のように、ロード命令の結果が予測不能である場合、最小遅延パイプラインに対してロード命令を発行して、ロード命令の結果を早期に解決することができ、それによって、結果として生じるプロセッサ停止が最小限に抑えられる。
【０１２９】
上記では、本発明の実施形態を対象としたが、本発明の基本的範囲から逸脱することなく本発明の別の実施形態を考案することができ、本発明の範囲は、特許請求の範囲で決定される。
【図面の簡単な説明】
【０１３０】
【図１】本発明の一実施形態によるシステムを示すブロック図である。
【図２】本発明の一実施形態によるコンピュータ・プロセッサを示すブロック図である。
【図３】本発明の一実施形態によるプロセッサのコアのうちの１つを示すブロック図である。
【図４】本発明の一実施形態による遅延実行パイプラインで命令を実行するプロセスを示す図である。
【図５】本発明の一実施形態による遅延実行パイプラインで命令を実行するプロセスを示す図である。
【図６】本発明の一実施形態による、Ｄキャッシュ・ミス予測を使用してロード命令の実行をスケジューリングするプロセスを示す図である。
【図７】本発明の一実施形態による、Ｄキャッシュ・ミス予測を使用してロード命令の実行をスケジューリングするプロセスを示す図である。
【図８】本発明の一実施形態による、早期アドレス生成ステージを有する例示的遅延実行プロセッサ・パイプラインを示すブロック図である。
【図９】本発明の一実施形態による、Ｉライン内のロード命令に関するＤキャッシュ・ミス情報またはターゲット・アドレスあるいはその両方を格納するのに使用される例示的Ｉラインを示すブロック図である。
【図１０】命令の一実施形態による例示的再符号化ロード命令を示すブロック図である。
【図１１】本発明の一実施形態による、Ｄキャッシュ・ミス情報を使用してロード命令のスケジューリングを求めるプロセスを示す図である。
【図１２】本発明の一実施形態による、Ｄキャッシュ・ミス情報を使用してロード命令のスケジューリングを求めるプロセスを示す図である。
【図１３】本発明の一実施形態による、Ｄキャッシュ・ミス情報を使用してロード命令のスケジューリングを求めるプロセスを示す図である。
【図１４】本発明の一実施形態による、Ｄキャッシュ・ミス情報を使用して、最小遅延実行パイプラインに対するロード命令のスケジューリングを決定するプロセスを示す流れ図である。
【図１５】本発明の一実施形態による、転送経路を有するカスケード式遅延実行パイプラインを示すブロック図である。
【符号の説明】
【０１３１】
１００  システム
１０２  システム・メモリ
１０４  グラフィックス処理装置
１０８  記憶装置
１１０  プロセッサ
１１２  Ｌ２キャッシュ
１１４  プロセッサ・コア
１１６  Ｌ１キャッシュ
１１２  Ｌ２キャッシュ
２１０  Ｌ２アクセス回路
２２０  プリデコーダおよびスケジューラ
２２２  Ｉキャッシュ
２２３  Ｉキャッシュ・ディレクトリ
２２４  Ｄキャッシュ
２２５  Ｄキャッシュ・ディレクトリ
２３２  Ｉライン・バッファ
２３４  発行およびディスパッチ回路
２３６  命令フェッチング回路
２３８  ライトバック回路
２４０  レジスタ・ファイル
２５０  キャッシュ・ロードおよびストア回路
３１０  実行ユニット
３２０  遅延キュー
３３０  ターゲット遅延キュー
６０２  アドレス生成用ステージ（ＡＧＥＮ）
７０２  Ｉライン
７０４  再符号化ロード命令
１０１４  プロセッサ・コア
【図１】
2007213578.tif 000003
【図２】
2007213578.tif 000004
【図３】
2007213578.tif 000005
【図４】
2007213578.tif 000006
【図５】
2007213578.tif 000007
【図６】
2007213578.tif 000008
【図７】
2007213578.tif 000009
【図８】
2007213578.tif 000010
【図９】
2007213578.tif 000011
【図１０】
2007213578.tif 000012
【図１１】
2007213578.tif 000013
【図１２】
2007213578.tif 000014
【図１３】
2007213578.tif 000015
【図１４】
2007213578.tif 000016
【図１５】
2007213578.tif 000017