【问题标题】:python MPI sendrecv() to pass a python objectpython MPI sendrecv() 传递一个python对象
【发布时间】:2014-07-28 21:42:16
【问题描述】:

我正在尝试使用 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={},那么就会出现 typeerror:TypeError: expected a writeable buffer object

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

【问题讨论】:

    标签: python mpi mpi4py


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2018-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多