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