docc 0.8.3 (0d44999b)
C++ API Reference
Loading...
Searching...
No Matches
sdfg::einsum::EinsumCluster Class Reference

Non-destructive counterpart of an EinsumNode. More...

#include <sdfg/einsum/einsum_detection.h>

Public Member Functions

std::pair< data_flow::AccessNode *, const data_flow::Subset & > get_input_for (size_t input_idx)
const std::vector< EinsumIndexing > & get_input_indexings () const
std::string toStr () const
const data_flow::Subset & get_input_subset (size_t input_idx) const
const EinsumIndexing & get_output_indexing () const
symbolic::Expression get_linearized_outer_offset (int input_idx) const
const data_flow::Subset & out_indices () const

Public Attributes

structured_control_flow::Block * block = nullptr
 Block that holds the reduction core of this cluster.
std::vector< EinsumDimension > dims
std::vector< std::unique_ptr< EinsumEdge > > in_edges
std::vector< std::string > inputs
std::vector< EinsumIndexing > einsum_in_indices
 Inner-index mapping per input operand (parallel to in_indices/inputs).
EinsumIndexing einsum_out_indices
 Inner-index mapping of the output operand.
std::unique_ptr< EinsumEdge > output_edge = nullptr
 Reduction/output access node of the cluster.
data_flow::AccessNode * output_node = nullptr
std::unordered_map< std::string, data_flow::DataFlowNode * > input_nodes
 Source node for each input connector (may be null for synthetic constants).
bool subtraction = false
 True if the core reduction was a subtraction (carries an implicit -1 factor).
std::list< data_flow::DataFlowNode * > consumed_nodes
 Dataflow nodes folded into this cluster (reduction tasklet, mul tasklets, ...).
std::list< structured_control_flow::StructuredLoop * > consumed_loops
 Surrounding loops folded into this cluster as reduction/free dimensions. From outermost to innermost.

Detailed Description

Non-destructive counterpart of an EinsumNode.

Carries the same properties as an EinsumNode (dims, out/in indices, inputs) but instead of being materialized in the graph it only references the graph elements it represents. Additionally it records which dataflow nodes and which surrounding loops have been consumed (folded) into the cluster.

Member Function Documentation

◆ get_input_for()

std::pair< data_flow::AccessNode *, const data_flow::Subset & > sdfg::einsum::EinsumCluster::get_input_for ( size_t input_idx)

◆ get_input_indexings()

const std::vector< EinsumIndexing > & sdfg::einsum::EinsumCluster::get_input_indexings ( ) const

◆ get_input_subset()

const data_flow::Subset & sdfg::einsum::EinsumCluster::get_input_subset ( size_t input_idx) const

◆ get_linearized_outer_offset()

symbolic::Expression sdfg::einsum::EinsumCluster::get_linearized_outer_offset ( int input_idx) const

◆ get_output_indexing()

const EinsumIndexing & sdfg::einsum::EinsumCluster::get_output_indexing ( ) const

◆ out_indices()

const data_flow::Subset & sdfg::einsum::EinsumCluster::out_indices ( ) const

◆ toStr()

std::string sdfg::einsum::EinsumCluster::toStr ( ) const

Member Data Documentation

◆ block

structured_control_flow::Block* sdfg::einsum::EinsumCluster::block = nullptr

Block that holds the reduction core of this cluster.

◆ consumed_loops

std::list<structured_control_flow::StructuredLoop*> sdfg::einsum::EinsumCluster::consumed_loops

Surrounding loops folded into this cluster as reduction/free dimensions. From outermost to innermost.

◆ consumed_nodes

std::list<data_flow::DataFlowNode*> sdfg::einsum::EinsumCluster::consumed_nodes

Dataflow nodes folded into this cluster (reduction tasklet, mul tasklets, ...).

◆ dims

std::vector<EinsumDimension> sdfg::einsum::EinsumCluster::dims

◆ einsum_in_indices

std::vector<EinsumIndexing> sdfg::einsum::EinsumCluster::einsum_in_indices

Inner-index mapping per input operand (parallel to in_indices/inputs).

◆ einsum_out_indices

EinsumIndexing sdfg::einsum::EinsumCluster::einsum_out_indices

Inner-index mapping of the output operand.

◆ in_edges

std::vector<std::unique_ptr<EinsumEdge> > sdfg::einsum::EinsumCluster::in_edges

◆ input_nodes

std::unordered_map<std::string, data_flow::DataFlowNode*> sdfg::einsum::EinsumCluster::input_nodes

Source node for each input connector (may be null for synthetic constants).

◆ inputs

std::vector<std::string> sdfg::einsum::EinsumCluster::inputs

◆ output_edge

std::unique_ptr<EinsumEdge> sdfg::einsum::EinsumCluster::output_edge = nullptr

Reduction/output access node of the cluster.

◆ output_node

data_flow::AccessNode* sdfg::einsum::EinsumCluster::output_node = nullptr

◆ subtraction

bool sdfg::einsum::EinsumCluster::subtraction = false

True if the core reduction was a subtraction (carries an implicit -1 factor).


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