(57)【要約】【課題】計算機システム上でリモートメモリ書き込み機構を用いたデータ送信中に他の計算機から受信できない問題がある。【解決手段】送信処理にてデータ分割する閾値を自動的に設定し、送信側計算機にて送信データをその閾値で分割して送信することにより、他の計算機からの送信要求を受信する手段を提供する。更に、データ送信中に通信先計算機間との性能から、データ分割する閾値を動的に変更して、実行中に最適なデータ分割の閾値を算出する手段を提供する。【選択図】図１
2007140888.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算機がネットワーク接合し、任意の計算機間でデータ通信を行う際、送信側計算機が受信側計算機の特定の位置にデータを書き込めるリモートメモリ書き込み機能を有する計算機システムにおいて、計算機内に通信相手の計算機毎に固定された領域である静的受信バッファとその静的受信バッファに書き込むための静的送信バッファ、及び、データの送受信のための送信バッファ、受信バッファを確保し、送信側計算機が送信データのデータ長を含む送信要求を受信側計算機に書き込み、
送信要求を受けた受信側計算機が受信バッファの位置情報を送信側計算機の該静的受信バッファに書き込み、送信側計算機が受信側計算機の受信バッファの位置情報から受信バッファに対してそれぞれ送信データを書き込む計算機間のデータ送信方法であって、送信側計算機が送信前にデータを分割する閾値を自動設定して、その閾値によりデータを分割して分割した各データを送信することを特徴とするデータ送信方法。
【請求項２】
受信側計算機の負荷に基づいて、ユーザプログラムの実行中にデータを分割する閾値を動的に変更することを特徴とする請求項１記載のデータ送信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は計算機間のデータ通信方法に関し、更に詳しくは、ＭＰＩを始めとするメッセージパッシングライブラリのデータ通信方法に関する。
【背景技術】
【０００２】
従来のリモートメモリ書き込み機能を用いて計算機間でデータの送受信を行う技術では、リモートメモリ書き込み機構で通信する送信バッファ及び受信バッファを確保し、受信側計算機は、初期化時、及び、データ受信検知後に、送信側計算機に対して次に送信するデータの受信用としての該受信バッファを割り当てる。また、受信側計算機は割り当てた該受信バッファの位置情報を送信側計算機に対して該リモートメモリ書き込み機能により通知し、送信側計算機は通知された位置情報に基づいて、該リモートメモリ書き込み機能を用いて受信側計算機の受信バッファに対し、送信データを送信している。
【０００３】
リモートメモリ書き込み機構では、各計算機のオペレーティングシステムを介さず、割り込み処理やパケットのバッファリング処理を行わないで、送信側計算機から直接、受信側計算機内の特定メモリ領域へデータ転送が可能である。但し、リモートメモリ書き込み機構を用いた通信では、オペレーティングシステムによるバッファリングを行わないため、複数の計算機へ同時に異なるデータを送信することができない。また、本発明ではリモートメモリ書き込みを行うことができる特定メモリ領域をリモートメモリ書き込み領域と呼ぶ（例えば、特許文献１参照）。
【０００４】
【特許文献１】特開平１０−１６１９５５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記従来技術は、２つの計算機間でのデータ通信に対する技術であり、リモートメモリ書き込み機能は双方向通信が可能であるが、データ通信中に他の計算機とデータ通信することの考慮ができていなかった。このため、データ通信中に他の計算機から送信要求が送信側計算機に届いても本来、データ送信中にデータ受信できるリモートメモリ書き込み機能を具備しているにもかかわらず、前記データ通信が完了する迄、送信要求を発行した該計算機に対して受信バッファの位置情報を返信できず、通信効率が悪い問題があった。
【０００６】
更に、従来技術では、プログラムの実行中に自動的に通信効率を判断し、受信バッファの位置情報を返信するタイミングを自動的に変更する方法がなかった。
【課題を解決するための手段】
【０００７】
本発明の目的は上記課題を解決するために、計算機間の通信データ性能を送信前に測定し、その性能データからデータ分割する長さを定めておき、送信側計算機が送信するデータを分割してそれぞれのデータを順番に送信し、そのデータ送信間に送信要求が他の計算機から受信しているかどうかを確認することによって、他の計算機からの送信要求に対し受信バッファの位置情報を返信することができるようにするものである。
【０００８】
更に、本発明の他の目的は、プログラムの実行時におけるデータ送信毎に性能を測定し、その性能が基準値以下であれば、データ分割する長さを自動的に小さくすることによって、ネットワーク負荷による通信効率を最適にする方法を提供するものである。
【発明の効果】
【０００９】
本発明により、送信側計算機がリモートメモリ書き込み機能によりデータ送信中に他の計算機からデータ受信することができ、この結果、送信要求を出してからデータ送信が完了する迄の通信時間を最小限にできる効果がある。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施例を説明する。
【実施例１】
【００１１】
まず、通信ライブラリの初期化時に送受信するデータ分割の適正なサイズを測定し、データ転送の開始時点迄にデータ分割の閾値６６を自動設定する方法を示す。
【００１２】
図１に本発明の全体構成図を示す。１は複数の計算機２をネットワーク９で接続した並列計算機である。計算機２の数は任意である。各計算機２はメインメモリ３、プロセッサ６、及び、補助記憶装置７、リモートメモリ書き込み機構８を具備する。また、メインメモリ３には、ユーザプログラム４が補助記憶装置７からローディングされ、また、リモートメモリ書き込み領域５が割り当てられている。また、ユーザプログラム４は通信ライブラリ１４を持つ。本実施例では通信ライブラリ１４が静的に結合されている例を示しているが、ユーザプログラムがローディングされるときに通信ライブラリが動的に結合される形態でも本実施例は適用可能である。また、ユーザプログラム４にはリモートメモリ書き込み領域５を内包する。
【００１３】
次に図２にリモートメモリ書き込み領域５の詳細を説明する。このリモートメモリ書き込み領域５内に静的送信バッファ１１、静的受信バッファ１００を割り当てる。静的受信バッファ１００は、並列計算機１を構成する各計算機からのデータ受信用に構成する計算機数分の面数を確保する。また、ユーザプログラムから送信バッファ１０、受信バッファ１２を割り当てる。
【００１４】
ここで、本実施例における通信ライブラリについて説明する。ここで説明する通信ライブラリはメッセージパッシングライブラリとも呼ばれ、有名なものとしては、ＭＰＩ（Ｍｅｓｓａｇｅ  Ｐａｓｓｉｎｇ  Ｉｎｔｅｒｆａｃｅ）やＰＶＭ（Ｐａｒａｌｌｅｌ  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅｓ）等がある。以下に、本実施例における通信ライブラリの各関数のインタフェースとその動作概要を説明する。なお、関数名称や引き数名称は任意であり、ここで説明する通信ライブラリと同一の仕様である必要はない。
（１）INIT():初期化関数
通信を行う並列プログラムの全プログラムが本関数を初期化時に発行する。本関数の引き数は無し。ユーザプログラム４から本関数を発行すると、通信ライブラリの初期化を行い、また、リモートメモリ書き込み領域５に対して、静的送信バッファ１０、静的受信バッファ１２を確保し、初期化する。また、図５に示すノンブロッキング送受信関数の発行要求であるrequest構造体６２を管理するrequestキュー６１を初期化する。更に、図１０に示すように送信データを分割する際の閾値を次のように算出する。
（ａ）本関数を発行した計算機毎に０から順番にユニークな番号をつける。本実施例では、計算機の数をN個とし、この計算機の番号を０、１、〜、Ｎ−１としてつける（４０８）。
（ｂ）本関数を発行した計算機間で同期を取り(４０1)、本関数を発行した計算機群のうち、計算機番号０、１の計算機間で４０１〜４０６を行う通信性能を測定する。
（ｃ）メッセージ長L(1)の初期値は１とし、式４０２を満たす迄、４０３〜４０５の処理を繰り返す（４０２）。
（ｄ）２計算機間で通信を実施し、メッセージ長L(n)に対する通信時間T(n)を測定し、通信性能を算出する（４０４）。
（ｅ）メッセージ長に対する通信時間と、これらから算出される通信性能データを図５の性能テーブル６５上に格納する（４０５）。
（ｆ）式４０３を満たすｎに対するメッセージ長L(n)を、送信データを分割する際の閾値６６とする（４０６）。
（ｇ）（f）で定めた閾値６６を、並列計算機を構成する全計算機へ送信し、閾値６６を計算機間で一致させる（４０７）。
（２）SEND(buffer, destination, length)：ブロッキング型送信関数
本関数の引き数を説明する。bufferは送信するデータが格納されたユーザメモリの先頭アドレス、destinationはネットワーク内での受信側計算機を識別する番号、lengthは送信するデータの長さを表す。ユーザプログラムが本関数を発行すると、本関数はdestinationで指定された受信側計算機に対してbufferで指定されたデータ領域のデータをlengthの長さだけ送信する。
（３）RECV(buffer, source, length)：ブロッキング型受信関数
本関数の引き数を説明する。bufferは受信するデータ領域の先頭アドレス、sourceはネットワーク内での送信側計算機を識別する番号、lengthは受信するデータの長さを表す。ユーザプログラムが本関数を発行すると、本関数はsourceで指定された送信元計算機からbufferで指定されたデータ領域にデータをlengthの長さだけ受信する。
（４）IRECV(buffer, source, length, request)：ノンブロッキング型受信関数
本関数の引き数を説明する。bufferは受信するデータ領域の先頭アドレス、sourceはネットワーク内での送信側計算機を識別する番号、lengthは受信するデータの長さ、requestはリクエスト構造体６２へのアドレスを表す。ユーザプログラムが本関数を発行すると、通信ライブラリはsourceで指定された送信側計算機からbufferで指定されたデータ領域のデータをlengthの長さだけ受信することを通信ライブラリに通知し、実際に受信することを待たずに終了する。この関数で指定した受信が終了したかを確認するには本関数で指定したrequest構造体をwait関数に指定して発行することで行う。なお、リクエスト構造体６２はINIT関数で確保したリクエストキュー６１にキューイングする。
（５）WAIT(request)：ノンブロッキング型送受信関数に対する完了待ち関数
本関数の引き数はIRECV関数で指定したrequest構造体である。このrequest構造体に対応するノンブロッキング送信関数またはノンブロッキング受信関数にて実際のデータ送信、もしくはデータ受信が完了時、リクエストキュー６１からこのリクエスト構造体を削除し、本関数は終了する。
【００１５】
次に従来方法でのこの通信ライブラリを用いたデータ通信方法の詳細を図３、図４を用いて説明する。送信側計算機１のユーザプログラム４はSEND関数１７を、そして、受信側計算機２で動作するユーザプログラム４はRECV関数１５を発行する。SEND関数１７を発行された通信ライブラリ１４は送信要求メッセージ９１を送信バッファ１０上に生成し、受信側計算機２へ送信要求メッセージ９１を送信する。送信要求メッセージ９１を受信した受信側計算機２は受信バッファ１２の位置情報９２を送信側計算機１に返信する。
【００１６】
送信側計算機１の通信ライブラリ１４が受信側計算機の受信バッファの位置情報９２を受け取ると、通信ライブラリ１４はユーザプログラム４からSEND関数１７より指定された送信バッファ１０の送信データをリモートメモリ書き込み機構８により受信側計算機の受信バッファの位置情報９２で示される受信バッファ１２へ送信し、SEND関数１７、および、RECV関数１５はデータ送受信を完了する。
【００１７】
ここで、リモートメモリ書き込み機構８は同時に１つのデータしか送信できないため、従来方法では図６で示すように、計算機２０３からデータの送信要求９１をデータ送信中の計算機２０２に対して発行しても、計算機２０２は計算機２０１へのデータ９３の送信が完了する迄、受信バッファの位置情報９２を返信できない。このため、計算機２０３はこのデータ送信が完了する迄、送信を開始することができない。
【００１８】
次にこの問題を解決するために、従来方法からの追加処理について説明する。
【００１９】
図７を用いてデータ送信処理SEND関数１７の処理を示す。
【００２０】
まず、前述の通り、初期化を行うINIT関数にて、１回の送信で送信するデータの長さを図１０のステップ４０７のデータ分割の閾値６６にセットする。
【００２１】
SEND関数１７は、送信要求データを静的送信バッファに設定し（５０１）、そのデータを受信側計算機の静的受信バッファに送信し（５０２）、受信側計算機から自計算機の静的受信バッファに受信バッファの位置情報を受信する（５０３）。データ分割の閾値６６から送信データを分割し、分割したデータを全て送信する迄、５０５〜５０９の処理を繰り返す（５０４）。
【００２２】
次に、分割された送信データを送信先計算機の受信バッファへ送信し（５０５）、送信側計算機の静的受信バッファにデータが受信されるのを待ち（５０６）、受信したデータの種別を確認する（５０７）。このデータが先ほどのデータ送信に対する受信完了（ＡＣＫ）であれば、未送信のデータがあるか確認し、あれば、受信バッファの位置をデータ分割の閾値分だけ加え、５０５の処理から繰り返す（５０８、５０４）。また、データの種別が別の計算機からの送信要求であれば、自計算機の受信バッファの位置情報９２を送信先計算機に返信し（５０９）、受信側計算機からのＡＣＫを待つ。
【００２３】
次に、図８を用いてデータ受信関数であるRECV関数の処理を示す。
【００２４】
まず、送信側計算機から静的受信バッファに送信要求データを受信する迄受信待ちし（６０１）、送信要求データの送信データ長と受信関数の引数に指定された受信データ長を比較し、小さい方を実際の受信データ長とする（６０２）受信データ長と受信バッファの位置情報を送信側計算機に返信し（６０３）、受信データ長分のデータを受信する迄６０５〜６０７迄の処理を繰り返す（６０４）。次に、送信側計算機から受信バッファにデータを受信し（６０５）、受信が完了したらACKを送信側計算機に返す（６０６）。静的受信バッファにメッセージを受信しているか確認し送信要求を受信していたら（６０６）、requestキューに送信要求に該当する受信requestがあるか確認。あれば、受信バッファの位置情報を送信元計算機に返信する（６０７）。
【００２５】
次に、図９を用いて、前述のSEND関数１７、RECV関数１６を用いた場合の図６で示した従来技術の問題に対する解決方法を示す。計算機２０３からデータの送信要求９１を、データ９３２の送信中の計算機２０２に対して発行した場合、計算機２０２は計算機２０１へのデータ９３２の送信が完了した後、受信バッファの位置情報９２を返信可能である。このため、計算機２０３は計算機２０２のデータ送信が完了する迄、待たされることなく計算機２０２へ送信を開始することができる。
【実施例２】
【００２６】
次に送受信するデータ分割の閾値６６を通信先計算機への負荷に応じてユーザプログラムの実行中に適正な値に動的に変更する方法を示す。なお、この実施例ではこの負荷は各計算機に対する性能で判断しているが、この負荷の判断方法について本実施例と同一の仕様である必要はない。
【００２７】
実施例１での構成に加え、次の処理を通信ライブラリ１４に加える。以下、図１１、図１２、図１３を元に初期化関数INIT、データ送信関数SENDの処理における追加処理を説明する。
【００２８】
初期化関数INITでは、図１２の計算機毎の性能テーブル６７、閾値テーブル６８を初期化する。図１３に示すとおり、全計算機間で性能測定をある計算機から並列計算機を構成する各計算機に対して性能を測定する（８０１）。この際の性能測定は受信バッファの位置情報を受信後、送信データ自体を送信する迄の通信時間を測定し、性能を算出する（４０４１）。算出した性能データを対象の計算機向けの性能テーブル６７に登録する（８０３）。また、実施例１と同様にデータ分割の閾値を算出し（４０６）、この閾値を計算機毎に閾値テーブル６８に登録する（８０４）。そして、初期化処理の最後に各計算機間で同期をあわせておく（８０２）。
【００２９】
次に、データ送信関数SENDでは、受信側計算機から受信バッファの位置情報を受信後（５０３）、通信時間の測定を開始し（７０１）、送信データを全て送信終了後に測定を終了して、通信対象の計算機のメッセージ長に対する性能を算出する（７０２）。その際に、算出した性能が当該計算機向けの性能テーブルのデータよりも80%以下かどうかを比較する（７０３）。以下であれば、算出した性能以上となる一番短いメッセージ長を性能テーブルから検索し、そのメッセージ長をデータ分割の閾値として、閾値テーブル６７に再登録する（７０４）。これにより、負荷によりある計算機間での性能が劣化した場合でも動的に閾値を変更することが可能となる。
【図面の簡単な説明】
【００３０】
【図１】本発明の実施例における全体構成を示したシステム構成図である。
【図２】本発明の実施例におけるリモートメモリ書き込み領域を示したソフトウェア構成図である。
【図３】本発明の一実施例における２つの計算機間での通信方法を示したデータフロー図である。
【図４】本発明の一実施例における２つの計算機間での通信方法を示したデータフロー図である。
【図５】本発明の実施例１におけるrequestキュー、性能テーブル、閾値管理領域を示したソフトウェア構成図である。
【図６】本発明の実施例１において、計算機２０２から計算機２０１へデータ送信している間に計算機２０３から計算機２０２へデータの送信関数を発行した際の従来方法での問題を示した通信プロトコル図である。
【図７】本発明の実施例１におけるSEND関数のフローチャートである。
【図８】本発明の実施例１におけるRECV関数のフローチャートである。
【図９】本発明の実施例１において計算機２０２ら計算機２０１へデータ送信している間に計算機２０３から計算機２０２へデータの送信関数を発行した際の本発明方法での通信プロトコル図である。
【図１０】本発明の実施例１におけるINIT関数のフローチャートである。
【図１１】本発明の実施例１におけるSEND関数のフローチャートである。
【図１２】本発明の実施例２におけるrequestキュー、性能テーブル、閾値テーブルを示したソフトウェア構成図である。
【図１３】本発明の実施例２におけるINIT関数のフローチャートである。
【符号の説明】
【００３１】
１…並列計算機システム、２…並列計算機を構成する計算機、３…メインメモリ、４…ユーザプログラム、５…リモートメモリ書き込み領域、６…プロセッサ、７…補助記憶装置、８…リモートメモリ書き込み機構、９…ネットワーク、１０…送信バッファ、１１…静的送信バッファ、１２…受信バッファ、１４…通信ライブラリ、１５…RECV関数、１６…IRECV関数、１７…SEND関数、１８…WAIT関数、６１…requestキュー、６２…request構造体、６５…性能テーブル、６６…送信データの分割サイズの閾値、６７…通信先計算機毎の性能テーブル、６８…閾値テーブル、９１…送信要求データ、９２…受信バッファ位置情報データ、９３…データ本体、９４…ＡＣＫデータ、１００…静的受信バッファ、２０１…計算機１、２０２…計算機２、２０３…計算機３、４０１〜４０７…実施例での初期化処理のうち、性能テーブル作成処理部分、５０１〜５０９…実施例での各送信処理、６０１〜６０８…実施例での各受信処理、７０１〜７０４…実施例での送信処理のうち、実施例２での追加処理、８０１〜８０４…実施例での初期化処理のうち、実施例２での追加処理、９０１〜９０４…実施例における閾値で分割された各データ。
【図１】
2007140888.tif 000003
【図２】
2007140888.tif 000004
【図３】
2007140888.tif 000005
【図４】
2007140888.tif 000006
【図５】
2007140888.tif 000007
【図６】
2007140888.tif 000008
【図７】
2007140888.tif 000009
【図８】
2007140888.tif 000010
【図９】
2007140888.tif 000011
【図１０】
2007140888.tif 000012
【図１１】
2007140888.tif 000013
【図１２】
2007140888.tif 000014
【図１３】
2007140888.tif 000015