0

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

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

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

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

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

  1. 我计划使用 BLCR 为 CUDA 应用程序制作 Checkpoint/Restart 库。
  2. 尝试调用cudaDeviceReset()函数,但重启失败(创建context.PID文件成功但重启失败)
  3. 我想知道如何在进程运行期间完全销毁或重置 CUDA 应用程序。

如果有人给我任何想法,我会应用它。

4

1 回答 1

3

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

但是,我不知道它会破坏所有 cuda 上下文。(它可能,我根本不知道。)我想你可能cr_run错误地解释了失败。您可能想阅读内容(不幸的是,该论文现在位于付费墙后面)。您的cr_checkpoint.

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

于 2014-02-20T22:59:04.870 回答