初识GPU(三)——应用形式

版权声明:本文为博主原创文章,转载请注明链接 https://blog.csdn.net/luroujuan/article/details/86756847

初识GPU(三)——应用形式

1. CPU+GPU的组合架构

目前GPU相比于CPU,最大的优势在于核心的数量,以Intel Xeon处理器和Nvidia Tesla显卡为例,Intel(R) Xeon(R) E5-2630 v3拥有16个核心,理论上每秒浮点数计算量为307Gflops,NVIDIA Tesla K80的单个GPU用有2496个核心,理论上每秒浮点数计算量为4.1Tflops。可见GPU的浮点计算能力远高于GPU。

然而GPU并不能独立运行程序,GPU的程序运行依赖于CPU对其进行指令加载。目前来看,无论GPU运行速度有多快,都只是替CPU分担工作,它并不能取代CPU。所以在利用GPU加速计算时,都是GPU+CPU的组合架构。在这种架构中二者要分工明确,CPU主频高,更适合顺序处理任务,而GPU的核心多,擅长同时处理并行任务。

下图展示了CPU+GPU的组合架构。该架构下对于GPU加速而言,数据处理流程为:

1)数据从系统内存通过PCI-e总线传输到显存

2)GPU处理显存数据

3)数据从显存再通过PCI-e总线传回到系统内存

在该架构中我们可以看出,PCI-e总线是连接CPU和GPU的重要桥梁,其传输速度会直接影响GPU性能的发挥,当总线传输带宽不能满足数据交换需求时,GPU需等待CPU端的数据,而无法全速运行。PCI-e总线速度跟插槽的通道数有关,常见的通道数为X8和X16,理论上PCI-e3.0 X16的最高传输速度上下行各为16GB/s,但在实际中并不能达到这个速度。

关于数据传输,上面只提到CPU与GPU之间的数据传输,其实GPU可以与其他GPU或第三方设备(直接数据采集、RAIO、FPGA)进行通信。这里提一项技术GPUDirect,该技术让GPU能够与PCI-e总线上的其它设备直接进行数据通信,而不必借助CPU复制数据,避免了额外的CPU处理时间。

在这里再提一项Nvidia推出的新技术NVLink,可以使GPU与CPU、GPU之间的数据传输速度最高达到150GB/s,但需要使用支持这项技术的CPU和GPU。

另外,有的GPU支持传输和计算重叠,既边传输边计算,这样传输时间可以被计算隐藏一部分,隐藏的比例与计算时间和传输时间的大小有关。

2. 从三个方面分析是否使用GPU

基于GPU核心多主频低和PCIe传输速度有限的特点,目前主要从以下三方面分析算法任务是否适合在GPU端实现:

1)计算量。GPU虽然核心多,但它的单个核心的时钟频率比较低,目前最高只有1.3GHz,而CPU可以达到3GHz。当任务的计算量太小时,GPU的处理速度可能比CPU慢。如果此时数据量又比较大,加上传输数据的时间,GPU端的运行时间要比CPU端长很多。因此,计算量小的程序应该尽量在CPU端实现。当然并不是所有计算量小的程序都不能在运行在GPU上,出于整体性能的考虑,有些计算量小的程序还必须在GPU端运行,这与数据传输有关系。比如,程序已经开始在GPU实现,在过程中遇到计算量小的函数,单从计算量上分析,该函数不应该在GPU上运行,但假如在CPU端实现,还需要将数据传给CPU,CPU处理完成还要将数据传回到GPU,数据传输的时间加上CPU的处理时间要比GPU的处理时间长,因此这种计算量小的函数依然应该在GPU端实现。

2)并行性。GPU的计算优势在于同一时间可以在同时运行上千个线程,如果算法的处理流程是串行的,那么就很难利用多核或多个线程去实现,这样的任务不适合在GPU端运行。但是如果这个串行算法被同时执行成百上千次,那么也可以考虑用GPU。

3)实时性。GPU的程序运行依赖于CPU通过PCIe总线进行驱动,其响应延迟要比CPU和DSP长,同时每一次处理的任务都涉及到数据来回传输,传输方面的最小开销都需要几十微秒,因此GPU不适合处理实时性要求很高的任务,比如微秒级别。

同时,在CPU+GPU的加速计算架构中,我们要清楚地认识到GPU执行的代码在整个项目中可能只占一小部分,因为并不是所有计算任务都能利用GPU实现加速。GPU适合对并行性的计算密集型任务进行加速。下图展示了GPU代码在项目中所占比重。

初识GPU(一)——发展历史

初识GPU(二)——产品类型

初识GPU(四)——开发平台

版权声明:本文为博主原创文章,转载请注明链接 https://blog.csdn.net/luroujuan/article/details/86756847 

猜你喜欢

转载自blog.csdn.net/luroujuan/article/details/86756847