关于每个SM执行的CUDA线程数的说明

zap*_*p85 4 cuda gpgpu

我是cuda编程的新手,正在阅读“对大型并行处理器进行编程-实际操作”一书中的有关G80芯片的信息,该芯片具有128个SP(16个SM,每个都有8个SP)。在Intel CPU和G80芯片之间进行了比较。Intel CPU支持每核2到4个线程,具体取决于机器型号。因为G80芯片每个SM支持768个线程,所以该芯片总共有12000个线程。

我的问题是,G80芯片可以同时执行768个线程吗?如果不是同时出现,那么Intel CPU每个内核支持2到4个线程是什么意思?我们总是可以在操作系统安排的Intel CPU上运行许多线程/进程。

las*_*gar 5

G80同时为每个SM保留768个线程的上下文,并交错执行它们。这是CPU和GPU之间的关键区别。GPU是深度多线程处理器,通过其他线程的计算来隐藏某些线程的内存访问。执行线程的延迟要比CPU和GPU针对线程吞吐量而不是线程延迟进行了优化而高得多。相比之下,CPU使用乱序的推测执行来减少一个线程的执行延迟。GPU使用多种技术来减少线程调度开销。例如,GPU将线程分组到称为波前扭曲的较粗的可调度元素中,并在SIMD上执行扭曲的线程。GPU线程是相同的,使其成为SIMD模型的合适选择。在程序员眼里,

CPU内核中使用的线程用于通过动态调度填充不同的执行单元。CPU线程不一定是同一类型。这意味着一旦线程忙于浮点,其他线程可能会发现ALU处于空闲状态。因此,可以并发执行这些线程。每个内核维护多个线程以填充不同的执行单元,从而有效地防止了空闲单元。然而,就功率和能量消耗而言,动态调度是昂贵的。因此,制造商每个CPU内核使用几个线程。

回答您的问题的第二部分:GPU中的线程由硬件调度(根据SM warp调度程序),并且OS甚至驱动程序都不影响调度。

  • 这是迄今为止最好的答案,但有几个缺点。您应该提到,GPU线程(和CPU超线程)没有昂贵的上下文切换,因为所有驻留线程的资源(寄存器数据)都同时驻留在芯片上。另外,您关于“执行线程的延迟比CPU高得多”的说法具有误导性。您的意思是,由于更大/更深的缓存,乱序执行,分支预测等原因,某些CPU指令的延迟较低。 (2认同)