(57)【特許請求の範囲】
【請求項１】
分散コンピュータシステムにおけるノードとして使用されるプロセッサの通信インタフェースであって、
当該通信インタフェースは、
前記プロセッサにより使用されるメモリと前記分散コンピュータシステムおける別のノードにより使用されるメモリとの間でユーザデータを転送するリモートデータのメモリアクセス手段と、前記ユーザデータのそれぞれのサブユニットのメモリの正確性の情報を維持するメモリの正確性チェックの手段とを備え、
前記リモートデータのメモリアクセス手段は、予め決定されたリモートデータのメモリアクセス命令に応答して、前記メモリの正確性の情報に基づいて前記ユーザデータのサブユニットを選択的に送信することで、前記リモートデータのメモリアクセスを実行する、
ことを特徴とする通信インタフェース。
【請求項２】
前記リモートデータのメモリアクセス手段は、前記ユーザデータの選択されたサブユニットに加えて、前記メモリの正確性の情報を転送する、
請求項１記載の通信インタフェース。
【請求項３】
前記リモートデータのメモリアクセス手段は、前記命令の主題である前記ユーザデータの全ての前記メモリの正確性の情報を転送する、
請求項２記載の通信インタフェース。
【請求項４】
前記リモートデータのメモリアクセス手段は、前記ユーザデータの選択されたサブユニットのメモリの正確性の情報のみを転送する、
請求項２記載の通信インタフェース。
【請求項５】
前記リモートデータのメモリアクセス手段は、転送前にメモリの正確性の情報を圧縮する、
請求項２乃至４の何れか記載の通信インタフェース。
【請求項６】
前記メモリの正確性の情報は、前記ユーザデータのそれぞれのサブユニットについて、前記サブユニットのメモリの正確性の状態として、複数の可能性のあるメモリの正確性の状態のうちの１つを示す、
請求項１乃至５の何れか記載の通信インタフェース。
【請求項７】
前記リモートデータのメモリアクセス手段は、命令されたデータ転送モードに従う転送のために前記ユーザデータのサブユニットを選択し、
前記モードは、それぞれ可能性のあるメモリの正確性の状態について、転送が許可されるかを定義する、
請求項６記載の通信インタフェース。
【請求項８】
前記データ転送モードは、前記ユーザデータを前記別のノードに書込み、前記別のノードから読み出すために個別に定義可能である、
請求項７記載の通信インタフェース。
【請求項９】
前記予め決定されたリモートデータのメモリアクセス命令は、（i）リモートデータのメモリアクセス、（ii）メモリの正確性チェック及び（iii）put又はget、の全てを定義する、
請求項１乃至８の何れか記載の通信インタフェース。
【請求項１０】
複数のノードを有するコンピュータシステムにおける使用のためのリモートデータのメモリアクセス方法であって、
前記複数のノードのそれぞれは、それぞれのメモリと、あるノードにより使用されるメモリから別のノードにより使用されるメモリにユーザデータを転送することで実行されるノード間のリモートデータメモリアクセスとを使用し、
当該方法は、
サブユニットレベルで前記ユーザデータのメモリの正確性の情報を保持するステップと、
それぞれのサブユニットのメモリの正確性の情報に依存して、転送のために前記ユーザデータのサブユニットを選択するステップと、
選択されたサブユニットを選択的に転送するステップと、
を含むことを特徴とする方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば超並列プロセッサ、スーパーコンピュータ及び他の分散コンピュータシステムで採用されるメモリの正確性チェック（memory correctness checking）に関する。メモリの正確性チェックは、記憶装置の誤った使用及び望まれないプログラムの振る舞いを検出することができるように、コンピュータストレージの確保（allocation）及び初期化（initialization）ステージを監査及び追跡する技術である。典型的に、メモリの正確性チェックは、プログラム開発のテスト又はデバック段階の間に実行される。
【背景技術】
【０００２】
図１及び図２には、本発明が適用される場合がある装置の例が概念的に示される。図１では、従来のコンピュータ１は、分散コンピュータシステムの１つのノードを形成する。コンピュータ１は、ユーザデータを処理するためにプロセッサ２、及び、分散コンピュータシステムにおける他のノードとコンピュータが通信するのを可能にする、外部ネットワーク７と相互作用するインタフェースコントローラ（NIC）３を有する。コンピュータ１は、それ自身の内蔵式の記憶装置８を有すると同様に、外部記憶装置４に接続される。入力装置５は、コンピュータに命令を与えるために使用され、出力装置は、例えばグラフィカルディスプレイの形式で結果を提示する。知られているように、ユーザは、所与のプログラム又はプロセスを実行するような、命令を入力するとき、コンピュータのオペレーティングシステム（OS）と対話する。係る命令がシステムにおける別のノードに送出されるべきデータ又はシステムにおける別のノードからフェッチされるデータを必要とする場合、NICは、必要なデータ伝送を処理する。NICの監視は、一般に、ユーザに直接に関与することなしに、プログラム又はOSレベルで行われる。
【０００３】
図２は、個別の処理エレメント２０を連結する（実線のグリッドラインで示される）ネットワーク７０をもつネットワーク・オン・チップ・プロセッサ１０を示す。それぞれの処理エレメント２０は、マルチコアであり、それ自身の記憶装置を有する場合がある。実際に、図示される１６の処理エレメントではなく、数百の処理エレメントである場合がある。ネットワークインタフェースコントローラ３０は、処理エレメントの間で共有される外部記憶装置４０と同様に、処理エレメント２０のそれぞれについて、それぞれ設けられる。このネットワーク・オン・チッププロセッサ１０は、従来のコンピュータにおけるプロセッサとして使用される。
【０００４】
リモートダイレクトメモリアクセス（RDMA: Remote Direct Memory Access）は、図１に示されるような従来のコンピュータがそのネットワークインタフェースコントローラ３を使用して第二の従来のコンピュータでのストレージを変更するためにネットワークを介して情報を送信するのを可能にする技術である。この技術は、図１に示されるコンピュータのプロセッサ２にかかる負荷を低減するとき、第一及び第二のコンピュータがスーパーコンピュータの一部である場合にハイパフォーマンスコンピューティングにおいて重要である。また、RDMA技術は、第二の処理エレメントにかかる負荷を最小にするやり方で処理エレメント２０が第二の処理エレメントにとってローカルのストレージを変更することができるので、図２のネットワーク・オン・チップ・プロセッサ１０にとって利益がある。
【０００５】
RDMAは、「第三者I/O」又は「ゼロコピーネットワーク」とも呼ばれる１方向通信に依存する。１方向通信では、データを送出するため、ソースプロセッサは、（プロセッサにより実行されているプログラム又はプロセスの制御下で）データを送出するため、宛先プロセッサのメモリにデータをシンプルに記憶し、同様に、プロセッサは、リモートプロセッサに割り込みすることなしに、別のプロセッサのメモリからデータを読み取ることができる。従って、リモートプロセッサのオペレーティングシステムは、通常、そのメモリが読み取られたか又は書き込まれたかを認識していない。書込み又は読み取りは、オペレーティングシステムにおけるデータバッファにデータをコピーするか又はデータバッファからデータをコピーすることなしに（従って、「ゼロコピー」）、プロセッサのネットワークインタフェースコントローラ（又は等価なものとしてネットワークアダプタ）により行われる。これにより、遅延が低減され、データ転送の速度が増加し、これは、ハイパフォーマンスコンピューティングにおいて明らかに利益がある。
【０００６】
結果として、あるプロセッサから別のプロセッサに転送されているデータに対する本明細書における参照は、それぞれのネットワークインタフェースコントローラ（又は等価なもの）がホストプロセッサ自身を必然的に含むことなしに、データを転送することを意味するように理解されるべきである。
【０００７】
従来のRDMA命令は、“rdma_put”及び“rdma_get”を含む。“rdma_put”は、あるノードがリモートノードでメモリにダイレクトにデータを書き込むのを可能にし、リモートノードは、前もって第一のノードに適切なアクセス権を許可する必要があり、データを受ける用意があるメモリ（又はバッファ）を有する必要がある。“rdma_get”は、必要とされる特権が既に許可されていると仮定して、あるノードがリモートノードのメモリ（又はメモリバッファ）からダイレクトにデータを読み取る。
【０００８】
メッセージパッシングインタフェース（MPI）は、超並列コンピュータの（従来のコンピュータである場合がある）ノード間で最も広く受け入れられている規格である。MPIは、並列コンピュータ、クラスタ及び異機種ネットワークを含む広範囲の分散型コンピュータシステムに適用可能なメッセージ・パッシング・ライブラリ仕様を提供する。MPIは、個別のアドレス空間を有する処理間の通信を可能にする。基本バージョンは、データがあるプロセスにより明示的に送出され、別のプロセスにより受信される協調型（２方向）通信を含む。この規格の後のバージョンであるMPI-2は、１方向通信のサポートを含み、RDMA機能を与えるが、メモリの正確性チェックのダイレクトサポートを提供しない。
【０００９】
他の規格はソフトウェアレベルで一般に実現されるものであり、並列コンピュータシステムのノード間の通信のために存在する。なかには、PVM（Parallel Virtual Machine）、SHMEM（SHared MEMory）及びARMCI（Aggregate Remote Memory Copy Interface）がある。
【００１０】
これまでの間、メモリの正確性チェックをサポートする多数のツールが存在する。  
IBMのRational Purifyは、binary instrumentationを実行して、図３に示されるようなメモリの４つの状態を追跡する。ここで、プロセッサはプログラムを実行していることが想定され、このプログラムは、メモリに対するアクセス権を有するために、メモリの所与のバイトを「所有」する必要がある。データの読取り及び書込みと同様に、別のプログラム（又はプロセッサ）にとって利用可能にするように、メモリのバイトをフリーにすることができる。機能“malloc”（memory allocation）は、メモリを確保又は解放（free）するために使用される。
【００１１】
４つの可能なメモリの状態は、以下の通りである。  
（i）確保及び初期化が行われていない（ラベル付けされた領域９１を参照）。これはいわゆる「赤メモリ“Red memory”」であり、このメモリは、プログラムにより認められていないため、読取り、書込み又はフリーにすることが違法である。  
（ii）確保されているが初期化されていない（図３における９２でラベル付けされた「黄色メモリ“Yellow memory”」）。これは、プログラムにより認められているが、未だ初期化されていないメモリである。このメモリは、書き込み又はフリーにされる場合があるが、読み取られない。  
（iii）確保及び初期化が行われている（図３における「緑メモリ“Green memory”」）。これは、書込みがされ、従って読み取りが可能な値を有するメモリである。緑メモリに対する読取り、書込み又はフリーにすることが合法である。  
（iv）解放及び予め初期化されている（図４における「青メモリ“Blue memory”９４」）。このメモリの領域は、初期化及び使用されているが、現在解放されている。すなわち、このメモリは更に初期化されるが、もはやアクセスについて無効である。従って、Blue memoryに対する読取り、書込み又は解放は違法である。
【００１２】
メモリのそれぞれのバイトを追跡するために２ビットが使用される。第一のビットは、確保状態を記録し、第二のビットは、初期化状態を記録する。１バイトが８ビットから構成されているとすると、アプリケーションにより採用されるメモリの１バイトは２ビットの正確性チェックのオーバヘッドになるという結果になる。Purityは、関与するメモリブロックの状態に対するプログラムにより試みられるそれぞれのメモリ動作をチェックし、動作が有効であるかをチェックし、有効でない場合、エラーを報告する。Purifyは、（例えばメッセージ・パッシング・インタフェースMPIを介して）コンピュータ間通信のメモリの正確性のチェックについてダイレクトサポートを有さない。
【００１３】
Valgrind memcheckは、ユーザに割り当てられたメモリのそれぞれ８ビットのバイトを、メモリ値の有効性を追跡するために８ビット（初期化状態）と、メモリアクセスの有効性を追跡するために１ビット（確保状態）とで示すdynamic binary instrumentationツールである。１バイトが８ビットから構成されているとすると、アプリケーションにより採用されるメモリの１バイトは、１バイト及び１ビットの正確性のチェックのオーバヘッドとなる。メモリは全体のバイト数として確保されるので、単一の確保された状態ビットは、アプリケーションにより採用されるメモリのそれぞれのビットがメモリの正確性の状態を表す２ビットと関連付けされるように、アプリケーションにより採用されるバイトの全ての８ビットに適用される。Valgrind memcheckは、MPIプロセス間で転送が行われるときにメモリのチェックが行われるように、MPIプロファイリングインタフェースを使用して、所定のMPI機能にラッパーを提供する。
【００１４】
Parasoft's Insure++は、C/C++ランタイムメモリエラーを検出するソースコードレベルのインスツルメンテーションツールである。しかし、現在、PGAS（Partitioned Global Address Space）言語について都合のよいMPI又はRDMA動作について文書化されたサポートが存在しないように思われる。
【００１５】
現在、効果的且つ高度に構成可能なメモリの正確性チェックをサポートするRDMA命令が存在しない。メモリの正確性チェックを実行する１つの可能性は、Valgrind/memcheckツールのMPIラッパーを使用することであるが、これは現在、MPI-2の１方向通信機能をサポートせず、従ってRDMAと組み合わせてメモリの正確性のチェックを許容しない。
【００１６】
既存のコンパイラに組み込まれている現在のプログラム及びメモリの正確性のツールは、通信を考慮せず、従ってプログラマは、既存のツールをMPIと機能させるために必要とされる書き込み、個々に値をプリントアウトすることで、メモリの正確性の大きな労働力を要する（及び結果的に間違いが発生しやすい）デバッグに従事しなければならない。
【発明の概要】
【発明が解決しようとする課題】
【００１７】
結果として、リモートデータのメモリアクセスとメモリの正確性のチェックとを更に効率的なやり方で結合する必要が存在する。
【課題を解決するための手段】
【００１８】
本発明の第一の態様によれば、プロセッサ向け通信インタフェースが提供され、プロセッサは、分散コンピュータシステムにおけるノードとして使用され、通信インタフェースは、プロセッサにより使用されるメモリとシステムにおける別のノードにより使用されるメモリとの間でユーザデータを転送するリモートデータのメモリアクセス手段、前記ユーザデータのそれぞれのサブユニットのメモリの正確性の情報を保持するメモリの正確性のチェック手段を備えており、前記リモートデータのメモリアクセス手段は、予め決定されたリモートデータのメモリアクセス命令に応答して、前記メモリの正確性の情報に基づいて前記ユーザデータのサブユニットを選択的に転送することで、前記リモートデータのメモリアクセスを実行する。
【００１９】
ここで、「通信インタフェース」は、好ましくは、プロセッサ自身から別々に区別可能であるか否かを問わず、システムにおけるプロセッサの通信を扱うために設けられるハードウェアを示す。例えば、係るインタフェースは、ネットワークを通して交換されるパケットを形成及び復号化する回路、及びプロセッサのローカルメモリにアクセスするDMAコントローラを含む。
【００２０】
用語「プロセッサ」は、（例えば図１のような）大規模コンピュータシステムの一部としてネットワーク化されるスタンドアロン型コンピュータを示すか、（例えば図２のような）同じダイ又は基板上の複数のプロセッサのうちの１つを示すか、或いは、分散コンピュータシステムの一部として動作する他の種類のコンピュータリソースである場合がある。
【００２１】
表現「分散コンピュータシステム」は、ノードが同時に及び／又は並列に計算を実行するように、コンピュータリソースが様々なノードで分散されるシステムを意味する。  
本明細書における用語「分散」、「並列」又は「同時」の使用による制限が意図されない。
【００２２】
「別のノード」は、システムにおける他の計算及び／又は記憶リソースを意味し、第一に記載されたプロセッサと同じ特性を有する場合又は有さない場合がある。典型的に、分散コンピュータシステムは、システムのノードとして多数の同じプロセッサを有するが、これは必須なものではない。また、本発明は異機種ネットワークにも適用することができる。
【００２３】
「ユーザ」データは、メモリの正確性のデータとは対照的に、計算上のタスクの実行に係るデータを示す。ここで、「ユーザ」は、人間のオペレータを示す必要はないが、特にメモリの正確性チェックのための検査又は分析下のプログラムといった、分散コンピュータシステムにより実行されている特定のプログラムをより典型的に示す。データのサブユニットは、単一のビットから増加するデータの小分割を意味する。
【００２４】
RDMAによるユーザデータの「転送」は、ノードからリモートノードへのデータの書き込み、リモートノードからのユーザデータの読み取りの何れか又は両者を含む。
【００２５】
あるノードにより「使用されるメモリ」は、そのノードにとって排他的な専用のメモリ、又はそのノード自身に位置されるメモリを必ずしも意味しない。ノードには、ローカルメモリの代わりに又はローカルメモリに加えて、システムにおける共有メモリのそれぞれの領域が確保される場合がある。
【００２６】
「予め決定されたリモートデータのメモリアクセス命令」は、従来のリモートデータのメモリアクセス命令がメモリの正確性チェックをサポートしないとき、従来のリモートデータのメモリアクセス命令ではなく、本発明で定義される新たな命令である。
【００２７】
「選択的に転送する」は、インタフェースが全てのデータを必ずしも転送するのではなく、データのサブセットを転送する能力を有することを意味する。しかし、メモリの正確性の情報に依存して、全てのユーザデータが転送されることは可能である。
【００２８】
通信インタフェースは、好ましくは、ユーザデータの選択されたサブユニットに加えて、前記メモリの正確性の情報を転送する。１つのオプションは、前記命令のサブセットである前記ユーザデータの全ての前記メモリの正確性の情報を転送することである。代替的に、ユーザデータの選択されたサブユニットのメモリの正確性の情報のみを転送することが可能である。関連するユーザデータが実際に転送された否かに係らず、全てのメモリの正確性の情報の転送は、より多くのメモリ容量を占めるという代償を払うが、メモリの正確性の問題がより迅速に明らかとなる利点を有する。
【００２９】
メモリの正確性の状態は、ユーザデータの連続する部分（又は「範囲」）について同じ場合がある。従って、好ましくは、通信インタフェースは、転送前にメモリの正確性の情報を圧縮する。例えば、これは、状態の範囲の形式で、言い換えれば、それぞれが関連されるメモリの正確性の状態をもつ、全てが同じ状態におけるメモリの正確性の情報の長さの形式で、メモリの正確性の情報を送出することで行われる場合がある。
【００３０】
メモリの正確性の情報は、ユーザデータのそれぞれのサブユニットについて、複数の可能なメモリの正確性の状態のうちの１つを、サブユニットのメモリの正確性の状態として示す。これらの状態は、以下に記載されるように初期化（Yes又はNo）及び確保（Yes又はNo）の４つの組み合わせの何れかを含む。
【００３１】
好ましくは、リモートデータのメモリアクセス手段は、指示されたデータ転送モードに従う転送のためにユーザデータのサブユニットを選択し、モードは、まさに記載された可能性のあるメモリの正確性の状態のそれぞれについて、転送が許可されるか否かを定義する。幾つかの係るモードは、後に説明されるように考えられる場合がある。
【００３２】
好ましくは、データ転送モードは、リモートノードにユーザデータを書き込みし、リモートノードから読み取るために個別に定義可能であり、転送に係るそれぞれのノードについて個別に定義可能である。
【００３３】
転送のために選択の間に考慮される、ユーザデータのそれぞれのサブユニットのサイズは定義可能であり、動作の間に変化する場合がある。最小且つ最も正確なサブユニットは１ビットであり、言い換えれば、ユーザデータの各ビットは個別にチェックされる。しかし、これは、メモリの正確性チェックについて、大量の計算及びメモリの確保を必要とする代償を払うことになる。サブユニットの他の可能性のあるサイズは、バイト、バイトの一部、又はバイトの倍数を含む。データ転送のタイプ（put又はget）、ソースノード及び宛先ノード、及び／又は他の要素に依存して、異なるサブユニットが定義される場合がある。
【００３４】
予め決定されたリモートデータのメモリアクセス命令は、通信インタフェースに選択的なリモートデータのメモリアクセスを実行させ、（i）リモートデータのメモリアクセス、（ii）メモリの正確性チェック及び（iii）put又はgetの全てを定義することが好ましい。
【００３５】
通信インタフェースは、システムにおけるそれぞれのノードのネットワークインタフェースコントローラ又はネットワークアダプタ（又は等価なものとしてインフィニバンドネットワークの「チャネルアダプタ」）の形式で提供されるか、ネットワークインタフェースコントローラ又はネットワークアダプタに含まれる場合がある。代替的に又は付加的に、通信インタフェースは、システムで提供されるような、それぞれのスイッチ又はルータの一部である場合がある。このようにして、システムにおけるハードウェアレベルで本発明の実施の形態を実現することができる。好適ではないが、ソフトウェアレベルで本発明の一部又は全部を実現することも可能である。
【００３６】
本発明の第二の態様によれば、複数のノードを有するコンピュータシステムにおける使用向けのリモートデータのメモリアクセス方法が提供され、ノード間でそれぞれのメモリ及びリモートデータのメモリアクセスを使用するそれぞれのノードは、あるノードにより使用されるメモリから別のノードにより使用されるメモリにユーザデータを転送することで実行され、本方法は、サブユニットレベルで、ユーザデータのメモリの正確性の情報を保持し、それぞれのサブユニットのメモリの正確性の情報に依存して、転送のためにユーザデータのサブユニットを選択し、そのように選択されたサブユニットを選択的に転送することを含む。
【００３７】
従って、本発明の方法は、メモリの正確性チェックによるリモートデータのメモリアクセス方法である。そのようなものとして、この目的について定義された予め決定された命令に応答して実行されることが好ましい。本方法は、好ましくは、ユーザデータの選択されたサブユニットに加えて、ユーザデータの少なくとも選択されたサブユニットのメモリの正確性の情報を転送することを含む。２つの代替的なオプションは、対応するユーザデータが実際に転送されるか否かに係らず、実際に転送されたユーザデータのうちメモリの正確性の情報のみを転送するか、命令に関連する全てのメモリの正確性の情報を転送することである。  
本方法は、転送前にメモリの正確性の情報を圧縮することを含むことが好ましい。
【００３８】
先の方法では、選択することは、それぞれのサブユニットのメモリの正確性の状態を、複数の可能性のあるメモリの正確性の状態のそれぞれについて「転送する」又は「転送しない」を定義する予め決定されたデータ転送モードと比較することを含む。
【００３９】
本発明の第三の態様によれば、分散コンピュータシステムにおけるノードの通信インタフェースで実現されるとき、リモートデータのメモリアクセスにメモリの正確性の情報の転送を提供するコンピュータ読み取り可能な命令が提供される。この命令は、好ましくは、（i）リモートデータのメモリアクセス、（ii）メモリの正確性チェック及び（iii）put又はgetの全てを定義するリモートデータのメモリアクセス命令を含む。これらの命令は、rdma_mc_put及びrdma_mc_getとしてそれぞれ記述される。
【００４０】
他の係る命令は、好ましくは、どのような状況で、様々なメモリの正確性の状態におけるユーザデータのサブユニットが転送されるべきかを定義するモード設定命令を含む。モードは、put及びgetについて異なって設定され、これらの命令は、rdma_mc_put_mode及びrdma_mc_get_modeで記述される場合がある。本発明の実施の形態における更に新たな命令は、メモリの正確性の情報の転送によるRDMAの開始及び終了命令を含む。
【００４１】
これらの命令は、最も低い可能性のある遅延により作用されるように、通信インタフェースにおいてハードウェアレベルで認識される。例えば、これらは、分散コンピュータシステムでの実行のために意図されるソースコードをコンパイルするコンパイラの一部として、及び／又は係るコンパイラにアクセス可能な機能のライブラリの一部として提供される場合がある。
【００４２】
本発明の更なる態様は、係るノードを含む分散コンピュータシステムと同様に、先に定義された通信インタフェースが設けられた分散コンピュータシステムのノードとして使用するための処理エレメントを提供する。
【図面の簡単な説明】
【００４３】
本発明を例示する添付図面が参照される。
【図１】従来のコンピュータシステムを示す図である。
【図２】ネットワーク・オン・チップ・プロセッサを示す図である。
【図３】既知のメモリの正確性のツールにおける４つの可能性のあるメモリの状態を例示する図である。
【図４】既知のメモリの正確性の方法と比較した本発明を実施する処理を概説する図である。
【図５】本発明の実施の形態に係るローカルプロセスとリモートプロセスとの間のリモートメモリアクセスを例示する図である。
【図６】本発明の実施の形態に係るローカルプロセスからリモートプロセスへのデータの遠隔的な配置を例示する図である。
【図７】本発明の実施の形態に係るリモートプロセスからローカルプロセスへのデータの遠隔的な配置を例示する図である。
【発明を実施するための形態】
【００４４】
本発明の実施の形態は、図４〜７に関して以下に記載される。  
メモリの正確性チェックをサポートするリモートダイレクトメモリアクセス（RDMA：Remote Direct Memory Access）命令が開示される。これらの命令は、図１又は図２のネットワークインタフェースコントローラ（又はプログラマブルスイッチ又はルータ）で実現されることが主に意図される。また、開示される発明は、ネットワークを通して通常のデータ転送方法を利用するソフトウェアで実行される場合があるが、好適な実現により得られる利益の多くを失う結果となる。
【００４５】
本発明は、OSI（Open System Interconnection）モデル（以下の表１を参照）のセッション及びトランスポートレイヤに含まれる機能を提供するものであり、ソフトウェアで実現されるが、高いパフォーマンスのためにハードウェアで実現されることが意図される。比較のため、MPIは、セッション及びプレゼンテーションレイヤに主に適用可能である。
【００４６】
［表１］OSIモデル及び例を示す。
【表１】
0005780167.tif 000002
【００４７】
本発明の実施の形態において、メモリの正確性チェックをサポートする６つのRDMA命令が提供される。記載された機能の幾つかは、メモリの正確性のデバッグの間に優れた制御のためにユーザにダイレクトに利用可能にされるが、命令は、メモリの正確性チェックの命令の一部としてコンパイラにより使用されることが意図されるか、又は先に記載された命令ツールにより使用されることが意図され、C/C++/Fortranのような言語を使用してプログラマによりダイレクトに使用されない。
【００４８】
本発明の実施の形態で定義される新たな命令は、以下のように記述される。  
rdma_mc_init
rdma_mc_put_mode
rdma_mc_get_mode
rdma_mc_put
rdma_mc_get
rdma_mc_end
サポート命令rdma_mc_initは、メモリの正確性（MC）チェックがRDMA動作のために作動されることを指定する。特に、これは、遠隔の読取り及び書込みについて指定されるメモリの何れかの領域が確保及び初期化の状態を維持するメモリの対応する領域を有することを意味する。この初期化の命令を初めに呼び出すことなしに、その後の開示されるRDMAメモリの正確性の命令の何れかを呼び出すことはエラーである。
【００４９】
メモリの正確性のためのメモリ（Valgrind又はRational Purifyにおけるシャドウメモリに等価）は、必ずしも、追跡されているデータと同じ位置にない。シャドウメモリ及びデータの位置は、転送されるものに影響を及ぼさない。
【００５０】
rdma_mc_put_modeは、どのような確保状態の組み合わせが遠隔の書込みとなるかを指定し、rdma_mc_get_modeは、どのような確保状態の組み合わせが遠隔の読み取りとなるかを指定する。
【００５１】
従来通り、本発明における“put”及び“get”は、“copy”動作を含むそれぞれのケースで、データの書込み及び読取りをそれぞれ示し、これによりデータは本来の位置に保持される。また、データは、その後に削除される位置から一時的な位置に入力され、従って、本発明とは関係のないバックグランドで生じているコピー、上書き及び削除が存在する場合がある。
【００５２】
図４は、従来技術（「旧式プロセス」）と比較した本発明の実施の形態（「提案されるプロセス」）において命令rdma_mc_putがどのように機能するかに関する概念を提供する。
【００５３】
従来技術では、アプリケーションにおけるput（それぞれget）により、２つの個別の通信指示が得られる。図４におけるステップＳ１である、ユーザデータの転送。ステップＳ２における完全なメモリの正確性の情報（MC）の転送。概念的に簡単ではあるが、これにより、おそらく不必要に及び／又は違法に大量のデータが転送されることになる。さらに、個別の“send”動作は、ユーザデータとMCのアクセスがこれらが相互に矛盾がないときに行われることを保証するために同期を必要とする。ソフトウェアレベルでこれを保証することは、困難又は不可能である場合がある。
【００５４】
対照的に、本発明はハイパフォーマンスのメモリの正確性チェックを達成する命令を提供し、ハードウェアレベルでユーザデータとMCの転送の調整を可能にする。
【００５５】
本発明の実施の形態では、第一に（ステップＳ１０）、ソースプロセッサのネットワークインタフェースコントローラは、ユーザデータのどの部分を送出すべきかを判定する。以下に説明されるように、このステップは、送出されるために要求されたユーザデータのMCが送出される場合があるかどうか調べるために選択されたモードに対して、該ユーザデータのMCをチェックする。このステップは、ユーザデータのビット毎に実行され、代替的に、（バイト単位におけるような）ユーザデータの他の必要とされる小分割が使用される場合がある。
【００５６】
次いで、ユーザデータの適切な部分は。宛先ノードのネットワークインタフェースコントローラに送出される（ステップＳ２０）。
【００５７】
ステップＳ３０で、メモリの正確性の情報MCをどのように送出すべきかが判定される。ここでの選択は、通常、非圧縮MC又は「圧縮」MCの間である（以下を参照）。完全な（非圧縮の）MCと対照に、圧縮されたMCを送出する基準は、圧縮及び転送コストを考慮して、圧縮されたMCを送出することが完全なMCを送出することよりも効率的であるか否かである。
【００５８】
（圧縮及び／又は範囲の計算が好適であるように）データの処理で、又は（ダイレクトデータ転送が好適であるように）データの転送で、NICが効率的であるかに依存して、例えば1000又は100000バイトといった閾値が採用される場合がある。
【００５９】
ステップＳ３０において、圧縮されたMCを送出することが判定された場合、圧縮されたMCは、ステップＳ４０で宛先プロセッサのネットワークインタフェースコントローラにネットワークを通して転送され、圧縮されたMCを送出することが判定されない場合、完全なMCが代わりに送出される（ステップＳ５０）。
【００６０】
従って、ユーザがメモリの正確性をチェックするのを望む場合、標準的なput/getの代わりにrdma_mc_put/rdma_mc_getが使用される。本発明がない場合、標準的なput/getは、おそらくコードの制限された部分において本発明の１又は２の特徴を達成するため、ad hocのやり方で使用される。
【００６１】
なお、MCはユーザデータと同じ遠隔地にある必要はない。図３はユーザデータの後に送出されているMCを示しているが、これは、単に例示するものである。MCを最初に送出することが可能であり、両者の並列の転送も可能であって、実際には好適である場合がある。
【００６２】
ユーザデータのどの部分を送出すべきかに関する判定（図４におけるステップＳ１０）は、更に詳細に以下に記載される。  
ユーザデータのそれぞれのサブユニットは、ユーザに割り当てられたメモリのそれぞれ個々のビットに至るまで、２つの可能性のある確保状態のうちの１つと、２つの可能性のある初期化状態のうちの１つとを有する。なお、これは、それぞれのバイトが２つの可能性のある確保状態のうちの１つと２つの可能性のある初期化状態のうちの１つとを有するRational Purifyとは異なる。この違いは、正確性の追跡の精度であり、バイトにおける隣接したビットが個別に追跡されるのを可能にし、必ずしも一緒に扱われ必要はない（Rational Purifyにおけるようなバイト精度）。
【００６３】
効率の良さのため、好適な実現は、確保及び初期化の状態を個別に且つ継続して維持するが、他の実現も可能である。従って、MCメモリでは、確保データ及び初期化データの両者について異なり且つ連続的なメモリ領域が存在する。
【００６４】
ユーザに割り当てられたメモリのそれぞれのビットは、図３に例示されるものに類似したやり方であって、表２に示される４つの可能なメモリの正確性の状態のうちの１つを有する。
【００６５】
［表２］
ユーザに割り当てられるメモリの１ビットは、表の行に示される４つの可能なメモリの正確性の状態のうちの１つを有する。これらの状態は、図３に示されるような、確保及び初期化の状態の可能な組み合わせに対応する。
【表２】
0005780167.tif 000003
【００６６】
本発明の実施の形態は、表２における異なるメモリの正確性の状態について異なって扱われる。０〜１５でナンバリングされる、以下の表３に示される１６の可能なモードのうちの１つを選択することで、ユーザデータの転送がどのように扱われるかを選択するために、命令rdma_mc_put_mode及びrdma_mc_get_modeが使用される。係るモード選択は、実行の間に変化する場合がある。
【００６７】
これらのモードの幾つかは、他よりも有効であるが、完全さのために本実施の形態で全てが提示されている。モード８は、ユーザデータのみを転送することが合法且つ有効であるときに、ユーザデータのみが転送されることを保証するために最も適切なモードである。
【００６８】
メモリの正確性チェックが使用されない場合と同じ振る舞いを維持するため、ユーザが選択したデータが確保されるか又は初期化されるかに係らず、全てのユーザデータが転送されるように、デフォルトのput及びgetモードの両者は１５となる。完全に正しいプログラムは、モード８又はモード１５（モード１５は標準的なput/getに対応する）を使用して同じ出力を与える。
【００６９】
許容可能な設定は、put及びgetモードを使用して、ユーザに割り当てられるメモリの確保及び初期化に関して、ユーザのエラーの許容範囲を可能にする。
【００７０】
プログラムが通常モード１５で正しく機能するが、厳密なモード８について正しく機能しないことを検証した後、依存している不正確さのタイプを識別するため、モード９〜１４が使用される。
【００７１】
モード７は、プログラム全体又はプログラムの一部の何れかが不正確な状態０，１及び２のうちの１つにおいてメモリにアクセスすることに依存するかを識別するために使用される。次いで、モード１〜６は、依存している不正確さのタイプを識別するために使用される。
【００７２】
put及びgetモードは、互いに独立に設定され、異なるタイプのメモリの正確さのエラーを区分けして、それらを特定の処理エレメントに集めるため、（計算及び他の計算を実行可能な）異なる処理エレメントに関連するそれぞれのスイッチ、ルータ又はNICについて独立に設定される。
【００７３】
［表３］
ユーザに割り当てられるメモリの特定のビットのデータ転送処理は、４つの異なるメモリの正確性の状態について選択されたデータ転送モードに依存する。メモリの正確性の状態は、上の行に示される。表の本体では、数０はデータが転送されないことを示し、数１は、データが転送されることを示す。ここで、転送及び非転送は、ユーザに割り当てられたメモリのみを示す。メモリの正確性の状態の転送は、個別に扱われる。異なるユーザデータの転送モードは、０〜１５まで、最も左の列でナンバリングされる。
【表３】
0005780167.tif 000004
【００７４】
１ビットの誤りを捉えるため、ビット毎のチェックが必要であるが、これは、計算上高価であり、常に必要とされない。既に言及されたように、Rational Purifyは、バイト（すなわち８ビットレベル）で機能し、本発明の実施の形態も、これを計算上集中しないオプションを提供する。これは、Rational Purifyのバイトレベルの精度を使用することで達成されるか、又は、バイトの第一ビットをチェックすることのみに切り替えることを可能にし、他の７ビットが同じであることを想定して、ビット精度を保持することで達成される。
【００７５】
「状態の範囲」（以下を参照）の概念は、チェックステップにも適用することができる。すなわち、MCは、伸張が絶対的に必要であると決定される直前まで、圧縮された状態で保持される。次いで、MCの圧縮された範囲を操作することが可能であり、これは、圧縮されていないメモリの正確性の情報を操作するよりも簡単なタスクである。
【００７６】
RDMAのメモリの正確性の命令rdma_mc_put及びrdma_mc_getは、ユーザに割り当てられるメモリの正確性の状態を保持しつつ、リモートメモリアクセスを実行する。図５は、メモリの正確性の状態の情報の完全な転送によるrdma_mc_put及びrdma_mc_getを使用したリモートメモリアクセスを示す。図５に例示されるデータ転送は、ユーザデータの完全な転送又は非転送の何れかを示す簡略化された例示である。一般に、そして表３から選択されたモードに従って、データの一部が転送され、データの一部が転送されない。
【００７７】
本発明の１実施の形態では、DATAとMCとの一貫性を保持するため、実際に転送されたデータに関連するメモリの正確性の情報のみが転送される。この場合、表３は、ユーザデータ及び関連するMCの両者に対して何が生じるかを示している。
【００７８】
代替的な実施の形態では、どの位多くのユーザデータが実際に転送されるかに係らず、全てのMCが転送される。このアプローチの利点は、他の計算を汚染するエラーの拡散を追跡するのを可能にすることである。問題点は、ユーザデータ及びMCが目的地で矛盾することである。
【００７９】
DATAではなくMCを送出する理由は、以下の通りである。  
エラーの拡散を追跡する。たとえばValgrindは、無意味又は誤りのある動作を可能にし、これらのフラグは、プログラムにおける決定点に影響を及ぼす。  
より深刻なエラーを追跡するため、プログラムにおける幾つかの不正確性（表２におけるメモリの正確性の状態０，１及び２は、所定の状況において安全であると考えられる。）を大目に見る。
【００８０】
第一の項目に関連して、不正確なプログラムをより迅速に機能しないようにする。プログラムは、不正確であり、転送されている状態０，１又は２におけるメモリの内容に依存するので、これらの幾つかを送出しないことで早期のエラーとなり、不正確さに引き返すのを可能にする。
【００８１】
図５〜図７に関する以下の説明は、全てのMCが転送されることを仮定する。
【００８２】
図５を参照して、これは、メモリの正確性の状態情報の完全な送出による、ローカルプロセス１００とリモートプロセス２００との間のリモートメモリアクセスを示す。ユーザデータDATAは、暗く影付けされたブロックとして示され、メモリの正確性（MC）状態情報は、明るく影付けされたブロックとして示される。暗く影付けされたブロックと明るく影付けされたブロックの近さ及び位置は、単なる例示である。矢印は、プロセス１００とプロセス２００との間の転送を示す。空のブロックは、メモリのこれらの領域に転送が行われないことを示す。
【００８３】
従って、図５は、データが転送される４つの可能なやり方を例示する。  
（ａ）転送が行われるrdma_mc_put。すなわち、ユーザデータ１１０は、完全に転送され、ユーザデータ１１０のコピーである、リモートプロセスにおけるDATA２１０が形成される。さたに（前、後又は同時であるかは問題ではなく）、関連するメモリの正確性の情報MCは、MCのコピー２２０を形成するために転送される。
【００８４】
（ｂ）転送が行われないrdma_mc_put。この可能性では、ユーザデータのメモリの正確性の状態（表２）と選択されたモード（表３）との比較の後、ユーザデータを転送しない判定が行われる。実際には、必要に応じてサブユニット毎に、個々のビットまで下がって判定が行われるが、明確さのため、「全部かゼロか」の判定が想定される。しかし、この例では、メモリの正確性の情報１２０は完全に転送される。このように、MCブックキーピング（book-keeping）は、エラーの拡散を追跡することができるように行われ続ける。
【００８５】
（ｃ）転送が行われるrdma_mc_get。この場合、論理プロセス１００は、関連されるMC２２０と共にDATA２１０の転送となるリモートプロセスに要求を送出し、ローカルプロセスで両方の種類のデータのコピーが作成される。
【００８６】
（ｄ）転送が行われるrdma_mc_get。この動作モードでは、メモリの正確性の状態とデータ転送モードとに基づいてローカルプロセスにより要求されるユーザデータを転送しないことが決定される。しかし、この例では、リモートプロセスは、関連するMC２２０をなお送信し、ローカルプロセスにより所有されるメモリ空間においてコピー１２０を作成する。
【００８７】
当該技術分野において知られる「旧式プロセス」と組み合わせた本発明の「提案されるプロセス」を示す図４を参照して、上述の可能性（ａ）及び（ｃ）は、関連する更なるチェックのため、従来技術よりも長い時間を要するが、転送タイプ（ｂ）及び（ｄ）は、転送されるデータの低減されるボリュームのため、（以下に記載される図６及び図７における動作と同様に）従来技術において必要とされるよりも少ない時間を要する。本発明は、put/getが無意味且つ誤りがあるか（表2における状態0及び1）、又はまさに誤りがある（表2における状態2）ことを対応するMCが示すとき、ユーザデータのput/getの回避を可能にする。
【００８８】
メモリの正確性の状態情報が「状態の範囲」又は同じMC状態を有するユーザデータの（バイト又はアドレス項目で）長さとして圧縮された形式で送出することができるように、ユーザデータが表２に示されるメモリの正確性の状態の１つ又は２つであることは普通である。
【００８９】
図６は、メモリの正確性の状態情報（MC）の効率的な送出を達成するための、ローカルプロセス１００からリモートプロセス２００への状態の範囲の配置を示す。圧縮されたMCとして、例えば送出された状態の範囲の数を示すために２バイトが使用され、これは、典型的に１０を単位とする数である。状態の範囲自身は、表２における状態のうちの１つを示すために割り当てられる最も高い２ビットにより、８バイトで符号化され、範囲のサイズは、残りの６２ビット（又はより大きなサイズが選択された場合には６２ビットを超えるビット数）により表される。範囲は、次々に続くことが想定される。
【００９０】
従って、圧縮されたMCの状態情報は、その後の状態の範囲の数を示すために２バイトの値により先行される、状態の範囲の系列の形式を取ることができる。表現の正確な形式は、ハードウェアに依存し、様々な可能性が当業者にとって生じるであろう。例えば、仮想的な開始アドレス及び長さは、状態の範囲の開始及び終了ポイントを定義するために使用される場合がある。
【００９１】
図６及び図７において、ユーザデータは、暗く影付けされたブロックとして示され、正確性の状態情報は、明るく影付けされたブロックとして示される。実線の矢印は、プロセス１００とプロセス２００との間の転送を示し、破線の黒の矢印は、圧縮された表現２２１から完全なメモリの正確性の状態情報２２２の拡張又は作り直しを示す。
【００９２】
図５（ａ）におけるような、転送ありについてのrdma_mc_putである転送（ａ）において、ユーザデータ１１０はMCと共に転送される。異なるのは、圧縮されたメモリの正確性の情報２２１を形成するため、MC１２０が転送前に圧縮されることである。ユーザデータのコピー２１０は、リモートプロセス２００で作成され、圧縮されたMC２２１の受信に応じて、これは、オリジナルのMC１２０のコピー（MC（再作成）２２２）を形成するために拡張される。
【００９３】
図５（ｂ）におけるような、転送なしについてのrdma_mc_putである転送（ｂ）において、そのメモリの正確性の状態及び選択されたデータ転送モードの観点で、ユーザデータは転送されず、他方で、MCは圧縮された形式で転送され。受信された圧縮されたMC２２１は、MC（再作成）２２２としてオリジナルを再構築するために伸張される。
【００９４】
ちなみに、MCが圧縮されずに処理される場合があり、及び／又は圧縮された形式で処理される場合があるので、必ずしも受信プロセスですぐにMCを伸張する必要はない。
【００９５】
図７は、メモリの正確性の状態情報（MC）の効果的な送出による、リモートプロセス２００からローカルプロセス１００へのデータのリモートコレクションを示す。
【００９６】
転送ありについてのrdma_mc_getのプロセス（ａ）では、ユーザデータ２１０は、図５（ｃ）に類似したやり方で、リモートプロセス２００からローカルプロセス１００に転送され、MCも取得されるが、MCは圧縮された形式で送信され、受信された圧縮されたMC１１１は、MC１１２として拡張される。
【００９７】
最終的に、図７（ｂ）は、圧縮された形式でMCを受信することを除いて、図５（ｄ）と同様に、ユーザデータの転送がないrdma_mc_getを示す。
【００９８】
全てのRDMAが終了するように、分析下にあるプログラムが実行を終了した後、新たなrdma_mc_end命令が起動され、必要な“clean up”動作が実行される。
【００９９】
例えば、RDMAのために確保されているメモリは、ディスクにメモリの内容をコピーすること及びディスクからメモリの内容をコピーすることのような規則的な動作が行われるように、システムにリターンされる（RDMAの確保されたメモリは、読取り及び書込みが突然に行われるときに、ディスクにページングすることができない）。
【０１００】
（例えば要求されたputs/getsの全体の数及び転送されるデータの量といった）要約情報が計算される場合があり、例えば、人間のオペレータによるちょうさのために表示装置に出力される場合がある。
【０１０１】
既に言及されたように、本発明は、大型システムの一部であるそれぞれのプロセッサ又は処理エレメントのNICで実現されることが意図される。図２を参照して、メモリの正確性チェックをサポートする開示されるRDMA命令の実現の１つの形式は、オンチップネットワークインタフェースコントローラ又はスイッチにおいてである。すなわち、それぞれのネットワークインタフェースコントローラ又はスイッチは、本発明により提供される新たな命令を認識し、それらに従ってRDMAのために作用する。
【０１０２】
より詳細には、NICは、上述された新たな命令に応答する制御ユニット（おそらくDMAコントローラ）のようなハードウェア手段を含み、これらの命令は、例えばローカルバスを介して、ローカルノードから受信される。次いで、制御ユニットは、例えばパケット送信及び受信ユニットを介して、ネットワークを通して読取り及び／又は書込みを制御する。係るパケット送信ユニットは、ローカルノードのローカルメモリからデータを受信し、ネットワークを通した伝送のために１以上の適切にフォーマット化されたパケットにデータを形成する。パケット受信ユニットは、ネットワークを通してパケットを受信し、受信されたパケットを、ローカルプロセッサにより理解される形式にデコード、分割又は再結合する。両方の回路は、ネットワークを通して、宛先ノードで対応するユニットに結合される。
【０１０３】
本発明の１実施の形態では、命令は、２つの処理エレメントにとってローカルであるストレージ間のデータ転送を指示する。本発明の第二の実施の形態では、大型の共有されるストレージ／又はキャッシュは、異なる処理エレメント間で均等に分割され、RDMA命令は、異なる処理エレメントに現在割り当てられている大型の共有されるキャッシュの部分間のデータ転送を指示する。
【０１０４】
また、本発明は、ソフトウェアの形式でシステムにおける上位レベルで実現される。MPI及び非MPIの両者が適用される（例えばPVM，SHMEM，ARMCI）。しかし、これは、以下の理由のために好適ではない。  
（i）ソフトウェアの実現は、“MC”の計算についてCPUに付加をかける。（除荷（off-loading）対NICの利益の損失）  
（ii）ソフトウェアの実現は、初期化及び同期される多数の論理的な転送を必要とする。（オーバヘッドの利益の最小化の損失）  
（iii）ソフトウェアの実現は、先のポイントのため、ハードウェアの実現に比較してパフォーマンスに乏しい。
【０１０５】
先の（ii）における「論理的な」転送に対する参照は、論理的な転送は、ハードウェアに依存して、幾つか、おそらく多くの小さな転送に分割される可能性があるためである。
【０１０６】
要するに、本発明の実施の形態は、分散されたメモリをもち、且つネットワークにより接続されたシステムの異なる一部をもつ（例えばスーパーコンピュータ又はネットワーク・オン・チップといった）システムに（メモリの正確性チェックをサポートするため）メモリの正確性の情報を送出するプロセスを提供する。メモリの正確性のチェックをサポートする１６のリモートダイレクトアクセス（RDMA）コンピュータ命令が開示される。
【０１０７】
rdma_mc_put及びrdma_mc_get命令は、効率を最大化するため、圧縮された又は完全に拡張されたメモリの正確性の情報の転送を作動する。
【０１０８】
転送モードは、put及びget動作について個別に指定され、これらは、特定の処理エレメントへのメモリの処理エラーを集中させるのを可能にするため、それぞれの処理エレメントについて独立である。
【０１０９】
開示されるRDMAのメモリの正確性チェックの命令は、MPIラッパーをもつValgrindツール、IBMのRational Purifyのメモリエラー検出機能、Insure++及び他のツールによる例示されたような従来技術に比較して高いパフォーマンスを可能にする。
【０１１０】
従って、本発明の実施の形態は、従来のコンピュータ又はネットワークオンチッププロセッサのネットワークインタフェースコントローラ又はスイッチ又はルータにより実現される、メモリの正確性の情報を転送することによる、メモリの正確性チェックをサポートするリモートダイレクトメモリアクセスの命令を提供するものである。
【０１１１】
上述されたRDMA命令は、メモリの正確性の情報の範囲について、圧縮された転送モードを使用する。  
上述されたRDMA命令は、put/get動作について個別に選択可能であって、異なる処理エレメントについて個別に選択可能な設定可能な転送モードを可能にする。
【産業上の利用可能性】
【０１１２】
開示される発明は、ネットワークオンチッププロセッサ及び超並列コンピュータについて従来及び新たな言語において、効率的且つ非常に設定可能なやり方でメモリの正確性チェックが実行されるのを可能にする。  
本発明は、デバッグで要する時間を短縮化し、分散メモリシステムでのプログラミングのための開発時間を短縮するメモリの正確性をデバッグする自動化されたやり方を提供する。
【０１１３】
なお、本発明の特徴点を付記として以下に示す。
【０１１４】
（付記１）
分散コンピュータシステムにおけるノードとして使用されるプロセッサの通信インタフェースであって、
当該通信インタフェースは、
前記プロセッサにより使用されるメモリと前記分散コンピュータシステムおける別のノードにより使用されるメモリとの間でユーザデータを転送するリモートデータのメモリアクセス手段と、前記ユーザデータのそれぞれのサブユニットのメモリの正確性の情報を維持するメモリの正確性チェックの手段とを備え、
前記リモートデータのメモリアクセス手段は、予め決定されたリモートデータのメモリアクセス命令に応答して、前記メモリの正確性の情報に基づいて前記ユーザデータのサブユニットを選択的に送信することで、前記リモートデータのメモリアクセスを実行する、
ことを特徴とする通信インタフェース。
【０１１５】
（付記２）
前記リモートデータのメモリアクセス手段は、前記ユーザデータの選択されたサブユニットに加えて、前記メモリの正確性の情報を転送する、
付記１記載の通信インタフェース。
【０１１６】
（付記３）
前記リモートデータのメモリアクセス手段は、前記命令の主題である前記ユーザデータの全ての前記メモリの正確性の情報を転送する、
付記２記載の通信インタフェース。
【０１１７】
（付記４）
前記リモートデータのメモリアクセス手段は、前記ユーザデータの選択されたサブユニットのメモリの正確性の情報のみを転送する、
付記２記載の通信インタフェース。
【０１１８】
（付記５）
転送前にメモリの正確性の情報を圧縮する、
付記２乃至４の何れか記載の通信インタフェース。
【０１１９】
（付記６）
前記メモリの正確性の情報は、前記ユーザデータのそれぞれのサブユニットについて、前記サブユニットのメモリの正確性の状態として、複数の可能性のあるメモリの正確性の状態のうちの１つを示す、
付記１乃至５の何れか記載の通信インタフェース。
【０１２０】
（付記７）
前記リモートデータのメモリアクセス手段は、命令されたデータ転送モードに従う転送のために前記ユーザデータのサブユニットを選択し、前記モードは、それぞれ可能性のあるメモリの正確性の状態について、転送が許可されるかを定義する、
付記６記載の通信インタフェース。
【０１２１】
（付記８）
前記データ転送モードは、前記ユーザデータを前記別のノードに書込み、前記別のノードから読み出すために個別に定義可能である、
付記７記載の通信インタフェース。
【０１２２】
（付記９）
それぞれのサブユニットのサイズは定義可能である、
付記１乃至８の何れか記載の通信インタフェース。
【０１２３】
（付記１０）
前記予め決定されたリモートデータのメモリアクセス命令は、（i）リモートデータのメモリアクセス、（ii）メモリの正確性チェック及び（iii）put又はget、の全てを定義する、
付記１乃至９の何れか記載の通信インタフェース。
【０１２４】
（付記１１）
複数のノードを有するコンピュータシステムにおける使用のためのリモートデータのメモリアクセス方法であって、
前記複数のノードのそれぞれは、それぞれのメモリと、あるノードにより使用されるメモリから別のノードにより使用されるメモリにユーザデータを転送することで実行されるノード間のリモートデータメモリアクセスとを使用し、
当該方法は、
サブユニットレベルで前記ユーザデータのメモリの正確性の情報を保持するステップと、
それぞれのサブユニットのメモリの正確性の情報に依存して、転送のために前記ユーザデータのサブユニットを選択するステップと、
選択されたサブユニットを選択的に転送するステップと、
を含むことを特徴とする方法。
【０１２５】
（付記１２）
前記ユーザデータの前記選択されたサブユニットに加えて、前記ユーザデータの少なくとも前記選択されたサブユニットのメモリの正確性の情報を転送するステップを更に含む、
付記１１記載のリモートデータのメモリアクセス方法。
【０１２６】
（付記１３）
転送前に前記メモリの正確性の情報を圧縮するステップを更に含む、
付記１２記載のリモートデータのメモリアクセス方法。
【０１２７】
（付記１４）
それぞれのサブユニットのメモリの正確性の状態を、複数の可能性のあるメモリの正確性の状態のそれぞれについて「転送する」又は「転送しない」を定義する予め決定されたデータ転送モードと比較するステップを更に含む、
付記１０乃至１３の何れか記載のリモートデータのメモリアクセス方法。
【０１２８】
（付記１５）
分散コンピュータシステムにおけるノードの通信インタフェースで実現されるとき、メモリの正確性の情報の転送によるリモートデータのメモリアクセスを提供するコンピュータ読み取り可能な命令。
【符号の説明】
【０１２９】
１：コンピュータ
２：プロセッサ
３：NIC
４：ストレージ
５：入力
６：出力
７：ネットワーク
８：ストレージ
１０：ネットワーク・オン・チップ・プロセッサ
２０：処理エレメント
３０：ネットワークインタフェースコントローラ
４０：外部ストレージ
７０：ネットワーク
９１：赤メモリ（確保及び初期化されていない）
９２：黄メモリ（確保されているが初期化されていない）
９３：緑メモリ（確保及び初期化されている）
【図１】
0005780167.tif 000005
【図２】
0005780167.tif 000006
【図３】
0005780167.tif 000007
【図４】
0005780167.tif 000008
【図５】
0005780167.tif 000009
【図６】
0005780167.tif 000010
【図７】
0005780167.tif 000011