微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使MPI跨平台发送

如何解决如何使MPI跨平台发送

我有一个用 python 编写的程序,它使用多个不同的 PI 板。主要的是一个raspios-buster-lite-armhf 上运行的树莓派。但是,节点都是在 sd-friendlycore-xenial-4.4-arm64 上运行的 Nano Pi。如果可能的话,我想利用所有,这样我的程序就可以尽可能高效。我在所有这些设备上都安装了 MPI,并且在一定程度上有效。这是打印排名和大小的演示 helloworld.py 程序的输出

Hello,World! I am process 4 of 5 on Node04.
Hello,World! I am process 1 of 5 on Node02.
Hello,World! I am process 2 of 5 on Node01.
Hello,World! I am process 3 of 5 on Node03.
Hello,World! I am process 0 of 5 on HeadPi.

如您所见,确实有效。但是,如果我尝试发送信号,则它不起作用。这是通用代码

from mpi4py import MPI
import sys
comm = MPI.COMM_WORLD 
size = comm.Get_size()
rank = comm.Get_rank()
name = MPI.Get_processor_name()

if rank == 0:
    shared = 'hi'
    print('sending')
    req = comm.isend(shared,dest=4,tag=1)
    print('sent')
    req.wait()
    print('done waiting')
if rank == 4:
    receive = comm.irecv(source=0,tag=1)
    data = receive.wait()
    print(data)

如果我运行它,它会打印 send,然后无限期地停止。但是,如果我将消息从一个节点发送到另一个节点,则它发送得很好。显然意味着它无法跨不同平台进行通信,或者我在树莓派上设置了非常错误的东西。是否有一个快速解决方法,例如在 mpiexec 之后添加一个参数以使其能够跨平台工作?如果我将 raspBerry pi 切换到 ARM 64 而不是当前的 ARMhf 会使其工作吗?尝试将 xenial 固件安装到 raspBerry pi 上的唯一解决方案是否可行?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。