1

在CUDA编程的时候,我们都知道一个线程块会被调度到一个SM上,不会迁移到其他SM上。对于一个线程块的一个线程,它会在整个执行过程中停留在一个SP上,还是它的指令可以任意调度在不同的SP上?

4

3 回答 3

4

编程模型不将线程限制为单个 CUDA 内核。线程块必须在单个 SM 上执行,因为块中的线程可以通过共享内存进行通信,并且共享内存只能由同一 SM 中的线程访问。这一限制是允许 GPU 从移动设备扩展到超级计算的一部分。

为什么知道线程是否在单个 CUDA 内核上执行会很有帮助?CUDA 模型用于吞吐量计算,这意味着当一个线程(warp)正在执行具有一定延迟的操作时,硬件可以立即引入另一个线程(warp)来填补空白。因此,任何给定线程在哪里执行都无关紧要。

于 2013-08-01T11:34:18.027 回答
2

CUDA 核心是能够执行单精度和整数指令的流水线执行单元。CUDA 核心的常见其他名称是 ALU、数学数据路径、数据管道…… CUDA 核心是 SM 的执行和回写阶段。

CUDA 内核是 SM 中几种类型的执行单元之一。其他包括负载存储单元 (LSU)、分支单元、双精度单元和特殊功能单元。

编辑:

CUDA 核心不管理线程/扭曲。前端获取指令、解码指令、读取寄存器并将warp(指令+寄存器)分派(发出)到FP/INT执行单元核心)或其他类型的执行单元之一。

将 CUDA 内核视为经典的微处理器流水线执行单元(ADU、ALU、AVX、...)。

于 2013-08-02T02:52:47.350 回答
1

没有必要限制一个固定SP上的一个线程,我相信自由地向一组固定SP中的任何一个SP下发线程是容易和高效的(我的意思是,一个SM可以被分成不同的块以简化设计并尽量减少互连)。

于 2013-08-02T02:16:02.633 回答