2014-10-20 103 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上的錯誤。這可能發生在本地和全局內存中。

相關問題