我正在尝试在我的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 chars
和cmdDevDest
的源数组作为目标。
当我尝试使用向量实现相同时,我将内核参数作为
clSetKernelArg(ckKernel,1,sizeof(cl_uchar4 )*row_info->rowbytes*bpp,&cmDevDest);
cmDevDest
为cl_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
答案 0 :(得分:1)
clCreateBuffer
函数返回cl_mem
个对象,而不是cl_uchar4
(或其他任何内容),因此cmDevSrc
和cmDevDest
应声明为{{ 1}}变量。这也是导致调用cl_mem
的编译器错误的原因。
此外,当您传递内存对象参数时,clEnqueueMapBuffer
的{{1}}参数应为arg_size
,而不是缓冲区的大小:
clSetKernelArg