Umb*_*lla 4 cuda shared-memory
我试图自己解决这个问题,但我不能.所以我想得到你的建议.
我正在写这样的内核代码.VGA是GTX 580.
xxxx <<< blockNum, threadNum, SharedSize >>> (... threadNum ...)
(note. SharedSize is set 2*threadNum)
__global__ void xxxx(..., int threadNum, ...)
{
extern __shared__ int shared[];
int* sub_arr = &shared[0];
int* sub_numCounting = &shared[threadNum];
...
}
Run Code Online (Sandbox Code Playgroud)
我的程序每个块创建大约1085个块和1024个线程.
(我正在尝试处理巨大的数组)
所以每个块的共享内存大小是8192(1024*2*4)字节,对吧?
我想通过使用cudaDeviceProp,我可以在GTX 580上的每个块的共享内存中使用最大49152bytes.
而且我知道GTX 580有16个处理器,可以在处理器上实现线程块.
但我的程序出错.(8192bytes <49152bytes)
我在内核中使用"printf"来查看是否运行良好但是几个块不运行.(虽然我创建了1085个块,但实际上只有50~100个块可以运行.)
我想知道在同一个处理器上运行的块是否共享相同的共享内存地址.(如果没有,为共享内存分配其他内存?)
我无法理解每个块的共享内存的最大大小意味着什么.
给我建议.
cha*_*ang 13
是的,同一个多处理器上的块共享相同数量的共享内存,即GPU卡的每个多处理器48KB(计算能力2.0).因此,如果在同一个多处理器上有N个块,则每个块的共享内存的最大大小为(48/N)KB.