我现在计划使用BLCR为CUDA应用程序创建Checkpoint / Restart库。
因为如果进程保留在GPU上,BLCR将无法运行cr_checkpoint。
实际上,我试图在某个时刻调用cudaDeviceReset()并在调用sleep(1000)之后,在睡眠系统调用期间我发送了这样的信号; cr_checkpoint PID
。
在这种情况下,我成功创建了context.PID文件,但未能像这样运行; cr_run context.PID
。
错误消息如下;
-mmap(0,2000000,2700000000,...)= 0xfffffffffffffff4(失败) -thaw_threads返回错误,中止。 -12 重启失败:无法分配内存
有没有人对此有任何想法? 总结如下。
如果有人对我有任何想法,我会申请。
答案 0 :(得分:3)
cudaDeviceReset()
完全破坏任何CUDA应用程序的设备端,包括停止正在运行的代码,重置GPU以及删除任何设备内存分配。它不会停止应用程序的主机部分,也不会影响它,除了我提到的分配。
cr_run
的失败。您可能需要阅读this(不幸的是,论文现在位于付费专区之后)。您cr_checkpoint
可能仍然存在现存的CUDA背景。
您可能希望使用driver API函数来显式管理和销毁任何CUDA上下文。