在上一篇中我们介绍了 mpi4py 中可重复非阻塞同步通信模式,下面我们将介绍组合发送接收操作。
组合发送接收操作比较适合接力通信的场合。在使用组合发送接收的时候要注意合理安排相关进程之间发送/接收操作的顺序,以避免死锁。
组合通信的发送操作,可被任何接收操作匹配,反之,组合通信的接收操作也可匹配任何其它类型的发送动作。
组合发送接收通信方法(MPI.Comm 类的方法)接口如下:
sendrecv(self, sendobj, int dest, int sendtag=0, recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG, Status status=None)
Sendrecv(self, sendbuf, int dest, int sendtag=0, recvbuf=None, int source=ANY_SOURCE, int recvtag=ANY_TAG, Status status=None)
这些方法调用中的参数是与阻塞标准通信模式的方法调用参数一样的。
下面给出组合发送接收通信的使用例程:
# sendrecv.py
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()
tag = 123
left = rank - 1 if rank >=1