【问题标题】:CUDA - the launch timed out and was terminated - Ubuntu and no displayCUDA - 启动超时并被终止 - Ubuntu 并且没有显示
【发布时间】:2015-01-15 11:06:50
【问题描述】:

我正在使用包含 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 或使用他们的卡进行显示,所以我怎么可能看到这个错误?

【问题讨论】:

    标签: cuda


    【解决方案1】:

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

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

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

    更多具体细节请见here

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

    【讨论】:

    • 非常感谢您的回复。我们根本没有运行 X。我们设法通过使用“nvidia-smi -r”重置 GPU 来禁用执行超时。据说这些 GPU 不支持此功能,但它似乎仍然有效。现在我们找不到重新启用它的方法(不是我们想要的),所以它最初是如何启用的有点令人费解。
    猜你喜欢
    • 2012-08-17
    • 2011-09-05
    • 1970-01-01
    • 2013-06-24
    • 2016-03-10
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多