(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-10-28
(45)【発行日】2022-11-08
(54)【発明の名称】競合ロック要求の消去スキーム
(51)【国際特許分類】
G06F 12/0817 20160101AFI20221031BHJP
【FI】
G06F12/0817
(21)【出願番号】P 2018556346
(86)(22)【出願日】2017-06-22
(86)【国際出願番号】 US2017038811
(87)【国際公開番号】W WO2017223346
(87)【国際公開日】2017-12-28
【審査請求日】2020-06-22
(32)【優先日】2016-06-24
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ヴィドヒャナサン カリヤナスンダラム
(72)【発明者】
【氏名】エリック クリストファー モートン
(72)【発明者】
【氏名】アミット ピー. アプテ
(72)【発明者】
【氏名】エリザベス エム. クーパー
【審査官】酒井 恭信
(56)【参考文献】
【文献】特開2003-216597(JP,A)
【文献】特表2015-525939(JP,A)
【文献】米国特許出願公開第2015/0058570(US,A1)
【文献】VELDEMA R. et al.,"Runtime optimizations for a Java DSM implementation",PROCEEDINGS OF THE ACM 2001 JAVA GRANDE/ISCOPE CONFERENCE. PALO ALTO, CA, JUNE 2-4, 2001; [PROCEEDINGS OF THE JAVA GRANDE/ISCOPE CONFERENCE],米国,ACM,2001年06月01日,pp.153-162,DOI:10.1145/376656.376842, ISBN:978-1-58113-359-2
【文献】SONG FU et al.,"Distributed shared arrays: A distributed virtual machine with mobility support for reconfiguration",CLUSTER COMPUTING,vol. 9, no. 3,米国,KLUWER ACADEMIC PUBLISHERS,2006年07月01日,pp.237-255,ISSN: 1573-7543, DOI: 10.1007/S10586-006-9739-2
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/08 - 12/0897
(57)【特許請求の範囲】
【請求項1】
複数のデータブロックを複数のノードのホームノードに記憶することと、
前記ホームノードにおいて、要求を第1ノードから受信することであって、前記要求は、前記複数のデータブロックの所定のデータブロックへのアクセスに関する要求である、ことと、
前記要求を受信したことに応じて、前記ホームノードにおいて、前記所定のデータブロックに対するリード要求数のカウントを維持することと、
前記所定のデータブロックが現時点で第2ノードに記憶されており、前記カウントが閾値を超えていると判別したことに応じて、前記ホームノードが、前記所定のデータブロックのコピーを前記第2ノードに要求し、前記所定のデータブロックを前記第2ノードから受信したことに応じて、前記所定のデータブロックのコピーを前記ホームノードに記憶し、前記所定のデータブロックのコピーを前記ホームノードから前記第1ノードに転送することと、を含む、
方法。
【請求項2】
前記所定のデータブロックのコピーを要求することに応じて、前記第2ノードに記憶された前記所定のデータブロックのキャッシュコヒーレンシ状態を、所有を示すキャッシュコヒーレンシ状態に変更することを含む、
請求項1の方法。
【請求項3】
前記所定のデータブロックのコピーを転送することに応じて、前記所定のデータブロックを、共有を示すキャッシュコヒーレンシ状態の指標と共に、前記第1ノード、及び、前記複数のノードのうち前記ホームノードから前記所定のデータブロックの転送されたコピーを受信するノードの各々に記憶することを含む、
請求項1の方法。
【請求項4】
前記所定のデータブロックがロック可能であると判別したことに応じて、前記第1ノードにおいて前記所定のデータブロックの転送されたコピーに対してロックを設定することと、
前記所定のデータブロックがロックされていると判別したことに応じて、前記第1ノード
が、前記所定のデータブロックの転送されたコピー
を使用
するのを待機することと、を含む、
請求項3の方法。
【請求項5】
前記所定のデータブロックに対するライト要求又はロック解除要求の何れかを受信したことに応じて、前記カウントをリセットすることを含む、
請求項1の方法。
【請求項6】
前記所定のデータブロックを、前記複数のノードのうち前記所定のデータブロックを要求するノードに対して前記所定のデータブロックのコピーを転送するのに使用される前記ホームノードのバッファに記憶することであって、前記バッファは、前記ホームノードのシステムメモリから分離している、ことを含む、
請求項1の方法。
【請求項7】
複数のデータブロックを記憶するように構成されたホームノードと、
前記ホームノードに記憶されたデータブロックに対するアクセス要求を生成するように構成された第1ノードと、
前記ホームノードに記憶されたデータブロックに対するアクセス要求を生成するように構成された第2ノードと、を備え、
前記ホームノードは、所定のデータブロックにアクセスするための要求を前記ホームノードにおいて受信したことに応じて、前記ホームノードにおいて、前記所定のデータブロックに対するリード要求数のカウントを維持するように構成されており、
前記ホームノードは、
前記所定のデータブロックにアクセスするための要求を前記第2ノードから受信したことと、前記所定のデータブロックが現時点で前記第1ノードに記憶されており、前記カウントが閾値を超えていると判別したことと、に応じて、
前記所定のデータブロックのコピーを前記第1ノードに要求し、
前記所定のデータブロックを前記第1ノードから受信したことに応じて、前記所定のデータブロックのコピーを前記ホームノードに記憶し、
前記所定のデータブロックのコピーを前記ホームノードから前記第2ノードに転送する、
ように構成されている、
コンピューティングシステム。
【請求項8】
前記リード要求の1つ以上は、
前記所定のデータブロックを事前にロックした所定のノードが前記所定のデータブロック
を使用する動作を終了するま
で、前記所定のノードが前記所定のデータブロックに対するリードアクセスをロック状態で許可することによって、前記所定のデータブロックに対す
るアクセスを同期させるために使用されるロックリード要求である、
請求項7のコンピューティングシステム。
【請求項9】
前記ホームノードは、前記所定のデータブロックのコピーを要求することに応じて、前記第1ノードに記憶された前記所定のデータブロックのキャッシュコヒーレンシ状態を、所有を示すキャッシュコヒーレンシ状態に変更するように構成されている、
請求項7のコンピューティングシステム。
【請求項10】
前記ホームノードは、前記所定のデータブロックのコピーを転送することに応じて、前記所定のデータブロックを、共有を示すキャッシュコヒーレンシ状態の指標と共に、前記第2ノード、及び、複数のノードのうち前記ホームノードから前記所定のデータブロックの転送されたコピーを受信するノードの各々に記憶するように構成されている、
請求項7のコンピューティングシステム。
【請求項11】
第3ノードは、
前記所定のデータブロックがロック可能であると判別したことに応じて、前記
第3ノードにおいて前記所定のデータブロックの転送されたコピーに対してロックを設定することと、
前記所定のデータブロックがロックされていると判別したことに応じて
、前記所定のデータブロックの転送されたコピー
を使用
するのを待機することと、を行うように構成されている、
請求項8のコンピューティングシステム。
【請求項12】
前記ホームノードは、
1つ以上の追加ノードから前記要求を受信した後に受信した前記所定のデータブロックにアクセスするための要求に関して前記第1ノードと通信しない、
請求項7のコンピューティングシステム。
【請求項13】
前記ホームノードは、前記所定のデータブロックに対応する所定のアドレスに対するライト要求又はロック解除要求の何れかを受信したことに応じて、前記カウントをリセットように構成されている、
請求項12のコンピューティングシステム。
【請求項14】
前記コンピューティングシステムは、前記第1ノード及び前記第2ノードを含む複数のノードを備え、
前記ホームノードは、前記所定のデータブロックを、前記複数のノードのうち前記所定のデータブロックを要求するノードに対して前記所定のデータブロックのコピーを転送するのに使用されるバッファに記憶するように構成されており、
前記バッファは、前記ホームノードのシステムメモリから分離している、
請求項8のコンピューティングシステム。
【請求項15】
プログラム命令を記憶するコンピュータ可読記憶媒体であって、前記プログラム命令は、
複数のノードのうちホームノードのプロセッサによって実行されると、
複数のデータブロックを
前記複数のノードの
うち前記ホームノードに記憶することと、
前記ホームノードにおいて、所定のデータブロックに対する要求を受信したことに応じて、前記ホームノードにおいて、前記所定のデータブロックに対するリード要求数のカウントを維持することと、
前記ホームノードにおいて、要求を第1ノードから受信することであって、前記要求は、前記複数のデータブロックの所定のデータブロックへのアクセスに関する要求である、ことと、
前記所定のデータブロックが現時点で第2ノードに記憶されており、前記カウントが閾値を超えていると判別したことと、に応じて、前記ホームノードが、前記所定のデータブロックのコピーを前記第2ノードに要求し、前記所定のデータブロックを前記第2ノードから受信したことに応じて、前記所定のデータブロックのコピーを前記ホームノードに記憶し、前記所定のデータブロックのコピーを前記ホームノードから前記第1ノードに転送することと、
を前記プロセッサに行わせる、
コンピュータ可読記憶媒体。
【請求項16】
前記プログラム命令は、
前記所定のデータブロックがロック可能であると判別したことに応じて、前記第1ノードにおいて前記所定のデータブロックの転送されたコピーに対してロックを設定することと、
前記所定のデータブロックがロックされていると判別したことに応じて、前記第1ノード
が、前記所定のデータブロックの転送されたコピー
を使用
するのを待機することと、
を前記プロセッサに行わせる、
請求項15のコンピュータ可読記憶媒体。
【請求項17】
1つ以上の前記リード要求は、所定のアドレスに対応する前記所定のデータブロックへのアクセスを同期させるために使用されるロックリード要求であり、
前記プログラム命令は、前記所定のデータブロックに対応するライト要求又はロック解除要求の何れかを受信したことに応じて、前記カウントをリセットすることを前記プロセッサに行わせる、
請求項16のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピューティングネットワークシステムに関し、より具体的には、複数のノード間の通信を管理することに関する。
【背景技術】
【0002】
現在のマイクロプロセッサでは、1つ以上のプロセッサ及び/又はプロセッサコアがマイクロプロセッサ内に含まれ、各プロセッサは、スーパースカラパイプラインで命令を実行することができる。マイクロプロセッサは、データに対するマイクロプロセッサのレイテンシを短くするために、1つ以上のレベルのキャッシュ階層を含み、又は、当該キャッシュ階層に接続されている。また、コンピューティングシステムは、コンピューティング性能を向上させるために、多くの場合、1つ以上のマイクロプロセッサをそれぞれ有する複数のノードを含む。いくつかの場合、所定のデータブロックは、複数のノードの複数のキャッシュに記憶される。キャッシュされたコピーのうち1つが、他のノードでキャッシュされたコピーに関して1つのノードで変更されることがあるので、コンピューティングシステムは、所定のキャッシュコヒーレンシプロトコルに従ってキャッシュコヒーレンシを維持するように構成されている。様々な特定のコヒーレンシプロトコルがよく知られている。
【0003】
かかるコヒーレンシプロトコルの多くは、システム内のノード間を通過するメッセージ、コマンド及び/又はプローブの使用を含む。いくつかの場合、メッセージは、メモリコントローラ等の所定のコヒーレンシポイントによって調整される。また、プローブは、所定のブロックへのアクセスを同期させるために使用される。ソフトウェアは、通常、データへのアクセスを同期させるためのロック機構を使用する。様々なシステムでは、多くのスレッドが、所定のデータブロックでロックを取得しようとする。このような場合、所定のブロックに関する特定のノード(例えば、ホームノード)は、所定のブロックに関するいくつかのロック取得要求を受信する。ホームノードは、かかる要求に応じて、概して、ロック取得要求を連続的に処理する。例えば、このような場合、第1スレッドは、所定のブロックに対するロックを取得することに成功する。第1スレッドが所定のブロックの処理を完了すると、第1スレッドは、ロックを解除するメッセージをノードに伝える。しかしながら、先に受信したロック取得要求が連続して処理されることに起因して、第1スレッドからのロック解除要求を、先の要求が処理されるまで処理することができない。したがって、ロックが解除される前に遅延が発生する。
【0004】
上記に鑑みて、複数ノード処理システムにおける通信を管理するための効率的な方法及びシステムが望まれている。
【発明の概要】
【課題を解決するための手段】
【0005】
複数のノード間の通信を管理するシステム及び方法が考えられる。様々な実施形態では、コンピューティングシステムは、互いに接続された複数の処理ノードを含む。各処理ノードは、1つ以上の処理コアと、1つ以上の対応するキャッシュメモリサブシステムと、を含む。複数のノードは、ホームノードに割り当てられた所定のデータブロックに対するリードアクセス要求を生成するように構成されている。ホームノード以外のノードは、ホームノードに割り当てられた所定のデータブロックに対して、現時点で、所定のデータブロックのコピーを記憶する。他のノードは、リードアクセス要求を所定のデータブロックに関するホームノードに送信する一方で、所定のデータブロックのコピーを有する。
【0006】
ホームノードは、所定のデータブロックに対するリードアクセスを要求するいくつかのノードが閾値を超えており、所定のデータブロックのコピーが他のノードに記憶されていると判別した場合に、コマンドを第1ノードに送信する。第1ノードに送信されたコマンドは、所定のデータブロックのコピーをホームノードに転送するように第1ノードに指示する。また、第1ノードは、所定のデータブロックのコピーに関するキャッシュコヒーレンシ状態を、所有コヒーレンシ状態に変更するように指示される。
【0007】
ホームノードは、コピーを受信したことに応じて、所定のデータブロックのコピーを、複数ノードのうち第2ノード等の要求ノードに転送する。また、第2ノードは、所定のデータブロックのコピーに関するキャッシュコヒーレンシ状態を、共有状態に変更するように指示される。ホームノードは、所定のデータブロックの変更を意図したライト要求又はリード要求を検出するまで、所定のデータブロックのコピーを他の要求ノードに転送し続ける。
【0008】
これら及び他の実施形態は、以下の説明及び図面を参照することによってさらに理解されるであろう。
【図面の簡単な説明】
【0009】
【
図1】コンピューティングシステムの一実施形態の一般図である。
【
図2】複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図の一実施形態の一般図である。
【
図3】メモリコントローラの一実施形態の一般図である。
【
図4】複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図の別の実施形態の一般図である。
【
図5】複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図の別の実施形態の一般図である。
【
図6】複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図の別の実施形態の一般図である。
【
図7】複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図の別の実施形態の一般図である。
【
図8】複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図の別の実施形態の一般図である。
【
図9】複数ノードコンピューティングシステムの一連のリード要求を処理する方法の一実施形態の一般的なフロー図である。
【
図10】例示的な処理ノードの一実施形態の一般図である。
【発明を実施するための形態】
【0010】
本発明は、様々な修正及び代替形態が可能であるが、具体的な実施形態を図面の例として示し、本明細書において詳細に説明する。しかしながら、図面及びその詳細な説明は、本発明を開示した特定の形態に限定するものではなく、むしろ、本発明は、添付の特許請求の範囲によって定義されるように、本発明の範囲内に含まれる全ての変更、均等物及び代替物を包含するものであることを理解されたい。
【0011】
以下の説明では、本発明の完全な理解を提供するために、多くの具体的な詳細が述べられている。しかしながら、当業者は、本発明がこれらの具体的な詳細なしに実施され得ることを認識すべきである。場合によっては、本発明を不明瞭にすることを避けるために、周知の回路、構造及び技術が詳細に示されていない。また、説明を簡単且つ明瞭にするために、図面に示された要素が必ずしも縮尺通りに描かれていないことを理解されたい。例えば、いくつかの要素の寸法は、他の要素と比較して誇張されている。
【0012】
図1を参照すると、コンピューティングシステム100の一実施形態が示されている。コンピューティングシステム100は、複数の処理ノード110a~110dを含む。処理ノード110a~110dは、ノード110a~110dとも呼ばれる。4つのノードが
図1に示されているが、他の実施形態では異なる数のノードを含み、各処理ノードは、1つ以上のプロセッサコアと、1つ以上の対応するキャッシュメモリサブシステムと、を含む。
【0013】
ノード110a~110dの各々は、メモリ130a~130dの何れか1つに接続されている。処理ノード内のメモリコントローラ120a~120dの各々は、処理ノードをメモリ130a~130dの何れか1つに接続するために使用される。メモリコントローラ120a~120dは、メモリ130a~130dにインタフェースするための制御回路を含む。また、メモリコントローラ120a~120dは、メモリ要求をキューイングするための要求キューを含む。メモリ130a~130dは、任意の適切なメモリデバイスを含む。例えば、様々な実施形態では、メモリ130a~130dの各々は、1つ以上のダイナミックランダムアクセス(DRAM)、同期型DRAM(SDRAM)、スタティックRAM、デュアルインラインメモリ(DIMM)、ハードディスク、半導体ドライブ等を含む。
【0014】
コンピューティングシステム100のアドレス空間は、メモリ130a~130d間で分割される。処理ノード110a~110dの各々は、どのアドレスがメモリ130a~130dの何れか1つにマッピングされるか(ひいては、特定のアドレスに対するメモリ要求が処理ノード110a~110dのうち何れの処理ノードにルーティングされるか)を判別するために使用されるメモリマップを含む。様々な実施形態では、コンピューティングシステム100のアドレスに対するコヒーレンシポイントは、アドレスに対応するバイトを記憶するメモリ130a~130dの何れか1つに接続されたノード110a~110dの何れか1つの内部のメモリコントローラ120a~120dの何れか1つである。しかしながら、他の実施形態では、異なるコンポーネントがコヒーレンシポイントとして機能するように構成されている。
【0015】
処理ノード110a~110dの各々は、処理ノード110a~110dのうち他のノードと通信するインタフェースロジックを含む。また、処理ノード110a~110dの各々は、1つ以上の入出力(I/O)デバイス及び/又はI/Oバスに接続されており、これらは説明を容易にするために図示されていない。様々な実施形態では、コンピューティングシステム100は、ノード間通信に関するパケットベースリンクを実装する。図示された実施形態では、このリンクは、ノード110a~110d間の双方向ラインとして示されている。他の実施形態では、ノード110a~110dのうち1つ以上のものは、LAN、WAN、WiFi(登録商標)接続、イーサネット(登録商標)、ファイバチャネル、インターネット等のネットワークを介して、ノード110a~110dのうち他のノードに接続される。
【0016】
リンクを介して送信されるパケットには、メッセージ、コマンド、要求及びプローブが含まれる。ノード110a~110d間のリンクは、キャッシュコヒーレント方式で動作する。処理ノード110a~110dの各々は、処理ノード110a~110dの全ての他のノードに直接接続されているように示されているが、他の実施形態では、他のノード全てに対して直接接続されていないことに留意されたい。かかる実施形態では、1つの処理ノードから他の処理ノードに送信されるパケットは、1つ以上の中間ノードを通過する。コンピューティングシステム100は、パケットを送信するための任意の適切なフロー制御機構及びアルゴリズムを採用する。
【0017】
様々な実施形態では、ノード110a~110dの各々の内部の1つ以上のプロセッサは、データに対するプロセッサの要求のレイテンシを短くするために、1つ以上のレベルのキャッシュ階層に接続される。一般的に言えば、キャッシュは、1つ以上のデータブロックを記憶し、データブロックの各々は、システムメモリ内の対応するアドレスに記憶されたデータに対応する。本明細書で使用される「ブロック」は、コヒーレンシ目的のための単位として扱われ、連続するメモリ位置に記憶されたバイトのセットである。いくつかの実施形態では、ブロックは、キャッシュの割り当て及び割り当て解除の単位である。ブロックのバイト数は、デザインの選択に従って異なる。一例として、32バイト及び64バイトブロックが頻繁に使用される。本明細書で使用される「データブロック」、「キャッシュライン」及び「キャッシュブロック」という用語は、以下の様々な実施形態の説明において互換的に使用される。
【0018】
コンピューティングシステム100のアドレス空間がメモリ130a~130d間で分割されると、所定のデータブロックのアドレスは、ノード110a~110dのうち特定の1つにマッピングされる。この特定のノードは、所定のデータブロックの「ホーム」ノードとみなされる。所定のデータブロックの有効なコピーがノード110a~110dのうち別のノードで変更(M)、排他的(E)、所有(O)のコヒーレンシ状態で記憶される場合、この別のノードは、「オーナー」ノードと呼ばれる。例えば、所定のブロックのアドレスがノード110aにマッピングされ、ノード110aは、所定のブロックのホームノードとなる。一方、ノード110bが所定のブロックの排他的コピーを要求し、所定のブロックのコピーをメモリ130bに記憶する場合には、ノード110bは、所定のブロックのオーナーノードである。
【0019】
様々な実施形態では、ノード110a~110dのプロセッサによって実行される作業は1つ以上のプロセスに対応し、各プロセスは1つ以上のスレッドから構成されている。様々な実施形態では、コンピューティングシステム100のリンクを介して送信されるパケットを、データブロックへのアクセスを同期させるために使用する。
【0020】
様々な実施形態では、ロックの指標(例えば、データブロックが現時点でロック又はロック解除されているという指標)が、データブロックのデータ内に記憶される。いくつかの実施形態では、ロックの指標は、データブロックのデータ内のシングルビットである。他の実施形態では、ロックの指標は、データブロックのデータ内のバイトである。例えば、一実施形態では、テストアンドセット命令タイプと共にバイトが使用される。データブロックのデータ内のロックの指標に関する他のデータサイズも可能であり、想定されている。いくつかの実施形態では、ロックのオーナーの指標は、データブロックのデータ内に記憶される。他の実施形態では、ソフトウェア機構は、所定のブロック内のデータから外部のロックのオーナーを決定する。例えば、ソフトウェア機構は、他の場所に記憶されたスレッド識別子(ID)を使用して、ロックのオーナーを決定する。
【0021】
上述したように、所定のブロックは、元々、ホームノードに割り当てられている。一例では、ノード110aは、コンピューティングシステム100内の所定のブロックのホームノードである。後に、ノード110bは、所定のブロックをノード110aに要求する。いくつかの実施形態では、ノード110bからの要求は、キャッシュコヒーレンシプロトコルに従って、所定のブロックに対する要求されたキャッシュコヒーレンシ状態の指標を含む。
【0022】
様々な実施形態では、MOESIキャッシュコヒーレンシプロトコルがコンピューティングシステム100で使用される。かかる実施形態では、コンピューティングシステム100の各キャッシュラインは、5つのキャッシュライン状態のうち1つの状態にある。5つの状態は、変更(M)状態を含み、変更(M)状態は、キャッシュラインのコピーを記憶するキャッシュが、キャッシュラインの有効なコピーのみを有しており、コピーに対する変更が行われたことを示している。所有(O)状態は、キャッシュラインのコピーを記憶するキャッシュが、キャッシュラインの有効なコピーを有する複数のキャッシュのうち1つであるが、当該キャッシュは、キャッシュラインの当該コピーに対する変更を行う排他的権利を有することを示している。排他的(E)状態は、キャッシュラインのコピーを記憶するキャッシュが、キャッシュラインの有効なコピーのみを有しており、コピーに対する変更が行われなかったことを示している。共有(S)状態は、キャッシュラインのコピーを記憶するキャッシュが、キャッシュラインの有効なコピーを有する複数のキャッシュのうち1つであるが、当該キャッシュは、コピーを変更する許可を有していないことを示している。無効(I)状態は、キャッシュが、キャッシュラインの有効なコピーを記憶していないことを示している。
【0023】
他の実施形態では、他のキャッシュコヒーレンシプロトコルがコンピューティングシステム100で使用される。例えば、MSI、MESI、MESIF及びMOESIFキャッシュコヒーレンシプロトコルがコンピューティングシステム100で使用される。MESIF及びMOESIFプロトコルは、キャッシュラインのコピーを記憶しているキャッシュが、所定のラインに対する要求の指定された応答部として機能していることを示す転送(F)状態を使用する。このプロトコルは、何れかのキャッシュが共有(S)状態のキャッシュラインを保持している場合、最大でも1つの他のキャッシュが転送(F)状態のキャッシュラインを保持することを保証にする。キャッシュコヒーレンシプロトコルの所有(O)状態を所有しない実施形態では、共有(S)状態が所定のブロックに使用される。一般的に言えば、本明細書で説明する方法及び機構は、特定のキャッシュコヒーレンシプロトコルに限定されない。
【0024】
図1に示すように、所定のブロック内のデータは、ロック(L)の指標を含む。本明細書で使用するように、所定のブロックのデータ内でロックを設定することは、所定のブロックのデータ内にロックビットをアサートすること、所定のブロックのデータ内のロックを示すために使用されるバイトを、ロックセット又はロック状態を示す値に変更すること等を指す。同様に、所定のブロックのデータ内でロックをリセットすることは、所定のブロックのデータ内のロックビットをデアサートすること、所定のブロックのデータ内のロックを示すために使用されるバイトを、ロックリセット又はロック解除状態を示す値に変更すること等を指す。
【0025】
ロックの指標が所定のブロック自体のデータ内にあるので、データのリードは、データがロックされているか否の指標も含む。このように、ロックの指標をリードするために、所定のブロックのデータがリードされる。言い換えれば、所定のブロックのデータのリードは、所定のブロックのデータ内のロックの指標を検査、チェック又は読み取るように行われる。ノード内のプロセッサが所定のブロックのデータ内のロックを設定又はリセットする場合、ノードが外部プローブ又は別のノードからの他のリード要求を処理する前に、変更動作が完了することが保証されていることを留意されたい。所定のブロック内のデータの内部変更と外部プローブ要求との間の順序付けを実施することにより、ライブロック状況が回避される。
【0026】
様々な実施形態では、ロックを設定又はリセットする目的で特別な命令を含めることができない。むしろ、所定のブロック内のデータを変更すること(又は、変更する許可を得ること)に応じて、ロックを設定又はリセットすることが行われる。かかる要求には、要求を変更する意図を伴うライト要求、リード要求等が含まれる。したがって、かかる実施形態では、要求を変更する意図を伴うライト要求又はリード要求は、「ロック要求」とみなされる。他の実施形態では、ロックを設定又はリセットする目的で特別な命令を含めることができる。所定の実施形態では、何れか一方及び/又は両方が可能である。
【0027】
いくつかの実施形態では、ノード110bからの所定のブロックに対する要求に関して、当該要求は、コヒーレンシプロトコルの変更(M)状態で、所定のブロックのコピーを受信する要求を(明示的又は暗黙的に)示す。図示するように、所定のデータブロックは、オーナーノード(ノード110b)のローカルキャッシュ150に記憶されている。図示するように、データのブロックは、「値」によって示されるデータ値と、ロック指標「L」と、を含む。本実施形態では、ロックの指標は、所定のブロックのデータ内にある。1つのシナリオでは、オーナーノード(ノード110b)は、ロックをリセット(解除)する準備ができており、これが、所定のブロックに対する排他的アクセスを要求した理由である。上述したように、ロックをリセットすることは、所定のブロックのデータ内のロックビットをデアサートし、所定のブロックのデータ内のロックを示すために使用されるバイトを、ロックリセット又はロック解除状態を示す値に変更すること等を含む。
【0028】
所定のシナリオでは、所定のブロックに関するホームノード(ノード110a)は、所定のブロックが別のノードによって所有されている場合に、所定のブロックへのアクセスに関する1つ以上の要求を受信する。様々な実施形態では、アクセスに関する要求は、明示的又は黙示的なロック取得要求である。ホームノード(ノード110a)は、受信したロック取得要求に応じて、オーナーノード(ノード110b)が所定のブロックのコピーをホームノードに戻すことを要求するように構成されている。ホームノード(ノード110a)は、転送バッファ160にエントリを割り当て、戻された所定のブロックのコピーを記憶する。図示するように、転送バッファ160はデータのコピーを含み、当該コピーは、「値」で示されるデータ値のコピーと、「L」で示されるロック指標のコピーと、を含む。ホームノード(ノード110a)は、転送バッファ160のデータのコピーを、所定のブロックへのアクセスを要求するノードの各々に転送する。
【0029】
ここで、
図2を参照すると、所定のデータブロックが現時点で別のノード(ノード1~110b)によって所有されている場合に、所定のデータブロックに対するリード要求をノードから受信するホームノード(110a)を示す一般化されたシーケンス図の一実施形態が示されている。図示されている例では、上述した回路及びロジックには、同じ符号が付されている。例えば、ノード110a~110dが再度示されている。同様に、ノード110cはノード2として示されており、ノード110dはノード3として示されている。ノード110aはホームノードと呼ばれる。本明細書で提供されるシーケンス図は、説明を容易にするために提供され、イベントの正確な順序を示すことを意図するものではないことに留意されたい。むしろ、一部のイベントが同時に発生してもよく、異なる順序で発生してもよい。
【0030】
時間t0において、ホームノードは、ロック要求として処理されるリード要求をノード2(110c)から受信する。リード要求は、所定のデータブロックに対応するアドレスを示す。ホームノードは、ノード110bが、要求されたデータブロックの現時点でのオーナーである場合に、時間t0においてリード要求を受信する。例えば、オーナーノード(ノード1)は、そのローカルキャッシュに記憶された所定のデータブロックのコピーを有しており、ブロックのキャッシュコヒーレンシ状態の記憶された指標も有する。
【0031】
ホームノードは、時間t0において要求を受信したことに応じて、ディレクトリタイプのデータ構造を検索して、ノード1が、要求されたブロックに関する現時点でのオーナーノードであることを判別する。また、ホームノードは、所定のデータブロックに対して受信したリード要求のカウントを維持し、当該要求に応じてカウントをインクリメントする。様々な実施形態では、所定のデータブロックに対するリード要求が所定のデータブロックに対する前回の保留中のリード要求にヒットすると、ホームノードは、所定のデータブロックに対するリード要求のカウントをインクリメントする。ホームノードは、リード要求を受信し、カウントが所定の閾値に達していない場合、何れのノードが現在のオーナーであるかを判別することによって受信した要求を処理し、コマンドをオーナーノードに送信する。コマンドは、所定のデータブロックのコピーを要求ノード2に送信するように、オーナーノードに指示する。対照的に、ホームノードは、リード要求を受信し、カウントが閾値に達する(又は、達している)場合、異なる方法で所定のデータブロックに対する要求を処理する。例えば、ホームノードは、オーナーノードが所定のデータブロックのコピーを要求ノード2に転送することを要求するのではなく、自身が所定のデータブロックのコピーをローカル転送バッファから要求ノード2に送信することができる。
【0032】
以下により詳細に説明するように、ホームノードが、所定のデータブロックのコピーをそのローカル転送バッファに記憶するために、ホームノードは、最初に、所定のデータブロックのコピーをオーナーノードに要求する。いくつかの実施形態では、ホームノードによって維持されたカウントが閾値に達すると、ホームノードは、所定の閾値に達していることを示す指標を記憶する。例えば、記憶された指標は、所定のデータブロックに対する受信したリード要求を処理するために異なるモードが使用されることを示すフラグ(例えば、モードインジケータ)である。他の実施形態では、ホームノードは、所定の閾値に達しているかどうかを判別するために、要求を受信する毎にカウントを単にチェックする。かかる実施形態では、カウント自体と閾値との比較を用いてモードを決定する。いくつかの実施形態では、ホームノードは、所定のデータブロックに対するライト要求又はロック解除要求を受信した場合に、カウントをリセットする。
図2に示す例では、所定のデータブロックに関するカウントは、時間t0においてリード要求を受信する場合に、所与の閾値に達している。また、ホームノードは、上述した転送バッファ160等の転送バッファを検索して、要求されたデータブロックのコピーを有しているかどうかを判別するように構成されている。いくつかの実施形態では、ホームノードは、最初に、ディレクトリを検索する前に転送バッファを検索する。
【0033】
時間t1において、ホームノードは、所定のデータブロックのコピーをホームノードに送信するようにオーナーノードに指示するコマンドを、オーナーノードに送信する。また、ホームノードから送信されたコマンドは、データブロックのコピーに関する「所有」のキャッシュコヒーレンシ状態を記憶するように、オーナーノードに指示する。
【0034】
時間t2において、オーナーノードは、所定のデータブロックのコピーをホームノードに送信する。この場合、オーナーノードは、データブロックのコピーを要求ノード(ノード2)に送信しない。時間t3において、ホームノードは、所定のデータブロックのコピーを受信し、当該コピーを転送バッファ(例えば、上述した転送バッファ160)に記憶する。転送バッファは、様々な記憶場所のうち何れかの記憶場所であってもよいことに留意されたい。例えば、一実施形態では、転送バッファは、転送するために値を記憶するように割り当てられたキャッシュの一部であってもよい。或いは、別の実施形態では、転送バッファは、転送するために値を記憶するように割り当てられたレジスタのセットであってもよい。さらに、転送バッファは、ランダムアクセスメモリ(RAM)データ構造、コンテンツアドレス可能メモリ(CAM)データ構造等として実装されてもよい。いくつかの実施形態では、所定のデータブロックは、上述したメモリ130a等のシステムメモリに未だ書き戻されていない。他の実施形態では、所定のデータブロックは、コピーが転送バッファに残っている間にシステムメモリに書き戻される。
【0035】
時間t4において、ホームノードは、受信したデータブロックのコピーをノード2に送信する。時間t5において、ノード2は、キャッシュコヒーレンシプロトコル(例えば、MOESI)の共有(S)コヒーレンシ状態で、所定のデータブロックのコピーを(そのローカルキャッシュの1つに)記憶する。時間t6において、ノード2は、所定のデータブロックのデータを検査し、ロックビットがリセットされた(すなわち、データがロックされていない)ことを検出する。したがって、所定のデータブロックはロック可能であり、ノード2は、所定のデータブロックのデータを変更して、ロックを設定する。上述したように、いくつかの実施形態では、ロックを設定することは、所定のデータブロックのデータ内のロックビットをアサートすることを含む。或いは、他の実施形態では、ロックを設定することは、ロックの設定を示すために、所定のデータブロックのデータ内のロックビットを変更することを含む。ここで、所定のデータブロックが現在ロックされているとみなされる。
【0036】
時間t7において、ノード3は、データブロックに対するリード要求をホームノードに送信する。再度、ホームノードは要求を受信し、ホームノードが現時点で所定のデータブロックを所有していないが、オーナーノードが現時点で所定のデータブロックを所有していることを判別する。時間t8において、ホームノードは、所定のデータブロックのコピーを、その転送バッファから、所定のデータブロックを要求したノード3に送信する。時間t9において、ノード3は、所定のデータブロックのコピーを、共有(S)コヒーレンシ状態のローカルキャッシュの1つに記憶する。時間t10において、ノード3は、所定のデータブロックのデータを検査し、ロックビットが設定されていることを検出する。ノード3は、所定のデータブロックがロックされている間、当該所定のデータブロックを使用することができない。したがって、ノード3は、データを使用することを待機している間、所定のデータブロックのデータを定期的に再チェックする。様々な実施形態では、ノードは、データブロックがローカルキャッシュに記憶される前に、データのロックビットを検査することに留意されたい。
【0037】
1つ以上の追加ノードが、要求(ロックリード要求又は単なるリード要求)を所定のデータブロックに関するホームノードに送信した場合、ホームノードは、ブロックのコピーを、その転送バッファから各要求元に伝える。したがって、ホームノードは、受信した要求に関してオーナーノードと通信しない。その後、オーナーノードは、所定のデータブロックをホームノードに書き戻し、オーナーノードに記憶されたコピーを無効にする。
【0038】
上述したように、アクセス要求のカウントは、ホームノードによって維持される。様々な実施形態では、所定のデータブロックに対応するライト要求又はロック解除要求がホームノードで受信されると、所定のデータブロックに対するリード要求のカウントがリセットされる。また、オーナーノードは、かかる動作が未だ発生していない場合、所定のデータブロックをホームノードに戻すように指示され、これにより、ホームノードは、要求された変更を行い、更新された所定のデータブロックのコピーを、そのシステムメモリ(例えば、コンピューティングシステム100内の上述したメモリ130a等)に記憶する。
【0039】
次に、
図3を参照すると、メモリコントローラ200の一実施形態が示されている。メモリコントローラ200は、複数のソース(例えば、ホームノード以外のノードからの複数のスレッド等)からの同一の所定のアドレスに対する一連のリード要求を処理する上述したシーケンスステップを実施するために使用される。例えば、メモリコントローラ200は、特定の条件が満たされた場合に、所定のブロックを転送バッファに記憶するために使用される。また、メモリコントローラ200は、コピーを要求ノードに転送するようにオーナーノードに指示するのではなく、所定のブロックを転送バッファから要求ノードに直接送信する。ホームノードからの直接転送は、所定のブロックのコピーを要求ノードに送信するのに使用されるホップ又は中間ノードの数を低減させる。
【0040】
図3の実施形態では、メモリコントローラ200は、パケットインタフェース210と、要求キュー220と、メモリアクセス制御ロジック230と、コヒーレンシ制御ロジック240と、カウンタ242と、転送バッファ250と、を含む。パケットインタフェース210は、ネットワーク又は他のインタフェースを介して、他のノードからコマンドパケットを受信する。いくつかの実施形態では、パケットインタフェース210は、他のノードと通信するために使用されるネットワークインタフェース又は別のインタフェース内に含まれる。
【0041】
パケットインタフェース210は、受信したコマンドパケットを要求キュー220に送信するように接続されている。コマンドパケットによって示されるアドレスが、メモリコントローラ200に関連するメモリ内のメモリ位置に対応する場合には、コマンドパケットは、メモリコントローラ200に送られる。換言すると、コマンドパケットのアドレスが、メモリコントローラ200に接続されたメモリ内に記憶されたブロックをアドレス指定する場合に、コマンドパケットは、メモリコントローラ200に送られる。要求キュー220に記憶された各々のパケットが処理されると、応答パケットが準備される。この場合、パケットインタフェース210は、応答パケットを他のノードにも送信する。
【0042】
メモリコントローラ200は、コマンドパケット情報を受信すると、コマンドパケット情報を要求キュー220にキューイングし、当該コマンドを処理する。パケットを受信したことに応じて、要求キュー220の利用可能なエントリが、受信したパケットに割り当てられる。図示するように、各エントリは、ノード識別子(ID)と、スレッドIDと、コマンドの指標と、コマンドに対応するアドレスと、期間(age)(例えば、受信時間)指標と、状態情報と、のうち1つ以上を記憶する。
【0043】
要求キュー220の状態情報は、データサイズと、有効なエントリの指標と、コマンドの優先レベルと、対応するコマンドの結果データを記憶するフィールドと、結果データを記憶する別のキューの位置を識別するポインタと、コマンドの処理が成功したかどうかの指標等と、のうち1つ以上を含む。要求キュー220のエントリ内のフィールドは、特定の順序で連続して記憶されるように示されているが、他の記憶構成の組み合わせも可能であり、想到される。
【0044】
いくつかの実施形態では、全てのコマンドパケットは、これらの受信順に処理される。他の実施形態では、パケットの順序処理は、同じアドレスを対象とするコマンドパケットに要求される。この場合、異なるアドレスを対象とするパケットは、これらのパケットに対して順不同に処理されてもよい。また、他の実施形態では、コマンドパケットは、優先レベルと、コマンドタイプと、キューのタイムスタンプ又は位置等の期間(age)の指標と、アドレスと、データサイズと、スレッドIDと、ノードID等と、のうち1つ以上によって決定された順序で処理される。
【0045】
メモリアクセス制御ロジック230は、要求キュー220と、メモリコントローラに接続されたメモリとの各々とインタフェースするロジック及び記憶レジスタを含む。例えば、メモリコントローラ200が、上述したノード110aのメモリコントローラ120aである場合、メモリはメモリ130aである。メモリアクセス制御ロジック230は、関連するコヒーレンシ動作が送信され、任意の応答を他のノードから受信した後に、コマンドを実行する。コマンドがリード動作である場合、データは、メモリから戻され、特定の条件を満たす場合にパケットインタフェース210、要求キュー220、転送バッファ250、又は、結果データを記憶するために指定された別のキュー(図示省略)のうち1つの応答パケットに記憶される。メモリアクセス制御ロジック230内のロジックは、ハードウェア、ファームウェア等のソフトウェア、又は、これらの組み合わせで実装されることに留意されたい。
【0046】
コヒーレンシ制御ロジック240は、要求キュー220と、プローブを他のノードに向けるのに使用される任意のディレクトリタイプ構造と、関連するノードのキャッシュメモリサブシステムと、転送バッファ250と、の各々とインタフェースする論理レジスタ及び記憶レジスタを含む。コヒーレンシ制御ロジック240内の任意のロジックは、メモリアクセス制御ロジック230と同様に、ハードウェア、ファームウェア等のソフトウェア、又は、これらの組み合わせで実装される。
【0047】
コヒーレンシ制御ロジック240は、要求キュー220に記憶されたコマンドパケットが、キャッシュコヒーレンシプロトコルに従ってコヒーレントに処理されることを確実にするように構成されている。所定のコマンドにプローブが必要である場合、コヒーレンシ制御ロジック240は、対応する指標をパケットインタフェース210に送信する。例えば、当該指標には、対応するコマンドのソースノード、アドレス、コマンドタイプ、及び、他の情報が含まれる。パケットインタフェース210は、プローブの指標をコヒーレンシ制御ロジック240から受信したことに応じて、プローブコマンドを送信する。また、コヒーレンシ制御ロジック240は、対応するトランザクションが完了していることを示すパケットをパケットインタフェース210から受信し、ライトコマンドに対するプローブ応答を受信する。
【0048】
上述したように、様々な実施形態では、ノードは、何れのアドレスが何れのシステムメモリにマッピングされているか(ひいては、特定のアドレスに対するメモリ要求がルーティングされるコンピューティングシステム100内のノードのうち何れのノードにマッピングされるか)を決定するために使用されるディレクトリを含む。ディレクトリは、複数のエントリを含み、メモリマップを含み、又は、メモリマップと組み合わせて使用される。所定のブロックに対するディレクトリ内の割り当てられたエントリは、メモリ内の所定のブロックがキャッシュに記憶されたコピーを有することを示す。キャッシュは、同じノード内又は別のノード内にある。ディレクトリ内の割り当てられたエントリは、所定のブロックのキャッシュコヒーレンシ状態(例えば、所定のブロックのオーナー、所定のブロックが所定のモードで変更されたかどうか、及び/又は、所定のブロックのコピーを共有しているノード等)を示す。
【0049】
様々な実施形態では、ディレクトリ内に割り当てられたエントリ及び共有(S)コヒーレンシ状態を有する所定のブロックに対応するリード動作は、所定のブロックの他のコピーを無効にするプローブコマンドを必要としない。しかしながら、Sコヒーレンシ状態を有する所定のブロックのライト動作は、他の処理ノードにおける他のコピーの無効化を生じさせるプローブコマンドを必要とする。したがって、ディレクトリ及びコヒーレンシ制御ロジック240は、このシナリオを検出し、適切なプローブを生成して、パケットインタフェース210を介して送信するように構成されている。ディレクトリ内に割り当てられたエントリを有する所定のブロックのコヒーレンシ状態を有するリード動作及びライト動作の他のシナリオも可能であり、想到される。いくつかの実施形態では、ディレクトリ内に割り当てられたエントリが存在しないことは、所定のブロックがディレクトリと同じノード内のキャッシュに記憶されていないことを意味する。
【0050】
図示するように、コヒーレンシ制御ロジック240は、1つ以上のカウンタ242を含む。様々な実施形態では、カウンタ242は、ゼロにリセットされ、要求キュー220に記憶された受信したリード要求に対応する所定のアドレスに割り当てられる。カウンタ242の割り当てられたカウンタは、所定のアドレスに対する後続のリード要求毎にインクリメントされる。例えば、要求キュー220に示された第2エントリは、アドレス0x100に対するロックリード要求を記憶する。アドレスの「0x」は16進値を示す。図示するように、ロックリード要求は、ノード2で処理されるスレッド58からのものである。要求キュー220の第3エントリは、アドレス0x100に対するロックリード要求を記憶する。この後続のリード要求は、ノード3で処理されるスレッド14からのものである。
【0051】
いくつかの実施形態では、アドレス0x100に割り当てられたカウンタ242の所定のカウンタは、ノード2からの第2リード要求が受信されたときにインクリメントされる。当該カウンタは、アドレス0x100に対する後続のリード要求毎にインクリメントされる。当該カウンタは、アドレス0x100に対するライト要求又はロック解除要求が受信されたときに、アドレス0x100に関してリセット及び/又は無効化される。例えば、要求キュー220の第1エントリの第1リード要求は、ロックを解除する排他的なリード要求である。このリード要求の検出に応じて、アドレス0x100に関するカウンタがリセットされる。要求キュー220の第2エントリの第2リード要求がアドレス0x100に対して検出されると、カウンタがアドレス0x100に割り当てられ、0に設定されるか、又は、1にインクリメントされる。
【0052】
要求キュー220の第3エントリの第3要求がアドレス0x100に対して検出されると、カウンタ242の割り当てられたカウンタがインクリメントされる。アドレス0x100に対する後続のリード要求又はロックリード要求毎に、割り当てられたカウンタがインクリメントされる。いくつかの実施形態では、カウンタは、重複しない(non-overlapping)カウンタである。
【0053】
要求キュー220の最後のエントリのリード要求は、ロックを解除するための別の排他的リード要求である。このリード要求を検出したことに応じて、アドレス0x100に関するカウンタがリセットされる。この特定のリード要求が到着する前に、カウンタ242の割り当てられたカウンタは、比較的高い数に達する。例えば、64ほどのスレッドが、アドレス0x100に対応するリード要求又はロック解除要求をメモリコントローラ200に送信した可能性がある。メモリコントローラ200は、所定のカウンタが閾値を超える場合、割り当てられたアドレス(上記の例では、アドレス0x100等)に対応するリード要求の処理を変更する。様々な実施形態では、閾値はプログラム可能な値である。メモリコントローラ200は、カウンタが閾値を超えると、
図2において上述したシーケンスステップを使用する。例えば、当該ノード内のメモリコントローラ200は、アドレス0x100に対応するブロックのコピーを転送バッファ250に記憶する。転送バッファ250は、複数のエントリを含む。転送バッファの各エントリは、アドレスの指標と、アドレスに対応するブロックのコピー又はブロックのデータを記憶する別のキューの位置を識別するポインタと、状態情報と、のうち1つ以上を含む。状態情報は、有効なエントリの指標と、データの優先レベル等と、のうち1つ以上を含む。アドレスに対応するブロックのコピーが転送バッファ250のエントリに記憶される場合、当該ブロック内のデータはロックの指標も含む。当該指標は、エントリにおいて「L」として示される。
【0054】
メモリコントローラ200は、ディレクトリを使用して、所定のブロックのコピーがホームノードにあるのか、又は、別のノードにあるのかを判別する。メモリコントローラ200は、この判別に基づいて、メモリコントローラ200に接続されたシステムメモリ又は他のノードから、エントリを転送バッファに割り当てる。いくつかの実施形態では、別のノードが転送バッファを満たすために使用される場合、他のノードは、所定のブロックのキャッシュされたコピーのキャッシュコヒーレンシ状態を所有(O)コヒーレンシ状態に変更するように指示される。リード要求及びロックリード要求が受信され、要求キュー220に記憶される場合、これらの要求は、転送バッファ250から直接供給される。要求ノードは、各々のキャッシュメモリサブシステムの共有(S)コヒーレンシ状態で、所定のブロックのコピーを転送バッファ250からインストールするように指示される。
【0055】
ここで、
図4を参照すると、ホームノードへの複数のリード要求を処理するために使用されるシーケンス図の別の実施形態を示す一般化されたブロック図が示されている。上述した回路及びロジックには、同じ符号が付されている。図示するように、ノード1が事前に所定のブロックを所有し、所定のブロックをロックしたときの一連のステップを使用するが、ノード1は、ロック状態の所定のブロックを使用する動作を終了し、所定のブロックのロックを解除する準備をする。時間t0において、ノード1は、要求をホームノードに送信する。要求は、所定のブロックに対する排他的アクセスに関するリード要求である。排他的アクセスは、ノード1が所定のブロック内でデータを変更し、ロックをリセットするのを可能にする。
【0056】
時間t1において、ホームノードは、所定のブロックについて別のオーナーが存在しないことを判別する。例えば、ホームノードは、ディレクトリを検索し、所定のブロックのアドレスに関する割り当てられたエントリが存在しないことを検出する(当該割り当てられたエントリは、所定のブロックが、所有状態のローカルキャッシュ又はリモートキャッシュに記憶されていないことを示す)。或いは、ホームノードは、ディレクトリ内の割り当てられたエントリ(所定のブロックの1つ以上のコピーが、共有(S)コヒーレンシ状態の他のノード内のキャッシュに記憶されていることを示す)を検出してもよい。結果として、時間t2~t3において、ホームノードは、DRAM等のメモリにアクセスして、所定のブロックのコピーを取得する。
【0057】
他の例では、ホームノードが、所定のブロックのコピーが所有(O)又は独占(E)コヒーレンシ状態で別のノードに存在することを判別した場合、及び、ホームノードが、所定のデータブロックに対するリード要求のカウントが未だ閾値を超えていないことを判別した場合、ホームノードは、コピーをホームノードに送信し、他のノードでローカルコピーを無効にするように、他のノードに指示することに留意されたい。
【0058】
時間t4において、ホームノードは、ノード1が所定のブロックのオーナーノードである指標を記憶する。当該指標は、ディレクトリの割り当てられたエントリに記憶される。時間t5において、ホームノードは、所定のブロックのコピーを要求ノード1に送信する。また、ホームノードは、コマンドパケットを、共有(S)状態のブロックのコピーと共にノード2~3等の他のノードに送信して、所定のブロックのコピーを無効にするように当該他のノードに指示する。
【0059】
時間t6において、ノード1は、所定のブロックのコピーを、排他的(E)コヒーレンシ状態のローカルキャッシュにインストールし、データを変更してロックをリセットする。例えば、ノード1は、所定のブロックのデータ内のロック指標をアサート停止することができる。また、ノード1は、コヒーレンシ状態を排他的(E)から変更(M)に変更する。さらに、ノード2及び3についても、ブロックの状態を「共有」から「無効」に変更する。
【0060】
ここで、
図5を参照すると、ホームノードへの複数のリード要求を処理するために使用されるシーケンス図が示されている。図示するように、時間t7~t13における一連のステップは、
図4において上述した時間t0~t6における一連のステップ後に使用される。上述した回路及びロジックには、同じ符号が付されている。
【0061】
時間t7において、一連のロックリード要求がホームノードに送信される。図示するように、ノード2及び3は、ロックリード要求をホームノードに送信し、
図4の時間t6の上述したステップで無効にされたブロックへのアクセスを得る。2つのノードのみがロックリード要求を送信していることが示されているが、他の実施形態では、コンピューティングシステムにおいて他のいくつかのノードが使用され、ロックリード要求がホームノードに送信される。
【0062】
時間t8において、ホームノード110aは、受信したロックリード要求を記憶する。例えば、要求キューは、上述したような要求を記憶するために使用される。ロックリード要求が示されているが、ロックリード要求及び標準リード要求の任意の組み合わせを受信してもよい。上述したように、カウンタは、ブロックに対応する要求の数を追跡するために割り当てられている。図示した例では、ノード2からのロックリード要求は、所定のブロックに対する他の要求の前に受信される。時間t9において、ホームノードは、所定のブロックの所有権をノード1からノード2に更新する。また、いくつかの実施形態では、割り当てられたカウンタがインクリメントされる。
【0063】
時間t10において、ホームノードは、コマンドパケットをノード1に送信して、所定のブロックのコピーをノード2に送信するように、ノード1に指示する。時間t11において、ノード1は、受信したコマンドパケットを処理し、所定のブロックのコピーをノード2に送信する。時間t12において、ノード1は、所定のブロックのコピーを無効にし、ノード2は、所定のブロックのコピーを受信して、排他的(E)コヒーレンシ状態のローカルキャッシュにインストールする。時間t13において、ノード2は、所定のブロックのデータを読み出して、所定のブロックがロック解除されているか利用可能であることを検出する。
【0064】
図6を参照すると、複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図が示されている。上述した回路及びロジックには、同じ符号が付されている。図示するように、時間t14~t19における一連のステップは、
図5において上述した時間t8~t13における一連のステップ後に使用される。
【0065】
一連のロックリード要求を供給するために使用されるホップの数を減らすために、ロック要求及びロック解除要求の処理を変更する条件が満たされたことを判別した後に、時間t14~t19における一連のステップが使用される。1つ以上の標準リード要求は、ロックリード要求と混在する場合がある。
【0066】
受信したブロックがロックされていないこと(
図5の時間t13)を判別したことに応答して、ノード2は、所定のブロック内のロック指標を変更することによって、ロックを設定する。時間t14において、ノード2は、ブロックのデータ(ロック使用のみであってもよい)が変更されている場合に、所定のブロックのコヒーレンシ状態を排他的(E)から変更(M)に移行させる。次に、ホームノード内の要求キューの次のロックリード要求を処理する。次のロックリード要求は、ノード3からのものである。処理ノード3のロックリード要求(時間t7で受信したもの)を処理したことに応じて、時間t15において、ホームノードは、所定のブロックの所有権をノード2からノード3に更新する。いくつかの実施形態では、対応するアドレスの割り当てられたカウンタは、インクリメントされる。また、ホームノードが、割り当てられたカウンタがプログラム可能な閾値を未だ超えていなことを判別する。これに応じて、時間t16において、ホームノードは、コマンドパケットをノード2に送信して、所与のブロックのコピーをノード3に送信するように、ノード2に指示する。
【0067】
時間t17において、ノード2は、受信したコマンドパケットを処理し、所定のブロックのコピーをノード3に送信する。時間t18において、ノード2は、所定のブロックのコピーを無効にする。ノード3は、所定のブロックのコピーを受信して、排他的(E)コヒーレンシ状態のローカルキャッシュにインストールする。時間t19において、ノード3は、所定のブロックのデータを読み出して、所定のブロックがロックされているか利用不可能であることを検出する。これに応じて、ノード3は、所定のブロックのデータを未だ使用することができないので、待機する。
【0068】
ノード3からのロックリード要求の場合、要求を処理するために最低3ホップが使用される。第1ホップは、ロックリード要求をノード3からホームノードに送信するために使用される。第1ホップは、
図5の上述した時間t7に対応する。第2ホップは、コマンドパケットをホームノードからノード2に送信するために使用される。第2ホップは、上述した時間t16に対応する。第3ホップは、所定のブロックのコピーをノード2からノード3に送信するために使用される。第3ホップは、上述した時間t17に対応する。このプロトコルは、割り当てられたカウンタが設定可能な閾値を未だ超えていないシナリオに対応する。しかしながら、ホームノードの割り当てられたカウンタが閾値を超えると、ロックリード要求を処理するために使用されるホップの最小数は、3ホップから2ホップに減少する。
【0069】
様々な実施形態では、割り当てられたカウンタが閾値を超えると、ホームノードは、上述したように、所定のブロックのコピーを転送バッファに記憶する。要求キューに記憶されたロックリード要求を処理する場合、ホームノードは、所定のブロックのコピーを要求ノードに直接転送する。プローブ又はコマンドパケットは、他のノードに送信されて、所定のブロックのコピーを要求ノードに送信するように他のノードに指示することがない。例えば、ノード3に対するロックリード要求が、割り当てられたカウンタに対して、設定可能な閾値を超えさせた場合、ホームノードは、任意のステップでノード2を含まずに、所定のブロックのコピーをノード3に直接転送することができる。このように、第1ホップは、ロックリード要求をノード3からホームノードに送信するために依然として使用される。第1ホップは、
図4の上述したステップ8に対応する。しかしながら、第2ホップは、所定のブロックをホームノードの転送バッファからノード3に転送するために使用される。最小のホップ数として、3ホップではなく、2ホップが使用される。
【0070】
図7は、要求数がプログラム可能な閾値を満たしているか超えている場合に、複数ノードコンピューティングシステムにおいてリード要求及びライト要求を処理する実施形態を示している。上述した回路及びロジックには、同じ符号が付されている。図示するように、時間t37~t45における一連のステップは、
図4において上述した時間t0~t6における一連のステップ後に使用される。所定のブロックの共有されたコピーが他のノードで無効にされた後に、時間t37~t45における一連のステップが発生する。
【0071】
時間t37において、ホームノードは、一連のロックリード要求をノード2~3等の他のノードから受信する。図示するように、ノード2~3は、ロックリード要求をホームノードに送信して、
図4の時間t6の上述したステップで無効にされた所定のブロックのコピーへのアクセスを得る。また、オーナーノード(この例では、110b)は、所定のブロック内のデータを変更することによってロックをリセットし、コヒーレンシ状態を変更(M)に設定する。
【0072】
次に、時間t38において、ホームノードは、受信したロックリード要求を記憶する。所定のシナリオでは、所定のブロックに対応するアドレスに対する事前のリード要求は、所定のブロックのデータ内でロックをリセットする排他的リード要求であってもよい。このリード要求は、上述した時間t0~t6における一連のステップ中に処理されたものである。同じアドレスに対応する第2リード要求は、
図7に示すように、時間t37のノード2からのロックリード要求である。いくつかの実施形態では、このロックリード要求は、割り当てられたカウンタに対して、閾値を超えさせる。ここで、様々な実施形態では、ホームノードは、コマンドパケットをノード1に送信して、コマンドパケットをノード2に送信した後に所定のブロックのローカルコピーを無効にするようにノード1に指示するのではなく、異なるタイプのコマンドパケットを送信する。
【0073】
時間t39において、ホームノードは、コマンドをノード1に送信して、所定のブロックのコピーをノード2ではなくホームノードに送信するように、ノード1に指示する。時間t40において、ノード1は、受信したコマンドを処理し、所定のブロックのコヒーレンシ状態を変更(M)から所有(O)に移行する。時間t41において、ノード1は、所定のブロックのコピーをホームノードに送信する。時間t42において、ホームノードは、受信した所定のデータブロックのコピーを転送バッファに記憶する。
【0074】
ホームノードは、ノード1がオーナーノードであることを示すために、所定のブロックのディレクトリエントリを更新する。いくつかの実施形態では、ホームノードは、受信した所定のブロックのコピーを、上述したメモリ130a等のシステムメモリに書き込む。様々な実施形態では、ノード1がロックをリセットした後に所定のブロックを終了した場合、ノード1は、ノード1のローカルコピーが無効である(無効になっている)指標をホームノードに送信する。この場合、ホームノードは、ノード1がブロックを所有しているという指標をディレクトリに記憶しない。ノード1が所定のブロックのコピーで未だ終了していない場合、当該コピーを所有(O)コヒーレンシ状態で維持する。
【0075】
時間t43において、ホームノードは、所定のブロックのコピーを転送バッファからノード2に直接転送する。ノード2は、所定のブロックのコピーを受信する。ホームノードからパケットによって指示されるように、ノード2は、所定のブロックを、共有(S)コヒーレンシ状態のローカルキャッシュにインストールする。時間t44において、ノード2は、所定のブロックのデータを読み取り、所定のブロックがロック解除されているか利用可能であることを検出する。これに応じて、時間t45において、ノード2は、データを変更して、所定のブロックのデータ内でロックを設定する。次に、ノード2は、この変更を考慮して、所定のブロックのコヒーレンシ状態を排他的(E)から変更(M)に移行させる。
【0076】
図8は、
図7のステップ後の或る時点におけるロックリード要求の処理が示されている。図示するように、時間t46~t49における一連のステップは、
図7において上述した時間t37~t45における一連のステップ後に使用される。時間t46において、ホームノード内の要求キューの次のロックリード要求を処理する。次のロックリード要求は、ノード1~2からの事前のリード要求が既に処理されているので、ノード3からのものである。ノード1が所定のブロックのコピーを無効にしなかった場合、ホームノードは、ノード1が所定のブロックのオーナーノードであるという指標を維持する。この例では、割り当てられたカウンタが閾値を超えている。
【0077】
時間t46において、ホームノードは転送バッファにアクセスする。時間t47において、ホームノードは、所定のブロックのコピーを転送バッファからノード3に直接転送する。ノード3は、所定のブロックのコピーを受信し、ホームノードからのパケットによって指示されるように、時間t48において、ノード3は、所定のブロックを、共有(S)コヒーレンシ状態のローカルキャッシュにインストールする。時間t49において、ノード3は、所定のブロックのデータを読み取り、所定のブロックがロックされているか利用不可能であることを検出する。これに応じて、ノード3は、与えられたブロックのデータを未だ使用することができないため、待機する。
【0078】
ここで、
図9を参照すると、複数ノードコンピューティングシステムの一連のリード要求を処理するための方法900の一実施形態が示されている。説明目的のために、本実施形態のステップは、順番に示されている。しかしながら、他の実施形態では、いくつかのステップが示された順序と異なる順序で行われ、いくつかのステップが同時に実行され、いくつかのステップが他のステップと組み合わされ、いくつかのステップが実行されない。
【0079】
ブロック902では、複数ノードコンピューティングシステムのホームノードは、処理するリード要求を有していることを判別する。様々な実施形態では、ホームノードは、受信した要求を記憶する要求キューを含む。また、ホームノードは、所定のブロックに対するリード要求のカウントを維持するように構成されている。例えば、いくつかの実施形態では、カウントは、ブロックのターゲットアドレスに関連付けられており、ブロックに対する要求が受信されるとインクリメントされる。様々な実施形態では、アドレスに対応するライト要求又はロック解除要求が検出されると、カウントがリセットされる。
【0080】
図示した例では、アドレスに対するリード要求の閾値数を超えていない場合(条件付きブロック904)、ブロック906において、当該アドレスに対するリード要求のカウンタがインクリメントされる。ブロック908では、リード要求(又は、最も古い保留中のリード要求)が要求ノードについて処理される。いくつかの実施形態では、要求データが要求ノードに送信される。要求データは、ホームノードのローカルキャッシュから、ホームノードのシステムメモリから、又は、要求データのコピーを現時点で記憶している別のノードのキャッシュから取得される。後者の場合、コマンド(例えば、プローブ要求又は他のメッセージ)がホームノードから他のノードに送信され、データを要求ノードに転送するように他のノードに指示する。
【0081】
アドレスに対するリード要求の閾値数が満たされた場合(例えば、実施形態に応じて、閾値に等しいか超える場合)(条件付きブロック904)、及び、ホームノードの転送バッファにヒットが存在する場合(条件付きブロック910)、ブロック912において、要求データがバッファから要求ノードに転送される。ホームノードのバッファにミスがある場合(条件付きブロック910)、ブロック914において、ホームノードは、要求をオーナーノードに発行して、要求データを要求ノードに送信するのではなく、当該要求データをホームノードに送信する。ブロック916では、ホームノードは、要求データが戻るのを待機し、要求データが戻ると、当該データをホームノードの転送バッファに記憶する。その後、方法900の制御フローはブロック912に移行し、ホームノードは、データのコピーを要求ノードに転送する。
【0082】
ブロック930では、ホームノードは、それが処理するライト要求又はロック解除要求を有することを判別する。ブロック932では、ホームノードは、要求に対応するアドレスを決定し、もしあれば、データに対するリード要求のカウントをリセットする。ホームノードは、事前に、閾値を超えるカウントに起因して、データを、転送バッファから、アドレスに対応するリード要求に関する要求ノードに転送している場合がある。しかしながら、ホームノードは、カウントがリセットされると、アドレスに対応するリード要求のための転送バッファの使用をやめる。ブロック934では、ホームノードは、ライト要求又はロック解除要求を処理する。
【0083】
図10を参照すると、例示的な処理ノード1000の一実施形態が示されている。いくつかの実施形態では、処理ノード1000の図示された機能は、単一の集積回路に組み込まれる。処理ノード1000は、上述した複数ノードコンピューティングシステムの1つ以上のノードとして使用される。処理ノード1000は、1つ以上の処理ユニット1015を含み、処理ユニット1015の各々は、1つ以上のプロセッサコア1012と、関連するキャッシュメモリサブシステム1094と、を含む。様々な実施形態では、プロセッサコア1012は、汎用マイクロアーキテクチャを利用する。
【0084】
一実施形態では、プロセッサコア1012は、所定の汎用命令セットによって命令を実行するための回路を含む。例えば、SPARC(登録商標)命令セットアーキテクチャ(ISA)が選択される。或いは、x86、x86-64(登録商標)、Alpha(登録商標)、PowerPC(登録商標)、MIPS(登録商標)、PA-RISC(登録商標)、又は、他の命令セットアーキテクチャが選択される。概して、プロセッサコア1012は、データ及び命令に対して、複数のキャッシュメモリサブシステム1094の各々にアクセスする。要求されたブロックがキャッシュメモリサブシステム1094又は共有キャッシュメモリサブシステム1098において見つからない場合、リード要求が生成され、失われたブロックがマッピングされているノード内のメモリコントローラ1020に送信される。キャッシュメモリサブシステム1094は、各々のプロセッサコア1012内に統合される。キャッシュメモリサブシステム1094及び共有キャッシュメモリサブシステム1098の両方は、対応するキャッシュコントローラに接続されたキャッシュメモリを含む。
【0085】
また、処理ノード1000は、1つ以上の処理ユニット1070を含み、処理ユニット1070は、1つ以上のプロセッサコア1072と、データストレージバッファ1074と、を含む。様々な実施形態では、プロセッサコア1072は、プロセッサコア1012のミラー化されたシリコンイメージではない。むしろ、プロセッサコア1072は、プロセッサコア1012によって使用されるマイクロアーキテクチャとは異なるマイクロアーキテクチャを有することができる。いくつかの実施形態では、プロセッサコア1072は、計算集約型タスクに対して高い命令スループットを提供するマイクロアーキテクチャを含む。いくつかの実施形態では、プロセッサコア1072は、並列アーキテクチャを有する。例えば、いくつかの実施形態では、プロセッサコア1072は、単一命令複数データ(SIMD)ベースコアである。SIMDコアの例には、グラフィックス処理ユニット(GPU)、デジタル信号処理(DSP)等が含まれる。一実施形態では、処理ノード1000は、単一命令セットアーキテクチャ(ISA)を含む。
【0086】
ソフトアプリケーションのスレッドは、各スレッドがプロセッサコア1012,1072のランタイムハードウェアリソースに少なくとも部分的に基づいて最高の命令スループットを有するように、プロセッサコア1012,1072のうち1つにスケジュールされる。いくつかの実施形態では、処理ユニット1070は、グラフィックス処理ユニット(GPU)である。従来のGPUは、かなり多くのタイプの単一命令複数データ(SIMD)を利用して、高度なデータ並列アプリケーションにおいて高いスループットを実現している。各オブジェクトは、他のオブジェクトから独立して処理されるが、同じシーケンスの動作が使用される。
【0087】
一実施形態では、ユニット1070は、マザーボード上で一体化されている。別の実施形態では、処理ノード1000の図示された機能は、単一の集積回路に組み込まれる。かかる実施形態では、ユニット1015(CPU)及びユニット1070(GPU)の各々は、異なる設計中心(design centers)からの独自のコアである。また、GPU1070は、インタフェース1040を介しメモリアクセスをオフチップで行うのではなく、処理ノード1000からメモリコントローラ120を介してローカルメモリ1094,1098及びメインメモリに直接アクセスすることができる。本実施形態は、GPU1070のメモリアクセスのレイテンシを低下させることができ、これを高性能に変換することができる。
【0088】
概して、パケット処理ロジック1016は、処理ノード1000が接続されたリンクで受信された制御パケットに応答して、プロセッサコア1012,1072及び/又はキャッシュメモリサブシステム1094に応じて制御パケットを生成し、供給のためにメモリコントローラ1020によって選択されたトランザクションに応じてプローブコマンド及び応答パケットを生成し、ノード1000が中間ノードであるパケットを、インタフェースロジック1040を介して他のノードにルーティングする、ように構成されている。いくつかの実施形態では、パケット処理ロジック1016は、クロスバースイッチと呼ばれる場合がある。
【0089】
インタフェースロジック1040は、パケットを受信し、パケット処理ロジック1016によって使用される内部クロックにパケットを同期させるロジックを含む。また、インタフェースロジック1040は、1つ以上の入出力(I/O)デバイス(1082)と通信するロジックを含む。いくつかの実施形態では、インタフェースロジック1040は、パケット処理ロジック1016やクロスバースイッチ又は他のコンポーネントを利用することなく、外部デバイスと直接通信する。例えば、ネットワークメッセージは、ユニット1015とネットワークインタフェースカード1080との間で直接伝達され、ユニット1070とネットワークインタフェースカード1080との間でも同様に直接伝達される。
【0090】
図示した実施形態では、インタフェースロジック1040は、USB(Universal Serial Bus)インタフェース、ストレージデバイスに対するシリアルATAバスインタフェース、PCIエクスプレスPCIe(Peripheral Component Interconnect Express)シリアル拡張バスインタフェース、ローピンカウント(LPC)バス、ピアツーピア(P2P)のダイレクトメモリアクセス(DMA)コントローラ等を少なくとも含む。他の実施形態は、上述した1つ以上のものを除外し、及び/又は、他のデバイス若しくは技術を含むことができる。
【0091】
処理ノード1000は、ネットワークインタフェースカード(NIC)1080に接続されている。NIC1080は、ネットワークを介して他の処理ノードと通信するための回路及びロジックを含む。例えば、NIC1080は、イーサネット(登録商標)、ファイバーチャネル、Wi-Fi(登録商標)又はトークンリング等の物理層又はデータリンク層規格と通信するロジックを利用する。NIC1080は、同じローカルエリアネットワーク(LAN)上のコンピュータによって近くのグループとの通信を可能にする。また、NIC1080は、ネットワークを介して他のノードとの通信を可能にする。NIC1080は、アプリケーション層に関するHTTPプロトコル、トランスポート層に関するTCPプロトコル、インターネット層に関するIPプロトコル、データリンク層に関するイーサネット(登録商標)プロトコル、物理層に関するIEEE802.3u等のネットワークプロトコルスタックを含む。
【0092】
上記の1つ以上の実施形態はソフトウェアを含むことに留意されたい。かかる実施形態では、方法及び/又は機構を実施するプログラム命令は、コンピュータ可読媒体に伝達又は記憶される。プログラム命令を記憶するように構成された多くのタイプの媒体が利用可能であり、この媒体には、ハードディスク、フロッピー(登録商標)ディスク、CD-ROM、DVD、フラッシュメモリ、プログラム可能ROM(PROM)、ランダムアクセスメモリ(RAM)、及び、他の形態の揮発性又は不揮発性ストレージが含まれる。一般的に、コンピュータアクセス可能記憶媒体は、命令及び/又はデータをコンピュータに提供するために、使用中にコンピュータがアクセス可能な任意の記憶媒体を含む。例えば、コンピュータアクセス可能記憶媒体は、磁気又は光学媒体等(例えば、ディスク(固定又は取り外し可能)、テープ、CD-ROM、DVD-ROM、CD-R、CD-RW、DVD-R、DVD-RW、Blu-Ray(登録商標)等)の記憶媒体を含むことができる。また、記憶媒体は、揮発性又は不揮発性メモリ媒体(例えば、RAM(例えば、同期ダイナミックRAM(SDRAM)、ダブルデータレート(DDR、DDR2、DDR3等)SDRAM、低電力DDR(LPDDR2等)SDRAM、Rambus社DRAM(RDRAM)、スタティックRAM(SRAM)等)、ROM、フラッシュメモリ、例えばユニバーサルシリアルバス(USB)インタフェース等の周辺インタフェースを介してアクセス可能な不揮発性メモリ(例えば、フラッシュメモリ)等)を含むことができる。記憶媒体は、微小電気機械システム(MEMS)や、ネットワーク及び/又は無線リンク等の通信媒体を介してアクセス可能な記憶媒体等を含む。
【0093】
また、様々な実施形態では、プログラム命令は、C言語等の高水準プログラミング言語や、例えばVerilog、VHDL等の設計言語(HDL)や、例えばGDSIIストリーム形式(GDSII)等のデータベースフォーマットにおける、ハードウェア機能の動作レベル記述又はレジスタ転送レベル(RTL)記述を含む。場合によっては、記述は、合成ツールによって読み取られ、この合成ツールは、記述を合成して、合成ライブラリからゲートのリストを含むネットリストを生成する。ネットリストには、システムを含むハードウェアの機能を表すゲートのセットが含まれている。次に、当該ネットリストは、マスクに適用される幾何学的形状を記述するデータセットを生成するように配置され、配線される。次に、このマスクは、システムに対応する半導体回路を製造するために様々な半導体製造工程で使用される。或いは、コンピュータアクセス可能な記憶媒体の命令は、必要に応じて、ネットリスト(合成ライブラリ有り又は無し)であってもよいし、データセットであってもよい。また、命令は、Cadence(登録商標)、EVE(登録商標)及びMentor Graphics(登録商標)等のベンダから入手可能なハードウェアベースのエミュレータによるエミュレーション目的で利用される。
【0094】
上記の実施形態がかなり詳細に説明されているが、上記の開示が十分に理解されると、当業者は、多くの変形及び修正が明らかになる。以下の特許請求の範囲は、かかる変形及び修正の全てを包含すると解釈されることが意図される。