我想使用较快的发送(而不是较慢的发送)方法将一些字符从一个进程传输到另一个进程,但还无法获得使用mpi4py的有效解决方案(仅限于使用这种语言,Python3)
这是我的玩具代码-如果有人能指出我做错了什么(以及如何修复它),我将非常感激。
from mpi4py import MPI
import numpy
from array import array
comm = MPI.COMM_WORLD
if comm.rank == 0:
comm.Send([b'hello',MPI.CHAR],dest=1)
elif comm.rank == 1:
buf = array('b')*255
r = comm.Recv([buf,MPI.CHAR],source=0)
print(r)作为参考,我也尝试了这里的代码(不起作用):https://groups.google.com/g/mpi4py/c/LDHbzApI55c/m/gENCO-\_HAwUJ
谢谢!
发布于 2021-02-26 08:12:08
问题是你的缓冲区buf在这种情况下,当它尝试接收长度为0的消息时,它不足以容纳您的消息。
这里的解决方案是使用bytearray由于您可以将其初始化为固定大小,因此您的示例将如下所示:
from mpi4py import MPI
comm = MPI.COMM_WORLD
if comm.rank == 0:
comm.Send([b'hello',MPI.CHAR],dest=1)
elif comm.rank == 1:
buf = bytearray(256)
comm.Recv([buf,MPI.CHAR],source=0)
# Decode the string to remove the empty characters from bytearray
print(buf.decode('utf-8'))另请注意,Recv不返回值,因此r将为空。结果将直接保存到buf
https://stackoverflow.com/questions/66376707
复制相似问题