次の単純な 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
し、次の行で 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 構成の問題によるものではないと確信しています。
私は何を間違っていますか?助けてくれてありがとう。