【问题标题】:Need some clarification on MPI需要对 MPI 进行一些澄清
【发布时间】:2013-08-06 06:10:54
【问题描述】:

我正在研究各种并行编程模型,但偶然发现了 MPI。有几件事我不确定。据我了解:

  1. MPI 的主要功能是允许在集群中并行运行的相关进程之间进行通信。这是正确的吗?
  2. 程序在主节点上运行,主节点又将特定任务传达给工作节点 - 并接收结果。无需在每个工作程序节点上都有一份代码副本。

此外,我发现的少数更新的 MPI 框架似乎只支持有限的语言集。我正在考虑在 Java 中对此进行试验,但我发现的所有 Java MPI 库要么已经过时,要么似乎没有 C 和 Fortran 的成熟度。这是为什么?我认为消息传递对于编写并行或分布式程序的任何人来说都是一个非常有用的功能,那么为什么 MPI 在其利基之外没有更受欢迎呢?

【问题讨论】:

  • MPI 更多地用于科学编程,它在那里有使用的历史,并且科学界选择的语言(很长一段时间)一直是/是 C/Fortran。
  • (1) 正确; (2) 不是。
  • 那么为什么 MPI 在其利基市场之外没有更受欢迎? 可能是因为管理 MPI 及其用户社区的开发人员并不关心它在外部的受欢迎程度它的利基市场,而是他们关心其在其利基市场内的有效性和效率。 MPI 不是唯一的消息传递库,Java 程序员还有其他可用的选项。

标签: java parallel-processing mpi


【解决方案1】:

MPI 传统上是一种 SPMD 模型,其中一个代码在许多进程上运行(通常分布在多个节点/处理器/内核/等上)。这些进程使用 MPI(消息传递接口)中的调用显式传递消息。然后各个进程可以开始工作并在必要时再次通信。它不是一种可以将作业自动分配到工作节点的任务语言。还有其他语言可以做这种事情(Hadoop/MapReduce、Charm++ 等可能更适合该模型)。

在 MPI 论坛决定的 MPI 标准 (http://www.mpi-forum.org/docs/docs.html) 中,指定了特定的语言要求。到目前为止,MPI 实现只需要三种语言:C、C++ 和 FORTRAN(实际上 C++ 的要求已被删除)。原因是这些是使用 MPI 的科学应用程序最常用的语言。这不会阻止其他语言绑定的存在,但支持每种语言对实现来说是一个很大的负担,而且并不总是可行的。还有许多其他可用的语言绑定:

我敢肯定,对于一些更具异国情调的语言来说,还有更多。只需搜索 MPI,您一定会找到信息。 MPI 实际上很受欢迎,即使在科学界之外。已经尝试在视频游戏社区、分布式数据库等中使用它。然而,科学计算仍然是 MPI 的最大用户之一,并且仍然是论坛的主要关注点之一。

【讨论】:

  • 是的,但我刚刚查看了您发布的 Java 链接。都是“暂时的”、“还在努力的”、“进行中的”.... 不会给人一种流行或成熟的印象。
  • 你是对的。它已经存在很长时间了,所以它不会像“官方支持”的语言那样成熟。但是,它将(AFAIK)工作。您可能需要获取每晚的 tarball,而不是最后一个版本,但您可以保持这种方式。我无法评价它的受欢迎程度。
  • 你说得对,Open MPI Java 实现是“临时的”。 FWIW,我们正准备将它的新版本提交到 Open MPI SVN 主干——可能在本周晚些时候。它比以前的版本更完整,性能更好,味道很好,填充更少等等。本周晚些时候检查open-mpi.org/nightly/trunk 以获取夜间快照压缩包。那里将有一个 Java 的 README 描述如何使用它等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
相关资源
最近更新 更多