【问题标题】:Memory management of Metal resources [closed]Metal资源的内存管理[关闭]
【发布时间】:2021-09-23 04:02:53
【问题描述】:

有一些MTLTextures要计算其直方图,这些纹理在每次循环迭代时都会发生变化,因此直方图的计算是使用MPSImageHistogram在循环中进行的。

有一个命令队列,一个 在每次循环迭代时都会创建一个新的命令缓冲区来执行直方图计算。

由于循环中创建了新的命令缓冲区,内存占用量(来自分配工具)不断增加。

问题是命令缓冲区执行后如何清除分配的内存?或者有什么方法可以重构计算方案?

简而言之,如何释放命令缓冲区、计算管道、编码器等金属对象消耗的内存。

【问题讨论】:

  • 所有 Metal 对象都是 Objective-C 对象。如果您不使用 ARC,请确保它们不会保留在任何地方。你真的不需要做任何具体的事情,当 API Objective-C 对象被释放时,驱动程序应该在使用完这些对象后清理内存。

标签: ios swift metal instruments


【解决方案1】:

我建议查看autoreleasepool。它旨在用于迭代,每次循环都会释放内存。

假设你的渲染函数被称为performHistogram,你可以这样做:

var myTexture: MTLTexture? = nil

autoreleasepool {
    myTexture = performHistogram()
}

//myTexture has been updated and memory should be freed.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多