【问题标题】:MPI - Point to Point Communication Linnear Communication `MPI - 点对点通信 线性通信 `
【发布时间】:2019-09-15 17:30:20
【问题描述】:

我正在尝试在 Python 上编写一个 MPI 程序来计算邻居值的平均值。

我的算法如下

用你拥有的邻居初始化值。然后计算邻居值的平均值并从新值中减去。

我写了以下程序

from mpi4py import MPI
import sys



comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
myvalue=2
sum=0
neighb=1
nvalue=0


if rank == 0 or rank == size-1:

myvalue=1
neighb=myvalue

if rank < size-1:
    msg = myvalue
    comm.send(msg, dest=rank+1)
    sys.stdout.write("rank send %d: %s" % (rank, myvalue))
    comm.recv(nvalue,source=rank+1)
    sum+=nvalue
    sys.stdout.write("rank RECV %d: %s" % (rank, nvalue))
if rank > 0:
    comm.recv(nvalue,rank-1)
    sum+=nvalue
    sys.stdout.write("rank RECV %d: %s" % (rank, nvalue))
    comm.send(myvalue,rank-1)
    sys.stdout.write("rank send %d: %s" % (rank, myvalue))

avg =sum/neighb
myvalue-=avg

但程序无法运行它卡住了,当我尝试使用以下命令在控制台上运行它时会出现以下窗口,

mpiexec -n 4 python p2p_linnear.py -m mpi4py

【问题讨论】:

    标签: python jupyter-notebook mpi point-to-point


    【解决方案1】:

    插入一些打印语句是否 MPI 已正确初始化。例如大小和排名

    您是否从微软安装了 MPI?

    mpi4py 要求在主机系统上安装 Microsoft MPI 6。这是一个系统范围的安装,目前无法通过 conda 获得。为了成功使用 mpi4py,您必须安装 Microsoft MPI,然后将 MPI 安装的 bin 目录附加到您的 PATH 环境变量中。要安装 Microsoft MPI,请参阅 https://www.microsoft.com/en-us/download/details.aspx?id=47259

    并且您正在使用阻塞通信(send 和 recv),但您想要将数据发送到所有其他等级,因此您需要非阻塞通信(isend、irecv)。

    另外:recv 方法不将要接收的变量作为参数:

    nvalue=comm.recv(source=rank+1)

    【讨论】:

      猜你喜欢
      • 2019-06-11
      • 2013-03-08
      • 2016-05-07
      • 1970-01-01
      • 2021-09-09
      • 2013-02-07
      • 1970-01-01
      • 2021-05-08
      • 2016-07-13
      相关资源
      最近更新 更多