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 パラメーターと等しい必要があります。 したがって、送信されるデータの量は、プロセスのペア間で受信されるデータの量と等しい必要があります。 送信者と受信側の間の個別の型マップは引き続き許可されます。
すべての関数パラメーターはルート プロセスで重要です。他のプロセスでは、 recvbuf、 recvcount、 recvtype、 root、 comm パラメーターのみが重要です。 ルート パラメーターと 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 |