55 for(std::size_t i=0; i<
num_sccs; ++i)
84 const std::set<event_grapht::critical_cyclet> &subset_of_cycles)
86 for(std::set<event_grapht::critical_cyclet>::const_iterator it =
87 subset_of_cycles.begin();
88 it != subset_of_cycles.end();
91 for(std::set<event_grapht::critical_cyclet::delayt>::const_iterator
92 p_it=it->unsafe_pairs.begin();
93 p_it!=it->unsafe_pairs.end(); ++p_it)
98 std::pair<irep_idt, source_locationt>(
105 std::pair<irep_idt, source_locationt>(
113 const std::set<event_grapht::critical_cyclet> &subset_of_cycles)
117 std::set<event_grapht::critical_cyclet::delayt> delayed;
119 for(std::set<event_grapht::critical_cyclet>::iterator it =
120 subset_of_cycles.begin();
121 it != subset_of_cycles.end();
126 for(std::set<event_grapht::critical_cyclet::delayt>::iterator
127 p_it=it->unsafe_pairs.begin();
128 p_it!=it->unsafe_pairs.end(); ++p_it)
130 if(delayed.find(*p_it)!=delayed.end())
141 if(!it->unsafe_pairs.empty())
143 std::set<event_grapht::critical_cyclet::delayt>::iterator
144 p_it=it->unsafe_pairs.begin();
145 delayed.insert(*p_it);
149 std::pair<irep_idt, source_locationt>(
156 std::pair<irep_idt, source_locationt>(
164 const std::set<event_grapht::critical_cyclet> &)
167 throw "read first strategy not implemented yet";
171 const std::set<event_grapht::critical_cyclet> &)
174 throw "write first strategy not implemented yet";
194 const std::set<event_grapht::critical_cyclet> &subset_of_cycles)
220 std::set<event_grapht::critical_cyclet::delayt> edges;
221 for(std::set<event_grapht::critical_cyclet>::iterator C_j =
222 subset_of_cycles.begin();
223 C_j != subset_of_cycles.end();
225 for(std::set<event_grapht::critical_cyclet::delayt>::const_iterator e_i=
226 C_j->unsafe_pairs.begin();
227 e_i!=C_j->unsafe_pairs.end();
233 glp_init_iocp(&parm);
234 parm.msg_lev=GLP_MSG_OFF;
235 parm.presolve=GLP_ON;
237 lp=glp_create_prob();
238 glp_set_prob_name(lp,
"instrumentation optimisation");
239 glp_set_obj_dir(lp, GLP_MIN);
245 glp_add_cols(lp, edges.size());
247 for(std::set<event_grapht::critical_cyclet::delayt>::iterator
254 glp_set_col_name(lp, i, name.c_str());
255 glp_set_col_bnds(lp, i, GLP_LO, 0.0, 0.0);
256 glp_set_obj_coef(lp, i,
cost(*e_i));
257 glp_set_col_kind(lp, i, GLP_BV);
261 glp_add_rows(lp, subset_of_cycles.size());
263 for(std::set<event_grapht::critical_cyclet>::iterator C_j =
264 subset_of_cycles.begin();
265 C_j != subset_of_cycles.end();
270 glp_set_row_name(lp, i, name.c_str());
271 glp_set_row_bnds(lp, i, GLP_LO, 1.0, 0.0);
274 const std::size_t mat_size = subset_of_cycles.size() * edges.size();
277 std::vector<int> imat(mat_size+1);
278 std::vector<int> jmat(mat_size+1);
279 std::vector<double> vmat(mat_size+1);
286 for(std::set<event_grapht::critical_cyclet::delayt>::iterator
292 for(std::set<event_grapht::critical_cyclet>::iterator C_j =
293 subset_of_cycles.begin();
294 C_j != subset_of_cycles.end();
299 if(C_j->unsafe_pairs.find(*e_i)!=C_j->unsafe_pairs.end())
310 for(i=1; i<=mat_size; ++i)
316 glp_load_matrix(lp, mat_size, imat.data(), jmat.data(), vmat.data());
317 glp_intopt(lp, &parm);
323 for(std::set<event_grapht::critical_cyclet::delayt>::iterator
329 if(glp_mip_col_val(lp, i)>=1)
334 std::pair<irep_idt, source_locationt>(
341 std::pair<irep_idt, source_locationt>(
349 (void)subset_of_cycles;
350 throw "sorry, minimum interference option requires glpk; "
351 "please recompile goto-instrument with glpk";
356 const std::set<event_grapht::critical_cyclet> &set,
359 for(std::set<event_grapht::critical_cyclet>::const_iterator
363 for(std::set<event_grapht::critical_cyclet::delayt>::const_iterator
364 p_it=it->unsafe_pairs.begin();
365 p_it!=it->unsafe_pairs.end(); ++p_it)
372 std::pair<irep_idt, source_locationt>(
379 std::pair<irep_idt, source_locationt>(second_ev.
variable,
398 for(std::size_t i=0; i<
num_sccs; ++i)
408 file.open(
"inst.evt");
409 std::set<event_idt> this_set;
416 for(std::size_t i=0; i<size; i++)
419 this_set.insert(tmp);