Metal计算内核中的以下代码段表明atomic_fetch_add_explicit在线程组内存中没有原子的read-modify-write。

我期望i的值在线程组中不是唯一的。

我使用错了吗?

threadgroup atomic_int index;
atomic_store_explicit( &index, 0, memory_order_relaxed );
threadgroup_barrier( mem_flags::mem_none );
int i = atomic_fetch_add_explicit( &index, 1, memory_order_relaxed );

最佳答案

这确实是正确的,并且可以按预期方式自动运行。
错误是在我的代码中验证了i的唯一性。

08-18 09:29