docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
tensor_layout.h
Go to the documentation of this file.
1#pragma once
2#include <memory>
3#include <nlohmann/json_fwd.hpp>
4#include <optional>
5
8#include "sdfg/types/type.h"
9
10namespace sdfg::math::tensor {
11
21private:
34
35public:
40 );
41
43 return shape_;
44 }
46 return strides_;
47 }
48
50 return offset_;
51 }
52
53 void serialize_to_json(nlohmann::json& j) const;
54
55 std::string toStr() const;
56
58
60
62
67 symbolic::Expression resolve_element(const symbolic::MultiExpression& indices, bool require_to_element = true) const;
68
76 std::optional<symbolic::MultiExpression> partition_offset_into_dimensions() const;
77
81
83
85
87
89
94 const symbolic::Expression& get_dim(int i) const {
95 return shape_.at(i);
96 }
97
102 return shape_.at(shape_.size() - 1 - i);
103 }
104
110 return strides_.at(i);
111 }
112
117 return strides_.at(strides_.size() - 1 - i);
118 }
119
120 int dims() const {
121 return shape_.size();
122 }
123
124 bool is_scalar() const;
125
126 static TensorLayout deserialize_from_json(const nlohmann::json& j);
127
129
132 );
133
135
137
139
140 bool operator==(const TensorLayout& other) const;
141
142 std::unique_ptr<TensorLayout> newaxis(size_t axis) const;
143
144 std::unique_ptr<TensorLayout> flip(size_t axis) const;
145
146 std::unique_ptr<TensorLayout> unsqueeze(size_t axis) const;
147
148 std::unique_ptr<TensorLayout> squeeze(size_t axis) const;
149
150 std::unique_ptr<TensorLayout> squeeze() const;
151
152 std::unique_ptr<TensorLayout> reshape(const symbolic::MultiExpression& new_shape) const;
153
157 std::unique_ptr<TensorLayout> broadcast(const symbolic::MultiExpression& ref_shape) const;
158
159 static std::ostream& emit_symbolic_list(std::ostream& stream, const symbolic::MultiExpression& list);
160
161 static types::PrimitiveType get_tensor_indvar_type_for_shape(const std::vector<symbolic::Expression>& shape);
162
172
179
189};
190
191std::ostream& operator<<(std::ostream& stream, const TensorLayout& layout);
192
193
194} // namespace sdfg::math::tensor
The metadata associated with a addressing a tensor in elements Meant to be used with TensorNodes to d...
Definition tensor_layout.h:20
symbolic::Expression total_elements() const
std::unique_ptr< TensorLayout > reshape(const symbolic::MultiExpression &new_shape) const
std::unique_ptr< TensorLayout > newaxis(size_t axis) const
static TensorLayout deserialize_from_json(const nlohmann::json &j)
bool has_linear_accesses_no_padding() const
int dims() const
Definition tensor_layout.h:120
std::unique_ptr< TensorLayout > unsqueeze(size_t axis) const
static types::PrimitiveType get_tensor_indvar_type_for_shape(const std::vector< symbolic::Expression > &shape)
const symbolic::Expression & offset() const
Definition tensor_layout.h:49
void collect_symbols(symbolic::SymbolSet &set) const
const symbolic::MultiExpression & shape() const
Definition tensor_layout.h:42
const symbolic::MultiExpression & strides() const
Definition tensor_layout.h:45
TensorLayout(const symbolic::MultiExpression &shape, const symbolic::MultiExpression &strides={}, const symbolic::Expression offset=symbolic::integer(0))
symbolic::Expression resolve_element(const symbolic::MultiExpression &indices, bool require_to_element=true) const
apply the index to the layout, returning an "element-address"
void serialize_to_json(nlohmann::json &j) const
static bool has_linear_accesses_no_padding(symbolic::MultiExpression shape, symbolic::MultiExpression strides, symbolic::Expression offset)
TensorLayoutType
Definition tensor_layout.h:163
@ LAYOUT_ROW_OR_COL_MAJOR
Definition tensor_layout.h:163
@ LAYOUT_OTHER
Definition tensor_layout.h:163
@ LAYOUT_COL_MAJOR
Definition tensor_layout.h:163
@ LAYOUT_ROW_MAJOR
Definition tensor_layout.h:163
std::unique_ptr< TensorLayout > squeeze(size_t axis) const
symbolic::Expression memory_span() const
std::optional< symbolic::MultiExpression > partition_offset_into_dimensions() const
Partition the layout's offset() into one coordinate offset per dimension.
bool operator==(const TensorLayout &other) const
static symbolic::MultiExpression linear_strides(const symbolic::MultiExpression &shape)
const symbolic::Expression & get_dim(int i) const
Definition tensor_layout.h:94
static TensorLayoutType is_last_dims_col_or_row_major(const symbolic::MultiExpression &strides)
Checks if the given strides can be looked at as col-major or row-major.
symbolic::Expression get_stride_innermost(int i) const
Definition tensor_layout.h:116
std::unique_ptr< TensorLayout > flip(size_t axis) const
bool is_last_dims_expressible_as_row_major() const
Whatever the dimesionality of the entire Tensor, if it has at least 2 dimensions, and the innermost h...
TensorLayoutType is_2d_col_or_row_major() const
Checks if the layout is 2D and either column-major or row-major.
static std::ostream & emit_symbolic_list(std::ostream &stream, const symbolic::MultiExpression &list)
std::unique_ptr< TensorLayout > squeeze() const
void replace_symbols(const symbolic::Expression &old, const symbolic::Expression &new_expr)
symbolic::Expression max_accessed_byte_offset_from_ptr(types::PrimitiveType element_type) const
For memory access ranges, this should return the maximum offset from the pointer that is possible,...
bool has_transposed_strides_no_padding() const
std::unique_ptr< TensorLayout > broadcast(const symbolic::MultiExpression &ref_shape) const
Broadcast this layout to a bigger shape with strides correctly set.
symbolic::Expression get_dim_innermost(int i) const
Definition tensor_layout.h:101
static bool has_linear_accesses(symbolic::MultiExpression shape, symbolic::MultiExpression strides)
symbolic::MultiExpression linear_strides() const
symbolic::Expression get_stride(int i) const
Definition tensor_layout.h:109
void replace_symbols(const symbolic::ExpressionMapping &replacements)
Integer integer(int64_t value)
Creates an integer constant.
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
std::set< Symbol, SymEngine::RCPBasicKeyLess > SymbolSet
Ordered set of symbols.
Definition symbolic.h:95
SymEngine::map_basic_basic ExpressionMapping
Definition symbolic.h:109
Edges in the dataflow graph representing data movement.
Definition arange_node.h:8
std::ostream & operator<<(std::ostream &stream, const TensorLayout &layout)
PrimitiveType
Enumeration of all primitive data types supported by sdfglib.
Definition type.h:35
Symbolic system for integer-based symbol analysis.
Core type system definitions for sdfglib.