Запустить из ресурсов

Я написал следующее простое ядро ​​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), Я могу запускать другие программы CUDA на GPU с размером блока (512, 1, 1) поэтому я уверен, что это не связано с проблемой конфигурации графического процессора.

Что я делаю неправильно? Спасибо за любую помощь.

2 ответа

Решение

Проблема была в том, что я переводил целое число N в ГПУ с помощью gpuarray.to_gpuгде я должен был проходить прямо N к pr_kernel функция.

У меня была похожая проблема, когда я использовал другой тип в определении и в качестве аргумента для ядра. Вероятно, тот факт, что последний потребовал больше ресурсов, приводит к ошибке.

Другие вопросы по тегам