如何解决如何使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 举报,一经查实,本站将立刻删除。