MPI_Comm_create 函数
提取一组进程子集,以便在单独的通信器中分离多指令多数据 (MIMD) 计算。
语法
int MPIAPI MPI_Comm_create(
MPI_Comm comm,
MPI_Group group,
_Out_ MPI_Comm *newcomm
);
参数
comm
源通信器。group
定义源通信器中请求的进程子集的组。newcomm [out]
返回时,包含新通信器的句柄。
返回值
返回成功 时MPI_SUCCESS 。 否则,返回值为错误代码。
在 Fortran 中,返回值存储在 IERROR 参数中。
Fortran
MPI_COMM_CREATE(COMM,GROUP,NEWCOMM,IERROR)
INTEGER COMM, GROUP, NEWCOMM, IERROR
注解
此函数创建的通信器可以使用 MPI_Comm_create 函数或其他通信器构造函数进一步细分为并行子计算。 MPI_Comm_split 函数是一个更通用的函数,用于创建MPI_Comm对象。
如果 comm 参数引用内部通信器,则此函数返回一个新的通信器,其中包含 组参数定义的 通信组。 缓存的信息不会从源通信器传播到新通信器。 每个进程都必须使用 组 参数调用,该参数是与源通信器关联的组的子组。 可能的值是 MPI_GROUP_EMPTY。 进程可以为 组 参数指定不同的值。 如果进程调用非空组,则该组中的所有进程都必须调用具有 组参数的 相同值(即相同顺序的相同成员)的函数。 否则,函数将返回错误。 此结果意味着跨进程指定的组集必须不相交。 如果调用进程是 组 参数中指定的组的成员,则 newcomm 参数表示具有指定组作为关联组的通信器。 如果进程指定它不属于的组(例如 ,MPI_GROUP_EMPTY),则 newcomm 参数将返回 MPI_COMM_NULL。
接口支持 MPI-1.1 中的原始机制,该机制在通信的所有进程中都需要相同的组。它在 MPI-2.2 中进行了扩展,以允许使用不连续子组来启用实现,以消除当用户已经知道非连续子组的成员身份时 ,MPI_Comm_split 函数将引发的不必要的通信。
MPI_Comm_create函数是集合函数,必须由源通信器组中的所有进程调用。 要求整个组参与通话的要求来自以下问题:
- 它允许实现将 MPI_Comm_create 函数分层到常规集体通信之上。
- 它提供额外的安全性,尤其是在使用部分重叠组创建新通信器的情况下。
- 它允许实现避免某些与上下文创建相关的通信。
如果 comm 参数引用通信器,则创建的通信器也是一个通信器,其中本地组仅包含 组 参数中指定的进程。 仅指定作为 group 参数中新通信器的一部分的输入对讲器的本地组中的那些进程。 通信器同一本地组中的所有进程必须为 组 参数指定相同的值,即按相同的顺序指定相同的成员。 如果任一组未在通信器的本地组中指定至少一个进程,或者如果该组不包含调用进程,则返回错误。
要求
产品 |
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 |