MPI_Gather 函数
将数据从组的所有成员收集到一个成员。
语法
int MPIAPI MPI_Gather(
_In_ void *sendbuf,
int sendcount,
MPI_Datatype sendtype,
_Out_opt_ void *recvbuf,
int recvcount,
MPI_Datatype recvtype,
int root,
MPI_Comm comm
);
参数
sendbuf [in]
指向缓冲区的指针,该缓冲区包含要发送到根进程的数据。如果 comm 参数引用内部通信器,则可以通过在所有进程中指定 MPI_IN_PLACE 来指定就地选项。 忽略 sendcount 和 sendtype 参数。 每个进程在相应的接收缓冲区元素中输入数据。 第 n个进程将数据发送到接收缓冲区的第 n个元素。 假定根进程发送的数据位于接收缓冲区中的正确位置。
sendcount
发送缓冲区中的元素数。 如果 sendcount 为零,则消息的数据部分为空。sendtype
缓冲区中每个元素的数据类型。recvbuf [out, 可选]
指向根进程上的缓冲区的指针,该缓冲区包含从每个进程接收的数据。 它包括根进程发送的数据。 此参数仅在根进程中有效。 对于所有非根进程,将忽略 recvbuf 参数。recvcount
从每个进程接收的元素数。 此数字不是缓冲区中的项总数。 如果计数为零,则消息的数据部分为空。 此参数仅在根进程中有效。recvtype
缓冲区中每个元素的 MPI 数据类型。 此参数仅在根进程中有效。root
指定通信器内接收进程的排名。comm
MPI_Comm通信器句柄。
返回值
返回成功 时MPI_SUCCESS 。 否则,返回值为错误代码。
在 Fortran 中,返回值存储在 IERROR 参数中。
Fortran
MPI_GATHER(SENDBUF, SENDCOUNT, SENDTYPE, RECVBUF, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER SENDCOUNT, SENDTYPE, RECVCOUNT, RECVTYPE, ROOT, COMM, IERROR
注解
所有函数参数在根进程上都很重要,只有 sendbuf、 sendcount、 sendtype、 root 和 comm 在其他进程中是重要的。 根参数和 comm 参数在所有进程中都必须相同。
通常, sendtype 和 recvtype 参数都允许使用派生数据类型。 每个进程中的 sendtype 和 recvtype 参数指定的类型签名必须等于根进程中 recvcount 和 sendcount 参数的类型签名。 发送的数据量必须等于根进程与每个单独进程之间收到的数据量。 仍允许发送方和接收方之间的非重复类型映射。
计数和类型的规范不应导致根上的任何位置多次写入。 此类调用是错误的。
如果 comm 参数引用内部通信器,则所有进程都会将其发送缓冲区的内容发送到根进程。 根进程接收消息并按排名顺序存储它们。 结果就像组中的每个 n 个进程都执行了对 MPI_Send(sendbuf, sendcount, sendtype, root, …)
的调用,而根已 执行 n 个 对 的 MPI_Recv(recvbuf + i*recvcount*extent(recvtype), recvcount, recvtype, i, …)
调用。
extent(recvtype)
的值是使用 MPI_Type_get_extent 函数获取的。 函数的另一种说明是,组中的进程发送的 n 条消息按排名顺序连接,生成的消息由根用户接收,就像通过对 的调用 MPI_RECV(recvbuf, recvcountn, recvtype, ...)
一样接收。 对于所有非根进程,将忽略接收缓冲区。
如果 comm 参数引用对讲器,则调用涉及交互器中的所有进程,但包含一个组 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 |