X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1340b2bc2a098a7e87fa45ff31591d32c864dc7a..e9f7e02c87f625ae4367f048dfd59cac1c2f2949:/src/smpi/internals/smpi_replay.cpp diff --git a/src/smpi/internals/smpi_replay.cpp b/src/smpi/internals/smpi_replay.cpp index 1cc4d1f585..e65846bb9d 100644 --- a/src/smpi/internals/smpi_replay.cpp +++ b/src/smpi/internals/smpi_replay.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2009-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2009-2018. 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. */ @@ -31,11 +31,10 @@ static MPI_Datatype MPI_DEFAULT_TYPE; { \ if (action.size() < static_cast(mandatory + 2)) \ THROWF(arg_error, 0, "%s replay failed.\n" \ - "%lu items were given on the line. First two should be process_id and action. " \ + "%zu items were given on the line. First two should be process_id and action. " \ "This action needs after them %lu mandatory arguments, and accepts %lu optional ones. \n" \ "Please contact the Simgrid team if support is needed", \ - __FUNCTION__, action.size(), static_cast(mandatory), \ - static_cast(optional)); \ + __func__, action.size(), static_cast(mandatory), static_cast(optional)); \ } static void log_timed_action(simgrid::xbt::ReplayAction& action, double clock) @@ -230,13 +229,16 @@ public: } else { int datatype_index = 0, disp_index = 0; - if (action.size() > 3 + 2 * comm_size) { /* datatype + disp are specified */ + /* The 3 comes from "0 gather ", which must always be present. + * The + comm_size is the recvcounts array, which must also be present + */ + if (action.size() > 3 + comm_size + comm_size) { /* datatype + disp are specified */ datatype_index = 3 + comm_size; disp_index = datatype_index + 1; - } else if (action.size() > 3 + 2 * comm_size) { /* disps specified; datatype is not specified; use the default one */ + } else if (action.size() > 3 + comm_size + 2) { /* disps specified; datatype is not specified; use the default one */ datatype_index = -1; disp_index = 3 + comm_size; - } else if (action.size() > 3 + comm_size) { /* only datatype, no disp specified */ + } else if (action.size() > 3 + comm_size) { /* only datatype, no disp specified */ datatype_index = 3 + comm_size; } @@ -444,7 +446,7 @@ public: int dst = request->comm()->group()->rank(request->dst()); bool is_wait_for_receive = (request->flags() & RECV); // TODO: Here we take the rank while we normally take the process id (look for my_proc_id) - TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::NoOpTIData("wait")); + TRACE_smpi_comm_in(rank, __func__, new simgrid::instr::NoOpTIData("wait")); MPI_Status status; Request::wait(&request, &status); @@ -463,8 +465,8 @@ public: { int dst_traced = MPI_COMM_WORLD->group()->actor(args.partner)->getPid(); - TRACE_smpi_comm_in(my_proc_id, __FUNCTION__, new simgrid::instr::Pt2PtTIData(name, args.partner, args.size, - Datatype::encode(args.datatype1))); + TRACE_smpi_comm_in(my_proc_id, __func__, new simgrid::instr::Pt2PtTIData(name, args.partner, args.size, + Datatype::encode(args.datatype1))); if (not TRACE_smpi_view_internals()) TRACE_smpi_send(my_proc_id, my_proc_id, dst_traced, 0, args.size * args.datatype1->size()); @@ -489,8 +491,8 @@ public: { int src_traced = MPI_COMM_WORLD->group()->actor(args.partner)->getPid(); - TRACE_smpi_comm_in(my_proc_id, __FUNCTION__, new simgrid::instr::Pt2PtTIData(name, args.partner, args.size, - Datatype::encode(args.datatype1))); + TRACE_smpi_comm_in(my_proc_id, __func__, new simgrid::instr::Pt2PtTIData(name, args.partner, args.size, + Datatype::encode(args.datatype1))); MPI_Status status; // unknown size from the receiver point of view @@ -583,8 +585,7 @@ public: const unsigned int count_requests = get_reqq_self()->size(); if (count_requests > 0) { - TRACE_smpi_comm_in(my_proc_id, __FUNCTION__, - new simgrid::instr::Pt2PtTIData("waitAll", -1, count_requests, "")); + TRACE_smpi_comm_in(my_proc_id, __func__, new simgrid::instr::Pt2PtTIData("waitAll", -1, count_requests, "")); std::vector> sender_receiver; for (const auto& req : (*get_reqq_self())) { if (req && (req->flags() & RECV)) { @@ -607,7 +608,7 @@ public: BarrierAction() : ReplayAction("barrier") {} void kernel(simgrid::xbt::ReplayAction& action) override { - TRACE_smpi_comm_in(my_proc_id, __FUNCTION__, new simgrid::instr::NoOpTIData("barrier")); + TRACE_smpi_comm_in(my_proc_id, __func__, new simgrid::instr::NoOpTIData("barrier")); Colls::barrier(MPI_COMM_WORLD); TRACE_smpi_comm_out(my_proc_id); } @@ -785,10 +786,10 @@ public: AllToAllVAction() : ReplayAction("allToAllV") {} void kernel(simgrid::xbt::ReplayAction& action) override { - TRACE_smpi_comm_in(my_proc_id, __FUNCTION__, - new simgrid::instr::VarCollTIData("allToAllV", -1, args.send_size_sum, args.sendcounts, args.recv_size_sum, args.recvcounts, - Datatype::encode(args.datatype1), - Datatype::encode(args.datatype2))); + TRACE_smpi_comm_in(my_proc_id, __func__, + new simgrid::instr::VarCollTIData( + "allToAllV", -1, args.send_size_sum, args.sendcounts, args.recv_size_sum, args.recvcounts, + Datatype::encode(args.datatype1), Datatype::encode(args.datatype2))); Colls::alltoallv(send_buffer(args.send_buf_size * args.datatype1->size()), args.sendcounts->data(), args.senddisps.data(), args.datatype1, recv_buffer(args.recv_buf_size * args.datatype2->size()), args.recvcounts->data(), args.recvdisps.data(), args.datatype2, MPI_COMM_WORLD);