热门标签:
Q:

python MPI sendrecv()传递python对象

我正在尝试使用mpi4py的sendrecv()传递字典obj。

from mpi4py import MPI
comm=MPI_COMM_WORLD
rnk=comm.Get_rank()
size=comm.Get_size()

idxdict={1:2}
buffer=None
comm.sendrecv(idxdict,dest=(rnk+1)%size,sendtag=rnk,recvobj=buffer,source=(rnk-1+size)%size,recvtag=(rnk-1+size)%size)
idxdict=buffer

如果我在最后一步打印idxidct,我会得到一堆"None",所以字典idxdict不在核心之间传递。 如果我使用字典作为buffer:buffer={},那么有typeerror:TypeError: expected a writeable buffer object

我做错了什么? 非常感谢你的帮助。

原网址
A:

我相信文档在这里是误导性的;sendrecv返回接收的缓冲区,并且根本不使用我可以看到的接收对象参数(至少在旧版本中,1.2。x)。 所以你上面的代码不起作用(尽管接收实际上确实发生了),但下面确实如此:

from mpi4py import MPI
comm=MPI.COMM_WORLD
rnk=comm.Get_rank()
size=comm.Get_size()

idxdict={1:2}
buffer = comm.sendrecv(sendobj=idxdict,dest=(rnk+1)%size,source=(rnk-1+size)%size)

print "idxdict = ", idxdict
print "buffer = ", buffer

相似问题