For the complete documentation index, see llms.txt. Markdown versions of all pages are available by appending .md to any URL (e.g. /get-started.md).
Mojo struct
Conv2dSmem
struct Conv2dSmem[act_type: DType, filter_type: DType, out_type: DType, *, config: Conv2dConfig[act_type, filter_type, out_type]]
Shared memory layout for SM100 Conv2D fprop kernel.
This struct manages shared memory allocation for:
- Activation tiles (after im2col transformation)
- Filter tiles
- Output tiles for accumulation
- Synchronization barriers
The layout mirrors B200MatmulSmem but with conv-specific semantics:
- A tiles = im2col'd activation (M x K where M = NHW, K = CRS)
- B tiles = filter (transposed, K x N where K = CRS, N = K_out)
- C tiles = output (M x N)
Parameters
- act_type (
DType): Activation data type. - filter_type (
DType): Filter data type. - out_type (
DType): Output data type. - config (
Conv2dConfig[act_type, filter_type, out_type]): Kernel configuration.
Fields
- input_tiles (
Conv2dSmem[act_type, filter_type, out_type, config=config].InputTiles): - output_tiles (
Conv2dSmem[act_type, filter_type, out_type, config=config].OutputTiles): - source_tiles (
Conv2dSmem[act_type, filter_type, out_type, config=config].SourceTiles): - pipelines (
Conv2dSmem[act_type, filter_type, out_type, config=config].Pipelines): - epi_load_pipeline (
Conv2dSmem[act_type, filter_type, out_type, config=config].EpiLoadPipeline): - load_order_barrier (
Conv2dSmem[act_type, filter_type, out_type, config=config].LoadOrderBarrier):
Implemented traits
comptime members
act_smem_elements
comptime act_smem_elements = Layout[*?, *?].static_product
ActTileArray
comptime ActTileArray = Conv2dSmem[act_type, filter_type, out_type, config=config].InputTiles.ATileArray
BK
comptime BK = config.block_tile_shape[Int(2)]
BM
comptime BM = config.block_tile_shape[Int(0)]
BN
comptime BN = config.block_tile_shape[Int(1)]
EpiLoadBarriers
comptime EpiLoadBarriers = Conv2dSmem[act_type, filter_type, out_type, config=config].EpiLoadPipeline.BarrierArray
EpiLoadPipeline
comptime EpiLoadPipeline = EpiLoadPipelineStorage[(config.mma_shape[Int(1)] // config.output_tile_shape[Int(1)])]
filter_smem_elements
comptime filter_smem_elements = Layout[*?, *?].static_product
FilterTileArray
comptime FilterTileArray = Conv2dSmem[act_type, filter_type, out_type, config=config].InputTiles.BTileArray
InputTiles
comptime InputTiles = StandardTileStorage[act_type, filter_type, IndexList(config.block_tile_shape[Int(0)], config.block_tile_shape[Int(2)], __list_literal__=NoneType(None)), IndexList(config.block_tile_shape[Int(1)], config.block_tile_shape[Int(2)], __list_literal__=NoneType(None)), config.num_pipeline_stages]
LoadOrderBarrier
comptime LoadOrderBarrier = LoadOrderBarrierStorage
LoadOrderBarriers
comptime LoadOrderBarriers = Conv2dSmem[act_type, filter_type, out_type, config=config].LoadOrderBarrier.BarrierArray
num_accum_pipeline_stages
comptime num_accum_pipeline_stages = config.num_accum_pipeline_stages
num_clc_pipeline_stages
comptime num_clc_pipeline_stages = config.num_clc_pipeline_stages
num_epi_load_stages
comptime num_epi_load_stages = (config.mma_shape[Int(1)] // config.output_tile_shape[Int(1)])
num_group_pipeline_stages
comptime num_group_pipeline_stages = (config // config)
num_output_stages
comptime num_output_stages = config.num_output_stages
num_pipeline_stages
comptime num_pipeline_stages = config.num_pipeline_stages
out_smem_layout
comptime out_smem_layout = Layout.row_major(config.output_tile_shape[Int(0)], config.output_tile_shape[Int(1)])
OutputM
comptime OutputM = config.output_tile_shape[Int(0)]
OutputN
comptime OutputN = config.output_tile_shape[Int(1)]
OutputTiles
comptime OutputTiles = OutputTileStorage[out_type, config.output_tile_shape[Int(0)], config.output_tile_shape[Int(1)], config.num_output_stages]
OutTileArray
comptime OutTileArray = Conv2dSmem[act_type, filter_type, out_type, config=config].OutputTiles.CTileArray
Pipelines
comptime Pipelines = SmemPipelineBundle[(config // config), config.num_accum_pipeline_stages, config.num_clc_pipeline_stages, StandardTilePayload[act_type, filter_type, IndexList(config.block_tile_shape[Int(0)], config.block_tile_shape[Int(2)], __list_literal__=NoneType(None)), IndexList(config.block_tile_shape[Int(1)], config.block_tile_shape[Int(2)], __list_literal__=NoneType(None)), config.num_pipeline_stages]]
SourceTiles
comptime SourceTiles = SourceTileStorage[out_type, IndexList(config.output_tile_shape[Int(0)], config.output_tile_shape[Int(1)], __list_literal__=NoneType(None)), (config.mma_shape[Int(1)] // config.output_tile_shape[Int(1)])]
SrcTileArray
comptime SrcTileArray = Conv2dSmem[act_type, filter_type, out_type, config=config].SourceTiles.SrcTileArray
Methods
act_tiles
def act_tiles(ref[AddressSpace._value] self) -> Self.ActTileArray
Get activation tiles (im2col'd).
Returns:
Self.ActTileArray
filter_tiles
def filter_tiles(ref[AddressSpace._value] self) -> Self.FilterTileArray
Get filter tiles.
Returns:
Self.FilterTileArray
out_tiles
def out_tiles(ref[AddressSpace._value] self) -> Self.OutTileArray
Get output tiles.
Returns:
Self.OutTileArray
src_tiles
def src_tiles(ref[AddressSpace._value] self) -> Self.SrcTileArray
Get source C tiles (for residual operations).
Returns:
Self.SrcTileArray
epi_load_barriers
def epi_load_barriers(ref[AddressSpace._value] self) -> Self.EpiLoadBarriers
Get epilogue load pipeline barriers.
Used for synchronization between EpilogueLoad warp (producer) and Epilogue warps (consumers) for source C tensor loading.
Returns:
Self.EpiLoadBarriers
get_load_order_barrier
def get_load_order_barrier(ref[AddressSpace._value] self) -> Self.LoadOrderBarriers
Get load order barrier.
Used to coordinate MainLoad warp with EpilogueLoad warp, ensuring epilogue loads don't start before mainloop prologue completes.
Returns:
Self.LoadOrderBarriers