X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/96639a9582d88a088f162bf6e8eea95d7b73cb18..c1faa7358aa680bd3d28867cabe55e3ee1332a7e:/src/smpi/internals/smpi_deployment.cpp diff --git a/src/smpi/internals/smpi_deployment.cpp b/src/smpi/internals/smpi_deployment.cpp index f1656e5cae..abc235f7a4 100644 --- a/src/smpi/internals/smpi_deployment.cpp +++ b/src/smpi/internals/smpi_deployment.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2004-2021. The SimGrid Team. +/* Copyright (c) 2004-2022. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -13,9 +13,7 @@ XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(smpi); -namespace simgrid { -namespace smpi { -namespace app { +namespace simgrid::smpi::app { static int universe_size = 0; @@ -26,16 +24,14 @@ public: auto* group = new simgrid::smpi::Group(size_); comm_world_ = new simgrid::smpi::Comm(group, nullptr, false, -1); universe_size += max_no_processes; - bar_ = new s4u::Barrier(size_); + bar_ = s4u::Barrier::create(size_); } - s4u::Barrier* bar_; + s4u::BarrierPtr bar_; unsigned int size_; unsigned int finalized_ranks_ = 0; MPI_Comm comm_world_; }; -} -} -} +} // namespace simgrid::smpi::app using simgrid::smpi::app::Instance; @@ -56,16 +52,13 @@ void SMPI_app_instance_register(const char *name, xbt_main_func_t code, int num_ if (code != nullptr) // When started with smpirun, we will not execute a function simgrid::s4u::Engine::get_instance()->register_function(name, code); - Instance instance(num_processes); - - smpi_instances.insert(std::pair(name, instance)); + smpi_instances.try_emplace(name, num_processes); } void smpi_deployment_register_process(const std::string& instance_id, int rank, const simgrid::s4u::Actor* actor) { const Instance& instance = smpi_instances.at(instance_id); instance.comm_world_->group()->set_mapping(actor->get_pid(), rank); - } void smpi_deployment_startup_barrier(const std::string& instance_id) @@ -81,7 +74,6 @@ void smpi_deployment_unregister_process(const std::string& instance_id) if (instance.finalized_ranks_ == instance.size_) { simgrid::smpi::Comm::destroy(instance.comm_world_); - delete instance.bar_; smpi_instances.erase(instance_id); } } @@ -97,9 +89,8 @@ MPI_Comm* smpi_deployment_comm_world(const std::string& instance_id) } void smpi_deployment_cleanup_instances(){ - for (auto const& item : smpi_instances) { - XBT_INFO("Stalling SMPI instance: %s. Do all your MPI ranks call MPI_Finalize()?", item.first.c_str()); - Instance instance = item.second; + for (auto const& [name, instance] : smpi_instances) { + XBT_INFO("Stalling SMPI instance: %s. Do all your MPI ranks call MPI_Finalize()?", name.c_str()); simgrid::smpi::Comm::destroy(instance.comm_world_); } smpi_instances.clear();