X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/29e4e9ad0ffd06f3c3e9a17a4622aae3e31e5e8d..5ed37babb2fa9097abe82df299c0aa259ed84d5a:/src/smpi/internals/smpi_utils.cpp diff --git a/src/smpi/internals/smpi_utils.cpp b/src/smpi/internals/smpi_utils.cpp index 8ccf2db3d5..94060e92e6 100644 --- a/src/smpi/internals/smpi_utils.cpp +++ b/src/smpi/internals/smpi_utils.cpp @@ -1,5 +1,4 @@ -/* Copyright (c) 2016-2022. The SimGrid Team. - * All rights reserved. */ +/* Copyright (c) 2016-2023. 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. */ @@ -9,10 +8,11 @@ #include "private.hpp" #include "smpi_config.hpp" #include "src/surf/xml/platf.hpp" +#include "xbt/ex.h" #include "xbt/file.hpp" #include "xbt/log.h" -#include "xbt/ex.h" #include "xbt/parse_units.hpp" +#include "xbt/str.h" #include "xbt/sysdep.h" #include #include @@ -49,106 +49,6 @@ std::unordered_map allocs; std::unordered_map> collective_calls; -void FactorSet::parse(const std::string& values) -{ - factors_ = parse_factor(values); - initialized_ = true; -} - -FactorSet::FactorSet(const std::string& name, double default_value, - std::function const&, double)> const& lambda) - : name_(name), default_value_(default_value), lambda_(lambda) -{ -} - -double FactorSet::operator()() -{ - return default_value_; -} - -double FactorSet::operator()(double size) -{ - if (factors_.empty()) - return default_value_; - - for (long unsigned i = 0; i < factors_.size(); i++) { - auto const& fact = factors_[i]; - - if (size <= fact.factor) { // Too large already, use the previous value - - if (i == 0) { // Before the first boundary: use the default value - XBT_DEBUG("%s: %f <= %zu return default %f", name_.c_str(), size, fact.factor, default_value_); - return default_value_; - } - double val = lambda_(factors_[i - 1].values, size); - XBT_DEBUG("%s: %f <= %zu return %f", name_.c_str(), size, fact.factor, val); - return val; - } - } - double val = lambda_(factors_.back().values, size); - - XBT_DEBUG("%s: %f > %zu return %f", name_.c_str(), size, factors_.back().factor, val); - return val; -} - -std::vector parse_factor(const std::string& smpi_coef_string) -{ - std::vector smpi_factor; - - /** Setup the tokenizer that parses the string **/ - using Tokenizer = boost::tokenizer>; - boost::char_separator sep(";"); - boost::char_separator factor_separator(":"); - Tokenizer tokens(smpi_coef_string, sep); - - /** - * Iterate over patterns like A:B:C:D;E:F;G:H - * These will be broken down into: - * A --> B, C, D - * E --> F - * G --> H - */ - for (auto token_iter = tokens.begin(); token_iter != tokens.end(); ++token_iter) { - XBT_DEBUG("token: %s", token_iter->c_str()); - Tokenizer factor_values(*token_iter, factor_separator); - s_smpi_factor_t fact; - xbt_assert(factor_values.begin() != factor_values.end(), "Malformed radical for smpi factor: '%s'", - smpi_coef_string.c_str()); - unsigned int iteration = 0; - for (auto factor_iter = factor_values.begin(); factor_iter != factor_values.end(); ++factor_iter) { - iteration++; - - if (factor_iter == factor_values.begin()) { /* first element */ - try { - fact.factor = std::stoi(*factor_iter); - } catch (const std::invalid_argument&) { - throw std::invalid_argument(std::string("Invalid factor in chunk ") + std::to_string(smpi_factor.size() + 1) + - ": " + *factor_iter); - } - } else { - try { - fact.values.push_back(xbt_parse_get_time(surf_parsed_filename, surf_parse_lineno, *factor_iter, "")); - } catch (const std::invalid_argument&) { - throw std::invalid_argument(std::string("Invalid factor value ") + std::to_string(iteration) + " in chunk " + - std::to_string(smpi_factor.size() + 1) + ": " + *factor_iter); - } - } - } - - smpi_factor.push_back(fact); - 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(), [](const s_smpi_factor_t &pa, const s_smpi_factor_t &pb) { - return (pa.factor < pb.factor); - }); - for (auto const& fact : smpi_factor) { - XBT_DEBUG("smpi_factor:\t%zu: %zu values, first: %f", fact.factor, smpi_factor.size(), fact.values[0]); - } - smpi_factor.shrink_to_fit(); - - return smpi_factor; -} - void add_benched_time(double time){ total_benched_time += time; }