(57)【特許請求の範囲】
【請求項１】
プロセッサであって、
別のメモリ共有デバイスによって共有されるメモリからのキャッシュラインで動作するように構成された１つまたは複数のプロセッサコアと、
メモリバスを介して受信した複数の前記キャッシュラインを記憶するように構成された１つまたは複数のキャッシュと、
キャッシュブロック追跡エントリのテーブルを含むキャッシュスヌープ回路とを有し、、
ここで、前記キャッシュブロック追跡エントリのそれぞれは、それぞれ複数のキャッシュステータスエントリを含み、
各キャッシュステータスエントリは、前記キャッシュラインのうちの１つまたは複数のステータスをそれぞれ追跡し、
前記キャッシュスヌープ回路は、前記１つまたは複数のプロセッサコアのうちの１つが前記キャッシュラインのうちの１つを要求するとき、キャッシュブロック追跡エントリの前記テーブルに少なくとも部分的に基づいて、前記別のメモリ共有デバイスにスヌープ要求を発行するかどうかを判定するように構成され、
前記キャッシュスヌープ回路は、前記メモリバスを介してブロック追跡エントリを受信するように構成され、
ブロック追跡エントリのそれぞれは、２以上のキャッシュラインのステータスを追跡し、前記メモリのブロックにおけるキャッシュラインの領域を示すブロックタグを有し、
前記ブロック追跡エントリのそれぞれは、１以上のスロットを有し、
ここで、スロットのそれぞれは単一ビットを有し、メモリのブロックの１以上のキャッシュラインに対応する、
前記ブロック追跡エントリは、前記領域のサイズを動的に変化するようになっている
ことを特徴とするプロセッサ。
【請求項２】
前記キャッシュスヌープ回路は、
前記キャッシュブロック追跡エントリのうちの１つの前記複数のキャッシュステータスエントリのうちの有効な１つが、要求されたキャッシュラインに対応し、前記要求されたキャッシュラインのステータスを、前記別のメモリ共有デバイスによって場合により使用されていると示すとき、または、
前記キャッシュブロック追跡エントリのいずれの前記複数のキャッシュステータスエントリのうちの有効な１つのエントリも、前記要求されたキャッシュラインに対応しないとき、
前記別のメモリ共有デバイスに前記スヌープ要求を発行すると判定するように構成されていることを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記キャッシュスヌープ回路は、
前記キャッシュブロック追跡エントリのうちの１つの前記複数のキャッシュステータスエントリのうちの１つが、前記要求されたキャッシュラインに対応し、前記要求されたキャッシュラインのステータスを、前記別のメモリ共有デバイスによって到底使用されていないと示すとき、
前記別のメモリ共有デバイスに前記スヌープ要求を発行しないと判定するように構成されていることを特徴とする請求項１に記載のプロセッサ。
【請求項４】
２つ以上のメモリ共有デバイスと、
ここで、各メモリ共有デバイスは、キャッシュおよびブロック追跡エントリのテーブルを有し、
前記ブロック追跡エントリの前記テーブルのブロック追跡エントリのそれぞれは、メモリのブロックのキャッシュラインのグループのそれぞれのステータスを追跡するように構成されている、
前記２つ以上のメモリ共有デバイスによって共有されるように構成されたメモリデバイスと、
前記２つ以上のメモリ共有デバイスが互いに前記メモリ共有デバイスにスヌープ要求を発行し、かつ、前記２つ以上のメモリ共有デバイスへキャッシュラインを送信するのを可能にするように構成された通信バスとを含むシステムであって、
前記２つ以上のメモリ共有デバイスのそれぞれは、
そのキャッシュに存在しない場合のキャッシュラインのスヌープ要求の受信時に、要求されたキャッシュラインが属するメモリのブロックのキャッシュラインのグループのそれぞれのステータスを示すブロック追跡エントリを含む応答を前記通信バス上に発行するように構成され、
前記要求されたキャッシュラインが属するメモリの前記ブロックのキャッシュラインの前記グループの前記それぞれのステータスは、前記要求されたキャッシュラインが属するメモリの前記ブロックの前記キャッシュラインがそのキャッシュに存在するかどうかに少なくとも部分的に基づいて、判定され、
ブロック追跡エントリのそれぞれは、２以上のキャッシュラインのステータスを追跡し、メモリのブロックにおけるキャッシュラインの領域を示すブロックタグを有し、
前記ブロック追跡エントリのそれぞれは、１以上のスロットを有し、
ここで、スロットのそれぞれは単一ビットを有し、メモリのブロックの１以上のキャッシュラインに対応する、
前記ブロック追跡エントリは、前記領域のサイズを動的に変化するようになっている
ことを特徴とするシステム。
【請求項５】
前記２つ以上のメモリ共有デバイスのそれぞれは、そのキャッシュに存在しない場合の前記キャッシュラインの前記スヌープ要求の受信したときに、前記応答を発行するように構成されており、
前記応答は、前記要求されたキャッシュラインが属するメモリの前記ブロックのキャッシュラインのグループのそれぞれのステータスを示す前記ブロック追跡エントリから構成され、
前記応答が、前記通信バスと同じサイズである
ことを特徴とする請求項４に記載のシステム。
【請求項６】
前記２つ以上のメモリ共有デバイスのそれぞれは、そのキャッシュに存在する場合のキャッシュラインのスヌープ要求の受信したときに、要求されたキャッシュラインを含む応答を発行するように構成され、
前記応答が、前記通信バスと同じサイズであることを特徴とする請求項５に記載のシステム。
【請求項７】
前記２つ以上のメモリ共有デバイスのそれぞれは、そのキャッシュに存在する場合のキャッシュラインのスヌープ要求の受信したとき、要求されたキャッシュラインを含む第１の応答と、前記要求されたキャッシュラインが属するメモリのブロックのキャッシュラインのグループのそれぞれのステータスを示すブロック追跡エントリを含む第２の応答とを発行するように構成され、
前記要求されたキャッシュラインが属するメモリの前記ブロックのキャッシュラインの前記グループの前記それぞれのステータスは、前記要求されたキャッシュラインが属するメモリの前記ブロックの前記キャッシュラインがそのキャッシュに存在するかどうかに少なくとも部分的に基づいて、判定される
ことを特徴とする請求項４に記載のシステム。
【請求項８】
前記２つ以上のメモリ共有デバイスのそれぞれは、そのキャッシュに存在する場合のキャッシュラインのスヌープ要求の受信したときに、要求されたキャッシュラインを含む第１の応答と、前記要求されたキャッシュラインが属するメモリのブロックのキャッシュラインのグループのそれぞれのステータスを示すブロック追跡エントリを含む第２の応答とを発行するように構成され、
前記要求されたキャッシュラインが属するメモリの前記ブロックのキャッシュラインの前記グループの前記それぞれのステータスは、計数ブルームフィルタ、別のフィルタ、またはそのキャッシュに存在する前記キャッシュラインと同様のプロパティを含むフィルタ階層に少なくとも部分的に基づいて、判定される
ことを特徴とする請求項４に記載のシステム。
【請求項９】
通信バスを介して第１のプロセッサと第２のプロセッサ間でメモリを共有する工程と、
ここで、前記通信バスは前記第１のプロセッサ及び前記第２のプロセッサが前記メモリからキャッシュラインを受信可能にしている；
電子デバイスの前記第１のプロセッサにおける所望のキャッシュラインのキャッシュミス時に、前記第１のプロセッサに関連付けられたブロック追跡エントリの第１のテーブルの有効なブロック追跡エントリであって、メモリのブロックの１つまたは複数のキャッシュラインにそれぞれ関連付けられた複数のキャッシュステータスエントリそれぞれを介して、前記所望のキャッシュラインを含むメモリの前記ブロックを追跡する、有効なブロック追跡エントリが、第２のプロセッサとのキャッシュコヒーレンスを維持するためにスヌープ要求が必要でないことを示す、前記所望のキャッシュラインに関連付けられたキャッシュステータスエントリを含まない限り、前記電子デバイスの前記第１のプロセッサから前記第２のプロセッサに、スヌープ要求を発行する工程と、
ここで、ブロック追跡エントリのそれぞれは、メモリのブロックにおけるキャッシュラインの領域を示すブロックタグを有し、
前記ブロック追跡エントリのそれぞれは、１以上のスロットを有し、
ここで、スロットのそれぞれは単一ビットを有し、メモリのブロックの１以上のキャッシュラインに対応する、
前記ブロック追跡エントリは、前記領域のサイズを動的に変化するようになっている
ことを特徴とする方法。
【請求項１０】
前記スヌープ要求を発行する工程は、前記所望のキャッシュラインに関連付けられたキャッシュラインスヌープ要求、または前記所望のキャッシュラインに関連付けられたブロック追跡エントリのための要求、あるいはその両方を発行する工程を含むことを特徴とする請求項９に記載の方法。
【請求項１１】
前記スヌープ要求が発行されたとき、
前記第２のプロセッサにて前記スヌープ要求を受信する工程と、
キャッシュステータスエントリを有するブロック追跡エントリを用いて、前記スヌープ要求に応答する工程と、
ここで、前記キャッシュステータスエントリは、前記スヌープ要求とオーバーラップするメモリのブロックにおいて、前記第２のプロセッサによって使用されているキャッシュされていないキャッシュラインに対応したあらゆるキャッシュラインのために、スヌープ要求が発行されるべきであることを示している、
を含むことを特徴とする請求項９に記載の方法。
【請求項１２】
前記第２のプロセッサが、閾値時間内に前記スヌープ要求に対する応答を返していないかどうかを前記第１のプロセッサにおいて判定する工程と、
前記第２のプロセッサが前記閾値時間内に前記スヌープ要求に対する前記応答を返していないときに、前記所望のキャッシュラインを含むメモリのブロックにおけるすべてのキャッシュラインが、アクセスされる前にスヌープ要求を要求すべきであることを示すために、ブロック追跡エントリの前記第１のテーブルを更新する工程と
を含むことを特徴とする請求項９に記載の方法。
【請求項１３】
前記スヌープ要求は、前記所望のキャッシュラインの単独使用を前記第１のプロセッサに与えるように構成されており、
前記第２のプロセッサとのキャッシュコヒーレンスを維持するために、前記所望のキャッシュラインのためのいかなるスヌープ要求も必要でないことを示すために、ブロック追跡エントリの前記第１のテーブルを更新する工程を含むことを特徴とする請求項９に記載の方法。
【請求項１４】
前記スヌープ要求は、前記所望のキャッシュラインが属するメモリのブロックの単独使用を前記第１のプロセッサに与えるように構成されており、
前記第２のプロセッサとのキャッシュコヒーレンスを維持するために、前記所望のキャッシュラインが属するメモリの前記ブロックにおけるいかなるキャッシュラインのためのいなかるスヌープ要求も必要でないことを示すために、ブロック追跡エントリの前記第１のテーブルを更新する工程を含むことを特徴とする請求項９に記載の方法。
【請求項１５】
前記第１のプロセッサが、今後において、かつ前記所望のキャッシュラインの前記キャッシュミスの前に、前記所望のキャッシュラインにアクセスするよう試みることを予期するときに、前記第１のプロセッサから前記第２のプロセッサに、前記所望のキャッシュラインに関連付けられたブロック追跡エントリのための要求を発行する工程を含むことを特徴とする請求項９に記載の方法。
【請求項１６】
前記所望のキャッシュラインに対するスヌープ要求が発行されたとき、
前記第２のプロセッサにて前記スヌープ要求を受信する工程と、
前記第２のプロセッサに関連付けられたブロック追跡エントリの第２のテーブルを更新する工程と
を含むことを特徴とする請求項９に記載の方法。
【請求項１７】
ブロック追跡エントリの前記第２のテーブルのブロック追跡エントリのうちの１つの前記所望のキャッシュラインに関連付けられたキャッシュステータスエントリを、前記第１のプロセッサとのキャッシュコヒーレンスを維持するためには前記所望のキャッシュラインのための別のスヌープ要求が必要である可能性があることを示すためにマークすることによって、ブロック追跡エントリの前記第２のテーブルが更新されることを特徴とする請求項１６に記載の方法。
【請求項１８】
前記スヌープ要求とオーバーラップするキャッシュされていないキャッシュラインに対応したブロック追跡エントリの前記第２のテーブルのブロック追跡エントリのすべてのキャッシュステータスエントリを、前記第１のプロセッサとのキャッシュコヒーレンスを維持するためには前記スヌープ要求とオーバーラップする前記キャッシュされていないキャッシュラインのいずれかのための別のスヌープ要求が必要である可能性があることを示すためにマークすることによって、ブロック追跡エントリの前記第２のテーブルが更新されることを特徴とする請求項１６に記載の方法。
【請求項１９】
前記スヌープ要求が発行されるときに、
前記第２のプロセッサにおいて前記スヌープ要求を受信する工程と、
前記スヌープ要求に少なくとも部分的に基づいて、前記第２のプロセッサに関連付けられたキャッシュを更新する工程と
を含むことを特徴とする請求項９に記載の方法。
【請求項２０】
前記第２のプロセッサに関連付けられた前記キャッシュを更新する工程が、前記スヌープ要求とオーバーラップするあらゆる変更されていないキャッシュラインを無効にする工程を含むことを特徴とする請求項１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、キャッシュコヒーレンスに関し、より詳細には、１つまたは複数のキャッシュラインのグループが場合により使用されている(possibly in use)かどうかを追跡(track)することによって、デバイス間のキャッシュコヒーレンスを効果的に維持するための技法に関する。
【背景技術】
【０００２】
この節は、以下で説明される、及び／または、請求される本技法のさまざまな態様に関連し得る技術のさまざまな態様に、読者を導くことを意図する。この議論は、本開示のさまざまな態様のよりよい理解を促進するための基礎的な情報を、読者に提供するのに役立つものと考えられる。したがって、これらの記述は、この観点から読まれるべきであり、先行技術を承認するものとして読まれるべきではないことを理解されたい。
【０００３】
複数のプロセッサまたは他のメモリ共有デバイスを備えた電子デバイスは、共有メモリの整合性を維持するために、キャッシュコヒーレンス技法を頻繁に利用する。一般的なキャッシュコヒーレンス技法は、１つのプロセッサが、所望のメモリにアクセスする前に、別のプロセッサにスヌープ要求を伝達することができる、バススヌーピングを含むことである。そのようなキャッシュコヒーレンス技法は、プロセッサが比較的中程度のメモリ帯域幅で動作するときには、許容できる結果を生み出すことができる。しかしながら、プロセッサの１つまたは複数が、特に高いメモリ帯域幅（たとえば、グラフィックスプロセッシングユニット、すなわちＧＰＵ）を利用するメモリ共有デバイスであるときには、過度のスヌープトラフィックを生じることがある。この理由から、ＧＰＵなどの高帯域幅のデバイスは、一般的に、電子デバイスの他のメモリ共有デバイスと非コヒーレントにされる。あいにく、非コヒーレントデバイスは、それらの非コヒーレントメモリを管理するために特別に書かれたソフトウェアを必要とすることがある。したがって、一般的なコンピューティングタスクでは、高パフォーマンス、高帯域幅のプロセッサの使用が制限されることがある。たとえば、ＧＰＵでの一般的な処理は、明示的なメモリバッファ管理によって書かれた特殊化したプログラムを必要とすることがあり、これは、ソフトウェア開発者にとって興味に乏しい、厄介なものであり得る。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本明細書において開示される特定の実施形態の概要を以下で説明する。これらの態様は、これらの特定の実施形態の簡単な概要を読者に提供するために単に提示されること、およびこれらの態様は、本開示の範囲を限定することを意図しないことを理解されたい。実際、本開示は、以下で説明され得ないさまざまな態様を包含することができる。
【課題を解決するための手段】
【０００５】
本開示の実施形態は、中央処理装置（ＣＰＵ）およびグラフィックスプロセッシングユニット（ＧＰＵ）などのメモリ共有デバイス間で、キャッシュコヒーレンスを効率的に維持するための技法に関する。たとえば、本実施形態は、結果として圧倒するほどのスヌープトラフィックとなる可能性がある従来のキャッシュコヒーレントプロトコル（たとえば、ＭＥＳＩ、ＭＯＳＩ、ＭＯＥＳＩ、その他）に単に従って、キャッシュラインスヌープ要求を発行することに関与し得るばかりではない。むしろ、所望のキャッシュラインが別のメモリ共有デバイスによって到底使用されている可能性がないときに、スヌープトラフィックを抑制することによって、キャッシュコヒーレンスをより効率的に維持することができる。どのスヌープトラフィックを抑制するかを判定するために、本実施形態は、メモリのブロックにおける１つまたは複数のキャッシュラインのグループが、他のプロセッサによって場合により使用されているか(possibly in use)どうかを追跡することができる。とりわけ、メモリ共有デバイスは、「ブロック追跡エントリ（block tracking entries:ＢＴＥ）」のテーブルを利用することができ、各ＢＴＥは、メモリのブロックの１つまたは複数のキャッシュラインのグループが、別のメモリ共有デバイスによって潜在的に使用されている可能性があるかどうかを示す。詳細には、各ＢＴＥは、いくつかの「キャッシュステータスエントリ」を含むことができ、この「キャッシュステータスエントリ」それぞれが、１つまたは複数のキャッシュラインが１つまたは複数の他のメモリ共有デバイスによって潜在的に使用されている可能性があるかどうか（たとえば、「スヌープ要のライン」か、または「スヌープ不要のライン」か）を示す。
【０００６】
ブロック追跡エントリ（ＢＴＥ）テーブルは、不必要なスヌープトラフィックのかなりの部分を防いで、より一層効率的なキャッシュコヒーレンスを見込むことができる。たとえば、有効なＢＴＥが、あるキャッシュラインをスヌープ不要のラインとして示す場合、メモリ共有デバイスは、いかなるスヌープ要求もブロードキャストすることなしに、共有メモリから、キャッシュラインにアクセスすることができる。そうでない場合、メモリ共有デバイスは、キャッシュラインスヌープ要求をブロードキャストして、キャッシュコヒーレンスを保証することができる。例として、メモリ共有デバイスは、それぞれがいくつかのキャッシュステータスエントリを有する、ＢＴＥのテーブルを利用することができる。キャッシュステータスエントリが、１つまたは複数のキャッシュラインのグループのいずれも別のメモリ共有デバイスによって到底使用されている可能性がないことを示すとき、キャッシュコヒーレンスを危うくすることなく、そのグループのあらゆるキャッシュラインのためのスヌープ要求を抑制することができる。
【０００７】
上で触れた特徴のさまざまな改善点が、本開示のさまざまな態様に関して存在し得る。さらなる特徴がまた、これらのさまざまな態様に同様に組み込まれてもよい。これらの改善点および追加の特徴は、個別に、または任意の組合せにおいて存在し得る。たとえば、説明される実施形態のうちの１つまたは複数に関して以下で論じるさまざまな特徴が、本開示単独の、または任意の組合せにおいて、上で説明した態様のうちのいずれかに組み込まれてもよい。さらに、上に提示された簡単な概要は、特許請求される主題に限定することなく、本開示の実施形態の特定の態様およびコンテキストに、読者を精通させることのみを意図する。
【０００８】
以下の詳細な説明を読み、図面を参照する際に、本開示のさまざまな態様をよりよく理解することができる。
【図面の簡単な説明】
【０００９】
【図１】実施形態における２つのメモリ共有デバイスのうちの少なくとも１つがＧＰＵなどの比較的高帯域幅のメモリ共有デバイスとする２つのメモリ共有デバイス間でキャッシュコヒーレンスを維持する電子デバイスのブロック図である。
【図２】実施形態に従った、ノートブックコンピュータの形態での図１の電子デバイスの透視図である。
【図３】実施形態に従った、メモリのブロックにおける１つまたは複数のキャッシュラインのグループが、他のプロセッサによって場合により使用されているかどうかを追跡するブロック追跡エントリのテーブルを使用して、キャッシュコヒーレンスを効率的に維持することできる２つのプロセッサの概略ブロック図である。
【図４】実施形態に従った、図３に示されたプロセッサのうちの１つがメモリを要求するときに行われてよい通信を表す概略の流れ図である。
【図５】実施形態に従った、メモリのブロックにおける１つまたは複数のキャッシュラインのグループが、別のメモリ共有デバイスによって場合により使用されているかどうかを追跡するブロック追跡エントリ（ＢＴＥ）のテーブルの概略ブロック図である。
【図６】実施形態に従った、ブロック追跡エントリ（ＢＴＥ）が、メモリのブロックにおける１つまたは複数のキャッシュラインのグループが、別のメモリ共有デバイスによって場合により使用されているかどうかを追跡することができる、１つのやり方を表す概略ブロック図である。
【図７】実施形態に従った、スヌープ要求およびブロック追跡エントリ（ＢＴＥ）要求を通信するためのバスの概略図である。
【図８】実施形態に従った、図７のメモリバス上で行われる通信を表す概略ブロック図である。
【図９】実施形態に従った、図７のメモリバス上で行われる通信を表す概略ブロック図である。
【図１０】メモリのブロックにおける１つまたは複数のキャッシュラインのグループが、別のメモリ共有デバイスによって場合により使用されているかどうかを追跡するブロック追跡エントリ（ＢＴＥ）のテーブルを使用して、キャッシュコヒーレンスを効率的に維持するための方法の実施形態を説明するフローチャートである。
【図１１】、
【図１２】、
【図１３】図１０のフローチャートに従った、２つ以上のメモリ共有デバイス間でキャッシュコヒーレンスを効率的に維持するための方法の実施形態を説明するフローチャートである。
【図１４】キャッシュコヒーレンスを効率的に維持するために、ブロック追跡エントリ（ＢＴＥ）テーブルを先制してポピュレートするための方法の実施形態を説明するフローチャートである。
【図１５】、
【図１６】、
【図１７】ブロック追跡エントリ（ＢＴＥ）テーブルのエントリを更新するための方法の実施形態を説明するフローチャートである。
【図１８】、
【図１９】、
【図２０】、
【図２１】キャッシュラインスヌープ要求またはブロック追跡エントリ（ＢＴＥ）スヌープ要求に応答するための方法の実施形態を説明するフローチャートである。
【図２２】実施形態に従った、２つのメモリ共有デバイスのうちの１つが、ブロック追跡エントリ（ＢＴＥ）のテーブルなしに、キャッシュコヒーレンスを効率的に維持することができるレガシーメモリ共有デバイスであってよい、２つのメモリ共有デバイスの概略ブロック図である。
【図２３】実施形態に従った、図２２のシステムにおいてキャッシュコヒーレンスを維持するために行われてよい通信を表す流れ図である。
【図２４】実施形態に従った、競合に応じて、１つまたは複数のキャッシュラインのより粗粒化された、またはより細粒化されたグループを追跡するための競合カウンタの使用を表す概略ブロック図である。
【図２５】１つまたは複数のキャッシュラインの、より細粒化されたグループを追跡するか、より粗粒化されたグループ追跡するかを判定するための方法の実施形態を説明するフローチャートである。
【図２６】実施形態に従った、電子デバイスのキャッシュコヒーレンスの挙動を変化させるのに使用されてよいさまざまな要因を示す、スヌープトラフィック統計値の図である。
【図２７】メモリ共有デバイス間での競合を削減するために使用されてよい方法の実施形態を説明するフローチャートである。
【図２８】実施形態に従って、スヌープが異なるメモリ共有デバイス間での競合インジケータの通信を表す概略ブロック図である。
【図２９】競合に応じて、メモリ上の単独使用を特定のデバイスに与えるための方法の実施形態を説明するフローチャートである。
【発明を実施するための形態】
【００１０】
本開示の１つまたは複数の特定の実施形態を以下で説明する。説明するこれらの実施形態は、目下開示されている技法の例にすぎない。加えて、これらの実施形態の簡潔な説明を与えるための取り組みにおいては、実際の実装形態のすべての特徴が本明細書において説明されるわけではない。あらゆるそのような実際の実装形態の開発においては、あらゆるエンジニアリングまたは設計プロジェクトと同様に、数多くの実装形態固有の決定が、実装形態ごとに異なることがあるシステム関連およびビジネス関連の規制の準拠などの、開発者の固有の目標を達成するために行われなければならないことを認識されたい。さらに、そのような開発の取り組みは、複雑で時間のかかる場合があるが、それでも、本開示の利益を得る当業者にとっての設計、製作、および製造の日常の業務であり得ることを認識されたい。
【００１１】
本開示のさまざまな実施形態の要素を導入する際、冠詞「ａ」、「ａｎ」、および「ｔｈｅ」は、要素の１つまたは複数が存在することを意味するように意図する。用語「ｃｏｍｐｒｉｓｉｎｇ（備える、含む）」、「ｉｎｃｌｕｄｉｎｇ（含む）」、および「ｈａｖｉｎｇ（有する）」は、包括的であり、列挙された要素以外の追加の要素が存在する場合があることを意味するように意図する。さらに、本開示の「一実施形態」または「ある実施形態」への言及は、列挙された特徴をやはり組み込む追加の実施形態の存在を排除するものとして解釈されるようには意図しないことを理解されたい。
【００１２】
上述したように、本開示の実施形態は、メモリ共有デバイスのうちの１つまたは複数が、メモリの比較的高帯域幅（たとえば、特にＰＣＩｅにわたって１００ＧＢ／ｓ以上）を消費する場合であっても、中央処理装置（ＣＰＵ）およびグラフィックスプロセッシングユニット（ＧＰＵ）などのメモリ共有デバイスによるキャッシュコヒーレンスを、効率的に維持するための技法に関する。たとえば、本実施形態は、メモリの大きなスワス（ｓｗａｔｈ）が継続的に回転しているときに、結果として圧倒するほどのスヌープトラフィックとなる可能性がある従来のキャッシュコヒーレントプロトコル（たとえば、ＭＥＳＩ、ＭＯＳＩ、ＭＯＥＳＩ、その他）に従って、キャッシュラインスヌープ要求を発行することに関与し得るばかりではない。メモリの大きなスワスのこの高速回転は、ＧＰＵなどの高帯域幅メモリ共有デバイスのキャッシュにおいて、頻繁に発生することがある。むしろ、所望のキャッシュラインが別のメモリ共有デバイスによって到底使用されている可能性がないことが判定され得るとき、特定のスヌープトラフィックを抑制することによって、キャッシュコヒーレンスをより効率的に維持することができる。どのスヌープトラフィックを抑制するかを判定するために、本実施形態は、メモリのブロックにおける１つまたは複数のキャッシュラインのグループが、他のプロセッサによって場合により使用されているかどうかを追跡することができる。メモリのそのようなブロックは、メモリの連続したブロックであっても、そうでなくてもよい。
【００１３】
とりわけ、各メモリ共有デバイスは、「ブロック追跡エントリ（ＢＴＥ）」のテーブルを維持する「スヌープ抑制ブロック」を利用することができる。ＢＴＥのこのテーブルは、「ＢＴＥテーブル」と呼ばれてもよい。本明細書で使用されるとき、そのようなスヌープ抑制ブロックは、メモリ共有デバイスのハードウェアコンポーネントとして、または、ファームウェアもしくはソフトウェアなどの、なんらかの形のマシン可読命令として実装されてよいことを認識されたい。しかしながら、スヌープ抑制ブロックは、ハードウェアにおいて実装されるとき、より一層効率的であろうと考えられている。ＢＴＥテーブルは、ＢＴＥの集まりを表すことができ、そのそれぞれが、メモリのブロックの１つまたは複数のキャッシュラインのグループが、別のメモリ共有デバイスによって潜在的に使用されている可能性があるかどうかを示す。すなわち、各ＢＴＥは、いくつかの「キャッシュステータスエントリ」を含むことができ、各キャッシュステータスエントリは、１つまたは複数のキャッシュラインが１つまたは複数の他のメモリ共有デバイスによって潜在的に使用されている可能性があるかどうかを示すことができる。詳細には、各キャッシュステータスエントリは、１つまたは複数のキャッシュラインのグループが、「スヌープ要のライン(line-snoop-required)」であるか、または「スヌープ不要のライン(no-line-snoop-required)」であるかを示すことができる。
【００１４】
キャッシュステータスエントリが、１つまたは複数のキャッシュラインのグループがスヌープ要のラインとして、またはスヌープ不要のラインとして示されるべきかを示すかどうかということは、使用されている基礎となるキャッシュコヒーレンスプロトコルに依存してよい。たとえば、変更された、独占的な、共有された、および無効のキャッシュコヒーレンス状態を提供するＭＥＳＩプロトコルでは、グループの１つまたは複数のキャッシュラインのうちの少なくとも１つが、別のメモリ共有デバイスによって変更された、共有された、または独占的な状態に保持されている、または保持されている可能性があるときに、キャッシュステータスエントリは、１つまたは複数のキャッシュラインのグループをスヌープ要のラインとして示すことができることが企図される。同様に、グループのキャッシュラインのすべてが、メモリ共有デバイスの知識なしにアクセスされる、または変更される可能性がない状態にあるとき、キャッシュステータスエントリは、１つまたは複数のキャッシュラインのグループがスヌープ不要のラインであることを示すことができる。したがって、第２のメモリ共有デバイスが、最初に第１のメモリ共有デバイスに（たとえば、キャッシュラインスヌープ要求を介して）通知することなく、所与のキャッシュラインに場合によりアクセスする可能性がある場合、第１のメモリ共有デバイスに関連付けられたＢＴＥのキャッシュステータスエントリは、スヌープ不要のラインとしてのそのキャッシュラインを含むグループをリストにすることはない。
【００１５】
メモリ共有デバイスのスヌープ抑制ブロックにおけるブロック追跡エントリ（ＢＴＥ）テーブルは、不必要なスヌープトラフィックのかなりの部分を防いで、より一層効率的なキャッシュコヒーレンスを見込むことができる。たとえば、メモリ共有デバイスがそのローカルキャッシュに即座に存在しないメモリのキャッシュラインへのアクセスを求めるとき、「キャッシュミス」と呼ばれるイベントにおいて、メモリ共有デバイスは、所望のキャッシュラインのためのキャッシュラインスヌープ要求を、必ずしもブロードキャストしなくてもよい。むしろ、スヌープ抑制ブロックが、そのＢＴＥテーブルのブロック追跡エントリ（ＢＴＥ）がスヌープ不要のラインとしてのキャッシュラインを示すことを判定した場合に、メモリ共有デバイスは、いかなるスヌープ要求もブロードキャストせずに、共有メモリからキャッシュラインにアクセスすることができる。スヌープ抑制ブロックのＢＴＥテーブルが、所望のキャッシュラインのステータスを示すキャッシュステータスエントリを有するＢＴＥを欠いている場合、または、ＢＴＥテーブルが、所望のキャッシュラインがスヌープ要のラインであることを示すキャッシュステータスエントリを有するＢＴＥを含む場合、メモリ共有デバイスは、キャッシュラインスヌープ要求をブロードキャストして、キャッシュコヒーレンスを保証することができる。
【００１６】
キャッシュラインスヌープ要求を送出することは、メモリ共有デバイスのスヌープ抑制ブロックのブロック追跡エントリ（ＢＴＥ）テーブルを効率的にポピュレート（populate:ＢＴＥテーブルにデータを格納する）ために使用できる。とりわけ、所望のキャッシュラインにアクセスすることは、一般的に、共有メモリ内の所望のキャッシュラインに隣接する他のキャッシュラインにアクセスすることに先行してよいので、キャッシュラインスヌープ要求を受信する他のメモリ共有デバイスは、代替として、または従来のキャッシュラインスヌープ応答に加えて、所望のキャッシュラインを含むキャッシュラインのブロックのステータスを控えめにリストにするＢＴＥを提供することによって、そのようなキャッシュラインスヌープ要求に応答することができる。このようにして、他のメモリ共有デバイスが、特定のキャッシュライン、またはそのキャッシュラインを含むメモリのブロックにおけるキャッシュラインを使用していない場合に、キャッシュラインスヌープ要求を発行するメモリ共有デバイスは、そのように示すＢＴＥを受信することができる。したがって、メモリ共有デバイスのスヌープ抑制ブロックのＢＴＥテーブルは、これらの他のキャッシュラインをスヌープ不要のラインとしてリストにすることができるので、これらの他のキャッシュラインがキャッシュミスの際に、メモリ共有デバイスは、いかなる追加のキャッシュラインスヌープ要求もブロードキャストせずに、共有メモリ内でこれらの他のキャッシュラインに直接アクセスすることができる。
【００１７】
以下でより詳細に説明するように、本開示は、メモリ共有デバイスのそのようなスヌープ抑制ブロックにおけるブロック追跡エントリ（ＢＴＥ）テーブルを利用し、ポピュレートするためのさまざまな実施形態を提供する。上で触れたように、グラフィックスプロセッシングユニット（ＧＰＵ）などの、少なくとも１つの高帯域幅のメモリ共有デバイスを利用する電子デバイスは、本開示に従ってより効率的にキャッシュコヒーレンスを維持することによって、特に利益を得ることができる。しかしながら、比較的低帯域幅のメモリ共有デバイスのみを備えた電子デバイスであっても、本技法から利益を得ると考えられることを理解されたい。
【００１８】
以上を念頭に置いて、開示されるメモリコヒーレンス技法を利用できる好適な電子デバイスの一般的な説明を以下に示す。図１には、本技法と使用するために適した電子デバイスに存在し得るさまざまなコンポーネントを示すブロック図が提供される。図２において、ここではノートブックコンピュータシステムとして提供される好適な電子デバイスの一例が図示される。これらのタイプの電子デバイス、および匹敵するメモリ管理能力を有する他の電子デバイスを、本技法と共に使用することができる。
【００１９】
図１は、本明細書で開示される技法を実行することができる電子デバイス１０のさまざまなコンポーネントおよび特徴を示すブロック図である。現在示されている実施形態において、そのようなコンポーネントは、２つ以上のプロセッサ１２と、メモリ１４と、非揮発性記憶装置１６と、ディスプレイ１８と、入力構造２０と、入力／出力（Ｉ／Ｏ）ポート２２と、ネットワーキングデバイス２４と、電源２６とを含むことができる。
【００２０】
プロセッサ１２は、異種の能力を有しても、有していなくてもよい、少なくとも２つのプロセッサを含むことができる。例として、プロセッサ１２のうちの１つは、比較的低い特徴的なメモリ使用率および／または帯域幅を備えた中央処理装置（ＣＰＵ）であってよく、プロセッサ１２のうちのもう一方は、比較的高い特徴的なメモリ使用率および／または帯域幅を備えたグラフィックスプロセッシングユニット（ＧＰＵ）であってよい。本開示は、異種のプロセッサを表すために、ＣＰＵおよびＧＰＵを使用する本技法のさまざまな例を提供するが、任意の他の好適なメモリ共有デバイス（たとえば、ストリーミングプロセッサ、ネットワークコントローラ、その他）が使用されてよいことを理解されたい。図１の例において、プロセッサ１２のうちの少なくとも１つは、オペレーティングシステム（ＯＳ）の動作を可能にすることができ、ＯＳは、ＯＳ上で動くソフトウェアに仮想メモリリソースを割り当てることができる。仮想メモリは、メモリ１４および／または非揮発性記憶装置１６の実際のハードウェアロケーションに対応することができる。プロセッサ１２上で動作するＯＳはまた、図１４を参照して以下で説明するように、プロセッサ１２間で共有されるメモリリソースのためのメモリコヒーレンスを維持するための特定の技法を実行することができる。加えて、または代替として、プロセッサ１２の１つまたは複数のメモリ管理ユニット（ＭＭＵ）が、異種のプロセッサ間でキャッシュコヒーレンスを効率的に維持するために、プロセッサ間通信を調整することができる。プロセッサ１２のうちの少なくとも１つは、ブロック追跡エントリ（ＢＴＥ）のテーブルを含むことができ、ＢＴＥは、メモリのブロックにおける１つまたは複数のキャッシュラインのグループが、別の他のプロセッサ１２によって場合により使用されているかどうかを追跡することができる。
【００２１】
メモリ１４は、本明細書で開示される本技法の特定の態様を実行するための命令を記憶することができる。これらの命令は、少なくとも一時的にメモリ１４に記憶されてよく、プロセッサ１２のうちの１つまたは複数によって実行されてよい。そのような命令はまた、たとえば、ハードディスクドライブまたはフラッシュメモリを含んでよい非揮発性記憶装置１６に記憶されてもよい。ディスプレイ１８は、電子デバイス１０のユーザインターフェース（ＵＩ）などの、ＯＳまたはソフトウェアの要素を表示することができる。ユーザは、キーボードおよび／またはマウスもしくはタッチパッドを含んでよい入力構造２０を介して、電子デバイス１０と対話することができる。特定の実施形態において、ディスプレイ１８は、入力構造２０の１つとしての機能を果たすタッチスクリーンディスプレイであってもよい。
【００２２】
電子デバイス１０のＩ／Ｏポート２２は、電子デバイス１０が、他の電子デバイス１０に、および／または外付けのキーボードまたはマウスなどのさまざまな周辺デバイスに、データを送信し、それらからデータを受信するのを可能にすることができる。ネットワーキングデバイス２４は、パーソナルエリアネットワーク（ＰＡＮ）の統合（たとえば、Ｂｌｕｅｔｏｏｔｈ（登録商標））、ローカルエリアネットワーク（ＬＡＮ）の統合（たとえば、Ｗｉ−Ｆｉ）、および／またはワイドエリアネットワーク（ＷＡＮ）の統合（たとえば、３Ｇ）を可能にすることができる。電子デバイス１０の電源２６は、充電可能なリチウムポリマー（Ｌｉ−ｐｏｌｙ）電池および／または交流電流（ＡＣ）電力変換装置などの、任意の好適な電力源であってよい。
【００２３】
電子デバイス１０は、コンピュータまたは他のタイプの電子デバイスの形態を取ることができる。そのようなコンピュータは、一般的に持ち運び可能なコンピュータ（ラップトップコンピュータ、ノートブックコンピュータ、およびタブレットコンピュータなど）、ならびに一般的に一箇所で使用されるコンピュータ（従来のデスクトップコンピュータ、ワークステーション、および／またはサーバなど）を含むことができる。特定の実施形態において、コンピュータの形態での電子デバイス１０は、Ａｐｐｌｅ  Ｉｎｃ．より入手可能な、ＭａｃＢｏｏｋ（登録商標）、ＭａｃＢｏｏｋ（登録商標）Ｐｒｏ、ＭａｃＢｏｏｋ  Ａｉｒ（登録商標）、ｉＭａｃ（登録商標）、Ｍａｃ（登録商標）ｍｉｎｉ、またはＭａｃ  Ｐｒｏ（登録商標）のモデルであってもよい。例として、本開示の一実施形態に従って、ノートブックコンピュータ２８の形態を取る電子デバイス１０が図２に示されている。図示されたコンピュータ２８は、ハウジング３０と、ディスプレイ１８と、入力構造２０と、Ｉ／Ｏポート２２とを含むことができる。一実施形態において、入力構造２０（キーボードおよび／またはタッチパッドなど）は、コンピュータ２８上で動くＧＵＩまたはアプリケーションを開始する、制御する、または動作させるためなどの、コンピュータ２８との対話に使用されてよい。たとえば、キーボードおよび／またはタッチパッドは、ユーザが、ディスプレイ１８に表示されるユーザインターフェースまたはアプリケーションインターフェースをナビゲートするのを可能にすることができる。
【００２４】
図１および図２を参照して上で説明されるシステムにおいて、プロセッサ１２は、メモリのブロックにおける１つまたは複数のキャッシュラインのグループが、プロセッサ１２のもう一方によって場合により使用されているかどうかを追跡することによって、キャッシュコヒーレンスを効率的に維持することができる。図３の２つのプロセッサ構成４０により示されるように、２つのプロセッサ１２Ａおよび１２Ｂは、１つまたは複数のメモリバス４２を介して、共有メモリ１４のキャッシュラインをそれぞれ共有することができる。プロセッサ１２Ａおよび１２Ｂは、メモリバス４２を介して、または通信バス４４を介して、互いに通信することができる。図３の２つのプロセッサ構成４０において、プロセッサ１２Ａは、同種であっても、異種であってもよい。すなわち、プロセッサ１２Ａおよび１２Ｂのうちの１つもしくは両方が、中央処理装置（ＣＰＵ）などの比較的低帯域幅のメモリ共有デバイスであってもよいし、または、プロセッサ１２Ａおよび１２Ｂのうちの１つもしくは両方が、グラフィックスプロセッシングユニット（ＧＰＵ）などの比較的高帯域幅のメモリ共有デバイスであってもよい。以下の議論では、第１のプロセッサ１２Ａが、中央処理装置（ＣＰＵ）であり、第２のプロセッサ１２Ｂが、グラフィックスプロセッシングユニット（ＧＰＵ）であってよい。したがって、任意の所与の時間において、第１のプロセッサ１２Ａは、一般に、第２のプロセッサ１２Ｂよりも大幅に小さいメモリの領域上で動作することができる。
【００２５】
上で触れたように、第１のプロセッサ１２Ａおよび第２のプロセッサ１２Ｂの両方は、１つまたは複数のメモリバス４２を介して、共有メモリ１４へのアクセスを共有することができる。以下で論じるように、プロセッサ１２Ａおよび１２Ｂは、１つまたは複数のメモリバス４２および／または通信バス４４を介して、互いに対してさまざまな通信を発行することができる。そのような通信は、キャッシュラインスヌープ要求、キャッシュラインスヌープ応答、ブロック追跡エントリ（ＢＴＥ）要求、および／またはＢＴＥ応答を含むことができる。これらの通信の動作は、以下でより詳細に論じる。
【００２６】
中央処理装置（ＣＰＵ）である第１のプロセッサ１２Ａは、０からＮとして示される任意の好適な数のプロセッサコア４６Ａを含むことができ、そのそれぞれが、低レベルキャッシュ４８Ａに記憶されたキャッシュライン上で動作することができる。プロセッサコア４６Ａはまた、メモリ管理ユニットおよび／またはトランスレーションルックアサイドバッファ（ＴＬＢ）コンポーネント５０Ａを含むことができる。プロセッサレベルキャッシュ５２Ａは、プロセッサコア４６Ａのすべてによって共有されるように利用可能なキャッシュラインを記憶することができる。いくつかの実施形態において、第１のプロセッサ１２Ａは、低レベルキャッシュ４８Ａのみ、またはプロセッサレベルキャッシュ５２Ａのみを含むことができる。ＴＬＢコンポーネント５０Ａは、第１のプロセッサ１２Ａ上で動くオペレーティングシステム（ＯＳ）の仮想メモリ管理コンポーネントによって割り当てられた仮想メモリの仮想メモリアドレスを、キャッシュ４８Ａおよび５２Ａ、ならびに共有メモリ１４によって使用される物理アドレスに変換することができる。プロセッサコア４６Ａが、その低レベルキャッシュ４８Ａまたはプロセッサレベルキャッシュ５２Ａに存在しないメモリのキャッシュラインへのアクセスを求めるとき、第１のプロセッサ１２Ａは、他の場所から、すなわち、共有メモリ１４から、または別のプロセッサ１２Ｂからの別のキャッシュ５２Ａから、キャッシュラインをロードするように試みることができる。図３に見られるように、第２のプロセッサ１２Ｂはまた、低レベルキャッシュ４８Ｂ、メモリ管理ユニットおよび／またはトランスレーションルックアサイドバッファ（ＴＬＢ）コンポーネント５０Ｂをそれぞれ備えたプロセッサコア４６Ｂ、ならびにプロセッサレベルキャッシュ５２Ｂを含むことができる。第２のプロセッサ１２Ｂのこれらの要素は、任意の所与の時間において、メモリのより高い帯域幅上で動作するよう設計されていることを除いては、第１のプロセッサ１２Ａの要素と同様のやり方で動作することができる。
【００２７】
プロセッサ１２Ａと１２Ｂとの間でキャッシュコヒーレンスを効率的に維持するために、第１のプロセッサ１２Ａは、ブロック追跡エントリ（ＢＴＥ）テーブル５６Ａを含むスヌープ抑制ブロック５４Ａを含むことができ、第２のプロセッサ１２Ｂは、ＢＴＥテーブル５６Ｂを有するスヌープ抑制ブロック５４Ｂを含むことができる。以下でより詳細に説明するように、スヌープ抑制ブロック５４Ａおよび／または５４Ｂは、特定のキャッシュラインスヌープ要求がブロードキャストされるのを防ぐことによって、第１のプロセッサ１２Ａと第２のプロセッサ１２Ｂとの間のスヌープトラフィックを削減し、メモリバス４２または通信バス４４上のプロセッササイクルおよび通信帯域幅を解放することができる。図３の２つのプロセッサ構成４０は、一般に、ＭＥＳＩ、ＭＯＳＩ、ＭＯＥＳＩ、その他などの任意の好適なキャッシュコヒーレンスプロトコルを利用することができる。そのようなキャッシュコヒーレンスプロトコルは、プロセッサ１２Ａと１２Ｂとの間でキャッシュコヒーレンスを効率的に維持するために、スヌープ抑制ブロック５４Ａおよび５４Ｂと共に使用されてよい。
【００２８】
以下の議論は、キャッシュコヒーレンスを維持するのに必要とされるスヌープトラフィックの量を削減しながらも、２つのメモリ共有デバイス（たとえば、第１のプロセッサ１２Ａおよび第２のプロセッサ１２Ｂ）の間でキャッシュコヒーレンスを維持するために、どのようにブロック追跡エントリ（ＢＴＥ）を使用してよいかを解明することができる。説明を簡単にするために、以下の例では、第１のプロセッサ１２Ａを、スヌープ要求を送るメモリ共有デバイスとして説明し、第２のプロセッサ１２Ｂを、スヌープ応答を用いて返答するメモリ共有デバイスとして説明する。しかしながら、加えて、または代替として、第２のプロセッサ１２Ｂが、スヌープ要求を送るメモリ共有デバイスであってもよく、第１のプロセッサ１２Ａが、スヌープ応答を用いて返答するメモリ共有デバイスであってもよいことは、明らかであるべきである。
【００２９】
図４の流れ図の７０は、第１のプロセッサ１２Ａのスヌープ抑制ブロック５４Ａが、第１のプロセッサ１２Ａから第２のプロセッサ１２Ｂへの不必要なスヌープトラフィックを効率的に防ぐことができる、１つのやり方を表している。図４の流れ図の６０に示すように、プロセッサコア４６Ａが、メモリに含まれるデータ要素へのアクセスを要求するとき、プロセッサコア４６Ａは、プロセッサ１２Ａ上で動くオペレーティングシステム（ＯＳ）の仮想メモリ管理コンポーネントによって割り当てられるような論理メモリアドレスにおいて、メモリ要求を発行することができる。トランスレーションルックアサイドバッファ（ＴＬＢ）コンポーネント５０Ａおよび／またはＴＬＢコンポーネント５０Ａに関連付けられたページテーブルは、論理アドレスを物理アドレスに変換して、プロセッサコア４６Ａに関連付けられたキャッシュ４８Ａまたはプロセッサレベルキャッシュ５２Ａに、物理メモリ要求６４を発行することができる。物理メモリ要求６４によって示されたキャッシュラインの有効なコピーがキャッシュ４８Ａまたは５２Ａに存在する場合、「キャッシュヒット」と呼ばれるイベントにおいて、要求されたキャッシュラインデータを含む物理メモリ応答６６が返されて、論理メモリ応答６８として、プロセッサコア４６Ａに提供することができる。
【００３０】
物理メモリ要求６４が、有効なコピーがキャッシュ４８Ａおよび／または５２Ａに存在しないキャッシュラインを要求する場合、「キャッシュミス」と呼ばれるイベントにおいて、プロセッサ１２Ａは、共有メモリ１４から、または別のプロセッサ１２（たとえば、第２のプロセッサ１２Ｂ）から、所望のキャッシュラインを取得するように試みる。そのために、メモリおよび／またはキャッシュラインスヌープ要求７０が、プロセッサ１２Ａ（いくつかの実施形態ではキャッシュ５２Ａであってよい）の任意の好適なコンポーネントによって提供される。スヌープ抑制ブロック５４Ａは、特定の不必要なスヌープトラフィックを排除することができ、そうしない場合には、不必要なスヌープトラフィックが、スヌープトラフィックを処理するための第２のプロセッサ１２Ｂの能力を圧倒することがある。とりわけ、スヌープ抑制ブロック５４Ａは、キャッシュラインステータスがスヌープ不要のラインであること、すなわち、最初になんらかの指示を第１のプロセッサ１２Ａに発行することなく、キャッシュラインが第２のプロセッサ１２Ｂによってアクセスされる、または使用されることがないことを意味することを、ブロック追跡エントリ（ＢＴＥ）テーブル５６Ａが示しているかどうかを判定することができる。スヌープ抑制ブロック５４ＡのＢＴＥテーブル５６Ａが、要求されたキャッシュラインがスヌープ不要のラインのキャッシュラインであることを示す場合、スヌープ抑制ブロック５４Ａは、メモリ要求７２を発行して、任意の他のメモリ共有デバイスにスヌープ要求を発行することなく、共有メモリ１４から要求されたキャッシュラインを取得することができる。共有メモリ１４は、キャッシュラインデータを含むメモリ応答７４を用いて返答することができる。スヌープ抑制ブロック５４Ａは、メモリ応答７４からのキャッシュラインデータをメモリ応答７６に渡すことができ、メモリ応答７６は、最終的に論理メモリ応答６８としてプロセッサコア４６Ａに返される、および／または、キャッシュ４８Ａおよび／または５２Ａに記憶されてよい。
【００３１】
要求されたキャッシュラインがＢＴＥテーブル５６Ａにスヌープ要のラインとしてリストにされるとき、すなわち、ＢＴＥテーブル５６Ａが要求されたキャッシュラインに対応した有効なＢＴＥを欠くとき、スヌープ抑制ブロック５４は、所望のキャッシュラインのためのいかなるスヌープ要求も抑制することができない。実際、スヌープ抑制ブロック５４Ａは、他のメモリ共有デバイスに（たとえば、第２のプロセッサ１２Ｂのスヌープ抑制ブロック５４Ｂに）スヌープ要求を発行することができる。たとえば、スヌープ抑制ブロック５４Ａは、キャッシュラインスヌープ要求８０を発行して、その返信としてキャッシュラインスヌープ応答８２を受信することができる。スヌープ抑制ブロック５４Ａはまた、加えて、または代替として、ブロック追跡エントリ（ＢＴＥ）スヌープ要求８４を発行して、その返信としてＢＴＥスヌープ応答８６を受信することができる。キャッシュラインスヌープ応答８２および／またはＢＴＥスヌープ応答８６は、ＢＴＥテーブル５６Ａをポピュレートするために、スヌープ抑制ブロック５４Ａによって使用されてよく、プロセッサ１２Ａからプロセッサ１２Ｂへのなんらかの不必要なスヌープトラフィックを、スヌープ抑制ブロック５４Ａが効率的に排除することを可能にする。たとえば、図８〜図２１を参照して以下でより詳細に論じるように、さまざまな組合せのこれらの通信が発行され、これらの通信に返答されてよい。
【００３２】
ＢＴＥテーブル５６Ａおよび／または５６Ｂは、それらのそれぞれのプロセッサ１２Ａまたは１２Ｂ内に、物理的に位置している必要はないことを理解されたい。むしろ、プロセッサ１２Ａまたは１２Ｂが、キャッシュコヒーレンスを危うくすることなく、いつスヌープ要求が抑制されてよいかを判定することができるように、ＢＴＥテーブル５６Ａおよび／または５６Ｂは、それらのそれぞれのプロセッサ１２Ａまたは１２Ｂに関連付けられているだけでよい。いくつかの実施形態において、ＢＴＥテーブル５６Ａおよび／または５６Ｂは、図示されるように、それぞれのスヌープ抑制ブロック５４Ａおよび５４Ｂ内のハードウェアにおいて実装される。他の実施形態においては、ＢＴＥテーブル５６Ａおよび／または５６Ｂは、プロセッサ１２のうちの１つまたは複数の上で動く、なんらかの形態のプロセッサ実行可能命令を使用して、実装されてもよい。
【００３３】
さらに続ける前に、いくつかの例を提供すると、スヌープ抑制ブロック５４Ａが、キャッシュ４８Ｂおよび／または５２Ｂに存在しない要求されるキャッシュラインのためのキャッシュラインスヌープ要求８０を発行するとき、他のスヌープ抑制ブロック５４Ｂは、ＢＴＥスヌープ応答８６を用いて返答することも、全く返答しないこともある。他のスヌープ抑制ブロック５４Ｂが、ＢＴＥスヌープ応答８６のみを用いてキャッシュラインスヌープ要求８０に返答するとき、それは、要求されたキャッシュラインが第２のプロセッサ１２Ｂによって使用されていないということを、スヌープ抑制ブロック５４Ａに知らせることができる。他のスヌープ抑制ブロック５４Ｂがキャッシュラインスヌープ要求８０またはＢＴＥ要求８４になんの返答もしないとき、それは、要求されたキャッシュラインを含むメモリのブロックにおけるすべてのキャッシュラインが、ＢＴＥテーブル５４Ａにおいてスヌープ要のラインとしてマークされているはずであることを、スヌープ抑制ブロック５４Ａに知らせることができる。
【００３４】
上で示したように、スヌープ抑制ブロック５４のブロック追跡エントリ（ＢＴＥ）テーブル５６は、最近スヌープされたキャッシュラインを追跡できるばかりでなく、むしろ、いつキャッシュラインスヌープ要求が抑制されてよいかを判定するために、キャッシュラインのブロックを追跡することができる。そのようなＢＴＥテーブル５６の一例が、図５に見られる。図５のＢＴＥテーブル５６は、いくつかのブロック追跡エントリ（ＢＴＥ）９０を含む。各ＢＴＥ９０は、キャッシュラインのブロックを追跡することができる。したがって、以下でさらに論じるように、ブロックタグ９２は、キャッシュラインによって使用される物理メモリアドレスの一部（たとえば、キャッシュタグのいくつかの最も重要なビット（ＭＳＢ））に一般に対応した、ＢＴＥ９０の１つのコンポーネントを表すことができる。有効性フラグ９４は、全体として、ＢＴＥ９０が有効であるか、無効であるかを示すことができる。有効性フラグ９４が、ＢＴＥ９０が有効であると示すように設定されるか、無効であると示すように設定されるかは、本明細書で開示する技法を含む任意の好適な技法に従って定義されてよい。各ＢＴＥ９０は、いくつかのキャッシュステータスエントリ９６を含むことができ、各エントリは、１つまたは複数のキャッシュラインのグループのステータスに対応している。ＢＴＥテーブル５６のＢＴＥ９０は、任意の好適な技法に従って、追加されても、取り除かれてもよく、または時間の経過でエージアウトされてもよい。
【００３５】
ＢＴＥ９０のこれらのさまざまなコンポーネントが、図６に示される。キャッシュステータスエントリ９６は、任意の好適な数のスロット９８を含むことができ、そのそれぞれがＢＴＥ９０の単一のキャッシュステータスエントリ９６を表すことができる。キャッシュステータスエントリ９６のそれぞれは、図６に示される１つまたは複数のキャッシュライン１００に対応して、キャッシュラインアドレス１０２およびキャッシュラインデータ１０４を含むことができる。キャッシュラインデータ１０４は、キャッシュラインアドレス１０２においてアクセス可能であってよい。ＢＴＥ９０のブロックタグ９２は、キャッシュラインアドレス１０２の特定のビット（たとえば、いくつかの最も重要なビット（ＭＳＢ））に対応し、それにより、ＢＴＥ９０が対応することができるキャッシュラインのブロックを識別することができる。
【００３６】
図６の例において、各キャッシュステータスエントリ９６は、ＢＴＥ９０によって追跡され、ブロックタグ９２によって識別される、キャッシュラインのブロックの２つのキャッシュライン１００に対応する。たとえば、０の論理値を有するキャッシュステータスエントリ９６は、そのキャッシュステータスエントリ９６に対応したすべてのキャッシュライン１００が、スヌープ不要のラインであること（および、結果として、これらのキャッシュラインのためのキャッシュラインスヌープ要求を抑制することができること）を示すことができる。一方で、１の論理値を記憶しているキャッシュステータスエントリ９６などの、逆の論理値を有するキャッシュステータスエントリ９６は、それが対応するキャッシュライン１００のうちの少なくとも１つが、別のメモリ共有デバイスによって潜在的に使用されている、そうでなければ、アクセスされている、または変更されている可能性がある（したがって、これらのキャッシュライン１００がアクセスされる前に、なんらかの形のスヌープ通信を要する）ことを示すことができる。
【００３７】
図６の例に示すように、キャッシュステータスエントリ９６のそれぞれは、２つのキャッシュライン１００に対応する。代替実施形態においては、各キャッシュステータスエントリ９６は、任意の好適な数のキャッシュライン１００（たとえば、１、２、３、４、５、６、またはそれ以上のキャッシュライン１００）を追跡できることを認識されたい。各キャッシュステータスエントリ９６が２つのキャッシュライン１００に対応し、各ＢＴＥ９０がたとえば１２８個のキャッシュステータスエントリ９６を含むとき、各ＢＴＥ９０は、２５６個のキャッシュライン１００（すなわち、ＢＴＥ９０につき４ＫＢメモリ）を追跡することになる。図２４〜図２９を参照して以下でさらに論じるように、いくつかの実施形態において、キャッシュステータスエントリ９６の粒状度(granularity)は、ＢＴＥ９０ごとに変化してよい。たとえば、比較的数の少ないキャッシュライン１００が、プロセッサ１２間において比較的多量の競合下にあるとき、それぞれがそのようなキャッシュライン１００を追跡するＢＴＥ９０のキャッシュステータスエントリ９６は、比較的細粒化されてよい。同様に、比較的数の多いキャッシュライン１００が、プロセッサ１２間において比較的少量の競合下にあるとき、それぞれがそのようなキャッシュライン１００を追跡するＢＴＥ９０のキャッシュステータスエントリ９６は、比較的粗粒化されてよい。以下の例は、競合に基づいてＢＴＥ９０の粒度が変化することを論じるが、競合は、そうするための１つの例示的な根拠を表すにすぎない。ＢＴＥ９０の粒度を変化させるための多くの他の根拠が可能である。たとえば、ＢＴＥ９０によって追跡されるメモリのブロックが、異なるプロセッサ１２によってアクセスされる見込みがない（たとえば、メモリのブロックが、さまざまなプロセッサ１２の中で分割されているレジスタセットにある）とき、ＢＴＥ９０は、そうでない場合よりも比較的粗粒化されてよい。
【００３８】
ＢＴＥ９０の、ブロックタグ９２、有効性フラグ９４、およびキャッシュステータスエントリ９６のビットの数は、電子デバイス１０の利用可能なハードウェアリソースを利用するために選択されてよい。たとえば、図７に示すように、ブロック追跡エントリ（ＢＴＥ）９０およびキャッシュライン１００の両方が、メモリバス４２および／または通信バス４４の同じデータパス１１０にわたって送信されてよい。このようにして、データパス１１０を効率的に利用するために、各ＢＴＥ９０のサイズは、キャッシュライン１００のサイズに対応することができる。たとえば、キャッシュライン１００が１２８ビットのデータを含むとき、ＢＴＥ９０は、１２８個のキャッシュステータスエントリ９６を含むことができる。加えて、キャッシュライン１００またはＢＴＥ９０が、メモリバス４２および／または通信バス４４にわたって送信されるとき、インジケータ１１２が通信の目的の表示（たとえば、通信がキャッシュライン１００ではなく、ＢＴＥ９０であること）を提供することができる。いくつかの実施形態において、キャッシュライン１００のキャッシュタグ１０２のサイズは、ＢＴＥ９０のブロックタグ９２のサイズと同様であってよい。同様に、いくつかの実施形態において、キャッシュライン１００のキャッシュラインデータ１０４は、ＢＴＥ９０のＢＴＥエントリ９６の合計と同じサイズであってよい。
【００３９】
特定の実装形態に応じて、スヌープ抑制ブロック５４は、キャッシュラインスヌープ要求８０またはＢＴＥ要求８４、あるいはその両方を、所望のキャッシュライン１００のキャッシュミス時に発行することができる。たとえば、図８に示すように、第１のスヌープ抑制ブロック５４Ａが、メモリバス４２および／または通信バス４４にわたってＢＴＥ要求８４を発行して、別のスヌープ抑制ブロック５４Ｂに、メモリの特定のブロックに関連付けられたＢＴＥ９０を提供するように要求することができる。例として、そのようなＢＴＥ要求８４は、要求されたＢＴＥ９０の、ブロックタグ９２およびキャッシュステータスエントリ９６の要求された粒度の表示を提供することができる。以下で論じるように、スヌープ抑制ブロック５４Ｂは、ＢＴＥ９０を含むＢＴＥ応答８６を用いて返答することができ、ＢＴＥ９０は、キャッシュ４０Ｂおよび／または５２Ｂに基づいて、メモリの要求されたブロック内のキャッシュライン１００のグループのためのキャッシュラインステータス（たとえば、スヌープ要のラインまたはスヌープ不要のライン）を控えめに提供する。以下でまたさらに論じるように、スヌープ抑制ブロック５４Ｂは、そのＢＴＥテーブル５６Ｂを使用して、または第２のプロセッサ１２Ｂに関連付けられたキャッシュ４８Ｂおよび／または５２Ｂのなんらかの調査を実行することによって、ＢＴＥ応答８６を判定することができる。スヌープ抑制ブロック５４Ａは次いで、ＢＴＥ応答８６において受信したＢＴＥ９０を使用して、そのＢＴＥテーブル５６Ａをポピュレートすることができる。
【００４０】
他の実装形態または他の状況下においては、図９に示すように、第１のプロセッサ１２Ａに関連付けられた第１のスヌープ抑制ブロック５４Ａが、メモリバス４２および／または通信バス４４上で、キャッシュラインスヌープ要求＋インジケータ１２０を、第２のプロセッサ１２Ｂに関連付けられた第２のスヌープ抑制ブロック５４Ｂに伝達することができる。キャッシュラインスヌープ要求＋インジケータ１２０のそのようなインジケータ１１２コンポーネントは、第２のスヌープ抑制ブロック５４Ｂに、通常のキャッシュラインスヌープ応答（たとえば、キャッシュライン１００）か、ＢＴＥ応答８６（たとえば、ＢＴＥ９０を含んでいてよい）かのいずれかを返すように指示することができる。したがって、スヌープ抑制ブロック５４Ｂは、キャッシュラインスヌープ要求＋インジケータ１２０を受信して、適切な応答を用意することができる。図９の例において、スヌープ抑制ブロック５４Ｂは、キャッシュラインおよび／またはＢＴＥ応答＋インジケータ１２２を用いて、キャッシュラインスヌープ要求＋インジケータ１２０に応答することができる。キャッシュラインおよび／またはＢＴＥ応答＋インジケータ１２２のそのようなインジケータ１１２コンポーネントは、第１のスヌープ抑制ブロック５４Ａが、スヌープ抑制ブロック５４Ｂがキャッシュライン１００またはＢＴＥ９０を返したかどうかを見分けるのを可能にすることができる。
【００４１】
加えて、または代替として、第１のスヌープ抑制ブロック５４Ａは、キャッシュラインスヌープ要求＋インジケータ１２０の代わりに、キャッシュラインスヌープ要求８０を送信することができる。例として、キャッシュライン１００がプロセッサ１２Ｂのキャッシュ４８Ｂおよび／または５２Ｂに存在するとき、またはプロセッサ１２Ｂがキャッシュライン１００の単独使用を有するとき、スヌープ抑制ブロック５４Ｂは、キャッシュライン１００を用いて応答することができる。キャッシュライン１００がプロセッサ１２Ｂによって使用されていないとき、スヌープ抑制ブロック５４Ｂは代わりに、ＢＴＥ９０を含むＢＴＥ応答８６を返すことができる。そのようなＢＴＥ９０は、キャッシュラインスヌープ要求８０が関係しているメモリのなんらかのブロックにおけるキャッシュライン１００のステータスを提供することができる。
【００４２】
プロセッサ１２のうちの１つ（たとえば、１２Ａ）が、キャッシュライン１００上で動作しようとするとき、そのプロセッサ１２（たとえば、１２Ａ）は、ブロック追跡エントリ（ＢＴＥ）テーブル５６（たとえば、５６Ａ）に応じて、任意のスヌープ要求を発行することも、しないこともある。図１０〜図１３は、メモリバス４２および／または通信バス４４にわたって特定の不必要なスヌープトラフィックを防ぐやり方において、プロセッサ１２を動作させるための方法の例を全体として提供する。以下の議論は、第１のプロセッサ１２Ａを、第２のプロセッサ１２Ｂとの通信を開始するものとして指すが、メモリ共有デバイスに関連付けられたＢＴＥテーブル５６を有する任意のメモリ共有デバイスが、以下で説明する技法を利用できることを認識されたい。
【００４３】
図１０を見てみると、フローチャート１３０が、１つのプロセッサ１２（たとえば１２Ａ）が、ブロック追跡エントリ（ＢＴＥ）テーブル５６（たとえば、５６Ａ）の使用を通して、どのように別のプロセッサ（たとえば、１２Ｂ）とのキャッシュコヒーレンスを効率的に維持するよう試みることができるかを説明している。図１０のフローチャート１３０は、プロセッサコア４６Ａが、所望のキャッシュライン１００へのアクセスを求めるところから開始される（ブロック１３２）。所望のキャッシュライン１００がキャッシュ４８Ａおよび／または５２Ａに存在する場合、「キャッシュヒット」と呼ばれるイベントにおいて、キャッシュライン１００は、任意の好適なキャッシュコヒーレンスプロトコル（たとえば、ＭＥＳＩ、ＭＯＳＩ、ＭＯＥＳＩ、その他）に従ってアクセスされる（ブロック１３６）。所望のキャッシュライン１００がキャッシュ４８Ａおよび／または５２Ａに存在しない場合（決定ブロック１３４）、「キャッシュミス」と呼ばれるイベントにおいて、所望のキャッシュライン１００は、共有メモリ１４から、または別のプロセッサ１２（たとえば、１２Ｂ）から取得される必要がある。
【００４４】
プロセッサ１２Ａが続けて所望のキャッシュライン１００を取得するやり方は、ＢＴＥテーブル５６Ａに示される通りの所望のキャッシュライン１００のステータスに依存してよい。詳細には、プロセッサ１２Ａのスヌープ抑制ブロック５４Ａは、所望のキャッシュライン１００（または、所望のキャッシュライン１００を含むキャッシュライン１００のグループ）のステータスが、有効なＢＴＥ９０のキャッシュステータスエントリ９６にリストにされているかどうかを確認することができる（決定ブロック１３８）。キャッシュステータスエントリ９６が、所望のキャッシュライン１００（または、所望のキャッシュライン１００を含むキャッシュライン１００のグループ）がスヌープ不要のラインとしてリストにされていることを示す場合（決定ブロック１４０）、プロセッサ１２Ａは、いかなるスヌープ要求トランザクションも発行することなく、共有メモリ１４から所望のキャッシュラインにアクセスすることができる（ブロック１４２）。このようにして、スヌープ抑制ブロック５４Ａは、従来のキャッシュコヒーレンスプロトコル（たとえば、ＭＥＳＩ、ＭＯＳＩ、ＭＯＥＳＩ、その他）の元で、別の状況であれば他のプロセッサ１２（たとえば、第２のプロセッサ１２Ｂ）にブロードキャストされていることになるキャッシュラインスヌープ要求８０を、効果的に抑制することができる。
【００４５】
一方で、有効なＢＴＥ９０のキャッシュステータスエントリ９６が、所望のキャッシュライン１００（または、所望のキャッシュライン１００を含むキャッシュライン１００のグループ）のステータスをスヌープ要のラインとして示す場合、あるいは加えて、または代替として、所望のキャッシュライン１００（または、所望のキャッシュライン１００を含むキャッシュライン１００のグループ）をスヌープ不要のラインとして示すキャッシュステータスエントリ９６を含む有効なＢＴＥ９０がない場合（決定ブロック１４０）、スヌープ抑制ブロック５４Ａは、スヌープトランザクションの発行を抑制することができない。むしろ、そのような条件下では、プロセッサ１２Ａのスヌープ抑制ブロック５４Ａまたは他のスヌープ回路は、ＢＴＥスヌープ要求８４および／またはキャッシュラインスヌープ要求８０を発行することができる（ブロック１４４）。プロセッサ１２Ａが、ＢＴＥスヌープ要求８４を発行するか、キャッシュラインスヌープ要求８０を発行するか、またはその両方を発行するかは、特定の実装形態または状況に依存してよい。ブロック１４４に示されるようなスヌープトランザクションを実行するためのさまざまな方法を、図１１〜図１３を参照してより詳細に説明する。
【００４６】
いくつかの実施形態において、所望のキャッシュライン１００のキャッシュミス時に、所望のキャッシュライン１００が、ＢＴＥテーブル５６Ａの有効なＢＴＥ９０のキャッシュステータスエントリ９６にスヌープ不要のラインとしてリストにされていないとき、スヌープ抑制ブロック５４Ａは、所望のキャッシュライン１００を含むメモリのブロックを追跡するＢＴＥ要求８４を発行することができる（ブロック１５２）。上で触れたように、スヌープ抑制ブロック５４Ａは、ＢＴＥ要求８４を発行して、所望のキャッシュライン１００を含むメモリのブロック（たとえば、メモリ領域）のキャッシュライン１００のスヌープ要のラインのステータス、またはスヌープ不要のラインのステータスの控えめな表示を確認することができる。このＢＴＥ要求８４を受信すると、スヌープ抑制ブロック５４Ｂなどの他のスヌープ抑制ブロック５４は、スヌープ抑制ブロック５４Ａに返すために、そのようなＢＴＥ９０を用意することができる。他のプロセッサ１２Ｂのスヌープ抑制ブロック５４Ｂなどの、他のプロセッサ１２に属する他のスヌープ抑制ブロック５４によって返されるＢＴＥ応答８６は、ＢＴＥ９０によって追跡されるメモリのブロックのキャッシュライン１００が、そのプロセッサ１２によって場合により使用されているかどうかを、控えめに示すことができるのを認識されたい。言い換えれば、第１のスヌープ抑制ブロック５４Ａによって受信されたＢＴＥ応答８６に含まれるＢＴＥ９０は、キャッシュライン１００がスヌープ要のラインであるときには常に正確に示すことができるが、キャッシュライン１００がスヌープ不要のラインであるときには、必ずしも常に正確に示すというわけではない。このようにして、ＢＴＥ応答８６において受信されたＢＴＥ９０は、抑制されたスヌープ要求のみをもたらすことができ、そうするときに、いくつかの追加の不必要なスヌープ要求が生じ得たとしても、キャッシュコヒーレンスを乱すことがない。第２のスヌープ抑制ブロック５４ＢがＢＴＥ９０を用意し、ＢＴＥ応答８６を用いて返答することができるさまざまなやり方を、以下でより詳細に説明する。
【００４７】
１つまたは複数のＢＴＥ応答８６において１つまたは複数のＢＴＥ９０を受信すると、スヌープ抑制ブロック５４Ａは、これらのＢＴＥ９０を使用して、その関連付けられたＢＴＥテーブル５６Ａをポピュレートすることができる（ブロック１５６）。その後、第１のプロセッサ１２Ａは、新たにポピュレートされたＢＴＥテーブル５６Ａに基づいて、図１１を参照して上で説明したやり方で、所望のキャッシュライン１００にアクセスすることを続けることができる（ブロック１５８）。すなわち、新たに受信したＢＴＥ９０が、所望のキャッシュラインがスヌープ不要のラインであることを示す場合、スヌープ抑制ブロック５４Ａは、スヌープ要求を発行せずに、共有メモリ１４において所望のキャッシュラインにアクセスすることができる。新たに受信したＢＴＥ９０において、所望のキャッシュラインがスヌープ要のラインとして示される場合、スヌープ抑制ブロック５４Ａは、キャッシュラインスヌープ要求８０を発行して、キャッシュコヒーレンスが維持されるのを保証することができる。
【００４８】
いくつかの実施形態において、図１２のフローチャート１７０により表されるように、有効なＢＴＥ９０が所望のキャッシュラインをスヌープ不要のラインとして示さないキャッシュミスの発生の後で、第１のプロセッサ１２Ａは、キャッシュラインスヌープ要求８０を発行することができる（ブロック１７２）。キャッシュラインスヌープ要求８０が結果として「スヌープヒット」となる、すなわち所望のキャッシュラインが、別のプロセッサ１２の別のキャッシュ４８または５２（たとえば、プロセッサ１２Ｂのキャッシュ４８Ｂおよび／または５２Ｂ）によって使用されている、あるいは別のプロセッサ１２の別のキャッシュ４８または５２において見つかることを意味する場合（決定ブロック１７４）、第１のプロセッサ１２Ａは、第２のプロセッサ１２Ｂから、少なくともキャッシュラインデータ１０４を受信することができる（ブロック１７６）。
【００４９】
さらに、電子デバイス１０において使用されているキャッシュコヒーレンスプロトコル（たとえば、ＭＥＳＩ、ＭＯＳＩ、ＭＯＥＳＩ、その他）に従って、キャッシュラインスヌープ要求８０を発行することが、結果として、第１のプロセッサ１２Ａへの所望のキャッシュライン１００（および／または所望のキャッシュライン１００を含むキャッシュステータスエントリ９６により追跡されるキャッシュライン１００のグループ）の単独使用（たとえば、所有権および／または独占権）となる場合、第１のプロセッサ１２Ａは、所望のキャッシュラインを含むキャッシュステータスエントリ９６を、スヌープ不要のラインとしてマークすることができる（ブロック１７８）。加えて、または代替的に、キャッシュラインスヌープ要求８０を発行することが、結果として、第２のプロセッサ１２Ｂがなんらかの類のスヌープ応答を発行することなしには、所望のキャッシュライン１００（および／または所望のキャッシュライン１００を含むキャッシュステータスエントリ９６により追跡されるキャッシュライン１００のグループのキャッシュライン）を第２のプロセッサ１２Ｂに対してアクセス不能にさせることになる、任意の他のステータスを成す所望のキャッシュライン１００（および／または所望のキャッシュライン１００を含むキャッシュステータスエントリ９６により追跡されるキャッシュライン１００のグループ）となった場合、第１のプロセッサ１２Ａは、キャッシュステータスエントリ９６を、スヌープ不要のラインとしてマークすることができる。そのようなＢＴＥ９０がスヌープ抑制ブロック５４ＡのＢＴＡテーブル５６Ａに存在しない場合には、そのＢＴＥ９０のすべてのキャッシュステータスエントリ９６がスヌープ要のラインとしてマークされてよい、そのようなＢＴＥ９０を作成し、ＢＴＥテーブル５６Ａに追加することができるが、第１のプロセッサ１２Ａが現在単独使用を有する所望のキャッシュライン１００に対応したキャッシュステータスエントリ９６は、場合により例外である。キャッシュラインスヌープ要求８０を発行することが、結果として、所望のキャッシュライン１００が属するメモリの特定のブロック上での単独使用となる場合、ＢＴＥ９０のすべてのキャッシュステータスエントリ９６は、スヌープ不要のラインとしてマークされてよい。第１のプロセッサ１２Ａが所望のキャッシュライン１００の単独使用を受信するかどうかに関わらず、所望のキャッシュライン１００のキャッシュラインデータ１０４を受信した（ブロック１７６）後に、第１のプロセッサ１２Ａは次いで、キャッシュライン１００にアクセスすることができる（ブロック１８０）。
【００５０】
第１のプロセッサ１２Ａによる、ブロック１７２のキャッシュラインスヌープ要求８０の発行が、結果として、他のプロセッサ１２（たとえば、第２のプロセッサ１２Ｂ）においてスヌープヒットとならないとき（決定ブロック１７４）、他のプロセッサ１２は判定し、ＢＴＥ９０を含むＢＴＥ応答８６を返すことができ、ＢＴＥ応答８６は、プロセッサ１２Ａによって受信されてよい（ブロック１８２）。第１のプロセッサ１２Ａは、ＢＴＥ応答８６に含まれるＢＴＥ９０を使用して、そのＢＴＥテーブル５６Ａをポピュレートすることができる（ブロック１８４）。たとえば、第１のプロセッサ１２Ａが２つのＢＴＥ９０を含む２つのＢＴＥ応答８６を受信した場合、キャッシュライン１００をスヌープ要のラインとして示すすべてのキャッシュステータスエントリ９６がＢＴＥテーブル５６Ａに含まれるように、第１のプロセッサ１２Ａは、両方のＢＴＥ応答８６を使用して、そのＢＴＥテーブル５６Ａをポピュレートすることができる。ブロック１７２におけるキャッシュラインスヌープ要求８０の発行が、結果として、任意の他のプロセッサ１２においてスヌープヒットにならなかった（決定ブロック１７４）ので、第１のプロセッサ１２Ａは次に、キャッシュライン１００を、共有メモリ１４から、そのキャッシュ４８Ａおよび／または５２Ａにコピーすることができる（ブロック１８６）。所望のキャッシュライン１００は次いで、キャッシュ４８Ａおよび／または５２Ａからアクセスされてよい（ブロック１８０）。
【００５１】
加えて、または代替として、図１３のフローチャート２００により示されるように、第１のプロセッサ１２Ａがキャッシュラインスヌープ要求８０を発行するとき（ブロック２０２）、第１のプロセッサ１２Ａは、返答として、キャッシュラインスヌープ応答８２およびＢＴＥ応答８６の両方を受信することができる（ブロック２０４）。いくつかの実施形態において、第１のプロセッサ１２Ａは、別のプロセッサ１２（たとえば、第２のプロセッサ１２Ｂ）においてスヌープヒットが生じても、生じなくても、キャッシュラインスヌープ応答８２およびＢＴＥ応答８６の両方を受信することができる。上の図１２にあるように、第１のプロセッサ１２Ａは次いで、キャッシュラインスヌープ応答８２および／またはＢＴＥ応答８６を使用して、そのＢＴＥテーブル５６Ａをポピュレートし、所望のキャッシュライン１００へのアクセスを得ることができる。
【００５２】
さまざまな実施形態に従ってキャッシュコヒーレンスを維持するためのいくつかの種々雑多な規則が図１４〜図１６に説明される。たとえば、図１４のフローチャート２３０は、第１のスヌープ抑制ブロック５４Ａが、第１のプロセッサ１２Ａによる所望のキャッシュライン１００に関連付けられたスヌープ要求に応答するために、別のプロセッサ１２（たとえば、第２のプロセッサ１２Ｂ）による失敗を扱うことができる、１つのやり方を説明している。フローチャート２３０は、第１のプロセッサ１２Ａが、所望のキャッシュライン１００に関連付けられたなんらかの形のスヌープ要求（たとえば、キャッシュラインスヌープ要求８０および／またはＢＴＥ要求８４）を発行するところから開始される（ブロック２３２）。なんらかの閾値時間内に、応答としてのＢＴＥ応答８６が返されない場合（ブロック２３４）、第２のプロセッサ１２Ｂが、所望のキャッシュライン１００が属し得るメモリのブロックに含まれるキャッシュライン１００のいずれかを使用している可能性が想定されてよい。したがって、第１のプロセッサ１２Ａは、メモリのそのブロックにおけるすべてのキャッシュライン１００を、対応するＢＴＥ９０においてスヌープ要のラインとして扱うことができる（ブロック２３６）。
【００５３】
例として、第１のプロセッサ１２Ａが、結果として第２のプロセッサ１２Ｂにおいてスヌープヒットとなるキャッシュラインスヌープ要求８０を発行する場合には、第２のプロセッサ１２Ｂは、所望のキャッシュライン１００のみを返す（および任意の好適なキャッシュコヒーレンスプロトコル（たとえば、ＭＥＳＩ、ＭＯＳＩ、ＭＯＥＳＩ、その他）に従って、それ自身のキャッシュ４８Ｂおよび／または５２Ｂから、そのキャッシュライン１００を追い出す、または無効にする）ことができる。第２のプロセッサ１２ＢがＢＴＥ応答８６を返していない可能性があるとしても、第１のプロセッサ１２Ａは、関連したＢＴＥ９０を作成する、および／または更新することができる。ＢＴＥ９０のキャッシュステータスエントリ９６のすべては、スヌープ要のラインとして設定され、スヌープ抑制ブロック５４Ａが、第２のプロセッサ１２Ｂによって使用されている可能性があるキャッシュライン１００のためのスヌープ要求をうっかり抑制しないことを保証することができる。
【００５４】
特定のキャッシュコヒーレンスプロトコルに従って、第１のプロセッサ１２Ａにより発行される可能性のあるいくつかのスヌープトランザクションは、結果として所望のキャッシュライン１００の単独使用（たとえば、独占権および／または所有権）となることがある。たとえば、図１５に示すように、そのようなスヌープトランザクションが発生するとき（ブロック２５２）、第１のプロセッサ１２Ａは、第１のプロセッサ１２Ａによって現在単独使用されているあらゆるキャッシュステータスエントリ９６を、スヌープ不要のラインとしてマークすることができる（ブロック２５４）。たとえば、ブロック２５２のスヌープトランザクションが、結果として所望のキャッシュライン１００の単独使用となった場合、所望のキャッシュラインに対応したキャッシュステータスエントリ９６が、スヌープ不要のラインとしてマークされてよい。ブロック２５２のスヌープトランザクションが、結果としてメモリのブロックの単独使用となった場合、メモリのブロックに対応したＢＴＥ９０のすべてのキャッシュステータスエントリ９６が、スヌープ不要のラインとしてマークされてよい。さらに、図１６のフローチャート２７０により示されるように、第１のプロセッサ１２Ａは、時に、別のメモリ共有デバイス（たとえば、第２のプロセッサ１２Ｂ）が１つまたは複数のキャッシュライン１００を場合によりキャッシュする結果となるスヌープトランザクションに影響を受けることがある（ブロック２７２）。そのようなスヌープトランザクションが発生するとき、第１のプロセッサ１２Ａは、ＢＴＥ９０の対応するキャッシュステータスエントリ９６をスヌープ要のラインとしてマークすることができる（ブロック２７４）。
【００５５】
上で触れたように、プロセッサ１２Ａは、キャッシュミスの後に発生するスヌープ要求に基づいて、その関連したＢＴＥテーブル５６Ａをポピュレートすることができる。いくつかの実施形態において、第１のプロセッサ１２Ａは、加えて、または代替として、先を見越してＢＴＥ要求８４を発行することによって、そのＢＴＥテーブル５６Ａをポピュレートすることができる。たとえば、図１７のフローチャート２８０により示されるように、プロセッサ１２Ａは、ＢＴＥテーブル５６Ａが、有効なＢＴＥ９０を有していないことがある（または、ＢＴＥテーブル５６Ａが、なんらかの時間内に更新されていない有効なＢＴＥ９０を有していることがある）特定のキャッシュライン１００に、今後アクセスすることを予期することができる（ブロック２８２）。例として、プロセッサ１２Ａ上で動くタスクが、今後そのようなキャッシュライン１００上で動作するのを予期することを示すときに、第１のプロセッサ１２Ａは、そのようなキャッシュライン１００にアクセスすることを予期することができる。都合のよい時間（たとえば、予備サイクルの間）に、第１のプロセッサ１２Ａは、アクセスされることが予期されるキャッシュライン１００を含むメモリの領域のためのＢＴＥスヌープ要求８４を発行することができる（ブロック２８４）。第１のプロセッサ１２Ａは、ブロック２８４のＢＴＥ要求８４に応答して、１つまたは複数のＢＴＥ応答８６を受信することができ（ブロック２８６）、ＢＴＥ応答８６は、そのＢＴＥテーブル５６Ａをポピュレートするために使用されてよい（ブロック２８８）。その後、キャッシュライン１００が最終的にアクセスされたときに、スヌープ抑制ブロック５４Ａは、新たにポピュレートされたＢＴＥテーブル５６Ａを使用して、上で論じたやり方で不必要なスヌープ要求を回避することができる。
【００５６】
図１０〜図１７に関連付けられた上の議論は、全体として、発行するプロセッサ（たとえば、第１のプロセッサ１２Ａ）が、そのＢＴＥテーブル５６Ａを利用して、キャッシュコヒーレンスを効率的に維持することができるやり方に関した。以下、受信するメモリ共有デバイス（たとえば、第２のプロセッサ１２Ｂ）が応答することができるやり方に関する議論を続ける。とりわけ、図１８〜図２１は、全体として、メモリ共有デバイスが、キャッシュラインスヌープ要求８０および／またはＢＴＥ要求８４に応答することができるさまざまなやり方に関する。図１８〜図２１の議論においては、上の例に合わせて、受信するメモリ共有デバイスは第２のプロセッサ１２Ｂによって表されるが、実際には、第１のプロセッサ１２Ａまたは第２のプロセッサ１２Ｂ（または本実施形態に従った任意の他のメモリ共有デバイス）のいずれかが、そのような役割を果たしてよいことを認識されたい。さらに続ける前に、図１８〜図２１の例は、必ずしも互いに排他的ではないこともまた留意されたい。
【００５７】
以上を念頭に置いて、図１８は、キャッシュラインスヌープ要求８０および／またはＢＴＥ要求８４に応答する第１の方法を提供するフローチャート２９０を示す。フローチャート２９０は、図１０〜図１７を参照して上で説明された方法の実施形態の結果として一般的に見出され得るように、第２のプロセッサ１２Ｂが、第１のプロセッサ１２Ａから、キャッシュラインスヌープ要求８０および／またはＢＴＥ要求８４を受信するところから開始される（ブロック２９２）。ブロック２９２のスヌープ要求において要求されたキャッシュライン１００が、第２のプロセッサ１２Ｂのキャッシュ４８Ｂおよび／または５２Ｂに位置している、すなわち「スヌープヒット」が発生していることを意味する場合（決定ブロック２９４）、第２のプロセッサ１２Ｂは、キャッシュラインスヌープ応答８２において、キャッシュライン１００のキャッシュラインデータ１０４を提供することによって、ブロック２９２のスヌープ要求に返答することができる（ブロック２９６）。加えて、または代替として、第２のプロセッサ１２Ｂは、上の図１３のフローチャート２００を参照して上で説明したように、キャッシュライン１００が関係するメモリのブロックに関連付けられたＢＴＥ９０を含むＢＴＥ応答８６を返すことができる。
【００５８】
ブロック２９６の後で、またはブロック２９２のスヌープ要求が結果としてスヌープヒットとならない場合（決定ブロック２９４）、第２のプロセッサ１２Ｂは、ブロック２９２のスヌープ要求を、そのＢＴＥテーブル５６Ｂにおける有効なＢＴＥ９０と比較することができる（ブロック２９８）。有効なＢＴＥ９０と、ブロック２９２で受信されたキャッシュラインスヌープ要求８０および／またはＢＴＥ要求８４との間にオーバーラップがある（決定ブロック３００）、かつオーバーラップするキャッシュステータスエントリ９０のいずれかの部分が現在キャッシュされていない（決定ブロック３０２）限りでは、そのようなキャッシュステータスエントリ９６は、スヌープ要のラインとしてマークされてよい（ブロック３０４）。すなわち、ブロック２９２で受信されたスヌープ要求とオーバーラップするキャッシュされていないキャッシュラインは、第１のプロセッサ１２Ａによって潜在的に現在使用されている（またはすぐに使用されることになる）ものとして、理解することができる。したがって、ブロック３０４により示されるように、これらのキャッシュステータスエントリ９６をスヌープ要のラインとしてマークすることは、第２のプロセッサ１２Ｂが、そのようなメモリにアクセスする前に、第１のプロセッサ１２Ａに、なんらかの類のスヌープ要求を伝達することを保証することができる。
【００５９】
いくつかの実施形態において、第２のプロセッサ１２Ｂは、ブロック３０４の後に、キャッシュラインスヌープ応答８２および／またはＢＴＥ応答８６を発行することができる。たとえば、図２１の実施形態において、ブロック３０４の後で、あるいは、キャッシュ４８Ｂおよび／または５２Ｂのいかなるキャッシュライン１００もブロック２９２のスヌープ要求とオーバーラップしない場合（決定ブロック３００）、および／またはそのようなオーバーラップするキャッシュライン１００のいかなる部分も現在キャッシュされていない場合（決定ブロック３０２）、第２のプロセッサ１２Ｂは、ＢＴＥ９０を含むＢＴＥ応答８６を用意し、発行することができる（ブロック３０６）。このＢＴＥ応答８６は、ＢＴＥ９０を含むことができ、ＢＴＥ９０は、キャッシュライン１００をスヌープ要のラインとして示すキャッシュステータスエントリ９６を含み、少なくともここで、そのようなキャッシュライン１００は、そのキャッシュ４８Ｂおよび／または５２Ｂに記憶されている。
【００６０】
すなわち、第２のプロセッサ１２Ｂは、ＢＴＥ９０を含むＢＴＥ応答８６を発行することができ、ＢＴＥ９０は、第２のプロセッサ１２Ｂのキャッシュ４８Ｂおよび／または５２Ｂにおいて実際にキャッシュされ得るよりも多い、スヌープ要のラインとしてフラグされたキャッシュステータスエントリ９６を、控えめに返す。そうすることにより、現在説明しているキャッシュブロックコヒーレンスプロトコルの不可欠な特性に反することがない。例として、プロセッサ１２Ｂが、６４バイトのキャッシュラインの集まりの４ＭＢを備えたキャッシュ４８Ｂおよび／または５２Ｂを含む場合、そのようなキャッシュ４８Ｂおよび／または５２Ｂは、合計で６５５３６のキャッシュライン１００を含むことができる。ＢＴＥ９０の対象であるキャッシュライン１００がキャッシュされているかどうかを判定するために、キャッシュ４８Ｂおよび／または５２Ｂ中を余す所なく探すことは困難であることがある。代わりに、プロセッサ１２Ｂは、いくつかの控えめな、キャッシュラインステータスのより低い粒度の表示、または控えめな確率的なデータを使用して、ＢＴＥ応答８６を用意することができる。たとえば、プロセッサ１２Ｂは、計数ブルームフィルタ、もしくは任意の他の好適なフィルタ、または第２のプロセッサ１２Ｂのキャッシュ４８Ｂおよび／または５２Ｂにおけるキャッシュラインの同様のプロパティを含むフィルタ階層を維持することができる。そのような実装形態は、誤検出（すなわち、キャッシュライン１００が実際にはキャッシュ４８Ｂおよび／または５２Ｂに存在していないことがあるときに、キャッシュステータスエントリ９６がこれらのキャッシュライン１００をスヌープ要のラインとして示す）を返す可能性はあるものの、いかなる検出漏れ（すなわち、キャッシュステータスエントリ９６が、実際にキャッシュ４８Ｂおよび／または５２Ｂに存在するキャッシュライン１００をスヌープ不要のラインとして示す）も返してはならない。
【００６１】
図１９のフローチャート３２０は、第１のプロセッサ１２Ａからのスヌープ要求（たとえば、キャッシュラインスヌープ要求８０および／またはＢＴＥ要求８４）の受信に応答して、ＢＴＥテーブル５６Ｂを更新する別のやり方を表す。図１９のフローチャート３２０は、第２のプロセッサ１２Ｂが、第１のプロセッサ１２Ａから、キャッシュラインスヌープ要求８０および／またはＢＴＥ要求８４を受信するところから開始されてよい（ブロック３２２）。第２のプロセッサ１２Ｂは、ブロック３２２のスヌープ要求を、第２のプロセッサ１２ＢのＢＴＥテーブル５６Ｂに含まれる有効なＢＴＥ９０と比較することができる（ブロック３２４）。任意の有効なＢＴＥ９０がオーバーラップするキャッシュライン１００を追跡する（決定ブロック３２６）限りでは、第２のプロセッサ１２Ｂは（たとえば、ＢＴＥ９０が無効であることを示すように有効性フラグ９４を切り換えることによって）、そのようなキャッシュステータスエントリ９０を無効としてマークすることができる（ブロック３２８）。ブロック３２８の措置の後に、あるいは、有効なＢＴＥテーブル５６Ｂと、ブロック３２２のスヌープ要求との間にオーバーラップがない場合（決定ブロック３２６）、第２のプロセッサ１２Ｂは、キャッシュラインスヌープ応答８２および／またはＢＴＥ応答８６を含んでよいスヌープ応答を用意し、発行することができる（ブロック３３０）。第２のプロセッサ１２Ｂは、キャッシュライン１００をスヌープ要のラインとして控えめに示すＢＴＥ９０を含むようにＢＴＥ応答８６を用意し、発行することができ、少なくともここで、そのようなキャッシュライン１００は、任意の好適な技法を使用して、キャッシュ４８Ｂおよび／または５２Ｂにおいてキャッシュされている。たとえば、第２のプロセッサ１２Ｂは、図１８のブロック３０６を参照して上で説明した技法に従って、ＢＴＥ応答８６を用意し、発行することができる。
【００６２】
いくつかの実施形態において、図２０のフローチャート３４０により示されるように、第２のプロセッサ１２Ｂは、図１９を参照して上で概ね説明したように、受信したスヌープ要求とオーバーラップする全体のＢＴＥ９０を、無効として全くマークしないことがある。むしろ、プロセッサ１２Ｂは、特定の個別のキャッシュステータスエントリ９６が、スヌープ要求とオーバーラップする、キャッシュされていないキャッシュラインに対応するとき、そのようなキャッシュステータスエントリ９６をスヌープ要のラインとして示すように、ＢＴＥ応答８６を用意することができる。とりわけ、フローチャート３４０は、第２のプロセッサ１２Ｂが、別のメモリ共有デバイス（たとえば、第１のプロセッサ１２Ａ）から、キャッシュラインスヌープ要求８０および／またはＢＴＥ要求８４を受信するところから開始されてよい（ブロック３４２）。
【００６３】
第２のプロセッサ１２Ｂは、そのＢＴＥテーブル５６Ｂの有効なＢＴＥ９０を、ブロック３４２のスヌープ要求と比較することができる（ブロック３４４）。次に、第２のプロセッサ１２Ｂは、ブロック３４２のスヌープ要求と、ＢＴＥテーブル５６Ｂの有効なＢＴＥ９０との間にオーバーラップがあるかどうかを判定する（決定ブロック３４６）。そのようなオーバーラップする有効なＢＴＥ９０のいずれかの部分が、第２のプロセッサ１２Ｂによってキャッシュされていないキャッシュライン１００（たとえば、そのようなキャッシュライン１００は、キャッシュ４８Ｂおよび／または５２Ｂには存在しない）を追跡するキャッシュステータスエントリ９６を含む場合（決定ブロック３４８）、第２のプロセッサ１２Ｂは、これらのキャッシュステータスエントリ９６を、ＢＴＥ応答８６においてスヌープ要のラインとして示すことができる。そのようなＢＴＥ応答８６はまた、図１８のブロック３０６のやり方で判定され得るように、キャッシュ４８Ｂおよび／または５２Ｂにおいてプロセッサ１２Ｂによってキャッシュされたキャッシュライン１００を追跡するあらゆるキャッシュステータスエントリ９６を、スヌープ要のラインとして示すことができる（ブロック３５２）。ＢＴＥテーブル５６Ｂによって追跡されるそれらのキャッシュされていないキャッシュライン１００を、ＢＴＥ応答８６においてスヌープ要のラインとして示すことによって、プロセッサ１２Ｂは、これらのキャッシュライン１００のいずれかへのアクセスを得る前に、なんらかの形のスヌープ要求に携わるように第１のプロセッサ１２Ａに効果的に要求できることに留意されたい。
【００６４】
ブロック３５２においてＢＴＥ応答８６を用意し、発行することは、キャッシュラインスヌープ応答８２の発行を排除しないことにもまた留意されたい。さらに、いくつかの実施形態では、第２のプロセッサ１２Ｂは、スヌープヒットの場合にキャッシュラインスヌープ応答８２を発行して、所望のキャッシュライン１００を返すことができる。そのような条件下では、第２のプロセッサ１２Ｂは、図２０に示すようにＢＴＥ応答８６を用意し発行することもあるし、用意せず発行しないこともある。
【００６５】
いくつかの実施形態において、第２のプロセッサ１２Ｂは、そのキャッシュ４８Ｂおよび／または５２Ｂに記憶された、第１のプロセッサ１２Ａからのスヌープ要求とオーバーラップする、変更されていないキャッシュラインを無効にすることによって、第１のプロセッサ１２Ａからのスヌープ応答に反応することができる。図２１のフローチャート３６０は、そのような方法の実施形態を表す。フローチャート３６０は、第２のプロセッサ１２Ｂがスヌープ要求（たとえば、キャッシュラインスヌープ要求８０および／またはＢＴＥ要求８４）を受信するところから開始されてよい（ブロック３６２）。第２のプロセッサ１２Ｂのスヌープ抑制ブロック５４Ｂは、スヌープ抑制ブロック５４ＢのＢＴＥテーブル５６Ｂに含まれる有効なＢＴＥ９０を、ブロック３６２で受信したスヌープ要求と比較することができる。
【００６６】
そのような有効なＢＴＥ９０が、ブロック３６２のスヌープ要求の対象であるメモリとオーバーラップするメモリを追跡するキャッシュステータスエントリ９６を含み（決定ブロック３６６）、かつそのようなメモリが、第２のプロセッサ１２Ｂのキャッシュ４８Ｂおよび／または５２Ｂにおいて変更されていないキャッシュライン１００に含まれる（決定ブロック３６８）限りでは、プロセッサ１２Ｂは、使用中のキャッシュコヒーレンスプロトコル（たとえば、ＭＥＳＩ、ＭＯＳＩ、ＭＯＥＳＩ、その他）に従って、そのような変更されていないオーバーラップするキャッシュライン１００を無効にすることができる（ブロック３７０）。そうでない場合、またはブロック３７０の措置の後で、プロセッサ１２Ｂは、スヌープ応答（たとえば、キャッシュラインスヌープ応答８２および／またはＢＴＥ応答８６）を発行することができる。たとえば、図２１のブロック３７２で示すように、第２のプロセッサ１２Ｂは、キャッシュライン１００をスヌープ要のラインとして控えめに示すＢＴＥ応答８６を用意し、発行することができ、少なくともここで、そのようなキャッシュライン１００は、ブロック３７０で無効にされたキャッシュライン１００を除いて、キャッシュ４８Ｂおよび５２Ｂにおいてキャッシュされている。したがって、ブロック３７２で用意され、発行されたＢＴＥ応答は、いくつかの可能性のある例外はあるが、図１８のブロック３０６と実質的に同じやり方で、用意され、発行されてよい。たとえば、ある時間において、ブロック３７０で無効にされたキャッシュライン１００に対応したキャッシュステータスエントリ９６は、必ずしもスヌープ要のラインとして示されないことがある。
【００６７】
特定の実施形態において、比較的低帯域幅のプロセッサ１２（たとえば、第１のプロセッサ１２Ａ）などの電子デバイス１０の１つまたは複数のメモリ共有デバイスは、ＢＴＥ要求８４を発行しない、および／またはＢＴＥテーブル５６（たとえば、ＢＴＥテーブル５６Ａ）をポピュレートしない一方で、ＢＴＥ応答８６を提供することによって、ＢＴＥスヌープ要求８４またはキャッシュラインスヌープ要求８０に応答することをサポートすることができる。すなわち、低帯域幅のメモリ共有デバイスは、非常に頻繁に共有メモリ１４からキャッシュラインにアクセスする必要がないので、そのような低帯域幅のデバイスは、いくつかの実施形態において、キャッシュミス時に、常にキャッシュラインスヌープ要求８０を単に発行すればよい。すなわち、これらの特定の実施形態において、低帯域幅のメモリ共有デバイスは、スヌープ抑制ブロック５４またはＢＴＥテーブル５６を含まないことさえできる。それにもかかわらず、そのような低帯域幅のメモリ共有デバイスはなおも、他のメモリ共有デバイス（たとえば、第２のプロセッサ１２Ｂなどの高帯域幅のメモリ共有デバイス）が、ＢＴＥテーブル５６をポピュレートし、スヌープ抑制ブロック５４（たとえば、第２のプロセッサ１２Ｂのスヌープ抑制ブロック５４ＢのＢＴＥテーブル５６Ｂ）を維持することを可能にするために、ＢＴＥ応答８６を発行することによって、スヌープ要求に応答することができる。
【００６８】
図２２のレガシーデバイス統合構成３７８の実施形態などの、いくつかの他の実施形態において、ＢＴＥテーブル５６を備えたメモリ共有デバイス（たとえば、プロセッサ１２）は、レガシーメモリ共有デバイス３８０とのキャッシュコヒーレンスを維持することができる。レガシーメモリ共有デバイス３８０は、ＢＴＥテーブル５６および／またはＢＴＥ要求８４に明瞭に応答する能力を欠いていることがあるが、それでもなお効率的なキャッシュコヒーレンスを維持することができる。詳細には、レガシーデバイス統合構成３８７において、キャッシュブロックコヒーレンスインターフェース３８２（図２２ではノースブリッジとして示されている）が、第１のプロセッサ１２ＡからのＢＴＥ要求８４に応答することが可能であってよい。このキャッシュブロックコヒーレンスインターフェース３８２は、システムボードのノースブリッジとして示されているが、キャッシュコヒーレンス目的で、キャッシュブロックコヒーレンスインターフェース３８２が、プロセッサ１２Ａとレガシーメモリ共有デバイス３８０との間に通信可能に置かれ続ける限り、キャッシュブロックコヒーレンスインターフェース３８２は任意の好適な場所に現れてよい。
【００６９】
例として、第１のプロセッサ１２Ａは、メモリバス４２および／または通信バス４４を介して、キャッシュラインスヌープ要求８０および／またはＢＴＥ要求８４を、キャッシュブロックコヒーレンスインターフェース３８２に発行することができる。キャッシュブロックコヒーレンスインターフェース３８２は次いで、ＢＴＥテーブル５６Ｃを含むスヌープ抑制ブロック５４Ｃを使用することに少なくとも部分的に基づいて、これらのスヌープ要求を解釈し、適切に応答することができる。キャッシュブロックコヒーレンスインターフェース３８２は、たとえば、ＰＣＩｅ通信バスであってよい通信バス３８４を通して、レガシーメモリ共有デバイス３８０と通信することができる。レガシーメモリ共有デバイス３８０は、共有メモリ１４から、および／または他のメモリ３８８からキャッシュライン１００を記憶することができる、それ自身のキャッシュ３８６を含むことができる。レガシーメモリ共有デバイス３８０は、メモリバス３９０を介して、そのような他のメモリ３８８にアクセスすることができる。
【００７０】
キャッシュブロックコヒーレンスインターフェース３８２は、第１のプロセッサ１２Ａからキャッシュラインスヌープ要求８０および／またはＢＴＥ要求８４を受信し、それに応答することができる、および／または、レガシーメモリ共有デバイス３８０からの特定の不必要なスヌープ要求を抑制することができる。たとえば、第１のプロセッサ１２Ａが、キャッシュブロックコヒーレンスインターフェース３８２にＢＴＥ要求８４を発行するとき、キャッシュブロックコヒーレンスインターフェース３８２は、ＢＴＥ応答８６を用意し、発行することによって、応答することができる。ＢＴＥ応答８６は、ＢＴＥ９０を含むことができ、ＢＴＥ９０は、キャッシュライン１００がキャッシュ３８６に存在するとき、および／または、レガシーメモリ共有デバイスがそのようなキャッシュライン１００の独占権および／または所有権を有するときに、そのようなキャッシュライン１００のステータスを、スヌープ要のラインとして控えめにリストにする。同様に、レガシーメモリ共有デバイス３８０が、ＢＴＥテーブル５６Ｃの有効なＢＴＥ９０においてスヌープ不要のラインとしてリストにされた所望のキャッシュライン１００を要求するとき、キャッシュブロックコヒーレンスインターフェース３８２は、このスヌープ要求を抑制することができる。代わりに、キャッシュブロックコヒーレンスインターフェース３８２は、スヌープ要求を転送する、または発行することなく、共有メモリ１４において所望のキャッシュライン１００にアクセスすることができる。同様に、キャッシュブロックコヒーレンスインターフェース３８２は、上で説明したやり方で、ＢＴＥ要求８４を発行し、そのＢＴＥテーブル５６Ｃをポピュレートすることができる。
【００７１】
プロセッサ１２Ａからレガシーメモリ共有デバイス３８０への、ＢＴＥ要求８４および／またはキャッシュラインスヌープ要求８０に返答するために、キャッシュブロックコヒーレンスインターフェース３８２は、任意の好適な技法を使用して、ＢＴＥ応答８６を生成することができる。そのような１つの実施形態が、図２３に見られる。図２３に示す例において、プロセッサ１２Ａのスヌープ抑制ブロック５４Ａは、キャッシュブロックコヒーレンスインターフェース３８２のスヌープ抑制ブロック５４Ｃに、ＢＴＥ要求８４を発行する。スヌープ抑制ブロック５４Ｃは、レガシーメモリ共有デバイス３８０に理解可能なやり方で、レガシーメモリ共有デバイス３８０と通信することができる。たとえば、キャッシュブロックコヒーレンスインターフェース３８２は、レガシーメモリ共有デバイス３８０のキャッシュ３８６に、いくつかのキャッシュラインスヌープ要求８０を発行することができる。キャッシュラインスヌープ要求８０の数は、ＢＴＥ要求８４に応答するための現在の時間制約、および／または、ＢＴＥ応答８６がキャッシュラインをスヌープ不要のラインとしていかに控えめに示すことが好適であるかに依存してよい。たとえば、スヌープ抑制ブロック５４Ｃは、時間が差し迫っているとき、および／または、ほとんどのキャッシュステータスエントリ９６が、ＢＴＥ応答８６において返されたＢＴＥ９０に、スヌープ不要のラインとしてひとまずリストにされてよいときに、１つまたはわずかな数のキャッシュラインスヌープ要求８０を発行することができる。同様に、スヌープ抑制ブロック５４Ｃは、時間が差し迫っているとき、および／または、ほとんどのキャッシュステータスエントリ９６が、ＢＴＥ応答８６において返されたＢＴＥ９０に、スヌープ不要のラインとしてひとまずリストにされてよいときに、１つまたはわずかな数のキャッシュラインスヌープ要求８０を発行することができる。
【００７２】
レガシーメモリ共有デバイス３８０は、キャッシュラインスヌープ要求８０を受信し、キャッシュラインスヌープ応答８２を用いて応答することができる。キャッシュブロックコヒーレンスインターフェース３８２のスヌープ抑制ブロック５４Ｃに、キャッシュ３８６によって返されたスヌープ応答８２は、ＢＴＥ応答８６を用意するために使用されてよい。詳細には、キャッシュ３８６からスヌープ抑制ブロック５４Ｃへのスヌープ応答８２の結果に応じて、ＢＴＥ応答８６は、キャッシュ３８６に記憶されないことが既知であるキャッシュライン１００を、ＢＴＥ要求８４において要求されたメモリのブロックにおけるスヌープ不要のラインとして示すことができる。
【００７３】
構成に関わらず、電子デバイス１０は、メモリの静的サイズまたは動的サイズ（たとえば、キャッシュライン１００の数）を追跡するＢＴＥ９０を利用することができる。すなわち、いくつかの実施形態において、ＢＴＥ９０は、単一のサイズのブロックのメモリを常に追跡することができる。加えて、または代替として、ＢＴＥ９０は、メモリのブロックの非同質サイズを追跡することができ、または電子デバイス１０の状態が変化するにつれて調整され得る、メモリのブロックの動的なサイズを追跡することができる。
【００７４】
たとえば、ＢＴＥ９０は、メモリ共有デバイスに応じて、キャッシュライン１００のより粗粒化されたグループ、またはより細粒化されたグループをそれぞれ追跡するキャッシュステータスエントリ９６を使用して、メモリの特定のブロックを追跡することができる。例として、プロセッサ１２Ａは、キャッシュライン１００の比較的細粒化されたグループを追跡するキャッシュステータスエントリ９６（たとえば、各キャッシュステータスエントリ９６が１つのキャッシュラインに対応することができる）を有するＢＴＥ９０を利用することができる。一方、第２のプロセッサ１２Ｂは、グラフィックスプロセッシングユニット（ＧＰＵ）などのより高帯域のメモリ共有デバイスであってよいので、第２のプロセッサ１２Ｂは、キャッシュラインの比較的粗粒化されたグループを追跡するキャッシュステータスエントリ９６（たとえば、各キャッシュステータスエントリ９６は４つ以上のキャッシュライン１００に対応することができる）を有するＢＴＥ９０を利用することができる。いくつかの実施形態において、同じメモリ共有デバイス（たとえば、プロセッサ１２Ａ）が、比較的細粒化されたキャッシュステータスエントリ９６を有するいくつかのＢＴＥ９０と、比較的粗粒化されたキャッシュステータスエントリ９６を有するいくつかのＢＴＥ９０とを利用することができる。
【００７５】
加えて、または代替として、いくつかの実施形態において、メモリ共有デバイスのうちの１つまたは複数（たとえば、第１のプロセッサ１２Ａ）は、変化する状態に応じて、メモリの異なるサイズのブロックを動的に追跡するＢＴＥ９０を利用することができる。たとえば、図２４の競合ブロック図である４００により示されるように、プロセッサ１２Ａおよび１２Ｂにそれぞれ関連付けられたＢＴＥテーブル５６Ａおよび５６Ｂに含まれるＢＴＥ９０は、キャッシュライン１００の比較的細かい、または粗いブロック４０１を追跡することができる。細粒か、粗粒かのどちらのキャッシュライン１００のブロックを追跡するかは、第１のプロセッサ１２Ａと第２のプロセッサ１２Ｂとの間の、そのブロック４０１のキャッシュライン１００についての競合の程度に依存してよい。
【００７６】
いくつかの実施形態において、競合カウンタ値４０２が、ＢＴＥテーブル５６Ａおよび５６Ｂに含まれる各ＢＴＥ９０に関連付けられていてよい。第１のプロセッサ１２Ａが、他のプロセッサ１２Ｂによってもやはりアクセスされるキャッシュライン１００に、ブロック４０１から頻繁にアクセスしているとき、競合カウンタ値４０２は上昇してよい。競合カウンタ値４０２がなんらかの閾値を超えるとき、競合カウンタ値４０２が関連付けられたＢＴＥ９０は、キャッシュライン１００の比較的細粒化されたブロック４０１を追跡することができ、そうでない場合、キャッシュライン１００の比較的粗粒化されたブロック４０１を追跡することができる。したがって、図２４に概略的に示すように、プロセッサ１２Ａと１２Ｂとの間の高い競合のエリアは、一般に細粒化されたＢＴＥ４０４によって追跡されてよい。これらの細粒化されたＢＴＥ４０４は、キャッシュライン１００の比較的小さなグループ分けを追跡するキャッシュステータスエントリ９６を利用することができる。同様に、プロセッサ１２Ａと１２とのＢ間のより少ない競合下にある共有メモリ１４のエリアでは、粗粒化されたＢＴＥ４０６が、そのようなメモリのステータスを追跡するために利用されてよい。認識されるように、粗粒化されたＢＴＥ４０６は、キャッシュライン１００の比較的大きなグループ分けを追跡するキャッシュステータスエントリ９６を利用することができる。たとえば、細粒化されたＢＴＥ４０４が、それぞれが１つのみのキャッシュライン１００を追跡するキャッシュステータスエントリ９６を含む場合、粗粒化されたＢＴＥ４０６は、キャッシュステータスエントリ９６につき２つ以上のキャッシュライン１００を追跡するキャッシュステータスエントリ９６を含むことができる。図２４は、より低い粒度およびより高い粒度のそれぞれにおいて、キャッシュライン１００のステータスをそれぞれ追跡する２つのみのタイプのＢＴＥ９０を示しているが、任意の好適な数の粒度が他のＢＴＥ９０によって追跡されてよい。すなわち、いくつかの実施形態においては、キャッシュライン１００のブロック４０１の中間的な粒度を追跡する他のＢＴＥ９０が利用されてもよい。
【００７７】
第１のプロセッサ１２Ａなどのメモリ共有デバイスは、競合が変化するにつれて、ＢＴＥ９０の粒度を変化させることができる。図２４を参照して上で触れたように、競合カウンタ４０２は、ＢＴＥ９０と一緒にＢＴＥテーブル５６Ａに記憶されてよい。図２５のフローチャート４３０により示されるように、ＢＴＥ９０によって追跡される粒度は、ＢＴＥ９０によって追跡されるメモリブロックが別のメモリ共有デバイスとの競合下における程度に応じて、変化してよい。
【００７８】
第１のプロセッサ１２Ａを例として使用し、フローチャート４３０は、第１のプロセッサ１２Ａが、ＢＴＥテーブル５６ＡのＢＴＥ９０によって追跡されるメモリのブロック４０１の競合をモニタするところから開始されてよい（ブロック４３２）。例として、競合カウンタ４０２は、ＢＴＥ９０によって追跡されているキャッシュブロック４０１のメモリに関連した競合の量に関連付けられた、なんらかの値を記憶することができる。ＢＴＥ９０に関連付けられた競合カウンタ４０２が、第１の閾値を上回るとき（決定ブロック４３４）、ＢＴＥ９０は、複数の、より細粒化されたＢＴＥ９０に分割されてよい（ブロック４３６）。たとえば、その競合カウンタ４０２が第１の閾値を超えた粗粒化されたＢＴＥ４０６は、必要に応じて、２つ以上の細粒化されたＢＴＥ４０４に分割されてよい。別の例では、それぞれが２つのキャッシュライン１００を追跡するキャッシュステータスエントリ９６を有するＢＴＥ９０は、それぞれが１つのキャッシュライン１００を追跡するキャッシュステータスエントリ９６を有する２つのＢＴＥに分割されてよい。特定の実施形態において、ブロック４３６に示すように、ＢＴＥ９０が、複数の、より細粒化されたＢＴＥ９０に分割されるとき、それぞれ新たに形成されたＢＴＥ９０に関連付けられた競合カウンタ４０２は、なんらかの開始値にリセットされてよく、その開始値が、ＢＴＥ９０が引き続き追跡するメモリのブロック４０１の競合に基づいて、増加する、または減少することができる。
【００７９】
ＢＴＥ９０に関連付けられた競合カウンタ４０２が、第１の閾値を上回らない（ブロック４３４）ものの、なんらかの第２の閾値を下回らない場合（決定ブロック４３８）、ＢＴＥ９０は、より粗粒化されたＢＴＥ９０に変換されてよい（ブロック４４０）。いくつかの実施形態において、ブロック４４０の変換を実行することは、メモリの隣接するブロック４０１を追跡する２つのＢＴＥ９０を結合することを含むことができ、ここで１つまたは両方は、第２の閾値を下回る競合カウンタ４０２を有する。いくつかの例を提供すると、競合カウンタ４０２が、ＢＴＥ９０によって追跡されているメモリのブロックが競合の閾値レベル未満ではないことを示すとき、１つまたは複数の細粒化されたＢＴＥ４０４は、粗粒化されたＢＴＥ４０６に変換されてよい。たとえば、それぞれが１つのキャッシュライン１００を追跡するキャッシュステータスエントリ９６を有するＢＴＥ９０は、それぞれが２つ以上のキャッシュライン１００を追跡するキャッシュステータスエントリ９６を有するＢＴＥ９０に変換されてよい。
【００８０】
ＢＴＥ９０に関連付けられた競合カウンタ４０２が第１の閾値を下回ったままで（決定ブロック４３４）、かつ第２の閾値を上回ったまま（決定ブロック４３８）である間、ＢＴＥ９０によって追跡されるメモリのブロック４０１に関連付けられた競合のレベルは、同じままであり、引き続きモニタされてよい（ブロック４３２）。言い換えれば、ＢＴＥ９０に関連付けられた競合カウンタ４０２は、メモリのブロックが第１のプロセッサ１２Ａと第２のプロセッサ１２Ｂとの間の競合における程度に基づいて、時として増加する、または減少することができる。
【００８１】
競合カウンタ４０２および／または他のスヌープトラフィック統計値は、スヌープ抑制ブロック５４を使用してキャッシュコヒーレンスをより効率的に維持するために、電子デバイス１０の動作を変化させるために使用されてよい。図２６に示されたスヌープトラフィック統計値表４６０は、このようにして電子デバイス１０の動作を変化させるために使用されてよい、いくつかのスヌープトラフィック統計値４６２を表す。たとえば、スヌープトラフィック統計値４６２は、電子デバイス１０の全体のシステムパフォーマンスに関することができるシステムパフォーマンスカウンタ４６４、第１のプロセッサ１２Ａまたは第２のプロセッサ１２Ｂなどの、電子デバイス１０のメモリ共有デバイスのいくつかに固有であってよいメモリ共有デバイスパフォーマンスカウンタ４６６、電子デバイス１０のメモリ共有デバイス（たとえば、第１のプロセッサ１２Ａ）が電子デバイス１０のなんらかの他のメモリ共有デバイス（たとえば、第２のプロセッサ１２Ｂ）と競合中であってよい全体の程度に関することができるメモリ共有デバイス競合カウンタ４６８、上で論じたようなＢＴＥ競合カウンタ４０２、いくつかの時間ベースのカウンタ４７２、電子デバイス１０のなんらかのコンポーネントが電子デバイス１０のリソースを使用している程度を別のやり方で示すことができる他の使用カウンタ４７４、および／または、たとえば、ページテーブルフラグ、グローバルレジスタ、その他におけるポリシーヒントまたは制御であってよい他のシステムヒント４７６を含むことができる。
【００８２】
一般に、スヌープトラフィック統計値４６２のうちの１つまたは複数は、キャッシュラインスヌープ要求８０ではなく、ＢＴＥスヌープ要求８４を、たとえば、いつ利用するかを制御するために、メモリ共有デバイスのスヌープ抑制ブロック５４によって使用されてよい。加えて、または代替として、スヌープトラフィック統計値４６２は、ＢＴＥ応答８６において用意されたＢＴＥ９０が、キャッシュライン１００をスヌープ不要のラインとしていかに控えめにリストにするべきかを判定するために使用されてよい。いくつかの実施形態において、スヌープトラフィック統計値４６２は、プロセッサ１２のうちの１つまたは複数上で動くプロセッサ実行可能命令（たとえば、ソフトウェアまたはファームウェア）を使用して、１つのプロセッサ１２（たとえば、第１のプロセッサ１２Ａ）から別のプロセッサ１２（たとえば、第２のプロセッサ１２Ｂ）へと、メモリがいつハンドオーバされるべきかを識別するのに使用されてよい。このメモリのハンドオーバはまた、プロセッサ１２のＢＴＥ９０において反映されてよい（たとえば、第２のプロセッサ１２Ｂの新たな制御下のメモリにアクセスするのにスヌープが必要ないことは先験的に知られ得るので、第２のプロセッサ１２ＢのＢＴＥ９０が更新されてよい）。
【００８３】
電子デバイス１０はまた、そのメモリ共有デバイス間（たとえば、第１のプロセッサ１２Ａおよび第２のプロセッサ１２Ｂ）の競合を削減するために、スヌープトラフィック統計値４６２を使用することができる。たとえば、図２７のフローチャート４９０により示されるように、電子デバイス１０のデータ処理回路が、第１のタスクに関連付けられていてよいメモリについての競合カウンタ４０２および／または他のスヌープトラフィック統計値４６２を、定期的に考慮することができる（ブロック４９２）。競合カウンタ４０２および／またはスヌープトラフィック統計値４６２のうちの１つまたは複数が、なんらかの閾値を超える場合（ブロック４９４）、プロセッサ１２は、現在の競合のレベルを削減しようとして、より競合が少ないタスクである第２のタスクへと切り換えることができる（ブロック４９６）。
【００８４】
電子デバイスの２つ以上のメモリ共有デバイス間（たとえば、第１のプロセッサ１２Ａおよび第２のプロセッサ１２Ｂ）のメモリについての競合はまた、どのメモリ共有デバイスがそのメモリを使用する権利を与えられるべきかを判定するために使用されてよい。たとえば、図２８および図２９により表される実施形態において、キャッシュライン１００の特定のブロック４０１をより必要とするプロセッサ１２は、いくらかの時間の間、そのブロック４０１の単独使用を与えられてよい。図２８に示すように、プロセッサ１２Ａおよび１２Ｂにそれぞれ関連付けられたスヌープ抑制ブロック５４Ａおよび５４Ｂは、そのそれぞれのＢＴＥテーブル５６ＡにおけるＢＴＥ９０に関連付けられた競合カウンタ４０２の１つまたは複数の集まりなどのスヌープトラフィック統計値４６２を、時として共有することができる。この情報を、図２８においてＢＴＥ競合インジケータ５１０と呼び、これは、スヌープ抑制ブロック５４Ａとスヌープ抑制ブロック５４Ｂとの間でやり取りされてよい。スヌープ抑制ブロック５４Ａからスヌープ抑制ブロック５４Ｂに送信されたＢＴＥ競合インジケータ５１０は、特にプロセッサ１２Ａに関連してよく、スヌープ抑制ブロック５４Ｂからスヌープ抑制ブロック５４Ａに送信されたＢＴＥ競合インジケータ５１０は、特に第２のプロセッサ１２Ｂに関連してよいことを理解されたい。
【００８５】
図２９のフローチャート５２０において、これらのＢＴＥ競合インジケータ５１０は、定期的に、またはなんらかのイベントの発生時（たとえば、特定の動作モードに入る）にやり取りされてよい（ブロック５２２）。その後、スヌープ抑制ブロック５４Ａとスヌープ抑制ブロック５４Ｂとの間でスヌープトランザクションが発生するとき（ブロック５２４）、プロセッサ１２Ａおよび１２Ｂがどのようにしてキャッシュコヒーレンスを実行するかは、これらのＢＴＥ競合インジケータ５１０に少なくとも部分的に基づいて、変化してよい。たとえば、プロセッサ１２Ａが、キャッシュラインスヌープ応答８２、ＢＴＥ応答８６、またはその両方のいずれを用いてキャッシュラインスヌープ要求８０に応答することができるかは、ＢＴＥ競合インジケータ５１０に応じて異なってよい。別の例において、プロセッサ１２Ａか、プロセッサ１２Ｂかのどちらが特定のキャッシュライン１００へのアクセスを与えられることになるかは、そのメモリに関連付けられた競合インジケータ５１０に依存してよい。実際、いくつかの実施形態において、スヌープ抑制ブロック５４Ａとスヌープ抑制ブロック５４Ｂとの間でスヌープトランザクションが発生した後に（ブロック５２４）、第１のプロセッサ１２Ａが、スヌープ要求において要求されたキャッシュライン１００へのアクセスおよび／またはキャッシュライン１００の単独使用を与えられてよい。
【００８６】
本開示の技術的な効果は、２つのメモリ共有デバイス間でキャッシュコヒーレンスを維持する電子デバイスのための効率を高めることを含む。そのような効率は、少なくとも１つのそのようなメモリ共有デバイスが、グラフィックスプロセッシングユニット（ＧＰＵ）などのメモリの比較的高帯域幅で動作するときに、特に拡大されてよい。２つのメモリ共有デバイス間の特定の不必要なスヌープトランザクションを削減することにより、電子デバイスは、より速く、および／またはより少ない電力で動作することができ、バッテリ寿命が向上する、および／または電子デバイスを充電するために生成されるべきより少ない電力を可能にするだけでなく、電子デバイスが知覚できるほど速く動作するのを可能にする。
【００８７】
上記のように、特定の実施形態が例として示されてきたが、これらの実施形態は、さまざまな変更形態および代替形態の余地があり得ることを理解されたい。特許請求の範囲は、開示された特定の形態に限定されることを意図せず、むしろ、本開示の趣旨および範囲内に含まれるすべての変更形態、均等形態、および代替形態を対象とするよう意図することをさらに理解されたい。
【図１】
0005674714.tif 000002
【図２】
0005674714.tif 000003
【図３】
0005674714.tif 000004
【図４】
0005674714.tif 000005
【図５】
0005674714.tif 000006
【図６】
0005674714.tif 000007
【図７】
0005674714.tif 000008
【図８】
0005674714.tif 000009
【図９】
0005674714.tif 000010
【図１０】
0005674714.tif 000011
【図１１】
0005674714.tif 000012
【図１２】
0005674714.tif 000013
【図１３】
0005674714.tif 000014
【図１４】
0005674714.tif 000015
【図１５】
0005674714.tif 000016
【図１６】
0005674714.tif 000017
【図１７】
0005674714.tif 000018
【図１８】
0005674714.tif 000019
【図１９】
0005674714.tif 000020
【図２０】
0005674714.tif 000021
【図２１】
0005674714.tif 000022
【図２２】
0005674714.tif 000023
【図２３】
0005674714.tif 000024
【図２４】
0005674714.tif 000025
【図２５】
0005674714.tif 000026
【図２６】
0005674714.tif 000027
【図２７】
0005674714.tif 000028
【図２８】
0005674714.tif 000029
【図２９】
0005674714.tif 000030