CL_OUT_OF_RESOURCES GPU错误

时间:2014-10-20 01:27:13

标签: opencl gpu

我正在运行OpenCL程序的多次迭代,经过几次迭代后,我收到以下错误:

ERROR: Read Result (-5)
CL_OUT_OF_RESOURCES
运行此命令时

  err = clEnqueueReadBuffer( commands, d_c, CL_TRUE, 0,
                             sizeof(char) * result_size,
                               result_buffer, 0, NULL, NULL );

  checkErr(err,"Read Result");

内核分配了3个全局内存缓冲区,我发布了

clReleaseMemObject(d_a);
clReleaseMemObject(d_b)
clReleaseMemObject(d_c);
clReleaseKernel(ko_smat);

但我也分配了本地和私有内存,私有内存分配在内核(char tmp_array)和本地内存中。 我的内核有定义:

__kernel void mmul(

        __global char* C,
        __global char* A,
        __global char* B,
        const int rA,
        const int rB,
        const int cC,
        __local char* local_mem)

本地内存通过

在内核中创建
clSetKernelArg(ko_smat,6, sizeof(char) * local_mem_size, NULL);

我猜测内存不足错误是由于我未能释放私人内存或本地内存造成的,但我不知道该怎么做?

1 个答案:

答案 0 :(得分:1)

由于我没有足够的声誉来评论,我必须使用答案。

要正确解决您的问题,如果您发布代码的实际示例,将会很有帮助。

您实际分配了多少本地内存?你可能很有可能分配超过你的设备能力。如果您的“local_mem_size”变量未修复但是动态计算,请找出最坏的情况。 您可以查询设备可以提供多少本地内存,只需使用CL_DEVICE_LOCAL_MEM_SIZE调用clGetDeviceInfo。

正如DarkZeros已经提到的,CL_OUT_OF_RESOURCES是NVIDIA GPU在寻址超出范围时发生的错误。这可能发生在本地和全局内存中。