docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
sdfg::gpu::GPUOffloadBaseDispatcher Class Referenceabstract

Shared scaffolding for the GPU offload dispatchers (Map and Reduce). More...

#include <sdfg/targets/gpu/gpu_offload_base_dispatcher.h>

Inheritance diagram for sdfg::gpu::GPUOffloadBaseDispatcher:
[legend]

Public Member Functions

void dispatch_node (codegen::PrettyPrinter &main_stream, codegen::PrettyPrinter &globals_stream, codegen::CodeSnippetFactory &library_snippet_factory) override
codegen::InstrumentationInfo instrumentation_info () const override
 Bad design.
Public Member Functions inherited from sdfg::codegen::NodeDispatcher
 NodeDispatcher (LanguageExtension &language_extension, StructuredSDFG &sdfg, analysis::AnalysisManager &analysis_manager, structured_control_flow::ControlFlowNode &node, InstrumentationPlan &instrumentation_plan, ArgCapturePlan &arg_capture_plan)
virtual ~NodeDispatcher ()=default
InstrumentationInfo instrumentation_info_for_group () const
virtual void dispatch (PrettyPrinter &main_stream, PrettyPrinter &globals_stream, CodeSnippetFactory &library_snippet_factory)

Protected Member Functions

 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)
bool is_outermost_map (analysis::AnalysisManager &analysis_manager)
void dispatch_header (codegen::PrettyPrinter &globals_stream, const std::string &kernel_name, std::vector< std::string > &arguments_declaration)
void dispatch_kernel_preamble (codegen::PrettyPrinter &library_stream, const std::string &kernel_name, std::vector< std::string > &arguments_declaration)
void emit_lib_dependency_includes (codegen::PrettyPrinter &kernel_header_stream, codegen::NestedCodeSnippetFactory &nested_snippet_factory)
virtual void validate_before_dispatch (analysis::AnalysisManager &analysis_manager)
 Node-specific preconditions checked before any code is emitted (default: none).
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
Protected Member Functions inherited from sdfg::codegen::NodeDispatcher
virtual bool begin_node (PrettyPrinter &stream)
virtual void end_node (PrettyPrinter &stream, bool has_declaration)

Protected Attributes

structured_control_flow::StructuredLoop & node_
std::unique_ptr< GPUOffloadDispatcherStrategy > strategy_
long launch_bounds_ = 0
Protected Attributes inherited from sdfg::codegen::NodeDispatcher
LanguageExtension & language_extension_
StructuredSDFG & sdfg_
InstrumentationPlan & instrumentation_plan_
ArgCapturePlan & arg_capture_plan_
analysis::AnalysisManager & analysis_manager_

Detailed Description

Shared scaffolding for the GPU offload dispatchers (Map and Reduce).

Owns the code common to every offloaded kernel: collecting kernel arguments and scope variables, computing the launch grid/block sizes, emitting the kernel declaration, opening the kernel translation unit + its include header, and calling the (device-)target launch. The node-specific body and the target-specific launch/language policy are supplied by subclasses.

The target specific parts are handled by the DispatcherStrategy across Map and Reduce kernels

Constructor & Destructor Documentation

◆ GPUOffloadBaseDispatcher()

sdfg::gpu::GPUOffloadBaseDispatcher::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 )
protected

Member Function Documentation

◆ dispatch_header()

void sdfg::gpu::GPUOffloadBaseDispatcher::dispatch_header ( codegen::PrettyPrinter & globals_stream,
const std::string & kernel_name,
std::vector< std::string > & arguments_declaration )
protected

◆ dispatch_kernel_body()

virtual void sdfg::gpu::GPUOffloadBaseDispatcher::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 )
protectedpure virtual

◆ dispatch_kernel_preamble()

void sdfg::gpu::GPUOffloadBaseDispatcher::dispatch_kernel_preamble ( codegen::PrettyPrinter & library_stream,
const std::string & kernel_name,
std::vector< std::string > & arguments_declaration )
protected

◆ dispatch_node()

void sdfg::gpu::GPUOffloadBaseDispatcher::dispatch_node ( codegen::PrettyPrinter & main_stream,
codegen::PrettyPrinter & globals_stream,
codegen::CodeSnippetFactory & library_snippet_factory )
overridevirtual

◆ emit_lib_dependency_includes()

void sdfg::gpu::GPUOffloadBaseDispatcher::emit_lib_dependency_includes ( codegen::PrettyPrinter & kernel_header_stream,
codegen::NestedCodeSnippetFactory & nested_snippet_factory )
protected

◆ instrumentation_info()

codegen::InstrumentationInfo sdfg::gpu::GPUOffloadBaseDispatcher::instrumentation_info ( ) const
overridevirtual

Bad design.

We already have fields in this class and have to bind an instance to a single node. Just set a field to sth. of the instrumentation plan where the node can register more details. But this is a breaking change

Reimplemented from sdfg::codegen::NodeDispatcher.

◆ is_outermost_map()

bool sdfg::gpu::GPUOffloadBaseDispatcher::is_outermost_map ( analysis::AnalysisManager & analysis_manager)
protected

◆ validate_before_dispatch()

virtual void sdfg::gpu::GPUOffloadBaseDispatcher::validate_before_dispatch ( analysis::AnalysisManager & analysis_manager)
inlineprotectedvirtual

Node-specific preconditions checked before any code is emitted (default: none).

Reimplemented in sdfg::gpu::GPUOffloadReduceDispatcher.

Member Data Documentation

◆ launch_bounds_

long sdfg::gpu::GPUOffloadBaseDispatcher::launch_bounds_ = 0
protected

◆ node_

structured_control_flow::StructuredLoop& sdfg::gpu::GPUOffloadBaseDispatcher::node_
protected

◆ strategy_

std::unique_ptr<GPUOffloadDispatcherStrategy> sdfg::gpu::GPUOffloadBaseDispatcher::strategy_
protected

The documentation for this class was generated from the following file: