【问题标题】:Dispose and delete of arrayfire variables,处置和删除 arrayfire 变量,
【发布时间】:2021-10-22 14:51:41
【问题描述】:

我有一个 af::array 变量,它是 3000000*3:

int main()
{
    // inputArray is the pointer which fills tempArray

    af::array tempArray = af::array(af::dim4(3000000,3),inputArray);

    tempArray(tempArray < 0) = 0;


}

问题是,我想删除这个数组以便释放我的内存,它会填满我的专用 GPU 内存。我该怎么做?

使用此变量之前 enter image description here

使用此变量后: enter image description here

【问题讨论】:

    标签: c++ pointers memory gpu arrayfire


    【解决方案1】:

    了解 ArrayFire 使用垃圾收集器很重要。这意味着即使您释放了内存,GPU 上的内存也不会被释放,而是标记为可重用,稍后在您 (ArrayFire) 库需要时使用。

    分配内存的成本很高,这就是软件设计人员努力使用自定义分配系统来重用和批量分配内存的原因。

    要手动将内存返回到垃圾收集器,请使用af::freeV2()af::deviceGC()

    【讨论】:

    • 补充@Marcin 的建议,即使没有明确的垃圾回收请求,GC 也会在存在内存压力时自动触发,即有可用的分配但不符合新的分配标准等。在大多数用例中,自动垃圾收集应该能够有效地重用给定程序中类似分配的内存。
    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2018-05-16
    • 2022-06-10
    相关资源
    最近更新 更多