【发布时间】:2013-01-06 03:42:42
【问题描述】:
我想将 SM 的所有可用共享内存分配给一个块。我这样做是因为我不希望将多个块分配给同一个 SM。 我的 GPU 卡有 64KB(共享+L1)内存。在我当前的配置中,48KB 分配给共享内存,16KB 分配给 L1。 我编写了以下代码来使用所有可用的共享内存。
__global__ void foo()
{
__shared__ char array[49152];
...
}
我有两个问题:
- 如何确保所有共享内存空间都已用完?
- 我可以将“48K”增加到一个更高的值(不会出现任何错误或警告)。有没有人可以证明这一点?
提前致谢,
伊曼
【问题讨论】:
-
当我用一个太大的(静态分配的)共享内存大小进行编译时,我得到一个编译错误(来自 ptxas)。请提供共享内存分配过大的代码的完整可编译示例,以及您用于编译的命令行,以进一步调查您的问题 #2。如果您按照 Eugene 的建议在内核启动时切换到动态分配共享内存,那么如果请求的共享内存太大,您应该会收到运行时错误(您是否正在检查错误?)。