};
}
-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)
{
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;
}
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;
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]);
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]);
*/
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);
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;
}
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);
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--;