docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
gpu_offload_transform.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace sdfg {
8namespace gpu {
9
10template<typename OffloaderNodeType>
12public:
15 symbolic::Integer parallel_size = symbolic::integer(32),
16 TargetLevel target_level = TargetLevel::X_GRID,
17 bool allow_dynamic_sizes = false
18 )
19 : OffloadTransform(loop, allow_dynamic_sizes), parallel_size_(parallel_size), target_level_(target_level) {};
20
21 virtual std::string name() const override = 0;
22
24
25 void to_json(nlohmann::json& j) const override;
26
28 from_json(builder::StructuredSDFGBuilder& builder, const nlohmann::json& desc);
29
30protected:
33
35
44
53
55
56 virtual std::string copy_prefix() override = 0;
57
60 std::string host_arg_name,
61 std::string device_arg_name,
63 ) override;
64
67 Block& alloc_block,
68 std::string host_arg_name,
69 std::string device_arg_name,
70 symbolic::Expression arg_size,
71 symbolic::Expression page_size
72 ) override;
73
76 Block& dealloc_block,
77 std::string device_arg_name,
78 symbolic::Expression arg_size,
79 symbolic::Expression page_size
80 ) override;
81
84 std::string host_arg_name,
85 std::string device_arg_name,
87 symbolic::Expression page_size,
88 Block& copy_block
89 ) override;
90
93 std::string host_arg_name,
94 std::string device_arg_name,
96 symbolic::Expression page_size,
97 Block& copy_block
98 ) override;
99
102 Block& copy_out_block,
103 std::string host_arg_name,
104 std::string device_arg_name,
106 symbolic::Expression page_size
107 ) override;
108
111 Block& copy_out_block,
112 std::string host_arg_name,
113 std::string device_arg_name,
115 symbolic::Expression page_size
116 ) override;
117
118 void setup_device(builder::StructuredSDFGBuilder& builder, Block& global_alloc_block) override {
119 }
120 void teardown_device(builder::StructuredSDFGBuilder& builder, Block& global_alloc_block) override {
121 }
122};
123
124} // namespace gpu
125} // namespace sdfg
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
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) override
virtual ScheduleType transformed_schedule_type() override=0
void deallocate_device_arg(builder::StructuredSDFGBuilder &builder, Block &dealloc_block, std::string device_arg_name, symbolic::Expression arg_size, symbolic::Expression page_size) override
bool can_be_applied(builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager) override
Check if this transformation can be safely applied.
bool reduction_buffers_supported(analysis::AnalysisManager &analysis_manager)
GPUOffloadTransform(structured_control_flow::StructuredLoop &loop, symbolic::Integer parallel_size=symbolic::integer(32), TargetLevel target_level=TargetLevel::X_GRID, bool allow_dynamic_sizes=false)
Definition gpu_offload_transform.h:13
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) override
void teardown_device(builder::StructuredSDFGBuilder &builder, Block &global_alloc_block) override
Definition gpu_offload_transform.h:120
gpu::TargetLevel target_level_
Definition gpu_offload_transform.h:32
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) override
static GPUOffloadTransform< OffloaderNodeType > from_json(builder::StructuredSDFGBuilder &builder, const nlohmann::json &desc)
types::StorageType global_device_storage_type(symbolic::Expression arg_size) override
Definition gpu_offload_transform.h:45
const symbolic::Integer parallel_size_
Definition gpu_offload_transform.h:31
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) override
types::StorageType local_device_storage_type() override
Definition gpu_offload_transform.h:36
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) override
void add_device_buffer(builder::StructuredSDFGBuilder &builder, std::string host_arg_name, std::string device_arg_name, symbolic::Expression arg_size) override
void setup_device(builder::StructuredSDFGBuilder &builder, Block &global_alloc_block) override
Definition gpu_offload_transform.h:118
virtual std::string copy_prefix() override=0
virtual std::string name() const override=0
Get the name of this transformation.
void to_json(nlohmann::json &j) const override
Serialize this transformation to JSON.
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
Definition offload_transform.h:13
OffloadTransform(structured_control_flow::StructuredLoop &loop, bool allow_dynamic_sizes=false)
Represents the storage location and management characteristics of data.
Definition type.h:64
@ Unmanaged
Memory is not automatically managed.
Definition type.h:71
Integer integer(int64_t value)
Creates an integer constant.
SymEngine::RCP< const SymEngine::Basic > Expression
Reference-counted pointer to a symbolic expression (SymEngine Basic).
Definition symbolic.h:83
SymEngine::RCP< const SymEngine::Integer > Integer
Reference-counted pointer to a SymEngine Integer constant.
Definition symbolic.h:77
Definition function_builder.h:10
Definition cuda_arch.h:11
TargetLevel
Definition gpu_offload_schedule_type.h:13
@ X_GRID
Definition gpu_offload_schedule_type.h:14
Definition analysis.h:7
Symbolic system for integer-based symbol analysis.