PaCO++  0.05
paco_libgraph_comScheduling.cc
Go to the documentation of this file.
2 
3 #undef INFO_INTERNAL
4 
6 {
7  _beta=0;
8  _k=0;
9  _g = NULL;
10  _client_nodes = NULL;
11  _server_nodes = NULL;
12 }
13 
14 
16 {
17  if (_g) delete _g;
18  if (_client_nodes) delete[] _client_nodes;
19  if (_server_nodes) delete[] _server_nodes;
20 }
21 
22 
23 void
25 {
26  if (_beta == beta) return;
27 
28  _beta = beta;
29  // beta change -> clear all schedule memory
31 }
32 
33 void
35 {
36  if (_k == k) return;
37 
38  _k = k;
39  // k change -> clear all schedule memory
41 }
42 
43 unsigned int
45 {
46  return _beta;
47 }
48 
49 unsigned int
51 {
52  return _k;
53 }
54 
55 void
57 {
58 #ifdef INFO_INTERNAL
59  std::cerr<<__FUNCTION__<<" with beta:"<<_libgraph_beta<<" k:"<<_libgraph_k<<endl;
60 #endif
61 
62  // Removing old instances
63  if (_g) delete _g;
64  if (_client_nodes) delete[] _client_nodes;
65  if (_server_nodes) delete[] _server_nodes;
66 
67  // Creating new instances
68  _g = new bigraph();
69 
70  // Setting up the parametter of the graph
71  if ((_beta==0)||(_k==0)) {
72  std::cerr<< "ERROR: libgraph not initialized -- Specifiy k & beta !!"<<endl;
73  }
74 
75  _g->set_beta(_beta);
76  _g->set_k(_k);
77 
78  _client_nodes = new node*[srctopo->total];
79  _server_nodes = new node*[dsttopo->total];
80 
81  for (unsigned i = 0; i < srctopo->total; i++)
82  {
83  _client_nodes[i] = _g->add_node(true);
84  }
85  for (unsigned i = 0; i < dsttopo->total; i++)
86  {
87  _server_nodes[i] = _g->add_node(false);
88  }
89 }
90 
93  PaCO::PacoTopology_t* srctopo, PaCO::PacoTopology_t* dsttopo,
94  unsigned **com_matrix, void** info_vector[])
95 {
96  // 1. setup a new bigraph
97  initializeBigraph(srctopo, dsttopo);
98 
99  // 2. fill the bigraph
100  for (unsigned i = 0; i < srctopo->total; i++)
101  {
102  if (i!= rank)
103  for (unsigned j = 0; j < dsttopo->total; j++)
104  {
105  _g->add_edge(_client_nodes[i], _server_nodes[j], com_matrix[i][j]);
106 #ifdef INFO_INTERNAL
107  std::cerr << "edge: "<<_client_nodes[i] << " -> "<<_server_nodes[j] << " : "<< com_matrix[i][j]<<endl;
108 #endif
109  }
110  else
111  for (unsigned j = 0; j < dsttopo->total; j++)
112  {
113  _g->add_edge(_client_nodes[i],_server_nodes[j], com_matrix[i][j], info_vector[j]);
114 #ifdef INFO_INTERNAL
115  std::cerr << "edge: "<<_client_nodes[i] << " -> "<<_server_nodes[j] << " : "<< com_matrix[i][j]<<" ("<<info_vector[j]<<")\n";
116 #endif
117  }
118  }
119 
120  _g->remove_empty_nodes();
121 
122  paco_comSchedule_libgraph* schedule_info = new paco_comSchedule_libgraph(new kbps_approximation(_g));
123 
124  schedule_info->get_kbps()->compute_poly2();
125  schedule_info->get_kbps()->serialize();
126  schedule_info->build_idx();
127 
128  return schedule_info;
129 }
virtual void clearAllSchedules()
virtual void initializeBigraph(PaCO::PacoTopology_t *srctopo, PaCO::PacoTopology_t *dsttopo)
unsigned long total
Definition: PaCO++.idl:35
paco_comSchedule * computeScheduling(unsigned rank, PaCO::PacoTopology_t *srctopo, PaCO::PacoTopology_t *dsttopo, unsigned **com_matrix, void **info_vector[])
kbps_approximation * get_kbps() const