Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
When display timing is set, also display global simulation time and application times
[simgrid.git] / src / smpi / smpi_bench.c
index a5d2335..f7b0c26 100644 (file)
@@ -78,6 +78,8 @@ int smpi_loaded_page = -1;
 char* start_data_exe = NULL;
 int size_data_exe = 0;
 int smpi_privatize_global_variables;
+double smpi_total_benched_time = 0;
+
 
 smpi_privatisation_region_t smpi_privatisation_regions;
 
@@ -160,6 +162,7 @@ void smpi_execute_flops(double flops) {
   simcall_set_category (action, TRACE_internal_smpi_get_category());
 #endif
   simcall_host_execution_wait(action);
+  smpi_switch_data_segment(smpi_process_index());
 }
 
 void smpi_execute(double duration)
@@ -217,6 +220,8 @@ void smpi_bench_end(void)
   if (sg_cfg_get_boolean("smpi/simulate_computation")) {
     smpi_execute(xbt_os_timer_elapsed(timer));
   }
+
+  smpi_total_benched_time += xbt_os_timer_elapsed(timer);
 }
 
 /* Private sleep function used by smpi_sleep() and smpi_usleep() */
@@ -626,8 +631,9 @@ void smpi_switch_data_segment(int dest){
       memcpy(smpi_privatisation_regions[i].address,TOPAGE(start_data_exe),size_data_exe);
     }
   }
+
   int current = smpi_privatisation_regions[dest].file_descriptor;
-  XBT_VERB("Switching data frame to the one of process %d", dest);
+  XBT_DEBUG("Switching data frame to the one of process %d", dest);
   void* tmp = mmap (TOPAGE(start_data_exe), size_data_exe, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_SHARED, current, 0);
   if (tmp != TOPAGE(start_data_exe))
     xbt_die("Couldn't map the new region");
@@ -727,7 +733,7 @@ void smpi_initialize_global_memory_segments(){
   }
 
   smpi_privatisation_regions = (smpi_privatisation_region_t) malloc(
-    sizeof(struct s_smpi_privatisation_region) * sizeof(int));
+    smpi_process_count() * sizeof(struct s_smpi_privatisation_region));
 
   for (i=0; i< SIMIX_process_count(); i++){
       //create SIMIX_process_count() mappings of this size with the same data inside