From 01f10aeb9d9a94f01006b4e7396711b8964f43da Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Fri, 14 Oct 2011 17:02:32 +0200 Subject: [PATCH] Add statistics about idle duration. --- main.cpp | 3 +++ process.cpp | 5 +++++ process.h | 2 ++ 3 files changed, 10 insertions(+) diff --git a/main.cpp b/main.cpp index c373553..45c58ce 100644 --- a/main.cpp +++ b/main.cpp @@ -61,6 +61,7 @@ namespace { statistics ctrl_recv_amount; statistics ctrl_send_count; statistics ctrl_recv_count; + statistics idle_duration; statistics convergence; } @@ -91,6 +92,7 @@ static int simulation_main(int argc, char* argv[]) ctrl_recv_amount.push(proc->get_ctrl_recv_amount()); ctrl_send_count.push(proc->get_ctrl_send_count()); ctrl_recv_count.push(proc->get_ctrl_recv_count()); + idle_duration.push(proc->get_idle_duration()); double c = proc->get_convergence(); if (c != -1.0) convergence.push(c); @@ -329,6 +331,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("Idle duration", idle_duration); PR_STATS("Data send amount", data_send_amount); PR_STATS("Data recv amount", data_recv_amount); PR_STATS("Data send count", data_send_count); diff --git a/process.cpp b/process.cpp index b6a6d28..eac87d1 100644 --- a/process.cpp +++ b/process.cpp @@ -67,6 +67,7 @@ process::process(int argc, char* argv[]) total_load_init += real_load; received_load = 0.0; + idle_duration = 0.0; convergence = -1.0; process_counter++; @@ -202,6 +203,7 @@ void process::compute_loop() using std::placeholders::_1; double next_iter_after_date = MSG_get_clock() + opt::min_comp_iter_duration; + double idle_since_date = 0.0; while (still_running()) { do { @@ -226,6 +228,7 @@ void process::compute_loop() convergence_check(); // compute + idle_duration += MSG_get_clock() - idle_since_date; ++comp_iter; double flops = opt::comp_cost(real_load); m_task_t task = MSG_task_create("computation", flops, 0.0, NULL); @@ -235,6 +238,8 @@ void process::compute_loop() add_comp_amount(flops); MSG_task_destroy(task); + idle_since_date = MSG_get_clock(); + sleep_until_date(next_iter_after_date, opt::min_comp_iter_duration); } diff --git a/process.h b/process.h index d2f1229..f2e5a45 100644 --- a/process.h +++ b/process.h @@ -44,6 +44,7 @@ public: double get_ctrl_recv_amount() const { return acc.ctrl_recv.amount; } unsigned get_ctrl_send_count() const { return acc.ctrl_send.count; } unsigned get_ctrl_recv_count() const { return acc.ctrl_recv.count; } + double get_idle_duration() const { return idle_duration; } double get_convergence() const { return convergence; } int run(); @@ -113,6 +114,7 @@ private: double expected_load; // expected load in bookkeeping mode double received_load; // load received from neighbors + double idle_duration; // how long we had nothing to compute double convergence; // date when convergence was achieved, or -1.0 mutex_t mutex; // synchronization between threads -- 2.39.5