DPC++ Runtime
Runtime libraries for oneAPI DPC++
memory_enums.hpp
Go to the documentation of this file.
1 //==-------------- memory_enums.hpp --- SYCL enums -------------------------==//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #pragma once
10 
12 
13 namespace sycl {
15 
16 enum class memory_order : int {
17  relaxed = 0,
18  acquire = 1,
20  2, // helps optimizer when mapping to std::memory_order
21  release = 3,
22  acq_rel = 4,
23  seq_cst = 5
24 };
25 
26 enum class memory_scope : int {
27  work_item = 0,
28  sub_group = 1,
29  work_group = 2,
30  device = 3,
31  system = 4
32 };
33 
34 inline constexpr auto memory_scope_work_item = memory_scope::work_item;
35 inline constexpr auto memory_scope_sub_group = memory_scope::sub_group;
36 inline constexpr auto memory_scope_work_group = memory_scope::work_group;
37 inline constexpr auto memory_scope_device = memory_scope::device;
38 inline constexpr auto memory_scope_system = memory_scope::system;
39 
40 inline constexpr auto memory_order_relaxed = memory_order::relaxed;
41 inline constexpr auto memory_order_acquire = memory_order::acquire;
42 inline constexpr auto memory_order_release = memory_order::release;
43 inline constexpr auto memory_order_acq_rel = memory_order::acq_rel;
44 inline constexpr auto memory_order_seq_cst = memory_order::seq_cst;
45 
46 namespace detail {
47 
48 inline std::vector<memory_order>
50  std::vector<memory_order> result;
51  if (bits & PI_MEMORY_ORDER_RELAXED)
52  result.push_back(memory_order::relaxed);
53  if (bits & PI_MEMORY_ORDER_ACQUIRE)
54  result.push_back(memory_order::acquire);
55  if (bits & PI_MEMORY_ORDER_RELEASE)
56  result.push_back(memory_order::release);
57  if (bits & PI_MEMORY_ORDER_ACQ_REL)
58  result.push_back(memory_order::acq_rel);
59  if (bits & PI_MEMORY_ORDER_SEQ_CST)
60  result.push_back(memory_order::seq_cst);
61  return result;
62 }
63 
64 inline std::vector<memory_scope>
66  std::vector<memory_scope> result;
67  if (bits & PI_MEMORY_SCOPE_WORK_ITEM)
68  result.push_back(memory_scope::work_item);
69  if (bits & PI_MEMORY_SCOPE_SUB_GROUP)
70  result.push_back(memory_scope::sub_group);
71  if (bits & PI_MEMORY_SCOPE_WORK_GROUP)
72  result.push_back(memory_scope::work_group);
73  if (bits & PI_MEMORY_SCOPE_DEVICE)
74  result.push_back(memory_scope::device);
75  if (bits & PI_MEMORY_SCOPE_SYSTEM)
76  result.push_back(memory_scope::system);
77  return result;
78 }
79 
80 #ifndef __SYCL_DEVICE_ONLY__
82  switch (order) {
83  case memory_order::relaxed:
85  case memory_order::__consume_unsupported:
86  return std::memory_order_consume;
87  case memory_order::acquire:
89  case memory_order::release:
91  case memory_order::acq_rel:
93  case memory_order::seq_cst:
95  }
96  // Return default value here to avoid compiler warnings.
97  // default case in switch doesn't help because some compiler warn about
98  // having a default case while all values of enum are handled.
100 }
101 #endif // __SYCL_DEVICE_ONLY__
102 
103 } // namespace detail
104 } // __SYCL_INLINE_VER_NAMESPACE(_V1)
105 } // namespace sycl
sycl::_V1::memory_scope_system
constexpr auto memory_scope_system
Definition: memory_enums.hpp:38
sycl::_V1::memory_order::__consume_unsupported
@ __consume_unsupported
PI_MEMORY_ORDER_ACQUIRE
constexpr pi_memory_order_capabilities PI_MEMORY_ORDER_ACQUIRE
Definition: pi.h:562
__SYCL_INLINE_VER_NAMESPACE
#define __SYCL_INLINE_VER_NAMESPACE(X)
Definition: defines_elementary.hpp:11
sycl::_V1::detail::readMemoryOrderBitfield
std::vector< memory_order > readMemoryOrderBitfield(pi_memory_order_capabilities bits)
Definition: memory_enums.hpp:49
sycl::_V1::memory_order::acquire
@ acquire
PI_MEMORY_SCOPE_WORK_ITEM
constexpr pi_memory_scope_capabilities PI_MEMORY_SCOPE_WORK_ITEM
Definition: pi.h:568
sycl::_V1::memory_order::release
@ release
sycl::_V1::memory_order::relaxed
@ relaxed
sycl
---— Error handling, matching OpenCL plugin semantics.
Definition: access.hpp:14
sycl::_V1::memory_order::acq_rel
@ acq_rel
sycl::_V1::memory_order_seq_cst
constexpr auto memory_order_seq_cst
Definition: memory_enums.hpp:44
sycl::_V1::memory_order_acquire
constexpr auto memory_order_acquire
Definition: memory_enums.hpp:41
sycl::_V1::memory_scope_sub_group
constexpr auto memory_scope_sub_group
Definition: memory_enums.hpp:35
sycl::_V1::memory_order_relaxed
constexpr auto memory_order_relaxed
Definition: memory_enums.hpp:40
PI_MEMORY_ORDER_RELAXED
constexpr pi_memory_order_capabilities PI_MEMORY_ORDER_RELAXED
Definition: pi.h:561
defines_elementary.hpp
PI_MEMORY_SCOPE_DEVICE
constexpr pi_memory_scope_capabilities PI_MEMORY_SCOPE_DEVICE
Definition: pi.h:571
PI_MEMORY_SCOPE_SYSTEM
constexpr pi_memory_scope_capabilities PI_MEMORY_SCOPE_SYSTEM
Definition: pi.h:572
sycl::_V1::memory_scope_device
constexpr auto memory_scope_device
Definition: memory_enums.hpp:37
PI_MEMORY_SCOPE_SUB_GROUP
constexpr pi_memory_scope_capabilities PI_MEMORY_SCOPE_SUB_GROUP
Definition: pi.h:569
sycl::_V1::detail::readMemoryScopeBitfield
std::vector< memory_scope > readMemoryScopeBitfield(pi_memory_scope_capabilities bits)
Definition: memory_enums.hpp:65
sycl::_V1::memory_scope_work_group
constexpr auto memory_scope_work_group
Definition: memory_enums.hpp:36
PI_MEMORY_ORDER_SEQ_CST
constexpr pi_memory_order_capabilities PI_MEMORY_ORDER_SEQ_CST
Definition: pi.h:565
PI_MEMORY_ORDER_RELEASE
constexpr pi_memory_order_capabilities PI_MEMORY_ORDER_RELEASE
Definition: pi.h:563
sycl::_V1::device
The SYCL device class encapsulates a single SYCL device on which kernels may be executed.
Definition: device.hpp:49
sycl::_V1::memory_scope_work_item
constexpr auto memory_scope_work_item
Definition: memory_enums.hpp:34
pi_memory_scope_capabilities
pi_bitfield pi_memory_scope_capabilities
Definition: pi.h:567
sycl::_V1::memory_scope::work_item
@ work_item
sycl::_V1::memory_order::seq_cst
@ seq_cst
PI_MEMORY_SCOPE_WORK_GROUP
constexpr pi_memory_scope_capabilities PI_MEMORY_SCOPE_WORK_GROUP
Definition: pi.h:570
sycl::_V1::memory_order_acq_rel
constexpr auto memory_order_acq_rel
Definition: memory_enums.hpp:43
sycl::_V1::memory_scope
memory_scope
Definition: memory_enums.hpp:26
PI_MEMORY_ORDER_ACQ_REL
constexpr pi_memory_order_capabilities PI_MEMORY_ORDER_ACQ_REL
Definition: pi.h:564
sycl::_V1::detail::getStdMemoryOrder
static constexpr std::memory_order getStdMemoryOrder(sycl::memory_order order)
Definition: memory_enums.hpp:81
sycl::_V1::ext::oneapi::sub_group
Definition: sub_group.hpp:131
sycl::_V1::memory_order
memory_order
Definition: memory_enums.hpp:16
pi_memory_order_capabilities
pi_bitfield pi_memory_order_capabilities
Definition: pi.h:560
sycl::_V1::memory_order_release
constexpr auto memory_order_release
Definition: memory_enums.hpp:42