【问题标题】:CUDA memory consumed when leaving function离开函数时消耗的 CUDA 内存
【发布时间】: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;

    }

问题

  1. 为什么我在第一个函数中看到“已用”内存的负数?我在第一个函数中检查内存,它总是负数。

  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


【解决方案1】:

感谢@Robert_Crovella 的评论,我删除了有问题的类型转换,问题就消失了。这不是 CUDA 问题,而是类型转换问题。

我一直在使用 Cuda 论坛上this 帖子中的代码,结果证明它不是 64 位安全的。我尝试改用 here 找到的 get_free_memory() 函数,效果很好。

【讨论】:

  • 如果您想关闭问题,请删除答案,然后您可以将您的问题标记为删除
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 2010-10-12
  • 1970-01-01
相关资源
最近更新 更多