(57)【要約】  組合された精密および非精密スヌープフィルタリングのための回路および方法である。メモリ（１０２）と、複数のプロセッサ（１０４、１０６、１０８、１１０）とが、相互接続回路（１５２）に結合される。複数のキャッシュ回路（たとえば１３８、１２２、１２４）が、複数のプロセッサ回路にそれぞれ結合される。第１のスヌープフィルタ（１４６）が相互接続に結合され、メモリのアドレスの第１のサブセットの個々のキャッシュラインによってスヌープ要求をフィルタリングするように構成される。第２のスヌープフィルタ（１４８）が相互接続に結合され、メモリのアドレスの第２のサブセットのキャッシュラインのグループによってスヌープ要求をフィルタリングするように構成される。各グループは複数のキャッシュラインを包含する。
2021533464.tif 000002
【特許請求の範囲】
【請求項１】
回路構成であって、
相互接続回路と、
前記相互接続回路に結合されたメモリと、
前記相互接続回路に結合された複数のプロセッサ回路と、
前記複数のプロセッサ回路にそれぞれ結合された複数のキャッシュ回路と、
前記相互接続に結合され、前記メモリのアドレスの第１のサブセットの個々のキャッシュラインによってスヌープ要求をフィルタリングするように構成された、第１のスヌープフィルタと、
前記相互接続に結合され、前記メモリのアドレスの第２のサブセットのキャッシュラインのグループによってスヌープ要求をフィルタリングするように構成された、第２のスヌープフィルタとを含み、各グループは複数のキャッシュラインを包含する、回路構成。
【請求項２】
前記第１のスヌープフィルタおよび前記第２のスヌープフィルタに結合された制御回路をさらに含み、前記制御回路は、前記第２のスヌープフィルタによってフィルタリングされるキャッシュラインのグループを、前記第１のスヌープフィルタによってフィルタリングされるキャッシュラインに再割り当てするように構成される、請求項１に記載の回路構成。
【請求項３】
前記制御回路はさらに、前記第１のスヌープフィルタへの再割り当てのためのキャッシュラインの前記グループを、キャッシュラインの前記グループへの参照の時間的局所性に基づいて選択するように構成される、請求項２に記載の回路構成。
【請求項４】
前記制御回路はさらに、前記第１のスヌープフィルタへの再割り当てのためのキャッシュラインの前記グループを、キャッシュラインの前記グループにおけるキャッシュラインの独占的所有権に基づいて選択するように構成される、請求項２に記載の回路構成。
【請求項５】
前記制御回路はさらに、前記第１のスヌープフィルタへの再割り当てのためのキャッシュラインの前記グループを、キャッシュラインの前記グループにおける頻繁にアクセスされるキャッシュラインの判定に基づいて選択するように構成される、請求項２に記載の回路構成。
【請求項６】
前記制御回路はさらに、
再割り当てのために選択された前記グループに属するキャッシュラインを判定し、
前記グループに属する前記キャッシュラインを前記第１のスヌープフィルタに再割り当てするように構成される、請求項２に記載の回路構成。
【請求項７】
前記制御回路はさらに、前記第１のスヌープフィルタからの第１のキャッシュラインを、前記第２のスヌープフィルタによってフィルタリングされる第１のグループに再割り当てするように構成される、請求項２〜６に記載の回路構成。
【請求項８】
前記制御回路はさらに、
前記第１のスヌープフィルタからの第１のキャッシュラインを、前記第２のスヌープフィルタによってフィルタリングされる第１のグループに再割り当てし、
前記第１のグループに属する、前記第１のスヌープフィルタによってフィルタリングされるキャッシュラインを判定し、
前記第１のグループに属する前記キャッシュラインのキャッシュライン状態を、グループ状態に集約し、
前記グループ状態を、前記第１のグループのタグと関連付けて格納し、
前記第１のスヌープフィルタから、前記第１のグループにおける前記キャッシュラインを除去するように構成される、請求項２〜６のいずれか１項に記載の回路構成。
【請求項９】
前記制御回路はさらに、
前記第１のスヌープフィルタからの第１のキャッシュラインを、前記第２のスヌープフィルタによってフィルタリングされる第１のグループに再割り当てし、
前記第１のスヌープフィルタのディレクトリがいっぱいであることに応答して、前記第１のスヌープフィルタからの前記第１のキャッシュラインを、前記第２のスヌープフィルタによってフィルタリングされる前記第１のグループに再割り当てするように構成される、請求項２〜６のいずれか１項に記載の回路構成。
【請求項１０】
前記制御回路はさらに、
前記第１のスヌープフィルタからの第１のキャッシュラインを、前記第２のスヌープフィルタによってフィルタリングされる第１のグループに再割り当てし、
前記第１のスヌープフィルタから前記第２のスヌープフィルタによってフィルタリングされる前記第１のグループに再割り当てされるべき前記第１のキャッシュラインを、前記第１のキャッシュラインが最も長い間使用されていないことに基づいて選択するように構成される、請求項２〜６のいずれか１項に記載の回路構成。
【請求項１１】
前記第１のスヌープフィルタは、個々のキャッシュラインの複数のキャッシュラインタグの格納のために構成された第１のメモリを含み、
前記第２のスヌープフィルタは、キャッシュラインのグループにそれぞれ関連付けられた複数のグループタグの格納のために構成された第２のメモリを含み、各グループタグは、複数のキャッシュラインにマッピングする、請求項１〜６のいずれか１項に記載の回路構成。
【請求項１２】
前記制御回路はさらに、
前記第２のスヌープフィルタによってフィルタリングされるキャッシュラインの第１のグループの所有者カウントを判定し、
前記第１のグループの前記所有者カウントが１に等しく、かつ、前記第１のグループのアクセスカウントがゼロよりも大きいことに応答して、前記第２のスヌープフィルタからのキャッシュラインの前記第１のグループのキャッシュラインを、前記第１のスヌープフィルタに再割り当てするように構成される、請求項２に記載の回路構成。
【請求項１３】
メモリのキャッシュラインを、複数のプロセッサのキャッシュ回路にキャッシュするステップと、
第１のスヌープフィルタが、前記メモリのアドレスの第１のサブセットの個々のキャッシュラインによってスヌープ要求をフィルタリングするステップと、
第２のスヌープフィルタが、前記メモリのアドレスの第２のサブセットのキャッシュラインのグループによってスヌープ要求をフィルタリングするステップとを含み、各グループは複数のキャッシュラインを包含する、方法。
【請求項１４】
制御回路が、前記第２のスヌープフィルタによってフィルタリングされるキャッシュラインのグループを、前記第１のスヌープフィルタによってフィルタリングされるキャッシュラインに再割り当てするステップをさらに含む、請求項１３に記載の方法。
【請求項１５】
前記第１のスヌープフィルタからの第１のキャッシュラインを、前記第２のスヌープフィルタによってフィルタリングされる第１のグループに再割り当てするステップをさらに含む、請求項１３〜１４のいずれか１項に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は一般に、キャッシュスヌープフィルタリングに関する。
【背景技術】
【０００２】
背景
キャッシュメモリは、マルチプロセッサデータ処理システムの共有メモリにおいて、性能を高めるために採用される。共有メモリ内のデータにアクセスするために必要とされる時間は、データのローカルコピーをキャッシュメモリに格納することによって減少させることができる。メモリは複数のプロセッサ間で共有されるため、各プロセッサがキャッシュメモリ内の最も最近の共有データを閲覧し、当該共有データへのアクセスを有することを保証するために、キャッシュコヒーレンシスキームが必要である。
【０００３】
スヌープベースのキャッシュコヒーレンシプロトコルでは、各プロセッサでのキャッシュ制御回路が、ローカルキャッシュメモリにキャッシュされるアドレスについて、メモリバスを監視する。キャッシュ制御回路が、別のプロセッサによるアドレスへの書き込み、および、そのアドレスがローカルにキャッシュされることを検出すると、キャッシュ制御回路は、ローカルコピーを無効としてマークすることができる。プロセッサが、キャッシュされ無効としてマークされたアドレスへのアクセスを求める場合、キャッシュ制御回路は、最新のデータをフェッチする。
【０００４】
スヌープ要求は、システム性能を低下させる場合がある。各キャッシュ制御回路は、他のすべてのキャッシュ制御回路に、キャッシュライン更新の表示をブロードキャストする。Ｎ個のプロセッサを有するシステムでは、スヌープトラフィックはＮ＊（Ｎ−１）に比例するであろう。多数のキャッシュラインがプロセッサ間で共有されないかもしれないため、スヌープトラフィックの多くは無駄になり得る。過剰なスヌープトラフィックは、共有メモリへのアクセスのために利用可能な帯域幅を減少させる。
【０００５】
キャッシュ制御回路は、不必要なスヌープトラフィックを減少させるためのスヌープフィルタを用いて実現され得る。一般に、スヌープフィルタは、どのアドレスがキャッシュされるかを追跡し、キャッシュされたアドレスを参照しない要求をフィルタリングする。さらに、スヌープフィルタはまた、どのプロセッサがキャッシュ可能アドレスのコピーを要求したかを、または当該プロセッサの数を追跡し、キャッシュされたアドレスへのスヌープをフィルタリングするだけではなく、それらの追跡されたアドレスがキャッシュされるようにするプロセッサへのスヌープもフィルタリングする。キャッシュフィルタは一般に、精密キャッシュフィルタおよび非精密キャッシュフィルタという２つのタイプがある。精密スヌープフィルタは、個々のキャッシュラインのアドレスによってスヌープ要求をフィルタリングする。非精密スヌープフィルタは、キャッシュラインのグループのアドレスによってスヌープ要求をフィルタリングする。
【発明の概要】
【課題を解決するための手段】
【０００６】
概要
開示される回路構成は、相互接続回路と、相互接続回路に結合されたメモリと、相互接続回路に結合された複数のプロセッサ回路とを含む。複数のキャッシュ回路が、複数のプロセッサ回路にそれぞれ結合される。第１のスヌープフィルタが相互接続回路に結合され、メモリのアドレスの第１のサブセットの個々のキャッシュラインによってスヌープ要求をフィルタリングするように構成される。第２のスヌープフィルタが相互接続回路に結合され、メモリのアドレスの第２のサブセットのキャッシュラインのグループによってスヌープ要求をフィルタリングするように構成される。各グループは複数のキャッシュラインを包含する。
【０００７】
方法は、メモリのキャッシュラインを、複数のプロセッサのキャッシュ回路にキャッシュするステップを含む。方法は、メモリのアドレスの第１のサブセットの個々のキャッシュラインによってスヌープ要求をフィルタリングする第１のスヌープフィルタと、メモリのアドレスの第２のサブセットのキャッシュラインのグループによってスヌープ要求をフィルタリングする第２のスヌープフィルタとを有する。各グループは複数のキャッシュラインを包含する。
【０００８】
他の特徴は、以下の詳細な説明および特許請求の範囲を考察することから認識されるであろう。
【０００９】
図面の簡単な説明
方法およびシステムのさまざまな局面および特徴は、以下の詳細な説明を考察し、図面を参照すれば、明らかになるであろう。
【図面の簡単な説明】
【００１０】
【図１】共有メモリと、共有メモリへのアクセスを有する複数のキャッシングエージェントとを有する例示的なシステムを示す図である。
【図２】精密スヌープフィルタ論理によって追跡される、精密に追跡されるキャッシュラインのディレクトリと、非精密スヌープフィルタ論理によって追跡される、非精密に追跡されるキャッシュラインのディレクトリとを示す図である。
【図３】精密スヌープフィルタリングと非精密スヌープフィルタリングとのハイブリッドであるスヌープフィルタリングプロセスのフローチャートを示す図である。
【図４】開示される方法および回路に従って構成され得る例示的なプログラマブルＩＣを示す図である。
【発明を実施するための形態】
【００１１】
詳細な説明
以下の説明では、多くの特定の詳細が、ここに提示される特定の例を説明するために述べられる。しかしながら、１つ以上の他の例および／またはこれらの例の変形が、以下に与えられるすべての特定の詳細がなくても実践され得るということは、当業者には明らかであるはずである。他の例では、ここでの例の説明を不明瞭にしないように、周知の特徴は詳細には説明されていない。例示を容易にするために、異なる図において、同じ参照番号が、同じ要素、または同じ要素の追加の例を指すために使用されてもよい。
【００１２】
精密および非精密スヌープフィルタリングスキームは、スケールと精度との間のトレードオフを提示する。精密スヌープフィルタは、より低いスケーラビリティを提供するものの、正確なフィルタリングを提供する。精密スヌープフィルタは、個々のキャッシュラインのアドレスによってスヌープ要求をフィルタリングする。このため、精密スヌープフィルタによって発行されたスヌープ要求は典型的にはスプリアスではなく、追跡されるキャッシング要素のみをターゲットとする。精密スヌープフィルタは、うまくスケーリングしない。なぜなら、スヌープフィルタのサイズと、キャッシング要素の数と、すべてのキャッシング要素にわたって追跡されているキャッシュの累積サイズとの間で、トレードオフが必要とされるためである。
【００１３】
非精密スヌープフィルタは、より低い精度を提供するものの、スケーラビリティを提供する。非精密スヌープフィルタは、キャッシュラインのセットにわたってキャッシュ状態の集約的存在を追跡し、追跡は、キャッシュラインに基づくものよりも粗いきめで行なわれる。このため、非精密スヌープフィルタは、精密スヌープフィルタと比較して、より高いスケーラビリティを提供する。非精密スヌープフィルタに存在するとしてマークされた特定のキャッシュラインは、追跡されているキャッシング要素にわたって存在していてもいなくてもよいため、非精密スヌープフィルタによって発行されたスヌープ要求はスプリアスかもしれない。非精密スヌープフィルタはうまくスケーリングし、より多数の追跡されるキャッシング要素と、追跡されるキャッシング要素にわたる追跡されるキャッシュサイズのより大きい累積サイズとを提供する。
【００１４】
開示される回路および方法は、精密スヌープフィルタおよび非精密スヌープフィルタ双方の利点を提供するハイブリッドスヌープフィルタを提供する。ハイブリッドスヌープフィルタは、精密スヌープフィルタおよび非精密スヌープフィルタ双方を採用する。加えて、精度とスケールとの最適なバランスのために、複数の処理ユニットのキャッシュ状態のきめの細かい精密な追跡ときめの粗い非精密な追跡とを調節するために、回路が提供される。回路および方法はそれにより、精密スヌープフィルタリングのみを採用する、または非精密スヌープフィルタリングのみを採用するアプローチの欠点を回避する。
【００１５】
ハイブリッドスヌープフィルタは、プロセッサ間で共有されるメモリを有するとともに、プロセッサと共有メモリとの間、およびプロセッサ間の二地点間接続を提供する相互接続回路を有するマルチプロセッサシステムにおいて特に有用である。プロセッサの各々は、ローカルキャッシュを有する。精密スヌープフィルタは、個々のキャッシュラインのアドレスによってスヌープ要求をフィルタリングし、非精密スヌープフィルタは、キャッシュラインのグループを包含するアドレスによってスヌープ要求をフィルタリングする。精密スヌープフィルタリングおよび非精密スヌープフィルタリングの各々の欠点は、スヌープフィルタの容量およびアクセスパターンに基づいて、精密スヌープフィルタと非精密スヌープフィルタとの間でキャッシュラインの追跡を再割り当てすることによって減少させることができる。
【００１６】
図１は、共有メモリ１０２と、共有メモリへのアクセスを有する複数のキャッシングエージェント１０４、１０６、１０８、…１１０とを有する例示的なシステムを示す。各キャッシングエージェントは、共有メモリ内のデータにアクセス可能であるとともに、共有メモリからのデータのコピーをローカルキャッシュメモリにローカルに格納可能である処理回路を含む。例示的なシステムでは、キャッシングエージェント１０４、１０６、１０８、…、１１０は、プロセッサ回路１１４、１１６、１１８、１２０をそれぞれ含む。プロセッサ回路の例は、中央処理装置（central processing unit：ＣＰＵ）、グラフィック処理装置（graphics processing unit：ＧＰＵ）、デジタル信号プロセッサ（digital signal processor：ＤＳＰ）、フィールドプログラマブルゲートアレイ（field programmable gate array：ＦＰＧＡ）において実現される回路、特定用途向け集積回路（application specific integrated circuit：ＡＳＩＣ）において実現される回路、および、前述のもののさまざまな組合せを含む。キャッシングエージェントおよび共有メモリ１０２は、部品間の二地点間接続を提供するスイッチまたは共有バスなどの相互接続回路によって結合される。
【００１７】
キャッシングエージェント１０４、１０６、１０８、…、１１０の各々は、キャッシュ回路を含む。キャッシュ回路は、キャッシュメモリとキャッシュ制御回路とを含む。キャッシュメモリは、キャッシュラインのデータのためのストレージを提供し、セットアソシアティブであってもよく、キャッシュラインのためのタグを含み得る。キャッシュ制御回路は、変換索引バッファ（translation look-aside buffer：ＴＬＢ）を含んでいてもよく、ローカルキャッシュまたは共有メモリからのデータの検索、共有メモリへのデータの書き戻し、外部スヌープ要求のサービス、それらのスヌープ要求の結果としてのキャッシュされたデータおよびキャッシュ状態の管理、キャッシュ追い出しアルゴリズムを介したキャッシュメモリにおける利用可能なストレージの管理、および、キャッシュにおけるキャッシュラインの無効化などのために制御することができる。キャッシングエージェント１０４、１０６、１０８、および１１０は、キャッシュ制御回路１３８、１４０、１４２、および１４４をそれぞれ含む。
【００１８】
精密に追跡されるキャッシュおよび非精密に追跡されるキャッシュは、キャッシングエージェントの各々において別々のブロックとして示されているが、精密に追跡されるキャッシュラインは、キャッシュメモリにおいて、非精密に追跡されるキャッシュラインと交互配置され得る。精密スヌープフィルタ１４６は、精密に追跡されるキャッシュラインのアドレスを追跡し、非精密スヌープフィルタ１４８は、非精密に追跡されるキャッシュラインのアドレスを追跡する。精密に追跡されるキャッシュラインは、個々のキャッシュラインのアドレスによって追跡される。非精密スヌープフィルタリングでは、キャッシュラインのアドレスは、グループによって追跡される。精密に追跡されるキャッシュラインごとに、精密スヌープフィルタは、キャッシュラインのアドレスを格納する。非精密に追跡されるキャッシュラインについては、非精密スヌープフィルタは、複数のキャッシュラインのアドレスにマッピングするタグを格納する。精密スヌープフィルタ１４６が追跡する共有メモリのアドレスのサブセットは、キャッシングエージェント１０４、１０６、１０８、および１１０においてブロック１２２、１２６、１３０、および１３４としてそれぞれ示され、非精密スヌープフィルタ１４８が追跡する共有メモリのアドレスのサブセットは、キャッシングエージェント１０４、１０６、１０８、および１１０においてブロック１２４、１２８、１３２、および１３６としてそれぞれ示される。
【００１９】
精密スヌープフィルタ１４６および非精密スヌープフィルタ１４８は、制御回路１５０とともに、相互接続１５２に結合されたホームエージェント１１２によってホストされる。ホームエージェントは、キャッシングエージェント間のコヒーレントトランザクションをサービスする回路である。ホームエージェントは、所与のアドレス空間のためのコヒーレンシを維持するものであり、メインメモリのためのメモリコントローラ回路である必要はない。所与のトランザクションのフローによって必要とされるようなデータおよび所有権応答が、ホームエージェントによって提供される。
【００２０】
精密スヌープフィルタ（precise snoop filter：ＰＳＦ）１４６は、個々のキャッシュラインのアドレスによってスヌープ要求をフィルタリングする。キャッシュラインＡへのアクセスのために、ＰＳＦは、ローカルキャッシュにキャッシュラインＡを有するキャッシングエージェントへのスヌープ要求の送信を制御する。非精密スヌープフィルタ（imprecise snoop filter：ＩＳＦ）１４８は、キャッシュラインのグループによってスヌープ要求をフィルタリングする。キャッシュラインＡへのアクセスのために、ＩＳＦは、キャッシュラインＡと同じグループにマッピングするキャッシュラインを有し、キャッシュラインＡを含むキャッシングエージェントへのスヌープ要求の送信を制御する。
【００２１】
制御回路１５０は、ＰＳＦによって追跡されるキャッシュラインとＩＳＦによって追跡されるキャッシュラインのグループとの間での割り振りおよび割り振り解除および／または移行を実施する。キャッシュラインの履歴アクセスパターンに依存して、キャッシングエージェントは潜在的に、精密に追跡されるキャッシュラインと非精密に追跡されるキャッシュラインとの組合せを有するか、すべて精密に追跡されるキャッシュラインを有するか、または、すべて非精密に追跡されるキャッシュラインを有し得る。異なるキャッシングエージェントは、キャッシュされたアドレスの精密に追跡される部分と非精密に追跡される部分との間で、異なる割り振りを有し得る。
【００２２】
制御回路１５０は、精密に追跡されるキャッシュラインを非精密に追跡されるグループに再割り当てすることができ、非精密に追跡されるグループを精密に追跡されるキャッシュラインに再割り当てすることができる。ＰＳＦからＩＳＦへのキャッシュラインの追跡の再割り当ては、新しいキャッシュラインアドレスのための空間を作るための、ＰＳＦからのキャッシュラインの追い出しに応答するものであってもよい。追い出されたキャッシュラインをカバーするために、新しいグループをＩＳＦに追加することができる。ＩＳＦからＰＳＦへのキャッシュラインの再割り当ては、参照されるキャッシュラインが１つのキャッシングエージェントによって独占的に所有されていること、または、キャッシュラインアドレスへの参照の時間的局所性といった、ポリシー選択に応答するものであってもよい。
【００２３】
他のポリシー選択は、静的に割り振られるアドレスウィンドウへのアクセスと、動的に判定されるアドレスホットスポットへのアクセスとを含み得る。静的に割り振られるアドレスウィンドウは、性能が重要である同期データ構造が複数のプロセッサによって共有される、ある範囲のアドレスであり得る。ウィンドウ内のデータへのアクセスまたは所有権についての同時の要求は頻繁に生じ、アドレス範囲におけるキャッシュラインは、ＰＳＦによる管理にとって好適である。
【００２４】
動的に判定されるアドレスホットスポットは、キャッシュラインへのアクセスの長期監視を通して識別され得る。短期監視をカバーする、典型的なＬＲＵベースの割り振りとは対照的に、アドレスホットスポット検出、およびその後のＰＳＦにおける優先的割り振りは、頻繁にアクセスされるアドレス、または、特定のアドレスについての頻繁な競合の長期判定に基づく。
【００２５】
図２は、精密スヌープフィルタ論理２０２によって追跡される、精密に追跡されるキャッシュラインのディレクトリ２０４と、非精密スヌープフィルタ論理２０６によって追跡される、非精密に追跡されるキャッシュラインのディレクトリ２０８とを示す。ディレクトリ２０４は、キャッシュラインタグによってアドレス指定されるメモリ回路として実現可能であり、ディレクトリ２０８は、キャッシュグループタグによってアドレス指定されるメモリ回路として実現可能である。
【００２６】
ディレクトリ２０４における各エントリは、キャッシュラインタグ２１０と、ライン状態２１２と、存在ベクトル２１４とを含む。キャッシュラインタグは、ＰＳＦ論理２０２によって追跡され、ライン状態および存在ベクトルによって記述されるキャッシュラインを識別する。ライン状態は、参照されるキャッシュラインが共有されるか、排他的に保持されるか、有効であるかなどを示すことができる。存在ベクトルは、各ビットが特定のキャッシングエージェントに対応するビットのグループであってもよく、ビットの状態は、参照されるキャッシュラインがキャッシングエージェントによってキャッシュされるかどうかを示す。
【００２７】
ディレクトリ２０８における各エントリは、キャッシュグループタグ２１６と、グループ状態２１８と、存在ベクトル２２０とを含む。キャッシュグループタグは、ＩＳＦ論理２０６によって追跡され、グループ状態および存在ベクトルによって記述されるキャッシュラインのグループを識別する。グループ状態は、グループの任意のキャッシュラインが共有されるか、排他的に保持されるか、有効であるかなどを示すことができる。存在ベクトルは、各ビットが特定のキャッシングエージェントに対応するビットのグループであってもよく、ビットの状態は、グループの任意のキャッシュラインがキャッシングエージェントによってキャッシュされるかどうかを示す。
【００２８】
各グループ状態２１８は、アクセスカウントを含み得る。アクセスカウントは、キャッシングエージェントによる関連付けられたキャッシュグループタグへのアクセスに応答してインクリメントされ、関連付けられたキャッシュグループタグによって参照されるキャッシュラインについての追い出し通知に応答してデクリメントされる。アクセスカウントを維持することは、キャッシュグループタグに関連付けられたアクセスカウントが０までデクリメントされることに応答して、ＩＳＦからのキャッシュグループタグの自動追い出しをサポートする。アクセスカウントを維持することは、同じキャッシングエージェントによる同じキャッシュグループにおけるキャッシュラインへの複数のアクセスの追跡を可能にする。アクセスカウントがなければ、キャッシュグループにおける１つのキャッシュラインについての１つのキャッシングエージェントによる追い出し通知は作用されないであろう。なぜなら、存在ベクトルは、キャッシングエージェントのキャッシュに存在するキャッシュグループの他のキャッシュラインのために維持され続けなければならないためである。
【００２９】
図３は、精密スヌープフィルタリングと非精密スヌープフィルタリングとのハイブリッドであるスヌープフィルタリングプロセスのフローチャートを示す。制御回路１５０は、動作のうちのさまざまな動作を行ない、ＰＳＦ１４６およびＩＳＦ１４８において行なわれる他の動作を調整する。
【００３０】
ブロック３０２で、ＰＳＦ−ＩＳＦ割り振り回路は、たとえば特定のキャッシュラインＡを参照するコヒーレンス要求を受信する。キャッシュコヒーレント要求は、書き込み要求と読み出し要求とを含む。キャッシュコヒーレント要求が書き込みまたはは読み出し（もしくは、書き込みまたは読み出しとして分類できない他のタイプ）であるかどうかを通信することに加えて、要求はまた、典型的には、他のキャッシュにおけるキャッシュラインの以前の状態および要求タイプに基づいて、追加情報を通信する。たとえば、キャッシュコヒーレント要求は、キャッシュラインを書き込むキャッシングエージェントが排他的なコピーを保管したこと（したがって、他のキャッシュに通信することなく将来の書き込みを行ないたいこと）または共有のコピーを保管したことを通信することができる。別の例は、キャッシュラインを読み出すキャッシングエージェントが排他的なコピーを受信したいこと（したがって、他のキャッシュに通信することなく将来の書き込みを行ないたいこと）または共有のコピーを受信したいことを通信するキャッシュコヒーレント要求である。
【００３１】
決定ブロック３０４で、制御回路１５０は、参照されるキャッシュラインＡがＰＳＦ１４６またはＩＳＦ１４８のいずれかに存在するかどうかをチェックする。ＰＳＦにおける存在は、コヒーレンス要求において特定されたキャッシュラインのアドレスを、ＰＳＦにおけるキャッシュラインタグと比較することによって判定され得る。同様に、ＩＳＦにおける存在は、特定されたキャッシュラインアドレスのグループタグを判定し、次に、判定されたグループタグがＩＳＦに存在するかどうかを判定することによって判定され得る。キャッシュラインアドレスをキャッシュグループタグにマッピングするために、ハッシュ関数が使用され得る。
【００３２】
決定ブロック３０６は、キャッシュアドレスラインがＰＳＦ１４６またはＩＳＦ１４８において追跡されるかどうかに基づいてプロセスを方向付ける。キャッシュアドレスラインＡがＰＳＦにおいて追跡されていることに応答して、ブロック３０８で、制御回路１５０は、ＰＳＦにおけるキャッシュラインＡの状態をコヒーレンス要求と一致するように更新し、必要であれば、ＰＳＦにおけるキャッシュラインに関連付けられた存在ベクトルにおいて示されたキャッシングエージェントのキャッシュコントローラにコヒーレンス要求を送信する。キャッシュコヒーレンス要求は、存在ベクトルのみが更新される共有グループ状態および共有読み出し要求のために送信される必要はない。
【００３３】
キャッシュラインＡがＩＳＦ１４８において追跡されるキャッシュラインのグループに属することに応答して、ブロック３１０で、割り振り回路は、ＩＳＦにおけるグループタグに関連付けられた存在ベクトルにおいて示されたキャッシングエージェントのキャッシュコントローラにコヒーレンス要求を送信する。しかしながら、キャッシュラインＡのグループに存在するキャッシュラインを有するすべてのプロセッサにキャッシュコヒーレンス要求を送信することが必要ではない、要求タイプとＩＳＦにおけるキャッシュグループ状態との組合せがある。たとえば、キャッシュコヒーレンス要求は、存在ベクトルのみが更新される共有グループ状態および共有読み出し要求のために送信される必要はない。
【００３４】
決定ブロック３１２で、制御回路１５０は、キャッシュラインＡをＰＳＦ１４６に追加するために、キャッシュラインＡが属するグループをＩＳＦ１４８から除去するべきか、または、グループをＩＳＦから単純に除去するべきかを判定する。判定は、用途に特有のポリシー選択に基づき得る。たとえば、いくつかの用途は、より高い精度およびより低いスケーラビリティを必要とするかもしれず、それは、ＩＳＦからＰＳＦへの動きに対する抵抗がより小さいポリシーをもたらすであろう。いくつかの用途は、より高いスケーラビリティおよびより低い精度を必要とするかもしれず、それは、ＩＳＦからＰＳＦへの動きに対する抵抗がより大きいポリシーをもたらすであろう。ＩＳＦからＰＳＦへのキャッシュラインの再割り当てをトリガするために使用され得る単純な例示的指標は、キャッシングエージェントによってキャッシュラインの独占的所有権を特定するコヒーレンス要求である。キャッシュラインの共有コピーを特定するコヒーレンス要求は、ＩＳＦからＰＳＦへのキャッシュラインの再割り当てをトリガしないであろう。同様に、制御回路が、キャッシュラインは単一の所有者においてのみ存在し得ること、および、それがまた、ＩＳＦにおける１という所有者カウントと一致することを、キャッシュコヒーレンス要求から判定する場合、グループはＰＳＦに再割り当てされ得る。別の例は、制御回路が、要求を処理した後のキャッシュラインの所有者カウントは１になるであろうということを、キャッシュコヒーレンス要求のタイプから判定することである。所有者カウントは、存在ベクトルにおいて設定されたビット数によって示され得る。
【００３５】
グループにおけるキャッシュラインへのアクセスの数を追跡し、所定期間内にアクセスの数がしきい値数に達すると（時間的局所性）、キャッシュラインのグループをＩＳＦ１４８からＰＳＦ１４６に再割り当てすることによって、ポリシーを多かれ少なかれ限定的にすることができる。キャッシュラインをＰＳＦに再割り当てするべきでないという判定に応答して、ブロック３１４で、制御回路は、キャッシュラインＡが属するキャッシュラインのグループのグループ状態を更新する。状態は、キャッシュコヒーレンス要求のタイプに基づく。
【００３６】
ブロック３１０での、アクセスカウントがゼロまでデクリメントされることに応答して、キャッシュラインをＰＳＦ１４６に再割り当てするべきである、または、単純に追い出すべきであるという判定に応答して、ブロック３１６で、割り振り回路は、キャッシュラインＡが属するキャッシュラインのグループをＩＳＦ１４８から追い出す。キャッシュラインのグループを追い出す際、割り振り回路は、ＩＳＦからグループタグを除去する。決定ブロック３１８およびブロック３３０によって示されるように、アクセスカウントがゼロである場合、さらなるアクションは必要とされない。アクセスカウントがゼロに等しくない場合、決定ブロック３１８は、プロセスをブロック３２０に方向付けて、グループにおけるキャッシュラインのすべてをＰＳＦに追加し始める。ＩＳＦから追い出されたキャッシュラインのグループの状態は、グループにおけるすべてのキャッシュラインに適用可能であるため、個々のキャッシュラインの状態を判定することができず、それにより、グループにおけるすべてのキャッシュラインがＰＳＦに追加される。ＩＳＦから除去されたグループの状態は、ＰＳＦに追加されたキャッシュラインの各々に適用される。キャッシュラインをグループタグにマッピングするために、ハッシュ関数を使用することができ、再割り当てのためのキャッシュラインアドレス全体を生成するために、ハッシュ関数の逆数を使用することができる。
【００３７】
ＩＳＦ１４８からＰＳＦ１４６への移行の効率は、キャッシュグループにおけるすべてのキャッシュラインのための状態クエリスヌープを、存在ベクトルによって示された所有者に送信することによって高められ得る。このため、キャッシングエージェントのうちのいずれかに依然として存在するキャッシュラインのみが、ＰＳＦにおいて追跡される。さらに、キャッシングエージェントにわたる更新された累積キャッシュ状態も、ＰＳＦにおいて次に追跡され得る。状態クエリスヌープの全体的な効果は、ＰＳＦにおける場所および状態の精密性を取り戻すことである。
【００３８】
ブロック３２０、３２２、３２４、３２６、および３２８の処理は、ＩＳＦ１４８から追い出されたグループからＰＳＦ１４６に追加されたキャッシュラインごとに行なわれ得る。同様に、ブロック３２０、３２２、３２４、３２６、および３２８の処理は、決定ブロック３０４で判定されるように、ＩＳＦおよびＰＳＦのいずれも、参照されるキャッシュラインを追跡していない場合に行なわれてもよい。
【００３９】
決定ブロック３２０で、制御回路１５０は、ＰＳＦ１４６が、追い出されたキャッシュラインのために、または、決定ブロック３０４で判定された見当たらないキャッシュラインのために利用可能である空間を有するかどうかを判定する。ディレクトリ２０４は、最大数のキャッシュラインタグおよび状態のための格納空間を有する。空間が利用可能である場合、ブロック３２２で、制御回路は、ＰＳＦディレクトリにおけるスロットをキャッシュラインに割り当て、それに応じてタグ、キャッシュライン状態、および存在ベクトルを更新する。
【００４０】
空間がＰＳＦ１４６においてキャッシュラインのために利用可能ではない場合、ブロック３２４で、制御回路は、ＰＳＦディレクトリにおいてキャッシュラインのための空間を作り、キャッシュラインをＰＳＦからＩＳＦ１４８に再割り当てするための追い出し処理の実行を開始する。ブロック３２６で、制御回路は、最も長い間アクセスされていないキャッシュラインといった、ＰＳＦからの追い出しのためのキャッシュラインを選択し、追い出しのために選択されたキャッシュラインと同じグループに属する、ＰＳＦにおけるすべてのキャッシュラインを判定する。同じグループに属するキャッシュラインも追い出される。
【００４１】
ＰＳＦ１４６からキャッシュラインを追い出す際、ブロック３２２および３２８の処理の前に、キャッシュラインのタグ、状態、および存在情報が、ＩＳＦ１４８に追加するために情報を保存するために読み出される。ブロック３２８で、制御回路は、追い出しのために選択されたキャッシュラインを含むキャッシュラインのグループのために、ＩＳＦにおけるスロットを割り振る。また、ブロック３２８で、制御回路は、追い出しのために選択されたキャッシュラインの集約されたキャッシュ状態（グループにおけるキャッシュライン状態の論理ＯＲ）と存在ベクトルとを、ＩＳＦにおける割り振られたスロットに格納する。キャッシュライングループの生成および追い出しに関連付けられた処理性能は、キャッシュラインをキャッシュグループタグにマッピングするためにハッシュ関数を使用することによって高められる。ＰＳＦからＩＳＦへのキャッシュラインの追い出しはそれにより、グループにおけるキャッシュライン間の空間的および／または時間的関係を減少させることができる。ブロック３２２で、制御回路は、上述のようにキャッシュラインをＰＳＦに追加する。
【００４２】
図４は、開示される方法および回路に従って構成され得る例示的なプログラマブルＩＣ４０２を示す。プログラマブルＩＣは、システムオンチップ（System On Chip：ＳＯＣ）とも呼ばれてもよく、それは、プロセッササブシステム４１０とプログラマブル論理サブシステム４３０とを含む。プロセッササブシステム４１０は、ユーザプログラムの実行を介してユーザ設計のソフトウェア部分を実現するようにプログラムされてもよい。プログラムは、構成データストリームの一部として特定されてもよく、または、オンチップもしくはオフチップデータ記憶デバイスから検索されてもよい。プロセッササブシステム４１０は、１つ以上のソフトウェアプログラムを実行するためのさまざまな回路４１２、４１４、４１６、および４１８を含んでいてもよい。回路４１２、４１４、４１６、および４１８は、たとえば、１つ以上のプロセッサコア、浮動小数点ユニット（floating point unit：ＦＰＵ）、割り込み処理ユニット、オンチップメモリ、メモリキャッシュ、および／またはキャッシュコヒーレント相互接続を含んでいてもよい。
【００４３】
プログラマブルＩＣ４０２のプログラマブル論理サブシステム４３０は、ユーザ設計のハードウェア部分を実現するようにプログラムされてもよい。たとえば、プログラマブル論理サブシステムは、複数のプログラマブルリソース４３２を含んでいてもよく、それらは、構成データストリームにおいて特定される回路のセットを実現するようにプログラムされてもよい。プログラマブルリソース４３２は、たとえば、プログラマブル相互接続回路、プログラマブル論理回路、および構成メモリセルを含む。プログラマブル論理は、たとえば関数発生器、レジスタ、算術論理などを含み得るプログラマブル要素を使用して、ユーザ設計の論理を実現する。プログラマブル相互接続回路は、プログラマブル相互接続点（programmable interconnect point：ＰＩＰ）によって相互接続されるさまざまな長さの多数の相互接続線を含んでいてもよい。
【００４４】
プログラマブルリソース４３２は、構成データストリームを構成メモリセルにロードすることによってプログラムされてもよく、構成メモリセルは、プログラマブル相互接続回路およびプログラマブル論理回路がどのように構成されるかを定義する。たとえば、構成可能ラッチのための構成メモリセルを第１の値に設定することは、構成可能ラッチに、単一エッジ駆動型ラッチとして動作するよう指示してもよい。構成メモリセルを第２の値に設定することは、構成可能ラッチに、二重エッジ駆動型ラッチとして動作するよう指示してもよい。個々のメモリセルの集団状態は次に、プログラマブルリソース４３２の機能を決定する。構成データは、外部デバイスによって、メモリから（たとえば外部ＰＲＯＭから）読み出され、または、プログラマブルＩＣ４０２に書き込まれ得る。いくつかの実現化例では、プログラマブル論理サブシステム４３０に含まれる構成コントローラ４３４は、プログラマブルＩＣに結合された不揮発性メモリから構成データを検索し、構成データを構成メモリセルにロードすることによって、プログラマブルＩＣの電源を入れることに応答してプログラマブルリソースをプログラムしてもよい。いくつかの他の実現化例では、構成データは、プロセッササブシステム４１０によって実行される起動プロセスによって構成メモリセルにロードされてもよい。
【００４５】
プログラマブルＩＣ４０２は、プロセッササブシステム４１０をプログラマブル論理サブシステム４３０内に実現された回路と相互接続するためのさまざまな回路を含んでいてもよい。この例では、プログラマブルＩＣ４０２は、プロセッササブシステム４１０およびプログラマブル論理サブシステム４３０のさまざまデータポート間でデータ信号をルーティングすることができるコアスイッチ４２６を含む。コアスイッチ４２６はまた、プログラマブル論理または処理サブシステム４１０および４３０のいずれかと、内部データバスなどのプログラマブルＩＣのさまざまな他の回路との間で、データ信号をルーティングしてもよい。これに代えて、またはこれに加えて、プロセッササブシステム４１０は、コアスイッチ４２６をバイパスして、プログラマブル論理サブシステムと直接接続するためのインターフェイスを含んでいてもよい。そのようなインターフェイスは、たとえば、ＡＲＭによって公開されているようなＡＭＢＡ  ＡＸＩプロトコル仕様（ＡＸＩ）を使用して実現されてもよい。
【００４６】
いくつかの実現化例では、プロセッササブシステム４１０およびプログラマブル論理サブシステム４３０はまた、メモリコントローラ４２１を介して、オンチップメモリ４２２またはオフチップメモリ（図示せず）のメモリ場所に読み出しまたは書き込みを行なってもよい。メモリコントローラ４２１は、ダブルデータレート（Double Data Rate：ＤＤＲ）２、ＤＤＲ３、低電力（Low Power：ＬＰ）ＤＤＲ２タイプのメモリを、１６ビット、３２ビット、ＥＣＣ付き１６ビットなどであろうとなかろうと含むものの、それらに限定されない、１つ以上の異なるタイプのメモリ回路と通信するように実現され得る。メモリコントローラ４２１が通信できる異なるメモリタイプのリストは、例示のみのために提供されており、限定として、または網羅的であるよう意図されてはいない。図４に示すように、プログラマブルＩＣ４０２は、メモリ管理ユニット４２０と、特定のメモリ場所にアクセスするためにサブシステム４１０および４３０によって使用される仮想メモリアドレスを、メモリコントローラ４２１によって使用される物理メモリアドレスに変換する変換索引バッファ４２４とを含んでいてもよい。
【００４７】
プログラマブルＩＣは、外部回路とのデータの通信のための入力／出力（Ｉ／Ｏ）サブシステム４５０を含んでいてもよい。Ｉ／Ｏサブシステム４５０は、たとえばフラッシュメモリタイプのＩ／Ｏデバイス、より高性能のＩ／Ｏデバイス、より低性能のインターフェイス、デバッギングＩ／Ｏデバイス、および／またはＲＡＭ  Ｉ／Ｏデバイスを含む、さまざまなタイプのＩ／Ｏデバイスまたはインターフェイスを含んでいてもよい。
【００４８】
Ｉ／Ｏサブシステム４５０は、４６０Ａおよび４６０Ｂとして示される１つ以上のフラッシュメモリインターフェイス４６０を含んでいてもよい。たとえば、フラッシュメモリインターフェイス４６０のうちの１つ以上は、４ビット通信のために構成されたクワッドシリアルペリフェラルインターフェイス（Quad-Serial Peripheral Interface：ＱＳＰＩ）として実現され得る。フラッシュメモリインターフェイス４６０のうちの１つ以上は、パラレル８ビットＮＯＲ／ＳＲＡＭタイプのインターフェイスとして実現され得る。フラッシュメモリインターフェイス４６０のうちの１つ以上は、８ビットおよび／または１６ビット通信のために構成されたＮＡＮＤインターフェイスとして実現され得る。記載された特定のインターフェイスは、限定のためではなく例示のために提供されているということが理解されるべきである。異なるビット幅を有する他のインターフェイスを使用することができる。
【００４９】
Ｉ／Ｏサブシステム４５０は、フラッシュメモリインターフェイス４６０よりも高いレベルの性能を提供する１つ以上のインターフェイス４６２を含み得る。インターフェイス４６２Ａ〜４６２Ｃの各々は、ＤＭＡコントローラ４６４Ａ〜４６４Ｃにそれぞれ結合され得る。たとえば、インターフェイス４６２のうちの１つ以上は、ユニバーサルシリアルバス（Universal Serial Bus：ＵＳＢ）タイプのインターフェイスとして実現され得る。インターフェイス４６２のうちの１つ以上は、ギガビットイーサネット（登録商標）タイプのインターフェイスとして実現され得る。インターフェイス４６２のうちの１つ以上は、セキュアデジタル（Secure Digital：ＳＤ）タイプのインターフェイスとして実現され得る。
【００５０】
Ｉ／Ｏサブシステム４５０はまた、インターフェイス４６２よりも低いレベルの性能を提供するインターフェイス４６６Ａ〜４６６Ｄなどの１つ以上のインターフェイス４６６を含んでいてもよい。たとえば、インターフェイス４６６のうちの１つ以上は、汎用Ｉ／Ｏ（General Purpose I/O：ＧＰＩＯ）タイプのインターフェイスとして実現され得る。インターフェイス４６６のうちの１つ以上は、ユニバーサル非同期受信／送信機（Universal Asynchronous Receiver/Transmitter：ＵＡＲＴ）タイプのインターフェイスとして実現され得る。インターフェイス４６６のうちの１つ以上は、シリアルペリフェラルインターフェイス（ＳＰＩ）バスタイプのインターフェイスの形で実現され得る。インターフェイス４６６のうちの１つ以上は、コントローラエリアネットワーク（Controller-Area-Network：ＣＡＮ）タイプのインターフェイス、および／または、相互集積回路（inter-integrated circuit：Ｉ２Ｃ）タイプのインターフェイスの形で実現され得る。インターフェイス４６６のうちの１つ以上はまた、タイマータイプのインターフェイスの形で実現され得る。
【００５１】
Ｉ／Ｏサブシステム４５０は、プロセッサＪＴＡＧ（ＰＪＴＡＧ）インターフェイス４６８Ａおよびトレースインターフェイス４６８Ｂなどの１つ以上のデバッグインターフェイス４６８を含み得る。ＰＪＴＡＧインターフェイス４６８Ａは、プログラマブルＩＣ４０２のための外部デバッグインターフェイスを提供することができる。トレースインターフェイス４６８Ｂは、デバッグを受信するためのポートを提供し、たとえば、プロセッササブシステム４１０またはプログラマブル論理サブシステム４３０からの情報をトレースすることができる。
【００５２】
図示されるように、インターフェイス４６０、４６２、４６６、および４６８の各々は、マルチプレクサ４７０に結合され得る。マルチプレクサ４７０は、プログラマブルＩＣ４０２の外部ピン、たとえば、プログラマブルＩＣ４０２が内部に配置されるパッケージのボールに直接ルーティングまたは結合され得る複数の出力を提供する。たとえば、プログラマブルＩＣ４０２のＩ／Ｏピンは、インターフェイス４６０、４６２、４６６、および４６８間で共有され得る。ユーザは、インターフェイス４６０〜４６８のうちのどれが使用されるべきか、ひいては、マルチプレクサ４７０を介してプログラマブルＩＣ４０２のＩ／Ｏピンに結合されるべきかを選択するように、構成データストリームを介してマルチプレクサ４７０を構成することができる。Ｉ／Ｏサブシステム４５０はまた、インターフェイス４６０〜４６８をプログラマブル論理サブシステムのプログラマブル論理回路に接続するためのファブリックマルチプレクサＩ／Ｏ（fabric multiplexer I/O ：ＦＭＩＯ）インターフェイス（図示せず）を含んでいてもよい。これに加えて、またはこれに代えて、プログラマブル論理サブシステム４３０は、プログラマブル論理内に１つ以上のＩ／Ｏ回路を実現するように構成され得る。いくつかの実現化例では、プログラマブルＩＣ４０２はまた、電力および／または安全管理のためのさまざまな回路を有するサブシステム４４０を含んでいてもよい。たとえば、サブシステム４４０は、プログラマブルＩＣ４０２のさまざまなサブシステムに電力を供給するために使用される１つ以上の電圧ドメインを監視し、維持するように構成された電力管理ユニット４４６を含んでいてもよい。いくつかの実現化例では、電力管理ユニット４４６は、消費電力を減少させるために、使用中のサブシステムへの電力を無効にすることなく、アイドル時の個々のサブシステムの電力を無効にしてもよい。
【００５３】
サブシステム４４０はまた、正常動作を保証するようにサブシステムのステータスを監視するための安全回路を含んでいてもよい。たとえば、サブシステム４４０は、（たとえばステータスレジスタ４４４において示されるような）さまざまなサブシステムのステータスを監視するように構成された１つ以上のリアルタイムプロセッサ４４２を含んでいてもよい。リアルタイムプロセッサ４４２は、エラーの検出に応答して複数のタスクを行なうように構成されてもよい。たとえば、いくつかのエラーについて、リアルタイムプロセッサ４４２は、エラーの検出に応答して警告を生成してもよい。別の例として、リアルタイムプロセッサ４４２は、サブシステムをリセットして、サブシステムを正常動作に戻そうとしてもよい。サブシステム４４０は、さまざまなサブシステムを相互接続するために使用され得るスイッチネットワーク４４８を含む。たとえば、スイッチネットワーク４４８は、さまざまなサブシステム４１０、４３０、および４４０を、Ｉ／Ｏサブシステム４５０のさまざまなインターフェイスに接続するように構成されてもよい。いくつかの用途では、スイッチネットワーク４４８はまた、監視されるべきサブシステムからリアルタイムプロセッサ４４２を隔離するために使用されてもよい。そのような隔離は、リアルタイムプロセッサ４４２が他のサブシステムで生じるエラーの影響を受けないことを保証するために、ある用途規格（たとえば、ＩＥＣ−６１５０８  ＳＩＬ３またはＩＳＯ−２６２６２規格）によって必要とされる場合がある。
【００５４】
一例では、回路構成が提供される。そのような回路構成は、相互接続回路と、相互接続回路に結合されたメモリと、相互接続回路に結合された複数のプロセッサ回路と、複数のプロセッサ回路にそれぞれ結合された複数のキャッシュ回路と、相互接続に結合され、メモリのアドレスの第１のサブセットの個々のキャッシュラインによってスヌープ要求をフィルタリングするように構成された、第１のスヌープフィルタと、相互接続に結合され、メモリのアドレスの第２のサブセットのキャッシュラインのグループによってスヌープ要求をフィルタリングするように構成された、第２のスヌープフィルタとを含んでいてもよく、各グループは複数のキャッシュラインを包含する。
【００５５】
何らかのそのような回路構成はさらに、第１のスヌープフィルタおよび第２のスヌープフィルタに結合された制御回路を含んでいてもよく、制御回路は、第２のスヌープフィルタによってフィルタリングされるキャッシュラインのグループを、第１のスヌープフィルタによってフィルタリングされるキャッシュラインに再割り当てするように構成されてもよい。
【００５６】
何らかのそのような回路構成では、制御回路はさらに、第１のスヌープフィルタへの再割り当てのためのキャッシュラインのグループを、キャッシュラインのグループへの参照の時間的局所性に基づいて選択するように構成されてもよい。
【００５７】
何らかのそのような回路構成では、制御回路はさらに、第１のスヌープフィルタへの再割り当てのためのキャッシュラインのグループを、キャッシュラインのグループにおけるキャッシュラインの独占的所有権に基づいて選択するように構成されてもよい。
【００５８】
何らかのそのような回路構成では、制御回路はさらに、第１のスヌープフィルタへの再割り当てのためのキャッシュラインのグループを、キャッシュラインのグループにおける頻繁にアクセスされるキャッシュラインの判定に基づいて選択するように構成されてもよい。
【００５９】
何らかのそのような回路構成では、制御回路はさらに、再割り当てのために選択されたグループに属するキャッシュラインを判定し、グループに属するキャッシュラインを第１のスヌープフィルタに再割り当てするように構成されてもよい。
【００６０】
何らかのそのような回路構成では、制御回路はさらに、第１のスヌープフィルタからの第１のキャッシュラインを、第２のスヌープフィルタによってフィルタリングされる第１のグループに再割り当てするように構成されてもよい。
【００６１】
何らかのそのような回路構成では、制御回路はさらに、第１のグループに属する、第１のスヌープフィルタによってフィルタリングされるキャッシュラインを判定し、第１のグループに属するキャッシュラインのキャッシュライン状態を、グループ状態に集約し、グループ状態を、第１のグループのタグと関連付けて格納し、第１のスヌープフィルタから、第１のグループにおけるキャッシュラインを除去するように構成されてもよい。
【００６２】
何らかのそのような回路構成では、制御回路はさらに、第１のスヌープフィルタのディレクトリがいっぱいであることに応答して、第１のスヌープフィルタからの第１のキャッシュラインを、第２のスヌープフィルタによってフィルタリングされる第１のグループに再割り当てするように構成されてもよい。
【００６３】
何らかのそのような回路構成では、制御回路はさらに、第１のスヌープフィルタから第２のスヌープフィルタによってフィルタリングされる第１のグループに再割り当てされるべき第１のキャッシュラインを、第１のキャッシュラインが最も長い間使用されていないことに基づいて選択するように構成されてもよい。
【００６４】
何らかのそのような回路構成では、第１のスヌープフィルタは、個々のキャッシュラインの複数のキャッシュラインタグの格納のために構成された第１のメモリを含み、第２のスヌープフィルタは、キャッシュラインのグループにそれぞれ関連付けられた複数のグループタグの格納のために構成された第２のメモリを含み、各グループタグは、複数のキャッシュラインにマッピングする。
【００６５】
何らかのそのような回路構成では、制御回路はさらに、第２のスヌープフィルタによってフィルタリングされるキャッシュラインの第１のグループの所有者カウントを判定し、第１のグループの所有者カウントが１に等しく、かつ、第１のグループのアクセスカウントがゼロよりも大きいことに応答して、第２のスヌープフィルタからのキャッシュラインの第１のグループのキャッシュラインを、第１のスヌープフィルタに再割り当てするように構成されてもよい。
【００６６】
別の例では、方法が提供されてもよい。そのような方法は、メモリのキャッシュラインを、複数のプロセッサのキャッシュ回路にキャッシュするステップと、第１のスヌープフィルタが、メモリのアドレスの第１のサブセットの個々のキャッシュラインによってスヌープ要求をフィルタリングするステップと、第２のスヌープフィルタが、メモリのアドレスの第２のサブセットのキャッシュラインのグループによってスヌープ要求をフィルタリングするステップとを含んでいてもよく、各グループは複数のキャッシュラインを包含する。
【００６７】
何らかのそのような方法はさらに、制御回路が、第２のスヌープフィルタによってフィルタリングされるキャッシュラインのグループを、第１のスヌープフィルタによってフィルタリングされるキャッシュラインに再割り当てするステップを含んでいてもよい。
【００６８】
何らかのそのような方法はさらに、制御回路が、第１のスヌープフィルタへの再割り当てのためのキャッシュラインのグループを、キャッシュラインのグループへの参照の時間的局所性に基づいて選択するステップを含んでいてもよい。
【００６９】
何らかのそのような方法はさらに、制御回路が、第１のスヌープフィルタへの再割り当てのためのキャッシュラインのグループを、キャッシュラインのグループにおけるキャッシュラインの独占的所有権に基づいて選択するステップを含んでいてもよい。
【００７０】
何らかのそのような方法はさらに、制御回路が、第１のスヌープフィルタへの再割り当てのためのキャッシュラインのグループを、キャッシュラインのグループにおける頻繁にアクセスされるキャッシュラインの判定に基づいて選択するステップを含んでいてもよい。
【００７１】
何らかのそのような方法はさらに、再割り当てのために選択されたグループに属するキャッシュラインを判定するステップと、グループに属するキャッシュラインを第１のスヌープフィルタに再割り当てするステップとを含んでいてもよい。
【００７２】
何らかのそのような方法はさらに、第１のスヌープフィルタからの第１のキャッシュラインを、第２のスヌープフィルタによってフィルタリングされる第１のグループに再割り当てするステップを含んでいてもよい。
【００７３】
何らかのそのような方法はさらに、第１のグループに属する、第１のスヌープフィルタによってフィルタリングされるキャッシュラインを判定するステップと、第１のグループに属するキャッシュラインのキャッシュライン状態を、グループ状態に集約するステップと、グループ状態を、第１のグループのタグと関連付けて格納するステップと、第１のスヌープフィルタから、第１のグループにおけるキャッシュラインを除去するステップとを含んでいてもよい。
【００７４】
局面および特徴は、場合により、個々の図面で説明され得るが、たとえ、組合せが明示的に示されていなくても、または、組合せとして明示的に説明されていなくても、１つの図面からの特徴を別の図面の特徴と組合わせることができるということが理解されるであろう。
【００７５】
開示される方法およびシステムは、キャッシュコヒーレンススヌープ要求をフィルタリングするためのさまざまなシステムに適用可能であると考えられる。他の局面および特徴は、明細書を考察すれば、当業者には明らかであろう。方法およびシステムは、ソフトウェアを実行するように構成された１つ以上のプロセッサとして、特定用途向け集積回路（ＡＳＩＣ）として、または、プログラマブル論理デバイス上の論理として実現されてもよい。明細書および図面は単なる例として考えられるよう意図されており、この発明の真の範囲は、以下の特許請求の範囲によって示される。
【図１】
2021533464.tif 000003
【図２】
2021533464.tif 000004
【図３】
2021533464.tif 000005
【図４】
2021533464.tif 000006
【国際調査報告】
2021533464.tif 000007
2021533464.tif 000008
2021533464.tif 000009