当前位置: 代码迷 >> 综合 >> 【BUG】clCreateKernel: opencl error: -6, CL_OUT_OF_HOST_MEMORY
  详细解决方案

【BUG】clCreateKernel: opencl error: -6, CL_OUT_OF_HOST_MEMORY

热度:10   发布时间:2023-12-22 11:12:40.0

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。 或者 在调试阶段,采用在线编译。!

  相关解决方案