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_splitMPI_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

另请参阅

MPI Communicator 函数

MPI_Comm_create