为OpenCL内核分配的额外32字节本地内存

时间:2014-04-18 20:29:21

标签: opencl gpgpu gpu-programming

我想弄清楚为什么我收到以下错误,因为我试图运行的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个字节来自哪里?

1 个答案:

答案 0 :(得分:1)

已知一些OpenCL实现使用与本地内存相同的物理内存来存储内核参数。你有32个字节的内核参数,这可以解释这种差异的来源。

例如,NVIDIA GPU绝对用于执行此操作(请参阅NVIDIA's original OpenCL best practices guide的第25页)。