mpi4py 发送字符

mpi4py Send characters

我想使用更快的发送(而不是更慢的发送)方法将一些字符从一个进程传输到另一个进程,但无法通过 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

谢谢!

问题是在这种情况下,您的缓冲区 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 没有 return 值,因此 r 将为空。结果会直接保存到buf