gpt4 book ai didi

python MPI sendrecv() 传递 python 对象

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:14 26 4
gpt4 key购买 nike

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

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

最佳答案

我认为这里的文档具有误导性; 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

关于python MPI sendrecv() 传递 python 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24101829/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com