一个网格中,多个块,每个块的大小和维度是一样的,每个线程—>cuda core或者 sp(stream processor)

 block–>SM。

SM 可以调度多个线程块,一个kernel 的各个线程块被分配多个SM, grid 是逻辑层 ,SM 是执行的物理层。每个SM 有自己的共享内存、寄存器 ,L1 cache 以及其他功能的硬件。一个程序的块不能被映射到不同的SM上,一个block 只能被一个SM调度。

 

SM 采用 SIMT采用单指令多线程的架构(将多维thread 排成一维),是以wrap为最小的调度单位,每个线程有独立地址计数器,也有寄存器状态,以及独立的执行路径。线程束中的线程从同一程序地址开始执行,但是可能会遇到不同的分支路径,另外一些线程可能不执行,只能进入等待状态。线程束的分化会造成程序性能的下降。

每个wrap中使用的内存、寄存器资源不能太多,否则,每个Sm上处于活跃状态的wrap会比较少。block 的大小一般设为32的倍数。

本文地址:https://blog.csdn.net/xieshangxin/article/details/108868568