《OpenCL实战》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:(美)斯卡皮诺著
  • 出 版 社:北京:人民邮电出版社
  • 出版年份:2014
  • ISBN:9787115347343
  • 页数:406 页
图书介绍:本书是OpenCL的全面、实用的介绍,向开发者展示了如何构建自己的高性能应用程序。首先介绍OpenCL的概念,包括矢量计算、并发编程、多线程编程等等,然后引导读者按步骤学习,从简单的数据结构到复杂的函数。

第一部分 OpenCL编程基础 3

第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.1Aparapi安装 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.3PyOpenCL 206

9.3.1PyOpenCL安装和许可 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来编程实现实际的算法 233

第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.3Householder变换 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.1Harwell-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 315

第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.2Windows上的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.3Linux上的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.1GLUT/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.2GNU编译器 395

C.3Makefiles 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