【问题标题】:Not able to kill bad kernel running on NVIDIA GPU无法杀死在 NVIDIA GPU 上运行的坏内核
【发布时间】:2011-02-26 05:12:33
【问题描述】:

我正处于一个真正的修复中。请帮忙。很紧急。

我有一个生成多个主机(CPU)线程(pthreads)的主机进程。这些线程依次调用 CUDA 内核。这些 CUDA 内核是由外部用户编写的。所以可能是坏内核进入了无限循环。为了克服这个问题,我设置了 2 分钟的超时时间,这将杀死相应的 CPU 线程。

杀死 CPU 线程也会杀死 GPU 上运行的内核吗?就我所测试的而言,它没有。

如何杀死当前在 GPU 中运行的所有线程?

编辑:我使用调用内核的 CPU 线程的原因是,服务器有两个 Tesla GPU。所以线程会交替调度GPU设备上的内核。

谢谢, 阿文德

【问题讨论】:

    标签: c multithreading pthreads cuda gpu


    【解决方案1】:

    杀死 CPU 线程也会杀死 GPU 上运行的内核吗?就我所测试的而言,它没有。

    可能不会。在 Linux 上,你可以使用 cuda-gdb 来解决这个问题。

    我没有看到使用线程将多个内核发送到 GPU 的意义。我想知道如果你同时将多个内核发送到 GPU 会发生什么。GPU 的线程调度程序会处理这个问题吗?

    【讨论】:

    • 我需要将单独的内核发送到 GPU,因为上下文不同。那就是初始化数据可能会有所不同。关于使用线程.. 该平台的设计考虑到了 CPU。但后来我们也将它用于 GPU。我不认为这应该重要。 GPU调度程序将对内核请求进行排队(这就是我的想法,我可能是错的。)
    • 试过了,是的,这就是它的作用..你能弄清楚它有什么问题吗?你在哪个平台? (Linux、Windows 还是 Mac?)
    【解决方案2】:

    好像没有。我运行了一个损坏的内核并似乎无限期地锁定了我的一个设备(直到重新启动)。我不确定如何杀死正在运行的内核。不过,我认为有一种方法可以通过驱动程序限制内核执行时间,所以这可能是要走的路。

    【讨论】:

      【解决方案3】:

      除非我没有真正了解其中的大部分内容,否则您最好使用 CUDA Streams api 进行多设备任务,但 YMMV。

      至于杀戮;如果您正在运行连接了显示器(和 x 服务器)的卡,它们将在 5 秒后自动超时(再次,YMMV)。

      假设情况并非如此;检查调用 cudaDeviceReset() API Reference;在您自己规定的“杀死”超时后从“父”线程。

      我还没有在我自己的代码中实现这个功能,所以老实说不知道它是否适用于你的情况,但它值得研究。

      【讨论】:

        猜你喜欢
        • 2021-11-03
        • 2023-02-19
        • 1970-01-01
        • 2013-04-24
        • 1970-01-01
        • 2019-02-19
        • 2016-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多