学习书籍:
内容摘自《高性能计算之并行编程技术--MPI并行程序设计》、MPI并行程序设计实例教程
学习内容:
MPI定义了4种通信模式:标准通信模式(standard mode),缓存通信模式(buffered mode),同步通信模式(synchronous mode),就绪通信模式(ready mode)。
上述模式区分情况:1、是否需要对发送的数据进行缓存?
2、是否只有当接收调用执行后才可以执行发送操作?
3、什么时候发送调用可以正确返回?
4、发送调用正确返回是否意味着发送已完成?即发送缓存区是否可以被覆盖? 发送数据是否已到大接收缓冲区?
1)标准通信模式 (MPI_SEND)
MPI是否对发送的数据进行缓存是由MPI自身决定的, 而不是由程序员来控制。
![[MPI] 不同通信模式MPI并行程序设计 - applesun - 计算机技术学习笔记 [MPI] 不同通信模式MPI并行程序设计 - applesun - 计算机技术学习笔记](http://img0.ph.126.net/TKULNo3XC6oXh0EUCnXX8A==/6597877907702573110.jpg)
2)缓存通信模式 (MPI_BSEND)
当用户对标准模式不满意, 希望直接对通信缓冲区进行控制时,可采用缓存通信模式。 在这种模式下,由用户直接对通信缓冲区进行申请、使用和释放。因此,缓存模式下对通信缓冲区的合理与正确使用是由程序设计人员自己保证的。
![[MPI] 不同通信模式MPI并行程序设计 - applesun - 计算机技术学习笔记 [MPI] 不同通信模式MPI并行程序设计 - applesun - 计算机技术学习笔记](http://img4.ph.126.net/QhYm7qAhbYzyCXuCinN_Ig==/6597749264842125054.jpg)
实行缓存通信模式,消息发送能否进行及能否正确返回不依赖于接收进程,完全依赖于是否有足够的通信缓冲区可用。
程序员申请缓冲区函数, MPI_BUFFER_ATTACH, 释放缓冲区 MPI_BUFFER_DETACH。
3)同步通信模式 (MPI_SSEND)
同步通信模式的开始不依赖于接收进程相应的接收操作是否已经启动,但是同步发送却必须等到相应的接收进程开始后才可以正确返回。因此,同步发送返回后,意味着发送缓冲区中的数据已经全部被系统缓冲区缓存,并且已经开始发送。这样,当同步返回后,发送缓冲区可以被释放或重新使用。(NOTE 2012-09-23: 这里提到,发送返回是在接收进程开始接收后,且同步返回后,"发送缓冲区可以被释放或重新使用"? 消息未全部发送完毕,为什么发送缓冲区可以被释放或重新使用?)
以下是《MPI并行程序设计实例教程》关于同步通信模式的描述:
不论接收端是否启动了接收动作,发送端都可在任何时机启动发送动作。但发送端需等待接收端的接收动作发起并开始接收数据之后才可能结束。 即发送动作的结束不仅意味着发送缓冲区已经可以用于其他用途,而且还表示接收端也执行了一定程度的接收工作。
![[MPI] 不同通信模式MPI并行程序设计 - applesun - 计算机技术学习笔记 [MPI] 不同通信模式MPI并行程序设计 - applesun - 计算机技术学习笔记](http://img1.ph.126.net/hR_iBdVZqh_uTDqJS7A96A==/6597656905865391081.jpg)
4)就绪通信模式 (MPI_RSEND)
在就绪通信模式中,只有当接收进程的接收操作已经启动时,才可以在发送进程启动发送操作,否则,当发送操作启动而相应的接收还没有启动时, 发送操作将出错。 (NOTE 2012-09-23: 什么时候发送正确返回?)
![[MPI] 不同通信模式MPI并行程序设计 - applesun - 计算机技术学习笔记 [MPI] 不同通信模式MPI并行程序设计 - applesun - 计算机技术学习笔记](http://img2.ph.126.net/hAcpkJvhGG4piHcnnay3jg==/6597960371074658112.jpg)
学习感想
通过图来理解不同的通信模式。
浙公网安备 33010602011771号