某些数据传输后MPI_Bcast挂起

某些数据传输后MPI_Bcast挂起,mpi,openmpi,infiniband,Mpi,Openmpi,Infiniband,我运行的应用程序在7节点集群上执行一些大型矩阵的转换。节点通过QDR 40 Gbit Infiniband连接。系统上安装了Open MPI 1.4.3 给定的矩阵变换要求节点之间进行大量数据交换,在每个算法步骤中,有一个节点发送数据,所有其他节点接收数据。进程数等于使用的节点数。我不得不说,我在MPI方面相对较新,但似乎实现这一点的理想方式是使用MPI_Bcast 对于一些不太大的矩阵,一切都很好。然而,当矩阵大小增加时,应用程序会在某个时刻挂起并永远停留在那个里 我不完全确定,但我的代码中似

我运行的应用程序在7节点集群上执行一些大型矩阵的转换。节点通过QDR 40 Gbit Infiniband连接。系统上安装了Open MPI 1.4.3

给定的矩阵变换要求节点之间进行大量数据交换,在每个算法步骤中,有一个节点发送数据,所有其他节点接收数据。进程数等于使用的节点数。我不得不说,我在MPI方面相对较新,但似乎实现这一点的理想方式是使用MPI_Bcast

对于一些不太大的矩阵,一切都很好。然而,当矩阵大小增加时,应用程序会在某个时刻挂起并永远停留在那个里

我不完全确定,但我的代码中似乎没有错误。我详细地跟踪了它,以检查在特定的MPI_Bcast调用之前是否有一些未完成的集合操作,但一切看起来都很好。此外,对于该特定调用,在所有进程中都正确地设置了root以及消息类型和大小,当然,在所有进程中都会调用MPI_Bcast

我还运行了很多场景(在不同大小的矩阵上运行应用程序,并更改进程数),以确定何时会发生这种情况。可以观察到以下情况:

  • 对于相同大小的矩阵,如果我规定了进程数,应用程序将成功完成
  • 然而,对于给定数量的进程,应用程序将挂起一些稍大的矩阵
  • 对于给定的矩阵大小和程序挂起的进程数,如果我将每个MPI_Bcat调用中的消息大小减小两次(当然结果不正确),就不会挂起
所以,在我看来,问题可能出在MPI使用的一些缓冲区中,也许应该更改一些默认MCA参数,但是,正如我所说的,我在MPI编程方面没有很多经验,我还没有找到解决这个问题的方法。
所以,问题是是否有人有过类似的问题,也许知道是否可以通过设置适当的MCA参数来解决,或者知道任何其他解决方案或解释

像前面提到的@Hristo一样,请从使用较新的OMPI版本开始 当前的稳定版本是1.6.5,因此这是您应该得到的。 机会是——这将使问题消失

如果问题仍然存在,那么最好的解决方法就是在OMPI用户邮件列表上讨论它——那边的人会很快解决它

如果您仍希望使用MCA参数,我建议从以下几点开始:

--mca btl_openib_flags <hex value>
--mca mpi_leave_pinned <0|1>
——mca btl\u openib\u标志
--mca mpi_离开_

Open MPI 1.4.3是一款非常古老的软件。如果你还没有这样做的话,我建议你问一下。顺便问一下,广播了多少数据(以字节为单位)?谢谢您的快速回复。消息大小从50 MB到200 MB。但是,在挂起的特定MPI_Bcast调用之前,我有很多MPI_Bcast调用都是使用相同大小的消息成功完成的。您是否在另一个MPI实现中尝试过相同的代码,例如MVAPICH或Intel MPI?OMPI使用的用于大型消息的默认广播算法不应导致锁定,除非发生了真正的错误。不,我没有尝试过任何其他MPI实现,但我肯定会。再次感谢。考虑到MPI\u Bcast的实现方式,我怀疑这些标志是否会影响OP的情况。