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