Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Spell check.
[simgrid.git] / src / smpi / internals / smpi_bench.cpp
index ac32fa2..a38dd6e 100644 (file)
@@ -12,6 +12,7 @@
 #include "src/internal_config.h"
 #include "src/mc/mc_replay.hpp"
 #include "xbt/config.hpp"
+#include "xbt/file.hpp"
 
 #include "src/smpi/include/smpi_actor.hpp"
 #include <unordered_map>
@@ -38,7 +39,8 @@ double smpi_host_speed;
 SharedMallocType smpi_cfg_shared_malloc = SharedMallocType::GLOBAL;
 double smpi_total_benched_time = 0;
 
-void smpi_execute_flops(double flops) {
+// Private execute_flops used by smpi_execute and smpi_execute_benched
+void private_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)
@@ -49,6 +51,15 @@ void smpi_execute_flops(double flops) {
   smpi_switch_data_segment(simgrid::s4u::Actor::self());
 }
 
+void smpi_execute_flops(double flops) {
+  int rank     = simgrid::s4u::this_actor::get_pid();
+  TRACE_smpi_computing_in(rank, flops);
+
+  private_execute_flops(flops);
+
+  TRACE_smpi_computing_out(rank);
+}
+
 void smpi_execute(double duration)
 {
   if (duration >= smpi_cpu_threshold) {
@@ -57,7 +68,7 @@ void smpi_execute(double duration)
     int rank     = simgrid::s4u::this_actor::get_pid();
     TRACE_smpi_computing_in(rank, flops);
 
-    smpi_execute_flops(flops);
+    private_execute_flops(flops);
 
     TRACE_smpi_computing_out(rank);
 
@@ -98,12 +109,25 @@ void smpi_bench_begin()
   xbt_os_threadtimer_start(smpi_process()->timer());
 }
 
+double smpi_adjust_comp_speed(){
+  double speedup=1;
+  if (simgrid::config::get_value<std::string>("smpi/comp-adjustment-file")[0] != '\0') {
+
+    smpi_trace_call_location_t* loc                            = smpi_process()->call_location();
+    std::string key                                            = loc->get_composed_key();
+    std::unordered_map<std::string, double>::const_iterator it = location2speedup.find(key);
+    if (it != location2speedup.end()) {
+      speedup = it->second;
+    }
+  }
+  return speedup;
+}
+
 void smpi_bench_end()
 {
   if (MC_is_active() || MC_record_replay_is_active())
     return;
 
-  double speedup = 1;
   xbt_os_timer_t timer = smpi_process()->timer();
   xbt_os_threadtimer_stop(timer);
 
@@ -136,19 +160,9 @@ void smpi_bench_end()
   }
 
   // Maybe we need to artificially speed up or slow down our computation based on our statistical analysis.
-  if (simgrid::config::get_value<std::string>("smpi/comp-adjustment-file")[0] != '\0') {
-
-    smpi_trace_call_location_t* loc                            = smpi_process()->call_location();
-    std::string key                                            = loc->get_composed_key();
-    std::unordered_map<std::string, double>::const_iterator it = location2speedup.find(key);
-    if (it != location2speedup.end()) {
-      speedup = it->second;
-    }
-  }
-
   // Simulate the benchmarked computation unless disabled via command-line argument
   if (simgrid::config::get_value<bool>("smpi/simulate-computation")) {
-    smpi_execute(xbt_os_timer_elapsed(timer)/speedup);
+    smpi_execute(xbt_os_timer_elapsed(timer)/smpi_adjust_comp_speed());
   }
 
 #if HAVE_PAPI
@@ -457,8 +471,11 @@ void smpi_trace_set_call_location(const char* file, const int line)
 
   loc->previous_filename   = loc->filename;
   loc->previous_linenumber = loc->linenumber;
-  loc->filename            = file;
-  loc->linenumber          = line;
+  if(not simgrid::config::get_value<bool>("smpi/trace-call-use-absolute-path"))
+    loc->filename = simgrid::xbt::Path(file).get_base_name();
+  else
+    loc->filename = file;
+  loc->linenumber = line;
 }
 
 /** Required for Fortran bindings */