X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/04b62daf10d4a89e8a74ec793403183009da153b..e9af650f7b0e1eb307aecd28d81f16c007421237:/src/surf/workstation.c diff --git a/src/surf/workstation.c b/src/surf/workstation.c index 2c0e553bd2..f8b2760971 100644 --- a/src/surf/workstation.c +++ b/src/surf/workstation.c @@ -305,12 +305,18 @@ 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; + static xbt_dict_t network_link_set; + static int first_run = 1; int nb_link = 0; int nb_host = 0; - network_link_CM02_t link; + + if (first_run) { + network_link_set = xbt_dict_new_ext(workstation_nb * workstation_nb * 10); + first_run = 0; + } + else { + xbt_dict_reset(network_link_set); + } /* Compute the number of affected resources... */ for(i=0; i< workstation_nb; i++) { @@ -327,11 +333,7 @@ static surf_action_t execute_parallel_task (int workstation_nb, } } - xbt_dict_foreach(network_link_set, cursor, name, link) { - nb_link++; - } - - xbt_dict_free(&network_link_set); + nb_link = xbt_dict_length(network_link_set); for (i = 0; i0) nb_host++; @@ -344,7 +346,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; @@ -387,10 +389,29 @@ static surf_action_t execute_parallel_task (int workstation_nb, return (surf_action_t) action; } -static void* get_route(void *src, void *dst) { - /* TODO */ +/* returns an array of network_link_CM02_t */ +static const void** get_route(void *src, void *dst) { + workstation_CLM03_t workstation_src = (workstation_CLM03_t) src; + workstation_CLM03_t workstation_dst = (workstation_CLM03_t) dst; + return surf_network_resource->extension_public->get_route(workstation_src->network_card, workstation_dst->network_card); +} - return NULL; +static int get_route_size(void *src, void *dst) { + workstation_CLM03_t workstation_src = (workstation_CLM03_t) src; + workstation_CLM03_t workstation_dst = (workstation_CLM03_t) dst; + return surf_network_resource->extension_public->get_route_size(workstation_src->network_card, workstation_dst->network_card); +} + +static const char *get_link_name(const void *link) { + return surf_network_resource->extension_public->get_link_name(link); +} + +static double get_link_bandwidth(const void *link) { + return surf_network_resource->extension_public->get_link_bandwidth(link); +} + +static double get_link_latency(const void *link) { + return surf_network_resource->extension_public->get_link_latency(link); } static void finalize(void) @@ -439,6 +460,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; @@ -473,7 +498,10 @@ static void surf_workstation_resource_init_internal(void) surf_workstation_resource->extension_public->execute_parallel_task = execute_parallel_task; surf_workstation_resource->extension_public->get_route = get_route; - + surf_workstation_resource->extension_public->get_route_size = get_route_size; + surf_workstation_resource->extension_public->get_link_name = get_link_name; + surf_workstation_resource->extension_public->get_link_bandwidth = get_link_bandwidth; + surf_workstation_resource->extension_public->get_link_latency = get_link_latency; workstation_set = xbt_dict_new(); xbt_assert0(maxmin_system, "surf_init has to be called first!");