GPU硬件和软件的对应关系

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,但需要序列执行。

对应关系&硬件结构

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值