2
我对CUDA真的很陌生,并且一直在尝试遍历2D数组。我有下面的代码在普通C作为预期其工作原理:CUDA替代2D块的双倍空间
for (ty=0;ty<s;ty++){
if (ty+pixY < s && ty+pixY>=0){
for(tx=0;tx<r;tx++){
T[ty/3][tx/3] += (tx+pixX<s && tx+pixX>=0) ?
*(image +M*(ty+pixY)+tx+pixX) * *(filter+fw*(ty%3)+tx%3) : 0;
}
}
}
也许我得到一些错误,但不会将此代码转换为CUDA如下?
tx = threadIdx.x;
ty = threadIdy.y;
T[ty/3][tx/3] += (tx+pixX<s && tx+pixX>=0) ?
*(image +M*(ty+pixY)+tx+pixX) * *(filter+fw*(ty%3)+tx%3) : 0;
只要我定义我的内核参数dimGrid(1,1,1)
和blockDim(r,s,1)
我问,因为我得到意想不到的效果。另外,如果我正确地声明和分配我的数组作为2D CUDA数组而不是一个大的一维数组,这会有帮助吗?
感谢您的帮助。
刚刚读“记忆竞赛”使问题看起来很明显。非常感谢你的帮助! – cookM 2011-05-18 07:56:25