了解MPI
-
什么是MPI
(1)MPI是一个库而不是一门语言,许多人认为MPI就是一种并行语言,这是不准确的。但是按照并行语言的分类可以把FORTRAN+MPI或C+MPI。看作是一种在原来串行语言基础之上扩展后得到的并行语言,MPI库可以被FORTRAN77/C/Fortran90/C++调用,从语法上说它遵守所有对库函数/过程的调用规则和一般的函数/过程没有什么区别 。
(2)MPI是一种标准或规范的代表,而不特指某一个对它的具体实现。迄今为止所有的并行计算机制造商都提供对MPI的支持可以在网上免费得到,MPI在不同并行计算机上的实现一个正确的MPI程序可以不加修改地在所有的并行机上运行。
(3)MPI是一种消息传递编程模型并成为这种编程模型的代表和事实上的标准。MPI虽然很庞大,但是它的最终目的是服务于进程间通信这一目标的。 -
MPI的目的
1.较高的通信性能
2.较好的程序可移植性
3.强大的功能
具体地说包括以下几个方面:
- 提供应用程序编程接口
- 提高通信效率措施包括避免存储器到存储器的多次重复拷贝允许计算和通信的重叠等l
- 可在异构环境下提供实现
- 提供的接口可以方便 C 语言和 Fortran 77的调用
- 提供可靠的通信接口即用户不必处理通信失败
- 定义的接口和现在已有接口如PVM、NX、Express、p4等差别不能太大但是允许扩展以提供更大的灵活性
- 定义的接口能在基本的通信和系统软件无重大改变时在许多并行计算机生产商的平台上实现接口的语义是独立于语言的
- 接口设计应是线程安全的
MPI提供了一种与语言和平台无关可以被广泛使用的编写消息传递程序的标准用它来编写消息传递程序不仅实用可移植高效和灵活而且和当前已有的实现没有太大的变化
3.MPI语言绑定
由于MPI是一个库而不是一门语言,因此对MPI的使用必须和特定的语言结合起来进行,FORTRAN是科学与工程计算的领域语言,而C又是目前使用最广泛的系统和应用程序开发的语言之一,因此对FORTRAN和C的支持是必须的。
因此在MPI-1中明确提出了MPI和FORTRAN 77与C语言的绑定并且给出了通用接口和针对FORTRAN 77与C的专用接口,说明MPI-1的成功说明MPI选择的语言绑定策略是正确和可行的。Fortran90是FORTRAN的扩充它在表达数组运算方面有独特的优势,还增加了模块等现代语言的方便开发与使用的各种特征。它目前面临的一个问题是Fortran90编译器远不如FORTRAN 77编译器那样随处可见但提供Fortran90编译器的厂商正在逐步增多。
C++作为面向对象的高级语言随着编译器效率和处理器速度的提高它可以取得接近于C的代码效率面向对象的编程思想已经被广为接受。因此在MPI-2中除了和原来的FORTRAN 77和C语言实现绑定之外进一步与Fortran90和C++结合起来提供了四种不同的接口为编程者提供了更多选择的余地。
4.MPI的实现