Metal资源的内存管理

Memory management of Metal resources

有一些MTLTextures要计算直方图,这个纹理在每次循环迭代时都会改变,所以直方图的计算是在循环中使用MPSImageHistogram进行的。

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

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

问题是command buffer执行完分配的内存如何清除?或者有什么方法可以重组计算方案?

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

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

假设你的渲染函数被调用 performHistogram 你可以这样做:

var myTexture: MTLTexture? = nil

autoreleasepool {
    myTexture = performHistogram()
}

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