GPU硬件和软件的对应关系

发布于:2023-01-22 ⋅ 阅读:(120) ⋅ 点赞:(0)

CUDA线程模型

线程模型(软件角度)

kernel在device上执行时实际上是启动很多线程,一个kernel所启动的所有线程称为一个网格(grid),同一个网格上的线程共享相同的全局内存空间,grid是线程结构的第一层次,而grid又可以分为很多线程块(block),一个线程块里面包含很多线程,这是第二层次

    1. Thread:线程,并行的基本单位;
    1. Thread Block:线程块,互相合作的线程组,线程块有如下几个特点:
      1. 允许彼此同步;
      2. 可以通过共享内存快速交换数据;
      3. 可以以1维、2维或3维组织(一般为3维);
      4. 每一个block和每个thread都有自己的ID(blockIdxthreadIdx),我们通过相应的索引找到相应的线程块和线程。
    1. Grid:一组线程块
      1. 可以以1维、2维或3维组织(一般为2维);
      2. 共享全局内存;
      3. gridblock都是定义为dim3类型的变量,dim3可以看成是包含三个无符号整数(x, y, z)成员的结构体变量,在定义时,缺省值初始化为1;
      4. dim3仅为host端可见,其对应的device端类型为uint3
    1. Warp:GPU执行程序时调度和运行的单位(是SM的基本执行单元),目前cuda的warp的大小为32;同在一个warp的线程,以不同数据资源执行相同的指令,这就是所谓 SIMTSingle Instruction Multiple Threads,单指令多线程)。
    1. Kernel:在GPU上执行的核心程序,这个kernel函数是运行在某个Grid上的。
      1. One kernel <==> One Grid

流处理器(硬件角度)

    1. SP(streaming processor):也称CUDA core。最基本的处理单元,具体的指令和任务都是在SP上处理的。一个SP可以执行一个thread;
    1. SM(streaming multiprocessor):也叫GPU大核,由多个SP加上其他资源(如:warp schedulerregistershared memory等)组成。block在SM上执行。
      1. SM可以看做GPU的心脏(对比CPU核心),registershared memory是SM的稀缺资源。CUDA将这些资源分配给所有驻留在SM中的threads。因此,这些有限的资源就使每个SM中active warps有非常严格的限制,也就限制了并行能力;
      2. 每个SM包含的SP数量依据GPU架构而不同,Fermi架构GF100是32个,GF10X是48个,Kepler架构都是192个,Maxwell架构都是128个;
      3. SM上并不是所有的thread能够在同一时刻执行。Nvidia把32个threads组成一个warp,warp是调度和运行的基本单元。warp中所有threads并行的执行相同的指令。一个warp需要占用一个SM运行,多个warps需要轮流进入SM。由SM的硬件warp scheduler负责调度。目前每个warp包含32个threads(Nvidia保留修改数量的权利)。所以,一个GPU上resident thread最多只有 SM * warp个。
      4. block一旦被分配好SM,该block就会一直驻留在该SM中,直到执行结束。一个SM可以同时拥有多个blocks,但需要序列执行。

对应关系&硬件结构

本文含有隐藏内容,请 开通VIP 后查看