为什么要`ti.static`一个python作用域的变量呢?

既然python作用域的变量是直接被转换成值的,那这个例子即使不使用ti.static是不是也可以被编译器直接优化呢?

多谢

Hi @Roden, 非常欢迎来到Taichi论坛。

PPT中这一页代码,是不是被优化可以print IR来看一下。

import taichi as ti

ti.init(print_ir=True)

enable_projection = True

x = ti.field(ti.f32, shape=10)

@ti.kernel
def test_static():
    if enable_projection:
        x[0] = 1

test_static()

通过上面的代码可以看到,并没有被编译器优化。

如果是PPT中的代码,可以看到kernel里面语句是空的,也就是什么都不干。

感谢!

从设计理念来说的话,感觉完全可以去掉这个修饰,然后交给编译器优化?

@Roden 感谢你的反馈!我也赞同你的看法,这个标记的确是冗余的。不过我猜测这里这样设计是希望显式地让用户清楚这个 if 语句会直接被编译期展开,要不要直接去掉可以再讨论下。不知道你有没有兴趣在 taichi 的 GitHub repo 上提一个 issue 呢?

1 个赞