结构化并行程序设计:高效计算模式

译者序
前言
写在前面
第1章导论1
1.1并行思维2
1.2性能3
1.3动机:无处不在的并行6
1.3.1硬件发展推进并行化6
1.3.2并行化的历史趋势8
1.3.3显式并行编程的需求12
1.4基于模式的结构化编程15
1.5并行编程模型16
1.5.1理想特征16
1.5.2用抽象代替具体17
1.5.3规则数据并行18
1.5.4可组合性21
1.5.5功能可移植性21
1.5.6性能可移植性22
1.5.7安全性、确定性和可维护性22
1.5.8编程模型概述23
1.5.9何时使用模型28
1.6本书的结构29
1.7小结29
第2章背景知识31
2.1名词和符号31
2.2策略31
2.3机制33
2.4计算机模型35
2.4.1计算机模型概述35
2.4.2影响性能的关键因素39
2.4.3Flynn分类法41
2.4.4革新42
2.5性能理论43
2.5.1延迟和吞吐量44
2.5.2加速比、效率和可扩展性44
2.5.3功耗45
2.5.4Amdahl定律46
2.5.5Gustafson-Barsis定律48
2.5.6工作量–跨度模型49
2.5.7渐近复杂度51
2.5.8渐近加速比和渐近效率52
2.5.9Little公式53
2.6并行陷阱54
2.6.1竞态条件54
2.6.2互斥和锁55
2.6.3死锁56
2.6.4扩展性抑制57
2.6.5局部性不足57
2.6.6负载不均衡58
2.6.7额外开销58
2.7小结59
部分模式
第3章模式概述62
3.1嵌套模式63
3.2结构化串行控制流模式64
3.2.1序列64
3.2.2选择65
3.2.3迭代66
3.2.4递归68
3.3并行控制模式68
3.3.1Fork-Join68
3.3.2映射68
3.3.3模板69
3.3.4归约70
3.3.5扫描71
3.3.6递推73
3.4串行数据管理模式74
3.4.1随机读写74
3.4.2栈分配74
3.4.3堆分配75
3.4.4闭包75
3.4.5对象75
3.5并行数据管理模式76
3.5.1打包76
3.5.2流水线76
3.5.3几何分解77
3.5.4聚合78
3.5.5散发78
3.6其他并行模式79
3.6.1超标量序列79
3.6.2期货80
3.6.3投机选择80
3.6.4工作堆81
3.6.5搜索81
3.6.6切片81
3.6.7展开81
3.6.8分类归约82
3.6.9项图重写83
3.7非确定性模式83
3.7.1分支限界83
3.7.2事务84
3.8编程模型对模式的支持84
3.8.1CilkPlus86
3.8.2线程构建块87
3.8.3OpenMP88
3.8.4阵列构建块89
3.8.5OpenCL90
3.9小结91
第4章映射92
4.1概述93
4.2带缩放系数的向量加法94
4.2.1问题描述94
4.2.2串行实现95
4.2.3TBB实现96
4.2.4CilkPlus实现96
4.2.5使用数组符号的CilkPlus实现97
4.2.6OpenMP实现97
4.2.7使用向量操作的ArBB实现97
4.2.8使用元素函数的ArBB实现98
4.2.9OpenCL实现99
4.3芒德布罗分形图100
4.3.1问题描述100
4.3.2串行实现100
4.3.3TBB实现101
4.3.4CilkPlus实现101
4.3.5使用数组符号的CilkPlus实现101
4.3.6OpenMP实现103
4.3.7ArBB实现103
4.3.8OpenCL实现104
4.4映射的序列和序列的映射105
4.5并行模型的对比107
4.6相关模式107
4.6.1模板107
4.6.2工作堆108
4.6.3分治108
4.7小结108
第5章集合109
5.1归约109
5.1.1计算重排序110
5.1.2向量化111
5.1.3分块112
5.1.4精度113
5.1.5实现113
5.2映射和归约的融合114
5.2.1TBB中的显式融合115
5.2.2CilkPlus中的显式融合115
5.2.3ArBB中的自动融合115
5.3点积115
5.3.1问题描述115
5.3.2串行实现116
5.3.3SEE内联函数实现116
5.3.4TBB实现117
5.3.5CilkPlus实现119
5.3.6OpenMP实现120
5.3.7ArBB实现121
5.4扫描122
5.4.1CilkPlus123
5.4.2TBB124
5.4.3ArBB124
5.4.4OpenMP124
5.5映射和扫描的融合127
5.6积分127
5.6.1问题描述128
5.6.2串行实现128
5.6.3CilkPlus实现130
5.6.4OpenMP实现130
5.6.5TBB实现131
5.6.6ArBB实现132
5.7小结134
第6章数据重组135
6.1聚合135
6.1.1常规聚合135
6.1.2移位137
6.1.3拉合137
6.2散发138
6.2.1原子散发139
6.2.2排列散发139
6.2.3归并散发139
6.2.4优先散发140
6.3将散发转换为聚合140
6.4打包141
6.5映射和打包的融合142
6.6几何分解和分区143
6.7结构的数组和数组的结构145
6.8小结148
第7章模板和递推149
7.1模板149
7.2用移位实现模板151
7.3针对缓存的分块式模板151
7.4模板通信优化152
7.5递推153
7.6小结155
第8章Fork-Join

迈克尔·麦库尔(Michael McCool), Intel公司软件架构师,滑铁卢大学兼职副教授。
阿奇·D.罗宾逊(Arch D.Robison), Intel公司线程构建块架构师,KAI C++首席程序员。
仁达敬(James Reinders), Intel公司不错工程师,并行编程布道师,并行工具首席发言人。

于策,天津大学计算机科学技术学院副教授,NAOC-TJU天文信息技术联合研究中心主任,曾参与中国第32次南极科考。 本书由Intel的三位并行计算专家联合撰写,注重实践方法而非理论阐释,从问题分析伊始便引入并行思维,而非基于串行的思维定式。全书囊括了并行程序设计中通用且实用的编程模式,围绕IntelTBB和CilkPlus两个主要模型给出了大量示例,帮助读者学会编写高效的、结构化的、可维护的程序。本书可作为高年级本科生和研究生并行计算课程的理论教材或实验参考资料,也可供从事并行编程的程序员参考。

#现在前往

精选留言

结构化,并行,程序设计,高效
sample
2020-12-09
写留言
签到
投稿
QQ咨询
返回顶部