c++ - CUDA:cudaMallocManaged 是否处理退出?

标签 c++ cuda

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

根据 Will exit() or an exception prevent an end-of-scope destructor from being called? 我猜答案是否定的但我不确定 GPU 是否有某种回收机制。

最佳答案

If (in C++ + CUDA) cudaMallocManaged() is used to allocate a shared array in host and GPU memory, and the program encounters (say in Host code) an exit(1), does this leave dangling memory in the GPU permanently?

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

关于c++ - CUDA:cudaMallocManaged 是否处理退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52651392/

相关文章:

cuda - 为什么transform_reduce给出的结果与transform&reduce不同?

c++ - cudamallocmanaged 是否足够聪明,不会复制不需要的数据?

C++:升级到 GTX970 后 cv::gpu::GpuMat::upload 出现长时间延迟

c++ - 无需重新创建匹配 map

c++ - 为什么assign前要有copy?

C++ 程序将一个进程带到前台,如果已经在运行,否则创建一个新进程

c++ - 将内核函数的参数作为 C++ 结构传递?

c++ - 类包装器和调度器

c++ - remove_if 字符串中的最后一个字符

cuda - blockIdx 是否与 block 执行顺序相关?