GPGPU是通用图形处理器。由于产业游戏的推动,GPU成为专门为提升图形渲染效率的而设计的处理器芯片。随着功能的不断完善,GPU逐渐发展成为并行计算加速的通用图形处理器,即GPGPU。近年来,人工智能的发展,GPGPU由于其强大的计算能力和高度灵活的可编程性,已经成为深度学习训练和推理任务最重要的计算平台。
1.1GPGPU 与并行计算机
并行计算机:并行计算是一些处理单元的集合,它们通过通信和协作快速解决一个大的问题。
- 处理单元:具有指令处理和计算能力的逻辑电路。一个处理单元既可以是一个算术逻辑单元,也可以是处理器核心、处理器芯片或者整个计算节点。
- 处理单元的集合:说明并行计算有一定的规模性
- 通信:是指处理单元之间进行数据交互。通信明确了两类并行体系结构:共享存储结构和消息传递结构
- 协作:指并行任务在执行过程中相对于其他任务的同步关系,约束了并行计算进行多任务处理的顺序,保证其正确性。
- 快速解决一个大的问题:并行计算机是为解决一个问题工作的,其设计目标是性能
从定义看,GPGPU体系结构也符合并行计算机的定义,而且它明确的采用了类似单指令多数据的设计方式和实现方法,成为当今并行计算机最成功的的设计范例之一。
1.1.1 并行体系结构
·根据指令流和数据流定义并行计算机的类型。指令流是单个程序计数器产生的指令序列,数据流是指令所需要的数据和其访问地址的序列,包括输入数据、中间数据和输出数据。
- 单指令流单数据流(SISD):这个并不是并行体系结构,但他可以利用指令级并行,在指令相互独立时实现多条指令的并行。传统的单核CPU是SISD典型代表。
- 单指令流多数据流(SIMD):一条指令对多个数据进行操作,向量处理器就是典型代表。实际中,SIMD通常要求问题中包含大量对不同数据的相同运算,SIMD需要高速 I/O 和大容量存储来实现高效并行。GPGPU也借鉴了SIMD,通过内置很多SIMD处理单元和多线程抽象来实现强大的计算处理能力。
- 多指令流单数据流(MISD):采用多条指令来处理单条数据流,数据可以从一个处理单元传递到另一个处理单元实现并行处理。一般认为,脉动阵列是MISD的实例,例如谷歌的TPU系列深度学习加速器。
- 多指令流多数据流(MIMD):最为通用的体系结构,它对指令流和数据流之间没有限制,各个处理程序既可以执行同一程序,也可以执行不同的程序。MIMD通用性搞,但设计复杂导致性能低下。
并行体系结构最基本的方式是单核内指令级并行,即处理器在同一时刻可以执行多条指令。
- 流水线技术是实现指令级并行的使能技术
- 采用流水线技术设计的指令级并行微处理器内核已经成为设计典范
- 在这个基础上是多线程和多核并行,即一个芯片上集成多个处理单元或处理核心,同时完成多个任务
- 再上一个层次是计算机并行,即多个芯片通过专用的网络连接在一起实现更大规模的并行
- 更高层次并行是仓储级计算器,即借助互联网技术将数以万计的处理器和计算节点连接在一起,每个节点是一个独立的计算机,并具备前面描述的多种层面的并行。
指令级和数据级并行适合在内核完成,因为它所需要的寄存器传输级(RTL)通信和协作在核内以极低的延迟完成。
现代处理器中的每个核心都会综合运用流水化、超标量、超长指令、分支预测、乱序执行等技术充分挖掘指令级并行。相对来说,MIMD的并行层次更高,会更多的利用多个处理单元、多个处理单元、多个处理核心和多个处理器或更多节点来实现。
1.1.2 GPU和CPU体系结构对比
CPU设计理念
- 注重通用性来处理各种不同的数据类型
- 同时支持复杂的控制指令,例如条件指令、分支、循环、逻辑判断及子程序调用等
- 因此CPU微架构的复杂性高,是面向指令执行的高效率而设计的
GPU设计理念
- 最初是针对图形处理领域而设计的
- 图形运算的特点是大量同类型数据的密集运算
核心数对比:对于CPU来说,内核较少,一般是4核或者8核;而GPU却是数以千计更小、更高效的核心组成。这些核心专门为了同时处理多任务而设计,因此GPU也被叫做众核处理器。
CPU和GPU的架构对比图:
CPU:
- 大部分晶体管用于构建控制电路和存储单元,只有啥部分的晶体管用来完成实际的运算工作,这使得CPU在大规模并行计算能力上极受限制
- CPU更擅长逻辑控制,能够使用复杂的运算环境
- 由于CPU一般除磷低延迟任务,所有更需要L1、L2、L3高速缓存空间来减少访问指令和数据时产生的延迟
GPU
- GPU控制相对简单,对高速缓存的需求相对较小
- 所以大部分的晶体管可以组成专用电路、多条流水线,使得GPU的计算能力有了突破性的飞跃
- 图形渲染的高度并行性,使得GPU可以通过简单增加处理单元和存储器控制单元的方式提高处理能力和存储器宽带。
近年来,CPU 大幅提高了峰值浮点性能。单仍旧与具有强大浮点运算能力的GPU存在差距。