我正在运行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);
我猜测内存不足错误是由于我未能释放私人内存或本地内存造成的,但我不知道该怎么做?
答案 0 :(得分:1)
由于我没有足够的声誉来评论,我必须使用答案。
要正确解决您的问题,如果您发布代码的实际示例,将会很有帮助。
您实际分配了多少本地内存?你可能很有可能分配超过你的设备能力。如果您的“local_mem_size”变量未修复但是动态计算,请找出最坏的情况。 您可以查询设备可以提供多少本地内存,只需使用CL_DEVICE_LOCAL_MEM_SIZE调用clGetDeviceInfo。
正如DarkZeros已经提到的,CL_OUT_OF_RESOURCES是NVIDIA GPU在寻址超出范围时发生的错误。这可能发生在本地和全局内存中。