Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add a check so that process_init exits cleanly when improperly called.
[simgrid.git] / src / smpi / smpi_global.cpp
index ce2d316..a804bcb 100644 (file)
@@ -59,7 +59,7 @@ typedef struct s_smpi_process_data {
   int sampling;                 /* inside an SMPI_SAMPLE_ block? */
   char* instance_id;
   bool replaying;                /* is the process replaying a trace */
-  xbt_bar_t finalization_barrier;
+  msg_bar_t finalization_barrier;
   int return_value;
   smpi_trace_call_location_t trace_call_loc;
 #if HAVE_PAPI
@@ -99,8 +99,12 @@ static char *get_mailbox_name_small(char *str, int index)
 void smpi_process_init(int *argc, char ***argv)
 {
 
+  if (process_data == nullptr){
+    printf("SimGrid was not initialized properly before entering MPI_Init. Aborting, please check compilation process and use smpirun\n");
+    exit(1);
+  }
   if (argc != nullptr && argv != nullptr) {
-    smx_process_t proc = SIMIX_process_self();
+    smx_actor_t proc = SIMIX_process_self();
     proc->context->set_cleanup(&MSG_process_cleanup_from_SIMIX);
     char* instance_id = (*argv)[1];
     int rank = xbt_str_parse_int((*argv)[2], "Invalid rank: %s");
@@ -118,7 +122,7 @@ void smpi_process_init(int *argc, char ***argv)
     }
 
     MPI_Comm* temp_comm_world;
-    xbt_bar_t temp_bar;
+    msg_bar_t temp_bar;
     smpi_deployment_register_process(instance_id, rank, index, &temp_comm_world, &temp_bar);
     smpi_process_data_t data = smpi_process_remote_data(index);
     data->comm_world         = temp_comm_world;
@@ -167,7 +171,7 @@ void smpi_process_finalize()
 
     int index = smpi_process_index();
     // wait for all pending asynchronous comms to finish
-    xbt_barrier_wait(process_data[index_to_process_data[index]]->finalization_barrier);
+    MSG_barrier_wait(process_data[index_to_process_data[index]]->finalization_barrier);
 }
 
 /** @brief Check if a process is finalized */
@@ -430,12 +434,16 @@ static void smpi_check_options(){
 
    xbt_assert(xbt_cfg_get_int("smpi/async-small-thresh") <= xbt_cfg_get_int("smpi/send-is-detached-thresh"));
 
-   if (xbt_cfg_is_default_value("smpi/running-power")) {
+   if (xbt_cfg_is_default_value("smpi/host-speed")) {
      XBT_INFO("You did not set the power of the host running the simulation.  "
               "The timings will certainly not be accurate.  "
-              "Use the option \"--cfg=smpi/running-power:<flops>\" to set its value."
+              "Use the option \"--cfg=smpi/host-speed:<flops>\" to set its value."
               "Check http://simgrid.org/simgrid/latest/doc/options.html#options_smpi_bench for more information.");
    }
+
+   xbt_assert(xbt_cfg_get_double("smpi/cpu-threshold") >=0,
+       "The 'smpi/cpu-threshold' option cannot have negative values [anymore]. If you want to discard "
+       "the simulation of any computation, please use 'smpi/simulate-computation:no' instead.");
 }
 
 int smpi_enabled() {
@@ -591,7 +599,7 @@ void smpi_global_init()
     group = smpi_group_new(process_count);
     MPI_COMM_WORLD = smpi_comm_new(group, nullptr);
     MPI_Attr_put(MPI_COMM_WORLD, MPI_UNIVERSE_SIZE, reinterpret_cast<void *>(process_count));
-    xbt_bar_t bar=xbt_barrier_init(process_count);
+    msg_bar_t bar = MSG_barrier_init(process_count);
 
     for (i = 0; i < process_count; i++) {
       smpi_group_set_mapping(group, i, i);
@@ -603,16 +611,15 @@ void smpi_global_init()
 void smpi_global_destroy()
 {
   int count = smpi_process_count();
-  int i;
 
   smpi_bench_destroy();
   if (MPI_COMM_WORLD != MPI_COMM_UNINITIALIZED){
       while (smpi_group_unuse(smpi_comm_group(MPI_COMM_WORLD)) > 0);
-      xbt_barrier_destroy(process_data[0]->finalization_barrier);
+      MSG_barrier_destroy(process_data[0]->finalization_barrier);
   }else{
       smpi_deployment_cleanup_instances();
   }
-  for (i = 0; i < count; i++) {
+  for (int i = 0; i < count; i++) {
     if(process_data[i]->comm_self!=MPI_COMM_NULL){
       smpi_comm_destroy(process_data[i]->comm_self);
     }
@@ -759,7 +766,7 @@ static void smpi_init_options(){
 
     smpi_coll_cleanup_callback=nullptr;
     smpi_cpu_threshold = xbt_cfg_get_double("smpi/cpu-threshold");
-    smpi_running_power = xbt_cfg_get_double("smpi/running-power");
+    smpi_host_speed = xbt_cfg_get_double("smpi/host-speed");
     smpi_privatize_global_variables = xbt_cfg_get_boolean("smpi/privatize-global-variables");
     if (smpi_cpu_threshold < 0)
       smpi_cpu_threshold = DBL_MAX;