曙光MPI用户手册

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

曙光MPI用户手册(TC1700&TC4000L)曙光信息产业有限公司2003-9目录MPI的使用...............................................................................................................................................11.MPI简介………..................................................................................................................................12.MPI的程序设计..................................................................................................................................12.1MPI的基本功能…...........................................................................................................................12.2MPI的几个重要特征......................................................................................................................22.3消息…………..................................................................................................................................22.4point-to-point通信...........................................................................................................................32.5集群通信……..................................................................................................................................53.MPI应用程序的编译..........................................................................................................................63.1环境设置……..................................................................................................................................63.2make………….................................................................................................................................73.3mpif77和mpicc..............................................................................................................................84.MPI应用程序的运行..........................................................................................................................85.常见问题分析......................................................................................................................................8附录MPI函数简表.....................................................................................................................................9C语言函数列表………………………………………………………………………………………9FORTRAN语言函数列表…………………………………………………………………………...12曙光MPI用户手册1曙光信息产业有限公司MPI的使用1.MPI简介MPI(MessagePassingInterface)是消息传递接口的标准,当前通用的是MPI1.2规范。不久前制定的MPI2.0规范除支持消息传递外,还支持MPI的I/O规范和进程管理规范。MPI正成为并行程序设计事实上的工业标准。MPICH含三层结构,最上层是MPI的API,基本是点到点通信和点到点通信基础上构造的集群通信(CollectiveCommunication);中间层是ADI层(AbstractDeviceInterface),其中device可以简单地理解为某一种底层通信库,ADI就是对各种不同的底层通信库的不同接口的统一标准;最下层是具体的底层通信库,例如工作站机群上的p4通信库。MPICH在不同平台上的实现都是根据不同的device(即平台或底层通信)实现不同的ADI接口,这种实现机制的好处有:将与device有关和无关的代码分开,减小实现难度;利于MPI的不断升级;提高MPI的性能。2.MPI的程序设计2.1MPI的基本功能MPI1.2标准中没有对如何产生多个MPI进程作标准性规定,而把这一工作交给了具体的实现。但是它有如下众所周知的假设:静态加载,即所有进程在加载完以后就全部确定,直至整个程序结束才终止,在程序正常运行期间没有进程的创建和结束。一个MPI程序的所有进程形成一个缺省的组,这个组被MPI预先规定的CommunicatorMPI_COMM_WORLD所确定。MPI环境的初始化和结束流程如下:在调用MPI例程之前,各个进程都应该执行MPI_INIT,接着调用MPI_COMM_SIZE获取缺省组(group)的大小,调用MPI_COMM_RANK获取调用进程在缺省组中的逻辑编号(从0开始)。然后,进程可以根据需要,向其它进程发送消息或接收其它进程的消息,经常调用的函数是MPI_SEND和MPI_RECV。最后,当不需要调用任何MPI例程后,调用MPI_FINALIZE消除MPI环境,进程此时可以结束,也可以继续执行与MPI无关的语句。上面提到的六个函数:MPI_INIT,MPI_COMM_SIZE,MPI_COMM_RANK,MPI_SEND,MPI_RECV,MPI_FINALIZE实际上构成了编写一个完整的MPI程序所需例程的最小子集。曙光MPI用户手册2曙光信息产业有限公司2.2MPI的几个重要元素下面分别介绍MPI的几个重要元素:Communicator(通信子)、Group(进程组)、Context_id(上下文标识)、DataTypes(数据类型)。MPI提供Communicator来指定通信操作的上下文,提供了通信操作的执行空间。在某个通信空间(或上下文)中发送的消息必须在相同的空间中接收,不同空间中的消息互不干扰。定义一个Communicator,也就指定了一组共享该空间的进程,这些进程组成了该Communicator的Group。Communicator通过其特征属性Context_id来区分,同一个进程不同的Communicator有不同的Context_id。因此Context_id是另一个区分消息的标志。MPI引入消息的DataType属性的目的有两个:一是支持异构系统计算;二是允许消息来自不连续的或类型不一致的存储区,例如,可以传送数组的一列,或传送一个结构值,而该结构的每个元素的类型不同。DataTypes定义了消息中不连续的数据项及其可能不同的数据类型。DataType由应用程序在执行时通过基本的数据类型创建。2.3消息一个消息(见图1.1)相当于一封信,消息内容相当于信本身,消息的接收者相当于信封上的内容。因此通常将前者称为消息的buffer,后者称为消息的envelop。MPI_Send(&N,1,MPI_INIT,i,i,MPI_COMM_WORLD)buffer:messageaddress,count,datatype;envelop:processid,messagetag,communicator图1.1:MPI的消息格式在MPI以前的大多数通信系统中,消息buffer通常仅由buffer的地址和长度决定,那么在MPI的消息格式中为什么要引入DataType呢?这有两个主要原因:(1)支持异构计算:不同系统有不同的数据表示。解决这一问题的方法是预先定义一些基本数据类型,MPI实现过程中对这些类型进行转换。(2)派生的数据类型(DerivedDataTypes):允许消息来自于不连续的和类型不一致的存储区域,下面将详细说明。如何将一个数组的偶数项全部传送出去呢?一般通信系统中采取的方法是:i)一项一项地传送ii)先将每个要传送的元素依次拷贝到一个临时缓冲区中,然后传送该缓冲区。在MPI可以这样传送:doubleA[100];MPI-Pack-size(50,MPI-DOUBLE,comm,&Buffersize)TempBuff=malloc(Buffersize);j=sizeof(MPI-Double);DestinationProcessIDMessageDataTypeMessageCountMessageTagMessageAddressSubroutineNameCommunicator曙光MPI用户手册3曙光信息产业有限公司Position=0;for(i=0,i50;i++)MPI-Pack(A+i*j,1,MPI-DOUBLE,TempBuffer,BufferSize,&Position,comm);MPI-Send(TempBuffer,Position,MPI-PACKED,destination,tag,comm);其中,MPI-PACKED是一个派生数据类型,在MPI中,所有打包的消息都使用该类型。显然,这种方法麻烦且易错,MPI提供了另一种更加简明的方法,使得用户可以灵活地指定多种消息格式。一个消息可以包含多个数据项,每一项对应一个地址和数据类型(除了数据值以外)。例如,考虑以下4个消息传递的数据,假设double为8字节,char为1字节,int为4字节。(1)doubleA[100],所有A的元素。该消息有100个数据项,每项为double类型,第i项地址为A+8(i-1)。(2)数组A的第3和第4个元素。包含两个数据项,类型为double,第一项的地址为A+16,第二项地址为A+24。(3)数组的偶数项元素。包含50个数据项,类型为double,第i项的地址为A+16(i-1)。(4)数组A的第三个元素,接着是一个字符C和一个整型K。这个消息包含3个

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功