Mojo struct
VBuffer
struct VBuffer[: Bool, dtype: DType, layout: Layout, address_space: AddressSpace, alignment: Int, origin: Origin[], masked: Bool, //, mma_shape: IndexList[3], k_group_size: Int, BN: Int, BK: Int, depth: Int, num_threads: Int]
Fields
- load_tile (
LayoutTensor[dtype, row_major(0 if ((simdwidthof[::DType,__mlir_type.!kgen.target]() * num_threads) == 0) else (div_s(mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">), #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int num_threads, "value">), 0), {1}, {value = mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int num_threads, "value">)}), "value">) + -1) if (((rem_s(mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">), #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int num_threads, "value">), 0), {1}, {value = mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int num_threads, "value">)}), "value">) == 0) ^ True) & (((simdwidthof[::DType,__mlir_type.!kgen.target]() * num_threads) < 0) ^ ((BK * depth) < 0))) else div_s(mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">), #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int num_threads, "value">), 0), {1}, {value = mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int num_threads, "value">)}), "value">), simdwidthof[::DType,__mlir_type.!kgen.target]()), MutableAnyOrigin, address_space=AddressSpace(5)]
): - mma_tile (
LayoutTensor[dtype, row_major((ceildiv[::CeilDivable](BK, (mma_shape.__getitem__[::Indexer](2) * k_group_size)) * 0 if (mma_shape.__getitem__[::Indexer](0) == 0) else (div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> rebind(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm *[0,0]> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@utils::@index::@IndexList::@"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}, :trait<@stdlib::@builtin::@int::@Indexer> @stdlib::@builtin::@int::@Int>), mma_shape, store_to_mem({0})), "value">, 0), {1}, apply(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> rebind(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm *[0,0]> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@utils::@index::@IndexList::@"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}, :trait<@stdlib::@builtin::@int::@Indexer> @stdlib::@builtin::@int::@Int>), mma_shape, store_to_mem({0}))), "value">) + -1) if (((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> rebind(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm *[0,0]> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@utils::@index::@IndexList::@"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}, :trait<@stdlib::@builtin::@int::@Indexer> @stdlib::@builtin::@int::@Int>), mma_shape, store_to_mem({0})), "value">, 0), {1}, apply(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> rebind(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm *[0,0]> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@utils::@index::@IndexList::@"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}, :trait<@stdlib::@builtin::@int::@Indexer> @stdlib::@builtin::@int::@Int>), mma_shape, store_to_mem({0}))), "value">) == 0) ^ True) & ((mma_shape.__getitem__[::Indexer](0) < 0) ^ (depth < 0))) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> rebind(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm *[0,0]> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@utils::@index::@IndexList::@"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}, :trait<@stdlib::@builtin::@int::@Indexer> @stdlib::@builtin::@int::@Int>), mma_shape, store_to_mem({0})), "value">, 0), {1}, apply(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> rebind(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm *[0,0]> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@utils::@index::@IndexList::@"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}, :trait<@stdlib::@builtin::@int::@Indexer> @stdlib::@builtin::@int::@Int>), mma_shape, store_to_mem({0}))), "value">)), simdwidthof[::DType,__mlir_type.!kgen.target]()), MutableAnyOrigin, address_space=AddressSpace(5)]
): - smem_iter (
LayoutTensorIter[dtype, blocked_product(row_major(((div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) + -1) if ((depth < 0) & ((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) == 0) ^ True)) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) + depth), simdwidthof[::DType,__mlir_type.!kgen.target]()), row_major(1, 0 if (simdwidthof[::DType,__mlir_type.!kgen.target]() == 0) else (div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">) + -1) if (((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">) == 0) ^ True) & ((simdwidthof[::DType,__mlir_type.!kgen.target]() < 0) ^ (BK < 0))) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">)), True), MutableAnyOrigin, address_space=AddressSpace(3), circular=True]
): - global_iterator (
LayoutTensorIter[dtype, _compute_tile_layout[*::Int]()[0], origin, address_space=address_space, axis=OptionalReg[Int]({:@stdlib::@builtin::@int::@Int {0}, 0}), layout_int_type=_get_layout_type(layout, address_space), linear_idx_type=_get_index_type(layout, address_space), masked=masked if masked else _tile_is_masked[::Layout,*::Int]()]
): - global_base_tile (
LayoutTensor[dtype, layout, origin, address_space=address_space, masked=masked, alignment=alignment]
):
Implemented traits
AnyType
,
UnknownDestructibility
Aliases
base_layout
alias base_layout = row_major(((div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) + -1) if ((depth < 0) & ((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) == 0) ^ True)) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) + depth), simdwidthof[::DType,__mlir_type.!kgen.target]())
depth_tile_size
alias depth_tile_size = 128
GlobalTensorType
alias GlobalTensorType = LayoutTensor[dtype, layout, origin, address_space=address_space, masked=masked, alignment=alignment]
GlobalTiledIteratorType
alias GlobalTiledIteratorType = LayoutTensorIter[dtype, _compute_tile_layout[*::Int]()[0], origin, address_space=address_space, axis=OptionalReg[Int]({:@stdlib::@builtin::@int::@Int {0}, 0}), layout_int_type=_get_layout_type(layout, address_space), linear_idx_type=_get_index_type(layout, address_space), masked=masked if masked else _tile_is_masked[::Layout,*::Int]()]
LoadTileType
alias LoadTileType = LayoutTensor[dtype, row_major(0 if ((simdwidthof[::DType,__mlir_type.!kgen.target]() * num_threads) == 0) else (div_s(mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">), #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int num_threads, "value">), 0), {1}, {value = mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int num_threads, "value">)}), "value">) + -1) if (((rem_s(mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">), #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int num_threads, "value">), 0), {1}, {value = mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int num_threads, "value">)}), "value">) == 0) ^ True) & (((simdwidthof[::DType,__mlir_type.!kgen.target]() * num_threads) < 0) ^ ((BK * depth) < 0))) else div_s(mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">), #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int num_threads, "value">), 0), {1}, {value = mul(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int num_threads, "value">)}), "value">), simdwidthof[::DType,__mlir_type.!kgen.target]()), MutableAnyOrigin, address_space=AddressSpace(5)]
MMA_K
alias MMA_K = mma_shape.__getitem__[::Indexer](2)
MMA_M
alias MMA_M = mma_shape.__getitem__[::Indexer](0)
MMATileType
alias MMATileType = LayoutTensor[dtype, row_major((ceildiv[::CeilDivable](BK, (mma_shape.__getitem__[::Indexer](2) * k_group_size)) * 0 if (mma_shape.__getitem__[::Indexer](0) == 0) else (div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> rebind(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm *[0,0]> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@utils::@index::@IndexList::@"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}, :trait<@stdlib::@builtin::@int::@Indexer> @stdlib::@builtin::@int::@Int>), mma_shape, store_to_mem({0})), "value">, 0), {1}, apply(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> rebind(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm *[0,0]> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@utils::@index::@IndexList::@"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}, :trait<@stdlib::@builtin::@int::@Indexer> @stdlib::@builtin::@int::@Int>), mma_shape, store_to_mem({0}))), "value">) + -1) if (((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> rebind(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm *[0,0]> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@utils::@index::@IndexList::@"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}, :trait<@stdlib::@builtin::@int::@Indexer> @stdlib::@builtin::@int::@Int>), mma_shape, store_to_mem({0})), "value">, 0), {1}, apply(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> rebind(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm *[0,0]> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@utils::@index::@IndexList::@"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}, :trait<@stdlib::@builtin::@int::@Indexer> @stdlib::@builtin::@int::@Int>), mma_shape, store_to_mem({0}))), "value">) == 0) ^ True) & ((mma_shape.__getitem__[::Indexer](0) < 0) ^ (depth < 0))) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> rebind(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm *[0,0]> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@utils::@index::@IndexList::@"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}, :trait<@stdlib::@builtin::@int::@Indexer> @stdlib::@builtin::@int::@Int>), mma_shape, store_to_mem({0})), "value">, 0), {1}, apply(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> rebind(:!lit.generator<[1]("self": !lit.struct<@stdlib::@utils::@index::@IndexList<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}>>, "idx": !lit.ref<@stdlib::@builtin::@int::@Int, imm *[0,0]> read_mem) -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@utils::@index::@IndexList::@"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:@stdlib::@builtin::@int::@Int {3}, :@stdlib::@builtin::@dtype::@DType {:dtype si64}, :trait<@stdlib::@builtin::@int::@Indexer> @stdlib::@builtin::@int::@Int>), mma_shape, store_to_mem({0}))), "value">)), simdwidthof[::DType,__mlir_type.!kgen.target]()), MutableAnyOrigin, address_space=AddressSpace(5)]
num_k_tiles
alias num_k_tiles = ceildiv[::CeilDivable](BK, (mma_shape.__getitem__[::Indexer](2) * k_group_size))
num_repeats
alias num_repeats = 0 if (simdwidthof[::DType,__mlir_type.!kgen.target]() == 0) else (div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">) + -1) if (((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">) == 0) ^ True) & ((simdwidthof[::DType,__mlir_type.!kgen.target]() < 0) ^ (BK < 0))) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">)
padding
alias padding = (div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) + -1) if ((depth < 0) & ((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) == 0) ^ True)) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8)
SharedIterType
alias SharedIterType = LayoutTensorIter[dtype, blocked_product(row_major(((div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) + -1) if ((depth < 0) & ((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) == 0) ^ True)) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) + depth), simdwidthof[::DType,__mlir_type.!kgen.target]()), row_major(1, 0 if (simdwidthof[::DType,__mlir_type.!kgen.target]() == 0) else (div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">) + -1) if (((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">) == 0) ^ True) & ((simdwidthof[::DType,__mlir_type.!kgen.target]() < 0) ^ (BK < 0))) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">)), True), MutableAnyOrigin, address_space=AddressSpace(3), circular=True]
SharedTileType
alias SharedTileType = LayoutTensor[dtype, blocked_product(row_major(((div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) + -1) if ((depth < 0) & ((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) == 0) ^ True)) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) + depth), simdwidthof[::DType,__mlir_type.!kgen.target]()), row_major(1, 0 if (simdwidthof[::DType,__mlir_type.!kgen.target]() == 0) else (div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">) + -1) if (((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">) == 0) ^ True) & ((simdwidthof[::DType,__mlir_type.!kgen.target]() < 0) ^ (BK < 0))) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">)), True), MutableAnyOrigin, address_space=AddressSpace(3), layout_int_type=_get_index_type(AddressSpace(3)), linear_idx_type=_get_index_type(AddressSpace(3))]
simd_width
alias simd_width = simdwidthof[::DType,__mlir_type.!kgen.target]()
smem_layout
alias smem_layout = blocked_product(row_major(((div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) + -1) if ((depth < 0) & ((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) == 0) ^ True)) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int depth, "value">, 8) + depth), simdwidthof[::DType,__mlir_type.!kgen.target]()), row_major(1, 0 if (simdwidthof[::DType,__mlir_type.!kgen.target]() == 0) else (div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">) + -1) if (((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">) == 0) ^ True) & ((simdwidthof[::DType,__mlir_type.!kgen.target]() < 0) ^ (BK < 0))) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">)), True)
tiler_layout
alias tiler_layout = row_major(1, 0 if (simdwidthof[::DType,__mlir_type.!kgen.target]() == 0) else (div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">) + -1) if (((rem_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">) == 0) ^ True) & ((simdwidthof[::DType,__mlir_type.!kgen.target]() < 0) ^ (BK < 0))) else div_s(#lit.struct.extract<:@stdlib::@builtin::@int::@Int BK, "value">, #lit.struct.extract<:@stdlib::@builtin::@int::@Int cond(eq(#lit.struct.extract<:@stdlib::@builtin::@int::@Int apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>), "value">, 0), {1}, apply(:!lit.generator<() -> !lit.struct<@stdlib::@builtin::@int::@Int>> @stdlib::@sys::@info::@"simdwidthof[::DType,__mlir_type.!kgen.target]()"<:@stdlib::@builtin::@dtype::@DType dtype, :target apply(:!lit.generator<() -> !kgen.target> @stdlib::@sys::@info::@"_current_target()")>)), "value">))
Methods
__init__
__init__(out self, global_tile: LayoutTensor[dtype, layout, origin, address_space=address_space, masked=masked, alignment=alignment], shared_ptr: UnsafePointer[SIMD[dtype, 1], address_space=AddressSpace(3), alignment=alignment, mut=mut, origin=origin])
load_from_dram
load_from_dram(mut self)
get_mma_tile
get_mma_tile(self) -> LayoutTensor[dtype, row_major((ceildiv[::CeilDivable](BK, (mma_shape.__getitem__[::Indexer](2) * k_group_size)) * 0 if (mma_shape.__getitem__[::Indexer](0) == 0) else (div_s(#lit.struct.extract<:_stdlib::_builtin::_int::_Int depth, "value">, #lit.struct.extract<:_stdlib::_builtin::_int::_Int cond(eq(#lit.struct.extract<:_stdlib::_builtin::_int::_Int apply(:!lit.generator<[1]("self": !lit.struct<_stdlib::_utils::_index::_IndexList<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}>>, "idx": !lit.ref<_stdlib::_builtin::_int::_Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<_stdlib::_builtin::_int::_Int>> rebind(:!lit.generator<[1]("self": !lit.struct<_stdlib::_utils::_index::_IndexList<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}>>, "idx": !lit.ref<_stdlib::_builtin::_int::_Int, imm *[0,0]> read_mem) -> !lit.struct<_stdlib::_builtin::_int::_Int>> _stdlib::_utils::_index::_IndexList::_"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}, :trait<_stdlib::_builtin::_int::_Indexer> _stdlib::_builtin::_int::_Int>), mma_shape, store_to_mem({0})), "value">, 0), {1}, apply(:!lit.generator<[1]("self": !lit.struct<_stdlib::_utils::_index::_IndexList<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}>>, "idx": !lit.ref<_stdlib::_builtin::_int::_Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<_stdlib::_builtin::_int::_Int>> rebind(:!lit.generator<[1]("self": !lit.struct<_stdlib::_utils::_index::_IndexList<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}>>, "idx": !lit.ref<_stdlib::_builtin::_int::_Int, imm *[0,0]> read_mem) -> !lit.struct<_stdlib::_builtin::_int::_Int>> _stdlib::_utils::_index::_IndexList::_"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}, :trait<_stdlib::_builtin::_int::_Indexer> _stdlib::_builtin::_int::_Int>), mma_shape, store_to_mem({0}))), "value">) + -1) if (((rem_s(#lit.struct.extract<:_stdlib::_builtin::_int::_Int depth, "value">, #lit.struct.extract<:_stdlib::_builtin::_int::_Int cond(eq(#lit.struct.extract<:_stdlib::_builtin::_int::_Int apply(:!lit.generator<[1]("self": !lit.struct<_stdlib::_utils::_index::_IndexList<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}>>, "idx": !lit.ref<_stdlib::_builtin::_int::_Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<_stdlib::_builtin::_int::_Int>> rebind(:!lit.generator<[1]("self": !lit.struct<_stdlib::_utils::_index::_IndexList<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}>>, "idx": !lit.ref<_stdlib::_builtin::_int::_Int, imm *[0,0]> read_mem) -> !lit.struct<_stdlib::_builtin::_int::_Int>> _stdlib::_utils::_index::_IndexList::_"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}, :trait<_stdlib::_builtin::_int::_Indexer> _stdlib::_builtin::_int::_Int>), mma_shape, store_to_mem({0})), "value">, 0), {1}, apply(:!lit.generator<[1]("self": !lit.struct<_stdlib::_utils::_index::_IndexList<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}>>, "idx": !lit.ref<_stdlib::_builtin::_int::_Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<_stdlib::_builtin::_int::_Int>> rebind(:!lit.generator<[1]("self": !lit.struct<_stdlib::_utils::_index::_IndexList<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}>>, "idx": !lit.ref<_stdlib::_builtin::_int::_Int, imm *[0,0]> read_mem) -> !lit.struct<_stdlib::_builtin::_int::_Int>> _stdlib::_utils::_index::_IndexList::_"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}, :trait<_stdlib::_builtin::_int::_Indexer> _stdlib::_builtin::_int::_Int>), mma_shape, store_to_mem({0}))), "value">) == 0) ^ True) & ((mma_shape.__getitem__[::Indexer](0) < 0) ^ (depth < 0))) else div_s(#lit.struct.extract<:_stdlib::_builtin::_int::_Int depth, "value">, #lit.struct.extract<:_stdlib::_builtin::_int::_Int cond(eq(#lit.struct.extract<:_stdlib::_builtin::_int::_Int apply(:!lit.generator<[1]("self": !lit.struct<_stdlib::_utils::_index::_IndexList<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}>>, "idx": !lit.ref<_stdlib::_builtin::_int::_Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<_stdlib::_builtin::_int::_Int>> rebind(:!lit.generator<[1]("self": !lit.struct<_stdlib::_utils::_index::_IndexList<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}>>, "idx": !lit.ref<_stdlib::_builtin::_int::_Int, imm *[0,0]> read_mem) -> !lit.struct<_stdlib::_builtin::_int::_Int>> _stdlib::_utils::_index::_IndexList::_"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}, :trait<_stdlib::_builtin::_int::_Indexer> _stdlib::_builtin::_int::_Int>), mma_shape, store_to_mem({0})), "value">, 0), {1}, apply(:!lit.generator<[1]("self": !lit.struct<_stdlib::_utils::_index::_IndexList<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}>>, "idx": !lit.ref<_stdlib::_builtin::_int::_Int, imm #lit.comptime.origin> read_mem) -> !lit.struct<_stdlib::_builtin::_int::_Int>> rebind(:!lit.generator<[1]("self": !lit.struct<_stdlib::_utils::_index::_IndexList<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}>>, "idx": !lit.ref<_stdlib::_builtin::_int::_Int, imm *[0,0]> read_mem) -> !lit.struct<_stdlib::_builtin::_int::_Int>> _stdlib::_utils::_index::_IndexList::_"__getitem__[::Indexer](::IndexList[$0, $1],$2)"<:_stdlib::_builtin::_int::_Int {3}, :_stdlib::_builtin::_dtype::_DType {:dtype si64}, :trait<_stdlib::_builtin::_int::_Indexer> _stdlib::_builtin::_int::_Int>), mma_shape, store_to_mem({0}))), "value">)), simdwidthof[::DType,__mlir_type.!kgen.target]()), MutableAnyOrigin, address_space=AddressSpace(5)]
Returns:
copy_to_shared
copy_to_shared(self)
load_from_shared
load_from_shared(self)
Was this page helpful?
Thank you! We'll create more content like this.
Thank you for helping us improve!