第1章 GPU计算的发展历程 1
1.1 计算机图形学的发展 2
1.2 图形流水线 6
1.3 GPU的发展过程 8
1.4 GPU通用计算的发展历程 15
参考文献 18
第2章 现代图形处理器的体系结构 20
2.1 计算机体系结构基础 21
2.2 GPU的设计思想 23
2.3 NVIDIA图形处理器 25
2.3.1 总体体系结构 26
2.3.2 流多处理器 29
2.3.3 流多处理器的扩展 31
2.3.4 存储器 34
2.4 AMD Graphics Core Next图形处理器体系结构 37
2.4.1 GCN计算单元 38
2.4.2 GCN缓存 40
2.4.3 GCN GPU 41
2.5 Imagination PowerVR移动图形处理器体系结构 42
参考文献 44
第3章 异构系统体系结构和融合处理器 45
3.1 HSA基本概念 47
3.2 异构系统体系结构存储器模型 50
3.2.1 虚拟存储器的地址空间 51
3.2.2 缓存一致性 52
3.2.3 内存一致性 53
3.3 异构任务队列式调度机制 54
3.4 任务抢占和内容切换 57
3.5 HSA中间语言 57
3.6 AMD的HSA硬件 60
习题 62
参考文献 63
第4章 OpenCL基本概念 64
4.1 OpenCL程序的工作流程 64
4.2 OpenCL平台与设备 65
4.3 上下文、命令队列、kernel函数 70
4.4 存储对象 72
4.5 Hello World例程 73
习题 82
参考文献 82
第5章 OpenCL并行编程基础 83
5.1 并行线程组织 83
5.2 OpenCL存储器模型 86
5.3 数据类型 88
5.4 运算符 92
5.5 函数 93
5.6 矢量相加例程 96
5.7 矩阵相乘的OpenCL例程 98
5.7.1 矩阵相乘OpenCL代码 98
5.7.2 矩阵相乘分块计算的OpenCL代码 100
5.7.3 提高计算密度的分块矩阵相乘 102
5.7.4 使用矢量计算的分块矩阵相乘 105
习题 107
参考文献 107
第6章 OpenCL事件和队列 108
6.1 命令、命令队列和事件 109
6.2 事件的定义和基本用法 112
6.3 事件对象与用户事件 115
6.4 双设备队列管理例程 115
6.5 使用事件进行性能剖析例程 116
习题 118
参考文献 118
第7章 OpenCL 2.0高级特征 119
7.1 共享虚拟存储器 119
7.1.1 粗粒度缓冲区共享虚拟存储器 120
7.1.2 细粒度缓冲区共享虚拟存储器 122
7.1.3 细粒度系统级共享虚拟存储器 126
7.2 管道 127
7.3 嵌套并行 129
7.4 工作组函数 130
7.5 通用地址空间 131
习题 132
参考文献 133
第8章 并行程序设计方法 134
8.1 并行程序设计的复杂性 134
8.2 程序性能剖析 135
8.2.1 程序执行时间 135
8.2.2 程序性能剖析的概念 136
8.2.3 使用gprof剖析程序性能 137
8.2.4 解读性能剖析结果 139
8.3 寻找并行性 140
8.3.1 可行性分析 140
8.3.2 数据依赖性 141
8.4 并行化实例 142
8.4.1 顺序逻辑仿真算法 144
8.4.2 同步并行逻辑仿真 145
8.4.3 保守型并行逻辑仿真 145
8.5 并行化设计方法学 146
8.6 降低并行程序的开发难度 148
习题 149
参考文献和深入阅读 150
第9章 N体问题 152
9.1 串行算法 153
9.2 GPU端OpenCL程序 155
9.3 CPU端OpenCL程序 157
9.4 双GPU的OpenCL程序 160
习题 164
参考文献 164
第10章 归约问题 165
10.1 直观并行归约算法 166
10.2 减少闲置线程 168
10.3 改进局部内存访问 169
10.4 避免内存访问冲突 171
10.5 减少同步操作 172
10.6 优化顺序和并行工作比例 174
习题 177
参考文献 177
第11章 快速傅里叶变换 178
11.1 傅里叶变换原理 179
11.2 快速傅里叶变换算法 180
11.3 简化基-2 FFT算法内核 183
11.4 通用基-2 FFT算法内核 184
11.4.1 Twiddle因子 184
11.4.2 数据访问模式 185
11.4.3 64点FFT 187
习题 190
参考文献 190
第12章 稀疏矩阵——向量积 191
12.1 稀疏矩阵数据格式 192
12.2 对角稀疏矩阵 195
12.3 COO格式稀疏矩阵 201
12.4 CSR格式稀疏矩阵 203
12.5 ELL格式稀疏矩阵 206
习题 207
参考文献 207
第13章 直方图 208
13.1 直方图的计算 209
13.2 简单的并行直方图计算 210
13.3 数据值范围较小情形下的直方图算法 212
13.4 数据值范围较大情形下的加权直方图算法 214
习题 216
参考文献 216
第14章 光线追踪算法的OpenCL实现 217
14.1 光线追踪算法综述 219
14.2 光线追踪流水线解析 224
14.3 OpenCL光线追踪程序 228
14.3.1 代码框架 228
14.3.2 主机端代码及详解 229
14.3.3 设备端代码及详解 232
参考文献 237