X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/863d7ae03c294566165effc8a6eff7fed7cb3e9f..c25fbf0c498f1b24a9254f71f955bcb5354b1daf:/src/kernel/lmm/maxmin.hpp diff --git a/src/kernel/lmm/maxmin.hpp b/src/kernel/lmm/maxmin.hpp index 1d364228f0..e5efd9d646 100644 --- a/src/kernel/lmm/maxmin.hpp +++ b/src/kernel/lmm/maxmin.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2004-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2004-2018. 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. */ @@ -85,7 +85,7 @@ namespace lmm { * * max( var1.weight * var1.value * elem5.value , var3.weight * var3.value * elem6.value ) <= cons3.bound * - * This is usefull for the sharing of resources for various models. + * This is useful for the sharing of resources for various models. * For instance, for the network model, each link is associated to a constraint and each communication to a variable. * * Implementation details @@ -145,21 +145,21 @@ XBT_PUBLIC(void) bottleneck_solve(lmm_system_t sys); /** Default functions associated to the chosen protocol. When using the lagrangian approach. */ XBT_PUBLIC(void) -lmm_set_default_protocol_function(double (*func_f)(const s_lmm_variable_t& var, double x), - double (*func_fp)(const s_lmm_variable_t& var, double x), - double (*func_fpi)(const s_lmm_variable_t& var, double x)); +set_default_protocol_function(double (*func_f)(const Variable& var, double x), + double (*func_fp)(const Variable& var, double x), + double (*func_fpi)(const Variable& var, double x)); -XBT_PUBLIC(double) func_reno_f(const s_lmm_variable_t& var, double x); -XBT_PUBLIC(double) func_reno_fp(const s_lmm_variable_t& var, double x); -XBT_PUBLIC(double) func_reno_fpi(const s_lmm_variable_t& var, double x); +XBT_PUBLIC(double) func_reno_f(const Variable& var, double x); +XBT_PUBLIC(double) func_reno_fp(const Variable& var, double x); +XBT_PUBLIC(double) func_reno_fpi(const Variable& var, double x); -XBT_PUBLIC(double) func_reno2_f(const s_lmm_variable_t& var, double x); -XBT_PUBLIC(double) func_reno2_fp(const s_lmm_variable_t& var, double x); -XBT_PUBLIC(double) func_reno2_fpi(const s_lmm_variable_t& var, double x); +XBT_PUBLIC(double) func_reno2_f(const Variable& var, double x); +XBT_PUBLIC(double) func_reno2_fp(const Variable& var, double x); +XBT_PUBLIC(double) func_reno2_fpi(const Variable& var, double x); -XBT_PUBLIC(double) func_vegas_f(const s_lmm_variable_t& var, double x); -XBT_PUBLIC(double) func_vegas_fp(const s_lmm_variable_t& var, double x); -XBT_PUBLIC(double) func_vegas_fpi(const s_lmm_variable_t& var, double x); +XBT_PUBLIC(double) func_vegas_f(const Variable& var, double x); +XBT_PUBLIC(double) func_vegas_fp(const Variable& var, double x); +XBT_PUBLIC(double) func_vegas_fpi(const Variable& var, double x); /** * @brief LMM element @@ -168,7 +168,7 @@ XBT_PUBLIC(double) func_vegas_fpi(const s_lmm_variable_t& var, double x); * Then, it is used to list all variables involved in constraint through constraint's xxx_element_set lists, or * vice-versa list all constraints for a given variable. */ -XBT_PUBLIC_CLASS s_lmm_element_t +XBT_PUBLIC_CLASS Element { public: int get_concurrency() const; @@ -192,7 +192,7 @@ public: double consumption_weight; }; -struct s_lmm_constraint_light_t { +struct ConstraintLight { double remaining_over_usage; lmm_constraint_t cnst; }; @@ -206,11 +206,11 @@ struct s_lmm_constraint_light_t { * \li Active elements which variable's weight is non-zero (i.e. it is enabled) AND its element value is non-zero. * LMM_solve iterates over active elements during resolution, dynamically making them active or unactive. */ -XBT_PUBLIC_CLASS s_lmm_constraint_t +XBT_PUBLIC_CLASS Constraint { public: - s_lmm_constraint_t() = default; - s_lmm_constraint_t(void* id_value, double bound_value); + Constraint() = delete; + Constraint(void* id_value, double bound_value); /** @brief Unshare a constraint. */ void unshare() { sharing_policy = 0; } @@ -230,7 +230,7 @@ public: /** * @brief Sets the concurrency limit for this constraint - * @param concurrency_limit The concurrency limit to use for this constraint + * @param limit The concurrency limit to use for this constraint */ void set_concurrency_limit(int limit) { @@ -297,17 +297,14 @@ public: boost::intrusive::list_member_hook<> active_constraint_set_hook; boost::intrusive::list_member_hook<> modified_constraint_set_hook; boost::intrusive::list_member_hook<> saturated_constraint_set_hook; - boost::intrusive::list, - &s_lmm_element_t::enabled_element_set_hook>> + boost::intrusive::list, + &Element::enabled_element_set_hook>> enabled_element_set; - boost::intrusive::list, - &s_lmm_element_t::disabled_element_set_hook>> + boost::intrusive::list, + &Element::disabled_element_set_hook>> disabled_element_set; - boost::intrusive::list, - &s_lmm_element_t::active_element_set_hook>> + boost::intrusive::list, + &Element::active_element_set_hook>> active_element_set; double remaining; double usage; @@ -317,7 +314,7 @@ public: int concurrency_maximum; /* The maximum number of (enabled and disabled) variables associated to the constraint at any * given time (essentially for tracing)*/ - int sharing_policy; /* see @e_surf_link_sharing_policy_t (0: FATPIPE, 1: SHARED, 2: FULLDUPLEX) */ + int sharing_policy; /* see @e_surf_link_sharing_policy_t (0: FATPIPE, 1: SHARED, 2: SPLITDUPLEX) */ int id_int; double lambda; double new_lambda; @@ -336,10 +333,10 @@ private: * When something prevents us from enabling a variable, we "stage" the weight that we would have like to set, so that as * soon as possible we enable the variable with desired weight */ -XBT_PUBLIC_CLASS s_lmm_variable_t +XBT_PUBLIC_CLASS Variable { public: - void initialize(simgrid::surf::Action * id_value, double sharing_weight_value, double bound_value, + void initialize(simgrid::surf::Action* id_value, double sharing_weight_value, double bound_value, int number_of_constraints, unsigned visited_value); /** @@ -356,7 +353,7 @@ public: /** * @brief Set the concurrent share of the variable - * @param concurrency_share The new concurrency share + * @param value The new concurrency share */ void set_concurrency_share(short int value) { concurrency_share = value; } @@ -404,7 +401,7 @@ public: boost::intrusive::list_member_hook<> variable_set_hook; boost::intrusive::list_member_hook<> saturated_variable_set_hook; - std::vector cnsts; + std::vector cnsts; // sharing_weight: variable's impact on the resource during the sharing // if == 0, the variable is not considered by LMM @@ -419,24 +416,24 @@ public: short int concurrency_share; /* The maximum number of elements that variable will add to a constraint */ simgrid::surf::Action* id; int id_int; - unsigned visited; /* used by lmm_update_modified_set */ + unsigned visited; /* used by System::update_modified_set() */ /* \begin{For Lagrange only} */ double mu; double new_mu; - double (*func_f)(const s_lmm_variable_t& var, double x); /* (f) */ - double (*func_fp)(const s_lmm_variable_t& var, double x); /* (f') */ - double (*func_fpi)(const s_lmm_variable_t& var, double x); /* (f')^{-1} */ + double (*func_f)(const Variable& var, double x); /* (f) */ + double (*func_fp)(const Variable& var, double x); /* (f') */ + double (*func_fpi)(const Variable& var, double x); /* (f')^{-1} */ /* \end{For Lagrange only} */ private: static int Global_debug_id; }; -inline void s_lmm_element_t::make_active() +inline void Element::make_active() { constraint->active_element_set.push_front(*this); } -inline void s_lmm_element_t::make_inactive() +inline void Element::make_inactive() { if (active_element_set_hook.is_linked()) simgrid::xbt::intrusive_erase(constraint->active_element_set, *this); @@ -445,16 +442,16 @@ inline void s_lmm_element_t::make_inactive() /** * @brief LMM system */ -XBT_PUBLIC_CLASS s_lmm_system_t +XBT_PUBLIC_CLASS System { public: /** * @brief Create a new Linear MaxMim system * @param selective_update whether we should do lazy updates */ - explicit s_lmm_system_t(bool selective_update); + explicit System(bool selective_update); /** @brief Free an existing Linear MaxMin system */ - ~s_lmm_system_t(); + ~System(); /** * @brief Create a new Linear MaxMin constraint @@ -470,7 +467,7 @@ public: * @param bound The maximum value of the variable (-1.0 if no maximum value) * @param number_of_constraints The maximum number of constraint to associate to the variable */ - lmm_variable_t variable_new(simgrid::surf::Action * id, double weight_value, double bound, int number_of_constraints); + lmm_variable_t variable_new(simgrid::surf::Action* id, double weight_value, double bound, int number_of_constraints); /** * @brief Free a variable @@ -593,21 +590,17 @@ private: template void solve(CnstList& cnst_list); public: bool modified; - boost::intrusive::list, - &s_lmm_variable_t::variable_set_hook>> + boost::intrusive::list, + &Variable::variable_set_hook>> variable_set; - boost::intrusive::list, - &s_lmm_constraint_t::active_constraint_set_hook>> + boost::intrusive::list, + &Constraint::active_constraint_set_hook>> active_constraint_set; - boost::intrusive::list, - &s_lmm_variable_t::saturated_variable_set_hook>> + boost::intrusive::list, + &Variable::saturated_variable_set_hook>> saturated_variable_set; - boost::intrusive::list, - &s_lmm_constraint_t::saturated_constraint_set_hook>> + boost::intrusive::list, + &Constraint::saturated_constraint_set_hook>> saturated_constraint_set; simgrid::surf::ActionLmmListPtr keep_track; @@ -616,22 +609,20 @@ public: private: bool selective_update_active; /* flag to update partially the system only selecting changed portions */ - unsigned visited_counter; /* used by lmm_update_modified_set and lmm_remove_modified_set to cleverly (un-)flag the - * constraints (more details in these functions) */ - boost::intrusive::list, - &s_lmm_constraint_t::constraint_set_hook>> + unsigned visited_counter; /* used by System::update_modified_set() and System::remove_all_modified_set() to + * cleverly (un-)flag the constraints (more details in these functions) */ + boost::intrusive::list, + &Constraint::constraint_set_hook>> constraint_set; - boost::intrusive::list, - &s_lmm_constraint_t::modified_constraint_set_hook>> + boost::intrusive::list, + &Constraint::modified_constraint_set_hook>> modified_constraint_set; xbt_mallocator_t variable_mallocator; }; -extern XBT_PRIVATE double (*func_f_def)(const s_lmm_variable_t&, double); -extern XBT_PRIVATE double (*func_fp_def)(const s_lmm_variable_t&, double); -extern XBT_PRIVATE double (*func_fpi_def)(const s_lmm_variable_t&, double); +extern XBT_PRIVATE double (*func_f_def)(const Variable&, double); +extern XBT_PRIVATE double (*func_fp_def)(const Variable&, double); +extern XBT_PRIVATE double (*func_fpi_def)(const Variable&, double); /** @} */ }