16template <
typename T, device_address_space address>
21template <
typename T, device_address_space address>
24 : m_ptr(parent.m_ptr) {}
26template <
typename T, device_address_space address>
39#ifndef __VECMEM_THREADFENCE_GLOBAL
41#define __VECMEM_THREADFENCE_GLOBAL() __threadfence()
43#define __VECMEM_THREADFENCE_GLOBAL()
46#ifndef __VECMEM_THREADFENCE_LOCAL
48#define __VECMEM_THREADFENCE_LOCAL() __threadfence_block()
50#define __VECMEM_THREADFENCE_LOCAL()
55template <device_address_space address>
60 VECMEM_HOST_AND_DEVICE
void operator()()
const {
61 __VECMEM_THREADFENCE_GLOBAL();
67 VECMEM_HOST_AND_DEVICE
void operator()()
const {
68 __VECMEM_THREADFENCE_LOCAL();
73template <
typename T, device_address_space address>
82template <
typename T, device_address_space address>
93#undef __VECMEM_THREADFENCE_GLOBAL
94#undef __VECMEM_THREADFENCE_LOCAL
96template <
typename T, device_address_space address>
103template <
typename T, device_address_space address>
104VECMEM_HOST_AND_DEVICE
bool
108 if (
order == memory_order::acq_rel) {
110 memory_order::acquire);
111 }
else if (
order == memory_order::release) {
113 memory_order::relaxed);
119template <
typename T, device_address_space address>
120VECMEM_HOST_AND_DEVICE
bool
127 failure != memory_order::acq_rel);
140template <
typename T, device_address_space address>
147template <
typename T, device_address_space address>
154template <
typename T, device_address_space address>
161template <
typename T, device_address_space address>
168template <
typename T, device_address_space address>
175template <
typename T, device_address_space address>
182template <
typename T, device_address_space address>
An allocator class that wraps a memory resource.
Definition allocator.hpp:37
Custom implementation for atomic operations in CUDA device code.
Definition cuda_device_atomic_ref.hpp:34
T value_type
Type managed by the object.
Definition cuda_device_atomic_ref.hpp:41
std::add_lvalue_reference_t< value_type > reference
Reference to a value given by the user.
Definition cuda_device_atomic_ref.hpp:50
std::add_pointer_t< std::add_volatile_t< value_type > > volatile_pointer
Volatile pointer to the value in global/local memory.
Definition cuda_device_atomic_ref.hpp:48
Main namespace for the vecmem classes/functions.
Definition atomic_ref.hpp:16
device_address_space
Custom definition for the device memory adress space.
Definition device_address_space.hpp:12
memory_order
Custom (dummy) definition for the memory order.
Definition memory_order.hpp:31
Definition cuda_device_atomic_ref.ipp:56