OpenCL持续抛出CL_OUT_OF_RESOURCES及GPU驱动崩溃问题排查
解决OpenCL中CL_OUT_OF_RESOURCES错误与GPU驱动崩溃的建议
是的,手动分配本地工作组大小大概率能解决你的问题,原因和具体操作如下:
别被"OUT_OF_RESOURCES"字面意思误导,这个错误不一定是显存不够。NVIDIA GPU的OpenCL实现对本地工作组的尺寸有严格硬件限制,自动分配的工作组很可能超出了这些限制(比如单维度工作项数超标、总工作组大小超限),直接导致驱动资源耗尽崩溃,和你剩余显存多少没关系。
你提到的那篇文章思路很对,核心是先拿设备硬件参数做依据:
用clGetDeviceInfo获取你的NVIDIA GPU的几个关键参数:CL_DEVICE_MAX_WORK_GROUP_SIZE:设备支持的本地工作组最大总数量CL_DEVICE_MAX_WORK_ITEM_SIZES:每个维度允许的最大工作项数CL_DEVICE_LOCAL_MEM_SIZE:如果内核用到了本地内存,这个也是硬限制
然后根据这些参数手动计算本地工作组大小,比如把工作组拆分成符合设备维度限制的尺寸,确保不碰硬件上限。
结合你的场景来看,三个场景仅分辨率不同就出现不同崩溃情况,说明全局工作项数量变化时,自动分配的工作组在高分辨率下触发了限制。比如全局工作项数不是自动工作组大小的整数倍,或者自动分配的某个维度工作项数超过了设备单维度上限,都会触发错误。
额外排查点:
- 检查内核代码有没有内存越界的情况(比如本地数组访问超出定义长度),这种问题也会伪装成CL_OUT_OF_RESOURCES错误,甚至直接搞崩驱动
- NVIDIA 466版本驱动不算新,可能存在OpenCL兼容性bug,调整完工作组大小如果还不行,可以试试升级驱动
- 清理阶段崩溃要注意资源释放顺序,确保先释放内存缓冲区、命令队列,再释放上下文,避免悬空引用导致的崩溃
内容的提问来源于stack exchange,提问作者Gen0me
相关产品推荐
相关产品推荐

