我正在运行在7节点集群上执行大型矩阵转换的应用程序。节点通过QDR 40 Gbit Infiniband连接。系统上安装了Open MPI 1.4.3。
给定矩阵变换需要在节点之间进行大量数据交换,使得在每个算法步骤中有一个节点发送数据而其他所有节点都接收。进程数等于使用的节点数。我不得不说我在MPI上相对较新,但似乎执行此操作的理想方式是使用MPI_Bcast。
对于一些不那么大的矩阵,一切都运行良好。但是,当矩阵大小增加时,应用程序会在某些时候挂起并永远停留在那里。
我不完全确定,但似乎我的代码中没有错误。我详细跟踪它,以便在MPI_Bcast的特定调用之前检查是否存在一些未完成的集合操作,但一切看起来都很好。此外,对于该特定调用,root在所有进程中正确设置,以及消息类型和大小,当然,在所有进程中都会调用MPI_Bcast。
我还运行了很多场景(在不同大小的矩阵上运行应用程序并更改进程数),以便弄清楚何时发生这种情况。可以观察到的是:
所以,在我看来,问题可能在MPI使用的某些缓冲区中,也许应该更改一些默认的MCA参数,但是,正如我所说,我在MPI编程方面没有很多经验,而且我没有找到解决这个问题的方法。 所以,问题是是否有人遇到过类似的问题,并且可能知道这是否可以通过设置适当的MCA参数来解决,或者是否知道任何其他解决方案或解释?
答案 0 :(得分:0)
就像@Hristo已经提到过的那样,请先使用Open MPI web site中较新的OMPI版本 目前的稳定版本是1.6.5,所以这是你应该得到的。 机会是 - 这将使问题消失。
如果问题仍然存在,那么处理它的最佳方法是在OMPI用户邮件列表上讨论它 - 那里的人会很快处理它。
如果您仍想使用MCA参数,我建议从以下开始:
--mca btl_openib_flags <hex value>
--mca mpi_leave_pinned <0|1>