CUDA编程记录

CUDA的硬件架构

CUDA core:最基本的处理单元,在AMD被称为streaming processor。最后具体的指令和任务都是在CUDA core上处理的。GPU进行并行计算,也就是很多个CUDA core同时做处理。

SM:多个CUDA core加上其他的一些资源组成一个streaming multiprocessor。也叫GPU大核,其他资源如:warp scheduler,register,shared memory等。register和shared memory是SM的稀缺资源。CUDA将这些资源分配给所有驻留在SM中的threads。因此,这些有限的资源就使每个SM中active warps有非常严格的限制,也就限制了并行能力
可以使用cudaGetDeviceProperties查看SM和CUDA core的个数
我的显卡是GTX950m,有5个Mutiprocessors(SM,也称GPU大核),每个SM有128个CUDA core(SP),总计5*128=640个CUDA core。
在这里插入图片描述

CUDA编程模型

CUDA的编程模型包括以下几个概念:
thread:一个CUDA的并行程序会被以许多个threads来执行。
block:多个threads组成一个block,同一个block中的threads可以同步,也可以通过shared memory通信。
grid:多个blocks构成grid。
warp:每32个线程组成一个warp,warp是GPU执行程序时的调度单位,同在一个warp的线程,以不同数据资源执行相同的指令,这就是所谓 SIMT。

每个块的线程数是有限制的,因为一个块的所有线程都驻留在同一个处理器核心上,并且必须共享该核心的有限内存资源。
我的显卡允许每个线程块中最多1024个线程,每个SM中最多2048个线程。
在这里插入图片描述

There is a limit to the number of threads per block, since all threads
of a block are expected to reside on the same processor core and must
share the limited memory resources of that core. On current GPUs, a
thread block may contain up to 1024 threads.

联系起来看

GPU中每个SM都设计成支持数以百计的线程并行执行,并且每个GPU都包含了多个SM,所以GPU支持成百上千的线程并行执行。
当一个kernel启动后,thread会被分配到这些SM中执行。大量的thread可能会被分配到不同的SM,同一个block中的threads必然在同一个SM中并行(SIMT)执行。每个thread拥有它自己的程序计数器和状态寄存器,并且用该线程自己的数据执行指令,这就是所谓的Single Instruction Multiple Thread。
  一个CUDA core可以执行一个thread,但是实际上并不是所有的thread能够在同一时刻执行。Nvidia把32个threads组成一个warp,warp是调度和运行的基本单元。warp中所有threads并行的执行相同的指令。一个warp需要占用一个SM运行,多个warps需要轮流进入SM。由SM的硬件warp scheduler负责调度。因此,一个GPU上resident thread最多只有 SM*warp个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值