MPI_Scatterv関数
1 つのメンバーからグループのすべてのメンバーにデータを分散します。 MPI_Scatterv関数は、MPI_Gatherv関数によって実行される演算の逆関数を実行します。
構文
int MPIAPI MPI_Scatterv(
_In_ void *sendbuf,
_In_ int *sendcounts,
_In_ int *displs,
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 はグループ サイズです。ルート プロセスに対応するセグメントは移動されません。
sendcounts [in]
各プロセスに送信する要素の数。 sendcount[i] が 0 の場合、そのプロセスのメッセージのデータ部分は空です。sendcount パラメーターは、ルート以外のすべてのプロセスでは無視されます。
displs [in]
各コミュニケーター プロセスに送信するデータの場所。 配列内の各位置は、 sendbuf 配列の対応する要素に対する相対位置です。sendbuf、sendcounts、displs パラメーター配列では、各配列の n番目の要素は、n番目のコミュニケーター プロセスに送信されるデータを参照します。
このパラメーターは、ルート プロセスでのみ重要です。
sendtype
バッファー内の各要素の MPI データ型。sendcount パラメーターは、ルート以外のすべてのプロセスでは無視されます。
recvbuf [out]
各プロセスで受信されるデータを含むバッファーへのポインター。 バッファー内の要素の数値とデータ型は、 recvcount パラメーターと recvtype パラメーターで指定されます。recvcount
受信バッファー内の要素の数。 カウントが 0 の場合、メッセージのデータ部分は空です。recvtype
受信バッファー内の要素のデータ型。root
指定したコミュニケーター内の送信プロセスのランク。comm
MPI_Comm コミュニケーター ハンドル。
戻り値
成功 したMPI_SUCCESS を返します。 それ以外の場合、戻り値はエラー コードです。
Fortran では、戻り値は IERROR パラメーターに格納されます。
Fortran
MPI_SCATTERV(SENDBUF, SENDCOUNT, DISPLS, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, DISPLS(*), RECVCOUNT(*), RECVTYPE, ROOT, COMM, IERROR
注釈
MPI_Scatterv関数は、sendcounts 配列で指定されたさまざまなデータ数を各プロセスに送信できるようにすることで、MPI_Scatter関数の機能を拡張します。
カウント、型、および変位を指定すると、ルート上のどの場所も複数回読み取られるべきではありません。
すべての関数パラメーターはルート プロセスで重要です。他のプロセスでは、 recvbuf、 recvcount、 recvtype、 root、 comm パラメーターのみが重要です。 ルート パラメーターと comm パラメーターは、すべてのプロセスで同じである必要があります。
sendcount で指定された型シグネチャ、およびルート プロセスの sendtype パラメーターは、recvcount で指定された型シグネチャと等しく、すべてのプロセスの recvtype パラメーターと同じである必要があります。 したがって、送信されるデータの量は、プロセスのペア間で受信されるデータの量と等しい必要があります。 送信者と受信側の間の個別の型マップは引き続き許可されます。
comm がコマンド内の場合、ルートが n 回の送信操作 MPI_Send(sendbuf + displs[i]*extent(sendtype), sendcounts[i], sendtype, I, …)
を実行したかのように結果が生成され、 MPI_Recv(recvbuf, recvcount, recvtype, i,…)
各プロセスで 受信 が実行されました。
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 |