訊息傳遞介面
历史
建立信息传递接口的努力始于1991夏天一小群研究员在奥地利的一个度假山庄开始的讨论。那次讨论之后,于1992年4月29-30号于維吉尼亞州威廉斯堡召开了一次关于分布式内存环境下的信息传递标准设置研讨会。在这次研讨会上讨论了对标准信息传递接口至关重要的一些基本特征,并建立了一个继续标准化此过程的工作组。杰克·唐加拉, Rolf Hempel, 托尼·黑, 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內部結構(The Architecture of Open Source Applications, Volume II - ISBN 9781105571817)