OpenCL荒谬CL_OUT_OF_RESOURCES

use*_*416 4 gpgpu nvidia opencl

我的CL程序:

constant double LATTICEWEIGHTS[19] = { 1.0 / 36.0,

                                      .....

                                      1.0 / 36.0 };

void
computeFeq(
  double  density,
  double3 velocity,
  double* feq) {
  for (int i = 0; i < 19; ++i) {
    feq[i] = LATTICEWEIGHTS[i];         // Line 1
    //feq[i] = 2.0 * LATTICEWEIGHTS[i]; // Line 2
  }
}

__kernel void
Kernel(){

  .....

  double  density;
  double3 velocity;
  double  feq[19];

  computeFeq(density, velocity, feq);
}
Run Code Online (Sandbox Code Playgroud)

这段代码有效.但是如果我评论第1行并取消注释第2行,则会立即发生CL_OUT_OF_RESOURCES.

有任何想法吗?

我用NVIDIA GTX 670M测试它.

chi*_*ies 5

这似乎是错的,但有些事先要检查:注册用法.Nvidia GPU支持详细输出选项.将其传递给clBuildProgram,然后检查构建日志.像这样的东西:

clBuildProgram(program, 1, &device_id, "-cl-nv-verbose", NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

这是在cl_nv_compiler_options扩展名下记录的.在CUDA文档中查找设备的最大寄存器数.可能发生的情况是,工作项块所需的寄存器总数超过单个SM/SMX中可用的寄存器总数,从而导致错误.

如果寄存器使用不是问题,那么它可能是某个地方的超出内存访问.我没有错误消息没有暗示这一点,但我之前遇到过这样的错误.这样的错误可能在任何地方都很难找到.