进程高性能计算

高性能计算  时间:2021-03-29  阅读:()

国家973项目高性能计算环境支持讲座MPI与PETSc日期内容8.
15上午进程与消息传递、MPI应用现状、MPI并行程序设计入门、初步的MPI消息传递函数下午作业一、讨论8.
16上午作业一讲评、先进的MPI函数、并行程序示例2、MPI的发展下午作业二、讨论8.
17上午作业二讲评、并行可扩展科学计算工具箱PETSc介绍下午PETSc程序示例个人介绍莫则尧,男,汉族,1971年7月生,副研究员:1992年国防科技大学应用数学专业本科毕业;1997年国防科技大学计算机应用专业并行算法方向博士毕业;1999年北京应用物理与计算数学数学博士后流动站出站,并留所工作;主要从事大规模科学与工程并行计算研究.
消息传递并行编程环境MPI进程与消息传递MPI环境的应用现状MPI并行程序设计入门(程序例1)初步的MPI消息传递函数作业一先进的MPI函数MPI并行程序示例2(求解-(u=f);MPI环境的发展作业二一、进程与消息传递1.
单个进程(process)进程是一个程序,同时包含它的执行环境(内存、寄存器、程序计数器等),是操作系统中独立存在的可执行的基本程序单位;通俗理解:串行应用程序编译形成的可执行代码,分为"指令"和"数据"两个部分,并在程序执行时"独立地申请和占有"内存空间,且所有计算均局限于该内存空间.
2.
单机内多个进程:多个进程可以同时存在于单机内同一操作系统:由操作系统负责调度分时共享处理机资源(CPU、内存、存储、外设等);进程间相互独立(内存空间不相交):在操作系统调度下各自独立地运行,例如多个串行应用程序在同一台计算机中运行;进程间可以相互交换信息:例如数据交换、同步等待,消息是这些交换信息的基本单位,消息传递是指这些信息在进程间的相互交换,是实现进程间通信的唯一方式;最基本的消息传递操作:发送消息(send)、接受消息(receive)、进程同步(barrier)、规约(reduction);消息传递的实现:共享内存或信号量,用户不必关心;进程1进程2发送数据接收数据(消息传递)内存空间3.
包含于通过网络联接的不同计算机的多个进程:进程独立存在:进程位于不同的计算机,由各自独立的操作系统调度,享有独立的CPU和内存资源;进程间相互信息交换:消息传递;消息传递的实现:基于网络socket机制,用户不必关心;4.
消息传递库函数:应用程序接口(API):提供给应用程序(FORTRAN、C、C++语言)的可直接调用的完成进程间消息传递的某项特定功能的函数;消息传递库:所有定义的消息传递函数编译形成的软件库,调用其内部函数的应用程序,通过与之联接,即可成为可并行执行的程序;目前流行的消息传递函数库:PVM3.
3.
11、MPICH1.
2、LAMMPI6.
4等;5.
标准消息传递界面(MPI:MessagePassingInterface):MPI标准:根据应用程序对消息传递功能的需求,全球工业、应用和研究部门联合推出标准的消息传递界面函数,不考虑其具体实现,以保证并行应用程序的可移植性;MPI的具体实现:消息传递库函数,目前有影响的为MPICH和LAMMPI,我们注重MPICH系列;6.
基于消息传递的并行程序执行模式:SPMD模式:单程序多数据流可执行代码运行MPMD模式:多程序多数据流,除初始启动多个可执行代码,其余与SPMD模式一致;7.
共享存储与分布式存储:属于并行机体系结构的范畴,与消息传递并行程序设计平台无关;节点分布式存储共享存储消息传递是相对于进程间通信方式而言的,与具体并行机存储模式无关,任何支持进程间通信的并行机,均可支持消息传递并行程序设计;几乎所有共享和分布存储并行计算环境均支持进程间的消息传递通信;二、MPI环境的应用现状MPI(消息传递界面)是全球工业、政府和科研部门联合推出的适合进程间进行标准消息传递的并行程序设计平台,最初版MPI1.
0本于1994年6月推出,目前最新的为MPI2.
0版,于1998年年低推出;MPI的具体实现:MPICH和LAMMPI,目前均已实现MPI1.
2版,适用于任何并行计算平台;部分并行机已实现MPI2.
0版;MPI是目前应用最广的并行程序设计平台,几乎被所有并行计算环境(共享和分布式存储并行机、MPP、机群系统等)和流行的多进程操作系统(UNIX、WindowsNT)所支持,基于它开发的应用程序具有最佳的可移植性;目前高效率的超大规模并行计算(1000个处理器)最可信赖的平台;工业、科学与工程计算部门的大量科研和工程软件(气象、石油、地震、空气动力学、核等)目前已经移植到MPI平台,发挥了重要作用;目前,MPI相对于PVM:优点:功能强大,性能高,适应面广,使用方便,可扩展性好;缺点:进程数不能动态改变;三、MPI并行程序设计入门MPI并行程序设计平台由标准消息传递函数及相关辅助函数构成,多个进程通过调用这些函数(类似调用子程序),进行通信;MPI程序:SPMD执行模式:一个程序同时启动多份,形成多个独立的进程,在不同的处理机上运行,拥有独立的内存空间,进程间通信通过调用MPI函数来实现;每个进程开始执行时,将获得一个唯一的序号(rank).
例如启动P个进程,序号依次为0,1,…,P-1;MPI程序例1:进程0发送一个整数给进程1;进程1将该数加1,传递给进程2;进程2再将该数加1,再传递给进程3;依次类推,最后,进程P-1将该数传递给进程0,由进程0负责广播该数给所有进程,并打印输出.

programexample1include"mpif.
h"MPI系统头文件integerstatus(MPI_STATUS_SIZE),my_rank,p,source,dest,tag,ierr,datacc-------进入MPI系统callMPI_Init(ierr)callMPI_Comm_rank(MPI_COMM_WORLD,my_rank,ierr)callMPI_Comm_size(MPI_COMM_WORLD,p,ierr)cc-------数据交换data=0tag=5source=my_rank-1if(source.
eq.
-1)source=p-1dest=my_rank+1if(dest.
eq.
p)dest=0if(my_rank.
eq.
0)thencallMPI_Send(data,1,MPI_INTEGER,dest,tag,MPI_COMM_WORLD,ierr)callMPI_Recv(data,1,MPI_INTEGER,source,tag,MPI_COMM_WORLD,status,ierr)elsecallMPI_Recv(data,1,MPI_INTEGER,source,tag,MPI_COMM_WORLD,status,ierr)data=data+1callMPI_Send(data,1,MPI_INTEGER,dest,tag,MPI_COMM_WORLD,ierr)endifcc-------广播数据callMPI_Bcast(data,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr)cc------打印输出if(my_rank.
eq.
0)thenif(data.
eq.
p-1)thenprint*,"Successful,data=",dataelseprint*,"Failure,data=",dataendifendifccallMPI_Finalize(ierr)end编译命令:mpif77-oexam.
eexample.
f运行命令:mpirun–np4exam.
e运行效果:MPI系统选择相同或不同的4个处理机,在每个处理机上运行程序代码exam.
e.
MPI函数进程0进程1进程2进程3Init()Comm_rank()my_rank=0myrank=1myrank=2my_rank=3Comm_size(p=4p=4p=4p=4tag=5,data=0tag=5,data=0tag=5,data=0tag=5,data=0source=3source=0source=1source=2dest=1dest=2dest=3dest=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()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,DOUBLEPRECISION,COMPLEX,LOGICAL,CHARACTER),MPI系统提供已定义好的对应数据类型(MPI_INTEGER,MPI_REAL,MPI_DOUBLE_PRECISION,MPI_COMPLEX,MPI_LOGICAL,MPI_CHARACTER);自定义数据类型:基于基本数据类型,用户自己定义的数据类型(后面介绍);MPI对象:MPI系统内部定义的数据结构,包括数据类型、进程组、通信器等,它们对用户不透明,在FORTRAN语言中,所有MPI对象均必须说明为"整型变量INTEGER";MPI联接器(handle):联接MPI对象和用户的桥梁,用户可以通过它访问和参与相应MPI对象的具体操作;例如,MPI系统内部提供的通信器MPI_COMM_WORLD;在FORTRAN语言中,所有MPI联接器均必须说明为"整型变量INTEGER";进程拓扑结构:进程组内部进程之间的一种相互连接结构,如3(3网格,将在后面介绍.
3(3网格拓扑结构静态进程个数:进程数由命令"mpirun–npxxx"初始确定为xxx个,程序执行过程中不能动态改变进程的个数;消息缓存区:应用程序产生的消息包含的数据所处的内存空间;标准输入:所有进程的标准输入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),注意大小写,例如manMPI_Comm_rank,manMPI_Send,manMPI_recv.
MPI函数的学习与使用:注重MPI函数的各类功能,由应用程序的通信需求出发,寻找匹配的函数类型,在查找具体函数名,采用man命令可以查询该函数的具体参数含义和使用方法.
7.
一般的MPI程序设计流程图进入MPI系统,通信器MPI_COMM_WORLD形成退出MPI系统四、初步的MPI消息传递函数1.
点对点通信(point-to-point)定义:给定属于同一通信器内的两个进程,其中一个发送消息,一个接收消息;MPI系统定义的所有通信方式均建立在点对点通信之上;四种模式:标准模式、缓存区模式、同步模式、就绪模式;2.
标准模式点对点通信进程可以随意地发送(接收)消息,与是否存在匹配的消息接收(发送)进程无关;发收匹配:发收不匹配:两类:阻塞式:消息发送函数返回,用户可以对消息缓存区进行处理,不会影响已发送的消息数据;接受函数返回,用户可以使用接受到的消息数据;非阻塞式:发送和接受函数返回后,必须调用另一类函数来确保它们的正确完成;阻塞式非阻塞式INTEGERAINTEGERAA=100A=100MPI_Send(A,1,MPI_Isend(A,1,…)A=200A=200消息数据:A=100A=100或A=200MPI_Isend(A,1,…flag,…)MPI_Wait(flag,…)A=200消息数据:A=100A=1003.
点对点通信函数举例阻塞式标准消息发送函数MPI_Send(buf,count,datatype,dest,tag,comm,ierr)Real*8(integer,…)buf:消息发送缓存区起始地址(Fortran,用户的待发送的第一个数据)integercount:buf起始的数据单元个数integerdatatype:数据类型(基本或用户定义的)integerdest:接收进程序号integertag:消息的标号integercomm:通信器integerierr:函数调用返回错误码real*8a(100,100)integerb(60,60)c-----发送50个双精度数"a(5,20):a(54,20)"到2号进程callMPI_Send(a(5,20),50,MPI_DOUBLE_PRECISION,2,99999,MPI_COMM_WORLD,ierr)c-----发送20个整型数"b(20,40):b(39,40)"到5号进程callMPI_Send(b(20,40),20,MPI_DOUBLE_PRECISION,5,99999,MPI_COMM_WORLD,ierr)阻塞式标准消息接收函数MPI_Recv(buf,count,datatype,dest,tag,comm,status,ierr)Real*8(integer,…)buf:消息接收缓存区起始地址(Fortran,用户用于接受的第一个数据)integercount:buf起始的数据单元个数integerdatatype:数据类型(基本或用户定义的)integerdest:发送进程序号integertag:消息的标号integercomm:通信器integerstatus(MPI_STATUS_SIZE):接收状态数组;integerierr:函数调用返回错误码real*8a(100,100)integerb(60,60)c-----从2号进程接收50个双精度数到"a(5,20):a(54,20)"callMPI_Recv(a(5,20),50,MPI_DOUBLE_PRECISION,2,99999,MPI_COMM_WORLD,status,ierr)c-----从5号进程接收20个整型数到"b(20,40):b(39,40)"callMPI_Recv(b(20,40),20,MPI_DOUBLE_PRECISION,5,99999,MPI_COMM_WORLD,status,ierr)其他点对点通信函数:参考手册;4.
聚合通信(CollectiveCommunication)定义:属于同一通信器的所有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接受并按索引间断存放索引全收集: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()全局规约(globalreduction)函数:规约:MPI_Reduce(sbuf,rbuf,count,dtype,op,root,comm,ierr);规约操作类型op:MPI_SUM,MPI_MIN,MPI_MAX,MPI_PROD等12种;例子:求两个向量的内积,并将结果返回进程0subroutinepar_blas1(m,a,b,c,comm)reala(m),b(m)localsliceofarrayrealc!
resultrealsumintegerm,comm,i,ierrcc!
localsumsum=0.
0d0doi=1,msum=sum+a(i)*b(i)enddoc!
globalsumcallMPI_Reduce(sum,c,1,MPI_REAL,MPI_SUM,0,comm,ierr)全规约:MPI_Allreduce(),除要求将结果返回到所有进程外,与MPI_Reduce()一致;规约分散:MPI_Reduce_scatter(),将规约结果分散到各进程;并行前缀计算:MPI_Scan()五、作业一P个进程,第i个进程将其包含100个双精度数据的数组A(100)传送给第(i+1)modP个进程,同时从第(i-1)modP个进程接受100个双精度数据到另一个数组B(100)中,令数组C(1:100)=A(1:100)+B(1:100),然后求数组C(1:100)各元素的类加和,最后在将该和全部累加到0号进程,打印并输出该和.

hostkvm:7折优惠-香港VPS韩国VPS,8折优惠-日本软银、美国CN2 GIA、新加坡直连VPS

hostkvm本月对香港国际线路的VPS、韩国CN2+bgp线路的VPS正在做7折终身优惠,对日本软银线路、美国CN2 GIA线路、新加坡直连线路的VPS进行8折终身优惠促销。所有VPS从4G内存开始支持Windows系统,当然主流Linux发行版是绝对不会缺席的!官方网站:https://hostkvm.com香港国际线路、韩国,7折优惠码:2021summer日本、美国、新加坡,8折优惠码:2...

2021年国内/国外便宜VPS主机/云服务器商家推荐整理

2021年各大云服务商竞争尤为激烈,因为云服务商家的竞争我们可以选择更加便宜的VPS或云服务器,这样成本更低,选择空间更大。但是,如果我们是建站用途或者是稳定项目的,不要太过于追求便宜VPS或便宜云服务器,更需要追求稳定和服务。不同的商家有不同的特点,而且任何商家和线路不可能一直稳定,我们需要做的就是定期观察和数据定期备份。下面,请跟云服务器网(yuntue.com)小编来看一下2021年国内/国...

Vultr VPS韩国首尔机房速度和综合性能参数测试

Vultr 商家有新增韩国首尔机房,这个是继日本、新加坡之后的第三个亚洲机房。不过可以大概率知道肯定不是直连中国机房的,因为早期的日本机房有过直连后来取消的。今天准备体验看看VULTR VPS主机商的韩国首尔机房的云服务器的速度和性能。1、全球节点PING速度测试这里先通过PING测试工具看看全球几十个节点的PING速度。看到好像移动速度还不错。2、路由去程测试测试看看VULTR韩国首尔机房的节点...

高性能计算为你推荐
百度商城百度商城知道在哪个地方,怎么找不到啊陈嘉垣陈浩民狼吻陈嘉恒是什么时候的事rawtools相机中的RAW是什么意思?www.99cycy.com谁在这个http://www.sifangmall.com网站上买过东西?菊爆盘请问网上百度贴吧里有些下载地址,他们就直接说菊爆盘,然后后面有字母和数字,比如dk几几几的,关键词分析如何进行关键词指数分析官人放题求日本放题系列电影,要全集越多越好,求给力盗车飞侠请教:游戏盗车飞侠4怎么开飞机,怎么买枪,怎么开坦克啊?夏琦薇赞夏琦薇的人有多少?www.38.com求一能在线观看电影38度的地址`!
域名备案 厦门域名注册 什么是二级域名 新通用顶级域名 lnmp 新加坡主机 轻博客 密码泄露 全能主机 华为网络硬盘 gg广告 qingyun 域名转接 699美元 tna官网 美国在线代理服务器 四川电信商城 东莞服务器托管 测试网速命令 阿里dns 更多