MPI_Igatherv 函数
以非阻塞方式从组的所有成员收集到一个成员的变量数据。
语法
int MPIAPI MPI_Igatherv(
_In_opt_ const void *sendbuf,
_In_ int sendcount,
_In_ MPI_Datatype sendtype,
_Out_opt_ void *recvbuf,
_In_opt_ const int recvcounts[],
_In_opt_ const int displs[],
_In_ MPI_Datatype recvtype,
_In_ int root,
_In_ MPI_Comm comm,
_Out_ MPI_Request *request
);
参数
sendbuf [in, 可选]
缓冲区的句柄,该缓冲区包含要发送到根进程的数据。如果 comm 参数引用内部通信器,则可以通过在所有进程中指定 MPI_IN_PLACE 来指定就地选项。 忽略 sendcount 和 sendtype 参数。 每个进程在相应的接收缓冲区元素中输入数据。 第 n个进程将数据发送到接收缓冲区的第 n个元素。 假定根进程发送的数据位于接收缓冲区中的正确位置。
sendcount [in]
发送缓冲区中的元素数。 如果 sendcount 为零,则消息的数据部分为空。sendtype [in]
缓冲区中每个元素的数据类型。recvbuf [out, 可选]
根进程上缓冲区的句柄,该缓冲区包含从每个进程接收的数据,包括根进程发送的数据。 此参数仅在根进程中有效。 对于所有非根进程,将忽略 recvbuf 参数。recvcounts[] [in, optional]
从每个进程接收的元素数。 数组中的每个元素对应于发送进程的排名。 如果计数为零,则消息的数据部分为空。 此参数仅在根进程中有效。displs[] [in, optional]
每个通信器进程中的数据相对于 recvbuf 参数的位置。 从进程 j 接收的数据放置在 sendbuf 指针的根进程偏移量 displs[j] 元素的接收缓冲区中。在 recvbuf、 recvcounts 和 displs 参数数组中,每个数组的第 n个元素引用从 n个通信器进程接收的数据。
此参数仅在根进程中有效。
recvtype [in]
缓冲区中每个元素的数据类型。 此参数仅在根进程中有效。root [in]
指定通信器内接收进程的排名。comm [in]
MPI_Comm通信器句柄。request [out]
表示通信操作 的MPI_Request 句柄。
返回值
返回成功 时MPI_SUCCESS 。 否则,返回值为错误代码。
在 Fortran 中,返回值存储在 IERROR 参数中。
Fortran
MPI_IGATHERV(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNTS, DISPLS, RECVTYPE,
ROOT, COMM, REQUEST, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNTS(*), DISPLS(*), RECVTYPE, ROOT, COMM, REQUEST, IERROR
注解
非阻塞调用会启动集体缩减操作,必须在单独的完成调用中完成此操作。 启动后,操作可以独立于参与进程中的任何计算或其他通信进行。 通过这种方式,非阻塞化简操作可以通过在“后台”中运行缩减操作来缓解可能的同步影响。
非阻塞化缩减操作支持所有完成调用 (例如 MPI_Wait) 。
要求
产品 |
Microsoft MPI v7 |
标头 |
Mpi.h;Mpif.h |
库 |
Msmpi.lib |
DLL |
Msmpi.dll |