X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/51b60f41f037171a411e084cc07f276a800800f5..9cb4e32f30a65e3f382639d91cc400eaa118d0a3:/src/smpi/smpi_process.cpp diff --git a/src/smpi/smpi_process.cpp b/src/smpi/smpi_process.cpp index 918b6888e1..92cd1d3edd 100644 --- a/src/smpi/smpi_process.cpp +++ b/src/smpi/smpi_process.cpp @@ -32,7 +32,8 @@ static char *get_mailbox_name_small(char *str, int index) namespace simgrid{ namespace smpi{ -Process::Process(int index) +Process::Process(int index, msg_bar_t finalization_barrier) + : finalization_barrier_(finalization_barrier) { char name[MAILBOX_NAME_MAXLEN]; mailbox_ = simgrid::s4u::Mailbox::byName(get_mailbox_name(name, index)); @@ -40,7 +41,6 @@ Process::Process(int index) mailboxes_mutex_ = xbt_mutex_init(); timer_ = xbt_os_timer_new(); state_ = SMPI_UNINITIALIZED; - index_ = index; if (MC_is_active()) MC_ignore_heap(timer_, xbt_os_timer_size()); @@ -62,15 +62,15 @@ Process::Process(int index) #endif } -void Process::set_data(int* argc, char*** argv) +void Process::set_data(int index, int* argc, char*** argv) { - char* instance_id = (*argv)[1]; comm_world_ = smpi_deployment_comm_world(instance_id); msg_bar_t bar = smpi_deployment_finalization_barrier(instance_id); if (bar!=nullptr) // don't overwrite the default one finalization_barrier_ = bar; instance_id_ = instance_id; + index_ = index; static_cast(SIMIX_process_self()->data)->data = this; @@ -88,18 +88,12 @@ void Process::set_data(int* argc, char*** argv) XBT_DEBUG("<%d> New process in the game: %p", index_, SIMIX_process_self()); } -void Process::destroy() +/** @brief Prepares the current process for termination. */ +void Process::finalize() { - if(smpi_privatize_global_variables){ - smpi_switch_data_segment(index_); - } state_ = SMPI_FINALIZED; XBT_DEBUG("<%d> Process left the game", index_); -} -/** @brief Prepares the current process for termination. */ -void Process::finalize() -{ // This leads to an explosion of the search graph which cannot be reduced: if(MC_is_active() || MC_record_replay_is_active()) return; @@ -243,10 +237,6 @@ int Process::sampling() return sampling_; } -void Process::set_finalization_barrier(msg_bar_t bar){ - finalization_barrier_=bar; -} - msg_bar_t Process::finalization_barrier(){ return finalization_barrier_; } @@ -279,7 +269,7 @@ void Process::init(int *argc, char ***argv){ int rank = xbt_str_parse_int((*argv)[2], "Invalid rank: %s"); smpi_deployment_register_process(instance_id, rank, index); - if(smpi_privatize_global_variables){ + if(smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP){ /* Now using segment index of the process */ index = proc->segment_index; /* Done at the process's creation */ @@ -287,7 +277,7 @@ void Process::init(int *argc, char ***argv){ } Process* process = smpi_process_remote(index); - process->set_data(argc, argv); + process->set_data(index, argc, argv); } xbt_assert(smpi_process(), "smpi_process() returned nullptr. You probably gave a nullptr parameter to MPI_Init. "