精简版第6章并行算法的一般设计策略.pptVIP

精简版第6章并行算法的一般设计策略.ppt

  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文档。上传文档
查看更多
分布式系统 Distributed System 计算机学院软件工程系 主讲:陈 蕾 E-mail: chenleijx@ 第六章 并行算法的一般设计策略 6.1 串行算法的直接并行化 6.2 从问题描述开始设计并行算法 6.3 借用已有算法求解新问题 6.4 串行算法的直接并行化补充实例:八皇后问题和单源最短路径问题 设计并行算法一般有3种方法:   (1)检查和开拓现有串行算法中固有的并行性,直接将其并行化,该方法并不是对所有问题总是可行的,但对很多应用问题仍不失为一种有效的方法;   (2)从问题本身的描述出发,根据问题的固有属性,从头设计一个全新的并行算法,这种方法有一定难度,但所设计的并行算法通常是高效的;     (3)借助已有的并行算法求解新问题。 6.1 串行算法的直接并行化 方法描述 发掘和利用现有串行算法中的并行性,直接将串行算法改造为并行算法。 评注 由串行算法直接并行化的方法是并行算法设计的最常用方法之一; 并非所有的串行算法都可以并行化; 一个好的串行算法并不能并行化为一个好的并行算法,相反一个不好的串行算法则有可能产生很优秀的并行算法,例如枚举排序不是一种好的串行算法。但是将其直接并行化后可以得到比较好的并行算法 ; 显著优点:无需考虑算法的稳定性、收敛性等复杂问题。 积分算法的直接并行化--π的计算 计算π的串行C代码 #define N 1000000 main() { double local, pi = 0.0, w; long i; w=1.0/N; for (i = 0; iN; i ++) { local = (i + 0.5)*w; pi = pi + 4.0/(1.0+local * local); } printf(“pi is %f \n”, pi *w); } k个处理器并行地计算部分和 计算π的MPI代码 # define N 100000 main ( ) { double local=0.0,pi,w,temp=0.0; long i ,taskid,numtask; A:w=1.0/N; MPI_ Init(argc, argv);/*MPI 初始化*/ MPI _Comm _rank (MPI_COMM_WORLD,taskid);/*每个处理器确定各自ID*/ MPI _Comm _Size (MPI_COMM_WORLD,numtask);/*每个处理器确定总处理 器个数*/ B: for (i= taskid; i N; i=i + numtask) { temp = (i+0.5)*w; local=4.0/(1.0+temp*temp)+local; } C: MPI_Reduce (local,pi,1,MPI_Double,MPI_SUM,0, MPI_COMM_WORLD); /*MPI 归约操作*/ D: if (taskid = =0) printf(“pi is %f \ n”,pi* w); MPI_Finalize ( ) ;/*MPI 结束*/ } 枚举排序 枚举排序是一种最简单的排序算法。 该算法的具体思想是(假设按关键字递增排序),对每一个待排序的元素统计小于它的所有元素的个数,从而得到该元素最终处于序列中的位置。 假定待排序的n个数存在a[1]…a[n]中。首先将a[1]与a[2] … a[n]比较,记录比其小的数的个数,令其为k,a[1]就被存入有序的数组b[1]…b[n]的b[k+1]位置上;然后将a[2]与a[1],a[3]…a[n]比较,记录比其小的数的个数,依此类推。时间复杂度为O(n2)。 枚举排序串行算法 输入:a[1]…a[n] 输出:b[1]…b[n] Begin for i=1 to n do (1) k=1 (2) for j=1 to n do if a[i]a[j] then k=k+1 end if end for (3) b[k]= a[i] end for End 枚举排序的并行算法 对该算法

文档评论(0)

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

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

1亿VIP精品文档

相关文档