Open MPI 的前世今生

Open MPI 这个项目是几个 MPI 项目(包括 FT-MPILA-MPI 以及我所相对熟悉的 LAM)合并而来,另外还有 PACX-MPI 团队的贡献,吸取了这几个项目的优点。随着该项目的发展,已经吸引了更多的人才加入到 Open MPI 的开发中来了。为什么不继续使用 LAM 这些 MPI 实现呢?一个很大的原因是,每个项目原先都可能有一些设计上的不足,但是由于历史原因没有人愿意重写这些代码。而 Open MPI 是从头开始设计并实现的,这会避免原来这些不足。

Open MPI 中一个重要组成部件是 ORTE(open run-time environment),这为 MPI 层(一般称为 OMPI)提供了一个 API 以便适应不同的环境。我们注意到 LAM 的例子中隐隐有这种设计思想(-ssi boot rsh 使用的就是 rsh/ssh 模块,这使得我们可以通过 rsh/ssh 协议在其他主机上启动我们需要的进程)。更重要的是,不难猜出来,实施 MPI on hadoop 正是应该实现 ORTE 的一个模块,而使得在 hadoop framework 中,MPI 程序成为可能。我们来看看 Open MPI 提供了一些什么样的 ORTE 模块:

  • BProc(beolwulf distributed process space)是一种分布式系统(例子有 clustermatic,这个也是 LA-MPI 的诞生地),其中节点启动后自动并入到集群,其任务提交后会自动的从前端推送到某些节点上运算,不需要指定运算节点。
  • sun grid engine,现在已经改弦更张变成 oracle grid engine 了,OGE 的组成一般也是一个 master(带有 shadow masters 作为热备)和 execution hosts。
  • PBS pro、torque 及其 openpbs,都是 portable batch system 的实现。
  • loadleveler,是 IBM 的产品。
  • lsf 是 Platform 的产品。
  • poe(parallel operating environment)是 IBM 的产品。
  • rsh/ssh 直接使用 rsh/ssh 协议登陆。
  • slurm 是一个开源的产品,支持异构集群,支持 65536 台主机,等。
  • xgrid 好像是 mac 下面的,这里有一个很详尽的 tutorial

通过这些模块,可以在各种主流的 job scheduler 上提交 Open MPI 的程序。通过这一层,OMPI 可以在不同的 cluster 上执行。

Open MPI 另外一个重要的部件是 OPAL(open portable access layer),这主要是一些 utility 和粘合 OMPI 和 ORTE 的代码。这三个部件编译成为三个 .a/.so 文件。一个 Open MPI 的程序会自动被链接到这三个库上。

事实上 LAM 的设计与此非常类似。LAM 的 SSI(system service interface)也同样包括了 4 个组件,即 boot(地位实际上和 ORTE 类似,决定在什么样的环境启动 MPI 进程,并且也支持以上列表中的不少环境)、coll(指 MPI 进程 collective communication 的方法,最常见的就是 tcp,当然,对于特定的快速网络最好用对应的模块)、cr(checkpoint/restart 模块决定 MPI 的 checkpoint 形式) 和 rpi(request progression interface,指点对点通信的方式)。另外 LAM 编译出来的程序还能以单进程方式执行(不通过 mpirun/mpiexec 启动即可)。

Open MPI 对 MPI 协议的支持也比较新,如 1.3 版已经支持到 MPI 2.1,现在 release 的版本是 1.4.2(注:完成此文章的时候大约在 2012 年,已经发布 1.6 版本)。现在 boost.mpi 提供了相关的 C++ binding,但只是支持早期 1.0 的或者 LAM 等。

Open MPI 支持异构系统(对数据类型 size 或者 endian 不同都有支持了),支持并行调试器(实现了 total view API)。

Advertisements
Open MPI 的前世今生

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s