X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/blobdiff_plain/7c16f589594608d2269921e11d5298c09fe2512b..3bbce140c762cb8f3aaf9526e835aaa72cdec632:/process.cpp?ds=inline diff --git a/process.cpp b/process.cpp index acd7aed..a74b114 100644 --- a/process.cpp +++ b/process.cpp @@ -1,7 +1,6 @@ #include #include #include -#include #include #include #include @@ -21,7 +20,7 @@ double process::total_load_exit = 0.0; process::process(int argc, char* argv[]) { - if (argc < 2 || !(std::istringstream(argv[1]) >> load)) + if (argc < 2 || !(std::istringstream(argv[1]) >> real_load)) throw std::invalid_argument("bad or missing initial load parameter"); neigh.assign(argv + 2, argv + argc); @@ -36,10 +35,10 @@ process::process(int argc, char* argv[]) comp = 0.0; - prev_load_broadcast = -1; // force sending of load on first send() - expected_load = load; - total_load_running += load; - total_load_init += load; + prev_load_broadcast = -1; // force sending of load on first send_all() + expected_load = real_load; + total_load_running += real_load; + total_load_init += real_load; ctrl_close_pending = data_close_pending = neigh.size(); close_received = false; @@ -63,13 +62,13 @@ process::process(int argc, char* argv[]) process::~process() { - total_load_exit += load; + total_load_exit += real_load; if (opt::bookkeeping) { INFO4("Final load after %d:%d iterations: %g ; expected: %g", - lb_iter, comp_iter, load, expected_load); + lb_iter, comp_iter, real_load, expected_load); } else { INFO2("Final load after %d iterations: %g", - lb_iter, load); + lb_iter, real_load); if (lb_iter != comp_iter) WARN2("lb_iter (%d) and comp_iter (%d) differ!", lb_iter, comp_iter); @@ -80,11 +79,11 @@ process::~process() int process::run() { double next_iter_after_date = 0.0; - INFO1("Initial load: %g", load); + INFO1("Initial load: %g", real_load); VERB0("Starting..."); comp_iter = lb_iter = 0; while (true) { - double ld = lb_load(); + double ld = get_load(); if (ld > 0.0) { double now = MSG_get_clock(); if (now < next_iter_after_date) @@ -96,21 +95,21 @@ int process::run() if (opt::log_rate && lb_iter % opt::log_rate == 0) { if (opt::bookkeeping) INFO4("(%u:%u) current load: %g ; expected: %g", - lb_iter, comp_iter, load, expected_load); + lb_iter, comp_iter, real_load, expected_load); else INFO2("(%u) current load: %g", - lb_iter, load); + lb_iter, real_load); } ld -= load_balance(ld); print_loads(true, xbt_log_priority_debug); } - lb_load() = ld; + set_load(ld); // send load information, and load (data) if any - send(); - if (load > 0.0) { + send_all(); + if (real_load > 0.0) { ++comp_iter; compute(); } @@ -131,7 +130,7 @@ int process::run() // block on receiving unless there is something to compute or // to send double timeout; - if (load != 0 || lb_load() != prev_load_broadcast) + if (real_load != 0 || get_load() != prev_load_broadcast) timeout = 0.0; else if (opt::min_iter_duration) timeout = opt::min_iter_duration; @@ -146,7 +145,7 @@ int process::run() } // have no load and cannot receive anything - if (load == 0.0 && !may_receive()) { + if (real_load == 0.0 && !may_receive()) { VERB0("I'm a poor lonesome process, and I have no load..."); break; } @@ -175,17 +174,6 @@ int process::run() return 0; } -double process::sum_of_to_send() const -{ - using std::tr1::bind; - using std::tr1::placeholders::_1; - using std::tr1::placeholders::_2; - - return std::accumulate(neigh.begin(), neigh.end(), 0.0, - bind(std::plus(), - _1, bind(&neighbor::get_to_send, _2))); -} - double process::load_balance(double /*my_load*/) { if (lb_iter == 1) // warn only once @@ -195,8 +183,8 @@ double process::load_balance(double /*my_load*/) void process::compute() { - if (load > 0.0) { - double flops = opt::comp_cost(load); + if (real_load > 0.0) { + double flops = opt::comp_cost(real_load); m_task_t task = MSG_task_create("computation", flops, 0.0, NULL); TRACE_msg_set_task_category(task, TRACE_CAT_COMP); DEBUG2("compute %g flop%s", flops, ESSE(flops)); @@ -210,8 +198,8 @@ void process::compute() void process::send1_no_bookkeeping(neighbor& nb) { - if (load != prev_load_broadcast) - comm.send(nb.get_ctrl_mbox(), new message(message::INFO, load)); + if (real_load != prev_load_broadcast) + comm.send(nb.get_ctrl_mbox(), new message(message::INFO, real_load)); double load_to_send = nb.get_to_send(); if (load_to_send > 0.0) { comm.send(nb.get_data_mbox(), new message(message::LOAD, load_to_send)); @@ -235,20 +223,20 @@ void process::send1_bookkeeping(neighbor& nb) } else { new_debt = nb.get_debt(); } - if (load <= new_debt) { - load_to_send = load; + if (real_load <= new_debt) { + load_to_send = real_load; nb.set_debt(new_debt - load_to_send); - load = 0.0; + real_load = 0.0; } else { load_to_send = new_debt; nb.set_debt(0.0); - load -= load_to_send; + real_load -= load_to_send; } if (load_to_send > 0.0) comm.send(nb.get_data_mbox(), new message(message::LOAD, load_to_send)); } -void process::send() +void process::send_all() { using std::tr1::bind; using std::tr1::placeholders::_1; @@ -260,7 +248,7 @@ void process::send() } else { std::for_each(neigh.begin(), neigh.end(), bind(&process::send1_no_bookkeeping, this, _1)); - prev_load_broadcast = load; + prev_load_broadcast = real_load; } comm.flush(false); } @@ -283,7 +271,7 @@ void process::receive(double timeout) break; case message::LOAD: { double ld = msg->get_amount(); - load += ld; + real_load += ld; if (finalizing) total_load_running -= ld; break; @@ -315,7 +303,7 @@ void process::finalize() using std::tr1::placeholders::_1; finalizing = true; - total_load_running -= load; + total_load_running -= real_load; DEBUG2("send CLOSE to %lu neighbor%s", (unsigned long )neigh.size(), ESSE(neigh.size()));