首页 > 解决方案 > CUDA:cudaMallocManaged 是否处理退出?

问题描述

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

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

标签: c++cuda

解决方案


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

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


推荐阅读