MPI_Recv関数
受信操作を実行し、一致するメッセージが受信されるまで戻りません。
構文
int MPIAPI MPI_Recv(
_In_opt_ void *buf,
int count,
MPI_Datatype datatype,
int source,
int tag,
MPI_Comm comm,
_Out_ MPI_Status *status
);
パラメーター
buf [in, optional]
送信するデータを含むバッファーへのポインター。count
バッファー内の要素の数。 メッセージのデータ部分が空の場合は、 count パラメーターを 0 に設定します。datatype
バッファー配列内の要素のデータ型。source
指定したコミュニケーター内の送信プロセスのランク。 MPI_ANY_SOURCE定数を指定して、任意のソースが許容されることを指定します。tag
さまざまな種類のメッセージを区別するために使用されるメッセージ タグ。 MPI_ANY_TAG定数を指定して、任意のタグが許容されることを示します。comm
コミュニケーターへのハンドル。status [out]
戻り値には、受信したメッセージに関する情報が格納される MPI_Status 構造体へのポインターが含まれます。
戻り値
成功 したMPI_SUCCESS を返します。 それ以外の場合、戻り値はエラー コードです。
Fortran では、戻り値は IERROR パラメーターに格納されます。
Fortran
MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR)
<type> BUF(*)
INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR
注釈
受信メッセージの長さは、受信バッファーの長さ以下である必要があります。 すべての受信データが受信バッファーに収まらない場合、この関数はオーバーフロー エラーを返します。
受信したメッセージがバッファーよりも短い場合は、メッセージに対応するバッファーの一部のみが変更されます。 バッファーの残りの部分は変更されません。
プロセスは自分にメッセージを送信できます。 ただし、これらのブロック送受信操作がデッドロックを引き起こす可能性があるため、ブロッキング送受信操作 ( MPI_Send および MPI_Recv) で行うことは安全ではありません。
Note
送受信操作の間には非対称性があります。 受信操作は任意の送信者からのメッセージを受け入れることはできますが、送信操作では一意の受信者を指定する必要があります。 これにより、データ転送が受信側によって影響を受けるプル スタイルではなく、送信者によってデータ転送が影響を受ける、プッシュ 形式の通信が実装されます。
要件
製品 |
HPC Pack 2012 MS-MPI 再頒布可能パッケージ、HPC Pack 2008 R2 MS-MPI 再頒布可能パッケージ、HPC Pack 2008 MS-MPI 再頒布可能パッケージまたは HPC Pack 2008 クライアント ユーティリティ |
ヘッダー |
Mpi.h;Mpif.h |
ライブラリ |
Msmpi.lib |
[DLL] |
Msmpi.dll |