docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
tile_fusion.h
Go to the documentation of this file.
1#pragma once
2
9
10namespace sdfg {
11namespace transformations {
12
32class TileFusion : public Transformation {
35 bool applied_ = false;
36
37 structured_control_flow::StructuredLoop* fused_loop_ = nullptr;
38 int radius_ = 0;
39
41 struct TileFusionCandidate {
42 std::string container;
43 int radius;
44 };
45 std::vector<TileFusionCandidate> candidates_;
46
48 struct CyclicContainerInfo {
49 std::string container;
50 int min_offset;
51 int max_offset;
52 int tiled_dim;
53 int tiled_dim_buf_size;
54
58
59 int buffer_size;
60 };
61 std::vector<CyclicContainerInfo> cyclic_containers_;
62
65 static int compute_radius(
66 const data_flow::Subset& producer_write_subset,
67 const std::vector<data_flow::Subset>& consumer_read_subsets,
68 const std::vector<structured_control_flow::StructuredLoop*>& producer_loops,
69 const std::vector<structured_control_flow::StructuredLoop*>& consumer_loops,
70 const symbolic::Assumptions& producer_assumptions,
71 const symbolic::Assumptions& consumer_assumptions
72 );
73
74public:
81
82 virtual std::string name() const override;
83
84 virtual bool
86
87 virtual void apply(builder::StructuredSDFGBuilder& builder, analysis::AnalysisManager& analysis_manager) override;
88
89 virtual void to_json(nlohmann::json& j) const override;
90
92
95
97 int radius() const;
98};
99
100} // namespace transformations
101} // namespace sdfg
Symbol assumptions for reasoning about bounds, constness, and evolution.
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
The metadata associated with a addressing a tensor in elements Meant to be used with TensorNodes to d...
Definition tensor_layout.h:20
Represents a parallel map loop with configurable scheduling.
Definition map.h:47
Base class for structured loop constructs.
Definition structured_loop.h:244
Map from symbols to their assumptions.
Definition assumptions.h:313
virtual bool can_be_applied(builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager) override
Check if this transformation can be safely applied.
static TileFusion from_json(builder::StructuredSDFGBuilder &builder, const nlohmann::json &j)
virtual void to_json(nlohmann::json &j) const override
Serialize this transformation to JSON.
int radius() const
Get the computed radius (only valid after can_be_applied returns true).
virtual void apply(builder::StructuredSDFGBuilder &builder, analysis::AnalysisManager &analysis_manager) override
Apply this transformation to the SDFG.
structured_control_flow::StructuredLoop * fused_loop() const
Get the fused For loop (only valid after apply).
TileFusion(structured_control_flow::Map &first_map, structured_control_flow::Map &second_map)
Construct a tile fusion transformation.
virtual std::string name() const override
Get the name of this transformation.
Base class for all SDFG transformations.
Definition transformation.h:25
std::vector< Expression > MultiExpression
Vector of symbolic expressions for multi-dimensional operations.
Definition symbolic.h:89
Definition function_builder.h:10
symbolic::MultiExpression Subset
Type alias for a subset specification (array of symbolic expressions).
Definition memlet.h:103
Definition loop_parallelization.h:8
Definition analysis.h:7