0
的问题是:CUDA动态共享存储器没有得到值
共享阵列perBlockMsg[i]
保持等于0的所有值,但预计将十进制值大于0作为d_msg[]
具有的值越大。 d_msg[]
ia是一个二维数组,我已将其平面化为1D,并确保数据已成功传递到设备中。
__global__ void add(int *d_msg, int *d_checkSumArray) {
int i=threadIdx.x;
int j=blockIdx.x;
extern __shared__ int perBlockMsg[];
if(d_msg[i* gridDim.x + j]<=1)
{
perBlockMsg[i]=d_msg[i* gridDim.x + j];
}
__syncthreads();
if(j==2 && i<=gridDim.x) //here i is the row number
{
d_checkSumArray[i]=perBlockMsg[i];
}
}
内核调用了如下哪里(让说)M = 7,R = 4个,这两个变量是动态的,以及
add<<<R,(M+R), (M+R)* sizeof(int)>>>(d_msg, d_checkSumArray);
有人能指出问题出在哪里可能是什么?
你可能会从这次讨论一些帮助。 http://stackoverflow.com/questions/11900394/cuda-shared-memory-issue-in-outputs-depending-on-extern-declaration-and-size-of –
我保持你提到的帖子的建议我的上面的代码,但仍然不工作...这就是为什么我发布它... – Shohidul
不代表这行代码意味着你只会得到1,0或负数:if(d_msg [i * gridDim.x + j] <= 1)也许这应该是一个大于或等于测试? –