Привет, я пытаюсь реализовать программу векторного расстояния в открытом CL ..
В основном у меня проблемы с передачей массива структур в ядро в качестве аргумента ..
моя структура определена следующим образом:
typedef struct
{
int a[nodes][4];
}node;
node * srcA;
после выделения памяти для этого .. Я связал его в буферный объект, используя этот код
// allocate the buffer memory objects
memobjs1 = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR,
sizeof(node) * n, srcA, NULL);
if (memobjs1 == (cl_mem)0)
{
printf("ERROR: Failed to create Buffer...mem[0]\n");
clReleaseCommandQueue(cmd_queue);
clReleaseContext(context);
return -1;
}
, и мой аргумент ядра установлен какэто
err = clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *) &memobjs1);
теперь я хочу передать этот массив структур (т.е. указываемых srcA) в ядро, я сделал это ..
const char *ocl_test_programs[] = {\
"__kernel void disvec (__global node *x,__global int *p)"\
"{"\
"int i=1,r=1,n;"\
"r=p[1]; "\
"n=p[0];"\
//"for(i=1;i<=n;i++) "\
"{"\
"if(x[r].a[i][2]!=999 && x[r].a[i][2]!=0)"\
"{"\
"int j = get_global_id(0); "\
/* "int k=x[r].a[i][2] + x[i].a[j][2];"\
"if(x[r].a[j][2]>k)"\
"{ "\
" x[r].a[j][2] = k;"\
"x[r].a[j][3] = i; } "\ */
//" } "\
" } "\
" } "\
" } "
};
когда я запускаю эту программу, она говориттип узла не определен ... я должен иметь в виду некоторые другие параметры для передачи ??Какие изменения я должен сделать .. ??если кто-то может хотя бы дать мне простой код, чтобы проиллюстрировать передачу структуры в ядро на простом примере, это будет высоко оценено ... большое спасибо :)