我有一个我用 python 编写的程序,它利用了多个不同的 PI 板。主要的是运行在raspios-buster-lite-armhf
. 但是,节点都是在 Nano Pi 上运行的sd-friendlycore-xenial-4.4-arm64
。如果可能的话,我想利用所有这些,这样我的程序就尽可能地高效。我在所有这些设备上都安装了 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 之后添加一个参数以使其能够跨平台工作?如果我将树莓派切换到 ARM 64 而不是当前的 ARMhf,它会起作用吗?尝试将xenial固件安装到树莓派上并且它会起作用的唯一解决方案是?