我在 nVidia Quattro 6000 设备上运行一个长时间运行的内核。内核涉及具有数万次迭代的循环。
当我运行内核时,2 秒后屏幕变黑,Windows 重新启动 GPU 驱动程序并且 clFinish 返回错误。所以我给自己买了第二张 GPU 卡,只是为了显示,现在 2 秒超时不适用。
内核计算了 50 秒,然后出现了这些错误(以“GPU ERROR”为前缀的行是 clCreateContext 错误回调打印的错误):
GPU ERROR:
CL_OUT_OF_RESOURCES error executing clFinish on Quadro 6000 (Device 0).
Computation finished, took 50 seconds (00:00:50)
GPU ERROR:
CL_OUT_OF_RESOURCES error waiting for idle on Quadro 6000 (Device 0).
clFinish() returned CL_OUT_OF_RESOURCES
GPU ERROR:
CL_OUT_OF_RESOURCES error waiting for idle on Quadro 6000 (Device 0).
我能做些什么呢?
为简单起见,这是该内核的精简版本。实际上,它在曲面上执行积分,这就是我需要一个循环的原因 - 但是这个简单的版本也会崩溃,因为 n 足够大。
__kernel void integrate(
__global float *input,
__global float *output,
unsigned int n,
float c)
{
size_t kernel_idx = (get_global_id(1)*get_global_size(0) + get_global_id(0));
if(kernel_idx < inputWidth*inputHeight*inputDepth)
{
int j;
...
float sum = 0.0;
for(j = 0; j < n; j++) // y
{
sum += input[j];
}
output[kernel_idx] = sum;
}
}