【问题标题】:Launch out of resources启动资源不足
【发布时间】:2015-09-30 11:00:25
【问题描述】:

我编写了以下简单的 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 上以 (512, 1, 1) 的块大小运行其他 CUDA 程序,所以我确信这不是由于 GPU 配置问题造成的。

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

【问题讨论】:

  • 这不可能是您的实际内核。 tid 在哪里定义?我在哪里定义(小)?为什么不直接剪切并粘贴到您的实际内核中?
  • 抱歉,实际内核位于 VirtualBox 上,由于无法复制粘贴,因此我在本地机器上发布了一个稍微过时的版本。
  • saxpy_kernel和pr_kernel一样吗?
  • 是的,再次抱歉,与上述相同的问题。我修改的一些入门代码。
  • 我认为它不能解释您的问题,但您可能希望在添加之前将 sum 初始化为某个已知值。如here 所述,您收到的错误消息可能是由于您的实际启动配置(例如参数数量或参数类型)。此外,这个one 显示了在 pycuda 中 cuda 内核的参数定义中可能出现的错误。

标签: cuda pycuda


【解决方案1】:

问题是我使用gpuarray.to_gpu 将整数N 传输到GPU,我应该直接将N 传递给pr_kernel 函数。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-08-08
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      • 2017-08-12
      • 1970-01-01
      相关资源
      最近更新 更多