1
我使用的报告可用的共享存储器作为16384个字节关于CUDA共享存储器
鉴于以下内核代码,其中T运行= INT(4个字节)
template <typename T>
__global__ void foo(unsigned n, T *x)
{
unsigned idx = blockIdx.x * blockDim.x + threadIdx.x;
__shared__ T sx[4096];
x[idx] = 0;
}
我得到一个GTX9800奇怪的行为预期的结果,即最初非零的数组x将被零填充。
然而,添加一行代码,不会做任何事情:
template <typename T>
__global__ void foo(unsigned n, T *x)
{
unsigned idx = blockIdx.x * blockDim.x + threadIdx.x;
__shared__ T sx[4096];
sx[0] = 0;
x[idx] = 0;
}
现在X调用内核后不包含任何零可言!
但是,如果我将sx的大小更改为< = 4088,我会再次获得预期结果。
怎么回事?我很困惑。
编辑:
校正错字:改变16384 “KB” 到 “字节”
+1 KB是一个错字,我的错。在这种情况下代码真的不应该编译! – aCuria 2013-04-09 18:06:59