【发布时间】:2013-11-10 08:34:07
【问题描述】:
我正在尝试使用霍夫变换检测二进制图像中的圆。 NDrangekernel 中本地和全局工作大小的问题我不知道所需的优化值 global_work_size 放维度过程图像的值,如 512*512 local_work_size 当输入值 1 或 8 或 16 时,程序运行正常 但是当将值更改为 32 或 64 时,编译正常,程序在执行时间上运行得更快,但没有导致累加器 in[] 的输出
图片尺寸512*512
size_t szGlobalWorkSize[2]={img.cols,img.rows};
size_t szLocalWorkSize[2]={16,16};
clEnqueueNDRangeKernel(clCommandQueue,hough_circle,2,NULL,szGlobalWorkSize,szLocalWorkSize,0,NULL,&event);
内核代码是:
kernel void hough_circle(read_only image2d_t imageIn, global int* in,const int w_hough)
{
sampler_t sampler=CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_NEAREST;
int gid0 = get_global_id(0);
int gid1 = get_global_id(1);
uint4 pixel;
pixel=read_imageui(imageIn,sampler,(int2)(gid0,gid1));
if(pixel.x==255)
{
for(int r=90;r<110;r+=1)
{
for(int theta=0; theta<360;theta++)
{
x0=(int) round(gid0-r*sin_parameter[theta] );
y0=(int) round(gid1-r*cos_parameter[theta] );
if((x0>0) && (x0<get_global_size(0)) && (y0>0)&&(y0<get_global_size(1)))
atom_inc(&in[w_hough*y0+x0]);
}
}
}
}
任何帮助选择全局和局部大小的最佳值
【问题讨论】: