第1章 使用OpenCL 1
1.1 引言 1
1.2 查询OpenCL平台 7
1.3 查询平台上的OpenCL设备 10
1.4 查询OpenCL设备扩展 14
1.5 查询OpenCL上下文 16
1.6 查询OpenCL程序 20
1.7 创建OpenCL内核 25
1.8 创建命令队列以及对OpenCL内核排队 28
第2章 理解OpenCL数据传送与划分 32
2.1 引言 32
2.2 创建OpenCL缓冲对象 33
2.3 检索关于OpenCL缓冲对象的信息 39
2.4 创建OpenCL子缓冲对象 41
2.5 检索关于OpenCL子缓冲对象的信息 45
2.6 理解事件和事件同步 47
2.7 在存储对象之间复制数据 50
2.8 使用工作项划分数据 55
第3章 理解OpenCL数据类型 62
3.1 引言 62
3.2 初始化OpenCL标量数据类型 63
3.3 初始化OpenCL向量数据类型 65
3.4 使用OpenCL标量类型 67
3.5 理解OpenCL向量类型 69
3.6 向量和标量地址空间 80
3.7 配置OpenCL项目以启用double数据类型 83
第4章 使用OpenCL函数 87
4.1 引言 87
4.2 将向量存储到数组中 88
4.3 从数组加载向量 91
4.4 使用几何函数 94
4.5 使用整型函数 97
4.6 使用浮点函数 99
4.7 使用三角函数 101
4.8 OpenCL中的算术和舍入 104
4.9 使用OpenCL中的shuffle函数 107
4.10 使用OpenCL中的select函数 109
第5章 开发直方图OpenCL程序 112
5.1 引言 112
5.2 在C/C++中实现直方图 112
5.3 直方图的OpenCL实现 115
5.4 工作项同步 124
第6章 开发索贝尔边缘检测滤波器 126
6.1 引言 126
6.2 理解卷积理论 127
6.3 理解一维卷积 128
6.4 理解二维卷积 130
6.5 索贝尔边缘滤波器的OpenCL实现 132
6.6 理解OpenCL中的剖析 137
第7章 使用OpenCL实现矩阵乘法 140
7.1 引言 140
7.2 理解矩阵乘法 141
7.3 矩阵乘法的OpenCL实现 144
7.4 通过线程粗化获得矩阵乘法的更快速OpenCL实现 147
7.5 通过寄存器分块获得矩阵乘法的更快速OpenCL实现 150
7.6 通过矩阵乘法中的共享内存数据预取减少全局内存 152
第8章 在OpenCL中实现稀疏矩阵向量乘法 157
8.1 引言 157
8.2 使用共轭梯度方法对SpMV求解 158
8.3 理解各种SpMV数据存储格式,包括ELLPACK、ELLPACK-R、COO和CSR 162
8.4 理解如何使用ELLPACK-R格式解决SpMV问题 166
8.5 理解如何使用CSR格式解决SpMV问题 168
8.6 理解如何使用VexCL格式解决SpMV问题 176
第9章 使用OpenCL实现双调排序 179
9.1 引言 179
9.2 了解排序网络 180
9.3 了解双调排序 182
9.4 在OpenCL中开发双调排序 187
第10章 使用OpenCL实现基数排序 196
10.1 引言 196
10.2 了解基数排序 196
10.3 了解MSD和LSD基数排序 198
10.4 了解归约 200
10.5 在OpenCL中开发基数排序 207