我在AWS上使用CUDA,所以我认为计算版本是3.0。我试图声明动态共享内存,并且我使用调试器检查它从未分配超过512个值。常规共享内存工作
Kern<<<1,1,1024>>>(...)
__global__ void Kern(..) {
__shared__ float sh[];
}
我使用cuda-gdb并收到超过512个元素的错误。
我在这里缺少某种配置吗?我仔细查看了部分文档,并没有看到任何限制。
答案 0 :(得分:3)
第三个内核配置参数(这里你的值为1024):
Kern<<<1,1,1024>>>(...) __global__ void Kern(..) { __shared__ float sh[]; }
是要保留的共享内存的字节的数量。 float
数量需要4个字节。因此,1024个字节足以容纳256 float
个数量。您还缺少共享变量定义中的extern
关键字,这对于动态共享变量分配是期望的。如果您想为每个线程块提供1024 float
个数量,则需要4096而不是1024的值,如下所示:
Kern<<<1,1,4096>>>(...) __global__ void Kern(..) { extern __shared__ float sh[]; }
您可能还想阅读编程指南中的shared memory。