X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/db5adf7439201fb67d1d697b86806d58ace9fe85..f807f3ecd43bd280674b57f277d3af275fbfbaa5:/src/smpi/internals/smpi_replay.cpp diff --git a/src/smpi/internals/smpi_replay.cpp b/src/smpi/internals/smpi_replay.cpp index 9bdb30ae2a..dfec134f00 100644 --- a/src/smpi/internals/smpi_replay.cpp +++ b/src/smpi/internals/smpi_replay.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009-2020. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2009-2021. 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. */ @@ -9,7 +9,7 @@ #include "smpi_group.hpp" #include "smpi_request.hpp" #include "xbt/replay.hpp" -#include +#include #include #include @@ -61,8 +61,8 @@ public: }; } -typedef std::tuple req_key_t; -typedef std::unordered_map>> req_storage_t; +using req_key_t = std::tuple; +using req_storage_t = std::unordered_map>>; void log_timed_action(const simgrid::xbt::ReplayAction& action, double clock) { @@ -128,10 +128,9 @@ public: /* Sometimes we need to re-insert MPI_REQUEST_NULL but we still need src,dst and tag */ void addNullRequest(int src, int dst, int tag) { - store.insert({req_key_t( - MPI_COMM_WORLD->group()->actor(src)->get_pid()-1, - MPI_COMM_WORLD->group()->actor(dst)->get_pid()-1, - tag), MPI_REQUEST_NULL}); + store.insert( + {req_key_t(MPI_COMM_WORLD->group()->actor_pid(src) - 1, MPI_COMM_WORLD->group()->actor_pid(dst) - 1, tag), + MPI_REQUEST_NULL}); } }; @@ -434,7 +433,7 @@ void WaitAction::kernel(simgrid::xbt::ReplayAction& action) void SendAction::kernel(simgrid::xbt::ReplayAction&) { const SendRecvParser& args = get_args(); - int dst_traced = MPI_COMM_WORLD->group()->actor(args.partner)->get_pid(); + int dst_traced = MPI_COMM_WORLD->group()->actor_pid(args.partner); TRACE_smpi_comm_in( get_pid(), __func__, @@ -482,7 +481,7 @@ void RecvAction::kernel(simgrid::xbt::ReplayAction&) TRACE_smpi_comm_out(get_pid()); if (is_recv && not TRACE_smpi_view_internals()) { - int src_traced = MPI_COMM_WORLD->group()->actor(status.MPI_SOURCE)->get_pid(); + int src_traced = MPI_COMM_WORLD->group()->actor_pid(status.MPI_SOURCE); TRACE_smpi_recv(src_traced, get_pid(), args.tag); } } @@ -588,7 +587,7 @@ void BcastAction::kernel(simgrid::xbt::ReplayAction&) { const BcastArgParser& args = get_args(); TRACE_smpi_comm_in(get_pid(), "action_bcast", - new simgrid::instr::CollTIData("bcast", MPI_COMM_WORLD->group()->actor(args.root)->get_pid(), -1.0, + new simgrid::instr::CollTIData("bcast", MPI_COMM_WORLD->group()->actor_pid(args.root), -1.0, args.size, -1, Datatype::encode(args.datatype1), "")); colls::bcast(send_buffer(args.size * args.datatype1->size()), args.size, args.datatype1, args.root, MPI_COMM_WORLD); @@ -600,7 +599,7 @@ void ReduceAction::kernel(simgrid::xbt::ReplayAction&) { const ReduceArgParser& args = get_args(); TRACE_smpi_comm_in(get_pid(), "action_reduce", - new simgrid::instr::CollTIData("reduce", MPI_COMM_WORLD->group()->actor(args.root)->get_pid(), + new simgrid::instr::CollTIData("reduce", MPI_COMM_WORLD->group()->actor_pid(args.root), args.comp_size, args.comm_size, -1, Datatype::encode(args.datatype1), "")); @@ -808,28 +807,27 @@ void smpi_replay_init(const char* instance_id, int rank, double start_delay_flop } /** @brief actually run the replay after initialization */ -void smpi_replay_main(int rank, const char* trace_filename) +void smpi_replay_main(int rank, const char* private_trace_filename) { static int active_processes = 0; active_processes++; storage[simgrid::s4u::this_actor::get_pid()] = simgrid::smpi::replay::RequestStorage(); std::string rank_string = std::to_string(rank); - simgrid::xbt::replay_runner(rank_string.c_str(), trace_filename); + simgrid::xbt::replay_runner(rank_string.c_str(), private_trace_filename); /* and now, finalize everything */ /* One active process will stop. Decrease the counter*/ unsigned int count_requests = storage[simgrid::s4u::this_actor::get_pid()].size(); XBT_DEBUG("There are %ud elements in reqq[*]", count_requests); if (count_requests > 0) { - auto* requests = new MPI_Request[count_requests]; + std::vector requests(count_requests); unsigned int i=0; for (auto const& pair : storage[simgrid::s4u::this_actor::get_pid()].get_store()) { requests[i] = pair.second; i++; } - simgrid::smpi::Request::waitall(count_requests, requests, MPI_STATUSES_IGNORE); - delete[] requests; + simgrid::smpi::Request::waitall(count_requests, requests.data(), MPI_STATUSES_IGNORE); } active_processes--; @@ -848,8 +846,8 @@ void smpi_replay_main(int rank, const char* trace_filename) } /** @brief chain a replay initialization and a replay start */ -void smpi_replay_run(const char* instance_id, int rank, double start_delay_flops, const char* trace_filename) +void smpi_replay_run(const char* instance_id, int rank, double start_delay_flops, const char* private_trace_filename) { smpi_replay_init(instance_id, rank, start_delay_flops); - smpi_replay_main(rank, trace_filename); + smpi_replay_main(rank, private_trace_filename); }