Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
give simgrid::Host a p_cpu field instead of relying on extensions for non-optional...
[simgrid.git] / src / surf / cpu_interface.hpp
index 4f1b156..2cb2d53 100644 (file)
@@ -74,8 +74,6 @@ public:
 */
 XBT_PUBLIC_CLASS Cpu : public simgrid::surf::Resource {
 public:
-  static simgrid::xbt::Extension<simgrid::Host, Cpu> EXTENSION_ID;
-  static void classInit();
   Cpu();
 
   /**
@@ -89,8 +87,9 @@ public:
    * @param speedScale The speed scale of this Cpu in [0;1] (available amount)
    * @param stateInitial whether it is created running or crashed
    */
-  Cpu(simgrid::surf::Model *model, simgrid::Host *host,
-         lmm_constraint_t constraint, int core, double speedPeak, double speedScale,
+  Cpu(simgrid::surf::Model *model, simgrid::Host *host, lmm_constraint_t constraint,
+         xbt_dynar_t speedPeakList, int pstate,
+         int core, double speedPeak, double speedScale,
          e_surf_resource_state_t stateInitial);
 
   /**
@@ -104,12 +103,15 @@ public:
    * @param stateInitial whether it is created running or crashed
    */
   Cpu(simgrid::surf::Model *model, simgrid::Host *host,
+      xbt_dynar_t speedPeakList, int pstate,
          int core, double speedPeak, double speedScale,
          e_surf_resource_state_t stateInitial);
 
+  Cpu(simgrid::surf::Model *model, simgrid::Host *host, lmm_constraint_t constraint,
+         xbt_dynar_t speedPeakList, int pstate,
+         int core, double speedPeak, double speedScale);
   Cpu(simgrid::surf::Model *model, simgrid::Host *host,
-         lmm_constraint_t constraint, int core, double speedPeak, double speedScale);
-  Cpu(simgrid::surf::Model *model, simgrid::Host *host,
+         xbt_dynar_t speedPeakList, int pstate,
          int core, double speedPeak, double speedScale);
 
   ~Cpu();
@@ -142,11 +144,11 @@ public:
   /** @brief Get the current Cpu power peak */
   virtual double getCurrentPowerPeak();
 
-  virtual double getPowerPeakAt(int pstate_index)=0;
+  virtual double getPowerPeakAt(int pstate_index);
 
-  virtual int getNbPstates()=0;
-  virtual void setPstate(int pstate_index)=0;
-  virtual int  getPstate()=0;
+  virtual int getNbPStates();
+  virtual void setPState(int pstate_index);
+  virtual int  getPState();
 
   void addTraces(void);
   simgrid::Host* getHost() { return m_host; }
@@ -157,6 +159,9 @@ public:
   double m_speedScale;           /*< Percentage of CPU available according to the trace, in [O,1] */
   simgrid::Host* m_host;
 
+  xbt_dynar_t p_speedPeakList = NULL; /*< List of supported CPU capacities (pstate related) */
+  int m_pstate = 0;                   /*< Current pstate (index in the speedPeakList)*/
+
   /* Note (hypervisor): */
   lmm_constraint_t *p_constraintCore=NULL;
   void **p_constraintCoreId=NULL;