新書推薦:
《
有趣的中国古建筑
》
售價:NT$
305.0
《
十一年夏至
》
售價:NT$
347.0
《
如何打造成功的商业赛事
》
售價:NT$
407.0
《
万千教育学前·透视学前儿童的发展:解析幼儿教师常问的那些问题
》
售價:NT$
265.0
《
慈悲与玫瑰
》
售價:NT$
398.0
《
启蒙的辩证:哲学的片简(法兰克福学派哲学经典,批判理论重要文本)
》
售價:NT$
347.0
《
心跳重置
》
售價:NT$
269.0
《
云中记
》
售價:NT$
347.0
|
內容簡介: |
从网格、集群到下一代游戏平台,并行计算正在成为主流。IBM、Intel、Oracle公司的超线程技术、超传输技术和多核微处理器等技术创新正在加速推动并行计算的发展。万事俱备,只欠东风——满足并行软件飞速增长需求的程序员。
《华章并行编程模式》是软件开发人员学习并行编程的权威教程,其中并没有过多讲解理论知识,而是讨论并行程序员所面临的挑战及其解决方案,并结合当前并行API的用法给出一些示例。书中引入了一种完整的、通俗易懂的模式语言,可以帮助任何有经验的开发人员编写高效的并行代码。通过学习本书,读者将意识到模式是掌握并行编程的最佳方式。本书不仅适用于高等院校计算机科学相关专业的学生,而且适用于各类软件开发人员。
本书主要内容包括:
理解并行计算和并行开发人员所面临的挑战。
找出软件设计中的并发问题并将其分解成并发任务。
管理不同任务间的数据使用。
生成一种可以有效利用已识别的并发性的算法结构。
将算法结构同需要实现的API相连接。
实现并行程序的特定软件结构。
与OpenMP、MPI和Java等当今主流的并行编程环境协同工作。
|
關於作者: |
TimothyG.Mattson,加州大学圣克鲁兹分校化学博士,英特尔生命科学社区首席发言人。他主要研究对大多程序员来说简化的并行编程技术,重点是计算生物学方面。
BeverlyA.Sanders,哈佛大学应用数学博士,佛罗里达大学计算机信息科学与工程系副教授。她主要研究如何帮助程序员构建高质量的、正确的程序,包括形式化方法、组件系统和设计模式。
BernaL.Massingill,加州理工学院计算机科学博士,三一大学副教授。她的研究领域为并行和分布式计算,以及设计模式和形式化方法。
|
目錄:
|
Patterns for Parallel Programming
出版者的话
译者序
前言
作者简介
第1章 并行编程的模式语言
1.1 引言
1.2 并行编程
1.3 设计模式和模式语言
1.4 关于并行编程的模式语言
第2章 并行计算的背景和术语
2.1 并行程序中的并发性与操作系统中的并发性
2.2 并行体系结构简介
2.2.1 Flynn分类法
2.2.2 MIMD的进一步分类
2.2.3 小结
2.3 并行编程环境
2.4 并行编程术语
2.5 并行计算的度量
2.6 通信
2.6.1 延迟和带宽
2.6.2 重叠通信和计算以及延迟隐藏
2.7 本章小结
第3章 "寻找并发性"设计空间
3.1 关于设计空间
3.1.1 概述
3.1.2 使用分解模式
3.1.3 示例的背景知识
3.2 任务分解模式
3.3 数据分解模式
3.4 分组任务模式
3.5 排序任务模式
3.6 数据共享模式
3.7 设计评估模式
3.8 本章小结
第4章 "算法结构"设计空间
4.1 引言
4.2 选择一种算法结构设计模式
4.2.1 目标平台
4.2.2 主要组织原则
4.2.3 算法结构决策树
4.2.4 重新评估
4.3 示例
4.3.1 医学成像
4.3.2 分子动力学
4.4 任务并行模式
4.5 分治模式
4.6 几何分解模式
4.7 递归数据模式
4.8 流水线模式
4.9 基于事件的协作模式
第5章 "支持结构"设计空间
5.1 引言
5.1.1 程序结构模式
5.1.2 数据结构模式
5.2 面临的问题
5.3 模式选择
5.4 SPMD模式
5.5 主从模式
5.6 循环并行模式
5.7 派生聚合模式
5.8 共享数据模式
5.9 共享队列模式
5.10 分布式数组模式
5.11 其他支持结构
5.11.1 SIMD
5.11.2 MPMD
5.11.3 客户端-服务器计算
5.11.4 使用声明语言的并发编程
5.11.5 问题求解环境
第6章 "实现机制"设计空间
6.1 引言
6.2 UE管理
6.2.1 线程的创建销毁
6.2.2 进程的创建销毁
6.3 同步
6.3.1 内存同步和围栅
6.3.2 栅栏
6.3.3 互斥
6.4 通信
6.4.1 消息传递
6.4.2 集合通信
6.4.3 其他通信构造
附录A OpenMP简介
附录B MPI简介
附录C Java并发编程简介
术语表
参考文献
索引
|
內容試閱:
|
第1章
Patterns for Parallel Programming
并行编程的模式语言
1.1 引言
计算机被广泛用于模拟自然科学、医学和工程学等领域中的真实物理系统,包括天气预报模拟系统、震撼电影的场景模拟系统,并且可以使用任意的计算能力来完成更加精细的模拟。无论是顾客购物模式,还是来自于宇宙的遥测数据或者DNA序列,它们需要分析的数据量都十分巨大。为了提供这种计算能力,设计者将多个处理单元融入一个较大的系统中。这就是所谓的并行计算机,它能够同时运行多个任务,在更短的时间内解决规模更大的问题。
过去,并行计算机仅用于解决一些最重要的问题,但是从20世纪90年代中期开始,随着微处理器内部开始支持多线程技术,并且在单个硅片上可容纳多个处理器内核,这种情况已经发生了根本性变化。现在,并行计算机随处可见,几乎每所大学计算机系都至少有一台并行计算机。几乎所有的石油公司、汽车制造商、药品开发公司和特效工作室都已经使用了并行计算。
例如,计算机动画的生成过程是将动画文件的信息(如光、纹理和阴影)应用于3D模型以生成2D图像,再用这些2D图像组成电影的帧。为较长的电影生成所需的帧时(每秒24帧),并行计算是非常必要的。1995年,由Pixar公司发行的《玩具总动员》是第一个完全通过计算机软件制作的电影,该电影由一台包括100个双处理器机器的名为“renderfarm” [PS00]的机器处理。Pixar公司在1999年制作《玩具总动员2》时利用了一台具有1400个处理器的系统。由于提高了处理能力,影片的效果(包括纹理、服饰和艺术效果)有大幅度提升。Monsters公司2001年使用了一个拥有250个企业级服务器。(每个服务器包含14个处理器,共3500个处理器)的系统。然而利用更高的计算性能,包括处理器数目以及单个处理器计算性能,来提升动画效果,因此生成一幅帧需要的时间仍保持不变。
生物科学在能够从多种生物体(包括人)中获得DNA序列信息后实现了跨越式的发展。由Celera公司提出并成功使用的一种称为基因组鸟枪的排序算法,可将基因组划分为多个子段,首先通过实验确定每个子段的DNA序列,然后利用计算机通过重构子段间的重叠区域来重组整个序列。Celera公司排序人类基因组时使用的计算机包括150台四路服务器以及一台具有16个处理器和64GB内存的服务器,实际计算包括5兆亿次基对基比较[Ein00]。
项目[SET,ACK+02]的目的是寻找地外智能存在的证据,它是另一个展示并行计算能力的实例。该项目利用位于波多黎各的世界上最大的阿雷卡纳特无线望远镜搜索外太空,分析收集到的数据,搜索智能信号源。该项目的计算需求超过了世界上最大超级计算机的性能,因此只能利用公共计算资源满足性能需求,即将通过Internet互联的世界范围内的PC整合为一台并行计算机。项目将收集的数据划分为一些子任务,并将子任务通过Internet发送到每个客户端计算机上,利用这些分布的个人计算机的空闲时间进行计算。每个客户端定期连接到服务器,下载数据并执行分析计算,最后将结果发送回服务器。客户端程序被设计为一个屏幕保护程序,仅当计算机处于空闲状态时才将CPU贡献给SETI问题执行计算任务。目前,一个工作子任务平均需要一台计算机7~8个小时的CPU时间,从项目启动到现在已有2.05亿个工作单元得以处理。最近,也出现了一批利用公共计算资源的新项目,并且一些大公司也利用其内部个人计算机的空闲计时解决从新药筛选到芯片设计验证等问题。
尽管通过并行计算可以以更短的时间解决一些串行无法完成的问题,但实现并行也需要付出一些代价。编写并行计算软件是十分困难的,因此只有少量程序员具备丰富的并行编程经验。如果要利用并行计算机带来的并行性潜能,大部分程序员都需要学习如何编写并行
程序。
本书将为有串行程序设计经验的程序员介绍编写并行程序的设计方法。虽然已经有一些优秀的书籍介绍过特殊的并行编程环境,但本书不同之处在于,我们主要介绍并行算法的构造和设计思路。因此,我们将使用模式语言的概念,在面向对象社区中已经大量使用了这种包含专家设计经验的高度结构化表示。
本书前两章将介绍基础知识,其中第l章概述理解和使用模式语言所必需的并行计算相关概念及其背景,第2章将更深入地讨论并行程序员所使用的基本概念和术语,其余章节介绍具体的模式语言。
1.2 并行编程
并行计算的关键是可挖掘的并发性。如果一个计算问题能够被分解成多个子问题,并且所有子问题可在相同时间内同时、安全地解决,则该问题就存在并发性。必须分析问题并发性并在代码中显示开发性,使得子问题能够并行执行,也就是说,问题解决方案必须具备并发性。
大部分大规模计算问题具备一定的并发性。程序员通过建立并行算法并在并行编程环境中实现来挖掘问题的并发性。这样,当并行程序在多处理器系统上运行时,才能在更短的时间内完成计算。此外,相对于单处理器系统,多处理器系统能处理规模更大的问题。
例如,假设计算包括求一个大型数据集的和时,串行计算将所有的值按顺序相加;如果使用多处理器,则需划分数据集,并在不同处理器上计算每个子集的和,同时完成计算,最后求所有子集之和。这样利用多处理器并行计算能更快地完成任务。若每个处理器都有私有内存,将数据分布到多个处理器上即可处理更大规模的问题。
上述简单示例展示了并行计算的本质。并行计算的目标是利用多处理器在更短时间内解决问题,以及处理规模更大的问题(与单处理所能处理的问题规模相比)。程序员需要鉴别出问题的并发性,并设计并行算法来挖掘问题中的并发性,然后在合适的并行编程环境中编写并行代码,最后在并行系统上运行。
并行编程也面临一些挑战。通常,问题所包含的并发任务间具有一定依赖性,这些子计算以不同顺序完成可能会影响程序的运行结果。例如,在上述并行求和示例中,某一子集求和计算完成后,才能与其他子集的和相加。该算法对所有任务强加了一种偏序顺序(即所有子任务完成后才能够被组合在一起计算最终结果)。此外,由于浮点运算具有非结合性和非交换性,因此当求和运算顺序不同时,计算结果可能会有微小的数值差。设计安全的并行程序需要付出大量努力,优秀并行程序员必须非常谨慎以保证这些不确定性不会影响最终计算
结果。
即使一个并行程序是“正确”的,它也可能无法通过挖掘并发性来实现性能提高。必须确保挖掘并发性而导致的额外开销不会严重影响程序运行时间,并且在其他问题中实现负载平衡通常不像求和问题那样简单。并行算法效率依赖于它与底层硬件体系结构间的映射关系,一个并行体系结构上执行效率非常高的并行算法在另一个体系结构上执行的性能可能很差。
第2章将更为量化地介绍并行计算并重新讨论这个问题。
1.3 设计模式和模式语言
设计模式描述在特定上下文中类似问题的有效解决方法。模式具有预定的格式,包括模式名称、上下文的描述、目标和限制以及相应的解决方案。其理念是记录专家经验,供他人遇到类似问题时参考借鉴。除了解决方法本身外,模式名称也是非常重要的,它构成了领域专用词汇的基础,有效加强同一领域设计者之间的交流。
设计模式最早由Christopher Alexander提出,其应用的领域是城市规划和建筑学[AIS77]。Beck和Cunningham[BC87]最早将设计模式概念引入软件工程社区,随着Gamma、Helm、Johnson和Vlissides[GHJV95]的名为GoF(Gang of Four的缩写)的书籍的出版,这一概念在面向对象编程中占据了重要地位。该书收集了大量面向对象编程的设计模式。例如,Visitor模式描述了一种组织类的方式,能独立实现不同数据结构的代码与遍历它的代码,因此遍历仅仅依赖于每个节点的类型和实现该遍历的类。这能够在不改变数据结构类的情况下灵活地添加新功能,为数据结构的不同遍历方法实现提供了便利。GoF书中介绍的设计模式已经进入了面向对象编程词典,并已在学术文章、商业出版物和系统文档中广泛应用,这些设计模式已成为软件工程师所必需的知识。
一个组建于1993年的名为Hillside Group[Hil]的非盈利性教育组织促进了模式和模式语言的使用,更进一步地说,它鼓励人们编写通用的编程和设计实践方面的规范,因此促进了人们在计算机领域的交流。为了设计新的模式并帮助模式编写者提高技能,Hillside Group每年举办一次编程模式语言研讨会(Pattern Languages of Programs,PLoP),并在其他地方举办了分会,例如ChiliPLoP(在美国西部)、KoalaPLoP(在澳大利亚)、EuroPLoP(在欧洲)和Mensore PLOP(在日本)。这些研讨会的论文集[Pat]包含大量模式资源,覆盖了大多数软件应用领域,并成为几本书的[CS95、VCK96、MRB97、HFR99]主要素材。
Alexander最初研究模式时,不仅提出了一个模式分类方法,还提出了一种模式语言,从而引入了一种新的设计方法。在模式语言中,所有模式组织为一个特殊结构,用户遍历模式集,并选择具体模式来设计复杂系统。设计者在每个决策点上选择一个适合的模式,该模式可以导出其他多个模式,最终通过一个模式网络完成设计。因此,模式语言包括了一种设计方法学,并向应用程序开发人员提供了特定领域建议(尽管都称为语言,但模式语言并不是一种编程语言)。
1.4 关于并行编程的模式语言
本书给出了用于并行编程的模式语言,它具有许多优势。最直接的好处是它可以通过提供重要问题解决方法目录、扩展的词汇表和方法学来传播专家经验。我们希望在并行程序开发的全过程中提供指导来降低并行编程的难度。程序员首先应深入理解要解决的实际问题,然后利用模式语言,最终得到详细的并行设计或代码。我们的长期目标是希望模式语言成为定性评估不同编程模型、促进并行编程工具开发的基础。
模式语言由4个设计空间组成,包括寻找并发性、算法结构、支持结构和实现机制,如图1-1所示,4个空间构成一个线性层次,其中寻找并发性位于顶部,而实现机制位于底部。
寻找并发性设计空间的目标是重组问题以揭示其可开发的并发性。设计者在这个层次中主要面对高层次算法问题,并揭示问题的潜在并发性。算法结构设计空间利用潜在并发性构造算法,设计者在这个层次上考虑如何利用寻找并发性模式中的并发性。算法结构模式描述开发并发性的整体策略。支持结构设计空间为算法结构设计空间和实现机制设计空间提供了一个中间层。支持结构设计空间有两组重要的模式,一组程序构造方法的模式,另一组是通用共享数据结构模式。实现机制设计空间将上层空间的模式映射到特定的编程环境中。它描述进程线程管理(例如,创建或销毁进程线程)和进程线程间交互(例如信号量、栅栏或消息传递)的通用机制。实现机制设计空间中的条目直接被映射到特定并行编程环境中的元素,因此不表示为模式。但它们都包含在模式语言中,以便提供从问题描述到最终编码的完整解决方案。
……
|
|