什么是MPI:
MPI是一个库,而不是一门语言。但是按照并行语言的分类,可以把FORTRAN+MPI或者C+MPI看作是一种在原来串行语言基础上扩展后得到的并行语言。MPI库可以被FORTRAN77/C/FORTRAN90/C++调用,从语法上说,它遵守所有对库函数/过程的调用规则,和一般的函数/过程没有什么区别。
MPI是一种标准或规范的代表,而不特指某一个对它的具体实现。迄今为止,所有的并行计算机制造商都提供对MPI的支持,可以在网上免费得到MPI在不同并行机上的实现。一个正确的MPI程序,可以不加修改地再所有的并行机上运行。
MPI是一种消息传递编程模型,并成为这种编程模型的代表和标准。
消息传递方式是广泛应用于多类并行机的一种模式,特别是那些分布存储并行机,尽管在具体的实现上有许多不同,但通过消息完成进程通信的基本概念是容易理解的。十多年来,这种模式在重要的计算应用中已取得了实质进步。有效和可移植地实现一个消息传递系统是可行的,因此,通过定义核心库程序的语法、语义,这将在大范围计算机上可有效实现将有益于广大用户。这是MPI产生的重要原因。
MPI的目的:较高的通信性能,较好的程序可移植性,强大的功能。
提供应用程序编程接口
提高通信效率,措施包括避免存储器到存储器的多次重复拷贝,允许计算和通信的重叠等
可在异构环境下提供实现
提供的接口可以方便C语言和Fortran77的调用
提供可靠的通信接口,即用户不必处理通信失败
定义的接口和现在已有接口,如PVM、NX、Express、p4等。差别不能太大。但是允许扩展以提供更大的灵活性
定义的接口能在基本的通信和系统软件无重大改变时,在许多并行计算机生产商的平台上实现。接口的语义是独立于语言的
接口设计应是线程安全的
MPI的产生:
MPI的语言绑定:
在MPI-1中明确提出了MPI和FORTRAN77与C语言的绑定,并且给出了通用接口和针对FORTRAN77与C的专用接口说明。
在MPI-2中除了和原来的FORTRAN77和C语言实现绑定之外,进一步与Fortran90和C++结合起来,提供了四种不同的接口,为编程者提供了更多选择的余地。但是MPI-2目前还没有完整的实现版本。
目前主要的MPI实现:
MPICH是一种最重要的MPI实现,它可以免费从http://www-unix.mcs.anl.gov/mpi/mpich取得。更为重要的是,MPICH是一个与MPI-1规范同步发展的版本,每当MPI推出新的版本就会有相应的MPICH的实现版本。目前MPICH的最新版本是MPICH-1.2.1。
CHIMP是Edinburgh开发的另一个免费MPI实现,是在EPCC(Edinburgh Parallel Computing Centre)的支持下进行的。从ftp://ftp.epcc.ed.ac.uk/pub/packages/chimp/release/可以免费下载该软件。
LAM (Local Area Multicomputer)也是免费的MPI实现,由Ohio State University开发。它目前的最新版本是LAM/MPI 6.3.2,可以从http://www.mpi.nd.edu/lam/download/下载。它主要用于异构的计算机网络计算系统。