Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
modified [PATCH] Allow multiple call to MPI_Init and added MSG_init to SMPI part
authorswhatelse <stevenwhatelse@hotmail.fr>
Mon, 3 Aug 2015 06:33:25 +0000 (08:33 +0200)
committerLuka Stanisic <luka.stanisic@imag.fr>
Thu, 3 Dec 2015 13:20:42 +0000 (14:20 +0100)
src/smpi/smpi_global.c
src/smpi/smpi_pmpi.c

index 580b02c..d629b68 100644 (file)
@@ -165,9 +165,14 @@ int smpi_process_finalized()
  */
 int smpi_process_initialized(void)
 {
-  int index = smpi_process_index();
-  return ( (index != MPI_UNDEFINED)
-          && (process_data[index_to_process_data[index]]->state == SMPI_INITIALIZED));
+  if (!index_to_process_data){
+    return false;
+  }
+  else{
+    int index = smpi_process_index();
+    return ( (index != MPI_UNDEFINED)
+             && (process_data[index_to_process_data[index]]->state == SMPI_INITIALIZED));
+  }
 }
 
 /**
index 99fdf8a..0c38666 100644 (file)
@@ -25,16 +25,21 @@ void TRACE_smpi_set_category(const char *category)
 
 int PMPI_Init(int *argc, char ***argv)
 {
-  smpi_process_init(argc, argv);
-  smpi_process_mark_as_initialized();
-  int rank = smpi_process_index();
-  TRACE_smpi_init(rank);
-  TRACE_smpi_computing_init(rank);
-  instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
-  extra->type = TRACING_INIT;
-  TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra);
-  TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
-  smpi_bench_begin();
+  // PMPI_Init is call only one time by only by SMPI process
+  int already_init;
+  MPI_Initialized(&already_init);
+  if(!(already_init)){
+    smpi_process_init(argc, argv);
+    smpi_process_mark_as_initialized();
+    int rank = smpi_process_index();
+    TRACE_smpi_init(rank);
+    TRACE_smpi_computing_init(rank);
+    instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
+    extra->type = TRACING_INIT;
+    TRACE_smpi_collective_in(rank, -1, __FUNCTION__, extra);
+    TRACE_smpi_collective_out(rank, -1, __FUNCTION__);
+    smpi_bench_begin();
+  }
   return MPI_SUCCESS;
 }