的我寫了下面的簡單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配置問題。
我在做什麼錯?謝謝你的幫助。
這不能是你的實際內核。 tid在哪裏定義? (小)我定義在哪裏?爲什麼不剪切和粘貼你的__actual__內核? –
對不起,實際內核在VirtualBox上,我從本地機器上發佈了一個稍微過時的版本,因爲我無法複製粘貼。 – user2398029
saxpy_kernel與pr_kernel相同嗎? – dreamcrash