RAJA
RAJA provides a collection of platform portability abstractions for C++ HPC applications.
reduce.hpp
Go to the documentation of this file.
1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
2 // Copyright (c) Lawrence Livermore National Security, LLC and other
3 // RAJA Project Developers. See top-level LICENSE and COPYRIGHT
4 // files for dates and other details. No copyright assignment is required
5 // to contribute to RAJA.
6 //
7 // SPDX-License-Identifier: (BSD-3-Clause)
8 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
9 
10 #ifndef NEW_REDUCE_OMP_REDUCE_HPP
11 #define NEW_REDUCE_OMP_REDUCE_HPP
12 
14 
15 namespace RAJA
16 {
17 namespace expt
18 {
19 namespace detail
20 {
21 
22 #if defined(RAJA_ENABLE_OPENMP)
23 
24 // Init
25 template<typename EXEC_POL, typename OP, typename T, typename VOp>
26 camp::concepts::enable_if<RAJA::type_traits::is_openmp_policy<EXEC_POL>>
27 param_init(EXEC_POL const&, Reducer<OP, T, VOp>& red)
28 {
29  red.m_valop.val = OP::identity();
30 }
31 
32 // Combine
33 template<typename EXEC_POL, typename OP, typename T, typename VOp>
34 camp::concepts::enable_if<RAJA::type_traits::is_openmp_policy<EXEC_POL>>
35 param_combine(EXEC_POL const&,
36  Reducer<OP, T, VOp>& out,
37  const Reducer<OP, T, VOp>& in)
38 {
39  out.m_valop.val = OP {}(out.m_valop.val, in.m_valop.val);
40 }
41 
42 // Resolve
43 template<typename EXEC_POL, typename OP, typename T, typename VOp>
44 camp::concepts::enable_if<RAJA::type_traits::is_openmp_policy<EXEC_POL>>
45 param_resolve(EXEC_POL const&, Reducer<OP, T, VOp>& red)
46 {
47  red.combineTarget(red.m_valop.val);
48 }
49 
50 #endif
51 
52 } // namespace detail
53 } // namespace expt
54 } // namespace RAJA
55 
56 #endif // NEW_REDUCE_OMP_REDUCE_HPP
camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::seq_exec > > param_init(EXEC_POL const &, RAJA::detail::Name &)
Definition: kernel_name.hpp:24
camp::concepts::enable_if< concepts::negate< is_instance_of_Reducer< camp::decay< T > > >, concepts::negate< std::is_same< T, RAJA::detail::Name > > > param_combine(EXEC_POL const &, T &, const T &)
Definition: forall.hpp:97
camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::seq_exec > > param_resolve(EXEC_POL const &, RAJA::detail::Name &)
Definition: kernel_name.hpp:40
Definition: AlignedRangeIndexSetBuilders.cpp:35