Logo AND Algorithmique Numérique Distribuée

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