Nvidia GPU 基本概念

Physical Architecture of GPU

下图为Nvidia官网上找的一个GPU主板的概念图,对应Device

  • Device:与host做区分,可以理解为是指整个显卡

如下图所示(Nvidia Tesla P100),共包含60个SM(6GPC x 10SM)

  • SM(Streaming Multiprocessor):等价于NUMA中的core的概念,由多个SP加上其他的一些硬件资源组成
    • 其他硬件资源如:warp scheduler,register,shared memory等
    • 同一个block中的warp一定分配给同一个SM
    • 每个SM有自己独立的local L1 cache,但所有SM会共用Device的L2 cache

每个SM有自己的内部结构,如下图所示GP100(Nvidia Tesla P100)中的SM内部结构,在GP100里,每一个SM有左右两个SM Processing Block(SMP)

  • SP(Streaming Processor):最基本的处理单元,也称为CUDA core,表示在上图中为绿色的小格子
    • 相当于一个简易的CPU
    • 内部包括控制单元Dispatch Port、Operand Collector,以及浮点计算单元FP Unit、整数计算单元Int Unit,另外还包括计算结果队列。当然还有Compare、Logic、Branch等

下图为SP(CUDA core)的内部结构

Software Concept in CUDA

  • Thread:一个CUDA的并行程序会被分配到多个threads来执行
    • 一个SP对应执行一个thread
    • threadId在cuda中为三维的概念,在一个block中由(x, y, z)来唯一定位
  • Block:多个thread群组成一个block
    • 同一个block中的threads可以同步,也可以通过shared memory通信
    • blockId在cuda中为二维的概念,在一个grid中由(x, y)来唯一定位
  • Grid:多个block构成grid
    • 一个grid对应一个执行一个kernel函数

空间对应如下图所示

  • warp:执行任务的调度单元,同一时间一个SM只能运行一个warp
    • 类比于CPU中的进程,当一个warp阻塞时,SM将切换执行另一个warp
    • 当前CUDA的warp大小为32个线程。这里表明Nvidia的GPU执行粒度小,执行线程粒度越小,并行度越高,掩盖延迟的能力越强
    • 同在一个warp中的线程,以不同数据资源执行相同的指令,即所谓的SIMT(Single Instruction Multiple Thread)

CPU和GPU的结构对比

  • CPU是靠更大的缓存和复杂的逻辑控制(如流水线、乱序执行、指令预测和预处理等等)来掩饰延迟的
  • GPU是靠更高的并行度来掩饰延迟的

Others

  • GPU在并发的warp之间切换是没什么消耗的,因为硬件资源早就被分配到所有thread和block,所以新调度的warp的状态已经存储在SM中了。不同于CPU,CPU切换线程需要保存/读取线程上下文(register内容),这是非常耗时的,而GPU为每个threads提供物理register,无需保存/读取上下文。
  • register和shared memory是SM的稀缺资源。CUDA将这些资源在程序执行前就分配给所有驻留在SM中的warp,并且整个程序执行周期都不再变动。因此这些有限的资源就会限制每个SM中active warp的数量,实验结果显示一个SM至少要存在6个active warp才能有效掩饰延迟

Reference Material

CUDA编程——GPU架构,由sp,sm,thread,block,grid,warp说起
GPU高性能编程CUDA实战
Nvidia GPU架构 - Cuda Core,SM,SP
CUDA编程——GPU架构,由sp,sm,thread,block,grid,warp说起
CUDA中grid、block、thread、warp与SM、SP的关系