浅谈并行编程中及任务分解模式.docVIP

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

浅谈并行编程中的任务分解模式 ????? 并行编程使用线程来使得多个操作能够同时运行。并行编程主要包括应用程序中线程设计,开发和部署以及线程间相互协调和各自的操作。 ????? 在下文中我们将讨论怎样分割适合线程化大小的编程任务来多任务化一个应用程序。 设计线程 ????? 不熟悉并行编程的开发者通常对例如面向对象的传统的编程模式感到非常适应。在传统的编程模式下,程序以预先定义的起点开始运行,譬如main函数,然后接连地做完一系列任务。如果程序依赖用户交互,主要的工作代码通常被封装在一个处理用户事件的循环里。 ????? 从一个约定事件开始,譬如点击按钮,程序运行一段已经制定的顺序行为,最终以等待用户下个动作结束。 ????? 当设计这样的程序时,程序员喜欢一个相对简单的编程模式因为在任意一段给定的时间内只有一个事件发生。如果程序任务必须按某种方式顺序运行, 程序员必须在这些事件上特意安排顺序。在这个过程的任一时刻,程序运行一步接着下一步,最终基于预先确定的参数到达一个预见的结果。 ????? 从这种线性的模式到并行编程模式,程序设计者必须重新思考程序的过程流。相比顺序执行序列限制,程序员应该识别出那些能被并行化的行为。 ????? 要这样做,他们必须把程序看作一组相互间有依赖关系的任务。把程序分解成一些独立的任务并识别这些任务间的依赖性。这个过程被称为分解。 ????? 一个问题有许多分解方式: 按任务,数据,或者按数据流。下面的表总结了这些分解的形式。您将很快看到,这些不同分解形式对应了不同的编程行为。 分解类型 设计 评论 任务 不同的行为分配给不同的线程 通常在GUI应用 数据 多个线程对不同的数据集执行同样的操作 通常在音频处理,做图和科学编程 数据流 一个线程的输出是第二个线程的输入 需要特别关注消除开始和结束的延迟 模式 分解 任务级并行 任务 分离并战胜 任务/数据 几何分解 数据 流水线 数据流 波阵面 数据流 波阵面数据模式 ????? 上图中的数字解释了数据元素被处理的顺序。譬如对角线的元素包括数字3是独立于之前被处理的数字元素1和2的。 ????? 上图中阴影中的数据元素表示数据已经被处理。在这种模式下,减小每个线程的空闲时间非常关键。负载均衡在此种模式中非常关键。 ????? 更加详细的并行编程设计模式的介绍请参考并行编程模式(Mattson 2004) 一书。 *本文观点引自英特尔公司系统架构师Shameem Akhter和高级软件工程师Jason Roberts的文章

文档评论(0)

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

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

1亿VIP精品文档

相关文档