X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f35db13138682b1be530a509d1eeadeafff84ca7..3b4740f2c34e232bcf203b9407af5637acaecaec:/src/smpi/smpi_process.cpp diff --git a/src/smpi/smpi_process.cpp b/src/smpi/smpi_process.cpp index 83c2219162..27bc512448 100644 --- a/src/smpi/smpi_process.cpp +++ b/src/smpi/smpi_process.cpp @@ -1,13 +1,18 @@ +/* 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_ignore.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,25 +37,17 @@ 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]; - index_ = MPI_UNDEFINED; - argc_ = nullptr; - argv_ = nullptr; mailbox_ = simgrid::s4u::Mailbox::byName(get_mailbox_name(name, index)); mailbox_small_ = simgrid::s4u::Mailbox::byName(get_mailbox_name_small(name, index)); mailboxes_mutex_ = xbt_mutex_init(); timer_ = xbt_os_timer_new(); + state_ = SMPI_UNINITIALIZED; if (MC_is_active()) MC_ignore_heap(timer_, xbt_os_timer_size()); - comm_self_ = MPI_COMM_NULL; - comm_intra_ = MPI_COMM_NULL; - comm_world_ = nullptr; - state_ = SMPI_UNINITIALIZED; - sampling_ = 0; - finalization_barrier_ = nullptr; - return_value_ = 0; #if HAVE_PAPI if (xbt_cfg_get_string("smpi/papi-events")[0] != '\0') { @@ -70,17 +67,15 @@ Process::Process(int index) #endif } -void Process::set_data(int index, 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; - index_ = index; instance_id_ = instance_id; - replaying_ = false; + index_ = index; static_cast(SIMIX_process_self()->data)->data = this; @@ -94,21 +89,16 @@ void Process::set_data(int index, int *argc, char ***argv) argv_ = argv; // set the process attached to the mailbox mailbox_small_->setReceiver(simgrid::s4u::Actor::self()); - XBT_DEBUG("<%d> New process in the game: %p", index, SIMIX_process_self()); + process_ = SIMIX_process_self(); + 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; @@ -164,6 +154,10 @@ void *Process::get_user_data() return data_; } +smx_actor_t Process::process(){ + return process_; +} + /** * \brief Returns a structure that stores the location (filename + linenumber) @@ -258,10 +252,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_; } @@ -294,7 +284,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 */