【发布时间】:2014-09-24 21:18:36
【问题描述】:
如果我每个 SM 有一个 48kB 的共享内存,并且我创建了一个内核,我在共享内存中分配了 32kB,这意味着只能在一个 SM 上同时运行 1 个块?
【问题讨论】:
标签: cuda
如果我每个 SM 有一个 48kB 的共享内存,并且我创建了一个内核,我在共享内存中分配了 32kB,这意味着只能在一个 SM 上同时运行 1 个块?
【问题讨论】:
标签: cuda
是的,没错。
共享内存必须支持所有“驻留”线程块的“足迹”。为了在 SM 上启动线程块,必须有足够的共享内存来支持它。如果没有,它会一直等到当前正在执行的线程块完成。
Maxwell GPUs (cc 5.0, 5.2) 的到来有一些细微差别。这些 GPU 支持 64KB (cc 5.0) 或 96KB (cc 5.2) 的共享内存。在这种情况下,单个线程块可用的最大共享内存仍被限制为 48KB,但在单个 SM 上,多个线程块总共使用的内存可能超过 48KB。这意味着 cc 5.2 SM 可以支持 2 个线程块,即使两者都使用 32KB 共享内存。
【讨论】: