CUDA中的SM如何同时运行多个块?

时间:2013-12-25 09:45:28

标签: cuda

在CUDA中,如果每个块不会花费太多资源,SM可以同时运行多个块。

在费米,我们知道SM包含32kb寄存器空间供使用。假设一个线程使用32个寄存器,那么这个SM可以包含一个包含256 ((32*1024)/(32*4))个线程的块。如果SM可以同时运行多个块,我们还可以为一个块配置32个标准,为SM配置8个块。有什么不同吗?

1 个答案:

答案 0 :(得分:1)

正如@talonmies评论的那样,你的数学并不完全正确。但关键是SM包含许多不同类型资源的平衡。内核和内核启动参数越适合这种平衡,性能就越好。

我没有检查Kepler的数字(计算能力3.x),但是对于Fermi(2.x),SM可以跟踪48个并发warp(1,536个线程)和8个并发块。这意味着如果为块选择了低线程计数,则8个并发块将成为内核中占用率的限制因素。例如,如果您为每个块选择32个线程,则最多可以在SM上运行256(8 * 32)个并发线程,而SM最多可以运行1,536个线程(48 * 32)。

在占用计算器中,您可以看到不同的硬件限制,它将告诉您哪些成为特定内核的限制因素。您可以尝试启动参数,共享内存使用情况和注册使用情况的变化,以了解它们如何影响您的入住率。

在性能方面,占用并非一切。占用率的增加转化为隐藏内存传输延迟的能力增强。当内存带宽饱和时,进一步增加占用率并没有帮助。还有其他影响。增加块的大小可能减少占用率,但同时增加内核中可用的指令级并行度(ILP)。在这种情况下,减少占用可以提高性能。