您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第2讲-并行计算框架及案例
并行计算产生背景整个大的串行任务分解各个并行执行部分需做大量运算,持续时间长根据大任务内在相关性各个相对独立模块部分并行执行,节约运算时间...处理器可分解的计算任务串行计算并行计算任务队列并行计算是相对于串行计算并行计算概念并行计算--高性能计算并行计算(ParallelComputing)高端计算(High-endParallelComputing)高性能计算(HighPerformanceComputing)超级计算(SuperComputing)任何高性能计算和超级计算都离不开使用并行技术Thesimultaneoususeofmorethanonecomputertosolveaproblem.由由运行在多个部件上的小任务合作来求解一个规模很大的计算问题的一种方法4并行计算的应用需求5计算科学与传统的两种科学,即理论科学和实验科学,并列被认为是人类认识自然的三大支柱,他们彼此相辅相成地推动科学发展与社会进步。在许多情况下,或者是理论模型复杂甚至理论尚未建立,或者实验费用昂贵甚至无法进行时,计算就成了求解问题的唯一或主要的手段。并行计算的应用需求6程序级并行子程序级并行语句级并行操作级并行微操作级并行并行粒度细粗并行的层次•后三层大都由硬件和编译器负责处理,程序员通常处理前两层的并行•硬件(并行机)组成要素:节点,互联网络,内存结构模型:PVP,SMP,DSM,MPP,COW•并行算法设计(略)•并行编程环境系统环境:常见主流Unix/Linux操作系统编程语言:Fortran77/90/9,C/C++并行计算基本条件并行计算机的分类SISDSIMDMIMD并行计算科学中主要研究的是空间上的并行问题。空间上的并行导致了两类并行机的产生,按照Flynn的说法分为:单指令流多数据流(SIMD)和多指令流多数据流(MIMD)。我们常用的串行机也叫做单指令流单数据流(SISD)。10并行计算机体系结构组成要素结点(node):一个或多个处理器组成互联网络(interconnetctnetwork):连接结点内存(memory):多个存储模块组成1并行计算框架•PVP(ParallelVectorProcessor,并行向量处理机)•代表:银河INEC地球模拟器VPSM交叉开关VPVPSMSM2•SMP(SymmetricMultiprocessor,对称多处理机)•单一操作系统管理,共享内存及计算机的其他资源.•代表:曙光1号IBMRS/6000P/CSMSMI/O总线或交叉开关P/CP/C…并行计算框架4•MPP(MassivelyParallelProcessor,大规模并行处理机)•每个结点均有自己的•操作系统,独立的内存.•代表:IntelOptionRedIBMSP2Dawning1000P/CLMNIC定制网络P/CLMNICMBMB…并行计算框架5•COW(ClusterofWorkstation,集群工作站)•代表:IBMCluster1350/1600曙光2000,3000目前分布式计算、云计算体系的原型LDP/CMMBIOBLDP/CMMBIOB商品网络(以太网,ATM,etc.)BridgeNICNICBridge…并行计算框架Google云计算数据中心并行计算机发展食物链并行计算的性能分析2、并行效率并行语言的实现方式和实现难度的关系图改动多少实现难度提供并行库扩充语法成分新语言•并行程序设计方式:设计全新的并行语言扩展串行语言语法,使其支持并行特征为串行语言提供可调用的并行库•MPI(MessagePassingInterface,消息传递接口):是消息传递函数库的标准规范,采用提供并行库的方式MPI产生背景一个简单的MPI程序—Hello.c#include“mpi.h”/*导入包含有MPI库函数的头文件*/#includestdio.h/*导入C语言头文件*//***使用C语言作为宿主语言,调用MPI库编写简单Hello.c并行程序*/intmain(intargc,char*argv[]){MPI_init(&argc,&argv);/*MPI库函数*/printf(“helloparallelworld!\n”);/*C库函数*/MPI_Finalize();/*MPI库函数*/return0;}MPI_Init(…);…并行代码;…MPI_Fainalize();只能有串行代码;•启动机器集群中的3个机器节点:•编译Hello.c程序:•执行Hello程序:注意:可执行程序Hello.o必须同时位于3个机器节点的test3目录下。一个简单的MPI程序—Hello.c运行:MPI消息•消息(message):MPI程序中在进程间通信所传送的所有信息称为消息。•作用:控制整个集群内的所有机器节点进行协同工作对底层异构系统进行抽象,实现程序可移植性•组成:消息信封消息内容MPI消息传递过程•分三个阶段:消息装配消息发送消息拆卸数据发送缓冲区消息装配消息传递消息拆卸数据接收缓冲区MPI消息传递过程MPI常用六个基本函数1.MPI_Init(…);2.MPI_Comm_size(…);3.MPI_Comm_rank(…);4.MPI_Send(…);5.MPI_Recv(…);6.MPI_Finalize();•intMPI_Init(int*argc,char**argv)启动MPI环境,标志并行代码的开始.并行代码之前,第一个mpi函数(除MPI_Initialize()外).接收main函数传递的参数.•intMPI_Finalize(void)标志并行代码的结束,结束除主进程外其它进程.•intMPI_Comm_size(MPI_Commcomm,int*size)获得通信空间comm中规定的组包含的进程的数量.•intMPI_Comm_rank(MPI_Commcomm,int*rank)得到本进程在通信空间comm中的rank值,即在组中的逻辑编号(从0开始,类似于进程ID).intMPI_Send(void*buff,intcount,MPI_Datatypedatatype,intdest,inttag,MPI_Commcomm)标准阻塞发送消息buff:消息发送缓冲区count:指定数据类型MPI_Datatype的消息个数,而不是字节数.dest:发送消息的目的地tag:消息标签comm:通信空间或通信域intMPI_Recv(void*buff,intcount,MPI_Datatypedatatype,intsource,inttag,MPI_Commcomm,MPI_Status*status)标准阻塞接收消息buff:消息接收缓冲区count:指定数据类型MPI_Datatype的消息个数,而不是字节数.source:发送消息源tag:消息标签comm:通信空间或通信域status:记录消息接收状态(成功或失败)简单消息发送与接收案例—HelloWord.c#include“mpi.h”main(intargc,char*argv[]){intp;/*进程数,该变量为各处理器中的同名变量*/intmy_rank;/*我的进程ID,存储也是分布的*/MPI_Statusstatus;/*消息接收状态变量,存储也是分布*/charmessage[100];/*消息buffer,存储也是分布的*/MPI_Init(&argc,&argv);/*初始化MPI*//*该函数被各进程各调用一次,得到自己的进程rank值*/MPI_Comm_rank(MPI_COMM_WORLD,&my_rank);/*该函数被各进程各调用一次,得到进程数*/MPI_Comm_size(MPI_COMM_WORLD,&p);if(my_rank!=0){/*建立消息*/sprintf(message,“HelloWord,Iam%d!,my_rank);/*发送长度取strlen(message)+1,使\0也一同发送出去*/MPI_Send(message,strlen(message)+1,MPI_CHAR,0,99,MPI_COMM_WORLD);}else{/*my_rank==0*/for(source=1;source=2;source++){/*指定3个进程的并行环境*/MPI_Recv(message,100,MPI_CHAR,source,99,MPI_COMM_WORLD,&status);printf(“%s\n,message);}}MPI_Finalize();/*关闭MPI,标志并行代码段的结束*/}/*main*/简单消息发送与接收案例—HelloWord.cHelloWord.c的编译与运行•mpiccHelloWord.c默认生成a.out的可执行代码.•mpicc–oHelloWordHelloWord.c生成HelloWorld的可执行代码.•mpirun–n3./a.out或•mpirun–n3./HelloWord3:指定执行该并行程序的机器节点数,由用户指定.a.out/HellowWord:要运行的MPI并行程序.案例执行过程MPI_Init()MPI_Comm_rank()MPI_Comm_rank()MPI_Comm_rank().Recv();.Recv();...Send();....Send();.MPI_Finalize()串行程序进程0进程1进程2串行程序HelloWord,Iam1HelloWord,Iam2进程0接收进程2的消息进程0接收进程1的消息案例程序解析•上述案例程序以C语言为宿主语言,结合MPI提供的并行库,实现3个机器节点执行该MPI程序的功能。•上述程序在0号机器节点上打印输出:HelloWord,Iam1HelloWord,Iam2•MPI并行程序约定:程序开头必须包含mpi.h.MPI函数返回出错代码或MPI_SUCCESS成功标志.MPI_前缀,且只有MPI名称以及MPI_标志后的第一个字母大写,其余小写.程序的并行部分以MPI_Init()开头,以MPI_Finalize()结束,其它部分为程序的串行部分.参考文献•参考资料主要的MPI主页及MPI标准主页上的MPI站点实现的MPICH相关材料教程教程•都志辉著.高性能计算并行编程技术—MPI并行程序设计.北京:清华大学出版社,2001.THANKSMPI并行程序设计•什么是MPI?MessagePassingInterface(消息传递接口):是消息传递函数库的标准规范。MPI一种新的库描述。MPI是一种标准或规范的代表。MPI是一种消息传递编程模型。目前MPI的主要实现实现名称研制单位网址MPICHArgonne&MSU一些大学、科研机构,以及大型企业://消息信封•消息信封(envelop)格式源/目,标识,通信域邮编通信地址XXX(收)tag•目的(Destination):消息的接收者,
本文标题:第2讲-并行计算框架及案例
链接地址:https://www.777doc.com/doc-5095785 .html