单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,JP Navarro,*,并行计算产生背景,整个大的串行任务,分解,各个并行执行部分,需做大量运算,持续时间长,根据大任务内在相关性,各个相对独立模块部分并行执行,节约运算时间,并行计算产生背景整个大的串行任务分解各个并行执行部分需做大量,并行计算是相对于串行计算,并行计算是相对于串行计算,并行计算概念,并行计算概念,并行计算-高性能计算,并行计算,(Parallel Computing,),高端计算,(High-end Parallel Computing),高性能计算,(High Performance Computing),超级计算,(Super Computing),任何高性能计算和超级计算都离不开使用并行技术,The simultaneous use of more than one computer to solve a problem.,由,由运行在多个部件上的小任务合作来求解一个规模很大的计算问题的一种方法,4,并行计算-高性能计算并行计算(Parallel Compu,并行计算的应用需求,5,并行计算的应用需求5,计算科学,与传统的两种科学,即,理论科学,和,实验科学,,并列被认为是人类认识自然的三大支柱,他们彼此相辅相成地推动科学发展与社会进步。
在许多情况下,或者是理论模型复杂甚至理论尚未建立,或者实验费用昂贵甚至无法进行时,计算就成了求解问题的唯一或主要的手段并行计算的应用需求,6,计算科学与传统的两种科学,即理论科学和实验科学,并列被认为是,程序级并行,子程序级并行,语句级并行,操作级并行,微操作级并行,并行粒度,细,粗,并行的层次,后三层大都由硬件和编译器负责处理,程序员通常处理前两层的并行,程序级并行并行粒度细粗并行的层次后三层大都由硬件和编译器负,硬件(并行机),组成要素:节点,互联网络,内存,结构模型:,PVP,SMP,DSM,MPP,COW,并行算法设计(略),并行编程环境,系统环境:常见主流,Unix/Linux,操作系统,编程语言:,Fortran 77/90/9,C/C+,并行计算基本条件,硬件(并行机)并行计算基本条件,并行计算机的分类,SISD,SIMD,MIMD,并行计算科学中主要研究的是空间上的并行问题空间上的并行导致了两类并行机的产生,按照,Flynn,的说法分为:单指令流多数据流(,SIMD,)和多指令流多数据流(,MIMD,)我们常用的串行机也叫做单指令流单数据流(,SISD,)并行计算机的分类SISDSIMDMIMD并行计算科学中主要研,10,并行计算机体系结构,组成要素,结点,(node):一个或多个处理器组成,互联网络,(interconnetct network):连接结点,内存,(memory):多个存储模块组成,10并行计算机体系结构 组成要素 结点(node):一个或多,1,并行计算框架,PVP,(,Parallel Vector Processor,,,并行向量处理机),代表:,银河,I,NEC,地球模拟器,1并行计算框架PVP(Parallel Vector Pr,2,SMP,(,Symmetric Multiprocessor,,,对称多处理机),单一操作系统管理,共享内存及计算机的其他资源,.,代表:,曙光,1,号,IBM RS/6000,并行计算框架,2SMP(Symmetric Multiprocessor,4,MPP,(,Massively Parallel Processor,,,大规模并行处理机),每个结点均有自己的,操作系统,独立的内存,.,代表:,Intel Option Red,IBM SP2,Dawning 1000,并行计算框架,4MPP(Massively Parallel Proces,5,COW,(,Cluster of Workstation,,,集群工作站),代表:,IBM Cluster 1350/1600,曙光,2000,3000,目前分布式计算、云计算体系,的原型,并行计算框架,5COW(Cluster of Workstation,集群,Google,云计算数据中心,Google云计算数据中心,并行计算机发展食物链,并行计算机发展食物链,并行计算的性能分析,2,、并行效率,并行计算的性能分析,并行语言的实现方式和实现难度的关系图,改动多少,实现难度,提供并行库,扩充语法成分,新语言,并行程序设计方式:,设计全新的并行语言,扩展串行语言语法,使其支持并行特征,为串行语言提供可调用的并行库,MPI,(,M,essage,P,assing,I,nterface,消息传递接口,):,是消息传递函数库的标准规范,采用,提供并行库,的方式,MPI,产生背景,并行语言的实现方式和实现难度的关系图改动多少实现难度提供并行,一个简单的,MPI,程序,Hello.c,#include“mpi.h”,/*,导入包含有,MPI,库函数的头文件,*,/,#include,/*,导入,C,语言头文件,*,/,/*,*,使用,C,语言作为宿主语言,调用,MPI,库编写简单,Hello.c,并行程序,*,/,int main(int argc,char*argv),MPI_init,(,/*MPI,库函数,*,/,printf(“hello parallel world!n”);,/*C,库函数,*,/,MPI_Finalize,();,/*MPI,库函数,*,/,return 0;,MPI_Init();,并行代码;,MPI_Fainalize();,只能有串行代码;,一个简单的MPI程序 Hello.c#include“,启动机器集群中的,3,个机器节点:,编译,Hello.c,程序:,执行,Hello,程序:,注意:可执行程序,Hello.o,必须同时位于,3,个机器节点的,test3,目录下。
一个简单的,MPI,程序,Hello.c,运行:,启动机器集群中的3个机器节点:一个简单的MPI程序 He,MPI,消息,消息,(message),:,MPI,程序中在进程间通信所传送的所有信息称为消息作用:,控制整个集群内的所有机器节点进行协同工作,对底层异构系统进行抽象,实现程序可移植性,组成:,消息信封,消息内容,MPI消息消息(message):MPI程序中在进程间通信,MPI,消息传递过程,分三个阶段:,消息装配,消息发送,消息拆卸,数据发送缓冲区,消息装配,消息传递,消息拆卸,数据接收缓冲区,MPI,消息传递过程,MPI消息传递过程分三个阶段:数据发送缓冲区消息装配消息传递,MPI,常用六个基本函数,MPI_Init();,MPI_Comm_size();,MPI_Comm_rank();,MPI_Send();,MPI_Recv();,MPI_Finalize();,MPI常用六个基本函数MPI_Init();,int MPI_Init(int*argc,char*argv),启动,MPI,环境,标志并行代码的开始.,并行代码之前,第一个,mpi,函数(除,MPI_Initialize(),外).,接收,main,函数传递的参数,.,int MPI_Finalize(void),标志并行代码的结束,结束除主进程外其它进程.,int MPI_Init(int*argc,char*,int MPI_Comm_size(MPI_Comm comm,int*size),获得通信空间,comm,中规定的组包含的进程的数量.,int MPI_Comm_rank(MPI_Comm comm,int*rank),得到本进程在通信空间,comm,中的,rank,值,即在组中的逻辑编号(从0开始,类似于进程,ID,).,int MPI_Comm_size(MPI_Comm c,int MPI_Send(void *buff,int count,MPI_Datatype datatype,int dest,int tag,MPI_Comm comm),标准阻塞发送消息,buff,:消息发送缓冲区,count:,指定数据类型,MPI_Datatype,的消息个数,而不是字节数,.,dest:,发送消息的目的地,tag:,消息标签,comm:,通信空间或通信域,int MPI_Send(void *buff,int,int MPI_Recv(void *buff,int count,MPI_Datatype datatype,int source,int tag,MPI_Comm comm,MPI_Status *status),标准阻塞接收消息,buff,:消息接收缓冲区,count:,指定数据类型,MPI_Datatype,的消息个数,而不是字节数,.,source:,发送消息源,tag:,消息标签,comm:,通信空间或通信域,status,:记录消息接收状态(成功或失败),int MPI_Recv(void *buff,int,简单消息发送与接收案例,HelloWord.c,#include“mpi.h”,main(int argc,char*argv),int,p;,/*,进程数,该变量为各处理器中的同名变量*,/,int,my_rank;,/*,我的进程,ID,存储也是分布的 *,/,MPI_Status,status;,/*,消息接收状态变量,存储也是分布 *,/,char,message100;,/*,消息,buffer,存储也是分布的 *,/,MPI_Init,(,/*,初始化,MPI*/,/*,该函数被各进程各调用一次,得到自己的进程,rank,值*,/,MPI_Comm_rank,(MPI_COMM_WORLD,/*,该函数被各进程各调用一次,得到进程数*,/,MPI_Comm_size,(MPI_COMM_WORLD,简单消息发送与接收案例HelloWord.c#includ,if(my_rank!=0),/*,建立消息*,/,sprintf(message,“Hello Word,I am%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,printf(“%sn,message);,MPI_Finalize();,/*,关闭,MPI,标志并行代码段的结束*,/,/*main*/,简单消息发送与接收案例,HelloWord.c,if(my_rank!=0)/*,HelloWord.c,的编译与运行,mpicc HelloWord.c,默认生成,a.out,的可执行代码.,mpicc o HelloWord Hello。