不能声明超过512个动态共享内存浮点数

时间:2015-08-05 00:08:21

标签: cuda

我在AWS上使用CUDA,所以我认为计算版本是3.0。我试图声明动态共享内存,并且我使用调试器检查它从未分配超过512个值。常规共享内存工作

Kern<<<1,1,1024>>>(...)
__global__ void Kern(..) {
    __shared__ float sh[];
}

我使用cuda-gdb并收到超过512个元素的错误。

我在这里缺少某种配置吗?我仔细查看了部分文档,并没有看到任何限制。

1 个答案:

答案 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