部分読出と非スヌープアクセスとの間のメモリ順序付け要件の充足
【課題】部分的且つ非コヒーレントなメモリアクセスの観点からキャッシュ・コヒーレンス・リンクに基づく相互接続でメモリ順序付けを保つ方法及び装置を提供する。
【解決手段】例えば部分書込のような部分的なメモリアクセスに関連するコンフリクトが検出される場合に、ライトバックフェーズがコンフリクトフェーズで挿入され、ホームエージェントへ部分的データをライトバックする。コンフリクトフェーズでライトバックフェーズを挿入するメッセージの例には、コンフリクトを認めて、コンフリクトフェーズの開始時にライトバックマーカーを、コンフリクトフェーズ前にライトバックマーカーメッセージを、コンフリクトフェーズ内でライトバックマーカーメッセージを、コンフリクトフェーズ後にライトバックマーカーメッセージ及びポスタブル・メッセージを提供するAcknowledge Conflict Write-backメッセージがある。
【解決手段】例えば部分書込のような部分的なメモリアクセスに関連するコンフリクトが検出される場合に、ライトバックフェーズがコンフリクトフェーズで挿入され、ホームエージェントへ部分的データをライトバックする。コンフリクトフェーズでライトバックフェーズを挿入するメッセージの例には、コンフリクトを認めて、コンフリクトフェーズの開始時にライトバックマーカーを、コンフリクトフェーズ前にライトバックマーカーメッセージを、コンフリクトフェーズ内でライトバックマーカーメッセージを、コンフリクトフェーズ後にライトバックマーカーメッセージ及びポスタブル・メッセージを提供するAcknowledge Conflict Write-backメッセージがある。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、高速ポイント・ツー・ポイント相互接続リンクに関し、より具体的には、コヒーレント相互接続アーキテクチャを実施するコヒーレンス・プロトコルに関する。
【背景技術】
【0002】
電子システムが複数のキャッシュメモリを有する場合に、システムに保持されているデータの妥当性、すなわちコヒーレンスは、データ演算のインテグリティを確かにするよう保たれている。コヒーレンスは、しばしば、キャッシュ・コヒーレンス・プロトコルに従ってデータを扱うことによって達成される。キャッシュ及び/又はプロセッサの数が増えるにつれて、コヒーレンスを保つ複雑性は増す。これにより、潜在的に、システムの複数のコンポーネントの間でのコンフリクトの数は増大することとなる。
【0003】
例えば、複数のコンポーネント(例えば、キャッシュメモリ、プロセッサ)が同じデータブロックを要求する場合に、これらの複数のコンポーネントの間のコンフリクトは、データの妥当性を保つように解消される。以前のキャッシュ・コヒーレンス・プロトコルは、通常、コンフリクト解決に関与する単一コンポーネントを有する。しかし、システムの複雑性が増すにつれ、コンフリクト解決のための単一コンポーネントへの依存はシステム全体の性能を低下させうる。
【0004】
一般に、キャッシュ・コヒーレンスを提供する2つの基本的なスキームがある。それは、スヌーピング(現在、しばしば、対称型マルチプロセッシング(SMP)と呼ばれる。)及びディレクトリ(しばしば、分散共有メモリ(DSM)と呼ばれる。)である。これら2つのスキームの間の基本的な違いは、メタ情報、すなわち、どこにキャッシュラインのコピーが保持されているかに関する情報への配置及びアクセスを中心に展開する。
【0005】
ディレクトリに基づくスキームに関して、キャッシュ無しデータが記憶されている固定位置に加えて、どこにキャッシュコピーが存在するかを示す固定ロケーション、すなわちディレクトリがある。新しい方法でキャッシュラインにアクセスするために、ノードは、ディレクトリを有するノード(通常、キャッシュ無しデータを有する同じノードである。)と通信すべきであり、主記憶コピーが有効である場合に応答ノードがデータを供給することを可能にする。ディレクトリシステムにおけるこのようなノードは、ホームノードと呼ばれる。
【0006】
ディレクトリは、二通りに分配され得る。第1に、主記憶データ(キャッシュ無しリポジトリ)は、しばしば、ノード間で分配され、一方、ディレクトリも同じように分配される。第2に、ラインがキャッシュされるかどうか及びラインがキャッシュされる場合にはどこに単一コピーが存在するかについて、少ない情報としてホームノードに保持しながら、メタ情報自体が分配され得る。例えば、SCIはこのスキームを使用し、キャッシュコピーを有する各ノードは、キャッシュコピーを有する他のノードへのリンクを保ち、集合的に完全なディレクトリを保持する。
【0007】
スヌーピングキャッシュに関して、メタ情報は、キャッシュラインの有効なコピーの夫々が、キャッシュラインにアクセスして然るべく応答する要求を認識すべきユニットによって保持されるように、キャッシュコピー自体を有して分配される。通常、データがキャッシュされない状態で、すなわち、その元のロケーションに、保持されているリポジトリがある。しばしば、この元のロケーションに関与するエージェント又はユニットは、ホームノードと呼ばれる。キャッシュラインへのアクセスを要求する場合に、要求ノードは、しばしば、必要とされるパーミッションと共に、要求されるキャッシュラインのアドレスを送信し、要求されるキャッシュラインのコピーを保持するノードは然るべく応答する。
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかし、現在のコヒーレンス及びメッセージングプロトコルの幾つかで、キャッシュラインの部分読出及び非スヌープメモリアクセス、すなわち、コヒーレントなアーキテクチャでの非コヒーレントアクセスは、或る環境下で、潜在的に、要求側へ無効なデータを転送する事態を生じさせる。しばしば、かかる環境は、プロトコル内のメモリ順序付け規則の違反に起因する。結果として、不正な動作が、無効なデータを受け取ったエージェントによって行われる。これは、潜在的に、システム内の不安定性につながる。
【課題を解決するための手段】
【0009】
本発明の一実施形態で、
部分的な書込を実行して部分的データを更新する第1のロジックと、
前記部分的データに関連するコンフリクトメッセージの受信に応答してコンフリクトフェーズでライトバックフェーズを開始し、該ライトバックフェーズは、前記部分的データを該部分的データに関連するホームエージェントへ供給する第2のロジックと、
前記第2のロジックへ結合され、前記ライトバックフェーズの間前記ホームエージェントへ前記部分的データを供給する第3のロジックと
を有する装置が提供される。
【0010】
また、本発明の一実施形態で、
キャッシュラインを有するキャッシュメモリと、
前記キャッシュメモリへ結合され、前記キャッシュラインへの部分的データの部分書込を実行する第1のロジックと、
前記部分的データに関連するホームノードからのコンフリクトメッセージを受信する第2のロジックと、
前記第2のロジックへ結合され、前記コンフリクトメッセージの確認応答と、前記部分的データが、前記第1のロジックが当該部分的データの前記部分書込を実行し且つ前記第2のロジックが前記コンフリクトメッセージを受信したことに応答して、データメッセージにおいて送信されるべきこととを前記ホームノードへ示す結合メッセージを生成する第3のロジックと、
前記第3のロジックへ結合され、前記結合メッセージを前記ホームノードへ送信する第4のロジックと
を有する装置が提供される。
【0011】
また、本発明の一実施形態で、
部分的データに関連するホームノードからのコンフリクトメッセージの受信と、当該ピアノードが前記部分的データに対して部分書込を実行することとに応答してコンフリクトフェーズでライトバックフェーズを開始するライトバックメッセージを生成する第1のロジックを有するピアノードを有し、
前記ホームノードは、ポイント・ツー・ポイントリンクを介して前記ピアノードへ結合され、
前記ホームノードは、前記ライトバックフェーズの間の前記ピアノードからの前記部分的データの受信に応答して前記コンフリクトフェーズで前記ライトバックフェーズに係る完了メッセージを生成する第2のロジックを有する、システムが提供される。
【0012】
また、本発明の一実施形態で、
部分的データをピアキャッシングエージェントで新たな部分的データへと更新する段階と、
前記部分的データに関連して前記ピアキャッシングエージェントによりコンフリクトメッセージを受信する段階と、
前記新たな部分的データが、前記ピアキャッシングエージェントにより前記コンフリクトメッセージを受信することに応答して、ホームエージェントへライトバックされることを示すライトバックメッセージを生成する段階と、
前記ホームエージェントが前記ピアキャッシングエージェントから新たな部分的データを受信した後、前記ピアキャッシングエージェントにより前記ホームノードから完了メッセージを受信する段階と
を有する方法が提供される。
【発明の効果】
【0013】
本発明の実施形態により、部分的且つ非コヒーレントなメモリアクセスの観点からキャッシュ・コヒーレンス・リンクに基づく相互接続においてメモリ順序付けを保つことが可能となる。
【図面の簡単な説明】
【0014】
【図1】プロトコルアーキテクチャの実施例を表す。
【図2】ポイント・ツー・ポイント相互接続を用いてチップセットへ結合される複数のプロセッサを有するシステムの実施例を表す。
【図3】階層化入出力(I/O)スタックを用いる双方向相互接続アーキテクチャに係るブロック図の実施例を表す。
【図4a】潜在的にメモリ順序付け違背を生じさせる複数のノード間のメッセージングプロトコルに係るプロトコルダイアグラムの実施例を表す。
【図4b】潜在的にメモリ順序付け違背を生じさせる複数のノード間のメッセージングプロトコルに係るプロトコルダイアグラムの他の実施例を表す。
【図5a】適切なメモリ順序付け要求に従うようコンフリクトフェーズでメッセージを有するメッセージングプロトコルに係るプロトコルダイアグラムの実施例を表す。
【図5b】適切なメモリ順序付け要求に従うようコンフリクトフェーズでメッセージを有するメッセージングプロトコルに係るプロトコルダイアグラムの他の実施例を表す。
【図6a】適切なメモリ順序付け要求に従うようコンフリクトフェーズの前に挿入されるデータライトバックフェーズを有するメッセージングプロトコルに係るプロトコルダイアグラムの実施例を表す。
【図6b】適切なメモリ順序付け要求に従うようコンフリクトフェーズの前に挿入されるデータライトバックフェーズを有するメッセージングプロトコルに係るプロトコルダイアグラムの他の実施例を表す。
【図6c】適切なメモリ順序付け要求に従うようコンフリクトフェーズでメッセージを有するメッセージングプロトコルに係るプロトコルダイアグラムの他の実施例を表す。
【図7a】適切なメモリ順序付け要求に従うようコンフリクトフェーズの後にメッセージを有するメッセージングプロトコルに係るプロトコルダイアグラムの実施例を表す。
【図7b】適切なメモリ順序付け要求に従うようコンフリクトフェーズの後にメッセージを有するメッセージングプロトコルに係るプロトコルダイアグラムの他の実施例を表す。
【図7c】適切なメモリ順序付け要求に従うようコンフリクトフェーズの後にメッセージを有するメッセージングプロトコルに係るプロトコルダイアグラムの実施例を表す。
【発明を実施するための形態】
【0015】
以下、添付の図面を参照して、一例として本発明の実施形態をあらわす。なお、本発明はこの実施形態に限定されない。
【0016】
以下の記載で、特定の相互接続アーキテクチャ、特定のメッセージ、特定の擬似コード、特定の相互接続アーキテクチャレイヤ等の例のような多数の特定の詳細が、本発明の徹底的な理解を与えるために挙げられている。なお、当業者には明らかなように、これらの特定の詳細が本発明を実施するために用いられる必要はない。他の例で、特定の相互接続レイヤの構造上の詳細や、特定の非適合メッセージ及びプロトコルや、プロセッサ及びキャッシュの特定の動作上の詳細等、よく知られているコンポーネント又は方法は、本発明を不必要に不明りょうとすることを避けるために、詳細には記載されていない。
【0017】
ここで記載される方法及び装置は、相互接続アーキテクチャにおいて部分アクセスと非スヌープメモリアクセスとの間で適切なメモリ順序付けを提供するためものである。特に、メモリ順序付け要件の順守は、主として、実例となるキャッシュ−コヒーレントリンクに基づく相互接続アーキテクチャに関して論じられている。なお、適切なメモリ順序付け要件を提供する方法及び装置はそのように限定されず、それらは如何なる相互接続アーキテクチャにより実施されてもよい。
【0018】
[実例となる相互接続アーキテクチャの実施例]
図1は、高レベル簡易プロトコルアーキテクチャの実施例を表す。一実施例で、プロトコルアーキテクチャは、衝突する要求の間と同様に、通常のトランザクションの間、アーキテクチャ内のキャッシュにおいてデータ間のデータ整合性を保つべきである。更に、プロトコルアーキテクチャは、一実施例で、また、それぞれの要求が満足され引っ込められるように、夫々の要求についてフォワード・プログレス(forward progress)を提供する。
【0019】
プロトコルアーキテクチャは、ノード又はエージェントを幾つ有してもよい。一実施例で、ノードは、内部キャッシュメモリ、外部キャッシュメモリ、及び/又は外部メモリと関連するプロセッサを有する。なお、ノード又はエージェントは、例えば、プロセッサ、メモリコントローラハブ、及びI/Oハブ、汎用コントローラハブ、I/Oデバイス、I/Oデバイスの一群、あるいは、メモリにアクセス可能ないずれかの他のデバイス/コンポーネント等、相互接続アーキテクチャにおける如何なる装置又はそのような装置の一群であってもよい。他の実施例で、ノードは他の電子システムと相互接続されている電子システム(例えば、コンピュータシステム、モバイルデバイス)である。また、他のタイプのノード構成が使用されてもよい。
【0020】
表されるように、アーキテクチャ100は、キャッシングノード/エージェント105及び106と、ホームエージェント110乃至112とを有する。一実施例で、ホームエージェント110乃至112は、コヒーレントなメモリ空間の最終リポジトリであるメモリロケーションを保護すべきである。言い換えると、エージェント110は、コヒーレントなメモリ空間のデータについて複数の元の物理的なメモリロケーションに関与するホームエージェントである。ホームエージェント110乃至112は、キャッシングエージェント105及び106からのキャッシュ状態トランザクションの追跡と、キャッシングエージェント105及び106の間のコンフリクトの管理と、メモリへのインターフェースと、データ及び/又はオーナーシップの提供と、いずれかの他のホームエージェントに関連するタスクとを含むタスクの如何なる組合せも実行することができる。
【0021】
一実施例で、キャッシングエージェント105及び106は、キャッシュメモリ及びキャッシングI/Oプロキシエンティティを含むプロセッサ等、キャッシュメモリと関連するエージェントを有する。キャッシングエージェント105及び106は、コヒーレントメモリ空間への読出及び書込要求の実行、コヒーレントメモリ空間からのデータのキャッシュコピーの保持、及び他のピアキャッシングエージェントへのキャッシュコピーの供給等のタスク及びいずれかの他のタスクの如何なる組合せも実行することができる。キャッシングエージェント又はノードは、また、他のキャッシングエージェントに関してピアエージェント/ノードと呼ばれることがある。図1に具体的に現されていないが、プロトコルアーキテクチャは、入出力(I/O)デバイスに代わってトランザクションに参加し又はそれを経験するI/Oハブ等の非キャッシングエージェントを更に有してよい。
【0022】
一実施例で、キャッシングエージェント105及び106並びにホームエージェント110乃至112は、ネットワーク構造101を介するメッセージの交換を通して、データ整合性を保持しフォワード・プログレスを提供する。一実施例で、構造101は、ポイント・ツー・ポイント相互接続ネットワークを通して1つのエージェント/ノードから他のエージェント/ノードへのメッセージの伝送を助ける。しばしば、図1は、基盤ネットワークのキャッシュ・コヒーレンス・プロトコルの抽象的な見方を表すと言われる。
【0023】
一実施例で、相互接続アーキテクチャ100は、下記の同時係属出願で記載されるように、新規の特徴の如何なる組合せも組み入れてよい。例えば、米国特許第6,922,756号(発明の名称「forward State for Use in Cache Coherency in a Multi-Node System」)は、フォワードキャッシュ・コヒーレンス状態(Fステート)の利用について記載する。更に、様々な状況でのコヒーレンス・プロトコルの例は、2004年4月27日に出願された米国特許出願第10/833,963号(事件整理番号P15925)(発明の名称「A Two-Hop Cache Coherency Protocol」)、2004年4月27日に出願された米国特許出願第10/833,965号(事件整理番号P18890)(発明の名称「A Messaging Protocol」)、2004年4月27日に出願された米国特許出願第10/833,977号(事件整理番号P18891)(発明の名称「A Cache Coherence Protocol」)、2006年1月11日に出願された米国特許出願第11/330,977号(事件整理番号P22376)(発明の名称「A Two-Hop Source Snoop Based Cache Coherence Protocol」)、及び2006年1月11日に出願された米国特許出願第11/331,301号(事件整理番号P23106)(発明の名称「A Two-Hop Source Snoop Based Messaging Protocol」)で論じられている。
【0024】
他の例は、2002年12月19日に出願された米国特許出願第10/325,427号(事件整理番号P13923)(発明の名称「Speculative Distributed Conflict Resolution for a Cache Coherency Protocol」)、2002年12月19日に出願された米国特許出願第10/326,234号(事件整理番号P13984)(発明の名称「Hierarchical Directories for Cache Coherency in a Multiprocessor System」)、2002年12月19日に出願された米国特許出願第10/324,711号(事件整理番号P13985)(発明の名称「Hierarchical Virtual Model of a Cache Hierarchy in a Multiprocessor System」)、及び2002年12月19日に出願された米国特許出願第10/326,232号(事件整理番号P13986)(発明の名称「Non-Speculative Distributed Conflict Resolution for a Cache Coherency Protocol」)を含む。
【0025】
前述の同時係属出願に記載される特徴は、本願明細書等に記載される実施例に組み込まれ得る点に留意すべきである。なお、本願明細書等に記載される実施例はそのように限定されず、それらは、潜在的に前述の特徴のいずれも有さないだけではなく、付加的な特徴を有してよい。
【0026】
図2は、ポイント・ツー・ポイント相互接続アーキテクチャを利用するチップセットへ結合されている複数のプロセッサを有するシステムの実施例を表す。図2のシステムは、また、複数のプロセッサを有してよい。それらのプロセッサのうち2つのプロセッサ205及び210しか明りょうさのために示されない。表されるように、プロセッサ205及び210は、夫々、2つの処理要素(PE)206及び207又は211及び212を有する。なお、プロセッサ205及び210には処理要素が幾つ含まれてもよい。
【0027】
処理要素は、スレッドユニット、処理ユニット、コンテキスト、論理プロセッサ、ハードウェアスレッド、コア、及び/又はいずれかの他の要素を言い、例えば実行状態又は構造上の状態等のプロセッサの状態を保つことができる。言い換えると、処理要素は、一実施例で、例えば、ソフトウェアスレッド、オペレーティングシステム、アプリケーション、又は他のコード等のコードと独立して関わることができる如何なるハードウェアも言う。一例として、通常、物理プロセッサは集積回路を表し、これは潜在的にコア又はハードウェアスレッド等の他の処理要素を幾つでも有する。
【0028】
コアは、しばしば、独立した構造上の状態を保つことができる集積回路に配置されるロジックを言う。夫々の独立して保たれる構造上の状態は、少なくとも幾つかの専用の実行リソースと関連する。コアとは対照的に、物理スレッドと呼ばれることもあるハードウェアスレッドは、通常、独立した構造上の状態を保つことができる集積回路に配置されるあらゆるロジックを言う。独立して保たれる構造上の状態は、実行リソースへのアクセスを共有する。そのため、明らかなように、例えば単一スレッド・アプリケーションの複数の複製等の複数のソフトウェアスレッドは、一実施例で、コア又はハードウェアスレッド等の前述の処理要素のいずれかの組合せを含む複数の処理要素で並行して実行され得る。
【0029】
また、プロセッサ205及び210の中にはリソース208及び213が表されている。リソース208及び213は、通常、レジスタ、ユニット、ロジック、ファームウェア、メモリ、及び他のリソースを有し、コードを実行し又は他のデバイスとインターフェース接続する。上述されるように、リソースの幾つかは、部分的に又は完全に処理要素のために設けられてよく、一方、残りのリソースは、処理要素の間で共有される。例えば、命令ポインタ及びリネームロジック等のより小さいリソースは、物理スレッドについて複製されてよい。リオーダー/リタイアメント・ユニットにおけるリオーダーバッファ、命令ルックアサイド・トランスレーション・バッファ(ILTB)、負荷/記憶バッファ、及びキュー等の幾つかのリソースは、パーティショニングを通して共有されてよい。汎用内部レジスタ、ページテーブル・ベース・レジスタ、低レベルデータキャッシュ、データTLB、実行ユニット、及びアウト・オブ・オーダー・ユニット等の他のリソースは、潜在的に完全にスレッドの間で共有される。対照的に、コアは、第2レベルキャッシュ(L2)等のより高いレベルのキャッシュの少なくとも一部を共有しながら、専用の実行リソースを有してよい。
【0030】
一実施例で、リソース208及び213はプロセッサ・パイプラインを有する。プロセッサ・パイプラインは、パイプライン段を幾つでも有してよい。パイプライン段の一般的な例には、命令ポインタ段、フェッチ段、デコード段、ドライブ段、及び割当て段、リネーム段、キュー段、リオーダー段、スケジュール段、ディスパッチ段、実行段、メモリアクセス段、並びにレジスタアクセス段が含まれる。ここに列挙される段は、あらゆる既知のパイプライン段がプロセッサ100に含まれうる場合に、プロセッサ・パイプライン段の例となる非包括的な羅列を有する点に留意すべきである。
【0031】
プロセッサ205及び210は、夫々、メモリコントローラ又はローカルメモリコントローラハブ(MCH)を更に有してよく、然るべくメモリ209又は214とインターフェース接続する。メモリ209及び214は、例えば、ランダムアクセスメモリ(RAM)、キャッシュメモリ、フラッシュメモリ、又は他のメモリデバイス等のあらゆるメモリデバイスを有する。一実施例で、メモリ214は上位キャッシュメモリを有し、一方、リソース213は下位キャッシュメモリを有する。他の実施例で、メモリ209は、プロセッサ205に付随する動的ランダムアクセスメモリ(DRAM)を有する。プロセッサ205は、DRAM209からのデータをキャッシュに格納するようキャッシュメモリを有する。これは実例となる実施形態である点に留意すべきであり、メモリ209及び214は、潜在的に如何なるスタイルメモリデバイスも有する。
【0032】
一実施例で、メモリ209及び214が、プロセッサ205及び210に含まれているか又は(表されるように)その外部にあるキャッシュメモリを有する場合に、プロセッサ205及び210は、ピアキャッシングノードはもちろんホームノードであることができる。例えば、トランザクションがメモリ209内のメモリロケーションを参照する場合に、メモリ209に関与するエージェント、すなわちプロセッサ205は、トランザクション及びメモリロケーションに関してホームエージェントであると判断される。同様に、トランザクションが他のメモリロケーション(例えば、メモリ214でのロケーション)を参照する場合に、プロセッサ205はピアキャッシングエージェントであると判断される。
【0033】
明らかなように、ポイント・ツー・ポイントリンク220乃至222は、ポイント・ツー・ポイント形式でコンポーネントを連結させる。物理リンク220乃至222は、一実施例で、夫々、図3を参照して以下で論じられる物理レイヤと関連する物理リンク等の、双方向の差動シグナリング相互接続を有する。結果として、プロセッサ205及び210並びにチップセット230は、互いに直接に通信することができる。
【0034】
チップセット230は、しばしば、入出力(I/O)ハブへ結合されているメモリコントローラハブ等の、複数の集積回路への総称指示である。なお、一実施例で、エージェントが夫々メモリとインターフェース接続するメモリコントローラハブのバージョンを有する場合に、チップセット230はI/Oハブ又は他のコントローラハブを言う。一実施例で、チップセット230は、上述されるように、トランザクションに参加し又はそれを経験する非キャッシングエージェントである。なお、チップセット230はそのように限定されず、他の実施例では、チップセット230は、キャッシュメモリを有するキャッシングエージェント及び/又はデータの元のメモリロケーション・リポジトリを有するメモリを有するホームエージェントである。
【0035】
表されるように、チップセット230は、また、例えば、周辺コンポーネント相互接続(PCI)又はPCIエクスプレス(PCI−E)デバイス261、集積デバイスエレクトロニクス(IDE)又はアドバンスト・トランスファー・アタッチメント(ATA)デバイス262、ユニバーサル・シリアル・バス(USB)デバイス263、ローカルエリアネットワーク(LAN)又は無線LAN(WLAN)デバイス264、オーディオデバイス265、及び他のI/Oデバイス266等の複数の相互接続及びI/Oデバイスとインターフェース接続すべきである。チップセット230は、また、ここで記載されるようにI/Oデバイスを結合する他の相互接続アーキテクチャを有してよい。
【0036】
図3を参照すると、階層化相互接続スタックを利用する双方向相互接続アーキテクチャに係るブロック図の実施例が表されている。例えば物理レイヤ302等の図3のレイヤへの言及には、例えば物理レイヤ302a及び物理レイヤ302b等の、異なるエージェントで実施され得る一般的なレイヤの議論が含まれる。表されるように、相互接続スタックは5つのレイヤに分けられる。かかるレイヤのうち1又はそれ以上は、潜在的に、設計実施に基づいて任意である。例えば、ルーティングレイヤ304は、一実施例で、リンクレイヤ303の機能性に組み込まれる。従って、ルーティングレイヤは、一実施例では、別個のレイヤでない。
【0037】
一実施例で、物理レイヤ302は、物理媒体での情報の電気伝送に関与する。例えば、物理的なポイント・ツー・ポイントリンクがリンクレイヤエンティティ303a及び303bの間で利用される。実例として、物理リンクは、双方向差動シグナリング対351及び352を有する差動シグナリングスキームを有する。この場合に、物理レイヤは、潜在的に論理的に電気サブブロック及び論理サブブロックに分けられ、これにより、物理レイヤは、情報の電気伝送から残りのスタックを分離し且つリンクレイヤ303と通信することができる。
【0038】
一実施例で、リンクレイヤ303は、スタックの上位レイヤから物理レイヤ302を抽出し、例えば、接続されるエージェント/エンティティの間の信頼できるデータ伝送及びフロー制御並びに多重仮想チャネル又はメッセージクラスへの物理チャネル/インターフェースの仮想化等のリンク関連サービスを提供する。ここで、仮想チャネルは、スタックの上位層による使用のための多重仮想ネットワークと考えられてよい。例えば、プロトコルレイヤ306は、プロトコルメッセージをメッセージクラスに、ひいては、1又はそれ以上の仮想チャネルへマッピングするよう、潜在的に、リンクレイヤ303によって提供されるアブストラクションに依存する。
【0039】
ルーティングレイヤ304は、一実施例で、ソースからあて先へパケットを送るための柔軟な方法を提供する。上述されるように、極めて簡単なトポロジで、ルーティングレイヤ304は明示的でなく、むしろリンクレイヤ303の機能性に組み込まれうる。例えば、ルーティングレイヤ304は、パケットを送るべく<ポート,仮想ネットワーク>対を特定するためにリンクレイヤ303のアブストラクションに依存してよい。ここで、ルーティングテーブル情報は、パケットにルーティング情報を提供するよう保持される。
【0040】
一実施例で、トランスポートレイヤ305は、エンド・ツー・エンドの信頼できる伝送サービスを提供する。ルーティングレイヤ304と同じく、トランスポートレイヤ305も設計実施に基づいて任意である。一例として、トランスポートレイヤ305は、プロトコルレイヤ306に信頼できる伝送サポートを提供するようルーティングレイヤ304サービスに依存する。相互接続アーキテクチャ内で、一実施例で、一部のコンポーネントはトランスポートレイヤ305を有する。結果として、この一部のコンポーネントは、トランスポートレイヤ305に関するパケットのサブフィールドを定義し、一方、他のコンポーネントは、潜在的にかかるサブフィールドを定義しない。
【0041】
プロトコルレイヤ306は、一実施例で、例えばキャッシュ・コヒーレンス、順序付け、ピア・ツー・ピア通信、割り込み転送等の、ノード/エージェント間の上位通信プロトコルを実施することができる。言い換えると、プロトコルレイヤ306は、ホームノード、ピアノード、キャッシングノード、及び非キャッシングノード等のノード又はエージェントについて、然るべく、許容されるメッセージ、要求、応答、フェーズ、コヒーレンス状態等を定義する。ホームノードメッセージ、スヌープメッセージ、応答メッセージ等のメッセージの例については以下で論じる。
【0042】
レイヤ及びそれに関連するロジックの議論は如何なる方法で結合されてもよい点に留意すべきである。例えば、プロトコルロジックは物理レイヤ、すなわち、送信又は受信ロジックへ結合されてもよい。ここで、図3から分かるように、一実施例で、プロトコルロジックは、物理レイヤロジックへ直接には結合されずに、むしろ他のレイヤロジックを介して結合されてよい。更に、相互接続スタックは、一実施例で、適切なキャッシュ・コヒーレンス動作を開始するよう、例えばキャッシュ制御又はキャッシュメモリロジック等の内部コンポーネントロジックへ結合される。
【0043】
[MESIFプロトコルの実施例の概説]
一実施例で、基本MESIF(Modified Exclusive Shared Invalid Forward)プロトコルは、単一のシリアライジング・バスの潜在的な制限を伴わずにスヌープ・プロトコルと同様のプロトコルを提供する。スヌーピング・キャッシュ・プロトコルのように、MESIFは、コヒーレンスを保つために、データのキャッシュコピーを有するノードに依存する。同期集中ブロードバンドよりむしろポイント・ツー・ポイントリンクの使用は、タイムワープの問題、すなわち、事象が異なるノードの側からすれば異なる順序で起こるように見えるという事実を持ち込む。一例として、MESIFプロトコルは、タイムワープに起因する潜在的エラーの認識を通してタイムワープを扱い、そのプロトコル又はソフトウェアソリューションを提供する。
【0044】
ホームノードは、しばしば、データのキャッシュ無しコピーと関連する。結果として、ホームノードは、そのホームノードと関連するデータに関するトランザクションに関与する。しかし、ホームノードは、トランザクションと関連する“クリティカルパス”に含まれる必要はなく、むしろ、ホームノードは、コンフリクト及びタイムワープ問題を解決するようトランザクションに介入する。かかるスキームの同時ブロードキャスト性のために、一実施例で、MESIFは、スヌーピング・プロトコルと関連する低レイテンシーを達成し、一方で、ある場合には、最低限のレイテンシー、すなわち、単一ラウンドトリップ要求−応答で、データのキャッシュ可能なコピーを取得する。
【0045】
一実施例で、MESIFプロトコルに関する基本的なトランザクションは、ホームノードはもちろん全てのピアノードへ最初の要求を送信することを伴う。コピーがステートE、F又はMコヒーレンス状態でキャッシュされる場合に、それは応答に含まれる。次いで、第2のメッセージがホームノードへ送信され、要求が満足されたことをホームノードに知らせる。要求されるラインがキャッシュされない場合、又はSステートのコピーしか存在しない場合は、ホームノードへ送信される第2の要求は、前の要求を確認するために使用される。この前の要求をホームノードは既に自身のメモリからフェッチしていてよい。いずれの場合にも、ホームノードは、同期及びコンフリクトの解消のために第2の要求(及び潜在的に、たとえそれらが時々結合され得るとしても、第1の要求)に応答する。ホームノードは1又はそれ以上のキャッシュを有してよい点に留意すべきであり、従って、それは、いずれの他のノードとも同じように最初の要求に応答することができる。
【0046】
一実施例で、コンフリクトは分散的に扱われる。タイムワープ問題は、個々の要求が任意に長い時間遅延しうるので、コンフリクトを検出することを困難にする。しかし、コンフリクトは、夫々のノードが要求後にコンフリクトについて監視する場合に検出される。複数のノードが潜在的にコンフリクトを検出してよいが、一例として、それらのノードのうちの少なくとも1つがコンフリクトを検出しうる。結果として、ノードからの応答は、一実施例で、潜在的にコンフリクト情報を有する。
【0047】
一実施例で、応答からデータのコピーを受け取ったノードは、受け取った直後に内部データを使用することを許可されるが、ノードが確認を受け取るまでは、他のシステムにとって可視的な、すなわち、グローバルに可視的なデータを使用するという作用を引き起こさない。確認は、また、要求ノードがそのコピーを他のノードへ転送すべき命令を含み、ことによると、そのノードを自身のキャッシュから退かせる。
【0048】
最後に、ノードがキャッシュデータを供給することによって他のノードからの要求に応答する場合に、ノードは、一実施例で、ノードがデータを転送したと認めるホームノードからの応答をノードが受け取るまで、同じキャッシュラインについて自身が受け取る他の要求を留保し、このようにして、全てのノードが(場合により書込可能な)キャッシュラインの伝送の同じ順序を守ることを確かにする。
【0049】
ホームノードは、上述されるように、キャッシュ無しデータのリポジトリであるが、ホームノードは、また、プロセッサ及びキャッシュを有してよい。ここで、ホームノードのプロセッサがキャッシュを逃す場合に、ホームノードは他の全ての(ピア)ノードへ要求を送信し、ホームノードは、ホームノードに到着したいずれの他の要求と同じく内部でその要求を扱う。これは、ホームノードが自身(ホームノード)へメッセージを明示的に送信する特別の場合である点に留意すべきである。更に、外部からの要求が、局所的にキャッシュされるデータについて到着する場合に、ホームノードは適切に応答する。
【0050】
開示されているメッセージプロトコルは、コヒーレンス(キャッシュ及びホーム)エージェント、非キャッシングエージェント、及び他のエージェント(メモリコントローラ、プロセッサ等)の間の許容されているメッセージの組を定義する。コヒーレンス・プロトコルは、考えられるコヒーレントを表すアルゴリズムでワード及び文法としてメッセージを使用する。このアルゴリズムは、分別よく要求を順序付け、コンフリクトを解消し、キャッシングエージェント間の相互作用を表す。MESIFプロトコルについて上述されたが、MESIFキャッシュ・コヒーレンス・プロトコルは利用される必要がない。例えば、既知のMESIFプロトコルの利用をもたらすフォワード状態は利用されなくてよい。更に、上記にはMESIFプロトコルにかかる実施例の典型的な概説が含まれる点に留意すべきである。結果として、上述される様々なコンポーネントは別々の実施例で相違しうる。メッセージング及び/又はコヒーレンス・プロトコルで利用される潜在的なメッセージの非包括的な例となる羅列は以下に含まれる。
【0051】
[スヌープメッセージ]
一実施例で、スヌープメッセージは、例えばピアキャッシングエージェント等のキャッシングエージェントへ向けられる。通常、スヌープメッセージはホームノード識別子(ID)を有さず、これより、それらはホームノードには送られずにピアキャッシングエージェントに送られる。
【0052】
Snoop Data(SnpData):これは、E、F又はSステートでデータを得るスヌープである。
【0053】
Snoop Invalidation Own(SnpInvOwn):これは、E又はMステートでデータを得るスヌープである。一実施例で、ピアエージェントは、データを自身のローカルメモリにE又はMステートで保持することに応答してデータを提供することができる。
【0054】
Snoop Invalidation Invalid to Exclusive(SnpInvItoE):これは、ピアキャッシングエージェントを無効にし、ホームノードへのあらゆるMステートデータをフラッシュ(flush)するスヌープである。
【0055】
Snoop Invalidation X to Invalid(SnpInvXtoI):これは、ピアキャッシングエージェントを無効にし、ホームノードへのあらゆるMステートデータをフラッシュするスヌープである。
【0056】
[ホームメッセージ]
下記のメッセージはホームノードと関連する。一例として、下記の幾つかはホームノードへの要求メッセージである。実際には、スヌープメッセージ及びホームメッセージのうち幾つかの間の類似性に留意すべきである。なお、これらの類似するメッセージは、しばしば、ホームノードへのメッセージがホームノードへ送られるべきホームノードIDを有し、一方、送信されるピアノードメッセージはホームノードへの参照を有さなくてもよい点で相違する。
【0057】
他のホームメッセージは、ホーム・ライトバック・マーカーメッセージを含む。ここで、データは、WbDataメッセージを介して別個に送信されてよく、マーカーメッセージに対して如何なる順序で受信されてもよい。以下に含まれるホームメッセージの他の例は、キャッシングエージェントからホームエージェントへのホームスヌープ応答メッセージ、及びコンフリクトフェーズの開始を知らせるコンフリクトメッセージのホーム確認応答である。
【0058】
Read Data(RdData);これは、排他的(Exclusive)(E)状態、更には、潜在的に、実施例に依存してフォワード(Forward)(F)状態又は共有(Shared)(S)状態でのデータの要求である。
【0059】
Read Invalidate Own(RdInvOwn):これは、M又はEステートでのキャッシュラインの要求である。
【0060】
Invalidate Invalid to Exclusive(InvItoE):これは、データを有さないキャッシュラインの要求である。
【0061】
Non-Snoop Read(NonSnpRd):これは、メモリからのコヒーレントでない読出を実行する要求である。
【0062】
Non-Snoop Write(NonSnpW):これは、メモリへのコヒーレントでない書込を実行する要求である。
【0063】
WriteBack Modified to Invalid、Shared、又はExclusive(WbMtoI、WbMtoS、及びWbMtoE):これは、Mステートにあるキャッシュラインをメモリにライトバックして、然るべくキャッシュラインの状態を無効状態、共有状態、又は排他状態へ遷移させる要求である。一実施例で、かかるメッセージは、データが送信されるべきことを示すマーカーメッセージであり、一方、データは、実際には、別々のメッセージ(例えば、Wb*Data*メッセージ)を介して伝送される。
【0064】
Response Invalid又はShared(RspI又はRspS):ピアエージェントは、然るべく無効状態で又は共有状態でキャッシュを持ち続ける。
【0065】
Response Forward Invalid又はShared(RspFwdI又はRspFwdS):ピアはデータを要求側へ送信しており、ラインは然るべく無効状態又は共有状態のままである。
【0066】
Response Forward Invalid又はShared WriteBack(RspFwdIwb又はRspFwdSWb):ピアはデータを要求側へ及びWbIDataをホームノードへ送信しており、ラインは然るべく無効状態又は共有状態のままである。
【0067】
Response Invalid又はShared WriteBack(RspIWb又はRspSWb):ピアはインフライト(in-flight)のWbIDataメッセージを有するデータをホームへ退かせており、如何なるメッセージも要求側へ送信していない。
【0068】
Response*Writeback Post(Rsp*WbPost):ピアは、インフライトのWb*Dataメッセージを有するデータをホームへ退かせており、如何なるメッセージも要求側へ送信していない。更に、一実施例で、Rsp*WbPostメッセージに関連するAckCnfltメッセージの送信側は、Cmp_Fwd*メッセージの受信に応答して割当てを解除されない。一例として、ホームエージェントは、メモリへの部分的データのコミットに応答して完全なメッセージを送信する。
【0069】
WbPost:ピアは、インフライトのWb*Dataメッセージを有するデータをホームへ退かせている。更に、一実施例で、WbPostメッセージの送信側は、Cmp_Fwd*メッセージの受信に応答して割当てを解除されない。ここで、送信側は、ホームノードからの完了を待つ。一例として、ホームエージェントは、メモリへのデータのコミットに応答して完全なメッセージを送信する。
【0070】
Response Conflict(RspCnflt):ピアは無効状態でラインを持ち続け、ピアはコンフリクトする対抗する要求を有する。
【0071】
Acknowledge Conflict(AckCnflt):データ完了(completion)/グラント(grant)及び完了/フォース(force)確認応答コンフリクトの確認応答受信。
【0072】
Acknowledge Conflict Write-back Invalid(AckCnfltWbI):一実施例で、それは、上述されるように、AckCnfltを伝える。更に、一実施例で、このメッセージは、更に、部分的データのライトバックを伝える。部分的データは、後述されるように、別個のWbIDataに含まれてよい。更に、データに関連するキャッシュラインは無効状態へと遷移させられる。
【0073】
[無データ応答メッセージ]
一実施例で、無データ応答メッセージは、データを送信することなくラインのオーナーシップを認めるグラントメッセージを有する。無データ応答メッセージは、また、完了を知らせる完了メッセージを有し、潜在的に、コンフリクト状態下でオーナーからデータを取り出す。
【0074】
Grant_Completion(GntCmp):データによらずに排他的オーナーシップを付与。
【0075】
Grant Force Acknowledge Conflict(Gnt_FrcAckCnflt):データ及びフォース確認応答コンフリクトによらずに排他的オーナーシップを付与。
【0076】
Completion(CMP):全てのスヌープ応答が収集され、コンフリクトは検出されない。
【0077】
Force Acknowledge Conflict(FrcAckCnflt):確認応答コンフリクトについて、スヌープ応答が収集される。
【0078】
Complete_Forward Code(Cmp_FwdCode):要求を完了し、フォワード状態又は共有状態でのラインを要求側へ転送し、且つ、ローカルコピーを無効にするか又はそれを共有状態のままとする。
【0079】
Complete Forward Invalidate Own(Cmp_FwdInvOwn):要求を完了し、排他的状態又は変形(Modified)(M)状態でのラインを要求側へ転送し、ローカルコピーを無効化。
【0080】
[データ応答メッセージ]
DataC_*:対応するMESIF状態でのデータ。
【0081】
DataC_*_Cmp:完了を伴う対応するESIF状態でのデータ。
【0082】
DataC_*_FrcAckCnflt:FrcAckCnfltを伴う対応するESIF状態でのデータ。
【0083】
Wb*Data:データをライトバックし、対応するE、S又はIステートへ遷移。
【0084】
WbIDataPtl又はWbEDataPtl:部分的データのライトバック、対応する無効状態又は排他的状態への遷移。
【0085】
Wb*DataPtlPost:部分的データのライトバック、対応するコヒーレンス状態への遷移。更に、一実施例で、Wb*DataPtlPostメッセージに関連するAckCnfltメッセージの送信側は、Cmp_Fwd*メッセージの受信に応答して割当てを解除されない。一例として、ホームエージェントは、メモリへの部分的データのコミットに応答して完全なメッセージを送信する。
【0086】
Non-Snoop Write Data(NonSnpWrData):これは、メモリへの非コヒーレントな書込である。
【0087】
Non-Snoop Write Data Partial(NonSnpWrDataPtl):これは、部分的データの非コヒーレントな書込である。
【0088】
図4aを参照すると、潜在的にメモリ順序付け違背を引き起こす複数のノードの間でのメッセージングのためのプロトコルダイアグラムの実施例が表されている。表されるように、プロトコルダイアグラムは、5つのノード、すなわち、多数のトランザクションに参加する入出力ハブ(IOH)(コンシューマ)、“フラグ(Flag)”のためのホームノード0(CHL0)、プロデューサノード(GQ0)、“データ(Data)”のためのホームノード1(CHL1)、及び他のキャッシングエージェント(GQ1)を表す。留意すべきは、表されるエージェントの数及びタイプは単に実例であり、相互接続アーキテクチャは極めて柔軟性があり且つ如何なる数又はスタイルのエージェントを有してもよい点である。
【0089】
ここで、プロデューサGQ0は、データに関連するキャッシュラインに対する要求を開始する。InvItoE(D)メッセージはホームノード1(CHL1)へ送信され、SnpInvItoE(D)メッセージはピアエージェント(コンシューマGQ1)へ送信/転送される。なお、このトランザクションの間、GQ1は、データの読出要求を有する別のトランザクションを開始する。留意すべきは、GQ1及びGQ0の両エージェントは、この場合に、コンフリクトを検出する点である。このコンフリクトは、ピアエージェントGQ0及びGQ1からホームエージェントCHL1へのRspCnfltメッセージによって反映される。ホームノードCHL1が対抗するメッセージを受信した後、それは、オーナーシップを付与し且つコンフリクトの確認応答を余儀なくさせるようGnt_FrcAckCnfltをGQ0へ送信する。
【0090】
この時点で、プロデューサとしてのGQ0は、データへの部分書込、すなわち、Data=Newを実行し、Gnt_FrcAckCnfltメッセージの受信を確認するAckCnfltメッセージを送信する。一実施例で、AckCnfltメッセージは、また、トランザクションのコンフリクトフェーズの開始を示し、一方、AckCnfltメッセージに付随する完了は、コンフリクトフェーズの終了を表す。次いで、ホームノードCHL1は、データをホームノードCHL1に押し返すようCmp_FwdCodeメッセージを送信する。しかし、部分的データ、すなわち、RspIWb(D)メッセージ及びWbIDataPtl(D)メッセージのライトバックは、例えばチャネル又はルーティング遅延のような幾つかの理由のために遅延する。
【0091】
一方、データを更新し、ホームノードCHL1へ部分的データ応答を供給し、ホームノードCHL1からのCmp_FwdCodeによってデータトランザクションへの部分書込から割当てを解除されると、GQ0は、フラグへの書込、すなわち、CHL0へのInvItoE(F)メッセージ並びにピアエージェントIOH及びGQ1への対応するスヌープを開始する。ここで、GQ0は、フラグについてのキャッシュラインのオーナーシップ、すなわち、ホームノードCHL0からのGnt_Cmpを取得し、フラグをNewへと更新する。更に、フラグの新たな値は、ホームノードCHL0へライトバックされる(すなわち、WbMtoI(F)及びWbIData(F))。しばしば、データ及びフラグに係るこのようなシナリオはI/O動作で利用される。この場合に、1のエージェントはデータを更新し、次いで、データが更新されており且ついつでも回復(retrieval)する状態になっていることを他のエージェントに知らせるようフラグを設定する。
【0092】
従って、IOHは、いつデータが取り出される準備ができるかを決定するよう、周期的に又は一定時間後にフラグをチェックしながらフラグに対してスピニング(spinning)を行っている。結果として、IOHは、フラグの非スヌープな又は非コヒーレントな読出、すなわち、NonSnpRd(F)を実行する。ここで、ホームノードCHL0のメモリからの読出は、データがいつでも取り出されることを示すFlag=New値を取り出す。もはやフラグに対してスピニングを行っていないIOHは、データのNonSnpRd要求を開始する。なお、NonSnpRdが受信される場合に、データは、GQ0からのData=Newのライトバックが遅延したために、依然としてOld値を保持する。結果として、コンシューマIOHは、無効な古いデータを取り出すが、データが有効であると信じる。これにより、潜在的に、不適法な動作又は実行が引き起こされる。
【0093】
留意すべきは、フラグ及びデータの例は、単に実例であって、部分的なメモリアクセス及び非コヒーレントなメモリアクセスの無効なメモリ順序付けが潜在的に無効な/不適法な動作をもたらすところの潜在的な環境を表す。結果として、ここで記載される実施例は、如何なる部分メモリアクセスシナリオとともに利用されてもよい。
【0094】
同様に、図4bは、潜在的にメモリ順序付け違背を引き起こす複数のノードの間でのメッセージングのためのプロトコルダイアグラムの他の実施例が表されている。ここで、GQ0は、上述されるように、ラインを要求する代わりに、データに係るキャッシュラインを変形状態に保つ。結果として、データへの書込の前に、GQ0は、変形されたコピーをWbMtoE(D)及びWbEData(D)によりホームノードCHL1へ返し、排他的状態へと遷移する。次いで、GQ0は、自身のローカルメモリでデータへの部分書込を実行する。なお、上記のように、GQ1は、データに対する読出要求を発する。留意すべきは、上記とは異なって、GQ1でなく、GQ0のみがコンフリクトを検出する。上述されるように、複数のノード/エージェントがコンフリクトを検出してよいが、プロトコルは、一実施例で、少なくとも1つのノードに依存してコンフリクトを検出する。
【0095】
結果として、GQ0は、解決のために、ホームノードCHL1へRspCnfltメッセージを供給する。コンフリクトフェーズへの同様の遷移が、同一の応答、すなわち、ホームノードCHL1からのGnt_FrcAckCnflt、GQ1からのAckCnflt、CHL1からのCmp_FwdCode、及び、次いで、前述同様に遅延するメッセージRspIWb(d)及びWbIDataPtl(D)によるデータのライトバックを有して起こる。次いで、フラグはNewへ更新され、IOHは、フラグのメモリからの非コヒーレントな読出を実行する。フラグがNewへ更新されたことによりデータがいつでも回復する状態となっていると確信すると、IOHはデータの非スヌープ読出を要求する。上記のように、IOHは、GQ0の部分書込、データの非コヒーレントな読出、及び新しい(New)データのライトバックの遅延に応答して、更新された新しい(New)データの代わりに、無効な古い(Old)データを受信する。
【0096】
従って、一実施例で、単一又は複数のメッセージを有しうるライトバックフェーズは、例えば部分書込のような部分メモリアクセスに関連するコンフリクトフェーズで挿入されて、部分的データをホームノードへ返す。第1の例として、コンフリクトを認めてライトバックマーカーを供給するAckCnfltWbIメッセージは、コンフリクトフェーズで生成される。他の例として、ライトバックメッセージを用いるライトバックフェーズは、AckCnfltメッセージがホームノードへ供給される前に挿入される。更なる他の例として、ライトバックメッセージを用いるライトバックフェーズは、コンフリクトフェーズ内に、すなわち、AckCnfltメッセージの後に含まれる。最後の具体例として、ライトバックフェーズは、Rsp*Post、WbDataPostメッセージ、又はWbPostメッセージを用いるコンフリクトフェーズ内又はその後に含まれ、これにより、AckCnfltメッセージの送信側は、コンフリクトフェーズの完了メッセージを受信した後に割当てを解除されない。
【0097】
ライトバックフェーズがコンフリクトフェーズで開始されるこのような例は単に実例であり、コンフリクトの際に部分的データをホームノードへ押し返す如何なる既知のメッセージ又は方法も利用されてよい。なお、議論を進めるよう、かかる具体例について、以下、図5a乃至7cを参照して論じられる。
【0098】
図5aを参照すると、コンフリクトフェーズの開始時にコンフリクト確認応答及びデータライトバックメッセージを用いるプロトコルダイアグラムの実施例が表されている。図5aのシナリオは、GQ0がデータに関連するキャッシュラインの排他的オーナーシップを要求し、GQ1がデータの読出要求を発し、コンフリクトがGQ0及びGQ1によって検出され、データに関連するホームノードCHL1がGnt_FrcAckCnfltメッセージをGQ0へ送信する点で、図4aのシナリオに類似する。しかし、一実施例で、プロデューサが単にAckCnfltメッセージだけ供給してホームノードCHL1からのGnt_FrcAckCnfltの受信を確認することに代えて、結合AckCnfltWbI(D)メッセージがGQ0によって生成されて送信される。ここで、AckCnfltWbIメッセージは2つの目的、すなわち、Gnt_FrcAckCnfltの確認応答と、データが例えばWbIDataPtl(D)のようなデータメッセージで供給されるホームノードCHL1へのマーカとを果たす。
【0099】
言い換えると、プロデューサGQ0がデータへの部分書込を実行し且つホームノードCHL1からコンフリクトメッセージを受信することに応答して、GQ0は、ホームノードへの部分的データのライトバックを実行する、すなわち、コンフリクトフェーズでライトバックフェーズを実行する。これまで、図4aで、ライトバックはコンフリクトフェーズが完了した後でその後に実行された。ここで、GQ0は、Cmp_FwdCodeを用いてコンフリクトフェーズの終わりまでに割当てを解除され、結果として、次のトランザクションは、いつ部分的なデータがホームノードCHL1に達するかに関わらず開始することができる。このことは、IOHによる無効なデータの取得を生じさせる。
【0100】
対照的に、図5aから明らかなように、Cmp_FwdCodeは、部分的データがホームノードCHL1に返されるか又はそのメモリにコミットされるまで送信されない。結果として、GQ0は割当てを解除されず、フラグを更新する次のトランザクションはデータがCHL1で更新され且つCmp_FwdCodeメッセージがGQ0で受信された後まで始まらない。これにより、結果として、フラグが更新される前にデータが更新されることが確かとなる。従って、IOHがフラグ、次いでデータの非コヒーレントな読出を実行する場合に、CHL1にあるデータはGQ0からの最新のコピーであることが保証される。
【0101】
同様に、図5bを参照すると、コンフリクトフェーズの開始時にコンフリクト確認応答及びデータライトバックメッセージを用いるプロトコルダイアグラムの他の実施例が表されている。ここで、プロトコルフローは、GQ0がデータの変形されたOldコピーを保持し、そのOldコピーをホームノードCHL1へライトバックし、データを新しい値へ更新し、GQ1がデータの読出要求を発し、コンフリクトが検出され、コンフリクトメッセージのフォース確認応答がホームノードCHL1によって生成されてプロデューサGQ0へ送信される点で、図4aのプロトコルフローと類似する。
【0102】
ここで、図5aを参照して論じられたように、一実施例で、GQ0はデータへの部分書込を実行して、コンフリクトメッセージはGQ0によってホームノードCHL1から受信されるので、AckCnfltWbIメッセージがホームノードCHL1へ供給される。AckCnfltWbIメッセージは、コンフリクトが確認され且つデータメッセージ(すなわち、WbIDataPtlメッセージ)がデータをホームノードCHL1へ供給すべきことをホームノードに知らせる。潜在的なタイムワープに係る前述の議論から留意すべきは、WbIDataPtlは潜在的にAckCnfltWbIの前に受信され得る点である。しかし、プロトコルの動作を通して、CHL1は、プロトコルフローと一致する方法でいずれも行う。結果として、フラグ・トランザクションは、GQ0がホームノードCHL1から完了信号を受信するまで開始されない。完了信号は、部分データの受信後しか送信されない。従って、上述されるように、IOHは、フラグがNewへ更新されるまでフラグに対してスピニングを行う。フラグの更新は、目下、データがCHL1で更新された後であることを確かにされ、結果として、適切なメモリ順序付けと、有効なデータがIOHへ供給されることとがもたらされる。
【0103】
次に、図6aを参照すると、コンフリクトフェーズでライトバックフェーズを用いるプロトコルダイアグラムの他の実施例が表されている。上述されるように、図6aのプロトコルは、少なくとも最初は、図4aのプロトコルに類似する。対照的に、ホームノードCHL1からのGnt_FrcAckCnfltメッセージの受信に応答して、プロデューサエージェントGQ0はデータへの部分書込を実行し、WbMtoIデータマーカーメッセージ及びWbIDataPtlデータメッセージを用いてホームノードCHL1へ部分的データをライトバックする。GQ0がライトバックの完了メッセージを受信した後、すなわち、部分的なデータがCHL1でコミットされ且つ完了メッセージがCHL1によって送信された後、GQ0はAckCnfltメッセージをホームノードCHL1へ送信し、ホームノードCHL1はCmp_FwdCodeメッセージをGQ0へ送信する。
【0104】
上述されるように、フラグ書込トランザクションは、Cmp_FwdCodeメッセージがGQ0によって受信された後まで開始されず、Cmp_FwdCodeメッセージは、新しいデータがCHL1へ返された後まで送信されない。結果として、IOHは、フラグがNewへ更新されるまでデータを読み出さず、一方、フラグは、データがCHL1でコミットされるまで更新されない。言い換えると、フラグが更新される前にグローバルに観測されるデータのメモリ順序付けが、実施される。
【0105】
同様に、図6bは、コンフリクトフェーズでライトバックフェーズを用いるプロトコルダイアグラムの他の実施例を表す。ここで、プロトコルフローは、やはり、図4bのプロトコルフローに類似する。しかし、上記の図6aごとく、データへの部分書込を実行し且つホームノードCHL1からFrcAckCnfltメッセージを受信することに応答して、プロデューサエージェントGQ0は新しい(New)データのライトバックを実行する。GQ0からのAckCnfltから始まり、ホームノードCHL1からのCmp_FwdCodeで終わるコンフリクトフェーズは、新しい(New)データの受信に応答してCHL1からの完了がGQ0によって受信されるまで始まらない。結果として、フラグ値の更新の前にホームノードCHL1でデータを更新するメモリ順序付けが、実施される。これにより、結果として、正確な/有効な新しい(New)データがコンシューマIOHへ供給される。
【0106】
図6cを参照すると、データのライトバックを有するライトバックフェーズを用いるプロトコルダイアグラムの他の実施例が表されている。ここで、ライトバックフェーズは、図6aのライトバックフェーズに類似する。しかし、ライトバックフェーズは後で実行される。更に、ここで、RspIWbメッセージ及びWbIDataPtlメッセージを用いる代わりに、上記の図4aのごとく、WbMtoIメッセージ及びWbIDataPtlメッセージがデータのライトバックのために用いられる。言い換えると、ライトバックフェーズが、応答フェーズの代わりにコンフリクトフェーズで用いられる。これは、図4aのようにCHL1からGQ0への完了を伴わないデータの単なる転送に代えて、GQ0がフラグ・トランザクションに移る前にホームノードCHL1からの完了メッセージを要求する。
【0107】
図7aを参照すると、データのライトバックのためにポスタブル書込メッセージを用いるプロトコルダイアグラムの実施例が表されている。ここで、フローは、図6cのフローに極めて類似する。しかし、留意すべきは、RspIWbPost(D)マーカーメッセージがWbMtoIマーカーメッセージの代わりに用いられる点である。従って、一実施例で、RspIWbPostによって開始されるフェーズは応答フェーズと呼ばれる。しかし、完了信号がホームノードCHL1からGQ0で受信されるまで適切に応答していたGQ0の割当てを解除しないRspIWbPostの機能性に留意すべきである。明らかなように、動作において、RspIWbPostは、GQ0が、GQ0がフラグ・トランザクションに移ることができる前にホームノードCHL1からの完了を待つ点で、GQ0がフラグ・トランザクションに移る前に完了を待たない図4aのRspIWbよりも、図6cのWbMtoIに類似する。言い換えると、RspIWbPostは、RspIWbPostを送信したノードGQ0が割当てを解除される前に完了を待つ“ポスタブル書込(postable write)”を示す。従って、一実施例で、RspIWbPostの利用は、ライトバックフェーズと呼ばれる。
【0108】
同様に、図7bは、データのライトバックのためにポスタブル書込メッセージを用いるプロトコルダイアグラムの他の実施例を表す。ここで、留意すべきは、“ポスタブル書込”は、マーカーメッセージRspIWbの代わりに、データメッセージWbIDataPtlPostによって示され得る点である。更に、図7cに表されるように、別のメッセージWbPostは、RspIWb及びWbIDataPtlが一実施例でライトバックフェーズの部分であることを示すために用いられてよい。この場合に、GQ0は、メモリへの部分的データのコミットに応答してホームノードCHL1からの完了が受信されるまで割当てを解除されない。
【0109】
以上から明らかなように、一実施例で、コンフリクトフェーズでライトバックフェーズを実行し、挿入し、そのためのメッセージを生成、又は開始することは、コンフリクトフェーズに対して異なる時間的関係を有する。一実施例で、コンフリクトフェーズでのライトバックフェーズは、例えば、ライトバックマーカーメッセージと結合されている確認応答コンフリクトメッセージ、すなわち、AckCnfltWbI(D)のように、コンフリクトフェーズの開始時に含める。他の実施例で、コンフリクトフェーズでのライトバックフェーズは、例えば、Gnt_FrcAckCnfltの後であって且つAckCnfltメッセージの前、すなわち、図6a及び6bに関する議論のように、コンフリクトフェーズの前に含める。更なる他の実施例で、コンフリクトフェーズでのライトバックフェーズは、例えば、AckCnflt及びCmp_FwdCodeメッセージの後、すなわち、図6c乃至7cに関する議論のように、コンフリクトフェーズの後に含める。
【0110】
更に、ライトバックフェーズは、一実施例で、例えばAckCnfltWbI、WbMtoI、及びWbIDataPtlのようなライトバックメッセージを参照する。他の実施例で、ライトバックフェーズは、また、例えば、RspIWbPost、WbIDataPtlPost、及びWbPostのような、ライトバック機能性をエミュレートする応答関連メッセージを有する。一例として、ライトバックフェーズの機能性をエミュレートすることは、ライトバックの完了メッセージが受信されるまで送信エージェントの割当てを解除しないこと又は送信エージェントが待機することを有する。
【0111】
従って、以上から明らかなように、メモリ順序づけは、部分メモリアクセス及び非スヌープ/非コヒーレントアクセスが行われる場合に、コンフリクトが検出される場合でさえ実施され得る。従って、データが読み出されることを示すようフラグを設定する第2のエージェントからのデータに第1のエージェントが付随している場合等の環境下で、適切なメモリ順序付けの実施は、一貫性のない無効なデータの代わりに、有効な/新しいデータが供給されることを確かにする。
【0112】
ここで使用されるモジュールは、如何なるハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せも言う。しばしば、別個なものとして表されるモジュール境界は一般的に変化し、潜在的には重なる。例えば、第1及び第2のモジュールは、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せを共有しながら、潜在的に或る独立したハードウェア、ソフトウェア、又はファームウェアを保ってよい。一実施例で、用語「ロジック」の使用は、例えばトランジスタや抵抗等のハードウェア、及び例えばプログラム可能なロジックデバイス等の他のハードウェアを含む。なお、他の実施例で、「ロジック」は、また、例えばファームウェア又はミクロコード等の、ハードウェアと一体化したソフトウェア又はコードを含む。
【0113】
ここで使用される「値」は、数、状態(ステート)、論理状態、又は2進論理状態のあらゆる既知の表現を含む。しばしば、論理レベル、論理変数、又は論理値の使用は、“1”及び“0”と呼ばれることがある。これは容易に2進論理状態を表す。例えば、“1”は高論理レベルに言及し、“0”は低論理レベルに言及する。一実施例で、トランジスタ又はフラッシュセル等の記憶セルは、単一の論理値又は複数の論理値を保持する能力を有してよい。なお、コンピュータシステムでの値の他の表現が使用されている。例えば、10進数“10”は、また、“1010”の2進値及び16進文字“A”として表されてもよい。従って、「値」は、コンピュータシステムで保持され得る情報のあらゆる表現を含む。
【0114】
更に、「状態(ステート)」は値又は値の一部分によって表され得る。一例として、論理“1”等の第1の値はデフォルト又は初期状態を表すことができ、一方、論理“0”等の第2の値は非デフォルト状態を表すことができる。更に、用語「リセット」及び「設定(セット)」は、一実施例で、夫々、デフォルトの及び更新された値又は状態を言う。例えば、デフォルト値は、潜在的に、高論理値、すなわちリセットを有し、一方、更新される値は、潜在的に、低論理値、すなわちセットを有する。留意すべきは、値の如何なる組合せも、あらゆる数の状態を表現するために利用される点である。
【0115】
前述の方法、ハードウェア、ソフトウェア、ファームウェア又はコードの実施例は、処理要素によって実行可能である機械アクセス可能な又は機械読出可能な媒体に格納されている命令又はコードを介して実施されてよい。機械アクセス可能/読出可能な媒体は、コンピュータ又は電子システム等の機械によって読出可能な形式で情報を提供(すなわち、記憶及び/又は送信)するあらゆるメカニズムを有する。例えば、機械アクセス可能な媒体には、静的RAM(SRAM)又は動的RAM(DRAM)等のランダムアクセスメモリ(RAM)、ROM、磁気若しくは光記憶媒体、フラッシュメモリデバイス、電気記憶デバイス、光記憶デバイス、音響記憶デバイス、又は他の形態の伝播信号(例えば、搬送波、赤外線信号、デジタル信号)記憶デバイス等がある。例えば、機械は、例えば搬送波等の伝播信号で送信される情報を保持することができる媒体から伝播信号を受信することにより記憶媒体にアクセスしてよい。
【0116】
本明細書の全体を通して“一実施例”又は“実施例”との言及は、その実施形態に関連して記載される特定の特徴、構造、又は事項が本発明の少なくとも1つの実施例に含まれることを意味する。このように、本明細書の全体を通して様々な場所でのフレーズ“一実施例で”又は“実施例で”の出現は、必ずしも全て同じ実施形態に言及しているわけではない。更に、特定の特徴、構成、又は事項は、1又はそれ以上の実施例で何らかの適切な方法で組み合わされてよい。
【0117】
以上、詳細な記載が特定の具体的な実施形態を参照して与えられた。なお、様々な改良及び変形が、添付の特許請求の範囲に記載される本発明の幅広い精神及び適用範囲から外れることなく行われてよいことは明らかである。従って、明細書及び図面は、限定の観点よりむしろ例示の観点で受け止められるべきである。更に、実施例及び他の例となる用語の使用は、必ずしも同じ実施例又は同じ例に言及しているわけではなく、潜在的に同じ実施例はもちろん異なる個別の実施例に言及していることがある。
【符号の説明】
【0118】
100 相互接続アーキテクチャ
101 ネットワーク構造
105,106 キャッシングエージェント
110〜112 ホームエージェント
205,210 プロセッサ
206,207,211,212 処理要素(PE)
208,213 リソース
209,214 メモリ
220〜222 ポイント・ツー・ポイントリンク
230 チップセット
261〜266 相互接続及びI/Oデバイス
302a,302b 物理レイヤ
303a,303b リンクレイヤ
304a,304b ルーティングレイヤ
305a,305b トランスポートレイヤ
306a,306b プロトコルレイヤ
351,352 双方向差動シグナリング対
【技術分野】
【0001】
本発明は、高速ポイント・ツー・ポイント相互接続リンクに関し、より具体的には、コヒーレント相互接続アーキテクチャを実施するコヒーレンス・プロトコルに関する。
【背景技術】
【0002】
電子システムが複数のキャッシュメモリを有する場合に、システムに保持されているデータの妥当性、すなわちコヒーレンスは、データ演算のインテグリティを確かにするよう保たれている。コヒーレンスは、しばしば、キャッシュ・コヒーレンス・プロトコルに従ってデータを扱うことによって達成される。キャッシュ及び/又はプロセッサの数が増えるにつれて、コヒーレンスを保つ複雑性は増す。これにより、潜在的に、システムの複数のコンポーネントの間でのコンフリクトの数は増大することとなる。
【0003】
例えば、複数のコンポーネント(例えば、キャッシュメモリ、プロセッサ)が同じデータブロックを要求する場合に、これらの複数のコンポーネントの間のコンフリクトは、データの妥当性を保つように解消される。以前のキャッシュ・コヒーレンス・プロトコルは、通常、コンフリクト解決に関与する単一コンポーネントを有する。しかし、システムの複雑性が増すにつれ、コンフリクト解決のための単一コンポーネントへの依存はシステム全体の性能を低下させうる。
【0004】
一般に、キャッシュ・コヒーレンスを提供する2つの基本的なスキームがある。それは、スヌーピング(現在、しばしば、対称型マルチプロセッシング(SMP)と呼ばれる。)及びディレクトリ(しばしば、分散共有メモリ(DSM)と呼ばれる。)である。これら2つのスキームの間の基本的な違いは、メタ情報、すなわち、どこにキャッシュラインのコピーが保持されているかに関する情報への配置及びアクセスを中心に展開する。
【0005】
ディレクトリに基づくスキームに関して、キャッシュ無しデータが記憶されている固定位置に加えて、どこにキャッシュコピーが存在するかを示す固定ロケーション、すなわちディレクトリがある。新しい方法でキャッシュラインにアクセスするために、ノードは、ディレクトリを有するノード(通常、キャッシュ無しデータを有する同じノードである。)と通信すべきであり、主記憶コピーが有効である場合に応答ノードがデータを供給することを可能にする。ディレクトリシステムにおけるこのようなノードは、ホームノードと呼ばれる。
【0006】
ディレクトリは、二通りに分配され得る。第1に、主記憶データ(キャッシュ無しリポジトリ)は、しばしば、ノード間で分配され、一方、ディレクトリも同じように分配される。第2に、ラインがキャッシュされるかどうか及びラインがキャッシュされる場合にはどこに単一コピーが存在するかについて、少ない情報としてホームノードに保持しながら、メタ情報自体が分配され得る。例えば、SCIはこのスキームを使用し、キャッシュコピーを有する各ノードは、キャッシュコピーを有する他のノードへのリンクを保ち、集合的に完全なディレクトリを保持する。
【0007】
スヌーピングキャッシュに関して、メタ情報は、キャッシュラインの有効なコピーの夫々が、キャッシュラインにアクセスして然るべく応答する要求を認識すべきユニットによって保持されるように、キャッシュコピー自体を有して分配される。通常、データがキャッシュされない状態で、すなわち、その元のロケーションに、保持されているリポジトリがある。しばしば、この元のロケーションに関与するエージェント又はユニットは、ホームノードと呼ばれる。キャッシュラインへのアクセスを要求する場合に、要求ノードは、しばしば、必要とされるパーミッションと共に、要求されるキャッシュラインのアドレスを送信し、要求されるキャッシュラインのコピーを保持するノードは然るべく応答する。
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかし、現在のコヒーレンス及びメッセージングプロトコルの幾つかで、キャッシュラインの部分読出及び非スヌープメモリアクセス、すなわち、コヒーレントなアーキテクチャでの非コヒーレントアクセスは、或る環境下で、潜在的に、要求側へ無効なデータを転送する事態を生じさせる。しばしば、かかる環境は、プロトコル内のメモリ順序付け規則の違反に起因する。結果として、不正な動作が、無効なデータを受け取ったエージェントによって行われる。これは、潜在的に、システム内の不安定性につながる。
【課題を解決するための手段】
【0009】
本発明の一実施形態で、
部分的な書込を実行して部分的データを更新する第1のロジックと、
前記部分的データに関連するコンフリクトメッセージの受信に応答してコンフリクトフェーズでライトバックフェーズを開始し、該ライトバックフェーズは、前記部分的データを該部分的データに関連するホームエージェントへ供給する第2のロジックと、
前記第2のロジックへ結合され、前記ライトバックフェーズの間前記ホームエージェントへ前記部分的データを供給する第3のロジックと
を有する装置が提供される。
【0010】
また、本発明の一実施形態で、
キャッシュラインを有するキャッシュメモリと、
前記キャッシュメモリへ結合され、前記キャッシュラインへの部分的データの部分書込を実行する第1のロジックと、
前記部分的データに関連するホームノードからのコンフリクトメッセージを受信する第2のロジックと、
前記第2のロジックへ結合され、前記コンフリクトメッセージの確認応答と、前記部分的データが、前記第1のロジックが当該部分的データの前記部分書込を実行し且つ前記第2のロジックが前記コンフリクトメッセージを受信したことに応答して、データメッセージにおいて送信されるべきこととを前記ホームノードへ示す結合メッセージを生成する第3のロジックと、
前記第3のロジックへ結合され、前記結合メッセージを前記ホームノードへ送信する第4のロジックと
を有する装置が提供される。
【0011】
また、本発明の一実施形態で、
部分的データに関連するホームノードからのコンフリクトメッセージの受信と、当該ピアノードが前記部分的データに対して部分書込を実行することとに応答してコンフリクトフェーズでライトバックフェーズを開始するライトバックメッセージを生成する第1のロジックを有するピアノードを有し、
前記ホームノードは、ポイント・ツー・ポイントリンクを介して前記ピアノードへ結合され、
前記ホームノードは、前記ライトバックフェーズの間の前記ピアノードからの前記部分的データの受信に応答して前記コンフリクトフェーズで前記ライトバックフェーズに係る完了メッセージを生成する第2のロジックを有する、システムが提供される。
【0012】
また、本発明の一実施形態で、
部分的データをピアキャッシングエージェントで新たな部分的データへと更新する段階と、
前記部分的データに関連して前記ピアキャッシングエージェントによりコンフリクトメッセージを受信する段階と、
前記新たな部分的データが、前記ピアキャッシングエージェントにより前記コンフリクトメッセージを受信することに応答して、ホームエージェントへライトバックされることを示すライトバックメッセージを生成する段階と、
前記ホームエージェントが前記ピアキャッシングエージェントから新たな部分的データを受信した後、前記ピアキャッシングエージェントにより前記ホームノードから完了メッセージを受信する段階と
を有する方法が提供される。
【発明の効果】
【0013】
本発明の実施形態により、部分的且つ非コヒーレントなメモリアクセスの観点からキャッシュ・コヒーレンス・リンクに基づく相互接続においてメモリ順序付けを保つことが可能となる。
【図面の簡単な説明】
【0014】
【図1】プロトコルアーキテクチャの実施例を表す。
【図2】ポイント・ツー・ポイント相互接続を用いてチップセットへ結合される複数のプロセッサを有するシステムの実施例を表す。
【図3】階層化入出力(I/O)スタックを用いる双方向相互接続アーキテクチャに係るブロック図の実施例を表す。
【図4a】潜在的にメモリ順序付け違背を生じさせる複数のノード間のメッセージングプロトコルに係るプロトコルダイアグラムの実施例を表す。
【図4b】潜在的にメモリ順序付け違背を生じさせる複数のノード間のメッセージングプロトコルに係るプロトコルダイアグラムの他の実施例を表す。
【図5a】適切なメモリ順序付け要求に従うようコンフリクトフェーズでメッセージを有するメッセージングプロトコルに係るプロトコルダイアグラムの実施例を表す。
【図5b】適切なメモリ順序付け要求に従うようコンフリクトフェーズでメッセージを有するメッセージングプロトコルに係るプロトコルダイアグラムの他の実施例を表す。
【図6a】適切なメモリ順序付け要求に従うようコンフリクトフェーズの前に挿入されるデータライトバックフェーズを有するメッセージングプロトコルに係るプロトコルダイアグラムの実施例を表す。
【図6b】適切なメモリ順序付け要求に従うようコンフリクトフェーズの前に挿入されるデータライトバックフェーズを有するメッセージングプロトコルに係るプロトコルダイアグラムの他の実施例を表す。
【図6c】適切なメモリ順序付け要求に従うようコンフリクトフェーズでメッセージを有するメッセージングプロトコルに係るプロトコルダイアグラムの他の実施例を表す。
【図7a】適切なメモリ順序付け要求に従うようコンフリクトフェーズの後にメッセージを有するメッセージングプロトコルに係るプロトコルダイアグラムの実施例を表す。
【図7b】適切なメモリ順序付け要求に従うようコンフリクトフェーズの後にメッセージを有するメッセージングプロトコルに係るプロトコルダイアグラムの他の実施例を表す。
【図7c】適切なメモリ順序付け要求に従うようコンフリクトフェーズの後にメッセージを有するメッセージングプロトコルに係るプロトコルダイアグラムの実施例を表す。
【発明を実施するための形態】
【0015】
以下、添付の図面を参照して、一例として本発明の実施形態をあらわす。なお、本発明はこの実施形態に限定されない。
【0016】
以下の記載で、特定の相互接続アーキテクチャ、特定のメッセージ、特定の擬似コード、特定の相互接続アーキテクチャレイヤ等の例のような多数の特定の詳細が、本発明の徹底的な理解を与えるために挙げられている。なお、当業者には明らかなように、これらの特定の詳細が本発明を実施するために用いられる必要はない。他の例で、特定の相互接続レイヤの構造上の詳細や、特定の非適合メッセージ及びプロトコルや、プロセッサ及びキャッシュの特定の動作上の詳細等、よく知られているコンポーネント又は方法は、本発明を不必要に不明りょうとすることを避けるために、詳細には記載されていない。
【0017】
ここで記載される方法及び装置は、相互接続アーキテクチャにおいて部分アクセスと非スヌープメモリアクセスとの間で適切なメモリ順序付けを提供するためものである。特に、メモリ順序付け要件の順守は、主として、実例となるキャッシュ−コヒーレントリンクに基づく相互接続アーキテクチャに関して論じられている。なお、適切なメモリ順序付け要件を提供する方法及び装置はそのように限定されず、それらは如何なる相互接続アーキテクチャにより実施されてもよい。
【0018】
[実例となる相互接続アーキテクチャの実施例]
図1は、高レベル簡易プロトコルアーキテクチャの実施例を表す。一実施例で、プロトコルアーキテクチャは、衝突する要求の間と同様に、通常のトランザクションの間、アーキテクチャ内のキャッシュにおいてデータ間のデータ整合性を保つべきである。更に、プロトコルアーキテクチャは、一実施例で、また、それぞれの要求が満足され引っ込められるように、夫々の要求についてフォワード・プログレス(forward progress)を提供する。
【0019】
プロトコルアーキテクチャは、ノード又はエージェントを幾つ有してもよい。一実施例で、ノードは、内部キャッシュメモリ、外部キャッシュメモリ、及び/又は外部メモリと関連するプロセッサを有する。なお、ノード又はエージェントは、例えば、プロセッサ、メモリコントローラハブ、及びI/Oハブ、汎用コントローラハブ、I/Oデバイス、I/Oデバイスの一群、あるいは、メモリにアクセス可能ないずれかの他のデバイス/コンポーネント等、相互接続アーキテクチャにおける如何なる装置又はそのような装置の一群であってもよい。他の実施例で、ノードは他の電子システムと相互接続されている電子システム(例えば、コンピュータシステム、モバイルデバイス)である。また、他のタイプのノード構成が使用されてもよい。
【0020】
表されるように、アーキテクチャ100は、キャッシングノード/エージェント105及び106と、ホームエージェント110乃至112とを有する。一実施例で、ホームエージェント110乃至112は、コヒーレントなメモリ空間の最終リポジトリであるメモリロケーションを保護すべきである。言い換えると、エージェント110は、コヒーレントなメモリ空間のデータについて複数の元の物理的なメモリロケーションに関与するホームエージェントである。ホームエージェント110乃至112は、キャッシングエージェント105及び106からのキャッシュ状態トランザクションの追跡と、キャッシングエージェント105及び106の間のコンフリクトの管理と、メモリへのインターフェースと、データ及び/又はオーナーシップの提供と、いずれかの他のホームエージェントに関連するタスクとを含むタスクの如何なる組合せも実行することができる。
【0021】
一実施例で、キャッシングエージェント105及び106は、キャッシュメモリ及びキャッシングI/Oプロキシエンティティを含むプロセッサ等、キャッシュメモリと関連するエージェントを有する。キャッシングエージェント105及び106は、コヒーレントメモリ空間への読出及び書込要求の実行、コヒーレントメモリ空間からのデータのキャッシュコピーの保持、及び他のピアキャッシングエージェントへのキャッシュコピーの供給等のタスク及びいずれかの他のタスクの如何なる組合せも実行することができる。キャッシングエージェント又はノードは、また、他のキャッシングエージェントに関してピアエージェント/ノードと呼ばれることがある。図1に具体的に現されていないが、プロトコルアーキテクチャは、入出力(I/O)デバイスに代わってトランザクションに参加し又はそれを経験するI/Oハブ等の非キャッシングエージェントを更に有してよい。
【0022】
一実施例で、キャッシングエージェント105及び106並びにホームエージェント110乃至112は、ネットワーク構造101を介するメッセージの交換を通して、データ整合性を保持しフォワード・プログレスを提供する。一実施例で、構造101は、ポイント・ツー・ポイント相互接続ネットワークを通して1つのエージェント/ノードから他のエージェント/ノードへのメッセージの伝送を助ける。しばしば、図1は、基盤ネットワークのキャッシュ・コヒーレンス・プロトコルの抽象的な見方を表すと言われる。
【0023】
一実施例で、相互接続アーキテクチャ100は、下記の同時係属出願で記載されるように、新規の特徴の如何なる組合せも組み入れてよい。例えば、米国特許第6,922,756号(発明の名称「forward State for Use in Cache Coherency in a Multi-Node System」)は、フォワードキャッシュ・コヒーレンス状態(Fステート)の利用について記載する。更に、様々な状況でのコヒーレンス・プロトコルの例は、2004年4月27日に出願された米国特許出願第10/833,963号(事件整理番号P15925)(発明の名称「A Two-Hop Cache Coherency Protocol」)、2004年4月27日に出願された米国特許出願第10/833,965号(事件整理番号P18890)(発明の名称「A Messaging Protocol」)、2004年4月27日に出願された米国特許出願第10/833,977号(事件整理番号P18891)(発明の名称「A Cache Coherence Protocol」)、2006年1月11日に出願された米国特許出願第11/330,977号(事件整理番号P22376)(発明の名称「A Two-Hop Source Snoop Based Cache Coherence Protocol」)、及び2006年1月11日に出願された米国特許出願第11/331,301号(事件整理番号P23106)(発明の名称「A Two-Hop Source Snoop Based Messaging Protocol」)で論じられている。
【0024】
他の例は、2002年12月19日に出願された米国特許出願第10/325,427号(事件整理番号P13923)(発明の名称「Speculative Distributed Conflict Resolution for a Cache Coherency Protocol」)、2002年12月19日に出願された米国特許出願第10/326,234号(事件整理番号P13984)(発明の名称「Hierarchical Directories for Cache Coherency in a Multiprocessor System」)、2002年12月19日に出願された米国特許出願第10/324,711号(事件整理番号P13985)(発明の名称「Hierarchical Virtual Model of a Cache Hierarchy in a Multiprocessor System」)、及び2002年12月19日に出願された米国特許出願第10/326,232号(事件整理番号P13986)(発明の名称「Non-Speculative Distributed Conflict Resolution for a Cache Coherency Protocol」)を含む。
【0025】
前述の同時係属出願に記載される特徴は、本願明細書等に記載される実施例に組み込まれ得る点に留意すべきである。なお、本願明細書等に記載される実施例はそのように限定されず、それらは、潜在的に前述の特徴のいずれも有さないだけではなく、付加的な特徴を有してよい。
【0026】
図2は、ポイント・ツー・ポイント相互接続アーキテクチャを利用するチップセットへ結合されている複数のプロセッサを有するシステムの実施例を表す。図2のシステムは、また、複数のプロセッサを有してよい。それらのプロセッサのうち2つのプロセッサ205及び210しか明りょうさのために示されない。表されるように、プロセッサ205及び210は、夫々、2つの処理要素(PE)206及び207又は211及び212を有する。なお、プロセッサ205及び210には処理要素が幾つ含まれてもよい。
【0027】
処理要素は、スレッドユニット、処理ユニット、コンテキスト、論理プロセッサ、ハードウェアスレッド、コア、及び/又はいずれかの他の要素を言い、例えば実行状態又は構造上の状態等のプロセッサの状態を保つことができる。言い換えると、処理要素は、一実施例で、例えば、ソフトウェアスレッド、オペレーティングシステム、アプリケーション、又は他のコード等のコードと独立して関わることができる如何なるハードウェアも言う。一例として、通常、物理プロセッサは集積回路を表し、これは潜在的にコア又はハードウェアスレッド等の他の処理要素を幾つでも有する。
【0028】
コアは、しばしば、独立した構造上の状態を保つことができる集積回路に配置されるロジックを言う。夫々の独立して保たれる構造上の状態は、少なくとも幾つかの専用の実行リソースと関連する。コアとは対照的に、物理スレッドと呼ばれることもあるハードウェアスレッドは、通常、独立した構造上の状態を保つことができる集積回路に配置されるあらゆるロジックを言う。独立して保たれる構造上の状態は、実行リソースへのアクセスを共有する。そのため、明らかなように、例えば単一スレッド・アプリケーションの複数の複製等の複数のソフトウェアスレッドは、一実施例で、コア又はハードウェアスレッド等の前述の処理要素のいずれかの組合せを含む複数の処理要素で並行して実行され得る。
【0029】
また、プロセッサ205及び210の中にはリソース208及び213が表されている。リソース208及び213は、通常、レジスタ、ユニット、ロジック、ファームウェア、メモリ、及び他のリソースを有し、コードを実行し又は他のデバイスとインターフェース接続する。上述されるように、リソースの幾つかは、部分的に又は完全に処理要素のために設けられてよく、一方、残りのリソースは、処理要素の間で共有される。例えば、命令ポインタ及びリネームロジック等のより小さいリソースは、物理スレッドについて複製されてよい。リオーダー/リタイアメント・ユニットにおけるリオーダーバッファ、命令ルックアサイド・トランスレーション・バッファ(ILTB)、負荷/記憶バッファ、及びキュー等の幾つかのリソースは、パーティショニングを通して共有されてよい。汎用内部レジスタ、ページテーブル・ベース・レジスタ、低レベルデータキャッシュ、データTLB、実行ユニット、及びアウト・オブ・オーダー・ユニット等の他のリソースは、潜在的に完全にスレッドの間で共有される。対照的に、コアは、第2レベルキャッシュ(L2)等のより高いレベルのキャッシュの少なくとも一部を共有しながら、専用の実行リソースを有してよい。
【0030】
一実施例で、リソース208及び213はプロセッサ・パイプラインを有する。プロセッサ・パイプラインは、パイプライン段を幾つでも有してよい。パイプライン段の一般的な例には、命令ポインタ段、フェッチ段、デコード段、ドライブ段、及び割当て段、リネーム段、キュー段、リオーダー段、スケジュール段、ディスパッチ段、実行段、メモリアクセス段、並びにレジスタアクセス段が含まれる。ここに列挙される段は、あらゆる既知のパイプライン段がプロセッサ100に含まれうる場合に、プロセッサ・パイプライン段の例となる非包括的な羅列を有する点に留意すべきである。
【0031】
プロセッサ205及び210は、夫々、メモリコントローラ又はローカルメモリコントローラハブ(MCH)を更に有してよく、然るべくメモリ209又は214とインターフェース接続する。メモリ209及び214は、例えば、ランダムアクセスメモリ(RAM)、キャッシュメモリ、フラッシュメモリ、又は他のメモリデバイス等のあらゆるメモリデバイスを有する。一実施例で、メモリ214は上位キャッシュメモリを有し、一方、リソース213は下位キャッシュメモリを有する。他の実施例で、メモリ209は、プロセッサ205に付随する動的ランダムアクセスメモリ(DRAM)を有する。プロセッサ205は、DRAM209からのデータをキャッシュに格納するようキャッシュメモリを有する。これは実例となる実施形態である点に留意すべきであり、メモリ209及び214は、潜在的に如何なるスタイルメモリデバイスも有する。
【0032】
一実施例で、メモリ209及び214が、プロセッサ205及び210に含まれているか又は(表されるように)その外部にあるキャッシュメモリを有する場合に、プロセッサ205及び210は、ピアキャッシングノードはもちろんホームノードであることができる。例えば、トランザクションがメモリ209内のメモリロケーションを参照する場合に、メモリ209に関与するエージェント、すなわちプロセッサ205は、トランザクション及びメモリロケーションに関してホームエージェントであると判断される。同様に、トランザクションが他のメモリロケーション(例えば、メモリ214でのロケーション)を参照する場合に、プロセッサ205はピアキャッシングエージェントであると判断される。
【0033】
明らかなように、ポイント・ツー・ポイントリンク220乃至222は、ポイント・ツー・ポイント形式でコンポーネントを連結させる。物理リンク220乃至222は、一実施例で、夫々、図3を参照して以下で論じられる物理レイヤと関連する物理リンク等の、双方向の差動シグナリング相互接続を有する。結果として、プロセッサ205及び210並びにチップセット230は、互いに直接に通信することができる。
【0034】
チップセット230は、しばしば、入出力(I/O)ハブへ結合されているメモリコントローラハブ等の、複数の集積回路への総称指示である。なお、一実施例で、エージェントが夫々メモリとインターフェース接続するメモリコントローラハブのバージョンを有する場合に、チップセット230はI/Oハブ又は他のコントローラハブを言う。一実施例で、チップセット230は、上述されるように、トランザクションに参加し又はそれを経験する非キャッシングエージェントである。なお、チップセット230はそのように限定されず、他の実施例では、チップセット230は、キャッシュメモリを有するキャッシングエージェント及び/又はデータの元のメモリロケーション・リポジトリを有するメモリを有するホームエージェントである。
【0035】
表されるように、チップセット230は、また、例えば、周辺コンポーネント相互接続(PCI)又はPCIエクスプレス(PCI−E)デバイス261、集積デバイスエレクトロニクス(IDE)又はアドバンスト・トランスファー・アタッチメント(ATA)デバイス262、ユニバーサル・シリアル・バス(USB)デバイス263、ローカルエリアネットワーク(LAN)又は無線LAN(WLAN)デバイス264、オーディオデバイス265、及び他のI/Oデバイス266等の複数の相互接続及びI/Oデバイスとインターフェース接続すべきである。チップセット230は、また、ここで記載されるようにI/Oデバイスを結合する他の相互接続アーキテクチャを有してよい。
【0036】
図3を参照すると、階層化相互接続スタックを利用する双方向相互接続アーキテクチャに係るブロック図の実施例が表されている。例えば物理レイヤ302等の図3のレイヤへの言及には、例えば物理レイヤ302a及び物理レイヤ302b等の、異なるエージェントで実施され得る一般的なレイヤの議論が含まれる。表されるように、相互接続スタックは5つのレイヤに分けられる。かかるレイヤのうち1又はそれ以上は、潜在的に、設計実施に基づいて任意である。例えば、ルーティングレイヤ304は、一実施例で、リンクレイヤ303の機能性に組み込まれる。従って、ルーティングレイヤは、一実施例では、別個のレイヤでない。
【0037】
一実施例で、物理レイヤ302は、物理媒体での情報の電気伝送に関与する。例えば、物理的なポイント・ツー・ポイントリンクがリンクレイヤエンティティ303a及び303bの間で利用される。実例として、物理リンクは、双方向差動シグナリング対351及び352を有する差動シグナリングスキームを有する。この場合に、物理レイヤは、潜在的に論理的に電気サブブロック及び論理サブブロックに分けられ、これにより、物理レイヤは、情報の電気伝送から残りのスタックを分離し且つリンクレイヤ303と通信することができる。
【0038】
一実施例で、リンクレイヤ303は、スタックの上位レイヤから物理レイヤ302を抽出し、例えば、接続されるエージェント/エンティティの間の信頼できるデータ伝送及びフロー制御並びに多重仮想チャネル又はメッセージクラスへの物理チャネル/インターフェースの仮想化等のリンク関連サービスを提供する。ここで、仮想チャネルは、スタックの上位層による使用のための多重仮想ネットワークと考えられてよい。例えば、プロトコルレイヤ306は、プロトコルメッセージをメッセージクラスに、ひいては、1又はそれ以上の仮想チャネルへマッピングするよう、潜在的に、リンクレイヤ303によって提供されるアブストラクションに依存する。
【0039】
ルーティングレイヤ304は、一実施例で、ソースからあて先へパケットを送るための柔軟な方法を提供する。上述されるように、極めて簡単なトポロジで、ルーティングレイヤ304は明示的でなく、むしろリンクレイヤ303の機能性に組み込まれうる。例えば、ルーティングレイヤ304は、パケットを送るべく<ポート,仮想ネットワーク>対を特定するためにリンクレイヤ303のアブストラクションに依存してよい。ここで、ルーティングテーブル情報は、パケットにルーティング情報を提供するよう保持される。
【0040】
一実施例で、トランスポートレイヤ305は、エンド・ツー・エンドの信頼できる伝送サービスを提供する。ルーティングレイヤ304と同じく、トランスポートレイヤ305も設計実施に基づいて任意である。一例として、トランスポートレイヤ305は、プロトコルレイヤ306に信頼できる伝送サポートを提供するようルーティングレイヤ304サービスに依存する。相互接続アーキテクチャ内で、一実施例で、一部のコンポーネントはトランスポートレイヤ305を有する。結果として、この一部のコンポーネントは、トランスポートレイヤ305に関するパケットのサブフィールドを定義し、一方、他のコンポーネントは、潜在的にかかるサブフィールドを定義しない。
【0041】
プロトコルレイヤ306は、一実施例で、例えばキャッシュ・コヒーレンス、順序付け、ピア・ツー・ピア通信、割り込み転送等の、ノード/エージェント間の上位通信プロトコルを実施することができる。言い換えると、プロトコルレイヤ306は、ホームノード、ピアノード、キャッシングノード、及び非キャッシングノード等のノード又はエージェントについて、然るべく、許容されるメッセージ、要求、応答、フェーズ、コヒーレンス状態等を定義する。ホームノードメッセージ、スヌープメッセージ、応答メッセージ等のメッセージの例については以下で論じる。
【0042】
レイヤ及びそれに関連するロジックの議論は如何なる方法で結合されてもよい点に留意すべきである。例えば、プロトコルロジックは物理レイヤ、すなわち、送信又は受信ロジックへ結合されてもよい。ここで、図3から分かるように、一実施例で、プロトコルロジックは、物理レイヤロジックへ直接には結合されずに、むしろ他のレイヤロジックを介して結合されてよい。更に、相互接続スタックは、一実施例で、適切なキャッシュ・コヒーレンス動作を開始するよう、例えばキャッシュ制御又はキャッシュメモリロジック等の内部コンポーネントロジックへ結合される。
【0043】
[MESIFプロトコルの実施例の概説]
一実施例で、基本MESIF(Modified Exclusive Shared Invalid Forward)プロトコルは、単一のシリアライジング・バスの潜在的な制限を伴わずにスヌープ・プロトコルと同様のプロトコルを提供する。スヌーピング・キャッシュ・プロトコルのように、MESIFは、コヒーレンスを保つために、データのキャッシュコピーを有するノードに依存する。同期集中ブロードバンドよりむしろポイント・ツー・ポイントリンクの使用は、タイムワープの問題、すなわち、事象が異なるノードの側からすれば異なる順序で起こるように見えるという事実を持ち込む。一例として、MESIFプロトコルは、タイムワープに起因する潜在的エラーの認識を通してタイムワープを扱い、そのプロトコル又はソフトウェアソリューションを提供する。
【0044】
ホームノードは、しばしば、データのキャッシュ無しコピーと関連する。結果として、ホームノードは、そのホームノードと関連するデータに関するトランザクションに関与する。しかし、ホームノードは、トランザクションと関連する“クリティカルパス”に含まれる必要はなく、むしろ、ホームノードは、コンフリクト及びタイムワープ問題を解決するようトランザクションに介入する。かかるスキームの同時ブロードキャスト性のために、一実施例で、MESIFは、スヌーピング・プロトコルと関連する低レイテンシーを達成し、一方で、ある場合には、最低限のレイテンシー、すなわち、単一ラウンドトリップ要求−応答で、データのキャッシュ可能なコピーを取得する。
【0045】
一実施例で、MESIFプロトコルに関する基本的なトランザクションは、ホームノードはもちろん全てのピアノードへ最初の要求を送信することを伴う。コピーがステートE、F又はMコヒーレンス状態でキャッシュされる場合に、それは応答に含まれる。次いで、第2のメッセージがホームノードへ送信され、要求が満足されたことをホームノードに知らせる。要求されるラインがキャッシュされない場合、又はSステートのコピーしか存在しない場合は、ホームノードへ送信される第2の要求は、前の要求を確認するために使用される。この前の要求をホームノードは既に自身のメモリからフェッチしていてよい。いずれの場合にも、ホームノードは、同期及びコンフリクトの解消のために第2の要求(及び潜在的に、たとえそれらが時々結合され得るとしても、第1の要求)に応答する。ホームノードは1又はそれ以上のキャッシュを有してよい点に留意すべきであり、従って、それは、いずれの他のノードとも同じように最初の要求に応答することができる。
【0046】
一実施例で、コンフリクトは分散的に扱われる。タイムワープ問題は、個々の要求が任意に長い時間遅延しうるので、コンフリクトを検出することを困難にする。しかし、コンフリクトは、夫々のノードが要求後にコンフリクトについて監視する場合に検出される。複数のノードが潜在的にコンフリクトを検出してよいが、一例として、それらのノードのうちの少なくとも1つがコンフリクトを検出しうる。結果として、ノードからの応答は、一実施例で、潜在的にコンフリクト情報を有する。
【0047】
一実施例で、応答からデータのコピーを受け取ったノードは、受け取った直後に内部データを使用することを許可されるが、ノードが確認を受け取るまでは、他のシステムにとって可視的な、すなわち、グローバルに可視的なデータを使用するという作用を引き起こさない。確認は、また、要求ノードがそのコピーを他のノードへ転送すべき命令を含み、ことによると、そのノードを自身のキャッシュから退かせる。
【0048】
最後に、ノードがキャッシュデータを供給することによって他のノードからの要求に応答する場合に、ノードは、一実施例で、ノードがデータを転送したと認めるホームノードからの応答をノードが受け取るまで、同じキャッシュラインについて自身が受け取る他の要求を留保し、このようにして、全てのノードが(場合により書込可能な)キャッシュラインの伝送の同じ順序を守ることを確かにする。
【0049】
ホームノードは、上述されるように、キャッシュ無しデータのリポジトリであるが、ホームノードは、また、プロセッサ及びキャッシュを有してよい。ここで、ホームノードのプロセッサがキャッシュを逃す場合に、ホームノードは他の全ての(ピア)ノードへ要求を送信し、ホームノードは、ホームノードに到着したいずれの他の要求と同じく内部でその要求を扱う。これは、ホームノードが自身(ホームノード)へメッセージを明示的に送信する特別の場合である点に留意すべきである。更に、外部からの要求が、局所的にキャッシュされるデータについて到着する場合に、ホームノードは適切に応答する。
【0050】
開示されているメッセージプロトコルは、コヒーレンス(キャッシュ及びホーム)エージェント、非キャッシングエージェント、及び他のエージェント(メモリコントローラ、プロセッサ等)の間の許容されているメッセージの組を定義する。コヒーレンス・プロトコルは、考えられるコヒーレントを表すアルゴリズムでワード及び文法としてメッセージを使用する。このアルゴリズムは、分別よく要求を順序付け、コンフリクトを解消し、キャッシングエージェント間の相互作用を表す。MESIFプロトコルについて上述されたが、MESIFキャッシュ・コヒーレンス・プロトコルは利用される必要がない。例えば、既知のMESIFプロトコルの利用をもたらすフォワード状態は利用されなくてよい。更に、上記にはMESIFプロトコルにかかる実施例の典型的な概説が含まれる点に留意すべきである。結果として、上述される様々なコンポーネントは別々の実施例で相違しうる。メッセージング及び/又はコヒーレンス・プロトコルで利用される潜在的なメッセージの非包括的な例となる羅列は以下に含まれる。
【0051】
[スヌープメッセージ]
一実施例で、スヌープメッセージは、例えばピアキャッシングエージェント等のキャッシングエージェントへ向けられる。通常、スヌープメッセージはホームノード識別子(ID)を有さず、これより、それらはホームノードには送られずにピアキャッシングエージェントに送られる。
【0052】
Snoop Data(SnpData):これは、E、F又はSステートでデータを得るスヌープである。
【0053】
Snoop Invalidation Own(SnpInvOwn):これは、E又はMステートでデータを得るスヌープである。一実施例で、ピアエージェントは、データを自身のローカルメモリにE又はMステートで保持することに応答してデータを提供することができる。
【0054】
Snoop Invalidation Invalid to Exclusive(SnpInvItoE):これは、ピアキャッシングエージェントを無効にし、ホームノードへのあらゆるMステートデータをフラッシュ(flush)するスヌープである。
【0055】
Snoop Invalidation X to Invalid(SnpInvXtoI):これは、ピアキャッシングエージェントを無効にし、ホームノードへのあらゆるMステートデータをフラッシュするスヌープである。
【0056】
[ホームメッセージ]
下記のメッセージはホームノードと関連する。一例として、下記の幾つかはホームノードへの要求メッセージである。実際には、スヌープメッセージ及びホームメッセージのうち幾つかの間の類似性に留意すべきである。なお、これらの類似するメッセージは、しばしば、ホームノードへのメッセージがホームノードへ送られるべきホームノードIDを有し、一方、送信されるピアノードメッセージはホームノードへの参照を有さなくてもよい点で相違する。
【0057】
他のホームメッセージは、ホーム・ライトバック・マーカーメッセージを含む。ここで、データは、WbDataメッセージを介して別個に送信されてよく、マーカーメッセージに対して如何なる順序で受信されてもよい。以下に含まれるホームメッセージの他の例は、キャッシングエージェントからホームエージェントへのホームスヌープ応答メッセージ、及びコンフリクトフェーズの開始を知らせるコンフリクトメッセージのホーム確認応答である。
【0058】
Read Data(RdData);これは、排他的(Exclusive)(E)状態、更には、潜在的に、実施例に依存してフォワード(Forward)(F)状態又は共有(Shared)(S)状態でのデータの要求である。
【0059】
Read Invalidate Own(RdInvOwn):これは、M又はEステートでのキャッシュラインの要求である。
【0060】
Invalidate Invalid to Exclusive(InvItoE):これは、データを有さないキャッシュラインの要求である。
【0061】
Non-Snoop Read(NonSnpRd):これは、メモリからのコヒーレントでない読出を実行する要求である。
【0062】
Non-Snoop Write(NonSnpW):これは、メモリへのコヒーレントでない書込を実行する要求である。
【0063】
WriteBack Modified to Invalid、Shared、又はExclusive(WbMtoI、WbMtoS、及びWbMtoE):これは、Mステートにあるキャッシュラインをメモリにライトバックして、然るべくキャッシュラインの状態を無効状態、共有状態、又は排他状態へ遷移させる要求である。一実施例で、かかるメッセージは、データが送信されるべきことを示すマーカーメッセージであり、一方、データは、実際には、別々のメッセージ(例えば、Wb*Data*メッセージ)を介して伝送される。
【0064】
Response Invalid又はShared(RspI又はRspS):ピアエージェントは、然るべく無効状態で又は共有状態でキャッシュを持ち続ける。
【0065】
Response Forward Invalid又はShared(RspFwdI又はRspFwdS):ピアはデータを要求側へ送信しており、ラインは然るべく無効状態又は共有状態のままである。
【0066】
Response Forward Invalid又はShared WriteBack(RspFwdIwb又はRspFwdSWb):ピアはデータを要求側へ及びWbIDataをホームノードへ送信しており、ラインは然るべく無効状態又は共有状態のままである。
【0067】
Response Invalid又はShared WriteBack(RspIWb又はRspSWb):ピアはインフライト(in-flight)のWbIDataメッセージを有するデータをホームへ退かせており、如何なるメッセージも要求側へ送信していない。
【0068】
Response*Writeback Post(Rsp*WbPost):ピアは、インフライトのWb*Dataメッセージを有するデータをホームへ退かせており、如何なるメッセージも要求側へ送信していない。更に、一実施例で、Rsp*WbPostメッセージに関連するAckCnfltメッセージの送信側は、Cmp_Fwd*メッセージの受信に応答して割当てを解除されない。一例として、ホームエージェントは、メモリへの部分的データのコミットに応答して完全なメッセージを送信する。
【0069】
WbPost:ピアは、インフライトのWb*Dataメッセージを有するデータをホームへ退かせている。更に、一実施例で、WbPostメッセージの送信側は、Cmp_Fwd*メッセージの受信に応答して割当てを解除されない。ここで、送信側は、ホームノードからの完了を待つ。一例として、ホームエージェントは、メモリへのデータのコミットに応答して完全なメッセージを送信する。
【0070】
Response Conflict(RspCnflt):ピアは無効状態でラインを持ち続け、ピアはコンフリクトする対抗する要求を有する。
【0071】
Acknowledge Conflict(AckCnflt):データ完了(completion)/グラント(grant)及び完了/フォース(force)確認応答コンフリクトの確認応答受信。
【0072】
Acknowledge Conflict Write-back Invalid(AckCnfltWbI):一実施例で、それは、上述されるように、AckCnfltを伝える。更に、一実施例で、このメッセージは、更に、部分的データのライトバックを伝える。部分的データは、後述されるように、別個のWbIDataに含まれてよい。更に、データに関連するキャッシュラインは無効状態へと遷移させられる。
【0073】
[無データ応答メッセージ]
一実施例で、無データ応答メッセージは、データを送信することなくラインのオーナーシップを認めるグラントメッセージを有する。無データ応答メッセージは、また、完了を知らせる完了メッセージを有し、潜在的に、コンフリクト状態下でオーナーからデータを取り出す。
【0074】
Grant_Completion(GntCmp):データによらずに排他的オーナーシップを付与。
【0075】
Grant Force Acknowledge Conflict(Gnt_FrcAckCnflt):データ及びフォース確認応答コンフリクトによらずに排他的オーナーシップを付与。
【0076】
Completion(CMP):全てのスヌープ応答が収集され、コンフリクトは検出されない。
【0077】
Force Acknowledge Conflict(FrcAckCnflt):確認応答コンフリクトについて、スヌープ応答が収集される。
【0078】
Complete_Forward Code(Cmp_FwdCode):要求を完了し、フォワード状態又は共有状態でのラインを要求側へ転送し、且つ、ローカルコピーを無効にするか又はそれを共有状態のままとする。
【0079】
Complete Forward Invalidate Own(Cmp_FwdInvOwn):要求を完了し、排他的状態又は変形(Modified)(M)状態でのラインを要求側へ転送し、ローカルコピーを無効化。
【0080】
[データ応答メッセージ]
DataC_*:対応するMESIF状態でのデータ。
【0081】
DataC_*_Cmp:完了を伴う対応するESIF状態でのデータ。
【0082】
DataC_*_FrcAckCnflt:FrcAckCnfltを伴う対応するESIF状態でのデータ。
【0083】
Wb*Data:データをライトバックし、対応するE、S又はIステートへ遷移。
【0084】
WbIDataPtl又はWbEDataPtl:部分的データのライトバック、対応する無効状態又は排他的状態への遷移。
【0085】
Wb*DataPtlPost:部分的データのライトバック、対応するコヒーレンス状態への遷移。更に、一実施例で、Wb*DataPtlPostメッセージに関連するAckCnfltメッセージの送信側は、Cmp_Fwd*メッセージの受信に応答して割当てを解除されない。一例として、ホームエージェントは、メモリへの部分的データのコミットに応答して完全なメッセージを送信する。
【0086】
Non-Snoop Write Data(NonSnpWrData):これは、メモリへの非コヒーレントな書込である。
【0087】
Non-Snoop Write Data Partial(NonSnpWrDataPtl):これは、部分的データの非コヒーレントな書込である。
【0088】
図4aを参照すると、潜在的にメモリ順序付け違背を引き起こす複数のノードの間でのメッセージングのためのプロトコルダイアグラムの実施例が表されている。表されるように、プロトコルダイアグラムは、5つのノード、すなわち、多数のトランザクションに参加する入出力ハブ(IOH)(コンシューマ)、“フラグ(Flag)”のためのホームノード0(CHL0)、プロデューサノード(GQ0)、“データ(Data)”のためのホームノード1(CHL1)、及び他のキャッシングエージェント(GQ1)を表す。留意すべきは、表されるエージェントの数及びタイプは単に実例であり、相互接続アーキテクチャは極めて柔軟性があり且つ如何なる数又はスタイルのエージェントを有してもよい点である。
【0089】
ここで、プロデューサGQ0は、データに関連するキャッシュラインに対する要求を開始する。InvItoE(D)メッセージはホームノード1(CHL1)へ送信され、SnpInvItoE(D)メッセージはピアエージェント(コンシューマGQ1)へ送信/転送される。なお、このトランザクションの間、GQ1は、データの読出要求を有する別のトランザクションを開始する。留意すべきは、GQ1及びGQ0の両エージェントは、この場合に、コンフリクトを検出する点である。このコンフリクトは、ピアエージェントGQ0及びGQ1からホームエージェントCHL1へのRspCnfltメッセージによって反映される。ホームノードCHL1が対抗するメッセージを受信した後、それは、オーナーシップを付与し且つコンフリクトの確認応答を余儀なくさせるようGnt_FrcAckCnfltをGQ0へ送信する。
【0090】
この時点で、プロデューサとしてのGQ0は、データへの部分書込、すなわち、Data=Newを実行し、Gnt_FrcAckCnfltメッセージの受信を確認するAckCnfltメッセージを送信する。一実施例で、AckCnfltメッセージは、また、トランザクションのコンフリクトフェーズの開始を示し、一方、AckCnfltメッセージに付随する完了は、コンフリクトフェーズの終了を表す。次いで、ホームノードCHL1は、データをホームノードCHL1に押し返すようCmp_FwdCodeメッセージを送信する。しかし、部分的データ、すなわち、RspIWb(D)メッセージ及びWbIDataPtl(D)メッセージのライトバックは、例えばチャネル又はルーティング遅延のような幾つかの理由のために遅延する。
【0091】
一方、データを更新し、ホームノードCHL1へ部分的データ応答を供給し、ホームノードCHL1からのCmp_FwdCodeによってデータトランザクションへの部分書込から割当てを解除されると、GQ0は、フラグへの書込、すなわち、CHL0へのInvItoE(F)メッセージ並びにピアエージェントIOH及びGQ1への対応するスヌープを開始する。ここで、GQ0は、フラグについてのキャッシュラインのオーナーシップ、すなわち、ホームノードCHL0からのGnt_Cmpを取得し、フラグをNewへと更新する。更に、フラグの新たな値は、ホームノードCHL0へライトバックされる(すなわち、WbMtoI(F)及びWbIData(F))。しばしば、データ及びフラグに係るこのようなシナリオはI/O動作で利用される。この場合に、1のエージェントはデータを更新し、次いで、データが更新されており且ついつでも回復(retrieval)する状態になっていることを他のエージェントに知らせるようフラグを設定する。
【0092】
従って、IOHは、いつデータが取り出される準備ができるかを決定するよう、周期的に又は一定時間後にフラグをチェックしながらフラグに対してスピニング(spinning)を行っている。結果として、IOHは、フラグの非スヌープな又は非コヒーレントな読出、すなわち、NonSnpRd(F)を実行する。ここで、ホームノードCHL0のメモリからの読出は、データがいつでも取り出されることを示すFlag=New値を取り出す。もはやフラグに対してスピニングを行っていないIOHは、データのNonSnpRd要求を開始する。なお、NonSnpRdが受信される場合に、データは、GQ0からのData=Newのライトバックが遅延したために、依然としてOld値を保持する。結果として、コンシューマIOHは、無効な古いデータを取り出すが、データが有効であると信じる。これにより、潜在的に、不適法な動作又は実行が引き起こされる。
【0093】
留意すべきは、フラグ及びデータの例は、単に実例であって、部分的なメモリアクセス及び非コヒーレントなメモリアクセスの無効なメモリ順序付けが潜在的に無効な/不適法な動作をもたらすところの潜在的な環境を表す。結果として、ここで記載される実施例は、如何なる部分メモリアクセスシナリオとともに利用されてもよい。
【0094】
同様に、図4bは、潜在的にメモリ順序付け違背を引き起こす複数のノードの間でのメッセージングのためのプロトコルダイアグラムの他の実施例が表されている。ここで、GQ0は、上述されるように、ラインを要求する代わりに、データに係るキャッシュラインを変形状態に保つ。結果として、データへの書込の前に、GQ0は、変形されたコピーをWbMtoE(D)及びWbEData(D)によりホームノードCHL1へ返し、排他的状態へと遷移する。次いで、GQ0は、自身のローカルメモリでデータへの部分書込を実行する。なお、上記のように、GQ1は、データに対する読出要求を発する。留意すべきは、上記とは異なって、GQ1でなく、GQ0のみがコンフリクトを検出する。上述されるように、複数のノード/エージェントがコンフリクトを検出してよいが、プロトコルは、一実施例で、少なくとも1つのノードに依存してコンフリクトを検出する。
【0095】
結果として、GQ0は、解決のために、ホームノードCHL1へRspCnfltメッセージを供給する。コンフリクトフェーズへの同様の遷移が、同一の応答、すなわち、ホームノードCHL1からのGnt_FrcAckCnflt、GQ1からのAckCnflt、CHL1からのCmp_FwdCode、及び、次いで、前述同様に遅延するメッセージRspIWb(d)及びWbIDataPtl(D)によるデータのライトバックを有して起こる。次いで、フラグはNewへ更新され、IOHは、フラグのメモリからの非コヒーレントな読出を実行する。フラグがNewへ更新されたことによりデータがいつでも回復する状態となっていると確信すると、IOHはデータの非スヌープ読出を要求する。上記のように、IOHは、GQ0の部分書込、データの非コヒーレントな読出、及び新しい(New)データのライトバックの遅延に応答して、更新された新しい(New)データの代わりに、無効な古い(Old)データを受信する。
【0096】
従って、一実施例で、単一又は複数のメッセージを有しうるライトバックフェーズは、例えば部分書込のような部分メモリアクセスに関連するコンフリクトフェーズで挿入されて、部分的データをホームノードへ返す。第1の例として、コンフリクトを認めてライトバックマーカーを供給するAckCnfltWbIメッセージは、コンフリクトフェーズで生成される。他の例として、ライトバックメッセージを用いるライトバックフェーズは、AckCnfltメッセージがホームノードへ供給される前に挿入される。更なる他の例として、ライトバックメッセージを用いるライトバックフェーズは、コンフリクトフェーズ内に、すなわち、AckCnfltメッセージの後に含まれる。最後の具体例として、ライトバックフェーズは、Rsp*Post、WbDataPostメッセージ、又はWbPostメッセージを用いるコンフリクトフェーズ内又はその後に含まれ、これにより、AckCnfltメッセージの送信側は、コンフリクトフェーズの完了メッセージを受信した後に割当てを解除されない。
【0097】
ライトバックフェーズがコンフリクトフェーズで開始されるこのような例は単に実例であり、コンフリクトの際に部分的データをホームノードへ押し返す如何なる既知のメッセージ又は方法も利用されてよい。なお、議論を進めるよう、かかる具体例について、以下、図5a乃至7cを参照して論じられる。
【0098】
図5aを参照すると、コンフリクトフェーズの開始時にコンフリクト確認応答及びデータライトバックメッセージを用いるプロトコルダイアグラムの実施例が表されている。図5aのシナリオは、GQ0がデータに関連するキャッシュラインの排他的オーナーシップを要求し、GQ1がデータの読出要求を発し、コンフリクトがGQ0及びGQ1によって検出され、データに関連するホームノードCHL1がGnt_FrcAckCnfltメッセージをGQ0へ送信する点で、図4aのシナリオに類似する。しかし、一実施例で、プロデューサが単にAckCnfltメッセージだけ供給してホームノードCHL1からのGnt_FrcAckCnfltの受信を確認することに代えて、結合AckCnfltWbI(D)メッセージがGQ0によって生成されて送信される。ここで、AckCnfltWbIメッセージは2つの目的、すなわち、Gnt_FrcAckCnfltの確認応答と、データが例えばWbIDataPtl(D)のようなデータメッセージで供給されるホームノードCHL1へのマーカとを果たす。
【0099】
言い換えると、プロデューサGQ0がデータへの部分書込を実行し且つホームノードCHL1からコンフリクトメッセージを受信することに応答して、GQ0は、ホームノードへの部分的データのライトバックを実行する、すなわち、コンフリクトフェーズでライトバックフェーズを実行する。これまで、図4aで、ライトバックはコンフリクトフェーズが完了した後でその後に実行された。ここで、GQ0は、Cmp_FwdCodeを用いてコンフリクトフェーズの終わりまでに割当てを解除され、結果として、次のトランザクションは、いつ部分的なデータがホームノードCHL1に達するかに関わらず開始することができる。このことは、IOHによる無効なデータの取得を生じさせる。
【0100】
対照的に、図5aから明らかなように、Cmp_FwdCodeは、部分的データがホームノードCHL1に返されるか又はそのメモリにコミットされるまで送信されない。結果として、GQ0は割当てを解除されず、フラグを更新する次のトランザクションはデータがCHL1で更新され且つCmp_FwdCodeメッセージがGQ0で受信された後まで始まらない。これにより、結果として、フラグが更新される前にデータが更新されることが確かとなる。従って、IOHがフラグ、次いでデータの非コヒーレントな読出を実行する場合に、CHL1にあるデータはGQ0からの最新のコピーであることが保証される。
【0101】
同様に、図5bを参照すると、コンフリクトフェーズの開始時にコンフリクト確認応答及びデータライトバックメッセージを用いるプロトコルダイアグラムの他の実施例が表されている。ここで、プロトコルフローは、GQ0がデータの変形されたOldコピーを保持し、そのOldコピーをホームノードCHL1へライトバックし、データを新しい値へ更新し、GQ1がデータの読出要求を発し、コンフリクトが検出され、コンフリクトメッセージのフォース確認応答がホームノードCHL1によって生成されてプロデューサGQ0へ送信される点で、図4aのプロトコルフローと類似する。
【0102】
ここで、図5aを参照して論じられたように、一実施例で、GQ0はデータへの部分書込を実行して、コンフリクトメッセージはGQ0によってホームノードCHL1から受信されるので、AckCnfltWbIメッセージがホームノードCHL1へ供給される。AckCnfltWbIメッセージは、コンフリクトが確認され且つデータメッセージ(すなわち、WbIDataPtlメッセージ)がデータをホームノードCHL1へ供給すべきことをホームノードに知らせる。潜在的なタイムワープに係る前述の議論から留意すべきは、WbIDataPtlは潜在的にAckCnfltWbIの前に受信され得る点である。しかし、プロトコルの動作を通して、CHL1は、プロトコルフローと一致する方法でいずれも行う。結果として、フラグ・トランザクションは、GQ0がホームノードCHL1から完了信号を受信するまで開始されない。完了信号は、部分データの受信後しか送信されない。従って、上述されるように、IOHは、フラグがNewへ更新されるまでフラグに対してスピニングを行う。フラグの更新は、目下、データがCHL1で更新された後であることを確かにされ、結果として、適切なメモリ順序付けと、有効なデータがIOHへ供給されることとがもたらされる。
【0103】
次に、図6aを参照すると、コンフリクトフェーズでライトバックフェーズを用いるプロトコルダイアグラムの他の実施例が表されている。上述されるように、図6aのプロトコルは、少なくとも最初は、図4aのプロトコルに類似する。対照的に、ホームノードCHL1からのGnt_FrcAckCnfltメッセージの受信に応答して、プロデューサエージェントGQ0はデータへの部分書込を実行し、WbMtoIデータマーカーメッセージ及びWbIDataPtlデータメッセージを用いてホームノードCHL1へ部分的データをライトバックする。GQ0がライトバックの完了メッセージを受信した後、すなわち、部分的なデータがCHL1でコミットされ且つ完了メッセージがCHL1によって送信された後、GQ0はAckCnfltメッセージをホームノードCHL1へ送信し、ホームノードCHL1はCmp_FwdCodeメッセージをGQ0へ送信する。
【0104】
上述されるように、フラグ書込トランザクションは、Cmp_FwdCodeメッセージがGQ0によって受信された後まで開始されず、Cmp_FwdCodeメッセージは、新しいデータがCHL1へ返された後まで送信されない。結果として、IOHは、フラグがNewへ更新されるまでデータを読み出さず、一方、フラグは、データがCHL1でコミットされるまで更新されない。言い換えると、フラグが更新される前にグローバルに観測されるデータのメモリ順序付けが、実施される。
【0105】
同様に、図6bは、コンフリクトフェーズでライトバックフェーズを用いるプロトコルダイアグラムの他の実施例を表す。ここで、プロトコルフローは、やはり、図4bのプロトコルフローに類似する。しかし、上記の図6aごとく、データへの部分書込を実行し且つホームノードCHL1からFrcAckCnfltメッセージを受信することに応答して、プロデューサエージェントGQ0は新しい(New)データのライトバックを実行する。GQ0からのAckCnfltから始まり、ホームノードCHL1からのCmp_FwdCodeで終わるコンフリクトフェーズは、新しい(New)データの受信に応答してCHL1からの完了がGQ0によって受信されるまで始まらない。結果として、フラグ値の更新の前にホームノードCHL1でデータを更新するメモリ順序付けが、実施される。これにより、結果として、正確な/有効な新しい(New)データがコンシューマIOHへ供給される。
【0106】
図6cを参照すると、データのライトバックを有するライトバックフェーズを用いるプロトコルダイアグラムの他の実施例が表されている。ここで、ライトバックフェーズは、図6aのライトバックフェーズに類似する。しかし、ライトバックフェーズは後で実行される。更に、ここで、RspIWbメッセージ及びWbIDataPtlメッセージを用いる代わりに、上記の図4aのごとく、WbMtoIメッセージ及びWbIDataPtlメッセージがデータのライトバックのために用いられる。言い換えると、ライトバックフェーズが、応答フェーズの代わりにコンフリクトフェーズで用いられる。これは、図4aのようにCHL1からGQ0への完了を伴わないデータの単なる転送に代えて、GQ0がフラグ・トランザクションに移る前にホームノードCHL1からの完了メッセージを要求する。
【0107】
図7aを参照すると、データのライトバックのためにポスタブル書込メッセージを用いるプロトコルダイアグラムの実施例が表されている。ここで、フローは、図6cのフローに極めて類似する。しかし、留意すべきは、RspIWbPost(D)マーカーメッセージがWbMtoIマーカーメッセージの代わりに用いられる点である。従って、一実施例で、RspIWbPostによって開始されるフェーズは応答フェーズと呼ばれる。しかし、完了信号がホームノードCHL1からGQ0で受信されるまで適切に応答していたGQ0の割当てを解除しないRspIWbPostの機能性に留意すべきである。明らかなように、動作において、RspIWbPostは、GQ0が、GQ0がフラグ・トランザクションに移ることができる前にホームノードCHL1からの完了を待つ点で、GQ0がフラグ・トランザクションに移る前に完了を待たない図4aのRspIWbよりも、図6cのWbMtoIに類似する。言い換えると、RspIWbPostは、RspIWbPostを送信したノードGQ0が割当てを解除される前に完了を待つ“ポスタブル書込(postable write)”を示す。従って、一実施例で、RspIWbPostの利用は、ライトバックフェーズと呼ばれる。
【0108】
同様に、図7bは、データのライトバックのためにポスタブル書込メッセージを用いるプロトコルダイアグラムの他の実施例を表す。ここで、留意すべきは、“ポスタブル書込”は、マーカーメッセージRspIWbの代わりに、データメッセージWbIDataPtlPostによって示され得る点である。更に、図7cに表されるように、別のメッセージWbPostは、RspIWb及びWbIDataPtlが一実施例でライトバックフェーズの部分であることを示すために用いられてよい。この場合に、GQ0は、メモリへの部分的データのコミットに応答してホームノードCHL1からの完了が受信されるまで割当てを解除されない。
【0109】
以上から明らかなように、一実施例で、コンフリクトフェーズでライトバックフェーズを実行し、挿入し、そのためのメッセージを生成、又は開始することは、コンフリクトフェーズに対して異なる時間的関係を有する。一実施例で、コンフリクトフェーズでのライトバックフェーズは、例えば、ライトバックマーカーメッセージと結合されている確認応答コンフリクトメッセージ、すなわち、AckCnfltWbI(D)のように、コンフリクトフェーズの開始時に含める。他の実施例で、コンフリクトフェーズでのライトバックフェーズは、例えば、Gnt_FrcAckCnfltの後であって且つAckCnfltメッセージの前、すなわち、図6a及び6bに関する議論のように、コンフリクトフェーズの前に含める。更なる他の実施例で、コンフリクトフェーズでのライトバックフェーズは、例えば、AckCnflt及びCmp_FwdCodeメッセージの後、すなわち、図6c乃至7cに関する議論のように、コンフリクトフェーズの後に含める。
【0110】
更に、ライトバックフェーズは、一実施例で、例えばAckCnfltWbI、WbMtoI、及びWbIDataPtlのようなライトバックメッセージを参照する。他の実施例で、ライトバックフェーズは、また、例えば、RspIWbPost、WbIDataPtlPost、及びWbPostのような、ライトバック機能性をエミュレートする応答関連メッセージを有する。一例として、ライトバックフェーズの機能性をエミュレートすることは、ライトバックの完了メッセージが受信されるまで送信エージェントの割当てを解除しないこと又は送信エージェントが待機することを有する。
【0111】
従って、以上から明らかなように、メモリ順序づけは、部分メモリアクセス及び非スヌープ/非コヒーレントアクセスが行われる場合に、コンフリクトが検出される場合でさえ実施され得る。従って、データが読み出されることを示すようフラグを設定する第2のエージェントからのデータに第1のエージェントが付随している場合等の環境下で、適切なメモリ順序付けの実施は、一貫性のない無効なデータの代わりに、有効な/新しいデータが供給されることを確かにする。
【0112】
ここで使用されるモジュールは、如何なるハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せも言う。しばしば、別個なものとして表されるモジュール境界は一般的に変化し、潜在的には重なる。例えば、第1及び第2のモジュールは、ハードウェア、ソフトウェア、ファームウェア、又はそれらの組合せを共有しながら、潜在的に或る独立したハードウェア、ソフトウェア、又はファームウェアを保ってよい。一実施例で、用語「ロジック」の使用は、例えばトランジスタや抵抗等のハードウェア、及び例えばプログラム可能なロジックデバイス等の他のハードウェアを含む。なお、他の実施例で、「ロジック」は、また、例えばファームウェア又はミクロコード等の、ハードウェアと一体化したソフトウェア又はコードを含む。
【0113】
ここで使用される「値」は、数、状態(ステート)、論理状態、又は2進論理状態のあらゆる既知の表現を含む。しばしば、論理レベル、論理変数、又は論理値の使用は、“1”及び“0”と呼ばれることがある。これは容易に2進論理状態を表す。例えば、“1”は高論理レベルに言及し、“0”は低論理レベルに言及する。一実施例で、トランジスタ又はフラッシュセル等の記憶セルは、単一の論理値又は複数の論理値を保持する能力を有してよい。なお、コンピュータシステムでの値の他の表現が使用されている。例えば、10進数“10”は、また、“1010”の2進値及び16進文字“A”として表されてもよい。従って、「値」は、コンピュータシステムで保持され得る情報のあらゆる表現を含む。
【0114】
更に、「状態(ステート)」は値又は値の一部分によって表され得る。一例として、論理“1”等の第1の値はデフォルト又は初期状態を表すことができ、一方、論理“0”等の第2の値は非デフォルト状態を表すことができる。更に、用語「リセット」及び「設定(セット)」は、一実施例で、夫々、デフォルトの及び更新された値又は状態を言う。例えば、デフォルト値は、潜在的に、高論理値、すなわちリセットを有し、一方、更新される値は、潜在的に、低論理値、すなわちセットを有する。留意すべきは、値の如何なる組合せも、あらゆる数の状態を表現するために利用される点である。
【0115】
前述の方法、ハードウェア、ソフトウェア、ファームウェア又はコードの実施例は、処理要素によって実行可能である機械アクセス可能な又は機械読出可能な媒体に格納されている命令又はコードを介して実施されてよい。機械アクセス可能/読出可能な媒体は、コンピュータ又は電子システム等の機械によって読出可能な形式で情報を提供(すなわち、記憶及び/又は送信)するあらゆるメカニズムを有する。例えば、機械アクセス可能な媒体には、静的RAM(SRAM)又は動的RAM(DRAM)等のランダムアクセスメモリ(RAM)、ROM、磁気若しくは光記憶媒体、フラッシュメモリデバイス、電気記憶デバイス、光記憶デバイス、音響記憶デバイス、又は他の形態の伝播信号(例えば、搬送波、赤外線信号、デジタル信号)記憶デバイス等がある。例えば、機械は、例えば搬送波等の伝播信号で送信される情報を保持することができる媒体から伝播信号を受信することにより記憶媒体にアクセスしてよい。
【0116】
本明細書の全体を通して“一実施例”又は“実施例”との言及は、その実施形態に関連して記載される特定の特徴、構造、又は事項が本発明の少なくとも1つの実施例に含まれることを意味する。このように、本明細書の全体を通して様々な場所でのフレーズ“一実施例で”又は“実施例で”の出現は、必ずしも全て同じ実施形態に言及しているわけではない。更に、特定の特徴、構成、又は事項は、1又はそれ以上の実施例で何らかの適切な方法で組み合わされてよい。
【0117】
以上、詳細な記載が特定の具体的な実施形態を参照して与えられた。なお、様々な改良及び変形が、添付の特許請求の範囲に記載される本発明の幅広い精神及び適用範囲から外れることなく行われてよいことは明らかである。従って、明細書及び図面は、限定の観点よりむしろ例示の観点で受け止められるべきである。更に、実施例及び他の例となる用語の使用は、必ずしも同じ実施例又は同じ例に言及しているわけではなく、潜在的に同じ実施例はもちろん異なる個別の実施例に言及していることがある。
【符号の説明】
【0118】
100 相互接続アーキテクチャ
101 ネットワーク構造
105,106 キャッシングエージェント
110〜112 ホームエージェント
205,210 プロセッサ
206,207,211,212 処理要素(PE)
208,213 リソース
209,214 メモリ
220〜222 ポイント・ツー・ポイントリンク
230 チップセット
261〜266 相互接続及びI/Oデバイス
302a,302b 物理レイヤ
303a,303b リンクレイヤ
304a,304b ルーティングレイヤ
305a,305b トランスポートレイヤ
306a,306b プロトコルレイヤ
351,352 双方向差動シグナリング対
【特許請求の範囲】
【請求項1】
部分的な書込を実行して部分的データを更新する第1のロジックと、
前記部分的データに関連するコンフリクトメッセージの受信に応答してコンフリクトフェーズでライトバックフェーズを開始し、該ライトバックフェーズは、前記部分的データを該部分的データに関連するホームエージェントへ供給する第2のロジックと、
前記第2のロジックへ結合され、前記ライトバックフェーズの間前記ホームエージェントへ前記部分的データを供給する第3のロジックと
を有する装置。
【請求項2】
前記第1のロジック及び前記第2のロジックは、相互接続アーキテクチャ階層化スタックの物理レイヤに関連するプロトコルロジックであり、
前記第3のロジックは、前記相互接続アーキテクチャ階層化スタックの物理レイヤに関連する物理ロジックを有する、請求項1記載の装置。
【請求項3】
コンフリクトフェーズでライトバックフェーズを開始する前記第2のロジックは、確認応答コンフリクト及びライトバックメッセージを生成する前記第2のロジックを有する、請求項1記載の装置。
【請求項4】
前記部分的データに関連するコンフリクトメッセージの受信に応答して確認応答コンフリクト及びライトバックメッセージを生成する前記第2のロジックは、前記ホームエージェントからのフォース確認応答コンフリクトメッセージの受信に応答して前記確認応答コンフリクト及びライトバックメッセージを生成する前記第2のロジックを有する、請求項3記載の装置。
【請求項5】
前記確認応答コンフリクト及びライトバックメッセージは、Acknowledge Conflict Write-back Invalid(AckCnfltWbI)メッセージを有し、
前記ホームエージェントからの前記フォース確認応答コンフリクトメッセージは、Grant_Force Acknowledge Conflict(Gnt_FrcAckCnflt)メッセージを有する、請求項4記載の装置。
【請求項6】
前記部分的データに関連するコンフリクトメッセージの受信に応答してコンフリクトフェーズでライトバックフェーズを開始する前記第2のロジックは、前記部分的データに関連するコンフリクトメッセージの受信に応答してライトバックマーカーメッセージ及びライトバックデータメッセージを生成する前記第2のロジックを有する、請求項1記載の装置。
【請求項7】
前記ライトバックマーカーメッセージは、Write-back Modified to Invalid(WbMtoI)マーカーメッセージを有し、
ライトバックデータメッセージは、Write-Back Invalid Data Partial(WbIDataPartial)メッセージを有し、
前記コンフリクトメッセージは、Grant_Force Acknowledge Conflict(Gnt_FrcAckCnflt)メッセージを有する、請求項6記載の装置。
【請求項8】
前記コンフリクトメッセージは、Grant_Force Acknowledge Conflict(Gnt_FrcAckCnflt)メッセージと、Acknowledge Conflict(AckCnflt)メッセージと、Complete_Forward Code(Cmp_FwdCode)メッセージとを有するメッセージのグループから選択される、請求項7記載の装置。
【請求項9】
前記部分的データに関連するコンフリクトメッセージの受信に応答してコンフリクトフェーズでライトバックフェーズを開始する前記第2のロジックは、前記部分的データに関連するコンフリクトメッセージの受信に応答してポスタブル・ライトバックメッセージを生成する前記第2のロジックを有する、請求項1記載の装置。
【請求項10】
前記ポスタブル・ライトバックメッセージは、Response Invalid Write-back Postable(RspIWbPost)メッセージと、Write-back Invalid Data Partial Postable(WbIDataPost)メッセージと、Write-back Postable(WbPost)メッセージとを有するグループから選択されるメッセージを有し、
前記コンフリクトメッセージは、Grant_Force Acknowledge Conflict(Gnt_FrcAckCnflt)メッセージと、Acknowledge Conflict(AckCnflt)メッセージと、Complete_Forward Code(Cmp_FwdCode)メッセージとを有するメッセージのグループから選択される、請求項9記載の装置。
【請求項11】
キャッシュラインを有するキャッシュメモリと、
前記キャッシュメモリへ結合され、前記キャッシュラインへの部分的データの部分書込を実行する第1のロジックと、
前記部分的データに関連するホームノードからのコンフリクトメッセージを受信する第2のロジックと、
前記第2のロジックへ結合され、前記コンフリクトメッセージの確認応答と、前記部分的データが、前記第1のロジックが当該部分的データの前記部分書込を実行し且つ前記第2のロジックが前記コンフリクトメッセージを受信したことに応答して、データメッセージにおいて送信されるべきこととを前記ホームノードへ示す結合メッセージを生成する第3のロジックと、
前記第3のロジックへ結合され、前記結合メッセージを前記ホームノードへ送信する第4のロジックと
を有する装置。
【請求項12】
前記結合データは、Acknowledge Conflict Write-back(AckCnfltWb)メッセージを有する、請求項11記載の装置。
【請求項13】
前記コンフリクトメッセージは、Force Acknowledge Conflict(FrcAckCnflt)メッセージを有する、請求項12記載の装置。
【請求項14】
前記第3のロジックは、次のトランザクションを開始する前に前記AckCnfltWbメッセージ及び前記データメッセージに関連する前記ホームノードからの完了メッセージを待つ、請求項12記載の装置。
【請求項15】
前記完了メッセージは、Complete_Forward Code(Cmp_FwdCode)メッセージを有する、請求項14記載の装置。
【請求項16】
前記第2のロジック及び前記第4のロジックは、相互接続階層化スタックの物理レイヤロジックに関連し、
前記第3のロジックは、前記相互接続階層化スタックのプロトコルレイヤロジックに関連する、請求項11記載の装置。
【請求項17】
部分的データに関連するホームノードからのコンフリクトメッセージの受信と、当該ピアノードが前記部分的データに対して部分書込を実行することとに応答してコンフリクトフェーズでライトバックフェーズを開始するライトバックメッセージを生成する第1のロジックを有するピアノードを有し、
前記ホームノードは、ポイント・ツー・ポイントリンクを介して前記ピアノードへ結合され、
前記ホームノードは、前記ライトバックフェーズの間の前記ピアノードからの前記部分的データの受信に応答して前記コンフリクトフェーズで前記ライトバックフェーズに係る完了メッセージを生成する第2のロジックを有する、システム。
【請求項18】
前記ライトバックメッセージは、Acknowledge Conflict Write-backメッセージと、Write-back to Invalidメッセージと、Response Write-back Postableメッセージと、Write-back Data Partial Postableメッセージと、Write-back Postableメッセージとを有するグループから選択される、請求項17記載のシステム。
【請求項19】
前記第1のロジックは、相互接続アーキテクチャ・コヒーレンス・プロトコルを実施するプロトコルロジックを有し、
前記第2のロジックは、前記相互接続アーキテクチャ・コヒーレンス・プロトコルを実施するプロトコルロジックを有する、請求項17記載のシステム。
【請求項20】
前記ピアノードに含まれる前記第1のロジックは、次の書込トランザクションを開始する前に前記ホームノードから前記ライトバックフェーズに係る前記完了メッセージを受信するまで待機する、請求項17記載のシステム。
【請求項21】
前記次の書込トランザクションは、前記部分的データが取り出される準備ができていることを第2のノードに示すべく設定されるようフラグを更新することを有し、
前記第2のノードは、前記フラグの非スヌープ読出を実行し、
前記フラグが設定されることに応答して、前記第2のノードは、前記ホームノードからの前記部分的データの第2の非スヌープ読出を実行する、請求項20記載のシステム。
【請求項22】
部分的データをピアキャッシングエージェントで新たな部分的データへと更新する段階と、
前記部分的データに関連して前記ピアキャッシングエージェントによりコンフリクトメッセージを受信する段階と、
前記新たな部分的データが、前記ピアキャッシングエージェントにより前記コンフリクトメッセージを受信することに応答して、ホームエージェントへライトバックされることを示すライトバックメッセージを生成する段階と、
前記ホームエージェントが前記ピアキャッシングエージェントから新たな部分的データを受信した後、前記ピアキャッシングエージェントにより前記ホームノードから完了メッセージを受信する段階と
を有する方法。
【請求項23】
前記部分的データが変形状態で前記ピアキャッシングエージェントに保持されていることに応答して、前記部分的データを前記新たな部分的データへと更新する前に前記部分的データを前記ホームエージェントへライトバックする段階を更に有し、
前記部分的データを前記新たな部分的データへと更新する段階は、前記コンフリクトメッセージを受信する前に起こる、請求項22記載の方法。
【請求項24】
前記ピアキャッシングエージェントで前記部分的データを前記新たな部分的データへと更新する段階は、前記コンフリクトメッセージを受信した後に起こる、請求項22記載の方法。
【請求項25】
前記ホームエージェントでの応答コンフリクトメッセージの受信に応答して前記ホームエージェントにより前記コンフリクトメッセージを生成する段階と、
前記ホームエージェントにより前記ピアキャッシングエージェントから前記新たな部分的データを受信する段階と、
前記ホームエージェントに関連するメモリへ前記新たな部分的データをコミットする段階と、
前記ホームエージェントにより前記新たな部分的データの受信と、前記ホームエージェントに関連するメモリへの前記新たな部分的データのコミットとに応答して、前記ホームエージェントにより前記完了メッセージを生成する段階と
を更に有する請求項22記載の方法。
【請求項26】
前記ホームエージェントから前記完了メッセージを受信した後に前記ピアキャッシングエージェントによりフラグへ書き込み、該フラグを設定する段階と、
第2のピアキャッシングエージェントにより前記フラグの非コヒーレント読出を実行する段階と、
前記フラグが前記第2のピアキャッシングエージェントによる当該フラグの前記非コヒーレント読出で設定されることに応答して、前記第2のピアキャッシングエージェントにより前記ホームエージェントから前記新たな部分的データの非コヒーレント読出を実行する段階と
を更に有する請求項25記載の方法。
【請求項27】
前記ライトバックメッセージは、Acknowledge Conflict Write-backメッセージと、Write-back to Invalidメッセージと、Response Write-back Postableメッセージと、Write-back Data Partial Postableメッセージと、Write-back Postableメッセージとを有するグループから選択される、請求項17記載のシステム。
【請求項28】
前記コンフリクトメッセージはフォース確認応答コンフリクトメッセージを有し、
前記完了メッセージは完了メッセージ又は完了フォワードコードメッセージである、請求項27記載のシステム。
【請求項1】
部分的な書込を実行して部分的データを更新する第1のロジックと、
前記部分的データに関連するコンフリクトメッセージの受信に応答してコンフリクトフェーズでライトバックフェーズを開始し、該ライトバックフェーズは、前記部分的データを該部分的データに関連するホームエージェントへ供給する第2のロジックと、
前記第2のロジックへ結合され、前記ライトバックフェーズの間前記ホームエージェントへ前記部分的データを供給する第3のロジックと
を有する装置。
【請求項2】
前記第1のロジック及び前記第2のロジックは、相互接続アーキテクチャ階層化スタックの物理レイヤに関連するプロトコルロジックであり、
前記第3のロジックは、前記相互接続アーキテクチャ階層化スタックの物理レイヤに関連する物理ロジックを有する、請求項1記載の装置。
【請求項3】
コンフリクトフェーズでライトバックフェーズを開始する前記第2のロジックは、確認応答コンフリクト及びライトバックメッセージを生成する前記第2のロジックを有する、請求項1記載の装置。
【請求項4】
前記部分的データに関連するコンフリクトメッセージの受信に応答して確認応答コンフリクト及びライトバックメッセージを生成する前記第2のロジックは、前記ホームエージェントからのフォース確認応答コンフリクトメッセージの受信に応答して前記確認応答コンフリクト及びライトバックメッセージを生成する前記第2のロジックを有する、請求項3記載の装置。
【請求項5】
前記確認応答コンフリクト及びライトバックメッセージは、Acknowledge Conflict Write-back Invalid(AckCnfltWbI)メッセージを有し、
前記ホームエージェントからの前記フォース確認応答コンフリクトメッセージは、Grant_Force Acknowledge Conflict(Gnt_FrcAckCnflt)メッセージを有する、請求項4記載の装置。
【請求項6】
前記部分的データに関連するコンフリクトメッセージの受信に応答してコンフリクトフェーズでライトバックフェーズを開始する前記第2のロジックは、前記部分的データに関連するコンフリクトメッセージの受信に応答してライトバックマーカーメッセージ及びライトバックデータメッセージを生成する前記第2のロジックを有する、請求項1記載の装置。
【請求項7】
前記ライトバックマーカーメッセージは、Write-back Modified to Invalid(WbMtoI)マーカーメッセージを有し、
ライトバックデータメッセージは、Write-Back Invalid Data Partial(WbIDataPartial)メッセージを有し、
前記コンフリクトメッセージは、Grant_Force Acknowledge Conflict(Gnt_FrcAckCnflt)メッセージを有する、請求項6記載の装置。
【請求項8】
前記コンフリクトメッセージは、Grant_Force Acknowledge Conflict(Gnt_FrcAckCnflt)メッセージと、Acknowledge Conflict(AckCnflt)メッセージと、Complete_Forward Code(Cmp_FwdCode)メッセージとを有するメッセージのグループから選択される、請求項7記載の装置。
【請求項9】
前記部分的データに関連するコンフリクトメッセージの受信に応答してコンフリクトフェーズでライトバックフェーズを開始する前記第2のロジックは、前記部分的データに関連するコンフリクトメッセージの受信に応答してポスタブル・ライトバックメッセージを生成する前記第2のロジックを有する、請求項1記載の装置。
【請求項10】
前記ポスタブル・ライトバックメッセージは、Response Invalid Write-back Postable(RspIWbPost)メッセージと、Write-back Invalid Data Partial Postable(WbIDataPost)メッセージと、Write-back Postable(WbPost)メッセージとを有するグループから選択されるメッセージを有し、
前記コンフリクトメッセージは、Grant_Force Acknowledge Conflict(Gnt_FrcAckCnflt)メッセージと、Acknowledge Conflict(AckCnflt)メッセージと、Complete_Forward Code(Cmp_FwdCode)メッセージとを有するメッセージのグループから選択される、請求項9記載の装置。
【請求項11】
キャッシュラインを有するキャッシュメモリと、
前記キャッシュメモリへ結合され、前記キャッシュラインへの部分的データの部分書込を実行する第1のロジックと、
前記部分的データに関連するホームノードからのコンフリクトメッセージを受信する第2のロジックと、
前記第2のロジックへ結合され、前記コンフリクトメッセージの確認応答と、前記部分的データが、前記第1のロジックが当該部分的データの前記部分書込を実行し且つ前記第2のロジックが前記コンフリクトメッセージを受信したことに応答して、データメッセージにおいて送信されるべきこととを前記ホームノードへ示す結合メッセージを生成する第3のロジックと、
前記第3のロジックへ結合され、前記結合メッセージを前記ホームノードへ送信する第4のロジックと
を有する装置。
【請求項12】
前記結合データは、Acknowledge Conflict Write-back(AckCnfltWb)メッセージを有する、請求項11記載の装置。
【請求項13】
前記コンフリクトメッセージは、Force Acknowledge Conflict(FrcAckCnflt)メッセージを有する、請求項12記載の装置。
【請求項14】
前記第3のロジックは、次のトランザクションを開始する前に前記AckCnfltWbメッセージ及び前記データメッセージに関連する前記ホームノードからの完了メッセージを待つ、請求項12記載の装置。
【請求項15】
前記完了メッセージは、Complete_Forward Code(Cmp_FwdCode)メッセージを有する、請求項14記載の装置。
【請求項16】
前記第2のロジック及び前記第4のロジックは、相互接続階層化スタックの物理レイヤロジックに関連し、
前記第3のロジックは、前記相互接続階層化スタックのプロトコルレイヤロジックに関連する、請求項11記載の装置。
【請求項17】
部分的データに関連するホームノードからのコンフリクトメッセージの受信と、当該ピアノードが前記部分的データに対して部分書込を実行することとに応答してコンフリクトフェーズでライトバックフェーズを開始するライトバックメッセージを生成する第1のロジックを有するピアノードを有し、
前記ホームノードは、ポイント・ツー・ポイントリンクを介して前記ピアノードへ結合され、
前記ホームノードは、前記ライトバックフェーズの間の前記ピアノードからの前記部分的データの受信に応答して前記コンフリクトフェーズで前記ライトバックフェーズに係る完了メッセージを生成する第2のロジックを有する、システム。
【請求項18】
前記ライトバックメッセージは、Acknowledge Conflict Write-backメッセージと、Write-back to Invalidメッセージと、Response Write-back Postableメッセージと、Write-back Data Partial Postableメッセージと、Write-back Postableメッセージとを有するグループから選択される、請求項17記載のシステム。
【請求項19】
前記第1のロジックは、相互接続アーキテクチャ・コヒーレンス・プロトコルを実施するプロトコルロジックを有し、
前記第2のロジックは、前記相互接続アーキテクチャ・コヒーレンス・プロトコルを実施するプロトコルロジックを有する、請求項17記載のシステム。
【請求項20】
前記ピアノードに含まれる前記第1のロジックは、次の書込トランザクションを開始する前に前記ホームノードから前記ライトバックフェーズに係る前記完了メッセージを受信するまで待機する、請求項17記載のシステム。
【請求項21】
前記次の書込トランザクションは、前記部分的データが取り出される準備ができていることを第2のノードに示すべく設定されるようフラグを更新することを有し、
前記第2のノードは、前記フラグの非スヌープ読出を実行し、
前記フラグが設定されることに応答して、前記第2のノードは、前記ホームノードからの前記部分的データの第2の非スヌープ読出を実行する、請求項20記載のシステム。
【請求項22】
部分的データをピアキャッシングエージェントで新たな部分的データへと更新する段階と、
前記部分的データに関連して前記ピアキャッシングエージェントによりコンフリクトメッセージを受信する段階と、
前記新たな部分的データが、前記ピアキャッシングエージェントにより前記コンフリクトメッセージを受信することに応答して、ホームエージェントへライトバックされることを示すライトバックメッセージを生成する段階と、
前記ホームエージェントが前記ピアキャッシングエージェントから新たな部分的データを受信した後、前記ピアキャッシングエージェントにより前記ホームノードから完了メッセージを受信する段階と
を有する方法。
【請求項23】
前記部分的データが変形状態で前記ピアキャッシングエージェントに保持されていることに応答して、前記部分的データを前記新たな部分的データへと更新する前に前記部分的データを前記ホームエージェントへライトバックする段階を更に有し、
前記部分的データを前記新たな部分的データへと更新する段階は、前記コンフリクトメッセージを受信する前に起こる、請求項22記載の方法。
【請求項24】
前記ピアキャッシングエージェントで前記部分的データを前記新たな部分的データへと更新する段階は、前記コンフリクトメッセージを受信した後に起こる、請求項22記載の方法。
【請求項25】
前記ホームエージェントでの応答コンフリクトメッセージの受信に応答して前記ホームエージェントにより前記コンフリクトメッセージを生成する段階と、
前記ホームエージェントにより前記ピアキャッシングエージェントから前記新たな部分的データを受信する段階と、
前記ホームエージェントに関連するメモリへ前記新たな部分的データをコミットする段階と、
前記ホームエージェントにより前記新たな部分的データの受信と、前記ホームエージェントに関連するメモリへの前記新たな部分的データのコミットとに応答して、前記ホームエージェントにより前記完了メッセージを生成する段階と
を更に有する請求項22記載の方法。
【請求項26】
前記ホームエージェントから前記完了メッセージを受信した後に前記ピアキャッシングエージェントによりフラグへ書き込み、該フラグを設定する段階と、
第2のピアキャッシングエージェントにより前記フラグの非コヒーレント読出を実行する段階と、
前記フラグが前記第2のピアキャッシングエージェントによる当該フラグの前記非コヒーレント読出で設定されることに応答して、前記第2のピアキャッシングエージェントにより前記ホームエージェントから前記新たな部分的データの非コヒーレント読出を実行する段階と
を更に有する請求項25記載の方法。
【請求項27】
前記ライトバックメッセージは、Acknowledge Conflict Write-backメッセージと、Write-back to Invalidメッセージと、Response Write-back Postableメッセージと、Write-back Data Partial Postableメッセージと、Write-back Postableメッセージとを有するグループから選択される、請求項17記載のシステム。
【請求項28】
前記コンフリクトメッセージはフォース確認応答コンフリクトメッセージを有し、
前記完了メッセージは完了メッセージ又は完了フォワードコードメッセージである、請求項27記載のシステム。
【図1】
【図2】
【図3】
【図4a】
【図4b】
【図5a】
【図5b】
【図6a】
【図6b】
【図6c】
【図7a】
【図7b】
【図7c】
【図2】
【図3】
【図4a】
【図4b】
【図5a】
【図5b】
【図6a】
【図6b】
【図6c】
【図7a】
【図7b】
【図7c】
【公開番号】特開2013−80512(P2013−80512A)
【公開日】平成25年5月2日(2013.5.2)
【国際特許分類】
【出願番号】特願2012−284915(P2012−284915)
【出願日】平成24年12月27日(2012.12.27)
【分割の表示】特願2009−159801(P2009−159801)の分割
【原出願日】平成21年7月6日(2009.7.6)
【出願人】(593096712)インテル コーポレイション (931)
【Fターム(参考)】
【公開日】平成25年5月2日(2013.5.2)
【国際特許分類】
【出願日】平成24年12月27日(2012.12.27)
【分割の表示】特願2009−159801(P2009−159801)の分割
【原出願日】平成21年7月6日(2009.7.6)
【出願人】(593096712)インテル コーポレイション (931)
【Fターム(参考)】
[ Back to top ]