The Gaudi Framework  v32r2 (46d42edc)
Rankers.cpp
Go to the documentation of this file.
1 #include "Rankers.h"
2 
3 namespace concurrency {
4 
5  //--------------------------------------------------------------------------
7 
8  auto& products = node.getOutputDataNodes();
9  float rank = 0;
10 
11  for ( auto p : products ) rank += p->getConsumers().size();
12 
13  node.setRank( rank );
14  /*std::stringstream s;
15  s << node.getNodeName() << ", " << rank << "\n";
16  std::ofstream myfile;
17  myfile.open("AlgoRank.csv", std::ios::app);
18  myfile << s.str();
19  myfile.close();*/
20 
21  return true;
22  }
23 
24  //--------------------------------------------------------------------------
26 
27  std::ifstream myfile;
28  myfile.open( "InputExecutionPlan.graphml", std::ios::in );
29 
30  precedence::PrecTrace execPlan;
31 
32  using boost::get;
34 
35  boost::dynamic_properties dp;
36  dp.property( "name", get( &AlgoTraceProps::m_name, execPlan ) );
37  dp.property( "index", get( &AlgoTraceProps::m_index, execPlan ) );
38  dp.property( "dataRank", get( &AlgoTraceProps::m_rank, execPlan ) );
39  dp.property( "runtime", get( &AlgoTraceProps::m_runtime, execPlan ) );
40 
41  boost::read_graphml( myfile, execPlan, dp );
42 
43  typedef boost::graph_traits<precedence::PrecTrace>::vertex_iterator itV;
45 
46  for ( vp = boost::vertices( execPlan ); vp.first != vp.second; ++vp.first ) {
47  precedence::AlgoTraceVertex v = *vp.first;
48  auto index = get( &AlgoTraceProps::m_name, execPlan );
49  if ( index[v] == node.getNodeName() ) {
50  runThroughAdjacents( v, execPlan );
51  float rank = m_nodesSucceeded;
52  node.setRank( rank );
53  reset();
54  // std::cout << "Rank of " << index[v] << " is " << rank << std::endl;
55  }
56  }
57 
58  return true;
59  }
60 
61  //--------------------------------------------------------------------------
63  boost::graph_traits<precedence::PrecTrace>::vertex_descriptor vertex, precedence::PrecTrace graph ) {
64  typename boost::graph_traits<precedence::PrecTrace>::adjacency_iterator itVB;
65  typename boost::graph_traits<precedence::PrecTrace>::adjacency_iterator itVE;
66 
67  for ( boost::tie( itVB, itVE ) = adjacent_vertices( vertex, graph ); itVB != itVE; ++itVB ) {
68  m_nodesSucceeded += 1;
69  runThroughAdjacents( *itVB, graph );
70  }
71  }
72 
73  //--------------------------------------------------------------------------
75 
76  std::ifstream myfile;
77  myfile.open( "InputExecutionPlan.graphml", std::ios::in );
78 
79  precedence::PrecTrace execPlan;
80  using boost::get;
82 
83  boost::dynamic_properties dp;
84  dp.property( "name", get( &AlgoTraceProps::m_name, execPlan ) );
85  dp.property( "index", get( &AlgoTraceProps::m_index, execPlan ) );
86  dp.property( "dataRank", get( &AlgoTraceProps::m_rank, execPlan ) );
87  dp.property( "runtime", get( &AlgoTraceProps::m_runtime, execPlan ) );
88 
89  boost::read_graphml( myfile, execPlan, dp );
90 
91  typedef boost::graph_traits<precedence::PrecTrace>::vertex_iterator itV;
93 
94  for ( vp = boost::vertices( execPlan ); vp.first != vp.second; ++vp.first ) {
95  precedence::AlgoTraceVertex v = *vp.first;
96  auto index = get( &AlgoTraceProps::m_name, execPlan );
97  if ( index[v] == node.getNodeName() ) {
98  auto index_runtime = get( &AlgoTraceProps::m_runtime, execPlan );
99  float rank = index_runtime[v];
100  node.setRank( rank );
101  // std::cout << "Rank of " << index[v] << " is " << rank << std::endl;
102  }
103  }
104  return true;
105  }
106 
107  //--------------------------------------------------------------------------
109 
110  std::ifstream myfile;
111  myfile.open( "Eccentricity.graphml", std::ios::in );
112 
113  precedence::PrecTrace execPlan;
114 
115  boost::dynamic_properties dp;
116  using boost::get;
117 
118  dp.property( "name", get( &precedence::AlgoTraceProps::m_name, execPlan ) );
119  dp.property( "Eccentricity", get( &precedence::AlgoTraceProps::m_eccentricity, execPlan ) );
120 
121  boost::read_graphml( myfile, execPlan, dp );
122 
123  typedef boost::graph_traits<precedence::PrecTrace>::vertex_iterator itV;
125 
126  for ( vp = boost::vertices( execPlan ); vp.first != vp.second; ++vp.first ) {
127  precedence::AlgoTraceVertex v = *vp.first;
128  auto index = get( &precedence::AlgoTraceProps::m_name, execPlan );
129  if ( index[v] == node.getNodeName() ) {
130  auto index_eccentricity = get( &precedence::AlgoTraceProps::m_eccentricity, execPlan );
131  float rank = index_eccentricity[v];
132  node.setRank( rank );
133  // std::cout << "Rank of " << index[v] << " is " << rank << std::endl;
134  }
135  }
136  return true;
137  }
138 
139  //--------------------------------------------------------------------------
141 
142  // Find eccentricity of the node (only within the data realm of the execution flow graph)
143  recursiveVisit( node );
144 
145  float rank = m_maxKnownDepth;
146  node.setRank( rank );
147 
148  // Reset visitor for next nodes, if any
149  reset();
150 
151  return true;
152  }
153 
154  //--------------------------------------------------------------------------
156 
157  m_currentDepth += 1;
158 
159  auto& products = node.getOutputDataNodes();
160 
161  if ( products.empty() )
163 
164  for ( auto p : products )
165  for ( auto algoNode : p->getConsumers() ) recursiveVisit( *algoNode );
166 
167  m_currentDepth -= 1;
168  }
169 
170 } // namespace concurrency
const std::string & getNodeName() const
Get node name.
T open(T... args)
boost::graph_traits< PrecTrace >::vertex_descriptor AlgoTraceVertex
void setRank(float &rank)
Set Algorithm rank.
bool visit(AlgorithmNode &) override
Definition: Rankers.cpp:6
void recursiveVisit(AlgorithmNode &)
Depth-first node parser to calculate node eccentricity (only within the data realm of the precedence ...
Definition: Rankers.cpp:155
auto get(const Handle &handle, const Algo &, const EventContext &) -> decltype(details::deref(handle.get()))
bool visit(AlgorithmNode &) override
Definition: Rankers.cpp:74
bool visit(AlgorithmNode &) override
Definition: Rankers.cpp:108
void runThroughAdjacents(boost::graph_traits< precedence::PrecTrace >::vertex_descriptor, precedence::PrecTrace)
Definition: Rankers.cpp:62
boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS, AlgoTraceProps > PrecTrace
const std::vector< DataNode * > & getOutputDataNodes() const
Get all supplier nodes.
bool visit(AlgorithmNode &) override
Definition: Rankers.cpp:25
bool visit(AlgorithmNode &) override
Definition: Rankers.cpp:140
STL class.