/home/docs/checkouts/readthedocs.org/user_builds/advanced-micro-devices-composable-kernel/checkouts/develop/include/ck/tensor_description/multi_index_transform.hpp Source File#
multi_index_transform.hpp
Go to the documentation of this file.
379 // 3) Tuple of mixture of index_t and Number, which is known partially at run-time and partially
1022 // Implementation of "Merge" transformation primitive that uses magic-number-division to do lowering
1028 // dividend would be bit-wise interpreted as uint32_t and magic number division implementation for
1174 // Implementation of "Merge" transformation primitive that uses magic-number-division to do lowering
1180 // dividend would be bit-wise interpreted as uint32_t and magic number division implementation for
1333 // Implementation of "Merge" transformation primitive that uses division and mod. It is supposed to
1334 // be used for low_lengths that are known at compile time and are power of 2, otherwise performance
1843 __host__ __device__ constexpr bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx&) const
__host__ __device__ multiplies() -> multiplies< void, void >
FIXME: create macro to replace 'host device' and nothing more.
Definition: ck.hpp:267
__host__ constexpr __device__ auto generate_tuple(F &&f, Number< N >)
Definition: tuple_helper.hpp:21
__host__ constexpr __device__ auto container_reverse_exclusive_scan(const Array< TData, NSize > &x, Reduce f, TData init)
Definition: container_helper.hpp:213
__host__ constexpr __device__ auto container_reduce(const Container &x, Reduce reduce, Init init, Number< IBegin >=Number< 0 >{}, Number< IEnd >=Number< Container::Size()>{}, Number< IStep >=Number< 1 >{})
Definition: container_helper.hpp:111
__host__ __device__ void print_multi_index(const Tuple< Xs... > &x)
Definition: statically_indexed_array_multi_index.hpp:147
Definition: array.hpp:14
Definition: multi_index_transform.hpp:385
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:406
__host__ static constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &)
Definition: multi_index_transform.hpp:454
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:404
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:445
__host__ constexpr __device__ Embed()=default
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:409
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:459
__host__ constexpr __device__ Embed(const UpLengths &up_lengths, const Coefficients &coefficients)
Definition: multi_index_transform.hpp:396
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:447
__host__ __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_diff_up, LowIdx &idx_low, const UpIdx &, Number< Hack >) const
Definition: multi_index_transform.hpp:427
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:402
Definition: multi_index_transform.hpp:1558
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:1609
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:1565
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:1595
__host__ static constexpr __device__ auto GetUpperLengths()
Definition: multi_index_transform.hpp:1569
__host__ static __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &, LowIdx &, const UpIdx &, Number< Hack >)
Definition: multi_index_transform.hpp:1586
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:1567
__host__ static constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &)
Definition: multi_index_transform.hpp:1604
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &) const
Definition: multi_index_transform.hpp:1572
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:1597
__host__ constexpr __device__ Freeze(const LowerIndex &low_idx)
Definition: multi_index_transform.hpp:1563
__host__ constexpr __device__ Freeze()=default
Definition: multi_index_transform.hpp:1624
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:1638
__host__ constexpr __device__ Insert()=default
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &, const UpIdx &) const
Definition: multi_index_transform.hpp:1643
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:1636
__host__ constexpr __device__ Insert(const UpperLength &up_length)
Definition: multi_index_transform.hpp:1631
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:1676
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:1662
decltype(make_tuple(UpperLength{})) UpLengths
Definition: multi_index_transform.hpp:1625
__host__ static constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &)
Definition: multi_index_transform.hpp:1671
__host__ static __device__ void UpdateLowerIndex(LowIdxDiff &, const UpIdxDiff &, LowIdx &, const UpIdx &, Number< Hack >)
Definition: multi_index_transform.hpp:1655
__host__ constexpr __device__ auto GetUpperLengths() const
Definition: multi_index_transform.hpp:1640
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:1664
Definition: multi_index_transform.hpp:196
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:215
__host__ constexpr __device__ LeftPad(const LowLength &low_length, const LeftPadLength &left_pad_length)
Definition: multi_index_transform.hpp:207
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:251
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:265
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:213
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:220
decltype(make_tuple(LowLength{}+LeftPadLength{})) UpLengths
Definition: multi_index_transform.hpp:200
__host__ constexpr __device__ LeftPad()=default
LeftPadLength left_pad_length_
Definition: multi_index_transform.hpp:203
__host__ static __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_diff_up, LowIdx &idx_low, const UpIdx &, Number< Hack >)
Definition: multi_index_transform.hpp:234
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:217
__host__ constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:260
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:253
Definition: multi_index_transform.hpp:481
__host__ __device__ void UpdateLowerIndex_2(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_diff_up, LowIdx &idx_low, const UpIdx &, Number< Hack >) const
Definition: multi_index_transform.hpp:822
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:967
LowLengths low_lengths_
Definition: multi_index_transform.hpp:493
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:508
__host__ __device__ void UpdateLowerIndex_1b(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_diff_up, LowIdx &idx_low, const UpIdx &, Number< Hack >) const
Definition: multi_index_transform.hpp:680
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:969
static constexpr index_t NDimLow
Definition: multi_index_transform.hpp:482
__host__ static constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &)
Definition: multi_index_transform.hpp:983
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:515
decltype(make_tuple(container_reduce(LowLengths{}, math::multiplies{}, Number< 1 >{}))) UpLengths
Definition: multi_index_transform.hpp:491
__host__ constexpr __device__ Merge_v1_carry_check(const LowLengths &low_lengths)
Definition: multi_index_transform.hpp:499
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:974
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:510
decltype(container_reverse_exclusive_scan(LowLengths{}, math::multiplies{}, Number< 1 >{})) LowLengthsScan
Definition: multi_index_transform.hpp:488
__host__ constexpr __device__ Merge_v1_carry_check()=default
__host__ __device__ void Print() const
Definition: multi_index_transform.hpp:988
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:512
__host__ __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_diff_up, LowIdx &idx_low, const UpIdx &idx_up_new, Number< Hack >) const
Definition: multi_index_transform.hpp:952
LowLengthsScan low_lengths_scan_
Definition: multi_index_transform.hpp:494
__host__ __device__ void UpdateLowerIndex_1a(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_diff_up, LowIdx &idx_low, const UpIdx &, Number< Hack >) const
Definition: multi_index_transform.hpp:537
Definition: multi_index_transform.hpp:1036
LowLengthsMagicDivisorShift low_lengths_magic_divisor_shift_
Definition: multi_index_transform.hpp:1055
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:1138
UpLengths up_lengths_
Definition: multi_index_transform.hpp:1056
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:1077
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:1073
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:1075
LowLengthsMagicDivisorMultipiler low_lengths_magic_divisor_multiplier_
Definition: multi_index_transform.hpp:1054
decltype(make_tuple(container_reduce(LowLengths{}, math::multiplies{}, Number< 1 >{}))) UpLengths
Definition: multi_index_transform.hpp:1043
LowLengths low_lengths_
Definition: multi_index_transform.hpp:1053
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:1136
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:1080
__host__ __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &, LowIdx &idx_low, const UpIdx &idx_up_new, Number< Hack >) const
Definition: multi_index_transform.hpp:1105
__host__ static constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &)
Definition: multi_index_transform.hpp:1153
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:1143
decltype(generate_tuple(lambda_merge_generate_MagicDivision_calculate_magic_multiplier< LowLengths >{}, Number< NDimLow >{})) LowLengthsMagicDivisorMultipiler
Definition: multi_index_transform.hpp:1047
__host__ constexpr __device__ Merge_v2_magic_division(const LowLengths &low_lengths)
Definition: multi_index_transform.hpp:1060
decltype(generate_tuple(lambda_merge_generate_MagicDivision_calculate_magic_shift< LowLengths >{}, Number< NDimLow >{})) LowLengthsMagicDivisorShift
Definition: multi_index_transform.hpp:1051
__host__ __device__ void Print() const
Definition: multi_index_transform.hpp:1158
__host__ constexpr __device__ Merge_v2_magic_division()=default
Definition: multi_index_transform.hpp:1188
LowLengths low_lengths_
Definition: multi_index_transform.hpp:1208
__host__ __device__ void Print() const
Definition: multi_index_transform.hpp:1315
__host__ constexpr __device__ Merge_v2r2_magic_division()=default
decltype(container_reverse_exclusive_scan(LowLengths{}, math::multiplies{}, Number< 1 >{})) LowLengthsScan
Definition: multi_index_transform.hpp:1195
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:1295
decltype(make_tuple(container_reduce(LowLengths{}, math::multiplies{}, Number< 1 >{}))) UpLengths
Definition: multi_index_transform.hpp:1198
LowLengthsScanMagicDivisorShift low_lengths_scan_magic_divisor_shift_
Definition: multi_index_transform.hpp:1211
UpLengths up_lengths_
Definition: multi_index_transform.hpp:1212
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:1233
LowLengthsScanMagicDivisorMultipiler low_lengths_scan_magic_divisor_multiplier_
Definition: multi_index_transform.hpp:1210
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:1293
__host__ constexpr __device__ Merge_v2r2_magic_division(const LowLengths &low_lengths)
Definition: multi_index_transform.hpp:1216
decltype(generate_tuple(lambda_merge_generate_MagicDivision_calculate_magic_shift< LowLengthsScan >{}, Number< NDimLow >{})) LowLengthsScanMagicDivisorShift
Definition: multi_index_transform.hpp:1206
decltype(generate_tuple(lambda_merge_generate_MagicDivision_calculate_magic_multiplier< LowLengthsScan >{}, Number< NDimLow >{})) LowLengthsScanMagicDivisorMultipiler
Definition: multi_index_transform.hpp:1202
__host__ __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &, LowIdx &idx_low, const UpIdx &idx_up_new, Number< Hack >) const
Definition: multi_index_transform.hpp:1263
LowLengthsScan low_lengths_scan_
Definition: multi_index_transform.hpp:1209
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:1235
__host__ static constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &)
Definition: multi_index_transform.hpp:1310
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:1231
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:1300
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:1238
Definition: multi_index_transform.hpp:1338
UpLengths up_lengths_
Definition: multi_index_transform.hpp:1352
__host__ __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &, LowIdx &idx_low, const UpIdx &idx_up_new, Number< Hack >) const
Definition: multi_index_transform.hpp:1394
__host__ __device__ void Print() const
Definition: multi_index_transform.hpp:1442
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:1365
__host__ static constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &)
Definition: multi_index_transform.hpp:1437
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:1428
LowLengthsScan low_lengths_scan_
Definition: multi_index_transform.hpp:1351
__host__ constexpr __device__ Merge_v3_division_mod(const LowLengths &low_lengths)
Definition: multi_index_transform.hpp:1356
LowLengths low_lengths_
Definition: multi_index_transform.hpp:1350
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:1367
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:1372
decltype(make_tuple(container_reduce(LowLengths{}, math::multiplies{}, Number< 1 >{}))) UpLengths
Definition: multi_index_transform.hpp:1348
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:1369
__host__ constexpr __device__ Merge_v3_division_mod()=default
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:1423
decltype(container_reverse_exclusive_scan(LowLengths{}, math::multiplies{}, Number< 1 >{})) LowLengthsScan
Definition: multi_index_transform.hpp:1345
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:1421
Definition: multi_index_transform.hpp:1873
__host__ static constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &)
Definition: multi_index_transform.hpp:1935
__host__ constexpr __device__ Modulo(const Modulus &modulus, const UpLength &up_length)
Definition: multi_index_transform.hpp:1883
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:1928
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:1890
__host__ __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_diff_up, LowIdx &idx_low, const UpIdx &up_idx, Number< Hack >) const
Definition: multi_index_transform.hpp:1909
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:1892
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:1940
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:1926
decltype(make_tuple(UpLength{})) UpLengths
Definition: multi_index_transform.hpp:1876
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:1888
__host__ constexpr __device__ Modulo()=default
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:1895
Definition: multi_index_transform.hpp:100
__host__ static __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_diff_up, LowIdx &idx_low, const UpIdx &, Number< Hack >)
Definition: multi_index_transform.hpp:142
__host__ constexpr __device__ Pad()=default
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:125
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:128
decltype(make_tuple(LowLength{}+LeftPadLength{}+RightPadLength{})) UpLengths
Definition: multi_index_transform.hpp:104
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:159
__host__ constexpr __device__ Pad(const LowLength &low_length, const LeftPadLength &left_pad_length, const RightPadLength &right_pad_length)
Definition: multi_index_transform.hpp:112
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:161
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:175
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:123
__host__ constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:168
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:121
Definition: multi_index_transform.hpp:13
__host__ constexpr __device__ PassThrough(const LowLength &low_length)
Definition: multi_index_transform.hpp:23
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:30
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:68
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:32
__host__ constexpr __device__ PassThrough()=default
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:66
__host__ static __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_diff_up, LowIdx &idx_low, const UpIdx &, Number< Hack >)
Definition: multi_index_transform.hpp:49
__host__ __device__ void Print() const
Definition: multi_index_transform.hpp:85
__host__ static constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &)
Definition: multi_index_transform.hpp:75
decltype(make_tuple(LowLength{})) UpLengths
Definition: multi_index_transform.hpp:17
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:28
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:80
__host__ static constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up)
Definition: multi_index_transform.hpp:35
Definition: multi_index_transform.hpp:284
__host__ static constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up)
Definition: multi_index_transform.hpp:311
__host__ constexpr __device__ RightPad()=default
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:342
__host__ constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:351
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:308
decltype(make_tuple(LowLength{}+RightPadLength{})) UpLengths
Definition: multi_index_transform.hpp:288
__host__ constexpr __device__ RightPad(const LowLength &low_length, const RightPadLength &right_pad_length)
Definition: multi_index_transform.hpp:296
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:356
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:304
__host__ static __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_diff_up, LowIdx &idx_low, const UpIdx &, Number< Hack >)
Definition: multi_index_transform.hpp:325
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:306
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:344
RightPadLength right_pad_length_
Definition: multi_index_transform.hpp:292
Definition: multi_index_transform.hpp:1776
decltype(make_tuple(SliceEnd{} - SliceBegin{})) UpLengths
Definition: multi_index_transform.hpp:1780
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:1797
__host__ constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &) const
Definition: multi_index_transform.hpp:1843
__host__ constexpr __device__ Slice(const LowLength &, const SliceBegin &slice_begin, const SliceEnd &slice_end)
Definition: multi_index_transform.hpp:1788
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:1804
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:1837
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:1801
__host__ static __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_diff_up, LowIdx &idx_low, const UpIdx &, Number< Hack >)
Definition: multi_index_transform.hpp:1818
__host__ constexpr __device__ Slice()=default
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:1799
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:1848
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:1835
Definition: tuple.hpp:186
Definition: multi_index_transform.hpp:1458
__host__ static constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &)
Definition: multi_index_transform.hpp:1533
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:1483
UpLengthsScan up_lengths_scan_
Definition: multi_index_transform.hpp:1468
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:1524
__host__ constexpr __device__ UnMerge()=default
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:1538
__host__ constexpr __device__ UnMerge(const UpLengths &up_lengths)
Definition: multi_index_transform.hpp:1472
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:1486
__host__ __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_diff_up, LowIdx &idx_low, const UpIdx &, Number< Hack >) const
Definition: multi_index_transform.hpp:1513
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:1479
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:1481
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:1526
decltype(container_reverse_exclusive_scan(UpLengths{}, math::multiplies{}, Number< 1 >{})) UpLengthsScan
Definition: multi_index_transform.hpp:1465
Definition: multi_index_transform.hpp:1690
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:1711
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:1747
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:1759
__host__ __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_diff_up, LowIdx &idx_low, const UpIdx &, Number< Hack >) const
Definition: multi_index_transform.hpp:1728
__host__ constexpr __device__ Vectorize()=default
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:1709
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:1707
__host__ constexpr __device__ Vectorize(const VectorSize &vector_size, const UpLength &up_length)
Definition: multi_index_transform.hpp:1701
decltype(make_tuple(UpLength{})) UpLengths
Definition: multi_index_transform.hpp:1694
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:1714
__host__ __device__ void Print() const
Definition: multi_index_transform.hpp:1764
__host__ static constexpr __device__ bool IsLinearTransform()
Definition: multi_index_transform.hpp:1745
__host__ static constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &)
Definition: multi_index_transform.hpp:1754
Definition: multi_index_transform.hpp:1957
__host__ constexpr __device__ const auto & GetUpperLengths() const
Definition: multi_index_transform.hpp:1973
__host__ constexpr __device__ void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up) const
Definition: multi_index_transform.hpp:1976
__host__ static constexpr __device__ index_t GetNumOfUpperDimension()
Definition: multi_index_transform.hpp:1971
__host__ __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &, LowIdx &idx_low, const UpIdx &idx_up, Number< Hack >) const
Definition: multi_index_transform.hpp:2000
__host__ static constexpr __device__ bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition: multi_index_transform.hpp:2017
__host__ static constexpr __device__ bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &)
Definition: multi_index_transform.hpp:2024
__host__ static constexpr __device__ bool IsKnownAtCompileTime()
Definition: multi_index_transform.hpp:2029
__host__ static constexpr __device__ index_t GetNumOfLowerDimension()
Definition: multi_index_transform.hpp:1969
__host__ constexpr __device__ Xor(const LowLengths &low_lengths)
Definition: multi_index_transform.hpp:1967
Definition: integral_constant.hpp:20
Definition: is_known_at_compile_time.hpp:14
Definition: multi_index_transform.hpp:1004
__host__ constexpr __device__ auto operator()(Number< I > i) const
Definition: multi_index_transform.hpp:1006
Definition: multi_index_transform.hpp:1014
__host__ constexpr __device__ auto operator()(Number< I > i) const
Definition: multi_index_transform.hpp:1016
Definition: math.hpp:34
Definition: functional2.hpp:33