我想弄清楚为什么我收到以下错误,因为我试图运行的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个字节来自哪里?
答案 0 :(得分:1)
已知一些OpenCL实现使用与本地内存相同的物理内存来存储内核参数。你有32个字节的内核参数,这可以解释这种差异的来源。
例如,NVIDIA GPU绝对用于执行此操作(请参阅NVIDIA's original OpenCL best practices guide的第25页)。