1 个赞
Hi @slwstc , 欢迎来到Taichi社区。
这里猜测是kernel的参数annotation用的是ti.template
,因此触发了重新编译。self.e[0]
里估计是一个ti.f32
类型,这个self.e[0]
每变化一次,就会重新编译一次这个kernel,可以把annotation改成ti.f32
就不会重新编译了。
右边那个快的原因是self.e
里面值变了但指针不会变,所以不会触发重新编译。
之前确实设置的是ti.template(),self.e[0]是一个ti.Vector,所以annotation应该是什么比较合适呢,设置成ti.Vector就报错 :taichi.lang.exception.TaichiSyntaxError: Invalid type annotation (argument 1) of Taichi kernel: <class ‘taichi.lang.matrix.Vector’> 和document里面写的不太一致
可以试一下ti.types.vector(n, dtype)
, n是vector的长度,dtype是数据类型
可以了,非常感谢 顺便问一句,ti.template()的数据是根据指针是否变化来判断是否重新编译的么
1 个赞
可以这样认为的