source: DCWoRMS/branches/coolemall/src/test/appProfConverter/dcworms/AppProfileConverter.java @ 1334

Revision 1334, 2.6 KB checked in by wojtekp, 11 years ago (diff)
  • Property svn:mime-type set to text/plain
RevLine 
[1334]1package test.appProfConverter.dcworms;
2
3public class AppProfileConverter {
4       
5        public static SoftwareProfile convert(SoftwareProfile refSWProf,
6                        HardwareProfile targetHWProf) {
7                SoftwareProfile newProf = new SoftwareProfile();
8
9                newProf.taskId = refSWProf.taskId;
10                newProf.phases = new SoftwarePhase[refSWProf.phases.length];
11                for (int i = 0; i < newProf.phases.length; i++) {
12                        newProf.phases[i] = convertPhase(refSWProf.phases[i], targetHWProf);
13                }
14
15                return newProf;
16        }
17
18        private static SoftwarePhase convertPhase(SoftwarePhase refPhase,
19                        HardwareProfile targetHW) {
20                SoftwarePhase newPhase;
21                double refCpuWork; // workload is constant in a phase
22                double loadCpu;
23                double t_cpu, t_nic, t_best;
24
25                newPhase = new SoftwarePhase(refPhase);
26                newPhase.RefNode = targetHW.componentId;
27                newPhase.RefFreq = targetHW.proc.maxClockSpeed;
28                newPhase.RefCores = targetHW.proc.cores;
29                newPhase.RefDownload = (double) targetHW.net.maxBandwidth;
30                newPhase.RefUpload = (double) targetHW.net.maxBandwidth;
31
32                refCpuWork = refPhase.RefFreq * refPhase.PM_CPU_Usage
33                                * refPhase.Duration * refPhase.RefCores;
34
35                // Best CPU load and time duration
36                loadCpu = Math.min(1.0, refPhase.PM_CPU_Usage)
37                                * Math.min(1.0,
38                                                ((double) newPhase.PM_Threads / newPhase.RefCores));
39                System.out.println(loadCpu + ";" + refPhase.RefCores + ";" + refPhase.PM_CPU_Usage + ";" + newPhase.PM_Threads + ";" +newPhase.RefCores);
40                t_cpu = refCpuWork / (newPhase.RefCores * newPhase.RefFreq * loadCpu);
41
42                // Best network time duration
43                t_nic = Math.max((double) newPhase.PM_Upload / newPhase.RefUpload,
44                                (double) newPhase.PM_Download / newPhase.RefDownload);
45
46                t_best = Math.max(t_cpu, t_nic);
47
48                // The duration in seconds will impact the load depending on the
49                // approximation error
50                newPhase.Duration = (int) Math.ceil(t_best);
51                // use t_best to debug
52                // newPhase.PM_CPU_Usage = refCpuWork
53                // / (newPhase.RefCores * newPhase.RefFreq * t_best);
54                newPhase.PM_CPU_Usage = refCpuWork
55                                / (newPhase.RefCores * newPhase.RefFreq * newPhase.Duration);
56
57                System.out
58                                .printf("l0:%.2f\tl1:%.2f\td0:%d\td1:%d\tc0:%d\tc1:%d\tf0:%.2f\tf1:%.2f\tt0:%d\tt1:%d\n",
59                                                refPhase.PM_CPU_Usage, newPhase.PM_CPU_Usage,
60                                                refPhase.Duration, newPhase.Duration,
61                                                refPhase.RefCores, newPhase.RefCores, refPhase.RefFreq,
62                                                newPhase.RefFreq, refPhase.PM_Threads,
63                                                newPhase.PM_Threads);
64
65//              double newCpuWork = newPhase.RefFreq * newPhase.PM_CPU_Usage
66//                              * newPhase.Duration * newPhase.RefCores;
67//              if (newCpuWork != refCpuWork) {
68//                      System.out.printf("w0:%.2f\tw0:%.2f\n", refCpuWork, newCpuWork);
69//              }
70
71                newPhase.PM_Power = AppPowerEstimator.PhasePower(newPhase, targetHW);
72
73                return newPhase;
74        }
75}
Note: See TracBrowser for help on using the repository browser.