Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
60d35dd26e6090e213622f965927a16c4a964912
[simgrid.git] / examples / java / surfCpuModel / CpuConstantModel.java
1 package surfCpuModel;
2
3 import org.simgrid.surf.*;
4 import org.simgrid.msg.Msg;
5 import java.util.List;
6 import java.util.ArrayList;
7
8 public class CpuConstantModel extends CpuModel {
9
10   private List<CpuConstant> cpus = new ArrayList<CpuConstant>();
11
12   public CpuConstantModel() {
13     Msg.info("Initialize Cpu Constant Model");
14   }
15
16   public Cpu createCpu(String name, double[] power_peak, int pstate, double power_scale, TmgrTrace power_trace, int core, ResourceState state_initial, TmgrTrace state_trace, XbtDict cpu_properties) {
17     Msg.info("New Cpu("+name+", "+power_peak[pstate]+", "+power_scale+")");
18
19     CpuConstant res = new CpuConstant(this, name, cpu_properties, core, power_peak[pstate], power_scale);
20     cpus.add(res);
21     return res;
22   }
23
24   public double shareResources(double now) {
25     double res = -1;
26     for (int i=0; i<cpus.size();i++){
27       double tmp = cpus.get(i).share(now);
28       if (tmp!=-1 && (res==-1 || tmp<res))
29         res = tmp;
30     }
31     Msg.info("ShareResources at time "+res);
32     return res;
33   }
34
35   public void updateActionsState(double now, double delta) {
36     Action[] actions = getRunningActionSet().getArray();
37     Msg.info("UpdateActionState of "+actions.length+" actions");
38     for (int i=0; i<actions.length; i++) {
39       CpuConstantAction action = (CpuConstantAction)actions[i];
40       action.update(delta);
41       if (!action.sleeping()) {
42         Msg.info("action remains "+action.getRemains()+" after delta of "+delta);
43         if (action.getRemains()==0.0){
44           action.setState(ActionState.SURF_ACTION_DONE);
45           Msg.info("action DONE");
46         }
47       }
48     }
49   }
50
51   public void addTraces() {
52   }
53
54 public class CpuConstant extends Cpu {
55   private List<CpuConstantAction> actions = new ArrayList<CpuConstantAction>();
56
57   public CpuConstant(CpuConstantModel model, String name, XbtDict props,
58                      int core, double powerPeak, double powerScale) {
59     super(model, name, props, core, powerPeak, powerScale);
60   }
61
62   public void remove(CpuConstantAction action){
63     actions.remove(action);
64   }
65
66   public CpuAction execute(double size) {
67     CpuConstantAction res = new CpuConstantAction(getModel(), size, false, false, this);
68     Msg.info("Execute action of size "+size+" sleeping "+res.sleeping());
69     actions.add(res);
70     return res;
71   }
72
73   public CpuAction sleep(double duration) {
74     CpuConstantAction res = new CpuConstantAction(getModel(), duration, false, true, this);
75     Msg.info("Sleep action of duration "+duration+" sleeping "+res.sleeping());
76     return res;
77   }
78
79   public double share(double now){
80     double res = -1;
81     for (int i=0; i<actions.size();i++){
82       double tmp = actions.get(i).getRemains()/getCurrentPowerPeak();
83       Msg.info("Share action with new time "+tmp);
84       if (res==-1 || tmp<res)
85         res = tmp;
86     }
87     return res;
88   }
89
90   public ResourceState getState(){
91     return ResourceState.SURF_RESOURCE_ON;
92   }
93 }
94
95 public class CpuConstantAction extends CpuAction {
96   boolean sleep;
97   CpuConstant cpu;
98   public CpuConstantAction(Model model, double cost, boolean failed, boolean sleep, CpuConstant cpu) {
99     super(model, cost, failed);
100     this.sleep = sleep;
101     this.cpu = cpu;
102   }
103
104   public void update(double delta){
105     updateRemains(delta*cpu.getCurrentPowerPeak());
106   }
107   public synchronized void delete() {
108     cpu.remove(this);
109     super.delete();
110   }
111
112   public boolean sleeping() {return sleep;}
113   public void setPriority(double priority) {}
114 }
115 }