
算法与并行计算
《算法与并行计算》是清华大学出版社于2012年出版的书籍,作者是Fayez Gebali,译者是都志辉。 本书正好可以满足这样一种需求,它提供了关于并行计算与并行算法设计的基本知识与具体的实现案例,可以指导我们设计高效的并行算法。
基本介绍
- 书名:算法与并行计算
- 作者:Fayez Gebali
- 译者:都志辉
- ISBN:9787302290094
- 定价:39
- 出版社:清华大学出版社
- 出版时间:2012-11-01
- 装帧:平装
- 印刷时间:2012-10-30
- 印次:1-1
图书简介
受到能耗的限制,仅靠CPU提升工作频率便可直接提升处理性能的方式已经不再适用。因此设计更多但是频率更低的处理核心便成为处理器发展的方向。多核处理器成为趋势,为了充分利用这些处理核心,必须採用并行方式才可以发掘它们的计算能力。因此并行处理就成了未来提高处理器性能的一种必需的手段。
图书目录
第1章 引言1
1.1 概述1
1.2 自动并行编程1
1.3 算法3
1.3.1 算法的有向图3
1.3.2 算法的邻接矩阵A4
1.3.3 基于子任务的依赖关係对算法进行分类5
1.3.4 串列算法6
1.3.5 并行算法6
1.3.6 SPA6
1.3.7 NSPA7
1.3.8 RIA8
1.3.9 并行算法实现8
1.4 设计并行计算系统9
1.5 并行算法和并行体系结构10
1.6 并行算法与并行体系结构相关10
1.7 算法的实现: 两个方面的问题11
1.8 衡量并行计算的优势11
1.8.1 加速比11
1.8.2 通信开销12
1.8.3 计算加速比和通信开销12
1.9 针对多处理器系统的Amdahl法则14
1.10 Gustafson-Barsis法则15
1.11 并行计算的套用16
1.11.1 气象建模16
1.11.2 CT17
1.11.3 计算机流体力学(CFD) 18
1.12 习题18
第2章 增强单处理器的性能21
2.1 概述21
2.2 提高处理器的时钟频率21
2.3 ALU的并行化22
2.4 使用分级存储器体系24
2.4.1 记忆体-高速快取之间的操作252.4.2 高速快取的设计26
2.4.3 分层高速快取26
2.4.4 将记忆体块映射到高速快取行 26
2.4.5 关联映射27
2.4.6 组相关映射28
2.4.7 快取容量对快取命中率的影响28
2.5 流水线作业28
估算流水线作业的速度29
2.6 超长指令字(VLIW)处理器32
2.7 指令级并行(ILP)和超标量处理器33
2.7.1 真实数据依赖: 写后读(RAW) 34
2.7.2 程式的依赖关係35
2.7.3 资源冲突35
2.7.4 输出依赖性: 写后写(WAW) 35
2.7.5 反依赖: 读后写(WAR) 36
2.8 多执行绪处理器36
2.9 习题37
第3章 并行计算机39
3.1 概述39
3.2 并行计算39
3.3 共享记忆体的多处理器(统一记忆体访问UMA) 40
3.4 分散式记忆体多处理器(非统一记忆体访问NUMA) 41
3.5 SIMD处理器41
3.6 脉动式处理器42
3.7 集群计算44
3.8 格线计算(云计算)44
3.9 多核系统44
3.10 流多处理器46
3.11 并行处理器之间的通信48
3.11.1 通信类型48
3.11.2 讯息传递(MP)通信机制49
3.12 并行体系结构总结50
3.13 习题50
第4章 共享记忆体多处理器52
4.1 概述52
4.2 高速快取一致性和记忆体一致性53
4.2.1 目录协定56
4.2.2 Snoopy协定57
4.3 同步和互斥57
4.3.1 同步: 锁机制58
4.3.2 同步: 互斥量59
4.3.3 同步: 栅栏60
4.3.4 同步原语的对比61
4.4 习题62
第5章 互连网路63
5.1 概述63
5.2 逻辑拓扑结构中互连网路的分类63
5.2.1 汇流排型63
5.2.2 星型64
5.2.3 环型64
5.2.4 网型64
5.2.5 交叉开关网路65
5.2.6 交叉开关网路的连线及仲裁66
5.2.7 多级互连网路66
5.2.8 榕树(Banyan)网路66
5.2.9 树型网路67
5.2.10 随机拓扑网路68
5.3 网际网路交换架构68
5.3.1 输入伫列交换器69
5.3.2 输出伫列交换器70
5.3.3 共享缓冲区交换器71
5.3.4 多输入伫列交换器73
5.3.5 多输出伫列交换器73
5.3.6 多输入输出伫列交换器74
5.3.7 VRQ交换器75
5.4 习题76
第6章 并发平台78
6.1 概述78
6.2 并发平台78
6.3 Cilk++78
6.3.1 Cilk++并行循环: cilk_for79
6.3.2 数据竞争和程式不确定性80
6.3.3 将串列代码并行化的Cilk++组件82
6.3.4 使用Cilk++实现矩阵乘法82
6.4 OpenMP84
6.4.1 OpenMP编译指导语句85
6.4.2 编译指导语句子句86
6.4.3 OpenMP负载分配87
6.4.4 循环指导语句: for87
6.4.5 循环指导语句: sections89
6.4.6 运行时库函式90
6.4.7 环境变数90
6.4.8 OpenMP同步90
6.5 统一计算设备架构(CUDA) 91
6.5.1 定义CUDA中的执行绪、块和格线93
6.5.2 将函式交付核心执行94
6.5.3 主机与CUDA设备间的通信95
6.5.4 CUDA执行绪的同步与通信95
6.5.5 核心和格线95
6.5.6 块97
6.5.7 执行绪97
6.5.8 CUDA C语言扩展97
第7章 针对并行算法的特别技术98
7.1 概述98
7.2 定义算法变数99
7.3 独立循环调度99
7.4 依赖循环100
7.5 针对简单依赖循环的循环分发方法100
7.6 循环展开101
7.7 问题划分101
7.8 分而治之(递归划分)策略102
7.9 流水线104
7.10 习题106
第8章 非串列-并行算法107
8.1 概述107
8.2 并行化用DAG表示的NSPA算法108
8.3 分析NSPA的形式化方法109
矩阵的幂的意义: 矩阵的连通性110
8.4 辨别算法中的环112
8.5 提取串列及并行算法的性能参数113
8.6 相关定理114
8.7 串列和并行算法在并行计算机上的性能116
8.8 习题116
第9章 z-变换分析118
9.1 概述118
9.2 z-变换的定义118
9.3 一维有限脉冲回响滤波器算法119
9.4 z-变换的软体硬体实现119
9.5 设计1: 用霍纳法则实现广播输入管道输出120
9.6 设计2: 管道输入广播输出121
9.7 设计3: 管道输入管道输出122
9.8 习题123
第10章 依赖关係图分析124
10.1 概述124
10.2 一维有限冲击回响滤波算法124
10.3 算法的依赖关係图124
10.4 计算算法的依赖关係图125
定义D中的变数125
10.5 一维有限冲击回响滤波的调度函式127
10.5.1 将依赖关係图转换为有向无环图或串列-并行算法127
10.5.2 广播变数128
10.5.3 流水变数128
10.5.4 确定调度函式129
10.5.5 线性执行绪/任务调度的限制130
10.5.6 非线性调度操作131
10.6 结点投影操作131
10.7 非线性投影操作132
使用并发平台133
10.8 有向无环图分析的软体和硬体实现133
10.8.1 设计方案1: 投影方向d?1=\?t133
10.8.2 设计方案2: 投影方向d?2=\?t134
10.9 习题135
第11章 计算几何分析136
11.1 概述136
11.2 矩阵乘算法136
11.3 3D依赖图和计算域D136
3D域边界137
11.4 D的面和顶点138
11.5 算法变数的依赖矩阵138
11.6 依赖矩阵的零空间: 广播子域B139
A的零空间139
11.7 设计空间的探索: 选择广播变数还是流水线变数141
11.7.1 馈送/提取广播变数的点141
11.7.2 变数流水线143
11.8 数据调度143
调度函式对数据时序的影响146
11.9 使用线性投影运算元进行投影操作147
11.9.1 投影矩阵P147
11.9.2 投影方向148
11.9.3 投影方向d的选择148
11.9.4 当投影方法d给定时,找出矩阵P149
11.10 投影操作对数据的影响150
11.10.1 输出数据150
11.10.2 输入数据M?2151
11.10.3 输入数据M?3151
11.11 最终的多执行绪/多处理器体系结构151
11.12 本章总结152
11.13 习题152
第12章 实例: 一维IIR数字滤波器154
12.1 概述154
12.2 一维IIR数字滤波器算法154
12.3 IIR滤波器的依赖图154
12.3.1 二维依赖图154
12.3.2 一维滤波器的调度函式155
12.3.3 投影方向和投影矩阵的选择157
12.3.4 设计1: 投影方向157
12.3.5 设计2: 投影方向157
12.4 一维IIR数字滤波器算法的z域分析159
12.4.1 设计3: 广播输入和流水线输出159
12.4.2 流水线输入和广播输出159
12.4.3 设计4: 流水线输入和输出159
12.5 习题161
第13章 案例分析: 二维与三维数字滤波器162
13.1 概述162
13.2 行和帧环绕问题162
13.3 二维递归滤波器163
13.3.1 二维IIR设计1: 广播XY输入、流水输出163
13.3.2 二维IIR设计2: 流水XY输入、广播输出164
13.4 三维数字滤波器165
13.4.1 三维IIR设计1: 广播XY输入、流水输出166
13.4.2 三维IIR设计2: 流水化X和Y输入、广播输出166
第14章 实例分析: 多重速率的採样器和插值器168
14.1 概述168
14.2 採样器的架构168
14.3 採样器的依赖关係图169
14.4 採样器时序170
14.5 在s?1=\ 的情况下,採样器的有向无环图171
14.6 在s?2=\的情况下,插值器的有向无环图172
14.7 在s?3=\的情况下,插值器的有向无环图174
14.8 多相採样器的实现174
14.9 插值器的架构175
14.10 插值器的依赖关係图176
14.11 插值器的调度177
14.12 在s?1=\的情况下,插值器的有向无环图178
14.13 在s?2=\ 的情况下,插值器的有向无环图179
14.14 在s?3=\ 的情况下,插值器的有向无环图180
14.15 多相插值器的实现181
第15章 案例学习: 模式匹配182
15.1 概述182
15.2 将算法表达为正则叠代算法(RIA)182
15.3 得到算法依赖图183
15.4 数据调度183
15.5 DAG结点的投影184
15.6 设计方案1: 当s=\?t时的设计空间184
15.6.1 设计方案1.a: 设s=\?t, da=\?t185
15.6.2 设计方案1.b: 设s=\?t, db=\?t186
15.6.3 设计方案1.c: 设s=\?t, dc=\?t186
15.7 设计方案2: 当s=\?t时的设计空间搜寻187
15.7.1 设计方案2.a: 设s=\?t, da=\?t187
15.7.2 设计方案2.b: 设s=\?t, db=\?t187
15.7.3 设计方案2.c: 设s=\?t, dc=\?t188
15.8 设计方案3: 当s=\?t时的设计空间搜寻188
设计方案3.a: 设s=\?t , da=\?t188
第16章 案例学习: 用于视频压缩的运动估计189
16.1 概述189
16.2 FBMA189
16.3 数据缓冲要求190
16.4 FBMA的形式化191
16.5 运动估计的分层形式化191
16.5.1 第3层(最左层)192
16.5.2 第2层192
16.5.3 第1层192
16.5.4 第0层(最右层)192
16.6 层次化结构块的硬体设计193
16.6.1 第3层的硬体设计193
16.6.2 第2层的硬体设计196
16.6.3 第1层的硬体设计197
16.6.4 第0层的硬体设计197
第17章 範例分析: 2?m阶伽罗瓦域乘法198
17.1 概述198
17.2 2?m阶伽罗瓦域乘法算法198
17.3 将域乘法表示为RIA200
17.4 域乘法的依赖图200
17.5 数据调度201
17.6 DAG结点投影203
17.7 设计1: 使用d?1=\?t204
17.8 设计2: 使用d?2=\?t204
17.9 设计3: 使用d?3=\?t205
17.10 有限域乘法器的套用206
第18章 範例分析: 2?m阶伽罗瓦域的多项式除法207
18.1 概述207
18.2 多项式除法算法207
18.3 LFSR依赖图208
18.4 数据调度209
18.5 DAG结点投影210
18.6 设计1: s?1=\时的设计空间211
18.7 设计2: s?2=\时的设计空间212
18.8 设计3: s?3=\时的设计空间214
18.9 3种设计方案的比较215
第19章 快速傅立叶变换217
19.1 概述217
19.2 时分FFT218
19.3 流水线基2时分FFT处理器221
19.4 频分FFT221
19.5 流水线基2频分FFT处理器224
第20章 求解线性方程组225
20.1 概述225
20.2 特别矩阵结构225
20.2.1 平面旋转(吉文斯)矩阵226
20.2.2 带状矩阵226
20.2.3 对角矩阵227
20.2.4 上三角矩阵227
20.2.5 下三角矩阵227
20.2.6 三对角矩阵227
20.2.7 上Hessenberg矩阵227
20.2.8 下Hessenberg矩阵228
20.3 前向替代(直接技术)228
20.3.1 前向替代依赖图228
20.3.2 前向替代规划方程和有向无环图(DAG)229
20.3.3 前向替代投影函式230
20.4 回代230
20.5 矩阵三角化算法230
20.5.1 Givens旋转算法232
20.5.2 矩阵三角化调度函式233
20.5.3 矩阵三角化投影方向234
20.6 连续超额鬆弛(SOR)(叠代法)234
20.6.1 SOR算法235
20.6.2 SOR算法调度算法235
20.6.3 SOR算法的投影方向236
20.7 习题237
第21章 使用有限差分法求解偏微分方程238
21.1 概述238
21.2 1-D系统的FDM239
21.2.1 1-D FDM的调度函式240
21.2.2 投影方向242
参考文献243
图书前言
本书大概可以分为两大部分,第1~11章侧重于基本的并行算法与知识的介绍,第12~21章侧重于如何利用前面介绍的知识来解决具体的套用问题。其中,第1章对本书中出现的几种重要算法: 串列算法,并行算法,以及正则叠代算法等进行了介绍。第2章介绍了提升单处理器性能的手段。第3章介绍了并行计算机的主要类型,包括: 共享记忆体,分散式记忆体,单指令多数据流,脉动阵列以及多核系统。第4章介绍了共享记忆体多核系统以及紧密相关的两个问题: 高速快取一致性和处理器同步。第5章介绍了并行处理器的集中内部网际网路: 汇流排型,星型,环型,以及网路拓扑,探讨了几种更高效的网路类型: 交换阵列,多层级网路。第6章介绍了用于开发并行套用的并发平台软体工具,包括Cilk++、OpenMP以及统一计算设备架构(CUDA) 。第7章介绍了特定算法在并行计算机上的实现方法、算法任务级别的流水线处理等。第8章介绍了NSPA算法的处理方法,NSPA是指无法归类于串列、并行或者是串并行的算法。第9章介绍z-变换的方法。第10章介绍构建叠代算法的依赖图。第11章介绍基于计算几何和线性代数概念的叠代算法分析技术。第12章探讨的是不同的一维(1D)有限脉冲回响(FIR)数码滤波器的并行处理架构。第13章探讨的是不同的二维(2D)和三维(3D)无限脉冲回响(IIR)数码滤波器的并行处理架构。第14章探讨的是不同的多採样率抽样器和中断器的并行处理架构。第15章探讨的是模式识别算法所需的并行处理架构。第16章探讨的是运用于视频压缩的运动估计并行处理架构。第17章探讨的是不同的有限域的2?m阶伽罗瓦域乘法的并行处理架构。第18章探讨的是不同的有限域的2?m阶伽罗瓦域除法的并行处理架构。第19章探讨的是不同的快速傅立叶变换算法的并行处理架构。第20章探讨了线性方程的求解系统。第21章讨论了使用有限差分法(FDM)来求解偏微分方程的不同的并行处理架构。
本书不是一本特别初级的入门教材,但是有一定计算机专业基础的读者阅读起来是不会有很大障碍的。另外对于需要直接了解某些具体案例的并行处理方法的读者,也可以从本书找到答案或者启发。推荐计算机、电子电气工程等相关专业的高年级本科生、研究生以及从事相关研究的科研人员阅读本书。