消息传递接口

消息传递接口(英语:Message Passing Interface,缩写MPI)是一个并行计算应用程序接口(API),常在超级计算机电脑集群等非共享内存环境程序设计。

历史

建立信息传递接口的努力始于1991夏天一小群研究员在奥地利的一个度假山庄开始的讨论。那次讨论之后,于1992年4月29-30号于弗吉尼亚州威廉斯堡召开了一次关于分布式内存环境下的信息传递标准设置研讨会。在这次研讨会上讨论了对标准信息传递接口至关重要的一些基本特征,并建立了一个继续标准化此过程的工作组。杰克·唐加拉, Rolf Hempel, 托尼·黑英语Tony Hey, and David W. Walker于1992年11月提出了一些初始草稿提议,后被称为MPI1。在1992年11月,一个MPI的工作组会议在明尼亚波利斯召开,他们决定了为此标准化过程建立一个更正式的标注。MPI工作组在1993年的头九个月每6个星期见面一次。MPI标准草稿在93年11月的超级计算机会议上提出。在经过一阵子的公众论议后,MPI修改了一些部分,并于1994年6月发布了MPI1.0版本。这些会议和邮件共同建立了MPI论坛,此论坛后来开放至所有高性能计算的成员。

MPI包含了80个人40个组织的共同努力,他们主要都在美国和欧洲。主要的时下电脑供应商也涉入MPI,还有大学的研究员,政府公务员和产业界。

MPI标准定义了核心函数库的语法和语义,这个函数库可以被Fortran和C调用构成可移植的信息传递程序。MPI提供了适应各种并行硬件商的基础集,他们都被有效的实现。这导致了是硬件商可以基于这一系列底层标准来建立高层次的惯例,从而为分布式内存交互系统提供他们的并行机。MPI提供了一个简单易用的可移植接口,足够强大到程序员可以用它在高级机器上进行进行高性能信息传递操作。

在建立“真正”的MPI标准过程中,研究员们集成了几个系统最有用的特征到MPI中,而不是用一个系统来适应标准。其特征为IBM,Intel, nCUBE, PVM, Express, P4 and PARMACS等系统所用。

信息传递模式非常之吸引人,皆因它的广泛可移植性,以及能被用于分布式内存/共享内存的多核处理器,工作站网络,和这些架构的组合。信息传递模式可用于多重设定,独立于网络速度和内存架构。

概述

MPI是一个跨语言的通讯协议,用于编写并行计算机。支持点对点和广播。MPI是一个信息传递应用程序接口,包括协议和和语义说明,他们指明其如何在各种实现中发挥其特性。MPI的目标是高性能,大规模性,和可移植性。MPI在今天仍为高性能计算的主要模型。

主要的MPI-1模型不包括共享内存概念,MPI-2只有有限的分布共享内存概念。 但是MPI程序经常在共享内存的机器上运行。在MPI模型周边设计程序比在NUMA架构下设计要好因为MPI鼓励内存本地化。

尽管MPI属于OSI参考模型的第五层或者更高,他的实现可能通过传输层的sockets和Transmission Control Protocol (TCP)覆盖大部分的层。大部分的MPI实现由一些指定惯例集(API)组成,可由C,C++,Fortran,或者有此类库的语言比如C#, Java or Python直接调用。MPI优于老式信息传递库是因为他的可移植性和速度。

特色

大多数消息传递接口的实现为函数库,亦不需要编译器支持。

例子

由多行程来执行Hello World:

#include <stdio.h>
#include <mpi.h>

int main(int argc, char *argv[])
{
 char processor_name[MPI_MAX_PROCESSOR_NAME];
 int len;

 MPI_Init(&argc, &argv);

 MPI_Get_processor_name(processor_name, &len);
 printf("Hello World from %s\n", processor_name);

 MPI_Finalize();
 
 return 0;
}

执行结果:

% mpicc hello.c

% cat nodefile
node1
node2

% mpirun -np 1 -hostfile nodefile a.out(由1節點來執行)
Hello World from node1

% mpirun -np 2 -hostfile nodefile a.out(由2節點來執行)
Hello World from node1
Hello World from node2

实现

  • Open MPI- 是自由软件开放源码实现。[1] 走鹃(2008年6月-2009年11月TOP500第一快的超级计算机)[2](2011年6月至今第一快的超级计算机)也使用Open MPI。[3] [4]
  • Intel MPI-Intel基于开放源码的MPICH2与MVAPICH2研发成的MPI。[5]
  • Platform MPI-Platform公司收购Scali MPI及HP MPI,研发成Platform MPI。[6]

参考文献

  1. ^ Open MPI: Open Source High Performance Computing. [2011-04-10]. (原始内容存档于2006-07-02). 
  2. ^ Jeff Squyres. Open MPI: 10^15 Flops Can't Be Wrong (PDF). Open MPI. [2008-11-22]. (原始内容存档 (PDF)于2021-02-23). 
  3. ^ Programming on K computer (PDF). Fujitsu. [2011-06-24]. (原始内容存档 (PDF)于2020-07-02). 
  4. ^ Open MPI powers 8 petaflops. 思科系统. [2011-06-24]. (原始内容存档于2011-06-28). 
  5. ^ Intel MPI Library - Intel Software Network. [2011-04-10]. (原始内容存档于2011-03-12). 
  6. ^ Platform MPI. [2011-04-10]. (原始内容存档于2011-07-11). 

外部链接