Otis
#1
在程序中我想对部分变量的内存进行管理,当用不到他时就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
Otis
#2
补充,请问为什么使用了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也是
lin
#3
现在del暂时还不能实现这个效果。用了destroy()以后内存没有变小的原因是destroy以后那片内存会进入一个回收的内存池中,不会还给系统。如果你再开一个相同大小或者更小的snode tree,taichi应该会重用那片内存,而不会从系统里要新的内存。内存越来越多确实不太对劲,我这边也复现了,我看看是不是有bug。
lin
#4
我看了一下重复开field的时候确实是没有向系统要新的内存的。
监测了一下内存占用,while循环每运行1次内存会增加5KB左右,可能是哪里有微小的内存泄露问题,我们会去查。