X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/165f0d8397015d910184a9869d045037af0b2edc..0dda9bcd2d7df2c8141a8170a7cb8fe20746b4a9:/src/smpi/smpi_process.cpp diff --git a/src/smpi/smpi_process.cpp b/src/smpi/smpi_process.cpp index 143a9a5786..41dd614fb7 100644 --- a/src/smpi/smpi_process.cpp +++ b/src/smpi/smpi_process.cpp @@ -1,13 +1,17 @@ +/* Copyright (c) 2009-2017. The SimGrid Team. All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + #include "mc/mc.h" -#include "private.h" -#include "simgrid/s4u/Mailbox.hpp" -#include "src/kernel/activity/SynchroComm.hpp" -#include "src/mc/mc_record.h" #include "src/mc/mc_replay.h" #include "src/msg/msg_private.h" #include "src/simix/smx_private.h" -#include "surf/surf.h" -#include "xbt/replay.hpp" +#include "src/smpi/private.h" +#include "src/smpi/smpi_process.hpp" +#include "src/smpi/smpi_group.hpp" +#include "src/smpi/smpi_comm.hpp" + XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_process, smpi, "Logging specific to SMPI (kernel)"); @@ -32,7 +36,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 +45,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,17 +66,17 @@ 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; + static_cast(SIMIX_process_self()->data)->data = this; if (*argc > 3) { memmove(&(*argv)[0], &(*argv)[2], sizeof(char *) * (*argc - 2)); @@ -88,18 +92,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_PRIVATIZE_MMAP){ - 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,6 +143,16 @@ 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_; } @@ -187,12 +195,12 @@ xbt_mutex_t Process::mailboxes_mutex() } #if HAVE_PAPI -int Process::papi_event_set(void) +int Process::papi_event_set() { return papi_event_set_; } -papi_counter_t& smpi_process_papi_counters(void) +papi_counter_t& smpi_process_papi_counters() { return papi_counter_data_; } @@ -243,10 +251,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_; } @@ -287,7 +291,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. "