外部变量的原子操作

想问个简单的小问题,假如在循环之外有一个外部变量,随着循环会不断变化,发现在arch=gpu情况下只有开串行才是正确的,但是如果想要并行处理的话该如何来做呢:

import taichi as ti

ti.init(arch=ti.gpu)
# ti.init(arch=ti.cpu)

testfield = ti.field(ti.i32, 100)

@ti.kernel
def testlock():
    testnum = 0
    # ti.loop_config(serialize=True)
    for i in range(10):
        testfield[testnum] = 10
        testnum += 1

testlock()
print(testfield)

此外,发现如果是arch=cpu结果也会是正确的,所以感觉有些困惑

for i in range(10):
        oldtestnum = testnum.atomic_add(1)
        testfield[oldtestnum] = 10
1 Like