我想自己解决这个问题,但是我不能。 所以我想得到你的建议。CUDA共享内存大小意味着什么
我在写这样的内核代码。 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];
...
}
我的程序为每个块创建大约1085个块和1024个线程。
(我试图处理阵列的巨大尺寸)
所以每块共享内存的大小为8192(1024 * 2 * 4)个字节,是吗?
我想通过使用cudaDeviceProp,我可以在GTX 580的每个块的共享内存中使用最大49152bytes。
而且我知道GTX 580有16个处理器,可以在处理器上实现线程块。
但我的程序时出现错误。(8192bytes < 49152bytes)
我使用的“printf”的内核,看看是否还有工作或没有,但若干块不工作。 (尽管我创建了1085个块,但实际上只有50〜100个块运行。)
我想知道在同一个处理器上运行的块是否共享相同的共享内存地址。 (如果没有,为共享内存分配其他内存?)
我无法明白每块的最大共享内存大小的含义。
给我建议。
希望共享内存的大小是2 * threadNum * sizeof(int),否则你的问题不是要求太多的共享内存,它太少了。 – talonmies 2012-07-16 06:10:30