对于CUDA,线程是否停留在GPU上的单个SP上?

对于CUDA,线程是否停留在GPU上的单个SP上?,cuda,scheduling,Cuda,Scheduling,在编写CUDA时,我们都知道线程块将在SM上调度,并且不会迁移到其他SMs。对于一个线程块的线程,它在整个执行过程中会停留在单个SP上,还是它的指令可以在不同的SP上任意调度?编程模型不会将一个线程限制在单个CUDA内核上。线程块必须在单个SM上执行,因为块中的线程可以通过共享内存进行通信,并且共享内存只能由同一SM中的线程访问。这种限制是GPU从移动计算扩展到超级计算的部分原因 为什么知道线程是否在单个CUDA内核上执行很有帮助?CUDA模型用于吞吐量计算,这意味着当一个线程(warp)以某种

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

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


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

没有必要将一个线程限制在一个固定SP上,我相信在一个固定SP组中自由地向任何SP发出线程是很容易和有效的(我的意思是,一个SM可以划分为不同的块,以简化设计并最小化互连).

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

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

编辑:

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


将CUDA内核想象成一个经典的微处理器流水线执行单元(ADU、ALU、AVX等)。

谢谢,汤姆!你的回答很有帮助。对于程序员来说,实际上没有必要知道这一点。出于好奇,也许有一天我想写一个模拟器,lol.SP是对标量处理器的一个模糊的引用,在一些NVIDIA演示材料(如幻灯片8、9)中被用来指代CUDA“核心”,它在NVIDIA文档中被广泛使用,尽管只是一个稍微通用的术语。CUDA核心是指与单个线程的处理相关联的执行单元。Core有点通用,因为根据指令的不同,它的执行可能发生在SM/SMX中的不同功能单元中。谢谢,Greg。你的回答揭示了SM的CUDA核心的一些细节,但是,它没有告诉我我需要什么。正如我们所知,两个warp之间有一个“管道”的东西,即,当一个warp遇到一些长延迟指令时,其他warp将被安排来隐藏这个延迟。因此,这个“管道”与您提到的CUDA内核中的传统管道有什么关系吗?您的回答纠正了我的一个谬误。谢谢你,小龙!