并行编程模式
作者 : (美)Timothy G. Mattson Beverly A. Sanders Berna L. Massingill 著
译者 : 张云泉 贾海鹏 袁良 译
丛书名 : 计算机科学丛书
出版日期 : 2015-02-12
ISBN : 978-7-111-49018-0
定价 : 75.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 275
开本 : 16
原书名 : Patterns for Parallel Programming
原出版社: Pearson Education Asia
属性分类: 教材
包含CD :
绝版 :
图书简介

本书介绍了并行编程的相关概念和技术。主要内容包括并行编程模式语言、并行计算的背景、软件开发中的并发性、并行算法结构设计、支持结构、设计的实现机制以及OpenMP、MPI等相关知识。

图书特色

从网格、集群到下一代游戏平台,并行计算正在成为主流。IBM、Intel、Oracle公司的超线程技术、超传输技术和多核微处理器等技术创新正在加速推动并行计算的发展。万事俱备,只欠东风——满足并行软件飞速增长需求的程序员。
本书是软件开发人员学习并行编程的权威教程,其中并没有过多讲解理论知识,而是讨论并行程序员所面临的挑战及其解决方案,并结合当前并行API的用法给出一些示例。书中引入了一种完整的、通俗易懂的模式语言,可以帮助任何有经验的开发人员编写高效的并行代码。通过学习本书,读者将意识到模式是掌握并行编程的最佳方式。本书不仅适用于高等院校计算机科学相关专业的学生,而且适用于各类软件开发人员。

本书主要内容包括:
理解并行计算和并行开发人员所面临的挑战。
找出软件设计中的并发问题并将其分解成并发任务。
管理不同任务间的数据使用。
生成一种可以有效利用已识别的并发性的算法结构。
将算法结构同需要实现的API相连接。
实现并行程序的特定软件结构。
与OpenMP、MPI和Java等当今主流的并行编程环境协同工作。

作者简介
Timothy G. Mattson 加州大学圣克鲁兹分校化学博士,英特尔生命科学社区首席发言人。他主要研究对大多程序员来说简化的并行编程技术,重点是计算生物学方面。
Beverly A. Sanders 哈佛大学应用数学博士,佛罗里达大学计算机信息科学与工程系副教授。她主要研究如何帮助程序员构建高质量的、正确的程序,包括形式化方法、组件系统和设计模式。
Berna L. Massingill 加州理工学院计算机科学博士,三一大学副教授。她的研究领域为并行和分布式计算,以及设计模式和形式化方法。

图书前言

“如果建好了它,他们就会到来。”
我们已建成了多处理器工作站、大规模并行超级计算机和集群,但利用这些机器编程的程序员却还没有出现。少数乐于迎接挑战的程序员已经证明,大多数问题可以利用并行计算机快速求解,但普通程序员,特别是那些生活安逸的职业程序员,却忽略了并行计算机。
他们这样做十分不明智,因为并行计算机即将成为主流。多线程微处理器、多核CPU、多处理器PC、集群、并行游戏控制台等并行计算机正在逐步占领整个计算市场,在计算机行业中,市场上到处是这样的硬件,这些硬件唯有借助并行程序才能全速运行。但谁将编写并行程序呢
这是一个老生常谈的问题,甚至在20世纪80年代早期“killer micros”开始取代传统向量机时,我们就十分担心如何吸引普通程序员编写并行程序。我们尝试了能想到的所有方法,包括高级硬件抽象、隐式并行编程语言、并行语言扩展和可移植消息传递库。但是经过多年的努力之后,“他们”并没有出现,绝大多数程序员并没有致力于编写并行软件。
一个常见的观点是,你不能将新技巧告诉老程序员,因此直到老程序员逐渐退出、新一代程序员逐渐成长后,并行编程问题才能够得到解决。
但我们不认同这种悲观主义态度。多年来,程序员一直在采用新的软件技术方面表现出非凡能力,许多使用Fortran的老程序员现在正在编写完美的Java面向对象程序。因此问题并非在于老程序员,而在于并行计算专家如何培养并行程序员。
这正是本书的目标,我们希望把握优秀并行程序员思考并行算法本质的过程,并以一种职业程序员易于掌握的方式讲解。为此,我们利用模式语言来介绍并行编程。之所以这样选择,不是因为要利用设计模式解决新领域中的问题,而是因为模式已经被证明适用于并行编程。例如,模式在面向对象设计领域非常有效,它们提供了一种用于讨论设计元素的通用语言,并且能够有效地帮助程序员掌握面向对象的设计方法。
本书包含并行编程的模式语言。前两章将介绍并行计算的一些基础知识,包括并行计算的概念和术语,而不是详尽介绍整个领域。
后4章介绍了模式语言,对应于创建一个并行程序的4个阶段。
寻找并发性。识别可用的并发性,并用于算法设计中。
算法结构。用一种高级结构组织一个并行算法。
支持结构。将算法转化为源代码,考虑如何组织并行程序以及如何管理共享数据。
实现机制。寻找特定的软件构造,实现并行程序。
这些模式紧密相关,构成了4个设计空间。从顶部(寻找并发性)开始,依次经历每一种模式,到达底部(实现机制)时,就可以得到并行程序的一个详细设计。
如果目标是一个并行程序,那么所需要的除了一个并行算法之外,还包括编程环境和用于表示程序源代码中并发性的方法。程序员过去需要面对大量不同的并行编程环境。幸运的是,随着时间的推移,并行编程社区目前主要使用三种编程环境。
OpenMP:扩展了C、C++和Fortran,主要用来在共享内存计算机上编写并行程序。
MPI:用于集群和其他分布式存储计算机的一种消息传递库。
Java:一种面向对象的编程语言,支持共享内存计算机上的并行编程,并支持分布式计算的标准类库。
很多读者可能熟悉其中的一种或几种编程语言,但为了方便那些并行计算的初学者,附录简要介绍了这几种编程环境。
我们研究模式语言多年,现在将其总结为一本书以便使用。但是这并非此项工作的终点。我们期望读者有自己的新想法,并设计更好的并行编程新模式。我们可能遗漏了模式语言的某些重要特征,希望并行计算社区能推广这种模式语言。我们将继续更新并改进这种模式语言,直到它成为并行计算社区的统一观点。我们将开展一些实际的工作,例如,使用模式语言来创建更好的并行编程环境,帮助人们使用这些模式来编写并行软件。我们将一直努力,直到并行软件全面代替串行软件的那一天。
致谢
我们从1998年开始研究模式语言,从如何设计并行算法的一个模糊概念开始到完成本书,已经走过了一段漫长而崎岖的道路。如果没有以下人员的帮助,我们不可能完成这项
任务。
Mani Chandy将Tim介绍给Berverly和Berna,并坚信我们能成为一个优秀团队。美国国家科学基金、英特尔公司、三一大学多年来一直支持本项目的研究。每年夏天在伊利诺伊举办的PLoP会议参与者为本书的具体并行编程模式提供了大量帮助。该会议的组织和审稿过程十分具有挑战性,但没有这些经验我们无法完成模式语言的研究。同时感谢仔细阅读本书并指出大量错误的审稿专家。
最后,还要感谢我们的家人。感谢Beverly的家人(Daniel和Steve),Tim的家人(Noah、August和Martha),以及Berna的家人(Billie),感谢他们的支持和付出。
Tim Mattson
Beverly Sanders
Berna Massingill

作者简介

(美)Timothy G. Mattson Beverly A. Sanders Berna L. Massingill 著:Timothy G. Mattson 加州大学圣克鲁兹分校化学博士,英特尔生命科学社区首席发言人。他主要研究对大多程序员来说简化的并行编程技术,重点是计算生物学方面。
Beverly A. Sanders 哈佛大学应用数学博士,佛罗里达大学计算机信息科学与工程系副教授。她主要研究如何帮助程序员构建高质量的、正确的程序,包括形式化方法、组件系统和设计模式。
Berna L. Massingill 加州理工学院计算机科学博士,三一大学副教授。她的研究领域为并行和分布式计算,以及设计模式和形式化方法。

译者简介

张云泉 贾海鹏 袁良 译:暂无简介

译者序

随着多核/众核处理器的普及以及并行计算集群应用的日益广泛,编写正确、高效的并行程序已经成为软件开发人员面临的一大挑战。并行程序可以归纳为一些具有明确定义的编程模式——用以描述并行编程的形式和方法,即并行编程模式。每一种模式都是具有相同控制结构的一类算法。并行模式的选择将直接影响并行程序的正确性和效率,从而影响整个系统的性能。因此,选择一种有效的并行编程模式对并行程序的编写及性能至关重要。
本书从寻找并发性、算法结构、支持结构和实现机制四个角度深入介绍了并行编程模式的分类、定义、实现、选择及应用。本书提供了从问题描述到最终编码的完整解决方案。首先从高层次的算法问题出发,介绍重组问题以开发算法的潜在并行性的策略及方法;在此基础上,从整体上讨论了如何利用算法的潜在并行性构造并行算法;接着从并行程序构造方法和共享数据结构的角度描述支持并行算法表达的软件构造;最后从进程/线程管理和进程/线程间交互两个方面,给出将上层空间的模式映射到特定编程环境的方法。本书不仅详细介绍了并行程序设计各个阶段的不同编程模式,讨论相应的关键技术,还详细介绍了OpenMP、MPI、Java这三种目前在并行编程社区常用的编程环境。此外,本书配备大量应用和程序实例,方便读者掌握相关技巧。总之,本书作者根据自己多年并行编程的实际经验,从并行算法的本质出发,以一种职业程序员易于掌握的方式对最为关键的基本知识和技术进行了细致讲解。本书可供具有一定并行编程经验的软件开发人员参考,为他们进行并行程序开发提供指导,从而降低并行编程的难度,提高并行程序的性能。
本书作者Timothy G. Mattson、Beverly A. Sanders和Berna L. Massingill从1998年就开始了模式语言和并行计算设计模式的相关工作,都具有丰富的并行编程经验。Timothy G. Mattson在加州理工学院时,就将自己的分子散射软件移植到Caltech/JPL超立方体上。此外,Mattson还参与了许多重要的并行计算项目,包括ASCI Red项目(第一个万亿次浮点运算大规模并行处理计算机)、OpenMP开发以及OSCAR(一种流行的集群计算包)。目前,他负责英特尔生命科学市场的战略决策,是英特尔生命科学的首席发言人。
由于时间仓促,加之书中个别术语目前没有统一译法,因此我们对一些术语采取了保留其英文名称的方法。书中翻译的错误和不妥之处,恳请广大读者不吝批评指正。

张云泉

图书目录

出版者的话
译者序
前言
作者简介
第1章 并行编程的模式语言 1
1.1 引言 1
1.2 并行编程 2
1.3 设计模式和模式语言 3
1.4 关于并行编程的模式语言 3
第2章 并行计算的背景和术语 5
2.1 并行程序中的并发性与操作系统中的并发性 5
2.2 并行体系结构简介 5
2.2.1 Flynn分类法 6
2.2.2 MIMD的进一步分类 7
2.2.3 小结 8
2.3 并行编程环境 8
2.4 并行编程术语 11
2.5 并行计算的度量 13
2.6 通信 15
2.6.1 延迟和带宽 15
2.6.2 重叠通信和计算以及延迟隐藏 15
2.7 本章小结 16
第3章 “寻找并发性”设计空间 17
3.1 关于设计空间 17
3.1.1 概述 18
3.1.2 使用分解模式 18
3.1.3 示例的背景知识 18
3.2 任务分解模式 20
3.3 数据分解模式 24
3.4 分组任务模式 27
3.5 排序任务模式 29
3.6 数据共享模式 31
3.7 设计评估模式 34
3.8 本章小结 38
第4章 “算法结构”设计空间 39
4.1 引言 39
4.2 选择一种算法结构设计模式 40
4.2.1 目标平台 40
4.2.2 主要组织原则 41
4.2.3 算法结构决策树 41
4.2.4 重新评估 42
4.3 示例 43
4.3.1 医学成像 43
4.3.2 分子动力学 43
4.4 任务并行模式 44
4.5 分治模式 50
4.6 几何分解模式 55
4.7 递归数据模式 69
4.8 流水线模式 73
4.9 基于事件的协作模式 82
第5章 “支持结构”设计空间 86
5.1 引言 86
5.1.1 程序结构模式 86
5.1.2 数据结构模式 87
5.2 面临的问题 87
5.3 模式选择 88
5.4 SPMD模式 89
5.5 主/从模式 102
5.6 循环并行模式 108
5.7 派生/聚合模式 120
5.8 共享数据模式 124
5.9 共享队列模式 131
5.10 分布式数组模式 143
5.11 其他支持结构 151
5.11.1 SIMD 152
5.11.2 MPMD 152
5.11.3 客户端-服务器计算 153
5.11.4 使用声明语言的并发编程 154
5.11.5 问题求解环境 154
第6章 “实现机制”设计空间 156
6.1 引言 156
6.2 UE管理 157
6.2.1 线程的创建/销毁 157
6.2.2 进程的创建/销毁 158
6.3 同步 159
6.3.1 内存同步和围栅 159
6.3.2 栅栏 162
6.3.3 互斥 165
6.4 通信 171
6.4.1 消息传递 171
6.4.2 集合通信 177
6.4.3 其他通信构造 182
附录A OpenMP简介 183
附录B MPI简介 198
附录C Java并发编程简介 212
术语表 224
参考文献 232
索引 243

教学资源推荐
作者: (美)Behrouz A.Forouzan
作者: [美] 托马斯·M.科沃(Thomas M. Cover),乔伊·A.托马斯 (Joy A. Thomas)著
作者: [美]Aadam Drozdek
参考读物推荐
作者: [美] 菲利普 G.伊佐特 (Phillip G.Ezolt) 著
作者: 华诚科技 编著
作者: 华诚科技 编著
作者: [比] 希普·万登·布鲁克(Seppe vanden Broucke),巴特·巴森斯(Bart Baesens) 著