您的位置: 酒泉信息港 > 养生

并行计算为您揭晓多核并行计算是什么

发布时间:2019-05-15 04:34:20

1 : 为您揭晓多核并行计算是甚么

由处理器技术的发展而催生的多核技术带动了软件编程的变革.

之前只有在超级计算机中才能体验的并行计算目前被普及到了台式机中.

在多核技术没有产生之前,台式机中有1种多CPU的架构:对称式多处理器,在1块主板上放置多块CPU的技术,但是这类主板架构当时来说也非常昂贵,winNT支持这类技术,1般在服务器上才被利用.

多核CPU的产生,开启了并行计算的美好篇章,普通开发者/用户都可以便宜的得到它(xp支持这类多核CPU,win98则不支持).

多核CPU架构与多CPU架构并没有太大区分,只是将芯片封装的更紧密,本钱更低而已.

在的Intel i7系列处理器上同时支持多核与超线程,这意味着处理器将扩充1倍的内核数量,如4核心CPU,将被操作系统辨认为8核心.

例如在1个主板上有4个CPU插槽,每个槽插1个4核的CPU,并且每核都具有超线程,那末将会有32个线程共同履行代码(32位windows支持CPU数量的极限),这太帅了,不是吗?

概念

Concurrent(并发)与Parallel(并行)

并发是用来描写并行履行的方式(看上去1起产生的事件,例如目前操作系统的多任务调度程序,看上去桌面上有许多程序在同时运行.),并发是形容词.

并行是指通过并发将1个操作分解成1组粒度更细的工作单元,并且这些工作单元可以在不同的处理器内核上运行.并行是动词,指必须有两个以上的事件产生.

工作单元,以粒度可分为小到单1CPU指令,大到函数或系统任务.

并行有数据并行性与任务并行性

数据并行性指对许多数据实行相同的并行操作,比如对1组数的每个数进行加法操作.

任务并行性指对相同的1组数据实行不同的并行操作,比如1个履行加法操作,而另外一个实行乘法操作.

的多核微处理器:

AMD Multicore Opteron

Intel Core2 Duo

并行编程的麻烦:内存1致模型简称内存模型

缓存1致性(cache coherency) 将缓存与主内存数据进行同步

内存1致性模型(memory consistency model)

CPU可以对内存的读取或写入操作重新排序(乱序实行Out of Order),而致使内存1致性的产生.就是指CPU中实际内存访问操作与程序代码中内存访问操作的不1致性程度.

CPU的硬件架构决定了内存模型的强度,强度越高写代码就会更容易.

x86/64架构的CPU有较强的内存1致性模型,而安腾系列处理器Itanium(IA⑹4)是较弱的模型.它为了提高性能(没必要根踪缓存行的状态)不会主动刷新缓存,而是提供指令操作缓存刷新到主内存.

还有1些软件实现的内存模型,比如java虚拟机和.NET CLR,它们都是比较强的内存模型,而且不斟酌具体的硬件实现.

解决办法:内存栅栏(memory fence)

内存栅栏可以禁止目标架构对指令进行重排.利用语言平台的特性或原子方法可以实现内存栅栏,比如.net中的Interlocked类方法,c++中的volatile变量.

附录1些并行库:

Single Unix Specification的POSIX线程库.

Intel的TBB线程库.

Standard Template Adaptive Parallel Library,STAPL:标准模板适配并行库.

并行编程库必须得到操作系统的支持,如果系统没有相应功能api,上面那些并行库也就1无是处了.

原文标题:并行编程 - 给不及格的程序员

链接:

2 : PAC专访 | PAC发力并行计算时期

并行计算时期,PAC大赛究竟获得了甚么成果?国防科大在PAC大赛中有出色的表现,对学校的学科建设又带来了哪些影响?为此,并行科技采访了比赛评审委员会利用组副主席、国家超级计算广州中心主任卢宇彤教授。

PAC集培训 普及 选拨并行利用为1体

PAC:

您认为戈登贝尔奖与PAC大赛有哪些异同、虽然HPC在我国发展愈受重视,但是难以诞生戈登贝尔奖的缘由有哪些?

卢宇彤:

戈登贝尔奖主要面向超算和科学利用专业人士,为了发现利用,关注利用的科学意义和模型的先进性、算法的可扩大性、程序性能的运行优化性,鼓励利用与系统共同发展。

而PAC大赛做得更多,触及的面更广,可以说它是集培训、普及、提拔并行利用为1体的比赛,目标更广泛,组委会付出的努力更多,使得赛事受益的面会更广。

提到超算利用的水平,不但与超算系统能力相干,更重要的是与领域科学研究的水平相干。

我国在整体科技实力和科研水平上与发达国家相比还有比较大的差距,特别是在关键技术的创新与突破方面,在相干领域科学问题的模型建立和算法研究上缺少原创成果。

另外一方面超算人材的短缺,并行利用软件的投入偏少、交叉领域合作的不充分、没有构成并行计算的良好氛围等也是难以诞生戈登贝尔奖的缘由。

PAC大赛以普及推行并行计算为目标

PAC:

PAC大赛的主旨有哪些,是不是得到了实现?为了PAC举行越发完善,您有哪些意见和建议?

卢宇彤:

PAC大赛3届以来,以普及推行并行计算为目标,始终如1。

比赛范围从小到大,触及领域从点到面,权威性逐步加强,比赛更加规范。近几年来,PAC比赛不管从参赛队伍的覆盖面、评委组成的权威性、比赛题目选择的适度性和利用领域的广泛性上,都发展很快,而且越办越好。

PAC助推并行思想付诸实际利用

PAC:

国防科大1直是PAC大赛佼佼者,大赛的洗礼给学生带来了哪些影响?2015年夺冠,有无甚么事令您印象深入?对学科建设带来哪些推动作用?

卢宇彤:

学生参赛有助于开阔眼界,学以致用,从理论中来到实践中去,把并行的思想真正付诸利用,培养学生的独立思考和解决问题的能力,培养团队协作能力,面对竞争压力下发挥水平的能力,和对问题总结提高和表达能力,对学生个人的综合素质提高非常有帮助。

比赛的获胜,鼓舞了学生的学习积极性,坚定了他们选择并行计算领域作为工作方向的决心。比赛的前期人员投入和后期人员跟进直接推动了科大在计算流体和生物信息方向等研究的深入和和实际利用的结合。

PAC以赛促学 以赛促练 以赛促用

PAC:

PAC的参赛队伍及范围越来越大,您认为可以给HPC人材培养带来哪些改变?PAC的价值又在哪里?

卢宇彤:

HPC人材培养需要全社会的努力,大学、企业、政府要联合支持,除大学对学生的并行思维和技能的教育,还要企业的需求引导、行业拓展、人才的再培养等,政府也需要给予政策上、项目上对高新关键技术人材的支持。

随着PAC比赛的范围化发展,对大学并行计算教学带来了增进,对学生学习并行计算的思想和方法带来了改变,也对行业产业并行计算的影响力带来了扩大效应。

PAC的价值在于传播和推行并行计算理念和方法,展现和宣扬并行利用的价值和潜能,培养和发现并行计算领域的人材,为提高我国高性能计算系统和利用的水平做出了1定的贡献。

PAC这类比赛,可以起到以赛促学、以赛促练、以赛促用的作用。

计算机教育实行差异化培养

PAC:

基于您丰富的行业经验,您认为我国的教育信息化及计算机教育水平未来的发展趋势如何?您又有哪些经验和关注点可以与我们分享?

卢宇彤:

目前我国教育信息化和计算机教育水平与发达国家相比还是有很多的差距,与我国信息化快速发展的势头不相匹配,应当大力推动教育改革,加强信息化建设,计算机教育应当多关注实践能力,实行差异化培养,关注学生自我学习的能力和方法学的培养,打牢基础,加强实践,鼓励创新。

卢 宇 彤: 教授 博导 国家超级计算广州中心主任 银河/天河工程副总设计师

1直从事高性能计算机系统软件和利用软件的研发工作,前后参加了5代不同体系结构的国产银河系列、2代天河系列超级计算机研制。获国家科技进步特等奖1项、国家科技进步1等奖1项、部委级科技进步1等奖4项、2等奖6项。屡次在国际超算领域会议上作大会主题报告。是IEEE期刊TPDS的副主编,是国际E级计算IESP和BDEC组织成员,在国际期刊和会议上发表论文70余篇,授权专利18项,合著书3本。中国计算机学会理事、女工委主任、高性能专业委员会常务委员。

3 : 并行计算

并行计算期末作业

张朋举

(南京师范大学数科院计算数学专业学号:)

指点老师:王雨顺朱莹

本文首先简单介绍2维区域上Poisson方程的5点差分离散和如何用Jacobi迭代来求解所导出的线性方程组。[)在此基础上给出基于区域分解的并行算法和MPI并行程序FORTRAN代码。

1

1.12维Poisson方程相干知识2维Poisson方程

斟酌定义在2维规则区域上的Poisson方程:

?????u(x,y)=f(x,y)(x,y)∈?=(0,W)×(0,H)

u(x,y)|??=g(x,y)(1)

其中,f(x,y)和g(x,y)为已知函数,分别定义在区域?的内部和边界。

沿坐标轴x和y方向,分别取步长:

hx=W,IMhy=H

JM(2)

将区域?离散成范围为IM×TM的格,其中IM和JM分别为沿坐标轴x和y方向的格单元个数。

假定方程(1)的离散解u(x,y)定义在所有格结点上,且用以下未知量表示:

??ui,j=u(i×hx,j×hy),

ui,j=gi,j=g(i×hx,j×hy),

用2阶中心差商近似导数:

??uxx(i×hx,j×hy)≈

uyy(i×hx,j×hy)≈

并记

fi,j=f(i×hx,j×hy)(5)ui?1,j?2ui,j+ui+1,jxui,j?1?2ui,j+ui,j+1y1≤i≤IM?1,1≤j≤JM?1i=0ori=IMorj=0orj=JM(3)(4)

1

并行计算 并行计算

将以上公式代入方程(1),便得到了它的5点差分离散。()而问题则转化为求解稀疏线性代数方程组:

222222(h2x+hy)ui,j?hy(ui?1,j+ui+1,j)?hx(ui,j?1+ui,j+1)=hxhyfi,j,

1≤i≤IM?1,1≤j≤JM?1

(6)

该方程组包括(IM?1)×(JM?1)个未知量ui,j,i=1,2,···,IM⑴,j=1,2,···,JM⑴。

这里,采取众所周知的点Jacobi迭代算法求解方程组(6)。从任意1个初始近似解

u0i,j,i=1,2,···,IM?1,

动身,迭代计算

uki,jk?1k?1k?12k?122h2xhyfi,j+hy(ui?1,j+ui+1,j)+hx(ui,j?1+ui,j+1)=22(h2x+hy)j=1,2,···,JM?1

i=1,2,···,IM⑴,

k=1,2,···,直到近似解uki,j满足误差要求。j=1,2,···,JM⑴

在程序实例中取f(x,y)=?4,方程(1)的解析解为u(x,y)=x2+y2,此时离散方程和原方程的解是1样的。由于离散方程的精确解已知,因此程序中直接比较近似解与精确解之间的误差来判断近似解是不是满足误差要求,当不知道离散方程的精确解时,可以计算近似解的余量来判断是不是到达收敛要求。初始近似解取为u0i,j=0,i=1,2,···,IM?1,j=1,2,···,JM?1。

1.2并行算法设计

设计求解方程(1)的MPI并行算法必须斟酌1下两个关键问题。

第1,选择恰当的区域分解策略,将区域?分解成多个子区域,分配给不同的进程,并保证进程间的负载平衡和小的消息传递通讯开消。通常有两种方式:

(1)沿x方向或y方向的1维条分解策略;

(2)沿两个方向的2维快分解策略。明显,如果某个方向的进程个数等于1,则2维快分解策略就退化为1维条分解策略。不管哪一种方式,都应当尽量保证每个子区域包括的格结点个数相等,由于这样才能保证进程间的负载平衡。

第2,选择适合的通讯数据结构,由式(6)可知,在任意格结点上实行Jacobi点迭代也要知道该结点上、下、左、右4个相邻结点上的近似解。因此,在每次Jacobi迭代之前,每个进程必须与其相邻的进程交换边界结点上的近似解。

2

并行计算 并行计算

2

2.1MPI并行程序设计程序说明

下面基于以上2维快区域分解策略和通讯数据结构,给出求解差分方程(6)的MPI并行程序的FORTRAN代码,其中近似解定义在格结点上。[]为简单起见,这里假定进程数p=NPX×NPY,NPX和NPY分别是沿x方向和y方向的进程个数,格单元个数IM和JM能分别被NPX和NPY整除,子区域的格范围为IML×JML,其中IML=IM,JML=JM

,进程按自然序排列(先沿x方向,后沿y方向)。

2.2相干程序

点Jacobi迭代MPI并行程序,即2维块分解策略。

Poisson方程求解:使用阻塞通讯。

INCLUDE’mpif.h’

PARAMETER(DW=2.0,DH=3.0)

PARAMETER(IM=30,JM=60)

PARAMETER(NPX=1,NPY=1)/*问题求解区域沿X、Y方向的大小*//*沿X、Y方向的全局格范围*//*沿X、Y方向的进程个数*/

PARAMETER(IML=IM/NPX,JML=JM/NPY)

/*各进程沿X、Y方向的局部格范围,仅为全局格范围的1/(NPX*NPY)*/REALU(0:IML+1,0:JML+1)

REALUS(0:IML+1,0:JML+1)

REALU0(IML,JML)

REALF(IML,JML)

INTEGERNPROC/*定义在格结点的近似解*//*定义在格结点的精确解*//*Jacobi迭代辅助变量*//*函数f(x,y)在格结点上的值*//*mpirun启动的进程个数,必须等于NPX*NPY*/INTEGERMYRANK,MYLEFT,MYRIGHT,MYUPPER,MYLOWER

/*各进程本身的进程号,4个相邻进程的进程号*/

INTEGERMEPX,MEPY

REALXST,YST

REALHX,HY/*各进程本身的进程号沿X、Y方向的坐标*//*各进程具有的子区域沿X、Y方向的起始坐标*//*沿X、Y方向的格离漫步长*/

REALHX2,HY2,HXY2,RHXY

INTEGERIST,IEND,JST,JEND

/*各进程沿X、Y方向的内部格结点的起始和终止坐标*/

INTEGERHTYPE,VTYPE

/*MPI用户自定义数据类型,表示各进程沿X、Y方向*/

/*与相邻进程交换的数据单元*/

INTEGERREQ(8),STATUS(MPI-STATUS-SIZE,8)

3

并行计算 并行计算

DOUBLEPRECISIONT0,T1

In-linefunctions

solution(x,y)=x**2+y**2

rhs(x,y)=⑷.0

/*程序可履行语句开始*/

CALLMPI-Init(IERR)

CALLMPI-Comm-size(MPI-COMM-WORLD,NPROC,IERR)

IF(X*D(IM,NPX).D(JM,NPY).NE.0)THENPRINT*,’+++mpirun-npxxxerrorORgridscaleerror,’,

’exitout+++’

CALLMPI-Finalize(IERR)

STOP

ENDIF

/*按自然序(先沿X方向,后沿Y方向)肯定各进程本身及其4个相邻进程的进程号*/CALLMPI-Comm-rank(MPI-COMM-WORLD,MYRANK,IERR)

MYLEFT=MYRANK⑴

IF(MOD(MYRANK,NPX).EQ.0)MYLEFT=MPI-PROC-NULL

MYRIGHT=MYRANK+1

IF(MOD(MYRIGHT,NPX).EQ.0)MYRIGHT=MPI-PROC-NULL

MYUPPER=MYRANK+NPX

IF(ROC)MYUPPER=MPI-PROC-NULL

MYLOWER=MYRANK-NPX

IF(.0)MYLOWER=MPI-PROC-NULL

MEPY=MYRANK/NPX

MEPX=MYRANK-MEPY*NPX

/*对应2维NPYxNPXCartesian行主序坐标为(MEPY,MEPX).基本变量赋值,肯定各进程负责的子区域*/

HX=DW/IM

HX2=HX*HX

HY=DH/JM

HY2=HY*HY

HXY2=HX2*HY2

RHXY=0.5/(HX2+HY2)

DX=HX2*RHXY

DY=HY2*RHXY

DD=RHXY*HXY2

4/*解析解*//*Poisson方程源项(右端项)*/

并行计算 并行计算

XST=MEPX*DW/NPX

YST=MEPY*DH/NPY

IST=1

IEND=IML

IF(X⑴)IEND=IEND⑴

JST=1

JEND=JML

IF(Y⑴)JEND=JEND⑴

/*数据类型定义*/

CALLMPI-Type-contiguous(IEND-IST+1,MPI-REAL,HTYPE,IERR)CALLMPI-Type-commit(HTYPE,IERR)

/*沿X方向的连续IEND-IST+1个MPI-REAL数据单元,*/

/*可用于表示该进程与其上、下进程交换的数据单元*/

CALLMPI-Type-vector(JEND-JST+1,1,IML+2,MPI-REAL,VTYPE,IERR)CALLMPI-Type-commit(VTYPE,IERR)

/*沿Y方向的连续JEND-JST+1个MPI-REAL数据单元,*/

/*可用于表示该进程与其左、右进程交换的数据单元*/

/*初始化*/

DOJ=JST⑴,JEND+1

DOI=IST⑴,IEND+1

xx=(I+MEPX*IML)*HX/*xx=XST+I*HX*/

yy=(J+MEPY*JML)*HY/*yy=YST+J*HY*/

IF(ND)THENU(I,J)=0.0/*近似解赋初值*/

/*解析解*/

/*右端项*/US(I,J)=solution(xx,yy)F(I,J)=DD*rhs(xx,yy)/*上边的区域Y方向少1个点*//*右侧的区域X方向少1个点*/

ELSEIF((T⑴..0).OR.

(T⑴..0).OR.

(ND+X⑴).OR.

(ND+Y⑴))THEN

U(I,J)=solution(xx,yy)

ENDIF

ENDDO

ENDDO

/*Jacobi迭代求解*/

NITER=0

5/*边界值*/

并行计算 并行计算

T0=MPI-Wtime()

100CONTINUE

NITER=NITER+1

/*非阻塞地交换定义在辅助格结点上的近似解*/

CALLMPI-Isend(U(1,1),1,VTYPE,MYLEFT,NITER+100,MPI-COMM-WORLD,REQ(1),IERR)

MPI-COMM-WORLD,REQ(2),IERR)

MPI-COMM-WORLD,REQ(3),IERR)

MPI-COMM-WORLD,REQ(4),IERR)

MPI-COMM-WORLD,REQ(5),IERR)

MPI-COMM-WORLD,REQ(6),IERR)

MPI-COMM-WORLD,REQ(7),IERR)

MPI-COMM-WORLD,REQ(8),IERR)

DOJ=JST+1,JEND⑴

DOI=IST+1,IEND⑴

U0(I,J)=F(I,J)+DX*(U(I,J⑴)+U(I,J+1))+DY*(U(I⑴,J)+U(I+1,J))ENDDO

ENDDO

CALLMPI-Waitall(8,REQ,STATUS,IERR)

DOJ=JST,JEND,JEND-JST

DOI=IST,IEND

U0(I,J)=F(I,J)+DX*(U(I,J⑴)+U(I,J+1))+DY*(U(I⑴,J)+U(I+1,J))ENDDO

ENDDO

DOJ=JST,JEND

DOI=IST,IEND,IEND-IST

U0(I,J)=F(I,J)+DX*(U(I,J⑴)+U(I,J+1))+DY*(U(I⑴,J)+U(I+1,J))ENDDO

ENDDO

6/*阻塞式等待消息传递的结束*//*发送左边界*//*发送右侧界*//*发送下边界*//*发送上边界*//*接收右边界*//*接收左侧界*//*接收上边界*//*接收下边界*/CALLMPI-Isend(U(IEND,1),1,VTYPE,MYRIGHT,NITER+100,CALLMPI-Isend(U(1,1),1,HTYPE,MYLOWER,NITER+100,CALLMPI-Isend(U(1,JEND),1,HTYPE,MYUPPER,NITER+100,CALLMPI-Irecv(U(IEND+1,1),1,VTYPE,MYRIGHT,NITER+100,CALLMPI-Irecv(U(0,1),1,VTYPE,MYLEFT,NITER+100,CALLMPI-Irecv(U(1,JEND+1),1,HTYPE,MYUPPER,NITER+100,CALLMPI-Irecv(U(1,0),1,HTYPE,MYLOWER,NITER+100,

并行计算 并行计算

/*计算与精确解间的误差*/

ERR=0.0

DOJ=JST,JEND

DOI=IST,IEND

U(I,J)=U0(I,J)

ERR=MAX(ERR,ABS(U(I,J)-US(I,J)))

ENDDO

ENDDO

ERR0=ERR

CALLMPI-Allreduce(ERR0,ERR,1,MPI-REAL,MPI-MAX,

MPI-COMM-WORLD,IERR)

IF(D(NITER,100).EQ.0)THEN

PRINT*,’NITER=’,NITER,’,ERR=’,ERR

ENDIF

IF(.1.E⑶)THEN

GOTO100

ENDIF

T1=MPI-Wtime()

IF(.0)THEN

PRINT*,’!!!Successfullyconvergedafter’,

NITER,’iterations’

PRINT*,’!!!error=’,ERR,’wtime=’,T1-T0

ENDIF

/*输出近似解*/

CALLMPI-Finalize(IERR)

END/*收敛性判断*//*没有收敛,进入下次迭代*//*用L∞模以使误差与NP无关*/

2.3程序2.2说明及结果

在上述程序中,固定了该MPI程序产生的进程个数NP=NPY?NPX,这样做主要是为了方便各进程的数组大小声明称仅为相应串行程序的1/(NP=NPY?NPX),从而使得原来串行程序在单机上由于内存不够而没法计算的问题通过量机并行计算成为可能,固然,这样做也带来1些不便,例如它要求MPI运行命令mpirun?npxxx中的参数xxx等于NPY?NPX,并且参数NPY和NPX被改变后,必须重新编译该程序.

下面是程序编译、运行程序:

7

并行计算 并行计算

result=3.,error=9.e-04,wtime=7.8916e⑵functionevaluations.3终究结论

通过本文的分析,可以看出并行计算具有串行计算所不具有的优点,能高效的解决具有大范围的运算量的问题。[)这就为大范围运算提供了1个简单明了的方法。

8

并行计算 并行计算

References

[1]张林波,迟学斌,莫则尧,李若.并行计算导论[M].2006.

[2]

9

月经经期延长怎么调理
月经后期吃什么排污
月经后期病吃什么好
猜你会喜欢的
猜你会喜欢的