5

我在一个真正的修复。请帮忙。这很紧急。

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

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

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

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

谢谢, 阿文德

4

3 回答 3

1

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

于 2010-07-27T04:42:46.000 回答
1

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

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

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

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

于 2011-04-20T14:07:24.033 回答
0

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

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

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

于 2010-06-01T06:32:26.947 回答