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
empty struct means trouble, add a dummy field for now
[simgrid.git]
/
src
/
surf
/
network.c
diff --git
a/src/surf/network.c
b/src/surf/network.c
index
d5b647e
..
04c5763
100644
(file)
--- a/
src/surf/network.c
+++ b/
src/surf/network.c
@@
-22,6
+22,7
@@
#include "surf/surfxml_parse_values.h"
#include "surf/surf_resource.h"
#include "surf/surf_resource_lmm.h"
#include "surf/surfxml_parse_values.h"
#include "surf/surf_resource.h"
#include "surf/surf_resource_lmm.h"
+#include "simgrid/sg_config.h"
#undef GENERIC_LMM_ACTION
#undef GENERIC_ACTION
#undef GENERIC_LMM_ACTION
#undef GENERIC_ACTION
@@
-77,6
+78,13
@@
static double constant_bandwidth_constraint(double rate, double bound,
/**********************/
/* SMPI callbacks */
/**********************/
/**********************/
/* SMPI callbacks */
/**********************/
+
+static int factor_cmp(const void *pa, const void *pb)
+{
+ return (((s_smpi_factor_t*)pa)->factor > ((s_smpi_factor_t*)pb)->factor);
+}
+
+
static xbt_dynar_t parse_factor(const char *smpi_coef_string)
{
char *value = NULL;
static xbt_dynar_t parse_factor(const char *smpi_coef_string)
{
char *value = NULL;
@@
-98,6
+106,12
@@
static xbt_dynar_t parse_factor(const char *smpi_coef_string)
xbt_dynar_free(&radical_elements2);
}
xbt_dynar_free(&radical_elements);
xbt_dynar_free(&radical_elements2);
}
xbt_dynar_free(&radical_elements);
+ iter=0;
+ xbt_dynar_sort(smpi_factor, &factor_cmp);
+ xbt_dynar_foreach(smpi_factor, iter, fact) {
+ XBT_DEBUG("ordered smpi_factor:\t%ld : %f", fact.factor, fact.value);
+
+ }
return smpi_factor;
}
return smpi_factor;
}
@@
-105,36
+119,42
@@
static double smpi_bandwidth_factor(double size)
{
if (!smpi_bw_factor)
smpi_bw_factor =
{
if (!smpi_bw_factor)
smpi_bw_factor =
- parse_factor(
xbt_cfg_get_string(_surf_cfg_set,
"smpi/bw_factor"));
+ parse_factor(
sg_cfg_get_string(
"smpi/bw_factor"));
unsigned int iter = 0;
s_smpi_factor_t fact;
unsigned int iter = 0;
s_smpi_factor_t fact;
+ double current=1.0;
xbt_dynar_foreach(smpi_bw_factor, iter, 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, current);
+ return current;
+ }else
+ current=fact.value;
}
}
+ XBT_DEBUG("%lf > %ld return %f", size, fact.factor, current);
- return
1.0
;
+ return
current
;
}
static double smpi_latency_factor(double size)
{
if (!smpi_lat_factor)
smpi_lat_factor =
}
static double smpi_latency_factor(double size)
{
if (!smpi_lat_factor)
smpi_lat_factor =
- parse_factor(
xbt_cfg_get_string(_surf_cfg_set,
"smpi/lat_factor"));
+ parse_factor(
sg_cfg_get_string(
"smpi/lat_factor"));
unsigned int iter = 0;
s_smpi_factor_t fact;
unsigned int iter = 0;
s_smpi_factor_t fact;
+ double current=1.0;
xbt_dynar_foreach(smpi_lat_factor, iter, 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, current);
+ return current;
+ }else
+ current=fact.value;
}
}
+ XBT_DEBUG("%lf > %ld return %f", size, fact.factor, current);
- return
1.0
;
+ return
current
;
}
/**--------- <copy/paste C code snippet in surf/network.c> -----------*/
}
/**--------- <copy/paste C code snippet in surf/network.c> -----------*/
@@
-645,10
+665,9
@@
static void net_finalize(void)
surf_model_exit(surf_network_model);
surf_network_model = NULL;
surf_model_exit(surf_network_model);
surf_network_model = NULL;
- if (smpi_bw_factor)
- xbt_dynar_free(&smpi_bw_factor);
- if (smpi_lat_factor)
- xbt_dynar_free(&smpi_lat_factor);
+ xbt_dict_free(&gap_lookup);
+ xbt_dynar_free(&smpi_bw_factor);
+ xbt_dynar_free(&smpi_lat_factor);
}
static void smpi_gap_append(double size, const link_CM02_t link,
}
static void smpi_gap_append(double size, const link_CM02_t link,
@@
-656,8
+675,8
@@
static void smpi_gap_append(double size, const link_CM02_t link,
{
const char *src = link->lmm_resource.generic_resource.name;
xbt_fifo_t fifo;
{
const char *src = link->lmm_resource.generic_resource.name;
xbt_fifo_t fifo;
- surf_action_network_CM02_t last_action;
- double bw;
+
//
surf_action_network_CM02_t last_action;
+
//
double bw;
if (sg_sender_gap > 0.0) {
if (!gap_lookup) {
if (sg_sender_gap > 0.0) {
if (!gap_lookup) {
@@
-667,16
+686,16
@@
static void smpi_gap_append(double size, const link_CM02_t link,
action->sender.gap = 0.0;
if (fifo && xbt_fifo_size(fifo) > 0) {
/* Compute gap from last send */
action->sender.gap = 0.0;
if (fifo && xbt_fifo_size(fifo) > 0) {
/* Compute gap from last send */
- last_action =
+
/*
last_action =
(surf_action_network_CM02_t)
(surf_action_network_CM02_t)
- xbt_fifo_get_item_content(xbt_fifo_get_last_item(fifo));
- bw = net_get_link_bandwidth(link);
- action->sender.gap =
- max(sg_sender_gap,last_action->sender.size / bw);
+ xbt_fifo_get_item_content(xbt_fifo_get_last_item(fifo));
*/
+
//
bw = net_get_link_bandwidth(link);
+ action->sender.gap =
sg_sender_gap;
+ /* max(sg_sender_gap,last_action->sender.size / bw);*/
action->latency += action->sender.gap;
}
/* Append action as last send */
action->latency += action->sender.gap;
}
/* Append action as last send */
- action->sender.link_name = link->lmm_resource.generic_resource.name;
+
/*
action->sender.link_name = link->lmm_resource.generic_resource.name;
fifo =
(xbt_fifo_t) xbt_dict_get_or_null(gap_lookup,
action->sender.link_name);
fifo =
(xbt_fifo_t) xbt_dict_get_or_null(gap_lookup,
action->sender.link_name);
@@
-684,7
+703,7
@@
static void smpi_gap_append(double size, const link_CM02_t link,
fifo = xbt_fifo_new();
xbt_dict_set(gap_lookup, action->sender.link_name, fifo, NULL);
}
fifo = xbt_fifo_new();
xbt_dict_set(gap_lookup, action->sender.link_name, fifo, NULL);
}
- action->sender.fifo_item = xbt_fifo_push(fifo, action);
+ action->sender.fifo_item = xbt_fifo_push(fifo, action);
*/
action->sender.size = size;
}
}
action->sender.size = size;
}
}
@@
-715,9
+734,9
@@
static void smpi_gap_remove(surf_action_lmm_t lmm_action)
static void set_update_mechanism(void)
{
static void set_update_mechanism(void)
{
- char *optim = xbt_cfg_get_string(_s
urf
_cfg_set, "network/optim");
+ char *optim = xbt_cfg_get_string(_s
g
_cfg_set, "network/optim");
int select =
int select =
- xbt_cfg_get_
int(_surf
_cfg_set, "network/maxmin_selective_update");
+ xbt_cfg_get_
boolean(_sg
_cfg_set, "network/maxmin_selective_update");
if (!strcmp(optim, "Full")) {
surf_network_model->model_private->update_mechanism = UM_FULL;
if (!strcmp(optim, "Full")) {
surf_network_model->model_private->update_mechanism = UM_FULL;
@@
-728,7
+747,7
@@
static void set_update_mechanism(void)
xbt_assert((select == 1)
||
(xbt_cfg_is_default_value
xbt_assert((select == 1)
||
(xbt_cfg_is_default_value
- (_s
urf
_cfg_set, "network/maxmin_selective_update")),
+ (_s
g
_cfg_set, "network/maxmin_selective_update")),
"Disabling selective update while using the lazy update mechanism is dumb!");
} else {
xbt_die("Unsupported optimization (%s) for this model", optim);
"Disabling selective update while using the lazy update mechanism is dumb!");
} else {
xbt_die("Unsupported optimization (%s) for this model", optim);
@@
-786,8
+805,6
@@
static void surf_network_model_init_internal(void)
net_get_link_latency;
surf_network_model->extension.network.link_shared = net_link_shared;
surf_network_model->extension.network.add_traces = net_add_traces;
net_get_link_latency;
surf_network_model->extension.network.link_shared = net_link_shared;
surf_network_model->extension.network.add_traces = net_add_traces;
- surf_network_model->extension.network.create_resource =
- net_create_resource;
if (!surf_network_model->model_private->maxmin_system)
surf_network_model->model_private->maxmin_system = lmm_system_new(surf_network_model->model_private->selective_update);
if (!surf_network_model->model_private->maxmin_system)
surf_network_model->model_private->maxmin_system = lmm_system_new(surf_network_model->model_private->selective_update);
@@
-836,8
+853,8
@@
void surf_network_model_init_SMPI(void)
xbt_dynar_push(model_list, &surf_network_model);
network_solve = lmm_solve;
xbt_dynar_push(model_list, &surf_network_model);
network_solve = lmm_solve;
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/sender_gap", 10e-6);
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/weight_S", 8775);
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/sender_gap", 10e-6);
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/weight_S", 8775);
}
/************************************************************************/
}
/************************************************************************/
@@
-864,11
+881,11
@@
void surf_network_model_init_LegrandVelho(void)
xbt_dynar_push(model_list, &surf_network_model);
network_solve = lmm_solve;
xbt_dynar_push(model_list, &surf_network_model);
network_solve = lmm_solve;
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/latency_factor",
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/latency_factor",
13.01);
13.01);
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/bandwidth_factor",
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/bandwidth_factor",
0.97);
0.97);
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/weight_S", 20537);
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/weight_S", 20537);
}
/***************************************************************************/
}
/***************************************************************************/
@@
-893,10
+910,10
@@
void surf_network_model_init_CM02(void)
xbt_dynar_push(model_list, &surf_network_model);
network_solve = lmm_solve;
xbt_dynar_push(model_list, &surf_network_model);
network_solve = lmm_solve;
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/latency_factor", 1.0);
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/bandwidth_factor",
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/latency_factor", 1.0);
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/bandwidth_factor",
1.0);
1.0);
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/weight_S", 0.0);
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/weight_S", 0.0);
}
/***************************************************************************/
}
/***************************************************************************/
@@
-922,10
+939,10
@@
void surf_network_model_init_Reno(void)
func_reno_fpi);
network_solve = lagrange_solve;
func_reno_fpi);
network_solve = lagrange_solve;
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/latency_factor", 10.4);
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/bandwidth_factor",
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/latency_factor", 10.4);
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/bandwidth_factor",
0.92);
0.92);
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/weight_S", 8775);
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/weight_S", 8775);
}
}
@@
-942,10
+959,10
@@
void surf_network_model_init_Reno2(void)
func_reno2_fpi);
network_solve = lagrange_solve;
func_reno2_fpi);
network_solve = lagrange_solve;
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/latency_factor", 10.4);
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/bandwidth_factor",
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/latency_factor", 10.4);
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/bandwidth_factor",
0.92);
0.92);
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/weight_S_parameter",
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/weight_S_parameter",
8775);
}
8775);
}
@@
-962,8
+979,8
@@
void surf_network_model_init_Vegas(void)
func_vegas_fpi);
network_solve = lagrange_solve;
func_vegas_fpi);
network_solve = lagrange_solve;
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/latency_factor", 10.4);
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/bandwidth_factor",
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/latency_factor", 10.4);
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/bandwidth_factor",
0.92);
0.92);
- xbt_cfg_setdefault_double(_s
urf
_cfg_set, "network/weight_S", 8775);
+ xbt_cfg_setdefault_double(_s
g
_cfg_set, "network/weight_S", 8775);
}
}