首页>参考读物>电子电工>电子工程

异构处理器OpenCL编程导论
作者 : 邓仰东 朱茂华 刘春峰 编著
出版日期 : 2016-08-19
ISBN : 978-7-111-54330-5
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 248
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书系统讲解了GPU架构和OpenCL编程。全书分为三个部分:第一部分主要讲解GPU的架构与编程 ;第二部分主要讲解OpenCL的语法与常用的API;第三部分主要用实例的方式讲解OpenCL编程;第四部分则从案例出发,以项目的方式讲解HSA架构的实现

图书特色

由AMD和清华大学专家联袂推出的异构计算扛鼎之作
本书结合了作者的最新科研成果,对光线追踪和稀疏矩阵算法的应用进行全面剖析
本书立足实战和应用,案例丰富,可操作性强

图形处理器已经成为机器学习、图形显示和科学计算等领域的核心计算工具,本书系统地讲述具有跨平台兼容能力的图形处理器通用计算编程语言—OpenCL。在介绍图形处理器体系结构和编程思想的基础上,提供一组经典计算问题的编程实例,帮助读者快速提高针对图形处理器通用计算的编程能力,并且养成并行思维习惯。
本书适用于具有计算机编程基础的初学者、准备开展图形处理器计算的程序员和计算机、软件工程以及相关专业的高年级本科生与研究生。
本书特色:
本书结合硬件,系统诠释了异构计算的概念。
本书提供一组针对常见数据的并行计算模式代表性算法,读者可以使用这些模型编写复杂异构计算应用程序。
本书给出结合高性能计算和物理真实渲染的光线追踪应用程序,淋漓尽致地展现了图形处理器的运算潜力。

作者简介
邓仰东 2006年获得卡内基·梅隆大学计算机工程博士学位,现在是清华大学软件学院副教授,知名集成电路计算机辅助设计和图形处理器通用计算专家,被誉为“GPU通用计算技术的先行者”。
朱茂华 加州大学圣塔芭芭拉分校计算机科学系博士候选人,研究方向包括计算机体系结构和机器学习算法。
刘春峰 慕尼黑工业大学电机和计算机工程系博士候选人,研究方向包括生物芯片和计算机辅助设计。

图书前言

这是一本关于图形处理器计算的书,也是一本为图形处理器程序员编写的书,但不是一本关于图形程序的书。图形处理器本来是专门处理图形显示的处理器,所以GPU总是与图形程序还有图形编程语言OpenGL联系在一起,但是本书提到的“计算”和“程序”就是每个程序设计初学者所说的“计算”和“程序”,与图形完全没有任何关系。
本书使用的语言是OpenCL,是使用GPU进行通用计算的编程语言。这里所说的“通用”,其实就是“图形之外”的意思。那么,为什么要使用图形处理器做通用计算呢?第1章会深入讨论这个问题,这里我们只需要记住简单答案:①图形处理器可以同时支持大量并行任务,其峰值处理能力超过当前所有其他处理器;②如果应用程序具备足够的并行性,则图形处理器比当前所有其他处理器的计算速度都要快。
这里用到了“并行”的概念。计算机科学中的“并行处理”定义是:由若干处理单元协作完成某一计算任务,并且这些动作的完成过程一般在时间上有所重叠。并行处理其实是自然界最常见的现象。我们所生活的世界本质上就是并行的,大家只要想象高速公路上的车流就可以获得直观的感觉。如果从公路角度看,公路就是处理车流的装置。首先,公路分成多个车道,相当于提供了多个并行处理单元,这是空间的并行;其次,一条车道上也可以同时行驶多辆汽车,只是这些车辆在空间上是顺序分布的,这是时间上的并行,类似于CPU内部的流水线。公路上的汽车在统一行为协议(即交通驾驶规则)下以协作和竞争并存的方式分享资源。我们不仅拥有并行的外部世界,人脑也是并行工作的。人类思维和意识的基本单元是神经元,它们能够通过电化学反应对周围的刺激产生响应。人脑中的100亿~150亿个神经元细胞可联结为异常复杂的网络,思维活动被映射到这个网络并进行高度并行处理。
虽然并行现象无处不在,人类制造的计算机却从顺序处理机制起步。在计算机技术的早期发展阶段,硬件成本昂贵,没有足够资源去采用并行结构。随着集成电路技术的发展,硬件资源越来越多,从20世纪八九十年代开始发展起来的流水线、超标量计算机和超长指令字等技术为CPU引入了并行执行硬件,但是在编程上仍然沿用顺序语言,由硬件或编译器寻找指令间的并行性。这种隐含并行模型其实是绝好的硬件“封装”方法,程序无需任何修改就可以在更新一代的处理器上获得更好的性能。2000年以后,随着指令间并行性的逐渐饱和,计算机体系结构发生了重大转变,普遍的做法是在处理器芯片上部署多个指令执行内核,从而利用仍在不断增长的集成电路资源。换言之,未来不会有更快的处理器内核,但是能够使用的内核数量会越来越多。这一趋势的意义极为深远:首先,我们并不了解兼顾性能、功耗和可编程性的最佳并行处理器体系结构,因此未来的并行处理器必然会出现一个群雄并起的阶段;其次,目前的处理器能够提供任务级、数据级、线程级等多种并行方式,然而,自动并行化技术远未成熟,只能由程序员指定具体的并行方式,以最大限度地发挥并行处理器的能力,所以众多崭新的并行编程语言必然应运而生;最后,主流计算平台要求从算法设计到代码执行的全面并行化,这还是人类文明史上的第一次,我们将不可逆转地走向并行计算之路。
在当前众多的新兴并行处理器和编程模型中,GPU通用计算具有独到的特色和优势。经历30年的发展,GPU已经拥有成熟的体系结构、完备的工具链和庞大的用户规模。GPU的最初设计目的是高速图形显示,该任务具有先天的高度并行性,因此GPU体系结构始终是为支持海量并行处理而设计的,而人类对视觉效果的无尽追求使得GPU发展成为高度优化的硬件平台。随着众多研究人员意识到GPU在通用计算方面的潜力,NVIDIA首先推出了图形处理器通用编程技术,从而在高性能计算领域占据了一定的市场份额。随着众多GPU制造商的纷纷跟进,大家开始意识到兼容性问题。GPU市场仍然处于“战国”时代,桌面GPU市场由Intel、NVIDIA和AMD三家公司分享,后两者主导高端GPU。而移动GPU的竞争者更多,Imagination、ARM、NVIDIA、Qualcomm、Samsung等公司也都有自己的产品。为了借鉴OpenGL的成功经验,使得基于不同硬件体系结构的GPU能够在源代码级实现兼容,各大GPU及其下游产品制造商合作制定了OpenCL图形处理器通用计算语言标准,并由Khronos集团发布和维护。作为OpenGL的姊妹语言,OpenCL也是跨平台兼容的标准化语言。实际上,任何处理器只要提供相应编译器、驱动和动态运行时(runtime)环境,就可以执行OpenCL程序,著名的可编程芯片制造商Altera甚至可以将OpenCL编译到硬件上执行。当然,OpenCL的语法和语义是针对图形处理器硬件设计的,只有具有相应结构的硬件才能高效执行OpenCL代码。
OpenCL和CUDA也经常被称为异构编程语言,这是因为相应代码总是使用CPU和GPU这两种在硬件体系结构和代码执行方式上有很大区别的计算资源。一方面,目前的GPU还不能运行操作系统,所以GPU通用计算程序总是在CPU上启动;另一方面,在GPU通用计算程序中也允许使用C/C++语言编写在CPU上执行的代码。从目前的技术看,CPU和GPU分别适应不同的计算结构,双方在应用角度上的互补关系远大于竞争关系,这种定位在可预见的未来并不会发生改变,因此异构计算代表了未来的方向。大部分异构平台一般采用CPU处理器芯片+GPU处理器芯片的形式,而对于在软件层面整合两种计算资源,唯有AMD公司迈出了关键一步,通过定义异构系统体系结构(Heterogeneous System Architecture,HSA)实现了CPU和GPU的紧密耦合,使两种处理器集成在同一芯片上并共享片外存储器。
介绍到这里,本书的舞台就已经搭建好了。本书共有14章,第1~3章从图形处理器的历史开始,依次讨论GPU硬件体系结构和HSA,以及具有代表性的HSA处理器。
第4~7章介绍OpenCL编程,包括基本语法、并行组织方式、事件和任务队列,以及OpenCL 2.0引入的高级特征。第8~13章用一组实例由浅入深地讲述并行程序设计和编程技巧。第14章介绍了一个比较复杂的应用实例——光线追踪图形渲染,总结了OpenCL程序设计技术。
设计简洁、高效的代码从而最大限度地发挥并行硬件的能力,是每一位严肃对待工作的程序员发自心底的愿望。谨以此书献给严肃的程序员们。

上架指导

计算机\高性能计算

封底文字

图形处理器已经成为机器学习、图形显示和科学计算等领域的核心计算工具,本书系统地讲述具有跨平台兼容能力的图形处理器通用计算编程语言——OpenCL。在介绍图形处理器体系结构和编程思想的基础上,提供一组经典计算问题的编程实例,帮助读者快速掌握针对图形处理器通用计算的编程能力,并且养成并行思维模式。
本书适用于具有计算机编程基础的初学者、准备开展图形处理器计算的程序员和计算机、软件工程以及相关专业的高年级本科生和研究生。
本书特色:
- 本书结合硬件对于异构计算概念进行系统诠释的书籍。
- 本书提供一组针对常见数据并行计算模式代表性算法,读者可以使用组合这些模型编写复杂异构计算应用程序。
- 本书给出结合高性能计算和物理真实渲染的光线追踪应用程序,淋漓尽致地体现图形处理器的运算潜力。

作者简介

邓仰东 朱茂华 刘春峰 编著:暂无简介

推荐序

拥抱OpenCL,拥抱异构计算
自20世纪70年代初以4004为最初代表的CPU诞生,至今已有40多年的时间。期间,处理器的体系结构经历了多次演进,但总的来说,处理器性能的提升主要还是获益于众所周知的摩尔定律。然而,由于不可逾越的物理限制(硅的晶格尺寸在20℃时大约为0.5nm,意味着对于现在主流工艺中比较先进的14nm工艺,一个晶体管的沟道长度内仅可容纳数十个硅原子),摩尔定律即将失效。再加上内存墙(memory wall)和功耗等各种限制,人们逐渐将未来的处理器性能提升寄希望于体系结构的革新。
对于传统的处理器体系结构,除缓存之外,通常是通过流水、多发射、多核、多线程等并行技术来提升处理器的性能,但目前这些技术的发展也都遇到了难以逾越的障碍。人们意识到,是时候对传统的并行处理技术进行重大变革了。
20世纪末,异构计算技术获得了半导体公司的注意,以GPU(Graphics Processing Unit)为代表的各种硬件加速器纷纷出现。很快,GPU不再局限于3D图形处理,而是在各种科学计算领域获得了广泛应用。今天,随着互联网大数据,特别是各种图像、视频、语音等非结构化数据的快速增长,以CPU+GPU为典型代表的异构计算平台已在更多的生态和应用中提供着数十倍于CPU的性能。
并行/异构计算在本质上是关于通信和协作的,这就要求整个计算平台的各个异构模块之间不仅在物理上,而且在逻辑上也紧密地耦合在一起,从而最大限度地提高编程效率和处理性能。各半导体厂商也因此推出了不同的软件解决方案。这些解决方案各具特色,并且在很多应用中获得了成功,然而,在标准和实现的开放性、跨平台的普适性等方面还未能完全满足用户的期望。
2008年,苹果公司提出了OpenCL规范,并在与AMD、Intel等公司的合作下逐步完善。随后,这一规范被提交给Khronos Group,并由其管理和维护。由于其良好的通用性和开放性,OpenCL目前获得了各大公司的广泛支持,既包括ARM、Altera、Qualcomm这样的芯片公司,也包括IBM、华为这样的系统公司,还包括Adobe等重要的软件公司。同时,越来越多的国内外高校也开始基于OpenCL开展教学和科研工作。
本书不仅详细介绍了最新版的OpenCL 2.0的编程规范,还提供了丰富的代码实例与练习。此外,邓仰东教授和几位博士结合自己在清华大学的教学与科研经验,开发了与本书配套的课程教案与学生实验指导教辅(可从www.hzbook.com上下载)。因此,本书既利于开发者快速开展OpenCL实战,也可作为高校高年级本科生或研究生相关课程的教材或参考书。笔者在工作中与本书的几位作者有不少接触。几位专家不仅具有深厚的技术背景与丰富的教学经验,而且还是热心的技术布道者。作者在百忙之中将自己的经验所得进行总结,与大家分享讨论,希望能对国内OpenCL异构计算的发展有所帮助,令人不胜钦佩。
希望通过本书的出版,能够帮助更多的同道中人,大家一起来探索异构计算的世界,让更多的行业和用户获益于OpenCL的出色特性!

AMD(中国) 时昕博士

图书目录

推荐序
前 言
第1章 GPU计算的发展历程 1
1.1 计算机图形学的发展 2
1.2 图形流水线 6
1.3 GPU的发展过程 8
1.4 GPU通用计算的发展历程 15
参考文献 18
第2章 现代图形处理器的体系结构 20
2.1 计算机体系结构基础 21
2.2 GPU的设计思想 23
2.3 NVIDIA图形处理器 25
2.3.1 总体体系结构 26
2.3.2 流多处理器 29
2.3.3 流多处理器的扩展 31
2.3.4 存储器 34
2.4 AMD Graphics Core Next图形处理器体系结构 37
2.4.1 GCN计算单元 38
2.4.2 GCN缓存 40
2.4.3 GCN GPU 41
2.5 Imagination PowerVR移动图形处理器体系结构 42
参考文献 44
第3章 异构系统体系结构和融合处理器 45
3.1 HSA基本概念 47
3.2 异构系统体系结构存储器模型 50
3.2.1 虚拟存储器的地址空间 51
3.2.2 缓存一致性 52
3.2.3 内存一致性 53
3.3 异构任务队列式调度机制 54
3.4 任务抢占和内容切换 57
3.5 HSA中间语言 57
3.6 AMD的HSA硬件 60
习题 62
参考文献 63
第4章 OpenCL基本概念 64
4.1 OpenCL程序的工作流程 64
4.2 OpenCL平台与设备 65
4.3 上下文、命令队列、kernel函数 70
4.4 存储对象 72
4.5 Hello World例程 73
习题 82
参考文献 82
第5章 OpenCL并行编程基础 83
5.1 并行线程组织 83
5.2 OpenCL存储器模型 86
5.3 数据类型 88
5.4 运算符 92
5.5 函数 93
5.6 矢量相加例程 96
5.7 矩阵相乘的OpenCL例程 98
5.7.1 矩阵相乘OpenCL代码 98
5.7.2 矩阵相乘分块计算的OpenCL代码 100
5.7.3 提高计算密度的分块矩阵相乘 102
5.7.4 使用矢量计算的分块矩阵相乘 105
习题 107
参考文献 107
第6章 OpenCL事件和队列 108
6.1 命令、命令队列和事件 109
6.2 事件的定义和基本用法 112
6.3 事件对象与用户事件 115
6.4 双设备队列管理例程 115
6.5 使用事件进行性能剖析例程 116
习题 118
参考文献 118
第7章 OpenCL 2.0高级特征 119
7.1 共享虚拟存储器 119
7.1.1 粗粒度缓冲区共享虚拟存储器 120
7.1.2 细粒度缓冲区共享虚拟存储器 122
7.1.3 细粒度系统级共享虚拟存储器 126
7.2 管道 127
7.3 嵌套并行 129
7.4 工作组函数 130
7.5 通用地址空间 131
习题 132
参考文献 133
第8章 并行程序设计方法 134
8.1 并行程序设计的复杂性 134
8.2 程序性能剖析 135
8.2.1 程序执行时间 135
8.2.2 程序性能剖析的概念 136
8.2.3 使用gprof剖析程序性能 137
8.2.4 解读性能剖析结果 139
8.3 寻找并行性 140
8.3.1 可行性分析 140
8.3.2 数据依赖性 141
8.4 并行化实例 142
8.4.1 顺序逻辑仿真算法 144
8.4.2 同步并行逻辑仿真 145
8.4.3 保守型并行逻辑仿真 145
8.5 并行化设计方法学 146
8.6 降低并行程序的开发难度 148
习题 149
参考文献和深入阅读 150
第9章 N体问题 152
9.1 串行算法 153
9.2 GPU端OpenCL程序 155
9.3 CPU端OpenCL程序 157
9.4 双GPU的OpenCL程序 160
习题 164
参考文献 164
第10章 归约问题 165
10.1 直观并行归约算法 166
10.2 减少闲置线程 168
10.3 改进局部内存访问 169
10.4 避免内存访问冲突 171
10.5 减少同步操作 172
10.6 优化顺序和并行工作比例 174
习题 177
参考文献 177
第11章 快速傅里叶变换 178
11.1 傅里叶变换原理 179
11.2 快速傅里叶变换算法 180
11.3 简化基-2 FFT算法内核 183
11.4 通用基-2 FFT算法内核 184
11.4.1 Twiddle因子 184
11.4.2 数据访问模式 185
11.4.3 64点FFT 187
习题 190
参考文献 190
第12章 稀疏矩阵——向量积 191
12.1 稀疏矩阵数据格式 192
12.2 对角稀疏矩阵 195
12.3 COO格式稀疏矩阵 201
12.4 CSR格式稀疏矩阵 203
12.5 ELL格式稀疏矩阵 206
习题 207
参考文献 207
第13章 直方图 208
13.1 直方图的计算 209
13.2 简单的并行直方图计算 210
13.3 数据值范围较小情形下的直方图算法 212
13.4 数据值范围较大情形下的加权直方图算法 214
习题 216
参考文献 216
第14章 光线追踪算法的OpenCL
实现 217
14.1 光线追踪算法综述 219
14.2 光线追踪流水线解析 224
14.3 OpenCL光线追踪程序 228
14.3.1 代码框架 228
14.3.2 主机端代码及详解 229
14.3.3 设备端代码及详解 232
参考文献 237

教学资源推荐
作者: 吴建华 李华 等编著
作者: [美] 查尔斯·K.亚历山大(Charles K. Alexander) [美] 马修·N. O. 萨迪库(Matthew N. O. Sadiku)著
作者: 田慕琴 陈惠英 主编 杨铁梅 任鸿秋 副主编
作者: [美]穆哈辛·本奥斯曼 (Mouhacine Benosman) 著
参考读物推荐
作者: 王曰海 汤振宇 吴新天 编著
作者: [英]唐纳德 S.雷伊(Donald S.Reay)著
作者: 甄建勇 编著