2024年3月15日发(作者:田浩岚)
计算机
体系结构作业
作业题目: GPGPU综述
姓 名:
学 号:
班 级: 研 1628
2016 年 秋季 学期
目录
1、引言................................................................................................................................................................................ 2
2、GPU的发展历史 ........................................................................................................................................................... 3
3. 最新研究 ......................................................................................................................................................................... 5
3.1 Tesla P100 ............................................................................................................................................................... 5
3.2 Radeon RX 480 ....................................................................................................................................................... 6
4. GP-GPU的应用 ................................................................................................................................................................ 7
5. GP-GPU语言 .................................................................................................................................................................... 8
5.1 CUDA ...................................................................................................................................................................... 9
5.2 OpenCL ................................................................................................................................................................. 10
6. 特点............................................................................................................................................................................... 11
7. 展望............................................................................................................................................................................... 11
参考文献 ............................................................................................................................................................................ 12
1、引言
多核CPU和多核GPU已经出现并逐渐主导最先进的高性能计算。 虽然当代CPU和
GPU是使用相同的半导体技术制造的,但是GPU的计算性能比CPU的计算性能更快地增
加。 不同的设计选择驱动他们进入不同功能的设备,给定相同的晶体管数量的顺序。 CPU
针对高性能,任务并行工作负载进行了优化,因为更多的晶体管专用于控制逻辑,例如每
个处理元件中的分支预测和无序执行。 GPU针对高性能数据并行工作负载进行了优化,
因为更多的晶体管专用于算术逻辑,例如浮点计算和每个处理元件中的超越函数。
GPU(Graphics Processing Unit)早期的主要任务是用来进行3D图形计算和处理。
近年来,受游戏市场和视景仿真需求的牵引,并随着人们对计算性能要求的不断提高,GPU
得到了飞速的发展,主流GPU 的单精度浮点处理能力和外部存储器带宽都远远超过同期
的GPU,而且GPU已经从以往的固定流水线操作模式发展成可编程流水线模式;另一方
面,受工艺、材料和功耗的物理限制, 相应的现代 GPU 也采用了多核的架构用来提高
GPU 的并行处理能力。
在2003~2004年左右, 图形学之外的领域专家开始注意到GPU与众不同的计算能
力,开始尝试把GPU 用于通用计算(GPGPU)。
由此,开启了新的计算时代,即图形处理单元(GPGPU)上的通用计算。
GPGPU代表General Purpose Computing on Graphics Processing Unit,就是"
图形处理器通用计算技术"。这种新兴的加速技术试图把个人计算机上的显卡当做CPU这
样的通用处理器来用,使显卡的强劲动力不仅发挥在图形处理上。
2、GPU的发展历史
从 SIGGRAPH 2003大会首先提出GPU通用计算概念,到 NVIDIA公司2007年推
出CUDA平台, GPU通用计算依靠其强大的计算能力和很高的存储带宽在很多领域取得
了成功。越来越多的信号告诉我们,GPU通用计算是一片正在被打开的潜力巨大的市场。
从1991年到2001年,这期间,微软公司的Windows操作系统在全球流行,极大地
刺激了图形硬件的发展。S3 Graphics公司推出了公认的全球第一款图形加速器,可以被
认为是显卡设备的雏形。早期的GPU只能进行二维的位图(bitmap)操作,但在20世
纪90年代末,已经出现了硬件加速的三维的坐标转换和光源计算(transformation and
lighting,T&L)技术。
从2001年到2006年,这是酝酿现代GPU产品极为重要的一段时间,各种硬件加速
技术的出现使显卡的性能突飞猛进。其中标志性的事件是可编程图形处理器的出现。
GeForce 3是第一款支持可编程图形流水线(programmable graphics pipeline)的GPU
产品。从此,可编程的着色功能被加入了硬件。图形作业的可编程功能使得着色器可以按
照用特定编程语言表达的算法来给多边形上色,并按照用户制定的策略来转换顶点坐标。
GPU拥有了更大的可扩展性和适应性,不再是一个功能单一的设备,它开始使得复杂的三
维图形效果成为可能。这个时期出现的各种令消费者疯狂的电脑游戏和动画产品,从市场
的角度为显卡功能的开发更进一步注入了动力。
GPGPU技术也是在这个时期开始发展起来的。GPU高度并行化的架构和可编程的着
色器使人们渐渐开始用它计算通用任务。在将GPU用到科学计算时,这些可编程的着色器
和着色语言(shading languages)就成了技术的核心。把算法用着色语言实现,再加载
到着色器里,同时把原本的图形对象替换为科学计算的数据,这就实现了显卡对通用数据
的处理。用着色语言实现的GPGPU技术是第一代的GPGPU技术,或称为经典GPGPU、
传统GPGPU。着色器编程语言是为复杂的图形处理任务设计的,而非通用科学计算,所
以在使用时需要通过一系列非常规的方法来达到目的。
2006年至今,这一时期的GPU从硬件设计之初就开始考虑到了GPGPU的应用,因
而它们从根本上比早前的GPU更为通用。2006年,NVIDIA公布了统一着色器模型
(Unified Shader Model)和它的GeForce 8系列GPU,GPU从此进入了通用计算时代。
统一着色器模型整合了顶点着色器(vertex shaders)和片段着色器(fragment shaders),
或称为像素着色器(pixel shaders),每一个着色器都可以自由承担原本某种特定着色器
的工作。这样,GPU在图形处理时空闲的着色器更少,计算效率更高。同时,这样无差别
的着色器的设计,令GPU成了一个多核的通用处理器。
2010年, NVIDIA公司推出基于Fermi架构的Tesla20系列GPU, Fermi架构是
GPU架构发展史上一次革命性的跨越,其在保持图形性能的前提下,大大提高了GPU通
用计算的能力.Fermi不仅使得SM功能增强还提高了其可编程性和执行效率.为了符合
通用计算对于精度和速度的要求,Fermi的流处理器都支持IEEE754-2008的单精度浮点
标准和完整的32位整数计算,同时Fermi架构使用了新的乘加指令FMA(fused
multiply-add).FMA指令和MAD(multiply-add)指令相比,在做乘运算和加运算的
时候只在最后运算的时候作一次舍入,避免了在执行加法时出现精度损失.双精度浮点计
算在高性能计算中具有核心地位.Fermi架构下每个SM在一个时钟周期内可以完成16
个双精度浮点数的FMA操作.
我们看到了这样的趋势:单纯的CPU计算渐渐被基于异构计算资源的并行计算所取代;
单机计算逐渐被分布式的多用户、多处理器组成的集群计算和云计算所取代;GPGPU技
术渐渐成为异构计算的主导技术。
3. 最新研究
3.1 Tesla P100
2015年,英伟达发布了旗下新一代GPU架构Pascal,依靠新的3D memory和
NV-Link互连技术,采用Pascal架构的新GPU将在速度和体积上获得飞跃突破。Pascal
将被运用在机器学习、超级计算机、云计算和游戏等领域中。
英伟达CEO黄仁勋在2016年GTC大会的发言中,介绍了该公司搭载在Tesla P100 高
性能运算加速器上的Pascal GP100 图形处理单元。整个Telsa P100系统由包括GPU在
内的许多芯片组成,这些芯片总计有超过150亿的晶体管,其特色为适用于总计速率为
720GB/s带宽的16GB的堆栈式HBM2 VRAM显存。
此外,Tesla P100还拥有史无前例的性能表现和可拓展性,以及在编程效率方面的五
大架构突破:
•
英伟达帕斯卡架构实现指数级的性能飞跃——和前代的基于NVIDIAMaxwell™的
解决方案相比,基于帕斯卡的Tesla P100显卡解决方案在神经网络训练性能上实现了超过
12倍的提升。
•
拥有最大应用拓展性的NVIDIA NVLink——NVIDIA NVLink™高速GPU互连可在
多个GPU上测量应用程序,可实现5倍于目前顶级解决方案的带宽加速。NVLink可同时
连接多达八个Tesla P100 GPU显卡以实现单一节点上的应用程序性能最优化,而且IBM
已在它的POWER8 CPU上实行NVLink,用于CPU对CPU快速交流。
•
具备史无前例的能效的16nm FinFET工艺——搭载使用16纳米FinFET制备工艺
构建的153亿个晶体管,帕斯卡GPU是目前世界上最大的FinFET芯片。它的设计目的是
为运算需要接近无限的负载实现最快性能和最佳能效。
•
可应对大数据负载的HBM2芯片-晶圆-基底 (CoWoS) 设计——帕斯卡架构将处
理器和数据统一为一个单独包,以实现史无前例的运算效率。作为存储设计的创新之举,
相比于麦斯威尔架构,HBM2芯片-晶圆-基底 (CoWoS) 设计在存储带宽性能上实现了3
倍提升。
•
性能顶级的新型人工智能算法——新型的半精度指令在深度学习上实现了超过21
次浮点运算的顶级性能。
英伟达表示Tesla P100显卡已进入量产,生产的所有Tesla P100显卡都用于它的
DGX-1高密度HPC节点系统和来自IBM、戴尔和克雷的HPC服务器中。DGX-1节点已
以12.9万美元的价格发售,来自其他制造商的服务器则有望在2017年的第一个季度开始
发售。
3.2 Radeon RX 480
继Tesla P100发布后,AMD公司的Radeon RX 480也于今年6月进入公众视野。
Radeon RX 480的大部分增强源于使用AMD新的“Polaris”GPU内核。 自2011年以
来,该行业一直停留在使用28nm GPU核心,自那时以来,所有的显卡都基本上迭代了相
同的底层技术,AMD和Nvidia跳过了20nm代。 Polaris拥有14nm晶体管以及先进的
“FinFET”技术,使这些缩小的晶体管更加节能。
使用14nm工艺,AMD也将更多的技术带入其GPU。 Radeon RX 480包含2,304
个流处理器,它们是AMD相当于Nvidia的CUDA核心 - 尽管不可能在纯粹的核心计数
中比较两种截然不同的架构。机载计算单元的数量从R9 380中的28个CU扩展到RX 480
中的36个CU。
4. GP-GPU的应用
GPGPU 项目研究中的先行者是英国剑桥大学的 BionicFx 课题组。早在2004年9
月,剑桥大学的 BionicFx 课题组便宣布在 NVIDIA 的 GeForce FX 5900 产品中实现了
专业的实时音频处理功能,并且准备进行商业化的运作,对其产品进行销售,给音乐创作
者带来实惠。在随后的一段时间,GPGPU 进入了深入研究阶段,但是由于编程语言架构
和编程环境都难以通用,该领域的发展能力受到广泛质疑。就在人们认为 GPGPU 的研究
即将偃旗息鼓的时候, ATI 在2006年8月惊人地宣布即将联手斯坦福大学在其
Folding@Home 项目中提供对ATI Radeon X1900的支持。在显卡加入
Folding@Home 项目后,科研进展速度被成倍提升,人们第一次感受到了 GPU 的运算
威力。
毫无疑问,在 GPGPU 研究上, ATI 跨出了极具意义的一步。同时将 GPGPU 的应
用领域和普及程度推向高潮。随后 NVIDIA 凭借 GeForce 8800GTX 这款业界首个
DirectX 10 GPU,在 GPU 通用计算方面实现了大步跨越,特别是 CUDA 概念的提出,
在新的通用计算领域后来居上。
不仅应用程序在使用GPGPU技术,最新的操作系统也将它作为架构的一部分。微软
使用DirectCompute实现了它更具视觉体验的全新操作系统Windows 7;苹果最新的操
作系统Mac OS X 10.6(Snow Leopard)完全支持OpenCL;Linux发行版Ubuntu 10.10
也支持基于OpenCL的应用程序硬件加速。这个新兴的技术从研究所走到商业,仅仅用了
两年。GPGPU发展速度飞快,许多刚刚取得的成绩都迅速地成为了历史。
GPGPU技术的发展与应用是相互促进的,目前GPGPU应用的研究热点领域有:数值
天气预报、地震模拟、计算生物学、商业风险计算、医学成像模拟、识别信号处理、物理
仿真、地质勘探等。
Extremadura大学进行的基于GPU的高光谱遥感影像分解实验结果表明,基于GPU
的影像处理速度比以前提高了25倍。Manifold系统第8版是全球最强大、功能最全面的
地理信息系统软件包。Manifold于2007年5月开始使用CUDA。GPU并行处理使从前
需要20分钟才能完成的运算现在只需30s即可完成,而从前需要30到40s完成的运算现
在能够实现实时运算,遥感影像的任务处理和分析工作的运算速度比从前快了数百倍。
GPGPU将应用范围扩展到了图形之外,无论是科研教育、财务计算,还是在工业领
域,GPGPU都得到了广泛的使用,关于它的科研成果和新应用模式也层出不穷。许许多
多令人鼓舞的结果已经表明:将GPU用于解决数据并行计算问题可以明显提高系统的运行
速度。
5. GP-GPU语言
自从2006年以后,越来越多的研究人员把目光投向用GPU进行通用计算的GPGPU
领域,在他们的努力下,很多原本由CPU执行的算法都有了GPU版本,它们的运行速度
皆大幅提高。随着GPGPU开发人员的增加,这种最初是"非主流"的技术变得越来越成熟,
并影响了图形处理器的发展方向。终于,专门用于实现GPGPU技术的编程语言应运而生,
它们被称为GPGPU语言。最主要的语言有CUDA(Compute Unified Device
Architecture)、OpenCL(Open Computing Language)、DirectCompute(DirectX
的GPGPU解决方案)、Stream SDK和BrookGPU(即之前的Brook+)。前三个是目前
市场占有率最高的。这些语言的设计目的就是封装GPU尽可能多的与CPU不同的特殊性
质,提供对GPU进行通用计算编程的接口。
5.1 CUDA
从市场的角度说,CUDA是当今最流行的GPGPU语言,它大约与NVIDIA GeForce
8000系列显卡同时推出。GeForce 8000系列遵循的G80架构是NVIDIA公司用来占领
通用计算显卡市场的主力。与以往GPU编程语言不同的是,CUDA不再面向图形计算,
而是一种专业的GPGPU语言。它提供编译器和一些开发工具,让开发人员可以用一种类
似C的编程语言来开发GPGPU程序,并同时运行于CPU和GPU上。
说得更确切一些,CUDA实际上是NVIDIA公司设计的一个计算架构,针对异构计算
资源下的大规模并行计算。而官方为这个架构提供的编程语言称为C for CUDA(被
NVIDIA扩展的C语言),简称为CUDA C。在不会出现歧义的地方,一般也会直接用CUDA
来指代编程语言CUDA C。
NVIDIA GeForce 8000 系列(G80架构)以后的GPU产品,包括GeForce、Quadro
和Tesla产品,都支持CUDA 。CUDA C提供给开发人员一个完整的接口,可以访问NVIDIA
GPU的本地命令集、存储器等并行计算元素,使它们变成像CPU一样的开放式架构。与
CPU不同的是,现代GPU是多核架构,能同时运行成千上万个线程。若待开发的应用程
序符合这样的大规模并行结构,运行效率就会大幅提升。
CUDA模型的大致计算流程可以归结为4步
1)把需要处理的数据从内存复制到显存中。
2)CPU把程序指令发送给GPU。
3)GPU的多处理器对显存中的数据执行相关指令,计算的过程中GPU可能需要频繁
和显存交换数据。最后的计算结果存放在显存中。
4)从显存中把计算结果复制到内存里。
5.2 OpenCL
OpenCL(OpenComputingLanguage,开放计算语言)是一个为异构平台编写程序的
框架,此异构平台可由CPU、GPU或其他类型的处理器组成。OpenCL由用于编写kernels
(在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并控制平台的API
组成。OpenCL提供了基于任务分区和数据分区的并行计算机制。
OpenCL最初由Apple公司开发,Apple拥有其商标权,并在与AMD,IBM,Intel
和NVIDIA技术团队的合作之下初步完善。OpenCL也是基于C的一个程式语言,分为
Platform Layer、Runtime、Compiler三个部分:Platform Layer用来管理计算装置,
提供启始化装置的界面,并用来建立compute contexts和work-queues。Runtime用
来管理资源,并执行程序的kernel。Compiler则是ISOC99的子集合,并加上了OpenCL
特殊的语法。在OpenCL的执行模型中,有所谓的Compute Kernel和Compute Program。
Compute Kernel基本上类似于CUDA定义的kernel,是最基本的的计算单元;而
Compute Program则是Compute Kernel和内建函数的集合,类似一个动态函数库。很
大程度上OpenCL与CUDA Driver API比较相像。
6. 特点
•GPGPU的任务组织包含多个级别。 在每个级别中,一组任务实例共享公共代码(脚
本列表),但是在相应的基于索引的存储器地址上操作。 其本质是分层单指令多数据。
•GPU的硬件结构包含多个级别。 在每个级别中,调度元素操纵任务池,处理元件进
行计算,并且存储器组件提供数据访问。 它的本质是分层的Von Neumann(指令驱动和
分离的数据控制ALU)。
•GPGPU的调度机制包含多个级别。在每个级别中,并行任务实例被无序地调度,而
每个任务实例内的有序执行被保持。它的本质是分层多线程。
•GPGPU的执行机制可以被认为是并行执行和流水线执行的组合。对于任何粒度的任
务实例,它是原子的,它的执行经过几个流水线阶段一个接一个。然而,当我们打破任务
的原子性时,它的执行是通过其子任务的并行执行来实现的。这两种执行模式无缝融合,
追求硬件功能的极限。其本质是吞吐量计算。
•GPGPU的内存访问包含多个级别。在每个级别中,阶段输入/输出过程作为操作数馈
送/结果收集的充分和必要的条件。其本质是层次移动数据到计算,其来自数据分布和访问
分布之间的不一致性。
7. 展望
未来,综合了多核CPU和GPU技术的集群一定是超级计算机的主流。如何设计编程
模型与应用来发挥这种多级粒度并行的最大潜能,将会是应用领域专家最大的期盼。
展望GPU的发展, 我们期望下一代支持的编程模型超过2个级别,其中所有级别共
享公共代码表示和处理硬件。例如,每个脚本列表用级别索引标记,并且兼容硬件可以允
许多个级别的任务实例同时驻留在其上,即使一些是其他的子任务。CUDA的递归内核调
用朝着这个方向迈出了显着的一步。
我们可以期望未来的GPU从指令驱动到数据驱动,甚至打破计算和存储之间的边界:
更具体地,将ALU和存储器单元混合在一起的架构,其中访问过程也是计算过程, 反之
亦然。 这样的电路可能具有与神经形态芯片类似的架构,并以有效的方式同时处理多个数
据流。
我们可以期望未来几代的GPU支持跨级调度,其中所有级别共享一个共同的调度硬件。
更具体地,每个任务实例用任务索引和级别索引标记,并且分派组件可以允许以混合方式
分派不同级别的任务实例。
我们可以期望未来世代的GPU通过反向移动数据到计算(即,移动计算到数据)来减
少或甚至消除Stage-In / Out开销。例如,架构将ALU和互连网络混合在一起,其中传
输过程也是计算过程,反之亦然。这样的电路可能借用多核和Hadoop的成功并揭示了多
指令多数据行为。
GPU 发展到今天,已经突破了无数技术屏障,最初因图形处理而诞生的硬件发展成为
今天大规模并行计算领域的明星。我们完全可以相信 GPU 的架构还会不断优化,并被越
来越多的大型计算所采用。
参考文献
1.Liang Hu, Xilong Che, and Si-Qing Zheng. 2016. A closer look at GPGPU.
ACM Comput. Surv. 48, 4, Article 60 (March 2016), 20 pages.
2. 《GPGPU编程技术:从GLSL、CUDA到OpenCL 》 仇德元
3. 刘金硕,刘天晓,吴慧. 从图形处理器到基于GPU的通用计算. 《武汉大学学报(理
学版)》, 2013, 59(2):198-206
4. Inside Pascal: NVIDIA’s Newest Computing Platform.
/parallelforall/inside-pascal/
5.AMD Radeon RX 480 review: Redefining what's possible with a $200
graphics card.
/article/3089316/components-graphics/amd-radeon-
r
6. Jayshree Ghorpade1, Jitendra Parande2. Gpgpu Processing In CUDA
Architecture. Advanced Computing: An International Journal ( ACIJ ), Vol.3, No.1,
January 2012
7. John D. Owens, Mike Houston, David Luebke. GPU Computing. Proceedings
of the IEEE, 2008, 96(5):879-899
2024年3月15日发(作者:田浩岚)
计算机
体系结构作业
作业题目: GPGPU综述
姓 名:
学 号:
班 级: 研 1628
2016 年 秋季 学期
目录
1、引言................................................................................................................................................................................ 2
2、GPU的发展历史 ........................................................................................................................................................... 3
3. 最新研究 ......................................................................................................................................................................... 5
3.1 Tesla P100 ............................................................................................................................................................... 5
3.2 Radeon RX 480 ....................................................................................................................................................... 6
4. GP-GPU的应用 ................................................................................................................................................................ 7
5. GP-GPU语言 .................................................................................................................................................................... 8
5.1 CUDA ...................................................................................................................................................................... 9
5.2 OpenCL ................................................................................................................................................................. 10
6. 特点............................................................................................................................................................................... 11
7. 展望............................................................................................................................................................................... 11
参考文献 ............................................................................................................................................................................ 12
1、引言
多核CPU和多核GPU已经出现并逐渐主导最先进的高性能计算。 虽然当代CPU和
GPU是使用相同的半导体技术制造的,但是GPU的计算性能比CPU的计算性能更快地增
加。 不同的设计选择驱动他们进入不同功能的设备,给定相同的晶体管数量的顺序。 CPU
针对高性能,任务并行工作负载进行了优化,因为更多的晶体管专用于控制逻辑,例如每
个处理元件中的分支预测和无序执行。 GPU针对高性能数据并行工作负载进行了优化,
因为更多的晶体管专用于算术逻辑,例如浮点计算和每个处理元件中的超越函数。
GPU(Graphics Processing Unit)早期的主要任务是用来进行3D图形计算和处理。
近年来,受游戏市场和视景仿真需求的牵引,并随着人们对计算性能要求的不断提高,GPU
得到了飞速的发展,主流GPU 的单精度浮点处理能力和外部存储器带宽都远远超过同期
的GPU,而且GPU已经从以往的固定流水线操作模式发展成可编程流水线模式;另一方
面,受工艺、材料和功耗的物理限制, 相应的现代 GPU 也采用了多核的架构用来提高
GPU 的并行处理能力。
在2003~2004年左右, 图形学之外的领域专家开始注意到GPU与众不同的计算能
力,开始尝试把GPU 用于通用计算(GPGPU)。
由此,开启了新的计算时代,即图形处理单元(GPGPU)上的通用计算。
GPGPU代表General Purpose Computing on Graphics Processing Unit,就是"
图形处理器通用计算技术"。这种新兴的加速技术试图把个人计算机上的显卡当做CPU这
样的通用处理器来用,使显卡的强劲动力不仅发挥在图形处理上。
2、GPU的发展历史
从 SIGGRAPH 2003大会首先提出GPU通用计算概念,到 NVIDIA公司2007年推
出CUDA平台, GPU通用计算依靠其强大的计算能力和很高的存储带宽在很多领域取得
了成功。越来越多的信号告诉我们,GPU通用计算是一片正在被打开的潜力巨大的市场。
从1991年到2001年,这期间,微软公司的Windows操作系统在全球流行,极大地
刺激了图形硬件的发展。S3 Graphics公司推出了公认的全球第一款图形加速器,可以被
认为是显卡设备的雏形。早期的GPU只能进行二维的位图(bitmap)操作,但在20世
纪90年代末,已经出现了硬件加速的三维的坐标转换和光源计算(transformation and
lighting,T&L)技术。
从2001年到2006年,这是酝酿现代GPU产品极为重要的一段时间,各种硬件加速
技术的出现使显卡的性能突飞猛进。其中标志性的事件是可编程图形处理器的出现。
GeForce 3是第一款支持可编程图形流水线(programmable graphics pipeline)的GPU
产品。从此,可编程的着色功能被加入了硬件。图形作业的可编程功能使得着色器可以按
照用特定编程语言表达的算法来给多边形上色,并按照用户制定的策略来转换顶点坐标。
GPU拥有了更大的可扩展性和适应性,不再是一个功能单一的设备,它开始使得复杂的三
维图形效果成为可能。这个时期出现的各种令消费者疯狂的电脑游戏和动画产品,从市场
的角度为显卡功能的开发更进一步注入了动力。
GPGPU技术也是在这个时期开始发展起来的。GPU高度并行化的架构和可编程的着
色器使人们渐渐开始用它计算通用任务。在将GPU用到科学计算时,这些可编程的着色器
和着色语言(shading languages)就成了技术的核心。把算法用着色语言实现,再加载
到着色器里,同时把原本的图形对象替换为科学计算的数据,这就实现了显卡对通用数据
的处理。用着色语言实现的GPGPU技术是第一代的GPGPU技术,或称为经典GPGPU、
传统GPGPU。着色器编程语言是为复杂的图形处理任务设计的,而非通用科学计算,所
以在使用时需要通过一系列非常规的方法来达到目的。
2006年至今,这一时期的GPU从硬件设计之初就开始考虑到了GPGPU的应用,因
而它们从根本上比早前的GPU更为通用。2006年,NVIDIA公布了统一着色器模型
(Unified Shader Model)和它的GeForce 8系列GPU,GPU从此进入了通用计算时代。
统一着色器模型整合了顶点着色器(vertex shaders)和片段着色器(fragment shaders),
或称为像素着色器(pixel shaders),每一个着色器都可以自由承担原本某种特定着色器
的工作。这样,GPU在图形处理时空闲的着色器更少,计算效率更高。同时,这样无差别
的着色器的设计,令GPU成了一个多核的通用处理器。
2010年, NVIDIA公司推出基于Fermi架构的Tesla20系列GPU, Fermi架构是
GPU架构发展史上一次革命性的跨越,其在保持图形性能的前提下,大大提高了GPU通
用计算的能力.Fermi不仅使得SM功能增强还提高了其可编程性和执行效率.为了符合
通用计算对于精度和速度的要求,Fermi的流处理器都支持IEEE754-2008的单精度浮点
标准和完整的32位整数计算,同时Fermi架构使用了新的乘加指令FMA(fused
multiply-add).FMA指令和MAD(multiply-add)指令相比,在做乘运算和加运算的
时候只在最后运算的时候作一次舍入,避免了在执行加法时出现精度损失.双精度浮点计
算在高性能计算中具有核心地位.Fermi架构下每个SM在一个时钟周期内可以完成16
个双精度浮点数的FMA操作.
我们看到了这样的趋势:单纯的CPU计算渐渐被基于异构计算资源的并行计算所取代;
单机计算逐渐被分布式的多用户、多处理器组成的集群计算和云计算所取代;GPGPU技
术渐渐成为异构计算的主导技术。
3. 最新研究
3.1 Tesla P100
2015年,英伟达发布了旗下新一代GPU架构Pascal,依靠新的3D memory和
NV-Link互连技术,采用Pascal架构的新GPU将在速度和体积上获得飞跃突破。Pascal
将被运用在机器学习、超级计算机、云计算和游戏等领域中。
英伟达CEO黄仁勋在2016年GTC大会的发言中,介绍了该公司搭载在Tesla P100 高
性能运算加速器上的Pascal GP100 图形处理单元。整个Telsa P100系统由包括GPU在
内的许多芯片组成,这些芯片总计有超过150亿的晶体管,其特色为适用于总计速率为
720GB/s带宽的16GB的堆栈式HBM2 VRAM显存。
此外,Tesla P100还拥有史无前例的性能表现和可拓展性,以及在编程效率方面的五
大架构突破:
•
英伟达帕斯卡架构实现指数级的性能飞跃——和前代的基于NVIDIAMaxwell™的
解决方案相比,基于帕斯卡的Tesla P100显卡解决方案在神经网络训练性能上实现了超过
12倍的提升。
•
拥有最大应用拓展性的NVIDIA NVLink——NVIDIA NVLink™高速GPU互连可在
多个GPU上测量应用程序,可实现5倍于目前顶级解决方案的带宽加速。NVLink可同时
连接多达八个Tesla P100 GPU显卡以实现单一节点上的应用程序性能最优化,而且IBM
已在它的POWER8 CPU上实行NVLink,用于CPU对CPU快速交流。
•
具备史无前例的能效的16nm FinFET工艺——搭载使用16纳米FinFET制备工艺
构建的153亿个晶体管,帕斯卡GPU是目前世界上最大的FinFET芯片。它的设计目的是
为运算需要接近无限的负载实现最快性能和最佳能效。
•
可应对大数据负载的HBM2芯片-晶圆-基底 (CoWoS) 设计——帕斯卡架构将处
理器和数据统一为一个单独包,以实现史无前例的运算效率。作为存储设计的创新之举,
相比于麦斯威尔架构,HBM2芯片-晶圆-基底 (CoWoS) 设计在存储带宽性能上实现了3
倍提升。
•
性能顶级的新型人工智能算法——新型的半精度指令在深度学习上实现了超过21
次浮点运算的顶级性能。
英伟达表示Tesla P100显卡已进入量产,生产的所有Tesla P100显卡都用于它的
DGX-1高密度HPC节点系统和来自IBM、戴尔和克雷的HPC服务器中。DGX-1节点已
以12.9万美元的价格发售,来自其他制造商的服务器则有望在2017年的第一个季度开始
发售。
3.2 Radeon RX 480
继Tesla P100发布后,AMD公司的Radeon RX 480也于今年6月进入公众视野。
Radeon RX 480的大部分增强源于使用AMD新的“Polaris”GPU内核。 自2011年以
来,该行业一直停留在使用28nm GPU核心,自那时以来,所有的显卡都基本上迭代了相
同的底层技术,AMD和Nvidia跳过了20nm代。 Polaris拥有14nm晶体管以及先进的
“FinFET”技术,使这些缩小的晶体管更加节能。
使用14nm工艺,AMD也将更多的技术带入其GPU。 Radeon RX 480包含2,304
个流处理器,它们是AMD相当于Nvidia的CUDA核心 - 尽管不可能在纯粹的核心计数
中比较两种截然不同的架构。机载计算单元的数量从R9 380中的28个CU扩展到RX 480
中的36个CU。
4. GP-GPU的应用
GPGPU 项目研究中的先行者是英国剑桥大学的 BionicFx 课题组。早在2004年9
月,剑桥大学的 BionicFx 课题组便宣布在 NVIDIA 的 GeForce FX 5900 产品中实现了
专业的实时音频处理功能,并且准备进行商业化的运作,对其产品进行销售,给音乐创作
者带来实惠。在随后的一段时间,GPGPU 进入了深入研究阶段,但是由于编程语言架构
和编程环境都难以通用,该领域的发展能力受到广泛质疑。就在人们认为 GPGPU 的研究
即将偃旗息鼓的时候, ATI 在2006年8月惊人地宣布即将联手斯坦福大学在其
Folding@Home 项目中提供对ATI Radeon X1900的支持。在显卡加入
Folding@Home 项目后,科研进展速度被成倍提升,人们第一次感受到了 GPU 的运算
威力。
毫无疑问,在 GPGPU 研究上, ATI 跨出了极具意义的一步。同时将 GPGPU 的应
用领域和普及程度推向高潮。随后 NVIDIA 凭借 GeForce 8800GTX 这款业界首个
DirectX 10 GPU,在 GPU 通用计算方面实现了大步跨越,特别是 CUDA 概念的提出,
在新的通用计算领域后来居上。
不仅应用程序在使用GPGPU技术,最新的操作系统也将它作为架构的一部分。微软
使用DirectCompute实现了它更具视觉体验的全新操作系统Windows 7;苹果最新的操
作系统Mac OS X 10.6(Snow Leopard)完全支持OpenCL;Linux发行版Ubuntu 10.10
也支持基于OpenCL的应用程序硬件加速。这个新兴的技术从研究所走到商业,仅仅用了
两年。GPGPU发展速度飞快,许多刚刚取得的成绩都迅速地成为了历史。
GPGPU技术的发展与应用是相互促进的,目前GPGPU应用的研究热点领域有:数值
天气预报、地震模拟、计算生物学、商业风险计算、医学成像模拟、识别信号处理、物理
仿真、地质勘探等。
Extremadura大学进行的基于GPU的高光谱遥感影像分解实验结果表明,基于GPU
的影像处理速度比以前提高了25倍。Manifold系统第8版是全球最强大、功能最全面的
地理信息系统软件包。Manifold于2007年5月开始使用CUDA。GPU并行处理使从前
需要20分钟才能完成的运算现在只需30s即可完成,而从前需要30到40s完成的运算现
在能够实现实时运算,遥感影像的任务处理和分析工作的运算速度比从前快了数百倍。
GPGPU将应用范围扩展到了图形之外,无论是科研教育、财务计算,还是在工业领
域,GPGPU都得到了广泛的使用,关于它的科研成果和新应用模式也层出不穷。许许多
多令人鼓舞的结果已经表明:将GPU用于解决数据并行计算问题可以明显提高系统的运行
速度。
5. GP-GPU语言
自从2006年以后,越来越多的研究人员把目光投向用GPU进行通用计算的GPGPU
领域,在他们的努力下,很多原本由CPU执行的算法都有了GPU版本,它们的运行速度
皆大幅提高。随着GPGPU开发人员的增加,这种最初是"非主流"的技术变得越来越成熟,
并影响了图形处理器的发展方向。终于,专门用于实现GPGPU技术的编程语言应运而生,
它们被称为GPGPU语言。最主要的语言有CUDA(Compute Unified Device
Architecture)、OpenCL(Open Computing Language)、DirectCompute(DirectX
的GPGPU解决方案)、Stream SDK和BrookGPU(即之前的Brook+)。前三个是目前
市场占有率最高的。这些语言的设计目的就是封装GPU尽可能多的与CPU不同的特殊性
质,提供对GPU进行通用计算编程的接口。
5.1 CUDA
从市场的角度说,CUDA是当今最流行的GPGPU语言,它大约与NVIDIA GeForce
8000系列显卡同时推出。GeForce 8000系列遵循的G80架构是NVIDIA公司用来占领
通用计算显卡市场的主力。与以往GPU编程语言不同的是,CUDA不再面向图形计算,
而是一种专业的GPGPU语言。它提供编译器和一些开发工具,让开发人员可以用一种类
似C的编程语言来开发GPGPU程序,并同时运行于CPU和GPU上。
说得更确切一些,CUDA实际上是NVIDIA公司设计的一个计算架构,针对异构计算
资源下的大规模并行计算。而官方为这个架构提供的编程语言称为C for CUDA(被
NVIDIA扩展的C语言),简称为CUDA C。在不会出现歧义的地方,一般也会直接用CUDA
来指代编程语言CUDA C。
NVIDIA GeForce 8000 系列(G80架构)以后的GPU产品,包括GeForce、Quadro
和Tesla产品,都支持CUDA 。CUDA C提供给开发人员一个完整的接口,可以访问NVIDIA
GPU的本地命令集、存储器等并行计算元素,使它们变成像CPU一样的开放式架构。与
CPU不同的是,现代GPU是多核架构,能同时运行成千上万个线程。若待开发的应用程
序符合这样的大规模并行结构,运行效率就会大幅提升。
CUDA模型的大致计算流程可以归结为4步
1)把需要处理的数据从内存复制到显存中。
2)CPU把程序指令发送给GPU。
3)GPU的多处理器对显存中的数据执行相关指令,计算的过程中GPU可能需要频繁
和显存交换数据。最后的计算结果存放在显存中。
4)从显存中把计算结果复制到内存里。
5.2 OpenCL
OpenCL(OpenComputingLanguage,开放计算语言)是一个为异构平台编写程序的
框架,此异构平台可由CPU、GPU或其他类型的处理器组成。OpenCL由用于编写kernels
(在OpenCL设备上运行的函数)的语言(基于C99)和一组用于定义并控制平台的API
组成。OpenCL提供了基于任务分区和数据分区的并行计算机制。
OpenCL最初由Apple公司开发,Apple拥有其商标权,并在与AMD,IBM,Intel
和NVIDIA技术团队的合作之下初步完善。OpenCL也是基于C的一个程式语言,分为
Platform Layer、Runtime、Compiler三个部分:Platform Layer用来管理计算装置,
提供启始化装置的界面,并用来建立compute contexts和work-queues。Runtime用
来管理资源,并执行程序的kernel。Compiler则是ISOC99的子集合,并加上了OpenCL
特殊的语法。在OpenCL的执行模型中,有所谓的Compute Kernel和Compute Program。
Compute Kernel基本上类似于CUDA定义的kernel,是最基本的的计算单元;而
Compute Program则是Compute Kernel和内建函数的集合,类似一个动态函数库。很
大程度上OpenCL与CUDA Driver API比较相像。
6. 特点
•GPGPU的任务组织包含多个级别。 在每个级别中,一组任务实例共享公共代码(脚
本列表),但是在相应的基于索引的存储器地址上操作。 其本质是分层单指令多数据。
•GPU的硬件结构包含多个级别。 在每个级别中,调度元素操纵任务池,处理元件进
行计算,并且存储器组件提供数据访问。 它的本质是分层的Von Neumann(指令驱动和
分离的数据控制ALU)。
•GPGPU的调度机制包含多个级别。在每个级别中,并行任务实例被无序地调度,而
每个任务实例内的有序执行被保持。它的本质是分层多线程。
•GPGPU的执行机制可以被认为是并行执行和流水线执行的组合。对于任何粒度的任
务实例,它是原子的,它的执行经过几个流水线阶段一个接一个。然而,当我们打破任务
的原子性时,它的执行是通过其子任务的并行执行来实现的。这两种执行模式无缝融合,
追求硬件功能的极限。其本质是吞吐量计算。
•GPGPU的内存访问包含多个级别。在每个级别中,阶段输入/输出过程作为操作数馈
送/结果收集的充分和必要的条件。其本质是层次移动数据到计算,其来自数据分布和访问
分布之间的不一致性。
7. 展望
未来,综合了多核CPU和GPU技术的集群一定是超级计算机的主流。如何设计编程
模型与应用来发挥这种多级粒度并行的最大潜能,将会是应用领域专家最大的期盼。
展望GPU的发展, 我们期望下一代支持的编程模型超过2个级别,其中所有级别共
享公共代码表示和处理硬件。例如,每个脚本列表用级别索引标记,并且兼容硬件可以允
许多个级别的任务实例同时驻留在其上,即使一些是其他的子任务。CUDA的递归内核调
用朝着这个方向迈出了显着的一步。
我们可以期望未来的GPU从指令驱动到数据驱动,甚至打破计算和存储之间的边界:
更具体地,将ALU和存储器单元混合在一起的架构,其中访问过程也是计算过程, 反之
亦然。 这样的电路可能具有与神经形态芯片类似的架构,并以有效的方式同时处理多个数
据流。
我们可以期望未来几代的GPU支持跨级调度,其中所有级别共享一个共同的调度硬件。
更具体地,每个任务实例用任务索引和级别索引标记,并且分派组件可以允许以混合方式
分派不同级别的任务实例。
我们可以期望未来世代的GPU通过反向移动数据到计算(即,移动计算到数据)来减
少或甚至消除Stage-In / Out开销。例如,架构将ALU和互连网络混合在一起,其中传
输过程也是计算过程,反之亦然。这样的电路可能借用多核和Hadoop的成功并揭示了多
指令多数据行为。
GPU 发展到今天,已经突破了无数技术屏障,最初因图形处理而诞生的硬件发展成为
今天大规模并行计算领域的明星。我们完全可以相信 GPU 的架构还会不断优化,并被越
来越多的大型计算所采用。
参考文献
1.Liang Hu, Xilong Che, and Si-Qing Zheng. 2016. A closer look at GPGPU.
ACM Comput. Surv. 48, 4, Article 60 (March 2016), 20 pages.
2. 《GPGPU编程技术:从GLSL、CUDA到OpenCL 》 仇德元
3. 刘金硕,刘天晓,吴慧. 从图形处理器到基于GPU的通用计算. 《武汉大学学报(理
学版)》, 2013, 59(2):198-206
4. Inside Pascal: NVIDIA’s Newest Computing Platform.
/parallelforall/inside-pascal/
5.AMD Radeon RX 480 review: Redefining what's possible with a $200
graphics card.
/article/3089316/components-graphics/amd-radeon-
r
6. Jayshree Ghorpade1, Jitendra Parande2. Gpgpu Processing In CUDA
Architecture. Advanced Computing: An International Journal ( ACIJ ), Vol.3, No.1,
January 2012
7. John D. Owens, Mike Houston, David Luebke. GPU Computing. Proceedings
of the IEEE, 2008, 96(5):879-899