CUDA:cudaMallocManage处理退出吗?

CUDA: does cudaMallocManaged deal with exits?

本文关键字:退出 处理 cudaMallocManage CUDA      更新时间:2023-10-16

如果(在C++ + CUDA中(cudaMallocManaged((用于在主机和GPU内存中分配共享数组,并且程序遇到(例如在主机代码中(exit(1),这是否会在GPU中永久留下悬空内存?

我猜答案是否定的,基于 exit(( 还是异常会阻止调用范围结束析构函数? 但我不确定 GPU 是否具有某种回收机制。

如果(在 C++ + CUDA 中(cudaMallocManaged()用于分配共享 主机和 GPU 内存中的数组,并且程序遇到(例如在主机中 code( 一个 exit(1(,这是否会在 GPU 中留下悬空内存 永久?

不。CUDA 运行时 API 注册了一个拆解函数,该函数将在进程退出时释放 API 声明的所有资源。此操作包括销毁任何活动的 GPU 上下文,从而释放 GPU 上的内存。请注意,该过程实际上必须退出才能发生所有这些操作(有关如何出错的示例,请参阅此处(。