【发布时间】:2020-07-23 20:14:00
【问题描述】:
我的 gtx1060 内存不足,所以我开始检查可用内存。我有一个函数在 GPU 上使用推力向量进行大量计算,然后是第二个函数处理 function_1 的结果。
我在 function_1 结束时检查了内存,从 function_1 返回后立即检查,可用内存大不相同。
void debug_check_gpu_memory()
{
float free_m, total_m, used_m;
size_t free_t, total_t;
cudaMemGetInfo(&free_t, &total_t);
free_m =(uint) free_t/1048576.0 ;
total_m =(uint)total_t/1048576.0;
used_m = total_m - free_m;
cout << " Memory :: " << endl;
cout << " Free = " << free_m << endl;
cout << " Used = " << used_m << endl;
cout << " Total = " << total_m << endl;
cout << "-----------------------------------" << endl;
cout << "\n\n";
}
void function_1()
{
...
...
debug_check_gpu_memory();
// Memory ::
// Free = 3536.88
// Used = -1373.69
// Total = 1979.19
return;
}
void function_2()
{
debug_check_gpu_memory();
// Memory ::
// Free = 728.87
// Used = 1250.31
// Total = 1979.19
}
main()
{
function_1;
debug_check_gpu_memory();
// Memory ::
// Free = 728.87
// Used = 1250.31
// Total = 1979.19
function_2;
}
问题
为什么我在第一个函数中看到“已用”内存的负数?我在第一个函数中检查内存,它总是负数。
为什么在 function_1 结束和再次检查 main 或 function_2 之间使用的内存量不同?
系统:
Linux - Fedora 29 64 位
NVIDIA-SMI 430.14
Cuda 版本:10.2
内存 6075 MiB
-- 我也不明白为什么我只看到 1979 mb 的可用内存,而 nvidia-smi 只显示我在程序外使用 ~500 mb。
【问题讨论】:
-
在您使用的编程语言中,强制转换优先于算术。即使表达式评估从左到右进行,强制转换也会发生在除法运算之前。将
size_t转换为uint对于此处的数字范围(> 4GB)来说是个坏主意
标签: cuda