Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Allow insertion of time inside gettimeofday and clock_gettime
[simgrid.git] / src / smpi / internals / smpi_bench.cpp
index fa23312..96996c0 100644 (file)
@@ -35,6 +35,8 @@ SharedMallocType smpi_cfg_shared_malloc = SharedMallocType::GLOBAL;
 double smpi_total_benched_time = 0;
 
 extern "C" XBT_PUBLIC void smpi_execute_flops_(double* flops);
+extern "C" XBT_PUBLIC simgrid::config::Flag<double> smpi_wtime_sleep;
+
 void smpi_execute_flops_(double *flops)
 {
   smpi_execute_flops(*flops);
@@ -49,8 +51,11 @@ void smpi_execute_(double *duration)
 void smpi_execute_flops(double flops) {
   xbt_assert(flops >= 0, "You're trying to execute a negative amount of flops (%f)!", flops);
   XBT_DEBUG("Handle real computation time: %f flops", flops);
-  simgrid::s4u::this_actor::exec_init(flops)->set_name("computation")->start()->wait();
-  // FIXME adding this break smpi/tracing example... ->set_tracing_category(TRACE_internal_smpi_get_category())
+  simgrid::s4u::this_actor::exec_init(flops)
+      ->set_name("computation")
+      ->set_tracing_category(TRACE_internal_smpi_get_category())
+      ->start()
+      ->wait();
   smpi_switch_data_segment(simgrid::s4u::Actor::self());
 }
 
@@ -229,6 +234,8 @@ int smpi_gettimeofday(struct timeval* tv, struct timezone* tz)
     tv->tv_usec = static_cast<suseconds_t>((now - tv->tv_sec) * 1e6);
 #endif
   }
+  if(smpi_wtime_sleep > 0)
+    simcall_process_sleep(smpi_wtime_sleep);
   smpi_bench_begin();
   return 0;
 }
@@ -245,6 +252,8 @@ int smpi_clock_gettime(clockid_t clk_id, struct timespec* tp)
     tp->tv_sec = static_cast<time_t>(now);
     tp->tv_nsec = static_cast<long int>((now - tp->tv_sec) * 1e9);
   }
+  if(smpi_wtime_sleep > 0)
+    simcall_process_sleep(smpi_wtime_sleep);
   smpi_bench_begin();
   return 0;
 }