From: Martin Quinson Date: Wed, 14 Mar 2012 10:14:58 +0000 (+0100) Subject: Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid X-Git-Tag: v3_7~311 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/f00f8da2fe2073d48fc817d7d0272997837200fd?hp=-c Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid --- f00f8da2fe2073d48fc817d7d0272997837200fd diff --combined src/surf/network.c index 4781065047,ee4382033b..2bb1ce581d --- a/src/surf/network.c +++ b/src/surf/network.c @@@ -45,6 -45,12 +45,12 @@@ typedef struct s_smpi_factor double value; } s_smpi_factor_t; + typedef struct s_net_card *net_card_t; + typedef struct s_net_card { + char* name; + void* routing_obj; + } s_net_card_t; + double sg_sender_gap = 0.0; double sg_latency_factor = 1.0; /* default value; can be set by model or from command line */ double sg_bandwidth_factor = 1.0; /* default value; can be set by model or from command line */ @@@ -59,11 -65,39 +65,11 @@@ e_UM_t network_update_mechanism = UM_UN static int net_selective_update = 0; static int net_action_is_suspended(surf_action_t action); -static void update_action_remaining_lazy(double now); +static void net_update_action_remaining_lazy(double now); static xbt_swag_t net_modified_set = NULL; static xbt_heap_t net_action_heap = NULL; -/* added to manage the communication action's heap */ -static void net_action_update_index_heap(void *action, int i) -{ - surf_action_network_CM02_t a = action; - GENERIC_LMM_ACTION(a).index_heap = i; -} - -/* insert action on heap using a given key and a hat (heap_action_type) - * a hat can be of three types for communications: - * - * NORMAL = this is a normal heap entry stating the date to finish transmitting - * LATENCY = this is a heap entry to warn us when the latency is payed - * MAX_DURATION =this is a heap entry to warn us when the max_duration limit is reached - */ -static void heap_insert(surf_action_network_CM02_t action, double key, - enum heap_action_type hat) -{ - GENERIC_LMM_ACTION(action).hat = hat; - xbt_heap_push(net_action_heap, action, key); -} - -static void heap_remove(surf_action_network_CM02_t action) -{ - GENERIC_LMM_ACTION(action).hat = NOTSET; - if (GENERIC_LMM_ACTION(action).index_heap >= 0) { - xbt_heap_remove(net_action_heap, GENERIC_LMM_ACTION(action).index_heap); - } -} /******************************************************************************/ /* Factors callbacks */ @@@ -313,7 -347,7 +319,7 @@@ static int net_action_unref(surf_action ((surf_action_lmm_t) action)->variable); } if (network_update_mechanism == UM_LAZY) { // remove action from the heap - heap_remove((surf_action_network_CM02_t) action); + surf_action_lmm_heap_remove(net_action_heap,(surf_action_lmm_t) action); xbt_swag_remove(action, net_modified_set); } surf_action_free(&action); @@@ -330,7 -364,7 +336,7 @@@ static void net_action_cancel(surf_acti surf_network_model->action_state_set(action, SURF_ACTION_FAILED); if (network_update_mechanism == UM_LAZY) { // remove action from the heap xbt_swag_remove(action, net_modified_set); - heap_remove((surf_action_network_CM02_t) action); + surf_action_lmm_heap_remove(net_action_heap,(surf_action_lmm_t) action); } } @@@ -349,44 -383,44 +355,44 @@@ int net_get_link_latency_limited(surf_a double net_action_get_remains(surf_action_t action) { if (network_update_mechanism == UM_LAZY) /* update remains before return it */ - update_action_remaining_lazy(surf_get_clock()); + net_update_action_remaining_lazy(surf_get_clock()); return action->remains; } -static void update_action_remaining_lazy(double now) +static void net_update_action_remaining_lazy(double now) { - surf_action_network_CM02_t action = NULL; + surf_action_lmm_t action = NULL; double delta = 0.0; xbt_swag_foreach(action, net_modified_set) { - if (GENERIC_LMM_ACTION(action).suspended != 0) { + if (action->suspended != 0) { continue; } - delta = now - GENERIC_LMM_ACTION(action).last_update; + delta = now - action->last_update; double_update(&(((surf_action_t)action)->remains), - lmm_variable_getvalue(((surf_action_lmm_t) action)->variable) * delta); + lmm_variable_getvalue(action->variable) * delta); if (((surf_action_t)action)->max_duration != NO_MAX_DURATION) double_update(&(((surf_action_t)action)->max_duration), delta); if ((((surf_action_t)action)->remains <= 0) && - (lmm_get_variable_weight(((surf_action_lmm_t)action)->variable) > 0)) { + (lmm_get_variable_weight(action->variable) > 0)) { ((surf_action_t)action)->finish = surf_get_clock(); surf_network_model->action_state_set((surf_action_t) action, SURF_ACTION_DONE); - heap_remove(action); + surf_action_lmm_heap_remove(net_action_heap,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); - heap_remove(action); + surf_action_lmm_heap_remove(net_action_heap,action); } - GENERIC_LMM_ACTION(action).last_update = now; + action->last_update = now; } } @@@ -433,7 -467,7 +439,7 @@@ static double net_share_resources_lazy( XBT_DEBUG ("Before share resources, the size of modified actions set is %d", xbt_swag_size(net_modified_set)); - update_action_remaining_lazy(now); + net_update_action_remaining_lazy(now); lmm_solve(network_maxmin_system); @@@ -478,8 -512,8 +484,8 @@@ GENERIC_ACTION(action).max_duration); if (min != -1) { - heap_remove(action); - heap_insert(action, min, max_dur_flag ? MAX_DURATION : NORMAL); + surf_action_lmm_heap_remove(net_action_heap,(surf_action_lmm_t)action); + surf_action_lmm_heap_insert(net_action_heap,(surf_action_lmm_t)action, min, max_dur_flag ? MAX_DURATION : NORMAL); XBT_DEBUG("Insert at heap action(%p) min %lf now %lf", action, min, now); } else DIE_IMPOSSIBLE; @@@ -605,7 -639,7 +611,7 @@@ static void net_update_actions_state_la if (GENERIC_LMM_ACTION(action).hat == LATENCY) { lmm_update_variable_weight(network_maxmin_system, GENERIC_LMM_ACTION(action).variable, action->weight); - heap_remove(action); + surf_action_lmm_heap_remove(net_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 @@@ -617,7 -651,7 +623,7 @@@ ((surf_action_t)action)->finish = surf_get_clock(); surf_network_model->action_state_set((surf_action_t) action, SURF_ACTION_DONE); - heap_remove(action); + surf_action_lmm_heap_remove(net_action_heap,(surf_action_lmm_t)action); } } return; @@@ -836,7 -870,7 +842,7 @@@ static surf_action_t net_communicate(co // add to the heap the event when the latency is payed XBT_DEBUG("Added action (%p) one latency event at date %f", action, action->latency + GENERIC_LMM_ACTION(action).last_update); - heap_insert(action, action->latency + GENERIC_LMM_ACTION(action).last_update, + surf_action_lmm_heap_insert(net_action_heap,(surf_action_lmm_t)action, action->latency + GENERIC_LMM_ACTION(action).last_update, xbt_dynar_is_empty(route) ? NORMAL : LATENCY); } } else @@@ -909,7 -943,7 +915,7 @@@ static void net_action_suspend(surf_act action)->generic_lmm_action.variable, 0.0); if (network_update_mechanism == UM_LAZY) // remove action from the heap - heap_remove((surf_action_network_CM02_t) action); + surf_action_lmm_heap_remove(net_action_heap,(surf_action_lmm_t)action); } static void net_action_resume(surf_action_t action) @@@ -922,7 -956,7 +928,7 @@@ action)->weight); ((surf_action_network_CM02_t) action)->generic_lmm_action.suspended = 0; if (network_update_mechanism == UM_LAZY) // remove action from the heap - heap_remove((surf_action_network_CM02_t) action); + surf_action_lmm_heap_remove(net_action_heap,(surf_action_lmm_t)action); } } @@@ -935,7 -969,7 +941,7 @@@ void net_action_set_max_duration(surf_a { action->max_duration = duration; if (network_update_mechanism == UM_LAZY) // remove action from the heap - heap_remove((surf_action_network_CM02_t) action); + surf_action_lmm_heap_remove(net_action_heap,(surf_action_lmm_t)action); } #ifdef HAVE_TRACING @@@ -1089,7 -1123,7 +1095,7 @@@ static void surf_network_model_init_int if (network_update_mechanism == UM_LAZY) { net_action_heap = xbt_heap_new(8, NULL); xbt_heap_set_update_callback(net_action_heap, - net_action_update_index_heap); + surf_action_lmm_update_index_heap); net_modified_set = xbt_swag_new(xbt_swag_offset(comm, generic_lmm_action.action_list_hookup)); network_maxmin_system->keep_track = net_modified_set; diff --combined src/surf/surf_private.h index d1a4ddc13e,09753e35ed..296fef3cd6 --- a/src/surf/surf_private.h +++ b/src/surf/surf_private.h @@@ -66,13 -66,6 +66,13 @@@ void surf_action_free(surf_action_t * a void surf_action_state_set(surf_action_t action, e_surf_action_state_t state); void surf_action_data_set(surf_action_t action, void *data); /* cannot declare inline since we use a pointer to it */ + +void surf_action_lmm_update_index_heap(void *action, int i); /* callback for heap management shared by cpu and net models */ +void surf_action_lmm_heap_insert(xbt_heap_t heap, surf_action_lmm_t action, + double key, enum heap_action_type hat); +void surf_action_lmm_heap_remove(xbt_heap_t heap,surf_action_lmm_t action); + + FILE *surf_fopen(const char *name, const char *mode); extern tmgr_history_t history; @@@ -169,6 -162,8 +169,8 @@@ typedef struct s_as typedef struct s_network_element_info { AS_t rc_component; e_surf_network_element_type_t rc_type; + int id; + char *name; } s_network_element_info_t, *network_element_info_t; typedef int *network_element_t;