X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/95d328f9ca4dd6ccd2065c6c84aca83d43001804..dff9e15c44ab6340d27215957c56fa72fad246a2:/src/simdag/sd_workstation.c diff --git a/src/simdag/sd_workstation.c b/src/simdag/sd_workstation.c index af29f84ff4..7d0f26e3db 100644 --- a/src/simdag/sd_workstation.c +++ b/src/simdag/sd_workstation.c @@ -5,11 +5,12 @@ #include "surf/surf.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_workstation, sd, - "Logging specific to SimDag (workstation)"); + "Logging specific to SimDag (workstation)"); /* Creates a workstation and registers it in SD. */ -SD_workstation_t __SD_workstation_create(void *surf_workstation, void *data) { +SD_workstation_t __SD_workstation_create(void *surf_workstation, void *data) +{ SD_workstation_t workstation; const char *name; @@ -18,13 +19,13 @@ SD_workstation_t __SD_workstation_create(void *surf_workstation, void *data) { workstation = xbt_new(s_SD_workstation_t, 1); workstation->surf_workstation = surf_workstation; - workstation->data = data; /* user data */ - workstation->access_mode = SD_WORKSTATION_SHARED_ACCESS; /* default mode is shared */ + workstation->data = data; /* user data */ + workstation->access_mode = SD_WORKSTATION_SHARED_ACCESS; /* default mode is shared */ workstation->task_fifo = NULL; workstation->current_task = NULL; - + name = SD_workstation_get_name(workstation); - xbt_dict_set(sd_global->workstations, name, workstation, __SD_workstation_destroy); /* add the workstation to the dictionary */ + xbt_dict_set(sd_global->workstations, name, workstation, __SD_workstation_destroy); /* add the workstation to the dictionary */ sd_global->workstation_count++; return workstation; @@ -38,7 +39,8 @@ SD_workstation_t __SD_workstation_create(void *surf_workstation, void *data) { * \param name workstation name * \return the workstation, or \c NULL if there is no such workstation */ -SD_workstation_t SD_workstation_get_by_name(const char *name) { +SD_workstation_t SD_workstation_get_by_name(const char *name) +{ SD_CHECK_INIT_DONE(); xbt_assert0(name != NULL, "Invalid parameter"); @@ -54,7 +56,8 @@ SD_workstation_t SD_workstation_get_by_name(const char *name) { * \return an array of \ref SD_workstation_t containing all workstations * \see SD_workstation_get_number() */ -const SD_workstation_t* SD_workstation_get_list(void) { +const SD_workstation_t *SD_workstation_get_list(void) +{ xbt_dict_cursor_t cursor; char *key; @@ -66,9 +69,10 @@ const SD_workstation_t* SD_workstation_get_list(void) { - if (sd_global->workstation_list == NULL) { /* this is the first time the function is called */ - sd_global->workstation_list = xbt_new(SD_workstation_t, sd_global->workstation_count); - + if (sd_global->workstation_list == NULL) { /* this is the first time the function is called */ + sd_global->workstation_list = + xbt_new(SD_workstation_t, sd_global->workstation_count); + i = 0; xbt_dict_foreach(sd_global->workstations, cursor, key, data) { sd_global->workstation_list[i++] = (SD_workstation_t) data; @@ -83,7 +87,8 @@ const SD_workstation_t* SD_workstation_get_list(void) { * \return the number of existing workstations * \see SD_workstation_get_list() */ -int SD_workstation_get_number(void) { +int SD_workstation_get_number(void) +{ SD_CHECK_INIT_DONE(); return sd_global->workstation_count; } @@ -95,7 +100,8 @@ int SD_workstation_get_number(void) { * \return the user data associated with this workstation (can be \c NULL) * \see SD_workstation_set_data() */ -void* SD_workstation_get_data(SD_workstation_t workstation) { +void *SD_workstation_get_data(SD_workstation_t workstation) +{ SD_CHECK_INIT_DONE(); xbt_assert0(workstation != NULL, "Invalid parameter"); return workstation->data; @@ -111,7 +117,8 @@ void* SD_workstation_get_data(SD_workstation_t workstation) { * \param data the new data you want to associate with this workstation * \see SD_workstation_get_data() */ -void SD_workstation_set_data(SD_workstation_t workstation, void *data) { +void SD_workstation_set_data(SD_workstation_t workstation, void *data) +{ SD_CHECK_INIT_DONE(); xbt_assert0(workstation != NULL, "Invalid parameter"); workstation->data = data; @@ -123,10 +130,12 @@ void SD_workstation_set_data(SD_workstation_t workstation, void *data) { * \param workstation a workstation * \return the name of this workstation (cannot be \c NULL) */ -const char* SD_workstation_get_name(SD_workstation_t workstation) { +const char *SD_workstation_get_name(SD_workstation_t workstation) +{ SD_CHECK_INIT_DONE(); xbt_assert0(workstation != NULL, "Invalid parameter"); - return surf_workstation_model->common_public->get_resource_name(workstation->surf_workstation); + return surf_workstation_model->common_public-> + get_resource_name(workstation->surf_workstation); } /** @@ -136,7 +145,8 @@ const char* SD_workstation_get_name(SD_workstation_t workstation) { * \param name a property name * \return value of a property (or NULL if property not set) */ -const char* SD_workstation_get_property_value(SD_workstation_t ws, const char* name) +const char *SD_workstation_get_property_value(SD_workstation_t ws, + const char *name) { return xbt_dict_get_or_null(SD_workstation_get_properties(ws), name); } @@ -153,7 +163,8 @@ xbt_dict_t SD_workstation_get_properties(SD_workstation_t workstation) SD_CHECK_INIT_DONE(); xbt_assert0((workstation != NULL), "Invalid parameters"); - return (surf_workstation_model->common_public->get_properties(workstation->surf_workstation)); + return (surf_workstation_model->common_public-> + get_properties(workstation->surf_workstation)); } @@ -168,14 +179,15 @@ xbt_dict_t SD_workstation_get_properties(SD_workstation_t workstation) * \return a new array of \ref SD_link_t representating the route between these two workstations * \see SD_route_get_size(), SD_link_t */ -const SD_link_t* SD_route_get_list(SD_workstation_t src, SD_workstation_t dst) { +const SD_link_t *SD_route_get_list(SD_workstation_t src, SD_workstation_t dst) +{ void *surf_src; void *surf_dst; const void **surf_route; int route_size; const char *link_name; int i; - + SD_CHECK_INIT_DONE(); if (sd_global->recyclable_route == NULL) { @@ -186,13 +198,18 @@ const SD_link_t* SD_route_get_list(SD_workstation_t src, SD_workstation_t dst) { surf_src = src->surf_workstation; surf_dst = dst->surf_workstation; - surf_route = surf_workstation_model->extension_public->get_route(surf_src, surf_dst); - route_size = surf_workstation_model->extension_public->get_route_size(surf_src, surf_dst); + surf_route = + surf_workstation_model->extension_public->get_route(surf_src, surf_dst); + route_size = + surf_workstation_model->extension_public->get_route_size(surf_src, + surf_dst); for (i = 0; i < route_size; i++) { - link_name = surf_workstation_model->extension_public->get_link_name(surf_route[i]); - sd_global->recyclable_route[i] = xbt_dict_get(sd_global->links, link_name); + link_name = + surf_workstation_model->extension_public->get_link_name(surf_route[i]); + sd_global->recyclable_route[i] = + xbt_dict_get(sd_global->links, link_name); } return sd_global->recyclable_route; @@ -206,10 +223,13 @@ const SD_link_t* SD_route_get_list(SD_workstation_t src, SD_workstation_t dst) { * \return the number of links on the route between these two workstations * \see SD_route_get_list() */ -int SD_route_get_size(SD_workstation_t src, SD_workstation_t dst) { +int SD_route_get_size(SD_workstation_t src, SD_workstation_t dst) +{ SD_CHECK_INIT_DONE(); - return surf_workstation_model->extension_public-> - get_route_size(src->surf_workstation, dst->surf_workstation); + return surf_workstation_model->extension_public->get_route_size(src-> + surf_workstation, + dst-> + surf_workstation); } /** @@ -219,10 +239,13 @@ int SD_route_get_size(SD_workstation_t src, SD_workstation_t dst) { * \return the total power of this workstation * \see SD_workstation_get_available_power() */ -double SD_workstation_get_power(SD_workstation_t workstation) { +double SD_workstation_get_power(SD_workstation_t workstation) +{ SD_CHECK_INIT_DONE(); xbt_assert0(workstation != NULL, "Invalid parameter"); - return surf_workstation_model->extension_public->get_speed(workstation->surf_workstation, 1.0); + return surf_workstation_model->extension_public->get_speed(workstation-> + surf_workstation, + 1.0); } /** @@ -232,10 +255,12 @@ double SD_workstation_get_power(SD_workstation_t workstation) { * \return the proportion of power currently available in this workstation (normally a number between 0 and 1) * \see SD_workstation_get_power() */ -double SD_workstation_get_available_power(SD_workstation_t workstation) { +double SD_workstation_get_available_power(SD_workstation_t workstation) +{ SD_CHECK_INIT_DONE(); xbt_assert0(workstation != NULL, "Invalid parameter"); - return surf_workstation_model->extension_public->get_available_speed(workstation->surf_workstation); + return surf_workstation_model->extension_public-> + get_available_speed(workstation->surf_workstation); } /** @@ -245,10 +270,13 @@ double SD_workstation_get_available_power(SD_workstation_t workstation) { * \param computation_amount the computation amount you want to evaluate (in flops) * \return an approximative astimated computation time for the given computation amount on this workstation (in seconds) */ -double SD_workstation_get_computation_time(SD_workstation_t workstation, double computation_amount) { +double SD_workstation_get_computation_time(SD_workstation_t workstation, + double computation_amount) +{ SD_CHECK_INIT_DONE(); xbt_assert0(workstation != NULL, "Invalid parameter"); - xbt_assert0(computation_amount >= 0, "computation_amount must be greater than or equal to zero"); + xbt_assert0(computation_amount >= 0, + "computation_amount must be greater than or equal to zero"); return computation_amount / SD_workstation_get_power(workstation); } @@ -261,11 +289,13 @@ double SD_workstation_get_computation_time(SD_workstation_t workstation, double * \return the latency of the route between the two workstations (in seconds) * \see SD_route_get_current_bandwidth() */ -double SD_route_get_current_latency(SD_workstation_t src, SD_workstation_t dst) { +double SD_route_get_current_latency(SD_workstation_t src, + SD_workstation_t dst) +{ const SD_link_t *links; int nb_links; - double latency ; + double latency; int i; SD_CHECK_INIT_DONE(); @@ -273,7 +303,7 @@ double SD_route_get_current_latency(SD_workstation_t src, SD_workstation_t dst) links = SD_route_get_list(src, dst); nb_links = SD_route_get_size(src, dst); latency = 0.0; - + for (i = 0; i < nb_links; i++) { latency += SD_link_get_current_latency(links[i]); } @@ -290,7 +320,9 @@ double SD_route_get_current_latency(SD_workstation_t src, SD_workstation_t dst) * \return the bandwidth of the route between the two workstations (in bytes/second) * \see SD_route_get_current_latency() */ -double SD_route_get_current_bandwidth(SD_workstation_t src, SD_workstation_t dst) { +double SD_route_get_current_bandwidth(SD_workstation_t src, + SD_workstation_t dst) +{ const SD_link_t *links; int nb_links; @@ -305,7 +337,7 @@ double SD_route_get_current_bandwidth(SD_workstation_t src, SD_workstation_t dst nb_links = SD_route_get_size(src, dst); bandwidth = min_bandwidth = -1.0; - + for (i = 0; i < nb_links; i++) { bandwidth = SD_link_get_current_bandwidth(links[i]); if (bandwidth < min_bandwidth || min_bandwidth == -1.0) @@ -325,8 +357,10 @@ double SD_route_get_current_bandwidth(SD_workstation_t src, SD_workstation_t dst * \return an approximative astimated computation time for the given communication amount * between the workstations (in seconds) */ -double SD_route_get_communication_time(SD_workstation_t src, SD_workstation_t dst, - double communication_amount) { +double SD_route_get_communication_time(SD_workstation_t src, + SD_workstation_t dst, + double communication_amount) +{ /* total time = latency + transmission time of the slowest link @@ -340,10 +374,11 @@ double SD_route_get_communication_time(SD_workstation_t src, SD_workstation_t ds SD_CHECK_INIT_DONE(); xbt_assert0(src != NULL && dst != NULL, "Invalid parameter"); - xbt_assert0(communication_amount >= 0, "communication_amount must be greater than or equal to zero"); + xbt_assert0(communication_amount >= 0, + "communication_amount must be greater than or equal to zero"); + - if (communication_amount == 0.0) return 0.0; @@ -371,7 +406,9 @@ double SD_route_get_communication_time(SD_workstation_t src, SD_workstation_t ds * * \see SD_workstation_set_access_mode(), e_SD_workstation_access_mode_t */ - e_SD_workstation_access_mode_t SD_workstation_get_access_mode(SD_workstation_t workstation) { +e_SD_workstation_access_mode_t SD_workstation_get_access_mode(SD_workstation_t + workstation) +{ SD_CHECK_INIT_DONE(); xbt_assert0(workstation != NULL, "Invalid parameter"); return workstation->access_mode; @@ -392,12 +429,15 @@ double SD_route_get_communication_time(SD_workstation_t src, SD_workstation_t ds * * \see SD_workstation_get_access_mode(), e_SD_workstation_access_mode_t */ -void SD_workstation_set_access_mode(SD_workstation_t workstation, e_SD_workstation_access_mode_t access_mode) { +void SD_workstation_set_access_mode(SD_workstation_t workstation, + e_SD_workstation_access_mode_t + access_mode) +{ SD_CHECK_INIT_DONE(); xbt_assert0(workstation != NULL, "Invalid parameter"); if (access_mode == workstation->access_mode) { - return; // nothing is changed + return; // nothing is changed } workstation->access_mode = access_mode; @@ -405,43 +445,48 @@ void SD_workstation_set_access_mode(SD_workstation_t workstation, e_SD_workstati if (access_mode == SD_WORKSTATION_SHARED_ACCESS) { xbt_fifo_free(workstation->task_fifo); workstation->task_fifo = NULL; - } - else { + } else { workstation->task_fifo = xbt_fifo_new(); } } /* Returns whether a task can start now on a workstation. - *//* -int __SD_workstation_can_start(SD_workstation_t workstation, SD_task_t task) { - SD_CHECK_INIT_DONE(); - xbt_assert0(workstation != NULL && task != NULL, "Invalid parameter"); + *//* + int __SD_workstation_can_start(SD_workstation_t workstation, SD_task_t task) { + SD_CHECK_INIT_DONE(); + xbt_assert0(workstation != NULL && task != NULL, "Invalid parameter"); - return !__SD_workstation_is_busy(workstation) && - (xbt_fifo_size(workstation->task_fifo) == 0) || xbt_fifo_get_first_item(workstation->task_fifo) == task); -} -*/ + return !__SD_workstation_is_busy(workstation) && + (xbt_fifo_size(workstation->task_fifo) == 0) || xbt_fifo_get_first_item(workstation->task_fifo) == task); + } + */ /* Returns whether a workstation is busy. A workstation is busy is it is * in sequential mode and a task is running on it or the fifo is not empty. */ -int __SD_workstation_is_busy(SD_workstation_t workstation) { +int __SD_workstation_is_busy(SD_workstation_t workstation) +{ SD_CHECK_INIT_DONE(); xbt_assert0(workstation != NULL, "Invalid parameter"); - - DEBUG4("Workstation '%s' access mode: '%s', current task: %s, fifo size: %d", - SD_workstation_get_name(workstation), - (workstation->access_mode==SD_WORKSTATION_SHARED_ACCESS)?"SHARED":"FIFO", - (workstation->current_task ? SD_task_get_name(workstation->current_task) : "none"), - (workstation->task_fifo ? xbt_fifo_size(workstation->task_fifo) : 0)); + + DEBUG4 + ("Workstation '%s' access mode: '%s', current task: %s, fifo size: %d", + SD_workstation_get_name(workstation), + (workstation->access_mode == + SD_WORKSTATION_SHARED_ACCESS) ? "SHARED" : "FIFO", + (workstation->current_task ? SD_task_get_name(workstation->current_task) + : "none"), + (workstation->task_fifo ? xbt_fifo_size(workstation->task_fifo) : 0)); return workstation->access_mode == SD_WORKSTATION_SEQUENTIAL_ACCESS && - (workstation->current_task != NULL || xbt_fifo_size(workstation->task_fifo) > 0); + (workstation->current_task != NULL + || xbt_fifo_size(workstation->task_fifo) > 0); } /* Destroys a workstation. */ -void __SD_workstation_destroy(void *workstation) { +void __SD_workstation_destroy(void *workstation) +{ SD_workstation_t w;