Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge lmm into base to avoid diamond inheritance
[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 CpuAction;
17 typedef CpuAction *CpuActionPtr;
18
19 /*********
20  * Model *
21  *********/
22 class CpuModel : public Model {
23 public:
24   CpuModel(const char *name) : Model(name) {};
25   CpuPtr createResource(string name);
26   void updateActionsStateLazy(double now, double delta);
27   void updateActionsStateFull(double now, double delta);
28
29   virtual void addTraces() =0;
30 };
31
32 /************
33  * Resource *
34  ************/
35 class Cpu : public Resource {
36 public:
37   Cpu(){};
38   /*Cpu(lmm_constraint_t constraint);*/
39   Cpu(ModelPtr model, const char *name, xbt_dict_t props,
40           lmm_constraint_t constraint, int core, double powerPeak, double powerScale);
41   Cpu(ModelPtr model, const char *name, xbt_dict_t props,
42           int core, double powerPeak, double powerScale);
43   ~Cpu();
44   virtual CpuActionPtr execute(double size)=0;
45   virtual CpuActionPtr 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   int m_core;
58   double m_powerPeak;            /*< CPU power peak */
59   double m_powerScale;           /*< Percentage of CPU disponible */
60
61   /* Note (hypervisor): */
62   lmm_constraint_t *p_constraintCore;
63   void **p_constraintCoreId;
64 };
65
66 /**********
67  * Action *
68  **********/
69 class CpuAction : public Action {
70 public:
71   CpuAction(){};
72   CpuAction(ModelPtr model, double cost, bool failed)
73   : Action(model, cost, failed) {} //FIXME:REMOVE
74   CpuAction(ModelPtr model, double cost, bool failed, lmm_variable_t var)
75   : Action(model, cost, failed, var) {}
76   virtual void setAffinity(CpuPtr cpu, unsigned long mask);
77   virtual void setBound(double bound);
78
79   void updateRemainingLazy(double now);
80   virtual void updateEnergy()=0;
81   double m_bound;
82 };
83
84 #endif /* SURF_CPU_INTERFACE_HPP_ */