如何在进程运行期间完全销毁(清理,重置)CUDA应用程序

时间:2014-02-20 08:41:02

标签: cuda blcr

我现在计划使用BLCR为CUDA应用程序创建Checkpoint / Restart库。

为此,我必须在进程运行期间完全销毁CUDA应用程序。

因为如果进程保留在GPU上,BLCR将无法运行cr_checkpoint。 实际上,我试图在某个时刻调用cudaDeviceReset()并在调用sleep(1000)之后,在睡眠系统调用期间我发送了这样的信号; cr_checkpoint PID。 在这种情况下,我成功创建了context.PID文件,但未能像这样运行; cr_run context.PID。 错误消息如下;

-mmap(0,2000000,2700000000,...)= 0xfffffffffffffff4(失败) -thaw_threads返回错误,中止。 -12 重启失败:无法分配内存

有没有人对此有任何想法? 总结如下。

  1. 我计划使用BLCR为CUDA应用程序创建Checkpoint / Restart库。
  2. 我试图调用cudaDeviceReset()函数,但无法重启(成功创建了context.PID文件但无法重启)
  3. 我想知道如何在进程运行期间完全销毁或重置CUDA应用程序。
  4. 如果有人对我有任何想法,我会申请。

1 个答案:

答案 0 :(得分:3)

cudaDeviceReset() 完全破坏任何CUDA应用程序的设备端,包括停止正在运行的代码,重置GPU以及删除任何设备内存分配。它不会停止应用程序的主机部分,也不会影响它,除了我提到的分配。

但是,我不知道它会破坏所有的cuda背景。 (可能,我根本就不知道。)我想你可能已经错误地解释了cr_run的失败。您可能需要阅读this(不幸的是,论文现在位于付费专区之后)。您cr_checkpoint可能仍然存在现存的CUDA背景。

您可能希望使用driver API函数来显式管理和销毁任何CUDA上下文。