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
[trace] remove deprecated function from the compilation support when tracing is disable
[simgrid.git]
/
src
/
surf
/
maxmin.c
diff --git
a/src/surf/maxmin.c
b/src/surf/maxmin.c
index
34fb128
..
9f42545
100644
(file)
--- a/
src/surf/maxmin.c
+++ b/
src/surf/maxmin.c
@@
-25,7
+25,6
@@
static void lmm_update_modified_set(lmm_system_t sys,
static void lmm_remove_all_modified_set(lmm_system_t sys);
static int Global_debug_id = 1;
static int Global_const_debug_id = 1;
static void lmm_remove_all_modified_set(lmm_system_t sys);
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(int selective_update)
{
lmm_system_t lmm_system_new(int selective_update)
{
@@
-37,6
+36,7
@@
lmm_system_t lmm_system_new(int selective_update)
l->modified = 0;
l->selective_update_active = selective_update;
l->modified = 0;
l->selective_update_active = selective_update;
+ l->visited_counter = 1;
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);
@@
-211,7
+211,7
@@
lmm_variable_t lmm_variable_new(lmm_system_t sys, void *id,
var->weight = weight;
var->bound = bound;
var->value = 0.0;
var->weight = weight;
var->bound = bound;
var->value = 0.0;
-
+ var->visited = sys->visited_counter - 1;
var->mu = 0.0;
var->new_mu = 0.0;
var->func_f = func_f_def;
var->mu = 0.0;
var->new_mu = 0.0;
var->func_f = func_f_def;
@@
-350,7
+350,7
@@
XBT_INLINE void *lmm_variable_id(lmm_variable_t var)
return var->id;
}
return var->id;
}
-static XBT_INLINE
void
saturated_constraint_set_update(lmm_system_t sys,
+static XBT_INLINE
int
saturated_constraint_set_update(lmm_system_t sys,
lmm_constraint_t
cnst,
double *min_usage)
lmm_constraint_t
cnst,
double *min_usage)
@@
-360,11
+360,11
@@
static XBT_INLINE void saturated_constraint_set_update(lmm_system_t sys,
XBT_IN("sys=%p, cnst=%p, min_usage=%f", sys, cnst, *min_usage);
if (cnst->usage <= 0) {
XBT_OUT();
XBT_IN("sys=%p, cnst=%p, min_usage=%f", sys, cnst, *min_usage);
if (cnst->usage <= 0) {
XBT_OUT();
- return;
+ return
1
;
}
if (cnst->remaining <= 0) {
XBT_OUT();
}
if (cnst->remaining <= 0) {
XBT_OUT();
- return;
+ return
1
;
}
if ((*min_usage < 0) || (*min_usage > cnst->remaining / cnst->usage)) {
*min_usage = cnst->remaining / cnst->usage;
}
if ((*min_usage < 0) || (*min_usage > cnst->remaining / cnst->usage)) {
*min_usage = cnst->remaining / cnst->usage;
@@
-380,6
+380,7
@@
static XBT_INLINE void saturated_constraint_set_update(lmm_system_t sys,
xbt_swag_insert(cnst, &(sys->saturated_constraint_set));
}
XBT_OUT();
xbt_swag_insert(cnst, &(sys->saturated_constraint_set));
}
XBT_OUT();
+ return 0;
}
static XBT_INLINE void saturated_variable_set_update(lmm_system_t sys)
}
static XBT_INLINE void saturated_variable_set_update(lmm_system_t sys)
@@
-500,6
+501,7
@@
void lmm_solve(lmm_system_t sys)
{
lmm_variable_t var = NULL;
lmm_constraint_t cnst = NULL;
{
lmm_variable_t var = NULL;
lmm_constraint_t cnst = NULL;
+ lmm_constraint_t cnst_next = NULL;
lmm_element_t elem = NULL;
xbt_swag_t cnst_list = NULL;
xbt_swag_t var_list = NULL;
lmm_element_t elem = NULL;
xbt_swag_t cnst_list = NULL;
xbt_swag_t var_list = NULL;
@@
-533,7
+535,7
@@
void lmm_solve(lmm_system_t sys)
}
}
}
}
- xbt_swag_foreach
(cns
t, cnst_list) {
+ xbt_swag_foreach
_safe(cnst, cnst_nex
t, cnst_list) {
/* INIT */
cnst->remaining = cnst->bound;
if (cnst->remaining == 0)
/* INIT */
cnst->remaining = cnst->bound;
if (cnst->remaining == 0)
@@
-551,13
+553,16
@@
void lmm_solve(lmm_system_t sys)
cnst->usage = elem->value / elem->variable->weight;
make_elem_active(elem);
cnst->usage = elem->value / elem->variable->weight;
make_elem_active(elem);
- if(keep_track){
- xbt_swag_insert((elem->variable)->id, keep_track);
- }
+ if (sys->keep_track)
+ xbt_swag_insert(elem->variable->id, sys->keep_track);
}
}
XBT_DEBUG("Constraint Usage '%d' : %f", cnst->id_int, cnst->usage);
/* Saturated constraints update */
}
}
XBT_DEBUG("Constraint Usage '%d' : %f", cnst->id_int, cnst->usage);
/* Saturated constraints update */
+ if(cnst->usage>0) {
+ xbt_swag_remove(cnst, cnst_list);
+ xbt_swag_insert_at_head(cnst, cnst_list);
+ }
saturated_constraint_set_update(sys, cnst, &min_usage);
}
saturated_variable_set_update(sys);
saturated_constraint_set_update(sys, cnst, &min_usage);
}
saturated_variable_set_update(sys);
@@
-612,6
+617,10
@@
void lmm_solve(lmm_system_t sys)
if (cnst->shared) {
double_update(&(cnst->remaining), elem->value * var->value);
double_update(&(cnst->usage), elem->value / var->weight);
if (cnst->shared) {
double_update(&(cnst->remaining), elem->value * var->value);
double_update(&(cnst->usage), elem->value / var->weight);
+ if(cnst->usage<=0 || cnst->remaining<=0) {
+ xbt_swag_remove(cnst, cnst_list);
+ xbt_swag_insert_at_tail(cnst, cnst_list);
+ }
make_elem_inactive(elem);
} else { /* FIXME one day: We recompute usage.... :( */
cnst->usage = 0.0;
make_elem_inactive(elem);
} else { /* FIXME one day: We recompute usage.... :( */
cnst->usage = 0.0;
@@
-638,8
+647,9
@@
void lmm_solve(lmm_system_t sys)
/* Find out which variables reach the maximum */
min_usage = -1;
min_bound = -1;
/* Find out which variables reach the maximum */
min_usage = -1;
min_bound = -1;
+
xbt_swag_foreach(cnst, cnst_list) {
xbt_swag_foreach(cnst, cnst_list) {
-
saturated_constraint_set_update(sys, cnst, &min_usage)
;
+
if(saturated_constraint_set_update(sys, cnst, &min_usage)) break
;
}
saturated_variable_set_update(sys);
}
saturated_variable_set_update(sys);
@@
-718,13
+728,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));
+
+ if (i == 0)
+ 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();
}
@@
-788,7
+798,8
@@
static void lmm_update_modified_set_rec(lmm_system_t sys,
lmm_variable_t var = elem->variable;
s_lmm_element_t *cnsts = var->cnsts;
int i;
lmm_variable_t var = elem->variable;
s_lmm_element_t *cnsts = var->cnsts;
int i;
- for (i = 0; i < var->cnsts_number; i++) {
+ for (i = 0; var->visited != sys->visited_counter
+ && i < var->cnsts_number ; i++) {
if (cnsts[i].constraint != cnst
&& !xbt_swag_belongs(cnsts[i].constraint,
&sys->modified_constraint_set)) {
if (cnsts[i].constraint != cnst
&& !xbt_swag_belongs(cnsts[i].constraint,
&sys->modified_constraint_set)) {
@@
-796,6
+807,7
@@
static void lmm_update_modified_set_rec(lmm_system_t sys,
lmm_update_modified_set_rec(sys, cnsts[i].constraint);
}
}
lmm_update_modified_set_rec(sys, cnsts[i].constraint);
}
}
+ var->visited = sys->visited_counter;
}
}
}
}
@@
-816,5
+828,11
@@
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)
{
+ if (++sys->visited_counter == 1) {
+ /* the counter wrapped around, reset each variable->visited */
+ lmm_variable_t var;
+ xbt_swag_foreach(var, &sys->variable_set)
+ var->visited = 0;
+ }
xbt_swag_reset(&sys->modified_constraint_set);
}
xbt_swag_reset(&sys->modified_constraint_set);
}