SM详解与Warp Scheduler,合理块和线程的数量对GPU利用率非常重要 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/670063380流式多处理器(Streaming Multiprocessor,SM)
假如一个SM最大只能存储1024个线程的信息,但一个SM可以拥有超过1024个线程。
那么这时在SM内存的warp线程的调度单元就是Warp Scheduler。
一个SM的CUDA core会分成几个warp(即CUDA core在SM中分组),由warp scheduler负责调度。尽管warp中的线程从同一程序地址,但可能具有不同的行为,比如分支结构。
一个SM同时并发的warp是有限的,因为资源限制,SM要为每个线程块分配共享内存,而也要为每个线程束中的线程分配独立的寄存器,所以SM的配置会影响其所支持的线程块和warp并发数量。
CUDA编程模型与GPU的映射关系
在CUDA编程模型中,计算任务是以thread和thread block和grid的形式进行组织的。
我们通常会将计算任务切分成多个可并行的子块,交给多个thread block计算。在thread block内部,我们再将任务进一步划分成多块,由每个thread计算。
GPU硬件也是采用了分层次的组织方式,被划分成多个SM,每个SM内部又有多个CUDA Core。CUDA thread和thread block最终是运行在CUDA Core和SM上面。
一个Grid可以包括多个SM,也可以访问Global Memory和Constant Memory。
一个Block只能在一个SM中,且一个SM包含多个Block,Block可以访问Shared Memory。
一个Block中有多个Thread,而一个Thread只能访问Registers或local Memory。
总结
GPU利用率是指GPU资源的占用情况,其中SM是GPU中的可独立计算单元,将计算任务分解成多个小部分的工作分配给不同的SM并行执行,从而加快计算速度。
Warp Scheduler是SM内存的线程调度单元,负责为每个线程块分配共享内存和为每个线程束中的线程分配独立的寄存器。
CUDA编程模型以thread、thread block和grid的形式组织计算任务,运行在CUDA Core和SM上面,CUDA编程与GPU硬件之间存在着一定映射调度关系。
由于硬件和调度在使用中资源的限制,是的一个SM中可执行的线程块的数量有限,此外还应保证一个grid应该需要有足够多的线程块。
因此,合理设计线程块和warp的数量是非常重要的,才能充分利用GPU资源,提高计算性能。