docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
offload_transform.h
Go to the documentation of this file.
1#pragma once
2
3#include <map>
4
9
10namespace sdfg {
11namespace transformations {
12
14protected:
17 bool skip_unneeded_d2h_ = true;
18
19public:
20 explicit OffloadTransform(structured_control_flow::StructuredLoop& loop, bool allow_dynamic_sizes = false);
21
23
25
26
27protected:
29
31
33
34 virtual std::string copy_prefix() = 0;
35
36 template<class Container>
38 builder::StructuredSDFGBuilder& builder, analysis::AnalysisManager& analysis_manager, Container& locals
39 ) {
40 auto& sdfg = builder.subject();
41
42 for (auto& local : locals) {
43 const types::IType& type = sdfg.type(local);
44 type.storage_type() = local_device_storage_type(); // TODO useless
45 }
46 }
47
48 virtual void setup_device(builder::StructuredSDFGBuilder& builder, Block& global_alloc_block) = 0;
49
50 virtual void teardown_device(builder::StructuredSDFGBuilder& builder, Block& global_alloc_block) = 0;
51
54 const std::map<std::string, analysis::RegionArgument>& arguments,
55 const std::unordered_map<std::string, symbolic::Expression>& argument_sizes,
56 std::string prefix
57 );
58
59 void update_loop_containers(const std::map<std::string, analysis::RegionArgument>& arguments, std::string prefix);
60
61 virtual void add_device_buffer(
63 std::string host_arg_name,
64 std::string device_arg_name,
66 ) = 0;
67
68 virtual void allocate_device_arg(
70 Block& alloc_block,
71 std::string host_arg_name,
72 std::string device_arg_name,
73 symbolic::Expression arg_size,
74 symbolic::Expression page_size
75 ) = 0;
76
79 Block& dealloc_block,
80 std::string device_arg_name,
81 symbolic::Expression arg_size,
82 symbolic::Expression page_size
83 ) = 0;
84
85 virtual void copy_to_device(
87 std::string host_arg_name,
88 std::string device_arg_name,
90 symbolic::Expression page_size,
91 Block& copy_block
92 ) = 0;
95 std::string host_arg_name,
96 std::string device_arg_name,
98 symbolic::Expression page_size,
99 Block& copy_block
100 ) = 0;
101
102 virtual void copy_from_device(
104 Block& copy_out_block,
105 std::string host_arg_name,
106 std::string device_arg_name,
108 symbolic::Expression page_size
109 ) = 0;
112 Block& copy_out_block,
113 std::string host_arg_name,
114 std::string device_arg_name,
116 symbolic::Expression page_size
117 ) = 0;
118};
119
133
134
135} // namespace transformations
136} // namespace sdfg
Definition structured_sdfg.h:30
Definition analysis.h:53
Note: Even though the class references unique_ptr, it will never delete an SDFG it has a reference to...
Definition structured_sdfg_builder.h:44
A control flow node representing a basic block with dataflow computations.
Definition block.h:42
Represents a schedule type for Map nodes.
Definition structured_loop.h:31
Base class for structured loop constructs.
Definition structured_loop.h:244
virtual void copy_to_device(builder::StructuredSDFGBuilder &builder, std::string host_arg_name, std::string device_arg_name, symbolic::Expression size, symbolic::Expression page_size, Block &copy_block)=0
void apply(builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager) override
Apply this transformation to the SDFG.
virtual void deallocate_device_arg(builder::StructuredSDFGBuilder &builder, Block &dealloc_block, std::string device_arg_name, symbolic::Expression arg_size, symbolic::Expression page_size)=0
structured_control_flow::StructuredLoop & loop_
Definition offload_transform.h:15
virtual types::StorageType global_device_storage_type(symbolic::Expression arg_size)=0
virtual void teardown_device(builder::StructuredSDFGBuilder &builder, Block &global_alloc_block)=0
bool can_be_applied(builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager) override
Check if this transformation can be safely applied.
void update_loop_containers(const std::map< std::string, analysis::RegionArgument > &arguments, std::string prefix)
virtual types::StorageType local_device_storage_type()=0
virtual ScheduleType transformed_schedule_type()=0
virtual void copy_from_device_with_free(builder::StructuredSDFGBuilder &builder, Block &copy_out_block, std::string host_arg_name, std::string device_arg_name, symbolic::Expression size, symbolic::Expression page_size)=0
void allocate_locals_on_device_stack(builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager, Container &locals)
Definition offload_transform.h:37
bool skip_unneeded_d2h_
Definition offload_transform.h:17
virtual void add_device_buffer(builder::StructuredSDFGBuilder &builder, std::string host_arg_name, std::string device_arg_name, symbolic::Expression arg_size)=0
OffloadTransform(structured_control_flow::StructuredLoop &loop, bool allow_dynamic_sizes=false)
virtual void allocate_device_arg(builder::StructuredSDFGBuilder &builder, Block &alloc_block, std::string host_arg_name, std::string device_arg_name, symbolic::Expression arg_size, symbolic::Expression page_size)=0
virtual void copy_from_device(builder::StructuredSDFGBuilder &builder, Block &copy_out_block, std::string host_arg_name, std::string device_arg_name, symbolic::Expression size, symbolic::Expression page_size)=0
virtual std::string copy_prefix()=0
virtual void setup_device(builder::StructuredSDFGBuilder &builder, Block &global_alloc_block)=0
virtual void copy_to_device_with_allocation(builder::StructuredSDFGBuilder &builder, std::string host_arg_name, std::string device_arg_name, symbolic::Expression size, symbolic::Expression page_size, Block &copy_block)=0
void handle_device_setup_and_teardown(builder::StructuredSDFGBuilder &builder, const std::map< std::string, analysis::RegionArgument > &arguments, const std::unordered_map< std::string, symbolic::Expression > &argument_sizes, std::string prefix)
bool allow_dynamic_sizes_
Definition offload_transform.h:16
bool accept(structured_control_flow::Block &node) override
SideEffectFinder(StructuredSDFG &sdfg, analysis::AnalysisManager &analysis_manager, structured_control_flow::StructuredLoop &loop)
Base class for all SDFG transformations.
Definition transformation.h:25
Abstract base interface for all types in the sdfglib type system.
Definition type.h:625
StorageType storage_type() const
Gets the storage type (const version).
Definition type.h:651
Represents the storage location and management characteristics of data.
Definition type.h:64
Definition immutable_structured_sdfg_visitor.h:10
SymEngine::RCP< const SymEngine::Basic > Expression
Reference-counted pointer to a symbolic expression (SymEngine Basic).
Definition symbolic.h:83
Definition function_builder.h:10
Definition loop_parallelization.h:8
Definition analysis.h:7