【问题标题】:MPI_Bcast hanging after some data transferred传输一些数据后 MPI_Bcast 挂起
【发布时间】:2013-07-25 23:01:44
【问题描述】:

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

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

对于一些不太大的矩阵,一切正常。但是,当矩阵大小增加时,有时应用程序会挂起并永远停留在那里。

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

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

  • 对于相同大小的矩阵,如果我指定进程数,应用程序将成功完成
  • 但是,对于给定数量的进程,应用程序会因一些稍大的矩阵而挂起
  • 对于给定的矩阵大小和程序挂起的进程数,如果我将每个 MPI_Bcat 调用中的消息大小减小两次(当然结果不会正确),就不会挂起

所以,在我看来,问题可能出在 MPI 使用的某些缓冲区中,也许应该更改一些默认的 MCA 参数,但是,正如我所说,我在 MPI 编程方面没有很多经验,而且我还没有找到解决这个问题的方法。 所以,问题是是否有人遇到过类似的问题,也许知道这是否可以通过设置适当的 MCA 参数来解决,或者知道任何其他解决方案或解释?

【问题讨论】:

  • Open MPI 1.4.3 是一款非常古老的软件。如果您还没有这样做,我建议您在Open MPI users mailing list 上询问。顺便问一下,广播了多少数据(以字节为单位)?
  • Hristo,感谢您的快速回复。消息大小从 50 到 200 MB。但是,在 MPI_Bcast 的特定调用挂起之前,我有很多 MPI_Bcast 调用,其中包含成功完成的相同大小的消息。
  • 您是否尝试过使用另一个 MPI 实现的相同代码,例如MVAPICH 还是英特尔 MPI? OMPI 使用的大型消息的默认广播算法不应导致锁定,除非发生真正的错误。
  • 不,我没有尝试任何其他 MPI 实现,但我肯定会。再次感谢。

标签: mpi openmpi infiniband


【解决方案1】:

就像@Hristo 已经提到的,请从使用Open MPI web site 中的更新的OMPI 版本开始 当前的稳定版本是 1.6.5,所以这是你应该得到的。 很有可能 - 这会让问题消失。

如果问题仍然存在,那么处理它的最佳方法是在 OMPI 用户邮件列表中进行讨论 - 那里的人会很快处理它。

如果你还想玩 MCA 参数,我建议从这些开始:

--mca btl_openib_flags <hex value>
--mca mpi_leave_pinned <0|1>

【讨论】:

  • 鉴于 MPI_Bcast 的实现方式,我怀疑这些标志中的任何一个都会影响 OP 的情况。
猜你喜欢
  • 1970-01-01
  • 2021-04-18
  • 2019-12-30
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多