clCreateKernel: opencl error: -6, CL_OUT_OF_HOST_MEMORY
今天调试OpenCL 代码写了一个memcpy的函数,发现调用clCreateKernel()函数产生了错误,err:-6
CL_OUT_OF_HOST_MEMORY :宿主机上没有足够的内存执行命令
由于官方解释的原因就是这样,所以我的关注重点放在了内存上面,找了半天也没有发现问题原因。
突然间猛然想到,是不是函数本生的使用产生了问题,于是将重点放在了函数功能上,在实现函数的功能所依赖的kernel, 及program等.
最后发现,program 采用了离线编译即:clCreateProgramWithBinary 这种编译方式会检查ni编译的项目有没有生成.bin 的文件, 如果没有,那说明是第一次编译,那么就会执行在线编译,如果是存在bin那么就是离线编译,说明上一次已经编译成功了,这一次就采用离线编译。
由于opencl 内部的编译器没有我们用的gcc的功能那么强大, 在编译kernel 时, 并不会检测它是否有被修改过,采用离线编译如果存在.bin文件, 那么不管你有没有修改kernel, 都不会重新编译项目。
所以,当你采用离线编译时,修改了kernel, 最好删除.bin。 或者 在调试阶段,采用在线编译。!