RAJA
RAJA provides a collection of platform portability abstractions for C++ HPC applications.
LocalArray.hpp
Go to the documentation of this file.
1 
11 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
12 // Copyright (c) Lawrence Livermore National Security, LLC and other
13 // RAJA Project Developers. See top-level LICENSE and COPYRIGHT
14 // files for dates and other details. No copyright assignment is required
15 // to contribute to RAJA.
16 //
17 // SPDX-License-Identifier: (BSD-3-Clause)
18 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
19 
20 
21 #ifndef RAJA_util_LocalArray_HPP
22 #define RAJA_util_LocalArray_HPP
23 
24 #include "RAJA/config.hpp"
25 
26 #include <iostream>
27 #include <type_traits>
28 
31 
32 namespace RAJA
33 {
34 
35 
36 template<camp::idx_t... Sizes>
37 using ParamList = camp::idx_seq<Sizes...>;
38 
55 namespace internal
56 {
57 
58 
59 template<typename Perm, typename Sizes>
61 
62 template<camp::idx_t... Perm, Index_type... Sizes>
63 struct StaticLayoutHelper<camp::idx_seq<Perm...>, SizeList<Sizes...>>
64 {
65  using type = StaticLayout<camp::idx_seq<Perm...>, Sizes...>;
66 };
67 
68 template<typename Perm, typename Sizes>
70 
71 
72 } // namespace internal
73 
74 template<typename ValueType,
75  typename Perm,
76  typename Sizes,
77  typename... IndexTypes>
79  internal::TypedViewBase<ValueType,
80  ValueType*,
82  camp::list<IndexTypes...>>;
83 
84 
85 template<typename ValueType, typename Perm, typename Sizes>
86 using LocalArray =
87  internal::TypedViewBase<ValueType,
88  ValueType*,
91 
92 template<typename AtomicPolicy,
93  typename DataType,
94  typename Perm,
95  typename Sizes,
96  typename... IndexTypes>
98 {};
99 
100 template<typename AtomicPolicy,
101  typename DataType,
102  camp::idx_t... Perm,
103  Index_type... Sizes,
104  typename... IndexTypes>
105 struct AtomicTypedLocalArray<AtomicPolicy,
106  DataType,
107  camp::idx_seq<Perm...>,
108  RAJA::SizeList<Sizes...>,
109  IndexTypes...>
110 {
111  DataType* m_arrayPtr = nullptr;
112  using value_type = DataType;
114  using layout_type = RAJA::StaticLayout<camp::idx_seq<Perm...>, Sizes...>;
115  static const camp::idx_t NumElem = layout_type::s_size;
116 
118  atomic_ref_t operator()(IndexTypes... indices) const
119  {
120  return (atomic_ref_t(
121  &m_arrayPtr[layout_type::s_oper(stripIndexType(indices)...)]));
122  }
123 
125 
126  RAJA_INLINE
127  constexpr camp::idx_t size() const { return layout_type::s_size; }
128 
130  RAJA_INLINE void set_data(DataType* data_ptr) { m_arrayPtr = data_ptr; }
131 };
132 
133 
134 } // end namespace RAJA
135 
136 
137 #endif
RAJA header file defining Layout, a N-dimensional index calculator with compile-time defined sizes an...
RAJA header file defining a multi-dimensional view class.
Atomic wrapper object.
Definition: atomic.hpp:302
Definition: TypedViewBase.hpp:725
#define RAJA_HOST_DEVICE
Definition: macros.hpp:65
typename StaticLayoutHelper< Perm, Sizes >::type getStaticLayoutType
Definition: LocalArray.hpp:69
typename SequenceToType< Perm, RAJA::Index_type >::type getDefaultIndexTypes
Definition: TypedViewBase.hpp:60
Definition: AlignedRangeIndexSetBuilders.cpp:35
std::ptrdiff_t Index_type
Definition: types.hpp:226
StaticLayoutT< Perm, camp::idx_t, Sizes... > StaticLayout
Definition: StaticLayout.hpp:309
camp::idx_seq< Sizes... > ParamList
Definition: LocalArray.hpp:37
constexpr RAJA_HOST_DEVICE RAJA_INLINE std::enable_if< std::is_base_of< IndexValueBase, FROM >::value, typename FROM::value_type >::type stripIndexType(FROM const val)
Function that strips the strongly typed Index<> and returns its underlying value_type value.
Definition: IndexValue.hpp:323
camp::idx_seq< Ints... > Perm
Definition: PermutedLayout.hpp:101
RAJA_HOST_DEVICE atomic_ref_t operator()(IndexTypes... indices) const
Definition: LocalArray.hpp:118
RAJA_HOST_DEVICE constexpr RAJA_INLINE camp::idx_t size() const
Definition: LocalArray.hpp:127
RAJA::StaticLayout< camp::idx_seq< Perm... >, Sizes... > layout_type
Definition: LocalArray.hpp:114
RAJA_HOST_DEVICE RAJA_INLINE void set_data(DataType *data_ptr)
Definition: LocalArray.hpp:130
Definition: LocalArray.hpp:98
Definition: types.hpp:239
StaticLayout< camp::idx_seq< Perm... >, Sizes... > type
Definition: LocalArray.hpp:65
Definition: LocalArray.hpp:60