|
|
1
129
目的首先,重要的是要认识到MPICH和开放式MPI是如何不同的,即它们是为满足不同的需求而设计的。MPICH应该是最新MPI标准的高质量参考实现,是满足特殊用途需求的派生实现的基础。开放式MPI的目标是共同的情况,无论是在使用和网络管道。 网络技术支持打开MPI文档及其网络支持 here . MPICH在随每个版本分发的自述文件中列出了这些信息(例如 this 适用于3.2.1)。注意,因为open mpi和mpich都支持 OFI (又称libfabric)网络层,它们支持许多相同的网络。但是,libfabric是一个多方面的API,因此并非每个网络都支持相同的API(例如,MPICH有一个基于OFI的IBM Blue Gene/Q实现,但我不知道在开放MPI中有同等的支持)。然而,基于OFI的MPICH和开放MPI实现都在共享内存、以太网(通过TCP/IP)、Mellanox Infiniband、Intel Omni Path以及其他网络上工作。OpenMPI还支持这些网络和其他本地网络(即中间没有OFI)。 在过去,关于MPICH的一个常见抱怨是它不支持Infiniband,而OpenMPI支持。然而,mvapich和intel mpi(其中包括mpich衍生产品)都支持infiniband,所以如果你愿意将mpich定义为“mpich及其衍生产品”,那么mpich具有非常广泛的网络支持,包括infiniband和专有互连,如cray seastar、gEmini和Aries以及IBM Blue Gene(/L,/P和/Q)。开放MPI也支持Cray-Gemini互连,但Cray不支持其使用。最近,MPICH通过netmod支持Infiniband(现在已弃用),但mvapich2进行了广泛的优化,使其在几乎所有情况下都成为首选实现。 最新MPI标准的功能支持正交轴到硬件/平台的支持覆盖了MPI标准。在这里,MPICH通常是远远领先的。MPICH是MPI标准从MPI-1到MPI-3每个版本的第一个实现。开放式MPI最近才支持MPI-3,我发现有些MPI-3功能在某些平台上有缺陷(当然,MPICH不是无缺陷的,但MPI-3功能中的缺陷却不常见)。
历史上,开放式MPI对
另一个在开放MPI1.x中被破坏的特性是单向通信,也就是RMA。最近已经解决了这个问题,作为这些功能的一个非常重要的用户,我发现它们在OpenMPI3.x中通常工作得很好(参见 ARMCI-MPI test matrix in Travis CI 结果显示,至少在共享内存中,两个实现都可以使用RMA。我在IntelOmniPath上看到了类似的积极结果,但还没有测试MellanoxInfiniband。 过程管理过去开放式MPI的一个显著优势是流程管理器。旧的MPICH发布(MPD)既脆弱又难以使用。幸运的是,它已被弃用多年(参见 MPICH FAQ entry 详细信息)。因此,对MPIC的批评是虚假的。 Hydra Process Manager非常好,具有与Orte(在开放MPI中)相似的可用性和功能集,例如,两者都支持HwLoc控制流程拓扑。有报道称,开放式MPI流程的启动速度比MPICH衍生产品要快(超过1000个流程),但由于我在这里没有第一手经验,所以我不愿意陈述任何结论。这种性能问题通常是特定于网络的,有时甚至是特定于机器的。 我发现,在使用带有VPN的MacOS时,开放式MPI更加健壮,也就是说,由于主机名解析问题,MPICH可能在启动时挂起。因为这是一个bug,所以这个问题将来可能会消失。 二进制可移植性虽然mpich和open mpi都是可以在多种平台上编译的开源软件,但二进制形式的mpi库或与之相连的程序的可移植性通常很重要。
MPICH及其许多衍生产品支持ABI兼容性(
website
,这意味着到库的二进制接口是常量,因此可以使用
ABI不是唯一的二进制兼容性类型。上面描述的场景假设用户使用相同版本的MPI启动程序(通常
尽管开放式MPI不能保证ABI的兼容性,但它们在支持容器方面投入了大量资金。( docs , slides )这需要非常小心地维护不同版本的MPI启动程序、启动程序守护程序和MPI库之间的兼容性,因为用户可以使用比容器支持中的启动程序守护程序更新版本的MPI启动程序来启动作业。如果不注意启动器接口的稳定性,容器作业将不会启动,除非启动器的每个组件的版本都兼容。这不是一个无法克服的问题:
我感谢开放MPI团队的拉尔夫·卡斯坦向我解释了容器问题。前一句话是他的。 平台特定比较以下是我对每个平台的评估:
笔记完全公开,我目前为英特尔工作的研究/寻路能力(即,我不在任何英特尔软件产品上工作)和以前为阿贡国家实验室工作了五年,在那里我与MPICH团队广泛合作。 |
|
|
2
11
如果您进行开发而不是生产系统,请使用MPICH。MPICH有内置的调试器,而我上次检查时打开的MPI不是。 在生产中,打开MPI最有可能更快。但是,您可能需要研究其他替代方案,如英特尔MPI。 |
|
|
3
10
我同意前面的海报。尝试两种方法,看看哪个应用程序运行得更快,然后将其用于生产。它们都符合标准。如果是你的桌面,也可以。OpenMPI在MacBooks上是现成的,MPICH似乎对Linux/Valgrind更友好。它在你和你的工具链之间。 如果它是一个生产集群,那么您需要进行更广泛的基准测试,以确保它与您的网络拓扑结构相优化。在生产集群上配置它将是您的时间方面的主要差异,因为您必须使用RTFM。 |
|
|
4
6
两者都是标准兼容的,所以从正确的角度来看,使用哪一个并不重要。除非您需要某些功能,例如特定的调试扩展,否则请对两者进行基准测试,并为硬件上的应用选择速度更快的功能。另外,考虑到还有其他MPI实现可能提供更好的性能或兼容性,例如MVAPIC(可以具有最好的InfiniBand性能)或IntelMPI(广泛支持的ISV)。惠普也在努力让他们的MPI通过许多ISV代码的认证,但我不确定在平台上销售后会怎么样… |
|
|
5
1
根据我的经验,OpenMPI支持但MPICH不支持的一个好功能是
进程相关性
. 例如,在OpenMPI中,使用
最后,如果您需要控制列组到核心的映射,我绝对建议您使用OpenMPI编写和编译代码。 |