我的运行环境是taichi version 1.6.0, llvm 15.0.1, Windows 10, python 3.10.11。
在运行以上代码时,我发现如果使用ti.init(arch=ti.gpu),则程序在运行一小段时间后画布上会出现灰点。使用ti.init(arch=ti.cpu)时则好像不会发生。
我把这个转动taichi_logo的程序稍微简化了一下:
from taichi.examples.patterns import taichi_logo
import taichi as ti
ti.init(arch=ti.gpu)
n = 512
x = ti.field(dtype=ti.i32)
block1 = ti.root.pointer(ti.ij, 8)
block2 = block1.pointer(ti.ij, 4)
block3 = block2.pointer(ti.ij, 4)
block3.dense(ti.ij, 4).place(x)
@ti.kernel
def activate(t: ti.f32):
for i, j in ti.ndrange(n, n):
p = ti.Vector([i, j]) / n
p = ti.math.rotation2d(ti.sin(t)) @ (p - 0.5) + 0.5
if taichi_logo(p) == 0:
x[i, j] = 1
@ti.kernel
def fun():
for i in range(512):
for j in range(512):
if x[i,j] != 0:
print(x[i,j])
def main():
for i in range(100000):
block1.deactivate_all()
fun()
activate(i * 0.05)
if __name__ == "__main__":
main()
我发现在以上代码运行一段时间后,程序会输出 1。
我理解的是 block1.deactivate_all() 后print出来的x[i, j]应始终为0。
如果把以上代码修改为ti.init(arch=ti.cpu)则x[i, j]好像始终为0。
目前我发现ti.is_active以及ti.deactivate也会出现类似问题。
请问这是为什么呢?感谢解惑