在上一篇中我们介绍了 mpi4py 中非重复非阻塞同步通信模式,下面我们将介绍可重复的非阻塞通信,我们先从可重复的非阻塞标准通信开始。
在实际的计算环境中,经常会在一个内部循环中重复使用相同的数据结构来传递不同的数据,此时将数据结构与发送/接收动作绑定可提高程序的效率,这可以通过可重复的非阻塞通信实现。重复的通信需借助通信请求对象 MPI.Prequest(MPI.Request 的子类对象)进行控制其发起、完成等。这样处理可减少 MPI 环境通信控制器与进程之间进行交互的开销。
可重复的非阻塞通信也有4个模式,即标准、缓冲、就绪和同步模式,这4个通信模式是与阻塞通信,非重复非阻塞通信的4个模式一一对应的。可重复的非阻塞通信的4个模式用到的(MPI.Comm 类)发送方法分别为 Send_int,Bsend_int,Rsend_int 和 Ssend_init,相应的接收方法为 Recv_int,用来管理重复启动通信的操作方法是 MPI.Prequest.Start,MPI.Prequest.Startall。注意:可重复的非阻塞通信只有以大写字母开头的方法,而没有提供与之对应的小写字母开头的方法,因此如果要发送和接收通用的 Python 对象