(57)【要約】スヌープ要求キャッシュは、前に発行されたスヌープ要求の記録を保持する。共有データを書き込むと、スヌープ・エンティティは、キャッシュ内のルックアップを実行する。ルックアップがヒットした場合（かつ、いくつかの実施形態において、ターゲット・プロセッサの識別を含む場合）、スヌープ・エンティティはスヌープ要求を抑制する。ルックアップがミスした場合（又は、ヒットしたが、ヒットしているエントリがターゲット・プロセッサの識別を有さない場合）、スヌープ・エンティティは、エントリをキャッシュ内に割り当て（又は、ターゲット・プロセッサの識別を設定し）、スヌープ要求をターゲット・プロセッサへ向け、プロセッサのＬ１キャッシュ内の対応するラインの状態を変更する。プロセッサは、共有データを読み取ると、スヌープ要求キャッシュのルックアップを実行し、他のスヌープ・エンティティが、プロセッサへのスヌープ要求を抑制しないように、ヒットの事象においてヒットしているエントリを無効にする（又は、そのプロセッサの識別子をヒットしているエントリからクリアする）。
2010517184.tif 000002
【特許請求の範囲】
【請求項１】
スヌープ・エンティティによって、データ・キャッシュを有するターゲット・プロセッサへのデータ・キャッシュ・スヌープ要求をフィルタする方法であって、
データ格納動作に応答してスヌープ要求キャッシュのルックアップを実行することと、
ヒットに応答して前記データ・キャッシュ・スヌープ要求を抑制することと
を備えた方法。
【請求項２】
前記ヒットに応答してデータ・キャッシュ・スヌープ要求を抑制することは更に、ヒットしているキャッシュ・エントリ内の、前記スヌープ・エンティティの識別に応答して、前記データ・キャッシュ・スヌープ要求を抑制することを更に備えた請求項１に記載の方法。
【請求項３】
前記ヒットに応答してデータ・キャッシュ・スヌープ要求を抑制することは更に、ヒットしているキャッシュ・エントリ内の、前記ターゲット・プロセッサの識別に応答して、前記データ・キャッシュ・スヌープ要求を抑制することを更に備えた請求項１に記載の方法。
【請求項４】
ミスに応答して前記スヌープ要求キャッシュ内のエントリを割り当てることを更に備えた請求項１に記載の方法。
【請求項５】
ミスに応答して、前記データ・キャッシュ・スヌープ要求を前記ターゲット・プロセッサへ転送することを更に備えた請求項４に記載の方法。
【請求項６】
前記スヌープ要求キャッシュ内のエントリを割り当てることは更に、前記スヌープ要求キャッシュ内に、前記スヌープ・エンティティの識別情報を含めることを備えた請求項４に記載の方法。
【請求項７】
前記スヌープ要求キャッシュ内のエントリを割り当てることは更に、前記スヌープ要求キャッシュ内に、前記ターゲット・プロセッサの識別情報を含めることを備えた請求項４に記載の方法。
【請求項８】
ヒットに応答して、前記データ・キャッシュ・スヌープ要求を前記ターゲット・プロセッサへ転送することであって、前記ターゲット・プロセッサの識別情報が前記ヒットしているキャッシュ・エントリ内に設定されていないことと、
前記ターゲット・プロセッサの識別情報を前記ヒットしているキャッシュ・エントリ内に設定することと
を更に備えた請求項１に記載の方法。
【請求項９】
前記スヌープ・エンティティは、データ・キャッシュを有するプロセッサであり、データ・ロード動作に応答して、スヌープ要求キャッシュのルックアップを実行することを更に備えた請求項１に記載の方法。
【請求項１０】
ヒットに応答して、前記ヒットしているスヌープ要求キャッシュ・エントリを無効にすることを更に備えた請求項９に記載の方法。
【請求項１１】
ヒットに応答して、前記プロセッサの識別情報を前記ヒットしているキャッシュ・エントリから除去することを更に備えた請求項９に記載の方法。
【請求項１２】
前記スヌープ要求キャッシュのルックアップは、予め定められた属性を有するデータのデータ格納動作のためにのみ実行される請求項１に記載の方法。
【請求項１３】
前記予め定められた属性は、前記データが共有されることである請求項１２に記載の方法。
【請求項１４】
前記データ・キャッシュ・スヌープ要求は、前記ターゲット・プロセッサのデータ・キャッシュ内のラインのキャッシュ状態を変更するように動作可能である請求項１に記載の方法。
【請求項１５】
前記データ・キャッシュ・スヌープ要求は、前記ターゲット・プロセッサのデータ・キャッシュからのラインを無効にするように動作可能なスヌープ・キル要求である請求項１４に記載の方法。
【請求項１６】
メモリと、
データ・キャッシュを有する第１のプロセッサと、
予め定められた属性を有するデータをメモリへ書き込むと、データ・キャッシュ・スヌープ要求を前記第１のプロセッサへ向けるように動作可能なスヌープ・エンティティと、
各有効なエントリが、前のデータ・キャッシュ・スヌープ要求を示す少なくとも１つのエントリを備えた少なくとも１つのスヌープ要求キャッシュとを備え、
前記スヌープ・エンティティは更に、データ・キャッシュ・スヌープ要求を前記第１のプロセッサへ向ける前に、スヌープ要求キャッシュのルックアップを実行し、ヒットに応答して、前記データ・キャッシュ・スヌープ要求を抑制するように動作可能であるコンピュータ・システム。
【請求項１７】
前記スヌープ・エンティティは更に、ミスに応答して、前記スヌープ要求キャッシュ内の新たなエントリを割り当てるように動作可能である請求項１６に記載のシステム。
【請求項１８】
前記スヌープ・エンティティは更に、ヒットしているキャッシュ・エントリ内の、前記スヌープ・エンティティの識別に応答して、前記データ・キャッシュ・スヌープ要求を抑制するように動作可能である請求項１６に記載のシステム。
【請求項１９】
前記スヌープ・エンティティは更に、ヒットしているキャッシュ・エントリ内の、前記第１のプロセッサの識別に応答して、前記データ・キャッシュ・スヌープ要求を抑制するように動作可能である請求項１６に記載のシステム。
【請求項２０】
前記スヌープ・エンティティは更に、前記第１のプロセッサの識別情報が設定されていないヒットしているエントリ内に、前記第１のプロセッサの識別情報を設定するように動作可能である請求項１９に記載のシステム。
【請求項２１】
前記予め定められた属性は、共有データを示す請求項１６に記載のシステム。
【請求項２２】
前記第１のプロセッサは更に、予め定められた属性を有するデータをメモリから読み取ると、スヌープ要求キャッシュのルックアップを実行し、ヒットに応答して、ヒットしているスヌープ要求キャッシュ・エントリを変更するように動作可能である請求項１６に記載のシステム。
【請求項２３】
前記第１のプロセッサは、前記ヒットしているスヌープ要求キャッシュ・エントリを無効にするように動作可能である請求項２２に記載のシステム。
【請求項２４】
前記第１のプロセッサは、前記ヒットしているスヌープ要求キャッシュ・エントリから、自身の識別情報をクリアするように動作可能である請求項２２に記載のシステム。
【請求項２５】
前記少なくとも１つのスヌープ要求キャッシュは、予め定められた属性を有するデータをメモリへ書き込むと、前記第１のプロセッサと前記スヌープ・エンティティとの両方がルックアップを実行する、単一のスヌープ要求キャッシュを備えた請求項１６に記載のシステム。
【請求項２６】
前記少なくとも１つのスヌープ要求キャッシュは、
予め定められた属性を有するデータをメモリへ書き込むと、前記第１のプロセッサがルックアップを実行するように動作可能な第１のスヌープ要求キャッシュと、
予め定められた属性を有するデータをメモリへ書き込むと、前記スヌープ・エンティティがルックアップを実行するように動作可能な第２のスヌープ要求キャッシュと
を備えた請求項１６に記載のシステム。
【請求項２７】
前記第１のプロセッサは更に、予め定められた属性を有するデータをメモリから読み取ると、前記第２のスヌープ要求キャッシュ内のルックアップを実行するように動作可能である請求項２６に記載のシステム。
【請求項２８】
データ・キャッシュを有する第２のプロセッサと、
予め定められた属性を有するデータをメモリへ書き込むと、前記スヌープ・エンティティがルックアップを実行するように動作可能な第３のスヌープ要求キャッシュと
を更に備えた請求項２６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、マルチ・プロセッサ・コンピューティング・システムにおけるキャッシュ・コヒーレンスに関し、特に、スヌープ要求をフィルタするためのスヌープ要求キャッシュに関する。
【背景技術】
【０００２】
現代の多くのソフトウェア・プログラムは、それらを実行するコンピュータが非常に大量の（理想的には、無限の）高速メモリを有するかのように書かれる。最近のプロセッサは、各々が異なる速度及びコスト特性を有するメモリ・タイプの階層を用いることによって理想的な状態をシミュレートする。階層内のメモリ・タイプは、最上位の非常に高速で非常に高価なものから、下位レベルでは次第に、緩慢であるがより経済的な格納タイプへ変わる。ほとんどのプログラムの空間的及び時間的な局所性特性により、任意の時間に実行している命令及びデータと、それらに近いアドレス空間内の命令及びデータとは、統計的に、とても近い将来必要になりそうであり、それらが容易に利用可能である、上位の高速階層において有利に保持されうる。
【０００３】
代表的なメモリ階層は、プロセッサ・コア内の最上位レベルに、非常に高速な汎用レジスタ（ＧＰＲ）のアレイを備えることができる。プロセッサ・レジスタは、当該技術においてレベル１キャッシュ、すなわちＬ１キャッシュとして知られている１つ又は複数のキャッシュ・メモリによって支援されうる。Ｌ１キャッシュは、プロセッサ・コアと同じ集積回路上のメモリ・アレイとして形成されることができ、非常に高速なアクセスを可能とするが、Ｌ１キャッシュの大きさを制限する。実現形態に依存して、プロセッサは、１つ又は複数のオンチップ又はオフチップのレベル２キャッシュ、すなわちＬ２キャッシュを含むことができる。Ｌ２キャッシュはしばしば、高速アクセス時間のために、またＤＲＡＭの性能低下リフレッシュ要件を回避するために、ＳＲＡＭ内に実装される。Ｌ２キャッシュの大きさにはあまり制限が無いので、Ｌ２キャッシュはＬ１キャッシュの何倍かの大きさであることができ、マルチプロセッサ・システムにおいて、１つのＬ２キャッシュが２つ以上のＬ１キャッシュの下に存在することができる。高性能コンピュータ処理は、更なるレベル（例えば、Ｌ３）のキャッシュを有することができる。全てのキャッシュより下位にメイン・メモリがあり、これはしばしば、最大密度によるビット毎の最低コストのために、ＤＲＡＭ又はＳＤＲＡＭ内に実装される。
【０００４】
メモリ階層内のキャッシュ・メモリは、少量のデータへの非常に高速なアクセスを提供することによって、かつ１つ又は複数のプロセッサとメイン・メモリとの間のデータ転送を低減することによって、性能を改善する。キャッシュは、メイン・メモリ内に格納されたデータのコピーを含み、キャッシュされたデータに対する変更は、メイン・メモリ内に反映されなければならない。一般に、メイン・メモリへキャッシュの書込みを伝搬するために、ライトスルーとコピー・バックとの２つのアプローチが当該技術において開発されてきた。ライトスルー・キャッシュにおいて、プロセッサが修正されたデータを自身のＬ１キャッシュへ書き込んだ場合、プロセッサは更に（そして直ちに）、修正されたデータを下位レベルのキャッシュ及び／又はメイン・メモリへ書き込む。コピー・バック・スキームの下では、プロセッサは、修正されたデータをＬ１キャッシュへ書き込み、後の時間まで、下位レベルのメモリに対する変更の更新を延期することができる。例えば書込みは、キャッシュ・エントリがキャッシュ・ミスを処理する際に置換されるまで、キャッシュ・コヒーレンス・プロトコルが書込みを要求するまで、又はソフトウェアの制御下で、延期されうる。
【０００５】
大量の高速メモリの想定に加えて、現代のソフトウェア・プログラムは、概念的に連続しており、大抵は排他的な仮想アドレス空間において実行する。すなわち、各プログラムは、明確に共有されたメモリ空間を例外として、メモリ・リソース全てを排他的に用いることを想定する。高度なオペレーティング・システム・ソフトウェアと共に用いられる現代のプロセッサは、この条件を、（プログラムによって用いられる）仮想アドレスを（例えばキャッシュ及びメイン・メモリといった実際のハードウェアをアドレス指定する）物理アドレスへマッピングすることによって模擬する。この仮想アドレスから物理アドレスへの変換及びマッピングは、メモリ管理として知られている。メモリ管理は、ページと称されるメイン・メモリのセグメントへ属性を割り当てることによって、リソースをプロセッサ及びプログラムへ割り当て、キャッシュ管理ポリシーを定め、セキュリティを実施し、データ保護を提供し、信頼性を高め、その他の機能を提供する。例えばスーパーバイザ／ユーザ、読み書き／読取専用、排他／共有、命令／データ、キャッシュ・ライトスルー／コピー・バック、及びその他多くのような多くの異なる属性が、ページ毎ベースで割り当てられ、定められうる。仮想アドレスを物理アドレスへ変換すると、データは、物理ページのために定められた属性を積み込む。
【０００６】
マルチプロセッサ・システムを管理するための１つのアプローチは、タスク又はプログラム実行の個別の「スレッド」を各プロセッサに割り当てることである。この場合、各スレッドは、その他任意のスレッドに割り当てられたメモリの状態に関わらず読み書きすることができる排他的メモリに割り当てられる。しかし、関連スレッドはしばしば、いくつかのデータを共有し、そのため各々が、共有属性を有する１つ又は複数の共通ページに割り当てられる。共有メモリへの更新は、それを共有しているプロセッサ全てに認識できなければならず、キャッシュ・コヒーレンスの問題を生ずる。従って、共有データは、Ｌ１キャッシュを（Ｌ２キャッシュが、ページを共有しているプロセッサ全てのＬ１キャッシュを戻す場合）Ｌ２キャッシュへ、あるいはメイン・メモリへ「ライトスルー」しなければならない属性を有することもできる。更に、共有データが変更された（そのため、自身のＬ１キャッシュされたコピーがある場合、それはもはや有効ではない）ことを他のプロセッサに知らせるために、書込み中のプロセッサは、共有しているプロセッサ全てへ、それらのＬ１キャッシュ内の対応するラインを無効にする要求を発行する。プロセッサ間のキャッシュ・コヒーレンス動作は、本明細書において一般に、スヌープ要求と称され、Ｌ１キャッシュ・ラインを無効にする要求は、本明細書において、スヌープ・キル要求又は単にスヌープ・キルと称される。スヌープ・キル要求は、上記以外のシナリオにおいても起こる。
【０００７】
スヌープ・キル要求を受け取ると、プロセッサは、自身のＬ１キャッシュ内の対応するラインを無効にしなければならない。その後のデータを読み取る試みは、Ｌ１キャッシュ内でミスし、プロセッサに、共有Ｌ２キャッシュ又はメイン・メモリから更新されたバージョンを読み取らせるであろう。しかしスヌープ・キルの処理は、それがなければ、受信しているプロセッサにおける格納及びロードを提供するために用いられたであろう処理サイクルを消費するので、性能ペナルティを招く。更にスヌープ・キルは、スヌープによって複雑化されたデータ・ハザードが解決されたと知られる状態に達するために、パイプラインのロード／格納を必要としうるので、パイプラインをストールさせ、更に性能を低下させる。
【０００８】
当該技術において、スヌープされているプロセッサによって招かれるプロセッサ・ストール・サイクルの数を低減する様々な技術が知られている。１つのこのような技術において、Ｌ１タグ・アレイの複写コピーが、スヌープ・アクセスのために保持される。スヌープ・キルが受け取られると、ルックアップが、二重タグ・アレイにおいて実行される。このルックアップがミスした場合、Ｌ１キャッシュ内の対応するエントリを無効にする必要はなく、スヌープ・キルの処理に関するペナルティが回避される。しかし、この解決策は、各Ｌ１キャッシュのためのタグ全体が複写され、最小ダイ・サイズ及び電力消費を増加させるので、シリコン領域において多大なペナルティをもたらす。更にプロセッサは、Ｌ１キャッシュが更新される度にタグの２つのコピーを更新しなければならない。
【０００９】
プロセッサが処理しなければならないスヌープ・キル要求の数を低減する別の周知の技術は、潜在的にメモリを共有することができるプロセッサの「スヌーパ・グループ」を形成することである。（下位レベルのメモリへのライトスルーによって）共有データを用いてＬ１キャッシュを更新すると、プロセッサは、自身のスヌーパ・グループ内の他のプロセッサへのみ、スヌープ・キル要求を送る。ソフトウェアは、例えばページ・レベルで、又はグローバルに、スヌーパ・グループを定め、保持することができる。この技術は、システム内のスヌープ・キル要求のグローバルな数を低減するが、各スヌーパ・グループ内の各プロセッサは、そのグループ内の他の任意のプロセッサによる共有データの書込み毎にスヌープ・キル要求を処理することが必要である。
【００１０】
スヌープ・キル要求の数を低減するまた別の周知の技術は、格納集合である。少量のデータをＬ１キャッシュへ書き込むことによって各格納命令を直ちに実行するのではなく、プロセッサは、格納データを収集するための集合バッファ又はレジスタ・バンクを含むことができる。キャッシュ・ライン、ハーフライン、又はその他の都合の良い量のデータが集められた場合、又は、集められたものとは異なるキャッシュ・ラインあるいはハーフラインに対し格納が起こった場合、集められた格納データは、全て一度にＬ１キャッシュへ書き込まれる。これは、Ｌ１キャッシュへの書込み動作の数を低減し、そのため、別のプロセッサへ送られなければならないスヌープ・キル要求の数を低減する。この技術は、集合バッファあるいは複数の集合バッファのための追加のオンチップ格納を必要とし、格納動作が、集合バッファによってカバーされる範囲に局所化されていない場合、良好に機能しない。
【００１１】
また別の周知の技術は、Ｌ１キャッシュを完全に含むＬ２キャッシュを生成することによって、Ｌ２キャッシュにおいてスヌープ・キル要求をフィルタすることである。この場合、共有データを書き込むプロセッサは、他方のプロセッサをスヌープする前に、他方のプロセッサのＬ２キャッシュ内のルックアップを実行する。Ｌ２ルックアップがミスした場合、他方のプロセッサのＬ１キャッシュをスヌープする必要はなく、他方のプロセッサは、スヌープ・キル要求を処理することの性能低下を起こさない。この技術は、１つ又は複数のＬ１キャッシュを複写するために、Ｌ２キャッシュ・メモリを消費することによって実質的なキャッシュ・サイズの合計を低減する。更にこの技術は、同一のＬ２キャッシュによって支援される２つ以上のプロセッサがデータを共有し、そのため互いにスヌープしなければならない場合、非効率的である。
【発明の概要】
【００１２】
本明細書において説明され、特許請求される１つ又は複数の実施形態によると、１つ又は複数のスヌープ要求キャッシュが、スヌープ要求の記録を保持する。共有属性を有するデータを書き込むと、プロセッサは、スヌープ要求キャッシュ内のルックアップを実行する。ルックアップがミスした場合、プロセッサは、スヌープ要求キャッシュ内のエントリを割り当て、（例えばスヌープ・キルのような）スヌープ要求を１つ又は複数のプロセッサへ向ける。スヌープ要求キャッシュのルックアップがヒットした場合、プロセッサは、スヌープ要求を抑制する。プロセッサは、共有データを読み取った場合もスヌープ要求キャッシュのルックアップを実行し、ヒットの事象においてヒットしているエントリを無効にする。
【００１３】
１つの実施形態は、スヌープ・エンティティによって、データ・キャッシュを有するターゲット・プロセッサへデータ・キャッシュ・スヌープ要求を発行する方法に関する。スヌープ要求キャッシュのルックアップが、データ格納動作に応答して実行され、データ・キャッシュ・スヌープ要求は、ヒットに応答して抑制される。
【００１４】
別の実施形態は、コンピュータ・システムに関する。このシステムは、メモリと、データ・キャッシュを有する第１のプロセッサとを含む。システムはまた、予め定められた属性を有するデータをメモリへ書き込むと、データ・キャッシュ・スヌープ要求を第１のプロセッサへ向けるように動作可能なスヌープ・エンティティも含む。システムは更に、各有効なエントリが前のデータ・キャッシュ・スヌープ要求を示す少なくとも１つのエントリを備えた少なくとも１つのスヌープ要求キャッシュを含む。スヌープ・エンティティは更に、データ・キャッシュ・スヌープ要求を第１のプロセッサへ向ける前にスヌープ要求キャッシュのルックアップを実行し、ヒットに応答してデータ・キャッシュ・スヌープ要求を抑制するように動作可能である。
【図面の簡単な説明】
【００１５】
【図１】図１は、マルチプロセッサ・コンピュータ・システムにおける共有スヌープ要求キャッシュの機能ブロック図である。
【図２】図２は、マルチプロセッサ・コンピュータ・システムにおけるプロセッサ毎の複数の専用スヌープ要求キャッシュの機能ブロック図である。
【図３】図３は、プロセッサでないスヌープ・エンティティを含むマルチプロセッサ・コンピュータ・システムの機能ブロック図である。
【図４】図４は、マルチプロセッサ・コンピュータ・システムにおける各プロセッサに関連付けられた単一のスヌープ要求キャッシュの機能ブロック図である。
【図５】図５は、スヌープ要求を発行する方法のフロー図である。
【発明を実施する形態】
【００１６】
図１は、一般に番号１００によって示されたマルチプロセッサ・コンピュータ・システムを図示する。コンピュータ１００は、第１のプロセッサ１０２（Ｐ１と記載）と、その関連Ｌ１キャッシュ１０４とを含む。コンピュータ１００は更に、第２のプロセッサ１０６（Ｐ２と記載）と、その関連Ｌ１キャッシュ１０８とを含む。Ｌ１キャッシュはどちらも、システム・バス１１２を介してメイン・メモリ１１４とデータを転送しあう共有Ｌ２キャッシュ１１０によって支援される。プロセッサ１０２、１０６は、専用命令キャッシュ（図示せず）を含むことができる、あるいは、Ｌ１キャッシュ及びＬ２キャッシュ内にデータ及び命令の両方をキャッシュすることができる。キャッシュ１０４、１０８、１１０が、専用データ・キャッシュであるか、統一命令／データ・キャッシュであるかは、本明細書で説明される、キャッシュされたデータに関して動作する実施形態に影響を及ぼさない。本明細書で用いられるように、例えばデータ・キャッシュ・スヌープ要求のような「データ・キャッシュ」の動作は、専用データ・キャッシュに向けられた動作と、統一キャッシュに格納されたデータに向けられた動作とを等しく示す。
【００１７】
プロセッサＰ１及びＰ２で実行しているソフトウェア・プログラムは主に独立しており、それらの仮想アドレスは、物理メモリのそれぞれの専有ページへマップされる。しかしプログラムは幾らかのデータを共有し、少なくともいくつかのアドレスが共有メモリ・ページへマップされる。各プロセッサのＬ１キャッシュ１０４、１０８が最新の共有データを含むことを確実にするために、共有ページは、Ｌ１ライトスルーの追加属性を有する。従って、Ｐ１又はＰ２が共有メモリ・アドレスを更新した任意の時間に、プロセッサのＬ１キャッシュ１０４、１０８及びＬ２キャッシュ１１０が更新される。更に、更新しているプロセッサ１０２、１０６は、他方のプロセッサのＬ１キャッシュ１０４、１０８内の可能な対応するラインを無効にするために、他方のプロセッサ１０２、１０６へスヌープ・キル要求を送る。これにより、上述したように、受け取っているプロセッサ１０２、１０６における性能低下が起こる。
【００１８】
スヌープ要求キャッシュ１１６は、前のスヌープ・キル要求をキャッシュし、余分なスヌープ・キルを除去し、全体的な性能を改善することができる。図１は、この処理を図示する。ステップ１において、プロセッサＰ１は、共有属性を有するメモリ場所へデータを書き込む。本明細書で用いられるように、「グラニュール」という用語は、コンピュータ・システム１００においてキャッシュ可能な最も小さい量のデータを称する。多くの場合、グラニュールは、最小Ｌ１キャッシュ・ラインの大きさである（いくつかのＬ２キャッシュはセグメント化されたラインを有し、ライン毎に複数のグラニュールを格納することができる）。キャッシュ・コヒーレンスは、グラニュール・ベースで維持される。グラニュールを含むメモリ・ページの共有属性（あるいは、個別のライトスルー属性）は、Ｐ１に、Ｐ１のデータを、Ｌ２キャッシュ１１０及びＰ１自身のＬ１キャッシュ１０４へ書き込ませる。
【００１９】
ステップ２において、プロセッサＰ１は、スヌープ要求キャッシュ１１６内でルックアップを実行する。スヌープ要求キャッシュ１１６のルックアップがミスした場合、プロセッサＰ１は、スヌープ要求キャッシュ１１６内のエントリを、Ｐ１の格納データに関連付けられたグラニュールに割り当て、Ｐ２のＬ１キャッシュ１０８内の対応する任意のライン（すなわち、グラニュール）を無効にするために、プロセッサＰ２へスヌープ・キル要求を送る（ステップ３）。その後プロセッサＰ２がグラニュールを読み取った場合、Ｐ２は、自身のＬ１キャッシュ１０８内でミスし、Ｌ２キャッシュ１１０をアクセスさせ、データの最新バージョンがＰ２へ戻されるであろう。
【００２０】
その後プロセッサＰ１が共有データの同じグラニュールを更新した場合、Ｐ１は再びＬ２キャッシュ１１０へのライトスルー（ステップ１）を実行するであろう。Ｐ１は更に、スヌープ要求キャッシュ１１６のルックアップ（ステップ２）を実行するであろう。このとき、スヌープ要求キャッシュ１１６のルックアップはヒットするであろう。それに応じて、プロセッサＰ１は、プロセッサＰ２へのスヌープ・キル要求を抑制する（ステップ３が実行されない）。スヌープ要求キャッシュ１１６内の、それが書き込んでいるグラニュールに対応するエントリが存在することは、前のスヌープ・キル要求が、Ｐ２のＬ１キャッシュ１０８内の対応するラインを既に無効にしており、Ｐ２によるグラニュールの任意の読取りは、Ｌ２キャッシュ１１０へアクセスさせられるであろうことを、プロセッサＰ１に保証する。従って、スヌープ・キル要求は、キャッシュ・コヒーレンスのために必ずしも必要ではなく、安全に抑制されうる。
【００２１】
しかし、プロセッサＰ１がスヌープ要求キャッシュ１１６内のエントリを割り当てた後、プロセッサＰ２は、Ｌ２キャッシュ１１０内の同じグラニュールからデータを読み取り、自身の対応するＬ１キャッシュ・ラインの状態を有効に変更することができる。この場合、プロセッサＰ１が新たな値をグラニュールへ書き込むと、プロセッサＰ２のＬ１キャッシュとＬ２キャッシュとに異なる値を残すことになるので、プロセッサＰ１は、プロセッサＰ２へのスヌープ・キル要求を抑制してはならない。プロセッサＰ１によって発行されたスヌープ・キルがプロセッサＰ２へ到達する（すなわち、抑制されない）ことを「可能とする」ために、ステップ４においてグラニュールを読み取ると、プロセッサＰ２は、ステップ５において、スヌープ要求キャッシュ１１６内のグラニュールにルックアップを実行する。このルックアップがヒットした場合、プロセッサＰ２は、ヒットしているスヌープ要求キャッシュ・エントリを無効にする。その後プロセッサＰ１がグラニュールへ書き込んだ場合、Ｐ１は、（スヌープ要求キャッシュ１１６内でミスすることによって）新たなスヌープ・キル要求をプロセッサＰ２へ発行するであろう。このように、プロセッサＰ１が、必要最低限の数のスヌープ・キル要求を発行することによって、２つのＬ１キャッシュ１０４、１０８は、プロセッサＰ１の書込み及びプロセッサＰ２の読取りのためのコヒーレンスを維持する。
【００２２】
一方、プロセッサＰ２が共有グラニュールを書き込んだ場合、Ｐ２は、Ｌ２キャッシュ１１０へのライトスルーを必ずしなければならない。しかし、スヌープ要求キャッシュ１１６のルックアップの実行中、Ｐ２は、プロセッサＰ１が前にグラニュールを書き込んだ時に割り当てられたエントリにヒットしうる。この場合、プロセッサＰ１へのスヌープ・キル要求の抑制は、Ｐ１のＬ１キャッシュ１０４内の古い値を残すことになり、結果として非コヒーレントなＬ１キャッシュ１０４、１０８をもたらす。従って、１つの実施形態において、スヌープ要求キャッシュ１１６のエントリを割り当てると、Ｌ２キャッシュ１１０へのライトスルーを実行しているプロセッサ１０２、１０６は、エントリ内に識別子を含む。その後書き込むと、プロセッサ１０２、１０６は、スヌープ要求キャッシュ１１６内のヒットしているエントリがプロセッサの識別子を含む場合、スヌープ・キル要求を抑制するだけでよい。同様に、グラニュールを読み取るとスヌープ要求キャッシュ１１６のルックアップを実行する場合、プロセッサ１０２、１０６は、ヒットしているエントリが異なるプロセッサの識別子を含む場合、そのエントリを無効にするだけでよい。１つの実施形態において、各キャッシュ１１６のエントリは、データを共有することができる、システム内の各プロセッサのための識別フラグを含み、プロセッサは、キャッシュがヒットすると必要に応じて識別フラグを検査し、設定あるいはクリアする。
【００２３】
スヌープ要求キャッシュ１１６は、当該技術において知られている任意のキャッシュ構成あるいは結合の程度を想定することができる。スヌープ要求キャッシュ１１６はまた、当該技術において知られている任意のキャッシュ要素置換ストラテジーを用いることができる。スヌープ要求キャッシュ１１６は、共有データを書き込んでいるプロセッサ１０２、１０６がスヌープ要求キャッシュ１１６内でヒットし、１つ又は複数の他のプロセッサ１０２、１０６へのスヌープ・キル要求を抑制した場合、性能利益を提供する。しかし、利用可能なキャッシュ１１６の空間を超える数の有効なエントリによって、有効なスヌープ要求キャッシュ１１６の要素が置き換えられた場合、誤った動作あるいはキャッシュの非コヒーレンスは生じない。最悪でも、対応するＬ１キャッシュ・ラインが既に無効であるプロセッサ１０２、１０６へ、後続のスヌープ・キル要求が発行されうる。
【００２４】
１つ又は複数の実施形態において、スヌープ要求キャッシュ１１６のエントリへのタグが、Ｌ１キャッシュ１０４、１０８内のタグと同様に、有効ビット及びグラニュール・アドレスの最上位ビットから形成される。１つの実施形態において、スヌープ要求キャッシュ１１６のエントリ内に格納されたデータ又は「ライン」は単に、そのエントリに割り当てられたプロセッサ１０２、１０６（すなわち、スヌープ・キル要求を発行しているプロセッサ１０２、１０６）のユニークな識別子であり、例えば、データを共有することができる、システム１００内の各プロセッサのための識別フラグを備えることができる。別の実施形態において、ソース・プロセッサ識別子は、それ自体がタグ内に組み込まれることができ、そのためプロセッサ１０２、１０６は、共有データの格納に従って、キャッシュ・ルックアップにおいて自身のエントリに対してヒットするのみであろう。この場合、スヌープ要求キャッシュ１１６は単に、ヒットあるいはミスを示すコンテンツ・アドレス指定可能メモリ（ＣＡＭ）構成であり、データを格納している対応するＲＡＭ要素を伴わない。共有データのロードに従って、スヌープ要求キャッシュ１１６のルックアップを実行した場合、他方のプロセッサの識別子が用いられなければならないことを留意されたい。
【００２５】
別の実施形態において、ソース・プロセッサ識別子は省略されることができ、各ターゲット・プロセッサ、すなわち、スヌープ・キル要求が送られた各プロセッサ１０２、１０６の識別子が、各スヌープ要求キャッシュ１１６のエントリ内に格納される。これら識別情報は、データを共有することができる、システム１００内の各プロセッサのための識別フラグを備えることができる。この実施形態において、共有データ・グラニュールへ書き込むと、スヌープ要求キャッシュ１１６内でヒットしているプロセッサ１０２、１０６は、識別フラグを検査し、識別フラグが設定されている各プロセッサへのスヌープ・キル要求を抑制する。プロセッサ１０２、１０６は、ヒットしているエントリ内での識別フラグがクリアされた他方のプロセッサの各々へスヌープ・キル要求を送り、その後、ターゲット・プロセッサのフラグを設定する。共有データ・グラニュールを読み取ると、スヌープ要求キャッシュ１１６内でヒットしているプロセッサ１０２、１０６は、エントリ全体を無効にする代わりに、自身の識別フラグをクリアし、自身に向けられるはずのスヌープ・キル要求の可能性をクリアするが、対応するキャッシュ・ラインが無効なままである他方のプロセッサへ送ることを未だ妨げられる。
【００２６】
Ｌ１キャッシュ２０４を有するプロセッサＰ１  ２０２、Ｌ１キャッシュ２０８を有するプロセッサＰ２  ２０６、及びＬ１キャッシュ２１２を有するプロセッサＰ３  ２１０を含むコンピュータ・システム２００を示す図２に関連して、別の実施形態が説明される。各Ｌ１キャッシュ２０４、２０８、２１２は、システム・バス２１３を介してメイン・メモリ２１４に接続する。図２において明らかであるように、本明細書における実施形態は何れも、Ｌ２キャッシュの存在の有無や、メモリ階層のその他任意の局面に依存せず、またそれらを必要としないことを留意されたい。各プロセッサ２０２、２０６、２１０に関連付けられているのは、共有データにアクセスすることができる、システム２００内の（データ・キャッシュを有する）他のプロセッサ２０２、２０６、２１０各々に専用のスヌープ要求キャッシュ２１６、２１８、２２０、２２２、２２４、２２６である。例えば、プロセッサＰ１に関連付けられているのは、プロセッサＰ２専用のスヌープ要求キャッシュ２１６と、プロセッサＰ３専用のスヌープ要求キャッシュ２１８である。同様に、プロセッサＰ２に関連付けられているのは、それぞれプロセッサＰ１及びＰ３専用であるスヌープ要求キャッシュ２２０、２２２である。そして、それぞれプロセッサＰ１及びＰ２専用であるスヌープ要求キャッシュ２２４、２２６が、プロセッサＰ３に関連付けられている。１つの実施形態において、スヌープ要求キャッシュ２１６、２１８、２２０、２２２、２２４、２２６は、ＣＡＭ構成のみであり、データ・ラインを含まない。
【００２７】
スヌープ要求キャッシュの動作が、図２内の典型的な一連のステップを用いて図示される。ステップ１において、プロセッサＰ１は、共有データ・グラニュールへ書き込む。データ属性が、Ｐ１のＬ１キャッシュ２０４にメモリ２１４へのライトスルーを促す。プロセッサＰ１は、ステップ２において、関連付けられたスヌープ要求キャッシュ両方、すなわち、プロセッサＰ２専用のスヌープ要求キャッシュ２１６と、プロセッサＰ３専用のスヌープ要求キャッシュ２１８との両方においてルックアップを実行する。この例において、Ｐ２のスヌープ要求キャッシュ２１６がヒットし、スヌープ要求キャッシュのエントリが新たな割当てによって上書きされていない又は無効にされていないＰ２へのスヌープ・キル要求をＰ１が以前に送ったことを示す。これは、Ｐ２のＬ２キャッシュ２０８内の対応するラインが（未だ）無効とされており、プロセッサＰ１が、ステップ３ａの破線に示されるようなプロセッサＰ２へのスヌープ・キル要求を抑制することを意味する。
【００２８】
この例において、Ｐ１に関連付けられ、Ｐ３専用であるスヌープ要求キャッシュ２１８のルックアップがミスする。それに応じて、プロセッサＰ１は、Ｐ３のスヌープ要求キャッシュ２１８内のグラニュールにエントリを割り当て、ステップ３ｂにおいて、スヌープ・キル要求をプロセッサＰ３へ発行する。このスヌープ・キルは、Ｐ３のＬ１キャッシュ内の対応するラインを無効にし、Ｐ３に、グラニュールからの次の読取りにおいてメイン・メモリへ行かせ、（Ｐ１の書込みによって更新されたような）最新データを取得させる。
【００２９】
その後、ステップ４に示されるように、プロセッサＰ３は、データ・グラニュールから読み取る。この読取りは、Ｐ３自身のＬ１キャッシュ２１２内で（そのラインがＰ１のスヌープ・キルによって無効にされたので）ミスし、メイン・メモリ２１４からグラニュールを取得する。ステップ５において、プロセッサＰ３は、Ｐ３専用のスヌープ要求キャッシュ全てにおいて、すなわち、Ｐ１のＰ３専用スヌープ要求キャッシュ２１８と、Ｐ２のＰ３専用スヌープ要求キャッシュ２２２との両方において、ルックアップを実行する。キャッシュ２１８、２２２の何れか（あるいは両方）がヒットすると、プロセッサＰ３は、プロセッサＰ１又はＰ２の何れかが共有データ・グラニュールへ新たな値を書き込んだ場合、対応するプロセッサＰ１又はＰ２がＰ３へのスヌープ・キル要求を抑制することを防ぐために、ヒットしているエントリを無効にする。
【００３０】
この具体的な例から一般化すると、各プロセッサに関連付けられているのが、データを共有する他のプロセッサ各々専用の別々のスヌープ要求キャッシュである、図２に示されたような実施形態において、共有データ・グラニュールへ書き込んでいるプロセッサは、書き込んでいるプロセッサに関連付けられた各スヌープ要求キャッシュ内のルックアップを実行する。ミスした各々について、プロセッサは、スヌープ要求キャッシュ内のエントリを割り当て、スヌープ・キル要求を、ミスしているスヌープ要求キャッシュの専用であるプロセッサへ送る。プロセッサは、専用キャッシュがヒットしている任意のプロセッサへのスヌープ・キル要求を抑制する。共有データ・グラニュールを読み取ると、プロセッサは、自身専用の（かつ、他のプロセッサに関連付けられた）スヌープ要求キャッシュ全てにおいてルックアップを実行し、ヒットしている任意のエントリを無効にする。このように、Ｌ１キャッシュ２０４、２０８、２１２は、共有属性を有するデータのためのコヒーレンスを維持する。
【００３１】
本発明の実施形態は、本明細書において、各々がＬ１キャッシュを有するプロセッサに関連して説明されたが、コンピュータ・システム１０内の他の回路あるいは論理エンティティ／機能エンティティが、キャッシュ・コヒーレンス・プロトコルに参加しうる。図３は、図２の実施形態と同様の、キャッシュ・コヒーレンス・プロトコルに参加する、プロセッサでないスヌープ・エンティティを有する実施形態を示す。システム３００は、Ｌ１キャッシュ３０４を有するプロセッサＰ１  ３０２と、Ｌ１キャッシュ３０８を有するプロセッサＰ２  ３０６とを含む。
【００３２】
システムは更に、直接メモリ・アクセス（ＤＭＡ）コントローラ３１０を含む。当該技術において知られているように、ＤＭＡコントローラ３１０は、ソース（メモリ又は周辺デバイス）から宛先（メモリ又は周辺デバイス）へデータのブロックを自律的に移動させるように動作する、プロセッサの回路である。システム３００において、プロセッサ３０２、３０６、及びＤＭＡコントローラ３１０は、システム・バス３１２を介してメイン・メモリ３１４へアクセスする。更にＤＭＡコントローラ３１０は、周辺デバイス３１６のデータ・ポートから直接データを読み書きすることができる。ＤＭＡコントローラ３１０が、共有メモリへ書き込むようにプロセッサによってプログラムされている場合、ＤＭＡコントローラ３１０は、Ｌ１データ・キャッシュ３０４、３０８のコヒーレンスを確実にするために、キャッシュ・コヒーレンス・プロトコルに参加しなければならない。
【００３３】
ＤＭＡコントローラ３１０は、キャッシュ・コヒーレンス・プロトコルに参加するので、スヌープ・エンティティである。本明細書で用いられるように、「スヌープ・エンティティ」という用語は、キャッシュ・コヒーレンス・プロトコルに従ってスヌープ要求を発行することができる任意のシステム・エンティティを称する。特に、データ・キャッシュを有するプロセッサがスヌープ・エンティティの１つのタイプであるが、「スヌープ・エンティティ」という用語は、データ・キャッシュを有するプロセッサ以外のシステム・エンティティも包含する。プロセッサ３０２、３０６及びＤＭＡ３１０以外のスヌープ・エンティティの限定されない例は、数値演算コプロセッサあるいはグラフィックス・コプロセッサ、例えばＭＰＥＧ符号器／復号器のような圧縮／解凍エンジン、又はメモリ３１４内の共有データにアクセスすることができるその他任意のシステム・バス・マスタを含む。
【００３４】
各スヌープ・エンティティ３０２、３０６、３１０に関連付けられているのは、そのスヌープ・エンティティがデータを共有することができる、（データ・キャッシュを有する）各プロセッサ専用のスヌープ要求キャッシュである。特に、スヌープ要求キャッシュ３１８は、プロセッサＰ１に関連付けられ、プロセッサＰ２専用である。同様に、スヌープ要求キャッシュ３２０は、プロセッサＰ２に関連付けられ、プロセッサＰ１専用である。ＤＭＡコントローラ３１０に関連付けられているのは、プロセッサＰ１専用のスヌープ要求キャッシュ３２２と、プロセッサＰ２専用のスヌープ要求キャッシュ３２４との２つのスヌープ要求キャッシュである。
【００３５】
キャッシュ・コヒーレンス処理が、図３に示される。ＤＭＡコントローラ３１０が、メイン・メモリ３１４内の共有データ・グラニュールへ書き込む（ステップ１）。プロセッサＰ１及びＰ２の何れか又は両方が、自身のＬ１キャッシュ３０４、３０８内にデータ・グラニュールを含むことができるので、ＤＭＡコントローラ３１０は従来どおり、各プロセッサＰ１、Ｐ２へスヌープ・キル要求を送るであろう。しかし、まずＤＭＡコントローラ３１０は、自身の関連付けられたスヌープ要求キャッシュ両方、すなわち、プロセッサＰ１専用のキャッシュ３２２及びプロセッサＰ２専用のキャッシュ３２４内のルックアップを実行する（ステップ２）。この例において、プロセッサＰ１専用のキャッシュ３２２内のルックアップがミスし、プロセッサＰ２専用のキャッシュ３２４内のルックアップがヒットする。ミスに応答して、ＤＭＡコントローラ３１０は、プロセッサＰ１へスヌープ・キル要求を送り（ステップ３ａ）、プロセッサＰ１専用のスヌープ要求キャッシュ３２２内のデータ・グラニュールにエントリを割り当てる。ヒットに応答して、ＤＭＡコントローラ３１０は、もしヒットしなければプロセッサＰ２へ送られたであろうスヌープ・キル要求を抑制する（ステップ３ｂ）。
【００３６】
その後、プロセッサＰ２は、メモリ３１４内の共有データ・グラニュールから読み取る（ステップ４）。全てのスヌープ・エンティティからのスヌープ・キル要求が自身へ向けられることを可能とするために、プロセッサＰ２は、別のスヌープ・エンティティに関連付けられ、プロセッサＰ２（すなわち、自身）専用の各キャッシュ３１８、３２４内のルックアップを実行する。特にプロセッサＰ２は、プロセッサＰ１に関連付けられプロセッサＰ２専用のスヌープ要求キャッシュ３１８内のキャッシュ・ルックアップを実行し、キャッシュがヒットした場合、ヒットしている任意のエントリを無効にする。同様にプロセッサＰ２は、ＤＭＡコントローラ３１０に関連付けられプロセッサＰ２専用のスヌープ要求キャッシュ３２４内のキャッシュ・ルックアップを実行し、キャッシュがヒットした場合、ヒットしている任意のエントリを無効にする。この実施形態において、スヌープ要求キャッシュ３１８、３２０、３２２、３２４は、純粋なＣＡＭ構成であり、キャッシュ・エントリ内のプロセッサ識別フラグは必要ない。
【００３７】
スヌープ・エンティティ３０２、３０６、３１０の何れも、ＤＭＡコントローラ３１０専用の任意のスヌープ要求キャッシュに関連付けられていないことを留意されたい。ＤＭＡコントローラ３１０はデータ・キャッシュを有さないので、キャッシュ・ラインを無効にするために、ＤＭＡコントローラ３１０へスヌープ・キル要求を向ける別のスヌープ・エンティティは必要ない。更に、ＤＭＡコントローラ３１０は、共有データをメモリ３１４へ書き込み、共有データ・グラニュールから読み取るとスヌープ・キル要求を発行することによって、キャッシュ・コヒーレンス・プロトコルに参加するが、ＤＭＡコントローラ３１０は、ヒットしているエントリを無効にする目的のために任意のスヌープ要求キャッシュのルックアップを実行することはないことを留意されたい。これは、共有データへ書き込むと、別のスヌープ・エンティティにキャッシュ・ラインを無効にさせなければならない任意のキャッシュが、ＤＭＡコントローラ３１０に存在しないためである。
【００３８】
また別の実施形態が、Ｌ１キャッシュ４０４を有するＰ１  ４０２とＬ１キャッシュ４０８を有するＰ２  ４０６との２つのプロセッサを含むコンピュータ・システム４００を示す図４を用いて説明される。プロセッサＰ１及びＰ２は、システム・バス４１０を介してメイン・メモリ４１２に接続する。単一のスヌープ要求キャッシュ４１４がプロセッサＰ１に関連付けられ、別のスヌープ要求キャッシュ４１６がプロセッサＰ２に関連付けられる。各スヌープ要求キャッシュ４１４、４１６内の各エントリは、関連付けられたプロセッサがスヌープ要求を向けることができる異なるプロセッサを識別するフィールド又はフラグを含む。例えば、スヌープ要求キャッシュ４１４内のエントリは、プロセッサＰ２の識別フラグ、及びＰ１がデータを共有することができる、システム４００内のその他任意のプロセッサ（図示せず）の識別フラグを含む。
【００３９】
この実施形態の動作が図４に示される。共有属性を有するデータ・グラニュールへ書き込むと、プロセッサＰ１は、自身のＬ１キャッシュ４０４内でミスし、メイン・メモリ４１２へライトスルーする（ステップ１）。プロセッサＰ１は、自身に関連付けられたスヌープ要求キャッシュ４１４内のキャッシュ・ルックアップを実行する（ステップ２）。ヒットに応答して、プロセッサＰ１は、ヒットしているエントリ内のプロセッサ識別フラグを検査する。プロセッサＰ１は、自身がデータを共有し、ヒットしているエントリ内に識別フラグが設定されている任意のプロセッサ（例えば、ステップ３の破線によって示されるＰ２）へスヌープ要求を送ることを抑制する。プロセッサ識別フラグがクリアされ、プロセッサＰ１が、示されたプロセッサとデータ・グラニュールを共有する場合、プロセッサＰ１は、そのプロセッサへスヌープ要求を送り、ヒットしているスヌープ要求キャッシュ４１４のエントリ内にターゲット・プロセッサの識別フラグを設定する。スヌープ要求キャッシュ４１４のルックアップがミスした場合、プロセッサＰ１はエントリを割り当て、自身がスヌープ・キル要求を送る各プロセッサの識別フラグを設定する。
【００４０】
その他任意のプロセッサが、共有データ・グラニュールからのロードを実行し、自身のＬ１キャッシュ内でミスし、メイン・メモリからデータを取得した場合、そのプロセッサは、自身がデータ・グラニュールを共有する各プロセッサに関連付けられたスヌープ要求キャッシュ４１４、４１６内のキャッシュ・ルックアップを実行する。例えばプロセッサＰ２は、Ｐ１と共有するグラニュールから、メモリ・データを読み取る（ステップ４）。Ｐ２は、Ｐ１スヌープ要求キャッシュ４１４内のルックアップを実行し（ステップ５）、ヒットしている任意のエントリを検査する。Ｐ２の識別フラグがヒットしているエントリ内に設定されている場合、プロセッサＰ２は、（その他任意のプロセッサの識別フラグではなく）自身の識別フラグをクリアし、その後プロセッサＰ１が共有データ・グラニュールへ書き込んだ場合、Ｐ１がＰ２へスヌープ・キル要求を送ることを可能にする。Ｐ２の識別フラグがクリアされた、ヒットしているエントリは、キャッシュ４１４のミスとして扱われる（Ｐ２は動作しない）。
【００４１】
一般に、図４に示された、各プロセッサが、自身に関連付けられた単一のスヌープ要求キャッシュを有する実施形態において、各プロセッサは、共有データを書き込むと、自身に関連付けられたスヌープ要求キャッシュ内でのみルックアップを実行し、必要であればキャッシュ・エントリを割り当て、自身がスヌープ要求を送るプロセッサ全ての識別フラグを設定する。共有データを読み取ると、各プロセッサは、自身がデータを共有するその他全てのプロセッサに関連付けられたスヌープ要求キャッシュ内のルックアップを実行し、ヒットしている任意のエントリから自身の識別フラグをクリアする。
【００４２】
図５は、１つ又は複数の実施形態に従う、データ・キャッシュ・スヌープ要求を発行する方法を示す。方法の１つの局面は、ブロック５００において、共有属性を有するデータ・グラニュールへスヌープ・エンティティが書き込むと「開始」する。スヌープ・エンティティがプロセッサである場合、属性（例えば、共有及び／又はライトスルー）は、メモリ階層の下位レベルへのＬ１キャッシュのライトスルーを促す。ブロック５０２において、スヌープ・エンティティは、自身に関連付けられた１つ又は複数のスヌープ要求キャッシュ内の共有データ・グラニュールにルックアップを実行する。ブロック５０４において、スヌープ要求キャッシュ内で共有データ・グラニュールがヒットした場合（かつ、いくつかの実施形態において、スヌープ・エンティティがデータを共有するプロセッサの識別フラグが、ヒットしているキャッシュ・エントリ内に設定されている場合）、スヌープ・エンティティは、１つ又は複数のプロセッサのためのデータ・キャッシュ・スヌープ要求を抑制し、継続する。図５の目的のために、その後ブロック５００において別の共有データ・グラニュールを書き込むことによって、ブロック５１０において共有データ・グラニュールを読み取ることによって、又はこの方法に直接関係のないその他何らかのタスクを実行することによって、スヌープ・エンティティは「継続」することができる。共有データ・グラニュールがスヌープ要求キャッシュ内でミスした場合（又は、いくつかの実施形態において、ヒットしたが、ターゲット・プロセッサ識別フラグがクリアされている場合）、スヌープ・エンティティは、ブロック５０６において、スヌープ要求キャッシュ内のグラニュールにエントリを割り当て（又は、ターゲット・プロセッサ識別フラグを設定し）、ブロック５０８において、データを共有しているプロセッサへデータ・キャッシュ・スヌープ要求を送り、継続する。
【００４３】
方法の別の局面は、スヌープ・エンティティが、共有属性を有するデータ・グラニュールから読み取ると「開始」する。スヌープ・エンティティがプロセッサである場合、ブロック５１０において、プロセッサは自身のＬ１キャッシュ内でミスし、メモリ階層の下位レベルから共有データ・グラニュールを取得する。ブロック５１２において、プロセッサは、自身専用の（又は、エントリが自身の識別フラグを含む）１つ又は複数のスヌープ要求キャッシュ内のグラニュールにルックアップを実行する。ブロック５１４において、ルックアップがスヌープ要求キャッシュ内でミスした場合（又は、いくつかの実施形態において、ルックアップはヒットしたが、ヒットしているエントリ内のプロセッサの識別フラグがクリアされている場合）、プロセッサは継続する。ブロック５１４において、ルックアップがスヌープ要求キャッシュ内でヒットした場合（かつ、いくつかの実施形態において、ヒットしているエントリ内にプロセッサの識別フラグが設定されている場合）、ブロック５１６において、プロセッサは、ヒットしているエントリを無効にし（又は、いくつかの実施形態において、自身の識別フラグをクリアし）、その後継続する。
【００４４】
スヌープ・エンティティがＬ１キャッシュを有するプロセッサでない場合、例えばＤＭＡコントローラである場合、データ・グラニュールから読み取ると、エントリを検査し無効にする（又は自身の識別フラグをクリアする）ためにスヌープ要求キャッシュにアクセスする必要はない。グラニュールはキャッシュされていないので、他のエンティティがそのグラニュールへ書き込んだ場合、別のスヌープ・エンティティがキャッシュ・ラインのキャッシュ状態を無効にする、又は変更する可能性を排除する必要はない。この場合、方法は、図５内の破線矢印によって示されるように、ブロック５１０においてグラニュールから読み取った後継続する。すなわち、方法は、読取りを実行するスヌープ・エンティティがデータ・キャッシュを有するプロセッサであるか否かによって、共有データの読取りに関して異なる。
【００４５】
本明細書で説明された１つ又は複数の実施形態に従って、マルチプロセッサ・コンピュータ・システムにおける性能は、共有属性を有するデータのためのＬ１キャッシュ・コヒーレンスを保ちながら、余分なスヌープ要求の実行に関連する性能低下を回避することによって改善される。様々な実施形態が、この改善された性能を、当該技術において知られている二重タグのアプローチと比較して劇的に低減されたコストのシリコン領域で達成する。スヌープ要求キャッシュは、例えばＬ１キャッシュを完全に含む同じＬ２キャッシュによって支援されるプロセッサのためのソフトウェア定義のスヌーパ・グループ内のプロセッサのような、他の周知のスヌープ要求抑制技術を用いた実施形態に対する、改善された性能の利益を提供し、またそれらと両立できる。スヌープ要求キャッシュは、格納集合と両立でき、そのような実施形態では、プロセッサによって実行される格納動作の数が低減されることにより、低減されたサイズであることができる。
【００４６】
上記説明はライトスルーＬ１キャッシュと、スヌープ・キル要求の抑制との観点から示されたが、当業者は、その他のキャッシュ書込みアルゴリズム及び付随のスヌープ・プロトコルが、本明細書で説明され特許請求された発明技術、回路、及び方法を有利に用いることができることを理解するであろう。例えば、ＭＥＳＩ（修正、排他、共有、無効）キャッシュ・プロトコルにおいて、スヌープ要求は、ラインのキャッシュ状態を排他から共有へ変更するようにプロセッサに指示することができる。
【００４７】
本発明は、本発明の主要な特徴から逸脱することなく、本明細書に具体的に記載された方法以外の方法によって実行されうる。記載された実施形態は、全ての局面において、限定的ではなく例示的であるとして解釈されなければならず、特許請求の範囲と均等な範囲及び意味において生じる変更は全て、特許請求の範囲に包含されるように意図されている。
【図１】
2010517184.tif 000003
【図２】
2010517184.tif 000004
【図３】
2010517184.tif 000005
【図４】
2010517184.tif 000006
【図５】
2010517184.tif 000007
【国際調査報告】
2010517184.tif 000008
2010517184.tif 000009