A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
The variable-constraint graph is already traversed, and there is no
[simgrid.git]
/
src
/
surf
/
maxmin.c
diff --git
a/src/surf/maxmin.c
b/src/surf/maxmin.c
index
b75e448
..
d26d581
100644
(file)
--- a/
src/surf/maxmin.c
+++ b/
src/surf/maxmin.c
@@
-23,12
+23,11
@@
static void lmm_variable_mallocator_free_f(void *var);
static void lmm_update_modified_set(lmm_system_t sys,
lmm_constraint_t cnst);
static void lmm_remove_all_modified_set(lmm_system_t sys);
static void lmm_update_modified_set(lmm_system_t sys,
lmm_constraint_t cnst);
static void lmm_remove_all_modified_set(lmm_system_t sys);
-int sg_maxmin_selective_update = 1;
static int Global_debug_id = 1;
static int Global_const_debug_id = 1;
extern xbt_swag_t keep_track;
static int Global_debug_id = 1;
static int Global_const_debug_id = 1;
extern xbt_swag_t keep_track;
-lmm_system_t lmm_system_new(
void
)
+lmm_system_t lmm_system_new(
int selective_update
)
{
lmm_system_t l = NULL;
s_lmm_variable_t var;
{
lmm_system_t l = NULL;
s_lmm_variable_t var;
@@
-37,7
+36,7
@@
lmm_system_t lmm_system_new(void)
l = xbt_new0(s_lmm_system_t, 1);
l->modified = 0;
l = xbt_new0(s_lmm_system_t, 1);
l->modified = 0;
- l->selective_update_active = s
g_maxmin_s
elective_update;
+ l->selective_update_active = selective_update;
XBT_DEBUG("Setting selective_update_active flag to %d\n",
l->selective_update_active);
XBT_DEBUG("Setting selective_update_active flag to %d\n",
l->selective_update_active);
@@
-87,20
+86,31
@@
void lmm_system_free(lmm_system_t sys)
XBT_INLINE void lmm_variable_disable(lmm_system_t sys, lmm_variable_t var)
{
int i;
XBT_INLINE void lmm_variable_disable(lmm_system_t sys, lmm_variable_t var)
{
int i;
+ int n;
+
lmm_element_t elem = NULL;
XBT_IN("(sys=%p, var=%p)", sys, var);
sys->modified = 1;
lmm_element_t elem = NULL;
XBT_IN("(sys=%p, var=%p)", sys, var);
sys->modified = 1;
+ n = 0;
for (i = 0; i < var->cnsts_number; i++) {
elem = &var->cnsts[i];
xbt_swag_remove(elem, &(elem->constraint->element_set));
xbt_swag_remove(elem, &(elem->constraint->active_element_set));
if (!xbt_swag_size(&(elem->constraint->element_set)))
make_constraint_inactive(sys, elem->constraint);
for (i = 0; i < var->cnsts_number; i++) {
elem = &var->cnsts[i];
xbt_swag_remove(elem, &(elem->constraint->element_set));
xbt_swag_remove(elem, &(elem->constraint->active_element_set));
if (!xbt_swag_size(&(elem->constraint->element_set)))
make_constraint_inactive(sys, elem->constraint);
- else
- lmm_update_modified_set(sys, elem->constraint);
+ else {
+ if (n < i)
+ var->cnsts[n].constraint = elem->constraint;
+ n++;
+ }
+ }
+ if (n) {
+ var->cnsts_number = n;
+ lmm_update_modified_set(sys, var->cnsts[0].constraint);
}
}
+
var->cnsts_number = 0;
XBT_OUT();
}
var->cnsts_number = 0;
XBT_OUT();
}
@@
-117,7
+127,7
@@
static XBT_INLINE void lmm_cnst_free(lmm_system_t sys,
{
/* xbt_assert(xbt_swag_size(&(cnst->element_set)), */
/* "This list should be empty!"); */
{
/* xbt_assert(xbt_swag_size(&(cnst->element_set)), */
/* "This list should be empty!"); */
-
remove_active_constraint
(sys, cnst);
+
make_constraint_inactive
(sys, cnst);
free(cnst);
}
free(cnst);
}
@@
-259,6
+269,8
@@
void lmm_expand(lmm_system_t sys, lmm_constraint_t cnst,
make_constraint_active(sys, cnst);
lmm_update_modified_set(sys, cnst);
make_constraint_active(sys, cnst);
lmm_update_modified_set(sys, cnst);
+ if (var->cnsts_number > 1)
+ lmm_update_modified_set(sys, var->cnsts[0].constraint);
}
void lmm_expand_add(lmm_system_t sys, lmm_constraint_t cnst,
}
void lmm_expand_add(lmm_system_t sys, lmm_constraint_t cnst,
@@
-624,9
+636,6
@@
void lmm_solve(lmm_system_t sys)
}
/* Find out which variables reach the maximum */
}
/* Find out which variables reach the maximum */
- cnst_list =
- sys->selective_update_active ? &(sys->modified_constraint_set) :
- &(sys->active_constraint_set);
min_usage = -1;
min_bound = -1;
xbt_swag_foreach(cnst, cnst_list) {
min_usage = -1;
min_bound = -1;
xbt_swag_foreach(cnst, cnst_list) {
@@
-677,14
+686,11
@@
void lmm_update(lmm_system_t sys, lmm_constraint_t cnst,
void lmm_update_variable_bound(lmm_system_t sys, lmm_variable_t var,
double bound)
{
void lmm_update_variable_bound(lmm_system_t sys, lmm_variable_t var,
double bound)
{
- int i;
-
sys->modified = 1;
var->bound = bound;
sys->modified = 1;
var->bound = bound;
- for (i = 0; i < var->cnsts_number; i++)
- lmm_update_modified_set(sys, var->cnsts[i].constraint);
-
+ if (var->cnsts_number)
+ lmm_update_modified_set(sys, var->cnsts[0].constraint);
}
}
@@
-712,12
+718,13
@@
void lmm_update_variable_weight(lmm_system_t sys, lmm_variable_t var,
xbt_swag_insert_at_head(elem, &(elem->constraint->element_set));
else
xbt_swag_insert_at_tail(elem, &(elem->constraint->element_set));
xbt_swag_insert_at_head(elem, &(elem->constraint->element_set));
else
xbt_swag_insert_at_tail(elem, &(elem->constraint->element_set));
-
- lmm_update_modified_set(sys, elem->constraint);
}
if (!weight)
var->value = 0.0;
}
if (!weight)
var->value = 0.0;
+ if (var->cnsts_number)
+ lmm_update_modified_set(sys, var->cnsts[0].constraint);
+
XBT_OUT();
}
XBT_OUT();
}
@@
-811,12
+818,5
@@
static void lmm_update_modified_set(lmm_system_t sys,
*/
static void lmm_remove_all_modified_set(lmm_system_t sys)
{
*/
static void lmm_remove_all_modified_set(lmm_system_t sys)
{
- lmm_element_t elem = NULL;
- lmm_element_t elem_next = NULL;
- xbt_swag_t elem_list = NULL;
-
- elem_list = &(sys->modified_constraint_set);
- xbt_swag_foreach_safe(elem, elem_next, elem_list) {
- xbt_swag_remove(elem, elem_list);
- }
+ xbt_swag_reset(&sys->modified_constraint_set);
}
}