什么是最佳的MPI实现?

25

我需要在一个集群中实现MPI系统。如果这里有任何人有MPI(MPICH/OpenMPI)方面的经验,我想知道哪个更好,并且如何在x86_64盒子的集群上提高性能。

4个回答

21

MPICH已经存在很长时间了。它非常便携,你可以在网上找到多年的技巧和窍门。这是一个保险的选择,可能与更多MPI程序兼容。

OpenMPI比较新。虽然它不太便携,但它支持最常见的平台非常好。大多数人似乎认为在几个方面它要好得多,特别是在容错性方面 - 但要利用这一点,您可能需要使用一些它独有的特殊功能,这些功能不是MPI标准的一部分。

至于性能,这很大程度上取决于应用程序;很难给出一般性的建议。您应该发布一个关于您想运行的计算类型、节点数量和硬件类型 - 包括您正在使用的网络硬件类型的具体问题。


1
MPICH2的容错支持最近得到了大幅改进。如果您有兴趣使用此支持,可以通过发送电子邮件至MPICH2列表(mpich-discuss@lists.mcs.anl.gov)了解更多信息。 - Dave Goodell
如何找出给定服务器正在使用哪个版本的MPI?我正在运行Python绑定mpi4py,但需要知道底层MPI版本是什么? - 218
@218 MPI_Get_version MPI版本号 - Jeff Hammond
或者使用MPI_Get_library_version,但是它不会返回标准化的输出,所以您需要解析它。 - Jeff Hammond

9
我曾经为Windows和Linux集群编写过许多并行应用程序,我可以建议您现在选择MPICH2可能是更安全的选择。正如其他回答者所提到的,它是一个非常成熟的库。此外,现在有充足的广播支持(通过MPI_Bcast),实际上,MPICH2有一些非常好的功能,比如scatter-and-gather
OpenMPI正在获得一些进展。Penguin computing(他们是一个大型集群供应商,喜欢Linux)实际上有一些非常强大的基准测试,在某些情况下,OpenMPI完胜MPICH2。
关于您对“提高性能”的评论,我能给出的最好建议是,如果您受到I/O限制,请永远不要发送比绝对必要更多的数据;如果您受到CPU限制,请永远不要做更多的工作。我曾经陷入优化错误代码的陷阱中超过一次 :) 希望您不会跟随我的脚步!

请查看MPI论坛-它们有很多关于MPI例程的好信息,而Beowulf网站则回答了许多有趣的问题。


3
“更好”的定义很难...“更快”可以通过与您的代码和硬件进行基准测试来回答。诸如集体和卸载优化将取决于您确切的硬件,并且在驱动程序堆栈版本方面也相当不稳定,谷歌应该能够为您找到有效的组合。
就优化工作而言,这在某种程度上取决于代码,另一方面则取决于硬件。
您的代码是否受到存储器I/O的限制?如果是这样,调查比NFS更好的东西可能会有很大帮助,或者使用MPI I/O而不是天真的并行I/O。
如果您受到网络限制,则查看通信地点和通信/计算重叠可以提供帮助。大多数各种MPI实现都有调整选项,可用于使用本地共享内存而不是网络进行节点内通信,对于某些代码,这可以显著减少网络负载。
I/O和MPI流量的分离对某些群集可以产生很大的影响,特别是对千兆以太网群集。

-1
我们使用 mpich,因为它似乎是最常见和文档最好的选择,我们没有花费太多精力测试其他方案。MPICH 在 Windows 上有合理的部署工具。
我们遇到的主要性能问题是需要将相同的基础数据发送到所有节点,而 MPICH 不支持广播(或者以前不支持)- 因此部署初始数据的复杂度是 O(n)。

4
MPICH(开发于约1993年)自从大约1994年就支持广播。MPICH2(作为MPICH的继任者于约2000年开发)在开发过程早期就支持广播。也许您指的不是MPI_Bcast?我认为两个版本的官方实现目前都不支持“可执行文件分阶段”,即通过mpiexec将要执行的程序移动到节点。 - Dave Goodell
我忘记为什么我们不能进行广播 - 可能是因为运行在TCP上或数据的大小? - Martin Beckett
这两个都不是反对在MPICH中存在MPI_Bcast支持的有效论据。 - Jeff Hammond

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接