alpaka
Abstraction Library for Parallel Kernel Acceleration
Loading...
Searching...
No Matches
MemoryOrderCuda.hpp
Go to the documentation of this file.
1/* Copyright 2025 Tapish Narwal
2 * SPDX-License-Identifier: MPL-2.0
3 */
4
5#pragma once
6
8#include "alpaka/core/PP.hpp"
10
11#include <concepts>
12
13#ifdef ALPAKA_ACC_GPU_CUDA_ENABLED
14namespace alpaka
15{
17 {
18 template<MemoryOrder TMemOrder>
19 static constexpr auto get(TMemOrder)
20 {
21# ifdef ALPAKA_CUDA_ATOMIC
22 if constexpr(std::same_as<TMemOrder, mem_order::SeqCst>)
23 {
24 return ::cuda::memory_order_seq_cst;
25 }
26 if constexpr(std::same_as<TMemOrder, mem_order::AcqRel>)
27 {
28 return ::cuda::memory_order_acq_rel;
29 }
30 if constexpr(std::same_as<TMemOrder, mem_order::Release>)
31 {
32 return ::cuda::memory_order_release;
33 }
34 if constexpr(std::same_as<TMemOrder, mem_order::Acquire>)
35 {
36 return ::cuda::memory_order_acquire;
37 }
38 if constexpr(std::same_as<TMemOrder, mem_order::Relaxed>)
39 {
40 return ::cuda::memory_order_relaxed;
41 }
42# else
43# if ALPAKA_LANG_CUDA >= ALPAKA_VERSION_NUMBER(12, 8, 0) && ALPAKA_ARCH_PTX
44
45 if constexpr(std::same_as<TMemOrder, mem_order::SeqCst>)
46 {
47 return __NV_ATOMIC_SEQ_CST;
48 }
49 if constexpr(std::same_as<TMemOrder, mem_order::AcqRel>)
50 {
51 return __NV_ATOMIC_ACQ_REL;
52 }
53 if constexpr(std::same_as<TMemOrder, mem_order::Release>)
54 {
55 return __NV_ATOMIC_RELEASE;
56 }
57 if constexpr(std::same_as<TMemOrder, mem_order::Acquire>)
58 {
59 return __NV_ATOMIC_ACQUIRE;
60 }
61 if constexpr(std::same_as<TMemOrder, mem_order::Relaxed>)
62 {
63 return __NV_ATOMIC_RELAXED;
64 }
65# endif
66# endif
67 }
68 };
69
70} // namespace alpaka
71
72#endif
The alpaka accelerator library.
static constexpr auto get(TMemOrder)