使用del能达到snode_tree.destory()一样的效果嘛

在程序中我想对部分变量的内存进行管理,当用不到他时就destory,请问在python中直接用del能有一样的效果嘛,代码如下:

num_particle_in_cell = ti.field(int)
fb1 = ti.FieldsBuilder()
fb1.dense(ti.i, particle_per_cell).place(num_particle_in_cell)
fb1_snode_tree = fb1.finalize()
fb1_snode_tree.destory()

# !----------------- alternative method --------------------- #
del num_particle_in_cell

补充,请问为什么使用了destroy()后,python占据的内存没有变小。如下为测试代码:

import taichi as ti
ti.init()

def w():
     i = 0
     while i < 1000000:
         particle_per_cell = 1000000
         num_particle_in_cell = ti.field(int)
         fb1 = ti.FieldsBuilder()
         fb1.dense(ti.i, particle_per_cell).place(num_particle_in_cell)
         fb1_snode_tree = fb1.finalize()
         fb1_snode_tree.destroy()
w()

运行该代码后,发现cpu的内存是越来越多的,同理使用gpu也是

现在del暂时还不能实现这个效果。用了destroy()以后内存没有变小的原因是destroy以后那片内存会进入一个回收的内存池中,不会还给系统。如果你再开一个相同大小或者更小的snode tree,taichi应该会重用那片内存,而不会从系统里要新的内存。内存越来越多确实不太对劲,我这边也复现了,我看看是不是有bug。

1 个赞

我看了一下重复开field的时候确实是没有向系统要新的内存的。

监测了一下内存占用,while循环每运行1次内存会增加5KB左右,可能是哪里有微小的内存泄露问题,我们会去查。