2012-11-04 34 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

当我在定义中使用一个不同的类型和作为内核的参数时,我遇到了类似的问题。后者需要更多资源可能会产生错误。