opencl代码实在搞不明白

cnthinkman 2018-03-22 10:24:34
我在调试一段opencl kernel代码如下:
__kernel void interpolation_kernel(
__global float * dataIn, //没有经过插值的数据平面
__global float * dataOut, //经过插值的数据平面
__global float * Boundary, //边界信息
__global float * dist, //距离矩阵信息
__global int * rangef
)
{
int x1=gid_row;
int y1=gid_col;
...............

for(int s1=x2-p2;s1< x2+p2+1;s1++)
{
for(int t1=y2-p2;t1<y2+p2+1;t1++)
{
fdddd=dataIn[(x2+s1)*plotpixelsize+y2+t1];
if(fdddd==-1)
{

ChooseK[Ki]=fdddd;
dd[Ki]=dist[(x2+s1)*interppixelsize+y2+t1];//此点到圆盘中心点(插值点)的距离
}


Ki++;
}
}

.......................

dataOut[gid_row]=5555555;

以上代码dataOut 可以输出正确的数据。
但是如果将Ki++移入if内:

for(int s1=x2-p2;s1< x2+p2+1;s1++)
{
for(int t1=y2-p2;t1<y2+p2+1;t1++)
{
fdddd=dataIn[(x2+s1)*plotpixelsize+y2+t1];
if(fdddd==-1)
{

ChooseK[Ki]=fdddd;
dd[Ki]=dist[(x2+s1)*interppixelsize+y2+t1];//此点到圆盘中心点(插值点)的距离
Ki++;
}


}
}

.......................

dataOut[gid_row]=5555555;

这样的话,dataOut就得不到正确的结果,输出全为0。不知到Ki++移入if后为何会产生这种结果,请达人为我解析一下。

...全文
693 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

601

社区成员

发帖
与我相关
我的任务
社区描述
异构开发技术
社区管理员
  • OpenCL和异构编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧