你好,我正在尝试在OpenCL中实现距离向量程序。
基本上,我在将结构体数组作为参数传递到内核时遇到了问题。
我的结构体定义如下:
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; } "\ */
//" } "\
" } "\
" } "\
" } "
};
当我运行这个程序时,它会显示“节点类型未定义”...我需要记住其他参数吗?我应该做哪些更改?如果有人能够给我一个简单的代码示例来说明结构传递到内核中的过程,那将非常感激。谢谢 :)