内容简介
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编程基础
第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 加法函数和