用原子函数做计数统计

版主你好
我在对一幅二值图像做膨胀运算,做膨胀运算后,膨胀运算后的图像数据还是个二值图像,像素值只有0和255,准备用原子函数来统计图像像素不为0的个数,但是在用原子函数的时候出现了问题,找了半天也没找到问题出在哪,请帮我看看问题出在哪了,kernel代码如下
global void Dilationkernel(uchardev_Image,int width,int height,uchardev_Dilation_Image,intdev_counterNonZero)
{
int x=threadIdx.x+blockIdx.x
blockDim.x;
int y=threadIdx.y+blockIdx.y*blockDim.y;

uchar flag=1;
int tid=y*width+x;

if(x>0&&x<width-1&&y>0&&y<height-1)
{
	for(int i=-1;i<2;i++)
	{
		int bid=(x+i)+y*width;

		if(dev_Image[bid]==255)
		{
			flag=0;
			break;
		}
	}
	__syncthreads();
	if(flag==0)
	{

dev_Dilation_Image[tid]=255;
atomicAdd(dev_counterNonZero,1);//dev_counterNonZero是个int型变量,写成了指针的形式
}
else
{
dev_Dilation_Image[tid]=0;
}
}
__syncthreads();

}

楼主您好,

(1)我看到您查看的是某点附近的3*3区域中是否存在值为255的像素,如果存在1-9个,则atomicAdd. 请确保这个符合您的设计原意。

(2)我没有看到您对dev_countterNonZero指向的int变量的初始化代码,请确保您已经在kernel前执行了初始化操作(清零)了。

请检查此2点(这不代表您完全不存在其他方面的问题),但请先看此2点。

感谢您在节日的深夜来访。

谢谢版主的回答