X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/766da6343971d93f860c3b336ab3813f2e0ba404..d4fb7b9d845c48b3274774833a3b848750a73766:/src/smpi/smpi_base.cpp diff --git a/src/smpi/smpi_base.cpp b/src/smpi/smpi_base.cpp index 9b09b82a21..0170851808 100644 --- a/src/smpi/smpi_base.cpp +++ b/src/smpi/smpi_base.cpp @@ -90,16 +90,9 @@ static simgrid::config::Flag smpi_iprobe_sleep( static simgrid::config::Flag smpi_test_sleep( "smpi/test", "Minimum time to inject inside a call to MPI_Test", 1e-4); -static int factor_cmp(const s_smpi_factor_multival_t& pa, const s_smpi_factor_multival_t& pb) -{ - return (pa.factor > pb.factor) ? 1 : - (pa.factor < pb.factor) ? -1 : 0; -} - static std::vector parse_factor(const char *smpi_coef_string) { std::vector smpi_factor; - s_smpi_factor_multival_t fact; /** Setup the tokenizer that parses the string **/ typedef boost::tokenizer> Tokenizer; @@ -119,7 +112,7 @@ static std::vector parse_factor(const char *smpi_coef_ token_iter != tokens.end(); token_iter++) { XBT_DEBUG("token : %s", token_iter->c_str()); Tokenizer factor_values(*token_iter, factor_separator); - + s_smpi_factor_multival_t fact; if (factor_values.begin() == factor_values.end()) { xbt_die("Malformed radical for smpi factor: '%s'", smpi_coef_string); } @@ -134,17 +127,21 @@ XBT_DEBUG("token : %s", token_iter->c_str()); } else { 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)); + 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 : %zu values, first: %f", fact.factor, smpi_factor.size(), fact.values[0]); + XBT_DEBUG("smpi_factor:\t%zu : %zu values, first: %f", fact.factor, smpi_factor.size(), fact.values[0]); } - std::sort(smpi_factor.begin(), smpi_factor.end(), &factor_cmp); + std::sort(smpi_factor.begin(), smpi_factor.end(), + [](const s_smpi_factor_multival_t &pa, + const s_smpi_factor_multival_t &pb) { + return (pa.factor < pb.factor); + }); for (auto& fact : smpi_factor) { - XBT_DEBUG("smpi_factor:\t%ld : %zu values, first: %f", fact.factor, smpi_factor.size() ,fact.values[0]); + XBT_DEBUG("smpi_factor:\t%zu : %zu values, first: %f", fact.factor, smpi_factor.size() ,fact.values[0]); } return smpi_factor; @@ -163,7 +160,7 @@ static double smpi_os(size_t size) for (auto& fact : smpi_os_values) { if (size <= fact.factor) { // Values already too large, use the previously // computed value of current! - XBT_DEBUG("os : %zu <= %ld return %.10f", size, fact.factor, current); + XBT_DEBUG("os : %zu <= %zu return %.10f", size, fact.factor, current); return current; }else{ // If the next section is too large, the current section must be used. @@ -187,7 +184,7 @@ static double smpi_ois(size_t size) // Note: parse_factor() (used before) already sorts the dynar we iterate over! for (auto& fact : smpi_ois_values) { if (size <= fact.factor) { // Values already too large, use the previously computed value of current! - XBT_DEBUG("ois : %zu <= %ld return %.10f", size, fact.factor, current); + XBT_DEBUG("ois : %zu <= %zu return %.10f", size, fact.factor, current); return current; }else{ // If the next section is too large, the current section must be used. @@ -206,14 +203,15 @@ static double smpi_or(size_t size) smpi_or_values = parse_factor(xbt_cfg_get_string("smpi/or")); } - double current=smpi_or_values.empty()?0.0:smpi_or_values[0].values[0]+smpi_or_values[0].values[1]*size; + double current=smpi_or_values.empty()?0.0:smpi_or_values.front().values[0]+smpi_or_values.front().values[1]*size; + // Iterate over all the sections that were specified and find the right value. (fact.factor represents the interval // sizes; we want to find the section that has fact.factor <= size and no other such fact.factor <= size) // Note: parse_factor() (used before) already sorts the dynar we iterate over! for (auto fact : smpi_or_values) { if (size <= fact.factor) { // Values already too large, use the previously // computed value of current! - XBT_DEBUG("or : %zu <= %ld return %.10f", size, fact.factor, current); + XBT_DEBUG("or : %zu <= %zu return %.10f", size, fact.factor, current); return current; } else { // If the next section is too large, the current section must be used.