多核时代:并行程序设计探讨(7)——并行编程模式概览

                                          并行编程模式概览

前面的56篇博文,都是和并行编程相关的基础知识,如果你一路看来,基本上也能够开始进行并行编程设计了,也可以和别人吹吹牛、聊聊天了。

但“欲穷千里目,更上一层楼”,前面的毕竟都是基础知识,拿来直接设计,虽然能够完成任务,但就像在茫茫大海中航行,没有灯塔,难免会走很多弯路、甚至绝路!

所以我们要在这些基础知识之上,学习一套系统的分析问题、设计方案、应用实现的理论来指导我们作出正确的、优秀的分析、设计,以及实现。并行编程模式就是这样一座指导我们进行并行编程设计和实现的灯塔。

当然,这个并行编程模式也是一个完整的体系,不是简单的几个模式堆杂在一起,所以我们要开始就把握住这个并行编程模式的体系的框架,高屋建瓴的从整体上对这套体系有一个清晰的了解,然后再开始深入的掌握每个部分。

 

首先,我们从整体上看一下并行编程模式的体系结构,如下图:

从图中可以看出,总共分为4大部分:Finding concurrencyAlgorithm structureSupport StructureImplementation Mechanisms。从英文本意来看比较难以理解,我仔细看了每章的介绍,按照如下方式翻译:并行性分析、算法结构、程序结构、实现结构。这几个部分实际上是按照设计的先后顺序进行分类的:首先要分析问题、然后再选择什么算法,再看程序如何设计,最后看具体实现。下面我们就逐一简单介绍这几部分。

1.1        并行性分析

顾名思义,这部分模式是用来分析并行性的,按照英文的字面意思就是“找到并行性”。

如下图,并行性分析又分为三大类:分解、依赖分析、设计评估,共6个模式。

1.2        算法结构

经过并行性分析后,并行相关的任务、数据、依赖都已经基本分析完毕了(之所以说是基本,是因为分析和设计是一个迭代的过程,不是标准的流水线作业),这时就要看看如何将这些任务、数据组织起来来解决实际的问题。也就是说并行性分析是一个“分”的过程,而算法结构是一个“合”的过程

如下图:算法结构模式部分分为三类:按任务组织、按数据分解组织、按数据流组织,6个模式。

但细心的朋友可能就会问:在并行性分析之前就是一个已经“合”好的问题了,为什么这里还要再次合起来呢?

关键就在于:算法结构的“合”是针对已经分解好的任务、数据和依赖,而并行性分析前的“合”只是一个问题的初始混沌状态(有的书中叫做problem mud)。算法结构中的“合”动作是看并行性分析后的结果合起来是否能够解决并行性分析前“合”的问题,其实道理很简单:分解得再好,合起来不能解决分之前的问题,那也是错误的。

 

1.3        程序结构

按照英文原意翻译,这部分叫做“支撑结构”,很难理解,我仔细看了这类模式包含的几个子模式,发现其实都是关于进程/线程结构、数据结构的,而这些都是具体程序设计的时候需要考虑的,因此我觉得翻译成“程序结构”更加容易理解。

从下图可以看出,这类模式分为两类:Program Structure,这是关于如何组织进程或者线程的;Data structure,这是关于如何组织数据的

上一章的算法结构中也有“按照数据组织”,这一章也有“数据结构”,两者是什么区别或者关系呢?

区别就在于两个“数据”的地位不一样:算法结构中是按照数据来对任务进行“合”操作,不考虑对数据本身的管理(例如数据操作、数据互斥、数据同步),而程序结构中是考虑数据本身的管理,即如何保证数据满足多个任务的并行运行。

 

1.4        实现结构

实现结构作为并行编程模式有点“挂羊头卖狗肉”的意思,因为实际上这里面的内容都是和具体的语言或者平台相关的,作者在这部分主要讲了JavaOpenMPMPI三种语言的实现方法,并不是什么模式(模式应该是语言无关的吧)。

 

认真的朋友看到“UE Management”、“Synchronization”、“Communications”可能有似曾相识的感觉,因为我在前面56篇博文里面重点就是讲解了WindowsLinux的多进程/多线程实现机制、进程间同步、进程间通信,这不正好对应这里所谓的“UE Management”、“Synchronization”、“Communications”么?:)

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
并行计算是90年代计算技术的一个重要组成部分,它在未来20年的影响可能与微处理器在过去20年的影响一样大。 事实上,随着高度集成的微处理器和内存芯片的发展,使得多处理器系统越来越具有吸引力,这两种技术紧密相连。 从速度最快的超级计算机,到部门计算服务器,再到个人桌面,多处理器已经代表了计算市场几乎每个部分的高性能终端。 在过去,计算机供应商采用一系列技术来提高整个产品线的性能。 今天,同样最先进的微处理器被广泛使用。 要获得显著的性能范围,最简单的方法是增加处理器的数量,而规模经济使这一点极具吸引力。 很快,几个处理器就可以装在一个芯片上。 4 草稿:并行计算机架构8/29/97 虽然并行计算有着悠久而丰富的学术历史,但是与商品技术的紧密结合从根本上改变了这门学科。 对基本架构和外来技术的强调已经让位于定量分析和仔细的工程权衡。 我们写这本书的目的是使新兴的多处理器系统的设计者,从适度并行的个人计算机到大规模并行的超级计算机,了解基本的架构问题和处理设计权衡的可用技术。 同时,我们希望为这些机器的软件系统设计人员提供对体系结构发展的可能方向的理解,以及确定硬件设计将遵循的特定路径的力量。 并行计算机体系结构中最近最令人兴奋的开发是传统上完全不同的方法(即共享内存、消息传递、SIMD和数据流)在一个公共机器结构上的聚合。 这部分是由于共同的技术和经济力量,部分是由于更好地理解并行软件。 这种聚合使我们能够专注于最重要的体系结构问题,并开发一个通用框架,在其中理解和评估体系结构的权衡。 此外,并行软件已经成熟到流行的并行编程模型可以在广泛的机器上使用,并且存在有意义的基准测试。 这一领域的成熟使得对硬件/软件交互进行定量和定性研究成为可能。 事实上,它需要这样一种方法。 本书遵循了一系列对所有并行架构都至关重要的问题——通信延迟、通信带宽以及跨整个现代设计的协作工作的协调。 它描述了用于解决每个问题的硬件和软件中可用的一组技术,并探讨了各种技术如何交互。 案例研究提供了一般原则的具体说明,并说明了机制之间的具体相互作用。 我们的最终动机来自于目前我们在斯坦福、伯克利和普林斯顿的课程缺乏足够的课本。 现有的很多教材对材料的涉及面都比较粗略,只是对各种建筑和研究成果进行了总结,并没有对其进行深入的分析。 另一些人专注于特定的项目,但没有认识到可用于替代方法的原则。 该领域的研究报告提供了大量的经验数据,但还没有提炼成一个连贯的画面。 我们希望通过集中注意技术融合背景下的突出问题,而不是使我们走到这一点的丰富和多样的历史,对该领域提供更深刻和更连贯的了解。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值