MPI_Allgather 函数
从组的所有成员收集数据,并将数据发送给组的所有成员。 MPI_Allgather 函数类似于 MPI_Gather 函数,只不过它将数据发送到所有进程,而不是仅发送到根。 MPI_Allgather的使用规则对应于MPI_Gather的规则。
语法
int MPIAPI MPI_Allgather(
_In_ void *sendbuf,
_In_ int sendcount,
_In_ MPI_Datatype sendtype,
_Out_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
MPI_Comm comm
);
参数
sendbuf [in]
指向要发送到组中的所有进程的数据的指针。 缓冲区中元素的数量和数据类型在 sendcount 和 sendtype 参数中指定。 缓冲区中的每个元素对应于组中的一个进程。如果 comm 参数引用内部通信器,则可以通过在所有进程中指定 MPI_IN_PLACE 来指定就地选项。 忽略 sendcount 和 sendtype 参数。 每个进程在相应的接收缓冲区元素中输入数据。 第 n个进程将数据发送到接收缓冲区的第 n个元素。
sendcount [in]
在 sendbuf 参数中指定的缓冲区中的元素数。 如果 sendcount 为零,则消息的数据部分为空。sendtype [in]
发送缓冲区中元素的 MPI 数据类型。recvbuf [out]
指向缓冲区的指针,该缓冲区包含从每个进程接收的数据。 缓冲区中元素的数量和数据类型在 recvcount 和 recvtype 参数中指定。recvcount
接收缓冲区中的元素数。 如果计数为零,则消息的数据部分为空。recvtype
接收缓冲区中元素的 MPI 数据类型。comm
MPI_Comm通信器句柄。
返回值
返回成功 时MPI_SUCCESS 。 否则,返回值为错误代码。
在 Fortran 中,返回值存储在 IERROR 参数中。
Fortran
MPI_ALLGATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, COMM, IERROR
注解
与进程上的 sendtype 参数关联的类型签名必须等于与任何其他进程中的 recvtype 参数关联的类型签名。
如果 comm 参数引用内部通信器,则调用 MPI_ALLGATHER(...)
的结果就像执行的所有进程 MPI_Gather(sendbuf,sendcount,sendtype,recvbuf,recvcount,recvtype,root,comm)
都对 调用 root = 0 , ..., n-1
n。
如果 comm 参数引用通信器,则一个组(例如组 A)的每个进程都会提供 sendcount 参数中指定的数据项数。 此数据是串联的,结果存储在另一个组 B 中的每个进程中。相反,组 B 中进程数据的串联存储在组 A 中的每个进程中。组 A 中的发送缓冲区参数必须与组 B 中的接收缓冲区参数一致,反之亦然。
组 A 中的进程发送的项数不必等于组 B 中的进程发送的项数。具体而言,可以通过为反向通信指定 sendcount == 0 来仅向一个方向移动数据。
要求
产品 |
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 |