有大佬解释下atomic_add这么设计的原因吗?

有没有太极官方的大佬解释下。为啥atomic_add这个函数设计得这么奇怪?atomic_add(x,y)把x+y的结果存放在x里,然后返回x的原值。

我看Cuda API也是这么设计的:CUDA Math API :: CUDA Toolkit Documentation

1 个赞

一个实际的应用就是在一个并行的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]