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 {
}
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());
+ }
+
+}