|
docc 0.8.3 (0d44999b)
C++ API Reference
|
Abstract base class for all tensor operations. More...
#include <sdfg/data_flow/library_nodes/math/tensor/tensor_node.h>
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_ |
Abstract base class for all tensor operations.
TensorNode provides common functionality for tensor library nodes including:
Derived classes must specify whether they support integer types via supports_integer_types().
| 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.
| element_id | Unique element identifier |
| debug_info | Debug information |
| vertex | Graph vertex |
| parent | Parent dataflow graph |
| code | Operation code |
| outputs | Output connector names |
| inputs | Input connector names |
| impl_type | Implementation type |
|
staticprotected |
Get the appropriate tasklet code for min/max operations on integers.
Selects between signed and unsigned variants based on the primitive type.
| prim_type | The primitive type |
| is_max | True for max operation, false for min operation |
| 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
| graph | The dataflow graph containing this node |
| InvalidSDFGException | if types are inconsistent |
|
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.
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.
|
overridevirtual |
Validate tensor node constraints.
Validates that:
| function | The function containing this node |
| InvalidSDFGException | if validation fails |
Reimplemented from sdfg::data_flow::CodeNode.
Reimplemented in sdfg::math::tensor::UpsampleBilinear2DNode.
|
protected |
|
virtual |
Called as part of validate.
By default checks that all primitive types match (TODO do not do this for all TensorOps, too restrictive)
| graph |
Reimplemented in sdfg::math::tensor::MatMulNode.