并行编程中的设计模式.docxVIP

  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文档。上传文档
查看更多
并行编程中的设计模式

并行编程中的设计模式?这篇文章是对这段时间学习并行编程中的设计模式的一个总结。有不当之处,希望得到大家的批评、指正。首先,所谓“并行编程中的设计模式”(patterns in parallel programming)仍处于不断的被发现、发掘的阶段。当前已经有各路人马对这一领域进行了研究,但远远没有达到统一认识的高度。也没有一套业界普遍认同的体系或者描述。这就造成了当前这一领域的现状:从事研究的人有不同的背景,他们各自总结出的模式种类不尽相同。即使是同一个模式,不同的团队给它们取得名字也可能不一样。不过这并不妨碍我们对“并行编程中的设计模式”进行一定的了解,并在实际的软件开发工作中有所借鉴。本文分两部分,第一部分会简单介绍这一领域的发展现状:首先是进行研究的主要团体及其代表人物,然后介绍一下他们各自总结的模式体系,最后着重介绍一下加州大学伯克利分校的体系,A pattern language for parallel programming。第二部分则从该体系中挑出八个常用的设计模式作稍微详细一点的介绍。每个设计模式都附有实际的应用例子来帮助理解。我始终相信,通过例子的学习是最容易理解的一种方式。1. 并行编程模式的发展现状在这一领域比较活跃的研究团体包括:1. 加州大学伯克利分校。其代表人物是Kurt Keutzer教授,他曾是Synopsys公司的CTO。2. Intel公司。代表人物是Tim Mattson,他是Intel的Principle Engineer和并行计算的布道师(evangelist),是“Patterns for Parallel Programming”一书的作者。3. 伊利诺伊大学。代表人物是Ralph Johnson教授。他是著名的设计模式“Gang of Four”中的一员。4. 其他团体:包括微软、麻省理工大学… 等等。他们总结出的并行编程模式体系不尽相同,互相之间又有着紧密的联系。主要有:1. 加州大学伯克利分校的A Pattern Language for Parallel Programming ver2.02. 伊利诺伊大学的Parallel Programming Patterns3. Tim Mattson 的著作Patterns for Parallel Programming这其中,我最为喜欢加州大学伯克利分校的体系:伯克利的研究人员认为,写出高质量并行软件的关键在于拥有好的软件设计:从软件的总体架构,一直到系统的底层实现。将这些“好的设计”以一种系统的方式描述出来,并在各个不同的软件项目当中重用是解决构建高质量并行软件问题的关键。这远比各种具体的编程模型以及其支撑环境来得重要。因为拥有了一个好的设计之后,我们可以很容易的在各种开发平台上编写源代码。伯克利的模式体系包含了几个不同的层次,上自软件架构,下至程序指令执行的策略。最上面的两块分别是“架构模式”(Structural patterns) 和“计算模式”(Computational patterns)。这两块并不单单包括并行软件,也包括传统的串行软件模式。用我们常用来表达系统架构的线框图打比方,“架构模式”指的就是那些箭头和框框,它们表示的是程序总体的组织结构,以及各部分之间是怎么交互的。“计算模式”指的是框框里面的计算类型。例如,是基于图的算法,还是有限状态机,还是线性代数运算,等等。程序设计师通常需要在这两大类模式之间翻来覆去的进行选择。例如,我们可能先选择了一种架构模式,然后考虑使用某些合适的计算模式。但是选择的计算模式可能更适合于在另一种架构模式下运行,所以我们又得重新选择一种架构模式… …如此反复。上面这张图在“架构模式”和“计算模式”这两大块之间画了两个反复的箭头,表达的就是这个意思。这张图下方的三大块就专指并行编程当中的模式了。它们包括“算法模式”(Algorithm strategy patterns),“实现模式”(Implementation strategy patterns)和“并行执行模式”(Parallel execution patterns)。顾名思义,“算法模式”指的是程序算法层面的模式。它们表达的是,为了解决某一类实际问题,怎么样在较高的算法层面实现并行。“实现模式”指的是我们在编写源代码的时候,利用什么样的一些程序控制结构和数据结构来实现并行。例如“parallel_for”,例如并行容器,等等。最后一个“并行执行模式”指的是为了在计算机中有效的执行一个并行程序,我们应该采取哪些方法。这包括指令的执行模式,例如是MIMD还是SIMD,也包括一些任务调度的策略。这三类模式是紧密联系在一起的。例如,为了解决一个问题,我们可能使用“recursive splitting”的算法模式。而为了

文档评论(0)

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

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

1亿VIP精品文档

相关文档