OpenCL实战

OpenCL实战

(美) 斯卡皮诺 (Scarpino,M.) , 著

出版社:人民邮电出版社

年代:2014

定价:89.0

书籍简介:

本书是OpenCL的全面、实用的介绍,向开发者展示了如何构建自己的高性能应用程序。首先介绍OpenCL的概念,包括矢量计算、并发编程、多线程编程等等,然后引导读者按步骤学习,从简单的数据结构到复杂的函数。

书籍目录:

目 录

第一部分 OpenCL编程基础

第1章 OpenCL简介 3

1.1 OpenCL的来临 4

1.2 为什么是OpenCL 5

1.2.1 可移植性 5

1.2.2 标准化的向量处理 6

1.2.3 并行编程 7

1.3 类比:OpenCL处理和纸牌游戏 8

1.4 OpenCL应用程序的第一印象 10

1.5 OpenCL标准和扩展 13

1.6 框架和SDK 13

1.7 小结 14

第2章 主机编程:基本的数据结构 15

2.1 基本数据类型 16

2.2 获取平台信息 17

2.2.1 创建平台结构 17

2.2.2 获取平台信息 18

2.2.3 示例代码:测试平台的扩展 19

2.3 访问安装设备 20

2.3.1 创建设备结构 21

2.3.2 获取设备信息 22

2.3.3 示例代码:测试设备扩展 22

2.4 通过上下文管理设备 24

2.4.1 创建上下文 25

2.4.2 获取上下文信息 26

2.4.3 上下文和引用计数 27

2.4.4 示例代码:检查上下文的引用计数 27

2.5 将设备代码保存在程序中 28

2.5.1 创建程序 29

2.5.2 编译程序 30

2.5.3 获取程序信息 31

2.5.4 示例代码:构建来自多个源文件的程序 33

2.6 将函数打包为内核 34

2.6.1 创建内核 35

2.6.2 获取内核信息 35

2.6.3 示例代码:获取内核信息 36

2.7 用命令队列保存内核 37

2.7.1 创建命令队列 38

2.7.2 入列内核执行命令 38

2.8 小结 39

第3章 主机编程:数据传输和数据划分 41

3.1 设置内核参数 42

3.2 缓存对象 42

3.2.1 分配缓存对象 43

3.2.2 创建子缓存对象 45

3.3 图像对象 46

3.3.1 创建图像对象 46

3.3.2 获取图像对象的相关信息 49

3.4 获取缓存对象的相关信息 49

3.5 内存对象的传输命令 51

3.5.1 读/写数据传输 52

3.5.2 映射内存对象 55

3.5.3 内存对象间的数据复制 57

3.6 数据划分 59

3.6.1 循环和工作项 60

3.6.2 工作项的大小和偏移量 61

3.6.3 一个简单的一维例子 62

3.6.4 工作组和计算单元 63

3.7 小结 64

第4章 内核编程:数据类型和设备内存 66

4.1 内核编程简介 67

4.2 标量数据类型 68

4.2.1 访问双精度数据类型 69

4.2.2 字节顺序 70

4.3 浮点计算 71

4.3.1 浮点数据类型 71

4.3.2 双转度数据类型 72

4.3.3 half数据类型 73

4.3.4 检查IEEE-754的兼容性 73

4.4 向量数据类型 75

4.4.1 首选向量宽度 76

4.4.2 初始化向量 78

4.4.3 读取和修改向量分量 78

4.4.4 字节顺序和内存访问 81

4.5 OpenCL设备模型 83

4.5.1 内核模型类比的第一部分:学校中学数学的学生 83

4.5.2 设备模型类比的第二部分:设备上的工作项 84

4.5.3 程序中的地址空间 86

4.5.4 内存对齐 88

4.6 局部和私有内核参数 88

4.6.1 局部参数 89

4.6.2 私有参数 89

4.7 小结 90

第5章 内核编程:运算符和函数 92

5.1 运算符 93

5.2 工作组和工作项函数 95

5.2.1 维度和工作项 96

5.2.2 工作组 97

5.2.3 示例应用 97

5.3 数据传输操作 98

5.3.1 加载和保存同类型的数据 98

5.3.2 将标量数组加载保存到向量中 99

5.3.3 将向量保存到标量数组中 100

5.4 浮点型函数 100

5.4.1 算术运算函数和取舍函数 100

5.4.2 比较函数 102

5.4.3 指数函数和对数函数 103

5.4.4 三角函数 103

5.4.5 其他类型的浮点函数 105

5.5 整数函数 106

5.5.1 加法函数和减法函数 106

5.5.2 乘法运算 108

5.5.3 其他类型的整数函数 109

5.6 混洗和选择函数 111

5.6.1 混洗函数 111

5.6.2 选择函数 113

5.7 向量测试函数 115

5.8 几何函数 116

5.9 小结 118

第6章 图像处理 120

6.1 图像对象和采样器 121

6.1.1 主机上的图像对象:cl_mem 121

6.1.2 主机上的采样器;cl_sampler 122

6.1.3 设备上的图像对象:image2d_t和image3d_t 125

6.1.4 设备上的采样器:sampler_t 126

6.2 图像处理函数 126

6.2.1 图像读取函数 127

6.2.2 写图像函数 128

6.2.3 图像信息函数 129

6.2.4 一个简单的例子 130

6.3 图像放缩和插值 131

6.3.1 最邻近插值 131

6.3.2 双线性插值 132

6.3.3 用OpenCL编程放大图像 134

6.4 小结 135

第7章 事件、性能分析及同步化 136

7.1 主机提醒事件 137

7.1.1 将事件和命令关联 137

7.1.2 将事件和回调函数作关联 138

7.1.3 主机提醒的例子 139

7.2 命令同步事件 140

7.2.1 等待列表和命令事件 141

7.2.2 等待列表和用户事件 142

7.2.3 额外的命令同步函数 144

7.2.4 获取和事件关联的数据 146

7.3 性能分析事件 149

7.3.1 配置性能分析命令 149

7.3.2 对数据传输进行性能分析 151

7.3.3 对数据划分进行分析 152

7.4 工作项同步化 154

7.4.1 障碍和栅栏 155

7.4.2 原子操作 156

7.4.3 原子命令和互斥 158

7.4.4 异步数据传输 160

7.5 小结 161

第8章 用C++开发 163

8.1 初步了解 164

8.1.1 向量和字符串 164

8.1.2 异常 165

8.2 创建内核 166

8.2.1 平台、设备以及上下文 166

8.2.2 程序和内核 169

8.3 内核参数和内存对象 172

8.3.1 内存对象 173

8.3.2 通用数据参数 177

8.3.3 局部内存参数 178

8.4 命令队列 179

8.4.1 创建CommandQueue对象 179

8.4.2 入列内核执行命令 179

8.4.3 读写命令 181

8.4.4 内存映射和复制命令 183

8.5 事件处理 185

8.5.1 主机提醒 185

8.5.2 命令同步化 187

8.5.3 性能分析事件 188

8.5.4 另外的事件函数 189

8.6 小结 190

第9章 用Java和Python来开发 192

9.1 Aparapi 193

9.1.1 Aparapi安装 193

9.1.2 Kernel类 194

9.1.3 工作项和工作组 195

9.2 JavaCL 197

9.2.1 JavaCL安装 198

9.2.2 JavaCL开发概述 198

9.2.3 用JavaCL来创建内核 199

9.2.4 设定内核参数以及入列命令 202

9.3 PyOpenCL 206

9.3.1 PyOpenCL安装和许可 206

9.3.2 PyOpenCL开发概述 207

9.3.3 用PyOpenCL创建内核 207

9.3.4 设置参数和执行内核 211

9.4 小结 215

第10章 通用编程原则 217

10.1 全局大小和局部大小 218

10.1.1 找出工作组大小的上限值 218

10.1.2 测试内核和设备 220

10.2 数值归并 221

10.2.1 OpenCL的归并算法 221

10.2.2 使用向量提升归并运算的速度 224

10.3 工作组间的同步化 225

10.4 设计高性能内核的10条技巧 227

10.5 小结 229

第二部分 用OpenCL来编程实现实际的算法

第11章 归并与排序 233

11.1 MapReduce 234

11.1.1 MapReduce简介 234

11.1.2 MapReduce和OpenCL 236

11.1.3 MapReduce例子:字符串查找 238

11.2 双调排序 240

11.2.1 理解双调排序算法 240

11.2.2 用OpenCL来实现双调排序 243

11.3 基数排序 249

11.3.1 理解基数排序 250

11.3.2 用向量实现基数排序 250

11.4 小结 252

第12章 矩阵和QR分解 253

12.1 矩阵转置 254

12.1.1 矩阵简介 254

12.1.2 矩阵转置的理论和实现 254

12.2 矩阵乘法 257

12.2.1 矩阵乘法理论 257

12.2.2 用OpenCL编程实现矩阵乘法 258

12.3 Householder变换 259

12.3.1 向量投影 260

12.3.2 向量反射 261

12.3.3 外积和Householder矩阵 262

12.3.4 用OpenCL编程实现向量反射 263

12.4 QR分解 264

12.4.1 计算Householder向量和R矩阵 265

12.4.2 计算Householder矩阵和矩阵Q 266

12.4.3 用OpenCL编程实现QR分解 267

12.5 小结 270

第13章 稀疏矩阵 272

13.1 差分方程和稀疏矩阵 273

13.2 稀疏矩阵的存储以及Harwell-Boeing数据集 274

13.2.1 Harwell-Boeing数据集简介 274

13.2.2 访问Matrix Market文件中的数据 275

13.3 最速下降法 278

13.3.1 正定矩阵 279

13.3.2 最速下降法理论 279

13.3.3 用OpenCL编程实现SD算法 281

13.4 共轭梯度法 283

13.4.1 正交化和共轭 283

13.4.2 正交化和GRAM-SCHMIDT法 283

13.4.3 共轭梯度法 285

13.5 小结 287

第14章 信号处理和快速傅里叶变换 289

14.1 频率分析简介 289

14.2 离散傅里叶变换 291

14.2.1 DFT背后的理论 292

14.2.2 OpenCL和DFT 298

14.3 快速傅里叶变换 299

14.3.1 DFT的三条性质 299

14.3.2 构建快速傅里叶变换 302

14.3.3 用OpenCL来实现FFT 306

14.4 小结 311

第三部分 用OpenCL来加速OpenGL

第15章 将OpenCL和OpenGL结合 315

15.1 在OpenGL和OpenCL之间共享数据 316

15.1.1 创建OpenCL上下文 317

15.1.2 在OpenGL和OpenCL之间共享数据 319

15.1.3 同步化对共享数据的访问 322

15.2 获取信息 323

15.2.1 获取OpenGL对象和纹理信息 323

15.2.2 获取OpenGL上下文的相关信息 324

15.3 基本的互操作例子 325

15.3.1 初始化OpenGL操作 325

15.3.2 初始化OpenCL操作 326

15.3.3 创建数据对象 327

15.3.4 执行内核 327

15.3.5 渲染图形 328

15.4 互操作和动画 329

15.4.1 确定顶点数据 329

15.4.2 动画和显示 330

15.4.3 执行内核 331

15.5 小结 332

第16章 纹理和渲染缓存 334

16.1 图像滤波 335

16.1.1 高斯模糊 337

16.1.2 图像锐化 337

16.1.3 图像浮雕化 338

16.2 用OpenCL来对纹理滤波 339

16.2.1 init_gl函数 339

16.2.2 init_cl函数 339

16.2.3 configure_shared_data函数 340

16.2.4 execute_kernel函数 341

16.2.5 display函数 342

16.3 小结 343

附录A 安装和使用软件开发包 344

A.1 了解OpenCL SDK 344

A.1.1 检查设备的兼容性 344

A.1.2 OpenCL头文件和库文件 345

A.2 Windows上的OpenCL 347

A.2.1 在Windows上安装AMD显卡驱动 347

A.2.2 用AMD显卡来编译Windows应用程序 349

A.2.3 在Windows上安装Nvidia的显卡驱动 349

A.2.4 用Nvidia显卡来编译Windows应用程序 351

A.3 Linux上的OpenCL 351

A.3.1 在Linux上安装AMD的显卡驱动 351

A.3.2 在Linux上安装Nvidia显卡驱动 352

A.3.3 在Linux上编译OpenCL应用程序 354

A.4 在Mac OS上安装OpenCL 355

A.5 小结 356

附录B 用OpenGL作实时渲染 357

B.1 安装OpenGL 358

B.1.1 在Windows上安装OpenGL 359

B.1.2 在Linux上安装OpenGL 359

B.1.3 在Mac OS上安装OpenGL 360

B.2 在主机上开发OpenGL应用程序 360

B.2.1 将数据放到顶点缓存对象(VBO)之中 361

B.2.2 配置顶点属性 363

B.2.3 编译和部署着色器 365

B.2.4 启动渲染过程 367

B.3 开发着色器程序 369

B.3.1 着色器编程简介 370

B.3.2 顶点着色器 373

B.3.3 片段着色器 374

B.4 用GLUT来创建OpenGL窗口 375

B.4.1 配置和创建窗口 375

B.4.2 事件处理 376

B.4.3 显示窗口 377

B.5 将OpenGL和GLUT结合 379

B.5.1 GLUT/OpenGL初始化 379

B.5.2 设置视窗(viewport) 381

B.5.3 渲染模型 381

B.6 添加纹理 382

B.6.1 在主机应用程序中创建纹理 383

B.6.2 顶点着色器中的纹理映射 386

B.6.3 在片段着色器中使用纹理 387

B.7 小结 388

附录C 面向Windows和OpenCL的最简GNU 390

C.1 在Windows下安装MinGW 390

C.1.1 获取并运行图形安装工具 391

C.1.2 在MinGW下安装新工具 393

C.2 编译MinGW可执行程序 394

C.2.1 用MinGW编译HelloWorld! 394

C.2.2 GNU编译器 395

C.3 Makefiles 396

C.3.1 GNU makefile的结构 396

C.3.2 目标和伪目标 399

C.3.3 简单的makefile例子 401

C.4 编译OpenCL应用程序 401

C.5 小结 403

附录D Appendix D移动设备上的OpenCL 404

D.1 数值处理 404

D.2 图像处理 405

D.3 小结 406

内容摘要:

OpenCL(Open Computing Language)是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境。OpenCL当前已经广泛应用于各种并行环境和不同行业领域。
  《OpenCL实战》是OpenCL编程的实践指南,旨在介绍如何在实际的应用程序中使用OpenGL解决问题。全书共16章和4个附录。正文可以分为3个部分。第一部分是第1~10章,主要讨论的是OpenCL语言及其各项功能。第二部分是第11~14章,展示如何用OpenCL来处理高性能计算领域会经常碰到的大规模任务。最后一部分,包括15章和16章,展示如何用OpenCL来加速OpenGL应用程序的执行。附录A介绍了SDK并演示如何安装AMD和Nvidia所提供的SDK。附录B讨论了OpenGL和着色器程序开发的基础知识。附录C介绍如何安装和使用MinGW。附录D讨论了嵌入式OpenCL标准。
  《OpenCL实战》适合于需要在异构平台和并发环境下进行开发的专业人士阅读,要求读者有一定的C语言基础。《OpenCL实战》也适合对OpenCL和高性能计算感兴趣的读者参考。

书籍规格:

书籍详细信息
书名OpenCL实战站内查询相似图书
9787115347343
如需购买下载《OpenCL实战》pdf扫描版电子书或查询更多相关信息,请直接复制isbn,搜索即可全网搜索该ISBN
出版地北京出版单位人民邮电出版社
版次1版印次1
定价(元)89.0语种简体中文
尺寸24 × 19装帧平装
页数 160 印数 3000

书籍信息归属:

OpenCL实战是人民邮电出版社于2014.6出版的中图分类号为 TP391.41 的主题关于 图形软件-程序设计 的书籍。