CUDA共享内存占用

Rób*_*kus 1 cuda gpu-shared-memory

如果我每个 SM 有 48kB 共享内存,并且我编写了一个分配 32kB 共享内存的内核,这意味着一个 SM 上只能同时运行 1 个块?

Rob*_*lla 6

对,那是正确的。

共享内存必须支持所有“常驻”线程块的“占用空间”。为了在 SM 上启动线程块,必须有足够的共享内存来支持它。如果没有,它将等待,直到当前正在执行的线程块完成。

Maxwell GPU(cc 5.0、5.2)对此有一些细微差别。这些 GPU 支持 64KB (cc 5.0) 或 96KB (cc 5.2) 共享内存。在这种情况下,单个线程块可用的最大共享内存仍然限制为 48KB,但多个线程块在单个 SM 上总共可以使用超过 48KB。这意味着 cc 5.2 SM 可以支持 2 个线程块,即使它们都使用 32KB 共享内存。