X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6bd50a954d420712f910d3efe8f8c543c77aa14f..0c539f5e2d25206246bb12e6dc036b108ea778e5:/src/surf/maxmin.c diff --git a/src/surf/maxmin.c b/src/surf/maxmin.c index e7d3e181f3..014457ba6b 100644 --- a/src/surf/maxmin.c +++ b/src/surf/maxmin.c @@ -26,6 +26,8 @@ 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; + lmm_system_t lmm_system_new(void) { lmm_system_t l = NULL; @@ -55,7 +57,7 @@ lmm_system_t lmm_system_new(void) xbt_swag_init(&(l->saturated_constraint_set), xbt_swag_offset(cnst, saturated_constraint_set_hookup)); - l->variable_mallocator = xbt_mallocator_new(64, + l->variable_mallocator = xbt_mallocator_new(65536, lmm_variable_mallocator_new_f, lmm_variable_mallocator_free_f, lmm_variable_mallocator_reset_f); @@ -107,7 +109,6 @@ static void lmm_var_free(lmm_system_t sys, lmm_variable_t var) { lmm_variable_disable(sys, var); - free(var->cnsts); xbt_mallocator_release(sys->variable_mallocator, var); } @@ -161,18 +162,20 @@ XBT_INLINE void lmm_constraint_free(lmm_system_t sys, static void *lmm_variable_mallocator_new_f(void) { - return xbt_new(s_lmm_variable_t, 1); + lmm_variable_t var = xbt_new(s_lmm_variable_t, 1); + var->cnsts = NULL; /* will be created by realloc */ + return var; } static void lmm_variable_mallocator_free_f(void *var) { + xbt_free(((lmm_variable_t) var)->cnsts); xbt_free(var); } static void lmm_variable_mallocator_reset_f(void *var) { - /* memset to zero like calloc */ - memset(var, 0, sizeof(s_lmm_variable_t)); + /* lmm_variable_new() initializes everything */ } lmm_variable_t lmm_variable_new(lmm_system_t sys, void *id, @@ -188,10 +191,8 @@ lmm_variable_t lmm_variable_new(lmm_system_t sys, void *id, var = xbt_mallocator_get(sys->variable_mallocator); var->id = id; var->id_int = Global_debug_id++; - var->cnsts = xbt_new0(s_lmm_element_t, number_of_constraints); + var->cnsts = xbt_realloc(var->cnsts, number_of_constraints * sizeof(s_lmm_element_t)); for (i = 0; i < number_of_constraints; i++) { - /* Should be useless because of the - calloc but it seems to help valgrind... */ var->cnsts[i].element_set_hookup.next = NULL; var->cnsts[i].element_set_hookup.prev = NULL; var->cnsts[i].active_element_set_hookup.next = NULL; @@ -201,17 +202,22 @@ lmm_variable_t lmm_variable_new(lmm_system_t sys, void *id, var->cnsts[i].value = 0.0; } var->cnsts_size = number_of_constraints; - var->cnsts_number = 0; /* Should be useless because of the - calloc but it seems to help valgrind... */ + var->cnsts_number = 0; var->weight = weight; var->bound = bound; var->value = 0.0; - + var->mu = 0.0; + var->new_mu = 0.0; var->func_f = func_f_def; var->func_fp = func_fp_def; var->func_fpi = func_fpi_def; + var->variable_set_hookup.next = NULL; + var->variable_set_hookup.prev = NULL; + var->saturated_variable_set_hookup.next = NULL; + var->saturated_variable_set_hookup.prev = NULL; + if (weight) xbt_swag_insert_at_head(var, &(sys->variable_set)); else @@ -540,6 +546,9 @@ void lmm_solve(lmm_system_t sys) cnst->usage = elem->value / elem->variable->weight; make_elem_active(elem); + if(keep_track){ + xbt_swag_insert((elem->variable)->id, keep_track); + } } } DEBUG2("Constraint Usage '%d' : %f", cnst->id_int, cnst->usage);