我没有通过迭代方程求解得到好的结果。我正在使用具有“size_y”行的二维数组,每行带有“size_x”元素。
问题是代码只进行了一次迭代,因为累积误差为零。这个累积误差是在内核代码中为数组的每个单元计算的。
这是此解决方案的源文件的 2 部分:
内核代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define min(a,b) a <= b ? a : b
// kernel code
const char *source =
"__kernel void line_compute(__global double diagx, __global double diagy,\
__global double weightx, __global double weighty, __global int size_x,\
__global double* tab_process, __global double* tab_new, __global double* r) {\
const unsigned int iy = get_global_id(0);\
const unsigned int ix = get_global_id(1);\
/* do computation */\
tab_process[iy*size_x+ix] = weighty *( tab_new[(iy-1)*size_x+ix] +\
tab_new[(i+1)*size_x+ix] + tab_new[iy*size_x+ix]*diagy)+\
weightx *( tab_new[iy*size_x+(ix-1)] + tab_new[iy*size_x+(ix+1)] + tab_new[iy*size_x+ix]*diagx) ; \
r[iy*size_x+ix] = 0;\
rk = tab_new[iy*size_x+ix] - tab_process[iy*size_x+ix];\
r[iy*size_x+ix] =r[iy*size_x+ix]+ rk * rk;\
tab_new[iy*size_x+ix] = tab_process[iy*size_x+ix]\
}";
在执行时,我打印的累积错误:
result = 0.0;
for(i=1;i<=size_x*size_y;i++)
{ result = result + r[i];
printf("r[%d]=%20.18f\n",i,r[i]);
}
printf("result=%f\n",result);
*error=result;
等于零。这就是代码只进行一次迭代的原因。
我不明白探针在哪里。如果有人能看出什么是错的。