20 const std::string& frag_d,
21 const std::string& frag_a,
22 const std::string& frag_b,
23 const std::string& frag_c
28 const std::string& frag,
29 const std::string& base,
38 const std::string& frag,
39 const std::string& base,
47 const std::string& main_frag,
48 const std::vector<std::string>& additional_frags,
52 std::string
fragment_element(
const std::string& frag,
const std::string& idx)
const override {
53 return frag +
"[" + idx +
"]";
57 return "static_cast<int>(sizeof(" + frag +
") / sizeof(" + frag +
"[0]))";
64 const std::string lane =
"(threadIdx.x % 64)";
65 const std::string lo =
"(" + lane +
" % 32)";
66 const std::string kq =
"(4 * (" + lane +
" / 32) + " + idx +
")";
70 return std::make_pair(lo, kq);
72 return std::make_pair(kq, lo);
74 return std::make_pair(
"(8 * (" + idx +
" / 4) + 4 * (" + lane +
" / 32) + " + idx +
" % 4)", lo);
80 void emit_fragment_transfer(
86 const std::string& frag,
87 const std::string& base
Hardware-dependent emit primitives for the composable MMA library nodes.
Definition gpu_mma_dispatcher.h:23
std::function< void( codegen::CodegenOutput &out, const std::string &main_frag_elem, const std::string &idx, const std::vector< std::string > &other_frag_elems)> EltwiseCompute
Per-element callback used by emit_eltwise: writes one output element from its inputs.
Definition gpu_mma_dispatcher.h:26
Raw v_mfma_f32_32x32x8f16 emit strategy (see RocmMfma32Support).
Definition rocm_mma_bare_dispatcher.h:14
std::string fragment_element_count(const std::string &frag) const override
Number of elements of this lane's share of frag (needed for clipped transfers).
Definition rocm_mma_bare_dispatcher.h:56
std::optional< std::pair< std::string, std::string > > fragment_element_coords(MmaFragmentType frag_type, const MmaBlockSize &block_size, const std::string &idx, std::string &condition) const override
The raw MFMA register layouts documented above.
Definition rocm_mma_bare_dispatcher.h:61
void emit_mma(codegen::CodegenOutput &out, const std::string &frag_d, const std::string &frag_a, const std::string &frag_b, const std::string &frag_c) const override
frag_d = frag_a * frag_b + frag_c (single MMA step; all operands are fragments).
void emit_fragment_store(codegen::CodegenOutput &out, const std::string &frag, const std::string &base, const GpuMmaFromMemoryLayout &layout, MmaFragmentType frag_type, types::PrimitiveType element_type) const override
Store the fragment behind frag to memory (base + layout).
void emit_eltwise(codegen::CodegenOutput &out, const std::string &main_frag, const std::vector< std::string > &additional_frags, const EltwiseCompute &compute) const override
Element-wise loop over main_frag, invoking compute for each element.
void emit_fragment_load(codegen::CodegenOutput &out, const std::string &frag, const std::string &base, const GpuMmaFromMemoryLayout &layout, MmaFragmentType frag_type, types::PrimitiveType element_type, MmaFragmentLayout fragment_layout) const override
Load a tile from memory (base + layout) into the fragment behind frag.
std::string fragment_element(const std::string &frag, const std::string &idx) const override
Expression for element idx of this lane's share of frag (needed for clipped transfers).
Definition rocm_mma_bare_dispatcher.h:52
void emit_fill(codegen::CodegenOutput &out, const std::string &acc_frag, types::PrimitiveType fill_type) const override
Zero-initialize the accumulator fragment behind acc_frag.
StringEnum ImplementationType
Implementation type identifier for library nodes.
Definition library_node.h:75
Definition rocm_arch.h:11
data_flow::ImplementationType ImplementationType_ROCM_MMA_BARE("ROCM_MMA_BARE")
MmaFragmentLayout
Definition gpu_mma_fragment.h:78
MmaFragmentType
Definition gpu_mma_fragment.h:14
@ A
Definition gpu_mma_fragment.h:14
@ B
Definition gpu_mma_fragment.h:14
PrimitiveType
Enumeration of all primitive data types supported by sdfglib.
Definition type.h:35
Definition block_dispatcher.h:108
Describes how a single MMA fragment maps to memory relative to a base pointer.
Definition gpu_mma_fragment.h:163
Definition gpu_mma_fragment.h:16