MPI Tutorial 笔记(二) 集体通信_一


我们之前讲了,blocking point-to-point communication,这种通讯只会涉及两个不同的线程.
而现在的Collective Communication (MPI 集体通信) 指的是一个通信行为涉及 communicator 里面所有进程的一个方法。

集体通信概念 与 同步点

synchronization point

这意味着所有的进程在执行代码的时候必须首先_都_到达一个同步点才能继续执行后面的代码。
也即先完成同步点前代码的进程将被阻塞,等到所有进程都到同步点后再进行同步点下方代码

为了同步而进行的阻塞 MPI_Barrier()

MPI_Barrier(MPI_Comm communicator)

(Barrier,屏障)- 这个方法会构建一个屏障,任何该通讯器(Commuincator)进程都没法跨越屏障,直到所有的进程都到达屏障,才可进行下一步.

在这里插入图片描述

MPI_Barrier 在很多时候很有用。其中一个用途是用来同步一个程序,使得分布式代码中的某一部分可以被精确的计时

那MPI_Barrier()是如何实现的呢?

我们之前 在 [[Blocking point-to-pointCommunicator]]中用MPI_Recv() 和MPI_Send() 实现的 ring.c 程序就是它的一个简单实现 :我们当时写了一个在所有进程里以环的形式传递一个令牌(token)的程序,这种形式的程序是最简单的一种实现屏障的方式,因为令牌只有在所有程序都完成之后才能被传递回第一个进程

关于同步最后一个要注意的地方是:始终记得每一个你调用的集体通信方法都是同步的

集体方法均是会同步的

如果你没法让所有进程都完成 MPI_Barrier,那么你也没法完成任何集体调用。如果你在没有确保所有进程都调用 MPI_Barrier 的情况下调用了它,那么程序会空闲下来。

broadcasting (广播)(MPI_Bcast())

广播 (broadcast) 是标准的集体通信技术之一
==> Broadcast 肯定是会同步
一个广播发生的时候,一个进程会把同样一份数据传递给一个 communicator 里的所有其他进程

广播的用途

  1. 用户输入传递给一个分布式程序
  2. 把一些配置参数传递给所有的进程。

![[Pasted image 20230916102424.png]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值