docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
sdfg::math::tensor::SpatialTensorNode Class Reference

Specialization of TensorNode for spatial operations such as Convolution and Pooling. More...

#include <sdfg/data_flow/library_nodes/math/tensor/spatial_tensor_node.h>

Inheritance diagram for sdfg::math::tensor::SpatialTensorNode:
[legend]

Public Member Functions

 SpatialTensorNode (size_t element_id, const DebugInfo &debug_info, const graph::Vertex vertex, data_flow::DataFlowGraph &parent, const data_flow::LibraryNodeCode &code, const std::vector< std::string > &outputs, const std::vector< std::string > &inputs, const data_flow::ImplementationType &impl_type, QuantizationType quantization, const std::vector< symbolic::Expression > &shape, const std::vector< symbolic::Expression > &kernel_shape, const std::vector< symbolic::Expression > &strides, const std::vector< symbolic::Expression > &pads, const std::vector< symbolic::Expression > &dilations)
const std::vector< symbolic::Expression > & shape () const
const std::vector< symbolic::Expression > & kernel_shape () const
const std::vector< symbolic::Expression > & strides () const
const std::vector< symbolic::Expression > & pads () const
const std::vector< symbolic::Expression > & dilations () const
QuantizationType quantization () const
QuantizationType quantization (const data_flow::DataFlowGraph &dataflow) const
 type of the math calculations.
std::optional< QuantizationType > uniform_quantization (const data_flow::DataFlowGraph &dataflow) const
 Same result as quantization if it matches all the inputs.
QuantizationType fixed_quantization () const
 configuration of the type for the math calculations, independent of current input types etc.
void set_fixed_quantization (const QuantizationType quant)
symbolic::SymbolSet symbols () const override
 Get all symbols used in this node.
void replace (const symbolic::Expression old_expression, const symbolic::Expression new_expression) override
void replace (const symbolic::ExpressionMapping &replacements) override
size_t num_spatial_dims () const
 Number of spatial dimensions.
symbolic::Expression output_spatial_dim (size_t i) const
 Compute the output size for spatial dimension i.
symbolic::Expression output_spatial_volume () const
 Total number of output spatial elements: prod(output_spatial_dim(i)).
symbolic::Expression kernel_volume () const
 Total number of kernel / window elements: prod(kernel_shape[i]).
std::basic_ostream< char > & operator<< (std::basic_ostream< char > &os) const
Public Member Functions inherited from sdfg::math::tensor::TensorNode
 TensorNode (size_t element_id, const DebugInfo &debug_info, const graph::Vertex vertex, data_flow::DataFlowGraph &parent, const data_flow::LibraryNodeCode &code, const std::vector< std::string > &outputs, const std::vector< std::string > &inputs, const data_flow::ImplementationType &impl_type)
 Construct a tensor node.
virtual void verify_data_types (const data_flow::DataFlowGraph &graph) const
 Called as part of validate.
void validate (const Function &function) const override
 Validate tensor node constraints.
types::PrimitiveType primitive_type (const data_flow::DataFlowGraph &graph) const
 Get the primitive type of this tensor operation.
virtual bool supports_integer_types () const =0
 Check if this operation supports integer types.
Public Member Functions inherited from sdfg::math::MathNode
 MathNode (size_t element_id, const DebugInfo &debug_info, const graph::Vertex vertex, data_flow::DataFlowGraph &parent, const data_flow::LibraryNodeCode &code, const std::vector< std::string > &outputs, const std::vector< std::string > &inputs, const data_flow::ImplementationType &implementation_type, bool side_effects=false)
 Construct a mathematical library node.
virtual passes::LibNodeExpander::ExpandOutcome expand (passes::LibNodeExpander::ExpandContext &context, structured_control_flow::Block &block)=0
 Expand this node into its internal operations.
Public Member Functions inherited from sdfg::data_flow::LibraryNode
 LibraryNode (const LibraryNode &data_node)=delete
LibraryNode & operator= (const LibraryNode &)=delete
virtual ~LibraryNode ()=default
ElementType type_id () const override
 Returns the type of the element.
const LibraryNodeCode & code () const
 Get the operation code.
const ImplementationType & implementation_type () const
 Get the implementation type (const).
ImplementationType & implementation_type ()
 Get the implementation type (mutable).
void set_implementation_type (const ImplementationType &impl_type)
bool side_effect () const override
 Check if this node has side effects.
virtual std::string toStr () const
 Convert node to string representation.
virtual symbolic::Expression flop () const
 Calculate floating point operations for this node.
virtual PointerAccessType pointer_access_type (int input_idx) const
 Describes what a pointer is used for.
PointerAccessType pointer_access_type (const Memlet &edge) const
virtual bool relocalize_operand (int input_idx, const math::tensor::TensorLayout &packed)
 Repoint the operand at input_idx to a locally staged buffer.
virtual bool can_relocalize_operand (int input_idx, const math::tensor::TensorLayout &packed) const
 Side-effect-free predicate mirroring relocalize_operand: whether the operand at input_idx can be repointed at the buffer view packed.
virtual std::optional< SubgroupAccess > operand_access (int input_idx, unsigned subgroup_size) const
 The elements one subgroup of subgroup_size lanes reads from the operand at input_idx, if the node declares them.
EdgeRemoveOption can_remove_out_edge (const data_flow::DataFlowGraph &graph, const Memlet *memlet) const override
 Is the edge in question removable, or will this make the node its an output on invalid?
EdgeRemoveOption can_remove_in_edge (const data_flow::DataFlowGraph &graph, const Memlet *memlet) const override
bool pointer_use_creates_side_effects (const DataFlowGraph &dataflow, const Function &func)
Public Member Functions inherited from sdfg::data_flow::CodeNode
 CodeNode (const CodeNode &data_node)=delete
CodeNode & operator= (const CodeNode &)=delete
const std::vector< std::string > & outputs () const
 Get output connector names (const).
const std::vector< std::string > & inputs () const
 Get input connector names (const).
std::vector< std::string > & outputs ()
 Get output connector names (mutable).
std::vector< std::string > & inputs ()
 Get input connector names (mutable).
const std::string & output (size_t index) const
 Get output connector name by index.
const std::string & input (size_t index) const
 Get input connector name by index.
bool has_constant_input (size_t index) const
 Check if an input is connected to a constant node.
Public Member Functions inherited from sdfg::data_flow::DataFlowNode
 DataFlowNode (const DataFlowNode &data_node)=delete
DataFlowNode & operator= (const DataFlowNode &)=delete
graph::Vertex vertex () const
 Get the graph vertex for this node.
const DataFlowGraph & get_parent () const
 Get the parent dataflow graph (const).
DataFlowGraph & get_parent ()
 Get the parent dataflow graph (mutable).
virtual std::unique_ptr< DataFlowNode > clone (size_t element_id, const graph::Vertex vertex, DataFlowGraph &parent) const =0
 Clone this node for graph transformations.
virtual bool update_edge_removed (const std::string &out_conn)
Public Member Functions inherited from sdfg::Element
 Element (size_t element_id, const DebugInfo &debug_info)
virtual ~Element ()=default
size_t element_id () const
const DebugInfo & debug_info () const
void set_debug_info (const DebugInfo &debug_info)
void add_metadata (const std::string &key, const std::string &value)
void remove_metadata (const std::string &key)
const std::string & metadata (const std::string &key) const
const std::string * metadata_if_exists (const std::string &key) const
const std::unordered_map< std::string, std::string > & metadata () const
std::string_view element_type () const
 Returns the type of the element as a human-readable string.

Protected Attributes

QuantizationType fixed_quantization_
std::vector< symbolic::Expression > shape_
 Input shape [N, C, D1, ..., Dn].
std::vector< symbolic::Expression > kernel_shape_
 Pooling window shape [k1, ..., kn].
std::vector< symbolic::Expression > strides_
 Stride along each spatial axis.
std::vector< symbolic::Expression > pads_
 Padding (start and end for each axis).
std::vector< symbolic::Expression > dilations_
 Dilation along each spatial axis.
Protected Attributes inherited from sdfg::data_flow::LibraryNode
LibraryNodeCode code_
 Operation identifier (e.g., "GEMM", "Add").
bool side_effect_
 Whether this node has side effects.
ImplementationType implementation_type_
 How to implement this node.
Protected Attributes inherited from sdfg::data_flow::CodeNode
std::vector< std::string > outputs_
 Names of output connectors.
std::vector< std::string > inputs_
 Names of input connectors.
Protected Attributes inherited from sdfg::Element
size_t element_id_
DebugInfo debug_info_
std::unordered_map< std::string, std::string > metadata_

Additional Inherited Members

Static Public Member Functions inherited from sdfg::data_flow::LibraryNode
static bool classof (const Element &element)
Static Public Member Functions inherited from sdfg::data_flow::CodeNode
static bool classof (const Element &element)
 LLVM-style RTTI predicate: true if element is a CodeNode.
Static Public Member Functions inherited from sdfg::data_flow::DataFlowNode
static bool classof (const Element &element)
 LLVM-style RTTI predicate: true if element is a DataFlowNode.
Static Public Attributes inherited from sdfg::data_flow::CodeNode
static constexpr ElementType TypeGroup = ElementType::Tasklet | ElementType::LibraryNode
 Bitmask of all concrete ElementTypes that are CodeNodes.
Static Public Attributes inherited from sdfg::data_flow::DataFlowNode
static constexpr ElementType TypeGroup
 Bitmask of all concrete ElementTypes that are DataFlowNodes.
Protected Member Functions inherited from sdfg::math::tensor::TensorNode
void validate_shape_matches (const std::vector< symbolic::Expression > &required_shape, const TensorLayout &layout, const std::string &name) const
Protected Member Functions inherited from sdfg::data_flow::LibraryNode
 LibraryNode (size_t element_id, const DebugInfo &debug_info, const graph::Vertex vertex, DataFlowGraph &parent, const LibraryNodeCode &code, const std::vector< std::string > &outputs, const std::vector< std::string > &inputs, const bool side_effect, const ImplementationType &implementation_type)
 Protected constructor for library nodes.
Protected Member Functions inherited from sdfg::data_flow::CodeNode
 CodeNode (size_t element_id, const DebugInfo &debug_info, const graph::Vertex vertex, DataFlowGraph &parent, const std::vector< std::string > &outputs, const std::vector< std::string > &inputs)
 Protected constructor for code nodes.
Protected Member Functions inherited from sdfg::data_flow::DataFlowNode
 DataFlowNode (size_t element_id, const DebugInfo &debug_info, const graph::Vertex vertex, DataFlowGraph &parent)
 Protected constructor for dataflow nodes.
Static Protected Member Functions inherited from sdfg::math::tensor::TensorNode
static data_flow::TaskletCode get_integer_minmax_tasklet (types::PrimitiveType prim_type, bool is_max)
 Get the appropriate tasklet code for min/max operations on integers.

Detailed Description

Specialization of TensorNode for spatial operations such as Convolution and Pooling.

Both ConvNode and PoolingNode operate on tensors with layout [N, C, D1, …, Dn] and share identical kernel_shape / strides / pads / dilations semantics. This mixin extracts the common helpers so they are written — and tested — in one place.

Requirements on Derived

Derived must expose the following public const accessors (both ConvNode and PoolingNode already do):

Accessor Return type
shape() const std::vector<symbolic::Expression>&
kernel_shape() const std::vector<symbolic::Expression>&
strides() const std::vector<symbolic::Expression>&
pads() const std::vector<symbolic::Expression>&
dilations() const std::vector<symbolic::Expression>&

Constructor & Destructor Documentation

◆ SpatialTensorNode()

sdfg::math::tensor::SpatialTensorNode::SpatialTensorNode ( size_t element_id,
const DebugInfo & debug_info,
const graph::Vertex vertex,
data_flow::DataFlowGraph & parent,
const data_flow::LibraryNodeCode & code,
const std::vector< std::string > & outputs,
const std::vector< std::string > & inputs,
const data_flow::ImplementationType & impl_type,
QuantizationType quantization,
const std::vector< symbolic::Expression > & shape,
const std::vector< symbolic::Expression > & kernel_shape,
const std::vector< symbolic::Expression > & strides,
const std::vector< symbolic::Expression > & pads,
const std::vector< symbolic::Expression > & dilations )

Member Function Documentation

◆ dilations()

const std::vector< symbolic::Expression > & sdfg::math::tensor::SpatialTensorNode::dilations ( ) const
inline

◆ fixed_quantization()

QuantizationType sdfg::math::tensor::SpatialTensorNode::fixed_quantization ( ) const

configuration of the type for the math calculations, independent of current input types etc.

'Void' indicates auto-inferring from inputs

◆ kernel_shape()

const std::vector< symbolic::Expression > & sdfg::math::tensor::SpatialTensorNode::kernel_shape ( ) const
inline

◆ kernel_volume()

symbolic::Expression sdfg::math::tensor::SpatialTensorNode::kernel_volume ( ) const

Total number of kernel / window elements: prod(kernel_shape[i]).

For convolutions this is the per-channel kernel volume; for pooling this is the window volume.

◆ num_spatial_dims()

size_t sdfg::math::tensor::SpatialTensorNode::num_spatial_dims ( ) const

Number of spatial dimensions.

For a tensor with shape [N, C, D1, …, Dn] this returns n.

◆ operator<<()

std::basic_ostream< char > & sdfg::math::tensor::SpatialTensorNode::operator<< ( std::basic_ostream< char > & os) const

◆ output_spatial_dim()

symbolic::Expression sdfg::math::tensor::SpatialTensorNode::output_spatial_dim ( size_t i) const

Compute the output size for spatial dimension i.

Uses the standard convolution / pooling output-size formula:

floor((D_i + pad_begin_i + pad_end_i
- dilation_i * (k_i - 1) - 1) / stride_i) + 1
Parameters
iSpatial dimension index (0-based, relative to the spatial axes).

◆ output_spatial_volume()

symbolic::Expression sdfg::math::tensor::SpatialTensorNode::output_spatial_volume ( ) const

Total number of output spatial elements: prod(output_spatial_dim(i)).

Does not include the batch (N) or channel (C / C_out) dimensions — those are node-specific.

◆ pads()

const std::vector< symbolic::Expression > & sdfg::math::tensor::SpatialTensorNode::pads ( ) const
inline

◆ quantization() [1/2]

QuantizationType sdfg::math::tensor::SpatialTensorNode::quantization ( ) const
inline

◆ quantization() [2/2]

QuantizationType sdfg::math::tensor::SpatialTensorNode::quantization ( const data_flow::DataFlowGraph & dataflow) const

type of the math calculations.

May be inferred or fixed.

◆ replace() [1/2]

void sdfg::math::tensor::SpatialTensorNode::replace ( const symbolic::Expression old_expression,
const symbolic::Expression new_expression )
overridevirtual

Implements sdfg::Element.

◆ replace() [2/2]

void sdfg::math::tensor::SpatialTensorNode::replace ( const symbolic::ExpressionMapping & replacements)
overridevirtual

Reimplemented from sdfg::Element.

◆ set_fixed_quantization()

void sdfg::math::tensor::SpatialTensorNode::set_fixed_quantization ( const QuantizationType quant)

◆ shape()

const std::vector< symbolic::Expression > & sdfg::math::tensor::SpatialTensorNode::shape ( ) const
inline

◆ strides()

const std::vector< symbolic::Expression > & sdfg::math::tensor::SpatialTensorNode::strides ( ) const
inline

◆ symbols()

symbolic::SymbolSet sdfg::math::tensor::SpatialTensorNode::symbols ( ) const
overridevirtual

Get all symbols used in this node.

Returns
Set of symbolic expressions used by this node

Implements sdfg::data_flow::LibraryNode.

◆ uniform_quantization()

std::optional< QuantizationType > sdfg::math::tensor::SpatialTensorNode::uniform_quantization ( const data_flow::DataFlowGraph & dataflow) const

Same result as quantization if it matches all the inputs.

None if its impossible to use the same types for input & output and math

Member Data Documentation

◆ dilations_

std::vector<symbolic::Expression> sdfg::math::tensor::SpatialTensorNode::dilations_
protected

Dilation along each spatial axis.

◆ fixed_quantization_

QuantizationType sdfg::math::tensor::SpatialTensorNode::fixed_quantization_
protected

◆ kernel_shape_

std::vector<symbolic::Expression> sdfg::math::tensor::SpatialTensorNode::kernel_shape_
protected

Pooling window shape [k1, ..., kn].

◆ pads_

std::vector<symbolic::Expression> sdfg::math::tensor::SpatialTensorNode::pads_
protected

Padding (start and end for each axis).

◆ shape_

std::vector<symbolic::Expression> sdfg::math::tensor::SpatialTensorNode::shape_
protected

Input shape [N, C, D1, ..., Dn].

◆ strides_

std::vector<symbolic::Expression> sdfg::math::tensor::SpatialTensorNode::strides_
protected

Stride along each spatial axis.


The documentation for this class was generated from the following file: