基本信息

编辑推荐
由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
前言
本书使用的语言是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,拥抱异构计算
自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(中国)时昕博士