- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以详细说明 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 启动器(通常是 mpirun
或 mpiexec
,以及它的计算节点守护进程)和 MPI 库无处不在。容器不一定是这种情况。
虽然 Open-MPI 不 promise ABI 兼容性,但他们在支持容器( docs 、 slides )方面投入了大量资金。这需要非常小心地维护不同版本的 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.
MPI_THREAD_MULTIPLE
的发布版本,不过您可能需要 MVAPICH2。我发现 MVAPICH2 性能非常好,但没有在 InfiniBand 上与 OpenMPI 进行直接比较,部分原因是性能对我来说最重要的功能(RMA 又名片面)过去在 Open-MPI 中已被破坏。 关于MPICH 与 OpenMPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2427399/
我有一个应用程序的源代码,该应用程序是 2005 年用 C++ 为 32 位架构编写的,并使用了 MPICH-1 库。我知道逻辑,我想升级 64 位机器和 MPICH-2 的源代码。 MPICH-1
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
有人可以详细说明 MPI 的 OpenMPI 和 MPICH 实现之间的区别吗? 两者中哪一个是更好的实现? 最佳答案 目的 首先,重要的是要认识到 MPICH 和 Open-MPI 的不同之处,即它
我试图仅使用进程 0 写入文件,但该文件甚至没有在目录中创建,如果我在没有 mpich 的情况下运行它,它运行良好(并且该文件是在项目目录中创建的,因为它应该是),但当我使用 mpich 运行时则不然
我有一个简单的 MPICH 程序,其中进程以 Ring 顺序相互发送和接收消息。 我已经设置了 2 个相同的虚拟机,并确保网络工作正常。我已经在两台机器上测试了一个简单的 MPICH 程序,它运行良好
我试图运行以下 MPI 代码,但遇到了如下所示的错误。如果有人能帮助我,我将不胜感激。 #include #include int main(){ int rank, size;
我的 Ubuntu 20.04 中同时安装了 mpich 和 openmpi。 $ dpkg -l | grep mpi | grep lib ... ii libmpich-dev:amd64
/* C Example */ #include #include #include #include int main (int argc, char* argv[]) { int ra
我有适用于 MPICH 3.0.4 版的 mpif90,但我想删除它并安装 mpich2。 dislin库有问题,需要mpich2。 在我的 debian 发行版上 sudo apt-get inst
在 Windows (1.4.1p1) 中使用 MPICH 学习 MPI 时,我发现了一些示例代码 here .最初,当我运行服务器时,我必须复制生成的 port_name 并用它启动客户端。这样,客
我想知道如果 OpenMPI/MPICH2 集群的节点终止会发生什么?是否有一些机制可以容忍这种情况并继续执行? 感谢您的回答 海因里希 最佳答案 请注意,自 MPI 1.x 天以来就存在的功能是您可
刚刚开始学习mpi,所以买了3个vps搭建实验环境。我成功安装并配置了 ssh 和 mpich。这三个节点可以在没有密码的情况下相互 ssh(但不能自己)。并且 cpi 示例在本地机器上没有任何问题地
我的 Linux 机器上有一个可执行文件,我知道它是使用 OpenMPI 或 MPICH 库编译的。 问题:如何确定是哪一个? 最佳答案 以下诊断过程假设 MPICH/MPICH2 和 Open MP
我有以下使用 openmpi 和 mpich-3.2.1 编译和运行的程序,但是在使用 mpich-3.3 调用 MPI_Waitany 时出现死锁。该程序必须以偶数列运行,其中一半通过内部通信器向另
当我通过 TCP/IP 套接字在进程之间发送 MPI 消息时,OpenMPI 和 MPICH 如何处理安全性? 特别是,它们如何防止同一网络的其他用户连接到监听套接字并发送伪造的 MPI 消息? 具体
我是 HPC 新手,手头的任务是在集群上对 MPICH 和 OpenMPI 进行性能分析和比较,该集群由配备双核 AMD Opteron 处理器的 IBM 服务器组成,在 ClusterVisionO
我正在尝试安装MPICH 2 在运行 Ubuntu 11.04 (Natty Narwhal) 的 64 位机器上。我用过 sudo apt-get install mpich2 首先我很惊讶地发现
我正在尝试在 linux 集群中安装 mpich-3.1(在所有机器上运行的 Ubuntu 12.04)。以前我通过 sudo apt-get install mpich2 安装了 mpich2 但找
我为我的家庭作业(并行编程)编写了这个程序,但我在运行时遇到了一些错误。 这是来源: /**************************************** * Program:
对于长期从事该领域的人来说,我的问题可能看起来很愚蠢,但我感谢您耐心地为我详细阐述。 当他们说 MPICH 是 MPI 的“实现”时,这是什么意思? 下面的类比是否正确(?):如果我们将 MPI 视为
我是一名优秀的程序员,十分优秀!