Cuda 资源不足

Cuda 资源不足,cuda,pycuda,Cuda,Pycuda,我编写了以下简单的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];

我编写了以下简单的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;
  }
}
我使用
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.
即使我将blocksize减少到类似
(8,1,1)
的值,也会发生这种情况。我可以在GPU上运行块大小为
(512,1,1)
的其他CUDA程序,因此我相信这不是因为GPU配置问题


我做错了什么?谢谢您的帮助。

问题是我正在使用
gpuarray将整数
N
传输到GPU,我应该直接将
N
传递给
pr\u内核
函数。

问题是我使用
gpuarray.to\u-GPU
将整数
N
传递给GPU,我应该直接将
N
传递给
pr\u内核
函数。

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

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

这不可能是您的实际内核。tid的定义在哪里?我的定义在哪里?为什么不直接剪切并粘贴到实际内核中呢?对不起,实际内核在VirtualBox上,我从本地机器上发布了一个稍微过时的版本,因为我无法复制粘贴。saxpy_内核与pr_内核相同吗?是的,再次抱歉,问题与上面相同。我修改的一些起始代码。我认为这并不能解释您的问题,但您可能希望在添加之前将sum初始化为某个已知值。您收到的错误消息可能是由于您的实际启动配置(例如,参数数量或参数类型)造成的,如前所述。此外,这还显示了pycuda中cuda内核的参数定义中可能出现的错误。这不可能是您的实际内核。tid的定义在哪里?我的定义在哪里?为什么不直接剪切并粘贴到实际内核中呢?对不起,实际内核在VirtualBox上,我从本地机器上发布了一个稍微过时的版本,因为我无法复制粘贴。saxpy_内核与pr_内核相同吗?是的,再次抱歉,问题与上面相同。我修改的一些起始代码。我认为这并不能解释您的问题,但您可能希望在添加之前将sum初始化为某个已知值。您收到的错误消息可能是由于您的实际启动配置(例如,参数数量或参数类型)造成的,如前所述。这也显示了pycuda中cuda内核的参数定义中可能出现的错误。
pycuda.driver.LaunchError: cuLaunchKernel failed: launch out of resources.