11#include "vecmem/utils/types.hpp"
17#if (defined(CL_SYCL_LANGUAGE_VERSION) || defined(SYCL_LANGUAGE_VERSION)) && \
18 defined(VECMEM_HAVE_SYCL_ATOMIC_REF)
30 [deprecated(
"vecmem::atomic is deprecated, use vecmem::device_atomic_ref "
32 :
public ::sycl::atomic_ref<T, ::sycl::memory_order::relaxed,
33 ::sycl::memory_scope::device,
34 ::sycl::access::address_space::global_space> {
43 using difference_type = value_type;
45 using pointer = std::add_pointer_t<value_type>;
47 using volatile_pointer =
48 std::add_pointer_t<std::add_volatile_t<value_type>>;
50 using reference = std::add_lvalue_reference_t<value_type>;
55 VECMEM_HOST_AND_DEVICE
58 ::sycl::memory_scope::device,
59 ::sycl::access::address_space::global_space>(
82 [deprecated(
"vecmem::atomic is deprecated, use vecmem::device_atomic_ref "
92 using difference_type = value_type;
94 using pointer = std::add_pointer_t<value_type>;
96 using volatile_pointer =
97 std::add_pointer_t<std::add_volatile_t<value_type>>;
99 using reference = std::add_lvalue_reference_t<value_type>;
106 static_assert(std::is_integral<value_type>::value,
107 "vecmem::atomic only accepts built-in integral types");
112 VECMEM_HOST_AND_DEVICE
119 VECMEM_HOST_AND_DEVICE
120 void store(value_type data);
122 VECMEM_HOST_AND_DEVICE
123 value_type load()
const;
126 VECMEM_HOST_AND_DEVICE
127 value_type exchange(value_type data);
130 VECMEM_HOST_AND_DEVICE
131 bool compare_exchange_strong(reference expected, value_type desired);
139 VECMEM_HOST_AND_DEVICE
140 value_type fetch_add(value_type data);
142 VECMEM_HOST_AND_DEVICE
143 value_type fetch_sub(value_type data);
146 VECMEM_HOST_AND_DEVICE
147 value_type fetch_and(value_type data);
149 VECMEM_HOST_AND_DEVICE
150 value_type fetch_or(value_type data);
152 VECMEM_HOST_AND_DEVICE
153 value_type fetch_xor(value_type data);
166#include "vecmem/memory/impl/atomic.ipp"
Main namespace for the vecmem classes/functions.
Definition atomic_ref.hpp:16
memory_order
Custom (dummy) definition for the memory order.
Definition memory_order.hpp:31