Я действительно новичок в CUDA и пытаюсь пройти 2D-массив. У меня есть следующий код, который работает, как и ожидалось, на простом C:
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)
Я спрашиваю, потому что получаю неожиданные результаты. Также, если я правильно объявлю и выделю свои массивы как двумерные массивы cuda, а не просто как большой одномерный массив, это поможет?
Спасибо за вашу помощь.