首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mpi4py发送字符

mpi4py发送字符
EN

Stack Overflow用户
提问于 2021-02-26 05:28:16
回答 1查看 102关注 0票数 1

我想使用较快的发送(而不是较慢的发送)方法将一些字符从一个进程传输到另一个进程,但还无法获得使用mpi4py的有效解决方案(仅限于使用这种语言,Python3)

这是我的玩具代码-如果有人能指出我做错了什么(以及如何修复它),我将非常感激。

代码语言:javascript
复制
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

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-26 08:12:08

问题是你的缓冲区buf在这种情况下,当它尝试接收长度为0的消息时,它不足以容纳您的消息。

这里的解决方案是使用bytearray由于您可以将其初始化为固定大小,因此您的示例将如下所示:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66376707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档