ti.deactivate()
可以抑制某个节点,我在写程序时候,发现在pointer
上是有效的,但是在dynamic
上没有效果,想问一下为什么。
关于pointer
节点的测试代码如下:(有一个2行2列的数据,我想删除第2行,输出第一行结果正确)
import taichi as ti
ti.init(arch=ti.cpu,cpu_max_num_threads = 1)
@ti.data_oriented
class test:
def __init__(self) -> None:
self.tB = ti.Vector.field(2,dtype=ti.f32)
self.IndexB = ti.Vector.field(2,dtype=ti.i8)
self.plumelistB = ti.root.pointer(ti.i,2)
self.plumelistB.place(self.tB,self.IndexB)
self.tB[0] = [1,2]
self.IndexB[0] = [3,4]
self.tB[1] = [101,201]
self.IndexB[1] = [301,401]
def Functest(self):
#self.clear()
print('Active, N0 = ',self.tB[0])
self.clear()
print('Deactivate Node 1,N[0]=',self.tB[0])
@ti.kernel
def clear(self):
ti.deactivate(self.plumelistB,1)
if __name__ == '__main__':
test().Functest()
输出结果:
[Taichi] Starting on arch=x64
Active, N0 = [1. 2.]
Deactivate Node 1,N[0]= [1. 2.]
但是当我把pointer
换成dynamic
后,结果就不正确了,self.plumelistB= ti.root.pointer(ti.i,2)
改为self.plumelistB= ti.root.dynamic(ti.i,2)
,结果如下:
[Taichi] Starting on arch=x64
Active, N0 = [1. 2.]
Deactivate Node 1,N[0]= [0. 0.]
这时候ti.deactivate
函数好像把整个2*2的数据都变成0了,使用ti.deactivate
函数,在抑制某一行的数据时候,该注意什么,怎么实现呢?