X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ce5fe3d490dc5e72b7c9b85bd55da38743d4dfa3..5dd78326c18ad61561204c0d11470890cd12d091:/src/kernel/lmm/bmf.cpp diff --git a/src/kernel/lmm/bmf.cpp b/src/kernel/lmm/bmf.cpp index 816e5e4c40..d6950bf3b8 100644 --- a/src/kernel/lmm/bmf.cpp +++ b/src/kernel/lmm/bmf.cpp @@ -1,10 +1,10 @@ -/* Copyright (c) 2007-2022. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2007-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. */ #include "src/kernel/lmm/bmf.hpp" -#include "xbt/config.hpp" +#include "src/simgrid/math_utils.h" #include #include @@ -13,16 +13,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(ker_bmf, kernel, "Kernel BMF solver"); -simgrid::config::Flag - cfg_bmf_max_iteration("bmf/max-iterations", - "Maximum number of steps to be performed while searching for a BMF allocation", 1000); - -simgrid::config::Flag cfg_bmf_precision{"bmf/precision", - "Numerical precision used when computing resource sharing", 1E-12}; - -namespace simgrid { -namespace kernel { -namespace lmm { +namespace simgrid::kernel::lmm { AllocationGenerator::AllocationGenerator(Eigen::MatrixXd A) : A_(std::move(A)), alloc_(A_.cols(), 0) { @@ -73,7 +64,6 @@ BmfSolver::BmfSolver(Eigen::MatrixXd A, Eigen::MatrixXd maxA, Eigen::VectorXd C, , C_shared_(std::move(shared)) , phi_(std::move(phi)) , gen_(A_) - , max_iteration_(cfg_bmf_max_iteration) { xbt_assert(max_iteration_ > 0, @@ -95,7 +85,7 @@ template std::string BmfSolver::debug_vector(const C& container) co { std::stringstream debug; std::copy(container.begin(), container.end(), - std::ostream_iterator::type::value_type>(debug, " ")); + std::ostream_iterator::value_type>(debug, " ")); return debug.str(); } @@ -320,7 +310,7 @@ bool BmfSolver::is_bmf(const Eigen::VectorXd& rho) const Eigen::VectorXd remaining = (A_ * rho) - C_; remaining = remaining.array() * shared.array(); // ignore non shared resources bmf = bmf && (not std::any_of(remaining.data(), remaining.data() + remaining.size(), - [](double v) { return double_positive(v, sg_maxmin_precision); })); + [](double v) { return double_positive(v, sg_precision_workamount); })); // 3) every player receives maximum share in at least 1 saturated resource // due to subflows, compare with the maximum consumption and not the A matrix @@ -332,15 +322,15 @@ bool BmfSolver::is_bmf(const Eigen::VectorXd& rho) const // matrix_ji: boolean indicating player p has the maximum share at resource j Eigen::MatrixXi player_max_share = - ((usage.array().colwise() - max_share.array()).abs() <= sg_maxmin_precision).cast(); + ((usage.array().colwise() - max_share.array()).abs() <= sg_precision_workamount).cast(); // but only saturated resources must be considered - Eigen::VectorXi saturated = (remaining.array().abs() <= sg_maxmin_precision).cast(); + Eigen::VectorXi saturated = (remaining.array().abs() <= sg_precision_workamount).cast(); XBT_DEBUG("Saturated_j resources:\n%s", debug_eigen(saturated).c_str()); player_max_share.array().colwise() *= saturated.array(); // just check if it has received at least it's bound for (int p = 0; p < rho.size(); p++) { - if (double_equals(rho[p], phi_[p], sg_maxmin_precision)) { + if (double_equals(rho[p], phi_[p], sg_precision_workamount)) { player_max_share(0, p) = 1; // it doesn't really matter, just to say that it's a bmf saturated[0] = 1; } @@ -514,6 +504,4 @@ template void BmfSystem::bmf_solve(const CnstList& cnst_list) } } -} // namespace lmm -} // namespace kernel -} // namespace simgrid +} // namespace simgrid::kernel::lmm