RAJA
RAJA provides a collection of platform portability abstractions for C++ HPC applications.
BinaryOperatorTraits.hpp
Go to the documentation of this file.
1 
12 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
13 // Copyright (c) Lawrence Livermore National Security, LLC and other
14 // RAJA Project Developers. See top-level LICENSE and COPYRIGHT
15 // files for dates and other details. No copyright assignment is required
16 // to contribute to RAJA.
17 //
18 // SPDX-License-Identifier: (BSD-3-Clause)
19 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
20 
21 #ifndef RAJA_pattern_tensor_ET_BinaryOperator_HPP
22 #define RAJA_pattern_tensor_ET_BinaryOperator_HPP
23 
24 namespace RAJA
25 {
26 namespace internal
27 {
28 namespace expt
29 {
30 
31 
32 namespace ET
33 {
34 
36 {
37 
38  template<typename LEFT, typename RIGHT>
39  RAJA_INLINE RAJA_HOST_DEVICE static auto eval(LEFT const& left,
40  RIGHT const& right)
41  -> decltype(left + right)
42  {
43  return left + right;
44  }
45 
46  RAJA_INLINE
47 
49  static void print_ast() { printf("Add"); }
50 };
51 
53 {
54 
55  template<typename LEFT, typename RIGHT>
56  RAJA_INLINE RAJA_HOST_DEVICE static auto eval(LEFT const& left,
57  RIGHT const& right)
58  -> decltype(left - right)
59  {
60  return left - right;
61  }
62 
63  RAJA_INLINE
64 
66  static void print_ast() { printf("Subtract"); }
67 };
68 
69 
70 template<typename OPERATOR, typename LEFT_OPERAND, typename RIGHT_OPERAND>
71 class TensorBinaryOperator;
72 
73 template<typename LHS, typename RHS>
75 
76 template<typename LHS, typename RHS>
78 
87 template<typename LHS_TYPE, typename RHS_TYPE, class ENABLE = void>
89 {
90 
91  using result_type = typename LHS_TYPE::result_type;
92  static constexpr camp::idx_t s_num_dims = LHS_TYPE::s_num_dims;
93 
94  RAJA_INLINE
95 
97  static void print_ast() { printf("Elemental"); }
98 
99  RAJA_INLINE
100 
102  static int getDimSize(int dim, LHS_TYPE const& lhs, RHS_TYPE const& rhs)
103  {
104  return dim == 0 ? lhs.getDimSize(0) : rhs.getDimSize(1);
105  }
106 };
107 
111 template<typename LHS_TYPE, typename RHS_TYPE>
112 struct OperatorTraits<LHS_TYPE,
113  RHS_TYPE,
114  typename std::enable_if<LHS_TYPE::s_num_dims == 0>::type>
115 {
116 
117  using result_type = typename RHS_TYPE::result_type;
118  static constexpr camp::idx_t s_num_dims = RHS_TYPE::s_num_dims;
119 
120  RAJA_INLINE
121 
123  static void print_ast() { printf("Scalar"); }
124 
125  RAJA_INLINE
126 
128  static int getDimSize(int dim, LHS_TYPE const&, RHS_TYPE const& rhs)
129  {
130  return rhs.getDimSize(dim);
131  }
132 };
133 
137 template<typename LHS_TYPE, typename RHS_TYPE>
138 struct OperatorTraits<LHS_TYPE,
139  RHS_TYPE,
140  typename std::enable_if<RHS_TYPE::s_num_dims == 0>::type>
141 {
142 
143  using result_type = typename LHS_TYPE::result_type;
144  static constexpr camp::idx_t s_num_dims = LHS_TYPE::s_num_dims;
145 
146  RAJA_INLINE
147 
149  static void print_ast() { printf("Scalar"); }
150 
151  RAJA_INLINE
152 
154  static int getDimSize(int dim, LHS_TYPE const& lhs, RHS_TYPE const&)
155  {
156  return lhs.getDimSize(dim);
157  }
158 };
159 
160 
161 } // namespace ET
162 
163 } // namespace expt
164 } // namespace internal
165 
166 } // namespace RAJA
167 
168 
169 #endif
Definition: BinaryOperator.hpp:46
#define RAJA_HOST_DEVICE
Definition: macros.hpp:65
Definition: AlignedRangeIndexSetBuilders.cpp:35
Definition: ListSegment.hpp:416
RAJA_INLINE static RAJA_HOST_DEVICE void print_ast()
Definition: BinaryOperatorTraits.hpp:149
RAJA_INLINE static RAJA_HOST_DEVICE int getDimSize(int dim, LHS_TYPE const &lhs, RHS_TYPE const &)
Definition: BinaryOperatorTraits.hpp:154
RAJA_INLINE static RAJA_HOST_DEVICE int getDimSize(int dim, LHS_TYPE const &, RHS_TYPE const &rhs)
Definition: BinaryOperatorTraits.hpp:128
RAJA_INLINE static RAJA_HOST_DEVICE void print_ast()
Definition: BinaryOperatorTraits.hpp:123
Definition: BinaryOperatorTraits.hpp:89
static constexpr camp::idx_t s_num_dims
Definition: BinaryOperatorTraits.hpp:92
RAJA_INLINE static RAJA_HOST_DEVICE void print_ast()
Definition: BinaryOperatorTraits.hpp:97
typename LHS_TYPE::result_type result_type
Definition: BinaryOperatorTraits.hpp:91
RAJA_INLINE static RAJA_HOST_DEVICE int getDimSize(int dim, LHS_TYPE const &lhs, RHS_TYPE const &rhs)
Definition: BinaryOperatorTraits.hpp:102
Definition: BinaryOperatorTraits.hpp:36
RAJA_INLINE static RAJA_HOST_DEVICE void print_ast()
Definition: BinaryOperatorTraits.hpp:49
RAJA_INLINE static RAJA_HOST_DEVICE auto eval(LEFT const &left, RIGHT const &right) -> decltype(left+right)
Definition: BinaryOperatorTraits.hpp:39
Definition: BinaryOperatorTraits.hpp:53
RAJA_INLINE static RAJA_HOST_DEVICE void print_ast()
Definition: BinaryOperatorTraits.hpp:66
RAJA_INLINE static RAJA_HOST_DEVICE auto eval(LEFT const &left, RIGHT const &right) -> decltype(left - right)
Definition: BinaryOperatorTraits.hpp:56