X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e64ba31b4d5eb5a498b22369c280832c85b80043..08e7455d67920bbd7a87f440d00f2c1e071314a0:/src/smpi/internals/smpi_replay.cpp diff --git a/src/smpi/internals/smpi_replay.cpp b/src/smpi/internals/smpi_replay.cpp index 6e01ff4263..21951bad72 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. */ @@ -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) { @@ -89,33 +89,30 @@ private: req_storage_t store; public: - RequestStorage() {} - int size() const { return store.size(); } + RequestStorage() = default; + int size() const { return store.size(); } - req_storage_t& get_store() - { - return store; - } + req_storage_t& get_store() { return store; } - void get_requests(std::vector& vec) const - { - for (auto const& pair : store) { - auto& req = pair.second; - auto my_proc_id = simgrid::s4u::this_actor::get_pid(); - if (req != MPI_REQUEST_NULL && (req->src() == my_proc_id || req->dst() == my_proc_id)) { - vec.push_back(pair.second); - pair.second->print_request("MM"); - } + void get_requests(std::vector& vec) const + { + for (auto const& pair : store) { + auto& req = pair.second; + auto my_proc_id = simgrid::s4u::this_actor::get_pid(); + if (req != MPI_REQUEST_NULL && (req->src() == my_proc_id || req->dst() == my_proc_id)) { + vec.push_back(pair.second); + pair.second->print_request("MM"); } } + } MPI_Request find(int src, int dst, int tag) { - req_storage_t::iterator it = store.find(req_key_t(src, dst, tag)); + auto it = store.find(req_key_t(src, dst, tag)); return (it == store.end()) ? MPI_REQUEST_NULL : it->second; } - void remove(MPI_Request req) + void remove(const Request* req) { if (req == MPI_REQUEST_NULL) return; @@ -261,7 +258,7 @@ void GatherVArgParser::parse(simgrid::xbt::ReplayAction& action, const std::stri CHECK_ACTION_PARAMS(action, comm_size + 1, 2) send_size = parse_double(action[2]); disps = std::vector(comm_size, 0); - recvcounts = std::shared_ptr>(new std::vector(comm_size)); + recvcounts = std::make_shared>(comm_size); if (name == "gatherv") { root = (action.size() > 3 + comm_size) ? std::stoi(action[3 + comm_size]) : 0; @@ -336,7 +333,7 @@ void ScatterVArgParser::parse(simgrid::xbt::ReplayAction& action, const std::str CHECK_ACTION_PARAMS(action, comm_size + 1, 2) recv_size = parse_double(action[2 + comm_size]); disps = std::vector(comm_size, 0); - sendcounts = std::shared_ptr>(new std::vector(comm_size)); + sendcounts = std::make_shared>(comm_size); if (action.size() > 5 + comm_size) datatype1 = simgrid::smpi::Datatype::decode(action[4 + comm_size]); @@ -362,7 +359,7 @@ void ReduceScatterArgParser::parse(simgrid::xbt::ReplayAction& action, const std comm_size = MPI_COMM_WORLD->size(); CHECK_ACTION_PARAMS(action, comm_size + 1, 1) comp_size = parse_double(action[2 + comm_size]); - recvcounts = std::shared_ptr>(new std::vector(comm_size)); + recvcounts = std::make_shared>(comm_size); if (action.size() > 3 + comm_size) datatype1 = simgrid::smpi::Datatype::decode(action[3 + comm_size]); @@ -384,8 +381,8 @@ void AllToAllVArgParser::parse(simgrid::xbt::ReplayAction& action, const std::st */ comm_size = MPI_COMM_WORLD->size(); CHECK_ACTION_PARAMS(action, 2 * comm_size + 2, 2) - sendcounts = std::shared_ptr>(new std::vector(comm_size)); - recvcounts = std::shared_ptr>(new std::vector(comm_size)); + sendcounts = std::make_shared>(comm_size); + recvcounts = std::make_shared>(comm_size); senddisps = std::vector(comm_size, 0); recvdisps = std::vector(comm_size, 0); @@ -413,7 +410,7 @@ void WaitAction::kernel(simgrid::xbt::ReplayAction& action) req_storage.remove(request); if (request == MPI_REQUEST_NULL) { - /* Assume that the trace is well formed, meaning the comm might have been caught by a MPI_test. Then just + /* Assume that the trace is well formed, meaning the comm might have been caught by an MPI_test. Then just * return.*/ return; } @@ -567,7 +564,7 @@ void WaitAllAction::kernel(simgrid::xbt::ReplayAction&) req_storage.get_requests(reqs); for (auto const& req : reqs) { if (req && (req->flags() & MPI_REQ_RECV)) { - sender_receiver.push_back({req->src(), req->dst()}); + sender_receiver.emplace_back(req->src(), req->dst()); } } Request::waitall(count_requests, &(reqs.data())[0], MPI_STATUSES_IGNORE); @@ -824,15 +821,14 @@ void smpi_replay_main(int rank, const char* trace_filename) 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) { - MPI_Request* 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--;