并行迭代算法的设计与实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
并行迭代算法的设计与实现

仲恺农业工程学院实验报告纸 计算机科学与工程学院(院、系)网络工程 专业 083 班 并行计算运用与实践 课 学号 200810224311 姓名 李志冬 实验日期 2011/6/9 教师评定 实验六 并行迭代算法的设计与实现 实验目的 了解并行迭代算法的原理以及掌握并行迭代算法的编程方法。 实验内容 编写并运行高斯-塞德尔迭代并行算法 实验步骤 1 了解算法原理 在并行计算中,高斯-塞德尔迭代采用与雅可比迭代相同的数据划分。对于高斯-塞德尔迭代,计算xi的新值时,使用xi+1, …,xn-1的旧值和x0, …,xi-1的新值。计算过程中xi与x0, …,xi-1及xi+1, …,xn-1的新值会在不同的处理器中产生,因此可以考虑采用时间偏移的方法,使各个处理器对新值计算的开始和结束时间产生一定的偏差。编号为my_rank的处理器一旦计算出xi(my_rank×m ≤ i (my_rank+1)×m)的新值,就立即广播给其余处理器,以供各处理器对x的其它分量计算有关xi的乘积项并求和。当它计算完x的所有分量后,它还要接收其它处理器发送的新的x分量,并对这些分量进行求和计算,为计算下一轮的xi作准备。计算开始时,所有处理器并行地对主对角元素右边的数据项进行求和,此时编号为0的处理器(简称为P0)计算出x0,然后广播给其余处理器,其余所有的处理器用x0的新值和其对应项进行求和计算,接着P0计算出x1,x2, …,当P0完成对xm-1的计算和广播后,P1计算出xm,并广播给其余处理器,其余所有的处理器用xm的新值求其对应项的乘积并作求和计算。然后P1计算出xm+1,xm+2, …,当P1完成对x2*m-1 的计算和广播后,P2计算出x2*m …,如此重复下去,直至xn-1在Pp-1中被计算出并广播至其余的处理器之后,P0计算出下一轮的新的x0,这样逐次迭代下去,直至收敛为止。具体算法框架描述如下: 算法 求解线性方程组的高斯-塞德尔迭代并行算法 输入:系数矩阵An×n,常数向量b n×1,ε,初始解向量xn×1 输出:解向量xn×1 Begin 对所有处理器my_rank(my_rank=0,…, p-1)同时执行如下的算法: (1)for i=my-rank* m to (my-rank+1)*m-1 do /*所有处理器并行地对主对角元素右边的数据求和*/ (1.1)sum[i]=0.0 (1.2)for j=i+1 to n-1 do sum[i]=sum[i]+a[i,j]*x[j] end for end for (2)while (totaln) do /*total为新旧值之差小于ε的x的分量个数*/ (2.1) iteration=0 /* iteration 为本处理器中新旧值之差小于ε的x的分量个数*/ (2.2)for j=0 to n-1 do /*依次以第0,1, …, n-1行为主行*/ (i) q=j/m (ii)if (my_rank=q) then /*主行所在的处理器*/ temp= x[j], x[j]= (b[j]- sum[j])/a[j,j] /* 产生x(j)的新的值*/ if (│x[j]-temp│ε) then iteration= iteration +1 end if 将x[j]的新值广播到其它所有处理器中 /*对其余行计算x[j]所对于的内积项并累加*/ sum[j]=0 for i=my-rank* m to (my-rank+1)*m-1 do if (j ≠ i) then sum[i]=sum[i]+a[i,j]*x[j] end if end for else /*其它处理器*/ 接收广播来的x[j]的新值 /*对所存各行计算x[j]所对于的内积项并累加*/ for i=my-rank* m to (my-rank+1)* m-1 do sum[i]=sum[i]+a[i,j]*x[j] end for end if end for (2.3)用Allreduce操作求出所有处理器中iteration值的和total并广播到所有处理器中 end while End 若取一次乘法和加法运算时间或一次比较运算时间为一个单位时间。在算法开始阶段,各处理器并行计算主对角线右边元素相应的乘积项并求和,所需时间mn-(1+m)m/2,进入迭代计算后,虽然各个处理器所负责的x的分量在每一轮计算中的开始时间是不一样的,但一轮迭代中的计算量都是相等的,因此不妨取0号处理器为对象分析一

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档