什么是最好的 MPI 实现 [关闭]
Posted
技术标签:
【中文标题】什么是最好的 MPI 实现 [关闭]【英文标题】:What is the best MPI implementation [closed] 【发布时间】:2010-09-13 17:53:04 【问题描述】:我必须在集群中实现 MPI 系统。如果这里有人对 MPI (MPICH/OpenMPI) 有任何经验,我想知道哪个更好,以及如何在 x86_64 机器集群上提高性能。
【问题讨论】:
【参考方案1】:MPICH 已经存在了很长时间。它非常便携,您会在网上找到数年的提示和技巧。这是一个安全的选择,它可能与更多的 MPI 程序兼容。
OpenMPI 较新。虽然它不是那么便携,但它确实很好地支持了最常见的平台。大多数人似乎认为它在某些方面要好得多,尤其是在容错方面 - 但要利用这一点,您可能必须使用它的一些不属于 MPI 标准的特殊功能。
至于性能,很大程度上取决于应用程序;很难给出一般性的建议。您应该针对要运行的计算类型、节点数量和硬件类型(包括您使用的网络硬件类型)提出具体问题。
【讨论】:
MPICH2 的容错支持最近得到了显着改进。如果您有兴趣使用此支持,可以通过邮寄 MPICH2 列表 (mpich-discuss@lists.mcs.anl.gov) 了解更多信息。 如何找出给定服务器正在使用的 MPI 版本?我正在运行 python 绑定 mpi4py,但需要知道底层 MPI 版本是什么? @218 MPI_Get_version MPI Version number 或 MPI_Get_library_version,但这不会返回标准化输出,因此您必须对其进行解析。【参考方案2】:我已经为 Windows 和 Linux 集群编写了很多并行应用程序,我可以建议您,现在 MPICH2 可能是更安全的选择。正如其他响应者所提到的,它是一个非常成熟的库。此外,现在有充足的广播支持(通过MPI_Bcast),事实上,MPICH2 有很多非常好的功能,比如scatter-and-gather。
OpenMPI 正在取得一些进展。 Penguin 计算(他们是大型集群供应商,他们喜欢 Linux)实际上有一些非常强大的基准,在某些情况下 OpenMPI 击败了 MPICH2。
关于您对“提高性能”的评论,我能给出的最佳建议是,如果您受 I/O 限制,则永远不要发送超过绝对必要的数据,如果您是 CPU,永远不要做超过必要的工作边界。我多次陷入优化错误代码的陷阱 :) 希望你不会步我的后尘!
查看 MPI 论坛 - 他们有很多很好的 info about MPI routines,Beowulf 网站回答了很多有趣的问题。
【讨论】:
【参考方案3】:“更好”很难定义...“更快”可以通过使用您的代码和硬件对其进行基准测试来回答。诸如集体和卸载优化之类的事情将取决于您的确切硬件,并且在驱动程序堆栈版本方面也存在很大差异,谷歌应该能够找到您的工作组合。
就优化工作而言,这在一定程度上取决于代码,在某种程度上取决于硬件。
您的代码 I/O 是否绑定到存储?在这种情况下,调查比 NFS 更好的东西可能会有很大帮助,或者使用 MPI I/O 而不是幼稚的并行 I/O
如果您受网络限制,那么查看通信位置和通信/计算重叠会有所帮助。大多数各种 MPI 实现都具有使用本地共享内存而不是网络进行节点内通信的调整选项,这对于某些代码可以显着减少网络负载。
I/O 和 MPI 流量的隔离对某些集群有很大影响,尤其是千兆以太网集群。
【讨论】:
【参考方案4】:我们使用 mpich 只是因为它似乎最可用且记录最完整,我们没有花很多精力来测试替代方案。 MPICH 有合理的工具在 windows 上部署。 我们遇到的主要性能问题是我们需要向所有节点发送相同的基础数据,而 MPICH 不(或不)支持广播 - 所以部署初始数据是 O(n)
【讨论】:
MPICH(1993 年左右开发),至少从 1994 年左右开始支持广播。MPICH2(2000 年左右作为 MPICH 的继任者开发)在开发过程的早期就支持广播。也许你的意思是MPI_Bcast
以外的东西?我不相信任何一个实现的股票版本目前都支持“可执行暂存”,其中要执行的程序由mpiexec
移动到节点。
我忘记了为什么我们不能广播 - 可能是通过 TCP 或数据大小运行?
这些都不是反对 MPICH 中存在 MPI_Bcast 支持的有效论据。以上是关于什么是最好的 MPI 实现 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
`MPI_ERR_TRUNCATE:消息被截断`错误[关闭]
让 Pycuda 在 2 gpus 上使用 Mpi4py [关闭]