主机进程终止时的 CUDA 上下文销毁



如果我的主机程序 [exit]/[segfault]/[被杀死],关于 CUDA 上下文销毁和相应分配的资源的相应行为是什么?

通过"行为",我的意思是自动GPU驱动程序端机制,如果我从未在我的程序中显式调用cudaDeviceReset。

我在 Linux 下工作,当我启动 CUDA 代码时,我看到我的 GPU 内存使用量在几天(甚至一天(内逐渐增长,这些代码有时通过 (CTRL-C( 终止或只是段错误(在主机端(......

也许,如果您正确管理异常,您可以使用atexit()?以下是使用atexit()的示例:

void ExitFunction() {
    cudaDeviceReset();
}
int main(...) {
    atexit(ExitFunction); 
    ...
    return 0;
}

设备上的所有分配都封装在 CUDA 上下文中。 使用运行时 API 时,CUDA 上下文会自动"在后台"创建。

当应用程序退出时,无论如何退出,都应销毁上下文(以及封装在其中的任何关联分配(。

如果您在各种事件后遇到可用内存的"小"变化,这可能只是因为驱动程序正在为其内部内务任务分配额外的空间。 (驱动程序类似于设备的操作系统。 如果您在各种应用程序退出事件后遇到可用内存的"大"变化,那么我会说有些问题,但由于您的问题没有提供有关如何重现它的详细信息或指示,我不确定还能说什么。

如果要强制驱动程序在外部"重置",可以尝试通过以下方式卸载驱动程序:

sudo rmmod nvidia
sudo nvidia-smi -a 

您的可用内存应该恢复"正常"。

相关内容

  • 没有找到相关文章

最新更新