Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'smpi-topo'
[simgrid.git] / src / smpi / smpi_global.c
index 60e550f..3315d44 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);
   }
 
@@ -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);