我必须在集群中实现MPI系统。如果这里的任何人有MPI(MPICH / OpenMPI)的任何经验,我想知道哪个更好,以及如何在x86_64盒的集群上提升性能。

有帮助吗?

解决方案

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

OpenMPI更新。虽然它不那么便携,但它确实支持最常见的平台。大多数人似乎认为它在几个方面要好得多,特别是对于容错 - 但要利用这一点,你可能必须使用一些不属于MPI标准的特殊功能。

至于性能,它在很大程度上取决于应用;提供一般性建议很难。您应该发布一个特定的问题,关于您要运行的计算类型,节点数量和硬件类型 - 包括您正在使用的网络硬件类型。

其他提示

我已经为Windows和Linux集群编写了很多并行应用程序,我可以告诉你,MPICH2可能是更安全的选择。正如其他响应者所提到的那样,它是一个非常成熟的图书馆。此外,还有充足的广播支持(通过 MPI_Bcast )现在,事实上,MPICH2有很多非常好的功能,如散射和 - 收集

OpenMPI正在获得一些进展。 Penguin计算(他们是一个大型集群供应商,他们喜欢Linux)实际上有一些非常强大的基准,OpenMPI在某些情况下击败了MPICH2。

关于你关于“提升绩效”的评论,我能给出的最好的建议是,如果你受到I / O限制,绝不会发送超过绝对必要的数据,如果你是的话,永远不要做更多必要的工作CPU绑定。我已经陷入了不止一次优化错误代码的陷阱:)希望你不要跟随我的脚步!

查看MPI论坛 - 他们有很多很好的有关MPI例程的信息,以及 Beowulf 网站回答了很多有趣的问题。

'更好'很难定义......'更快'可以通过与您的代码和硬件进行基准测试来解决。像集体和集体这样的事情卸载优化将取决于您的确切硬件,并且在驱动程序堆栈版本方面也很不稳定,谷歌应该能够找到您的工作组合。

就优化工作而言,这在某种程度上取决于代码,有些依赖于硬件。

您的代码I / O是否绑定到存储?在这种情况下调查比NFS更好的东西可能会有很大帮助,或使用MPI I / O而不是天真的并行I / O

如果您是网络绑定的,那么查看通信位置,以及通信/计算重叠可以提供帮助。大多数MPI实现具有使用本地共享内存而不是网络用于内部代码通信的调整选项,对于某些代码可以显着减少网络负载。

I / O和MPI流量的隔离会对某些群集产生很大影响,尤其是对于千兆以太网群集。

我们使用mpich只是因为它看起来最有效且记录最好,我们没有投入大量精力来测试替代方案。 MPICH具有在Windows上部署的合理工具 我们遇到的主要性能问题是我们需要将相同的基础数据发送到所有节点,而MPICH不支持(或不支持)广播 - 因此部署初始数据是O(n)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top