有没有太极官方的大佬解释下。为啥atomic_add这个函数设计得这么奇怪?atomic_add(x,y)把x+y的结果存放在x里,然后返回x的原值。
一个实际的应用就是在一个并行的kernel里面存储某些数据到一个数组中,这种atomic add操作可以解决下标冲突问题
import taichi as ti
idx = ti.field(ti.i32,())
idx[None] = 0
x = ti.Vector([0,1,0,1,0,1,0,1,0,1])
y = ti.field(ti.i32, 10)
@ti.kernel
def foo():
for i in range(10):
if x[i] > 0:
idx_tmp = ti.atomic_add(idx[None], 1)
y[idx_tmp] = x[i]