如何使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 (将#修改为@)