编程CUDA时,我们都知道线程块将在SM上调度,不会迁移到其他SM。对于线程块的线程,它会在整个执行过程中保留在单个SP上,还是可以在不同的SP上任意调度其指令?
答案 0 :(得分:3)
编程模型不会将线程限制为单个CUDA核心。线程块必须在单个SM上执行,因为块中的线程可以通过共享内存进行通信,共享内存只能由同一SM中的线程访问。这种限制是允许GPU从移动设备扩展到超级计算的一部分。
为什么知道线程是否在单个CUDA核心上执行有帮助? CUDA模型用于吞吐量计算,这意味着当一个线程(warp)正在进行具有一定延迟的操作时,硬件可以立即引入另一个线程(warp)来填补空白。因此,任何给定线程的执行位置都无关紧要。
答案 1 :(得分:1)
没有必要在一个固定的SP上限制一个线程,我相信自由地向一个固定的SP组中的任何SP发布线程是容易和有效的(我的意思是,一个SM可以划分为不同的块到简化设计并最大限度地减少互连。)
答案 2 :(得分:1)
CUDA核心是一个流水线执行单元,能够执行单精度和整数指令。 CUDA核心的常见其他名称是ALU,数学数据路径,数据管道...... CUDA核心是SM的执行和回写阶段。
CUDA核心是SM中几种类型的执行单元之一。其他包括负载存储单元(LSU),分支单元,双精度单元和特殊功能单元。
编辑:
CUDA核心不管理线程/ warp。前端获取指令,解码指令,读取寄存器并将warp(指令+寄存器)分派(发布)到FP / INT执行单元内核或其他类型的执行单元。
将CUDA核心视为经典的微处理器流水线执行单元(ADU,ALU,AVX,...)。