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