mpi4py Sendrecv 的使用

bob*_*nto 2 python communication mpi4py

我正在尝试学习mpi4py。下面的测试代码对我来说看起来很简单

#shift.py

from mpi4py import MPI

comm=MPI.COMM_WORLD
rank = comm.Get_rank()
size = comm.Get_size()

nxt = (rank+1)%size
prev = (rank-1)%size

num = rank
num2 = 0

print rank, num

num2 = comm.Sendrecv(num,dest=nxt,source=prev)

print rank, num2
Run Code Online (Sandbox Code Playgroud)

但是运行的东西......

mpirun -np 4 python shift.py
Run Code Online (Sandbox Code Playgroud)

...从所有过程中引发此错误:

TypeError: message: expecting buffer or list/tuple
Run Code Online (Sandbox Code Playgroud)

我一直无法在 Sendrecv 上找到任何相当完整的文档。知道我做错了什么吗?

bob*_*nto 5

如果有人感兴趣,结果是 Sendrecv(我使用的)和 sendrecv(注意小写)是两个不同的例程。Sendrecv 使用缓冲区。sendrecv 更通用并且可以很好地与我正在尝试做的事情配合使用。我能找到这个讨论的唯一地方是这里