The Gaudi Framework  v38r0 (2143aa4c)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Rankers.cpp
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #include "Rankers.h"
12 
13 namespace concurrency {
14 
15  //--------------------------------------------------------------------------
17 
18  auto& products = node.getOutputDataNodes();
19  float rank = 0;
20 
21  for ( auto p : products ) rank += p->getConsumers().size();
22 
23  node.setRank( rank );
24  /*std::stringstream s;
25  s << node.getNodeName() << ", " << rank << "\n";
26  std::ofstream myfile;
27  myfile.open("AlgoRank.csv", std::ios::app);
28  myfile << s.str();
29  myfile.close();*/
30 
31  return true;
32  }
33 
34  //--------------------------------------------------------------------------
36 
37  std::ifstream myfile;
38  myfile.open( "InputExecutionPlan.graphml", std::ios::in );
39 
40  precedence::PrecTrace execPlan;
41 
42  using boost::get;
44 
45  boost::dynamic_properties dp;
46  dp.property( "name", get( &AlgoTraceProps::m_name, execPlan ) );
47  dp.property( "index", get( &AlgoTraceProps::m_index, execPlan ) );
48  dp.property( "dataRank", get( &AlgoTraceProps::m_rank, execPlan ) );
49  dp.property( "runtime", get( &AlgoTraceProps::m_runtime, execPlan ) );
50 
51  boost::read_graphml( myfile, execPlan, dp );
52 
53  typedef boost::graph_traits<precedence::PrecTrace>::vertex_iterator itV;
55 
56  for ( vp = boost::vertices( execPlan ); vp.first != vp.second; ++vp.first ) {
57  precedence::AlgoTraceVertex v = *vp.first;
58  auto index = get( &AlgoTraceProps::m_name, execPlan );
59  if ( index[v] == node.name() ) {
60  runThroughAdjacents( v, execPlan );
61  float rank = m_nodesSucceeded;
62  node.setRank( rank );
63  reset();
64  // std::cout << "Rank of " << index[v] << " is " << rank << std::endl;
65  }
66  }
67 
68  return true;
69  }
70 
71  //--------------------------------------------------------------------------
73  boost::graph_traits<precedence::PrecTrace>::vertex_descriptor vertex, precedence::PrecTrace graph ) {
74  typename boost::graph_traits<precedence::PrecTrace>::adjacency_iterator itVB;
75  typename boost::graph_traits<precedence::PrecTrace>::adjacency_iterator itVE;
76 
77  for ( boost::tie( itVB, itVE ) = adjacent_vertices( vertex, graph ); itVB != itVE; ++itVB ) {
78  m_nodesSucceeded += 1;
79  runThroughAdjacents( *itVB, graph );
80  }
81  }
82 
83  //--------------------------------------------------------------------------
85 
86  std::ifstream myfile;
87  myfile.open( "InputExecutionPlan.graphml", std::ios::in );
88 
89  precedence::PrecTrace execPlan;
90  using boost::get;
92 
93  boost::dynamic_properties dp;
94  dp.property( "name", get( &AlgoTraceProps::m_name, execPlan ) );
95  dp.property( "index", get( &AlgoTraceProps::m_index, execPlan ) );
96  dp.property( "dataRank", get( &AlgoTraceProps::m_rank, execPlan ) );
97  dp.property( "runtime", get( &AlgoTraceProps::m_runtime, execPlan ) );
98 
99  boost::read_graphml( myfile, execPlan, dp );
100 
101  typedef boost::graph_traits<precedence::PrecTrace>::vertex_iterator itV;
103 
104  for ( vp = boost::vertices( execPlan ); vp.first != vp.second; ++vp.first ) {
105  precedence::AlgoTraceVertex v = *vp.first;
106  auto index = get( &AlgoTraceProps::m_name, execPlan );
107  if ( index[v] == node.name() ) {
108  auto index_runtime = get( &AlgoTraceProps::m_runtime, execPlan );
109  float rank = index_runtime[v];
110  node.setRank( rank );
111  // std::cout << "Rank of " << index[v] << " is " << rank << std::endl;
112  }
113  }
114  return true;
115  }
116 
117  //--------------------------------------------------------------------------
119 
120  std::ifstream myfile;
121  myfile.open( "Eccentricity.graphml", std::ios::in );
122 
123  precedence::PrecTrace execPlan;
124 
125  boost::dynamic_properties dp;
126  using boost::get;
127 
128  dp.property( "name", get( &precedence::AlgoTraceProps::m_name, execPlan ) );
129  dp.property( "Eccentricity", get( &precedence::AlgoTraceProps::m_eccentricity, execPlan ) );
130 
131  boost::read_graphml( myfile, execPlan, dp );
132 
133  typedef boost::graph_traits<precedence::PrecTrace>::vertex_iterator itV;
135 
136  for ( vp = boost::vertices( execPlan ); vp.first != vp.second; ++vp.first ) {
137  precedence::AlgoTraceVertex v = *vp.first;
138  auto index = get( &precedence::AlgoTraceProps::m_name, execPlan );
139  if ( index[v] == node.name() ) {
140  auto index_eccentricity = get( &precedence::AlgoTraceProps::m_eccentricity, execPlan );
141  float rank = index_eccentricity[v];
142  node.setRank( rank );
143  // std::cout << "Rank of " << index[v] << " is " << rank << std::endl;
144  }
145  }
146  return true;
147  }
148 
149  //--------------------------------------------------------------------------
151 
152  // Find eccentricity of the node (only within the data realm of the execution flow graph)
153  recursiveVisit( node );
154 
155  float rank = m_maxKnownDepth;
156  node.setRank( rank );
157 
158  // Reset visitor for next nodes, if any
159  reset();
160 
161  return true;
162  }
163 
164  //--------------------------------------------------------------------------
166 
167  m_currentDepth += 1;
168 
169  auto& products = node.getOutputDataNodes();
170 
171  if ( products.empty() )
173 
174  for ( auto p : products )
175  for ( auto algoNode : p->getConsumers() ) recursiveVisit( *algoNode );
176 
177  m_currentDepth -= 1;
178  }
179 
180 } // namespace concurrency
concurrency::RankerByDataRealmEccentricity::reset
void reset() override
Definition: Rankers.h:63
std::pair
concurrency::RankerByDataRealmEccentricity::recursiveVisit
void recursiveVisit(AlgorithmNode &)
Depth-first node parser to calculate node eccentricity (only within the data realm of the precedence ...
Definition: Rankers.cpp:165
GaudiPartProp.decorators.get
get
decorate the vector of properties
Definition: decorators.py:282
concurrency::ControlFlowNode::name
const std::string & name() const
Get node name.
Definition: PrecedenceRulesGraph.h:432
concurrency::AlgorithmNode::getOutputDataNodes
const std::vector< DataNode * > & getOutputDataNodes() const
Get all supplier nodes.
Definition: PrecedenceRulesGraph.h:513
precedence::PrecTrace
boost::adjacency_list< boost::vecS, boost::vecS, boost::bidirectionalS, AlgoTraceProps > PrecTrace
Definition: PrecedenceRulesGraph.h:62
precedence::AlgoTraceVertex
boost::graph_traits< PrecTrace >::vertex_descriptor AlgoTraceVertex
Definition: PrecedenceRulesGraph.h:63
concurrency::AlgorithmNode
Definition: PrecedenceRulesGraph.h:487
concurrency::AlgorithmNode::setRank
void setRank(float &rank)
Set Algorithm rank.
Definition: PrecedenceRulesGraph.h:518
concurrency::RankerByDataRealmEccentricity::m_currentDepth
uint m_currentDepth
Definition: Rankers.h:72
precedence::AlgoTraceProps::m_eccentricity
int m_eccentricity
Definition: PrecedenceRulesGraph.h:59
plotSpeedupsPyRoot.graph
graph
Definition: plotSpeedupsPyRoot.py:168
concurrency::RankerByDataRealmEccentricity::visit
bool visit(AlgorithmNode &) override
Definition: Rankers.cpp:150
concurrency::RankerByCummulativeOutDegree::visit
bool visit(AlgorithmNode &) override
Definition: Rankers.cpp:35
concurrency::RankerByCummulativeOutDegree::reset
void reset() override
Definition: Rankers.h:33
std::ifstream::open
T open(T... args)
precedence::AlgoTraceProps
Definition: PrecedenceRulesGraph.h:49
concurrency
Definition: PrecedenceRulesGraph.cpp:38
Rankers.h
concurrency::RankerByEccentricity::visit
bool visit(AlgorithmNode &) override
Definition: Rankers.cpp:118
concurrency::RankerByCummulativeOutDegree::runThroughAdjacents
void runThroughAdjacents(boost::graph_traits< precedence::PrecTrace >::vertex_descriptor, precedence::PrecTrace)
Definition: Rankers.cpp:72
concurrency::RankerByTiming::visit
bool visit(AlgorithmNode &) override
Definition: Rankers.cpp:84
Properties.v
v
Definition: Properties.py:122
concurrency::RankerByProductConsumption::visit
bool visit(AlgorithmNode &) override
Definition: Rankers.cpp:16
precedence::AlgoTraceProps::m_name
std::string m_name
Definition: PrecedenceRulesGraph.h:54
concurrency::RankerByCummulativeOutDegree::m_nodesSucceeded
int m_nodesSucceeded
Definition: Rankers.h:37
concurrency::RankerByDataRealmEccentricity::m_maxKnownDepth
uint m_maxKnownDepth
Definition: Rankers.h:73
Gaudi::ParticleProperties::index
size_t index(const Gaudi::ParticleProperty *property, const Gaudi::Interfaces::IParticlePropertySvc *service)
helper utility for mapping of Gaudi::ParticleProperty object into non-negative integral sequential id...
Definition: IParticlePropertySvc.cpp:39
std::ifstream
STL class.