《OpenCL编程指南》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:(美)蒙施著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2012
  • ISBN:9787111398493
  • 页数:404 页
图书介绍:本书涵盖了全部的规范。该书分析了主要的使用案例,说明了OpenCL如何表示大范围的并行算法,给API和OpenCL编程语言提供了完整的参考资料。通过完整的案例学习和可下载的代码实例,作者说明了如何编写复杂的并行程序,将工作负荷分解到许多不同的设备上。作者还介绍了OpenCL 软件性能优化的所有要件,包括对硬件的探测和自适应。主要内容包括:介绍了OpenCL的核心模式,概念,术语,目标和基本理论;发现和准备可用资源;使用OpenCL C、内置函数和运行时API编程;使用缓冲区、辅助缓冲区、图像、采样器和事件;与OpenGL和微软的Direct3D的数据共享和同步;使用C++ Wrapper API简化开发过程;使用OpenCL的嵌入式规格,支持从手机到超级计算机节点设备;建立完整的应用:图像直方图,边缘检测滤波器,物理模拟,快速傅立叶变换,光流等;与PyOpenCL一起使用 OpenCL,包括从C++到Python的移植问题;执行矩阵乘法和高性能的稀疏矩阵乘法。

第一部分OpenCL1.1语言与API 2

第1章OpenCL介绍 2

1.1什么是OpenCL,或者为什么需要这本书 2

1.2多核的未来:异构平台 2

1.3多核世界中的软件 4

1.4 OpenCL的概念基础 7

1.4.1平台模型 7

1.4.2执行模型 8

1.4.3内存模型 13

1.4.4编程模型 15

1.5 OpenCL与图形 18

1.6 OpenCL的内容 19

1.6.1平台API 19

1.6.2运行时API 20

1.6.3内核编程语言 20

1.6.4 OpenCL小结 22

1.7嵌入式简档 22

1.8学习OpenCL 23

第2章HelloWorld:一个OpenCL例子 24

2.1构建示例 24

2.1.1必备条件 25

2.1.2 Mac OS X与Code::Blocks 25

2.1.3 Microsoft Windows与Visual Studio 26

2.1.4 Linux与Eclipse 28

2.2 HelloWorld示例 29

2.2.1选择OpenCL平台并创建一个上下文 31

2.2.2选择设备并创建命令队列 33

2.2.3创建和构建程序对象 34

2.2.4创建内核和内存对象 36

2.2.5执行内核 37

2.3检查OpenCL中的错误 39

第3章 平台、上下文和设备 41

3.1 OpenCL平台 41

3.2 OpenCL设备 44

3.3 OpenCL上下文 53

第4章OpenCL C编程 64

4.1使用OpenCL C编写数据并行内核 64

4.2标量数据类型 65

4.3矢量数据类型 67

4.3.1矢量字面量 68

4.3.2矢量分量 69

4.4其他数据类型 71

4.5衍生类型 71

4.6隐式类型转换 72

4.7显式强制类型转换 76

4.8显式转换 77

4.9将数据重新解释为另一种类型 80

4.10矢量操作符 82

4.10.1算术操作符 83

4.10.2关系和相等操作符 84

4.10.3位操作符 85

4.10.4逻辑操作符 85

4.10.5条件操作符 86

4.10.6移位操作符 86

4.10.7一元操作符 87

4.10.8赋值操作符 88

4.11限定符 89

4.11.1函数限定符 89

4.11.2内核属性限定符 90

4.11.3地址空间限定符 91

4.11.4访问限定符 94

4.11.5类型限定符 95

4.12关键字 95

4.13预处理器指令和宏 96

4.13.1 pragma指令 97

4.13.2宏 98

4.14限制 99

第5章OpenCL C内置函数 101

5.1工作项函数 101

5.2数学函数 103

5.2.1浮点pragma 107

5.2.2浮点常量 108

5.2.3相对误差作为ulp 108

5.3整数函数 111

5.4公共函数 113

5.5几何函数 115

5.6关系函数 116

5.7矢量数据加载和存储函数 119

5.8同步函数 124

5.9异步复制和预取函数 125

5.10原子函数 127

5.11杂项矢量函数 130

5.12图像读、写函数 131

5.12.1读图像 132

5.12.2采样器 134

5.12.3确定边界颜色 137

5.12.4写图像 137

5.12.5查询图像信息 138

第6章 程序与内核 140

6.1程序和内核对象概述 140

6.2程序对象 140

6.2.1创建和构建程序 141

6.2.2程序构建选项 143

6.2.3由二进制码创建程序 145

6.2.4管理和查询程序 153

6.3内核对象 153

6.3.1创建内核对象和设置内核参数 153

6.3.2线程安全性 156

6.3.3管理和查询内核 157

第7章 缓冲区和子缓冲区 159

7.1内存对象、缓冲区和子缓冲区概述 159

7.2创建缓冲区和子缓冲区 160

7.3查询缓冲区和子缓冲区 166

7.4读、写和复制缓冲区和子缓冲区 167

7.5映射缓冲区和子缓冲区 180

第8章 图像和采样器 183

8.1图像和采样器对象 183

8.2创建图像对象 184

8.2.1图像格式 187

8.2.2查询图像支持 189

8.3创建采样器对象 189

8.4处理图像的OpenCL C函数 192

8.5传输图像对象 194

第9章 事件 201

9.1命令、队列和事件概述 201

9.2事件和命令队列 202

9.3事件对象 206

9.4宿主机上生成事件 208

9.5影响宿主机上执行的事件 209

9.6使用事件完成评测 212

9.7内核中的事件 216

9.8 OpenCL外部的事件 217

第10章与OpenGL的互操作 218

10.1 OpenCL/OpenGL共享概述 218

10.2查询OpenGL共享扩展 218

10.3初始化OpenCL上下文实现OpenGL互操作 220

10.4从OpenGL缓冲区创建OpenCL缓冲区 221

10.5由OpenGL纹理创建OpenCL图像对象 225

10.6查询OpenGL对象的信息 226

10.7 OpenGL和OpenCL之间的同步 227

第11章与Direct3 D的互操作 230

11.1 Direct3D/OpenCL共享概述 230

11.2初始化OpenCL上下文实现Direct3 D互操作 230

11.3从Direct3 D缓冲区和纹理创建OpenCL内存对象 233

11.4 OpenCL中获取和释放Direct3 D对象 236

11.5 OpenCL中处理Direct3 D纹理 237

11.6 OpenCL中处理D3 D顶点数据 240

第12章C++包装器API 242

12.1 C++包装器API概述 242

12.2 C++包装器API异常 244

12.3使用C+++包装器API的矢量相加示例 246

12.3.1选择OpenCL平台并创建一个上下文 246

12.3.2选择一个设备并创建命令队列 246

12.3.3创建和构建程序对象 247

12.3.4创建内核和内存对象 248

12.3.5执行矢量相加内核 248

第13章OpenCL嵌入式简档 253

13.1 OpenCL简档概述 253

13.2 64位整数 254

13.3图像 255

13.4内置原子函数 256

13.5强制最小单精度数浮点能力 256

13.6 OpenCL C程序中确定设备支持的简档 258

第二部分OpenCL 1.1案例研究 260

第14章 图像直方图 260

14.1计算图像直方图 260

14.2并行实现图像直方图 261

14.3对并行图像直方图的优化 266

14.4每个通道使用半浮点或浮点值计算直方图 268

第15章Sobel边界检测过滤器 272

15.1什么是Sobel边界检测过滤器 272

15.2实现Sobel过滤器作为OpenCL内核 272

第16章 并行实现Dijkstra单源最短路径图算法 276

16.1图数据结构 276

16.2内核 278

16.3利用多个计算设备 281

第17章Bullet Physics SDK中的布模拟 286

17.1布模拟介绍 286

17.2模拟柔软物体 288

17.3 CPU上执行模拟 290

17.4实现基本GPU执行所需要的修改 291

17.5两层分批 296

17.6 SIMD计算和局部内存优化 298

17.7增加OpenGL互操作 302

第18章 用快速傅里叶变换模拟海洋 305

18.1 Ocean应用程序概述 305

18.2 Phillips频谱生成 308

18.3 OpenCL离散傅里叶变换 311

18.3.1确定2D分解 311

18.3.2使用局部内存 312

18.3.3确定子变换大小 313

18.3.4确定工作组大小 314

18.3.5得到旋转因子 314

18.3.6确定需要多少局部内存 314

18.3.7避免局部内存库冲突 315

18.3.8使用图像 315

18.4详细分析FFT内核 315

18.5详细分析转置内核 318

第19章 光流 320

19.1光流问题概述 320

19.2用硬件线性插值提供亚像素精度 328

19.3纹理缓存的应用 329

19.4使用局部内存 329

19.5提前退出和硬件调度 331

19.6利用OpenGL互操作实现高效可视化 331

19.7性能 332

第20章用PyOpenCL使用OpenCL 333

20.1 PyOpenCL介绍 333

20.2运行PyImageFilter2 D示例 333

20.3PyImageFilter2 D代码 334

20.4上下文和命令队列创建 337

20.5加载到图像对象 338

20.6创建和构建程序 339

20.7设置内核参数和执行内核 340

20.8读取结果 340

第21章 使用OpenCL完成矩阵乘法 342

21.1基本矩阵乘法算法 342

21.2直接转换到OpenCL 343

21.3增加每个内核的工作量 347

21.4优化内存移动:局部内存 350

21.5性能结果和优化原来的CPU代码 352

第22章 稀疏矩阵矢量乘法 354

22.1稀疏矩阵矢量乘法算法 354

22.2实现描述 355

22.3分块和分组稀疏矩阵表示 357

22.4首部结构 359

22.5分块分组稀疏矩阵设计考虑 359

22.6可选的组信息 360

22.7测试的硬件设备和结果 360

22.8其他优化领域 372

附录A OpenCL 1.1小结 373