提到wiki/CUDA,
这是否意味着,如果我有很多运行块,它们每个只能有2 KB的共享内存?如果不是这样,并且每个块仍然具有16KB共享内存,那么存储时,当有两个16KB的内存正在令牌MP上执行时?
答案 0 :(得分:4)
多处理器上运行的所有块必须共享所有资源(寄存器,共享内存等)
如果您的线程块使用共享内存,则它必须满足的第一个规则是它不能使用超过SM中可用的内容(在这种情况下为16KB)。
如果线程块需要少于16KB,则可能在SM上执行多个线程块。例如,如果每个仅使用大约8KB,则可以执行两个线程块。如果每个只使用最多(略小于)4KB(通常有一些开销),则可以执行四个线程块。
如果您希望在给定的SM(多处理器)上最多能够同时执行8个线程块,那么您必须在代码中确保线程块使用不超过2KB的共享内存(可能是一点点)不到2KB)。
如果每个线程块使用16KB的共享内存,则只是意味着其他线程块将在队列中等待,直到该线程块在该SM上完成,然后才开始执行。
如果某个线程块试图使用超过16KB(在这种情况下),则会出现内核启动错误。