CUDA - 发布超时并被终止 - Ubuntu并没有显示

时间:2015-01-15 11:06:51

标签: cuda

我正在使用一个包含4个GeForce GTX Titan黑卡的工作站进行CUDA开发。我正在使用Ubuntu 12.04.5,并且这些GPU都不用于显示。我注意到使用cudaGetDeviceProperties启用了内核执行超时。当我不在Windows上而不使用显示器时这是否适用?

我在下面的一个内核中运行以下代码进行测试,这些内核通常运行良好:

__global__ void update1(double *alpha_out, const double *sDotZ, const double *rho, double, *minusAlpha_out, clock_t *global_now)
{
    clock_t start = clock();
    clock_t now;

    for (;;) {
        now = clock();
        clock_t cycles = now > start ? now - start : now + (0xffffffff - start);
        if (cycles >= 50000000000) {
            break;
        }
    }
    *global_now = now;
}

内核启动如下:

update1<<<1, 1>>>(d_alpha + idx, d_tmp, d_rho + idx, d_tmp, global_now);
CudaCheckError();
cudaDeviceSynchronize();

如果有足够多的周期等待,我会看到错误:

CudaCheckError() with sync failed at /home/.../xxx.cu:295: 
the launch timed out and was terminated

它可以在少量循环中运行良好。如果我在禁用内核执行超时的Tesla K20m GPU上运行相同的代码,我没有看到此错误,程序正常运行。如果我看到这个错误,它是否肯定意味着我正在达到似乎启用的内核时间限制,或者我的代码可能有其他问题?所有提到这个问题似乎是由使用Windows或使用他们的卡进行显示的人,所以我怎么可能看到这个错误?

1 个答案:

答案 0 :(得分:3)

Linux也有显示看门狗。在Ubuntu上,根据我的经验,它对于通过xorg.conf配置的显示设备是活动的(例如/etc/X11/xorg.conf,但确切的配置方法将因发行版版本而异)。

所以,是的,可以在Linux上看到内核执行超时错误。

通常,您可以通过多种方式解决此问题,但由于您有多个GPU,因此最好的方法是从显示配置中删除您要执行计算任务的GPU(例如xorg.conf或其他),然后在那些上运行您的计算任务。一旦X未配置为使用特定GPU,该GPU将不会有任何与之关联的监视程序。

其他具体细节见here

如果要重新安装,另一种通常可以使计算GPU远离显示路径的方法是在未插入系统的GPU中加载Linux操作系统。在按照显示方式配置事物之后,将计算GPU添加到系统并加载linux工具包。您将需要手动加载显示驱动程序而不是让linux工具包执行此操作,并取消选择让Linux显示驱动程序安装程序修改xorg.conf这同样可以让您的GPU配置为计算使用但保持不变显示路径。