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

Private GIT Repository
Print my own loads too with process:print_loads.
[loba.git] / process.cpp
index 65496385f08f45baf7d4e1b8015c78e7f54cf0e4..c104ecdf704d53fd61f6834a2bfc7f5053e64972 100644 (file)
@@ -84,22 +84,27 @@ process::~process()
     total_load_exit += real_load;
     if (opt::log_rate < 0)
         return;
-    if (opt::bookkeeping) {
-        XBT_INFO("Final load after %d:%d iterations: %g ; expected: %g",
-                 lb_iter, comp_iter, real_load, expected_load);
-    } else {
-        XBT_INFO("Final load after %d:%d iterations: %g",
-                 lb_iter, comp_iter, real_load);
-    }
+    XBT_INFO("Final load after %d:%d iterations: %g",
+             lb_iter, comp_iter, real_load);
+    XBT_VERB("Expected load was: %g", expected_load);
     XBT_VERB("Total computation for this process: %g", comp);
 }
 
 int process::run()
 {
-    if (opt::log_rate >= 0)
+    if (opt::log_rate >= 0) {
         XBT_INFO("Initial load: %g", real_load);
+        XBT_VERB("Initial expected load: %g", expected_load);
+    }
     XBT_VERB("Starting...");
+    mutex.acquire();
     lb_thread->start();
+    while (lb_iter <= opt::comp_iter_delay)
+        cond.wait(mutex);
+    mutex.release();
+    double sleep_duration = opt::comp_time_delay - MSG_get_clock();
+    if (sleep_duration > 0.0)
+        MSG_process_sleep(sleep_duration);
     compute_loop();
     lb_thread->wait();
     XBT_VERB("Done.");
@@ -113,15 +118,18 @@ void process::load_balance_loop()
 
     double next_iter_after_date = MSG_get_clock() + opt::min_lb_iter_duration;
     while (still_running()) {
-        ++lb_iter;
+        if (lb_iter == opt::comp_iter_delay) {
+            mutex.acquire();
+            ++lb_iter;
+            cond.signal();
+            mutex.release();
+        } else {
+            ++lb_iter;
+        }
 
         if (opt::log_rate && lb_iter % opt::log_rate == 0) {
-            if (opt::bookkeeping)
-                XBT_INFO("(%u:%u) current load: %g ; expected: %g",
-                         lb_iter, comp_iter, real_load, expected_load);
-            else
-                XBT_INFO("(%u:%u) current load: %g",
-                         lb_iter, comp_iter, real_load);
+            XBT_INFO("(%u:%u) current load: %g", lb_iter, comp_iter, real_load);
+            XBT_VERB("... expected load: %g", expected_load);
         }
 
         if (get_load() > 0.0)
@@ -261,7 +269,8 @@ void process::send(neighbor& nb, double amount)
     if (_XBT_LOG_ISENABLEDV((*cat), logp)) {                            \
         using std::tr1::bind;                                           \
         using std::tr1::placeholders::_1;                               \
-        XBT_XCLOG(cat, logp, "Neighbor loads:");                        \
+        XBT_XCLOG(cat, logp, "My load: %g (real); %g (expected).  "     \
+                  "Neighbor loads:", real_load, expected_load);         \
         std::for_each(vec.begin(), vec.end(),                           \
                       bind(&neighbor::print, _1, verbose, logp, cat));  \
     } else ((void)0)