X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1657559f7a990ddc091757a83d8e11201bdd5f64..5440e7c9c636ed0bec62e6d23b3ba93bf22bf3d0:/src/smpi/internals/smpi_replay.cpp diff --git a/src/smpi/internals/smpi_replay.cpp b/src/smpi/internals/smpi_replay.cpp index 0241c05beb..6e82151a96 100644 --- a/src/smpi/internals/smpi_replay.cpp +++ b/src/smpi/internals/smpi_replay.cpp @@ -12,6 +12,7 @@ #include "smpi_request.hpp" #include "xbt/replay.hpp" +#include #include #include @@ -591,7 +592,7 @@ static void action_gatherv(const char *const *action) { int comm_size = MPI_COMM_WORLD->size(); CHECK_ACTION_PARAMS(action, comm_size+1, 2) int send_size = parse_double(action[2]); - int disps[comm_size]; + std::vector disps(comm_size, 0); int recvcounts[comm_size]; int recv_sum=0; @@ -605,7 +606,6 @@ static void action_gatherv(const char *const *action) { for(int i=0;igetPid()); log_timed_action (action, clock); @@ -641,7 +642,7 @@ static void action_scatterv(const char* const* action) int comm_size = MPI_COMM_WORLD->size(); CHECK_ACTION_PARAMS(action, comm_size + 1, 2) int recv_size = parse_double(action[2 + comm_size]); - int disps[comm_size]; + std::vector disps(comm_size, 0); int sendcounts[comm_size]; int send_sum = 0; @@ -655,7 +656,6 @@ static void action_scatterv(const char* const* action) for (int i = 0; i < comm_size; i++) { sendcounts[i] = atoi(action[i + 2]); send_sum += sendcounts[i]; - disps[i] = 0; } int root = (action[3 + comm_size]) ? atoi(action[3 + comm_size]) : 0; @@ -670,7 +670,7 @@ static void action_scatterv(const char* const* action) "gatherV", root, -1, trace_sendcounts, recv_size, nullptr, encode_datatype(MPI_CURRENT_TYPE), encode_datatype(MPI_CURRENT_TYPE2))); - Colls::scatterv(send, sendcounts, disps, MPI_CURRENT_TYPE, recv, recv_size, MPI_CURRENT_TYPE2, root, MPI_COMM_WORLD); + Colls::scatterv(send, sendcounts, disps.data(), MPI_CURRENT_TYPE, recv, recv_size, MPI_CURRENT_TYPE2, root, MPI_COMM_WORLD); TRACE_smpi_comm_out(Actor::self()->getPid()); log_timed_action(action, clock); @@ -688,17 +688,14 @@ static void action_reducescatter(const char *const *action) { int comm_size = MPI_COMM_WORLD->size(); CHECK_ACTION_PARAMS(action, comm_size+1, 1) int comp_size = parse_double(action[2+comm_size]); - int recvcounts[comm_size]; int my_proc_id = Actor::self()->getPid(); - int size = 0; std::vector* trace_recvcounts = new std::vector; MPI_CURRENT_TYPE = (action[3 + comm_size]) ? decode_datatype(action[3 + comm_size]) : MPI_DEFAULT_TYPE; for(int i=0;ipush_back(recvcounts[i]); - size+=recvcounts[i]; + trace_recvcounts->push_back(atoi(action[i + 2])); } + int size{std::accumulate(trace_recvcounts->begin(), trace_recvcounts->end(), 0)}; TRACE_smpi_comm_in(my_proc_id, __FUNCTION__, new simgrid::instr::VarCollTIData("reduceScatter", -1, 0, nullptr, -1, trace_recvcounts, @@ -708,7 +705,7 @@ static void action_reducescatter(const char *const *action) { void *sendbuf = smpi_get_tmp_sendbuffer(size* MPI_CURRENT_TYPE->size()); void *recvbuf = smpi_get_tmp_recvbuffer(size* MPI_CURRENT_TYPE->size()); - Colls::reduce_scatter(sendbuf, recvbuf, recvcounts, MPI_CURRENT_TYPE, MPI_OP_NULL, MPI_COMM_WORLD); + Colls::reduce_scatter(sendbuf, recvbuf, trace_recvcounts->data(), MPI_CURRENT_TYPE, MPI_OP_NULL, MPI_COMM_WORLD); smpi_execute_flops(comp_size); TRACE_smpi_comm_out(my_proc_id); @@ -762,7 +759,7 @@ static void action_allgatherv(const char *const *action) { CHECK_ACTION_PARAMS(action, comm_size+1, 2) int sendcount=atoi(action[2]); int recvcounts[comm_size]; - int disps[comm_size]; + std::vector disps(comm_size, 0); int recv_sum=0; MPI_CURRENT_TYPE = @@ -775,7 +772,6 @@ static void action_allgatherv(const char *const *action) { for(int i=0;isize()); @@ -788,7 +784,7 @@ static void action_allgatherv(const char *const *action) { encode_datatype(MPI_CURRENT_TYPE), encode_datatype(MPI_CURRENT_TYPE2))); - Colls::allgatherv(sendbuf, sendcount, MPI_CURRENT_TYPE, recvbuf, recvcounts, disps, MPI_CURRENT_TYPE2, + Colls::allgatherv(sendbuf, sendcount, MPI_CURRENT_TYPE, recvbuf, recvcounts, disps.data(), MPI_CURRENT_TYPE2, MPI_COMM_WORLD); TRACE_smpi_comm_out(my_proc_id); @@ -814,8 +810,8 @@ static void action_allToAllv(const char *const *action) { std::vector* trace_sendcounts = new std::vector; int recvcounts[comm_size]; std::vector* trace_recvcounts = new std::vector; - int senddisps[comm_size]; - int recvdisps[comm_size]; + std::vector senddisps(comm_size, 0); + std::vector recvdisps(comm_size, 0); MPI_CURRENT_TYPE = (action[4 + 2 * comm_size] && action[5 + 2 * comm_size]) ? decode_datatype(action[4 + 2 * comm_size]) @@ -837,8 +833,6 @@ static void action_allToAllv(const char *const *action) { recvcounts[i] = atoi(action[i+4+comm_size]); trace_recvcounts->push_back(recvcounts[i]); recv_size += recvcounts[i]; - senddisps[i] = 0; - recvdisps[i] = 0; } TRACE_smpi_comm_in(my_proc_id, __FUNCTION__, @@ -846,7 +840,7 @@ static void action_allToAllv(const char *const *action) { trace_recvcounts, encode_datatype(MPI_CURRENT_TYPE), encode_datatype(MPI_CURRENT_TYPE2))); - Colls::alltoallv(sendbuf, sendcounts, senddisps, MPI_CURRENT_TYPE,recvbuf, recvcounts, recvdisps, + Colls::alltoallv(sendbuf, sendcounts, senddisps.data(), MPI_CURRENT_TYPE,recvbuf, recvcounts, recvdisps.data(), MPI_CURRENT_TYPE, MPI_COMM_WORLD); TRACE_smpi_comm_out(my_proc_id);