2014-06-08 50 views
1

我想用mpi4py的sendrecv()传递一个字典obj。python MPI sendrecv()传递一个python对象

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,我会得到一堆“无” S,所以词典idxdict没有核心之间通过。如果我使用字典作为缓冲区:buffer={},那么有typeerror:TypeError: expected a writeable buffer object

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

回答

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 
相关问题