【发布时间】:2014-04-19 05:10:36
【问题描述】:
我想弄清楚为什么我正在尝试运行的 OpenCL 内核收到以下错误:
Context error: [CL_OUT_OF_RESOURCES] :
OpenCL Error : clEnqueueNDRangeKernel failed: local memory usage (16416 bytes) is more than available on the device (16384 bytes)
内核定义为:
__kernel void kernelFun(__read_only image2d_t src,
__global __write_only uchar8 *dst,
__global uchar4 *endpointBuffer,
__local uchar4 *pixelBuffer)
{
...
}
我正在使用标准的clSetKernelArg 例程分配本地内存:
clSetKernelArg(gKernel, 3, kPixelBufferBytes, NULL);
其中kPixelBufferBytes 等于 16384。
我的问题是,这些额外的 32 个字节是从哪里来的?
【问题讨论】:
-
顺便说一下,
__write_only和__read_only属性仅适用于图像对象,对缓冲区没有任何意义。奇怪的是,实现不会为此抛出错误或警告。您在主机上创建缓冲区时为缓冲区指定只写/只读信息。