关于使用并行计算查找坐标的位置

请问我在处理二值图像的实验,其中二值图像的像素值是0和255,因为图像中的数据只有0和255两个数,
所以每一行中就能统计像素值为255的个数,现在的算法是从最后一行开始统计每一行中255的个数大于20个时,记录下此时的行号,程序停止。如果不大于20个则行号减小,直到最上边的那一行。
按照版主的点播,我的程序编写如下,但是对程序还是有点不理解,请看看我的编程思路符合要求吗?
global void Coordinate(ucharImage,int width,int height,intkk_y)
{
shared uchar S_Image[512];

int tid=threadIdx.x;

for(int j=height-1;j>=0;j++)
{
	S_Image[tid]=Image[tid+j*width];
	__syncthreads();

	for(int i=blockIdx.x/2;i>0;i/=2)
	{
		if(tid<i)
		{
			S_Image[tid]=S_Image[tid+i];
		}

	}
	if(S_Image[0]>=(uchar)(255*20))
	{

kk_y[0]=j;
break;
}
}
}

LZ您好:

您的代码中有很多显而易见的BUGs。

比如,您写规约,每步不用同步么?
比如,让您通过数据规约求和的方式简单获得每行中255的个数是否超过20的的判定,有说过让您在uchar的类型里面加么?您这么加不怕溢出么?
比如,您的循环变量起始值是height-1,终值判断是>=0,每次j++,您不怕死循环么?

夜已深沉,请LZ自重。

以及您所有的block都会向同一个global memory位置写入数据,请问这样是符合算法意图的行为么?这样会导致怎样的结果?