gridwise_gemm_xdlops_streamk.hpp Source File#
gridwise_gemm_xdlops_streamk.hpp
Go to the documentation of this file.
#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
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_merge_transform(const LowLengths &low_lengths)
Definition multi_index_transform_helper.hpp:55
__global__ void kernel_gemm_xdlops_streamk(const typename GridwiseGemm::FloatAB *p_a_grid, const typename GridwiseGemm::FloatAB *p_b_grid, typename GridwiseGemm::FloatC *p_c_grid, void *p_workspace, index_t M, index_t N, index_t K, index_t StrideA, index_t StrideB, index_t StrideC, typename GridwiseGemm::Block2CTileMap block_mapping)
Definition gridwise_gemm_xdlops_streamk.hpp:28
__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 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
__device__ uint32_t get_acc_buffer_offset_from_block(uint32_t block_idx_) const
Definition block_to_ctile_map.hpp:1390
uint32_t dp_start_block_idx
Definition block_to_ctile_map.hpp:1034
__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:1266
__device__ uint32_t get_acc_buffer_offset_from_tile(uint32_t tile_idx_) const
Definition block_to_ctile_map.hpp:1364
uint32_t reduction_start_block_idx
Definition block_to_ctile_map.hpp:1035
__host__ __device__ uint32_t get_workspace_size_for_acc(uint32_t acc_element_bytes) const
Definition block_to_ctile_map.hpp:1314
__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:1280
static constexpr StreamKReductionStrategy ReductionStrategy
Definition block_to_ctile_map.hpp:1027
__device__ auto tile_to_spatial(uint32_t tile_idx, uint32_t m, uint32_t n) const
Definition block_to_ctile_map.hpp:1285
__device__ uint32_t get_block_idx() const
Definition block_to_ctile_map.hpp:1237
__device__ void get_block_itr(uint32_t block_idx, uint32_t &iter_start, uint32_t &iter_end) const
Definition block_to_ctile_map.hpp:1244
uint32_t sk_num_blocks
Definition block_to_ctile_map.hpp:1032
Definition block_to_ctile_map.hpp:541
Definition blockwise_gemm_smfmac_xdlops.hpp:44
index_t StrideB
Definition gridwise_gemm_xdlops_streamk.hpp:148
index_t StrideC
Definition gridwise_gemm_xdlops_streamk.hpp:149
FloatC * p_c_grid
Definition gridwise_gemm_xdlops_streamk.hpp:143
Argument(const FloatAB *p_a_grid_, const FloatAB *p_b_grid_, FloatC *p_c_grid_, index_t M_, index_t N_, index_t K_, index_t StrideA_, index_t StrideB_, index_t StrideC_, uint32_t num_cu, uint32_t occupancy, uint32_t num_sk_blocks_)
Definition gridwise_gemm_xdlops_streamk.hpp:152
Block2CTileMap block_mapping
Definition gridwise_gemm_xdlops_streamk.hpp:150
index_t M
Definition gridwise_gemm_xdlops_streamk.hpp:144
index_t N
Definition gridwise_gemm_xdlops_streamk.hpp:145
index_t K
Definition gridwise_gemm_xdlops_streamk.hpp:146
void Print() const
Definition gridwise_gemm_xdlops_streamk.hpp:177
index_t StrideA
Definition gridwise_gemm_xdlops_streamk.hpp:147
const FloatAB * p_b_grid
Definition gridwise_gemm_xdlops_streamk.hpp:142
const FloatAB * p_a_grid
Definition gridwise_gemm_xdlops_streamk.hpp:141
static std::string Get()
Definition gridwise_gemm_xdlops_streamk.hpp:1160
static std::string Get()
Definition gridwise_gemm_xdlops_streamk.hpp:1154
Definition gridwise_gemm_xdlops_streamk.hpp:1147
static std::string Get()
Definition gridwise_gemm_xdlops_streamk.hpp:1148
Definition gridwise_gemm_xdlops_streamk.hpp:115
static __device__ void Run(const FloatAB *p_a_grid, const FloatAB *p_b_grid, FloatC *p_c_grid, void *p_workspace, index_t M, index_t N, index_t K, index_t StrideA, index_t StrideB, index_t StrideC, Block2CTileMap block_mapping, void *__restrict__ p_shared_block)
Definition gridwise_gemm_xdlops_streamk.hpp:444
__host__ static __device__ constexpr auto GetCBlockDescriptor_MShuffleRepeat_MPerShuffle_NShuffleRepeat_NPerShuffle()
Definition gridwise_gemm_xdlops_streamk.hpp:401
__host__ static __device__ constexpr auto GetCBlockDescriptor_MBlock_MPerShuffle_NBlock_NPerShuffle()
Definition gridwise_gemm_xdlops_streamk.hpp:388
__host__ static __device__ auto CalculateGridSize(const Argument &karg)
Definition gridwise_gemm_xdlops_streamk.hpp:185
__host__ static __device__ auto MakeAGridDescriptor_K0_M_K1(index_t M, index_t MPad, index_t K, index_t KPad, index_t StrideA)
Definition gridwise_gemm_xdlops_streamk.hpp:195
__host__ static __device__ constexpr auto MakeCBlockClusterAdaptor(const CGridDesc &c_m_n_grid_desc, index_t, index_t, index_t KBatch)
Definition gridwise_gemm_xdlops_streamk.hpp:380
__host__ static __device__ constexpr bool CheckValidity(const Argument &karg)
Definition gridwise_gemm_xdlops_streamk.hpp:315
__host__ static __device__ auto MakeBGridDescriptor_K0_N_K1(index_t K, index_t KPad, index_t N, index_t NPad, index_t StrideB)
Definition gridwise_gemm_xdlops_streamk.hpp:224
BlockToCTileMap_GemmStreamK< MPerBlock, NPerBlock, K0PerBlock *K1, StreamKReductionStrategy::Atomic > Block2CTileMap
Definition gridwise_gemm_xdlops_streamk.hpp:135
__host__ static __device__ constexpr auto MakeCGridDesc_MBlock_MPerBlock_NBlock_NPerBlock(const CGridDesc &c_m_n_grid_desc)
Definition gridwise_gemm_xdlops_streamk.hpp:362
__host__ static __device__ constexpr bool CalculateHasMainK0BlockLoop(index_t K0)
Definition gridwise_gemm_xdlops_streamk.hpp:353
__host__ static __device__ constexpr auto GetPartialAccBlockDescriptor()
Definition gridwise_gemm_xdlops_streamk.hpp:425
__host__ static __device__ constexpr index_t GetSharedMemoryNumberOfByte()
Definition gridwise_gemm_xdlops_streamk.hpp:289
remove_cvref_t< decltype(MakeCGridDescriptor_M_N(1, 1, 1, 1, 1))> CGridDesc_M_N
Definition gridwise_gemm_xdlops_streamk.hpp:442
__host__ static __device__ constexpr auto GetABlockDescriptor_AK0PerBlock_MPerBlock_AK1()
Definition gridwise_gemm_xdlops_streamk.hpp:273
__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_xdlops_streamk.hpp:253
__host__ static __device__ constexpr auto GetBBlockDescriptor_BK0PerBlock_NPerBlock_BK1()
Definition gridwise_gemm_xdlops_streamk.hpp:281
Definition gridwise_gemm_pipeline_v3.hpp:11
Definition utility/sequence.hpp:43
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 tensor_operation/gpu/device/tensor_layout.hpp:31
Definition tensor_operation/gpu/device/tensor_layout.hpp:26
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