搜索
高级检索
高级搜索
书       名 :
著       者 :
出  版  社 :
I  S  B  N:
文献来源:
出版时间 :
OpenCL异构并行计算:原理、机制与优化实践:from principle to practice
0.00    
图书来源: 浙江图书馆(由图书馆配书)
  • 配送范围:
    全国(除港澳台地区)
  • ISBN:
    9787111519348
  • 作      者:
    刘文志,陈轶,吴长江著
  • 出 版 社 :
    机械工业出版社
  • 出版日期:
    2016
收藏
编辑推荐
  

工业界和学术界联合鼎力推荐,国内专家和实践者合力打造,所有案例均经过真机环境验证

基于OpenCl  2.0标准,OpenCL的API、平台支持、编程模型、通信机制,以及与OpenGL的交互,尤其对OpenCl  2.0新引入的SVM机制、管道和新定义的原子操作机制等进行了深入讲解,辅以大量示例说明,并给出卷积、矩阵乘法等优化实践案例

由于人工智能和机器学习随着移动互联的兴起,特别是对诸如图片、视频、语音等非结构化数据的挖掘、识别等以智能算法为核心的应用的兴起,“异构平台”成为各大互联网厂商追逐数据挖掘平台先进性的标志之一。
  与CUDA只能运行在NVIDIA  GPU上相比,OpenCL由Khronos国际标准组织发布与维护,是一种针对通用并行计算的开放行业标准和跨厂商解决方案,可以实现“一次编写,多环境运行”,大大提高开发效率。OpenCL正在成为异构处理器的性能调优利器和开发语言。然而,为了实现通用和跨平台的目标,OpenCL被设计成一个相对复杂的并行编程标准,其编程充满了各种困难和挑战。本书将是克服上述困难的利器。
  
  本书基于OpenCL  2.0标准编写,有以下亮点:
  简洁、通俗的语句和丰富的代码示例清晰解释了OpenCL中比较晦涩难懂的各种概念以及API的使用。
  剖析如何利用OpenCL  C编写内核,并深入解析OpenCL的存储器模型,以及OpenCL到主流GPU处理器的映射等核心技术与实战经验。
  通过二维卷积、矩阵乘法等实际案例的开发和优化,进一步帮助读者加深对OpenCL的概念和应用的理解。

展开
作者简介

  刘文志(花名风辰),毕业于中国科学院研究生院,闻名于并行计算江湖,尤善异构并行计算(X86、ARM、GPU、APU及PHI)和大规模集群计算,有7年相关经验,涉及图像处理、计算机视觉、数据挖掘和石油勘探。曾任英伟达并行计算工程师(协助建立英伟达北京CUDA团队)、百度在线高级研发工程师(协助建立百度深度学习实验室异构计算团队)。著有《并行算法设计与性能优化》《并行编程方法与优化实践》《科学计算与企业级应用的并行优化》三本并行计算领域的专著。微信公众号为:风辰的异构并行计算。


  陈轶,网名zenny_chen,安沃传媒移动客户端及HTML5技术研发总监、首席科学家。多年高性能计算、嵌入式系统与移动互联网实践经验,深谙实时操作系统内核、设备驱动研发,对多媒体高性能计算编程、移动端开发以及各种处理器架构如数家珍,同时精通计算机底层基础技术与各种编程语言,现任OpenGPU社区“并行计算讨论区”以及“高级计算机体系结构讨论区”两大版块的版主,以及CocoaChina社区的Swift编程语言讨论区以及代码例子区的版主。曾任理光上海图像技术有限公司的高级体系结构工程师。


  吴长江,多年GPU异构并行计算经验,涉及视频图像处理、石油勘探、密码破解和有限元分析等。GPU编程布道者,讲解OpenACC,CUDA相关内容。译有CUDA Fortran有关书籍及OpenACC编程标准。精通CUDA C/Fortran、OpenCL、OpenACC,近期关注移动端GPU在GPGPU方面的应用。

展开
内容介绍

  工业界和学术界联合鼎力推荐,国内专家和实践者倾囊相授,所有案例均经过真机环境验证。

  本书基于OpenCL 2.0标准,清晰地阐述了OpenCL的API,编程模型,交互与通信机制以及平台支持,对OpenCL 2.0新引入的SVM机制、管道和原子操作等进行了深入讲解,辅以大量示例说明,并给出卷积、矩阵乘法等优化实践案例。

??

  第1章主要介绍并行计算的发展历程以及OpenCL在其中所扮演的角色;第2章和第3章介绍了OpenCL的大体概念以及在主机端上API的功能与说明,让大家对OpenCL有一个整体认识,并熟悉开发的一般流程;第4章和第5章主要描述OpenCL C语言的概念以及相关语法点,让读者学会利用OpenCL C编写内核,深刻理解OpenCL的存储器模型。第6章对OpenCL整个同步机制做了总结性的深入介绍,从主机端的事件同步到内核程序的原子操作,每一种同步方式都做了非常详细的介绍;第7章详细描述了OpenCL与OpenGL之间的交互,以充分发挥GPU的计算能力,弥补OpenGL力有不逮的应用场景;第8章介绍了当前OpenCL实现厂商对各自OpenCL的硬件实现,以及各种不同硬件平台上如何有针对性地对OpenCL程序做进一步优化。第9章到第10章通过二维卷积和计算矩阵介绍了OpenCL的优化实践以及在实际工程项目中的使用技巧。

展开
精彩书评

  ★本书的作者是长期战斗在异构编程第一线的架构师和开发者,具有非常丰富的OpenCL使用和编程经验。本书正是他们多年OpenCL编程经验的总结,不仅详细描述了OpenCL的各种概念和特性,而且通过由浅到深的一系列实际应用案例,帮助读者掌握这个令人激动的新编程模型。

  ——张云泉 中国科学院计算技术研究所计算机体系结构国家重点实验室研究员


  ★本书的几位作者均来自社区,也是活跃在各大GPU厂家的资深技术人员和实际项目的开发工程师。他们从自己使用经验的角度来阐述如何构建一个合理优化的OpenCL程序。根据本书一步一步讲解的OpenCL编程知识,无论你是一个CPU编程人员,或者是一个CUDA编程人员,都可以很快地转到OpenCL编程。

  ——楚含进 AMD(中国)异构计算技术总监

展开
精彩书摘
  《OpenCL异构并行计算:原理、机制与优化实践》:
  计算出来的c值为0xACDA8642,但是实际真实结果是0x3268ACDA8642。所以在我们使用mul24()函数来加快计算速度时,需要注意输入参数有效位要小于24位,计算出来的结果有效位同时要小于32位。 
  如果最终结果超过32位,那我们该如何处理呢?我们先看d值计算结果为0x3268,mul_hi()函数返回值是返回乘积结果的乘积的高位半值,也就是返回超出有效表示位之外的结果。上述例子也给了我们一点启示,那就是对于乘法操作,我们要获得一个全部的乘积,可以使用mul_hi()函数,并结合乘法操作。高位值通过mul_hi()函数获得,有效范围内的值通过乘法直接获得。 
  4.9关系函数 
  OpenCL C提供了一些内建的关系函数,通过这些关系函数,我们可以判断两个标量或矢量间的大小关系;我们也可以判断输入的参数变量是否为无限值、是否为有限值等操作。
  ……
展开
目录

序一

序二

前言

第1章 异构并行计算的过去、现状和未来  1

1.1 单核标量处理器的困境  3

1.1.1 单核标量处理器如何提高性能  4

1.1.2 为什么单核标量处理器性能到达瓶颈  6

1.2 多核并行计算与向量化的出现  7

1.2.1 为什么会有多核  7

1.2.2 为什么会有向量化  7

1.2.3 如何利用多核和向量化的能力  8

1.2.4 多核和向量化的难点  8

1.3 异构并行计算的崛起  9

1.3.1 GPGPU的理念  9

1.3.2 CUDA的崛起  10

1.3.3 OpenCL横空出世  10

1.4 异构并行计算的未来(百花齐放)  11

1.5 本章小结  13

第2章 OpenCL的基本介绍  14

2.1 什么是OpenCL  14

2.2 OpenCL 平台模型  15

2.3 OpenCL 执行模型  15

2.3.1 上下文  16

2.3.2 命令队列  17

2.3.3 内核在OpenCL设备上执行  18

2.4 OpenCL存储器模型  19

2.4.1 存储器区域  19

2.4.2 存储器对象  21

2.4.3 共享虚拟存储器  21

2.5 OpenCL与OpenGL  22

2.6 OpenCL与CUDA  23

2.7 本章小结  23

第3章 进入OpenCL的世界(矢量加法)  25

3.1 构建示例  25

3.1.1 Windows平台  26

3.1.2 Linux平台  28

3.1.3 OS X平台  28

3.1.4 矢量加示例  29

3.2 获得OpenCL平台和设备及其属性  36

3.2.1 OpenCL平台  36

3.2.2 OpenCL设备  40

3.3 创建上下文和命令队列  51

3.3.1 创建OpenCL上下文  51

3.3.2 创建命令队列  56

3.4 创建程序对象和内核对象  58

3.5 程序对象  59

3.5.1 创建程序对象  59

3.5.2 构建程序对象  61

3.5.3 查询和管理程序对象  66

3.6 内核对象  69

3.6.1 创建内核对象  69

3.6.2 设置内核参数  70

3.6.3 查询和管理内核对象  73

3.7 执行内核  75

3.8 编写内核代码  76

3.9 OpenCL错误处理  78

3.10 本章小结  81

第4章 OpenCL C语言  82

4.1 修饰符  82

4.1.1 地址空间修饰符  82

4.1.2 函数修饰符  86

4.1.3 对象访问修饰符  88

4.2 标量数据类型  88

4.3 矢量数据类型  91

4.3.1 为什么要有矢量数据类型  92

4.3.2 矢量数据的使用  93

4.4 运算符  96

4.5 工作项布局函数  99

4.5.1 维度和工作项  100

4.5.2 工作组  101

4.6 数据拷贝操作  102

4.6.1 矢量数据拷贝  102

4.6.2 异步拷贝和预取  104

4.7 浮点函数  105

4.7.1 数学函数  106

4.7.2 公共函数  109

4.7.3 几何函数  110

4.8 整数函数  110

4.9 关系函数  112

4.10 杂项矢量函数  115

4.11 同步函数  117

4.12 原子函数  119

4.13 图像读/写函数  122

4.13.1 内建图像读函数  122

4.13.2 内建无采样器图像读 函数  126

4.13.3 内建图像写函数  129

4.13.4 内建图像查询函数  131

4.14 工作组函数  132

4.15 管道函数  134

4.15.1 内建管道读/写函数  135

4.15.2 内建工作组管道读/写函数  139

4.15.3 内建管道查询函数  140

4.16 设备队列  140

4.16.1 Blocks语法  142

4.16.2 设备队列相关函数  143

4.16.3 子内核存储器可见性  147

4.16.4 设备队列的使用示例  148

4.17 本章小结  153

第5章 OpenCL存储器对象  154

5.1 缓冲区  154

5.1.1 分配缓冲区对象  154

5.1.2 创建子缓冲区对象  157

5.2 图像对象和采样器对象  160

5.2.1 图像对象  160

5.2.2 采样器对象  166

5.2.3 图像旋转示例  171

5.3 管道  175

5.3.1 创建管道对象  175

5.3.2 管道对象查询  175

5.4 存储器对象数据传输  176

5.4.1 主机与设备间数据传输  176

5.4.2 存储器对象数据填充  181

5.4.3 存储器对象间数据传输  184

5.4.4 存储器对象映射  187

5.5 共享虚拟存储器  192

5.5.1 SVM缓冲操作  192

5.5.2 SVM类型和特性  197

5.5.3 相关示例  204

5.6 存储器一致性模型  208

5.6.1 存储器次序规则  214

5.6.2 原子操作的存储器次序规则  217

5.6.3 栅栏操作的存储器次序规则  219

5.6.4 工作组函数的存储器次序规则  220

5.6.5 主机端与设备端命令的存储器次序规则  221

5.6.6 关于存储器次序在实际OpenCL计算设备中的实现  223

5.7 本章小结  230

第6章 OpenCL同步及事件机制  231

6.1 主机端的OpenCL同步  232

6.2 OpenCL 事件机制  235

6.2.1 对OpenCL事件的标记和栅栏  244

6.2.2 内核程序中的同步  244

6.2.3 工作组内同步  245

6.3 原子操作  249

6.3.1 OpenCL 1.2中的原子操作  249

6.3.2 OpenCL 2.0中的原子操作  256

6.4 局部存储器与全局存储器间的异步拷贝  268

6.5 工作组间同步  272

6.6 本章小结  280

第7章 OpenCL与OpenGL互操作  281

7.1 从一个OpenGL上下文来创建OpenCL上下文  282

7.2 OpenCL使用OpenGL共享的缓存对象  283

7.3 OpenCL使用OpenGL纹理数据  295

7.4 OpenCL共享OpenGL渲染缓存  308

7.5 从一个OpenCL存储器对象查询OpenGL对象信息  314

7.6 访问共享对象的OpenCL与OpenGL之间的同步  315

7.7 本章小结  320

第8章 OpenCL到主流GPU处理器的映射  321

8.1 AMD家族GPU  321

8.1.1 AMD Cayman架构GPU  321

8.1.2 AMD GCN架构的GPU  326

8.2 NVIDIA CUDA兼容的GPU  333

8.2.1 NVIDIA GPU架构的执行模型  334

8.2.2 NVIDIA GPU的全局存储器  335

8.2.3 NVIDIA GPU的局部存储器  336

8.3 ARM Mali GPU架构  336

8.3.1 硬件架构  337

8.3.2 存储器层次  337

8.3.3 OpenCL映射  337

8.4 本章小结  338

第9章 OpenCL计算二维卷积  339

9.1 测试平台信息  340

9.2 AMD X86 CPU串行实现  341

9.2.1 简单实现  341

9.2.2 循环展开优化实现  342

9.2.3 AVX指令集优化  344

9.2.4 OpenMP  345

9.3 简单OpenCL实现  347

9.4 使用常量存储器优化  349

9.5 使用局部存储器优化  351

9.6 一个工作项同时计算多个输出  353

9.7 本章小结  355

第10章 OpenCL计算矩阵乘法  356

10.1 串行实现  357

10.1.1 初次实现  357

10.1.2 缓存友好的实现  357

10.1.3 使用AVX指令集实现  358

10.2 简单OpenCL实现  359

10.3 使用局部存储器优化  361

10.4 使用向量加载指令  363

10.5 一个工作项同时计算多个输出  365

10.6 优化流水线性能  368

10.7 本章小结  371

附录A OpenCL Query实例  372

附录B 其他主流异构并行计算编程环境简介  376

展开
加入书架成功!
收藏图书成功!
我知道了(3)
发表书评
读者登录

请选择您读者所在的图书馆

选择图书馆
浙江图书馆
点击获取验证码
登录
没有读者证?在线办证