- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
PAGE
PAGE1
《并行程序设计》基于Epiphany的矩阵乘法的并行算法
摘要:由于大型科学与工程计算问题中对运算数据的安全性、稳定性、高速性和准确性等方面的要求不断提高,所以高性能并行计算越来越受到人们的重视和青睐。本文提出将操作矩阵进行二维块状划分并行计算的解决方案。基于二维网状结构的多核处理器,先从一般矩阵与特殊矩阵向量间的乘法开始分析,再给出计算一般矩阵乘法的Cannon算法。结合多核并行运算的天然优势,通过对所划分子块的合理调度,来克服核间通信传输速率缓慢的弊端,以实现高效计算矩阵乘法的目的。通过模拟实验与单核上的串行计算对比,证实并行计算的矩阵乘法在耗时上有了显著的提高。
关键字:运算;矩阵乘法;性能;Cannon
一、矩阵乘法的串行实现
矩阵相乘串行实现的i-j-k形式,其中最内层运算是点积,数据用到A的行和B的列。
for(i=0;iM;i++)
for(j=0;jN;j++)
for(k=0;kP;k++)
C[i][j]+=A[i][k]*B[K][j];
矩阵相乘的前提条件,前一个矩阵列数,须与后一个矩阵行数相等。矩阵A为M行P列,矩阵B为P行N列,则矩阵乘法,继承前一个矩阵的行数M,和后一个矩阵的列数N,相乘矩阵中每一项,都要经过P次加和乘。算法分析:该算法需要进行n3个乘法运算和n3个加法运算,顺序代码的时间复杂度为O(n3)。
二、矩阵向量乘法的并行计算
矩阵与向量相乘是线性方程组迭代求解的核心问题,其并行计算的效率直接影响迭代求解的整体效率。n阶矩阵A,与n维向量x=[x1x2…xn]T,并行计算A与x的乘积y=[y1y2…yn]T。
并行矩阵向量乘法,对矩阵采用一维块状划分(带状划分),即把矩阵按整行(或整列)划分成组,将每组的数据指派给一个处理器存储。划分的这些行列可以是连续的(连续带状划分),也可以是等距相间的(循环带状划分)。这里,我们对矩阵A进行按列连续划分,将矩阵A按行连续划分成p块,则每块所占行数为n/p行(其中n能被p整除)。同时再将每个行块按列也相应地划分成p个子块,则第k个行块Ak又可进一步划分为[Ak,0Ak,1…Ak,p-1]。则Ak,j可以表示如下:
图1矩阵的二维网格划分
图1中划分矩阵A的下标k是按行连续划分的下标,下标j是与处理器个数相对应的列上划分,它们都与处理器个数p相关,因此范围都是[0,…,p-1]。
n阶矩阵A的子块分成了n/p阶,同理后面所要乘的向量x,与所得新向量y的子块,也都要分成行为n/p的子块,因此也都要按行来进行划分成:x=[x0x1…xp-1]T,y=[y0y1…yp-1]T,它们对应成的第k块分别是:xk=[xk*n/p+1xk*n/p+2…xk*n/p+n/p]T,yk=[yk*n/p+1yk*n/p+2…yk*n/p+n/p]T。划分到处理器上,在处理器k上进行的第k块乘积yk的计算公式为:
列下标j按[0,1,…,p-1]移动时,下标(k+j)modxk的模依次为[k,k+1,…,k-1],即先做本地处理器上的Ak,kxk,再做Ak,k+1xk+1,…,就这样不断地循环向下移动,直至做到Ak,k+1xk-1完成整个循环,即按顺序逐次遍历完整个x向量上的每一个子块为止。矩阵A的子块行坐标始终为k不变,即按上式进行计算时,所用到的矩阵A中的子块,就存储在当前运行的处理器上。而向量x的子向量下标为(k+j)modp,会随着j的变化而变化,即在计算的过程中需要用到整个x向量上的所有子向量,因此可以通过在每次计算完成后,就将处理器中所存储的x子向量,循环向上移动到上一列的处理器中。
图2并行计算矩阵向量乘积
如图2所示,将各处理器中所存储的矩阵A中的子块Ak,与处理器中存储的向量x的当前子块xk相乘,进行p次,每次x向量中的子向量都向上循环移动一个位置,对同一处理器中p次的乘积进行累加求和,即可得出矩阵向量的乘积向量y。
三、矩阵乘法的并行Cannon算法实现
根据矩阵A与矩阵B在处理器中的不同存储方式可得到多种并行计算矩阵乘积的划分方法。比如:行列划分算法,将矩阵A按行连续划分成p个一维块状子矩阵(行块),将矩阵B按列连续划分成p个一维块状子矩阵(列块)。但无论是按行列、行行、列列,还是按列行来对矩阵进行划分,其本质都是基于矩阵的一维块状划分。而Cannon算法是基于矩阵的二维块状划分的。其特点是矩阵A中的子块在指定行中循环移动,矩阵B中的子块在指定列中循环移动,对每个处理器来说,计算量都是相同的,具有很好的负载均衡。当p=4时,Cannon算法具有优越性。
(一)二维连续块状划分
Cannon算法中并行计算矩阵的乘法,与并行计算矩阵向量的乘法原理类似。但不同于矩阵向量的乘法中,只让一边的矩阵的各子矩阵循环移动。Can
原创力文档


文档评论(0)