10 #ifndef RAJA_policy_atomic_desul_HPP
11 #define RAJA_policy_atomic_desul_HPP
13 #include "RAJA/config.hpp"
15 #if defined(RAJA_ENABLE_DESUL_ATOMICS)
21 #include "desul/atomics.hpp"
24 using raja_default_desul_order = desul::MemoryOrderRelaxed;
25 using raja_default_desul_scope = desul::MemoryScopeDevice;
31 template<
typename AtomicPolicy,
typename T>
34 return desul::atomic_load(acc, raja_default_desul_order {},
35 raja_default_desul_scope {});
39 template<
typename AtomicPolicy,
typename T>
42 desul::atomic_store(acc, value, raja_default_desul_order {},
43 raja_default_desul_scope {});
47 template<
typename AtomicPolicy,
typename T>
50 return desul::atomic_fetch_add(acc, value, raja_default_desul_order {},
51 raja_default_desul_scope {});
55 template<
typename AtomicPolicy,
typename T>
58 return desul::atomic_fetch_sub(acc, value, raja_default_desul_order {},
59 raja_default_desul_scope {});
63 template<
typename AtomicPolicy,
typename T>
66 return desul::atomic_fetch_min(acc, value, raja_default_desul_order {},
67 raja_default_desul_scope {});
71 template<
typename AtomicPolicy,
typename T>
74 return desul::atomic_fetch_max(acc, value, raja_default_desul_order {},
75 raja_default_desul_scope {});
79 template<
typename AtomicPolicy,
typename T>
82 return desul::atomic_fetch_inc(acc, raja_default_desul_order {},
83 raja_default_desul_scope {});
87 template<
typename AtomicPolicy,
typename T>
92 return desul::atomic_fetch_inc_mod(acc, val, raja_default_desul_order {},
93 raja_default_desul_scope {});
97 template<
typename AtomicPolicy,
typename T>
100 return desul::atomic_fetch_dec(acc, raja_default_desul_order {},
101 raja_default_desul_scope {});
105 template<
typename AtomicPolicy,
typename T>
110 return desul::atomic_fetch_dec_mod(acc, val, raja_default_desul_order {},
111 raja_default_desul_scope {});
115 template<
typename AtomicPolicy,
typename T>
118 return desul::atomic_fetch_and(acc, value, raja_default_desul_order {},
119 raja_default_desul_scope {});
123 template<
typename AtomicPolicy,
typename T>
126 return desul::atomic_fetch_or(acc, value, raja_default_desul_order {},
127 raja_default_desul_scope {});
131 template<
typename AtomicPolicy,
typename T>
134 return desul::atomic_fetch_xor(acc, value, raja_default_desul_order {},
135 raja_default_desul_scope {});
139 template<
typename AtomicPolicy,
typename T>
142 return desul::atomic_exchange(acc, value, raja_default_desul_order {},
143 raja_default_desul_scope {});
147 template<
typename AtomicPolicy,
typename T>
149 atomicCAS(AtomicPolicy, T* acc, T compare, T value)
151 return desul::atomic_compare_exchange(acc, compare, value,
152 raja_default_desul_order {},
153 raja_default_desul_scope {});
RAJA header file defining automatic and builtin atomic operations.
Header file for common RAJA internal macro definitions.
#define RAJA_HOST_DEVICE
Definition: macros.hpp:65
#define RAJA_SUPPRESS_HD_WARN
Definition: macros.hpp:68
Definition: AlignedRangeIndexSetBuilders.cpp:35
RAJA_SUPPRESS_HD_WARN RAJA_INLINE RAJA_HOST_DEVICE T atomicAnd(T *acc, T value)
Atomic bitwise AND equivalent to (*acc) = (*acc) & value This only works with integral data types.
Definition: atomic.hpp:224
RAJA_SUPPRESS_HD_WARN RAJA_INLINE RAJA_HOST_DEVICE T atomicOr(T *acc, T value)
Atomic bitwise OR equivalent to (*acc) = (*acc) | value This only works with integral data types.
Definition: atomic.hpp:240
RAJA_SUPPRESS_HD_WARN RAJA_INLINE RAJA_HOST_DEVICE T atomicLoad(T *acc)
Atomic load.
Definition: atomic.hpp:92
RAJA_SUPPRESS_HD_WARN RAJA_INLINE RAJA_HOST_DEVICE T atomicDec(T *acc)
Atomic decrement.
Definition: atomic.hpp:195
RAJA_SUPPRESS_HD_WARN RAJA_INLINE RAJA_HOST_DEVICE T atomicAdd(T *acc, T value)
Atomic add.
Definition: atomic.hpp:117
RAJA_SUPPRESS_HD_WARN RAJA_INLINE RAJA_HOST_DEVICE T atomicXor(T *acc, T value)
Atomic bitwise XOR equivalent to (*acc) = (*acc) ^ value This only works with integral data types.
Definition: atomic.hpp:256
RAJA_SUPPRESS_HD_WARN RAJA_INLINE RAJA_HOST_DEVICE void atomicStore(T *acc, T value)
Atomic store.
Definition: atomic.hpp:104
RAJA_SUPPRESS_HD_WARN RAJA_INLINE RAJA_HOST_DEVICE T atomicMax(T *acc, T value)
Atomic maximum equivalent to (*acc) = std::max(*acc, value)
Definition: atomic.hpp:156
RAJA_SUPPRESS_HD_WARN RAJA_INLINE RAJA_HOST_DEVICE T atomicCAS(T *acc, T compare, T value)
Atomic compare and swap.
Definition: atomic.hpp:286
RAJA_SUPPRESS_HD_WARN RAJA_INLINE RAJA_HOST_DEVICE T atomicInc(T *acc)
Atomic increment.
Definition: atomic.hpp:168
RAJA_SUPPRESS_HD_WARN RAJA_INLINE RAJA_HOST_DEVICE T atomicMin(T *acc, T value)
Atomic minimum equivalent to (*acc) = std::min(*acc, value)
Definition: atomic.hpp:143
RAJA_SUPPRESS_HD_WARN RAJA_INLINE RAJA_HOST_DEVICE T atomicSub(T *acc, T value)
Atomic subtract.
Definition: atomic.hpp:130
RAJA_SUPPRESS_HD_WARN RAJA_INLINE RAJA_HOST_DEVICE T atomicExchange(T *acc, T value)
Atomic value exchange.
Definition: atomic.hpp:271