第1章
Programming Models for Parallel Computing
消息传递接口
William D. Gropp,伊利诺伊大学厄巴纳–香槟分校
Rajeev Thakur,阿贡国家实验室
1.1 引言
在使用分布式内存编程模型的并行程序中,MPI是一个标准和可移植的通信接口。MPI既为并行通信提供丰富的函数接口,也为并行文件I/O访问等提供函数接口。同时,MPI也支持多程序多数据(MPMD)编程模型。MPI是一种基于库的系统,而非编译器或者编程语言。MPI库函数通过C和Fortran语言实现。MPI指由函数名、参数、语义构成的专门的函数接口,而非特定的函数实现。MPI论坛负责定义和制定MPI,该论坛由大量来自工业、学术、研究实验室等机构的专家和用户组成。目前,高性能MPI库已在各种计算平台(例如笔记本、台式机、服务器、集群、商业化的高性能计算机)和操作系统上得到应用,从而更加方便地在各种计算平台上实现高性能和可移植的并行程序。因此,在并行科学应用领域,MPI成为应用最广泛的编程接口。
MPI背景
1992年,人们开始尝试为消息传递定义一种独立和标准化的接口。当时,许多应用程序编程接口是不同且无法移植的,例如计算机厂商提供的编程接口(Intel NX [232]、IBM EUI [119]、Thinking Machines CMMD [272]、nCUBE [207])和其他研究库(PVM [121]、p4 [51]、Chameleon [130]、Zipcode [254])。采用上述编程接口开发的应用程序无法在不同的机器上运行或者高效运行。如果一家计算机厂家倒闭,基于该厂家提供的编程接口开发的应用程序将无法运行。应用程序编程接口的多样性阻碍了应用程序开发。因此,需要人们为应用程序开发定义一种独立和标准化的接口。
1994年,MPI发布了第一个版本(MPI-1)。它包含基本的消息传递特性,例如点对点通信、聚合通信、数据类型和非阻塞式通信。1997年,MPI论坛发布了MPI的第二个主要版本(MPI-2)。MPI-2对MPI-1进行了扩展,增加了单边通信、并行I/O和动态进程等特性。2012年,发布了MPI的第三个主要版本(MPI-3)。MPI-3包含非阻塞聚合通信、相邻聚合通信等新特性,并对单边通信接口进行了大量扩展。在本章中,我们将介绍这些新的特性。