grid的x和y不等时,处理结果显示不全

大家好!
在用CUDA处理一副图像时,计划是每个线程对应一个像素,kernel配置如下:


dim3 blocksize(bx, by);
dim3 gridsize((width+bx-1)/bx, (height+by-1)/by);

width和height分别是图像的宽和高。
每个像素的坐标为:

row = threadIdx.y + blockIdx.y * blockDim.y;
col = threadIdx.x + blockIdx.x * blockDim.x;

当bx和by的值相等时,如bx=16,by=16,整幅图像可以处理完;当bx和by不等时,如bx=16,by=24,结果只有图像的一部分(约2/3);如bx=16,by=32时,结果只有图像的一半。
请问这是哪里出了问题?
谢谢!预祝周末愉快!

从你已经发的代码看,

你使用了block数量向上取整,
及2个方向上分别是:(width + bx - 1) / bx 和 (height + by - 1) / by。

这无可避免的要涉及在kernel内部进行范围判定,
(否则你会越界,既然你能成功的执行出结果,那怕是部分结果,这证明你进行了判断了)

而从你的代码看,没有什么问题,所以最大的可能是在这个下标范围判断上。
在你修改了bx和by为较大的值后,您的kernel里的if()里面的条件可能没有及时修改。

建议的解决方案:
(1)立刻检查kernel里的下标范围判定是否正确。
或者
(2)给出代码,让论坛看到直接全部kernel来分析,而不是目前只有部分代码,只能靠猜。

感谢来访。