Atomic types (deprecated)#

cl::sycl::atomic#

/* Deprecated in SYCL 2020 */
template <typename T, access::address_space AddressSpace =
                          access::address_space::global_space>
class atomic;

The atomic types and operations on atomic types provided by SYCL 1.2.1 are deprecated in SYCL 2020, and will be removed in a future version of SYCL. The types and operations are made available in the cl::sycl:: namespace for backwards compatibility.

See also

SYCL Specification Section 4.15.4

(constructor)#

template <typename pointerT>
atomic(multi_ptr<pointerT, AddressSpace> ptr)

Deprecated in SYCL 2020.

Permitted data types for pointerT are any valid scalar data type which is the same size in bytes as T. Constructs an instance of SYCL atomic which is associated with the pointer ptr, converted to a pointer of data type T.

Member functions#

store#

void store(T operand, memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Atomically stores the value operand at the address of the multi_ptr associated with this SYCL atomic. The memory order of this atomic operation must be memory_order::relaxed. This function is only supported for 64-bit data types on devices that have aspect::atomic64.

load#

T load(memory_order memoryOrder = memory_order::relaxed) const

Deprecated in SYCL 2020.

Atomically loads the value at the address of the multi_ptr associated with this SYCL atomic. Returns the value at the address of the multi_ptr associated with this SYCL atomic before the call. The memory order of this atomic operation must be memory_order::relaxed. This function is only supported for 64-bit data types on devices that have aspect::atomic64.

exchange#

T exchange(T operand, memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Atomically replaces the value at the address of the multi_ptr associated with this SYCL atomic with value operand and returns the value at the address of the multi_ptr associated with this SYCL atomic before the call. The memory order of this atomic operation must be memory_order::relaxed. This function is only supported for 64-bit data types on devices that have aspect::atomic64.

compare_exchange_strong#

bool compare_exchange_strong(
  T& expected, T desired,
  memory_order successMemoryOrder = memory_order::relaxed,
  memory_order failMemoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Available only when: T != float.

Atomically compares the value at the address of the multi_ptr associated with this SYCL atomic against the value of expected. If the values are equal, replaces value at address of the multi_ptr associated with this SYCL atomic with the value of desired; otherwise assigns the original value at the address of the multi_ptr associated with this SYCL atomic to expected. Returns true if the comparison operation was successful. The memory order of this atomic operation must be memory_order::relaxed for both success and fail. This function is only supported for 64-bit data types on devices that have aspect::atomic64.

fetch_add#

T fetch_add(T operand, memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Available only when: T != float.

Atomically adds the value operand to the value at the address of the multi_ptr associated with this SYCL atomic and assigns the result to the value at the address of the multi_ptr associated with this SYCL atomic. Returns the value at the address of the multi_ptr associated with this SYCL atomic before the call. The memory order of this atomic operation must be memory_order::relaxed. This function is only supported for 64-bit data types on devices that have aspect::atomic64.

fetch_sub#

T fetch_sub(T operand, memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Available only when: T != float.

Atomically subtracts the value operand to the value at the address of the multi_ptr associated with this SYCL atomic and assigns the result to the value at the address of the multi_ptr associated with this SYCL atomic. Returns the value at the address of the multi_ptr associated with this SYCL atomic before the call. The memory order of this atomic operation must be memory_order::relaxed. This function is only supported for 64-bit data types on devices that have aspect::atomic64.

fetch_and#

T fetch_and(T operand, memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Available only when: T != float.

Atomically performs a bitwise AND between the value operand and the value at the address of the multi_ptr associated with this SYCL atomic and assigns the result to the value at the address of the multi_ptr associated with this SYCL atomic. Returns the value at the address of the multi_ptr associated with this SYCL atomic before the call. The memory order of this atomic operation must be memory_order::relaxed. This function is only supported for 64-bit data types on devices that have aspect::atomic64.

fetch_or#

T fetch_or(T operand, memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Available only when: T != float.

Atomically performs a bitwise OR between the value operand and the value at the address of the multi_ptr associated with this SYCL atomic and assigns the result to the value at the address of the multi_ptr associated with this SYCL atomic. Returns the value at the address of the multi_ptr associated with this SYCL atomic before the call. The memory order of this atomic operation must be memory_order::relaxed. This function is only supported for 64-bit data types on devices that have aspect::atomic64.

fetch_xor#

T fetch_xor(T operand, memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Available only when: T != float.

Atomically performs a bitwise XOR between the value operand and the value at the address of the multi_ptr associated with this SYCL atomic and assigns the result to the value at the address of the multi_ptr associated with this SYCL atomic. Returns the value at the address of the multi_ptr associated with this SYCL atomic before the call. The memory order of this atomic operation must be memory_order::relaxed. This function is only supported for 64-bit data types on devices that have aspect::atomic64.

fetch_min#

T fetch_min(T operand, memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Available only when: T != float.

Atomically computes the minimum of the value operand and the value at the address of the multi_ptr associated with this SYCL atomic and assigns the result to the value at the address of the multi_ptr associated with this SYCL atomic. Returns the value at the address of the multi_ptr associated with this SYCL atomic before the call. The memory order of this atomic operation must be memory_order::relaxed. This function is only supported for 64-bit data types on devices that have aspect::atomic64.

fetch_max#

T fetch_max(T operand, memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Available only when: T != float.

Atomically computes the maximum of the value operand and the value at the address of the multi_ptr associated with this SYCL atomic and assigns the result to the value at the address of the multi_ptr associated with this SYCL atomic. Returns the value at the address of the multi_ptr associated with this SYCL atomic before the call. The memory order of this atomic operation must be memory_order::relaxed. This function is only supported for 64-bit data types on devices that have aspect::atomic64.

Global functions#

atomic_load#

template <typename T, access::address_space AddressSpace>
T atomic_load(atomic<T, AddressSpace> object,
              memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Equivalent to calling object.load(memoryOrder).

atomic_store#

template <typename T, access::address_space AddressSpace>
void atomic_store(atomic<T, AddressSpace> object, T operand,
                  memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Equivalent to calling object.store(operand, memoryOrder).

atomic_exchange#

template <typename T, access::address_space AddressSpace>
T atomic_exchange(atomic<T, AddressSpace> object, T operand,
                  memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Equivalent to calling object.exchange(operand, memoryOrder).

atomic_compare_exchange_strong#

template <typename T, access::address_space AddressSpace>
bool atomic_compare_exchange_strong(
    atomic<T, AddressSpace> object, T& expected, T desired,
    memory_order successMemoryOrder = memory_order::relaxed memory_order
        failMemoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Equivalent to calling object.compare_exchange_strong(expected, desired, successMemoryOrder, failMemoryOrders).

atomic_fetch_add#

template <typename T, access::address_space AddressSpace>
T atomic_fetch_add(atomic<T, AddressSpace> object, T operand,
                   memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Equivalent to calling object.fetch_add(operand, memoryOrder).

atomic_fetch_sub#

template <typename T, access::address_space AddressSpace>
T atomic_fetch_sub(atomic<T, AddressSpace> object, T operand,
                   memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Equivalent to calling object.fetch_sub(operand, memoryOrder).

atomic_fetch_and#

template <typename T, access::address_space AddressSpace>
T atomic_fetch_and(atomic<T> operand, T object,
                   memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Equivalent to calling object.fetch_add(operand, memoryOrder).

atomic_fetch_or#

template <typename T, access::address_space AddressSpace>
T atomic_fetch_or(atomic<T, AddressSpace> object, T operand,
                  memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Equivalent to calling object.fetch_or(operand, memoryOrder).

atomic_fetch_xor#

template <typename T, access::address_space AddressSpace>
T atomic_fetch_xor(atomic<T, AddressSpace> object, T operand,
                   memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Equivalent to calling object.fetch_xor(operand, memoryOrder).

atomic_fetch_min#

template <typename T, access::address_space AddressSpace>
T atomic_fetch_min(atomic<T, AddressSpace> object, T operand,
                   memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Equivalent to calling object.fetch_min(operand, memoryOrder).

atomic_fetch_max#

template <typename T, access::address_space AddressSpace>
T atomic_fetch_max(atomic<T, AddressSpace> object, T operand,
                   memory_order memoryOrder = memory_order::relaxed);

Deprecated in SYCL 2020.

Equivalent to calling object.fetch_max(operand, memoryOrder).