次の方法で共有


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

こちらもご覧ください

MPI ポイント間関数

MPI_Send

MPI_Irecv

MPI_Datatype

MPI_Comm

MPI_Status