15#include <unordered_map>
16#include <unordered_set>
80 std::vector<const data_flow::Memlet*>
memlets;
97 std::unordered_map<const data_flow::Memlet*, MemoryTile> accesses_;
101 std::unordered_map<const structured_control_flow::ControlFlowNode*, std::vector<const data_flow::Memlet*>>
103 std::unordered_set<const structured_control_flow::ControlFlowNode*> computed_;
105 std::map<std::pair<const structured_control_flow::ControlFlowNode*, std::string>,
MemoryTile> tiles_;
106 std::map<std::pair<const structured_control_flow::ControlFlowNode*, std::string>, std::vector<MemoryTileGroup>>
114 std::unique_ptr<AssumptionsAnalysis> detailed_assumptions_;
117 std::unordered_map<const symbolic::Assumptions*, std::unique_ptr<symbolic::AssumptionsBounds>> bounds_cache_;
128 void merge_scope_layouts(
130 const std::vector<const data_flow::Memlet*>& memlets,
134 void compute_tile_groups(
136 const std::string& container,
137 const std::vector<const data_flow::Memlet*>& memlets,
152 std::string
name()
const override {
153 return "MemoryLayoutAnalysis";
180 const std::vector<MemoryTileGroup>*
Definition structured_sdfg.h:30
Analysis(StructuredSDFG &sdfg)
const MemoryTile * tile(const structured_control_flow::ControlFlowNode &scope, const std::string &container) const
Get the inferred memory layout for a container at a specific scope.
MemoryLayoutAnalysis(StructuredSDFG &sdfg)
std::string name() const override
Definition memory_layout_analysis.h:152
const MemoryTileGroup * tile_group_for(const structured_control_flow::ControlFlowNode &scope, const data_flow::Memlet &memlet) const
Get the tile group containing a specific memlet at a scope.
const MemoryTile * access(const data_flow::Memlet &memlet) const
Get the inferred memory layout for a memlet.
void run(analysis::AnalysisManager &analysis_manager) override
bool invalidate(structured_control_flow::ControlFlowNode &changed) override
Marks the subtree of changed and the scopes around it as out of date; queries compute them again.
const std::vector< MemoryTileGroup > * tile_groups(const structured_control_flow::ControlFlowNode &scope, const std::string &container) const
Get tile groups for a container at a specific scope.
MemoryLayoutAnalysis(StructuredSDFG &sdfg, const Options &options)
Edge in the dataflow graph representing data movement.
Definition memlet.h:131
The metadata associated with a addressing a tensor in elements Meant to be used with TensorNodes to d...
Definition tensor_layout.h:20
A control flow node representing a basic block with dataflow computations.
Definition block.h:42
Base class for all structured control flow nodes in a StructuredSDFG.
Definition control_flow_node.h:44
Computes bounds of symbolic expressions using assumptions.
Definition extreme_values.h:110
Computing bounds of symbolic expressions using assumptions.
std::vector< Expression > MultiExpression
Vector of symbolic expressions for multi-dimensional operations.
Definition symbolic.h:89
SymEngine::RCP< const SymEngine::Basic > Expression
Reference-counted pointer to a symbolic expression (SymEngine Basic).
Definition symbolic.h:83
Edges in the dataflow graph representing data movement.
math::tensor::TensorLayout MemoryLayout
Definition memory_layout_analysis.h:33
symbolic::MultiExpression Subset
Type alias for a subset specification (array of symbolic expressions).
Definition memlet.h:103
Definition memory_layout_analysis.h:78
MemoryTile tile
Definition memory_layout_analysis.h:79
std::vector< const data_flow::Memlet * > memlets
Definition memory_layout_analysis.h:80
Definition memory_layout_analysis.h:35
std::pair< symbolic::Expression, symbolic::Expression > contiguous_range() const
First and last linear element addresses: offset + sum(stride[d] * idx[d]).
bool is_point() const
A trivial (point) tile: a single index per dimension (min == max), as opposed to a bounded range.
bool first_dim_bounded
Definition memory_layout_analysis.h:40
std::string container
Definition memory_layout_analysis.h:36
bool pre_ranged
Definition memory_layout_analysis.h:47
MemoryLayout layout
Definition memory_layout_analysis.h:39
symbolic::MultiExpression extents() const
Per-dimension bounding box extents: max[d] - min[d] + 1.
const data_flow::Subset & upper_subset() const
The upper index per dimension: max_subset, or min_subset for point tiles (which omit max_subset since...
Definition memory_layout_analysis.h:55
data_flow::Subset max_subset
Definition memory_layout_analysis.h:38
data_flow::Subset min_subset
Definition memory_layout_analysis.h:37
symbolic::MultiExpression extents_approx() const
Per-dimension extents with min/max resolved to upper bounds via overapproximation.
Symbolic system for integer-based symbol analysis.