目录
一、MPI的概念
MPI(Message Passing Interface,消息传递接口)。消息传递方式是,广泛应用于多种并行计算机的一种模式,特别是分布式存储并行计算机,尽管在具体的实现上有许多不同,但通过消息完成进程通信的基本概念是一致的。其主要从以下三个方面进行定义:
①MPI是一个库,不是一种语言。许多人认为MPI是一门计算机编程语言,其实是不准确的。但是按照并行语言分类,可以将Fortan+MPI或C+MPI看作是一种在原来串行语言基础之上扩展得到的并行语言。MPI库可以被Fortran77、Fortran90、C、C++调用,从语法上讲,其遵守所有对库函数/过程的调用规则,和一般的函数/过程没有区别。
②MPI是一种标准或规范,而不是特指某一个对它的实现。至今为止,所有的并行计算机制造商都提供对MPI的支持,可以在网上免费获得MPI在不同并行机上的实现,一个正确的MPI程序,可以无需修改运行在任一并行计算机上。
③MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准。MPI虽然庞大,但它的最终目的是服务于进程间通信。
在MPI上很容易移植其它并行代码,而且程序员无需去掌握许多其它全新概念,就可以学习编写MPI程序。
二、MPI的目的
MPI的目标是:
①较高的通信性能;②较好的程序可移植性;③强大的功能。
具体来说,包括以下几方面:
- 提供应用程序编程接口;
- 提高通信效率,包括避免存储单元之间的多次重复拷贝,允许计算和通信的重叠等;
- 可在异构环境下提供实现;
- 提供的接口可以方便C和Fortran77的调用;
- 提供可靠的通信接口,用户无需处理通信失败;
- 定义的接口和现有接口(如PVM,NX,Express,p4等)差别不能太大,但是允许扩展以提供更大的灵活性;
- 定义的接口能在基本的通信和系统软件无重大改变时,在许多并行计算机平台上实现,接口的定义是独立于语言的;
- 接口设计应该是线程安全的。
MPI提供了一种与语言和平台无关、可被广泛使用的编写消息传递程序的标准。
三、MPI的产生
MPI的标准化始于1992年4月29日至30日在维吉尼亚的威廉姆斯堡召开的分布式存储环境中消息传递标准的讨论会,由Dongarra、Hempel、Hey和Walker建议的初始草案于1992年11月推出,并于1993年2月完成修订版,这就是MPI 1.0。为了促进MPI的发展,一个称为MPI论坛的非官方组织应运而生,该论坛对MPI的发展起到了重要的作用。
1995年6月推出了MPI的新版本MPI 1.1,对原来的MPI作出进一步修改、完善和扩充。但是当初推出MPI标准时,为了能够使它尽快实现并迅速被接受,许多其它方面的重要但实现起来比较复杂的功能都没有定义,比如并行I/O,当MPI被广泛接受后,MPI的功能才逐渐得到扩展。
1997年7月,对原来的MPI作了重大扩充,又推出了MPI的扩充部分MPI-2,把原来的MPI各种版本成为MPI-1。MPI-2扩充内容很多,主要包括三个方面:并行I/O,远程存储访问,动态进程管理。
四、MPI的语言绑定
MPI是一个库而非一种语言,其使用必须和特定的语言相结合,Fortran是科学工程计算领域的常用语言,C是目前使用最广泛的系统和应用程序开发语言之一,因此对Fortran和C的支持是必须的。
MPI-1中明确提出了MPI和Fortran 77、C语言的绑定,且给出了通用接口和针对Fortran 77、C语言的专用接口说明。
Fortran 90是Fortran的扩充,它在表达数组运算方面有独特优势,还增加了模块等现代语言的方便开发与使用的各种特征。C++作为面向对象的高级编程语言,随着编译器效率和处理器速度的提高,它可以获得接近C代码的效率,面向对象的编程思想已经被广泛接受。因此在MPI-2中,除了原来的Fortran 77和C语言实现绑定,进一步与Fortran 90和C++相结合,提供了四种不同的接口,为程序员提供更多的选择。
五、小结
MPI的重要特点是免费和开源,MPI可以被迅速接受和它为自己定下的高效率、方便移植和功能强大三个主要目标密不可分。它采用广泛使用的Fortran和C语言进行绑定,成为并行程序设计领域的重要标准。
并行程序设计及MPI相关背景情况就先介绍到这里,下一节我们将正式开始MPI程序设计介绍。