|
docc 0.8.3 (0d44999b)
C++ API Reference
|
#include <sdfg/data_flow/data_flow_graph.h>
Public Member Functions | |
| DataFlowGraph ()=default | |
| DataFlowGraph (Element *parent) | |
| ~DataFlowGraph ()=default | |
| DataFlowGraph (const DataFlowGraph &graph)=delete | |
| DataFlowGraph & | operator= (const DataFlowGraph &)=delete |
| void | validate (const Function &function) const |
| const Element * | get_parent () const |
| Element * | get_parent () |
| auto | nodes () const |
| auto | nodes () |
| auto | edges () const |
| auto | edges () |
| auto | in_edges (const data_flow::DataFlowNode &node) const |
| auto | in_edges (const data_flow::DataFlowNode &node) |
| const data_flow::Memlet * | in_edge_for_connector (const data_flow::CodeNode &node, const std::string &conn) const |
| data_flow::Memlet * | in_edge_for_connector (const data_flow::CodeNode &node, const std::string &conn) |
| const data_flow::Memlet * | in_edge (const data_flow::AccessNode &node) const |
| const data_flow::Memlet * | in_edge_if_single (const data_flow::AccessNode &node) const |
| Will return the single input edge if it exists. | |
| data_flow::Memlet * | in_edge_if_single (const data_flow::AccessNode &node) |
| std::vector< data_flow::Memlet * > | in_edges_by_connector (const data_flow::CodeNode &node) |
| std::vector< const data_flow::Memlet * > | in_edges_by_connector (const data_flow::CodeNode &node) const |
| auto | out_edges (const data_flow::DataFlowNode &node) const |
| auto | out_edges (const data_flow::DataFlowNode &node) |
| std::vector< const data_flow::Memlet * > | out_edges_for_connector (const data_flow::CodeNode &node, const std::string &conn) const |
| std::vector< data_flow::Memlet * > | out_edges_for_connector (const data_flow::CodeNode &node, const std::string &conn) |
| std::vector< data_flow::Memlet * > | out_edges_by_connector (const data_flow::CodeNode &node) |
| std::vector< const data_flow::Memlet * > | out_edges_by_connector (const data_flow::CodeNode &node) const |
| size_t | in_degree (const data_flow::DataFlowNode &node) const |
| size_t | out_degree (const data_flow::DataFlowNode &node) const |
| void | replace (const symbolic::Expression old_expression, const symbolic::Expression new_expression) |
| void | replace (const symbolic::ExpressionMapping &replacements) |
| std::unordered_set< const data_flow::Tasklet * > | tasklets () const |
| std::unordered_set< data_flow::Tasklet * > | tasklets () |
| std::unordered_set< const data_flow::LibraryNode * > | library_nodes () const |
| std::unordered_set< data_flow::LibraryNode * > | library_nodes () |
| std::unordered_set< const data_flow::AccessNode * > | data_nodes () const |
| std::unordered_set< data_flow::AccessNode * > | data_nodes () |
| std::unordered_set< const data_flow::AccessNode * > | reads () const |
| std::unordered_set< const data_flow::AccessNode * > | writes () const |
| std::unordered_set< const data_flow::DataFlowNode * > | sources () const |
| std::unordered_set< data_flow::DataFlowNode * > | sources () |
| std::unordered_set< const data_flow::DataFlowNode * > | sinks () const |
| std::unordered_set< data_flow::DataFlowNode * > | sinks () |
| std::unordered_set< const data_flow::DataFlowNode * > | predecessors (const data_flow::DataFlowNode &node) const |
| std::unordered_set< const data_flow::DataFlowNode * > | successors (const data_flow::DataFlowNode &node) const |
| std::list< const data_flow::DataFlowNode * > | topological_sort () const |
| std::list< data_flow::DataFlowNode * > | topological_sort () |
| const std::list< const data_flow::DataFlowNode * > & | topological_order () const |
| void | invalidate_topological_order () |
| Must be called after any change that can affect topological_sort() (nodes, edges, access-node names). | |
| std::unordered_map< std::string, const data_flow::AccessNode * > | dominators () const |
| std::unordered_map< std::string, const data_flow::AccessNode * > | post_dominators () const |
| std::unordered_map< std::string, data_flow::AccessNode * > | post_dominators () |
| auto | all_simple_paths (const data_flow::DataFlowNode &src, const data_flow::DataFlowNode &dst) const |
| const std::pair< size_t, const std::unordered_map< const data_flow::DataFlowNode *, size_t > > | weakly_connected_components () const |
| template<typename T> | |
| T * | is_a_library_node () |
| const AccessNode * | find_standalone_entry (const Memlet *input_edge) const |
| For the given input, identify a standalone input from which one could use to replace the following dataflow For a Block that contains a libNode with 2 inputs, 1 output, the access nodes of the inputs would be those standalone entry points. | |
| const AccessNode * | find_standalone_exit (const Memlet *output_edge) const |
| Same as [find_standalone_entry] find an access node that is standalone, so that we can recreate the access node in a different place without impacting correctness, as long as we repreduce the same accesses via it. | |
Friends | |
| class | sdfg::builder::SDFGBuilder |
| class | sdfg::builder::StructuredSDFGBuilder |
|
default |
| sdfg::data_flow::DataFlowGraph::DataFlowGraph | ( | Element * | parent | ) |
|
default |
|
delete |
| auto sdfg::data_flow::DataFlowGraph::all_simple_paths | ( | const data_flow::DataFlowNode & | src, |
| const data_flow::DataFlowNode & | dst ) const |
| std::unordered_set< data_flow::AccessNode * > sdfg::data_flow::DataFlowGraph::data_nodes | ( | ) |
| std::unordered_set< const data_flow::AccessNode * > sdfg::data_flow::DataFlowGraph::data_nodes | ( | ) | const |
| std::unordered_map< std::string, const data_flow::AccessNode * > sdfg::data_flow::DataFlowGraph::dominators | ( | ) | const |
|
inline |
|
inline |
| const AccessNode * sdfg::data_flow::DataFlowGraph::find_standalone_entry | ( | const Memlet * | input_edge | ) | const |
For the given input, identify a standalone input from which one could use to replace the following dataflow For a Block that contains a libNode with 2 inputs, 1 output, the access nodes of the inputs would be those standalone entry points.
For expanding of the libNode one can reuse those accessNodes, if they are the entrypoints into the dataflow
This is to abstract away the expectation that all edges are memlets that always must either start or end in an AccessNode in preparation of supporting pure data-edges between tasklets etc.
| input_edge | the input edge for which we want to find a standalone cut point. |
| const AccessNode * sdfg::data_flow::DataFlowGraph::find_standalone_exit | ( | const Memlet * | output_edge | ) | const |
Same as [find_standalone_entry] find an access node that is standalone, so that we can recreate the access node in a different place without impacting correctness, as long as we repreduce the same accesses via it.
| output_edge | the output edge for which we want to find a standalone cut point |
| Element * sdfg::data_flow::DataFlowGraph::get_parent | ( | ) |
| const Element * sdfg::data_flow::DataFlowGraph::get_parent | ( | ) | const |
| size_t sdfg::data_flow::DataFlowGraph::in_degree | ( | const data_flow::DataFlowNode & | node | ) | const |
| const data_flow::Memlet * sdfg::data_flow::DataFlowGraph::in_edge | ( | const data_flow::AccessNode & | node | ) | const |
| data_flow::Memlet * sdfg::data_flow::DataFlowGraph::in_edge_for_connector | ( | const data_flow::CodeNode & | node, |
| const std::string & | conn ) |
| const data_flow::Memlet * sdfg::data_flow::DataFlowGraph::in_edge_for_connector | ( | const data_flow::CodeNode & | node, |
| const std::string & | conn ) const |
| data_flow::Memlet * sdfg::data_flow::DataFlowGraph::in_edge_if_single | ( | const data_flow::AccessNode & | node | ) |
| const data_flow::Memlet * sdfg::data_flow::DataFlowGraph::in_edge_if_single | ( | const data_flow::AccessNode & | node | ) | const |
Will return the single input edge if it exists.
Will return null if zero or more than 2 input edges exist on this access node. Suitable for situations where more than 1 edge are not supported anyway.
|
inline |
|
inline |
| std::vector< data_flow::Memlet * > sdfg::data_flow::DataFlowGraph::in_edges_by_connector | ( | const data_flow::CodeNode & | node | ) |
| std::vector< const data_flow::Memlet * > sdfg::data_flow::DataFlowGraph::in_edges_by_connector | ( | const data_flow::CodeNode & | node | ) | const |
| void sdfg::data_flow::DataFlowGraph::invalidate_topological_order | ( | ) |
Must be called after any change that can affect topological_sort() (nodes, edges, access-node names).
|
inline |
| std::unordered_set< data_flow::LibraryNode * > sdfg::data_flow::DataFlowGraph::library_nodes | ( | ) |
| std::unordered_set< const data_flow::LibraryNode * > sdfg::data_flow::DataFlowGraph::library_nodes | ( | ) | const |
|
inline |
|
inline |
|
delete |
| size_t sdfg::data_flow::DataFlowGraph::out_degree | ( | const data_flow::DataFlowNode & | node | ) | const |
|
inline |
|
inline |
| std::vector< data_flow::Memlet * > sdfg::data_flow::DataFlowGraph::out_edges_by_connector | ( | const data_flow::CodeNode & | node | ) |
| std::vector< const data_flow::Memlet * > sdfg::data_flow::DataFlowGraph::out_edges_by_connector | ( | const data_flow::CodeNode & | node | ) | const |
| std::vector< data_flow::Memlet * > sdfg::data_flow::DataFlowGraph::out_edges_for_connector | ( | const data_flow::CodeNode & | node, |
| const std::string & | conn ) |
| std::vector< const data_flow::Memlet * > sdfg::data_flow::DataFlowGraph::out_edges_for_connector | ( | const data_flow::CodeNode & | node, |
| const std::string & | conn ) const |
| std::unordered_map< std::string, data_flow::AccessNode * > sdfg::data_flow::DataFlowGraph::post_dominators | ( | ) |
| std::unordered_map< std::string, const data_flow::AccessNode * > sdfg::data_flow::DataFlowGraph::post_dominators | ( | ) | const |
| std::unordered_set< const data_flow::DataFlowNode * > sdfg::data_flow::DataFlowGraph::predecessors | ( | const data_flow::DataFlowNode & | node | ) | const |
| std::unordered_set< const data_flow::AccessNode * > sdfg::data_flow::DataFlowGraph::reads | ( | ) | const |
| void sdfg::data_flow::DataFlowGraph::replace | ( | const symbolic::Expression | old_expression, |
| const symbolic::Expression | new_expression ) |
| void sdfg::data_flow::DataFlowGraph::replace | ( | const symbolic::ExpressionMapping & | replacements | ) |
| std::unordered_set< data_flow::DataFlowNode * > sdfg::data_flow::DataFlowGraph::sinks | ( | ) |
| std::unordered_set< const data_flow::DataFlowNode * > sdfg::data_flow::DataFlowGraph::sinks | ( | ) | const |
| std::unordered_set< data_flow::DataFlowNode * > sdfg::data_flow::DataFlowGraph::sources | ( | ) |
| std::unordered_set< const data_flow::DataFlowNode * > sdfg::data_flow::DataFlowGraph::sources | ( | ) | const |
| std::unordered_set< const data_flow::DataFlowNode * > sdfg::data_flow::DataFlowGraph::successors | ( | const data_flow::DataFlowNode & | node | ) | const |
| std::unordered_set< data_flow::Tasklet * > sdfg::data_flow::DataFlowGraph::tasklets | ( | ) |
| std::unordered_set< const data_flow::Tasklet * > sdfg::data_flow::DataFlowGraph::tasklets | ( | ) | const |
| const std::list< const data_flow::DataFlowNode * > & sdfg::data_flow::DataFlowGraph::topological_order | ( | ) | const |
| std::list< data_flow::DataFlowNode * > sdfg::data_flow::DataFlowGraph::topological_sort | ( | ) |
| std::list< const data_flow::DataFlowNode * > sdfg::data_flow::DataFlowGraph::topological_sort | ( | ) | const |
| void sdfg::data_flow::DataFlowGraph::validate | ( | const Function & | function | ) | const |
| const std::pair< size_t, const std::unordered_map< const data_flow::DataFlowNode *, size_t > > sdfg::data_flow::DataFlowGraph::weakly_connected_components | ( | ) | const |
| std::unordered_set< const data_flow::AccessNode * > sdfg::data_flow::DataFlowGraph::writes | ( | ) | const |
|
friend |
|
friend |