Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid
authorMartin Quinson <martin.quinson@loria.fr>
Wed, 14 Mar 2012 10:14:58 +0000 (11:14 +0100)
committerMartin Quinson <martin.quinson@loria.fr>
Wed, 14 Mar 2012 10:14:58 +0000 (11:14 +0100)
1  2 
src/surf/network.c
src/surf/surf_private.h

diff --combined 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);
  
                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
        ((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)
                                  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
@@@ -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;