为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 国家973项目高性能计算环境支持讲座

国家973项目高性能计算环境支持讲座

2017-10-17 28页 doc 64KB 8阅读

用户头像

is_436595

暂无简介

举报
国家973项目高性能计算环境支持讲座国家973项目高性能计算环境支持讲座 MPI与PETSc 莫则尧 (北京应用物理与计算数学研究所) 日期 内容 进程与消息传递、 MPI应用现状、 上午 MPI并行程序设计入门、 8(15 初步的MPI消息传递函数 下午 作业一、讨论 作业一讲评、 先进的MPI函数、 上午 并行程序示例2、 8(16 MPI的发展 下午 作业二、讨论 作业二讲评、 上午 并行可扩展科学计算工具箱PETSc介绍 8(17 下午 PETSc程序示例 1 个人介绍 莫则尧,男,汉族,1971年7月生,副研究员: ...
国家973项目高性能计算环境支持讲座
国家973项目高性能计算环境支持讲座 MPI与PETSc 莫则尧 (北京应用物理与计算数学研究所) 日期 进程与消息传递、 MPI应用现状、 上午 MPI并行程序入门、 8(15 初步的MPI消息传递函数 下午 作业一、讨论 作业一讲评、 先进的MPI函数、 上午 并行程序示例2、 8(16 MPI的发展 下午 作业二、讨论 作业二讲评、 上午 并行可扩展科学计算工具箱PETSc介绍 8(17 下午 PETSc程序示例 1 个人介绍 莫则尧,男,汉族,1971年7月生,副研究员: , 1992年国防科技大学应用数学专业本科毕业; , 1997年国防科技大学计算机应用专业并行算法 方向博士毕业; , 1999年北京应用物理与计算数学数学博士后流 动站出站,并留所工作; , 主要从事大规模科学与工程并行计算研究。 2 消息传递并行编程环境MPI 一、 进程与消息传递 二、 MPI环境的应用现状 三、 MPI并行程序设计入门(程序例1) 四、 初步的MPI消息传递函数 五、 作业一 六、 先进的MPI函数 七、 MPI并行程序示例2(求解-,u=f); 八、 MPI环境的发展 九、 作业二 3 一、进程与消息传递 1(单个进程(process) , 进程是一个程序,同时包含它的执行环境(内存、寄 存器、程序计数器等),是操作系统中独立存在的可 执行的基本程序单位; , 通俗理解:串行应用程序编译形成的可执行代码,分 为“指令”和“数据”两个部分,并在程序执行时“独 立地申请和占有”内存空间,且所有计算均局限于该 内存空间。 进程1 进程2 内存 2(单机内多个进程: , 多个进程可以同时存在于单机内同一操作系统:由操 作系统负责调度分时共享处理机资源(CPU、内存、 存储、外设等); , 进程间相互独立(内存空间不相交):在操作系统调 度下各自独立地运行,例如多个串行应用程序在同一 台计算机中运行; , 进程间可以相互交换信息:例如数据交换、同步等待, 消息是这些交换信息的基本单位,消息传递是指这 4 些信息在进程间的相互交换,是实现进程间通信的唯 一方式; , 最基本的消息传递操作:发送消息(send)、接受消 息(receive)、进程同步(barrier)、规约(reduction); , 消息传递的实现:共享内存或信号量,用户不必关心; 进程1 进程2 发送数据 接收数据 (消息传递) 内存空间 3(包含于通过网络联接的不同计算机的多个进程: , 进程独立存在:进程位于不同的计算机,由各自独立 的操作系统调度,享有独立的CPU和内存资源; , 进程间相互信息交换:消息传递; , 消息传递的实现:基于网络socket机制,用户不必关 心; 4(消息传递库函数: , 应用程序接口(API):提供给应用程序(FORTRAN、 C、C++语言)的可直接调用的完成进程间消息传递 5 的某项特定功能的函数; , 消息传递库:所有定义的消息传递函数编译形成的软 件库,调用其内部函数的应用程序,通过与之联接, 即可成为可并行执行的程序; , 目前流行的消息传递函数库:PVM 3.3.11、MPICH 1.2、LAMMPI 6.4等; 5(标准消息传递界面(MPI:Message Passing Interface): , MPI标准:根据应用程序对消息传递功能的需求, 全球工业、应用和研究部门联合推出标准的消息传递 界面函数,不考虑其具体实现,以保证并行应用程序 的可移植性; , MPI的具体实现:消息传递库函数,目前有影响的 为MPICH和LAMMPI,我们注重MPICH系列; 6 6(基于消息传递的并行程序执行模式: , SPMD模式:单程序多数据流 可执行代码 并行应用程序代码 运行 复制多份并独立执行,形 成多个独立的进程 进进进 程程程 一二三 ))) 内内内 存存存 ))) 消息传递(交换数据、同步、规约)协同 , MPMD模式:多程序多数据流,除初始启动多个可 执行代码,其余与SPMD模式一致; 7(共享存储与分布式存储: , 属于并行机体系结构的范畴,与消息传递并行程序设 计平台无关; 7 节点 CPU CPU CPU CPU CPU CPU M M M 互连网络 互连网络 M M M 分布式存储 共享存储 , 消息传递是相对于进程间通信方式而言的,与具体并 行机存储模式无关,任何支持进程间通信的并行机, 均可支持消息传递并行程序设计; , 几乎所有共享和分布存储并行计算环境均支持进程 间的消息传递通信; 8 二、MPI环境的应用现状 , MPI(消息传递界面)是全球工业、政府和科研部门联 合推出的适合进程间进行标准消息传递的并行程序设 计平台,最初版MPI 1.0本于1994年6月推出,目前 最新的为MPI 2.0版,于1998年年低推出; , MPI的具体实现:MPICH和LAMMPI,目前均已实现 MPI 1.2版,适用于任何并行计算平台;部分并行机已 实现MPI 2.0版; , MPI是目前应用最广的并行程序设计平台,几乎被所有 并行计算环境(共享和分布式存储并行机、MPP、机群 系统等)和流行的多进程操作系统(UNIX、Windows NT)所支持,基于它开发的应用程序具有最佳的可移 植性; , 目前高效率的超大规模并行计算(1000个处理器)最 可信赖的平台; , 工业、科学与工程计算部门的大量科研和工程软件(气 象、石油、地震、空气动力学、核等)目前已经移植到 MPI平台,发挥了重要作用; , 目前,MPI相对于PVM: , 优点:功能强大,性能高,适应面广,使用方便,可 扩展性好; 9 , 缺点:进程数不能动态改变; 10 三、MPI并行程序设计入门 1( MPI并行程序设计平台由标准消息传递函数及相关辅助函数构成,多个进程通过调用这些函数(类似调用子程序),进行通信; 2( MPI程序: , SPMD执行模式:一个程序同时启动多份,形成多个 独立的进程,在不同的处理机上运行,拥有独立的内 存空间,进程间通信通过调用MPI函数来实现; , 每个进程开始执行时,将获得一个唯一的序号 (rank)。例如启动P个进程,序号依次为0,1,…, P-1; , MPI程序例1:进程0发送一个整数给进程1;进程 1将该数加1,传递给进程2;进程2再将该数加1, 再传递给进程3;依次类推,最后,进程P-1将该数 传递给进程0,由进程0负责广播该数给所有进程, 并打印输出。 11 program example1 include “mpif.h” !! MPI系统头文件 integer status(MPI_STATUS_SIZE),my_rank,p,source,dest,tag,ierr,data c c-------进入MPI系统 call MPI_Init(ierr) call MPI_Comm_rank(MPI_COMM_WORLD,my_rank,ierr) call MPI_Comm_size(MPI_COMM_WORLD,p,ierr) c c-------数据交换 data=0 tag = 5 source= my_rank-1 if(source.eq.-1) source=p-1 dest =my_rank+1 if(dest.eq.p) dest=0 if(my_rank.eq.0) then call MPI_Send(data,1,MPI_INTEGER,dest,tag,MPI_COMM_WORLD,ierr) call MPI_Recv(data,1,MPI_INTEGER,source,tag,MPI_COMM_WORLD,status,ierr) else call MPI_Recv(data,1,MPI_INTEGER,source,tag,MPI_COMM_WORLD,status,ierr) data=data+1 call MPI_Send(data,1,MPI_INTEGER,dest,tag,MPI_COMM_WORLD,ierr) endif c c-------广播数据 call MPI_Bcast(data,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) c c------打印输出 if(my_rank.eq.0) then if(data.eq.p-1) then print *,”Successful, data=”,data else print *,”Failure, data=”,data endif endif c call MPI_Finalize(ierr) end 12 , 编译命令: mpif77 -o exam.e example.f , 运行命令: mpirun –np 4 exam.e , 运行效果:MPI系统选择相同或不同的4个处理机, 在每个处理机上运行程序代码exam.e。 MPI函数 进程0 进程1 进程2 进程3 Init() 进入MPI系统 Comm_rank() my_rank=0 myrank=1 myrank=2 my_rank=3 Comm_size() p=4 p=4 p=4 p=4 tag=5,data=0 tag=5,data=0 tag=5,data=0 tag=5,data=0 source=3 source=0 source=1 source=2 dest=1 dest=2 dest=3 dest=0 数据交换 send() recv() recv() recv() recv() data=data+1 空 send() 闲 data=data+1 等 send() 待 data=data+1 消息传递 send() Broadcast() send() recv() recv() recv() output “data” Finalize() 退出MPI系统 13 3(MPI重要概念 , 进程序号(rank);各进程通过函数MPI_Comm_rank()获取各 自的序号; , 消息号:消息的标号; , 通信器(Communicator):1)理解为一类进程的集合,且在该集 合内,进程间可以相互通信;类比:邮局、电话局、国际网; 2)任何MPI通信函数均必须在某个通信器内发生;3) MPI系 统提供省缺的通信器MPI_COMM_WORLD,所有启动的MPI 进程通过调用函数MPI_Init()包含在该通信器内;4)各进程通 过函数MPI_Comm_size()获取通信器包含的(初始启动)的 MPI进程个数; , 消息:分为数据(data)和包装(envelope)两个部分,其中, 包装由接收进程序号、发送进程序号、消息标号和通信器四 部分组成,数据包含用户将要传递的内容; , 进程组:一类进程的集合,在它的基础上,可以定义新的通 信器; , 基本数据类型:对应于FORTRAN和C语言的内部数据类型 (INTEGER,REAL,DOUBLE PRECISION,COMPLEX, LOGICAL,CHARACTER),MPI系统提供已定义好的对应 数据类型(MPI_INTEGER,MPI_REAL, MPI_DOUBLE_PRECISION, MPI_COMPLEX, MPI_LOGICAL,MPI_CHARACTER); 14 , 自定义数据类型:基于基本数据类型,用户自己定义的数据 类型(后面介绍); , MPI对象: MPI系统内部定义的数据结构,包括数据类 型、进程组、通信器等,它们对用户不透明,在FORTRAN 语言中,所有MPI对象均必须说明为“整型变量 INTEGER”; , MPI联接器(handle):联接MPI对象和用户的桥梁,用 户可以通过它访问和参与相应MPI对象的具体操作;例 如,MPI系统内部提供的通信器MPI_COMM_WORLD; 在FORTRAN语言中,所有MPI联接器均必须说明为“整 型变量INTEGER”; , 进程拓扑结构:进程组内部进程之间的一种相互连接结 构,如33 网格,将在后面介绍。 3 3 网格拓扑结构 , 静态进程个数:进程数由命令“mpirun –np xxx”初始 确定为xxx个,程序执行过程中不能动态改变进程的个 数; , 消息缓存区:应用程序产生的消息包含的数据所处的内 15 存空间; , 标准输入:所有进程的标准输入read(*,*)均省缺为当前终 端屏幕,且只能由0号进程执行该操作,其他进程需要 这些输入参数,只能由0号进程执行数据广播操作; , 标准输出:所有进程可以独立执行标准输出write(*,*), 但其省缺为当前终端屏幕; 4(MPI函数格式: , FORTAN语言中,最后一个参数为该函数调用是否成 功的标志:0表示成功,其它表示各种可能的错误; , C语言中,该标志又函数参数返回; C : ierr=MPI_Comm_rank(myrank) F : MPI_Comm_rank(myrank,ierr) 5. MPI函数的使用查询: , 由函数名查询: man 函数名 ( MPI_Xxxx), 注意大小写, 例如 man MPI_Comm_rank, man MPI_Send, man MPI_recv. 6. MPI函数的学习与使用: , 注重MPI函数的各类功能,由应用程序的通信需求出发,寻 找匹配的函数类型,在查找具体函数名,采用man命令可以 查询该函数的具体参数含义和使用。 16 , 7. 一般的MPI程序设计图 程序参数说明 进入MPI系统,通信器 Call MPI_Init ( ) MPI_COMM_WORLD形成 Call MPI_Comm_rank ( ) Call MPI_Comm_size ( ) 建立新的通信器、定义新的数据 类型和进程拓扑结构 应用程序实体: 1( 计算控制程序体; 2( 进程间通信; 退出MPI系统 Call MPI_Finalize ( ) End 17 四、初步的MPI消息传递函数 1(点对点通信(point-to-point) , 定义:给定属于同一通信器内的两个进程,其中一个 发送消息,一个接收消息; , MPI系统定义的所有通信方式均建立在点对点通信 之上; , 四种模式:标准模式、缓存区模式、同步模式、就 绪模式; 2(标准模式点对点通信 , 进程可以随意地发送(接收)消息,与是否存在匹配 的消息接收(发送)进程无关; 发收匹配: 进程进程1 0 发收不匹配: 0进程进程0 进程1 进程2 , 两类: , 阻塞式:消息发送函数返回,用户可以对消息缓 存区进行处理,不会影响已发送的消息数据;接 受函数返回,用户可以使用接受到的消息数据; , 非阻塞式:发送和接受函数返回后,必须调用另 一类函数来确保它们的正确完成; 18 阻塞式 非阻塞式 INTEGER A INTEGER A A=100 A=100 MPI_Send(A,1,….) MPI_Isend(A,1,…) A=200 A=200 消息数据: A=100 A=100 或 A=200 MPI_Isend(A,1,…flag,…) MPI_Wait(flag,…) A=200 消息数据: A=100 A=100 19 3(点对点通信函数举例 , 阻塞式标准消息发送函数 MPI_Send(buf,count,datatype,dest,tag,comm,ierr) Real*8(integer,…)buf : 消息发送缓存区起始地址 (Fortran, 用户的待发送的第一个数据) integer count :buf起始的数据单元个数 integer datatype :数据类型(基本或用户定义的) integer dest : 接收进程序号 integer tag : 消息的标号 integer comm : 通信器 integer ierr : 函数调用返回错误码 real *8 a(100,100) integer b(60,60) c-----发送50个双精度数“a(5,20) : a(54,20)”到2号进程 call MPI_Send( a (5,20),50,MPI_DOUBLE_PRECISION,2, & 99999,MPI_COMM_WORLD,ierr ) c-----发送20个整型数“b(20,40) : b(39,40)”到5号进程 call MPI_Send( b (20,40),20,MPI_DOUBLE_PRECISION,5, & 99999,MPI_COMM_WORLD,ierr ) 20 , 阻塞式标准消息接收函数 MPI_Recv(buf,count,datatype,dest,tag,comm,status, ierr) Real*8(integer,…)buf : 消息接收缓存区起始地址 (Fortran, 用户用于接受的第一个数据) integer count :buf起始的数据单元个数 integer datatype :数据类型(基本或用户定义的) integer dest : 发送进程序号 integer tag : 消息的标号 integer comm : 通信器 integer status(MPI_STATUS_SIZE) : 接收状态数组; integer ierr : 函数调用返回错误码 real *8 a(100,100) integer b(60,60) c-----从2号进程接收50个双精度数到“a(5,20) : a(54,20)” call MPI_Recv( a (5,20),50,MPI_DOUBLE_PRECISION,2, & 99999,MPI_COMM_WORLD,status,ierr ) c-----从5号进程接收20个整型数到“b(20,40) : b(39,40)” call MPI_Recv( b (20,40),20,MPI_DOUBLE_PRECISION,5, & 99999,MPI_COMM_WORLD,status,ierr ) , 其他点对点通信函数:参考手册; 21 4(聚合通信(Collective Communication) , 定义:属于同一通信器的所有MPI进程均必须参与 的通信操作; , 参与方式:调用同一聚合通信函数; , 函数类型: , 同步通信函数:所有进程在某个程序点上同步; MPI_Barrier ( comm , ierr ) , 全局通信函数: , 广播: MPI_Bcast(buf,count,dtype,root,comm,ierr) root 发送 other 接受 , 收集:MPI_Gather(bufs,bufr,count,dtype,root,comm,ierr) all 发送大小一致的数据块 root接受并按序号连续存放 , 全收集:MPI_Allgather() all 发送 all接受 , 索引收集:MPI_Gatherv() all 发送大小不等的数据块 root接受并按索引间断存放 22 , 索引全收集:MPI_Allgatherv() all 发送大小不等的数据块 All接受并按索引间断存放 , , 分散:MPI_Scatter(bufs,bufr,count,dtype,root,comm,ierr) root 发送连续的大小一致数据块 All 接受 , 索引分散: MPI_Scatterv() root 发送间断的大小不一致数据块 All 接受 , 全交换: MPI_Alltoall() All 发送大小一致数据块到各进程 All接受大小一致数据块并按序号连续存放 , 索引全交换: MPI_Alltoallv() , 全局规约(global reduction)函数: , 规约: MPI_Reduce(sbuf,rbuf,count,dtype,op,root, comm,ierr); 规约操作类型op : MPI_SUM, MPI_MIN, MPI_MAX, MPI_PROD等12种; 23 例子: 求两个向量的内积,并将结果返回进程0 subroutine par_blas1(m,a,b,c,comm) real a(m),b(m) ! local slice of array real c ! result real sum integer m,comm,i,ierr c c !local sum sum=0.0d0 do i=1,m sum=sum+a(i)*b(i) enddo c ! global sum call MPI_Reduce(sum,c,1,MPI_REAL,MPI_SUM,0, & comm,ierr) , 全规约: MPI_Allreduce(), 除要求将结果返回 到所有进程外,与MPI_Reduce()一致; , 规约分散: MPI_Reduce_scatter(),将规约结果 分散到各进程; , 并行前缀计算:MPI_Scan() 24 五、作业一 P个进程,第i个进程将其包含100个双精度数据的数组A(100)传送给第(i +1)mod P个进程,同时从第(i -1)mod P个进程接受100个双精度数据到另一个数组B(100)中,令数组C(1:100)=A(1:100)+B(1:100),然后求数组C(1:100)各元素的类加和,最后在将该和全部累加到0号进程,打印并输出该和。 提示:可在例1的基础上修改,编制。 25 六、先进的MPI函数 1(自定义数据类型 , 定义:在MPI系统已定义的基本数据类型 (MPI_INTEGER,MPI_REAL,MPI_DOUBLE_PRECI SION,MPI_CHARACTER等)基础上,用户根据需 求,自己定义的数据类型; real a(1000) 发送 : a(5:9) call MPI_Send(a(5), 5, MPI_ REAL,…..) OK 发送 : a(5),a(7),a(9),a(11),a(13),a(15) do i=5, 15, 2 call MPI_Send(a(i),1,MPI_REAL,….) OK enddo 缺点: 多次发送,效率低,程序设计繁琐 改进: 用户定义新的数据类型 call MPI_Type_vector(5,1,2,MPI_REAL,newtype,ierr) call MPI_Type_commit(newtype , ierr) 提交 call MPI_Send(a(5), 1, newtype,….) call MPI_Type_free(newtype,ierr) 释放 , 在用户已定义好的数据类型基础上,还可以进一步定 义新的数据类型; , 用户定义的数据类型,必须由函数 26 MPI_Type_Commit()提交给MPI系统;此后,就可以 象基本数据类型一样,在消息传递函数中重复使用; 并由函数MPI_Type_free()释放; , 具体自定义数据类型函数,请参考手册; 2(进程拓扑结构 , 定义:根据应用程序的特征,在进程间建立的一种虚 拟拓扑连接方式,以方便并行程序设计和提高并行计 算性能; , 例:二维规则区域,3*3 区域分解,9个进程,建立 Cartesion坐标,进程(i,j)的相邻进程为 (i-1,j), (i+1,j), (i,j-1), (i,j+1); 0 1 2 0 1 2 (0,0) (0,1) (0,2) 3 4 5 3 4 5 6 7 8 (1,0) (1,1) (1,2) 0 1 2 (2,0) (2,1) (2,2) 3(并行I/O , 各进程可以类似于串行程序独立地读/写不同的文 件; , MPICH 1.2以上版本支持所有进程并行读写同一个 文件; 27 七、MPI并行程序示例2 1( 一维Dirichlet问: - u (x) = f(x) x =(0,1) u(0)=0.0, u(1)=0.0, f(x)=4.0 算法: 均匀网格有限差分离散,Jacobi迭代求解。 区域分解:nproc=4, n = 21, ns = (n-1)/nproc+1 =6 0 1 2 3 0 0.5 1 program example implicit real*8 (a-h,o-z) include “mpif.h” parameter ( n = 21, nproc = 4, ns = (n-1)/nproc+1) parameter ( errtol=1.e-4,nitmax=100) dimension u(ns), f(ns), solution(ns),uold(0:ns) ! u(0) : left dummy grid point ! u(ns+1) : right dummy grid point integer status(MPI_STATUS_SIZE),size c c enter into MPI call MPI_Init(ierr) call MPI_Comm_rank(MPI_COMM_WORLD,myrank,ierr) call MPI_Comm_size(MPI_COMM_WORLD,size,ierr) if(size.ne.nproc) then print *,”+++ errors for number of process distributions +++” goto 888 endif c c assign initial values h = 1.0d0/(n-1) ! discrete step size xst = myrank*(ns-1)*h ! start x-coordinate of local domain nlocal=ns-1 ! local number of grid point 28 ist=1 if(myrank.eq.0) ist=ist+1 do i=1,ns f(i)=4.0d0 u(i)=0.0d0 uold(i)=0.0d0 xauxi=xst+(i-1)*h solution(i)= -2*xauxi*(xauxi-1.0d0) enddo u(0)=0.0d0 c nlp=myrank-1 ! left process nrp=myrank+1 ! right process if(nlp.lt.0) nlp=MPI_PROC_NULL if(nrp.gt.nproc-1) nrp=MPI_PROC_NULL ! null process, null communication operation c c Jacobi iterating nit =0 ! current iterations c 10 continue c swapping dummy elements along pseudo-boundary call MPI_Send(uold(1),1,MPI_DOUBLE_PRECISION, & nlp,nit, MPI_COMM_WORLD,ierr) call MPI_Send(uold(nlocal),1, MPI_DOUBLE_PRECISION, & nrp,nit,MPI_COMM_WORLD,ierr) call MPI_Recv(uold(nlocal+1),1,MPI_DOUBLE_PRECISION, & nrp,nit, MPI_COMM_WORLD,status,ierr) call MPI_Recv(uold(0),1, MPI_DOUBLE_PRECISION, & nlp,nit, MPI_COMM_WORLD,status, ierr) c iterating and convergenc checking error=0.0d0 do i=ist,nlocal u(i)=(h*h*f(i)+uold(i-1)+uold(i+1))/2 xauxi= dabs(u(i)-solution(i)) if(dabs(xauxi).gt.error) error=xauxi enddo c c maximum error call MPI_Allreduce(error,xauxi,1,MPI_DOUBLE_PRECISION,MPI_MAX, & MPI_COMM_WORLD,ierr) error=xauxi if(error.gt.errtol) then do i=ist,nlocal 29 uold(i)=u(i) enddo if(nit.lt.nitmax) then nit=nit+1 if(myrank.eq.0) print *,"nit=",nit," error=",error goto 10 endif endif c if(myrank.eq.0) then if(nit.le.nitmax.and.error.le.errtol) then write(*,100) nit 100 format(1x, “Successfully touch the exact solution after nit = ”, & i4, “ iterations”) else write(*,200) nit 200 format(1x, “Fail to touch the exact solution after nit = ”, & i4, “ iterations”) endif endif c 888 call MPI_Finalize(ierr) c end 1. 编译 LINUX : mpif77 –o exam.e example.f 2( 运行 mpirun -np 4 exam.e 30 八、MPI环境的发展 1( 版本更新: , V 1.0 V1.2 :已完成,增加了并行I/O功能; , V1.2 V2.0 :正进行,将增加进程数动态可调、进程间 内存数据直接访问、多个独立的并行应用程序之间的动态互 操作性等3项主要功能; 2(相容共享存储并行程序设计标准OpenMP : , 在共享存储并行机上,进程与线程相容; 进程0 进程1 进程3 线线线线线线 程程程程程程0 1 0 1 0 1 , MPI与OpenMP的混合编程模式: , 可能比较适合“SMP机群系统”+ 物理上分区计算的应用 问题:即SMP之间用MPI处理各物理区,SMP内部用 OpenMP并行物理区内部的计算,综合MPI的可扩展性与 OpenMP的简单性,以较小的代价获取可接受的性能; , 可能要求用户成为MPI和OpenMP两个方面的专家; 31 3(特定领域建立“并行应用程序开发支持框架(工具箱)”: 并行应用程序开发 难度大 消息传递繁琐,易错 并行应用程序开发框架 库软件开发和利用率低 MPI环境 OS通信原语 , 采用面向对象技术,围绕矩阵向量(数组)数据结构: , 屏蔽消息传递,用户只需调用一个函数即可完成; , 集成各类核心库软件,但又提供面向对象的简单、统 一的用户界面; , 对特定领域的具有公用性的问题,研究成熟后,可形 成高性能的特殊功能部件,集成到该框架中; , 高性能细节对用户屏蔽,由专家负责; , 用户只需集中于基于区域分解的并行计算方法设计, 然后通过调用框架提供的功能部件来完成并行应用程 序的开发,框架能保证该并行应用程序的高性能、可 扩展; 32 , 强调软件的可重用性、可继承性、可维护性和可验证 性,缩短应用程序开发周期; , 美国能源部NERSC ODE2000工程从90年代中期开始,重 点支持了各个领域的约20个该类科学计算工具箱的建立, 目前比较成功的为Argonal国家重点实验室开发的PETSc (Parallel Extensible Tooltiks for Scientific Computing),由于 在LLNL的三维无结构网格NS应用程序的成功应用(ASCI Red 3072 台处理机,95%的并行效率,25%的峰值浮点 性能),获得SC’99 Gondar Bell 最佳应用成就奖。(公开初 步的源代码, 但高性能的核心部件不提供) , 与MPI系统兼容; 33 九、作业二 (任意选择其中之一) 1(矩阵乘:C(M,L)=A(M,N)*B(N,L) 数据分割: , 矩阵A,C : 按行等分块存储于各进程中; , 矩阵B : 按列等分块存储于各进程中; 算法: , 初始矩阵形成:各进程独立并行地对它所拥有的矩 阵块元素按某种规律赋值; , 矩阵B的各子块在各进程中间循环移动,并完成 相应的矩阵子块乘操作; , 结果:矩阵C按行存储在各进程中,并与预期正 确结果比较,结果正确,赋标志为0,否则为1, 并将这些标志规约到0号进程,由0号进程打印输 出矩阵乘是否成功完成的信息。 2(求解二维规则区域上 Dirichlet 问题- u = f,有限差分离散,沿两个方向的等网格区域分解,Jacobi迭代求解。 34 35
/
本文档为【国家973项目高性能计算环境支持讲座】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索