docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
gpu_offload_base_dispatcher.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <vector>
5
13#include "sdfg/types/type.h"
14
15namespace sdfg {
16namespace gpu {
17
18// Interface to handle everything cuda/rocm specific
20public:
21 virtual ~GPUOffloadDispatcherStrategy() = default;
22
24 const StructuredSDFG& sdfg, const StructuredLoop& loop, codegen::LanguageExtension& language_extension
25 ) = 0;
26 virtual std::unique_ptr<codegen::LanguageExtension>
29 const StructuredSDFG& sdfg, const StructuredLoop& loop, codegen::LanguageExtension& language_extension
30 ) {
31 if (!is_matching_kernel_language_extension(sdfg, loop, language_extension)) {
32 throw std::runtime_error("Outermost loop should have already provided kernel language extension");
33 }
34 }
35
38 virtual void emit_target_header_declarations(codegen::PrettyPrinter& kernel_header_stream) = 0;
39
40 virtual void emit_target_global_includes(codegen::CodeSnippetFactory& library_snippet_factory) = 0;
41
43 codegen::PrettyPrinter& main_stream,
44 const std::string& kernel_name,
45 codegen::LanguageExtension& host_language_ext,
46 symbolic::Expression& num_blocks_x,
47 symbolic::Expression& num_blocks_y,
48 symbolic::Expression& num_blocks_z,
49 symbolic::Expression& block_size_x,
50 symbolic::Expression& block_size_y,
51 symbolic::Expression& block_size_z,
52 std::vector<std::string>& arguments_device
53 ) = 0;
54
56
57 virtual int get_warp_size() const = 0;
58
59 virtual bool is_device_pointer_storage(const types::StorageType& storage) const = 0;
60
62 virtual std::string kernel_file_extension() const = 0;
64 virtual std::string kernel_header_file_extension() const = 0;
65
67 virtual std::string warp_shuffle_xor(const std::string& value, const std::string& lane_mask) const = 0;
68};
69
82protected:
84 std::unique_ptr<GPUOffloadDispatcherStrategy> strategy_;
85 // Threads per block when statically known (0 otherwise); emitted as __launch_bounds__.
87
89 codegen::LanguageExtension& language_extension,
91 analysis::AnalysisManager& analysis_manager,
93 codegen::InstrumentationPlan& instrumentation_plan,
94 codegen::ArgCapturePlan& arg_capture_plan,
95 std::unique_ptr<GPUOffloadDispatcherStrategy> strategy
96 );
97
99
101 codegen::PrettyPrinter& globals_stream,
102 const std::string& kernel_name,
103 std::vector<std::string>& arguments_declaration
104 );
105
107 codegen::PrettyPrinter& library_stream,
108 const std::string& kernel_name,
109 std::vector<std::string>& arguments_declaration
110 );
111
112 // Emit the includes for every kernel-local library dependency (e.g. rocwmma)
113 // tracked by the nested snippet factory, into the kernel's include header.
115 codegen::PrettyPrinter& kernel_header_stream, codegen::NestedCodeSnippetFactory& nested_snippet_factory
116 );
117
119 virtual void validate_before_dispatch(analysis::AnalysisManager& analysis_manager) {
120 }
121
123 codegen::NestedCodeSnippetFactory& kernel_snippet_factory,
124 codegen::PrettyPrinter& kernel_source_stream,
125 codegen::PrettyPrinter& kernel_header_stream,
126 codegen::LanguageExtension& kernel_lang_ext,
127 symbolic::Symbol indvar,
128 std::vector<std::string>& scope_variables,
129 symbolic::Expression& num_iterations
130 ) = 0;
131
132public:
134 codegen::PrettyPrinter& main_stream,
135 codegen::PrettyPrinter& globals_stream,
136 codegen::CodeSnippetFactory& library_snippet_factory
137 ) override;
138
140};
141
142} // namespace gpu
143} // namespace sdfg
Definition structured_sdfg.h:30
Definition analysis.h:53
Definition arg_capture_plan.h:36
Originally started out as a handler for additional source files, like hardware-accelerator kernels th...
Definition code_snippet_factory.h:69
Definition instrumentation_info.h:37
Definition instrumentation_plan.h:26
Definition language_extension.h:39
Used when we need to dispatch main SDFG elements into a subset of files (like offloaded kernels).
Definition code_snippet_factory.h:150
Base class for dispatching control flow nodes to code.
Definition node_dispatcher.h:41
Definition utils.h:16
std::unique_ptr< GPUOffloadDispatcherStrategy > strategy_
Definition gpu_offload_base_dispatcher.h:84
void dispatch_kernel_preamble(codegen::PrettyPrinter &library_stream, const std::string &kernel_name, std::vector< std::string > &arguments_declaration)
GPUOffloadBaseDispatcher(codegen::LanguageExtension &language_extension, StructuredSDFG &sdfg, analysis::AnalysisManager &analysis_manager, structured_control_flow::StructuredLoop &node, codegen::InstrumentationPlan &instrumentation_plan, codegen::ArgCapturePlan &arg_capture_plan, std::unique_ptr< GPUOffloadDispatcherStrategy > strategy)
virtual void dispatch_kernel_body(codegen::NestedCodeSnippetFactory &kernel_snippet_factory, codegen::PrettyPrinter &kernel_source_stream, codegen::PrettyPrinter &kernel_header_stream, codegen::LanguageExtension &kernel_lang_ext, symbolic::Symbol indvar, std::vector< std::string > &scope_variables, symbolic::Expression &num_iterations)=0
long launch_bounds_
Definition gpu_offload_base_dispatcher.h:86
structured_control_flow::StructuredLoop & node_
Definition gpu_offload_base_dispatcher.h:83
void dispatch_header(codegen::PrettyPrinter &globals_stream, const std::string &kernel_name, std::vector< std::string > &arguments_declaration)
virtual void validate_before_dispatch(analysis::AnalysisManager &analysis_manager)
Node-specific preconditions checked before any code is emitted (default: none).
Definition gpu_offload_base_dispatcher.h:119
codegen::InstrumentationInfo instrumentation_info() const override
Bad design.
bool is_outermost_map(analysis::AnalysisManager &analysis_manager)
void emit_lib_dependency_includes(codegen::PrettyPrinter &kernel_header_stream, codegen::NestedCodeSnippetFactory &nested_snippet_factory)
void dispatch_node(codegen::PrettyPrinter &main_stream, codegen::PrettyPrinter &globals_stream, codegen::CodeSnippetFactory &library_snippet_factory) override
Definition gpu_offload_base_dispatcher.h:19
void require_matching_kernel_language_extension(const StructuredSDFG &sdfg, const StructuredLoop &loop, codegen::LanguageExtension &language_extension)
Definition gpu_offload_base_dispatcher.h:28
virtual ~GPUOffloadDispatcherStrategy()=default
virtual codegen::TargetType get_instrumentation_kernel_target_type() const =0
virtual int get_warp_size() const =0
virtual std::string kernel_file_extension() const =0
File extension for the kernel translation unit ("cu"/"rocm.cpp").
virtual bool is_matching_kernel_language_extension(const StructuredSDFG &sdfg, const StructuredLoop &loop, codegen::LanguageExtension &language_extension)=0
virtual std::unique_ptr< codegen::LanguageExtension > create_kernel_language_extension(StructuredSDFG &sdfg, const StructuredLoop &loop)=0
virtual void emit_target_global_includes(codegen::CodeSnippetFactory &library_snippet_factory)=0
virtual std::string kernel_header_file_extension() const =0
File extension for the kernel's include header ("cu.h"/"rocm.h").
virtual void emit_target_header_declarations(codegen::PrettyPrinter &kernel_header_stream)=0
Target-specific includes/declarations emitted into the kernel include header (device fp16/bf16 intrin...
virtual std::string warp_shuffle_xor(const std::string &value, const std::string &lane_mask) const =0
Cross-lane XOR butterfly shuffle of value by lane_mask (CUDA/HIP __shfl_xor_sync).
virtual void dispatch_kernel_call(codegen::PrettyPrinter &main_stream, const std::string &kernel_name, codegen::LanguageExtension &host_language_ext, symbolic::Expression &num_blocks_x, symbolic::Expression &num_blocks_y, symbolic::Expression &num_blocks_z, symbolic::Expression &block_size_x, symbolic::Expression &block_size_y, symbolic::Expression &block_size_z, std::vector< std::string > &arguments_device)=0
virtual bool is_device_pointer_storage(const types::StorageType &storage) const =0
Base class for structured loop constructs.
Definition structured_loop.h:244
Represents the storage location and management characteristics of data.
Definition type.h:64
SymEngine::RCP< const SymEngine::Basic > Expression
Reference-counted pointer to a symbolic expression (SymEngine Basic).
Definition symbolic.h:83
SymEngine::RCP< const SymEngine::Symbol > Symbol
Reference-counted pointer to a SymEngine Symbol.
Definition symbolic.h:71
StringEnum TargetType
Definition instrumentation_info.h:32
Definition cuda_arch.h:11
Definition analysis.h:7
Dispatcher base class for code generation from control flow nodes.
Symbolic system for integer-based symbol analysis.
Core type system definitions for sdfglib.