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

Abstract base class for all tensor operations. More...

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

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

Public Member Functions

 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::SymbolSet symbols () const =0
 Get all symbols used in this node.
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.
virtual void replace (const symbolic::Expression old_expression, const symbolic::Expression new_expression)=0
virtual void replace (const symbolic::ExpressionMapping &replacements)

Protected Member Functions

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

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.

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 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_

Detailed Description

Abstract base class for all tensor operations.

TensorNode provides common functionality for tensor library nodes including:

  • Validation that all memlets are scalar or pointer of scalar
  • Validation that all memlets have the same primitive type
  • Method to determine the primitive type of the operation

Derived classes must specify whether they support integer types via supports_integer_types().

Constructor & Destructor Documentation

◆ TensorNode()

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.

Parameters
element_idUnique element identifier
debug_infoDebug information
vertexGraph vertex
parentParent dataflow graph
codeOperation code
outputsOutput connector names
inputsInput connector names
impl_typeImplementation type

Member Function Documentation

◆ get_integer_minmax_tasklet()

data_flow::TaskletCode sdfg::math::tensor::TensorNode::get_integer_minmax_tasklet ( types::PrimitiveType prim_type,
bool is_max )
staticprotected

Get the appropriate tasklet code for min/max operations on integers.

Selects between signed and unsigned variants based on the primitive type.

Parameters
prim_typeThe primitive type
is_maxTrue for max operation, false for min operation
Returns
The appropriate tasklet code

◆ primitive_type()

types::PrimitiveType sdfg::math::tensor::TensorNode::primitive_type ( const data_flow::DataFlowGraph & graph) const

Get the primitive type of this tensor operation.

Determines the primitive type by examining connected memlets. All memlets must have the same primitive type.

TODO this may not be true for all operations and will require a filter for which inputs to check

Parameters
graphThe dataflow graph containing this node
Returns
The primitive type used by this operation
Exceptions
InvalidSDFGExceptionif types are inconsistent

◆ supports_integer_types()

virtual bool sdfg::math::tensor::TensorNode::supports_integer_types ( ) const
pure virtual

Check if this operation supports integer types.

Operations like add, sub, mul, div, min, max support both floating-point and integer types. Operations like exp, log, tanh, sigmoid only support floating-point types.

Returns
true if integer types are supported, false otherwise

Implemented in sdfg::math::tensor::AbsNode, sdfg::math::tensor::AddNode, sdfg::math::tensor::ArangeNode, sdfg::math::tensor::BatchNormNode, sdfg::math::tensor::BroadcastNode, sdfg::math::tensor::CastNode, sdfg::math::tensor::ClampNode, sdfg::math::tensor::CMathTensorNode, sdfg::math::tensor::ConcatNode, sdfg::math::tensor::ConditionalTensorCopyNode, sdfg::math::tensor::ConstPaddingNode, sdfg::math::tensor::ConvNode, sdfg::math::tensor::DivNode, sdfg::math::tensor::EluNode, sdfg::math::tensor::EmbeddingNode, sdfg::math::tensor::EmbeddingRenormNode, sdfg::math::tensor::ErfNode, sdfg::math::tensor::ExpNode, sdfg::math::tensor::FillNode, sdfg::math::tensor::GELUNode, sdfg::math::tensor::IndexNode, sdfg::math::tensor::LayerNormNode, sdfg::math::tensor::LeakyReLUNode, sdfg::math::tensor::LogicalNotNode, sdfg::math::tensor::MatMulNode, sdfg::math::tensor::MaximumNode, sdfg::math::tensor::MaxNode, sdfg::math::tensor::MeanNode, sdfg::math::tensor::MinimumNode, sdfg::math::tensor::MinNode, sdfg::math::tensor::MulNode, sdfg::math::tensor::PoolingNode, sdfg::math::tensor::PowNode, sdfg::math::tensor::ReLUNode, sdfg::math::tensor::RsqrtNode, sdfg::math::tensor::SigmoidNode, sdfg::math::tensor::SoftmaxNode, sdfg::math::tensor::SqrtNode, sdfg::math::tensor::StdNode, sdfg::math::tensor::SubNode, sdfg::math::tensor::SumNode, sdfg::math::tensor::TanhNode, sdfg::math::tensor::TaskletTensorNode, sdfg::math::tensor::TensorCopyNode, and sdfg::math::tensor::UpsampleBilinear2DNode.

◆ validate()

void sdfg::math::tensor::TensorNode::validate ( const Function & function) const
overridevirtual

Validate tensor node constraints.

Validates that:

  • All input/output memlets are scalar or pointer of scalar
  • All memlets have the same primitive type
  • If the operation doesn't support integers, the type is floating-point
Parameters
functionThe function containing this node
Exceptions
InvalidSDFGExceptionif validation fails

Reimplemented from sdfg::data_flow::CodeNode.

Reimplemented in sdfg::math::tensor::UpsampleBilinear2DNode.

◆ validate_shape_matches()

void sdfg::math::tensor::TensorNode::validate_shape_matches ( const std::vector< symbolic::Expression > & required_shape,
const TensorLayout & layout,
const std::string & name ) const
protected

◆ verify_data_types()

virtual void sdfg::math::tensor::TensorNode::verify_data_types ( const data_flow::DataFlowGraph & graph) const
virtual

Called as part of validate.

By default checks that all primitive types match (TODO do not do this for all TensorOps, too restrictive)

Parameters
graph

Reimplemented in sdfg::math::tensor::MatMulNode.


The documentation for this class was generated from the following file:
  • sdfg/include/sdfg/data_flow/library_nodes/math/tensor/tensor_node.h