Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update copyright lines.
[simgrid.git] / src / smpi / internals / smpi_replay.cpp
index 6e01ff4..21951ba 100644 (file)
@@ -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</*sender*/ int, /* receiver */ int, /* tag */ int> req_key_t;
-typedef std::unordered_map<req_key_t, MPI_Request, hash_tuple::hash<std::tuple<int,int,int>>> req_storage_t;
+using req_key_t     = std::tuple</*sender*/ int, /* receiver */ int, /* tag */ int>;
+using req_storage_t = std::unordered_map<req_key_t, MPI_Request, hash_tuple::hash<std::tuple<int, int, int>>>;
 
 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<MPI_Request>& 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<MPI_Request>& 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<int>(comm_size, 0);
-  recvcounts = std::shared_ptr<std::vector<int>>(new std::vector<int>(comm_size));
+  recvcounts = std::make_shared<std::vector<int>>(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<int>(comm_size, 0);
-  sendcounts = std::shared_ptr<std::vector<int>>(new std::vector<int>(comm_size));
+  sendcounts = std::make_shared<std::vector<int>>(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<std::vector<int>>(new std::vector<int>(comm_size));
+  recvcounts = std::make_shared<std::vector<int>>(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<std::vector<int>>(new std::vector<int>(comm_size));
-  recvcounts = std::shared_ptr<std::vector<int>>(new std::vector<int>(comm_size));
+  sendcounts = std::make_shared<std::vector<int>>(comm_size);
+  recvcounts = std::make_shared<std::vector<int>>(comm_size);
   senddisps  = std::vector<int>(comm_size, 0);
   recvdisps  = std::vector<int>(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<MPI_Request> 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--;