#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
xbt_dict_t gap_lookup = NULL;
-static void net_update_action_remaining_lazy(surf_action_network_CM02_t action, double now);
-
/******************************************************************************/
/* Factors 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;
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;
}
{
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;
+ double current=1.0;
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 =
- 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;
+ double current=1.0;
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> -----------*/
static void (*gap_append) (double, const link_CM02_t,
surf_action_network_CM02_t) = NULL;
-static void (*gap_remove) (surf_action_network_CM02_t) = NULL;
static void *net_create_resource(const char *name,
double bw_initial,
static void net_update_actions_state_full(double now, double delta)
{
- double deltap = 0.0;
- surf_action_network_CM02_t action = NULL;
- surf_action_network_CM02_t next_action = NULL;
- xbt_swag_t running_actions =
- surf_network_model->states.running_action_set;
- /*
- xbt_swag_t failed_actions =
- surf_network_model->states.failed_action_set;
- */
-
- xbt_swag_foreach_safe(action, next_action, running_actions) {
- deltap = delta;
- if (action->latency > 0) {
- if (action->latency > deltap) {
- double_update(&(action->latency), deltap);
- deltap = 0.0;
- } else {
- double_update(&(deltap), action->latency);
- action->latency = 0.0;
- }
- if ((action->latency == 0.0) && !(GENERIC_LMM_ACTION(action).suspended))
- lmm_update_variable_weight(surf_network_model->model_private->maxmin_system, GENERIC_LMM_ACTION(action).variable,
- action->weight);
- }
-#ifdef HAVE_TRACING
- if (TRACE_is_enabled()) {
- int n = lmm_get_number_of_cnst_from_var(surf_network_model->model_private->maxmin_system, GENERIC_LMM_ACTION(action).variable);
- unsigned int i;
- for (i = 0; i < n; i++){
- lmm_constraint_t constraint = lmm_get_cnst_from_var(surf_network_model->model_private->maxmin_system,
- GENERIC_LMM_ACTION(action).variable,
- i);
- link_CM02_t link = lmm_constraint_id(constraint);
- TRACE_surf_link_set_utilization(link->lmm_resource.generic_resource.name,
- ((surf_action_t)action)->category,
- (lmm_variable_getvalue(GENERIC_LMM_ACTION(action).variable)*
- lmm_get_cnst_weight_from_var(surf_network_model->model_private->maxmin_system,
- GENERIC_LMM_ACTION(action).variable,
- i)),
- now - delta,
- delta);
- }
- }
-#endif
- if (!lmm_get_number_of_cnst_from_var
- (surf_network_model->model_private->maxmin_system, GENERIC_LMM_ACTION(action).variable)) {
- /* There is actually no link used, hence an infinite bandwidth.
- * This happens often when using models like vivaldi.
- * In such case, just make sure that the action completes immediately.
- */
- double_update(&(GENERIC_ACTION(action).remains),
- GENERIC_ACTION(action).remains);
- }
- double_update(&(GENERIC_ACTION(action).remains),
- lmm_variable_getvalue(GENERIC_LMM_ACTION(action).variable) * deltap);
- if (((surf_action_t)action)->max_duration != NO_MAX_DURATION)
- double_update(&(((surf_action_t)action)->max_duration), delta);
-
- if ((GENERIC_ACTION(action).remains <= 0) &&
- (lmm_get_variable_weight(GENERIC_LMM_ACTION(action).variable) > 0)) {
- ((surf_action_t)action)->finish = surf_get_clock();
- surf_network_model->action_state_set((surf_action_t) action,
- SURF_ACTION_DONE);
-
- if (gap_remove)
- gap_remove(action);
- } else if ((((surf_action_t)action)->max_duration != NO_MAX_DURATION)
- && (((surf_action_t)action)->max_duration <= 0)) {
- ((surf_action_t)action)->finish = surf_get_clock();
- surf_network_model->action_state_set((surf_action_t) action,
- SURF_ACTION_DONE);
- if (gap_remove)
- gap_remove(action);
- }
- }
-
- return;
+ generic_update_actions_state_full(now, delta, surf_network_model);
}
static void net_update_actions_state_lazy(double now, double delta)
{
- surf_action_network_CM02_t action = NULL;
-
- while ((xbt_heap_size(surf_network_model->model_private->action_heap) > 0)
- && (double_equals(xbt_heap_maxkey(surf_network_model->model_private->action_heap), now))) {
- action = xbt_heap_pop(surf_network_model->model_private->action_heap);
- XBT_DEBUG("Action %p: finish", action);
- GENERIC_ACTION(action).finish = surf_get_clock();
-#ifdef HAVE_TRACING
- if (TRACE_is_enabled()) {
- int n = lmm_get_number_of_cnst_from_var(surf_network_model->model_private->maxmin_system, GENERIC_LMM_ACTION(action).variable);
- unsigned int i;
- for (i = 0; i < n; i++){
- lmm_constraint_t constraint = lmm_get_cnst_from_var(surf_network_model->model_private->maxmin_system,
- GENERIC_LMM_ACTION(action).variable,
- i);
- link_CM02_t link = lmm_constraint_id(constraint);
- TRACE_surf_link_set_utilization(link->lmm_resource.generic_resource.name,
- ((surf_action_t)action)->category,
- (lmm_variable_getvalue(GENERIC_LMM_ACTION(action).variable)*
- lmm_get_cnst_weight_from_var(surf_network_model->model_private->maxmin_system,
- GENERIC_LMM_ACTION(action).variable,
- i)),
- GENERIC_LMM_ACTION(action).last_update,
- now - GENERIC_LMM_ACTION(action).last_update);
- }
- }
-#endif
-
- // if I am wearing a latency hat
- if (GENERIC_LMM_ACTION(action).hat == LATENCY) {
- lmm_update_variable_weight(surf_network_model->model_private->maxmin_system, GENERIC_LMM_ACTION(action).variable,
- action->weight);
- surf_action_lmm_heap_remove(surf_network_model->model_private->action_heap,(surf_action_lmm_t)action);
- GENERIC_LMM_ACTION(action).last_update = surf_get_clock();
-
- // if I am wearing a max_duration or normal hat
- } else if (GENERIC_LMM_ACTION(action).hat == MAX_DURATION ||
- GENERIC_LMM_ACTION(action).hat == NORMAL) {
- // no need to communicate anymore
- // assume that flows that reached max_duration have remaining of 0
- GENERIC_ACTION(action).remains = 0;
- ((surf_action_t)action)->finish = surf_get_clock();
- surf_network_model->action_state_set((surf_action_t) action,
- SURF_ACTION_DONE);
- surf_action_lmm_heap_remove(surf_network_model->model_private->action_heap,(surf_action_lmm_t)action);
- }
- }
- return;
+ generic_update_actions_state_lazy(now, delta, surf_network_model);
}
static void net_update_resource_state(void *id,
{
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) {
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)
- xbt_fifo_get_item_content(xbt_fifo_get_last_item(fifo));
- bw = net_get_link_bandwidth(link);
- action->sender.gap =
- last_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->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_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;
}
}
-static void smpi_gap_remove(surf_action_network_CM02_t action)
+static void smpi_gap_remove(surf_action_lmm_t lmm_action)
{
xbt_fifo_t fifo;
size_t size;
+ surf_action_network_CM02_t action = (surf_action_network_CM02_t)(lmm_action);
if (sg_sender_gap > 0.0 && action->sender.link_name
&& action->sender.fifo_item) {
static void set_update_mechanism(void)
{
- char *optim = xbt_cfg_get_string(_surf_cfg_set, "network/optim");
+ char *optim = xbt_cfg_get_string(_sg_cfg_set, "network/optim");
int select =
- xbt_cfg_get_int(_surf_cfg_set, "network/maxmin_selective_update");
+ xbt_cfg_get_int(_sg_cfg_set, "network/maxmin_selective_update");
if (!strcmp(optim, "Full")) {
surf_network_model->model_private->update_mechanism = UM_FULL;
xbt_assert((select == 1)
||
(xbt_cfg_is_default_value
- (_surf_cfg_set, "network/maxmin_selective_update")),
+ (_sg_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);
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);
xbt_swag_new(xbt_swag_offset(comm, generic_lmm_action.action_list_hookup));
surf_network_model->model_private->maxmin_system->keep_track = surf_network_model->model_private->modified_set;
}
+
+ surf_network_model->gap_remove = NULL;
}
/************************************************************************/
bandwidth_factor_callback = &smpi_bandwidth_factor;
bandwidth_constraint_callback = &smpi_bandwidth_constraint;
gap_append = &smpi_gap_append;
- gap_remove = &smpi_gap_remove;
+ surf_network_model->gap_remove = &smpi_gap_remove;
net_define_callbacks();
xbt_dynar_push(model_list, &surf_network_model);
network_solve = lmm_solve;
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/sender_gap", 10e-6);
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/weight_S", 8775);
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/sender_gap", 10e-6);
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S", 8775);
}
/************************************************************************/
xbt_dynar_push(model_list, &surf_network_model);
network_solve = lmm_solve;
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/latency_factor",
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/latency_factor",
13.01);
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/bandwidth_factor",
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/bandwidth_factor",
0.97);
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/weight_S", 20537);
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S", 20537);
}
/***************************************************************************/
xbt_dynar_push(model_list, &surf_network_model);
network_solve = lmm_solve;
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/latency_factor", 1.0);
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/bandwidth_factor",
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/latency_factor", 1.0);
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/bandwidth_factor",
1.0);
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/weight_S", 0.0);
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S", 0.0);
}
/***************************************************************************/
func_reno_fpi);
network_solve = lagrange_solve;
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/latency_factor", 10.4);
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/bandwidth_factor",
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/latency_factor", 10.4);
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/bandwidth_factor",
0.92);
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/weight_S", 8775);
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S", 8775);
}
func_reno2_fpi);
network_solve = lagrange_solve;
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/latency_factor", 10.4);
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/bandwidth_factor",
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/latency_factor", 10.4);
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/bandwidth_factor",
0.92);
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/weight_S_parameter",
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S_parameter",
8775);
}
func_vegas_fpi);
network_solve = lagrange_solve;
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/latency_factor", 10.4);
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/bandwidth_factor",
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/latency_factor", 10.4);
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/bandwidth_factor",
0.92);
- xbt_cfg_setdefault_double(_surf_cfg_set, "network/weight_S", 8775);
+ xbt_cfg_setdefault_double(_sg_cfg_set, "network/weight_S", 8775);
}