cuda统一内存泄漏
cuda unified memory leak
我正在编写一个程序,用 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);
}
}
我用的是Windows10,cuda版本是10.2,驱动版本是26.21.14.4122。
我的驱动程序安装已损坏或者是驱动程序错误。
我修复的方法是重新安装 cuda,然后重新安装最新的 gpu 驱动程序(来自 nvidia 网站的游戏就绪驱动程序)。不过我不确定为什么它一开始就损坏了。
编辑:新驱动程序版本为 445.87
我正在编写一个程序,用 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);
}
}
我用的是Windows10,cuda版本是10.2,驱动版本是26.21.14.4122。
我的驱动程序安装已损坏或者是驱动程序错误。 我修复的方法是重新安装 cuda,然后重新安装最新的 gpu 驱动程序(来自 nvidia 网站的游戏就绪驱动程序)。不过我不确定为什么它一开始就损坏了。
编辑:新驱动程序版本为 445.87