X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/82230d737404aa70c3c2b5824d97109f1f129d58..c1581952362f8720ca84e7f5fb5500fdeb3878b9:/src/surf/surf_interface.hpp?ds=sidebyside diff --git a/src/surf/surf_interface.hpp b/src/surf/surf_interface.hpp index 38bdbe0f09..507c7ce916 100644 --- a/src/surf/surf_interface.hpp +++ b/src/surf/surf_interface.hpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -27,6 +28,10 @@ *********/ /* user-visible parameters */ +XBT_PUBLIC_DATA(double) sg_maxmin_precision; +XBT_PUBLIC_DATA(double) sg_surf_precision; +XBT_PUBLIC_DATA(int) sg_concurrency_limit; + extern XBT_PRIVATE double sg_tcp_gamma; extern XBT_PRIVATE double sg_latency_factor; extern XBT_PRIVATE double sg_bandwidth_factor; @@ -36,6 +41,28 @@ extern XBT_PRIVATE std::vector surf_path; extern XBT_PRIVATE std::unordered_map traces_set_list; extern XBT_PRIVATE std::set watched_hosts; +static inline void double_update(double* variable, double value, double precision) +{ + // printf("Updating %g -= %g +- %g\n",*variable,value,precision); + // xbt_assert(value==0 || value>precision); + // Check that precision is higher than the machine-dependent size of the mantissa. If not, brutal rounding may + // happen, and the precision mechanism is not active... + // xbt_assert(*variable< (2< precision); +} + +static inline int double_equals(double value1, double value2, double precision) +{ + return (fabs(value1 - value2) < precision); +} + extern "C" { XBT_PUBLIC(double) surf_get_clock(); } @@ -109,7 +136,7 @@ public: * @param cost The cost of the Action * @param failed If the action is impossible (e.g.: execute something on a switched off host) */ - Action(simgrid::surf::Model *model, double cost, bool failed); + Action(simgrid::surf::Model* model, double cost, bool failed); /** * @brief Action constructor @@ -119,7 +146,7 @@ public: * @param failed If the action is impossible (e.g.: execute something on a switched off host) * @param var The lmm variable associated to this Action if it is part of a LMM component */ - Action(simgrid::surf::Model *model, double cost, bool failed, lmm_variable_t var); + Action(simgrid::surf::Model* model, double cost, bool failed, lmm_variable_t var); /** @brief Destructor */ virtual ~Action(); @@ -212,8 +239,6 @@ public: /** @brief Get the state set in which the action is */ ActionList* getStateSet() const { return stateSet_; }; - s_xbt_swag_hookup_t stateHookup_ = {nullptr,nullptr}; - simgrid::surf::Model* getModel() const { return model_; } protected: @@ -234,10 +259,10 @@ private: void *data_ = nullptr; /**< for your convenience */ /* LMM */ - double lastUpdate_ = 0; - double lastValue_ = 0; - lmm_variable_t variable_ = nullptr; - enum heap_action_type hat_ = NOTSET; + double lastUpdate_ = 0; + double lastValue_ = 0; + lmm_variable_t variable_ = nullptr; + enum heap_action_type hat_ = NOTSET; boost::optional heapHandle_ = boost::none; public: @@ -408,6 +433,9 @@ public: /** @brief Check if the current Resource is used (if it currently serves an action) */ virtual bool isUsed()=0; + /** @brief returns the current load (in flops per second, byte per second or similar) */ + virtual double getLoad(); + /** @brief Check if the current Resource is active */ virtual bool isOn() const; /** @brief Check if the current Resource is shut down */