Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
CpuCas01 in C++
[simgrid.git] / src / surf / cpu.hpp
index 73ee3d1..c7779e2 100644 (file)
@@ -12,9 +12,15 @@ typedef CpuModel *CpuModelPtr;
 class Cpu;
 typedef Cpu *CpuPtr;
 
 class Cpu;
 typedef Cpu *CpuPtr;
 
+class CpuLmm;
+typedef CpuLmm *CpuLmmPtr;
+
 class CpuAction;
 typedef CpuAction *CpuActionPtr;
 
 class CpuAction;
 typedef CpuAction *CpuActionPtr;
 
+class CpuActionLmm;
+typedef CpuActionLmm *CpuActionLmmPtr;
+
 /*********
  * Model *
  *********/
 /*********
  * Model *
  *********/
@@ -22,6 +28,8 @@ class CpuModel : public Model {
 public:
   CpuModel(string name) : Model(name) {};
   CpuPtr createResource(string name);
 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;
 };
 
   virtual void addTraces() =0;
 };
@@ -29,8 +37,9 @@ public:
 /************
  * Resource *
  ************/
 /************
  * Resource *
  ************/
-class Cpu : public Resource {
+class Cpu : virtual public Resource {
 public:
 public:
+  Cpu(){};
   Cpu(CpuModelPtr model, const char* name, xbt_dict_t properties) : Resource(model, name, properties) {};
   CpuActionPtr execute(double size);
   CpuActionPtr sleep(double duration);
   Cpu(CpuModelPtr model, const char* name, xbt_dict_t properties) : Resource(model, name, properties) {};
   CpuActionPtr execute(double size);
   CpuActionPtr sleep(double duration);
@@ -40,18 +49,37 @@ public:
   double getAvailableSpeed();
   void addTraces(void);
 
   double getAvailableSpeed();
   void addTraces(void);
 
+  double m_powerPeak;            /*< CPU power peak */
+  double m_powerScale;           /*< Percentage of CPU disponible */
 protected:
 protected:
-  double m_powerPeak;
+  int m_core;
+
   //virtual boost::shared_ptr<Action> execute(double size) = 0;
   //virtual boost::shared_ptr<Action> sleep(double duration) = 0;
 };
 
   //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) {};
+
+};
+
 /**********
  * Action *
  **********/
 /**********
  * Action *
  **********/
-class CpuAction : public Action {
+class CpuAction : virtual public Action {
 public:
 public:
+  CpuAction(){};
   CpuAction(ModelPtr model, double cost, bool failed): Action(model, cost, failed) {};
 };
 
   CpuAction(ModelPtr model, double cost, bool failed): Action(model, cost, failed) {};
 };
 
+class CpuActionLmm : public ActionLmm, public CpuAction {
+public:
+  CpuActionLmm(){};
+  CpuActionLmm(ModelPtr model, double cost, bool failed): ActionLmm(model, cost, failed), CpuAction(model, cost, failed) {};
+  void updateRemainingLazy(double now);
+};
+
+
 #endif /* SURF_MODEL_CPU_H_ */
 #endif /* SURF_MODEL_CPU_H_ */