OpenCL -atomic_cmpxchg

Jay*_*Jay 2 atomic opencl

这个功能有什么作用??我无法理解 OpenCL 规范中的任何内容!下面的代码是 spMV 代码的片段。

atomic_cmpxchg((__global int*)loc, *((int*)&old), *((int*)&sum)) != *((int*)&old)
Run Code Online (Sandbox Code Playgroud)

tal*_*ies 5

atomic_cmpxchg是“原子比较和交换”。它实现了标准 C99 三元运算的原子版本。对于上面的代码,它意味着以下的原子等效项:

p = *loc;
*loc = (p == *old) ? (*sum != *old) : p;
Run Code Online (Sandbox Code Playgroud)

随着atomic_cmpxchg电话的回拨ploc该操作是原子的,这意味着在事务完成之前没有其他线程可以读取或写入。