1

我正在尝试使用 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

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

4

1 回答 1

1

我认为文档在这里具有误导性;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
于 2014-06-08T01:50:31.177 回答