前言 1
第1章 并行让程序运行得更快 7
你可能会想到的些问题 8
采用线程化方法的4个步骤 13
并行算法的背景知识 18
共享内存编程与分布式内存编程的比较 21
本书采用的并发编程方法 24
第2章 是否采用并发 27
并发算法的设计模型 28
哪些算法不能并行 47
第3章 算法正确性证明与性能衡量 53
并行算法的验证 54
示例:临界区问题 56
性能测试(程序的执行情况如何) 69
硬件并行性的发展历史 75
第4章 多线程程序设计中的8条简单规则 77
规则1:找出真正独立的运算 78
规则2:在尽可能高的层次上实现并发 78
规则3:尽早考虑通过增加处理器核的数量来获得可伸缩性 79
规则4:尽可能使用线程安全的库 80
规则5:使用正确的多线程模型 81
规则6:永远不要假设程序会按照某种特定的顺序执行 81
规则7:尽可能使用线程局部存储或者与特定数据相关的锁 82
规则8:要敢于对代码进行修改以获得更好的并发性 83
小结 83
第5章 线程化库 85
隐式线程化 86
显式线程化 92
其他主题 96
特定领域的库 96
第6章 并行求和与前缀求和 99
并行求和 100
前缀求和 106
选择 115
最后的思考 126
第7章 映射归约 127
并发映射运算 129
并发归约运算 131
映射归约的应用 139
映射归约作为般性并发 144
第8章 排序 145
冒泡排序 146
奇偶换位排序 153
希尔排序 162
快速排序 168
基数排序 180
第9章 搜索 197
未排序的数据序列 198
二分搜索 206
第10章 图算法 215
深度优先搜索 218
最短路径问题 233
最小生成树 238
第11章 线程化工具 249
调试器 250
性能工具 252
其他主题 254
再接再厉 255
术语表 257
照片说明 267