(58)【調査した分野】(Int.Cl.,DB名)
2つのビットの状態に少なくとも基づいて、第1の集積回路ダイと第2の集積回路ダイとの間で交換されるべきスヌープメッセージと完了メッセージの順序を決定するロジック
を備える機器であって、
前記第1の集積回路ダイ及び前記第2の集積回路ダイは、第1のインタフェース及び第2のインタフェースを通して結合されることになり、
前記スヌープメッセージ及び前記完了メッセージは、前記第1のインタフェース及び前記第2のインタフェースの少なくとも一方を介して交換されることになり、前記ロジックは、前記完了メッセージが前記スヌープメッセージを渡すことを許可し、前記ロジックは、前記スヌープメッセージが前記完了メッセージを同じアドレスに渡すことを許可しない、
機器。
2つのビットの状態に少なくとも基づいて、第1の集積回路ダイと第2の集積回路ダイとの間で交換されるべきスヌープメッセージと完了メッセージの順序を決定するステップ
を備える方法あって、
前記第1の集積回路ダイ及び前記第2の集積回路ダイは、第1のインタフェース及び第2のインタフェースを通して結合され、
前記スヌープメッセージ及び前記完了メッセージは、前記第1のインタフェース及び前記第2のインタフェースの少なくとも一方を介して交換されることになり、前記完了メッセージは前記スヌープメッセージを渡すことを許可され、前記スヌープメッセージは前記完了メッセージを同じアドレスに渡すことを許可されない、
方法。
【発明を実施するための形態】
【0003】
以下の説明では、様々な実施形態の完全な理解を与えるために、様々な具体的な詳細が説明される。しかしながら、一部の実施形態は、そのような具体的な詳細を用いずに実施されてもよい。他の例では、特定の実施形態を曖昧にしないように、周知の方法、プロシージャ、コンポーネント及び回路を詳細には説明していないことがある。実施形態の様々な態様は、半導体集積回路(「ハードウェア」)、1つ以上のプログラムに編成されるコンピュータ読取可能な命令(「ソフトウェア」)又はハードウェアとソフトウェアの何らかの組合せといった、様々な手段を使用して実施され得る。この開示の目的では、「ロジック」への言及は、ハードウェア、ソフトウェア又はその何らかの組合せのいずれかを意味するものとする。
【0004】
本明細書で検討されるように、「スヌープ(snoop)」又はバス・スヌープは、一般的に、キャッシュのコヒーレンシーを達成するように共有メモリ内で使用される技術を指す。例えばスヌープメッセージを使用して、複数の共有メモリデバイスにまたがるキャッシュラインのステータスを決定し、2つ以上の位置/キャッシュ内に存在する同じメモリ位置が、共有メモリデバイスを用いるコンピューティングシステムにまたがる他の対応するメモリ位置とのコヒーレント(一貫性)を保つことを保証することができる。さらに、GO(すなわち、グローバル観測(Global Observation))メッセージは、一般的に、1つ以上のオペレーションの完了を示すメッセージタイプを示す。また、「フリット(flit)」(フロー制御デジット(flow control digit)の省略である)は、フロー制御の最も小さい単位を指す。メッセージは一般的に、複数のフリットで作られる。加えて、「フリット」は、一実施形態では80ビットを含むことがあり、この場合、例えばエラー検出に8ビット、リンク層ヘッダに8ビット、そしてデータに64ビットを有することがあるが、他の構成も使用することができる。
【0005】
一部の実施形態において、コヒーレント・クロスダイ・インタフェース(CDI)スヌープメッセージ及び/又はGO、すなわちグローバル観測(「完了」とも呼ばれる)メッセージの順序付けを提供する。より具体的には、コヒーレントCDIは、スヌープ及びGOメッセージの順序付けに関するルールを含み、このルールは、GOメッセージはスヌープメッセージを渡す(pass)ことができるが、スヌープメッセージはGOメッセージを同じアドレスに渡さないことを要する(そうでなければ、コヒーレンシー及びTSO(Total Store Ordering)のメモリコヒーレンシ・モデルが壊れる可能性がある)。スヌープメッセージはアドレスを含むが、GOメッセージはそうでないので、このルールを実装することは複雑な可能性がある。したがって、全てのGO/スヌープメッセージを、潜在的に競合するものとして取り扱う必要がある。このために、実施形態は、時間枠を、GO/スヌープメッセージが到着する時に関連する「エポック(時期)(epoch)」へ分割し、これらのエポックは、「エポックビット」と呼ばれるビットに関連付けられる。ある実施形態は、エポックビット及びフリットのパッキングルールを用いて、コヒーレントCDIフリットを効率的にパックして、フリット内にいずれの競合メッセージもないことを確実にする。次いで、アンパックルールを使用して、スヌープ/GO順序付けルールに整合するよう、エポックビットを受信側で再作成することができる。
【0006】
さらに、本明細書で検討される技術を、
図1〜
図6に関連して説明されるものを含め、(例えばデスクトップ、ワークステーション、サーバ、ラックシステム等といった非モバイルのコンピューティングデバイス、あるいはスマートフォン、タブレット、UMPC(ウルトラモバイル・パーソナルコンピュータ)、ラップトップコンピュータ、ウルトラブック(登録商標)コンピューティングデバイス、スマートウォッチ、スマートグラス等といったモバイルコンピューティングデバイスを含む)様々なコンピューティングシステムに提供することができる。より具体的には、
図1は、ある実施形態に係るコンピューティングシステム100のブロック図を示している。システム100は、1つ以上のエージェント102−1〜102−M(ここでは、まとめて「複数のエージェント102」、あるいはより一般的に「エージェント102」と呼ばれる)を含むことができる。ある実施形態では、複数のエージェント102のうちの1つ以上を、
図4〜
図6に関連して検討されるコンピューティングシステムのような、コンピューティングシステムのコンポーネントのうちのいずれかとすることができる。
【0007】
図1に示されるように、エージェント102は、オンダイ・システム・ファブリック(OSF:On-die System Fabric)といった一次ファブリック(primary fabric)104を介して通信することができる。したがって、エージェント102及びファブリック104は、ある実施形態では、同じ集積回路のダイ上に存在することができる。本明細書で検討されるように、「OSF」は、走査可能、構成可能及び/又は製品固有のオンダイ・システム・ファブリックを指すことができる。例えば複数のエージェント102の各々は、(例えば別のファブリックに結合するための)ブリッジ、IP(知的財産:Intellectual Property)ブロック又はファブリック104を介して結合される電子デバイスの別のコンポーネントとすることができる。一実施形態では、ファブリック104は、(コンピューティングデバイスといった)様々なエージェントがデータを通信することを可能にするコンピュータネットワークを含むことができる。ある実施形態では、ファブリック104は、1つ以上の相互接続(又は相互接続ネットワーク)を含むことができ、この接続は、シリアル(例えばポイントツーポイント)リンク及び/又は(ある実施形態ではリングとして構成され得る)共有通信ネットワークを介して通信する。各リンクは、1つ以上のレーンを含むことができる。例えば一部の実施形態は、FBD(Fully Buffered Dual)のインラインメモリモジュールを用いた通信を可能にするリンクに対するコンポーネントデバッグ又は検証を容易にすることができ、この場合、例えばFBDリンクは、メモリモジュールを(プロセッサ又はメモリハブのような)ホストコントローラデバイスに結合するためのシリアルリンクである。デバッグ情報を、FBDチャネルホストから転送することができ、これにより、デバッグ情報を、(1つ以上のロジックアナライザのような)チャネルトラフィック・トレース・キャプチャ・ツールによってチャネルに従って観測することができる。
【0008】
一実施形態において、システム100は、階層化プロトコルスキームをサポートすることができ、このスキームは、物理層、リンク層、ルーティング層、トランスポート層及び/又はプロトコル層を含むことができる。ファブリック104は更に、あるプロトコル(例えばキャッシュプロセッサ又はキャッシュ認識メモリコントローラ)から、ポイントツーポイント又は共有ネットワーク用の別のプロトコルへの(例えばパケットの形式での)データの伝送を容易にすることができる。また、実施形態によっては、ファブリック104は、1つ以上のキャッシュコヒーレント・プロトコルに従う通信を提供することができる。
【0009】
さらに、
図1内で矢印の方向によって示されるように、エージェント102は、ファブリック104を介してデータを送信及び/又は受信することができる。したがって、一部のエージェントは、一方向のリンクを使用することができ、他のエージェントは通信に双方向リンクを使用することができる。例えば(エージェント102−Mのような)1以上のエージェントは、(例えば一方向のリンク106を介して)データを伝送することができ、(エージェント102−2のような)他のエージェントは、(例えば一方向リンク108を介して)データを受信することができ、一方、(エージェント102−1のような)一部のエージェントは、(例えば双方向リンク110を介して)データの送信と受信の双方を行うことができる。一部の実施形態において、リンク106〜110は、IPブロックが複数の設計にまたがって相互運用することを可能にするプロトコル及び/又はシグナリングを提供するOSFインタフェースである。
【0010】
ある実施形態では、エージェント102を結合するOSFインタフェース(例えばリンク106〜110)は、一次チャネルとサイドバンド・チャネルと呼ばれる2つのポートを提供することができる。一次チャネルは、(a)ピア間のデータ転送及び/又はアップストリームのための高性能なインタフェースとすることができ;(b)メモリ(例えば32ビット、44ビット)、入出力(IO又はI/O)、構成及びメッセージトランザクションをサポートすることができ;(c)周辺コンポーネント相互接続(PCI)エクスプレス(2008年8月のPCIエクスプレス基本仕様3.0、リビジョン0.5による「PCIe」)の順序付けルール及び/又は列挙をサポートすることができ;(d)スプリットトランザクションプロトコルをサポートすることができ;かつ/又は(e)PCIeヘッダ情報をマップすることができる。サイドバンド・チャネルは、(i)サイドバンド(本明細書では交換可能に「帯域外」と呼ばれることもある)情報を通信し、かつ特別なワイヤをなくすよう、標準インタフェースを提供することができ;(ii)ポイントツーポイントネットワークを提供することができ;(iii)ステータス、電力管理、構成シャドーイング、テストモード等に使用することができ;かつ/又は(v)(例えば一次データ転送では意図されない)低性能のために使用することができる。
【0011】
加えて、エージェント102のうちの少なくとも1つをホームエージェントとすることができ、エージェント102のうちの1つ以上を、要求又はキャッシュエージェントとすることができる。一般に、要求/キャッシュエージェントは、対応する「ホームエージェント」が関連付けられるメモリアドレスへのアクセスを求める要求を、ホームノード/エージェントに送信する。さらに、ある実施形態では、(エージェント102−1として1つのみが示されているが)エージェント102のうちの1つ以上が、メモリ120のような(そのエージェント専用の、あるいは他のエージェントと共有の)メモリへのアクセスを有することができる。一部の実施形態では、エージェント102の各々(又は少なくとも1つ)を、エージェントとして同じダイ上にあるか、そうでなければエージェントによってアクセス可能なメモリ120に結合することができる。また、
図1に示されるように、エージェント102は、本明細書において例えば
図2〜
図6に関連して更に説明されるように、スヌープ及び/又はGOメッセージ順序付けを容易にするコヒーレントCDIロジック150を含む。
【0012】
図2は、ある実施形態に係るコンピューティングシステム200を示すブロック図である。システム200は、複数のソケット202〜208(4つ示されているが、一部の実施形態では、より多くの又はより少ないソケットを有することができる)を含む。各ソケットはプロセッサを含む。また、システム200内の様々なエージェントは、ロジック150により通信することができる。ロジック150はアイテム202及びMC2/HA2内にのみ示されているが、ロジック150をシステム200の他のエージェント内に提供することができる。さらに、実装に応じて、より多くの又はより少ないロジックブロックをシステム内に存在させることができる。加えて、各ソケットはポイントツーポイント(PtP)リンクを介して、あるいはQuick Pathインターコネクト(QPI)、MIPI(Mobile Industry Processor Interface)等といった異なる相互接続を介して他のソケットと結合される。
図1のファブリック104に関連して説明したように、各ソケットは、システムメモリのローカル部分に結合され、例えば動的ランダムアクセスメモリ(DRAM)を含む、複数のDIMM(デュアル・インライン・メモリ・モジュール)によって形成される。
【0013】
別の実施形態において、ネットワークファブリックを任意のシステムオンチップ(SoC又はSOC)アプリケーションに使用することができ、ネットワークファブリックは、AMBA(Advanced Microcontroller Bus Architecture)用のARM準拠インタフェース、OCP(Open Core Protocol)、MIPI(Mobile Industry Processor Interface)、PCI(Peripheral Component Interconnect)又はPCIe(Peripheral Component Interconnect express)といった、カスタム又は標準インタフェースを用いる。
【0014】
図2に示されるように、各ソケットは、(MC0/HA0〜MC3/HA3のような)メモリコントローラ(MC)/ホームエージェント(HA)に結合される。メモリコントローラは、(
図9のメモリ912のような)システムメモリの一部であり得る、対応するローカルメモリ(MEM0〜MEM3とラベル付けされる)に結合される。一部の実施形態において、(MC0/HA0〜MC3/HA3のような)メモリコントローラ(MC)/ホームエージェント(HA)は、
図1のエージェント102−1と同じ又は同様のものとすることができ、MEM0〜MEM3とラベル付けされるメモリは、本明細書における図面のいずれかに関連して説明されるメモリデバイスと同じ又は同様のものとすることができる。また、一部の実施形態では、MEM0〜MEM3は、例えばマスターとスレーブのように、データをミラーリングするように構成され得る。また、システム200の1つ以上のコンポーネントを、一部の実施形態では、同じ集積回路ダイ上に含めることができる。
【0015】
さらに、(
図2に示されるような)一実装は、ミラーリングを伴うソケットグルーレス構成のためのものである。例えば(MC0/HA0といった)メモリコントローラに割り当てられるデータは、PtPリンクを介して(MC3/HA3といった)別のメモリコントローラにミラーリングされる。
【0016】
図3は、一実施形態に係るマルチダイ相互接続構成のブロック図である。また、ロジック150は、一部の実施形態に関連して説明されるように、スヌープ/GOメッセージ順序付けを容易にするよう、
図3に示されるコンポーネントのうちの1つ以上を含むことができる。ある実施形態では、
図3のクロスダイ・インタフェース(CDI)308を使用して複数の集積回路ダイ/デバイスを結合する。
【0017】
一部の実施形態では、第1の集積回路(IC)ダイ302と第2のICダイ304との間の2つの(例えば一意の)インタフェースのリンクが提供される。これらのインタフェースのうちの1つは、オンダイ・システム・ファブリック(OSF)306(
図1のOSF102と同じ又は同様であってよい)に対するものであり、取付けデバイスとOSF306との間でコヒーレント・プロトコル及び非コヒーレント・プロトコルを使用する。OSFは、ある実施形態では複数のインタフェースを含む(一部の実施形態では、200超のワイヤ幅とすることができる)。他のインタフェースは、クロスダイ・インタフェース(CDI)308に対するものであり、これは、50レーン幅とすることができる。一実施形態において、CDIはコヒーレント・プロトコル・インタフェース305のメッセージを400ビットのフリットにパックする。一実施形態は、スヌープ及び/又はGOメッセージの順序付けの要件に依然として従いつつ、コヒーレントCDIメッセージを効率的にパックする。一般に、順序付けの要件は、GOはスヌープを渡すことができるが、スヌープはGOをプッシュすることである。
【0018】
1つの以前の解決策は、OSFの全てのメッセージインタフェースを広げることであったであろう(これは、非常に実現困難なことであり得る)。例えば50レーンの8UI(すなわち8ユニット間隔(Unit Interval))のインタフェース(又は400ビットのフリット)では、OSFから受け取った全てのメッセージ通信を、(数千のワイヤインタフェースを含むことができる)二次ダイへとパックして転送することができる。OSF306上のコヒーレントCDIでは、単一のレシーバ宛てのほとんどのメッセージは、スヌープ及びGOを除いて順序を有さない。別の解決策は、単一のメッセージを1つのフリットで一度に送信することであり、これは非常に非効率的なことであり得る。
【0019】
以前に説明したように、スヌープ及びGOメッセージの順序付けに関するコヒーレントCDIルールは、GOメッセージがスヌープを渡すことができるが、スヌープメッセージはGOメッセージを同じアドレスに渡さないことである(そうでなければ、コヒーレンシー及びTSOメモリの一貫性モデルが壊れる可能性がある)。この複雑性を生じる1つの項目は、スヌープメッセージはアドレスを含むが、GOメッセージはそうでないことである。したがって、全てのGO/スヌープメッセージを、潜在的に競合するものとして扱う必要がある。このために、ある実施形態では、エポックビット及びフリットのパッキングルールを使用して、コヒーレントCDIフリットを効率的にパックし、フリット内に競合するメッセージが存在しないことを保証する。その後、アンパックルールを使用して、受信側でエポックビットを再作成し、スヌープ/GO順序付けルールを維持することができる。
【0020】
さらに、一部の実施形態は、フリットメッセージ内のいずれの追加のビットも使用することなく、コヒーレントCDI順序付けを保証しつつ、できるだけ多くのスヌープ及び/又はGOメッセージを単一のフリット内にパックすることを可能にする。さらに、そのような技術は、TX/RX(送信/受信)回路のためにフリット内のいずれかの追加のビットを消費(burn)又は無駄にすることを防いで同期を維持するだけでなく、できるだけ多くのメッセージをフリット内に置くように、フリットの効率的なパックを可能にする。
【0021】
コヒーレントCDIの順序付け要件を保証する別の方法は、単一のFIFO(先入れ先出し)バッファ内のメッセージを順序付けることを要するが、この解決策では、かなり多くの結合構造又は多重ビットが使用される(また、CDIはOSF相互接続よりもかなり狭いので、より大きな構造又は多重ビットが、当該大きな構造にアクセスすること及び/又は追加の情報を通信することに関連する待ち時間に起因して、リンクスピードを低下させる可能性がある)。対照的に、一部の実施形態は、CDI TX/RXロジック内で2つのビットのみを使用して、潜在的な依存性を追跡する。これらの2つのビットは、TX/RXロジック間では送信されないが、各々の側の記憶構造内に存在する。このアプローチは、リンクを介してこの情報を送信することを要する代わりに、ローカルでの決定/アクセスを伴う、より簡単な解決策を提供し、その結果として、例えばより高い信頼性、電力消費の低減、遅延の低減及び/又はスピードの向上が得られる。RXロジックでは、GO及びスヌープメッセージがアンパックされると、コヒーレント・プロトコル・インタフェース305における伝送に先行して、これらの2つのビット(ここでは、時々「エポックビット」とも呼ばれる)が再生成される。
【0022】
図3を参照すると、一次IC302と二次IC304との間において、コヒーレント・プロトコル・インタフェースは概して左側に示されており、非コヒーレント・プロトコル・インタフェースは概して右側に示されている。
図3では、「ARB/MUX」310は、多重プロトコルリンク層の間、一実施形態においては、
図3に示されるようなコヒーレント・プロトコル層と非コヒーレント・プロトコル層の出力間を仲裁する、アービトレーションロジック(arbitration logic)/マルチプレクサを指す。CDI物理(PHY)層307は、フリットの粒度で多重化されるプロトコルをトランスポートする。
【0023】
一部の実施形態では、(一次ICと二次ICとの間のCDIコヒーレントパイプのために開発される)次の構成/ルールのうちの1つ以上が、スヌープ/GO順序付けを保証する:
(1)OSF302インタフェースでは、別個のスヌープ/GO FIFOに、スヌープ/GOエポックを追跡するためのエントリごとに追加ビット及び現在のエポックを追跡するための更なる1ビットが与えられる;
(a)エポックビットが、キューへの入力において生成され、読み取られて、パッキング/送信を決定する;
(b)GOメッセージはアドレスを担持せず、したがって、ロジック(例えばロジック150)は、スヌープメッセージが未処理のGOと競合するかどうかが分からないことに留意されたい。このため、CDIコヒーレント・プロトコルは、スヌープが、以前に発行されたGOを渡さない(NOT pass)ことを必要とする;
(2)フリット内の順序付けされない定義メッセージによる、コヒーレントフリットを構築する際のCDIの暗黙的なフリット順序(すなわち、単一フリット内の全てのメッセージは、順序付けの要件を有しておらず、これらの全てのメッセージを受信側ロジックで完全にアンパックして、任意の所望の順序でデバイスに送信することができる)。
【0024】
スキームは、次のように機能する。スヌープ(Req/要求)とGO(Rsp/応答)のFIFOは、別個であり、エントリごとにエポックビットの追加のアレイを伴う。GOエポック(GO_epoch)ビット又はスヌープエポック(Snp_epoch)ビットは、これらの中で順序付けする必要がない、(それぞれ)GO又はスヌープのブロックに対して、バイナリ値を割り当てられる。現在/最後にGO FIFOからポップしたのはどのエポックであるかを思い出させる追加のビット(Rbit又は「リメンバービット」)も存在する。
【0025】
一実施形態において、ビットは、送信(Tx)/受信(Rx)FIFOに入るまでにこれらのルールに従って操作される:
GOが前のサイクル又は同じサイクルで受け取らなかった場合、最初はSnp_epoch=1であり、そうでない場合は0、
最初はGO_epoch=1、
GOが書かれて、最後にスヌープが書かれた場合、又は最後にGOが書かれ、スヌープは書かれなかった場合、Snp_epochをトグル切り替えし、
スヌープがこのサイクルでも書かれる場合、又は最後にスヌープが書かれて、GOは書かれなかった場合、GO_epochをトグル切り替えする。
【0026】
一実施形態において、GOが、最後のスヌープの後に最後に来たものかどうか、あるいは、スヌープが、最後のGOの後に来たものかどうかを判断するために、キューについて各書込み可能信号の状態を保存する。書込み可能要求(req_WrEn:Request write enable)及び書込み可能応答(rsp_WrEn:Response write enable)は、このいずれかがアサートされたときにキャプチャされる。そうでなければ、last_req_WrEnとlast_rsp_WrEnのフロップは、その状態を保持する。このように、「最後(last)」とは、何かが書かれたのが最後であることを意味する。キューに書かれるエポックビットは、next_snp_epoch及び next_GO_epochと名前を付けられる。一部の実施形態において、これらは、表1:Snp_epochの生成及び表2:GO_epochの生成によって決定される:
【表1】
【表2】
【0027】
一実施形態において、Tx/Rx FIFOを読み出すときに、順序付けを確立するためのルールは、次の通りである:
Rbitが、最後に送信されたGO_epochに設定され;
エポックが同じ場合、スヌープはGOを渡し;
エポックが同じでない場合、Rbit=Snp_epochならば、スヌープはGO(複数可)を渡し;
Rbit=Snp_epochでないならば、スヌープは、GOが発行されるまで遅延され;
エポックを変更する前に、現在のエポック内の全てを送信する必要がある。
【0028】
一部の実施形態に係る例を、下記の表3で提供する。この表は、OSF上に現れるスヌープ(S0、S1、S2等)及びGO(G0、G1、G2等)の見本の順序と、ロジック(例えばロジック150及び/303)がSnp_epochビットとGO_epochビットをどのように割り当てるかを示す。
【0029】
初期値として、最初のGO_epochは定義上、常に1である。GOが受け取らなかった場合、最初のSnp_spoch=1であり、そうでない場合は0である。この例において、時間t=0のSnp_epochは1に割り当てられる。t=1では、GO(G0)はスヌープなしで到着する。このGOは、スヌープに関して順序付けの要件がなく、したがって同じエポック内であるので、このGOにも1が割り当てられる。t=2では、スヌープ(S1)とGO(G1)の双方が到着する。スヌープは、新たなエポックを割り当てられなければならず、スヌープは、以前のGOの後ろに順序付けされることになる。GOもこのエポックを与えられるので、スヌープをブロックしない。t=4では、スヌープ(S2)のSnp_epochをトグル切り替えする必要があり、その結果、このスヌープは、t=3の時に来たGOの後ろに順序付けされることになる。例の残りの部分は、上記のルールを使用して構築され得る。
【0030】
表3は、ある実施形態に係るスヌープ(S)及びGO(G)メッセージの到着と、Snp及びGO FIFOの対応する追跡の例を示している:
【表3】
【0031】
実施形態において、コヒーレントCDIフリットは、次のルールに基づいてパックされる:
上記のルールに従う順序付け問題(order matter)のとき、スヌープは、後のフリット内に置き;
効率を改善するために、スヌープメッセージとGOメッセージを異なるフリットにグループ化する。
【0032】
この例では、リメンバービット(Rbit)は、最初のGOメッセージの受け取りで1に設定される。スヌープS0とG0を同じフリットで送信することができるが、S1、G1及びG2はできない。これらは全てエポック0のメッセージであるので、S1、G1及びG2は後続のフリットで送信することが許容される(これらが実際に送信されるかどうかは、他のフリットパッキングルールに依存することに留意されたい)。R-bitは0に変更されることになる。S2は、R-bitに合致しないSnp_epoch(1)を有するので、やはりそのフリット内で送信することはできない。S2及びG3は、後続のフリット内で送信することが許容される。S3、S4、S5及びG4は、続くフリット内で送信することができるが、S6をそのフリット内で送信することはできない。これは、S6のエポックがR-bit(0)に合致せず、G4に対して順序付けられる必要があるからである。
【0033】
Rxデータ経路において、フリットがアンパックされ、エポックビットが生成されて、Rx FIFOへ書き込む際の上述のルールに従って、スヌープ及びGOメッセージとともにRx FIFO内に格納される。順序は、これらがパックされるフリットに基づく。フリット内のスヌープ/GOメッセージは、順序付けされていないが、フリット内のスヌープ/GOメッセージのSnp_Epoch及びGO_Epochについて同じ値を設定することになる。Rx FIFOが読み出されるとき、エポックビットを使用して、スヌープ/GOメッセージを正しい順序で受信側ロジックに返す。
【0034】
図4は、コンピューティングシステム400の実施形態のブロック図を図示している。
図1のエージェント102のうちの1つ以上が、コンピューティングシステム400の1つ以上のコンポーネントを備えることができる。また、システム400の様々なコンポーネントが、
図4に図示されるようにロジック150を含むことができる。しかしながら、ロジック150を、システム400全体を通して、これらの図示される場所を含め、あるいはこれらの場所以外の場所に設けることができる。コンピューティングシステム400は、相互接続ネットワーク(又はバス)404に結合される1つ以上の中央処理ユニット(CPU)402(ここでは、まとめて「複数のプロセッサ402」、あるいはより一般的に「プロセッサ402」と呼ばれることがある)を含むことができる。
図1〜
図3に関連して説明される動作を、システム400の1つ以上のコンポーネントによって実行することができる。
【0035】
プロセッサ402は、汎用プロセッサ、(コンピュータネットワーク405上で通信されるデータを処理することができる)ネットワークプロセッサ等といった、任意のタイプのプロセッサとすることができる(縮小命令セットコンピュータ(RISC)プロセッサ又は複数命令セットコンピュータ(CISC)を含む)。さらに、プロセッサ402は、シングルコア又はマルチコア設計を有することができる。マルチコア設計のプロセッサ402は、異なるタイプのプロセッサコアを、同じ集積回路(IC)ダイ上に統合することができる。また、マルチコア設計のプロセッサ402は、対称的なマルチプロセッサとして実装とすることも、非対称のマルチプロセッサとして実装することもできる。
【0036】
プロセッサ402は、1つ以上のキャッシュを含むことができ、これらのキャッシュを、様々な実施形態においてプライベートとし、かつ/又は共有することができる。一般的に、キャッシュは、別の場所に格納される元のデータ又は以前に計算された元のデータに対応するデータを格納することができる。メモリアクセスの待ち時間を減らすために、データをキャッシュ内に格納すると、元のデータをフェッチするか再計算するのではなく、キャッシュしたコピーにアクセスすることにより、将来の使用を行うことができる。キャッシュは、レベル1(L1)キャッシュ、レベル2(L2)キャッシュ、レベル3(L3)キャッシュ、中間レベルキャッシュ、最終レベルキャッシュ(LLC)等といった任意のタイプのキャッシュとすることができ、システム400の1つ以上のコンポーネントにより使用される電子データ(例えば命令を含む)を格納することができる。加えて、そのようなキャッシュを様々な場所(例えば
図1、2、3又は5のシステムを含め、本明細書で説明されるコンピューティングシステムに対して他のコンポーネントの内部)に配置することができる。
【0037】
チップセット406を、相互接続ネットワーク404に更に結合することができる。さらに、チップセット406は、グラフィクス・メモリ・コントロールハブ(GMCH)408を含むことができる。GMCH408は、メモリ412に結合されるメモリコントローラ410を含むことができる。メモリ412は、例えばプロセッサ402により、又はコンピューティングシステム400のコンポーネントと通信する任意の他のデバイスにより実行される命令のシーケンスを含め、データを格納することができる。また、一実施形態において、メモリ412は、ランダムアクセスメモリ(RAM)、動的RAM(DRAM)、同期DRAM(SDRAM)、静的RAM(SRAM)等といった、1つ以上の揮発性の記憶(又はメモリ)デバイスを含むことができる。ハードディスクのような不揮発性メモリも使用することができる。複数のプロセッサ及び/又は複数のシステムメモリを含め、更なるデバイスを相互接続404に結合することができる。
【0038】
GMCH408は、(例えば一実施形態では、グラフィクス加速度計を介して)ディスプレイデバイス416に結合されるグラフィクスインタフェース414を更に含むことができる。一実施形態では、グラフィクスインタフェース414を、アクセラレイテッド・グラフィクス・ポート(AGP)又は周辺コンポーネント相互接続(PCI)(又はPCIエクスプレス(PCIe)インタフェース)を介してディスプレイデバイス416に結合することができる。一実施形態において、(フラットパネルディスプレイのような)ディスプレイデバイス416を、例えば信号コンバータを介してグラフィクスインタフェース414に結合することができ、信号コンバータは、ビデオメモリやシステムメモリ(例えばメモリ412)といった記憶デバイス内に格納される画像のデジタル表現を、ディスプレイ416によって解釈されて表示されるディスプレイ信号に変換する。
【0039】
図4に示されるように、ハブインタフェース418は、GMCH408を入出力コントロールハブ(ICH)420に結合することができる。ICH420は、コンピューティングシステム400に結合される入出力(I/O)デバイスへのインタフェースを提供することができる。ICH420は、周辺機器ブリッジ(又はコントローラ)424を通してバス422に結合され得る。ブリッジ424は、例えばPCIeの仕様に準拠し得るPCIブリッジや、ユニバーサルシリアルバス(USB)コントローラ等である。ブリッジ424は、プロセッサ402と周辺デバイスとの間のデータ経路を提供することができる。他のタイプのトポロジを使用することができる。また、複数のバスを、例えば複数のブリッジ又はコントローラを通してICH420に結合することができる。さらに、バス422は、他のタイプ及び構成のバスシステムを備えることができる。さらに、ICH420に結合される他の周辺機器は、様々な実施形態において、IDE(integrated drive electronics)又はスモールコンピュータシステム(SCSI)ハードドライブ、USBポート、キーボード、マウス、パラレルポート、シリアルポート、フロッピー(登録商標)ディスクドライブ、デジタル出力サポート(例えばデジタルビデオインタフェース(DVI))等を含むことができる。
【0040】
バス422を、オーディオデバイス426、1つ以上のディスクドライブ428及びネットワークアダプタ/インタフェース430(一実施形態では、NICとすることができる)に結合することができる。一実施形態において、バス422に結合されるネットワークアダプタ430又は他のデバイスは、チップセット406と通信することができる。ネットワークアダプタ430は、有線又は無線インタフェースを介して様々なコンポーネントと通信することができる。
図4に示されるように、ネットワークアダプタ430をアンテナ431に結合して(例えばIEEE802.11インタフェース(IEEE802.11a/b/g/n/ac等を含む)、セルラインタフェース、3G、11G、LPE等を介して)ネットワーク403と無線により通信することができる。他のデバイスがバス422を介して通信することができる。また、一部の実施形態では、(ネットワークアダプタ430のような)様々なコンポーネントをGMCH408に結合することができる。加えて、プロセッサ402及びGMCH408を結合して単一のチップを形成することができる。ある実施形態では、メモリコントローラ410を、CPU402のうちの1つ以上に設けることができる。さらに、ある実施形態では、GMCH408及びICH420を周辺装置コントロールハブ(PCH)へ結合することができる。
【0041】
加えて、コンピューティングシステム400は、揮発性及び/又は不揮発性メモリ(又はストレージ)を含むことができる。例えば揮発性メモリは、次のうちの1つ以上を含むことができる:すなわち、読取専用メモリ(ROM)、プログラマブルROM(PROM)、消去可能PROM(EPROM)、電子的EPROM(EEPROM)、ディスクドライブ(例えば428)、フロッピー(登録商標)ディスク、コンパクトディスクROM(CD−ROM)、デジタル多用途ディスク(DVD)、フラッシュメモリ、光磁気ディスク又は電子データ(例えば命令を含む)を格納することができる他のタイプの不揮発性のマシン読取可能な媒体、のうちの1つ以上を含むことができる。
【0042】
メモリ412は、ある実施形態では、次のうちの1つ以上を含むことができる:すなわち、オペレーティングシステム(O/S)432、アプリケーション434及び/又はデバイスドライバ436のうちの1つ以上を含むことができる。メモリ412は、メモリマップI/O(MMIO)オペレーション専用の領域を含むことができる。メモリ412内に記憶されるプログラム及び/又はデータを、メモリ管理オペレーションの一部としてディスクドライブ428にスワップすることができる。アプリケーション434は、(例えばプロセッサ402上で)動作して、1つ以上のパケットを、ネットワーク405に結合される1つ以上のコンピューティングデバイスに通信することができる。ある実施形態では、パケットを、1つ以上の記号及び/又は値のシーケンスとすることができ、これらの記号及び/又は値は、少なくとも1つの送信側から少なくとも1つの受信側へ(例えばネットワーク405のようなネットワークを介して)伝送される1つ以上の電気信号によって符号化され得る。例えば各パケットは、該パケットをルーティング及び/又は処理する際に使用され得る、ソースアドレスや宛先アドレス、パケットタイプ等のような様々な情報を含む、ヘッダを有することができる。各パケットは、生のデータ(又はコンテンツ)を含むペイロードも有することができ、該パケットは、様々なコンピューティングデバイス間で(ネットワーク405のような)コンピュータネットワークを介して伝送している。
【0043】
ある実施形態では、アプリケーション434は、O/S432を使用して、システム400の様々なコンポーネントと、例えばデバイスドライバ436を通して通信することができる。したがって、デバイスドライバ436は、O/S432とネットワークアダプタ430又は例えばチップセット406を介してシステム400に結合される他のI/Oデバイスとの間の通信インタフェースを提供するよう、ネットワークアダプタ430の固有のコマンドを含むことができる。
【0044】
ある実施形態では、O/S432は、ネットワークプロトコルスタックを含むことができる。プロトコルスタックは、一般に、パケットが指定のプロトコルに従い得る場合に、ネットワーク405を介して送信されるこれらのパケットを処理するのに実行することができる、1組のプロシージャ又はプログラムを指す。例えばTCP/IP(トランスポート・コントロール・プロトコル/インターネット・プロトコル)パケットは、TCP/IPスタックを使用して処理され得る。デバイスドライバ436は、メモリ412内の、例えばプロトコルスタックを介して処理すべきバッファを指示することができる。
【0045】
ネットワーク405は、任意のタイプのコンピュータネットワークを含むことができる。ネットワークアダプタ430は、直接メモリアクセス(DMA)エンジンを更に含むことができ、このDMAエンジンは、ネットワーク405を介してデータを送信及び/又は受信するために、(例えばメモリ412内に格納された)利用可能な記述子に割り当てられた(例えばメモリ412内に格納された)バッファへ、パケットを書き込む。さらに、ネットワークアダプタ430は、ネットワークアダプタコントローラを含むことができ、該アダプタコントローラは、(1つ以上のプログラマブルプロセッサのような)ロジックを含み、アダプタに関連するオペレーションを実行することができる。実施形態においては、アダプタコントローラは、MAC(メディアアクセス制御)コンポーネントとすることができる。ネットワークアダプタ430は、任意のタイプの揮発性/不揮発性メモリ(例えば1つ以上のキャッシュ及び/又はメモリ412に関連して説明した他のメモリタイプを含む)といった、メモリを更に含むことができる。
【0046】
図5は、ある実施形態に従って、ポイントツーポイント(PtP)構成内で配置されるコンピューティングシステム500を図示している。特に、
図5は、プロセッサ、メモリ及び入出力デバイスが、幾つかのポイントツーポイントインタフェースによって相互接続されるシステムを示している。
図1〜
図4に関連して説明した動作は、システム500の1つ以上のコンポーネントによって実行され得る。
【0047】
図5に図示されるように、システム500は、数個のプロセッサを含むことができ、明確性のために、そのうちの2つのプロセッサ502と504のみを図示している。プロセッサ502及び504はそれぞれ、ローカルのメモリコントローラハブ(MCH)506及び508を含み、メモリ510及び512との通信を可能にすることができる。メモリ510及び/又は512は、
図5のメモリ512に関連して検討されるもののような、様々なデータを格納することができる。
図5に示されるように、プロセッサ502及び504(又はチップセット520やI/Oデバイス543等といった、システム500の他のコンポーネント)は、
図1〜
図4に関連して説明したもののような1つ以上のキャッシュも含むことができる。
【0048】
実施形態においては、プロセッサ502及び504は、
図5に関連して説明されるプロセッサ502のうちの1つとすることができる。プロセッサ502及び504は、ポイントツーポイント(PtP)インタフェース514を介して、それぞれPtPインタフェース回路516及び518を使用してデータを交換することができる。また、プロセッサ502及び504は各々、個々のPtPインタフェース522及び524を介して、ポイントツーポイントインタフェース回路526、528、530及び532を使用してチップセット520とデータを交換することができる。チップセット520は、高性能のグラフィクスインタフェース536を介して、例えばPtPインタフェース回路537を使用して、高性能のグラフィクス回路534とデータを交換することができる。
【0049】
少なくとも1つの実施形態では、ロジック150を、プロセッサ502、504及び/又はチップセット520のうちの1つ以上に設けることができる。しかしながら、他の実施形態では、
図5のシステム500内の他の回路、ロジックユニット又はデバイスに存在させることができる。さらに、他の実施形態では、
図5に図示される数個の回路、ロジックユニット又はデバイス全体に分散させることができる。例えばシステム500の様々なコンポーネントが、
図1のロジック150を含むことができる。しかしながら、ロジック150を、システム500全体を通して、図示される場所を含め、あるいはこれらの場所以外の場所に設けることができる。
【0050】
チップセット520は、PtPインタフェース回路541を使用してバス540と通信することができる。バス540は、このチップセット520と通信する、バスブリッジ542及びI/Oデバイス543といった1つ以上のデバイスを有することができる。バス544を介して、バスブリッジ542は、キーボード/マウス545、(モデム、ネットワークインタフェースデバイス、あるいはコンピュータネットワーク505と通信することができる他の通信デバイスといった)通信デバイス546、オーディオI/Oデバイス及び/又はデータ記憶デバイス548のような他のデバイスと通信することができる。データ記憶デバイス548は、プロセッサ502及び/又は504によって実行され得るコード549を記憶することができる。
【0051】
一部の実施形態において、本明細書で説明されるコンポーネントのうちの1つ以上を、システムオンチップ(SOC)デバイスとして具現化することができる。
図6は、ある実施形態に係るSOCパッケージのブロック図を図示している。
図6に図示されるように、SOC602は、1つ以上の中央処理ユニット(CPU)コア620、1つ以上のグラフィクスプロセッサユニット(GPU)コア630、入出力(I/O)インタフェース640及びメモリコントローラ642を含む。SOCパッケージ602の様々なコンポーネントを、他の図面に関連して本明細書で説明したような相互接続部又はバスに結合することができる。また、SOCパッケージ602は、他の図面に関連して本明細書で説明したコンポーネントのように、より多くの又は少ないコンポーネントを含む可能性がある。さらに、SOCパッケージ602の各コンポーネントは、例えば他の図面に関連して本明細書で説明したような、1つ以上の他のコンポーネントを含むことができる。一実施形態において、SOCパッケージ602(及びそのコンポーネント)は、例えば単一の半導体デバイスにパックされる、1つ以上の集積回路(IC)ダイ上に提供される。
【0052】
図6に図示されるように、SOCパッケージ602は、メモリコントローラ642を介して、(例えば他の図面に関連して本明細書で説明したメモリと同様又は同じであり得る)メモリ660に結合される。ある実施形態では、メモリ660(又はその一部)を、SOCパッケージ602上に統合することができる。
【0053】
I/Oインタフェース640を、例えば他の図面に関連して本明細書で説明したような相互接続部及び/又はバスを介して、1つ以上のI/Oデバイス670に結合することができる。I/Oデバイス670は、キーボード、マウス、タッチパッド、ディスプレイ、(カメラ又はカムコーダ/ビデオコーダといった)イメージ/ビデオキャプチャデバイス、タッチスクリーン、スピーカ又は同様のもののうちの1つ以上を含むことができる。さらに、SOCパッケージ602は、ある実施形態では、ロジック150を含む/統合することができる。あるいは、ロジック150を、SOCパッケージ602の外部に(すなわち、別個のロジックとして)設けることができる。
【0054】
以下の例は、更なる実施形態に関する。例1は、2つのビットの状態に少なくとも基づいて、第1の集積回路ダイと第2の集積回路ダイとの間で交換されるべきスヌープメッセージと完了メッセージの順序を決定するロジックを備える機器であって:第1の集積回路ダイ及び第2の集積回路ダイが、第1のインタフェース及び第2のインタフェースを通して結合されることになり、スヌープメッセージ及び完了メッセージが、第1のインタフェース及び前記第2のインタフェースの少なくとも一方を介して交換されることになる機器を含む。例2は、例1の機器を含み、第1のインタフェースが、コヒーレント・クロスダイ・インタフェース(CDI)を用いるオンダイ・ファブリック(OSF)インタフェースを備える。例3は、例2の機器を含み、コヒーレントCDIが、取付けデバイスとOSFインタフェースとの間の通信のためのコヒーレンスプロトコルを提供する。例4は、例1の機器を含み、第2のインタフェースが、非コヒーレントCDIを備える。例5は、例1の機器を含み、2つのビットが、スヌープエポックビットと、完了エポックビットとを備える。例6は、例1の機器を含み、スヌープメッセージがアドレスを備え、完了メッセージがアドレスを除外する。例7は、例1の機器を含み、ロジックと、1つ以上のプロセッサコアを有するプロセッサと、メモリとが、同じ集積デバイス上にある。例8は、例1の機器を含み、第1のインタフェースと第2のインタフェースの少なくとも一方が、ポイントツーポイントリンクを備える。
【0055】
例9は、2つのビットの状態に少なくとも基づいて、第1の集積回路ダイと第2の集積回路ダイとの間で交換されるべきスヌープメッセージと完了メッセージの順序を決定するステップを備える方法であって:第1の集積回路ダイ及び第2の集積回路ダイが、第1のインタフェース及び第2のインタフェースを通して結合され、スヌープメッセージ及び完了メッセージが、第1のインタフェース及び第2のインタフェースの少なくとも一方を介して交換されることになる方法を含む。例10は、例9の方法を含み、第1のインタフェースが、コヒーレント・クロスダイ・インタフェース(CDI)を用いるオンダイ・ファブリック(OSF)インタフェースを備える。例11は、例10の方法を含み、コヒーレントCDIが、取付けデバイスとOSFインタフェースとの間の通信のためのコヒーレンスプロトコルを提供するステップを更に備える。例12は、例9の方法を含み、第2のインタフェースが、非コヒーレント・リンク層を備える。例13は、例9の方法を含み、2つのビットが、スヌープエポックビットと、完了エポックビットとを備える。例14は、例9の方法を含み、スヌープメッセージがアドレスを備え、完了メッセージがアドレスを除外する。
【0056】
例15は、1つ以上のプロセッサコアを有するプロセッサと;プロセッサに結合されるディスプレイデバイスと;2つのビットの状態に少なくとも基づいて、第1の集積回路ダイと第2の集積回路ダイとの間で交換されるべきスヌープメッセージと完了メッセージの順序を決定するロジックと;を備えるシステムえあって、1の集積回路ダイ及び第2の集積回路ダイが、第1のインタフェース及び第2のインタフェースを通して結合されることになり、スヌープメッセージ及び完了メッセージが、第1のインタフェース及び第2のインタフェースの少なくとも一方を介して交換されることになるシステムを含む。例16は、例15のシステムを含み、第1のインタフェースが、コヒーレント・クロスダイ・インタフェース(CDI)を用いるオンダイ・ファブリック(OSF)インタフェースを備える。例17は、例16のシステムを含み、コヒーレントCDIが、取付けデバイスとOSFインタフェースとの間の通信のためのコヒーレンスプロトコルを提供する。例18は、例15のシステムを含み、第2のインタフェースが、非コヒーレント・リンク層を備える。例19は、例15のシステムを含み、2つのビットが、スヌープエポックビットと、完了エポックビットとを備える。例20は、例15のシステムを含み、スヌープメッセージがアドレスを備え、完了メッセージがアドレスを除外する。例21は、例15のシステムを含み、ロジックと、1つ以上のプロセッサコアを有するプロセッサと、メモリとが、同じ集積デバイス上にある。例22は、例15のシステムを含み、第1のインタフェースと第2のインタフェースの少なくとも一方が、ポイントツーポイントリンクを備える。
【0057】
例23は、プロセッサにおいて実行されると、2つのビットの状態に少なくとも基づいて、第1の集積回路ダイと第2の集積回路ダイとの間で交換されるべきスヌープメッセージと完了メッセージの順序を決定させる1つ以上の動作を実行するようにプロセッサを構成する1つ以上の命令を備えるコンピュータ読取可能媒体であって:第1の集積回路ダイ及び第2の集積回路ダイが、第1のインタフェース及び第2のインタフェースを通して結合され、スヌープメッセージ及び完了メッセージが、第1のインタフェース及び第2のインタフェースの少なくとも一方を介して交換されることになるコンピュータ読取可能媒体を含む。例24は、例23のコンピュータ読取可能媒体を含み、第1のインタフェースが、コヒーレント・クロスダイ・インタフェース(CDI)を用いるオンダイ・ファブリック(OSF)インタフェースを備える。例25は、例24のコンピュータ読取可能媒体を含み、プロセッサにおいて実行されると、コヒーレントCDIに、取付けデバイスとOSFインタフェースとの間の通信のためのコヒーレンスプロトコルを提供させる1つ以上の動作を実行するようにプロセッサを構成する1つ以上の命令を更に備える。
【0058】
例26は、上記の例のいずれかの方法を実行する手段を備える機器を含む。
【0059】
例27は、実行されると、上記の例のいずれかに係る方法を実行するか、機器を実現する、マシン読取可能な命令を含むマシン読取可能ストレージを備える。
【0060】
様々な実施形態において、本明細書において例えば
図1〜
図6に関連して説明される動作を、ハードウェア(例えば回路)、ソフトウェア、ファームウェア、マイクロコード又はこれらの組合せとして実装することができ、これらを、例えば本明細書で説明される処理を実行するようコンピュータをプログラムするのに使用される命令(又はソフトウェアプロシージャ)を記憶した有形(例えば非一時的な)マシン読取可能又は(例えば非一時的な)コンピュータ読取可能媒体を含む、コンピュータプログラム製品として提供することができる。また、「ロジック」という用語は、例として、ソフトウェア、ハードウェア又はソフトウェアとハードウェアの組合せを含むことができる。マシン読取可能媒体は、
図1〜
図6に関連して説明されるもののような記憶デバイスを含み得る。加えて、そのようなコンピュータ読取可能媒体を、コンピュータプログラム製品としてダウンロードしてもよく、この場合は、プログラムは、搬送波内のデータ信号又は通信リンク(例えばバス、モデム又はネットワーク接続)による他の伝搬媒体を通して、リモートコンピュータ(例えばサーバ)から要求側コンピュータ(例えばクライアント)に伝送され得る。
【0061】
本明細書において、「一実施形態」又は「ある実施形態」への言及は、その実施形態と関連して説明される特定の特徴、構造又は特性が、少なくともある実装に含まれてもよいことを意味する。本明細書の様々な箇所における「一実施形態において(一実施形態では)」というフレーズの出現は、全て同じ実施形態について言及していることも、そうでないこともある。
【0062】
また、当該説明及び特許請求の範囲では、「結合される」及び「接続される」という用語が、それらの派生語とともに使用されることがある。一部の実施形態において、「接続される」という用語を使用して、2つ以上の要素が直接物理的に又は電子的に相互に接触されることを示すことがある。「結合される」は、2つ以上の要素が直接物理的に又は電気的に接触することを意味することがある。しかしながら、「結合される」は、2つ以上の要素が相互に直接結合しないが、依然として相互に協働するか相互作用し得ることも意味する。
【0063】
したがって、実施形態は、構造的特徴及び/又は方法的動作に特有の言語で説明されているが、特許請求される主題は、説明される特定の特徴又は動作に限定されないことが理解されよう。むしろ、特定の特徴又は動作は、特許請求される主題を実装する実例の形式として開示される。