C++并行计算 MPI Tutorial-9

本文详细介绍了C++中MPI(Message Passing Interface)的通讯器(Communicators)和组(Groups)的概念,强调了在并行计算中创建和使用通讯器的重要性。通过实例展示了如何利用MPI_Generate_communicator和MPI_Comm_split等功能创建和操作通讯器,以及如何使用MPI_Group和相关操作进行组的联合、相交等操作。文章还提醒了在并行环境中资源管理和通讯效率的考虑。
摘要由CSDN通过智能技术生成


在以前的所有教程中,我们都使用通讯器 MPI_COMM_WORLD。对于简单的应用程序,这已经足够了,因为我们的进程数量相对较少,并且通常要么一次要与它们之一对话,要么一次要与所有进程对话。当应用程序开始变大时,这变得不那么实用了,我们可能只想一次与几个进程进行对话。在本课程中,我们将展示如何创建新的通讯器 ,以便一次与原始进程组的子集进行通讯。

通讯器概述

对于简单的应用程序,使用 MPI_COMM_WORLD 进行所有操作并不罕见,但是对于更复杂的用例,拥有更多的通讯器可能会有所帮助。例如,如果您想对网格中一部分进程进行计算。例如,每一行中的所有进程都可能希望对一个值求和。这将我们带到了用于创建新的通讯器的第一个也是最常见的功能:

MPI_Comm_split(
	MPI_Comm comm,
	int color,
	int key,
	MPI_Comm* newcomm)

顾名思义,MPI_Comm_split 通过基于输入值 colorkey 将通讯器 “拆分”为一组子通讯器来创建新的通讯器 。在这里需要注意的是,原始的通讯器并没有消失,但是在每个过程中都会创建一个新的通讯器。第一个参数 comm 是将用作新通讯器基础的通讯器。这可以是 MPI_COMM_WORLD,但也可以是任何其他通讯器。第二个参数 color 确定每个进程将属于哪个新的通讯器。所有传递相同 color 的进程都分配给同一通讯器。如果颜色是 MPI_UNDEFINED,则该进程将不会包含在任何新的通讯器中。第三个参数 key 确定每个新通讯器中的顺序(秩)。传递键的最小值的进程将为秩0 ,第二个最小值将为秩1 ,依此类推。如果出现相等的情况,则在原始通讯器中秩较低的进程将是第一位。最后一个参数 newcomm 是 MPI 如何将新的通讯器返回给用户。

使用多个通讯器的示例

现在,让我们看一个简单的示例,在该示例中,我们尝试将单个全局通讯器拆分为一组较小的通讯器。在此示例中,我们将假设我们已将逻辑模型原始的通讯器布局为由 16 个进程组成的 4x4 网格,并且希望按行划分网格。为此,每一行将获得自己的颜色。在下图中,您可以看到左侧具有相同颜色的每组过程如何最终在右侧拥有自己的通讯器。


代码如下:

// 获取原始通讯器的秩和大小
int world_rank, world_size;
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
MPI_Comm_size(MPI_COMM_WORLD, &world_size);

int color = world_rank / 4; // 根据行确定角色

// 根据颜色拆分通讯器,使用原始秩排名
MPI_Comm row_comm;
MPI_Comm_split(MPI_COMM_WORLD, color, world_rank, &row_comm);

int row_rank, row_size;
MPI_Comm_rank(row_comm, &row_rank);
MPI_Comm_size(row_comm, &row_size);

printf("WORLD RANK/SIZE: %d/%d \t ROW RANK/SIZE: %d/%d\n",
	world_rank, world_size, row_rank, row_size);

MPI_Comm_free(&row_comm);<
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值