add Fleet.getDefaultImpl() and use it in Makefile
[fleet.git] / src / edu / berkeley / fleet / dataflow / MergeSort.java
index 4faf03e..36f4624 100644 (file)
@@ -49,8 +49,6 @@ public class MergeSort {
         MemoryNode mem_read  = new MemoryNode(dfg, mem1);
         MemoryNode mem_write = (mem1==mem2) ? mem_read : new MemoryNode(dfg, mem2);
 
-        AluNode sm = new AluNode(dfg, "MAXMERGE");
-
         pn0 = new ParameterNode[arity];
         pn1 = new ParameterNode[arity];
         pn2 = new ParameterNode[arity];
@@ -62,14 +60,15 @@ public class MergeSort {
         pn5 = new ParameterNode(dfg);
         pn6 = new ParameterNode(dfg, true);
 
+        AluNode sm = new AluNode(dfg, "MAXMERGE");
         // So far: we have four spare Counter ships; one can be used for resetting
         for(int i=0; i<arity; i++) {
 
             DownCounterNode c0 = new DownCounterNode(dfg);
-            DownCounterNode c1 = new DownCounterNode(dfg);
-
             c0.start.connect((pn0[i] = new ParameterNode(dfg, true)).out);
             c0.incr.connect(new ForeverNode(dfg, 1).out);
+
+            DownCounterNode c1 = new DownCounterNode(dfg);
             c1.start.connect((pn1[i] = new ParameterNode(dfg)).out);
             c1.incr.connect((pn2[i] = new ParameterNode(dfg)).out);
 
@@ -78,11 +77,12 @@ public class MergeSort {
             r1.count.connect((pn3[i] = new ParameterNode(dfg, true)).out);
 
             AluNode alu1 = new AluNode(dfg, "ADD");
-            AluNode alu2 = new AluNode(dfg, "ADD");
             alu1.in1.connect(r1.out);
             alu1.in2.connect(c0.out);
-            alu1.out.connect(alu2.in2);
+
+            AluNode alu2 = new AluNode(dfg, "ADD");
             alu2.in1.connect((pn_base1[i] = new ParameterNode(dfg, true)).out);
+            alu2.in2.connect(alu1.out);
             alu2.out.connect(i==0 ? mem_read.inAddrRead1 : mem_read.inAddrRead2);
 
             PunctuatorNode punc = new PunctuatorNode(dfg, -1);
@@ -102,6 +102,7 @@ public class MergeSort {
         AluNode alu = new AluNode(dfg, "ADD");
         alu.in1.connect(pn_base2.out);
         cw.out.connect(alu.in2);
+
         mem_write.inAddrWrite.connect(alu.out);
         mem_write.inDataWrite.connect(unpunc.out);
 
@@ -140,10 +141,10 @@ public class MergeSort {
                 if (pn4[i]!=null) pn4[i].set(cb, stride);
                 if (pn_base1[i]!=null) pn_base1[i].set(cb, base_read);
             }
-            pn5.set(cb, length);
-            pn6.set(cb, 2*stride+1);
-            pn_base2.set(cb, base_write);
-            pn_end.set(cb, length);
+            if (pn5!=null) pn5.set(cb, length);
+            if (pn6!=null) pn6.set(cb, 2*stride+1);
+            if (pn_base2!=null) pn_base2.set(cb, base_write);
+            if (pn_end!=null) pn_end.set(cb, length);
             cb.sendWord(cb2.getDescriptor(), program.getCBDDestination());
             cb.sendWord(next.getDescriptor(), next_dest);
 
@@ -157,20 +158,15 @@ public class MergeSort {
     }
 
     public static void main(String[] s) throws Exception {
-        if (s.length != 4) {
-            System.err.println("usage: java " + MergeSort.class.getName() + " <target> <shipname> <base> <length>");
+        if (s.length != 3) {
+            System.err.println("usage: java " + MergeSort.class.getName() + " <shipname> <base> <length>");
             System.exit(-1);
         }
-        Fleet fleet = null;
-        if (s[0].equals("fpga"))             fleet = new Fpga();
-        else if (s[0].equals("interpreter")) {
-            fleet = new Interpreter();
-            Log.log = null;
-        }
+        Fleet fleet = Fleet.getDefaultImpl();
         ShipPool pool = new ShipPool(fleet);
-        Ship memory = pool.allocateShip(s[1]);
-        int base = Integer.parseInt(s[2]);
-        int length = Integer.parseInt(s[3]);
+        Ship memory = pool.allocateShip(s[0]);
+        int base = Integer.parseInt(s[1]);
+        int length = Integer.parseInt(s[2]);
 
         Random random = new Random(System.currentTimeMillis());        
         BitVector[] vals  = new BitVector[length];
@@ -193,7 +189,8 @@ public class MergeSort {
         Program program = new Program(codemem);
         CodeBag cb = new MergeSort(fleet, program, pool2, 2, memory, memory).makeInstance(base, length);
         pool2.releaseAll();
-        long ret = program.run(fp, cb, pool2);
+        long ret = 0;
+        ret = program.run(fp, cb, pool2);
         pool2.releaseAll();
 
         MemoryUtils.readMem(fp, pool2, memory, base, vals);