gridwise_gemm_xdlops_bwd_weight.hpp Source File#
gridwise_gemm_xdlops_bwd_weight.hpp
Go to the documentation of this file.
20// Implementation of "Merge" transformation primitive that uses division and mod. It is supposed to
21// be used for low_lengths that are known at compile time and are power of 2, otherwise performance
136__host__ __device__ constexpr auto make_merge_transform_v4_no_carry(const LowLengths& low_lengths)
Definition utility/math.hpp:13
__host__ __device__ constexpr auto integer_least_multiple(X x, Y y)
Definition utility/math.hpp:78
Definition ck.hpp:268
__host__ __device__ constexpr auto make_multi_index(Xs &&... xs)
Definition array_multi_index.hpp:15
__host__ __device__ constexpr auto make_pass_through_transform(const LowLength &low_length)
Definition multi_index_transform_helper.hpp:12
constexpr auto GridwiseGemmPipeline_Selector()
Definition gridwise_gemm_pipeline_selector.hpp:31
typename conditional< predicate, X, Y >::type conditional_t
Definition utility/functional.hpp:115
__host__ __device__ constexpr auto make_naive_tensor_descriptor(const Tuple< Lengths... > &lengths, const Tuple< Strides... > &strides)
Definition tensor_descriptor_helper.hpp:49
__global__ void kernel_gemm_xdlops_bwd_weight(const FloatA *__restrict__ p_a_grid, const FloatB *__restrict__ p_b_grid, FloatC *__restrict__ p_c_grid, const AGridDesc_B_K0_M_K1 a_b_k0_m_k1_grid_desc, const BGridDesc_B_K0_N_K1 b_b_k0_n_k1_grid_desc, const CGridDesc_MBlock_MPerBlock_NBlock_NPerBlock c_grid_desc_mblock_mperblock_nblock_nperblock, const AElementwiseOperation a_element_op, const BElementwiseOperation b_element_op, const CElementwiseOperation c_element_op, const CBlockClusterAdaptor c_block_cluster_adaptor)
Definition gridwise_gemm_xdlops_bwd_weight.hpp:157
__host__ __device__ constexpr auto make_single_stage_tensor_adaptor(const Transforms &transforms, LowerDimensionOldTopIdss, UpperDimensionNewTopIdss)
Definition tensor_description/tensor_adaptor.hpp:425
__host__ __device__ constexpr auto make_freeze_transform(const LowerIndex &low_idx)
Definition multi_index_transform_helper.hpp:151
__host__ __device__ constexpr auto make_merge_transform_v4_no_carry(const LowLengths &low_lengths)
Definition gridwise_gemm_xdlops_bwd_weight.hpp:136
__host__ __device__ constexpr auto make_merge_transform(const LowLengths &low_lengths)
Definition multi_index_transform_helper.hpp:55
__host__ __device__ constexpr auto container_reduce(const Container &x, Reduce reduce, Init init, Number< IBegin >=Number< 0 >{}, Number< IEnd >=Number< Container::Size()>{}, Number< IStep >=Number< 1 >{})
Definition utility/container_helper.hpp:111
__host__ __device__ constexpr auto make_merge_transform_v3_division_mod(const LowLengths &low_lengths)
Definition multi_index_transform_helper.hpp:84
__host__ __device__ constexpr auto make_naive_tensor_descriptor_aligned(const Tuple< Lengths... > &lengths, Align align)
Definition tensor_descriptor_helper.hpp:132
__host__ __device__ constexpr auto make_naive_tensor_descriptor_packed(const Tuple< Lengths... > &lengths)
Definition tensor_descriptor_helper.hpp:101
__host__ __device__ constexpr auto make_tuple(Xs &&... xs)
Definition utility/tuple.hpp:211
__host__ __device__ constexpr auto transform_tensor_descriptor(const OldTensorDescriptor &old_tensor_desc, const NewTransforms &new_transforms, NewLowerDimensionOldVisibleIdss, NewUpperDimensionNewVisibleIdss)
Definition tensor_description/tensor_descriptor.hpp:319
__host__ __device__ constexpr auto container_reverse_exclusive_scan(const Array< TData, NSize > &x, Reduce f, TData init)
Definition utility/container_helper.hpp:213
__host__ __device__ constexpr auto make_unmerge_transform(const UpLengths &up_lengths, integral_constant< bool, Use24BitIntegerCalculation >=integral_constant< bool, false >{})
Definition multi_index_transform_helper.hpp:90
__host__ __device__ void print_multi_index(const Tuple< Xs... > &x)
Definition statically_indexed_array_multi_index.hpp:147
__host__ __device__ constexpr auto make_dynamic_buffer(T *p, ElementSpaceSize element_space_size)
Definition dynamic_buffer.hpp:472
Definition block_to_ctile_map.hpp:720
Definition blockwise_gemm_smfmac_xdlops.hpp:44
Definition gridwise_gemm_xdlops_bwd_weight.hpp:254
__host__ static __device__ constexpr bool CheckValidity(const BGridDesc_K0_N_K1 &a_b_k0_m_k1_grid_desc, const CGridDesc_M_N &b_b_k0_n_k1_grid_desc, const AElementwiseOperation &c_m_n_grid_desc, const Block2CTileMap &block_2_ctile_map)
Definition gridwise_gemm_xdlops_bwd_weight.hpp:544
conditional_t< is_same_v< ADataType, ck::tf32_t >, float, ADataType > FloatBAdjusted
Definition gridwise_gemm_xdlops_bwd_weight.hpp:284
__host__ static __device__ constexpr auto GetABlockDescriptor_K0PerBlock_MPerBlock_K1()
Definition gridwise_gemm_xdlops_bwd_weight.hpp:297
conditional_t< is_same_v< ADataType, ck::tf32_t >, float, ADataType > FloatAAdjusted
Definition gridwise_gemm_xdlops_bwd_weight.hpp:283
__host__ static __device__ constexpr auto GetABlockDescriptor_Batch_K0PerBlock_MPerBlock_K1()
Definition gridwise_gemm_xdlops_bwd_weight.hpp:343
__host__ static __device__ constexpr bool CalculateHasMainK0BlockLoop(index_t K0)
Definition gridwise_gemm_xdlops_bwd_weight.hpp:597
static __device__ void Run(const ADataType *__restrict__ p_a_grid, const AccDataType *__restrict__ p_b_grid, InMemoryDataOperationEnum::Set *__restrict__ p_c_grid, void *__restrict__ p_shared, const BGridDesc_K0_N_K1 &a_b_k0_m_k1_grid_desc, const CGridDesc_M_N &b_b_k0_n_k1_grid_desc, const CGridDesc_MBlock_MPerBlock_NBlock_NPerBlock &c_grid_desc_mblock_mperblock_nblock_nperblock, const BElementwiseOperation &a_element_op, const CElementwiseOperation &b_element_op, const MPerBlock &c_element_op, const CBlockClusterAdaptor &c_block_cluster_adaptor)
Definition gridwise_gemm_xdlops_bwd_weight.hpp:650
remove_cvref_t< decltype(GridwiseGemmPipeline_Selector< PipelineVersion::v1, 1 >())> GridwiseGemmPipe
Definition gridwise_gemm_xdlops_bwd_weight.hpp:269
decltype(MakeCBlockClusterAdaptor(AElementwiseOperation{}, 1, 1, 1)) CBlockClusterAdaptor
Definition gridwise_gemm_xdlops_bwd_weight.hpp:647
__host__ static __device__ constexpr auto GetBBlockDescriptor_Batch_K0PerBlock_NPerBlock_K1()
Definition gridwise_gemm_xdlops_bwd_weight.hpp:445
__host__ static __device__ constexpr auto MakeCBlockClusterAdaptor(const AElementwiseOperation &c_m_n_grid_desc, index_t M01, index_t N01, index_t KBatch)
Definition gridwise_gemm_xdlops_bwd_weight.hpp:625
__host__ static __device__ constexpr auto GetCBlockDescriptor_MBlock_MPerBlock_NBlock_NPerBlock()
Definition gridwise_gemm_xdlops_bwd_weight.hpp:633
__host__ static __device__ constexpr auto MakeCGridDesc_MBlock_MPerBlock_NBlock_NPerBlock(const AElementwiseOperation &c_m_n_grid_desc)
Definition gridwise_gemm_xdlops_bwd_weight.hpp:608
decltype(MakeCGridDesc_MBlock_MPerBlock_NBlock_NPerBlock(AElementwiseOperation{})) CGridDesc_MBlock_MPerBlock_NBlock_NPerBlock
Definition gridwise_gemm_xdlops_bwd_weight.hpp:645
__host__ static __device__ constexpr auto GetBBlockDescriptor_K0PerBlock_NPerBlock_K1()
Definition gridwise_gemm_xdlops_bwd_weight.hpp:399
Definition gridwise_gemm_xdlops_bwd_weight.hpp:25
decltype(make_tuple(container_reduce(LowLengths{}, math::multiplies{}, Number< 1 >{}))) UpLengths
Definition gridwise_gemm_xdlops_bwd_weight.hpp:34
LowLengthsScan low_lengths_scan_
Definition gridwise_gemm_xdlops_bwd_weight.hpp:38
__host__ __device__ void UpdateLowerIndex(LowIdxDiff &idx_diff_low, const UpIdxDiff &idx_up_diff, LowIdx &idx_low, const UpIdx &idx_up_new, Number< Hack >) const
Definition gridwise_gemm_xdlops_bwd_weight.hpp:81
static constexpr index_t NDimLow
Definition gridwise_gemm_xdlops_bwd_weight.hpp:26
__host__ static __device__ constexpr bool IsKnownAtCompileTime()
Definition gridwise_gemm_xdlops_bwd_weight.hpp:107
MultiIndex< NDimLow > LowerIndex
Definition gridwise_gemm_xdlops_bwd_weight.hpp:28
__host__ __device__ constexpr Merge_v4_no_carry()=default
__host__ static __device__ constexpr bool IsValidUpperIndexAlwaysMappedToValidLowerIndex()
Definition gridwise_gemm_xdlops_bwd_weight.hpp:102
__host__ static __device__ constexpr bool IsLinearTransform()
Definition gridwise_gemm_xdlops_bwd_weight.hpp:100
__host__ static __device__ constexpr index_t GetNumOfUpperDimension()
Definition gridwise_gemm_xdlops_bwd_weight.hpp:54
__host__ __device__ constexpr Merge_v4_no_carry(const LowLengths &low_lengths)
Definition gridwise_gemm_xdlops_bwd_weight.hpp:43
MultiIndex< 1 > UpperIndex
Definition gridwise_gemm_xdlops_bwd_weight.hpp:29
__host__ static __device__ constexpr index_t GetNumOfLowerDimension()
Definition gridwise_gemm_xdlops_bwd_weight.hpp:52
UpLengths up_lengths_
Definition gridwise_gemm_xdlops_bwd_weight.hpp:39
decltype(container_reverse_exclusive_scan(LowLengths{}, math::multiplies{}, Number< 1 >{})) LowLengthsScan
Definition gridwise_gemm_xdlops_bwd_weight.hpp:31
__host__ static __device__ constexpr bool IsValidUpperIndexMappedToValidLowerIndex(const UpIdx &)
Definition gridwise_gemm_xdlops_bwd_weight.hpp:116
__host__ __device__ constexpr const auto & GetUpperLengths() const
Definition gridwise_gemm_xdlops_bwd_weight.hpp:56
LowLengths low_lengths_
Definition gridwise_gemm_xdlops_bwd_weight.hpp:37
__host__ __device__ void Print() const
Definition gridwise_gemm_xdlops_bwd_weight.hpp:121
__host__ __device__ constexpr void CalculateLowerIndex(LowIdx &idx_low, const UpIdx &idx_up) const
Definition gridwise_gemm_xdlops_bwd_weight.hpp:59
Selects the appropriate MFMA instruction type and configuration for given data types and tile sizes o...
Definition xdlops_gemm.hpp:1208
Definition utility/sequence.hpp:43
Blockwise data transfer.
Definition thread_group_tensor_slice_transfer_v4r1.hpp:46
Definition thread_group_tensor_slice_transfer_v6r1.hpp:34
Definition threadwise_tensor_slice_transfer.hpp:39
Definition is_known_at_compile_time.hpp:14
Definition utility/math.hpp:34
Definition functional2.hpp:33
Definition tensor_operation/gpu/element/unary_element_wise_operation.hpp:340