首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 图书频道 > 计算机与网络 > 软件工程 >

并行程序设计原理

2010-02-18 
基本信息·出版社:机械工业出版社 ·页码:235 页 ·出版日期:2009年07月 ·ISBN:7111270754/9787111270751 ·条形码:9787111270751 ·版本:第1版 · ...
商家名称 信用等级 购买信息 订购本书
并行程序设计原理 去商家看看
并行程序设计原理 去商家看看

 并行程序设计原理


基本信息·出版社:机械工业出版社
·页码:235 页
·出版日期:2009年07月
·ISBN:7111270754/9787111270751
·条形码:9787111270751
·版本:第1版
·装帧:平装
·开本:16
·正文语种:中文
·丛书名:计算机科学丛书
·图书品牌:华章图书

内容简介 《并行程序设计原理》内容新颖,涉及现代并行硬件和软件技术,包括多核体系结构及其并行程序设计技术。《并行程序设计原理》侧重论述并行程序设计的原理,并论述了并行程序设计中一些深层次问题,如可扩展性、可移植性以及并行程序设计应遵循的方法学等。
编辑推荐 《并行程序设计原理》由机械工业出版社出版。
目录
出版者的话
推荐序
译者序
前言
第一部分 基 础
第1章 导论2
1.1 并行的威力和潜能2
1.1.1 并行,一个熟悉的概念2
1.1.2 计算机程序中的并行2
1.1.3 多核计算机,一个机遇3
1.1.4 使用并行硬件的更多机遇4
1.1.5 并行计算和分布式计算的比较4
1.1.6 系统级并行5
1.1.7 并行抽象的便利5
1.2 考察顺序程序和并行程序6
1.2.1 并行化编译器6
1.2.2 范例求解的变化7
1.2.3 并行前缀求和8
1.3 使用多指令流实现并行9
1.3.1 线程概念9
1.3.2 统计3的个数的多线程求解方法10
1.4 目标:可扩展性和性能可移植性17
1.4.1 可扩展性17
1.4.2 性能可移植性18
1.4.3 原理第一18
1.5 小结19
历史回顾19
习题19

第2章 认识并行计算机21
2.1 用可移植性衡量机器特征21
2.2 6种并行机介绍21
2.2.1 芯片多处理器21
2.2.2 对称多处理器体系结构23
2.2.3 异构芯片设计26
2.2.4 机群27
2.2.5 超级计算机27
2.2.6 对6种并行计算机的评论30
2.3 顺序计算机的抽象30
2.3.1 应用RAM模型31
2.3.2 评估RAM模型31
2.4 PRAM:一种并行计算机模型32
2.5 CTA:一种实际的并行计算机模型32
2.5.1 CTA模型33
2.5.2 通信时延36
2.5.3 CTA的性质36
2.6 存储器访问机制37
2.6.1 共享存储器37
2.6.2 单边通信37
2.6.3 消息传递38
2.6.4 存储器一致性模型38
2.6.5 程序设计模型39
2.7 进一步研究通信40
2.8 CTA模型的应用40
2.9 小结41
历史回顾41
习题41

第3章 性能分析43
3.1 动机和基本概念43
3.1.1 并行和性能43
3.1.2 线程和进程43
3.1.3 时延和吞吐率44
3.2 性能损失的原因45
3.2.1 开销45
3.2.2 不可并行代码46
3.2.3 竞争47
3.2.4 空闲时间47
3.3 并行结构48
3.3.1 相关性48
3.3.2 相关性限制并行性49
3.3.3 粒度50
3.3.4 局部性51
3.4 性能协调51
3.4.1 通信和计算52
3.4.2 存储器和并行性52
3.4.3 开销与并行52
3.5 性能度量53
3.5.1 执行时间54
3.5.2 加速比54
3.5.3 超线性加速比55
3.5.4 效率55
3.5.5 加速比问题55
3.5.6 可扩展加速比和固定加速比56
3.6 可扩展性能56
3.6.1 难于达到的可扩展性能57
3.6.2 硬件问题57
3.6.3 软件问题58
3.6.4 问题规模的扩展58
3.7 小结59
历史回顾59
习题59

第二部分 并行抽象
第4章 并行程序设计起步62
4.1 数据和任务并行62
4.1.1 定义62
4.1.2 数据和任务并行的说明62
4.2 Peril-L记号63
4.2.1 扩展C语言63
4.2.2 并行线程63
4.2.3 同步和协同64
4.2.4 存储器模型64
4.2.5 同步存储器66
4.2.6 归约和扫描67
4.2.7 归约的抽象68
4.3 统计3的个数程序实例68
4.4 并行性的表示68
4.4.1 固定并行性68
4.4.2 无限并行性69
4.4.3 可扩展并行性70
4.5 按字母顺序排序实例71
4.5.1 无限并行性71
4.5.2 固定并行性72
4.5.3 可扩展并行性73
4.6 三种求解方法的比较77
4.7 小结78
历史回顾78
习题78

第5章 可扩展算法技术80
5.1 独立计算块80
5.2 Schwartz算法80
5.3 归约和扫描抽象82
5.3.1 通用归约和扫描举例83
5.3.2 基本结构84
5.3.3 通用归约结构86
5.3.4 通用扫描组件举例87
5.3.5 应用通用扫描88
5.3.6 通用向量操作89
5.4 静态为进程分配工作89
5.4.1 块分配90
5.4.2 重叠区域91
5.4.3 循环分配和块循环分配92
5.4.4 不规则分配94
5.5 动态为进程分配工作95
5.5.1 工作队列95
5.5.2 工作队列的变体97
5.5.3 案例研究:并发存储器分配97
5.6 树99
5.6.1 按子树分配99
5.6.2 动态分配100
5.7 小结100
历史回顾100
习题101

第三部分 并行程序设计语言
第6章 线程程序设计104
6.1 POSIX Threads 104
6.1.1 线程的创建和销毁104
6.1.2 互斥108
6.1.3 同步110
6.1.4 安全性问题117
6.1.5 性能问题120
6.1.6 案例研究1:连续过度松弛124
6.1.7 案例研究2:重叠同步与计算129
6.1.8 案例研究3:多核芯片上的流计算134
6.2 Java Threads 134
6.2.1 同步方法135
6.2.2 同步语句136
6.2.3 统计3的个数程序实例136
6.2.4 易变存储器138
6.2.5 原子对象138
6.2.6 锁对象138
6.2.7 执行器138
6.2.8 并发集合138
6.3 OpenMP 138
6.3.1 统计3的个数程序实例139
6.3.2 parallel for的语义局限141
6.3.3 归约141
6.3.4 线程的行为和交互142
6.3.5 段142
6.3.6 OpenMP总结143
6.4 小结143
历史回顾143
习题143

第7章 MPI和其他局部视图语言145
7.1 MPI:消息传递接口145
7.1.1 统计3的个数程序实例145
7.1.2 组和通信子152
7.1.3 点对点通信152
7.1.4 集合通信154
7.1.5 举例:连续过度松弛157
7.1.6 性能问题159
7.1.7 安全性问题164
7.2 分区的全局地址空间语言164
7.2.1 Co-Array Fortran165
7.2.2 Unified Parallel C 166
7.2.3 Titanium 167
7.3 小结167
历史回顾168
习题168

第8章 ZPL和其他全局视图语言169
8.1 ZPL程序设计语言169
8.2 ZPL基本概念169
8.2.1 区域170
8.2.2 数组计算171
8.3 生命游戏实例173
8.3.1 问题173
8.3.2 解决方案173
8.3.3 如何实现174
8.3.4 生命游戏的哲学175
8.4 与众不同的ZPL特征175
8.4.1 区域175
8.4.2 语句级索引175
8.4.3 区域的限制176
8.4.4 性能模型176
8.4.5 用减法实现加法177
8.5 操作不同秩的数组177
8.5.1 部分归约177
8.5.2 扩充178
8.5.3 扩充的原理179
8.5.4 数据操作举例179
8.5.5 扩充区域180
8.5.6 矩阵乘181
8.6 用重映射操作重排数据182
8.6.1 索引数组183
8.6.2 重映射183
8.6.3 排序举例185
8.7 ZPL程序的并行执行186
8.7.1 编译器的职责186
8.7.2 指定进程数187
8.7.3 为进程分配区域187
8.7.4 数组分配188
8.7.5 标量分配188
8.7.6 工作分派188
8.8 性能模型189
8.8.1 应用实例1:生命游戏190
8.8.2 应用实例2:SUMMA算法190
8.8.3 性能模型总结191
8.9 NESL并行语言191
8.9.1 语言概念191
8.9.2 用嵌套并行实现矩阵乘192
8.9.3 NESL复杂性模型192
8.10 小结192
历史回顾193
习题193

第9章 对并行程序设计现状的评价194
9.1 并行语言的四个重要性质194
9.1.1 正确性194
9.1.2 性能195
9.1.3 可扩展性196
9.1.4 可移植性196
9.2 评估现有方法196
9.2.1 POSIX Threads 196
9.2.2 Java Threads 197
9.2.3 OpenMP 197
9.2.4 MPI 197
9.2.5 PGAS语言198
9.2.6 ZPL 198
9.2.7 NESL 199
9.3 可供将来借鉴的经验199
9.3.1 隐藏并行199
9.3.2 透明化性能200
9.3.3 局部性200
9.3.4 约束并行200
9.3.5 隐式并行与显式并行201
9.4 小结201
历史回顾201
习题202

第四部分 展望
第10章 并行程序设计的未来方向204
10.1 附属处理器204
10.1.1 图形处理部件204
10.1.2 Cell处理器207
10.1.3 附属处理器的总结207
10.2 网格计算208
10.3 事务存储器209
10.3.1 与锁的比较210
10.3.2 实现方法210
10.3.3 未解决的问题211
10.4 MapReduce 212
10.5 问题空间的提升214
10.6 新出现的语言214
10.6.1 Chapel215
10.6.2 Fortress 215
10.6.3 X10216
10.7 小结218
历史回顾218
习题218

第11章 编写并行程序219
11.1 起步219
11.1.1 访问和软件219
11.1.2 Hello, World 219
11.2 并行程序设计的建议220
11.2.1 增量式开发220
11.2.2 侧重并行结构220
11.2.3 并行结构的测试221
11.2.4 顺序程序设计221
11.2.5 乐意写附加代码222
11.2.6 测试时对参数的控制222
11.2.7 功能性调试223
11.3 对结课课程设计的设想223
11.3.1 实现现有的并行算法223
11.3.2 与标准的基准测试程序媲美224
11.3.3 开发新的并行计算224
11.4 性能度量225
11.4.1 与顺序求解方法比较226
11.4.2 维护一个公正的实验设置226
11.5 了解并行性能227
11.6 性能分析227
11.7 实验方法学228
11.8 可移植性和微调229
11.9 小结229
历史回顾229
习题229
术语表230
参考文献234
……
序言 随着多核体系结构的出现和快速发展,使得并行计算科学的硬件基础设施发生了很大变化,如果把并行硬件基础设施看成是“经济基础”,则其相应的上层并行软件就可以视为“上层建筑”。由于“经济基础”的变化,作为其中重要的“上层建筑”之一的并行程序设计技术,必须进行相应的变化以适应新的“经济基础”。因此如何在多核体系结构上进行高效的并行程序设计以充分利用多核所提供的硬件并行性,从而大幅度地提升并行计算性能指标就显得非常重要。本书的主要论题之一便是环绕这一问题展开的。并行程序设计比顺序程序设计要困难得多,一是因为并行程序设计的平台不是唯一的,存在多种不同的并行体系结构,而顺序程序设计只有唯一的冯·诺依曼体系结构;二是因为并行程序有多个进程或线程在同时运行,它们之往往需要进行通信和同步,这就使并行程序设计变得复杂,特别是在要获得线性加速比时尤为如此;三是因为并行程序设计没有顺序程序设计中如C及Java那样通用和普及的并行程序设计语言,因此只能针对不同的体系结构选择使用不同的并行语言或例程库,例如对于共享地址空间的体系结构就必须选择如OpenMP、Java Threads或POSIX Threads那样的语言,而对于分布地址空间的体系结构就不得不选择如MPI或PVM那样的例程库语言。此外若要开发数据并行性,则就需要选用高性能的如Fortran(HPF)那样的语言。本书另一个主要论题便是环绕这一问题展开的。
本书侧重论述并行程序设计的基本原理,解释各种现象,并分析为何这些现象意味着成功进行并行程序设计的机遇或是阻碍。并行的硬件基础设施和并行的软件设计环境随着时间的变迁会不断发生变化,但原理则永远不会过时。以原理作为第一要素进行论述是本书的特色之一。
本书的另一个特色是,它侧重可扩展性和可移植性,即所设计的并行程序具有在任何数目处理器系统上和在任何并行体系结构平台上运行良好的能力。这一概念在多核时代是非常关键的,这是因为:首先,使得并行计算具有可扩展能力的大多数技术与在多核芯片上生成高效求解的技术是相同的;其次,虽然目前的多核芯片所具有的处理器数目还比较小,通常是2~8个,但今后每个芯片上的核数将会急剧增加,这就使得可扩展并行概念与之直接相关;最后,显然我们应该侧重研究和开发那些在现在和将来都能很好工作的方法。
内容非常实用是本书的又一特色。这是因为本书在介绍并行程序设计系统的同时,还叙述如何在这些系统中应用并行程序的设计原理。作者通过自身丰富的实践经验为读者介绍了在从事并行程序设计时应遵循的方法学。译者认为从事并行程序设计者应注重对并行程序设计方法学的了解、掌握,以及有关素质的培养,唯此才能开发出性能良好以及生命力持久的并行程序,并提高编制并行程序的能力和生产率。翻译本书的原因有两个:一是本书的内容相当新,涉及现代的并行硬件和软件技术,包括多核体系结构及其并行程序设计技术;二是本书论述了并行程序设计中的一些深层次问题,如可扩展性、可移植性以及并行程序设计应遵的方法学等。本书的不足之处在于对一些性能问题的定量分析不够充实,此外所介绍的并行机抽象模型也不够全面,只有一个CTA模型。但这些瑕疵并不会影响本书的阅读价值。
本书是计算机科学专业本科高年级学生或一年级硕士生的理想教科书,对专业程序员来讲则是从事并行程序设计的一本理想入门书。本书对软件工程师和计算机系统设计师也是非常值得一读的参考书。
本书的翻译工作由陆鑫达教授负责和组织。陆鑫达教授翻译了目录、前言、第1~4章以及第10~11 章,林新华老师翻译了第5~9章。译稿全文由陆鑫达教授统稿审校。原书只分章不分节,为方便读者阅读,我们统一进行了分节。值此中译本出版之际,译者特向机械工业出版社华章公司的策划和编辑人员表示深切的谢意。书中的术语翻译,我们尽量采用已公布的计算机科学技术名词(第二版),对于一些未公布的术语(包括一些新出现的术语)我们尽量采用行的译法。由于时间较为仓促,翻译中的错误或不妥之处在所难免,敬请广大读者不吝指正。
文摘 插图:


并行是我们熟悉的一个概念。杂耍(juggling)是人类能完成的一个并行任务。房屋建造是一种并行活动,因为几个工人能同时完成不同的工作,如电线配线、水管安置、锅炉管道安装等等。大多数的工业产品如汽车、吹风器、速冻食品,都以流水线方式进行生产,在流水线上正在建造的许多单件产品是同时进行加工或装配的。呼叫中心则是另一种应用并行的结构,其中有许多雇员在同时为顾客服务。
虽然熟悉,但应注意这些并行形式是不同的。例如呼叫中心在本质上与房屋建造有所不同:呼叫通常是独立的,因此能以任意次序提供服务,而且工作人员之间几乎没有交互。而在建房时,某些任务能同时完成,如电线配线和水管安置,而另外一些任务则必须依次进行,例如配线架必须在配线之前进行安装。这种顺序限制了能同时进行的并行量,从而也就限制了一个建设项目完成的进度。顺序性也增加了工人之间的交互程度。制造业的流水线与前两者又有所不同,因为它们有严格的顺序约束,制造产品的各个阶段通常以顺序方式进行,并行性来自干流水线上同时在生产许多单件产品。杂耍则属于事件驱动的并行,当一个事件(一个落下的球)发生时将引起有关操作的执行(抓球、抛球)以响应该事件。这些熟悉的并行形式也将出现在我们要讨论的并行计算中。
热点排行