(一)MPI系统简介
并行程序日益增强的简易性和灵活性增加了它对于科学家或工程师的吸引力。在众多的并行程序库中,应用较广泛的有消息传递接口(MPI)标准和并行虚拟机(PVM)环境。PVM是OakRidge国家实验室和Tennessee大学在1989年开发出来的;MPI即是在数年后出现,由几所大学和国家实验室出于创建消息传递库标准的目的共同开发的。MPI是一种并行程序的消息传递编程模型,是一个库,而不是一种语言。
简单地说,这个消息传递接口(MPI)的目的是为编写消息传递程序而开发的被广泛使用的标准。
1.MPI特点
MPI的特点概括来说有三方面:较高的通信性能,较好的程序可移植性和强大的功能。详细来说,它可以分为以下几个方面。
通用性:MPI是可移植的标准平台,其通信单元包含上下文和组的信息,以保证消息传递的安全性。
点对点通信:MPI能有效地管理消息、缓存区,具有一结构化缓存、扩充数据类型及异构性,MPI异步执行时能保护用户的其他软件不受影响,能实现完全的异步通信,立即发送与接收可完全与计算覆盖进行。
数据汇集方式:具有内定和用户自定义的数据汇集操作方式,可对大量数据进行整体传输,可直接或依据拓扑结构定义组。
MPI的实现方式多样化,同一编程界面可有多种开发工具,具有面向应用的信息传递拓扑结构:内定义支持网络和图拓扑 结构。
良好的操作环境:良好的操作环境具有差错控制功能,MPI-2在I/O、主动消息、进程启动、动态进程控制等方面进一步增强,MPICH版本可以在Linux的X窗口使用,用户通过Upshot或Nupshot直观地考察MPI运行过程中各处理器之间的同步、计算、消息发送、接收等情况,从而为程序的修改提供依据。
2.MPI的语言函数及子集
(1)6个函数调用
在MPI-1中共有128个调用接口,而在MPI-2中有287个调用接口,应该说MPI是比较庞大的。完全掌握这么多的调用对于初学者来说是比较困难的。从理论上说,MPI所有的通信功能可以用它的6个基本调用来实现。掌握了这6个调用,就可以实现所有的消息传递并行程序的功能。
MPI_Init:用来初始化MPI环境;
MPI_ommsize:用来提取进程组中的进程个数;(www.xing528.com)
MPI_ommRank:用来提取进程序号;
MPI_Send:发送消息数据体,参数中指明目标、数据体首地址、长度;
MPI_Recv:接收任意发送源的消息控制头,且参数中返回发送源标识;
MPI_Finalize:离开MPI环境。
(2)接口函数调用程序Greetings
程序Greetings是利用6个MPI基本函数写成的SPMD并行程序。执行此程序时,所有进程(除了进程0外)都会向进程发送字符串“Greetingsfromprocessx...”(x是该进程序号)。进程0接收到这些字符串,就在显示屏上将它们显示出来。
3.目前主要的MPI实现
MPICH和LAM是两种最重要的MPI实现方法,它可以免费从网上下载。每当MPI推出新的版本,就会有相应的MPICH的实现版本。目前MPICH的最新版本MPICH-1.2.1,它支持部分MPI-2的特征。Argonne国家试验室和MSU对MPICH做出了重要的贡献。
CHIMP是Edinburgh开发的另一个免费MPI实现,是在SPCC Edinburgh Parallel Computing Centre的支持下进行的,从网上可以免费下载。
LAM(Local Area Multicomputer)也是免费的MPI实现,由Ohio State University开发,它目前的最新版本是LAM/MPI6.3.2,主要用于异构的计算机网络计算系统。
MPICH含三层结构,最上层是MPI的API,基本是点到点通信和在点到点通信基础上构造的集群通信(Collective Communication);中间是ADI层(Abstract Device Interface),其中Device可以简单地理解为某一种底层通信库,ADI就是对各种不同的底层通信库的不同接口的统一标准;底层是具体的底层通信库,如工作站机群上的P4通信库等。
(二)MPI并行程序的主从模式
MPI的两种最基本的并行程序设计模式,即对等模式和主从模式,绝大部分MPI的程序都是这两种模式之一或二者的组合。掌握了这两种模式,就掌握了MPI并行程序设计的主线,即SPMD并行程序结构分主从结构(master/slave)和无主结构(hostless)。在主从模式的程式中,通常进程0为主进程,其他进程为子进程。
一个程序同时启动多份,形成多个独立的进程,在不同的处理机上运行,拥有独立的内存空间,进程间通信通过调用MPI函数来实现。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。