我已经问过这个问题HERE,但没有得到任何满意的答案。也许是因为我在那个问题中包含了多个问题。 我的问题是我是否被允许为同一网格的不同块声明不同的共享内存。
例如:
Dx = blockDim.x;
Dy = blockDim.y;
Bx = BlockIdx.x;
By = BlockIdx.y;
if(By==0)
{
if (Bx==0)
{
__shared__ bds[5][5];
}
else if (Bx==(Dy-1))
{
__shared__ bds[6][6];
}
else
{
__shared__ bds[5][6];
}
}
上面的代码是内核代码的一部分。我试图将特定数量的共享内存分配给特定块。这种行为在CUDA中是否允许?
答案 0 :(得分:3)
现在目标已停止摆动,并且有一个具体,稳定的问题要回答:
是的,完全有可能这样做但请注意
第二点和第三点意味着您提出的方案没有规模效率增益。事实恰恰相反。你的内核将需要更多的共享内存,而不是只有一个静态声明的共享内存,这是每种情况下所需的最大内存并且你做了相应的编码。