c++ - cuda统一内存泄漏

标签 c++ memory-leaks cuda unified-memory

我正在编写一个程序,该程序使用 cuda 进行一些基本的对象检测。 我遇到了一个问题,我用 cudaMallocManaged 分配统一内存,用它做一些处理,然后用 cudaFree 释放它。尽管如此,cudaFree 从未返回错误,内存似乎从未真正被释放,因为任务管理器显示系统内存使用量和 gpu 共享内存使用量都在不断增加。我对统一内存的理解是否存在根本错误,或者这是一个错误?

最小的例子:

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <cassert>

int main()
{
    while (1)
    {
        void* ptr;
        cudaMallocManaged(&ptr, 1 << 20);
        assert(cudaFree(ptr) == cudaSuccess);
    }
}

我使用的是 Windows 10,cuda 版本是 10.2,驱动版本是 26.21.14.4122。

最佳答案

要么我的驱动程序安装已损坏,要么是驱动程序错误。 我修复的方法是重新安装 cuda,然后重新安装最新的 gpu 驱动程序(来自 nvidia 网站的游戏就绪驱动程序)。不过,我不确定为什么它一开始就损坏了。

编辑:新驱动版本为 445.87

关于c++ - cuda统一内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61346562/

相关文章:

multithreading - .net核心上ProtoBuf序列化时的内存泄漏

cuda段错误

C++ - 如何为类模板声明函数模板友元

c++ - 如何在分离声明和定义的同时为友元函数提供默认参数

c - Valgrind显示内存泄漏,现在该怎么办? R:C()扩展

c++ - 为什么嵌套的initializer_list会导致内存泄漏

cuda - 为什么只有一个 warp 由 cuda 中的 SM 执行?

c++ - 在 linux 上编译一个基本的 OpenCV + Cuda 程序

c++ - C/C++ - 如何通过 UDP 套接字发送 "packets"中的视频文件?

c++ - 从文件中读取数据并将其存储到结构中