| [2537] | 1 | /*  Class CPUPower .. Test performances CPU en Java     */
 | 
|---|
 | 2 | /*  Compilation: javac cpupower.java                    */
 | 
|---|
 | 3 | /*  Execution: java CPUPower Ope Size                   */ 
 | 
|---|
 | 4 | /*  R. Ansari - LAL/UPS - Mai 2004                      */
 | 
|---|
 | 5 | 
 | 
|---|
 | 6 | import java.lang.*;
 | 
|---|
 | 7 | 
 | 
|---|
 | 8 | class CPUPower {
 | 
|---|
 | 9 |  
 | 
|---|
 | 10 |   public static void main(String[] args) throws java.io.IOException {
 | 
|---|
 | 11 |     if (args.length < 1) { 
 | 
|---|
 | 12 |         System.out.println("Java CPUPower.main() Usage: java CPUPower Ope=1/2/3/4/5 [Size=20000]");
 | 
|---|
 | 13 |       return;
 | 
|---|
 | 14 |     }
 | 
|---|
 | 15 |     Integer aOp = new Integer(args[0]);
 | 
|---|
 | 16 |     Integer N;
 | 
|---|
 | 17 |     if (args.length > 1) N  = new Integer(args[1]);
 | 
|---|
 | 18 |     else N = new Integer("20000");
 | 
|---|
 | 19 |     int sz = N.intValue();
 | 
|---|
 | 20 |     if (sz < 10) sz = 20000;
 | 
|---|
 | 21 |     int ope = aOp.intValue();
 | 
|---|
 | 22 |     System.out.println("Java CPUPower: OPE= " + ope + " SZ= " + sz);    
 | 
|---|
 | 23 |     CPUPower cpup = new CPUPower(sz);
 | 
|---|
 | 24 |     cpup.Compute(ope);    
 | 
|---|
 | 25 |   }
 | 
|---|
 | 26 | 
 | 
|---|
 | 27 |   double x[];
 | 
|---|
 | 28 |   double y[];
 | 
|---|
 | 29 |   double z[];
 | 
|---|
 | 30 |   int SZ;
 | 
|---|
 | 31 |   int OPE;
 | 
|---|
 | 32 |   long N_OP;
 | 
|---|
 | 33 |   long tml,tm,dtm;
 | 
|---|
 | 34 |  
 | 
|---|
 | 35 |   CPUPower(int sz) {   
 | 
|---|
 | 36 |     tml = System.currentTimeMillis();
 | 
|---|
 | 37 |     SZ = sz;
 | 
|---|
 | 38 |     x = new double[SZ];
 | 
|---|
 | 39 |     y = new double[SZ];
 | 
|---|
 | 40 |     z = new double[SZ];
 | 
|---|
 | 41 |     int k;
 | 
|---|
 | 42 |     for(k=0; k<SZ; k++) {
 | 
|---|
 | 43 |       double xx = (k%340);
 | 
|---|
 | 44 |       x[k] = Math.PI*Math.exp(-xx/160.);
 | 
|---|
 | 45 |       y[k] = Math.sin(x[k]);
 | 
|---|
 | 46 |       z[k] = 0.;
 | 
|---|
 | 47 |     }
 | 
|---|
 | 48 |     N_OP = 0;
 | 
|---|
 | 49 |     tm = System.currentTimeMillis();
 | 
|---|
 | 50 |     dtm = tm-tml;
 | 
|---|
 | 51 |     tml = tm;
 | 
|---|
 | 52 |     System.out.println("CPUPower.CPUPower  Time= " + dtm + "  ms ..."); 
 | 
|---|
 | 53 | 
 | 
|---|
 | 54 |   }
 | 
|---|
 | 55 | 
 | 
|---|
 | 56 |   public void Compute(int ope) { 
 | 
|---|
 | 57 |     OPE = ope;
 | 
|---|
 | 58 |     System.out.println("CPUPower.Compute() OPE= " + OPE );
 | 
|---|
 | 59 |     tml = System.currentTimeMillis();
 | 
|---|
 | 60 |     if (OPE == 5)  fop5();
 | 
|---|
 | 61 |     else if (OPE == 4)  fop4();
 | 
|---|
 | 62 |     else if (OPE == 3)  fop3();
 | 
|---|
 | 63 |     else if (OPE == 2)  fop2();
 | 
|---|
 | 64 |     else fop1();
 | 
|---|
 | 65 |     tm = System.currentTimeMillis();
 | 
|---|
 | 66 |     dtm = tm-tml;
 | 
|---|
 | 67 |     tml = tm;
 | 
|---|
 | 68 |     double mflops = N_OP;
 | 
|---|
 | 69 |     mflops = mflops/dtm*1.e-3;
 | 
|---|
 | 70 |     System.out.println("CPUPower.Compute() N_OP= " + N_OP + " Time= " + dtm + "  ms ");
 | 
|---|
 | 71 |     System.out.println("CPUPower.Compute()  Time= " + dtm + "  ms  -> MFLOPS= " + mflops); 
 | 
|---|
 | 72 |   }
 | 
|---|
 | 73 | 
 | 
|---|
 | 74 |   public void fop1() {
 | 
|---|
 | 75 |     System.out.println("CPUPower.fop1(): Double Loop: z[k] = Somme_i(x[k]*y[i]) --");
 | 
|---|
 | 76 |     int i,j,k;
 | 
|---|
 | 77 |     double s = 0.;
 | 
|---|
 | 78 |     for(k=0; k<SZ; k++) {
 | 
|---|
 | 79 |       for(i=0; i<SZ; i++)  s += x[k]*y[i];
 | 
|---|
 | 80 |       z[k] = s;
 | 
|---|
 | 81 |       N_OP += 2*SZ;
 | 
|---|
 | 82 |     }    
 | 
|---|
 | 83 |     return;
 | 
|---|
 | 84 |   }
 | 
|---|
 | 85 |  
 | 
|---|
 | 86 |   public void fop2() {
 | 
|---|
 | 87 |     System.out.println("CPUPower.fop2() Double Loop: z[k] = Somme_i(x[k]*y[i]+x[i]*y[k] --");
 | 
|---|
 | 88 |     double s = 0.;
 | 
|---|
 | 89 |     int i,j,k;
 | 
|---|
 | 90 |     for(k=0; k<SZ; k++) {
 | 
|---|
 | 91 |       for(i=0; i<SZ; i++)  s += x[k]*y[i]+x[i]*y[k];
 | 
|---|
 | 92 |       z[k] = s;
 | 
|---|
 | 93 |       N_OP += 4*SZ;
 | 
|---|
 | 94 |     }
 | 
|---|
 | 95 | 
 | 
|---|
 | 96 |   return;
 | 
|---|
 | 97 |   }
 | 
|---|
 | 98 | 
 | 
|---|
 | 99 |   public void fop3() {
 | 
|---|
 | 100 |     System.out.println("CPUPower.fop3() Double Loop: z[k] = Somme_i(x[k]*y[i]+x[i]*y[k]-0.85*(y[k]+x[k])) --");
 | 
|---|
 | 101 |     double s = 0.;
 | 
|---|
 | 102 |     int i,j,k;
 | 
|---|
 | 103 |     for(k=0; k<SZ; k++) {
 | 
|---|
 | 104 |       for(i=0; i<SZ; i++)  s += x[k]*y[i]+x[i]*y[k]-0.85*(y[k]+x[k]);
 | 
|---|
 | 105 |       z[k] = s;
 | 
|---|
 | 106 |       N_OP += 7*SZ;
 | 
|---|
 | 107 |     }
 | 
|---|
 | 108 |   return;
 | 
|---|
 | 109 |   }
 | 
|---|
 | 110 |   public void fop4() {
 | 
|---|
 | 111 |     System.out.println("CPUPower.fop4() Double Loop: z[k] = Somme_i(x[k]*sin(y[i])+y[k]*cos(x[i])) --");
 | 
|---|
 | 112 |     double s = 0.;
 | 
|---|
 | 113 |     int i,j,k;
 | 
|---|
 | 114 |     for(k=0; k<SZ; k++) {
 | 
|---|
 | 115 |       for(i=0; i<SZ; i++)  s += x[k]*Math.sin(y[i])+y[k]*Math.cos(x[i]);
 | 
|---|
 | 116 |       z[k] = s;
 | 
|---|
 | 117 |       N_OP += 70*SZ;  // le facteur 70 est approximatif
 | 
|---|
 | 118 |     }
 | 
|---|
 | 119 |   }
 | 
|---|
 | 120 |   public void fop5() {
 | 
|---|
 | 121 |     System.out.println("CPUPower.fop5() Double Loop: z[k] = Somme_i(x[k]*sin(y[i])+log(abs(x[i])+0.1)+y[k]) --");
 | 
|---|
 | 122 |     double s = 0.;
 | 
|---|
 | 123 |     int i,j,k;
 | 
|---|
 | 124 |     for(k=0; k<SZ; k++) {
 | 
|---|
 | 125 |       for(i=0; i<SZ; i++)  s += x[k]*Math.sin(y[i])+Math.log(Math.abs(x[i])+0.1)+y[k];
 | 
|---|
 | 126 |       z[k] = s;
 | 
|---|
 | 127 |       N_OP += 100*SZ;  // le facteur 100 est approximatif
 | 
|---|
 | 128 |     }
 | 
|---|
 | 129 |   }
 | 
|---|
 | 130 | 
 | 
|---|
 | 131 | }
 | 
|---|
 | 132 | 
 | 
|---|
 | 133 | 
 | 
|---|
 | 134 | 
 | 
|---|
 | 135 | 
 | 
|---|
 | 136 | 
 | 
|---|
 | 137 | 
 | 
|---|