GPU基本概念
硬件层面:
- SP(Streaming Processor):流处理器, 是GPU最基本的处理单元,在fermi架构开始被叫做CUDA core。
- SM(Streaming MultiProcessor): GPU中最小的执行单元。一个SM由多个CUDA core组成。
软件层面:
- Kernel:在GPU上执行的函数。
- thread:一个CUDA的并行程序会被以许多个threads来执行。
- Block:数个threads会被群组成一个block,同一个block中的threads可以同步,也可以通过shared memory通信。
- Grid:Kernel 所对应的线程集合,由多个Block组成。
- Warp:是最基本的执行单元,一个warp包含32个并行thread,这些thread以不同数据资源执行相同的指令。
GPU架构是围绕一个流式多处理器(SM)的扩展阵列搭建的。通过复制这种结构来实现GPU的硬件并行。
- 先大概看一下SM包含的模块,熟悉一下:
- Instruction Cache:指令缓存,缓存了该SM里Warps的指令;
- Warp Scheduler:线程束调度器;
- Dispatch Unit:指令分发器,根据Warp Scheduler的调度向核心发送该Warp的指令;
- Register File:寄存器,编译好的机器码如ADD r1 r2 r3,这些r开头的就是一个个寄存器,给Core提供计算参数或者存储输出结果,上图的SM中有3万多个32bit的寄存器,Warp中每个任务都会分配私有的寄存器;
- Core:计算核心,负责浮点数和整数的计算;
- SFU:Special Function Units,执行特殊数学计算(sin、cos、log等);
- LD/ST:Load/Store,访存单元,加载和存储数据;
- L1 Cache:一级缓存,片上内存,即该内存是位于芯片内部的,速度很快;
- Shared Memory:共享内存,片上内存;
- Tex与Texture Cache:纹理单元用于采样纹理,纹理缓存;
- PolyMorph Engine:多边形引擎,用于处理顶点数据拉取、Viewport Transform等。
参考NVIDIA官网资料:Life of a triangle - NVIDIA’s logical pipeline
Fermi架构如上图,它的特性如下:
- 拥有16个SM
- 每个SM:
- 2个Warp(线程束)
- 两组共32个Core
- 16组加载存储单元(LD/ST)
- 4个特殊函数单元(SFU)
- 每个Warp:
- 16个Core
- Warp编排器(Warp Scheduler)
- 分发单元(Dispatch Unit)
- 每个Core:
- 1个FPU(浮点数单元)
- 1个ALU(逻辑运算单元)
2018年的NVidia Turing架构为例进行解析
放大一点
上图是采纳了Turing架构的TU102 GPU,它的特点如下:
- 6 GPC(图形处理簇)
- 36 TPC(纹理处理簇)
- 72 SM(流多处理器)
- 每个GPC有6个TPC,每个TPC有2个SM
- 4,608 CUDA核
- 72 RT核
- 576 Tensor核
- 288 纹理单元
- 12x32位 GDDR6内存控制器 (共384位)
单个SM的结构图如下:
每个SM包含:
64 CUDA核
8 Tensor核
256 KB寄存器文件
可用主观看出,一个商业级别的GPU 包含的东西比 寒武纪的深度学习加速卡 的会复杂一点,在图像的处理,浮点运算的考虑上更加丰富。