浅析OPENCL中的CL_OUT_OF_RESOURCE错误

CL_OUT_OF_RESOURCE在opencl中的定义是:在opencl的执行设备上分配资源失败

在CPU上编程编习惯的人第一反应就是这相当于在GPU上malloc失败,如果看到后面的错误叫做CL_OUT_OF_HOST_MEMORY,就会更加确信自己的判断,如果报这个错肯定是GPU上分配内存失败,但实际上并非如此!

在CPU上程序员控制的基础资源实在不多,最普遍的当属内存,但是在GPU上能控制的资源实在太多:Global memory, local memory, constant memory, register, sampler,stack等等。任何一种资源不够了都会报CL_OUT_OF_RESOURCE,这实在是对程序员太不友好了,难怪如此多的人在向Kronos组织抱怨这个错误的设置。报个CL_OUT_OF_RESOURCE,你让我从何找起啊?你就不能细化一下吗?不仅如此,有一些你想不到的错误也会报这个错,比如读写溢出!下面就是我对这个错误的一些总结:

1 各种Object(program, memory)没有释放,无论什么情况造成memory leak,当积累到一定的量后,都会报这个错。但是如果只有一两个泄露,居然可以不报错!!解决方法是使用AMDprofiler运行,在summary里有memoryleak的报告,据此修改。

2 各种资源超出device支持的最大数,比如constant memory超过64KB,imagesampler超过8个,诸如此类。

3 kernel读写溢出。在普通的C程序中,如果你申请了一段内存,在读写的时候越界,会有OS给你报错,所以很容易检测。但是GPU是一个不那么完善的设备,如果写溢出,运气好没事,运气不好会用黑屏来告诉你。读溢出AMD完全不检测,NV只有超出一定范围才检测,这是一个不容易发现的错误。因为没有完善的错误报告机制,这个错误很不容易发现。

另外值得一提的是,NV的CL_OUT_OF_RESOURCE比AMD严格,一般NV不报这个错,AMD不会报。但是NV报的很奇怪,无论是以上那种情况,NV总是在把数据下载到内存的时候才报,不要被这个假象所迷惑。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值