RAJA
RAJA provides a collection of platform portability abstractions for C++ HPC applications.
Classes | Typedefs | Functions
RAJA::expt::detail Namespace Reference

Classes

struct  Reducer
 
struct  bool_pack
 
struct  lambda_traits
 
struct  lambda_traits< R(C::*)(First, Rest...)>
 
struct  lambda_traits< R(C::*)(First, Rest...) const >
 
struct  is_invocable
 
struct  has_empty_op
 
struct  has_empty_op< F, void_t< decltype(std::declval< F::operator()>)> >
 
struct  get_lambda_index_type
 
struct  ParamBase
 
struct  ForallParamBase
 
struct  ParamToArgHelper
 
struct  GetArgType
 
struct  GetArgType< ParamType, std::enable_if_t< std::is_base_of< ParamBase, ParamType >::value > >
 
struct  ParamToArgHelper< camp::tuple< Params... > >
 
struct  Reducer< Op< ValLoc< T, I >, ValLoc< T, I >, ValLoc< T, I > >, ValLoc< T, I >, ValOp< ValLoc< T, I >, Op > >
 

Typedefs

template<bool... bs>
using all_true = std::is_same< bool_pack< bs..., true >, bool_pack< true, bs... > >
 
template<typename Base , typename... Ts>
using check_types_derive_base = all_true< std::is_convertible< Ts, Base >::value... >
 
template<class... >
using void_t = void
 

Functions

template<typename... Params>
constexpr RAJA_HOST_DEVICE auto filter_reducers (camp::tuple< Params... > &params)
 
template<typename ExecPol , typename ParamTuple , camp::idx_t... Seq, typename... Args>
void resolve_params_helper (ParamTuple &params_tuple, const camp::idx_seq< Seq... > &, Args &&... args)
 
template<typename ExecPol , typename... Params, typename... Args>
void resolve_params (camp::tuple< Params... > &params_tuple, Args &&... args)
 
template<typename ExecPol , typename ParamTuple , camp::idx_t... Seq, typename... Args>
void init_params_helper (ParamTuple &params_tuple, const camp::idx_seq< Seq... > &, Args &&... args)
 
template<typename ExecPol , typename... Params, typename... Args>
void init_params (camp::tuple< Params... > &params_tuple, Args &&... args)
 
template<typename ExecPol , typename ParamTuple , camp::idx_t... Seq>
RAJA_HOST_DEVICE void combine_params_helper (const camp::idx_seq< Seq... > &, ParamTuple &params_tuple)
 
template<typename EXEC_POL , typename T >
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 &)
 
template<typename ExecPol , typename ParamTuple , camp::idx_t... Seq>
RAJA_HOST_DEVICE void combine_params_helper (const camp::idx_seq< Seq... > &, ParamTuple &params_tuple, const ParamTuple &params_tuple_in)
 
template<typename ExecPol , typename... Params>
RAJA_HOST_DEVICE void combine_params (camp::tuple< Params... > &params_tuple)
 
template<typename ExecPol , typename... Params>
RAJA_HOST_DEVICE void combine_params (camp::tuple< Params... > &params_tuple, const camp::tuple< Params... > &params_tuple_in)
 
template<camp::idx_t... Seq, typename TupleType >
constexpr auto tuple_from_seq (const camp::idx_seq< Seq... > &, TupleType &&tuple)
 
template<typename... Ts>
constexpr auto strip_last_elem (camp::tuple< Ts... > &&tuple)
 
template<class T >
lambda_traits< T >::arg_type * lambda_arg_helper (T)
 
template<typename... Ts>
constexpr auto list_remove_pointer (const camp::list< Ts... > &)
 
template<typename... Ts>
constexpr auto list_add_lvalue_ref (const camp::list< Ts... > &)
 
template<typename... Ts>
constexpr auto tuple_to_list (const camp::tuple< Ts... > &)
 
template<typename LAMBDA , typename... EXPECTED_ARGS>
constexpr concepts::enable_if< concepts::negate< has_empty_op< LAMBDA > > > check_invocable (LAMBDA &&, const camp::list< EXPECTED_ARGS... > &)
 
template<typename LAMBDA , typename... EXPECTED_ARGS>
constexpr concepts::enable_if< has_empty_op< LAMBDA > > check_invocable (LAMBDA &&, const camp::list< EXPECTED_ARGS... > &)
 
template<camp::idx_t Idx, typename FP >
constexpr RAJA_HOST_DEVICE auto get_lambda_args (FP &fpp) -> decltype(*camp::get< Idx >(fpp.lambda_args()))
 
template<typename Fn , camp::idx_t... Sequence, typename Params , typename... Ts>
CAMP_SUPPRESS_HD_WARN constexpr RAJA_HOST_DEVICE auto invoke_with_order (Params &&params, Fn &&f, camp::idx_seq< Sequence... >, Ts &&... extra)
 
template<typename T >
RAJA_HOST_DEVICE std::enable_if_t< std::is_base_of< ParamBase, T >::value, std::add_lvalue_reference_t< typename T::ARG_T > > get_lambda_arg (T &Param)
 
template<typename T >
RAJA_HOST_DEVICE std::enable_if_t<!std::is_base_of< ParamBase, T >::value, std::add_lvalue_reference_t< T > > get_lambda_arg (T &Param)
 
template<typename EXEC_POL >
camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::seq_exec > > param_init (EXEC_POL const &, RAJA::detail::Name &)
 
template<typename EXEC_POL , typename T >
RAJA_HOST_DEVICE camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::seq_exec > > param_combine (EXEC_POL const &, RAJA::detail::Name &, T)
 
template<typename EXEC_POL >
camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::seq_exec > > param_resolve (EXEC_POL const &, RAJA::detail::Name &)
 
template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::seq_exec > > param_init (EXEC_POL const &, Reducer< OP, T, VOp > &red)
 
template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::seq_exec > > param_combine (EXEC_POL const &, Reducer< OP, T, VOp > &out, const Reducer< OP, T, VOp > &in)
 
template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::seq_exec > > param_combine (EXEC_POL const &, Reducer< OP, T, VOp > &)
 
template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::seq_exec > > param_resolve (EXEC_POL const &, Reducer< OP, T, VOp > &red)
 
template<typename EXEC_POL >
camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::simd_exec > > param_init (EXEC_POL const &, RAJA::detail::Name &)
 
template<typename EXEC_POL , typename T >
RAJA_HOST_DEVICE camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::simd_exec > > param_combine (EXEC_POL const &, RAJA::detail::Name &, T)
 
template<typename EXEC_POL >
camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::simd_exec > > param_resolve (EXEC_POL const &, RAJA::detail::Name &)
 
template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::simd_exec > > param_init (EXEC_POL const &, Reducer< OP, T, VOp > &red)
 
template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::simd_exec > > param_combine (EXEC_POL const &, Reducer< OP, T, VOp > &out, const Reducer< OP, T, VOp > &in)
 
template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if< std::is_same< EXEC_POL, RAJA::simd_exec > > param_resolve (EXEC_POL const &, Reducer< OP, T, VOp > &red)
 

Typedef Documentation

◆ all_true

template<bool... bs>
using RAJA::expt::detail::all_true = typedef std::is_same<bool_pack<bs..., true>, bool_pack<true, bs...> >

◆ check_types_derive_base

template<typename Base , typename... Ts>
using RAJA::expt::detail::check_types_derive_base = typedef all_true<std::is_convertible<Ts, Base>::value...>

◆ void_t

template<class... >
using RAJA::expt::detail::void_t = typedef void

Function Documentation

◆ filter_reducers()

template<typename... Params>
constexpr RAJA_HOST_DEVICE auto RAJA::expt::detail::filter_reducers ( camp::tuple< Params... > &  params)
constexpr

◆ resolve_params_helper()

template<typename ExecPol , typename ParamTuple , camp::idx_t... Seq, typename... Args>
void RAJA::expt::detail::resolve_params_helper ( ParamTuple &  params_tuple,
const camp::idx_seq< Seq... > &  ,
Args &&...  args 
)

◆ resolve_params()

template<typename ExecPol , typename... Params, typename... Args>
void RAJA::expt::detail::resolve_params ( camp::tuple< Params... > &  params_tuple,
Args &&...  args 
)

◆ init_params_helper()

template<typename ExecPol , typename ParamTuple , camp::idx_t... Seq, typename... Args>
void RAJA::expt::detail::init_params_helper ( ParamTuple &  params_tuple,
const camp::idx_seq< Seq... > &  ,
Args &&...  args 
)

◆ init_params()

template<typename ExecPol , typename... Params, typename... Args>
void RAJA::expt::detail::init_params ( camp::tuple< Params... > &  params_tuple,
Args &&...  args 
)

◆ combine_params_helper() [1/2]

template<typename ExecPol , typename ParamTuple , camp::idx_t... Seq>
RAJA_HOST_DEVICE void RAJA::expt::detail::combine_params_helper ( const camp::idx_seq< Seq... > &  ,
ParamTuple &  params_tuple 
)

◆ param_combine() [1/6]

template<typename EXEC_POL , typename T >
camp::concepts::enable_if< concepts::negate<is_instance_of_Reducer<camp::decay<T> > >, concepts::negate<std::is_same<T, RAJA::detail::Name> > > RAJA::expt::detail::param_combine ( EXEC_POL const &  ,
T &  ,
const T &   
)

◆ combine_params_helper() [2/2]

template<typename ExecPol , typename ParamTuple , camp::idx_t... Seq>
RAJA_HOST_DEVICE void RAJA::expt::detail::combine_params_helper ( const camp::idx_seq< Seq... > &  ,
ParamTuple &  params_tuple,
const ParamTuple &  params_tuple_in 
)

◆ combine_params() [1/2]

template<typename ExecPol , typename... Params>
RAJA_HOST_DEVICE void RAJA::expt::detail::combine_params ( camp::tuple< Params... > &  params_tuple)

◆ combine_params() [2/2]

template<typename ExecPol , typename... Params>
RAJA_HOST_DEVICE void RAJA::expt::detail::combine_params ( camp::tuple< Params... > &  params_tuple,
const camp::tuple< Params... > &  params_tuple_in 
)

◆ tuple_from_seq()

template<camp::idx_t... Seq, typename TupleType >
constexpr auto RAJA::expt::detail::tuple_from_seq ( const camp::idx_seq< Seq... > &  ,
TupleType &&  tuple 
)
constexpr

◆ strip_last_elem()

template<typename... Ts>
constexpr auto RAJA::expt::detail::strip_last_elem ( camp::tuple< Ts... > &&  tuple)
constexpr

◆ lambda_arg_helper()

template<class T >
lambda_traits<T>::arg_type* RAJA::expt::detail::lambda_arg_helper ( )

◆ list_remove_pointer()

template<typename... Ts>
constexpr auto RAJA::expt::detail::list_remove_pointer ( const camp::list< Ts... > &  )
constexpr

◆ list_add_lvalue_ref()

template<typename... Ts>
constexpr auto RAJA::expt::detail::list_add_lvalue_ref ( const camp::list< Ts... > &  )
constexpr

◆ tuple_to_list()

template<typename... Ts>
constexpr auto RAJA::expt::detail::tuple_to_list ( const camp::tuple< Ts... > &  )
constexpr

◆ check_invocable() [1/2]

template<typename LAMBDA , typename... EXPECTED_ARGS>
constexpr concepts::enable_if<concepts::negate<has_empty_op<LAMBDA> > > RAJA::expt::detail::check_invocable ( LAMBDA &&  ,
const camp::list< EXPECTED_ARGS... > &   
)
constexpr

◆ check_invocable() [2/2]

template<typename LAMBDA , typename... EXPECTED_ARGS>
constexpr concepts::enable_if<has_empty_op<LAMBDA> > RAJA::expt::detail::check_invocable ( LAMBDA &&  ,
const camp::list< EXPECTED_ARGS... > &   
)
constexpr

◆ get_lambda_args()

template<camp::idx_t Idx, typename FP >
constexpr RAJA_HOST_DEVICE auto RAJA::expt::detail::get_lambda_args ( FP &  fpp) -> decltype(*camp::get<Idx>(fpp.lambda_args()))
constexpr

◆ invoke_with_order()

template<typename Fn , camp::idx_t... Sequence, typename Params , typename... Ts>
CAMP_SUPPRESS_HD_WARN constexpr RAJA_HOST_DEVICE auto RAJA::expt::detail::invoke_with_order ( Params &&  params,
Fn &&  f,
camp::idx_seq< Sequence... >  ,
Ts &&...  extra 
)
constexpr

◆ get_lambda_arg() [1/2]

template<typename T >
RAJA_HOST_DEVICE std::enable_if_t< std::is_base_of<ParamBase, T>::value, std::add_lvalue_reference_t<typename T::ARG_T> > RAJA::expt::detail::get_lambda_arg ( T &  Param)

◆ get_lambda_arg() [2/2]

template<typename T >
RAJA_HOST_DEVICE std::enable_if_t<!std::is_base_of<ParamBase, T>::value, std::add_lvalue_reference_t<T> > RAJA::expt::detail::get_lambda_arg ( T &  Param)

◆ param_init() [1/4]

template<typename EXEC_POL >
camp::concepts::enable_if<std::is_same<EXEC_POL, RAJA::seq_exec> > RAJA::expt::detail::param_init ( EXEC_POL const &  ,
RAJA::detail::Name  
)

◆ param_combine() [2/6]

template<typename EXEC_POL , typename T >
RAJA_HOST_DEVICE camp::concepts::enable_if< std::is_same<EXEC_POL, RAJA::seq_exec> > RAJA::expt::detail::param_combine ( EXEC_POL const &  ,
RAJA::detail::Name ,
 
)

◆ param_resolve() [1/4]

template<typename EXEC_POL >
camp::concepts::enable_if<std::is_same<EXEC_POL, RAJA::seq_exec> > RAJA::expt::detail::param_resolve ( EXEC_POL const &  ,
RAJA::detail::Name  
)

◆ param_init() [2/4]

template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if<std::is_same<EXEC_POL, RAJA::seq_exec> > RAJA::expt::detail::param_init ( EXEC_POL const &  ,
Reducer< OP, T, VOp > &  red 
)

◆ param_combine() [3/6]

template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if<std::is_same<EXEC_POL, RAJA::seq_exec> > RAJA::expt::detail::param_combine ( EXEC_POL const &  ,
Reducer< OP, T, VOp > &  out,
const Reducer< OP, T, VOp > &  in 
)

◆ param_combine() [4/6]

template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if<std::is_same<EXEC_POL, RAJA::seq_exec> > RAJA::expt::detail::param_combine ( EXEC_POL const &  ,
Reducer< OP, T, VOp > &   
)

◆ param_resolve() [2/4]

template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if<std::is_same<EXEC_POL, RAJA::seq_exec> > RAJA::expt::detail::param_resolve ( EXEC_POL const &  ,
Reducer< OP, T, VOp > &  red 
)

◆ param_init() [3/4]

template<typename EXEC_POL >
camp::concepts::enable_if<std::is_same<EXEC_POL, RAJA::simd_exec> > RAJA::expt::detail::param_init ( EXEC_POL const &  ,
RAJA::detail::Name  
)

◆ param_combine() [5/6]

template<typename EXEC_POL , typename T >
RAJA_HOST_DEVICE camp::concepts::enable_if< std::is_same<EXEC_POL, RAJA::simd_exec> > RAJA::expt::detail::param_combine ( EXEC_POL const &  ,
RAJA::detail::Name ,
 
)

◆ param_resolve() [3/4]

template<typename EXEC_POL >
camp::concepts::enable_if<std::is_same<EXEC_POL, RAJA::simd_exec> > RAJA::expt::detail::param_resolve ( EXEC_POL const &  ,
RAJA::detail::Name  
)

◆ param_init() [4/4]

template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if<std::is_same<EXEC_POL, RAJA::simd_exec> > RAJA::expt::detail::param_init ( EXEC_POL const &  ,
Reducer< OP, T, VOp > &  red 
)

◆ param_combine() [6/6]

template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if<std::is_same<EXEC_POL, RAJA::simd_exec> > RAJA::expt::detail::param_combine ( EXEC_POL const &  ,
Reducer< OP, T, VOp > &  out,
const Reducer< OP, T, VOp > &  in 
)

◆ param_resolve() [4/4]

template<typename EXEC_POL , typename OP , typename T , typename VOp >
camp::concepts::enable_if<std::is_same<EXEC_POL, RAJA::simd_exec> > RAJA::expt::detail::param_resolve ( EXEC_POL const &  ,
Reducer< OP, T, VOp > &  red 
)