X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/65d226053e9899ca078e460632ce7aed82bdfb32..4de9f9b5f051c90c1b0679ae50e1ac0b974fc54b:/src/smpi/smpi_process.cpp diff --git a/src/smpi/smpi_process.cpp b/src/smpi/smpi_process.cpp index ec44789d38..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; @@ -145,16 +139,6 @@ bool Process::replaying(){ return false; } -void Process::set_user_data(void *data) -{ - data_ = data; -} - -void *Process::get_user_data() -{ - return data_; -} - smx_actor_t Process::process(){ return process_; } @@ -253,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_; } @@ -289,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 */ @@ -297,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. "