28 const std::string& main_frag_elem,
29 const std::string& idx,
30 const std::vector<std::string>& other_frag_elems
46 const std::string& frag_d,
47 const std::string& frag_a,
48 const std::string& frag_b,
49 const std::string& frag_c
55 const std::string& frag,
56 const std::string& base,
66 const std::string& frag,
67 const std::string& base,
76 const std::string& main_frag,
77 const std::vector<std::string>& additional_frags,
82 virtual std::string
fragment_element(
const std::string& frag,
const std::string& idx)
const {
83 throw std::runtime_error(
"GpuMmaDispatcherStrategy: clipped fragment transfers are not supported");
88 throw std::runtime_error(
"GpuMmaDispatcherStrategy: clipped fragment transfers are not supported");
111 const std::string& frag,
112 const std::string& base,
131 std::unique_ptr<GpuMmaDispatcherStrategy> strategy
144 std::vector<codegen::DispatchInput>& inputs,
145 std::vector<codegen::DispatchOutput>& outputs
156 std::vector<codegen::DispatchInput>& inputs,
157 std::vector<codegen::DispatchOutput>& outputs
168 std::vector<codegen::DispatchInput>& inputs,
169 std::vector<codegen::DispatchOutput>& outputs
180 std::vector<codegen::DispatchInput>& inputs,
181 std::vector<codegen::DispatchOutput>& outputs
192 std::vector<codegen::DispatchInput>& inputs,
193 std::vector<codegen::DispatchOutput>& outputs
Dispatchers for dataflow blocks and library nodes.
Definition language_extension.h:39
Base class for library node code generation dispatchers.
Definition block_dispatcher.h:163
LibraryNodeDispatcher(LanguageExtension &language_extension, const Function &function, const data_flow::DataFlowGraph &data_flow_graph, const data_flow::LibraryNode &node)
Construct a library node dispatcher.
Definition data_flow_graph.h:29
Base class for all library nodes in the dataflow graph.
Definition library_node.h:106
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
virtual 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 =0
Store the fragment behind frag to memory (base + layout).
virtual 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
Analytic (row, col) block coordinates of this lane's element idx, if the fragment's register layout i...
Definition gpu_mma_dispatcher.h:94
virtual std::string fragment_element(const std::string &frag, const std::string &idx) const
Expression for element idx of this lane's share of frag (needed for clipped transfers).
Definition gpu_mma_dispatcher.h:82
virtual 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 =0
Load a tile from memory (base + layout) into the fragment behind frag.
virtual void emit_eltwise(codegen::CodegenOutput &out, const std::string &main_frag, const std::vector< std::string > &additional_frags, const EltwiseCompute &compute) const =0
Element-wise loop over main_frag, invoking compute for each element.
virtual ~GpuMmaDispatcherStrategy()=default
virtual void emit_fill(codegen::CodegenOutput &out, const std::string &acc_frag, types::PrimitiveType fill_type) const =0
Zero-initialize the accumulator fragment behind acc_frag.
virtual void emit_needed_declarations(codegen::CodegenOutput &out) const
Target library includes / helper declarations needed before the first emit.
Definition gpu_mma_dispatcher.h:36
virtual std::string fragment_element_count(const std::string &frag) const
Number of elements of this lane's share of frag (needed for clipped transfers).
Definition gpu_mma_dispatcher.h:87
virtual 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 =0
frag_d = frag_a * frag_b + frag_c (single MMA step; all operands are fragments).
D = out_type(Acc + acc_type(C)), element-wise over the fragments (gpu::GpuMmaFragmentEltwiseAdd).
Definition gpu_mma_dispatcher.h:186
GpuMmaNodeDispatcher(codegen::LanguageExtension &language_extension, const Function &function, const data_flow::DataFlowGraph &data_flow_graph, const data_flow::LibraryNode &node, std::unique_ptr< GpuMmaDispatcherStrategy > strategy)
Definition gpu_mma_dispatcher.h:126
void dispatch_code_with_edges(codegen::CodegenOutput &out, std::vector< codegen::DispatchInput > &inputs, std::vector< codegen::DispatchOutput > &outputs) override
Declare and zero-initialize an MMA accumulator fragment (gpu::GpuMmaFill).
Definition gpu_mma_dispatcher.h:150
GpuMmaNodeDispatcher(codegen::LanguageExtension &language_extension, const Function &function, const data_flow::DataFlowGraph &data_flow_graph, const data_flow::LibraryNode &node, std::unique_ptr< GpuMmaDispatcherStrategy > strategy)
Definition gpu_mma_dispatcher.h:126
void dispatch_code_with_edges(codegen::CodegenOutput &out, std::vector< codegen::DispatchInput > &inputs, std::vector< codegen::DispatchOutput > &outputs) override
Load a tile from memory into a fragment (gpu::GpuMmaFragmentLoad).
Definition gpu_mma_dispatcher.h:162
GpuMmaNodeDispatcher(codegen::LanguageExtension &language_extension, const Function &function, const data_flow::DataFlowGraph &data_flow_graph, const data_flow::LibraryNode &node, std::unique_ptr< GpuMmaDispatcherStrategy > strategy)
Definition gpu_mma_dispatcher.h:126
void dispatch_code_with_edges(codegen::CodegenOutput &out, std::vector< codegen::DispatchInput > &inputs, std::vector< codegen::DispatchOutput > &outputs) override
Store a fragment to a tile in memory (gpu::GpuMmaFragmentStore).
Definition gpu_mma_dispatcher.h:174
GpuMmaNodeDispatcher(codegen::LanguageExtension &language_extension, const Function &function, const data_flow::DataFlowGraph &data_flow_graph, const data_flow::LibraryNode &node, std::unique_ptr< GpuMmaDispatcherStrategy > strategy)
Definition gpu_mma_dispatcher.h:126
void dispatch_code_with_edges(codegen::CodegenOutput &out, std::vector< codegen::DispatchInput > &inputs, std::vector< codegen::DispatchOutput > &outputs) override
A single MMA accumulation of A * B into a preinitialized accumulator (gpu::GpuMmaMatmul).
Definition gpu_mma_dispatcher.h:138
GpuMmaNodeDispatcher(codegen::LanguageExtension &language_extension, const Function &function, const data_flow::DataFlowGraph &data_flow_graph, const data_flow::LibraryNode &node, std::unique_ptr< GpuMmaDispatcherStrategy > strategy)
Definition gpu_mma_dispatcher.h:126
void dispatch_code_with_edges(codegen::CodegenOutput &out, std::vector< codegen::DispatchInput > &inputs, std::vector< codegen::DispatchOutput > &outputs) override
std::unique_ptr< GpuMmaDispatcherStrategy > strategy_
Definition gpu_mma_dispatcher.h:123
GpuMmaNodeDispatcher(codegen::LanguageExtension &language_extension, const Function &function, const data_flow::DataFlowGraph &data_flow_graph, const data_flow::LibraryNode &node, std::unique_ptr< GpuMmaDispatcherStrategy > strategy)
Definition gpu_mma_dispatcher.h:126
Definition cuda_arch.h:11
MmaFragmentLayout
Definition gpu_mma_fragment.h:78
void emit_clipped_fragment_transfer(codegen::CodegenOutput &out, const GpuMmaDispatcherStrategy &strategy, bool load, const std::string &frag, const std::string &base, const GpuMmaFromMemoryLayout &layout, const MmaBlockSize &block_size, MmaFragmentType frag_type, types::PrimitiveType element_type, MmaFragmentLayout fragment_layout)
Emit a fragment load/store whose layout is clipped (GpuMmaFromMemoryLayout::rows/cols): a wave-unifor...
MmaFragmentType
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
Core type system definitions for sdfglib.