change to use less memory
authorbdemsky <bdemsky>
Wed, 11 Mar 2009 06:22:56 +0000 (06:22 +0000)
committerbdemsky <bdemsky>
Wed, 11 Mar 2009 06:22:56 +0000 (06:22 +0000)
Robust/src/Benchmarks/Prefetch/ManualPrefetch/2DFFT/fft2d.java

index 82fee742ac506eed095802479791c543159abcd8..5813989b8d0c6e28656c76c228ad101a43b08ed4 100644 (file)
@@ -9,13 +9,12 @@ public class fft2d extends Thread {
   //
   // Code borrowed from :Java Digital Signal Processing book by Lyon and Rao
 
   //
   // Code borrowed from :Java Digital Signal Processing book by Lyon and Rao
 
-  public Matrix data1, data2;
+  public Matrix data1;
   public int x0, x1;
 
   // Constructor: 2-d FFT of Complex data.
   public int x0, x1;
 
   // Constructor: 2-d FFT of Complex data.
-  public fft2d(Matrix data1, Matrix data2, int x0, int x1) {
+  public fft2d(Matrix data1, int x0, int x1) {
     this.data1 = data1;
     this.data1 = data1;
-    this.data2 = data2;
     this.x0 = x0;
     this.x1 = x1;
   }
     this.x0 = x0;
     this.x1 = x1;
   }
@@ -64,7 +63,7 @@ public class fft2d extends Thread {
       for (int i = x0; i < x1; i++,l++) {
        //input of FFT
         if ((l&15)==0) {
       for (int i = x0; i < x1; i++,l++) {
        //input of FFT
         if ((l&15)==0) {
-           offsets2[0] = (short) l+x0
+           offsets2[0] = (short) (l+x0)
            if ((l+x0+16)>= x1) {
                int t=x1-l-x0-1;
                if (t>0) {
            if ((l+x0+16)>= x1) {
                int t=x1-l-x0-1;
                if (t>0) {
@@ -90,9 +89,7 @@ public class fft2d extends Thread {
     // Tranpose data.
     if (start == 0) {
       atomic {
     // Tranpose data.
     if (start == 0) {
       atomic {
-         //NO PREFETCH HERE...ALL DATA IS LOCAL
-
-        transpose(tempdataRe,tempdataIm, data2.dataRe,data2.dataIm, rowlength, columnlength);
+        transpose(tempdataRe, tempdataIm, rowlength, columnlength);
       }
     }
 
       }
     }
 
@@ -106,18 +103,18 @@ public class fft2d extends Thread {
       // 
       // Add manual prefetch 
       // prefetch data2.dataRe[start -> end]
       // 
       // Add manual prefetch 
       // prefetch data2.dataRe[start -> end]
-      Object o1 = data2.dataRe;
+      Object o1 = data1.dataRe;
       short[] offsets1 = new short[2];
       offsets1[0] = (short) start;
       offsets1[1] = (short) 15;
       System.rangePrefetch(o1, offsets1);
 
       short[] offsets1 = new short[2];
       offsets1[0] = (short) start;
       offsets1[1] = (short) 15;
       System.rangePrefetch(o1, offsets1);
 
-      o1 = data2.dataIm;
+      o1 = data1.dataIm;
       System.rangePrefetch(o1, offsets1);
       /////////////////////
 
       System.rangePrefetch(o1, offsets1);
       /////////////////////
 
-      transtempRe = data2.dataRe;
-      transtempIm = data2.dataIm;
+      transtempRe = data1.dataRe;
+      transtempIm = data1.dataIm;
       int l=8;
       for (int j = start; j < end; j++,l++) {
          if ((l&15)==0) {
       int l=8;
       for (int j = start; j < end; j++,l++) {
          if ((l&15)==0) {
@@ -143,14 +140,19 @@ public class fft2d extends Thread {
     }
   } //end of run
 
     }
   } //end of run
 
-  public void transpose(double[][] tempdataRe, double[][] tempdataIm, double[][] outputRe,
-                        double[][] outputIm, int rowlength, int columnlength) {
+  public void transpose(double[][] tempdataRe, double[][] tempdataIm, int rowlength, int columnlength) {
     for(int i = 0; i<rowlength; i++) {
       double tRe[] = tempdataRe[i];
       double tIm[] = tempdataIm[i];
     for(int i = 0; i<rowlength; i++) {
       double tRe[] = tempdataRe[i];
       double tIm[] = tempdataIm[i];
-      for(int j = 0; j<columnlength; j++) {
-       outputRe[j][i] = tRe[j];
-       outputIm[j][i] = tIm[j];
+      double a;
+
+      for(int j = 0; j<i; j++) {
+       a=tempdataRe[j][i];
+       tempdataRe[j][i] = tRe[j];
+        tRe[j]=a;
+       a=tempdataIm[j][i];
+       tempdataIm[j][i] = tIm[j];
+        tIm[j]=a;
       }
     }
   }
       }
     }
   }
@@ -186,24 +188,21 @@ public class fft2d extends Thread {
     mybarr.start(mid[0]);
 
     Matrix data1;
     mybarr.start(mid[0]);
 
     Matrix data1;
-    Matrix data2;
 
     // Create threads to do FFT
     fft2d[] myfft2d;
     atomic {
       // Set up data for FFT transform
       data1 = global new Matrix(SIZE, SIZE);
 
     // Create threads to do FFT
     fft2d[] myfft2d;
     atomic {
       // Set up data for FFT transform
       data1 = global new Matrix(SIZE, SIZE);
-      data2 = global new Matrix(SIZE, SIZE);
       data1.setValues(); //Input Matrix
       data1.setValues(); //Input Matrix
-      data2.setZeros(); //Transpose Matrix
       myfft2d = global new fft2d[NUM_THREADS];
       int increment = SIZE/NUM_THREADS;
       int base = 0;
       for(int i =0 ; i<NUM_THREADS; i++) {
        if((i+1)==NUM_THREADS)
       myfft2d = global new fft2d[NUM_THREADS];
       int increment = SIZE/NUM_THREADS;
       int base = 0;
       for(int i =0 ; i<NUM_THREADS; i++) {
        if((i+1)==NUM_THREADS)
-         myfft2d[i] = global new fft2d(data1, data2, base, SIZE);
+         myfft2d[i] = global new fft2d(data1, base, SIZE);
        else
        else
-         myfft2d[i] = global new fft2d(data1, data2, base, base+increment);
+         myfft2d[i] = global new fft2d(data1, base, base+increment);
        base+=increment;
       }
     }
        base+=increment;
       }
     }