SNode编译顺序问题

Dear Taichier

我想要使用SNode定义一个暂时不知道大小的全局field,在后面指定具体维度。但是发现中间不能预先调用taichi相关计算,请问这种情况怎么做比较好呢?

import taichi as ti

ti.init()
test = ti.field(ti.i32)

@ti.kernel
def add(a:ti.i32, b:ti.i32) -> ti.i32:
    return a+b

def testsnode():
    testdim = 10
    # testdim = add(5, 5)
    ti.root.dense(ti.i, testdim).place(test)

testsnode()

taichi 要求每次跑 kernel 前不能有还没被 place 的 field,但你不需要把 field 定义在最前面,而是可以在 place 之前定义:

import taichi as ti

ti.init()

@ti.kernel
def add(a:ti.i32, b:ti.i32) -> ti.i32:
    return a+b

def testsnode():
    testdim = add(5, 5)
    test = ti.field(ti.i32)
    ti.root.dense(ti.i, testdim).place(test)

testsnode()
1 个赞