From c54bb11ab9d68e5a581528dfc4c425ff68a8c776 Mon Sep 17 00:00:00 2001 From: alegrand Date: Mon, 25 Jul 2005 19:40:09 +0000 Subject: [PATCH] Extending the maxmin solver to take into account shared resources (i.e. constraints that should be written max(x_i) < C instead of sum x_i < C) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@1570 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/include/surf/maxmin.h | 2 ++ src/surf/maxmin.c | 17 ++++++++++++++--- src/surf/maxmin_private.h | 1 + 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/include/surf/maxmin.h b/src/include/surf/maxmin.h index 82ee074b04..0a1832f6b9 100644 --- a/src/include/surf/maxmin.h +++ b/src/include/surf/maxmin.h @@ -19,6 +19,8 @@ void lmm_variable_disable(lmm_system_t sys, lmm_variable_t var); lmm_constraint_t lmm_constraint_new(lmm_system_t sys, void *id, double bound_value); +void lmm_constraint_shared(lmm_constraint_t cnst); + void lmm_constraint_free(lmm_system_t sys, lmm_constraint_t cnst); lmm_variable_t lmm_variable_new(lmm_system_t sys, void *id, diff --git a/src/surf/maxmin.c b/src/surf/maxmin.c index 4d57218b17..d26f1de265 100644 --- a/src/surf/maxmin.c +++ b/src/surf/maxmin.c @@ -101,11 +101,17 @@ lmm_constraint_t lmm_constraint_new(lmm_system_t sys, void *id, cnst->bound = bound_value; cnst->usage = 0; + cnst->shared = 1; insert_constraint(sys, cnst); return cnst; } +void lmm_constraint_shared(lmm_constraint_t cnst) +{ + cnst->shared = 0; +} + void lmm_constraint_free(lmm_system_t sys, lmm_constraint_t cnst) { remove_constraint(sys, cnst); @@ -301,7 +307,10 @@ void lmm_solve(lmm_system_t sys) xbt_swag_foreach(elem, elem_list) { if(elem->variable->weight <=0) break; if ((elem->value > 0)) { - cnst->usage += elem->value / elem->variable->weight; + if(cnst->shared) + cnst->usage += elem->value / elem->variable->weight; + else + cnst->usage = 1; make_elem_active(elem); } } @@ -337,8 +346,10 @@ void lmm_solve(lmm_system_t sys) for (i = 0; i < var->cnsts_number; i++) { elem = &var->cnsts[i]; cnst = elem->constraint; - cnst->remaining -= elem->value * var->value; - cnst->usage -= elem->value / var->weight; + if(cnst->shared) { + cnst->remaining -= elem->value * var->value; + cnst->usage -= elem->value / var->weight; + } make_elem_inactive(elem); } xbt_swag_remove(var, var_list); diff --git a/src/surf/maxmin_private.h b/src/surf/maxmin_private.h index 28e1fb87ab..6216bc9bc6 100644 --- a/src/surf/maxmin_private.h +++ b/src/surf/maxmin_private.h @@ -33,6 +33,7 @@ typedef struct lmm_constraint { s_xbt_swag_t active_element_set; /* a list of lmm_mat_element_t */ double bound; double remaining; + int shared; double usage; void *id; } s_lmm_constraint_t; -- 2.20.1