并行编程中的设计模式.docx
《并行编程中的设计模式.docx》由会员分享,可在线阅读,更多相关《并行编程中的设计模式.docx(15页珍藏版)》请在课桌文档上搜索。
1、并行编程中的设计模式这篇文章是对这段时间学习并行编程中的设计模式的一个总结。有不当之处,盼望得到大家的批判、指正。首先,所谓并行编程中的设计模式(patternsinparallelprogramming)仍处于不断的被发觉、发掘的阶段。当前已经有各路人马对这一领域进行了讨论,但远远没有达到统一熟识的高度。也没有一套业界普遍认同的体系或者描述。这就造成了当前这领域的现状:从事讨论的人有不同的背景,他们各自总结出的模式种类不尽相同。即使是同个模式,不同的团队给它们取得名字也可能不一样。不过这并不阻碍我们对并行编程中的设计模式进行肯定的了解,并在实际的软件开发工作中有所借鉴。本文分两部分,第一部分
2、会简洁介绍这一领域的进呈现状:首先是进行讨论的主要团体及其代表人物,然后介绍一下他们各自总结的模式体系,最终着重介绍一下加州高校伯克利分校的体系,Apatternlanguageforparallelprogramming,=其次部分则从该体系中挑出八个常用的设计模式作略微具体一点的介绍。每个设计模式都附有实际的应用例子来关心理解。我始终信任,通过例子的学习是最简洁理解的一种方式。1.并行编程模式的进呈现状在这一领域比较活跃的讨论团体包括:1 .加州高校伯克利分校。其代表人物是KilrtKeUtZe教授,他曾是SynoPSyS公司的CTOo2 .Intel公司。代表人物是TimMattSon,
3、他是Intel的PrincipleEngineer和并行计算的布道师(evangelist),是PatternsforParallelProgramming一书的作者。3 .伊利诺伊高校。代表人物是RaIphJohnson教授。他是闻名的设计模式GangofFour中的一员4 .其他团体:包括微软、麻省理工高校等等。他们总结出的并行编程模式体系不尽相同,相互之间又有着紧密的联系。主要有:1,加州高校伯克利分校的APattemLangUag6ParallelProgrammingver2.02 .伊利诺伊高校的ParallelPrOqramminqPdtternS3 .TimMattson的著作
4、PattemSforParallelProgramming这其中,我最为喜爱加州高校伯克利分校的体系:伯克利的讨论人员认为,写出高质量并行软件的关键在于拥有好的软件设计:从软件的总体架构,始终到系统的底层实现。将这些好的设计以一种系统的方式描述出来,并在各个不同的软件项目当中重用是解决构建高质量并行软件问题的关键。这远比各种具体的编程模型以及其支撑环境来得重要。由于拥有了一个好的设计之后,我们可以很简洁的在各种开发平台上编写源代码。伯克利的模式体系包含了几个不同的层次,上自软件架构,下至程序指令执行的策略。最上面的两块分别是架构模式(StnJCtUralPattemS)和计算模式(COmPUt
5、ationalpatterns),这两块并不单单包括并行软件,也包括传统的串行软件模式。用我们常用来表达系统架构的线框图打比方,”架构模式指的就是那些箭头和框框,它们表示的是程序总体的组织结构,以及各部分之间是怎么交互的计算模式指的是框框里面的计算类型。例如,是基于图的算法,还是有限状态机,还是线性代数运算,等等。程序设计师通常需要在这两大类模式之间翻来覆去的进行选择。例如,我们可能先选择了一种架构模式,然后考虑使用某些合适的计算模式。但是选择的计算模式可能更适合于在另一种架构模式下运行,所以我们又得重新选择一种架构模式.如此反复。上面这张图在架构模式和计算模式”这两大块之间画了两个反复的箭头
6、,表达的就是这个意思。这张图下方的三大块就专指并行编程当中的模式了。它们包括“算法模式(AlgoHthmstrategypatterns),实现模式(ImplementationstrategyPatternS)和并行执行模式”(Parallelexecutionpatterns)o顾名思义,算法模式指的是程序算法层面的模式。它们表达的是,为了解决某一类实际问题,怎么样在较高的算法层面实现并行。实现模式指的是我们在编写源代码的时候,采用什么样的一些程序掌握结构利数据结构来实现并行。例如、paallel_for,例如并行容器,等等。最终一个并行执行模式指的是为了在计算机中有效的执行一个并行程序,
7、我们应当实行哪些方法。这包括指令的执行模式,例如是MIMD还是SlMD,也包括一些任务调度的策略。这三类模式是紧密联系在一起的。例如,为了解决一个问题,我们可能使用recursivesplitting的算法模式。而为了实现这个算法,我们很有可能使用fork-join的实现模式。在执行层面,并行程序库则通常会用threadpool的并行执行模式来支持forkjoin的运行。由于我们在编写程序时,并行执行模式往往由编译器或并行程序库例如TBB的编写人员考虑,我们并不需要关怀;实现模式和我们选择的具体并行运算平台有关(OPenMP,TBB,MPI,等等),不同的平台有不同的API;”计算模式则和具体
8、的问题域联接紧密。而且,看上去伯克利所总结的计算模式大部分和高性能计算有关,一般的应用程序员并不熟识。所以在本文,我将只选择和并行计算亲密相关的两个架构模式和六个常见的算法模式举例进行说明。2.八个常用的并行编程模式2.1AgentandRepository(RepoMoryconroK$)这是一个架构模式,它针对这样一类问题:我们有一组数据,它们会随机的被一些不同的对象进行修改。解决这一类问题的方案是,创建一个集中管理的数据仓库(datarepository),然后定义组自治的agent来操作这些数据,可能还有个manager来对agent的操作进行协调,并保证数据仓库中数据的全都性。我们常
9、见的源代码版本掌握软件例如Perforce就是实现这种架构的典型代表:源代码都存放在一个统一的服务器中(或是一组服务器中,但对Clierlt而言是透亮的),不同的程序员们使用各自的客户端对源代码文件进行读,写,力口,删的操作。由Perforce负责保证源代码数据的全都性。2.2MapReduceMaPRedUCe这个名词原来是函数式编程里面的个概念,但是自从GoogIe于2004年推出同名的并行计算程序库后,提到这个名词大家大多想到的是Google的这个Framework0在这里,MaPRedUCe是一个架构模式的名称。当然,我们这里的MaPRedUCe指的就是类似GoogIeMapRedUC
10、e工作原理的类模式。那么什么是MaPRedUCe的模式呢?用较为简洁的语言描述,它指的是这样类问题的解决方案:我们可以分两步来解决这类问题。第一步,使用一个串行的MaPPer函数分别处理一组不同的数据,生成个中间结果。其次步,将第一步的处理结果用一个RedilCer函数进行处理(例如,归并操作),生成最终的结果。从使用GOOgIe的MaPRedUCe程序库的角度而言,作为应用程序员,我们只需供应一组输入数据,和两个一般的串行函数(MapperReducer),GOOgI6的MaPRedllCe框架就会接管切,保证输入数据有效的在一个分布式的计算机集群里面安排,然后MaPPer和RedUCer函
11、数在其上有效的运行、处理,并最终汇总生成我们想要的处理结果。全部一切的细节,例如并行化、数据的安排、不同机器之间的计算误差,通通被隐蔽在程序库内。那么MapReduce究竟是什么样的一个过程呢?我们讲过,使用MaPRedUce,程序员必需供应一组输入数据,以及一个MaPPer和一个RedUCer函数。在这里,输入数据必需是个按(inpcit_key,input_value)方式组织的歹IJ表。KinPUjkey,iput-value),(input_key,input_value).mapper函数的任务是处理输入列表中的某一个单元数据:mapper(input_key,input_value
12、),并产生如下输出结果:(interaediat_key,inter*ediate_value),(lnte11Dediatlc4y,lnte(ediate,vlue,)f接下来,把对全部单元数据的处理结果依据intermediate_key归类:同样的intermediate_key放在起,它们的intermediate_value简洁的串接起来,得至U:(intermediate.key,intcrmediate_value_list),(itermediate-key,intermediate_valae_lt$t).Reducer函数的任务是对上述的中间结果进行处理:reducer(i
13、ntermediate_key,intermediate_value_list),并产生如下最终输出结果:|(output_key,output_value),(OUtPUJkev,output_valueh我们会举两个例子说明这一过程。第个例子是一个简洁的统计单词消失次数的小程序。其次个例子是Google曾经怎样使用MapReduceFrameWork来计算PageRanko第一个例子,假设我们要写一个小程序,来统计在几篇不同文章里全部消失过的单词各自总共消失的次数。我们应当怎么做呢?卜.面描述的采用MapReduce的方法确定不是大多数程序员第一感会想到的方法。但这种方法特别好的揭示了Ma
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 并行 编程 中的 设计 模式
链接地址:https://www.desk33.com/p-578751.html