MPICH与OpenMPI

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

首先,认识到MPICH和OpenMPI是如何不同的,也就是说它们是为满足不同的需求而devise的。 MPICH被认为是最新MPI标准的高质量参考实现,并且是派生实现满足特殊需求的基础。 OpenMPI针对常见的情况,无论是在使用和networkingpipe道方面。

支持networking技术

关于MPICH的一个常见抱怨是它不支持InfiniBand,而OpenMPI却支持。 但是,MVAPICH和Intel MPI(都是MPICH衍生产品)都支持InfiniBand,所以如果愿意将MPICH定义为“MPICH及其衍生产品”,则MPICH具有非常广泛的networking支持,包括InfiniBand和专有像Cray Seastar,双子座和白羊座以及IBM Blue Gene(/ L,/ P和/ Q)的互连。 OpenMPI也支持Cray Gemini,但Cray并不支持它。 最近,MPICH通过netmod支持InfiniBand,但是MVAPICH2具有广泛的优化,几乎在所有情况下都是首选实现。

来自最新MPI标准的function支持

硬件/平台支持的正交轴是MPI标准的覆盖范围。 MPICH在这里遥遥领先。 MPICH是从MPI-1到MPI-3的MPI标准的每一个版本的首次实现。 OpenMPI最近才支持MPI-3,我发现某些平台上的一些MPI-3function是有问题的。 而且,OpenMPI仍然不支持MPI_THREAD_MULTIPLE,这对于某些应用程序是至关重要的。 它可能在某些平台上得到支持,但通常不能被假定为可行。 另一方面,MPICH多年来一直支持MPI_THREAD_MULTIPLE。

stream程pipe理

OpenMPI曾经是一个非常优秀的领域是stream程pipe理器。 旧的MPICH发射(MPD)很脆,很难使用。 幸运的是,它已被弃用了很多年(详见MPICH FAQ条目 )。 因此,批评MPICH是因为MPD是虚假的。 Hydra进程pipe理器非常好,与ORTE(在OpenMPI中)具有相同的可用性和function集。

平台特定的比较

以下是我在平台上的评估:

  • Mac OS:OpenMPI和MPICH都可以正常工作。 如果你想要一个支持所有MPI-3或MPI_THREAD_MULTIPLE的版本,你可能需要MPICH。 如果您在Mac笔记本电脑上运行,则绝对没有理由考虑MPI性能。
  • 有共享内存的Linux:OpenMPI和MPICH都可以正常工作。 如果你想要一个支持所有MPI-3或MPI_THREAD_MULTIPLE的版本,你可能需要MPICH。 我不知道这两个实现之间有什么显着的性能差异。 如果操作系统允许,它们都支持单拷贝优化。
  • 使用Mellanox InfiniBand的Linux:使用OpenMPI或MVAPICH2。 如果你想要一个支持所有MPI-3或MPI_THREAD_MULTIPLE的版本,你需要MVAPICH2。 我发现MVAPICH2performance非常好,但在InfiniBand上并没有直接与OpenMPI进行比较,部分原因是我每次尝试OpenMPI时性能最重要的特性(RMA又称单向)使用它们。
  • 带有Intel / Qlogic True Scale InfiniBand的Linux:在这种情况下,我没有OpenMPI的经验,但基于MPICH的Intel MPI是此networking支持的产品,MVAPICH2和Open-MPI也使用PSM支持它。
  • Linux与英特尔Omnipath:我已经在这样的系统上使用MVAPICH2,英特尔MPI,MPICH和Open-MPI,并且都在工作。 英特尔MPI往往是最优化的,而Open-MPI提供了开放源代码实现的最佳性能,因为它们有一个非常优化的基于PSM2的后端。 我在GitHub上有关于如何构build不同的开源实现的一些说明 ,但是这样的信息过时了。
  • Cray或IBM超级计算机:MPI自动安装在这些机器上,并且基于MPICH。 在Cray XC40( 这里 )使用OFI ,在Cray XC40上的Intel MPI( 在这里 )使用OFI,MPICH在Blue Gene / Q上使用OFI( 这里 ),以及在Cray XC40上使用OFI和uGNI的Open-MPI ( 这里 ),但没有一个是供应商支持的。
  • Windows:除了通过Linux VM之外,我发现在Windows上运行MPI是毫无意义的,但是Microsoft MPI和Intel MPI都支持Windows并且都是基于MPICH的。 我还没有看到使用Windows子系统for Linux成功构buildMPICH或Open-MPI的报告。

笔记

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

我同意以前的海报。 试着看看哪个应用程序运行得更快,然后用它来进行生产。 他们都符合标准。 如果这是你的桌面或者是罚款。 OpenMPI是在Macbook上出来的,而MPICH似乎更友好,Linux / Valgrind。 它介于你和你的工具链之间。

如果是生产集群,则需要进行更广泛的基准testing,以确保其优化到您的networking拓扑。 在生产群集上进行configuration将是您在时间上的主要区别,因为您将不得不使用RTFM。

如果你是开发而不是生产系统,那就去MPICH吧。 MPICH具有内置的debugging器,而Open-MPI不会持续检查时间。

在生产中,Open-MPI很可能会更快。 但是,你可能想研究其他的select,如英特尔MPI。

两者都是符合标准的,所以从正确性的angular度来看,你应该使用哪一个。 除非有某些function(如特定的debugging扩展)需要,否则请同时对两者进行基准testing,然后在硬件上select适用于您的应用程序的更快的function。 还要考虑其他MPI实现可能会提供更好的性能或兼容性,例如MVAPICH(可以具有最佳的InfiniBand性能)或Intel MPI(广泛支持的ISV)。 惠普努力获得了许多ISV代码的MPI资格,但是我不确定在被卖到平台后它是如何发展的。