X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6a046487fbc7153826e8babb75ed1c9c37641c0b..5413861364085b5ed2c3c1fec4bcbf5b7eee530e:/src/smpi/internals/smpi_actor.cpp diff --git a/src/smpi/internals/smpi_actor.cpp b/src/smpi/internals/smpi_actor.cpp index 616c8a0c90..389adc4092 100644 --- a/src/smpi/internals/smpi_actor.cpp +++ b/src/smpi/internals/smpi_actor.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2009-2022. 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. */ @@ -10,7 +10,7 @@ #include "smpi_comm.hpp" #include "smpi_info.hpp" #include "src/mc/mc_replay.hpp" -#include "src/simix/smx_private.hpp" +#include "xbt/str.h" #if HAVE_PAPI #include "papi.h" @@ -100,6 +100,19 @@ void ActorExt::mark_as_initialized() state_ = SmpiProcessState::INITIALIZED; } +/** @brief Mark a process as finalizing (=MPI_Finalize called) */ +void ActorExt::mark_as_finalizing() +{ + if (state_ != SmpiProcessState::FINALIZED) + state_ = SmpiProcessState::FINALIZING; +} + +/** @brief Check if a process is finalizing */ +int ActorExt::finalizing() const +{ + return (state_ == SmpiProcessState::FINALIZING); +} + void ActorExt::set_replaying(bool value) { if (state_ != SmpiProcessState::FINALIZED) @@ -216,23 +229,14 @@ void ActorExt::init() xbt_assert(smpi_get_universe_size() != 0, "SimGrid was not initialized properly before entering MPI_Init. " "Aborting, please check compilation process and use smpirun."); - simgrid::s4u::Actor* self = simgrid::s4u::Actor::self(); - // cheinrich: I'm not sure what the impact of the smpi_switch_data_segment on this call is. I moved - // this up here so that I can set the privatized region before the switch. ActorExt* ext = smpi_process(); // if we are in MPI_Init and argc handling has already been done. if (ext->initialized()) return; - if (smpi_cfg_privatization() == SmpiPrivStrategies::MMAP) { - /* Now using the segment index of this process */ - ext->set_privatized_region(smpi_init_global_memory_segment_process()); - /* Done at the process's creation */ - smpi_switch_data_segment(self); - } - + const simgrid::s4u::Actor* self = simgrid::s4u::Actor::self(); ext->instance_id_ = self->get_property("instance_id"); - const int rank = xbt_str_parse_int(self->get_property("rank"), "Cannot parse rank"); + const int rank = static_cast(xbt_str_parse_int(self->get_property("rank"), "Cannot parse rank")); ext->state_ = SmpiProcessState::INITIALIZING; smpi_deployment_register_process(ext->instance_id_, rank, self);