1
4 점 스텐실 OpenCL 코드에 문제가 있습니다. 코드는 잘 실행되지만 예상되는 symetrics 최종 2D 값을 얻지 못합니다.OpenCL 스텐실 코드 문제
커널 코드의 업데이트 값에 문제가 있다고 생각됩니다. 다음은 커널 코드입니다.
// kernel code
const char *source ="__kernel void line_compute(const double diagx, const double diagy,\
const double weightx, const double weighty, const int size_x,\
__global double* tab_new, __global double* r)\
{ int iy = get_global_id(0)+1;\
int ix = get_global_id(1)+1;\
double new_value, cell, cell_n, cell_s, cell_w, cell_e;\
double rk;\
cell_s = tab_new[(iy+1)*(size_x+2)+ix];\
cell_n = tab_new[(iy-1)*(size_x+2)+ix];\
cell_e = tab_new[iy*(size_x+2)+(ix+1)];\
cell_w = tab_new[iy*(size_x+2)+(ix-1)];\
cell = tab_new[iy*(size_x+2)+ix];\
new_value = weighty *(cell_n + cell_s + cell*diagy)+\
weightx *(cell_e + cell_w + cell*diagx);\
rk = cell - new_value;\
r[iy*(size_x+2)+ix] = rk *rk;\
barrier(CLK_GLOBAL_MEM_FENCE);\
tab_new[iy*(size_x+2)+ix] = new_value;\
}";
cell_s, cell_n, cell_e, cell_w는 2D 스텐실의 4 가지 값을 나타냅니다. new_value를 계산하고 "barrier(CLK_GLOBAL_MEM_FENCE)"
다음에 업데이트합니다.
그러나, 그것 differents 작업 항목 간의 충돌이 보인다. 어떻게 해결할 수 있을까요?