SetAtomicAdd原子累加问题求助
收藏回复举报
SetAtomicAdd原子累加问题求助
t('forum.solved') 已解决
发表于2025-04-15 12:06:54
0 查看

SetAtomicAdd原子累加问题求助

我想知道SetAtomicAdd会保证不同核之间也是原子的操作吗?

如果说我每个核心原子累加一个数

core0 [2, 0, 0, 0, 0, 0, 0, 0]

core1 [0, 3, 0, 0, 0, 0, 0, 0]

core2 [0, 0, 1, 0, 0, 0, 0, 0]

core3 [0, 0, 0, 1, 0, 0, 0, 0]

core4 [0, 0, 0, 0, 1, 0, 0, 0]

core5 [0, 0, 0, 0, 0, 1, 0, 0]

core6 [0, 0, 0, 0, 0, 0, 3, 0]

core7 [0, 0, 0, 0, 0, 0, 0, 1]

最后我希望得到的结果是

[2 3 1 1 1 1 3 1]

但实际上的结果是(随机一个出现有值)

[0, 0, 0, 0, 0, 1, 0, 0]

LocalTensor<float> tmpAtomicAdd = tmpAtomicAddBuf.AllocTensor<float>();
            LocalTensor<int32_t> tmpAtomicAddInt = tmpAtomicAdd.ReinterpretCast<int32_t>();
            Duplicate(tmpAtomicAddInt, 0, ALIGN_4B_32B);
            tmpAtomicAddInt.SetValue(GetBlockIdx(), expertCount.GetValue(0));

            DumpTensor(tmpAtomicAddInt, 112, 8);
            Duplicate(tmpAtomicAddInt, 1, 8);
            PipeBarrier<PIPE_ALL>();
            SetAtomicAdd<int32_t>();
            DataCopy(expertCountGm, tmpAtomicAddInt, ALIGN_4B_32B);
            SetAtomicNone();
            PipeBarrier<PIPE_ALL>();
            tmpAtomicAddBuf.FreeTensor(tmpAtomicAdd);

我要发帖子