从硬件和运算策略角度详解GPU工作原理:显存、多核、高宽带、高线程比

        GPU(图形处理器 Graphics Processing Unit),是一种擅长处理图形图像的处理器。与我们熟知的CPU(中央处理器 Central Processing Unit)不同,GPU拥有更多的核,适用于高度并行的运算。因为这个特点,GPU在对于计算表现日益增高的二十一世纪拥有越来越多元化的应用场景,包括图形渲染、加密货币挖矿、分子建模、训练深度神经网络。本文将从硬件运算策略角度详解二者的区别,以及GPU如何实现高并行度。

1. 硬件

        GPU一般由以下硬元件组成:

计算单元(Computational Units)

        GPU中主要的计算单元,简称核,数量远超CPU。目前生产GPU的两大厂商为NVIDIA和AMD,前者将这种单元称之为CUDA核(CUDA cores),后者称之为流处理器(Stream Processor)或者着色器核心(Shader core),源于GPU最早的应用场景:图形渲染。不同厂商名称略有不同,但是计算单元担任类似的任务。

内存(Memory)

        GPU拥有自己的内存,称为视频RAM(VRAM)或图形双数据率(GDDR)内存。显存和CPU的内存(RAM)有以下主要区别:

  • 存储数据:显存一般用于存储图形渲染所需的数据,如纹理、帧缓冲、着色器代码。内存存储包括应用程序、文件、操作系统等临时数据。
  • 接口:显存采用与GPU高度匹配的接口,通常为GDDR(Graphics Double Data Rate),内存一般使用DDR(Double Data Rate)。
  • 访问模式:由于GPU大量重复操作,显存的访问一般是连续、一致的。内存访问会根据CPU处理的任务更加多元,不止图形计算。
  • 容量:显存的容量通常较小,通常在2GB到16GB之间,足够存储图形渲染所需的数据。内存的容量大得多,可以在几GB到数十GB的范围内,以适应更广泛的计算需求。

        显存优化为高带宽,以支持GPU与系统其余部分之间的快速数据交换。这在并行运算中可以很好的避免内存延迟影响性能的问题。但是一些现代GPU一般使用统一内存架构,允许GPU和CPU访问相同的内存池。这种方法简化了CPU和GPU之间的数据共享,提高了特定应用程序的性能。

控制单元(Control Unit)

        控制单元是计算机中的一个重要元件,负责解析和执行指令,以及协调计算机的整个运行过程。与擅长处理串行计算和控制流任务的CPU控制单元不同,GPU中控制单元专门为图形图像的运算服务,优先调用高并行框架。

2. 运算策略

        除了硬件优势,GPU同时通过高度并行的运算策略提高效率。

SIMD架构

        在GPU中,硬件计算单元的分布以及运算策略由SIMD决定。SIMD(单指令多数据 Single Instruction Multiple Data)是一种实用的并行运算架构,将同一个指令作用于多个数据元素。

        假设现在GPU需要完成矩阵1和矩阵2的计算。矩阵计算是GPU经常需要完成的指令。在这个例子中,这个指令为两个向量的点乘。由于矩阵的特性,所包含向量长度必须在一维度上一致,此指令会原封不动的重复n次,n为矩阵1的长。

        在传统的SISD(单指令单数据 Single Instruction Single Data)架构下,需要使用循环逐个向量执行点乘。这样的处理方式效率极低,尤其在较大的数据集上。而在SIMD架构上,可以使用一个指令同时取出矩阵2的所有的列向量,并于矩阵1中的第一个行向量进行点乘,大大提高了计算效率。

对付延迟:带宽与闲置线程,而非缓存

        任何处理器的计算单元的最大工作性能,包括CPU和GPU,一定会比内存抽取以及存储计算数据频率要高。这是因为无法避免的内存延迟(Memory Latency),也就是从处理器请求数据到内存返回数据所需的时间间隔。

        图中处理器需要完成DAXPY指令:a\vec{X}+\vec{Y}=\vec{Z}, 其中 a 是常数,\vec{X},\vec{Y},\vec{Z} 是矩阵。目前一个处理器在针对\vec{X}中的0号元素和\vec{Y}中的0号元素进行点乘。第一步是访问内存,取出\vec{X}\vec{Y}中0号元素的值。两者可以几乎同时进行,互不干扰。当\vec{X}0号元素取出,进行第二步,维度为a的缩放。第三步,也就是相加。这一步需要等待\vec{Y}中0号元素取出。由此可见,计算本身很简约,等待内存抽取元素值消耗了大量时间。

CPU对付延迟的缓存结构

 

        CPU解决延迟的方法是运用复杂的内存层次结构,包括多级缓存(L1、L2、L3缓存等)和主存储器。使用缓存的等级由数据的使用频率和是否需要全局调用来决定。比如,较小但更快速的缓存用于存储最常用的数据,而较大但相对较慢的缓存用于更大的数据集。CPU通过这种层次结构加速访问频繁使用的数据,缓解内存延迟。

       GPU处理策略:

        1. 高带宽的显存

        GPU也有自己的内存层次结构,但通常较为简化。GPU主要使用高带宽的显存作为主要内存。这种方法适合集中处理高并行任务的GPU,因为大量的重复操作产生了更连续和规律的内存访问模式,可以更有效地利用带宽。

        2. 闲置线程

        另外一种对付延迟的策略是通过闲置线程。因为GPU处理大量平行任务,需要多核同时计算,但是由于延迟,有些核的任务(例如DAXPY中的矩阵相加)又有向前依赖条件,GPU一般都会配置大量的闲置核,远远超过于内存存取数据可以承载的数量。

        比如在AMD A100的流式多处理器中,每个配有2048个可用线程,但是只有128个会被一个指令同时调用。这种线程的交替在提高平行度的同时,可以大大避免访问不同等级内存的延迟。因此,GPU相比CPU有较高的线程比率(Thread Ratio)线程比率是指在一个线程块内,活跃的线程数与总线程数之间的比例。如果一个线程块中有128个线程,并且其中有64个线程在执行计算任务,那么线程比率为 0.5。这里AMD A100比例为0.0625。

总结

      GPU拥有显存、多核、高宽带、高线程。相比CPU,这些硬件配置和运算策略使GPU实现高并行度的图形图像运算。

参考资料与部分图片出处:

1. How GPU Computing Works | NVIDIA On-Demand

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值