问题描述
我有一个用 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 (将#修改为@)