(57)【要約】【課題】並列コンピューティングシステムに使用されるネットワークインターフェースカードを提供する。【解決手段】ネットワークデバイスは、プライベートローカルメモリとパブリックローカルメモリに分けられるローカルメモリ、ローカルキャッシュ、ワーキングレジスタを含む複数のプロセッサを相互接続するネットワークを介して、データフローを管理するコントローラと、複数のプロセッサに転送されることになっているデータを受け取る、コントローラに結合された複数のキャッシュミラーレジスタとを備え、前記コントローラは、要求に応答して、プロセッサを中断させることなく、要求されたデータをじかにパブリックメモリに転送することと、要求されたデータを転送用の少なくとも１つのキャッシュミラーレジスタを介して、プロセッサローカルキャッシュと、プロセッサワーキングレジスタとに転送することとにより、データを受け取る。【選択図】図１Ａ
2010508591.tif 000002
【特許請求の範囲】
【請求項１】
プライベート・ローカル・メモリとパブリック・ローカル・メモリに分けられるローカル・メモリ、ローカル・キャッシュ、および、ワーキング・レジスタを含む複数のプロセッサを相互接続するネットワークを介して、データフローを管理するコントローラと、
前記コントローラに結合された複数のキャッシュ・ミラー・レジスタであって、前記複数のプロセッサに転送されることになっているデータを受け取るキャッシュ・ミラー・レジスタと
を備え、
前記コントローラは、要求に応答して、前記複数のプロセッサを中断させることなく、要求されたデータをじかにパブリック・メモリに転送することと、要求されたデータを転送用の少なくとも１つのキャッシュ・ミラー・レジスタを介して、プロセッサ・ローカル・キャッシュと、プロセッサ・ワーキング・レジスタとに転送することとにより、データを受け取る
ネットワーク・デバイス。
【請求項２】
前記コントローラは、さらに、要求に応答して、少なくとも１つのキャッシュ・ミラー・レジスタを介して前記プロセッサで管理されるプロセッサ・パブリック・メモリにデータを受け入れる
請求項１に記載のネットワーク・デバイス。
【請求項３】
前記コントローラは、さらに、要求に応答して、少なくとも１つのキャッシュ・ミラー・レジスタを選択し、前記少なくとも１つのキャッシュ・ミラー・レジスタ内の少なくとも１つの記憶場所を選択してデータを受け取り、要求側のプロセッサのメモリ・マネージャに対して、前記選択された少なくとも１つのキャッシュ・ミラー・レジスタを特定する少なくとも１つのキャッシュ・ミラー・レジスタを介して前記データを受け取る
請求項１に記載のネットワーク・デバイス。
【請求項４】
並列コンピュータ内の複数のコンピューティング・ノードであって、それぞれがプロセッサと、複数のセルを含む複数のＮＩＣレジスタとを備えているコンピューティング・ノードと、
少なくとも１つのリモート・ノードからのデータを、プロセッサＰＲＥＱに対してローカルである指定された複数のＮＩＣレジスタ内のセルに入れるように求め、その要求に応答して、要求されたデータを、前記指定されたＮＩＣレジスタ内のセルに転送するように構成されているプロセッサＰＲＥＱと
を備えるネットワーク・デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願）
開示されるシステムおよび動作方法は、参照によって全体が本明細書中に組み入れられている以下の特許および特許出願に開示された主題に関するものである。
１．発明者としてＣｏｋｅ  Ｓ．Ｒｅｅｄ氏の名前を挙げた「Ａ  Ｍｕｌｔｉｐｌｅ  Ｌｅｖｅｌ  Ｍｉｎｉｍｕｍ  Ｌｏｇｉｃ  Ｎｅｔｗｏｒｋ（マルチレベルの最小論理ネットワーク）」と称する米国特許第５，９９６，０２０号。
２．発明者としてＪｏｈｎ  Ｈｅｓｓｅ氏の名前を挙げた「Ａ  Ｓｃａｌｅａｂｌｅ  Ｌｏｗ  Ｌａｔｅｎｃｙ  Ｓｗｉｔｃｈ  ｆｏｒ  Ｕｓａｇｅ  ｉｎ  ａｎ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｓｔｒｕｃｔｕｒｅ（相互接続構造に使用される低レイテンシ（遅延時間）の短いスケーラブル・スイッチ）」と称する米国特許第６，２８９，０２１号。
３．発明者としてＣｏｋｅ  Ｒｅｅｄ氏の名前を挙げた「Ｓｅｌｆ−Ｒｅｇｕｌａｔｉｎｇ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｓｔｒｕｃｔｕｒｅ（相互接続構造の自己調整）」と称する２００４年７月９日出願の米国特許出願第１０／８８７，７６２号。
４．発明者としてＣｏｋｅ  Ｓ．Ｒｅｅｄ氏とＤａｖｉｄ  Ｍｕｒｐｈｙ氏の名前を挙げた「Ｈｉｇｈｌｙ  Ｐａｒａｌｌｅｌ  Ｓｗｉｔｃｈｉｎｇ  Ｓｙｓｔｅｍｓ  Ｕｔｉｌｉｚｉｎｇ  Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ（誤り訂正を利用する高度並列スイッチング・システム）」と称する米国特許出願第１０／９７６，１３２号。
【０００２】
並列コンピューティング・システムのノードは、ネットワークとネットワーク・インターフェース・コンポーネントとを含む相互接続サブシステム（interconnect subsystem）により接続される。
並列処理要素がノード（ときには、コンピューティング・ブレードと呼ばれることもある）内に位置づけられる場合には、これらのコンピューティング・ブレードは、ネットワーク・インターフェース・カード（ときには、このインターフェースが別のカード上にないこともある）を含む。
一部、このネットワークの特性に基づいて、オペレーティング・システムが選択される。
ネットワーク・インターフェース・カード（ＮＩＣ）は、それらのプロセッサ、プロセッサ・インターフェース・プロトコル、ネットワーク、オペレーティング・システムの特性を前提として、最高の性能を達成するように設計されている。
【発明の概要】
【課題を解決するための手段】
【０００３】
ネットワーク・デバイスの一実施形態により、コントローラは、複数のプロセッサを相互接続するネットワークを介して、データフローを管理する。
これらの複数のプロセッサは、プライベート・ローカル・メモリとパブリック・ローカル・メモリに分けられるローカル・メモリ、ローカル・キャッシュ、及びワーキング・レジスタを含む。
このネットワーク・デバイスはさらに、これらの複数のプロセッサに転送されることになっているデータを受け取る、上記コントローラに結合された複数のキャッシュ・ミラー・レジスタも含む。
上記コントローラは、要求に応答して、このプロセッサを中断させることなく、要求されたデータをじかにパブリック・メモリに転送することで、また、要求されたデータを転送用の少なくとも１つのキャッシュ・ミラー・レジスタを介して、プロセッサ・ローカル・キャッシュにも、プロセッサ・ワーキング・レジスタにも転送することで、データを受け取る。
【０００４】
例示システム、および構造と動作方法の双方に関する関連技術の実施形態は、以下の説明および添付図面を参照すれば、もっともよく理解されるであろう。
【図面の簡単な説明】
【０００５】
【図１Ａ】処理ノードに、複数のネットワーク・インターフェース・カード（ＮＩＣ）が接続されているのを示す略ブロック図である。
【図１Ｂ】パブリック・メモリに向けられたデータがプロセッサを通る処理ノードに、複数のネットワーク・インターフェース・カード（ＮＩＣ）が接続されているのを示す略ブロック図である。
【図２】ＮＩＣコントローラを示すブロック図である。
【図３】中央スイッチにより接続される処理ノード（ブレード）を含むシステムのブロック図である。
【図４】ギャザー・スキャッタ・レジスタのギャザー部分を示すブロック図である。
【図５】データをＮＩＣスイッチからギャザー・スキャッタ・レジスタのギャザー部分に運ぶためのツリー相互接続を示す略図である。
【図６】プロセッサとＮＩＣとの間で渡されるすべてのデータがギャザー・スキャッタ・レジスタを通る他の実施形態を示す略ブロック図である。さらに、プロセッサのメモリ・コントローラには連絡されないデータがギャザー・スキャッタ・レジスタを通る。
【図７】ＮＩＣ上にＤａｔａ  Ｖｏｒｔｅｘ（登録商標）スイッチを使用し、さらに中央スイッチング・ハブ内にもＤａｔａ  Ｖｏｒｔｅｘ（登録商標）スイッチを使用する並列コンピュータのブロック図である。
【図８Ａ】ただ１つのデータ行を含むただ１つのＮＩＣレジスタを示す略図である。
【図８Ｂ】２つのデータ行を含む複合ＮＩＣギャザー・スキャッタ・レジスタを示すブロック図である。
【図９】それぞれのレジスタが８つのセルを含んでいるＴギャザー・スキャッタ・レジスタ（T Gather-Scatter register）から成る集まりを示す略図である。
【発明を実施するための形態】
【０００６】
クラスタ・コンピュータ用の現在のオペレーティング・システムは、レイテンシが大きく、かつ、短いパケットを効率的に運ぶことのできない利用可能ネットワークの特性に基づいて設計されている。
これらの欠点がＤａｔａ  Ｖｏｒｔｅｘ（登録商標）ネットワークにより除去されることを前提として、短いパケットに基づいて設計された新たなオペレーティング・システムが使用できる。
Ｄａｔａ  Ｖｏｒｔｅｘ（登録商標）ネットワークおよび新たなオペレーティング・システムを用いて可能となる改良は、性能を最適化する新型のネットワーク・インターフェース・カードにより促進される。
本明細書中の開示内容は、これらの改良されたシステムへの使用に適した新規なネットワーク・インターフェース・カードを述べている。
本明細書中に述べられるＮＩＣのいくつかの実施形態の特徴は、ＮＩＣ上のＤａｔａ  Ｖｏｒｔｅｘ（登録商標）により、短いパケットがレジスタに入れられることである。
これらのレジスタは、このシステムの全域からデータを集め、かつ、そのデータを、これらのプロセッサでいつでも使用できる状態にするのに役立つものである。
これらのレジスタは、そのキャッシュの一部のコピーをプロセッサに保存する（mirror）。一実施形態では、それぞれのレジスタには、複数のデータ入力項目（データエントリ）が入っている。
いくつかの実施形態では、これらのレジスタ、例えばキャッシュ・ミラー・レジスタ（ＣＭＲ）と呼ばれるもの、あるいは、ギャザー・スキャッタ・レジスタと呼ばれるものにはそれぞれ、ＮＩＣ上にキャッシュの一部を「コピー保存（mirrored）」するようにデータのキャシュ・ラインが入っている。
【０００７】
いくつかの実施形態では、ネットワーク・インターフェース・カード（ＮＩＣ）は、プロセッサと協働して、このシステムを通るデータの流れを管理するコントローラ（これは、スケジューラと呼ばれることもある）を含む。
別のＮＩＣ構成要素は、プロセッサに転送されることになっているデータを受け取るキャッシュ・ミラー・レジスタ（ＣＭＲ）の集まりである。
データを、ローカル・メモリのプロセッサ・メモリ（プライベート・ローカル・メモリとパブリック・ローカル・メモリに分けられる）に受け取るように求めるプロセッサは、このような転送を処理する要求を上記コントローラに送る。
この転送がパブリック・メモリに行われる場合には、ＮＩＣは、プロセッサを中断させることなく、このような転送を処理する。
この転送が、１）プロセッサのキャッシュ、２）プロセッサ・ワーキング・レジスタ、または、３）プロセッサで管理されるパブリック・メモリに行われる場合には、受取り側のコントローラは、データを受け取るもの（１つまたは複数）となるレジスタ内の記憶場所または記憶場所の集まりだけでなく、レジスタまたはレジスタの集まりも選択して、そのレジスタの識別子を受取り側のメモリ・マネージャに知らせる。
一実施形態では、このレジスタ識別子は、送り側のコントローラにも送られる。
送り側のコントローラは、受取り側のノード、および適切なノード上の受取り側のレジスタの識別子を、データパケット・ヘッダーに入れる。
１つまたは複数のパケットを含むメッセージを適正なＣＭＲに送る。
レジスタには、単一の供給源からのパケット、または複数の供給源からのパケットが入っていることがある。
レジスタには、ノード・プロセッサに受け渡されることになっているキャッシュ・ラインが入っていることが多い。
異なる供給源からのパケットを同一レジスタに入れることは、データを集める効率的なやり方である。
すべてとは限らないが、いくつかの場合に、パケットをリモート・ノードに向けて送るプロセッサは、このターゲット・ノード・コントローラにパケットを送って、このような転送をスケジュールすることでデータを要求するようにリモート・ノードに指示する。
この例示開示内容は、これらの構成要素の物理的な相互接続を述べ、さらにデバイス間のデータの流れも述べている。
【０００８】
ＣＭＲへの効率的なローディングは、短いパケットを処理できるスイッチによって処理される。
Ｄａｔａ  Ｖｏｒｔｅｘ（登録商標）は、このタスクを処理するのに充分適したスイッチである。
【０００９】
並列処理システムは、ネットワークにより相互接続された複数のノードを含む。
この例示開示内容は、それらの処理ノードをネットワーク・システムに接続する手段および方法を述べている。
有用なクラスのアプリケーションでは、ネットワーク・システム内の所与のプロセッサはたいてい、アイドル状態であり、処理ノードから処理ノードへとメッセージ・パケットが移動するのに費やされる時間により、少なくとも一部望ましくない状態がもたらされる。
移動時間は、レイテンシと呼ばれる。
レイテンシの一因となる第１のファクタは、メッセージ・パケットがネットワーク上で費やす時間である。
この時間は、上記の組み入れられた特許および特許出願に記載されているネットワーク・システムを用いることで、大幅に減らされる。
この時間の別の部分は、ネットワークとコンピューティング・ノードとの間のインターフェースにおいて、ハードウェアとソフトウェアのオーバーヘッドによるものである。
このシステムでは、インターフェース・レンテンシが大幅に減らされる。
この例示構造および例示システムはまた、プロセッサの中断が極力減らされるという利点もある。
この例示構造および例示システムの他の利点は、ギャザー動作とスキャッタ動作を効率的に処理することである。
【００１０】
このシステムは複数のコンピューティング・ノードを含む。
それぞれのコンピューティング・ノードは、複数のスイッチ・チップを利用するネットワークにより接続された１つのＮＩＣを持っている。
例示実施形態では、それぞれのＮＩＣは１つまたは複数のＤａｔａ  Ｖｏｒｔｅｘ（登録商標）スイッチ・チップを含み、また、このネットワークは１つまたは複数のＤａｔａ  Ｖｏｒｔｅｘ（登録商標）スイッチ・チップを含む。
【００１１】
図１Ａを参照すると、コンピューティング・ノード１１０とＮＩＣ１００から成る第１のシステム実施形態を略ブロック図が示している。
このコンピューティング・ノードは、１つまたは複数のマイクロプロセッサと、関連するメモリを含む。
さらに、このコンピューティング・ノードは、ディスク・ドライブと、おそらく他のハードウェアを含むことがある。
この例示設計は、２つの処理チップを持っている。
他の設計は、チップの数が異なる場合もある。
この例示プロセッサは、関連するオフチップ・キャッシュを持っている。
他の設計では、このプロセッサ・キャッシュのすべてがプロセッサ・チップ上にあることもある。
図１Ａの例示設計では、プロセッサとＮＩＣとの間のやり取りのすべてが、プロセッサ１（１５０）により実行される。
他の設計では、ＮＩＣは、プロセッサ１およびプロセッサ２とじかにやり取りできる。  ＮＩＣは、プロセッサ１を介して、プロセッサ１のパブリック・メモリ１５６にアクセスする。
プロセッサ１からＮＩＣへのやり取りは、この例示開示内容では、メッセージ・パケットをＮＩＣに送ることとして述べられている。
実際は、プロセッサ１は、この動作を、メモリ・マップドＩ／Ｏ（ＭＭＩＯ）への格納を行うものと見なしている。
多くの場合に、パケットを送る用語は、実際は、記述の前後関係により、異なる解釈を持つことがある。
【００１２】
ＮＩＣ１００は、処理ノード１１０に送られようとするデータを保持するために、３つの主要構成要素、すなわち、１）ＮＩＣスイッチ１４０、２）コントローラ１２０、レジスタ１３０を含む。
これら３つの構成要素の動作は、このシステムを通してメッセージ・パケットを追跡する例により述べられる。
【００１３】
例１は、プロセッサ２（１５２）がリモート・ノードにデータを要求するケースを扱っている。
プロセッサ２は、図２に示されるＮＩＣコントローラ１２０のコントローラ・ロジックユニット２５０内にあるメモリ・バッファ・スタック２３０中の要求メモリ・バッファ２２０にプロセッサ２で要求を書き込ませることで、その要求を、プロセッサ１を介してコントローラ１２０に送る。
このコントローラは、これらの要求が入っている要求バッファのスタックを含む。
この要求バッファがオーバーフローしないようにする一方法は、所与の時間に、限られた数の未完了要求（outstanding request）しか認めないことである。
この要求には、ターゲット・データを含むノードの識別子が入っており、さらに、このデータを格納する記憶場所の物理アドレスまたは仮想アドレスも入っている。
５つのケースが考察される。
【００１４】
ケースＩ。
コンピューティング・ノード上のプロセッサＰＲ（１５０または１５２）は、データをリモート・ノードのパブリック・メモリから、プロセッサＰＲのパブリック・メモリ空間内の記憶場所に転送するように求める。
現行例よりも興味深いケースでは、プロセッサＰＲは、この記憶場所の仮想アドレスを与える。
この要求は、コントローラ１２０に要求パケット（request packet）を送ることで、出される。
プロセッサＰＲがプロセッサ２（１５２）である場合には、この要求は、プロセッサ１（１５０）を通る。
この要求パケットは、ライン１７０とライン１０２上を進む。
この要求パケットには、要求番号（request number）を示すフィールド（図２に示されるバッファ２３０内の記憶場所）、この要求がリモート・ノードのローカル・パブリック・メモリ中のデータに対するものであることを示すフィールド、転送されるデータの量が入っているフィールド、転送されるデータの仮想アドレス（この仮想アドレスは、そのデータがリモート・ノード上にあることを示している）を示すフィールド、および、プロセッサＰＲがアクセスするメモリ上においてデータが格納される記憶場所の仮想アドレスを示すフィールド、が入っている。
コントローラ１２０は、この仮想アドレスを持つデータが格納されているリモート・ノードのラベル（標識）を含むテーブルを持っている。
図２を参照すると、コントローラ・ロジックユニット２５０は、その要求を、メッセージ番号で示されるバッファ２３０内の記憶場所に入れる。
プロセッサは、限られた数の未完了要求しか持つことができないために、バッファ２３０は決してオーバーフローしない。
一実施形態では、要求は、受け取られる順番に処理される。他の実施形態では、要求は、一部、サービス基準の品質に基づいて処理される。
データが適正な記憶場所にうまく受け渡されるまで、この要求は、要求バッファ（request buffer）２３０にとどまる。
コントローラ・ロジックユニット２５０は、要求バッファ２３０からの要求にアクセスし、また、例えばコンピューティング・ノードの物理的記憶場所を格納している物理的ページテーブル・マップ（ＰＴＭ）２４０にアクセスすることで（ときには、アクセスされるメモリの仮想アドレスの先行ビットに基づいて）、転送されるデータを格納しているコンピューティング・ノードの物理的記憶場所を捜す。
次に、コントローラ・ロジックユニット２５０は、データに対する要求を、アクセスされるデータ（このデータは、送り側のプロセッサＰＳに関連する）を格納しているコンピューティング・ノードに関連するＮＩＣに送る。
この要求パケットには、バッファ２３０内の要求の物理的記憶場所である要求パケット番号を示すフィールドが入っている。
この要求は、スイッチング・システムを介して、ターゲットＮＩＣに渡される。
図３は、ＮＩＣ１００に接続され、かつスイッチング・システム３００にも接続されたブレード１１０を示している。
例示実施形態では、スイッチング・システム３００は、上記の組み入れられた特許および特許出願に記載されているタイプのＤａｔａ  Ｖｏｒｔｅｘ（登録商標）である。
【００１５】
要求がリモート・ノードへ移動中であるとき、コントローラ・ロジックユニット２５０は、到着するパケット（１つまたは複数）が格納される仮想メモリ基準（virtual memory reference）の物理的記憶場所を保持しているＴＬＢ２１０にアクセスする。
この物理的記憶場所が決定されて、それがバッファ２３０内の要求パケットの追加フィールドに追加される。
この設計の一面は、ＴＬＢ内の物理的記憶場所へのアクセスが、この要求パケットを送ることと同時に行われて、このような探索（ルックアップ）で、このプロセスへのレイテンシが増さないようにすることである。
ＮＩＣ上のメモリ量は、ＴＬＢ２１０がローカル・メモリの物理アドレスだけを保持するという事実により、また、ＰＴＭ２４０が、ブレード上のメモリのアドレスではなく、ブレード・アドレスだけを保持するという事実により、減らされる。
公知の技術を使用して、ハッシング技法を実行し、かつ、最近アクセスされたアドレスを格納するための特定の記憶場所を含めるように、ＴＬＢとＰＴＭを設計することもある。
シーケンスの構成要素（メンバ）を、このシーケンスの第１の構成要素からのオフセットに基づいて格納するのに用いられる技法は、Ｃなどの言語の特徴である。
この技法は、ＴＬＢのサイズを減らすのに有利に使用できる。
【００１６】
要求は、リモート・ノード（データ送り側のノード）に到着して、コントローラ１２０のコントローラ・ロジックユニット２５０に入る。
コントローラ・ロジックユニット２５０は、この要求をバッファ２３２に入れる。
複数の様々な技法を使用して、バッファ２３２がオーバーフローしないようにすることもある。
一実施形態では、バッファ２３２は、このシステム内に、処理ノード（ブレード）の数のＮ倍の要求数の容量を持っている。
このシステムは、いかなるノードもＮ個よりも多くのデータパケットを個々のリモート・ノードには要求できないというルールで制約を受ける。
一実施形態では、バッファ２３２は、Ｎ個のセクションに分けられ、しかも、それぞれのブレード用に１つのセクションが確保される。
他の実施形態では、送り側のコントローラは、要求を送る許可を求める。
さらに他の実施形態では、バッファの調整がまったく行われず、また、フル・バッファ（全バッファ、full buffer）２３２を用いてのコントローラへの要求が拒否されて、ＡＣＫが戻される。
確実にバッファ２３２がオーバーフローしないようにするために、トークンの使用を含め、他の技法が使用されることもある。
超大型のシステムでは、バッファ２３２は、Ｎ個のセクションに分けられ、しかも、一群のブレード（例えば、キャビネット内のブレードのすべて）用に１つのセクションが確保される。
【００１７】
コントローラ・ロジックユニット２５０は、ＴＬＢにアクセスして、コントローラ・ロジックユニット２５０のローカル・パブリック・メモリ空間内にデータを見出すことで、バッファ２３２からの要求を処理する。
次に、要求されたデータは、そのヘッダーに入っているユニット２３０内のパケット要求のアドレスとともに、要求側のコントローラ・ユニットに戻される。
コントローラ・ロジックユニット２５０は、その物理アドレスをバッファ２３０から得て、そのデータを、ローカル・パブリック・メモリ空間内の適正な物理アドレスに送る。
【００１８】
データ要求に関連するデータ転送が複数のパケットを含む一実施形態では、要求されるパケットの数は、ユニット２３０に格納された要求パケットの中に示される。
これらのパケットがそれぞれ到着すると、コントローラ・ロジックユニット２５０は、特定された要求に関連する到着パケットの数の現在合計高を維持する。
したがって、転送が完了したときに、コントローラ・ロジックユニット２５０は通知がある。
完了時に、コントローラは、確認応答（ＡＣＫ）をプロセッサＰＲとプロセッサＰＳに送る。
ＡＣＫに応答して、プロセッサＰＲは、別の要求で使用される要求パケット番号を解放する。
【００１９】
コントローラはまた、データ要求側のプロセッサにＡＣＫパケットを送って、そのデータが所定の場所にあることを示す。
ＡＣＫに応答して、プロセッサは、データに対する未完了要求の数の記録を取るカウンタを減らす。
データがうまく転送された（いくつかの実施形態では、ＡＣＫにより表される）後で、コントローラ・ロジックユニット２５０は、別の要求に対して、バッファ２３０内の該当記憶場所を解放する。
いくつかの実施形態では、所与の要求に応答して受け渡されるパケットが、順番に到着する。他の実施形態では、所与の要求に関連するパケットは、コントローラによりパケットを順番に並べられるようにするパケット番号を、それらのパケットのヘッダーに含む。  中央スイッチ・ハブに複数のスイッチ・チップを使用するさらに他の実施形態では、複数のライン１２４は、この中央スイッチ・ハブからデータを受け渡す。
また、メッセージ内でのパケットの適正な配置は、そのパケットがどのラインに到着するかによって決まる。
ケースＩの説明は、１つまたは複数のパケットをローカル・パブリック記憶素子に入れることのできるメモリ・コントローラを、コントローラ１２０が利用することを前提としている。
【００２０】
ケースＩＩ。
プロセッサＰＲは、リモート・パブリック・メモリ内のデータを、プロセッサＰＲのキャッシュまたはワーキング・レジスタ内の記憶場所に格納するように求める。
プロセッサＰＲは、そのデータを、メモリ・バッファ１３０内に位置づけられたＣＭＲ１６０に格納するように求める。
それぞれのＣＭＲレジスタはロックを含み、そのロックが解除されるまで、データがプロセッサＰＲに流れないようにしている。
プロセッサＰＲは、どのＣＭＲユニットが使用してないか追跡する記憶場所を別にしておく。
図４は、それぞれのＣＭＲがＮ個のセル（記憶場所）を含んでいるＭ個のＣＭＲユニットを含むバッファ１３０を示している。
データを要求するプロセッサは、関連するＮＩＣ上のコントローラ１２０に要求を送って、所与の仮想アドレスでのデータ項目を、バッファ１３０内のＭ・Ｎセルの１つまたは複数に送るように求める。
コントローラ・ロジックユニット２５０は、ＰＴＭを利用して、その要求されたデータが入っているノードの物理的記憶場所を突き止める。
要求パケットは、このデータを受け取るセル（１つまたは複数）のアドレスだけでなく、受取り側のノードの物理アドレスも含む。
この要求パケットはまた、その要求されたデータの仮想アドレスも含む。
この要求パケットは、データを含むノードにシステム・スイッチ３００を介して進む。  ケースＩの場合と同様に、受取り側のコントローラ・ロジックユニット２５０は、要求をバッファ（図示されてない）に入れて、要求を処理できるまで、その要求を保持する。  リモート・データを含むノードが要求を処理するときに、そのノードは、ローカルＴＬＢにアクセスして、そのデータの物理アドレスを見出す。
そのデータを含むパケットは、ライン１２４上で、プロセッサＰＲに関連するＮＩＣ上のバッファ１４４に進む。
バッファ１４４にオーバーフローさせない方法は、バッファ２３２のオーバーフロー管理と同一の方法で処理される。
ＮＩＣスイッチに到着したデータパケットは、データ・ライン１１８を介して、適正なＣＭＲセルに送られる。
【００２１】
図４は、それぞれのＣＭＲ１６０がＮ個のデータ・セル４０２を含んでいるＭ個のＣＭＲを含むバッファ１３０を示している。
ＮＩＣスイッチが５１２個の出力ポートを持ち、また、それぞれのＣＭＲ内のセルの数が８であって、かつＮが６４に等しい例では、それぞれのセルは、この場合、ＮＩＣスイッチの一意の出力ポートに接続されることもある。
ＮＩＣスイッチ１４０がＤａｔａ  Ｖｏｒｔｅｘ（登録商標）スイッチであり、また、これらのポートのそれぞれが２Ｇｂ／秒にて動作する場合には、ＣＭＲに入る最大バンド幅は１テラビット／秒を超える。
プロセッサはまた、ローカル・パブリック・メモリからの要求データをプロセッサＮＩＣ上のＣＭＲに送るように求めることもある。
このデータは、データ・ライン１０６を通り、またスイッチ１３０によりライン１２０に切り替えられて、ＮＩＣスイッチまで進む。
【００２２】
ＣＭＲセルの総数は、ＮＩＣスイッチの出力ポートの数を越えることもある。
多数のＣＭＲセルを可能にする一実施形態では、ＣＭＲは複数のバンクに分けられ、また、それぞれのバンクは、ＮＩＣスイッチ内の出力ポートの数に等しい数のセルを持っている。
このデータ・ヘッダー内の上位のビットにより、このデータは、ＮＩＣスイッチと、ＣＭＲのバンクとの間のツリーを通って分岐することができる。
ＣＭＲのバンクが４つある上記構成が図５に示されている。
データパケットをＮＩＣスイッチからＣＭＲセルに運ぶラインの一部だけが図示されている。
【００２３】
一実施形態では、プロセッサは、ただ１つの要求を出して、複数のデータ項目を関連するＣＭＲに格納することもある。
例えば、プロセッサは、一連のデータ項目を、リモート記憶場所に連続的に格納して、プロセッサＣＭＲバッファ内のセル行に入れるように求めるか、あるいは、一連のデータ項目を、プロセッサＣＭＲバッファ内のセル列に格納するように求めることもある。
所与の要求に関連するパケットのそれぞれは、ＣＭＲ内のセルのアドレスだけでなく、要求番号も含む。
異なる系列のデータ項目をセル列に格納すれば、プロセッサは、この例示構造および例示システムで可能となる強力で、かつ有用なコンピューティング・パラダイムで、複数のデータ・ストリームに同時にアクセスできる。
所与の要求に関連するパケットのすべてが、プロセッサＰＲに関連するＮＩＣで受け取られるときには、プロセッサＰＳにＡＣＫが戻される。
【００２４】
データがＣＭＲに転送されるときには、いつ所与のＣＭＲラインがいっぱいとなって、プロセッサに転送できる状態になるのか決定する技法が使用される。
ＣＭＲライン情報を追跡する一方法は、コントローラ・ロジックユニット２５０内にある特定の組のＭ個のレジスタ（描かれてない）によって管理される。
これらのレジスタは、ここでは「ＣＭＲフル・ステータス・レジスタ」と呼ばれている。
プロセッサＰＲが複数の要求を出して、データをＧＳＲの行Ｋに入れる前に、プロセッサＰＲは、行Ｋ中のどのセルがこのデータを受け取ることになっているのか突き止める。  プロセッサＰＲは、特定のパケットをコントローラ・ロジックユニット２５０に送って、その情報を示す。
プロセッサが、データをＣＭＲレジスタのサブセットＳに入れる要求を送る場合には、この要求に関連する「ＣＭＲフル・ステータス・レジスタ」のすべてが更新される。
データパケットが、プロセッサＰＲに関連するＮＩＣに戻ると、「ＣＭＲフル・ステータス・レジスタ」内のデータが変更される。行Ｋに予定されるパケットが到着すると、「ＣＭＲフル・ステータス・レジスタ」Ｋ内の値が減らされる。
「ＣＭＲフル・ステータス・レジスタ」の内容がゼロに減らされるときには、ＣＭＲの行Ｋに予定されるデータのすべてが到着しており、コントローラ・ロジックユニット２５０は、普通ならデータが行Ｋから、ＰＲに関連するキャッシュに、あるいはＰＲのワーキング・レジスタに流れ込まないようにするロックを解除する。
いくつかの実施形態では、一定の時間後では、上記ロックが解除される前にデータがＣＭＲレジスタから転送されて、ＣＭＲレジスタ内のデータが有効でないという指示が出される。
このＣＭＲ内のデータが有効であるかどうかを決定する一方法は、ＣＭＲレジスタ内の最左端の記憶場所にデータを送れないようにすることである。
他のデータ項目のすべてが到着しているときに、その最左端の記憶場所にコードワードを入れて、そのデータのすべてが到着していることを示す。
上記ロックが解除されるためではなく、タイムアウトのために、データが送られる場合には、その記憶場所にはコードワードを入れず、プロセッサは、そのデータが無効であると知らせることができよう。
【００２５】
ケースＩＩＩ。
プロセッサＰは、リモート・プロセッサで追加ＣＭＲ（図示されない）に書き込ませ、また、その追加ＣＭＲをローカル・プロセッサで読み取らせることで、短いメッセージをリモート・プロセッサに送る。
バッファがオーバーフローしないようにする方法は、バッファ２３２のオーバーフロー管理と同一のやり方で処理される。
送り側のプロセッサは、その短いメッセージを受取り側のコントローラに送り、そこで、ローカルで読み取って、リモートで書き込むことのできるＣＭＲの中で、そのデータを管理する。
【００２６】
ケースＩＶ。
プロセッサＰは、プロセッサＰに対してローカルであるローカルＮＩＣコントローラにメッセージ・パケット（１つまたは複数）をプロセッサＰで送らせ、また、このメッセージ・パケットをターゲット・コントローラに上記ローカルＮＩＣコントローラで送らせることで、短いメッセージをリモート・パブリック・メモリに送る。
ターゲット・コントローラ内の特定のバッファ空間が、これらのメッセージを保持する。
バッファがオーバーフローしないようにする方法は、バッファ２３２のオーバーフロー管理と同一のやり方で処理される。
これらの短いメッセージは、アトミックなメモリ操作物（atomic memory operation）と呼ばれている。これらの短いメッセージを使用すれば、分散形共用メモリ・マシン（distributed shared memory machine）内のメモリを制御できる。
プログラミング言語ＵＰＣでは、少数のアトミックなメモリ操作物は、分散形共用メモリ・マシン上でのプログラムの総体的な実行を容易ならしめる。
【００２７】
ケースＶ。
プロセッサは、例えばライン１７２を介して、じかにメモリにアクセスすることで、データを、ローカル・パブリック・メモリ空間に送るか、あるいはローカル・パブリック・メモリ空間から受け取る。
このような操作は、競合状態を避けるために慎重に行われる。
プロセッサはまた、ライン１８０を介してローカル・パブリック・メモリに接続されたコントローラを経ることで、ローカル・パブリック・メモリにアクセスすることもある。
このコントローラを介してプロセッサがローカル・パブリック・メモリにアクセスする利点は、ローカル・パブリック・メモリにアクセスポイントをただ１つ持つことで、競合状態を避けている点である。
【００２８】
図１Ｂに示される一実施形態では、データは、ＮＩＣから、プロセッサを通って、パブリック・メモリ空間に渡されることもある。
動作の詳細は、プロセッサによって決まる。
いくつかのプロセッサ（「ＡＭＤ  Ｏｐｔｅｒｏｎ」プロセッサを含む）では、メモリ・コントローラは、このプロセッサ内にあり、また、このＮＩＣでは、ＴＬＢを省略できる。
【００２９】
中央スイッチ３００内にＤａｔａ  Ｖｏｒｔｅｘ（登録商標）を使用する図３に示される分散形共用メモリシステムであって、図１Ａまたは図１Ｂ中のＮＩＣスイッチ１４０用にＤａｔａ  Ｖｏｒｔｅｘ（登録商標）を用いるこの例示開示内容に述べられたネットワーク・インターフェースを使用する分散形共用メモリシステムのエンドツーエンド・レイテンシは、極めて低い。
このレイテンシは、ＮＩＣ１００の特徴の全部または大部分を単一のチップ上に取り入れることで、さらに減らされることもある。
【００３０】
第１の実施形態では、ＮＩＣ上のレジスタを使用して、データをこれらのプロセッサに転送した。
第２の実施形態では、これらのレジスタを使用して、データをプロセッサに転送するとともに、プロセッサから転送する。
第１の実施形態では、ＮＩＣレジスタは、「キャッシュ・ミラー」と呼ばれた。
第２の実施形態では、ＮＩＣレジスタは、「ギャザー・スキャッタ」レジスタと呼ばれる。
図６を参照すると、略ブロック図は、異なるやり方でアクセスする２つのタイプのメモリを含むかもしれない一実施形態を示している。
第１のタイプのメモリ６４４は、メモリ・コントローラを介して、プロセッサに接続される。「ＡＭＤ  Ｏｐｔｅｒｏｎ」プロセッサの場合には、メモリ・コントローラは、コンピューティング・コア（１つまたは複数）と同一のシリコン・ダイ上にある。
第２のタイプのメモリ６４２は、メモリ・コントローラにより、ギャザー・スキャッタ・レジスタに接続される。
ＵＰＣなどのプログラミング言語（computing language）が使用される場合には、２つのタイプのメモリはそれぞれ、パブリック記憶領域とプライベート記憶領域に分けられることがある。
データ転送の要求は、これらのプロセッサから生じる。
図６では、このプロセッサは複数のユニット６３８を含み、また、それらのユニット６３８はそれぞれプロセッサ・コアと複数レベルのキャッシュを含む。
【００３１】
プロセッサとメモリ・コントローラがデータをキャッシュ・ライン（６４ビット・ワードを８つ含む）に移すケースに関して、「ＡＭＤ  Ｏｐｔｅｒｏｎ」プロセッサに合致する模範的な説明が与えられる。
当業者であれば、ここに提示された例が、異なるサイズ・ブロックのデータを移す広範囲のプロセッサおよびメモリ・コントローラに対応するものと解釈できるであろう。
ここに記述される技法は、ＤＲＡＭ６４４から転送されるブロックが、ＤＲＡＭ６４２から転送されるブロックに等しくないようなケースに当てはめられる。
このシステムは、２つのケースを考慮に入れることで説明される。
【００３２】
第１のケースでは、コンピューティング・ノード６９２上のプロセッサ６９０の処理コア６３８は、送り側の記憶場所から、プロセッサＮＩＣ（データ受取り側のＮＩＣはＲＮで表され、また、データ送り側のＮＩＣはＳＮで表される）のギャザー・スキャッタ・レジスタ内の一群の受取り側記憶場所に（しばしば、このような８つの記憶場所に）データが転送されるように求めている。
この要求の目的は、データを、ギャザー・スキャッタ・レジスタから、処理コア６３８内のローカル処理コア・ワーキング・レジスタ、処理コア６３８内のキャッシュまで、メモリ６４４まで、あるいは、ＲＮ上のメモリ６４２まで移せるようにすることである。
該当するケースでは、送り側の記憶場所は、リモート・メモリ６４４、メモリ６４２、またはリモート・ギャザー・スキャッタ・レジスタ６３０である。
処理コア６３８は、要求パケットを、ライン６５４を介してＳＮギャザー・スキャッタ・レジスタ６３０内の記憶場所に送ることで、要求を出す。
この要求は、ＲＮ上のプロセッサのローカル・ギャザー・スキャッタ・レジスタ内の８つの異なる記憶場所に８つの６４ビット・ワードを受け渡すように、特定のリモート・ノードに求めることが多い。
このギャザー・スキャッタ・レジスタ内のロジックは、その要求パケットをＲＮ内のＮＩＣコントローラに転送する。
ＲＮ内のＮＩＣコントローラは、その要求にラベルを割り当てて、ＮＩＣコントローラ内で、その要求のラベルに設定された記憶場所の中でその要求のコピーを維持する。
単純な実施形態では、ＲＮ内の記憶場所は、ＳＮのアドレス、すなわち、ＳＮからのデータに対する特定の要求の識別子ＲＥＱＩＤに設定される。
次に、ＲＮは、その要求を、中央ハブ・スイッチを介して、ＳＮで表されるリモート・データ送り側ＮＩＣに送る。
ＳＮコントローラは、記憶場所を割り当てて、その要求を格納する。
単純な実施形態では、ＳＮは、その要求をアドレス（ＲＮ、ＲＥＱＩＤのアドレス）に格納する。
この格納方式の有用な一面は、ＲＮが、ＳＮ内でその要求を格納する場所に関する情報、ＳＮが記憶場所を割り当て、かつ特定のパケットをＲＮに送って、その記憶場所をＲＮに知らせることによっても達成できる条件を持つことである。
様々な間接探索方式（lookup scheme）が実施されることもある。
【００３３】
要求されたデータがＳＮのギャザー・スキャッタ・レジスタ内にはまだない場合には、ＳＮ上のＮＩＣコントローラは、そのデータを、メモリ６３４またはメモリ６４２から適正なギャザー・スキャッタ・レジスタに転送する。
８つの６４ビット・ワードは、中央ハブ内の８つの異なるスイッチ・チップに転送され、次に、ノードＲＮ上のＮＩＣスイッチ６４０に転送される。
これら８つのパケットのそれぞれは、要求されるデータ、ＲＮのアドレス、要求ラベル、このデータを入れるギャザー・スキャッタ・レジスタ内のターゲット記憶場所、および、要求される８つのパケットのうちのどれを送ろうとするのか示す、整数（０、１、...７）から選ばれる一意のデータパケット識別子を含む。
パケットがうまく受け渡されると、受取り側のレジスタは、このデータパケット識別子を持つローカルＡＣＫを、その要求を格納しているＲＮコントローラ内の記憶場所に送る。
ＡＣＫを適正な記憶場所に受け渡す非常に効率的な方法は、Ｄａｔａ  Ｖｏｒｔｅｘ（登録商標）スイッチ（描かれてない）をライン６１２上に、またはギャザー・スキャッタ・レジスタのハードウェア内に使用することである。
８つのローカルＡＣＫがすべて受け取られているときには、ＲＮは、リモートＡＣＫを中央ハブ・スイッチを介してＳＮ内のＮＩＣコントローラに送る。
ＡＣＫは、Ｄａｔａ  Ｖｏｒｔｅｘ（登録商標）スイッチをＲＮ上のＮＩＣコントローラに用いることで、その要求を保持する記憶場所に送られることもある。
ＡＣＫを受け取るときには、その要求パケットは廃棄され、また、その要求を保持する記憶場所は、別の要求パケットのために解放されることもある。
その要求に関連する８つのパケットのうちの１つが適正に受け取られない場合には、ＮＡＣは、そのパケットを再送するように求める。
パケットのいっぱいのキャッシュ・ラインが受け取られているときには、そのキャッシュ・ラインは、その要求パケットで指定されるように、ＤＲＡＭ６４２、ＤＲＡＭ６３８内の正しい記憶場所、または処理コア６３８内のキャッシュに転送されることもある。
このキャッシュ・ラインがいっぱいであるかどうか決定する一方法は、第１の実施形態の記述の中で説明されている。
第１の実施形態の場合と同様に、タイミアウトによりデータを送ることも処理される。
【００３４】
第２のケースでは、プロセッサは、例えば、ＳＮがＲＮに要求を送って、ＲＮにデータを要求するように求めることで、リモート記憶場所へのデータの送りを開始させる。
次に、このプロセスは、第１のケースの場合と同様に進行する。
【００３５】
図７を参照すると、略ブロック図は、第３の実施形態を描いており、また、２つのプロセッサ７５０、メモリ７０６、ＮＩＣチップ７０２を含むコンピューティング・ノード７００を示し、さらに、中央ハブ・スイッチ・チップ７５０も示している。
図７は、この中央スイッチ・ハブに「ＡＭＤ  Ｏｐｔｅｒｏｎ」プロセッサとＤａｔａ  Ｖｏｒｔｅｘ（登録商標）チップを使用する特定の並列コンピューティング・システムを示す図解例である。
この図解例の装置および動作方法は、他のプロセッサを用いる非常に広範なクラスの並列システムに当てはめられる。ＮＩＣからデータを受け取る中央スイッチ・ハブ・チップのそれぞれに、ライン７５２により所与のコンピューティング・ノードが接続される。
ＮＩＣにデータを送る中央スイッチ・ハブのそれぞれからデータを受け取るために、ライン７５４によりコンピューティング・ノードが接続される。
多くの有用な「１ホップ（one hop）」システムでは、データを、ＮＩＣのすべてから受け取り、またＮＩＣのすべてに送るために、中央スイッチ・ハブ・チップのそれぞれが接続される。
例えば、中央スイッチ・ハブに、２５６のコンピューティング・ノードと４０のＤａｔａ  Ｖｏｒｔｅｘ（登録商標）スイッチ・チップを含む「１ホップ」システムは、コンピューティング・ノード上の２５６のＮＩＣ出力リンク７５２（中央ハブ・スイッチ・チップのそれぞれに１つ）と、４０のＮＩＣ入力リンク７５４（それぞれの中央ハブ・スイッチ・チップから１つ）を用いて構成されることもある。
【００３６】
ＮＩＣはレジスタの集まり７１０から成っている。
レジスタの集まり７１０は、単純レジスタ７２２を含み、さらに複合ギャザー・スキャッタ・レジスタ７２０も含む。
ＮＩＣはまた、出力スイッチ７４０と入力スイッチ７３０も含む。
例示ＮＩＣはまた、誤り訂正を実行して、ＡＣＫとＮＡＫを送るＥＣ−ＡＣＫユニット７８０も含む。
Ｄａｔａ  Ｖｏｒｔｅｘ（登録商標）スイッチは、それらのスイッチとしての使用に充分適している。ＮＩＣ上には、ＤＲＡＭもメモリ・コントローラもまったく含まれない。  オンプロセッサ・メモリ・コントローラ７７４を介して、システム・メモリ７０６にアクセスする。コンピューティング・ノード間で転送されるすべてのデータは、ギャザー・スキャッタ・レジスタを使用する。
図７に示されているＮＩＣは、別個のＮＩＣコントローラを含まない。
図１Ａ、図１Ｂ、図２、図６に示されるＮＩＣコントローラの機能は、「Ｏｐｔｅｒｏｎ」プロセッサにより、さらに、ギャザー・スキャッタＮＩＣレジスタに組み入れられた計算ハードウェア（computational hardware）により実行される。
【００３７】
図８Ｂとともに図８Ａを参照すると、ＮＩＣレジスタのそれぞれが複数のセルに分けられる。
セルの数は、まったく一般的なものである。
この図解例では、セルの数は８に設定され、また、セル内のビットの数は６４に設定されている。
他の例は、それよりも多くのセル、またはそれよりも少ないセルを持つこともある。
最下部の単純ＮＩＣレジスタにＳＮＲ（０）のラベルが付けられ、また、ＳＮＲ（０）のすぐ上のレジスタにはＳＮＲ（１）のラベルが付けられるといった具合にＮＩＣレジスタに番号が付けられて、Ｔ＋１の単純レジスタを持つシステムの場合には、ＳＮＲ（０）、ＳＮＲ（１）、ＳＮＲ（２）、...、ＳＮＲ（Ｔ）の順番列（シーケンス）を作り出すように、これらの単純レジスタにラベルが付けられる。
単純レジスタＳＲ（Ｄ）内のセルにラベルを付けたものが、ＳＲ（Ｄ，０）、ＳＲ（Ｄ，１）、...、ＳＲ（Ｄ，７）である。
最初のｔ個の単純ノード・レジスタ、すなわちＳＮＲ（０）、ＳＮＲ（１）、...、ＳＮＲ（ｔ−１）を使用して、残りの単純ノード・レジスタ、すなわちＳＮＲ（ｔ）、ＳＮＲ（ｔ＋１）、ＳＮＲ（ｔ＋２）、...、ＳＮＲ（Ｔ）のステータスをたどるように、整数ｔ＜Ｔが存在する。
Ｕ＋１の複合レジスタを持つシステムでは、これらの複合レジスタには、ＣＮＲ（０）、ＣＮＲ（１）、...、ＣＮＲ（Ｕ）のラベルが付けられる。
この複合レジスタＣＮＲは、Ｈ（ヘッダー・レジスタ）とＰ（ペイロード・レジスタ）という２つのレジスタを含む。
図９は、複合レジスタ内のセルの一覧表を示している。
ＣＮＲ（Ｎ）のＫ個のセル内のパケットは、Ｈ（Ｎ，Ｋ）にヘッダーを持ち、また、Ｐ（Ｎ，Ｋ）にペイロードを持っている。
複合ＮＩＣレジスタの位置Ｋにある２つのセル内のパケットには、単にＨＫとＰＫとしてラベルが付けられる。
【００３８】
データは、「Ｏｐｔｅｒｏｎ」プロセッサ７５０からライン７６０を介して、またＮＩＣ入力スイッチ７３０からライン７３２を介して、ＮＩＣレジスタ７２２のセルに転送され、またＮＩＣレジスタ７２０のセルに転送される。
ライン７６０およびライン７３２を介して入るデータは、図５に示される技法を用いて、あるいは、何か他の適切な手段により、広げられる（fanned out）ことがある。
図７は、広げる手段（ファンアウト）なしの構造を示している。
これらのＮＩＣレジスタの個々のセルは、個々にアドレス指定可能である。
それゆえ、所与のレジスタは、いくつかの異なるコンピューティング・ノードからデータを同時に受け取ることができる。
多数のセルがデータを受け取っている場合には、そのデータは、中央スイッチ・ハブ内の異なるスイッチ・チップ７５０から送られる。
同様に、所与のＮＩＣレジスタは、データを、複数のセルからライン７６０を介してプロセッサに、またライン７４２を介してＮＩＣ出力スイッチに同時に送ることができる。  ＮＩＣ出力スイッチに到着したデータは、ライン７３４を介してＮＩＣ入力スイッチに送られて、ＮＩＣが、プロセッサに受け渡されることになっているデータをもっとも有用な形式で再構成できるようにすることもある。
ＮＩＣ出力スイッチに到着したデータはまた、ライン７５２を介して中央スイッチ・ハブに送られることもある。
所与の時間に単一ＮＩＣレジスタから送られるデータは、このシステムの全域で、１つまたは複数のコンピューティング・ノード７００上の他の多数のＮＩＣレジスタに分散されることもある。
【００３９】
この図解例に示されるＮＩＣの動作は、「Ｏｐｔｅｒｏｎ」プロセッサと「ＨｙｐｅｒＴｒａｎｓｐｏｒｔＴＭ」技術のいくつかの特徴を利用している。
このプロセッサは、リモート・デバイスに書き込むことができる。
この例では、プロセッサは、ＮＩＣレジスタに書き込むことで、メッセージ・パケットをリモート・ノードに送る。
このプロセッサは、ここではリモート・デバイス内の特定記憶場所への「ｓｅｎｄ  ｗｈｅｎ  ｒｅａｄｙ（実行可能状態時に送る）」コマンドとして基準とされる１つまたは複数のコマンドを、リモート・デバイスに出すことができる。
制御に使用されるセル（セルＨ０またはセルＰ０）内の指定したビット（１つまたは複数）を、転送されるデータがリモート・デバイス内の特定記憶場所にあることを示すように設定する限り、「ｓｅｎｄ  ｗｈｅｎ  ｒｅａｄｙ」コマンドは、リモート・デバイス上のハードウェア・インターフェースとともに、このプロセッサに６４バイトのデータを転送させる。
プロセッサが、クラス「ｓｅｎｄ  ｗｈｅｎ  ｒｅａｄｙ」のコマンドを出し、かつ、所定の設定時間間隔（「ＴＩＭＥＯＵＴ」）が経過したときには、データのすべてが到着したとは限らない場合でも、リモート・デバイス上の記憶場所の内容が転送される。
ＴＩＭＥＯＵＴ状態の結果としてプロセッサにデータを転送することがまれな事象であるように、数値ＴＩＭＥＯＵＴが設定される。
ＴＩＭＥＯＵＴが実際に発生する場合には、データは、ＨｙｐｅｒＴｒａｎｓｐｏｒｔＴＭを介してプロセッサに転送されるが、ただし、このプロセッサは、パケット内に適正なデータがないことを制御セル・ビットが示すことに留意している。
プロセッサが無効なパケットを受け取る場合には、プロセッサは、そのオペレーティング・システムで示されるやり方で応答する。
プロセッサは、クラス「ｓｅｎｄ  ｎｏｗ（今、送る）」の１つまたは複数のコマンドを出す場合もある。
その場合、データを直ちに転送する。このコマンドは、そのデータが所定の場所にあることをプロセッサが確認したときだけ、使用されるべきである。
データが実行可能状態にあることをプロセッサに知らせる方法があるが、ただし、プロセッサは、通知を受け取るときは必ずレイテンシを増すために、上記コマンドは、実行するのにさらに多くの時間を要することがある。
このコマンドの利点は、転送されたデータ内のどんなフィールドも、制御情報用に確保する必要がないことである。
【００４０】
いくつかのデータ転送例に示されるように、この例示システムおよび例示技法は、データ送り側のノードＰＳＮＤがＰＳＮＤコンピューティング・ノード上にあるデータをＰＲＥＱコンピューティング・ノード上の記憶場所に転送するように求める要求側のプロセッサＰＲＥＱにより、デバイス間でデータを転送する効率的な方法を可能にする。
この要求は、要求パケットをＰＳＮＤに送るプロセッサＰＲＥＱにより出される。
この要求パケットは、ヘッダーとペイロードから成っている。
ペイロードは、その要求されたデータのアドレス（１つまたは複数）をノードＰＳＮＤ上に含み、さらに、データが送られることになっているノードＰＲＥＱ上にも、その記憶場所を含む。
このデータは、ノードＰＲＥＱ上の１つまたは複数の単純ＮＩＣレジスタまたは複合ＮＩＣレジスタに送られる。
他の例では、プロセッサＰＳＮＤは、ＰＳＮＤのローカル・コンピューティング・ノード以外のコンピューティング・ノード上のレジスタにデータを送るように求めることもある。
ＰＳＮＤノード上のデータの記憶場所の記述は、広範囲のフォーマットを用いて伝えられることもある。
このようなデータ記述の単純な例は、メモリ内の指定した記憶場所からスタートする所定の長さのストリング用のものである。
このデータの受取り側記憶場所は、単純ＮＩＣレジスタまたは複合ＮＩＣレジスタ内のセルのリストとして与えられている。
いくつかの転送例は以下の通りである。例１）は、その要求が、記憶場所Ｘからスタートする長さのデータ・ストリング（５・６４）を、ＳＮＲ（Ｄ，０）、ＳＮＲ（Ｄ，１）、ＳＮＲ（Ｄ，２）、ＳＮＲ（Ｄ，３）、ＳＮＲ（Ｄ，４）の単純レジスタ・セルに入れるものであるかもしれないわかりやすい例を示している。
受取り側記憶場所の記述のフォーマットは、広範囲のフォーマットで与えられることもある。
このデータは、５つのパケットでこのシステムの全域に送られることもある。
その場合、このストリングの最初の６４ビットは、単純ノード・レジスタ・セルＳＮＲ（Ｄ，０）に送られ、このストリングの次の６４ビットは、単純ノード・レジスタ・セルＳＮＲ（Ｄ，１）に送られるといった具合である。
この例では、ペイロードと、そのヘッダーには、ＰＲＥＱを含むコンピューティング・ノードのアドレスとＳＮＲ（Ｄ，１）のアドレスが、おそらく誤り訂正ビットを含む他の情報とともに入っているであろうから、１つのデータパケットは、このストリングの最初の６４ビットを持っている。
例２）は、ネットワーク上のコーナーターン（corner turn）を示している。
同一のデータ・ストリングを、ＣＮＲ（Ｄ，２）、ＣＮＲ（Ｄ＋１，２）、ＣＮＲ（Ｄ＋２，２）、ＣＮＲ（Ｄ＋３，２）、ＣＮＲ（Ｄ＋４，２）の複合レジスタ・セルに入れる要求が出される。
転送での第３のパケットは、ペイロード内に６４ビットの第３のグループを持ち、またセルＰ（Ｄ，２）を持っている。
これらの転送用のアドレスを記述するのに、広範囲のフォーマットが用いられることもある。例３）は、一連の構造体（structure）からの指定した部分を含むデータを転送して、そのデータを、定められたストライドにて受取り側のＮＩＣレジスタに入れることを示している。
これらの転送用のアドレスを記述するのに、広範囲のフォーマットが用いられることもある。
【００４１】
このシステムは、いくつかの動作を検査して述べられる。
検査される第１の動作は、リモート・ノードの仮想メモリ空間からのデータに対する要求である。
【００４２】
「リモート・ノードＩ上のメモリからのデータに対する要求」動作は、「ｓｅｎｄ  ｗｈｅｎ  ｒｅａｄｙ」コマンドを含むトランザクションにおいて役立つ。
データ要求側のプロセッサＰＲＥＱは、リモート・データ送り側のプロセッサＰＳＮＤの仮想アドレス空間から、７つまでのデータ・セルを要求する。
このトランザクションは、このシステム内の様々な構成要素の機能を示している。
データ転送を行うために、ＰＲＥＱは、次の３つの機能を果たす。
１）このプロセッサは、データを受け取るＮＩＣレジスタの制御セルＨ０と制御セルＰ０の１つまたは複数にデータを送る。
２）このプロセッサは、この転送にＴＩＤ（トランザクション識別子）を割り当てて、ａ）ＴＩＤ、ｂ）ＴＩＤを用いて転送されようとするパケットの数、ｃ）入ってくるパケットに誤り訂正を行い、かつＡＣＫとＮＡＫを処理するＥＣ−ＡＣＫユニット７８０へのプロセッサＰＳＮＤのアドレス、を送る。
３）プロセッサは、組ＲＰＳＥＴ（ＰＳＮＤへの要求パケットＲＥＱを含む）内の複数の要求パケットを送る。
それゆえ、ＲＰＳＥＴを送ることで、複数のコンピューティング・ノードから所定のコンピューティング・ノード上のＮＩＣレジスタにデータが集められることもある。
ＲＰＳＥＴは、隣接する複合ＮＩＣレジスタの集まりＣＮＵＭに対するデータを要求する。４）適切な時間（データが戻る最小時間）の後で、プロセッサＰＲＥＱは、パケットの組ＲＰＳＥＴを送る結果として、データを受け取る予定であるＮＩＣレジスタのすべてに、「ｓｅｎｄ  ｗｈｅｎ  ｒｅａｄｙ」コマンドを送る。
【００４３】
上記の機能１）に関して、プロセッサＰＲＥＱは、要求パケットの組ＲＰＳＥＴに応答してＮＩＣレジスタに転送されるパケットの数を、データを受け取るＮＩＣレジスタのそれぞれにあるＰ０内の適切なＮＵＭＰＫフィールドに送ることで、その数を示す。この要求パケットの組により、Ｊ個の隣接する複合レジスタ（レジスタＮＲ（Ｓ）、レジスタＮＲ（Ｓ＋１）、レジスタＮＲ（Ｓ＋Ｊ−１））内にデータが到着し、かつ、最下部の受取り側レジスタから最上部の受取りレジスタまで順番に、その受け取られたデータにアクセスする場合には、この整数Ｊも、最下部のターゲット・レジスタＮＲ（Ｓ）のセルＰ０のフィールドＯＲＤＥＲに入れられる。
他のターゲット・レジスタは、第２のフィールドに整数０を持っている。
第３のフィールドＳＥＮＤはゼロに設定される。ただ１つのレジスタがデータを受け取ることになっているか、あるいは、プロセッサが、順序を顧慮せずにデータにアクセスすることになっている場合には、これらのフィールドのそれぞれに整数１を入れることもある。
制御セル内の情報の利用は、後の「注０」で説明される。
この情報を制御セルに転送する効率的な方法は、後の「注１」で説明される。
上記の機能２）に関して、ＥＣ−ＡＣＫ管理ユニット７８０は、それぞれのＴＩＤとともに、パケットをいくつ転送すべきか決定して、その適切なＴＩＤに関連するＡＣＫまたはＮＡＫを送る。
ＥＣ−ＡＣＫ管理ユニット７８０の動作は、後の「注２」で説明される。
上記の機能３）に関して、処理ノード間のデータの処理は、データに対する要求パケットを送り、それらの要求パケットに応答してデータを送ることで、行われる。
プロセッサは、プロセッサのＮＩＣレジスタにデータを転送するように求め、次に、そのデータを、ローカルＮＩＣレジスタからプロセッサのローカル・メモリに移すことで、リモート・ノードからプロセッサ内のローカル・メモリにデータを移す。
【００４４】
機能３）では、プロセッサＰＲＥＱは、この要求されるデータが入っているノードの記憶場所を突き止める方法（多分、テーブルを利用して）を持っている。
これらのトランザクション・プロセスの第１の工程は、プロセッサＰＲＥＱが要求パケットＲＥＱをＰＳＮＤに送るためのものである。
ＲＥＱのペイロードには、１）データの転送元の記憶場所、２）受取り側のコンピューティング・ノードのアドレス、ターゲットＮＩＣレジスタ、並びに、このデータを受け取るＮＩＣレジスタ（７２０または７２２）内のセル（１つまたは複数）の記憶場所、３）トランザクション識別子（ＴＩＤ）の情報が入っている。
【００４５】
プロセッサＰＲＥＱは、要求パケットＲＥＱを送り出すのと同時に、いくつかのパケットを送り出すこともある。
一動作方式では、プロセッサＰＲＥＱは、倍長ＮＩＣレジスタ（double NIC register）７２０を利用して、所与の時間に１個〜７個のパケットを送り出す。
プロセッサＰＲＥＱは、１２８バイトのペイロードを持つＨｙｐｅｒＴｒａｎｓｐｏｒｔＴＭのダブル・ロード・パケット（double load packet）を形成する。
プロセッサＰＲＥＱは、このパケットを倍長レジスタ７２０に送る。
このパケットを送る結果として、パケットＲＥＱと、おそらく他のパケットが、倍長レジスタに転送される。
パケットＲＥＱのペイロードは、この倍長レジスタ内の位置ＰＫに転送され、また、パケットＲＥＱのヘッダーは、このレジスタ内の位置ＨＫにある（ここで、０＜Ｋ＜８）。  ＨｙｐｅｒＴｒａｎｓｐｏｒｔＴＭのダブル・ロード・パケットはまた、特定のコードをＨ０およびＰ０に入れて、それぞれのセル（Ｈ１、Ｈ２、...、Ｈ７）内のフィールドを変更させ、ＮＩＣレジスタ内のパケットのすべてが、ＮＩＣレジスタからＮＩＣ出力スイッチにいつでも転送できる状態にあることを示す。
ＨｙｐｅｒＴｒａｎｓｐｏｒｔＴＭのダブル・ロード・パケットは、パケットの転送に役立つレジスタにロードされたパケットの数を含む他のコードを、Ｈ０セルおよびＰ０セルに入れることもある。
セルＨ０およびセルＰ０の用途は、まったく様々であり、これらのセルは、コンピュータのオペレーティング・システムで導かれる通りに使用されることになっている。
別法として、個々のＨフィールドは、他の技法により変更されることもある。
このような技法の１つは、個々のヘッダーをＨＮに入らせて、送りビットを設定することであり、もっとも効果的には最後のビットをＨＮに入らせることである。
セルＨ０内のコードに応答して、転送ロジック（図示されてない）は、ライン７４２を介して、これらのパケットをＮＩＣ出力チップの個々の入力部に送る。
ＮＩＣ出力スイッチの機能は、下記の「注３」で説明される。
これらのパケットは、ライン７５２を介して、個々の中央ハブ・スイッチ・チップ７５０に進む。
したがって、このレジスタから、１つまたは複数のパケットが同時に転送されることもある。
次に、これらのパケットは、パケット・ヘッダーにより、このシステム全体に分散される。
【００４６】
プロセッサが、１つまたは複数の要求パケットから成る集まりを出してから適切な時間がたって、このプロセッサは、これらの要求パケットを送った結果としてデータを受け取る記憶場所に、１つまたは複数の「ｓｅｎｄ  ｗｈｅｎ  ｒｅａｄｙ」コマンドを出すこともある。
【００４７】
要求パケット（ＲＥＱ）は、中央スイッチング・システム内のスイッチ・チップの１つを介して、ＰＳＮＤに関連するＮＩＣに進む。要求パケットＲＥＱのヘッダーには、ＰＳＮＤを含むコンピューティング・ノード上にあるＮＩＣのアドレスが入っている。
この中央スイッチ・ハブは、ＰＳＮＤを含むコンピューティング・ノード上のＮＩＣ入力スイッチに、ＲＥＱを受け渡す。
要求パケットＲＥＱのヘッダーは、形式ＲＥＱの要求パケットを含むクラスのパケットを受け取るように指定されたいくつかの「サプライズ（意外な、surprise）」レジスタ７２２の１つに、要求パケットＲＥＱを受け渡す予定であることを示す。
レジスタ７２２は、要求されたデータ以外のパケットをプロセッサに受け渡すために、サプライズ・レジスタと呼ばれている。
ハードウェア（図示されてない）は、このサプライズ・レジスタＳＲにＲＥＱを入れる。要求パケットＲＥＱを含むサプライズ・レジスタにＰＳＮＤが出す「ｓｅｎｄ  ｎｏｗ」コマンドまたは「ｓｅｎｄ  ｗｈｅｎ  ｒｅａｄｙ」コマンドに応答して、ＳＲ内のデータがＰＳＮＤに転送される。
一実施形態では、要求パケットＲＥＱには、要求されるデータの仮想アドレスが入っている。プロセッサＰＳＮＤは、要求されるデータを得て、かつ、１つまたは複数のパケットを形成して、そのパケットを倍長レジスタＲＥＧＳＮＤ７２０にロードする。
プロセッサＰＳＮＤは、ＡＣＫ情報を利用して、これらのレジスタのどれが使用していないのか判定する。
ＡＣＫ情報を利用して、どのレジスタが使用していないのか突き止める作業が、後の説明「注４」で説明される。
パケットＲＥＳ（以下で追跡される任意のパケット）を含む応答パケットは、ペイロードが位置（Ｐ１，Ｐ２，...，Ｐ７）の一部または全部にあり、またヘッダーがＨ１，Ｈ２，...，Ｈ７内の対応する位置にあるようなレジスタＲＥＧＳＮＤにロードされる。
これらのヘッダーには、１）プロセッサＰＲＥＱを含むコンピューティング・ノードの記憶場所、２）プロセッサＰＲＥＱを含むコンピューティング・ノード上のＮＩＣレジスタのアドレス、３）上記ＮＩＣレジスタ内のターゲット・セルの記憶場所、４）ＴＩＤ、を含む様々な情報が入っている。
一対のレジスタ・セル［ＨＫ，ＰＫ］に入れられている最後のデータ・ビットは、ヘッダーＨＫ内の特定のＯＵＴＰＵＴフィールドに入れられているコードである。
最後のビットが到着すると、データが、ヘッダーとペイロードのセル対から、ライン７４２を介して送られる。
Ｈ０のＯＵＴＰＵＴフィールドが送るように設定されていないために、セルＰ０とセルＨ０の内容は送られない。
【００４８】
パケットＲＥＳは、ライン７４２を経てスイッチ７４０を通り、ライン７５２を経てスイッチ７５０を通り、ライン７５４を経てＥＣ−ＡＣＫユニット７８０に送られる。
ＥＣ−ＡＣＫユニット７８０で実行される動作は、後の「注２」で説明される。
次に、パケットＲＥＳは、プロセッサＰＲＥＱでパケットＲＥＳを受け取るように割り当てられたターゲットＮＩＣレジスタの適切なセルに受け渡される。
【００４９】
（注０）。
図８Ｂを参照すると、パケットＲＥＳがターゲットＮＩＣレジスタに到着すると、そのペイロードは、プロセッサＰＲＥＱで指定されたセルＰＫに入れられる。
パケットＲＥＳは、パケットの存在を示す先頭の１（leading one）を持っている。
ＲＥＳのペイロード全体がセルＰＫ内にあった後で（パケットＲＥＳ内の先頭の１が到着してから適切な時間がたって）、ＲＥＳの到着を示す信号が、セルＰＫからセルＰ０に送られる。
Ｐ０内のフィールドＮＵＭＰＡＫには、一組の要求パケットが送られた結果として、ターゲット・レジスタに向けて送られて、到着したパケットの総数があらかじめロードされる。
ＰＫからＰ０への信号に応答して、フィールドＮＵＭＰＡＫ内の数が１だけ減らされる。
これらのパケットのすべてが到着しているときには、まだ到着していないパケットの数を示す数値がデータ０に設定される。
フィールドＮＵＭＰＡＫ内でのデータ０の存在は、ＮＩＣレジスタのペイロード・フィールド内のデータをプロセッサＰＲＥＱに転送するのに必要ではあるが、ただし不充分な条件である。
フィールドＮＵＭＰＡＫ内に正の整数が位置づけられる場合には、まったく処置は講じられない。
フィールドＮＵＭＰＡＫ内にデータ０が位置づけられ、データ０がフィールドＯＲＤＥＲ内にあり、また、データ０がフィールドＳＥＮＤ内にある場合には、まったく処置は講じられない。
フィールドＮＵＭＰＡＫ内にデータ０が位置づけられ、かつ、正の整数がフィールドＯＲＤＥＲ内にある場合には、データ１は、フィールドＳＥＮＤに入れられて、そのパケットがプロセッサＰＲＥＱに送れる状態にあることを示す。
ＳＥＮＤフィールド内の１の値に応答し、かつ、プロセッサＰＲＥＱの「ｓｅｎｄ  ｗｈｅｎ  ｒｅａｄｙ」コマンドを受け取ると、ＨｙｐｅｒＴｒａｎｓｐｏｒｔＴＭラインにロードするハードウェアは、ＮＩＣレジスタ内のペイロード・セルに入っているデータを、プロセッサＰＲＥＱに送らせる。
ＮＩＣレジスタＮＲ（Ｃ）内のペイロード・データがプロセッサＰＲＥＱに送られた後で、このレジスタ内のロジックは、フィールドＯＲＤＥＲ内の整数を減らして、フィールドＯＲＤＥＲ内の新たな数値を、ライン８４０を介して、ＮＩＣレジスタＮＲ（Ｃ＋１）内のＰ０のフィールドＯＲＤＥＲに送る。
次に、ＮＲ（Ｃ）内のロジックは、ＮＲ（Ｃ）のフィールドＳＥＮＤ、フィールドＯＲＤＥＲ、フィールドＮＵＭＰＡＫを、データ０に設定する。
ここに述べられるやり方で複合レジスタのＰ０のセルを用いれば、その要求されたデータを適正な順序で、プロセッサＰＲＥＱに効率的に送ることができる。
【００５０】
（注１）。
再び図８Ｂを参照すると、ロジックは、複合レジスタのヘッダー部分に関連するものであり、Ｈ０内の情報を利用して、セル（Ｈ１，Ｈ２，...，Ｈ７）の内容を完成する。  それゆえ、プロセッサＰは、パケットをセルＨ０に送って、複合レジスタの下半分内のフィールドのすべてを満たすこともある。
このような定式（formulas）は、これらのセルに対してラベリング方式を使用する。  図９を参照すると、このような方式の１つは、セルに４−ｔｏｕｐｌｅ［Ｔ，Ｕ，Ｖ，Ｗ］でラベルを付ける。
ここで、［Ｔ，０，Ｕ，Ｖ］は、コンピューティング・ノードＴ上のセルＡ（Ｕ，Ｖ）を表し、また、［Ｔ，１，Ｕ，Ｖ］は、コンピューティング・ノードＴ上のセルＢ（Ｕ，Ｖ）を表す。
Ｔが、プロセッサＰＲＥＱを含むコンピューティング・ノードのアドレスである場合には、０≦Ｎ≦７、ＨＮ＝［Ｔ，１，Ｃ＋Ｎ，０］の公式は、一組の要求パケットの結果として、隣接する７つの複合レジスタにデータを収めることを目標としたＮＩＣレジスタ内のＰ０値から成る７上位列を満たす。
【００５１】
（注２）。
図７を参照すると、データを要求するプロセッサＰＲＥＱは、いくつかの機能を果たす。
これらの機能の１つは、順序づけられた３つ組の整数［Ｉ，Ｊ，Ｋ］が入っているペイロードを持つパケットを送ることである。
ここで、Ｉは、この要求のＴＩＤであり、また、Ｊは、この要求の結果として転送されるパケットの数であり、さらに、Ｋは、プロセッサＰＳＮＤを含むコンピューティング・ノードの記憶場所である。
ＴＩＤパケットは、プロセッサＰＲＥＱにより、特定の組の単純ＮＩＣレジスタを介してＥＣ−ＡＣＫユニットに転送される。
これらのレジスタ内のデータは、ＮＩＣ出力スイッチを通らない。定められた数のＴＩＤ番号が許容される。
ＥＣ−ＡＣＫユニットは、このような組の許容されるＴＩＤ番号をアドレスとして持つメモリを備えている。
ペイロード［Ｉ，Ｊ，Ｋ］を持つＴＩＤパケットがＥＣ−ＡＣＫユニットに到着すると、ＪとＫの数値が記憶場所Ｉに格納される。ＴＩＤパケットは、コンピューティング・ノードのボード（computer node board）を決して離れないから、ＴＩＤパケットがＥＣ−ＡＣＫユニットに到着すると、誤り訂正は不必要である。
【００５２】
中央スイッチ・ハブからライン７５４を介して到着するデータパケットは、ＳｅｒＤｅｓモジュール（図示されてない）を通ることがある。
次に、このパケットは、ＥＣ−ＡＣＫモジュールに入り、そこで、このパケットは誤りの検出および訂正を受ける。
誤り訂正は、ＥＣ−ＡＣＫユニット７８０で実行される。データの誤り訂正ができないが、ただし、ＴＩＤ、送り側ノード・アドレス、および提案される記憶セル・アドレスを突き止めることができる場合には、ＥＣ−ＡＣＫユニット７８０は、ライン７８２を介してＮＩＣレジスタにＮＡＫを送って、そのＮＡＫを送り側に送り戻すことができる。
ＥＣ−ＡＣＫユニット７８０がパケットを補正できず、また、その情報を復元してＮＡＫを送ることができない場合には、このパケットを廃棄し、オペレーティング・システムは、タイムアウト状態のために、そのパケットに対する再要求を出す。
パケットがＥＣ−ＡＣＫユニット７８０に到着し、誤りがまったく検出されないか、あるいは少なくとも１つの誤りが発生し、しかも、すべての誤りを訂正できるときには、このパケットのＴＩＤを読み取って、記憶場所ＴＩＤ内の整数Ｊが減らされる。
記憶場所ＴＩＤ内の整数Ｊを減らした後で、その整数がデータ０である場合には、ＴＩＤに関連するデータパケットのすべてが到着していて、アドレスＫを持つノードにＡＣＫを戻すことができる。
ノードＫへのＡＣＫの転送は、ＥＣ−ＡＣＫモジュールにより達成されて、１つまたは複数のＡＣＫパケットが、複合ＮＩＣレジスタ内のセル対に送られる。
【００５３】
（注３）。
ＮＩＣ出力スイッチは、１）欠陥ラインを、中央ハブ・スイッチ・チップに、または中央ハブ・スイッチ・チップからバイパスすることだけでなく、欠陥中央ハブ・スイッチ・チップをバイパスすることも、２）コンピュータ上で実行するジョブを分離すること、３）複数のホップを持つシステム内の中央スイッチ・ハブを通るパケットの平均レイテンシを下げること、を含むいくつかの機能を持っている。
３番目の機能は、複数のホップ・データ・ボーテックス・システム（hop data vortex system）に関して、ここに組み入れられた特許および特許出願に説明されている。
単純なホップ・システムでは、そのオペレーティング・システムは、このシステム内の欠陥ラインと中央スイッチの障害を示すデータを受け取り、また、その情報に基づいて、ＮＩＣ出力スイッチは、これらの欠陥に基づいて道筋を定めることもある。
処理ノードの一部が所与の計算ジョブ（compute job）に割り当てられるときには、これらのノード間でデータを転送するために、いくつかの中央スイッチ・チップが用意される。
この例示技法を用いれば、厳密なシステム・セキュリティを維持できる。さらに、これらのジョブの１つが、単一のコンピューティング・ノードへの長い一連のパケットの流れを開始させ、かつ、その一連のパケットが、ネットワーク上でバックアップをもたらす場合でも、このバックアップは、他のジョブを妨げることはない。
このようなバックアップをもたらすプログラムは、このシステムの全域でデータパケットを引き出す要求側のプロセッサが過度の要求を行わないようにすることを規定したルールに違反している。
同様に、このシステム内のサプライズ・パケット（surprise packet）の数も制限される。
それゆえ、このシステムは、正確に使用されるときには、極度の効率で動作するように設計されている。
また、ユーザーが、このシステムを不正確に使用しても、このシステム上にある他のジョブに悪影響が及ぼされることはない。
【００５４】
（注４）。
プロセッサＰＳＮＤは、その要求されたデータを１つまたは複数のＮＩＣレジスタに入れることで、プロセッサＰＲＥＱからのデータパケットの要求に応答する。
パケットがＮＩＣレジスタから転送されるが、ただし、そのパケットがターゲット・レジスタに到着しない場合には、そのデータに対して別の要求が出される。
したがって、データは、そのデータに対するＡＣＫを受け取るまで、送り側のＮＩＣレジスタに残しておかれる。
ＡＣＫが受け取られると、プロセッサは、別のデータ転送に備えて、送り側のレジスタをプロセッサの有効リスト（available list）に復元することができる。
前節では、リモート記憶場所からのデータに対する要求が説明されている。
送り側のレジスタにＡＣＫがまったく戻されないためにデータを再送することで、リモート・ノードから、ＮＩＣレジスタからのデータに対する要求がもたらされるが、これは、リモート・ノード上のＮＩＣレジスタに格納されるデータをプロセッサが要求して、得ることのできる理由のただ１つを表している。
リモートＮＩＣレジスタからデータを得る方法は、後でこの開示内容に説明される。
「リモート・ノードＩ上のメモリからのデータに対する要求」動作には、他のすべてのデータ転送が、このプロセスのわずかな簡略化または修正であるという性質がある。
【００５５】
「リモート・ノードＩＩ上のメモリからのデータに対する要求」動作は、「ｓｅｎｄ  ｗｈｅｎ  ｒｅｑｕｅｓｔｅｄ」コマンドを含む有用なトランザクションである。
データを要求側のプロセッサＰＲＥＱは、要求パケットＲＥＱをリモート・データ送り側のプロセッサＰＳＮＤに送って、単純レジスタＳＲ（ｔ＋ｓ）内の規定されたセルにデータを戻すようにプロセッサＰＳＮＤに指示することで、プロセッサＰＳＮＤの仮想アドレス空間から８つまでのデータ・セルを要求する。
要求パケットＲＥＱの受取りに応答して、プロセッサＰＳＮＤは、この要求されたデータを複合ＮＩＣレジスタのペイロード・セルにロードし、さらに、ヘッダーを複合ＮＩＣレジスタのヘッダー部分にロードして、これらのペイロード・パケットが、単純レジスタにおいて、要求パケットＲＥＱで規定される記憶場所に到着するようにしている。
８つのデータパケットを複合レジスタから送るときに、ヘッダーＨ０とペイロードＰ０を持つパケットは、例えば適正なビットをヘッダーＨ０のＯＵＴＰＵＴフィールドに入れることで、他の７つのパケットとともに送られる。前節において、要求側のプロセッサＰＲＥＱが、数のＮＵＭＰＡＫを受取り側の複合ＮＩＣレジスタ内のセルＰ０に入れるのと同様に、プロセッサＰＲＥＱは、数のＮＵＭＰＡＫを補助セル８５０に入れる。
これらのパケットが単純ＮＩＣレジスタ内に到着すると、信号がライン８５２を下って送られて、補助セル８５０内の数が減らされる。
この数が０に減らされると、プロセッサＰＲＥＱは、１に設定された単一ビットを、単純レジスタＳＮＲ（ｒ）内の規定された記憶場所にある１の適切なセルに入れる。
ここで、ｒ＜ｔである。
この１を入れるのに適した場所は、ＳＮＲ（０）内で左から右に数え、引き続きＳＮＲ（１）内で左から右に数えるといった具合に数えることで、単純ノード・レジスタのｓ番目のセルである。
この記憶場所は、ｓを６４で除算して、整数Ｉと剰余Ｊ（除法をなす）を得、その記憶場所を、ＳＮＲ（Ｉ）内において、セルＪにあるものとして特定すれば、見出すことができる。
プロセッサＰＲＥＱは、ＳＮＲ（０）、ＳＮＲ（１）、...、ＳＮＲ（ｔ−１）のレジスタの内容を定期的にチェックして、どの単純ノード・レジスタが、要求されたデータのすべてを得ているのか突き止める。
【００５６】
「複合リモートＮＩＣレジスタからのデータに対する要求」動作は、極めて単純である。
この要求側のプロセッサは、パケットを送って、Ｈ０の内容を変更する。
上記「注１」に説明されるように、Ｈ０を変更すると、ＮＩＣレジスタの他のセル内のデータが適正に変更される。
あるいは、この要求側のプロセッサは、ライン７３２を介してパケットを送って、単一セル内のデータにアクセスすることもある。
【００５７】
「単純ＮＩＣレジスタ」から、データに対する要求が出されることもある。
要求側のプロセッサが単純ＮＩＣレジスタからデータを得るために、このプロセッサは、送り側のプロセッサにサプライズ要求パケットを送って、その要求されたデータを複合レジスタにコピーするように送り側のプロセッサに求める。
【００５８】
リモート・ノードからデータを要求するときに、機能３）の変更をリモート・ノード上のプロセッサに行わせれば、そのプロセッサにパケットを送ることができる。
異なるノードに８つのパケットを同時に送ることができ、それにより、それぞれのノードから８つのエッジを持つツリーを用いて、メッセージを極めて速くブロードキャストできる。
【００５９】
いくつかの実施形態では、ＮＩＣレジスタは、オフチップ・ストレージとして使用されることもある。
プロセッサのキャッシュ内のデータは、スワップ・アウトされる。
プロセッサは、スワップ・アウトされ得ないデータをキャッシュ・ラインに入れる都合の良いやり方として、ローカルＮＩＣレジスタを使用する。
【００６０】
模範的な動作方法では、プロセッサがデータをローカル・レジスタ内であちこちに渡して、コンピュータを大型のシストリック・アレイとして使用できるようにすることで、このコンピュータの並列処理を実行することもある。
実際は、ノードＸ上のプロセッサが、データを、リモート・ノードＹ上のＮＩＣレジスタから、別のリモート・ノードＺ上のＮＩＣレジスタに移動させる。
【００６１】
中央ハブおよびＮＩＣのアーキテクチュアにおいてＤａｔａ  Ｖｏｒｔｅｘ（登録商標）チップを持つコンピュータを、この開示内容に基づいて効果的に使用するために、多くの技法が導入されることもある。
この例示システムおよび例示構造は、Ｏｐｔｅｒｏｎプロセッサへの特定の接続を利用しているが、リモート・デバイスへの他のインターフェースを持つ異なるプロセッサに、同様な技法が用いられることもある。
【符号の説明】
【００６２】
１００・・・ＮＩＣ，
１１０、６９２、７００・・・コンピューティング・ノード，
１２０・・・コントローラ，
１３０・・・キャッシュ・ミラー・レジスタ，
１４０、６４０・・・ＮＩＣスイッチ，
１４４、２３０、２３２・・・バッファ，
１５０、１５１、６９０・・・プロセッサ，
１５４・・・プライベート・メモリ，
１５６、１５７・・・パブリック・メモリ，
１５８・・・キャッシュ，
１６０・・・ＣＭＲ，  
２１０・・・ＴＬＢ，
２２０・・・メモリ・バッファ，
２４０・・・ＰＴＭ，
２５０・・・コントローラ・ロックユニット，
３００・・・スイッチング・システム，
６２０・・・ＮＩＣコントローラ，
６３０・・・ギャザー・スキャッタ・レジスタ，
６３２、６３６・・・メモリ・コントローラ，
６３８・・・ユニット，
６４２、６４４・・・ＤＲＡＭ，
７０２・・・ＮＩＣチップ，
７０６・・・メモリ，
７２０・・・複合ギャザー・スキャッタ・レジスタ，
７３０・・・入力スイッチ，
７４０・・・出力スイッチ，
７７４・・・オンプロセッサ・メモリ・コントローラ
【図１Ａ】
2010508591.tif 000003
【図１Ｂ】
2010508591.tif 000004
【図２】
2010508591.tif 000005
【図３】
2010508591.tif 000006
【図４】
2010508591.tif 000007
【図５】
2010508591.tif 000008
【図６】
2010508591.tif 000009
【図７】
2010508591.tif 000010
【図８Ａ】
2010508591.tif 000011
【図８Ｂ】
2010508591.tif 000012
【図９】
2010508591.tif 000013
【国際調査報告】
2010508591.tif 000014