书刊介绍
《OpenCL异构并行计算》内容简介
本书一共分为4个部分:第1章介绍并行计算的沿革与现状。第2章介绍了OpenCLC语言的相关语法。第3章到第5章讲解了OpenCL运行时接口及其功能。第6章讲解了OpenCL更底层的工作机制,并结合当前主流的GPGPU做详细分析。第7章到第11章则是以四个实际常用算法来介绍如何用OpenCL做加速并行计算。通过阅读本书,读者不仅能全面掌握OpenCL的常规用法,而且还能深入了解OpenCL的运作机制,如何将计算设备的性能发挥到极致。这样就可以充分利用硬件特性来调整算法,使得计算速度能达到峰值。
作者:刘文志,陈轶,吴长江作品目录
序一
序二
前言
第1章:异构并行计算的过去、现状和未来
1.1、单核标量处理器的困境
1.1.1、单核标量处理器如何提高性能
1.1.2、为什么单核标量处理器性能到达瓶颈
1.2、多核并行计算与向量化的出现
1.2.1、为什么会有多核
1.2.2、为什么会有向量化
1.2.3、如何利用多核和向量化的能力
1.2.4、多核和向量化的难点
1.3、异构并行计算的崛起
1.3.1、GPGPU的理念
1.3.2、CUDA的崛起
1.3.3、OpenCL横空出世
1.4、异构并行计算的未来(百花齐放)
1.5、本章小结
第2章:OpenCL的基本介绍
2.1、什么是OpenCL
2.2、OpenCL平台模型
2.3、OpenCL执行模型
2.3.1、上下文
2.3.2、命令队列
2.3.3、内核在OpenCL设备上执行
2.4、OpenCL存储器模型
2.4.1、存储器区域
2.4.2、存储器对象
2.4.3、共享虚拟存储器
2.5、OpenCL与OpenGL
2.6、OpenCL与CUDA
2.7、本章小结
第3章:进入OpenCL的世界(矢量加法)
3.1、构建示例
3.1.1、Windows平台
3.1.2、Linux平台
3.1.3、OS
X平台
3.1.4、矢量加示例
3.2、获得OpenCL平台和设备及其属性
3.2.1、OpenCL平台
3.2.2、OpenCL设备
3.3、创建上下文和命令队列
3.3.1、创建OpenCL上下文
3.3.2、创建命令队列
3.4、创建程序对象和内核对象
3.5、程序对象
3.5.1、创建程序对象
3.5.2、构建程序对象
3.5.3、查询和管理程序对象
3.6、内核对象
3.6.1、创建内核对象
3.6.2、设置内核参数
3.6.3、查询和管理内核对象
3.7、执行内核
3.8、编写内核代码
3.9、OpenCL错误处理
3.10、本章小结
第4章:OpenCL
C语言
4.1、修饰符
4.1.1、地址空间修饰符
4.1.2、函数修饰符
4.1.3、对象访问修饰符
4.2、标量数据类型
4.3、矢量数据类型
4.3.1、为什么要有矢量数据类型
4.3.2、矢量数据的使用
4.4、运算符
4.5、工作项布局函数
4.5.1、维度和工作项
4.5.2、工作组
4.6、数据拷贝操作
4.6.1、矢量数据拷贝
4.6.2、异步拷贝和预取
4.7、浮点函数
4.7.1、数学函数
4.7.2、公共函数
4.7.3、几何函数
4.8、整数函数
4.9、关系函数
4.10、杂项矢量函数
4.11、同步函数
4.12、原子函数
4.13、图像读/写函数
4.13.1、内建图像读函数
4.13.2、内建无采样器图像读函数
4.13.3、内建图像写函数
4.13.4、内建图像查询函数
4.14、工作组函数
4.15、管道函数
4.15.1、内建管道读/写函数
4.15.2、内建工作组管道读/写函数
4.15.3、内建管道查询函数
4.16、设备队列
4.16.1、Blocks语法
4.16.2、设备队列相关函数
4.16.3、子内核存储器可见性
4.16.4、设备队列的使用示例
4.17、本章小结
第5章:OpenCL存储器对象
5.1、缓冲区
5.1.1、分配缓冲区对象
5.1.2、创建子缓冲区对象
5.2、图像对象和采样器对象
5.2.1、图像对象
5.2.2、采样器对象
5.2.3、图像旋转示例
5.3、管道
5.3.1、创建管道对象
5.3.2、管道对象查询
5.4、存储器对象数据传输
5.4.1、主机与设备间数据传输
5.4.2、存储器对象数据填充
5.4.3、存储器对象间数据传输
5.4.4、存储器对象映射
5.5、共享虚拟存储器
5.5.1、SVM缓冲操作
5.5.2、SVM类型和特性
5.5.3、相关示例
5.6、存储器一致性模型
5.6.1、存储器次序规则
5.6.2、原子操作的存储器次序规则
5.6.3、栅栏操作的存储器次序规则
5.6.4、工作组函数的存储器次序规则
5.6.5、主机端与设备端命令的存储器次序规则
5.6.6、关于存储器次序在实际OpenCL计算设备中的实现
5.7、本章小结
第6章:OpenCL同步及事件机制
6.1、主机端的OpenCL同步
6.2、OpenCL事件机制
6.2.1、对OpenCL事件的标记和栅栏
6.2.2、内核程序中的同步
6.2.3、工作组内同步
6.3、原子操作
6.3.1、OpenCL
1.2中的原子操作
6.3.2、OpenCL
2.0中的原子操作
6.4、局部存储器与全局存储器间的异步拷贝
6.5、工作组间同步
6.6、本章小结
第7章:OpenCL与OpenGL互操作
7.1、从一个OpenGL上下文来创建OpenCL上下文
7.2、OpenCL使用OpenGL共享的缓存对象
7.3、OpenCL使用OpenGL纹理数据
7.4、OpenCL共享OpenGL渲染缓存
7.5、从一个OpenCL存储器对象查询OpenGL对象信息
7.6、访问共享对象的OpenCL与OpenGL之间的同步
7.7、本章小结
第8章:OpenCL到主流GPU处理器的映射
8.1、AMD家族GPU
8.1.1、AMD
Cayman架构GPU
8.1.2、AMD
GCN架构的GPU
8.2、NVIDIA
CUDA兼容的GPU
8.2.1、NVIDIA
GPU架构的执行模型
8.2.2、NVIDIA
GPU的全局存储器
8.2.3、NVIDIA
GPU的局部存储器
8.3、ARM
Mali
GPU架构
8.3.1、硬件架构
8.3.2、存储器层次
8.3.3、OpenCL映射
8.4、本章小结
第9章:OpenCL计算二维卷积
9.1、测试平台信息
9.2、AMD
X86、CPU串行实现
9.2.1、简单实现
9.2.2、循环展开优化实现
9.2.3、AVX指令集优化
9.2.4、OpenMP
9.3、简单OpenCL实现
9.4、使用常量存储器优化
9.5、使用局部存储器优化
9.6、一个工作项同时计算多个输出
9.7、本章小结
第10章:OpenCL计算矩阵乘法
10.1、串行实现
10.1.1、初次实现
10.1.2、缓存友好的实现
10.1.3、使用AVX指令集实现
10.2、简单OpenCL实现
10.3、使用局部存储器优化
10.4、使用向量加载指令
10.5、一个工作项同时计算多个输出
10.6、优化流水线性能
10.7、本章小结
附录A
OpenCL
Query实例
附录B
其他主流异构并行计算编程环境简介