从openCL中的向量类型内存返回值?

时间:2014-05-26 12:06:34

标签: opencl

我正在尝试在我的OpenCL代码中使用向量。在此之前,我正在将内存映射为

cmDevSrc= clCreateBuffer(cxGPUContext,CL_MEM_READ_WRITE,sizeof(cl_char) * (row_info->width) * bpp,NULL,&ciErr);
cmDevDest=clCreateBuffer(cxGPUContext,CL_MEM_READ_WRITE,sizeof(cl_char) * (row_info->width) * bpp,NULL,&ciErr);

我使用cmDevSrc作为unsigned charscmdDevDest的源数组作为目标。 当我尝试使用向量实现相同时,我将内核参数作为

传递
clSetKernelArg(ckKernel,1,sizeof(cl_uchar4 )*row_info->rowbytes*bpp,&cmDevDest); 

cmDevDestcl_uchar4 cmDevDest。 但现在,我无法使用映射回读我的数据,并出现以下错误,

incompatible type for argument 2 of ‘clEnqueueMapBuffer’ 
/usr/include/CL/cl.h:1066: note: expected ‘cl_mem’ but argument is of type ‘cl_uchar4’

此时我还不知道此编译时错误的任何其他方法,我正在搜索网络,但任何帮助都会非常有帮助。

由于 PIYUSH

1 个答案:

答案 0 :(得分:1)

clCreateBuffer函数返回cl_mem个对象,而不是cl_uchar4(或其他任何内容),因此cmDevSrccmDevDest应声明为{{ 1}}变量。这也是导致调用cl_mem的编译器错误的原因。

此外,当您传递内存对象参数时,clEnqueueMapBuffer的{​​{1}}参数应为arg_size,而不是缓冲区的大小:

clSetKernelArg