MPI_Scatter関数

1 つのメンバーからグループのすべてのメンバーにデータを分散します。 MPI_Scatter関数は、MPI_Gather関数によって実行される演算の逆関数を実行します。

構文

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

パラメーター

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

    sendbuf パラメーターは、ルート以外のすべてのプロセスでは無視されます。

    comm パラメーターがコマンド内を参照している場合は、ルート プロセスで MPI_IN_PLACE を指定することでインプレース オプションを指定できます。 recvcount パラメーターと recvtype パラメーターは無視されます。 分散ベクトルは、n 個 のセグメントを 含んでいると見なされます。 ここで、n はグループ サイズです。ルート プロセスに対応するセグメントは移動されません。

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

    sendcount パラメーターは、ルート以外のすべてのプロセスでは無視されます。

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

    sendcount パラメーターは、ルート以外のすべてのプロセスでは無視されます。

  • recvbuf [out]
    各プロセスで受信されるデータを含むバッファーへのハンドル。 バッファー内の要素の数値とデータ型は、 recvcount パラメーターと recvtype パラメーターで指定されます。

  • recvcount
    受信バッファー内の要素の数。 カウントが 0 の場合、メッセージのデータ部分は空です。

  • recvtype
    受信バッファー内の要素のデータ型。

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

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

戻り値

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

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

Fortran

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

注釈

MPI_Scatter関数の効果は、ルート プロセスが MPI_Send 関数を使用してメッセージを送信する場合と同様です。 このメッセージは、グループのメンバーごとに 1 つずつ、n つの等しいセグメントに分割されます。 i番目のセグメントは、グループ内の i番目のプロセスに送信されます。

comm がコマンド内の場合、ルートが n 回の送信操作 MPI_Send(sendbuf + i*sendcount*extent(sendtype), sendcount, sendtype, I, …)を実行したかのように結果が生成され、 MPI_Recv(recvbuf, recvcount, recvtype, i,…)各プロセスで 受信 が実行されました。

ルート プロセスの sendcount パラメーターと sendtype パラメーターで指定される型シグネチャは、 recvcount で指定された型シグネチャと、すべてのプロセスの recvtype パラメーターと等しい必要があります。 したがって、送信されるデータの量は、プロセスのペア間で受信されるデータの量と等しい必要があります。 送信者と受信側の間の個別の型マップは引き続き許可されます。

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

カウントと型を指定すると、ルート上のどの場所も複数回読み取られるべきではありません。

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

要件

製品

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_Gather

MPI_Gatherv

MPI_Scatterv