在循环中索引动态数组只能通过循环变量i索引,而无法通过自定义的索引变量int索引。
在foo1中,用循环变量i索引给动态数组c1赋值可以得到正确的结果。
在foo2中,索引是通过定义的整型变量int来赋值的,但只会用int的初始值去索引,比如foo2中int初始值是0,即使后续通过int+=1修改int的值,用int索引c2,以及给c2赋值时,int仍然是0,即c2[int]=int等价于c2[0]=0,打印出来c2的长度也只有1。请问这个问题是否正常?
taichi version:1.4.1.代码块如下:
import taichi as ti
ti.init(arch=ti.gpu)
c1 = ti.field(ti.f32)
a1 = ti.root.dynamic(ti.i, 10, chunk_size=10)
a1.place(c1)
c2 = ti.field(ti.f32)
a2 = ti.root.dynamic(ti.i, 10, chunk_size=10)
a2.place(c2)
@ti.kernel
def foo1():
c1.deactivate()
for i in range(5):
c1[i] = i
print(c1[i]) # print: 1,2,3,4,5
print(c1.length()) # print: 5
@ti.kernel
def foo2():
int = ti.cast(0, ti.i32)
c2.deactivate()
for i in range(5):
c2[int] = int + 1
int += 1
print(c2[int],int)# print: (0.0,1), (0.0,2), (0.0,3), (0.0,4), (0.0,5),
print(c2.length()) # print: 1
foo1()
foo2()
print(c2) # print: [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.]