X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8750e7f378b5d48477e1b0b2796a437366a3ea2b..1e624dd8c618a0e7cd852b40d2ed02b911ddcc57:/src/surf/workstation.c diff --git a/src/surf/workstation.c b/src/surf/workstation.c index 5d6120c3f0..352b760064 100644 --- a/src/surf/workstation.c +++ b/src/surf/workstation.c @@ -12,8 +12,8 @@ #include "network_private.h" surf_workstation_resource_t surf_workstation_resource = NULL; - xbt_dict_t workstation_set = NULL; +static xbt_dict_t parallel_task_network_link_set = NULL; static workstation_CLM03_t workstation_new(const char *name, void *cpu, void *card) @@ -161,10 +161,10 @@ static void update_actions_state(double now, double delta) */ xbt_swag_foreach_safe(action, next_action, running_actions) { - surf_double_update(&(action->generic_action.remains), + double_update(&(action->generic_action.remains), lmm_variable_getvalue(action->variable) * delta); if (action->generic_action.max_duration != NO_MAX_DURATION) - surf_double_update(&(action->generic_action.max_duration), delta); + double_update(&(action->generic_action.max_duration), delta); if ((action->generic_action.remains <= 0) && (lmm_get_variable_weight(action->variable)>0)) { action->generic_action.finish = surf_get_clock(); @@ -305,12 +305,12 @@ static surf_action_t execute_parallel_task (int workstation_nb, { surf_action_parallel_task_CSL05_t action = NULL; int i, j, k; - xbt_dict_t network_link_set = xbt_dict_new(); - xbt_dict_cursor_t cursor = NULL; - char *name = NULL; int nb_link = 0; int nb_host = 0; - network_link_CM02_t link; + + if (parallel_task_network_link_set == NULL) { + parallel_task_network_link_set = xbt_dict_new_ext(workstation_nb * workstation_nb * 10); + } /* Compute the number of affected resources... */ for(i=0; i< workstation_nb; i++) { @@ -322,16 +322,13 @@ static surf_action_t execute_parallel_task (int workstation_nb, if(communication_amount[i*workstation_nb+j]>0) for(k=0; k< route_size; k++) { - xbt_dict_set(network_link_set, route[k]->name, route[k], NULL); + xbt_dict_set(parallel_task_network_link_set, route[k]->name, route[k], NULL); } } } - xbt_dict_foreach(network_link_set, cursor, name, link) { - nb_link++; - } - - xbt_dict_free(&network_link_set); + nb_link = xbt_dict_length(parallel_task_network_link_set); + xbt_dict_reset(parallel_task_network_link_set); for (i = 0; i0) nb_host++; @@ -344,7 +341,7 @@ static surf_action_t execute_parallel_task (int workstation_nb, action->generic_action.cost = amount; action->generic_action.remains = amount; action->generic_action.max_duration = NO_MAX_DURATION; - action->generic_action.start = -1.0; + action->generic_action.start = surf_get_clock(); action->generic_action.finish = -1.0; action->generic_action.resource_type = (surf_resource_t) surf_workstation_resource; @@ -458,6 +455,10 @@ static void surf_workstation_resource_init_internal(void) get_resource_name; surf_workstation_resource->common_public->action_get_state = surf_action_get_state; + surf_workstation_resource->common_public->action_get_start_time = + surf_action_get_start_time; + surf_workstation_resource->common_public->action_get_finish_time = + surf_action_get_finish_time; surf_workstation_resource->common_public->action_free = action_free; surf_workstation_resource->common_public->action_use = action_use; surf_workstation_resource->common_public->action_cancel = action_cancel;