18#ifdef ALPAKA_DISABLE_STD_ATOMIC_REF
19# include <boost/atomic.hpp>
26#if defined(ALPAKA_DISABLE_STD_ATOMIC_REF)
51 "Type not supported by AtomicAtomicRef, please recompile defining "
52 "ALPAKA_DISABLE_ATOMIC_ATOMICREF.");
58 template<
typename T,
typename T_Scope>
70 template<
typename T,
typename T_Scope>
82 template<
typename T,
typename T_Scope>
91 result = std::min(result, value);
95 result = std::min(result, value);
102 template<
typename T,
typename T_Scope>
111 result = std::max(result, value);
115 result = std::max(result, value);
122 template<
typename T,
typename T_Scope>
140 template<
typename T,
typename T_Scope>
151 result = ((old >= value) ? T{0} : old + T{1});
158 template<
typename T,
typename T_Scope>
169 result = (old == T{0} || old > value) ? value : (old - T{1});
176 template<
typename T,
typename T_Scope>
188 template<
typename T,
typename T_Scope>
200 template<
typename T,
typename T_Scope>
212 template<
typename T,
typename T_Scope>
227#if ALPAKA_COMP_GNUC || ALPAKA_COMP_CLANG
228# pragma GCC diagnostic push
229# pragma GCC diagnostic ignored "-Wfloat-equal"
231 result = ((old == compare) ? value : old);
232#if ALPAKA_COMP_GNUC || ALPAKA_COMP_CLANG
233# pragma GCC diagnostic pop
The atomic ops based on atomic_ref for CPU accelerators.
#define ALPAKA_FN_HOST
All functions that can be used on an accelerator have to be attributed with ALPAKA_FN_ACC or ALPAKA_F...
std::atomic_ref< T > atomic_ref
constexpr auto memory_order_relaxed
functionality which is usable on the accelerator compute device from within a kernel.
void isSupportedByAtomicAtomicRef()
Contains functors with operation following the atomic operation semantics.
static ALPAKA_FN_HOST auto atomicOp(internal::StlAtomic const &, T *const addr, T const &value) -> T
static ALPAKA_FN_HOST auto atomicOp(internal::StlAtomic const &, T *const addr, T const &compare, T const &value) -> T
static ALPAKA_FN_HOST auto atomicOp(internal::StlAtomic const &, T *const addr, T const &value) -> T
static ALPAKA_FN_HOST auto atomicOp(internal::StlAtomic const &, T *const addr, T const &value) -> T
static ALPAKA_FN_HOST auto atomicOp(internal::StlAtomic const &, T *const addr, T const &value) -> T
static ALPAKA_FN_HOST auto atomicOp(internal::StlAtomic const &, T *const addr, T const &value) -> T
static ALPAKA_FN_HOST auto atomicOp(internal::StlAtomic const &, T *const addr, T const &value) -> T
static ALPAKA_FN_HOST auto atomicOp(internal::StlAtomic const &, T *const addr, T const &value) -> T
static ALPAKA_FN_HOST auto atomicOp(internal::StlAtomic const &, T *const addr, T const &value) -> T
static ALPAKA_FN_HOST auto atomicOp(internal::StlAtomic const &, T *const addr, T const &value) -> T
static ALPAKA_FN_HOST auto atomicOp(internal::StlAtomic const &, T *const addr, T const &value) -> T
Implements a atomic operation.
The compare and swap function object.
The decrement function object.
The exchange function object.
The increment function object.
The maximum function object.
The minimum function object.
The subtraction function object.
The exclusive or function object.