Parallel processing 什么是最好的MPI实现

Parallel processing 什么是最好的MPI实现,parallel-processing,mpi,Parallel Processing,Mpi,我必须在集群中实现MPI系统。如果在座的任何人都有使用MPI(MPICH/OpenMPI)的经验,我想知道哪一种更好,以及如何在x86_64机箱集群上提高性能。MPICH的使用时间更长。它的便携性非常好,你可以在网上找到多年的技巧和窍门。这是一个安全的赌注,它可能与更多的MPI程序兼容 OpenMPI较新。虽然它的可移植性不强,但它确实很好地支持最常见的平台。大多数人似乎认为它在几个方面都要好得多,特别是在容错方面——但要利用这一点,您可能必须使用它的一些特殊功能,这些功能不是MPI标准的一部分

我必须在集群中实现MPI系统。如果在座的任何人都有使用MPI(MPICH/OpenMPI)的经验,我想知道哪一种更好,以及如何在x86_64机箱集群上提高性能。

MPICH的使用时间更长。它的便携性非常好,你可以在网上找到多年的技巧和窍门。这是一个安全的赌注,它可能与更多的MPI程序兼容

OpenMPI较新。虽然它的可移植性不强,但它确实很好地支持最常见的平台。大多数人似乎认为它在几个方面都要好得多,特别是在容错方面——但要利用这一点,您可能必须使用它的一些特殊功能,这些功能不是MPI标准的一部分


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

我们使用mpich只是因为它看起来最可用、文档记录最完整,我们没有花很多精力测试替代方案。MPICH具有在windows上部署的合理工具。

我们遇到的主要性能问题是,我们需要向所有节点发送相同的基础数据,而MPICH不(或不)支持广播-因此部署初始数据是O(n)

我已经为Windows和Linux集群编写了许多并行应用程序,我可以告诉您,现在MPICH2可能是更安全的选择。正如另一位回复者提到的,它是一个非常成熟的库。此外,现在有足够的广播支持(via),事实上,MPICH2有很多非常好的特性,如

不过OpenMPI正在取得一些进展。企鹅计算(Penguin computing)(他们是一家大型集群供应商,他们喜欢Linux)实际上有一些非常强大的基准测试,在某些情况下OpenMPI可以轻而易举地击败MPICH2

关于您关于“提高性能”的评论,我能给出的最好建议是,如果您受到I/O限制,则永远不要发送超过绝对必要的数据,如果您受到CPU限制,则永远不要做超过必要的工作。我不止一次地陷入了优化错误代码的陷阱:)希望你不会步我的后尘


查看MPI论坛-它们有很多好的方面,网站上回答了很多有趣的问题。

很难定义“更好…”“更快”可以通过使用代码和硬件对其进行基准测试来解决。像集合和卸载优化这样的事情将取决于您的确切硬件,而且对于驱动程序堆栈版本也相当多变,谷歌应该能够找到您的工作组合

就优化工作而言,这在一定程度上取决于代码,也在一定程度上取决于硬件

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

如果您受网络限制,那么查看通信位置和通信/计算重叠会有所帮助。大多数不同的MPI实现都有使用本地共享内存而不是网络进行内部节点通信的调优选项,这对于某些代码可以显著降低网络负载


I/O和MPI流量的分离在某些集群上会产生很大的差异,特别是对于千兆以太网集群

MPICH(1993年开发),至少从1994年左右开始支持广播。MPICH2(作为MPICH的继承者于2000年开发)在开发过程的早期就支持广播。也许你指的是MPI\u Bcast之外的东西?我认为这两种实现的股票版本目前都不支持“可执行暂存”,将要执行的程序通过
mpiexec
移动到节点。我忘记了为什么我们不能bcast-可能是通过TCP或数据大小运行的?这两个都不是反对MPICH中存在MPI\u bcast支持的有效论据。MPICH2的容错支持最近得到了实质性的改进。如果您对使用此支持感兴趣,可以通过邮寄MPICH2列表(mpich)了解更多信息-discuss@lists.mcs.anl.gov)。如何确定给定服务器使用的MPI版本?我正在运行python绑定mpi4py,但需要知道底层MPI版本是什么?@218 MPI_Get_version或MPI_Get_library_version,但这不会返回标准化输出,因此您必须对其进行分析。