]> AND Private Git Repository - loba.git/commitdiff
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Count supernumerary comp. iterations.
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Tue, 18 Oct 2011 13:52:02 +0000 (15:52 +0200)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Tue, 18 Oct 2011 13:52:02 +0000 (15:52 +0200)
main.cpp
process.cpp
process.h

index dd8b6613c5ba3eea60bdbef729e9ef3c96f37aee..7a5ccce58615531f850610a530c92cf95d1d3cbd 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -53,6 +53,7 @@ namespace {
     statistics comps;
     statistics comp_iterations;
     statistics all_comp_iterations;
+    statistics iter_deviation;
     statistics data_send_amount;
     statistics data_recv_amount;
     statistics data_send_count;
@@ -84,6 +85,7 @@ static int simulation_main(int argc, char* argv[])
         comps.push(proc->get_comp_amount());
         comp_iterations.push(proc->get_comp_iter());
         all_comp_iterations.push(proc->get_all_comp_iter());
+        iter_deviation.push(proc->get_iter_deviation());
         data_send_amount.push(proc->get_data_send_amount());
         data_recv_amount.push(proc->get_data_recv_amount());
         data_send_count.push(proc->get_data_send_count());
@@ -331,6 +333,7 @@ int main(int argc, char* argv[])
         PR_STATS("Computation", comps);
         PR_STATS("Comp. iterations", comp_iterations);
         PR_STATS("X-Comp. iterations", all_comp_iterations);
+        PR_STATS("Supernumer. comp. iter.", iter_deviation);
         PR_STATS("Idle duration", idle_duration);
         PR_STATS("Data send amount", data_send_amount);
         PR_STATS("Data recv amount", data_recv_amount);
index e6c7bc23ffe137c18644d6a163b648cf81e2b07b..48dac1dd72ea65fa78bedfa168e81d20a3bb762e 100644 (file)
@@ -121,6 +121,21 @@ process::~process()
     print_loads(true, xbt_log_priority_debug);
 }
 
+double process::get_iter_deviation() const
+{
+    double average_cost = opt::comp_cost(total_load_average);
+    // Do not count idle periods
+    double comp_iter_opt = acc.comp_amount / average_cost;
+/*
+    // Add iterations that could have been achieved while beeing idle
+    // (kept for documentation)
+    double self_speed = MSG_get_host_speed(MSG_host_self());
+    double average_duration = average_cost / self_speed;
+    comp_iter_opt += idle_duration / average_duration;
+*/
+    return comp_iter - comp_iter_opt;
+}
+
 int process::run()
 {
     if (opt::log_rate >= 0) {
index f2e5a45455674ad2ff40c2fa7831787399a75761..c31d21345ab6c05993b7be8bab5cff20ea4e1f8e 100644 (file)
--- a/process.h
+++ b/process.h
@@ -36,6 +36,7 @@ public:
     double get_comp_amount() const         { return acc.comp_amount;      }
     unsigned get_comp_iter() const         { return comp_iter;            }
     unsigned get_all_comp_iter() const     { return all_comp_iter;        }
+    double get_iter_deviation() const;
     double get_data_send_amount() const    { return acc.data_send.amount; }
     double get_data_recv_amount() const    { return acc.data_recv.amount; }
     unsigned get_data_send_count() const   { return acc.data_send.count;  }