2014-10-20 105 views
0

我运行的OpenCL程序的多次迭代,经过了几下,我得到以下错误:运行此命令CL_OUT_OF_RESOURCES GPU错误

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

    checkErr(err,"Read Result"); 

内核分配3当全球

ERROR: Read Result (-5) 
CL_OUT_OF_RESOURCES 

内存缓冲区,我释放

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

私有和本地内存具有内核的生命周期,并且不是* free * able。 – Farzad 2014-10-20 02:47:49

+0

这就是我的想法,但什么可以解释,然后我最终得到这个错误(经过多次迭代?) – user1018513 2014-10-20 02:55:13

+0

在nVIDIA平台上。读取已用于从内核写入数据的缓冲区时出现OUT_OF_RESOURCES错误,表示内核在写入该缓冲区时执行了SEG_FAULT。也就是说,它写入了缓冲区之外的地址。 – DarkZeros 2014-10-20 15:26:40

回答

0

由于我没有足够的评论声望,我必须使用一个答案。

为了正确解决您的问题,如果您发布代码的工作示例,这将会很有帮助。

你实际分配多少本地内存?您分配的数量可能超过您的设备所能分配的数量。如果你的“local_mem_size”变量不是固定的,而是动态计算的,找出最坏的情况。 您可以查询设备可以提供多少本地内存,只需使用CL_DEVICE_LOCAL_MEM_SIZE调用clGetDeviceInfo即可。

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

相关问题