CUDA编程入门系列(九)CUDA程序执行与硬件映射

               CUDA编程入门系列(九)CUDA程序执行与硬件映射_第1张图片

  一、GPU流式多处理器

        1.kernel的线程组织层次,一个kernel实际上会启动很多线程,这些线程时逻辑上并行的,但是在物理层上不一定是并行的。

        2.GPU硬件的一个核心组件时SM,streaming multiprocessor 流式多处理器

        3.SM的核心组件包括CUDA核心即SP,共享内存,寄存器等,SM可以并发地执行数百个线程,并发能力取决于SM所拥有地资源数

        4.当一个kernel被执行时,它地grid中地线程块被分配到SM上,一个线程块只能在一个SM上调度。

        5.SM一般可以调度多个线程块。那么有可能一个kernel地各个线程块被分配多个SM,所以grid只是逻辑层,SM才是执行的物理层。

二、CUDA内置变量

CUDA编程入门系列(九)CUDA程序执行与硬件映射_第2张图片

三、warp技术细节

        1.SM采用的SIMT(single instruction multiple thread单指令多线程)架构,基本的执行单元时线程束warp,每个warp包含32个线程。

        2.线程同时执行相同的指令,但是每个线程都包含自己的指令地址计数器和寄存器状态,也会有自己独立的执行路径。

        3.程序中的线程同时从同一程序地址执行,但是可能具有不同的行为,比如遇到了分支结构,一些线程可能进入分支,但是另外一些线程有可能不进入分支。

        4.GPU规定线程束中所有的线程在同一周期执行相同的指令,线程束分化会导致性能下降

        5.极小化命令的分化。

四、性能优化

        1.当线程块被划分到某个SM上时,它进一步划分为多个线程束warp,warp才是SM的基本执行单元。

        2. 因为资源限制,一个SM同时并发的线程束数时优先的。SM要为每个线程块分配共享内存,而且也要为每个线程束中的线程分配独立的寄存器。所有SM的配置会影响其所支持的线程块和线程束并发数量。

        3. 网格和线程块只是逻辑划分,一个kernel的所有线程其实在物理层时不一定同时并发的。

        4.kernel的grid和block的配置,性能会出现差异,这点是要特别注意的。SM的基本执行单元是包含32个线程的线程束,所以block的大小一般要设置为32的倍数。

你可能感兴趣的:(硬件架构)