MPI树形通信结构和蝶形通信结构的实现

本文详细介绍了MPI中的树形和蝶形通信结构的实现,包括2的幂次和任意进程数目的情况。通过分析和代码说明,展示了这两种结构在计算全局总和时的过程,实验结果表明,蝶形结构通信轮次较少,但处理非2的幂次进程数时较复杂。
摘要由CSDN通过智能技术生成

MPI树形通信结构和蝶形通信结构的实现

GitHub:https://github.com/zhangjt33/parallel-relevant-program/tree/master/MPI/group%20communication%20implementation

1. 博客内容

​ 编写MPI程序,分别采用树形和蝶形通信结构计算全局总和。首先计算通信域comm_sz的进程数是2的幂的特殊情况,若能够正确运行,改变该程序使其适用于comm_sz中任意进程数目的值。

2. 树形通信结构

2.1 树形通信结构分析

​ 树形通信结构是用于MPI集合通信中的一种实现结构。树形方式也有多种(如图所示),其基本思想都是将一个进程和另一个进程配对,由一个进程向另一个进程发送消息,然后发送消息的进程进入不活跃状态,接收消息的进程对收到的数据消息和自己已有的消息进行操作,之后再把消息发送给配对的进程,这个过程一直进行直到只有一个活跃的进程,这个进程的数据就是要求的全局的数据,如和,最大值,最小值等。在树形通信结构中,每一轮通信都会减少一半进程数。每个进程可能接收多次消息,但是只会发生一次消息。通信的轮次为: O ( l o g N ) O(logN) O(logN)次,其中N是进程的数量。
当一个进程获得了全局的结果后,需要分发到每一个进程,过程和求全局结果相反。通信的轮次也为: O ( l o g N ) O(logN) O(logN)次,其中N是进程的数量。分发的结构和求全局结果的结构上下对称,箭头相反。

​ 树形通信结构1:

树形通信结构1

​ 树形通信结构2:

树形通信结构2

2.2 进程数目为2的幂次的树形通信结构实现

2.2.1 实现分析

​ 不同的树形通信结构方式有不同的配对策略,他们可能因此有不同的性能。我实现的是上图的第二种树形通信结构。

实现树形通信结构的关键在于确定进程的角色和与之配对的进程,在不同的时刻相互匹配的进程是不同的。

​ 但是我们可以观察到,求全局和的过程中,每一轮的通信中,总是有一半的活跃进程发送消息,另一半的活跃进程接收消息,并且活跃的进程数量每一轮次减少一半。我们可以因此得出进程的配对伙伴:

  • 当进程处在当前活跃进程的前半部分: m y _ r a n k &lt; c u r r e n t _ c o m m _ s i z e / 2 my\_rank &lt; current\_comm\_size/2 my_rank<current_comm_size/2时,它是接收进程,配对进程是: m y _ r a n k + c u r r e n t _ s t e p _ s i z e / 2 my\_rank + current\_step\_size/2 my_rank+current_step_size/2
  • 当进程处于当前活跃进程的后半部分: m y _ r a n k &gt; = c u r r e n t _ c o m m _ s i z e / 2 my\_rank &gt;= current\_comm\_size/2 my_rank>=current_comm_size/2,它是发送进程,配对进程是: m y _ r a n k − c u r r e n t _ s t e p _ s i z e / 2 my\_rank - current\_step\_size/2 my_rankcurrent_step_size/2

​ 分发全局和的过程中,每一轮的通信中,同样总是有一半的活跃进程发送消息,另一半的活跃进程接收消息,并且活跃的进程数量每一轮次增加一倍。我们可以因此得出进程的配对伙伴:

  • 当进程处在当前活跃进程的前半部分时,它是发送进程,并且配对进程是: m y _ r a n k + c u r r e n t _ s t e p _ s i z e / 2 my\_ra
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值