kernel函数传参类型导致变慢


使用第一种方法传参,kernel函数parallel_transport_frame运行巨慢,换用第二种方式运行速度正常,这是什么原因?

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是数据类型

可以了,非常感谢 :+1: 顺便问一句,ti.template()的数据是根据指针是否变化来判断是否重新编译的么

1 个赞

可以这样认为的