X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0cbb7e871d6da9a949931ce6a736408af0675cc4..ebfaf0308c650a96e42eb454f2f81dc0b7346511:/src/smpi/smpi_base.cpp diff --git a/src/smpi/smpi_base.cpp b/src/smpi/smpi_base.cpp index a3e6348985..54ef209a49 100644 --- a/src/smpi/smpi_base.cpp +++ b/src/smpi/smpi_base.cpp @@ -73,7 +73,7 @@ static int match_send(void* a, void* b,smx_synchro_t ignored) { // These are taken from surf/network.c and generalized to have more values for each factor typedef struct s_smpi_factor_multival *smpi_os_factor_multival_t; typedef struct s_smpi_factor_multival { // FIXME: this should be merged (deduplicated) with s_smpi_factor defined in network_smpi.c - long factor; + long factor=0; std::vector values; /** We allocate arbitrarily 4 elements **/ } s_smpi_factor_multival_t; @@ -128,22 +128,22 @@ static std::vector parse_factor(const char *smpi_coef_ char *errmsg; if (factor_iter == factor_values.begin()) { /* first element */ - errmsg = bprintf("Invalid factor in chunk #%lu: %%s", smpi_factor.size()+1); + errmsg = bprintf("Invalid factor in chunk #%zu: %%s", smpi_factor.size()+1); fact.factor = xbt_str_parse_int(factor_iter->c_str(), errmsg); } else { - errmsg = bprintf("Invalid factor value %d in chunk #%lu: %%s", iteration, smpi_factor.size()+1); + errmsg = bprintf("Invalid factor value %d in chunk #%zu: %%s", iteration, smpi_factor.size()+1); fact.values.push_back(xbt_str_parse_double((*factor_iter).c_str(), errmsg)); } xbt_free(errmsg); } smpi_factor.push_back(fact); - XBT_DEBUG("smpi_factor:\t%ld : %lu values, first: %f", fact.factor, smpi_factor.size(), fact.values[0]); + XBT_DEBUG("smpi_factor:\t%ld : %zu values, first: %f", fact.factor, smpi_factor.size(), fact.values[0]); } std::sort(smpi_factor.begin(), smpi_factor.end(), &factor_cmp); for (auto& fact : smpi_factor) { - XBT_DEBUG("smpi_factor:\t%ld : %lu values, first: %f", fact.factor, smpi_factor.size() ,fact.values[0]); + XBT_DEBUG("smpi_factor:\t%ld : %zu values, first: %f", fact.factor, smpi_factor.size() ,fact.values[0]); } return smpi_factor; @@ -775,35 +775,32 @@ int smpi_mpi_testany(int count, MPI_Request requests[], int *index, MPI_Status * { xbt_dynar_t comms; int i; - int* map; int flag = 0; - int size = 0; *index = MPI_UNDEFINED; comms = xbt_dynar_new(sizeof(smx_synchro_t), nullptr); - map = xbt_new(int, count); + std::vector map; /** Maps all matching comms back to their location in requests **/ for(i = 0; i < count; i++) { if ((requests[i] != MPI_REQUEST_NULL) && requests[i]->action && !(requests[i]->flags & PREPARED)) { xbt_dynar_push(comms, &requests[i]->action); - map[size] = i; - size++; + map.push_back(i); } } - if(size > 0) { + if(!map.empty()) { //multiplier to the sleeptime, to increase speed of execution, each failed testany will increase it static int nsleeps = 1; if(smpi_test_sleep > 0) simcall_process_sleep(nsleeps*smpi_test_sleep); - i = simcall_comm_testany(comms); + i = simcall_comm_testany(comms); // The i-th element in comms matches! // not MPI_UNDEFINED, as this is a simix return code - if(i != -1) { - *index = map[i]; + if (i != -1) { + *index = map[i]; finish_wait(&requests[*index], status); if (requests[*index] != MPI_REQUEST_NULL && (requests[*index]->flags & NON_PERSISTENT)) requests[*index] = MPI_REQUEST_NULL; - flag = 1; - nsleeps=1; + flag = 1; + nsleeps = 1; }else{ nsleeps++; } @@ -812,7 +809,6 @@ int smpi_mpi_testany(int count, MPI_Request requests[], int *index, MPI_Status * flag=1; smpi_empty_status(status); } - xbt_free(map); xbt_dynar_free(&comms); return flag;