(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-09
(45)【発行日】2023-11-17
(54)【発明の名称】ハイブリッドの精密および非精密キャッシュスヌープフィルタリング
(51)【国際特許分類】
G06F 12/0831 20160101AFI20231110BHJP
【FI】
G06F12/0831
(21)【出願番号】P 2021505657
(86)(22)【出願日】2019-08-01
(86)【国際出願番号】 US2019044742
(87)【国際公開番号】W WO2020028714
(87)【国際公開日】2020-02-06
【審査請求日】2022-07-25
(32)【優先日】2018-08-02
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ミッタル,ミリンド
(72)【発明者】
【氏名】ダスティダール,ジャディブ
【審査官】北村 学
(56)【参考文献】
【文献】特開2008-310414(JP,A)
【文献】特開2013-016160(JP,A)
【文献】特開2015-121945(JP,A)
【文献】米国特許出願公開第2018/0004663(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
IPC G06F 12/08 - 12/128
(57)【特許請求の範囲】
【請求項1】
回路構成であって、
相互接続回路と、
前記相互接続回路に結合されたメモリと、
前記相互接続回路に結合された複数のプロセッサ回路と、
前記複数のプロセッサ回路にそれぞれ結合された複数のキャッシュ回路と、
前記相互接続回路に結合され、前記メモリのアドレスの第1のサブセットの個々のキャッシュラインによってスヌープ要求をフィルタリングするように構成された、第1のスヌープフィルタと、
前記相互接続回路に結合され、前記メモリのアドレスの第2のサブセットのキャッシュラインのグループによってスヌープ要求をフィルタリングするように構成された、第2のスヌープフィルタとを含み、各グループは複数のキャッシュラインを包含
し、
前記第1のスヌープフィルタおよび前記第2のスヌープフィルタに結合された制御回路をさらに含み、前記制御回路は、前記第2のスヌープフィルタによってフィルタリングされるキャッシュラインのグループを、前記第1のスヌープフィルタによってフィルタリングされるキャッシュラインに再割り当てするように構成される、回路構成。
【請求項2】
前記制御回路はさらに、前記第1のスヌープフィルタへの再割り当てのためのキャッシュラインの前記グループを、キャッシュラインの前記グループへの参照の時間的局所性に基づいて選択するように構成される、請求項
1に記載の回路構成。
【請求項3】
前記制御回路はさらに、前記第1のスヌープフィルタへの再割り当てのためのキャッシュラインの前記グループを、キャッシュラインの前記グループにおけるキャッシュラインの独占的所有権に基づいて選択するように構成される、請求項
1に記載の回路構成。
【請求項4】
前記制御回路はさらに、前記第1のスヌープフィルタへの再割り当てのためのキャッシュラインの前記グループを、キャッシュラインの前記グループにおける頻繁にアクセスされるキャッシュラインの判定に基づいて選択するように構成される、請求項
1に記載の回路構成。
【請求項5】
前記制御回路はさらに、
再割り当てのために選択された前記グループに属するキャッシュラインを判定し、
前記グループに属する前記キャッシュラインを前記第1のスヌープフィルタに再割り当てするように構成される、請求項
1に記載の回路構成。
【請求項6】
前記制御回路はさらに、前記第1のスヌープフィルタからの第1のキャッシュラインを、前記第2のスヌープフィルタによってフィルタリングされる第1のグループに再割り当てするように構成される、請求項
1~5のいずれか1項に記載の回路構成。
【請求項7】
前記制御回路はさらに、
前記第1のスヌープフィルタからの第1のキャッシュラインを、前記第2のスヌープフィルタによってフィルタリングされる第1のグループに再割り当てし、
前記第1のグループに属する、前記第1のスヌープフィルタによってフィルタリングされるキャッシュラインを判定し、
前記第1のグループに属する前記キャッシュラインのキャッシュライン状態を、グループ状態に集約し、
前記グループ状態を、前記第1のグループのタグと関連付けて格納し、
前記第1のスヌープフィルタから、前記第1のグループにおける前記キャッシュラインを除去するように構成される、請求項
1~5のいずれか1項に記載の回路構成。
【請求項8】
前記制御回路はさらに、
前記第1のスヌープフィルタからの第1のキャッシュラインを、前記第2のスヌープフィルタによってフィルタリングされる第1のグループに再割り当てし、
前記第1のスヌープフィルタのディレクトリがいっぱいであることに応答して、前記第1のスヌープフィルタからの前記第1のキャッシュラインを、前記第2のスヌープフィルタによってフィルタリングされる前記第1のグループに再割り当てするように構成される、請求項
1~5のいずれか1項に記載の回路構成。
【請求項9】
前記制御回路はさらに、
前記第1のスヌープフィルタからの第1のキャッシュラインを、前記第2のスヌープフィルタによってフィルタリングされる第1のグループに再割り当てし、
前記第1のスヌープフィルタから前記第2のスヌープフィルタによってフィルタリングされる前記第1のグループに再割り当てされるべき前記第1のキャッシュラインを、前記第1のキャッシュラインが最も長い間使用されていないことに基づいて選択するように構成される、請求項
1~5のいずれか1項に記載の回路構成。
【請求項10】
前記第1のスヌープフィルタは、個々のキャッシュラインの複数のキャッシュラインタグの格納のために構成された第1のメモリを含み、
前記第2のスヌープフィルタは、キャッシュラインのグループにそれぞれ関連付けられた複数のグループタグの格納のために構成された第2のメモリを含み、各グループタグは、複数のキャッシュラインにマッピングする、請求項
1~5のいずれか1項に記載の回路構成。
【請求項11】
前記制御回路はさらに、
前記第2のスヌープフィルタによってフィルタリングされるキャッシュラインの第1のグループの所有者カウントを判定し、
前記第1のグループの前記所有者カウントが1に等しく、かつ、前記第1のグループのアクセスカウントがゼロよりも大きいことに応答して、前記第2のスヌープフィルタからのキャッシュラインの前記第1のグループのキャッシュラインを、前記第1のスヌープフィルタに再割り当てするように構成される、請求項
1に記載の回路構成。
【請求項12】
メモリのキャッシュラインを、複数のプロセッサのキャッシュ回路にキャッシュするステップと、
第1のスヌープフィルタが、前記メモリのアドレスの第1のサブセットの個々のキャッシュラインによってスヌープ要求をフィルタリングするステップと、
第2のスヌープフィルタが、前記メモリのアドレスの第2のサブセットのキャッシュラインのグループによってスヌープ要求をフィルタリングするステップとを含み、各グループは複数のキャッシュラインを包含
し、
制御回路が、前記第2のスヌープフィルタによってフィルタリングされるキャッシュラインのグループを、前記第1のスヌープフィルタによってフィルタリングされるキャッシュラインに再割り当てするステップをさらに含む、方法。
【請求項13】
前記第1のスヌープフィルタからの第1のキャッシュラインを、前記第2のスヌープフィルタによってフィルタリングされる第1のグループに再割り当てするステップをさらに含む、請求項
12に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
この開示は一般に、キャッシュスヌープフィルタリングに関する。
【背景技術】
【0002】
背景
キャッシュメモリは、マルチプロセッサデータ処理システムの共有メモリにおいて、性能を高めるために採用される。共有メモリ内のデータにアクセスするために必要とされる時間は、データのローカルコピーをキャッシュメモリに格納することによって減少させることができる。メモリは複数のプロセッサ間で共有されるため、各プロセッサがキャッシュメモリ内の最も最近の共有データを閲覧し、当該共有データへのアクセスを有することを保証するために、キャッシュコヒーレンシスキームが必要である。
【0003】
スヌープベースのキャッシュコヒーレンシプロトコルでは、各プロセッサでのキャッシュ制御回路が、ローカルキャッシュメモリにキャッシュされるアドレスについて、メモリバスを監視する。キャッシュ制御回路が、別のプロセッサによるアドレスへの書き込み、および、そのアドレスがローカルにキャッシュされることを検出すると、キャッシュ制御回路は、ローカルコピーを無効としてマークすることができる。プロセッサが、キャッシュされ無効としてマークされたアドレスへのアクセスを求める場合、キャッシュ制御回路は、最新のデータをフェッチする。
【0004】
スヌープ要求は、システム性能を低下させる場合がある。各キャッシュ制御回路は、他のすべてのキャッシュ制御回路に、キャッシュライン更新の表示をブロードキャストする。N個のプロセッサを有するシステムでは、スヌープトラフィックはN*(N-1)に比例するであろう。多数のキャッシュラインがプロセッサ間で共有されないかもしれないため、スヌープトラフィックの多くは無駄になり得る。過剰なスヌープトラフィックは、共有メモリへのアクセスのために利用可能な帯域幅を減少させる。
【0005】
キャッシュ制御回路は、不必要なスヌープトラフィックを減少させるためのスヌープフィルタを用いて実現され得る。一般に、スヌープフィルタは、どのアドレスがキャッシュされるかを追跡し、キャッシュされたアドレスを参照しない要求をフィルタリングする。さらに、スヌープフィルタはまた、どのプロセッサがキャッシュ可能アドレスのコピーを要求したかを、または当該プロセッサの数を追跡し、キャッシュされたアドレスへのスヌープをフィルタリングするだけではなく、それらの追跡されたアドレスがキャッシュされるようにするプロセッサへのスヌープもフィルタリングする。キャッシュフィルタは一般に、精密キャッシュフィルタおよび非精密キャッシュフィルタという2つのタイプがある。精密スヌープフィルタは、個々のキャッシュラインのアドレスによってスヌープ要求をフィルタリングする。非精密スヌープフィルタは、キャッシュラインのグループのアドレスによってスヌープ要求をフィルタリングする。
【発明の概要】
【課題を解決するための手段】
【0006】
概要
開示される回路構成は、相互接続回路と、相互接続回路に結合されたメモリと、相互接続回路に結合された複数のプロセッサ回路とを含む。複数のキャッシュ回路が、複数のプロセッサ回路にそれぞれ結合される。第1のスヌープフィルタが相互接続回路に結合され、メモリのアドレスの第1のサブセットの個々のキャッシュラインによってスヌープ要求をフィルタリングするように構成される。第2のスヌープフィルタが相互接続回路に結合され、メモリのアドレスの第2のサブセットのキャッシュラインのグループによってスヌープ要求をフィルタリングするように構成される。各グループは複数のキャッシュラインを包含する。
【0007】
方法は、メモリのキャッシュラインを、複数のプロセッサのキャッシュ回路にキャッシュするステップを含む。方法は、メモリのアドレスの第1のサブセットの個々のキャッシュラインによってスヌープ要求をフィルタリングする第1のスヌープフィルタと、メモリのアドレスの第2のサブセットのキャッシュラインのグループによってスヌープ要求をフィルタリングする第2のスヌープフィルタとを有する。各グループは複数のキャッシュラインを包含する。
【0008】
他の特徴は、以下の詳細な説明および特許請求の範囲を考察することから認識されるであろう。
【0009】
図面の簡単な説明
方法およびシステムのさまざまな局面および特徴は、以下の詳細な説明を考察し、図面を参照すれば、明らかになるであろう。
【図面の簡単な説明】
【0010】
【
図1】共有メモリと、共有メモリへのアクセスを有する複数のキャッシングエージェントとを有する例示的なシステムを示す図である。
【
図2】精密スヌープフィルタ論理によって追跡される、精密に追跡されるキャッシュラインのディレクトリと、非精密スヌープフィルタ論理によって追跡される、非精密に追跡されるキャッシュラインのディレクトリとを示す図である。
【
図3】精密スヌープフィルタリングと非精密スヌープフィルタリングとのハイブリッドであるスヌープフィルタリングプロセスのフローチャートを示す図である。
【
図4】開示される方法および回路に従って構成され得る例示的なプログラマブルICを示す図である。
【発明を実施するための形態】
【0011】
詳細な説明
以下の説明では、多くの特定の詳細が、ここに提示される特定の例を説明するために述べられる。しかしながら、1つ以上の他の例および/またはこれらの例の変形が、以下に与えられるすべての特定の詳細がなくても実践され得るということは、当業者には明らかであるはずである。他の例では、ここでの例の説明を不明瞭にしないように、周知の特徴は詳細には説明されていない。例示を容易にするために、異なる図において、同じ参照番号が、同じ要素、または同じ要素の追加の例を指すために使用されてもよい。
【0012】
精密および非精密スヌープフィルタリングスキームは、スケールと精度との間のトレードオフを提示する。精密スヌープフィルタは、より低いスケーラビリティを提供するものの、正確なフィルタリングを提供する。精密スヌープフィルタは、個々のキャッシュラインのアドレスによってスヌープ要求をフィルタリングする。このため、精密スヌープフィルタによって発行されたスヌープ要求は典型的にはスプリアスではなく、追跡されるキャッシング要素のみをターゲットとする。精密スヌープフィルタは、うまくスケーリングしない。なぜなら、スヌープフィルタのサイズと、キャッシング要素の数と、すべてのキャッシング要素にわたって追跡されているキャッシュの累積サイズとの間で、トレードオフが必要とされるためである。
【0013】
非精密スヌープフィルタは、より低い精度を提供するものの、スケーラビリティを提供する。非精密スヌープフィルタは、キャッシュラインのセットにわたってキャッシュ状態の集約的存在を追跡し、追跡は、キャッシュラインに基づくものよりも粗いきめで行なわれる。このため、非精密スヌープフィルタは、精密スヌープフィルタと比較して、より高いスケーラビリティを提供する。非精密スヌープフィルタに存在するとしてマークされた特定のキャッシュラインは、追跡されているキャッシング要素にわたって存在していてもいなくてもよいため、非精密スヌープフィルタによって発行されたスヌープ要求はスプリアスかもしれない。非精密スヌープフィルタはうまくスケーリングし、より多数の追跡されるキャッシング要素と、追跡されるキャッシング要素にわたる追跡されるキャッシュサイズのより大きい累積サイズとを提供する。
【0014】
開示される回路および方法は、精密スヌープフィルタおよび非精密スヌープフィルタ双方の利点を提供するハイブリッドスヌープフィルタを提供する。ハイブリッドスヌープフィルタは、精密スヌープフィルタおよび非精密スヌープフィルタ双方を採用する。加えて、精度とスケールとの最適なバランスのために、複数の処理ユニットのキャッシュ状態のきめの細かい精密な追跡ときめの粗い非精密な追跡とを調節するために、回路が提供される。回路および方法はそれにより、精密スヌープフィルタリングのみを採用する、または非精密スヌープフィルタリングのみを採用するアプローチの欠点を回避する。
【0015】
ハイブリッドスヌープフィルタは、プロセッサ間で共有されるメモリを有するとともに、プロセッサと共有メモリとの間、およびプロセッサ間の二地点間接続を提供する相互接続回路を有するマルチプロセッサシステムにおいて特に有用である。プロセッサの各々は、ローカルキャッシュを有する。精密スヌープフィルタは、個々のキャッシュラインのアドレスによってスヌープ要求をフィルタリングし、非精密スヌープフィルタは、キャッシュラインのグループを包含するアドレスによってスヌープ要求をフィルタリングする。精密スヌープフィルタリングおよび非精密スヌープフィルタリングの各々の欠点は、スヌープフィルタの容量およびアクセスパターンに基づいて、精密スヌープフィルタと非精密スヌープフィルタとの間でキャッシュラインの追跡を再割り当てすることによって減少させることができる。
【0016】
図1は、共有メモリ102と、共有メモリへのアクセスを有する複数のキャッシングエージェント104、106、108、…110とを有する例示的なシステムを示す。各キャッシングエージェントは、共有メモリ内のデータにアクセス可能であるとともに、共有メモリからのデータのコピーをローカルキャッシュメモリにローカルに格納可能である処理回路を含む。例示的なシステムでは、キャッシングエージェント104、106、108、…、110は、プロセッサ回路114、116、118、120をそれぞれ含む。プロセッサ回路の例は、中央処理装置(central processing unit:CPU)、グラフィック処理装置(graphics processing unit:GPU)、デジタル信号プロセッサ(digital signal processor:DSP)、フィールドプログラマブルゲートアレイ(field programmable gate array:FPGA)において実現される回路、特定用途向け集積回路(application specific integrated circuit:ASIC)において実現される回路、および、前述のもののさまざまな組合せを含む。キャッシングエージェントおよび共有メモリ102は、部品間の二地点間接続を提供するスイッチまたは共有バスなどの相互接続回路によって結合される。
【0017】
キャッシングエージェント104、106、108、…、110の各々は、キャッシュ回路を含む。キャッシュ回路は、キャッシュメモリとキャッシュ制御回路とを含む。キャッシュメモリは、キャッシュラインのデータのためのストレージを提供し、セットアソシアティブであってもよく、キャッシュラインのためのタグを含み得る。キャッシュ制御回路は、変換索引バッファ(translation look-aside buffer:TLB)を含んでいてもよく、ローカルキャッシュまたは共有メモリからのデータの検索、共有メモリへのデータの書き戻し、外部スヌープ要求のサービス、それらのスヌープ要求の結果としてのキャッシュされたデータおよびキャッシュ状態の管理、キャッシュ追い出しアルゴリズムを介したキャッシュメモリにおける利用可能なストレージの管理、および、キャッシュにおけるキャッシュラインの無効化などのために制御することができる。キャッシングエージェント104、106、108、および110は、キャッシュ制御回路138、140、142、および144をそれぞれ含む。
【0018】
精密に追跡されるキャッシュおよび非精密に追跡されるキャッシュは、キャッシングエージェントの各々において別々のブロックとして示されているが、精密に追跡されるキャッシュラインは、キャッシュメモリにおいて、非精密に追跡されるキャッシュラインと交互配置され得る。精密スヌープフィルタ146は、精密に追跡されるキャッシュラインのアドレスを追跡し、非精密スヌープフィルタ148は、非精密に追跡されるキャッシュラインのアドレスを追跡する。精密に追跡されるキャッシュラインは、個々のキャッシュラインのアドレスによって追跡される。非精密スヌープフィルタリングでは、キャッシュラインのアドレスは、グループによって追跡される。精密に追跡されるキャッシュラインごとに、精密スヌープフィルタは、キャッシュラインのアドレスを格納する。非精密に追跡されるキャッシュラインについては、非精密スヌープフィルタは、複数のキャッシュラインのアドレスにマッピングするタグを格納する。精密スヌープフィルタ146が追跡する共有メモリのアドレスのサブセットは、キャッシングエージェント104、106、108、および110においてブロック122、126、130、および134としてそれぞれ示され、非精密スヌープフィルタ148が追跡する共有メモリのアドレスのサブセットは、キャッシングエージェント104、106、108、および110においてブロック124、128、132、および136としてそれぞれ示される。
【0019】
精密スヌープフィルタ146および非精密スヌープフィルタ148は、制御回路150とともに、相互接続152に結合されたホームエージェント112によってホストされる。ホームエージェントは、キャッシングエージェント間のコヒーレントトランザクションをサービスする回路である。ホームエージェントは、所与のアドレス空間のためのコヒーレンシを維持するものであり、メインメモリのためのメモリコントローラ回路である必要はない。所与のトランザクションのフローによって必要とされるようなデータおよび所有権応答が、ホームエージェントによって提供される。
【0020】
精密スヌープフィルタ(precise snoop filter:PSF)146は、個々のキャッシュラインのアドレスによってスヌープ要求をフィルタリングする。キャッシュラインAへのアクセスのために、PSFは、ローカルキャッシュにキャッシュラインAを有するキャッシングエージェントへのスヌープ要求の送信を制御する。非精密スヌープフィルタ(imprecise snoop filter:ISF)148は、キャッシュラインのグループによってスヌープ要求をフィルタリングする。キャッシュラインAへのアクセスのために、ISFは、キャッシュラインAと同じグループにマッピングするキャッシュラインを有し、キャッシュラインAを含むキャッシングエージェントへのスヌープ要求の送信を制御する。
【0021】
制御回路150は、PSFによって追跡されるキャッシュラインとISFによって追跡されるキャッシュラインのグループとの間での割り振りおよび割り振り解除および/または移行を実施する。キャッシュラインの履歴アクセスパターンに依存して、キャッシングエージェントは潜在的に、精密に追跡されるキャッシュラインと非精密に追跡されるキャッシュラインとの組合せを有するか、すべて精密に追跡されるキャッシュラインを有するか、または、すべて非精密に追跡されるキャッシュラインを有し得る。異なるキャッシングエージェントは、キャッシュされたアドレスの精密に追跡される部分と非精密に追跡される部分との間で、異なる割り振りを有し得る。
【0022】
制御回路150は、精密に追跡されるキャッシュラインを非精密に追跡されるグループに再割り当てすることができ、非精密に追跡されるグループを精密に追跡されるキャッシュラインに再割り当てすることができる。PSFからISFへのキャッシュラインの追跡の再割り当ては、新しいキャッシュラインアドレスのための空間を作るための、PSFからのキャッシュラインの追い出しに応答するものであってもよい。追い出されたキャッシュラインをカバーするために、新しいグループをISFに追加することができる。ISFからPSFへのキャッシュラインの再割り当ては、参照されるキャッシュラインが1つのキャッシングエージェントによって独占的に所有されていること、または、キャッシュラインアドレスへの参照の時間的局所性といった、ポリシー選択に応答するものであってもよい。
【0023】
他のポリシー選択は、静的に割り振られるアドレスウィンドウへのアクセスと、動的に判定されるアドレスホットスポットへのアクセスとを含み得る。静的に割り振られるアドレスウィンドウは、性能が重要である同期データ構造が複数のプロセッサによって共有される、ある範囲のアドレスであり得る。ウィンドウ内のデータへのアクセスまたは所有権についての同時の要求は頻繁に生じ、アドレス範囲におけるキャッシュラインは、PSFによる管理にとって好適である。
【0024】
動的に判定されるアドレスホットスポットは、キャッシュラインへのアクセスの長期監視を通して識別され得る。短期監視をカバーする、典型的なLRUベースの割り振りとは対照的に、アドレスホットスポット検出、およびその後のPSFにおける優先的割り振りは、頻繁にアクセスされるアドレス、または、特定のアドレスについての頻繁な競合の長期判定に基づく。
【0025】
図2は、精密スヌープフィルタ論理202によって追跡される、精密に追跡されるキャッシュラインのディレクトリ204と、非精密スヌープフィルタ論理206によって追跡される、非精密に追跡されるキャッシュラインのディレクトリ208とを示す。ディレクトリ204は、キャッシュラインタグによってアドレス指定されるメモリ回路として実現可能であり、ディレクトリ208は、キャッシュグループタグによってアドレス指定されるメモリ回路として実現可能である。
【0026】
ディレクトリ204における各エントリは、キャッシュラインタグ210と、ライン状態212と、存在ベクトル214とを含む。キャッシュラインタグは、PSF論理202によって追跡され、ライン状態および存在ベクトルによって記述されるキャッシュラインを識別する。ライン状態は、参照されるキャッシュラインが共有されるか、排他的に保持されるか、有効であるかなどを示すことができる。存在ベクトルは、各ビットが特定のキャッシングエージェントに対応するビットのグループであってもよく、ビットの状態は、参照されるキャッシュラインがキャッシングエージェントによってキャッシュされるかどうかを示す。
【0027】
ディレクトリ208における各エントリは、キャッシュグループタグ216と、グループ状態218と、存在ベクトル220とを含む。キャッシュグループタグは、ISF論理206によって追跡され、グループ状態および存在ベクトルによって記述されるキャッシュラインのグループを識別する。グループ状態は、グループの任意のキャッシュラインが共有されるか、排他的に保持されるか、有効であるかなどを示すことができる。存在ベクトルは、各ビットが特定のキャッシングエージェントに対応するビットのグループであってもよく、ビットの状態は、グループの任意のキャッシュラインがキャッシングエージェントによってキャッシュされるかどうかを示す。
【0028】
各グループ状態218は、アクセスカウントを含み得る。アクセスカウントは、キャッシングエージェントによる関連付けられたキャッシュグループタグへのアクセスに応答してインクリメントされ、関連付けられたキャッシュグループタグによって参照されるキャッシュラインについての追い出し通知に応答してデクリメントされる。アクセスカウントを維持することは、キャッシュグループタグに関連付けられたアクセスカウントが0までデクリメントされることに応答して、ISFからのキャッシュグループタグの自動追い出しをサポートする。アクセスカウントを維持することは、同じキャッシングエージェントによる同じキャッシュグループにおけるキャッシュラインへの複数のアクセスの追跡を可能にする。アクセスカウントがなければ、キャッシュグループにおける1つのキャッシュラインについての1つのキャッシングエージェントによる追い出し通知は作用されないであろう。なぜなら、存在ベクトルは、キャッシングエージェントのキャッシュに存在するキャッシュグループの他のキャッシュラインのために維持され続けなければならないためである。
【0029】
図3は、精密スヌープフィルタリングと非精密スヌープフィルタリングとのハイブリッドであるスヌープフィルタリングプロセスのフローチャートを示す。制御回路150は、動作のうちのさまざまな動作を行ない、PSF146およびISF148において行なわれる他の動作を調整する。
【0030】
ブロック302で、PSF-ISF割り振り回路は、たとえば特定のキャッシュラインAを参照するコヒーレンス要求を受信する。キャッシュコヒーレント要求は、書き込み要求と読み出し要求とを含む。キャッシュコヒーレント要求が書き込みまたはは読み出し(もしくは、書き込みまたは読み出しとして分類できない他のタイプ)であるかどうかを通信することに加えて、要求はまた、典型的には、他のキャッシュにおけるキャッシュラインの以前の状態および要求タイプに基づいて、追加情報を通信する。たとえば、キャッシュコヒーレント要求は、キャッシュラインを書き込むキャッシングエージェントが排他的なコピーを保管したこと(したがって、他のキャッシュに通信することなく将来の書き込みを行ないたいこと)または共有のコピーを保管したことを通信することができる。別の例は、キャッシュラインを読み出すキャッシングエージェントが排他的なコピーを受信したいこと(したがって、他のキャッシュに通信することなく将来の書き込みを行ないたいこと)または共有のコピーを受信したいことを通信するキャッシュコヒーレント要求である。
【0031】
決定ブロック304で、制御回路150は、参照されるキャッシュラインAがPSF146またはISF148のいずれかに存在するかどうかをチェックする。PSFにおける存在は、コヒーレンス要求において特定されたキャッシュラインのアドレスを、PSFにおけるキャッシュラインタグと比較することによって判定され得る。同様に、ISFにおける存在は、特定されたキャッシュラインアドレスのグループタグを判定し、次に、判定されたグループタグがISFに存在するかどうかを判定することによって判定され得る。キャッシュラインアドレスをキャッシュグループタグにマッピングするために、ハッシュ関数が使用され得る。
【0032】
決定ブロック306は、キャッシュアドレスラインがPSF146またはISF148において追跡されるかどうかに基づいてプロセスを方向付ける。キャッシュアドレスラインAがPSFにおいて追跡されていることに応答して、ブロック308で、制御回路150は、PSFにおけるキャッシュラインAの状態をコヒーレンス要求と一致するように更新し、必要であれば、PSFにおけるキャッシュラインに関連付けられた存在ベクトルにおいて示されたキャッシングエージェントのキャッシュコントローラにコヒーレンス要求を送信する。キャッシュコヒーレンス要求は、存在ベクトルのみが更新される共有グループ状態および共有読み出し要求のために送信される必要はない。
【0033】
キャッシュラインAがISF148において追跡されるキャッシュラインのグループに属することに応答して、ブロック310で、割り振り回路は、ISFにおけるグループタグに関連付けられた存在ベクトルにおいて示されたキャッシングエージェントのキャッシュコントローラにコヒーレンス要求を送信する。しかしながら、キャッシュラインAのグループに存在するキャッシュラインを有するすべてのプロセッサにキャッシュコヒーレンス要求を送信することが必要ではない、要求タイプとISFにおけるキャッシュグループ状態との組合せがある。たとえば、キャッシュコヒーレンス要求は、存在ベクトルのみが更新される共有グループ状態および共有読み出し要求のために送信される必要はない。
【0034】
決定ブロック312で、制御回路150は、キャッシュラインAをPSF146に追加するために、キャッシュラインAが属するグループをISF148から除去するべきか、または、グループをISFから単純に除去するべきかを判定する。判定は、用途に特有のポリシー選択に基づき得る。たとえば、いくつかの用途は、より高い精度およびより低いスケーラビリティを必要とするかもしれず、それは、ISFからPSFへの動きに対する抵抗がより小さいポリシーをもたらすであろう。いくつかの用途は、より高いスケーラビリティおよびより低い精度を必要とするかもしれず、それは、ISFからPSFへの動きに対する抵抗がより大きいポリシーをもたらすであろう。ISFからPSFへのキャッシュラインの再割り当てをトリガするために使用され得る単純な例示的指標は、キャッシングエージェントによってキャッシュラインの独占的所有権を特定するコヒーレンス要求である。キャッシュラインの共有コピーを特定するコヒーレンス要求は、ISFからPSFへのキャッシュラインの再割り当てをトリガしないであろう。同様に、制御回路が、キャッシュラインは単一の所有者においてのみ存在し得ること、および、それがまた、ISFにおける1という所有者カウントと一致することを、キャッシュコヒーレンス要求から判定する場合、グループはPSFに再割り当てされ得る。別の例は、制御回路が、要求を処理した後のキャッシュラインの所有者カウントは1になるであろうということを、キャッシュコヒーレンス要求のタイプから判定することである。所有者カウントは、存在ベクトルにおいて設定されたビット数によって示され得る。
【0035】
グループにおけるキャッシュラインへのアクセスの数を追跡し、所定期間内にアクセスの数がしきい値数に達すると(時間的局所性)、キャッシュラインのグループをISF148からPSF146に再割り当てすることによって、ポリシーを多かれ少なかれ限定的にすることができる。キャッシュラインをPSFに再割り当てするべきでないという判定に応答して、ブロック314で、制御回路は、キャッシュラインAが属するキャッシュラインのグループのグループ状態を更新する。状態は、キャッシュコヒーレンス要求のタイプに基づく。
【0036】
ブロック310での、アクセスカウントがゼロまでデクリメントされることに応答して、キャッシュラインをPSF146に再割り当てするべきである、または、単純に追い出すべきであるという判定に応答して、ブロック316で、割り振り回路は、キャッシュラインAが属するキャッシュラインのグループをISF148から追い出す。キャッシュラインのグループを追い出す際、割り振り回路は、ISFからグループタグを除去する。決定ブロック318およびブロック330によって示されるように、アクセスカウントがゼロである場合、さらなるアクションは必要とされない。アクセスカウントがゼロに等しくない場合、決定ブロック318は、プロセスをブロック320に方向付けて、グループにおけるキャッシュラインのすべてをPSFに追加し始める。ISFから追い出されたキャッシュラインのグループの状態は、グループにおけるすべてのキャッシュラインに適用可能であるため、個々のキャッシュラインの状態を判定することができず、それにより、グループにおけるすべてのキャッシュラインがPSFに追加される。ISFから除去されたグループの状態は、PSFに追加されたキャッシュラインの各々に適用される。キャッシュラインをグループタグにマッピングするために、ハッシュ関数を使用することができ、再割り当てのためのキャッシュラインアドレス全体を生成するために、ハッシュ関数の逆数を使用することができる。
【0037】
ISF148からPSF146への移行の効率は、キャッシュグループにおけるすべてのキャッシュラインのための状態クエリスヌープを、存在ベクトルによって示された所有者に送信することによって高められ得る。このため、キャッシングエージェントのうちのいずれかに依然として存在するキャッシュラインのみが、PSFにおいて追跡される。さらに、キャッシングエージェントにわたる更新された累積キャッシュ状態も、PSFにおいて次に追跡され得る。状態クエリスヌープの全体的な効果は、PSFにおける場所および状態の精密性を取り戻すことである。
【0038】
ブロック320、322、324、326、および328の処理は、ISF148から追い出されたグループからPSF146に追加されたキャッシュラインごとに行なわれ得る。同様に、ブロック320、322、324、326、および328の処理は、決定ブロック304で判定されるように、ISFおよびPSFのいずれも、参照されるキャッシュラインを追跡していない場合に行なわれてもよい。
【0039】
決定ブロック320で、制御回路150は、PSF146が、追い出されたキャッシュラインのために、または、決定ブロック304で判定された見当たらないキャッシュラインのために利用可能である空間を有するかどうかを判定する。ディレクトリ204は、最大数のキャッシュラインタグおよび状態のための格納空間を有する。空間が利用可能である場合、ブロック322で、制御回路は、PSFディレクトリにおけるスロットをキャッシュラインに割り当て、それに応じてタグ、キャッシュライン状態、および存在ベクトルを更新する。
【0040】
空間がPSF146においてキャッシュラインのために利用可能ではない場合、ブロック324で、制御回路は、PSFディレクトリにおいてキャッシュラインのための空間を作り、キャッシュラインをPSFからISF148に再割り当てするための追い出し処理の実行を開始する。ブロック326で、制御回路は、最も長い間アクセスされていないキャッシュラインといった、PSFからの追い出しのためのキャッシュラインを選択し、追い出しのために選択されたキャッシュラインと同じグループに属する、PSFにおけるすべてのキャッシュラインを判定する。同じグループに属するキャッシュラインも追い出される。
【0041】
PSF146からキャッシュラインを追い出す際、ブロック322および328の処理の前に、キャッシュラインのタグ、状態、および存在情報が、ISF148に追加するために情報を保存するために読み出される。ブロック328で、制御回路は、追い出しのために選択されたキャッシュラインを含むキャッシュラインのグループのために、ISFにおけるスロットを割り振る。また、ブロック328で、制御回路は、追い出しのために選択されたキャッシュラインの集約されたキャッシュ状態(グループにおけるキャッシュライン状態の論理OR)と存在ベクトルとを、ISFにおける割り振られたスロットに格納する。キャッシュライングループの生成および追い出しに関連付けられた処理性能は、キャッシュラインをキャッシュグループタグにマッピングするためにハッシュ関数を使用することによって高められる。PSFからISFへのキャッシュラインの追い出しはそれにより、グループにおけるキャッシュライン間の空間的および/または時間的関係を減少させることができる。ブロック322で、制御回路は、上述のようにキャッシュラインをPSFに追加する。
【0042】
図4は、開示される方法および回路に従って構成され得る例示的なプログラマブルIC402を示す。プログラマブルICは、システムオンチップ(System On Chip:SOC)とも呼ばれてもよく、それは、プロセッササブシステム410とプログラマブル論理サブシステム430とを含む。プロセッササブシステム410は、ユーザプログラムの実行を介してユーザ設計のソフトウェア部分を実現するようにプログラムされてもよい。プログラムは、構成データストリームの一部として特定されてもよく、または、オンチップもしくはオフチップデータ記憶デバイスから検索されてもよい。プロセッササブシステム410は、1つ以上のソフトウェアプログラムを実行するためのさまざまな回路412、414、416、および418を含んでいてもよい。回路412、414、416、および418は、たとえば、1つ以上のプロセッサコア、浮動小数点ユニット(floating point unit:FPU)、割り込み処理ユニット、オンチップメモリ、メモリキャッシュ、および/またはキャッシュコヒーレント相互接続を含んでいてもよい。
【0043】
プログラマブルIC402のプログラマブル論理サブシステム430は、ユーザ設計のハードウェア部分を実現するようにプログラムされてもよい。たとえば、プログラマブル論理サブシステムは、複数のプログラマブルリソース432を含んでいてもよく、それらは、構成データストリームにおいて特定される回路のセットを実現するようにプログラムされてもよい。プログラマブルリソース432は、たとえば、プログラマブル相互接続回路、プログラマブル論理回路、および構成メモリセルを含む。プログラマブル論理は、たとえば関数発生器、レジスタ、算術論理などを含み得るプログラマブル要素を使用して、ユーザ設計の論理を実現する。プログラマブル相互接続回路は、プログラマブル相互接続点(programmable interconnect point:PIP)によって相互接続されるさまざまな長さの多数の相互接続線を含んでいてもよい。
【0044】
プログラマブルリソース432は、構成データストリームを構成メモリセルにロードすることによってプログラムされてもよく、構成メモリセルは、プログラマブル相互接続回路およびプログラマブル論理回路がどのように構成されるかを定義する。たとえば、構成可能ラッチのための構成メモリセルを第1の値に設定することは、構成可能ラッチに、単一エッジ駆動型ラッチとして動作するよう指示してもよい。構成メモリセルを第2の値に設定することは、構成可能ラッチに、二重エッジ駆動型ラッチとして動作するよう指示してもよい。個々のメモリセルの集団状態は次に、プログラマブルリソース432の機能を決定する。構成データは、外部デバイスによって、メモリから(たとえば外部PROMから)読み出され、または、プログラマブルIC402に書き込まれ得る。いくつかの実現化例では、プログラマブル論理サブシステム430に含まれる構成コントローラ434は、プログラマブルICに結合された不揮発性メモリから構成データを検索し、構成データを構成メモリセルにロードすることによって、プログラマブルICの電源を入れることに応答してプログラマブルリソースをプログラムしてもよい。いくつかの他の実現化例では、構成データは、プロセッササブシステム410によって実行される起動プロセスによって構成メモリセルにロードされてもよい。
【0045】
プログラマブルIC402は、プロセッササブシステム410をプログラマブル論理サブシステム430内に実現された回路と相互接続するためのさまざまな回路を含んでいてもよい。この例では、プログラマブルIC402は、プロセッササブシステム410およびプログラマブル論理サブシステム430のさまざまデータポート間でデータ信号をルーティングすることができるコアスイッチ426を含む。コアスイッチ426はまた、プログラマブル論理または処理サブシステム410および430のいずれかと、内部データバスなどのプログラマブルICのさまざまな他の回路との間で、データ信号をルーティングしてもよい。これに代えて、またはこれに加えて、プロセッササブシステム410は、コアスイッチ426をバイパスして、プログラマブル論理サブシステムと直接接続するためのインターフェイスを含んでいてもよい。そのようなインターフェイスは、たとえば、ARMによって公開されているようなAMBA AXIプロトコル仕様(AXI)を使用して実現されてもよい。
【0046】
いくつかの実現化例では、プロセッササブシステム410およびプログラマブル論理サブシステム430はまた、メモリコントローラ421を介して、オンチップメモリ422またはオフチップメモリ(図示せず)のメモリ場所に読み出しまたは書き込みを行なってもよい。メモリコントローラ421は、ダブルデータレート(Double Data Rate:DDR)2、DDR3、低電力(Low Power:LP)DDR2タイプのメモリを、16ビット、32ビット、ECC付き16ビットなどであろうとなかろうと含むものの、それらに限定されない、1つ以上の異なるタイプのメモリ回路と通信するように実現され得る。メモリコントローラ421が通信できる異なるメモリタイプのリストは、例示のみのために提供されており、限定として、または網羅的であるよう意図されてはいない。
図4に示すように、プログラマブルIC402は、メモリ管理ユニット420と、特定のメモリ場所にアクセスするためにサブシステム410および430によって使用される仮想メモリアドレスを、メモリコントローラ421によって使用される物理メモリアドレスに変換する変換索引バッファ424とを含んでいてもよい。
【0047】
プログラマブルICは、外部回路とのデータの通信のための入力/出力(I/O)サブシステム450を含んでいてもよい。I/Oサブシステム450は、たとえばフラッシュメモリタイプのI/Oデバイス、より高性能のI/Oデバイス、より低性能のインターフェイス、デバッギングI/Oデバイス、および/またはRAM I/Oデバイスを含む、さまざまなタイプのI/Oデバイスまたはインターフェイスを含んでいてもよい。
【0048】
I/Oサブシステム450は、460Aおよび460Bとして示される1つ以上のフラッシュメモリインターフェイス460を含んでいてもよい。たとえば、フラッシュメモリインターフェイス460のうちの1つ以上は、4ビット通信のために構成されたクワッドシリアルペリフェラルインターフェイス(Quad-Serial Peripheral Interface:QSPI)として実現され得る。フラッシュメモリインターフェイス460のうちの1つ以上は、パラレル8ビットNOR/SRAMタイプのインターフェイスとして実現され得る。フラッシュメモリインターフェイス460のうちの1つ以上は、8ビットおよび/または16ビット通信のために構成されたNANDインターフェイスとして実現され得る。記載された特定のインターフェイスは、限定のためではなく例示のために提供されているということが理解されるべきである。異なるビット幅を有する他のインターフェイスを使用することができる。
【0049】
I/Oサブシステム450は、フラッシュメモリインターフェイス460よりも高いレベルの性能を提供する1つ以上のインターフェイス462を含み得る。インターフェイス462A~462Cの各々は、DMAコントローラ464A~464Cにそれぞれ結合され得る。たとえば、インターフェイス462のうちの1つ以上は、ユニバーサルシリアルバス(Universal Serial Bus:USB)タイプのインターフェイスとして実現され得る。インターフェイス462のうちの1つ以上は、ギガビットイーサネット(登録商標)タイプのインターフェイスとして実現され得る。インターフェイス462のうちの1つ以上は、セキュアデジタル(Secure Digital:SD)タイプのインターフェイスとして実現され得る。
【0050】
I/Oサブシステム450はまた、インターフェイス462よりも低いレベルの性能を提供するインターフェイス466A~466Dなどの1つ以上のインターフェイス466を含んでいてもよい。たとえば、インターフェイス466のうちの1つ以上は、汎用I/O(General Purpose I/O:GPIO)タイプのインターフェイスとして実現され得る。インターフェイス466のうちの1つ以上は、ユニバーサル非同期受信/送信機(Universal Asynchronous Receiver/Transmitter:UART)タイプのインターフェイスとして実現され得る。インターフェイス466のうちの1つ以上は、シリアルペリフェラルインターフェイス(SPI)バスタイプのインターフェイスの形で実現され得る。インターフェイス466のうちの1つ以上は、コントローラエリアネットワーク(Controller-Area-Network:CAN)タイプのインターフェイス、および/または、相互集積回路(inter-integrated circuit:I2C)タイプのインターフェイスの形で実現され得る。インターフェイス466のうちの1つ以上はまた、タイマータイプのインターフェイスの形で実現され得る。
【0051】
I/Oサブシステム450は、プロセッサJTAG(PJTAG)インターフェイス468Aおよびトレースインターフェイス468Bなどの1つ以上のデバッグインターフェイス468を含み得る。PJTAGインターフェイス468Aは、プログラマブルIC402のための外部デバッグインターフェイスを提供することができる。トレースインターフェイス468Bは、デバッグを受信するためのポートを提供し、たとえば、プロセッササブシステム410またはプログラマブル論理サブシステム430からの情報をトレースすることができる。
【0052】
図示されるように、インターフェイス460、462、466、および468の各々は、マルチプレクサ470に結合され得る。マルチプレクサ470は、プログラマブルIC402の外部ピン、たとえば、プログラマブルIC402が内部に配置されるパッケージのボールに直接ルーティングまたは結合され得る複数の出力を提供する。たとえば、プログラマブルIC402のI/Oピンは、インターフェイス460、462、466、および468間で共有され得る。ユーザは、インターフェイス460~468のうちのどれが使用されるべきか、ひいては、マルチプレクサ470を介してプログラマブルIC402のI/Oピンに結合されるべきかを選択するように、構成データストリームを介してマルチプレクサ470を構成することができる。I/Oサブシステム450はまた、インターフェイス460~468をプログラマブル論理サブシステムのプログラマブル論理回路に接続するためのファブリックマルチプレクサI/O(fabric multiplexer I/O :FMIO)インターフェイス(図示せず)を含んでいてもよい。これに加えて、またはこれに代えて、プログラマブル論理サブシステム430は、プログラマブル論理内に1つ以上のI/O回路を実現するように構成され得る。いくつかの実現化例では、プログラマブルIC402はまた、電力および/または安全管理のためのさまざまな回路を有するサブシステム440を含んでいてもよい。たとえば、サブシステム440は、プログラマブルIC402のさまざまなサブシステムに電力を供給するために使用される1つ以上の電圧ドメインを監視し、維持するように構成された電力管理ユニット446を含んでいてもよい。いくつかの実現化例では、電力管理ユニット446は、消費電力を減少させるために、使用中のサブシステムへの電力を無効にすることなく、アイドル時の個々のサブシステムの電力を無効にしてもよい。
【0053】
サブシステム440はまた、正常動作を保証するようにサブシステムのステータスを監視するための安全回路を含んでいてもよい。たとえば、サブシステム440は、(たとえばステータスレジスタ444において示されるような)さまざまなサブシステムのステータスを監視するように構成された1つ以上のリアルタイムプロセッサ442を含んでいてもよい。リアルタイムプロセッサ442は、エラーの検出に応答して複数のタスクを行なうように構成されてもよい。たとえば、いくつかのエラーについて、リアルタイムプロセッサ442は、エラーの検出に応答して警告を生成してもよい。別の例として、リアルタイムプロセッサ442は、サブシステムをリセットして、サブシステムを正常動作に戻そうとしてもよい。サブシステム440は、さまざまなサブシステムを相互接続するために使用され得るスイッチネットワーク448を含む。たとえば、スイッチネットワーク448は、さまざまなサブシステム410、430、および440を、I/Oサブシステム450のさまざまなインターフェイスに接続するように構成されてもよい。いくつかの用途では、スイッチネットワーク448はまた、監視されるべきサブシステムからリアルタイムプロセッサ442を隔離するために使用されてもよい。そのような隔離は、リアルタイムプロセッサ442が他のサブシステムで生じるエラーの影響を受けないことを保証するために、ある用途規格(たとえば、IEC-61508 SIL3またはISO-26262規格)によって必要とされる場合がある。
【0054】
一例では、回路構成が提供される。そのような回路構成は、相互接続回路と、相互接続回路に結合されたメモリと、相互接続回路に結合された複数のプロセッサ回路と、複数のプロセッサ回路にそれぞれ結合された複数のキャッシュ回路と、相互接続回路に結合され、メモリのアドレスの第1のサブセットの個々のキャッシュラインによってスヌープ要求をフィルタリングするように構成された、第1のスヌープフィルタと、相互接続回路に結合され、メモリのアドレスの第2のサブセットのキャッシュラインのグループによってスヌープ要求をフィルタリングするように構成された、第2のスヌープフィルタとを含んでいてもよく、各グループは複数のキャッシュラインを包含する。
【0055】
何らかのそのような回路構成はさらに、第1のスヌープフィルタおよび第2のスヌープフィルタに結合された制御回路を含んでいてもよく、制御回路は、第2のスヌープフィルタによってフィルタリングされるキャッシュラインのグループを、第1のスヌープフィルタによってフィルタリングされるキャッシュラインに再割り当てするように構成されてもよい。
【0056】
何らかのそのような回路構成では、制御回路はさらに、第1のスヌープフィルタへの再割り当てのためのキャッシュラインのグループを、キャッシュラインのグループへの参照の時間的局所性に基づいて選択するように構成されてもよい。
【0057】
何らかのそのような回路構成では、制御回路はさらに、第1のスヌープフィルタへの再割り当てのためのキャッシュラインのグループを、キャッシュラインのグループにおけるキャッシュラインの独占的所有権に基づいて選択するように構成されてもよい。
【0058】
何らかのそのような回路構成では、制御回路はさらに、第1のスヌープフィルタへの再割り当てのためのキャッシュラインのグループを、キャッシュラインのグループにおける頻繁にアクセスされるキャッシュラインの判定に基づいて選択するように構成されてもよい。
【0059】
何らかのそのような回路構成では、制御回路はさらに、再割り当てのために選択されたグループに属するキャッシュラインを判定し、グループに属するキャッシュラインを第1のスヌープフィルタに再割り当てするように構成されてもよい。
【0060】
何らかのそのような回路構成では、制御回路はさらに、第1のスヌープフィルタからの第1のキャッシュラインを、第2のスヌープフィルタによってフィルタリングされる第1のグループに再割り当てするように構成されてもよい。
【0061】
何らかのそのような回路構成では、制御回路はさらに、第1のグループに属する、第1のスヌープフィルタによってフィルタリングされるキャッシュラインを判定し、第1のグループに属するキャッシュラインのキャッシュライン状態を、グループ状態に集約し、グループ状態を、第1のグループのタグと関連付けて格納し、第1のスヌープフィルタから、第1のグループにおけるキャッシュラインを除去するように構成されてもよい。
【0062】
何らかのそのような回路構成では、制御回路はさらに、第1のスヌープフィルタのディレクトリがいっぱいであることに応答して、第1のスヌープフィルタからの第1のキャッシュラインを、第2のスヌープフィルタによってフィルタリングされる第1のグループに再割り当てするように構成されてもよい。
【0063】
何らかのそのような回路構成では、制御回路はさらに、第1のスヌープフィルタから第2のスヌープフィルタによってフィルタリングされる第1のグループに再割り当てされるべき第1のキャッシュラインを、第1のキャッシュラインが最も長い間使用されていないことに基づいて選択するように構成されてもよい。
【0064】
何らかのそのような回路構成では、第1のスヌープフィルタは、個々のキャッシュラインの複数のキャッシュラインタグの格納のために構成された第1のメモリを含み、第2のスヌープフィルタは、キャッシュラインのグループにそれぞれ関連付けられた複数のグループタグの格納のために構成された第2のメモリを含み、各グループタグは、複数のキャッシュラインにマッピングする。
【0065】
何らかのそのような回路構成では、制御回路はさらに、第2のスヌープフィルタによってフィルタリングされるキャッシュラインの第1のグループの所有者カウントを判定し、第1のグループの所有者カウントが1に等しく、かつ、第1のグループのアクセスカウントがゼロよりも大きいことに応答して、第2のスヌープフィルタからのキャッシュラインの第1のグループのキャッシュラインを、第1のスヌープフィルタに再割り当てするように構成されてもよい。
【0066】
別の例では、方法が提供されてもよい。そのような方法は、メモリのキャッシュラインを、複数のプロセッサのキャッシュ回路にキャッシュするステップと、第1のスヌープフィルタが、メモリのアドレスの第1のサブセットの個々のキャッシュラインによってスヌープ要求をフィルタリングするステップと、第2のスヌープフィルタが、メモリのアドレスの第2のサブセットのキャッシュラインのグループによってスヌープ要求をフィルタリングするステップとを含んでいてもよく、各グループは複数のキャッシュラインを包含する。
【0067】
何らかのそのような方法はさらに、制御回路が、第2のスヌープフィルタによってフィルタリングされるキャッシュラインのグループを、第1のスヌープフィルタによってフィルタリングされるキャッシュラインに再割り当てするステップを含んでいてもよい。
【0068】
何らかのそのような方法はさらに、制御回路が、第1のスヌープフィルタへの再割り当てのためのキャッシュラインのグループを、キャッシュラインのグループへの参照の時間的局所性に基づいて選択するステップを含んでいてもよい。
【0069】
何らかのそのような方法はさらに、制御回路が、第1のスヌープフィルタへの再割り当てのためのキャッシュラインのグループを、キャッシュラインのグループにおけるキャッシュラインの独占的所有権に基づいて選択するステップを含んでいてもよい。
【0070】
何らかのそのような方法はさらに、制御回路が、第1のスヌープフィルタへの再割り当てのためのキャッシュラインのグループを、キャッシュラインのグループにおける頻繁にアクセスされるキャッシュラインの判定に基づいて選択するステップを含んでいてもよい。
【0071】
何らかのそのような方法はさらに、再割り当てのために選択されたグループに属するキャッシュラインを判定するステップと、グループに属するキャッシュラインを第1のスヌープフィルタに再割り当てするステップとを含んでいてもよい。
【0072】
何らかのそのような方法はさらに、第1のスヌープフィルタからの第1のキャッシュラインを、第2のスヌープフィルタによってフィルタリングされる第1のグループに再割り当てするステップを含んでいてもよい。
【0073】
何らかのそのような方法はさらに、第1のグループに属する、第1のスヌープフィルタによってフィルタリングされるキャッシュラインを判定するステップと、第1のグループに属するキャッシュラインのキャッシュライン状態を、グループ状態に集約するステップと、グループ状態を、第1のグループのタグと関連付けて格納するステップと、第1のスヌープフィルタから、第1のグループにおけるキャッシュラインを除去するステップとを含んでいてもよい。
【0074】
局面および特徴は、場合により、個々の図面で説明され得るが、たとえ、組合せが明示的に示されていなくても、または、組合せとして明示的に説明されていなくても、1つの図面からの特徴を別の図面の特徴と組合わせることができるということが理解されるであろう。
【0075】
開示される方法およびシステムは、キャッシュコヒーレンススヌープ要求をフィルタリングするためのさまざまなシステムに適用可能であると考えられる。他の局面および特徴は、明細書を考察すれば、当業者には明らかであろう。方法およびシステムは、ソフトウェアを実行するように構成された1つ以上のプロセッサとして、特定用途向け集積回路(ASIC)として、または、プログラマブル論理デバイス上の論理として実現されてもよい。明細書および図面は単なる例として考えられるよう意図されており、この発明の真の範囲は、以下の特許請求の範囲によって示される。