docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
cuda_transform.h
Go to the documentation of this file.
1#pragma once
2
5
6namespace sdfg {
7namespace cuda {
8
22public:
23 explicit CUDATransform(
24 structured_control_flow::StructuredLoop& loop, int block_size = 32, bool allow_dynamic_sizes = false
25 )
26 : OffloadTransform(loop, allow_dynamic_sizes), block_size_(block_size) {};
27
28 std::string name() const override;
29
31
32 void to_json(nlohmann::json& j) const override;
33
34 static CUDATransform from_json(builder::StructuredSDFGBuilder& builder, const nlohmann::json& desc);
35
36protected:
45
54
56 auto schedule = ScheduleType_CUDA::create();
57 if (block_size_ != 0) {
59 }
60 return schedule;
61 }
62
63 std::string copy_prefix() override {
64 return CUDA_DEVICE_PREFIX;
65 }
66
69 std::string host_arg_name,
70 std::string device_arg_name,
72 ) override;
73
76 Block& alloc_block,
77 std::string host_arg_name,
78 std::string device_arg_name,
79 symbolic::Expression arg_size,
80 symbolic::Expression page_size
81 ) override;
82
85 Block& dealloc_block,
86 std::string device_arg_name,
87 symbolic::Expression arg_size,
88 symbolic::Expression page_size
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 std::string host_arg_name,
103 std::string device_arg_name,
105 symbolic::Expression page_size,
106 Block& copy_block
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
120 Block& copy_out_block,
121 std::string host_arg_name,
122 std::string device_arg_name,
124 symbolic::Expression page_size
125 ) override;
126
127 void setup_device(builder::StructuredSDFGBuilder& builder, Block& global_alloc_block) override {
128 }
129 void teardown_device(builder::StructuredSDFGBuilder& builder, Block& global_alloc_block) override {
130 }
131
132private:
133 int block_size_;
134};
135
136} // namespace cuda
137} // 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
bool can_be_applied(builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager) override
Check if this transformation can be safely applied.
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
void add_device_buffer(builder::StructuredSDFGBuilder &builder, std::string host_arg_name, std::string device_arg_name, symbolic::Expression arg_size) override
std::string copy_prefix() override
Definition cuda_transform.h:63
void teardown_device(builder::StructuredSDFGBuilder &builder, Block &global_alloc_block) override
Definition cuda_transform.h:129
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
ScheduleType transformed_schedule_type() override
Definition cuda_transform.h:55
CUDATransform(structured_control_flow::StructuredLoop &loop, int block_size=32, bool allow_dynamic_sizes=false)
Definition cuda_transform.h:23
void to_json(nlohmann::json &j) const override
Serialize this transformation to JSON.
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 deallocate_device_arg(builder::StructuredSDFGBuilder &builder, Block &dealloc_block, std::string device_arg_name, symbolic::Expression arg_size, symbolic::Expression page_size) override
static CUDATransform from_json(builder::StructuredSDFGBuilder &builder, const nlohmann::json &desc)
void setup_device(builder::StructuredSDFGBuilder &builder, Block &global_alloc_block) override
Definition cuda_transform.h:127
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
types::StorageType global_device_storage_type(symbolic::Expression arg_size) override
Definition cuda_transform.h:46
types::StorageType local_device_storage_type() override
Definition cuda_transform.h:37
std::string name() const override
Get the name of this transformation.
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
static structured_control_flow::ScheduleType create()
Definition gpu_schedule_type.h:94
static void block_size(structured_control_flow::ScheduleType &schedule, const symbolic::Expression block_size)
Definition gpu_schedule_type.h:45
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
Definition function_builder.h:10
Definition cuda_library_node_rewriter_pass.h:11
std::string CUDA_DEVICE_PREFIX
Definition cuda.h:15
Definition analysis.h:7