Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add MSG_process_join [#13601]
[simgrid.git] / src / smpi / smpi_global.c
index 60e550f84da8d40f2d7cd6242d29e1bf16dd862e..ef34dfb47994d8312100c3a7425f4a31de1de54f 100644 (file)
@@ -72,6 +72,7 @@ void smpi_process_init(int *argc, char ***argv)
 #ifdef SMPI_F2C
     smpi_current_rank = index;
 #endif
+
     data = smpi_process_remote_data(index);
     simcall_process_set_data(proc, data);
     if (*argc > 2) {
@@ -85,6 +86,11 @@ void smpi_process_init(int *argc, char ***argv)
     // set the process attached to the mailbox
     simcall_rdv_set_receiver(data->mailbox_small, proc);
     XBT_DEBUG("<%d> New process in the game: %p", index, proc);
+
+    if(smpi_privatize_global_variables){
+      switch_data_segment(index);
+    }
+
   }
   if (smpi_process_data() == NULL)
     xbt_die("smpi_process_data() returned NULL. You probably gave a NULL parameter to MPI_Init. Although it's required by MPI-2, this is currently not supported by SMPI.");
@@ -93,6 +99,9 @@ void smpi_process_init(int *argc, char ***argv)
 void smpi_process_destroy(void)
 {
   int index = smpi_process_index();
+  if(smpi_privatize_global_variables){
+    switch_data_segment(index);
+  }
   process_data[index]->state = SMPI_FINALIZED;
   XBT_DEBUG("<%d> Process left the game", index);
 }
@@ -296,7 +305,7 @@ MPI_Comm smpi_process_comm_self(void)
   smpi_process_data_t data = smpi_process_data();
   if(data->comm_self==MPI_COMM_NULL){
     MPI_Group group = smpi_group_new(1);
-    data->comm_self = smpi_comm_new(group);
+    data->comm_self = smpi_comm_new(group, NULL);
     smpi_group_set_mapping(group, smpi_process_index(), 0);
   }
 
@@ -334,7 +343,7 @@ static void smpi_comm_copy_buffer_callback(smx_action_t comm,
       && ((char*)buff >= start_data_exe)
       && ((char*)buff < start_data_exe + size_data_exe )
     ){
-       XBT_WARN("Privatization : We are copying from a zone inside global memory... Saving data to temp buffer !");
+       XBT_DEBUG("Privatization : We are copying from a zone inside global memory... Saving data to temp buffer !");
        switch_data_segment(((smpi_process_data_t)SIMIX_process_get_data(comm->comm.src_proc))->index);
        tmpbuff = (void*)xbt_malloc(buff_size);
        memcpy(tmpbuff, buff, buff_size);
@@ -345,7 +354,7 @@ static void smpi_comm_copy_buffer_callback(smx_action_t comm,
       && ((char*)comm->comm.dst_buff >= start_data_exe)
       && ((char*)comm->comm.dst_buff < start_data_exe + size_data_exe )
     ){
-       XBT_WARN("Privatization : We are copying to a zone inside global memory - Switch data segment");
+       XBT_DEBUG("Privatization : We are copying to a zone inside global memory - Switch data segment");
        switch_data_segment(((smpi_process_data_t)SIMIX_process_get_data(comm->comm.dst_proc))->index);
   }
 
@@ -358,7 +367,7 @@ static void smpi_comm_copy_buffer_callback(smx_action_t comm,
     //It seems that the request is used after the call there this should
     //be free somewhereelse  but where???
     //xbt_free(comm->comm.src_data);// inside SMPI the request is keep
-    //inside the user data and should be free 
+    //inside the user data and should be free
     comm->comm.src_buff = NULL;
   }
 
@@ -391,7 +400,7 @@ void smpi_global_init(void)
     process_data[i]->sampling = 0;
   }
   group = smpi_group_new(process_count);
-  MPI_COMM_WORLD = smpi_comm_new(group);
+  MPI_COMM_WORLD = smpi_comm_new(group, NULL);
   MPI_UNIVERSE_SIZE = smpi_comm_size(MPI_COMM_WORLD);
   for (i = 0; i < process_count; i++) {
     smpi_group_set_mapping(group, i, i);
@@ -509,10 +518,6 @@ int smpi_main(int (*realmain) (int argc, char *argv[]), int argc, char *argv[])
 
   SIMIX_global_init(&argc, argv);
 
-#ifdef HAVE_TRACING
-  TRACE_start();
-#endif
-
   // parse the platform file: get the host list
   SIMIX_create_environment(argv[1]);