gridwise_gemm_xdl_cshuffle_streamk_v3.hpp Source File#
gridwise_gemm_xdl_cshuffle_streamk_v3.hpp
Go to the documentation of this file.
23// Currently we do not have a elegant way to put single lds buffer & double lds buffer pipe in same
25// 1. Two separted declaration of __shared__ pointer is the key to make sure data access operate on
27// 2. Occupied __shared__ won't release until whole shader end, a.k.a AB and C may not use same lds
#define IS_VALID_COMPILATION_PARAMETER_IMPL(CDataType_)
Definition device_base.hpp:178
__host__ __device__ constexpr auto integer_least_multiple(X x, Y y)
Definition utility/math.hpp:78
__host__ __device__ constexpr auto next_power_of_two()
Definition utility/math.hpp:222
__host__ __device__ constexpr auto integer_divide_ceil(X x, Y y)
Definition utility/math.hpp:72
GemmSpecialization
Definition gemm_specialization.hpp:11
@ MKPadding
Definition gemm_specialization.hpp:18
@ KPadding
Definition gemm_specialization.hpp:16
@ NPadding
Definition gemm_specialization.hpp:15
@ MPadding
Definition gemm_specialization.hpp:14
@ MNKPadding
Definition gemm_specialization.hpp:20
@ MNPadding
Definition gemm_specialization.hpp:17
@ NKPadding
Definition gemm_specialization.hpp:19
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
__host__ __device__ constexpr auto make_naive_tensor_descriptor(const Tuple< Lengths... > &lengths, const Tuple< Strides... > &strides)
Definition tensor_descriptor_helper.hpp:49
__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_cluster_descriptor(const Lengths &lengths, ArrangeOrder order=typename arithmetic_sequence_gen< 0, Lengths::Size(), 1 >::type{})
Definition tensor_description/cluster_descriptor.hpp:13
__host__ __device__ constexpr auto make_right_pad_transform(const LowLength &low_length, const RightPadLength &right_pad, integral_constant< bool, SkipIsValidCheck >=integral_constant< bool, false >{})
Definition multi_index_transform_helper.hpp:37
__host__ __device__ constexpr auto make_xor_with_modulo_transform(const LowLengths &low_lengths)
Definition multi_index_transform_helper.hpp:185
__global__ void kernel_gemm_xdl_cshuffle_v3_2lds(typename GridwiseGemm::Argument karg)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:62
constexpr auto BlockGemmPipeline_Selector()
Definition blockwise_gemm_pipeline_wmma_selector.hpp:32
__host__ __device__ constexpr auto make_merge_transform(const LowLengths &low_lengths)
Definition multi_index_transform_helper.hpp:55
__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_packed(const Tuple< Lengths... > &lengths)
Definition tensor_descriptor_helper.hpp:101
__host__ __device__ constexpr auto make_tuple(Xs &&... xs)
Definition utility/tuple.hpp:211
__global__ void kernel_gemm_xdl_cshuffle_v3(typename GridwiseGemm::Argument karg)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:38
__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 make_unmerge_transform(const UpLengths &up_lengths, integral_constant< bool, Use24BitIntegerCalculation >=integral_constant< bool, false >{})
Definition multi_index_transform_helper.hpp:90
__host__ __device__ constexpr auto make_dynamic_buffer(T *p, ElementSpaceSize element_space_size)
Definition dynamic_buffer.hpp:472
Definition block_to_ctile_map.hpp:1420
__device__ uint32_t get_acc_buffer_offset_from_block(uint32_t block_idx_) const
Definition block_to_ctile_map.hpp:1763
uint32_t dp_start_block_idx
Definition block_to_ctile_map.hpp:1431
__host__ __device__ index_t get_grid_dims() const
Definition block_to_ctile_map.hpp:1599
__device__ void get_block_itr(uint32_t block_idx, uint32_t &iter_start, uint32_t &iter_end) const
Definition block_to_ctile_map.hpp:1617
__device__ uint32_t get_acc_buffer_offset_from_tile(uint32_t tile_idx_) const
Definition block_to_ctile_map.hpp:1737
__device__ auto tile_to_spatial(uint32_t tile_idx, uint32_t m, uint32_t n) const
Definition block_to_ctile_map.hpp:1658
__host__ __device__ uint32_t get_workspace_size_for_acc(uint32_t acc_element_bytes) const
Definition block_to_ctile_map.hpp:1687
__device__ uint32_t get_current_iter_length(uint32_t iter_start, uint32_t iter_end, uint32_t total_iter_length) const
Definition block_to_ctile_map.hpp:1639
uint32_t reduction_start_block_idx
Definition block_to_ctile_map.hpp:1432
uint32_t sk_num_blocks
Definition block_to_ctile_map.hpp:1429
__device__ void get_tile_idx_with_offset(uint32_t iter, uint32_t &tile_idx, uint32_t &iter_offset) const
Definition block_to_ctile_map.hpp:1653
const ADataType * p_a_grid
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:615
const BDataType * p_b_grid
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:616
CDataType * p_c_grid
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:617
BlockToCTileMap_GemmStreamK_v2< MPerBlock, NPerBlock, KPerBlock, StreamKReductionStrategy::Atomic, 8, 4 > block_2_ctile_map_streamk
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:624
__host__ Argument(const ADataType *p_a_grid_, const BDataType *p_b_grid_, CDataType *p_c_grid_, index_t M_, index_t N_, index_t K_, index_t StrideA_, index_t StrideB_, index_t StrideC_, index_t Streamk_sel_, index_t Grid_size_, StreamKReductionStrategy reduction_strategy_)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:581
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:514
index_t StrideA
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:562
index_t AK0
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:572
__host__ void Print() const
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:545
index_t MPadded
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:568
index_t StrideB
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:563
index_t KPadded
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:571
index_t N
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:560
index_t M
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:559
index_t MBlock
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:574
index_t StrideC
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:564
index_t Streamk_sel
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:565
StreamKReductionStrategy reduction_strategy
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:567
index_t BK0
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:573
index_t Grid_size
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:566
__host__ Problem(index_t M_, index_t N_, index_t K_, index_t StrideA_, index_t StrideB_, index_t StrideC_, index_t Streamk_sel_, index_t Grid_size_, StreamKReductionStrategy reduction_strategy_)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:515
index_t K
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:561
index_t NPadded
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:569
index_t NBlock
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:575
index_t KRead
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:570
__device__ SplitKBatchOffset(Problem &problem, unsigned int kbatch_id, unsigned int orig_K)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:629
index_t a_k_split_offset
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:659
index_t b_k_split_offset
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:660
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:133
__host__ static __device__ constexpr auto GetClusterLengthReduction()
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:1235
BlockToCTileMap_GemmStreamK_v2< MPerBlock, NPerBlock, KPerBlock, StreamKReductionStrategy::Atomic, 8, 4 > Block2CTileMap_streamk
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:1263
static __device__ constexpr auto GetABlockDescriptor_AK0PerBlock_MPerBlock_AK1()
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:663
static __host__ constexpr bool CalculateHasMainKBlockLoop(index_t K)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:1207
remove_cvref_t< decltype(BlockGemmPipeline_Selector< BlkGemmPipelineVer, BlkGemmPipeSched, BlockSize, ADataType, BDataType, ComputeTypeA, GemmAccDataType, decltype(GetABlockDescriptor_AK0PerBlock_MPerBlock_AK1()), decltype(GetBBlockDescriptor_BK0PerBlock_NPerBlock_BK1()), decltype(MakeAMmaTileDescriptor_M0_M1_M2_K(GetABlockDescriptor_AK0PerBlock_MPerBlock_AK1())), decltype(MakeBMmaTileDescriptor_N0_N1_N2_K(GetBBlockDescriptor_BK0PerBlock_NPerBlock_BK1())), ABlockTransferSrcScalarPerVector, BBlockTransferSrcScalarPerVector, MPerBlock, NPerBlock, KPerBlock, MPerXdl, NPerXdl, MXdlPerWave, NXdlPerWave, KPack >())> BlockwiseGemmPipe
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:968
static __host__ auto CalculateAK0Padded(index_t K, index_t K_Batch=1)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:184
static __host__ auto CalculateKPadded(index_t K, index_t K_Batch=1)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:196
__host__ static __device__ constexpr auto MakeAMmaTileDescriptor_M0_M1_M2_K(const ABlockDesc_AK0_M_AK1 &)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:436
static __device__ void Run(const ADataType *p_a_grid, const BDataType *p_b_grid, CDataType *p_c_grid, void *p_shared, Problem &problem, void *p_workspace)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:1273
static __device__ constexpr auto GetBBlockDescriptor_BK0PerBlock_NPerBlock_BK1()
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:803
static __device__ auto MakeAGridDescriptor_AK0_M_AK1(index_t M, index_t MPad, index_t K, index_t KPad, index_t StrideA, index_t AK0)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:234
static __device__ void Run_2Lds(const ADataType *p_a_grid, const BDataType *p_b_grid, CDataType *p_c_grid, void *p_shared_0, void *p_shared_1, Problem &problem, void *p_workspace)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:1993
__host__ static __device__ constexpr auto MakeBMmaTileDescriptor_N0_N1_N2_K(const BBlockDesc_BK0_N_BK1 &)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:445
static __host__ auto CalculateKRead(index_t K, index_t K_Batch=1)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:202
static __device__ constexpr auto GetCShuffleBlockDescriptor_MBlock_MPerBlock_NBlock_NPerBlock()
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:940
static __host__ constexpr TailNumber CalculateKBlockLoopTailNum(index_t K)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:1214
static __host__ constexpr bool CheckValidity(const Argument &karg)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:1024
__host__ static __device__ constexpr auto MakeGemmMmaTileDescriptor(const TileDesc_K0_MN_K1 &)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:220
__host__ static __device__ constexpr auto GetPartialAccBlockDescriptor()
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:1247
__host__ static __device__ constexpr auto GetCBlockDescriptor_MShuffle_MPerShuffle_NShuffle_NPerShuffle()
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:956
static __host__ auto CalculateBK0Padded(index_t K, index_t K_Batch=1)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:190
static __device__ constexpr auto MakeCGridDescriptor_MBlock_MPerBlock_NBlock_NPerBlock(const CGridDesc &c_grid_desc_m_n, index_t MBlock, index_t NBlock)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:1222
__host__ static __device__ auto MakeCGridDescriptor_M_N(index_t M, index_t MPad, index_t N, index_t NPad, index_t StrideC)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:453
static __device__ constexpr index_t GetSharedMemoryNumberOfByte()
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:994
static __device__ auto MakeBGridDescriptor_BK0_N_BK1(index_t K, index_t KPad, index_t N, index_t NPad, index_t StrideB, index_t BK0)
Definition gridwise_gemm_xdl_cshuffle_streamk_v3.hpp:334
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
Definition tensor_space_filling_curve.hpp:20
Definition static_buffer.hpp:16
Blockwise data transfer.
Definition thread_group_tensor_slice_transfer_v4r1.hpp:46
Definition thread_group_tensor_slice_transfer_v6r1r2.hpp:33
Definition threadwise_tensor_slice_transfer.hpp:39
Helper structure that facilitates transfer of source (grid) data to destination threads.
Definition threadwise_tensor_slice_transfer.hpp:234
Definition reduction_operator.hpp:37
Definition functional2.hpp:33
Definition device_base.hpp:197
Definition tensor_operation/gpu/element/unary_element_wise_operation.hpp:340
Definition utility/workgroup_barrier.hpp:7
__device__ void inc(uint32_t offset)
Definition utility/workgroup_barrier.hpp:62
__device__ void wait_eq(uint32_t offset, uint32_t value)
Definition utility/workgroup_barrier.hpp:29