内容简介
第一部分OpenCL1.1语言与API
第1章OpenCL介绍
1.1什么是OpenCL,或者为什么需要这本书
1.2多核的未来:异构平台
1.3多核世界中的软件
1.4 OpenCL的概念基础
1.4.1平台模型
1.4.2执行模型
1.4.3内存模型
1.4.4编程模型
1.5 OpenCL与图形
1.6 OpenCL的内容
1.6.1平台API
1.6.2运行时API
1.6.3内核编程语言
1.6.4 OpenCL小结
1.7嵌入式简档
1.8学习OpenCL
第2章HelloWorld:一个OpenCL例子
2.1构建示例
2.1.1必备条件
2.1.2 Mac OS X与Code::Blocks
2.1.3 Microsoft Windows与Visual Studio
2.1.4 Linux与Eclipse
2.2 HelloWorld示例
2.2.1选择OpenCL平台并创建一个上下文
2.2.2选择设备并创建命令队列
2.2.3创建和构建程序对象
2.2.4创建内核和内存对象
2.2.5执行内核
2.3检查OpenCL中的错误
第3章 平台、上下文和设备
3.1 OpenCL平台
3.2 OpenCL设备
3.3 OpenCL上下文
第4章OpenCL C编程
4.1使用OpenCL C编写数据并行内核
4.2标量数据类型
4.3矢量数据类型
4.3.1矢量字面量
4.3.2矢量分量
4.4其他数据类型
4.5衍生类型
4.6隐式类型转换
4.7显式强制类型转换
4.8显式转换
4.9将数据重新解释为另一种类型
4.10矢量操作符
4.10.1算术操作符
4.10.2关系和相等操作符
4.10.3位操作符
4.10.4逻辑操作符
4.10.5条件操作符
4.10.6移位操作符
4.10.7一元操作符
4.10.8赋值操作符
4.11限定符
4.11.1函数限定符
4.11.2内核属性限定符
4.11.3地址空间限定符
4.11.4访问限定符
4.11.5类型限定符
4.12关键字
4.13预处理器指令和宏
4.13.1 pragma指令
4.13.2宏
4.14限制
第5章OpenCL C内置函数
5.1工作项函数
5.2数学函数
5.2.1浮点pragma
5.2.2浮点常量
5.2.3相对误差作为ulp
5.3整数函数
5.4公共函数
5.5几何函数
5.6关系函数
5.7矢量数据加载和存储函数
5.8同步函数
5.9异步复制和预取函数
5.10原子函数
5.11杂项矢量函数
5.12图像读、写函数
5.12.1读图像
5.12.2采样器
5.12.3确定边界颜色
5.12.4写图像
5.12.5查询图像信息
第6章 程序与内核
6.1程序和内核对象概述
6.2程序对象
6.2.1创建和构建程序
6.2.2程序构建选项
6.2.3由二进制码创建程序
6.2.4管理和查询程序
6.3内核对象
6.3.1创建内核对象和设置内核参数
6.3.2线程安全性
6.3.3管理和查询内核
第7章 缓冲区和子缓冲区
7.1内存对象、缓冲区和子缓冲区概述
7.2创建缓冲区和子缓冲区
7.3查询缓冲区和子缓冲区
7.4读、写和复制缓冲区和子缓冲区
7.5映射缓冲区和子缓冲区
第8章 图像和采样器
8.1图像和采样器对象
8.2创建图像对象
8.2.1图像格式
8.2.2查询图像支持
8.3创建采样器对象
8.4处理图像的OpenCL C函数
8.5传输图像对象
第9章 事件
9.1命令、队列和事件概述
9.2事件和命令队列
9.3事件对象
9.4宿主机上生成事件
9.5影响宿主机上执行的事件
9.6使用事件完成评测
9.7内核中的事件
9.8 OpenCL外部的事件
第10章与OpenGL的互操作
10.1 OpenCL/OpenGL共享概述
10.2查询OpenGL共享扩展
10.3初始化OpenCL上下文实现OpenGL互操作
10.4从OpenGL缓冲区创建OpenCL缓冲区
10.5由OpenGL纹理创建OpenCL图像对象
10.6查询OpenGL对象的信息
10.7 OpenGL和OpenCL之间的同步
第11章与Direct3 D的互操作
11.1 Direct3D/OpenCL共享概述
11.2初始化OpenCL上下文实现Direct3 D互操作
11.3从Direct3 D缓冲区和纹理创建OpenCL内存对象
11.4 OpenCL中获取和释放Direct3 D对象
11.5 OpenCL中处理Direct3 D纹理
11.6 OpenCL中处理D3 D顶点数据
第12章C++包装器API
12.1 C++包装器API概述
12.2 C++包装器API异常
12.3使用C+++包装器API的矢量相加示例
12.3.1选择OpenCL平台并创建一个上下文
12.3.2选择一个设备并创建命令队列
12.3.3创建和构建程序对象
12.3.4创建内核和内存对象
12.3.5执行矢量相加内核
第13章OpenCL嵌入式简档
13.1 OpenCL简档概述
13.2 64位整数
13.3图像
13.4内置原子函数
13.5强制最小单精度数浮点能力
13.6 OpenCL C程序中确定设备支持的简档
第二部分OpenCL 1.1案例研究
第14章 图像直方图
14.1计算图像直方图
14.2并行实现图像直方图
14.3对并行图像直方图的优化
14.4每个通道使用半浮点或浮点值计算直方图
第15章Sobel边界检测过滤器
15.1什么是Sobel边界检测过滤器
15.2实现Sobel过滤器作为OpenCL内核
第16章 并行实现Dijkstra单源最短路径图算法
16.1图数据结构
16.2内核
16.3利用多个计算设备
第17章Bullet Physics SDK中的布模拟
17.1布模拟介绍
17.2模拟柔软物体
17.3 CPU上执行模拟
17.4实现基本GPU执行所需要的修改
17.5两层分批
17.6 SIMD计算和局部内存优化
17.7增加OpenGL互操作
第18章 用快速傅里叶变换模拟海洋
18.1 Ocean应用程序概述
18.2 Phillips频谱生成
18.3 OpenCL离散傅里叶变换
18.3.1确定2D分解
18.3.2使用局部内存
18.3.3确定子变换大小
18.3.4确定工作组大小
18.3.5得到旋转因子
18.3.6确定需要多少局部内存
18.3.7避免局部内存库冲突
18.3.8使用图像
18.4详细分析FFT内核
18.5详细分析转置内核
第19章 光流
19.1光流问题概述
19.2用硬件线性插值提供亚像素精度
19.3纹理缓存的应用
19.4使用局部内存
19.5提前退出和硬件调度
19.6利用OpenGL互操作实现高效可视化
19.7性能
第20章用PyOpenCL使用OpenCL
20.1 PyOpenCL介绍
20.2运行PyImageFilter2 D示例
20.3PyImageFilter2 D代码
20.4上下文和命令队列创建
20.5加载到图像对象
20.6创建和构建程序
20.7设置内核参数和执行内核
20.8读取结果
第21章 使用OpenCL完成矩阵乘法
21.1基本矩阵乘法算法
21.2直接转换到OpenCL
21.3增加每个内核的工作量
21.4优化内存移动:局部内存
21.5性能结果和优化原来的CPU代码
第22章 稀疏矩阵矢量乘法
22.1稀疏矩阵矢量乘法算法
22.2实现描述
22.3分块和分组稀疏矩阵表示
22.4首部结构
22.5分块分组稀疏矩阵设计考虑
22.6可选的组信息
22.7测试的硬件设备和结果
22.8其他优化领域
附录A OpenCL 1.1小结