- // PMPI_Init is called only once per SMPI process
- int already_init;
- MPI_Initialized(&already_init);
- if(already_init == 0){
- simgrid::smpi::Process::init(argc, argv);
- smpi_process()->mark_as_initialized();
- int rank = simgrid::s4u::this_actor::get_pid();
- TRACE_smpi_init(rank);
- TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::NoOpTIData("init"));
- TRACE_smpi_comm_out(rank);
- TRACE_smpi_computing_init(rank);
- TRACE_smpi_sleeping_init(rank);
+
+ // Init is called only once per SMPI process
+ if (not smpi_process()->initializing()){
+ simgrid::smpi::ActorExt::init();
+ }
+ if (not smpi_process()->initialized()){
+ int rank_traced = simgrid::s4u::this_actor::get_pid();
+ TRACE_smpi_init(rank_traced);
+ TRACE_smpi_comm_in(rank_traced, __func__, new simgrid::instr::NoOpTIData("init"));
+ TRACE_smpi_comm_out(rank_traced);
+ TRACE_smpi_computing_init(rank_traced);
+ TRACE_smpi_sleeping_init(rank_traced);