(57)【要約】複数ノード間のネットワークトラフィック管理のためのシステム及び方法が説明される。コンピューティングシステムは、互いに接続された複数のノードを含む。ホームノードは、ホームノードに割り当てられた所定のデータブロックに対するリードアクセスを要求するノードの数が閾値を超えており、所定のデータブロックのコピーがシステム内の複数ノードのうち第１ノードに既に記憶されていると判別した場合に、コマンドを第１ノードに送信する。このコマンドは、所定のデータブロックのコピーをホームノードに転送するように、第１ノードに指示する。次に、ホームノードは、所定のデータブロックのコピーを維持し、ホームノードが所定のデータブロックに対するライト要求又はロック解除要求を検出するまで、所定のデータブロックのコピーを他の要求ノードに転送する。【選択図】図２
2019526086.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータブロックを複数のノードのホームノードに記憶することと、
前記ホームノードにおいて、要求を第１ノードから受信することであって、前記要求は、前記複数のデータブロックの所定のデータブロックへのアクセスに関する要求である、ことと、
前記所定のデータブロックが現時点で第２ノードに記憶されていると判別したことに応じて、前記ホームノードが、前記所定のデータブロックのコピーを前記第２ノードに要求し、前記所定のデータブロックを前記第２ノードから受信したことに応じて、前記所定のデータブロックのコピーを前記ホームノードに記憶し、前記所定のデータブロックのコピーを前記ホームノードから前記第１ノードに転送することと、を含む、
方法。
【請求項２】
前記所定のデータブロックのコピーを、前記ホームノードから、前記複数のノードのうち前記所定のデータブロックを要求する何れかのノードに転送することを含む、
請求項１の方法。
【請求項３】
前記所定のデータブロックのコピーを要求することに応じて、前記第２ノードに記憶された前記所定のデータブロックのキャッシュコヒーレンシ状態を、所有を示すキャッシュコヒーレンシ状態に変更することを含む、
請求項１の方法。
【請求項４】
前記所定のデータブロックのコピーを転送することに応じて、前記所定のデータブロックを、共有を示すキャッシュコヒーレンシ状態の指標と共に、前記第１ノード、及び、前記複数のノードのうち前記ホームノードから前記所定のデータブロックの転送されたコピーを受信するノードの各々に記憶することを含む、
請求項１の方法。
【請求項５】
前記ホームノードにおいて、前記所定のデータブロックに対するリード要求数のカウントを維持することと、
前記所定のデータブロックのコピーを要求すること、前記所定のデータブロックのコピーを記憶すること、及び、前記所定のデータブロックのコピーを転送することは、前記カウントが閾値を超えていることを判別したことに応じて行われる、
請求項１の方法。
【請求項６】
１つ以上の前記リード要求は、前記所定のデータブロックへのアクセスを同期させるために使用されるロックリード要求である、
請求項５の方法。
【請求項７】
前記所定のデータブロックに対するライト要求又はロック解除要求の何れかを受信したことに応じて、前記カウントをリセットすることを含む、
請求項６の方法。
【請求項８】
前記ホームノードが、前記所定のデータブロックを、前記所定のデータブロックを要求するノードに対して前記所定のデータブロックのコピーを転送するのに使用されるバッファに記憶することであって、前記バッファは、前記ホームノードのシステムメモリから分離している、ことを含む、
請求項２の方法。
【請求項９】
複数のデータブロックを記憶するように構成されたホームノードと、
前記ホームノードに記憶されたデータブロックに対するアクセス要求を生成するように構成された第１ノードと、
前記ホームノードに記憶されたデータブロックに対するアクセス要求を生成するように構成された第２ノードと、を備え、
前記ホームノードは、
前記所定のデータブロックへのアクセスのための要求を前記第２ノードから受信したことと、前記所定のデータブロックが現時点で前記第１ノードに記憶されていると判別したことと、に応じて、
前記所定のデータブロックのコピーを前記第１ノードに要求し、
前記所定のデータブロックを前記第１ノードから受信したことに応じて、前記所定のデータブロックのコピーを前記ホームノードに記憶し、
前記所定のデータブロックのコピーを前記ホームノードから前記第２ノードに転送する、
ように構成されている、
コンピューティングシステム。
【請求項１０】
前記第１ノード及び前記第２ノードを含む複数のノードを備え、
前記ホームノードは、前記所定のデータブロックのコピーを、前記ホームノードから、前記複数のノードのうち前記所定のデータブロックを要求する何れかのノードに転送するように構成されている、
請求項９のコンピューティングシステム。
【請求項１１】
前記ホームノードは、前記所定のデータブロックのコピーを要求することに応じて、前記第１ノードに記憶された前記所定のデータブロックのキャッシュコヒーレンシ状態を、所有を示すキャッシュコヒーレンシ状態に変更するように構成されている、
請求項９のコンピューティングシステム。
【請求項１２】
前記ホームノードは、前記所定のデータブロックのコピーを転送することに応じて、前記所定のデータブロックを、共有を示すキャッシュコヒーレンシ状態の指標と共に、前記第２ノード、及び、前記複数のノードのうち前記ホームノードから前記所定のデータブロックの転送されたコピーを受信するノードの各々に記憶するように構成されている、
請求項９のコンピューティングシステム。
【請求項１３】
前記ホームノードは、
前記所定のデータブロックに対するリード要求数のカウントを維持し、
前記カウントが閾値を超えていることを判別したことに応じて、前記所定のデータブロックのコピーを要求することと、前記所定のデータブロックのコピーを記憶することと、前記所定のデータブロックのコピーを転送することと、を行うように構成されている、
請求項１０のコンピューティングシステム。
【請求項１４】
１つ以上の前記リード要求は、前記所定のデータブロックへのアクセスを同期させるために使用されるロックリード要求である、
請求項１３のコンピューティングシステム。
【請求項１５】
前記ホームノードは、前記所定のデータブロックに対応する所定のアドレスに対するライト要求又はロック解除要求の何れかを受信したことに応じて、前記カウントをリセットように構成されている、
請求項１４のコンピューティングシステム。
【請求項１６】
前記ホームノードは、前記所定のデータブロックを、前記所定のデータブロックを要求するノードに対して前記所定のデータブロックのコピーを転送するのに使用されるバッファに記憶するように構成されており、
前記バッファは、前記ホームノードのシステムメモリから分離している、
請求項１０のコンピューティングシステム。
【請求項１７】
プログラム命令を記憶するコンピュータ可読記憶媒体であって、前記プログラム命令は、プロセッサによって実行されると、
複数のデータブロックを複数のノードのホームノードに記憶することと、
前記ホームノードにおいて、要求を第１ノードから受信することであって、前記要求は、前記複数のデータブロックの所定のデータブロックへのアクセスに関する要求である、ことと、
前記所定のデータブロックが現時点で第２ノードに記憶されていると判別したことと、に応じて、前記ホームノードが、前記所定のデータブロックのコピーを前記第２ノードに要求し、前記所定のデータブロックを前記第２ノードから受信したことに応じて、前記所定のデータブロックのコピーを前記ホームノードに記憶し、前記所定のデータブロックのコピーを前記ホームノードから前記第１ノードに転送することと、
を前記プロセッサに行わせる、
コンピュータ可読記憶媒体。
【請求項１８】
前記プログラム命令は、前記所定のデータブロックのコピーを、前記ホームノードから、前記複数のノードのうち前記所定のデータブロックを要求する何れかのノードに転送することを前記プロセッサに行わせる、
請求項１７のコンピュータ可読記憶媒体。
【請求項１９】
前記プログラム命令は、
前記ホームノードにおいて、前記所定のデータブロックに対するリード要求数のカウントを維持することと、
前記カウントが閾値を超えていることを判別したことに応じて、前記所定のデータブロックのコピーを要求することと、前記所定のデータブロックのコピーを記憶することと、前記所定のデータブロックのコピーを転送することと、を行うことと、
を前記プロセッサに行わせる、
請求項１８のコンピュータ可読記憶媒体。
【請求項２０】
１つ以上の前記リード要求は、所定のアドレスに対応する前記所定のデータブロックへのアクセスを同期させるために使用されるロックリード要求であり、
前記プログラム命令は、前記所定のデータブロックに対応するライト要求又はロック解除要求の何れかを受信したことに応じて、前記カウントをリセットすることを前記プロセッサに行わせる、
請求項１９のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピューティングネットワークシステムに関し、より具体的には、複数のノード間の通信を管理することに関する。
【背景技術】
【０００２】
現在のマイクロプロセッサでは、１つ以上のプロセッサ及び／又はプロセッサコアがマイクロプロセッサ内に含まれ、各プロセッサは、スーパースカラパイプラインで命令を実行することができる。マイクロプロセッサは、データに対するマイクロプロセッサのレイテンシを短くするために、１つ以上のレベルのキャッシュ階層を含み、又は、当該キャッシュ階層に接続されている。また、コンピューティングシステムは、コンピューティング性能を向上させるために、多くの場合、１つ以上のマイクロプロセッサをそれぞれ有する複数のノードを含む。いくつかの場合、所定のデータブロックは、複数のノードの複数のキャッシュに記憶される。キャッシュされたコピーのうち１つが、他のノードでキャッシュされたコピーに関して１つのノードで変更されることがあるので、コンピューティングシステムは、所定のキャッシュコヒーレンシプロトコルに従ってキャッシュコヒーレンシを維持するように構成されている。様々な特定のコヒーレンシプロトコルがよく知られている。
【０００３】
かかるコヒーレンシプロトコルの多くは、システム内のノード間を通過するメッセージ、コマンド及び／又はプローブの使用を含む。いくつかの場合、メッセージは、メモリコントローラ等の所定のコヒーレンシポイントによって調整される。また、プローブは、所定のブロックへのアクセスを同期させるために使用される。ソフトウェアは、通常、データへのアクセスを同期させるためのロック機構を使用する。様々なシステムでは、多くのスレッドが、所定のデータブロックでロックを取得しようとする。このような場合、所定のブロックに関する特定のノード（例えば、ホームノード）は、所定のブロックに関するいくつかのロック取得要求を受信する。ホームノードは、かかる要求に応じて、概して、ロック取得要求を連続的に処理する。例えば、このような場合、第１スレッドは、所定のブロックに対するロックを取得することに成功する。第１スレッドが所定のブロックの処理を完了すると、第１スレッドは、ロックを解除するメッセージをノードに伝える。しかしながら、先に受信したロック取得要求が連続して処理されることに起因して、第１スレッドからのロック解除要求を、先の要求が処理されるまで処理することができない。したがって、ロックが解除される前に遅延が発生する。
【０００４】
上記に鑑みて、複数ノード処理システムにおける通信を管理するための効率的な方法及びシステムが望まれている。
【発明の概要】
【課題を解決するための手段】
【０００５】
複数のノード間の通信を管理するシステム及び方法が考えられる。様々な実施形態では、コンピューティングシステムは、互いに接続された複数の処理ノードを含む。各処理ノードは、１つ以上の処理コアと、１つ以上の対応するキャッシュメモリサブシステムと、を含む。複数のノードは、ホームノードに割り当てられた所定のデータブロックに対するリードアクセス要求を生成するように構成されている。ホームノード以外のノードは、ホームノードに割り当てられた所定のデータブロックに対して、現時点で、所定のデータブロックのコピーを記憶する。他のノードは、リードアクセス要求を所定のデータブロックに関するホームノードに送信する一方で、所定のデータブロックのコピーを有する。
【０００６】
ホームノードは、所定のデータブロックに対するリードアクセスを要求するいくつかのノードが閾値を超えており、所定のデータブロックのコピーが他のノードに記憶されていると判別した場合に、コマンドを第１ノードに送信する。第１ノードに送信されたコマンドは、所定のデータブロックのコピーをホームノードに転送するように第１ノードに指示する。また、第１ノードは、所定のデータブロックのコピーに関するキャッシュコヒーレンシ状態を、所有コヒーレンシ状態に変更するように指示される。
【０００７】
ホームノードは、コピーを受信したことに応じて、所定のデータブロックのコピーを、複数ノードのうち第２ノード等の要求ノードに転送する。また、第２ノードは、所定のデータブロックのコピーに関するキャッシュコヒーレンシ状態を、共有状態に変更するように指示される。ホームノードは、所定のデータブロックの変更を意図したライト要求又はリード要求を検出するまで、所定のデータブロックのコピーを他の要求ノードに転送し続ける。
【０００８】
これら及び他の実施形態は、以下の説明及び図面を参照することによってさらに理解されるであろう。
【図面の簡単な説明】
【０００９】
【図１】コンピューティングシステムの一実施形態の一般図である。
【図２】複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図の一実施形態の一般図である。
【図３】メモリコントローラの一実施形態の一般図である。
【図４】複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図の別の実施形態の一般図である。
【図５】複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図の別の実施形態の一般図である。
【図６】複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図の別の実施形態の一般図である。
【図７】複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図の別の実施形態の一般図である。
【図８】複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図の別の実施形態の一般図である。
【図９】複数ノードコンピューティングシステムの一連のリード要求を処理する方法の一実施形態の一般的なフロー図である。
【図１０】例示的な処理ノードの一実施形態の一般図である。
【発明を実施するための形態】
【００１０】
本発明は、様々な修正及び代替形態が可能であるが、具体的な実施形態を図面の例として示し、本明細書において詳細に説明する。しかしながら、図面及びその詳細な説明は、本発明を開示した特定の形態に限定するものではなく、むしろ、本発明は、添付の特許請求の範囲によって定義されるように、本発明の範囲内に含まれる全ての変更、均等物及び代替物を包含するものであることを理解されたい。
【００１１】
以下の説明では、本発明の完全な理解を提供するために、多くの具体的な詳細が述べられている。しかしながら、当業者は、本発明がこれらの具体的な詳細なしに実施され得ることを認識すべきである。場合によっては、本発明を不明瞭にすることを避けるために、周知の回路、構造及び技術が詳細に示されていない。また、説明を簡単且つ明瞭にするために、図面に示された要素が必ずしも縮尺通りに描かれていないことを理解されたい。例えば、いくつかの要素の寸法は、他の要素と比較して誇張されている。
【００１２】
図１を参照すると、コンピューティングシステム１００の一実施形態が示されている。コンピューティングシステム１００は、複数の処理ノード１１０ａ〜１１０ｄを含む。処理ノード１１０ａ〜１１０ｄは、ノード１１０ａ〜１１０ｄとも呼ばれる。４つのノードが図１に示されているが、他の実施形態では異なる数のノードを含み、各処理ノードは、１つ以上のプロセッサコアと、１つ以上の対応するキャッシュメモリサブシステムと、を含む。
【００１３】
ノード１１０ａ〜１１０ｄの各々は、メモリ１３０ａ〜１３０ｄの何れか１つに接続されている。処理ノード内のメモリコントローラ１２０ａ〜１２０ｄの各々は、処理ノードをメモリ１３０ａ〜１３０ｄの何れか１つに接続するために使用される。メモリコントローラ１２０ａ〜１２０ｄは、メモリ１３０ａ〜１３０ｄにインタフェースするための制御回路を含む。また、メモリコントローラ１２０ａ〜１２０ｄは、メモリ要求をキューイングするための要求キューを含む。メモリ１３０ａ〜１３０ｄは、任意の適切なメモリデバイスを含む。例えば、様々な実施形態では、メモリ１３０ａ〜１３０ｄの各々は、１つ以上のダイナミックランダムアクセス（ＤＲＡＭ）、同期型ＤＲＡＭ（ＳＤＲＡＭ）、スタティックＲＡＭ、デュアルインラインメモリ（ＤＩＭＭ）、ハードディスク、半導体ドライブ等を含む。
【００１４】
コンピューティングシステム１００のアドレス空間は、メモリ１３０ａ〜１３０ｄ間で分割される。処理ノード１１０ａ〜１１０ｄの各々は、どのアドレスがメモリ１３０ａ〜１３０ｄの何れか１つにマッピングされるか（ひいては、特定のアドレスに対するメモリ要求が処理ノード１１０ａ〜１１０ｄのうち何れの処理ノードにルーティングされるか）を判別するために使用されるメモリマップを含む。様々な実施形態では、コンピューティングシステム１００のアドレスに対するコヒーレンシポイントは、アドレスに対応するバイトを記憶するメモリ１３０ａ〜１３０ｄの何れか１つに接続されたノード１１０ａ〜１１０ｄの何れか１つの内部のメモリコントローラ１２０ａ〜１２０ｄの何れか１つである。しかしながら、他の実施形態では、異なるコンポーネントがコヒーレンシポイントとして機能するように構成されている。
【００１５】
処理ノード１１０ａ〜１１０ｄの各々は、処理ノード１１０ａ〜１１０ｄのうち他のノードと通信するインタフェースロジックを含む。また、処理ノード１１０ａ〜１１０ｄの各々は、１つ以上の入出力（Ｉ／Ｏ）デバイス及び／又はＩ／Ｏバスに接続されており、これらは説明を容易にするために図示されていない。様々な実施形態では、コンピューティングシステム１００は、ノード間通信に関するパケットベースリンクを実装する。図示された実施形態では、このリンクは、ノード１１０ａ〜１１０ｄ間の双方向ラインとして示されている。他の実施形態では、ノード１１０ａ〜１１０ｄのうち１つ以上のものは、ＬＡＮ、ＷＡＮ、ＷｉＦｉ（登録商標）接続、イーサネット（登録商標）、ファイバチャネル、インターネット等のネットワークを介して、ノード１１０ａ〜１１０ｄのうち他のノードに接続される。
【００１６】
リンクを介して送信されるパケットには、メッセージ、コマンド、要求及びプローブが含まれる。ノード１１０ａ〜１１０ｄ間のリンクは、キャッシュコヒーレント方式で動作する。処理ノード１１０ａ〜１１０ｄの各々は、処理ノード１１０ａ〜１１０ｄの全ての他のノードに直接接続されているように示されているが、他の実施形態では、他のノード全てに対して直接接続されていないことに留意されたい。かかる実施形態では、１つの処理ノードから他の処理ノードに送信されるパケットは、１つ以上の中間ノードを通過する。コンピューティングシステム１００は、パケットを送信するための任意の適切なフロー制御機構及びアルゴリズムを採用する。
【００１７】
様々な実施形態では、ノード１１０ａ〜１１０ｄの各々の内部の１つ以上のプロセッサは、データに対するプロセッサの要求のレイテンシを短くするために、１つ以上のレベルのキャッシュ階層に接続される。一般的に言えば、キャッシュは、１つ以上のデータブロックを記憶し、データブロックの各々は、システムメモリ内の対応するアドレスに記憶されたデータに対応する。本明細書で使用される「ブロック」は、コヒーレンシ目的のための単位として扱われ、連続するメモリ位置に記憶されたバイトのセットである。いくつかの実施形態では、ブロックは、キャッシュの割り当て及び割り当て解除の単位である。ブロックのバイト数は、デザインの選択に従って異なる。一例として、３２バイト及び６４バイトブロックが頻繁に使用される。本明細書で使用される「データブロック」、「キャッシュライン」及び「キャッシュブロック」という用語は、以下の様々な実施形態の説明において互換的に使用される。
【００１８】
コンピューティングシステム１００のアドレス空間がメモリ１３０ａ〜１３０ｄ間で分割されると、所定のデータブロックのアドレスは、ノード１１０ａ〜１１０ｄのうち特定の１つにマッピングされる。この特定のノードは、所定のデータブロックの「ホーム」ノードとみなされる。所定のデータブロックの有効なコピーがノード１１０ａ〜１１０ｄのうち別のノードで変更（Ｍ）、排他的（Ｅ）、所有（Ｏ）のコヒーレンシ状態で記憶される場合、この別のノードは、「オーナー」ノードと呼ばれる。例えば、所定のブロックのアドレスがノード１１０ａにマッピングされ、ノード１１０ａは、所定のブロックのホームノードとなる。一方、ノード１１０ｂが所定のブロックの排他的コピーを要求し、所定のブロックのコピーをメモリ１３０ｂに記憶する場合には、ノード１１０ｂは、所定のブロックのオーナーノードである。
【００１９】
様々な実施形態では、ノード１１０ａ〜１１０ｄのプロセッサによって実行される作業は１つ以上のプロセスに対応し、各プロセスは１つ以上のスレッドから構成されている。様々な実施形態では、コンピューティングシステム１００のリンクを介して送信されるパケットを、データブロックへのアクセスを同期させるために使用する。
【００２０】
様々な実施形態では、ロックの指標（例えば、データブロックが現時点でロック又はロック解除されているという指標）が、データブロックのデータ内に記憶される。いくつかの実施形態では、ロックの指標は、データブロックのデータ内のシングルビットである。他の実施形態では、ロックの指標は、データブロックのデータ内のバイトである。例えば、一実施形態では、テストアンドセット命令タイプと共にバイトが使用される。データブロックのデータ内のロックの指標に関する他のデータサイズも可能であり、想定されている。いくつかの実施形態では、ロックのオーナーの指標は、データブロックのデータ内に記憶される。他の実施形態では、ソフトウェア機構は、所定のブロック内のデータから外部のロックのオーナーを決定する。例えば、ソフトウェア機構は、他の場所に記憶されたスレッド識別子（ＩＤ）を使用して、ロックのオーナーを決定する。
【００２１】
上述したように、所定のブロックは、元々、ホームノードに割り当てられている。一例では、ノード１１０ａは、コンピューティングシステム１００内の所定のブロックのホームノードである。後に、ノード１１０ｂは、所定のブロックをノード１１０ａに要求する。いくつかの実施形態では、ノード１１０ｂからの要求は、キャッシュコヒーレンシプロトコルに従って、所定のブロックに対する要求されたキャッシュコヒーレンシ状態の指標を含む。
【００２２】
様々な実施形態では、ＭＯＥＳＩキャッシュコヒーレンシプロトコルがコンピューティングシステム１００で使用される。かかる実施形態では、コンピューティングシステム１００の各キャッシュラインは、５つのキャッシュライン状態のうち１つの状態にある。５つの状態は、変更（Ｍ）状態を含み、変更（Ｍ）状態は、キャッシュラインのコピーを記憶するキャッシュが、キャッシュラインの有効なコピーのみを有しており、コピーに対する変更が行われたことを示している。所有（Ｏ）状態は、キャッシュラインのコピーを記憶するキャッシュが、キャッシュラインの有効なコピーを有する複数のキャッシュのうち１つであるが、当該キャッシュは、キャッシュラインの当該コピーに対する変更を行う排他的権利を有することを示している。排他的（Ｅ）状態は、キャッシュラインのコピーを記憶するキャッシュが、キャッシュラインの有効なコピーのみを有しており、コピーに対する変更が行われなかったことを示している。共有（Ｓ）状態は、キャッシュラインのコピーを記憶するキャッシュが、キャッシュラインの有効なコピーを有する複数のキャッシュのうち１つであるが、当該キャッシュは、コピーを変更する許可を有していないことを示している。無効（Ｉ）状態は、キャッシュが、キャッシュラインの有効なコピーを記憶していないことを示している。
【００２３】
他の実施形態では、他のキャッシュコヒーレンシプロトコルがコンピューティングシステム１００で使用される。例えば、ＭＳＩ、ＭＥＳＩ、ＭＥＳＩＦ及びＭＯＥＳＩＦキャッシュコヒーレンシプロトコルがコンピューティングシステム１００で使用される。ＭＥＳＩＦ及びＭＯＥＳＩＦプロトコルは、キャッシュラインのコピーを記憶しているキャッシュが、所定のラインに対する要求の指定された応答部として機能していることを示す転送（Ｆ）状態を使用する。このプロトコルは、何れかのキャッシュが共有（Ｓ）状態のキャッシュラインを保持している場合、最大でも１つの他のキャッシュが転送（Ｆ）状態のキャッシュラインを保持することを保証にする。キャッシュコヒーレンシプロトコルの所有（Ｏ）状態を所有しない実施形態では、共有（Ｓ）状態が所定のブロックに使用される。一般的に言えば、本明細書で説明する方法及び機構は、特定のキャッシュコヒーレンシプロトコルに限定されない。
【００２４】
図１に示すように、所定のブロック内のデータは、ロック（Ｌ）の指標を含む。本明細書で使用するように、所定のブロックのデータ内でロックを設定することは、所定のブロックのデータ内にロックビットをアサートすること、所定のブロックのデータ内のロックを示すために使用されるバイトを、ロックセット又はロック状態を示す値に変更すること等を指す。同様に、所定のブロックのデータ内でロックをリセットすることは、所定のブロックのデータ内のロックビットをデアサートすること、所定のブロックのデータ内のロックを示すために使用されるバイトを、ロックリセット又はロック解除状態を示す値に変更すること等を指す。
【００２５】
ロックの指標が所定のブロック自体のデータ内にあるので、データのリードは、データがロックされているか否の指標も含む。このように、ロックの指標をリードするために、所定のブロックのデータがリードされる。言い換えれば、所定のブロックのデータのリードは、所定のブロックのデータ内のロックの指標を検査、チェック又は読み取るように行われる。ノード内のプロセッサが所定のブロックのデータ内のロックを設定又はリセットする場合、ノードが外部プローブ又は別のノードからの他のリード要求を処理する前に、変更動作が完了することが保証されていることを留意されたい。所定のブロック内のデータの内部変更と外部プローブ要求との間の順序付けを実施することにより、ライブロック状況が回避される。
【００２６】
様々な実施形態では、ロックを設定又はリセットする目的で特別な命令を含めることができない。むしろ、所定のブロック内のデータを変更すること（又は、変更する許可を得ること）に応じて、ロックを設定又はリセットすることが行われる。かかる要求には、要求を変更する意図を伴うライト要求、リード要求等が含まれる。したがって、かかる実施形態では、要求を変更する意図を伴うライト要求又はリード要求は、「ロック要求」とみなされる。他の実施形態では、ロックを設定又はリセットする目的で特別な命令を含めることができる。所定の実施形態では、何れか一方及び／又は両方が可能である。
【００２７】
いくつかの実施形態では、ノード１１０ｂからの所定のブロックに対する要求に関して、当該要求は、コヒーレンシプロトコルの変更（Ｍ）状態で、所定のブロックのコピーを受信する要求を（明示的又は暗黙的に）示す。図示するように、所定のデータブロックは、オーナーノード（ノード１１０ｂ）のローカルキャッシュ１５０に記憶されている。図示するように、データのブロックは、「値」によって示されるデータ値と、ロック指標「Ｌ」と、を含む。本実施形態では、ロックの指標は、所定のブロックのデータ内にある。１つのシナリオでは、オーナーノード（ノード１１０ｂ）は、ロックをリセット（解除）する準備ができており、これが、所定のブロックに対する排他的アクセスを要求した理由である。上述したように、ロックをリセットすることは、所定のブロックのデータ内のロックビットをデアサートし、所定のブロックのデータ内のロックを示すために使用されるバイトを、ロックリセット又はロック解除状態を示す値に変更すること等を含む。
【００２８】
所定のシナリオでは、所定のブロックに関するホームノード（ノード１１０ａ）は、所定のブロックが別のノードによって所有されている場合に、所定のブロックへのアクセスに関する１つ以上の要求を受信する。様々な実施形態では、アクセスに関する要求は、明示的又は黙示的なロック取得要求である。ホームノード（ノード１１０ａ）は、受信したロック取得要求に応じて、オーナーノード（ノード１１０ｂ）が所定のブロックのコピーをホームノードに戻すことを要求するように構成されている。ホームノード（ノード１１０ａ）は、転送バッファ１６０にエントリを割り当て、戻された所定のブロックのコピーを記憶する。図示するように、転送バッファ１６０はデータのコピーを含み、当該コピーは、「値」で示されるデータ値のコピーと、「Ｌ」で示されるロック指標のコピーと、を含む。ホームノード（ノード１１０ａ）は、転送バッファ１６０のデータのコピーを、所定のブロックへのアクセスを要求するノードの各々に転送する。
【００２９】
ここで、図２を参照すると、所定のデータブロックが現時点で別のノード（ノード１〜１１０ｂ）によって所有されている場合に、所定のデータブロックに対するリード要求をノードから受信するホームノード（１１０ａ）を示す一般化されたシーケンス図の一実施形態が示されている。図示されている例では、上述した回路及びロジックには、同じ符号が付されている。例えば、ノード１１０ａ〜１１０ｄが再度示されている。同様に、ノード１１０ｃはノード２として示されており、ノード１１０ｄはノード３として示されている。ノード１１０ａはホームノードと呼ばれる。本明細書で提供されるシーケンス図は、説明を容易にするために提供され、イベントの正確な順序を示すことを意図するものではないことに留意されたい。むしろ、一部のイベントが同時に発生してもよく、異なる順序で発生してもよい。
【００３０】
時間ｔ０において、ホームノードは、ロック要求として処理されるリード要求をノード２（１１０ｃ）から受信する。リード要求は、所定のデータブロックに対応するアドレスを示す。ホームノードは、ノード１１０ｂが、要求されたデータブロックの現時点でのオーナーである場合に、時間ｔ０においてリード要求を受信する。例えば、オーナーノード（ノード１）は、そのローカルキャッシュに記憶された所定のデータブロックのコピーを有しており、ブロックのキャッシュコヒーレンシ状態の記憶された指標も有する。
【００３１】
ホームノードは、時間ｔ０において要求を受信したことに応じて、ディレクトリタイプのデータ構造を検索して、ノード１が、要求されたブロックに関する現時点でのオーナーノードであることを判別する。また、ホームノードは、所定のデータブロックに対して受信したリード要求のカウントを維持し、当該要求に応じてカウントをインクリメントする。様々な実施形態では、所定のデータブロックに対するリード要求が所定のデータブロックに対する前回の保留中のリード要求にヒットすると、ホームノードは、所定のデータブロックに対するリード要求のカウントをインクリメントする。ホームノードは、リード要求を受信し、カウントが所定の閾値に達していない場合、何れのノードが現在のオーナーであるかを判別することによって受信した要求を処理し、コマンドをオーナーノードに送信する。コマンドは、所定のデータブロックのコピーを要求ノード２に送信するように、オーナーノードに指示する。対照的に、ホームノードは、リード要求を受信し、カウントが閾値に達する（又は、達している）場合、異なる方法で所定のデータブロックに対する要求を処理する。例えば、ホームノードは、オーナーノードが所定のデータブロックのコピーを要求ノード２に転送することを要求するのではなく、自身が所定のデータブロックのコピーをローカル転送バッファから要求ノード２に送信することができる。
【００３２】
以下により詳細に説明するように、ホームノードが、所定のデータブロックのコピーをそのローカル転送バッファに記憶するために、ホームノードは、最初に、所定のデータブロックのコピーをオーナーノードに要求する。いくつかの実施形態では、ホームノードによって維持されたカウントが閾値に達すると、ホームノードは、所定の閾値に達していることを示す指標を記憶する。例えば、記憶された指標は、所定のデータブロックに対する受信したリード要求を処理するために異なるモードが使用されることを示すフラグ（例えば、モードインジケータ）である。他の実施形態では、ホームノードは、所定の閾値に達しているかどうかを判別するために、要求を受信する毎にカウントを単にチェックする。かかる実施形態では、カウント自体と閾値との比較を用いてモードを決定する。いくつかの実施形態では、ホームノードは、所定のデータブロックに対するライト要求又はロック解除要求を受信した場合に、カウントをリセットする。図２に示す例では、所定のデータブロックに関するカウントは、時間ｔ０においてリード要求を受信する場合に、所与の閾値に達している。また、ホームノードは、上述した転送バッファ１６０等の転送バッファを検索して、要求されたデータブロックのコピーを有しているかどうかを判別するように構成されている。いくつかの実施形態では、ホームノードは、最初に、ディレクトリを検索する前に転送バッファを検索する。
【００３３】
時間ｔ１において、ホームノードは、所定のデータブロックのコピーをホームノードに送信するようにオーナーノードに指示するコマンドを、オーナーノードに送信する。また、ホームノードから送信されたコマンドは、データブロックのコピーに関する「所有」のキャッシュコヒーレンシ状態を記憶するように、オーナーノードに指示する。
【００３４】
時間ｔ２において、オーナーノードは、所定のデータブロックのコピーをホームノードに送信する。この場合、オーナーノードは、データブロックのコピーを要求ノード（ノード２）に送信しない。時間ｔ３において、ホームノードは、所定のデータブロックのコピーを受信し、当該コピーを転送バッファ（例えば、上述した転送バッファ１６０）に記憶する。転送バッファは、様々な記憶場所のうち何れかの記憶場所であってもよいことに留意されたい。例えば、一実施形態では、転送バッファは、転送するために値を記憶するように割り当てられたキャッシュの一部であってもよい。或いは、別の実施形態では、転送バッファは、転送するために値を記憶するように割り当てられたレジスタのセットであってもよい。さらに、転送バッファは、ランダムアクセスメモリ（ＲＡＭ）データ構造、コンテンツアドレス可能メモリ（ＣＡＭ）データ構造等として実装されてもよい。いくつかの実施形態では、所定のデータブロックは、上述したメモリ１３０ａ等のシステムメモリに未だ書き戻されていない。他の実施形態では、所定のデータブロックは、コピーが転送バッファに残っている間にシステムメモリに書き戻される。
【００３５】
時間ｔ４において、ホームノードは、受信したデータブロックのコピーをノード２に送信する。時間ｔ５において、ノード２は、キャッシュコヒーレンシプロトコル（例えば、ＭＯＥＳＩ）の共有（Ｓ）コヒーレンシ状態で、所定のデータブロックのコピーを（そのローカルキャッシュの１つに）記憶する。時間ｔ６において、ノード２は、所定のデータブロックのデータを検査し、ロックビットがリセットされた（すなわち、データがロックされていない）ことを検出する。したがって、所定のデータブロックはロック可能であり、ノード２は、所定のデータブロックのデータを変更して、ロックを設定する。上述したように、いくつかの実施形態では、ロックを設定することは、所定のデータブロックのデータ内のロックビットをアサートすることを含む。或いは、他の実施形態では、ロックを設定することは、ロックの設定を示すために、所定のデータブロックのデータ内のロックビットを変更することを含む。ここで、所定のデータブロックが現在ロックされているとみなされる。
【００３６】
時間ｔ７において、ノード３は、データブロックに対するリード要求をホームノードに送信する。再度、ホームノードは要求を受信し、ホームノードが現時点で所定のデータブロックを所有していないが、オーナーノードが現時点で所定のデータブロックを所有していることを判別する。時間ｔ８において、ホームノードは、所定のデータブロックのコピーを、その転送バッファから、所定のデータブロックを要求したノード３に送信する。時間ｔ９において、ノード３は、所定のデータブロックのコピーを、共有（Ｓ）コヒーレンシ状態のローカルキャッシュの１つに記憶する。時間ｔ１０において、ノード３は、所定のデータブロックのデータを検査し、ロックビットが設定されていることを検出する。ノード３は、所定のデータブロックがロックされている間、当該所定のデータブロックを使用することができない。したがって、ノード３は、データを使用することを待機している間、所定のデータブロックのデータを定期的に再チェックする。様々な実施形態では、ノードは、データブロックがローカルキャッシュに記憶される前に、データのロックビットを検査することに留意されたい。
【００３７】
１つ以上の追加ノードが、要求（ロックリード要求又は単なるリード要求）を所定のデータブロックに関するホームノードに送信した場合、ホームノードは、ブロックのコピーを、その転送バッファから各要求元に伝える。したがって、ホームノードは、受信した要求に関してオーナーノードと通信しない。その後、オーナーノードは、所定のデータブロックをホームノードに書き戻し、オーナーノードに記憶されたコピーを無効にする。
【００３８】
上述したように、アクセス要求のカウントは、ホームノードによって維持される。様々な実施形態では、所定のデータブロックに対応するライト要求又はロック解除要求がホームノードで受信されると、所定のデータブロックに対するリード要求のカウントがリセットされる。また、オーナーノードは、かかる動作が未だ発生していない場合、所定のデータブロックをホームノードに戻すように指示され、これにより、ホームノードは、要求された変更を行い、更新された所定のデータブロックのコピーを、そのシステムメモリ（例えば、コンピューティングシステム１００内の上述したメモリ１３０ａ等）に記憶する。
【００３９】
次に、図３を参照すると、メモリコントローラ２００の一実施形態が示されている。メモリコントローラ２００は、複数のソース（例えば、ホームノード以外のノードからの複数のスレッド等）からの同一の所定のアドレスに対する一連のリード要求を処理する上述したシーケンスステップを実施するために使用される。例えば、メモリコントローラ２００は、特定の条件が満たされた場合に、所定のブロックを転送バッファに記憶するために使用される。また、メモリコントローラ２００は、コピーを要求ノードに転送するようにオーナーノードに指示するのではなく、所定のブロックを転送バッファから要求ノードに直接送信する。ホームノードからの直接転送は、所定のブロックのコピーを要求ノードに送信するのに使用されるホップ又は中間ノードの数を低減させる。
【００４０】
図３の実施形態では、メモリコントローラ２００は、パケットインタフェース２１０と、要求キュー２２０と、メモリアクセス制御ロジック２３０と、コヒーレンシ制御ロジック２４０と、カウンタ２４２と、転送バッファ２５０と、を含む。パケットインタフェース２１０は、ネットワーク又は他のインタフェースを介して、他のノードからコマンドパケットを受信する。いくつかの実施形態では、パケットインタフェース２１０は、他のノードと通信するために使用されるネットワークインタフェース又は別のインタフェース内に含まれる。
【００４１】
パケットインタフェース２１０は、受信したコマンドパケットを要求キュー２２０に送信するように接続されている。コマンドパケットによって示されるアドレスが、メモリコントローラ２００に関連するメモリ内のメモリ位置に対応する場合には、コマンドパケットは、メモリコントローラ２００に送られる。換言すると、コマンドパケットのアドレスが、メモリコントローラ２００に接続されたメモリ内に記憶されたブロックをアドレス指定する場合に、コマンドパケットは、メモリコントローラ２００に送られる。要求キュー２２０に記憶された各々のパケットが処理されると、応答パケットが準備される。この場合、パケットインタフェース２１０は、応答パケットを他のノードにも送信する。
【００４２】
メモリコントローラ２００は、コマンドパケット情報を受信すると、コマンドパケット情報を要求キュー２２０にキューイングし、当該コマンドを処理する。パケットを受信したことに応じて、要求キュー２２０の利用可能なエントリが、受信したパケットに割り当てられる。図示するように、各エントリは、ノード識別子（ＩＤ）と、スレッドＩＤと、コマンドの指標と、コマンドに対応するアドレスと、期間（age）（例えば、受信時間）指標と、状態情報と、のうち１つ以上を記憶する。
【００４３】
要求キュー２２０の状態情報は、データサイズと、有効なエントリの指標と、コマンドの優先レベルと、対応するコマンドの結果データを記憶するフィールドと、結果データを記憶する別のキューの位置を識別するポインタと、コマンドの処理が成功したかどうかの指標等と、のうち１つ以上を含む。要求キュー２２０のエントリ内のフィールドは、特定の順序で連続して記憶されるように示されているが、他の記憶構成の組み合わせも可能であり、想到される。
【００４４】
いくつかの実施形態では、全てのコマンドパケットは、これらの受信順に処理される。他の実施形態では、パケットの順序処理は、同じアドレスを対象とするコマンドパケットに要求される。この場合、異なるアドレスを対象とするパケットは、これらのパケットに対して順不同に処理されてもよい。また、他の実施形態では、コマンドパケットは、優先レベルと、コマンドタイプと、キューのタイムスタンプ又は位置等の期間（age）の指標と、アドレスと、データサイズと、スレッドＩＤと、ノードＩＤ等と、のうち１つ以上によって決定された順序で処理される。
【００４５】
メモリアクセス制御ロジック２３０は、要求キュー２２０と、メモリコントローラに接続されたメモリとの各々とインタフェースするロジック及び記憶レジスタを含む。例えば、メモリコントローラ２００が、上述したノード１１０ａのメモリコントローラ１２０ａである場合、メモリはメモリ１３０ａである。メモリアクセス制御ロジック２３０は、関連するコヒーレンシ動作が送信され、任意の応答を他のノードから受信した後に、コマンドを実行する。コマンドがリード動作である場合、データは、メモリから戻され、特定の条件を満たす場合にパケットインタフェース２１０、要求キュー２２０、転送バッファ２５０、又は、結果データを記憶するために指定された別のキュー（図示省略）のうち１つの応答パケットに記憶される。メモリアクセス制御ロジック２３０内のロジックは、ハードウェア、ファームウェア等のソフトウェア、又は、これらの組み合わせで実装されることに留意されたい。
【００４６】
コヒーレンシ制御ロジック２４０は、要求キュー２２０と、プローブを他のノードに向けるのに使用される任意のディレクトリタイプ構造と、関連するノードのキャッシュメモリサブシステムと、転送バッファ２５０と、の各々とインタフェースする論理レジスタ及び記憶レジスタを含む。コヒーレンシ制御ロジック２４０内の任意のロジックは、メモリアクセス制御ロジック２３０と同様に、ハードウェア、ファームウェア等のソフトウェア、又は、これらの組み合わせで実装される。
【００４７】
コヒーレンシ制御ロジック２４０は、要求キュー２２０に記憶されたコマンドパケットが、キャッシュコヒーレンシプロトコルに従ってコヒーレントに処理されることを確実にするように構成されている。所定のコマンドにプローブが必要である場合、コヒーレンシ制御ロジック２４０は、対応する指標をパケットインタフェース２１０に送信する。例えば、当該指標には、対応するコマンドのソースノード、アドレス、コマンドタイプ、及び、他の情報が含まれる。パケットインタフェース２１０は、プローブの指標をコヒーレンシ制御ロジック２４０から受信したことに応じて、プローブコマンドを送信する。また、コヒーレンシ制御ロジック２４０は、対応するトランザクションが完了していることを示すパケットをパケットインタフェース２１０から受信し、ライトコマンドに対するプローブ応答を受信する。
【００４８】
上述したように、様々な実施形態では、ノードは、何れのアドレスが何れのシステムメモリにマッピングされているか（ひいては、特定のアドレスに対するメモリ要求がルーティングされるコンピューティングシステム１００内のノードのうち何れのノードにマッピングされるか）を決定するために使用されるディレクトリを含む。ディレクトリは、複数のエントリを含み、メモリマップを含み、又は、メモリマップと組み合わせて使用される。所定のブロックに対するディレクトリ内の割り当てられたエントリは、メモリ内の所定のブロックがキャッシュに記憶されたコピーを有することを示す。キャッシュは、同じノード内又は別のノード内にある。ディレクトリ内の割り当てられたエントリは、所定のブロックのキャッシュコヒーレンシ状態（例えば、所定のブロックのオーナー、所定のブロックが所定のモードで変更されたかどうか、及び／又は、所定のブロックのコピーを共有しているノード等）を示す。
【００４９】
様々な実施形態では、ディレクトリ内に割り当てられたエントリ及び共有（Ｓ）コヒーレンシ状態を有する所定のブロックに対応するリード動作は、所定のブロックの他のコピーを無効にするプローブコマンドを必要としない。しかしながら、Ｓコヒーレンシ状態を有する所定のブロックのライト動作は、他の処理ノードにおける他のコピーの無効化を生じさせるプローブコマンドを必要とする。したがって、ディレクトリ及びコヒーレンシ制御ロジック２４０は、このシナリオを検出し、適切なプローブを生成して、パケットインタフェース２１０を介して送信するように構成されている。ディレクトリ内に割り当てられたエントリを有する所定のブロックのコヒーレンシ状態を有するリード動作及びライト動作の他のシナリオも可能であり、想到される。いくつかの実施形態では、ディレクトリ内に割り当てられたエントリが存在しないことは、所定のブロックがディレクトリと同じノード内のキャッシュに記憶されていないことを意味する。
【００５０】
図示するように、コヒーレンシ制御ロジック２４０は、１つ以上のカウンタ２４２を含む。様々な実施形態では、カウンタ２４２は、ゼロにリセットされ、要求キュー２２０に記憶された受信したリード要求に対応する所定のアドレスに割り当てられる。カウンタ２４２の割り当てられたカウンタは、所定のアドレスに対する後続のリード要求毎にインクリメントされる。例えば、要求キュー２２０に示された第２エントリは、アドレス０ｘ１００に対するロックリード要求を記憶する。アドレスの「０ｘ」は１６進値を示す。図示するように、ロックリード要求は、ノード２で処理されるスレッド５８からのものである。要求キュー２２０の第３エントリは、アドレス０ｘ１００に対するロックリード要求を記憶する。この後続のリード要求は、ノード３で処理されるスレッド１４からのものである。
【００５１】
いくつかの実施形態では、アドレス０ｘ１００に割り当てられたカウンタ２４２の所定のカウンタは、ノード２からの第２リード要求が受信されたときにインクリメントされる。当該カウンタは、アドレス０ｘ１００に対する後続のリード要求毎にインクリメントされる。当該カウンタは、アドレス０ｘ１００に対するライト要求又はロック解除要求が受信されたときに、アドレス０ｘ１００に関してリセット及び／又は無効化される。例えば、要求キュー２２０の第１エントリの第１リード要求は、ロックを解除する排他的なリード要求である。このリード要求の検出に応じて、アドレス０ｘ１００に関するカウンタがリセットされる。要求キュー２２０の第２エントリの第２リード要求がアドレス０ｘ１００に対して検出されると、カウンタがアドレス０ｘ１００に割り当てられ、０に設定されるか、又は、１にインクリメントされる。
【００５２】
要求キュー２２０の第３エントリの第３要求がアドレス０ｘ１００に対して検出されると、カウンタ２４２の割り当てられたカウンタがインクリメントされる。アドレス０ｘ１００に対する後続のリード要求又はロックリード要求毎に、割り当てられたカウンタがインクリメントされる。いくつかの実施形態では、カウンタは、重複しない（non-overlapping）カウンタである。
【００５３】
要求キュー２２０の最後のエントリのリード要求は、ロックを解除するための別の排他的リード要求である。このリード要求を検出したことに応じて、アドレス０ｘ１００に関するカウンタがリセットされる。この特定のリード要求が到着する前に、カウンタ２４２の割り当てられたカウンタは、比較的高い数に達する。例えば、６４ほどのスレッドが、アドレス０ｘ１００に対応するリード要求又はロック解除要求をメモリコントローラ２００に送信した可能性がある。メモリコントローラ２００は、所定のカウンタが閾値を超える場合、割り当てられたアドレス（上記の例では、アドレス０ｘ１００等）に対応するリード要求の処理を変更する。様々な実施形態では、閾値はプログラム可能な値である。メモリコントローラ２００は、カウンタが閾値を超えると、図２において上述したシーケンスステップを使用する。例えば、当該ノード内のメモリコントローラ２００は、アドレス０ｘ１００に対応するブロックのコピーを転送バッファ２５０に記憶する。転送バッファ２５０は、複数のエントリを含む。転送バッファの各エントリは、アドレスの指標と、アドレスに対応するブロックのコピー又はブロックのデータを記憶する別のキューの位置を識別するポインタと、状態情報と、のうち１つ以上を含む。状態情報は、有効なエントリの指標と、データの優先レベル等と、のうち１つ以上を含む。アドレスに対応するブロックのコピーが転送バッファ２５０のエントリに記憶される場合、当該ブロック内のデータはロックの指標も含む。当該指標は、エントリにおいて「Ｌ」として示される。
【００５４】
メモリコントローラ２００は、ディレクトリを使用して、所定のブロックのコピーがホームノードにあるのか、又は、別のノードにあるのかを判別する。メモリコントローラ２００は、この判別に基づいて、メモリコントローラ２００に接続されたシステムメモリ又は他のノードから、エントリを転送バッファに割り当てる。いくつかの実施形態では、別のノードが転送バッファを満たすために使用される場合、他のノードは、所定のブロックのキャッシュされたコピーのキャッシュコヒーレンシ状態を所有（Ｏ）コヒーレンシ状態に変更するように指示される。リード要求及びロックリード要求が受信され、要求キュー２２０に記憶される場合、これらの要求は、転送バッファ２５０から直接供給される。要求ノードは、各々のキャッシュメモリサブシステムの共有（Ｓ）コヒーレンシ状態で、所定のブロックのコピーを転送バッファ２５０からインストールするように指示される。
【００５５】
ここで、図４を参照すると、ホームノードへの複数のリード要求を処理するために使用されるシーケンス図の別の実施形態を示す一般化されたブロック図が示されている。上述した回路及びロジックには、同じ符号が付されている。図示するように、ノード１が事前に所定のブロックを所有し、所定のブロックをロックしたときの一連のステップを使用するが、ノード１は、ロック状態の所定のブロックを使用する動作を終了し、所定のブロックのロックを解除する準備をする。時間ｔ０において、ノード１は、要求をホームノードに送信する。要求は、所定のブロックに対する排他的アクセスに関するリード要求である。排他的アクセスは、ノード１が所定のブロック内でデータを変更し、ロックをリセットするのを可能にする。
【００５６】
時間ｔ１において、ホームノードは、所定のブロックについて別のオーナーが存在しないことを判別する。例えば、ホームノードは、ディレクトリを検索し、所定のブロックのアドレスに関する割り当てられたエントリが存在しないことを検出する（当該割り当てられたエントリは、所定のブロックが、所有状態のローカルキャッシュ又はリモートキャッシュに記憶されていないことを示す）。或いは、ホームノードは、ディレクトリ内の割り当てられたエントリ（所定のブロックの１つ以上のコピーが、共有（Ｓ）コヒーレンシ状態の他のノード内のキャッシュに記憶されていることを示す）を検出してもよい。結果として、時間ｔ２〜ｔ３において、ホームノードは、ＤＲＡＭ等のメモリにアクセスして、所定のブロックのコピーを取得する。
【００５７】
他の例では、ホームノードが、所定のブロックのコピーが所有（Ｏ）又は独占（Ｅ）コヒーレンシ状態で別のノードに存在することを判別した場合、及び、ホームノードが、所定のデータブロックに対するリード要求のカウントが未だ閾値を超えていないことを判別した場合、ホームノードは、コピーをホームノードに送信し、他のノードでローカルコピーを無効にするように、他のノードに指示することに留意されたい。
【００５８】
時間ｔ４において、ホームノードは、ノード１が所定のブロックのオーナーノードである指標を記憶する。当該指標は、ディレクトリの割り当てられたエントリに記憶される。時間ｔ５において、ホームノードは、所定のブロックのコピーを要求ノード１に送信する。また、ホームノードは、コマンドパケットを、共有（Ｓ）状態のブロックのコピーと共にノード２〜３等の他のノードに送信して、所定のブロックのコピーを無効にするように当該他のノードに指示する。
【００５９】
時間ｔ６において、ノード１は、所定のブロックのコピーを、排他的（Ｅ）コヒーレンシ状態のローカルキャッシュにインストールし、データを変更してロックをリセットする。例えば、ノード１は、所定のブロックのデータ内のロック指標をアサート停止することができる。また、ノード１は、コヒーレンシ状態を排他的（Ｅ）から変更（Ｍ）に変更する。さらに、ノード２及び３についても、ブロックの状態を「共有」から「無効」に変更する。
【００６０】
ここで、図５を参照すると、ホームノードへの複数のリード要求を処理するために使用されるシーケンス図が示されている。図示するように、時間ｔ７〜ｔ１３における一連のステップは、図４において上述した時間ｔ０〜ｔ６における一連のステップ後に使用される。上述した回路及びロジックには、同じ符号が付されている。
【００６１】
時間ｔ７において、一連のロックリード要求がホームノードに送信される。図示するように、ノード２及び３は、ロックリード要求をホームノードに送信し、図４の時間ｔ６の上述したステップで無効にされたブロックへのアクセスを得る。２つのノードのみがロックリード要求を送信していることが示されているが、他の実施形態では、コンピューティングシステムにおいて他のいくつかのノードが使用され、ロックリード要求がホームノードに送信される。
【００６２】
時間ｔ８において、ホームノード１１０ａは、受信したロックリード要求を記憶する。例えば、要求キューは、上述したような要求を記憶するために使用される。ロックリード要求が示されているが、ロックリード要求及び標準リード要求の任意の組み合わせを受信してもよい。上述したように、カウンタは、ブロックに対応する要求の数を追跡するために割り当てられている。図示した例では、ノード２からのロックリード要求は、所定のブロックに対する他の要求の前に受信される。時間ｔ９において、ホームノードは、所定のブロックの所有権をノード１からノード２に更新する。また、いくつかの実施形態では、割り当てられたカウンタがインクリメントされる。
【００６３】
時間ｔ１０において、ホームノードは、コマンドパケットをノード１に送信して、所定のブロックのコピーをノード２に送信するように、ノード１に指示する。時間ｔ１１において、ノード１は、受信したコマンドパケットを処理し、所定のブロックのコピーをノード２に送信する。時間ｔ１２において、ノード１は、所定のブロックのコピーを無効にし、ノード２は、所定のブロックのコピーを受信して、排他的（Ｅ）コヒーレンシ状態のローカルキャッシュにインストールする。時間ｔ１３において、ノード２は、所定のブロックのデータを読み出して、所定のブロックがロック解除されているか利用可能であることを検出する。
【００６４】
図６を参照すると、複数ノードコンピューティングシステムのリード要求及びライト要求を処理するために使用されるシーケンス図が示されている。上述した回路及びロジックには、同じ符号が付されている。図示するように、時間ｔ１４〜ｔ１９における一連のステップは、図５において上述した時間ｔ８〜ｔ１３における一連のステップ後に使用される。
【００６５】
一連のロックリード要求を供給するために使用されるホップの数を減らすために、ロック要求及びロック解除要求の処理を変更する条件が満たされたことを判別した後に、時間ｔ１４〜ｔ１９における一連のステップが使用される。１つ以上の標準リード要求は、ロックリード要求と混在する場合がある。
【００６６】
受信したブロックがロックされていないこと（図５の時間ｔ１３）を判別したことに応答して、ノード２は、所定のブロック内のロック指標を変更することによって、ロックを設定する。時間ｔ１４において、ノード２は、ブロックのデータ（ロック使用のみであってもよい）が変更されている場合に、所定のブロックのコヒーレンシ状態を排他的（Ｅ）から変更（Ｍ）に移行させる。次に、ホームノード内の要求キューの次のロックリード要求を処理する。次のロックリード要求は、ノード３からのものである。処理ノード３のロックリード要求（時間ｔ７で受信したもの）を処理したことに応じて、時間ｔ１５において、ホームノードは、所定のブロックの所有権をノード２からノード３に更新する。いくつかの実施形態では、対応するアドレスの割り当てられたカウンタは、インクリメントされる。また、ホームノードが、割り当てられたカウンタがプログラム可能な閾値を未だ超えていなことを判別する。これに応じて、時間ｔ１６において、ホームノードは、コマンドパケットをノード２に送信して、所与のブロックのコピーをノード３に送信するように、ノード２に指示する。
【００６７】
時間ｔ１７において、ノード２は、受信したコマンドパケットを処理し、所定のブロックのコピーをノード３に送信する。時間ｔ１８において、ノード２は、所定のブロックのコピーを無効にする。ノード３は、所定のブロックのコピーを受信して、排他的（Ｅ）コヒーレンシ状態のローカルキャッシュにインストールする。時間ｔ１９において、ノード３は、所定のブロックのデータを読み出して、所定のブロックがロックされているか利用不可能であることを検出する。これに応じて、ノード３は、所定のブロックのデータを未だ使用することができないので、待機する。
【００６８】
ノード３からのロックリード要求の場合、要求を処理するために最低３ホップが使用される。第１ホップは、ロックリード要求をノード３からホームノードに送信するために使用される。第１ホップは、図５の上述した時間ｔ７に対応する。第２ホップは、コマンドパケットをホームノードからノード２に送信するために使用される。第２ホップは、上述した時間ｔ１６に対応する。第３ホップは、所定のブロックのコピーをノード２からノード３に送信するために使用される。第３ホップは、上述した時間ｔ１７に対応する。このプロトコルは、割り当てられたカウンタが設定可能な閾値を未だ超えていないシナリオに対応する。しかしながら、ホームノードの割り当てられたカウンタが閾値を超えると、ロックリード要求を処理するために使用されるホップの最小数は、３ホップから２ホップに減少する。
【００６９】
様々な実施形態では、割り当てられたカウンタが閾値を超えると、ホームノードは、上述したように、所定のブロックのコピーを転送バッファに記憶する。要求キューに記憶されたロックリード要求を処理する場合、ホームノードは、所定のブロックのコピーを要求ノードに直接転送する。プローブ又はコマンドパケットは、他のノードに送信されて、所定のブロックのコピーを要求ノードに送信するように他のノードに指示することがない。例えば、ノード３に対するロックリード要求が、割り当てられたカウンタに対して、設定可能な閾値を超えさせた場合、ホームノードは、任意のステップでノード２を含まずに、所定のブロックのコピーをノード３に直接転送することができる。このように、第１ホップは、ロックリード要求をノード３からホームノードに送信するために依然として使用される。第１ホップは、図４の上述したステップ８に対応する。しかしながら、第２ホップは、所定のブロックをホームノードの転送バッファからノード３に転送するために使用される。最小のホップ数として、３ホップではなく、２ホップが使用される。
【００７０】
図７は、要求数がプログラム可能な閾値を満たしているか超えている場合に、複数ノードコンピューティングシステムにおいてリード要求及びライト要求を処理する実施形態を示している。上述した回路及びロジックには、同じ符号が付されている。図示するように、時間ｔ３７〜ｔ４５における一連のステップは、図４において上述した時間ｔ０〜ｔ６における一連のステップ後に使用される。所定のブロックの共有されたコピーが他のノードで無効にされた後に、時間ｔ３７〜ｔ４５における一連のステップが発生する。
【００７１】
時間ｔ３７において、ホームノードは、一連のロックリード要求をノード２〜３等の他のノードから受信する。図示するように、ノード２〜３は、ロックリード要求をホームノードに送信して、図４の時間ｔ６の上述したステップで無効にされた所定のブロックのコピーへのアクセスを得る。また、オーナーノード（この例では、１１０ｂ）は、所定のブロック内のデータを変更することによってロックをリセットし、コヒーレンシ状態を変更（Ｍ）に設定する。
【００７２】
次に、時間ｔ３８において、ホームノードは、受信したロックリード要求を記憶する。所定のシナリオでは、所定のブロックに対応するアドレスに対する事前のリード要求は、所定のブロックのデータ内でロックをリセットする排他的リード要求であってもよい。このリード要求は、上述した時間ｔ０〜ｔ６における一連のステップ中に処理されたものである。同じアドレスに対応する第２リード要求は、図７に示すように、時間ｔ３７のノード２からのロックリード要求である。いくつかの実施形態では、このロックリード要求は、割り当てられたカウンタに対して、閾値を超えさせる。ここで、様々な実施形態では、ホームノードは、コマンドパケットをノード１に送信して、コマンドパケットをノード２に送信した後に所定のブロックのローカルコピーを無効にするようにノード１に指示するのではなく、異なるタイプのコマンドパケットを送信する。
【００７３】
時間ｔ３９において、ホームノードは、コマンドをノード１に送信して、所定のブロックのコピーをノード２ではなくホームノードに送信するように、ノード１に指示する。時間ｔ４０において、ノード１は、受信したコマンドを処理し、所定のブロックのコヒーレンシ状態を変更（Ｍ）から所有（Ｏ）に移行する。時間ｔ４１において、ノード１は、所定のブロックのコピーをホームノードに送信する。時間ｔ４２において、ホームノードは、受信した所定のデータブロックのコピーを転送バッファに記憶する。
【００７４】
ホームノードは、ノード１がオーナーノードであることを示すために、所定のブロックのディレクトリエントリを更新する。いくつかの実施形態では、ホームノードは、受信した所定のブロックのコピーを、上述したメモリ１３０ａ等のシステムメモリに書き込む。様々な実施形態では、ノード１がロックをリセットした後に所定のブロックを終了した場合、ノード１は、ノード１のローカルコピーが無効である（無効になっている）指標をホームノードに送信する。この場合、ホームノードは、ノード１がブロックを所有しているという指標をディレクトリに記憶しない。ノード１が所定のブロックのコピーで未だ終了していない場合、当該コピーを所有（Ｏ）コヒーレンシ状態で維持する。
【００７５】
時間ｔ４３において、ホームノードは、所定のブロックのコピーを転送バッファからノード２に直接転送する。ノード２は、所定のブロックのコピーを受信する。ホームノードからパケットによって指示されるように、ノード２は、所定のブロックを、共有（Ｓ）コヒーレンシ状態のローカルキャッシュにインストールする。時間ｔ４４において、ノード２は、所定のブロックのデータを読み取り、所定のブロックがロック解除されているか利用可能であることを検出する。これに応じて、時間ｔ４５において、ノード２は、データを変更して、所定のブロックのデータ内でロックを設定する。次に、ノード２は、この変更を考慮して、所定のブロックのコヒーレンシ状態を排他的（Ｅ）から変更（Ｍ）に移行させる。
【００７６】
図８は、図７のステップ後の或る時点におけるロックリード要求の処理が示されている。図示するように、時間ｔ４６〜ｔ４９における一連のステップは、図７において上述した時間ｔ３７〜ｔ４５における一連のステップ後に使用される。時間ｔ４６において、ホームノード内の要求キューの次のロックリード要求を処理する。次のロックリード要求は、ノード１〜２からの事前のリード要求が既に処理されているので、ノード３からのものである。ノード１が所定のブロックのコピーを無効にしなかった場合、ホームノードは、ノード１が所定のブロックのオーナーノードであるという指標を維持する。この例では、割り当てられたカウンタが閾値を超えている。
【００７７】
時間ｔ４６において、ホームノードは転送バッファにアクセスする。時間ｔ４７において、ホームノードは、所定のブロックのコピーを転送バッファからノード３に直接転送する。ノード３は、所定のブロックのコピーを受信し、ホームノードからのパケットによって指示されるように、時間ｔ４８において、ノード３は、所定のブロックを、共有（Ｓ）コヒーレンシ状態のローカルキャッシュにインストールする。時間ｔ４９において、ノード３は、所定のブロックのデータを読み取り、所定のブロックがロックされているか利用不可能であることを検出する。これに応じて、ノード３は、与えられたブロックのデータを未だ使用することができないため、待機する。
【００７８】
ここで、図９を参照すると、複数ノードコンピューティングシステムの一連のリード要求を処理するための方法９００の一実施形態が示されている。説明目的のために、本実施形態のステップは、順番に示されている。しかしながら、他の実施形態では、いくつかのステップが示された順序と異なる順序で行われ、いくつかのステップが同時に実行され、いくつかのステップが他のステップと組み合わされ、いくつかのステップが実行されない。
【００７９】
ブロック９０２では、複数ノードコンピューティングシステムのホームノードは、処理するリード要求を有していることを判別する。様々な実施形態では、ホームノードは、受信した要求を記憶する要求キューを含む。また、ホームノードは、所定のブロックに対するリード要求のカウントを維持するように構成されている。例えば、いくつかの実施形態では、カウントは、ブロックのターゲットアドレスに関連付けられており、ブロックに対する要求が受信されるとインクリメントされる。様々な実施形態では、アドレスに対応するライト要求又はロック解除要求が検出されると、カウントがリセットされる。
【００８０】
図示した例では、アドレスに対するリード要求の閾値数を超えていない場合（条件付きブロック９０４）、ブロック９０６において、当該アドレスに対するリード要求のカウンタがインクリメントされる。ブロック９０８では、リード要求（又は、最も古い保留中のリード要求）が要求ノードについて処理される。いくつかの実施形態では、要求データが要求ノードに送信される。要求データは、ホームノードのローカルキャッシュから、ホームノードのシステムメモリから、又は、要求データのコピーを現時点で記憶している別のノードのキャッシュから取得される。後者の場合、コマンド（例えば、プローブ要求又は他のメッセージ）がホームノードから他のノードに送信され、データを要求ノードに転送するように他のノードに指示する。
【００８１】
アドレスに対するリード要求の閾値数が満たされた場合（例えば、実施形態に応じて、閾値に等しいか超える場合）（条件付きブロック９０４）、及び、ホームノードの転送バッファにヒットが存在する場合（条件付きブロック９１０）、ブロック９１２において、要求データがバッファから要求ノードに転送される。ホームノードのバッファにミスがある場合（条件付きブロック９１０）、ブロック９１４において、ホームノードは、要求をオーナーノードに発行して、要求データを要求ノードに送信するのではなく、当該要求データをホームノードに送信する。ブロック９１６では、ホームノードは、要求データが戻るのを待機し、要求データが戻ると、当該データをホームノードの転送バッファに記憶する。その後、方法９００の制御フローはブロック９１２に移行し、ホームノードは、データのコピーを要求ノードに転送する。
【００８２】
ブロック９３０では、ホームノードは、それが処理するライト要求又はロック解除要求を有することを判別する。ブロック９３２では、ホームノードは、要求に対応するアドレスを決定し、もしあれば、データに対するリード要求のカウントをリセットする。ホームノードは、事前に、閾値を超えるカウントに起因して、データを、転送バッファから、アドレスに対応するリード要求に関する要求ノードに転送している場合がある。しかしながら、ホームノードは、カウントがリセットされると、アドレスに対応するリード要求のための転送バッファの使用をやめる。ブロック９３４では、ホームノードは、ライト要求又はロック解除要求を処理する。
【００８３】
図１０を参照すると、例示的な処理ノード１０００の一実施形態が示されている。いくつかの実施形態では、処理ノード１０００の図示された機能は、単一の集積回路に組み込まれる。処理ノード１０００は、上述した複数ノードコンピューティングシステムの１つ以上のノードとして使用される。処理ノード１０００は、１つ以上の処理ユニット１０１５を含み、処理ユニット１０１５の各々は、１つ以上のプロセッサコア１０１２と、関連するキャッシュメモリサブシステム１０９４と、を含む。様々な実施形態では、プロセッサコア１０１２は、汎用マイクロアーキテクチャを利用する。
【００８４】
一実施形態では、プロセッサコア１０１２は、所定の汎用命令セットによって命令を実行するための回路を含む。例えば、ＳＰＡＲＣ（登録商標）命令セットアーキテクチャ（ＩＳＡ）が選択される。或いは、ｘ８６、ｘ８６−６４（登録商標）、Ａｌｐｈａ（登録商標）、ＰｏｗｅｒＰＣ（登録商標）、ＭＩＰＳ（登録商標）、ＰＡ−ＲＩＳＣ（登録商標）、又は、他の命令セットアーキテクチャが選択される。概して、プロセッサコア１０１２は、データ及び命令に対して、複数のキャッシュメモリサブシステム１０９４の各々にアクセスする。要求されたブロックがキャッシュメモリサブシステム１０９４又は共有キャッシュメモリサブシステム１０９８において見つからない場合、リード要求が生成され、失われたブロックがマッピングされているノード内のメモリコントローラ１０２０に送信される。キャッシュメモリサブシステム１０９４は、各々のプロセッサコア１０１２内に統合される。キャッシュメモリサブシステム１０９４及び共有キャッシュメモリサブシステム１０９８の両方は、対応するキャッシュコントローラに接続されたキャッシュメモリを含む。
【００８５】
また、処理ノード１０００は、１つ以上の処理ユニット１０７０を含み、処理ユニット１０７０は、１つ以上のプロセッサコア１０７２と、データストレージバッファ１０７４と、を含む。様々な実施形態では、プロセッサコア１０７２は、プロセッサコア１０１２のミラー化されたシリコンイメージではない。むしろ、プロセッサコア１０７２は、プロセッサコア１０１２によって使用されるマイクロアーキテクチャとは異なるマイクロアーキテクチャを有することができる。いくつかの実施形態では、プロセッサコア１０７２は、計算集約型タスクに対して高い命令スループットを提供するマイクロアーキテクチャを含む。いくつかの実施形態では、プロセッサコア１０７２は、並列アーキテクチャを有する。例えば、いくつかの実施形態では、プロセッサコア１０７２は、単一命令複数データ（ＳＩＭＤ）ベースコアである。ＳＩＭＤコアの例には、グラフィックス処理ユニット（ＧＰＵ）、デジタル信号処理（ＤＳＰ）等が含まれる。一実施形態では、処理ノード１０００は、単一命令セットアーキテクチャ（ＩＳＡ）を含む。
【００８６】
ソフトアプリケーションのスレッドは、各スレッドがプロセッサコア１０１２，１０７２のランタイムハードウェアリソースに少なくとも部分的に基づいて最高の命令スループットを有するように、プロセッサコア１０１２，１０７２のうち１つにスケジュールされる。いくつかの実施形態では、処理ユニット１０７０は、グラフィックス処理ユニット（ＧＰＵ）である。従来のＧＰＵは、かなり多くのタイプの単一命令複数データ（ＳＩＭＤ）を利用して、高度なデータ並列アプリケーションにおいて高いスループットを実現している。各オブジェクトは、他のオブジェクトから独立して処理されるが、同じシーケンスの動作が使用される。
【００８７】
一実施形態では、ユニット１０７０は、マザーボード上で一体化されている。別の実施形態では、処理ノード１０００の図示された機能は、単一の集積回路に組み込まれる。かかる実施形態では、ユニット１０１５（ＣＰＵ）及びユニット１０７０（ＧＰＵ）の各々は、異なる設計中心（design centers）からの独自のコアである。また、ＧＰＵ１０７０は、インタフェース１０４０を介しメモリアクセスをオフチップで行うのではなく、処理ノード１０００からメモリコントローラ１２０を介してローカルメモリ１０９４，１０９８及びメインメモリに直接アクセスすることができる。本実施形態は、ＧＰＵ１０７０のメモリアクセスのレイテンシを低下させることができ、これを高性能に変換することができる。
【００８８】
概して、パケット処理ロジック１０１６は、処理ノード１０００が接続されたリンクで受信された制御パケットに応答して、プロセッサコア１０１２，１０７２及び／又はキャッシュメモリサブシステム１０９４に応じて制御パケットを生成し、供給のためにメモリコントローラ１０２０によって選択されたトランザクションに応じてプローブコマンド及び応答パケットを生成し、ノード１０００が中間ノードであるパケットを、インタフェースロジック１０４０を介して他のノードにルーティングする、ように構成されている。いくつかの実施形態では、パケット処理ロジック１０１６は、クロスバースイッチと呼ばれる場合がある。
【００８９】
インタフェースロジック１０４０は、パケットを受信し、パケット処理ロジック１０１６によって使用される内部クロックにパケットを同期させるロジックを含む。また、インタフェースロジック１０４０は、１つ以上の入出力（Ｉ／Ｏ）デバイス（１０８２）と通信するロジックを含む。いくつかの実施形態では、インタフェースロジック１０４０は、パケット処理ロジック１０１６やクロスバースイッチ又は他のコンポーネントを利用することなく、外部デバイスと直接通信する。例えば、ネットワークメッセージは、ユニット１０１５とネットワークインタフェースカード１０８０との間で直接伝達され、ユニット１０７０とネットワークインタフェースカード１０８０との間でも同様に直接伝達される。
【００９０】
図示した実施形態では、インタフェースロジック１０４０は、ＵＳＢ（Universal Serial Bus）インタフェース、ストレージデバイスに対するシリアルＡＴＡバスインタフェース、ＰＣＩエクスプレスＰＣＩｅ（Peripheral Component Interconnect Express）シリアル拡張バスインタフェース、ローピンカウント（ＬＰＣ）バス、ピアツーピア（Ｐ２Ｐ）のダイレクトメモリアクセス（ＤＭＡ）コントローラ等を少なくとも含む。他の実施形態は、上述した１つ以上のものを除外し、及び／又は、他のデバイス若しくは技術を含むことができる。
【００９１】
処理ノード１０００は、ネットワークインタフェースカード（ＮＩＣ）１０８０に接続されている。ＮＩＣ１０８０は、ネットワークを介して他の処理ノードと通信するための回路及びロジックを含む。例えば、ＮＩＣ１０８０は、イーサネット（登録商標）、ファイバーチャネル、Ｗｉ−Ｆｉ（登録商標）又はトークンリング等の物理層又はデータリンク層規格と通信するロジックを利用する。ＮＩＣ１０８０は、同じローカルエリアネットワーク（ＬＡＮ）上のコンピュータによって近くのグループとの通信を可能にする。また、ＮＩＣ１０８０は、ネットワークを介して他のノードとの通信を可能にする。ＮＩＣ１０８０は、アプリケーション層に関するＨＴＴＰプロトコル、トランスポート層に関するＴＣＰプロトコル、インターネット層に関するＩＰプロトコル、データリンク層に関するイーサネット（登録商標）プロトコル、物理層に関するＩＥＥＥ８０２．３ｕ等のネットワークプロトコルスタックを含む。
【００９２】
上記の１つ以上の実施形態はソフトウェアを含むことに留意されたい。かかる実施形態では、方法及び／又は機構を実施するプログラム命令は、コンピュータ可読媒体に伝達又は記憶される。プログラム命令を記憶するように構成された多くのタイプの媒体が利用可能であり、この媒体には、ハードディスク、フロッピー（登録商標）ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、フラッシュメモリ、プログラム可能ＲＯＭ（ＰＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、及び、他の形態の揮発性又は不揮発性ストレージが含まれる。一般的に、コンピュータアクセス可能記憶媒体は、命令及び／又はデータをコンピュータに提供するために、使用中にコンピュータがアクセス可能な任意の記憶媒体を含む。例えば、コンピュータアクセス可能記憶媒体は、磁気又は光学媒体等（例えば、ディスク（固定又は取り外し可能）、テープ、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、Ｂｌｕ−Ｒａｙ（登録商標）等）の記憶媒体を含むことができる。また、記憶媒体は、揮発性又は不揮発性メモリ媒体（例えば、ＲＡＭ（例えば、同期ダイナミックＲＡＭ（ＳＤＲＡＭ）、ダブルデータレート（ＤＤＲ、ＤＤＲ２、ＤＤＲ３等）ＳＤＲＡＭ、低電力ＤＤＲ（ＬＰＤＤＲ２等）ＳＤＲＡＭ、Ｒａｍｂｕｓ社ＤＲＡＭ（ＲＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）等）、ＲＯＭ、フラッシュメモリ、例えばユニバーサルシリアルバス（ＵＳＢ）インタフェース等の周辺インタフェースを介してアクセス可能な不揮発性メモリ（例えば、フラッシュメモリ）等）を含むことができる。記憶媒体は、微小電気機械システム（ＭＥＭＳ）や、ネットワーク及び／又は無線リンク等の通信媒体を介してアクセス可能な記憶媒体等を含む。
【００９３】
また、様々な実施形態では、プログラム命令は、Ｃ言語等の高水準プログラミング言語や、例えばＶｅｒｉｌｏｇ、ＶＨＤＬ等の設計言語（ＨＤＬ）や、例えばＧＤＳＩＩストリーム形式（ＧＤＳＩＩ）等のデータベースフォーマットにおける、ハードウェア機能の動作レベル記述又はレジスタ転送レベル（ＲＴＬ）記述を含む。場合によっては、記述は、合成ツールによって読み取られ、この合成ツールは、記述を合成して、合成ライブラリからゲートのリストを含むネットリストを生成する。ネットリストには、システムを含むハードウェアの機能を表すゲートのセットが含まれている。次に、当該ネットリストは、マスクに適用される幾何学的形状を記述するデータセットを生成するように配置され、配線される。次に、このマスクは、システムに対応する半導体回路を製造するために様々な半導体製造工程で使用される。或いは、コンピュータアクセス可能な記憶媒体の命令は、必要に応じて、ネットリスト（合成ライブラリ有り又は無し）であってもよいし、データセットであってもよい。また、命令は、Ｃａｄｅｎｃｅ（登録商標）、ＥＶＥ（登録商標）及びＭｅｎｔｏｒ  Ｇｒａｐｈｉｃｓ（登録商標）等のベンダから入手可能なハードウェアベースのエミュレータによるエミュレーション目的で利用される。
【００９４】
上記の実施形態がかなり詳細に説明されているが、上記の開示が十分に理解されると、当業者は、多くの変形及び修正が明らかになる。以下の特許請求の範囲は、かかる変形及び修正の全てを包含すると解釈されることが意図される。
【図１】
2019526086.tif 000003
【図２】
2019526086.tif 000004
【図３】
2019526086.tif 000005
【図４】
2019526086.tif 000006
【図５】
2019526086.tif 000007
【図６】
2019526086.tif 000008
【図７】
2019526086.tif 000009
【図８】
2019526086.tif 000010
【図９】
2019526086.tif 000011
【図１０】
2019526086.tif 000012
【国際調査報告】
2019526086.tif 000013
2019526086.tif 000014
2019526086.tif 000015