GPU并行计算分析

2017-04-05 11:34张澳博
数字通信世界 2017年9期
关键词:线程指令运算

张澳博

(郑州外国语学校,郑州 450000)

GPU并行计算分析

张澳博

(郑州外国语学校,郑州 450000)

本文通过阐述GPU的基本原理和发展历程,对比CPU与GPU之间设计目的的不同,来说明GPU在高并行度计算中的优势,并介绍GPU的其他重要应用,提出将来可能的发展前景。

计算机;并行计算;GPU

1 GPU基本原理与发展历程

GPU取自Graphic Processing Unit的英文简写,译为图形处理单元。顾名思义,GPU是用来专门处理图形运算的处理单元,并且最初GPU的产生是为了将部分3D图形处理功能从CPU中分出来,进行硬件实现,以达到加快3D图形处理速度的目的。GPU的标志性技术是将T&L(光影转换)从CPU中分离出来,用硬件来加以支持,T&L是3D渲染中的一个不可或缺的重要部分,其作用是做几何处理,主要计算图形的3D角度位置和处理动态光线阴影效果。除此之外,GPU还包含其他重要技术,例如立方环境材质贴图、纹理压缩等等。

之后,GPU在发展中引入了可编程的特性,能够将图形硬件的流水线作为流处理器来解释,基于GPU的通用计算也开始出现,主要用于实现矩阵乘法运算和数学扩散方程求解。为了实现更复杂多变的图形效果,除了依赖硬件T&L实现光影转换,还要加强顶点和像素的运算能力,因此又提出了顶点着色器和像素着色器的硬件逻辑实现,用于支持可编程的顶点和像素,当然,最初虽然引入了可编程特性,但是可编程性很弱,受到许多的硬件限制。不久以后,随着可编程管线的出现,GPU的可编程性能不断加强,GPU开始朝着SIMD处理器方向发展,SIMD是Single Instruction Multiple Data的英文简称,译为单指令多数据流,主要特性是一条指令流可以同时处理多个数据流。此外,GPU的可编程性提高后,可编程浮点单元就变成GPU内部的主要运算力量。目前而言,面向GPU的统一计算架构CUDA的出现,使得GPU成为GPGPU(基于GPU的通用计算),只是它还保留最初被设计的专用图像处理的功能。

由于GPU在浮点计算能力上的突出表现满足了深度学习在分类、卷积两大主要活动上的性能要求,并且达到了深度学习所需要的精准度,使得大型神经网络能够尽可能地发挥其作用,因此几乎所有的深度学习计算平台都采用了GPU用来加速。NVIDIA表示,深度学习需要很高的内在并行度、大量的浮点计算能力以及矩阵预算,而GPU可以提供这些能力,并且在相同的精度下,相对传统CPU的方式,拥有更快的处理速度、更少的服务器投入和更低的功耗。

2 GPU与CPU

GPU和CPU都是有很强运算能力的芯片,且都能完成浮点运算功能,它们之间在性能上表现出来的不同,主要来自于他们不同的设计目的。

CPU被设计成为一个“通才”,它要兼顾指令和数值的并行运算,大部分的晶体管用在了Cache(高速缓冲存储器)和控制电路上,控制电路十分的复杂,内部仅有5%的ALU(算术逻辑单元,即运算器);GPU则被设计成为一个以图形类数值计算为核心的专注计算的“专才”,它对Cache需求不高,控制电路也较CPU简单许多,于是它大部分的晶体管用在了计算单元上,内部有40%的ALU。因此,CPU的设计目的是指令执行的高效率,它的核心部分重复的设计不多,是计算机中设计最复杂的芯片,实现了程序执行时的指令相关性和数据相关性等等复杂逻辑;GPU的设计目的则是面向矩阵类型的数值计算,它拥有大量重复设计的计算单元,用于实现大规模同类型数据的密集计算,最典型的就是图形数据的矩阵运算,这类计算可分成独立数值计算单元,并且数据之间没有程序执行那样的逻辑关联性。

相比较于CPU的设计,GPU在一些需要耗费巨大运算力的问题处理上显得优势明显,主要特点有:

⊙ GPU的核心数量众多,被称为“众核”,能够进行并行计算。虽然GPU单个的运算核心相较于CPU的工作频率低,但是GPU在总体的性能功耗比和性能芯片面积比上优于CPU很多。

⊙ GPU能够在一定程度上隐藏全局延迟。主要是通过大量并行线程之间的交织运行来达到这样的目的。

⊙ GPU在线程之间的切换上的开销远远低于CPU。

神经网络训练中,最重要的是训练速度,尤其是在深度学习中,它拥有的过多参数会耗费大量的时间。而在神经网络中,大量的运算是关于矩阵的运算,这刚好与GPU的优势相重合,GPU本来设计的目的就是处理举行类型的数值计算,所以GPU非常适合神经网络训练。

3 GPU发展前景

GPU在并行计算上的优势无可厚非,视频编码解码、矩阵运算、医疗应用、生命科学等研究应用,因为需要大量重复的数据集运算以及密集的内存存取,都需要GPU相较于CPU而言更强悍的计算能力。但是GPU并行运算是有前提的,它所处理的问题必须分成若干个可以并行执行的部分。目前,很多问题其实并不满足这个前提,大多数情况是后一个执行依赖着前一个执行的结果,这样的存在依赖情况下,只能串行运行,不能并行运行,这样一来,GPU显得没有用武之地。并且,GPU计算上的突出优势也仅仅体现在浮点运算上,在整数运算、逻辑运算和控制运算上,相较于CPU劣势十分明显。

因此,GPU要有长远的发展,以下几个地方必须得到弥补。首先是分支预测能力,GPU需要拥有更好的分支能力,才能运行更多复杂程序,更好地利用cache来掩盖分支的延迟;其次是更大的缓存和Shared Memory,这种共享寄存器负责共享数据和临时挂起线程,容量越大,线程跳转和分支能力就越强;线程粒度同样重要,粒度越细能够调用并行度来进行指令延迟掩盖的机会越大,性能衰减越小,而细化粒度对GPU的线程仲裁机制要求很大。

GPU发展到今天,已经突破了无数技术屏障,最初因图形处理而诞生的硬件发展成为今天大规模并行计算领域的一颗新星。随着智能终端对于图像显示的要求越来越高,GPU的性能也会随之越来越优化,也会被越来越多的大型计算机所采用。

展望未来,GPU的发展方向应该是CPU+GPU的混合构架模式,这样使得CPU与GPU优势互补,将拥有高性能、低能耗的特点。

4 结束语

CPU与GPU各有所长,CPU擅长处理具有复杂计算步骤和复杂数据依赖的计算任务,像操作系统、系统软件和通用应用程序这类拥有复杂指令调度、循环、分支、逻辑判断以及执行等的程序任务。它的并行优势是程序执行层面的,程序逻辑的复杂度也限定了程序执行的指令并行性,上百个并行程序执行的线程基本看不到。GPU的众核架构非常适合把同样的指令流并行发送到众核上,采用不同的输入数据执行,它擅长的是图形类的或者是非图形类的高度并行数值计算,GPU可以容纳上千个没有逻辑关系的数值计算线程,它的优势是无逻辑关系数据的并行计算,它在数值分析、金融分析以及像排序和MapReduce这样的海量数据处理上应用十分广泛。

因此,在一台CPU+GPU的计算机系统中,CPU和GPU各司其职,除了图形运算,GPU主要集中在高效率低成本的高性能并行数值计算,协助CPU分担这种类型的计算,提高整体系统的性能。

[1] 卢风顺,宋君强,银福康,张理论.CPU/GPU协同并行计算研究综述[J].计算机科学,2011,(03):5-9+46

[2] 张朝晖,刘俊起,徐勤建.GPU并行计算技术分析与应用[J].信息技术,2009,(11):86-89

[3] 姜晓丽,王伟,隋毅.GPU工作流程简介[J].科技创新导报,2010,(24):46

10.3969/J.ISSN.1672-7274.2017.09.014

TP274文献标示码:A

1672-7274(2017)09-0039-02

猜你喜欢
线程指令运算
重视运算与推理,解决数列求和题
基于C#线程实验探究
有趣的运算
基于国产化环境的线程池模型研究与实现
ARINC661显控指令快速验证方法
“整式的乘法与因式分解”知识归纳
浅谈linux多线程协作
杀毒软件中指令虚拟机的脆弱性分析
中断与跳转操作对指令串的影响
一种基于滑窗的余度指令判别算法