CUDA共享内存大小意味着什么

时间:2012-07-16 05:55:32

标签: 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];
    ...
}

我的程序每个块创建大约1085个块和1024个线程。

(我正在尝试处理巨大的数组)

每块的共享内存大小是8192(1024 * 2 * 4)字节,对吗?

我发现通过使用cudaDeviceProp,我可以在GTX 580上的每个块的共享内存中使用最大49152bytes。

我知道GTX 580有16个处理器,可以在处理器上实现线程块。

但我的程序出现错误。(8192bytes&lt; 49152bytes)

我在内核中使用“printf”来查看是否运行良好,但是几个块没有运行。 (虽然我创建了1085个块,但实际上只有50~100个块可以运行。)

我想知道在同一处理器上运行的块是否共享相同的共享内存地址。 (如果没有,为共享内存分配其他内存?)

我无法理解每个块的最大共享内存大小意味着什么。

给我建议。

1 个答案:

答案 0 :(得分:13)

是的,同一个多处理器上的块共享相同数量的共享内存,即GPU卡的每个多处理器48KB(计算能力2.0)。因此,如果在同一个多处理器上有N个块,则每个块的最大共享内存大小为(48 / N)KB。