(57)【要約】【課題】通信遅延が短い高速な通信システムを提供すること。【解決手段】ノード２の受信関数が先行して実行した場合には、低遅延低バンド幅送信部７−２にてノード１の自ノード用制御情報を遠隔書き込みする。次いで、ノード１の送信関数が実行すると、該制御情報から受信準備完了を認識すると、高遅延高バンド幅送信部８−１にて該制御情報に基づきノード２の受信バッファ６−２−１へ送信メッセージを遠隔書き込みする。一方、ノード１の送信関数が先行して実行した場合には、低遅延低バンド幅送信部７−１で、ノード２の自ノード用制御情報を遠隔書き込みする。次いで、ノード２の受信関数が実行すると、該制御情報から送信準備完了を認識し、低遅延低バンド幅送信部７−２にてノード１への遠隔読み出しを要求する。ノード１は、高遅延高バンド幅送信部８−１にてノード２の受信バッファ６−２−１へ送信メッセージを転送する。【選択図】    図１
2004272577.tif 000002
【特許請求の範囲】
【請求項１】
第１の通信装置がメッセージを送信するために該第１の通信装置上で送信関数を実行し、第２の通信装置がメッセージを受信するために該第２の通信装置上で受信関数を実行してメッセージ通信を行う通信システムにおいて、
前記第１の通信装置と前記第２の通信装置との双方に、通信相手を特定する識別子ごとに設けた、当該通信相手から遠隔書き込みが可能なメッセージ伝送に関する制御変数を記憶する記憶手段を備えるとともに、
前記第２の通信装置に、通信相手から伝送すべきメッセージの遠隔書き込みが可能な、通信相手を特定するための識別子ごとに設けたメッセージバッファ又は複数の通信相手が共通に利用するユーザー受信バッファの少なくともどちらか一方のバッファを備え、
実行された前記送信関数は、前記第１の通信装置に設けた前記第２の通信装置に対応する前記制御変数が、該第２の通信装置から遠隔書き込みにより受信準備完了を示す状態に更新されていないことを確認した場合には、該第２の通信装置に設けた該第１の通信装置に対応する前記制御変数に、少なくとも、前記メッセージの記憶場所又は転送状況のメッセージ伝送に関する制御情報の遠隔書き込みを行い、
実行された前記受信関数は、前記第２の通信装置に設けた前記第１の通信装置に対応する前記制御変数が、該第１の通信装置から遠隔書き込みにより送信準備完了を示す状態に更新されていないことを確認した場合には、該第１の通信装置に設けた該第２の通信装置に対応する前記制御変数に、少なくとも、該第２の通信装置に設けた、該第１の通信装置に対応する前記メッセージバッファ又は前記ユーザー受信バッファのメッセージ伝送に関する制御情報の遠隔書き込みを行うことを特徴とする通信システム。
【請求項２】
前記第１の通信装置上で実行された前記送信関数は、該第１の通信装置に設けた前記第２の通信装置に対応する前記制御変数が、該第２の通信装置からの遠隔書き込みにより受信準備完了を示す状態に更新されていることを確認した場合には、該制御変数に遠隔書き込みされた前記制御情報を用いて、該第２の通信装置に設けた、該第１の通信装置に対応する前記メッセージバッファ又は前記ユーザー受信バッファへの前記メッセージの遠隔書き込みを行うことを特徴とする請求項１に記載の通信システム。
【請求項３】
前記第１の通信装置は、通信相手からメッセージの遠隔読み出しが可能な、複数の通信相手が共通に利用するユーザー送信バッファを更に備え、
前記第１の通信装置上で実行された前記送信関数は、該第１の通信装置に設けた前記第２の通信装置に対応する前記制御変数が、該第２の通信装置から遠隔書き込みにより受信準備完了を示す状態に更新されていないことを確認した場合には、該第２の通信装置に設けた該第１の通信装置に対応する前記制御変数に、前記ユーザー送信バッファのメッセージ伝送すべきデータを格納した先頭位置を指定する情報の遠隔書き込みを行うことを特徴とする請求項１に記載の通信システム。
【請求項４】
前記第２の通信装置上で実行された前記受信関数は、該第２の通信装置に設けた前記第１の通信装置に対応する前記制御変数が、該第１の通信装置から遠隔書き込みにより送信準備完了を示す状態に更新されていることを確認した場合には、該制御変数に遠隔書き込みされた前記制御情報を用いて、該第１の通信装置に設けた前記ユーザー送信バッファから前記メッセージの遠隔読み出しを行うことを特徴とする請求項３に記載の通信システム。
【請求項５】
前記第２の通信装置上で実行された前記受信関数は、その実行を完了するにあたって、前記第１の通信装置に設けた該第２の通信装置に対応する前記制御変数に、該第２の通信装置に設けた該第１の通信装置に対応する前記メッセージバッファの空き領域の先頭位置を示す情報を遠隔書き込みすることを特徴とする請求項１に記載の通信システム。
【請求項６】
前記第１の通信装置上で実行された前記送信関数は、該第１の通信装置に設けた前記第２の通信装置に対応する前記制御変数に遠隔書き込みされた情報を用いて、該第２の通信装置に設けた、該第１の通信装置に対応する前記メッセージバッファへの前記メッセージの遠隔書き込みを行った後に、該第２の通信装置に設けた該第１の通信装置に対応する前記制御変数に、伝送すべきメッセージの伝送完了を示す情報を遠隔書き込みすることを特徴とする請求項５に記載の通信システム。
【請求項７】
前記通信装置は、アクセス速度の異なる複数の記憶装置を備える場合には、該複数の記憶装置のうちからよりアクセス速度の早い記憶装置を、前記制御変数を記憶する記憶手段として用いることを特徴とする請求項１に記載の通信システム。
【請求項８】
前記通信装置は、記憶容量の異なる複数の記憶装置を備える場合には、該複数の記憶装置のうちから記憶容量がより大きく、かつ通信相手からアクセスが可能な記憶装置を前記バッファとして用いることを特徴とする請求項１に記載の通信システム。
【請求項９】
前記通信装置は、アクセスの遅延時間が異なる複数の通信手段を備える場合には、通信相手に設けた前記制御変数への遠隔書き込みを行うのに、該複数の通信手段のうちでよりアクセス時の遅延時間が短い通信手段を用いることを特徴とする請求項１に記載の通信システム。
【請求項１０】
前記通信装置は、通信時のバンド幅が異なる複数の通信手段を備える場合には、通信相手に前記メッセージの遠隔書き込み又は遠隔読み出しを行うのに、該複数の通信手段のうちでよりバンド幅の広い通信手段を用いることを特徴とする請求項１に記載の通信システム。
【請求項１１】
通信相手を特定するための識別子ごとに設けた、当該通信相手から遠隔書き込みが可能な制御変数を記憶する記憶手段を備える第１の通信装置上でメッセージを送信するための送信関数を実行し、通信相手を特定するための識別子ごとに設けた、当該通信相手から遠隔書き込みが可能な制御変数を記憶する記憶手段と、通信相手から伝送すべきメッセージの遠隔書き込みが可能な、通信相手を特定するための識別子ごとに設けたメッセージバッファ又は複数の通信相手が共通に利用するユーザー受信バッファの少なくともどちらか一方のバッファとを備えた第２の通信装置上でメッセージを受信するための受信関数を実行して、該第１の通信装置から該第２の通信装置へのメッセージ通信を行う通信方法において、
前記第２の通信装置上で実行された前記受信関数は、該第２の通信装置に設けた前記第１の通信装置に対応する前記制御変数が、該第１の通信装置から遠隔書き込みにより送信準備完了を示す状態に更新されていないことを確認した場合には、該第１の通信装置に設けた該第２の通信装置に対応する前記制御変数に、少なくとも、該第２の通信装置に設けた、該第１の通信装置に対応する前記メッセージバッファ又は前記ユーザー受信バッファのメッセージ伝送に関する制御情報の遠隔書き込みを行い、
前記第１の通信装置上で実行された前記送信関数は、該第１の通信装置に設けた前記第２の通信装置に対応する前記制御変数が、該第２の通信装置から遠隔書き込みにより受信準備完了を示す状態に更新されていることを確認した場合には、該制御変数に遠隔書き込みされた前記制御情報を用いて、該第２の通信装置に設けた、該第１の通信装置に対応する前記メッセージバッファ又は前記ユーザー受信バッファへ前記メッセージの遠隔書き込みを行うことを特徴とする通信方法。
【請求項１２】
前記第１の通信装置上で実行された前記送信関数は、該第１の通信装置に設けた前記第２の通信装置に対応する前記制御変数が、該第２の通信装置から遠隔書き込みにより受信準備完了を示す状態に更新されていないことを確認した場合には、該第２の通信装置に設けた該第１の通信装置に対応する前記制御変数に、少なくとも、該第１の通信装置内の前記メッセージの記憶場所に関する制御情報の遠隔書き込みを行い、
前記第２の通信装置上で実行された前記受信関数は、該第２の通信装置に設けた前記第１の通信装置に対応する前記制御変数が、該第１の通信装置から遠隔書き込みにより送信準備完了を示す状態に更新されていることを確認した場合には、該制御変数に遠隔書き込みされた前記制御情報を用いて、該第１の通信装置内の前記記憶場所から、該第２の通信装置に設けた、該第１の通信装置に対応する前記メッセージバッファ又は前記ユーザー受信バッファへ前記メッセージの遠隔読み出しを行うことを特徴とする請求項１１に記載の通信方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数の通信装置からなる通信システム及び通信方法に関する。
【０００２】
【従来の技術】
並列計算機やパーソナルコンピュータやワークステーション等を構成要素とするクラスタにおける並列処理プログラムを記述するためのＡＰＩ（アプリケーションインタフェース）の一種であるＭＰＩ（メッセージパッシングインタフェース）等のメッセージ交換方式においては、通信相手のプロセス（ＭＰＩの場合はＲＡＮＫ）と通信バッファを指定した関数を、送信側および受信側で実行することにより、対応する通信相手とのメッセージのやり取りを行うことが一般的である。
【０００３】
その代表的なＡＰＩであるＭＰＩのＴＣＰ／ＩＰを用いた実装では、ＭＰＩのシステムが提供するＦＩＦＯ状のメッセージ受信バッファに一旦全てのメッセージが受信され、そこから受信側の受信関数で指定されたプロセスからのメッセージを検索して、該当するメッセージが見つかった場合に受信関数で指定されたユーザーバッファにコピーをすることになる。よって、検索やコピーにより通信遅延時間が増加してしまう。
【０００４】
一方、近年、遠隔書き込みや遠隔読み出しをハードウェアやソフトウェアにより実現し、その遠隔アクセス手段を用いてメッセージ交換を高速化するための方式がいくつか提案されている。
【０００５】
例えば、情報処理学会論文誌Ｖｏｌ．４０，Ｎｏ．５に掲載されているＭＰＩ／ＭＢＣＦという実装においては、受信関数の実行が行われると送信側にＭＢＣＦというソフトウェアにより実現されたＦＩＦＯに受信バッファのアドレス等の情報が転送され、送信関数がその後で実行されると、上記ＦＩＦＯを検索し、所望のプロセスからの受信側の準備完了通知を発見し、その情報を用いて遠隔書き込みを受信関数が指定したユーザーバッファに直接、遠隔書き込みを行うことにより高速化を図っている（非特許文献１参照）。ただし、送信関数の実行が先になった場合は、システムの一括管理のバッファに受信メッセージが入ってしまうため、高速化が得られない。さらに、送信関数実行と受信関数実行とがほぼ同時に行なわれた場合には一貫性維持のための制御が必要になる。
【０００６】
これに類似する方式として情報処理学会論文誌Ｖｏｌ．４０，Ｎｏ．５に掲載されているＥＭＸ−ＭＰＩという実装においては、送信関数に先立って実行された受信関数から送られてくるＲＡＮＫやバッファアドレス等の情報をソフトウェアにより実現された連想メモリに記憶しておき、送信側での受信関数からの情報検索を高速化している（非特許文献２参照）。送信関数が受信関数よりも先に実行された場合は、メッセージ本体の送信は延期され、その代わりに送信メッセージのバッファアドレスを受信側に通知してソフトウェアにより実現された連想メモリに記憶しておき、受信関数が実行されたら上記の連想メモリから送信メッセージの情報を検索し、所望の情報があった場合はその情報をもとに遠隔読み出しを行い、高速化を図っている。ただし、この方式は連想メモリを実現するためのオーバーヘッドを伴う。さらに、送信関数実行と受信関数実行とがほぼ同時に行なわれた場合には一貫性維持のための制御が必要になる。
【０００７】
さらに、情報処理学会論文誌Ｖｏｌ．４３，Ｎｏ．４に記載されているＭＰＩの制約を緩和したＦＭＰＬというメッセージ交換ＡＰＩの実装においては、受信関数実行側から送信関数実行側にヘッダーを遠隔書き込みし、送信関数ではそのヘッダー情報をもとに受信関数実行側に遠隔書き込みを行う（非特許文献３参照）。ただし、この方式は受信関数の実行が送信関数の実行より指定時間以上遅れた場合は、タイムアウトして送信側のシステムバッファに送信メッセージがバッファリングされるため、受信関数実行から実際にメッセージの受信が完了するまでの遅延時間が大きくなってしまう。また、送信元にワイルドカードを指定した受信の場合をＡＰＩ上で完全に分離しなければならない。
【０００８】
【非特許文献１】
森本、松本、平木  ：  メモリベース通信を用いた高速ＭＰＩの実装と評価，情報処理学会論文誌，  Ｖｏｌ．４０，  Ｎｏ．５，  ｐｐ．２２５６−２２６８  （１９９９）
【０００９】
【非特許文献２】
建部、児玉、関口、山口  ：  リモートメモリ書込みを用いたＭＰＩの効率的実装，  情報処理学会論文誌，  Ｖｏｌ．４０，  Ｎｏ．５，  ｐｐ．２２４６−２２５５  （１９９９）
【００１０】
【非特許文献３】
建部、長嶋、関口、北林、林田  ：  遠隔メモリ操作に基づく高速メッセージパッシングライブラリＦＭＰＬの設計と開発，  情報処理学会論文誌，  Ｖｏｌ．４３，  Ｎｏ．４，  ｐｐ．８７９−８９２  （２００２）
【００１１】
【発明が解決しようとする課題】
以上説明したように、ＭＰＩ等のメッセージ交換の従来の実装方式においては、受信側でのメッセージの検索に時間がかかったり、受信側でのシステムバッファからのユーザーバッファへのコピーに時間がかかるという問題があった。その改良方式においても従来は送信側での受信側状態の検索に時間がかかっていたり、受信関数の実行が遅れた場合は受信側でのメッセージの検索に時間がかかったり、システムバッファからのユーザーバッファへのコピーが発生したりしていた。
【００１２】
本発明は、上記事情を考慮してなされたもので、通信遅延が短い高速な通信システム及び通信方法を提供することを目的とする。
【００１３】
【課題を解決するための手段】
本発明は、第１の通信装置がメッセージを送信するために該第１の通信装置上で送信関数を実行し、第２の通信装置がメッセージを受信するために該第２の通信装置上で受信関数を実行してメッセージ通信を行う通信システムにおいて、
前記第１の通信装置と前記第２の通信装置との双方に、通信相手を特定する識別子ごとに設けた、当該通信相手から遠隔書き込みが可能なメッセージ伝送に関する制御変数を記憶する記憶手段を備えるとともに、
前記第２の通信装置に、通信相手から伝送すべきメッセージの遠隔書き込みが可能な、通信相手を特定するための識別子ごとに設けられるメッセージバッファ、又は複数の通信相手が共通に利用するユーザー受信バッファの少なくともどちらか一方のバッファを備え、
実行された前記送信関数は、前記第１の通信装置に設けた前記第２の通信装置に対応する前記制御変数が、該第２の通信装置から遠隔書き込みにより受信準備完了を示す状態に更新されていないことを確認した場合には、該第２の通信装置に設けた該第１の通信装置に対応する前記制御変数に、少なくとも、前記メッセージの記憶場所又は転送状況のメッセージ伝送に関する制御情報の遠隔書き込みを行い、
実行された前記受信関数は、前記第２の通信装置に設けた前記第１の通信装置に対応する前記制御変数が、該第１の通信装置から遠隔書き込みにより送信準備完了を示す状態に更新されていないことを確認した場合には、該第１の通信装置に設けた該第２の通信装置に対応する前記制御変数に、少なくとも、該第２の通信装置に設けた、該第１の通信装置に対応する前記メッセージバッファ又は前記ユーザー受信バッファのメッセージ伝送に関する制御情報の遠隔書き込みを行うことを特徴とする。
【００１４】
また、本発明は、通信相手を特定するための識別子ごとに設けた、当該通信相手から遠隔書き込みが可能な制御変数を記憶する記憶手段を備える第１の通信装置上でメッセージを送信するための送信関数を実行し、通信相手を特定するための識別子ごとに設けた、当該通信相手から遠隔書き込みが可能な制御変数を記憶する記憶手段と、通信相手から伝送すべきメッセージの遠隔書き込みが可能な、通信相手を特定するための識別子ごとに設けたメッセージバッファ又は複数の通信相手が共通に利用するユーザー受信バッファの少なくともどちらか一方のバッファとを備えた第２の通信装置上でメッセージを受信するための受信関数を実行して、該第１の通信装置から該第２の通信装置へのメッセージ通信を行う通信方法において、
前記第２の通信装置上で実行された前記受信関数は、該第２の通信装置に設けた前記第１の通信装置に対応する前記制御変数が、該第１の通信装置から遠隔書き込みにより送信準備完了を示す状態に更新されていないことを確認した場合には、該第１の通信装置に設けた該第２の通信装置に対応する前記制御変数に、少なくとも、該第２の通信装置に設けた、該第１の通信装置に対応する前記メッセージバッファ又は前記ユーザー受信バッファのメッセージ伝送に関する制御情報の遠隔書き込みを行い、
前記第１の通信装置上で実行された前記送信関数は、該第１の通信装置に設けた前記第２の通信装置に対応する前記制御変数が、該第２の通信装置から遠隔書き込みにより受信準備完了を示す状態に更新されていることを確認した場合には、該制御変数に遠隔書き込みされた前記制御情報を用いて、該第２の通信装置に設けた、該第１の通信装置に対応する前記メッセージバッファ又は前記ユーザー受信バッファへ前記メッセージの遠隔書き込みを行うことを特徴とする。
【００１５】
好ましくは、前記第１の通信装置上で実行された前記送信関数は、該第１の通信装置に設けた前記第２の通信装置に対応する前記制御変数が、該第２の通信装置から遠隔書き込みにより受信準備完了を示す状態に更新されていないことを確認した場合には、該第２の通信装置に設けた該第１の通信装置に対応する前記制御変数に、少なくとも、該第１の通信装置内の前記メッセージの記憶場所に関する制御情報の遠隔書き込みを実行し、前記第２の通信装置上で実行された前記受信関数は、該第２の通信装置に設けた前記第１の通信装置に対応する前記制御変数が、該第１の通信装置からの遠隔書き込みにより送信準備完了を示す状態に更新されていることを確認した場合には、該制御変数に遠隔書き込みされた前記制御情報を用いて、該第１の通信装置における前記記憶場所から、該第２の通信装置に設けた、該第１の通信装置に対応する前記メッセージバッファ又は前記ユーザー受信バッファへ前記メッセージの遠隔読み出しを行うことを特徴とするようにしてもよい。
【００１６】
本発明によれば、通信遅延が短い高速なメッセージ交換を実現することができる。
【００１７】
【発明の実施の形態】
以下、図面を参照しながら発明の実施の形態を説明する。
【００１８】
（第１の実施形態）
本実施形態は、受信側のシステムバッファ経由でタグマッチングを行うメッセージ交換方式を用いるものである。
【００１９】
図１に、本実施形態に係るシステムの構成例を示す。また、図１中には、受信関数が先行した場合の動作手順例を併せて示している。
【００２０】
図１において、１は送信関数（Ｓｅｎｄ（））を実行することによってデータの送信を行う送信関数実行側ノードであり、２は受信関数（Ｒｅｃｅｉｖｅ（））を実行することによってデータの受信を行う受信関数実行側ノードである。送信関数実行側ノード１は、プロセスの識別子ＲＡＮＫとしてＲＡＮＫ１を有する。他方、受信関数実行側ノード２は、プロセスの識別子ＲＡＮＫとしてＲＡＮＫ２を有する。なお、ノードは、例えば、計算機やワークステーションなどが、これに該当する。
【００２１】
また、３は低遅延で遠隔アクセス可能な小容量メモリである。この小容量低遅延メモリ３は、例えば、情報処理学会論文誌Ｖｏｌ．４４，Ｎｏ．ＳＩＧ１（ＨＰＳ６）に記載されているＬＬＣＭにより構成してもよい。
【００２２】
４は小容量低遅延メモリ３上に配置される、遠隔書き込みの可能な制御情報を示す。各制御情報４は、小容量低遅延メモリ３上で、通信相手を特定する識別子に対応する位置（例えば、アドレス）に配置される。本例では、通信相手のＲＡＮＫごとに対応する位置に配置されるものとしている。
【００２３】
５は高遅延で遠隔アクセス可能な大容量メモリである。この大容量高遅延メモリ５は、例えば、情報処理学会論文誌Ｖｏｌ．４４，Ｎｏ．ＳＩＧ１（ＨＰＳ６）に記載されているＳＯ−ＤＩＭＭ利用のバンクメモリにより構成してもよい。
【００２４】
６は大容量高遅延メモリ５上に配置されるシステム受信バッファを示す。各システム受信バッファ６は、大容量高遅延メモリ５上で、通信相手を特定する識別子に対応する位置（例えば、アドレス）に配置される。本例では、通信相手のＲＡＮＫごとに対応する位置に配置されるものとしている。
【００２５】
７−１，７−２は低遅延低バンド幅送信部である。低遅延低バンド幅送信部７−１，７−２は、例えば、情報処理学会論文誌Ｖｏｌ．４４，Ｎｏ．ＳＩＧ１（ＨＰＳ６）に記載されているＡＯＴＦ送信機構により構成してもよい。
【００２６】
８−１，８−２は高遅延高バンド幅送信部である。高遅延高バンド幅送信部８−１，８−２は、例えば、ＲＤＭＡ送信機構により構成してもよい。
【００２７】
９−１，９−２はＣＰＵである。
【００２８】
また、１０は、送信メッセージを保持するユーザー送信バッファ、１１は受信したメッセージを保持するユーザー受信バッファをそれぞれ示している。ユーザー送信バッファ１０やユーザー受信バッファ１１は、複数の通信相手に共通に使用される。
【００２９】
このような構成のシステム上で、受信関数の実行が送信関数の実行より先行した場合の動作例は以下のようになる。
【００３０】
手順（１）受信関数実行側ノード２（本例ではＲＡＮＫ２）のＣＰＵ９−２が、通信相手となる送信関数実行側ノード１（本例ではＲＡＮＫ１）から受信する受信関数を起動して、まず、該ＲＡＮＫ１に対応する手元の制御情報４（本例では制御情報４−２−１）をチェックし、通信相手となる送信関数実行側ノード１においては未だ送信関数が実行されていないことを検知する（図１中の▲１▼参照）。
【００３１】
手順（２）受信関数実行側ノード２のＣＰＵ９−２が、低遅延低バンド幅送信部７−２を起動する（図１中の▲２▼参照）。
【００３２】
手順（３）受信関数実行側ノード２の低遅延低バンド幅送信部７−２は、送信関数実行側ノード１のＲＡＮＫ２に対応する制御情報４−１−２（例えばＲＡＮＫ１からのメッセージを受けるためのＲＡＮＫ２の受信バッファ６−２−１内の空き領域の先頭アドレスや空き容量）を更新する（図１中の▲３▼参照）。
【００３３】
手順（４）ここで、送信関数実行側ノード１のＣＰＵ９−１が、ＲＡＮＫ２に送信する送信関数を起動して、まず、ＲＡＮＫ２に対応する手元の制御情報４−１−２をチェックし、通信相手すなわち受信関数実行側ノード２は、既に受信関数を実行して準備完了状態にあることを知る（図１中の▲４▼参照）。
【００３４】
手順（５）送信関数実行側ノード１のＣＰＵ９−１が、その制御情報４−１−２にあるＲＡＮＫ１からのメッセージを受けるためのＲＡＮＫ２の受信バッファ６−２−１内の空きアドレスに対するデータ転送を、高遅延高バンド幅送信部８−１に依頼する（図１中の▲５▼参照）。
【００３５】
手順（６）送信関数実行側ノード１の高遅延高バンド幅送信部８−１は、ユーザー送信バッファ１０から受信バッファ６−２−１内の空きアドレスへのデータ転送を実行する（図１中の▲６▼参照）。
【００３６】
手順（７）送信関数実行側ノード１のＣＰＵ９−１は、データを転送し終わったら、低遅延低バンド幅送信部７−１を起動する（図１中の▲７▼参照）。
【００３７】
手順（８）送信関数実行側ノード１の低遅延低バンド幅送信部７−１は、ＲＡＮＫ２上のＲＡＮＫ１から受け取る制御情報４−２−１（例えば受信バッファ６−２−１内にしたという通知）を書き込む（図１中の▲８▼参照）。
【００３８】
手順（９）他方、受信関数実行側ノード２のＣＰＵ９−２が、制御情報４−２−１として書き込まれたデータ転送完了通知をポーリングして、データの到着を検出する（図１中の▲９▼参照）。
【００３９】
手順（１０）受信関数実行側ノード２のＣＰＵ９−２が、受信バッファ６−２−１に所望のメッセージタグを有するメッセージが存在するか否か検査し、存在する場合は、それをユーザー受信バッファ１１にコピーする（図１中の丸で囲んだ記号１０参照）。他のタグを持っていた場合は、それを退避しておき、上記の手順（２）から後を所望のメッセージが送られてくるまで繰り返し、受信関数実行側ノード２は所望のメッセージを呼び込む。
【００４０】
ここで、ＲＡＮＫ１に対する制御情報４−２−１や受信バッファ６−２−１の位置やＲＡＮＫ２に対する制御情報４−１−２の位置は、ＲＡＮＫに対応した位置に配置されているために、簡単に求まる。システムの受信バッファ６−２−１内にはＲＡＮＫ１からのメッセージしか入っていないので、従来の全メッセージを一手に保持するバッファの検索に比べて、所望のメッセージタグを有するメッセージを早く見つけ出すことができる。また、上記の手順（３）の通信には低遅延な通信手段を用いているのでＲＡＮＫ１側での送信関数が実行される前に制御情報が伝達される確率が高くなり、既に送信側（ＲＡＮＫ１側）に届いている受信アドレスへの遠隔書き込みによって高速なデータ転送が行われる確率が高くなる。受信バッファは大容量なメモリ側にあるのでバッファ容量を豊富にとることが可能であり、メッセージ本体の転送には高バンド幅の転送手段を用いているので、全体として低遅延かつ高バンド幅なメッセージ交換が実現される。
【００４１】
なお、本実施形態では上記の手順（７），手順（８）を実行して明示的にデータ転送完了通知を行ったが、上記の手順（６）の動作の一部としてハードウェアが通知する仕組みを持っていれば、さらに低遅延にデータの授受が行われる。
【００４２】
続いて、図１のシステム構成例において、送信関数の実行が受信関数の実行より先行した場合の動作例について説明する。
【００４３】
図２に、図１と同様の構成例に併せて、本実施形態の受信側のシステムバッファ経由でタグマッチングを行うメッセージ交換方式において送信関数が先行した場合の動作手順例を示す。
【００４４】
この例での状況は、受信側の準備ができていない状態で送信関数を実行した場合の動作例である。このような構成のシステム上で送信関数の実行が受信関数の実行より先行した場合の動作は以下のようになる。
【００４５】
手順（１）送信関数実行側ノード１（本例ではＲＡＮＫ１）のＣＰＵ９−１が、通信相手（本例ではＲＡＮＫ２）に送信する送信関数を起動して、まず、該ＲＡＮＫ１に対応する手元の制御情報４−１−２をチェックし、ＲＡＮＫ２においては未だ受信関数が実行されていないことを検知する（図２中の▲１▼参照）。
【００４６】
手順（２）送信関数実行側ノード１のＣＰＵ９−１が、低遅延低バンド幅送信部７−１を起動する（図２中の▲２▼参照）。
【００４７】
手順（３）送信関数実行側ノード１の低遅延低バンド幅送信部７−１は、受信関数実行側ノード２のＲＡＮＫ１に対応する制御情報４−２−１（例えばユーザー送信バッファ１０の先頭アドレスやデータ長）を更新する（図２中の▲３▼参照）。
【００４８】
手順（４）ここで、受信関数実行側ノード２のＣＰＵ９−２が、ＲＡＮＫ１から受信する受信関数を実行して、まず、ＲＡＮＫ１に対応する手元の制御情報４−２−１をチェックし、通信相手すなわちＲＡＮＫ１は既に送信関数を実行して準備完了状態にあることを知る（図２中の▲４▼参照）。
【００４９】
手順（５）受信関数実行側ノード２のＣＰＵ９−２が、その制御情報４−２−１にあるＲＡＮＫ２へのメッセージを保持しているＲＡＮＫ１のユーザー送信バッファ１０からＲＡＮＫ２の受信バッファ６−２−１内の空きアドレスへのデータ転送の依頼（遠隔読み出し要求）を、低遅延低バンド幅送信部７−２に依頼する（図２中の▲５▼参照）。
【００５０】
手順（６）受信関数実行側ノード２の低遅延低バンド幅送信部７−２は、ＲＡＮＫ１の高バンド幅送信部８−１に遠隔読み出し要求を伝達する（図２中の▲６▼参照）。
【００５１】
手順（７）送信関数実行側ノード１の高バンド幅送信部８−１は、上記の遠隔読み出し要求を受けると、ユーザー送信バッファ１０からＲＡＮＫ２の受信バッファ６−２−１内の空きアドレスに対するデータ転送を行う（図２中の▲７▼参照）。
【００５２】
手順（８）送信関数実行側ノード１の高バンド幅送信部８−１は、受信バッファ６−２−１へのデータを転送し終わったら、ＲＡＮＫ２の制御情報４−２−１にデータ転送完了を通知する（図２中の▲８▼参照）。
【００５３】
手順（９）他方、受信関数実行側ノード２のＣＰＵ９−２が、制御情報４−２−１として書き込まれたデータ転送完了通知をポーリングして、データの到着を検出する（図２中の▲９▼参照）。
【００５４】
手順（１０）受信関数実行側ノード２のＣＰＵ９−２が、受信バッファ６−２−１に所望のメッセージタグを有するメッセージが存在するか否か検査し、存在する場合は、それをユーザー受信バッファ１１にコピーする（図２中の丸で囲んだ記号１０参照）。他のタグを持っていた場合は、それを退避しておき、上記の手順（９）から後を所望のメッセージが送られてくるまで繰り返す。
【００５５】
（第２の実施形態）
次に、本発明の第２の実施例形態について説明する。
【００５６】
本実施形態は、メッセージ交換方式としてユーザーバッファへの直接受信を用いるゼロコピー通信方式を使用するものである。
【００５７】
図３に、本実施形態に係るシステムの構成例を示す。本構成例は、基本的には、図１や図２と同様である。
【００５８】
また、図３中には、受信関数が先行した場合の動作手順例を併せて示している。他方、図４には、送信関数が先行した場合の動作手順例を示している。
【００５９】
以下では、第１の実施形態と相違する点を中心に説明する。
【００６０】
まず、図３を参照しながら、本実施形態のメッセージ交換方式において受信関数が先行した場合の動作手順例について説明する。全体的な流れは基本的には図２の流れと同様である。
【００６１】
（１）の手順（図３中の▲１▼参照）と（２）の手順（図３中の▲２▼参照）は、図２の手順例と同様である。
【００６２】
次いで、図１の手順例では手順（３）で受信関数実行側ノード２の低遅延低バンド幅送信部７−２が送信関数実行側ノード１のＲＡＮＫ２に対応する制御情報４−１−２へ自ノードのシステムの受信バッファ６−２−１内の空き領域の先頭アドレスを設定するのに対して、この手順例では手順（３）でユーザー受信バッファ１１の先頭アドレスとメッセージタグを制御情報４−１−２へ書き込む（図３中の▲３▼参照）。
【００６３】
そして、手順（４）で送信関数実行側ノード１が送信関数を実行して、その中でメッセージタグが一致したならば（図３中の▲４▼参照）、手順（５）でユーザー受信バッファ１１のアドレスを高バンド幅送信部８−１に設定し（図３中の▲５▼参照）、手順（６）でユーザー送信バッファ１０からユーザー受信バッファ１１への遠隔書き込みを実行する（図３中の▲６▼参照）。
【００６４】
これによって、ゼロコピーのメッセージ交換が実現し、低遅延かつ高バンド幅なメッセージ交換が行われる。
【００６５】
なお、（７）の手順（図３中の▲７▼参照）と（８）の手順（図３中の▲８▼参照）は図１と同様である。
【００６６】
次に、図４を参照しながら、本実施形態のメッセージ交換方式において送信関数が先行した場合の動作手順例について説明する。全体的な流れは基本的には図２の流れと同様である。
【００６７】
（１）の手順（図４中の▲１▼参照）と（２）の手順（図４中の▲２▼参照）は、図２の手順例と同様である。
【００６８】
次いで、図２の手順例においては手順（３）でユーザー送信バッファ１０の先頭アドレスやデータ長を更新したが、この手順例では手順（３）でメッセージタグをも送信する（図４中の▲３▼参照）。
【００６９】
そして、手順（４）で受信関数実行側ノード２が受信関数を実行したときに、その中でメッセージタグの比較を行い、一致した場合に、以下の切り替えを行う（図４中の▲４▼参照）。すなわち、図２の手順例において手順（５）ではシステムの受信バッファ６−２−１内の空き領域の先頭アドレスへの遠隔読み出しを依頼したのに対し、この手順例では手順（５）でユーザー受信バッファ１１の先頭アドレスに切り替えた遠隔読み出しを依頼する（図４中の▲５▼参照）。
【００７０】
しかして、手順（６）で図２と同様に遠隔読み出し要求の伝達が行われ（図４中の▲６▼参照）、手順（７）で高バンド幅送信部８−１がユーザー送信バッファ１０からユーザー受信バッファ１１への遠隔読み出しを実行する（図４中の▲７▼参照）。
【００７１】
これによって、ゼロコピーのメッセージ交換が実現し、低遅延かつ高バンド幅なメッセージ交換が行われる。
【００７２】
（第３の実施形態）
次に、本発明の第３の実施例形態について説明する。
【００７３】
本実施形態は、メッセージ交換方式として、ユーザーバッファへの直接受信を用いるゼロコピー通信と、システムバッファによる１コピー通信とを併用した方式を用いるものである。
【００７４】
図５に、本実施形態に係るシステムの構成例を示す。本構成例は、基本的には、これまでの各図と同様である。
【００７５】
また、図５中には、送信関数が先行した場合の動作手順を併せて示している。
【００７６】
受信関数が先行した場合の動作手順は、例えば、図３の手順を用いる。受信関数が先行した場合に図１の手順を用いる方法もある。
【００７７】
以下では、第３の実施形態と相違する点を中心に説明する。
【００７８】
図４の手順例では送信関数実行が先行した場合は受信側に遠隔読み出しを依頼するのに対し、図５の手順例ではより積極的にデータ本体を受信側に送りつけるように制御される。
【００７９】
具体的には、前回のメッセージ交換において、手順（９）として、前回の受信関数実行の終了時に、その受信に関与したシステム受信バッファ６の空き領域の先頭アドレスと残り容量を送信関数実行側ノード１の制御情報４−１−２に遠隔書き込みしておく（図５中の▲９▼参照）。
【００８０】
しかして、今回のメッセージ交換において、手順（１）で送信関数を実行し上記のバッファアドレスを得て（図５中の▲１▼参照）、システム受信バッファ６の残り容量がある場合は、手順（２）で高バンド幅送信部８−１を起動して（図５中の▲２▼参照）、手順（３）でそこにデータ本体を遠隔書き込みする（図５中の▲３▼参照）。
【００８１】
そして、転送が終了したところで、手順（４）で低遅延低バンド幅送信部７−１を起動し（図５中の▲４▼参照）、手順（５）で受信関数実行側ノード２の制御情報４−２−１にデータ伝送が完了した状態である旨を通知するデータ伝送完了通知を遠隔書き込みする（図５中の▲５▼参照）。
【００８２】
しかして、手順（６）で受信関数実行側ノード２が受信関数を実行した際に、遠隔読み出しをかけずとも既に手元のシステム受信バッファ６−２−１にデータが届いていることを知って（図５中の▲６▼参照）、手順（７）でメッセージタグの一致を検査した後に、一致したものをユーザー受信バッファ１１にコピーする（図５中の▲７▼参照）。
【００８３】
そして、手順（８）で低遅延低バンド幅送信部７−２を起動し（図５中の▲８▼参照）、手順（９）で前述したようにシステム受信バッファ６の空き領域の先頭アドレスと残り容量を制御情報４−１−２に遠隔書き込みしておく（図５中の▲９▼参照）。
【００８４】
このようにして、受信関数実行が大きく遅れた場合は、遅延時間が短縮される。また、システム受信バッファ６のアドレスが受信関数の終了間際に送信側（ＲＡＮＫ１側）に渡っていたとしても、受信関数が早めに実行された場合は、ユーザー受信バッファ１１のアドレスで上書きすることで、図３の動作に切り替えることは容易である。このようにすることによって、受信関数が早めに実行された場合も、遅めに実行された場合も、低遅延かつ高バンド幅にメッセージ交換が行われる。
【００８５】
なお、送信関数実行が先行した場合に、図５の手順例ではメッセージを受信関数実行側のシステム受信バッファへ送りつけるようにしたが、その代わりに、メッセージを受信関数実行側のユーザ受信バッファへ送りつけるようにする構成も可能である。
【００８６】
ところで、以上の各実施形態では、１つのノードは、送信関数実行側ノードと受信関数実行側ノードのいずれかであったが、１つのノードに送信関数実行側ノードと受信関数実行側ノードの両方の機能を搭載すると好ましい。
【００８７】
また、以上の各実施形態は組み合わせて実施可能である。例えば、１つのノードが、図１〜図４の手順をすべて実行可能であってもよい。このような場合には、例えば、複数の関数のうちからいずれかを適宜選択して実行すればよい。
【００８８】
なお、各実施形態で例示した構成は一例であって、それ以外の構成を排除する趣旨のものではなく、例示した構成の一部を他のもので置き換えたり、例示した構成の一部を省いたり、例示した構成に別の機能を付加したり、それらを組み合わせたりすることなどによって得られる別の構成も可能である。また、例示した構成と論理的に等価な別の構成、例示した構成と論理的に等価な部分を含む別の構成、例示した構成の要部と論理的に等価な別の構成なども可能である。また、例示した構成と同一もしくは類似の目的を達成する別の構成、例示した構成と同一もしくは類似の効果を奏する別の構成なども可能である。
【００８９】
また、各種構成部分についての各種バリエーションは、適宜組み合わせて実施することが可能である。
【００９０】
本発明は、上述した実施の形態に限定されるものではなく、その技術的範囲において種々変形して実施することができる。
【００９１】
【発明の効果】
本発明によれば、通信遅延が短い高速なメッセージ交換を実現することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施形態に係る通信システムの構成例及び動作手順例を示す図
【図２】同実施形態に係る通信システムの構成例及び他の動作手順例を示す図
【図３】本発明の第２の実施形態に係る通信システムの構成例及び動作手順例を示す図
【図４】同実施形態に係る通信システムの構成例及び他の動作手順例を示す図
【図５】本発明の第３の実施形態に係る通信システムの構成例及び動作手順例を示す図
【符号の説明】
１…送信関数実行側ノード、２…受信関数実行側ノード、３…低遅延で遠隔アクセス可能な小容量メモリ、４，４−１−２，４−２−１：通信相手ごとに対応する位置に配置された制御情報、５…高遅延で遠隔アクセス可能な大容量メモリ、６，６−２−１：通信相手ごとに対応する位置に配置されたシステム受信バッファ、７−１，７−２…低遅延低バンド幅送信部、８−１，８−２…高遅延高バンド幅送信部、９−１，９−２…ＣＰＵ、１０…ユーザー送信バッファ、１１…ユーザー受信バッファ
【図１】
2004272577.tif 000003
【図２】
2004272577.tif 000004
【図３】
2004272577.tif 000005
【図４】
2004272577.tif 000006
【図５】
2004272577.tif 000007