X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fae5a849bf071f9337fdd4e53c0eb3fd64f6b4af..e989d2b49098728ebd426a9eea5cb35aabd470e2:/src/smpi/internals/smpi_utils.cpp diff --git a/src/smpi/internals/smpi_utils.cpp b/src/smpi/internals/smpi_utils.cpp index b7f5a80b5c..09688d88f2 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. */ @@ -8,21 +7,19 @@ #include "private.hpp" #include "smpi_config.hpp" -#include "src/surf/xml/platf.hpp" +#include "src/kernel/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 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_utils, smpi, "Logging specific to SMPI (utils)"); -extern std::string surf_parsed_filename; -extern int surf_parse_lineno; - -namespace simgrid::smpi::utils { +namespace { double total_benched_time=0; unsigned long total_malloc_size=0; @@ -41,7 +38,7 @@ struct current_buffer_metadata_t { }; alloc_metadata_t max_malloc; -F2C* current_handle = nullptr; +simgrid::smpi::F2C* current_handle = nullptr; current_buffer_metadata_t current_buffer1; current_buffer_metadata_t current_buffer2; @@ -49,105 +46,9 @@ 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& lambda) - : name_(name), default_value_(default_value), lambda_(lambda) -{ -} - -double FactorSet::operator()() -{ - return lambda_(factors_.front()); -} - -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 +} // namespace - 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]); - XBT_DEBUG("%s: %f <= %zu return %f", name_.c_str(), size, fact.factor, val); - return val; - } - } - double val = lambda_(factors_.back()); - - 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; -} +namespace simgrid::smpi::utils { void add_benched_time(double time){ total_benched_time += time;