add partial support for writeback to mergesort demo
authoradam <adam@megacz.com>
Tue, 4 Nov 2008 07:41:03 +0000 (08:41 +0100)
committeradam <adam@megacz.com>
Tue, 4 Nov 2008 07:41:03 +0000 (08:41 +0100)
src/edu/berkeley/fleet/ir/Process.java

index eb31fc2..c864931 100644 (file)
@@ -480,13 +480,16 @@ public class Process {
             vals[i] = Math.abs(random.nextInt());
         }
 
+        Ship mem1 = fleet.getShip("Memory", 1);
+        Ship mem2 = fleet.getShip("Memory", 2);
+
         FleetProcess fp;
         int stride = 1;
         fp = null;
         while(stride < vals.length) {
             if (fp==null) fp = fleet.run(new Instruction[0]);
             System.out.println("stride " + stride);
-            vals = mergeSort(fp, fleet, vals, stride);
+            vals = mergeSort(fp, fleet, vals, stride, mem1, mem2);
             stride = stride * 2;
             //fp.terminate(); fp = null;
             System.out.println();
@@ -568,13 +571,14 @@ public class Process {
     }
 
     // FIXME: numbers seem to get duplicated when stride=2
-    public static long[] mergeSort(FleetProcess fp, Fleet fleet, long[] vals, int stride_length) throws Exception {
+    public static long[] mergeSort(FleetProcess fp, Fleet fleet,
+                                   long[] vals, int stride_length,
+                                   Ship memoryShip1, Ship memoryShip2) throws Exception {
 
         BitVector[] mem = new BitVector[vals.length];
         for(int i=0; i<mem.length; i++) mem[i] = new BitVector(fleet.getWordWidth()).set(vals[i]);
 
-        Ship memoryShip = fleet.getShip("DRAM", 0);
-        Gadgets.writeMem(fp, memoryShip, 0, mem);
+        Gadgets.writeMem(fp, memoryShip1, 0, mem);
 
         //////////////////////////////////////////////////////////////////////////////
 
@@ -584,7 +588,8 @@ public class Process {
         int end_of_data = vals.length;
         int num_strides = end_of_data / (stride_length * 2);
 
-        MemoryModule mm = proc.new MemoryModule(memoryShip);
+        MemoryModule mm  = proc.new MemoryModule(memoryShip1);
+        MemoryModule mm2 = proc.new MemoryModule(memoryShip2);
         SortedMergeModule sm = proc.new SortedMergeModule();
 
 
@@ -635,6 +640,15 @@ public class Process {
         UnPunctuatorModule unpunc = proc.new UnPunctuatorModule();
         sm.out.connect(unpunc.val);
         fm.out.connect(unpunc.count);
+
+        /*
+        DownCounterModule cw = proc.new DownCounterModule();
+        proc.new OnceModule(end_of_data).out.connect(cw.start);
+        proc.new OnceModule(1).out.connect(cw.incr);
+        cw.out.connect(mm2.inAddrWrite);
+        unpunc.out.connect(mm2.inDataWrite);
+        mm2.outWrite.connect(dm.in);
+        */
         unpunc.out.connect(dm.in);
 
         //////////////////////////////////////////////////////////////////////////////
@@ -713,8 +727,12 @@ public class Process {
         fp.sendToken(debugIn.getInstructionDestination());
         fp.flush();
 
-        //System.out.println("verifying cleanup:");
-        //verifyClean(fp);
+        System.out.println("verifying cleanup:");
+        verifyClean(fp);
+
+        Gadgets.readMem(fp, memoryShip2, 0, mem);
+        //for(int i=0; i<ret.length; i++) ret[i] = mem[ret.length-i-1].toLong();
+
         return ret;
     }