(57)【特許請求の範囲】
【請求項１】
マルチプロセッサシステムにおいて推測的ロード動作を容易にする方法であって、
関連するＬ１キャッシュにＬ２キャッシュを介してデータ値をリターンさせて完了した推測的ロード動作のレコードを該Ｌ２キャッシュに維持することであって、
推測的ロード動作は、前のロード動作が完了する前に推測的に開始したロード動作であり、
各完了した推測的ロード動作に対して、該レコードは、該推測的ロード動作に関連するＬ１キャッシュを識別する情報を含む、ことと、
無効化イベントに応答して、
該Ｌ２キャッシュにおけるターゲットラインを無効化することと、
該レコードへの検索を実行することにより、該Ｌ２キャッシュにおけるターゲットラインの該無効化により影響を受け得る推測的ロード動作と関連する、影響を受けたＬ１キャッシュを識別することと、
該影響を受けた推測的ロード動作を再生するために該影響を受けたＬ１キャッシュに再生コマンドを送信することにより、該影響を受けた推測的ロード動作が、該Ｌ２キャッシュにおける該ターゲットラインの無効化の後に起こることと
を包含する、方法。
【請求項２】
前記レコードをＬ２キャッシュに維持することは、
前記Ｌ２キャッシュにおいてＬ１キャッシュからロードミス動作を受信することであって、該ロードミス動作は、該ロードミス動作と関連するＬ１キャッシュ位置に対して完了した推測的ロード動作が存在するかどうかを特定する情報を含む、ことと、
そのような推測的ロード動作が存在する場合、該Ｌ１キャッシュが該推測的ロード動作と関連することを示すように該レコードを更新することと
を包含する、請求項１に記載の方法。
【請求項３】
前記ロードミス動作は、該ロードミス動作と関連する前記Ｌ１キャッシュ位置を識別し、
前記レコードを更新することは、該レコードにおいて該Ｌ１キャッシュ位置を記録し、それにより、後の再生コマンドが該Ｌ１キャッシュ位置を含むことができることを包含する、請求項２に記載の方法。
【請求項４】
ロードミス動作が推測的でない場合、前記Ｌ１キャッシュにおける関連するエントリが、完了した推測的ロード動作と関連しないことを示すように前記レコードを更新することをさらに包含する、請求項３に記載の方法。
【請求項５】
再生コマンドがＬ２キャッシュラインに対する１つ以上のＬ１キャッシュに送信される場合、該Ｌ２キャッシュラインが完了した推測的ロード動作ともはや関連しないことを示すように前記レコードを更新することをさらに包含する、請求項１に記載の方法。
【請求項６】
前記Ｌ２キャッシュは、Ｌ１キャッシュにおけるラインに対するエントリを含むリバースディレクトリを含み、各エントリは、該Ｌ２キャッシュにおいて関連するエントリを識別する、請求項１に記載の方法。
【請求項７】
前記リバースディレクトリは、前記Ｌ１キャッシュの各々において各エントリと対応する固定エントリを含む、請求項６に記載の方法。
【請求項８】
前記リバースディレクトリにおける各エントリは、前記Ｌ２キャッシュにおける対応するエントリの位置を特定する情報を含む、請求項７に記載の方法。
【請求項９】
前記無効化イベントは、キャッシュコヒーレンシプロトコル動作を含む、請求項１に記載の方法。
【請求項１０】
前記無効化イベントは、前記Ｌ２キャッシュにおける前記ターゲットラインと関連する格納動作を含む、請求項１に記載の方法。
【請求項１１】
前記マルチプロセッサシステムは、ロードは前の格納を追い越すことができ、ロードは前のロードを追い越すことができず、格納は前のロードを追い越すことができず、かつ、格納は前の格納を追い越すことができない、トータルストアオーダリングメモリモデルを実装する、請求項１に記載の方法。
【請求項１２】
マルチプロセッサシステムにおいて推測的ロード動作を容易にする装置であって、
Ｌ２キャッシュと、
該Ｌ２キャッシュを介して、関連するＬ１キャッシュにデータ値をリターンさせて完了した推測的ロード動作を識別する情報を含む該Ｌ２キャッシュにおけるレコードであって、
推測的ロード動作は、前のロード動作が完了する前に推測的に開始したロード動作であり、
各完了した推測的ロード動作に対して、該レコードは、該推測的ロード動作と関連するＬ１キャッシュを識別する情報を含む、レコードと、
無効化イベントに応答して、該Ｌ２キャッシュにおいてターゲットラインを無効化するように構成される無効化メカニズムと、
再生メカニズムであって、該無効化イベントに応答して、
該レコードへの検索を実行することにより、該Ｌ２キャッシュにおける該ターゲットラインの該無効化により影響を受け得る推測的ロード動作と関連する、影響を受けたＬ１キャッシュを識別し、
該影響を受けた推測的ロード動作を再生するために該影響を受けたＬ１キャッシュに再生コマンドを送信することにより、該影響を受けた推測的ロード動作が、該Ｌ２キャッシュにおける該ターゲットラインの無効化の後に起こる
ように構成される、再生メカニズムと
を備える、装置。
【請求項１３】
Ｌ１キャッシュからロードミス動作を受信するように構成される前記レコードと関連する更新メカニズムであって、該ロードミス動作は、該ロードミス動作と関連するＬ１キャッシュ位置に対して完了した推測的ロード動作が存在するかどうかを特定する情報を含む、更新メカニズムをさらに備え、
そのような推測的ロード動作が存在する場合、該更新メカニズムは、該Ｌ１キャッシュが該推測的ロード動作と関連することを示すように該レコードを更新するように構成される、請求項１２に記載の装置。
【請求項１４】
前記ロードミス動作は、前記ロードミス動作と関連する前記Ｌ１キャッシュ位置を識別し、
前記更新メカニズムは、前記レコードにおいて該Ｌ１キャッシュ位置を記録するように構成され、それにより、後の再生コマンドが該Ｌ１キャッシュ位置を含むことができる、請求項１３に記載の装置。
【請求項１５】
ロードミス動作が推測的でない場合、前記更新メカニズムは、前記Ｌ１キャッシュにおける関連するエントリが、完了した推測的ロード動作と関連しないことを示すように前記レコードを更新するように構成される、請求項１４に記載の装置。
【請求項１６】
再生コマンドがＬ２キャッシュラインに対する１つ以上のＬ１キャッシュに送信される場合、前記更新メカニズムは、該Ｌ２キャッシュラインが完了した推測的ロード動作ともはや関連しないことを示すように前記レコードを更新するように構成される、請求項１３に記載の装置。
【請求項１７】
前記Ｌ２キャッシュに接続されるリバースディレクトリをさらに含み、該リバースディレクトリは、Ｌ１キャッシュにおけるラインに対するエントリを含み、各エントリは、該Ｌ２キャッシュにおける関連するエントリを識別する、請求項１２に記載の装置。
【請求項１８】
前記リバースディレクトリは、前記Ｌ１キャッシュの各々における各エントリに対応する固定エントリを含む、請求項１７に記載の装置。
【請求項１９】
前記リバースディレクトリにおける各エントリは、前記Ｌ２キャッシュにおける対応するエントリの位置を特定する情報を含む、請求項１８に記載の装置。
【請求項２０】
前記無効化イベントは、キャッシュコヒーレンシプロトコル動作を含む、請求項１２に記載の装置。
【請求項２１】
前記無効化イベントは、前記Ｌ２キャッシュにおける前記ターゲットラインと関連する格納動作を含む、請求項１２に記載の装置。
【請求項２２】
前記マルチプロセッサシステムは、ロードは前の格納を追い越すことができ、ロードは前のロードを追い越すことができず、格納は前のロードを追い越すことができず、格納が前の格納を追い越すことができない、トータルストアオーダリングメモリモデルを実装する、請求項１２に記載の装置。
【請求項２３】
推測的ロード動作を容易にするマルチプロセッサシステムであって、
複数のプロセッサと、
該複数のプロセッサと接続される複数のＬ１キャッシュと、
該複数のＬ１キャッシュと接続される１つのＬ２キャッシュと、
該Ｌ２キャッシュを介して関連するＬ１キャッシュにデータ値をリターンさせて完了した推測的ロード動作を識別する情報を含む該Ｌ２キャッシュにおけるレコードであって、
ここで、推測的ロード動作は、ロード動作が完了する前に推測的に開始したロード動作であり、
各完了した推測的ロード動作に対して、該レコードは、該推測的ロード動作と関連するＬ１キャッシュを識別する情報を含む、レコードと、
無効化イベントに応答して、該Ｌ２キャッシュにおけるターゲットラインを無効化するように構成される無効化メカニズムと、
再生メカニズムであって、該無効化イベントに応答して、
該レコードへの検索を実行することにより、該Ｌ２キャッシュにおける該ターゲットラインの該無効化によって影響を受け得る推測的ロード動作と関連する、影響を受けたＬ１キャッシュを識別し、
該影響を受けた推測的ロード動作を再生するために該影響を受けたＬ１キャッシュに再生コマンドを送信することにより、該影響を受けた推測的ロード動作が、該Ｌ２キャッシュにおける該ターゲットラインの無効化の後に起こる
ように構成される、再生メカニズムと
を備える、マルチプロセッサシステム。
【請求項２４】
Ｌ１キャッシュからロードミス動作を受信するように構成される前記レコードと関連する更新メカニズムであって、該ロードミス動作は、該ロードミス動作と関連するＬ１キャッシュ位置に対して完了した推測的ロード動作が存在するかどうかを特定する情報を含む、更新メカニズムをさらに備え、
そのような推測的ロード動作が存在する場合、該更新メカニズムは、該Ｌ１キャッシュが該推測的ロード動作と関連することを示すように該レコードを更新するように構成される、請求項２３に記載のマルチプロセッサシステム。
【請求項２５】
前記Ｌ２キャッシュと接続されるリバースディレクトリをさらに含み、該リバースディレクトリは、Ｌ１キャッシュにおけるラインに対するエントリを含み、各エントリは、該Ｌ２キャッシュにおける関連するエントリを識別する、請求項２３に記載のマルチプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（発明の分野）
本発明は、マルチプロセッサの設計に関する。より詳細には、本発明は、マルチプロセッサシステムにおける推測的なロード動作および／または推測的な格納動作を容易にする方法および装置に関する。
【背景技術】
【０００２】
（関連技術）
高速のコンピュータ性能を実現するために、コンピュータシステム設計者は、シングル計算タスクを実行するために並列に動作する多重プロセッサシステムを利用し始めた。１つの通常のマルチプロセッサ設計は、単一のレベル２（Ｌ２）キャッシュ１８０およびメモリ１８３を共用するレベル１（Ｌ１）キャッシュ１６１〜１６４に接続される複数のプロセッサ１５１〜１５４を含む（図１を参照されたい）。動作中、プロセッサ１５１がローカルＬ１キャッシュ１６１に存在しないデータアイテムにアクセスすると、システムは、Ｌ２キャッシュ１８０からのデータアイテムの取り出しを試みる。データアイテムがＬ２キャッシュ１８０に存在しない場合は、システムは、まず、メモリ１８３からＬ２キャッシュ１８０へ、続いて、Ｌ２キャッシュ１８０からＬ１キャッシュ１６１へデータアイテムを取り出す。
【０００３】
尚、同一のデータアイテムのコピーが１つより多いＬ１キャッシュに存在する場合、コヒーレンスの問題が生じ得る。この場合、Ｌ１キャッシュ１６１のデータアイテムの第１のバージョンに対する修正は、第１のバージョンを、Ｌ１キャッシュ１６２のデータアイテムの第２のバージョンと異なるようにし得る。
【０００４】
このようなコヒーレンスの問題を避けるために、コンピュータシステムは、多くの場合、バス１７０を介して動作するコヒーレンシプロトコルを提供する。コヒーレンシプロトコルは、通常、Ｌ１キャッシュ１６１においてデータアイテムの１つのコピーが修正される場合に、Ｌ１キャッシュ１６２〜１６４、Ｌ２キャッシュ１８０およびメモリ１８３の同一のデータアイテムの他のコピーが、修正を反映するように更新されるか、または、無効化されることを保証する。
【０００５】
コヒーレンスプロトコルは、通常、バス１７０を介して無効化メッセージをブロードキャストすることによって無効化を実行する。しかしながら、マルチプロセッサシステムが性能において増大するにつれて、そのような無効化はより頻繁に発生する。従って、このような無効化メッセージは、バス１７０を潜在的に妨害し得、それにより、システム全体の性能を低下させ得る。
【０００６】
この問題を改善するために、Ｌ２キャッシュ１８０内にディレクトリ情報を維持する可能性を探索し始めた設計者もいる。このディレクトリ情報は、どのＬ１キャッシュが特定のデータアイテムのコピーを含むのかを指定する。これにより、システムは、全Ｌ１キャッシュに対してブロードキャストメッセージを送信するのではなく、無効化情報を、そのデータアイテムを含むＬ１キャッシュのみに送信できるようになる。（このタイプのシステムは、Ｌ１キャッシュ１６１〜１６４との通信のために単一共用バス１７０を利用するＬ１に示される例とは異なり、Ｌ１キャッシュ１６１〜１６４の各々に対する無効化メッセージ用の別個の通信経路が存在することを仮定している。）
マルチプロセッサシステムが性能において増大し続けるにつれて、ロードおよび格納動作の順序を著しく制限するメモリモデルをサポートすることは、ますます困難になっている。１つの通常用いられるメモリモデルは、「トータルストアオーダ」（ＴＳＯ）メモリモデルである。ＴＳＯメモリモデルの下では、所与のプロセッサからのロードおよび格納は、通常、ロードが前の格納を追い越し得ることを除いて、プログラム順序で実行する。より詳細には、ＴＳＯメモリモデルの下では、ロードは前のロードを追い越し得ない。格納は、前の格納を追い越し得ない。および、格納は前のロードを追い越し得ない。これにより、システムが次のロードを実行する間に、前の格納が遅い態様で発生する。
【０００７】
不運なことに、ロードおよび格納の順序にこれらの制限を置くことは、マルチプロセッサシステムの性能を深刻に低下させる。なぜなら、マルチプロセッサシステムは、多くの場合、次のメモリ動作を実行する前に、前のメモリ動作が完了するのを待たなくてはならないからである。
【０００８】
より制限のないメモリモデルは、「リリースコンシステンシ」であり、この唯一の制限は、プロセッサが、臨界領域を終了するときはいつでも共用データの一貫した一覧を参照することである。このメモリモデルは、ＴＳＯよりも制限が少なく、より良好なマルチプロセッサ性能をもたらし得る。不運なことに、多くの既存の継承される適用は、ＴＳＯ等の限定的なメモリモデルを利用する。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
従って、これらの従来のアプリケーションを実行させるために必要とされるのは、ＴＳＯメモリモデルなどの限定的なメモリモデルの下における、プログラムの効果的な並列実行を容易にする方法および装置である。
【課題を解決するための手段】
【００１０】
（要旨）
本発明の一実施形態は、マルチプロセッサシステムにおける推測的ロード動作を容易にするシステムを提供する。システムは、マルチプロセッサシステムにおいて、プロセッサにおいて完了した推測的ロード動作のレコードを維持することによって、動作する。ここで、推測的ロード動作とは、前のロード動作が完了する前に推測的に開始するロード動作である。次に、システムは、プロセッサに接続されるＬ１キャッシュにおいて無効化信号を受信する。ここで、無効化信号は、Ｌ１キャッシュの特定のラインが無効化されるべきことを示す。この無効化信号に応答して、システムは、完了し、かつ、無効化信号が関するのと同一のＬ１キャッシュの位置に関する整合する推測的ロード動作が存在するかを判定するために、推測的ロード動作のレコードを検査する。もし整合する推測的ロード動作が存在する場合は、システムは、整合する推測的ロード動作を再生することにより、無効化信号を発生させたイベントが完了した後に整合する推測的ロード動作が発生する。
【００１１】
本発明の一実施形態では、推測的ロード動作のレコードは、複数のバンクを含み、ここで、各バンクは、Ｌ２キャッシュの特定のバンクを示す推測的ロード動作を含む。
【００１２】
本発明の一実施形態では、推測的ロード動作のレコードは、推測的ロード動作の結果を含むＬ１キャッシュに、エントリのセットおよびウェイ情報を維持する。
【００１３】
本発明の一実施形態では、無効化信号は、キャッシュコヒーレンシプロトコル動作の結果として受信される。
【００１４】
本発明の一実施形態では、無効化信号は、Ｌ１キャッシュの特定のラインと関連する格納動作の結果として受信される。
【００１５】
本発明の一実施形態では、無効化信号は、Ｌ２キャッシュの対応するラインの無効化の結果として受信される。
【００１６】
本発明の一実施形態では、推測的ロード動作のレコードは、各推測的ロード動作のインディケータを含む。このインディケータは、推測的ロード動作が完了したかどうかを特定する。
【００１７】
本発明の一実施形態では、推測的ロード動作のレコードの維持するステップは、新しい推測的ロード動作が完了するときはいつでもレコードを更新するステップを含む。
【００１８】
本発明の一実施形態では、システムは、Ｌ２キャッシュからプロセッサにおいて再生信号を受信し、ここで、再生信号は、特定のセットおよびウェイ位置を識別する。この再生信号に応答して、システムは、完了し、かつ、特定のセットおよびウェイ位置を示す任意の推測的ロード動作を再生する。尚、システムは、対応する無効化を実行することなく、この再生を実行する。
【００１９】
本発明の一実施形態では、マルチプロセッサシステムは、トータルストアオーダリング（ＴＳＯ）メモリモデルを実装する。このモデルでは、ロードは前の格納を追い越すことができるが、前のロードを追い越すことができず、格納は、前のロードを追い越すことができず、前の格納を追い越すことができない。
【００２０】
本発明の別の実施形態では、マルチプロセッサシステムにおける推測的ロード動作を容易にするシステムを提供する。このシステムは、関連するＬ１キャッシュにＬ２キャッシュを介してデータ値をリターンさせて完了した推測的ロード動作のレコードをＬ２キャッシュに維持することによって動作する。ここで、推測的ロード動作は、前のロード動作が完了する前に推測的に開始するロード動作である。無効化イベントの受信に応答して、システムは、Ｌ２キャッシュにおけるターゲットラインを無効化する。システムはまた、レコードにおいて検索を実行して、Ｌ２キャッシュにおけるターゲットラインの無効化により影響を受け得る推測的ロード動作と関連する影響を受けたＬ１キャッシュを識別する。次に、システムは、影響を受けた推測的ロード動作を再生するために、影響を受けたＬ１キャッシュに再生コマンドを送信することにより、影響を受けた推測的ロード動作が、Ｌ２キャッシュにおけるターゲットラインの無効化の後に発生する。
【００２１】
本発明の一実施形態において、レコードを維持するステップは、Ｌ２キャッシュにおいてＬ１キャッシュからロードミス動作を受信するステップを含む。ここで、ロードミス動作は、ロードミス動作と関連するＬ１キャッシュ位置に対して、完了した推測的ロード動作が存在するかどうかを特定する情報を含む。そのような推測的ロード動作が存在する場合、システムは、Ｌ１キャッシュが推測的ロード動作と関連することを示すように、レコードを更新する。
【００２２】
この実施形態におけるバリエーションとしては、ロードミス動作は、ロードミス動作と関連するＬ１キャッシュ位置を識別し、レコードを更新するステップは、レコードにＬ１キャッシュ位置を記録し、それにより、次の再生コマンドがＬ１キャッシュ位置を含むステップを含む。ロードミス動作が推測的でない場合は、システムは、完了した推測的ロード動作と関連しないＬ１キャッシュの関連するエントリを示すために、レコードを更新する。
【００２３】
本発明の一実施形態では、再生コマンドは、あるＬ２キャッシュラインに対応する複数のＬ１キャッシュへ送信される。システムは、Ｌ２キャッシュが完了した推測的ロード動作ともはや関連しないことを示すように、レコードを更新する。
【００２４】
本発明の一実施形態では、Ｌ２キャッシュは、Ｌ１キャッシュにおけるラインに対するエントリを含むリバースディレクトリを含む。ここで、各エントリは、Ｌ２キャッシュにおける関連するエントリを識別する。この実施形態のバリエーションとしては、リバースディレクトリは、Ｌ１キャッシュの各々の各エントリと対応する固定エントリを含む。この実施形態のバリエーションとして、リバースディレクトリの各エントリは、Ｌ２キャッシュにおける対応するエントリの位置を特定する情報を含む。
【００２５】
本発明の一実施形態は、マルチプロセッサシステムにおいて推測的格納動作を容易にするシステムを提供する。このシステムは、マルチプロセッサシステムにおけるＬ２キャッシュに、処理中の推測的格納動作のレコードを維持することによって動作する。ここで、推測的格納動作は、前の格納動作が完了する前に推測的に実行される格納動作である。Ｌ１キャッシュからＬ２キャッシュにおいてロード動作を受信すると、システムは、ロード動作が関するのと同一の位置に関する整合する推測的格納動作が存在するかどうかを判定する推測的格納動作のレコードを検査する。もし存在すれば、システムは、整合する推測的格納動作が完了した後にロード動作が発生することを保証する。
【００２６】
本発明の一実施形態では、整合する推測的格納動作が完了した後にロード動作が発生することを保証するステップは、リトライ動作をプロセッサに送信して、プロセッサに後でロード動作をリトライさせるステップを含む。
【００２７】
本発明の一実施形態では、整合する推測的格納動作が終了した後にロード動作が発生することを保証するステップは、Ｌ２キャッシュにおけるロード動作を完了させる前に整合する推測的格納動作の完了を待つステップを含む。
【００２８】
本発明の一実施形態では、Ｌ２キャッシュにおいて整合する格納動作が完了すると、Ｌ２キャッシュは、ロード動作が発生し得るようにし、整合する推測的格納動作により無効化されるラインを含む他のＬ１キャッシュに、無効化信号を送信する。
【００２９】
本発明の一実施形態において、Ｌ２キャッシュにおいてプロセッサから推測的格納動作を受信すると、システムは、レコードに推測的格納動作を格納する。
【００３０】
本発明の一実施形態において、Ｌ２キャッシュにおける格納動作が完了すると、システムは、格納動作を開始させたソースプロセッサに確認を送信する。確認に応答して、ソースプロセッサから移動信号を受信すると、システムは、所与の格納動作がもはや推測的ではないことを示すように、レコードを更新する。
【００３１】
この実施形態のバリエーションとして、ソースプロセッサにおいて確認を受信すると、ソースプロセッサは、Ｌ２キャッシュに移動信号を送信する前に、全ての前の格納動作が完了するまで待つ。
【００３２】
この実施形態のバリエーションとして、Ｌ２キャッシュにおいて格納動作が完了すると、システムは、格納動作によって上書きされるキャッシュラインを含むＬ１キャッシュに、無効化信号を送信する。
【００３３】
本発明の一実施形態では、Ｌ２キャッシュに接続される各プロセッサに対して、推測的格納動作のレコードは、推測的格納動作を含む格納キューを含む。
【００３４】
本発明の一実施形態において、Ｌ２キャッシュは、複数のバンクを含み、各Ｌ２バンクに対して、推測的格納動作のレコードは、Ｌ２キャッシュに接続される各プロセッサに対する格納キューを含む。
【００３５】
本発明の一実施形態において、システムは、ターゲットキャッシュラインに対する所与の格納動作を実行するために、ターゲットキャッシュラインに対する所有するための読み出し（ｒｅａｄ−ｔｏ−ｏｗｎ）リクエストを受信する。所有するための読み出しリクエストを受信すると、システムは、ターゲットキャッシュラインに関する整合する推測的格納動作が存在するかどうかを判定するために、推測的格納動作のレコードを検査する。もし存在すれば、システムは、ターゲットキャッシュラインをリクエストするプロセッサにライトオンリー状態で送ることにより、リクエストするプロセッサは、書き込み動作（読み込み動作ではない）をターゲットキャッシュラインに対して実行することができ、それにより、デッドロック条件を回避する。
【発明を実施するための最良の形態】
【００３６】
（詳細な説明）
以下の説明は、任意の当業者が本発明を実施および利用できるように示されており、特定の用途および要件の意味で提供される。開示される実施形態に対する様々な改変は、当業者には容易に理解し得、本明細書中で定義される一般原理は、本発明の意図および範囲を逸脱することなく他の実施形態および用途に適用し得る。従って、本発明は、示される実施形態に制限されることが意図されるのではなく、本明細書中に開示される原理および特徴と一貫する最大範囲に一致するべきである。
（マルチプロセッサシステム）
図１Ｂは、本発明の実施形態に従った、リバースディレクトリを有するマルチプロセッサシステム１００を示す。尚、マルチプロセッサシステム１００のほとんどは、単一の半導体チップ１０１内に配置される。より詳細には、半導体チップ１０１は、複数のプロセッサ１１０、１２０、１３０および１４０を含み、複数のプロセッサ１１０、１２０、１３０および１４０は、それぞれレベル１（Ｌ１）キャッシュ１１２、１２２、１３２および１４２を含む。尚、Ｌ１キャッシュ１１２、１２２、１３２および１４２は、別個の命令およびデータキャッシュであってもよく、もしくは、一体化された命令／データキャッシュであってもよい。Ｌ１キャッシュ１１２、１２２、１３２および１４２は、レベル２（Ｌ２）キャッシュ１０６に接続され、Ｌ２キャッシュ１０６は、以下の図３〜６を参照してより詳細に記載される、リバースディレクトリ３０２を含む。Ｌ２キャッシュ１０６は、メモリコントローラ１０４によってオフチップメモリ１０２に接続される。
【００３７】
本発明の１つの実施形態では、Ｌ１キャッシュ１１２、１２２、１３２および１４２は、ライトスルーキャッシュであり、つまり、Ｌ１キャッシュ１１２、１２２、１３２および１４２に対する全ての更新は、自動的にＬ２キャッシュ１０６に伝達される。これは、コヒーレンスプロトコルを単純化する。なぜなら、プロセッサ１１０がＬ１キャッシュ１１２に存在するデータアイテムをリクエストする場合に、プロセッサ１１０は、Ｌ１キャッシュ１１２がデータをソースするのを待つ必要なく、Ｌ２キャッシュ１０６からデータを受信し得るからである。
【００３８】
（多重バンクを有するＬ２キャッシュ）
図２は、本発明の実施形態に従った、多重バンクを有するＬ２キャッシュ１０６を示す。この実施形態では、Ｌ２キャッシュ１０６は、４つのバンク２０２〜２０５によって実装される。４つのバンク２０２〜２０５は、スイッチ２２０を介してプロセッサ１１０、１２０、１３０および１４０に並列にアクセスされ得る。尚、アドレスの２ビットのみが、４つのバンク２０２〜２０５のどれがメモリリクエストに関するかを判定するために必要とされる。さらにスイッチ２２０は、Ｉ／Ｏデバイスと通信するＩ／Ｏポート１５０を含む。尚、これらのバンク２０２〜２０５の各々は、リバースディレクトリを含む。さらに、バンク２０２〜２０５の各々は、専用のメモリコントローラ２１２〜２１５を含み、専用のメモリコントローラ２１２〜２１５は、オフチップメモリ２３２〜２３５の関連するバンクに接続される。
【００３９】
尚、このアーキテクチャによって、各Ｌ１キャッシュをＬ２キャッシュの専用のバンクに同時に接続することが可能であり、このことは、Ｌ２キャッシュ１０６に対する帯域幅を増加させる。
【００４０】
（リバースディレクトリ）
図３は、本発明の実施形態に従った、関連するリバースディレクトリ３０２に沿ったＬ２バンク２０２を示す。Ｌ２バンク２０２は、命令およびデータを格納する８ウェイセットアソシアティブキャッシュ３０４を含む。アドレスの一部分が、キャッシュ３０４内の１つのセットを判定するために利用される。キャッシュ３０４は、キャッシュ３０４の行で表現される。所与のセット内で、８つの異なるエントリが、８つの異なる「ウェイ位置」の各々に格納され得、８つの異なる「ウェイ位置」の各々は、キャッシュ３０４の８つの列で表現される。
【００４１】
リバースディレクトリ３０２は、各Ｌ１キャッシュに対して別個のブロックを含む。より詳細には、ブロック３１２は、Ｌ１キャッシュ１１２に関連し、ブロック３２２は、Ｌ１キャッシュ１２２に関連し、ブロック３２２は、Ｌ１キャッシュ１３２に関連し、かつ、ブロック３４２は、Ｌ１キャッシュ１４２に関連する。
【００４２】
尚、これらのブロック３１２、３２２、３３２および３４２の各々は、関連するＬ１キャッシュ１１２、１２２、１３２および１４２の各ラインに対するエントリを含む。さらに、Ｌ１キャッシュ１１２は、４つのウェイセットアソシアティブキャッシュとして組織化され、リバースディレクトリ３０２内の関連するブロック３１２も、同一の態様で組織化される。尚、しかし、Ｌ１キャッシュ１１２内のエントリは、データおよび命令を含み、ここで、関連するブロック３１２内のエントリは、キャッシュ３０４内のラインの位置を特定するインデックス情報を含む。
【００４３】
（リバースディレクトリエントリ）
図４は、本発明の実施形態に沿ってリバースディレクトリエントリ４３０がどのように生成されるかを示す。
【００４４】
図４の上部分は、メモリ１０２内のデータアイテム（または命令）のアドレス４００を示す。Ｌ１キャッシュ１１２は、このアドレスをＬ１タグ４１２、Ｌ１セットナンバー４１４およびＬ１ラインオフセット４１８に分割する。Ｌ１セットナンバー４１４は、４つのウェイセットアソシアティブＬ１キャッシュ１１２の特定のセットを検索するために利用される。Ｌ１タグ４１２は、Ｌ１キャッシュに格納され、各セットに対する４つのウェイセットアソシアティブメモリを実装する目的で、比較を実行するために利用される。Ｌ１ラインオフセット４１８は、Ｌ１キャッシュ１１２のライン内の特定のデータアイテムの位置を判定する。
【００４５】
Ｌ２キャッシュ１０６は、アドレス４００をＬ２タグ４０２、Ｌ２セットナンバー４０４、Ｌ２バンクナンバー４０６およびＬ２ラインオフセット４０８に分割される。Ｌ２バンクナンバー４０６は、Ｌ２キャッシュ１０６の４つのバンク２０２〜２０５から特定のバンクを決定する。Ｌ２セットナンバー４０４は、Ｌ２キャッシュ１０６の８ウェイセットアソシアティブバンクの特定のセットを検索するために利用される。Ｌ２タグ４０２は、Ｌ２キャッシュ１０６の特定のバンクに格納され、各セットに対する８つのウェイセットアソシアティブメモリを実装する目的で、比較を実行するために利用される。Ｌ２ラインオフセット４０８は、Ｌ２キャッシュ１０６のライン内の特定のデータアイテムの位置を判定する。
【００４６】
リバースディレクトリ３０２内のアドレス４００に対する関連するエントリ４３０は、切り捨てられるＬ２セットナンバー４２４、Ｌ２ウェイナンバー４２９および有効ビット４２７を含む。切り捨てられるＬ２セットナンバー４２４は、Ｌ１キャッシュ１１２内のエントリの位置から判定され得ないＬ２セットナンバー４０４の一部を含む。言い換えると、切り捨てられるＬ２セットナンバー４２４は、Ｌ２セットナンバー４０４の一部を含み、Ｌ１セットナンバー４１４と重複しない。Ｌ２ウェイナンバー４２９は、キャッシュ３０４において、８つの可能なウェイ位置からラインの列位置を特定する３ビットインデックスを含む。最終的には、有効ビット４２７は、エントリ４３０が有効かどうかを示す。
【００４７】
尚、Ｌ２キャッシュ１０６内の各ラインに対するＬ１キャッシュ位置を格納するのではなく、示される実施形態は、各Ｌ１キャッシュ位置に対するエントリを含み、これらのエントリの各々は、Ｌ１位置と関連するＬ２キャッシュ位置を特定する。
【００４８】
従って、「リバースディレクトリ」としてディレクトリ３０２を捉えることができる。なぜなら、各Ｌ２エントリからＬ１エントリへのポインタを維持するのではなく、各Ｌ１エントリから対応するＬ２エントリへのリバース方向に、ポインタを維持するからである。これは、通常、Ｌ２エントリよりも少ない多くのＬ１エントリが存在するので、メモリを節約する。
【００４９】
（リバースディレクトリエントリを生成するプロセス）
図５は、本発明の実施形態に従った、リバースディレクトリエントリを生成または更新するプロセスを示すフローチャートである。このプロセスは、ラインを取り出すリクエストが、Ｌ１キャッシュ１１２からＬ２キャッシュ１０６で受信される（ステップ５０２）際に、開始する。このリクエストは、アドレス４００、Ｌ１キャッシュ１１２を識別するＬ１キャッシュナンバー、ラインが取り出された後に格納されるＬ１キャッシュ１１２のウェイ位置を含む。
【００５０】
次に、リクエストがＬ２キャッシュ１０６においてミスを生成した場合、システムは、メモリ１０２からＬ２キャッシュ１０６へラインを取り出す（ステップ５０４）。この取り出しが発生し、Ｌ２キャッシュ１０６の既存のエントリが無効化されると、リバースディレクトリ３０２の対応するエントリは無効化される必要があり得る。
【００５１】
システムは、その後、Ｌ２キャッシュ１０６からラインを取り出し、Ｌ１キャッシュ１１２にラインを送信する（ステップ５０６）。
【００５２】
システムはまた、リバースディレクトリ３０２に対するエントリ４３０を構築する（ステップ５０８）。このエントリは、図４を参照して上述されたように、切り捨てられるＬ２セットナンバー４２４、Ｌ２ウェイナンバー４２９および有効ビット４２７を含む。
【００５３】
システムは、その後、リバースディレクトリ３０２のある位置へエントリを格納する（ステップ５１０）。位置は、アイテムのナンバーによって決定される。Ｌ２バンクナンバー４０６から、システムは、Ｌ２バンク２０２を調べることを知る。Ｌ１キャッシュナンバーから、システムは、Ｌ１キャッシュ１１２に関連するブロック３１２を調べることを知る。アドレス４００から、システムは、特定のＬ１セットと関連する行を決定する。リクエストとともに受信したＬ１ウェイ位置から、システムは、行内の列を決定する。
【００５４】
（リバースディレクトリエントリを利用するプロセス）
図６は、本発明の実施形態に従った、無効化を実行するためのリバースディレクトリエントリを用いるプロセスを示すフローチャートである。システムは、Ｌ２キャッシュ１０６を更新させるリクエストを受信することによって開始する。このリクエストは、別のプロセッサによるターゲットエントリ上の格納ヒット、ロードミス、または、格納ミスを含み得る。
【００５５】
次に、システムは、リバースディレクトリ３０２においてリクエストに対するエントリを復元する。これは、ターゲットエントリが置かれるＬ２ウェイナンバー４２９を決定するためにＬ２キャッシュ１０６における検索を実行し（ステップ６０４）、図４に示されるようにアドレス４００からＬ２セットナンバー４０４を取り出す（ステップ６０６）ことによって達成される。これらの値は、リバースディレクトリエントリ４３０を構築するように結合される。
【００５６】
次に、システムはこのエントリを用いて、どのＬ１キャッシュがエントリを含むかを判断するためにリバースディレクトリ３０２を検索する（ステップ６０８）。尚、システムは、Ｌ２バンクナンバー４０６により特定されるＬ２キャッシュ１０６のバンクと関連するリバースディレクトリを検索するだけでよい。また、尚、リクエストが別のプロセッサによる格納ヒットである場合は、システムは、格納ヒットを発生させるプロセッサのためのバンクを検索する必要はない。
【００５７】
エントリを含む各Ｌ１キャッシュに対して、システムは、無効化メッセージをＬ１キャッシュに送信する。この無効化メッセージは、Ｌ１ウェイナンバーを含み、それにより、Ｌ１キャッシュのアソシアティブ検索が回避され得る。システムはまた、エントリが無効化されたことを示すように、対応するリバースディレクトリエントリを更新する（ステップ６１０）。
【００５８】
（無効化に応答した推測的ロードの再生）
図７は、本発明の実施形態に従った、無効化信号に応答する推測的ロード動作の再生を示す。図７は、左から右へ進行するタイムラインを含む。命令の発行は、タイムラインの上に示す矢印により表わされ、対応する命令の完了は、タイムラインの下に示す矢印により表わされる。
【００５９】
図７の左手側からはじめると、格納Ａ動作および格納Ｂ動作は、第２のプロセッサから発行される。次に、第１のプロセッサは、ロードＡ動作を発行し、続いて、ロードＡ動作が完了する前に、推測的にロードＢ動作を発行する。
【００６０】
ロードＢ動作は、続いて、ロードＡ動作が完了する前に完了する。これは、ＴＳＯメモリモデルに対して問題となり得る。なぜなら、ロードＢ動作が、ロードＡ動作を追い越して、ＴＳＯメモリモデルを妨害するからである。しかし、ロードＢ動作が完了する時とロードＡ動作が完了する時との間に、メモリ動作が生じない場合に、ロードＢ動作が終了したという事実は、明らかではない。
【００６１】
しかし、図７に示されるように、第２のプロセッサからの格納Ａ動作および格納Ｂ動作は、両方とも、ロードＢ動作が完了する時とロードＡ動作が完了する時との間隔に完了する。従って、ロードＢ動作は、Ｂの古い値をリターンさせ、ロードＡ動作は、Ａの新しい値をリターンさせる。結果的に、前のロードＡ動作が第２のプロセッサに対して明らかになる前に、ロードＢ動作が終了したという事実は、メモリモデルの妨害を意味する。
【００６２】
この問題を改善するために、本発明の１つの実施形態は、第１のプロセッサにロードＢ動作を再生させ、それにより、ロードＢ動作は、図７に示されるように格納Ｂ動作が完了した後に発生する。
【００６３】
図８は、本発明の実施形態に従った、推測的ロード動作を再生する際に関係する様々な構造を示す。図８に示されるように、プロセッサ１５１は、命令窓口８０２に関連し、命令窓口８０２は、まだ完了していない「実行中（ｉｎ−ｆｌｉｇｈｔ）」命令のリストを含む。尚、命令窓口８０２は、多くのロードおよび格納動作をプログラム順序で含む。
【００６４】
プロセッサ１５１は、Ｌ２キャッシュ１０６と通信するローカルＬ１キャッシュ１６１とも関連する。尚、単一のＬ２バンク２０２のみが図８に示されるが、Ｌ１キャッシュ１６１も、図８に示されない他のＬ２バンク２０３〜２０５と通信する。
【００６５】
Ｌ１キャッシュ１６１は、スプリットロードバッファ８０４と関連する。スプリットロードバッファ８０４は、プロセッサ１５１が完了した推測的ロードの追跡を続ける。これにより、システムは、任意の完了した推測的ロード動作が、同一の位置に対する格納動作のために再生される必要があるかどうかを、判断できる。
【００６６】
尚、スプリットロードバッファ８０４は、４つのキュー（すなわち、マルチプロセッサシステム１００の各Ｌ２バンクに対して１つ）に分割される。また、尚、キューの１つにおける所与のエントリ８０８は、Ｌ１セット８０９およびＬ１ウェイ８１０のみを含む。これは、Ｌ１キャッシュ１６１の特定のセットおよびウェイに対する無効化が、完了した推測的ロード動作の再生を必要とするかどうかを判定するために要求される唯一の情報である。
【００６７】
エントリは、推測的ロード動作がプロセッサ１５１により開始させられる毎に、スプリットロードバッファ８０４に付加される。エントリは、エントリがもはや推測でなくなった後、つまり、全ての前のロードが完了した後はいつでも、スプリットロードバッファ１０８から回収され得る。本発明の一実施形態では、エントリは、関連する命令が命令窓口８０２から回収されると同時に、スプリットロードバッファ８０４から回収される。
【００６８】
本発明の一実施形態では、完了していない推測的ロード動作を含む全ての推測的ロードは、スプリットロードバッファ８０４に格納される。この実施形態では、関連する推測的動作が完了したかしていないかを示す付加的なビットが、各エントリに含まれる。
【００６９】
尚、本発明は、図８に示される厳密なスプリットロードバッファ実装に制限されることは意図されない。一般に、完了した推測的ロード動作の追跡を続ける任意の構造が利用され得る。
【００７０】
多くの構造がまた、Ｌ２バンク２０２の側に配置される。図３を参照して上述したリバースディレクトリに付加して、Ｌ２バンク２０２も、推測的ロードディレクトリ８１２に関連する。推測的ロードディレクトリ８１２は、Ｌ１キャッシュの撤退によりリバースディレクトリ３０２が関連するＬ２キャッシュ位置をポイントしなくても、再生が必要とされ得る完了した推測的ロード動作を含むＬ１キャッシュ位置の追跡を続けることを除き、リバースディレクトリ３０２と同様に構築される。尚、Ｌ２キャッシュ１０６のラインに対する格納動作の間、リバースディレクトリ３０２は、どのＬ１キャッシュに無効化信号を送信すべきかを判定するために利用される。言い換えると、推測的ロードディレクトリ８１２は、完了した推測的ロード動作と関連する撤退したＬ１キャッシュエントリのためのＬ２キャッシュラインの追跡を続ける。
【００７１】
尚、エントリがＬ１キャッシュから撤退した場合に、リバースディレクトリ３０２における対応するエントリが、取り除かれる。しかし、システムはまだ、関連するＬ２キャッシュラインが無効される場合に、完了した推測的ロード動作を再生するためには、完了した推測的ロード動作と関連するＬ１キャッシュエントリの追跡を続ける必要がある。
【００７２】
このため、推測的ロードディレクトリ８１２は、再生メッセージが、完了した推測的ロード動作を含む特定のプロセッサに送信される必要があるかどうかを判定するために、システムに利用される。推測的ロードディレクトリ８１２の構造は、本質的には、リバースディレクトリ３０２の構造を写す。従って、推測的ロードディレクトリ８１２のエントリ８１７は、切り捨てられるＬ２セットナンバー８１８ならびにＬ２ウェイナンバー８２０および有効ビット８２２を含む。しかし、エントリ８１７は、リバースディレクトリ３０２のエントリと異なる。なぜなら、Ｌ２セットナンバー８１８およびＬ２ウェイナンバー８２０は、０および１の値に加えて、「ｄｏｎ’ｔ  ｃａｒｅ」の値を含むからである。ｄｏｎ’ｔ  ｃａｒｅ値（しばしば、「Ｘ」で示される）が示すのは、ビットが０値または１値のどちらかを含み得ることである。これらのｄｏｎ’ｔ  ｃａｒｅ値は、推測的ロードディレクトリにより、推測的ロードディレクトリは、特定のＬ１キャッシュ位置に対する完了した推測的ロード動作と関連する全ての可能なＬ２エントリの追跡を続けることができる。
【００７３】
リバースディレクトリ３０２および推測的ロードディレクトリ８１２におけるエントリは、同一の状態で開始する。しかし、Ｌ１無効化により、推測的Ｌ１キャッシュ位置が異なるＬ２キャッシュラインを指すので、推測的ロードディレクトリ２１８の対応するＬ１キャッシュエントリは、ｄｏｎ’ｔ  ｃａｒｅ値を満たし始める。尚、新しいｄｏｎ’ｔ
ｃａｒｅ値は、Ｌ２セットナンバー８１８およびＬ２ウェイナンバー８２０が、どのビット位置が変化したかを判定するために、既存のビットと新しいビットとを排他的ＯＲをとることによって、徐々に計算され得る。また、尚、少なくとも１つのビットは、Ｌ２セットナンバー８１８およびＬ２ウェイナンバー８２０の各ビットに対して、３つの可能な値（０，１，Ｘ）を表わすことが要求される。
【００７４】
ロード動作中に、推測的ロードディレクトリ８１２は、アドレス８１１およびＬ１ウェイナンバー８１６を含む、Ｌ１キャッシュ１６１からの多くの信号を受信する。信号はまた、推測的ビット８１４を含み、ロード動作が、完了した推測的ロード動作とも関連するＬ１キャッシュ位置に向けられているかどうかを示す。
【００７５】
Ｌ１キャッシュからの格納動作の間、対応するＬ２キャッシュラインは更新され、無効化信号は、Ｌ２キャッシュラインを含む全ての他のＬ１キャッシュに送信される。これは、Ｌ２キャッシュラインを含む全てのＬ１キャッシュ位置を検索するために、リバースディレクトリ３０２において検索を実行することによって実現される。同様の検索が、撤退したＬ１キャッシュラインを識別するために、推測的ロードディレクトリ８１２において実行されるが、それにもかかわらず、Ｌ２キャッシュラインへの格納の影響を受ける完了した推測的ロード動作と関連する。このような撤退したＬ１キャッシュラインが識別される際に、再生信号がＬ１キャッシュに送信される。これは、Ｌ１セットおよびウェイ情報８２４に付加して、Ｌ１キャッシュに付加的な「再生オンリー」ビット８２６を送信することによって達成される。この再生オンリービット８２６は、Ｌ１キャッシュラインが再生動作に付加して無効化される必要があるのか、または、Ｌ１キャッシュラインが既に撤退しているので、再生動作のみが要求されるのかを特定する。
【００７６】
尚、本発明は、図８に示される厳密な推測的ロードディレクトリ実装に制限されない。一般に、Ｌ２キャッシュラインの無効化の影響を受ける完了した推測的ロード動作と関連するＬ１キャッシュ位置の追跡を続ける任意の構造が、本発明とともに利用され得る。
【００７７】
図９Ａは、本発明の実施形態に従った、無効化イベントに応答した推測的ロード動作の再生を示すフローチャートである。推測的ロード動作のレコードが完了したプロセッサにおいて維持される（ステップ９０２）ことによって、システムは動作する。図８に示される実施形態では、このレコードは、スプリットロードバッファ８０４の形式である。次に、システムは、Ｌ２バンク２０２からＬ１キャッシュ１６１で無効化信号８２３を受信する（ステップ９０４）。システムは、Ｌ１キャッシュ１６１における特定のエントリを無効化するために、無効化信号８２３からセットおよびウェイ情報８２４を利用する（ステップ９０５）。システムはまた、同一のＬ１キャッシュエントリに対して、完了した整合する推測的ロード動作が存在するかどうかを判定するために、レコードを検査する（ステップ９０６）。もし存在すれば、システムは、整合する推測的ロード動作を再生する（ステップ９０８）。
【００７８】
（再生コマンドに応答する推測的ロードの再生）
図９Ｂは、本発明の実施形態に従った、明示的な再生コマンドに応答する推測的ロード動作の再生を示すフローチャートである。Ｌ１キャッシュ１６１において再生オンリー信号８２６を受信する（ステップ９１０）と、システムは、同一のＬ１キャッシュエントリに対して、完了した整合する推測的ロード動作が存在するかどうかを判定するために、レコードを検査する（ステップ９１１）。もし存在すれば、システムは、整合する推測的ロード動作を再生する（ステップ９１２）。
【００７９】
（Ｌ２キャッシュにおける推測的ロードディレクトリ）
図１０Ａは、本発明の実施形態に従った、Ｌ２バンク２０２における推測的ロードディレクトリの動作を示すフローチャートである。システムは、Ｌ２バンク２０２に、特定のＬ２キャッシュラインと関連する完了した推測的ロード動作のレコードを、維持することによって動作する（ステップ１００２）。図８に示される本発明の実施形態では、レコードは、推測的ロードディレクトリ８１２の形式である。
【００８０】
次に、ターゲットＬ２キャッシュラインに対する更新等の、ターゲットＬ２キャッシュラインに対する無効化イベントに応答して、システムは、多くの動作を実行する。（１）システムは、ターゲットＬ２キャッシュラインを無効化する。（２）システムは、Ｌ２キャッシュラインの無効化の影響を受ける完了した推測的ロード動作と関連するＬ１キャッシュラインを識別するために、推測的ロードディレクトリ８１２に検索を実行する。尚、ｄｏｎ’ｔ  ｃａｒｅ値により、実際に存在するよりも多くの整合が示される。（３）次に、システムは、再生コマンド（または無効化信号）を潜在的に影響されるＬ１キャッシュに送信して、影響される推測的ロード動作が再生される（ステップ１００４）。
【００８１】
図１０Ｂは、本発明の実施形態に従った、Ｌ２バンク２０２における推測的ロードディレクトリ８１２の更新を示すフローチャートである。Ｌ１キャッシュからＬ２バンク２０２でロードミスを受信する（ステップ１００６）ことにより、システムは動作する。次に、システムは、ロードミスが推測的であるかどうかを判定するために、推測的ビット８１４を検査する。つまり、ロードミスは、推測的ロード動作が完了したＬ１キャッシュエントリと関連する（ステップ１００８）。もし推測的であれば、システムは、推測的ロードディレクトリを更新して、付加的な推測的ロード動作を埋め合わせる（ステップ１０１０）。ロードミスが、リバースディレクトリ３０２におけるＬ１キャッシュエントリに新しいＬ２キャッシュラインをポイントさせる場合、推測的ロードディレクトリ８１２における対応するエントリが、ｄｏｎ’ｔ  ｃａｒｅビットで更新され、その結果、古いＬ２キャッシュラインおよび新しいＬ２キャッシュラインの両方をカバーする。
【００８２】
ロードミスが推測的でない場合、システムは、関連するＬ１キャッシュエントリが完了した推測的ロード動作と関連しないことを示すために、レコードを更新する（ステップ１０１２）。これは、推測的ロードディレクトリ８１２におけるエントリをリバースディレクトリ３０２内の対応するエントリと同一にするために、ｄｏｎ’ｔ  ｃａｒｅビットの全てをクリアすることによって達成される。ロードミスが推測的であるとマークされていないという事実は、全ての前のロード動作がＬ１キャッシュ位置に対して完了したことを示す。つまり、Ｌ１キャッシュ位置と関連する推測的ロード動作は、もはや推測的ではない。
【００８３】
（推測的格納に対応する推測的ロードの再生）
図１１は、本発明による完了した推測的格納動作によって発生する推測的ロード動作の再生を示す。図１１は、左から右に進むタイムラインを示す。命令の発行は、タイムラインの上に示す矢印により表わされ、対応する命令の完了は、タイムラインの下に示す矢印により表わされる。
【００８４】
図１１に示される例では、第１のプロセッサは、ロードＡ動作を発行し、続いて、前のロードＡ動作が完了する前に推測的にロードＢ動作を発行する。次に、第２のプロセッサは、格納Ａ動作を発行し、続いて、前の格納Ａ動作が完了する前に推測的に格納Ｂ動作を発行する。格納Ｂ動作は、格納Ａ動作が完了する前に、連続して完了する。
【００８５】
これは、ＴＳＯメモリモデルに対して問題となり得る。なぜなら、格納Ｂ動作は、格納Ａ動作を追い越し、ＴＳＯメモリモデルを妨害するからである。しかし、格納Ｂ動作が完了する時と格納Ａ動作が完了する時との間にメモリ動作が発生しない場合、格納Ｂが第１に終了したという事実は、違いがない。
【００８６】
しかし、図１１に示されるように、第１のプロセッサからのロードＡ動作は、第１のプロセッサに対して格納Ｂが完了する時と格納Ａが完了する時との間の間隔に完了する。従って、ロードＡ動作は、Ａの古い値をリターンさせ、ロードＢ動作は、Ｂの新しい値をリターンさせる。結果的に、前の格納ロードＡ動作の前に格納Ｂ動作が終了したという事実は明白であり、つまり、ＴＳＯメモリモデルが妨害される。
【００８７】
この問題を改善するために、本発明の１つの実施形態では、ロードＡ動作の完了が、格納Ａ動作が完了する後まで遅らされる。これは、キャッシュミスが発生したかのようにロードＡ動作を扱い、かつ、ラインがキャッシュミスを満たす時として格納Ａ動作の完了を取り扱うことによって、達成され得る。このように、格納Ａ動作の完了は、ロードＡ動作を完了させる。
【００８８】
本発明の別の実施形態では、Ｌ２キャッシュは、ロードＡ動作を開始させたＬ１キャッシュにリトライ信号を送信する。このことは、格納Ａ動作が完了した後、Ｌ１キャッシュに後でロードＡ動作をリトライさせる。
【００８９】
尚、格納動作は、再生され得ない。なぜなら、格納動作がメモリに格納されるデータ値を破壊するからである。従って、本発明が、介在するロード命令を遅らせるまたは再生させることによって、この問題を回避することにより、格納命令の順序に従わない（ｏｕｔ
ｏｆ  ｏｒｄｅｒ）完了は明白ではない。
【００９０】
（推測的格納動作）
図１２は、本発明の実施形態に従った、推測的格納動作に関連する様々な構造を示す。図１２に示されるように、プロセッサ１５１は、Ｌ１キャッシュ１６１を含み、格納バッファ１２０２に関連する。
【００９１】
格納バッファ１２０２は、保留の格納動作の追跡を続ける。このため、格納バッファ１２０２は、各エントリに対して付加的な「完全」ビットを含み、このビットは、格納動作が完全であることを示すメモリ階層の下位レベルから確認が受信されたかどうかを示す。
【００９２】
Ｌ２キャッシュ１０６において、各Ｌ２バンクは、プロセッサ１１０、１２０、１３０および１４０の各々に対する各々のプロセッサ格納キューを含む。図１２は、Ｌ２バンク２０２およびＬ２バンク２０３のそれぞれに対して、各々のプロセッサ格納キュー１２０６および１２０８を示す。各々のプロセッサ格納キューはまた、Ｌ２バンク２０４〜２０５に対して存在するが、図１２に示されない。
【００９３】
各々のプロセッサ格納キュー１２０６および１２０８は、各プロセッサからの完了していない推測的格納動作を含む。これにより、システムは、所与の推測的格納動作が完了するまで次のロード動作を遅らせる必要があるかどうかを判定することができる。
【００９４】
図１３Ａは、本プロセスを示し、または、本発明の実施形態に従った、関連する推測的格納動作に応答した推測的ロード動作を遅らせるフローチャートである。システムは、推測的格納動作のレコードを維持することによって開始する（ステップ１３０２）。図１２に示される本発明の実施形態では、このレコードは、各々のプロセッサ格納キュー１２０６および１２０８の形式をとる。
【００９５】
次に、システムは、Ｌ２バンク２０２においてロード動作を受信する（ステップ１３０４）。次にシステムは、ロードが未解決の推測的格納動作と整合するかどうかを判定するために、各々のプロセッサ格納キューを検査する（ステップ１３０６）。もし整合すれば、システムは、整合する推測的格納動作が完了するまで、ロード動作を遅らせる（ステップ１３０８）。上述されたように、これは、格納が完了するまでロード動作の完了を遅らせるか、または、ロード動作をリトライさせるかのどちらかを意味する。
【００９６】
図１３Ｂは、本発明の実施形態に従った、Ｌ２バンク２０２における推測的格納情報の更新を示すフローチャートである。Ｌ２バンク２０２においてプロセッサ１５１から推測的格納動作を受信すると（ステップ１３１０）、システムは、推測的格納動作をプロセッサ１５１と関連する格納キューに入れる（ステップ１３１２）。システムは、格納動作をＬ２バンク２０２において完了させることができる（ステップ１３１４）。Ｌ２バンク２０２は、確認をプロセッサ１５１に送信し、推測的格納動作が終了したことを示す（ステップ１３１６）。次に、プロセッサ１５１は、前の格納動作が完了するまで待ち、「移動」コマンドをＬ２バンク２０２に送信して戻す（ステップ１３１８）。尚、プロセッサ１５１は、プロセッサ１５１における格納バッファ１２０２を検査することにより、全ての前の格納動作が完了する時が分かる。最終的に、プロセッサ１５１からの移動信号を受信すると、Ｌ２キャッシュは、各々のプロセッサ格納キュー１２０６を更新して、格納動作がもはや推測的ではないことを示す（ステップ１３２０）。尚、これは、各々のプロセッサ格納キュー１２０６から格納動作を取り除くことによって達成され得る。
【００９７】
（デッドロック回避のためのライトオンリー状態の利用）
図１４は、本発明の実施形態に従った再生動作により発生する潜在的なデッドロック条件を示す。図１４は、左から右へ進むタイムラインを示す。命令の発行は、タイムラインの上に示す矢印により表わされ、対応する命令の完了は、タイムラインの下に示す矢印により表わされる。
【００９８】
図１４に示される例では、第１のプロセッサは、格納Ａ動作を発行し、第２のプロセッサは格納Ｂ動作を発行する。次に、第１のプロセッサは、格納Ａ動作が完了する前に格納Ｂ動作を推測的に発行する。同様に、第２のプロセッサは、格納Ａ動作が完了する前に、格納Ｂ動作を推測的に発行する。
【００９９】
次に、第１のプロセッサによる推測的格納Ｂ動作は、第１のプロセッサによる前の格納Ａ動作が完了する前に完了する。同様に第２のプロセッサによる推測的格納Ａ動作が、第１のプロセッサによる前の格納Ｂ動作が完了する前に完了する。
【０１００】
続いて、第１のプロセッサに対する格納Ａ動作は、所有するためのリクエスト（ｒｅｑｕｅｓｔ−ｔｏ−ｏｗｎ（ＲＴＯ））動作を、キャッシュコヒーレンシプロトコルの一部として、メモリエレメントＡ上で発生させる。尚、第１のプロセッサは、メモリエレメントＡの所有権を取得するために、ＲＴＯ  Ａ動作を実行する必要があり、その結果、第１のプロセッサは、格納Ａ動作を完了させるためにメモリエレメントＡを修正し得る。同様に、第２のプロセッサは、メモリエレメントＢの所有権を獲得するために、メモリエレメントＢ上でＲＴＯ  Ｂ動作を発生させ、その結果、第２のプロセッサは、格納Ｂ動作を完了させるために、メモリエレメントＢを修正させ得る。
【０１０１】
しかし、メモリエレメントＡは、第２のプロセッサによる推測的格納動作の対象であるので、第１のプロセッサによるＲＴＯ  Ａ動作は、ＲＴＯ  Ａ動作を、第２のプロセッサによる前の格納Ｂ動作が完了するまで遅らせる。同様に、メモリエレメントＢは、第１のプロセッサによる推測的格納動作の対象であるので、第２のプロセッサによるＲＴＯ  Ｂ動作は、ＲＴＯ  Ｂ動作を、第１のプロセッサによる前の格納Ａ動作が完了するまで遅らせる。この結果が、第１のプロセッサと第２のプロセッサとの間のデッドロック条件となる。
【０１０２】
本発明の１つの実施形態では、文字「Ｗ」によって示される「ライトオンリー」キャッシュライン状態を、キャッシュコヒーレンシプロトコルに導入することによって、このデッドロック条件を回避する（図１５を参照されたい）。１５を参照すると、このキャッシュコヒーレンシプロトコルは、以下のＭＯＥＳＩ状態の間の通常の状態遷移の全てを含む。修正（Ｍ）、所有（Ｏ）、排他的（Ｅ）、共有（Ｓ）および無効（Ｉ）状態である。これらの標準のＭＯＥＳＩ遷移は、明快さのために示されない。さらに、プロトコルは、ライトオンリー「Ｗ」状態を含む。
【０１０３】
システムの動作中に、プロセッサは、推測的格納動作が存在するキャッシュラインにおいてＲＴＯ動作を実行し、プロセッサは、ライトオンリー状態のキャッシュラインを受信する。キャッシュラインは、もはや推測的ではなく、このライトオンリー状態は、修正された状態にアップグレードされる。
【０１０４】
より詳細には、図１６は、本発明の実施形態に従った、デッドロック条件を回避するために、ライトオンリー状態を利用するプロセスを示したフローチャートである。ターゲットキャッシュラインに対してプロセッサからＲＴＯリクエストを受信すると（ステップ１６０２）、システムは、推測的格納動作のレコードを検査する（ステップ１６０４）。整合する推測的格納動作が存在する場合、ターゲットキャッシュラインを現在保つソースプロセッサは、ターゲットキャッシュラインを、リクエストするプロセッサにライトオンリー状態で送る（ステップ１６０６）。ソースプロセッサはまた、ターゲットキャッシュラインにおいてその局所的Ｌ２キャッシュを無効化する。尚、キャッシュラインは、続いて、別のリクエストするプロセッサに沿ってライトオンリー状態で送られ得る。最終的に、移動メッセージを受信すると、システムは、アップグレードメッセージを全てのプロセッサにブロードキャストし、その結果、ターゲットキャッシュラインを現在保つプロセッサは、修正すべきターゲットキャッシュラインの状態をアップグレードし得る（ステップ１６０８）。
【０１０５】
（格納動作のドロップ）
推測的格納動作が、別のプロセッサの保留中の格納動作と同一のアドレスに関する場合に、別の問題となる条件が生じる。図１７Ａを参照すると、アドレスＡおよびアドレスＢが、Ｌ２キャッシュ１０６の異なるバンクに位置づけられることを前提とする。また、プロセッサＰ１上で実行するプログラムが、格納Ａ動作および格納Ｂ動作を特定することを前提とする。同様に、プロセッサＰ２上で実行するプログラムは、格納Ｂ動作および格納Ａ動作を特定することを前提とする。
【０１０６】
図１７Ａにおいて、Ｐ１からの格納Ｂ動作は、Ｐ１からの格納Ａ動作が発生する前に、順序に従わずに発生する。しかし、これは、プログラムの実行に影響を与えない。なぜなら、これらの２つの格納動作の間で生じる任意のロード動作は、前述のメカニズムによって扱われる。さらに、Ｐ２からの格納動作は、Ｐ１からの２つの格納動作の間で発生しない。
【０１０７】
図１７Ｂにおいて、Ｐ１からの格納Ｂ動作は、同様に、Ｐ１からの格納Ａ動作が発生する前に、順序に従わずに発生する。しかし、この例では、Ｐ２からの格納Ｂ動作および格納Ａ動作は、Ｐ１からのこれらの２つの格納動作の間で発生する。これが問題になり得るのは、全ての格納が完了した後に、アドレスＡは、Ｐ１により書き込まれた値を含み、アドレスＢは、Ｐ２により書き込まれた値を含む。尚、このような結果は、格納動作がプログラム順序で進行する場合に生じ得ない。この問題を回避するために、システムは、Ｐ２によるアドレスＢに対する格納動作をドロップさせ、Ｐ１からの保留中の格納動作を同一のアドレスと衝突させる。このプロセスは、図１８を参照して以下に詳細に示される。
【０１０８】
図１７Ｃでは、Ｐ１からの格納Ｂ動作は、同様に、Ｐ１からの格納Ａ動作が発生する前に、順序に従わずに発生する。しかし、この例では、Ｐ２からの格納Ａ動作は、Ｐ１からの２つの格納動作の間で発生する。これが問題となり得るのは、全ての格納が完了した後に、アドレスＡが、Ｐ１により書き込まれる値を含み、アドレスＢは、Ｐ２により書き込まれる値を含む。尚、このような結果は、格納動作がプログラム順序で進行する場合には発生し得ない。この問題を回避するために、システムは、Ｐ１によるアドレスＡに対する格納動作をドロップさせ、Ｐ２からの保留中の格納動作を同一のアドレスと衝突させる。このプロセスは、図１８を参照して以下により詳細に説明される。
【０１０９】
図１８は、本発明の実施形態に従った、関連する推測的格納動作を検知すると格納動作をドロップするプロセスを示すフローチャートである。システムは、推測的格納動作のレコードを維持することによって開始する（ステップ１８０２）。図１２に示される本発明の実施形態では、このレコードは、各々のプロセッサ格納キュー１２０６および１２０８の形式を取る。
【０１１０】
続いて、システムは、Ｌ２バンク２０２において格納動作を受信する（ステップ１８０４）。システムは、格納が、他のプロセッサからの任意の未解決の推測的格納動作と整合するかどうかを判定するために、各々のプロセッサ格納キューを検査する（ステップ１８０６）。もし整合すれば、システムは、各々のプロセッサ格納キューからそれを除去することによって、格納動作をドロップする（ステップ１８０８）。
【０１１１】
上述の本発明の実施形態は、例および説明としてのみ示された。それらは、排他的であること、開示される形式に本発明を制限することを意図していない。従って、多くの改変および変更が、当業者には理解される。従って、上述の開示は、本発明を制限することを意図しない。本発明の範囲は、添付の特許請求の範囲により規定される。
【図面の簡単な説明】
【０１１２】
【図１Ａ】図１Ａは、マルチプロセッサシステムを示す。
【図１Ｂ】図１Ｂは、本発明の実施形態に従った、リバースディレクトリを有するマルチプロセッサシステムを示す。
【図２】図２は、本発明の実施形態に従った、マルチプロセッサシステム内の多重バンクを有するＬ２キャッシュを示す。
【図３】図３は、本発明の実施形態に従った、リバースディレクトリを示す。
【図４】図４は、本発明の実施形態に従った、リバースディレクトリを示す。
【図５】図５は、本発明の実施形態に従った、リバースディレクトリエントリを生成する、または、更新するプロセスを示すフローチャートである。
【図６】図６は、本発明の実施形態に従った、無効化を実行するリバースディレクトリエントリを利用するプロセスを示すフローチャートである。
【図７】図７は、本発明の実施形態に従った、関連する格納動作に応答した推測的なロード動作の再生を示す。
【図８】図８は、本発明の実施形態に従った、推測的なロード動作に関係する様々な構造を示す。
【図９Ａ】図９Ａは、本発明の実施形態に従った、無効化イベントに応答した推測的なロード動作の再生を示すフローチャートである。
【図９Ｂ】図９Ｂは、本発明の実施形態に従った、明示的な再生コマンドに応答した推測的なロード動作の再生を示すフローチャートである。
【図１０Ａ】図１０Ａは、本発明の実施形態に従った、Ｌ２キャッシュの推測的なロードディレクトリの更新を示すフローチャートである。
【図１０Ｂ】図１０Ｂは、本発明の実施形態に従った、Ｌ２キャッシュの推測的なロードディレクトリの更新を示すフローチャートである。
【図１１】図１１は、本発明の実施形態に従った、完了した推測的な格納動作により実行される推測的なロード動作の再生を示す。
【図１２】図１２は、本発明の実施形態に従った、推測的な格納動作に関係する様々な構造を示す。
【図１３Ａ】図１３Ａは、本発明の実施形態に従った、関連する推測的な格納動作に応答した推測的なロード動作の遅延を示すフローチャートである。
【図１３Ｂ】図１３Ｂは、本発明の実施形態に従った、Ｌ２キャッシュの推測的格情報の更新を示すフローチャートである。
【図１４】図１４は、本発明の実施形態に従った、再生動作により引き起こされる潜在的なデッドロック条件を示す。
【図１５】図１５は、本発明の実施形態に従った、キャッシュコヒーレンシプロトコルの状態遷移図の一部を示す。
【図１６】図１６は、本発明の実施形態に従った、デッドロック条件を避けるために、ライトオンリー状態を利用するプロセスを示すフローチャートである。
【図１７Ａ】図１７Ａは、本発明の実施形態に従った、格納動作のドロップの様子を説明するための例となるタイムチャートである。
【図１７Ｂ】図１７Ｂは、本発明の実施形態に従った、格納動作のドロップの様子を説明するための例となるタイムチャートである。
【図１７Ｃ】図１７Ｃは、本発明の実施形態に従った、格納動作のドロップの様子を説明するための例となるタイムチャートである。
【図１８】図１８は、本発明の実施形態に従った、関連する推測的格納動作を検知すると格納動作をドロップするプロセスを示すフローチャートである。
【図１Ａ】
0004050226.tif 000002
【図１Ｂ】
0004050226.tif 000003
【図２】
0004050226.tif 000004
【図３】
0004050226.tif 000005
【図４】
0004050226.tif 000006
【図５】
0004050226.tif 000007
【図６】
0004050226.tif 000008
【図７】
0004050226.tif 000009
【図８】
0004050226.tif 000010
【図９Ａ】
0004050226.tif 000011
【図９Ｂ】
0004050226.tif 000012
【図１０Ａ】
0004050226.tif 000013
【図１０Ｂ】
0004050226.tif 000014
【図１１】
0004050226.tif 000015
【図１２】
0004050226.tif 000016
【図１３Ａ】
0004050226.tif 000017
【図１３Ｂ】
0004050226.tif 000018
【図１４】
0004050226.tif 000019
【図１５】
0004050226.tif 000020
【図１６】
0004050226.tif 000021
【図１７Ａ】
0004050226.tif 000022
【図１７Ｂ】
0004050226.tif 000023
【図１７Ｃ】
0004050226.tif 000024
【図１８】
0004050226.tif 000025