OpenCL-原子_cmpxchg

OpenCL-原子_cmpxchg,opencl,atomic,Opencl,Atomic,这个函数做什么??。我无法理解OpenCL规范中的任何内容!! 下面的代码是spMV代码的一个片段 atomic_cmpxchg((__global int*)loc, *((int*)&old), *((int*)&sum)) != *((int*)&old) atomic_cmpxchg是“原子比较和交换”。它实现了标准C99三元操作的原子版本。对于上述代码,它意味着以下原子等价物: p = *loc; *loc = (p == *old) ? (*sum != *

这个函数做什么??。我无法理解OpenCL规范中的任何内容!! 下面的代码是spMV代码的一个片段

atomic_cmpxchg((__global int*)loc, *((int*)&old), *((int*)&sum)) != *((int*)&old)

atomic_cmpxchg
是“原子比较和交换”。它实现了标准C99三元操作的原子版本。对于上述代码,它意味着以下原子等价物:

p = *loc;
*loc = (p == *old) ? (*sum != *old) : p;

使用
atomic_cmpxchg
调用返回
p
。操作是原子的,这意味着在事务完成之前,没有其他线程可以从
loc
读取或写入。

原子的\u cmpxchg
是“原子比较和交换”。它实现了标准C99三元操作的原子版本。对于上述代码,它意味着以下原子等价物:

p = *loc;
*loc = (p == *old) ? (*sum != *old) : p;
使用
atomic_cmpxchg
调用返回
p
。操作是原子的,这意味着在事务完成之前,没有其他线程可以从
loc
读取或写入