MPI_Iallreduce 函数
合并所有进程中的值,以非阻塞方式将结果分发回所有进程。
语法
int MPIAPI MPI_Iallreduce(
_In_opt_ const void *sendbuf,
_Out_opt_ void *recvbuf,
_In_ int count,
_In_ MPI_Datatype datatype,
_In_ MPI_Op op,
_In_ MPI_Comm comm,
_Out_ MPI_Request *request
);
参数
sendbuf [in, 可选]
指向要发送到组中的所有进程的数据的指针。 缓冲区中元素的数量和数据类型在 count 和 数据类型 参数中指定。如果 comm 参数引用内部通信器,则可以通过在所有进程中指定 MPI_IN_PLACE 来指定就地选项。 在这种情况下,输入数据在每个进程中从接收缓冲区获取,其中将替换为输出数据。
recvbuf [out, 可选]
指向缓冲区的指针,用于接收缩减操作的结果。count [in]
要从此过程发送的元素数。datatype [in]
缓冲区中每个元素的数据类型。 此参数必须与 op 参数中指定的操作兼容。op [in]
要执行的全局缩减操作。 句柄可以指示内置或应用程序定义的操作。 有关预定义操作的列表,请参阅 MPI_Op。comm [in]
MPI_Comm通信器句柄。request [out]
表示通信操作 的MPI_Request 句柄。
返回值
返回成功 时MPI_SUCCESS 。 否则,返回值为错误代码。
在 Fortran 中,返回值存储在 IERROR 参数中。
Fortran
MPI_IALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, REQUEST, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER COUNT, DATATYPE, OP, COMM, REQUEST, IERROR
注解
非阻塞调用会启动集体缩减操作,必须在单独的完成调用中完成此操作。 启动后,操作可以独立于参与进程中的任何计算或其他通信进行。 通过这种方式,非阻塞化简操作可以通过在“后台”中运行缩减操作来缓解可能的同步影响。
非阻塞化缩减操作支持所有完成调用 (例如 MPI_Wait) 。
要求
产品 |
Microsoft MPI v7 |
标头 |
Mpi.h;Mpif.h |
库 |
Msmpi.lib |
DLL |
Msmpi.dll |