以下の説明において、本発明の完全な理解を提供するべく、具体的な複数のタイプのプロセッサおよびシステム構成、具体的なハードウェア構造、具体的なアーキテクチャ、ならびにマイクロアーキテクチャの詳細、具体的なレジスタ構成、具体的な命令のタイプ、具体的なシステムコンポーネント、具体的な寸法/高さ、具体的なプロセッサパイプラインステージ、ならびに動作等の複数の例など、多数の具体的な詳細が記載されている。しかし、本発明を実施するのにこれらの具体的な詳細を使用する必要がないことは、当業者にとって明らかであろう。複数の他の例において、複数の特定および代替的なプロセッサアーキテクチャ、説明された複数のアルゴリズム用の複数の特定のロジック回路/コード、特定のファームウェアコード、特定の相互接続動作、複数の特定のロジック構成、複数の特定の製造技術および材料、複数の特定のコンパイラ実装、コード内の複数のアルゴリズムについての特定の表現、特定のパワーダウンおよびゲーティング技術/ロジックならびにコンピュータシステムの他の特定の動作の詳細等、複数の周知のコンポーネントまたは方法は、本発明を不必要に不明瞭にするのを回避すべく詳細には説明されていない。
以下の複数の実施形態は、複数のコンピューティングプラットフォームまたはマイクロプロセッサ等の複数の特定の集積回路内のエネルギー保持およびエネルギー効率に関し説明されている場合があるが、複数の他の実施形態は、集積回路およびロジックデバイスの複数の他のタイプに適用可能である。本明細書に説明される複数の実施形態の類似の複数の技術および教示は、より良好なエネルギー効率およびエネルギー保持からも利益を享受し得る回路または半導体デバイスの複数の他のタイプに適用され得る。例えば、開示される複数の実施形態は、デスクトップコンピュータシステムまたはウルトラブック(登録商標)に限定されない。また、ハンドヘルドデバイス、タブレット、他の薄型ノートブック、システムオンチップ(SOC)デバイス、およびエンベデッドアプリケーション等、他のデバイスにおいても用いられ得る。ハンドヘルドデバイスのいくつかの例としては、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末(PDA)およびハンドヘルドPCが挙げられる。通常、エンベデッドアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(ネットPC)、セットトップボックス、ネットワークハブ、広域ネットワーク(WAN)スイッチ、または、以下で教示される機能およびオペレーションを実行し得るその他のシステムを含む。更に、本明細書において説明される複数の装置、方法、およびシステムは物理コンピューティングデバイスに限定されないのみならず、エネルギー保持および効率性のソフトウェアによる最適化にも関連し得る。以下の説明で容易に明らかになるように、本明細書に説明される複数の方法、装置、およびシステムの複数の実施形態(ハードウェア、ファームウェア、ソフトウェア、またはそれらの組み合わせを指すか否かに関わらず)は、性能の考慮事項と調和された「グリーンテクノロジ」の将来にとって不可欠である。
コンピューティングシステムが進歩するに従い、それらにおけるコンポーネントもより複雑化している。結果として、最適なコンポーネント動作のための帯域幅要件が満たされることを保証するべく、複数のコンポーネント間の結合および通信を行う相互接続アーキテクチャも複雑性が増している。更に、異なる複数の市場セグメントは、市場ニーズに適合すべく、複数の相互接続アーキテクチャの異なる態様を要求する。例えば、複数のサーバはより高性能を必要とするが、モバイルエコシステムは場合により、省電力化のために全体的な性能を犠牲にし得る。それでも、最大の省電力化で可能な限り最高の性能を提供することが、ほとんどのファブリックの唯一の目的である。以下にいくつかの相互接続が検討され、本明細書に説明される本発明の複数の態様から潜在的に利益を享受するであろう。
1つの相互接続ファブリックアーキテクチャは、周辺構成要素相互接続(PCI)エクスプレス(PCIe)アーキテクチャを含む。PCIeの一次的な目的は、クライアント(デスクトップおよびモバイル)、サーバ(規格および企業)、および埋め込み通信デバイスという複数の市場セグメントに渡るオープンアーキテクチャにおいて、異なる複数のベンダのコンポーネントおよびデバイスが相互運用することを可能にすることである。PCIエクスプレスは、多種多様な将来のコンピューティングプラットフォームおよび通信プラットフォームについて規定された高性能で汎用のI/O相互接続である。その利用モデル、ロード/ストアアーキテクチャ、ソフトウェアインターフェース等、いくつかのPCI属性が、その改訂版を通して維持されてきたが、以前のパラレルバス実装は、高度にスケーラブルな完全シリアルインターフェースにより置き換えられてきた。PCIエクスプレスのより最近のバージョンは、性能と複数の機能による複数の新レベルを提供するべく、ポイントツーポイント相互接続、スイッチベースの技術、およびパケット化されたプロトコルにおける進歩の利点を活用している。電力管理、サービスの品質(QoS)、ホットプラグ/ホットスワップサポート、データ整合性、およびエラー処理は、PCIエクスプレスによりサポートされる高度な複数の機能のうちのいくつかである。
図1を参照すると、コンポーネントのセットを相互接続するポイントツーポイントリンクから構成されるファブリックの一実施形態が図示されている。システム100は、プロセッサ105およびコントローラハブ115に結合されたシステムメモリ110を含む。プロセッサ105は、マイクロプロセッサ、ホストプロセッサ、エンベデッドプロセッサ、コプロセッサ、または他のプロセッサ等の任意の処理要素を含む。プロセッサ105はフロントサイドバス(FSB)106を介してコントローラハブ115に結合される。一実施形態において、FSB106は後述のシリアルのポイントツーポイント相互接続である。別の実施形態において、リンク106は、シリアルの差動相互接続アーキテクチャを含み、これは異なる相互接続規格に準拠する。
システムメモリ110は、ランダムアクセスメモリ(RAM)、不揮発性(NV)メモリ、またはシステム100における複数のデバイスによりアクセス可能な他のメモリ等、任意のメモリデバイスを含む。システムメモリ110は、メモリインターフェース116を介してコントローラハブ115に結合される。メモリインターフェースの例としては、ダブルデータレート(DDR)メモリインターフェース、デュアルチャネルDDRメモリインターフェース、およびダイナミックRAM(DRAM)メモリインターフェースが挙げられる。
一実施形態において、コントローラハブ115は、周辺構成要素相互接続エクスプレス(PCIeまたはPCIE)相互接続階層内のルートハブ、ルートコンプレックス、またはルートコントローラである。コントローラハブ115の例としては、チップセット、メモリコントローラハブ(MCH)、ノースブリッジ、相互接続コントローラハブ(ICH)、サウスブリッジ、およびルートコントローラ/ハブが挙げられる。多くの場合、チップセットという用語は、2つの物理的に別個のコントローラハブ、すなわち相互接続コントローラハブ(ICH)に結合されたメモリコントローラハブ(MCH)を指す。多くの場合、現行のシステムは、プロセッサ105と共に集積されたMCHを含むが、コントローラハブ115は、後述のように、同様にI/Oデバイスと通信することに留意されたい。いくつかの実施形態において、ピアツーピアルーティングは任意選択で、ルートコンプレックス115を介してサポートされる。
ここでコントローラハブ115は、シリアルリンク119を介してスイッチ/ブリッジ120に結合される。入力/出力モジュール117および121は、インターフェース/ポート117および121と呼ばれることもあり、層状プロトコルスタックを包含/実装して、コントローラハブ115とスイッチ120との間の通信を提供する。一実施形態において、複数のデバイスがスイッチ120に結合可能である。
スイッチ/ブリッジ120は、複数のパケット/メッセージをデバイス125から上流に、すなわちルートコンプレックスに向かう一階層上から、下流のコントローラハブ115、すなわちルートコントローラから離れて一階層下へと、プロセッサ105またはシステムメモリ110からデバイス125へとルーティングする。一実施形態において、スイッチ120は、複数の仮想PCI to PCIブリッジデバイスの論理アセンブリと呼ばれる。デバイス125は、任意の内部もしくは外部デバイス、またはI/Oデバイス、ネットワークインターフェースコントローラ(NIC)、アドインカード、オーディオプロセッサ、ネットワークプロセッサ、ハードドライブ、ストレージデバイス、CD/DVD ROM、モニタ、プリンタ、マウス、キーボード、ルータ、ポータブルストレージデバイス、ファイヤワイヤデバイス、ユニバーサルシリアルバス(USB)デバイス、スキャナ、および複数の他の入力/出力デバイス等、電子システムに結合されるコンポーネントを含む。多くの場合、PCIe用語では、そのようなデバイスはエンドポイントと呼ばれる。具体的に示されないが、デバイス125は、PCIe to PCI/PCI−Xブリッジを含み、レガシまたは他のバージョンの複数のPCIデバイスをサポートし得る。多くの場合、PCIeにおける複数のエンドポイントデバイスは、レガシ、PCIe、またはルートコンプレックス統合エンドポイントとして分類される。
グラフィックアクセラレータ130も、シリアルリンク132を介してコントローラハブ115に結合される。一実施形態において、グラフィックアクセラレータ130は、ICHに結合されたMCHに結合されている。次にスイッチ120、およびそれに応じてI/Oデバイス125がICHに結合される。また、I/Oモジュール131および118は、グラフィックアクセラレータ130とコントローラハブ115との間で通信する層状プロトコルスタックを実装する。上述のMCHにおける検討と同様に、グラフィックコントローラまたはグラフィックアクセラレータ130それ自体が、プロセッサ105で統合され得る。
図2を参照すると、層状プロトコルスタックの一実施形態が図示されている。層状プロトコルスタック200は、Quick Pathインターコネクト(QPI)スタック、PCieスタック、次世代高性能コンピューティングインターコネクトスタック、または他の層状スタック等、任意の形態の層状通信スタックを含む。図1〜4に関連する直下の検討はPCIeスタックに関するものであるが、同一概念が複数の他の相互接続スタックに適用され得る。一実施形態において、プロトコルスタック200は、トランザクション層205と、リンク層210と、物理層220とを含むPCIeプロトコルスタックである。図1のインターフェース117、118、121、122、126および131等のインターフェースが、通信プロトコルスタック200として表され得る。通信プロトコルスタックとしての表現は、プロトコルスタックを実装/包含するモジュールまたはインターフェースとも称され得る。
PCIエクスプレスは、パケットを用いて複数のコンポーネント間で情報を通信する。複数のパケットはトランザクション層205およびデータリンク層210で形成され、送信コンポーネントから受信コンポーネントへと情報を搬送する。複数の送信されるパケットが複数の他の層を流れるときに、それらの層でパケットを処理するのに必要な追加の情報によりパケットが拡張される。受信側において、逆処理が行われ、複数のパケットは、それらの物理層220の表現からデータリンク層210の表現へと変換され、最終的に(複数のトランザクション層パケットのため)受信デバイスのトランザクション層205により処理され得る形態へと変換される。
[トランザクション層]
一実施形態において、トランザクション層205は、デバイスの処理コアと、データリンク層210および物理層220のような相互接続アーキテクチャとの間のインターフェースを提供する。この点において、トランザクション層205の一次的な役割は、複数のパケット(すなわち、複数のトランザクション層パケットまたはTLP)のアセンブリおよび逆アセンブリである。通常、トランザクション層205は、複数のTLPのためのクレジットベースのフロー制御を管理する。PCIeは、分割されたトランザクション、すなわち、要求および応答が時間により分離されたトランザクションを実装し、リンクが他のトラフィックを搬送しつつ、ターゲットデバイスが応答のためにデータを収集することを可能にする。
更に、PCIeはクレジットベースのフロー制御を利用する。このスキームにおいて、デバイスはトランザクション層205内の複数の受信バッファの各々に対するクレジットの初期量を提供する。図1のコントローラハブ115のようなリンクの反対側における外部デバイスは、各TLPにより消費されたクレジット数をカウントする。トランザクションがクレジット限度を超えなければ、トランザクションは送信され得る。応答を受信すると、クレジットの量は、回復される。クレジットスキームの利点は、クレジット限度に掛らなければ、クレジット返却のレイテンシが性能に影響しないことである。
一実施形態において、4つのトランザクションアドレス空間は、構成アドレス空間、メモリアドレス空間、入力/出力アドレス空間、およびメッセージアドレス空間を含む。メモリ空間トランザクションは、メモリマッピング位置へ/からデータを転送する1または複数の読み取り要求および書き込み要求を含む。一実施形態において、メモリ空間トランザクションは、2つの異なるアドレスフォーマット、例えば32ビットアドレス等の短いアドレスフォーマット、または64ビットアドレス等の長いアドレスフォーマットを用いることができる。構成空間トランザクションは、PCIeデバイスの構成空間にアクセスするべく用いられる。構成空間に対する複数のトランザクションは、読み取り要求および書き込み要求を含む。複数のメッセージ空間トランザクション(または単にメッセージ)は、複数のPCIeエージェント間の帯域内通信をサポートするように規定される。
従って、一実施形態において、トランザクション層205はパケットヘッダ/ペイロード206をアセンブルする。現行の複数のパケットヘッダ/ペイロードのためのフォーマットは、PCIe仕様ウェブサイトのPCIe仕様に見出され得る。
図3を手短に参照すると、PCIeトランザクション記述子の一実施形態が図示されている。一実施形態において、トランザクション記述子300は、トランザクション情報を搬送するメカニズムである。これに関して、トランザクション記述子300は、システムにおいて複数のトランザクションの識別をサポートする。他の潜在的な使用としては、既定のトランザクションの順序変更や複数チャネルとトランザクションとの関連を追跡することが挙げられる。
トランザクション記述子300は、グローバル識別子フィールド302、属性フィールド304およびチャネル識別子フィールド306を含む。図示される例において、グローバル識別子フィールド302は、ローカルトランザクション識別子フィールド308およびソース識別子フィールド310を含むものとして図示される。一実施形態において、グローバルトランザクション識別子302は、全ての未処理の要求に対して一意である。
一実装によれば、ローカルトランザクション識別子フィールド308は、要求エージェントにより生成されるフィールドであり、このフィールドは、その要求エージェントに対する完了を必要とする全ての未処理の要求に対して一意である。更に本例において、ソース識別子310は、PCIe階層内の要求元エージェントを一意に識別する。従って、ローカルトランザクション識別子308フィールドは、ソースID310と共に階層ドメイン内のトランザクションのグローバル識別を提供する。
属性フィールド304は、トランザクションの複数の特性および関係を指定する。この点において、属性フィールド304は、複数のトランザクションの既定処理の変更を可能にする追加の情報を提供するべく、潜在的に用いられる。一実施形態において、属性フィールド304は、優先度フィールド312、予約フィールド314、順序フィールド316、およびスヌープ無しフィールド318を含む。ここで、優先度サブフィールド312は、イニシエータにより変更されて、優先度をトランザクションに割り当て得る。予約属性フィールド314は、将来のため、またはベンダ定義の利用のために、予約されたままである。優先度またはセキュリティ属性を用いる、複数の可能な利用モデルは、予約属性フィールドを用いて実装され得る。
この例において、順序属性フィールド316が用いられ、複数の既定の順序付けルールを変更し得る順序のタイプを伝達する任意選択情報を供給する。一例示的実装によれば、順序属性「0」は、複数の既定の順序付けルールが適用されることを示し、順序属性「1」は緩和された順序を示し、書き込みが同一の方向への複数の書き込みを送信することができ、複数の読み取り完了は、同一の方向に複数の書き込みを送信することができる。スヌープ属性フィールド318は、複数のトランザクションがスヌープされるか否かを判断するべく利用される。示されるように、チャネルIDフィールド306は、トランザクションが関連するチャネルを識別する。
[リンク層]
リンク層210は、データリンク層210とも称され、トランザクション層205と物理層220との間の中間ステージとして機能する。一実施形態において、データリンク層210の役割は、2つのコンポーネントリンク間で複数のトランザクション層パケット(TLP)を交換するための信頼性のあるメカニズムを提供することである。データリンク層210の一方側は、トランザクション層205によりアセンブルされた複数のTLPを受け入れ、パケットシーケンス識別子211、すなわち識別番号またはパケット番号を適用し、エラー検出コード、すなわちCRC212を計算および適用し、物理デバイスから外部デバイス全体で送信するべく、変更された複数のTLPを物理層220に送信する。
[物理層]
一実施形態において、物理層220は、パケットを外部デバイスへ物理的に送信すべく、論理サブブロック221および電気サブブロック222を含む。ここで、論理サブブロック221は、物理層221の複数の「デジタル」機能を担う。これに関して、論理サブブロックは、物理サブブロック222により送信する発信情報を準備する送信セクションと、受信済み情報を、リンク層210に送信する前に識別および準備する受信機セクションとを含む。
物理ブロック222は、送信機および受信機を含む。送信機には、論理サブブロック221により複数のシンボルが供給され、送信機はそれらをシリアル化し、外部デバイスに送信する。受信機には、外部デバイスからのシリアル化された複数のシンボルが供給され、複数の受信済み信号をビットストリームに変換する。ビットストリームは、逆シリアル化されて論理サブブロック221に供給される。一実施形態において、8b/10b送信コードが使用され、10ビットの複数のシンボルが送信/受信される。ここで、特別な複数のシンボルが用いられて、複数のフレーム223を用いてパケットをフレーム化する。更に、一例において、受信機は、着信シリアルストリームから回復されたシンボルクロックも提供する。
上述のように、トランザクション層205、リンク層210、および物理層220はPCIeプロトコルスタックの具体的な実施形態に関し検討されているが、層状プロトコルスタックはこれに限定されない。実際には、任意の層状プロトコルが包含/実装され得る。一例として、層状プロトコルとして表されるポート/インターフェースは、(1)複数のパケットをアセンブルする第1の層、すなわちトランザクション層と、複数のパケットをシーケンスにする第2の層、すなわちリンク層、および複数のパケットを送信する第3の層、すなわち物理層とを含む。具体例として、共通標準インターフェース(CSI)層状プロトコルが利用される。
次に図4を参照すると、PCIeシリアルポイントツーポイントファブリックの一実施形態が図示される。PCIeシリアルポイントツーポイントリンクの一実施形態が図示されているが、シリアルのポイントツーポイントリンクは、シリアルデータを送信するための任意の送信パスを含み、これに限定されない。示される実施形態において、基本的なPCIeリンクは2つの低電圧の差動駆動される複数の信号ペアを含む。すなわち、送信ペア406/411および受信ペア412/407である。従って、デバイス405は、データをデバイス410へ送信する送信ロジック406と、デバイス410からデータを受信する受信ロジック407とを含む。換言すると、2つの送信パス、すなわち、パス416および417と、2つの受信パス、すなわち、パス418および419とがPCIeリンクに含まれる。
送信パスは、送信ライン、銅線、光回線、無線通信チャネル、赤外線通信リンク、または他の通信パスのような、データを送信するための任意のパスを指す。例えば、デバイス405およびデバイス410など、2つのデバイス間の接続はリンク415等、リンクと呼ばれる。リンクは1レーンをサポートしてよく、各レーンは、差動信号ペアのセット(送信のための1ペア、受信のための1ペア)を表す。帯域幅を調整するべく、リンクは、xNにより示される複数のレーンをアグリゲートし得る。Nは、1、2、4、8、12、16、32、64またはこれより広い、サポートされた任意のリンク幅である。
差動ペアとは、複数の差動信号を送信する、ライン416および417などの2つの送信パスを指す。例として、ライン416が低電圧レベルから高電圧レベル、すなわち立ち上がりエッジへとトグルすると、ライン417は、高論理レベルから低論理レベル、すなわち立り下がりエッジへと駆動する。複数の差動信号は潜在的に、より良好な信号整合性、すなわちクロスカップリング、電圧オーバシュート/アンダーシュート、リンギング等のより良好な電気的特性を示す。これにより、より良好なタイミングウィンドウを可能にし、それにより、より高速な送信周波数を可能にする。
PCIeを含む、既存の相互接続および通信アーキテクチャにおける複数の物理層は、システム内の共有メモリおよび複数のI/Oサービスを提供すべく活用され得る。従来、キャッシュ可能メモリは、従来のロード/ストア(LD/ST)メモリセマンティクスを用いて、複数の独立したシステム間で共有できない。独立したシステム、または「ノード」は、それが単一の論理エンティティとして機能し、単一のオペレーティングシステム(および/または単一のBIOSまたは仮想マシンモニタ(VMM))により制御され、および/または独立したフォールトドメインを有するという意味において、独立したものであり得る。単一のノードは、1または複数のプロセッサデバイスを含み、単一のボードまたは複数のボード上で実装され、同一ノード上の複数のデバイスにより、LD/STセマンティクスを使用してアクセスされ得るキャッシュ可能メモリを含む、ローカルメモリを含み得る。ノード内で、共有メモリは、ノード内のいくつかの異なるプロセッサ(例えば、複数の中央処理装置(CPU))によりアクセスされ得るランダムアクセスメモリ(RAM)等のメモリの1または複数のブロックを含み得る。また、共有メモリは、複数のプロセッサのローカルメモリまたはノード内の複数の他のデバイスを含み得る。共有メモリを有するノード内の複数のデバイスは、共有メモリ内のデータの1つのビューを共有できる。共有メモリを伴うI/O通信は、非常に低レイテンシであり得、複数のプロセッサによるメモリへの迅速なアクセスを可能にする。
従来、複数の異なるノード間のメモリ共有はロード/ストアパラダイムによるメモリ共有を可能にしていなかった。例えば、いくつかのシステムにおいて、複数の異なるノード間のメモリ共有は、分散メモリアーキテクチャを介して容易にされている。従来の解決法において、計算タスクはローカルデータ上で動作し、別のノードのデータが所望である場合、(例えば、別のCPUノードにより実行される)計算タスクは、例えばイーサネット(登録商標)、インフィニバンド、または別の層状プロトコル等の通信プロトコルスタックを利用する通信チャネルを介して、他のノードと通信する。従来の複数のマルチノードシステムにおいて、複数の異なるノードにおける複数のプロセッサは、データがどこに存在するかを認識する必要がない。プロトコルスタックを経由するなどして、複数の従来のアプローチを用いてデータを共有することは、ロード/ストアパラダイムを用いるノード内のメモリ共有よりも、はるかに高いレイテンシを有し得る。共有メモリ内のデータに直接にアドレス指定および動作するのではなく、あるノードはイーサネット(登録商標)(またはインフィニバンド)のような既存のプロトコルハンドシェイクを用いて別のノードからデータを要求し得、ソースノードは当該データを提供でき、その結果、複数の他の例の中でも特に、当該データは要求ノードにより格納および演算され得る。
いくつかの実装において、メモリが複数の独立したノード間で排他的アクセスまたは共有アクセスのために、ロード/ストア(LD/ST)メモリセマンティクスを用いて共有されることを可能にする共有メモリアーキテクチャが、提供され得る。一例において、I/Oセマンティクス(PCIe等の複数のプロトコル用)と共にメモリセマンティクス(および適用可能な場合、ディレクトリ情報)がピンの共通セットまたはピンの別個のセットのいずれかにエクスポートされ得る。そのようなシステムにおいて、向上した共有メモリアーキテクチャは、システム内の複数のノードの各々がその独自の独立したフォールトドメイン(およびローカルメモリ)を維持することを可能にし得るが、複数のノードによるアクセスのための共有メモリプール、およびLD/STセマンティクスによるメモリを用いる複数のノード間で低レイテンシのメッセージを送信することを可能にする。いくつかの実装において、そのような共有メモリプールは、動的(または静的)に複数の異なるノード間で割り当てられ得る。従って、システムの様々なノードを複数のノードの動的に変化するグループに構成して、様々なタスクに対し、協働して柔軟に動作させて、例えば、要求が生じれば共有メモリインフラストラクチャを用いることができる。
図5Aを参照すると、複数の独立したノード510a〜510nの各々により、ロード/ストアの複数の技術を用いてアクセスされ得る共有メモリ505を含む例示的なシステムを図示する、簡易ブロックダイアグラム500aが示される。例えば、システム上の様々なノード510a〜510nの複数のロード/ストアアクセス要求を受け入れ得る、共有メモリコントローラ515が提供され得る。共有メモリ505はシンクロナスダイナミックランダムアクセスメモリ(SDRAM)、複数のデュアルインラインメモリモジュール(DIMM)、および他の不揮発性メモリ(または揮発性メモリ)を利用して実装され得る。
各ノードそれ自体は、1または複数のCPUソケットを有し、システム内の複数の他のノードによるLD/STアクセスから遮断されたままのローカルメモリを含み得る。ノードは、複数の他の例の中でも特に、PCIe、QPI、イーサネット(登録商標)を含む1または複数のプロトコルを用いて、システム上の複数の他のデバイス(例えば、共有メモリコントローラ515、ネットワーキングコントローラ520、複数の他のノード等)と通信し得る。いくつかの実装において、共有メモリリンク(SML)プロトコルが提供され得、それを介して低レイテンシLD/STメモリセマンティクスがサポートされ得る。例えば、SMLがシステムの様々なノード510a〜510nによる共有メモリ505における複数の読み取りおよび書き込みの通信において(共有メモリコントローラ515を介して)、用いられ得る。
一例において、SMLはScalable Memory Interconnect(SMI)第3世代(SMI3)のようなメモリアクセスプロトコルに基づき得る。あるいは、例えば複数の他の例の中でも特に、Fully Buffered DIMM(FB‐DIMM)、DDR Transactional(DDR‐T)等の複数のトランザクションメモリアクセスプロトコルなど、複数の他のメモリアクセスプロトコルが用いられてもよい。複数の他の例において、SMLは、追加の複数のディレクトリ拡張を有するネイティブのPCIeメモリ読み取り/書き込みセマンティクスに基づき得る。SMLのメモリプロトコルベースの実装は、複数のラインメモリアクセスをキャッシュするよう調整されているので、帯域幅効率における利点を提供できる。PCIe等、複数の高性能デバイス間通信プロトコルが存在するが、そのような複数のプロトコルにおける複数の上方層(例えば、トランザクション層およびリンク層)は、共有メモリ505を伴う複数のトランザクションを含む複数のLD/STメモリトランザクションにおいて用いるために、完全なプロトコルの適用を低下させるレイテンシを導入し得る。メモリプロトコルはPCIeのような別のプロトコルスタックのほとんどを迂回し得るので、SMI3等のメモリプロトコルは、複数のより低いレイテンシのアクセスを提供する潜在的な追加の利点を可能にし得る。従って、SMLの複数の実装は、SMI3、またはPCIe上のSMI3等、別のプロトコルの論理および物理PHY上で実行されている別のメモリプロトコルを利用し得る。
注記したように、いくつかの実装において、システム内のノード510a〜510nの複数のロード/ストア要求を処理するためのロジックを含む、共有メモリコントローラ(SMC)515が提供され得る。複数のロード/ストア要求は、SMLを利用し、ノード510a〜510nをSMC515に接続して、複数のリンクを介してSMC515により受信され得る。いくつかの実装において、SMC515は、複数の共有メモリリソースのためにノード510a〜510nの複数のアクセス要求を提供するためのロジックを含む、特定用途向け集積回路(ASIC)等のデバイスとして実装され得る。複数の他の例において、SMC515(ならびに共有メモリ505)は、ノード510a〜510nのうち1または複数(あるいは更に全て)とは別個のデバイス、チップ、またはボード上に存在し得る。更に、SMC515は、共有メモリ505を伴う様々なノードの複数のトランザクションを調整するロジックを含み得る。更に、SMCは、共有メモリ505内に含まれた各キャッシュライン等、様々なデータリソースへのアクセスを追跡するディレクトリを維持し得る。例えば、複数の他の潜在的な例の中でも特に、データリソースは、共有アクセス状態(例えば、ノード内の処理デバイスおよび/またはI/Oデバイスにより同時にアクセスされ得る(例えば、ロードされまたは読み取られた))、排他的アクセス状態(例えば、一時的でないとしても、ノード内の単一の処理および/またはI/Oデバイスにより排他的に予約済み(例えば、格納または書き込み動作のため))、未キャッシュ状態であり得る。更に、各ノードは、共有メモリ505の1または複数の部分への直接のアクセスを有し得るが、複数の異なるアドレス指定スキームおよび値は、様々なノード(例えば、510a〜510n)により使用され得、第1のアドレス値による第1のノードおよび第2のアドレス値により同一のデータを参照する第2のノードにより、(例えば、命令において)参照される同一の共有メモリデータをもたらす。SMC515は、複数の共有メモリリソースに複数のノードのアドレスをマッピングする複数のデータ構造を含むロジックを含み、SMC515が様々なノードの様々なアクセス要求を解釈することを可能にし得る。
更にいくつかの場合に、共有メモリのいくつかの部分(例えば、複数の特定のパーティション、メモリブロック、レコード、ファイル等)は、複数の特定の許可、ルール、割り当てに従い得、結果的にノード510a〜510nの一部のみが、対応するデータにアクセスすることを(例えば、SMC515により)許可する。実際、各共有メモリリソースは、システムのノード510a〜510nの各(およびいくつかの場合には、異なる)サブセットに割り当てられ得る。新たな、または変更済みの共有メモリ505の所与の部分に適用可能な複数のルール、許可、ノード割り当ておよびオーナシップを収容すべく、これらの割り当ては動的であり得、SMC515は、そのような複数のルールおよび許可(例えば、オンデマンド、動的等)を変更し得る。
更に、例示的なSMC515は、1または複数の共有メモリリソースにアクセスするシステム内の複数のノード(例えば、510a〜510n)を伴う様々なトランザクションを追跡し得る。例えば、SMC515は、他のトランザクション情報の中でも特に、トランザクションに含まれるノードの識別、トランザクションの進行(例えば、それが完了されたか否か)を含む、各共有メモリ505のトランザクションに関する情報を追跡し得る。これは、複数の従来の分散メモリアーキテクチャによるトランザクション指向の態様のうちのいくつかが、本明細書に説明される改善されたマルチノード共有メモリアーキテクチャに適用されることを可能にする。更に、トランザクション追跡(例えば、SMCによる)は、各ノードの複数の別個の独立したフォールトドメインを維持または強制するのに役立つように用いられ得る。例えば、SMCは、メモリ内に含む、その複数の内部データ構造内の進行中の各トランザクションについて、対応するノードIDを維持し、またその情報を用いて、複数のアクセス権を強制し、各ノードの個々のフォールトドメインを維持し得る。従って、複数のノードのうちの1つがダウンする場合(例えば、重大なエラー、トリガされた回復シーケンス、または他のフォールトもしくはイベントに起因するもの)、そのノードおよび共有メモリ505を伴うその複数のトランザクションのみがインタラプトされ(例えば、SMCによりダンプされる)、すなわち、共有メモリ505に伴う複数の残余のノードにおける複数のトランザクションは、他方のノード内のフォールトから独立して継続する。
システムは、複数のノードを含み得る。更に、いくつかの例示的なシステムは、複数のSMCを含み得る。いくつかの場合に、ノードは、それが直接取り付けられていない遠隔SMCから離れた共有メモリにアクセスできる場合がある(すなわち、ノードのローカルSMCは、遠隔SMCに1または複数のSMLリンクホップを介して接続する)。遠隔SMCは、同一のボード内にあってもよく、または異なるボード内にあってもよい。いくつかの場合に、複数のノードのうちのいくつかは、オフシステム(例えば、オフボードまたはオフチップ)であり得るが、それでも共有メモリ505にアクセスし得る。例えば、1または複数のオフシステムノードは、複数の他の例の中でも得に、SML準拠のリンクを用いてSMCに直接接続し得る。更に、それら独自のSMCおよび共有メモリを含む複数の他のシステムはまた、メモリ505の共有を、例えば、SMLリンクを介してSMCに接続される他のSMCとインターフェース接続する、別のボード上に含まれる複数のノードまで拡張するべく、SMC510に接続し得る。なおも更に、他のオフボードまたはオフチップノードにアクセスを更に拡張するべく、複数のネットワーク接続がトンネリングされ得る。例えば、SMLは、(例えば、ネットワークコントローラ520を介して提供される)イーサネット(登録商標)接続を介してトンネリングし得、図5Aの例示的なシステムを、1または複数の他のノードも含み、複数の他の例の中でも特に、これらのノードがSMC515へのアクセス、およびそれにより共有メモリへ505のアクセスを得ることを許可する別のシステムに、通信可能に結合する。
別の例として、図5Bの簡易ブロックダイアグラム500bに示されるように、LD/STメモリセマンティクスによる複数の独立したノードにより共有アクセスを可能にする向上した共有メモリアーキテクチャは、様々な異なるマルチノードシステム設計の提供を柔軟に可能にし得る。例示的なシステムで提供される1または複数の共有メモリブロックの複数の部分を共有するべく、複数のノードの様々な組み合わせが割り当てられ得る。例えば、図5Bの例に示される別の例示的なシステムは、例えば複数の別個のダイ、ボード、チップ等として実装される複数のデバイス550a〜550dを含み得、各デバイスは、1または複数の独立したCPUノード(例えば、510a〜510h)を含む。各ノードは、その独自のローカルメモリを含み得る。更に、複数のデバイス550a〜550dのうち1または複数は、システムのノード510a〜510hのうち2またはそれよりも多いものによりアクセスされ得る共有メモリを含み得る。
図5Bに図示されるシステムは、本明細書に示され、説明される向上した共有メモリアーキテクチャを介して実現され得る変動性のうちのいくつかを図示するべく提供される例である。例えば、デバイスA550aおよびデバイスC550cの各々は、それぞれ共有メモリ要素(例えば505a、505b)を含み得る。従って、いくつかの実装において、別個のデバイス上の各共有メモリ要素は更に、それぞれの共有メモリコントローラ(SMC)515a、515bを含んでもよい。ノード510a〜510hの様々な組み合わせは、各SMC(例えば、515a、515b)に通信可能に結合され得、複数のノードが対応する共有メモリ(例えば505a、505b)にアクセスすることを可能にする。一例として、デバイスA550aのSMC515aは、SMLをサポートするダイレクトデータリンクを用いてデバイスA上のノード510a、510bに接続し得る。更に、別のデバイス(例えば、デバイスC550c)上の別のノード510cはまた、ノード510c(および/またはそのデバイス550c)からSMC515aへと、直接ハードワイヤードの接続(SMLをサポートする)により共有メモリ505aへのアクセスを有し得る。また、間接ネットワークベース、または複数の他のそのような接続は、遠隔またはオフボードデバイス(例えば、デバイスD550d)の複数のノード(例えば510f〜510h)が、共有メモリ505aへのアクセスも有すべく、SMC515aとインターフェース接続する従来のプロトコルスタックを利用することを可能にするべく用いられ得る。例えば、SMLトンネル555は、イーサネット(登録商標)、インフィニバンド、またはデバイスAとデバイスDとを結合する他の接続経由で確立され得る。トンネリングを確立および維持することにより、いくらかの更なるオーバヘッドおよびレイテンシを導入し得るが、他のソフトウェアであまり管理されない物理的接続において実行されるSMLと比較して、SMLトンネル555は、確立されると、SMLリンクを介してSMCと通信するその他のノードができるのと同様に、他のSMLチャネルとして動作し、ノード510f〜510hがSMLを介してSMC515aにインターフェース接続して共有メモリ505aにアクセスすることを可能にし得る。例えば、複数のSMLチャネル内の複数のパケットの信頼性および順序付けは、システム内の複数のネットワーキングコンポーネントにより実行され得るか、あるいは複数のSMC間のエンドツーエンドで実行され得る。
なおも更なる複数の他の例において、共有メモリ(例えば505a)の特定の部分をホストするデバイスとは異なるデバイス上の複数のノード(例えば510d、510e)は、それ自体が(例えば、SMLリンクを用いて)対応するSMC(例えば515a)に結合される別のSMC(例えば515b)に直接接続することにより、対応するSMC(例えばSMC515a)に間接的に接続し得る。2またはそれよりも多いSMC(例えば515a、515b)をリンクすると、システム上のノード510a〜510hに利用可能な共有メモリ量を効果的に拡大し得る。例えば、いくつかの実装において、図5Bの例におけるSMC515aと515bとの間のリンクにより、SMC515aを介する共有メモリ505aにアクセス可能な複数のノード(例えば、510a〜510c、510f〜510h)のうち任意のものは、SMC515aとSMC515bとの間の接続により共有可能なメモリ505bにも潜在的にアクセスし得る。同様に、いくつかの実装において、複数の他の潜在的な例の中でも特に、SMC515bに直接アクセスする複数のノードの各々は、SMC515aと515bとの間の接続により、共有可能なメモリ505aにもアクセスし得る。
上述したように、向上した共有メモリアーキテクチャは、SMI3のようなメモリアクセスプロトコルに基づき、また共有メモリを伴う複数のロード/ストア要求を容易にすべく提供された低レイテンシリンクプロトコル(すなわち、SML)を含み得る。従来のSMI3および複数の他のメモリアクセスプロトコルは、単一のノード内のメモリ共有において用いるのに構成され得るが、SMLは複数のノード間のメモリ共有を可能にするべく、メモリアクセスセマンティクスを複数のノードに拡張し得る。更に、SMLは、潜在的に任意の物理通信リンク上で利用され得る。SMLは、複数の別個のデバイス(および複数のノード)を相互接続するよう適合された物理層(および対応する物理層ロジック)にオーバレイされたLD/STメモリセマンティクスをサポートするメモリアクセスプロトコルを利用し得る。更に、SMLの物理層ロジックは複数の他の機能の中でも特に、パケット低下およびエラー再試行機能を提供しないようにできる。
いくつかの実装において、SMLは、PCIe PHY上にSMI3をオーバレイすることにより、実装され得る。SMLリンク層は、フロー制御および複数の他の機能において先んじており、(例えば、従来のPCIeリンク層に代えて)複数の従来のCPUメモリアクセスアーキテクチャにおける特性であるような、より低レイテンシメモリアクセスを容易にするべく提供され得る。一例において、SMLリンク層ロジックは、複数の共有メモリトランザクションと複数の他のトランザクションとの間で多重化し得る。例えば、SMLリンク層ロジックは、SMI3とPCIeトランザクションとの間で多重化し得る。例えば、SMI3(または別のメモリプロトコル)は、リンクがSMI3とPCIeトランザクションとの間で動的に切り替えし得るように、PCIe(または別の相互接続プロトコル)の上部でオーバレイし得る。これにより、いくつかの例において、従来のPCIeトラフィックがSMLトラフィックと同一のリンク上に効果的に共存することを可能にする。
図6を参照すると、SMLの第1の実装を図示する表現600が示されている。例えば、SMLは、PCIe PHY上にSMI3をオーバレイすることにより実装され得る。物理層は、リンクトレーニングおよびPCIeデータブロックを含む全ての物理層アクティビティに標準的なPCIe 128b/130bのエンコードを用い得る。SMLは、複数のPCIeパケットとSMI3フリットとの間で多重化されるべきリンクの複数のレーン(例えば、レーン0〜レーン7)にトラフィックを提供し得る。例えば図6に図示される実装において、PCIe 128b/130bのエンコードの同期ヘッダは、SMI3フリットがPCIeパケットではなく、リンクの複数のレーンに送信されるべきであることを示すべく、変更されて用いられ得る。従来のPCIe 128b/130bのエンコードにおいて、有効な複数の同期ヘッダ(例えば、610)は、リンクの全てのレーンに10bパターン(ブロックのペイロードのタイプがPCIeデータブロックであるべきことを示す)を送信すること、またはリンクの全てのレーンに01bパターン(ブロックのペイロードのタイプがPCIeのオーダードセットブロックであるべきことを示す)を送信することのいずれかを含み得る。SMLの例において、代替的な同期ヘッダは、SMI3フリットトラフィックをPCIeデータブロックおよびオーダードセットと区別するものと規定され得る。図6に図示される一例において、PCIe128b/130b同期ヘッダ(例えば、605a、605b)は、複数のSMI3フリットが送信されることを識別するべく、奇数/偶数レーンで交互の01b、10bパターンを用いてエンコードされ得る。別の代替的な実装において、SMI3トラフィックに対する128b/130bの同期ヘッダエンコードは、他の例示的なエンコードのなかでも特に、奇数/偶数レーンに対する交互の10b、01bパターンにより規定され得る。いくつかの場合に、複数のSMI3フリットは、1バイト当たりのベースで次のSMI3同期ヘッダに即座に送信され得、PCIeプロトコルとSMI3プロトコルとの間の遷移は、ブロック境界において生じる。
図6の例において図示されるもの等、いくつかの実装において、複数のプロトコル間の遷移は、ブロック境界がSMI3フリットまたはPCIeパケットの境界に対応するか否かに拘わらず、当該ブロック境界において生じるものと規定され得る。例えば、ブロックは、予め規定された量のデータ(例えば、16シンボル、128バイト等)を含むものと規定され得る。複数のそのような実装において、ブロック境界がSMI3フリットまたはPCIeパケットの境界に対応しない場合、SMI3フリット全体の送信がインタラプトされ得る。インタラプトされたSMI3フリットは、SMBについてエンコードされた別の同期ヘッダを送信することにより示される次のSMI3ブロックにおいて再開され得る。
図7Aを参照すると、SMLの別の例示的な実装を図示する表現700が示されている。図7Aの例において、メモリアクセスと相互接続プロトコルトラフィックとの間の遷移をシグナリングする専用同期ヘッダエンコードを用いるのではなく、複数の物理層フレーミングトークンが用いられ得る。フレーミングトークン(または「トークン」)は、当該トークンに関連するデータストリームに含まれるシンボル数を指定または示唆する物理層データカプセル化であり得る。結果的に、フレーミングトークンは、ストリームが開始されていることを識別し、ストリームがどこで終了するかを示唆し、従って次のフレーミングトークンの位置を識別するようにも用いられ得る。データストリームのフレーミングトークンは、データストリームにおける第1のデータブロックの第1のレーン(例えば、レーン0)の第1のシンボル(シンボル0)に位置付けられ得る。PCIの例において、TLPトラフィックの開始(STP)トークン、データストリームの終了(EDS)トークン、エンドバッド(EDB)トークン、DLLPの開始(SDP)トークン、および論理アイドル(IDL)トークンを含む、5つのフレーミングトークンが規定され得る。
図7Aの例において、SMLはSMI3またはPCIe上の別のデータアクセスプロトコルをオーバレイすることにより実装され得、(TLPトラフィックに代えて)SMI3がリンクの複数のレーン上で開始することを識別する新規STPトークンを規定するべく、標準的PCIe STPトークンが変更され得る。いくつかの例において、標準的PCIe STPトークンにおける複数の予約ビットの値は、SMLにおけるSMI3 STPトークンを規定するべく変更され得る。更に、図7Bに示されるように、STPトークン705は、後に続くSMI3ペイロードの長さを(フリットの数の点で)識別するフィールド710を含む、いくつかのフィールドを含み得る。いくつかの実装において、1または複数の標準的ペイロード長がTLPデータに対して規定され得る。いくつかの実装において、SMI3データは、固定数のフリットを含むよう規定され得、あるいは複数の他の場合において、可変数のフリットを有してよく、その場合に、SMI3フリットの数に対する長さフィールドは、無視可能なフィールドになる。更に、SMI3 STPに対する長さフィールドは、複数の規定されたTLPのペイロード長のうちの1つ以外の長さとして規定され得る。従って、SMI3 STPは、一例においてSTP長フィールド内に存在する非TLP長の値に基づいて識別され得る。例えば一実装において、11ビットのSTP長フィールドの上位3ビットは、(例えば、仕様に準拠しないPCIe TLPが長さフィールドの上位3ビットが1をもたらす長さを有するのに十分長くなり得るとの仮定に基づいて)SMI3パケットを示すように111bにセットされ得る。複数の他の実装は、STPトークンの複数の他のフィールドを変更またはエンコードして、従来のPCIe TLPデータペイロードを識別するPCIe STPトークンと、SMI3データがTLPデータにおいてカプセル化されていることを識別するSMI3 STPトークンを区別し得る。
図7Aの例に戻ると、同期ヘッダデータは、従来のPCIe 128b/130bのエンコードに対して指定されたエンコードに従い得る。例えば、715a〜cにおいて、複数のデータブロックが来ることを示す、値10bを有する複数の同期ヘッダが受信される。PCIe STP(例えば720)が受信される場合、PCIe TLPペイロードが予期され、データストリームがそれに応じて処理される。PCIe TLPペイロードは、PCIe STP720内で識別されたペイロード長と一致しており、割り当てられた完全なペイロード長を利用し得る。別のSTPトークンは、TLPペイロードの終了後、データブロック内で基本的にいつでも受信され得る。例えば、725において、SMI3 STPが受信され、PCIe TLPデータからSMI3フリットデータへの遷移をシグナリングし得る。例えば、PCIeパケットデータの終了が識別されるとすぐに、SMI3 STPが送信され得る。
図7Aの例を続けると、PCIe TLPデータにおけるように、SMI3 STP725は、後に続くSMI3フリットペイロードの長さを規定し得る。例えば、SMI3データのペイロード長は、後に続くDWの観点から、SMI3フリットの数に対応し得る。ペイロード長に対応するウィンドウ(例えば、レーン3のシンボル15で終了する)は、それによりSMI3データのみがウィンドウ中に送信される当該複数のレーン上で規定され得る。ウィンドウが終了する場合、TLPデータまたはオーダードセットデータ等の他のデータの送信を再開するべく、別のPCIe STPのような他のデータが送信され得る。例えば、図7Aの例に示されるように、SMI3 STPトークン725により規定されるSMI3データウィンドウの終了後、EDSトークンが送信される。EDSトークンは、データストリームの終了をシグナリングし、図7Aの例の場合のように、オーダードセットブロックが次に続くことを示唆し得る。オーダードセットブロックが送信されることを示すべく01bにエンコードされた同期ヘッダ740が送信される。この場合、PCIe SKPのオーダードセットが送信される。そのような複数のオーダードセットは、周期的に、または複数のセットされた間隔もしくはウィンドウに従って送信され得、その結果、複数の他の例の中でも特に、ビット整列の初期化、シンボル整列の初期化、複数のPHYパラメータの交換、2つの通信ポートに対する複数の異なるビットレートの補正を含む、様々なPHYレベルタスクおよび調整が実行され得る。いくつかの場合に、規定されたウィンドウまたは対応するSMI3 STPトークンによりSMI3フリットデータに対して指定されたデータブロックをインタラプトするべく、許可済みのオーダードセットが送信され得る。
図7Aの例では明示的に図示されていないが、STPトークンはまた、リンク上のSMI3フリットデータからPCIe TLPデータへと遷移するべく用いられ得る。例えば、規定されたSMI3ウィンドウの終了後、(例えば、トークン720に類似する)PCIe STPトークンが、次のウィンドウが指定量のPCIe TLPデータを送信するものであることを示すべく送信され得る。
いくつかの実施形態において、複数のメモリアクセスフリット(例えば、複数のSMI3フリット)はサイズが変わり得、メモリアクセスペイロードに対する対応するSTPトークン(例えば、SMI3 STPトークン)内にどのくらいのデータが予約されているかを演繹的に予測することが困難になる。一例として、図7Aに示されるように、SMI3 STP725は、244バイトのSMI3データが、SMI3 STP725の後に予期されことを示す長さフィールドを有し得る。しかし、この例において、10フリット(例えば、SMI3フリット0〜9)のみが、当該ウィンドウ中に送信される準備ができており、これら10のSMI3フリットのみが244バイトのうち240バイトを利用する。従って、4バイトの空の帯域幅が残され、これらは複数のIDLトークンで満たされる。これは、PCIe TLPデータがキューに入れられ、SMI3ウィンドウが閉じるのを待機する場合、特に次善策となり得る。複数の他の場合において、複数のSMI3フリットの送信に提供されるウィンドウは、レーンに対して準備のできたSMI3データの量を送信するには不十分である場合がある。リンク上に共存するSMI3およびPCIe TLPデータをどのように調停するかを決定すべく、複数の調停技術が使用され得る。更に、いくつかの実装において、リンクのより効率的な使用に役立つように、複数のSMI3ウィンドウの長さが動的に変更され得る。例えば、調停または他のロジックは、規定されたウィンドウ長がレーンに対し予期されるSMI3(および競合するPCIe TLPトラフィック)の量に対し、より良好に最適化され得るか否かを判断すべく、複数の規定されたSMI3ウィンドウがどれだけ利用されているかをモニタリングし得る。従って、そのような実装において、複数のSMI3 STPトークンにおける複数の長さフィールド値は、複数の他の例の中でも特に、SMI3フリットデータが割り当てられるべきリンク帯域幅の量に応じて(例えば、TLP、DLLP、およびオーダードセットデータを含む他のPCIeデータに対して)、(例えば、異なる複数の値の間で)動的に調整され得る。
図8を参照すると、SMLの別の例示的な実装の表現800が図示されている。この代替的な実施形態において、SMLは、変更済みのPCIeフレーミングトークンによりSMI3プロトコルおよびPCIeプロトコルをインターリーブすることを提供し得る。上述のように、EDSトークンは、データストリームの終了を示し、次のブロックがオーダードセットブロックになることを示すべくPCIeにおいて用いられ得る。図8の例において、SMLは、TLPデータストリームの終了およびSMI3フリット送信の遷移を示す、SMI3 EDSトークン(例えば、805)を規定することができる。SMI3 EDS(例えば、805)は、従来のEDSトークンの複数の予約ビットの一部をエンコードすることにより規定され得、PCIeの複数のオーダードセットまたはPCIe EDSに続く他のデータではなく、SMI3データが続くことを示す。従来のEDSトークンと異なり、SMI3 EDSは基本的に、PCIeデータブロック内のいずれの箇所でも送信され得る。これにより、SMI3データを送信して、対応する低レイテンシの複数の共有メモリトランザクションを受け入れる際の更なる柔軟性を可能にし得る。例えば、PCIeからSMI3への遷移は、オーバヘッドの単一のダブルワード(DW)により実現され得る。更に、従来のEDSトークンにおけるように、例示的なSMI3 EDSは、トークンに続くSMI3データに関連した長さを指定しない場合がある。SMI3 EDSの後に、PCIe TLPデータは終了し得、複数のSMI3フリットはリンク上を進む。SMI3ロジックがPCIeロジックに制御を戻すまで、SMI3トラフィックは、進み得る。いくつかの実装において、SMI3 EDSの送信により、制御がPCIeロジックから、例えばリンクに接続された複数のデバイス上に提供されたSMI3ロジックへと渡される。
一例として、SMI3(または別のプロトコル)は、リンク層制御を実行するのに用いる独自のリンク制御シグナリングを規定することができる。例えば一実装において、SMLは、SMI3プロトコルからPCIeプロトコルへの逆の遷移を示す、SMI3リンク層制御(LLCTRL)フリット(例えば、810)の専用バージョンを規定することができる。SMI3 EDSにおけるように、規定されたLLCTRLフリット(例えば、810)により、制御はSMI3ロジックからPCIeロジックへと再び送信され得る。いくつかの場合に、図8の例に示されるように、規定されたLLCTRLフリット(例えば、810)は、PCIeへの遷移を完了する前に、予め規定された数のLLCTRLアイドル(LLCTRL−IDLE)フリット(例えば、815)で満たされ得る。例えば、SMI3 LLCTRLフリット810を満たすべく送信されるべきLLCTRL−IDLEフリット815の数は、遷移をシグナリングする規定済みのSMI3 LLCTRLフリット810をデコードするレイテンシに依存し得る。PCIeへの逆の遷移を完了した後、STPパケットが送信され得、TLPパケットデータは、PCIeの制御下でリンクにおいて再開し得る。
本明細書において説明される複数の実装は、本明細書において開示される特定の原理および機能を図示する例として提供されていることを理解されたい。(複数の例において具体的に検討されたもの以外の)代替的な複数の構成、プロトコル、およびアーキテクチャは、そのような原理および機能を利用および適用し得ることを理解されたい。1つの代替形態の例として、(例えば、SMI3プロトコルに代えて)ディレクトリ情報で強化されたPCIeメモリ読み取り/書き込みが用いられ得る。ディレクトリ情報は、PCIeパケットの複数の予約ビットにより実装され得る。別の例において、複数のCPUノードは、他の潜在的な例および代替形態のなかでも特に、(例えば、共有メモリコントローラに対する代替形態として)キャッシュコントローラを利用して、例えば、遠隔アドレス範囲チェックに基づいて、PCIeリンクに複数のメモリ読み取り/書き込みトランザクションを送信し得る。
図9A−9Dを参照すると、MCPLを用いて通信するための複数の例示的な技術を図示するフローチャート900a〜dが示されている。例えば図9Aにおいて、ロード/ストアメモリアクセスメッセージが905において第1のノードから受信され得、このメッセージは、共有メモリの特定のデータを要求する。特定のデータへのアクセスは、910において第1のノードに提供され得る。第2のロード/ストアメモリアクセスメッセージが、915において第2の独立したノードから受信され得る。第2のメッセージは、共有メモリの同一の特定のデータに対するアクセスを要求することができ、特定のデータに対するアクセスは、920において第2のノードに提供され得る。このように、共有メモリ内のデータは、複数の異なる独立したノードにより共有およびアクセスされ得る。
図9Bの例において、第1の同期ヘッダ(PCIe同期ヘッダ等)は、925において第1のエンコードを用いて受信され得る。エンコードは、相互接続プロトコルからメモリアクセスプロトコルへの遷移を示し得、遷移は930において第1の同期ヘッダから識別され得る。メモリアクセスプロトコルのデータは、第1の同期ヘッダの次に受信され得、データは、(例えば、メモリアクセスプロトコルに従って)935において処理され得る。いくつかの例において、メモリアクセスプロトコルのデータは、複数の独立したノードにより共有された共有メモリを伴った複数のトランザクションを含み得る。相互接続プロトコルからの遷移を示す第2の異なるエンコードを含む、第2の同期ヘッダが、940において受信され得る。メモリアクセスプロトコルから相互接続プロトコルへの逆の遷移は、945において第2の同期ヘッダから識別され得る。
図9Cを参照すると、いくつかの例において、相互接続プロトコルからメモリアクセスプロトコルへの遷移を識別するべくエンコードされた1または複数の値を含む第1のデータの開始のトークン(例えば、PCIe STPトークン)が、950において受信され得る。メモリアクセスプロトコルのデータは、第1のデータの開始のトークン後に到着し得、955において識別され得る。メモリアクセスプロトコルのデータが、960において処理され得る。長さフィールドは、データがいつ相互接続プロトコルのデータへと再び遷移するかを示す第1のデータの開始のトークンに含まれ得る。現に、いくつかの実装において、データの開始のトークンの長さフィールドは、メモリアクセスプロトコルのデータに対応する長さを示すようにエンコードされ得る。更に、相互接続プロトコルのデータの到着に対応するものと解釈される、第2の異なるデータの開始のフレーミングトークンが規定され得る。第1および第2のデータの開始のフレーミングトークンの各々は、他の例の中でも特に、相互接続プロトコル(例えば、PCIe)に準拠して規定され得る。
図9Dの例において、メモリアクセスプロトコルのデータへの遷移を示すようにエンコードされたストリームの終了のトークン(例えば、専用PCIe EDSトークン)は、965において受信され得る。ストリームの終了のトークンの受信により、970において、相互接続プロトコルのデータを処理するためのリンク層ロジックからメモリアクセスプロトコルのデータを処理するためのリンク層ロジックへの遷移が生じ得る。メモリアクセスプロトコルのデータは、975において、メモリアクセスプロトコルのリンク層ロジックを用いて受信および処理され得る。メモリアクセスプロトコルのリンク層制御データは、980において(例えば、メモリアクセスプロトコルのデータの終了時に)受信されて、相互接続プロトコルのデータへの遷移を示し得る。980においてリンク層制御データを受信することにより、985においてメモリアクセスプロトコルのリンク層ロジックから相互接続プロトコルのリンク層ロジックへの遷移を生じ得る。相互接続プロトコルのデータは、リンク層制御データに続いて受信され得、他の例の中でも特に、985における遷移に続いて相互接続プロトコルのリンク層ロジックにより処理され得る。
上記原理および例のほとんどは、PCIeおよびPCIe仕様の特定の改訂版の文脈において説明されているが、本明細書において説明される複数の原理、解決法、および機能は、複数の他のプロトコルおよびシステムに同様に適用可能であり得ることに留意されたい。例えば、類似の複数のレーンエラーは、類似の複数のシンボル、データストリーム、およびトークン、ならびにこれらの他のリンクを介して送信されるデータにおけるそのような構造を用い、配置し、およびフォーマットするべく指定された複数のルールに基づく複数の他のプロトコルを用いて、複数の他のリンクにおいて検出され得る。更に、代替的な複数のメカニズムおよび構造(例えば、PCIe LESレジスタまたはSKP OSと並んで)は、システム内でレーンエラー検出およびレポート機能を提供するべく用いられ得る。更に、複数の他の例の中でも特に、本明細書に説明のリンクおよびその対応するロジックに対する論理的および物理的強化における複数の組み合わせを含む、上記複数の解決法の複数の組み合わせが複数のシステム内で適用され得る。
前述の複数の装置、方法、およびシステムは、上記の任意の電子デバイスまたはシステムに実装され得ることに留意されたい。具体的な例示として、以下の図面は、本明細書に説明される本発明を利用するための複数の例示的なシステムを提供する。複数の以下のシステムがより詳細に説明されるように、いくつかの異なる相互接続が開示され、説明され、上記の検討から再考される。容易に明らかなように、上記の複数の進歩は、それらの相互接続、ファブリック、またアーキテクチャの任意のものに適用され得る。
図10を参照すると、マルチコアプロセッサを含むコンピューティングシステムのブロック図の一実施形態が図示されている。プロセッサ1000は、マイクロプロセッサ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、ハンドヘルドプロセッサ、アプリケーションプロセッサ、コプロセッサ、システムオンチップ(SOC)、コードを実行するその他のデバイス等、任意のプロセッサまたは処理デバイスを含む。一実施形態において、プロセッサ1000は、少なくとも2つのコア1001および1002を有し、これらは、非対称コアまたは対称コアを含み得る(図示された実施形態)。しかし、プロセッサ1000は、任意の数の対称または非対称の処理要素を含み得る。
一実施形態において、処理要素は、ソフトウェアスレッドをサポートするハードウェアまたはロジックを指す。ハードウェア処理要素の例としては、スレッドユニット、スレッドスロット、スレッド、処理ユニット、コンテクスト、コンテクストユニット、論理プロセッサ、ハードウェアスレッド、コア、および/または、実行状態やアーキテクチャ状態等のプロセッサの状態を保持し得るその他の任意の要素が挙げられる。換言すれば、一実施形態において、処理要素は、ソフトウェアスレッド、オペレーティングシステム、アプリケーション、他のコード等、コードと独立に関連することが可能な任意のハードウェアを指す。通常、物理プロセッサ(またはプロセッサソケット)は、集積回路を指し、これは潜在的に、コアまたはハードウェアスレッド等、任意の数の他の処理要素を含む。
多くの場合、コアは、独立のアーキテクチャ状態を維持可能な集積回路上に配置されるロジックを指し、独立に維持される各アーキテクチャ状態は、少なくともいくつかの専用実行リソースと関連する。コアとは対照的に、ハードウェアスレッドは通常、複数の独立のアーキテクチャ状態を維持することが可能な集積回路に配置された任意の論理を指し、独立して維持される複数のアーキテクチャ状態は、実行リソースへのアクセスを共有する。理解されるように、特定のリソースが共有され、他のものがあるアーキテクチャ状態の専用である場合に、ハードウェアスレッドおよびコアの間の用語のラインが重なり合う。それでも多くの場合、コアおよびハードウェアスレッドは、オペレーティングシステムにより、個々の論理プロセッサとして見なされ、オペレーティングシステムは、各論理プロセッサにおいて個々に動作をスケジューリングすることができる。
図10に図示されるように、物理プロセッサ1000は、2つのコア、すなわちコア1001および1002を含む。ここで、コア1001および1002は、複数の対称コア、すなわち複数の同一の構成、機能ユニット、および/またはロジックを有するコアとみなされる。別の実施形態において、コア1001は、アウトオブオーダプロセッサコアを含むが、コア1002は、インオーダプロセッサコアを含む。しかし、コア1001および1002は、ネイティブコア、ソフトウェア管理コア、ネイティブ命令セットアーキテクチャ(ISA)を実行すべく適合されたコア、変換された命令セットアーキテクチャ(ISA)を実行すべく適合されたコア、共同設計されたコア、または他の既知のコアといった任意のタイプのコアから個々に選択され得る。異種のコア環境(すなわち、非対称コア)においては、バイナリ変換等、いくつかの変換形態が利用され得、一方または双方のコアで、スケジューリングまたはコードの実行をする。なおも更なる検討のために、コア1002における複数のユニットは、図示された実施形態において同様に動作するので、コア1001において図示された複数の機能ユニットが、以下で更に詳細に説明される。
図示される通り、コア1001は、2つのハードウェアスレッド1001aおよび1001bを含み、それらはハードウェアスレッドスロット1001aおよび1001bとも称され得る。従って、一実施形態において、オペレーティングシステム等のソフトウェアエンティティは、潜在的にプロセッサ1000を、4つの別個のプロセッサ、すなわち、4つのソフトウェアスレッドを同時に実行可能な4つの論理プロセッサまたは処理要素とみなす。上記で示唆されるように、第1のスレッドは、アーキテクチャ状態レジスタ1001aに関連し、第2のスレッドは、アーキテクチャ状態レジスタ1001bに関連し、第3のスレッドは、アーキテクチャ状態レジスタ1002aに関連し得、第4のスレッドは、アーキテクチャ状態レジスタ1002bに関連し得る。ここで、上記のように、複数のアーキテクチャ状態レジスタ(1001a、1001b、1002aおよび1002b)の各々は、処理要素、スレッドスロット、またはスレッドユニットと呼ばれ得る。図示されるように、アーキテクチャ状態レジスタ1001aは、アーキテクチャ状態レジスタ1001bで複製され、個々のアーキテクチャ状態/コンテクストは、論理プロセッサ1001aおよび論理プロセッサ1001bに対して格納されることが可能となる。コア1001において、アロケータにおける命令ポインタおよびリネーム論理、ならびにリネーマブロック1030等、他のより小さなリソースが、スレッド1001aおよび1001bに対しても複製され得る。リオーダ/リタイヤユニット1035におけるリオーダバッファ等のいくつかのリソース、ILTB1020、ロード/ストアバッファ、およびキューが、パーティショニングを通じて共有され得る。汎用内部レジスタ、ページ・テーブルベースレジスタ、低レベルデータキャッシュ、およびデータ‐TLB1015、実行ユニット1040、ならびにアウトオブオーダユニット1035の一部等の他のリソースが、潜在的に完全に共有される。
多くの場合、プロセッサ1000は複数の他のリソースを含み、これらは共有され、パーティショニングを介して完全に共有され、または複数の処理要素により/に専用とされ得る。図10において、プロセッサの例示的なロジックユニット/リソースを有する純粋に例示的なプロセッサの実施形態が図示される。プロセッサは、これらの機能ユニット、ならびに図示されていないその他の既知の機能ユニット、ロジック、ファームウェアのいずれかを含み、または省略し得ることに留意されたい。図示されるように、コア1001は、簡略化された、代表的なアウトオブオーダ(OOO)プロセッサコアを含む。しかし、インオーダプロセッサは、複数の異なる実施形態において利用され得る。OOOコアは、実行される/取られる複数の分岐を予測する分岐ターゲットバッファ1020と、複数の命令に対するアドレス変換エントリを格納する命令変換バッファ(I−TLB)1020とを含む。
更に、コア1001は、フェッチされた複数の要素をデコードするフェッチユニット1020に結合されたデコードモジュール1025を含む。一実施形態において、フェッチロジックは、スレッドスロット1001a、1001bに関連する個々のシーケンスを各々有する。通常、コア1001は、第1のISAに関連し、第1のISAは、プロセッサ1000上で実行可能な複数の命令を規定/指定する。多くの場合、第1のISAの一部である複数の機械コード命令は、(オペコードと呼ばれる)命令の一部を含み、これは、実行されるべき命令またはオペレーションを参照/指定する。デコードロジック1025は、これらの命令を自身のオペコードから認識して、第1のISAにより規定された処理用のパイプラインに複数のデコード済み命令を送信する回路を含む。例えば、以下により詳細に検討されるように、デコーダ1025は一実施形態において、トランザクション命令等の特定の命令を認識するように設計または適合されたロジックを含む。デコーダ1025により認識する結果として、アーキテクチャまたはコア1001は、適切な命令に関連する複数のタスクを実行するべく、具体的な予め規定されたアクションを取る。本明細書に説明される複数のタスク、ブロック、動作、および方法のいずれかが、単一または複数の命令に応答して実行され得、それらのいくつかが新しいか、または古い命令であり得ることに留意することが重要である。一実施形態において、デコーダ1026は、同一のISA(またはそのサブセット)を認識することに留意されたい。あるいは、異種のコア環境において、デコーダ1026は、第2のISA(第1のISAのサブセットまたは別個のISAのいずれか)を認識する。
一例において、アロケータおよびリネーマブロック1030は、複数の命令処理結果を格納する複数のレジスタファイル等の複数のリソースを予約するアロケータを含む。しかし、スレッド1001aおよび1001bは、潜在的にアウトオブオーダ実行が可能であり、アロケータおよびリネーマブロック1030はまた、複数の命令結果を追跡する複数のリオーダバッファの等の複数の他のリソースを予約する。また、ユニット1030は、プロセッサ1000内部の複数の他のレジスタに対し、プログラム/命令参照レジスタをリネームするレジスタリネーマを含み得る。リオーダ/リタイヤユニット1035は、上述のリオーダバッファ、ロードバッファ、ストアバッファのようなコンポーネントを含み、アウトオブオーダ実行と、アウトオブオーダで実行されるその後の命令のインオーダリタイヤとをサポートする。
一実施形態において、スケジューラおよび実行ユニットブロック1040は、複数の実行ユニットに対して複数の命令/動作をスケジューリングするスケジューラユニットを含み得る。例えば、浮動小数点命令は、利用可能な浮動小数点実行ユニットを有する実行ユニットのポート上でスケジューリングされる。複数の実行ユニットに関連するレジスタファイルも、複数の情報命令処理結果を格納するべく含められる。例示的な複数の実行ユニットは、浮動小数点実行ユニット、整数実行ユニット、ジャンプ実行ユニット、ロード実行ユニット、ストア実行ユニット、および他の既知の複数の実行ユニットを含む。
より低レベルのデータキャッシュおよびデータ変換バッファ(D−TLB)1050が、実行ユニット1040に結合される。データキャッシュは、データオペランド等、最近用いられた/操作された複数の要素を格納する。これらの要素は、メモリコヒーレンシ状態に潜在的に保持される。D−TLBは、最近の仮想/線形・物理アドレス変換を格納する。具体例として、プロセッサは、物理メモリを複数の仮想ページにブレークするページテーブル構造体を有し得る。
ここでは、コア1001および1002は、オンチップインターフェース1010に関連する第2のレベルのキャッシュのような、より高レベルまたはより遠いキャッシュへのアクセスを共有する。より高レベルまたはより遠いとは、実行ユニットから増大し、または遠くなるキャッシュレベルを指すことに留意されたい。一実施形態において、より高レベルのキャッシュは、最後のレベルデータキャッシュ、すなわちプロセッサ1000のメモリ階層内の第2または第3のレベルデータキャッシュのような最後のキャッシュである。しかし、より高いレベルキャッシュはそのようには限定されない。より高いレベルキャッシュが命令キャッシュに関連するか、またはそれを含む場合があるからである。これに代えて、命令キャッシュのタイプであるトレースキャッシュが、複数の最近デコードされたトレースを格納すべく、デコーダ1025の後に結合されてもよい。ここで、命令は潜在的に、マクロ命令(すなわち、複数のデコーダにより認識される一般的命令)を指し、それはいくつかのマイクロ命令(複数のマイクロオペレーション)にデコードされ得る。
図示される構成において、プロセッサ1000は、オンチップインターフェースモジュール1010も含む。歴史的には、以下により詳細に説明されるメモリコントローラがプロセッサ1000の外部のコンピューティングシステムに含まれていた。このシナリオにおいて、オンチップインターフェース1010は、システムメモリ1075、チップセット(多くの場合、メモリ1075に接続するメモリコントローラハブおよび複数の周辺機器デバイスに接続するI/Oコントローラハブを含む)、メモリコントローラハブ、ノースブリッジ、または他の集積回路等、プロセッサ1000の外部の複数のデバイスと通信する。また、このシナリオにおいて、バス1005は、マルチドロップバス、ポイントツーポイント相互接続、シリアル相互接続、パラレルバス、コヒーレント(例えば、キャッシュコヒーレント)バス、層状プロトコルアーキテクチャ、差動バス、およびGTLバス等の任意の既知の相互接続を含み得る。
メモリ1075は、プロセッサ1000に専用であってもよく、システム内の複数の他のデバイスと共有されてもよい。複数のタイプのメモリ1075の一般的な例としては、DRAM、SRAM、不揮発性メモリ(NVメモリ)、および他の既知ストレージデバイスが挙げられる。デバイス1080は、グラフィックアクセラレータ、メモリコントローラハブに結合されたプロセッサもしくはカード、I/Oコントローラハブに結合されたデータストレージ、無線送受信機、フラッシュデバイス、オーディオコントローラ、ネットワークコントローラ、または他の既知のデバイスを含み得ることに留意されたい。
しかし、最近、より多くのロジックおよびデバイスがSOCなどのシングルダイ上に統合されるにつれ、これらのデバイスの各々は、プロセッサ1000上に組み込まれ得る。例えば一実施形態において、メモリコントローラハブは、同一のパッケージおよび/またはプロセッサ1000を有するダイ上にある。ここで、コアの一部(オンコアの一部)1010は、メモリ1075またはグラフィックデバイス1080等の複数の他のデバイスをインターフェース接続するための1または複数のコントローラを含む。そのような複数のデバイスをインターフェース接続するための相互接続およびコントローラを含む構成は多くの場合、オンコア(またはアンコア構成)と呼ばれる。例として、オンチップインターフェース1010は、オンチップ通信用のリング相互接続、およびオフチップ通信用の高速シリアルのポイントツーポイントリンク1005を含む。それでも、SOC環境において、ネットワークインターフェース、コプロセッサ、メモリ1075、グラフィックプロセッサ1080、およびその他の既知のコンピュータデバイス/インターフェースのような更に多くのデバイスは、シングルダイまたは集積回路に集積されて、高機能および低電力消費の小さいフォームファクタを提供し得る。
一実施形態において、プロセッサ1000は、本明細書に説明される複数の装置および方法をサポートし、またはそれらとインターフェース接続するべく、アプリケーションコード1076をコンパイル、変換、および/または最適化する、コンパイラ、最適化、および/またはトランスレータコード1077を実行することができる。多くの場合、コンパイラは、ソーステキスト/コードをターゲットテキスト/コードに変換するプログラムまたはプログラムのセットを含む。通常、コンパイラを用いるプログラム/アプリケーションコードのコンパイルは、複数のフェーズおよびパスで実行され、ハイレベルプログラミング言語コードを低レベル機械またはアセンブリ言語コードに変換する。しかし、単一のパスコンパイラは、単純なコンパイルになおも利用され得る。コンパイラは、複数の任意の既知のコンパイル技術を利用し得、語彙分析、前処理、解析、セマンティクス分析、コード生成、コード変換、およびコードの最適化のような複数の任意の既知のコンパイラ動作を実行し得る。
多くの場合、より大きなコンパイラは複数のフェーズを含むが、最も多くの場合、これらのフェーズは2つの一般的なフェーズ内に含まれる。つまり、(1)フロントエンド、すなわち一般には、構文処理、セマンティクス処理、およびいくつかの変換/最適化が行われ得るフェーズ、および(2)バックエンド、すなわち一般には、分析、変換、最適化、およびコード生成が行われるフェーズである。いくつかのコンパイラは、中間を指し、これによりコンパイラのフロントエンドとバックエンドとの間の描写が曖昧なものを図示する。結果として、挿入への参照、関連、生成、またはコンパイラの他の動作は、前述の複数のフェーズまたはパスのいずれか、ならびにコンパイラのその他の既知のフェーズまたはパスにおいて行われ得る。図示的な例として、コンパイラは潜在的に、複数の動作、呼び出し、機能等を、コンパイルのフロントエンドフェーズにおける複数の呼び出し/動作の挿入等のコンパイルの1または複数のフェーズに挿入して、次に複数の呼び出し/動作の変換を変換フェーズ中のより低レベルのコードに挿入する。動的コンパイル中に、コンパイラコードまたは動的最適化コードは、そのような複数の動作/呼び出しを挿入すると共に、ランタイム中に実行するコードを最適化することに留意されたい。具体的な図示例として、バイナリコード(既にコンパイルされたコード)は、ランタイム中に動的に最適化され得る。ここでプログラムコードは、動的最適化コード、バイナリコード、またはこれらの組み合わせを含み得る。
コンパイラと同様に、バイナリトランスレータなどのトランスレータは、コードを最適化および/または変換すべく、コードを静的または動的に変換する。従って、コード、アプリケーションコード、プログラムコード、または他のソフトウェア環境の実行について言及する場合、(1)プログラムコードをコンパイルし、複数のソフトウェア構造を維持し、複数の他の動作を実行し、コードを最適化し、またはコードを変換するための、コンパイラプログラム、最適化コードオプティマイザ、またはトランスレータの動的または静的な実行、(2)最適化/コンパイルされたアプリケーションコードのような複数の動作/呼び出しを含むメインプログラムコードの実行、(3)複数のソフトウェア構造を維持し、他のソフトウェア関連動作を実行し、またはコードを最適化するためのメインプログラムコードに関連付けられた複数のライブラリのような他のプログラムコードの実行、または(4)それらの組み合わせを指し得る。
ここで図11を参照すると、マルチコアプロセッサの一実施形態のブロック図が示される。図11の実施形態に示されるように、プロセッサ1100は複数のドメインを含む。具体的には、コアドメイン1130は、複数のコア1130A〜1130Nを含み、グラフィックドメイン1160は、メディアエンジン1165を有する1または複数のグラフィックエンジン、およびシステムエージェントドメイン1110を含む。
様々な実施形態において、システムエージェントドメイン1110は、複数のパワー制御イベントおよび電力管理を処理し、その結果ドメイン1130および1160(例えば、複数のコアおよび/またはグラフィックエンジン)の個々のユニットは、所与のユニット内で生じるアクティビティ(または非アクティビティ)の観点から、適切な電力モード/レベル(例えば、アクティブ、ターボ、スリープ、休止状態、ディープスリープ、または他のアドバンスド・コンフィグレーション・アンド・パワー・インターフェース(Advanced Configuration Power Interface)のような状態)において動的に動作するよう独立的に制御可能である。ドメイン1130および1160の各々は、異なる電圧および/または電力で動作し得、更に複数のドメイン内の複数の個々のユニットは各々、独立した周波数および電圧で潜在的に動作する。3つのドメインのみを用いて示されていることに留意し、本発明の範囲がこの点で限定されず、追加の複数のドメインが複数の他の実施形態において存在し得ることを理解されたい。
示される通り、各コア1130は、様々な実行ユニットおよび複数の追加の処理要素に加え、複数の低レベルキャッシュを更に含む。ここで、様々なコアが互いに結合され、最終レベルキャッシュ(LLC)1140A〜1140Nの複数のユニットまたはスライスにより形成された共有キャッシュメモリに結合されている。これらのLLCは多くの場合、ストレージおよびキャッシュコントローラ機能を含み、コア間で、また潜在的にはグラフィックエンジン間でも共有されている。
見ての通り、リング相互接続1150は、複数のコアを互いに結合し、複数のリングストップ1152A〜1152Nを介して、コアドメイン1130、グラフィックドメイン1160、およびシステムエージェント回路1110間の相互接続を提供する。当該リングストップの各々は、コアとLLCスライスとの間で結合する。図11に見られるように、相互接続1150は、アドレス情報、データ情報、受信確認情報、およびスヌープ/無効情報を含む、様々な情報を搬送するべく用いられる。リング相互接続が図示されるが、任意の既知のオンダイ相互接続またはファブリックが利用され得る。図示的な例として、上述の複数のファブリック(例えば、別のオンダイ相互接続、オンチップシステムファブリック(OSF)、アドバンスドマイクロコントローラバスアーキテクチャ(AMBA)相互接続、多次元メッシュファブリック、または他の既知の相互接続アーキテクチャ)のうちのいくつかが同様に利用され得る。
更に図示されるように、システムエージェントドメイン1110は、関連したディスプレイの制御、およびそれに対してインターフェースを提供するディスプレイエンジン1112を含む。システムエージェントドメイン1110は、システムメモリ(例えば、複数のDIMMと共に実装されたDRAM)へのインターフェースを提供する統合メモリコントローラ1120、複数のメモリコヒーレンシ動作を実行するコヒーレンシロジック1122のような複数の他のユニットを含み得る。プロセッサと他の回路との間の相互接続を可能にするべく、複数のインターフェースが存在し得る。例えば、一実施形態において、少なくとも1つのダイレクトメディアインターフェース(DMI)1116ならびに1または複数のPCIe(登録商標)インターフェース1114が提供される。ディスプレイエンジンおよびこれらのインターフェースは通常、PCIe(登録商標)ブリッジ1118を介してメモリに結合される。なおも更に、追加のプロセッサまたは他の回路等、複数の他のエージェントの間の通信を提供するべく、1または複数の他のインターフェースが提供され得る。
図12をここで参照すると、代表的なコアのブロック図、具体的には図11のコア1130のようなコアのバックエンドにおける論理ブロックが示される。一般的に、図12に示される構造は、複数の着信命令をフェッチし、様々な処理(例えば、キャッシュ、デコード、分岐予測等)を実行して、アウトオブオーダ(OOO)エンジン1280に沿って複数の命令/動作を送信するべく用いられるフロントエンドユニット1270を有する、アウトオブオーダプロセッサを含む。OOOエンジン1280は、複数のデコード済み命令に対して更なる処理を実行する。
図12の実施形態において具体的には、アウトオブオーダエンジン1280は、1もしくは複数のマイクロ命令またはマイクロオペの形態であり得る複数のデコード済み命令をフロントエンドユニット1270から受信する割り当てユニット1282を含み、それらをレジスタ等の複数の適切なリソースに割り当てる。次に、複数の命令は、複数のリソースを予約して、複数の実行ユニット1286A〜1286Nのうちの1つに対して実行するべく、それらをスケジューリングする予約局1284に提供される。例えば、とりわけ、算術論理ユニット(ALU)、ロードおよびストアユニット、ベクトル処理ユニット(VPU)、浮動小数点実行ユニットを含む、様々なタイプの実行ユニットが存在し得る。これらの異なる複数の実行ユニットからの結果が、リオーダバッファ(ROB)1288に提供され、これは、順序付けられていない複数の結果を受け取って、それらを正しいプログラムの順序に戻す。
なおも図12を参照すると、フロントエンドユニット1270とアウトオブオーダエンジン1280の双方がメモリ階層の異なるレベルに結合されることに留意されたい。具体的には、命令レベルキャッシュ1272が図示され、命令レベルキャッシュ1272は次に中間レベルのキャッシュ1276に結合し、その次に、中間レベルキャッシュ1276が最終レベルキャッシュ1295に結合する。一実施形態において、最終レベルキャッシュ1295は、オンチップユニット1290(場合によりはアンコアとも称される)の形で実装される。一例として、ユニット1290は、図11のシステムエージェント1110に類似する。上述したように、アンコア1290は、図示された実施形態において、ED RAMを介して実装されるシステムメモリ1299と通信する。また、アウトオブオーダエンジン1280内の様々な実行ユニット1286は、第1のレベルキャッシュ1274と通信し、これはまた中間レベルキャッシュ1276と通信することに留意されたい。また、追加のコア1230N−2〜1230Nは、LLC1295に結合し得ることに留意されたい。図12の実施形態においてはこの高いレベルで示されたが、様々な変更および追加のコンポーネントが存在し得ることを理解されたい。
図13を参照すると、命令を実行する複数の実行ユニットを含んだプロセッサを用いて形成された例示的なコンピュータシステムのブロック図が図示されており、複数の相互接続のうちの1または複数は、本発明の一実施形態による1または複数の機能を実装する。システム1300は、プロセッサ1302のようなコンポーネントを含み、本明細書において説明される実施形態等、本発明によるロジックを含んだ複数の実行ユニットを利用してデータ処理のための複数のアルゴリズムを実行する。システム1300は、PENTIUM(登録商標)III(商標)、PENTIUM(登録商標)4(商標)、Xeon(商標)、Itanium、XScale(商標)、および/またはStrongARM(商標)マイクロプロセッサに基づく複数の処理システムを表すが、(他のマイクロプロセッサを有するPC、エンジニアリングワークステーション、セットトップボックス等を含む)複数の他のシステムが用いられてもよい。一実施形態において、サンプルシステム1300は、ワシントン州レドモンド市のマイクロソフト社から入手可能なウィンドウズ(登録商標)オペレーティングシステムのバージョンを実行するが、他のオペレーティングシステム(例えば、UNIX(登録商標)やリナックス(登録商標))、エンベデッドソフトウェア、および/またはグラフィカルユーザインターフェースも用いられてもよい。従って、本発明の複数の実施形態は、いかなる具体的なハードウェア回路およびソフトウェアの組み合わせにも限定されない。
複数の実施形態は、コンピュータシステムに限定されない。本発明の代替的な複数の実施形態は、ハンドヘルドデバイスおよびエンベデッドアプリケーション等、他のデバイスにおいて用いられ得る。ハンドヘルドデバイスのいくつかの例としては、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末(PDA)およびハンドヘルドPCが挙げられる。エンベデッドアプリケーションは、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(ネットPC)、セットトップボックス、ネットワークハブ、広域ネットワーク(WAN)スイッチ、少なくとも一実施形態による1または複数の命令を実行し得るその他のシステムを含み得る。
この図示された実施形態において、プロセッサ1302は、少なくとも1つの命令を実行するアルゴリズムを実装するべく、1または複数の実行ユニット1308を含む。一実施形態が、シングルプロセッサのデスクトップまたはサーバシステムの文脈で説明され得るが、複数の代替的な実施形態は、マルチプロセッサシステムに含まれてもよい。システム1300は、「ハブ」システムアーキテクチャの例である。コンピュータシステム1300は、複数のデータ信号を処理するプロセッサ1302を含む。1つの図示的な例として、プロセッサ1302は、複合命令セットコンピュータ(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、命令セットの組み合わせを実装したプロセッサ、または、例えばデジタル信号プロセッサ等、その他のプロセッサデバイスを含む。プロセッサ1302は、システム1300におけるプロセッサ1302と複数の他のコンポーネントとの間でデータ信号を送信するプロセッサバス1310に結合されている。システム1300の複数の要素(例えば、グラフィックアクセラレータ1312、メモリコントローラハブ1316、メモリ1320、I/Oコントローラハブ1324、無線送受信機1326、フラッシュBIOS1328、ネットワークコントローラ1334、オーディオコントローラ1336、シリアル拡張ポート1338、I/Oコントローラ1340等)は、当業者に周知の従来の複数の機能を実行する。
一実施形態において、プロセッサ1302は、レベル1(LI)内部キャッシュメモリ1304を含む。アーキテクチャに応じて、プロセッサ1302は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有し得る。複数の他の実施形態は、特定の実装および必要性に応じて、内部および外部キャッシュの双方の組み合わせを含む。レジスタファイル1306は、整数レジスタ、浮動小数点レジスタ、ベクトルレジスタ、バンクレジスタ、シャドウレジスタ、チェックポイントレジスタ、状態レジスタ、および命令ポインタレジスタを含む、様々なレジスタに異なる複数のタイプのデータを格納する。
整数および浮動小数点オペレーションを実行するロジックを含む実行ユニット1308も、プロセッサ1302に存在する。一実施形態において、プロセッサ1302は、マイクロコードを格納するマイクロコード(ucode)ROMを含み、これは、実行されると、特定の複数のマクロ命令のアルゴリズムを実行し、あるいは複数の複合シナリオを処理する。ここで、マイクロコードは、プロセッサ1302のための論理バグ/修正を処理するべく、潜在的にアップデート可能である。一実施形態に対して、実行ユニット1308は、パックド命令セット1309を処理するロジックを含む。複数の命令を実行する関連回路と共に、パックド命令セット1309を汎用プロセッサ1302の命令セットに含むことにより、多くのマルチメディアアプリケーションにより用いられる複数の動作は、汎用プロセッサ1302においてパックドデータを用いて実行され得る。このように、パックドデータで動作を実行するためにそのプロセッサのデータバスの全幅を用いることにより、多くのマルチメディアアプリケーションが、加速され、より効率的に実行される。これにより、1または複数の動作および1つのデータ要素を一度に実行すべく、プロセッサのデータバス全体に渡って、より小さい複数のデータユニットを転送する必要性を、潜在的に取り除く。
また、実行ユニット1308の代替的な複数の実施形態は、マイクロコントローラ、エンベデッドプロセッサ、グラフィックデバイス、DSP、および他のタイプのロジック回路において用いられ得る。システム1300は、メモリ1320を含む。メモリ1320は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、または他のメモリデバイスを含む。メモリ1320は、プロセッサ1302により実行されるべき複数のデータ信号により表される複数の命令および/またはデータを格納する。
任意の前述の機能または本発明の複数の態様が、図13に図示された1または複数の相互接続で利用され得ることに留意されたい。例えば、示されていないが、プロセッサ1302の複数の内部ユニットを結合するオンダイ相互接続(ODI)は、上記の本発明の1または複数の態様を実装する。または、本発明は、プロセッサバス1310(例えば、他の既知の高性能コンピューティング相互接続)、メモリ1320への高帯域幅メモリパス1318、グラフィックアクセラレータ1312へのポイントツーポイントリンク(例えば、周辺構成要素相互接続エクスプレス(PCIe)に準拠したファブリック)、コントローラハブ相互接続1322、他の図示された複数のコンポーネントを結合するI/Oまたは他の相互接続(例えば、USB、PCI、PCIe)に関連する。そのような複数のコンポーネントのいくつかの例としては、オーディオコントローラ1336、ファームウェアハブ(フラッシュBIOS)1328、無線送受信機1326、データストレージ1324、ユーザ入力およびキーボードインターフェース1342を含むレガシI/Oコントローラ1310、ユニバーサルシリアルバス(USB)のようなシリアル拡張ポート1338、およびネットワークコントローラ1334が挙げられる。データストレージデバイス1324は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD‐ROMデバイス、フラッシュメモリデバイス、または他の大容量ストレージデバイスを備え得る。
ここで図14を参照すると、本発明の実施形態による第2のシステム1400のブロック図が示されている。図14に示されるように、マルチプロセッサシステム1400は、ポイントツーポイント相互接続システムであり、第1のプロセッサ1470と、ポイントツーポイント相互接続1450を介して結合された第2のプロセッサ1480とを備える。プロセッサ1470および1480の各々は、いくつかのバージョンのプロセッサであってもよい。一実施形態において、1452および1454は、高性能アーキテクチャのようなシリアルのポイントツーポイントコヒーレント相互接続ファブリックの一部である。結果として、本発明は、QPIアーキテクチャ内に実装され得る。
2つのプロセッサ1470、1480のみで示されているが、本発明の範囲はそのように限定されないことを理解されたい。複数の他の実施形態において、1または複数の追加のプロセッサは、所与のプロセッサに存在することがある。
プロセッサ1470、1480は、統合メモリコントローラユニット1472、1482を各々含むものとして示されている。また、プロセッサ1470は、その複数のバスコントローラユニットの一部として、ポイントツーポイント(P‐P)インターフェース1476および1478を含む。同様に、第2のプロセッサ1480は、P‐Pインターフェース1486および1488を含む。プロセッサ1470、1480は、複数のP‐Pインターフェース回路1478、1488を用いて、ポイントツーポイント(P‐P)インターフェース1450を介して情報を交換し得る。図14に示されるように、IMC1472および1482は、複数のプロセッサを各メモリ、すなわちローカルに各プロセッサに取り付けられたメインメモリの一部であり得るメモリ1432およびメモリ1434に結合する。
プロセッサ1470、1480は各々、ポイントツーポイントインターフェース回路1476、1494、1486、1498を用いる個々のP‐Pインターフェース1452、1454を介してチップセット1490と情報を交換する。また、チップセット1490は、高性能グラフィック相互接続1439に沿ったインターフェース回路1492を介して、高性能グラフィック回路1438とも情報を交換する。
共有キャッシュ(図示せず)は、どちらかのプロセッサまたは双方のプロセッサの外部に含まれるが、やはりプロセッサが低電力モードに置かれた場合に、どちらか、または双方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るように、P‐P相互接続を介して複数のプロセッサに接続され得る。
チップセット1490は、インターフェース1496を介して第1のバス1416に結合され得る。一実施形態において、第1のバス1416は、周辺構成要素相互接続(PCI)バス、またはPCI Expressバスまたは別の第3世代I/O相互接続バス等のバスであり得るが、本発明の範囲は、そのようには限定されない。
図14に示されるように、様々なI/Oデバイス1414が、第1のバス1416を第2のバス1420に結合するバスブリッジ1418と共に、第1のバス1416に結合される。一実施形態において、第2のバス1420は、ローピンカウント(LPC)バスを含む。一実施形態において、様々なデバイスが例えば、キーボードおよび/またはマウス1422、多くの場合に複数の命令/コードおよびデータ1430を含むディスクドライブまたは他の大容量ストレージデバイスのような通信デバイス1427およびストレージユニット1428を含む、第2のバス1420に結合される。更に、第2のバス1420に結合されたオーディオI/O1424が示されている。複数の他のアーキテクチャが可能であり、含まれる複数のコンポーネントおよび相互接続アーキテクチャが変り得ることに留意されたい。例えば、図14のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装し得る。
次に図15を参照すると、本発明によるシステムオンチップ(SOC)の設計の一実施形態が図示されている。具体的な図示例として、SOC1500は、ユーザ機器(UE)に含まれる。一実施形態において、UEは、携帯電話、スマートフォン、タブレット、超薄型ノートブック、ブロードバンドアダプタ付ノートブック、または、その他の類似の通信デバイス等、通信目的でエンドユーザにより用いられる任意のデバイスを指す。多くの場合、UEは、基地局またはノードに接続さる。潜在的にはこれらは、その性質上、GSM(登録商標)ネットワークにおける移動局(MS)に対応する。
ここでは、SOC1500は、2つのコア1506および1507を含む。上記の検討と同様に、コア1506および1507は、インテル(登録商標)Architecture Core(登録商標)ベースのプロセッサ、アドバンスト・マイクロ・デバイセズ株式会社(AMD)のプロセッサ、MlPSベースのプロセッサ、ARMベースのプロセッサ設計、またはそれらの顧客、ならびに複数のライセンシまたは複数の採用者等の命令セットアーキテクチャに適合し得る。コア1506および1507は、バスインターフェースユニット1509およびL2キャッシュ1511に関連し、システム1500の他の一部と通信するキャッシュ制御器1508に結合されている。相互接続1510は、上述のIOSF、AMBA、または他の相互接続のようなオンチップ相互接続を含み、これは潜在的には、本明細書において説明される1または複数の態様を実装する。
インターフェース1510は、SIMカードとインターフェース接続する加入者識別モジュール(SIM)1530、コア1506および1507により実行するブートコードを保持してSOC1500を初期化およびブートするブートROM1535、外部メモリ(例えば、DRAM1560)とインターフェース接続するSDRAMコントローラ1540、不揮発性メモリ(例えば、フラッシュ1565)とインターフェース接続するフラッシュコントローラ1545、複数の周辺機器とインターフェース接続する周辺機器制御器1550(例えば、シリアル周辺機器インターフェース)、入力(例えば、タッチで可能とされる入力)を表示および受信する動画コーデック1520および動画インターフェース1525、グラフィック関連の計算を実行するGPU1515等、複数の他のコンポーネントに通信チャネルを提供する。これらのインターフェースのいずれは、本明細書において説明される本発明の複数の態様を組み込み得る。
更に、本システムは、Bluetooth(登録商標)モジュール1570、3Gモデム1575、GPS1585、およびWiFi1585等の通信用周辺機器を図示する。上述のように、UEは通信用無線を含むことに留意されたい。結果として、これらの周辺機器通信モジュールは、全てが必要とされるわけではない。しかし、UEにおいて、外部通信のためのある形態の無線が含まれる。
本発明は限定された数の実施形態に関して説明されたが、当業者であればそこから多くの修正形態および改変形態を理解するであろう。添付の特許請求の範囲が、本発明の真の趣旨および範囲に含まれるそのような全ての修正形態および改変形態を包含することが意図される。
設計は、生成からシミュレーションを経由して製造へと様々な段階を経る場合がある。設計を表すデータは、いくつかの態様でその設計を表現し得る。まず、シミュレーションで有用なように、ハードウェアは、ハードウェア記述言語、または別の機能記述言語を用いて表され得る。更に、ロジックおよび/またはトランジスタゲートを用いる回路レベルモデルは、設計処理のいくつかの段階において製造され得る。更に、いくつかの段階では、大部分の設計が、ハードウェアモデルで様々なデバイスの物理的配置を表すデータのレベルに達する。従来の複数の半導体製造技術が使用される場合、ハードウェアモデルを表すデータは、集積回路を製造するのに用いられるマスクのための異なる複数のマスク層に、様々な機能が存在するか、または存在しないかを指定するデータであり得る。設計の任意の表現において、データは、機械可読媒体に任意の形態で格納され得る。メモリ、または、ディスク等の磁気もしくは光ストレージは、変調された光または電気の波を介して送信される情報を、またはそうでなければ、そうした情報を送信するために生成された情報を格納する機械可読媒体であってもよい。コードまたは設計を示し、または搬送する電気的な搬送波が送信される場合、その電気信号のコピー、バッファリング処理、または再送信が実行される程度において、新しいコピーが作成される。従って、通信プロバイダまたはネットワークプロバイダは、例えば搬送波にエンコードされた情報等、本発明の複数の実施形態における複数の技術を実施する物品を、有形の機械可読媒体に少なくとも一時的に格納してよい。
本明細書において使用されるモジュールは、ハードウェア、ソフトウェア、および/またはファームウェアの任意の組み合わせを指す。例として、モジュールは、マイクロコントローラにより実行されるように適合されたコードを格納する非一時的媒体に関連したマイクロコントローラのようなハードウェアを含む。従って、一実施形態において、モジュールへの言及する場合、ハードウェアを指し、具体的には、ハードウェアは、非一時的媒体上に保持されるべきコードを認識および/または実行するように構成されている。更に、別の実施形態において、モジュールを用いる場合、コードを含む非一時的媒体を指し、具体的には、コードは予め定められた複数のオペレーションを実行するべく、マイクロコントローラにより実行されるように適合されている。なおも別の実施形態において、推測されるように、(本例における)モジュールという用語は、マイクロコントローラおよび非一時的媒体の組み合わせを指す場合がある。多くの場合、別個に図示されるモジュールの境界線は一般に異なり、潜在的には重複する。例えば、第1および第2のモジュールは、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組み合わせを共有し得るが、潜在的には、いくつかの独立したハードウェア、ソフトウェアまたはファームウェアを保持する。一実施形態において、ロジックという用語を用いる場合、トランジスタ、レジスタ等のハードウェア、または、プログラマブルロジックデバイス等の他のハードウェアを含む。
一実施形態において、「ように構成される」という文言を用いる場合、指定または決定されたタスクを実行するべく、装置、ハードウェア、ロジックまたは要素を、配置し、組み立て、製造し、販売の申し込みをし、輸入し、および/または、設計することを指す。この例においては、動作していない装置またはその要素が、指定されたタスクを実行するべくなおも設計され、結合され、および/または相互接続されている場合には、依然として、指定された当該タスクを実行する「ように構成され」ている。純粋に図示的な例として、ロジックゲートは、動作中に0または1を提供し得る。しかし、イネーブル信号をクロックへ提供する「ように構成される」ロジックゲートは、1または0を提供し得る全ての潜在的なロジックゲートを含むわけではない。そうではなく、ロジックゲートは、動作中に1または0の出力がクロックをイネーブルにするように、いくつかの態様で結合されているものである。「ように構成される」という用語を用いる場合、動作を必要とはせず、その代わりに、装置、ハードウェアおよび/または要素の潜在的な状態に焦点を当てたものであって、その潜在的な状態において、装置、ハードウェアおよび/または要素は、装置、ハードウェアおよび/または要素が動作しているときに特定のタスクを実行するように設計されていることに再度留意されたい。
更に、「するべく」、「することができる」、および/または「動作可能な」という文言を用いる場合、一実施形態において、指定されたように装置、ロジック、ハードウェアおよび/または要素を用いることを可能にするように、いくつかの装置、ロジック、ハードウェア、および/または要素が設計されていることを指す。上記のように一実施形態において、「するべく」、「することができる」、「動作可能な」を用いる場合、装置、ロジック、ハードウェアおよび/または要素の潜在的な状態を指し、装置、ロジック、ハードウェアおよび/または要素は動作しているのではなく、指定されたように装置を用いることを可能にするように設計されていることに留意されたい。
本明細書中で用いられる値は、数、状態、論理状態、またはバイナリ論理状態についての任意の既知の表現を含む。多くの場合、ロジックレベル、ロジック値または論理値を用いる場合、1または0のレベルや値と呼ばれ、これらは単純にバイナリ論理状態を表す。例えば、1は高論理レベルを指し、0は低論理レベルを指す。一実施形態において、トランジスタまたはフラッシュセル等のストレージセルは、単一の論理値または複数の論理値を保持することができる場合がある。しかし、コンピュータシステムでは、他の値の表現が用いられている。例えば、10進数の10は、バイナリ値1010として、16進数では文字Aとして、表され得る。従って、値は、コンピュータシステムにおいて保持することが可能な情報の任意の表現を含む。
更に、複数の状態が、複数の値または複数の値の部分により表され得る。一例として、ロジック1等の第1の値が、既定または初期の状態を表し得るが、ロジックゼロ等の第2の値は、非既定状態を表し得る。更に、一実施形態において、リセットおよびセットという用語は、既定および更新値または状態を、各々指す。例えば、既定値は潜在的に高論理値、すなわち、リセットを含むが、更新値は潜在的に低論理値、すなわち、セットを含む。値の任意の組み合わせが、任意の数の状態を表すべく利用され得ることに留意されたい。
上記の方法、ハードウェア、ソフトウェア、ファームウェアまたはコードの複数の実施形態は、処理要素により実行可能される機械アクセス可能で、機械可読で、コンピュータアクセス可能で、またはコンピュータ可読な媒体上に格納された複数の命令またはコードにより実装され得る。非一時的機械アクセス可能/可読媒体は、コンピュータまたは電子システム等の機械により可読な形態で情報を提供する(すなわち、格納および/または送信する)任意のメカニズムを含む。例えば、非一時的機械アクセス可能媒体は、スタティックRAM(SRAM)もしくはダイナミックRAM(DRAM)のようなランダムアクセスメモリ(RAM)、ROM、磁気もしくは光ストレージ媒体、フラッシュメモリデバイス、電気ストレージデバイス、光ストレージデバイス、音響ストレージデバイス、一時的(伝搬される)信号(例えば、搬送波、赤外線信号、デジタル信号)から受信される情報を保持するためのストレージデバイスの他の形態等を含み、これらは、そこから情報を受信できる非一時的媒体とは区別されるべきである。
本発明の複数の実施形態を実行するロジックをプログラミングするのに用いられる複数の命令は、DRAM、キャッシュ、フラッシュメモリ、または他のストレージ等のシステムのメモリ内に格納され得る。更に、これらの命令は、ネットワークを介して、または、他のコンピュータ可読媒体により配信され得る。従って、機械可読媒体は、機械(例えばコンピュータ)により可読な形態で情報を格納または送信する任意のメカニズムを含み得るが、電気、光、音響もしくは他の形態の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号等)により、インターネットを介する情報の送信に用いられるフロッピー(登録商標)ディスケット、光ディスク、コンパクトディスクリードオンリメモリ(CD―ROM)、および光磁気ディスク、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、磁気または光カード、フラッシュメモリ、または有形機械可読ストレージに限定されない。従って、コンピュータ可読媒体としては、機械(例えばコンピュータ)により可読な形態で複数の電子命令または情報を格納または送信するのに好適の任意のタイプの有形機械可読媒体が挙げられる。
以下の複数の例は、本明細書による実施形態に関する。1または複数の実施形態は、共有メモリコントローラを提供して、複数の独立したノードからの複数のロードおよびストアオペレーションを処理し、共有メモリリソースにアクセスを提供する装置、システム、機械可読ストレージ、機械可読媒体、ハードウェア、および/またはソフトウェアベースのロジック、ならびに方法を提供し得、複数の独立したノードの各々は、共有メモリリソースの各部分にアクセスすることを許可される。
少なくとも一例において、複数のロードおよびストアオペレーションは、共有メモリリンクプロトコルを用いて通信される。
少なくとも一例において、共有メモリリンクプロトコルは、異なる相互接続プロトコルの物理層ロジックを利用するメモリアクセスプロトコルを含む。
少なくとも一例において、共有メモリリンクプロトコルは、メモリアクセスプロトコルのデータのデータ送信と相互接続プロトコルのデータの送信との間の多重化を提供する。
少なくとも一例において、相互接続プロトコルのデータは、リンク層データおよびトランザクション層データのうちの少なくとも1つを含む。
少なくとも一例において、メモリアクセスプロトコルは、SMI3を含み、相互接続プロトコルは、周辺構成要素相互接続(PCI)エクスプレス(PCIe)を含む。
少なくとも一例において、相互接続プロトコルのデータとメモリアクセスプロトコルのデータとの間の複数の遷移は、複数の遷移を識別するようにエンコードされた同期ヘッダにより識別される。
少なくとも一例において、相互接続プロトコルのデータとメモリアクセスプロトコルのデータとの間の複数の遷移は、複数の遷移を識別するようにエンコードされたデータの開始のフレーミングトークンにより識別される。
少なくとも一例において、相互接続プロトコルのデータからメモリアクセスプロトコルのデータへの複数の遷移は、複数の遷移を識別するようにエンコードされた相互接続プロトコルのデータストリームの終了のフレーミングトークンにより識別され、メモリアクセスプロトコルのデータから相互接続プロトコルのデータへの複数の遷移は、メモリアクセスプロトコルの複数のリンク層制御フリットにより識別される。
少なくとも一例において、共有メモリリンクプロトコルは、ネットワークプロトコルスタックを介してトンネリングされる。
少なくとも一例において、ネットワークプロトコルスタックは、イーサネット(登録商標)を含む。
少なくとも一例において、複数の複数のCPUノードの第1のノードは、第1のボード上にあり、複数のCPUノードの第2のノードは、第1のボードとは別個の第2のボード上にある。
少なくとも一例において、複数のCPUノードのうちの少なくとも2つは、同一のデバイス上にある。
少なくとも一例において、共有メモリコントローラは、更に、複数のロードおよびストアオペレーションを伴った複数のメモリトランザクションを追跡する。
少なくとも一例において、共有メモリコントローラは、更に、複数のCPUノードのうちの特定のノードが障害を起こしていることを識別し、複数のメモリトランザクションのうちの特定のCPUノード部分を識別し、複数のメモリトランザクションのうちの特定のCPUノードの部分を中断させつつ、全ての他のメモリトランザクションを維持する。
少なくとも一例において、共有メモリコントローラは、更に、共有メモリリソース内のデータに対する複数のCPUノードの複数のアクセス許可を管理する。
少なくとも一例において、複数のCPUノードのうちの少なくとも特定のノードは、共有メモリの少なくとも第1の部分においてアクセスを妨げられ、複数のCPUノードの第2のノードは、第1の部分にアクセスすることを許可される。
少なくとも一例において、共有メモリコントローラは、更に、共有メモリリソース内のデータについてのディレクトリ情報を管理する。
少なくとも一例において、ディレクトリ情報は、共有メモリリソースに格納された複数のデータリソースの各々について、各データリソースへのアクセスが複数のCPUノードのうちの1つに独占的であるか、または複数のCPUノードの2またはそれよりも多くのノードの間で共有されるかを識別する。
少なくとも一例において、共有メモリコントローラは、更に、複数のデータリソースの特定のデータリソースに対するアクセスの変更をネゴシエートし、変更は、共有から独占へとアクセスを変更することと、独占から共有へとアクセスを変更することとのうちの少なくとも1つを含む。
少なくとも一例において、共有メモリコントローラは、少なくとも1つの他の共有メモリリソースを管理する少なくとも1つの他の共有メモリコントローラに結合され、共有メモリコントローラは、更に、他の共有メモリコントローラに複数のロード/ストアオペレーションを通信して、複数のCPUノードに対して他の共有メモリにアクセスすることを許可する。
少なくとも一例において、共有メモリコントローラは、更に、複数のロードおよびストアオペレーションにおけるアドレス情報を、共有メモリリソースに格納された複数の対応データリソースにマッピングする。
1または複数の実施形態は、共有メモリコントローラにメモリアクセス要求を送信する装置、システム、機械可読ストレージ、機械可読媒体、ハードウェアおよび/またはソフトウェアベースのロジック、ならびに方法を提供し得、メモリアクセス要求は、ロード/ストアオペレーションを含み、共有メモリコントローラに対応する共有メモリリソースに含まれるべきデータリソースのアドレスを識別し、複数の独立したノードの各々は、共有メモリリソースの各部分にアクセスすることを許可される。
少なくとも一例において、メモリアクセス要求は、ロード要求を含み、I/Oロジックは、更に、ロード要求に応答してデータリソースに対応するデータを受信する。
少なくとも一例において、メモリアクセス要求は、ストア要求を含む。
少なくとも一例において、メモリアクセス要求は、共有メモリリンクプロトコルを用いて送信され、
共有メモリリンクプロトコルは、異なる相互接続プロトコルの物理層ロジックを利用するメモリアクセスプロトコルを含む。
少なくとも一例において、共有メモリリンクプロトコルは、メモリアクセスプロトコルのデータのデータ送信と相互接続プロトコルのデータの送信との間の多重化を提供する。
少なくとも一例において、相互接続プロトコルのデータとメモリアクセスプロトコルのデータとの間の複数の遷移は、(a)複数の遷移を識別するようにエンコードされた同期ヘッダ、(b)複数の遷移を識別するようにエンコードされたデータの開始のフレーミングトークン、(c)複数の遷移を識別するようにエンコードされたデータストリームの終了のフレーミングトークンのうちの少なくとも1つにより識別される。
少なくとも一例において、メモリアクセスプロトコルは、SMI3を含み、相互接続プロトコルは、PCIeベースのプロトコルを含む。
少なくとも一例において、複数のノードのうちの特定のノードは、複数のCPUソケットおよびローカルメモリを備える。少なくとも一例において、共有メモリリソースは、特定のノードとは別個のデバイス上にある。
1または複数の実施形態は、共有メモリ内の特定のデータを識別する第1のロード/ストアメッセージを第1の独立CPUノードから受信し、第1のロード/ストアメッセージに応答して特定のデータに対するアクセスを第1のCPUノードに提供し、共有メモリ内の特定のデータを識別する第2のロード/ストアメッセージを第2の独立CPUノードから受信し、第2のロード/ストアメッセージに応答して、特定のデータに対するアクセスを第2のCPUメモリに提供する装置、システム、機械可読ストレージ、機械可読媒体、ハードウェア、および/またはソフトウェアベースのロジック、ならびに方法を提供し得る。
少なくとも一例において、第1および第2のロード/ストアメッセージの各々は、共有メモリリンクプロトコルを用い、データリンクを介して受信される。
少なくともいくつかの実施形態は、第1のCPUノードが特定のデータにアクセスするのを許可することを識別することと、第2のCPUノードが特定のデータにアクセスするのを許可することを識別することを提供し得る。
少なくともいくつかの実施形態は、第1および第2のCPUノードの各々について共有メモリを伴った複数のトランザクションを追跡することを提供し得る。
少なくともいくつかの実施形態は、特定のデータのディレクトリ情報を識別することを提供し得、ディレクトリ情報は、特定のデータが共有、未キャッシュ、または独占状態にあるかを識別する。
少なくとも一例において、第1のロード/ストアメッセージは、第1のアドレスにより特定のデータを識別し、第2のロード/ストアメッセージは、第2の異なるアドレスにより特定のデータを識別する。
少なくともいくつかの実施形態は、第1のアドレスを特定のデータにマッピングし、第2のアドレスを特定のデータにマッピングすることを提供し得る。
少なくともいくつかの実施形態は、1または複数のプロセッサデバイスを有する第1のノードと、第1のノードから独立し、1または複数のプロセッサデバイスを含む第2のノードと、ロード/ストアメモリアクセスプロトコルにより第1および第2のノードの各々にアクセス可能な共有メモリとを備える、システムを提供し得る。
少なくとも一例において、第1のノードは、第2のノードから独立したフォールトドメインを有する。
少なくとも一例において、第1のノードは、第1のオペレーティングシステムにより制御され、第2のノードは、第2のオペレーティングシステムにより制御される。
少なくとも一例において、ロード/ストアメモリアクセスプロトコルは、共有メモリリンクプロトコルに含まれ、共有メモリリンクプロトコルは、メモリアクセスプロトコルと、異なる相互接続プロトコルとの間でトグルする。
少なくとも一例において、共有メモリコントローラは、第1および第2のノードから複数のロードおよびストアオペレーションを処理して、共有メモリに対するアクセスを提供し得る。
1または複数の実施形態は、相互接続プロトコルのデータからメモリアクセスプロトコルのデータへの遷移を識別するようにエンコードされた第1の同期ヘッダをデータリンクの複数のレーンに送信し、メモリアクセスプロトコルのデータから相互接続プロトコルのデータへの遷移を識別するようにエンコードされた第2の同期ヘッダをデータリンクの複数のレーンに送信する装置、システム、機械可読ストレージ、機械可読媒体、ハードウェア、および/またはソフトウェアベースのロジック、ならびに方法を提供し得る。
少なくとも一例において、各同期ヘッダは、同期ヘッダの次のデータブロックのタイプを識別する。
少なくとも一例において、各データブロックは、予め規定された長さである。
少なくとも一例において、メモリアクセスプロトコルは、SMBに基づくプロトコルを含む。
少なくとも一例において、相互接続プロトコルは、PCIeベースのプロトコルを含む。
少なくとも一例において、各同期ヘッダは、128b/130bエンコードに準拠してエンコードされる。
少なくとも一例において、第2の同期ヘッダは、相互接続プロトコルのデータブロックを示し、第3の同期ヘッダは、データリンクの複数のレーンに送信されて、相互接続プロトコルのオーダードセットブロックを示す。
少なくとも一例において、第1の同期ヘッダは、複数のレーンにおいて交互の複数の値を用いてエンコードされ、第2の同期ヘッダは、複数のレーンの全てにおいて同一の値を用いてエンコードされる。
少なくとも一例において、メモリアクセスプロトコルのデータは、リンク層データを含み、相互接続プロトコルのデータは、トランザクション層およびデータリンク層のパケットのうちの1つを含む。
少なくとも一例において、複数の同期ヘッダは、相互接続プロトコルに準拠して規定される。
少なくとも一例において、メモリアクセスプロトコルは、ロード/ストアメモリアクセスメッセージングをサポートする。
少なくとも一例において、メモリアクセスプロトコルのデータは、共有メモリリソースにアクセスするためのメモリアクセスメッセージングを含み、複数の独立したノードの各々は、共有メモリリソースの各部分にアクセスすることを許可される。
少なくとも一例において、複数の独立したノードの各々は、独立したフォールトドメインを有する。
少なくとも一例において、データリンクは、少なくとも4つのレーンを備える。
1または複数の実施形態は、データリンクの複数のレーンにおいて第1のエンコードを用いてエンコードされる第1の同期ヘッダを受信し、第1の同期ヘッダの第1のエンコードから、相互接続プロトコルのデータからメモリアクセスプロトコルのデータへの遷移を識別し、データリンクの複数のレーンにおいて第2のエンコードを用いてエンコードされる第2の同期ヘッダを受信し、第2の同期ヘッダの第2のエンコードから、メモリアクセスプロトコルのデータから相互接続プロトコルのデータへの遷移を識別する装置、システム、機械可読ストレージ、機械可読媒体、ハードウェアおよび/またはソフトウェアベースのロジック、ならびに方法を提供し得る。
少なくとも一例において、各同期ヘッダは、同期ヘッダの次のデータブロックのタイプを識別する。
少なくとも一例において、相互接続プロトコルは、PCIeベースのプロトコルを含む。
少なくとも一例において、メモリアクセスプロトコルは、SMBに基づく。
少なくとも一例において、同期ヘッダは、128b/130bエンコード準拠してエンコードされる。
少なくとも一例において、第1のエンコードは、データリンクの複数のレーンにおいて交互の値01bおよび10bを含む。
少なくとも一例において、メモリアクセスプロトコルのデータは、複数のロード/ストアメモリアクセスメッセージを含む。
少なくとも一例において、メモリアクセスメッセージは、共有メモリリソースにアクセスする複数のメッセージを含み、システムにおける複数の独立したノードの各々は、共有メモリリソースの各部分にアクセスすることを許可される。
1または複数の実施形態は、データリンクの複数のレーンにおいて第1のエンコードを用いてエンコードされる第1の同期ヘッダを受信し、第1の同期ヘッダの第1のエンコードから、相互接続プロトコルのデータからメモリアクセスプロトコルのデータへの遷移を識別し、メモリアクセスプロトコルのデータを処理し、データリンクの複数のレーンにおいて第2のエンコードを用いてエンコードされる第2の同期ヘッダを受信し、第2の同期ヘッダの第2のエンコードから、メモリアクセスプロトコルのデータから相互接続プロトコルのデータへの遷移を識別する装置、システム、機械可読ストレージ、機械可読媒体、ハードウェアおよび/またはソフトウェアベースのロジック、ならびに方法を提供し得る。
少なくとも一例において、相互接続プロトコルは、PCIeベースのプロトコルを含み、メモリアクセスプロトコルは、SMBに基づく。
少なくとも一例において、複数の同期ヘッダは、PCIeに準拠する。
少なくとも一例において、メモリアクセスプロトコルのデータは、処理されて、メモリアクセスプロトコルのデータに含まれるメモリアクセス要求を処理する。
少なくとも一例において、メモリアクセス要求は、複数の独立したCPUノード間で共有された共有メモリリソースの要求である。
少なくとも一例において、メモリアクセス要求は、ロード/ストアメッセージを含む。
1または複数の実施形態は、相互接続プロトコルのデータからメモリアクセスプロトコルのデータへの遷移を識別するようにエンコードされた第1のデータの開始のフレーミングトークンをデータリンクの複数のレーンに送信し、メモリアクセスプロトコルのデータから相互接続プロトコルのデータへの遷移を識別するようにエンコードされた第2のデータの開始のフレーミングトークンをデータリンクの複数のレーンに送信する装置、システム、機械可読ストレージ、機械可読媒体、ハードウェア、および/またはソフトウェアベースのロジック、ならびに方法を提供し得る。
少なくとも一例において、第1のデータの開始のフレーミングトークンは、変更済みPCIe STPフレーミングトークンを含み、第2のデータの開始のフレーミングトークンは、PCIe STPフレーミングトークンを含む。
少なくとも一例において、各データの開始のフレーミングトークンは、長さフィールドを含む。
少なくとも一例において、相互接続プロトコルのデータからメモリアクセスプロトコルのデータへの遷移は、第1のデータの開始のフレーミングトークンの長さフィールドにおける値により、第1のデータの開始のフレーミングトークンにおいて示される。
少なくとも一例において、メモリアクセスプロトコルのデータは、第1のデータの開始のフレーミングトークンにおける長さフィールドにより規定されたウィンドウにおいて送信される。
少なくとも一例において、メモリアクセスプロトコルは、SMBに基づく。
少なくとも一例において、相互接続プロトコルは、PCIeベースのプロトコルを含む。
少なくとも一例において、メモリアクセスプロトコルのデータは、リンク層データを含み、相互接続プロトコルのデータは、トランザクション層およびデータリンク層のパケットのうちの1つを含む。
少なくとも一例において、物理層ロジックは、更に、メモリアクセスプロトコルのデータを送信し、メモリアクセスプロトコルのデータは、複数のロード/ストアメモリアクセスメッセージを含む。
少なくとも一例において、メモリアクセスプロトコルのデータは、共有メモリリソースにアクセスするための複数のメモリアクセスメッセージを含み、複数の独立したノードの各々は、共有メモリリソースの各部分にアクセスすることを許可される。
少なくとも一例において、複数の独立したノードの各々は、独立したフォールトドメインを有する。
少なくとも一例において、データリンクは、1または複数のレーンを備える。
1または複数の実施形態は、データリンクの複数のレーンにおいて第1のデータの開始のフレーミングトークンを受信し、第1のデータの開始のフレーミングトークンから、メモリアクセスプロトコルのデータの到着を識別し、データリンクの複数のレーンにおいて、第1のデータの開始のフレーミングトークンと異なる第2のデータの開始のフレーミングトークンを受信し、第2のデータの開始のフレーミングトークンから、相互接続プロトコルのデータの到着を識別する装置、システム、機械可読ストレージ、機械可読媒体、ハードウェアおよび/またはソフトウェアベースのロジック、ならびに方法を提供し得る。
少なくとも一例において、第1のデータの開始のフレーミングトークンは、変更済みPCIe STPフレーミングトークンを含み、第2のデータの開始のフレーミングトークンは、PCIe STPフレーミングトークンを含む。
少なくとも一例において、各データの開始のフレーミングトークンは、長さフィールドを含む。
少なくとも一例において、相互接続プロトコルのデータからメモリアクセスプロトコルのデータへの遷移は、第1のデータの開始のフレーミングトークンの長さフィールドにおける値により、第1のデータの開始のフレーミングトークンにおいて示される。
少なくとも一例において、メモリアクセスプロトコルは、SMI3に基づき、相互接続プロトコルは、PCIeベースのプロトコルを含む。
少なくとも一例において、メモリアクセスプロトコルのデータが受信され、相互接続プロトコルのデータが受信される。
1または複数の実施形態は、データリンクの複数のレーンにおいて、相互接続プロトコルからメモリアクセスプロトコルへの遷移を識別するようにエンコードされた第1のデータストリームの終了のフレーミングトークンを送信し、メモリアクセスプロトコルへの遷移後にメモリアクセスプロトコルのデータを送信し、メモリアクセスプロトコルから相互接続プロトコルへの遷移を識別するべく、メモリアクセスプロトコルのリンク層制御データを送信する装置、システム、機械可読ストレージ、機械可読媒体、ハードウェアおよび/またはソフトウェアベースのロジック、ならびに方法を提供し得る。
少なくとも一例において、リンク層制御データが送信されるまで、メモリアクセスプロトコルのデータは、データリンクに送信される。
少なくとも一例において、メモリアクセスプロトコルへの遷移により、データリンクにおいてデータを処理する相互接続プロトコルロジックから、データリンクにおいてデータを処理するメモリアクセスプロトコルロジックへの遷移が生じる。
少なくとも一例において、メモリアクセスプロトコルは、SMBに基づくプロトコルを含む。
少なくとも一例において、相互接続プロトコルは、PCIeベースのプロトコルを含む。
少なくとも一例において、第1のデータストリームの終了のフレーミングトークンは、変更済みPCIe EDSフレーミングトークンを含む。
少なくとも一例において、PCIe EDSは、複数のPCIeトランザクション層パケットおよびPCIeのオーダードセットブロックの到着のセットの終了を示すべく送信される。
少なくとも一例において、メモリアクセスプロトコルのデータは、リンク層データを含み、相互接続プロトコルのデータは、トランザクション層およびデータリンク層のパケットのうちの1つを含む。
少なくとも一例において、メモリアクセスプロトコルのデータが送信され、複数のロード/ストアメモリアクセスメッセージを含む。
少なくとも一例において、メモリアクセスプロトコルのデータは、共有メモリリソースにアクセスするための複数のメモリアクセスメッセージを含み、複数の独立したノードの各々は、共有メモリリソースの各部分にアクセスすることを許可される。
少なくとも一例において、複数の独立したノードの各々は、独立したフォールトドメインを有する。
1または複数の実施形態は、相互接続プロトコルからメモリアクセスプロトコルへの遷移を識別するようにエンコードされたデータリンクの複数のレーンにおいて、第1のデータストリームの終了のフレーミングトークンを受信し、第1のデータストリームの終了のフレーミングトークンに基づいたメモリアクセスプロトコルのリンク層ロジックの使用へと遷移し、メモリアクセスプロトコルのリンク層データを受信し、メモリアクセスプロトコルのリンク層制御データを受信して、メモリアクセスプロトコルから相互接続プロトコルへの遷移を識別し、リンク層制御データに基づいた相互接続プロトコルのリンク層ロジックの使用へと遷移する装置、システム、機械可読ストレージ、機械可読媒体、ハードウェアおよび/またはソフトウェアベースのロジック、ならびに方法を提供し得る。
少なくとも一例において、メモリアクセスプロトコルは、SMBに基づく。
少なくとも一例において、相互接続プロトコルは、PCIeベースのプロトコルを含む。
少なくとも一例において、第1のデータストリームの終了のフレーミングトークンは、変更済みPCIe EDSフレーミングトークンを含む。
少なくとも一例において、メモリアクセスプロトコルのデータは、リンク層データを含み、相互接続プロトコルのデータは、トランザクション層およびデータリンク層のパケットのうちの1つを含む。
少なくとも一例において、メモリアクセスプロトコルのデータは、複数のロード/ストアメモリアクセスメッセージを含む。
本明細書全体で「一実施形態」または「実施形態」に言及する場合、その実施形態に関連して説明された特定の機能、構造または特性が、本発明の少なくとも1つの実施形態に含まれることを意味する。従って、本明細書を通して、様々な箇所における「一実施形態において」または「ある実施形態において」という文言が現れても、必ずしも全てが同一の実施形態を指している訳ではない。更に、複数の特定の機能、構造、または特性は、1または複数の実施形態において、任意の好適な形で組み合わされ得る。
上述の本明細書において、詳細な説明は、複数の特定の例示的な実施形態を参照して提供される。しかし、添付の特許請求の範囲で記載される本発明のより広い趣旨および範囲を逸脱することなく、様々な修正および変更がなされ得ることは明らかであろう。従って、本明細書および複数の図面は、限定的意味ではなく、例示的意味で顧慮されるものである。更に、上述の実施形態および他の例示的な言語を用いる場合、同一の実施形態または同一の例を必ずしも指すわけではなく、異なる別個の実施形態、ならびに潜在的に同一の実施形態を指すことがある。