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);
"Concurrency limit overflow!");
}
-lmm_system_t lmm_system_new(int selective_update)
+lmm_system_t lmm_system_new(bool selective_update)
{
lmm_system_t l = nullptr;
s_lmm_variable_t var;
lmm_variable_mallocator_free_f,
lmm_variable_mallocator_reset_f);
+ l->solve_fun = &lmm_solve;
+
return l;
}
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);
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 */
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
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))
XBT_DEBUG("'%d'(%f) : %f", var->id_int, var->weight, var->value);
}
}
-
- xbt_strbuff_free(buf);
}
void lmm_solve(lmm_system_t sys)
* 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
*/
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!");
//Are we enabling this variable?
if (enabling_var){
var->staged_weight = weight;
- minslack=lmm_cnstrs_min_concurrency_slack(var);
- if(minslack<var->concurrency_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;
lmm_check_concurrency(sys);
XBT_OUT();
- return;
}
double lmm_get_variable_weight(lmm_variable_t var)