MPI_Comm_split 函数
将与指定通信器关联的组分区为指定数量的不连续子组。
语法
int MPIAPI MPI_Comm_split(
MPI_Comm comm,
int color,
int key,
_Out_ MPI_Comm *newcomm
);
参数
comm
要拆分的通信器。color
调用进程要分配到的新通信器。 颜色的值必须是非负值。如果进程MPI_UNDEFINED指定颜色值,则函数会将 newcomm 参数中的MPI_COMM_NULL返回到调用进程。
key
新通信器组中调用进程的相对排名。 有关使用 键 和 颜色 参数的详细信息,请参阅备注。newcomm [out]
返回时,包含新通信器的句柄。
返回值
返回成功 时MPI_SUCCESS 。 否则,返回值为错误代码。
在 Fortran 中,返回值存储在 IERROR 参数中。
Fortran
MPI_COMM_SPLIT(COMM,COLOR,KEY,NEWCOMM,IERROR)
INTEGER COMM, COLOR, KEY, NEWCOMM, IERROR
注解
这是一个集合函数,但每个进程都可以为 颜色 和 键 参数指定不同的值。
这是一种极其强大的机制,用于将单个通信进程组划分为任意数量的子组。 子组的数量由在所有进程中指定的颜色数决定。 生成的通信器不重叠。 以这种方式细分通信器对于定义计算层次结构(例如多网格或线性代数)非常有用。
每个子组都包含为 颜色 参数指定相同值的所有进程。 在每个子组中,进程按 键 参数值定义的顺序进行排名,并根据其在旧组中的排名断开。
对于通信器内部通信器,对 的 MPI_COMM_CREATE(comm, group, new-comm)
调用等效于对 MPI_COMM_SPLIT(comm, color, key, newcomm)
的调用,其中,作为组成员的进程根据所有不连续组的唯一编号指定组的编号,为 颜色 参数及其在 键 参数的组中的排名指定组的编号。 所有不是组成员的进程都为颜色参数指定MPI_UNDEFINED。
对于任何一种颜色,键值不必是唯一的。 MPI_Comm_split 函数根据键参数的值按顺序对进程进行排序,并按其在源组中的相对排名对关系进行排序。 如果为所有 键 参数指定了相同的值,则给定颜色的所有进程都具有与其父组中相同的相对排名顺序。
对于内部通信器, MPI_Comm_split 和 MPI_Comm_create 函数提供了类似的功能,可将通信组拆分为不连续的子组。
当某些进程没有其组中其他成员的完整信息,但所有进程都具有其所属组的颜色时,将使用 MPI_Comm_split 函数。 在这种情况下,MPI 实现通过通信发现其他组成员。
当所有进程都具有其组成员的完整信息时,将使用 MPI_Comm_create 函数。 在这种情况下,MPI 实现可以避免发现组成员身份所需的额外通信。
由MPI_Comm_split创建的通信器不能重叠。 可以多次调用 MPI_Comm_split 函数来克服此限制。 可以通过这种方式创建多个重叠的通信结构。 鼓励在此类拆分操作中创造性地使用 颜色 和 关键 参数。
交互器上 MPI_Comm_split 函数的结果是,与右侧的那些进程颜色相同的左侧进程组合在一起,以创建新的对讲器。 键参数定义通信器每一侧的相对进程排名。 具有 MPI_COMM_NULL 句柄的新通信器将返回到那些将 MPI_UNDEFINED 指定为其颜色的进程,或指定仅在通信器一侧指定的颜色。
要求
产品 |
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 |