alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
atomic.hpp
Go to the documentation of this file.
1/* Copyright 2025 René Widera
2 * SPDX-License-Identifier: MPL-2.0
3 */
4
5#pragma once
6
9
10namespace alpaka::onAcc::internal
11{
12 struct NonAtomic
13 {
14 };
15
16 /** Execute the operation as non-atomic operation */
17 constexpr auto nonAtomic = NonAtomic{};
18
19} // namespace alpaka::onAcc::internal
20
21namespace alpaka::onAcc::internalCompute
22{
23 template<typename T, typename T_AtomicOp, typename T_Scope>
24 struct Atomic::Op<T_AtomicOp, onAcc::internal::NonAtomic, T, T_Scope>
25 {
26 static auto atomicOp(onAcc::internal::NonAtomic const&, T* const addr, T const& value) -> T
27 {
28 return T_AtomicOp{}(addr, value);
29 }
30 };
31
32 template<typename T, typename T_Scope>
33 struct Atomic::Op<operation::Cas, internal::NonAtomic, T, T_Scope>
34 {
35 static auto atomicOp(internal::NonAtomic const&, T* const addr, T const& compare, T const& value) -> T
36 {
37 return operation::Cas{}(addr, compare, value);
38 }
39 };
40} // namespace alpaka::onAcc::internalCompute
constexpr auto atomicOp(auto const &acc, T *const addr, T const &value, T_Scope const scope=T_Scope()) -> T
Executes the given operation atomically.
Definition atomic.hpp:26