(58)【調査した分野】(Int.Cl.,DB名)
複数のプロセッサ・コアをサポートする複数の垂直方向キャッシュ階層、システム・メモリ、及び前記システム・メモリ及び前記複数の垂直方向キャッシュ階層に結合されたシステム相互接続を含むマルチプロセッサ・データ処理システムにおけるデータ処理の方法であって、
第1のプロセッサ・コアからのload−and−reserve(ロード及び予約)要求の受信に応答して、前記第1のプロセッサ・コアをサポートする第1の垂直方向キャッシュ階層内の第1のキャッシュ・メモリが、前記システム相互接続上で、前記load−and−reserve要求のターゲット・キャッシュ・ラインについてのメモリ・アクセス要求を発行することと、
前記メモリ・アクセス要求に応答して、前記メモリ・アクセス要求に対するシステム全体のコヒーレンス応答を受信する前に、前記第1のキャッシュ・メモリが、キャッシュ間介入により、第2の垂直方向キャッシュ階層内の第2のキャッシュ・メモリから、前記ターゲット・キャッシュ・ライン及び前記メモリ・アクセス要求に対する前記システム全体のコヒーレンス応答の早期表示を受信することと、
前記システム全体のコヒーレンス応答の前記早期表示に応答して、前記システム全体のコヒーレンス応答を受信する前に、前記第1のキャッシュ・メモリが、前記第1のキャッシュ・メモリ内の前記ターゲット・キャッシュ・ラインを更新するための処理を開始することと、
を含む、方法。
前記システム全体の結合応答を受信する前に、前記第1のキャッシュ・メモリが、前記ターゲット・キャッシュ・ラインを第3の垂直方向キャッシュ階層内の第3のキャッシュ・メモリに供給することをさらに含む、請求項1に記載の方法。
前記システム全体のコヒーレンス応答の前記早期表示の受信に応答して、前記第1のキャッシュ・メモリが、前記ターゲット・キャッシュ・ラインのコヒーレンス所有権の取得を保護する保護ウィンドウを開始することと、
前記第1のキャッシュ・メモリが前記第1のプロセッサ・コアからのstore−conditional(条件付きストア)要求の受信を待つ、前記load−and−reserve要求の処理後の少なくとも待機間隔の間、前記保護ウィンドウを継続することと、
をさらに含む、請求項1に記載の方法。
前記store−conditional要求の処理の完了に応答して、前記システム全体のコヒーレンス応答の前記第1のキャッシュ・メモリによる受信とは非同期的に前記保護ウィンドウを終了することをさらに含む、請求項3に記載の方法。
前記第1のキャッシュ・メモリが、前記第1のプロセッサ・コアからの前記load−and−reserve要求の受信に応答して前記要求を管理するように、読み取り・クレーム状態マシンを割り当てることと、
前記第1のキャッシュ・メモリが、前記システム全体のコヒーレンス応答の受信及び前記保護ウィンドウの終了の後の発生に応答して、前記読み取り・クレーム状態マシンを割り当て解除することと、
をさらに含む、請求項3に記載の方法。
前記第1のキャッシュ・メモリが前記第1のキャッシュ・メモリ内の前記ターゲット・キャッシュ・ラインを更新するための処理を開始することは、前記第1のキャッシュ・メモリが、前記第1のプロセッサ・コアのstore−conditional要求の受信に応答して前記第1のキャッシュ・メモリ内の前記ターゲット・キャッシュ・ラインを更新するための処理を開始することを含む、請求項1に記載の方法。
前記第1のキャッシュ・メモリは、前記システム全体のコヒーレンス応答を受信する前に、前記ターゲット・キャッシュ・ラインを第3の垂直方向キャッシュ階層内の第3のキャッシュ・メモリに供給するようにさらに構成される、請求項8に記載の処理ユニット。
前記第1のキャッシュ・メモリは、前記store−conditional要求の処理の完了に応答して、前記システム全体のコヒーレンス応答の前記第1のキャッシュ・メモリによる受信とは非同期的に前記保護ウィンドウを終了するようにさらに構成される、請求項10に記載の処理ユニット。
前記第1のキャッシュ・メモリは、前記第1のプロセッサ・コアのstore−conditional要求の受信に応答して前記第1のキャッシュ・メモリ内の前記ターゲット・キャッシュ・ラインを更新するための処理を開始するようにさらに構成される、請求項8に記載の処理ユニット。
【発明を実施するための形態】
【0013】
ここで図面を、特に
図1を参照すると、1つの実施形態による、マルチプロセッサ・データ処理システムの処理ユニット100の例示的な実施形態の高レベル・ブロック図が示される。示される実施形態において、処理システム100は、命令及びデータを独立して処理するための2つのプロセッサ・コア102a、102bを含む単一の集積回路である。(もちろん、他の実施形態において、プロセッサ・コア102の数は変化し得る。)各プロセッサ・コア102は、実行する命令をフェッチし順序付けるための命令順序付けユニット(instruction sequencing unit、ISU)と、命令を実行するための1つ又は複数の実行ユニット106とを含む。例えば、実行ユニット106は、1つ又は複数の浮動小数点ユニット(FPU)、1つ又は複数のロード・ストア・ユニット(LSU)、及び1つ又は複数の整数ユニット(IU)を含むことができる。実行ユニット106により実行される命令は、例えば、固定及び浮動小数点算術演算、論理命令、及びメモリ・ブロックへの読み取り及び/又は書き込みアクセスを要求する命令を含むことができる。
【0014】
各プロセッサ・コア102a、102bの動作は、マルチレベル・メモリ階層によりサポートされており、このメモリ階層は、その最下位レベルに1つ又は複数の共有システム・メモリ132(その1つだけが
図1に示される)、及び、その上位レベルに1つ又は複数のレベルのキャッシュ・メモリを含む垂直方向キャッシュ・メモリ階層を有する。示されるように、処理ユニット100は、スヌーパ(snooper)126により(以下に説明される)相互接続ファブリック上のスヌープされる動作に応答して、システム・メモリ132への読み取り及び書き込みアクセスを制御する統合されたメモリ・コントローラ(IMC)124を含む。
【0015】
例示的な実施形態において、処理ユニット100の垂直方向キャッシュ・メモリ階層は、各プロセッサ・コア102a、102b内のストア・スルー(store-through)レベル1(L1)キャッシュ108と、処理ユニット100の全てのプロセッサ・コア102a、102bにより共有されるレベル2(L2)キャッシュ110とを含む。(他の実施形態においては、各プロセッサ・コア102は、それぞれのプライベートL2キャッシュ110を有し得る。)示されるキャッシュ階層は、2つのレベルのキャッシュ・メモリだけを含むが、当業者であれば、代替的な実施形態では、上位レベルのキャッシュのコンテンツを完全に含む、部分的に含む、又は全く含まない、オンチップ若しくはオフチップのインライン、又はルックアサイド・キャッシュの付加的なレベル(レベル3(L3)、レベル4(L4)等)を含み得ることを理解するであろう。
【0016】
図1にさらに示されるように、処理ユニット100は、処理ユニット100をより大きなマルチプロセッサ・データ処理システムの相互接続ファブリックに結合することができる統合された相互接続論理120を含む。示される実施形態では、相互接続論理120は、この場合にはインバウンド及びアウトバウンド「X」、「Y」及び「Z」リンクを含む、「第1の層(tier)」の相互接続リンクの任意の番号t1をサポートする。相互接続論理120は、インバウンド及びアウトバウント「A」及び「B」リンクとして、
図1に示される第2の層リンクの任意の数t2をさらにサポートする。これらの第1及び第2の層のリンクにより、t1/2+t2/2(この場合は5)までの他の処理ユニット100への双方向通信のために、各処理ユニット100を結合することができる。相互接続論理120は、相互接続上での動作の異なる段階中の情報を処理し転送するために、要求論理(「R」と表記される)121a、部分応答論理(「P」と表記される)121b、結合応答論理(「C」と表記される)121c、及びデータ論理(「D」と表記される)121dを含む。さらに、相互接続論理120は、処理ユニット100を構成するために用いられる複数のモード・ビットを含む構成レジスタ(「CR」と表記される)123を含む。これらのモード・ビットは、好ましくは、(1)第1及び第2の層のリンクのための所望のリンク情報割り当てを選択する1つ又は複数のモード・ビットの第1の組と、(2)処理ユニット100の第1及び第2の層リンクのうちのどちらを他の処理ユニット100に接続するのかを指定するモード・ビットの第2の組と、(3)保護ウィンドウ拡張のプログラム可能な期間を決定するモード・ビットの第3の組とを含む。
【0017】
各処理ユニット100は、さらに、処理ユニット100のキャッシュ階層と他の処理ユニット100のキャッシュ階層との間のキャッシュ・コヒーレンシを維持するスヌープ・ベースの分散型コヒーレンシ信号機構の一部を実施する応答論理122のインスタンスを含む。最後に、各処理ユニット100は、I/Oデバイス130のような1つ又は複数のI/Oデバイスの取り付けをサポートする統合されたI/O(入力/出力)コントローラ128を含むことができる。I/Oコントローラ128は、I/Oデバイス130による要求に応じて「X」、「Y」、「Z」、「A」及び「B」リンク上で動作を発行し、データを受信することができる。
【0018】
ここで
図2を参照すると、本発明による、複数の処理ユニット100を含むデータ処理システム200の例示的な実施形態のブロック図が示される。示されるように、データ処理煤200は、それぞれ4つの処理ユニット100を含むパッケージを備えるマルチチップ・モジュール(MCM)として実現することができる、8つの処理ノード202a0〜202d0及び202a1〜202d1を含む。各処理ノード202内の処理ユニット100は、示されるように、処理ユニット「X」、「Y」及び「Z」リンクによりポイント・ツー・ポイント通信のために結合している。各処理ユニット100は、さらに、処理ユニット「A」及び「B」リンクによるポイント・ツー・ポイント通信のために、2つの異なる処理ノード202内で処理ユニット100に結合することができる。
図2においては両方に矢先のある矢印で示されるが、「X」、「Y」、「Z」、「A」及び「B」の各対は、好ましくは(しかし、必ずしもそうである必要はないが)、双方向リンクとしてではなく、2つの単方向リンクとして実施することを理解されたい。
【0019】
図2に示されるトポロジを形成するための一般的な表現は、下記のように与えることができる。:
Node[I][K].chip[J].link[K]は、Node[J][K].chip[I].link[K]に接続し(全てのI≠Jに対して);及び
Node[I][K].chip[I].link[K]は、Node[I][notK].chip[I].link[not K]に接続し;及び
Node[I][K].chip[I].link[not K]は、
(1)何にも接続されない(将来の拡張のために予約される);又は
(2)全てのリンクが完全に使用される(すなわち、72方向のシステムを形成する9つの8方向ノード)場合、Node[extra][not K].chip[I].link[K]に接続される;
ここで、I及びJは、セット{a,b,c,d}に属し、Kは、セット{0,1}に属する。
【0020】
もちろん、他の機能的に等価のトポロジを形成するために代替的な表現も定めることができる。さらに、図示のトポロジは代表的なものであるが、本発明を実施するデータ処理システム・トポロジを網羅しているものではないこと、及び他のトポロジも可能であることを理解されたい。こうした代替的なトポロジでは、例えば、各処理ユニット100と結合する第1の層のリンク及び第2の層のリンクの数は、任意の数とすることができ、各層(すなわち、I)内の処理ノード202の数は、処理ノード100(すなわち、J)ごとの処理ユニット100の数と等しくなくてもよい。
【0021】
当業者であれば、SMPデータ処理システム100は、相互接続ブリッジ、不揮発性ストレージ、ネットワークへの接続のためのポート、又は接続されたデバイス等のような、多くの図示していない付加的なコンポーネントを含むことができることを理解するであろう。こうした付加的なコンポーネントは、本発明を理解するのに必要ではないので、
図2には示しておらず、又は本明細書でこれ以上説明しない。
【0022】
ここで
図3を参照すると、
図2のデータ処理システム200の相互接続ファブリック上の例示的な相互接続動作の時間空間図が示される。相互接続動作は、マスタ300(例えば、L2キャッシュ110の読み取り・クレーム(RC)マシン512(例えば、
図5を参照されたい)又はI/Oコントローラ128内のマスタ)が、相互接続ファブリック上で要求302を発行した場合に開始する。好ましくは、要求302は、少なくとも所望のアクセスのタイプ、及び要求によりアクセスされるリソースを示すリソース識別子(例えば、ターゲット実アドレス)を含む。要求の共通のタイプは、表1において以下に記載される。
【表1】
【0023】
これらの動作に関するこれ以上の詳細及びこれらの動作の効率的な処理を容易にする例示的なキャッシュ・コヒーレンシ・プロトコルは、全ての目的のためにその全体が引用により本明細書に組み入れられる特許文献1に見出すことができる。
【0024】
要求302は、データ処理システム200の全体にわたって分散されるスヌーパ304(例えば、L2キャッシュ110のスヌープ・マシン511(例えば、
図5を参照されたい)及びIMC124のスヌーパ126)により受信される。一般に、幾つかの例外はあるが、要求302のマスタ300としての同じL2キャッシュ110内のスヌーパ304は、要求302をスヌープしない(すなわち、一般に、自己スヌーピングは行われない)が、それは、要求302が処理ユニット100により内部でサービスを受けることができない場合、要求302は相互接続ファブリックだけにより送信されるからである。要求302を受信し処理するスヌーパ304は各々、要求302への少なくともそのスヌーパ304の応答を表すそれぞれの部分応答(Presp)306を提供する。IMC124内のスヌーパ126は、例えば、スヌーパ126が要求アドレスを担当しているかどうか、及びが要求にサービスするために使用可能なリソースを有しているかどうかに基づいて提供する部分応答306を決定する。L2キャッシュ110は、例えば、要求を処理するためのスヌープ・マシン511の可用性、そのL2キャッシュ・ディレクトリ508(例えば、
図5を参照されたい)の可用性、及びL2キャッシュ・ディレクトリ508内のターゲット実アドレスと関連したコヒーレンシ状態に基づいて、その部分応答306を決定することができる。
【0025】
スヌーパ304の部分応答306は、要求302に対するシステム全体の結合応答(Cresp)310を決定するために、応答論理122の1つ又は複数のインスタンスにより、幾つかの段階で又は同時に論理的に結合される。以下に想定される1つの実施形態において、Cresp310の生成を担当する応答論理122のインスタンスは、要求302を発行したマスタ300を含む処理ユニット100内に位置する。応答論理122は、要求302へのシステム全体のコヒーレンス応答(例えば、成功、失敗、再試行等)を示すために、相互接続ファブリックを介して、マスタ300及びスヌーパ304にCresp310を提供する。Cresp310が要求302の成功を示している場合には、Cresp310は、例えば、要求302のターゲット・メモリ・ブロックのデータ・ソース、要求したメモリ・ブロックがマスタ300(又は、他のキャッシュ)によりキャッシュされるコヒーレンス状態、及び1つまたは複数のキャッシュ内で要求したメモリ・ブロックを無効にする「クリーンアップ」動作が必要であるかどうかを示すことができる。
【0026】
Cresp310の受信に応答して、1つ又は複数のマスタ300及びスヌーパ304は、通常、要求302にサービスするために1つ又は複数の付加的なアクションを行う。これらの付加的なアクションは、マスタ300にデータを供給すること、1つ又は複数のL2キャッシュ110内にキャッシュしたデータのコヒーレンス状態を無効にするか、又は他の方法で更新すること、キャストアウト(castout)動作を行うこと、システム・メモリ132にデータをライトバックすること等を含むことができる。要求302により要求された場合、要求された又はターゲット・メモリ・ブロックを、応答論理122によるCresp310の発生の前又は後で、マスタ300との間で送信することができる。
【0027】
以下の説明において、要求302に対するスヌーパ304の部分応答306、及び要求302及び/又はその結合応答310に応じてスヌーパ304が行ったアクションを、そのスヌーパが、要求が指定した要求(ターゲット)アドレスに対して、最高コヒーレンシ点(HPC)であるか、最低コヒーレンシ点(LPC)であるか、又はいずれでもないかを参照しながら説明する。本明細書においては、LPCは、メモリ・ブロックのリポジトリとして働くメモリ・デバイス又はI/Oデバイスとして定義される。メモリ・ブロックに対するHPCが存在しない場合には、LPCはメモリ・ブロックの真のイメージを保持し、メモリ・ブロックの付加的なキャッシュ・コピーを生成する要求を許可又は拒否する権限を有する。
図1及び
図2のデータ処理システムの実施形態の典型的な要求の場合には、LPCは、参照したメモリ・ブロックを保持しているシステム・メモリ132に対するメモリ・コントローラ124である。本明細書においては、HPCは、メモリ・ブロックの真のイメージをキャッシュする一意に識別されたデバイスとして定義され(LPCにおける対応するメモリ・ブロックと一貫していることも又は一貫していないこともある)、メモリ・ブロックを修正する要求を許可又は拒否する権限を有する。説明すると、HPCはまた、メモリ・ブロックを修正しない動作に応じて要求側にメモリ・ブロックのコピーを提供することもできる。従って、
図1及び
図2のデータ処理システムの実施形態の典型的な要求の場合には、HPCは、もしある場合には、L2キャッシュ110である。メモリ・ブロックのHPCを指定するために他のインジケータも使用することができるが、本発明の好ましい実施形態は、もしあった場合、メモリ・ブロックに対するHPCをL2キャッシュ110のキャッシュ・ディレクトリ内の選択したキャッシュ・コヒーレンシ状態により示す。
【0028】
さらに
図3を参照すると、要求302内で参照したメモリ・ブロックに対するHPCがもし存在する場合には、又はHPCが存在しない場合には、好ましくは、メモリ・ブロックのLPCは、必要な場合には、要求302への応答内のメモリ・ブロックのコヒーレンス所有権の移転を保護する責任を有する。
図3に示される例示的なシナリオにおいては、要求302の要求アドレスが指定するメモリ・ブロックに対するHPCにおけるスヌーパ304n(又は、HPCが存在しない場合には、LPC)は、スヌーパ304nがその部分応答306を決定した時点からスヌーパ304nがCresp310を受信するまで継続する保護ウィンドウ312aの間、及びスヌーパ304nによるCresp310の受信を超えてプログラム可能な時間が延びる以降のウィンドウ延長部312bの間、マスタ300への要求された(ターゲット)メモリ・ブロックのコヒーレンス所有権の移転を保護する。保護ウィンドウ312a及びウィンドウ延長部312bの間、スヌーパ304nは、同じ要求アドレスを指定している他の要求に部分応答306(例えば、再試行部分応答)を提供することにより、スヌーパ304nからマスタ300へのターゲット・メモリ・ブロックのコヒーレンス所有権の移転を保護する。こうした部分応答306は、コヒーレンス所有権がスヌーパ304nからマスタ300へ成功裏に移転されるまで、ターゲット・メモリ・ブロックのコヒーレンス所有権を取得するのを防止する。必要な場合、結合応答310を受信した後、マスタ300は、同様に、ターゲット・メモリ・ブロックのコヒーレンス所有権の取得を保護するために、保護ウィンドウ313を開始する。保護ウィンドウ313は、ターゲット・メモリ・ブロックを後で要求するいずれのマスタも、古い値ではなく、マスタ300が作成したターゲット・メモリ・ブロックのいずれかの新しい値を受信することを保証する。
【0029】
スヌーパ304はいずれもCPU及び/又は上述のI/O要求を処理するためのリソースが限られているので、幾つかの異なるレベルの部分応答及び対応するCrespが可能である。例えば、要求されたメモリ・ブロックを担当するメモリ・コントローラ124内のスヌーパ126が、要求を処理するために使用可能なキューを有する場合には、スヌーパ126は、要求に対してLPCとして働くことができることを示す部分応答で応答することができる。一方、スヌーパ126が要求を処理するために使用可能なキューを有していない場合には、スヌーパ126は、メモリ・ブロックに対するLPCであることを示す部分応答で応答することができるが、現時点で要求にサービスすることはできない。同様に、L2キャッシュ110は、要求を処理するために、使用可能なスヌープ・マシン511を要求し、L2キャッシュ・ディレクトリ508にアクセスすることができる。これらのリソースのいずれか(又は両方)にアクセスしない場合には、必要なリソースがないために要求にサービスすることができないことを知らせる部分応答(及び対応するCresp)をもたらす。
【0030】
図3にさらに示されるように、スヌーパ304nは、マスタ300が応答論理122からCresp(READ又はRWITM要求に対する)を受信する前又は後に、データ(例えばREAD又はRWITM要求に対する)をマスタ300(例えば、L2キャッシュ110)に返すことができる。
【0031】
ここで
図4を参照すると、
図2のデータ処理システム200内の例示的な動作フローの時間空間図が示される。これらの図において、データ処理システム200内の種々の処理ユニット100には、2つの位置識別子、すなわち処理ユニット100が属する処理ノード202を識別するための第1の位置識別子、及び処理ノード202内の特定の処理ユニット100を識別するための第2の識別子がタグ付けされている。従って、例えば、処理ユニット100a0cは、処理ノード202a0の処理ユニット100cを示す。さらに、各処理ユニット100には、動作に関与する他の処理ユニット100に対するその機能を示す機能識別子がタグ付けされている。これらの機能識別子は、(1)動作を開始する処理ユニット100を指定するローカル・マスタ(LM)、(2)ローカル・マスタと同じ処理ノード202内にあり、別の処理ノード202への動作の送信を担当するローカル・ハブ(LH)(ローカル・マスタは、ローカル・ハブであってもよい)、(3)ローカル・マスタとは異なる処理ノード202内にあり、その処理ノード202内の他の処理ユニット100への動作の分散を担当する遠隔ハブ(RH)、及び(4)ローカル・マスタとは異なる処理ノード202内に位置し、遠隔ハブではない処理ユニット100を指定する遠隔リーフ(RL)を含む。
【0032】
図4に示されるように、
図3を参照して上述したように、例示的な動作は、少なくとも3つの段階、すなわち、要求(又は、アドレス)段階、部分応答(Presp)段階、及び結合応答(Cresp)段階を有する。好ましくは、これらの3つの段階は、上記の順序で行われ、重ならない。動作はさらに、随意的に、要求、部分応答及び結合応答段階のうちのいずれかと重なることができるデータ段階を有することができる。
【0033】
さらに
図4を参照すると、要求段階は、ローカル・マスタ100a0c(すなわち、処理ノード202a0の処理ユニット100c)が、例えば、読み取り要求のような要求を、その処理ノード202a0内のローカル・ハブ100a0a、100a0b、100a0c及び100a0dのそれぞれに同期ブロードキャストした場合に開始する。ローカル・ハブのリストは、同じくローカル・マスタであるローカル・ハブ100a0cを含むことに留意されたい。この内部送信は、タイミング制約がより容易に満たされ得るように、ローカル・ハブ100a0cの動作をローカル・ハブ100a0a、100a0b及び100a0dと同期させるために有利に使用される。
【0034】
要求の受信に応答して、その「A」又は「B」リンクにより遠隔ハブ100と結合している各ローカル・ハブ100は、動作をその遠隔ハブ100に送信する。従って、ローカル・ハブ100a0aは、そのアウトバウンド「A」リンクにより動作を送信しないで、そのアウトバウンド「B」リンクを介して処理ノード202a1内の遠隔ハブに動作を送信する。ローカル・ハブ100a0b、100a0c及び100a0dは、それぞれのアウトバウンド「A」及び「B」リンクを介して、処理ノード202b0及び202b1、処理ノード202c0及び202c1、及び処理ノード202d0及び202d1内の遠隔ハブに動作を送信する。動作を受信する各遠隔ハブ100は、順次、その処理ノード202内の各リモート・リーフ100に動作を送信する。従って、例えば、遠隔ハブ100b0aは、遠隔リーフ100b0b、100b0c及び100b0dに動作を送信する。このようにして、動作は、3つ以下のリンクによる送信を用いてデータ処理システム200内の全ての処理ユニット100に効率的にブロードキャストされる。
【0035】
要求段階の後で、部分応答(Presp)段階が行われる。部分応答段階中に、各遠隔リーフ100は、動作を評価し、動作へのその部分応答をそれぞれの遠隔ハブ100に提供する。例えば、遠隔リーフ100b0b、100b0c及び100b0dは、それぞれの部分応答を遠隔ハブ100b0aに送信する。各遠隔ハブ100は、順次、ローカル・ハブ100a0a、100a0b、100a0c及び100a0dそれぞれに、その部分応答、並びにそれ自身の部分応答を送信する。次に、ローカル・ハブ100a0a、100a0b、100a0c及び100a0dは、処理ノード202a0内の各ローカル・ハブ100に、これらの部分応答並びにそれ自身の部分応答をブロードキャストする。処理ノード202a0内のローカル・ハブ100による部分応答のブロードキャストは、タイミング上の理由で、それ自身の部分応答の各ローカル・ハブ100による自己ブロードキャストを含むことに留意されたい。
【0036】
理解されるように、示される方法における部分応答の収集は、多数の異なる方法により実施することができる。例えば、個々の部分応答を、もとの各々の他のローカル・ハブ、遠隔ハブ及び遠隔リーフから各ローカル・ハブに伝達することが可能である。代替的に、より効率的にするために、部分応答がもとのローカル・ハブに伝達されたとき、部分応答を蓄積することが望ましい場合がある。各部分応答の効果が、正確にもとのローカル・ハブ100に伝達されることを保証するために、例えば、論理OR機能及びこうした機能(例えば「ワン・ホット(one-hot)」コード化)を受ける場合に関連する情報が喪失しないコード化により、非破壊的な方法で、もしある場合には、部分応答を蓄積することが好ましい。
【0037】
図4にさらに示されるように、処理ノード202a0内の各ローカル・ハブ100における応答論理122は、要求へのシステム全体のコヒーレンス応答を示す結合応答を得るために、他の処理ユニット100の部分応答をコンパイルする。次に、ローカル・ハブ100a0a〜100a0dは、要求段階の際に使用したのと同じ分散経路を通して、全ての処理ユニット100に結合応答をブロードキャストする。従って、結合応答は、遠隔ハブ100への最初のブロードキャストであり、遠隔ハブ100は、次に、それぞれの処理ノード202内の各遠隔リーフ100に結合応答を送信する。例えば、ローカル・ハブ100a0bは、遠隔ハブ100b0aに結合応答を伝送し、遠隔ハブ100b0aは次に、遠隔リーフ100b0b、100b0c、及び100b0dに結合応答を送信する。
【0038】
上述のように、動作のサービスは、付加的なデータ段階を必要とすることがある。例えば、動作が、READ又はRWITM動作のような読み取りタイプの動作である場合には、遠隔リーフ100b0dは、遠隔リーフ100b0dを遠隔ハブ100b0aへ、遠隔ハブ100b0aをローカル・ハブ100a0bへ、そしてローカル・ハブ100a0bをローカル・マスタ100a0cへ接続するリンクを介して、要求されるメモリ・ブロックをローカル・マスタ100a0cに供給することができる。逆に、動作が、例えば、修正したメモリ・ブロックを遠隔リーフ100b0bのシステム・メモリ132にライトバックするキャッシュ・キャストアウト動作のような書き込みタイプの動作である場合には、メモリ・ブロックは、ローカル・マスタ100a0cをローカル・ハブ100a0bへ、
ローカル・ハブ100b0bを遠隔ハブ100b0aへ、そして遠隔ハブ100b0aを遠隔リーフ100b0bへ接続するリンクを介してメモリ・ブロックが送信される。
【0039】
もちろん、
図4に示されるシナリオは、データ処理システム200のようなマルチプロセッサ・データ処理システム内で同時に起こり得る無数の可能な動作の単なる例示に過ぎない。
【0040】
図3を参照して上述されるように、保護ウィンドウ312a、ウィンドウ拡張部312b、及び保護ウィンドウ313を通じて、同じメモリ・ブロックの所有権について競合する他のマスタが存在する可能性がある場合には、スヌーパ304nから要求中のマスタ300へのメモリ・ブロックのコヒーレンス所有権の「ハンドオフ」の間、コヒーレンシが維持される。例えば、保護ウィンドウ312a及びウィンドウ拡張部312bの両方は、競合するマスタ(CM)による競合する要求の存在下で、ウィニング・マスタ(WM)300に要求されたメモリ・ブロックのコヒーレンス所有権の移転を保護するのに十分な持続時間を有するものでなければならない。保護ウィンドウ312a及びウィンドウ拡張部312bが、ウィニング・マスタ300へ要求されたメモリ・ブロックの所有権の移転を保護するための十分な持続時間を有することを保証するために、好ましくは、
図4による処理ユニット100間の通信の待ち時間は、下記の条件が満たされるように制約する。
A_lat(CM_S)≦A_lat(CM_WM)+C_lat(WM_S)+ε
ここで、A_lat(CM_S)は、要求されたメモリ・ブロックのコヒーレンスを所有するスヌーパ(S)304nへの任意の競合マスタ(CM)のアドレス待ち時間であり、A_lat(CM_WM)は、スヌーパ304nにより与えられたコヒーレンス所有権である「ウィニング」マスタ(WM)300への任意の競合マスタ(CM)のアドレス待ち時間であり、C_lat(WM_S)は、ウィニング・マスタ(WM)300が結合応答を受信した時間から、要求したメモリ・ブロックを所有するスヌーパ(S)304nが結合応答を受信した時間までの結合応答の待ち時間であり、εはウィンドウ拡張部312bの持続時間である。
【0041】
任意のトポロジのシステムに適用することができる上記のタイミング制約を満たさない場合には、(1)ウィニング・マスタ300がコヒーレンス所有権を獲得し、保護ウィンドウ312aを開始する前に、ウィニング・マスタにより、(2)保護ウィンドウ312a及びウィンドウ拡張部312bが終了した後でスヌーパ304nにより、競合マスタの要求を受信することができる。このような場合、ウィニング・マスタ300もスヌーパ304nも、競合マスタ320がメモリ・ブロックのコヒーレンス所有権を獲得し、コヒーレントでないデータをメモリから読み取るのを防止する部分応答を競合要求に提供しない。しかしながら、このコヒーレンシ・エラーを避けるために、ウィンドウ拡張部312bは、待ち時間の変動、又はコヒーレンシを維持するために満たさなければならないタイミング制約をそうでなければ満たすことができない物理的実装の欠点を補償するために、(例えば、構成レジスタ(CR)123を適切に設定することにより)任意の長さ(ε)にプログラムすることができるように設定することができる。従って、εについての上式を解くことにより、任意の実装に対するウィンドウ延長部312bの理想的な長さを決定することができる。
【0042】
上記のタイミング制約に関して、幾つかの観察を行うことができる。最初に、競合マスタから所有するスヌーパ304aへのアドレス待ち時間は、必要な下限を有していないが、上限を持たなければならない。上限は、とりわけ、達成することができる最悪の場合の待ち時間を決定することにより、可能な最大オシレータ・ドリフト、処理ユニット100に結合している最長のリンク、蓄積したストールの最大数、及び保証された最悪の場合のスループットに対して設計される。上限が観察されることを保証するために、相互接続ファブリックは、ノンブロッキング(non-blocking)動作を保証しなければならない。
【0043】
第2に、競合マスタからウィニング・マスタ300へのアドレス待ち時間は、必要な上限を有していないが下限を持たなければならない。下限は、とりわけ達成することができる最善の場合の待ち時間により、特定の静的構成の場合の、ストールがない場合、処理ユニット100間の可能な最短リンク、及び最も遅いオシレータ・ドリフトに対して決定される。所与の動作の場合、ウィニング・マスタ300及び競合マスタの各々は、それぞれの要求に対して1つのタイミング限界だけを有しているが、動作中、任意の処理ユニット100は、幾つかの動作のためのウィニング・マスタであってもよく、他の動作のための競合(及びルージング)マスタであってもよいことが理解されるであろう。従って、各処理ユニット100は、そのアドレス待ち時間に対して上限及び下限を効果的に有する。
【0044】
第3に、結合応答が発生した時間からウィニング・マスタ300により結合応答が観察された時間までの結合応答待ち時間は、必要な下限を持たないが(結合応答は、任意の早い時点でウィニング・マスタ300のところに到着することができる)、上限を持たなければならない。対照的に、結合応答が発生した時間からスヌーパ304nが結合応答を受信した時間までの結合応答待ち時間は、下限を有しているが必要な上限を有していない(しかし、イン・フライト(in flight)状態で同時に行われる動作の回数を制限するために、ある上限を任意に課することができる)。
【0045】
第4に、部分応答待ち時間には制限がない。すなわち、上に列挙したタイミング制約の全ての項は、要求/アドレス待ち時間及び結合応答待ち時間に関連しているので、ウィニング・マスタ300へのスヌーパ304及び競合マスタ300の部分応答待ち時間は、必要な上限又は下限を持たない。
【0046】
処理ユニット100を接続している第1の層及び第2の層のリンクは、
図2に示されるトポロジを取得し、タイミング制約に適合するための種々の方法により実施することができる。1つの好ましい実施形態においては、各インバウンド及びアウトバウンドの第1の層(「X」、「Y」、及び「Z」)リンク、並びに各インバウンド及びアウトバウンドの第2の層(「A」及び「B」)リンクは、アドレス、データ、制御及びコヒーレンシ情報を運ぶための多数の異なる仮想チャネル又は保有期間を含む単方向8バイト・バスとして実装される。
【0047】
ここで
図5を参照すると、1つの実施形態による、例示的なL2キャッシュ110のより詳細なブロック図が示される。
図5に示されるように、L2キャッシュ110は、キャッシュ・アレイ502と、キャッシュ・アレイ502のコンテンツのディレクトリ508とを含む。明白には示されないが、キャッシュ・アレイ502は、キャッシュ・アレイ502を実装するために必要とされるダイ領域を減らすように、単一の読み取りポート及び単一の書き込みポートを有するように実装されることが好ましい。
【0048】
キャッシュ・アレイ502及びディレクトリ508が従来のもののようにセット・アソシアティブ方式(set-associative)であると仮定すると、システム・メモリ132内の記憶場所は、システム・メモリ(実)アドレス内の所定のインデックス・ビットを用いて、キャッシュ・アレイ502内の特定の合同クラスにマッピングされる。キャッシュ・アレイ502のキャッシュ・ライン内に格納された特定のメモリ・ブロックは、各々のキャッシュ・ライン毎に1つのディレクトリ・エントリを含むキャッシュ・ディレクトリ508内に記録される。
図5には明白に示されないが、キャッシュ・ディレクトリ508内の各ディレクトリ・エントリは、例えば、キャッシュ・アレイ502の対応するキャッシュ・ライン内に保持されるメモリ・ブロックの実アドレスを識別するタグ・フィールド、キャッシュ・ラインのコヒーレンシ状態を示す状態フィールド、及び同じ合同クラス内の他のキャッシュ・ラインに対するキャッシュ・ラインの置換順序を示す最長時間未使用(least recently used、LRU)フィールドを含むことが、当業者により理解されるであろう。
【0049】
L2キャッシュ110は、関連のあるプロセッサ・コア102から受信したロード(LD)要求及びストア(ST)要求に独立して同時にサービスする、複数の(例えば、16又は32個の)読み取り・クレーム(RC)マシン512a〜512nを含む。さらに、L2キャッシュ110は、関連のあるプロセッサ・コア102以外のプロセッサ・コア102から発する遠隔メモリ・アクセス要求にサービスするために、複数の(例えば、16又は32個の)スヌープ・マシン511a〜511mを含む。各スヌープ・マシン511は、ローカル相互接続514から「スヌープされた」遠隔メモリ・アクセス要求を独立して同時に処理することができる。理解されるように、L2キャッシュ110によるメモリ・アクセス要求のサービスが、キャッシュ・アレイ502内のメモリ・ブロックの置換又は無効化を必要とすることがある。従って、L2キャッシュ110は、キャッシュ・アレイ502からのメモリ・ブロックの除去及びライトバックを管理するCO(キャストアウト)マシン510a〜510nを含む。
【0050】
L2キャッシュ110または、RCキュー520と、それぞれのバッファ・データがキャッシュ・アレイ502内に挿入され、そこから除去されるCPI(castout push intervention)キュー518も含む。RCキュー520は、各々がRCマシン512の特定のものに対応する多数のバッファ・エントリを含むので、ディスパッチされる各RCマシン512は、指定されたバッファ・エントリのみからデータを取り出す。同様に、CPIキュー518は、各々がキャストアウト・マシン510及びスヌープ・マシン511の特定のものに個々に対応する多数のバッファ・エントリを含むので、各COマシン510及びディスパッチされた各スヌーパ511は、それぞれの指定されたCPIバッファ・エントリのみからデータを取り出す。
【0051】
各RCマシン512にはまた、再ロード・バス523を介して、キャッシュ・アレイ502から読み取った及び/又はローカル相互接続514から受信したメモリ・ブロックをバッファリングするための複数のRCデータ(RCDAT)バッファ522のそれぞれが割り当てられる。各RCマシン512に割り当てられたRCDATバッファ522は、関連したRCマシン512によりサービスされ得るメモリ・アクセス要求に対応する接続及び機能を有するように構成されることが好ましい。RCDATバッファ522の少なくとも幾つかは、アービタ(arbiter)505により生成された図示されていない選択信号に応答して、RCDATバッファ522内でバッファリングするためにその入力の中からデータ・バイトを選択する関連したストア・データ・マルチプレクサM4を有する。
【0052】
L2キャッシュ110は、関連のあるプロセッサ・コア102から受信したローカル・メモリ・アクセス要求及びローカル相互接続514上でスヌープされる遠隔要求の処理を順序付けるために、マルチプレクサM1〜M2を制御するように構成されたアービタ505をさらに含む。ローカル・ロード及びストア動作及び遠隔読み取り及び書き込み動作を含むメモリ・アクセス要求は、アービタ505が実施する調停(arbitration)ポリシーに従って転送され、パイプライン506をディスパッチし、そこで、各読み取り/ロード及びストア要求は、所定数のサイクルにわたって、ディレクトリ508及びキャッシュ・アレイ502に対して処理される。
【0053】
L2キャッシュ110は、予約論理513の実装を通じて、関連したプロセッサ・コア102によるアトミック更新を付加的にサポートし、予約論理513は、アトミック・ロード(例えば、load−and−reserve(LARX))要求により確立された予約を追跡し、予約が確立されて以来予約したキャッシュ・ラインが修正されていない場合(すなわち、関連する予約が依然として有効である場合)、対応するアトミック・ストア(例えば、store−conditional(STCX))要求のみが成功裏に完了することを保証する。典型的な実施形態において、予約論理513は、各スレッドについて、予約が確立されるキャッシュ・ラインのベース・アドレスを指定するそれぞれの予約アドレス・レジスタと、指定されたキャッシュ・ラインについての予約が依然として有効かどうかを示す予約フラグとを含む。
【0054】
動作において、トランザクション・タイプ(ttype)、ターゲット実アドレス、及びストア・データを含むプロセッサ・ストア要求が、ストア・キュー(STQ)504内の関連のあるプロセッサ・コア102から受信される。STQ504から、ストア・データは、データ経路524を介してストア・データ・マルチプレクサM4に送信され、ストア・タイプ及びターゲット・アドレスがマルチプレクサM1に渡される。マルチプレクサM1はまた、プロセッサ・コア102からプロセッサ・ロード要求を、そして、RCマシン512からディレクトリ書き込み要求を入力として受信する。アービタ505により生成される図示されない選択信号に応答して、マルチプレクサM1は、その入力要求の1つを選択してマルチプレクサM2に転送し、マルチプレクサM2はさらに、遠隔要求経路526を介して、ローカル相互接続514から受信した遠隔要求を入力として受信する。アービタ505は、処理のためにローカル及び遠隔メモリ・アクセス要求をスケジューリングし、スケジューリングに基づいて選択信号528のシーケンスを生成する。アービタ505により生成された選択信号528に応答して、マルチプレクサM2は、マルチプレクサM1から受信したローカル要求又はローカル相互接続514からスヌープされた遠隔要求のいずれかを、処理する次のメモリ・アクセス要求として選択する。
【0055】
アービタ505により処理するために選択された要求は、マルチプレクサM2によりディスパッチ・パイプライン506内に入れられる。ディスパッチ・パイプライン506は、好ましくは、固定持続時間パイプラインとして実装され、そこで、所定数のクロック・サイクルの間、複数の可能な重なる要求A、B、C等の各々が処理される。例えば、ディスパッチ・パイプライン506は、4サイクルの間、各要求を処理することができる。
【0056】
ディスパッチ・パイプライン506内の処理の第1のサイクルの間、要求アドレスを用いて1−サイクル・ディレクトリ読み取りが実行され、ディレクトリ508において要求アドレスがヒットか又はミスかを判断し、メモリ・アドレスがヒットする場合には、ディレクトリ508内のメモリ・ブロックのコヒーレンス状態を判断する。第4のサイクルのような後のサイクルにおいて、ヒット/ミスの表示及びメモリ・ブロックのコヒーレンス状態を含むディレクトリ情報は、ディレクトリ508によりディスパッチ・パイプライン506に返される。理解されるように、通常、遠隔メモリ・アクセス要求におけるミスに応答して、L2キャッシュ110においてアクションはとられず、こうした遠隔メモリ要求は、これに応じて、ディスパッチ・パイプライン506から廃棄される。しかしながら、ローカル・メモリ・アクセス要求におけるヒット若しくはミス、又は遠隔メモリ・アクセス要求におけるヒットの場合には、L2キャッシュ110は、メモリ・アクセス要求にサービスし、メモリ・アクセス要求は、処理ユニット100内で完全にサービスすることができない要求については、ファブリック・コントローラ516を介してローカル相互接続514上での通信を必要とする。
【0057】
ディスパッチ・パイプライン506内のメモリ・アクセス要求の処理中の所定の時間において、アービタ505は、アドレス及び制御経路530を介して要求アドレスをキャッシュ・アレイ502に送信して、要求アドレスが指定するメモリ・ブロックのキャッシュ読み取りを開始する。例示的な実施形態において、キャッシュ読み取りが2サイクル行われる。キャッシュ・アレイ502から読み取られたメモリ・ブロックは、データ経路542を介してエラー訂正コード(ECC)論理544に送信され、このエラー訂正コード(ECC)論理544は、メモリ・ブロックのエラーをチェックし、可能であれば、あらゆる検出されたエラーを訂正する。プロセッサ・ロード要求の場合、メモリ・ブロックは、同じくデータ経路540を介してロード・データ・マルチプレクサM3に送信され、関連のあるプロセッサ・コア102に転送される。
【0058】
ディスパッチ・パイプライン506内のメモリ・アクセス要求の処理の最後のサイクルにおいて、ディスパッチ・パイプライン506は、ディスパッチ判断を行う。例えば、ディスパッチ・パイプライン506は、(1)要求アドレスと、キャストアウト・マシン510、スヌープ・マシン511、又はRCマシン512により現在処理されている前の要求アドレスとの間のアドレス衝突の存在、(2)ディレクトリ情報、及び(3)メモリ・アクセス要求を処理するための、RCマシン512(関連のあるプロセッサ・コア102のローカル要求に対する)又はスヌープ・マシン511(遠隔プロセッサ・コアのスヌープされた要求に対する)の可用性を含む多数の基準に基づいて、ディスパッチ判断を行うことができる。ディスパッチ・パイプライン506が、メモリ・アクセス要求がディスパッチされるとのディスパッチ判断を行う場合、メモリ・アクセス要求は、必要に応じて、ディスパッチ・パイプライン506からRCマシン512又はスヌープ・マシン511にディスパッチされる。メモリ・アクセス要求がディスパッチに失敗した場合、この失敗は、再試行応答により、要求側(例えば、ローカル又は遠隔プロセッサ・コア102)に知らされる。要求側は、必要に応じて、失敗したメモリ・アクセス要求を後で再試行することができる。
【0059】
RCマシン512がローカル・メモリ・アクセス要求を処理している間、RCマシン512は、ビジー(busy)・ステータスを有し、別の要求のサービスには利用できない。RCマシン512がビジー・ステータスを有する間、RCマシン512は、必要に応じて、ディレクトリ508の関連するエントリを更新するために、ディレクトリ書き込みを行うことができる。さらに、RCマシン512は、キャッシュ・アレイ502の関連するキャッシュ・ラインを更新するために、キャッシュ書き込みを行うことができる。ディレクトリ書き込み及びキャッシュ書き込みは、ディスパッチ・パイプライン506が、ディレクトリ読み取り及びキャッシュ読み取りの固定スケジューリングに従って他の要求をまだ処理していない任意の間隔の間、アービタ505によりスケジューリングすることができる。所定の要求についての全ての動作が完了すると、RCマシン512は、非ビジー状態に戻る。
【0060】
ディレクトリ書き込み及びキャッシュ書き込みのような非固定スケジュール動作のスケジューリングは、固定スケジュールに従って処理されるものを含む他の動作のスケジューリングに影響を与え得ることが理解されるであろう。
【0061】
ここで
図6を参照すると、L2キャッシュ110のRCマシン512が相互接続動作を介して関連のあるプロセッサ・コア102のメモリ・アクセス要求にサービスする、従来のプロセスの高レベル論理フローチャートが示される。さらなる理解を促進するために、特定の動作シナリオを示すタイミング図である
図7を付加的に参照し、そこでは、相互接続動作の要求に対する結合応答を受信する前に、L2キャッシュ110は、キャッシュ間介入により、要求が指定するターゲット・キャッシュ・ラインを受信する。
【0062】
図6のプロセスは、その関連したL2キャッシュ110のディスパッチ・パイプライン506におけるプロセッサ・コア102のメモリ・アクセス要求の受信に応答して、ブロック600で開始する。次に、プロセスは、ディスパッチ・パイプライン506が、要求にサービスするために、ビジーでないRCマシン512を割り当てることを示すブロック602に進む。メモリ・アクセス要求にサービスするためにRCマシン512を割り当てることに応答して、RCマシン512はビジー状態に遷移する(RCマシン512のビジー状態は、
図7の参照番号700で示される)。
【0063】
マスタL2キャッシュ110のディレクトリ508により戻されるコヒーレンス状態が、RCマシン512がターゲット・キャッシュ・ラインのコピーを取り出すことなく、メモリ・アクセス要求にサービスすることができない(例えば、キャッシュ・ミスが発生した場合など)ことを示すと仮定すると、ブロック602において割り当てられたRCマシン512は、相互接続ファブリック上でターゲット・キャッシュ・ラインに対する適切な要求(例えば、READ又はRWITM)を発行することによって、相互接続動作を開始する(ブロック604)。
【0064】
相互接続ファブリック上での要求の発行は、
図7の参照番号702で示される。実装される相互接続トポロジに応じて、要求は、様々な異なる時間に、データ処理システム200全体にわたって分散されたスヌーパにより受信することができる(及び、受信される可能性が高い)。ターゲット・キャッシュ・ラインのためのデータ・ソースとして働くスヌーパの1つによる要求の受信は、
図7の参照番号704で具体的に示される。要求の受信に応答して、スヌーパ(この例では、HPCである、L2キャッシュ110のスヌープ・マシン511)は、ビジー状態を獲得する(スヌーパのビジー状態は、参照番号706で示される)。スヌーパはビジー状態にあるが、参照番号708で示されるように、スヌーパは、要求にサービスするために必要とされるあらゆる処理を実行する。この場合、この処理は、スヌーパによる結合応答720の受信の前に、キャッシュ間介入により、要求が指定するターゲット・キャッシュ・ラインをマスタL2キャッシュ110に提供することを含む。結合応答720の受信の後、スヌーパは、参照番号722で示されるようなウィンドウ拡張部312bの持続期間、ビジー状態のままである(従って、マスタによるターゲット・キャッシュ・ラインのコヒーレンス所有権の取得を保護する)。
【0065】
図6に戻ると、ブロック604における要求の発行の後、マスタL2キャッシュ110は、要求されるデータの戻り(例えば、HPCである、スヌーピングL2キャッシュ110からの)及び動作の結合応答(Cresp)の受信の両方を同時に監視する(ブロック606〜608)。ブロック608において、要求されるデータの前に結合応答が受信されたとL2キャッシュ110が判断することに応答して、
図6のプロセスは、ブロック610及び後のブロックに進む。明確にするために、このタイミング・シナリオは、
図7には明示的に示されない。しかしながら、ブロック606において、動作の結合応答の前に要求されるデータが受信されたとL2キャッシュ110が判断することに応答して、プロセスは、ブロック630及び後のブロックに進み、これらは、
図7をさらに参照して以下に説明される。
【0066】
最初にブロック610及び後続のブロックを参照すると、RCマシン512は、ブロック608における読み取り動作のために受信した結合応答が、要求されるデータのターゲット・キャッシュ・ラインが要求中のL2キャッシュ110に供給されることを結合応答が示すことを意味する「良好(good)」かどうかを判断する(ブロック610)。ブロック610において、結合応答が「良好」な結合応答ではないと判断することに応答して、プロセスはブロック604に進み、RCマシン512が、相互接続ファブリック上で要求を再発行することを示す。しかしながら、ブロック610において、RCマシン512が、結合応答が「良好」であると判断することに応答して、プロセスは、ブロック610からブロック612に進む。
【0067】
ブロック612は、スヌーパから要求中のL2キャッシュ110へのターゲット・キャッシュ・ラインのコヒーレンス所有権の移転を保護するために、必要に応じて、RCマシン512が保護ウィンドウ313を開くことを示す。次に、ブロック614において、データのターゲット・キャッシュ・ラインが、RCマシン512に対応するRCQ520のバッファ内に受信されるまで、プロセスが繰り返される。RCQ520におけるデータのターゲット・キャッシュ・ラインの受信に応答して、L2キャッシュ110は、要求されるデータを、RCマシン512に対応するRCDATバッファ522内に入れる(ブロック616)。さらに、ブロック618において、RCマシン512は、例えば、RCDATバッファ522から関連のあるプロセッサ・コア102への要求されるデータの転送を開始することによって、RCQ520内のバッファからキャッシュ・アレイ502へのターゲット・キャッシュ・ラインの転送を要求するキャッシュ書き込み要求をディスパッチ・パイプライン506に発行することによって、及び/又はディレクトリ508が示すターゲット・キャッシュ・ラインのコヒーレンス状態の更新を要求するディレクトリ書き込み要求をディスパッチ・パイプライン506に発行することによって、関連のあるプロセッサ・コア102のメモリ・アクセス要求にサービスするために付加的な処理を実行する。RCマシン512により実行される処理の終わりに、RC保護ウィンドウ313を閉じ(終了し)、RCマシン512が解放され、それにより、RCマシンは非ビジー状態に戻る(ブロック620)。その後、別のメモリ・アクセス要求にサービスするためにRCマシン512が割り当てられるまで、ブロック622において
図6のプロセスは終了する。
【0068】
さらに
図6を参照すると、結合応答の前に要求されるデータをL2キャッシュ110により受信することに応答して実行される処理について、ブロック630及び後のブロックを参照してここで説明される。RCQ520におけるターゲット・キャッシュ・ライン(
図7の参照番号710で示されるような)の受信に応答して、L2キャッシュ110は、要求されるデータを、RCマシン512に対応するRCDATバッファ522内に入れる(ブロック630)。次に、ブロック632で示されるように、RCマシン512は、要求に対する結合応答(例えば、
図7のCresp712を参照されたい)の受信を監視する。
図7に示されるように、幾つかの相互接続トポロジ及び/又は動作シナリオにおいて、要求の発行と結合応答の受信との間の間隔は、要求の発行とRCDATバッファ522内のターゲット・キャッシュ・ラインの受信との間の間隔より著しく長い(例えば、3倍長い)ことがある。
図7に参照番号724で示されるこれらの間隔の持続時間は、メモリ・アクセス要求にサービスするRCマシン512が有用でない仕事を実行する期間を表す。
【0069】
最終的に、
図6のブロック632において、要求の結合応答が受信されたとの判断が行われると(例えば、
図7のCresp712を参照されたい)、RCマシン512は、結合応答が「良好」な結合応答であるかどうかを判断する(ブロック634)。ブロック634において、結合応答が「良好な」結合応答でないとの判断に応答して、
図6のプロセスは、説明されたブロック604及び後のブロックに戻る。しかしながら、ブロック634において、結合応答が「良好な」結合応答であるとの判断に応答して、プロセスは、ブロック636に進む。ブロック636は、要求中のL2キャッシュ110へのターゲット・キャッシュ・ラインのコヒーレンス所有権の転送を保護するために、必要に応じて、RCマシン512が保護ウィンドウ716を開くことを示す。次に、プロセスは、説明されたブロック618〜622に進む。
図7の参照番号718で示されるように、RC保護ウィンドウ716が閉じ、RCマシン512が解放された(ブロック620に示されるように)後、ターゲット・キャッシュ・ラインを受信したマスタL2キャッシュ110は、後のマスタの要求に応じて、必要な場合、ターゲット・キャッシュ・ラインのためのデータ・ソースとして働くことができる。
【0070】
上述のように、従来のマルチプロセッサ・データ処理システムにおいて、ターゲット・キャッシュ・ラインを要求するマスタは、結合応答が受信され、ターゲット・キャッシュ・ラインのコヒーレンス所有権の取得を確認するまで、ターゲット・キャッシュ・ラインに対する処理を実行しない。これは、コヒーレンス所有権の取得を確認するコヒーレンス・メッセージの前に、マスタがデータ・ウェルのターゲット・キャッシュ・ラインを受信する動作シナリオにおいても当てはまり、その結果、RCマシン512がアクティブであり、メモリ・アクセス要求にサービスしている間、著しい非生産的期間724がもたらされる。しかしながら、本出願は、データ配信時にマスタの要求に対するシステム全体のコヒーレンス応答を知ることができる動作シナリオにおいて、この非生産的期間を低減させる又は排除することができる(従って、連続するマスタにより所定のキャッシュ・ラインを取得できる待ち時間を低減させることができる)ことを認識する。本出願はまた、全ての動作シナリオにおいて、システム全体のコヒーレンス応答を先験的に判断することはできないが、そのスヌーパ(ターゲット・キャッシュ・ラインの単一の一意のコピーを保持する)がターゲット・キャッシュ・ラインの要求の許可又は拒否を担当し、従って、結合応答を決定するので、ターゲット・キャッシュ・ラインをmodified状態(例えば、MESIの「M」状態)に保持するHPCであるスヌーパによる結合応答の受信に前に知り得ることも認識する。従って、本発明の好ましい実施形態において、HPCスヌーパは、そうすることができる場合には、ターゲット・キャッシュ・ラインと共に結合応答の早期表示を要求中のマスタに提供する。
【0071】
ここで
図8を参照すると、データ・ステータス・フィールドを用いて、要求に対するシステム全体のコヒーレンス応答の早期表示を要求中のマスタに通信することができる、
図2のデータ処理システムの相互接続ファブリック上の例示的なデータ保有期間800が示される。図示のように、例示的なデータ保有期間800は、少なくとも2つのフィールド、すなわち、データ・フィールド804と、データ・ステータス(Dstat)・フィールド802とを含み、それらは、システム相互接続上で、1又は複数のビートで通信することができる。データ・フィールド804は、データ(ターゲット・キャッシュ・ラインを含む)の1つ又は複数のキャッシュ・ラインをスヌーパから要求中のマスタに通信することができる。データ・フィールド804と共に通信されるデータ・ステータス・フィールド802を、ターゲット・キャッシュ・ラインのデータ・ソースとして働くスヌーパにより利用して、可能な場合、要求中のマスタが、ターゲット・キャッシュ・ラインについての要求に対する「良好」な結合応答を保証するかどうかの早期表示を提供することができる。幾つかの実施形態において、表示は、コヒーレンス状態の表示を含むことができる。
【0072】
ここで
図9を参照すると、L2キャッシュ110のRCマシン512が相互接続動作を介して関連のあるプロセッサ・コア102のメモリ・アクセス要求にサービスする例示的プロセスの高レベル論理フローチャートが示される。さらなる理解を促進するために、相互接続動作の要求に対する結合応答を受信する前、L2キャッシュ110は、キャッシュ間介入により、要求が指定するターゲット・キャッシュ・ラインを受信する特定の動作シナリオを示す例示的タイミング図である、
図10をさらに参照する。
【0073】
図9のプロセスは、関連したL2キャッシュ110のディスパッチ・パイプライン506におけるプロセッサ・コア102のメモリ・アクセス要求の受信に応答して、ブロック900から開始する。次に、プロセスは、ディスパッチ・パイプライン506が、要求にサービスするために非ビジー状態のRCマシン512を割り当てることを示すブロック902に進む。メモリ・アクセス要求にサービスするためのRCマシン512の割り当てに応答して、RCマシン512は、ビジー状態(RCマシン512のビジー状態は、
図10の参照番号1000で示される)に遷移する。
【0074】
マスタL2キャッシュ110のディレクトリ508により戻されるコヒーレンス状態が、RCマシン512がターゲット・キャッシュ・ラインのコピーを取り出さずに、メモリ・アクセス要求にサービスすることはできない(例えば、キャッシュ・ミスが発生した場合など)ことを示すと仮定すると、ブロック902において割り当てられたRCマシン512は、相互接続ファブリック上のターゲット・キャッシュ・ライン(例えば、READ又はRWITM)についての適切な要求を発行することによって、相互接続動作を開始する(ブロック904)。
【0075】
相互接続ファブリック上での要求の発行は、
図10の参照番号1002で示される。実装される相互接続トポロジに応じて、要求は、様々な異なる時間にデータ処理システム200全体にわたって分散されるスヌーパにより受信され得る(及び受信される可能性が高い)。ターゲット・キャッシュ・ラインのためのデータ・ソースとして働くスヌーパの1つによる要求の受信は、
図10の参照番号1004で具体的に示される。要求の受信に応答して、スヌーパ(この例では、要求に応じてシステム全体のコヒーレンス応答を解決することができるL2キャッシュ110(例えば、適切なコヒーレンス状態におけるHPC L2キャッシュ110)のスヌープ・マシン511)は、ビジー状態を呈する(スヌーパのビジー状態は、
図10の参照番号1006で示される)。スヌーパがビジー状態にある間、参照番号1008で示されるように、スヌーパは、要求にサービスするために必要とされるあらゆる処理を実行する。この場合、この処理は、参照番号1020の結合応答のスヌーパによる受信の前に、キャッシュ間介入により、要求が指定するターゲット・キャッシュ・ラインをマスタL2キャッシュ110に提供することを含む。結合応答の受信後、スヌーパは、参照番号1022で示されるようなウィンドウ拡張部312bの持続期間ビジー状態のままである(従って、マスタによるターゲット・キャッシュ・ラインのコヒーレンスの取得を保護する)。
【0076】
図9に戻ると、ブロック904における要求の発行後、L2キャッシュ110は、要求されるデータの戻り(例えば、HPCであるスヌーピングL2キャッシュ110からの)及び動作の結合応答(Cresp)の受信の両方を同時に監視する(ブロック906〜908)。L2キャッシュ110が、ブロック908において、要求されるデータの前に結合応答を受信したと判断することに応答して、
図9のプロセスは、ブロック910及び後のブロックに進む。明確にするために、このタイミング・シナリオは、
図10には明示的に示されない。しかしながら、L2キャッシュ110が、ブロック906において、動作の結合応答の前に要求されるデータを受信したと判断することに応答して、プロセスは、ブロック930及び後のブロックに進み、それらは、
図10をさらに参照して以下に説明される。
【0077】
最初にブロック910及び後のブロックを参照すると、RCマシン512は、ブロック908において読み取り動作のために受信し結合応答が、要求されるデータのターゲット・キャッシュ・ラインが要求中のL2キャッシュ110に供給されることを結合応答が示すことを意味する「良好」であるかどうかを判断する、(ブロック910)。ブロック910において、結合応答が「良好」な結合応答ではないと判断することに応答して、プロセスは、RCマシン512が、相互接続ファブリック上で要求を再発行することを示すブロック904に進む。しかしながら、ブロック910において、RCマシン512が、結合応答が「良好」であると判断することに応答して、プロセスは、ブロック910からブロック912に進む。
【0078】
ブロック912は、スヌーパから要求中のL2キャッシュ110へのターゲット・キャッシュ・ラインのコヒーレンス所有権の移転を保護するために、必要に応じて、RCマシン512が保護ウィンドウ313を開くことを示す。次に、ブロック914において、データのターゲット・キャッシュ・ラインが、RCマシン512に対応するRCQ520のバッファ内に受信されるまで、プロセスが繰り返される。RCQ520におけるデータのターゲット・キャッシュ・ラインの受信に応答して、L2キャッシュ110は、要求されるデータを、RCマシン512に対応するRCDATバッファ522内に入れる(ブロック916)。さらに、ブロック918において、RCマシン512は、例えば、RCDATバッファ522からプロセッサ・コア102へ要求されるデータの転送することによって、RCQ520内のバッファからキャッシュ・アレイ502へのターゲット・キャッシュ・ラインの転送を要求するキャッシュ書き込み要求をディスパッチ・パイプライン506に発行することによって、及び/又はディレクトリ508が示すターゲット・キャッシュ・ラインのコヒーレンス状態の更新を要求するディレクトリ書き込み要求をディスパッチ・パイプライン506に発行することによって、関連のあるプロセッサ・コア102のメモリ・アクセス要求にサービスするために付加的な処理を実行する。RCマシン512により実行される処理の終わりに、RC保護ウィンドウ313を閉じ(終了し)、RCマシン512が解放され、それにより、RCマシンが非ビジー状態に戻る(ブロック920)。その後、別のメモリ・アクセス要求にサービスするためにRCマシン512が割り当てられるまで、ブロック922において
図9のプロセスは終了する。
【0079】
さらに
図9を参照すると、結合応答の前に要求されるデータをL2キャッシュ110により受信することに応答して実行される処理について、ブロック930及び後のブロックを参照してここで説明される。ターゲット・キャッシュ・ライン(
図10の参照番号1010で示されるような)を含むデータ保有期間800のRCQ520における受信に応答して、L2キャッシュ110は、要求されるデータのターゲット・キャッシュ・ラインを、RCマシン512に対応するRCDATバッファ522内に入れる(ブロック930)。ブロック932において、RCマシン512はまた、データ保有期間800のデータ・ステータス・フィールド802が、RCマシン512によるターゲット・キャッシュ・ラインの即時処理を可能にする「良好」な結合応答の早期表示を提供するかどうかも判断する。早期表示を提供しない場合、プロセスは、ブロック932から934及び後のブロックに進む。しかしながら、データ・ステータス・フィールド802が、RCマシン512によるターゲット・キャッシュ・ラインの即時処理を可能にする「良好」な結合応答の早期表示を提供する場合、プロセスは、ブロック932からブロック940及び後のブロックへ進む。
【0080】
ここでブロック934及び後のブロックを参照すると、RCマシン512は、要求に対する結合応答の受信を監視する(ブロック934)。要求の結合応答を受信したという
図9のブロック934における判断に応答して、RCマシン512は、結合応答が「良好」な結合応答であるかどうかを判断する(ブロック936)。結合応答が「良好」な結合応答ではないとのブロック936における判断に応答して、
図9のプロセスは、説明済みのブロック904及び後のブロックに戻る。しかしながら、結合応答が「良好」な結合応答であるとのブロック936における判断に応答して、プロセスは、ブロック938に進む。ブロック938は、要求中のL2キャッシュ110へのターゲット・キャッシュ・ラインのコヒーレンス所有権の移転を保護するために、必要に応じて、RCマシン512が保護ウィンドウを開くことを示す。次に、プロセスは、説明済みのブロック918〜922に進む。
【0081】
ここでブロック940及び後のブロック(
図10に具体的に示される動作シナリオである)を参照すると、データ保有期間800のデータ・ステータス・フィールド802が、結合応答が良好な結合応答であることの早期表示を提供することに応答して、プロセスは、ブロック940に進む。ブロック940は、スヌーピングL2キャッシュ110から要求中のL2キャッシュ110へのターゲット・キャッシュ・ラインのコヒーレンス所有権の移転を保護するために、RCマシン512が保護ウィンドウ1014を開くことを示す。
図10から、保護ウィンドウ1014の開閉は、参照番号1018における要求の結合応答の受信とは非同期であることに留意されたい。さらに、
図9のブロック942及び
図10の参照番号1012に示されるように、RCマシン512は、例えば、RCDATバッファ522からプロセッサ・コア102へ要求されるデータを戻すことによって、RCQ520内のバッファからキャッシュ・アレイ502へのターゲット・キャッシュ・ラインの転送を要求するキャッシュ書き込み要求をディスパッチ・パイプライン506に発行することによって、及び/又は、ディレクトリ508が示すターゲット・キャッシュ・ラインのコヒーレンス状態の更新を要求するディレクトリ書き込み要求をディスパッチ・パイプライン506に発行することによって、関連のあるプロセッサ・コア102のメモリ・アクセス要求にサービスするために付加的な処理を実行する。
図7とは対照的に、データ保有期間800における結合応答の早期表示を含ませることにより、RCマシン512が、ターゲット・キャッシュ・ラインの受信と結合応答の受信との間に有用な仕事(及び、恐らく処理の全ての完了)を実行することが可能になることに留意されたい。RCマシン512により実行される処理の終わりに、RCマシン512はその保護ウィンドウ1014を閉じ(ブロック944)、そのことは、マスタL2キャッシュ110が、もはやターゲット・キャッシュ・ラインを要求する他の競合マスタに対する再試行部分応答を提供しないこと、従って、マスタL2キャッシュ110が、必要とされる場合、後のマスタ(参照番号1016で示されるような)の要求に応じてターゲット・キャッシュ・ラインのためのデータ・ソースとして働くことを意味する。コヒーレンス・プロトコルは、好ましくは、以前のスヌーパのものにわたってターゲット・キャッシュ・ラインの書き込み所有権を受信したキャッシュの部分応答に有利なように構成され、そのことは、参照番号1006で示されるビジー状態にある間、再試行部分応答を提供し続ける1つ又は複数の以前のスヌーパの存在下でさえも、マスタL2キャッシュ110がデータ・ソースとして働くことを可能にする。マスタL2キャッシュ110がデータ・ソースとして働くことができる期間1016は、マスタL2キャッシュ110による結合応答1018の受信より前に(そして、多くの場合、そのかなり前から)開始することができることを留意されたい。従って、キャッシュ・ラインを垂直方向キャッシュ階層の間で供給することができる最小ハンドオフ時間は、もはや、
図7におけるような要求・結合応答間の間隔(request-to-combined-response interval)により定められるのではなく、代わりに、
図10に示されるような要求・データ間の間隔(request-to-data interval)により定められる。
【0082】
ブロック944の後、
図9のブロック946及び
図10の参照番号1018に示されるように、RCマシン512は、その要求に対する結合応答の受信を待つ。結合応答に応答して、相互接続動作に割り当てられたタグは使用されなくなり、RCマシン512が解放され、それにより、RCマシン512は非ビジー状態に戻り(ブロック948)、そこから、RCマシンを再び割り当てることができる。その後、別のメモリ・アクセス要求にサービスするためにRCマシン512が割り当てられるまで、ブロック922において
図9のプロセスは終了する。
【0083】
説明されたように、少なくとも1つの実施形態において、マルチプロセッサ・データ処理システムは、複数のプロセッサ・コアをサポートする複数の垂直方向キャッシュ階層、システム・メモリ、並びにシステム・メモリ及び複数の垂直方向キャッシュ階層に結合されたシステム相互接続を含む。第1の垂直方向キャッシュ階層内の第1のキャッシュ・メモリは、システム相互接続上で、ターゲット・キャッシュ・ラインについての要求を発行する。要求に応答して、要求に対するシステム全体のコヒーレンス応答を受信する前に、第1のキャッシュ・メモリは、第2の垂直方向キャッシュ階層内の第2のキャッシュ・メモリから、キャッシュ間介入により、ターゲット・キャッシュ・ライン及び要求に対するシステム全体のコヒーレンス応答の初期表示を受信する。システム全体のコヒーレンス応答の初期表示に応答して、及び、システム全体のコヒーレンス応答を受信する前に、第1のキャッシュ・メモリは、ターゲット・キャッシュ・ラインを第1のキャッシュ・メモリ内にインストールするための処理を開始する。1つの実施形態において、第1のキャッシュ・メモリは、システム全体の結合応答を受信する前に、ターゲット・キャッシュ・ラインを第3の垂直方向キャッシュ階層内の第3のキャッシュに供給する。
【0084】
本出願は、介入したキャッシュ・ラインと共にシステム全体のコヒーレンス応答の初期表示の通信は、複数のスレッドが介入したキャッシュ・ラインへのアトミック更新を行っている場合、介入したキャッシュ・ラインのコヒーレンス所有権の迅速なハンドオフも容易にする。例えば、マルチプロセッサ・データ処理システム200の3つの異なるプロセッサ・コア102の3つの同時に実行しているハードウェア・スレッドTa、Tb及びTc上で実行することができる、
図11の例示的なマルチスレッド・プログラムを考える。示されるように、スレッドTa、Tb及びTcの各々は、一般的に省略により示される他の命令に加えて、アトミック更新シーケンス1100を含む。スレッドTa、Tb及びTcの各々内のアトミック更新シーケンス1100は、実行されるとき、実効アドレスAと関連したターゲット・キャッシュ・ラインを実行中のプロセッサ・コア102のレジスタr1にロードする分散型共有メモリ・システムへの対応するLARX要求を生成する、それぞれのload−and−reserve(例えば、LARX)命令1102a、1102b、1102cから開始する。各スレッドのアトミック更新シーケンス1100は、次に、レジスタr1内に保持されるターゲット・キャッシュ・ラインの値をプライベートに修正する1つ又複数の命令を含み、ここで、これらの命令は、レジスタr1の値を1だけインクリメントするADD命令1104a、1104b、1104cによる例示的なアトミック更新シーケンスにおいて表される。ADD命令1104a、1104b、1104cの後に、前のLARX命令1102が実行されて以来、介入する更新がターゲット・キャッシュ・ラインに対してなされたかどうかによって、レジスタr1の修正された値で、アドレスAと関連したターゲット・キャッシュ・ラインを条件付きで更新するstore−conditional(例えば、STCX)命令1106a、1106b、1106cが続く。この例では、STCX命令1106がターゲット・キャッシュ・ラインを成功裏に更新し、条件コード・レジスタのフィールドを非ゼロ値に他の方法で設定する場合、実行中のプロセッサ・コア102は、プロセッサ・コア102内の条件コード・レジスタのフィールドをゼロにリセットする。各スレッド内の例示的なアトミック更新シーケンス1000は、プロセッサ・コア102内の条件コード・レジスタ内のフィールドの値に基づいて条件付きで分岐するそれぞれのconditional−branch(条件付き分岐)(例えば、BRANCH NOT Equal(BNE))命令1108a、1108b、1108cにより終了する。特に、BNE命令1108a、1108b、1108cは、実行を、アトミック更新が不成功である場合に、load−and−reserve(例えば、LARX)命令1102a、1102b、1102cにループバックさせ、アトミック更新が成功した場合、関連するスレッド内の後の命令に進ませる。
【0085】
矢印1110及び1112により
図11にさらに示されるように、スレッドTaのSTCX命令1106aにより実効アドレスAに対応する分散型共有メモリ内の記憶位置に格納された値は、スレッドTbのLARX命令1102bによりロードされ、スレッドTbのSTCX命令1106bにより分散型共有メモリ内の記憶位置に格納された値は、スレッドTcのLARX命令1102cによりロードされる。従って、更新値を分散型共有メモリ内のターゲット・キャッシュ・ラインに格納すること(STCX命令1106の実行を通して)と分配型共有メモリからターゲット・キャッシュ・ラインの更新値をロードすること(LARX命令の実行を通して)との間の待ち時間を、本出願の教示に従って低減させることができる場合、
図11に示される例示的なマルチスレッドの性能が改善されることが理解されるであろう。
【0086】
ここで
図12〜
図13を参照すると、1つの実施形態による、下位レベル・キャッシュ(例えば、L2キャッシュ110)のRCマシン512が、関連のあるプロセッサ・コア102のload−and−reserve(LARX)要求及びstore−conditional(STCX)要求にサービスする例示的なプロセスの高レベル論理フローチャートが示される。この実施形態において、load−and−reserve要求及び次のstore−conditionalの両方にサービスするために、単一のRCマシン512が割り当てられ、従って、両方の要求のサービスが単一のリソースに併合される。
【0087】
同様の参照番号で
図12に示されるように、LARX要求(例えば、LARX命令1102の実行により生成される)の受信に応答して実行されるRCマシン512の処理は、
図9を参照して上述されたような他のメモリ・アクセス要求に応答して実行されるものと実質的に似ている。従って、
図9を参照して先に述べられたものに対応する
図12に実行されるステップはここで再び詳細に説明されない。しかしながら、
図12のブロック942におけるRCマシン512によるLARX要求の処理は、予約論理513内のLARX要求のターゲット・アドレスに対する予約を確立することを含み得ることに留意されたい。ブロック942におけるRCマシン512によるLARX要求の処理の後、
図12のプロセスは、ページ・コネクタAを介して
図13に進む。
【0088】
図13に示されるように、プロセスは、二股に分かれ、ブロック1300を含む第1の経路及びブロック1310〜1318を含む第2の経路の両方へ並行して進む。両経路内に示される処理が完了した後で初めて、これらの2つの経路が合流し、ページ・コネクタBを通して
図12のブロック948に戻る。
【0089】
最初にブロック1300を参照すると、RCマシン512は、
図12のブロック904におけるデータ処理システム200の相互接続ファブリック上で発行された要求の結合応答(Cresp)の受信を待つ。結合応答の受信に応答して、
図13のプロセスの第1の経路は、ブロック1300から第2の経路との合流点に進む。
【0090】
LARX要求及び関連したSTCX要求の両方が単一のRCマシン512内に併合される例示的な実施形態において、RCマシン512は、それに割り当てられたLARX要求と同じターゲット・アドレスを指定するmatching STCX(STCX照合)要求の受信を待つタイムアウト間隔の間、ビジーのままである。
図13は、タイムアウト間隔が満了する(ブロック1312)前、matching STCX要求を関連したプロセッサ・コア102から受信した(ブロック1310)かどうかの判断を示す、ブロック1310〜1312におけるこの行動を示す。matching STCX要求のディスパッチ・パイプライン506による受信の前にタイムアウト間隔が満了する場合、ブロック1312において肯定的判断が行われ、
図13に示される第2の経路は、ブロック1312からブロック1318へ直接進む。ブロック1318は、RCマシン512が、LARX要求により予約されるキャッシュ・ラインのターゲット・アドレスのためにその保護ウィンドウを閉じることを示す。次に、プロセスは、ブロック1300からくる第1の経路との合流点に進む。しかしながら、タイムアウト間隔が経過する前にRCマシン512がmatching STCX要求を受信したことを、ブロック1310において判断することに応答して、プロセスは、ブロック1310から、ディスパッチ・パイプライン506が、STCX要求を、matching STCX要求に既にサービスしているRCマシン512内に併合していることを示すブロック1314に進む。
【0091】
次に、RCマシン512は、例えば、キャッシュ・アレイ502内のターゲット・キャッシュ・ラインの更新を要求するキャッシュ書き込み要求をディスパッチ・パイプライン506に発行すること、及び/又はディレクトリ508が示すターゲット・キャッシュ・ラインのコヒーレンス状態の更新を要求するディレクトリ書き込み要求をディスパッチ・パイプライン506に発行すること、及び/又は予約論理513内のターゲット・キャッシュ・ラインのための予約を設定することによって、STCX要求にサービスする(ブロック1316)。その後、プロセスは、RCマシン512が、ターゲット・キャッシュ・ラインのための保護ウィンドウを閉じることを示すブロック1318に進む。そして、第2の経路のプロセスは、合流点に進み、ページ・コネクタBを通して、説明済みの
図12のブロック948に戻る。従って、示される実施形態において、RCマシン512がSTCX要求の処理を完了することに応答して、又は、タイムアウト間隔内にSTCX要求を受信できないことに応答して、RC保護ウィンドウが閉じ、RCは、LARX要求の相互接続動作に対する結合応答を受信し、RC保護ウィンドウを閉じた後までビジーのままである。
【0092】
ここで
図14〜
図15を参照すると、
図12〜
図13のプロセスの下の例示的な動作シナリオのタイミング図が示される。
図14において、関連した結合応答の前に、メモリ・アクセス要求の結合応答の早期表示及びload−and−reserve(LARX)要求のターゲット・キャッシュ・ラインが受信される。次に、matching store−conditional(STCX)要求の処理の完了前に(及び、場合によっては、STCX要求の受信の前に)結合応答が受信される。
図15において、結合応答の受信のタイミングは、matching STCX要求の処理の完了後に相互接続動作の結合応答が受信されるという点で、
図14に示されるものとは異なる。
【0093】
図14〜
図15は、LARX要求にサービスするためにRCマシン512を割り当てることに応答して、参照番号1402において、RCマシン512がビジー状態1400を呈することを示す。LARX要求に応答して、
図14〜
図15の参照番号1406及び
図12のブロック904で示されるように、RCマシン512は、データ処理システム200の相互接続ファブリック上のLARX要求のターゲット・キャッシュ・ラインについてのメモリ・アクセス要求を発行する。
【0094】
このメモリ・アクセス要求は、サービス・スヌーパ(例えば、L2キャッシュ110のスヌープ・マシン511)を含むデータ処理システム200全体にわたるスヌーパにより受信され、メモリ・アクセス要求のその受信は、
図14〜
図15において参照番号1408で示される。相互接続ファブリックを介するメモリ・アクセス要求の受信に応答して、サービス・スヌーパは、ターゲット・キャッシュ・ラインを含むデータ・フィールド804、及び(
図14の参照番号1410で示されるような)RCマシン512によるターゲット・キャッシュ・ラインの即時処理を可能にする「良好」な結合応答の早期表示を提供するデータ・ステータス・フィールド802を含むデータ保有期間800を要求中のL2キャッシュ110に返す。(サービス・スヌーパは、
図10に示される他の処理も付加的に実行するが、本プロセスの他の態様を分かりにくくするのを避けるために、
図14〜
図15から省略される。)
【0095】
良好な結合応答の初期表示をL2キャッシュ110において受信することに応答して、LARX要求にサービスするRCマシン512は、RC保護ウィンドウ1412を開く(
図12のブロック940に示されるように)。RC保護ウィンドウ1412の間、L2キャッシュ110のスヌープ・マシン511は、再試行部分応答を、予約されたキャッシュ・ラインをターゲットとする相互接続ファブリック上でスヌープされるあらゆる競合するメモリ・アクセス要求に提供する。RC保護ウィンドウ1412において、
図14〜
図15の参照番号1420及び
図12のブロック942で示されるように、RCマシン512は、LARX要求のその処理を実行する。LARX要求の処理の完了時、RCマシン512は、非ビジー状態に戻らないが、代わりに、
図13のブロック1310で示されるように、RCマシン512がmatching STCX要求のディスパッチを待っている後のSTCX待機ウィンドウ1422の間、ビジー状態のままである。先のLARX要求のものに合致するターゲット・アドレスを指定するSTCX要求がタイムアウト間隔(参照番号1404に示されるような)内に受信されると仮定すると、STCX要求はRCマシン512内に併合され、
図14〜
図15の参照番号1424及び
図13のブロック1314〜1316で示されるように、RCマシン512は、STCX要求にサービスするための処理を実行する。
【0096】
図14〜
図15は、相互接続ファブリック上でのRCマシン512が開始するメモリ・アクセス要求に対する結合応答1414の受信、及びRC保護ウィンドウ1412の閉鎖の後まで、RCマシン512がビジー状態1400のままであることを示す。
図14〜
図15はさらに、RCマシン512がターゲット・キャッシュ・ラインを更新するためにSTCX要求の処理を完了することに応答して、RCマシン512がそのL2キャッシュ110による予約されたキャッシュ・ラインのコヒーレンス所有権を保護するRC保護ウィンドウ1412が閉じることをさらに示す。STCX要求に応答したターゲット・キャッシュ・ラインの更新は、結合応答の受信のタイミングとは独立しており、STCX要求は、通常、L2キャッシュ110のヒットをもたらすので、ターゲット・キャッシュ・ラインに対する更新は、多くの場合、メモリ・アクセス要求(
図15に示されるような)に対する結合応答を受信する前に完了し得る。このように、ターゲット・キャッシュ・ラインを更新したL2キャッシュ110は、RC保護ウィンドウ1412が閉じるや否やターゲット・キャッシュ・ラインのソースとして働くことができ、そのことは、
図15に示されるように、RCマシン512により開始されるメモリ・アクセス要求の結合応答1414の受信よりかなり前であり得る。
【0097】
ここで
図16を参照すると、
図13のプロセスの代替的な実施形態が示される。この代替的な実施形態において、L2キャッシュ110は、STCX要求を先のLARX要求にサービスする同じRCマシン512内に併合するのではなく、関連のあるプロセッサ・コア102のmatching STCX要求にサービスするように、そのRCマシン512の別のものを割り当てる。同様の参照番号で示されるように、
図16のプロセスは、
図13において実行されるものと実質的に類似している。従って、
図13を参照して前に説明されたものに対応する
図16において実行されるステップは、ここで再び詳細に説明されない。
【0098】
図16のブロック1310において、RCマシン512(ここではRC1と呼ばれる)が、先のLARX要求により開始されるビジー状態のままである間、L2キャッシュ110により関連したプロセッサ・コア102からmatching STCX要求を受信することに応答して、プロセスは、ブロック1310からブロック1600に進む。ブロック1600は、L2キャッシュ110のいずれかのRCマシン512が非ビジー(利用可能な)状態にあるかどうかの判断を示す。非ビジー状態にない場合、ディスパッチ・パイプライン506は、ブロック1310において受信したSTCX要求を廃棄し、再試行表示をプロセッサ・コア102(図示せず)に戻す。次に、
図16のプロセスは、説明済みのブロック1310に戻る。しかしながら、ブロック1600における肯定的判断に応答して、L2キャッシュ110のディスパッチ・パイプライン506は、ブロック1602で示されるように、STCX要求にサービスするために別のRCマシン512(ここではRC2と呼ばれる)を割り当てる。その後、
図16のプロセスは、説明済みのブロック1318に進む。
【0099】
ここで
図17を参照すると、L2キャッシュ110のRCマシン512(すなわち、RC2)が、
図16の実施形態における関連のあるプロセッサ・コア102のstore−conditional(STCX)要求にサービスするプロセスの高レベル論理フローチャートが示される。
図17のプロセスは、例えば、L2キャッシュ110のディスパッチ・パイプライン506が、
図16のブロック1602におけるSTCX要求にサービスするためにRCマシンRC2を割り当てることに応答して、ブロック1700から開始する。次に、プロセスは、RCマシンRC2が、そのL2キャッシュ110によりターゲット・キャッシュ・ラインのコヒーレンス所有権を保護するために保護ウィンドウ1014を開くブロック1702に進む。さらに、RCマシンRC2は、例えば、キャッシュ・アレイ502内のターゲット・キャッシュ・ラインの更新を要求するキャッシュ書き込み要求をディスパッチ・パイプライン506に発行すること、及び/又はディレクトリ508が示すターゲット・キャッシュ・ラインのコヒーレンス状態の更新を要求するディレクトリ書き込み要求をディスパッチ・パイプライン506に発行すること、及び/又は、中でも予約論理513内のターゲット・キャッシュ・ラインのための予約をリセットすることによって、STCX要求にサービスする(ブロック1704)。少なくとも幾つかの実施形態において、ディレクトリ書き込み要求は、ストアを直ちに完了することを可能にするコヒーレンス状態において、キャッシュ間介入により、コヒーレンス状態を、L2キャッシュ110により別のL2キャッシュ110に供給させる可能性がより高いコヒーレンス状態に更新する。ブロック1704の後、プロセスは、RCマシンRC2がターゲット・キャッシュ・ラインのために保護ウィンドウを閉じることを示すブロック1706に進む。その後、
図17のプロセスは、ブロック1708において終了する。
【0100】
ここで
図18を参照すると、関連した結合応答の前に、メモリ・アクセス要求の結合応答の早期表示が、load−and−reserve(LARX)要求のターゲット・キャッシュ・ラインと共に受信される、
図12、
図16及び
図17に示されるプロセスに従った例示的な動作シナリオのタイミング図が示される。
【0101】
図18は、LARX要求にサービスするためにRCマシンRC1を割り当てることに応答して、参照番号1802において、RCマシンRC1がビジー状態1800を呈することを示す。LARX要求に応答して、
図18の参照番号1806及び
図12のブロック904に示されるように、RCマシンRC1は、データ処理システム200の相互接続ファブリック上でLARX要求のターゲット・キャッシュ・ラインについてのメモリ・アクセス要求を発行する。
【0102】
このメモリ・アクセス要求は、サービス・スヌーパ(例えば、L2キャッシュ110のスヌープ・マシン511)を含むデータ処理システム200全体にわたってスヌーパにより受信され、メモリ・アクセス要求のその受信は、
図18に参照番号1808で示される。相互接続ファブリックを介するメモリ・アクセス要求の受信に応答して、サービス・スヌーパは、ターゲット・キャッシュ・ラインを含むデータ・フィールド804、及び(
図18の参照番号1810で示されるような)RCマシン512によるターゲット・キャッシュ・ラインの即時処理を可能にする「良好」な結合応答の早期表示を提供するデータ・ステータス・フィールド802を含むデータ保有期間800を、要求中のL2キャッシュ110に返す。(サービス・スヌーパは、
図10に示される他の処理も付加的に実行するが、本プロセスの他の態様を分かりにくくするのを避けるために、
図18から省略される。)
【0103】
良好な結合応答の初期表示をL2キャッシュ110において受信することに応答して、RCマシンRC1は、(
図12のブロック940で示されるように)RC1保護ウィンドウ1812を開き、その間、L2キャッシュ110のスヌープ・マシン511は、再試行部分応答を、予約されたキャッシュ・ラインをターゲットとするシステム相互接続上でスヌープされるあらゆる競合するメモリ・アクセス要求に提供する。RC1がLARX要求の処理を実行するRC1 LARX処理間隔1820、及び、L2キャッシュ110が先のLARX要求のものに合致するターゲット・アドレスを指定する関連したプロセッサ・コア102からのSTCX要求の受信を待つ後のRC1 STCX待機間隔1822の両方の間、RC1保護ウィンドウ1812は開いたままである。RC1 STCX待機間隔1822の完了時、RC1保護ウィンドウ1812は閉じ、RC1によるターゲット・キャッシュ・ラインのコヒーレンス所有権の保護を終了する。しかしながら、RC1は、必ずしも非ビジー状態にすぐに戻るとは限らず、代わりに、そのメモリ・アクセス要求に対する結合応答1814の受信及びRC1 STCX待機間隔1822の終了の後まで、ビジー状態のままである。
【0104】
関連したプロセッサ・コア102からSTCX要求をL2キャッシュ110により受信すること(参照番号1804で示されるように)に応答して、ディスパッチ・パイプライン506は、(ブロック1602に示されるように)STCX要求にサービスするために別のRCマシンRC2を割り当てる。STCX要求にサービスするためにRCマシンRC2を割り当てることに応答して、RC2は、RC2保護ウィンドウ1830を開き、その間、RC2は、同じく
図17のブロック1702に示されるように、そのL2キャッシュ110によりターゲット・キャッシュ・ラインのコヒーレンス所有権を保護する。RC2保護ウィンドウ1830の間、RC2は、参照番号1832に示されるように、ターゲット・キャッシュ・ラインを更新するためにSTCX要求の処理を実行する。RC2は、
図17のブロック1706に示されるように、STCX要求についての処理の完了に応答して、RC2保護ウィンドウ1830を閉じる。
【0105】
RC2保護ウィンドウ1832が閉じるや否や、ターゲット・キャッシュ・ラインを更新したL2キャッシュ110は、ターゲット・キャッシュ・ラインのデータ・ソースとして働くことができ(例えば、別のL2キャッシュ110へのキャッシュ間介入により)、これは、RCマシンRC1により開始されるメモリ・アクセス要求の結合応答1814の受信より前であり得ることを留意されたい。同じく、データ構造体のタイプデータ構造体のタイプデータ構造体のタイプは、STCX要求に応答したRCマシンRC2によるターゲット・キャッシュ・ラインの更新も、結合応答の受信のタイミングとは独立しており、STCX要求は、通常、L2キャッシュ110におけるヒットをもたらすので、ターゲット・キャッシュ・ラインへの更新は、メモリ・アクセス要求に対する結合応答を受信する前に完了され得る。
【0106】
ここで
図19を参照すると、例えば、半導体IC論理の設計、シミュレーション、試験、レイアウト及び製造に用いられる例示的な設計フロー1900のブロック図が示される。設計フロー1900は、上述され、本明細書に示される設計構造体及び/又はデバイスの論理的に又は他の方法で機能的に等価な表現を生成するように設計構造体又はデバイスを処理するためのプロセス、マシン、及び/又は機構を含む。設計フロー1900によって処理及び/又は生成される設計構造体は、データ処理システム上で実行又は他の方法で処理されたときに、ハードウェア・コンポーネント、回路、デバイス又はシステムの論理的、構造的、機械的、又は他の方法で機能的に等価な表現を生成するデータ及び/又は命令を含むように、マシン可読伝送又はストレージ媒体上でコード化することができる。機マシンは、これらに限定されるものではないが、回路、コンポーネント、デバイス、又はシステムを設計、製造又はシミュレートするといった、IC設計プロセスに用いられるどのようなマシンも含む。例えば、マシンは、リソグラフィ・マシン、マスクを生成するためのマシン、及び/又はマスクを生成するためのマシン及び/又は機器(例えば、eビーム・ライタ)、設計構造体をシミュレートするためのコンピュータ又は機器、製造プロセス又は試験プロセスに用いられるいずれかの装置、又は設計構造体の機能的に等価な表現をいずれかの媒体にプログラミングするためのいずれかのマシン(例えば、プログラマブル・ゲート・アレイをプログラミングするためのマシン)を含むことができる。
【0107】
設計フロー1900は、設計される表現のタイプに応じて変わり得る。例えば、特定用途向けIC(ASIC)を構築するための設計フロー1900は、標準的なコンポーネントを設計するための設計フロー1900、又はプログラマブル・ゲート・アレイ(PGA)、例えば、Altera(登録商法) Inc.又はXilinx(登録商標) Inc.から提供されているプログラマブル・ゲート・アレイ(PGA)又はフィールド・プログラマブル・ゲート・アレイ(FPGA)に設計をインスタンス化するための設計フロー1900とは異なることがある。
【0108】
図19は、好ましくは設計プロセス1910によって処理される入力設計構造体1920を含む、複数のこのような設計構造体を示す。設計構造体1920は、設計プロセス1910によって生成及び処理され、ハードウェア・デバイスの論理的に等価な機能表現を生じる、論理的シミュレーション設計構造体とすることができる。設計構造体1920はさらに、又は代替的に、設計プロセス1910によって処理されたときに、ハードウェア・デバイスの物理的構造の機能的表現を生成するデータ及び/又はプログラム命令を含むこともできる。機能的及び/又は構造的設計特徴のどちらを表現するのであれ、設計構造体1920は、コア開発者/設計者によって実施されるような、電子的コンピュータ支援設計(ECAD)を使用して生成することができる。マシン可読データ伝送、ゲートアレイ、又はストレージ媒体上でコード化された場合、設計構造体1920を設計プロセス1910内の1つ又は複数のハードウェア及び/又はソフトウェア・モジュールによってアクセス及び処理して、本明細書で示されるもののような電子コンポーネント、回路、電子若しくは論理モジュール、装置、デバイス、又はシステムをシミュレートするか、又は他の方法で機能的に表現することができる。そのため、設計構造体1920は、設計又はシミュレーション・データ処理システムによって処理されたときに回路又は他のレベルのハードウェア論理設計を機能的にシミュレートするか、又は他の方法で表現する、人間及び/又は機械可読のソースコード、コンパイルされた構造体、及びコンピュータ実行可能コード構造体を含む、ファイル又は他のデータ構造体を含むことができる。このようなデータ構造体は、ハードウェア記述言語(HDL)設計エンティティ、又は、Verilog及びVHDLのような低レベルHDL設計言語、及び/又はC若しくはC++のような高レベル設計言語に適合する及び/又はそれと互換性のある他のデータ構造体を含むことができる。
【0109】
設計プロセス1910は、設計構造体1920のような設計構造体を含むことができるネットリスト1980を生成するために、本明細書に示されるコンポーネント、回路、デバイス又は論理構造体の設計/シミュレーションの機能的等価物を合成、変換又はその他の方法で処理するためのハードウェア及び/又はソフトウェア・モジュールを使用し、組み込むことが好ましい。ネットリスト1980は、例えば、集積回路設計内の他の素子及び回路への接続を記述する配線、個別部品、論理ゲート、制御回路、I/Oデバイス、モデル等のリストを表す、コンパイルされた又は他の方法で処理されたデータ構造体を含むことができる。ネットリスト1980は繰り返しプロセスを用いて合成することができ、このプロセスにおいて、ネットリスト1980は、デバイスの設計仕様及びパラメータに応じて1回又は複数回再合成される。ここで説明された他の設計構造体のタイプと同様に、ネットリスト1980をマシン可読データ・ストレージ媒体上に記録し、又はプロブラマブル・ゲートアレイにプログラムすることができる。媒体は、磁気又は光ディスク・ドライブのような不揮発性ストレージ媒体、プロブラマブル・ゲートアレイ、コンパクト・フラッシュ、又は他のフラッシュメモリとすることができる。それに加えて、又は代替的に、媒体は、システム又はキャッシュ・メモリ、又はバッファ領域とすることができる。
【0110】
設計プロセス1910は、ネットリスト1980を含む様々な入力データ構造体のタイプを処理するためのハードウェア及びソフトウェア・モジュールを含むことができる。このようなデータ構造体のタイプは、例えば、ライブラリ要素1930内に常駐し、所与の製造技術(例えば、異なる技術ノード32nm、45nm、90nm等)についての、モデル、レイアウト及び記号表示を含む、一般的に用いられる要素、回路及びデバイスの組を含むことができる。データ構造体のタイプは、設計仕様1940と、特性データ1950と、検証データ1960と、設計規則1970と、入力試験パターン、出力試験結果及び他の試験情報を含むことができるテスト・データ・ファイル1985とをさらに含むことができる。設計プロセス1910は、例えば、応力分析、熱分析、機械イベント・シミュレーション、鋳造、成形、ダイ・プレス形成等のような動作のためのプロセス・シミュレーションのような標準的な機械設計プロセスをさらに含むことができる。機械設計の当業者であれば、本発明の範囲及び趣旨から逸脱することなく、設計プロセス1910に用いられる可能な機械設計ツール及びアプリケーションの範囲を認識することができる。設計プロセス1910はまた、タイミング分析、検証、設計規則照合、場所及びルート動作等のような標準的な回路設計プロセスを実行するためのモジュールを含むこともできる。
【0111】
設計プロセス1910は、第2の設計構造体1990を作成するために、HDLコンパイラ及びシミュレーション・モデル構築ツールのような論理的及び物理的設計ツールを使用し、組み込んで、設計構造体1920を、図示された支持データ構造体のうちの幾つか又は全てと共に、いずれかの付加的な機械設計又はデータ(該当する場合)と併せて処理する。設計構造体1990は、機械的なデバイス及び構造体のデータの交換に用いられるデータ形式(例えば、IGES、DXF、Parasolid XT、JT、DRG、又はこのような機械的設計構造体を格納又はレンダリングするのに適したその他のいずれかの形式で格納される情報)でストレージ媒体又はプログラマブル・ゲート・アレイ上に存在する。設計構造体1920と同様に、設計構造体1990は、好ましくは、1つ又は複数のファイル、データ構造体、又は他のコンピュータ・コード化データ又は命令を含み、これは、伝送又はデータ・ストレージ媒体上に存在し、かつ、ECADシステムによって処理されると本明細書に示される本発明の実施形態の1つ又は複数の論理的又はその他の方式で機能的に等価な形態を生成する。1つの実施形態において、設計構造体1990は、例えば、本明細書に示されるデバイスを機能的にシミュレートする、コンパイルされた実行可能なHDLシミュレーション・モデルを含むことができる。
【0112】
設計構造体1990はまた、集積回路のレイアウト・データの交換に用いられるデータ形式、及び/又は記号データ形式(例えば、GDSII(GDS2)、GL1、OASIS、マップファイル、又はこのような設計データ構造体を格納するためのその他のいずれかの適切な形式で格納される情報)を使用することもできる。データ構造体1990は、例えば、記号データ、マップファイル、試験データ・ファイル、設計内容・ファイル、製造データ、レイアウト・パラメータ、配線、金属のレベル、ビア、形状、製造ラインを通じた経路指定のためのデータ、並びに、上記に説明され、本明細書に示されるようなデバイス又は構造体を製造するために製造者又は他の設計者/開発者により要求される他のいずれかのデータといった情報を含むことができる。次に、設計構造体1990はステージ1995に進むことができ、そこで、例えば、設計構造体1990は、テープに読み出されたり、製造のためにリリースされたり、マスク会社にリリースされたり、別の設計会社に送られたり、顧客に返送されたりする。
【0113】
既述のように、少なくとも1つの実施形態において、マルチプロセッサ・データ処理システムは、複数のプロセッサ・コアをサポートする複数の垂直方向キャッシュ階層、システム・メモリ及びシステム相互接続を含む。第1のプロセッサ・コアからのload−and−reserve要求に応答して、第1のプロセッサ・コアをサポートする第1のキャッシュ・メモリは、システム相互接続上で、load−and−reserve要求のターゲット・キャッシュ・ラインについてのメモリ・アクセス要求を発行する。メモリ・アクセス要求に応答して、メモリ・アクセス要求に対するシステム全体のコヒーレンス応答を受信する前に、第1のキャッシュ・メモリは、キャッシュ間介入により、第2の垂直方向キャッシュ階層内の第2のキャッシュ・メモリから、ターゲット・キャッシュ・ライン及びメモリ・アクセス要求に対するシステム全体のコヒーレンス応答の早期表示を受信する。早期表示に応答して、システム全体のコヒーレンス応答を受信する前に、第1のキャッシュ・メモリは、第1のキャッシュ・メモリ内のターゲット・キャッシュ・ラインを更新するための処理を開始する。
【0114】
種々の実施形態が具体的に示され、説明されたが、当業者であれば、添付の特許請求の範囲の趣旨及び範囲から逸脱することなく、形態及び細部における種々の変更をなし得ること、及びこれらの代替的な実施は全て、添付の特許請求の範囲の範囲内に入ることを理解するであろう。例えば、本発明の機能を指示するプログラム・コードを実行するコンピュータ・システムに関して態様が説明されたが、本発明は、データ処理システムによって処理することができるプログラム・コードを格納するコンピュータ可読ストレージ・デバイスを含むプログラム製品として代替的に実装できることを理解されたい。コンピュータ可読ストレージ・デバイスは、揮発性若しくは不揮発性メモリ、光学若しくは磁気ディスク等を含むことができる。しかしながら、本明細書で用いられる場合、「ストレージ・デバイス」は、法定製造物品のみを含み、かつ、信号媒体自体、一時的伝搬媒体及びエネルギー自体を排除するように具体的に定められる。
【0115】
一例として、プログラム製品は、データ処理システム上で実行される又は他の方法で処理されるとき、本明細書で開示されるハードウェア・コンポーネント、回路、デバイス又はシステムの論理的、構造的、又は他の方法で機能的に等価な表現(シミュレーション・モデルを含む)を生成する、データ及び/又は命令を含むことができる。こうしたデータ及び/又は命令は、ハードウェア記述言語(HDL)設計エンティティ、又はVerilog及びVHDLのような低レベルHDL設計言語、及び/又はC若しくはC++のような高レベル設計言語に適合する及び/又はそれと互換性のある他のデータ構造体を含むことができる。さらに、データ及び/又は命令は、集積回路のレイアウト・データの交換に用いられるデータ形式、及び/又は記号データ形式(例えば、GDSII(GDS2)、GL1、OASIS、マップファイル、又はこのような設計データ構造体を格納するための他のいずれかの適切な形式で格納される情報)を使用することもできる。