(57)【特許請求の範囲】
【請求項１】
第１のキャッシング・エージェントにおいて、第１のキューの完了メッセージのエントリに関連するタグ値が第２のキューのデータメッセージの対応するエントリのタグ値より小さいか否かを決定し、
前記決定に少なくとも部分的に基づいて、ディレクトリ、前記第１のキャッシング・エージェント及び第２のキャッシング・エージェントに結合された相互接続に前記完了メッセージを注入し、そうでない場合に、前記完了メッセージの注入を妨げ、
前記第１のキャッシング・エージェントがキャッシュ・ラインについて第１の要求に応じて前記第２のキャッシング・エージェントにキャッシュ・ラインを送信したことを示す前記完了メッセージを、前記第１のキャッシング・エージェントから前記ディレクトリで受信し、
前記完了メッセージを受信したときに、前記ディレクトリが前記キャッシュ・ラインを第３のキャッシング・エージェントに転送する第２の要求を前記第２のキャッシング・エージェントに送信できる前の時間遅延を決定し、
前記時間遅延後に前記第２の要求を送信することを有する方法。
【請求項２】
前記第１のキャッシング・エージェントが、前記キャッシュ・ラインを含む対応するデータメッセージを前記相互接続に注入した後に、前記第１のキャッシング・エージェントは、前記完了メッセージを送信する、請求項１に記載の方法。
【請求項３】
前記相互接続の第１のチャネルで前記完了メッセージを受信し、前記相互接続の第２のチャネルで前記第２の要求を送信することを更に有する、請求項２に記載の方法。
【請求項４】
前記第３のキャッシング・エージェントの前記キャッシュ・ラインを入力データ・キューに格納し、
前記ディレクトリからの入力スヌープ要求が前記キャッシュ・ラインに対応するか否かを決定し、
そうである場合、前記キャッシュ・ラインが前記入力データ・キューから流出されるまで、前記入力スヌープ要求を第２のキューに保持することを更に有する、請求項１に記載の方法。
【請求項５】
前記入力スヌープ要求へのスヌープ応答を送信する前に、前記第３のキャッシング・エージェントから前記キャッシュ・ラインを含むデータメッセージを送信することを更に有する、請求項４に記載の方法。
【請求項６】
前記第１のキャッシング・エージェントから前記ディレクトリに追い出しトランザクションを送信せずに、前記第１のキャッシング・エージェントからキャッシュ・ラインのフル・ヒントを追い出す又は送信することを更に有する、請求項１に記載の方法。
【請求項７】
キャッシュ・メモリをそれぞれ含む複数のキャッシング・エージェントと、
相互接続を介して前記複数のキャッシング・エージェントに結合されたディレクトリ手段と
を有し、
前記ディレクトリ手段は、前記ディレクトリ手段に結合されたキャッシング・エージェントのキャッシュ・メモリに格納されたキャッシュ・ラインにそれぞれ関連する複数のエントリを格納し、
前記ディレクトリ手段は、前記ディレクトリ手段により完了メッセージを受信した後に、前記ディレクトリ手段がT=(P−N−M+1)*Dに従って第２の要求に応じてスヌープ要求を送信できる前の時間遅延を決定する手段を含み、ただし、Pは第１のキャッシング・エージェントから第２のキャッシング・エージェントへの相互接続ホップ数に対応し、Nは前記第２のキャッシング・エージェントから前記ディレクトリ手段への相互接続ホップ数に対応し、Mは前記第１のキャッシング・エージェントから前記ディレクトリ手段への相互接続ホップ数に対応し、Dは、前記相互接続のリング・ストップの間の遅延に対応し、前記第２の要求は、同じキャッシュ・ラインへの少なくとも１つの他の保留中のアクセスと同時である装置。
【請求項８】
前記ディレクトリ手段は、いつ前記時間遅延が完了したかを示す少なくとも１つのタイマ手段を含む、請求項７に記載の装置。
【請求項９】
前記ディレクトリ手段は、第１のキャッシング・エージェントから完了メッセージを受信せずに、第１のキャッシング・エージェントに前記スヌープ要求を送信する、請求項７に記載の装置。
【請求項１０】
前記スヌープ要求は、前記スヌープ要求に応じて第１のキャッシング・エージェントから第２のキャッシング・エージェントに転送される第１のキャッシュ・ラインの要求である、請求項７に記載の装置。
【請求項１１】
前記ディレクトリ手段は、前記第２のキャッシング・エージェントからの第２の要求に応じて前記スヌープ要求を生成し、
前記第２の要求は、前記キャッシュ・ラインについての前記第１のキャッシング・エージェントからの第１の要求の後に、前記ディレクトリ手段で受信される、請求項１０に記載の装置。
【請求項１２】
前記ディレクトリ手段は、前記第２の要求を要求側キューに格納する、請求項１１に記載の装置。
【請求項１３】
前記ディレクトリ手段は、前記第１のキャッシュ・ラインを前記第１のキャッシング・エージェントに転送した第３のキャッシング・エージェントからの完了メッセージに応じて、前記第２の要求をキューから出す、請求項１１に記載の装置。
【請求項１４】
複数のキャッシング・エージェントと、スヌープ要求、データメッセージ及び承諾メッセージについて独立のチャネルを含むリング相互接続を介して前記複数のキャッシング・エージェントに結合されたディレクトリとを含むマルチコア・プロセッサと、
前記マルチコア・プロセッサに結合されたダイナミック・ランダム・アクセス・メモリ（DRAM）と
を有するシステムであって、
前記ディレクトリは、第１のキャッシュ・ラインが、第１のキャッシング・エージェントの前記第１のキャッシュ・ラインの受信を示す第１の承諾メッセージを前記第１のキャッシング・エージェントから受信せずに、前記第１のキャッシング・エージェントから第２のキャッシング・エージェントに転送されること生じるために、前記ディレクトリがスヌープ要求を第１のキャッシング・エージェントに送信できる前の時間遅延を計算する手段を含み、
前記時間遅延は、前記第１のキャッシング・エージェントへの前記第１のキャッシュ・ラインの送信を示す第２の承諾メッセージを第３のキャッシング・エージェントから受信したときに計算され、前記第１のキャッシング・エージェントの前記第１のキャッシュ・ラインの受信を示す第１の承諾メッセージを前記第１のキャッシング・エージェントから受信しない、前記第２の承諾メッセージの受信と前記スヌープ要求の送信との間のサイクル数に対応するシステム。
【請求項１５】
前記計算する手段は、前記リング相互接続の特性に少なくとも部分的に基づいて、前記時間遅延を計算する、請求項１４に記載のシステム。
【請求項１６】
前記ディレクトリは、いつ前記時間遅延か完了したかを示す少なくとも１つのタイマを含む、請求項１４に記載のシステム。
【請求項１７】
前記第１のキャッシング・エージェントは、前記第３のキャッシング・エージェントから前記第１のキャッシュ・ラインを受信したときに、前記ディレクトリへの承諾メッセージの送信を妨げるように構成される、請求項１４に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
多くのコンピュータシステムは、複数のプロセッサと、I/O及び記憶装置とインタフェース接続する入出力（I/O）エージェントとを含み、また、コヒーレント・メモリ（coherent  memory）を含む。コヒーレント・メモリは、複数のプロセッサのコヒーレント・キャッシュ（coherent  cache）でもよい。１つ以上のキャッシュは、これらの複数のプロセッサにしばしば含まれるため、コヒーレント・キャッシュは、プロセッサがキャッシュへのアクセスを要求し得る他のエージェント（例えば、他のプロセッサ又はI/Oエージェント）とそのキャッシュを共有することを意味する。
【０００２】
コンピュータシステムが複数のコヒーレント・キャッシュ・メモリと、複数のプロセッサ及びI/Oエージェントのような複数の要求エージェントとを含む場合、２つのエージェントが同時にキャッシュ・ライン（cache  line）へのアクセスを要求したときに、衝突が生じ得る。この問題を軽減するために、典型的には、キャッシュ・コヒーレンシー・プロトコル（cache  coherency  protocol）を使用して、複数の要求エージェントの間の特定のキャッシュ・ラインへのアクセスを仲裁（arbitrate）するシステムが実現される。しばしば、１つ以上のキャッシュ・メモリに存在する様々なキャッシュ・ラインの位置及び状態を示すエントリを格納することによりキャッシュ・コヒーレンシーを維持管理するために、ディレクトリのような集中型エンティティが使用される。キャッシュ・コヒーレンシー・アルゴリズムは、同じメモリ位置への読み取り及び書き込みの動作を規定する。以下の条件が満たされるときに、キャッシュのコヒーレンスが得られる。(1)同じプロセッサPによるXへの書き込みに続くプロセッサPにより行われた位置Xへの読み取りは、他のプロセッサによるXの書き込みがPにより行われた書き込み及び読み取り命令の間に生じず、常にPにより書き込まれた値を戻さなければならない。(2)何らかのプロセッサによるXへの他の書き込みが２つのプロセッサの間に生じない場合に、他のプロセッサP2によるXへの書き込みに続くプロセッサP1による位置Xへの読み取りは、P2により行われた書き込み値を戻さなければならない。(3)何らかのプロセッサによるXへの他の書き込みが２つのアクセスの間に生じない場合に、他のプロセッサP2によるXへの書き込みに続くプロセッサP1により行われた位置Xへの読み取りは、P2により行われた書き込み値を戻さなければならない。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
しかし、キャッシュ及び／又は要求エージェントの数がコンピュータシステムで増加すると、キャッシュ・コヒーレンシーを維持管理する複雑性、これらのエージェントの間で必要なメッセージの数も増加する。このため、キャッシュ・コヒーレンシー・プロトコルは、新たに拡大されたコンピュータシステムに適合しなければならない。更に、コヒーレンシーを維持管理するために、更なる数のメッセージが送信されなければならず、これは、相互接続のトラヒックを増加させ、他の通信の帯域を低減し、更に、データの要求に応答する際の待ち時間をもたらす。
【課題を解決するための手段】
【０００４】
本発明の方法は、
第１のキャッシング・エージェントがキャッシュ・ラインについて第１の要求に応じて第２のキャッシング・エージェントにキャッシュ・ラインを送信したことを示す完了メッセージを、前記第１のキャッシング・エージェントからディレクトリで受信し、
前記ディレクトリが前記キャッシュ・ラインを第３のキャッシング・エージェントに転送する第２の要求を前記第２のキャッシング・エージェントに送信できる前の時間遅延を決定し、
前記時間遅延後に前記第２の要求を送信することを特徴とする。
【０００５】
本発明の装置は、
キャッシュ・メモリをそれぞれ含む複数のキャッシング・エージェントと、
相互接続を介して前記複数のキャッシング・エージェントに結合されたディレクトリ手段と
を有し、
前記ディレクトリ手段は、前記ディレクトリ手段に結合されたキャッシング・エージェントのキャッシュ・メモリに格納されたキャッシュ・ラインにそれぞれ関連する複数のエントリを格納し、
前記ディレクトリ手段は、前記ディレクトリ手段が同時スヌープ要求を送信できる前の時間遅延を決定する手段を含むことを特徴とする。
【０００６】
本発明のシステムは、
複数のキャッシング・エージェントと、スヌープ要求、データメッセージ及び承諾メッセージについて独立のチャネルを含むリング相互接続を介して前記複数のキャッシング・エージェントに結合されたディレクトリとを含むマルチコア・プロセッサと、
前記マルチコア・プロセッサに結合されたダイナミック・ランダム・アクセス・メモリ（DRAM）と
を有するシステムであって、
前記ディレクトリは、第１のキャッシュ・ラインが、第１のキャッシング・エージェントの前記第１のキャッシュ・ラインの受信を示す第１の承諾メッセージを前記第１のキャッシング・エージェントから受信せずに、前記第１のキャッシング・エージェントから第２のキャッシング・エージェントに転送されること生じるために、前記ディレクトリが同時スヌープ要求を第１のキャッシング・エージェントに送信できる前の時間遅延を計算する手段を含むことを特徴とする。
【発明の効果】
【０００７】
本発明の実施例によれば、キャッシュ・コヒーレンシーの維持管理が改善される。
【図面の簡単な説明】
【０００８】
【図１】本発明の一実施例によるシステムの一部のブロック図
【図２】本発明の一実施例によるプロトコル処理のフローチャート
【図３】本発明の一実施例による出力シーケンサのブロック図
【図４】本発明の一実施例による入力パス構造のブロック図
【図５】本発明の一実施例によるディレクトリのブロック図
【図６】本発明の実施例による方法のフローチャート
【図７】本発明の実施例によるシステムのブロック図
【発明を実施するための形態】
【０００９】
様々な実施例で、様々なシステムエージェントを結合するシステムの基礎となる相互接続の特性は、キャッシュ・コヒーレンシーに使用されるディレクトリでのメッセージ処理の同時処理を増加させるために使用され、相互接続の帯域を低減し、システムのそれぞれ個々のコアでミス処理の合計待ち時間を低減することができる。
【００１０】
図１を参照すると、本発明の一実施例によるシステムの一部のブロック図が示されている。図１に示すように、システム10は、複数のキャッシング・エージェント（caching  agent）C1-C3を含む。このようなキャッシング・エージェントのそれぞれは、キャッシュ・メモリを含んでもよく、キャッシュ・メモリにアクセスしてもよく、様々な実施例では、プロセッサ・ソケット、コア、又はキャッシュ・メモリを含む又はキャッシュ・メモリに関連する他のこのような処理ユニットでもよい。各キャッシュ・エージェントC1-C3は、相互接続20を介して結合される。相互接続20はリング相互接続でもよい。図１の実装に示すように、リング相互接続20は、それぞれ要求、応答及びデータパケットを伝達する３つの独立したメッセージパスを含んでもよい。しかし、本発明の範囲はこの点に限定されない。
【００１１】
図１に示すように、キャッシング・エージェントに加えて、ディレクトリDが存在する。ディレクトリDは、キャッシュ・コヒーレンシー・プロトコルを管理し、様々なキャッシング・エージェントC1-C3に格納された情報へのコヒーレント・アクセスを可能にするホーム・エージェント又は他のユニットの一部でもよい。例えば、ディレクトリDは、キャッシング・エージェントC1-C3に格納されたキャッシュ・ラインの位置及びこれらの状態に関して様々なエントリに情報を格納するテーブルを含んでもよい。或る実施例では、要求されたデータがどのキャッシング・エージェントにも存在しない場合、ホーム・エージェントはまた、メインメモリにアクセスするために使用されてもよい。
【００１２】
従って、キャッシング・エージェントが排他的又は共有アクセスのためにデータにアクセスしようとすると、排他的所有権要求（RdO：request  for  exclusive  ownership）又は共有データ要求（RdS：request  for  shared  data）のような要求をディレクトリDに送信し、要求されたデータを取得する。更に以下に説明するように、システム10は、対応するデータメッセージが転送側キャッシング・エージェントにより要求側（リクエスタ）に送信された後に（例えば、キャッシュ対キャッシュ転送メッセージ）、特定の承諾メッセージがディレクトリDに送信され得るキャッシュ・コヒーレンシー・プロトコルを実装してもよい。これにより、相互接続20で帯域及び待ち時間の低減が実現され得る。図１のリング相互接続アーキテクチャでは、リング相互接続20を通じて何らかの発信元−宛先の対の間で順序は存在しないことが想定され得る。しかし、バウンス（bounce）されないメッセージ（すなわち、データ及び応答メッセージ）は、同じメッセージクラスで何らかの２つのキャッシング・エージェントの間で順に配信されることが想定され得る。
【００１３】
更に以下に説明するように、ディレクトリDは、システム10の様々なキャッシュに格納された情報のメタデータを含む配列を含んでもよい。更に、ディレクトリDは、保留中の要求（処理されている要求及び衝突又は他の理由でまだ処理できていない保留中の要求）を保持する１つ以上のキューを含んでもよい。本発明の範囲はこの点に限定されないが、或る実装では、キャッシュ・コヒーレンシー・プロトコルは、MESI（modified,  exclusive,  shared,  invalid）又はMESIF（modified,  exclusive,  shared,  invalid,  forwarded）プロトコルを使用して実装されてもよい。
【００１４】
M状態のキャッシング・エージェントC2により現在保持されているキャッシュ・ブロック（例えば、A1）へのキャッシング・エージェントC1による読み取り所有権（RFO：Read  For  Ownership）要求のトランザクションについて検討する。更に、C3も同じキャッシュ・ブロックにRFO要求を行い、C2の要求が完全に処理される前に要求がディレクトリDに到達することを仮定する。換言すると、この第２の要求は、同じデータについての同時要求である。
【００１５】
純粋なプライベート・キャッシュ（private  cache）でのメッセージフローが以下の図２に示されている。図２は、本発明の一実施例によるプロトコル処理のフローチャートである。ディレクトリは、キャッシュ・ブロックへの保留中の同時要求をキューに保持し、到着順に先入れ先出し（FIFO：first-in-first-out）でサービス提供する。図２はまた、各キャッシング・エージェントとディレクトリとで行われる状態遷移を示している。図２に示す様々なメッセージの名前（RdO、FwdO等）は簡略記号であり、異なる実装では異なるラベルを有してもよい。一般的に、これらの名前は、メッセージ形式略号（例えば、読み取り（Rd）、転送（Fwd）等）と、要求されたキャッシュ状態（キャッシング・エージェントからディレクトリへ）、要求された転送状態（ディレクトリからスヌープされたキャッシュ（snooped  cache）へ）又は遷移キャッシュ状態（キャッシュからキャッシュへ又はディレクトリからキャッシュへ）の略号（例えば、MESIの１つ）を有する。
【００１６】
図２に示すように、初期時点では、キャッシング・エージェントC1-C3は以下の状態を有する。C1及びC3は無効（I）状態であり、C2は変更（M）状態である。これは、キャッシング・エージェントC2が排他的にデータの有効なコピーのみを保持することを示す。従って、ディレクトリDは、C2が有効なデータの排他的なコピーを保持することを示す。図２に示すように、キャッシング・エージェントC1は、このデータについてディレクトリDに要求（すなわち、排他的読み取り所有権（RdO）要求）を送信する。この要求を受信すると、ディレクトリDは、そのテーブルの対応するエントリを調べ、このデータの有効な排他的なコピーがキャッシング・エージェントC2に存在することを決定してもよい。従って、ディレクトリDは、スヌープ要求（snoop  request）（例えば、転送要求（すなわち、FwdO））をキャッシング・エージェントC2に送信する。その後、キャッシング・エージェントC3も同じデータについて同様の要求を行うため、キャッシング・エージェントC1及びC3は同じデータへの同時アクセスを求める点に留意すべきである。従って、時間Aにおいて、ディレクトリDは、キャッシング・エージェントC3からの要求を要求FIFOキューに格納する。
【００１７】
図２を参照し続けて、キャッシング・エージェントC2がディレクトリDから転送要求を受信すると、キャッシュ・ラインのそのコピーを無効にし、スヌープ要求への応答として、要求されたデータをキャッシング・エージェントC1に直接送信する。データメッセージは、応答側キャッシュにより変更された実際のデータを含み、メッセージ形式簡略記号（すなわち、DataM）は、受信側キャッシュC1が遷移すべきMESI状態（すなわち、M）を示す。キャッシング・エージェントC2は、要求されたデータをキャッシング・エージェントC1に送出した後まで、完了（CMP）応答をディレクトリDに返信しない点に留意すべきである。図２からわかるように、この完了メッセージがディレクトリDで受信されると、キャッシング・エージェントC3からの要求は、時間Cにキューから出される。時間B’’からCは、ディレクトリからのスヌープメッセージの少なくとも１サイクル前にキャッシング・エージェントC1がデータメッセージ（DataM）を見ることを確保するために、ディレクトリが待機しなければならない時間量（ゼロでもよい）を反映する。基礎となる相互接続として、バッファレス（bufferless）・リング相互接続を仮定しているため、この時間は、リングの如何なるエージェントによっても正確に計算可能である。この時点で、ディレクトリDは、スヌープ要求（すなわち、転送要求（FwdO））をキャッシング・エージェントC1に送信でき、これにより、要求されたデータがキャッシング・エージェントC3に転送され得る。
【００１８】
図２を参照し続けて、この要求に応じて、キャッシング・エージェントC1は、要求されたデータを含むスヌープ要求への応答（例えば、データメッセージ（DataM））をキャッシング・エージェントC3に送信し、その後、完了（CMP）メッセージをディレクトリDに返信してもよい。この時点で、キャッシング・エージェントC1は、コヒーレンス・プロトコルの標準的な規則に従って、キャッシュ・ラインのそのコピーを無効（I）にする。従って、図２に示す処理の完了後に、キャッシング・エージェントC1及びC2は、ラインの無効のコピーを含み、ラインの変更された有効なコピーは、対応するディレクトリのエントリにより示されるように、キャッシング・エージェントC3に存在する。
【００１９】
図２に示すプロトコル処理により、そうでなければ送信される必要のある様々な他のコヒーレンシー・プロトコル・メッセージが回避され得る。例えば、前述の例の代わりに、Dが何らかのキューにある要求を処理し始める前に完了メッセージがディレクトリDに送信される必要がある場合、相互接続で更なるメッセージ及び帯域の消費を生じる。更に、キャッシングC3からの同時要求がディレクトリDでキューに入れられる間に、大きい待ち時間が生じる。すなわち、様々な実施例で、時間Bの後にキャッシング・エージェントC1に到達する何らかの転送要求は、キャッシング・エージェントC1からディレクトリDに返信される中間の完了メッセージを必要とせずに、キャッシング・エージェントC1により処理され得る。更に、図１のようなバッファレス・リングのメッセージ特性の認識は、リング相互接続20で２つのエージェント間のメッセージ移動時間を正確に推定するために利用され得る。
【００２０】
従って、様々な実施例で、キャッシング・エージェントは、最初に要求側へのスヌープ応答（例えば、データメッセージ）を注入する前に、リング相互接続でディレクトリに返信されるスヌープ要求に完了メッセージを常に注入する（inject）ように制御される。このように、ディレクトリは、最小の所定の遅延時間の後に同時要求のスヌープ要求をリング相互接続に注入することができる。最小の所定の遅延時間は、ゼロ以上のサイクルでもよい。この遅延時間は、キャッシング・エージェントからの完了メッセージの到達と、要求側キャッシング・エージェント、転送側キャッシング・エージェント及びディレクトリDの相対位置とに部分的に基づいて計算されてもよい。
【００２１】
一実施例では、片方向リングを仮定し（アルゴリズムは双方向リングにも同様に当てはまり、以下に説明する持続時間計算が変更可能である）、異なるトポロジー・パラメータについて以下の値を仮定する。
第２の要求側（C2）からディレクトリへのホップ数=N
第1の要求側（C1）からディレクトリへのホップ数=M
C1からC2へのホップ数=P
リング・ストップ間の遅延（すなわち、リングメッセージが１つのホップから他のホップに移動するために要するサイクル単位の時間）=D
ディレクトリがC1に転送要求を開始する前に待機しなければならない完了メッセージの到達後の時間（サイクル単位）=T
一実施例では、以下の式が使用され得る。
T=(P−N−M+1)*D        [式1]
追加のサイクル（すなわち、“+1”）は、データメッセージがエージェントにより受信されたときの少なくとも１サイクル後に、ディレクトリからの転送要求がキャッシング・エージェント（C1）に到達することを確保する。この計算は、データ及び完了メッセージの双方が同じサイクルでリング・ストップに注入されたことを仮定しており、データメッセージが完了メッセージの前に注入されたことを仮定している。或る状況では、Tは、ゼロ未満でもよい。この場合、ディレクトリは、転送要求をC1宛にリングに直ちに注入することができる。
【００２２】
この分析は、全てのキャッシング・エージェントについて以下の仮定を行う点に留意すべきである。(1)転送要求が何らかのキャッシング・エージェントにより受信されると、まず、キャッシング・エージェントは、ディレクトリに応答を送信する前に、転送されたデータ及び状態を要求側に与える。双方のメッセージは同じサイクルで注入されてもよいが、決してデータメッセージがデータ・リングに注入される前に完了メッセージが注入されることはない。(2)リング・ストップから同じリング・ストップのプロトコル・エージェントへのメッセージは、プロトコル・エージェントによりリング・ストップへの到着順に処理される。(3)このリング・ストップでのプロトコル・エージェントからリング・ストップへのメッセージは、プロトコル・エージェントによる生成順に注入される。(4)応答及びデータメッセージチャネルにバウンス（bounce）は存在しない（すなわち、要求がキャッシング・エージェントにより行われるときに、バッファは予め確保される）。(5)応答及びデータメッセージのいずれか２つのリング・ストップの間のメッセージ配信のための持続時間は、バッファレス・リングの全てのエージェントにより正確に予測され得る。(6)式１は、全てのパケットについて同じサイズであることを仮定する。異なるサイズのパケットでは、持続時間計算は、パケットサイズに適応するように変更され得る。
【００２３】
１つの実装では、同じアドレスへの同時アクセスに要する時間（衝突等）をかなり低減することに加えて、コヒーレンス・プロトコル・フローで少なくとも１つのメッセージは除去されてもよい。このようなプロトコルもまた、バリア同期（barrier  synchronization）の待ち時間をかなり低減し得る。バリア同期では、複数のエージェントが、同時に同じキャッシュ・ブロックへの所有権を競う。
【００２４】
キャッシュ対キャッシュ転送の場合について本発明の実施例で得られる待ち時間の低減を定量化するために、全てのスレッドが関与するときのバリア同期処理に要する時間量が検証され得る。バリア同期は、グループの全ての他のメンバが同じ同期点に到達するまで、スレッドが“同期”点を待機する機構である。同期点で、全てのスレッドはバリアから“解放”され、通常の処理を続ける。バリア同期処理では、バリアに到達した全てのスレッドは、１だけバリア・カウントをインクリメントし、全てのスレッドがバリアに到達しているか否かを見るためにバリアの値を検査し、そうでなければビジー待ち（busy-wait）状態に移行する。定量化を簡単にするために、バリア同期のキャッシュ・ブロックがS状態を介入せずにM状態に移動することを仮定する。
【００２５】
パケットが全体リングを移動するための合計時間がTであることを仮定し、双方向リングが何らかのパケットの最大待ち時間をT/2サイクルに実質的に低減し、全てのエージェントがリング上に均一にランダムに分布することを仮定すると、以下の式は、１つのエージェントが同期変数を取得及び更新するための待ち時間を表す。特に、同じアドレスへの第２の要求を受け入れる前に、平均的にディレクトリが平均T/8サイクルを待機しなければならないことに留意して、要求の完了を完了するためのサイクル単位での待ち時間は以下のようになる。
待ち時間=(T/4+T/4+T/4+T/8)=7T/8サイクル      [式2]
この待ち時間の低減は、競合するアドレスへの要求処理が通常の方法に従って処理される前に待機しなければならない時間量（すなわち、Tサイクル）に関して表されている点に留意すべきである。同様に、一対の同時要求を処理する通常の方法では、サイクル単位で要する時間は、以下のようになる。
待ち時間=2*Tサイクル
その代わり、本発明の一実施例によれば、合計待ち時間は以下のように得られ得る。最善の場合のシナリオでは、ディレクトリからのFwdOメッセージは、要求側がデータを受信したちょうど１サイクル後に到達する。双方の場合のプロトコル処理のオーバーヘッドが同じであり、このため、無視可能であることを仮定する。
待ち時間=(T/4+T/4+T/4)+1+T/4=T+1サイクル[最善の場合]        [式3]
最悪の場合では、スヌープメッセージがデータを見た後に要求側に到達するためにT/4サイクルを要することを仮定する。このような場合、待ち時間は、以下のようになる。
待ち時間=(T/4+T/4+T/4)+(T/4+T/4)=5T/4サイクル[最悪の場合]        [式4]
従って、平均的な場合、転送されたデータを見た後にキャッシング・エージェントC1によりスヌープで観測される遅延は、〜T/8サイクルになる。従って、平均的な場合、関与する２つのスレッドでのバリア同期の待ち時間は、以下の式により表され得る（第１のスレッドの要求が完全に処理される前に第２のスレッドの要求が到達することを仮定する）。
合計待ち時間=(3T/4)+(T/8+T/4)[２つのスレッドのバリア同期のときの平均的な場合]=3T/4+3T/8=9T/8サイクル        [式5]
従って、式5は、同時アクセスについての合計時間の低減についての一般的な式であり、同じアドレスについて現在保留中の少なくとも１つのトランザクションでXのアクセスが到達する。最初のトランザクションが完了する前に全てのXのアクセスが到達することは必ずしも必要ではなく、（前の第２のものからの）トランザクションが到達したときに、現在進行中のトランザクションが存在しさえすればよい点に留意すべきである。これは、バリア同期では通常に生じ、特に、多くのコアを有する大規模なシステムでは通常に生じる。
【００２６】
要するに、異なるエージェントによる同じキャッシュ・ブロックへの同時アクセスのため、ディレクトリで保留中のトランザクションについて観測される待ち時間の低減は、約(T-7T/8)=T/8サイクルになり得る。更に、同時アクセスを完了するための合計待ち時間は、それぞれ（最初を除く）がディレクトリに到達するXの連続アクセスを仮定して、ディレクトリの同じアドレスに現在進行中のトランザクションが存在する場合、3T/4+X*(3T/8)である。従って、通常の方法に比べて、合計システム待ち時間の低減は、T/4+X*5T/8になる。
【００２７】
全てのトランザクションがキャッシュ対キャッシュ転送に関与するという仮定に基づいて、承諾リング（acknowledgement  ring）での帯域の低減は、通常の場合に２つのメッセージが存在しなければならず、一実施例によればこのチャネルに唯一のメッセージが存在するという観測により計算され得る。従って、全てのトランザクションがキャッシュ対キャッシュ転送であることを仮定して、承諾リングでの帯域の低減は50%になる。
【００２８】
従って、実施例は、ディレクトリでキューに入れられるために費やされる時間を低減することにより、また、キャッシュ・ブロックの取得に関連するコヒーレンス動作を完了するために要するメッセージの数を減少させることにより、同じキャッシュ・ブロックへの同時要求の待ち時間を改善する。従って、待ち時間低減及び帯域節約の技術になる。実施例は、いつ特定のエージェントが相手のキャッシュから転送されたメッセージを受信したことを保証されたかを正確に決定するために、ディレクトリでタイマを使用してもよい。更に、実施例は、メッセージの順序を確保するためにハードウェアのサポートを使用してもよい。
【００２９】
従って、実施例は、同じキャッシュ・ブロックへのリトライのないディレクトリ型コヒーレンス・プロトコルの同時のコヒーレント動作に要する時間を低減する。これらの動作は、頻繁なバリア同期を行うマルチスレッドのRMS（recognition,  mining  and  synthesis）負荷の間でかなり一般的である。従って、実施例は、コヒーレント動作で待ち時間及びメッセージ数を低減するために、基礎となる相互接続の特性を利用する。
【００３０】
様々な実施例では、プロトコル・エンジン（PE：protocol  engine）リング・インタフェースでのスヌープ応答及び完了メッセージについてメッセージクラス（例えば、応答及びデータ）を通じて順序を確保するため、特定のハードウェア構造が提供されてもよい。１つの機構は、全てのキャッシング・エージェントでの全てのメッセージクラス（要求、応答及びデータ）について単一の先入れ先出し（FIFO）構造を有することでもよい。
【００３１】
従って、他の実施例では、プロトコル・エンジンとリング・エージェントとの間の組み合わせロジックが提供されてもよい。より具体的には、このハードウェア構造は、リング・ストップへのプロトコル・エンジンの間に結合される応答キューとデータ・キューとの間に配置され得る。このロジックは、元の要求側への対応するデータ応答がバッファレス（BL）・リングに注入される前に、完了応答が承諾（AK）リングに注入されることを妨げてもよい。このロジックは、個々のキュー及びその流出（drain）特性の性質に応じて異なる形式になり得る。
【００３２】
キュー毎にFIFOの実施例では、タグ（例えば、8ビットのタグ（FIFOキューのエントリの数よりかなり大きい））が、プロトコル・エンジン（応答生成エンティティ）によりスヌープ応答及び完了メッセージに付加されてもよい。次に、比較回路が、完了キューの先頭に結合され得る。完了応答がキューの先頭に到達し、AKリングに挿入される前に、完了応答は、データ・キューの先頭に対して検査される。データ・キューの先頭のエントリ・タグが完了エントリのタグより小さい値を有する場合、データ応答はまだBLリングに注入されていない。他方、等しい又は大きい値を有する場合、データ応答は、同じクロックサイクルで注入されるか、既にBLリングに注入されている。
【００３３】
図３を参照すると、本発明の一実施例による出力シーケンサ（output  sequencer）のブロック図を示している。図３に示すように、出力シーケンサ200は、プロトコル・エンジン210からリング・ストップへのスヌープ応答を並び替えるために使用されてもよい。リング・ストップは、リング相互接続の複数のリング（例えば、データが通信されるバッファレス・リング245並びに完了及び他の承諾メッセージが送信される承諾（AK）リング255）への接続を形成する。
【００３４】
図３に示すように、プロトコル・エンジン210は、それぞれ一式のメッセージに関連するタグ（例えば、8ビットのタグ）を含むデータメッセージ及び完了メッセージを生成してもよい。関連するリングで送信されるこれらのメッセージは、キュー220及び230（すなわち、完了キュー220及びデータ・キュー230）の対応するものに提供される。一実施例では、キュー220及び230は、FIFOバッファとして適合されてもよい。図３に示すように、完了キュー220の先頭エントリは、比較器240に提供されてもよい。ここで、データ・バッファ230の先頭と比較される。比較は、完了バッファ220のタグがデータ・タグのものより小さい値を有しているか否かを含んでもよい。これは、対応するデータメッセージがまだリング245に注入されていないことを意味する。従って、比較器240の出力は、完了キュー220の先頭のエントリが承諾リング255に注入されることを妨げるために、ロジック250により使用されてもよい。図３の実施例のこの特定の実装で示したが、本発明の範囲はこの点に限定されない。
【００３５】
リング・ストップから注入されたスヌープがリング・ストップからプロトコル・エンジンへの途中で転送されたデータ応答を追い越さないことを確保するために、連想メモリ（CAM：content  addressable  memory）が入力パスに提供されてもよい。入力パスのCAMにより、ディレクトリからCAMへの全てのスヌープ要求がキューに入れられ、キャッシュ／コア宛の“進行中（in-flight）”のデータパケット（状態情報を有する）に追いつく（catch）ことになる。
【００３６】
データがデータ・キューで追いつかれると、同じアドレスのデータメッセージがキャッシュ・コントローラに注入されるまで、スヌープはブロックされる。このことにより、キャッシュは、コアにデータを供給することが可能になり、キャッシュ・ブロックが保留中のスヌープによりスヌープされる前に、コアがそれを用いて少なくとも１つの動作を実行することが可能になる（例えば、このデータが新しい値でデータを上書きするために供給されるRFO要求の場合）。
【００３７】
図４を参照すると、本発明の一実施例による入力パス構造のブロック図が示されている。図４に示すように、所定のキャッシュ・エージェントは、複数のリング（すなわち、要求（すなわち、AD）リング305、データ・リング（すなわち、BLリング）310、承諾リング（すなわち、AKリング）315）に結合されてもよい。一実施例に基づいて、相手のキャッシュから転送されたデータの少なくとも１サイクル後にスヌープ要求がリング・ストップに到達したことが保証されても、転送されたデータが観測される前に、スヌープが実際にキャッシング・エージェントにより見られ得ることが可能である。これは、ディレクトリへのキャッシング・エージェントによる矛盾した応答を生じる。このような発生を回避するため、連想メモリ（CAM）325に関する方式が提供される。それぞれの入力スヌープは、進行中の可能性がある何らかのメッセージについて、入力プロトコル・データ・キュー320でキャッシュ・ブロック・アドレス検索を実行する。メッセージが存在しない場合、スヌープ有効ロジック330を介してスヌープが有効になり、キャッシュ入力キュー372を介してキャッシュ370のキャッシュ・コントローラ・ロジック380に挿入される。（345において）同じキャッシュ・ブロックにデータメッセージが存在する場合、そのデータパケットは、データ応答プロトコル・キュー350でマーキングされ（ブロック355）、スヌープが保留中のままになる。入力データ応答プロトコルFIFOキュー350が流出するときに、（365において）マーキングされたパケットに直面した場合、遅延ユニット332を介した一定の遅延の後にスヌープ有効ロジック330はオンになる。このことにより、入力スヌープ・キュー320の先頭のスヌープが解放されることが可能になる。従って、キャッシュ・コントローラ380の内部のプロトコル処理は、変更されないままである。出力プロトコル処理375は、キャッシュ応答キュー374から受信したスヌープ応答の一部であるデータメッセージが、完了メッセージがAKリング315に配置される少なくとも１クロック前にBKリング310に配置されることを確保する出力シーケンサを含む。図４の実施例の特定の実装について示したが、本発明の範囲はこの点に限定されない。
【００３８】
第１及び第２の入力キューの間の検索のためにCAM構造を導入することにより、少ない数のメッセージで明示的書き込み（EWB：explicit  write  back）（Mコピー追い出し（M  copy  eviction））及びフル・ヒント（full  hint）（Sコピー追い出し（S  copy  eviction））のトランザクションが実現され得る。通常のプロトコルでは、EWB要求及びフル・ヒントは、実際にラインを追い出す前に、最初にディレクトリに問い合わせ、進行中の競合する要求が存在することを確認する必要はない。CAM構造を提供することにより、EWBは、このようなメッセージなしに処理することができ、入力スヌープは、EWBに“追いつく（catch）”ことができる。この理由は、EWB／フル・ヒントが完了するまで、これらがプロトコル・バッファFIFO構造に存在するからである。
【００３９】
様々な実装で、実施例は、ホーム・エージェントに存在するようなディレクトリに実装されてもよい。図５を参照すると、本発明の一実施例によるディレクトリのブロック図が示されている。図５に示すように、ホーム・エージェントのディレクトリでもよいディレクトリ400は、所定のホーム・エージェント・ディレクトリに存在し得る他の構成要素の中でも、関連するキャッシュに格納されたキャッシュ・ラインに関する情報と、特定の制御ロジックと、キューと、タイマとを含む。
【００４０】
図５に示すように、ディレクトリ400は、ディレクトリ400が関連するキャッシュの１つの所定のキャッシュ・ラインにそれぞれ関連し得る複数のエントリを有するディレクトリ配列410を含んでもよい。各エントリは、潜在的な他のこのような情報の中でも、キャッシュ・ラインの位置及びその状態に関する様々な情報を含んでもよい。更に、ディレクトリ400は、保留中要求キュー420を含み、保留中要求キュー420は、ディレクトリ400に関連する異なるキャッシング・エージェントから様々な要求を格納する記憶装置でもよい。所定の要求が実行され得るか否かを決定するために、同じキャッシュ・ラインの何らかの前の未解決の要求が既に要求キュー420に存在するか否かが決定されてもよい。
【００４１】
更に図５に示すように、スヌープ・ロジック430が存在してもよい。このようなロジックは、入力要求と、ディレクトリ配列410の情報とを分析し、異なるキャッシング・エージェントへの様々なスヌープ要求の送信を可能にするために使用されてもよい。更に、実施例は、単一のキャッシュ・ラインの複数の要求がディレクトリ400に入力されている状況を扱うために使用され得る同時要求ロジック450を含んでもよい。例えば、同時要求ロジック450は、単一のキャッシュ・ラインの複数の同時要求の存在を決定し、ディレクトリ400からの第２のこのような同時要求の迅速な送信（すなわち、第１の同時要求に関連する完了メッセージの受信の前）を可能にしてもよい。このため、１つ以上のタイマ445に関連して、同時要求ロジック450は、第２の同時要求がディレクトリ400から送信され得る前に保留中要求キュー420に格納される所定の最小時間遅延を決定してもよい。例えば、１つ以上のタイマは、ディレクトリから送信され得る同時要求の間の所定のサイクル数を正確に測定し、キャッシュ・ミス要求の積極的な処理を可能にするために使用されてもよい。図５の実施例のこの特定の実装について示したが、本発明の範囲はこの点に限定されない。
【００４２】
或る特定の実装では、同時要求ロジック450は、以下の図６のフローチャートに従ってこのような同時要求を扱ってもよい。図６を参照すると、本発明の実施例に従って同時スヌープ要求が見られ得る前の最小時間遅延を決定するために、ディレクトリ又は他のトラッキング構造により使用され得る方法500のフローチャートが示されている。図６に示すように、方法500は、キャッシュ・ラインについて第２のキャッシング・エージェントから要求を受信することにより始まってもよい（ブロック510）。要求に基づいて、ディレクトリは、キャッシュ・ラインの位置及び状態を決定してもよい（ブロック520）。例えば、ディレクトリは、キャッシュ・ラインが第１のキャッシング・エージェントに存在することを決定してもよい。従って、ディレクトリは、第１のキャッシング・エージェントから第２のキャッシング・エージェントにキャッシュ・ラインを送信する第１のスヌープ要求を生成してもよい（ブロック530）。
【００４３】
何らかの時点で、この第１のスヌープ要求の送信前又はその後であるが、キャッシュ対キャッシュ転送の承諾の完了前に、ディレクトリは、同じキャッシュ・ラインについて第３のキャッシング・エージェントから同時要求を受信してもよい（ブロック540）。従って、ディレクトリは、ディレクトリ内のFIFOのような保留中要求キュー又は他のこのような一時記憶装置に同時要求を格納してもよい。
【００４４】
その後、ディレクトリは、第１及び第２のキャッシング・エージェントの間でのキャッシュ・ラインの送信の承諾を受信してもよい（ブロック550）。ブロック560においてこの承諾を受信したときに、最小時間遅延が決定されてもよい。この時間遅延は、ディレクトリが第２のスヌープ要求を送信し、キャッシュ・ラインが第２のキャッシング・エージェントから第３のキャッシング・エージェントに転送されることを要求することができる前の期間として計算されてもよい。一実施例では、この計算は、式1に従って行われてもよい。ダイヤモンド570において、例えばディレクトリのタイマに基づいて、この最小時間遅延に到達したか否かが決定されてもよい。到達していない場合、ダイヤモンド570はループバックしてもよい。時間遅延が実現した場合、第２のスヌープ要求は、第２のキャッシング・エージェントに送信され、キャッシュ対キャッシュ転送を生じてもよい（ブロック580）。その後、ディレクトリは、その送信の承諾を受信してもよい（ブロック590）。これにより、保留中の要求がキューのその位置から出され得る。図６の実施例のこの特定の実装について示したが、本発明の範囲はこの点に限定されない。
【００４５】
実施例は、複数の異なるシステム形式で実装されてもよい。図７を参照すると、本発明の実施例によるシステムのブロック図が示されている。図７に示すように、マルチプロセッサ・システム600は、ポイント・ツー・ポイント相互接続システムであり、ポイント・ツー・ポイント相互接続650を介して結合された第１のプロセッサ670及び第２のプロセッサ680を含む。図７に示すように、各プロセッサ670及び680は、第１及び第２のプロセッサ・コア（すなわち、プロセッサ・コア674a及び674b並びにプロセッサ・コア684a及び684b）と、ディレクトリ673及び683とを含むマルチコア・プロセッサでもよい。ディレクトリ673及び683は、バッファレス・リング相互接続を介してコアに結合されてもよい。各ディレクトリは、最小の待ち時間で同時のスヌープ要求の送信を可能にするために、図５に示すようなロジックを含んでもよい。
【００４６】
更に図７を参照すると、第１のプロセッサ670は、メモリ・コントローラ・ハブ（MCH：memory  controller  hub）672と、ポイント・ツー・ポイント（P-P）インタフェース676及び678とを更に含む。同様に、第２のプロセッサ680は、MCH682と、P-Pインタフェース686及び688とを含む。図７に示すように、MCH672及び682は、プロセッサを各メモリ（すなわち、メモリ632及びメモリ634）に結合する。メモリは、各プロセッサにローカルに付加されたメインメモリ（例えば、DRAM（dynamic  random  access  memory））の一部でもよい。第１のプロセッサ670及び第２のプロセッサ680は、それぞれP-P相互接続652及び654を介してチップセット690に結合されてもよい。図７に示すように、チップセット690は、P-Pインタフェース694及び698を含む。
【００４７】
更に、チップセット690は、チップセット690を高性能グラフィック・エンジン638に結合するインタフェース692を含む。次に、チップセット690は、インタフェース696を介して第１のバス616に結合されてもよい。図７に示すように、様々なI/O装置614は、第１のバス616を第２のバス626に結合するバス・ブリッジ618と共に、第１のバス616に結合されてもよい。一実施例では、例えば、キーボード／マウス622、通信装置626及びデータ記憶ユニット628（コード630を含んでもよいディスクドライブ又は他の大容量記憶装置等）を含み、様々な装置は第２のバス620に結合されてもよい。更に、オーディオI/O624が第２のバス620に結合されてもよい。
【００４８】
実施例は、コードで実装されてもよく、命令を実行するようにシステムをプログラムするために使用され得る命令を格納した記憶媒体に格納されてもよい。記憶媒体は、如何なる種類のディスク（フロッピー（登録商標）ディスク、光ディスク、CD-ROM（compact  disk  read-only  memory）、CD-RW（compact  disk  rewritable）及び光磁気ディスクを含む）及び半導体装置（ROM（read-only memory）、RAM（random  access  memory）（DRAM（dynamic random access memory）、SRAM（static random access memory）、EPROM（erasable  programmable  read-only  memory）、フラッシュ・メモリ、EEPROM（electrically  erasable  programmable  read-only  memory）等）若しくは光カード、又は他の種類の電子命令を格納するのに適した媒体を含んでもよいが、これらに限定されない。
【００４９】
本発明について限られた数の実施例に関して説明したが、当業者は、複数の変更及び変形を認識する。特許請求の範囲は、この特許発明の真の要旨及び範囲内に入るこのような全ての変更及び変形をカバーすることを意図する。
【図１】
0005037566.tif 000002
【図２】
0005037566.tif 000003
【図３】
0005037566.tif 000004
【図４】
0005037566.tif 000005
【図５】
0005037566.tif 000006
【図６】
0005037566.tif 000007
【図７】
0005037566.tif 000008