clEnqueueNDRangeKernel'失败,错误'资源不足'

时间:2016-10-24 12:46:46

标签: opencl

从我的内核中,我调用一个函数说 f ,它有一个无限循环,它在 ++ depth>上断开。 5 。这没有以下代码段。

for(int j = 0;j < 9;j++){
                    f1 = inside(prev.o, s[j]);
                    f2 = inside(x.o, s[j]);
                    if((f1 ^ f2)){
                        stage = 0;
                        break;
                    }
                    else if(fabs(offset(x.o, s[j])) < EPSILON)
                    {
                        id = j;
                        stage = 1;
                        break;
                    }
            }

s 中循环使用9个元素是我在这里唯一做的事情。这是在无限循环内。我查了一下,运行2次没有问题,但第三次内存不足。 发生了什么?这不像我在任何地方创建任何新变量。 while循环中有很多代码,它比上面的代码片段执行更复杂的计算,并且不会遇到问题。我的猜测是我在存储 s 时出错了。

1 个答案:

答案 0 :(得分:3)

如果您阅读OpenCL文档,则不会生成错误,因为内核代码错误。代码甚至根本没有运行,这一切都发生在排队步骤:

OpenCL: clEnqueuNDRangeKernel

  

CL_OUT_OF_RESOURCES:   如果由于执行内核所需的资源不足,无法在命令队列中排队内核的执行实例。例如,显式指定的local_work_size导致执行内核失败,因为资源不足,如寄存器或本地内存。   另一个例子是内核中使用的只读图像args的数量超过了设备的CL_DEVICE_MAX_READ_IMAGE_ARGS值,或者内核中使用的只写图像args的数量超过了设备的CL_DEVICE_MAX_WRITE_IMAGE_ARGS值,或者内核中使用的采样器数超过了CL_DEVICE_MAX_SAMPLERS设备

检查本地内存大小,本地组大小,常量内存和内核参数大小。