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

Namespaces

 detail
 
 type_traits
 

Classes

struct  ForallParamPack
 
struct  is_instance_of_Reducer
 
struct  is_instance_of_Reducer< detail::Reducer< Op, T, VOp > >
 
struct  tuple_contains_Reducers
 
struct  tuple_contains_Reducers< camp::tuple< Params... > >
 
struct  ParamMultiplexer
 
struct  ValLoc
 
struct  ValOp
 
struct  ValOp< ValLoc< T, IndexType >, Op >
 
class  TensorRegister< REGISTER_POLICY, T, TensorLayout< ROW_ORD, COL_ORD >, camp::idx_seq< ROW_SIZE, COL_SIZE > >
 
class  Register
 
class  TensorRegister< REGISTER_POLICY, T, RAJA::expt::VectorLayout, camp::idx_seq< SIZE > >
 
struct  tensor_stats
 
struct  StaticTensorIndexInner
 
struct  StaticTensorIndex
 
class  TensorIndex
 
struct  StaticTensorIndex< StaticTensorIndexInner< IDX, TENSOR_TYPE, DIM, INDEX_VALUE, LENGTH_VALUE > >
 
struct  TensorLayout
 
struct  TensorLayout< S2, S1 >
 
class  TensorRegister
 
class  Register< T, scalar_register >
 
struct  scalar_register
 

Typedefs

template<typename T , typename IndexType , template< typename, typename, typename > class Op>
using ValLocOp = ValOp< ValLoc< T, IndexType >, Op >
 
template<typename T , typename LAYOUT , typename REGISTER_POLICY = default_register>
using SquareMatrixRegister = TensorRegister< REGISTER_POLICY, T, LAYOUT, camp::idx_seq< RAJA::internal::expt::RegisterTraits< REGISTER_POLICY, T >::s_num_elem, RAJA::internal::expt::RegisterTraits< REGISTER_POLICY, T >::s_num_elem > >
 
template<typename T , typename LAYOUT , camp::idx_t ROWS, camp::idx_t COLS, typename REGISTER_POLICY = default_register>
using RectMatrixRegister = TensorRegister< REGISTER_POLICY, T, LAYOUT, camp::idx_seq< ROWS, COLS > >
 
template<typename T >
using ScalarRegister = TensorRegister< scalar_register, T, ScalarLayout, camp::idx_seq<> >
 
template<typename IDX , typename VECTOR_TYPE >
using VectorIndex = TensorIndex< IDX, VECTOR_TYPE, 0 >
 
template<typename IDX , typename MATRIX_TYPE >
using RowIndex = TensorIndex< IDX, MATRIX_TYPE, 0 >
 
template<typename IDX , typename MATRIX_TYPE >
using ColIndex = TensorIndex< IDX, MATRIX_TYPE, 1 >
 
using ScalarLayout = TensorLayout<>
 
using VectorLayout = TensorLayout< 0 >
 
using RowMajorLayout = TensorLayout< 0, 1 >
 
using ColMajorLayout = TensorLayout< 1, 0 >
 
template<typename T , typename REGISTER_POLICY = default_register, camp::idx_t NUM_ELEM = Register<T, REGISTER_POLICY>::s_num_elem>
using VectorRegister = TensorRegister< REGISTER_POLICY, T, VectorLayout, camp::idx_seq< NUM_ELEM > >
 
using default_register = RAJA_TENSOR_REGISTER_TYPE
 
template<typename TENSOR_TYPE , camp::idx_t TILE_SIZE = -1>
using vector_exec = policy::tensor::tensor_exec< RAJA::seq_exec, TENSOR_TYPE, 0, TILE_SIZE >
 
template<typename TENSOR_TYPE , camp::idx_t TILE_SIZE = -1>
using matrix_row_exec = policy::tensor::tensor_exec< seq_exec, TENSOR_TYPE, 0, TILE_SIZE >
 
template<typename TENSOR_TYPE , camp::idx_t TILE_SIZE = -1>
using matrix_col_exec = policy::tensor::tensor_exec< seq_exec, TENSOR_TYPE, 1, TILE_SIZE >
 

Functions

template<typename POLICY_LIST , typename CONTEXT , typename SEGMENT , typename BODY >
RAJA_SUPPRESS_HD_WARN RAJA_HOST_DEVICE RAJA_INLINE void loop (CONTEXT const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, BODY const &body)
 
template<typename POLICY_LIST , typename CONTEXT , typename SEGMENT , typename BODY >
RAJA_SUPPRESS_HD_WARN RAJA_HOST_DEVICE RAJA_INLINE void loop_icount (CONTEXT const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, BODY const &body)
 
template<typename POLICY_LIST , typename CONTEXT , typename SEGMENT , typename BODY >
RAJA_SUPPRESS_HD_WARN RAJA_HOST_DEVICE RAJA_INLINE void loop (CONTEXT const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, SEGMENT const &segment2, BODY const &body)
 
template<typename POLICY_LIST , typename CONTEXT , typename SEGMENT , typename BODY >
RAJA_SUPPRESS_HD_WARN RAJA_HOST_DEVICE RAJA_INLINE void loop_icount (CONTEXT const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, SEGMENT const &segment2, BODY const &body)
 
template<typename POLICY_LIST , typename CONTEXT , typename TILE_T , typename SEGMENT , typename BODY >
RAJA_HOST_DEVICE RAJA_INLINE void tile (CONTEXT const &ctx, TILE_T tile_size0, TILE_T tile_size1, SEGMENT const &segment0, SEGMENT const &segment1, BODY const &body)
 
template<typename POLICY_LIST , typename CONTEXT , typename TILE_T , typename SEGMENT , typename BODY >
RAJA_HOST_DEVICE RAJA_INLINE void tile_tcount (CONTEXT const &ctx, TILE_T tile_size0, TILE_T tile_size1, SEGMENT const &segment0, SEGMENT const &segment1, BODY const &body)
 
template<typename POLICY_LIST , typename CONTEXT , typename TILE_T , typename SEGMENT , typename BODY >
RAJA_HOST_DEVICE RAJA_INLINE void tile (CONTEXT const &ctx, TILE_T tile_size0, TILE_T tile_size1, TILE_T tile_size2, SEGMENT const &segment0, SEGMENT const &segment1, SEGMENT const &segment2, BODY const &body)
 
template<typename POLICY_LIST , typename CONTEXT , typename TILE_T , typename SEGMENT , typename BODY >
RAJA_HOST_DEVICE RAJA_INLINE void tile_tcount (CONTEXT const &ctx, TILE_T tile_size0, TILE_T tile_size1, TILE_T tile_size2, SEGMENT const &segment0, SEGMENT const &segment1, SEGMENT const &segment2, BODY const &body)
 
template<typename... Ts>
constexpr auto make_forall_param_pack_from_tuple (camp::tuple< Ts... > &&tuple)
 
template<typename... Args>
constexpr auto make_forall_param_pack (Args &&... args)
 
template<typename... Args>
constexpr auto && get_lambda (Args &&... args)
 
template<std::size_t name_idx, typename... Args, std::enable_if_t<(name_idx< sizeof...(Args))> * = nullptr>
std::string get_kernel_name_string (camp::tuple< Args... > &&tuple_args)
 
template<std::size_t name_idx, typename... Args, std::enable_if_t<(name_idx >=sizeof...(Args))> * = nullptr>
std::string get_kernel_name_string (camp::tuple< Args... > &&RAJA_UNUSED_ARG(tuple_args))
 
template<typename... Args, std::size_t... Idx>
std::string get_kernel_name_helper (camp::tuple< Args... > &&tuple_args, std::index_sequence< Idx... > RAJA_UNUSED_ARG(i_seq))
 
template<typename... Args>
std::string get_kernel_name (Args &&... args)
 
template<typename Lambda , typename ForallParams >
constexpr void check_forall_optional_args (Lambda &&l, ForallParams &fpp)
 
template<typename Params , typename Fn , typename... Ts>
constexpr RAJA_HOST_DEVICE auto invoke_body (Params &&params, Fn &&f, Ts &&... extra)
 
template<template< typename, typename, typename > class Op, typename T >
constexpr auto Reduce (T *target)
 
template<template< typename, typename, typename > class Op, typename T , typename IndexType >
constexpr auto Reduce (ValLoc< T, IndexType > *target)
 
template<template< typename, typename, typename > class Op, typename T , typename IndexType >
constexpr auto ReduceLoc (T *target, IndexType *index)
 
template<typename IDX , typename MATRIX_TYPE >
RAJA_HOST_DEVICE constexpr RAJA_INLINE ColIndex< IDX, MATRIX_TYPE > toColIndex (RowIndex< IDX, MATRIX_TYPE > const &r)
 
template<typename IDX , typename MATRIX_TYPE >
RAJA_HOST_DEVICE constexpr RAJA_INLINE RowIndex< IDX, MATRIX_TYPE > toRowIndex (ColIndex< IDX, MATRIX_TYPE > const &c)
 
template<typename LEFT , typename RIGHT , typename std::enable_if< std::is_arithmetic< LEFT >::value, bool >::type = true, typename std::enable_if< std::is_base_of< RAJA::internal::expt::TensorRegisterConcreteBase, RIGHT >::value, bool >::type = true>
RAJA_INLINE RAJA_HOST_DEVICE RIGHT operator+ (LEFT const &lhs, RIGHT const &rhs)
 
template<typename LEFT , typename RIGHT , typename std::enable_if< std::is_arithmetic< LEFT >::value, bool >::type = true, typename std::enable_if< std::is_base_of< RAJA::internal::expt::TensorRegisterConcreteBase, RIGHT >::value, bool >::type = true>
RAJA_INLINE RAJA_HOST_DEVICE RIGHT operator- (LEFT const &lhs, RIGHT const &rhs)
 
template<typename LEFT , typename RIGHT , typename std::enable_if< std::is_arithmetic< LEFT >::value, bool >::type = true, typename std::enable_if< std::is_base_of< RAJA::internal::expt::TensorRegisterConcreteBase, RIGHT >::value, bool >::type = true>
RAJA_INLINE RAJA_HOST_DEVICE RIGHT operator* (LEFT const &lhs, RIGHT const &rhs)
 
template<typename LEFT , typename RIGHT , typename std::enable_if< std::is_arithmetic< LEFT >::value, bool >::type = true, typename std::enable_if< std::is_base_of< RAJA::internal::expt::TensorRegisterConcreteBase, RIGHT >::value, bool >::type = true>
RAJA_INLINE RAJA_HOST_DEVICE RIGHT operator/ (LEFT const &lhs, RIGHT const &rhs)
 

Typedef Documentation

◆ ValLocOp

template<typename T , typename IndexType , template< typename, typename, typename > class Op>
using RAJA::expt::ValLocOp = typedef ValOp<ValLoc<T, IndexType>, Op>

◆ SquareMatrixRegister

template<typename T , typename LAYOUT , typename REGISTER_POLICY = default_register>
using RAJA::expt::SquareMatrixRegister = typedef TensorRegister< REGISTER_POLICY, T, LAYOUT, camp::idx_seq< RAJA::internal::expt::RegisterTraits<REGISTER_POLICY, T>::s_num_elem, RAJA::internal::expt::RegisterTraits<REGISTER_POLICY, T>::s_num_elem> >

◆ RectMatrixRegister

template<typename T , typename LAYOUT , camp::idx_t ROWS, camp::idx_t COLS, typename REGISTER_POLICY = default_register>
using RAJA::expt::RectMatrixRegister = typedef TensorRegister<REGISTER_POLICY, T, LAYOUT, camp::idx_seq<ROWS, COLS> >

◆ ScalarRegister

template<typename T >
using RAJA::expt::ScalarRegister = typedef TensorRegister<scalar_register, T, ScalarLayout, camp::idx_seq<> >

◆ VectorIndex

template<typename IDX , typename VECTOR_TYPE >
using RAJA::expt::VectorIndex = typedef TensorIndex<IDX, VECTOR_TYPE, 0>

Index that specifies the starting element index of a Vector

◆ RowIndex

template<typename IDX , typename MATRIX_TYPE >
using RAJA::expt::RowIndex = typedef TensorIndex<IDX, MATRIX_TYPE, 0>

Index that specifies the starting Row index of a matrix

◆ ColIndex

template<typename IDX , typename MATRIX_TYPE >
using RAJA::expt::ColIndex = typedef TensorIndex<IDX, MATRIX_TYPE, 1>

Index that specifies the starting Column index of a matrix

◆ ScalarLayout

◆ VectorLayout

◆ RowMajorLayout

◆ ColMajorLayout

◆ VectorRegister

template<typename T , typename REGISTER_POLICY = default_register, camp::idx_t NUM_ELEM = Register<T, REGISTER_POLICY>::s_num_elem>
using RAJA::expt::VectorRegister = typedef TensorRegister<REGISTER_POLICY, T, VectorLayout, camp::idx_seq<NUM_ELEM> >

◆ default_register

◆ vector_exec

template<typename TENSOR_TYPE , camp::idx_t TILE_SIZE = -1>
using RAJA::expt::vector_exec = typedef policy::tensor::tensor_exec<RAJA::seq_exec, TENSOR_TYPE, 0, TILE_SIZE>

◆ matrix_row_exec

template<typename TENSOR_TYPE , camp::idx_t TILE_SIZE = -1>
using RAJA::expt::matrix_row_exec = typedef policy::tensor::tensor_exec<seq_exec, TENSOR_TYPE, 0, TILE_SIZE>

◆ matrix_col_exec

template<typename TENSOR_TYPE , camp::idx_t TILE_SIZE = -1>
using RAJA::expt::matrix_col_exec = typedef policy::tensor::tensor_exec<seq_exec, TENSOR_TYPE, 1, TILE_SIZE>

Function Documentation

◆ loop() [1/2]

template<typename POLICY_LIST , typename CONTEXT , typename SEGMENT , typename BODY >
RAJA_SUPPRESS_HD_WARN RAJA_HOST_DEVICE RAJA_INLINE void RAJA::expt::loop ( CONTEXT const &  ctx,
SEGMENT const &  segment0,
SEGMENT const &  segment1,
BODY const &  body 
)

◆ loop_icount() [1/2]

template<typename POLICY_LIST , typename CONTEXT , typename SEGMENT , typename BODY >
RAJA_SUPPRESS_HD_WARN RAJA_HOST_DEVICE RAJA_INLINE void RAJA::expt::loop_icount ( CONTEXT const &  ctx,
SEGMENT const &  segment0,
SEGMENT const &  segment1,
BODY const &  body 
)

◆ loop() [2/2]

template<typename POLICY_LIST , typename CONTEXT , typename SEGMENT , typename BODY >
RAJA_SUPPRESS_HD_WARN RAJA_HOST_DEVICE RAJA_INLINE void RAJA::expt::loop ( CONTEXT const &  ctx,
SEGMENT const &  segment0,
SEGMENT const &  segment1,
SEGMENT const &  segment2,
BODY const &  body 
)

◆ loop_icount() [2/2]

template<typename POLICY_LIST , typename CONTEXT , typename SEGMENT , typename BODY >
RAJA_SUPPRESS_HD_WARN RAJA_HOST_DEVICE RAJA_INLINE void RAJA::expt::loop_icount ( CONTEXT const &  ctx,
SEGMENT const &  segment0,
SEGMENT const &  segment1,
SEGMENT const &  segment2,
BODY const &  body 
)

◆ tile() [1/2]

template<typename POLICY_LIST , typename CONTEXT , typename TILE_T , typename SEGMENT , typename BODY >
RAJA_HOST_DEVICE RAJA_INLINE void RAJA::expt::tile ( CONTEXT const &  ctx,
TILE_T  tile_size0,
TILE_T  tile_size1,
SEGMENT const &  segment0,
SEGMENT const &  segment1,
BODY const &  body 
)

◆ tile_tcount() [1/2]

template<typename POLICY_LIST , typename CONTEXT , typename TILE_T , typename SEGMENT , typename BODY >
RAJA_HOST_DEVICE RAJA_INLINE void RAJA::expt::tile_tcount ( CONTEXT const &  ctx,
TILE_T  tile_size0,
TILE_T  tile_size1,
SEGMENT const &  segment0,
SEGMENT const &  segment1,
BODY const &  body 
)

◆ tile() [2/2]

template<typename POLICY_LIST , typename CONTEXT , typename TILE_T , typename SEGMENT , typename BODY >
RAJA_HOST_DEVICE RAJA_INLINE void RAJA::expt::tile ( CONTEXT const &  ctx,
TILE_T  tile_size0,
TILE_T  tile_size1,
TILE_T  tile_size2,
SEGMENT const &  segment0,
SEGMENT const &  segment1,
SEGMENT const &  segment2,
BODY const &  body 
)

◆ tile_tcount() [2/2]

template<typename POLICY_LIST , typename CONTEXT , typename TILE_T , typename SEGMENT , typename BODY >
RAJA_HOST_DEVICE RAJA_INLINE void RAJA::expt::tile_tcount ( CONTEXT const &  ctx,
TILE_T  tile_size0,
TILE_T  tile_size1,
TILE_T  tile_size2,
SEGMENT const &  segment0,
SEGMENT const &  segment1,
SEGMENT const &  segment2,
BODY const &  body 
)

◆ make_forall_param_pack_from_tuple()

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

◆ make_forall_param_pack()

template<typename... Args>
constexpr auto RAJA::expt::make_forall_param_pack ( Args &&...  args)
constexpr

◆ get_lambda()

template<typename... Args>
constexpr auto&& RAJA::expt::get_lambda ( Args &&...  args)
constexpr

◆ get_kernel_name_string() [1/2]

template<std::size_t name_idx, typename... Args, std::enable_if_t<(name_idx< sizeof...(Args))> * = nullptr>
std::string RAJA::expt::get_kernel_name_string ( camp::tuple< Args... > &&  tuple_args)

◆ get_kernel_name_string() [2/2]

template<std::size_t name_idx, typename... Args, std::enable_if_t<(name_idx >=sizeof...(Args))> * = nullptr>
std::string RAJA::expt::get_kernel_name_string ( camp::tuple< Args... > &&  RAJA_UNUSED_ARGtuple_args)

◆ get_kernel_name_helper()

template<typename... Args, std::size_t... Idx>
std::string RAJA::expt::get_kernel_name_helper ( camp::tuple< Args... > &&  tuple_args,
std::index_sequence< Idx... >   RAJA_UNUSED_ARGi_seq 
)

◆ get_kernel_name()

template<typename... Args>
std::string RAJA::expt::get_kernel_name ( Args &&...  args)

◆ check_forall_optional_args()

template<typename Lambda , typename ForallParams >
constexpr void RAJA::expt::check_forall_optional_args ( Lambda &&  l,
ForallParams &  fpp 
)
constexpr

◆ invoke_body()

template<typename Params , typename Fn , typename... Ts>
constexpr RAJA_HOST_DEVICE auto RAJA::expt::invoke_body ( Params &&  params,
Fn &&  f,
Ts &&...  extra 
)
constexpr

◆ Reduce() [1/2]

template<template< typename, typename, typename > class Op, typename T >
constexpr auto RAJA::expt::Reduce ( T *  target)
constexpr

◆ Reduce() [2/2]

template<template< typename, typename, typename > class Op, typename T , typename IndexType >
constexpr auto RAJA::expt::Reduce ( ValLoc< T, IndexType > *  target)
constexpr

◆ ReduceLoc()

template<template< typename, typename, typename > class Op, typename T , typename IndexType >
constexpr auto RAJA::expt::ReduceLoc ( T *  target,
IndexType *  index 
)
constexpr

◆ toColIndex()

template<typename IDX , typename MATRIX_TYPE >
RAJA_HOST_DEVICE constexpr RAJA_INLINE ColIndex<IDX, MATRIX_TYPE> RAJA::expt::toColIndex ( RowIndex< IDX, MATRIX_TYPE > const &  r)
constexpr

Converts a Row index to a Column index

◆ toRowIndex()

template<typename IDX , typename MATRIX_TYPE >
RAJA_HOST_DEVICE constexpr RAJA_INLINE RowIndex<IDX, MATRIX_TYPE> RAJA::expt::toRowIndex ( ColIndex< IDX, MATRIX_TYPE > const &  c)
constexpr

Converts a Column index to a Row index

◆ operator+()

template<typename LEFT , typename RIGHT , typename std::enable_if< std::is_arithmetic< LEFT >::value, bool >::type = true, typename std::enable_if< std::is_base_of< RAJA::internal::expt::TensorRegisterConcreteBase, RIGHT >::value, bool >::type = true>
RAJA_INLINE RAJA_HOST_DEVICE RIGHT RAJA::expt::operator+ ( LEFT const &  lhs,
RIGHT const &  rhs 
)

◆ operator-()

template<typename LEFT , typename RIGHT , typename std::enable_if< std::is_arithmetic< LEFT >::value, bool >::type = true, typename std::enable_if< std::is_base_of< RAJA::internal::expt::TensorRegisterConcreteBase, RIGHT >::value, bool >::type = true>
RAJA_INLINE RAJA_HOST_DEVICE RIGHT RAJA::expt::operator- ( LEFT const &  lhs,
RIGHT const &  rhs 
)

◆ operator*()

template<typename LEFT , typename RIGHT , typename std::enable_if< std::is_arithmetic< LEFT >::value, bool >::type = true, typename std::enable_if< std::is_base_of< RAJA::internal::expt::TensorRegisterConcreteBase, RIGHT >::value, bool >::type = true>
RAJA_INLINE RAJA_HOST_DEVICE RIGHT RAJA::expt::operator* ( LEFT const &  lhs,
RIGHT const &  rhs 
)

◆ operator/()

template<typename LEFT , typename RIGHT , typename std::enable_if< std::is_arithmetic< LEFT >::value, bool >::type = true, typename std::enable_if< std::is_base_of< RAJA::internal::expt::TensorRegisterConcreteBase, RIGHT >::value, bool >::type = true>
RAJA_INLINE RAJA_HOST_DEVICE RIGHT RAJA::expt::operator/ ( LEFT const &  lhs,
RIGHT const &  rhs 
)