Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Deprecate functions unused after removal of SimDag.
[simgrid.git] / include / simgrid / kernel / resource / Action.hpp
index a74f944..ac27f95 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2004-2020. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2004-2022. 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 <boost/optional.hpp>
 #include <string>
 
-static constexpr int NO_MAX_DURATION = -1.0;
+static constexpr double NO_MAX_DURATION = -1.0;
 
 namespace simgrid {
 namespace kernel {
 namespace resource {
 
-typedef std::pair<double, Action*> heap_element_type;
-typedef boost::heap::pairing_heap<heap_element_type, boost::heap::constant_time_size<false>, boost::heap::stable<true>,
-                                  boost::heap::compare<simgrid::xbt::HeapComparator<heap_element_type>>>
-    heap_type;
+using heap_element_type = std::pair<double, Action*>;
+using heap_type =
+    boost::heap::pairing_heap<heap_element_type, boost::heap::constant_time_size<false>, boost::heap::stable<true>,
+                              boost::heap::compare<simgrid::xbt::HeapComparator<heap_element_type>>>;
 
-typedef std::pair<double, Action*> heap_element_type;
 class XBT_PUBLIC ActionHeap : public heap_type {
   friend Action;
 
@@ -59,18 +58,39 @@ public:
 class XBT_PUBLIC Action {
   friend ActionHeap;
 
+  int refcount_           = 1;
+  double sharing_penalty_ = 1.0;             /**< priority (1.0 by default) */
+  double max_duration_    = NO_MAX_DURATION; /*< max_duration (may fluctuate until the task is completed) */
+  double remains_;          /**< How much of that cost remains to be done in the currently running task */
+  double start_time_;       /**< start time  */
+  double finish_time_ = -1; /**< finish time (may fluctuate until the task is completed) */
+  std::string category_;    /**< tracing category for categorized resource utilization monitoring */
+
+  double cost_;
+  Model* model_;
+  void* data_                       = nullptr; /**< for your convenience - XBT_ATTRIB_DEPRECATED_v334 */
+  activity::ActivityImpl* activity_ = nullptr;
+
+  /* LMM */
+  double factor_           = 1.0; /**< Factor for effective rate = var->get_value() * factor_ */
+  double last_update_      = 0;
+  double last_value_       = 0;
+  lmm::Variable* variable_ = nullptr;
+  double user_bound_       = -1;
+
+  ActionHeap::Type type_                              = ActionHeap::Type::unset;
+  boost::optional<ActionHeap::handle_type> heap_hook_ = boost::none;
+  boost::intrusive::list_member_hook<> modified_set_hook_;
+  boost::intrusive::list_member_hook<> state_set_hook_;
+
 public:
   /* Lazy update needs this Set hook to maintain a list of the tracked actions */
-  boost::intrusive::list_member_hook<> modified_set_hook_;
   bool is_within_modified_set() const { return modified_set_hook_.is_linked(); }
-  typedef boost::intrusive::list<
-      Action, boost::intrusive::member_hook<Action, boost::intrusive::list_member_hook<>, &Action::modified_set_hook_>>
-      ModifiedSet;
+  using ModifiedSet = boost::intrusive::list<
+      Action, boost::intrusive::member_hook<Action, boost::intrusive::list_member_hook<>, &Action::modified_set_hook_>>;
 
-  boost::intrusive::list_member_hook<> state_set_hook_;
-  typedef boost::intrusive::list<
-      Action, boost::intrusive::member_hook<Action, boost::intrusive::list_member_hook<>, &Action::state_set_hook_>>
-      StateSet;
+  using StateSet = boost::intrusive::list<
+      Action, boost::intrusive::member_hook<Action, boost::intrusive::list_member_hook<>, &Action::state_set_hook_>>;
 
   enum class State {
     INITED,   /**< Created, but not started yet */
@@ -87,6 +107,11 @@ public:
     SLEEPING
   };
 
+private:
+  StateSet* state_set_;
+  Action::SuspendStates suspended_ = Action::SuspendStates::RUNNING;
+
+public:
   /**
    * @brief Action constructor
    *
@@ -133,9 +158,15 @@ public:
   double get_finish_time() const { return finish_time_; }
 
   /** @brief Get the user data associated to the current action */
-  void* get_data() const { return data_; }
+  XBT_ATTRIB_DEPRECATED_v334("Please manifest if you actually need this function") void* get_data() const
+  {
+    return data_;
+  }
   /** @brief Set the user data associated to the current action */
-  void set_data(void* data) { data_ = data; }
+  XBT_ATTRIB_DEPRECATED_v334("Please manifest if you actually need this function") void set_data(void* data)
+  {
+    data_ = data;
+  }
 
   /** @brief Get the user data associated to the current action */
   activity::ActivityImpl* get_activity() const { return activity_; }
@@ -209,39 +240,34 @@ public:
 
   Model* get_model() const { return model_; }
 
-private:
-  StateSet* state_set_;
-  Action::SuspendStates suspended_ = Action::SuspendStates::RUNNING;
-  int refcount_            = 1;
-  double sharing_penalty_          = 1.0;             /**< priority (1.0 by default) */
-  double max_duration_   = NO_MAX_DURATION; /*< max_duration (may fluctuate until the task is completed) */
-  double remains_;           /**< How much of that cost remains to be done in the currently running task */
-  double start_time_;        /**< start time  */
-  double finish_time_ = -1;  /**< finish time (may fluctuate until the task is completed) */
-  std::string category_;     /**< tracing category for categorized resource utilization monitoring */
-
-  double cost_;
-  Model* model_;
-  void* data_                       = nullptr; /**< for your convenience */
-  activity::ActivityImpl* activity_ = nullptr;
-
-  /* LMM */
-  double last_update_      = 0;
-  double last_value_       = 0;
-  lmm::Variable* variable_ = nullptr;
-
-  ActionHeap::Type type_                              = ActionHeap::Type::unset;
-  boost::optional<ActionHeap::handle_type> heap_hook_ = boost::none;
-
-public:
   ActionHeap::Type get_type() const { return type_; }
 
   lmm::Variable* get_variable() const { return variable_; }
   void set_variable(lmm::Variable* var) { variable_ = var; }
 
+  double get_user_bound() const { return user_bound_; }
+  void set_user_bound(double bound) { user_bound_ = bound; }
+
   double get_last_update() const { return last_update_; }
   void set_last_update();
 
+  /**
+   * @brief Set a factor for this action
+   *
+   * Defines a multiplicative factor for the consumption of the underlying resource.
+   *
+   * @param factor Multiplicative factor for this action (e.g. 0.97)
+   */
+  void set_rate_factor(double factor) { factor_ = factor; }
+  /**
+   * @brief Get the effective consumption rate of the resource
+   *
+   * The rate is based on the sharing given by the maxmin system underneath.
+   * However, it depends on the factor defined for this action.
+   *
+   * So, the effective rate is equal to var->get_value() * factor_
+   */
+  double get_rate() const;
   double get_last_value() const { return last_value_; }
   void set_last_value(double val) { last_value_ = val; }
   void set_suspend_state(Action::SuspendStates state) { suspended_ = state; }