关于复制与“引用” 以及 JIT编译的问题

我关于Taichi(python)的运行性能以及编译速度各有一个问题想要请教各位大佬,希望可以得到解答:
(1)关于运行性能:假设我有一个【只读的】Taichi struct 类型,内部定义了一些方法,在每次迭代时将会调用这些方法(这些方法将会访问成员变量数据,但不会修改成员变量)。这个 struct 类型 构成了一个field,每次迭代我将可能使用不同的index访问不同的struct并调用对应方法。那么,由于 struct 在一次迭代内需要【多次使用】,我应该 :

  1. 在每次迭代开始时用 index 将其复制到一个局部变量中?(我的顾虑是 复制开销未知,依struct内容而定)
  2. 还是每次使用时都使用 index 重新访问?(如果arch = GPU,field如果是存在global memory上的,频繁indexing是否会使得速度受限于global memory的访问速度?)
    据我所知,Taichi没有类似引用的结构。所以我应该用什么方法进行这样的操作呢?

(2)JIT编译问题:我不是很了解Taichi背后的JIT编译过程,不过从目前我运行我自己的代码过程来看,我对代码进行很小的改动都可能导致所有代码都需要重新编译?这导致每次运行时的第一次kernel call都非常慢。假设我有N个文件,N个文件都被import到某个main.py中并且N个文件之间没有import关系,那么我修改其中一个文件是否会导致需要全部重新编译?C++貌似可以只重新编译与改动相关的文件。

  1. 既然不会修改,如果在一个线程内是同一个 struct 使用多次、struct 又比较小的话,复制到局部变量是比较好的选择
  2. Taichi 现在有 offline cache,即如果你的一个 kernel 没有变化,下一次跑的时候这个 kernel 是不需要再次编译的