X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bcc37ce5513084c64f8c4f5388d9a72f7f8ff113..a4c8f1898670317d0fa33bf1b1a904ea922b78cc:/src/smpi/internals/smpi_replay.cpp diff --git a/src/smpi/internals/smpi_replay.cpp b/src/smpi/internals/smpi_replay.cpp index cb06266c84..464ba2cfc3 100644 --- a/src/smpi/internals/smpi_replay.cpp +++ b/src/smpi/internals/smpi_replay.cpp @@ -73,7 +73,7 @@ void log_timed_action(simgrid::xbt::ReplayAction& action, double clock) } /* Helper function */ -static double parse_double(std::string string) +static double parse_double(const std::string& string) { return xbt_str_parse_double(string.c_str(), "%s is not a double"); } @@ -141,7 +141,7 @@ public: } }; -void WaitTestParser::parse(simgrid::xbt::ReplayAction& action, std::string) +void WaitTestParser::parse(simgrid::xbt::ReplayAction& action, const std::string&) { CHECK_ACTION_PARAMS(action, 3, 0) src = std::stoi(action[2]); @@ -149,7 +149,7 @@ void WaitTestParser::parse(simgrid::xbt::ReplayAction& action, std::string) tag = std::stoi(action[4]); } -void SendRecvParser::parse(simgrid::xbt::ReplayAction& action, std::string) +void SendRecvParser::parse(simgrid::xbt::ReplayAction& action, const std::string&) { CHECK_ACTION_PARAMS(action, 3, 1) partner = std::stoi(action[2]); @@ -159,13 +159,13 @@ void SendRecvParser::parse(simgrid::xbt::ReplayAction& action, std::string) datatype1 = simgrid::smpi::Datatype::decode(action[5]); } -void ComputeParser::parse(simgrid::xbt::ReplayAction& action, std::string) +void ComputeParser::parse(simgrid::xbt::ReplayAction& action, const std::string&) { CHECK_ACTION_PARAMS(action, 1, 0) flops = parse_double(action[2]); } -void BcastArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) +void BcastArgParser::parse(simgrid::xbt::ReplayAction& action, const std::string&) { CHECK_ACTION_PARAMS(action, 1, 2) size = parse_double(action[2]); @@ -174,7 +174,7 @@ void BcastArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) datatype1 = simgrid::smpi::Datatype::decode(action[4]); } -void ReduceArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) +void ReduceArgParser::parse(simgrid::xbt::ReplayAction& action, const std::string&) { CHECK_ACTION_PARAMS(action, 2, 2) comm_size = parse_double(action[2]); @@ -184,7 +184,7 @@ void ReduceArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) datatype1 = simgrid::smpi::Datatype::decode(action[5]); } -void AllReduceArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) +void AllReduceArgParser::parse(simgrid::xbt::ReplayAction& action, const std::string&) { CHECK_ACTION_PARAMS(action, 2, 1) comm_size = parse_double(action[2]); @@ -193,7 +193,7 @@ void AllReduceArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) datatype1 = simgrid::smpi::Datatype::decode(action[4]); } -void AllToAllArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) +void AllToAllArgParser::parse(simgrid::xbt::ReplayAction& action, const std::string&) { CHECK_ACTION_PARAMS(action, 2, 1) comm_size = MPI_COMM_WORLD->size(); @@ -206,7 +206,7 @@ void AllToAllArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) datatype2 = simgrid::smpi::Datatype::decode(action[5]); } -void GatherArgParser::parse(simgrid::xbt::ReplayAction& action, std::string name) +void GatherArgParser::parse(simgrid::xbt::ReplayAction& action, const std::string& name) { /* The structure of the gather action for the rank 0 (total 4 processes) is the following: 0 gather 68 68 0 0 0 @@ -236,7 +236,7 @@ void GatherArgParser::parse(simgrid::xbt::ReplayAction& action, std::string name } } -void GatherVArgParser::parse(simgrid::xbt::ReplayAction& action, std::string name) +void GatherVArgParser::parse(simgrid::xbt::ReplayAction& action, const std::string& name) { /* The structure of the gatherv action for the rank 0 (total 4 processes) is the following: 0 gather 68 68 10 10 10 0 0 0 @@ -291,7 +291,7 @@ void GatherVArgParser::parse(simgrid::xbt::ReplayAction& action, std::string nam recv_size_sum = std::accumulate(recvcounts->begin(), recvcounts->end(), 0); } -void ScatterArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) +void ScatterArgParser::parse(simgrid::xbt::ReplayAction& action, const std::string&) { /* The structure of the scatter action for the rank 0 (total 4 processes) is the following: 0 gather 68 68 0 0 0 @@ -313,7 +313,7 @@ void ScatterArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) datatype2 = simgrid::smpi::Datatype::decode(action[6]); } -void ScatterVArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) +void ScatterVArgParser::parse(simgrid::xbt::ReplayAction& action, const std::string&) { /* The structure of the scatterv action for the rank 0 (total 4 processes) is the following: 0 gather 68 10 10 10 68 0 0 0 @@ -341,7 +341,7 @@ void ScatterVArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) root = (action.size() > 3 + comm_size) ? std::stoi(action[3 + comm_size]) : 0; } -void ReduceScatterArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) +void ReduceScatterArgParser::parse(simgrid::xbt::ReplayAction& action, const std::string&) { /* The structure of the reducescatter action for the rank 0 (total 4 processes) is the following: 0 reducescatter 275427 275427 275427 204020 11346849 0 @@ -363,7 +363,7 @@ void ReduceScatterArgParser::parse(simgrid::xbt::ReplayAction& action, std::stri recv_size_sum = std::accumulate(recvcounts->begin(), recvcounts->end(), 0); } -void AllToAllVArgParser::parse(simgrid::xbt::ReplayAction& action, std::string) +void AllToAllVArgParser::parse(simgrid::xbt::ReplayAction& action, const std::string&) { /* The structure of the alltoallv action for the rank 0 (total 4 processes) is the following: 0 alltoallv 100 1 7 10 12 100 1 70 10 5 @@ -457,7 +457,9 @@ void RecvAction::kernel(simgrid::xbt::ReplayAction&) args.size = status.count; } + bool is_recv = false; // Help analyzers understanding that status is not used unintialized if (name == "recv") { + is_recv = true; Request::recv(nullptr, args.size, args.datatype1, args.partner, args.tag, MPI_COMM_WORLD, &status); } else if (name == "irecv") { MPI_Request request = Request::irecv(nullptr, args.size, args.datatype1, args.partner, args.tag, MPI_COMM_WORLD); @@ -467,7 +469,7 @@ void RecvAction::kernel(simgrid::xbt::ReplayAction&) } TRACE_smpi_comm_out(my_proc_id); - if (name == "recv" && not TRACE_smpi_view_internals()) { + if (is_recv && not TRACE_smpi_view_internals()) { int src_traced = MPI_COMM_WORLD->group()->actor(status.MPI_SOURCE)->get_pid(); TRACE_smpi_recv(src_traced, my_proc_id, args.tag); } @@ -491,7 +493,8 @@ void TestAction::kernel(simgrid::xbt::ReplayAction&) TRACE_smpi_comm_in(my_proc_id, __func__, new simgrid::instr::NoOpTIData("test")); MPI_Status status; - int flag = Request::test(&request, &status); + int flag = 0; + Request::test(&request, &status, &flag); XBT_DEBUG("MPI_Test result: %d", flag); /* push back request in vector to be caught by a subsequent wait. if the test did succeed, the request is now @@ -704,11 +707,12 @@ static std::unordered_map storage; /** @brief Only initialize the replay, don't do it for real */ void smpi_replay_init(const char* instance_id, int rank, double start_delay_flops) { - if (not smpi_process()->initializing()){ - simgrid::s4u::Actor::self()->set_property("instance_id", instance_id); - simgrid::s4u::Actor::self()->set_property("rank", std::to_string(rank)); - simgrid::smpi::ActorExt::init(); - } + xbt_assert(not smpi_process()->initializing()); + + simgrid::s4u::Actor::self()->set_property("instance_id", instance_id); + simgrid::s4u::Actor::self()->set_property("rank", std::to_string(rank)); + simgrid::smpi::ActorExt::init(); + smpi_process()->mark_as_initialized(); smpi_process()->set_replaying(true);