Parasol Planning Library (PPL)
SubtaskFlow.h
Go to the documentation of this file.
1 #ifndef PPL_SUBTASK_FLOW_H_
2 #define PPL_SUBTASK_FLOW_H_
3 
4 #include "SemanticTask.h"
5 
6 #include <containers/sequential/graph/graph.h>
7 
8 struct TBDFunction {
9  enum Operator {Max,Min};
11  std::vector<TBDFunction> m_subFunctions;
12  std::vector<size_t> m_elems;
13 };
14 
15 struct FlowNode {
16  std::vector<size_t> m_subNodes;
19 };
20 
21 
22 class SubtaskFlow : public stapl::sequential::graph<stapl::DIRECTED,
23  stapl::NONMULTIEDGES, FlowNode, SemanticTask::DependencyType> {
24 
25  public:
28 
29  typedef std::pair<std::vector<size_t>,TBDFunction> ParentInfo;
30 
31  using STAPLGraph =
32 #ifdef _PARALLEL
33  stapl::dynamic_graph<stapl::DIRECTED,stapl::NONMULTIEDGES,
35 #else
36  stapl::sequential::graph<stapl::DIRECTED,stapl::NONMULTIEDGES,
38 #endif
39  ;
40 
41  typedef typename STAPLGraph::vertex_iterator VI;
42 
46 
47  SubtaskFlow(SemanticTask* _task);
48 
49  ~SubtaskFlow();
50 
54 
55  void Print();
56 
60 
61  size_t Size();
62 
64  VI GetFlowNodeIter(size_t _vid);
65 
66  FlowNode GetFlowNode(size_t _vid);
67 
68  VI GetRootIter();
69 
70  size_t GetSuperNode(size_t _vid);
72 
73  private:
76 
77  using STAPLGraph::add_vertex;
78  using STAPLGraph::delete_vertex;
79  using STAPLGraph::add_edge;
80  using STAPLGraph::delete_edge;
81 
85 
86  ParentInfo EvalNode(SemanticTask* _task, ParentInfo _parentInfo);
87 
88  ParentInfo HandleDependencies(SemanticTask* _task, ParentInfo _parentInfo);
89 
90  ParentInfo MergeNodes(SemanticTask* _one, SemanticTask* _two, ParentInfo _parentInfo);
91 
95 
96  std::unordered_map<SemanticTask*,size_t> m_taskNodeMap;
97 
98  size_t m_root;
99 
100  std::unordered_map<size_t,size_t> m_superNodeMap;
101 
103 
104 };
105 
106 #endif
Definition: SemanticTask.h:13
DependencyType
Definition: SemanticTask.h:25
Definition: SubtaskFlow.h:23
VI GetRootIter()
Definition: SubtaskFlow.cpp:116
VI GetFlowNodeIter(SemanticTask *_task)
Definition: SubtaskFlow.cpp:88
~SubtaskFlow()
Definition: SubtaskFlow.cpp:24
STAPLGraph::vertex_iterator VI
Definition: SubtaskFlow.h:41
size_t Size()
Definition: SubtaskFlow.cpp:82
std::pair< std::vector< size_t >, TBDFunction > ParentInfo
Definition: SubtaskFlow.h:29
FlowNode GetFlowNode(size_t _vid)
Definition: SubtaskFlow.cpp:107
stapl::sequential::graph< stapl::DIRECTED, stapl::NONMULTIEDGES, FlowNode, SemanticTask::DependencyType > STAPLGraph
Definition: SubtaskFlow.h:39
void Print()
Definition: SubtaskFlow.cpp:30
SubtaskFlow(SemanticTask *_task)
Definition: SubtaskFlow.cpp:6
size_t GetSuperNode(size_t _vid)
Definition: SubtaskFlow.cpp:122
Definition: SubtaskFlow.h:15
std::vector< size_t > m_subNodes
Definition: SubtaskFlow.h:16
SemanticTask * m_task
Definition: SubtaskFlow.h:17
TBDFunction m_initiationFunction
Definition: SubtaskFlow.h:18
Definition: SubtaskFlow.h:8
Operator
Definition: SubtaskFlow.h:9
@ Min
Definition: SubtaskFlow.h:9
@ Max
Definition: SubtaskFlow.h:9
std::vector< TBDFunction > m_subFunctions
Definition: SubtaskFlow.h:11
std::vector< size_t > m_elems
Definition: SubtaskFlow.h:12
Operator m_operator
Definition: SubtaskFlow.h:10