What does this function do??. I couldn't understand a thing from the OpenCL specification!! The code below is a snippet from spMV code.
atomic_cmpxchg((__globa开发者_JAVA技巧l int*)loc, *((int*)&old), *((int*)&sum)) != *((int*)&old)
atomic_cmpxchg
is "atomic compare and exchange". It implements an atomic version of the standard C99 ternary operation. For the code above it implies the atomic equivalent of the following:
p = *loc;
*loc = (p == *old) ? (*sum != *old) : p;
with the atomic_cmpxchg
call returning p
. The operation is atomic, this means that no other thread can read or write from loc
until the transaction is completed.
精彩评论