第1章 并行编程入门 1
引言 1
OpenCL 1
本书目标 2
并行思维 2
并发编程模型和并行编程模型 6
线程和共享内存 9
消息传递通信 9
不同粒度的并行 10
数据共享和同步 11
本书结构 11
参考文献 13
扩展阅读和相关网站 13
第2章 OpenCL简介 15
引言 15
OpenCL标准 15
OpenCL规范 15
kernel和OpenCL执行模型 16
平台和设备 19
主机-设备之间的交互 19
执行环境 22
上下文 22
命令队列 22
事件 23
内存对象 24
flush命令和finish命令 26
新建一个OpenCL程序对象 26
OpenCL的kernel 27
内存模型 29
写kemel 31
向量相加实例的完整代码 32
使用C++封装API实现向量相加 35
小结 38
参考文献 38
第3章 OpenCL设备架构 39
引言 39
硬件权衡 39
性能随频率的提升及其限制 41
超标量执行 42
VLIW 42
SIMD和向量处理 45
硬件多线程 46
多核架构 49
集成:片上系统和APU 51
高速缓存层次和内存系统 52
架构设计空间 53
CPU设计 55
GPU体系结构 58
APU和类APU的设计 60
小结 62
参考文献 63
第4章 OpenCL基本实例 65
引言 65
应用实例 65
简单的矩阵相乘 65
图像旋转实例 71
图像卷积实例 75
编译OpenCL主机端应用 82
小结 83
第5章 OpenCL的并发与执行模型 85
引言 85
kernel,workitem,workgroup和执行域 85
OpenCL同步:kernel,fence和barrier 88
队列与全局同步 92
OpenCL的内存一致性 94
事件 94
命令barrier与marker 106
主机端内存模型 107
buffer对象 108
image对象 111
设备端内存模型 113
设备端宽松的内存一致性 114
全局内存 115
本地内存 117
常量内存 119
私有内存 120
小结 120
第6章 OpenCL在CPU/GPU平台上的实现 121
引言 121
OpenCL在AMD BULLDOZER上的实现 121
OpenCL在AMD RADEON HD7970 GPU上的实现 126
多线程和内存系统 128
HD7970架构上的指令执行 130
VLIW执行的改进 134
资源分配 135
OpenCL的内存性能 136
OpenCL全局内存 136
本地内存——软件管理的缓存 140
小结 146
参考文献 146
第7章 数据管理 147
引言 147
内存管理 147
独立环境中(使用独立GPU)的数据传输 149
优化 149
缓存区 150
共享内存环境中的数据存储 151
本地内存 153
缓存的系统内存 154
非缓存系统内存 154
应用实例——workgroup归约 155
使用独立GPU设备 156
使用APU 158
参考文献 159
第8章 OpenCL案例学习:卷积 161
引言 161
计算卷积的kemel 161
选择合适的workgroup大小 161
将数据缓存到本地内存 164
执行卷积 170
小结 171
代码清单 172
主机端代码 172
kernel代码 176
参考文献 181
第9章 OpenCL案例学习:直方图 183
引言 183
选择适量的workgroup 183
选择最优的workgroup大小 184
全局内存访存优化 185
使用原子操作计算局部直方图 187
本地内存访存优化 188
局部直方图的归约 190
全局归约 191
完整的kernel代码 191
性能和小结 194
第10章 OpenCL案例学习:混合粒子模拟 195
引言 195
计算概览 196
GPU实现 198
创建buffer 198
构造加速结构 199
计算碰撞 199
合成 200
CPU实现 200
负载均衡 201
性能和小结 202
生成均匀网格的kernel代码 203
粒子模拟的kernel代码 204
第11章 OpenCL扩展 209
引言 209
扩展机制概览 209
设备拆分 212
双精度 223
参考文献 231
第12章 在其他语言中使用OpenCL 233
引言 233
C和C++之外 233
Haskell Opencl 235
模块结构 237
环境 237
引用计数 237
平台和设备 238
运行环境 239
小结 241
参考文献 242
第13章 OpenCL的性能剖析和调试 243
引言 243
基于事件的剖析 244
AMD APP Profiler 246
收集OpenCL程序轨迹 247
收集OpenCL GPU Kernel性能计数器 250
AMD APP KemelAnalyzer 251
演示AMD APP Profiler 253
启动AMD APP Profiler 253
使用应用程序的轨迹数据以发现性能瓶颈 253
使用GPU性能计数器发现kernel的性能瓶颈 255
调试OpenCL应用程序 256
gDEBugger概览 257
使用gDEBugger调试并行OpenCL应用程序 257
AMD printf扩展 259
小结 261
第14章 某图像分析应用的性能调优 263
引言 263
算法描述 264
CPU多线程实现的OpenCL移植 266
热点分析 267
kernel开发及静态分析 269
性能优化 270
Kernel Occupancy 271
workgroup大小的影响 275
向量寄存器(VGPR)和LDS的影响 281
能耗和性能分析 283
小结 284
参考文献 284
索引 285