X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/eb80087d529671d8e3c92150c10322d31e5cee43..43368eb677c67eac96bffc546feba6497ad775ec:/src/surf/maxmin.cpp diff --git a/src/surf/maxmin.cpp b/src/surf/maxmin.cpp index 623a3b28f5..0ab8b4d257 100644 --- a/src/surf/maxmin.cpp +++ b/src/surf/maxmin.cpp @@ -22,9 +22,9 @@ typedef struct s_dyn_light { int size; } s_dyn_light_t, *dyn_light_t; -double sg_maxmin_precision = 0.00001; -double sg_surf_precision = 0.00001; -int sg_concurrency_limit= 100; +double sg_maxmin_precision = 0.00001; /* Change this with --cfg=maxmin/precision:VALUE */ +double sg_surf_precision = 0.00001; /* Change this with --cfg=surf/precision:VALUE */ +int sg_concurrency_limit = -1; /* Change this with --cfg=maxmin/concurrency-limit:VALUE */ static void *lmm_variable_mallocator_new_f(); static void lmm_variable_mallocator_free_f(void *var); @@ -198,7 +198,7 @@ lmm_constraint_t lmm_constraint_new(lmm_system_t sys, void *id, double bound_val cnst->bound = bound_value; cnst->concurrency_maximum=0; cnst->concurrency_current=0; - cnst->concurrency_limit=sg_concurrency_limit; + cnst->concurrency_limit = sg_concurrency_limit; cnst->usage = 0; cnst->sharing_policy = 1; /* FIXME: don't hardcode the value */ insert_constraint(sys, cnst); @@ -624,26 +624,27 @@ static inline void saturated_variable_set_update(s_lmm_constraint_light_t *cnst_ void lmm_print(lmm_system_t sys) { - void *_cnst, *_elem, *_var; + void* _cnst; + void* _elem; + void* _var; lmm_constraint_t cnst = nullptr; - lmm_element_t elem = nullptr; - lmm_variable_t var = nullptr; - xbt_swag_t cnst_list = nullptr; - xbt_swag_t var_list = nullptr; - xbt_swag_t elem_list = nullptr; - xbt_strbuff_t buf = xbt_strbuff_new(); + lmm_element_t elem = nullptr; + lmm_variable_t var = nullptr; + xbt_swag_t cnst_list = nullptr; + xbt_swag_t var_list = nullptr; + xbt_swag_t elem_list = nullptr; + std::string buf = std::string("MAX-MIN ( "); double sum = 0.0; /* Printing Objective */ var_list = &(sys->variable_set); - xbt_strbuff_append(buf, "MAX-MIN ( "); xbt_swag_foreach(_var, var_list) { var = (lmm_variable_t)_var; - xbt_strbuff_printf(buf, "'%d'(%f) ", var->id_int, var->weight); + buf = buf + "'" + std::to_string(var->id_int) + "'(" + std::to_string(var->weight) + ") "; } - xbt_strbuff_append(buf, ")"); - XBT_DEBUG("%20s", buf->data); - xbt_strbuff_clear(buf); + buf += ")"; + XBT_DEBUG("%20s", buf.c_str()); + buf.clear(); XBT_DEBUG("Constraints"); /* Printing Constraints */ @@ -653,12 +654,12 @@ void lmm_print(lmm_system_t sys) sum = 0.0; //Show the enabled variables elem_list = &(cnst->enabled_element_set); - xbt_strbuff_append(buf, "\t"); - xbt_strbuff_printf(buf, "%s(", (cnst->sharing_policy)?"":"max"); + buf += "\t"; + buf += ((cnst->sharing_policy) ? "(" : "max("); xbt_swag_foreach(_elem, elem_list) { elem = (lmm_element_t)_elem; - xbt_strbuff_printf(buf, "%f.'%d'(%f) %s ", elem->value, - elem->variable->id_int, elem->variable->value,(cnst->sharing_policy)?"+":","); + buf = buf + std::to_string(elem->value) + ".'" + std::to_string(elem->variable->id_int) + "'(" + + std::to_string(elem->variable->value) + ")" + ((cnst->sharing_policy) ? " + " : " , "); if(cnst->sharing_policy) sum += elem->value * elem->variable->value; else @@ -668,21 +669,21 @@ void lmm_print(lmm_system_t sys) elem_list = &(cnst->disabled_element_set); xbt_swag_foreach(_elem, elem_list) { elem = (lmm_element_t)_elem; - xbt_strbuff_printf(buf, "%f.'%d'(%f) %s ", elem->value, - elem->variable->id_int, elem->variable->value,(cnst->sharing_policy)?"+":","); + buf = buf + std::to_string(elem->value) + ".'" + std::to_string(elem->variable->id_int) + "'(" + + std::to_string(elem->variable->value) + ")" + ((cnst->sharing_policy) ? " + " : " , "); if(cnst->sharing_policy) sum += elem->value * elem->variable->value; else sum = MAX(sum,elem->value * elem->variable->value); } - xbt_strbuff_printf(buf, "0) <= %f ('%d')", cnst->bound, cnst->id_int); + buf = buf + "0) <= " + std::to_string(cnst->bound) + " ('" + std::to_string(cnst->id_int) + "')"; if (!cnst->sharing_policy) { - xbt_strbuff_printf(buf, " [MAX-Constraint]"); + buf += " [MAX-Constraint]"; } - XBT_DEBUG("%s", buf->data); - xbt_strbuff_clear(buf); + XBT_DEBUG("%s", buf.c_str()); + buf.clear(); xbt_assert(!double_positive(sum - cnst->bound, cnst->bound*sg_maxmin_precision), "Incorrect value (%f is not smaller than %f): %g", sum, cnst->bound, sum - cnst->bound); //if(double_positive(sum - cnst->bound, cnst->bound*sg_maxmin_precision)) @@ -701,8 +702,6 @@ void lmm_print(lmm_system_t sys) XBT_DEBUG("'%d'(%f) : %f", var->id_int, var->weight, var->value); } } - - xbt_strbuff_free(buf); } void lmm_solve(lmm_system_t sys) @@ -1053,23 +1052,20 @@ void lmm_disable_var(lmm_system_t sys, lmm_variable_t var){ * And then add it to enabled variables */ void lmm_on_disabled_var(lmm_system_t sys, lmm_constraint_t cnstr){ - lmm_element_t elem; - lmm_element_t nextelem; - int numelem; if(cnstr->concurrency_limit<0) return; - numelem=xbt_swag_size(&(cnstr->disabled_element_set)); + int numelem = xbt_swag_size(&(cnstr->disabled_element_set)); if(!numelem) return; - elem= (lmm_element_t) xbt_swag_getFirst(&(cnstr->disabled_element_set)); + lmm_element_t elem = (lmm_element_t)xbt_swag_getFirst(&(cnstr->disabled_element_set)); //Cannot use xbt_swag_foreach, because lmm_enable_var will modify disabled_element_set.. within the loop - while(numelem-- && elem ){ + while (numelem-- && elem) { - nextelem = (lmm_element_t) xbt_swag_getNext(elem, cnstr->disabled_element_set.offset); + lmm_element_t nextelem = (lmm_element_t)xbt_swag_getNext(elem, cnstr->disabled_element_set.offset); if (elem->variable->staged_weight>0 ){ //Found a staged variable @@ -1098,7 +1094,6 @@ void lmm_on_disabled_var(lmm_system_t sys, lmm_constraint_t cnstr){ */ void lmm_update_variable_weight(lmm_system_t sys, lmm_variable_t var, double weight) { - int minslack; xbt_assert(weight>=0,"Variable weight should not be negative!"); @@ -1115,8 +1110,8 @@ void lmm_update_variable_weight(lmm_system_t sys, lmm_variable_t var, double wei //Are we enabling this variable? if (enabling_var){ var->staged_weight = weight; - minslack=lmm_cnstrs_min_concurrency_slack(var); - if(minslackconcurrency_share){ + int minslack = lmm_cnstrs_min_concurrency_slack(var); + if (minslack < var->concurrency_share) { XBT_DEBUG("Staging var (instead of enabling) because min concurrency slack %i, with weight %f and concurrency" " share %i", minslack, weight, var->concurrency_share); return; @@ -1133,7 +1128,6 @@ void lmm_update_variable_weight(lmm_system_t sys, lmm_variable_t var, double wei lmm_check_concurrency(sys); XBT_OUT(); - return; } double lmm_get_variable_weight(lmm_variable_t var)