从我的内核中,我调用一个函数说 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 时出错了。
答案 0 :(得分:3)
如果您阅读OpenCL文档,则不会生成错误,因为内核代码错误。代码甚至根本没有运行,这一切都发生在排队步骤:
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设备
检查本地内存大小,本地组大小,常量内存和内核参数大小。