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

本文揭示了OpenCL中离线编译可能导致的CL_OUT_OF_HOST_MEMORY错误,重点在于程序修改后未重新编译的问题。建议在开发中注意清理旧的.bin文件,或在调试阶段选择在线编译以确保内存充足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的蕉尼基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值