您好,欢迎访问三七文档
MPI的基本概念MessagePassingInterface:消息传递函数库的标准规范,由MPI论坛开发一种新的库描述,不是一种语言。共有上百个函数调用接口,在C语言中可直接对这些函数调用MPI是一种标准或规范的代表,而不是特指某一个对他的具体实现MPI是一种消息传递编程模型,并成为这种编程模型的代表和事实上的标准MPI的特点:高移植性MPI已在IBMPC机上,MSWindows上,所有主要的Unix工作站和所有主流的并行机上得到实现。MPI的基本概念MPI调用接口的总数虽然庞大,但根据实际经验,常用的MPI调用的个数确实有限,下面是6个最基本的MPI函数1,MPI_Init(…);完成MPI程序的所有初始化工作2,MPI_Comm_size(…);获得通信空间comm中规定的组包含的进程的个数intMPI_Comm_size(MPI_Commcomm,int*size)3,MPI_Comm_rank(…);获得进程的rank的值,即在组中的逻辑编号intMPI_Comm_rank(MPI_Commcomm,int*rank)4,MPI_Send(…);发送数据进程5,MPI_Recv(…);接收数据进程6,MPI_Finalize(…);结束MPI程序的运行点到点通信-BlockingSend单个进程对单个进程的通信,重要且复杂术语Blocking(阻塞):一个例程须等待操作完成才返回,返回后用户可以重新使用调用中所占用的资源.Non-blocking(非阻塞):一个例程不必等待操作完成便可返回,但这并不意味着所占用的资源可被重用.Local(本地):不依赖于其它进程.Non-local(非本地):依赖于其它进程.点到点通信-BlockingSendIntMPI_Send(void*buf,intcount,MPI_Datatypedatatype,intdest,inttag,MPI_Commcomm);1,buf;发送缓冲区的起始地址2,count;要发送信息的元素个数3,datatype;发送信息的数据类型4,dest;目标进程的rank值5,tag;消息标签6,comm;通信子点到点通信-BlockingReceiveIntMPI_Recv(void*buf,intcount,MPI_Datatypedatatype,intsource,inttag,MPI_Commcomm,MPI_Status*status);1,buf;接收缓冲区的起始地址2,count;要接收信息的元素个数3,datatype;接收信息的数据类型4,source;源进程的rank值5,tag;消息标签6,comm;通信子7,status;包含实际接收到的消息的有关信息点到点通信-MPI消息MPI消息包括信封和数据两个部分,信封指出了发送和接收消息的对象及相关信息,而数据是本身将要传递的内容数据:起始地址,数据个数,数据类型信封:源/目的,标识,通信域点到点通信-消息数据由count个类型的datatype的连续数据空间组成,起始地址为buf不是以字节数,而是以元素的个数指定消息的长度Count可以是0,这种情况下消息的数据部分是空的MPI基本数据类型相应与宿主语言的基本数据类型点到点通信-什么是缓冲区1.应用程序中说明的变量,在消息传递语句中又用作缓冲区的起始位置.2.也可表示由系统(不同用户)创建和管理的某一存储区域,在消息传递过程中用于暂存放消息.也被称为系统缓冲区.3.用户可设置一定大小的存储区域,用作中间缓冲区以保留可能出现在其应用程序中的任意消息.进程PAM进程QB进程PAMS进程QB进程PAMT进程QB系统缓冲区用户指定缓冲区用户缓冲区点到点通信-消息信封MPI标识一条消息的信息包含四个域:Source:发送进程隐式确定,由进程的rank值唯一标识Destination:Send函数参数确定Tag:Send函数参数确定,用于识别不同的消息(0,UB),UB:MPI_TAG_UB=32767.Communicator:缺省MPI_COMM_WORLDGroup:有限/N,有序/Rank[0,1,2,…N-1]Contex:Super_tag,用于标识该通讯空间.点到点通信-消息信封点到点通信-消息匹配接收buffer必须至少可以容纳count个由datatype参数指明类型的数据.如果接收buf太小,将导致溢出、出错.消息匹配参数匹配dest,tag,comm/source,tag,commSource==MPI_ANY_SOURCE:接收任意处理器来的数据(任意消息来源).Tag==MPI_ANY_TAG:匹配任意tag值的消息(任意tag消息).在阻塞式消息传送中不允许Source==Dest,否则会导致deadlock(死锁).消息传送被限制在同一个communicator.在send函数中必须指定唯一的接收者(Push/pull通讯机制).点到点通信-status参数当使用MPI_ANY_SOURCE或/和MPI_ANY_TAG接收消息时如何确定消息的来源source和tag值呢?在C中,status.MPI_SOURCE,status.MPI_TAG.在Fortran中,source=status(MPI_SOURCE),tag=status(MPI_TAG).Status还可用于返回实际接收到消息的长度intMPI_Get_count(MPI_Statusstatus,MPI_Datatypedatatype,int*count)INstatus接收操作的返回值.INdatatype接收缓冲区中元素的数据类型.OUTcount接收消息中的元素个数.点到点通信-分析greetings#includestdio.h#includempi.h“main(intargc,char*argv[]){intnumprocs;/*进程数,该变量为各处理器中的同名变量,存储是分布的*/intmyid;/*我的进程ID,存储也是分布的*/MPI_Statusstatus;/*消息接收状态变量,存储也是分布的*/charmessage[100];/*消息buffer,存储也是分布的*//*初始化MPI*/MPI_Init(&argc,&argv);/*该函数被各进程各调用一次,得到自己的进程rank值*/MPI_Comm_rank(MPI_COMM_WORLD,&myid);/*该函数被各进程各调用一次,得到进程数*/MPI_Comm_size(MPI_COMM_WORLD,&numprocs);点到点通信-分析greetingsif(myid!=0){/*建立消息*/sprintf(message,Greetingsfromprocess%d!,myid);/*发送长度取strlen(message)+1,使\0也一同发送出去*/MPI_Send(message,strlen(message)+1,MPI_CHAR,0,99,MPI_COMM_WORLD);}else{/*my_rank==0*/for(source=1;sourcenumprocs;source++){MPI_Recv(message,100,MPI_CHAR,source,99,MPI_COMM_WORLD,&status);printf(“%s\n,message);}}/*关闭MPI,标志并行代码段的结束*/MPI_Finalize();}/*Endmain*/点到点通信-greetings执行过程假设进程数为3(进程0)(进程1)(进程2)(rank=0)(rank=1)(rank=2)..Recv();..Recv();.....Send();......Send()...?点到点通信-greetings执行过程[dair@node01~]$mpicc–ogreetinggreeting.c[dair@node01~]$mpirun-np4greetingGreetingsfromprocess1!Greetingsfromprocess2!Greetingsfromprocess3![dair@node01~]$计算机打印字符我们输入的命令MPI通信-参考文献BarryWilkinsonandMichaelAllen.ParallelProgramming(TechniquesandApplicationsusingNetworkedWorkstationsandParallelComputers).PrenticeHall,1999.陈达智.MPI并行代码生成与通信优化技术研究[D].解放军信息工程大学,2012.GroppW,Huss-LedermanS,LumsdaineA,etal.MPI[J].TheCompleteReference.TheMPI-2Extensions,1998,2.GroppW,LuskE,DossN,etal.Ahigh-performance,portableimplementationoftheMPImessagepassinginterfacestandard[J].Parallelcomputing,1996,22(6):789-828.张治宏.基于MPI的并行计算研究[D].中国地质大学(北京),2006.FosterI,KaronisNT.Agrid-enabledMPI:Messagepassinginheterogeneousdistributedcomputingsystems[C]//Proceedingsofthe1998ACM/IEEEconferenceonSupercomputing.IEEEComputerSociety,1998:1-11.谢谢!
本文标题:并行计算
链接地址:https://www.777doc.com/doc-3356222 .html