X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8a47028116925fea959f95bfe881618489658231..c5ad8ca1a68bbaa9152471c8d0eeb99d762f0d86:/src/surf/network.c diff --git a/src/surf/network.c b/src/surf/network.c index 5b704ea143..1c881426b3 100644 --- a/src/surf/network.c +++ b/src/surf/network.c @@ -109,40 +109,42 @@ static double constant_bandwidth_constraint(double rate, double bound, /**********************/ /* SMPI callbacks */ /**********************/ -static double smpi_bandwidth_factor(double size) +static xbt_dynar_t parse_factor(const char *smpi_coef_string) { char *value = NULL; - unsigned int iter; - smpi_factor_t fact; - - if(!smpi_bw_factor){ - xbt_dynar_t radical_elements,radical_elements2; - - char *smpi_coef_string = xbt_cfg_get_string(_surf_cfg_set,"smpi/bw_factor"); - smpi_bw_factor = xbt_dynar_new(sizeof(s_smpi_factor_t),free); - radical_elements = xbt_str_split(smpi_coef_string, ";"); - xbt_dynar_foreach(radical_elements, iter, value) { - - radical_elements2 = xbt_str_split(value, ":"); - if(xbt_dynar_length(radical_elements2) != 2) - xbt_die("Malformed radical for smpi/bw_factor!"); - fact = xbt_new(s_smpi_factor_t,1); - fact->factor = atol(xbt_dynar_get_as(radical_elements2,0,char*)); - fact->value = atof(xbt_dynar_get_as(radical_elements2,1,char*)); - xbt_dynar_push_as(smpi_bw_factor,smpi_factor_t,fact); - XBT_DEBUG("smpi_bandwidth_factor:\t%ld : %f",fact->factor,fact->value); - xbt_dynar_free(&radical_elements2); - } - xbt_dynar_free(&radical_elements); + unsigned int iter = 0; + s_smpi_factor_t fact; + xbt_dynar_t smpi_factor, radical_elements, radical_elements2 = NULL; + + smpi_factor = xbt_dynar_new(sizeof(s_smpi_factor_t), NULL); + radical_elements = xbt_str_split(smpi_coef_string, ";"); + xbt_dynar_foreach(radical_elements, iter, value) { + + radical_elements2 = xbt_str_split(value, ":"); + if(xbt_dynar_length(radical_elements2) != 2) + xbt_die("Malformed radical for smpi factor!"); + fact.factor = atol(xbt_dynar_get_as(radical_elements2,0,char*)); + fact.value = atof(xbt_dynar_get_as(radical_elements2,1,char*)); + xbt_dynar_push_as(smpi_factor,s_smpi_factor_t,fact); + XBT_DEBUG("smpi_factor:\t%ld : %f",fact.factor,fact.value); + xbt_dynar_free(&radical_elements2); } + xbt_dynar_free(&radical_elements); + return smpi_factor; +} + +static double smpi_bandwidth_factor(double size) +{ + if(!smpi_bw_factor) + smpi_bw_factor = parse_factor( xbt_cfg_get_string(_surf_cfg_set,"smpi/bw_factor") ); + unsigned int iter = 0; + s_smpi_factor_t fact; xbt_dynar_foreach(smpi_bw_factor, iter, fact) { - if(size >= fact->factor) - { - XBT_DEBUG("%lf >= %ld return %f",size,fact->factor,fact->value); - return fact->value; + if(size >= fact.factor){ + XBT_DEBUG("%lf >= %ld return %f",size,fact.factor,fact.value); + return fact.value; } - } return 1.0; @@ -150,36 +152,15 @@ static double smpi_bandwidth_factor(double size) static double smpi_latency_factor(double size) { - char *value = NULL; - unsigned int iter; - smpi_factor_t fact; - - if(!smpi_lat_factor){ - xbt_dynar_t radical_elements,radical_elements2; - - char *smpi_coef_string = xbt_cfg_get_string(_surf_cfg_set,"smpi/lat_factor"); - smpi_lat_factor = xbt_dynar_new(sizeof(s_smpi_factor_t),free); - radical_elements = xbt_str_split(smpi_coef_string, ";"); - xbt_dynar_foreach(radical_elements, iter, value) { - - radical_elements2 = xbt_str_split(value, ":"); - if(xbt_dynar_length(radical_elements2) != 2) - xbt_die("Malformed radical for smpi/lat_factor!"); - fact = xbt_new(s_smpi_factor_t,1); - fact->factor = atol(xbt_dynar_get_as(radical_elements2,0,char*)); - fact->value = atof(xbt_dynar_get_as(radical_elements2,1,char*)); - xbt_dynar_push_as(smpi_lat_factor,smpi_factor_t,fact); - XBT_DEBUG("smpi_latency_factor:\t%ld : %f",fact->factor,fact->value); - xbt_dynar_free(&radical_elements2); - } - xbt_dynar_free(&radical_elements); - } + if(!smpi_lat_factor) + smpi_lat_factor = parse_factor( xbt_cfg_get_string(_surf_cfg_set,"smpi/lat_factor") ); + unsigned int iter = 0; + s_smpi_factor_t fact; xbt_dynar_foreach(smpi_lat_factor, iter, fact) { - if(size >= fact->factor) - { - XBT_DEBUG("%lf >= %ld return %f",size,fact->factor,fact->value); - return fact->value; + if(size >= fact.factor){ + XBT_DEBUG("%lf >= %ld return %f",size,fact.factor,fact.value); + return fact.value; } } @@ -984,6 +965,11 @@ static void net_finalize(void) xbt_heap_free(net_action_heap); xbt_swag_free(net_modified_set); } + + if(smpi_bw_factor) + xbt_dynar_free(&smpi_bw_factor); + if(smpi_lat_factor) + xbt_dynar_free(&smpi_lat_factor); } static void smpi_gap_append(double size, const link_CM02_t link, surf_action_network_CM02_t action) { @@ -1178,9 +1164,9 @@ void surf_network_model_init_LegrandVelho(void) xbt_dynar_push(model_list, &surf_network_model); network_solve = lmm_solve; - xbt_cfg_setdefault_double(_surf_cfg_set, "network/latency_factor", 10.4); // 13.01 when callibration is done without phase effects - xbt_cfg_setdefault_double(_surf_cfg_set, "network/bandwidth_factor",0.92);// 0.97 when callibration is done without phase effects - xbt_cfg_setdefault_double(_surf_cfg_set, "network/weight_S", 8775); // 20537 when callibration is done without phase effects + xbt_cfg_setdefault_double(_surf_cfg_set, "network/latency_factor", 13.01); + xbt_cfg_setdefault_double(_surf_cfg_set, "network/bandwidth_factor",0.97); + xbt_cfg_setdefault_double(_surf_cfg_set, "network/weight_S", 20537); } /***************************************************************************/