Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
No vm when ptask on
[simgrid.git] / src / surf / cpu.hpp
index 73ee3d1..669578a 100644 (file)
@@ -12,9 +12,15 @@ typedef CpuModel *CpuModelPtr;
 class Cpu;
 typedef Cpu *CpuPtr;
 
+class CpuLmm;
+typedef CpuLmm *CpuLmmPtr;
+
 class CpuAction;
 typedef CpuAction *CpuActionPtr;
 
+class CpuActionLmm;
+typedef CpuActionLmm *CpuActionLmmPtr;
+
 /*********
  * Model *
  *********/
@@ -22,6 +28,8 @@ class CpuModel : public Model {
 public:
   CpuModel(string name) : Model(name) {};
   CpuPtr createResource(string name);
+  void updateActionsStateLazy(double now, double delta);
+  void updateActionsStateFull(double now, double delta);
 
   virtual void addTraces() =0;
 };
@@ -29,29 +37,61 @@ public:
 /************
  * Resource *
  ************/
-class Cpu : public Resource {
+class Cpu : virtual public Resource {
 public:
+  Cpu(){};
   Cpu(CpuModelPtr model, const char* name, xbt_dict_t properties) : Resource(model, name, properties) {};
-  CpuActionPtr execute(double size);
-  CpuActionPtr sleep(double duration);
-  e_surf_resource_state_t getState();
-  int getCore();
-  double getSpeed(double load);
-  double getAvailableSpeed();
-  void addTraces(void);
+  virtual ActionPtr execute(double size)=0;
+  virtual ActionPtr sleep(double duration)=0;
+  virtual int getCore();
+  virtual double getSpeed(double load);
+  virtual double getAvailableSpeed();
+
+  virtual double getCurrentPowerPeak()=0;
+  virtual double getPowerPeakAt(int pstate_index)=0;
+  virtual int getNbPstates()=0;
+  virtual void setPowerPeakAt(int pstate_index)=0;
+  virtual double getConsumedEnergy()=0;
 
+  void addTraces(void);
+  double m_powerPeak;            /*< CPU power peak */
+  double m_powerScale;           /*< Percentage of CPU disponible */
+  int m_core;
 protected:
-  double m_powerPeak;
+
   //virtual boost::shared_ptr<Action> execute(double size) = 0;
   //virtual boost::shared_ptr<Action> sleep(double duration) = 0;
 };
 
+class CpuLmm : public ResourceLmm, public Cpu {
+public:
+  CpuLmm(){};
+  CpuLmm(CpuModelPtr model, const char* name, xbt_dict_t properties) : ResourceLmm(), Cpu(model, name, properties) {};
+  /* Note (hypervisor): */
+  lmm_constraint_t *p_constraintCore;
+};
+
 /**********
  * Action *
  **********/
-class CpuAction : public Action {
+class CpuAction : virtual public Action {
+public:
+  CpuAction(){};
+  CpuAction(ModelPtr model, double cost, bool failed)
+  : Action(model, cost, failed) {};
+};
+
+class CpuActionLmm : public ActionLmm, public CpuAction {
 public:
-  CpuAction(ModelPtr model, double cost, bool failed): Action(model, cost, failed) {};
+  CpuActionLmm(){};
+  CpuActionLmm(ModelPtr model, double cost, bool failed)
+  : Action(model, cost, failed), ActionLmm(model, cost, failed), CpuAction(model, cost, failed) {};
+  void updateRemainingLazy(double now);
+  virtual void updateEnergy()=0;
+  void setAffinity(CpuLmmPtr cpu, unsigned long mask);
+  void setBound(double bound);
+  double m_bound;
 };
 
+
 #endif /* SURF_MODEL_CPU_H_ */