MPI,同步/异步,阻塞/非阻塞通讯,集合通信,Gather/Scatter

1. MPI

MPI(Message Passing Interface)是一种消息传递接口,是一个消息传递汉书库的标准说明。在基于MPI编程模型中,计算是由一个或多个彼此通过调用库函数进行消息收、发通信的进程所组成。MPI为程序员提供一个并行环境库,程序员通过调用MPI的库程序来达到程序员所要达到的并行目的。


2.同步/异步

二者区别主要在于:发送操作是否要等 “接收进程接收消息完成” 才完成

同步发送操作: 只有等消息被接收进程安全接收后才算完成。(数据发出去了,而且被接收进程安全接收了,才完成)

异步发送操作:  操作完成后,消息不一定被接收进程接收。(只要把消息发出去就算完成,不管有没有接收)


3.阻塞/非阻塞通讯

二者区别主要在于:调用完成是否依靠某些“事件”

阻塞通讯:调用完成要依赖某些“事件”。(阻塞发送或接收的 函数内部 会等待这个“事件“:”事件“没发生,函数就阻塞在那里;”事件“发生了,函数才返回)

              阻塞发送:数据必须成功的发送或被拷贝到系统缓冲区,使得该数据缓冲区可被重新使用。这个“事件”发生,函数才返回,发送操作才完成。                   

              阻塞接收:数据必须保证接收到本地缓冲区。这个“事件“发生,函数才返回,接收操作才完成。

非阻塞通讯:不等任何“事件”,就可完成,不保证数据已正确发送或接收。(发完或接收操作发起后,不等”事件“,直接返回。但是,如果要想知道数据有没有被正确发送或接收,要使用wait(), test()查询)


4.同步阻塞发送/同步无阻塞发送(异步都是非阻塞)

同步阻塞发送:发送操作要等消息被安全接收才算完成。发送操作本身使阻塞,要等某“事件”,发送操作才返回。(发送返回了,说明“事件“肯定发生了。不需要再用wait() test() 查询)

同步非阻塞发送:发送操作要等消息被安全接收才算完成。但是,要想知道数据被正确接收,要用wait(),test这些函数查询。


5.集合通信

通信因子包含一个相互之间通信的进程组。

集合通信是包含在通信因子中的所有进程都参加操作。

集合操作的三种类型:

        同步:集合中所有进程都到达后,每个进程再接着运行;

        数据传递: 广播(Broadcast),  分散(Scatter), 收集(Gather),全部到全部(Alltoall)。

        规约:集合中的一个进程收集说有进程的数据并计算(如:求最大值,最小值,加,乘)

集合操作是阻塞的。

(1)广播(Broadcast)


MPI,同步/异步,阻塞/非阻塞通讯,集合通信,Gather/Scatter_第1张图片

(2) 分散(Scatter)


MPI,同步/异步,阻塞/非阻塞通讯,集合通信,Gather/Scatter_第2张图片

(3) 收集(Gather)

MPI,同步/异步,阻塞/非阻塞通讯,集合通信,Gather/Scatter_第3张图片


(4)全部到全部(Alltoall)

MPI,同步/异步,阻塞/非阻塞通讯,集合通信,Gather/Scatter_第4张图片

(5)allgather


MPI,同步/异步,阻塞/非阻塞通讯,集合通信,Gather/Scatter_第5张图片

注:本文参考神威1计算机系统 MPI培训手册





你可能感兴趣的:(Linux)