并行计算基础知识讲座课件

上传人:博****1 文档编号:570320328 上传时间:2024-08-03 格式:PPT 页数:72 大小:237KB
返回 下载 相关 举报
并行计算基础知识讲座课件_第1页
第1页 / 共72页
并行计算基础知识讲座课件_第2页
第2页 / 共72页
并行计算基础知识讲座课件_第3页
第3页 / 共72页
并行计算基础知识讲座课件_第4页
第4页 / 共72页
并行计算基础知识讲座课件_第5页
第5页 / 共72页
点击查看更多>>
资源描述

《并行计算基础知识讲座课件》由会员分享,可在线阅读,更多相关《并行计算基础知识讲座课件(72页珍藏版)》请在金锄头文库上搜索。

1、基于基于MPI的并行程序设计的并行程序设计王振海王振海西北工业大学理学院西北工业大学理学院西北工业大学高性能计算研究与发展中心西北工业大学高性能计算研究与发展中心2024/8/31MPI并行编程并行编程环境环境进程与消息传递进程与消息传递MPI并行程序设计入门并行程序设计入门初步的初步的MPI消息传递函数消息传递函数先进的先进的MPI函数函数MPI并行程序示例并行程序示例面向性能的程序设计面向性能的程序设计主要内容主要内容2024/8/32目前,高性能并行机主要可以分为对称多处理共享存储并行机(SMP, Symmetric MultiProcessor)、分布式共享存储多处理机 (DSM, D

2、istributied Shared Memory)、大规模并行处理机(MPP, Massively Parallel Processor)和微机机群(Cluster)等四类。在这些并行机上,并行程序设计平台主要可分为消息传递、共享存储和数据并行三类,其中消息传递具有很好的可移植性,它能被所有这些类型的并行机所支持,而共享存储只能在在SMP和DSM并行机中使用,数据并行只能在SMP,DSM和MPP并行机上使用。并行编程并行编程环境简介环境简介2024/8/33消息传递并行编程环境(MPI:Message Passing Interface) 是目前国际上最流行、可移植性和可扩展性很好的并行程序

3、设计平台,并被当前流行的所有高性能并行机所支持。它是在标准串行程序设计语言(C,Fortran,C+)的基础上,再加入实现进程间通信的MPI消息传递库函数,就构成了MPI并行程序设计所依赖的并行编程环境。MPI已经在Windows系列的非Unix、Linux平台上实现,其程序设计语言支持C, Fortran和Java。在国产的三大并行机系列神威、银河和曙光上也都实现了对MPI和支持。MPI并行编程并行编程环境环境2024/8/34MPI并行并行环境的应用现状环境的应用现状 MPI是全球工业、政府和科研部门联合推出的适合进程间进行标准消息传递的并行程序设计平台,最初版MPI 1.0本于1994年

4、6月推出,目前最新的为MPI 2.0版,于1998年10月推出。MPI的具体实现:MPICH和LAMMPI,目前均已实现MPI 1.2版,适用于任何并行计算平台;部分并行机已实现MPI 2.0版。MPI是目前应用最广的并行程序设计平台,几乎被所有并行计算环境(共享和分布式存储并行机、MPP、机群系统等)和流行的多进程操作系统(UNIX、Windows NT)所支持,基于它开发的应用程序具有最佳的可移植性。2024/8/35MPI并行并行环境的应用现状(续)环境的应用现状(续) 目前高效率的超大规模并行计算(1000个处理器)最可信赖的平台。工业、科学与工程计算部门的大量科研和工程软件(气象、石

5、油、地震、空气动力学、核等)目前已经移植到MPI平台,发挥了重要作用。MPI的优点:(1)具有很好的可移植性,几乎被所有的并行环境支持;(2)具有很好的可扩展性,是目前高效率的大规模并行计算最可信赖的平台;(3)比其它消息传递系统好用;(4)有完备的异步通信功能;(5)有精确的定义,从而为并行软件产业的发展提供了必要的条件。2024/8/36MPI并行并行环境的应用现状(续)环境的应用现状(续) MPI 2.0版在1.0版的基础上,增加了如下的消息传递功能:(1)并行I/O:允许多个进程同时读写同一个文件;(2)线程安全:允许MPI进程的多个线程执行,即支持与OpenMP的混合并行编程;(3)

6、动态进程管理:允许并行应用程序在执行过程中,动态地增加和删除进程个数;(4)单边通信:允许某个进程对其它进程的局部内存单元直接执行读写访问,而步需要对方进程的显式干预;(5)并行应用程序之间的动态互操作:允许各个MPI并行应用程序之间动态地建立和删除消息传递通道。目前,各类并行机,特别式微机机群,只实现了MPI 2.0的部分功能。本中心机群所支持的为MPI 1.2.5版本。2024/8/37MPI并行编程并行编程环境环境进程与消息传递进程与消息传递MPI并行程序设计入门并行程序设计入门初步的初步的MPI消息传递函数消息传递函数先进的先进的MPI函数函数MPI并行程序示例并行程序示例面向性能的程

7、序设计面向性能的程序设计2024/8/38单个进程(单个进程(process)进程进程是一个程序,同时包含它的执行环境(内存、寄存器、程序计数器等),是操作系统中独立存在的可执行的基本程序单位。通俗理解:串行应用程序编译形成的可执行代码,分为“指令”和“数据”两个部分,并在程序执行时“独立地申请和占有”内存空间,且所有计算均局限于该内存空间。进程进程1内存进程进程22024/8/39单机内多个进程单机内多个进程多个进程可以同同时时存存在在于于单单机机内内同同一一操操作作系系统统:由操作系统负责调度分时共享处理机资源(CPU、内存、存储、外设等)。进进程程间间相相互互独独立立(内内存存空空间间不

8、不相相交交):在操作系统调度下各自独立地运行,例如多个串行应用程序在同一台计算机中运行。进进程程间间可可以以相相互互交交换换信信息息:例如数据交换、同步等待,消消息息是这些交换信息的基本单位,消消息息传传递递是指这些信息在进程间的相互交换,是实现进程间通信的唯一方式。2024/8/310最最基基本本的的消消息息传传递递操操作作:发送消息(send)、接受消息(receive)、进程同步(barrier)、规约(reduction)。消消息息传传递递的的实实现现:共享内存或信号量,用户不必关心。单机内多个进程(续)单机内多个进程(续)2024/8/311包含于通过网络联接的不包含于通过网络联接的

9、不同计算机的多个进程同计算机的多个进程 进进程程独独立立存存在在:进程位于不同的计算机,由各自独立的操作系统调度,享有独立的CPU和内存资源。进程间相互信息交换进程间相互信息交换:消息传递。消消息息传传递递的的实实现现:基于网络socket机制,用户不必关心。2024/8/312消息传递库函数消息传递库函数 应应用用程程序序接接口口(API):提供给应用程序(FORTRAN、C、C+语言)的可直接调用的完成进程间消息传递的某项特定功能的函数。消消息息传传递递库库:所有定义的消息传递函数编译形成的软件库,调用其内部函数的应用程序,通过与之联接,即可成为可并行执行的程序。目目前前流流行行的的消消息

10、息传传递递函函数数库库:PVM 3.3.11、MPICH 1.2、LAMMPI 6.4等。2024/8/313标准消息传递界面标准消息传递界面MPIMPIMPI标标准准:根据应用程序对消息传递功能的需求,全球工业、应用和研究部门联合推出标准的消息传递界面函数,不考虑其具体实现,以保证并行应用程序的可移植性 。MPI的的具具体体实实现现:消息传递库函数,目前有影响的为MPICH和LAMMPI,我们注重MPICH系列。2024/8/314基于消息传递的并行程序执行模式基于消息传递的并行程序执行模式 SPMD模式:单程序多数据流2024/8/315基于消息传递的并行程序执行模式(续)基于消息传递的并

11、行程序执行模式(续) MPM模式:多程序多数据流,除初始启动多个可执行代码,其余与SPMD模式一致。2024/8/316共享存储与分布式存储共享存储与分布式存储属于并行机体系结构的范畴,与消息传递并行程序设计平台无关。2024/8/317消息传递是相对于进进程程间间通通信信方方式式而言的,与具体并行机存储模式无关,任何支持进程间通信的并行机,均可支持消息传递并行程序设计。几乎所有共享和分布存储并行计算环境均支持进程间的消息传递通信。共享存储与分布式存储(续)共享存储与分布式存储(续)2024/8/318MPI并行编程并行编程环境环境进程与消息传递进程与消息传递MPI并行程序设计入门并行程序设计

12、入门初步的初步的MPI消息传递函数消息传递函数先进的先进的MPI函数函数MPI并行程序示例并行程序示例面向性能的程序设计面向性能的程序设计2024/8/319MPI并行程序设计平台由标标准准消消息息传传递递函函数数及及相相关关辅辅助助函函数数构成,多个进程通过调用这些函数(类似调用子程序),进行通信。SPMD执执行行模模式式:一个程序同时启动多份,形成多个独立的进程,在不同的处理机上运行,拥有独立的内存空间,进程间通信通过调用MPI函数来实现。每个进程开始执行时,将获得一个唯一的序号(rank)。例如启动P个进程,序号依次为0,1,P-1。MPI并行程序并行程序2024/8/320MPI并行程

13、序并行程序例例1进程0发送一个整数给进程1;进程1将该数加1,传递给进程2;进程2再将该数加1,再传递给进程3;依次类推,最后,进程P-1将该数传递给进程0,由进程0负责广播该数给所有进程,并打印输出。programexample1 include “mpif.h” ! MPI系统头文件 integer status(MPI_STATUS_SIZE), my_rank,p integer source,dest,tag,ierr,datac2024/8/321MPI并行程序并行程序例例1(续)(续)c-进入MPI系统 call MPI_Init(ierr) call MPI_Comm_rank

14、(MPI_COMM_WORLD,my_rank,ierr) call MPI_Comm_size(MPI_COMM_WORLD,p,ierr)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=02024/8/322 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_INTE

15、GER,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) endifcMPI并行程序并行程序例例1(续)(续)2024/8/323c-广播数据 call MPI_Bcast(data,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr)c-打印输出

16、 if(my_rank.eq.0) then if(data.eq.p-1) then print *,”Successful, data=”,data else print *,”Failure, data=”,data endif endifc call MPI_Finalize(ierr) endMPI并行程序并行程序例例1(续)(续)2024/8/324MPI并行程序的运行并行程序的运行MPI编译命令: mpif77 -o exam.e example.f运行命令: mpirun np 4 exam.e运行效果:MPI系统选择相同或不同的4个处理机,在每个处理机上运行程序代码exam.

17、e。运行结果: Successful, data=32024/8/325运运行行分分析析2024/8/326MPI重要概念重要概念进进程程序序号号(rank):各进程通过函数MPI_Comm_rank()获取各自的序号。消息号消息号:消息的标号。通通信信器器(Communicator) :1)理解为一类进程的集合,且在该集合内,进程间可以相互通信;类比:邮局、电话局、国际网;2)任何MPI通信函数均必须在某个通信器内发生;3) MPI系统提供省缺的通信器MPI_COMM_WORLD,所有启动的MPI进程通过调用函数MPI_Init()包含在该通信器内;4)各进程通过函数MPI_Comm_siz

18、e()获取通信器包含的(初始启动)的MPI进程个数。2024/8/327消消息息:分为数数据据(data)和包包装装(envelope)两个部分,其中,包装由接接收收进进程程序序号号、发发送送进进程程序序号号、消消息息标标号号和通通信信器器四部分组成,数据包含用户将要传递的内容。进进程程组组:一类进程的集合,在它的基础上,可以定义新的通信器。基基本本数数据据类类型型:对应于FORTRAN和C语言的内部数据类型(INTEGER,REAL,DOUBLE PRECISION,COMPLEX,LOGICAL,CHARACTER),MPI系统提供已定义好的对应数据类型(MPI_INTEGER,MPI_R

19、EAL,MPI_DOUBLE_PRECISION, MPI_COMPLEX, MPI_LOGICAL,MPI_CHARACTER)。MPI重要概念(续)重要概念(续)2024/8/328MPI重要概念(续)重要概念(续)自自定定义义数数据据类类型型:基于基本数据类型,用户自己定义的数据类型(后面介绍)。MPIMPI对对象象:MPI系统内部定义的数据结构,包括数据类型、进程组、通信器等,它们对用户不透明,在FORTRAN语言中,所有MPI对象均必须说明为“整型变量INTEGER”。MPI联联接接器器(handle):联接MPI对象和用户的桥梁,用户可以通过它访问和参与相应MPI对象的具体操作;例

20、如,MPI系统内部提供的通信器MPI_COMM_WORLD;在FORTRAN语言中,所有MPI联接器均必须说明为“整型变量整型变量INTEGERINTEGER” 。2024/8/329MPI重要概念(续)重要概念(续)进进程程拓拓扑扑结结构构:进程组内部进程之间的一种相互连接结构,如33 网格,将在后面介绍。33 网格拓扑结构静静态态进进程程个个数数:进程数由命令“mpirun np xxx”初始确定为xxx个,程序执行过程中不不能能动动态改变态改变进程的个数 。2024/8/330MPI重要概念(续)重要概念(续)消消息息缓缓存存区区:应用程序产生的消息包含的数据所处的内存空间。标标准准输输

21、入入:所有进程的标准输入read(*,*)均省缺为当前终端屏幕,且只能由0号进程执行该操作,其他进程需要这些输入参数,只能由0号进程执行数据广播操作。标标准准输输出出:所有进程可以独立执行标准输出write(*,*),但其省缺为当前终端屏幕。2024/8/331MPI函数格式函数格式FORTAN语言中,最后一个参数为该函数调用是否成功的标志:0表示成功,其它表示各种可能的错误。C语言中,该标志有函数参数返回。C : ierr=MPI_Comm_rank(myrank)F : MPI_Comm_rank(myrank,ierr)2024/8/332MPI函数的使用查询函数的使用查询由函数名查询:

22、 man 函数名 ( MPI_Xxxx), 注意大小写,例如 man MPI_Comm_rankman MPI_Sendman MPI_recv2024/8/333MPIMPI函数的学习与使用函数的学习与使用注重MPI函数的各类功能,由应用程序的通信需求出发,寻找匹配的函数类型,在查找具体函数名,采用man命令可以查询该函数的具体参数含义和使用方法。 2024/8/334一般的一般的MPIMPI程序设计流程图程序设计流程图 程序参数说明Call MPI_Init ( )进入MPI系统,通信器 MPI_COMM_WORLD形成Call MPI_Comm_rank ( )Call MPI_Comm

23、_size ( )建立新的通信器、定义新的数据类型和进程拓扑结构2024/8/335一般的一般的MPIMPI程序设计流程图(续)程序设计流程图(续) 应用程序实体:计算控制程序体;进程间通信;Call MPI_Finalize ( )End退出MPI系统2024/8/336MPI并行编程并行编程环境环境进程与消息传递进程与消息传递MPI并行程序设计入门并行程序设计入门初步的初步的MPI消息传递函数消息传递函数先进的先进的MPI函数函数MPI并行程序示例并行程序示例面向性能的程序设计面向性能的程序设计2024/8/337点对点通信(点对点通信(point-to-point)定义:给定属于同一通信

24、器内的两个进程,其中一个发送消息,一个接收消息。MPI系统定义的所有通信方式均建立在点对点通信之上。四四种种模模式式:标标准准模模式式、缓存区模式、同步模式、就绪模式。2024/8/338标准模式点对点通信标准模式点对点通信进程可以随意地发送(接收)消息,与是否存在匹配的消息接收(发送)进程无关。发收匹配:发收不匹配:进程0进程1进程0进程1进程22024/8/339标准模式点对点通信标准模式点对点通信的分类的分类阻阻塞塞式式:消息发送函数返回,用户可以对消息缓存区进行处理,不会影响已发送的消息数据;接收函数返回,用户可以使用接收到的消息数据。非非阻阻塞塞式式:发送和接受函数返回后,必须调用另

25、一类函数来确保它们的正确完成。2024/8/340标准模式点对点通信标准模式点对点通信的分类举例的分类举例2024/8/341点对点通信函数举例点对点通信函数举例阻塞式标准消息发送函数MPI_Send(buf,count,datatype,dest,tag,comm,ierr)Real*8(integer,)buf : 消息发送缓存区起始地址 (Fortran, 用户的待发送的第一个数据)integer count :buf起始的数据单元个数integer datatype :数据类型(基本或用户定义的)integer dest : 接收进程序号integer tag : 消息的标号integ

26、er comm : 通信器integer ierr : 函数调用返回错误码2024/8/342real *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_COM

27、M_WORLD,ierr )阻塞式标准消息发送函数举例阻塞式标准消息发送函数举例2024/8/343 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 statu

28、s(MPI_STATUS_SIZE) : 接收状态数组; integer ierr : 函数调用返回错误码阻塞式标准消息接收函数阻塞式标准消息接收函数 2024/8/344阻塞式标准消息接收函数举例阻塞式标准消息接收函数举例 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

29、(39,40)”call MPI_Recv( b (20,40),20,MPI_DOUBLE_PRECISION,5, & 99999,MPI_COMM_WORLD,status,ierr )其他点对点通信函数:参考手册。2024/8/345聚合通信(聚合通信(CollectiveCommunication)v定定义义:属于同一通信器的所有MPI进程均必须参与的通信操作。v参与方式参与方式:调用同一聚合通信函数。v函数类型函数类型: 同步通信函数:所有进程在某个程序点上同步。 MPI_Barrier ( comm , ierr )全局通信函数全局规约函数 2024/8/346全局通信函数全局通

30、信函数广播: 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 接收2024/8/347全局通信函数(续)全局通信函数(续)索引收集:MPI_Gatherv() all 发送大小不等的数据块root 接收并按索引间断存放索引全收集:MPI_Allgatherv() all 发送大小不等的数据块all 接收并按索引间

31、断存放2024/8/348全局通信函数(续)全局通信函数(续)分散:MPI_Scatter(bufs,bufr,count,dtype,root,comm,ierr)root 发送连续的大小一致的数据块all 接收索引分散:MPI_Scatterv() root 发送间断的的大小不一致的数据块all 接收全交换:MPI_Scatterv()all 发送大小一致数据块到各进程all 接收大小一致数据块并按序号连续存放2024/8/349全局规约全局规约( (global reduction)global reduction)函数函数规约:MPI_Reduce(sbuf,rbuf,count,dt

32、ype,op,root, comm,ierr)规约操作类型op : MPI_SUM, MPI_MIN, MPI_MAX,MPI_PROD等12种。全规约:MPI_Allreduce() 除要求将结果返回到所有进程外,与MPI_Reduce()一致 规约分散:MPI_Reduce_scatter() 将规约结果分散到各进程。 并行前缀计算:MPI_Scan() 2024/8/350MPI并行编程并行编程环境环境进程与消息传递进程与消息传递MPI并行程序设计入门并行程序设计入门初步的初步的MPI消息传递函数消息传递函数先进的先进的MPI函数函数MPI并行程序示例并行程序示例面向性能的程序设计面向性

33、能的程序设计2024/8/351自定义数据类型自定义数据类型定义:在MPI系统已定义的基本数据类型(MPI_INTEGER,MPI_REAL,MPI_DOUBLE_PRECISION,MPI_CHARACTER等)基础上,用户根据需求,自己定义的数据类型。在用户已定义好的数据类型基础上,还可以进一步定义新的数据类型。用户定义的数据类型,必须由函数MPI_Type_Commit()提交给MPI系统;此后,就可以象基本数据类型一样,在消息传递函数中重复使用;并由函数MPI_Type_free()释放。具体自定义数据类型函数,请参考手册。2024/8/352自定义数据类型(续)自定义数据类型(续)

34、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, new

35、type,.) call MPI_Type_free(newtype,ierr) 释放2024/8/353进程拓扑结构进程拓扑结构定义:根据应用程序的特征,在进程间建立的一种虚拟拓扑连接方式,以方便并行程序设计和提高并行计算性能。例:二维规则区域,3*3 区域分解,9个进程,建立Cartesion坐标,进程(i,j)的相邻进程为(i-1,j), (i+1,j), (i,j-1), (i,j+1)。2024/8/354并行并行I/O各进程可以类似于串行程序独立地读/写不同不同的文件。MPICH 1.2以上版本支持所有进程并行读写同一个文件。2024/8/355MPI并行编程并行编程环境环境进程与

36、消息传递进程与消息传递MPI并行程序设计入门并行程序设计入门初步的初步的MPI消息传递函数消息传递函数先进的先进的MPI函数函数MPI并行程序示例并行程序示例面向性能的程序设计面向性能的程序设计2024/8/356MPI并行程序并行程序例例2矩阵乘积:A为MN阶矩阵,B为NL阶矩阵,C为ML阶矩阵。计算矩阵乘积CAB。算法描述:假设使用nprocs个MPI进程,为简单起见假定M和L均为nprocs的倍数。A和C按行等分成子块分别存储在不同的进程中,而B则按列等分成子块分别存储在不同的进程中。A,B和C的子块大小分别为mlocN,Nlloc和mlocL,其中mlocM/nprocs,llocL/

37、nprocs。具体存储方式为(k0,nprocs-1): 存储在进程k的数组A中存储在进程k的数组B中存储在进程k的数组C中2024/8/357MPI并行程序并行程序例例2(续)(续)算法:矩阵A和C的子块不动,矩阵B的子块在各个进程间循环移动。如图,是当nprocs3时的计算流程示意图。A0A1A2B0B1B2 A0B0 A0B1 A0B2C0A1B0 A1B1 A1B2C1A2B0 A2B1 A2B2C2A0B0B2B1A1B1B0B2A2B2B1B0进程1进程2进程32024/8/358MPI并行程序并行程序例例2(续)(续)MPI并行程序:主程序负责分配存储单元并生成矩阵A和B的子块,

38、然后调用子程序matmul完成矩阵的乘法运算。其中nprocs为MPI进程数,myrank为当前进程的MPI进程号。数组A,B和C分别存储矩阵A,B和C的子块。work为工作数组,大小与数组B一样。乘法子程序使用MPI_Sendrecv_replace。(ex1.f)使用异步通信函数MPI_Isend/MPI_Irecv,在适当的硬件环境下它可以使得计算与通信重叠进行。(ex2.f)调用BLAS库函数完成矩阵子块的乘积。选用适当的BLAS库可以大幅度提高程序的实际运行性能。注意,编译该程序时必须与BLAS库连接。(ex3.f)2024/8/359MPI并行程序并行程序例例3 3一维Dirich

39、let问题:算法:均匀网格有限差分离散,Jacobi迭代求解。区域分解:nproc=4, n = 21, ns = (n-1)/nproc+1 =6源程序:1dpoisson.f2024/8/360MPI并行编程并行编程环境环境进程与消息传递进程与消息传递MPI并行程序设计入门并行程序设计入门初步的初步的MPI消息传递函数消息传递函数先进的先进的MPI函数函数MPI并行程序示例并行程序示例面向性能的程序设计面向性能的程序设计2024/8/361设计高性能并行程序的要点与技术设计高性能并行程序的要点与技术划分阶段的性能问题在多存储系统中的数据访问和通信 性能的整合 从处理器角度看到的性能因素 程

40、序设计模型的影响 2024/8/362在分解和分配步骤中,我们可以将并行计算机系统简单地看作是一个相互合作的处理器集合,不用考虑程序设计模型和硬件系统组织。我们只需知道在处理器之间的通信开销是很大的。此时,在算法方面的三个基本要素是:平衡负载,减少花在等待同步事件上的时间减少通信开销减少由确定和管理分配所带来的附加工作不幸的是,即使这三种基本目标也是相互冲突的,必须进行折衷权衡。 划分阶段的性能问题划分阶段的性能问题2024/8/363平衡负载和减少同步等待时间的过程分为四步平衡负载和减少同步等待时间的过程分为四步在分解中识别足够的并发性(数据并行和功能并行);决定管理并发性的方式(静态分配和

41、动态分配的对比);确定并发性开发的粒度;降低序列化和同步代价。2024/8/364在多存储系统中的数据访问和通信在多存储系统中的数据访问和通信多处理器系统也是多存储器系统,多缓存系统。系统这些组成部分的作用对程序执行性能是十分重要的,并且其重要性与程序设计模型无关(尽管程序设计模型可能影响某些性能折衷考虑的特性)。在这里,我们从一种不同的角度来看多处理器系统。多处理器系统看成为扩展的存储层次结构 在扩展的存储层次中的附加通信 用工作集的观念看人为的通信和数据的复制2024/8/365性能的整合性能的整合减少人为通信:开发时间局部性与空间局部性; 将通信结构化以降低开销:通过减少通信开销和降低延

42、迟,增加带宽,减少占有度,提供机制来分散冲突,用计算和通信来重叠通信 。2024/8/366从处理器角度看到的性能因素从处理器角度看到的性能因素在我们通常的分布存储并行系统结构上,并行执行时间有五个分量:忙有用:处理器花在执行指令上的时间,那些指令本来在串行程序中也是要执行的。假设一个直接从串行算法中导出的确定性的并行程序,所有处理器的有用忙时间之和等于串行执行的有用忙时间。忙开销:处理器花在执行那些在串行程序中不需要的指令上的时间。这直接对应于并行程序中的额外工作部分。数据局部:等待数据引用被它自己的存储系统满足的时间;即等待的引用不会产生和其它节点的通信。数据远程:等待数据通信的时间,无论

43、是固有通信还是附加通信。这代表处理器看到的通信代价。2024/8/367同步:等待其它进程给出某个事件发生的信号,有了该信号,本进程才能推进。这包括负载不平衡和程序中的串行化现象,还有实际花在执行同步操作和访问同步变量上的时间。当它等待的时候,一个处理器可能重复检测某个变量的值,直到改变这就要执行指令或者它停滞等待,这取决于同步的实现方式。同步、忙开销、远程数据访问分量是由于并行所引入的开销,在串行程序在单处理器上执行没有。固有通信大多数包含在远程数据分量中,它的某些(通常很小)部分可能也在数据局部分量中体现出来。从处理器角度看到的性能因素(续)从处理器角度看到的性能因素(续)2024/8/3

44、68程序设计模型的影响程序设计模型的影响经验表明,随着应用变得更复杂和更非规则,透明命名和复制的有用性增加,这是倾向于共享存储的观点。然而,由于通信自然是细粒度的(特别是非规则应用),还由于大粒度通信和一致性引起的性能问题,支持共享空间就要求有大胆的通信系统结构,用硬件来支持大多数功能。许多计算机公司现在正建造这样的机器,作为它们的高端系统。在另一方面,便宜的工作站或者多处理器群也正在逐步流行起来。这些系统通常是消息传递程序设计的,这是由于消息传递的性能模型比较好定义,可以用大消息来分摊开销,程序员有显式的控制,以及不同的机器操作粒度对性能的相对影响不大。2024/8/369总结评述总结评述我们已经看到,性能的方方面面是相互制约的,设计好的并行程序的艺术在于在相互矛盾的要求中获得适当的折衷。以高性能为目标的程序设计也是一个逐步求精的过程:在后面所发现的系统或者程序的特点,可能导致在前一个步骤中作的决定被修改。将性能的潜力都发挥出来可能需要很大的努力,这取决于应用和系统两个方面。进而,不同技术一起发挥作用的程度和方式能够大大影响表现给系统结构的负载的特点。 2024/8/370问题讨论请联系王振海、赵俊峰Tel:88493550-17 Email:zhaojf_2024/8/371Thanks!2024/8/372

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号