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

Namespaces

 ET
 

Classes

struct  MatrixMatrixMultiplyHelper
 
struct  MatrixMatrixMultiplyHelper< RAJA::expt::TensorRegister< REGISTER_POLICY, T, RAJA::expt::RowMajorLayout, camp::idx_seq< N_SIZE, M_SIZE > >, RAJA::expt::TensorRegister< REGISTER_POLICY, T, RAJA::expt::RowMajorLayout, camp::idx_seq< M2_SIZE, O_SIZE > > >
 
struct  MatrixMatrixMultiplyHelper< RAJA::expt::TensorRegister< REGISTER_POLICY, T, RAJA::expt::ColMajorLayout, camp::idx_seq< N_SIZE, M_SIZE > >, RAJA::expt::TensorRegister< REGISTER_POLICY, T, RAJA::expt::ColMajorLayout, camp::idx_seq< M2_SIZE, O_SIZE > > >
 
class  RegisterConcreteBase
 
class  RegisterBase
 
class  RegisterBase< RAJA::expt::Register< T, REGISTER_POLICY > >
 
struct  TensorIndexTraits
 
struct  TensorIndexTraits< RAJA::expt::TensorIndex< IDX, TENSOR_TYPE, DIM > >
 
struct  TensorIndexTraits< RAJA::expt::StaticTensorIndex< RAJA::expt::StaticTensorIndexInner< IDX, TENSOR_TYPE, DIM, INDEX_VALUE, LENGTH_VALUE > > >
 
struct  StaticIndexArray
 
struct  PrependStaticIndexArray
 
struct  AddStaticIndexArray
 
struct  SetStaticIndexArray
 
struct  StaticIndexArray< camp::int_seq< INDEX_TYPE, HEAD, TAIL... > >
 
struct  StaticIndexArray< camp::int_seq< INDEX_TYPE > >
 
struct  PrependStaticIndexArray< INDEX_TYPE, NEW_HEAD, StaticIndexArray< camp::int_seq< INDEX_TYPE, ORIG_INTS... > > >
 
struct  AddStaticIndexArray< INDEX_TYPE, IDX, DELTA, StaticIndexArray< camp::int_seq< INDEX_TYPE, HEAD, TAIL... > > >
 
struct  AddStaticIndexArray< INDEX_TYPE, 0, DELTA, StaticIndexArray< camp::int_seq< INDEX_TYPE, HEAD, TAIL... > > >
 
struct  SetStaticIndexArray< INDEX_TYPE, IDX, VALUE, StaticIndexArray< camp::int_seq< INDEX_TYPE, HEAD, TAIL... > > >
 
struct  SetStaticIndexArray< INDEX_TYPE, 0, VALUE, StaticIndexArray< camp::int_seq< INDEX_TYPE, HEAD, TAIL... > > >
 
struct  TensorTile
 
struct  StaticTensorTile
 
struct  StaticTensorTile< INDEX_TYPE, TENSOR_SIZE, camp::int_seq< INDEX_TYPE, BeginInts... >, camp::int_seq< INDEX_TYPE, SizeInts... > >
 
struct  SetStaticTensorTileBegin
 
struct  SetStaticTensorTileBegin< StaticTensorTile< INDEX_TYPE, TENSOR_SIZE, TBEGIN, TSIZE >, camp::integral_constant< INDEX_TYPE, VALUE >, IDX >
 
struct  SetStaticTensorTileSize
 
struct  SetStaticTensorTileSize< StaticTensorTile< INDEX_TYPE, TENSOR_SIZE, TBEGIN, TSIZE >, camp::integral_constant< INDEX_TYPE, VALUE >, IDX >
 
struct  TensorRef
 
struct  StaticTensorRef
 
struct  StaticTensorRef< POINTER_TYPE, INDEX_TYPE, TENSOR_SIZE, camp::int_seq< INDEX_TYPE, StrideInts... >, camp::int_seq< INDEX_TYPE, BeginInts... >, camp::int_seq< INDEX_TYPE, SizeInts... >, STRIDE_ONE_DIM >
 
struct  MergeRefTile
 
struct  MergeRefTile< REF_TYPE, TILE_TYPE, camp::idx_seq< DIM_SEQ... > >
 
struct  MergeRefTile< StaticTensorRef< POINTER_TYPE, INDEX_TYPE1, RTENSOR_SIZE, STRIDE, camp::int_seq< INDEX_TYPE1, BEGIN1... >, camp::int_seq< INDEX_TYPE1, SIZE1... >, STRIDE_ONE_DIM >, StaticTensorTile< INDEX_TYPE2, TENSOR_SIZE, BEGIN2, SIZE2 >, camp::idx_seq< DIM_SEQ... > >
 
struct  TensorDimSize
 
struct  TensorDefaultOperation
 
struct  TensorRegisterStoreRef
 
struct  DivideRoundUp
 
class  TensorRegisterConcreteBase
 
class  TensorRegisterBase
 
class  TensorRegisterBase< RAJA::expt::TensorRegister< REGISTER_POLICY, T, LAYOUT, camp::idx_seq< SIZES... > > >
 
struct  StaticTensorTileExec
 
struct  TensorTileExec
 
struct  TensorTileExec< STORAGE, camp::idx_seq< DIM0, DIM_REST... > >
 
struct  TensorTileExec< STORAGE, camp::idx_seq<> >
 
struct  StaticTensorTileExec< STORAGE, camp::idx_seq< DIM0, DIM_REST... >, camp::idx_seq< IDX, IDX_REST... > >
 
struct  StaticTensorTileExec< STORAGE, camp::idx_seq< DIM0 >, camp::idx_seq< IDX, IDX_REST... > >
 
struct  StaticTensorTileExec< STORAGE, camp::idx_seq< DIM_REST... >, camp::idx_seq<> >
 
struct  RegisterTraits< RAJA::expt::scalar_register, int32_t >
 
struct  RegisterTraits< RAJA::expt::scalar_register, int64_t >
 
struct  RegisterTraits< RAJA::expt::scalar_register, float >
 
struct  RegisterTraits< RAJA::expt::scalar_register, double >
 
struct  RegisterTraits
 

Enumerations

enum  TensorTileSize { TENSOR_PARTIAL , TENSOR_FULL , TENSOR_MULTIPLE }
 

Functions

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< RegisterConcreteBase, 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< RegisterConcreteBase, 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< RegisterConcreteBase, 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< RegisterConcreteBase, RIGHT >::value, bool >::type = true>
RAJA_INLINE RAJA_HOST_DEVICE RIGHT operator/ (LEFT const &lhs, RIGHT const &rhs)
 
template<typename ARG >
RAJA_INLINE constexpr RAJA_HOST_DEVICE bool isTensorIndex ()
 
template<typename ARG >
RAJA_INLINE constexpr RAJA_HOST_DEVICE auto stripTensorIndex (ARG const &arg) -> typename TensorIndexTraits< ARG >::arg_type const &
 
template<typename ARG >
RAJA_INLINE constexpr RAJA_HOST_DEVICE auto stripTensorIndexByValue (ARG const arg) -> typename TensorIndexTraits< ARG >::arg_type const
 
template<typename ARG , typename IDX >
RAJA_INLINE constexpr RAJA_HOST_DEVICE IDX getTensorSize (ARG const &arg, IDX dim_size)
 
template<typename ARG , typename IDX >
RAJA_INLINE constexpr RAJA_HOST_DEVICE IDX getTensorBegin (ARG const &arg, IDX dim_minval)
 
template<typename ARG >
RAJA_INLINE constexpr RAJA_HOST_DEVICE auto getTensorDim () -> decltype(TensorIndexTraits< ARG >::dim())
 
template<typename REF_TYPE , typename TILE_TYPE >
RAJA_INLINE constexpr RAJA_HOST_DEVICE auto merge_ref_tile (REF_TYPE const &ref, TILE_TYPE const &tile) -> typename MergeRefTile< REF_TYPE, TILE_TYPE, camp::make_idx_seq_t< TILE_TYPE::s_num_dims >>::merge_type
 
template<typename REF_TYPE , typename TILE_TYPE >
RAJA_INLINE constexpr RAJA_HOST_DEVICE auto shift_tile_origin (REF_TYPE const &ref, TILE_TYPE const &tile_origin) -> typename MergeRefTile< REF_TYPE, TILE_TYPE, camp::make_idx_seq_t< TILE_TYPE::s_num_dims >>::shift_type
 
template<typename INDEX_TYPE , TensorTileSize RTENSOR_SIZE, camp::idx_t NUM_DIMS>
RAJA_INLINE constexpr RAJA_HOST_DEVICE TensorTile< INDEX_TYPE, TENSOR_FULL, NUM_DIMS > & make_tensor_tile_full (TensorTile< INDEX_TYPE, RTENSOR_SIZE, NUM_DIMS > &tile)
 
template<typename INDEX_TYPE , TensorTileSize RTENSOR_SIZE, camp::idx_t NUM_DIMS>
RAJA_INLINE constexpr RAJA_HOST_DEVICE TensorTile< INDEX_TYPE, TENSOR_PARTIAL, NUM_DIMS > & make_tensor_tile_partial (TensorTile< INDEX_TYPE, RTENSOR_SIZE, NUM_DIMS > &tile)
 
template<typename INDEX_TYPE , TensorTileSize RTENSOR_SIZE, typename TBEGIN , typename TSIZE >
RAJA_INLINE constexpr RAJA_HOST_DEVICE StaticTensorTile< INDEX_TYPE, TENSOR_FULL, TBEGIN, TSIZE > & make_tensor_tile_full (StaticTensorTile< INDEX_TYPE, RTENSOR_SIZE, TBEGIN, TSIZE > &tile)
 
template<typename INDEX_TYPE , TensorTileSize RTENSOR_SIZE, typename TBEGIN , typename TSIZE >
RAJA_INLINE constexpr RAJA_HOST_DEVICE StaticTensorTile< INDEX_TYPE, TENSOR_PARTIAL, TBEGIN, TSIZE > & make_tensor_tile_partial (StaticTensorTile< INDEX_TYPE, RTENSOR_SIZE, TBEGIN, TSIZE > &tile)
 
template<typename STORAGE , typename TILE_TYPE , typename BODY , camp::idx_t... IDX_SEQ, camp::idx_t... DIM_SEQ>
RAJA_INLINE RAJA_HOST_DEVICE void tensorTileExec_expanded (TILE_TYPE const &orig_tile, BODY &&body, camp::idx_seq< IDX_SEQ... > const &, camp::idx_seq< DIM_SEQ... > const &)
 
template<typename STORAGE , typename INDEX_TYPE , TensorTileSize TENSOR_SIZE, typename TBEGIN , typename TSIZE , typename BODY , camp::idx_t... IDX_SEQ, camp::idx_t... DIM_SEQ>
RAJA_INLINE RAJA_HOST_DEVICE void tensorTileExec_expanded (StaticTensorTile< INDEX_TYPE, TENSOR_SIZE, TBEGIN, TSIZE > const &orig_tile, BODY &&body, camp::idx_seq< IDX_SEQ... > const &, camp::idx_seq< DIM_SEQ... > const &)
 
template<typename STORAGE , typename TILE_TYPE , typename BODY >
RAJA_INLINE RAJA_HOST_DEVICE void tensorTileExec (TILE_TYPE const &tile, BODY &&body)
 

Enumeration Type Documentation

◆ TensorTileSize

Enumerator
TENSOR_PARTIAL 
TENSOR_FULL 
TENSOR_MULTIPLE 

Function Documentation

◆ 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< RegisterConcreteBase, RIGHT >::value, bool >::type = true>
RAJA_INLINE RAJA_HOST_DEVICE RIGHT RAJA::internal::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< RegisterConcreteBase, RIGHT >::value, bool >::type = true>
RAJA_INLINE RAJA_HOST_DEVICE RIGHT RAJA::internal::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< RegisterConcreteBase, RIGHT >::value, bool >::type = true>
RAJA_INLINE RAJA_HOST_DEVICE RIGHT RAJA::internal::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< RegisterConcreteBase, RIGHT >::value, bool >::type = true>
RAJA_INLINE RAJA_HOST_DEVICE RIGHT RAJA::internal::expt::operator/ ( LEFT const &  lhs,
RIGHT const &  rhs 
)

◆ isTensorIndex()

template<typename ARG >
RAJA_INLINE constexpr RAJA_HOST_DEVICE bool RAJA::internal::expt::isTensorIndex ( )
constexpr

◆ stripTensorIndex()

template<typename ARG >
RAJA_INLINE constexpr RAJA_HOST_DEVICE auto RAJA::internal::expt::stripTensorIndex ( ARG const &  arg) -> typename TensorIndexTraits<ARG>::arg_type const&
constexpr

◆ stripTensorIndexByValue()

template<typename ARG >
RAJA_INLINE constexpr RAJA_HOST_DEVICE auto RAJA::internal::expt::stripTensorIndexByValue ( ARG const  arg) -> typename TensorIndexTraits<ARG>::arg_type const
constexpr

◆ getTensorSize()

template<typename ARG , typename IDX >
RAJA_INLINE constexpr RAJA_HOST_DEVICE IDX RAJA::internal::expt::getTensorSize ( ARG const &  arg,
IDX  dim_size 
)
constexpr

◆ getTensorBegin()

template<typename ARG , typename IDX >
RAJA_INLINE constexpr RAJA_HOST_DEVICE IDX RAJA::internal::expt::getTensorBegin ( ARG const &  arg,
IDX  dim_minval 
)
constexpr

◆ getTensorDim()

template<typename ARG >
RAJA_INLINE constexpr RAJA_HOST_DEVICE auto RAJA::internal::expt::getTensorDim ( ) -> decltype(TensorIndexTraits<ARG>::dim())
constexpr

◆ merge_ref_tile()

template<typename REF_TYPE , typename TILE_TYPE >
RAJA_INLINE constexpr RAJA_HOST_DEVICE auto RAJA::internal::expt::merge_ref_tile ( REF_TYPE const &  ref,
TILE_TYPE const &  tile 
) -> typename MergeRefTile< REF_TYPE, TILE_TYPE, camp::make_idx_seq_t<TILE_TYPE::s_num_dims>>::merge_type
constexpr

◆ shift_tile_origin()

template<typename REF_TYPE , typename TILE_TYPE >
RAJA_INLINE constexpr RAJA_HOST_DEVICE auto RAJA::internal::expt::shift_tile_origin ( REF_TYPE const &  ref,
TILE_TYPE const &  tile_origin 
) -> typename MergeRefTile< REF_TYPE, TILE_TYPE, camp::make_idx_seq_t<TILE_TYPE::s_num_dims>>::shift_type
constexpr

Modifies a ref's pointer so that the supplied tile_origin will resolve to the original pointer.

◆ make_tensor_tile_full() [1/2]

template<typename INDEX_TYPE , TensorTileSize RTENSOR_SIZE, camp::idx_t NUM_DIMS>
RAJA_INLINE constexpr RAJA_HOST_DEVICE TensorTile<INDEX_TYPE, TENSOR_FULL, NUM_DIMS>& RAJA::internal::expt::make_tensor_tile_full ( TensorTile< INDEX_TYPE, RTENSOR_SIZE, NUM_DIMS > &  tile)
constexpr

Changes TensorTile size type to FULL

◆ make_tensor_tile_partial() [1/2]

template<typename INDEX_TYPE , TensorTileSize RTENSOR_SIZE, camp::idx_t NUM_DIMS>
RAJA_INLINE constexpr RAJA_HOST_DEVICE TensorTile<INDEX_TYPE, TENSOR_PARTIAL, NUM_DIMS>& RAJA::internal::expt::make_tensor_tile_partial ( TensorTile< INDEX_TYPE, RTENSOR_SIZE, NUM_DIMS > &  tile)
constexpr

Changes TensorTile size type to PARTIAL

◆ make_tensor_tile_full() [2/2]

template<typename INDEX_TYPE , TensorTileSize RTENSOR_SIZE, typename TBEGIN , typename TSIZE >
RAJA_INLINE constexpr RAJA_HOST_DEVICE StaticTensorTile<INDEX_TYPE, TENSOR_FULL, TBEGIN, TSIZE>& RAJA::internal::expt::make_tensor_tile_full ( StaticTensorTile< INDEX_TYPE, RTENSOR_SIZE, TBEGIN, TSIZE > &  tile)
constexpr

Changes StaticTensorTile size type to FULL

◆ make_tensor_tile_partial() [2/2]

template<typename INDEX_TYPE , TensorTileSize RTENSOR_SIZE, typename TBEGIN , typename TSIZE >
RAJA_INLINE constexpr RAJA_HOST_DEVICE StaticTensorTile<INDEX_TYPE, TENSOR_PARTIAL, TBEGIN, TSIZE>& RAJA::internal::expt::make_tensor_tile_partial ( StaticTensorTile< INDEX_TYPE, RTENSOR_SIZE, TBEGIN, TSIZE > &  tile)
constexpr

Changes StaticTensorTile size type to PARTIAL

◆ tensorTileExec_expanded() [1/2]

template<typename STORAGE , typename TILE_TYPE , typename BODY , camp::idx_t... IDX_SEQ, camp::idx_t... DIM_SEQ>
RAJA_INLINE RAJA_HOST_DEVICE void RAJA::internal::expt::tensorTileExec_expanded ( TILE_TYPE const &  orig_tile,
BODY &&  body,
camp::idx_seq< IDX_SEQ... > const &  ,
camp::idx_seq< DIM_SEQ... > const &   
)

◆ tensorTileExec_expanded() [2/2]

template<typename STORAGE , typename INDEX_TYPE , TensorTileSize TENSOR_SIZE, typename TBEGIN , typename TSIZE , typename BODY , camp::idx_t... IDX_SEQ, camp::idx_t... DIM_SEQ>
RAJA_INLINE RAJA_HOST_DEVICE void RAJA::internal::expt::tensorTileExec_expanded ( StaticTensorTile< INDEX_TYPE, TENSOR_SIZE, TBEGIN, TSIZE > const &  orig_tile,
BODY &&  body,
camp::idx_seq< IDX_SEQ... > const &  ,
camp::idx_seq< DIM_SEQ... > const &   
)

◆ tensorTileExec()

template<typename STORAGE , typename TILE_TYPE , typename BODY >
RAJA_INLINE RAJA_HOST_DEVICE void RAJA::internal::expt::tensorTileExec ( TILE_TYPE const &  tile,
BODY &&  body 
)