收藏 分享(赏)

典型问题实例分析.ppt

上传人:weiwoduzun 文档编号:4177826 上传时间:2018-12-13 格式:PPT 页数:86 大小:7.74MB
下载 相关 举报
典型问题实例分析.ppt_第1页
第1页 / 共86页
典型问题实例分析.ppt_第2页
第2页 / 共86页
典型问题实例分析.ppt_第3页
第3页 / 共86页
典型问题实例分析.ppt_第4页
第4页 / 共86页
典型问题实例分析.ppt_第5页
第5页 / 共86页
点击查看更多>>
资源描述

1、3 典型问题并行实例分析,什么样的问题适合并行计算? 斐波那契序列(Fibonacci)的计算?,什么样的问题适合并行计算? 如果有大量结构一致的数据要处理,且数据可以分解成相同大小的部分, 那我们就可以设法使这道处理变成并行,主要内容,3.1 易并行计算问题(分形图形并行生成)3.2 数值计算(矩阵运算)3.3 数排序问题 (流水线),3.1 易并行计算问题,一个理想的并行计算是能被立即分解成许多完全独立部分且它们被同时执行的计算,这种情况被称为易并行。真正意义上的易并行计算意味着在各个进程间没有通信。,近似易并行计算是那种需将计算结果分布和收集,以及用某种方式加以组合的计算。这就意味着在开

2、始和最后只有一个进程处于运行状态。如果要创建动态进程,通常的方法是采用主从结构。首先创建一个主进程,由它启动相同的从进程。,分布式图像处理,解决复杂图形应用问题的行之有效的方法是把复杂问题划分为可以并发执行的若干子任务,使它们并行执行。从而在联网的计算机系统中实现并行机才能够解决的问题。存储一个二维图像的最基本方法是使用像素图,即位图。图像处理输入数据是位图/像素图。通常存于文件中并被复制到数组中。并行编程主要关心将位图/像素图分成一些像素组以供每个处理器加工。,实例1:分形图形的并行处理,分形图形原理,Julia 集是由法国数学家 Gaston Julia 和 Pierre Faton 在发

3、展了复变函数迭代的基础理论后获得的。Julia 集是一个典型的分形。由一个复变函数生成, 其中c为常数。由于c可以是任意值,所以当c取不同的值时,制出的图形也不相同。,u等于0时,两个吸引区域中间的边界即 Julia 集。,当u0,即控制参数变化时,Julia集 构成各种各样的分维结构,C0时两个吸引区域之间的分形边界,在控制参数u0时:分形出现了。,U=-1 情况下的Julia集,c = 0 . 1 + i 0 . 8 情况下的Julia集,c = 0 . 3 i 0 . 4 情况下的Julia集,对于复映射zn+1zn2+u,我们也可以在复参数平面(p,q)上讨论,这种情况下不是取定u,而

4、是取定z0。,定义:能够使上述|Zn|有界的点集(p,q)即为Mandelbrot集。,若Z0=0 得到轨道0,u,u2+u, (u2+u)2+u, ,只要上述轨道上任何一点复数模大于2,则|Zn|趋向无穷。于是,该点集(p,q)就不属于Mandelbrot集。,若Z0=0 得到轨道0,u,u2+u, (u2+u)2+u, ,Zk+1Zku对于复平面上的复数a+bi,Z的初值为0, Zk+1是复数za+bi的第k+1次迭代, Zk是z的第k次迭代,u是确定该点在复数平面中位置的复数值,迭代一直进行下去,直到|Zn|4或达到了一定的迭代次数。,若结果集合在64*64个像素区域内显示,则复平面上需

5、要计算64*64个像素点,根据每个像素点在复平面上的位置进行迭代。记录每个像素点的迭代次数值,将该值作为该像素点的颜色值进行显示。如256色,则对应到256种颜色中其中的一个颜色进行显示。,分形图形并行处理的实现,系统利用PVM的消息传递机制,采用Master/Slave模式来完成进程之间的异步通信。 主进程(Master)负责进程的生成,初始化,收集并显示计算结果。从进程(Slave)执行实际的计算,其负载是由主进程动态分配,不受节点机性能不同或变化的影响。,一个PVM虚拟机的结构示意图,PVM进程间发送/接收数据过程,主 进 程 程 序 流 程 图,Master for(i=0,row=0

6、;i480;i+,row=row+10)send(,从 进 程 数 据 流 向 图,Slave(process i) recv(send(&c,&color,Pmaster),图形的显示生成,分形图形的显示生成由GTK+模块实现。这时,各节点机返回的每个像素点的颜色值存放在主机颜色表中,系统将按每个像素点坐标将颜色显示在图形区域上。,实验的环境如下:操作系统信息版本号:Redhat Linux 7.1,内核2.4.2,Xfree86 4.0.3,Glibc 2.2.2,GNOME 1.2.4,GCC 2.96-RH*。 PVM系统信息版本号:PVM 3.4.3GTK+:gtk+-devel V

7、ersion 1.0.0,在800*600的分辨率下,在两个节点中并行生成分形图形的实际加速比在PVM和MPI中分别为: Sp=12/9=1.33 Sm=16/11=1.45 在三个节点共同进行并行计算生成的分形图形的实际加速比分别为: Sp=12/7=1.71 Sm=16/8=2,在1024768的分辨率下,两个节点并行生成分形图形的实际加速比在PVM和MPI中分别为: Sp=23/18=1.28 Sm=26/19=1.37在三个节点的情况下实际加速比分别为: Sp=23/15=1.53 Sm=26/14=1.85,3.2 数值计算-矩阵运算,矩阵运算是数值计算中最重要的一类运算,特别是在线

8、性代数和数值分析中,它是一种最基本的运算。许多科学问题的基础都是矩阵。稠密矩阵的运算包括矩阵转置、矩阵和向量相乘以及矩阵相乘等。矩阵是一些数的二维数组。一个nm的矩阵有n行和m列元素,通常用二维数组来存储一个矩阵。,矩阵相乘串行算法,算法1:输入:Amn, Bnk 输出:Cmkfor i=0 to m-1 do for j=0 to k-1 doci,j =0 for r=0 to n-1 do ci,j=ci,j+ai,r*br,j,矩阵相乘并行算法,矩阵的划分方法,矩阵的两种常见的划分方法,即行列划分(带状划分)和棋盘划分(块状划分)。所谓带状划分(Striped Partitioning

9、)就是将矩阵整行或整列地分成若干个组,每组指派给一个处理器。也可将若干行或若干列指派给一个处理器,而且这些行和列可以是连续的,也可以是等距相间的。,带状划分,循环划分,对于一个n*n的矩阵和p个处理器(编号为P0,P1,Pp-1)而言,每个处理器将均匀连续地分配有n/p列,其中Pi包含有列(n/p)i,(n/p)i+1,(n/p)(i+1)-1,0ip-1。,所谓棋盘划分(Checker Board Partitioning)就是将方阵划分成若干个子方阵,每个子方阵指派给一个处理器,此时任意处理器均不包含整行或整列。和带状划分类似,棋盘划分也可以分为块棋盘划分(Block-Checker Bo

10、ard Partitioning)和循环棋盘划分(Cyclic-Checker Board Partitioning)。,矩阵运算实例,1、行列划分并行算法的实现2、Cannon乘法的并行算法的实现,矩阵乘法可以用分行的思想实现并行Amn, Bnk 1.将A矩阵按照处理器的个数按行划分为 u= m/p 每块含有连续的u行向量,认为A0Ap-12.将B矩阵按照处理器的个数按列划分为 v= n/p 每块含有连续的v列向量,认为B0 Bp-1则:Cij=Ai Bj 其中Ai为un Bj 为nv,开始时各处理器并行计算Cij=Ai*Bj 其中i,j=0,1,2,p-1,此后第i号处理器将其所存储的B的

11、列块送至第i-1号处理器(第零号处理器将B的列块送至第p-1号处理器中,形成循环传送),此后它们再次计算Cij=Ai*Bj。这里 j(i+1) mod p。B的列块将在各处理器中以这样的方式循环传送p-1次,并作p次矩阵相乘运算形成矩阵C的所有子矩阵。标号为i的处理器的内部存储器存储着子矩阵Ci0,Ci1,Ci2,Ci(p-1)。,为了避免发生死锁,奇数号处理器及偶数号处理器的收发顺序将被错开,使偶数号处理器先发送后接收;而奇数号处理器先将B的列块存于缓冲区buffer中,然后接收编号在后面的处理器发送的B的列块,最后再将缓冲区中原矩阵B的列块发送给其前面的处理器。,进程0,进程1,进程2,进

12、程0,矩阵分块乘法并行算法,输入:Amn,Bnk 输出:Cmk Begin 对所有处理器 my_rank ( my_rank=0,1,p-1) 同时执行如下算法,共执行p次(i0,p-1): 目前计算C的子块号l=(i+my_rank)mod p,for z=0 to u-1 dofor j=0 to v-1 docl,z,j=cl,z,j +az,s*bs,jendforendfor endfor,mm1=(p+myid-1)%p; /*计算左相邻处理器标号 即 计算本进程的前一个进程的标号 */ mp1=(myid+1)%p; /*计算右相邻处理器标号 即计算本进程的后一个进程的标号 */

13、if (i!=p-1)if(myid%2=0) then /* 偶数号处理器先发送后接收 */,将B的子块发送到左相邻的处理器中,接受右相邻处理器中发来的B的子块。else 将所存的B子块在缓冲区buff中作备份,接受右相邻处理器中发来的B的子块,将buffer中所存的B的子块发送到其右相邻的处理器中。endif,MPI_Send(b,K*n,MPI_FLOAT,mm1,mm1,MPI_COMM_WORLD);MPI_Recv(b,K*n,MPI_FLOAT,mp1,myid,MPI_COMM_WORLD,else /*奇数号处理器先将B的列块存于缓冲区buffer中,然后接收编号在其后面的处

14、理器所发送的B的列块,最后再将缓冲区中原矩阵B的列块发送给编号 在其前面的处理器 */,实验数据及处理,A和B以及其乘积C都是256256阶矩阵。有四个处理器。,A和B以及其乘积C都是128128阶矩阵, 四个处理器。,Cannon算法原理,起始对准后的A和B和第一次移位后的子阵位置,第二次移位后和第三次移位后的子阵位置,算法3:Cannon分块乘法算法输入:Ann,Bnn输出:CnnBegin对所有处理器设有my_rank(my_rank = 0,p-1),同时执行如下的算法: (1) 计算子块的行号i=my_rank / (p) 计算子块的列号j=my_rank mod (2) for k

15、 = 0 to -1 doif(ik) then /* a循环左移至同行相邻处理器中 */ Leftmoveonestep(a) end if if(jk) then /* b循环上移至同列相邻处理器中 */ Upmoveonestep(b) end if end for,(3) for i = 0 to m-1 do for j = 0 to m-1 doci,j = 0 end forend for (4) for k = 0 to -1 do for i = 0 to -1 do for j = 0 to -1 do for k1 = 0 to -1 doci,j = ci,j + ai

16、,k1 * bk1,j end for end for end for Leftmoveonestep(a)/*子块a循环左移至同行相邻的处理器中 */ Upmoveonestep(b)/* 子块b循环上移至同列相邻的处理器中 */ end for End,函数Leftmoveonestep(a)为例,给出处理器间交换数据的过程,如算法4:,算法4:函数Leftmoveonestep(a)的基本算法 Begin (1) if (j = 0) then /* 最左端的子块 */ (1.1) 将所存的A的子块发送到同行最右端子块所在的处理器中 (1.2) 接收其右邻处理器中发来的A的子块 end

17、if (2) if(j = -1) and (j mod 2 = 0) then /* 最右端子块处理器且块列号为偶数 */ (2.1) 将所存的A的子块发送到其左邻处理器中 (2.2) 接收其同行最左端子块所在的处理器发送来的A的子块 end if,(3) if (j = -1) and (j mod 2 0) then /* 最右端子块处理器且块列号为奇数 */ (3.1)将所存的A的子块在缓冲区buffer中作备份 (3.2)接收其同行最左端子块所在的处理器发送来的A的子块 (3.3)将在缓冲区buffer中所存的A的子块发送到其左邻处理器中 end if (4) if(j -1) an

18、d (j mod 2 = 0) and (j 0) then /* 其余的偶数号处理器 */ (4.1) 将所存的A的子块发送到其左邻处理器中 (4.2) 接收其右邻处理器中发来的A的子块 end if (5) if(j -1) and (j mod 2 = 1) and (j 0) then /* 其余的奇数号处理器 */ (5.1) 将所存的A的子块在缓冲区buffer中作备份 (5.2) 接收其右邻处理器中发送来的A的子块 (5.3) 将在缓冲区buffer中所存的A的子块发送到其左邻处理器中 end if End,分成四个子任务的情况:,3.3 数的排序(流水线技术应用实例),在流水线

19、技术中,问题被分成一些列必须一个接一个完成的任务。每个任务由分离的过程或处理器执行,如图所示。一个流水线过程成为一个流水线级。每一级只解决问题的一部分并且把相关的信息传送给需要它的下一级。这种并行性可以看成是功能分解的一种形式。问题被划分为必须执行的独立的功能,而且在这种情况下这些功能必须被连续执行。,流水线技术描述,一个简单的循环:for (i = 0; i n; i+) sum = sum + ai;该循环求出数组a的所有元素和,展开之后为:sum = sum + a0; sum = sum + a1;sum = sum + a2; sum = sum + a3;sum = sum + a

20、4;,流水线技术描述(2),假定一个问题能够被分解成一系列的顺序任务,那么它在下列三种计算类型中就可以使用流水线方法来取得加速。 (1)如果将执行整个问题的多个实例 (2)如果必须处理一些列的数据项,而每个数据项需要多次操作。 (3)如果进程在完成自己的所有内部操作之前能够把下一个进程启动所需的时间向前传送。,第一种类型的方式在计算机的内部硬件设计中广泛应用。由p个进程构成的流水线完成m个问题实例的执行需要m+p-1个流水线周期,平均周期数为(m+p-1)/m。当m很大时,它趋近于1。在任何情况下,流水线过了开始的n-1个周期后,以后的每一个流水线周期就完成问题的一个实例。,第二种类型即一串数

21、据项必须被顺序处理,通常发生在算术计算中,如数组元素相乘,其中每一个元素按顺序进入流水线,如图所示。其中10个进程组成流水线并有10个元素将被处理。若每段流水线周期都相等的话,则p个进程、n个数据项所需的总的执行时间是(p-1)+n个流水线周期。,第三种类型经常出现,用于问题的一个实例要执行的并行程序中,但每个进程都能在它执行完毕之前把消息传递给下一个进程。,流水线技术描述(3),在任一流水线中,若级比处理器的数目多,每个处理器就分配到一组级。在这种情况下每个处理器中的流水级都是顺序执行的。,数的排序问题描述,排序的目标是把一组数以增大或减小的顺序重新排列。 流水线的排序方法是让第一个进程p0

22、每次接收要排序的这一组数中的一个,保存当前接受到的最大的数字,且把比这个数小的其他数传递给下一个进程。如果输入的数比当前保存的数大,就把当前的数传递给下一个进程,把输入的数保存为当前的最大数。每个后继进程都执行同样的算法。当所有数都处理完毕之后,p0中就保存有最大的数,p1中保存有第二大的数,以此类推。,数的排序问题描述(2),图中给出了排序5个数时的动作。进程pi的基本算法为:recv(,数的排序问题描述(3),对于n个数,第i个进程要接收n-i个数,它要上传n-i-1个数,因此可以使用一个简单的循环:right_procno=n-i-1recv(,数的排序问题描述(6),排序的结果可以使用环形结构或者双向线性结构的流水线中提取出来。后者更有优越性,因为某进程只要最后一个数通过它被传递时就可以返回结果,该进程不必等所有数都被排序。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报