GPU这么香?如何通过GPU达到加速效能?GPU,你用对了吗?

2020-08-10 10:32:25 福瑞鑫智能科技


GPU自开放自编程后,其应用范围就越来越广,除了现在最受瞩目的AI应用外,仍有许多领域会需要通过GPU缩短计算时间。不论是科学运算中,解决有限元素分析的求解问题,或是生物工程进行DNA比对,甚至设计师通过软件将完成的CAD模型以光线追踪技术进行加速渲染。由于这些应用使用到大量的数据进行运算,通过GPU硬件及相关以CUDA为基础的算法结合,皆可大幅缩短结果出炉的时间。

GPU这么香???

如何通过GPU达到加速效能???

GPU这么香?如何通过GPU达到加速效能?GPU,你用对了吗?

GPU运算流程

GPU这么香?如何通过GPU达到加速效能?GPU,你用对了吗?
GPU这么香?如何通过GPU达到加速效能?GPU,你用对了吗?
GPU这么香?如何通过GPU达到加速效能?GPU,你用对了吗?

流体力学模拟、场景物理渲染、即时的火焰和烟雾模拟…这些应用可以迅速完成运算,其实依赖的不只是GPU,还有驱动其运算的CUDA


CUDA全名为:统一计算架构(Compute Unified Device Architecture),自2007年推出1.0版本后,目前已到10.2版本。简单来说,就是实现开发者和GPU沟通的一种桥梁,通过CUDA的技术让熟悉各种程序语言的开发者,能够通过程序撰写将算法通过GPU进行加速。


利用GPU加速的基本原理其实很简单:


主机上有负责存取数据的内存(RAM)及负责进行运算的CPU,而GPU上也同样有负责存取数据的内存和负责进行运算的GPU芯片(如下图)。在程序中主要流程都会由CPU进行控制及分配资源,当某一段程序要通过GPU进行加速时,可通过CUDA算法先将数据从主机内存复制到GPU内存,接着第二步CPU会呼叫GPU开始进行计算,计算完成后CPU又指派GPU将存放在GPU内存中的计算结果回传至主机内存,如此一来GPU加速的流程就完成了。

福瑞鑫智能科技

GPU这么香?如何通过GPU达到加速效能?GPU,你用对了吗?

GPU运算流程

通过GPU运算为何可达到加速效果? 

GPU和CPU本质上有很大的不同,CPU具有较大的缓存(cache)和较快的计算核心,可以处理较复杂的运算。


然而GPU不具备这样的条件,缓存较小且单核心计算速度也没有CPU快,只是取而代之的GPU具有大量的计算核心(通称CUDA Core),故其优势在于适合进行同时间的大量运算。一颗顶级的CPU核心数量可达56核心(Intel Xeon Platinum 9282),计算线程(Threads)达112,但低阶的GPU(如Quadro P620)的核心数就有512(GPU的核心数等于计算线程数量)。


当然这不代表GPU比CPU厉害,而是表示两者适合的计算类型不同。而GPU核心数量多的特点,也需要配合其平行化计算方式,才能将其优点发挥出来,所以由下图可知,GPU在计算时所有核心可高度平行进行计算,而CPU则是以顺序性(sequential)的方式进行计算。GPU是专为图像处理所需的计算密集、高度并行计算设计的。上述应用,都具有计算数据量大且可高度平行化的特性,也就最适合使用GPU来计算。

福瑞鑫智能科技

福瑞鑫智能科技

GPU这么香?如何通过GPU达到加速效能?GPU,你用对了吗?

福瑞鑫智能科技CPU和GPU设计架构及计算特性

如何使用GPU进行加速运算? 

使用GPU进行加速运算方法主要有三大类:

  • 使用商业软件包

  • 使用开源或官方函数库

  • 自行编程CUDA


1
使用商业软件包

第一项种类繁多,其中又以有限元素分析领域最多,此领域相关计算包含流体力学分析、热传导分析、电磁场分析或应力分析等等应用。由于范围涵盖IC设计、建筑设计、甚至许多交通工具或化工厂也需通过这类软件进行仿真分析,故开发这类软件有很大的商业价值。

2
使用开源或官方函数库

NVIDIA官方常见的如矩阵计算函数库cuBLAS、频率分析函数库cuFFT、深度学习函数库cuDNN等等,但也可从如GitHub社群上搜寻。上述两项也可参考NVIDIA官方收录的「GPU-ACCELERATED APPLICATIONS」,内容已将各领域可使用GPU的软件或套件收录并提供简介,让开发者可容易找到合适的应用套件。

3
自行编程CUDA

第三项就必须通过程序语言进行CUDA撰写,不过依照程序语言不同,能够操控的自由度也不相同,其中较底层的程序语言C/C++或Fortran属于自由度最高的程序语言,可利用程序语言控制GPU计算,甚至可针对本机内存与GPU内存数据传输进行优化。其次则为Python,Python也是现今最主流进行人工智能应用开发的程序语言。实现的方式包含PyCuda或是使用Numba函数库,PyCuda的使用者还是需要在核心程序撰写CUDA C,当然其效能几乎也等同于撰写CUDA C的效能,而Numba则是通过装饰器(decorator)于函数声明,并使用函数签名(function signature)完成呼叫CUDA的设定。此外,Java、R、C#等也都可以支持CUDA,但都不如C/C++或Fortran直接。

GPU这么香?如何通过GPU达到加速效能?GPU,你用对了吗?

电话咨询
最新产品
官方商城
QQ客服