MPI_Gather関数

グループのすべてのメンバーから 1 つのメンバーにデータを収集します。

構文

int MPIAPI MPI_Gather(
  _In_      void         *sendbuf,
            int          sendcount,
            MPI_Datatype sendtype,
  _Out_opt_ void         *recvbuf,
            int          recvcount,
            MPI_Datatype recvtype,
            int          root,
            MPI_Comm     comm
);

パラメーター

  • sendbuf [in]
    ルート プロセスに送信されるデータを含むバッファーへのポインター。

    comm パラメーターがコマンド内を参照している場合は、すべてのプロセスで MPI_IN_PLACEを指定することでインプレース オプションを指定できます。 sendcount パラメーターと sendtype パラメーターは無視されます。 各プロセスは、対応する受信バッファー要素にデータを入力します。 n番目のプロセスは、受信バッファーの n番目の要素にデータを送信します。 ルート プロセスによって送信されるデータは、受信バッファー内の正しい場所にあると見なされます。

  • sendcount
    送信バッファー内の要素の数。 sendcount が 0 の場合、メッセージのデータ部分は空です。

  • sendtype
    バッファー内の各要素のデータ型。

  • recvbuf [out, optional]
    各プロセスから受信したデータを含むルート プロセス上のバッファーへのポインター。 ルート プロセスによって送信されるデータが含まれます。 このパラメーターは、ルート プロセスでのみ重要です。 recvbuf パラメーターは、ルート以外のすべてのプロセスでは無視されます。

  • recvcount
    各プロセスから受け取る要素の数。 この数は、バッファー内の項目の合計数ではありません。 カウントが 0 の場合、メッセージのデータ部分は空です。 このパラメーターは、ルート プロセスでのみ重要です。

  • recvtype
    バッファー内の各要素の MPI データ型。 このパラメーターは、ルート プロセスでのみ重要です。

  • root
    指定したコミュニケーター内の受信プロセスのランク。

  • comm
    MPI_Comm コミュニケーター ハンドル。

戻り値

成功 したMPI_SUCCESS を返します。 それ以外の場合、戻り値はエラー コードです。

Fortran では、戻り値は IERROR パラメーターに格納されます。

Fortran

    MPI_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
        <type> SENDBUF(*), RECVBUF(*)
        INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR

注釈

すべての関数パラメーターはルート プロセスで重要であり、sendbufsendcount、sendtyperootおよび comm のみが他のプロセスで重要です。 ルート パラメーターと comm パラメーターは、すべてのプロセスで同じである必要があります。

一般に、 sendtype パラメーターと recvtype パラメーターの両方に対して派生データ型を使用できます。 各プロセスの sendtype パラメーターと recvtype パラメーターで指定される型シグネチャは、ルート プロセスの recvcount パラメーターと sendcount パラメーターの型シグネチャと等しい必要があります。 送信されるデータの量は、ルート プロセスと個々のプロセスの間で受信されるデータの量と同じである必要があります。 送信者と受信側の間の個別の型マップは引き続き許可されます。

カウントと型を指定しても、ルート上の場所が複数回書き込まれないようにする必要があります。 このような呼び出しは間違っています。

comm パラメーターがコマンド内を参照している場合、すべてのプロセスは、その送信バッファーの内容をルート プロセスに送信します。 ルート プロセスはメッセージを受信し、ランク順に格納します。 結果は、グループ内の n 個の各プロセスが に対する MPI_Send(sendbuf, sendcount, sendtype, root, …)呼び出しを実行し、ルートが に 対して n 回の呼び出しを MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …)実行したかのように見えます。 の extent(recvtype) 値は、 MPI_Type_get_extent 関数を使用して取得されます。 関数の別の説明として、グループ内のプロセスによって送信される n 個のメッセージがランク順に連結され、 の呼び出し MPI_RECV(recvbuf, recvcountn, recvtype, ...)の場合と同様に、結果のメッセージがルートによって受信されます。 ルート以外のすべてのプロセスでは、受信バッファーは無視されます。

comm パラメーターがインターコミュニケーターを参照している場合、呼び出しには、ルート プロセスを定義する 1 つのグループ A を使用して、インターコミュニケーター内のすべてのプロセスが含まれます。 他のグループ (グループ B) 内のすべてのプロセスは、ルート パラメーターに同じ値を設定します。つまり、グループ A のルート プロセスのランクを設定します。ルート プロセスは、ルート パラメーターにMPI_ROOT値を設定します。 グループ A 内の他のすべてのプロセスは、ルート パラメーターにMPI_PROC_NULL値を設定します。 データは、ルート プロセスからグループ B 内のすべてのプロセスにブロードキャストされます。グループ B のプロセスの バッファー パラメーターは、ルート プロセスの buffer パラメーターと一致している必要があります。

要件

製品

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_Datatype

MPI_Gatherv