Warp
回顾一下CUDA的线程层次
CUDA编程中,warp是调度和运行的基本单元,目前,每个warp包含32个threads。软件逻辑上,程序员的所有thread是并行的,但是,从硬件的角度来说,实际上并不是所有的thread能够在同一时刻执行。
例如:一个block 有128个thread,那么可以分为warp0~warp3,SM同时只执行一个warp,其他warp以就绪,挂起等状态存在。这点类似CPU的线程调度。从这角度看,SM相当于CPU核心,warp相当于CPU中一个线程。
Q:一个SM中可能有128或者192个SP(根据compute capability不同),一个thread需要SP中运行,一个SM同时执行的只有一个warp也就是32个thread,那么这个SM中的其他SP都在空闲?
Warps & Blocks
Warp是GPU运行调度的单位,由SM的warp scheduler负责调度,对程序员来说warp是透明的,我们可以设置的是block。Blocks中包含很多threads,CUDA会将它们组成成warps,如果block所含线程数目不是32(warp size)的整数倍,硬件也会为warp凑足,那么多出的threads所在的warp中,会存在一些inactive的threadsÿ