refactoring in dataflow
[fleet.git] / src / edu / berkeley / fleet / dataflow / MergeSort.java
index cdfc8b3..36cd08f 100644 (file)
@@ -1,6 +1,7 @@
 package edu.berkeley.fleet.dataflow;
 import edu.berkeley.fleet.loops.*;
 import edu.berkeley.fleet.api.*;
+import edu.berkeley.fleet.fpga.*;
 import java.util.*;
 
 public class MergeSort {
@@ -163,4 +164,60 @@ public class MergeSort {
         }
         return ret;
     }
-}
\ No newline at end of file
+
+    /** demo */
+    public static void main(String[] s) throws Exception {
+        Fleet fleet = new Fpga();
+        //Fleet fleet = new Interpreter(false);
+
+        Random random = new Random(System.currentTimeMillis());
+        long[] vals = new long[256];
+        for(int i=0; i<vals.length; i++) {
+            vals[i] = Math.abs(random.nextInt());
+        }
+
+        Ship mem1 = fleet.getShip("Memory", 0);
+        Ship mem2 = fleet.getShip("Memory", 1);
+        //Ship mem2 = fleet.getShip("DDR2", 0);
+
+        FleetProcess fp;
+        int stride = 1;
+        fp = null;
+
+        fp = fleet.run(new Instruction[0]);
+        MemoryUtils.writeMem(fp, mem1, 0, vals);
+        int vals_length = vals.length;
+
+        // Disable readback/writeback inside the loop
+        vals = null;
+
+        while(stride < vals_length) {
+            
+            // reset the FleetProcess
+            //fp.terminate(); fp = null;
+
+            System.out.println("stride " + stride);
+
+            // if we reset the FleetProcess, restart it
+            if (fp==null) fp = fleet.run(new Instruction[0]);
+
+            // do the mergeSort
+            vals = MergeSort.mergeSort(fp, fleet, vals, vals_length, stride, mem1, mem2);
+
+            // verify the cleanup
+            //CleanupUtils.verifyClean(fp);
+
+            Ship mem = mem1; mem1=mem2; mem2=mem;
+
+            stride = stride * 2;
+            System.out.println();
+        }
+
+        BitVector[] bvs = new BitVector[vals_length];
+        MemoryUtils.readMem(fp, mem1, 0, bvs);
+        System.out.println("results:");
+        for(int i=0; i<vals_length; i++)
+            System.out.println(bvs[i].toLong());
+    }
+
+}