并行程序设计基础——进程组和通信域(1)

目录

一、进程组管理

1、MPI_GROUP_SIZE

2、MPI_GROUP_RANK

3、MPI_GROUP_TRANSLATE_RANKS

4、MPI_GROUP_COMPARE

5、MPI_COMM_GROUP

6、MPI_GROUP_UNION

7、MPI_GROUP_INTERSECTION

8、MPI_GROUP_DIFFERENCE

9、MPI_GROUP_INCL

10、MPI_GROUP_EXCL

11、MPI_GROUP_RANGE_INCL

12、MPI_GROUP_RANGE_EXCL

13、MPI_GROUP_FREE

二、通信域管理

1、MPI_COMM_SIZE

2、MPI_COMM_RANK

3、MPI_COMM_COMPARE

4、MPI_COMM_DUP

5、MPI_COMM_CREATE

6、MPI_COMM_SPLIT

7、MPI_COMM_FREE


        从本节开始,我们来学习MPI中非常重要的概念——进程组和通信域。

        通信域包括通信上下文、进程组、虚拟处理器拓扑、属性等,用于综合描述通信进程间的通信关系。通信域分为组内通信域组间通信域。组内通信域用于描述属于同一组内进程间的通信;组间通信域用于描述属于不同进程组的进程间的通信。

        进程组是通信域的一个重要组成部分,其定义了不同进程的有序集合,每一个进程都有一个编号,如0,1,……,N-1等。进程组限定了参加通信的进程的范围。进程是和实现相关的对象,MPI将进程组内的每个进程与一个整数rank相关联,序列号是连续的并从0开始。

        MPI_GROUP_EMPTY是一个特殊的预定义组,它没有成员,预定义的常数MPI_GROUP_NULL是为无效组句柄使用的值。因此不应该将MPI_GROUP_EMPTY与MPI_GROUP_NULL混淆,前者是一个空组的有效句柄,后者是一个无效句柄。前者可以在组操作中作为一个参数使用,后者在组释放时被返回。

        通信上下文是通信域所具有的一个特性,它允许对通信空间进行划分。一个上下文所发送的消息不能被另一个上下文所接收。进一步说,允许集合操作独立于挂起的点对点操作。上下文不是显式的MPI对象,它们仅作为通信域实现的一部分而出现。一旦MPI_INIT被调用,就会产生一个预定义组内通信域MPI_COMM_WORLD,它包括所有的进程。另外还提供了通信域MPI_COMM_SELF,该通信域仅包括自身进程。预定义的常数MPI_COMM_NULL是为无效通信域使用的值。

        所有的MPI实现都要求提供MPI_COMM_WORLD通信域,在进程的生命周期中不允许将其释放。与该通信域对应的组不是以预定义常数的形式出现的,但是可以使用MPI_COMM_GROUP访问。

一、进程组管理

        以下的接口用于MPI进程组的维护,这些接口的执行不要求进程间通信。

1、MPI_GROUP_SIZE

        MPI_GROUP_SIZE返回指定进程组中所包含的进程的个数。

MPI_GROUP_SIZE(group, size)
IN    group        进程组(句柄)
OUT   size         组内的进程数(整数)

//c语言的说明
int MPI_Group_size(MPI_Group group, int *size)
//Fortran语言的说明
MPI_GROUP_SIZE(GROUP, SIZE, IERROR)
INTEGER  GROUP, SIZE, IERROR

2、MPI_GROUP_RANK

        MPI_GROUP_RANK返回调用进程在给定进程组中的编号rank,有些类似于MPI_COMM_RANK。如果调用进程不在给定的进程组内,则返回MPI_UNDEFINED。

MPI_GROUP_RANK(group, rank)
IN    group        进程组(句柄)
OUT   rank         调用进程的序列号/MPI_UNDIFINED(整数)

//c语言的说明
int MPI_Group_rank(MPI_Group group, int *rank)
//Fortran语言的说明
MPI_GROUP_RANK(GROUP, RANK, IERROR)
INTEGER  GROUP, RANK, IERROR

3、MPI_GROUP_TRANSLATE_RANKS

        MPI_GROUP_TRANSLATE_RANKS返回进程组group1中的n个进程(由rank1指定)在进程组group2中对应的编号(相应的编号放在rank2中)。如果进程组group2中不包括进程组group1中指定的进程,则相应的返回值为MPI_UNDEFINED。此函数可以检测两个不同进程组中相同进程的相对编号。例如,如果知道了在组MPI_COMM_WORLD中某些进程的序列号,可能也想知道在改组的子集中它们的序列号。

MPI_GROUP_TRANSLATE_RANKS(group1, n, ranks1, group2, ranks2)
IN    group1        进程组1(句柄)
IN    n             数组rank1和rank2的大小(整数)
IN    ranks1        进程标识数组(整数数组),在进程组group1中的标识
IN    group2        进程组2(句柄)
OUT   ranks2        ranks1在进程组group2中对应的标识数组(整型数组)

//c语言的说明
int MPI_Group_translate_ranks(MPI_Group group1, int n, int *ranks1, MPI_Group group2, int *ranks2)
//Fortran语言的说明
MPI_GROUP_TRANSLATE_RANKS(GROUP1, N, RANKS1, GROUP2, RANKS2, IERROR)
INTEGER  GROUP1, N, RANKS1(*), GROUP2, RANKS(*), IERROR

4、MPI_GROUP_COMPARE

        MPI_GROUP_COMPARE对两个进程组group1和group2进行比较,如果两个进程组group1和group2所包含的进程以及相同进程的编号都完全相同,则返回MPI_IDENT;如果两个进程组group1和

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿核试Bug愁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值