2012-11-04 35 views
1

的我寫了下面的簡單CUDA內核:啓動了資源

__global__ void pr_kernel(float* O, const float* I, const float* W, int N) 
{ 
    int x = threadIdx.x; 
    float sum; 
    int i; 
    if (x < N) { 
    for (i = 0; i < N; i++) { 
     if (i == x) continue; 
     sum += W[x*N+i] * I[x]; 
    } 
    O[x] = (0.15/N) + 0.85 * sum; 
    } 
} 

的變量在Python分配如下:

N  = np.int32(4) 
W  = np.float32(np.asarray(
     [0, 1, 0, 1, 1, 0, 1, 1, 
     0, 1, 0, 1,1, 1, 0])) 
I  = np.float32(np.asarray(
     [0.25, 0.25, 0.25, 0.25])) 
O  = np.float32(np.zeros(N)) 

我使用gpuarray.to_gpu傳遞變量,我m使用以下行調用Tesla C2070上的內核:

pr_kernel(O_d, I_d, W_d, N_d, block=blocksize, grid=gridsize) 

其中:

blocksize = (128, 1, 1) 
gridsize = (1, 1) 

我得到的錯誤信息:

pycuda.driver.LaunchError: cuLaunchKernel failed: launch out of resources. 

發生這種情況,即使我減少塊大小爲類似(8, 1, 1)。我可以在GPU上運行其他CUDA程序,塊大小爲(512, 1, 1),所以我相信這不是由於GPU配置問題。

我在做什麼錯?謝謝你的幫助。

+0

這不能是你的實際內核。 tid在哪裏定義? (小)我定義在哪裏?爲什麼不剪切和粘貼你的__actual__內核? –

+0

對不起,實際內核在VirtualBox上,我從本地機器上發佈了一個稍微過時的版本,因爲我無法複製粘貼。 – user2398029

+0

saxpy_kernel與pr_kernel相同嗎? – dreamcrash

回答

1

的問題是,我用gpuarray.to_gpu,在那裏我應該已經直接傳遞Npr_kernel函數整數N轉移到GPU。

0

當我在定義中使用一個不同的類型和作爲內核的參數時,我遇到了類似的問題。後者需要更多資源可能會產生錯誤。