使用Taichi中的ti.field相比较NumPy Array或者PyTorch Tensor会有性能上的提高吗?

我的项目一开始使用的输入是PyTorch Tensor,我不知道是继续使用Tensor存储张量信息还是将其转为ti.field,此外项目中会在执行过程中动态开辟许多内存,如果我使用ti.field在程序一开始就预先开辟好空间,是否获得一定程度的编译优化呢?

如果使用NumPy Array或者PyTorch Tensor不会带来很严重的性能下降的话,我还是希望使用前面二者,毕竟操作起来更方便,因此想请教一下,十分感谢!

Hi zjnyly,
一般来说Taichi Kernel里即使传入NumPy Array或者PyTorch Tensor,也会被编译器默认转为Taichi NdArray 或者 Field,所以对于在Taichi Kernel里使用第三方数据结构的情况,都需要或显示或隐式地进行一步转化。

但是你可以控制是传reference还是传拷贝,前者会把numpy array/torch tensor的内存指针直接拿来用,不会额外拷贝内存,后者则是做一次深拷贝。

动态开辟内存这个问题,一般来说预先静态分配内存是可以得到一定的性能提升的,但是具体所知包括Taichi, Torch在内的大部分框架底层都有Memory Pool/Allocator机制,所以动态分配、回收内存的性能是有一定优化的,所以这种内存换性能的具体收益你需要实际profile一下。

如果你用了Sparse Field(Spatially Sparse Data Structures | Taichi Docs),相应的动态内存分配/回收是避免不了的

十分感谢您的帮助!