我试图学习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
但是运行它......
mpirun -np 4 python shift.py
...从所有过程中引发此错误:
TypeError: message: expecting buffer or list/tuple
我无法在Sendrecv上找到任何相当完整的文档。知道我做错了吗?
答案 0 :(得分:2)
如果有人感兴趣,事实证明Sendrecv(我使用)和sendrecv(注意小写)是两个不同的例程。 Sendrecv适用于缓冲区。 sendrecv更通用,可以正常运行。我能找到的唯一一个讨论的地方是here。