X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d740fcc38174fbe1e9c5ec70ac3a15999fd62ac2..e76ef17ba2a7db2ab8a3b921995823af5abd8882:/src/simdag/sd_workstation.c diff --git a/src/simdag/sd_workstation.c b/src/simdag/sd_workstation.c index 14a0c70f53..bfe57d9717 100644 --- a/src/simdag/sd_workstation.c +++ b/src/simdag/sd_workstation.c @@ -1,18 +1,16 @@ -/* Copyright (c) 2006-2013. The SimGrid Team. +/* Copyright (c) 2006-2014. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #include "private.h" -#include "simdag/simdag.h" +#include "simgrid/simdag.h" #include "xbt/dict.h" #include "xbt/lib.h" #include "xbt/sysdep.h" #include "surf/surf.h" -#include "surf/surf_resource.h" - - +#include "simgrid/msg.h" //FIXME: why? XBT_LOG_NEW_DEFAULT_SUBCATEGORY(sd_workstation, sd, "Logging specific to SimDag (workstation)"); @@ -47,8 +45,8 @@ SD_storage_t __SD_storage_create(void *surf_storage, void *data) storage = xbt_new(s_SD_storage_priv_t, 1); storage->data = data; /* user data */ - name = surf_resource_name(surf_storage); + storage->host = surf_storage_get_host(surf_storage_resource_by_name(name)); xbt_lib_set(storage_lib,name, SD_STORAGE_LEVEL, storage); return xbt_lib_get_elm_or_null(storage_lib, name); } @@ -80,8 +78,9 @@ SD_workstation_t SD_workstation_get_by_name(const char *name) * \brief Returns the workstation list * * Use SD_workstation_get_number() to know the array size. - * + * * \return an array of \ref SD_workstation_t containing all workstations + * \remark The workstation order in the returned array is generally different from the workstation creation/declaration order in the XML platform (we use a hash table internally). * \see SD_workstation_get_number() */ const SD_workstation_t *SD_workstation_get_list(void) @@ -178,8 +177,7 @@ const char *SD_workstation_get_property_value(SD_workstation_t ws, */ xbt_dict_t SD_workstation_get_properties(SD_workstation_t workstation) { - return surf_workstation_model->extension. - workstation.get_properties(surf_workstation_resource_priv(workstation)); + return surf_host_get_properties(surf_host_resource_priv(workstation)); } @@ -247,9 +245,9 @@ const SD_link_t *SD_route_get_list(SD_workstation_t src, surf_src = src; surf_dst = dst; - surf_route = - surf_workstation_model->extension.workstation.get_route(surf_src, - surf_dst); + + surf_route = surf_host_model_get_route((surf_host_model_t)surf_host_model, + surf_src, surf_dst); xbt_dynar_foreach(surf_route, cpt, surf_link) { link_name = surf_resource_name(surf_link); @@ -269,8 +267,8 @@ const SD_link_t *SD_route_get_list(SD_workstation_t src, */ int SD_route_get_size(SD_workstation_t src, SD_workstation_t dst) { - return xbt_dynar_length(surf_workstation_model->extension. - workstation.get_route(src, dst)); + return xbt_dynar_length(surf_host_model_get_route( + (surf_host_model_t)surf_host_model, src, dst)); } /** @@ -282,8 +280,16 @@ int SD_route_get_size(SD_workstation_t src, SD_workstation_t dst) */ double SD_workstation_get_power(SD_workstation_t workstation) { - return surf_workstation_model->extension.workstation. - get_speed(workstation, 1.0); + return surf_host_get_speed(workstation, 1.0); +} +/** + * \brief Returns the amount of cores of a workstation + * + * \param workstation a workstation + * \return the amount of cores of this workstation + */ +int SD_workstation_get_cores(SD_workstation_t workstation) { + return surf_host_get_core(workstation); } /** @@ -295,23 +301,22 @@ double SD_workstation_get_power(SD_workstation_t workstation) */ double SD_workstation_get_available_power(SD_workstation_t workstation) { - return surf_workstation_model->extension. - workstation.get_available_speed(workstation); + return surf_host_get_available_speed(workstation); } /** * \brief Returns an approximative estimated time for the given computation amount on a workstation * * \param workstation a workstation - * \param computation_amount the computation amount you want to evaluate (in flops) + * \param flops_amount the computation amount you want to evaluate (in flops) * \return an approximative estimated 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 flops_amount) { - xbt_assert(computation_amount >= 0, - "computation_amount must be greater than or equal to zero"); - return computation_amount / SD_workstation_get_power(workstation); + xbt_assert(flops_amount >= 0, + "flops_amount must be greater than or equal to zero"); + return flops_amount / SD_workstation_get_power(workstation); } /** @@ -381,13 +386,13 @@ double SD_route_get_current_bandwidth(SD_workstation_t src, * * \param src the first workstation * \param dst the second workstation - * \param communication_amount the communication amount you want to evaluate (in bytes) - * \return an approximative estimated computation time for the given communication amount + * \param bytes_amount the communication amount you want to evaluate (in bytes) + * \return an approximative estimated communication time for the given bytes amount * between the workstations (in seconds) */ double SD_route_get_communication_time(SD_workstation_t src, SD_workstation_t dst, - double communication_amount) + double bytes_amount) { @@ -400,12 +405,10 @@ double SD_route_get_communication_time(SD_workstation_t src, double latency; int i; - xbt_assert(communication_amount >= 0, - "communication_amount must be greater than or equal to zero"); - + xbt_assert(bytes_amount >= 0, "bytes_amount must be greater than or equal to zero"); - if (communication_amount == 0.0) + if (bytes_amount == 0.0) return 0.0; links = SD_route_get_list(src, dst); @@ -420,7 +423,7 @@ double SD_route_get_communication_time(SD_workstation_t src, min_bandwidth = bandwidth; } - return latency + (communication_amount / min_bandwidth); + return latency + (bytes_amount / min_bandwidth); } /** @@ -481,8 +484,29 @@ void SD_workstation_set_access_mode(SD_workstation_t workstation, * \param workstation a workstation * \return a dynar containing all mounted storages on the workstation */ -xbt_dict_t SD_workstation_get_storage_list(SD_workstation_t workstation){ - return surf_workstation_model->extension.workstation.get_storage_list(workstation); +xbt_dict_t SD_workstation_get_mounted_storage_list(SD_workstation_t workstation){ + return surf_host_get_mounted_storage_list(workstation); +} + +/** + * \brief Return the list of mounted storages on a workstation. + * + * \param workstation a workstation + * \return a dynar containing all mounted storages on the workstation + */ +xbt_dynar_t SD_workstation_get_attached_storage_list(SD_workstation_t workstation){ + return surf_host_get_attached_storage_list(workstation); +} + +/** + * \brief Returns the host name the storage is attached to + * + * This functions checks whether a storage is a valid pointer or not and return its name. + */ +const char *SD_storage_get_host(msg_storage_t storage) { + xbt_assert((storage != NULL), "Invalid parameters"); + SD_storage_priv_t priv = SD_storage_priv(storage); + return priv->host; } /* Returns whether a task can start now on a workstation*/