Merge_v2r2_magic_division< LowLengths > Struct Template Reference

Merge_v2r2_magic_division&lt; LowLengths &gt; Struct Template Reference#

Composable Kernel: ck::Merge_v2r2_magic_division< LowLengths > Struct Template Reference
ck::Merge_v2r2_magic_division< LowLengths > Struct Template Reference

#include <multi_index_transform.hpp>

Public Types

using LowerIndex = MultiIndex< NDimLow >
 
using UpperIndex = MultiIndex< 1 >
 
using LowLengthsScan = decltype(container_reverse_exclusive_scan(LowLengths{}, math::multiplies{}, Number< 1 >{}))
 
using UpLengths = decltype(make_tuple(container_reduce(LowLengths{}, math::multiplies{}, Number< 1 >{})))
 
using LowLengthsScanMagicDivisorMultipiler = decltype(generate_tuple(lambda_merge_generate_MagicDivision_calculate_magic_multiplier< LowLengthsScan >{}, Number< NDimLow >{}))
 
using LowLengthsScanMagicDivisorShift = decltype(generate_tuple(lambda_merge_generate_MagicDivision_calculate_magic_shift< LowLengthsScan >{}, Number< NDimLow >{}))
 

Public Member Functions

__host__ constexpr __device__ Merge_v2r2_magic_division ()=default
 
__host__ constexpr __device__ Merge_v2r2_magic_division (const LowLengths &low_lengths)
 
__host__ constexpr __device__ const auto & GetUpperLengths () const
 
template<typename LowIdx , typename UpIdx >
__host__ constexpr __device__ void CalculateLowerIndex (LowIdx &idx_low, const UpIdx &idx_up) const
 
template<typename LowIdxDiff , typename UpIdxDiff , typename LowIdx , typename UpIdx , index_t Hack>
__host__ __device__ void UpdateLowerIndex (LowIdxDiff &idx_diff_low, const UpIdxDiff &, LowIdx &idx_low, const UpIdx &idx_up_new, Number< Hack >) const
 
__host__ __device__ void Print () const
 

Static Public Member Functions

__host__ static constexpr __device__ index_t GetNumOfLowerDimension ()
 
__host__ static constexpr __device__ index_t GetNumOfUpperDimension ()
 
__host__ static constexpr __device__ bool IsLinearTransform ()
 
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex ()
 
__host__ static constexpr __device__ bool IsKnownAtCompileTime ()
 
template<typename UpIdx >
__host__ static constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex (const UpIdx &)
 

Public Attributes

LowLengths low_lengths_
 
LowLengthsScan low_lengths_scan_
 
LowLengthsScanMagicDivisorMultipiler low_lengths_scan_magic_divisor_multiplier_
 
LowLengthsScanMagicDivisorShift low_lengths_scan_magic_divisor_shift_
 
UpLengths up_lengths_
 

Static Public Attributes

static constexpr index_t NDimLow = LowLengths::Size()
 

Member Typedef Documentation

◆ LowerIndex

template<typename LowLengths >
using ck::Merge_v2r2_magic_division< LowLengths >::LowerIndex = MultiIndex<NDimLow>

◆ LowLengthsScan

template<typename LowLengths >
using ck::Merge_v2r2_magic_division< LowLengths >::LowLengthsScan = decltype(container_reverse_exclusive_scan(LowLengths{}, math::multiplies{}, Number<1>{}))

◆ LowLengthsScanMagicDivisorMultipiler

◆ LowLengthsScanMagicDivisorShift

◆ UpLengths

template<typename LowLengths >
using ck::Merge_v2r2_magic_division< LowLengths >::UpLengths = decltype(make_tuple(container_reduce(LowLengths{}, math::multiplies{}, Number<1>{})))

◆ UpperIndex

template<typename LowLengths >
using ck::Merge_v2r2_magic_division< LowLengths >::UpperIndex = MultiIndex<1>

Constructor & Destructor Documentation

◆ Merge_v2r2_magic_division() [1/2]

template<typename LowLengths >
__host__ constexpr __device__ ck::Merge_v2r2_magic_division< LowLengths >::Merge_v2r2_magic_division ( )
constexprdefault

◆ Merge_v2r2_magic_division() [2/2]

template<typename LowLengths >
__host__ constexpr __device__ ck::Merge_v2r2_magic_division< LowLengths >::Merge_v2r2_magic_division ( const LowLengths &  low_lengths)
inlineconstexpr

Member Function Documentation

◆ CalculateLowerIndex()

template<typename LowLengths >
template<typename LowIdx , typename UpIdx >
__host__ constexpr __device__ void ck::Merge_v2r2_magic_division< LowLengths >::CalculateLowerIndex ( LowIdx &  idx_low,
const UpIdx &  idx_up 
) const
inlineconstexpr

◆ GetNumOfLowerDimension()

template<typename LowLengths >
__host__ static constexpr __device__ index_t ck::Merge_v2r2_magic_division< LowLengths >::GetNumOfLowerDimension ( )
inlinestaticconstexpr

◆ GetNumOfUpperDimension()

template<typename LowLengths >
__host__ static constexpr __device__ index_t ck::Merge_v2r2_magic_division< LowLengths >::GetNumOfUpperDimension ( )
inlinestaticconstexpr

◆ GetUpperLengths()

template<typename LowLengths >
__host__ constexpr __device__ const auto& ck::Merge_v2r2_magic_division< LowLengths >::GetUpperLengths ( ) const
inlineconstexpr

◆ IsKnownAtCompileTime()

template<typename LowLengths >
__host__ static constexpr __device__ bool ck::Merge_v2r2_magic_division< LowLengths >::IsKnownAtCompileTime ( )
inlinestaticconstexpr

◆ IsLinearTransform()

template<typename LowLengths >
__host__ static constexpr __device__ bool ck::Merge_v2r2_magic_division< LowLengths >::IsLinearTransform ( )
inlinestaticconstexpr

◆ IsValidUpperIndexAlwaysMappedToValidLowerIndex()

template<typename LowLengths >
__host__ static constexpr __device__ bool ck::Merge_v2r2_magic_division< LowLengths >::IsValidUpperIndexAlwaysMappedToValidLowerIndex ( )
inlinestaticconstexpr

◆ IsValidUpperIndexMappedToValidLowerIndex()

template<typename LowLengths >
template<typename UpIdx >
__host__ static constexpr __device__ bool ck::Merge_v2r2_magic_division< LowLengths >::IsValidUpperIndexMappedToValidLowerIndex ( const UpIdx &  )
inlinestaticconstexpr

◆ Print()

template<typename LowLengths >
__host__ __device__ void ck::Merge_v2r2_magic_division< LowLengths >::Print ( ) const
inline

◆ UpdateLowerIndex()

template<typename LowLengths >
template<typename LowIdxDiff , typename UpIdxDiff , typename LowIdx , typename UpIdx , index_t Hack>
__host__ __device__ void ck::Merge_v2r2_magic_division< LowLengths >::UpdateLowerIndex ( LowIdxDiff &  idx_diff_low,
const UpIdxDiff &  ,
LowIdx &  idx_low,
const UpIdx &  idx_up_new,
Number< Hack >   
) const
inline

Member Data Documentation

◆ low_lengths_

template<typename LowLengths >
LowLengths ck::Merge_v2r2_magic_division< LowLengths >::low_lengths_

◆ low_lengths_scan_

template<typename LowLengths >
LowLengthsScan ck::Merge_v2r2_magic_division< LowLengths >::low_lengths_scan_

◆ low_lengths_scan_magic_divisor_multiplier_

template<typename LowLengths >
LowLengthsScanMagicDivisorMultipiler ck::Merge_v2r2_magic_division< LowLengths >::low_lengths_scan_magic_divisor_multiplier_

◆ low_lengths_scan_magic_divisor_shift_

template<typename LowLengths >
LowLengthsScanMagicDivisorShift ck::Merge_v2r2_magic_division< LowLengths >::low_lengths_scan_magic_divisor_shift_

◆ NDimLow

template<typename LowLengths >
constexpr index_t ck::Merge_v2r2_magic_division< LowLengths >::NDimLow = LowLengths::Size()
staticconstexpr

◆ up_lengths_

template<typename LowLengths >
UpLengths ck::Merge_v2r2_magic_division< LowLengths >::up_lengths_

The documentation for this struct was generated from the following file:
  • /home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/docs-6.4.3/include/ck/tensor_description/multi_index_transform.hpp