Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix Memleaks
[simgrid.git] / src / surf / cpu.hpp
1 #include "surf.hpp"
2
3 #ifndef SURF_MODEL_CPU_H_
4 #define SURF_MODEL_CPU_H_
5
6 /***********
7  * Classes *
8  ***********/
9 class CpuModel;
10 typedef CpuModel *CpuModelPtr;
11
12 class Cpu;
13 typedef Cpu *CpuPtr;
14
15 class CpuLmm;
16 typedef CpuLmm *CpuLmmPtr;
17
18 class CpuAction;
19 typedef CpuAction *CpuActionPtr;
20
21 class CpuActionLmm;
22 typedef CpuActionLmm *CpuActionLmmPtr;
23
24 /*********
25  * Model *
26  *********/
27 class CpuModel : public Model {
28 public:
29   CpuModel(string name) : Model(name) {};
30   CpuPtr createResource(string name);
31   void updateActionsStateLazy(double now, double delta);
32   void updateActionsStateFull(double now, double delta);
33
34   virtual void addTraces() =0;
35 };
36
37 /************
38  * Resource *
39  ************/
40 class Cpu : virtual public Resource {
41 public:
42   Cpu(){};
43   Cpu(CpuModelPtr model, const char* name, xbt_dict_t properties) : Resource(model, name, properties) {};
44   virtual ActionPtr execute(double size)=0;
45   virtual ActionPtr sleep(double duration)=0;
46   virtual int getCore();
47   virtual double getSpeed(double load);
48   virtual double getAvailableSpeed();
49
50   virtual double getCurrentPowerPeak()=0;
51   virtual double getPowerPeakAt(int pstate_index)=0;
52   virtual int getNbPstates()=0;
53   virtual void setPowerPeakAt(int pstate_index)=0;
54   virtual double getConsumedEnergy()=0;
55
56   void addTraces(void);
57   double m_powerPeak;            /*< CPU power peak */
58   double m_powerScale;           /*< Percentage of CPU disponible */
59   int m_core;
60 protected:
61
62   //virtual boost::shared_ptr<Action> execute(double size) = 0;
63   //virtual boost::shared_ptr<Action> sleep(double duration) = 0;
64 };
65
66 class CpuLmm : public ResourceLmm, public Cpu {
67 public:
68   CpuLmm(){};
69   CpuLmm(CpuModelPtr model, const char* name, xbt_dict_t properties) : ResourceLmm(), Cpu(model, name, properties) {};
70   /* Note (hypervisor): */
71   lmm_constraint_t *p_constraintCore;
72 };
73
74 /**********
75  * Action *
76  **********/
77 class CpuAction : virtual public Action {
78 public:
79   CpuAction(){};
80   CpuAction(ModelPtr model, double cost, bool failed)
81   : Action(model, cost, failed) {};
82   virtual void setAffinity(CpuPtr cpu, unsigned long mask)=0;
83   virtual void setBound(double bound)=0;
84 };
85
86 class CpuActionLmm : public ActionLmm, public CpuAction {
87 public:
88   CpuActionLmm(){};
89   CpuActionLmm(ModelPtr model, double cost, bool failed)
90   : Action(model, cost, failed), ActionLmm(model, cost, failed), CpuAction(model, cost, failed) {};
91   void updateRemainingLazy(double now);
92   virtual void updateEnergy()=0;
93   void setAffinity(CpuPtr cpu, unsigned long mask);
94   void setBound(double bound);
95   double m_bound;
96 };
97
98
99 #endif /* SURF_MODEL_CPU_H_ */