gpt4 book ai didi

MPICH 与 OpenMPI

转载 作者:行者123 更新时间:2023-12-03 04:37:22 64 4
gpt4 key购买 nike

有人可以详细说明 MPI 的 OpenMPI 和 MPICH 实现之间的区别吗?
两者中哪一个是更好的实现?

最佳答案

目的

首先,重要的是要认识到 MPICH 和 Open-MPI 的不同之处,即它们旨在满足不同的需求。 MPICH 应该是最新 MPI 标准的高质量引用实现,也是衍生实现以满足特殊用途需求的基础。 Open-MPI 在使用和网络管道方面针对常见情况。

网络技术支持

Open-MPI 记录了他们的网络支持 here . MPICH 在随每个版本分发的 README 中列出了此信息(例如 this 适用于 3.2.1)。请注意,因为 Open-MPI 和 MPICH 都支持 OFI (又名 libfabric)网络层,它们支持许多相同的网络。然而,libfabric 是一个多方面的 API,所以并不是每个网络都可以在两者中得到相同的支持(例如 MPICH 有一个基于 OFI 的 IBM Blue Gene/Q 实现,但我不知道 Open-MPI 中的等效支持) .然而,MPICH 和 Open-MPI 的基于 OFI 的实现正在共享内存、以太网(通过 TCP/IP)、Mellanox InfiniBand、英特尔 Omni Path 和可能的其他网络上工作。 Open-MPI 还支持这些网络和其他网络(即中间没有 OFI)。

过去,人们普遍提示 MPICH 不支持 InfiniBand,而 Open-MPI 支持。然而,MVAPICH 和 Intel MPI(以及其他)——它们都是 MPICH 的衍生产品——支持 InfiniBand,所以如果人们愿意将 MPICH 定义为“MPICH 及其衍生产品”,那么 MPICH 拥有极其广泛的网络支持,包括 InfiniBand 和专有的Cray Seastar、Gemini 和 Aries 以及 IBM Blue Gene(/L、/P 和/Q)等互连。 Open-MPI 也支持 Cray Gemini 互连,但 Cray 不支持其使用。最近,MPICH 通过 netmod(现已弃用)支持 InfiniBand,但 MVAPICH2 具有广泛的优化,使其成为几乎所有情况下的首选实现。

来自最新 MPI 标准的功能支持

硬件/平台支持的正交轴是 MPI 标准的覆盖范围。在这里,MPICH 通常远远优越。 MPICH 是 MPI 标准每个版本的第一个实现,从 MPI-1 到 MPI-3。 Open-MPI 最近才支持 MPI-3,我发现某些 MPI-3 功能在某些平台上有问题(当然,MPICH 并非没有错误,但 MPI-3 功能中的错误远不那么常见)。

从历史上看,Open-MPI 没有对 MPI_THREAD_MULTIPLE 的整体支持。 ,这对某些应用程序至关重要。它可能在某些平台上受支持,但通常不能假设它可以工作。另一方面,MPICH 对 MPI_THREAD_MULTIPLE 有全面的支持。多年来,尽管实现并不总是高性能的(参见 "Locking Aspects in Multithreaded MPI Implementations" 进行一项分析)。

Open-MPI 1.x 中被破坏的另一个功能是单边通信,也就是 RMA。这最近已得到修复,我发现,作为这些功能的重度用户,它们通常在 Open-MPI 3.x 中运行良好(参见 ARMCI-MPI test matrix in Travis CI 的结果,显示 RMA 与两种实现一起工作,至少在共享内存中。我在 Intel Omni Path 上看到了类似的积极结果,但尚未测试 Mellanox InfiniBand。

流程管理

Open-MPI 曾经显着优越的一个领域是流程管理器。旧的 MPICH 发射 (MPD) 脆弱且难以使用。幸运的是,它已被弃用多年(详见 MPICH FAQ entry)。因此,由于 MPD 而对 MPICH 的批评是虚假的。

Hydra 流程管理器非常好,具有与 ORTE(在 Open-MPI 中)相似的可用性和功能集,例如两者都支持 HWLOC 以控制过程拓扑。有报道称,对于大型作业(1000 多个进程)而言,Open-MPI 进程的启动速度比 MPICH 衍生程序更快,但由于我在这里没有第一手经验,因此我不便说出任何结论。此类性能问题通常是特定于网络的,有时甚至是特定于机器的。

我发现 Open-MPI 在将 MacOS 与 VPN 一起使用时更加健壮,即 MPICH 可能由于主机名解析问题而在启动时挂起。由于这是一个错误,此问题将来可能会消失。

二进制可移植性

虽然 MPICH 和 Open-MPI 都是可以在各种平台上编译的开源软件,但二进制形式的 MPI 库或链接到它们的程序的可移植性通常很重要。

MPICH 及其许多衍生产品支持 ABI 兼容性( website ),这意味着库的二进制接口(interface)是恒定的,因此可以使用 mpi.h 进行编译。从一个实现开始,然后与另一个实现一起运行。即使跨多个版本的库也是如此。例如,我经常编译 Intel MPI 但 LD_PRELOAD运行时 MPICH 的开发版本。 ABI 兼容性的一大优势是 ISV(独立软件供应商)可以发布仅针对 MPICH 系列成员编译的二进制文件。

ABI 不是唯一的二进制兼容性类型。上述场景假设用户使用相同版本的 MPI 启动器(通常是 mpirunmpiexec ,以及它的计算节点守护进程)和 MPI 库无处不在。容器不一定是这种情况。

虽然 Open-MPI 不 promise ABI 兼容性,但他们在支持容器( docsslides )方面投入了大量资金。这需要非常小心地维护不同版本的 MPI 启动程序、启动程序守护程序和 MPI 库之间的兼容性,因为用户可以使用比容器支持中的启动程序守护程序更新的 MPI 启动程序版本来启 Action 业。如果不注意启动器界面的稳定性,除非启动器的每个组件的版本兼容,否则容器作业将不会启动。这不是一个不可逾越的问题:

The workaround used by the Docker world, for example, is to containerize the infrastructure along with the application. In other words, you include the MPI daemon in the container with the application itself, and then require that all containers (mpiexec included) be of the same version. This avoids the issue as you no longer have cross-version infrastructure operations.



我感谢 Open-MPI 团队的 Ralph Casttain 向我解释了容器问题。前面的引用是他的。

特定于平台的比较

这是我逐个平台的评估:
  • Mac OS:Open-MPI 和 MPICH 都应该可以正常工作。要获得 MPI-3 标准的最新功能,您需要使用最新版本的 Open-MPI,可从 Homebrew 获得。如果您在 Mac 笔记本电脑上运行,则没有理由考虑 MPI 性能。
  • 具有共享内存的 Linux:Open-MPI 和 MPICH 都应该可以正常工作。如果你想要一个支持所有 MPI-3 或 MPI_THREAD_MULTIPLE 的发布版本,你可能需要 MPICH,除非你自己构建 Open-MPI,因为例如Ubuntu 16.04 仅通过 APT 提供了古老的 1.10 版本。我不知道这两种实现之间有任何显着的性能差异。如果操作系统允许,两者都支持单副本优化。
  • 带有 Mellanox InfiniBand 的 Linux:使用 Open-MPI 或 MVAPICH2。如果您想要一个支持所有 MPI-3 或 MPI_THREAD_MULTIPLE 的发布版本,不过您可能需要 MVAPICH2。我发现 MVAPICH2 性能非常好,但没有在 InfiniBand 上与 OpenMPI 进行直接比较,部分原因是性能对我来说最重要的功能(RMA 又名片面)过去在 Open-MPI 中已被破坏。
  • 带有 Intel Omni Path(或其前身 True Scale)的 Linux:我在此类系统上使用了 MVAPICH2、Intel MPI、MPICH 和 Open-MPI,并且所有这些都可以正常工作。英特尔 MPI 往往是最优化的,而 Open-MPI 提供了开源实现的最佳性能,因为它们具有优化良好的 PSM2 - 基于后端。我有一些 notes on GitHub关于如何构建不同的开源实现,但这些信息很快就会过时。
  • Cray 或 IBM super 计算机:MPI 自动安装在这些机器上,并且在这两种情况下都基于 MPICH。已经使用 here 在 Cray XC40 ( OFI ) 上演示了 MPICH ,使用 OFI 在 Cray XC40 上的英特尔 MPI (here),使用 OFI 在 Blue Gene/Q 上的 MPICH (here),以及使用 OFI 和 uGNI 在 Cray XC40 上的 Open-MPI (here),但这些都没有供应商支持。
  • Windows:我认为除了通过 Linux VM 在 Windows 上运行 MPI 没有任何意义,但 Microsoft MPI 和 Intel MPI 都支持 Windows 并且基于 MPICH。我听说过使用 Windows Subsystem for Linux 成功构建 MPICH 或 Open-MPI 的报告。但没有亲身经历。

  • 笔记

    完全公开地说,我目前在英特尔工作,从事研究/探路工作(即我不从事任何英特尔软件产品的工作),之前在阿贡国家实验室工作了五年,在那里我与 MPICH 团队进行了广泛的合作。

    关于MPICH 与 OpenMPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2427399/

    64 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com