X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Ffleet%2Fdataflow%2FMergeSort.java;h=459bab55c49993c386f4be017f3a1353c3716cb7;hb=f51ad92a4881b7f2f78eb77bb2a147ee99e9d692;hp=057db66eaa7f7540a8da6a8f15061002f0eb521e;hpb=8c0ded5d44a56e0970895ad1b347130dc529ba25;p=fleet.git diff --git a/src/edu/berkeley/fleet/dataflow/MergeSort.java b/src/edu/berkeley/fleet/dataflow/MergeSort.java index 057db66..459bab5 100644 --- a/src/edu/berkeley/fleet/dataflow/MergeSort.java +++ b/src/edu/berkeley/fleet/dataflow/MergeSort.java @@ -3,8 +3,9 @@ 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 org.ibex.graphics.*; +import org.ibex.graphics.*; public class MergeSort { @@ -38,22 +39,16 @@ public class MergeSort { this.pool = pool; this.program = program; this.dfg = new DataFlowGraph(fleet, pool); - /* - pool.allocateShip(mem1); - if (mem2 != mem1) pool.allocateShip(mem2); - */ - next_dest = makeDfgCodeBag(dfg); + next_dest = makeDfgCodeBag(dfg, program); cb2 = dfg.build(new CodeBag(dfg.fleet, program)); cb2.seal(); } - public Destination makeDfgCodeBag(DataFlowGraph dfg) { + public Destination makeDfgCodeBag(DataFlowGraph dfg, Program program) { 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]; @@ -65,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= vals_length) break; - int pixel = (x>=p.width) ? 0 : p.data[p.width*y+x]; - long r = (pixel>>0) & 0xff; - long g = (pixel>>8) & 0xff; - long b = (pixel>>16) & 0xff; - r >>= 2; - g >>= 2; - b >>= 2; - //r = ~(-1L<<6); - //g = ~(-1L<<6); - //b = ~(-1L<<6); - bvs[(int)index] = new BitVector(fleet.getWordWidth()).set( r | (g<<6) | (b<<12) | (index<<18) ); - index++; - } - */ - for(; index bvs[i+1].toLong()) - System.out.println("sort failure at "+i+":\n "+bvs[i]+"\n "+bvs[i+1]); - } - */ - fp.terminate(); - return ret; - } - - static int offset = 40; - - //static int offset = 32; - //static int offset = 544*2; - //static int offset = 544; - - public long main(FleetProcess fp, int vals_length) throws Exception { + public CodeBag makeInstance(int offset, int length) throws Exception { long base_read = offset; - //long base_write = offset+((vals_length/544)+1)*544; - //long base_write = offset; - long base_write = vals_length + offset; - + long base_write = length + offset; int stride = 1; ArrayList codeBags = new ArrayList(); codeBags.add(new CodeBag(dfg.fleet, program)); - for(; ;) { + for(;;) { CodeBag cb = codeBags.get(codeBags.size()-1); - //System.out.println("cb="+i+", stride="+stride); - boolean last = /*(base_write==offset) && */ (stride*2 >= vals_length); + boolean last = stride*2 >= length; CodeBag next; if (last) { next = program.getEndProgramCodeBag(); @@ -374,79 +132,88 @@ public class MergeSort { next = new CodeBag(dfg.fleet, program); codeBags.add(codeBags.size(), next); } - build(dfg, cb, vals_length, stride, base_read, base_write, next); + + for(int i=0; i "); + System.exit(-1); } - aluAnd.in2.connectForever( ~(-1<<18) ); - mn.inDataWrite.connect(aluAnd.out); - - UnPunctuatorNode discard = new UnPunctuatorNode(dfg, true); - discard.count.connectOnce(length); - discard.val.connect(mn.outWrite); - DoneNode done = new DoneNode(dfg, prog); - discard.out.connect(done.in); - - CodeBag cb = new CodeBag(fp.getFleet(), prog); - dfg.build(cb); - cb.seal(); - - CodeBag cb2 = new CodeBag(fp.getFleet(), prog); - Ship button = fp.getFleet().getShip("Button",0); + Fleet fleet = null; + if (s[0].equals("fpga")) fleet = new Fpga(); + else if (s[0].equals("interpreter")) { + fleet = new Interpreter(); + Log.log = null; + } + ShipPool pool = new ShipPool(fleet); + Ship memory = pool.allocateShip(s[1]); + int base = Integer.parseInt(s[2]); + int length = Integer.parseInt(s[3]); + + Random random = new Random(System.currentTimeMillis()); + BitVector[] vals = new BitVector[length]; + long[] longs = new long[length]; + for(int i=0; i0) System.exit(-1); + } + }