X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Ffleet%2Fdataflow%2FMergeSort.java;h=459bab55c49993c386f4be017f3a1353c3716cb7;hb=f51ad92a4881b7f2f78eb77bb2a147ee99e9d692;hp=36cd08f5fe579dfb81fb5b495399c856255f16bf;hpb=ae51f2527228add7cc93f0e96ac26ed2acba4893;p=fleet.git diff --git a/src/edu/berkeley/fleet/dataflow/MergeSort.java b/src/edu/berkeley/fleet/dataflow/MergeSort.java index 36cd08f..459bab5 100644 --- a/src/edu/berkeley/fleet/dataflow/MergeSort.java +++ b/src/edu/berkeley/fleet/dataflow/MergeSort.java @@ -1,223 +1,219 @@ package edu.berkeley.fleet.dataflow; +import java.util.*; +import java.io.*; import edu.berkeley.fleet.loops.*; import edu.berkeley.fleet.api.*; +import edu.berkeley.fleet.interpreter.*; import edu.berkeley.fleet.fpga.*; -import java.util.*; +import org.ibex.graphics.*; public class MergeSort { - public static long[] mergeSort(FleetProcess fp, Fleet fleet, - long[] vals, int vals_length, int stride_length, - Ship memoryShip1, Ship memoryShip2) throws Exception { - - if (vals != null) { - BitVector[] mem = new BitVector[vals_length]; - for(int i=0; i ai = new ArrayList(); - proc.build(ctx); - ctx.emit(ai); - for(Instruction ins : ai) { - //System.out.println(ins); - fp.sendInstruction(ins); - } - fp.flush(); + mem_write.inAddrWrite.connect(alu.out); + mem_write.inDataWrite.connect(unpunc.out); - for(int i=0; i codeBags = new ArrayList(); + codeBags.add(new CodeBag(dfg.fleet, program)); + for(;;) { + CodeBag cb = codeBags.get(codeBags.size()-1); + boolean last = stride*2 >= length; + CodeBag next; + if (last) { + next = program.getEndProgramCodeBag(); + } else { + next = new CodeBag(dfg.fleet, program); + codeBags.add(codeBags.size(), next); + } + + for(int i=0; i "); + System.exit(-1); } - - 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(); + Fleet fleet = null; + if (s[0].equals("fpga")) fleet = new Fpga(); + else if (s[0].equals("interpreter")) { + fleet = new Interpreter(); + Log.log = null; } - - BitVector[] bvs = new BitVector[vals_length]; - MemoryUtils.readMem(fp, mem1, 0, bvs); - System.out.println("results:"); - for(int i=0; i0) System.exit(-1); + } - + }